/ Hex Artifact Content
Login

Artifact 488ec788a06019521e53ffd25c4af97943937fb5:


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 39 34 20 32 30 30 34 2f 30 35  ,v 1.194 2004/05
0280: 2f 32 36 20 31 36 3a 35 34 3a 34 33 20 64 72 68  /26 16:54:43 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 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
03f0: 67 20 63 6f 6e 73 74 61 6e 74 20 76 61 6c 75 65  g constant value
0400: 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20   is used by the 
0410: 53 51 4c 49 54 45 33 5f 42 49 47 45 4e 44 49 41  SQLITE3_BIGENDIA
0420: 4e 20 61 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 33  N and.** SQLITE3
0430: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 6d 61  _LITTLEENDIAN ma
0440: 63 72 6f 73 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 69  cros..*/.const i
0450: 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20  nt sqlite3one = 
0460: 31 3b 0a 0a 2f 2a 0a 2a 2a 20 46 69 6c 6c 20 74  1;../*.** Fill t
0470: 68 65 20 49 6e 69 74 44 61 74 61 20 73 74 72 75  he InitData stru
0480: 63 74 75 72 65 20 77 69 74 68 20 61 6e 20 65 72  cture with an er
0490: 72 6f 72 20 6d 65 73 73 61 67 65 20 74 68 61 74  ror message that
04a0: 20 69 6e 64 69 63 61 74 65 73 0a 2a 2a 20 74 68   indicates.** th
04b0: 61 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  at the database 
04c0: 69 73 20 63 6f 72 72 75 70 74 2e 0a 2a 2f 0a 73  is corrupt..*/.s
04d0: 74 61 74 69 63 20 76 6f 69 64 20 63 6f 72 72 75  tatic void corru
04e0: 70 74 53 63 68 65 6d 61 28 49 6e 69 74 44 61 74  ptSchema(InitDat
04f0: 61 20 2a 70 44 61 74 61 2c 20 63 6f 6e 73 74 20  a *pData, const 
0500: 63 68 61 72 20 2a 7a 45 78 74 72 61 29 7b 0a 20  char *zExtra){. 
0510: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
0520: 67 28 70 44 61 74 61 2d 3e 70 7a 45 72 72 4d 73  g(pData->pzErrMs
0530: 67 2c 20 22 6d 61 6c 66 6f 72 6d 65 64 20 64 61  g, "malformed da
0540: 74 61 62 61 73 65 20 73 63 68 65 6d 61 22 2c 0a  tabase schema",.
0550: 20 20 20 20 20 7a 45 78 74 72 61 21 3d 30 20 26       zExtra!=0 &
0560: 26 20 7a 45 78 74 72 61 5b 30 5d 21 3d 30 20 3f  & zExtra[0]!=0 ?
0570: 20 22 20 2d 20 22 20 3a 20 28 63 68 61 72 2a 29   " - " : (char*)
0580: 30 2c 20 7a 45 78 74 72 61 2c 20 28 63 68 61 72  0, zExtra, (char
0590: 2a 29 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  *)0);.}../*.** T
05a0: 68 69 73 20 69 73 20 74 68 65 20 63 61 6c 6c 62  his is the callb
05b0: 61 63 6b 20 72 6f 75 74 69 6e 65 20 66 6f 72 20  ack routine for 
05c0: 74 68 65 20 63 6f 64 65 20 74 68 61 74 20 69 6e  the code that in
05d0: 69 74 69 61 6c 69 7a 65 73 20 74 68 65 0a 2a 2a  itializes the.**
05e0: 20 64 61 74 61 62 61 73 65 2e 20 20 53 65 65 20   database.  See 
05f0: 73 71 6c 69 74 65 33 49 6e 69 74 28 29 20 62 65  sqlite3Init() be
0600: 6c 6f 77 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  low for addition
0610: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
0620: 2a 2a 0a 2a 2a 20 45 61 63 68 20 63 61 6c 6c 62  **.** Each callb
0630: 61 63 6b 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ack contains the
0640: 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72   following infor
0650: 6d 61 74 69 6f 6e 3a 0a 2a 2a 0a 2a 2a 20 20 20  mation:.**.**   
0660: 20 20 61 72 67 76 5b 30 5d 20 3d 20 22 66 69 6c    argv[0] = "fil
0670: 65 2d 66 6f 72 6d 61 74 22 20 6f 72 20 22 73 63  e-format" or "sc
0680: 68 65 6d 61 2d 63 6f 6f 6b 69 65 22 20 6f 72 20  hema-cookie" or 
0690: 22 74 61 62 6c 65 22 20 6f 72 20 22 69 6e 64 65  "table" or "inde
06a0: 78 22 0a 2a 2a 20 20 20 20 20 61 72 67 76 5b 31  x".**     argv[1
06b0: 5d 20 3d 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ] = table or ind
06c0: 65 78 20 6e 61 6d 65 20 6f 72 20 6d 65 74 61 20  ex name or meta 
06d0: 73 74 61 74 65 6d 65 6e 74 20 74 79 70 65 2e 0a  statement type..
06e0: 2a 2a 20 20 20 20 20 61 72 67 76 5b 32 5d 20 3d  **     argv[2] =
06f0: 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
0700: 72 20 66 6f 72 20 74 61 62 6c 65 20 6f 72 20 69  r for table or i
0710: 6e 64 65 78 2e 20 20 4e 55 4c 4c 20 66 6f 72 20  ndex.  NULL for 
0720: 6d 65 74 61 2e 0a 2a 2a 20 20 20 20 20 61 72 67  meta..**     arg
0730: 76 5b 33 5d 20 3d 20 53 51 4c 20 74 65 78 74 20  v[3] = SQL text 
0740: 66 6f 72 20 61 20 43 52 45 41 54 45 20 54 41 42  for a CREATE TAB
0750: 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44  LE or CREATE IND
0760: 45 58 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  EX statement..**
0770: 20 20 20 20 20 61 72 67 76 5b 34 5d 20 3d 20 22       argv[4] = "
0780: 31 22 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  1" for temporary
0790: 20 66 69 6c 65 73 2c 20 22 30 22 20 66 6f 72 20   files, "0" for 
07a0: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 22  main database, "
07b0: 32 22 20 6f 72 20 6d 6f 72 65 0a 2a 2a 20 20 20  2" or more.**   
07c0: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20              for 
07d0: 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
07e0: 73 65 20 66 69 6c 65 73 2e 0a 2a 2a 0a 2a 2f 0a  se files..**.*/.
07f0: 73 74 61 74 69 63 0a 69 6e 74 20 73 71 6c 69 74  static.int sqlit
0800: 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76  e3InitCallback(v
0810: 6f 69 64 20 2a 70 49 6e 69 74 2c 20 69 6e 74 20  oid *pInit, int 
0820: 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61 72 67  argc, char **arg
0830: 76 2c 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 4e  v, char **azColN
0840: 61 6d 65 29 7b 0a 20 20 49 6e 69 74 44 61 74 61  ame){.  InitData
0850: 20 2a 70 44 61 74 61 20 3d 20 28 49 6e 69 74 44   *pData = (InitD
0860: 61 74 61 2a 29 70 49 6e 69 74 3b 0a 20 20 69 6e  ata*)pInit;.  in
0870: 74 20 6e 45 72 72 20 3d 20 30 3b 0a 0a 20 20 61  t nErr = 0;..  a
0880: 73 73 65 72 74 28 20 61 72 67 63 3d 3d 35 20 29  ssert( argc==5 )
0890: 3b 0a 20 20 69 66 28 20 61 72 67 76 3d 3d 30 20  ;.  if( argv==0 
08a0: 29 20 72 65 74 75 72 6e 20 30 3b 20 20 20 2f 2a  ) return 0;   /*
08b0: 20 4d 69 67 68 74 20 68 61 70 70 65 6e 20 69 66   Might happen if
08c0: 20 45 4d 50 54 59 5f 52 45 53 55 4c 54 5f 43 41   EMPTY_RESULT_CA
08d0: 4c 4c 42 41 43 4b 53 20 61 72 65 20 6f 6e 20 2a  LLBACKS are on *
08e0: 2f 0a 20 20 69 66 28 20 61 72 67 76 5b 30 5d 3d  /.  if( argv[0]=
08f0: 3d 30 20 29 7b 0a 20 20 20 20 63 6f 72 72 75 70  =0 ){.    corrup
0900: 74 53 63 68 65 6d 61 28 70 44 61 74 61 2c 20 30  tSchema(pData, 0
0910: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b  );.    return 1;
0920: 0a 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20 61  .  }.  switch( a
0930: 72 67 76 5b 30 5d 5b 30 5d 20 29 7b 0a 20 20 20  rgv[0][0] ){.   
0940: 20 63 61 73 65 20 27 76 27 3a 0a 20 20 20 20 63   case 'v':.    c
0950: 61 73 65 20 27 69 27 3a 0a 20 20 20 20 63 61 73  ase 'i':.    cas
0960: 65 20 27 74 27 3a 20 7b 20 20 2f 2a 20 43 52 45  e 't': {  /* CRE
0970: 41 54 45 20 54 41 42 4c 45 2c 20 43 52 45 41 54  ATE TABLE, CREAT
0980: 45 20 49 4e 44 45 58 2c 20 6f 72 20 43 52 45 41  E INDEX, or CREA
0990: 54 45 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e  TE VIEW statemen
09a0: 74 73 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69  ts */.      sqli
09b0: 74 65 20 2a 64 62 20 3d 20 70 44 61 74 61 2d 3e  te *db = pData->
09c0: 64 62 3b 0a 20 20 20 20 20 20 69 66 28 20 61 72  db;.      if( ar
09d0: 67 76 5b 32 5d 3d 3d 30 20 7c 7c 20 61 72 67 76  gv[2]==0 || argv
09e0: 5b 34 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  [4]==0 ){.      
09f0: 20 20 63 6f 72 72 75 70 74 53 63 68 65 6d 61 28    corruptSchema(
0a00: 70 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20  pData, 0);.     
0a10: 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20     return 1;.   
0a20: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 61     }.      if( a
0a30: 72 67 76 5b 33 5d 20 26 26 20 61 72 67 76 5b 33  rgv[3] && argv[3
0a40: 5d 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  ][0] ){.        
0a50: 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 61 72 73  /* Call the pars
0a60: 65 72 20 74 6f 20 70 72 6f 63 65 73 73 20 61 20  er to process a 
0a70: 43 52 45 41 54 45 20 54 41 42 4c 45 2c 20 49 4e  CREATE TABLE, IN
0a80: 44 45 58 20 6f 72 20 56 49 45 57 2e 0a 20 20 20  DEX or VIEW..   
0a90: 20 20 20 20 20 2a 2a 20 42 75 74 20 62 65 63 61       ** But beca
0aa0: 75 73 65 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73  use db->init.bus
0ab0: 79 20 69 73 20 73 65 74 20 74 6f 20 31 2c 20 6e  y is set to 1, n
0ac0: 6f 20 56 44 42 45 20 63 6f 64 65 20 69 73 20 67  o VDBE code is g
0ad0: 65 6e 65 72 61 74 65 64 0a 20 20 20 20 20 20 20  enerated.       
0ae0: 20 2a 2a 20 6f 72 20 65 78 65 63 75 74 65 64 2e   ** or executed.
0af0: 20 20 41 6c 6c 20 74 68 65 20 70 61 72 73 65 72    All the parser
0b00: 20 64 6f 65 73 20 69 73 20 62 75 69 6c 64 20 74   does is build t
0b10: 68 65 20 69 6e 74 65 72 6e 61 6c 20 64 61 74 61  he internal data
0b20: 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 74 72 75  .        ** stru
0b30: 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
0b40: 72 69 62 65 20 74 68 65 20 74 61 62 6c 65 2c 20  ribe the table, 
0b50: 69 6e 64 65 78 2c 20 6f 72 20 76 69 65 77 2e 0a  index, or view..
0b60: 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
0b70: 20 20 20 63 68 61 72 20 2a 7a 45 72 72 3b 0a 20     char *zErr;. 
0b80: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64         assert( d
0b90: 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29 3b 0a  b->init.busy );.
0ba0: 20 20 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74          db->init
0bb0: 2e 69 44 62 20 3d 20 61 74 6f 69 28 61 72 67 76  .iDb = atoi(argv
0bc0: 5b 34 5d 29 3b 0a 20 20 20 20 20 20 20 20 61 73  [4]);.        as
0bd0: 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 69  sert( db->init.i
0be0: 44 62 3e 3d 30 20 26 26 20 64 62 2d 3e 69 6e 69  Db>=0 && db->ini
0bf0: 74 2e 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  t.iDb<db->nDb );
0c00: 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69 6e 69  .        db->ini
0c10: 74 2e 6e 65 77 54 6e 75 6d 20 3d 20 61 74 6f 69  t.newTnum = atoi
0c20: 28 61 72 67 76 5b 32 5d 29 3b 0a 20 20 20 20 20  (argv[2]);.     
0c30: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 65     if( sqlite3_e
0c40: 78 65 63 28 64 62 2c 20 61 72 67 76 5b 33 5d 2c  xec(db, argv[3],
0c50: 20 30 2c 20 30 2c 20 26 7a 45 72 72 29 20 29 7b   0, 0, &zErr) ){
0c60: 0a 20 20 20 20 20 20 20 20 20 20 63 6f 72 72 75  .          corru
0c70: 70 74 53 63 68 65 6d 61 28 70 44 61 74 61 2c 20  ptSchema(pData, 
0c80: 7a 45 72 72 29 3b 0a 20 20 20 20 20 20 20 20 20  zErr);.         
0c90: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 6d 65 6d   sqlite3_freemem
0ca0: 28 7a 45 72 72 29 3b 0a 20 20 20 20 20 20 20 20  (zErr);.        
0cb0: 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69 6e  }.        db->in
0cc0: 69 74 2e 69 44 62 20 3d 20 30 3b 0a 20 20 20 20  it.iDb = 0;.    
0cd0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
0ce0: 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 20 63   /* If the SQL c
0cf0: 6f 6c 75 6d 6e 20 69 73 20 62 6c 61 6e 6b 20 69  olumn is blank i
0d00: 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20  t means this is 
0d10: 61 6e 20 69 6e 64 65 78 20 74 68 61 74 0a 20 20  an index that.  
0d20: 20 20 20 20 20 20 2a 2a 20 77 61 73 20 63 72 65        ** was cre
0d30: 61 74 65 64 20 74 6f 20 62 65 20 74 68 65 20 50  ated to be the P
0d40: 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 74 6f  RIMARY KEY or to
0d50: 20 66 75 6c 66 69 6c 6c 20 61 20 55 4e 49 51 55   fulfill a UNIQU
0d60: 45 0a 20 20 20 20 20 20 20 20 2a 2a 20 63 6f 6e  E.        ** con
0d70: 73 74 72 61 69 6e 74 20 66 6f 72 20 61 20 43 52  straint for a CR
0d80: 45 41 54 45 20 54 41 42 4c 45 2e 20 20 54 68 65  EATE TABLE.  The
0d90: 20 69 6e 64 65 78 20 73 68 6f 75 6c 64 20 68 61   index should ha
0da0: 76 65 20 61 6c 72 65 61 64 79 0a 20 20 20 20 20  ve already.     
0db0: 20 20 20 2a 2a 20 62 65 65 6e 20 63 72 65 61 74     ** been creat
0dc0: 65 64 20 77 68 65 6e 20 77 65 20 70 72 6f 63 65  ed when we proce
0dd0: 73 73 65 64 20 74 68 65 20 43 52 45 41 54 45 20  ssed the CREATE 
0de0: 54 41 42 4c 45 2e 20 20 41 6c 6c 20 77 65 20 68  TABLE.  All we h
0df0: 61 76 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  ave.        ** t
0e00: 6f 20 64 6f 20 68 65 72 65 20 69 73 20 72 65 63  o do here is rec
0e10: 6f 72 64 20 74 68 65 20 72 6f 6f 74 20 70 61 67  ord the root pag
0e20: 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61  e number for tha
0e30: 74 20 69 6e 64 65 78 2e 0a 20 20 20 20 20 20 20  t index..       
0e40: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 6e 74 20   */.        int 
0e50: 69 44 62 3b 0a 20 20 20 20 20 20 20 20 49 6e 64  iDb;.        Ind
0e60: 65 78 20 2a 70 49 6e 64 65 78 3b 0a 0a 20 20 20  ex *pIndex;..   
0e70: 20 20 20 20 20 69 44 62 20 3d 20 61 74 6f 69 28       iDb = atoi(
0e80: 61 72 67 76 5b 34 5d 29 3b 0a 20 20 20 20 20 20  argv[4]);.      
0e90: 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
0ea0: 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
0eb0: 29 3b 0a 20 20 20 20 20 20 20 20 70 49 6e 64 65  );.        pInde
0ec0: 78 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 49  x = sqlite3FindI
0ed0: 6e 64 65 78 28 64 62 2c 20 61 72 67 76 5b 31 5d  ndex(db, argv[1]
0ee0: 2c 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a  , db->aDb[iDb].z
0ef0: 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 69  Name);.        i
0f00: 66 28 20 70 49 6e 64 65 78 3d 3d 30 20 7c 7c 20  f( pIndex==0 || 
0f10: 70 49 6e 64 65 78 2d 3e 74 6e 75 6d 21 3d 30 20  pIndex->tnum!=0 
0f20: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ){.          /* 
0f30: 54 68 69 73 20 63 61 6e 20 6f 63 63 75 72 20 69  This can occur i
0f40: 66 20 74 68 65 72 65 20 65 78 69 73 74 73 20 61  f there exists a
0f50: 6e 20 69 6e 64 65 78 20 6f 6e 20 61 20 54 45 4d  n index on a TEM
0f60: 50 20 74 61 62 6c 65 20 77 68 69 63 68 0a 20 20  P table which.  
0f70: 20 20 20 20 20 20 20 20 2a 2a 20 68 61 73 20 74          ** has t
0f80: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20  he same name as 
0f90: 61 6e 6f 74 68 65 72 20 69 6e 64 65 78 20 6f 6e  another index on
0fa0: 20 61 20 70 65 72 6d 61 6e 65 6e 74 20 69 6e 64   a permanent ind
0fb0: 65 78 2e 20 20 53 69 6e 63 65 0a 20 20 20 20 20  ex.  Since.     
0fc0: 20 20 20 20 20 2a 2a 20 74 68 65 20 70 65 72 6d       ** the perm
0fd0: 61 6e 65 6e 74 20 74 61 62 6c 65 20 69 73 20 68  anent table is h
0fe0: 69 64 64 65 6e 20 62 79 20 74 68 65 20 54 45 4d  idden by the TEM
0ff0: 50 20 74 61 62 6c 65 2c 20 77 65 20 63 61 6e 20  P table, we can 
1000: 61 6c 73 6f 0a 20 20 20 20 20 20 20 20 20 20 2a  also.          *
1010: 2a 20 73 61 66 65 6c 79 20 69 67 6e 6f 72 65 20  * safely ignore 
1020: 74 68 65 20 69 6e 64 65 78 20 6f 6e 20 74 68 65  the index on the
1030: 20 70 65 72 6d 61 6e 65 6e 74 20 74 61 62 6c 65   permanent table
1040: 2e 0a 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20  ..          */. 
1050: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 4e           /* Do N
1060: 6f 74 68 69 6e 67 20 2a 2f 3b 0a 20 20 20 20 20  othing */;.     
1070: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1080: 20 20 20 20 70 49 6e 64 65 78 2d 3e 74 6e 75 6d      pIndex->tnum
1090: 20 3d 20 61 74 6f 69 28 61 72 67 76 5b 32 5d 29   = atoi(argv[2])
10a0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
10b0: 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b    }.      break;
10c0: 0a 20 20 20 20 7d 0a 20 20 20 20 64 65 66 61 75  .    }.    defau
10d0: 6c 74 3a 20 7b 0a 20 20 20 20 20 20 2f 2a 20 54  lt: {.      /* T
10e0: 68 69 73 20 63 61 6e 20 6e 6f 74 20 68 61 70 70  his can not happ
10f0: 65 6e 21 20 2a 2f 0a 20 20 20 20 20 20 6e 45 72  en! */.      nEr
1100: 72 20 3d 20 31 3b 0a 20 20 20 20 20 20 61 73 73  r = 1;.      ass
1110: 65 72 74 28 20 6e 45 72 72 3d 3d 30 20 29 3b 0a  ert( nErr==0 );.
1120: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
1130: 72 6e 20 6e 45 72 72 3b 0a 7d 0a 0a 2f 2a 0a 2a  rn nErr;.}../*.*
1140: 2a 20 41 74 74 65 6d 70 74 20 74 6f 20 72 65 61  * Attempt to rea
1150: 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  d the database s
1160: 63 68 65 6d 61 20 61 6e 64 20 69 6e 69 74 69 61  chema and initia
1170: 6c 69 7a 65 20 69 6e 74 65 72 6e 61 6c 0a 2a 2a  lize internal.**
1180: 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
1190: 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 64 61   for a single da
11a0: 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68  tabase file.  Th
11b0: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 0a 2a  e index of the.*
11c0: 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  * database file 
11d0: 69 73 20 67 69 76 65 6e 20 62 79 20 69 44 62 2e  is given by iDb.
11e0: 20 20 69 44 62 3d 3d 30 20 69 73 20 75 73 65 64    iDb==0 is used
11f0: 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 0a 2a 2a   for the main.**
1200: 20 64 61 74 61 62 61 73 65 2e 20 20 69 44 62 3d   database.  iDb=
1210: 3d 31 20 73 68 6f 75 6c 64 20 6e 65 76 65 72 20  =1 should never 
1220: 62 65 20 75 73 65 64 2e 20 20 69 44 62 3e 3d 32  be used.  iDb>=2
1230: 20 69 73 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20   is used for.** 
1240: 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
1250: 73 65 73 2e 20 20 52 65 74 75 72 6e 20 6f 6e 65  ses.  Return one
1260: 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 20   of the SQLITE_ 
1270: 65 72 72 6f 72 20 63 6f 64 65 73 20 74 6f 0a 2a  error codes to.*
1280: 2a 20 69 6e 64 69 63 61 74 65 20 73 75 63 63 65  * indicate succe
1290: 73 73 20 6f 72 20 66 61 69 6c 75 72 65 2e 0a 2a  ss or failure..*
12a0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  /.static int sql
12b0: 69 74 65 33 49 6e 69 74 4f 6e 65 28 73 71 6c 69  ite3InitOne(sqli
12c0: 74 65 20 2a 64 62 2c 20 69 6e 74 20 69 44 62 2c  te *db, int iDb,
12d0: 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67   char **pzErrMsg
12e0: 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 42  ){.  int rc;.  B
12f0: 74 43 75 72 73 6f 72 20 2a 63 75 72 4d 61 69 6e  tCursor *curMain
1300: 3b 0a 20 20 69 6e 74 20 73 69 7a 65 3b 0a 20 20  ;.  int size;.  
1310: 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 63  Table *pTab;.  c
1320: 68 61 72 20 2a 61 7a 41 72 67 5b 36 5d 3b 0a 20  har *azArg[6];. 
1330: 20 63 68 61 72 20 7a 44 62 4e 75 6d 5b 33 30 5d   char zDbNum[30]
1340: 3b 0a 20 20 69 6e 74 20 6d 65 74 61 5b 31 30 5d  ;.  int meta[10]
1350: 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69  ;.  InitData ini
1360: 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 0a 20 20 2a  tData;..  /*.  *
1370: 2a 20 54 68 65 20 6d 61 73 74 65 72 20 64 61 74  * The master dat
1380: 61 62 61 73 65 20 74 61 62 6c 65 20 68 61 73 20  abase table has 
1390: 61 20 73 74 72 75 63 74 75 72 65 20 6c 69 6b 65  a structure like
13a0: 20 74 68 69 73 0a 20 20 2a 2f 0a 20 20 73 74 61   this.  */.  sta
13b0: 74 69 63 20 63 68 61 72 20 6d 61 73 74 65 72 5f  tic char master_
13c0: 73 63 68 65 6d 61 5b 5d 20 3d 20 0a 20 20 20 20  schema[] = .    
13d0: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 73   "CREATE TABLE s
13e0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 28 5c 6e 22  qlite_master(\n"
13f0: 0a 20 20 20 20 20 22 20 20 74 79 70 65 20 74 65  .     "  type te
1400: 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 6e  xt,\n".     "  n
1410: 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20  ame text,\n".   
1420: 20 20 22 20 20 74 62 6c 5f 6e 61 6d 65 20 74 65    "  tbl_name te
1430: 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 72  xt,\n".     "  r
1440: 6f 6f 74 70 61 67 65 20 69 6e 74 65 67 65 72 2c  ootpage integer,
1450: 5c 6e 22 0a 20 20 20 20 20 22 20 20 73 71 6c 20  \n".     "  sql 
1460: 74 65 78 74 5c 6e 22 0a 20 20 20 20 20 22 29 22  text\n".     ")"
1470: 0a 20 20 3b 0a 20 20 73 74 61 74 69 63 20 63 68  .  ;.  static ch
1480: 61 72 20 74 65 6d 70 5f 6d 61 73 74 65 72 5f 73  ar temp_master_s
1490: 63 68 65 6d 61 5b 5d 20 3d 20 0a 20 20 20 20 20  chema[] = .     
14a0: 22 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42  "CREATE TEMP TAB
14b0: 4c 45 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  LE sqlite_temp_m
14c0: 61 73 74 65 72 28 5c 6e 22 0a 20 20 20 20 20 22  aster(\n".     "
14d0: 20 20 74 79 70 65 20 74 65 78 74 2c 5c 6e 22 0a    type text,\n".
14e0: 20 20 20 20 20 22 20 20 6e 61 6d 65 20 74 65 78       "  name tex
14f0: 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 74 62  t,\n".     "  tb
1500: 6c 5f 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a  l_name text,\n".
1510: 20 20 20 20 20 22 20 20 72 6f 6f 74 70 61 67 65       "  rootpage
1520: 20 69 6e 74 65 67 65 72 2c 5c 6e 22 0a 20 20 20   integer,\n".   
1530: 20 20 22 20 20 73 71 6c 20 74 65 78 74 5c 6e 22    "  sql text\n"
1540: 0a 20 20 20 20 20 22 29 22 0a 20 20 3b 0a 0a 20  .     ")".  ;.. 
1550: 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
1560: 67 20 53 51 4c 20 77 69 6c 6c 20 72 65 61 64 20  g SQL will read 
1570: 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20  the schema from 
1580: 74 68 65 20 6d 61 73 74 65 72 20 74 61 62 6c 65  the master table
1590: 73 2e 0a 20 20 2a 2f 0a 20 20 73 74 61 74 69 63  s..  */.  static
15a0: 20 63 68 61 72 20 69 6e 69 74 5f 73 63 72 69 70   char init_scrip
15b0: 74 31 5b 5d 20 3d 20 0a 20 20 20 20 20 22 53 45  t1[] = .     "SE
15c0: 4c 45 43 54 20 74 79 70 65 2c 20 6e 61 6d 65 2c  LECT type, name,
15d0: 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 2c 20   rootpage, sql, 
15e0: 31 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  1 FROM sqlite_te
15f0: 6d 70 5f 6d 61 73 74 65 72 22 3b 0a 20 20 73 74  mp_master";.  st
1600: 61 74 69 63 20 63 68 61 72 20 69 6e 69 74 5f 73  atic char init_s
1610: 63 72 69 70 74 32 5b 5d 20 3d 20 0a 20 20 20 20  cript2[] = .    
1620: 20 22 53 45 4c 45 43 54 20 74 79 70 65 2c 20 6e   "SELECT type, n
1630: 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73  ame, rootpage, s
1640: 71 6c 2c 20 30 20 46 52 4f 4d 20 73 71 6c 69 74  ql, 0 FROM sqlit
1650: 65 5f 6d 61 73 74 65 72 22 3b 0a 0a 20 20 61 73  e_master";..  as
1660: 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
1670: 69 44 62 21 3d 31 20 26 26 20 69 44 62 3c 64 62  iDb!=1 && iDb<db
1680: 2d 3e 6e 44 62 20 29 3b 0a 0a 20 20 2f 2a 20 43  ->nDb );..  /* C
1690: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73 63 68  onstruct the sch
16a0: 65 6d 61 20 74 61 62 6c 65 73 3a 20 73 71 6c 69  ema tables: sqli
16b0: 74 65 5f 6d 61 73 74 65 72 20 61 6e 64 20 73 71  te_master and sq
16c0: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
16d0: 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 53  .  */.  sqlite3S
16e0: 61 66 65 74 79 4f 66 66 28 64 62 29 3b 0a 20 20  afetyOff(db);.  
16f0: 61 7a 41 72 67 5b 30 5d 20 3d 20 22 74 61 62 6c  azArg[0] = "tabl
1700: 65 22 3b 0a 20 20 61 7a 41 72 67 5b 31 5d 20 3d  e";.  azArg[1] =
1710: 20 4d 41 53 54 45 52 5f 4e 41 4d 45 3b 0a 20 20   MASTER_NAME;.  
1720: 61 7a 41 72 67 5b 32 5d 20 3d 20 22 31 22 3b 0a  azArg[2] = "1";.
1730: 20 20 61 7a 41 72 67 5b 33 5d 20 3d 20 6d 61 73    azArg[3] = mas
1740: 74 65 72 5f 73 63 68 65 6d 61 3b 0a 20 20 73 70  ter_schema;.  sp
1750: 72 69 6e 74 66 28 7a 44 62 4e 75 6d 2c 20 22 25  rintf(zDbNum, "%
1760: 64 22 2c 20 69 44 62 29 3b 0a 20 20 61 7a 41 72  d", iDb);.  azAr
1770: 67 5b 34 5d 20 3d 20 7a 44 62 4e 75 6d 3b 0a 20  g[4] = zDbNum;. 
1780: 20 61 7a 41 72 67 5b 35 5d 20 3d 20 30 3b 0a 20   azArg[5] = 0;. 
1790: 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64   initData.db = d
17a0: 62 3b 0a 20 20 69 6e 69 74 44 61 74 61 2e 70 7a  b;.  initData.pz
17b0: 45 72 72 4d 73 67 20 3d 20 70 7a 45 72 72 4d 73  ErrMsg = pzErrMs
17c0: 67 3b 0a 20 20 73 71 6c 69 74 65 33 49 6e 69 74  g;.  sqlite3Init
17d0: 43 61 6c 6c 62 61 63 6b 28 26 69 6e 69 74 44 61  Callback(&initDa
17e0: 74 61 2c 20 35 2c 20 61 7a 41 72 67 2c 20 30 29  ta, 5, azArg, 0)
17f0: 3b 0a 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74  ;.  pTab = sqlit
1800: 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20  e3FindTable(db, 
1810: 4d 41 53 54 45 52 5f 4e 41 4d 45 2c 20 22 6d 61  MASTER_NAME, "ma
1820: 69 6e 22 29 3b 0a 20 20 69 66 28 20 70 54 61 62  in");.  if( pTab
1830: 20 29 7b 0a 20 20 20 20 70 54 61 62 2d 3e 72 65   ){.    pTab->re
1840: 61 64 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20 7d 0a  adOnly = 1;.  }.
1850: 20 20 69 66 28 20 69 44 62 3d 3d 30 20 29 7b 0a    if( iDb==0 ){.
1860: 20 20 20 20 61 7a 41 72 67 5b 31 5d 20 3d 20 54      azArg[1] = T
1870: 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3b  EMP_MASTER_NAME;
1880: 0a 20 20 20 20 61 7a 41 72 67 5b 33 5d 20 3d 20  .    azArg[3] = 
1890: 74 65 6d 70 5f 6d 61 73 74 65 72 5f 73 63 68 65  temp_master_sche
18a0: 6d 61 3b 0a 20 20 20 20 61 7a 41 72 67 5b 34 5d  ma;.    azArg[4]
18b0: 20 3d 20 22 31 22 3b 0a 20 20 20 20 73 71 6c 69   = "1";.    sqli
18c0: 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  te3InitCallback(
18d0: 26 69 6e 69 74 44 61 74 61 2c 20 35 2c 20 61 7a  &initData, 5, az
18e0: 41 72 67 2c 20 30 29 3b 0a 20 20 20 20 70 54 61  Arg, 0);.    pTa
18f0: 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54  b = sqlite3FindT
1900: 61 62 6c 65 28 64 62 2c 20 54 45 4d 50 5f 4d 41  able(db, TEMP_MA
1910: 53 54 45 52 5f 4e 41 4d 45 2c 20 22 74 65 6d 70  STER_NAME, "temp
1920: 22 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62  ");.    if( pTab
1930: 20 29 7b 0a 20 20 20 20 20 20 70 54 61 62 2d 3e   ){.      pTab->
1940: 72 65 61 64 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20  readOnly = 1;.  
1950: 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65    }.  }.  sqlite
1960: 33 53 61 66 65 74 79 4f 6e 28 64 62 29 3b 0a 0a  3SafetyOn(db);..
1970: 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20 63 75    /* Create a cu
1980: 72 73 6f 72 20 74 6f 20 68 6f 6c 64 20 74 68 65  rsor to hold the
1990: 20 64 61 74 61 62 61 73 65 20 6f 70 65 6e 0a 20   database open. 
19a0: 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 61 44   */.  if( db->aD
19b0: 62 5b 69 44 62 5d 2e 70 42 74 3d 3d 30 20 29 20  b[iDb].pBt==0 ) 
19c0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
19d0: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
19e0: 42 74 72 65 65 43 75 72 73 6f 72 28 64 62 2d 3e  BtreeCursor(db->
19f0: 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 4d 41  aDb[iDb].pBt, MA
1a00: 53 54 45 52 5f 52 4f 4f 54 2c 20 30 2c 20 30 2c  STER_ROOT, 0, 0,
1a10: 20 30 2c 20 26 63 75 72 4d 61 69 6e 29 3b 0a 20   0, &curMain);. 
1a20: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1a30: 4f 4b 20 26 26 20 72 63 21 3d 53 51 4c 49 54 45  OK && rc!=SQLITE
1a40: 5f 45 4d 50 54 59 20 29 7b 0a 20 20 20 20 73 71  _EMPTY ){.    sq
1a50: 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 70  lite3SetString(p
1a60: 7a 45 72 72 4d 73 67 2c 20 73 71 6c 69 74 65 33  zErrMsg, sqlite3
1a70: 5f 65 72 72 6f 72 5f 73 74 72 69 6e 67 28 72 63  _error_string(rc
1a80: 29 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20  ), (char*)0);.  
1a90: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 7d    return rc;.  }
1aa0: 0a 0a 20 20 2f 2a 20 47 65 74 20 74 68 65 20 64  ..  /* Get the d
1ab0: 61 74 61 62 61 73 65 20 6d 65 74 61 20 69 6e 66  atabase meta inf
1ac0: 6f 72 6d 61 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20  ormation..  **. 
1ad0: 20 2a 2a 20 4d 65 74 61 20 76 61 6c 75 65 73 20   ** Meta values 
1ae0: 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  are as follows:.
1af0: 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b 30 5d 20    **    meta[0] 
1b00: 20 20 53 63 68 65 6d 61 20 63 6f 6f 6b 69 65 2e    Schema cookie.
1b10: 20 20 43 68 61 6e 67 65 73 20 77 69 74 68 20 65    Changes with e
1b20: 61 63 68 20 73 63 68 65 6d 61 20 63 68 61 6e 67  ach schema chang
1b30: 65 2e 0a 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b  e..  **    meta[
1b40: 31 5d 20 20 20 46 69 6c 65 20 66 6f 72 6d 61 74  1]   File format
1b50: 20 6f 66 20 73 63 68 65 6d 61 20 6c 61 79 65 72   of schema layer
1b60: 2e 0a 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b 32  ..  **    meta[2
1b70: 5d 20 20 20 53 69 7a 65 20 6f 66 20 74 68 65 20  ]   Size of the 
1b80: 70 61 67 65 20 63 61 63 68 65 2e 0a 20 20 2a 2a  page cache..  **
1b90: 20 20 20 20 6d 65 74 61 5b 33 5d 20 20 20 53 79      meta[3]   Sy
1ba0: 6e 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e  nchronous settin
1bb0: 67 2e 20 20 31 3a 6f 66 66 2c 20 32 3a 6e 6f 72  g.  1:off, 2:nor
1bc0: 6d 61 6c 2c 20 33 3a 66 75 6c 6c 0a 20 20 2a 2a  mal, 3:full.  **
1bd0: 20 20 20 20 6d 65 74 61 5b 34 5d 20 20 20 44 62      meta[4]   Db
1be0: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e 20   text encoding. 
1bf0: 31 3a 55 54 46 2d 38 20 32 3a 55 54 46 2d 31 36  1:UTF-8 2:UTF-16
1c00: 20 4c 45 20 33 3a 55 54 46 2d 31 36 20 42 45 0a   LE 3:UTF-16 BE.
1c10: 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b 35 5d 20    **    meta[5] 
1c20: 20 20 50 72 61 67 6d 61 20 74 65 6d 70 5f 73 74    Pragma temp_st
1c30: 6f 72 65 20 76 61 6c 75 65 2e 20 20 53 65 65 20  ore value.  See 
1c40: 63 6f 6d 6d 65 6e 74 73 20 6f 6e 20 42 74 72 65  comments on Btre
1c50: 65 46 61 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20  eFactory.  **   
1c60: 20 6d 65 74 61 5b 36 5d 0a 20 20 2a 2a 20 20 20   meta[6].  **   
1c70: 20 6d 65 74 61 5b 37 5d 0a 20 20 2a 2a 20 20 20   meta[7].  **   
1c80: 20 6d 65 74 61 5b 38 5d 0a 20 20 2a 2a 20 20 20   meta[8].  **   
1c90: 20 6d 65 74 61 5b 39 5d 0a 20 20 2a 2a 0a 20 20   meta[9].  **.  
1ca0: 2a 2a 20 4e 6f 74 65 3a 20 54 68 65 20 68 61 73  ** Note: The has
1cb0: 68 20 64 65 66 69 6e 65 64 20 54 45 58 54 5f 55  h defined TEXT_U
1cc0: 74 66 2a 20 73 79 6d 62 6f 6c 73 20 69 6e 20 73  tf* symbols in s
1cd0: 71 6c 69 74 65 49 6e 74 2e 68 20 63 6f 72 72 65  qliteInt.h corre
1ce0: 73 70 6f 6e 64 20 74 6f 0a 20 20 2a 2a 20 74 68  spond to.  ** th
1cf0: 65 20 70 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  e possible value
1d00: 73 20 6f 66 20 6d 65 74 61 5b 34 5d 2e 0a 20 20  s of meta[4]..  
1d10: 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  */.  if( rc==SQL
1d20: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 6e  ITE_OK ){.    in
1d30: 74 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  t i;.    for(i=0
1d40: 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ; rc==SQLITE_OK 
1d50: 26 26 20 69 3c 73 69 7a 65 6f 66 28 6d 65 74 61  && i<sizeof(meta
1d60: 29 2f 73 69 7a 65 6f 66 28 6d 65 74 61 5b 30 5d  )/sizeof(meta[0]
1d70: 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 72  ); i++){.      r
1d80: 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1d90: 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b  GetMeta(db->aDb[
1da0: 69 44 62 5d 2e 70 42 74 2c 20 69 2b 31 2c 20 26  iDb].pBt, i+1, &
1db0: 6d 65 74 61 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a  meta[i]);.    }.
1dc0: 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20      if( rc ){.  
1dd0: 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
1de0: 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 73  ring(pzErrMsg, s
1df0: 71 6c 69 74 65 33 5f 65 72 72 6f 72 5f 73 74 72  qlite3_error_str
1e00: 69 6e 67 28 72 63 29 2c 20 28 63 68 61 72 2a 29  ing(rc), (char*)
1e10: 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0);.      sqlite
1e20: 33 42 74 72 65 65 43 6c 6f 73 65 43 75 72 73 6f  3BtreeCloseCurso
1e30: 72 28 63 75 72 4d 61 69 6e 29 3b 0a 20 20 20 20  r(curMain);.    
1e40: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 20    return rc;.   
1e50: 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
1e60: 6d 65 6d 73 65 74 28 6d 65 74 61 2c 20 30 2c 20  memset(meta, 0, 
1e70: 73 69 7a 65 6f 66 28 6d 65 74 61 29 29 3b 0a 20  sizeof(meta));. 
1e80: 20 7d 0a 20 20 64 62 2d 3e 61 44 62 5b 69 44 62   }.  db->aDb[iDb
1e90: 5d 2e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20  ].schema_cookie 
1ea0: 3d 20 6d 65 74 61 5b 30 5d 3b 0a 20 20 69 66 28  = meta[0];.  if(
1eb0: 20 69 44 62 3d 3d 30 20 29 7b 0a 20 20 20 20 64   iDb==0 ){.    d
1ec0: 62 2d 3e 6e 65 78 74 5f 63 6f 6f 6b 69 65 20 3d  b->next_cookie =
1ed0: 20 6d 65 74 61 5b 30 5d 3b 0a 20 20 20 20 64 62   meta[0];.    db
1ee0: 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20  ->file_format = 
1ef0: 6d 65 74 61 5b 31 5d 3b 0a 20 20 20 20 69 66 28  meta[1];.    if(
1f00: 20 6d 65 74 61 5b 34 5d 20 29 7b 0a 20 20 20 20   meta[4] ){.    
1f10: 20 20 2f 2a 20 49 66 20 6d 65 74 61 5b 34 5d 20    /* If meta[4] 
1f20: 69 73 20 73 74 69 6c 6c 20 7a 65 72 6f 2c 20 74  is still zero, t
1f30: 68 65 6e 20 77 65 20 61 72 65 20 6f 70 65 6e 69  hen we are openi
1f40: 6e 67 20 61 20 70 72 65 76 69 6f 75 73 6c 79 20  ng a previously 
1f50: 65 6d 70 74 79 0a 20 20 20 20 20 20 2a 2a 20 66  empty.      ** f
1f60: 69 6c 65 2e 20 4c 65 61 76 65 20 64 62 2d 3e 65  ile. Leave db->e
1f70: 6e 63 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c  nc to the defaul
1f80: 74 20 76 61 6c 75 65 20 73 65 74 20 62 79 20 74  t value set by t
1f90: 68 65 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28  he sqlite3_open(
1fa0: 29 0a 20 20 20 20 20 20 2a 2a 20 63 61 6c 6c 20  ).      ** call 
1fb0: 69 6e 20 74 68 69 73 20 63 61 73 65 2e 0a 20 20  in this case..  
1fc0: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 64 62 2d      */.      db-
1fd0: 3e 65 6e 63 20 3d 20 28 75 38 29 6d 65 74 61 5b  >enc = (u8)meta[
1fe0: 34 5d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 69  4];.    }.    si
1ff0: 7a 65 20 3d 20 6d 65 74 61 5b 32 5d 3b 0a 20 20  ze = meta[2];.  
2000: 20 20 69 66 28 20 73 69 7a 65 3d 3d 30 20 29 7b    if( size==0 ){
2010: 20 73 69 7a 65 20 3d 20 4d 41 58 5f 50 41 47 45   size = MAX_PAGE
2020: 53 3b 20 7d 0a 20 20 20 20 64 62 2d 3e 63 61 63  S; }.    db->cac
2030: 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65 3b 0a  he_size = size;.
2040: 20 20 20 20 64 62 2d 3e 73 61 66 65 74 79 5f 6c      db->safety_l
2050: 65 76 65 6c 20 3d 20 6d 65 74 61 5b 33 5d 3b 0a  evel = meta[3];.
2060: 20 20 20 20 69 66 28 20 6d 65 74 61 5b 35 5d 3e      if( meta[5]>
2070: 30 20 26 26 20 6d 65 74 61 5b 35 5d 3c 3d 32 20  0 && meta[5]<=2 
2080: 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  && db->temp_stor
2090: 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 62  e==0 ){.      db
20a0: 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 6d  ->temp_store = m
20b0: 65 74 61 5b 35 5d 3b 0a 20 20 20 20 7d 0a 20 20  eta[5];.    }.  
20c0: 20 20 69 66 28 20 64 62 2d 3e 73 61 66 65 74 79    if( db->safety
20d0: 5f 6c 65 76 65 6c 3d 3d 30 20 29 20 64 62 2d 3e  _level==0 ) db->
20e0: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 32  safety_level = 2
20f0: 3b 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a  ;..    /*.    **
2100: 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d 31    file_format==1
2110: 20 20 20 20 56 65 72 73 69 6f 6e 20 33 2e 30 2e      Version 3.0.
2120: 30 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  0..    */.    if
2130: 28 20 64 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  ( db->file_forma
2140: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a  t==0 ){.      /*
2150: 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 69 66   This happens if
2160: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77 61   the database wa
2170: 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74  s initially empt
2180: 79 20 2a 2f 0a 20 20 20 20 20 20 64 62 2d 3e 66  y */.      db->f
2190: 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 31 3b 0a  ile_format = 1;.
21a0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62      }else if( db
21b0: 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3e 31 20  ->file_format>1 
21c0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
21d0: 42 74 72 65 65 43 6c 6f 73 65 43 75 72 73 6f 72  BtreeCloseCursor
21e0: 28 63 75 72 4d 61 69 6e 29 3b 0a 20 20 20 20 20  (curMain);.     
21f0: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
2200: 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 75 6e 73  g(pzErrMsg, "uns
2210: 75 70 70 6f 72 74 65 64 20 66 69 6c 65 20 66 6f  upported file fo
2220: 72 6d 61 74 22 2c 20 28 63 68 61 72 2a 29 30 29  rmat", (char*)0)
2230: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ;.      return S
2240: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
2250: 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64   }.  }else if( d
2260: 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 21 3d  b->file_format!=
2270: 6d 65 74 61 5b 31 5d 20 29 7b 0a 20 20 20 20 69  meta[1] ){.    i
2280: 66 28 20 6d 65 74 61 5b 31 5d 3d 3d 30 20 29 7b  f( meta[1]==0 ){
2290: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
22a0: 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67  tString(pzErrMsg
22b0: 2c 20 22 63 61 6e 6e 6f 74 20 61 74 74 61 63 68  , "cannot attach
22c0: 20 65 6d 70 74 79 20 64 61 74 61 62 61 73 65 3a   empty database:
22d0: 20 22 2c 0a 20 20 20 20 20 20 20 20 20 64 62 2d   ",.         db-
22e0: 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c  >aDb[iDb].zName,
22f0: 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20 20 20   (char*)0);.    
2300: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
2310: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 70 7a  ite3SetString(pz
2320: 45 72 72 4d 73 67 2c 20 22 69 6e 63 6f 6d 70 61  ErrMsg, "incompa
2330: 74 69 62 6c 65 20 66 69 6c 65 20 66 6f 72 6d 61  tible file forma
2340: 74 20 69 6e 20 61 75 78 69 6c 69 61 72 79 20 22  t in auxiliary "
2350: 0a 20 20 20 20 20 20 20 20 20 22 64 61 74 61 62  .         "datab
2360: 61 73 65 3a 20 22 2c 20 64 62 2d 3e 61 44 62 5b  ase: ", db->aDb[
2370: 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 28 63 68 61  iDb].zName, (cha
2380: 72 2a 29 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20  r*)0);.    }.   
2390: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 6f   sqlite3BtreeClo
23a0: 73 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  se(db->aDb[iDb].
23b0: 70 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e 61 44  pBt);.    db->aD
23c0: 62 5b 69 44 62 5d 2e 70 42 74 20 3d 20 30 3b 0a  b[iDb].pBt = 0;.
23d0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
23e0: 45 5f 46 4f 52 4d 41 54 3b 0a 20 20 7d 0a 20 20  E_FORMAT;.  }.  
23f0: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
2400: 61 63 68 65 53 69 7a 65 28 64 62 2d 3e 61 44 62  acheSize(db->aDb
2410: 5b 69 44 62 5d 2e 70 42 74 2c 20 64 62 2d 3e 63  [iDb].pBt, db->c
2420: 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 73 71  ache_size);.  sq
2430: 6c 69 74 65 33 42 74 72 65 65 53 65 74 53 61 66  lite3BtreeSetSaf
2440: 65 74 79 4c 65 76 65 6c 28 64 62 2d 3e 61 44 62  etyLevel(db->aDb
2450: 5b 69 44 62 5d 2e 70 42 74 2c 20 6d 65 74 61 5b  [iDb].pBt, meta[
2460: 33 5d 3d 3d 30 20 3f 20 32 20 3a 20 6d 65 74 61  3]==0 ? 2 : meta
2470: 5b 33 5d 29 3b 0a 0a 20 20 2f 2a 20 52 65 61 64  [3]);..  /* Read
2480: 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f   the schema info
2490: 72 6d 61 74 69 6f 6e 20 6f 75 74 20 6f 66 20 74  rmation out of t
24a0: 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65 73  he schema tables
24b0: 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
24c0: 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29 3b  db->init.busy );
24d0: 0a 20 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  .  sqlite3Safety
24e0: 4f 66 66 28 64 62 29 3b 0a 20 20 69 66 28 20 72  Off(db);.  if( r
24f0: 63 3d 3d 53 51 4c 49 54 45 5f 45 4d 50 54 59 20  c==SQLITE_EMPTY 
2500: 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 61 6e  ){.    /* For an
2510: 20 65 6d 70 74 79 20 64 61 74 61 62 61 73 65 2c   empty database,
2520: 20 74 68 65 72 65 20 69 73 20 6e 6f 74 68 69 6e   there is nothin
2530: 67 20 74 6f 20 72 65 61 64 20 2a 2f 0a 20 20 20  g to read */.   
2540: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
2550: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66  .  }else{.    if
2560: 28 20 69 44 62 3d 3d 30 20 29 7b 0a 20 20 20 20  ( iDb==0 ){.    
2570: 20 20 2f 2a 20 54 68 69 73 20 53 51 4c 20 73 74    /* This SQL st
2580: 61 74 65 6d 65 6e 74 20 74 72 69 65 73 20 74 6f  atement tries to
2590: 20 72 65 61 64 20 74 68 65 20 74 65 6d 70 2e 2a   read the temp.*
25a0: 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65   schema from the
25b0: 0a 20 20 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  .      ** sqlite
25c0: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20 74 61 62  _temp_master tab
25d0: 6c 65 2e 20 49 74 20 6d 69 67 68 74 20 72 65 74  le. It might ret
25e0: 75 72 6e 20 53 51 4c 49 54 45 5f 45 4d 50 54 59  urn SQLITE_EMPTY
25f0: 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  . .      */.    
2600: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65    rc = sqlite3_e
2610: 78 65 63 28 64 62 2c 20 69 6e 69 74 5f 73 63 72  xec(db, init_scr
2620: 69 70 74 31 2c 20 73 71 6c 69 74 65 33 49 6e 69  ipt1, sqlite3Ini
2630: 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74  tCallback, &init
2640: 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20  Data, 0);.      
2650: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
2660: 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  K || rc==SQLITE_
2670: 45 4d 50 54 59 20 29 7b 0a 20 20 20 20 20 20 20  EMPTY ){.       
2680: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78   rc = sqlite3_ex
2690: 65 63 28 64 62 2c 20 69 6e 69 74 5f 73 63 72 69  ec(db, init_scri
26a0: 70 74 32 2c 20 73 71 6c 69 74 65 33 49 6e 69 74  pt2, sqlite3Init
26b0: 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44  Callback, &initD
26c0: 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d  ata, 0);.      }
26d0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
26e0: 20 20 63 68 61 72 20 2a 7a 53 71 6c 20 3d 20 30    char *zSql = 0
26f0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  ;.      sqlite3S
2700: 65 74 53 74 72 69 6e 67 28 26 7a 53 71 6c 2c 20  etString(&zSql, 
2710: 0a 20 20 20 20 20 20 20 20 20 22 53 45 4c 45 43  .         "SELEC
2720: 54 20 74 79 70 65 2c 20 6e 61 6d 65 2c 20 72 6f  T type, name, ro
2730: 6f 74 70 61 67 65 2c 20 73 71 6c 2c 20 22 2c 20  otpage, sql, ", 
2740: 7a 44 62 4e 75 6d 2c 20 22 20 46 52 4f 4d 20 5c  zDbNum, " FROM \
2750: 22 22 2c 0a 20 20 20 20 20 20 20 20 20 64 62 2d  "",.         db-
2760: 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c  >aDb[iDb].zName,
2770: 20 22 5c 22 2e 73 71 6c 69 74 65 5f 6d 61 73 74   "\".sqlite_mast
2780: 65 72 22 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a  er", (char*)0);.
2790: 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
27a0: 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c  e3_exec(db, zSql
27b0: 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  , sqlite3InitCal
27c0: 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61  lback, &initData
27d0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
27e0: 74 65 46 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20  teFree(zSql);.  
27f0: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 53    }.    sqlite3S
2800: 61 66 65 74 79 4f 6e 28 64 62 29 3b 0a 20 20 20  afetyOn(db);.   
2810: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 6f   sqlite3BtreeClo
2820: 73 65 43 75 72 73 6f 72 28 63 75 72 4d 61 69 6e  seCursor(curMain
2830: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  );.  }.  if( sql
2840: 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c  ite3_malloc_fail
2850: 65 64 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ed ){.    sqlite
2860: 33 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72  3SetString(pzErr
2870: 4d 73 67 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d  Msg, "out of mem
2880: 6f 72 79 22 2c 20 28 63 68 61 72 2a 29 30 29 3b  ory", (char*)0);
2890: 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
28a0: 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 73 71 6c 69  _NOMEM;.    sqli
28b0: 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c  te3ResetInternal
28c0: 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20  Schema(db, 0);. 
28d0: 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c   }.  if( rc==SQL
28e0: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 44 62  ITE_OK ){.    Db
28f0: 53 65 74 50 72 6f 70 65 72 74 79 28 64 62 2c 20  SetProperty(db, 
2900: 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f  iDb, DB_SchemaLo
2910: 61 64 65 64 29 3b 0a 20 20 20 20 69 66 28 20 69  aded);.    if( i
2920: 44 62 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 44  Db==0 ){.      D
2930: 62 53 65 74 50 72 6f 70 65 72 74 79 28 64 62 2c  bSetProperty(db,
2940: 20 31 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61   1, DB_SchemaLoa
2950: 64 65 64 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  ded);.    }.  }e
2960: 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
2970: 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68  ResetInternalSch
2980: 65 6d 61 28 64 62 2c 20 69 44 62 29 3b 0a 20 20  ema(db, iDb);.  
2990: 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  }.  return rc;.}
29a0: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 69 74 69 61 6c 69  ../*.** Initiali
29b0: 7a 65 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20  ze all database 
29c0: 66 69 6c 65 73 20 2d 20 74 68 65 20 6d 61 69 6e  files - the main
29d0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20   database file, 
29e0: 74 68 65 20 66 69 6c 65 0a 2a 2a 20 75 73 65 64  the file.** used
29f0: 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f 72   to store tempor
2a00: 61 72 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20  ary tables, and 
2a10: 61 6e 79 20 61 64 64 69 74 69 6f 6e 61 6c 20 64  any additional d
2a20: 61 74 61 62 61 73 65 20 66 69 6c 65 73 0a 2a 2a  atabase files.**
2a30: 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 41   created using A
2a40: 54 54 41 43 48 20 73 74 61 74 65 6d 65 6e 74 73  TTACH statements
2a50: 2e 20 20 52 65 74 75 72 6e 20 61 20 73 75 63 63  .  Return a succ
2a60: 65 73 73 20 63 6f 64 65 2e 20 20 49 66 20 61 6e  ess code.  If an
2a70: 0a 2a 2a 20 65 72 72 6f 72 20 6f 63 63 75 72 73  .** error occurs
2a80: 2c 20 77 72 69 74 65 20 61 6e 20 65 72 72 6f 72  , write an error
2a90: 20 6d 65 73 73 61 67 65 20 69 6e 74 6f 20 2a 70   message into *p
2aa0: 7a 45 72 72 4d 73 67 2e 0a 2a 2a 0a 2a 2a 20 41  zErrMsg..**.** A
2ab0: 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61 73  fter the databas
2ac0: 65 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  e is initialized
2ad0: 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 49 6e 69  , the SQLITE_Ini
2ae0: 74 69 61 6c 69 7a 65 64 0a 2a 2a 20 62 69 74 20  tialized.** bit 
2af0: 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 66 6c  is set in the fl
2b00: 61 67 73 20 66 69 65 6c 64 20 6f 66 20 74 68 65  ags field of the
2b10: 20 73 71 6c 69 74 65 20 73 74 72 75 63 74 75 72   sqlite structur
2b20: 65 2e 20 20 41 6e 0a 2a 2a 20 61 74 74 65 6d 70  e.  An.** attemp
2b30: 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 69  t is made to ini
2b40: 74 69 61 6c 69 7a 65 20 74 68 65 20 64 61 74 61  tialize the data
2b50: 62 61 73 65 20 61 73 20 73 6f 6f 6e 20 61 73 20  base as soon as 
2b60: 69 74 0a 2a 2a 20 69 73 20 6f 70 65 6e 65 64 2e  it.** is opened.
2b70: 20 20 49 66 20 74 68 61 74 20 66 61 69 6c 73 20    If that fails 
2b80: 28 70 65 72 68 61 70 73 20 62 65 63 61 75 73 65  (perhaps because
2b90: 20 61 6e 6f 74 68 65 72 20 70 72 6f 63 65 73 73   another process
2ba0: 0a 2a 2a 20 68 61 73 20 74 68 65 20 73 71 6c 69  .** has the sqli
2bb0: 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20  te_master table 
2bc0: 6c 6f 63 6b 65 64 29 20 74 68 61 6e 20 61 6e 6f  locked) than ano
2bd0: 74 68 65 72 20 61 74 74 65 6d 70 74 0a 2a 2a 20  ther attempt.** 
2be0: 69 73 20 6d 61 64 65 20 74 68 65 20 66 69 72 73  is made the firs
2bf0: 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61 62  t time the datab
2c00: 61 73 65 20 69 73 20 61 63 63 65 73 73 65 64 2e  ase is accessed.
2c10: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  .*/.int sqlite3I
2c20: 6e 69 74 28 73 71 6c 69 74 65 20 2a 64 62 2c 20  nit(sqlite *db, 
2c30: 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 29  char **pzErrMsg)
2c40: 7b 0a 20 20 69 6e 74 20 69 2c 20 72 63 3b 0a 20  {.  int i, rc;. 
2c50: 20 0a 20 20 69 66 28 20 64 62 2d 3e 69 6e 69 74   .  if( db->init
2c60: 2e 62 75 73 79 20 29 20 72 65 74 75 72 6e 20 53  .busy ) return S
2c70: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 61 73 73 65  QLITE_OK;.  asse
2c80: 72 74 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26  rt( (db->flags &
2c90: 20 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69   SQLITE_Initiali
2ca0: 7a 65 64 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20  zed)==0 );.  rc 
2cb0: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 64  = SQLITE_OK;.  d
2cc0: 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31  b->init.busy = 1
2cd0: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 72 63 3d  ;.  for(i=0; rc=
2ce0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 3c  =SQLITE_OK && i<
2cf0: 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20  db->nDb; i++){. 
2d00: 20 20 20 69 66 28 20 44 62 48 61 73 50 72 6f 70     if( DbHasProp
2d10: 65 72 74 79 28 64 62 2c 20 69 2c 20 44 42 5f 53  erty(db, i, DB_S
2d20: 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 20 63  chemaLoaded) ) c
2d30: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 61 73 73  ontinue;.    ass
2d40: 65 72 74 28 20 69 21 3d 31 20 29 3b 20 20 2f 2a  ert( i!=1 );  /*
2d50: 20 53 68 6f 75 6c 64 20 68 61 76 65 20 62 65 65   Should have bee
2d60: 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  n initialized to
2d70: 67 65 74 68 65 72 20 77 69 74 68 20 30 20 2a 2f  gether with 0 */
2d80: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2d90: 33 49 6e 69 74 4f 6e 65 28 64 62 2c 20 69 2c 20  3InitOne(db, i, 
2da0: 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 69  pzErrMsg);.    i
2db0: 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 73  f( rc ){.      s
2dc0: 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72  qlite3ResetInter
2dd0: 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 69 29  nalSchema(db, i)
2de0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 64 62  ;.    }.  }.  db
2df0: 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b  ->init.busy = 0;
2e00: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
2e10: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 64 62 2d 3e  E_OK ){.    db->
2e20: 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f  flags |= SQLITE_
2e30: 49 6e 69 74 69 61 6c 69 7a 65 64 3b 0a 20 20 20  Initialized;.   
2e40: 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e   sqlite3CommitIn
2e50: 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 64 62  ternalChanges(db
2e60: 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 72 63  );.  }..  if( rc
2e70: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
2e80: 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20     db->flags &= 
2e90: 7e 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69  ~SQLITE_Initiali
2ea0: 7a 65 64 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  zed;.  }.  retur
2eb0: 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  n rc;.}../*.** T
2ec0: 68 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  he version of th
2ed0: 65 20 6c 69 62 72 61 72 79 0a 2a 2f 0a 63 6f 6e  e library.*/.con
2ee0: 73 74 20 63 68 61 72 20 72 63 73 69 64 5b 5d 20  st char rcsid[] 
2ef0: 3d 20 22 40 28 23 29 20 5c 30 34 34 49 64 3a 20  = "@(#) \044Id: 
2f00: 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 22  SQLite version "
2f10: 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 20   SQLITE_VERSION 
2f20: 22 20 24 22 3b 0a 63 6f 6e 73 74 20 63 68 61 72  " $";.const char
2f30: 20 73 71 6c 69 74 65 33 5f 76 65 72 73 69 6f 6e   sqlite3_version
2f40: 5b 5d 20 3d 20 53 51 4c 49 54 45 5f 56 45 52 53  [] = SQLITE_VERS
2f50: 49 4f 4e 3b 0a 0a 2f 2a 0a 2a 2a 20 44 6f 65 73  ION;../*.** Does
2f60: 20 74 68 65 20 6c 69 62 72 61 72 79 20 65 78 70   the library exp
2f70: 65 63 74 20 64 61 74 61 20 74 6f 20 62 65 20 65  ect data to be e
2f80: 6e 63 6f 64 65 64 20 61 73 20 55 54 46 2d 38 20  ncoded as UTF-8 
2f90: 6f 72 20 69 73 6f 38 38 35 39 3f 20 20 54 68 65  or iso8859?  The
2fa0: 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 67 6c  .** following gl
2fb0: 6f 62 61 6c 20 63 6f 6e 73 74 61 6e 74 20 61 6c  obal constant al
2fc0: 77 61 79 73 20 6c 65 74 73 20 75 73 20 6b 6e 6f  ways lets us kno
2fd0: 77 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  w..*/.#ifdef SQL
2fe0: 49 54 45 5f 55 54 46 38 0a 63 6f 6e 73 74 20 63  ITE_UTF8.const c
2ff0: 68 61 72 20 73 71 6c 69 74 65 33 5f 65 6e 63 6f  har sqlite3_enco
3000: 64 69 6e 67 5b 5d 20 3d 20 22 55 54 46 2d 38 22  ding[] = "UTF-8"
3010: 3b 0a 23 65 6c 73 65 0a 63 6f 6e 73 74 20 63 68  ;.#else.const ch
3020: 61 72 20 73 71 6c 69 74 65 33 5f 65 6e 63 6f 64  ar sqlite3_encod
3030: 69 6e 67 5b 5d 20 3d 20 22 69 73 6f 38 38 35 39  ing[] = "iso8859
3040: 22 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ";.#endif../*.**
3050: 20 54 68 69 73 20 69 73 20 74 68 65 20 64 65 66   This is the def
3060: 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66  ault collating f
3070: 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 64 20 22 42  unction named "B
3080: 49 4e 41 52 59 22 20 77 68 69 63 68 20 69 73 20  INARY" which is 
3090: 61 6c 77 61 79 73 0a 2a 2a 20 61 76 61 69 6c 61  always.** availa
30a0: 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ble..*/.static i
30b0: 6e 74 20 62 69 6e 61 72 79 43 6f 6c 6c 61 74 69  nt binaryCollati
30c0: 6e 67 46 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a  ngFunc(.  void *
30d0: 4e 6f 74 55 73 65 64 2c 0a 20 20 69 6e 74 20 6e  NotUsed,.  int n
30e0: 4b 65 79 31 2c 20 63 6f 6e 73 74 20 76 6f 69 64  Key1, const void
30f0: 20 2a 70 4b 65 79 31 2c 0a 20 20 69 6e 74 20 6e   *pKey1,.  int n
3100: 4b 65 79 32 2c 20 63 6f 6e 73 74 20 76 6f 69 64  Key2, const void
3110: 20 2a 70 4b 65 79 32 0a 29 7b 0a 20 20 69 6e 74   *pKey2.){.  int
3120: 20 72 63 2c 20 6e 3b 0a 20 20 6e 20 3d 20 6e 4b   rc, n;.  n = nK
3130: 65 79 31 3c 6e 4b 65 79 32 20 3f 20 6e 4b 65 79  ey1<nKey2 ? nKey
3140: 31 20 3a 20 6e 4b 65 79 32 3b 0a 20 20 72 63 20  1 : nKey2;.  rc 
3150: 3d 20 6d 65 6d 63 6d 70 28 70 4b 65 79 31 2c 20  = memcmp(pKey1, 
3160: 70 4b 65 79 32 2c 20 6e 29 3b 0a 20 20 69 66 28  pKey2, n);.  if(
3170: 20 72 63 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63   rc==0 ){.    rc
3180: 20 3d 20 6e 4b 65 79 31 20 2d 20 6e 4b 65 79 32   = nKey1 - nKey2
3190: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72  ;.  }.  return r
31a0: 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  c;.}../*.** Retu
31b0: 72 6e 20 74 68 65 20 52 4f 57 49 44 20 6f 66 20  rn the ROWID of 
31c0: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
31d0: 69 6e 73 65 72 74 0a 2a 2f 0a 6c 6f 6e 67 20 6c  insert.*/.long l
31e0: 6f 6e 67 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ong int sqlite3_
31f0: 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
3200: 64 28 73 71 6c 69 74 65 20 2a 64 62 29 7b 0a 20  d(sqlite *db){. 
3210: 20 72 65 74 75 72 6e 20 64 62 2d 3e 6c 61 73 74   return db->last
3220: 52 6f 77 69 64 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  Rowid;.}../*.** 
3230: 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  Return the numbe
3240: 72 20 6f 66 20 63 68 61 6e 67 65 73 20 69 6e 20  r of changes in 
3250: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
3260: 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f  call to sqlite3_
3270: 65 78 65 63 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73  exec()..*/.int s
3280: 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 73  qlite3_changes(s
3290: 71 6c 69 74 65 20 2a 64 62 29 7b 0a 20 20 72 65  qlite *db){.  re
32a0: 74 75 72 6e 20 64 62 2d 3e 6e 43 68 61 6e 67 65  turn db->nChange
32b0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  ;.}../*.** Retur
32c0: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
32d0: 63 68 61 6e 67 65 73 20 70 72 6f 64 75 63 65 64  changes produced
32e0: 20 62 79 20 74 68 65 20 6c 61 73 74 20 49 4e 53   by the last INS
32f0: 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 0a  ERT, UPDATE, or.
3300: 2a 2a 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  ** DELETE statem
3310: 65 6e 74 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20  ent to complete 
3320: 65 78 65 63 75 74 69 6f 6e 2e 20 54 68 65 20 63  execution. The c
3330: 6f 75 6e 74 20 64 6f 65 73 20 6e 6f 74 20 69 6e  ount does not in
3340: 63 6c 75 64 65 0a 2a 2a 20 63 68 61 6e 67 65 73  clude.** changes
3350: 20 64 75 65 20 74 6f 20 53 51 4c 20 73 74 61 74   due to SQL stat
3360: 65 6d 65 6e 74 73 20 65 78 65 63 75 74 65 64 20  ements executed 
3370: 69 6e 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  in trigger progr
3380: 61 6d 73 20 74 68 61 74 20 77 65 72 65 0a 2a 2a  ams that were.**
3390: 20 74 72 69 67 67 65 72 65 64 20 62 79 20 74 68   triggered by th
33a0: 61 74 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2f 0a  at statement.*/.
33b0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 6c 61 73 74  int sqlite3_last
33c0: 5f 73 74 61 74 65 6d 65 6e 74 5f 63 68 61 6e 67  _statement_chang
33d0: 65 73 28 73 71 6c 69 74 65 20 2a 64 62 29 7b 0a  es(sqlite *db){.
33e0: 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 6c 73 43    return db->lsC
33f0: 68 61 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  hange;.}../*.** 
3400: 43 6c 6f 73 65 20 61 6e 20 65 78 69 73 74 69 6e  Close an existin
3410: 67 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  g SQLite databas
3420: 65 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  e.*/.void sqlite
3430: 33 5f 63 6c 6f 73 65 28 73 71 6c 69 74 65 20 2a  3_close(sqlite *
3440: 64 62 29 7b 0a 20 20 48 61 73 68 45 6c 65 6d 20  db){.  HashElem 
3450: 2a 69 3b 0a 20 20 69 6e 74 20 6a 3b 0a 20 20 64  *i;.  int j;.  d
3460: 62 2d 3e 77 61 6e 74 5f 74 6f 5f 63 6c 6f 73 65  b->want_to_close
3470: 20 3d 20 31 3b 0a 20 20 69 66 28 20 73 71 6c 69   = 1;.  if( sqli
3480: 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 64  te3SafetyCheck(d
3490: 62 29 20 7c 7c 20 73 71 6c 69 74 65 33 53 61 66  b) || sqlite3Saf
34a0: 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20 20 20  etyOn(db) ){.   
34b0: 20 2f 2a 20 70 72 69 6e 74 66 28 22 44 49 44 20   /* printf("DID 
34c0: 4e 4f 54 20 43 4c 4f 53 45 5c 6e 22 29 3b 20 66  NOT CLOSE\n"); f
34d0: 66 6c 75 73 68 28 73 74 64 6f 75 74 29 3b 20 2a  flush(stdout); *
34e0: 2f 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20  /.    return;.  
34f0: 7d 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20  }.  db->magic = 
3500: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f  SQLITE_MAGIC_CLO
3510: 53 45 44 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20  SED;.  for(j=0; 
3520: 6a 3c 64 62 2d 3e 6e 44 62 3b 20 6a 2b 2b 29 7b  j<db->nDb; j++){
3530: 0a 20 20 20 20 73 74 72 75 63 74 20 44 62 20 2a  .    struct Db *
3540: 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 6a  pDb = &db->aDb[j
3550: 5d 3b 0a 20 20 20 20 69 66 28 20 70 44 62 2d 3e  ];.    if( pDb->
3560: 70 42 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  pBt ){.      sql
3570: 69 74 65 33 42 74 72 65 65 43 6c 6f 73 65 28 70  ite3BtreeClose(p
3580: 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20  Db->pBt);.      
3590: 70 44 62 2d 3e 70 42 74 20 3d 20 30 3b 0a 20 20  pDb->pBt = 0;.  
35a0: 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65    }.  }.  sqlite
35b0: 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63  3ResetInternalSc
35c0: 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20 20 61  hema(db, 0);.  a
35d0: 73 73 65 72 74 28 20 64 62 2d 3e 6e 44 62 3c 3d  ssert( db->nDb<=
35e0: 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  2 );.  assert( d
35f0: 62 2d 3e 61 44 62 3d 3d 64 62 2d 3e 61 44 62 53  b->aDb==db->aDbS
3600: 74 61 74 69 63 20 29 3b 0a 20 20 66 6f 72 28 69  tatic );.  for(i
3610: 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74  =sqliteHashFirst
3620: 28 26 64 62 2d 3e 61 46 75 6e 63 29 3b 20 69 3b  (&db->aFunc); i;
3630: 20 69 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78   i=sqliteHashNex
3640: 74 28 69 29 29 7b 0a 20 20 20 20 46 75 6e 63 44  t(i)){.    FuncD
3650: 65 66 20 2a 70 46 75 6e 63 2c 20 2a 70 4e 65 78  ef *pFunc, *pNex
3660: 74 3b 0a 20 20 20 20 66 6f 72 28 70 46 75 6e 63  t;.    for(pFunc
3670: 20 3d 20 28 46 75 6e 63 44 65 66 2a 29 73 71 6c   = (FuncDef*)sql
3680: 69 74 65 48 61 73 68 44 61 74 61 28 69 29 3b 20  iteHashData(i); 
3690: 70 46 75 6e 63 3b 20 70 46 75 6e 63 3d 70 4e 65  pFunc; pFunc=pNe
36a0: 78 74 29 7b 0a 20 20 20 20 20 20 70 4e 65 78 74  xt){.      pNext
36b0: 20 3d 20 70 46 75 6e 63 2d 3e 70 4e 65 78 74 3b   = pFunc->pNext;
36c0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 46 72 65  .      sqliteFre
36d0: 65 28 70 46 75 6e 63 29 3b 0a 20 20 20 20 7d 0a  e(pFunc);.    }.
36e0: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 48 61 73    }.  sqlite3Has
36f0: 68 43 6c 65 61 72 28 26 64 62 2d 3e 61 46 75 6e  hClear(&db->aFun
3700: 63 29 3b 0a 20 20 73 71 6c 69 74 65 33 45 72 72  c);.  sqlite3Err
3710: 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 4f 4b  or(db, SQLITE_OK
3720: 2c 20 30 29 3b 20 2f 2a 20 44 65 61 6c 6c 6f 63  , 0); /* Dealloc
3730: 61 74 65 73 20 61 6e 79 20 63 61 63 68 65 64 20  ates any cached 
3740: 65 72 72 6f 72 20 73 74 72 69 6e 67 73 2e 20 2a  error strings. *
3750: 2f 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28 64  /.  sqliteFree(d
3760: 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 6f 6c  b);.}../*.** Rol
3770: 6c 62 61 63 6b 20 61 6c 6c 20 64 61 74 61 62 61  lback all databa
3780: 73 65 20 66 69 6c 65 73 2e 0a 2a 2f 0a 76 6f 69  se files..*/.voi
3790: 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63  d sqlite3Rollbac
37a0: 6b 41 6c 6c 28 73 71 6c 69 74 65 20 2a 64 62 29  kAll(sqlite *db)
37b0: 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72  {.  int i;.  for
37c0: 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b  (i=0; i<db->nDb;
37d0: 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 64   i++){.    if( d
37e0: 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 20 29 7b  b->aDb[i].pBt ){
37f0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74  .      sqlite3Bt
3800: 72 65 65 52 6f 6c 6c 62 61 63 6b 28 64 62 2d 3e  reeRollback(db->
3810: 61 44 62 5b 69 5d 2e 70 42 74 29 3b 0a 20 20 20  aDb[i].pBt);.   
3820: 20 20 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 69 6e     db->aDb[i].in
3830: 54 72 61 6e 73 20 3d 20 30 3b 0a 20 20 20 20 7d  Trans = 0;.    }
3840: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 65  .  }.  sqlite3Re
3850: 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
3860: 61 28 64 62 2c 20 30 29 3b 0a 20 20 2f 2a 20 73  a(db, 0);.  /* s
3870: 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 49 6e  qlite3RollbackIn
3880: 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 64 62  ternalChanges(db
3890: 29 3b 20 2a 2f 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  ); */.}../*.** R
38a0: 65 74 75 72 6e 20 61 20 73 74 61 74 69 63 20 73  eturn a static s
38b0: 74 72 69 6e 67 20 74 68 61 74 20 64 65 73 63 72  tring that descr
38c0: 69 62 65 73 20 74 68 65 20 6b 69 6e 64 20 6f 66  ibes the kind of
38d0: 20 65 72 72 6f 72 20 73 70 65 63 69 66 69 65 64   error specified
38e0: 20 69 6e 20 74 68 65 0a 2a 2a 20 61 72 67 75 6d   in the.** argum
38f0: 65 6e 74 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68  ent..*/.const ch
3900: 61 72 20 2a 73 71 6c 69 74 65 33 5f 65 72 72 6f  ar *sqlite3_erro
3910: 72 5f 73 74 72 69 6e 67 28 69 6e 74 20 72 63 29  r_string(int rc)
3920: 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
3930: 7a 3b 0a 20 20 73 77 69 74 63 68 28 20 72 63 20  z;.  switch( rc 
3940: 29 7b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  ){.    case SQLI
3950: 54 45 5f 4f 4b 3a 20 20 20 20 20 20 20 20 20 7a  TE_OK:         z
3960: 20 3d 20 22 6e 6f 74 20 61 6e 20 65 72 72 6f 72   = "not an error
3970: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ";              
3980: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3990: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
39a0: 54 45 5f 45 52 52 4f 52 3a 20 20 20 20 20 20 7a  TE_ERROR:      z
39b0: 20 3d 20 22 53 51 4c 20 6c 6f 67 69 63 20 65 72   = "SQL logic er
39c0: 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67 20 64  ror or missing d
39d0: 61 74 61 62 61 73 65 22 3b 20 20 20 62 72 65 61  atabase";   brea
39e0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
39f0: 54 45 5f 49 4e 54 45 52 4e 41 4c 3a 20 20 20 7a  TE_INTERNAL:   z
3a00: 20 3d 20 22 69 6e 74 65 72 6e 61 6c 20 53 51 4c   = "internal SQL
3a10: 69 74 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ite implementati
3a20: 6f 6e 20 66 6c 61 77 22 3b 20 20 20 62 72 65 61  on flaw";   brea
3a30: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3a40: 54 45 5f 50 45 52 4d 3a 20 20 20 20 20 20 20 7a  TE_PERM:       z
3a50: 20 3d 20 22 61 63 63 65 73 73 20 70 65 72 6d 69   = "access permi
3a60: 73 73 69 6f 6e 20 64 65 6e 69 65 64 22 3b 20 20  ssion denied";  
3a70: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3a80: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3a90: 54 45 5f 41 42 4f 52 54 3a 20 20 20 20 20 20 7a  TE_ABORT:      z
3aa0: 20 3d 20 22 63 61 6c 6c 62 61 63 6b 20 72 65 71   = "callback req
3ab0: 75 65 73 74 65 64 20 71 75 65 72 79 20 61 62 6f  uested query abo
3ac0: 72 74 22 3b 20 20 20 20 20 20 20 20 62 72 65 61  rt";        brea
3ad0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3ae0: 54 45 5f 42 55 53 59 3a 20 20 20 20 20 20 20 7a  TE_BUSY:       z
3af0: 20 3d 20 22 64 61 74 61 62 61 73 65 20 69 73 20   = "database is 
3b00: 6c 6f 63 6b 65 64 22 3b 20 20 20 20 20 20 20 20  locked";        
3b10: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3b20: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3b30: 54 45 5f 4c 4f 43 4b 45 44 3a 20 20 20 20 20 7a  TE_LOCKED:     z
3b40: 20 3d 20 22 64 61 74 61 62 61 73 65 20 74 61 62   = "database tab
3b50: 6c 65 20 69 73 20 6c 6f 63 6b 65 64 22 3b 20 20  le is locked";  
3b60: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3b70: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3b80: 54 45 5f 4e 4f 4d 45 4d 3a 20 20 20 20 20 20 7a  TE_NOMEM:      z
3b90: 20 3d 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72   = "out of memor
3ba0: 79 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  y";             
3bb0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3bc0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3bd0: 54 45 5f 52 45 41 44 4f 4e 4c 59 3a 20 20 20 7a  TE_READONLY:   z
3be0: 20 3d 20 22 61 74 74 65 6d 70 74 20 74 6f 20 77   = "attempt to w
3bf0: 72 69 74 65 20 61 20 72 65 61 64 6f 6e 6c 79 20  rite a readonly 
3c00: 64 61 74 61 62 61 73 65 22 3b 20 20 62 72 65 61  database";  brea
3c10: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3c20: 54 45 5f 49 4e 54 45 52 52 55 50 54 3a 20 20 7a  TE_INTERRUPT:  z
3c30: 20 3d 20 22 69 6e 74 65 72 72 75 70 74 65 64 22   = "interrupted"
3c40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
3c50: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3c60: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3c70: 54 45 5f 49 4f 45 52 52 3a 20 20 20 20 20 20 7a  TE_IOERR:      z
3c80: 20 3d 20 22 64 69 73 6b 20 49 2f 4f 20 65 72 72   = "disk I/O err
3c90: 6f 72 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  or";            
3ca0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3cb0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3cc0: 54 45 5f 43 4f 52 52 55 50 54 3a 20 20 20 20 7a  TE_CORRUPT:    z
3cd0: 20 3d 20 22 64 61 74 61 62 61 73 65 20 64 69 73   = "database dis
3ce0: 6b 20 69 6d 61 67 65 20 69 73 20 6d 61 6c 66 6f  k image is malfo
3cf0: 72 6d 65 64 22 3b 20 20 20 20 20 20 62 72 65 61  rmed";      brea
3d00: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3d10: 54 45 5f 4e 4f 54 46 4f 55 4e 44 3a 20 20 20 7a  TE_NOTFOUND:   z
3d20: 20 3d 20 22 74 61 62 6c 65 20 6f 72 20 72 65 63   = "table or rec
3d30: 6f 72 64 20 6e 6f 74 20 66 6f 75 6e 64 22 3b 20  ord not found"; 
3d40: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3d50: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3d60: 54 45 5f 46 55 4c 4c 3a 20 20 20 20 20 20 20 7a  TE_FULL:       z
3d70: 20 3d 20 22 64 61 74 61 62 61 73 65 20 69 73 20   = "database is 
3d80: 66 75 6c 6c 22 3b 20 20 20 20 20 20 20 20 20 20  full";          
3d90: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3da0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3db0: 54 45 5f 43 41 4e 54 4f 50 45 4e 3a 20 20 20 7a  TE_CANTOPEN:   z
3dc0: 20 3d 20 22 75 6e 61 62 6c 65 20 74 6f 20 6f 70   = "unable to op
3dd0: 65 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  en database file
3de0: 22 3b 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ";          brea
3df0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3e00: 54 45 5f 50 52 4f 54 4f 43 4f 4c 3a 20 20 20 7a  TE_PROTOCOL:   z
3e10: 20 3d 20 22 64 61 74 61 62 61 73 65 20 6c 6f 63   = "database loc
3e20: 6b 69 6e 67 20 70 72 6f 74 6f 63 6f 6c 20 66 61  king protocol fa
3e30: 69 6c 75 72 65 22 3b 20 20 20 20 20 62 72 65 61  ilure";     brea
3e40: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3e50: 54 45 5f 45 4d 50 54 59 3a 20 20 20 20 20 20 7a  TE_EMPTY:      z
3e60: 20 3d 20 22 74 61 62 6c 65 20 63 6f 6e 74 61 69   = "table contai
3e70: 6e 73 20 6e 6f 20 64 61 74 61 22 3b 20 20 20 20  ns no data";    
3e80: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3e90: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3ea0: 54 45 5f 53 43 48 45 4d 41 3a 20 20 20 20 20 7a  TE_SCHEMA:     z
3eb0: 20 3d 20 22 64 61 74 61 62 61 73 65 20 73 63 68   = "database sch
3ec0: 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 22  ema has changed"
3ed0: 3b 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ;           brea
3ee0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3ef0: 54 45 5f 54 4f 4f 42 49 47 3a 20 20 20 20 20 7a  TE_TOOBIG:     z
3f00: 20 3d 20 22 74 6f 6f 20 6d 75 63 68 20 64 61 74   = "too much dat
3f10: 61 20 66 6f 72 20 6f 6e 65 20 74 61 62 6c 65 20  a for one table 
3f20: 72 6f 77 22 3b 20 20 20 20 20 20 20 62 72 65 61  row";       brea
3f30: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3f40: 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 3a 20 7a  TE_CONSTRAINT: z
3f50: 20 3d 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 66   = "constraint f
3f60: 61 69 6c 65 64 22 3b 20 20 20 20 20 20 20 20 20  ailed";         
3f70: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3f80: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3f90: 54 45 5f 4d 49 53 4d 41 54 43 48 3a 20 20 20 7a  TE_MISMATCH:   z
3fa0: 20 3d 20 22 64 61 74 61 74 79 70 65 20 6d 69 73   = "datatype mis
3fb0: 6d 61 74 63 68 22 3b 20 20 20 20 20 20 20 20 20  match";         
3fc0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3fd0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
3fe0: 54 45 5f 4d 49 53 55 53 45 3a 20 20 20 20 20 7a  TE_MISUSE:     z
3ff0: 20 3d 20 22 6c 69 62 72 61 72 79 20 72 6f 75 74   = "library rout
4000: 69 6e 65 20 63 61 6c 6c 65 64 20 6f 75 74 20 6f  ine called out o
4010: 66 20 73 65 71 75 65 6e 63 65 22 3b 62 72 65 61  f sequence";brea
4020: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
4030: 54 45 5f 4e 4f 4c 46 53 3a 20 20 20 20 20 20 7a  TE_NOLFS:      z
4040: 20 3d 20 22 6b 65 72 6e 65 6c 20 6c 61 63 6b 73   = "kernel lacks
4050: 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70 70   large file supp
4060: 6f 72 74 22 3b 20 20 20 20 20 20 20 62 72 65 61  ort";       brea
4070: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
4080: 54 45 5f 41 55 54 48 3a 20 20 20 20 20 20 20 7a  TE_AUTH:       z
4090: 20 3d 20 22 61 75 74 68 6f 72 69 7a 61 74 69 6f   = "authorizatio
40a0: 6e 20 64 65 6e 69 65 64 22 3b 20 20 20 20 20 20  n denied";      
40b0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
40c0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
40d0: 54 45 5f 46 4f 52 4d 41 54 3a 20 20 20 20 20 7a  TE_FORMAT:     z
40e0: 20 3d 20 22 61 75 78 69 6c 69 61 72 79 20 64 61   = "auxiliary da
40f0: 74 61 62 61 73 65 20 66 6f 72 6d 61 74 20 65 72  tabase format er
4100: 72 6f 72 22 3b 20 20 20 20 20 20 20 62 72 65 61  ror";       brea
4110: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
4120: 54 45 5f 52 41 4e 47 45 3a 20 20 20 20 20 20 7a  TE_RANGE:      z
4130: 20 3d 20 22 62 69 6e 64 20 69 6e 64 65 78 20 6f   = "bind index o
4140: 75 74 20 6f 66 20 72 61 6e 67 65 22 3b 20 20 20  ut of range";   
4150: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
4160: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
4170: 54 45 5f 4e 4f 54 41 44 42 3a 20 20 20 20 20 7a  TE_NOTADB:     z
4180: 20 3d 20 22 66 69 6c 65 20 69 73 20 65 6e 63 72   = "file is encr
4190: 79 70 74 65 64 20 6f 72 20 69 73 20 6e 6f 74 20  ypted or is not 
41a0: 61 20 64 61 74 61 62 61 73 65 22 3b 62 72 65 61  a database";brea
41b0: 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20  k;.    default: 
41c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a                 z
41d0: 20 3d 20 22 75 6e 6b 6e 6f 77 6e 20 65 72 72 6f   = "unknown erro
41e0: 72 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r";             
41f0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
4200: 6b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  k;.  }.  return 
4210: 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  z;.}../*.** This
4220: 20 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65   routine impleme
4230: 6e 74 73 20 61 20 62 75 73 79 20 63 61 6c 6c 62  nts a busy callb
4240: 61 63 6b 20 74 68 61 74 20 73 6c 65 65 70 73 20  ack that sleeps 
4250: 61 6e 64 20 74 72 69 65 73 0a 2a 2a 20 61 67 61  and tries.** aga
4260: 69 6e 20 75 6e 74 69 6c 20 61 20 74 69 6d 65 6f  in until a timeo
4270: 75 74 20 76 61 6c 75 65 20 69 73 20 72 65 61 63  ut value is reac
4280: 68 65 64 2e 20 20 54 68 65 20 74 69 6d 65 6f 75  hed.  The timeou
4290: 74 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 61 6e  t value is.** an
42a0: 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 20   integer number 
42b0: 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20  of milliseconds 
42c0: 70 61 73 73 65 64 20 69 6e 20 61 73 20 74 68 65  passed in as the
42d0: 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
42e0: 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  nt..*/.static in
42f0: 74 20 73 71 6c 69 74 65 44 65 66 61 75 6c 74 42  t sqliteDefaultB
4300: 75 73 79 43 61 6c 6c 62 61 63 6b 28 0a 20 76 6f  usyCallback(. vo
4310: 69 64 20 2a 54 69 6d 65 6f 75 74 2c 20 20 20 20  id *Timeout,    
4320: 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
4330: 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65  m amount of time
4340: 20 74 6f 20 77 61 69 74 20 2a 2f 0a 20 63 6f 6e   to wait */. con
4350: 73 74 20 63 68 61 72 20 2a 4e 6f 74 55 73 65 64  st char *NotUsed
4360: 2c 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d  ,     /* The nam
4370: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
4380: 68 61 74 20 69 73 20 62 75 73 79 20 2a 2f 0a 20  hat is busy */. 
4390: 69 6e 74 20 63 6f 75 6e 74 20 20 20 20 20 20 20  int count       
43a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
43b0: 65 72 20 6f 66 20 74 69 6d 65 73 20 74 61 62 6c  er of times tabl
43c0: 65 20 68 61 73 20 62 65 65 6e 20 62 75 73 79 20  e has been busy 
43d0: 2a 2f 0a 29 7b 0a 23 69 66 20 53 51 4c 49 54 45  */.){.#if SQLITE
43e0: 5f 4d 49 4e 5f 53 4c 45 45 50 5f 4d 53 3d 3d 31  _MIN_SLEEP_MS==1
43f0: 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
4400: 63 68 61 72 20 64 65 6c 61 79 73 5b 5d 20 3d 0a  char delays[] =.
4410: 20 20 20 20 20 7b 20 31 2c 20 32 2c 20 35 2c 20       { 1, 2, 5, 
4420: 31 30 2c 20 31 35 2c 20 32 30 2c 20 32 35 2c 20  10, 15, 20, 25, 
4430: 32 35 2c 20 20 32 35 2c 20 20 35 30 2c 20 20 35  25,  25,  50,  5
4440: 30 2c 20 20 35 30 2c 20 31 30 30 7d 3b 0a 20 20  0,  50, 100};.  
4450: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73 68 6f  static const sho
4460: 72 74 20 69 6e 74 20 74 6f 74 61 6c 73 5b 5d 20  rt int totals[] 
4470: 3d 0a 20 20 20 20 20 7b 20 30 2c 20 31 2c 20 33  =.     { 0, 1, 3
4480: 2c 20 20 38 2c 20 31 38 2c 20 33 33 2c 20 35 33  ,  8, 18, 33, 53
4490: 2c 20 37 38 2c 20 31 30 33 2c 20 31 32 38 2c 20  , 78, 103, 128, 
44a0: 31 37 38 2c 20 32 32 38 2c 20 32 38 37 7d 3b 0a  178, 228, 287};.
44b0: 23 20 64 65 66 69 6e 65 20 4e 44 45 4c 41 59 20  # define NDELAY 
44c0: 28 73 69 7a 65 6f 66 28 64 65 6c 61 79 73 29 2f  (sizeof(delays)/
44d0: 73 69 7a 65 6f 66 28 64 65 6c 61 79 73 5b 30 5d  sizeof(delays[0]
44e0: 29 29 0a 20 20 69 6e 74 20 74 69 6d 65 6f 75 74  )).  int timeout
44f0: 20 3d 20 28 69 6e 74 29 54 69 6d 65 6f 75 74 3b   = (int)Timeout;
4500: 0a 20 20 69 6e 74 20 64 65 6c 61 79 2c 20 70 72  .  int delay, pr
4510: 69 6f 72 3b 0a 0a 20 20 69 66 28 20 63 6f 75 6e  ior;..  if( coun
4520: 74 20 3c 3d 20 4e 44 45 4c 41 59 20 29 7b 0a 20  t <= NDELAY ){. 
4530: 20 20 20 64 65 6c 61 79 20 3d 20 64 65 6c 61 79     delay = delay
4540: 73 5b 63 6f 75 6e 74 2d 31 5d 3b 0a 20 20 20 20  s[count-1];.    
4550: 70 72 69 6f 72 20 3d 20 74 6f 74 61 6c 73 5b 63  prior = totals[c
4560: 6f 75 6e 74 2d 31 5d 3b 0a 20 20 7d 65 6c 73 65  ount-1];.  }else
4570: 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20 64 65  {.    delay = de
4580: 6c 61 79 73 5b 4e 44 45 4c 41 59 2d 31 5d 3b 0a  lays[NDELAY-1];.
4590: 20 20 20 20 70 72 69 6f 72 20 3d 20 74 6f 74 61      prior = tota
45a0: 6c 73 5b 4e 44 45 4c 41 59 2d 31 5d 20 2b 20 64  ls[NDELAY-1] + d
45b0: 65 6c 61 79 2a 28 63 6f 75 6e 74 2d 4e 44 45 4c  elay*(count-NDEL
45c0: 41 59 2d 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28  AY-1);.  }.  if(
45d0: 20 70 72 69 6f 72 20 2b 20 64 65 6c 61 79 20 3e   prior + delay >
45e0: 20 74 69 6d 65 6f 75 74 20 29 7b 0a 20 20 20 20   timeout ){.    
45f0: 64 65 6c 61 79 20 3d 20 74 69 6d 65 6f 75 74 20  delay = timeout 
4600: 2d 20 70 72 69 6f 72 3b 0a 20 20 20 20 69 66 28  - prior;.    if(
4610: 20 64 65 6c 61 79 3c 3d 30 20 29 20 72 65 74 75   delay<=0 ) retu
4620: 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  rn 0;.  }.  sqli
4630: 74 65 33 4f 73 53 6c 65 65 70 28 64 65 6c 61 79  te3OsSleep(delay
4640: 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 23  );.  return 1;.#
4650: 65 6c 73 65 0a 20 20 69 6e 74 20 74 69 6d 65 6f  else.  int timeo
4660: 75 74 20 3d 20 28 69 6e 74 29 54 69 6d 65 6f 75  ut = (int)Timeou
4670: 74 3b 0a 20 20 69 66 28 20 28 63 6f 75 6e 74 2b  t;.  if( (count+
4680: 31 29 2a 31 30 30 30 20 3e 20 74 69 6d 65 6f 75  1)*1000 > timeou
4690: 74 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  t ){.    return 
46a0: 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  0;.  }.  sqlite3
46b0: 4f 73 53 6c 65 65 70 28 31 30 30 30 29 3b 0a 20  OsSleep(1000);. 
46c0: 20 72 65 74 75 72 6e 20 31 3b 0a 23 65 6e 64 69   return 1;.#endi
46d0: 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  f.}../*.** This 
46e0: 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68 65  routine sets the
46f0: 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 66   busy callback f
4700: 6f 72 20 61 6e 20 53 71 6c 69 74 65 20 64 61 74  or an Sqlite dat
4710: 61 62 61 73 65 20 74 6f 20 74 68 65 0a 2a 2a 20  abase to the.** 
4720: 67 69 76 65 6e 20 63 61 6c 6c 62 61 63 6b 20 66  given callback f
4730: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74 68 65  unction with the
4740: 20 67 69 76 65 6e 20 61 72 67 75 6d 65 6e 74 2e   given argument.
4750: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
4760: 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 0a 20  _busy_handler(. 
4770: 20 73 71 6c 69 74 65 20 2a 64 62 2c 0a 20 20 69   sqlite *db,.  i
4780: 6e 74 20 28 2a 78 42 75 73 79 29 28 76 6f 69 64  nt (*xBusy)(void
4790: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
47a0: 74 29 2c 0a 20 20 76 6f 69 64 20 2a 70 41 72 67  t),.  void *pArg
47b0: 0a 29 7b 0a 20 20 64 62 2d 3e 78 42 75 73 79 43  .){.  db->xBusyC
47c0: 61 6c 6c 62 61 63 6b 20 3d 20 78 42 75 73 79 3b  allback = xBusy;
47d0: 0a 20 20 64 62 2d 3e 70 42 75 73 79 41 72 67 20  .  db->pBusyArg 
47e0: 3d 20 70 41 72 67 3b 0a 7d 0a 0a 23 69 66 6e 64  = pArg;.}..#ifnd
47f0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
4800: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
4810: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  ./*.** This rout
4820: 69 6e 65 20 73 65 74 73 20 74 68 65 20 70 72 6f  ine sets the pro
4830: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 66  gress callback f
4840: 6f 72 20 61 6e 20 53 71 6c 69 74 65 20 64 61 74  or an Sqlite dat
4850: 61 62 61 73 65 20 74 6f 20 74 68 65 0a 2a 2a 20  abase to the.** 
4860: 67 69 76 65 6e 20 63 61 6c 6c 62 61 63 6b 20 66  given callback f
4870: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74 68 65  unction with the
4880: 20 67 69 76 65 6e 20 61 72 67 75 6d 65 6e 74 2e   given argument.
4890: 20 54 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   The progress ca
48a0: 6c 6c 62 61 63 6b 20 77 69 6c 6c 0a 2a 2a 20 62  llback will.** b
48b0: 65 20 69 6e 76 6f 6b 65 64 20 65 76 65 72 79 20  e invoked every 
48c0: 6e 4f 70 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f  nOps opcodes..*/
48d0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 70 72  .void sqlite3_pr
48e0: 6f 67 72 65 73 73 5f 68 61 6e 64 6c 65 72 28 0a  ogress_handler(.
48f0: 20 20 73 71 6c 69 74 65 20 2a 64 62 2c 20 0a 20    sqlite *db, . 
4900: 20 69 6e 74 20 6e 4f 70 73 2c 0a 20 20 69 6e 74   int nOps,.  int
4910: 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f   (*xProgress)(vo
4920: 69 64 2a 29 2c 20 0a 20 20 76 6f 69 64 20 2a 70  id*), .  void *p
4930: 41 72 67 0a 29 7b 0a 20 20 69 66 28 20 6e 4f 70  Arg.){.  if( nOp
4940: 73 3e 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78  s>0 ){.    db->x
4950: 50 72 6f 67 72 65 73 73 20 3d 20 78 50 72 6f 67  Progress = xProg
4960: 72 65 73 73 3b 0a 20 20 20 20 64 62 2d 3e 6e 50  ress;.    db->nP
4970: 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 6e 4f 70  rogressOps = nOp
4980: 73 3b 0a 20 20 20 20 64 62 2d 3e 70 50 72 6f 67  s;.    db->pProg
4990: 72 65 73 73 41 72 67 20 3d 20 70 41 72 67 3b 0a  ressArg = pArg;.
49a0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 64 62 2d    }else{.    db-
49b0: 3e 78 50 72 6f 67 72 65 73 73 20 3d 20 30 3b 0a  >xProgress = 0;.
49c0: 20 20 20 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73      db->nProgres
49d0: 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20 64 62  sOps = 0;.    db
49e0: 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 20 3d  ->pProgressArg =
49f0: 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66   0;.  }.}.#endif
4a00: 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  .../*.** This ro
4a10: 75 74 69 6e 65 20 69 6e 73 74 61 6c 6c 73 20 61  utine installs a
4a20: 20 64 65 66 61 75 6c 74 20 62 75 73 79 20 68 61   default busy ha
4a30: 6e 64 6c 65 72 20 74 68 61 74 20 77 61 69 74 73  ndler that waits
4a40: 20 66 6f 72 20 74 68 65 0a 2a 2a 20 73 70 65 63   for the.** spec
4a50: 69 66 69 65 64 20 6e 75 6d 62 65 72 20 6f 66 20  ified number of 
4a60: 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 62 65 66  milliseconds bef
4a70: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 30 2e  ore returning 0.
4a80: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
4a90: 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 73 71  _busy_timeout(sq
4aa0: 6c 69 74 65 20 2a 64 62 2c 20 69 6e 74 20 6d 73  lite *db, int ms
4ab0: 29 7b 0a 20 20 69 66 28 20 6d 73 3e 30 20 29 7b  ){.  if( ms>0 ){
4ac0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 75 73  .    sqlite3_bus
4ad0: 79 5f 68 61 6e 64 6c 65 72 28 64 62 2c 20 73 71  y_handler(db, sq
4ae0: 6c 69 74 65 44 65 66 61 75 6c 74 42 75 73 79 43  liteDefaultBusyC
4af0: 61 6c 6c 62 61 63 6b 2c 20 28 76 6f 69 64 2a 29  allback, (void*)
4b00: 6d 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ms);.  }else{.  
4b10: 20 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 68    sqlite3_busy_h
4b20: 61 6e 64 6c 65 72 28 64 62 2c 20 30 2c 20 30 29  andler(db, 0, 0)
4b30: 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43  ;.  }.}../*.** C
4b40: 61 75 73 65 20 61 6e 79 20 70 65 6e 64 69 6e 67  ause any pending
4b50: 20 6f 70 65 72 61 74 69 6f 6e 20 74 6f 20 73 74   operation to st
4b60: 6f 70 20 61 74 20 69 74 73 20 65 61 72 6c 69 65  op at its earlie
4b70: 73 74 20 6f 70 70 6f 72 74 75 6e 69 74 79 2e 0a  st opportunity..
4b80: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f  */.void sqlite3_
4b90: 69 6e 74 65 72 72 75 70 74 28 73 71 6c 69 74 65  interrupt(sqlite
4ba0: 20 2a 64 62 29 7b 0a 20 20 64 62 2d 3e 66 6c 61   *db){.  db->fla
4bb0: 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74  gs |= SQLITE_Int
4bc0: 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  errupt;.}../*.**
4bd0: 20 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d 73   Windows systems
4be0: 20 73 68 6f 75 6c 64 20 63 61 6c 6c 20 74 68 69   should call thi
4bf0: 73 20 72 6f 75 74 69 6e 65 20 74 6f 20 66 72 65  s routine to fre
4c00: 65 20 6d 65 6d 6f 72 79 20 74 68 61 74 0a 2a 2a  e memory that.**
4c10: 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 6e 20   is returned in 
4c20: 74 68 65 20 69 6e 20 74 68 65 20 65 72 72 6d 73  the in the errms
4c30: 67 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73  g parameter of s
4c40: 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29 20 77 68  qlite3_open() wh
4c50: 65 6e 0a 2a 2a 20 53 51 4c 69 74 65 20 69 73 20  en.** SQLite is 
4c60: 61 20 44 4c 4c 2e 20 20 46 6f 72 20 73 6f 6d 65  a DLL.  For some
4c70: 20 72 65 61 73 6f 6e 2c 20 69 74 20 64 6f 65 73   reason, it does
4c80: 20 6e 6f 74 20 77 6f 72 6b 20 74 6f 20 63 61 6c   not work to cal
4c90: 6c 20 66 72 65 65 28 29 0a 2a 2a 20 64 69 72 65  l free().** dire
4ca0: 63 74 6c 79 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  ctly..**.** Note
4cb0: 20 74 68 61 74 20 77 65 20 6e 65 65 64 20 74 6f   that we need to
4cc0: 20 63 61 6c 6c 20 66 72 65 65 28 29 20 6e 6f 74   call free() not
4cd0: 20 73 71 6c 69 74 65 46 72 65 65 28 29 20 68 65   sqliteFree() he
4ce0: 72 65 2c 20 73 69 6e 63 65 20 65 76 65 72 79 0a  re, since every.
4cf0: 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20 69  ** string that i
4d00: 73 20 65 78 70 6f 72 74 65 64 20 66 72 6f 6d 20  s exported from 
4d10: 53 51 4c 69 74 65 20 73 68 6f 75 6c 64 20 68 61  SQLite should ha
4d20: 76 65 20 61 6c 72 65 61 64 79 20 70 61 73 73 65  ve already passe
4d30: 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 73 71 6c  d through.** sql
4d40: 69 74 65 33 53 74 72 52 65 61 6c 6c 6f 63 28 29  ite3StrRealloc()
4d50: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
4d60: 33 5f 66 72 65 65 6d 65 6d 28 76 6f 69 64 20 2a  3_freemem(void *
4d70: 70 29 7b 20 66 72 65 65 28 70 29 3b 20 7d 0a 0a  p){ free(p); }..
4d80: 2f 2a 0a 2a 2a 20 57 69 6e 64 6f 77 73 20 73 79  /*.** Windows sy
4d90: 73 74 65 6d 73 20 6e 65 65 64 20 66 75 6e 63 74  stems need funct
4da0: 69 6f 6e 73 20 74 6f 20 63 61 6c 6c 20 74 6f 20  ions to call to 
4db0: 72 65 74 75 72 6e 20 74 68 65 20 73 71 6c 69 74  return the sqlit
4dc0: 65 33 5f 76 65 72 73 69 6f 6e 0a 2a 2a 20 61 6e  e3_version.** an
4dd0: 64 20 73 71 6c 69 74 65 33 5f 65 6e 63 6f 64 69  d sqlite3_encodi
4de0: 6e 67 20 73 74 72 69 6e 67 73 20 73 69 6e 63 65  ng strings since
4df0: 20 74 68 65 79 20 61 72 65 20 75 6e 61 62 6c 65   they are unable
4e00: 20 74 6f 20 61 63 63 65 73 73 20 63 6f 6e 73 74   to access const
4e10: 61 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 44  ants.** within D
4e20: 4c 4c 73 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68  LLs..*/.const ch
4e30: 61 72 20 2a 73 71 6c 69 74 65 33 5f 6c 69 62 76  ar *sqlite3_libv
4e40: 65 72 73 69 6f 6e 28 76 6f 69 64 29 7b 20 72 65  ersion(void){ re
4e50: 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 76 65 72  turn sqlite3_ver
4e60: 73 69 6f 6e 3b 20 7d 0a 63 6f 6e 73 74 20 63 68  sion; }.const ch
4e70: 61 72 20 2a 73 71 6c 69 74 65 33 5f 6c 69 62 65  ar *sqlite3_libe
4e80: 6e 63 6f 64 69 6e 67 28 76 6f 69 64 29 7b 20 72  ncoding(void){ r
4e90: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 65 6e  eturn sqlite3_en
4ea0: 63 6f 64 69 6e 67 3b 20 7d 0a 0a 69 6e 74 20 73  coding; }..int s
4eb0: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
4ec0: 6e 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65  nction(.  sqlite
4ed0: 33 20 2a 64 62 2c 0a 20 20 63 6f 6e 73 74 20 63  3 *db,.  const c
4ee0: 68 61 72 20 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61  har *zFunctionNa
4ef0: 6d 65 2c 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a  me,.  int nArg,.
4f00: 20 20 69 6e 74 20 65 54 65 78 74 52 65 70 2c 0a    int eTextRep,.
4f10: 20 20 69 6e 74 20 69 43 6f 6c 6c 61 74 65 41 72    int iCollateAr
4f20: 67 2c 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  g,.  void *pUser
4f30: 44 61 74 61 2c 0a 20 20 76 6f 69 64 20 28 2a 78  Data,.  void (*x
4f40: 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f  Func)(sqlite3_co
4f50: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
4f60: 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20  e3_value **),.  
4f70: 76 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73 71  void (*xStep)(sq
4f80: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
4f90: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
4fa0: 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78   **),.  void (*x
4fb0: 46 69 6e 61 6c 29 28 73 71 6c 69 74 65 33 5f 63  Final)(sqlite3_c
4fc0: 6f 6e 74 65 78 74 2a 29 0a 29 7b 0a 20 20 46 75  ontext*).){.  Fu
4fd0: 6e 63 44 65 66 20 2a 70 3b 0a 20 20 69 6e 74 20  ncDef *p;.  int 
4fe0: 6e 4e 61 6d 65 3b 0a 0a 20 20 69 66 28 20 28 64  nName;..  if( (d
4ff0: 62 3d 3d 30 20 7c 7c 20 7a 46 75 6e 63 74 69 6f  b==0 || zFunctio
5000: 6e 4e 61 6d 65 3d 3d 30 20 7c 7c 20 73 71 6c 69  nName==0 || sqli
5010: 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 64  te3SafetyCheck(d
5020: 62 29 29 20 7c 7c 0a 20 20 20 20 20 20 28 78 46  b)) ||.      (xF
5030: 75 6e 63 20 26 26 20 28 78 46 69 6e 61 6c 20 7c  unc && (xFinal |
5040: 7c 20 78 53 74 65 70 29 29 20 7c 7c 20 0a 20 20  | xStep)) || .  
5050: 20 20 20 20 28 21 78 46 75 6e 63 20 26 26 20 28      (!xFunc && (
5060: 78 46 69 6e 61 6c 20 26 26 20 21 78 53 74 65 70  xFinal && !xStep
5070: 29 29 20 7c 7c 0a 20 20 20 20 20 20 28 21 78 46  )) ||.      (!xF
5080: 75 6e 63 20 26 26 20 28 21 78 46 69 6e 61 6c 20  unc && (!xFinal 
5090: 26 26 20 78 53 74 65 70 29 29 20 7c 7c 0a 20 20  && xStep)) ||.  
50a0: 20 20 20 20 28 6e 41 72 67 3c 2d 31 20 7c 7c 20      (nArg<-1 || 
50b0: 6e 41 72 67 3e 31 32 37 29 20 7c 7c 0a 20 20 20  nArg>127) ||.   
50c0: 20 20 20 28 32 35 35 3c 28 6e 4e 61 6d 65 20 3d     (255<(nName =
50d0: 20 73 74 72 6c 65 6e 28 7a 46 75 6e 63 74 69 6f   strlen(zFunctio
50e0: 6e 4e 61 6d 65 29 29 29 20 29 7b 0a 20 20 20 20  nName))) ){.    
50f0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
5100: 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 70 20 3d 20  ROR;.  }..  p = 
5110: 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74  sqlite3FindFunct
5120: 69 6f 6e 28 64 62 2c 20 7a 46 75 6e 63 74 69 6f  ion(db, zFunctio
5130: 6e 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2c 20 6e 41  nName, nName, nA
5140: 72 67 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 3d  rg, 1);.  if( p=
5150: 3d 30 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20  =0 ) return 1;. 
5160: 20 70 2d 3e 78 46 75 6e 63 20 3d 20 78 46 75 6e   p->xFunc = xFun
5170: 63 3b 0a 20 20 70 2d 3e 78 53 74 65 70 20 3d 20  c;.  p->xStep = 
5180: 78 53 74 65 70 3b 0a 20 20 70 2d 3e 78 46 69 6e  xStep;.  p->xFin
5190: 61 6c 69 7a 65 20 3d 20 78 46 69 6e 61 6c 3b 0a  alize = xFinal;.
51a0: 20 20 70 2d 3e 70 55 73 65 72 44 61 74 61 20 3d    p->pUserData =
51b0: 20 70 55 73 65 72 44 61 74 61 3b 0a 20 20 72 65   pUserData;.  re
51c0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
51d0: 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 72  }.int sqlite3_cr
51e0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 31 36 28  eate_function16(
51f0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a  .  sqlite3 *db,.
5200: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 46    const void *zF
5210: 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 0a 20 20 69  unctionName,.  i
5220: 6e 74 20 6e 41 72 67 2c 0a 20 20 69 6e 74 20 65  nt nArg,.  int e
5230: 54 65 78 74 52 65 70 2c 0a 20 20 69 6e 74 20 69  TextRep,.  int i
5240: 43 6f 6c 6c 61 74 65 41 72 67 2c 0a 20 20 76 6f  CollateArg,.  vo
5250: 69 64 20 2a 70 55 73 65 72 44 61 74 61 2c 0a 20  id *pUserData,. 
5260: 20 76 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73   void (*xFunc)(s
5270: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
5280: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
5290: 65 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78  e**),.  void (*x
52a0: 53 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f  Step)(sqlite3_co
52b0: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
52c0: 65 33 5f 76 61 6c 75 65 2a 2a 29 2c 0a 20 20 76  e3_value**),.  v
52d0: 6f 69 64 20 28 2a 78 46 69 6e 61 6c 29 28 73 71  oid (*xFinal)(sq
52e0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 0a  lite3_context*).
52f0: 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63  ){.  int rc;.  c
5300: 68 61 72 20 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61  har *zFunctionNa
5310: 6d 65 38 3b 0a 20 20 7a 46 75 6e 63 74 69 6f 6e  me8;.  zFunction
5320: 4e 61 6d 65 38 20 3d 20 73 71 6c 69 74 65 33 75  Name8 = sqlite3u
5330: 74 66 31 36 74 6f 38 28 7a 46 75 6e 63 74 69 6f  tf16to8(zFunctio
5340: 6e 4e 61 6d 65 2c 20 2d 31 2c 20 53 51 4c 49 54  nName, -1, SQLIT
5350: 45 33 5f 42 49 47 45 4e 44 49 41 4e 29 3b 0a 20  E3_BIGENDIAN);. 
5360: 20 69 66 28 20 21 7a 46 75 6e 63 74 69 6f 6e 4e   if( !zFunctionN
5370: 61 6d 65 38 20 29 7b 0a 20 20 20 20 72 65 74 75  ame8 ){.    retu
5380: 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b  rn SQLITE_NOMEM;
5390: 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
53a0: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
53b0: 69 6f 6e 28 64 62 2c 20 7a 46 75 6e 63 74 69 6f  ion(db, zFunctio
53c0: 6e 4e 61 6d 65 38 2c 20 6e 41 72 67 2c 20 65 54  nName8, nArg, eT
53d0: 65 78 74 52 65 70 2c 20 0a 20 20 20 20 20 20 69  extRep, .      i
53e0: 43 6f 6c 6c 61 74 65 41 72 67 2c 20 70 55 73 65  CollateArg, pUse
53f0: 72 44 61 74 61 2c 20 78 46 75 6e 63 2c 20 78 53  rData, xFunc, xS
5400: 74 65 70 2c 20 78 46 69 6e 61 6c 29 3b 0a 20 20  tep, xFinal);.  
5410: 73 71 6c 69 74 65 46 72 65 65 28 7a 46 75 6e 63  sqliteFree(zFunc
5420: 74 69 6f 6e 4e 61 6d 65 38 29 3b 0a 20 20 72 65  tionName8);.  re
5430: 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a  turn rc;.}../*.*
5440: 2a 20 52 65 67 69 73 74 65 72 20 61 20 74 72 61  * Register a tra
5450: 63 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  ce function.  Th
5460: 65 20 70 41 72 67 20 66 72 6f 6d 20 74 68 65 20  e pArg from the 
5470: 70 72 65 76 69 6f 75 73 6c 79 20 72 65 67 69 73  previously regis
5480: 74 65 72 65 64 20 74 72 61 63 65 0a 2a 2a 20 69  tered trace.** i
5490: 73 20 72 65 74 75 72 6e 65 64 2e 20 20 0a 2a 2a  s returned.  .**
54a0: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 74 72 61 63 65  .** A NULL trace
54b0: 20 66 75 6e 63 74 69 6f 6e 20 6d 65 61 6e 73 20   function means 
54c0: 74 68 61 74 20 6e 6f 20 74 72 61 63 69 6e 67 20  that no tracing 
54d0: 69 73 20 65 78 65 63 75 74 65 73 2e 20 20 41 20  is executes.  A 
54e0: 6e 6f 6e 2d 4e 55 4c 4c 0a 2a 2a 20 74 72 61 63  non-NULL.** trac
54f0: 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  e is a pointer t
5500: 6f 20 61 20 66 75 6e 63 74 69 6f 6e 20 74 68 61  o a function tha
5510: 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 74 20  t is invoked at 
5520: 74 68 65 20 73 74 61 72 74 20 6f 66 20 65 61 63  the start of eac
5530: 68 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 65 78 65  h.** sqlite3_exe
5540: 63 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71  c()..*/.void *sq
5550: 6c 69 74 65 33 5f 74 72 61 63 65 28 73 71 6c 69  lite3_trace(sqli
5560: 74 65 20 2a 64 62 2c 20 76 6f 69 64 20 28 2a 78  te *db, void (*x
5570: 54 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  Trace)(void*,con
5580: 73 74 20 63 68 61 72 2a 29 2c 20 76 6f 69 64 20  st char*), void 
5590: 2a 70 41 72 67 29 7b 0a 20 20 76 6f 69 64 20 2a  *pArg){.  void *
55a0: 70 4f 6c 64 20 3d 20 64 62 2d 3e 70 54 72 61 63  pOld = db->pTrac
55b0: 65 41 72 67 3b 0a 20 20 64 62 2d 3e 78 54 72 61  eArg;.  db->xTra
55c0: 63 65 20 3d 20 78 54 72 61 63 65 3b 0a 20 20 64  ce = xTrace;.  d
55d0: 62 2d 3e 70 54 72 61 63 65 41 72 67 20 3d 20 70  b->pTraceArg = p
55e0: 41 72 67 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f  Arg;.  return pO
55f0: 6c 64 3b 0a 7d 0a 0a 2f 2a 2a 2a 20 45 58 50 45  ld;.}../*** EXPE
5600: 52 49 4d 45 4e 54 41 4c 20 2a 2a 2a 0a 2a 2a 0a  RIMENTAL ***.**.
5610: 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 66 75  ** Register a fu
5620: 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 69 6e 76  nction to be inv
5630: 6f 6b 65 64 20 77 68 65 6e 20 61 20 74 72 61 6e  oked when a tran
5640: 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74 73  saction comments
5650: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 66  ..** If either f
5660: 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
5670: 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
5680: 68 65 20 63 6f 6d 6d 69 74 20 62 65 63 6f 6d 65  he commit become
5690: 73 20 61 0a 2a 2a 20 72 6f 6c 6c 62 61 63 6b 2e  s a.** rollback.
56a0: 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
56b0: 33 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 0a 20  3_commit_hook(. 
56c0: 20 73 71 6c 69 74 65 20 2a 64 62 2c 20 20 20 20   sqlite *db,    
56d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 74             /* At
56e0: 74 61 63 68 20 74 68 65 20 68 6f 6f 6b 20 74 6f  tach the hook to
56f0: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
5700: 2f 0a 20 20 69 6e 74 20 28 2a 78 43 61 6c 6c 62  /.  int (*xCallb
5710: 61 63 6b 29 28 76 6f 69 64 2a 29 2c 20 20 2f 2a  ack)(void*),  /*
5720: 20 46 75 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 76   Function to inv
5730: 6f 6b 65 20 6f 6e 20 65 61 63 68 20 63 6f 6d 6d  oke on each comm
5740: 69 74 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  it */.  void *pA
5750: 72 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20  rg              
5760: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
5770: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f   the function */
5780: 0a 29 7b 0a 20 20 76 6f 69 64 20 2a 70 4f 6c 64  .){.  void *pOld
5790: 20 3d 20 64 62 2d 3e 70 43 6f 6d 6d 69 74 41 72   = db->pCommitAr
57a0: 67 3b 0a 20 20 64 62 2d 3e 78 43 6f 6d 6d 69 74  g;.  db->xCommit
57b0: 43 61 6c 6c 62 61 63 6b 20 3d 20 78 43 61 6c 6c  Callback = xCall
57c0: 62 61 63 6b 3b 0a 20 20 64 62 2d 3e 70 43 6f 6d  back;.  db->pCom
57d0: 6d 69 74 41 72 67 20 3d 20 70 41 72 67 3b 0a 20  mitArg = pArg;. 
57e0: 20 72 65 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d 0a   return pOld;.}.
57f0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ../*.** This rou
5800: 74 69 6e 65 20 69 73 20 63 61 6c 6c 65 64 20 74  tine is called t
5810: 6f 20 63 72 65 61 74 65 20 61 20 63 6f 6e 6e 65  o create a conne
5820: 63 74 69 6f 6e 20 74 6f 20 61 20 64 61 74 61 62  ction to a datab
5830: 61 73 65 20 42 54 72 65 65 0a 2a 2a 20 64 72 69  ase BTree.** dri
5840: 76 65 72 2e 20 20 49 66 20 7a 46 69 6c 65 6e 61  ver.  If zFilena
5850: 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  me is the name o
5860: 66 20 61 20 66 69 6c 65 2c 20 74 68 65 6e 20 74  f a file, then t
5870: 68 61 74 20 66 69 6c 65 20 69 73 0a 2a 2a 20 6f  hat file is.** o
5880: 70 65 6e 65 64 20 61 6e 64 20 75 73 65 64 2e 20  pened and used. 
5890: 20 49 66 20 7a 46 69 6c 65 6e 61 6d 65 20 69 73   If zFilename is
58a0: 20 74 68 65 20 6d 61 67 69 63 20 6e 61 6d 65 20   the magic name 
58b0: 22 3a 6d 65 6d 6f 72 79 3a 22 20 74 68 65 6e 0a  ":memory:" then.
58c0: 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ** the database 
58d0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 6d 65 6d  is stored in mem
58e0: 6f 72 79 20 28 61 6e 64 20 69 73 20 74 68 75 73  ory (and is thus
58f0: 20 66 6f 72 67 6f 74 74 65 6e 20 61 73 20 73 6f   forgotten as so
5900: 6f 6e 20 61 73 0a 2a 2a 20 74 68 65 20 63 6f 6e  on as.** the con
5910: 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c 6f 73 65  nection is close
5920: 64 2e 29 20 20 49 66 20 7a 46 69 6c 65 6e 61 6d  d.)  If zFilenam
5930: 65 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  e is NULL then t
5940: 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 69  he database.** i
5950: 73 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  s for temporary 
5960: 75 73 65 20 6f 6e 6c 79 20 61 6e 64 20 69 73 20  use only and is 
5970: 64 65 6c 65 74 65 64 20 61 73 20 73 6f 6f 6e 20  deleted as soon 
5980: 61 73 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  as the connectio
5990: 6e 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 2e 0a  n.** is closed..
59a0: 2a 2a 0a 2a 2a 20 41 20 74 65 6d 70 6f 72 61 72  **.** A temporar
59b0: 79 20 64 61 74 61 62 61 73 65 20 63 61 6e 20 62  y database can b
59c0: 65 20 65 69 74 68 65 72 20 61 20 64 69 73 6b 20  e either a disk 
59d0: 66 69 6c 65 20 28 74 68 61 74 20 69 73 20 61 75  file (that is au
59e0: 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 64  tomatically.** d
59f0: 65 6c 65 74 65 64 20 77 68 65 6e 20 74 68 65 20  eleted when the 
5a00: 66 69 6c 65 20 69 73 20 63 6c 6f 73 65 64 29 20  file is closed) 
5a10: 6f 72 20 61 20 73 65 74 20 6f 66 20 72 65 64 2d  or a set of red-
5a20: 62 6c 61 63 6b 20 74 72 65 65 73 20 68 65 6c 64  black trees held
5a30: 20 69 6e 20 6d 65 6d 6f 72 79 2c 0a 2a 2a 20 64   in memory,.** d
5a40: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20  epending on the 
5a50: 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 54 45  values of the TE
5a60: 4d 50 5f 53 54 4f 52 45 20 63 6f 6d 70 69 6c 65  MP_STORE compile
5a70: 2d 74 69 6d 65 20 6d 61 63 72 6f 20 61 6e 64 20  -time macro and 
5a80: 74 68 65 0a 2a 2a 20 64 62 2d 3e 74 65 6d 70 5f  the.** db->temp_
5a90: 73 74 6f 72 65 20 76 61 72 69 61 62 6c 65 2c 20  store variable, 
5aa0: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65  according to the
5ab0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 68 61 72 74   following chart
5ac0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 54 45  :.**.**       TE
5ad0: 4d 50 5f 53 54 4f 52 45 20 20 20 20 20 64 62 2d  MP_STORE     db-
5ae0: 3e 74 65 6d 70 5f 73 74 6f 72 65 20 20 20 20 20  >temp_store     
5af0: 4c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 65 6d 70  Location of temp
5b00: 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a  orary database.*
5b10: 2a 20 20 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d  *       --------
5b20: 2d 2d 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  --     ---------
5b30: 2d 2d 2d 2d 2d 20 20 20 20 20 2d 2d 2d 2d 2d 2d  -----     ------
5b40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5b50: 2d 2d 2d 2d 2d 2d 2d 2d 0a 2a 2a 20 20 20 20 20  --------.**     
5b60: 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20 20        0         
5b70: 20 20 20 20 20 20 61 6e 79 20 20 20 20 20 20 20        any       
5b80: 20 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20        file.**   
5b90: 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20          1       
5ba0: 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20           1      
5bb0: 20 20 20 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20          file.** 
5bc0: 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20            1     
5bd0: 20 20 20 20 20 20 20 20 20 20 20 32 20 20 20 20             2    
5be0: 20 20 20 20 20 20 20 20 20 20 6d 65 6d 6f 72 79            memory
5bf0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 31 20  .**           1 
5c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
5c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
5c20: 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  le.**           
5c30: 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2               
5c40: 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20   1              
5c50: 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  file.**         
5c60: 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20    2             
5c70: 20 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20     2            
5c80: 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20    memory.**     
5c90: 20 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20        2         
5ca0: 20 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20         0        
5cb0: 20 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20        memory.** 
5cc0: 20 20 20 20 20 20 20 20 20 20 33 20 20 20 20 20            3     
5cd0: 20 20 20 20 20 20 20 20 20 20 61 6e 79 20 20 20            any   
5ce0: 20 20 20 20 20 20 20 20 20 20 6d 65 6d 6f 72 79            memory
5cf0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  .*/.int sqlite3B
5d00: 74 72 65 65 46 61 63 74 6f 72 79 28 0a 20 20 63  treeFactory(.  c
5d10: 6f 6e 73 74 20 73 71 6c 69 74 65 20 2a 64 62 2c  onst sqlite *db,
5d20: 09 20 20 20 20 2f 2a 20 4d 61 69 6e 20 64 61 74  .    /* Main dat
5d30: 61 62 61 73 65 20 77 68 65 6e 20 6f 70 65 6e 69  abase when openi
5d40: 6e 67 20 61 75 78 20 6f 74 68 65 72 77 69 73 65  ng aux otherwise
5d50: 20 30 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68   0 */.  const ch
5d60: 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 20  ar *zFilename,  
5d70: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
5d80: 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67   file containing
5d90: 20 74 68 65 20 42 54 72 65 65 20 64 61 74 61 62   the BTree datab
5da0: 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 6d 69  ase */.  int omi
5db0: 74 4a 6f 75 72 6e 61 6c 2c 20 20 20 20 20 20 20  tJournal,       
5dc0: 20 20 20 2f 2a 20 69 66 20 54 52 55 45 20 74 68     /* if TRUE th
5dd0: 65 6e 20 64 6f 20 6e 6f 74 20 6a 6f 75 72 6e 61  en do not journa
5de0: 6c 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20  l this file */. 
5df0: 20 69 6e 74 20 6e 43 61 63 68 65 2c 20 20 20 20   int nCache,    
5e00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f             /* Ho
5e10: 77 20 6d 61 6e 79 20 70 61 67 65 73 20 69 6e 20  w many pages in 
5e20: 74 68 65 20 70 61 67 65 20 63 61 63 68 65 20 2a  the page cache *
5e30: 2f 0a 20 20 42 74 72 65 65 20 2a 2a 70 70 42 74  /.  Btree **ppBt
5e40: 72 65 65 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ree           /*
5e50: 20 50 6f 69 6e 74 65 72 20 74 6f 20 6e 65 77 20   Pointer to new 
5e60: 42 74 72 65 65 20 6f 62 6a 65 63 74 20 77 72 69  Btree object wri
5e70: 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 29 7b 0a  tten here */.){.
5e80: 20 20 69 6e 74 20 62 74 72 65 65 5f 66 6c 61 67    int btree_flag
5e90: 73 20 3d 20 30 3b 0a 20 20 0a 20 20 61 73 73 65  s = 0;.  .  asse
5ea0: 72 74 28 20 70 70 42 74 72 65 65 20 21 3d 20 30  rt( ppBtree != 0
5eb0: 29 3b 0a 20 20 69 66 28 20 6f 6d 69 74 4a 6f 75  );.  if( omitJou
5ec0: 72 6e 61 6c 20 29 7b 0a 20 20 20 20 62 74 72 65  rnal ){.    btre
5ed0: 65 5f 66 6c 61 67 73 20 7c 3d 20 42 54 52 45 45  e_flags |= BTREE
5ee0: 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 3b 0a 20  _OMIT_JOURNAL;. 
5ef0: 20 7d 0a 20 20 69 66 28 20 21 7a 46 69 6c 65 6e   }.  if( !zFilen
5f00: 61 6d 65 20 29 7b 0a 20 20 20 20 62 74 72 65 65  ame ){.    btree
5f10: 5f 66 6c 61 67 73 20 7c 3d 20 42 54 52 45 45 5f  _flags |= BTREE_
5f20: 4d 45 4d 4f 52 59 3b 0a 20 20 7d 0a 0a 20 20 72  MEMORY;.  }..  r
5f30: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 42 74 72  eturn sqlite3Btr
5f40: 65 65 4f 70 65 6e 28 7a 46 69 6c 65 6e 61 6d 65  eeOpen(zFilename
5f50: 2c 20 70 70 42 74 72 65 65 2c 20 6e 43 61 63 68  , ppBtree, nCach
5f60: 65 2c 20 62 74 72 65 65 5f 66 6c 61 67 73 29 3b  e, btree_flags);
5f70: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
5f80: 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 45   UTF-8 encoded E
5f90: 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20  nglish language 
5fa0: 65 78 70 6c 61 6e 61 74 69 6f 6e 20 6f 66 20 74  explanation of t
5fb0: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 0a 2a  he most recent.*
5fc0: 2a 20 65 72 72 6f 72 2e 0a 2a 2f 0a 63 6f 6e 73  * error..*/.cons
5fd0: 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f  t char *sqlite3_
5fe0: 65 72 72 6d 73 67 28 73 71 6c 69 74 65 33 20 2a  errmsg(sqlite3 *
5ff0: 64 62 29 7b 0a 20 20 69 66 28 20 21 64 62 20 29  db){.  if( !db )
6000: 7b 0a 20 20 20 20 2f 2a 20 49 66 20 64 62 20 69  {.    /* If db i
6010: 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 73 73  s NULL, then ass
6020: 75 6d 65 20 74 68 61 74 20 61 20 6d 61 6c 6c 6f  ume that a mallo
6030: 63 28 29 20 66 61 69 6c 65 64 20 64 75 72 69 6e  c() failed durin
6040: 67 20 61 6e 0a 20 20 20 20 2a 2a 20 73 71 6c 69  g an.    ** sqli
6050: 74 65 33 5f 6f 70 65 6e 28 29 20 63 61 6c 6c 2e  te3_open() call.
6060: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72 65 74 75  .    */.    retu
6070: 72 6e 20 73 71 6c 69 74 65 33 5f 65 72 72 6f 72  rn sqlite3_error
6080: 5f 73 74 72 69 6e 67 28 53 51 4c 49 54 45 5f 4e  _string(SQLITE_N
6090: 4f 4d 45 4d 29 3b 0a 20 20 7d 0a 20 20 69 66 28  OMEM);.  }.  if(
60a0: 20 64 62 2d 3e 7a 45 72 72 4d 73 67 20 29 7b 0a   db->zErrMsg ){.
60b0: 20 20 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 7a      return db->z
60c0: 45 72 72 4d 73 67 3b 0a 20 20 7d 0a 20 20 72 65  ErrMsg;.  }.  re
60d0: 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 65 72 72  turn sqlite3_err
60e0: 6f 72 5f 73 74 72 69 6e 67 28 64 62 2d 3e 65 72  or_string(db->er
60f0: 72 43 6f 64 65 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  rCode);.}../*.**
6100: 20 52 65 74 75 72 6e 20 55 54 46 2d 31 36 20 65   Return UTF-16 e
6110: 6e 63 6f 64 65 64 20 45 6e 67 6c 69 73 68 20 6c  ncoded English l
6120: 61 6e 67 75 61 67 65 20 65 78 70 6c 61 6e 61 74  anguage explanat
6130: 69 6f 6e 20 6f 66 20 74 68 65 20 6d 6f 73 74 20  ion of the most 
6140: 72 65 63 65 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e  recent.** error.
6150: 0a 2a 2f 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  .*/.const void *
6160: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36  sqlite3_errmsg16
6170: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
6180: 20 69 66 28 20 21 64 62 20 29 7b 0a 20 20 20 20   if( !db ){.    
6190: 2f 2a 20 49 66 20 64 62 20 69 73 20 4e 55 4c 4c  /* If db is NULL
61a0: 2c 20 74 68 65 6e 20 61 73 73 75 6d 65 20 74 68  , then assume th
61b0: 61 74 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61  at a malloc() fa
61c0: 69 6c 65 64 20 64 75 72 69 6e 67 20 61 6e 0a 20  iled during an. 
61d0: 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 6f 70     ** sqlite3_op
61e0: 65 6e 28 29 20 63 61 6c 6c 2e 20 57 65 20 68 61  en() call. We ha
61f0: 76 65 20 61 20 73 74 61 74 69 63 20 76 65 72 73  ve a static vers
6200: 69 6f 6e 20 6f 66 20 74 68 65 20 73 74 72 69 6e  ion of the strin
6210: 67 20 0a 20 20 20 20 2a 2a 20 22 6f 75 74 20 6f  g .    ** "out o
6220: 66 20 6d 65 6d 6f 72 79 22 20 65 6e 63 6f 64 65  f memory" encode
6230: 64 20 75 73 69 6e 67 20 55 54 46 2d 31 36 20 6a  d using UTF-16 j
6240: 75 73 74 20 66 6f 72 20 74 68 69 73 20 70 75 72  ust for this pur
6250: 70 6f 73 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  pose..    **.   
6260: 20 2a 2a 20 42 65 63 61 75 73 65 20 61 6c 6c 20   ** Because all 
6270: 74 68 65 20 63 68 61 72 61 63 74 65 72 73 20 69  the characters i
6280: 6e 20 74 68 65 20 73 74 72 69 6e 67 20 61 72 65  n the string are
6290: 20 69 6e 20 74 68 65 20 75 6e 69 63 6f 64 65 0a   in the unicode.
62a0: 20 20 20 20 2a 2a 20 72 61 6e 67 65 20 30 78 30      ** range 0x0
62b0: 30 2d 30 78 46 46 2c 20 69 66 20 77 65 20 70 61  0-0xFF, if we pa
62c0: 64 20 74 68 65 20 62 69 67 2d 65 6e 64 69 61 6e  d the big-endian
62d0: 20 73 74 72 69 6e 67 20 77 69 74 68 20 61 20 0a   string with a .
62e0: 20 20 20 20 2a 2a 20 7a 65 72 6f 20 62 79 74 65      ** zero byte
62f0: 2c 20 77 65 20 63 61 6e 20 6f 62 74 61 69 6e 20  , we can obtain 
6300: 74 68 65 20 6c 69 74 74 6c 65 2d 65 6e 64 69 61  the little-endia
6310: 6e 20 73 74 72 69 6e 67 20 77 69 74 68 0a 20 20  n string with.  
6320: 20 20 2a 2a 20 26 62 69 67 5f 65 6e 64 69 61 6e    ** &big_endian
6330: 5b 31 5d 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  [1]..    */.    
6340: 73 74 61 74 69 63 20 63 68 61 72 20 6f 75 74 4f  static char outO
6350: 66 4d 65 6d 42 65 5b 5d 20 3d 20 7b 0a 20 20 20  fMemBe[] = {.   
6360: 20 20 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27 75     0, 'o', 0, 'u
6370: 27 2c 20 30 2c 20 27 74 27 2c 20 30 2c 20 27 20  ', 0, 't', 0, ' 
6380: 27 2c 20 0a 20 20 20 20 20 20 30 2c 20 27 6f 27  ', .      0, 'o'
6390: 2c 20 30 2c 20 27 66 27 2c 20 30 2c 20 27 20 27  , 0, 'f', 0, ' '
63a0: 2c 20 0a 20 20 20 20 20 20 30 2c 20 27 6d 27 2c  , .      0, 'm',
63b0: 20 30 2c 20 27 65 27 2c 20 30 2c 20 27 6d 27 2c   0, 'e', 0, 'm',
63c0: 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27 72 27 2c   0, 'o', 0, 'r',
63d0: 20 30 2c 20 27 79 27 2c 20 30 2c 20 30 2c 20 30   0, 'y', 0, 0, 0
63e0: 0a 20 20 20 20 7d 3b 0a 20 20 20 20 73 74 61 74  .    };.    stat
63f0: 69 63 20 63 68 61 72 20 2a 6f 75 74 4f 66 4d 65  ic char *outOfMe
6400: 6d 4c 65 20 3d 20 26 6f 75 74 4f 66 4d 65 6d 42  mLe = &outOfMemB
6410: 65 5b 31 5d 3b 0a 0a 20 20 20 20 69 66 28 20 53  e[1];..    if( S
6420: 51 4c 49 54 45 33 5f 42 49 47 45 4e 44 49 41 4e  QLITE3_BIGENDIAN
6430: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
6440: 20 28 76 6f 69 64 20 2a 29 6f 75 74 4f 66 4d 65   (void *)outOfMe
6450: 6d 42 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  mBe;.    }else{.
6460: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 76 6f        return (vo
6470: 69 64 20 2a 29 6f 75 74 4f 66 4d 65 6d 4c 65 3b  id *)outOfMemLe;
6480: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
6490: 20 21 64 62 2d 3e 7a 45 72 72 4d 73 67 31 36 20   !db->zErrMsg16 
64a0: 29 7b 0a 20 20 20 20 63 68 61 72 20 63 6f 6e 73  ){.    char cons
64b0: 74 20 2a 7a 45 72 72 38 20 3d 20 73 71 6c 69 74  t *zErr8 = sqlit
64c0: 65 33 5f 65 72 72 6d 73 67 28 64 62 29 3b 0a 20  e3_errmsg(db);. 
64d0: 20 20 20 69 66 28 20 53 51 4c 49 54 45 33 5f 42     if( SQLITE3_B
64e0: 49 47 45 4e 44 49 41 4e 20 29 7b 0a 20 20 20 20  IGENDIAN ){.    
64f0: 20 20 64 62 2d 3e 7a 45 72 72 4d 73 67 31 36 20    db->zErrMsg16 
6500: 3d 20 73 71 6c 69 74 65 33 75 74 66 38 74 6f 31  = sqlite3utf8to1
6510: 36 62 65 28 7a 45 72 72 38 2c 20 2d 31 29 3b 0a  6be(zErr8, -1);.
6520: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
6530: 20 64 62 2d 3e 7a 45 72 72 4d 73 67 31 36 20 3d   db->zErrMsg16 =
6540: 20 73 71 6c 69 74 65 33 75 74 66 38 74 6f 31 36   sqlite3utf8to16
6550: 6c 65 28 7a 45 72 72 38 2c 20 2d 31 29 3b 0a 20  le(zErr8, -1);. 
6560: 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72     }.  }.  retur
6570: 6e 20 64 62 2d 3e 7a 45 72 72 4d 73 67 31 36 3b  n db->zErrMsg16;
6580: 0a 7d 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .}..int sqlite3_
6590: 65 72 72 63 6f 64 65 28 73 71 6c 69 74 65 33 20  errcode(sqlite3 
65a0: 2a 64 62 29 7b 0a 20 20 72 65 74 75 72 6e 20 64  *db){.  return d
65b0: 62 2d 3e 65 72 72 43 6f 64 65 3b 0a 7d 0a 0a 2f  b->errCode;.}../
65c0: 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20 74 68 65  *.** Compile the
65d0: 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 53   UTF-8 encoded S
65e0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 7a 53 71  QL statement zSq
65f0: 6c 20 69 6e 74 6f 20 61 20 73 74 61 74 65 6d 65  l into a stateme
6600: 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e  nt handle..*/.in
6610: 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  t sqlite3_prepar
6620: 65 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  e(.  sqlite3 *db
6630: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
6640: 2a 20 44 61 74 61 62 61 73 65 20 68 61 6e 64 6c  * Database handl
6650: 65 2e 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  e. */.  const ch
6660: 61 72 20 2a 7a 53 71 6c 2c 20 20 20 20 20 20 20  ar *zSql,       
6670: 20 20 2f 2a 20 55 54 46 2d 38 20 65 6e 63 6f 64    /* UTF-8 encod
6680: 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ed SQL statement
6690: 2e 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65  . */.  int nByte
66a0: 73 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s,              
66b0: 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 7a 53   /* Length of zS
66c0: 71 6c 20 69 6e 20 62 79 74 65 73 2e 20 2a 2f 0a  ql in bytes. */.
66d0: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
66e0: 2a 70 70 53 74 6d 74 2c 20 20 20 20 2f 2a 20 4f  *ppStmt,    /* O
66f0: 55 54 3a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  UT: A pointer to
6700: 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
6710: 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e  atement */.  con
6720: 73 74 20 63 68 61 72 2a 2a 20 70 7a 54 61 69 6c  st char** pzTail
6730: 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 45         /* OUT: E
6740: 6e 64 20 6f 66 20 70 61 72 73 65 64 20 73 74 72  nd of parsed str
6750: 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 50 61 72 73  ing */.){.  Pars
6760: 65 20 73 50 61 72 73 65 3b 0a 20 20 63 68 61 72  e sParse;.  char
6770: 20 2a 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20   *zErrMsg = 0;. 
6780: 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45   int rc = SQLITE
6790: 5f 4f 4b 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69  _OK;..  if( sqli
67a0: 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
67b0: 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
67c0: 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 20 20 67  TE_MISUSE;.    g
67d0: 6f 74 6f 20 70 72 65 70 61 72 65 5f 6f 75 74 3b  oto prepare_out;
67e0: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 21 64 62 2d  .  }..  if( !db-
67f0: 3e 69 6e 69 74 2e 62 75 73 79 20 29 7b 0a 20 20  >init.busy ){.  
6800: 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61 67 73    if( (db->flags
6810: 20 26 20 53 51 4c 49 54 45 5f 49 6e 69 74 69 61   & SQLITE_Initia
6820: 6c 69 7a 65 64 29 3d 3d 30 20 29 7b 0a 20 20 20  lized)==0 ){.   
6830: 20 20 20 69 6e 74 20 63 6e 74 20 3d 20 31 3b 0a     int cnt = 1;.
6840: 20 20 20 20 20 20 77 68 69 6c 65 28 20 28 72 63        while( (rc
6850: 20 3d 20 73 71 6c 69 74 65 33 49 6e 69 74 28 64   = sqlite3Init(d
6860: 62 2c 20 26 7a 45 72 72 4d 73 67 29 29 3d 3d 53  b, &zErrMsg))==S
6870: 51 4c 49 54 45 5f 42 55 53 59 0a 20 20 20 20 20  QLITE_BUSY.     
6880: 20 20 20 20 26 26 20 64 62 2d 3e 78 42 75 73 79      && db->xBusy
6890: 43 61 6c 6c 62 61 63 6b 0a 20 20 20 20 20 20 20  Callback.       
68a0: 20 20 26 26 20 64 62 2d 3e 78 42 75 73 79 43 61    && db->xBusyCa
68b0: 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 42 75 73 79  llback(db->pBusy
68c0: 41 72 67 2c 20 22 22 2c 20 63 6e 74 2b 2b 29 21  Arg, "", cnt++)!
68d0: 3d 30 20 29 7b 7d 0a 20 20 20 20 20 20 69 66 28  =0 ){}.      if(
68e0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
68f0: 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70  {.        goto p
6900: 72 65 70 61 72 65 5f 6f 75 74 3b 0a 20 20 20 20  repare_out;.    
6910: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 7a 45    }.      if( zE
6920: 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 20 20 20  rrMsg ){.       
6930: 20 73 71 6c 69 74 65 46 72 65 65 28 7a 45 72 72   sqliteFree(zErr
6940: 4d 73 67 29 3b 0a 20 20 20 20 20 20 20 20 7a 45  Msg);.        zE
6950: 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 20  rrMsg = 0;.     
6960: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61   }.    }.  }.  a
6970: 73 73 65 72 74 28 20 28 64 62 2d 3e 66 6c 61 67  ssert( (db->flag
6980: 73 20 26 20 53 51 4c 49 54 45 5f 49 6e 69 74 69  s & SQLITE_Initi
6990: 61 6c 69 7a 65 64 29 21 3d 30 20 7c 7c 20 64 62  alized)!=0 || db
69a0: 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29 3b 0a 0a  ->init.busy );..
69b0: 20 20 69 66 28 20 64 62 2d 3e 70 56 64 62 65 3d    if( db->pVdbe=
69c0: 3d 30 20 29 7b 20 64 62 2d 3e 6e 43 68 61 6e 67  =0 ){ db->nChang
69d0: 65 20 3d 20 30 3b 20 7d 0a 20 20 6d 65 6d 73 65  e = 0; }.  memse
69e0: 74 28 26 73 50 61 72 73 65 2c 20 30 2c 20 73 69  t(&sParse, 0, si
69f0: 7a 65 6f 66 28 73 50 61 72 73 65 29 29 3b 0a 20  zeof(sParse));. 
6a00: 20 73 50 61 72 73 65 2e 64 62 20 3d 20 64 62 3b   sParse.db = db;
6a10: 0a 20 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72  .  sqlite3RunPar
6a20: 73 65 72 28 26 73 50 61 72 73 65 2c 20 7a 53 71  ser(&sParse, zSq
6a30: 6c 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 0a 20  l, &zErrMsg);.. 
6a40: 20 69 66 28 20 64 62 2d 3e 78 54 72 61 63 65 20   if( db->xTrace 
6a50: 26 26 20 21 64 62 2d 3e 69 6e 69 74 2e 62 75 73  && !db->init.bus
6a60: 79 20 29 7b 0a 20 20 20 20 2f 2a 20 54 72 61 63  y ){.    /* Trac
6a70: 65 20 6f 6e 6c 79 20 74 68 65 20 73 74 61 74 6d  e only the statm
6a80: 65 6e 74 20 74 68 61 74 20 77 61 73 20 63 6f 6d  ent that was com
6a90: 70 69 6c 65 64 2e 0a 20 20 20 20 2a 2a 20 4d 61  piled..    ** Ma
6aa0: 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 74 68 61  ke a copy of tha
6ab0: 74 20 70 61 72 74 20 6f 66 20 74 68 65 20 53 51  t part of the SQ
6ac0: 4c 20 73 74 72 69 6e 67 20 73 69 6e 63 65 20 7a  L string since z
6ad0: 53 51 4c 20 69 73 20 63 6f 6e 73 74 0a 20 20 20  SQL is const.   
6ae0: 20 2a 2a 20 61 6e 64 20 77 65 20 6d 75 73 74 20   ** and we must 
6af0: 70 61 73 73 20 61 20 7a 65 72 6f 20 74 65 72 6d  pass a zero term
6b00: 69 6e 61 74 65 64 20 73 74 72 69 6e 67 20 74 6f  inated string to
6b10: 20 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74   the trace funct
6b20: 69 6f 6e 0a 20 20 20 20 2a 2a 20 54 68 65 20 63  ion.    ** The c
6b30: 6f 70 79 20 69 73 20 75 6e 6e 65 63 65 73 73 61  opy is unnecessa
6b40: 72 79 20 69 66 20 74 68 65 20 74 61 69 6c 20 70  ry if the tail p
6b50: 6f 69 6e 74 65 72 20 69 73 20 70 6f 69 6e 74 69  ointer is pointi
6b60: 6e 67 20 61 74 20 74 68 65 0a 20 20 20 20 2a 2a  ng at the.    **
6b70: 20 62 65 67 69 6e 6e 69 67 20 6f 72 20 65 6e 64   beginnig or end
6b80: 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74 72 69   of the SQL stri
6b90: 6e 67 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  ng..    */.    i
6ba0: 66 28 20 73 50 61 72 73 65 2e 7a 54 61 69 6c 20  f( sParse.zTail 
6bb0: 26 26 20 73 50 61 72 73 65 2e 7a 54 61 69 6c 21  && sParse.zTail!
6bc0: 3d 7a 53 71 6c 20 26 26 20 2a 73 50 61 72 73 65  =zSql && *sParse
6bd0: 2e 7a 54 61 69 6c 20 29 7b 0a 20 20 20 20 20 20  .zTail ){.      
6be0: 63 68 61 72 20 2a 74 6d 70 53 71 6c 20 3d 20 73  char *tmpSql = s
6bf0: 71 6c 69 74 65 53 74 72 4e 44 75 70 28 7a 53 71  qliteStrNDup(zSq
6c00: 6c 2c 20 73 50 61 72 73 65 2e 7a 54 61 69 6c 20  l, sParse.zTail 
6c10: 2d 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 69  - zSql);.      i
6c20: 66 28 20 74 6d 70 53 71 6c 20 29 7b 0a 20 20 20  f( tmpSql ){.   
6c30: 20 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28       db->xTrace(
6c40: 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 74  db->pTraceArg, t
6c50: 6d 70 53 71 6c 29 3b 0a 20 20 20 20 20 20 20 20  mpSql);.        
6c60: 66 72 65 65 28 74 6d 70 53 71 6c 29 3b 0a 20 20  free(tmpSql);.  
6c70: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
6c80: 20 20 20 2f 2a 20 49 66 20 61 20 6d 65 6d 6f 72     /* If a memor
6c90: 79 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64  y error occurred
6ca0: 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f 70 79   during the copy
6cb0: 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 72 61  ,.        ** tra
6cc0: 63 65 20 65 6e 74 69 72 65 20 53 51 4c 20 73 74  ce entire SQL st
6cd0: 72 69 6e 67 20 61 6e 64 20 66 61 6c 6c 20 74 68  ring and fall th
6ce0: 72 6f 75 67 68 20 74 6f 20 74 68 65 0a 20 20 20  rough to the.   
6cf0: 20 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f       ** sqlite3_
6d00: 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 74 65  malloc_failed te
6d10: 73 74 20 74 6f 20 72 65 70 6f 72 74 20 74 68 65  st to report the
6d20: 20 65 72 72 6f 72 2e 0a 20 20 20 20 20 20 20 20   error..        
6d30: 2a 2f 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 78  */.        db->x
6d40: 54 72 61 63 65 28 64 62 2d 3e 70 54 72 61 63 65  Trace(db->pTrace
6d50: 41 72 67 2c 20 7a 53 71 6c 29 3b 20 0a 20 20 20  Arg, zSql); .   
6d60: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
6d70: 20 20 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65        db->xTrace
6d80: 28 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20  (db->pTraceArg, 
6d90: 7a 53 71 6c 29 3b 20 0a 20 20 20 20 7d 0a 20 20  zSql); .    }.  
6da0: 7d 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  }..  if( sqlite3
6db0: 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 29  _malloc_failed )
6dc0: 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
6dd0: 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 73 71 6c  E_NOMEM;.    sql
6de0: 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
6df0: 64 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  db);.    sqlite3
6e00: 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68  ResetInternalSch
6e10: 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20 20 20 20  ema(db, 0);.    
6e20: 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 53 51  db->flags &= ~SQ
6e30: 4c 49 54 45 5f 49 6e 54 72 61 6e 73 3b 0a 20 20  LITE_InTrans;.  
6e40: 20 20 67 6f 74 6f 20 70 72 65 70 61 72 65 5f 6f    goto prepare_o
6e50: 75 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 50  ut;.  }.  if( sP
6e60: 61 72 73 65 2e 72 63 3d 3d 53 51 4c 49 54 45 5f  arse.rc==SQLITE_
6e70: 44 4f 4e 45 20 29 20 73 50 61 72 73 65 2e 72 63  DONE ) sParse.rc
6e80: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
6e90: 69 66 28 20 73 50 61 72 73 65 2e 72 63 3d 3d 53  if( sParse.rc==S
6ea0: 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 29 7b 0a  QLITE_SCHEMA ){.
6eb0: 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
6ec0: 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64  InternalSchema(d
6ed0: 62 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 61 73 73  b, 0);.  }.  ass
6ee0: 65 72 74 28 20 70 70 53 74 6d 74 20 29 3b 0a 20  ert( ppStmt );. 
6ef0: 20 2a 70 70 53 74 6d 74 20 3d 20 28 73 71 6c 69   *ppStmt = (sqli
6f00: 74 65 33 5f 73 74 6d 74 2a 29 73 50 61 72 73 65  te3_stmt*)sParse
6f10: 2e 70 56 64 62 65 3b 0a 20 20 69 66 28 20 70 7a  .pVdbe;.  if( pz
6f20: 54 61 69 6c 20 29 20 2a 70 7a 54 61 69 6c 20 3d  Tail ) *pzTail =
6f30: 20 73 50 61 72 73 65 2e 7a 54 61 69 6c 3b 0a 20   sParse.zTail;. 
6f40: 20 72 63 20 3d 20 73 50 61 72 73 65 2e 72 63 3b   rc = sParse.rc;
6f50: 0a 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ..  if( rc==SQLI
6f60: 54 45 5f 4f 4b 20 26 26 20 73 50 61 72 73 65 2e  TE_OK && sParse.
6f70: 70 56 64 62 65 20 26 26 20 73 50 61 72 73 65 2e  pVdbe && sParse.
6f80: 65 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 73  explain ){.    s
6f90: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
6fa0: 43 6f 6c 73 28 73 50 61 72 73 65 2e 70 56 64 62  Cols(sParse.pVdb
6fb0: 65 2c 20 35 29 3b 0a 20 20 20 20 73 71 6c 69 74  e, 5);.    sqlit
6fc0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
6fd0: 28 73 50 61 72 73 65 2e 70 56 64 62 65 2c 20 30  (sParse.pVdbe, 0
6fe0: 2c 20 22 61 64 64 72 22 2c 20 50 33 5f 53 54 41  , "addr", P3_STA
6ff0: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
7000: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
7010: 73 50 61 72 73 65 2e 70 56 64 62 65 2c 20 31 2c  sParse.pVdbe, 1,
7020: 20 22 6f 70 63 6f 64 65 22 2c 20 50 33 5f 53 54   "opcode", P3_ST
7030: 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
7040: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
7050: 28 73 50 61 72 73 65 2e 70 56 64 62 65 2c 20 32  (sParse.pVdbe, 2
7060: 2c 20 22 70 31 22 2c 20 50 33 5f 53 54 41 54 49  , "p1", P3_STATI
7070: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
7080: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 73 50  dbeSetColName(sP
7090: 61 72 73 65 2e 70 56 64 62 65 2c 20 33 2c 20 22  arse.pVdbe, 3, "
70a0: 70 32 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b  p2", P3_STATIC);
70b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
70c0: 53 65 74 43 6f 6c 4e 61 6d 65 28 73 50 61 72 73  SetColName(sPars
70d0: 65 2e 70 56 64 62 65 2c 20 34 2c 20 22 70 33 22  e.pVdbe, 4, "p3"
70e0: 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P3_STATIC);.  
70f0: 7d 20 0a 0a 70 72 65 70 61 72 65 5f 6f 75 74 3a  } ..prepare_out:
7100: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
7110: 66 65 74 79 4f 66 66 28 64 62 29 20 29 7b 0a 20  fetyOff(db) ){. 
7120: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d     rc = SQLITE_M
7130: 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 69 66 28  ISUSE;.  }.  if(
7140: 20 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20   zErrMsg ){.    
7150: 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c  sqlite3Error(db,
7160: 20 72 63 2c 20 22 25 73 22 2c 20 7a 45 72 72 4d   rc, "%s", zErrM
7170: 73 67 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  sg);.  }else{.  
7180: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64    sqlite3Error(d
7190: 62 2c 20 72 63 2c 20 30 29 3b 0a 20 20 7d 0a 20  b, rc, 0);.  }. 
71a0: 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f   return rc;.}../
71b0: 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20 74 68 65  *.** Compile the
71c0: 20 55 54 46 2d 31 36 20 65 6e 63 6f 64 65 64 20   UTF-16 encoded 
71d0: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 7a 53  SQL statement zS
71e0: 71 6c 20 69 6e 74 6f 20 61 20 73 74 61 74 65 6d  ql into a statem
71f0: 65 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69  ent handle..*/.i
7200: 6e 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  nt sqlite3_prepa
7210: 72 65 31 36 28 0a 20 20 73 71 6c 69 74 65 33 20  re16(.  sqlite3 
7220: 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  *db,            
7230: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 68 61    /* Database ha
7240: 6e 64 6c 65 2e 20 2a 2f 20 0a 20 20 63 6f 6e 73  ndle. */ .  cons
7250: 74 20 76 6f 69 64 20 2a 7a 53 71 6c 2c 20 20 20  t void *zSql,   
7260: 20 20 20 20 20 20 2f 2a 20 55 54 46 2d 38 20 65        /* UTF-8 e
7270: 6e 63 6f 64 65 64 20 53 51 4c 20 73 74 61 74 65  ncoded SQL state
7280: 6d 65 6e 74 2e 20 2a 2f 0a 20 20 69 6e 74 20 6e  ment. */.  int n
7290: 42 79 74 65 73 2c 20 20 20 20 20 20 20 20 20 20  Bytes,          
72a0: 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f       /* Length o
72b0: 66 20 7a 53 71 6c 20 69 6e 20 62 79 74 65 73 2e  f zSql in bytes.
72c0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73 74   */.  sqlite3_st
72d0: 6d 74 20 2a 2a 70 70 53 74 6d 74 2c 20 20 20 20  mt **ppStmt,    
72e0: 2f 2a 20 4f 55 54 3a 20 41 20 70 6f 69 6e 74 65  /* OUT: A pointe
72f0: 72 20 74 6f 20 74 68 65 20 70 72 65 70 61 72 65  r to the prepare
7300: 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20  d statement */. 
7310: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2a 70 7a   const void **pz
7320: 54 61 69 6c 20 20 20 20 20 20 20 2f 2a 20 4f 55  Tail       /* OU
7330: 54 3a 20 45 6e 64 20 6f 66 20 70 61 72 73 65 64  T: End of parsed
7340: 20 73 74 72 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20   string */.){.  
7350: 2f 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  /* This function
7360: 20 63 75 72 72 65 6e 74 6c 79 20 77 6f 72 6b 73   currently works
7370: 20 62 79 20 66 69 72 73 74 20 74 72 61 6e 73 66   by first transf
7380: 6f 72 6d 69 6e 67 20 74 68 65 20 55 54 46 2d 31  orming the UTF-1
7390: 36 0a 20 20 2a 2a 20 65 6e 63 6f 64 65 64 20 73  6.  ** encoded s
73a0: 74 72 69 6e 67 20 74 6f 20 55 54 46 2d 38 2c 20  tring to UTF-8, 
73b0: 74 68 65 6e 20 69 6e 76 6f 6b 69 6e 67 20 73 71  then invoking sq
73c0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 2e  lite3_prepare().
73d0: 20 54 68 65 0a 20 20 2a 2a 20 74 72 69 63 6b 79   The.  ** tricky
73e0: 20 62 69 74 20 69 73 20 66 69 67 75 72 69 6e 67   bit is figuring
73f0: 20 6f 75 74 20 74 68 65 20 70 6f 69 6e 74 65 72   out the pointer
7400: 20 74 6f 20 72 65 74 75 72 6e 20 69 6e 20 2a 70   to return in *p
7410: 7a 54 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 63 68  zTail..  */.  ch
7420: 61 72 20 2a 7a 53 71 6c 38 20 3d 20 30 3b 0a 20  ar *zSql8 = 0;. 
7430: 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 54 61   char const *zTa
7440: 69 6c 38 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72  il8 = 0;.  int r
7450: 63 3b 0a 0a 20 20 7a 53 71 6c 38 20 3d 20 73 71  c;..  zSql8 = sq
7460: 6c 69 74 65 33 75 74 66 31 36 74 6f 38 28 7a 53  lite3utf16to8(zS
7470: 71 6c 2c 20 6e 42 79 74 65 73 2c 20 53 51 4c 49  ql, nBytes, SQLI
7480: 54 45 33 5f 42 49 47 45 4e 44 49 41 4e 29 3b 0a  TE3_BIGENDIAN);.
7490: 20 20 69 66 28 20 21 7a 53 71 6c 38 20 29 7b 0a    if( !zSql8 ){.
74a0: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
74b0: 28 64 62 2c 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  (db, SQLITE_NOME
74c0: 4d 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  M, 0);.    retur
74d0: 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  n SQLITE_NOMEM;.
74e0: 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
74f0: 65 33 5f 70 72 65 70 61 72 65 28 64 62 2c 20 7a  e3_prepare(db, z
7500: 53 71 6c 38 2c 20 2d 31 2c 20 70 70 53 74 6d 74  Sql8, -1, ppStmt
7510: 2c 20 26 7a 54 61 69 6c 38 29 3b 0a 0a 20 20 69  , &zTail8);..  i
7520: 66 28 20 7a 54 61 69 6c 38 20 26 26 20 70 7a 54  f( zTail8 && pzT
7530: 61 69 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  ail ){.    /* If
7540: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
7550: 20 72 65 74 75 72 6e 73 20 61 20 74 61 69 6c 20   returns a tail 
7560: 70 6f 69 6e 74 65 72 2c 20 77 65 20 63 61 6c 63  pointer, we calc
7570: 75 6c 61 74 65 20 74 68 65 0a 20 20 20 20 2a 2a  ulate the.    **
7580: 20 65 71 75 69 76 61 6c 65 6e 74 20 70 6f 69 6e   equivalent poin
7590: 74 65 72 20 69 6e 74 6f 20 74 68 65 20 55 54 46  ter into the UTF
75a0: 2d 31 36 20 73 74 72 69 6e 67 20 62 79 20 63 6f  -16 string by co
75b0: 75 6e 74 69 6e 67 20 74 68 65 20 75 6e 69 63 6f  unting the unico
75c0: 64 65 0a 20 20 20 20 2a 2a 20 63 68 61 72 61 63  de.    ** charac
75d0: 74 65 72 73 20 62 65 74 77 65 65 6e 20 7a 53 71  ters between zSq
75e0: 6c 38 20 61 6e 64 20 7a 54 61 69 6c 38 2c 20 61  l8 and zTail8, a
75f0: 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e 69 6e  nd then returnin
7600: 67 20 61 20 70 6f 69 6e 74 65 72 0a 20 20 20 20  g a pointer.    
7610: 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 75 6d 62  ** the same numb
7620: 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73  er of characters
7630: 20 69 6e 74 6f 20 74 68 65 20 55 54 46 2d 31 36   into the UTF-16
7640: 20 73 74 72 69 6e 67 2e 0a 20 20 20 20 2a 2f 0a   string..    */.
7650: 20 20 20 20 69 6e 74 20 63 68 61 72 73 5f 70 61      int chars_pa
7660: 72 73 65 64 20 3d 20 73 71 6c 69 74 65 33 75 74  rsed = sqlite3ut
7670: 66 38 43 68 61 72 4c 65 6e 28 7a 53 71 6c 38 2c  f8CharLen(zSql8,
7680: 20 7a 54 61 69 6c 38 2d 7a 53 71 6c 38 29 3b 0a   zTail8-zSql8);.
7690: 20 20 20 20 2a 70 7a 54 61 69 6c 20 3d 20 28 75      *pzTail = (u
76a0: 38 20 2a 29 7a 53 71 6c 20 2b 20 73 71 6c 69 74  8 *)zSql + sqlit
76b0: 65 33 75 74 66 31 36 42 79 74 65 4c 65 6e 28 7a  e3utf16ByteLen(z
76c0: 53 71 6c 2c 20 63 68 61 72 73 5f 70 61 72 73 65  Sql, chars_parse
76d0: 64 29 3b 0a 20 20 7d 0a 20 0a 20 20 72 65 74 75  d);.  }. .  retu
76e0: 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn rc;.}../*.** 
76f0: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f 65  This routine doe
7700: 73 20 74 68 65 20 77 6f 72 6b 20 6f 66 20 6f 70  s the work of op
7710: 65 6e 69 6e 67 20 61 20 64 61 74 61 62 61 73 65  ening a database
7720: 20 6f 6e 20 62 65 68 61 6c 66 20 6f 66 0a 2a 2a   on behalf of.**
7730: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29 20   sqlite3_open() 
7740: 61 6e 64 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  and sqlite3_open
7750: 31 36 28 29 2e 20 54 68 65 20 64 61 74 61 62 61  16(). The databa
7760: 73 65 20 66 69 6c 65 6e 61 6d 65 20 22 7a 46 69  se filename "zFi
7770: 6c 65 6e 61 6d 65 22 20 20 0a 2a 2a 20 69 73 20  lename"  .** is 
7780: 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 2e 20 54  UTF-8 encoded. T
7790: 68 65 20 66 6f 75 72 74 68 20 61 72 67 75 6d 65  he fourth argume
77a0: 6e 74 2c 20 22 64 65 66 5f 65 6e 63 22 20 69 73  nt, "def_enc" is
77b0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 54 45 58 54   one of the TEXT
77c0: 5f 2a 0a 2a 2a 20 6d 61 63 72 6f 73 20 66 72 6f  _*.** macros fro
77d0: 6d 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e 20 49  m sqliteInt.h. I
77e0: 66 20 77 65 20 65 6e 64 20 75 70 20 63 72 65 61  f we end up crea
77f0: 74 69 6e 67 20 61 20 6e 65 77 20 64 61 74 61 62  ting a new datab
7800: 61 73 65 20 66 69 6c 65 0a 2a 2a 20 28 6e 6f 74  ase file.** (not
7810: 20 6f 70 65 6e 69 6e 67 20 61 6e 20 65 78 69 73   opening an exis
7820: 74 69 6e 67 20 6f 6e 65 29 2c 20 74 68 65 20 74  ting one), the t
7830: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20  ext encoding of 
7840: 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
7850: 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 74  will be set to t
7860: 68 69 73 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74  his value..*/.st
7870: 61 74 69 63 20 69 6e 74 20 6f 70 65 6e 44 61 74  atic int openDat
7880: 61 62 61 73 65 28 0a 20 20 63 6f 6e 73 74 20 63  abase(.  const c
7890: 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20  har *zFilename, 
78a0: 2f 2a 20 44 61 74 61 62 61 73 65 20 66 69 6c 65  /* Database file
78b0: 6e 61 6d 65 20 55 54 46 2d 38 20 65 6e 63 6f 64  name UTF-8 encod
78c0: 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  ed */.  sqlite3 
78d0: 2a 2a 70 70 44 62 2c 20 20 20 20 20 20 20 20 2f  **ppDb,        /
78e0: 2a 20 4f 55 54 3a 20 52 65 74 75 72 6e 65 64 20  * OUT: Returned 
78f0: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
7900: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
7910: 2a 2a 6f 70 74 69 6f 6e 73 2c 20 20 2f 2a 20 4e  **options,  /* N
7920: 75 6c 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 6c  ull terminated l
7930: 69 73 74 20 6f 66 20 64 62 20 6f 70 74 69 6f 6e  ist of db option
7940: 73 2c 20 6f 72 20 6e 75 6c 6c 20 2a 2f 0a 20 20  s, or null */.  
7950: 75 38 20 64 65 66 5f 65 6e 63 20 20 20 20 20 20  u8 def_enc      
7960: 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
7970: 20 54 45 58 54 5f 55 74 66 38 2c 20 54 45 58 54   TEXT_Utf8, TEXT
7980: 5f 55 74 66 31 36 6c 65 20 6f 72 20 54 45 58 54  _Utf16le or TEXT
7990: 5f 55 74 66 31 36 62 65 20 2a 2f 0a 29 7b 0a 20  _Utf16be */.){. 
79a0: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
79b0: 69 6e 74 20 72 63 2c 20 69 3b 0a 20 20 63 68 61  int rc, i;.  cha
79c0: 72 20 2a 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a  r *zErrMsg = 0;.
79d0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
79e0: 45 53 54 0a 20 20 66 6f 72 28 69 3d 30 3b 20 6f  EST.  for(i=0; o
79f0: 70 74 69 6f 6e 73 20 26 26 20 6f 70 74 69 6f 6e  ptions && option
7a00: 73 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  s[i]; i++){.    
7a10: 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 4f 70 74  char const *zOpt
7a20: 20 3d 20 6f 70 74 69 6f 6e 73 5b 69 5d 3b 0a 20   = options[i];. 
7a30: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
7a40: 33 53 74 72 49 43 6d 70 28 7a 4f 70 74 2c 20 22  3StrICmp(zOpt, "
7a50: 2d 75 74 66 38 22 29 20 29 7b 0a 20 20 20 20 20  -utf8") ){.     
7a60: 20 64 65 66 5f 65 6e 63 20 3d 20 54 45 58 54 5f   def_enc = TEXT_
7a70: 55 74 66 38 3b 0a 20 20 20 20 7d 65 6c 73 65 20  Utf8;.    }else 
7a80: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
7a90: 72 49 43 6d 70 28 7a 4f 70 74 2c 20 22 2d 75 74  rICmp(zOpt, "-ut
7aa0: 66 31 36 6c 65 22 29 20 29 7b 0a 20 20 20 20 20  f16le") ){.     
7ab0: 20 64 65 66 5f 65 6e 63 20 3d 20 54 45 58 54 5f   def_enc = TEXT_
7ac0: 55 74 66 31 36 6c 65 3b 0a 20 20 20 20 7d 65 6c  Utf16le;.    }el
7ad0: 73 65 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65  se if( 0==sqlite
7ae0: 33 53 74 72 49 43 6d 70 28 7a 4f 70 74 2c 20 22  3StrICmp(zOpt, "
7af0: 2d 75 74 66 31 36 62 65 22 29 20 29 7b 0a 20 20  -utf16be") ){.  
7b00: 20 20 20 20 64 65 66 5f 65 6e 63 20 3d 20 54 45      def_enc = TE
7b10: 58 54 5f 55 74 66 31 36 62 65 3b 0a 20 20 20 20  XT_Utf16be;.    
7b20: 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  }.  }.#endif..  
7b30: 2f 2a 20 41 6c 6c 6f 63 61 74 65 20 74 68 65 20  /* Allocate the 
7b40: 73 71 6c 69 74 65 20 64 61 74 61 20 73 74 72 75  sqlite data stru
7b50: 63 74 75 72 65 20 2a 2f 0a 20 20 64 62 20 3d 20  cture */.  db = 
7b60: 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 20 73 69  sqliteMalloc( si
7b70: 7a 65 6f 66 28 73 71 6c 69 74 65 29 20 29 3b 0a  zeof(sqlite) );.
7b80: 20 20 69 66 28 20 64 62 3d 3d 30 20 29 20 67 6f    if( db==0 ) go
7b90: 74 6f 20 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a 20  to opendb_out;. 
7ba0: 20 64 62 2d 3e 6f 6e 45 72 72 6f 72 20 3d 20 4f   db->onError = O
7bb0: 45 5f 44 65 66 61 75 6c 74 3b 0a 20 20 64 62 2d  E_Default;.  db-
7bc0: 3e 70 72 69 6f 72 4e 65 77 52 6f 77 69 64 20 3d  >priorNewRowid =
7bd0: 20 30 3b 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20   0;.  db->magic 
7be0: 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42  = SQLITE_MAGIC_B
7bf0: 55 53 59 3b 0a 20 20 64 62 2d 3e 6e 44 62 20 3d  USY;.  db->nDb =
7c00: 20 32 3b 0a 20 20 64 62 2d 3e 61 44 62 20 3d 20   2;.  db->aDb = 
7c10: 64 62 2d 3e 61 44 62 53 74 61 74 69 63 3b 0a 20  db->aDbStatic;. 
7c20: 20 64 62 2d 3e 65 6e 63 20 3d 20 64 65 66 5f 65   db->enc = def_e
7c30: 6e 63 3b 0a 20 20 2f 2a 20 64 62 2d 3e 66 6c 61  nc;.  /* db->fla
7c40: 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 53 68 6f  gs |= SQLITE_Sho
7c50: 72 74 43 6f 6c 4e 61 6d 65 73 3b 20 2a 2f 0a 20  rtColNames; */. 
7c60: 20 73 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74   sqlite3HashInit
7c70: 28 26 64 62 2d 3e 61 46 75 6e 63 2c 20 53 51 4c  (&db->aFunc, SQL
7c80: 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c  ITE_HASH_STRING,
7c90: 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 48 61   0);.  sqlite3Ha
7ca0: 73 68 49 6e 69 74 28 26 64 62 2d 3e 61 43 6f 6c  shInit(&db->aCol
7cb0: 6c 53 65 71 2c 20 53 51 4c 49 54 45 5f 48 41 53  lSeq, SQLITE_HAS
7cc0: 48 5f 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20  H_STRING, 0);.  
7cd0: 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e  for(i=0; i<db->n
7ce0: 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71  Db; i++){.    sq
7cf0: 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28 26 64  lite3HashInit(&d
7d00: 62 2d 3e 61 44 62 5b 69 5d 2e 74 62 6c 48 61 73  b->aDb[i].tblHas
7d10: 68 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53  h, SQLITE_HASH_S
7d20: 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20 20 20 73  TRING, 0);.    s
7d30: 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28 26  qlite3HashInit(&
7d40: 64 62 2d 3e 61 44 62 5b 69 5d 2e 69 64 78 48 61  db->aDb[i].idxHa
7d50: 73 68 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f  sh, SQLITE_HASH_
7d60: 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20 20 20  STRING, 0);.    
7d70: 73 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28  sqlite3HashInit(
7d80: 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 74 72 69 67  &db->aDb[i].trig
7d90: 48 61 73 68 2c 20 53 51 4c 49 54 45 5f 48 41 53  Hash, SQLITE_HAS
7da0: 48 5f 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20  H_STRING, 0);.  
7db0: 20 20 73 71 6c 69 74 65 33 48 61 73 68 49 6e 69    sqlite3HashIni
7dc0: 74 28 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 61 46  t(&db->aDb[i].aF
7dd0: 4b 65 79 2c 20 53 51 4c 49 54 45 5f 48 41 53 48  Key, SQLITE_HASH
7de0: 5f 53 54 52 49 4e 47 2c 20 31 29 3b 0a 20 20 7d  _STRING, 1);.  }
7df0: 0a 20 20 64 62 2d 3e 70 44 66 6c 74 43 6f 6c 6c  .  db->pDfltColl
7e00: 20 3d 0a 20 20 20 20 20 73 71 6c 69 74 65 33 43   =.     sqlite3C
7e10: 68 61 6e 67 65 43 6f 6c 6c 61 74 69 6e 67 46 75  hangeCollatingFu
7e20: 6e 63 74 69 6f 6e 28 64 62 2c 20 22 42 49 4e 41  nction(db, "BINA
7e30: 52 59 22 2c 20 36 2c 20 30 2c 20 62 69 6e 61 72  RY", 6, 0, binar
7e40: 79 43 6f 6c 6c 61 74 69 6e 67 46 75 6e 63 29 3b  yCollatingFunc);
7e50: 0a 20 20 0a 20 20 2f 2a 20 4f 70 65 6e 20 74 68  .  .  /* Open th
7e60: 65 20 62 61 63 6b 65 6e 64 20 64 61 74 61 62 61  e backend databa
7e70: 73 65 20 64 72 69 76 65 72 20 2a 2f 0a 20 20 69  se driver */.  i
7e80: 66 28 20 7a 46 69 6c 65 6e 61 6d 65 5b 30 5d 3d  f( zFilename[0]=
7e90: 3d 27 3a 27 20 26 26 20 73 74 72 63 6d 70 28 7a  =':' && strcmp(z
7ea0: 46 69 6c 65 6e 61 6d 65 2c 22 3a 6d 65 6d 6f 72  Filename,":memor
7eb0: 79 3a 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 64  y:")==0 ){.    d
7ec0: 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20  b->temp_store = 
7ed0: 32 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  2;.  }.  rc = sq
7ee0: 6c 69 74 65 33 42 74 72 65 65 46 61 63 74 6f 72  lite3BtreeFactor
7ef0: 79 28 64 62 2c 20 7a 46 69 6c 65 6e 61 6d 65 2c  y(db, zFilename,
7f00: 20 30 2c 20 4d 41 58 5f 50 41 47 45 53 2c 20 26   0, MAX_PAGES, &
7f10: 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42 74 29 3b  db->aDb[0].pBt);
7f20: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
7f30: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 46  E_OK ){.    /* F
7f40: 49 58 20 4d 45 3a 20 73 71 6c 69 74 65 33 42 74  IX ME: sqlite3Bt
7f50: 72 65 65 46 61 63 74 6f 72 79 28 29 20 73 68 6f  reeFactory() sho
7f60: 75 6c 64 20 63 61 6c 6c 20 73 71 6c 69 74 65 33  uld call sqlite3
7f70: 45 72 72 6f 72 28 29 2e 20 2a 2f 0a 20 20 20 20  Error(). */.    
7f80: 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c  sqlite3Error(db,
7f90: 20 72 63 2c 20 30 29 3b 0a 20 20 20 20 64 62 2d   rc, 0);.    db-
7fa0: 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f  >magic = SQLITE_
7fb0: 4d 41 47 49 43 5f 43 4c 4f 53 45 44 3b 0a 20 20  MAGIC_CLOSED;.  
7fc0: 20 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f 6f 75    goto opendb_ou
7fd0: 74 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 61 44 62  t;.  }.  db->aDb
7fe0: 5b 30 5d 2e 7a 4e 61 6d 65 20 3d 20 22 6d 61 69  [0].zName = "mai
7ff0: 6e 22 3b 0a 20 20 64 62 2d 3e 61 44 62 5b 31 5d  n";.  db->aDb[1]
8000: 2e 7a 4e 61 6d 65 20 3d 20 22 74 65 6d 70 22 3b  .zName = "temp";
8010: 0a 0a 20 20 2f 2a 20 41 74 74 65 6d 70 74 20 74  ..  /* Attempt t
8020: 6f 20 72 65 61 64 20 74 68 65 20 73 63 68 65 6d  o read the schem
8030: 61 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 52 65  a */.  sqlite3Re
8040: 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e  gisterBuiltinFun
8050: 63 74 69 6f 6e 73 28 64 62 29 3b 0a 20 20 72 63  ctions(db);.  rc
8060: 20 3d 20 73 71 6c 69 74 65 33 49 6e 69 74 28 64   = sqlite3Init(d
8070: 62 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20  b, &zErrMsg);.  
8080: 69 66 28 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  if( sqlite3_mall
8090: 6f 63 5f 66 61 69 6c 65 64 20 29 7b 0a 20 20 20  oc_failed ){.   
80a0: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 64   sqlite3_close(d
80b0: 62 29 3b 0a 20 20 20 20 64 62 20 3d 20 30 3b 0a  b);.    db = 0;.
80c0: 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f      goto opendb_
80d0: 6f 75 74 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  out;.  }else if(
80e0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc!=SQLITE_OK &
80f0: 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 42 55 53  & rc!=SQLITE_BUS
8100: 59 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  Y ){.    sqlite3
8110: 45 72 72 6f 72 28 64 62 2c 20 72 63 2c 20 22 25  Error(db, rc, "%
8120: 73 22 2c 20 7a 45 72 72 4d 73 67 2c 20 30 29 3b  s", zErrMsg, 0);
8130: 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d  .    db->magic =
8140: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c   SQLITE_MAGIC_CL
8150: 4f 53 45 44 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  OSED;.  }else{. 
8160: 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53     db->magic = S
8170: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
8180: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a 45 72 72  ;.  }.  if( zErr
8190: 4d 73 67 20 29 20 73 71 6c 69 74 65 46 72 65 65  Msg ) sqliteFree
81a0: 28 7a 45 72 72 4d 73 67 29 3b 0a 0a 6f 70 65 6e  (zErrMsg);..open
81b0: 64 62 5f 6f 75 74 3a 0a 20 20 2a 70 70 44 62 20  db_out:.  *ppDb 
81c0: 3d 20 64 62 3b 0a 20 20 72 65 74 75 72 6e 20 73  = db;.  return s
81d0: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 64  qlite3_errcode(d
81e0: 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 70 65  b);.}../*.** Ope
81f0: 6e 20 61 20 6e 65 77 20 64 61 74 61 62 61 73 65  n a new database
8200: 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74 20   handle..*/.int 
8210: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 0a 20 20  sqlite3_open(.  
8220: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c  const char *zFil
8230: 65 6e 61 6d 65 2c 20 0a 20 20 73 71 6c 69 74 65  ename, .  sqlite
8240: 33 20 2a 2a 70 70 44 62 2c 20 0a 20 20 63 6f 6e  3 **ppDb, .  con
8250: 73 74 20 63 68 61 72 20 2a 2a 6f 70 74 69 6f 6e  st char **option
8260: 73 0a 29 7b 0a 20 20 72 65 74 75 72 6e 20 6f 70  s.){.  return op
8270: 65 6e 44 61 74 61 62 61 73 65 28 7a 46 69 6c 65  enDatabase(zFile
8280: 6e 61 6d 65 2c 20 70 70 44 62 2c 20 6f 70 74 69  name, ppDb, opti
8290: 6f 6e 73 2c 20 54 45 58 54 5f 55 74 66 38 29 3b  ons, TEXT_Utf8);
82a0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e 20 61  .}../*.** Open a
82b0: 20 6e 65 77 20 64 61 74 61 62 61 73 65 20 68 61   new database ha
82c0: 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  ndle..*/.int sql
82d0: 69 74 65 33 5f 6f 70 65 6e 31 36 28 0a 20 20 63  ite3_open16(.  c
82e0: 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 46 69 6c 65  onst void *zFile
82f0: 6e 61 6d 65 2c 20 0a 20 20 73 71 6c 69 74 65 33  name, .  sqlite3
8300: 20 2a 2a 70 70 44 62 2c 20 0a 20 20 63 6f 6e 73   **ppDb, .  cons
8310: 74 20 63 68 61 72 20 2a 2a 6f 70 74 69 6f 6e 73  t char **options
8320: 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 46 69 6c  .){.  char *zFil
8330: 65 6e 61 6d 65 38 3b 20 20 20 2f 2a 20 7a 46 69  ename8;   /* zFi
8340: 6c 65 6e 61 6d 65 20 65 6e 63 6f 64 65 64 20 69  lename encoded i
8350: 6e 20 55 54 46 2d 38 20 69 6e 73 74 65 61 64 20  n UTF-8 instead 
8360: 6f 66 20 55 54 46 2d 31 36 20 2a 2f 0a 20 20 69  of UTF-16 */.  i
8370: 6e 74 20 72 63 3b 0a 0a 20 20 61 73 73 65 72 74  nt rc;..  assert
8380: 28 20 70 70 44 62 20 29 3b 0a 0a 20 20 7a 46 69  ( ppDb );..  zFi
8390: 6c 65 6e 61 6d 65 38 20 3d 20 73 71 6c 69 74 65  lename8 = sqlite
83a0: 33 75 74 66 31 36 74 6f 38 28 7a 46 69 6c 65 6e  3utf16to8(zFilen
83b0: 61 6d 65 2c 20 2d 31 2c 20 53 51 4c 49 54 45 33  ame, -1, SQLITE3
83c0: 5f 42 49 47 45 4e 44 49 41 4e 29 3b 0a 20 20 69  _BIGENDIAN);.  i
83d0: 66 28 20 21 7a 46 69 6c 65 6e 61 6d 65 38 20 29  f( !zFilename8 )
83e0: 7b 0a 20 20 20 20 2a 70 70 44 62 20 3d 20 30 3b  {.    *ppDb = 0;
83f0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
8400: 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 0a 20  TE_NOMEM;.  }.. 
8410: 20 2f 2a 20 46 49 58 20 4d 45 3a 20 41 6c 73 6f   /* FIX ME: Also
8420: 20 6e 65 65 64 20 74 6f 20 74 72 61 6e 73 6c 61   need to transla
8430: 74 65 20 74 68 65 20 6f 70 74 69 6f 6e 20 73 74  te the option st
8440: 72 69 6e 67 73 20 2a 2f 0a 0a 20 20 69 66 28 20  rings */..  if( 
8450: 53 51 4c 49 54 45 33 5f 42 49 47 45 4e 44 49 41  SQLITE3_BIGENDIA
8460: 4e 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 6f 70  N ){.    rc = op
8470: 65 6e 44 61 74 61 62 61 73 65 28 7a 46 69 6c 65  enDatabase(zFile
8480: 6e 61 6d 65 38 2c 20 70 70 44 62 2c 20 6f 70 74  name8, ppDb, opt
8490: 69 6f 6e 73 2c 20 54 45 58 54 5f 55 74 66 31 36  ions, TEXT_Utf16
84a0: 62 65 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  be);.  }else{.  
84b0: 20 20 72 63 20 3d 20 6f 70 65 6e 44 61 74 61 62    rc = openDatab
84c0: 61 73 65 28 7a 46 69 6c 65 6e 61 6d 65 38 2c 20  ase(zFilename8, 
84d0: 70 70 44 62 2c 20 6f 70 74 69 6f 6e 73 2c 20 54  ppDb, options, T
84e0: 45 58 54 5f 55 74 66 31 36 6c 65 29 3b 0a 20 20  EXT_Utf16le);.  
84f0: 7d 0a 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28  }..  sqliteFree(
8500: 7a 46 69 6c 65 6e 61 6d 65 38 29 3b 0a 20 20 72  zFilename8);.  r
8510: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a  eturn rc;.}../*.
8520: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
8530: 20 72 6f 75 74 69 6e 65 20 64 65 73 74 72 6f 79   routine destroy
8540: 73 20 61 20 76 69 72 74 75 61 6c 20 6d 61 63 68  s a virtual mach
8550: 69 6e 65 20 74 68 61 74 20 69 73 20 63 72 65 61  ine that is crea
8560: 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 73 71  ted by.** the sq
8570: 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 28 29 20  lite3_compile() 
8580: 72 6f 75 74 69 6e 65 2e 20 54 68 65 20 69 6e 74  routine. The int
8590: 65 67 65 72 20 72 65 74 75 72 6e 65 64 20 69 73  eger returned is
85a0: 20 61 6e 20 53 51 4c 49 54 45 5f 0a 2a 2a 20 73   an SQLITE_.** s
85b0: 75 63 63 65 73 73 2f 66 61 69 6c 75 72 65 20 63  uccess/failure c
85c0: 6f 64 65 20 74 68 61 74 20 64 65 73 63 72 69 62  ode that describ
85d0: 65 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  es the result of
85e0: 20 65 78 65 63 75 74 69 6e 67 20 74 68 65 20 76   executing the v
85f0: 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e  irtual.** machin
8600: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  e..**.** This ro
8610: 75 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 65  utine sets the e
8620: 72 72 6f 72 20 63 6f 64 65 20 61 6e 64 20 73 74  rror code and st
8630: 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79  ring returned by
8640: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 65 72 72 63  .** sqlite3_errc
8650: 6f 64 65 28 29 2c 20 73 71 6c 69 74 65 33 5f 65  ode(), sqlite3_e
8660: 72 72 6d 73 67 28 29 20 61 6e 64 20 73 71 6c 69  rrmsg() and sqli
8670: 74 65 33 5f 65 72 72 6d 73 67 31 36 28 29 2e 0a  te3_errmsg16()..
8680: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 66  */.int sqlite3_f
8690: 69 6e 61 6c 69 7a 65 28 73 71 6c 69 74 65 33 5f  inalize(sqlite3_
86a0: 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20  stmt *pStmt){.  
86b0: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 56 64  return sqlite3Vd
86c0: 62 65 46 69 6e 61 6c 69 7a 65 28 28 56 64 62 65  beFinalize((Vdbe
86d0: 2a 29 70 53 74 6d 74 2c 20 30 29 3b 0a 7d 0a 0a  *)pStmt, 0);.}..
86e0: 2f 2a 0a 2a 2a 20 54 65 72 6d 69 6e 61 74 65 20  /*.** Terminate 
86f0: 74 68 65 20 63 75 72 72 65 6e 74 20 65 78 65 63  the current exec
8700: 75 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20  ution of an SQL 
8710: 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65  statement and re
8720: 73 65 74 20 69 74 0a 2a 2a 20 62 61 63 6b 20 74  set it.** back t
8730: 6f 20 69 74 73 20 73 74 61 72 74 69 6e 67 20 73  o its starting s
8740: 74 61 74 65 20 73 6f 20 74 68 61 74 20 69 74 20  tate so that it 
8750: 63 61 6e 20 62 65 20 72 65 75 73 65 64 2e 20 41  can be reused. A
8760: 20 73 75 63 63 65 73 73 20 63 6f 64 65 20 66 72   success code fr
8770: 6f 6d 0a 2a 2a 20 74 68 65 20 70 72 69 6f 72 20  om.** the prior 
8780: 65 78 65 63 75 74 69 6f 6e 20 69 73 20 72 65 74  execution is ret
8790: 75 72 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  urned..**.** Thi
87a0: 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74  s routine sets t
87b0: 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 61 6e  he error code an
87c0: 64 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65  d string returne
87d0: 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  d by.** sqlite3_
87e0: 65 72 72 63 6f 64 65 28 29 2c 20 73 71 6c 69 74  errcode(), sqlit
87f0: 65 33 5f 65 72 72 6d 73 67 28 29 20 61 6e 64 20  e3_errmsg() and 
8800: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36  sqlite3_errmsg16
8810: 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ()..*/.int sqlit
8820: 65 33 5f 72 65 73 65 74 28 73 71 6c 69 74 65 33  e3_reset(sqlite3
8830: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20  _stmt *pStmt){. 
8840: 20 69 6e 74 20 72 63 20 3d 20 73 71 6c 69 74 65   int rc = sqlite
8850: 33 56 64 62 65 52 65 73 65 74 28 28 56 64 62 65  3VdbeReset((Vdbe
8860: 2a 29 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 73  *)pStmt, 0);.  s
8870: 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 52 65  qlite3VdbeMakeRe
8880: 61 64 79 28 28 56 64 62 65 2a 29 70 53 74 6d 74  ady((Vdbe*)pStmt
8890: 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 72 65 74 75  , -1, 0);.  retu
88a0: 72 6e 20 72 63 3b 0a 7d 0a                       rn rc;.}.