/ Hex Artifact Content
Login

Artifact 43d5f4e38108129a13cf42c59087e6e20b3596ad:


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 38 34 20 32 30 30 32 2f 30 36 2f  ,v 1.84 2002/06/
0280: 32 35 20 30 31 3a 30 39 3a 31 31 20 64 72 68 20  25 01:09:11 drh 
0290: 45 78 70 20 24 0a 2a 2f 0a 23 69 6e 63 6c 75 64  Exp $.*/.#includ
02a0: 65 20 22 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a  e "sqliteInt.h".
02b0: 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a  #include "os.h".
02c0: 23 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e  #include <ctype.
02d0: 68 3e 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69  h>../*.** This i
02e0: 73 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 72  s the callback r
02f0: 6f 75 74 69 6e 65 20 66 6f 72 20 74 68 65 20 63  outine for the c
0300: 6f 64 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c  ode that initial
0310: 69 7a 65 73 20 74 68 65 0a 2a 2a 20 64 61 74 61  izes the.** data
0320: 62 61 73 65 2e 20 20 53 65 65 20 73 71 6c 69 74  base.  See sqlit
0330: 65 49 6e 69 74 28 29 20 62 65 6c 6f 77 20 66 6f  eInit() below fo
0340: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
0350: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ormation..**.** 
0360: 45 61 63 68 20 63 61 6c 6c 62 61 63 6b 20 63 6f  Each callback co
0370: 6e 74 61 69 6e 73 20 74 68 65 20 66 6f 6c 6c 6f  ntains the follo
0380: 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  wing information
0390: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 72 67 76  :.**.**     argv
03a0: 5b 30 5d 20 3d 20 22 66 69 6c 65 2d 66 6f 72 6d  [0] = "file-form
03b0: 61 74 22 20 6f 72 20 22 73 63 68 65 6d 61 2d 63  at" or "schema-c
03c0: 6f 6f 6b 69 65 22 20 6f 72 20 22 74 61 62 6c 65  ookie" or "table
03d0: 22 20 6f 72 20 22 69 6e 64 65 78 22 0a 2a 2a 20  " or "index".** 
03e0: 20 20 20 20 61 72 67 76 5b 31 5d 20 3d 20 74 61      argv[1] = ta
03f0: 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 6e 61 6d  ble or index nam
0400: 65 20 6f 72 20 6d 65 74 61 20 73 74 61 74 65 6d  e or meta statem
0410: 65 6e 74 20 74 79 70 65 2e 0a 2a 2a 20 20 20 20  ent type..**    
0420: 20 61 72 67 76 5b 32 5d 20 3d 20 72 6f 6f 74 20   argv[2] = root 
0430: 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
0440: 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
0450: 20 4e 55 4c 4c 20 66 6f 72 20 6d 65 74 61 2e 0a   NULL for meta..
0460: 2a 2a 20 20 20 20 20 61 72 67 76 5b 33 5d 20 3d  **     argv[3] =
0470: 20 53 51 4c 20 63 72 65 61 74 65 20 73 74 61 74   SQL create stat
0480: 65 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 74 61  ement for the ta
0490: 62 6c 65 20 6f 72 20 69 6e 64 65 78 0a 2a 2a 20  ble or index.** 
04a0: 20 20 20 20 61 72 67 76 5b 34 5d 20 3d 20 22 31      argv[4] = "1
04b0: 22 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  " for temporary 
04c0: 66 69 6c 65 73 2c 20 22 30 22 20 66 6f 72 20 6d  files, "0" for m
04d0: 61 69 6e 20 64 61 74 61 62 61 73 65 0a 2a 2a 0a  ain database.**.
04e0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 49 6e 69  */.int sqliteIni
04f0: 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 20 2a  tCallback(void *
0500: 70 44 62 2c 20 69 6e 74 20 61 72 67 63 2c 20 63  pDb, int argc, c
0510: 68 61 72 20 2a 2a 61 72 67 76 2c 20 63 68 61 72  har **argv, char
0520: 20 2a 2a 61 7a 43 6f 6c 4e 61 6d 65 29 7b 0a 20   **azColName){. 
0530: 20 73 71 6c 69 74 65 20 2a 64 62 20 3d 20 28 73   sqlite *db = (s
0540: 71 6c 69 74 65 2a 29 70 44 62 3b 0a 20 20 50 61  qlite*)pDb;.  Pa
0550: 72 73 65 20 73 50 61 72 73 65 3b 0a 20 20 69 6e  rse sParse;.  in
0560: 74 20 6e 45 72 72 20 3d 20 30 3b 0a 0a 20 20 2f  t nErr = 0;..  /
0570: 2a 20 54 4f 44 4f 3a 20 44 6f 20 73 6f 6d 65 20  * TODO: Do some 
0580: 76 61 6c 69 64 69 74 79 20 63 68 65 63 6b 73 20  validity checks 
0590: 6f 6e 20 61 6c 6c 20 66 69 65 6c 64 73 2e 20 20  on all fields.  
05a0: 49 6e 20 70 61 72 74 69 63 75 6c 61 72 2c 0a 20  In particular,. 
05b0: 20 2a 2a 20 6d 61 6b 65 20 73 75 72 65 20 66 69   ** make sure fi
05c0: 65 6c 64 73 20 64 6f 20 6e 6f 74 20 63 6f 6e 74  elds do not cont
05d0: 61 69 6e 20 4e 55 4c 4c 73 2e 20 4f 74 68 65 72  ain NULLs. Other
05e0: 77 69 73 65 20 77 65 20 6d 69 67 68 74 20 63 6f  wise we might co
05f0: 72 65 0a 20 20 2a 2a 20 77 68 65 6e 20 61 74 74  re.  ** when att
0600: 65 6d 70 74 69 6e 67 20 74 6f 20 69 6e 69 74 69  empting to initi
0610: 61 6c 69 7a 65 20 66 72 6f 6d 20 61 20 63 6f 72  alize from a cor
0620: 72 75 70 74 20 64 61 74 61 62 61 73 65 20 66 69  rupt database fi
0630: 6c 65 2e 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74  le. */..  assert
0640: 28 20 61 72 67 63 3d 3d 35 20 29 3b 0a 20 20 73  ( argc==5 );.  s
0650: 77 69 74 63 68 28 20 61 72 67 76 5b 30 5d 5b 30  witch( argv[0][0
0660: 5d 20 29 7b 0a 20 20 20 20 63 61 73 65 20 27 76  ] ){.    case 'v
0670: 27 3a 0a 20 20 20 20 63 61 73 65 20 27 69 27 3a  ':.    case 'i':
0680: 0a 20 20 20 20 63 61 73 65 20 27 74 27 3a 20 7b  .    case 't': {
0690: 20 20 2f 2a 20 43 52 45 41 54 45 20 54 41 42 4c    /* CREATE TABL
06a0: 45 2c 20 43 52 45 41 54 45 20 49 4e 44 45 58 2c  E, CREATE INDEX,
06b0: 20 6f 72 20 43 52 45 41 54 45 20 56 49 45 57 20   or CREATE VIEW 
06c0: 73 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20 20  statements */.  
06d0: 20 20 20 20 69 66 28 20 61 72 67 76 5b 33 5d 20      if( argv[3] 
06e0: 26 26 20 61 72 67 76 5b 33 5d 5b 30 5d 20 29 7b  && argv[3][0] ){
06f0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c  .        /* Call
0700: 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 70   the parser to p
0710: 72 6f 63 65 73 73 20 61 20 43 52 45 41 54 45 20  rocess a CREATE 
0720: 54 41 42 4c 45 2c 20 49 4e 44 45 58 20 6f 72 20  TABLE, INDEX or 
0730: 56 49 45 57 2e 0a 20 20 20 20 20 20 20 20 2a 2a  VIEW..        **
0740: 20 42 75 74 20 62 65 63 61 75 73 65 20 73 50 61   But because sPa
0750: 72 73 65 2e 69 6e 69 74 46 6c 61 67 20 69 73 20  rse.initFlag is 
0760: 73 65 74 20 74 6f 20 31 2c 20 6e 6f 20 56 44 42  set to 1, no VDB
0770: 45 20 63 6f 64 65 20 69 73 20 67 65 6e 65 72 61  E code is genera
0780: 74 65 64 0a 20 20 20 20 20 20 20 20 2a 2a 20 6f  ted.        ** o
0790: 72 20 65 78 65 63 75 74 65 64 2e 20 20 41 6c 6c  r executed.  All
07a0: 20 74 68 65 20 70 61 72 73 65 72 20 64 6f 65 73   the parser does
07b0: 20 69 73 20 62 75 69 6c 64 20 74 68 65 20 69 6e   is build the in
07c0: 74 65 72 6e 61 6c 20 64 61 74 61 0a 20 20 20 20  ternal data.    
07d0: 20 20 20 20 2a 2a 20 73 74 72 75 63 74 75 72 65      ** structure
07e0: 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 20  s that describe 
07f0: 74 68 65 20 74 61 62 6c 65 2c 20 69 6e 64 65 78  the table, index
0800: 2c 20 6f 72 20 76 69 65 77 2e 0a 20 20 20 20 20  , or view..     
0810: 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 65     */.        me
0820: 6d 73 65 74 28 26 73 50 61 72 73 65 2c 20 30 2c  mset(&sParse, 0,
0830: 20 73 69 7a 65 6f 66 28 73 50 61 72 73 65 29 29   sizeof(sParse))
0840: 3b 0a 20 20 20 20 20 20 20 20 73 50 61 72 73 65  ;.        sParse
0850: 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 20 20  .db = db;.      
0860: 20 20 73 50 61 72 73 65 2e 69 6e 69 74 46 6c 61    sParse.initFla
0870: 67 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 73  g = 1;.        s
0880: 50 61 72 73 65 2e 69 73 54 65 6d 70 20 3d 20 61  Parse.isTemp = a
0890: 72 67 76 5b 34 5d 5b 30 5d 20 2d 20 27 30 27 3b  rgv[4][0] - '0';
08a0: 0a 20 20 20 20 20 20 20 20 73 50 61 72 73 65 2e  .        sParse.
08b0: 6e 65 77 54 6e 75 6d 20 3d 20 61 74 6f 69 28 61  newTnum = atoi(a
08c0: 72 67 76 5b 32 5d 29 3b 0a 20 20 20 20 20 20 20  rgv[2]);.       
08d0: 20 73 71 6c 69 74 65 52 75 6e 50 61 72 73 65 72   sqliteRunParser
08e0: 28 26 73 50 61 72 73 65 2c 20 61 72 67 76 5b 33  (&sParse, argv[3
08f0: 5d 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ], 0);.      }el
0900: 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49  se{.        /* I
0910: 66 20 74 68 65 20 53 51 4c 20 63 6f 6c 75 6d 6e  f the SQL column
0920: 20 69 73 20 62 6c 61 6e 6b 20 69 74 20 6d 65 61   is blank it mea
0930: 6e 73 20 74 68 69 73 20 69 73 20 61 6e 20 69 6e  ns this is an in
0940: 64 65 78 20 74 68 61 74 0a 20 20 20 20 20 20 20  dex that.       
0950: 20 2a 2a 20 77 61 73 20 63 72 65 61 74 65 64 20   ** was created 
0960: 74 6f 20 62 65 20 74 68 65 20 50 52 49 4d 41 52  to be the PRIMAR
0970: 59 20 4b 45 59 20 6f 72 20 74 6f 20 66 75 6c 66  Y KEY or to fulf
0980: 69 6c 6c 20 61 20 55 4e 49 51 55 45 0a 20 20 20  ill a UNIQUE.   
0990: 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69       ** constrai
09a0: 6e 74 20 66 6f 72 20 61 20 43 52 45 41 54 45 20  nt for a CREATE 
09b0: 54 41 42 4c 45 2e 20 20 54 68 65 20 69 6e 64 65  TABLE.  The inde
09c0: 78 20 73 68 6f 75 6c 64 20 68 61 76 65 20 61 6c  x should have al
09d0: 72 65 61 64 79 0a 20 20 20 20 20 20 20 20 2a 2a  ready.        **
09e0: 20 62 65 65 6e 20 63 72 65 61 74 65 64 20 77 68   been created wh
09f0: 65 6e 20 77 65 20 70 72 6f 63 65 73 73 65 64 20  en we processed 
0a00: 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45  the CREATE TABLE
0a10: 2e 20 20 41 6c 6c 20 77 65 20 68 61 76 65 0a 20  .  All we have. 
0a20: 20 20 20 20 20 20 20 2a 2a 20 74 6f 20 64 6f 20         ** to do 
0a30: 68 65 72 65 20 69 73 20 72 65 63 6f 72 64 20 74  here is record t
0a40: 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
0a50: 62 65 72 20 66 6f 72 20 74 68 61 74 20 69 6e 64  ber for that ind
0a60: 65 78 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20  ex..        */. 
0a70: 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 49         Index *pI
0a80: 6e 64 65 78 20 3d 20 73 71 6c 69 74 65 46 69 6e  ndex = sqliteFin
0a90: 64 49 6e 64 65 78 28 64 62 2c 20 61 72 67 76 5b  dIndex(db, argv[
0aa0: 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  1]);.        if(
0ab0: 20 70 49 6e 64 65 78 3d 3d 30 20 7c 7c 20 70 49   pIndex==0 || pI
0ac0: 6e 64 65 78 2d 3e 74 6e 75 6d 21 3d 30 20 29 7b  ndex->tnum!=0 ){
0ad0: 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  .          /* Th
0ae0: 69 73 20 63 61 6e 20 6f 63 63 75 72 20 69 66 20  is can occur if 
0af0: 74 68 65 72 65 20 65 78 69 73 74 73 20 61 6e 20  there exists an 
0b00: 69 6e 64 65 78 20 6f 6e 20 61 20 54 45 4d 50 20  index on a TEMP 
0b10: 74 61 62 6c 65 20 77 68 69 63 68 0a 20 20 20 20  table which.    
0b20: 20 20 20 20 20 20 2a 2a 20 68 61 73 20 74 68 65        ** has the
0b30: 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61 6e   same name as an
0b40: 6f 74 68 65 72 20 69 6e 64 65 78 20 6f 6e 20 61  other index on a
0b50: 20 70 65 72 6d 61 6e 65 6e 74 20 69 6e 64 65 78   permanent index
0b60: 2e 20 20 53 69 6e 63 65 0a 20 20 20 20 20 20 20  .  Since.       
0b70: 20 20 20 2a 2a 20 74 68 65 20 70 65 72 6d 61 6e     ** the perman
0b80: 65 6e 74 20 74 61 62 6c 65 20 69 73 20 68 69 64  ent table is hid
0b90: 64 65 6e 20 62 79 20 74 68 65 20 54 45 4d 50 20  den by the TEMP 
0ba0: 74 61 62 6c 65 2c 20 77 65 20 63 61 6e 20 61 6c  table, we can al
0bb0: 73 6f 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20  so.          ** 
0bc0: 73 61 66 65 6c 79 20 69 67 6e 6f 72 65 20 74 68  safely ignore th
0bd0: 65 20 69 6e 64 65 78 20 6f 6e 20 74 68 65 20 70  e index on the p
0be0: 65 72 6d 61 6e 65 6e 74 20 74 61 62 6c 65 2e 0a  ermanent table..
0bf0: 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20            */.   
0c00: 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 4e 6f 74         /* Do Not
0c10: 68 69 6e 67 20 2a 2f 3b 0a 20 20 20 20 20 20 20  hing */;.       
0c20: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
0c30: 20 20 70 49 6e 64 65 78 2d 3e 74 6e 75 6d 20 3d    pIndex->tnum =
0c40: 20 61 74 6f 69 28 61 72 67 76 5b 32 5d 29 3b 0a   atoi(argv[2]);.
0c50: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
0c60: 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
0c70: 20 20 20 7d 0a 20 20 20 20 64 65 66 61 75 6c 74     }.    default
0c80: 3a 20 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 69  : {.      /* Thi
0c90: 73 20 63 61 6e 20 6e 6f 74 20 68 61 70 70 65 6e  s can not happen
0ca0: 21 20 2a 2f 0a 20 20 20 20 20 20 6e 45 72 72 20  ! */.      nErr 
0cb0: 3d 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72  = 1;.      asser
0cc0: 74 28 20 6e 45 72 72 3d 3d 30 20 29 3b 0a 20 20  t( nErr==0 );.  
0cd0: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
0ce0: 20 6e 45 72 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20   nErr;.}../*.** 
0cf0: 41 74 74 65 6d 70 74 20 74 6f 20 72 65 61 64 20  Attempt to read 
0d00: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
0d10: 65 6d 61 20 61 6e 64 20 69 6e 69 74 69 61 6c 69  ema and initiali
0d20: 7a 65 20 69 6e 74 65 72 6e 61 6c 0a 2a 2a 20 64  ze internal.** d
0d30: 61 74 61 20 73 74 72 75 63 74 75 72 65 73 2e 20  ata structures. 
0d40: 20 52 65 74 75 72 6e 20 6f 6e 65 20 6f 66 20 74   Return one of t
0d50: 68 65 20 53 51 4c 49 54 45 5f 20 65 72 72 6f 72  he SQLITE_ error
0d60: 20 63 6f 64 65 73 20 74 6f 0a 2a 2a 20 69 6e 64   codes to.** ind
0d70: 69 63 61 74 65 20 73 75 63 63 65 73 73 20 6f 72  icate success or
0d80: 20 66 61 69 6c 75 72 65 2e 0a 2a 2a 0a 2a 2a 20   failure..**.** 
0d90: 41 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61  After the databa
0da0: 73 65 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  se is initialize
0db0: 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 49 6e  d, the SQLITE_In
0dc0: 69 74 69 61 6c 69 7a 65 64 0a 2a 2a 20 62 69 74  itialized.** bit
0dd0: 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 66   is set in the f
0de0: 6c 61 67 73 20 66 69 65 6c 64 20 6f 66 20 74 68  lags field of th
0df0: 65 20 73 71 6c 69 74 65 20 73 74 72 75 63 74 75  e sqlite structu
0e00: 72 65 2e 20 20 41 6e 0a 2a 2a 20 61 74 74 65 6d  re.  An.** attem
0e10: 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e  pt is made to in
0e20: 69 74 69 61 6c 69 7a 65 20 74 68 65 20 64 61 74  itialize the dat
0e30: 61 62 61 73 65 20 61 73 20 73 6f 6f 6e 20 61 73  abase as soon as
0e40: 20 69 74 0a 2a 2a 20 69 73 20 6f 70 65 6e 65 64   it.** is opened
0e50: 2e 20 20 49 66 20 74 68 61 74 20 66 61 69 6c 73  .  If that fails
0e60: 20 28 70 65 72 68 61 70 73 20 62 65 63 61 75 73   (perhaps becaus
0e70: 65 20 61 6e 6f 74 68 65 72 20 70 72 6f 63 65 73  e another proces
0e80: 73 0a 2a 2a 20 68 61 73 20 74 68 65 20 73 71 6c  s.** has the sql
0e90: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
0ea0: 20 6c 6f 63 6b 65 64 29 20 74 68 61 6e 20 61 6e   locked) than an
0eb0: 6f 74 68 65 72 20 61 74 74 65 6d 70 74 0a 2a 2a  other attempt.**
0ec0: 20 69 73 20 6d 61 64 65 20 74 68 65 20 66 69 72   is made the fir
0ed0: 73 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61  st time the data
0ee0: 62 61 73 65 20 69 73 20 61 63 63 65 73 73 65 64  base is accessed
0ef0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 49  ..*/.int sqliteI
0f00: 6e 69 74 28 73 71 6c 69 74 65 20 2a 64 62 2c 20  nit(sqlite *db, 
0f10: 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 29  char **pzErrMsg)
0f20: 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 42 74  {.  int rc;.  Bt
0f30: 43 75 72 73 6f 72 20 2a 63 75 72 4d 61 69 6e 3b  Cursor *curMain;
0f40: 0a 20 20 69 6e 74 20 73 69 7a 65 3b 0a 20 20 54  .  int size;.  T
0f50: 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 63 68  able *pTab;.  ch
0f60: 61 72 20 2a 61 7a 41 72 67 5b 36 5d 3b 0a 20 20  ar *azArg[6];.  
0f70: 69 6e 74 20 6d 65 74 61 5b 53 51 4c 49 54 45 5f  int meta[SQLITE_
0f80: 4e 5f 42 54 52 45 45 5f 4d 45 54 41 5d 3b 0a 20  N_BTREE_META];. 
0f90: 20 50 61 72 73 65 20 73 50 61 72 73 65 3b 0a 0a   Parse sParse;..
0fa0: 20 20 2f 2a 0a 20 20 2a 2a 20 54 68 65 20 6d 61    /*.  ** The ma
0fb0: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
0fc0: 62 6c 65 20 68 61 73 20 61 20 73 74 72 75 63 74  ble has a struct
0fd0: 75 72 65 20 6c 69 6b 65 20 74 68 69 73 0a 20 20  ure like this.  
0fe0: 2a 2f 0a 20 20 73 74 61 74 69 63 20 63 68 61 72  */.  static char
0ff0: 20 6d 61 73 74 65 72 5f 73 63 68 65 6d 61 5b 5d   master_schema[]
1000: 20 3d 20 0a 20 20 20 20 20 22 43 52 45 41 54 45   = .     "CREATE
1010: 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 6d 61   TABLE sqlite_ma
1020: 73 74 65 72 28 5c 6e 22 0a 20 20 20 20 20 22 20  ster(\n".     " 
1030: 20 74 79 70 65 20 74 65 78 74 2c 5c 6e 22 0a 20   type text,\n". 
1040: 20 20 20 20 22 20 20 6e 61 6d 65 20 74 65 78 74      "  name text
1050: 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 74 62 6c  ,\n".     "  tbl
1060: 5f 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20  _name text,\n". 
1070: 20 20 20 20 22 20 20 72 6f 6f 74 70 61 67 65 20      "  rootpage 
1080: 69 6e 74 65 67 65 72 2c 5c 6e 22 0a 20 20 20 20  integer,\n".    
1090: 20 22 20 20 73 71 6c 20 74 65 78 74 5c 6e 22 0a   "  sql text\n".
10a0: 20 20 20 20 20 22 29 22 0a 20 20 3b 0a 20 20 73       ")".  ;.  s
10b0: 74 61 74 69 63 20 63 68 61 72 20 74 65 6d 70 5f  tatic char temp_
10c0: 6d 61 73 74 65 72 5f 73 63 68 65 6d 61 5b 5d 20  master_schema[] 
10d0: 3d 20 0a 20 20 20 20 20 22 43 52 45 41 54 45 20  = .     "CREATE 
10e0: 54 45 4d 50 20 54 41 42 4c 45 20 73 71 6c 69 74  TEMP TABLE sqlit
10f0: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 28 5c 6e  e_temp_master(\n
1100: 22 0a 20 20 20 20 20 22 20 20 74 79 70 65 20 74  ".     "  type t
1110: 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20  ext,\n".     "  
1120: 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20  name text,\n".  
1130: 20 20 20 22 20 20 74 62 6c 5f 6e 61 6d 65 20 74     "  tbl_name t
1140: 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20  ext,\n".     "  
1150: 72 6f 6f 74 70 61 67 65 20 69 6e 74 65 67 65 72  rootpage integer
1160: 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 73 71 6c  ,\n".     "  sql
1170: 20 74 65 78 74 5c 6e 22 0a 20 20 20 20 20 22 29   text\n".     ")
1180: 22 0a 20 20 3b 0a 0a 20 20 2f 2a 20 54 68 65 20  ".  ;..  /* The 
1190: 66 6f 6c 6c 6f 77 69 6e 67 20 53 51 4c 20 77 69  following SQL wi
11a0: 6c 6c 20 72 65 61 64 20 74 68 65 20 73 63 68 65  ll read the sche
11b0: 6d 61 20 66 72 6f 6d 20 74 68 65 20 6d 61 73 74  ma from the mast
11c0: 65 72 20 74 61 62 6c 65 73 2e 0a 20 20 2a 2a 20  er tables..  ** 
11d0: 54 68 65 20 66 69 72 73 74 20 76 65 72 73 69 6f  The first versio
11e0: 6e 20 77 6f 72 6b 73 20 77 69 74 68 20 53 51 4c  n works with SQL
11f0: 69 74 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 73  ite file formats
1200: 20 32 20 6f 72 20 67 72 65 61 74 65 72 2e 0a 20   2 or greater.. 
1210: 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 76   ** The second v
1220: 65 72 73 69 6f 6e 20 69 73 20 66 6f 72 20 66 6f  ersion is for fo
1230: 72 6d 61 74 20 31 20 66 69 6c 65 73 2e 0a 20 20  rmat 1 files..  
1240: 2a 2a 0a 20 20 2a 2a 20 42 65 67 69 6e 6e 69 6e  **.  ** Beginnin
1250: 67 20 77 69 74 68 20 66 69 6c 65 20 66 6f 72 6d  g with file form
1260: 61 74 20 32 2c 20 74 68 65 20 72 6f 77 69 64 20  at 2, the rowid 
1270: 66 6f 72 20 6e 65 77 20 74 61 62 6c 65 20 65 6e  for new table en
1280: 74 72 69 65 73 0a 20 20 2a 2a 20 28 69 6e 63 6c  tries.  ** (incl
1290: 75 64 69 6e 67 20 65 6e 74 72 69 65 73 20 69 6e  uding entries in
12a0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 29 20   sqlite_master) 
12b0: 69 73 20 61 6e 20 69 6e 63 72 65 61 73 69 6e 67  is an increasing
12c0: 20 69 6e 74 65 67 65 72 2e 0a 20 20 2a 2a 20 53   integer..  ** S
12d0: 6f 20 66 6f 72 20 66 69 6c 65 20 66 6f 72 6d 61  o for file forma
12e0: 74 20 32 20 61 6e 64 20 6c 61 74 65 72 2c 20 77  t 2 and later, w
12f0: 65 20 63 61 6e 20 70 6c 61 79 20 62 61 63 6b 20  e can play back 
1300: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 20 20  sqlite_master.  
1310: 2a 2a 20 61 6e 64 20 61 6c 6c 20 74 68 65 20 43  ** and all the C
1320: 52 45 41 54 45 20 73 74 61 74 65 6d 65 6e 74 73  REATE statements
1330: 20 77 69 6c 6c 20 61 70 70 65 61 72 20 69 6e 20   will appear in 
1340: 74 68 65 20 72 69 67 68 74 20 6f 72 64 65 72 2e  the right order.
1350: 0a 20 20 2a 2a 20 42 75 74 20 77 69 74 68 20 66  .  ** But with f
1360: 69 6c 65 20 66 6f 72 6d 61 74 20 31 2c 20 74 61  ile format 1, ta
1370: 62 6c 65 20 65 6e 74 72 69 65 73 20 77 65 72 65  ble entries were
1380: 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 6f 20 77   random and so w
1390: 65 0a 20 20 2a 2a 20 68 61 76 65 20 74 6f 20 6d  e.  ** have to m
13a0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 43 52 45  ake sure the CRE
13b0: 41 54 45 20 54 41 42 4c 45 73 20 6f 63 63 75 72  ATE TABLEs occur
13c0: 20 62 65 66 6f 72 65 20 74 68 65 69 72 20 63 6f   before their co
13d0: 72 72 65 73 70 6f 6e 64 69 6e 67 0a 20 20 2a 2a  rresponding.  **
13e0: 20 43 52 45 41 54 45 20 49 4e 44 45 58 73 2e 20   CREATE INDEXs. 
13f0: 20 28 57 65 20 64 6f 6e 27 74 20 68 61 76 65 20   (We don't have 
1400: 74 6f 20 64 65 61 6c 20 77 69 74 68 20 43 52 45  to deal with CRE
1410: 41 54 45 20 56 49 45 57 20 6f 72 0a 20 20 2a 2a  ATE VIEW or.  **
1420: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
1430: 69 6e 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 31  in file format 1
1440: 20 62 65 63 61 75 73 65 20 74 68 6f 73 65 20 63   because those c
1450: 6f 6e 73 74 72 75 63 74 73 20 64 69 64 0a 20 20  onstructs did.  
1460: 2a 2a 20 6e 6f 74 20 65 78 69 73 74 20 74 68 65  ** not exist the
1470: 6e 2e 29 20 0a 20 20 2a 2f 0a 20 20 73 74 61 74  n.) .  */.  stat
1480: 69 63 20 63 68 61 72 20 69 6e 69 74 5f 73 63 72  ic char init_scr
1490: 69 70 74 5b 5d 20 3d 20 0a 20 20 20 20 20 22 53  ipt[] = .     "S
14a0: 45 4c 45 43 54 20 74 79 70 65 2c 20 6e 61 6d 65  ELECT type, name
14b0: 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 2c  , rootpage, sql,
14c0: 20 31 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74   1 FROM sqlite_t
14d0: 65 6d 70 5f 6d 61 73 74 65 72 20 22 0a 20 20 20  emp_master ".   
14e0: 20 20 22 55 4e 49 4f 4e 20 41 4c 4c 20 22 0a 20    "UNION ALL ". 
14f0: 20 20 20 20 22 53 45 4c 45 43 54 20 74 79 70 65      "SELECT type
1500: 2c 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65  , name, rootpage
1510: 2c 20 73 71 6c 2c 20 30 20 46 52 4f 4d 20 73 71  , sql, 0 FROM sq
1520: 6c 69 74 65 5f 6d 61 73 74 65 72 22 3b 0a 20 20  lite_master";.  
1530: 73 74 61 74 69 63 20 63 68 61 72 20 6f 6c 64 65  static char olde
1540: 72 5f 69 6e 69 74 5f 73 63 72 69 70 74 5b 5d 20  r_init_script[] 
1550: 3d 20 0a 20 20 20 20 20 22 53 45 4c 45 43 54 20  = .     "SELECT 
1560: 74 79 70 65 2c 20 6e 61 6d 65 2c 20 72 6f 6f 74  type, name, root
1570: 70 61 67 65 2c 20 73 71 6c 2c 20 31 20 46 52 4f  page, sql, 1 FRO
1580: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
1590: 73 74 65 72 20 22 0a 20 20 20 20 20 22 55 4e 49  ster ".     "UNI
15a0: 4f 4e 20 41 4c 4c 20 22 0a 20 20 20 20 20 22 53  ON ALL ".     "S
15b0: 45 4c 45 43 54 20 74 79 70 65 2c 20 6e 61 6d 65  ELECT type, name
15c0: 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 2c  , rootpage, sql,
15d0: 20 30 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d   0 FROM sqlite_m
15e0: 61 73 74 65 72 20 22 0a 20 20 20 20 20 22 57 48  aster ".     "WH
15f0: 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27  ERE type='table'
1600: 20 22 0a 20 20 20 20 20 22 55 4e 49 4f 4e 20 41   ".     "UNION A
1610: 4c 4c 20 22 0a 20 20 20 20 20 22 53 45 4c 45 43  LL ".     "SELEC
1620: 54 20 74 79 70 65 2c 20 6e 61 6d 65 2c 20 72 6f  T type, name, ro
1630: 6f 74 70 61 67 65 2c 20 73 71 6c 2c 20 30 20 46  otpage, sql, 0 F
1640: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
1650: 72 20 22 0a 20 20 20 20 20 22 57 48 45 52 45 20  r ".     "WHERE 
1660: 74 79 70 65 3d 27 69 6e 64 65 78 27 22 3b 0a 0a  type='index'";..
1670: 0a 20 20 2f 2a 20 43 6f 6e 73 74 72 75 63 74 20  .  /* Construct 
1680: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
1690: 73 3a 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  s: sqlite_master
16a0: 20 61 6e 64 20 73 71 6c 69 74 65 5f 74 65 6d 70   and sqlite_temp
16b0: 5f 6d 61 73 74 65 72 0a 20 20 2a 2f 0a 20 20 61  _master.  */.  a
16c0: 7a 41 72 67 5b 30 5d 20 3d 20 22 74 61 62 6c 65  zArg[0] = "table
16d0: 22 3b 0a 20 20 61 7a 41 72 67 5b 31 5d 20 3d 20  ";.  azArg[1] = 
16e0: 4d 41 53 54 45 52 5f 4e 41 4d 45 3b 0a 20 20 61  MASTER_NAME;.  a
16f0: 7a 41 72 67 5b 32 5d 20 3d 20 22 32 22 3b 0a 20  zArg[2] = "2";. 
1700: 20 61 7a 41 72 67 5b 33 5d 20 3d 20 6d 61 73 74   azArg[3] = mast
1710: 65 72 5f 73 63 68 65 6d 61 3b 0a 20 20 61 7a 41  er_schema;.  azA
1720: 72 67 5b 34 5d 20 3d 20 22 30 22 3b 0a 20 20 61  rg[4] = "0";.  a
1730: 7a 41 72 67 5b 35 5d 20 3d 20 30 3b 0a 20 20 73  zArg[5] = 0;.  s
1740: 71 6c 69 74 65 49 6e 69 74 43 61 6c 6c 62 61 63  qliteInitCallbac
1750: 6b 28 64 62 2c 20 35 2c 20 61 7a 41 72 67 2c 20  k(db, 5, azArg, 
1760: 30 29 3b 0a 20 20 70 54 61 62 20 3d 20 73 71 6c  0);.  pTab = sql
1770: 69 74 65 46 69 6e 64 54 61 62 6c 65 28 64 62 2c  iteFindTable(db,
1780: 20 4d 41 53 54 45 52 5f 4e 41 4d 45 29 3b 0a 20   MASTER_NAME);. 
1790: 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20   if( pTab ){.   
17a0: 20 70 54 61 62 2d 3e 72 65 61 64 4f 6e 6c 79 20   pTab->readOnly 
17b0: 3d 20 31 3b 0a 20 20 7d 0a 20 20 61 7a 41 72 67  = 1;.  }.  azArg
17c0: 5b 31 5d 20 3d 20 54 45 4d 50 5f 4d 41 53 54 45  [1] = TEMP_MASTE
17d0: 52 5f 4e 41 4d 45 3b 0a 20 20 61 7a 41 72 67 5b  R_NAME;.  azArg[
17e0: 33 5d 20 3d 20 74 65 6d 70 5f 6d 61 73 74 65 72  3] = temp_master
17f0: 5f 73 63 68 65 6d 61 3b 0a 20 20 61 7a 41 72 67  _schema;.  azArg
1800: 5b 34 5d 20 3d 20 22 31 22 3b 0a 20 20 73 71 6c  [4] = "1";.  sql
1810: 69 74 65 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  iteInitCallback(
1820: 64 62 2c 20 35 2c 20 61 7a 41 72 67 2c 20 30 29  db, 5, azArg, 0)
1830: 3b 0a 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74  ;.  pTab = sqlit
1840: 65 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 54  eFindTable(db, T
1850: 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 29  EMP_MASTER_NAME)
1860: 3b 0a 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a  ;.  if( pTab ){.
1870: 20 20 20 20 70 54 61 62 2d 3e 72 65 61 64 4f 6e      pTab->readOn
1880: 6c 79 20 3d 20 31 3b 0a 20 20 7d 0a 0a 20 20 2f  ly = 1;.  }..  /
1890: 2a 20 43 72 65 61 74 65 20 61 20 63 75 72 73 6f  * Create a curso
18a0: 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61  r to hold the da
18b0: 74 61 62 61 73 65 20 6f 70 65 6e 0a 20 20 2a 2f  tabase open.  */
18c0: 0a 20 20 69 66 28 20 64 62 2d 3e 70 42 65 3d 3d  .  if( db->pBe==
18d0: 30 20 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54  0 ) return SQLIT
18e0: 45 5f 4f 4b 3b 0a 20 20 72 63 20 3d 20 73 71 6c  E_OK;.  rc = sql
18f0: 69 74 65 42 74 72 65 65 43 75 72 73 6f 72 28 64  iteBtreeCursor(d
1900: 62 2d 3e 70 42 65 2c 20 32 2c 20 30 2c 20 26 63  b->pBe, 2, 0, &c
1910: 75 72 4d 61 69 6e 29 3b 0a 20 20 69 66 28 20 72  urMain);.  if( r
1920: 63 20 29 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a  c ) return rc;..
1930: 20 20 2f 2a 20 47 65 74 20 74 68 65 20 64 61 74    /* Get the dat
1940: 61 62 61 73 65 20 6d 65 74 61 20 69 6e 66 6f 72  abase meta infor
1950: 6d 61 74 69 6f 6e 0a 20 20 2a 2f 0a 20 20 72 63  mation.  */.  rc
1960: 20 3d 20 73 71 6c 69 74 65 42 74 72 65 65 47 65   = sqliteBtreeGe
1970: 74 4d 65 74 61 28 64 62 2d 3e 70 42 65 2c 20 6d  tMeta(db->pBe, m
1980: 65 74 61 29 3b 0a 20 20 69 66 28 20 72 63 20 29  eta);.  if( rc )
1990: 7b 0a 20 20 20 20 73 71 6c 69 74 65 42 74 72 65  {.    sqliteBtre
19a0: 65 43 6c 6f 73 65 43 75 72 73 6f 72 28 63 75 72  eCloseCursor(cur
19b0: 4d 61 69 6e 29 3b 0a 20 20 20 20 72 65 74 75 72  Main);.    retur
19c0: 6e 20 72 63 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e  n rc;.  }.  db->
19d0: 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20  schema_cookie = 
19e0: 6d 65 74 61 5b 31 5d 3b 0a 20 20 64 62 2d 3e 6e  meta[1];.  db->n
19f0: 65 78 74 5f 63 6f 6f 6b 69 65 20 3d 20 64 62 2d  ext_cookie = db-
1a00: 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 0a  >schema_cookie;.
1a10: 20 20 64 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61    db->file_forma
1a20: 74 20 3d 20 6d 65 74 61 5b 32 5d 3b 0a 20 20 73  t = meta[2];.  s
1a30: 69 7a 65 20 3d 20 6d 65 74 61 5b 33 5d 3b 0a 20  ize = meta[3];. 
1a40: 20 69 66 28 20 73 69 7a 65 3d 3d 30 20 29 7b 20   if( size==0 ){ 
1a50: 73 69 7a 65 20 3d 20 4d 41 58 5f 50 41 47 45 53  size = MAX_PAGES
1a60: 3b 20 7d 0a 20 20 64 62 2d 3e 63 61 63 68 65 5f  ; }.  db->cache_
1a70: 73 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 20 73  size = size;.  s
1a80: 71 6c 69 74 65 42 74 72 65 65 53 65 74 43 61 63  qliteBtreeSetCac
1a90: 68 65 53 69 7a 65 28 64 62 2d 3e 70 42 65 2c 20  heSize(db->pBe, 
1aa0: 73 69 7a 65 29 3b 0a 0a 20 20 2f 2a 0a 20 20 2a  size);..  /*.  *
1ab0: 2a 20 20 20 20 20 66 69 6c 65 5f 66 6f 72 6d 61  *     file_forma
1ac0: 74 3d 3d 31 20 20 20 20 56 65 72 73 69 6f 6e 20  t==1    Version 
1ad0: 32 2e 31 2e 30 2e 0a 20 20 2a 2a 20 20 20 20 20  2.1.0..  **     
1ae0: 66 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d 32 20 20  file_format==2  
1af0: 20 20 56 65 72 73 69 6f 6e 20 32 2e 32 2e 30 2e    Version 2.2.0.
1b00: 20 41 64 64 20 73 75 70 70 6f 72 74 20 66 6f 72   Add support for
1b10: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
1b20: 20 4b 45 59 2e 0a 20 20 2a 2a 20 20 20 20 20 66   KEY..  **     f
1b30: 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d 33 20 20 20  ile_format==3   
1b40: 20 56 65 72 73 69 6f 6e 20 32 2e 36 2e 30 2e 20   Version 2.6.0. 
1b50: 41 64 64 20 73 75 70 70 6f 72 74 20 66 6f 72 20  Add support for 
1b60: 73 65 70 61 72 61 74 65 20 6e 75 6d 65 72 69 63  separate numeric
1b70: 20 61 6e 64 0a 20 20 2a 2a 20 20 20 20 20 20 20   and.  **       
1b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b90: 74 65 78 74 20 64 61 74 61 74 79 70 65 73 2e 0a  text datatypes..
1ba0: 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 66    */.  if( db->f
1bb0: 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d 30 20 29 7b  ile_format==0 ){
1bc0: 0a 20 20 20 20 64 62 2d 3e 66 69 6c 65 5f 66 6f  .    db->file_fo
1bd0: 72 6d 61 74 20 3d 20 32 3b 0a 20 20 7d 65 6c 73  rmat = 2;.  }els
1be0: 65 20 69 66 28 20 64 62 2d 3e 66 69 6c 65 5f 66  e if( db->file_f
1bf0: 6f 72 6d 61 74 3e 32 20 29 7b 0a 20 20 20 20 73  ormat>2 ){.    s
1c00: 71 6c 69 74 65 42 74 72 65 65 43 6c 6f 73 65 43  qliteBtreeCloseC
1c10: 75 72 73 6f 72 28 63 75 72 4d 61 69 6e 29 3b 0a  ursor(curMain);.
1c20: 20 20 20 20 73 71 6c 69 74 65 53 65 74 53 74 72      sqliteSetStr
1c30: 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 75  ing(pzErrMsg, "u
1c40: 6e 73 75 70 70 6f 72 74 65 64 20 66 69 6c 65 20  nsupported file 
1c50: 66 6f 72 6d 61 74 22 2c 20 30 29 3b 0a 20 20 20  format", 0);.   
1c60: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
1c70: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65  OR;.  }..  /* Re
1c80: 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e  ad the schema in
1c90: 66 6f 72 6d 61 74 69 6f 6e 20 6f 75 74 20 6f 66  formation out of
1ca0: 20 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c   the schema tabl
1cb0: 65 73 0a 20 20 2a 2f 0a 20 20 6d 65 6d 73 65 74  es.  */.  memset
1cc0: 28 26 73 50 61 72 73 65 2c 20 30 2c 20 73 69 7a  (&sParse, 0, siz
1cd0: 65 6f 66 28 73 50 61 72 73 65 29 29 3b 0a 20 20  eof(sParse));.  
1ce0: 73 50 61 72 73 65 2e 64 62 20 3d 20 64 62 3b 0a  sParse.db = db;.
1cf0: 20 20 73 50 61 72 73 65 2e 70 42 65 20 3d 20 64    sParse.pBe = d
1d00: 62 2d 3e 70 42 65 3b 0a 20 20 73 50 61 72 73 65  b->pBe;.  sParse
1d10: 2e 78 43 61 6c 6c 62 61 63 6b 20 3d 20 73 71 6c  .xCallback = sql
1d20: 69 74 65 49 6e 69 74 43 61 6c 6c 62 61 63 6b 3b  iteInitCallback;
1d30: 0a 20 20 73 50 61 72 73 65 2e 70 41 72 67 20 3d  .  sParse.pArg =
1d40: 20 28 76 6f 69 64 2a 29 64 62 3b 0a 20 20 73 50   (void*)db;.  sP
1d50: 61 72 73 65 2e 69 6e 69 74 46 6c 61 67 20 3d 20  arse.initFlag = 
1d60: 31 3b 0a 20 20 73 71 6c 69 74 65 52 75 6e 50 61  1;.  sqliteRunPa
1d70: 72 73 65 72 28 26 73 50 61 72 73 65 2c 0a 20 20  rser(&sParse,.  
1d80: 20 20 20 20 64 62 2d 3e 66 69 6c 65 5f 66 6f 72      db->file_for
1d90: 6d 61 74 3e 3d 32 20 3f 20 69 6e 69 74 5f 73 63  mat>=2 ? init_sc
1da0: 72 69 70 74 20 3a 20 6f 6c 64 65 72 5f 69 6e 69  ript : older_ini
1db0: 74 5f 73 63 72 69 70 74 2c 0a 20 20 20 20 20 20  t_script,.      
1dc0: 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 69 66 28  pzErrMsg);.  if(
1dd0: 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66   sqlite_malloc_f
1de0: 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 73 71 6c  ailed ){.    sql
1df0: 69 74 65 53 65 74 53 74 72 69 6e 67 28 70 7a 45  iteSetString(pzE
1e00: 72 72 4d 73 67 2c 20 22 6f 75 74 20 6f 66 20 6d  rrMsg, "out of m
1e10: 65 6d 6f 72 79 22 2c 20 30 29 3b 0a 20 20 20 20  emory", 0);.    
1e20: 73 50 61 72 73 65 2e 72 63 20 3d 20 53 51 4c 49  sParse.rc = SQLI
1e30: 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 73 71  TE_NOMEM;.    sq
1e40: 6c 69 74 65 42 74 72 65 65 52 6f 6c 6c 62 61 63  liteBtreeRollbac
1e50: 6b 28 64 62 2d 3e 70 42 65 29 3b 0a 20 20 20 20  k(db->pBe);.    
1e60: 73 71 6c 69 74 65 52 65 73 65 74 49 6e 74 65 72  sqliteResetInter
1e70: 6e 61 6c 53 63 68 65 6d 61 28 64 62 29 3b 0a 20  nalSchema(db);. 
1e80: 20 7d 0a 20 20 69 66 28 20 73 50 61 72 73 65 2e   }.  if( sParse.
1e90: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
1ea0: 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c  .    db->flags |
1eb0: 3d 20 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c  = SQLITE_Initial
1ec0: 69 7a 65 64 3b 0a 20 20 20 20 73 71 6c 69 74 65  ized;.    sqlite
1ed0: 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68  CommitInternalCh
1ee0: 61 6e 67 65 73 28 64 62 29 3b 0a 20 20 7d 65 6c  anges(db);.  }el
1ef0: 73 65 7b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67  se{.    db->flag
1f00: 73 20 26 3d 20 7e 53 51 4c 49 54 45 5f 49 6e 69  s &= ~SQLITE_Ini
1f10: 74 69 61 6c 69 7a 65 64 3b 0a 20 20 20 20 73 71  tialized;.    sq
1f20: 6c 69 74 65 52 65 73 65 74 49 6e 74 65 72 6e 61  liteResetInterna
1f30: 6c 53 63 68 65 6d 61 28 64 62 29 3b 0a 20 20 7d  lSchema(db);.  }
1f40: 0a 20 20 73 71 6c 69 74 65 42 74 72 65 65 43 6c  .  sqliteBtreeCl
1f50: 6f 73 65 43 75 72 73 6f 72 28 63 75 72 4d 61 69  oseCursor(curMai
1f60: 6e 29 3b 0a 20 20 72 65 74 75 72 6e 20 73 50 61  n);.  return sPa
1f70: 72 73 65 2e 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  rse.rc;.}../*.**
1f80: 20 54 68 65 20 76 65 72 73 69 6f 6e 20 6f 66 20   The version of 
1f90: 74 68 65 20 6c 69 62 72 61 72 79 0a 2a 2f 0a 63  the library.*/.c
1fa0: 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74 65  onst char sqlite
1fb0: 5f 76 65 72 73 69 6f 6e 5b 5d 20 3d 20 53 51 4c  _version[] = SQL
1fc0: 49 54 45 5f 56 45 52 53 49 4f 4e 3b 0a 0a 2f 2a  ITE_VERSION;../*
1fd0: 0a 2a 2a 20 44 6f 65 73 20 74 68 65 20 6c 69 62  .** Does the lib
1fe0: 72 61 72 79 20 65 78 70 65 63 74 20 64 61 74 61  rary expect data
1ff0: 20 74 6f 20 62 65 20 65 6e 63 6f 64 65 64 20 61   to be encoded a
2000: 73 20 55 54 46 2d 38 20 6f 72 20 69 73 6f 38 38  s UTF-8 or iso88
2010: 35 39 3f 20 20 54 68 65 0a 2a 2a 20 66 6f 6c 6c  59?  The.** foll
2020: 6f 77 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e  owing global con
2030: 73 74 61 6e 74 20 61 6c 77 61 79 73 20 6c 65 74  stant always let
2040: 73 20 75 73 20 6b 6e 6f 77 2e 0a 2a 2f 0a 23 69  s us know..*/.#i
2050: 66 64 65 66 20 53 51 4c 49 54 45 5f 55 54 46 38  fdef SQLITE_UTF8
2060: 0a 63 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69  .const char sqli
2070: 74 65 5f 65 6e 63 6f 64 69 6e 67 5b 5d 20 3d 20  te_encoding[] = 
2080: 22 55 54 46 2d 38 22 3b 0a 23 65 6c 73 65 0a 63  "UTF-8";.#else.c
2090: 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74 65  onst char sqlite
20a0: 5f 65 6e 63 6f 64 69 6e 67 5b 5d 20 3d 20 22 69  _encoding[] = "i
20b0: 73 6f 38 38 35 39 22 3b 0a 23 65 6e 64 69 66 0a  so8859";.#endif.
20c0: 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65  ./*.** Open a ne
20d0: 77 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  w SQLite databas
20e0: 65 2e 20 20 43 6f 6e 73 74 72 75 63 74 20 61 6e  e.  Construct an
20f0: 20 22 73 71 6c 69 74 65 22 20 73 74 72 75 63 74   "sqlite" struct
2100: 75 72 65 20 74 6f 20 64 65 66 69 6e 65 0a 2a 2a  ure to define.**
2110: 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68   the state of th
2120: 69 73 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  is database and 
2130: 72 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72  return a pointer
2140: 20 74 6f 20 74 68 61 74 20 73 74 72 75 63 74 75   to that structu
2150: 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 74 74  re..**.** An att
2160: 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20  empt is made to 
2170: 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 69  initialize the i
2180: 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 20 73 74  n-memory data st
2190: 72 75 63 74 75 72 65 73 20 74 68 61 74 0a 2a 2a  ructures that.**
21a0: 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 62 61   hold the databa
21b0: 73 65 20 73 63 68 65 6d 61 2e 20 20 42 75 74 20  se schema.  But 
21c0: 69 66 20 74 68 69 73 20 66 61 69 6c 73 20 28 62  if this fails (b
21d0: 65 63 61 75 73 65 20 74 68 65 20 73 63 68 65 6d  ecause the schem
21e0: 61 20 66 69 6c 65 0a 2a 2a 20 69 73 20 6c 6f 63  a file.** is loc
21f0: 6b 65 64 29 20 74 68 65 6e 20 74 68 61 74 20 73  ked) then that s
2200: 74 65 70 20 69 73 20 64 65 66 65 72 72 65 64 20  tep is deferred 
2210: 75 6e 74 69 6c 20 74 68 65 20 66 69 72 73 74 20  until the first 
2220: 63 61 6c 6c 20 74 6f 0a 2a 2a 20 73 71 6c 69 74  call to.** sqlit
2230: 65 5f 65 78 65 63 28 29 2e 0a 2a 2f 0a 73 71 6c  e_exec()..*/.sql
2240: 69 74 65 20 2a 73 71 6c 69 74 65 5f 6f 70 65 6e  ite *sqlite_open
2250: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69  (const char *zFi
2260: 6c 65 6e 61 6d 65 2c 20 69 6e 74 20 6d 6f 64 65  lename, int mode
2270: 2c 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73  , char **pzErrMs
2280: 67 29 7b 0a 20 20 73 71 6c 69 74 65 20 2a 64 62  g){.  sqlite *db
2290: 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 2f  ;.  int rc;..  /
22a0: 2a 20 41 6c 6c 6f 63 61 74 65 20 74 68 65 20 73  * Allocate the s
22b0: 71 6c 69 74 65 20 64 61 74 61 20 73 74 72 75 63  qlite data struc
22c0: 74 75 72 65 20 2a 2f 0a 20 20 64 62 20 3d 20 73  ture */.  db = s
22d0: 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 20 73 69 7a  qliteMalloc( siz
22e0: 65 6f 66 28 73 71 6c 69 74 65 29 20 29 3b 0a 20  eof(sqlite) );. 
22f0: 20 69 66 28 20 70 7a 45 72 72 4d 73 67 20 29 20   if( pzErrMsg ) 
2300: 2a 70 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20  *pzErrMsg = 0;. 
2310: 20 69 66 28 20 64 62 3d 3d 30 20 29 20 67 6f 74   if( db==0 ) got
2320: 6f 20 6e 6f 5f 6d 65 6d 5f 6f 6e 5f 6f 70 65 6e  o no_mem_on_open
2330: 3b 0a 20 20 73 71 6c 69 74 65 48 61 73 68 49 6e  ;.  sqliteHashIn
2340: 69 74 28 26 64 62 2d 3e 74 62 6c 48 61 73 68 2c  it(&db->tblHash,
2350: 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53 54 52   SQLITE_HASH_STR
2360: 49 4e 47 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74  ING, 0);.  sqlit
2370: 65 48 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 69  eHashInit(&db->i
2380: 64 78 48 61 73 68 2c 20 53 51 4c 49 54 45 5f 48  dxHash, SQLITE_H
2390: 41 53 48 5f 53 54 52 49 4e 47 2c 20 30 29 3b 0a  ASH_STRING, 0);.
23a0: 20 20 73 71 6c 69 74 65 48 61 73 68 49 6e 69 74    sqliteHashInit
23b0: 28 26 64 62 2d 3e 74 72 69 67 48 61 73 68 2c 20  (&db->trigHash, 
23c0: 53 51 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49  SQLITE_HASH_STRI
23d0: 4e 47 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65  NG, 0);.  sqlite
23e0: 48 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61 46  HashInit(&db->aF
23f0: 75 6e 63 2c 20 53 51 4c 49 54 45 5f 48 41 53 48  unc, SQLITE_HASH
2400: 5f 53 54 52 49 4e 47 2c 20 31 29 3b 0a 20 20 73  _STRING, 1);.  s
2410: 71 6c 69 74 65 52 65 67 69 73 74 65 72 42 75 69  qliteRegisterBui
2420: 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 64 62  ltinFunctions(db
2430: 29 3b 0a 20 20 64 62 2d 3e 6f 6e 45 72 72 6f 72  );.  db->onError
2440: 20 3d 20 4f 45 5f 44 65 66 61 75 6c 74 3b 0a 20   = OE_Default;. 
2450: 20 64 62 2d 3e 70 72 69 6f 72 4e 65 77 52 6f 77   db->priorNewRow
2460: 69 64 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 6d 61  id = 0;.  db->ma
2470: 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47  gic = SQLITE_MAG
2480: 49 43 5f 42 55 53 59 3b 0a 20 20 0a 20 20 2f 2a  IC_BUSY;.  .  /*
2490: 20 4f 70 65 6e 20 74 68 65 20 62 61 63 6b 65 6e   Open the backen
24a0: 64 20 64 61 74 61 62 61 73 65 20 64 72 69 76 65  d database drive
24b0: 72 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  r */.  rc = sqli
24c0: 74 65 42 74 72 65 65 4f 70 65 6e 28 7a 46 69 6c  teBtreeOpen(zFil
24d0: 65 6e 61 6d 65 2c 20 6d 6f 64 65 2c 20 4d 41 58  ename, mode, MAX
24e0: 5f 50 41 47 45 53 2c 20 26 64 62 2d 3e 70 42 65  _PAGES, &db->pBe
24f0: 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  );.  if( rc!=SQL
2500: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 77  ITE_OK ){.    sw
2510: 69 74 63 68 28 20 72 63 20 29 7b 0a 20 20 20 20  itch( rc ){.    
2520: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
2530: 20 20 20 20 20 73 71 6c 69 74 65 53 65 74 53 74       sqliteSetSt
2540: 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 22  ring(pzErrMsg, "
2550: 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64  unable to open d
2560: 61 74 61 62 61 73 65 3a 20 22 2c 20 7a 46 69 6c  atabase: ", zFil
2570: 65 6e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20  ename, 0);.     
2580: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c   }.    }.    sql
2590: 69 74 65 46 72 65 65 28 64 62 29 3b 0a 20 20 20  iteFree(db);.   
25a0: 20 73 71 6c 69 74 65 53 74 72 52 65 61 6c 6c 6f   sqliteStrReallo
25b0: 63 28 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  c(pzErrMsg);.   
25c0: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 0a   return 0;.  }..
25d0: 20 20 2f 2a 20 41 74 74 65 6d 70 74 20 74 6f 20    /* Attempt to 
25e0: 72 65 61 64 20 74 68 65 20 73 63 68 65 6d 61 20  read the schema 
25f0: 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
2600: 49 6e 69 74 28 64 62 2c 20 70 7a 45 72 72 4d 73  Init(db, pzErrMs
2610: 67 29 3b 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20  g);.  db->magic 
2620: 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f  = SQLITE_MAGIC_O
2630: 50 45 4e 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  PEN;.  if( sqlit
2640: 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20  e_malloc_failed 
2650: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 5f 63 6c  ){.    sqlite_cl
2660: 6f 73 65 28 64 62 29 3b 0a 20 20 20 20 67 6f 74  ose(db);.    got
2670: 6f 20 6e 6f 5f 6d 65 6d 5f 6f 6e 5f 6f 70 65 6e  o no_mem_on_open
2680: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63  ;.  }else if( rc
2690: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  !=SQLITE_OK && r
26a0: 63 21 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c!=SQLITE_BUSY )
26b0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 5f 63 6c 6f  {.    sqlite_clo
26c0: 73 65 28 64 62 29 3b 0a 20 20 20 20 73 71 6c 69  se(db);.    sqli
26d0: 74 65 53 74 72 52 65 61 6c 6c 6f 63 28 70 7a 45  teStrRealloc(pzE
26e0: 72 72 4d 73 67 29 3b 0a 20 20 20 20 72 65 74 75  rrMsg);.    retu
26f0: 72 6e 20 30 3b 0a 20 20 7d 65 6c 73 65 20 69 66  rn 0;.  }else if
2700: 28 20 70 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20  ( pzErrMsg ){.  
2710: 20 20 73 71 6c 69 74 65 46 72 65 65 28 2a 70 7a    sqliteFree(*pz
2720: 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 2a 70 7a  ErrMsg);.    *pz
2730: 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 7d 0a  ErrMsg = 0;.  }.
2740: 20 20 72 65 74 75 72 6e 20 64 62 3b 0a 0a 6e 6f    return db;..no
2750: 5f 6d 65 6d 5f 6f 6e 5f 6f 70 65 6e 3a 0a 20 20  _mem_on_open:.  
2760: 73 71 6c 69 74 65 53 65 74 53 74 72 69 6e 67 28  sqliteSetString(
2770: 70 7a 45 72 72 4d 73 67 2c 20 22 6f 75 74 20 6f  pzErrMsg, "out o
2780: 66 20 6d 65 6d 6f 72 79 22 2c 20 30 29 3b 0a 20  f memory", 0);. 
2790: 20 73 71 6c 69 74 65 53 74 72 52 65 61 6c 6c 6f   sqliteStrReallo
27a0: 63 28 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 72  c(pzErrMsg);.  r
27b0: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn 0;.}../*.*
27c0: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 52 4f 57  * Return the ROW
27d0: 49 44 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72  ID of the most r
27e0: 65 63 65 6e 74 20 69 6e 73 65 72 74 0a 2a 2f 0a  ecent insert.*/.
27f0: 69 6e 74 20 73 71 6c 69 74 65 5f 6c 61 73 74 5f  int sqlite_last_
2800: 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 73 71 6c  insert_rowid(sql
2810: 69 74 65 20 2a 64 62 29 7b 0a 20 20 72 65 74 75  ite *db){.  retu
2820: 72 6e 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64  rn db->lastRowid
2830: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  ;.}../*.** Retur
2840: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
2850: 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 6d  changes in the m
2860: 6f 73 74 20 72 65 63 65 6e 74 20 63 61 6c 6c 20  ost recent call 
2870: 74 6f 20 73 71 6c 69 74 65 5f 65 78 65 63 28 29  to sqlite_exec()
2880: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 5f  ..*/.int sqlite_
2890: 63 68 61 6e 67 65 73 28 73 71 6c 69 74 65 20 2a  changes(sqlite *
28a0: 64 62 29 7b 0a 20 20 72 65 74 75 72 6e 20 64 62  db){.  return db
28b0: 2d 3e 6e 43 68 61 6e 67 65 3b 0a 7d 0a 0a 2f 2a  ->nChange;.}../*
28c0: 0a 2a 2a 20 43 6c 6f 73 65 20 61 6e 20 65 78 69  .** Close an exi
28d0: 73 74 69 6e 67 20 53 51 4c 69 74 65 20 64 61 74  sting SQLite dat
28e0: 61 62 61 73 65 0a 2a 2f 0a 76 6f 69 64 20 73 71  abase.*/.void sq
28f0: 6c 69 74 65 5f 63 6c 6f 73 65 28 73 71 6c 69 74  lite_close(sqlit
2900: 65 20 2a 64 62 29 7b 0a 20 20 48 61 73 68 45 6c  e *db){.  HashEl
2910: 65 6d 20 2a 69 3b 0a 20 20 69 66 28 20 73 71 6c  em *i;.  if( sql
2920: 69 74 65 53 61 66 65 74 79 43 68 65 63 6b 28 64  iteSafetyCheck(d
2930: 62 29 20 7c 7c 20 73 71 6c 69 74 65 53 61 66 65  b) || sqliteSafe
2940: 74 79 4f 6e 28 64 62 29 20 29 7b 20 72 65 74 75  tyOn(db) ){ retu
2950: 72 6e 3b 20 7d 0a 20 20 64 62 2d 3e 6d 61 67 69  rn; }.  db->magi
2960: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  c = SQLITE_MAGIC
2970: 5f 43 4c 4f 53 45 44 3b 0a 20 20 73 71 6c 69 74  _CLOSED;.  sqlit
2980: 65 42 74 72 65 65 43 6c 6f 73 65 28 64 62 2d 3e  eBtreeClose(db->
2990: 70 42 65 29 3b 0a 20 20 73 71 6c 69 74 65 52 65  pBe);.  sqliteRe
29a0: 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
29b0: 61 28 64 62 29 3b 0a 20 20 69 66 28 20 64 62 2d  a(db);.  if( db-
29c0: 3e 70 42 65 54 65 6d 70 20 29 7b 0a 20 20 20 20  >pBeTemp ){.    
29d0: 73 71 6c 69 74 65 42 74 72 65 65 43 6c 6f 73 65  sqliteBtreeClose
29e0: 28 64 62 2d 3e 70 42 65 54 65 6d 70 29 3b 0a 20  (db->pBeTemp);. 
29f0: 20 7d 0a 20 20 66 6f 72 28 69 3d 73 71 6c 69 74   }.  for(i=sqlit
2a00: 65 48 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e  eHashFirst(&db->
2a10: 61 46 75 6e 63 29 3b 20 69 3b 20 69 3d 73 71 6c  aFunc); i; i=sql
2a20: 69 74 65 48 61 73 68 4e 65 78 74 28 69 29 29 7b  iteHashNext(i)){
2a30: 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46  .    FuncDef *pF
2a40: 75 6e 63 2c 20 2a 70 4e 65 78 74 3b 0a 20 20 20  unc, *pNext;.   
2a50: 20 66 6f 72 28 70 46 75 6e 63 20 3d 20 28 46 75   for(pFunc = (Fu
2a60: 6e 63 44 65 66 2a 29 73 71 6c 69 74 65 48 61 73  ncDef*)sqliteHas
2a70: 68 44 61 74 61 28 69 29 3b 20 70 46 75 6e 63 3b  hData(i); pFunc;
2a80: 20 70 46 75 6e 63 3d 70 4e 65 78 74 29 7b 0a 20   pFunc=pNext){. 
2a90: 20 20 20 20 20 70 4e 65 78 74 20 3d 20 70 46 75       pNext = pFu
2aa0: 6e 63 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20  nc->pNext;.     
2ab0: 20 73 71 6c 69 74 65 46 72 65 65 28 70 46 75 6e   sqliteFree(pFun
2ac0: 63 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  c);.    }.  }.  
2ad0: 73 71 6c 69 74 65 48 61 73 68 43 6c 65 61 72 28  sqliteHashClear(
2ae0: 26 64 62 2d 3e 61 46 75 6e 63 29 3b 0a 20 20 73  &db->aFunc);.  s
2af0: 71 6c 69 74 65 46 72 65 65 28 64 62 29 3b 0a 7d  qliteFree(db);.}
2b00: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 54  ../*.** Return T
2b10: 52 55 45 20 69 66 20 74 68 65 20 67 69 76 65 6e  RUE if the given
2b20: 20 53 51 4c 20 73 74 72 69 6e 67 20 65 6e 64 73   SQL string ends
2b30: 20 69 6e 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 2e   in a semicolon.
2b40: 0a 2a 2a 0a 2a 2a 20 53 70 65 63 69 61 6c 20 68  .**.** Special h
2b50: 61 6e 64 6c 69 6e 67 20 69 73 20 72 65 71 75 69  andling is requi
2b60: 72 65 20 66 6f 72 20 43 52 45 41 54 45 20 54 52  re for CREATE TR
2b70: 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74 73  IGGER statements
2b80: 2e 0a 2a 2a 20 57 68 65 6e 65 76 65 72 20 74 68  ..** Whenever th
2b90: 65 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  e CREATE TRIGGER
2ba0: 20 6b 65 79 77 6f 72 64 73 20 61 72 65 20 73 65   keywords are se
2bb0: 65 6e 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e  en, the statemen
2bc0: 74 0a 2a 2a 20 6d 75 73 74 20 65 6e 64 20 77 69  t.** must end wi
2bd0: 74 68 20 22 3b 45 4e 44 3b 22 2e 0a 2a 2f 0a 69  th ";END;"..*/.i
2be0: 6e 74 20 73 71 6c 69 74 65 5f 63 6f 6d 70 6c 65  nt sqlite_comple
2bf0: 74 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  te(const char *z
2c00: 53 71 6c 29 7b 0a 20 20 69 6e 74 20 69 73 43 6f  Sql){.  int isCo
2c10: 6d 70 6c 65 74 65 20 3d 20 31 3b 0a 20 20 69 6e  mplete = 1;.  in
2c20: 74 20 72 65 71 75 69 72 65 45 6e 64 20 3d 20 30  t requireEnd = 0
2c30: 3b 0a 20 20 69 6e 74 20 73 65 65 6e 54 65 78 74  ;.  int seenText
2c40: 20 3d 20 30 3b 0a 20 20 69 6e 74 20 73 65 65 6e   = 0;.  int seen
2c50: 43 72 65 61 74 65 20 3d 20 30 3b 0a 20 20 77 68  Create = 0;.  wh
2c60: 69 6c 65 28 20 2a 7a 53 71 6c 20 29 7b 0a 20 20  ile( *zSql ){.  
2c70: 20 20 73 77 69 74 63 68 28 20 2a 7a 53 71 6c 20    switch( *zSql 
2c80: 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 27 3b  ){.      case ';
2c90: 27 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 73 43  ': {.        isC
2ca0: 6f 6d 70 6c 65 74 65 20 3d 20 31 3b 0a 20 20 20  omplete = 1;.   
2cb0: 20 20 20 20 20 73 65 65 6e 54 65 78 74 20 3d 20       seenText = 
2cc0: 31 3b 0a 20 20 20 20 20 20 20 20 73 65 65 6e 43  1;.        seenC
2cd0: 72 65 61 74 65 20 3d 20 30 3b 0a 20 20 20 20 20  reate = 0;.     
2ce0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
2cf0: 7d 0a 20 20 20 20 20 20 63 61 73 65 20 27 20 27  }.      case ' '
2d00: 3a 0a 20 20 20 20 20 20 63 61 73 65 20 27 5c 74  :.      case '\t
2d10: 27 3a 0a 20 20 20 20 20 20 63 61 73 65 20 27 5c  ':.      case '\
2d20: 6e 27 3a 0a 20 20 20 20 20 20 63 61 73 65 20 27  n':.      case '
2d30: 5c 66 27 3a 20 7b 0a 20 20 20 20 20 20 20 20 62  \f': {.        b
2d40: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
2d50: 20 20 20 20 63 61 73 65 20 27 5b 27 3a 20 7b 0a      case '[': {.
2d60: 20 20 20 20 20 20 20 20 69 73 43 6f 6d 70 6c 65          isComple
2d70: 74 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  te = 0;.        
2d80: 73 65 65 6e 54 65 78 74 20 3d 20 31 3b 0a 20 20  seenText = 1;.  
2d90: 20 20 20 20 20 20 73 65 65 6e 43 72 65 61 74 65        seenCreate
2da0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7a 53   = 0;.        zS
2db0: 71 6c 2b 2b 3b 0a 20 20 20 20 20 20 20 20 77 68  ql++;.        wh
2dc0: 69 6c 65 28 20 2a 7a 53 71 6c 20 26 26 20 2a 7a  ile( *zSql && *z
2dd0: 53 71 6c 21 3d 27 5d 27 20 29 7b 20 7a 53 71 6c  Sql!=']' ){ zSql
2de0: 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 20 20 69 66  ++; }.        if
2df0: 28 20 2a 7a 53 71 6c 3d 3d 30 20 29 20 72 65 74  ( *zSql==0 ) ret
2e00: 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 20 20 62  urn 0;.        b
2e10: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
2e20: 20 20 20 20 63 61 73 65 20 27 22 27 3a 0a 20 20      case '"':.  
2e30: 20 20 20 20 63 61 73 65 20 27 5c 27 27 3a 20 7b      case '\'': {
2e40: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 63 20 3d  .        int c =
2e50: 20 2a 7a 53 71 6c 3b 0a 20 20 20 20 20 20 20 20   *zSql;.        
2e60: 69 73 43 6f 6d 70 6c 65 74 65 20 3d 20 30 3b 0a  isComplete = 0;.
2e70: 20 20 20 20 20 20 20 20 73 65 65 6e 54 65 78 74          seenText
2e80: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 73 65   = 1;.        se
2e90: 65 6e 43 72 65 61 74 65 20 3d 20 30 3b 0a 20 20  enCreate = 0;.  
2ea0: 20 20 20 20 20 20 7a 53 71 6c 2b 2b 3b 0a 20 20        zSql++;.  
2eb0: 20 20 20 20 20 20 77 68 69 6c 65 28 20 2a 7a 53        while( *zS
2ec0: 71 6c 20 26 26 20 2a 7a 53 71 6c 21 3d 63 20 29  ql && *zSql!=c )
2ed0: 7b 20 7a 53 71 6c 2b 2b 3b 20 7d 0a 20 20 20 20  { zSql++; }.    
2ee0: 20 20 20 20 69 66 28 20 2a 7a 53 71 6c 3d 3d 30      if( *zSql==0
2ef0: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20   ) return 0;.   
2f00: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2f10: 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20 27    }.      case '
2f20: 2d 27 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66  -': {.        if
2f30: 28 20 7a 53 71 6c 5b 31 5d 21 3d 27 2d 27 20 29  ( zSql[1]!='-' )
2f40: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 73 43 6f  {.          isCo
2f50: 6d 70 6c 65 74 65 20 3d 20 30 3b 0a 20 20 20 20  mplete = 0;.    
2f60: 20 20 20 20 20 20 73 65 65 6e 43 72 65 61 74 65        seenCreate
2f70: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
2f80: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d  break;.        }
2f90: 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20  .        while( 
2fa0: 2a 7a 53 71 6c 20 26 26 20 2a 7a 53 71 6c 21 3d  *zSql && *zSql!=
2fb0: 27 5c 6e 27 20 29 7b 20 7a 53 71 6c 2b 2b 3b 20  '\n' ){ zSql++; 
2fc0: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 2a 7a  }.        if( *z
2fd0: 53 71 6c 3d 3d 30 20 29 20 72 65 74 75 72 6e 20  Sql==0 ) return 
2fe0: 73 65 65 6e 54 65 78 74 20 26 26 20 69 73 43 6f  seenText && isCo
2ff0: 6d 70 6c 65 74 65 20 26 26 20 72 65 71 75 69 72  mplete && requir
3000: 65 45 6e 64 3d 3d 30 3b 0a 20 20 20 20 20 20 20  eEnd==0;.       
3010: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
3020: 20 20 20 20 20 20 63 61 73 65 20 27 63 27 3a 0a        case 'c':.
3030: 20 20 20 20 20 20 63 61 73 65 20 27 43 27 3a 20        case 'C': 
3040: 7b 0a 20 20 20 20 20 20 20 20 73 65 65 6e 54 65  {.        seenTe
3050: 78 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  xt = 1;.        
3060: 69 66 28 20 21 69 73 43 6f 6d 70 6c 65 74 65 20  if( !isComplete 
3070: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20  ) break;.       
3080: 20 69 73 43 6f 6d 70 6c 65 74 65 20 3d 20 30 3b   isComplete = 0;
3090: 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  .        if( sql
30a0: 69 74 65 53 74 72 4e 49 43 6d 70 28 7a 53 71 6c  iteStrNICmp(zSql
30b0: 2c 20 22 63 72 65 61 74 65 22 2c 20 36 29 21 3d  , "create", 6)!=
30c0: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  0 ) break;.     
30d0: 20 20 20 69 66 28 20 21 69 73 73 70 61 63 65 28     if( !isspace(
30e0: 7a 53 71 6c 5b 36 5d 29 20 29 20 62 72 65 61 6b  zSql[6]) ) break
30f0: 3b 0a 20 20 20 20 20 20 20 20 7a 53 71 6c 20 2b  ;.        zSql +
3100: 3d 20 35 3b 0a 20 20 20 20 20 20 20 20 73 65 65  = 5;.        see
3110: 6e 43 72 65 61 74 65 20 3d 20 31 3b 0a 20 20 20  nCreate = 1;.   
3120: 20 20 20 20 20 77 68 69 6c 65 28 20 69 73 73 70       while( issp
3130: 61 63 65 28 7a 53 71 6c 5b 31 5d 29 20 29 20 7a  ace(zSql[1]) ) z
3140: 53 71 6c 2b 2b 3b 0a 20 20 20 20 20 20 20 20 69  Sql++;.        i
3150: 66 28 20 73 71 6c 69 74 65 53 74 72 4e 49 43 6d  f( sqliteStrNICm
3160: 70 28 26 7a 53 71 6c 5b 31 5d 2c 22 74 72 69 67  p(&zSql[1],"trig
3170: 67 65 72 22 2c 20 37 29 21 3d 30 20 29 20 62 72  ger", 7)!=0 ) br
3180: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7a 53 71  eak;.        zSq
3190: 6c 20 2b 3d 20 37 3b 0a 20 20 20 20 20 20 20 20  l += 7;.        
31a0: 72 65 71 75 69 72 65 45 6e 64 2b 2b 3b 0a 20 20  requireEnd++;.  
31b0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
31c0: 20 20 20 7d 0a 20 20 20 20 20 20 63 61 73 65 20     }.      case 
31d0: 27 74 27 3a 0a 20 20 20 20 20 20 63 61 73 65 20  't':.      case 
31e0: 27 54 27 3a 20 7b 0a 20 20 20 20 20 20 20 20 73  'T': {.        s
31f0: 65 65 6e 54 65 78 74 20 3d 20 31 3b 0a 20 20 20  eenText = 1;.   
3200: 20 20 20 20 20 69 66 28 20 21 73 65 65 6e 43 72       if( !seenCr
3210: 65 61 74 65 20 29 20 62 72 65 61 6b 3b 0a 20 20  eate ) break;.  
3220: 20 20 20 20 20 20 73 65 65 6e 43 72 65 61 74 65        seenCreate
3230: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69 73   = 0;.        is
3240: 43 6f 6d 70 6c 65 74 65 20 3d 20 30 3b 0a 20 20  Complete = 0;.  
3250: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
3260: 53 74 72 4e 49 43 6d 70 28 7a 53 71 6c 2c 20 22  StrNICmp(zSql, "
3270: 74 72 69 67 67 65 72 22 2c 20 37 29 21 3d 30 20  trigger", 7)!=0 
3280: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20  ) break;.       
3290: 20 69 66 28 20 21 69 73 73 70 61 63 65 28 7a 53   if( !isspace(zS
32a0: 71 6c 5b 37 5d 29 20 29 20 62 72 65 61 6b 3b 0a  ql[7]) ) break;.
32b0: 20 20 20 20 20 20 20 20 7a 53 71 6c 20 2b 3d 20          zSql += 
32c0: 36 3b 0a 20 20 20 20 20 20 20 20 72 65 71 75 69  6;.        requi
32d0: 72 65 45 6e 64 2b 2b 3b 0a 20 20 20 20 20 20 20  reEnd++;.       
32e0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
32f0: 20 20 20 20 20 20 63 61 73 65 20 27 65 27 3a 0a        case 'e':.
3300: 20 20 20 20 20 20 63 61 73 65 20 27 45 27 3a 20        case 'E': 
3310: 7b 0a 20 20 20 20 20 20 20 20 73 65 65 6e 43 72  {.        seenCr
3320: 65 61 74 65 20 3d 20 30 3b 0a 20 20 20 20 20 20  eate = 0;.      
3330: 20 20 73 65 65 6e 54 65 78 74 20 3d 20 31 3b 0a    seenText = 1;.
3340: 20 20 20 20 20 20 20 20 69 66 28 20 21 69 73 43          if( !isC
3350: 6f 6d 70 6c 65 74 65 20 29 20 62 72 65 61 6b 3b  omplete ) break;
3360: 0a 20 20 20 20 20 20 20 20 69 73 43 6f 6d 70 6c  .        isCompl
3370: 65 74 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  ete = 0;.       
3380: 20 69 66 28 20 72 65 71 75 69 72 65 45 6e 64 3d   if( requireEnd=
3390: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  =0 ) break;.    
33a0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 53 74      if( sqliteSt
33b0: 72 4e 49 43 6d 70 28 7a 53 71 6c 2c 20 22 65 6e  rNICmp(zSql, "en
33c0: 64 22 2c 20 33 29 21 3d 30 20 29 20 62 72 65 61  d", 3)!=0 ) brea
33d0: 6b 3b 0a 20 20 20 20 20 20 20 20 7a 53 71 6c 20  k;.        zSql 
33e0: 2b 3d 20 32 3b 0a 20 20 20 20 20 20 20 20 77 68  += 2;.        wh
33f0: 69 6c 65 28 20 69 73 73 70 61 63 65 28 7a 53 71  ile( isspace(zSq
3400: 6c 5b 31 5d 29 20 29 20 7a 53 71 6c 2b 2b 3b 0a  l[1]) ) zSql++;.
3410: 20 20 20 20 20 20 20 20 69 66 28 20 7a 53 71 6c          if( zSql
3420: 5b 31 5d 3d 3d 27 3b 27 20 29 7b 0a 20 20 20 20  [1]==';' ){.    
3430: 20 20 20 20 20 20 7a 53 71 6c 2b 2b 3b 0a 20 20        zSql++;.  
3440: 20 20 20 20 20 20 20 20 69 73 43 6f 6d 70 6c 65          isComple
3450: 74 65 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  te = 1;.        
3460: 20 20 72 65 71 75 69 72 65 45 6e 64 2d 2d 3b 0a    requireEnd--;.
3470: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
3480: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
3490: 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20  .      default: 
34a0: 7b 0a 20 20 20 20 20 20 20 20 73 65 65 6e 43 72  {.        seenCr
34b0: 65 61 74 65 20 3d 20 30 3b 0a 20 20 20 20 20 20  eate = 0;.      
34c0: 20 20 73 65 65 6e 54 65 78 74 20 3d 20 31 3b 0a    seenText = 1;.
34d0: 20 20 20 20 20 20 20 20 69 73 43 6f 6d 70 6c 65          isComple
34e0: 74 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  te = 0;.        
34f0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
3500: 20 20 20 7d 0a 20 20 20 20 7a 53 71 6c 2b 2b 3b     }.    zSql++;
3510: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 73 65  .  }.  return se
3520: 65 6e 54 65 78 74 20 26 26 20 69 73 43 6f 6d 70  enText && isComp
3530: 6c 65 74 65 20 26 26 20 72 65 71 75 69 72 65 45  lete && requireE
3540: 6e 64 3d 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  nd==0;.}../*.** 
3550: 45 78 65 63 75 74 65 20 53 51 4c 20 63 6f 64 65  Execute SQL code
3560: 2e 20 20 52 65 74 75 72 6e 20 6f 6e 65 20 6f 66  .  Return one of
3570: 20 74 68 65 20 53 51 4c 49 54 45 5f 20 73 75 63   the SQLITE_ suc
3580: 63 65 73 73 2f 66 61 69 6c 75 72 65 0a 2a 2a 20  cess/failure.** 
3590: 63 6f 64 65 73 2e 20 20 41 6c 73 6f 20 77 72 69  codes.  Also wri
35a0: 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  te an error mess
35b0: 61 67 65 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20  age into memory 
35c0: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 0a 2a 2a  obtained from.**
35d0: 20 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20 6d 61   malloc() and ma
35e0: 6b 65 20 2a 70 7a 45 72 72 4d 73 67 20 70 6f 69  ke *pzErrMsg poi
35f0: 6e 74 20 74 6f 20 74 68 61 74 20 6d 65 73 73 61  nt to that messa
3600: 67 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ge..**.** If the
3610: 20 53 51 4c 20 69 73 20 61 20 71 75 65 72 79 2c   SQL is a query,
3620: 20 74 68 65 6e 20 66 6f 72 20 65 61 63 68 20 72   then for each r
3630: 6f 77 20 69 6e 20 74 68 65 20 71 75 65 72 79 20  ow in the query 
3640: 72 65 73 75 6c 74 0a 2a 2a 20 74 68 65 20 78 43  result.** the xC
3650: 61 6c 6c 62 61 63 6b 28 29 20 66 75 6e 63 74 69  allback() functi
3660: 6f 6e 20 69 73 20 63 61 6c 6c 65 64 2e 20 20 70  on is called.  p
3670: 41 72 67 20 62 65 63 6f 6d 65 73 20 74 68 65 20  Arg becomes the 
3680: 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e  first.** argumen
3690: 74 20 74 6f 20 78 43 61 6c 6c 62 61 63 6b 28 29  t to xCallback()
36a0: 2e 20 20 49 66 20 78 43 61 6c 6c 62 61 63 6b 3d  .  If xCallback=
36b0: 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 63 61 6c  NULL then no cal
36c0: 6c 62 61 63 6b 0a 2a 2a 20 69 73 20 69 6e 76 6f  lback.** is invo
36d0: 6b 65 64 2c 20 65 76 65 6e 20 66 6f 72 20 71 75  ked, even for qu
36e0: 65 72 69 65 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71  eries..*/.int sq
36f0: 6c 69 74 65 5f 65 78 65 63 28 0a 20 20 73 71 6c  lite_exec(.  sql
3700: 69 74 65 20 2a 64 62 2c 20 20 20 20 20 20 20 20  ite *db,        
3710: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
3720: 64 61 74 61 62 61 73 65 20 6f 6e 20 77 68 69 63  database on whic
3730: 68 20 74 68 65 20 53 51 4c 20 65 78 65 63 75 74  h the SQL execut
3740: 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  es */.  const ch
3750: 61 72 20 2a 7a 53 71 6c 2c 20 20 20 20 20 20 20  ar *zSql,       
3760: 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74      /* The SQL t
3770: 6f 20 62 65 20 65 78 65 63 75 74 65 64 20 2a 2f  o be executed */
3780: 0a 20 20 73 71 6c 69 74 65 5f 63 61 6c 6c 62 61  .  sqlite_callba
3790: 63 6b 20 78 43 61 6c 6c 62 61 63 6b 2c 20 20 2f  ck xCallback,  /
37a0: 2a 20 49 6e 76 6f 6b 65 20 74 68 69 73 20 63 61  * Invoke this ca
37b0: 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e 65 20 2a  llback routine *
37c0: 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 2c 20  /.  void *pArg, 
37d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e0: 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
37f0: 74 20 74 6f 20 78 43 61 6c 6c 62 61 63 6b 28 29  t to xCallback()
3800: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45   */.  char **pzE
3810: 72 72 4d 73 67 20 20 20 20 20 20 20 20 20 20 20  rrMsg           
3820: 20 20 2f 2a 20 57 72 69 74 65 20 65 72 72 6f 72    /* Write error
3830: 20 6d 65 73 73 61 67 65 73 20 68 65 72 65 20 2a   messages here *
3840: 2f 0a 29 7b 0a 20 20 50 61 72 73 65 20 73 50 61  /.){.  Parse sPa
3850: 72 73 65 3b 0a 0a 20 20 69 66 28 20 70 7a 45 72  rse;..  if( pzEr
3860: 72 4d 73 67 20 29 20 2a 70 7a 45 72 72 4d 73 67  rMsg ) *pzErrMsg
3870: 20 3d 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69   = 0;.  if( sqli
3880: 74 65 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29  teSafetyOn(db) )
3890: 20 67 6f 74 6f 20 65 78 65 63 5f 6d 69 73 75 73   goto exec_misus
38a0: 65 3b 0a 20 20 69 66 28 20 28 64 62 2d 3e 66 6c  e;.  if( (db->fl
38b0: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 49 6e 69  ags & SQLITE_Ini
38c0: 74 69 61 6c 69 7a 65 64 29 3d 3d 30 20 29 7b 0a  tialized)==0 ){.
38d0: 20 20 20 20 69 6e 74 20 72 63 20 3d 20 73 71 6c      int rc = sql
38e0: 69 74 65 49 6e 69 74 28 64 62 2c 20 70 7a 45 72  iteInit(db, pzEr
38f0: 72 4d 73 67 29 3b 0a 20 20 20 20 69 66 28 20 72  rMsg);.    if( r
3900: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
3910: 20 20 20 20 20 20 73 71 6c 69 74 65 53 74 72 52        sqliteStrR
3920: 65 61 6c 6c 6f 63 28 70 7a 45 72 72 4d 73 67 29  ealloc(pzErrMsg)
3930: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 53 61  ;.      sqliteSa
3940: 66 65 74 79 4f 66 66 28 64 62 29 3b 0a 20 20 20  fetyOff(db);.   
3950: 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20     return rc;.  
3960: 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 64 62    }.  }.  if( db
3970: 2d 3e 72 65 63 75 72 73 69 6f 6e 44 65 70 74 68  ->recursionDepth
3980: 3d 3d 30 20 29 7b 20 64 62 2d 3e 6e 43 68 61 6e  ==0 ){ db->nChan
3990: 67 65 20 3d 20 30 3b 20 7d 0a 20 20 64 62 2d 3e  ge = 0; }.  db->
39a0: 72 65 63 75 72 73 69 6f 6e 44 65 70 74 68 2b 2b  recursionDepth++
39b0: 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 50 61 72  ;.  memset(&sPar
39c0: 73 65 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 50  se, 0, sizeof(sP
39d0: 61 72 73 65 29 29 3b 0a 20 20 73 50 61 72 73 65  arse));.  sParse
39e0: 2e 64 62 20 3d 20 64 62 3b 0a 20 20 73 50 61 72  .db = db;.  sPar
39f0: 73 65 2e 70 42 65 20 3d 20 64 62 2d 3e 70 42 65  se.pBe = db->pBe
3a00: 3b 0a 20 20 73 50 61 72 73 65 2e 78 43 61 6c 6c  ;.  sParse.xCall
3a10: 62 61 63 6b 20 3d 20 78 43 61 6c 6c 62 61 63 6b  back = xCallback
3a20: 3b 0a 20 20 73 50 61 72 73 65 2e 70 41 72 67 20  ;.  sParse.pArg 
3a30: 3d 20 70 41 72 67 3b 0a 20 20 73 71 6c 69 74 65  = pArg;.  sqlite
3a40: 52 75 6e 50 61 72 73 65 72 28 26 73 50 61 72 73  RunParser(&sPars
3a50: 65 2c 20 7a 53 71 6c 2c 20 70 7a 45 72 72 4d 73  e, zSql, pzErrMs
3a60: 67 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  g);.  if( sqlite
3a70: 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 29  _malloc_failed )
3a80: 7b 0a 20 20 20 20 73 71 6c 69 74 65 53 65 74 53  {.    sqliteSetS
3a90: 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20  tring(pzErrMsg, 
3aa0: 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 2c  "out of memory",
3ab0: 20 30 29 3b 0a 20 20 20 20 73 50 61 72 73 65 2e   0);.    sParse.
3ac0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
3ad0: 4d 3b 0a 20 20 20 20 73 71 6c 69 74 65 42 74 72  M;.    sqliteBtr
3ae0: 65 65 52 6f 6c 6c 62 61 63 6b 28 64 62 2d 3e 70  eeRollback(db->p
3af0: 42 65 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d  Be);.    if( db-
3b00: 3e 70 42 65 54 65 6d 70 20 29 20 73 71 6c 69 74  >pBeTemp ) sqlit
3b10: 65 42 74 72 65 65 52 6f 6c 6c 62 61 63 6b 28 64  eBtreeRollback(d
3b20: 62 2d 3e 70 42 65 54 65 6d 70 29 3b 0a 20 20 20  b->pBeTemp);.   
3b30: 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 53   db->flags &= ~S
3b40: 51 4c 49 54 45 5f 49 6e 54 72 61 6e 73 3b 0a 20  QLITE_InTrans;. 
3b50: 20 20 20 73 71 6c 69 74 65 52 65 73 65 74 49 6e     sqliteResetIn
3b60: 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 29  ternalSchema(db)
3b70: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 53 74  ;.  }.  sqliteSt
3b80: 72 52 65 61 6c 6c 6f 63 28 70 7a 45 72 72 4d 73  rRealloc(pzErrMs
3b90: 67 29 3b 0a 20 20 69 66 28 20 73 50 61 72 73 65  g);.  if( sParse
3ba0: 2e 72 63 3d 3d 53 51 4c 49 54 45 5f 53 43 48 45  .rc==SQLITE_SCHE
3bb0: 4d 41 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  MA ){.    sqlite
3bc0: 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68  ResetInternalSch
3bd0: 65 6d 61 28 64 62 29 3b 0a 20 20 7d 0a 20 20 64  ema(db);.  }.  d
3be0: 62 2d 3e 72 65 63 75 72 73 69 6f 6e 44 65 70 74  b->recursionDept
3bf0: 68 2d 2d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  h--;.  if( sqlit
3c00: 65 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29  eSafetyOff(db) )
3c10: 20 67 6f 74 6f 20 65 78 65 63 5f 6d 69 73 75 73   goto exec_misus
3c20: 65 3b 0a 20 20 72 65 74 75 72 6e 20 73 50 61 72  e;.  return sPar
3c30: 73 65 2e 72 63 3b 0a 0a 65 78 65 63 5f 6d 69 73  se.rc;..exec_mis
3c40: 75 73 65 3a 0a 20 20 69 66 28 20 70 7a 45 72 72  use:.  if( pzErr
3c50: 4d 73 67 20 29 7b 0a 20 20 20 20 2a 70 7a 45 72  Msg ){.    *pzEr
3c60: 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 73 71  rMsg = 0;.    sq
3c70: 6c 69 74 65 53 65 74 53 74 72 69 6e 67 28 70 7a  liteSetString(pz
3c80: 45 72 72 4d 73 67 2c 20 73 71 6c 69 74 65 5f 65  ErrMsg, sqlite_e
3c90: 72 72 6f 72 5f 73 74 72 69 6e 67 28 53 51 4c 49  rror_string(SQLI
3ca0: 54 45 5f 4d 49 53 55 53 45 29 2c 20 30 29 3b 0a  TE_MISUSE), 0);.
3cb0: 20 20 20 20 73 71 6c 69 74 65 53 74 72 52 65 61      sqliteStrRea
3cc0: 6c 6c 6f 63 28 70 7a 45 72 72 4d 73 67 29 3b 0a  lloc(pzErrMsg);.
3cd0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 53 51 4c    }.  return SQL
3ce0: 49 54 45 5f 4d 49 53 55 53 45 3b 0a 7d 0a 0a 2f  ITE_MISUSE;.}../
3cf0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 73 74  *.** Return a st
3d00: 61 74 69 63 20 73 74 72 69 6e 67 20 74 68 61 74  atic string that
3d10: 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20 6b   describes the k
3d20: 69 6e 64 20 6f 66 20 65 72 72 6f 72 20 73 70 65  ind of error spe
3d30: 63 69 66 69 65 64 20 69 6e 20 74 68 65 0a 2a 2a  cified in the.**
3d40: 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 63 6f   argument..*/.co
3d50: 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
3d60: 5f 65 72 72 6f 72 5f 73 74 72 69 6e 67 28 69 6e  _error_string(in
3d70: 74 20 72 63 29 7b 0a 20 20 63 6f 6e 73 74 20 63  t rc){.  const c
3d80: 68 61 72 20 2a 7a 3b 0a 20 20 73 77 69 74 63 68  har *z;.  switch
3d90: 28 20 72 63 20 29 7b 0a 20 20 20 20 63 61 73 65  ( rc ){.    case
3da0: 20 53 51 4c 49 54 45 5f 4f 4b 3a 20 20 20 20 20   SQLITE_OK:     
3db0: 20 20 20 20 7a 20 3d 20 22 6e 6f 74 20 61 6e 20      z = "not an 
3dc0: 65 72 72 6f 72 22 3b 20 20 20 20 20 20 20 20 20  error";         
3dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3de0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
3df0: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3a 20 20   SQLITE_ERROR:  
3e00: 20 20 20 20 7a 20 3d 20 22 53 51 4c 20 6c 6f 67      z = "SQL log
3e10: 69 63 20 65 72 72 6f 72 20 6f 72 20 6d 69 73 73  ic error or miss
3e20: 69 6e 67 20 64 61 74 61 62 61 73 65 22 3b 20 20  ing database";  
3e30: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
3e40: 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 4e 41 4c   SQLITE_INTERNAL
3e50: 3a 20 20 20 7a 20 3d 20 22 69 6e 74 65 72 6e 61  :   z = "interna
3e60: 6c 20 53 51 4c 69 74 65 20 69 6d 70 6c 65 6d 65  l SQLite impleme
3e70: 6e 74 61 74 69 6f 6e 20 66 6c 61 77 22 3b 20 20  ntation flaw";  
3e80: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
3e90: 20 53 51 4c 49 54 45 5f 50 45 52 4d 3a 20 20 20   SQLITE_PERM:   
3ea0: 20 20 20 20 7a 20 3d 20 22 61 63 63 65 73 73 20      z = "access 
3eb0: 70 65 72 6d 69 73 73 69 6f 6e 20 64 65 6e 69 65  permission denie
3ec0: 64 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  d";             
3ed0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
3ee0: 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3a 20 20   SQLITE_ABORT:  
3ef0: 20 20 20 20 7a 20 3d 20 22 63 61 6c 6c 62 61 63      z = "callbac
3f00: 6b 20 72 65 71 75 65 73 74 65 64 20 71 75 65 72  k requested quer
3f10: 79 20 61 62 6f 72 74 22 3b 20 20 20 20 20 20 20  y abort";       
3f20: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
3f30: 20 53 51 4c 49 54 45 5f 42 55 53 59 3a 20 20 20   SQLITE_BUSY:   
3f40: 20 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73      z = "databas
3f50: 65 20 69 73 20 6c 6f 63 6b 65 64 22 3b 20 20 20  e is locked";   
3f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f70: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
3f80: 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3a 20   SQLITE_LOCKED: 
3f90: 20 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73      z = "databas
3fa0: 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65  e table is locke
3fb0: 64 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  d";             
3fc0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
3fd0: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3a 20 20   SQLITE_NOMEM:  
3fe0: 20 20 20 20 7a 20 3d 20 22 6f 75 74 20 6f 66 20      z = "out of 
3ff0: 6d 65 6d 6f 72 79 22 3b 20 20 20 20 20 20 20 20  memory";        
4000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4010: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
4020: 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59   SQLITE_READONLY
4030: 3a 20 20 20 7a 20 3d 20 22 61 74 74 65 6d 70 74  :   z = "attempt
4040: 20 74 6f 20 77 72 69 74 65 20 61 20 72 65 61 64   to write a read
4050: 6f 6e 6c 79 20 64 61 74 61 62 61 73 65 22 3b 20  only database"; 
4060: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
4070: 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50   SQLITE_INTERRUP
4080: 54 3a 20 20 7a 20 3d 20 22 69 6e 74 65 72 72 75  T:  z = "interru
4090: 70 74 65 64 22 3b 20 20 20 20 20 20 20 20 20 20  pted";          
40a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40b0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
40c0: 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 3a 20 20   SQLITE_IOERR:  
40d0: 20 20 20 20 7a 20 3d 20 22 64 69 73 6b 20 49 2f      z = "disk I/
40e0: 4f 20 65 72 72 6f 72 22 3b 20 20 20 20 20 20 20  O error";       
40f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4100: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
4110: 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 3a   SQLITE_CORRUPT:
4120: 20 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73      z = "databas
4130: 65 20 64 69 73 6b 20 69 6d 61 67 65 20 69 73 20  e disk image is 
4140: 6d 61 6c 66 6f 72 6d 65 64 22 3b 20 20 20 20 20  malformed";     
4150: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
4160: 20 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44   SQLITE_NOTFOUND
4170: 3a 20 20 20 7a 20 3d 20 22 74 61 62 6c 65 20 6f  :   z = "table o
4180: 72 20 72 65 63 6f 72 64 20 6e 6f 74 20 66 6f 75  r record not fou
4190: 6e 64 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  nd";            
41a0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
41b0: 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3a 20 20 20   SQLITE_FULL:   
41c0: 20 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73      z = "databas
41d0: 65 20 69 73 20 66 75 6c 6c 22 3b 20 20 20 20 20  e is full";     
41e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
41f0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
4200: 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e   SQLITE_CANTOPEN
4210: 3a 20 20 20 7a 20 3d 20 22 75 6e 61 62 6c 65 20  :   z = "unable 
4220: 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65  to open database
4230: 20 66 69 6c 65 22 3b 20 20 20 20 20 20 20 20 20   file";         
4240: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
4250: 20 53 51 4c 49 54 45 5f 50 52 4f 54 4f 43 4f 4c   SQLITE_PROTOCOL
4260: 3a 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73  :   z = "databas
4270: 65 20 6c 6f 63 6b 69 6e 67 20 70 72 6f 74 6f 63  e locking protoc
4280: 6f 6c 20 66 61 69 6c 75 72 65 22 3b 20 20 20 20  ol failure";    
4290: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
42a0: 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 3a 20 20   SQLITE_EMPTY:  
42b0: 20 20 20 20 7a 20 3d 20 22 74 61 62 6c 65 20 63      z = "table c
42c0: 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 61 74 61 22  ontains no data"
42d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
42e0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
42f0: 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3a 20   SQLITE_SCHEMA: 
4300: 20 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73      z = "databas
4310: 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61  e schema has cha
4320: 6e 67 65 64 22 3b 20 20 20 20 20 20 20 20 20 20  nged";          
4330: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
4340: 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3a 20   SQLITE_TOOBIG: 
4350: 20 20 20 20 7a 20 3d 20 22 74 6f 6f 20 6d 75 63      z = "too muc
4360: 68 20 64 61 74 61 20 66 6f 72 20 6f 6e 65 20 74  h data for one t
4370: 61 62 6c 65 20 72 6f 77 22 3b 20 20 20 20 20 20  able row";      
4380: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
4390: 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49   SQLITE_CONSTRAI
43a0: 4e 54 3a 20 7a 20 3d 20 22 63 6f 6e 73 74 72 61  NT: z = "constra
43b0: 69 6e 74 20 66 61 69 6c 65 64 22 3b 20 20 20 20  int failed";    
43c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43d0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
43e0: 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48   SQLITE_MISMATCH
43f0: 3a 20 20 20 7a 20 3d 20 22 64 61 74 61 74 79 70  :   z = "datatyp
4400: 65 20 6d 69 73 6d 61 74 63 68 22 3b 20 20 20 20  e mismatch";    
4410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4420: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
4430: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3a 20   SQLITE_MISUSE: 
4440: 20 20 20 20 7a 20 3d 20 22 6c 69 62 72 61 72 79      z = "library
4450: 20 72 6f 75 74 69 6e 65 20 63 61 6c 6c 65 64 20   routine called 
4460: 6f 75 74 20 6f 66 20 73 65 71 75 65 6e 63 65 22  out of sequence"
4470: 3b 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61  ;break;.    defa
4480: 75 6c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  ult:            
4490: 20 20 20 20 7a 20 3d 20 22 75 6e 6b 6e 6f 77 6e      z = "unknown
44a0: 20 65 72 72 6f 72 22 3b 20 20 20 20 20 20 20 20   error";        
44b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44c0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 72 65   break;.  }.  re
44d0: 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn z;.}../*.**
44e0: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 6d   This routine im
44f0: 70 6c 65 6d 65 6e 74 73 20 61 20 62 75 73 79 20  plements a busy 
4500: 63 61 6c 6c 62 61 63 6b 20 74 68 61 74 20 73 6c  callback that sl
4510: 65 65 70 73 20 61 6e 64 20 74 72 69 65 73 0a 2a  eeps and tries.*
4520: 2a 20 61 67 61 69 6e 20 75 6e 74 69 6c 20 61 20  * again until a 
4530: 74 69 6d 65 6f 75 74 20 76 61 6c 75 65 20 69 73  timeout value is
4540: 20 72 65 61 63 68 65 64 2e 20 20 54 68 65 20 74   reached.  The t
4550: 69 6d 65 6f 75 74 20 76 61 6c 75 65 20 69 73 0a  imeout value is.
4560: 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75  ** an integer nu
4570: 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63  mber of millisec
4580: 6f 6e 64 73 20 70 61 73 73 65 64 20 69 6e 20 61  onds passed in a
4590: 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61  s the first.** a
45a0: 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74  rgument..*/.stat
45b0: 69 63 20 69 6e 74 20 73 71 6c 69 74 65 44 65 66  ic int sqliteDef
45c0: 61 75 6c 74 42 75 73 79 43 61 6c 6c 62 61 63 6b  aultBusyCallback
45d0: 28 0a 20 76 6f 69 64 20 2a 54 69 6d 65 6f 75 74  (. void *Timeout
45e0: 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ,           /* M
45f0: 61 78 69 6d 75 6d 20 61 6d 6f 75 6e 74 20 6f 66  aximum amount of
4600: 20 74 69 6d 65 20 74 6f 20 77 61 69 74 20 2a 2f   time to wait */
4610: 0a 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 4e 6f  . const char *No
4620: 74 55 73 65 64 2c 20 20 20 20 20 2f 2a 20 54 68  tUsed,     /* Th
4630: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
4640: 62 6c 65 20 74 68 61 74 20 69 73 20 62 75 73 79  ble that is busy
4650: 20 2a 2f 0a 20 69 6e 74 20 63 6f 75 6e 74 20 20   */. int count  
4660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
4670: 20 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73   Number of times
4680: 20 74 61 62 6c 65 20 68 61 73 20 62 65 65 6e 20   table has been 
4690: 62 75 73 79 20 2a 2f 0a 29 7b 0a 23 69 66 20 53  busy */.){.#if S
46a0: 51 4c 49 54 45 5f 4d 49 4e 5f 53 4c 45 45 50 5f  QLITE_MIN_SLEEP_
46b0: 4d 53 3d 3d 31 0a 20 20 69 6e 74 20 64 65 6c 61  MS==1.  int dela
46c0: 79 20 3d 20 31 30 3b 0a 20 20 69 6e 74 20 70 72  y = 10;.  int pr
46d0: 69 6f 72 5f 64 65 6c 61 79 20 3d 20 30 3b 0a 20  ior_delay = 0;. 
46e0: 20 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20 28   int timeout = (
46f0: 69 6e 74 29 54 69 6d 65 6f 75 74 3b 0a 20 20 69  int)Timeout;.  i
4700: 6e 74 20 69 3b 0a 0a 20 20 66 6f 72 28 69 3d 31  nt i;..  for(i=1
4710: 3b 20 69 3c 63 6f 75 6e 74 3b 20 69 2b 2b 29 7b  ; i<count; i++){
4720: 20 0a 20 20 20 20 70 72 69 6f 72 5f 64 65 6c 61   .    prior_dela
4730: 79 20 2b 3d 20 64 65 6c 61 79 3b 0a 20 20 20 20  y += delay;.    
4740: 64 65 6c 61 79 20 3d 20 64 65 6c 61 79 2a 32 3b  delay = delay*2;
4750: 0a 20 20 20 20 69 66 28 20 64 65 6c 61 79 3e 3d  .    if( delay>=
4760: 31 30 30 30 20 29 7b 0a 20 20 20 20 20 20 64 65  1000 ){.      de
4770: 6c 61 79 20 3d 20 31 30 30 30 3b 0a 20 20 20 20  lay = 1000;.    
4780: 20 20 70 72 69 6f 72 5f 64 65 6c 61 79 20 2b 3d    prior_delay +=
4790: 20 31 30 30 30 2a 28 63 6f 75 6e 74 20 2d 20 69   1000*(count - i
47a0: 20 2d 20 31 29 3b 0a 20 20 20 20 20 20 62 72 65   - 1);.      bre
47b0: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ak;.    }.  }.  
47c0: 69 66 28 20 70 72 69 6f 72 5f 64 65 6c 61 79 20  if( prior_delay 
47d0: 2b 20 64 65 6c 61 79 20 3e 20 74 69 6d 65 6f 75  + delay > timeou
47e0: 74 20 29 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d  t ){.    delay =
47f0: 20 74 69 6d 65 6f 75 74 20 2d 20 70 72 69 6f 72   timeout - prior
4800: 5f 64 65 6c 61 79 3b 0a 20 20 20 20 69 66 28 20  _delay;.    if( 
4810: 64 65 6c 61 79 3c 3d 30 20 29 20 72 65 74 75 72  delay<=0 ) retur
4820: 6e 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  n 0;.  }.  sqlit
4830: 65 4f 73 53 6c 65 65 70 28 64 65 6c 61 79 29 3b  eOsSleep(delay);
4840: 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 23 65 6c  .  return 1;.#el
4850: 73 65 0a 20 20 69 6e 74 20 74 69 6d 65 6f 75 74  se.  int timeout
4860: 20 3d 20 28 69 6e 74 29 54 69 6d 65 6f 75 74 3b   = (int)Timeout;
4870: 0a 20 20 69 66 28 20 28 63 6f 75 6e 74 2b 31 29  .  if( (count+1)
4880: 2a 31 30 30 30 20 3e 20 74 69 6d 65 6f 75 74 20  *1000 > timeout 
4890: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b  ){.    return 0;
48a0: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 4f 73 53  .  }.  sqliteOsS
48b0: 6c 65 65 70 28 31 30 30 30 29 3b 0a 20 20 72 65  leep(1000);.  re
48c0: 74 75 72 6e 20 31 3b 0a 23 65 6e 64 69 66 0a 7d  turn 1;.#endif.}
48d0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ../*.** This rou
48e0: 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 62 75  tine sets the bu
48f0: 73 79 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  sy callback for 
4900: 61 6e 20 53 71 6c 69 74 65 20 64 61 74 61 62 61  an Sqlite databa
4910: 73 65 20 74 6f 20 74 68 65 0a 2a 2a 20 67 69 76  se to the.** giv
4920: 65 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63  en callback func
4930: 74 69 6f 6e 20 77 69 74 68 20 74 68 65 20 67 69  tion with the gi
4940: 76 65 6e 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f  ven argument..*/
4950: 0a 76 6f 69 64 20 73 71 6c 69 74 65 5f 62 75 73  .void sqlite_bus
4960: 79 5f 68 61 6e 64 6c 65 72 28 0a 20 20 73 71 6c  y_handler(.  sql
4970: 69 74 65 20 2a 64 62 2c 0a 20 20 69 6e 74 20 28  ite *db,.  int (
4980: 2a 78 42 75 73 79 29 28 76 6f 69 64 2a 2c 63 6f  *xBusy)(void*,co
4990: 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 2c 0a  nst char*,int),.
49a0: 20 20 76 6f 69 64 20 2a 70 41 72 67 0a 29 7b 0a    void *pArg.){.
49b0: 20 20 64 62 2d 3e 78 42 75 73 79 43 61 6c 6c 62    db->xBusyCallb
49c0: 61 63 6b 20 3d 20 78 42 75 73 79 3b 0a 20 20 64  ack = xBusy;.  d
49d0: 62 2d 3e 70 42 75 73 79 41 72 67 20 3d 20 70 41  b->pBusyArg = pA
49e0: 72 67 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  rg;.}../*.** Thi
49f0: 73 20 72 6f 75 74 69 6e 65 20 69 6e 73 74 61 6c  s routine instal
4a00: 6c 73 20 61 20 64 65 66 61 75 6c 74 20 62 75 73  ls a default bus
4a10: 79 20 68 61 6e 64 6c 65 72 20 74 68 61 74 20 77  y handler that w
4a20: 61 69 74 73 20 66 6f 72 20 74 68 65 0a 2a 2a 20  aits for the.** 
4a30: 73 70 65 63 69 66 69 65 64 20 6e 75 6d 62 65 72  specified number
4a40: 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73   of milliseconds
4a50: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
4a60: 67 20 30 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  g 0..*/.void sql
4a70: 69 74 65 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74  ite_busy_timeout
4a80: 28 73 71 6c 69 74 65 20 2a 64 62 2c 20 69 6e 74  (sqlite *db, int
4a90: 20 6d 73 29 7b 0a 20 20 69 66 28 20 6d 73 3e 30   ms){.  if( ms>0
4aa0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 5f 62   ){.    sqlite_b
4ab0: 75 73 79 5f 68 61 6e 64 6c 65 72 28 64 62 2c 20  usy_handler(db, 
4ac0: 73 71 6c 69 74 65 44 65 66 61 75 6c 74 42 75 73  sqliteDefaultBus
4ad0: 79 43 61 6c 6c 62 61 63 6b 2c 20 28 76 6f 69 64  yCallback, (void
4ae0: 2a 29 6d 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  *)ms);.  }else{.
4af0: 20 20 20 20 73 71 6c 69 74 65 5f 62 75 73 79 5f      sqlite_busy_
4b00: 68 61 6e 64 6c 65 72 28 64 62 2c 20 30 2c 20 30  handler(db, 0, 0
4b10: 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  );.  }.}../*.** 
4b20: 43 61 75 73 65 20 61 6e 79 20 70 65 6e 64 69 6e  Cause any pendin
4b30: 67 20 6f 70 65 72 61 74 69 6f 6e 20 74 6f 20 73  g operation to s
4b40: 74 6f 70 20 61 74 20 69 74 73 20 65 61 72 6c 69  top at its earli
4b50: 65 73 74 20 6f 70 70 6f 72 74 75 6e 69 74 79 2e  est opportunity.
4b60: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 5f  .*/.void sqlite_
4b70: 69 6e 74 65 72 72 75 70 74 28 73 71 6c 69 74 65  interrupt(sqlite
4b80: 20 2a 64 62 29 7b 0a 20 20 64 62 2d 3e 66 6c 61   *db){.  db->fla
4b90: 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74  gs |= SQLITE_Int
4ba0: 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  errupt;.}../*.**
4bb0: 20 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d 73   Windows systems
4bc0: 20 73 68 6f 75 6c 64 20 63 61 6c 6c 20 74 68 69   should call thi
4bd0: 73 20 72 6f 75 74 69 6e 65 20 74 6f 20 66 72 65  s routine to fre
4be0: 65 20 6d 65 6d 6f 72 79 20 74 68 61 74 0a 2a 2a  e memory that.**
4bf0: 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 6e 20   is returned in 
4c00: 74 68 65 20 69 6e 20 74 68 65 20 65 72 72 6d 73  the in the errms
4c10: 67 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73  g parameter of s
4c20: 71 6c 69 74 65 5f 6f 70 65 6e 28 29 20 77 68 65  qlite_open() whe
4c30: 6e 0a 2a 2a 20 53 51 4c 69 74 65 20 69 73 20 61  n.** SQLite is a
4c40: 20 44 4c 4c 2e 20 20 46 6f 72 20 73 6f 6d 65 20   DLL.  For some 
4c50: 72 65 61 73 6f 6e 2c 20 69 74 20 64 6f 65 73 20  reason, it does 
4c60: 6e 6f 74 20 77 6f 72 6b 20 74 6f 20 63 61 6c 6c  not work to call
4c70: 20 66 72 65 65 28 29 0a 2a 2a 20 64 69 72 65 63   free().** direc
4c80: 74 6c 79 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  tly..**.** Note 
4c90: 74 68 61 74 20 77 65 20 6e 65 65 64 20 74 6f 20  that we need to 
4ca0: 63 61 6c 6c 20 66 72 65 65 28 29 20 6e 6f 74 20  call free() not 
4cb0: 73 71 6c 69 74 65 46 72 65 65 28 29 20 68 65 72  sqliteFree() her
4cc0: 65 2c 20 73 69 6e 63 65 20 65 76 65 72 79 0a 2a  e, since every.*
4cd0: 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73  * string that is
4ce0: 20 65 78 70 6f 72 74 65 64 20 66 72 6f 6d 20 53   exported from S
4cf0: 51 4c 69 74 65 20 73 68 6f 75 6c 64 20 68 61 76  QLite should hav
4d00: 65 20 61 6c 72 65 61 64 79 20 70 61 73 73 65 64  e already passed
4d10: 20 74 68 72 6f 75 67 68 0a 2a 2a 20 73 71 6c 69   through.** sqli
4d20: 74 65 53 74 72 52 65 61 6c 6c 6f 63 28 29 2e 0a  teStrRealloc()..
4d30: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 5f 66  */.void sqlite_f
4d40: 72 65 65 6d 65 6d 28 76 6f 69 64 20 2a 70 29 7b  reemem(void *p){
4d50: 20 66 72 65 65 28 70 29 3b 20 7d 0a 0a 2f 2a 0a   free(p); }../*.
4d60: 2a 2a 20 57 69 6e 64 6f 77 73 20 73 79 73 74 65  ** Windows syste
4d70: 6d 73 20 6e 65 65 64 20 66 75 6e 63 74 69 6f 6e  ms need function
4d80: 73 20 74 6f 20 63 61 6c 6c 20 74 6f 20 72 65 74  s to call to ret
4d90: 75 72 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 76  urn the sqlite_v
4da0: 65 72 73 69 6f 6e 0a 2a 2a 20 61 6e 64 20 73 71  ersion.** and sq
4db0: 6c 69 74 65 5f 65 6e 63 6f 64 69 6e 67 20 73 74  lite_encoding st
4dc0: 72 69 6e 67 73 2e 0a 2a 2f 0a 63 6f 6e 73 74 20  rings..*/.const 
4dd0: 63 68 61 72 20 2a 73 71 6c 69 74 65 5f 6c 69 62  char *sqlite_lib
4de0: 76 65 72 73 69 6f 6e 28 76 6f 69 64 29 7b 20 72  version(void){ r
4df0: 65 74 75 72 6e 20 73 71 6c 69 74 65 5f 76 65 72  eturn sqlite_ver
4e00: 73 69 6f 6e 3b 20 7d 0a 63 6f 6e 73 74 20 63 68  sion; }.const ch
4e10: 61 72 20 2a 73 71 6c 69 74 65 5f 6c 69 62 65 6e  ar *sqlite_liben
4e20: 63 6f 64 69 6e 67 28 76 6f 69 64 29 7b 20 72 65  coding(void){ re
4e30: 74 75 72 6e 20 73 71 6c 69 74 65 5f 65 6e 63 6f  turn sqlite_enco
4e40: 64 69 6e 67 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 43  ding; }../*.** C
4e50: 72 65 61 74 65 20 6e 65 77 20 75 73 65 72 2d 64  reate new user-d
4e60: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73  efined functions
4e70: 2e 20 20 54 68 65 20 73 71 6c 69 74 65 5f 63 72  .  The sqlite_cr
4e80: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 0a  eate_function().
4e90: 2a 2a 20 72 6f 75 74 69 6e 65 20 63 72 65 61 74  ** routine creat
4ea0: 65 73 20 61 20 72 65 67 75 6c 61 72 20 66 75 6e  es a regular fun
4eb0: 63 74 69 6f 6e 20 61 6e 64 20 73 71 6c 69 74 65  ction and sqlite
4ec0: 5f 63 72 65 61 74 65 5f 61 67 67 72 65 67 61 74  _create_aggregat
4ed0: 65 28 29 0a 2a 2a 20 63 72 65 61 74 65 73 20 61  e().** creates a
4ee0: 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  n aggregate func
4ef0: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 50 61 73 73  tion..**.** Pass
4f00: 69 6e 67 20 61 20 4e 55 4c 4c 20 78 46 75 6e 63  ing a NULL xFunc
4f10: 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 4e 55 4c   argument or NUL
4f20: 4c 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e  L xStep and xFin
4f30: 61 6c 69 7a 65 20 61 72 67 75 6d 65 6e 74 73 0a  alize arguments.
4f40: 2a 2a 20 64 69 73 61 62 6c 65 73 20 74 68 65 20  ** disables the 
4f50: 66 75 6e 63 74 69 6f 6e 2e 20 20 43 61 6c 6c 69  function.  Calli
4f60: 6e 67 20 73 71 6c 69 74 65 5f 63 72 65 61 74 65  ng sqlite_create
4f70: 5f 66 75 6e 63 74 69 6f 6e 28 29 20 77 69 74 68  _function() with
4f80: 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 6e 61 6d   the.** same nam
4f90: 65 20 61 6e 64 20 6e 75 6d 62 65 72 20 6f 66 20  e and number of 
4fa0: 61 72 67 75 6d 65 6e 74 73 20 61 73 20 61 20 70  arguments as a p
4fb0: 72 69 6f 72 20 63 61 6c 6c 20 74 6f 0a 2a 2a 20  rior call to.** 
4fc0: 73 71 6c 69 74 65 5f 63 72 65 61 74 65 5f 61 67  sqlite_create_ag
4fd0: 67 72 65 67 61 74 65 28 29 20 64 69 73 61 62 6c  gregate() disabl
4fe0: 65 73 20 74 68 65 20 70 72 69 6f 72 20 63 61 6c  es the prior cal
4ff0: 6c 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 5f 63  l to.** sqlite_c
5000: 72 65 61 74 65 5f 61 67 67 72 65 67 61 74 65 28  reate_aggregate(
5010: 29 2c 20 61 6e 64 20 76 69 63 65 20 76 65 72 73  ), and vice vers
5020: 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 41 72 67  a..**.** If nArg
5030: 20 69 73 20 2d 31 20 69 74 20 6d 65 61 6e 73 20   is -1 it means 
5040: 74 68 61 74 20 74 68 69 73 20 66 75 6e 63 74 69  that this functi
5050: 6f 6e 20 77 69 6c 6c 20 61 63 63 65 70 74 20 61  on will accept a
5060: 6e 79 20 6e 75 6d 62 65 72 0a 2a 2a 20 6f 66 20  ny number.** of 
5070: 61 72 67 75 6d 65 6e 74 73 2c 20 69 6e 63 6c 75  arguments, inclu
5080: 64 69 6e 67 20 30 2e 0a 2a 2f 0a 69 6e 74 20 73  ding 0..*/.int s
5090: 71 6c 69 74 65 5f 63 72 65 61 74 65 5f 66 75 6e  qlite_create_fun
50a0: 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65 20  ction(.  sqlite 
50b0: 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 2f 2a  *db,          /*
50c0: 20 41 64 64 20 74 68 65 20 66 75 6e 63 74 69 6f   Add the functio
50d0: 6e 20 74 6f 20 74 68 69 73 20 64 61 74 61 62 61  n to this databa
50e0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
50f0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
5100: 4e 61 6d 65 2c 20 20 20 2f 2a 20 4e 61 6d 65 20  Name,   /* Name 
5110: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
5120: 74 6f 20 61 64 64 20 2a 2f 0a 20 20 69 6e 74 20  to add */.  int 
5130: 6e 41 72 67 2c 20 20 20 20 20 20 20 20 20 20 20  nArg,           
5140: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
5150: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 76 6f 69  guments */.  voi
5160: 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74  d (*xFunc)(sqlit
5170: 65 5f 66 75 6e 63 2a 2c 69 6e 74 2c 63 6f 6e 73  e_func*,int,cons
5180: 74 20 63 68 61 72 2a 2a 29 2c 20 20 2f 2a 20 54  t char**),  /* T
5190: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
51a0: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73  n */.  void *pUs
51b0: 65 72 44 61 74 61 20 20 20 20 20 20 2f 2a 20 55  erData      /* U
51c0: 73 65 72 20 64 61 74 61 20 2a 2f 0a 29 7b 0a 20  ser data */.){. 
51d0: 20 46 75 6e 63 44 65 66 20 2a 70 3b 0a 20 20 69   FuncDef *p;.  i
51e0: 66 28 20 64 62 3d 3d 30 20 7c 7c 20 7a 4e 61 6d  f( db==0 || zNam
51f0: 65 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 53 61  e==0 || sqliteSa
5200: 66 65 74 79 43 68 65 63 6b 28 64 62 29 20 29 20  fetyCheck(db) ) 
5210: 72 65 74 75 72 6e 20 31 3b 0a 20 20 70 20 3d 20  return 1;.  p = 
5220: 73 71 6c 69 74 65 46 69 6e 64 46 75 6e 63 74 69  sqliteFindFuncti
5230: 6f 6e 28 64 62 2c 20 7a 4e 61 6d 65 2c 20 73 74  on(db, zName, st
5240: 72 6c 65 6e 28 7a 4e 61 6d 65 29 2c 20 6e 41 72  rlen(zName), nAr
5250: 67 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 3d 3d  g, 1);.  if( p==
5260: 30 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20  0 ) return 1;.  
5270: 70 2d 3e 78 46 75 6e 63 20 3d 20 78 46 75 6e 63  p->xFunc = xFunc
5280: 3b 0a 20 20 70 2d 3e 78 53 74 65 70 20 3d 20 30  ;.  p->xStep = 0
5290: 3b 0a 20 20 70 2d 3e 78 46 69 6e 61 6c 69 7a 65  ;.  p->xFinalize
52a0: 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 55 73 65 72   = 0;.  p->pUser
52b0: 44 61 74 61 20 3d 20 70 55 73 65 72 44 61 74 61  Data = pUserData
52c0: 3b 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  ;.  return 0;.}.
52d0: 69 6e 74 20 73 71 6c 69 74 65 5f 63 72 65 61 74  int sqlite_creat
52e0: 65 5f 61 67 67 72 65 67 61 74 65 28 0a 20 20 73  e_aggregate(.  s
52f0: 71 6c 69 74 65 20 2a 64 62 2c 20 20 20 20 20 20  qlite *db,      
5300: 20 20 20 20 2f 2a 20 41 64 64 20 74 68 65 20 66      /* Add the f
5310: 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68 69 73 20  unction to this 
5320: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
5330: 69 6f 6e 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ion */.  const c
5340: 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 20 20 2f 2a  har *zName,   /*
5350: 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   Name of the fun
5360: 63 74 69 6f 6e 20 74 6f 20 61 64 64 20 2a 2f 0a  ction to add */.
5370: 20 20 69 6e 74 20 6e 41 72 67 2c 20 20 20 20 20    int nArg,     
5380: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
5390: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
53a0: 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29  .  void (*xStep)
53b0: 28 73 71 6c 69 74 65 5f 66 75 6e 63 2a 2c 69 6e  (sqlite_func*,in
53c0: 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2a 29 2c  t,const char**),
53d0: 20 2f 2a 20 54 68 65 20 73 74 65 70 20 66 75 6e   /* The step fun
53e0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
53f0: 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c  (*xFinalize)(sql
5400: 69 74 65 5f 66 75 6e 63 2a 29 2c 20 20 20 20 20  ite_func*),     
5410: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
5420: 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 76  finalizer */.  v
5430: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 20 20  oid *pUserData  
5440: 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61      /* User data
5450: 20 2a 2f 0a 29 7b 0a 20 20 46 75 6e 63 44 65 66   */.){.  FuncDef
5460: 20 2a 70 3b 0a 20 20 69 66 28 20 64 62 3d 3d 30   *p;.  if( db==0
5470: 20 7c 7c 20 7a 4e 61 6d 65 3d 3d 30 20 7c 7c 20   || zName==0 || 
5480: 73 71 6c 69 74 65 53 61 66 65 74 79 43 68 65 63  sqliteSafetyChec
5490: 6b 28 64 62 29 20 29 20 72 65 74 75 72 6e 20 31  k(db) ) return 1
54a0: 3b 0a 20 20 70 20 3d 20 73 71 6c 69 74 65 46 69  ;.  p = sqliteFi
54b0: 6e 64 46 75 6e 63 74 69 6f 6e 28 64 62 2c 20 7a  ndFunction(db, z
54c0: 4e 61 6d 65 2c 20 73 74 72 6c 65 6e 28 7a 4e 61  Name, strlen(zNa
54d0: 6d 65 29 2c 20 6e 41 72 67 2c 20 31 29 3b 0a 20  me), nArg, 1);. 
54e0: 20 69 66 28 20 70 3d 3d 30 20 29 20 72 65 74 75   if( p==0 ) retu
54f0: 72 6e 20 31 3b 0a 20 20 70 2d 3e 78 46 75 6e 63  rn 1;.  p->xFunc
5500: 20 3d 20 30 3b 0a 20 20 70 2d 3e 78 53 74 65 70   = 0;.  p->xStep
5510: 20 3d 20 78 53 74 65 70 3b 0a 20 20 70 2d 3e 78   = xStep;.  p->x
5520: 46 69 6e 61 6c 69 7a 65 20 3d 20 78 46 69 6e 61  Finalize = xFina
5530: 6c 69 7a 65 3b 0a 20 20 70 2d 3e 70 55 73 65 72  lize;.  p->pUser
5540: 44 61 74 61 20 3d 20 70 55 73 65 72 44 61 74 61  Data = pUserData
5550: 3b 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  ;.  return 0;.}.
5560: 0a 2f 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68  ./*.** Change th
5570: 65 20 64 61 74 61 74 79 70 65 20 66 6f 72 20 61  e datatype for a
5580: 6c 6c 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 74  ll functions wit
5590: 68 20 61 20 67 69 76 65 6e 20 6e 61 6d 65 2e 0a  h a given name..
55a0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 5f 66 75  */.int sqlite_fu
55b0: 6e 63 74 69 6f 6e 5f 74 79 70 65 28 73 71 6c 69  nction_type(sqli
55c0: 74 65 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68  te *db, const ch
55d0: 61 72 20 2a 7a 4e 61 6d 65 2c 20 69 6e 74 20 64  ar *zName, int d
55e0: 61 74 61 54 79 70 65 29 7b 0a 20 20 46 75 6e 63  ataType){.  Func
55f0: 44 65 66 20 2a 70 20 3d 20 28 46 75 6e 63 44 65  Def *p = (FuncDe
5600: 66 2a 29 73 71 6c 69 74 65 48 61 73 68 46 69 6e  f*)sqliteHashFin
5610: 64 28 26 64 62 2d 3e 61 46 75 6e 63 2c 20 7a 4e  d(&db->aFunc, zN
5620: 61 6d 65 2c 20 73 74 72 6c 65 6e 28 7a 4e 61 6d  ame, strlen(zNam
5630: 65 29 29 3b 0a 20 20 77 68 69 6c 65 28 20 70 20  e));.  while( p 
5640: 29 7b 0a 20 20 20 20 70 2d 3e 64 61 74 61 54 79  ){.    p->dataTy
5650: 70 65 20 3d 20 64 61 74 61 54 79 70 65 3b 20 0a  pe = dataType; .
5660: 20 20 20 20 70 20 3d 20 70 2d 3e 70 4e 65 78 74      p = p->pNext
5670: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 53  ;.  }.  return S
5680: 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a              QLITE_OK;.}.