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

Artifact bb0e84eda9beb447bff109b061a82e6c9b3dc811:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 4d 61 69 6e 20 66  ******.** Main f
0180: 69 6c 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ile for the SQLi
0190: 74 65 20 6c 69 62 72 61 72 79 2e 20 20 54 68 65  te library.  The
01a0: 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 69   routines in thi
01b0: 73 20 66 69 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d  s file.** implem
01c0: 65 6e 74 20 74 68 65 20 70 72 6f 67 72 61 6d 6d  ent the programm
01d0: 65 72 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  er interface to 
01e0: 74 68 65 20 6c 69 62 72 61 72 79 2e 20 20 52 6f  the library.  Ro
01f0: 75 74 69 6e 65 73 20 69 6e 0a 2a 2a 20 6f 74 68  utines in.** oth
0200: 65 72 20 66 69 6c 65 73 20 61 72 65 20 66 6f 72  er files are for
0210: 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 20 62 79   internal use by
0220: 20 53 51 4c 69 74 65 20 61 6e 64 20 73 68 6f 75   SQLite and shou
0230: 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 61 63 63  ld not be.** acc
0240: 65 73 73 65 64 20 62 79 20 75 73 65 72 73 20 6f  essed by users o
0250: 66 20 74 68 65 20 6c 69 62 72 61 72 79 2e 0a 2a  f the library..*
0260: 2a 0a 2a 2a 20 24 49 64 3a 20 6d 61 69 6e 2e 63  *.** $Id: main.c
0270: 2c 76 20 31 2e 31 37 38 20 32 30 30 34 2f 30 35  ,v 1.178 2004/05
0280: 2f 32 30 20 32 32 3a 31 36 3a 32 39 20 64 72 68  /20 22:16:29 drh
0290: 20 45 78 70 20 24 0a 2a 2f 0a 23 69 6e 63 6c 75   Exp $.*/.#inclu
02a0: 64 65 20 22 73 71 6c 69 74 65 49 6e 74 2e 68 22  de "sqliteInt.h"
02b0: 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22  .#include "os.h"
02c0: 0a 23 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65  .#include <ctype
02d0: 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69  .h>../*.** A poi
02e0: 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
02f0: 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74  ucture is used t
0300: 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e  o communicate in
0310: 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f  formation.** fro
0320: 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20 69 6e  m sqlite3Init in
0330: 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e  to the sqlite3In
0340: 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74  itCallback..*/.t
0350: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a  ypedef struct {.
0360: 20 20 73 71 6c 69 74 65 20 2a 64 62 3b 20 20 20    sqlite *db;   
0370: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
0380: 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74  abase being init
0390: 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61  ialized */.  cha
03a0: 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20  r **pzErrMsg;   
03b0: 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67   /* Error messag
03c0: 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
03d0: 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a  .} InitData;../*
03e0: 0a 2a 2a 20 46 69 6c 6c 20 74 68 65 20 49 6e 69  .** Fill the Ini
03f0: 74 44 61 74 61 20 73 74 72 75 63 74 75 72 65 20  tData structure 
0400: 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20 6d 65  with an error me
0410: 73 73 61 67 65 20 74 68 61 74 20 69 6e 64 69 63  ssage that indic
0420: 61 74 65 73 0a 2a 2a 20 74 68 61 74 20 74 68 65  ates.** that the
0430: 20 64 61 74 61 62 61 73 65 20 69 73 20 63 6f 72   database is cor
0440: 72 75 70 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  rupt..*/.static 
0450: 76 6f 69 64 20 63 6f 72 72 75 70 74 53 63 68 65  void corruptSche
0460: 6d 61 28 49 6e 69 74 44 61 74 61 20 2a 70 44 61  ma(InitData *pDa
0470: 74 61 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ta, const char *
0480: 7a 45 78 74 72 61 29 7b 0a 20 20 73 71 6c 69 74  zExtra){.  sqlit
0490: 65 33 53 65 74 53 74 72 69 6e 67 28 70 44 61 74  e3SetString(pDat
04a0: 61 2d 3e 70 7a 45 72 72 4d 73 67 2c 20 22 6d 61  a->pzErrMsg, "ma
04b0: 6c 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65  lformed database
04c0: 20 73 63 68 65 6d 61 22 2c 0a 20 20 20 20 20 7a   schema",.     z
04d0: 45 78 74 72 61 21 3d 30 20 26 26 20 7a 45 78 74  Extra!=0 && zExt
04e0: 72 61 5b 30 5d 21 3d 30 20 3f 20 22 20 2d 20 22  ra[0]!=0 ? " - "
04f0: 20 3a 20 28 63 68 61 72 2a 29 30 2c 20 7a 45 78   : (char*)0, zEx
0500: 74 72 61 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a  tra, (char*)0);.
0510: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73  }../*.** This is
0520: 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 72 6f   the callback ro
0530: 75 74 69 6e 65 20 66 6f 72 20 74 68 65 20 63 6f  utine for the co
0540: 64 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69  de that initiali
0550: 7a 65 73 20 74 68 65 0a 2a 2a 20 64 61 74 61 62  zes the.** datab
0560: 61 73 65 2e 20 20 53 65 65 20 73 71 6c 69 74 65  ase.  See sqlite
0570: 33 49 6e 69 74 28 29 20 62 65 6c 6f 77 20 66 6f  3Init() below fo
0580: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
0590: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ormation..**.** 
05a0: 45 61 63 68 20 63 61 6c 6c 62 61 63 6b 20 63 6f  Each callback co
05b0: 6e 74 61 69 6e 73 20 74 68 65 20 66 6f 6c 6c 6f  ntains the follo
05c0: 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  wing information
05d0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 72 67 76  :.**.**     argv
05e0: 5b 30 5d 20 3d 20 22 66 69 6c 65 2d 66 6f 72 6d  [0] = "file-form
05f0: 61 74 22 20 6f 72 20 22 73 63 68 65 6d 61 2d 63  at" or "schema-c
0600: 6f 6f 6b 69 65 22 20 6f 72 20 22 74 61 62 6c 65  ookie" or "table
0610: 22 20 6f 72 20 22 69 6e 64 65 78 22 0a 2a 2a 20  " or "index".** 
0620: 20 20 20 20 61 72 67 76 5b 31 5d 20 3d 20 74 61      argv[1] = ta
0630: 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 6e 61 6d  ble or index nam
0640: 65 20 6f 72 20 6d 65 74 61 20 73 74 61 74 65 6d  e or meta statem
0650: 65 6e 74 20 74 79 70 65 2e 0a 2a 2a 20 20 20 20  ent type..**    
0660: 20 61 72 67 76 5b 32 5d 20 3d 20 72 6f 6f 74 20   argv[2] = root 
0670: 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
0680: 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
0690: 20 4e 55 4c 4c 20 66 6f 72 20 6d 65 74 61 2e 0a   NULL for meta..
06a0: 2a 2a 20 20 20 20 20 61 72 67 76 5b 33 5d 20 3d  **     argv[3] =
06b0: 20 53 51 4c 20 74 65 78 74 20 66 6f 72 20 61 20   SQL text for a 
06c0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72 20  CREATE TABLE or 
06d0: 43 52 45 41 54 45 20 49 4e 44 45 58 20 73 74 61  CREATE INDEX sta
06e0: 74 65 6d 65 6e 74 2e 0a 2a 2a 20 20 20 20 20 61  tement..**     a
06f0: 72 67 76 5b 34 5d 20 3d 20 22 31 22 20 66 6f 72  rgv[4] = "1" for
0700: 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73   temporary files
0710: 2c 20 22 30 22 20 66 6f 72 20 6d 61 69 6e 20 64  , "0" for main d
0720: 61 74 61 62 61 73 65 2c 20 22 32 22 20 6f 72 20  atabase, "2" or 
0730: 6d 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  more.**         
0740: 20 20 20 20 20 20 66 6f 72 20 61 75 78 69 6c 69        for auxili
0750: 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
0760: 65 73 2e 0a 2a 2a 0a 2a 2f 0a 73 74 61 74 69 63  es..**.*/.static
0770: 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74  .int sqlite3Init
0780: 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 20 2a 70  Callback(void *p
0790: 49 6e 69 74 2c 20 69 6e 74 20 61 72 67 63 2c 20  Init, int argc, 
07a0: 63 68 61 72 20 2a 2a 61 72 67 76 2c 20 63 68 61  char **argv, cha
07b0: 72 20 2a 2a 61 7a 43 6f 6c 4e 61 6d 65 29 7b 0a  r **azColName){.
07c0: 20 20 49 6e 69 74 44 61 74 61 20 2a 70 44 61 74    InitData *pDat
07d0: 61 20 3d 20 28 49 6e 69 74 44 61 74 61 2a 29 70  a = (InitData*)p
07e0: 49 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 45 72 72  Init;.  int nErr
07f0: 20 3d 20 30 3b 0a 0a 20 20 61 73 73 65 72 74 28   = 0;..  assert(
0800: 20 61 72 67 63 3d 3d 35 20 29 3b 0a 20 20 69 66   argc==5 );.  if
0810: 28 20 61 72 67 76 3d 3d 30 20 29 20 72 65 74 75  ( argv==0 ) retu
0820: 72 6e 20 30 3b 20 20 20 2f 2a 20 4d 69 67 68 74  rn 0;   /* Might
0830: 20 68 61 70 70 65 6e 20 69 66 20 45 4d 50 54 59   happen if EMPTY
0840: 5f 52 45 53 55 4c 54 5f 43 41 4c 4c 42 41 43 4b  _RESULT_CALLBACK
0850: 53 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 69 66  S are on */.  if
0860: 28 20 61 72 67 76 5b 30 5d 3d 3d 30 20 29 7b 0a  ( argv[0]==0 ){.
0870: 20 20 20 20 63 6f 72 72 75 70 74 53 63 68 65 6d      corruptSchem
0880: 61 28 70 44 61 74 61 2c 20 30 29 3b 0a 20 20 20  a(pData, 0);.   
0890: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20   return 1;.  }. 
08a0: 20 73 77 69 74 63 68 28 20 61 72 67 76 5b 30 5d   switch( argv[0]
08b0: 5b 30 5d 20 29 7b 0a 20 20 20 20 63 61 73 65 20  [0] ){.    case 
08c0: 27 76 27 3a 0a 20 20 20 20 63 61 73 65 20 27 69  'v':.    case 'i
08d0: 27 3a 0a 20 20 20 20 63 61 73 65 20 27 74 27 3a  ':.    case 't':
08e0: 20 7b 20 20 2f 2a 20 43 52 45 41 54 45 20 54 41   {  /* CREATE TA
08f0: 42 4c 45 2c 20 43 52 45 41 54 45 20 49 4e 44 45  BLE, CREATE INDE
0900: 58 2c 20 6f 72 20 43 52 45 41 54 45 20 56 49 45  X, or CREATE VIE
0910: 57 20 73 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0a  W statements */.
0920: 20 20 20 20 20 20 73 71 6c 69 74 65 20 2a 64 62        sqlite *db
0930: 20 3d 20 70 44 61 74 61 2d 3e 64 62 3b 0a 20 20   = pData->db;.  
0940: 20 20 20 20 69 66 28 20 61 72 67 76 5b 32 5d 3d      if( argv[2]=
0950: 3d 30 20 7c 7c 20 61 72 67 76 5b 34 5d 3d 3d 30  =0 || argv[4]==0
0960: 20 29 7b 0a 20 20 20 20 20 20 20 20 63 6f 72 72   ){.        corr
0970: 75 70 74 53 63 68 65 6d 61 28 70 44 61 74 61 2c  uptSchema(pData,
0980: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74   0);.        ret
0990: 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20  urn 1;.      }. 
09a0: 20 20 20 20 20 69 66 28 20 61 72 67 76 5b 33 5d       if( argv[3]
09b0: 20 26 26 20 61 72 67 76 5b 33 5d 5b 30 5d 20 29   && argv[3][0] )
09c0: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6c  {.        /* Cal
09d0: 6c 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20  l the parser to 
09e0: 70 72 6f 63 65 73 73 20 61 20 43 52 45 41 54 45  process a CREATE
09f0: 20 54 41 42 4c 45 2c 20 49 4e 44 45 58 20 6f 72   TABLE, INDEX or
0a00: 20 56 49 45 57 2e 0a 20 20 20 20 20 20 20 20 2a   VIEW..        *
0a10: 2a 20 42 75 74 20 62 65 63 61 75 73 65 20 64 62  * But because db
0a20: 2d 3e 69 6e 69 74 2e 62 75 73 79 20 69 73 20 73  ->init.busy is s
0a30: 65 74 20 74 6f 20 31 2c 20 6e 6f 20 56 44 42 45  et to 1, no VDBE
0a40: 20 63 6f 64 65 20 69 73 20 67 65 6e 65 72 61 74   code is generat
0a50: 65 64 0a 20 20 20 20 20 20 20 20 2a 2a 20 6f 72  ed.        ** or
0a60: 20 65 78 65 63 75 74 65 64 2e 20 20 41 6c 6c 20   executed.  All 
0a70: 74 68 65 20 70 61 72 73 65 72 20 64 6f 65 73 20  the parser does 
0a80: 69 73 20 62 75 69 6c 64 20 74 68 65 20 69 6e 74  is build the int
0a90: 65 72 6e 61 6c 20 64 61 74 61 0a 20 20 20 20 20  ernal data.     
0aa0: 20 20 20 2a 2a 20 73 74 72 75 63 74 75 72 65 73     ** structures
0ab0: 20 74 68 61 74 20 64 65 73 63 72 69 62 65 20 74   that describe t
0ac0: 68 65 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c  he table, index,
0ad0: 20 6f 72 20 76 69 65 77 2e 0a 20 20 20 20 20 20   or view..      
0ae0: 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 63 68 61    */.        cha
0af0: 72 20 2a 7a 45 72 72 3b 0a 20 20 20 20 20 20 20  r *zErr;.       
0b00: 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69   assert( db->ini
0b10: 74 2e 62 75 73 79 20 29 3b 0a 20 20 20 20 20 20  t.busy );.      
0b20: 20 20 64 62 2d 3e 69 6e 69 74 2e 69 44 62 20 3d    db->init.iDb =
0b30: 20 61 74 6f 69 28 61 72 67 76 5b 34 5d 29 3b 0a   atoi(argv[4]);.
0b40: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
0b50: 64 62 2d 3e 69 6e 69 74 2e 69 44 62 3e 3d 30 20  db->init.iDb>=0 
0b60: 26 26 20 64 62 2d 3e 69 6e 69 74 2e 69 44 62 3c  && db->init.iDb<
0b70: 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 20  db->nDb );.     
0b80: 20 20 20 64 62 2d 3e 69 6e 69 74 2e 6e 65 77 54     db->init.newT
0b90: 6e 75 6d 20 3d 20 61 74 6f 69 28 61 72 67 76 5b  num = atoi(argv[
0ba0: 32 5d 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  2]);.        if(
0bb0: 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62   sqlite3_exec(db
0bc0: 2c 20 61 72 67 76 5b 33 5d 2c 20 30 2c 20 30 2c  , argv[3], 0, 0,
0bd0: 20 26 7a 45 72 72 29 20 29 7b 0a 20 20 20 20 20   &zErr) ){.     
0be0: 20 20 20 20 20 63 6f 72 72 75 70 74 53 63 68 65       corruptSche
0bf0: 6d 61 28 70 44 61 74 61 2c 20 7a 45 72 72 29 3b  ma(pData, zErr);
0c00: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
0c10: 65 33 5f 66 72 65 65 6d 65 6d 28 7a 45 72 72 29  e3_freemem(zErr)
0c20: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
0c30: 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 69 44 62      db->init.iDb
0c40: 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = 0;.      }els
0c50: 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66  e{.        /* If
0c60: 20 74 68 65 20 53 51 4c 20 63 6f 6c 75 6d 6e 20   the SQL column 
0c70: 69 73 20 62 6c 61 6e 6b 20 69 74 20 6d 65 61 6e  is blank it mean
0c80: 73 20 74 68 69 73 20 69 73 20 61 6e 20 69 6e 64  s this is an ind
0c90: 65 78 20 74 68 61 74 0a 20 20 20 20 20 20 20 20  ex that.        
0ca0: 2a 2a 20 77 61 73 20 63 72 65 61 74 65 64 20 74  ** was created t
0cb0: 6f 20 62 65 20 74 68 65 20 50 52 49 4d 41 52 59  o be the PRIMARY
0cc0: 20 4b 45 59 20 6f 72 20 74 6f 20 66 75 6c 66 69   KEY or to fulfi
0cd0: 6c 6c 20 61 20 55 4e 49 51 55 45 0a 20 20 20 20  ll a UNIQUE.    
0ce0: 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e      ** constrain
0cf0: 74 20 66 6f 72 20 61 20 43 52 45 41 54 45 20 54  t for a CREATE T
0d00: 41 42 4c 45 2e 20 20 54 68 65 20 69 6e 64 65 78  ABLE.  The index
0d10: 20 73 68 6f 75 6c 64 20 68 61 76 65 20 61 6c 72   should have alr
0d20: 65 61 64 79 0a 20 20 20 20 20 20 20 20 2a 2a 20  eady.        ** 
0d30: 62 65 65 6e 20 63 72 65 61 74 65 64 20 77 68 65  been created whe
0d40: 6e 20 77 65 20 70 72 6f 63 65 73 73 65 64 20 74  n we processed t
0d50: 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 2e  he CREATE TABLE.
0d60: 20 20 41 6c 6c 20 77 65 20 68 61 76 65 0a 20 20    All we have.  
0d70: 20 20 20 20 20 20 2a 2a 20 74 6f 20 64 6f 20 68        ** to do h
0d80: 65 72 65 20 69 73 20 72 65 63 6f 72 64 20 74 68  ere is record th
0d90: 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
0da0: 65 72 20 66 6f 72 20 74 68 61 74 20 69 6e 64 65  er for that inde
0db0: 78 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  x..        */.  
0dc0: 20 20 20 20 20 20 69 6e 74 20 69 44 62 3b 0a 20        int iDb;. 
0dd0: 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 49         Index *pI
0de0: 6e 64 65 78 3b 0a 0a 20 20 20 20 20 20 20 20 69  ndex;..        i
0df0: 44 62 20 3d 20 61 74 6f 69 28 61 72 67 76 5b 34  Db = atoi(argv[4
0e00: 5d 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  ]);.        asse
0e10: 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
0e20: 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20  b<db->nDb );.   
0e30: 20 20 20 20 20 70 49 6e 64 65 78 20 3d 20 73 71       pIndex = sq
0e40: 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 64  lite3FindIndex(d
0e50: 62 2c 20 61 72 67 76 5b 31 5d 2c 20 64 62 2d 3e  b, argv[1], db->
0e60: 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 29 3b  aDb[iDb].zName);
0e70: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e  .        if( pIn
0e80: 64 65 78 3d 3d 30 20 7c 7c 20 70 49 6e 64 65 78  dex==0 || pIndex
0e90: 2d 3e 74 6e 75 6d 21 3d 30 20 29 7b 0a 20 20 20  ->tnum!=0 ){.   
0ea0: 20 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 63         /* This c
0eb0: 61 6e 20 6f 63 63 75 72 20 69 66 20 74 68 65 72  an occur if ther
0ec0: 65 20 65 78 69 73 74 73 20 61 6e 20 69 6e 64 65  e exists an inde
0ed0: 78 20 6f 6e 20 61 20 54 45 4d 50 20 74 61 62 6c  x on a TEMP tabl
0ee0: 65 20 77 68 69 63 68 0a 20 20 20 20 20 20 20 20  e which.        
0ef0: 20 20 2a 2a 20 68 61 73 20 74 68 65 20 73 61 6d    ** has the sam
0f00: 65 20 6e 61 6d 65 20 61 73 20 61 6e 6f 74 68 65  e name as anothe
0f10: 72 20 69 6e 64 65 78 20 6f 6e 20 61 20 70 65 72  r index on a per
0f20: 6d 61 6e 65 6e 74 20 69 6e 64 65 78 2e 20 20 53  manent index.  S
0f30: 69 6e 63 65 0a 20 20 20 20 20 20 20 20 20 20 2a  ince.          *
0f40: 2a 20 74 68 65 20 70 65 72 6d 61 6e 65 6e 74 20  * the permanent 
0f50: 74 61 62 6c 65 20 69 73 20 68 69 64 64 65 6e 20  table is hidden 
0f60: 62 79 20 74 68 65 20 54 45 4d 50 20 74 61 62 6c  by the TEMP tabl
0f70: 65 2c 20 77 65 20 63 61 6e 20 61 6c 73 6f 0a 20  e, we can also. 
0f80: 20 20 20 20 20 20 20 20 20 2a 2a 20 73 61 66 65           ** safe
0f90: 6c 79 20 69 67 6e 6f 72 65 20 74 68 65 20 69 6e  ly ignore the in
0fa0: 64 65 78 20 6f 6e 20 74 68 65 20 70 65 72 6d 61  dex on the perma
0fb0: 6e 65 6e 74 20 74 61 62 6c 65 2e 0a 20 20 20 20  nent table..    
0fc0: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
0fd0: 20 20 20 2f 2a 20 44 6f 20 4e 6f 74 68 69 6e 67     /* Do Nothing
0fe0: 20 2a 2f 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c   */;.        }el
0ff0: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 70 49  se{.          pI
1000: 6e 64 65 78 2d 3e 74 6e 75 6d 20 3d 20 61 74 6f  ndex->tnum = ato
1010: 69 28 61 72 67 76 5b 32 5d 29 3b 0a 20 20 20 20  i(argv[2]);.    
1020: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
1030: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
1040: 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a  .    default: {.
1050: 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 63 61        /* This ca
1060: 6e 20 6e 6f 74 20 68 61 70 70 65 6e 21 20 2a 2f  n not happen! */
1070: 0a 20 20 20 20 20 20 6e 45 72 72 20 3d 20 31 3b  .      nErr = 1;
1080: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e  .      assert( n
1090: 45 72 72 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 0a  Err==0 );.    }.
10a0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 6e 45 72    }.  return nEr
10b0: 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 74 74 65  r;.}../*.** Atte
10c0: 6d 70 74 20 74 6f 20 72 65 61 64 20 74 68 65 20  mpt to read the 
10d0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
10e0: 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 69  and initialize i
10f0: 6e 74 65 72 6e 61 6c 0a 2a 2a 20 64 61 74 61 20  nternal.** data 
1100: 73 74 72 75 63 74 75 72 65 73 20 66 6f 72 20 61  structures for a
1110: 20 73 69 6e 67 6c 65 20 64 61 74 61 62 61 73 65   single database
1120: 20 66 69 6c 65 2e 20 20 54 68 65 20 69 6e 64 65   file.  The inde
1130: 78 20 6f 66 20 74 68 65 0a 2a 2a 20 64 61 74 61  x of the.** data
1140: 62 61 73 65 20 66 69 6c 65 20 69 73 20 67 69 76  base file is giv
1150: 65 6e 20 62 79 20 69 44 62 2e 20 20 69 44 62 3d  en by iDb.  iDb=
1160: 3d 30 20 69 73 20 75 73 65 64 20 66 6f 72 20 74  =0 is used for t
1170: 68 65 20 6d 61 69 6e 0a 2a 2a 20 64 61 74 61 62  he main.** datab
1180: 61 73 65 2e 20 20 69 44 62 3d 3d 31 20 73 68 6f  ase.  iDb==1 sho
1190: 75 6c 64 20 6e 65 76 65 72 20 62 65 20 75 73 65  uld never be use
11a0: 64 2e 20 20 69 44 62 3e 3d 32 20 69 73 20 75 73  d.  iDb>=2 is us
11b0: 65 64 20 66 6f 72 0a 2a 2a 20 61 75 78 69 6c 69  ed for.** auxili
11c0: 61 72 79 20 64 61 74 61 62 61 73 65 73 2e 20 20  ary databases.  
11d0: 52 65 74 75 72 6e 20 6f 6e 65 20 6f 66 20 74 68  Return one of th
11e0: 65 20 53 51 4c 49 54 45 5f 20 65 72 72 6f 72 20  e SQLITE_ error 
11f0: 63 6f 64 65 73 20 74 6f 0a 2a 2a 20 69 6e 64 69  codes to.** indi
1200: 63 61 74 65 20 73 75 63 63 65 73 73 20 6f 72 20  cate success or 
1210: 66 61 69 6c 75 72 65 2e 0a 2a 2f 0a 73 74 61 74  failure..*/.stat
1220: 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  ic int sqlite3In
1230: 69 74 4f 6e 65 28 73 71 6c 69 74 65 20 2a 64 62  itOne(sqlite *db
1240: 2c 20 69 6e 74 20 69 44 62 2c 20 63 68 61 72 20  , int iDb, char 
1250: 2a 2a 70 7a 45 72 72 4d 73 67 29 7b 0a 20 20 69  **pzErrMsg){.  i
1260: 6e 74 20 72 63 3b 0a 20 20 42 74 43 75 72 73 6f  nt rc;.  BtCurso
1270: 72 20 2a 63 75 72 4d 61 69 6e 3b 0a 20 20 69 6e  r *curMain;.  in
1280: 74 20 73 69 7a 65 3b 0a 20 20 54 61 62 6c 65 20  t size;.  Table 
1290: 2a 70 54 61 62 3b 0a 20 20 63 68 61 72 20 2a 61  *pTab;.  char *a
12a0: 7a 41 72 67 5b 36 5d 3b 0a 20 20 63 68 61 72 20  zArg[6];.  char 
12b0: 7a 44 62 4e 75 6d 5b 33 30 5d 3b 0a 20 20 69 6e  zDbNum[30];.  in
12c0: 74 20 6d 65 74 61 5b 31 30 5d 3b 0a 20 20 49 6e  t meta[10];.  In
12d0: 69 74 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b  itData initData;
12e0: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 54 68 65 20  ..  /*.  ** The 
12f0: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
1300: 74 61 62 6c 65 20 68 61 73 20 61 20 73 74 72 75  table has a stru
1310: 63 74 75 72 65 20 6c 69 6b 65 20 74 68 69 73 0a  cture like this.
1320: 20 20 2a 2f 0a 20 20 73 74 61 74 69 63 20 63 68    */.  static ch
1330: 61 72 20 6d 61 73 74 65 72 5f 73 63 68 65 6d 61  ar master_schema
1340: 5b 5d 20 3d 20 0a 20 20 20 20 20 22 43 52 45 41  [] = .     "CREA
1350: 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f  TE TABLE sqlite_
1360: 6d 61 73 74 65 72 28 5c 6e 22 0a 20 20 20 20 20  master(\n".     
1370: 22 20 20 74 79 70 65 20 74 65 78 74 2c 5c 6e 22  "  type text,\n"
1380: 0a 20 20 20 20 20 22 20 20 6e 61 6d 65 20 74 65  .     "  name te
1390: 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 74  xt,\n".     "  t
13a0: 62 6c 5f 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22  bl_name text,\n"
13b0: 0a 20 20 20 20 20 22 20 20 72 6f 6f 74 70 61 67  .     "  rootpag
13c0: 65 20 69 6e 74 65 67 65 72 2c 5c 6e 22 0a 20 20  e integer,\n".  
13d0: 20 20 20 22 20 20 73 71 6c 20 74 65 78 74 5c 6e     "  sql text\n
13e0: 22 0a 20 20 20 20 20 22 29 22 0a 20 20 3b 0a 20  ".     ")".  ;. 
13f0: 20 73 74 61 74 69 63 20 63 68 61 72 20 74 65 6d   static char tem
1400: 70 5f 6d 61 73 74 65 72 5f 73 63 68 65 6d 61 5b  p_master_schema[
1410: 5d 20 3d 20 0a 20 20 20 20 20 22 43 52 45 41 54  ] = .     "CREAT
1420: 45 20 54 45 4d 50 20 54 41 42 4c 45 20 73 71 6c  E TEMP TABLE sql
1430: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 28  ite_temp_master(
1440: 5c 6e 22 0a 20 20 20 20 20 22 20 20 74 79 70 65  \n".     "  type
1450: 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22   text,\n".     "
1460: 20 20 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a    name text,\n".
1470: 20 20 20 20 20 22 20 20 74 62 6c 5f 6e 61 6d 65       "  tbl_name
1480: 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22   text,\n".     "
1490: 20 20 72 6f 6f 74 70 61 67 65 20 69 6e 74 65 67    rootpage integ
14a0: 65 72 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 73  er,\n".     "  s
14b0: 71 6c 20 74 65 78 74 5c 6e 22 0a 20 20 20 20 20  ql text\n".     
14c0: 22 29 22 0a 20 20 3b 0a 0a 20 20 2f 2a 20 54 68  ")".  ;..  /* Th
14d0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 53 51 4c 20  e following SQL 
14e0: 77 69 6c 6c 20 72 65 61 64 20 74 68 65 20 73 63  will read the sc
14f0: 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 6d 61  hema from the ma
1500: 73 74 65 72 20 74 61 62 6c 65 73 2e 0a 20 20 2a  ster tables..  *
1510: 2f 0a 20 20 73 74 61 74 69 63 20 63 68 61 72 20  /.  static char 
1520: 69 6e 69 74 5f 73 63 72 69 70 74 31 5b 5d 20 3d  init_script1[] =
1530: 20 0a 20 20 20 20 20 22 53 45 4c 45 43 54 20 74   .     "SELECT t
1540: 79 70 65 2c 20 6e 61 6d 65 2c 20 72 6f 6f 74 70  ype, name, rootp
1550: 61 67 65 2c 20 73 71 6c 2c 20 31 20 46 52 4f 4d  age, sql, 1 FROM
1560: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
1570: 74 65 72 22 3b 0a 20 20 73 74 61 74 69 63 20 63  ter";.  static c
1580: 68 61 72 20 69 6e 69 74 5f 73 63 72 69 70 74 32  har init_script2
1590: 5b 5d 20 3d 20 0a 20 20 20 20 20 22 53 45 4c 45  [] = .     "SELE
15a0: 43 54 20 74 79 70 65 2c 20 6e 61 6d 65 2c 20 72  CT type, name, r
15b0: 6f 6f 74 70 61 67 65 2c 20 73 71 6c 2c 20 30 20  ootpage, sql, 0 
15c0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
15d0: 65 72 22 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  er";..  assert( 
15e0: 69 44 62 3e 3d 30 20 26 26 20 69 44 62 21 3d 31  iDb>=0 && iDb!=1
15f0: 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
1600: 29 3b 0a 0a 20 20 2f 2a 20 43 6f 6e 73 74 72 75  );..  /* Constru
1610: 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 74 61  ct the schema ta
1620: 62 6c 65 73 3a 20 73 71 6c 69 74 65 5f 6d 61 73  bles: sqlite_mas
1630: 74 65 72 20 61 6e 64 20 73 71 6c 69 74 65 5f 74  ter and sqlite_t
1640: 65 6d 70 5f 6d 61 73 74 65 72 0a 20 20 2a 2f 0a  emp_master.  */.
1650: 20 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f    sqlite3SafetyO
1660: 66 66 28 64 62 29 3b 0a 20 20 61 7a 41 72 67 5b  ff(db);.  azArg[
1670: 30 5d 20 3d 20 22 74 61 62 6c 65 22 3b 0a 20 20  0] = "table";.  
1680: 61 7a 41 72 67 5b 31 5d 20 3d 20 4d 41 53 54 45  azArg[1] = MASTE
1690: 52 5f 4e 41 4d 45 3b 0a 20 20 61 7a 41 72 67 5b  R_NAME;.  azArg[
16a0: 32 5d 20 3d 20 22 31 22 3b 0a 20 20 61 7a 41 72  2] = "1";.  azAr
16b0: 67 5b 33 5d 20 3d 20 6d 61 73 74 65 72 5f 73 63  g[3] = master_sc
16c0: 68 65 6d 61 3b 0a 20 20 73 70 72 69 6e 74 66 28  hema;.  sprintf(
16d0: 7a 44 62 4e 75 6d 2c 20 22 25 64 22 2c 20 69 44  zDbNum, "%d", iD
16e0: 62 29 3b 0a 20 20 61 7a 41 72 67 5b 34 5d 20 3d  b);.  azArg[4] =
16f0: 20 7a 44 62 4e 75 6d 3b 0a 20 20 61 7a 41 72 67   zDbNum;.  azArg
1700: 5b 35 5d 20 3d 20 30 3b 0a 20 20 69 6e 69 74 44  [5] = 0;.  initD
1710: 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 69  ata.db = db;.  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 35 2c  ck(&initData, 5,
1760: 20 61 7a 41 72 67 2c 20 30 29 3b 0a 20 20 70 54   azArg, 0);.  pT
1770: 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64  ab = sqlite3Find
1780: 54 61 62 6c 65 28 64 62 2c 20 4d 41 53 54 45 52  Table(db, MASTER
1790: 5f 4e 41 4d 45 2c 20 22 6d 61 69 6e 22 29 3b 0a  _NAME, "main");.
17a0: 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20    if( pTab ){.  
17b0: 20 20 70 54 61 62 2d 3e 72 65 61 64 4f 6e 6c 79    pTab->readOnly
17c0: 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 69 66 28 20   = 1;.  }.  if( 
17d0: 69 44 62 3d 3d 30 20 29 7b 0a 20 20 20 20 61 7a  iDb==0 ){.    az
17e0: 41 72 67 5b 31 5d 20 3d 20 54 45 4d 50 5f 4d 41  Arg[1] = TEMP_MA
17f0: 53 54 45 52 5f 4e 41 4d 45 3b 0a 20 20 20 20 61  STER_NAME;.    a
1800: 7a 41 72 67 5b 33 5d 20 3d 20 74 65 6d 70 5f 6d  zArg[3] = temp_m
1810: 61 73 74 65 72 5f 73 63 68 65 6d 61 3b 0a 20 20  aster_schema;.  
1820: 20 20 61 7a 41 72 67 5b 34 5d 20 3d 20 22 31 22    azArg[4] = "1"
1830: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 49 6e 69  ;.    sqlite3Ini
1840: 74 43 61 6c 6c 62 61 63 6b 28 26 69 6e 69 74 44  tCallback(&initD
1850: 61 74 61 2c 20 35 2c 20 61 7a 41 72 67 2c 20 30  ata, 5, azArg, 0
1860: 29 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71  );.    pTab = sq
1870: 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64  lite3FindTable(d
1880: 62 2c 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e  b, TEMP_MASTER_N
1890: 41 4d 45 2c 20 22 74 65 6d 70 22 29 3b 0a 20 20  AME, "temp");.  
18a0: 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20    if( pTab ){.  
18b0: 20 20 20 20 70 54 61 62 2d 3e 72 65 61 64 4f 6e      pTab->readOn
18c0: 6c 79 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  ly = 1;.    }.  
18d0: 7d 0a 20 20 73 71 6c 69 74 65 33 53 61 66 65 74  }.  sqlite3Safet
18e0: 79 4f 6e 28 64 62 29 3b 0a 0a 20 20 2f 2a 20 43  yOn(db);..  /* C
18f0: 72 65 61 74 65 20 61 20 63 75 72 73 6f 72 20 74  reate a cursor t
1900: 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 62  o hold the datab
1910: 61 73 65 20 6f 70 65 6e 0a 20 20 2a 2f 0a 20 20  ase open.  */.  
1920: 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d  if( db->aDb[iDb]
1930: 2e 70 42 74 3d 3d 30 20 29 20 72 65 74 75 72 6e  .pBt==0 ) return
1940: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 72 63   SQLITE_OK;.  rc
1950: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1960: 75 72 73 6f 72 28 64 62 2d 3e 61 44 62 5b 69 44  ursor(db->aDb[iD
1970: 62 5d 2e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52  b].pBt, MASTER_R
1980: 4f 4f 54 2c 20 30 2c 20 30 2c 20 30 2c 20 26 63  OOT, 0, 0, 0, &c
1990: 75 72 4d 61 69 6e 29 3b 0a 20 20 69 66 28 20 72  urMain);.  if( r
19a0: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c!=SQLITE_OK && 
19b0: 72 63 21 3d 53 51 4c 49 54 45 5f 45 4d 50 54 59  rc!=SQLITE_EMPTY
19c0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
19d0: 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73  etString(pzErrMs
19e0: 67 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6f 72  g, sqlite3_error
19f0: 5f 73 74 72 69 6e 67 28 72 63 29 2c 20 28 63 68  _string(rc), (ch
1a00: 61 72 2a 29 30 29 3b 0a 20 20 20 20 72 65 74 75  ar*)0);.    retu
1a10: 72 6e 20 72 63 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  rn rc;.  }..  /*
1a20: 20 47 65 74 20 74 68 65 20 64 61 74 61 62 61 73   Get the databas
1a30: 65 20 6d 65 74 61 20 69 6e 66 6f 72 6d 61 74 69  e meta informati
1a40: 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4d 65  on..  **.  ** Me
1a50: 74 61 20 76 61 6c 75 65 73 20 61 72 65 20 61 73  ta values are as
1a60: 20 66 6f 6c 6c 6f 77 73 3a 0a 20 20 2a 2a 20 20   follows:.  **  
1a70: 20 20 6d 65 74 61 5b 30 5d 20 20 20 53 63 68 65    meta[0]   Sche
1a80: 6d 61 20 63 6f 6f 6b 69 65 2e 20 20 43 68 61 6e  ma cookie.  Chan
1a90: 67 65 73 20 77 69 74 68 20 65 61 63 68 20 73 63  ges with each sc
1aa0: 68 65 6d 61 20 63 68 61 6e 67 65 2e 0a 20 20 2a  hema change..  *
1ab0: 2a 20 20 20 20 6d 65 74 61 5b 31 5d 20 20 20 46  *    meta[1]   F
1ac0: 69 6c 65 20 66 6f 72 6d 61 74 20 6f 66 20 73 63  ile format of sc
1ad0: 68 65 6d 61 20 6c 61 79 65 72 2e 0a 20 20 2a 2a  hema layer..  **
1ae0: 20 20 20 20 6d 65 74 61 5b 32 5d 20 20 20 53 69      meta[2]   Si
1af0: 7a 65 20 6f 66 20 74 68 65 20 70 61 67 65 20 63  ze of the page c
1b00: 61 63 68 65 2e 0a 20 20 2a 2a 20 20 20 20 6d 65  ache..  **    me
1b10: 74 61 5b 33 5d 20 20 20 53 79 6e 63 68 72 6f 6e  ta[3]   Synchron
1b20: 6f 75 73 20 73 65 74 74 69 6e 67 2e 20 20 31 3a  ous setting.  1:
1b30: 6f 66 66 2c 20 32 3a 6e 6f 72 6d 61 6c 2c 20 33  off, 2:normal, 3
1b40: 3a 66 75 6c 6c 0a 20 20 2a 2a 20 20 20 20 6d 65  :full.  **    me
1b50: 74 61 5b 34 5d 0a 20 20 2a 2a 20 20 20 20 6d 65  ta[4].  **    me
1b60: 74 61 5b 35 5d 20 20 20 50 72 61 67 6d 61 20 74  ta[5]   Pragma t
1b70: 65 6d 70 5f 73 74 6f 72 65 20 76 61 6c 75 65 2e  emp_store value.
1b80: 20 20 53 65 65 20 63 6f 6d 6d 65 6e 74 73 20 6f    See comments o
1b90: 6e 20 42 74 72 65 65 46 61 63 74 6f 72 79 0a 20  n BtreeFactory. 
1ba0: 20 2a 2a 20 20 20 20 6d 65 74 61 5b 36 5d 0a 20   **    meta[6]. 
1bb0: 20 2a 2a 20 20 20 20 6d 65 74 61 5b 37 5d 0a 20   **    meta[7]. 
1bc0: 20 2a 2a 20 20 20 20 6d 65 74 61 5b 38 5d 0a 20   **    meta[8]. 
1bd0: 20 2a 2a 20 20 20 20 6d 65 74 61 5b 39 5d 0a 20   **    meta[9]. 
1be0: 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   */.  if( rc==SQ
1bf0: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69  LITE_OK ){.    i
1c00: 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d  nt i;.    for(i=
1c10: 30 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  0; rc==SQLITE_OK
1c20: 20 26 26 20 69 3c 73 69 7a 65 6f 66 28 6d 65 74   && i<sizeof(met
1c30: 61 29 2f 73 69 7a 65 6f 66 28 6d 65 74 61 5b 30  a)/sizeof(meta[0
1c40: 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  ]); i++){.      
1c50: 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1c60: 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62  eGetMeta(db->aDb
1c70: 5b 69 44 62 5d 2e 70 42 74 2c 20 69 2b 31 2c 20  [iDb].pBt, i+1, 
1c80: 26 6d 65 74 61 5b 69 5d 29 3b 0a 20 20 20 20 7d  &meta[i]);.    }
1c90: 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20  .    if( rc ){. 
1ca0: 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
1cb0: 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20  tring(pzErrMsg, 
1cc0: 73 71 6c 69 74 65 33 5f 65 72 72 6f 72 5f 73 74  sqlite3_error_st
1cd0: 72 69 6e 67 28 72 63 29 2c 20 28 63 68 61 72 2a  ring(rc), (char*
1ce0: 29 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  )0);.      sqlit
1cf0: 65 33 42 74 72 65 65 43 6c 6f 73 65 43 75 72 73  e3BtreeCloseCurs
1d00: 6f 72 28 63 75 72 4d 61 69 6e 29 3b 0a 20 20 20  or(curMain);.   
1d10: 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20     return rc;.  
1d20: 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
1d30: 20 6d 65 6d 73 65 74 28 6d 65 74 61 2c 20 30 2c   memset(meta, 0,
1d40: 20 73 69 7a 65 6f 66 28 6d 65 74 61 29 29 3b 0a   sizeof(meta));.
1d50: 20 20 7d 0a 20 20 64 62 2d 3e 61 44 62 5b 69 44    }.  db->aDb[iD
1d60: 62 5d 2e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65  b].schema_cookie
1d70: 20 3d 20 6d 65 74 61 5b 30 5d 3b 0a 20 20 69 66   = meta[0];.  if
1d80: 28 20 69 44 62 3d 3d 30 20 29 7b 0a 20 20 20 20  ( iDb==0 ){.    
1d90: 64 62 2d 3e 6e 65 78 74 5f 63 6f 6f 6b 69 65 20  db->next_cookie 
1da0: 3d 20 6d 65 74 61 5b 30 5d 3b 0a 20 20 20 20 64  = meta[0];.    d
1db0: 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d  b->file_format =
1dc0: 20 6d 65 74 61 5b 31 5d 3b 0a 20 20 20 20 73 69   meta[1];.    si
1dd0: 7a 65 20 3d 20 6d 65 74 61 5b 32 5d 3b 0a 20 20  ze = meta[2];.  
1de0: 20 20 69 66 28 20 73 69 7a 65 3d 3d 30 20 29 7b    if( size==0 ){
1df0: 20 73 69 7a 65 20 3d 20 4d 41 58 5f 50 41 47 45   size = MAX_PAGE
1e00: 53 3b 20 7d 0a 20 20 20 20 64 62 2d 3e 63 61 63  S; }.    db->cac
1e10: 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65 3b 0a  he_size = size;.
1e20: 20 20 20 20 64 62 2d 3e 73 61 66 65 74 79 5f 6c      db->safety_l
1e30: 65 76 65 6c 20 3d 20 6d 65 74 61 5b 33 5d 3b 0a  evel = meta[3];.
1e40: 20 20 20 20 69 66 28 20 6d 65 74 61 5b 35 5d 3e      if( meta[5]>
1e50: 30 20 26 26 20 6d 65 74 61 5b 35 5d 3c 3d 32 20  0 && meta[5]<=2 
1e60: 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  && db->temp_stor
1e70: 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 62  e==0 ){.      db
1e80: 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 6d  ->temp_store = m
1e90: 65 74 61 5b 35 5d 3b 0a 20 20 20 20 7d 0a 20 20  eta[5];.    }.  
1ea0: 20 20 69 66 28 20 64 62 2d 3e 73 61 66 65 74 79    if( db->safety
1eb0: 5f 6c 65 76 65 6c 3d 3d 30 20 29 20 64 62 2d 3e  _level==0 ) db->
1ec0: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 32  safety_level = 2
1ed0: 3b 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a  ;..    /*.    **
1ee0: 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d 31    file_format==1
1ef0: 20 20 20 20 56 65 72 73 69 6f 6e 20 33 2e 30 2e      Version 3.0.
1f00: 30 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  0..    */.    if
1f10: 28 20 64 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  ( db->file_forma
1f20: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a  t==0 ){.      /*
1f30: 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 69 66   This happens if
1f40: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77 61   the database wa
1f50: 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74  s initially empt
1f60: 79 20 2a 2f 0a 20 20 20 20 20 20 64 62 2d 3e 66  y */.      db->f
1f70: 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 31 3b 0a  ile_format = 1;.
1f80: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62      }else if( db
1f90: 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3e 31 20  ->file_format>1 
1fa0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
1fb0: 42 74 72 65 65 43 6c 6f 73 65 43 75 72 73 6f 72  BtreeCloseCursor
1fc0: 28 63 75 72 4d 61 69 6e 29 3b 0a 20 20 20 20 20  (curMain);.     
1fd0: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
1fe0: 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 75 6e 73  g(pzErrMsg, "uns
1ff0: 75 70 70 6f 72 74 65 64 20 66 69 6c 65 20 66 6f  upported file fo
2000: 72 6d 61 74 22 2c 20 28 63 68 61 72 2a 29 30 29  rmat", (char*)0)
2010: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ;.      return S
2020: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
2030: 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64   }.  }else if( d
2040: 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 21 3d  b->file_format!=
2050: 6d 65 74 61 5b 31 5d 20 29 7b 0a 20 20 20 20 69  meta[1] ){.    i
2060: 66 28 20 6d 65 74 61 5b 31 5d 3d 3d 30 20 29 7b  f( meta[1]==0 ){
2070: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
2080: 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67  tString(pzErrMsg
2090: 2c 20 22 63 61 6e 6e 6f 74 20 61 74 74 61 63 68  , "cannot attach
20a0: 20 65 6d 70 74 79 20 64 61 74 61 62 61 73 65 3a   empty database:
20b0: 20 22 2c 0a 20 20 20 20 20 20 20 20 20 64 62 2d   ",.         db-
20c0: 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c  >aDb[iDb].zName,
20d0: 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20 20 20   (char*)0);.    
20e0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
20f0: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 70 7a  ite3SetString(pz
2100: 45 72 72 4d 73 67 2c 20 22 69 6e 63 6f 6d 70 61  ErrMsg, "incompa
2110: 74 69 62 6c 65 20 66 69 6c 65 20 66 6f 72 6d 61  tible file forma
2120: 74 20 69 6e 20 61 75 78 69 6c 69 61 72 79 20 22  t in auxiliary "
2130: 0a 20 20 20 20 20 20 20 20 20 22 64 61 74 61 62  .         "datab
2140: 61 73 65 3a 20 22 2c 20 64 62 2d 3e 61 44 62 5b  ase: ", db->aDb[
2150: 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 28 63 68 61  iDb].zName, (cha
2160: 72 2a 29 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20  r*)0);.    }.   
2170: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 6f   sqlite3BtreeClo
2180: 73 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  se(db->aDb[iDb].
2190: 70 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e 61 44  pBt);.    db->aD
21a0: 62 5b 69 44 62 5d 2e 70 42 74 20 3d 20 30 3b 0a  b[iDb].pBt = 0;.
21b0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
21c0: 45 5f 46 4f 52 4d 41 54 3b 0a 20 20 7d 0a 20 20  E_FORMAT;.  }.  
21d0: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
21e0: 61 63 68 65 53 69 7a 65 28 64 62 2d 3e 61 44 62  acheSize(db->aDb
21f0: 5b 69 44 62 5d 2e 70 42 74 2c 20 64 62 2d 3e 63  [iDb].pBt, db->c
2200: 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 73 71  ache_size);.  sq
2210: 6c 69 74 65 33 42 74 72 65 65 53 65 74 53 61 66  lite3BtreeSetSaf
2220: 65 74 79 4c 65 76 65 6c 28 64 62 2d 3e 61 44 62  etyLevel(db->aDb
2230: 5b 69 44 62 5d 2e 70 42 74 2c 20 6d 65 74 61 5b  [iDb].pBt, meta[
2240: 33 5d 3d 3d 30 20 3f 20 32 20 3a 20 6d 65 74 61  3]==0 ? 2 : meta
2250: 5b 33 5d 29 3b 0a 0a 20 20 2f 2a 20 52 65 61 64  [3]);..  /* Read
2260: 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f   the schema info
2270: 72 6d 61 74 69 6f 6e 20 6f 75 74 20 6f 66 20 74  rmation out of t
2280: 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65 73  he schema tables
2290: 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
22a0: 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29 3b  db->init.busy );
22b0: 0a 20 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  .  sqlite3Safety
22c0: 4f 66 66 28 64 62 29 3b 0a 20 20 69 66 28 20 72  Off(db);.  if( r
22d0: 63 3d 3d 53 51 4c 49 54 45 5f 45 4d 50 54 59 20  c==SQLITE_EMPTY 
22e0: 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 61 6e  ){.    /* For an
22f0: 20 65 6d 70 74 79 20 64 61 74 61 62 61 73 65 2c   empty database,
2300: 20 74 68 65 72 65 20 69 73 20 6e 6f 74 68 69 6e   there is nothin
2310: 67 20 74 6f 20 72 65 61 64 20 2a 2f 0a 20 20 20  g to read */.   
2320: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
2330: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66  .  }else{.    if
2340: 28 20 69 44 62 3d 3d 30 20 29 7b 0a 20 20 20 20  ( iDb==0 ){.    
2350: 20 20 2f 2a 20 54 68 69 73 20 53 51 4c 20 73 74    /* This SQL st
2360: 61 74 65 6d 65 6e 74 20 74 72 69 65 73 20 74 6f  atement tries to
2370: 20 72 65 61 64 20 74 68 65 20 74 65 6d 70 2e 2a   read the temp.*
2380: 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65   schema from the
2390: 0a 20 20 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  .      ** sqlite
23a0: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20 74 61 62  _temp_master tab
23b0: 6c 65 2e 20 49 74 20 6d 69 67 68 74 20 72 65 74  le. It might ret
23c0: 75 72 6e 20 53 51 4c 49 54 45 5f 45 4d 50 54 59  urn SQLITE_EMPTY
23d0: 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  . .      */.    
23e0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65    rc = sqlite3_e
23f0: 78 65 63 28 64 62 2c 20 69 6e 69 74 5f 73 63 72  xec(db, init_scr
2400: 69 70 74 31 2c 20 73 71 6c 69 74 65 33 49 6e 69  ipt1, sqlite3Ini
2410: 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74  tCallback, &init
2420: 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20  Data, 0);.      
2430: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
2440: 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  K || rc==SQLITE_
2450: 45 4d 50 54 59 20 29 7b 0a 20 20 20 20 20 20 20  EMPTY ){.       
2460: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78   rc = sqlite3_ex
2470: 65 63 28 64 62 2c 20 69 6e 69 74 5f 73 63 72 69  ec(db, init_scri
2480: 70 74 32 2c 20 73 71 6c 69 74 65 33 49 6e 69 74  pt2, sqlite3Init
2490: 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44  Callback, &initD
24a0: 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d  ata, 0);.      }
24b0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
24c0: 20 20 63 68 61 72 20 2a 7a 53 71 6c 20 3d 20 30    char *zSql = 0
24d0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  ;.      sqlite3S
24e0: 65 74 53 74 72 69 6e 67 28 26 7a 53 71 6c 2c 20  etString(&zSql, 
24f0: 0a 20 20 20 20 20 20 20 20 20 22 53 45 4c 45 43  .         "SELEC
2500: 54 20 74 79 70 65 2c 20 6e 61 6d 65 2c 20 72 6f  T type, name, ro
2510: 6f 74 70 61 67 65 2c 20 73 71 6c 2c 20 22 2c 20  otpage, sql, ", 
2520: 7a 44 62 4e 75 6d 2c 20 22 20 46 52 4f 4d 20 5c  zDbNum, " FROM \
2530: 22 22 2c 0a 20 20 20 20 20 20 20 20 20 64 62 2d  "",.         db-
2540: 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c  >aDb[iDb].zName,
2550: 20 22 5c 22 2e 73 71 6c 69 74 65 5f 6d 61 73 74   "\".sqlite_mast
2560: 65 72 22 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a  er", (char*)0);.
2570: 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
2580: 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c  e3_exec(db, zSql
2590: 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  , sqlite3InitCal
25a0: 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61  lback, &initData
25b0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
25c0: 74 65 46 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20  teFree(zSql);.  
25d0: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 53    }.    sqlite3S
25e0: 61 66 65 74 79 4f 6e 28 64 62 29 3b 0a 20 20 20  afetyOn(db);.   
25f0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 6f   sqlite3BtreeClo
2600: 73 65 43 75 72 73 6f 72 28 63 75 72 4d 61 69 6e  seCursor(curMain
2610: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  );.  }.  if( sql
2620: 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c  ite3_malloc_fail
2630: 65 64 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ed ){.    sqlite
2640: 33 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72  3SetString(pzErr
2650: 4d 73 67 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d  Msg, "out of mem
2660: 6f 72 79 22 2c 20 28 63 68 61 72 2a 29 30 29 3b  ory", (char*)0);
2670: 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
2680: 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 73 71 6c 69  _NOMEM;.    sqli
2690: 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c  te3ResetInternal
26a0: 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20  Schema(db, 0);. 
26b0: 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c   }.  if( rc==SQL
26c0: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 44 62  ITE_OK ){.    Db
26d0: 53 65 74 50 72 6f 70 65 72 74 79 28 64 62 2c 20  SetProperty(db, 
26e0: 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f  iDb, DB_SchemaLo
26f0: 61 64 65 64 29 3b 0a 20 20 20 20 69 66 28 20 69  aded);.    if( i
2700: 44 62 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 44  Db==0 ){.      D
2710: 62 53 65 74 50 72 6f 70 65 72 74 79 28 64 62 2c  bSetProperty(db,
2720: 20 31 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61   1, DB_SchemaLoa
2730: 64 65 64 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  ded);.    }.  }e
2740: 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
2750: 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68  ResetInternalSch
2760: 65 6d 61 28 64 62 2c 20 69 44 62 29 3b 0a 20 20  ema(db, iDb);.  
2770: 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  }.  return rc;.}
2780: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 69 74 69 61 6c 69  ../*.** Initiali
2790: 7a 65 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20  ze all database 
27a0: 66 69 6c 65 73 20 2d 20 74 68 65 20 6d 61 69 6e  files - the main
27b0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20   database file, 
27c0: 74 68 65 20 66 69 6c 65 0a 2a 2a 20 75 73 65 64  the file.** used
27d0: 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f 72   to store tempor
27e0: 61 72 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20  ary tables, and 
27f0: 61 6e 79 20 61 64 64 69 74 69 6f 6e 61 6c 20 64  any additional d
2800: 61 74 61 62 61 73 65 20 66 69 6c 65 73 0a 2a 2a  atabase files.**
2810: 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 41   created using A
2820: 54 54 41 43 48 20 73 74 61 74 65 6d 65 6e 74 73  TTACH statements
2830: 2e 20 20 52 65 74 75 72 6e 20 61 20 73 75 63 63  .  Return a succ
2840: 65 73 73 20 63 6f 64 65 2e 20 20 49 66 20 61 6e  ess code.  If an
2850: 0a 2a 2a 20 65 72 72 6f 72 20 6f 63 63 75 72 73  .** error occurs
2860: 2c 20 77 72 69 74 65 20 61 6e 20 65 72 72 6f 72  , write an error
2870: 20 6d 65 73 73 61 67 65 20 69 6e 74 6f 20 2a 70   message into *p
2880: 7a 45 72 72 4d 73 67 2e 0a 2a 2a 0a 2a 2a 20 41  zErrMsg..**.** A
2890: 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61 73  fter the databas
28a0: 65 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  e is initialized
28b0: 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 49 6e 69  , the SQLITE_Ini
28c0: 74 69 61 6c 69 7a 65 64 0a 2a 2a 20 62 69 74 20  tialized.** bit 
28d0: 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 66 6c  is set in the fl
28e0: 61 67 73 20 66 69 65 6c 64 20 6f 66 20 74 68 65  ags field of the
28f0: 20 73 71 6c 69 74 65 20 73 74 72 75 63 74 75 72   sqlite structur
2900: 65 2e 20 20 41 6e 0a 2a 2a 20 61 74 74 65 6d 70  e.  An.** attemp
2910: 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 69  t is made to ini
2920: 74 69 61 6c 69 7a 65 20 74 68 65 20 64 61 74 61  tialize the data
2930: 62 61 73 65 20 61 73 20 73 6f 6f 6e 20 61 73 20  base as soon as 
2940: 69 74 0a 2a 2a 20 69 73 20 6f 70 65 6e 65 64 2e  it.** is opened.
2950: 20 20 49 66 20 74 68 61 74 20 66 61 69 6c 73 20    If that fails 
2960: 28 70 65 72 68 61 70 73 20 62 65 63 61 75 73 65  (perhaps because
2970: 20 61 6e 6f 74 68 65 72 20 70 72 6f 63 65 73 73   another process
2980: 0a 2a 2a 20 68 61 73 20 74 68 65 20 73 71 6c 69  .** has the sqli
2990: 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20  te_master table 
29a0: 6c 6f 63 6b 65 64 29 20 74 68 61 6e 20 61 6e 6f  locked) than ano
29b0: 74 68 65 72 20 61 74 74 65 6d 70 74 0a 2a 2a 20  ther attempt.** 
29c0: 69 73 20 6d 61 64 65 20 74 68 65 20 66 69 72 73  is made the firs
29d0: 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61 62  t time the datab
29e0: 61 73 65 20 69 73 20 61 63 63 65 73 73 65 64 2e  ase is accessed.
29f0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  .*/.int sqlite3I
2a00: 6e 69 74 28 73 71 6c 69 74 65 20 2a 64 62 2c 20  nit(sqlite *db, 
2a10: 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 29  char **pzErrMsg)
2a20: 7b 0a 20 20 69 6e 74 20 69 2c 20 72 63 3b 0a 20  {.  int i, rc;. 
2a30: 20 0a 20 20 69 66 28 20 64 62 2d 3e 69 6e 69 74   .  if( db->init
2a40: 2e 62 75 73 79 20 29 20 72 65 74 75 72 6e 20 53  .busy ) return S
2a50: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 61 73 73 65  QLITE_OK;.  asse
2a60: 72 74 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26  rt( (db->flags &
2a70: 20 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69   SQLITE_Initiali
2a80: 7a 65 64 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20  zed)==0 );.  rc 
2a90: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 64  = SQLITE_OK;.  d
2aa0: 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31  b->init.busy = 1
2ab0: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 72 63 3d  ;.  for(i=0; rc=
2ac0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 3c  =SQLITE_OK && i<
2ad0: 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20  db->nDb; i++){. 
2ae0: 20 20 20 69 66 28 20 44 62 48 61 73 50 72 6f 70     if( DbHasProp
2af0: 65 72 74 79 28 64 62 2c 20 69 2c 20 44 42 5f 53  erty(db, i, DB_S
2b00: 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 20 63  chemaLoaded) ) c
2b10: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 61 73 73  ontinue;.    ass
2b20: 65 72 74 28 20 69 21 3d 31 20 29 3b 20 20 2f 2a  ert( i!=1 );  /*
2b30: 20 53 68 6f 75 6c 64 20 68 61 76 65 20 62 65 65   Should have bee
2b40: 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  n initialized to
2b50: 67 65 74 68 65 72 20 77 69 74 68 20 30 20 2a 2f  gether with 0 */
2b60: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2b70: 33 49 6e 69 74 4f 6e 65 28 64 62 2c 20 69 2c 20  3InitOne(db, i, 
2b80: 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 69  pzErrMsg);.    i
2b90: 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 73  f( rc ){.      s
2ba0: 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72  qlite3ResetInter
2bb0: 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 69 29  nalSchema(db, i)
2bc0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 64 62  ;.    }.  }.  db
2bd0: 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b  ->init.busy = 0;
2be0: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
2bf0: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 64 62 2d 3e  E_OK ){.    db->
2c00: 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f  flags |= SQLITE_
2c10: 49 6e 69 74 69 61 6c 69 7a 65 64 3b 0a 20 20 20  Initialized;.   
2c20: 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e   sqlite3CommitIn
2c30: 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 64 62  ternalChanges(db
2c40: 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 72 63  );.  }..  if( rc
2c50: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
2c60: 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20     db->flags &= 
2c70: 7e 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69  ~SQLITE_Initiali
2c80: 7a 65 64 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  zed;.  }.  retur
2c90: 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  n rc;.}../*.** T
2ca0: 68 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  he version of th
2cb0: 65 20 6c 69 62 72 61 72 79 0a 2a 2f 0a 63 6f 6e  e library.*/.con
2cc0: 73 74 20 63 68 61 72 20 72 63 73 69 64 5b 5d 20  st char rcsid[] 
2cd0: 3d 20 22 40 28 23 29 20 5c 30 34 34 49 64 3a 20  = "@(#) \044Id: 
2ce0: 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 22  SQLite version "
2cf0: 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 20   SQLITE_VERSION 
2d00: 22 20 24 22 3b 0a 63 6f 6e 73 74 20 63 68 61 72  " $";.const char
2d10: 20 73 71 6c 69 74 65 33 5f 76 65 72 73 69 6f 6e   sqlite3_version
2d20: 5b 5d 20 3d 20 53 51 4c 49 54 45 5f 56 45 52 53  [] = SQLITE_VERS
2d30: 49 4f 4e 3b 0a 0a 2f 2a 0a 2a 2a 20 44 6f 65 73  ION;../*.** Does
2d40: 20 74 68 65 20 6c 69 62 72 61 72 79 20 65 78 70   the library exp
2d50: 65 63 74 20 64 61 74 61 20 74 6f 20 62 65 20 65  ect data to be e
2d60: 6e 63 6f 64 65 64 20 61 73 20 55 54 46 2d 38 20  ncoded as UTF-8 
2d70: 6f 72 20 69 73 6f 38 38 35 39 3f 20 20 54 68 65  or iso8859?  The
2d80: 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 67 6c  .** following gl
2d90: 6f 62 61 6c 20 63 6f 6e 73 74 61 6e 74 20 61 6c  obal constant al
2da0: 77 61 79 73 20 6c 65 74 73 20 75 73 20 6b 6e 6f  ways lets us kno
2db0: 77 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  w..*/.#ifdef SQL
2dc0: 49 54 45 5f 55 54 46 38 0a 63 6f 6e 73 74 20 63  ITE_UTF8.const c
2dd0: 68 61 72 20 73 71 6c 69 74 65 33 5f 65 6e 63 6f  har sqlite3_enco
2de0: 64 69 6e 67 5b 5d 20 3d 20 22 55 54 46 2d 38 22  ding[] = "UTF-8"
2df0: 3b 0a 23 65 6c 73 65 0a 63 6f 6e 73 74 20 63 68  ;.#else.const ch
2e00: 61 72 20 73 71 6c 69 74 65 33 5f 65 6e 63 6f 64  ar sqlite3_encod
2e10: 69 6e 67 5b 5d 20 3d 20 22 69 73 6f 38 38 35 39  ing[] = "iso8859
2e20: 22 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ";.#endif../*.**
2e30: 20 54 68 69 73 20 69 73 20 74 68 65 20 64 65 66   This is the def
2e40: 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66  ault collating f
2e50: 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 64 20 22 42  unction named "B
2e60: 49 4e 41 52 59 22 20 77 68 69 63 68 20 69 73 20  INARY" which is 
2e70: 61 6c 77 61 79 73 0a 2a 2a 20 61 76 61 69 6c 61  always.** availa
2e80: 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ble..*/.static i
2e90: 6e 74 20 62 69 6e 61 72 79 43 6f 6c 6c 61 74 69  nt binaryCollati
2ea0: 6e 67 46 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a  ngFunc(.  void *
2eb0: 4e 6f 74 55 73 65 64 2c 0a 20 20 69 6e 74 20 6e  NotUsed,.  int n
2ec0: 4b 65 79 31 2c 20 63 6f 6e 73 74 20 76 6f 69 64  Key1, const void
2ed0: 20 2a 70 4b 65 79 31 2c 0a 20 20 69 6e 74 20 6e   *pKey1,.  int n
2ee0: 4b 65 79 32 2c 20 63 6f 6e 73 74 20 76 6f 69 64  Key2, const void
2ef0: 20 2a 70 4b 65 79 32 0a 29 7b 0a 20 20 69 6e 74   *pKey2.){.  int
2f00: 20 72 63 2c 20 6e 3b 0a 20 20 6e 20 3d 20 6e 4b   rc, n;.  n = nK
2f10: 65 79 31 3c 6e 4b 65 79 32 20 3f 20 6e 4b 65 79  ey1<nKey2 ? nKey
2f20: 31 20 3a 20 6e 4b 65 79 32 3b 0a 20 20 72 63 20  1 : nKey2;.  rc 
2f30: 3d 20 6d 65 6d 63 6d 70 28 70 4b 65 79 31 2c 20  = memcmp(pKey1, 
2f40: 70 4b 65 79 32 2c 20 6e 29 3b 0a 20 20 69 66 28  pKey2, n);.  if(
2f50: 20 72 63 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63   rc==0 ){.    rc
2f60: 20 3d 20 6e 4b 65 79 31 20 2d 20 6e 4b 65 79 32   = nKey1 - nKey2
2f70: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72  ;.  }.  return r
2f80: 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e  c;.}../*.** Open
2f90: 20 61 20 6e 65 77 20 53 51 4c 69 74 65 20 64 61   a new SQLite da
2fa0: 74 61 62 61 73 65 2e 20 20 43 6f 6e 73 74 72 75  tabase.  Constru
2fb0: 63 74 20 61 6e 20 22 73 71 6c 69 74 65 22 20 73  ct an "sqlite" s
2fc0: 74 72 75 63 74 75 72 65 20 74 6f 20 64 65 66 69  tructure to defi
2fd0: 6e 65 0a 2a 2a 20 74 68 65 20 73 74 61 74 65 20  ne.** the state 
2fe0: 6f 66 20 74 68 69 73 20 64 61 74 61 62 61 73 65  of this database
2ff0: 20 61 6e 64 20 72 65 74 75 72 6e 20 61 20 70 6f   and return a po
3000: 69 6e 74 65 72 20 74 6f 20 74 68 61 74 20 73 74  inter to that st
3010: 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41  ructure..**.** A
3020: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
3030: 65 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20  e to initialize 
3040: 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61  the in-memory da
3050: 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
3060: 61 74 0a 2a 2a 20 68 6f 6c 64 20 74 68 65 20 64  at.** hold the d
3070: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20  atabase schema. 
3080: 20 42 75 74 20 69 66 20 74 68 69 73 20 66 61 69   But if this fai
3090: 6c 73 20 28 62 65 63 61 75 73 65 20 74 68 65 20  ls (because the 
30a0: 73 63 68 65 6d 61 20 66 69 6c 65 0a 2a 2a 20 69  schema file.** i
30b0: 73 20 6c 6f 63 6b 65 64 29 20 74 68 65 6e 20 74  s locked) then t
30c0: 68 61 74 20 73 74 65 70 20 69 73 20 64 65 66 65  hat step is defe
30d0: 72 72 65 64 20 75 6e 74 69 6c 20 74 68 65 20 66  rred until the f
30e0: 69 72 73 74 20 63 61 6c 6c 20 74 6f 0a 2a 2a 20  irst call to.** 
30f0: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2e 0a  sqlite3_exec()..
3100: 2a 2f 0a 73 71 6c 69 74 65 20 2a 73 71 6c 69 74  */.sqlite *sqlit
3110: 65 33 5f 6f 70 65 6e 28 63 6f 6e 73 74 20 63 68  e3_open(const ch
3120: 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 69  ar *zFilename, i
3130: 6e 74 20 6d 6f 64 65 2c 20 63 68 61 72 20 2a 2a  nt mode, char **
3140: 70 7a 45 72 72 4d 73 67 29 7b 0a 20 20 73 71 6c  pzErrMsg){.  sql
3150: 69 74 65 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72  ite *db;.  int r
3160: 63 2c 20 69 3b 0a 0a 20 20 2f 2a 20 41 6c 6c 6f  c, i;..  /* Allo
3170: 63 61 74 65 20 74 68 65 20 73 71 6c 69 74 65 20  cate the sqlite 
3180: 64 61 74 61 20 73 74 72 75 63 74 75 72 65 20 2a  data structure *
3190: 2f 0a 20 20 64 62 20 3d 20 73 71 6c 69 74 65 4d  /.  db = sqliteM
31a0: 61 6c 6c 6f 63 28 20 73 69 7a 65 6f 66 28 73 71  alloc( sizeof(sq
31b0: 6c 69 74 65 29 20 29 3b 0a 20 20 69 66 28 20 70  lite) );.  if( p
31c0: 7a 45 72 72 4d 73 67 20 29 20 2a 70 7a 45 72 72  zErrMsg ) *pzErr
31d0: 4d 73 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 64  Msg = 0;.  if( d
31e0: 62 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  b==0 ) goto no_m
31f0: 65 6d 5f 6f 6e 5f 6f 70 65 6e 3b 0a 20 20 64 62  em_on_open;.  db
3200: 2d 3e 6f 6e 45 72 72 6f 72 20 3d 20 4f 45 5f 44  ->onError = OE_D
3210: 65 66 61 75 6c 74 3b 0a 20 20 64 62 2d 3e 70 72  efault;.  db->pr
3220: 69 6f 72 4e 65 77 52 6f 77 69 64 20 3d 20 30 3b  iorNewRowid = 0;
3230: 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53  .  db->magic = S
3240: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59  QLITE_MAGIC_BUSY
3250: 3b 0a 20 20 64 62 2d 3e 6e 44 62 20 3d 20 32 3b  ;.  db->nDb = 2;
3260: 0a 20 20 64 62 2d 3e 61 44 62 20 3d 20 64 62 2d  .  db->aDb = db-
3270: 3e 61 44 62 53 74 61 74 69 63 3b 0a 20 20 2f 2a  >aDbStatic;.  /*
3280: 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51   db->flags |= SQ
3290: 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d  LITE_ShortColNam
32a0: 65 73 3b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  es; */.  sqlite3
32b0: 48 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61 46  HashInit(&db->aF
32c0: 75 6e 63 2c 20 53 51 4c 49 54 45 5f 48 41 53 48  unc, SQLITE_HASH
32d0: 5f 53 54 52 49 4e 47 2c 20 31 29 3b 0a 20 20 73  _STRING, 1);.  s
32e0: 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28 26  qlite3HashInit(&
32f0: 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 2c 20 53 51  db->aCollSeq, SQ
3300: 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47  LITE_HASH_STRING
3310: 2c 20 30 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  , 0);.  for(i=0;
3320: 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29   i<db->nDb; i++)
3330: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 48 61 73  {.    sqlite3Has
3340: 68 49 6e 69 74 28 26 64 62 2d 3e 61 44 62 5b 69  hInit(&db->aDb[i
3350: 5d 2e 74 62 6c 48 61 73 68 2c 20 53 51 4c 49 54  ].tblHash, SQLIT
3360: 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30  E_HASH_STRING, 0
3370: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 48 61  );.    sqlite3Ha
3380: 73 68 49 6e 69 74 28 26 64 62 2d 3e 61 44 62 5b  shInit(&db->aDb[
3390: 69 5d 2e 69 64 78 48 61 73 68 2c 20 53 51 4c 49  i].idxHash, SQLI
33a0: 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20  TE_HASH_STRING, 
33b0: 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 48  0);.    sqlite3H
33c0: 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61 44 62  ashInit(&db->aDb
33d0: 5b 69 5d 2e 74 72 69 67 48 61 73 68 2c 20 53 51  [i].trigHash, SQ
33e0: 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47  LITE_HASH_STRING
33f0: 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
3400: 33 48 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61  3HashInit(&db->a
3410: 44 62 5b 69 5d 2e 61 46 4b 65 79 2c 20 53 51 4c  Db[i].aFKey, SQL
3420: 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c  ITE_HASH_STRING,
3430: 20 31 29 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 70   1);.  }.  db->p
3440: 44 66 6c 74 43 6f 6c 6c 20 3d 0a 20 20 20 20 20  DfltColl =.     
3450: 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6c  sqlite3ChangeCol
3460: 6c 61 74 69 6e 67 46 75 6e 63 74 69 6f 6e 28 64  latingFunction(d
3470: 62 2c 20 22 42 49 4e 41 52 59 22 2c 20 36 2c 20  b, "BINARY", 6, 
3480: 30 2c 20 62 69 6e 61 72 79 43 6f 6c 6c 61 74 69  0, binaryCollati
3490: 6e 67 46 75 6e 63 29 3b 0a 20 20 0a 20 20 2f 2a  ngFunc);.  .  /*
34a0: 20 4f 70 65 6e 20 74 68 65 20 62 61 63 6b 65 6e   Open the backen
34b0: 64 20 64 61 74 61 62 61 73 65 20 64 72 69 76 65  d database drive
34c0: 72 20 2a 2f 0a 20 20 69 66 28 20 7a 46 69 6c 65  r */.  if( zFile
34d0: 6e 61 6d 65 5b 30 5d 3d 3d 27 3a 27 20 26 26 20  name[0]==':' && 
34e0: 73 74 72 63 6d 70 28 7a 46 69 6c 65 6e 61 6d 65  strcmp(zFilename
34f0: 2c 22 3a 6d 65 6d 6f 72 79 3a 22 29 3d 3d 30 20  ,":memory:")==0 
3500: 29 7b 0a 20 20 20 20 64 62 2d 3e 74 65 6d 70 5f  ){.    db->temp_
3510: 73 74 6f 72 65 20 3d 20 32 3b 0a 20 20 7d 0a 20  store = 2;.  }. 
3520: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
3530: 65 65 46 61 63 74 6f 72 79 28 64 62 2c 20 7a 46  eeFactory(db, zF
3540: 69 6c 65 6e 61 6d 65 2c 20 30 2c 20 4d 41 58 5f  ilename, 0, MAX_
3550: 50 41 47 45 53 2c 20 26 64 62 2d 3e 61 44 62 5b  PAGES, &db->aDb[
3560: 30 5d 2e 70 42 74 29 3b 0a 20 20 69 66 28 20 72  0].pBt);.  if( r
3570: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
3580: 20 20 20 20 73 77 69 74 63 68 28 20 72 63 20 29      switch( rc )
3590: 7b 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a  {.      default:
35a0: 20 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74   {.        sqlit
35b0: 65 33 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72  e3SetString(pzEr
35c0: 72 4d 73 67 2c 20 22 75 6e 61 62 6c 65 20 74 6f  rMsg, "unable to
35d0: 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 3a 20   open database: 
35e0: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 7a 46  ",.           zF
35f0: 69 6c 65 6e 61 6d 65 2c 20 28 63 68 61 72 2a 29  ilename, (char*)
3600: 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  0);.      }.    
3610: 7d 0a 20 20 20 20 73 71 6c 69 74 65 46 72 65 65  }.    sqliteFree
3620: 28 64 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  (db);.    sqlite
3630: 33 53 74 72 52 65 61 6c 6c 6f 63 28 70 7a 45 72  3StrRealloc(pzEr
3640: 72 4d 73 67 29 3b 0a 20 20 20 20 72 65 74 75 72  rMsg);.    retur
3650: 6e 20 30 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 61  n 0;.  }.  db->a
3660: 44 62 5b 30 5d 2e 7a 4e 61 6d 65 20 3d 20 22 6d  Db[0].zName = "m
3670: 61 69 6e 22 3b 0a 20 20 64 62 2d 3e 61 44 62 5b  ain";.  db->aDb[
3680: 31 5d 2e 7a 4e 61 6d 65 20 3d 20 22 74 65 6d 70  1].zName = "temp
3690: 22 3b 0a 0a 20 20 2f 2a 20 41 74 74 65 6d 70 74  ";..  /* Attempt
36a0: 20 74 6f 20 72 65 61 64 20 74 68 65 20 73 63 68   to read the sch
36b0: 65 6d 61 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ema */.  sqlite3
36c0: 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46  RegisterBuiltinF
36d0: 75 6e 63 74 69 6f 6e 73 28 64 62 29 3b 0a 20 20  unctions(db);.  
36e0: 72 63 20 3d 20 73 71 6c 69 74 65 33 49 6e 69 74  rc = sqlite3Init
36f0: 28 64 62 2c 20 70 7a 45 72 72 4d 73 67 29 3b 0a  (db, pzErrMsg);.
3700: 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51    db->magic = SQ
3710: 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 3b  LITE_MAGIC_OPEN;
3720: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 6d  .  if( sqlite3_m
3730: 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 29 7b 0a  alloc_failed ){.
3740: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73      sqlite3_clos
3750: 65 28 64 62 29 3b 0a 20 20 20 20 67 6f 74 6f 20  e(db);.    goto 
3760: 6e 6f 5f 6d 65 6d 5f 6f 6e 5f 6f 70 65 6e 3b 0a  no_mem_on_open;.
3770: 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63 21 3d    }else if( rc!=
3780: 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 63 21  SQLITE_OK && rc!
3790: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
37a0: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73      sqlite3_clos
37b0: 65 28 64 62 29 3b 0a 20 20 20 20 73 71 6c 69 74  e(db);.    sqlit
37c0: 65 33 53 74 72 52 65 61 6c 6c 6f 63 28 70 7a 45  e3StrRealloc(pzE
37d0: 72 72 4d 73 67 29 3b 0a 20 20 20 20 72 65 74 75  rrMsg);.    retu
37e0: 72 6e 20 30 3b 0a 20 20 7d 65 6c 73 65 20 69 66  rn 0;.  }else if
37f0: 28 20 70 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20  ( pzErrMsg ){.  
3800: 20 20 73 71 6c 69 74 65 46 72 65 65 28 2a 70 7a    sqliteFree(*pz
3810: 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 2a 70 7a  ErrMsg);.    *pz
3820: 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 7d 0a  ErrMsg = 0;.  }.
3830: 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 61 20 70  .  /* Return a p
3840: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 65  ointer to the ne
3850: 77 6c 79 20 6f 70 65 6e 65 64 20 64 61 74 61 62  wly opened datab
3860: 61 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f  ase structure */
3870: 0a 20 20 72 65 74 75 72 6e 20 64 62 3b 0a 0a 6e  .  return db;..n
3880: 6f 5f 6d 65 6d 5f 6f 6e 5f 6f 70 65 6e 3a 0a 20  o_mem_on_open:. 
3890: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
38a0: 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 6f 75 74  g(pzErrMsg, "out
38b0: 20 6f 66 20 6d 65 6d 6f 72 79 22 2c 20 28 63 68   of memory", (ch
38c0: 61 72 2a 29 30 29 3b 0a 20 20 73 71 6c 69 74 65  ar*)0);.  sqlite
38d0: 33 53 74 72 52 65 61 6c 6c 6f 63 28 70 7a 45 72  3StrRealloc(pzEr
38e0: 72 4d 73 67 29 3b 0a 20 20 72 65 74 75 72 6e 20  rMsg);.  return 
38f0: 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  0;.}../*.** Retu
3900: 72 6e 20 74 68 65 20 52 4f 57 49 44 20 6f 66 20  rn the ROWID of 
3910: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
3920: 69 6e 73 65 72 74 0a 2a 2f 0a 69 6e 74 20 73 71  insert.*/.int sq
3930: 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
3940: 74 5f 72 6f 77 69 64 28 73 71 6c 69 74 65 20 2a  t_rowid(sqlite *
3950: 64 62 29 7b 0a 20 20 72 65 74 75 72 6e 20 64 62  db){.  return db
3960: 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 7d 0a 0a  ->lastRowid;.}..
3970: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
3980: 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 6e 67   number of chang
3990: 65 73 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72  es in the most r
39a0: 65 63 65 6e 74 20 63 61 6c 6c 20 74 6f 20 73 71  ecent call to sq
39b0: 6c 69 74 65 33 5f 65 78 65 63 28 29 2e 0a 2a 2f  lite3_exec()..*/
39c0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 68 61  .int sqlite3_cha
39d0: 6e 67 65 73 28 73 71 6c 69 74 65 20 2a 64 62 29  nges(sqlite *db)
39e0: 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 6e  {.  return db->n
39f0: 43 68 61 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  Change;.}../*.**
3a00: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   Return the numb
3a10: 65 72 20 6f 66 20 63 68 61 6e 67 65 73 20 70 72  er of changes pr
3a20: 6f 64 75 63 65 64 20 62 79 20 74 68 65 20 6c 61  oduced by the la
3a30: 73 74 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54  st INSERT, UPDAT
3a40: 45 2c 20 6f 72 0a 2a 2a 20 44 45 4c 45 54 45 20  E, or.** DELETE 
3a50: 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 63 6f 6d  statement to com
3a60: 70 6c 65 74 65 20 65 78 65 63 75 74 69 6f 6e 2e  plete execution.
3a70: 20 54 68 65 20 63 6f 75 6e 74 20 64 6f 65 73 20   The count does 
3a80: 6e 6f 74 20 69 6e 63 6c 75 64 65 0a 2a 2a 20 63  not include.** c
3a90: 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 53 51  hanges due to SQ
3aa0: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 65 78 65  L statements exe
3ab0: 63 75 74 65 64 20 69 6e 20 74 72 69 67 67 65 72  cuted in trigger
3ac0: 20 70 72 6f 67 72 61 6d 73 20 74 68 61 74 20 77   programs that w
3ad0: 65 72 65 0a 2a 2a 20 74 72 69 67 67 65 72 65 64  ere.** triggered
3ae0: 20 62 79 20 74 68 61 74 20 73 74 61 74 65 6d 65   by that stateme
3af0: 6e 74 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  nt.*/.int sqlite
3b00: 33 5f 6c 61 73 74 5f 73 74 61 74 65 6d 65 6e 74  3_last_statement
3b10: 5f 63 68 61 6e 67 65 73 28 73 71 6c 69 74 65 20  _changes(sqlite 
3b20: 2a 64 62 29 7b 0a 20 20 72 65 74 75 72 6e 20 64  *db){.  return d
3b30: 62 2d 3e 6c 73 43 68 61 6e 67 65 3b 0a 7d 0a 0a  b->lsChange;.}..
3b40: 2f 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 6e 20 65  /*.** Close an e
3b50: 78 69 73 74 69 6e 67 20 53 51 4c 69 74 65 20 64  xisting SQLite d
3b60: 61 74 61 62 61 73 65 0a 2a 2f 0a 76 6f 69 64 20  atabase.*/.void 
3b70: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 73 71  sqlite3_close(sq
3b80: 6c 69 74 65 20 2a 64 62 29 7b 0a 20 20 48 61 73  lite *db){.  Has
3b90: 68 45 6c 65 6d 20 2a 69 3b 0a 20 20 69 6e 74 20  hElem *i;.  int 
3ba0: 6a 3b 0a 20 20 64 62 2d 3e 77 61 6e 74 5f 74 6f  j;.  db->want_to
3bb0: 5f 63 6c 6f 73 65 20 3d 20 31 3b 0a 20 20 69 66  _close = 1;.  if
3bc0: 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  ( sqlite3SafetyC
3bd0: 68 65 63 6b 28 64 62 29 20 7c 7c 20 73 71 6c 69  heck(db) || sqli
3be0: 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
3bf0: 29 7b 0a 20 20 20 20 2f 2a 20 70 72 69 6e 74 66  ){.    /* printf
3c00: 28 22 44 49 44 20 4e 4f 54 20 43 4c 4f 53 45 5c  ("DID NOT CLOSE\
3c10: 6e 22 29 3b 20 66 66 6c 75 73 68 28 73 74 64 6f  n"); fflush(stdo
3c20: 75 74 29 3b 20 2a 2f 0a 20 20 20 20 72 65 74 75  ut); */.    retu
3c30: 72 6e 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 6d 61  rn;.  }.  db->ma
3c40: 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47  gic = SQLITE_MAG
3c50: 49 43 5f 43 4c 4f 53 45 44 3b 0a 20 20 66 6f 72  IC_CLOSED;.  for
3c60: 28 6a 3d 30 3b 20 6a 3c 64 62 2d 3e 6e 44 62 3b  (j=0; j<db->nDb;
3c70: 20 6a 2b 2b 29 7b 0a 20 20 20 20 73 74 72 75 63   j++){.    struc
3c80: 74 20 44 62 20 2a 70 44 62 20 3d 20 26 64 62 2d  t Db *pDb = &db-
3c90: 3e 61 44 62 5b 6a 5d 3b 0a 20 20 20 20 69 66 28  >aDb[j];.    if(
3ca0: 20 70 44 62 2d 3e 70 42 74 20 29 7b 0a 20 20 20   pDb->pBt ){.   
3cb0: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43     sqlite3BtreeC
3cc0: 6c 6f 73 65 28 70 44 62 2d 3e 70 42 74 29 3b 0a  lose(pDb->pBt);.
3cd0: 20 20 20 20 20 20 70 44 62 2d 3e 70 42 74 20 3d        pDb->pBt =
3ce0: 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   0;.    }.  }.  
3cf0: 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65  sqlite3ResetInte
3d00: 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 30  rnalSchema(db, 0
3d10: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
3d20: 3e 6e 44 62 3c 3d 32 20 29 3b 0a 20 20 61 73 73  >nDb<=2 );.  ass
3d30: 65 72 74 28 20 64 62 2d 3e 61 44 62 3d 3d 64 62  ert( db->aDb==db
3d40: 2d 3e 61 44 62 53 74 61 74 69 63 20 29 3b 0a 20  ->aDbStatic );. 
3d50: 20 66 6f 72 28 69 3d 73 71 6c 69 74 65 48 61 73   for(i=sqliteHas
3d60: 68 46 69 72 73 74 28 26 64 62 2d 3e 61 46 75 6e  hFirst(&db->aFun
3d70: 63 29 3b 20 69 3b 20 69 3d 73 71 6c 69 74 65 48  c); i; i=sqliteH
3d80: 61 73 68 4e 65 78 74 28 69 29 29 7b 0a 20 20 20  ashNext(i)){.   
3d90: 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 2c   FuncDef *pFunc,
3da0: 20 2a 70 4e 65 78 74 3b 0a 20 20 20 20 66 6f 72   *pNext;.    for
3db0: 28 70 46 75 6e 63 20 3d 20 28 46 75 6e 63 44 65  (pFunc = (FuncDe
3dc0: 66 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61 74  f*)sqliteHashDat
3dd0: 61 28 69 29 3b 20 70 46 75 6e 63 3b 20 70 46 75  a(i); pFunc; pFu
3de0: 6e 63 3d 70 4e 65 78 74 29 7b 0a 20 20 20 20 20  nc=pNext){.     
3df0: 20 70 4e 65 78 74 20 3d 20 70 46 75 6e 63 2d 3e   pNext = pFunc->
3e00: 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 73 71 6c  pNext;.      sql
3e10: 69 74 65 46 72 65 65 28 70 46 75 6e 63 29 3b 0a  iteFree(pFunc);.
3e20: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69      }.  }.  sqli
3e30: 74 65 33 48 61 73 68 43 6c 65 61 72 28 26 64 62  te3HashClear(&db
3e40: 2d 3e 61 46 75 6e 63 29 3b 0a 20 20 73 71 6c 69  ->aFunc);.  sqli
3e50: 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c  te3Error(db, SQL
3e60: 49 54 45 5f 4f 4b 2c 20 30 29 3b 20 2f 2a 20 44  ITE_OK, 0); /* D
3e70: 65 61 6c 6c 6f 63 61 74 65 73 20 61 6e 79 20 63  eallocates any c
3e80: 61 63 68 65 64 20 65 72 72 6f 72 20 73 74 72 69  ached error stri
3e90: 6e 67 73 2e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  ngs. */.  sqlite
3ea0: 46 72 65 65 28 64 62 29 3b 0a 7d 0a 0a 2f 2a 0a  Free(db);.}../*.
3eb0: 2a 2a 20 52 6f 6c 6c 62 61 63 6b 20 61 6c 6c 20  ** Rollback all 
3ec0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 2e 0a  database files..
3ed0: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  */.void sqlite3R
3ee0: 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74  ollbackAll(sqlit
3ef0: 65 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 69 3b  e *db){.  int i;
3f00: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62  .  for(i=0; i<db
3f10: 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20  ->nDb; i++){.   
3f20: 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e   if( db->aDb[i].
3f30: 70 42 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  pBt ){.      sql
3f40: 69 74 65 33 42 74 72 65 65 52 6f 6c 6c 62 61 63  ite3BtreeRollbac
3f50: 6b 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  k(db->aDb[i].pBt
3f60: 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62  );.      db->aDb
3f70: 5b 69 5d 2e 69 6e 54 72 61 6e 73 20 3d 20 30 3b  [i].inTrans = 0;
3f80: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c  .    }.  }.  sql
3f90: 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61  ite3ResetInterna
3fa0: 6c 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a  lSchema(db, 0);.
3fb0: 20 20 2f 2a 20 73 71 6c 69 74 65 33 52 6f 6c 6c    /* sqlite3Roll
3fc0: 62 61 63 6b 49 6e 74 65 72 6e 61 6c 43 68 61 6e  backInternalChan
3fd0: 67 65 73 28 64 62 29 3b 20 2a 2f 0a 7d 0a 0a 2f  ges(db); */.}../
3fe0: 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 53 51 4c  *.** Execute SQL
3ff0: 20 63 6f 64 65 2e 20 20 52 65 74 75 72 6e 20 6f   code.  Return o
4000: 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45  ne of the SQLITE
4010: 5f 20 73 75 63 63 65 73 73 2f 66 61 69 6c 75 72  _ success/failur
4020: 65 0a 2a 2a 20 63 6f 64 65 73 2e 20 20 41 6c 73  e.** codes.  Als
4030: 6f 20 77 72 69 74 65 20 61 6e 20 65 72 72 6f 72  o write an error
4040: 20 6d 65 73 73 61 67 65 20 69 6e 74 6f 20 6d 65   message into me
4050: 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72  mory obtained fr
4060: 6f 6d 0a 2a 2a 20 6d 61 6c 6c 6f 63 28 29 20 61  om.** malloc() a
4070: 6e 64 20 6d 61 6b 65 20 2a 70 7a 45 72 72 4d 73  nd make *pzErrMs
4080: 67 20 70 6f 69 6e 74 20 74 6f 20 74 68 61 74 20  g point to that 
4090: 6d 65 73 73 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 49  message..**.** I
40a0: 66 20 74 68 65 20 53 51 4c 20 69 73 20 61 20 71  f the SQL is a q
40b0: 75 65 72 79 2c 20 74 68 65 6e 20 66 6f 72 20 65  uery, then for e
40c0: 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 71  ach row in the q
40d0: 75 65 72 79 20 72 65 73 75 6c 74 0a 2a 2a 20 74  uery result.** t
40e0: 68 65 20 78 43 61 6c 6c 62 61 63 6b 28 29 20 66  he xCallback() f
40f0: 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65  unction is calle
4100: 64 2e 20 20 70 41 72 67 20 62 65 63 6f 6d 65 73  d.  pArg becomes
4110: 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
4120: 67 75 6d 65 6e 74 20 74 6f 20 78 43 61 6c 6c 62  gument to xCallb
4130: 61 63 6b 28 29 2e 20 20 49 66 20 78 43 61 6c 6c  ack().  If xCall
4140: 62 61 63 6b 3d 4e 55 4c 4c 20 74 68 65 6e 20 6e  back=NULL then n
4150: 6f 20 63 61 6c 6c 62 61 63 6b 0a 2a 2a 20 69 73  o callback.** is
4160: 20 69 6e 76 6f 6b 65 64 2c 20 65 76 65 6e 20 66   invoked, even f
4170: 6f 72 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 69  or queries..*/.i
4180: 6e 74 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28  nt sqlite3_exec(
4190: 0a 20 20 73 71 6c 69 74 65 20 2a 64 62 2c 20 20  .  sqlite *db,  
41a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
41b0: 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 6f  * The database o
41c0: 6e 20 77 68 69 63 68 20 74 68 65 20 53 51 4c 20  n which the SQL 
41d0: 65 78 65 63 75 74 65 73 20 2a 2f 0a 20 20 63 6f  executes */.  co
41e0: 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 2c 20  nst char *zSql, 
41f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
4200: 20 53 51 4c 20 74 6f 20 62 65 20 65 78 65 63 75   SQL to be execu
4210: 74 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 5f  ted */.  sqlite_
4220: 63 61 6c 6c 62 61 63 6b 20 78 43 61 6c 6c 62 61  callback xCallba
4230: 63 6b 2c 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ck,  /* Invoke t
4240: 68 69 73 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75  his callback rou
4250: 74 69 6e 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tine */.  void *
4260: 70 41 72 67 2c 20 20 20 20 20 20 20 20 20 20 20  pArg,           
4270: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
4280: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 61 6c 6c  rgument to xCall
4290: 62 61 63 6b 28 29 20 2a 2f 0a 20 20 63 68 61 72  back() */.  char
42a0: 20 2a 2a 70 7a 45 72 72 4d 73 67 20 20 20 20 20   **pzErrMsg     
42b0: 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74 65          /* Write
42c0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
42d0: 68 65 72 65 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  here */.){.  int
42e0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
42f0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
4300: 4c 65 66 74 6f 76 65 72 3b 0a 20 20 73 71 6c 69  Leftover;.  sqli
4310: 74 65 5f 76 6d 20 2a 70 56 6d 3b 0a 20 20 69 6e  te_vm *pVm;.  in
4320: 74 20 6e 52 65 74 72 79 20 3d 20 30 3b 0a 20 20  t nRetry = 0;.  
4330: 69 6e 74 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b  int nChange = 0;
4340: 0a 20 20 69 6e 74 20 6e 43 61 6c 6c 62 61 63 6b  .  int nCallback
4350: 3b 0a 0a 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30  ;..  if( zSql==0
4360: 20 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45   ) return SQLITE
4370: 5f 4f 4b 3b 0a 20 20 77 68 69 6c 65 28 20 72 63  _OK;.  while( rc
4380: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 7a  ==SQLITE_OK && z
4390: 53 71 6c 5b 30 5d 20 29 7b 0a 20 20 20 20 70 56  Sql[0] ){.    pV
43a0: 6d 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20  m = 0;.    rc = 
43b0: 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 28  sqlite3_compile(
43c0: 64 62 2c 20 7a 53 71 6c 2c 20 26 7a 4c 65 66 74  db, zSql, &zLeft
43d0: 6f 76 65 72 2c 20 26 70 56 6d 2c 20 70 7a 45 72  over, &pVm, pzEr
43e0: 72 4d 73 67 29 3b 0a 20 20 20 20 69 66 28 20 72  rMsg);.    if( r
43f0: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
4400: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 56        assert( pV
4410: 6d 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 5f  m==0 || sqlite3_
4420: 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 29 3b  malloc_failed );
4430: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63  .      return rc
4440: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
4450: 70 56 6d 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  pVm==0 ){.      
4460: 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20  /* This happens 
4470: 69 66 20 74 68 65 20 7a 53 71 6c 20 69 6e 70 75  if the zSql inpu
4480: 74 20 63 6f 6e 74 61 69 6e 65 64 20 6f 6e 6c 79  t contained only
4490: 20 77 68 69 74 65 73 70 61 63 65 20 2a 2f 0a 20   whitespace */. 
44a0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
44b0: 7d 0a 20 20 20 20 64 62 2d 3e 6e 43 68 61 6e 67  }.    db->nChang
44c0: 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20  e += nChange;.  
44d0: 20 20 6e 43 61 6c 6c 62 61 63 6b 20 3d 20 30 3b    nCallback = 0;
44e0: 0a 20 20 20 20 77 68 69 6c 65 28 31 29 7b 0a 20  .    while(1){. 
44f0: 20 20 20 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20       int nArg;. 
4500: 20 20 20 20 20 63 68 61 72 20 2a 2a 61 7a 41 72       char **azAr
4510: 67 2c 20 2a 2a 61 7a 43 6f 6c 3b 0a 20 20 20 20  g, **azCol;.    
4520: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73    rc = sqlite3_s
4530: 74 65 70 28 70 56 6d 2c 20 26 6e 41 72 67 2c 20  tep(pVm, &nArg, 
4540: 28 63 6f 6e 73 74 20 63 68 61 72 2a 2a 2a 29 26  (const char***)&
4550: 61 7a 41 72 67 2c 28 63 6f 6e 73 74 20 63 68 61  azArg,(const cha
4560: 72 2a 2a 2a 29 26 61 7a 43 6f 6c 29 3b 0a 20 20  r***)&azCol);.  
4570: 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
4580: 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 20 20  TE_ROW ){.      
4590: 20 20 69 66 28 20 78 43 61 6c 6c 62 61 63 6b 21    if( xCallback!
45a0: 3d 30 20 26 26 20 78 43 61 6c 6c 62 61 63 6b 28  =0 && xCallback(
45b0: 70 41 72 67 2c 20 6e 41 72 67 2c 20 61 7a 41 72  pArg, nArg, azAr
45c0: 67 2c 20 61 7a 43 6f 6c 29 20 29 7b 0a 20 20 20  g, azCol) ){.   
45d0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66         sqlite3_f
45e0: 69 6e 61 6c 69 7a 65 28 70 56 6d 2c 20 30 29 3b  inalize(pVm, 0);
45f0: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
4600: 6e 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a  n SQLITE_ABORT;.
4610: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4620: 20 20 6e 43 61 6c 6c 62 61 63 6b 2b 2b 3b 0a 20    nCallback++;. 
4630: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
4640: 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
4650: 54 45 5f 44 4f 4e 45 20 26 26 20 6e 43 61 6c 6c  TE_DONE && nCall
4660: 62 61 63 6b 3d 3d 30 0a 20 20 20 20 20 20 20 20  back==0.        
4670: 20 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 20    && (db->flags 
4680: 26 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c  & SQLITE_NullCal
4690: 6c 62 61 63 6b 29 21 3d 30 20 26 26 20 78 43 61  lback)!=0 && xCa
46a0: 6c 6c 62 61 63 6b 21 3d 30 20 29 7b 0a 20 20 20  llback!=0 ){.   
46b0: 20 20 20 20 20 20 20 78 43 61 6c 6c 62 61 63 6b         xCallback
46c0: 28 70 41 72 67 2c 20 6e 41 72 67 2c 20 61 7a 41  (pArg, nArg, azA
46d0: 72 67 2c 20 61 7a 43 6f 6c 29 3b 0a 20 20 20 20  rg, azCol);.    
46e0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 63      }.        rc
46f0: 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c   = sqlite3_final
4700: 69 7a 65 28 70 56 6d 2c 20 70 7a 45 72 72 4d 73  ize(pVm, pzErrMs
4710: 67 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  g);.        if( 
4720: 72 63 3d 3d 53 51 4c 49 54 45 5f 53 43 48 45 4d  rc==SQLITE_SCHEM
4730: 41 20 26 26 20 6e 52 65 74 72 79 3c 32 20 29 7b  A && nRetry<2 ){
4740: 0a 20 20 20 20 20 20 20 20 20 20 6e 52 65 74 72  .          nRetr
4750: 79 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 72  y++;.          r
4760: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
4770: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
4780: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4790: 20 20 69 66 28 20 64 62 2d 3e 70 56 64 62 65 3d    if( db->pVdbe=
47a0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
47b0: 6e 43 68 61 6e 67 65 20 3d 20 64 62 2d 3e 6e 43  nChange = db->nC
47c0: 68 61 6e 67 65 3b 0a 20 20 20 20 20 20 20 20 7d  hange;.        }
47d0: 0a 20 20 20 20 20 20 20 20 6e 52 65 74 72 79 20  .        nRetry 
47e0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7a 53 71  = 0;.        zSq
47f0: 6c 20 3d 20 7a 4c 65 66 74 6f 76 65 72 3b 0a 20  l = zLeftover;. 
4800: 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 69 73         while( is
4810: 73 70 61 63 65 28 7a 53 71 6c 5b 30 5d 29 20 29  space(zSql[0]) )
4820: 20 7a 53 71 6c 2b 2b 3b 0a 20 20 20 20 20 20 20   zSql++;.       
4830: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
4840: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
4850: 72 6e 20 72 63 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a  rn rc;.}.../*.**
4860: 20 43 6f 6d 70 69 6c 65 20 61 20 73 69 6e 67 6c   Compile a singl
4870: 65 20 73 74 61 74 65 6d 65 6e 74 20 6f 66 20 53  e statement of S
4880: 51 4c 20 69 6e 74 6f 20 61 20 76 69 72 74 75 61  QL into a virtua
4890: 6c 20 6d 61 63 68 69 6e 65 2e 20 20 52 65 74 75  l machine.  Retu
48a0: 72 6e 20 6f 6e 65 0a 2a 2a 20 6f 66 20 74 68 65  rn one.** of the
48b0: 20 53 51 4c 49 54 45 5f 20 73 75 63 63 65 73 73   SQLITE_ success
48c0: 2f 66 61 69 6c 75 72 65 20 63 6f 64 65 73 2e 20  /failure codes. 
48d0: 20 41 6c 73 6f 20 77 72 69 74 65 20 61 6e 20 65   Also write an e
48e0: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 6e 74  rror message int
48f0: 6f 0a 2a 2a 20 6d 65 6d 6f 72 79 20 6f 62 74 61  o.** memory obta
4900: 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  ined from malloc
4910: 28 29 20 61 6e 64 20 6d 61 6b 65 20 2a 70 7a 45  () and make *pzE
4920: 72 72 4d 73 67 20 70 6f 69 6e 74 20 74 6f 20 74  rrMsg point to t
4930: 68 61 74 20 6d 65 73 73 61 67 65 2e 0a 2a 2f 0a  hat message..*/.
4940: 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70  int sqlite3_comp
4950: 69 6c 65 28 0a 20 20 73 71 6c 69 74 65 20 2a 64  ile(.  sqlite *d
4960: 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b,              
4970: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
4980: 73 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  se on which the 
4990: 53 51 4c 20 65 78 65 63 75 74 65 73 20 2a 2f 0a  SQL executes */.
49a0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53    const char *zS
49b0: 71 6c 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ql,           /*
49c0: 20 54 68 65 20 53 51 4c 20 74 6f 20 62 65 20 65   The SQL to be e
49d0: 78 65 63 75 74 65 64 20 2a 2f 0a 20 20 63 6f 6e  xecuted */.  con
49e0: 73 74 20 63 68 61 72 20 2a 2a 70 7a 54 61 69 6c  st char **pzTail
49f0: 2c 20 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a  ,        /* OUT:
4a00: 20 4e 65 78 74 20 73 74 61 74 65 6d 65 6e 74 20   Next statement 
4a10: 61 66 74 65 72 20 74 68 65 20 66 69 72 73 74 20  after the first 
4a20: 2a 2f 0a 20 20 73 71 6c 69 74 65 5f 76 6d 20 2a  */.  sqlite_vm *
4a30: 2a 70 70 56 6d 2c 20 20 20 20 20 20 20 20 20 20  *ppVm,          
4a40: 20 2f 2a 20 4f 55 54 3a 20 54 68 65 20 76 69 72   /* OUT: The vir
4a50: 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a  tual machine */.
4a60: 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73    char **pzErrMs
4a70: 67 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  g             /*
4a80: 20 4f 55 54 3a 20 57 72 69 74 65 20 65 72 72 6f   OUT: Write erro
4a90: 72 20 6d 65 73 73 61 67 65 73 20 68 65 72 65 20  r messages here 
4aa0: 2a 2f 0a 29 7b 0a 20 20 50 61 72 73 65 20 73 50  */.){.  Parse sP
4ab0: 61 72 73 65 3b 0a 0a 20 20 69 66 28 20 70 7a 45  arse;..  if( pzE
4ac0: 72 72 4d 73 67 20 29 20 2a 70 7a 45 72 72 4d 73  rrMsg ) *pzErrMs
4ad0: 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 73 71 6c  g = 0;.  if( sql
4ae0: 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
4af0: 20 29 20 67 6f 74 6f 20 65 78 65 63 5f 6d 69 73   ) goto exec_mis
4b00: 75 73 65 3b 0a 20 20 69 66 28 20 21 64 62 2d 3e  use;.  if( !db->
4b10: 69 6e 69 74 2e 62 75 73 79 20 29 7b 0a 20 20 20  init.busy ){.   
4b20: 20 69 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 20   if( (db->flags 
4b30: 26 20 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c  & SQLITE_Initial
4b40: 69 7a 65 64 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ized)==0 ){.    
4b50: 20 20 69 6e 74 20 72 63 2c 20 63 6e 74 20 3d 20    int rc, cnt = 
4b60: 31 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20  1;.      while( 
4b70: 28 72 63 20 3d 20 73 71 6c 69 74 65 33 49 6e 69  (rc = sqlite3Ini
4b80: 74 28 64 62 2c 20 70 7a 45 72 72 4d 73 67 29 29  t(db, pzErrMsg))
4b90: 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 0a 20 20  ==SQLITE_BUSY.  
4ba0: 20 20 20 20 20 20 20 26 26 20 64 62 2d 3e 78 42         && db->xB
4bb0: 75 73 79 43 61 6c 6c 62 61 63 6b 0a 20 20 20 20  usyCallback.    
4bc0: 20 20 20 20 20 26 26 20 64 62 2d 3e 78 42 75 73       && db->xBus
4bd0: 79 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 42  yCallback(db->pB
4be0: 75 73 79 41 72 67 2c 20 22 22 2c 20 63 6e 74 2b  usyArg, "", cnt+
4bf0: 2b 29 21 3d 30 20 29 7b 7d 0a 20 20 20 20 20 20  +)!=0 ){}.      
4c00: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
4c10: 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  K ){.        sql
4c20: 69 74 65 33 53 74 72 52 65 61 6c 6c 6f 63 28 70  ite3StrRealloc(p
4c30: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20  zErrMsg);.      
4c40: 20 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f    sqlite3SafetyO
4c50: 66 66 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20  ff(db);.        
4c60: 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 20 20 20  return rc;.     
4c70: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 7a 45   }.      if( pzE
4c80: 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 20 20 20  rrMsg ){.       
4c90: 20 73 71 6c 69 74 65 46 72 65 65 28 2a 70 7a 45   sqliteFree(*pzE
4ca0: 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 20 20  rrMsg);.        
4cb0: 2a 70 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20  *pzErrMsg = 0;. 
4cc0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
4cd0: 0a 20 20 61 73 73 65 72 74 28 20 28 64 62 2d 3e  .  assert( (db->
4ce0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 49  flags & SQLITE_I
4cf0: 6e 69 74 69 61 6c 69 7a 65 64 29 21 3d 30 20 7c  nitialized)!=0 |
4d00: 7c 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20  | db->init.busy 
4d10: 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 70 56 64  );.  if( db->pVd
4d20: 62 65 3d 3d 30 20 29 7b 20 64 62 2d 3e 6e 43 68  be==0 ){ db->nCh
4d30: 61 6e 67 65 20 3d 20 30 3b 20 7d 0a 20 20 6d 65  ange = 0; }.  me
4d40: 6d 73 65 74 28 26 73 50 61 72 73 65 2c 20 30 2c  mset(&sParse, 0,
4d50: 20 73 69 7a 65 6f 66 28 73 50 61 72 73 65 29 29   sizeof(sParse))
4d60: 3b 0a 20 20 73 50 61 72 73 65 2e 64 62 20 3d 20  ;.  sParse.db = 
4d70: 64 62 3b 0a 20 20 73 71 6c 69 74 65 33 52 75 6e  db;.  sqlite3Run
4d80: 50 61 72 73 65 72 28 26 73 50 61 72 73 65 2c 20  Parser(&sParse, 
4d90: 7a 53 71 6c 2c 20 70 7a 45 72 72 4d 73 67 29 3b  zSql, pzErrMsg);
4da0: 0a 20 20 69 66 28 20 64 62 2d 3e 78 54 72 61 63  .  if( db->xTrac
4db0: 65 20 26 26 20 21 64 62 2d 3e 69 6e 69 74 2e 62  e && !db->init.b
4dc0: 75 73 79 20 29 7b 0a 20 20 20 20 2f 2a 20 54 72  usy ){.    /* Tr
4dd0: 61 63 65 20 6f 6e 6c 79 20 74 68 65 20 73 74 61  ace only the sta
4de0: 74 6d 65 6e 74 20 74 68 61 74 20 77 61 73 20 63  tment that was c
4df0: 6f 6d 70 69 6c 65 64 2e 0a 20 20 20 20 2a 2a 20  ompiled..    ** 
4e00: 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 74  Make a copy of t
4e10: 68 61 74 20 70 61 72 74 20 6f 66 20 74 68 65 20  hat part of the 
4e20: 53 51 4c 20 73 74 72 69 6e 67 20 73 69 6e 63 65  SQL string since
4e30: 20 7a 53 51 4c 20 69 73 20 63 6f 6e 73 74 0a 20   zSQL is const. 
4e40: 20 20 20 2a 2a 20 61 6e 64 20 77 65 20 6d 75 73     ** and we mus
4e50: 74 20 70 61 73 73 20 61 20 7a 65 72 6f 20 74 65  t pass a zero te
4e60: 72 6d 69 6e 61 74 65 64 20 73 74 72 69 6e 67 20  rminated string 
4e70: 74 6f 20 74 68 65 20 74 72 61 63 65 20 66 75 6e  to the trace fun
4e80: 63 74 69 6f 6e 0a 20 20 20 20 2a 2a 20 54 68 65  ction.    ** The
4e90: 20 63 6f 70 79 20 69 73 20 75 6e 6e 65 63 65 73   copy is unneces
4ea0: 73 61 72 79 20 69 66 20 74 68 65 20 74 61 69 6c  sary if the tail
4eb0: 20 70 6f 69 6e 74 65 72 20 69 73 20 70 6f 69 6e   pointer is poin
4ec0: 74 69 6e 67 20 61 74 20 74 68 65 0a 20 20 20 20  ting at the.    
4ed0: 2a 2a 20 62 65 67 69 6e 6e 69 67 20 6f 72 20 65  ** beginnig or e
4ee0: 6e 64 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74  nd of the SQL st
4ef0: 72 69 6e 67 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  ring..    */.   
4f00: 20 69 66 28 20 73 50 61 72 73 65 2e 7a 54 61 69   if( sParse.zTai
4f10: 6c 20 26 26 20 73 50 61 72 73 65 2e 7a 54 61 69  l && sParse.zTai
4f20: 6c 21 3d 7a 53 71 6c 20 26 26 20 2a 73 50 61 72  l!=zSql && *sPar
4f30: 73 65 2e 7a 54 61 69 6c 20 29 7b 0a 20 20 20 20  se.zTail ){.    
4f40: 20 20 63 68 61 72 20 2a 74 6d 70 53 71 6c 20 3d    char *tmpSql =
4f50: 20 73 71 6c 69 74 65 53 74 72 4e 44 75 70 28 7a   sqliteStrNDup(z
4f60: 53 71 6c 2c 20 73 50 61 72 73 65 2e 7a 54 61 69  Sql, sParse.zTai
4f70: 6c 20 2d 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20  l - zSql);.     
4f80: 20 69 66 28 20 74 6d 70 53 71 6c 20 29 7b 0a 20   if( tmpSql ){. 
4f90: 20 20 20 20 20 20 20 64 62 2d 3e 78 54 72 61 63         db->xTrac
4fa0: 65 28 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c  e(db->pTraceArg,
4fb0: 20 74 6d 70 53 71 6c 29 3b 0a 20 20 20 20 20 20   tmpSql);.      
4fc0: 20 20 66 72 65 65 28 74 6d 70 53 71 6c 29 3b 0a    free(tmpSql);.
4fd0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
4fe0: 20 20 20 20 20 2f 2a 20 49 66 20 61 20 6d 65 6d       /* If a mem
4ff0: 6f 72 79 20 65 72 72 6f 72 20 6f 63 63 75 72 72  ory error occurr
5000: 65 64 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f  ed during the co
5010: 70 79 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  py,.        ** t
5020: 72 61 63 65 20 65 6e 74 69 72 65 20 53 51 4c 20  race entire SQL 
5030: 73 74 72 69 6e 67 20 61 6e 64 20 66 61 6c 6c 20  string and fall 
5040: 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 0a 20  through to the. 
5050: 20 20 20 20 20 20 20 2a 2a 20 73 71 6c 69 74 65         ** sqlite
5060: 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20  3_malloc_failed 
5070: 74 65 73 74 20 74 6f 20 72 65 70 6f 72 74 20 74  test to report t
5080: 68 65 20 65 72 72 6f 72 2e 0a 20 20 20 20 20 20  he error..      
5090: 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 64 62 2d    */.        db-
50a0: 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72 61  >xTrace(db->pTra
50b0: 63 65 41 72 67 2c 20 7a 53 71 6c 29 3b 20 0a 20  ceArg, zSql); . 
50c0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
50d0: 7b 0a 20 20 20 20 20 20 64 62 2d 3e 78 54 72 61  {.      db->xTra
50e0: 63 65 28 64 62 2d 3e 70 54 72 61 63 65 41 72 67  ce(db->pTraceArg
50f0: 2c 20 7a 53 71 6c 29 3b 20 0a 20 20 20 20 7d 0a  , zSql); .    }.
5100: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
5110: 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20  3_malloc_failed 
5120: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
5130: 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67  tString(pzErrMsg
5140: 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79  , "out of memory
5150: 22 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20  ", (char*)0);.  
5160: 20 20 73 50 61 72 73 65 2e 72 63 20 3d 20 53 51    sParse.rc = SQ
5170: 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20  LITE_NOMEM;.    
5180: 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
5190: 6c 6c 28 64 62 29 3b 0a 20 20 20 20 73 71 6c 69  ll(db);.    sqli
51a0: 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c  te3ResetInternal
51b0: 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20  Schema(db, 0);. 
51c0: 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20     db->flags &= 
51d0: 7e 53 51 4c 49 54 45 5f 49 6e 54 72 61 6e 73 3b  ~SQLITE_InTrans;
51e0: 0a 20 20 7d 0a 20 20 69 66 28 20 73 50 61 72 73  .  }.  if( sPars
51f0: 65 2e 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e  e.rc==SQLITE_DON
5200: 45 20 29 20 73 50 61 72 73 65 2e 72 63 20 3d 20  E ) sParse.rc = 
5210: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69 66 28  SQLITE_OK;.  if(
5220: 20 73 50 61 72 73 65 2e 72 63 21 3d 53 51 4c 49   sParse.rc!=SQLI
5230: 54 45 5f 4f 4b 20 26 26 20 70 7a 45 72 72 4d 73  TE_OK && pzErrMs
5240: 67 20 26 26 20 2a 70 7a 45 72 72 4d 73 67 3d 3d  g && *pzErrMsg==
5250: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
5260: 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d  SetString(pzErrM
5270: 73 67 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6f  sg, sqlite3_erro
5280: 72 5f 73 74 72 69 6e 67 28 73 50 61 72 73 65 2e  r_string(sParse.
5290: 72 63 29 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a  rc), (char*)0);.
52a0: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 53 74 72    }.  sqlite3Str
52b0: 52 65 61 6c 6c 6f 63 28 70 7a 45 72 72 4d 73 67  Realloc(pzErrMsg
52c0: 29 3b 0a 20 20 69 66 28 20 73 50 61 72 73 65 2e  );.  if( sParse.
52d0: 72 63 3d 3d 53 51 4c 49 54 45 5f 53 43 48 45 4d  rc==SQLITE_SCHEM
52e0: 41 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  A ){.    sqlite3
52f0: 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68  ResetInternalSch
5300: 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20 20 7d 0a  ema(db, 0);.  }.
5310: 20 20 61 73 73 65 72 74 28 20 70 70 56 6d 20 29    assert( ppVm )
5320: 3b 0a 20 20 2a 70 70 56 6d 20 3d 20 28 73 71 6c  ;.  *ppVm = (sql
5330: 69 74 65 5f 76 6d 2a 29 73 50 61 72 73 65 2e 70  ite_vm*)sParse.p
5340: 56 64 62 65 3b 0a 20 20 69 66 28 20 70 7a 54 61  Vdbe;.  if( pzTa
5350: 69 6c 20 29 20 2a 70 7a 54 61 69 6c 20 3d 20 73  il ) *pzTail = s
5360: 50 61 72 73 65 2e 7a 54 61 69 6c 3b 0a 20 20 69  Parse.zTail;.  i
5370: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
5380: 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 65  Off(db) ) goto e
5390: 78 65 63 5f 6d 69 73 75 73 65 3b 0a 20 20 72 65  xec_misuse;.  re
53a0: 74 75 72 6e 20 73 50 61 72 73 65 2e 72 63 3b 0a  turn sParse.rc;.
53b0: 0a 65 78 65 63 5f 6d 69 73 75 73 65 3a 0a 20 20  .exec_misuse:.  
53c0: 69 66 28 20 70 7a 45 72 72 4d 73 67 20 29 7b 0a  if( pzErrMsg ){.
53d0: 20 20 20 20 2a 70 7a 45 72 72 4d 73 67 20 3d 20      *pzErrMsg = 
53e0: 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  0;.    sqlite3Se
53f0: 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67  tString(pzErrMsg
5400: 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6f 72 5f  , sqlite3_error_
5410: 73 74 72 69 6e 67 28 53 51 4c 49 54 45 5f 4d 49  string(SQLITE_MI
5420: 53 55 53 45 29 2c 20 28 63 68 61 72 2a 29 30 29  SUSE), (char*)0)
5430: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 74 72  ;.    sqlite3Str
5440: 52 65 61 6c 6c 6f 63 28 70 7a 45 72 72 4d 73 67  Realloc(pzErrMsg
5450: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
5460: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 7d  SQLITE_MISUSE;.}
5470: 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  .../*.** The fol
5480: 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65 20 64  lowing routine d
5490: 65 73 74 72 6f 79 73 20 61 20 76 69 72 74 75 61  estroys a virtua
54a0: 6c 20 6d 61 63 68 69 6e 65 20 74 68 61 74 20 69  l machine that i
54b0: 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20  s created by.** 
54c0: 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70  the sqlite3_comp
54d0: 69 6c 65 28 29 20 72 6f 75 74 69 6e 65 2e 0a 2a  ile() routine..*
54e0: 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 67 65 72  *.** The integer
54f0: 20 72 65 74 75 72 6e 65 64 20 69 73 20 61 6e 20   returned is an 
5500: 53 51 4c 49 54 45 5f 20 73 75 63 63 65 73 73 2f  SQLITE_ success/
5510: 66 61 69 6c 75 72 65 20 63 6f 64 65 20 74 68 61  failure code tha
5520: 74 20 64 65 73 63 72 69 62 65 73 0a 2a 2a 20 74  t describes.** t
5530: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65 78 65  he result of exe
5540: 63 75 74 69 6e 67 20 74 68 65 20 76 69 72 74 75  cuting the virtu
5550: 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 41 6e 20  al machine.  An 
5560: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 73  error message is
5570: 0a 2a 2a 20 77 72 69 74 74 65 6e 20 69 6e 74 6f  .** written into
5580: 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64   memory obtained
5590: 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 20 61 6e 64   from malloc and
55a0: 20 2a 70 7a 45 72 72 4d 73 67 20 69 73 20 6d 61   *pzErrMsg is ma
55b0: 64 65 20 74 6f 0a 2a 2a 20 70 6f 69 6e 74 20 74  de to.** point t
55c0: 6f 20 74 68 61 74 20 65 72 72 6f 72 20 69 66 20  o that error if 
55d0: 70 7a 45 72 72 4d 73 67 20 69 73 20 6e 6f 74 20  pzErrMsg is not 
55e0: 4e 55 4c 4c 2e 20 20 54 68 65 20 63 61 6c 6c 69  NULL.  The calli
55f0: 6e 67 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 73 68  ng routine.** sh
5600: 6f 75 6c 64 20 75 73 65 20 73 71 6c 69 74 65 33  ould use sqlite3
5610: 5f 66 72 65 65 6d 65 6d 28 29 20 74 6f 20 64 65  _freemem() to de
5620: 6c 65 74 65 20 74 68 65 20 6d 65 73 73 61 67 65  lete the message
5630: 20 77 68 65 6e 20 69 74 20 68 61 73 20 66 69 6e   when it has fin
5640: 69 73 68 65 64 0a 2a 2a 20 77 69 74 68 20 69 74  ished.** with it
5650: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
5660: 5f 66 69 6e 61 6c 69 7a 65 28 0a 20 20 73 71 6c  _finalize(.  sql
5670: 69 74 65 5f 76 6d 20 2a 70 56 6d 2c 20 20 20 20  ite_vm *pVm,    
5680: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76          /* The v
5690: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 74  irtual machine t
56a0: 6f 20 62 65 20 64 65 73 74 72 6f 79 65 64 20 2a  o be destroyed *
56b0: 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72  /.  char **pzErr
56c0: 4d 73 67 20 20 20 20 20 20 20 20 20 20 20 20 2f  Msg            /
56d0: 2a 20 4f 55 54 3a 20 57 72 69 74 65 20 65 72 72  * OUT: Write err
56e0: 6f 72 20 6d 65 73 73 61 67 65 73 20 68 65 72 65  or messages here
56f0: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 20   */.){.  int rc 
5700: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46 69 6e  = sqlite3VdbeFin
5710: 61 6c 69 7a 65 28 28 56 64 62 65 2a 29 70 56 6d  alize((Vdbe*)pVm
5720: 2c 20 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73  , pzErrMsg);.  s
5730: 71 6c 69 74 65 33 53 74 72 52 65 61 6c 6c 6f 63  qlite3StrRealloc
5740: 28 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 72 65  (pzErrMsg);.  re
5750: 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a  turn rc;.}../*.*
5760: 2a 20 54 65 72 6d 69 6e 61 74 65 20 74 68 65 20  * Terminate the 
5770: 63 75 72 72 65 6e 74 20 65 78 65 63 75 74 69 6f  current executio
5780: 6e 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 6d  n of a virtual m
5790: 61 63 68 69 6e 65 20 74 68 65 6e 0a 2a 2a 20 72  achine then.** r
57a0: 65 73 65 74 20 74 68 65 20 76 69 72 74 75 61 6c  eset the virtual
57b0: 20 6d 61 63 68 69 6e 65 20 62 61 63 6b 20 74 6f   machine back to
57c0: 20 69 74 73 20 73 74 61 72 74 69 6e 67 20 73 74   its starting st
57d0: 61 74 65 20 73 6f 20 74 68 61 74 20 69 74 0a 2a  ate so that it.*
57e0: 2a 20 63 61 6e 20 62 65 20 72 65 75 73 65 64 2e  * can be reused.
57f0: 20 20 41 6e 79 20 65 72 72 6f 72 20 6d 65 73 73    Any error mess
5800: 61 67 65 20 72 65 73 75 6c 74 69 6e 67 20 66 72  age resulting fr
5810: 6f 6d 20 74 68 65 20 70 72 69 6f 72 20 65 78 65  om the prior exe
5820: 63 75 74 69 6f 6e 0a 2a 2a 20 69 73 20 77 72 69  cution.** is wri
5830: 74 74 65 6e 20 69 6e 74 6f 20 2a 70 7a 45 72 72  tten into *pzErr
5840: 4d 73 67 2e 20 20 41 20 73 75 63 63 65 73 73 20  Msg.  A success 
5850: 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70 72  code from the pr
5860: 69 6f 72 20 65 78 65 63 75 74 69 6f 6e 0a 2a 2a  ior execution.**
5870: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f   is returned..*/
5880: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 72 65 73  .int sqlite3_res
5890: 65 74 28 0a 20 20 73 71 6c 69 74 65 5f 76 6d 20  et(.  sqlite_vm 
58a0: 2a 70 56 6d 2c 20 20 20 20 20 20 20 20 20 20 20  *pVm,           
58b0: 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20   /* The virtual 
58c0: 6d 61 63 68 69 6e 65 20 74 6f 20 62 65 20 64 65  machine to be de
58d0: 73 74 72 6f 79 65 64 20 2a 2f 0a 20 20 63 68 61  stroyed */.  cha
58e0: 72 20 2a 2a 70 7a 45 72 72 4d 73 67 20 20 20 20  r **pzErrMsg    
58f0: 20 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20          /* OUT: 
5900: 57 72 69 74 65 20 65 72 72 6f 72 20 6d 65 73 73  Write error mess
5910: 61 67 65 73 20 68 65 72 65 20 2a 2f 0a 29 7b 0a  ages here */.){.
5920: 20 20 69 6e 74 20 72 63 20 3d 20 73 71 6c 69 74    int rc = sqlit
5930: 65 33 56 64 62 65 52 65 73 65 74 28 28 56 64 62  e3VdbeReset((Vdb
5940: 65 2a 29 70 56 6d 2c 20 70 7a 45 72 72 4d 73 67  e*)pVm, pzErrMsg
5950: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
5960: 4d 61 6b 65 52 65 61 64 79 28 28 56 64 62 65 2a  MakeReady((Vdbe*
5970: 29 70 56 6d 2c 20 2d 31 2c 20 30 29 3b 0a 20 20  )pVm, -1, 0);.  
5980: 73 71 6c 69 74 65 33 53 74 72 52 65 61 6c 6c 6f  sqlite3StrReallo
5990: 63 28 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 72  c(pzErrMsg);.  r
59a0: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a  eturn rc;.}../*.
59b0: 2a 2a 20 52 65 74 75 72 6e 20 61 20 73 74 61 74  ** Return a stat
59c0: 69 63 20 73 74 72 69 6e 67 20 74 68 61 74 20 64  ic string that d
59d0: 65 73 63 72 69 62 65 73 20 74 68 65 20 6b 69 6e  escribes the kin
59e0: 64 20 6f 66 20 65 72 72 6f 72 20 73 70 65 63 69  d of error speci
59f0: 66 69 65 64 20 69 6e 20 74 68 65 0a 2a 2a 20 61  fied in the.** a
5a00: 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 63 6f 6e 73  rgument..*/.cons
5a10: 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f  t char *sqlite3_
5a20: 65 72 72 6f 72 5f 73 74 72 69 6e 67 28 69 6e 74  error_string(int
5a30: 20 72 63 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68   rc){.  const ch
5a40: 61 72 20 2a 7a 3b 0a 20 20 73 77 69 74 63 68 28  ar *z;.  switch(
5a50: 20 72 63 20 29 7b 0a 20 20 20 20 63 61 73 65 20   rc ){.    case 
5a60: 53 51 4c 49 54 45 5f 4f 4b 3a 20 20 20 20 20 20  SQLITE_OK:      
5a70: 20 20 20 7a 20 3d 20 22 6e 6f 74 20 61 6e 20 65     z = "not an e
5a80: 72 72 6f 72 22 3b 20 20 20 20 20 20 20 20 20 20  rror";          
5a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5aa0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5ab0: 53 51 4c 49 54 45 5f 45 52 52 4f 52 3a 20 20 20  SQLITE_ERROR:   
5ac0: 20 20 20 7a 20 3d 20 22 53 51 4c 20 6c 6f 67 69     z = "SQL logi
5ad0: 63 20 65 72 72 6f 72 20 6f 72 20 6d 69 73 73 69  c error or missi
5ae0: 6e 67 20 64 61 74 61 62 61 73 65 22 3b 20 20 20  ng database";   
5af0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5b00: 53 51 4c 49 54 45 5f 49 4e 54 45 52 4e 41 4c 3a  SQLITE_INTERNAL:
5b10: 20 20 20 7a 20 3d 20 22 69 6e 74 65 72 6e 61 6c     z = "internal
5b20: 20 53 51 4c 69 74 65 20 69 6d 70 6c 65 6d 65 6e   SQLite implemen
5b30: 74 61 74 69 6f 6e 20 66 6c 61 77 22 3b 20 20 20  tation flaw";   
5b40: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5b50: 53 51 4c 49 54 45 5f 50 45 52 4d 3a 20 20 20 20  SQLITE_PERM:    
5b60: 20 20 20 7a 20 3d 20 22 61 63 63 65 73 73 20 70     z = "access p
5b70: 65 72 6d 69 73 73 69 6f 6e 20 64 65 6e 69 65 64  ermission denied
5b80: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ";              
5b90: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5ba0: 53 51 4c 49 54 45 5f 41 42 4f 52 54 3a 20 20 20  SQLITE_ABORT:   
5bb0: 20 20 20 7a 20 3d 20 22 63 61 6c 6c 62 61 63 6b     z = "callback
5bc0: 20 72 65 71 75 65 73 74 65 64 20 71 75 65 72 79   requested query
5bd0: 20 61 62 6f 72 74 22 3b 20 20 20 20 20 20 20 20   abort";        
5be0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5bf0: 53 51 4c 49 54 45 5f 42 55 53 59 3a 20 20 20 20  SQLITE_BUSY:    
5c00: 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73 65     z = "database
5c10: 20 69 73 20 6c 6f 63 6b 65 64 22 3b 20 20 20 20   is locked";    
5c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c30: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5c40: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3a 20 20  SQLITE_LOCKED:  
5c50: 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73 65     z = "database
5c60: 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64   table is locked
5c70: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ";              
5c80: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5c90: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3a 20 20 20  SQLITE_NOMEM:   
5ca0: 20 20 20 7a 20 3d 20 22 6f 75 74 20 6f 66 20 6d     z = "out of m
5cb0: 65 6d 6f 72 79 22 3b 20 20 20 20 20 20 20 20 20  emory";         
5cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5cd0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5ce0: 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3a  SQLITE_READONLY:
5cf0: 20 20 20 7a 20 3d 20 22 61 74 74 65 6d 70 74 20     z = "attempt 
5d00: 74 6f 20 77 72 69 74 65 20 61 20 72 65 61 64 6f  to write a reado
5d10: 6e 6c 79 20 64 61 74 61 62 61 73 65 22 3b 20 20  nly database";  
5d20: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5d30: 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
5d40: 3a 20 20 7a 20 3d 20 22 69 6e 74 65 72 72 75 70  :  z = "interrup
5d50: 74 65 64 22 3b 20 20 20 20 20 20 20 20 20 20 20  ted";           
5d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5d70: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5d80: 53 51 4c 49 54 45 5f 49 4f 45 52 52 3a 20 20 20  SQLITE_IOERR:   
5d90: 20 20 20 7a 20 3d 20 22 64 69 73 6b 20 49 2f 4f     z = "disk I/O
5da0: 20 65 72 72 6f 72 22 3b 20 20 20 20 20 20 20 20   error";        
5db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5dc0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5dd0: 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 3a 20  SQLITE_CORRUPT: 
5de0: 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73 65     z = "database
5df0: 20 64 69 73 6b 20 69 6d 61 67 65 20 69 73 20 6d   disk image is m
5e00: 61 6c 66 6f 72 6d 65 64 22 3b 20 20 20 20 20 20  alformed";      
5e10: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5e20: 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 3a  SQLITE_NOTFOUND:
5e30: 20 20 20 7a 20 3d 20 22 74 61 62 6c 65 20 6f 72     z = "table or
5e40: 20 72 65 63 6f 72 64 20 6e 6f 74 20 66 6f 75 6e   record not foun
5e50: 64 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  d";             
5e60: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5e70: 53 51 4c 49 54 45 5f 46 55 4c 4c 3a 20 20 20 20  SQLITE_FULL:    
5e80: 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73 65     z = "database
5e90: 20 69 73 20 66 75 6c 6c 22 3b 20 20 20 20 20 20   is full";      
5ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5eb0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5ec0: 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 3a  SQLITE_CANTOPEN:
5ed0: 20 20 20 7a 20 3d 20 22 75 6e 61 62 6c 65 20 74     z = "unable t
5ee0: 6f 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 20  o open database 
5ef0: 66 69 6c 65 22 3b 20 20 20 20 20 20 20 20 20 20  file";          
5f00: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5f10: 53 51 4c 49 54 45 5f 50 52 4f 54 4f 43 4f 4c 3a  SQLITE_PROTOCOL:
5f20: 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73 65     z = "database
5f30: 20 6c 6f 63 6b 69 6e 67 20 70 72 6f 74 6f 63 6f   locking protoco
5f40: 6c 20 66 61 69 6c 75 72 65 22 3b 20 20 20 20 20  l failure";     
5f50: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5f60: 53 51 4c 49 54 45 5f 45 4d 50 54 59 3a 20 20 20  SQLITE_EMPTY:   
5f70: 20 20 20 7a 20 3d 20 22 74 61 62 6c 65 20 63 6f     z = "table co
5f80: 6e 74 61 69 6e 73 20 6e 6f 20 64 61 74 61 22 3b  ntains no data";
5f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5fa0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5fb0: 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3a 20 20  SQLITE_SCHEMA:  
5fc0: 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73 65     z = "database
5fd0: 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e   schema has chan
5fe0: 67 65 64 22 3b 20 20 20 20 20 20 20 20 20 20 20  ged";           
5ff0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
6000: 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3a 20 20  SQLITE_TOOBIG:  
6010: 20 20 20 7a 20 3d 20 22 74 6f 6f 20 6d 75 63 68     z = "too much
6020: 20 64 61 74 61 20 66 6f 72 20 6f 6e 65 20 74 61   data for one ta
6030: 62 6c 65 20 72 6f 77 22 3b 20 20 20 20 20 20 20  ble row";       
6040: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
6050: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
6060: 54 3a 20 7a 20 3d 20 22 63 6f 6e 73 74 72 61 69  T: z = "constrai
6070: 6e 74 20 66 61 69 6c 65 64 22 3b 20 20 20 20 20  nt failed";     
6080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6090: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
60a0: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3a  SQLITE_MISMATCH:
60b0: 20 20 20 7a 20 3d 20 22 64 61 74 61 74 79 70 65     z = "datatype
60c0: 20 6d 69 73 6d 61 74 63 68 22 3b 20 20 20 20 20   mismatch";     
60d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
60e0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
60f0: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3a 20 20  SQLITE_MISUSE:  
6100: 20 20 20 7a 20 3d 20 22 6c 69 62 72 61 72 79 20     z = "library 
6110: 72 6f 75 74 69 6e 65 20 63 61 6c 6c 65 64 20 6f  routine called o
6120: 75 74 20 6f 66 20 73 65 71 75 65 6e 63 65 22 3b  ut of sequence";
6130: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
6140: 53 51 4c 49 54 45 5f 4e 4f 4c 46 53 3a 20 20 20  SQLITE_NOLFS:   
6150: 20 20 20 7a 20 3d 20 22 6b 65 72 6e 65 6c 20 6c     z = "kernel l
6160: 61 63 6b 73 20 6c 61 72 67 65 20 66 69 6c 65 20  acks large file 
6170: 73 75 70 70 6f 72 74 22 3b 20 20 20 20 20 20 20  support";       
6180: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
6190: 53 51 4c 49 54 45 5f 41 55 54 48 3a 20 20 20 20  SQLITE_AUTH:    
61a0: 20 20 20 7a 20 3d 20 22 61 75 74 68 6f 72 69 7a     z = "authoriz
61b0: 61 74 69 6f 6e 20 64 65 6e 69 65 64 22 3b 20 20  ation denied";  
61c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
61d0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
61e0: 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54 3a 20 20  SQLITE_FORMAT:  
61f0: 20 20 20 7a 20 3d 20 22 61 75 78 69 6c 69 61 72     z = "auxiliar
6200: 79 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61  y database forma
6210: 74 20 65 72 72 6f 72 22 3b 20 20 20 20 20 20 20  t error";       
6220: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
6230: 53 51 4c 49 54 45 5f 52 41 4e 47 45 3a 20 20 20  SQLITE_RANGE:   
6240: 20 20 20 7a 20 3d 20 22 62 69 6e 64 20 69 6e 64     z = "bind ind
6250: 65 78 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 22  ex out of range"
6260: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
6270: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
6280: 53 51 4c 49 54 45 5f 4e 4f 54 41 44 42 3a 20 20  SQLITE_NOTADB:  
6290: 20 20 20 7a 20 3d 20 22 66 69 6c 65 20 69 73 20     z = "file is 
62a0: 65 6e 63 72 79 70 74 65 64 20 6f 72 20 69 73 20  encrypted or is 
62b0: 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65 22 3b  not a database";
62c0: 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75  break;.    defau
62d0: 6c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  lt:             
62e0: 20 20 20 7a 20 3d 20 22 75 6e 6b 6e 6f 77 6e 20     z = "unknown 
62f0: 65 72 72 6f 72 22 3b 20 20 20 20 20 20 20 20 20  error";         
6300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6310: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 72 65 74  break;.  }.  ret
6320: 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn z;.}../*.** 
6330: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 6d 70  This routine imp
6340: 6c 65 6d 65 6e 74 73 20 61 20 62 75 73 79 20 63  lements a busy c
6350: 61 6c 6c 62 61 63 6b 20 74 68 61 74 20 73 6c 65  allback that sle
6360: 65 70 73 20 61 6e 64 20 74 72 69 65 73 0a 2a 2a  eps and tries.**
6370: 20 61 67 61 69 6e 20 75 6e 74 69 6c 20 61 20 74   again until a t
6380: 69 6d 65 6f 75 74 20 76 61 6c 75 65 20 69 73 20  imeout value is 
6390: 72 65 61 63 68 65 64 2e 20 20 54 68 65 20 74 69  reached.  The ti
63a0: 6d 65 6f 75 74 20 76 61 6c 75 65 20 69 73 0a 2a  meout value is.*
63b0: 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d  * an integer num
63c0: 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f  ber of milliseco
63d0: 6e 64 73 20 70 61 73 73 65 64 20 69 6e 20 61 73  nds passed in as
63e0: 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
63f0: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69  gument..*/.stati
6400: 63 20 69 6e 74 20 73 71 6c 69 74 65 44 65 66 61  c int sqliteDefa
6410: 75 6c 74 42 75 73 79 43 61 6c 6c 62 61 63 6b 28  ultBusyCallback(
6420: 0a 20 76 6f 69 64 20 2a 54 69 6d 65 6f 75 74 2c  . void *Timeout,
6430: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
6440: 78 69 6d 75 6d 20 61 6d 6f 75 6e 74 20 6f 66 20  ximum amount of 
6450: 74 69 6d 65 20 74 6f 20 77 61 69 74 20 2a 2f 0a  time to wait */.
6460: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 4e 6f 74   const char *Not
6470: 55 73 65 64 2c 20 20 20 20 20 2f 2a 20 54 68 65  Used,     /* The
6480: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
6490: 6c 65 20 74 68 61 74 20 69 73 20 62 75 73 79 20  le that is busy 
64a0: 2a 2f 0a 20 69 6e 74 20 63 6f 75 6e 74 20 20 20  */. int count   
64b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
64c0: 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20  Number of times 
64d0: 74 61 62 6c 65 20 68 61 73 20 62 65 65 6e 20 62  table has been b
64e0: 75 73 79 20 2a 2f 0a 29 7b 0a 23 69 66 20 53 51  usy */.){.#if SQ
64f0: 4c 49 54 45 5f 4d 49 4e 5f 53 4c 45 45 50 5f 4d  LITE_MIN_SLEEP_M
6500: 53 3d 3d 31 0a 20 20 73 74 61 74 69 63 20 63 6f  S==1.  static co
6510: 6e 73 74 20 63 68 61 72 20 64 65 6c 61 79 73 5b  nst char delays[
6520: 5d 20 3d 0a 20 20 20 20 20 7b 20 31 2c 20 32 2c  ] =.     { 1, 2,
6530: 20 35 2c 20 31 30 2c 20 31 35 2c 20 32 30 2c 20   5, 10, 15, 20, 
6540: 32 35 2c 20 32 35 2c 20 20 32 35 2c 20 20 35 30  25, 25,  25,  50
6550: 2c 20 20 35 30 2c 20 20 35 30 2c 20 31 30 30 7d  ,  50,  50, 100}
6560: 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ;.  static const
6570: 20 73 68 6f 72 74 20 69 6e 74 20 74 6f 74 61 6c   short int total
6580: 73 5b 5d 20 3d 0a 20 20 20 20 20 7b 20 30 2c 20  s[] =.     { 0, 
6590: 31 2c 20 33 2c 20 20 38 2c 20 31 38 2c 20 33 33  1, 3,  8, 18, 33
65a0: 2c 20 35 33 2c 20 37 38 2c 20 31 30 33 2c 20 31  , 53, 78, 103, 1
65b0: 32 38 2c 20 31 37 38 2c 20 32 32 38 2c 20 32 38  28, 178, 228, 28
65c0: 37 7d 3b 0a 23 20 64 65 66 69 6e 65 20 4e 44 45  7};.# define NDE
65d0: 4c 41 59 20 28 73 69 7a 65 6f 66 28 64 65 6c 61  LAY (sizeof(dela
65e0: 79 73 29 2f 73 69 7a 65 6f 66 28 64 65 6c 61 79  ys)/sizeof(delay
65f0: 73 5b 30 5d 29 29 0a 20 20 69 6e 74 20 74 69 6d  s[0])).  int tim
6600: 65 6f 75 74 20 3d 20 28 69 6e 74 29 54 69 6d 65  eout = (int)Time
6610: 6f 75 74 3b 0a 20 20 69 6e 74 20 64 65 6c 61 79  out;.  int delay
6620: 2c 20 70 72 69 6f 72 3b 0a 0a 20 20 69 66 28 20  , prior;..  if( 
6630: 63 6f 75 6e 74 20 3c 3d 20 4e 44 45 4c 41 59 20  count <= NDELAY 
6640: 29 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20 64  ){.    delay = d
6650: 65 6c 61 79 73 5b 63 6f 75 6e 74 2d 31 5d 3b 0a  elays[count-1];.
6660: 20 20 20 20 70 72 69 6f 72 20 3d 20 74 6f 74 61      prior = tota
6670: 6c 73 5b 63 6f 75 6e 74 2d 31 5d 3b 0a 20 20 7d  ls[count-1];.  }
6680: 65 6c 73 65 7b 0a 20 20 20 20 64 65 6c 61 79 20  else{.    delay 
6690: 3d 20 64 65 6c 61 79 73 5b 4e 44 45 4c 41 59 2d  = delays[NDELAY-
66a0: 31 5d 3b 0a 20 20 20 20 70 72 69 6f 72 20 3d 20  1];.    prior = 
66b0: 74 6f 74 61 6c 73 5b 4e 44 45 4c 41 59 2d 31 5d  totals[NDELAY-1]
66c0: 20 2b 20 64 65 6c 61 79 2a 28 63 6f 75 6e 74 2d   + delay*(count-
66d0: 4e 44 45 4c 41 59 2d 31 29 3b 0a 20 20 7d 0a 20  NDELAY-1);.  }. 
66e0: 20 69 66 28 20 70 72 69 6f 72 20 2b 20 64 65 6c   if( prior + del
66f0: 61 79 20 3e 20 74 69 6d 65 6f 75 74 20 29 7b 0a  ay > timeout ){.
6700: 20 20 20 20 64 65 6c 61 79 20 3d 20 74 69 6d 65      delay = time
6710: 6f 75 74 20 2d 20 70 72 69 6f 72 3b 0a 20 20 20  out - prior;.   
6720: 20 69 66 28 20 64 65 6c 61 79 3c 3d 30 20 29 20   if( delay<=0 ) 
6730: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
6740: 73 71 6c 69 74 65 33 4f 73 53 6c 65 65 70 28 64  sqlite3OsSleep(d
6750: 65 6c 61 79 29 3b 0a 20 20 72 65 74 75 72 6e 20  elay);.  return 
6760: 31 3b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 74  1;.#else.  int t
6770: 69 6d 65 6f 75 74 20 3d 20 28 69 6e 74 29 54 69  imeout = (int)Ti
6780: 6d 65 6f 75 74 3b 0a 20 20 69 66 28 20 28 63 6f  meout;.  if( (co
6790: 75 6e 74 2b 31 29 2a 31 30 30 30 20 3e 20 74 69  unt+1)*1000 > ti
67a0: 6d 65 6f 75 74 20 29 7b 0a 20 20 20 20 72 65 74  meout ){.    ret
67b0: 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c  urn 0;.  }.  sql
67c0: 69 74 65 33 4f 73 53 6c 65 65 70 28 31 30 30 30  ite3OsSleep(1000
67d0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 23  );.  return 1;.#
67e0: 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  endif.}../*.** T
67f0: 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73  his routine sets
6800: 20 74 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61   the busy callba
6810: 63 6b 20 66 6f 72 20 61 6e 20 53 71 6c 69 74 65  ck for an Sqlite
6820: 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65   database to the
6830: 0a 2a 2a 20 67 69 76 65 6e 20 63 61 6c 6c 62 61  .** given callba
6840: 63 6b 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  ck function with
6850: 20 74 68 65 20 67 69 76 65 6e 20 61 72 67 75 6d   the given argum
6860: 65 6e 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  ent..*/.void sql
6870: 69 74 65 33 5f 62 75 73 79 5f 68 61 6e 64 6c 65  ite3_busy_handle
6880: 72 28 0a 20 20 73 71 6c 69 74 65 20 2a 64 62 2c  r(.  sqlite *db,
6890: 0a 20 20 69 6e 74 20 28 2a 78 42 75 73 79 29 28  .  int (*xBusy)(
68a0: 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72  void*,const char
68b0: 2a 2c 69 6e 74 29 2c 0a 20 20 76 6f 69 64 20 2a  *,int),.  void *
68c0: 70 41 72 67 0a 29 7b 0a 20 20 64 62 2d 3e 78 42  pArg.){.  db->xB
68d0: 75 73 79 43 61 6c 6c 62 61 63 6b 20 3d 20 78 42  usyCallback = xB
68e0: 75 73 79 3b 0a 20 20 64 62 2d 3e 70 42 75 73 79  usy;.  db->pBusy
68f0: 41 72 67 20 3d 20 70 41 72 67 3b 0a 7d 0a 0a 23  Arg = pArg;.}..#
6900: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
6910: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
6920: 42 41 43 4b 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  BACK./*.** This 
6930: 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68 65  routine sets the
6940: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
6950: 63 6b 20 66 6f 72 20 61 6e 20 53 71 6c 69 74 65  ck for an Sqlite
6960: 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65   database to the
6970: 0a 2a 2a 20 67 69 76 65 6e 20 63 61 6c 6c 62 61  .** given callba
6980: 63 6b 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  ck function with
6990: 20 74 68 65 20 67 69 76 65 6e 20 61 72 67 75 6d   the given argum
69a0: 65 6e 74 2e 20 54 68 65 20 70 72 6f 67 72 65 73  ent. The progres
69b0: 73 20 63 61 6c 6c 62 61 63 6b 20 77 69 6c 6c 0a  s callback will.
69c0: 2a 2a 20 62 65 20 69 6e 76 6f 6b 65 64 20 65 76  ** be invoked ev
69d0: 65 72 79 20 6e 4f 70 73 20 6f 70 63 6f 64 65 73  ery nOps opcodes
69e0: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
69f0: 33 5f 70 72 6f 67 72 65 73 73 5f 68 61 6e 64 6c  3_progress_handl
6a00: 65 72 28 0a 20 20 73 71 6c 69 74 65 20 2a 64 62  er(.  sqlite *db
6a10: 2c 20 0a 20 20 69 6e 74 20 6e 4f 70 73 2c 0a 20  , .  int nOps,. 
6a20: 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73   int (*xProgress
6a30: 29 28 76 6f 69 64 2a 29 2c 20 0a 20 20 76 6f 69  )(void*), .  voi
6a40: 64 20 2a 70 41 72 67 0a 29 7b 0a 20 20 69 66 28  d *pArg.){.  if(
6a50: 20 6e 4f 70 73 3e 30 20 29 7b 0a 20 20 20 20 64   nOps>0 ){.    d
6a60: 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 3d 20 78  b->xProgress = x
6a70: 50 72 6f 67 72 65 73 73 3b 0a 20 20 20 20 64 62  Progress;.    db
6a80: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 3d  ->nProgressOps =
6a90: 20 6e 4f 70 73 3b 0a 20 20 20 20 64 62 2d 3e 70   nOps;.    db->p
6aa0: 50 72 6f 67 72 65 73 73 41 72 67 20 3d 20 70 41  ProgressArg = pA
6ab0: 72 67 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  rg;.  }else{.   
6ac0: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 3d   db->xProgress =
6ad0: 20 30 3b 0a 20 20 20 20 64 62 2d 3e 6e 50 72 6f   0;.    db->nPro
6ae0: 67 72 65 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20  gressOps = 0;.  
6af0: 20 20 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41    db->pProgressA
6b00: 72 67 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65  rg = 0;.  }.}.#e
6b10: 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  ndif.../*.** Thi
6b20: 73 20 72 6f 75 74 69 6e 65 20 69 6e 73 74 61 6c  s routine instal
6b30: 6c 73 20 61 20 64 65 66 61 75 6c 74 20 62 75 73  ls a default bus
6b40: 79 20 68 61 6e 64 6c 65 72 20 74 68 61 74 20 77  y handler that w
6b50: 61 69 74 73 20 66 6f 72 20 74 68 65 0a 2a 2a 20  aits for the.** 
6b60: 73 70 65 63 69 66 69 65 64 20 6e 75 6d 62 65 72  specified number
6b70: 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73   of milliseconds
6b80: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
6b90: 67 20 30 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  g 0..*/.void sql
6ba0: 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75  ite3_busy_timeou
6bb0: 74 28 73 71 6c 69 74 65 20 2a 64 62 2c 20 69 6e  t(sqlite *db, in
6bc0: 74 20 6d 73 29 7b 0a 20 20 69 66 28 20 6d 73 3e  t ms){.  if( ms>
6bd0: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
6be0: 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 64 62  _busy_handler(db
6bf0: 2c 20 73 71 6c 69 74 65 44 65 66 61 75 6c 74 42  , sqliteDefaultB
6c00: 75 73 79 43 61 6c 6c 62 61 63 6b 2c 20 28 76 6f  usyCallback, (vo
6c10: 69 64 2a 29 6d 73 29 3b 0a 20 20 7d 65 6c 73 65  id*)ms);.  }else
6c20: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 75  {.    sqlite3_bu
6c30: 73 79 5f 68 61 6e 64 6c 65 72 28 64 62 2c 20 30  sy_handler(db, 0
6c40: 2c 20 30 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a  , 0);.  }.}../*.
6c50: 2a 2a 20 43 61 75 73 65 20 61 6e 79 20 70 65 6e  ** Cause any pen
6c60: 64 69 6e 67 20 6f 70 65 72 61 74 69 6f 6e 20 74  ding operation t
6c70: 6f 20 73 74 6f 70 20 61 74 20 69 74 73 20 65 61  o stop at its ea
6c80: 72 6c 69 65 73 74 20 6f 70 70 6f 72 74 75 6e 69  rliest opportuni
6c90: 74 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  ty..*/.void sqli
6ca0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 73 71  te3_interrupt(sq
6cb0: 6c 69 74 65 20 2a 64 62 29 7b 0a 20 20 64 62 2d  lite *db){.  db-
6cc0: 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45  >flags |= SQLITE
6cd0: 5f 49 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f  _Interrupt;.}../
6ce0: 2a 0a 2a 2a 20 57 69 6e 64 6f 77 73 20 73 79 73  *.** Windows sys
6cf0: 74 65 6d 73 20 73 68 6f 75 6c 64 20 63 61 6c 6c  tems should call
6d00: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 74 6f   this routine to
6d10: 20 66 72 65 65 20 6d 65 6d 6f 72 79 20 74 68 61   free memory tha
6d20: 74 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64  t.** is returned
6d30: 20 69 6e 20 74 68 65 20 69 6e 20 74 68 65 20 65   in the in the e
6d40: 72 72 6d 73 67 20 70 61 72 61 6d 65 74 65 72 20  rrmsg parameter 
6d50: 6f 66 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28  of sqlite3_open(
6d60: 29 20 77 68 65 6e 0a 2a 2a 20 53 51 4c 69 74 65  ) when.** SQLite
6d70: 20 69 73 20 61 20 44 4c 4c 2e 20 20 46 6f 72 20   is a DLL.  For 
6d80: 73 6f 6d 65 20 72 65 61 73 6f 6e 2c 20 69 74 20  some reason, it 
6d90: 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20 74 6f  does not work to
6da0: 20 63 61 6c 6c 20 66 72 65 65 28 29 0a 2a 2a 20   call free().** 
6db0: 64 69 72 65 63 74 6c 79 2e 0a 2a 2a 0a 2a 2a 20  directly..**.** 
6dc0: 4e 6f 74 65 20 74 68 61 74 20 77 65 20 6e 65 65  Note that we nee
6dd0: 64 20 74 6f 20 63 61 6c 6c 20 66 72 65 65 28 29  d to call free()
6de0: 20 6e 6f 74 20 73 71 6c 69 74 65 46 72 65 65 28   not sqliteFree(
6df0: 29 20 68 65 72 65 2c 20 73 69 6e 63 65 20 65 76  ) here, since ev
6e00: 65 72 79 0a 2a 2a 20 73 74 72 69 6e 67 20 74 68  ery.** string th
6e10: 61 74 20 69 73 20 65 78 70 6f 72 74 65 64 20 66  at is exported f
6e20: 72 6f 6d 20 53 51 4c 69 74 65 20 73 68 6f 75 6c  rom SQLite shoul
6e30: 64 20 68 61 76 65 20 61 6c 72 65 61 64 79 20 70  d have already p
6e40: 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a  assed through.**
6e50: 20 73 71 6c 69 74 65 33 53 74 72 52 65 61 6c 6c   sqlite3StrReall
6e60: 6f 63 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  oc()..*/.void sq
6e70: 6c 69 74 65 33 5f 66 72 65 65 6d 65 6d 28 76 6f  lite3_freemem(vo
6e80: 69 64 20 2a 70 29 7b 20 66 72 65 65 28 70 29 3b  id *p){ free(p);
6e90: 20 7d 0a 0a 2f 2a 0a 2a 2a 20 57 69 6e 64 6f 77   }../*.** Window
6ea0: 73 20 73 79 73 74 65 6d 73 20 6e 65 65 64 20 66  s systems need f
6eb0: 75 6e 63 74 69 6f 6e 73 20 74 6f 20 63 61 6c 6c  unctions to call
6ec0: 20 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20 73   to return the s
6ed0: 71 6c 69 74 65 33 5f 76 65 72 73 69 6f 6e 0a 2a  qlite3_version.*
6ee0: 2a 20 61 6e 64 20 73 71 6c 69 74 65 33 5f 65 6e  * and sqlite3_en
6ef0: 63 6f 64 69 6e 67 20 73 74 72 69 6e 67 73 20 73  coding strings s
6f00: 69 6e 63 65 20 74 68 65 79 20 61 72 65 20 75 6e  ince they are un
6f10: 61 62 6c 65 20 74 6f 20 61 63 63 65 73 73 20 63  able to access c
6f20: 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 77 69 74 68  onstants.** with
6f30: 69 6e 20 44 4c 4c 73 2e 0a 2a 2f 0a 63 6f 6e 73  in DLLs..*/.cons
6f40: 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f  t char *sqlite3_
6f50: 6c 69 62 76 65 72 73 69 6f 6e 28 76 6f 69 64 29  libversion(void)
6f60: 7b 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33  { return sqlite3
6f70: 5f 76 65 72 73 69 6f 6e 3b 20 7d 0a 63 6f 6e 73  _version; }.cons
6f80: 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f  t char *sqlite3_
6f90: 6c 69 62 65 6e 63 6f 64 69 6e 67 28 76 6f 69 64  libencoding(void
6fa0: 29 7b 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  ){ return sqlite
6fb0: 33 5f 65 6e 63 6f 64 69 6e 67 3b 20 7d 0a 0a 2f  3_encoding; }../
6fc0: 2a 0a 2a 2a 20 43 72 65 61 74 65 20 6e 65 77 20  *.** Create new 
6fd0: 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e  user-defined fun
6fe0: 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 73 71 6c  ctions.  The sql
6ff0: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
7000: 74 69 6f 6e 28 29 0a 2a 2a 20 72 6f 75 74 69 6e  tion().** routin
7010: 65 20 63 72 65 61 74 65 73 20 61 20 72 65 67 75  e creates a regu
7020: 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  lar function and
7030: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
7040: 61 67 67 72 65 67 61 74 65 28 29 0a 2a 2a 20 63  aggregate().** c
7050: 72 65 61 74 65 73 20 61 6e 20 61 67 67 72 65 67  reates an aggreg
7060: 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a  ate function..**
7070: 0a 2a 2a 20 50 61 73 73 69 6e 67 20 61 20 4e 55  .** Passing a NU
7080: 4c 4c 20 78 46 75 6e 63 20 61 72 67 75 6d 65 6e  LL xFunc argumen
7090: 74 20 6f 72 20 4e 55 4c 4c 20 78 53 74 65 70 20  t or NULL xStep 
70a0: 61 6e 64 20 78 46 69 6e 61 6c 69 7a 65 20 61 72  and xFinalize ar
70b0: 67 75 6d 65 6e 74 73 0a 2a 2a 20 64 69 73 61 62  guments.** disab
70c0: 6c 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  les the function
70d0: 2e 20 20 43 61 6c 6c 69 6e 67 20 73 71 6c 69 74  .  Calling sqlit
70e0: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
70f0: 6f 6e 28 29 20 77 69 74 68 20 74 68 65 0a 2a 2a  on() with the.**
7100: 20 73 61 6d 65 20 6e 61 6d 65 20 61 6e 64 20 6e   same name and n
7110: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
7120: 74 73 20 61 73 20 61 20 70 72 69 6f 72 20 63 61  ts as a prior ca
7130: 6c 6c 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33  ll to.** sqlite3
7140: 5f 63 72 65 61 74 65 5f 61 67 67 72 65 67 61 74  _create_aggregat
7150: 65 28 29 20 64 69 73 61 62 6c 65 73 20 74 68 65  e() disables the
7160: 20 70 72 69 6f 72 20 63 61 6c 6c 20 74 6f 0a 2a   prior call to.*
7170: 2a 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  * sqlite3_create
7180: 5f 61 67 67 72 65 67 61 74 65 28 29 2c 20 61 6e  _aggregate(), an
7190: 64 20 76 69 63 65 20 76 65 72 73 61 2e 0a 2a 2a  d vice versa..**
71a0: 0a 2a 2a 20 49 66 20 6e 41 72 67 20 69 73 20 2d  .** If nArg is -
71b0: 31 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  1 it means that 
71c0: 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 77 69  this function wi
71d0: 6c 6c 20 61 63 63 65 70 74 20 61 6e 79 20 6e 75  ll accept any nu
71e0: 6d 62 65 72 0a 2a 2a 20 6f 66 20 61 72 67 75 6d  mber.** of argum
71f0: 65 6e 74 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20  ents, including 
7200: 30 2e 20 20 54 68 65 20 6d 61 78 69 6d 75 6d 20  0.  The maximum 
7210: 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 20 6f 66  allowed value of
7220: 20 6e 41 72 67 20 69 73 20 31 32 37 2e 0a 2a 2f   nArg is 127..*/
7230: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 72 65  .int sqlite3_cre
7240: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 0a 20 20  ate_function(.  
7250: 73 71 6c 69 74 65 20 2a 64 62 2c 20 20 20 20 20  sqlite *db,     
7260: 20 20 20 20 20 2f 2a 20 41 64 64 20 74 68 65 20       /* Add the 
7270: 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68 69 73  function to this
7280: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
7290: 74 69 6f 6e 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  tion */.  const 
72a0: 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 20 20 2f  char *zName,   /
72b0: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 66 75  * Name of the fu
72c0: 6e 63 74 69 6f 6e 20 74 6f 20 61 64 64 20 2a 2f  nction to add */
72d0: 0a 20 20 69 6e 74 20 6e 41 72 67 2c 20 20 20 20  .  int nArg,    
72e0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
72f0: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
7300: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e 63  /.  void (*xFunc
7310: 29 28 73 71 6c 69 74 65 5f 66 75 6e 63 2a 2c 69  )(sqlite_func*,i
7320: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2a 29  nt,const char**)
7330: 2c 20 20 2f 2a 20 54 68 65 20 69 6d 70 6c 65 6d  ,  /* The implem
7340: 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  entation */.  vo
7350: 69 64 20 2a 70 55 73 65 72 44 61 74 61 20 20 20  id *pUserData   
7360: 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20     /* User data 
7370: 2a 2f 0a 29 7b 0a 20 20 46 75 6e 63 44 65 66 20  */.){.  FuncDef 
7380: 2a 70 3b 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b  *p;.  int nName;
7390: 0a 20 20 69 66 28 20 64 62 3d 3d 30 20 7c 7c 20  .  if( db==0 || 
73a0: 7a 4e 61 6d 65 3d 3d 30 20 7c 7c 20 73 71 6c 69  zName==0 || sqli
73b0: 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 64  te3SafetyCheck(d
73c0: 62 29 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20  b) ) return 1;. 
73d0: 20 69 66 28 20 6e 41 72 67 3c 2d 31 20 7c 7c 20   if( nArg<-1 || 
73e0: 6e 41 72 67 3e 31 32 37 20 29 20 72 65 74 75 72  nArg>127 ) retur
73f0: 6e 20 31 3b 0a 20 20 6e 4e 61 6d 65 20 3d 20 73  n 1;.  nName = s
7400: 74 72 6c 65 6e 28 7a 4e 61 6d 65 29 3b 0a 20 20  trlen(zName);.  
7410: 69 66 28 20 6e 4e 61 6d 65 3e 32 35 35 20 29 20  if( nName>255 ) 
7420: 72 65 74 75 72 6e 20 31 3b 0a 20 20 70 20 3d 20  return 1;.  p = 
7430: 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74  sqlite3FindFunct
7440: 69 6f 6e 28 64 62 2c 20 7a 4e 61 6d 65 2c 20 6e  ion(db, zName, n
7450: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 31 29 3b 0a  Name, nArg, 1);.
7460: 20 20 69 66 28 20 70 3d 3d 30 20 29 20 72 65 74    if( p==0 ) ret
7470: 75 72 6e 20 31 3b 0a 20 20 70 2d 3e 78 46 75 6e  urn 1;.  p->xFun
7480: 63 20 3d 20 78 46 75 6e 63 3b 0a 20 20 70 2d 3e  c = xFunc;.  p->
7490: 78 53 74 65 70 20 3d 20 30 3b 0a 20 20 70 2d 3e  xStep = 0;.  p->
74a0: 78 46 69 6e 61 6c 69 7a 65 20 3d 20 30 3b 0a 20  xFinalize = 0;. 
74b0: 20 70 2d 3e 70 55 73 65 72 44 61 74 61 20 3d 20   p->pUserData = 
74c0: 70 55 73 65 72 44 61 74 61 3b 0a 20 20 72 65 74  pUserData;.  ret
74d0: 75 72 6e 20 30 3b 0a 7d 0a 69 6e 74 20 73 71 6c  urn 0;.}.int sql
74e0: 69 74 65 33 5f 63 72 65 61 74 65 5f 61 67 67 72  ite3_create_aggr
74f0: 65 67 61 74 65 28 0a 20 20 73 71 6c 69 74 65 20  egate(.  sqlite 
7500: 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 2f 2a  *db,          /*
7510: 20 41 64 64 20 74 68 65 20 66 75 6e 63 74 69 6f   Add the functio
7520: 6e 20 74 6f 20 74 68 69 73 20 64 61 74 61 62 61  n to this databa
7530: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
7540: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
7550: 4e 61 6d 65 2c 20 20 20 2f 2a 20 4e 61 6d 65 20  Name,   /* Name 
7560: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
7570: 74 6f 20 61 64 64 20 2a 2f 0a 20 20 69 6e 74 20  to add */.  int 
7580: 6e 41 72 67 2c 20 20 20 20 20 20 20 20 20 20 20  nArg,           
7590: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
75a0: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 76 6f 69  guments */.  voi
75b0: 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74  d (*xStep)(sqlit
75c0: 65 5f 66 75 6e 63 2a 2c 69 6e 74 2c 63 6f 6e 73  e_func*,int,cons
75d0: 74 20 63 68 61 72 2a 2a 29 2c 20 2f 2a 20 54 68  t char**), /* Th
75e0: 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
75f0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e  */.  void (*xFin
7600: 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 5f 66 75  alize)(sqlite_fu
7610: 6e 63 2a 29 2c 20 20 20 20 20 20 20 20 20 20 20  nc*),           
7620: 20 20 20 2f 2a 20 54 68 65 20 66 69 6e 61 6c 69     /* The finali
7630: 7a 65 72 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  zer */.  void *p
7640: 55 73 65 72 44 61 74 61 20 20 20 20 20 20 2f 2a  UserData      /*
7650: 20 55 73 65 72 20 64 61 74 61 20 2a 2f 0a 29 7b   User data */.){
7660: 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 3b 0a 20  .  FuncDef *p;. 
7670: 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 69 66   int nName;.  if
7680: 28 20 64 62 3d 3d 30 20 7c 7c 20 7a 4e 61 6d 65  ( db==0 || zName
7690: 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 53 61  ==0 || sqlite3Sa
76a0: 66 65 74 79 43 68 65 63 6b 28 64 62 29 20 29 20  fetyCheck(db) ) 
76b0: 72 65 74 75 72 6e 20 31 3b 0a 20 20 69 66 28 20  return 1;.  if( 
76c0: 6e 41 72 67 3c 2d 31 20 7c 7c 20 6e 41 72 67 3e  nArg<-1 || nArg>
76d0: 31 32 37 20 29 20 72 65 74 75 72 6e 20 31 3b 0a  127 ) return 1;.
76e0: 20 20 6e 4e 61 6d 65 20 3d 20 73 74 72 6c 65 6e    nName = strlen
76f0: 28 7a 4e 61 6d 65 29 3b 0a 20 20 69 66 28 20 6e  (zName);.  if( n
7700: 4e 61 6d 65 3e 32 35 35 20 29 20 72 65 74 75 72  Name>255 ) retur
7710: 6e 20 31 3b 0a 20 20 70 20 3d 20 73 71 6c 69 74  n 1;.  p = sqlit
7720: 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 64  e3FindFunction(d
7730: 62 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2c  b, zName, nName,
7740: 20 6e 41 72 67 2c 20 31 29 3b 0a 20 20 69 66 28   nArg, 1);.  if(
7750: 20 70 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31   p==0 ) return 1
7760: 3b 0a 20 20 70 2d 3e 78 46 75 6e 63 20 3d 20 30  ;.  p->xFunc = 0
7770: 3b 0a 20 20 70 2d 3e 78 53 74 65 70 20 3d 20 78  ;.  p->xStep = x
7780: 53 74 65 70 3b 0a 20 20 70 2d 3e 78 46 69 6e 61  Step;.  p->xFina
7790: 6c 69 7a 65 20 3d 20 78 46 69 6e 61 6c 69 7a 65  lize = xFinalize
77a0: 3b 0a 20 20 70 2d 3e 70 55 73 65 72 44 61 74 61  ;.  p->pUserData
77b0: 20 3d 20 70 55 73 65 72 44 61 74 61 3b 0a 20 20   = pUserData;.  
77c0: 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a  return 0;.}../*.
77d0: 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20 64 61  ** Change the da
77e0: 74 61 74 79 70 65 20 66 6f 72 20 61 6c 6c 20 66  tatype for all f
77f0: 75 6e 63 74 69 6f 6e 73 20 77 69 74 68 20 61 20  unctions with a 
7800: 67 69 76 65 6e 20 6e 61 6d 65 2e 20 20 53 65 65  given name.  See
7810: 20 74 68 65 0a 2a 2a 20 68 65 61 64 65 72 20 63   the.** header c
7820: 6f 6d 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 70  omment for the p
7830: 72 6f 74 6f 74 79 70 65 20 6f 66 20 74 68 69 73  rototype of this
7840: 20 66 75 6e 63 74 69 6f 6e 20 69 6e 20 73 71 6c   function in sql
7850: 69 74 65 2e 68 20 66 6f 72 0a 2a 2a 20 61 64 64  ite.h for.** add
7860: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
7870: 69 6f 6e 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ion..*/.int sqli
7880: 74 65 33 5f 66 75 6e 63 74 69 6f 6e 5f 74 79 70  te3_function_typ
7890: 65 28 73 71 6c 69 74 65 20 2a 64 62 2c 20 63 6f  e(sqlite *db, co
78a0: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c  nst char *zName,
78b0: 20 69 6e 74 20 64 61 74 61 54 79 70 65 29 7b 0a   int dataType){.
78c0: 20 20 46 75 6e 63 44 65 66 20 2a 70 20 3d 20 28    FuncDef *p = (
78d0: 46 75 6e 63 44 65 66 2a 29 73 71 6c 69 74 65 33  FuncDef*)sqlite3
78e0: 48 61 73 68 46 69 6e 64 28 26 64 62 2d 3e 61 46  HashFind(&db->aF
78f0: 75 6e 63 2c 20 7a 4e 61 6d 65 2c 20 73 74 72 6c  unc, zName, strl
7900: 65 6e 28 7a 4e 61 6d 65 29 29 3b 0a 20 20 77 68  en(zName));.  wh
7910: 69 6c 65 28 20 70 20 29 7b 0a 20 20 20 20 70 2d  ile( p ){.    p-
7920: 3e 64 61 74 61 54 79 70 65 20 3d 20 64 61 74 61  >dataType = data
7930: 54 79 70 65 3b 20 0a 20 20 20 20 70 20 3d 20 70  Type; .    p = p
7940: 2d 3e 70 4e 65 78 74 3b 0a 20 20 7d 0a 20 20 72  ->pNext;.  }.  r
7950: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
7960: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74  .}../*.** Regist
7970: 65 72 20 61 20 74 72 61 63 65 20 66 75 6e 63 74  er a trace funct
7980: 69 6f 6e 2e 20 20 54 68 65 20 70 41 72 67 20 66  ion.  The pArg f
7990: 72 6f 6d 20 74 68 65 20 70 72 65 76 69 6f 75 73  rom the previous
79a0: 6c 79 20 72 65 67 69 73 74 65 72 65 64 20 74 72  ly registered tr
79b0: 61 63 65 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e  ace.** is return
79c0: 65 64 2e 20 20 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  ed.  .**.** A NU
79d0: 4c 4c 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f  LL trace functio
79e0: 6e 20 6d 65 61 6e 73 20 74 68 61 74 20 6e 6f 20  n means that no 
79f0: 74 72 61 63 69 6e 67 20 69 73 20 65 78 65 63 75  tracing is execu
7a00: 74 65 73 2e 20 20 41 20 6e 6f 6e 2d 4e 55 4c 4c  tes.  A non-NULL
7a10: 0a 2a 2a 20 74 72 61 63 65 20 69 73 20 61 20 70  .** trace is a p
7a20: 6f 69 6e 74 65 72 20 74 6f 20 61 20 66 75 6e 63  ointer to a func
7a30: 74 69 6f 6e 20 74 68 61 74 20 69 73 20 69 6e 76  tion that is inv
7a40: 6f 6b 65 64 20 61 74 20 74 68 65 20 73 74 61 72  oked at the star
7a50: 74 20 6f 66 20 65 61 63 68 0a 2a 2a 20 73 71 6c  t of each.** sql
7a60: 69 74 65 33 5f 65 78 65 63 28 29 2e 0a 2a 2f 0a  ite3_exec()..*/.
7a70: 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 74 72  void *sqlite3_tr
7a80: 61 63 65 28 73 71 6c 69 74 65 20 2a 64 62 2c 20  ace(sqlite *db, 
7a90: 76 6f 69 64 20 28 2a 78 54 72 61 63 65 29 28 76  void (*xTrace)(v
7aa0: 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  oid*,const char*
7ab0: 29 2c 20 76 6f 69 64 20 2a 70 41 72 67 29 7b 0a  ), void *pArg){.
7ac0: 20 20 76 6f 69 64 20 2a 70 4f 6c 64 20 3d 20 64    void *pOld = d
7ad0: 62 2d 3e 70 54 72 61 63 65 41 72 67 3b 0a 20 20  b->pTraceArg;.  
7ae0: 64 62 2d 3e 78 54 72 61 63 65 20 3d 20 78 54 72  db->xTrace = xTr
7af0: 61 63 65 3b 0a 20 20 64 62 2d 3e 70 54 72 61 63  ace;.  db->pTrac
7b00: 65 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 72  eArg = pArg;.  r
7b10: 65 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 0a 2f  eturn pOld;.}../
7b20: 2a 2a 2a 20 45 58 50 45 52 49 4d 45 4e 54 41 4c  *** EXPERIMENTAL
7b30: 20 2a 2a 2a 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73   ***.**.** Regis
7b40: 74 65 72 20 61 20 66 75 6e 63 74 69 6f 6e 20 74  ter a function t
7b50: 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20 77 68 65  o be invoked whe
7b60: 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  n a transaction 
7b70: 63 6f 6d 6d 65 6e 74 73 2e 0a 2a 2a 20 49 66 20  comments..** If 
7b80: 65 69 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 20  either function 
7b90: 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  returns non-zero
7ba0: 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6d 6d 69  , then the commi
7bb0: 74 20 62 65 63 6f 6d 65 73 20 61 0a 2a 2a 20 72  t becomes a.** r
7bc0: 6f 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 76 6f 69 64  ollback..*/.void
7bd0: 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6d 6d 69 74   *sqlite3_commit
7be0: 5f 68 6f 6f 6b 28 0a 20 20 73 71 6c 69 74 65 20  _hook(.  sqlite 
7bf0: 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  *db,            
7c00: 20 20 20 2f 2a 20 41 74 74 61 63 68 20 74 68 65     /* Attach the
7c10: 20 68 6f 6f 6b 20 74 6f 20 74 68 69 73 20 64 61   hook to this da
7c20: 74 61 62 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  tabase */.  int 
7c30: 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  (*xCallback)(voi
7c40: 64 2a 29 2c 20 20 2f 2a 20 46 75 6e 63 74 69 6f  d*),  /* Functio
7c50: 6e 20 74 6f 20 69 6e 76 6f 6b 65 20 6f 6e 20 65  n to invoke on e
7c60: 61 63 68 20 63 6f 6d 6d 69 74 20 2a 2f 0a 20 20  ach commit */.  
7c70: 76 6f 69 64 20 2a 70 41 72 67 20 20 20 20 20 20  void *pArg      
7c80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
7c90: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 66 75 6e  ument to the fun
7ca0: 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 76 6f  ction */.){.  vo
7cb0: 69 64 20 2a 70 4f 6c 64 20 3d 20 64 62 2d 3e 70  id *pOld = db->p
7cc0: 43 6f 6d 6d 69 74 41 72 67 3b 0a 20 20 64 62 2d  CommitArg;.  db-
7cd0: 3e 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b  >xCommitCallback
7ce0: 20 3d 20 78 43 61 6c 6c 62 61 63 6b 3b 0a 20 20   = xCallback;.  
7cf0: 64 62 2d 3e 70 43 6f 6d 6d 69 74 41 72 67 20 3d  db->pCommitArg =
7d00: 20 70 41 72 67 3b 0a 20 20 72 65 74 75 72 6e 20   pArg;.  return 
7d10: 70 4f 6c 64 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  pOld;.}.../*.** 
7d20: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  This routine is 
7d30: 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65  called to create
7d40: 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f   a connection to
7d50: 20 61 20 64 61 74 61 62 61 73 65 20 42 54 72 65   a database BTre
7d60: 65 0a 2a 2a 20 64 72 69 76 65 72 2e 20 20 49 66  e.** driver.  If
7d70: 20 7a 46 69 6c 65 6e 61 6d 65 20 69 73 20 74 68   zFilename is th
7d80: 65 20 6e 61 6d 65 20 6f 66 20 61 20 66 69 6c 65  e name of a file
7d90: 2c 20 74 68 65 6e 20 74 68 61 74 20 66 69 6c 65  , then that file
7da0: 20 69 73 0a 2a 2a 20 6f 70 65 6e 65 64 20 61 6e   is.** opened an
7db0: 64 20 75 73 65 64 2e 20 20 49 66 20 7a 46 69 6c  d used.  If zFil
7dc0: 65 6e 61 6d 65 20 69 73 20 74 68 65 20 6d 61 67  ename is the mag
7dd0: 69 63 20 6e 61 6d 65 20 22 3a 6d 65 6d 6f 72 79  ic name ":memory
7de0: 3a 22 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 64  :" then.** the d
7df0: 61 74 61 62 61 73 65 20 69 73 20 73 74 6f 72 65  atabase is store
7e00: 64 20 69 6e 20 6d 65 6d 6f 72 79 20 28 61 6e 64  d in memory (and
7e10: 20 69 73 20 74 68 75 73 20 66 6f 72 67 6f 74 74   is thus forgott
7e20: 65 6e 20 61 73 20 73 6f 6f 6e 20 61 73 0a 2a 2a  en as soon as.**
7e30: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
7e40: 69 73 20 63 6c 6f 73 65 64 2e 29 20 20 49 66 20  is closed.)  If 
7e50: 7a 46 69 6c 65 6e 61 6d 65 20 69 73 20 4e 55 4c  zFilename is NUL
7e60: 4c 20 74 68 65 6e 20 74 68 65 20 64 61 74 61 62  L then the datab
7e70: 61 73 65 0a 2a 2a 20 69 73 20 66 6f 72 20 74 65  ase.** is for te
7e80: 6d 70 6f 72 61 72 79 20 75 73 65 20 6f 6e 6c 79  mporary use only
7e90: 20 61 6e 64 20 69 73 20 64 65 6c 65 74 65 64 20   and is deleted 
7ea0: 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 63  as soon as the c
7eb0: 6f 6e 6e 65 63 74 69 6f 6e 0a 2a 2a 20 69 73 20  onnection.** is 
7ec0: 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20  closed..**.** A 
7ed0: 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61  temporary databa
7ee0: 73 65 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  se can be either
7ef0: 20 61 20 64 69 73 6b 20 66 69 6c 65 20 28 74 68   a disk file (th
7f00: 61 74 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61  at is automatica
7f10: 6c 6c 79 0a 2a 2a 20 64 65 6c 65 74 65 64 20 77  lly.** deleted w
7f20: 68 65 6e 20 74 68 65 20 66 69 6c 65 20 69 73 20  hen the file is 
7f30: 63 6c 6f 73 65 64 29 20 6f 72 20 61 20 73 65 74  closed) or a set
7f40: 20 6f 66 20 72 65 64 2d 62 6c 61 63 6b 20 74 72   of red-black tr
7f50: 65 65 73 20 68 65 6c 64 20 69 6e 20 6d 65 6d 6f  ees held in memo
7f60: 72 79 2c 0a 2a 2a 20 64 65 70 65 6e 64 69 6e 67  ry,.** depending
7f70: 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 73 20 6f   on the values o
7f80: 66 20 74 68 65 20 54 45 4d 50 5f 53 54 4f 52 45  f the TEMP_STORE
7f90: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6d 61   compile-time ma
7fa0: 63 72 6f 20 61 6e 64 20 74 68 65 0a 2a 2a 20 64  cro and the.** d
7fb0: 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20 76 61  b->temp_store va
7fc0: 72 69 61 62 6c 65 2c 20 61 63 63 6f 72 64 69 6e  riable, accordin
7fd0: 67 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  g to the followi
7fe0: 6e 67 20 63 68 61 72 74 3a 0a 2a 2a 0a 2a 2a 20  ng chart:.**.** 
7ff0: 20 20 20 20 20 20 54 45 4d 50 5f 53 54 4f 52 45        TEMP_STORE
8000: 20 20 20 20 20 64 62 2d 3e 74 65 6d 70 5f 73 74       db->temp_st
8010: 6f 72 65 20 20 20 20 20 4c 6f 63 61 74 69 6f 6e  ore     Location
8020: 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 64 61   of temporary da
8030: 74 61 62 61 73 65 0a 2a 2a 20 20 20 20 20 20 20  tabase.**       
8040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 20 20 20 20 2d  ----------     -
8050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 20 20  -------------   
8060: 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    --------------
8070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8080: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 30 20  .**           0 
8090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e                an
80a0: 79 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69  y             fi
80b0: 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  le.**           
80c0: 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1               
80d0: 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20   1              
80e0: 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  file.**         
80f0: 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20    1             
8100: 20 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20     2            
8110: 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20    memory.**     
8120: 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20        1         
8130: 20 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20         0        
8140: 20 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20        file.**   
8150: 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20 20          2       
8160: 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20           1      
8170: 20 20 20 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20          file.** 
8180: 20 20 20 20 20 20 20 20 20 20 32 20 20 20 20 20            2     
8190: 20 20 20 20 20 20 20 20 20 20 20 32 20 20 20 20             2    
81a0: 20 20 20 20 20 20 20 20 20 20 6d 65 6d 6f 72 79            memory
81b0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 32 20  .**           2 
81c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
81d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65                me
81e0: 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20 20 20 20  mory.**         
81f0: 20 20 33 20 20 20 20 20 20 20 20 20 20 20 20 20    3             
8200: 20 20 61 6e 79 20 20 20 20 20 20 20 20 20 20 20    any           
8210: 20 20 6d 65 6d 6f 72 79 0a 2a 2f 0a 69 6e 74 20    memory.*/.int 
8220: 73 71 6c 69 74 65 33 42 74 72 65 65 46 61 63 74  sqlite3BtreeFact
8230: 6f 72 79 28 0a 20 20 63 6f 6e 73 74 20 73 71 6c  ory(.  const sql
8240: 69 74 65 20 2a 64 62 2c 09 20 20 20 20 2f 2a 20  ite *db,.    /* 
8250: 4d 61 69 6e 20 64 61 74 61 62 61 73 65 20 77 68  Main database wh
8260: 65 6e 20 6f 70 65 6e 69 6e 67 20 61 75 78 20 6f  en opening aux o
8270: 74 68 65 72 77 69 73 65 20 30 20 2a 2f 0a 20 20  therwise 0 */.  
8280: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c  const char *zFil
8290: 65 6e 61 6d 65 2c 20 20 20 20 2f 2a 20 4e 61 6d  ename,    /* Nam
82a0: 65 20 6f 66 20 74 68 65 20 66 69 6c 65 20 63 6f  e of the file co
82b0: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 42 54 72  ntaining the BTr
82c0: 65 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  ee database */. 
82d0: 20 69 6e 74 20 6f 6d 69 74 4a 6f 75 72 6e 61 6c   int omitJournal
82e0: 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 66  ,          /* if
82f0: 20 54 52 55 45 20 74 68 65 6e 20 64 6f 20 6e 6f   TRUE then do no
8300: 74 20 6a 6f 75 72 6e 61 6c 20 74 68 69 73 20 66  t journal this f
8310: 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 61  ile */.  int nCa
8320: 63 68 65 2c 20 20 20 20 20 20 20 20 20 20 20 20  che,            
8330: 20 20 20 2f 2a 20 48 6f 77 20 6d 61 6e 79 20 70     /* How many p
8340: 61 67 65 73 20 69 6e 20 74 68 65 20 70 61 67 65  ages in the page
8350: 20 63 61 63 68 65 20 2a 2f 0a 20 20 42 74 72 65   cache */.  Btre
8360: 65 20 2a 2a 70 70 42 74 72 65 65 20 20 20 20 20  e **ppBtree     
8370: 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
8380: 20 74 6f 20 6e 65 77 20 42 74 72 65 65 20 6f 62   to new Btree ob
8390: 6a 65 63 74 20 77 72 69 74 74 65 6e 20 68 65 72  ject written her
83a0: 65 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 62 74  e */.){.  int bt
83b0: 72 65 65 5f 66 6c 61 67 73 20 3d 20 30 3b 0a 20  ree_flags = 0;. 
83c0: 20 0a 20 20 61 73 73 65 72 74 28 20 70 70 42 74   .  assert( ppBt
83d0: 72 65 65 20 21 3d 20 30 29 3b 0a 20 20 69 66 28  ree != 0);.  if(
83e0: 20 6f 6d 69 74 4a 6f 75 72 6e 61 6c 20 29 7b 0a   omitJournal ){.
83f0: 20 20 20 20 62 74 72 65 65 5f 66 6c 61 67 73 20      btree_flags 
8400: 7c 3d 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f  |= BTREE_OMIT_JO
8410: 55 52 4e 41 4c 3b 0a 20 20 7d 0a 20 20 69 66 28  URNAL;.  }.  if(
8420: 20 21 7a 46 69 6c 65 6e 61 6d 65 20 29 7b 0a 20   !zFilename ){. 
8430: 20 20 20 62 74 72 65 65 5f 66 6c 61 67 73 20 7c     btree_flags |
8440: 3d 20 42 54 52 45 45 5f 4d 45 4d 4f 52 59 3b 0a  = BTREE_MEMORY;.
8450: 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 73 71    }..  return sq
8460: 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28 7a  lite3BtreeOpen(z
8470: 46 69 6c 65 6e 61 6d 65 2c 20 70 70 42 74 72 65  Filename, ppBtre
8480: 65 2c 20 6e 43 61 63 68 65 2c 20 62 74 72 65 65  e, nCache, btree
8490: 5f 66 6c 61 67 73 29 3b 0a 7d 0a 0a 63 6f 6e 73  _flags);.}..cons
84a0: 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f  t char *sqlite3_
84b0: 65 72 72 6d 73 67 28 73 71 6c 69 74 65 33 20 2a  errmsg(sqlite3 *
84c0: 64 62 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e 7a  db){.  if( db->z
84d0: 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 72 65  ErrMsg ){.    re
84e0: 74 75 72 6e 20 64 62 2d 3e 7a 45 72 72 4d 73 67  turn db->zErrMsg
84f0: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 73  ;.  }.  return s
8500: 71 6c 69 74 65 33 5f 65 72 72 6f 72 5f 73 74 72  qlite3_error_str
8510: 69 6e 67 28 64 62 2d 3e 65 72 72 43 6f 64 65 29  ing(db->errCode)
8520: 3b 0a 7d 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20  ;.}..const void 
8530: 2a 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31  *sqlite3_errmsg1
8540: 36 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  6(sqlite3 *db){.
8550: 20 20 69 66 28 20 21 64 62 2d 3e 7a 45 72 72 4d    if( !db->zErrM
8560: 73 67 31 36 20 29 7b 0a 20 20 20 20 63 68 61 72  sg16 ){.    char
8570: 20 63 6f 6e 73 74 20 2a 7a 45 72 72 38 20 3d 20   const *zErr8 = 
8580: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64  sqlite3_errmsg(d
8590: 62 29 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49  b);.    if( SQLI
85a0: 54 45 33 5f 42 49 47 45 4e 44 49 41 4e 20 29 7b  TE3_BIGENDIAN ){
85b0: 0a 20 20 20 20 20 20 64 62 2d 3e 7a 45 72 72 4d  .      db->zErrM
85c0: 73 67 31 36 20 3d 20 73 71 6c 69 74 65 33 75 74  sg16 = sqlite3ut
85d0: 66 38 74 6f 31 36 62 65 28 7a 45 72 72 38 2c 20  f8to16be(zErr8, 
85e0: 2d 31 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  -1);.    }else{.
85f0: 20 20 20 20 20 20 64 62 2d 3e 7a 45 72 72 4d 73        db->zErrMs
8600: 67 31 36 20 3d 20 73 71 6c 69 74 65 33 75 74 66  g16 = sqlite3utf
8610: 38 74 6f 31 36 6c 65 28 7a 45 72 72 38 2c 20 2d  8to16le(zErr8, -
8620: 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  1);.    }.  }.  
8630: 72 65 74 75 72 6e 20 64 62 2d 3e 7a 45 72 72 4d  return db->zErrM
8640: 73 67 31 36 3b 0a 7d 0a 0a 69 6e 74 20 73 71 6c  sg16;.}..int sql
8650: 69 74 65 33 5f 65 72 72 63 6f 64 65 28 73 71 6c  ite3_errcode(sql
8660: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 72 65 74  ite3 *db){.  ret
8670: 75 72 6e 20 64 62 2d 3e 65 72 72 43 6f 64 65 3b  urn db->errCode;
8680: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70 69 6c  .}../*.** Compil
8690: 65 20 74 68 65 20 55 54 46 2d 38 20 65 6e 63 6f  e the UTF-8 enco
86a0: 64 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ded SQL statemen
86b0: 74 20 7a 53 71 6c 20 69 6e 74 6f 20 61 20 73 74  t zSql into a st
86c0: 61 74 65 6d 65 6e 74 20 68 61 6e 64 6c 65 2e 0a  atement handle..
86d0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 70  */.int sqlite3_p
86e0: 72 65 70 61 72 65 28 0a 20 20 73 71 6c 69 74 65  repare(.  sqlite
86f0: 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20  3 *db,          
8700: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
8710: 68 61 6e 64 6c 65 2e 20 2a 2f 0a 20 20 63 6f 6e  handle. */.  con
8720: 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 2c 20 20  st char *zSql,  
8730: 20 20 20 20 20 20 20 2f 2a 20 55 54 46 2d 38 20         /* UTF-8 
8740: 65 6e 63 6f 64 65 64 20 53 51 4c 20 73 74 61 74  encoded SQL stat
8750: 65 6d 65 6e 74 2e 20 2a 2f 0a 20 20 69 6e 74 20  ement. */.  int 
8760: 6e 42 79 74 65 73 2c 20 20 20 20 20 20 20 20 20  nBytes,         
8770: 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
8780: 6f 66 20 7a 53 71 6c 20 69 6e 20 62 79 74 65 73  of zSql in bytes
8790: 2e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73  . */.  sqlite3_s
87a0: 74 6d 74 20 2a 2a 70 70 53 74 6d 74 2c 20 20 20  tmt **ppStmt,   
87b0: 20 2f 2a 20 4f 55 54 3a 20 41 20 70 6f 69 6e 74   /* OUT: A point
87c0: 65 72 20 74 6f 20 74 68 65 20 70 72 65 70 61 72  er to the prepar
87d0: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a  ed statement */.
87e0: 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2a 20 70    const char** p
87f0: 7a 54 61 69 6c 20 20 20 20 20 20 20 2f 2a 20 4f  zTail       /* O
8800: 55 54 3a 20 45 6e 64 20 6f 66 20 70 61 72 73 65  UT: End of parse
8810: 64 20 73 74 72 69 6e 67 20 2a 2f 0a 29 7b 0a 20  d string */.){. 
8820: 20 50 61 72 73 65 20 73 50 61 72 73 65 3b 0a 20   Parse sParse;. 
8830: 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 20 3d   char *zErrMsg =
8840: 20 30 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53   0;.  int rc = S
8850: 51 4c 49 54 45 5f 4f 4b 3b 0a 0a 20 20 69 66 28  QLITE_OK;..  if(
8860: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
8870: 28 64 62 29 20 29 7b 0a 20 20 20 20 72 63 20 3d  (db) ){.    rc =
8880: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a   SQLITE_MISUSE;.
8890: 20 20 20 20 67 6f 74 6f 20 70 72 65 70 61 72 65      goto prepare
88a0: 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  _out;.  }..  if(
88b0: 20 21 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20   !db->init.busy 
88c0: 29 7b 0a 20 20 20 20 69 66 28 20 28 64 62 2d 3e  ){.    if( (db->
88d0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 49  flags & SQLITE_I
88e0: 6e 69 74 69 61 6c 69 7a 65 64 29 3d 3d 30 20 29  nitialized)==0 )
88f0: 7b 0a 20 20 20 20 20 20 69 6e 74 20 72 63 2c 20  {.      int rc, 
8900: 63 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 77  cnt = 1;.      w
8910: 68 69 6c 65 28 20 28 72 63 20 3d 20 73 71 6c 69  hile( (rc = sqli
8920: 74 65 33 49 6e 69 74 28 64 62 2c 20 26 7a 45 72  te3Init(db, &zEr
8930: 72 4d 73 67 29 29 3d 3d 53 51 4c 49 54 45 5f 42  rMsg))==SQLITE_B
8940: 55 53 59 0a 20 20 20 20 20 20 20 20 20 26 26 20  USY.         && 
8950: 64 62 2d 3e 78 42 75 73 79 43 61 6c 6c 62 61 63  db->xBusyCallbac
8960: 6b 0a 20 20 20 20 20 20 20 20 20 26 26 20 64 62  k.         && db
8970: 2d 3e 78 42 75 73 79 43 61 6c 6c 62 61 63 6b 28  ->xBusyCallback(
8980: 64 62 2d 3e 70 42 75 73 79 41 72 67 2c 20 22 22  db->pBusyArg, ""
8990: 2c 20 63 6e 74 2b 2b 29 21 3d 30 20 29 7b 7d 0a  , cnt++)!=0 ){}.
89a0: 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
89b0: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
89c0: 20 20 20 67 6f 74 6f 20 70 72 65 70 61 72 65 5f     goto prepare_
89d0: 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  out;.      }.   
89e0: 20 20 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29     if( zErrMsg )
89f0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
8a00: 46 72 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a 20  Free(zErrMsg);. 
8a10: 20 20 20 20 20 20 20 7a 45 72 72 4d 73 67 20 3d         zErrMsg =
8a20: 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0;.      }.    
8a30: 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  }.  }.  assert( 
8a40: 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  (db->flags & SQL
8a50: 49 54 45 5f 49 6e 69 74 69 61 6c 69 7a 65 64 29  ITE_Initialized)
8a60: 21 3d 30 20 7c 7c 20 64 62 2d 3e 69 6e 69 74 2e  !=0 || db->init.
8a70: 62 75 73 79 20 29 3b 0a 0a 20 20 69 66 28 20 64  busy );..  if( d
8a80: 62 2d 3e 70 56 64 62 65 3d 3d 30 20 29 7b 20 64  b->pVdbe==0 ){ d
8a90: 62 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 20  b->nChange = 0; 
8aa0: 7d 0a 20 20 6d 65 6d 73 65 74 28 26 73 50 61 72  }.  memset(&sPar
8ab0: 73 65 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 50  se, 0, sizeof(sP
8ac0: 61 72 73 65 29 29 3b 0a 20 20 73 50 61 72 73 65  arse));.  sParse
8ad0: 2e 64 62 20 3d 20 64 62 3b 0a 20 20 73 71 6c 69  .db = db;.  sqli
8ae0: 74 65 33 52 75 6e 50 61 72 73 65 72 28 26 73 50  te3RunParser(&sP
8af0: 61 72 73 65 2c 20 7a 53 71 6c 2c 20 26 7a 45 72  arse, zSql, &zEr
8b00: 72 4d 73 67 29 3b 0a 0a 20 20 69 66 28 20 64 62  rMsg);..  if( db
8b10: 2d 3e 78 54 72 61 63 65 20 26 26 20 21 64 62 2d  ->xTrace && !db-
8b20: 3e 69 6e 69 74 2e 62 75 73 79 20 29 7b 0a 20 20  >init.busy ){.  
8b30: 20 20 2f 2a 20 54 72 61 63 65 20 6f 6e 6c 79 20    /* Trace only 
8b40: 74 68 65 20 73 74 61 74 6d 65 6e 74 20 74 68 61  the statment tha
8b50: 74 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 2e 0a  t was compiled..
8b60: 20 20 20 20 2a 2a 20 4d 61 6b 65 20 61 20 63 6f      ** Make a co
8b70: 70 79 20 6f 66 20 74 68 61 74 20 70 61 72 74 20  py of that part 
8b80: 6f 66 20 74 68 65 20 53 51 4c 20 73 74 72 69 6e  of the SQL strin
8b90: 67 20 73 69 6e 63 65 20 7a 53 51 4c 20 69 73 20  g since zSQL is 
8ba0: 63 6f 6e 73 74 0a 20 20 20 20 2a 2a 20 61 6e 64  const.    ** and
8bb0: 20 77 65 20 6d 75 73 74 20 70 61 73 73 20 61 20   we must pass a 
8bc0: 7a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20  zero terminated 
8bd0: 73 74 72 69 6e 67 20 74 6f 20 74 68 65 20 74 72  string to the tr
8be0: 61 63 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20  ace function.   
8bf0: 20 2a 2a 20 54 68 65 20 63 6f 70 79 20 69 73 20   ** The copy is 
8c00: 75 6e 6e 65 63 65 73 73 61 72 79 20 69 66 20 74  unnecessary if t
8c10: 68 65 20 74 61 69 6c 20 70 6f 69 6e 74 65 72 20  he tail pointer 
8c20: 69 73 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  is pointing at t
8c30: 68 65 0a 20 20 20 20 2a 2a 20 62 65 67 69 6e 6e  he.    ** beginn
8c40: 69 67 20 6f 72 20 65 6e 64 20 6f 66 20 74 68 65  ig or end of the
8c50: 20 53 51 4c 20 73 74 72 69 6e 67 2e 0a 20 20 20   SQL string..   
8c60: 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 50 61 72   */.    if( sPar
8c70: 73 65 2e 7a 54 61 69 6c 20 26 26 20 73 50 61 72  se.zTail && sPar
8c80: 73 65 2e 7a 54 61 69 6c 21 3d 7a 53 71 6c 20 26  se.zTail!=zSql &
8c90: 26 20 2a 73 50 61 72 73 65 2e 7a 54 61 69 6c 20  & *sParse.zTail 
8ca0: 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 74  ){.      char *t
8cb0: 6d 70 53 71 6c 20 3d 20 73 71 6c 69 74 65 53 74  mpSql = sqliteSt
8cc0: 72 4e 44 75 70 28 7a 53 71 6c 2c 20 73 50 61 72  rNDup(zSql, sPar
8cd0: 73 65 2e 7a 54 61 69 6c 20 2d 20 7a 53 71 6c 29  se.zTail - zSql)
8ce0: 3b 0a 20 20 20 20 20 20 69 66 28 20 74 6d 70 53  ;.      if( tmpS
8cf0: 71 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 64 62  ql ){.        db
8d00: 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72  ->xTrace(db->pTr
8d10: 61 63 65 41 72 67 2c 20 74 6d 70 53 71 6c 29 3b  aceArg, tmpSql);
8d20: 0a 20 20 20 20 20 20 20 20 66 72 65 65 28 74 6d  .        free(tm
8d30: 70 53 71 6c 29 3b 0a 20 20 20 20 20 20 7d 65 6c  pSql);.      }el
8d40: 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49  se{.        /* I
8d50: 66 20 61 20 6d 65 6d 6f 72 79 20 65 72 72 6f 72  f a memory error
8d60: 20 6f 63 63 75 72 72 65 64 20 64 75 72 69 6e 67   occurred during
8d70: 20 74 68 65 20 63 6f 70 79 2c 0a 20 20 20 20 20   the copy,.     
8d80: 20 20 20 2a 2a 20 74 72 61 63 65 20 65 6e 74 69     ** trace enti
8d90: 72 65 20 53 51 4c 20 73 74 72 69 6e 67 20 61 6e  re SQL string an
8da0: 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  d fall through t
8db0: 6f 20 74 68 65 0a 20 20 20 20 20 20 20 20 2a 2a  o the.        **
8dc0: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f   sqlite3_malloc_
8dd0: 66 61 69 6c 65 64 20 74 65 73 74 20 74 6f 20 72  failed test to r
8de0: 65 70 6f 72 74 20 74 68 65 20 65 72 72 6f 72 2e  eport the error.
8df0: 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  .        */.    
8e00: 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64      db->xTrace(d
8e10: 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a 53  b->pTraceArg, zS
8e20: 71 6c 29 3b 20 0a 20 20 20 20 20 20 7d 0a 20 20  ql); .      }.  
8e30: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64    }else{.      d
8e40: 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54  b->xTrace(db->pT
8e50: 72 61 63 65 41 72 67 2c 20 7a 53 71 6c 29 3b 20  raceArg, zSql); 
8e60: 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 69 66  .    }.  }..  if
8e70: 28 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  ( sqlite3_malloc
8e80: 5f 66 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 72  _failed ){.    r
8e90: 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
8ea0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c  ;.    sqlite3Rol
8eb0: 6c 62 61 63 6b 41 6c 6c 28 64 62 29 3b 0a 20 20  lbackAll(db);.  
8ec0: 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e    sqlite3ResetIn
8ed0: 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c  ternalSchema(db,
8ee0: 20 30 29 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61   0);.    db->fla
8ef0: 67 73 20 26 3d 20 7e 53 51 4c 49 54 45 5f 49 6e  gs &= ~SQLITE_In
8f00: 54 72 61 6e 73 3b 0a 20 20 20 20 67 6f 74 6f 20  Trans;.    goto 
8f10: 70 72 65 70 61 72 65 5f 6f 75 74 3b 0a 20 20 7d  prepare_out;.  }
8f20: 0a 20 20 69 66 28 20 73 50 61 72 73 65 2e 72 63  .  if( sParse.rc
8f30: 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 20  ==SQLITE_DONE ) 
8f40: 73 50 61 72 73 65 2e 72 63 20 3d 20 53 51 4c 49  sParse.rc = SQLI
8f50: 54 45 5f 4f 4b 3b 0a 20 20 69 66 28 20 73 50 61  TE_OK;.  if( sPa
8f60: 72 73 65 2e 72 63 3d 3d 53 51 4c 49 54 45 5f 53  rse.rc==SQLITE_S
8f70: 43 48 45 4d 41 20 29 7b 0a 20 20 20 20 73 71 6c  CHEMA ){.    sql
8f80: 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61  ite3ResetInterna
8f90: 6c 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a  lSchema(db, 0);.
8fa0: 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 70    }.  assert( pp
8fb0: 53 74 6d 74 20 29 3b 0a 20 20 2a 70 70 53 74 6d  Stmt );.  *ppStm
8fc0: 74 20 3d 20 28 73 71 6c 69 74 65 33 5f 73 74 6d  t = (sqlite3_stm
8fd0: 74 2a 29 73 50 61 72 73 65 2e 70 56 64 62 65 3b  t*)sParse.pVdbe;
8fe0: 0a 20 20 69 66 28 20 70 7a 54 61 69 6c 20 29 20  .  if( pzTail ) 
8ff0: 2a 70 7a 54 61 69 6c 20 3d 20 73 50 61 72 73 65  *pzTail = sParse
9000: 2e 7a 54 61 69 6c 3b 0a 0a 20 20 69 66 28 20 73  .zTail;..  if( s
9010: 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28  qlite3SafetyOff(
9020: 64 62 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  db) ){.    rc = 
9030: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20  SQLITE_MISUSE;. 
9040: 20 20 20 67 6f 74 6f 20 70 72 65 70 61 72 65 5f     goto prepare_
9050: 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 72 63 20 3d  out;.  }..  rc =
9060: 20 73 50 61 72 73 65 2e 72 63 3b 0a 0a 70 72 65   sParse.rc;..pre
9070: 70 61 72 65 5f 6f 75 74 3a 0a 20 20 69 66 28 20  pare_out:.  if( 
9080: 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 73  zErrMsg ){.    s
9090: 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20  qlite3Error(db, 
90a0: 72 63 2c 20 22 25 73 22 2c 20 7a 45 72 72 4d 73  rc, "%s", zErrMs
90b0: 67 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  g);.  }else{.   
90c0: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62   sqlite3Error(db
90d0: 2c 20 72 63 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  , rc, 0);.  }.  
90e0: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
90f0: 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20 74 68 65 20  .** Compile the 
9100: 55 54 46 2d 31 36 20 65 6e 63 6f 64 65 64 20 53  UTF-16 encoded S
9110: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 7a 53 71  QL statement zSq
9120: 6c 20 69 6e 74 6f 20 61 20 73 74 61 74 65 6d 65  l into a stateme
9130: 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e  nt handle..*/.in
9140: 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  t sqlite3_prepar
9150: 65 31 36 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  e16(.  sqlite3 *
9160: 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  db,             
9170: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 68 61 6e   /* Database han
9180: 64 6c 65 2e 20 2a 2f 20 0a 20 20 63 6f 6e 73 74  dle. */ .  const
9190: 20 76 6f 69 64 20 2a 7a 53 71 6c 2c 20 20 20 20   void *zSql,    
91a0: 20 20 20 20 20 2f 2a 20 55 54 46 2d 38 20 65 6e       /* UTF-8 en
91b0: 63 6f 64 65 64 20 53 51 4c 20 73 74 61 74 65 6d  coded SQL statem
91c0: 65 6e 74 2e 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  ent. */.  int nB
91d0: 79 74 65 73 2c 20 20 20 20 20 20 20 20 20 20 20  ytes,           
91e0: 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66      /* Length of
91f0: 20 7a 53 71 6c 20 69 6e 20 62 79 74 65 73 2e 20   zSql in bytes. 
9200: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  */.  sqlite3_stm
9210: 74 20 2a 2a 70 70 53 74 6d 74 2c 20 20 20 20 2f  t **ppStmt,    /
9220: 2a 20 4f 55 54 3a 20 41 20 70 6f 69 6e 74 65 72  * OUT: A pointer
9230: 20 74 6f 20 74 68 65 20 70 72 65 70 61 72 65 64   to the prepared
9240: 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20   statement */.  
9250: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2a 70 7a 54  const void **pzT
9260: 61 69 6c 20 20 20 20 20 20 20 2f 2a 20 4f 55 54  ail       /* OUT
9270: 3a 20 45 6e 64 20 6f 66 20 70 61 72 73 65 64 20  : End of parsed 
9280: 73 74 72 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 2f  string */.){.  /
9290: 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  * This function 
92a0: 63 75 72 72 65 6e 74 6c 79 20 77 6f 72 6b 73 20  currently works 
92b0: 62 79 20 66 69 72 73 74 20 74 72 61 6e 73 66 6f  by first transfo
92c0: 72 6d 69 6e 67 20 74 68 65 20 55 54 46 2d 31 36  rming the UTF-16
92d0: 0a 20 20 2a 2a 20 65 6e 63 6f 64 65 64 20 73 74  .  ** encoded st
92e0: 72 69 6e 67 20 74 6f 20 55 54 46 2d 38 2c 20 74  ring to UTF-8, t
92f0: 68 65 6e 20 69 6e 76 6f 6b 69 6e 67 20 73 71 6c  hen invoking sql
9300: 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 2e 20  ite3_prepare(). 
9310: 54 68 65 0a 20 20 2a 2a 20 74 72 69 63 6b 79 20  The.  ** tricky 
9320: 62 69 74 20 69 73 20 66 69 67 75 72 69 6e 67 20  bit is figuring 
9330: 6f 75 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20  out the pointer 
9340: 74 6f 20 72 65 74 75 72 6e 20 69 6e 20 2a 70 7a  to return in *pz
9350: 54 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 63 68 61  Tail..  */.  cha
9360: 72 20 2a 7a 53 71 6c 38 20 3d 20 30 3b 0a 20 20  r *zSql8 = 0;.  
9370: 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 54 61 69  char const *zTai
9380: 6c 38 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72 63  l8 = 0;.  int rc
9390: 3b 0a 0a 20 20 7a 53 71 6c 38 20 3d 20 73 71 6c  ;..  zSql8 = sql
93a0: 69 74 65 33 75 74 66 31 36 74 6f 38 28 7a 53 71  ite3utf16to8(zSq
93b0: 6c 2c 20 6e 42 79 74 65 73 29 3b 0a 20 20 69 66  l, nBytes);.  if
93c0: 28 20 21 7a 53 71 6c 38 20 29 7b 0a 20 20 20 20  ( !zSql8 ){.    
93d0: 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c  sqlite3Error(db,
93e0: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2c 20 30   SQLITE_NOMEM, 0
93f0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  );.    return SQ
9400: 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a  LITE_NOMEM;.  }.
9410: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
9420: 72 65 70 61 72 65 28 64 62 2c 20 7a 53 71 6c 38  repare(db, zSql8
9430: 2c 20 2d 31 2c 20 70 70 53 74 6d 74 2c 20 26 7a  , -1, ppStmt, &z
9440: 54 61 69 6c 38 29 3b 0a 0a 20 20 69 66 28 20 7a  Tail8);..  if( z
9450: 54 61 69 6c 38 20 26 26 20 70 7a 54 61 69 6c 20  Tail8 && pzTail 
9460: 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 73 71 6c  ){.    /* If sql
9470: 69 74 65 33 5f 70 72 65 70 61 72 65 20 72 65 74  ite3_prepare ret
9480: 75 72 6e 73 20 61 20 74 61 69 6c 20 70 6f 69 6e  urns a tail poin
9490: 74 65 72 2c 20 77 65 20 63 61 6c 63 75 6c 61 74  ter, we calculat
94a0: 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 65 71 75  e the.    ** equ
94b0: 69 76 61 6c 65 6e 74 20 70 6f 69 6e 74 65 72 20  ivalent pointer 
94c0: 69 6e 74 6f 20 74 68 65 20 55 54 46 2d 31 36 20  into the UTF-16 
94d0: 73 74 72 69 6e 67 20 62 79 20 63 6f 75 6e 74 69  string by counti
94e0: 6e 67 20 74 68 65 20 75 6e 69 63 6f 64 65 0a 20  ng the unicode. 
94f0: 20 20 20 2a 2a 20 63 68 61 72 61 63 74 65 72 73     ** characters
9500: 20 62 65 74 77 65 65 6e 20 7a 53 71 6c 38 20 61   between zSql8 a
9510: 6e 64 20 7a 54 61 69 6c 38 2c 20 61 6e 64 20 74  nd zTail8, and t
9520: 68 65 6e 20 72 65 74 75 72 6e 69 6e 67 20 61 20  hen returning a 
9530: 70 6f 69 6e 74 65 72 0a 20 20 20 20 2a 2a 20 74  pointer.    ** t
9540: 68 65 20 73 61 6d 65 20 6e 75 6d 62 65 72 20 6f  he same number o
9550: 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 74  f characters int
9560: 6f 20 74 68 65 20 55 54 46 2d 31 36 20 73 74 72  o the UTF-16 str
9570: 69 6e 67 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ing..    */.    
9580: 69 6e 74 20 63 68 61 72 73 5f 70 61 72 73 65 64  int chars_parsed
9590: 20 3d 20 73 71 6c 69 74 65 33 75 74 66 38 43 68   = sqlite3utf8Ch
95a0: 61 72 4c 65 6e 28 7a 53 71 6c 38 2c 20 7a 54 61  arLen(zSql8, zTa
95b0: 69 6c 38 2d 7a 53 71 6c 38 29 3b 0a 20 20 20 20  il8-zSql8);.    
95c0: 2a 70 7a 54 61 69 6c 20 3d 20 28 75 38 20 2a 29  *pzTail = (u8 *)
95d0: 7a 53 71 6c 20 2b 20 73 71 6c 69 74 65 33 75 74  zSql + sqlite3ut
95e0: 66 31 36 42 79 74 65 4c 65 6e 28 7a 53 71 6c 2c  f16ByteLen(zSql,
95f0: 20 63 68 61 72 73 5f 70 61 72 73 65 64 29 3b 0a   chars_parsed);.
9600: 20 20 7d 0a 20 0a 20 20 72 65 74 75 72 6e 20 72    }. .  return r
9610: 63 3b 0a 7d 0a 0a 0a 23 69 66 20 30 0a 0a 2f 2a  c;.}...#if 0../*
9620: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  .** sqlite3_open
9630: 0a 2a 2a 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  .**.*/.int sqlit
9640: 65 33 5f 6f 70 65 6e 28 63 6f 6e 73 74 20 63 68  e3_open(const ch
9650: 61 72 20 2a 66 69 6c 65 6e 61 6d 65 2c 20 73 71  ar *filename, sq
9660: 6c 69 74 65 33 20 2a 2a 70 44 62 2c 20 63 6f 6e  lite3 **pDb, con
9670: 73 74 20 63 68 61 72 20 2a 2a 6f 70 74 69 6f 6e  st char **option
9680: 73 29 7b 0a 20 20 2a 70 44 62 20 3d 20 73 71 6c  s){.  *pDb = sql
9690: 69 74 65 33 5f 6f 70 65 6e 28 66 69 6c 65 6e 61  ite3_open(filena
96a0: 6d 65 2c 20 30 2c 20 26 65 72 72 6d 73 67 29 3b  me, 0, &errmsg);
96b0: 0a 20 20 72 65 74 75 72 6e 20 28 2a 70 44 62 3f  .  return (*pDb?
96c0: 53 51 4c 49 54 45 5f 4f 4b 3a 53 51 4c 49 54 45  SQLITE_OK:SQLITE
96d0: 5f 45 52 52 4f 52 29 3b 0a 7d 0a 69 6e 74 20 73  _ERROR);.}.int s
96e0: 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28 63 6f  qlite3_open16(co
96f0: 6e 73 74 20 76 6f 69 64 20 2a 66 69 6c 65 6e 61  nst void *filena
9700: 6d 65 2c 20 73 71 6c 69 74 65 33 20 2a 2a 70 44  me, sqlite3 **pD
9710: 62 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a  b, const char **
9720: 6f 70 74 69 6f 6e 73 29 7b 0a 20 20 69 6e 74 20  options){.  int 
9730: 72 63 3b 0a 20 20 63 68 61 72 20 2a 20 66 69 6c  rc;.  char * fil
9740: 65 6e 61 6d 65 38 3b 0a 0a 20 20 66 69 6c 65 6e  ename8;..  filen
9750: 61 6d 65 38 20 3d 20 73 71 6c 69 74 65 33 75 74  ame8 = sqlite3ut
9760: 66 31 36 74 6f 38 28 66 69 6c 65 6e 61 6d 65 2c  f16to8(filename,
9770: 20 2d 31 29 3b 0a 20 20 69 66 28 20 21 66 69 6c   -1);.  if( !fil
9780: 65 6e 61 6d 65 38 20 29 7b 0a 20 20 20 20 72 65  ename8 ){.    re
9790: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  turn SQLITE_NOME
97a0: 4d 3b 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20 73  M;.  }..  rc = s
97b0: 71 6c 69 74 65 33 5f 6f 70 65 6e 28 66 69 6c 65  qlite3_open(file
97c0: 6e 61 6d 65 38 2c 20 70 44 62 2c 20 6f 70 74 69  name8, pDb, opti
97d0: 6f 6e 73 29 3b 0a 20 20 73 71 6c 69 74 65 46 72  ons);.  sqliteFr
97e0: 65 65 28 66 69 6c 65 6e 61 6d 65 38 29 3b 0a 0a  ee(filename8);..
97f0: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a    return rc;.}..
9800: 2f 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c  /*.** sqlite3_cl
9810: 6f 73 65 0a 2a 2a 0a 2a 2f 0a 69 6e 74 20 73 71  ose.**.*/.int sq
9820: 6c 69 74 65 33 5f 63 6c 6f 73 65 28 73 71 6c 69  lite3_close(sqli
9830: 74 65 33 20 2a 64 62 29 7b 0a 20 20 72 65 74 75  te3 *db){.  retu
9840: 72 6e 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  rn sqlite3_close
9850: 28 64 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 73  (db);.}../*.** s
9860: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 0a 2a 2a  qlite3_errmsg.**
9870: 0a 2a 2a 20 54 4f 44 4f 3a 20 21 0a 2a 2f 0a 63  .** TODO: !.*/.c
9880: 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
9890: 65 33 5f 65 72 72 6d 73 67 28 73 71 6c 69 74 65  e3_errmsg(sqlite
98a0: 33 20 2a 64 62 29 7b 0a 20 20 61 73 73 65 72 74  3 *db){.  assert
98b0: 28 21 22 54 4f 44 4f 22 29 3b 0a 7d 0a 63 6f 6e  (!"TODO");.}.con
98c0: 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  st void *sqlite3
98d0: 5f 65 72 72 6d 73 67 31 36 28 73 71 6c 69 74 65  _errmsg16(sqlite
98e0: 33 20 2a 64 62 29 7b 0a 20 20 61 73 73 65 72 74  3 *db){.  assert
98f0: 28 21 22 54 4f 44 4f 22 29 3b 0a 7d 0a 0a 2f 2a  (!"TODO");.}../*
9900: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 65 72 72 63  .** sqlite3_errc
9910: 6f 64 65 0a 2a 2a 0a 2a 2a 20 54 4f 44 4f 3a 20  ode.**.** TODO: 
9920: 21 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  !.*/.int sqlite3
9930: 5f 65 72 72 63 6f 64 65 28 73 71 6c 69 74 65 33  _errcode(sqlite3
9940: 20 2a 64 62 29 7b 0a 20 20 61 73 73 65 72 74 28   *db){.  assert(
9950: 21 22 54 4f 44 4f 22 29 3b 0a 7d 0a 0a 73 74 72  !"TODO");.}..str
9960: 75 63 74 20 73 71 6c 69 74 65 5f 73 74 6d 74 20  uct sqlite_stmt 
9970: 7b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 73 71 6c 69  {.};../*.** sqli
9980: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 0a 2a 2f 0a  te3_finalize.*/.
9990: 69 6e 74 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  int sqlite3_fina
99a0: 6c 69 7a 65 28 73 71 6c 69 74 65 33 5f 73 74 6d  lize(sqlite3_stm
99b0: 74 20 2a 73 74 6d 74 29 7b 0a 20 20 72 65 74 75  t *stmt){.  retu
99c0: 72 6e 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  rn sqlite3_final
99d0: 69 7a 65 28 73 74 6d 74 2c 20 30 29 3b 0a 7d 0a  ize(stmt, 0);.}.
99e0: 0a 2f 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 72  ./*.** sqlite3_r
99f0: 65 73 65 74 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  eset.*/.int sqli
9a00: 74 65 33 5f 72 65 73 65 74 28 73 71 6c 69 74 65  te3_reset(sqlite
9a10: 33 5f 73 74 6d 74 2a 29 7b 0a 20 20 72 65 74 75  3_stmt*){.  retu
9a20: 72 6e 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74  rn sqlite3_reset
9a30: 28 73 74 6d 74 2c 20 30 29 3b 0a 7d 0a 0a 2f 2a  (stmt, 0);.}../*
9a40: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70  .** sqlite3_step
9a50: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
9a60: 73 74 65 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  step(sqlite3_stm
9a70: 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 72 65 74  t *pStmt){.  ret
9a80: 75 72 6e 20 73 71 6c 69 74 65 33 5f 73 74 65 70  urn sqlite3_step
9a90: 28 70 53 74 6d 74 29 3b 0a 7d 0a 0a 69 6e 74 20  (pStmt);.}..int 
9aa0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63  sqlite3_column_c
9ab0: 6f 75 6e 74 28 73 71 6c 69 74 65 33 5f 73 74 6d  ount(sqlite3_stm
9ac0: 74 2a 29 7b 0a 7d 0a 0a 69 6e 74 20 73 71 6c 69  t*){.}..int sqli
9ad0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28  te3_column_type(
9ae0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 2c 69 6e  sqlite3_stmt*,in
9af0: 74 29 7b 0a 7d 0a 0a 63 6f 6e 73 74 20 63 68 61  t){.}..const cha
9b00: 72 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  r *sqlite3_colum
9b10: 6e 5f 64 65 63 6c 74 79 70 65 28 73 71 6c 69 74  n_decltype(sqlit
9b20: 65 33 5f 73 74 6d 74 2a 2c 69 6e 74 29 7b 0a 7d  e3_stmt*,int){.}
9b30: 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71  ..const void *sq
9b40: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
9b50: 6c 74 79 70 65 31 36 28 73 71 6c 69 74 65 33 5f  ltype16(sqlite3_
9b60: 73 74 6d 74 2a 2c 69 6e 74 29 7b 0a 7d 0a 0a 63  stmt*,int){.}..c
9b70: 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
9b80: 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 73  e3_column_name(s
9b90: 71 6c 69 74 65 33 5f 73 74 6d 74 2a 2c 69 6e 74  qlite3_stmt*,int
9ba0: 29 7b 0a 7d 0a 0a 63 6f 6e 73 74 20 76 6f 69 64  ){.}..const void
9bb0: 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   *sqlite3_column
9bc0: 5f 6e 61 6d 65 31 36 28 73 71 6c 69 74 65 33 5f  _name16(sqlite3_
9bd0: 73 74 6d 74 2a 2c 69 6e 74 29 7b 0a 7d 0a 0a 63  stmt*,int){.}..c
9be0: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
9bf0: 61 72 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ar *sqlite3_colu
9c00: 6d 6e 5f 64 61 74 61 28 73 71 6c 69 74 65 33 5f  mn_data(sqlite3_
9c10: 73 74 6d 74 2a 2c 69 6e 74 29 7b 0a 7d 0a 0a 63  stmt*,int){.}..c
9c20: 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74  onst void *sqlit
9c30: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 31 36  e3_column_data16
9c40: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 2c 69  (sqlite3_stmt*,i
9c50: 6e 74 29 7b 0a 7d 0a 0a 69 6e 74 20 73 71 6c 69  nt){.}..int sqli
9c60: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
9c70: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 2c 69  (sqlite3_stmt*,i
9c80: 6e 74 29 7b 0a 7d 0a 0a 6c 6f 6e 67 20 6c 6f 6e  nt){.}..long lon
9c90: 67 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f  g int sqlite3_co
9ca0: 6c 75 6d 6e 5f 69 6e 74 28 73 71 6c 69 74 65 33  lumn_int(sqlite3
9cb0: 5f 73 74 6d 74 2a 2c 69 6e 74 29 7b 0a 7d 0a 0a  _stmt*,int){.}..
9cc0: 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 33 5f 63  double sqlite3_c
9cd0: 6f 6c 75 6d 6e 5f 66 6c 6f 61 74 28 73 71 6c 69  olumn_float(sqli
9ce0: 74 65 33 5f 73 74 6d 74 2a 2c 69 6e 74 29 7b 0a  te3_stmt*,int){.
9cf0: 7d 0a 0a 23 65 6e 64 69 66 0a                    }..#endif.