/ Hex Artifact Content
Login

Artifact 531fab947f72d3b6e86476ed4594838a2fa277f5:


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 32 38 34 20 32 30 30 35 2f 30 33  ,v 1.284 2005/03
0280: 2f 32 39 20 30 33 3a 31 30 3a 35 39 20 64 61 6e  /29 03:10:59 dan
0290: 69 65 6c 6b 31 39 37 37 20 45 78 70 20 24 0a 2a  ielk1977 Exp $.*
02a0: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69  /.#include "sqli
02b0: 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63 6c 75 64  teInt.h".#includ
02c0: 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64  e "os.h".#includ
02d0: 65 20 3c 63 74 79 70 65 2e 68 3e 0a 0a 2f 2a 0a  e <ctype.h>../*.
02e0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
02f0: 20 63 6f 6e 73 74 61 6e 74 20 76 61 6c 75 65 20   constant value 
0300: 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20 53  is used by the S
0310: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
0320: 61 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 4c 49  and.** SQLITE_LI
0330: 54 54 4c 45 45 4e 44 49 41 4e 20 6d 61 63 72 6f  TTLEENDIAN macro
0340: 73 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 69 6e 74 20  s..*/.const int 
0350: 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a  sqlite3one = 1;.
0360: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
0370: 4f 4d 49 54 5f 47 4c 4f 42 41 4c 52 45 43 4f 56  OMIT_GLOBALRECOV
0380: 45 52 0a 2f 2a 0a 2a 2a 20 4c 69 6e 6b 65 64 20  ER./*.** Linked 
0390: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 6f 70 65 6e  list of all open
03a0: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
03b0: 73 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  s. This is used 
03c0: 62 79 20 74 68 65 20 0a 2a 2a 20 73 71 6c 69 74  by the .** sqlit
03d0: 65 33 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f 76 65  e3_global_recove
03e0: 72 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 45 6e  r() function. En
03f0: 74 72 69 65 73 20 61 72 65 20 61 64 64 65 64 20  tries are added 
0400: 74 6f 20 74 68 65 20 6c 69 73 74 0a 2a 2a 20 62  to the list.** b
0410: 79 20 6f 70 65 6e 44 61 74 61 62 61 73 65 28 29  y openDatabase()
0420: 20 61 6e 64 20 72 65 6d 6f 76 65 64 20 62 79 20   and removed by 
0430: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e  sqlite3_close().
0440: 0a 2a 2f 0a 73 74 61 74 69 63 20 73 71 6c 69 74  .*/.static sqlit
0450: 65 33 20 2a 70 44 62 4c 69 73 74 20 3d 20 30 3b  e3 *pDbList = 0;
0460: 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20  .#endif.../*.** 
0470: 46 69 6c 6c 20 74 68 65 20 49 6e 69 74 44 61 74  Fill the InitDat
0480: 61 20 73 74 72 75 63 74 75 72 65 20 77 69 74 68  a structure with
0490: 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
04a0: 65 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73  e that indicates
04b0: 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74  .** that the dat
04c0: 61 62 61 73 65 20 69 73 20 63 6f 72 72 75 70 74  abase is corrupt
04d0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
04e0: 20 63 6f 72 72 75 70 74 53 63 68 65 6d 61 28 49   corruptSchema(I
04f0: 6e 69 74 44 61 74 61 20 2a 70 44 61 74 61 2c 20  nitData *pData, 
0500: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 78 74  const char *zExt
0510: 72 61 29 7b 0a 20 20 69 66 28 20 21 73 71 6c 69  ra){.  if( !sqli
0520: 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65  te3_malloc_faile
0530: 64 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  d ){.    sqlite3
0540: 53 65 74 53 74 72 69 6e 67 28 70 44 61 74 61 2d  SetString(pData-
0550: 3e 70 7a 45 72 72 4d 73 67 2c 20 22 6d 61 6c 66  >pzErrMsg, "malf
0560: 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 20 73  ormed database s
0570: 63 68 65 6d 61 22 2c 0a 20 20 20 20 20 20 20 7a  chema",.       z
0580: 45 78 74 72 61 21 3d 30 20 26 26 20 7a 45 78 74  Extra!=0 && zExt
0590: 72 61 5b 30 5d 21 3d 30 20 3f 20 22 20 2d 20 22  ra[0]!=0 ? " - "
05a0: 20 3a 20 28 63 68 61 72 2a 29 30 2c 20 7a 45 78   : (char*)0, zEx
05b0: 74 72 61 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a  tra, (char*)0);.
05c0: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69    }.}../*.** Thi
05d0: 73 20 69 73 20 74 68 65 20 63 61 6c 6c 62 61 63  s is the callbac
05e0: 6b 20 72 6f 75 74 69 6e 65 20 66 6f 72 20 74 68  k routine for th
05f0: 65 20 63 6f 64 65 20 74 68 61 74 20 69 6e 69 74  e code that init
0600: 69 61 6c 69 7a 65 73 20 74 68 65 0a 2a 2a 20 64  ializes the.** d
0610: 61 74 61 62 61 73 65 2e 20 20 53 65 65 20 73 71  atabase.  See sq
0620: 6c 69 74 65 33 49 6e 69 74 28 29 20 62 65 6c 6f  lite3Init() belo
0630: 77 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  w for additional
0640: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a   information..**
0650: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73   This routine is
0660: 20 61 6c 73 6f 20 63 61 6c 6c 65 64 20 66 72 6f   also called fro
0670: 6d 20 74 68 65 20 4f 50 5f 50 61 72 73 65 53 63  m the OP_ParseSc
0680: 68 65 6d 61 20 6f 70 63 6f 64 65 20 6f 66 20 74  hema opcode of t
0690: 68 65 20 56 44 42 45 2e 0a 2a 2a 0a 2a 2a 20 45  he VDBE..**.** E
06a0: 61 63 68 20 63 61 6c 6c 62 61 63 6b 20 63 6f 6e  ach callback con
06b0: 74 61 69 6e 73 20 74 68 65 20 66 6f 6c 6c 6f 77  tains the follow
06c0: 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 3a  ing information:
06d0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 72 67 76 5b  .**.**     argv[
06e0: 30 5d 20 3d 20 6e 61 6d 65 20 6f 66 20 74 68 69  0] = name of thi
06f0: 6e 67 20 62 65 69 6e 67 20 63 72 65 61 74 65 64  ng being created
0700: 0a 2a 2a 20 20 20 20 20 61 72 67 76 5b 31 5d 20  .**     argv[1] 
0710: 3d 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  = root page numb
0720: 65 72 20 66 6f 72 20 74 61 62 6c 65 20 6f 72 20  er for table or 
0730: 69 6e 64 65 78 2e 20 20 4e 55 4c 4c 20 66 6f 72  index.  NULL for
0740: 20 74 72 69 67 67 65 72 20 6f 72 20 76 69 65 77   trigger or view
0750: 2e 0a 2a 2a 20 20 20 20 20 61 72 67 76 5b 32 5d  ..**     argv[2]
0760: 20 3d 20 53 51 4c 20 74 65 78 74 20 66 6f 72 20   = SQL text for 
0770: 74 68 65 20 43 52 45 41 54 45 20 73 74 61 74 65  the CREATE state
0780: 6d 65 6e 74 2e 0a 2a 2a 20 20 20 20 20 61 72 67  ment..**     arg
0790: 76 5b 33 5d 20 3d 20 22 31 22 20 66 6f 72 20 74  v[3] = "1" for t
07a0: 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 2c 20  emporary files, 
07b0: 22 30 22 20 66 6f 72 20 6d 61 69 6e 20 64 61 74  "0" for main dat
07c0: 61 62 61 73 65 2c 20 22 32 22 20 6f 72 20 6d 6f  abase, "2" or mo
07d0: 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  re.**           
07e0: 20 20 20 20 66 6f 72 20 61 75 78 69 6c 69 61 72      for auxiliar
07f0: 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  y database files
0800: 2e 0a 2a 2a 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ..**.*/.int sqli
0810: 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  te3InitCallback(
0820: 76 6f 69 64 20 2a 70 49 6e 69 74 2c 20 69 6e 74  void *pInit, int
0830: 20 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61 72   argc, char **ar
0840: 67 76 2c 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c  gv, char **azCol
0850: 4e 61 6d 65 29 7b 0a 20 20 49 6e 69 74 44 61 74  Name){.  InitDat
0860: 61 20 2a 70 44 61 74 61 20 3d 20 28 49 6e 69 74  a *pData = (Init
0870: 44 61 74 61 2a 29 70 49 6e 69 74 3b 0a 20 20 73  Data*)pInit;.  s
0880: 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 44 61  qlite3 *db = pDa
0890: 74 61 2d 3e 64 62 3b 0a 20 20 69 6e 74 20 69 44  ta->db;.  int iD
08a0: 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 61 72  b;..  assert( ar
08b0: 67 63 3d 3d 34 20 29 3b 0a 20 20 69 66 28 20 61  gc==4 );.  if( a
08c0: 72 67 76 3d 3d 30 20 29 20 72 65 74 75 72 6e 20  rgv==0 ) return 
08d0: 30 3b 20 20 20 2f 2a 20 4d 69 67 68 74 20 68 61  0;   /* Might ha
08e0: 70 70 65 6e 20 69 66 20 45 4d 50 54 59 5f 52 45  ppen if EMPTY_RE
08f0: 53 55 4c 54 5f 43 41 4c 4c 42 41 43 4b 53 20 61  SULT_CALLBACKS a
0900: 72 65 20 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 61  re on */.  if( a
0910: 72 67 76 5b 31 5d 3d 3d 30 20 7c 7c 20 61 72 67  rgv[1]==0 || arg
0920: 76 5b 33 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 63  v[3]==0 ){.    c
0930: 6f 72 72 75 70 74 53 63 68 65 6d 61 28 70 44 61  orruptSchema(pDa
0940: 74 61 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  ta, 0);.    retu
0950: 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 69 44 62 20  rn 1;.  }.  iDb 
0960: 3d 20 61 74 6f 69 28 61 72 67 76 5b 33 5d 29 3b  = atoi(argv[3]);
0970: 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
0980: 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
0990: 20 29 3b 0a 20 20 69 66 28 20 61 72 67 76 5b 32   );.  if( argv[2
09a0: 5d 20 26 26 20 61 72 67 76 5b 32 5d 5b 30 5d 20  ] && argv[2][0] 
09b0: 29 7b 0a 20 20 20 20 2f 2a 20 43 61 6c 6c 20 74  ){.    /* Call t
09c0: 68 65 20 70 61 72 73 65 72 20 74 6f 20 70 72 6f  he parser to pro
09d0: 63 65 73 73 20 61 20 43 52 45 41 54 45 20 54 41  cess a CREATE TA
09e0: 42 4c 45 2c 20 49 4e 44 45 58 20 6f 72 20 56 49  BLE, INDEX or VI
09f0: 45 57 2e 0a 20 20 20 20 2a 2a 20 42 75 74 20 62  EW..    ** But b
0a00: 65 63 61 75 73 65 20 64 62 2d 3e 69 6e 69 74 2e  ecause db->init.
0a10: 62 75 73 79 20 69 73 20 73 65 74 20 74 6f 20 31  busy is set to 1
0a20: 2c 20 6e 6f 20 56 44 42 45 20 63 6f 64 65 20 69  , no VDBE code i
0a30: 73 20 67 65 6e 65 72 61 74 65 64 0a 20 20 20 20  s generated.    
0a40: 2a 2a 20 6f 72 20 65 78 65 63 75 74 65 64 2e 20  ** or executed. 
0a50: 20 41 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20   All the parser 
0a60: 64 6f 65 73 20 69 73 20 62 75 69 6c 64 20 74 68  does is build th
0a70: 65 20 69 6e 74 65 72 6e 61 6c 20 64 61 74 61 0a  e internal data.
0a80: 20 20 20 20 2a 2a 20 73 74 72 75 63 74 75 72 65      ** structure
0a90: 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 20  s that describe 
0aa0: 74 68 65 20 74 61 62 6c 65 2c 20 69 6e 64 65 78  the table, index
0ab0: 2c 20 6f 72 20 76 69 65 77 2e 0a 20 20 20 20 2a  , or view..    *
0ac0: 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72  /.    char *zErr
0ad0: 3b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 20 20  ;.    int rc;.  
0ae0: 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e    assert( db->in
0af0: 69 74 2e 62 75 73 79 20 29 3b 0a 20 20 20 20 64  it.busy );.    d
0b00: 62 2d 3e 69 6e 69 74 2e 69 44 62 20 3d 20 69 44  b->init.iDb = iD
0b10: 62 3b 0a 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e  b;.    db->init.
0b20: 6e 65 77 54 6e 75 6d 20 3d 20 61 74 6f 69 28 61  newTnum = atoi(a
0b30: 72 67 76 5b 31 5d 29 3b 0a 20 20 20 20 72 63 20  rgv[1]);.    rc 
0b40: 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64  = sqlite3_exec(d
0b50: 62 2c 20 61 72 67 76 5b 32 5d 2c 20 30 2c 20 30  b, argv[2], 0, 0
0b60: 2c 20 26 7a 45 72 72 29 3b 0a 20 20 20 20 64 62  , &zErr);.    db
0b70: 2d 3e 69 6e 69 74 2e 69 44 62 20 3d 20 30 3b 0a  ->init.iDb = 0;.
0b80: 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f      if( SQLITE_O
0b90: 4b 21 3d 72 63 20 29 7b 0a 20 20 20 20 20 20 63  K!=rc ){.      c
0ba0: 6f 72 72 75 70 74 53 63 68 65 6d 61 28 70 44 61  orruptSchema(pDa
0bb0: 74 61 2c 20 7a 45 72 72 29 3b 0a 20 20 20 20 20  ta, zErr);.     
0bc0: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45   sqlite3_free(zE
0bd0: 72 72 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  rr);.      retur
0be0: 6e 20 72 63 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  n rc;.    }.  }e
0bf0: 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  lse{.    /* If t
0c00: 68 65 20 53 51 4c 20 63 6f 6c 75 6d 6e 20 69 73  he SQL column is
0c10: 20 62 6c 61 6e 6b 20 69 74 20 6d 65 61 6e 73 20   blank it means 
0c20: 74 68 69 73 20 69 73 20 61 6e 20 69 6e 64 65 78  this is an index
0c30: 20 74 68 61 74 0a 20 20 20 20 2a 2a 20 77 61 73   that.    ** was
0c40: 20 63 72 65 61 74 65 64 20 74 6f 20 62 65 20 74   created to be t
0c50: 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
0c60: 72 20 74 6f 20 66 75 6c 66 69 6c 6c 20 61 20 55  r to fulfill a U
0c70: 4e 49 51 55 45 0a 20 20 20 20 2a 2a 20 63 6f 6e  NIQUE.    ** con
0c80: 73 74 72 61 69 6e 74 20 66 6f 72 20 61 20 43 52  straint for a CR
0c90: 45 41 54 45 20 54 41 42 4c 45 2e 20 20 54 68 65  EATE TABLE.  The
0ca0: 20 69 6e 64 65 78 20 73 68 6f 75 6c 64 20 68 61   index should ha
0cb0: 76 65 20 61 6c 72 65 61 64 79 0a 20 20 20 20 2a  ve already.    *
0cc0: 2a 20 62 65 65 6e 20 63 72 65 61 74 65 64 20 77  * been created w
0cd0: 68 65 6e 20 77 65 20 70 72 6f 63 65 73 73 65 64  hen we processed
0ce0: 20 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c   the CREATE TABL
0cf0: 45 2e 20 20 41 6c 6c 20 77 65 20 68 61 76 65 0a  E.  All we have.
0d00: 20 20 20 20 2a 2a 20 74 6f 20 64 6f 20 68 65 72      ** to do her
0d10: 65 20 69 73 20 72 65 63 6f 72 64 20 74 68 65 20  e is record the 
0d20: 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
0d30: 20 66 6f 72 20 74 68 61 74 20 69 6e 64 65 78 2e   for that index.
0d40: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 49 6e 64 65  .    */.    Inde
0d50: 78 20 2a 70 49 6e 64 65 78 3b 0a 20 20 20 20 70  x *pIndex;.    p
0d60: 49 6e 64 65 78 20 3d 20 73 71 6c 69 74 65 33 46  Index = sqlite3F
0d70: 69 6e 64 49 6e 64 65 78 28 64 62 2c 20 61 72 67  indIndex(db, arg
0d80: 76 5b 30 5d 2c 20 64 62 2d 3e 61 44 62 5b 69 44  v[0], db->aDb[iD
0d90: 62 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 69  b].zName);.    i
0da0: 66 28 20 70 49 6e 64 65 78 3d 3d 30 20 7c 7c 20  f( pIndex==0 || 
0db0: 70 49 6e 64 65 78 2d 3e 74 6e 75 6d 21 3d 30 20  pIndex->tnum!=0 
0dc0: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73  ){.      /* This
0dd0: 20 63 61 6e 20 6f 63 63 75 72 20 69 66 20 74 68   can occur if th
0de0: 65 72 65 20 65 78 69 73 74 73 20 61 6e 20 69 6e  ere exists an in
0df0: 64 65 78 20 6f 6e 20 61 20 54 45 4d 50 20 74 61  dex on a TEMP ta
0e00: 62 6c 65 20 77 68 69 63 68 0a 20 20 20 20 20 20  ble which.      
0e10: 2a 2a 20 68 61 73 20 74 68 65 20 73 61 6d 65 20  ** has the same 
0e20: 6e 61 6d 65 20 61 73 20 61 6e 6f 74 68 65 72 20  name as another 
0e30: 69 6e 64 65 78 20 6f 6e 20 61 20 70 65 72 6d 61  index on a perma
0e40: 6e 65 6e 74 20 69 6e 64 65 78 2e 20 20 53 69 6e  nent index.  Sin
0e50: 63 65 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  ce.      ** the 
0e60: 70 65 72 6d 61 6e 65 6e 74 20 74 61 62 6c 65 20  permanent table 
0e70: 69 73 20 68 69 64 64 65 6e 20 62 79 20 74 68 65  is hidden by the
0e80: 20 54 45 4d 50 20 74 61 62 6c 65 2c 20 77 65 20   TEMP table, we 
0e90: 63 61 6e 20 61 6c 73 6f 0a 20 20 20 20 20 20 2a  can also.      *
0ea0: 2a 20 73 61 66 65 6c 79 20 69 67 6e 6f 72 65 20  * safely ignore 
0eb0: 74 68 65 20 69 6e 64 65 78 20 6f 6e 20 74 68 65  the index on the
0ec0: 20 70 65 72 6d 61 6e 65 6e 74 20 74 61 62 6c 65   permanent table
0ed0: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
0ee0: 20 2f 2a 20 44 6f 20 4e 6f 74 68 69 6e 67 20 2a   /* Do Nothing *
0ef0: 2f 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  /;.    }else{.  
0f00: 20 20 20 20 70 49 6e 64 65 78 2d 3e 74 6e 75 6d      pIndex->tnum
0f10: 20 3d 20 61 74 6f 69 28 61 72 67 76 5b 31 5d 29   = atoi(argv[1])
0f20: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
0f30: 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 0;.}../*.**
0f40: 20 41 74 74 65 6d 70 74 20 74 6f 20 72 65 61 64   Attempt to read
0f50: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
0f60: 68 65 6d 61 20 61 6e 64 20 69 6e 69 74 69 61 6c  hema and initial
0f70: 69 7a 65 20 69 6e 74 65 72 6e 61 6c 0a 2a 2a 20  ize internal.** 
0f80: 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
0f90: 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 64 61 74  for a single dat
0fa0: 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65  abase file.  The
0fb0: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 0a 2a 2a   index of the.**
0fc0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
0fd0: 73 20 67 69 76 65 6e 20 62 79 20 69 44 62 2e 20  s given by iDb. 
0fe0: 20 69 44 62 3d 3d 30 20 69 73 20 75 73 65 64 20   iDb==0 is used 
0ff0: 66 6f 72 20 74 68 65 20 6d 61 69 6e 0a 2a 2a 20  for the main.** 
1000: 64 61 74 61 62 61 73 65 2e 20 20 69 44 62 3d 3d  database.  iDb==
1010: 31 20 73 68 6f 75 6c 64 20 6e 65 76 65 72 20 62  1 should never b
1020: 65 20 75 73 65 64 2e 20 20 69 44 62 3e 3d 32 20  e used.  iDb>=2 
1030: 69 73 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61  is used for.** a
1040: 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
1050: 65 73 2e 20 20 52 65 74 75 72 6e 20 6f 6e 65 20  es.  Return one 
1060: 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 20 65  of the SQLITE_ e
1070: 72 72 6f 72 20 63 6f 64 65 73 20 74 6f 0a 2a 2a  rror codes to.**
1080: 20 69 6e 64 69 63 61 74 65 20 73 75 63 63 65 73   indicate succes
1090: 73 20 6f 72 20 66 61 69 6c 75 72 65 2e 0a 2a 2f  s or failure..*/
10a0: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
10b0: 74 65 33 49 6e 69 74 4f 6e 65 28 73 71 6c 69 74  te3InitOne(sqlit
10c0: 65 33 20 2a 64 62 2c 20 69 6e 74 20 69 44 62 2c  e3 *db, int iDb,
10d0: 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67   char **pzErrMsg
10e0: 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 42  ){.  int rc;.  B
10f0: 74 43 75 72 73 6f 72 20 2a 63 75 72 4d 61 69 6e  tCursor *curMain
1100: 3b 0a 20 20 69 6e 74 20 73 69 7a 65 3b 0a 20 20  ;.  int size;.  
1110: 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 63  Table *pTab;.  c
1120: 68 61 72 20 63 6f 6e 73 74 20 2a 61 7a 41 72 67  har const *azArg
1130: 5b 35 5d 3b 0a 20 20 63 68 61 72 20 7a 44 62 4e  [5];.  char zDbN
1140: 75 6d 5b 33 30 5d 3b 0a 20 20 69 6e 74 20 6d 65  um[30];.  int me
1150: 74 61 5b 31 30 5d 3b 0a 20 20 49 6e 69 74 44 61  ta[10];.  InitDa
1160: 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 20 20 63  ta initData;.  c
1170: 68 61 72 20 63 6f 6e 73 74 20 2a 7a 4d 61 73 74  har const *zMast
1180: 65 72 53 63 68 65 6d 61 3b 0a 20 20 63 68 61 72  erSchema;.  char
1190: 20 63 6f 6e 73 74 20 2a 7a 4d 61 73 74 65 72 4e   const *zMasterN
11a0: 61 6d 65 20 3d 20 53 43 48 45 4d 41 5f 54 41 42  ame = SCHEMA_TAB
11b0: 4c 45 28 69 44 62 29 3b 0a 0a 20 20 2f 2a 0a 20  LE(iDb);..  /*. 
11c0: 20 2a 2a 20 54 68 65 20 6d 61 73 74 65 72 20 64   ** The master d
11d0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 68 61  atabase table ha
11e0: 73 20 61 20 73 74 72 75 63 74 75 72 65 20 6c 69  s a structure li
11f0: 6b 65 20 74 68 69 73 0a 20 20 2a 2f 0a 20 20 73  ke this.  */.  s
1200: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
1210: 20 6d 61 73 74 65 72 5f 73 63 68 65 6d 61 5b 5d   master_schema[]
1220: 20 3d 20 0a 20 20 20 20 20 22 43 52 45 41 54 45   = .     "CREATE
1230: 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 6d 61   TABLE sqlite_ma
1240: 73 74 65 72 28 5c 6e 22 0a 20 20 20 20 20 22 20  ster(\n".     " 
1250: 20 74 79 70 65 20 74 65 78 74 2c 5c 6e 22 0a 20   type text,\n". 
1260: 20 20 20 20 22 20 20 6e 61 6d 65 20 74 65 78 74      "  name text
1270: 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 74 62 6c  ,\n".     "  tbl
1280: 5f 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20  _name text,\n". 
1290: 20 20 20 20 22 20 20 72 6f 6f 74 70 61 67 65 20      "  rootpage 
12a0: 69 6e 74 65 67 65 72 2c 5c 6e 22 0a 20 20 20 20  integer,\n".    
12b0: 20 22 20 20 73 71 6c 20 74 65 78 74 5c 6e 22 0a   "  sql text\n".
12c0: 20 20 20 20 20 22 29 22 0a 20 20 3b 0a 23 69 66       ")".  ;.#if
12d0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
12e0: 5f 54 45 4d 50 44 42 0a 20 20 73 74 61 74 69 63  _TEMPDB.  static
12f0: 20 63 6f 6e 73 74 20 63 68 61 72 20 74 65 6d 70   const char temp
1300: 5f 6d 61 73 74 65 72 5f 73 63 68 65 6d 61 5b 5d  _master_schema[]
1310: 20 3d 20 0a 20 20 20 20 20 22 43 52 45 41 54 45   = .     "CREATE
1320: 20 54 45 4d 50 20 54 41 42 4c 45 20 73 71 6c 69   TEMP TABLE sqli
1330: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 28 5c  te_temp_master(\
1340: 6e 22 0a 20 20 20 20 20 22 20 20 74 79 70 65 20  n".     "  type 
1350: 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20  text,\n".     " 
1360: 20 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20   name text,\n". 
1370: 20 20 20 20 22 20 20 74 62 6c 5f 6e 61 6d 65 20      "  tbl_name 
1380: 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20  text,\n".     " 
1390: 20 72 6f 6f 74 70 61 67 65 20 69 6e 74 65 67 65   rootpage intege
13a0: 72 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 73 71  r,\n".     "  sq
13b0: 6c 20 74 65 78 74 5c 6e 22 0a 20 20 20 20 20 22  l text\n".     "
13c0: 29 22 0a 20 20 3b 0a 23 65 6c 73 65 0a 20 20 23  )".  ;.#else.  #
13d0: 64 65 66 69 6e 65 20 74 65 6d 70 5f 6d 61 73 74  define temp_mast
13e0: 65 72 5f 73 63 68 65 6d 61 20 30 0a 23 65 6e 64  er_schema 0.#end
13f0: 69 66 0a 0a 20 20 61 73 73 65 72 74 28 20 69 44  if..  assert( iD
1400: 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
1410: 6e 44 62 20 29 3b 0a 0a 20 20 2f 2a 20 7a 4d 61  nDb );..  /* zMa
1420: 73 74 65 72 53 63 68 65 6d 61 20 61 6e 64 20 7a  sterSchema and z
1430: 49 6e 69 74 53 63 72 69 70 74 20 61 72 65 20 73  InitScript are s
1440: 65 74 20 74 6f 20 70 6f 69 6e 74 20 61 74 20 74  et to point at t
1450: 68 65 20 6d 61 73 74 65 72 20 73 63 68 65 6d 61  he master schema
1460: 0a 20 20 2a 2a 20 61 6e 64 20 69 6e 69 74 69 61  .  ** and initia
1470: 6c 69 73 61 74 69 6f 6e 20 73 63 72 69 70 74 20  lisation script 
1480: 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20  appropriate for 
1490: 74 68 65 20 64 61 74 61 62 61 73 65 20 62 65 69  the database bei
14a0: 6e 67 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 69  ng.  ** initiali
14b0: 73 65 64 2e 20 7a 4d 61 73 74 65 72 4e 61 6d 65  sed. zMasterName
14c0: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
14d0: 74 68 65 20 6d 61 73 74 65 72 20 74 61 62 6c 65  the master table
14e0: 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 21 4f 4d  ..  */.  if( !OM
14f0: 49 54 5f 54 45 4d 50 44 42 20 26 26 20 69 44 62  IT_TEMPDB && iDb
1500: 3d 3d 31 20 29 7b 0a 20 20 20 20 7a 4d 61 73 74  ==1 ){.    zMast
1510: 65 72 53 63 68 65 6d 61 20 3d 20 74 65 6d 70 5f  erSchema = temp_
1520: 6d 61 73 74 65 72 5f 73 63 68 65 6d 61 3b 0a 20  master_schema;. 
1530: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 4d 61 73   }else{.    zMas
1540: 74 65 72 53 63 68 65 6d 61 20 3d 20 6d 61 73 74  terSchema = mast
1550: 65 72 5f 73 63 68 65 6d 61 3b 0a 20 20 7d 0a 20  er_schema;.  }. 
1560: 20 7a 4d 61 73 74 65 72 4e 61 6d 65 20 3d 20 53   zMasterName = S
1570: 43 48 45 4d 41 5f 54 41 42 4c 45 28 69 44 62 29  CHEMA_TABLE(iDb)
1580: 3b 0a 0a 20 20 2f 2a 20 43 6f 6e 73 74 72 75 63  ;..  /* Construc
1590: 74 20 74 68 65 20 73 63 68 65 6d 61 20 74 61 62  t the schema tab
15a0: 6c 65 73 2e 20 20 2a 2f 0a 20 20 73 71 6c 69 74  les.  */.  sqlit
15b0: 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 3b  e3SafetyOff(db);
15c0: 0a 20 20 61 7a 41 72 67 5b 30 5d 20 3d 20 7a 4d  .  azArg[0] = zM
15d0: 61 73 74 65 72 4e 61 6d 65 3b 0a 20 20 61 7a 41  asterName;.  azA
15e0: 72 67 5b 31 5d 20 3d 20 22 31 22 3b 0a 20 20 61  rg[1] = "1";.  a
15f0: 7a 41 72 67 5b 32 5d 20 3d 20 7a 4d 61 73 74 65  zArg[2] = zMaste
1600: 72 53 63 68 65 6d 61 3b 0a 20 20 73 70 72 69 6e  rSchema;.  sprin
1610: 74 66 28 7a 44 62 4e 75 6d 2c 20 22 25 64 22 2c  tf(zDbNum, "%d",
1620: 20 69 44 62 29 3b 0a 20 20 61 7a 41 72 67 5b 33   iDb);.  azArg[3
1630: 5d 20 3d 20 7a 44 62 4e 75 6d 3b 0a 20 20 61 7a  ] = zDbNum;.  az
1640: 41 72 67 5b 34 5d 20 3d 20 30 3b 0a 20 20 69 6e  Arg[4] = 0;.  in
1650: 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a  itData.db = db;.
1660: 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72    initData.pzErr
1670: 4d 73 67 20 3d 20 70 7a 45 72 72 4d 73 67 3b 0a  Msg = pzErrMsg;.
1680: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 49 6e    rc = sqlite3In
1690: 69 74 43 61 6c 6c 62 61 63 6b 28 26 69 6e 69 74  itCallback(&init
16a0: 44 61 74 61 2c 20 34 2c 20 28 63 68 61 72 20 2a  Data, 4, (char *
16b0: 2a 29 61 7a 41 72 67 2c 20 30 29 3b 0a 20 20 69  *)azArg, 0);.  i
16c0: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
16d0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
16e0: 61 66 65 74 79 4f 6e 28 64 62 29 3b 0a 20 20 20  afetyOn(db);.   
16f0: 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 7d 0a   return rc;.  }.
1700: 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33    pTab = sqlite3
1710: 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 4d  FindTable(db, zM
1720: 61 73 74 65 72 4e 61 6d 65 2c 20 64 62 2d 3e 61  asterName, db->a
1730: 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 29 3b 0a  Db[iDb].zName);.
1740: 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20    if( pTab ){.  
1750: 20 20 70 54 61 62 2d 3e 72 65 61 64 4f 6e 6c 79    pTab->readOnly
1760: 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 73 71 6c 69   = 1;.  }.  sqli
1770: 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 3b  te3SafetyOn(db);
1780: 0a 0a 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20  ..  /* Create a 
1790: 63 75 72 73 6f 72 20 74 6f 20 68 6f 6c 64 20 74  cursor to hold t
17a0: 68 65 20 64 61 74 61 62 61 73 65 20 6f 70 65 6e  he database open
17b0: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  .  */.  if( db->
17c0: 61 44 62 5b 69 44 62 5d 2e 70 42 74 3d 3d 30 20  aDb[iDb].pBt==0 
17d0: 29 7b 0a 20 20 20 20 69 66 28 20 21 4f 4d 49 54  ){.    if( !OMIT
17e0: 5f 54 45 4d 50 44 42 20 26 26 20 69 44 62 3d 3d  _TEMPDB && iDb==
17f0: 31 20 29 20 44 62 53 65 74 50 72 6f 70 65 72 74  1 ) DbSetPropert
1800: 79 28 64 62 2c 20 31 2c 20 44 42 5f 53 63 68 65  y(db, 1, DB_Sche
1810: 6d 61 4c 6f 61 64 65 64 29 3b 0a 20 20 20 20 72  maLoaded);.    r
1820: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
1830: 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
1840: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 64  te3BtreeCursor(d
1850: 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
1860: 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 30 2c   MASTER_ROOT, 0,
1870: 20 30 2c 20 30 2c 20 26 63 75 72 4d 61 69 6e 29   0, 0, &curMain)
1880: 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
1890: 54 45 5f 4f 4b 20 26 26 20 72 63 21 3d 53 51 4c  TE_OK && rc!=SQL
18a0: 49 54 45 5f 45 4d 50 54 59 20 29 7b 0a 20 20 20  ITE_EMPTY ){.   
18b0: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
18c0: 67 28 70 7a 45 72 72 4d 73 67 2c 20 73 71 6c 69  g(pzErrMsg, sqli
18d0: 74 65 33 45 72 72 53 74 72 28 72 63 29 2c 20 28  te3ErrStr(rc), (
18e0: 63 68 61 72 2a 29 30 29 3b 0a 20 20 20 20 72 65  char*)0);.    re
18f0: 74 75 72 6e 20 72 63 3b 0a 20 20 7d 0a 0a 20 20  turn rc;.  }..  
1900: 2f 2a 20 47 65 74 20 74 68 65 20 64 61 74 61 62  /* Get the datab
1910: 61 73 65 20 6d 65 74 61 20 69 6e 66 6f 72 6d 61  ase meta informa
1920: 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  tion..  **.  ** 
1930: 4d 65 74 61 20 76 61 6c 75 65 73 20 61 72 65 20  Meta values are 
1940: 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 20 2a 2a  as follows:.  **
1950: 20 20 20 20 6d 65 74 61 5b 30 5d 20 20 20 53 63      meta[0]   Sc
1960: 68 65 6d 61 20 63 6f 6f 6b 69 65 2e 20 20 43 68  hema cookie.  Ch
1970: 61 6e 67 65 73 20 77 69 74 68 20 65 61 63 68 20  anges with each 
1980: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 2e 0a 20  schema change.. 
1990: 20 2a 2a 20 20 20 20 6d 65 74 61 5b 31 5d 20 20   **    meta[1]  
19a0: 20 46 69 6c 65 20 66 6f 72 6d 61 74 20 6f 66 20   File format of 
19b0: 73 63 68 65 6d 61 20 6c 61 79 65 72 2e 0a 20 20  schema layer..  
19c0: 2a 2a 20 20 20 20 6d 65 74 61 5b 32 5d 20 20 20  **    meta[2]   
19d0: 53 69 7a 65 20 6f 66 20 74 68 65 20 70 61 67 65  Size of the page
19e0: 20 63 61 63 68 65 2e 0a 20 20 2a 2a 20 20 20 20   cache..  **    
19f0: 6d 65 74 61 5b 33 5d 20 20 20 55 73 65 20 66 72  meta[3]   Use fr
1a00: 65 65 6c 69 73 74 20 69 66 20 30 2e 20 20 41 75  eelist if 0.  Au
1a10: 74 6f 76 61 63 75 75 6d 20 69 66 20 67 72 65 61  tovacuum if grea
1a20: 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2e 0a 20  ter than zero.. 
1a30: 20 2a 2a 20 20 20 20 6d 65 74 61 5b 34 5d 20 20   **    meta[4]  
1a40: 20 44 62 20 74 65 78 74 20 65 6e 63 6f 64 69 6e   Db text encodin
1a50: 67 2e 20 31 3a 55 54 46 2d 38 20 33 3a 55 54 46  g. 1:UTF-8 3:UTF
1a60: 2d 31 36 20 4c 45 20 34 3a 55 54 46 2d 31 36 20  -16 LE 4:UTF-16 
1a70: 42 45 0a 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b  BE.  **    meta[
1a80: 35 5d 20 20 20 54 68 65 20 75 73 65 72 20 63 6f  5]   The user co
1a90: 6f 6b 69 65 2e 20 55 73 65 64 20 62 79 20 74 68  okie. Used by th
1aa0: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0a 20  e application.. 
1ab0: 20 2a 2a 20 20 20 20 6d 65 74 61 5b 36 5d 20 20   **    meta[6]  
1ac0: 20 0a 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b 37   .  **    meta[7
1ad0: 5d 0a 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b 38  ].  **    meta[8
1ae0: 5d 0a 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b 39  ].  **    meta[9
1af0: 5d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65  ].  **.  ** Note
1b00: 3a 20 54 68 65 20 68 61 73 68 20 64 65 66 69 6e  : The hash defin
1b10: 65 64 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 73  ed SQLITE_UTF* s
1b20: 79 6d 62 6f 6c 73 20 69 6e 20 73 71 6c 69 74 65  ymbols in sqlite
1b30: 49 6e 74 2e 68 20 63 6f 72 72 65 73 70 6f 6e 64  Int.h correspond
1b40: 20 74 6f 0a 20 20 2a 2a 20 74 68 65 20 70 6f 73   to.  ** the pos
1b50: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 6f 66 20  sible values of 
1b60: 6d 65 74 61 5b 34 5d 2e 0a 20 20 2a 2f 0a 20 20  meta[4]..  */.  
1b70: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1b80: 4b 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a  K ){.    int i;.
1b90: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 72 63 3d      for(i=0; rc=
1ba0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 3c  =SQLITE_OK && i<
1bb0: 73 69 7a 65 6f 66 28 6d 65 74 61 29 2f 73 69 7a  sizeof(meta)/siz
1bc0: 65 6f 66 28 6d 65 74 61 5b 30 5d 29 3b 20 69 2b  eof(meta[0]); i+
1bd0: 2b 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  +){.      rc = s
1be0: 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65  qlite3BtreeGetMe
1bf0: 74 61 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  ta(db->aDb[iDb].
1c00: 70 42 74 2c 20 69 2b 31 2c 20 28 75 33 32 20 2a  pBt, i+1, (u32 *
1c10: 29 26 6d 65 74 61 5b 69 5d 29 3b 0a 20 20 20 20  )&meta[i]);.    
1c20: 7d 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a  }.    if( rc ){.
1c30: 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
1c40: 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c  String(pzErrMsg,
1c50: 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72   sqlite3ErrStr(r
1c60: 63 29 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 20  c), (char*)0);. 
1c70: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
1c80: 65 43 6c 6f 73 65 43 75 72 73 6f 72 28 63 75 72  eCloseCursor(cur
1c90: 4d 61 69 6e 29 3b 0a 20 20 20 20 20 20 72 65 74  Main);.      ret
1ca0: 75 72 6e 20 72 63 3b 0a 20 20 20 20 7d 0a 20 20  urn rc;.    }.  
1cb0: 7d 65 6c 73 65 7b 0a 20 20 20 20 6d 65 6d 73 65  }else{.    memse
1cc0: 74 28 6d 65 74 61 2c 20 30 2c 20 73 69 7a 65 6f  t(meta, 0, sizeo
1cd0: 66 28 6d 65 74 61 29 29 3b 0a 20 20 7d 0a 20 20  f(meta));.  }.  
1ce0: 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 73 63 68  db->aDb[iDb].sch
1cf0: 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 6d 65 74  ema_cookie = met
1d00: 61 5b 30 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20 6f  a[0];..  /* If o
1d10: 70 65 6e 69 6e 67 20 61 20 6e 6f 6e 2d 65 6d 70  pening a non-emp
1d20: 74 79 20 64 61 74 61 62 61 73 65 2c 20 63 68 65  ty database, che
1d30: 63 6b 20 74 68 65 20 74 65 78 74 20 65 6e 63 6f  ck the text enco
1d40: 64 69 6e 67 2e 20 46 6f 72 20 74 68 65 0a 20 20  ding. For the.  
1d50: 2a 2a 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  ** main database
1d60: 2c 20 73 65 74 20 73 71 6c 69 74 65 33 2e 65 6e  , set sqlite3.en
1d70: 63 20 74 6f 20 74 68 65 20 65 6e 63 6f 64 69 6e  c to the encodin
1d80: 67 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 64 61  g of the main da
1d90: 74 61 62 61 73 65 2e 0a 20 20 2a 2a 20 46 6f 72  tabase..  ** For
1da0: 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 62 2c   an attached db,
1db0: 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   it is an error 
1dc0: 69 66 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  if the encoding 
1dd0: 69 73 20 6e 6f 74 20 74 68 65 20 73 61 6d 65 0a  is not the same.
1de0: 20 20 2a 2a 20 61 73 20 73 71 6c 69 74 65 33 2e    ** as sqlite3.
1df0: 65 6e 63 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  enc..  */.  if( 
1e00: 6d 65 74 61 5b 34 5d 20 29 7b 20 20 2f 2a 20 74  meta[4] ){  /* t
1e10: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a  ext encoding */.
1e20: 20 20 20 20 69 66 28 20 69 44 62 3d 3d 30 20 29      if( iDb==0 )
1e30: 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 6f 70  {.      /* If op
1e40: 65 6e 69 6e 67 20 74 68 65 20 6d 61 69 6e 20 64  ening the main d
1e50: 61 74 61 62 61 73 65 2c 20 73 65 74 20 64 62 2d  atabase, set db-
1e60: 3e 65 6e 63 2e 20 2a 2f 0a 20 20 20 20 20 20 64  >enc. */.      d
1e70: 62 2d 3e 65 6e 63 20 3d 20 28 75 38 29 6d 65 74  b->enc = (u8)met
1e80: 61 5b 34 5d 3b 0a 20 20 20 20 20 20 64 62 2d 3e  a[4];.      db->
1e90: 70 44 66 6c 74 43 6f 6c 6c 20 3d 20 73 71 6c 69  pDfltColl = sqli
1ea0: 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 64  te3FindCollSeq(d
1eb0: 62 2c 20 64 62 2d 3e 65 6e 63 2c 20 22 42 49 4e  b, db->enc, "BIN
1ec0: 41 52 59 22 2c 20 36 2c 20 30 29 3b 0a 20 20 20  ARY", 6, 0);.   
1ed0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a   }else{.      /*
1ee0: 20 49 66 20 6f 70 65 6e 69 6e 67 20 61 6e 20 61   If opening an a
1ef0: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
1f00: 2c 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6d  , the encoding m
1f10: 75 63 68 20 6d 61 74 63 68 20 64 62 2d 3e 65 6e  uch match db->en
1f20: 63 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 6d  c */.      if( m
1f30: 65 74 61 5b 34 5d 21 3d 64 62 2d 3e 65 6e 63 20  eta[4]!=db->enc 
1f40: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
1f50: 65 33 42 74 72 65 65 43 6c 6f 73 65 43 75 72 73  e3BtreeCloseCurs
1f60: 6f 72 28 63 75 72 4d 61 69 6e 29 3b 0a 20 20 20  or(curMain);.   
1f70: 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
1f80: 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20  tring(pzErrMsg, 
1f90: 22 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61  "attached databa
1fa0: 73 65 73 20 6d 75 73 74 20 75 73 65 20 74 68 65  ses must use the
1fb0: 20 73 61 6d 65 22 0a 20 20 20 20 20 20 20 20 20   same".         
1fc0: 20 20 20 22 20 74 65 78 74 20 65 6e 63 6f 64 69     " text encodi
1fd0: 6e 67 20 61 73 20 6d 61 69 6e 20 64 61 74 61 62  ng as main datab
1fe0: 61 73 65 22 2c 20 28 63 68 61 72 2a 29 30 29 3b  ase", (char*)0);
1ff0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
2000: 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
2010: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
2020: 0a 20 20 73 69 7a 65 20 3d 20 6d 65 74 61 5b 32  .  size = meta[2
2030: 5d 3b 0a 20 20 69 66 28 20 73 69 7a 65 3d 3d 30  ];.  if( size==0
2040: 20 29 7b 20 73 69 7a 65 20 3d 20 4d 41 58 5f 50   ){ size = MAX_P
2050: 41 47 45 53 3b 20 7d 0a 20 20 64 62 2d 3e 61 44  AGES; }.  db->aD
2060: 62 5b 69 44 62 5d 2e 63 61 63 68 65 5f 73 69 7a  b[iDb].cache_siz
2070: 65 20 3d 20 73 69 7a 65 3b 0a 0a 20 20 69 66 28  e = size;..  if(
2080: 20 69 44 62 3d 3d 30 20 29 7b 0a 20 20 20 20 64   iDb==0 ){.    d
2090: 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d  b->file_format =
20a0: 20 6d 65 74 61 5b 31 5d 3b 0a 20 20 20 20 69 66   meta[1];.    if
20b0: 28 20 64 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  ( db->file_forma
20c0: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a  t==0 ){.      /*
20d0: 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 69 66   This happens if
20e0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77 61   the database wa
20f0: 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74  s initially empt
2100: 79 20 2a 2f 0a 20 20 20 20 20 20 64 62 2d 3e 66  y */.      db->f
2110: 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 31 3b 0a  ile_format = 1;.
2120: 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 64      }..    if( d
2130: 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d  b->file_format==
2140: 32 20 7c 7c 20 64 62 2d 3e 66 69 6c 65 5f 66 6f  2 || db->file_fo
2150: 72 6d 61 74 3d 3d 33 20 29 7b 0a 20 20 20 20 20  rmat==3 ){.     
2160: 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74 20   /* File format 
2170: 32 20 69 73 20 74 72 65 61 74 65 64 20 65 78 61  2 is treated exa
2180: 63 74 6c 79 20 61 73 20 66 69 6c 65 20 66 6f 72  ctly as file for
2190: 6d 61 74 20 31 2e 20 4e 65 77 20 0a 20 20 20 20  mat 1. New .    
21a0: 20 20 2a 2a 20 64 61 74 61 62 61 73 65 73 20 61    ** databases a
21b0: 72 65 20 63 72 65 61 74 65 64 20 77 69 74 68 20  re created with 
21c0: 66 69 6c 65 20 66 6f 72 6d 61 74 20 31 2e 0a 20  file format 1.. 
21d0: 20 20 20 20 20 2a 2f 20 0a 20 20 20 20 20 20 64       */ .      d
21e0: 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d  b->file_format =
21f0: 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20   1;.    }.  }.. 
2200: 20 2f 2a 0a 20 20 2a 2a 20 66 69 6c 65 5f 66 6f   /*.  ** file_fo
2210: 72 6d 61 74 3d 3d 31 20 20 20 20 56 65 72 73 69  rmat==1    Versi
2220: 6f 6e 20 33 2e 30 2e 30 2e 0a 20 20 2a 2a 20 66  on 3.0.0..  ** f
2230: 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d 32 20 20 20  ile_format==2   
2240: 20 56 65 72 73 69 6f 6e 20 33 2e 31 2e 33 2e 0a   Version 3.1.3..
2250: 20 20 2a 2a 20 66 69 6c 65 5f 66 6f 72 6d 61 74    ** file_format
2260: 3d 3d 33 20 20 20 20 56 65 72 73 69 6f 6e 20 33  ==3    Version 3
2270: 2e 31 2e 34 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  .1.4..  **.  ** 
2280: 56 65 72 73 69 6f 6e 20 33 2e 30 20 63 61 6e 20  Version 3.0 can 
2290: 6f 6e 6c 79 20 75 73 65 20 66 69 6c 65 73 20 77  only use files w
22a0: 69 74 68 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3d  ith file_format=
22b0: 3d 31 2e 20 56 65 72 73 69 6f 6e 20 33 2e 31 2e  =1. Version 3.1.
22c0: 33 0a 20 20 2a 2a 20 63 61 6e 20 72 65 61 64 20  3.  ** can read 
22d0: 61 6e 64 20 77 72 69 74 65 20 66 69 6c 65 73 20  and write files 
22e0: 77 69 74 68 20 66 69 6c 65 5f 66 6f 72 6d 61 74  with file_format
22f0: 3d 3d 31 20 6f 72 20 66 69 6c 65 5f 66 6f 72 6d  ==1 or file_form
2300: 61 74 3d 3d 32 2e 0a 20 20 2a 2a 20 56 65 72 73  at==2..  ** Vers
2310: 69 6f 6e 20 33 2e 31 2e 34 20 63 61 6e 20 72 65  ion 3.1.4 can re
2320: 61 64 20 61 6e 64 20 77 72 69 74 65 20 66 69 6c  ad and write fil
2330: 65 20 66 6f 72 6d 61 74 73 20 31 2c 20 32 20 61  e formats 1, 2 a
2340: 6e 64 20 33 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  nd 3..  */.  if(
2350: 20 6d 65 74 61 5b 31 5d 3e 33 20 29 7b 0a 20 20   meta[1]>3 ){.  
2360: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
2370: 6f 73 65 43 75 72 73 6f 72 28 63 75 72 4d 61 69  oseCursor(curMai
2380: 6e 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53  n);.    sqlite3S
2390: 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73  etString(pzErrMs
23a0: 67 2c 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20  g, "unsupported 
23b0: 66 69 6c 65 20 66 6f 72 6d 61 74 22 2c 20 28 63  file format", (c
23c0: 68 61 72 2a 29 30 29 3b 0a 20 20 20 20 72 65 74  har*)0);.    ret
23d0: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
23e0: 3b 0a 20 20 7d 0a 0a 20 20 73 71 6c 69 74 65 33  ;.  }..  sqlite3
23f0: 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a  BtreeSetCacheSiz
2400: 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  e(db->aDb[iDb].p
2410: 42 74 2c 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d  Bt, db->aDb[iDb]
2420: 2e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 0a 20  .cache_size);.. 
2430: 20 2f 2a 20 52 65 61 64 20 74 68 65 20 73 63 68   /* Read the sch
2440: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ema information 
2450: 6f 75 74 20 6f 66 20 74 68 65 20 73 63 68 65 6d  out of the schem
2460: 61 20 74 61 62 6c 65 73 0a 20 20 2a 2f 0a 20 20  a tables.  */.  
2470: 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74  assert( db->init
2480: 2e 62 75 73 79 20 29 3b 0a 20 20 69 66 28 20 72  .busy );.  if( r
2490: 63 3d 3d 53 51 4c 49 54 45 5f 45 4d 50 54 59 20  c==SQLITE_EMPTY 
24a0: 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 61 6e  ){.    /* For an
24b0: 20 65 6d 70 74 79 20 64 61 74 61 62 61 73 65 2c   empty database,
24c0: 20 74 68 65 72 65 20 69 73 20 6e 6f 74 68 69 6e   there is nothin
24d0: 67 20 74 6f 20 72 65 61 64 20 2a 2f 0a 20 20 20  g to read */.   
24e0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
24f0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68  .  }else{.    ch
2500: 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 20 20 7a 53  ar *zSql;.    zS
2510: 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69  ql = sqlite3MPri
2520: 6e 74 66 28 0a 20 20 20 20 20 20 20 20 22 53 45  ntf(.        "SE
2530: 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70  LECT name, rootp
2540: 61 67 65 2c 20 73 71 6c 2c 20 27 25 73 27 20 46  age, sql, '%s' F
2550: 52 4f 4d 20 27 25 71 27 2e 25 73 22 2c 0a 20 20  ROM '%q'.%s",.  
2560: 20 20 20 20 20 20 7a 44 62 4e 75 6d 2c 20 64 62        zDbNum, db
2570: 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65  ->aDb[iDb].zName
2580: 2c 20 7a 4d 61 73 74 65 72 4e 61 6d 65 29 3b 0a  , zMasterName);.
2590: 20 20 20 20 73 71 6c 69 74 65 33 53 61 66 65 74      sqlite3Safet
25a0: 79 4f 66 66 28 64 62 29 3b 0a 20 20 20 20 72 63  yOff(db);.    rc
25b0: 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
25c0: 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65  db, zSql, sqlite
25d0: 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26  3InitCallback, &
25e0: 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20  initData, 0);.  
25f0: 20 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f    sqlite3SafetyO
2600: 6e 28 64 62 29 3b 0a 20 20 20 20 73 71 6c 69 74  n(db);.    sqlit
2610: 65 46 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 20  eFree(zSql);.   
2620: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 6f   sqlite3BtreeClo
2630: 73 65 43 75 72 73 6f 72 28 63 75 72 4d 61 69 6e  seCursor(curMain
2640: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  );.  }.  if( sql
2650: 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c  ite3_malloc_fail
2660: 65 64 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ed ){.    sqlite
2670: 33 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72  3SetString(pzErr
2680: 4d 73 67 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d  Msg, "out of mem
2690: 6f 72 79 22 2c 20 28 63 68 61 72 2a 29 30 29 3b  ory", (char*)0);
26a0: 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
26b0: 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 73 71 6c 69  _NOMEM;.    sqli
26c0: 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c  te3ResetInternal
26d0: 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20  Schema(db, 0);. 
26e0: 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c   }.  if( rc==SQL
26f0: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 44 62  ITE_OK ){.    Db
2700: 53 65 74 50 72 6f 70 65 72 74 79 28 64 62 2c 20  SetProperty(db, 
2710: 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f  iDb, DB_SchemaLo
2720: 61 64 65 64 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  aded);.  }else{.
2730: 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
2740: 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64  InternalSchema(d
2750: 62 2c 20 69 44 62 29 3b 0a 20 20 7d 0a 20 20 72  b, iDb);.  }.  r
2760: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a  eturn rc;.}../*.
2770: 2a 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 61 6c  ** Initialize al
2780: 6c 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  l database files
2790: 20 2d 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61   - the main data
27a0: 62 61 73 65 20 66 69 6c 65 2c 20 74 68 65 20 66  base file, the f
27b0: 69 6c 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73  ile.** used to s
27c0: 74 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74  tore temporary t
27d0: 61 62 6c 65 73 2c 20 61 6e 64 20 61 6e 79 20 61  ables, and any a
27e0: 64 64 69 74 69 6f 6e 61 6c 20 64 61 74 61 62 61  dditional databa
27f0: 73 65 20 66 69 6c 65 73 0a 2a 2a 20 63 72 65 61  se files.** crea
2800: 74 65 64 20 75 73 69 6e 67 20 41 54 54 41 43 48  ted using ATTACH
2810: 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 52 65   statements.  Re
2820: 74 75 72 6e 20 61 20 73 75 63 63 65 73 73 20 63  turn a success c
2830: 6f 64 65 2e 20 20 49 66 20 61 6e 0a 2a 2a 20 65  ode.  If an.** e
2840: 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 77 72 69  rror occurs, wri
2850: 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  te an error mess
2860: 61 67 65 20 69 6e 74 6f 20 2a 70 7a 45 72 72 4d  age into *pzErrM
2870: 73 67 2e 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20  sg..**.** After 
2880: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
2890: 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 74 68 65  initialized, the
28a0: 20 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69   SQLITE_Initiali
28b0: 7a 65 64 0a 2a 2a 20 62 69 74 20 69 73 20 73 65  zed.** bit is se
28c0: 74 20 69 6e 20 74 68 65 20 66 6c 61 67 73 20 66  t in the flags f
28d0: 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69  ield of the sqli
28e0: 74 65 20 73 74 72 75 63 74 75 72 65 2e 20 0a 2a  te structure. .*
28f0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69  /.int sqlite3Ini
2900: 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63  t(sqlite3 *db, c
2910: 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 29 7b  har **pzErrMsg){
2920: 0a 20 20 69 6e 74 20 69 2c 20 72 63 3b 0a 20 20  .  int i, rc;.  
2930: 0a 20 20 69 66 28 20 64 62 2d 3e 69 6e 69 74 2e  .  if( db->init.
2940: 62 75 73 79 20 29 20 72 65 74 75 72 6e 20 53 51  busy ) return SQ
2950: 4c 49 54 45 5f 4f 4b 3b 0a 20 20 61 73 73 65 72  LITE_OK;.  asser
2960: 74 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20  t( (db->flags & 
2970: 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69 7a  SQLITE_Initializ
2980: 65 64 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  ed)==0 );.  rc =
2990: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 64 62   SQLITE_OK;.  db
29a0: 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b  ->init.busy = 1;
29b0: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 72 63 3d 3d  .  for(i=0; rc==
29c0: 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 3c 64  SQLITE_OK && i<d
29d0: 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20  b->nDb; i++){.  
29e0: 20 20 69 66 28 20 44 62 48 61 73 50 72 6f 70 65    if( DbHasPrope
29f0: 72 74 79 28 64 62 2c 20 69 2c 20 44 42 5f 53 63  rty(db, i, DB_Sc
2a00: 68 65 6d 61 4c 6f 61 64 65 64 29 20 7c 7c 20 69  hemaLoaded) || i
2a10: 3d 3d 31 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==1 ) continue;.
2a20: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2a30: 49 6e 69 74 4f 6e 65 28 64 62 2c 20 69 2c 20 70  InitOne(db, i, p
2a40: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 69 66  zErrMsg);.    if
2a50: 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 73 71  ( rc ){.      sq
2a60: 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e  lite3ResetIntern
2a70: 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 69 29 3b  alSchema(db, i);
2a80: 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
2a90: 20 4f 6e 63 65 20 61 6c 6c 20 74 68 65 20 6f 74   Once all the ot
2aa0: 68 65 72 20 64 61 74 61 62 61 73 65 73 20 68 61  her databases ha
2ab0: 76 65 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69  ve been initiali
2ac0: 73 65 64 2c 20 6c 6f 61 64 20 74 68 65 20 73 63  sed, load the sc
2ad0: 68 65 6d 61 0a 20 20 2a 2a 20 66 6f 72 20 74 68  hema.  ** for th
2ae0: 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 2e  e TEMP database.
2af0: 20 54 68 69 73 20 69 73 20 6c 6f 61 64 65 64 20   This is loaded 
2b00: 6c 61 73 74 2c 20 61 73 20 74 68 65 20 54 45 4d  last, as the TEM
2b10: 50 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20  P database.  ** 
2b20: 73 63 68 65 6d 61 20 6d 61 79 20 63 6f 6e 74 61  schema may conta
2b30: 69 6e 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  in references to
2b40: 20 6f 62 6a 65 63 74 73 20 69 6e 20 6f 74 68 65   objects in othe
2b50: 72 20 64 61 74 61 62 61 73 65 73 2e 0a 20 20 2a  r databases..  *
2b60: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
2b70: 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 20 20 69  _OMIT_TEMPDB.  i
2b80: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2b90: 20 26 26 20 64 62 2d 3e 6e 44 62 3e 31 20 26 26   && db->nDb>1 &&
2ba0: 20 21 44 62 48 61 73 50 72 6f 70 65 72 74 79 28   !DbHasProperty(
2bb0: 64 62 2c 20 31 2c 20 44 42 5f 53 63 68 65 6d 61  db, 1, DB_Schema
2bc0: 4c 6f 61 64 65 64 29 20 29 7b 0a 20 20 20 20 72  Loaded) ){.    r
2bd0: 63 20 3d 20 73 71 6c 69 74 65 33 49 6e 69 74 4f  c = sqlite3InitO
2be0: 6e 65 28 64 62 2c 20 31 2c 20 70 7a 45 72 72 4d  ne(db, 1, pzErrM
2bf0: 73 67 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  sg);.    if( rc 
2c00: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
2c10: 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68  ResetInternalSch
2c20: 65 6d 61 28 64 62 2c 20 31 29 3b 0a 20 20 20 20  ema(db, 1);.    
2c30: 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  }.  }.#endif..  
2c40: 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20  db->init.busy = 
2c50: 30 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  0;.  if( rc==SQL
2c60: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 64 62  ITE_OK ){.    db
2c70: 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54  ->flags |= SQLIT
2c80: 45 5f 49 6e 69 74 69 61 6c 69 7a 65 64 3b 0a 20  E_Initialized;. 
2c90: 20 20 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74     sqlite3Commit
2ca0: 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28  InternalChanges(
2cb0: 64 62 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  db);.  }..  if( 
2cc0: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
2cd0: 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26  .    db->flags &
2ce0: 3d 20 7e 53 51 4c 49 54 45 5f 49 6e 69 74 69 61  = ~SQLITE_Initia
2cf0: 6c 69 7a 65 64 3b 0a 20 20 7d 0a 20 20 72 65 74  lized;.  }.  ret
2d00: 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  urn rc;.}../*.**
2d10: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73   This routine is
2d20: 20 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20   a no-op if the 
2d30: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
2d40: 69 73 20 61 6c 72 65 61 64 79 20 69 6e 69 74 69  is already initi
2d50: 61 6c 69 73 65 64 2e 0a 2a 2a 20 4f 74 68 65 72  alised..** Other
2d60: 77 69 73 65 2c 20 74 68 65 20 73 63 68 65 6d 61  wise, the schema
2d70: 20 69 73 20 6c 6f 61 64 65 64 2e 20 41 6e 20 65   is loaded. An e
2d80: 72 72 6f 72 20 63 6f 64 65 20 69 73 20 72 65 74  rror code is ret
2d90: 75 72 6e 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71  urned..*/.int sq
2da0: 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
2db0: 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 7b 0a  Parse *pParse){.
2dc0: 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54    int rc = SQLIT
2dd0: 45 5f 4f 4b 3b 0a 20 20 73 71 6c 69 74 65 33 20  E_OK;.  sqlite3 
2de0: 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62  *db = pParse->db
2df0: 3b 0a 20 20 69 66 28 20 21 64 62 2d 3e 69 6e 69  ;.  if( !db->ini
2e00: 74 2e 62 75 73 79 20 29 7b 0a 20 20 20 20 69 66  t.busy ){.    if
2e10: 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  ( (db->flags & S
2e20: 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69 7a 65  QLITE_Initialize
2e30: 64 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  d)==0 ){.      r
2e40: 63 20 3d 20 73 71 6c 69 74 65 33 49 6e 69 74 28  c = sqlite3Init(
2e50: 64 62 2c 20 26 70 50 61 72 73 65 2d 3e 7a 45 72  db, &pParse->zEr
2e60: 72 4d 73 67 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rMsg);.    }.  }
2e70: 0a 20 20 61 73 73 65 72 74 28 20 72 63 21 3d 53  .  assert( rc!=S
2e80: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 64 62 2d  QLITE_OK || (db-
2e90: 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
2ea0: 49 6e 69 74 69 61 6c 69 7a 65 64 29 7c 7c 64 62  Initialized)||db
2eb0: 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29 3b 0a 20  ->init.busy );. 
2ec0: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
2ed0: 4f 4b 20 29 7b 0a 20 20 20 20 70 50 61 72 73 65  OK ){.    pParse
2ee0: 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 70  ->rc = rc;.    p
2ef0: 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20  Parse->nErr++;. 
2f00: 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a   }.  return rc;.
2f10: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 76 65 72  }../*.** The ver
2f20: 73 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72  sion of the libr
2f30: 61 72 79 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61  ary.*/.const cha
2f40: 72 20 72 63 73 69 64 33 5b 5d 20 3d 20 22 40 28  r rcsid3[] = "@(
2f50: 23 29 20 5c 30 34 34 49 64 3a 20 53 51 4c 69 74  #) \044Id: SQLit
2f60: 65 20 76 65 72 73 69 6f 6e 20 22 20 53 51 4c 49  e version " SQLI
2f70: 54 45 5f 56 45 52 53 49 4f 4e 20 22 20 24 22 3b  TE_VERSION " $";
2f80: 0a 63 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69  .const char sqli
2f90: 74 65 33 5f 76 65 72 73 69 6f 6e 5b 5d 20 3d 20  te3_version[] = 
2fa0: 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 3b 0a  SQLITE_VERSION;.
2fb0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
2fc0: 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 76  te3_libversion(v
2fd0: 6f 69 64 29 7b 20 72 65 74 75 72 6e 20 73 71 6c  oid){ return sql
2fe0: 69 74 65 33 5f 76 65 72 73 69 6f 6e 3b 20 7d 0a  ite3_version; }.
2ff0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 6c 69 62 76  int sqlite3_libv
3000: 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 76 6f  ersion_number(vo
3010: 69 64 29 7b 20 72 65 74 75 72 6e 20 53 51 4c 49  id){ return SQLI
3020: 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45  TE_VERSION_NUMBE
3030: 52 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  R; }../*.** This
3040: 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20   is the default 
3050: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
3060: 6f 6e 20 6e 61 6d 65 64 20 22 42 49 4e 41 52 59  on named "BINARY
3070: 22 20 77 68 69 63 68 20 69 73 20 61 6c 77 61 79  " which is alway
3080: 73 0a 2a 2a 20 61 76 61 69 6c 61 62 6c 65 2e 0a  s.** available..
3090: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 62 69  */.static int bi
30a0: 6e 43 6f 6c 6c 46 75 6e 63 28 0a 20 20 76 6f 69  nCollFunc(.  voi
30b0: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 69 6e  d *NotUsed,.  in
30c0: 74 20 6e 4b 65 79 31 2c 20 63 6f 6e 73 74 20 76  t nKey1, const v
30d0: 6f 69 64 20 2a 70 4b 65 79 31 2c 0a 20 20 69 6e  oid *pKey1,.  in
30e0: 74 20 6e 4b 65 79 32 2c 20 63 6f 6e 73 74 20 76  t nKey2, const v
30f0: 6f 69 64 20 2a 70 4b 65 79 32 0a 29 7b 0a 20 20  oid *pKey2.){.  
3100: 69 6e 74 20 72 63 2c 20 6e 3b 0a 20 20 6e 20 3d  int rc, n;.  n =
3110: 20 6e 4b 65 79 31 3c 6e 4b 65 79 32 20 3f 20 6e   nKey1<nKey2 ? n
3120: 4b 65 79 31 20 3a 20 6e 4b 65 79 32 3b 0a 20 20  Key1 : nKey2;.  
3130: 72 63 20 3d 20 6d 65 6d 63 6d 70 28 70 4b 65 79  rc = memcmp(pKey
3140: 31 2c 20 70 4b 65 79 32 2c 20 6e 29 3b 0a 20 20  1, pKey2, n);.  
3150: 69 66 28 20 72 63 3d 3d 30 20 29 7b 0a 20 20 20  if( rc==0 ){.   
3160: 20 72 63 20 3d 20 6e 4b 65 79 31 20 2d 20 6e 4b   rc = nKey1 - nK
3170: 65 79 32 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  ey2;.  }.  retur
3180: 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41  n rc;.}../*.** A
3190: 6e 6f 74 68 65 72 20 62 75 69 6c 74 2d 69 6e 20  nother built-in 
31a0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
31b0: 63 65 3a 20 4e 4f 43 41 53 45 2e 20 0a 2a 2a 0a  ce: NOCASE. .**.
31c0: 2a 2a 20 54 68 69 73 20 63 6f 6c 6c 61 74 69 6e  ** This collatin
31d0: 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 69 6e  g sequence is in
31e0: 74 65 6e 64 65 64 20 74 6f 20 62 65 20 75 73 65  tended to be use
31f0: 64 20 66 6f 72 20 22 63 61 73 65 20 69 6e 64 65  d for "case inde
3200: 70 65 6e 64 61 6e 74 0a 2a 2a 20 63 6f 6d 70 61  pendant.** compa
3210: 72 69 73 6f 6e 22 2e 20 53 51 4c 69 74 65 27 73  rison". SQLite's
3220: 20 6b 6e 6f 77 6c 65 64 67 65 20 6f 66 20 75 70   knowledge of up
3230: 70 65 72 20 61 6e 64 20 6c 6f 77 65 72 20 63 61  per and lower ca
3240: 73 65 20 65 71 75 69 76 61 6c 65 6e 74 73 0a 2a  se equivalents.*
3250: 2a 20 65 78 74 65 6e 64 73 20 6f 6e 6c 79 20 74  * extends only t
3260: 6f 20 74 68 65 20 32 36 20 63 68 61 72 61 63 74  o the 26 charact
3270: 65 72 73 20 75 73 65 64 20 69 6e 20 74 68 65 20  ers used in the 
3280: 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65  English language
3290: 2e 0a 2a 2a 0a 2a 2a 20 41 74 20 74 68 65 20 6d  ..**.** At the m
32a0: 6f 6d 65 6e 74 20 74 68 65 72 65 20 69 73 20 6f  oment there is o
32b0: 6e 6c 79 20 61 20 55 54 46 2d 38 20 69 6d 70 6c  nly a UTF-8 impl
32c0: 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  ementation..*/.s
32d0: 74 61 74 69 63 20 69 6e 74 20 6e 6f 63 61 73 65  tatic int nocase
32e0: 43 6f 6c 6c 61 74 69 6e 67 46 75 6e 63 28 0a 20  CollatingFunc(. 
32f0: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
3300: 20 20 69 6e 74 20 6e 4b 65 79 31 2c 20 63 6f 6e    int nKey1, con
3310: 73 74 20 76 6f 69 64 20 2a 70 4b 65 79 31 2c 0a  st void *pKey1,.
3320: 20 20 69 6e 74 20 6e 4b 65 79 32 2c 20 63 6f 6e    int nKey2, con
3330: 73 74 20 76 6f 69 64 20 2a 70 4b 65 79 32 0a 29  st void *pKey2.)
3340: 7b 0a 20 20 69 6e 74 20 72 20 3d 20 73 71 6c 69  {.  int r = sqli
3350: 74 65 33 53 74 72 4e 49 43 6d 70 28 0a 20 20 20  te3StrNICmp(.   
3360: 20 20 20 28 63 6f 6e 73 74 20 63 68 61 72 20 2a     (const char *
3370: 29 70 4b 65 79 31 2c 20 28 63 6f 6e 73 74 20 63  )pKey1, (const c
3380: 68 61 72 20 2a 29 70 4b 65 79 32 2c 20 28 6e 4b  har *)pKey2, (nK
3390: 65 79 31 3c 6e 4b 65 79 32 29 3f 6e 4b 65 79 31  ey1<nKey2)?nKey1
33a0: 3a 6e 4b 65 79 32 29 3b 0a 20 20 69 66 28 20 30  :nKey2);.  if( 0
33b0: 3d 3d 72 20 29 7b 0a 20 20 20 20 72 20 3d 20 6e  ==r ){.    r = n
33c0: 4b 65 79 31 2d 6e 4b 65 79 32 3b 0a 20 20 7d 0a  Key1-nKey2;.  }.
33d0: 20 20 72 65 74 75 72 6e 20 72 3b 0a 7d 0a 0a 2f    return r;.}../
33e0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
33f0: 52 4f 57 49 44 20 6f 66 20 74 68 65 20 6d 6f 73  ROWID of the mos
3400: 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74 0a  t recent insert.
3410: 2a 2f 0a 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  */.sqlite_int64 
3420: 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
3430: 65 72 74 5f 72 6f 77 69 64 28 73 71 6c 69 74 65  ert_rowid(sqlite
3440: 33 20 2a 64 62 29 7b 0a 20 20 72 65 74 75 72 6e  3 *db){.  return
3450: 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   db->lastRowid;.
3460: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
3470: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68  the number of ch
3480: 61 6e 67 65 73 20 69 6e 20 74 68 65 20 6d 6f 73  anges in the mos
3490: 74 20 72 65 63 65 6e 74 20 63 61 6c 6c 20 74 6f  t recent call to
34a0: 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2e   sqlite3_exec().
34b0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
34c0: 63 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20  changes(sqlite3 
34d0: 2a 64 62 29 7b 0a 20 20 72 65 74 75 72 6e 20 64  *db){.  return d
34e0: 62 2d 3e 6e 43 68 61 6e 67 65 3b 0a 7d 0a 0a 2f  b->nChange;.}../
34f0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
3500: 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 6e 67 65  number of change
3510: 73 20 73 69 6e 63 65 20 74 68 65 20 64 61 74 61  s since the data
3520: 62 61 73 65 20 68 61 6e 64 6c 65 20 77 61 73 20  base handle was 
3530: 6f 70 65 6e 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73  opened..*/.int s
3540: 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61  qlite3_total_cha
3550: 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 64 62  nges(sqlite3 *db
3560: 29 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e  ){.  return db->
3570: 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 0a 7d 0a  nTotalChange;.}.
3580: 0a 2f 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 6e 20  ./*.** Close an 
3590: 65 78 69 73 74 69 6e 67 20 53 51 4c 69 74 65 20  existing SQLite 
35a0: 64 61 74 61 62 61 73 65 0a 2a 2f 0a 69 6e 74 20  database.*/.int 
35b0: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 73 71  sqlite3_close(sq
35c0: 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 48 61  lite3 *db){.  Ha
35d0: 73 68 45 6c 65 6d 20 2a 69 3b 0a 20 20 69 6e 74  shElem *i;.  int
35e0: 20 6a 3b 0a 0a 20 20 69 66 28 20 21 64 62 20 29   j;..  if( !db )
35f0: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  {.    return SQL
3600: 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 69 66  ITE_OK;.  }.  if
3610: 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  ( sqlite3SafetyC
3620: 68 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20  heck(db) ){.    
3630: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
3640: 53 55 53 45 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  SUSE;.  }..  /* 
3650: 49 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79  If there are any
3660: 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 56 4d 73   outstanding VMs
3670: 2c 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  , return SQLITE_
3680: 42 55 53 59 2e 20 2a 2f 0a 20 20 69 66 28 20 64  BUSY. */.  if( d
3690: 62 2d 3e 70 56 64 62 65 20 29 7b 0a 20 20 20 20  b->pVdbe ){.    
36a0: 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c  sqlite3Error(db,
36b0: 20 53 51 4c 49 54 45 5f 42 55 53 59 2c 20 0a 20   SQLITE_BUSY, . 
36c0: 20 20 20 20 20 20 20 22 55 6e 61 62 6c 65 20 74         "Unable t
36d0: 6f 20 63 6c 6f 73 65 20 64 75 65 20 74 6f 20 75  o close due to u
36e0: 6e 66 69 6e 61 6c 69 73 65 64 20 73 74 61 74 65  nfinalised state
36f0: 6d 65 6e 74 73 22 29 3b 0a 20 20 20 20 72 65 74  ments");.    ret
3700: 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  urn SQLITE_BUSY;
3710: 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 21  .  }.  assert( !
3720: 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
3730: 63 6b 28 64 62 29 20 29 3b 0a 0a 20 20 2f 2a 20  ck(db) );..  /* 
3740: 46 49 58 20 4d 45 3a 20 64 62 2d 3e 6d 61 67 69  FIX ME: db->magi
3750: 63 20 6d 61 79 20 62 65 20 73 65 74 20 74 6f 20  c may be set to 
3760: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f  SQLITE_MAGIC_CLO
3770: 53 45 44 20 69 66 20 74 68 65 20 64 61 74 61 62  SED if the datab
3780: 61 73 65 0a 20 20 2a 2a 20 63 61 6e 6e 6f 74 20  ase.  ** cannot 
3790: 62 65 20 6f 70 65 6e 65 64 20 66 6f 72 20 73 6f  be opened for so
37a0: 6d 65 20 72 65 61 73 6f 6e 2e 20 53 6f 20 74 68  me reason. So th
37b0: 69 73 20 72 6f 75 74 69 6e 65 20 6e 65 65 64 73  is routine needs
37c0: 20 74 6f 20 72 75 6e 20 69 6e 0a 20 20 2a 2a 20   to run in.  ** 
37d0: 74 68 61 74 20 63 61 73 65 2e 20 42 75 74 20 6d  that case. But m
37e0: 61 79 62 65 20 74 68 65 72 65 20 73 68 6f 75 6c  aybe there shoul
37f0: 64 20 62 65 20 61 6e 20 65 78 74 72 61 20 6d 61  d be an extra ma
3800: 67 69 63 20 76 61 6c 75 65 20 66 6f 72 20 74 68  gic value for th
3810: 65 0a 20 20 2a 2a 20 22 66 61 69 6c 65 64 20 74  e.  ** "failed t
3820: 6f 20 6f 70 65 6e 22 20 73 74 61 74 65 2e 0a 20  o open" state.. 
3830: 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61   */.  if( db->ma
3840: 67 69 63 21 3d 53 51 4c 49 54 45 5f 4d 41 47 49  gic!=SQLITE_MAGI
3850: 43 5f 43 4c 4f 53 45 44 20 26 26 20 73 71 6c 69  C_CLOSED && sqli
3860: 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
3870: 29 7b 0a 20 20 20 20 2f 2a 20 70 72 69 6e 74 66  ){.    /* printf
3880: 28 22 44 49 44 20 4e 4f 54 20 43 4c 4f 53 45 5c  ("DID NOT CLOSE\
3890: 6e 22 29 3b 20 66 66 6c 75 73 68 28 73 74 64 6f  n"); fflush(stdo
38a0: 75 74 29 3b 20 2a 2f 0a 20 20 20 20 72 65 74 75  ut); */.    retu
38b0: 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b  rn SQLITE_ERROR;
38c0: 0a 20 20 7d 0a 0a 20 20 66 6f 72 28 6a 3d 30 3b  .  }..  for(j=0;
38d0: 20 6a 3c 64 62 2d 3e 6e 44 62 3b 20 6a 2b 2b 29   j<db->nDb; j++)
38e0: 7b 0a 20 20 20 20 73 74 72 75 63 74 20 44 62 20  {.    struct Db 
38f0: 2a 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b  *pDb = &db->aDb[
3900: 6a 5d 3b 0a 20 20 20 20 69 66 28 20 70 44 62 2d  j];.    if( pDb-
3910: 3e 70 42 74 20 29 7b 0a 20 20 20 20 20 20 73 71  >pBt ){.      sq
3920: 6c 69 74 65 33 42 74 72 65 65 43 6c 6f 73 65 28  lite3BtreeClose(
3930: 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20  pDb->pBt);.     
3940: 20 70 44 62 2d 3e 70 42 74 20 3d 20 30 3b 0a 20   pDb->pBt = 0;. 
3950: 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74     }.  }.  sqlit
3960: 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53  e3ResetInternalS
3970: 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20 20  chema(db, 0);.  
3980: 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 44 62 3c  assert( db->nDb<
3990: 3d 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =2 );.  assert( 
39a0: 64 62 2d 3e 61 44 62 3d 3d 64 62 2d 3e 61 44 62  db->aDb==db->aDb
39b0: 53 74 61 74 69 63 20 29 3b 0a 20 20 66 6f 72 28  Static );.  for(
39c0: 69 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73  i=sqliteHashFirs
39d0: 74 28 26 64 62 2d 3e 61 46 75 6e 63 29 3b 20 69  t(&db->aFunc); i
39e0: 3b 20 69 3d 73 71 6c 69 74 65 48 61 73 68 4e 65  ; i=sqliteHashNe
39f0: 78 74 28 69 29 29 7b 0a 20 20 20 20 46 75 6e 63  xt(i)){.    Func
3a00: 44 65 66 20 2a 70 46 75 6e 63 2c 20 2a 70 4e 65  Def *pFunc, *pNe
3a10: 78 74 3b 0a 20 20 20 20 66 6f 72 28 70 46 75 6e  xt;.    for(pFun
3a20: 63 20 3d 20 28 46 75 6e 63 44 65 66 2a 29 73 71  c = (FuncDef*)sq
3a30: 6c 69 74 65 48 61 73 68 44 61 74 61 28 69 29 3b  liteHashData(i);
3a40: 20 70 46 75 6e 63 3b 20 70 46 75 6e 63 3d 70 4e   pFunc; pFunc=pN
3a50: 65 78 74 29 7b 0a 20 20 20 20 20 20 70 4e 65 78  ext){.      pNex
3a60: 74 20 3d 20 70 46 75 6e 63 2d 3e 70 4e 65 78 74  t = pFunc->pNext
3a70: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 46 72  ;.      sqliteFr
3a80: 65 65 28 70 46 75 6e 63 29 3b 0a 20 20 20 20 7d  ee(pFunc);.    }
3a90: 0a 20 20 7d 0a 0a 20 20 66 6f 72 28 69 3d 73 71  .  }..  for(i=sq
3aa0: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64  liteHashFirst(&d
3ab0: 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 20 69 3b  b->aCollSeq); i;
3ac0: 20 69 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78   i=sqliteHashNex
3ad0: 74 28 69 29 29 7b 0a 20 20 20 20 43 6f 6c 6c 53  t(i)){.    CollS
3ae0: 65 71 20 2a 70 43 6f 6c 6c 20 3d 20 28 43 6f 6c  eq *pColl = (Col
3af0: 6c 53 65 71 20 2a 29 73 71 6c 69 74 65 48 61 73  lSeq *)sqliteHas
3b00: 68 44 61 74 61 28 69 29 3b 0a 20 20 20 20 73 71  hData(i);.    sq
3b10: 6c 69 74 65 46 72 65 65 28 70 43 6f 6c 6c 29 3b  liteFree(pColl);
3b20: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 48 61  .  }.  sqlite3Ha
3b30: 73 68 43 6c 65 61 72 28 26 64 62 2d 3e 61 43 6f  shClear(&db->aCo
3b40: 6c 6c 53 65 71 29 3b 0a 0a 20 20 73 71 6c 69 74  llSeq);..  sqlit
3b50: 65 33 48 61 73 68 43 6c 65 61 72 28 26 64 62 2d  e3HashClear(&db-
3b60: 3e 61 46 75 6e 63 29 3b 0a 20 20 73 71 6c 69 74  >aFunc);.  sqlit
3b70: 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c 49  e3Error(db, SQLI
3b80: 54 45 5f 4f 4b 2c 20 30 29 3b 20 2f 2a 20 44 65  TE_OK, 0); /* De
3b90: 61 6c 6c 6f 63 61 74 65 73 20 61 6e 79 20 63 61  allocates any ca
3ba0: 63 68 65 64 20 65 72 72 6f 72 20 73 74 72 69 6e  ched error strin
3bb0: 67 73 2e 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  gs. */.  if( db-
3bc0: 3e 70 56 61 6c 75 65 20 29 7b 0a 20 20 20 20 73  >pValue ){.    s
3bd0: 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
3be0: 64 62 2d 3e 70 56 61 6c 75 65 29 3b 0a 20 20 7d  db->pValue);.  }
3bf0: 0a 20 20 69 66 28 20 64 62 2d 3e 70 45 72 72 20  .  if( db->pErr 
3c00: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61  ){.    sqlite3Va
3c10: 6c 75 65 46 72 65 65 28 64 62 2d 3e 70 45 72 72  lueFree(db->pErr
3c20: 29 3b 0a 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20  );.  }..#ifndef 
3c30: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47 4c 4f 42  SQLITE_OMIT_GLOB
3c40: 41 4c 52 45 43 4f 56 45 52 0a 20 20 7b 0a 20 20  ALRECOVER.  {.  
3c50: 20 20 73 71 6c 69 74 65 33 20 2a 70 50 72 65 76    sqlite3 *pPrev
3c60: 20 3d 20 70 44 62 4c 69 73 74 3b 0a 20 20 20 20   = pDbList;.    
3c70: 73 71 6c 69 74 65 33 4f 73 45 6e 74 65 72 4d 75  sqlite3OsEnterMu
3c80: 74 65 78 28 29 3b 0a 20 20 20 20 77 68 69 6c 65  tex();.    while
3c90: 28 20 70 50 72 65 76 20 26 26 20 70 50 72 65 76  ( pPrev && pPrev
3ca0: 2d 3e 70 4e 65 78 74 21 3d 64 62 20 29 7b 0a 20  ->pNext!=db ){. 
3cb0: 20 20 20 20 20 70 50 72 65 76 20 3d 20 70 50 72       pPrev = pPr
3cc0: 65 76 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 7d  ev->pNext;.    }
3cd0: 0a 20 20 20 20 69 66 28 20 70 50 72 65 76 20 29  .    if( pPrev )
3ce0: 7b 0a 20 20 20 20 20 20 70 50 72 65 76 2d 3e 70  {.      pPrev->p
3cf0: 4e 65 78 74 20 3d 20 64 62 2d 3e 70 4e 65 78 74  Next = db->pNext
3d00: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
3d10: 20 20 20 61 73 73 65 72 74 28 20 70 44 62 4c 69     assert( pDbLi
3d20: 73 74 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20 20  st==db );.      
3d30: 70 44 62 4c 69 73 74 20 3d 20 64 62 2d 3e 70 4e  pDbList = db->pN
3d40: 65 78 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  ext;.    }.    s
3d50: 71 6c 69 74 65 33 4f 73 4c 65 61 76 65 4d 75 74  qlite3OsLeaveMut
3d60: 65 78 28 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  ex();.  }.#endif
3d70: 0a 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20  ..  db->magic = 
3d80: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52  SQLITE_MAGIC_ERR
3d90: 4f 52 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65  OR;.  sqliteFree
3da0: 28 64 62 29 3b 0a 20 20 72 65 74 75 72 6e 20 53  (db);.  return S
3db0: 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  QLITE_OK;.}../*.
3dc0: 2a 2a 20 52 6f 6c 6c 62 61 63 6b 20 61 6c 6c 20  ** Rollback all 
3dd0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 2e 0a  database files..
3de0: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  */.void sqlite3R
3df0: 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74  ollbackAll(sqlit
3e00: 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 69  e3 *db){.  int i
3e10: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64  ;.  for(i=0; i<d
3e20: 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20  b->nDb; i++){.  
3e30: 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d    if( db->aDb[i]
3e40: 2e 70 42 74 20 29 7b 0a 20 20 20 20 20 20 73 71  .pBt ){.      sq
3e50: 6c 69 74 65 33 42 74 72 65 65 52 6f 6c 6c 62 61  lite3BtreeRollba
3e60: 63 6b 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42  ck(db->aDb[i].pB
3e70: 74 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 44  t);.      db->aD
3e80: 62 5b 69 5d 2e 69 6e 54 72 61 6e 73 20 3d 20 30  b[i].inTrans = 0
3e90: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71  ;.    }.  }.  sq
3ea0: 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e  lite3ResetIntern
3eb0: 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b  alSchema(db, 0);
3ec0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
3ed0: 20 61 20 73 74 61 74 69 63 20 73 74 72 69 6e 67   a static string
3ee0: 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20   that describes 
3ef0: 74 68 65 20 6b 69 6e 64 20 6f 66 20 65 72 72 6f  the kind of erro
3f00: 72 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74  r specified in t
3f10: 68 65 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a  he.** argument..
3f20: 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  */.const char *s
3f30: 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74  qlite3ErrStr(int
3f40: 20 72 63 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68   rc){.  const ch
3f50: 61 72 20 2a 7a 3b 0a 20 20 73 77 69 74 63 68 28  ar *z;.  switch(
3f60: 20 72 63 20 29 7b 0a 20 20 20 20 63 61 73 65 20   rc ){.    case 
3f70: 53 51 4c 49 54 45 5f 52 4f 57 3a 0a 20 20 20 20  SQLITE_ROW:.    
3f80: 63 61 73 65 20 53 51 4c 49 54 45 5f 44 4f 4e 45  case SQLITE_DONE
3f90: 3a 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  :.    case SQLIT
3fa0: 45 5f 4f 4b 3a 20 20 20 20 20 20 20 20 20 7a 20  E_OK:         z 
3fb0: 3d 20 22 6e 6f 74 20 61 6e 20 65 72 72 6f 72 22  = "not an error"
3fc0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
3fd0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
3fe0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
3ff0: 45 5f 45 52 52 4f 52 3a 20 20 20 20 20 20 7a 20  E_ERROR:      z 
4000: 3d 20 22 53 51 4c 20 6c 6f 67 69 63 20 65 72 72  = "SQL logic err
4010: 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67 20 64 61  or or missing da
4020: 74 61 62 61 73 65 22 3b 20 20 20 62 72 65 61 6b  tabase";   break
4030: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
4040: 45 5f 49 4e 54 45 52 4e 41 4c 3a 20 20 20 7a 20  E_INTERNAL:   z 
4050: 3d 20 22 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69  = "internal SQLi
4060: 74 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  te implementatio
4070: 6e 20 66 6c 61 77 22 3b 20 20 20 62 72 65 61 6b  n flaw";   break
4080: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
4090: 45 5f 50 45 52 4d 3a 20 20 20 20 20 20 20 7a 20  E_PERM:       z 
40a0: 3d 20 22 61 63 63 65 73 73 20 70 65 72 6d 69 73  = "access permis
40b0: 73 69 6f 6e 20 64 65 6e 69 65 64 22 3b 20 20 20  sion denied";   
40c0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
40d0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
40e0: 45 5f 41 42 4f 52 54 3a 20 20 20 20 20 20 7a 20  E_ABORT:      z 
40f0: 3d 20 22 63 61 6c 6c 62 61 63 6b 20 72 65 71 75  = "callback requ
4100: 65 73 74 65 64 20 71 75 65 72 79 20 61 62 6f 72  ested query abor
4110: 74 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b  t";        break
4120: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
4130: 45 5f 42 55 53 59 3a 20 20 20 20 20 20 20 7a 20  E_BUSY:       z 
4140: 3d 20 22 64 61 74 61 62 61 73 65 20 69 73 20 6c  = "database is l
4150: 6f 63 6b 65 64 22 3b 20 20 20 20 20 20 20 20 20  ocked";         
4160: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
4170: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
4180: 45 5f 4c 4f 43 4b 45 44 3a 20 20 20 20 20 7a 20  E_LOCKED:     z 
4190: 3d 20 22 64 61 74 61 62 61 73 65 20 74 61 62 6c  = "database tabl
41a0: 65 20 69 73 20 6c 6f 63 6b 65 64 22 3b 20 20 20  e is locked";   
41b0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
41c0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
41d0: 45 5f 4e 4f 4d 45 4d 3a 20 20 20 20 20 20 7a 20  E_NOMEM:      z 
41e0: 3d 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79  = "out of memory
41f0: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ";              
4200: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
4210: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
4220: 45 5f 52 45 41 44 4f 4e 4c 59 3a 20 20 20 7a 20  E_READONLY:   z 
4230: 3d 20 22 61 74 74 65 6d 70 74 20 74 6f 20 77 72  = "attempt to wr
4240: 69 74 65 20 61 20 72 65 61 64 6f 6e 6c 79 20 64  ite a readonly d
4250: 61 74 61 62 61 73 65 22 3b 20 20 62 72 65 61 6b  atabase";  break
4260: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
4270: 45 5f 49 4e 54 45 52 52 55 50 54 3a 20 20 7a 20  E_INTERRUPT:  z 
4280: 3d 20 22 69 6e 74 65 72 72 75 70 74 65 64 22 3b  = "interrupted";
4290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42a0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
42b0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
42c0: 45 5f 49 4f 45 52 52 3a 20 20 20 20 20 20 7a 20  E_IOERR:      z 
42d0: 3d 20 22 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f  = "disk I/O erro
42e0: 72 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r";             
42f0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
4300: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
4310: 45 5f 43 4f 52 52 55 50 54 3a 20 20 20 20 7a 20  E_CORRUPT:    z 
4320: 3d 20 22 64 61 74 61 62 61 73 65 20 64 69 73 6b  = "database disk
4330: 20 69 6d 61 67 65 20 69 73 20 6d 61 6c 66 6f 72   image is malfor
4340: 6d 65 64 22 3b 20 20 20 20 20 20 62 72 65 61 6b  med";      break
4350: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
4360: 45 5f 4e 4f 54 46 4f 55 4e 44 3a 20 20 20 7a 20  E_NOTFOUND:   z 
4370: 3d 20 22 74 61 62 6c 65 20 6f 72 20 72 65 63 6f  = "table or reco
4380: 72 64 20 6e 6f 74 20 66 6f 75 6e 64 22 3b 20 20  rd not found";  
4390: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
43a0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
43b0: 45 5f 46 55 4c 4c 3a 20 20 20 20 20 20 20 7a 20  E_FULL:       z 
43c0: 3d 20 22 64 61 74 61 62 61 73 65 20 69 73 20 66  = "database is f
43d0: 75 6c 6c 22 3b 20 20 20 20 20 20 20 20 20 20 20  ull";           
43e0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
43f0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
4400: 45 5f 43 41 4e 54 4f 50 45 4e 3a 20 20 20 7a 20  E_CANTOPEN:   z 
4410: 3d 20 22 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65  = "unable to ope
4420: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 22  n database file"
4430: 3b 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  ;          break
4440: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
4450: 45 5f 50 52 4f 54 4f 43 4f 4c 3a 20 20 20 7a 20  E_PROTOCOL:   z 
4460: 3d 20 22 64 61 74 61 62 61 73 65 20 6c 6f 63 6b  = "database lock
4470: 69 6e 67 20 70 72 6f 74 6f 63 6f 6c 20 66 61 69  ing protocol fai
4480: 6c 75 72 65 22 3b 20 20 20 20 20 62 72 65 61 6b  lure";     break
4490: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
44a0: 45 5f 45 4d 50 54 59 3a 20 20 20 20 20 20 7a 20  E_EMPTY:      z 
44b0: 3d 20 22 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e  = "table contain
44c0: 73 20 6e 6f 20 64 61 74 61 22 3b 20 20 20 20 20  s no data";     
44d0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
44e0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
44f0: 45 5f 53 43 48 45 4d 41 3a 20 20 20 20 20 7a 20  E_SCHEMA:     z 
4500: 3d 20 22 64 61 74 61 62 61 73 65 20 73 63 68 65  = "database sche
4510: 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 22 3b  ma has changed";
4520: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
4530: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
4540: 45 5f 54 4f 4f 42 49 47 3a 20 20 20 20 20 7a 20  E_TOOBIG:     z 
4550: 3d 20 22 74 6f 6f 20 6d 75 63 68 20 64 61 74 61  = "too much data
4560: 20 66 6f 72 20 6f 6e 65 20 74 61 62 6c 65 20 72   for one table r
4570: 6f 77 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b  ow";       break
4580: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
4590: 45 5f 43 4f 4e 53 54 52 41 49 4e 54 3a 20 7a 20  E_CONSTRAINT: z 
45a0: 3d 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  = "constraint fa
45b0: 69 6c 65 64 22 3b 20 20 20 20 20 20 20 20 20 20  iled";          
45c0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
45d0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
45e0: 45 5f 4d 49 53 4d 41 54 43 48 3a 20 20 20 7a 20  E_MISMATCH:   z 
45f0: 3d 20 22 64 61 74 61 74 79 70 65 20 6d 69 73 6d  = "datatype mism
4600: 61 74 63 68 22 3b 20 20 20 20 20 20 20 20 20 20  atch";          
4610: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
4620: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
4630: 45 5f 4d 49 53 55 53 45 3a 20 20 20 20 20 7a 20  E_MISUSE:     z 
4640: 3d 20 22 6c 69 62 72 61 72 79 20 72 6f 75 74 69  = "library routi
4650: 6e 65 20 63 61 6c 6c 65 64 20 6f 75 74 20 6f 66  ne called out of
4660: 20 73 65 71 75 65 6e 63 65 22 3b 62 72 65 61 6b   sequence";break
4670: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
4680: 45 5f 4e 4f 4c 46 53 3a 20 20 20 20 20 20 7a 20  E_NOLFS:      z 
4690: 3d 20 22 6b 65 72 6e 65 6c 20 6c 61 63 6b 73 20  = "kernel lacks 
46a0: 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f  large file suppo
46b0: 72 74 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b  rt";       break
46c0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
46d0: 45 5f 41 55 54 48 3a 20 20 20 20 20 20 20 7a 20  E_AUTH:       z 
46e0: 3d 20 22 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  = "authorization
46f0: 20 64 65 6e 69 65 64 22 3b 20 20 20 20 20 20 20   denied";       
4700: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
4710: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
4720: 45 5f 46 4f 52 4d 41 54 3a 20 20 20 20 20 7a 20  E_FORMAT:     z 
4730: 3d 20 22 61 75 78 69 6c 69 61 72 79 20 64 61 74  = "auxiliary dat
4740: 61 62 61 73 65 20 66 6f 72 6d 61 74 20 65 72 72  abase format err
4750: 6f 72 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b  or";       break
4760: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
4770: 45 5f 52 41 4e 47 45 3a 20 20 20 20 20 20 7a 20  E_RANGE:      z 
4780: 3d 20 22 62 69 6e 64 20 6f 72 20 63 6f 6c 75 6d  = "bind or colum
4790: 6e 20 69 6e 64 65 78 20 6f 75 74 20 6f 66 20 72  n index out of r
47a0: 61 6e 67 65 22 3b 20 20 20 20 20 62 72 65 61 6b  ange";     break
47b0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
47c0: 45 5f 4e 4f 54 41 44 42 3a 20 20 20 20 20 7a 20  E_NOTADB:     z 
47d0: 3d 20 22 66 69 6c 65 20 69 73 20 65 6e 63 72 79  = "file is encry
47e0: 70 74 65 64 20 6f 72 20 69 73 20 6e 6f 74 20 61  pted or is not a
47f0: 20 64 61 74 61 62 61 73 65 22 3b 62 72 65 61 6b   database";break
4800: 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20  ;.    default:  
4810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 20                z 
4820: 3d 20 22 75 6e 6b 6e 6f 77 6e 20 65 72 72 6f 72  = "unknown error
4830: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ";              
4840: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
4850: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a  ;.  }.  return z
4860: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  ;.}../*.** This 
4870: 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e  routine implemen
4880: 74 73 20 61 20 62 75 73 79 20 63 61 6c 6c 62 61  ts a busy callba
4890: 63 6b 20 74 68 61 74 20 73 6c 65 65 70 73 20 61  ck that sleeps a
48a0: 6e 64 20 74 72 69 65 73 0a 2a 2a 20 61 67 61 69  nd tries.** agai
48b0: 6e 20 75 6e 74 69 6c 20 61 20 74 69 6d 65 6f 75  n until a timeou
48c0: 74 20 76 61 6c 75 65 20 69 73 20 72 65 61 63 68  t value is reach
48d0: 65 64 2e 20 20 54 68 65 20 74 69 6d 65 6f 75 74  ed.  The timeout
48e0: 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 61 6e 20   value is.** an 
48f0: 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 20 6f  integer number o
4900: 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 70  f milliseconds p
4910: 61 73 73 65 64 20 69 6e 20 61 73 20 74 68 65 20  assed in as the 
4920: 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e  first.** argumen
4930: 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  t..*/.static int
4940: 20 73 71 6c 69 74 65 44 65 66 61 75 6c 74 42 75   sqliteDefaultBu
4950: 73 79 43 61 6c 6c 62 61 63 6b 28 0a 20 76 6f 69  syCallback(. voi
4960: 64 20 2a 54 69 6d 65 6f 75 74 2c 20 20 20 20 20  d *Timeout,     
4970: 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
4980: 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20   amount of time 
4990: 74 6f 20 77 61 69 74 20 2a 2f 0a 20 69 6e 74 20  to wait */. int 
49a0: 63 6f 75 6e 74 20 20 20 20 20 20 20 20 20 20 20  count           
49b0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
49c0: 66 20 74 69 6d 65 73 20 74 61 62 6c 65 20 68 61  f times table ha
49d0: 73 20 62 65 65 6e 20 62 75 73 79 20 2a 2f 0a 29  s been busy */.)
49e0: 7b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 49 4e  {.#if SQLITE_MIN
49f0: 5f 53 4c 45 45 50 5f 4d 53 3d 3d 31 0a 20 20 73  _SLEEP_MS==1.  s
4a00: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
4a10: 20 64 65 6c 61 79 73 5b 5d 20 3d 0a 20 20 20 20   delays[] =.    
4a20: 20 7b 20 31 2c 20 32 2c 20 35 2c 20 31 30 2c 20   { 1, 2, 5, 10, 
4a30: 31 35 2c 20 32 30 2c 20 32 35 2c 20 32 35 2c 20  15, 20, 25, 25, 
4a40: 20 32 35 2c 20 20 35 30 2c 20 20 35 30 2c 20 20   25,  50,  50,  
4a50: 35 30 2c 20 31 30 30 7d 3b 0a 20 20 73 74 61 74  50, 100};.  stat
4a60: 69 63 20 63 6f 6e 73 74 20 73 68 6f 72 74 20 69  ic const short i
4a70: 6e 74 20 74 6f 74 61 6c 73 5b 5d 20 3d 0a 20 20  nt totals[] =.  
4a80: 20 20 20 7b 20 30 2c 20 31 2c 20 33 2c 20 20 38     { 0, 1, 3,  8
4a90: 2c 20 31 38 2c 20 33 33 2c 20 35 33 2c 20 37 38  , 18, 33, 53, 78
4aa0: 2c 20 31 30 33 2c 20 31 32 38 2c 20 31 37 38 2c  , 103, 128, 178,
4ab0: 20 32 32 38 2c 20 32 38 37 7d 3b 0a 23 20 64 65   228, 287};.# de
4ac0: 66 69 6e 65 20 4e 44 45 4c 41 59 20 28 73 69 7a  fine NDELAY (siz
4ad0: 65 6f 66 28 64 65 6c 61 79 73 29 2f 73 69 7a 65  eof(delays)/size
4ae0: 6f 66 28 64 65 6c 61 79 73 5b 30 5d 29 29 0a 20  of(delays[0])). 
4af0: 20 70 74 72 20 74 69 6d 65 6f 75 74 20 3d 20 28   ptr timeout = (
4b00: 70 74 72 29 54 69 6d 65 6f 75 74 3b 0a 20 20 70  ptr)Timeout;.  p
4b10: 74 72 20 64 65 6c 61 79 2c 20 70 72 69 6f 72 3b  tr delay, prior;
4b20: 0a 0a 20 20 69 66 28 20 63 6f 75 6e 74 20 3c 3d  ..  if( count <=
4b30: 20 4e 44 45 4c 41 59 20 29 7b 0a 20 20 20 20 64   NDELAY ){.    d
4b40: 65 6c 61 79 20 3d 20 64 65 6c 61 79 73 5b 63 6f  elay = delays[co
4b50: 75 6e 74 2d 31 5d 3b 0a 20 20 20 20 70 72 69 6f  unt-1];.    prio
4b60: 72 20 3d 20 74 6f 74 61 6c 73 5b 63 6f 75 6e 74  r = totals[count
4b70: 2d 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  -1];.  }else{.  
4b80: 20 20 64 65 6c 61 79 20 3d 20 64 65 6c 61 79 73    delay = delays
4b90: 5b 4e 44 45 4c 41 59 2d 31 5d 3b 0a 20 20 20 20  [NDELAY-1];.    
4ba0: 70 72 69 6f 72 20 3d 20 74 6f 74 61 6c 73 5b 4e  prior = totals[N
4bb0: 44 45 4c 41 59 2d 31 5d 20 2b 20 64 65 6c 61 79  DELAY-1] + delay
4bc0: 2a 28 63 6f 75 6e 74 2d 4e 44 45 4c 41 59 2d 31  *(count-NDELAY-1
4bd0: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 72 69  );.  }.  if( pri
4be0: 6f 72 20 2b 20 64 65 6c 61 79 20 3e 20 74 69 6d  or + delay > tim
4bf0: 65 6f 75 74 20 29 7b 0a 20 20 20 20 64 65 6c 61  eout ){.    dela
4c00: 79 20 3d 20 74 69 6d 65 6f 75 74 20 2d 20 70 72  y = timeout - pr
4c10: 69 6f 72 3b 0a 20 20 20 20 69 66 28 20 64 65 6c  ior;.    if( del
4c20: 61 79 3c 3d 30 20 29 20 72 65 74 75 72 6e 20 30  ay<=0 ) return 0
4c30: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 4f  ;.  }.  sqlite3O
4c40: 73 53 6c 65 65 70 28 64 65 6c 61 79 29 3b 0a 20  sSleep(delay);. 
4c50: 20 72 65 74 75 72 6e 20 31 3b 0a 23 65 6c 73 65   return 1;.#else
4c60: 0a 20 20 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d  .  int timeout =
4c70: 20 28 69 6e 74 29 54 69 6d 65 6f 75 74 3b 0a 20   (int)Timeout;. 
4c80: 20 69 66 28 20 28 63 6f 75 6e 74 2b 31 29 2a 31   if( (count+1)*1
4c90: 30 30 30 20 3e 20 74 69 6d 65 6f 75 74 20 29 7b  000 > timeout ){
4ca0: 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20  .    return 0;. 
4cb0: 20 7d 0a 20 20 73 71 6c 69 74 65 33 4f 73 53 6c   }.  sqlite3OsSl
4cc0: 65 65 70 28 31 30 30 30 29 3b 0a 20 20 72 65 74  eep(1000);.  ret
4cd0: 75 72 6e 20 31 3b 0a 23 65 6e 64 69 66 0a 7d 0a  urn 1;.#endif.}.
4ce0: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  ./*.** This rout
4cf0: 69 6e 65 20 73 65 74 73 20 74 68 65 20 62 75 73  ine sets the bus
4d00: 79 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61  y callback for a
4d10: 6e 20 53 71 6c 69 74 65 20 64 61 74 61 62 61 73  n Sqlite databas
4d20: 65 20 74 6f 20 74 68 65 0a 2a 2a 20 67 69 76 65  e to the.** give
4d30: 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74  n callback funct
4d40: 69 6f 6e 20 77 69 74 68 20 74 68 65 20 67 69 76  ion with the giv
4d50: 65 6e 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  en argument..*/.
4d60: 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 75 73 79  int sqlite3_busy
4d70: 5f 68 61 6e 64 6c 65 72 28 0a 20 20 73 71 6c 69  _handler(.  sqli
4d80: 74 65 33 20 2a 64 62 2c 0a 20 20 69 6e 74 20 28  te3 *db,.  int (
4d90: 2a 78 42 75 73 79 29 28 76 6f 69 64 2a 2c 69 6e  *xBusy)(void*,in
4da0: 74 29 2c 0a 20 20 76 6f 69 64 20 2a 70 41 72 67  t),.  void *pArg
4db0: 0a 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  .){.  if( sqlite
4dc0: 33 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29  3SafetyCheck(db)
4dd0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
4de0: 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20  QLITE_MISUSE;.  
4df0: 7d 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64  }.  db->busyHand
4e00: 6c 65 72 2e 78 46 75 6e 63 20 3d 20 78 42 75 73  ler.xFunc = xBus
4e10: 79 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e  y;.  db->busyHan
4e20: 64 6c 65 72 2e 70 41 72 67 20 3d 20 70 41 72 67  dler.pArg = pArg
4e30: 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ;.  return SQLIT
4e40: 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  E_OK;.}..#ifndef
4e50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
4e60: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 2f  GRESS_CALLBACK./
4e70: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
4e80: 65 20 73 65 74 73 20 74 68 65 20 70 72 6f 67 72  e sets the progr
4e90: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  ess callback for
4ea0: 20 61 6e 20 53 71 6c 69 74 65 20 64 61 74 61 62   an Sqlite datab
4eb0: 61 73 65 20 74 6f 20 74 68 65 0a 2a 2a 20 67 69  ase to the.** gi
4ec0: 76 65 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e  ven callback fun
4ed0: 63 74 69 6f 6e 20 77 69 74 68 20 74 68 65 20 67  ction with the g
4ee0: 69 76 65 6e 20 61 72 67 75 6d 65 6e 74 2e 20 54  iven argument. T
4ef0: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
4f00: 62 61 63 6b 20 77 69 6c 6c 0a 2a 2a 20 62 65 20  back will.** be 
4f10: 69 6e 76 6f 6b 65 64 20 65 76 65 72 79 20 6e 4f  invoked every nO
4f20: 70 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 76  ps opcodes..*/.v
4f30: 6f 69 64 20 73 71 6c 69 74 65 33 5f 70 72 6f 67  oid sqlite3_prog
4f40: 72 65 73 73 5f 68 61 6e 64 6c 65 72 28 0a 20 20  ress_handler(.  
4f50: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 0a 20 20  sqlite3 *db, .  
4f60: 69 6e 74 20 6e 4f 70 73 2c 0a 20 20 69 6e 74 20  int nOps,.  int 
4f70: 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69  (*xProgress)(voi
4f80: 64 2a 29 2c 20 0a 20 20 76 6f 69 64 20 2a 70 41  d*), .  void *pA
4f90: 72 67 0a 29 7b 0a 20 20 69 66 28 20 21 73 71 6c  rg.){.  if( !sql
4fa0: 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28  ite3SafetyCheck(
4fb0: 64 62 29 20 29 7b 0a 20 20 20 20 69 66 28 20 6e  db) ){.    if( n
4fc0: 4f 70 73 3e 30 20 29 7b 0a 20 20 20 20 20 20 64  Ops>0 ){.      d
4fd0: 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 3d 20 78  b->xProgress = x
4fe0: 50 72 6f 67 72 65 73 73 3b 0a 20 20 20 20 20 20  Progress;.      
4ff0: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
5000: 20 3d 20 6e 4f 70 73 3b 0a 20 20 20 20 20 20 64   = nOps;.      d
5010: 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 20  b->pProgressArg 
5020: 3d 20 70 41 72 67 3b 0a 20 20 20 20 7d 65 6c 73  = pArg;.    }els
5030: 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 78 50 72  e{.      db->xPr
5040: 6f 67 72 65 73 73 20 3d 20 30 3b 0a 20 20 20 20  ogress = 0;.    
5050: 20 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f    db->nProgressO
5060: 70 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 64 62  ps = 0;.      db
5070: 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 20 3d  ->pProgressArg =
5080: 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a   0;.    }.  }.}.
5090: 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 54  #endif.../*.** T
50a0: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 6e 73 74  his routine inst
50b0: 61 6c 6c 73 20 61 20 64 65 66 61 75 6c 74 20 62  alls a default b
50c0: 75 73 79 20 68 61 6e 64 6c 65 72 20 74 68 61 74  usy handler that
50d0: 20 77 61 69 74 73 20 66 6f 72 20 74 68 65 0a 2a   waits for the.*
50e0: 2a 20 73 70 65 63 69 66 69 65 64 20 6e 75 6d 62  * specified numb
50f0: 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e  er of millisecon
5100: 64 73 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e  ds before return
5110: 69 6e 67 20 30 2e 0a 2a 2f 0a 69 6e 74 20 73 71  ing 0..*/.int sq
5120: 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f  lite3_busy_timeo
5130: 75 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ut(sqlite3 *db, 
5140: 69 6e 74 20 6d 73 29 7b 0a 20 20 69 66 28 20 6d  int ms){.  if( m
5150: 73 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  s>0 ){.    sqlit
5160: 65 33 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72 28  e3_busy_handler(
5170: 64 62 2c 20 73 71 6c 69 74 65 44 65 66 61 75 6c  db, sqliteDefaul
5180: 74 42 75 73 79 43 61 6c 6c 62 61 63 6b 2c 20 28  tBusyCallback, (
5190: 76 6f 69 64 2a 29 28 70 74 72 29 6d 73 29 3b 0a  void*)(ptr)ms);.
51a0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
51b0: 69 74 65 33 5f 62 75 73 79 5f 68 61 6e 64 6c 65  ite3_busy_handle
51c0: 72 28 64 62 2c 20 30 2c 20 30 29 3b 0a 20 20 7d  r(db, 0, 0);.  }
51d0: 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  .  return SQLITE
51e0: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 61  _OK;.}../*.** Ca
51f0: 75 73 65 20 61 6e 79 20 70 65 6e 64 69 6e 67 20  use any pending 
5200: 6f 70 65 72 61 74 69 6f 6e 20 74 6f 20 73 74 6f  operation to sto
5210: 70 20 61 74 20 69 74 73 20 65 61 72 6c 69 65 73  p at its earlies
5220: 74 20 6f 70 70 6f 72 74 75 6e 69 74 79 2e 0a 2a  t opportunity..*
5230: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 69  /.void sqlite3_i
5240: 6e 74 65 72 72 75 70 74 28 73 71 6c 69 74 65 33  nterrupt(sqlite3
5250: 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 21 73 71   *db){.  if( !sq
5260: 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
5270: 28 64 62 29 20 29 7b 0a 20 20 20 20 64 62 2d 3e  (db) ){.    db->
5280: 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f  flags |= SQLITE_
5290: 49 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 0a 7d  Interrupt;.  }.}
52a0: 0a 0a 2f 2a 0a 2a 2a 20 57 69 6e 64 6f 77 73 20  ../*.** Windows 
52b0: 73 79 73 74 65 6d 73 20 73 68 6f 75 6c 64 20 63  systems should c
52c0: 61 6c 6c 20 74 68 69 73 20 72 6f 75 74 69 6e 65  all this routine
52d0: 20 74 6f 20 66 72 65 65 20 6d 65 6d 6f 72 79 20   to free memory 
52e0: 74 68 61 74 0a 2a 2a 20 69 73 20 72 65 74 75 72  that.** is retur
52f0: 6e 65 64 20 69 6e 20 74 68 65 20 69 6e 20 74 68  ned in the in th
5300: 65 20 65 72 72 6d 73 67 20 70 61 72 61 6d 65 74  e errmsg paramet
5310: 65 72 20 6f 66 20 73 71 6c 69 74 65 33 5f 6f 70  er of sqlite3_op
5320: 65 6e 28 29 20 77 68 65 6e 0a 2a 2a 20 53 51 4c  en() when.** SQL
5330: 69 74 65 20 69 73 20 61 20 44 4c 4c 2e 20 20 46  ite is a DLL.  F
5340: 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 2c 20  or some reason, 
5350: 69 74 20 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b  it does not work
5360: 20 74 6f 20 63 61 6c 6c 20 66 72 65 65 28 29 0a   to call free().
5370: 2a 2a 20 64 69 72 65 63 74 6c 79 2e 0a 2a 2a 0a  ** directly..**.
5380: 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 77 65 20  ** Note that we 
5390: 6e 65 65 64 20 74 6f 20 63 61 6c 6c 20 66 72 65  need to call fre
53a0: 65 28 29 20 6e 6f 74 20 73 71 6c 69 74 65 46 72  e() not sqliteFr
53b0: 65 65 28 29 20 68 65 72 65 2e 0a 2a 2f 0a 76 6f  ee() here..*/.vo
53c0: 69 64 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  id sqlite3_free(
53d0: 63 68 61 72 20 2a 70 29 7b 20 66 72 65 65 28 70  char *p){ free(p
53e0: 29 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72 65 61  ); }../*.** Crea
53f0: 74 65 20 6e 65 77 20 75 73 65 72 20 66 75 6e 63  te new user func
5400: 74 69 6f 6e 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71  tions..*/.int sq
5410: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
5420: 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33  ction(.  sqlite3
5430: 20 2a 64 62 2c 0a 20 20 63 6f 6e 73 74 20 63 68   *db,.  const ch
5440: 61 72 20 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d  ar *zFunctionNam
5450: 65 2c 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20  e,.  int nArg,. 
5460: 20 69 6e 74 20 65 6e 63 2c 0a 20 20 76 6f 69 64   int enc,.  void
5470: 20 2a 70 55 73 65 72 44 61 74 61 2c 0a 20 20 76   *pUserData,.  v
5480: 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c  oid (*xFunc)(sql
5490: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
54a0: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
54b0: 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 53  **),.  void (*xS
54c0: 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  tep)(sqlite3_con
54d0: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
54e0: 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76  3_value **),.  v
54f0: 6f 69 64 20 28 2a 78 46 69 6e 61 6c 29 28 73 71  oid (*xFinal)(sq
5500: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 0a  lite3_context*).
5510: 29 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 3b  ){.  FuncDef *p;
5520: 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a 0a 20  .  int nName;.. 
5530: 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
5540: 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b 0a 20  tyCheck(db) ){. 
5550: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
5560: 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 69  _MISUSE;.  }.  i
5570: 66 28 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65  f( zFunctionName
5580: 3d 3d 30 20 7c 7c 0a 20 20 20 20 20 20 28 78 46  ==0 ||.      (xF
5590: 75 6e 63 20 26 26 20 28 78 46 69 6e 61 6c 20 7c  unc && (xFinal |
55a0: 7c 20 78 53 74 65 70 29 29 20 7c 7c 20 0a 20 20  | xStep)) || .  
55b0: 20 20 20 20 28 21 78 46 75 6e 63 20 26 26 20 28      (!xFunc && (
55c0: 78 46 69 6e 61 6c 20 26 26 20 21 78 53 74 65 70  xFinal && !xStep
55d0: 29 29 20 7c 7c 0a 20 20 20 20 20 20 28 21 78 46  )) ||.      (!xF
55e0: 75 6e 63 20 26 26 20 28 21 78 46 69 6e 61 6c 20  unc && (!xFinal 
55f0: 26 26 20 78 53 74 65 70 29 29 20 7c 7c 0a 20 20  && xStep)) ||.  
5600: 20 20 20 20 28 6e 41 72 67 3c 2d 31 20 7c 7c 20      (nArg<-1 || 
5610: 6e 41 72 67 3e 31 32 37 29 20 7c 7c 0a 20 20 20  nArg>127) ||.   
5620: 20 20 20 28 32 35 35 3c 28 6e 4e 61 6d 65 20 3d     (255<(nName =
5630: 20 73 74 72 6c 65 6e 28 7a 46 75 6e 63 74 69 6f   strlen(zFunctio
5640: 6e 4e 61 6d 65 29 29 29 20 29 7b 0a 20 20 20 20  nName))) ){.    
5650: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
5660: 52 4f 52 3b 0a 20 20 7d 0a 20 20 0a 23 69 66 6e  ROR;.  }.  .#ifn
5670: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
5680: 55 54 46 31 36 0a 20 20 2f 2a 20 49 66 20 53 51  UTF16.  /* If SQ
5690: 4c 49 54 45 5f 55 54 46 31 36 20 69 73 20 73 70  LITE_UTF16 is sp
56a0: 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 65  ecified as the e
56b0: 6e 63 6f 64 69 6e 67 20 74 79 70 65 2c 20 74 72  ncoding type, tr
56c0: 61 6e 73 66 6f 72 6d 20 74 68 69 73 0a 20 20 2a  ansform this.  *
56d0: 2a 20 74 6f 20 6f 6e 65 20 6f 66 20 53 51 4c 49  * to one of SQLI
56e0: 54 45 5f 55 54 46 31 36 4c 45 20 6f 72 20 53 51  TE_UTF16LE or SQ
56f0: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 75 73 69  LITE_UTF16BE usi
5700: 6e 67 20 74 68 65 0a 20 20 2a 2a 20 53 51 4c 49  ng the.  ** SQLI
5710: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 6d  TE_UTF16NATIVE m
5720: 61 63 72 6f 2e 20 53 51 4c 49 54 45 5f 55 54 46  acro. SQLITE_UTF
5730: 31 36 20 69 73 20 6e 6f 74 20 75 73 65 64 20 69  16 is not used i
5740: 6e 74 65 72 6e 61 6c 6c 79 2e 0a 20 20 2a 2a 0a  nternally..  **.
5750: 20 20 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 41    ** If SQLITE_A
5760: 4e 59 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  NY is specified,
5770: 20 61 64 64 20 74 68 72 65 65 20 76 65 72 73 69   add three versi
5780: 6f 6e 73 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ons of the funct
5790: 69 6f 6e 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20  ion.  ** to the 
57a0: 68 61 73 68 20 74 61 62 6c 65 2e 0a 20 20 2a 2f  hash table..  */
57b0: 0a 20 20 69 66 28 20 65 6e 63 3d 3d 53 51 4c 49  .  if( enc==SQLI
57c0: 54 45 5f 55 54 46 31 36 20 29 7b 0a 20 20 20 20  TE_UTF16 ){.    
57d0: 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
57e0: 31 36 4e 41 54 49 56 45 3b 0a 20 20 7d 65 6c 73  16NATIVE;.  }els
57f0: 65 20 69 66 28 20 65 6e 63 3d 3d 53 51 4c 49 54  e if( enc==SQLIT
5800: 45 5f 41 4e 59 20 29 7b 0a 20 20 20 20 69 6e 74  E_ANY ){.    int
5810: 20 72 63 3b 0a 20 20 20 20 72 63 20 3d 20 73 71   rc;.    rc = sq
5820: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
5830: 63 74 69 6f 6e 28 64 62 2c 20 7a 46 75 6e 63 74  ction(db, zFunct
5840: 69 6f 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 53  ionName, nArg, S
5850: 51 4c 49 54 45 5f 55 54 46 38 2c 0a 20 20 20 20  QLITE_UTF8,.    
5860: 20 20 20 20 20 70 55 73 65 72 44 61 74 61 2c 20       pUserData, 
5870: 78 46 75 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  xFunc, xStep, xF
5880: 69 6e 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 72  inal);.    if( r
5890: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72  c!=SQLITE_OK ) r
58a0: 65 74 75 72 6e 20 72 63 3b 0a 20 20 20 20 72 63  eturn rc;.    rc
58b0: 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74   = sqlite3_creat
58c0: 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 7a  e_function(db, z
58d0: 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 41  FunctionName, nA
58e0: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  rg, SQLITE_UTF16
58f0: 4c 45 2c 0a 20 20 20 20 20 20 20 20 70 55 73 65  LE,.        pUse
5900: 72 44 61 74 61 2c 20 78 46 75 6e 63 2c 20 78 53  rData, xFunc, xS
5910: 74 65 70 2c 20 78 46 69 6e 61 6c 29 3b 0a 20 20  tep, xFinal);.  
5920: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
5930: 5f 4f 4b 20 29 20 72 65 74 75 72 6e 20 72 63 3b  _OK ) return rc;
5940: 0a 20 20 20 20 65 6e 63 20 3d 20 53 51 4c 49 54  .    enc = SQLIT
5950: 45 5f 55 54 46 31 36 42 45 3b 0a 20 20 7d 0a 23  E_UTF16BE;.  }.#
5960: 65 6c 73 65 0a 20 20 65 6e 63 20 3d 20 53 51 4c  else.  enc = SQL
5970: 49 54 45 5f 55 54 46 38 3b 0a 23 65 6e 64 69 66  ITE_UTF8;.#endif
5980: 0a 20 20 0a 20 20 2f 2a 20 43 68 65 63 6b 20 69  .  .  /* Check i
5990: 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 66 75  f an existing fu
59a0: 6e 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20  nction is being 
59b0: 6f 76 65 72 72 69 64 64 65 6e 20 6f 72 20 64 65  overridden or de
59c0: 6c 65 74 65 64 2e 20 49 66 20 73 6f 2c 0a 20 20  leted. If so,.  
59d0: 2a 2a 20 61 6e 64 20 74 68 65 72 65 20 61 72 65  ** and there are
59e0: 20 61 63 74 69 76 65 20 56 4d 73 2c 20 74 68 65   active VMs, the
59f0: 6e 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  n return SQLITE_
5a00: 42 55 53 59 2e 20 49 66 20 61 20 66 75 6e 63 74  BUSY. If a funct
5a10: 69 6f 6e 0a 20 20 2a 2a 20 69 73 20 62 65 69 6e  ion.  ** is bein
5a20: 67 20 6f 76 65 72 72 69 64 64 65 6e 2f 64 65 6c  g overridden/del
5a30: 65 74 65 64 20 62 75 74 20 74 68 65 72 65 20 61  eted but there a
5a40: 72 65 20 6e 6f 20 61 63 74 69 76 65 20 56 4d 73  re no active VMs
5a50: 2c 20 61 6c 6c 6f 77 20 74 68 65 0a 20 20 2a 2a  , allow the.  **
5a60: 20 6f 70 65 72 61 74 69 6f 6e 20 74 6f 20 63 6f   operation to co
5a70: 6e 74 69 6e 75 65 20 62 75 74 20 69 6e 76 61 6c  ntinue but inval
5a80: 69 64 61 74 65 20 61 6c 6c 20 70 72 65 63 6f 6d  idate all precom
5a90: 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73  piled statements
5aa0: 2e 0a 20 20 2a 2f 0a 20 20 70 20 3d 20 73 71 6c  ..  */.  p = sql
5ab0: 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e  ite3FindFunction
5ac0: 28 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61  (db, zFunctionNa
5ad0: 6d 65 2c 20 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c  me, nName, nArg,
5ae0: 20 65 6e 63 2c 20 30 29 3b 0a 20 20 69 66 28 20   enc, 0);.  if( 
5af0: 70 20 26 26 20 70 2d 3e 69 50 72 65 66 45 6e 63  p && p->iPrefEnc
5b00: 3d 3d 65 6e 63 20 26 26 20 70 2d 3e 6e 41 72 67  ==enc && p->nArg
5b10: 3d 3d 6e 41 72 67 20 29 7b 0a 20 20 20 20 69 66  ==nArg ){.    if
5b20: 28 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65  ( db->activeVdbe
5b30: 43 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  Cnt ){.      sql
5b40: 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51  ite3Error(db, SQ
5b50: 4c 49 54 45 5f 42 55 53 59 2c 20 0a 20 20 20 20  LITE_BUSY, .    
5b60: 20 20 20 20 22 55 6e 61 62 6c 65 20 74 6f 20 64      "Unable to d
5b70: 65 6c 65 74 65 2f 6d 6f 64 69 66 79 20 75 73 65  elete/modify use
5b80: 72 2d 66 75 6e 63 74 69 6f 6e 20 64 75 65 20 74  r-function due t
5b90: 6f 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  o active stateme
5ba0: 6e 74 73 22 29 3b 0a 20 20 20 20 20 20 72 65 74  nts");.      ret
5bb0: 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  urn SQLITE_BUSY;
5bc0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
5bd0: 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
5be0: 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
5bf0: 73 28 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  s(db);.    }.  }
5c00: 0a 0a 20 20 70 20 3d 20 73 71 6c 69 74 65 33 46  ..  p = sqlite3F
5c10: 69 6e 64 46 75 6e 63 74 69 6f 6e 28 64 62 2c 20  indFunction(db, 
5c20: 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e  zFunctionName, n
5c30: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 65 6e 63 2c  Name, nArg, enc,
5c40: 20 31 29 3b 0a 20 20 69 66 28 20 70 3d 3d 30 20   1);.  if( p==0 
5c50: 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  ) return SQLITE_
5c60: 4e 4f 4d 45 4d 3b 0a 20 20 70 2d 3e 78 46 75 6e  NOMEM;.  p->xFun
5c70: 63 20 3d 20 78 46 75 6e 63 3b 0a 20 20 70 2d 3e  c = xFunc;.  p->
5c80: 78 53 74 65 70 20 3d 20 78 53 74 65 70 3b 0a 20  xStep = xStep;. 
5c90: 20 70 2d 3e 78 46 69 6e 61 6c 69 7a 65 20 3d 20   p->xFinalize = 
5ca0: 78 46 69 6e 61 6c 3b 0a 20 20 70 2d 3e 70 55 73  xFinal;.  p->pUs
5cb0: 65 72 44 61 74 61 20 3d 20 70 55 73 65 72 44 61  erData = pUserDa
5cc0: 74 61 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  ta;.  return SQL
5cd0: 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 69 66 6e 64 65  ITE_OK;.}.#ifnde
5ce0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
5cf0: 46 31 36 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  F16.int sqlite3_
5d00: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 31  create_function1
5d10: 36 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  6(.  sqlite3 *db
5d20: 2c 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ,.  const void *
5d30: 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 0a 20  zFunctionName,. 
5d40: 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 69 6e 74   int nArg,.  int
5d50: 20 65 54 65 78 74 52 65 70 2c 0a 20 20 76 6f 69   eTextRep,.  voi
5d60: 64 20 2a 70 55 73 65 72 44 61 74 61 2c 0a 20 20  d *pUserData,.  
5d70: 76 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71  void (*xFunc)(sq
5d80: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
5d90: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
5da0: 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 53  **),.  void (*xS
5db0: 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  tep)(sqlite3_con
5dc0: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
5dd0: 33 5f 76 61 6c 75 65 2a 2a 29 2c 0a 20 20 76 6f  3_value**),.  vo
5de0: 69 64 20 28 2a 78 46 69 6e 61 6c 29 28 73 71 6c  id (*xFinal)(sql
5df0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 0a 29  ite3_context*).)
5e00: 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68  {.  int rc;.  ch
5e10: 61 72 20 63 6f 6e 73 74 20 2a 7a 46 75 6e 63 38  ar const *zFunc8
5e20: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ;.  sqlite3_valu
5e30: 65 20 2a 70 54 6d 70 3b 0a 0a 20 20 69 66 28 20  e *pTmp;..  if( 
5e40: 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
5e50: 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65  ck(db) ){.    re
5e60: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
5e70: 53 45 3b 0a 20 20 7d 0a 20 20 70 54 6d 70 20 3d  SE;.  }.  pTmp =
5e80: 20 73 71 6c 69 74 65 33 47 65 74 54 72 61 6e 73   sqlite3GetTrans
5e90: 69 65 6e 74 56 61 6c 75 65 28 64 62 29 3b 0a 20  ientValue(db);. 
5ea0: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
5eb0: 53 74 72 28 70 54 6d 70 2c 20 2d 31 2c 20 7a 46  Str(pTmp, -1, zF
5ec0: 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 53 51 4c  unctionName, SQL
5ed0: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 2c  ITE_UTF16NATIVE,
5ee0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
5ef0: 20 20 7a 46 75 6e 63 38 20 3d 20 73 71 6c 69 74    zFunc8 = sqlit
5f00: 65 33 56 61 6c 75 65 54 65 78 74 28 70 54 6d 70  e3ValueText(pTmp
5f10: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a  , SQLITE_UTF8);.
5f20: 0a 20 20 69 66 28 20 21 7a 46 75 6e 63 38 20 29  .  if( !zFunc8 )
5f30: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  {.    return SQL
5f40: 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 20  ITE_NOMEM;.  }. 
5f50: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72   rc = sqlite3_cr
5f60: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62  eate_function(db
5f70: 2c 20 7a 46 75 6e 63 38 2c 20 6e 41 72 67 2c 20  , zFunc8, nArg, 
5f80: 65 54 65 78 74 52 65 70 2c 20 0a 20 20 20 20 20  eTextRep, .     
5f90: 20 70 55 73 65 72 44 61 74 61 2c 20 78 46 75 6e   pUserData, xFun
5fa0: 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  c, xStep, xFinal
5fb0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a  );.  return rc;.
5fc0: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
5fd0: 52 65 67 69 73 74 65 72 20 61 20 74 72 61 63 65  Register a trace
5fe0: 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20   function.  The 
5ff0: 70 41 72 67 20 66 72 6f 6d 20 74 68 65 20 70 72  pArg from the pr
6000: 65 76 69 6f 75 73 6c 79 20 72 65 67 69 73 74 65  eviously registe
6010: 72 65 64 20 74 72 61 63 65 0a 2a 2a 20 69 73 20  red trace.** is 
6020: 72 65 74 75 72 6e 65 64 2e 20 20 0a 2a 2a 0a 2a  returned.  .**.*
6030: 2a 20 41 20 4e 55 4c 4c 20 74 72 61 63 65 20 66  * A NULL trace f
6040: 75 6e 63 74 69 6f 6e 20 6d 65 61 6e 73 20 74 68  unction means th
6050: 61 74 20 6e 6f 20 74 72 61 63 69 6e 67 20 69 73  at no tracing is
6060: 20 65 78 65 63 75 74 65 73 2e 20 20 41 20 6e 6f   executes.  A no
6070: 6e 2d 4e 55 4c 4c 0a 2a 2a 20 74 72 61 63 65 20  n-NULL.** trace 
6080: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
6090: 61 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 20  a function that 
60a0: 69 73 20 69 6e 76 6f 6b 65 64 20 61 74 20 74 68  is invoked at th
60b0: 65 20 73 74 61 72 74 20 6f 66 20 65 61 63 68 0a  e start of each.
60c0: 2a 2a 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28  ** sqlite3_exec(
60d0: 29 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69  )..*/.void *sqli
60e0: 74 65 33 5f 74 72 61 63 65 28 73 71 6c 69 74 65  te3_trace(sqlite
60f0: 33 20 2a 64 62 2c 20 76 6f 69 64 20 28 2a 78 54  3 *db, void (*xT
6100: 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73  race)(void*,cons
6110: 74 20 63 68 61 72 2a 29 2c 20 76 6f 69 64 20 2a  t char*), void *
6120: 70 41 72 67 29 7b 0a 20 20 76 6f 69 64 20 2a 70  pArg){.  void *p
6130: 4f 6c 64 20 3d 20 64 62 2d 3e 70 54 72 61 63 65  Old = db->pTrace
6140: 41 72 67 3b 0a 20 20 64 62 2d 3e 78 54 72 61 63  Arg;.  db->xTrac
6150: 65 20 3d 20 78 54 72 61 63 65 3b 0a 20 20 64 62  e = xTrace;.  db
6160: 2d 3e 70 54 72 61 63 65 41 72 67 20 3d 20 70 41  ->pTraceArg = pA
6170: 72 67 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 6c  rg;.  return pOl
6180: 64 3b 0a 7d 0a 0a 2f 2a 2a 2a 20 45 58 50 45 52  d;.}../*** EXPER
6190: 49 4d 45 4e 54 41 4c 20 2a 2a 2a 0a 2a 2a 0a 2a  IMENTAL ***.**.*
61a0: 2a 20 52 65 67 69 73 74 65 72 20 61 20 66 75 6e  * Register a fun
61b0: 63 74 69 6f 6e 20 74 6f 20 62 65 20 69 6e 76 6f  ction to be invo
61c0: 6b 65 64 20 77 68 65 6e 20 61 20 74 72 61 6e 73  ked when a trans
61d0: 61 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74 73 2e  action comments.
61e0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 66 75  .** If either fu
61f0: 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 6e  nction returns n
6200: 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  on-zero, then th
6210: 65 20 63 6f 6d 6d 69 74 20 62 65 63 6f 6d 65 73  e commit becomes
6220: 20 61 0a 2a 2a 20 72 6f 6c 6c 62 61 63 6b 2e 0a   a.** rollback..
6230: 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  */.void *sqlite3
6240: 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 0a 20 20  _commit_hook(.  
6250: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20  sqlite3 *db,    
6260: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 74 74            /* Att
6270: 61 63 68 20 74 68 65 20 68 6f 6f 6b 20 74 6f 20  ach the hook to 
6280: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
6290: 0a 20 20 69 6e 74 20 28 2a 78 43 61 6c 6c 62 61  .  int (*xCallba
62a0: 63 6b 29 28 76 6f 69 64 2a 29 2c 20 20 2f 2a 20  ck)(void*),  /* 
62b0: 46 75 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 76 6f  Function to invo
62c0: 6b 65 20 6f 6e 20 65 61 63 68 20 63 6f 6d 6d 69  ke on each commi
62d0: 74 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72  t */.  void *pAr
62e0: 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g               
62f0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
6300: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  the function */.
6310: 29 7b 0a 20 20 76 6f 69 64 20 2a 70 4f 6c 64 20  ){.  void *pOld 
6320: 3d 20 64 62 2d 3e 70 43 6f 6d 6d 69 74 41 72 67  = db->pCommitArg
6330: 3b 0a 20 20 64 62 2d 3e 78 43 6f 6d 6d 69 74 43  ;.  db->xCommitC
6340: 61 6c 6c 62 61 63 6b 20 3d 20 78 43 61 6c 6c 62  allback = xCallb
6350: 61 63 6b 3b 0a 20 20 64 62 2d 3e 70 43 6f 6d 6d  ack;.  db->pComm
6360: 69 74 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20  itArg = pArg;.  
6370: 72 65 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 0a  return pOld;.}..
6380: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  ./*.** This rout
6390: 69 6e 65 20 69 73 20 63 61 6c 6c 65 64 20 74 6f  ine is called to
63a0: 20 63 72 65 61 74 65 20 61 20 63 6f 6e 6e 65 63   create a connec
63b0: 74 69 6f 6e 20 74 6f 20 61 20 64 61 74 61 62 61  tion to a databa
63c0: 73 65 20 42 54 72 65 65 0a 2a 2a 20 64 72 69 76  se BTree.** driv
63d0: 65 72 2e 20 20 49 66 20 7a 46 69 6c 65 6e 61 6d  er.  If zFilenam
63e0: 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  e is the name of
63f0: 20 61 20 66 69 6c 65 2c 20 74 68 65 6e 20 74 68   a file, then th
6400: 61 74 20 66 69 6c 65 20 69 73 0a 2a 2a 20 6f 70  at file is.** op
6410: 65 6e 65 64 20 61 6e 64 20 75 73 65 64 2e 20 20  ened and used.  
6420: 49 66 20 7a 46 69 6c 65 6e 61 6d 65 20 69 73 20  If zFilename is 
6430: 74 68 65 20 6d 61 67 69 63 20 6e 61 6d 65 20 22  the magic name "
6440: 3a 6d 65 6d 6f 72 79 3a 22 20 74 68 65 6e 0a 2a  :memory:" then.*
6450: 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  * the database i
6460: 73 20 73 74 6f 72 65 64 20 69 6e 20 6d 65 6d 6f  s stored in memo
6470: 72 79 20 28 61 6e 64 20 69 73 20 74 68 75 73 20  ry (and is thus 
6480: 66 6f 72 67 6f 74 74 65 6e 20 61 73 20 73 6f 6f  forgotten as soo
6490: 6e 20 61 73 0a 2a 2a 20 74 68 65 20 63 6f 6e 6e  n as.** the conn
64a0: 65 63 74 69 6f 6e 20 69 73 20 63 6c 6f 73 65 64  ection is closed
64b0: 2e 29 20 20 49 66 20 7a 46 69 6c 65 6e 61 6d 65  .)  If zFilename
64c0: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68   is NULL then th
64d0: 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 69 73  e database.** is
64e0: 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 75   for temporary u
64f0: 73 65 20 6f 6e 6c 79 20 61 6e 64 20 69 73 20 64  se only and is d
6500: 65 6c 65 74 65 64 20 61 73 20 73 6f 6f 6e 20 61  eleted as soon a
6510: 73 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  s the connection
6520: 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a  .** is closed..*
6530: 2a 0a 2a 2a 20 41 20 74 65 6d 70 6f 72 61 72 79  *.** A temporary
6540: 20 64 61 74 61 62 61 73 65 20 63 61 6e 20 62 65   database can be
6550: 20 65 69 74 68 65 72 20 61 20 64 69 73 6b 20 66   either a disk f
6560: 69 6c 65 20 28 74 68 61 74 20 69 73 20 61 75 74  ile (that is aut
6570: 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 64 65  omatically.** de
6580: 6c 65 74 65 64 20 77 68 65 6e 20 74 68 65 20 66  leted when the f
6590: 69 6c 65 20 69 73 20 63 6c 6f 73 65 64 29 20 6f  ile is closed) o
65a0: 72 20 61 20 73 65 74 20 6f 66 20 72 65 64 2d 62  r a set of red-b
65b0: 6c 61 63 6b 20 74 72 65 65 73 20 68 65 6c 64 20  lack trees held 
65c0: 69 6e 20 6d 65 6d 6f 72 79 2c 0a 2a 2a 20 64 65  in memory,.** de
65d0: 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 76  pending on the v
65e0: 61 6c 75 65 73 20 6f 66 20 74 68 65 20 54 45 4d  alues of the TEM
65f0: 50 5f 53 54 4f 52 45 20 63 6f 6d 70 69 6c 65 2d  P_STORE compile-
6600: 74 69 6d 65 20 6d 61 63 72 6f 20 61 6e 64 20 74  time macro and t
6610: 68 65 0a 2a 2a 20 64 62 2d 3e 74 65 6d 70 5f 73  he.** db->temp_s
6620: 74 6f 72 65 20 76 61 72 69 61 62 6c 65 2c 20 61  tore variable, a
6630: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20  ccording to the 
6640: 66 6f 6c 6c 6f 77 69 6e 67 20 63 68 61 72 74 3a  following chart:
6650: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 54 45 4d  .**.**       TEM
6660: 50 5f 53 54 4f 52 45 20 20 20 20 20 64 62 2d 3e  P_STORE     db->
6670: 74 65 6d 70 5f 73 74 6f 72 65 20 20 20 20 20 4c  temp_store     L
6680: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 65 6d 70 6f  ocation of tempo
6690: 72 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a  rary database.**
66a0: 20 20 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d         ---------
66b0: 2d 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  -     ----------
66c0: 2d 2d 2d 2d 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d  ----     -------
66d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
66e0: 2d 2d 2d 2d 2d 2d 2d 0a 2a 2a 20 20 20 20 20 20  -------.**      
66f0: 20 20 20 20 20 30 20 20 20 20 20 20 20 20 20 20       0          
6700: 20 20 20 20 20 61 6e 79 20 20 20 20 20 20 20 20       any        
6710: 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20       file.**    
6720: 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20         1        
6730: 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20          1       
6740: 20 20 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20 20         file.**  
6750: 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20           1      
6760: 20 20 20 20 20 20 20 20 20 20 32 20 20 20 20 20            2     
6770: 20 20 20 20 20 20 20 20 20 6d 65 6d 6f 72 79 0a           memory.
6780: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 31 20 20  **           1  
6790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 20                0 
67a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c               fil
67b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 32  e.**           2
67c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67d0: 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66  1              f
67e0: 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ile.**          
67f0: 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20   2              
6800: 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20    2             
6810: 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20   memory.**      
6820: 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20 20       2          
6830: 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20 20        0         
6840: 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20       memory.**  
6850: 20 20 20 20 20 20 20 20 20 33 20 20 20 20 20 20           3      
6860: 20 20 20 20 20 20 20 20 20 61 6e 79 20 20 20 20           any    
6870: 20 20 20 20 20 20 20 20 20 6d 65 6d 6f 72 79 0a           memory.
6880: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 74  */.int sqlite3Bt
6890: 72 65 65 46 61 63 74 6f 72 79 28 0a 20 20 63 6f  reeFactory(.  co
68a0: 6e 73 74 20 73 71 6c 69 74 65 33 20 2a 64 62 2c  nst sqlite3 *db,
68b0: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 69 6e 20          /* Main 
68c0: 64 61 74 61 62 61 73 65 20 77 68 65 6e 20 6f 70  database when op
68d0: 65 6e 69 6e 67 20 61 75 78 20 6f 74 68 65 72 77  ening aux otherw
68e0: 69 73 65 20 30 20 2a 2f 0a 20 20 63 6f 6e 73 74  ise 0 */.  const
68f0: 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65   char *zFilename
6900: 2c 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  ,    /* Name of 
6910: 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e  the file contain
6920: 69 6e 67 20 74 68 65 20 42 54 72 65 65 20 64 61  ing the BTree da
6930: 74 61 62 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  tabase */.  int 
6940: 6f 6d 69 74 4a 6f 75 72 6e 61 6c 2c 20 20 20 20  omitJournal,    
6950: 20 20 20 20 20 20 2f 2a 20 69 66 20 54 52 55 45        /* if TRUE
6960: 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 6f 75   then do not jou
6970: 72 6e 61 6c 20 74 68 69 73 20 66 69 6c 65 20 2a  rnal this file *
6980: 2f 0a 20 20 69 6e 74 20 6e 43 61 63 68 65 2c 20  /.  int nCache, 
6990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
69a0: 20 48 6f 77 20 6d 61 6e 79 20 70 61 67 65 73 20   How many pages 
69b0: 69 6e 20 74 68 65 20 70 61 67 65 20 63 61 63 68  in the page cach
69c0: 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 2a 70  e */.  Btree **p
69d0: 70 42 74 72 65 65 20 20 20 20 20 20 20 20 20 20  pBtree          
69e0: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6e   /* Pointer to n
69f0: 65 77 20 42 74 72 65 65 20 6f 62 6a 65 63 74 20  ew Btree object 
6a00: 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a  written here */.
6a10: 29 7b 0a 20 20 69 6e 74 20 62 74 72 65 65 5f 66  ){.  int btree_f
6a20: 6c 61 67 73 20 3d 20 30 3b 0a 20 20 69 6e 74 20  lags = 0;.  int 
6a30: 72 63 3b 0a 20 20 0a 20 20 61 73 73 65 72 74 28  rc;.  .  assert(
6a40: 20 70 70 42 74 72 65 65 20 21 3d 20 30 29 3b 0a   ppBtree != 0);.
6a50: 20 20 69 66 28 20 6f 6d 69 74 4a 6f 75 72 6e 61    if( omitJourna
6a60: 6c 20 29 7b 0a 20 20 20 20 62 74 72 65 65 5f 66  l ){.    btree_f
6a70: 6c 61 67 73 20 7c 3d 20 42 54 52 45 45 5f 4f 4d  lags |= BTREE_OM
6a80: 49 54 5f 4a 4f 55 52 4e 41 4c 3b 0a 20 20 7d 0a  IT_JOURNAL;.  }.
6a90: 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20    if( db->flags 
6aa0: 26 20 53 51 4c 49 54 45 5f 4e 6f 52 65 61 64 6c  & SQLITE_NoReadl
6ab0: 6f 63 6b 20 29 7b 0a 20 20 20 20 62 74 72 65 65  ock ){.    btree
6ac0: 5f 66 6c 61 67 73 20 7c 3d 20 42 54 52 45 45 5f  _flags |= BTREE_
6ad0: 4e 4f 5f 52 45 41 44 4c 4f 43 4b 3b 0a 20 20 7d  NO_READLOCK;.  }
6ae0: 0a 20 20 69 66 28 20 7a 46 69 6c 65 6e 61 6d 65  .  if( zFilename
6af0: 3d 3d 30 20 29 7b 0a 23 69 66 20 54 45 4d 50 5f  ==0 ){.#if TEMP_
6b00: 53 54 4f 52 45 3d 3d 30 0a 20 20 20 20 2f 2a 20  STORE==0.    /* 
6b10: 44 6f 20 6e 6f 74 68 69 6e 67 20 2a 2f 0a 23 65  Do nothing */.#e
6b20: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
6b30: 49 54 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44  ITE_OMIT_MEMORYD
6b40: 42 0a 23 69 66 20 54 45 4d 50 5f 53 54 4f 52 45  B.#if TEMP_STORE
6b50: 3d 3d 31 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  ==1.    if( db->
6b60: 74 65 6d 70 5f 73 74 6f 72 65 3d 3d 32 20 29 20  temp_store==2 ) 
6b70: 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 22 3a 6d 65  zFilename = ":me
6b80: 6d 6f 72 79 3a 22 3b 0a 23 65 6e 64 69 66 0a 23  mory:";.#endif.#
6b90: 69 66 20 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 32  if TEMP_STORE==2
6ba0: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 74 65 6d  .    if( db->tem
6bb0: 70 5f 73 74 6f 72 65 21 3d 31 20 29 20 7a 46 69  p_store!=1 ) zFi
6bc0: 6c 65 6e 61 6d 65 20 3d 20 22 3a 6d 65 6d 6f 72  lename = ":memor
6bd0: 79 3a 22 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  y:";.#endif.#if 
6be0: 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 0a 20 20  TEMP_STORE==3.  
6bf0: 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 22 3a    zFilename = ":
6c00: 6d 65 6d 6f 72 79 3a 22 3b 0a 23 65 6e 64 69 66  memory:";.#endif
6c10: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
6c20: 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44 42 20  E_OMIT_MEMORYDB 
6c30: 2a 2f 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20 73  */.  }..  rc = s
6c40: 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28  qlite3BtreeOpen(
6c50: 7a 46 69 6c 65 6e 61 6d 65 2c 20 70 70 42 74 72  zFilename, ppBtr
6c60: 65 65 2c 20 62 74 72 65 65 5f 66 6c 61 67 73 29  ee, btree_flags)
6c70: 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
6c80: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c  TE_OK ){.    sql
6c90: 69 74 65 33 42 74 72 65 65 53 65 74 42 75 73 79  ite3BtreeSetBusy
6ca0: 48 61 6e 64 6c 65 72 28 2a 70 70 42 74 72 65 65  Handler(*ppBtree
6cb0: 2c 20 28 76 6f 69 64 2a 29 26 64 62 2d 3e 62 75  , (void*)&db->bu
6cc0: 73 79 48 61 6e 64 6c 65 72 29 3b 0a 20 20 20 20  syHandler);.    
6cd0: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
6ce0: 61 63 68 65 53 69 7a 65 28 2a 70 70 42 74 72 65  acheSize(*ppBtre
6cf0: 65 2c 20 6e 43 61 63 68 65 29 3b 0a 20 20 7d 0a  e, nCache);.  }.
6d00: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a    return rc;.}..
6d10: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 55 54 46  /*.** Return UTF
6d20: 2d 38 20 65 6e 63 6f 64 65 64 20 45 6e 67 6c 69  -8 encoded Engli
6d30: 73 68 20 6c 61 6e 67 75 61 67 65 20 65 78 70 6c  sh language expl
6d40: 61 6e 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d  anation of the m
6d50: 6f 73 74 20 72 65 63 65 6e 74 0a 2a 2a 20 65 72  ost recent.** er
6d60: 72 6f 72 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68  ror..*/.const ch
6d70: 61 72 20 2a 73 71 6c 69 74 65 33 5f 65 72 72 6d  ar *sqlite3_errm
6d80: 73 67 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b  sg(sqlite3 *db){
6d90: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
6da0: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f  ;.  if( sqlite3_
6db0: 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 29 7b  malloc_failed ){
6dc0: 0a 20 20 20 20 72 65 74 75 72 6e 20 73 71 6c 69  .    return sqli
6dd0: 74 65 33 45 72 72 53 74 72 28 53 51 4c 49 54 45  te3ErrStr(SQLITE
6de0: 5f 4e 4f 4d 45 4d 29 3b 0a 20 20 7d 0a 20 20 69  _NOMEM);.  }.  i
6df0: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
6e00: 43 68 65 63 6b 28 64 62 29 20 7c 7c 20 64 62 2d  Check(db) || db-
6e10: 3e 65 72 72 43 6f 64 65 3d 3d 53 51 4c 49 54 45  >errCode==SQLITE
6e20: 5f 4d 49 53 55 53 45 20 29 7b 0a 20 20 20 20 72  _MISUSE ){.    r
6e30: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 45 72 72  eturn sqlite3Err
6e40: 53 74 72 28 53 51 4c 49 54 45 5f 4d 49 53 55 53  Str(SQLITE_MISUS
6e50: 45 29 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71  E);.  }.  z = sq
6e60: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
6e70: 28 64 62 2d 3e 70 45 72 72 29 3b 0a 20 20 69 66  (db->pErr);.  if
6e80: 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 7a 20  ( z==0 ){.    z 
6e90: 3d 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28  = sqlite3ErrStr(
6ea0: 64 62 2d 3e 65 72 72 43 6f 64 65 29 3b 0a 20 20  db->errCode);.  
6eb0: 7d 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a  }.  return z;.}.
6ec0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
6ed0: 4f 4d 49 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a  OMIT_UTF16./*.**
6ee0: 20 52 65 74 75 72 6e 20 55 54 46 2d 31 36 20 65   Return UTF-16 e
6ef0: 6e 63 6f 64 65 64 20 45 6e 67 6c 69 73 68 20 6c  ncoded English l
6f00: 61 6e 67 75 61 67 65 20 65 78 70 6c 61 6e 61 74  anguage explanat
6f10: 69 6f 6e 20 6f 66 20 74 68 65 20 6d 6f 73 74 20  ion of the most 
6f20: 72 65 63 65 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e  recent.** error.
6f30: 0a 2a 2f 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  .*/.const void *
6f40: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36  sqlite3_errmsg16
6f50: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
6f60: 20 2f 2a 20 42 65 63 61 75 73 65 20 61 6c 6c 20   /* Because all 
6f70: 74 68 65 20 63 68 61 72 61 63 74 65 72 73 20 69  the characters i
6f80: 6e 20 74 68 65 20 73 74 72 69 6e 67 20 61 72 65  n the string are
6f90: 20 69 6e 20 74 68 65 20 75 6e 69 63 6f 64 65 0a   in the unicode.
6fa0: 20 20 2a 2a 20 72 61 6e 67 65 20 30 78 30 30 2d    ** range 0x00-
6fb0: 30 78 46 46 2c 20 69 66 20 77 65 20 70 61 64 20  0xFF, if we pad 
6fc0: 74 68 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 73  the big-endian s
6fd0: 74 72 69 6e 67 20 77 69 74 68 20 61 20 0a 20 20  tring with a .  
6fe0: 2a 2a 20 7a 65 72 6f 20 62 79 74 65 2c 20 77 65  ** zero byte, we
6ff0: 20 63 61 6e 20 6f 62 74 61 69 6e 20 74 68 65 20   can obtain the 
7000: 6c 69 74 74 6c 65 2d 65 6e 64 69 61 6e 20 73 74  little-endian st
7010: 72 69 6e 67 20 77 69 74 68 0a 20 20 2a 2a 20 26  ring with.  ** &
7020: 62 69 67 5f 65 6e 64 69 61 6e 5b 31 5d 2e 0a 20  big_endian[1].. 
7030: 20 2a 2f 0a 20 20 73 74 61 74 69 63 20 63 6f 6e   */.  static con
7040: 73 74 20 63 68 61 72 20 6f 75 74 4f 66 4d 65 6d  st char outOfMem
7050: 42 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 30 2c 20  Be[] = {.    0, 
7060: 27 6f 27 2c 20 30 2c 20 27 75 27 2c 20 30 2c 20  'o', 0, 'u', 0, 
7070: 27 74 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20  't', 0, ' ', .  
7080: 20 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27 66 27    0, 'o', 0, 'f'
7090: 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20 20 20 30  , 0, ' ', .    0
70a0: 2c 20 27 6d 27 2c 20 30 2c 20 27 65 27 2c 20 30  , 'm', 0, 'e', 0
70b0: 2c 20 27 6d 27 2c 20 30 2c 20 27 6f 27 2c 20 30  , 'm', 0, 'o', 0
70c0: 2c 20 27 72 27 2c 20 30 2c 20 27 79 27 2c 20 30  , 'r', 0, 'y', 0
70d0: 2c 20 30 2c 20 30 0a 20 20 7d 3b 0a 20 20 73 74  , 0, 0.  };.  st
70e0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
70f0: 6d 69 73 75 73 65 42 65 20 5b 5d 20 3d 20 7b 0a  misuseBe [] = {.
7100: 20 20 20 20 30 2c 20 27 6c 27 2c 20 30 2c 20 27      0, 'l', 0, '
7110: 69 27 2c 20 30 2c 20 27 62 27 2c 20 30 2c 20 27  i', 0, 'b', 0, '
7120: 72 27 2c 20 30 2c 20 27 61 27 2c 20 30 2c 20 27  r', 0, 'a', 0, '
7130: 72 27 2c 20 30 2c 20 27 79 27 2c 20 30 2c 20 27  r', 0, 'y', 0, '
7140: 20 27 2c 20 0a 20 20 20 20 30 2c 20 27 72 27 2c   ', .    0, 'r',
7150: 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27 75 27 2c   0, 'o', 0, 'u',
7160: 20 30 2c 20 27 74 27 2c 20 30 2c 20 27 69 27 2c   0, 't', 0, 'i',
7170: 20 30 2c 20 27 6e 27 2c 20 30 2c 20 27 65 27 2c   0, 'n', 0, 'e',
7180: 20 30 2c 20 27 20 27 2c 20 0a 20 20 20 20 30 2c   0, ' ', .    0,
7190: 20 27 63 27 2c 20 30 2c 20 27 61 27 2c 20 30 2c   'c', 0, 'a', 0,
71a0: 20 27 6c 27 2c 20 30 2c 20 27 6c 27 2c 20 30 2c   'l', 0, 'l', 0,
71b0: 20 27 65 27 2c 20 30 2c 20 27 64 27 2c 20 30 2c   'e', 0, 'd', 0,
71c0: 20 27 20 27 2c 20 0a 20 20 20 20 30 2c 20 27 6f   ' ', .    0, 'o
71d0: 27 2c 20 30 2c 20 27 75 27 2c 20 30 2c 20 27 74  ', 0, 'u', 0, 't
71e0: 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20 20 20  ', 0, ' ', .    
71f0: 30 2c 20 27 6f 27 2c 20 30 2c 20 27 66 27 2c 20  0, 'o', 0, 'f', 
7200: 30 2c 20 27 20 27 2c 20 0a 20 20 20 20 30 2c 20  0, ' ', .    0, 
7210: 27 73 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20  's', 0, 'e', 0, 
7220: 27 71 27 2c 20 30 2c 20 27 75 27 2c 20 30 2c 20  'q', 0, 'u', 0, 
7230: 27 65 27 2c 20 30 2c 20 27 6e 27 2c 20 30 2c 20  'e', 0, 'n', 0, 
7240: 27 63 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20  'c', 0, 'e', 0, 
7250: 30 2c 20 30 0a 20 20 7d 3b 0a 0a 20 20 63 6f 6e  0, 0.  };..  con
7260: 73 74 20 76 6f 69 64 20 2a 7a 3b 0a 20 20 69 66  st void *z;.  if
7270: 28 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  ( sqlite3_malloc
7280: 5f 66 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 72  _failed ){.    r
7290: 65 74 75 72 6e 20 28 76 6f 69 64 20 2a 29 28 26  eturn (void *)(&
72a0: 6f 75 74 4f 66 4d 65 6d 42 65 5b 53 51 4c 49 54  outOfMemBe[SQLIT
72b0: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 3d 3d 53  E_UTF16NATIVE==S
72c0: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 3f 31 3a  QLITE_UTF16LE?1:
72d0: 30 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  0]);.  }.  if( s
72e0: 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
72f0: 6b 28 64 62 29 20 7c 7c 20 64 62 2d 3e 65 72 72  k(db) || db->err
7300: 43 6f 64 65 3d 3d 53 51 4c 49 54 45 5f 4d 49 53  Code==SQLITE_MIS
7310: 55 53 45 20 29 7b 0a 20 20 20 20 72 65 74 75 72  USE ){.    retur
7320: 6e 20 28 76 6f 69 64 20 2a 29 28 26 6d 69 73 75  n (void *)(&misu
7330: 73 65 42 65 5b 53 51 4c 49 54 45 5f 55 54 46 31  seBe[SQLITE_UTF1
7340: 36 4e 41 54 49 56 45 3d 3d 53 51 4c 49 54 45 5f  6NATIVE==SQLITE_
7350: 55 54 46 31 36 4c 45 3f 31 3a 30 5d 29 3b 0a 20  UTF16LE?1:0]);. 
7360: 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33   }.  z = sqlite3
7370: 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 28 64 62  _value_text16(db
7380: 2d 3e 70 45 72 72 29 3b 0a 20 20 69 66 28 20 7a  ->pErr);.  if( z
7390: 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
73a0: 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 64 62  e3ValueSetStr(db
73b0: 2d 3e 70 45 72 72 2c 20 2d 31 2c 20 73 71 6c 69  ->pErr, -1, sqli
73c0: 74 65 33 45 72 72 53 74 72 28 64 62 2d 3e 65 72  te3ErrStr(db->er
73d0: 72 43 6f 64 65 29 2c 0a 20 20 20 20 20 20 20 20  rCode),.        
73e0: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
73f0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
7400: 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 76 61    z = sqlite3_va
7410: 6c 75 65 5f 74 65 78 74 31 36 28 64 62 2d 3e 70  lue_text16(db->p
7420: 45 72 72 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  Err);.  }.  retu
7430: 72 6e 20 7a 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  rn z;.}.#endif /
7440: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  * SQLITE_OMIT_UT
7450: 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65  F16 */../*.** Re
7460: 74 75 72 6e 20 74 68 65 20 6d 6f 73 74 20 72 65  turn the most re
7470: 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20  cent error code 
7480: 67 65 6e 65 72 61 74 65 64 20 62 79 20 61 6e 20  generated by an 
7490: 53 51 4c 69 74 65 20 72 6f 75 74 69 6e 65 2e 0a  SQLite routine..
74a0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 65  */.int sqlite3_e
74b0: 72 72 63 6f 64 65 28 73 71 6c 69 74 65 33 20 2a  rrcode(sqlite3 *
74c0: 64 62 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74  db){.  if( sqlit
74d0: 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64  e3_malloc_failed
74e0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
74f0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d  QLITE_NOMEM;.  }
7500: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
7510: 66 65 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b  fetyCheck(db) ){
7520: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
7530: 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20  TE_MISUSE;.  }. 
7540: 20 72 65 74 75 72 6e 20 64 62 2d 3e 65 72 72 43   return db->errC
7550: 6f 64 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68  ode;.}../*.** Ch
7560: 65 63 6b 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  eck schema cooki
7570: 65 73 20 69 6e 20 61 6c 6c 20 64 61 74 61 62 61  es in all databa
7580: 73 65 73 2e 20 20 49 66 20 61 6e 79 20 63 6f 6f  ses.  If any coo
7590: 6b 69 65 20 69 73 20 6f 75 74 0a 2a 2a 20 6f 66  kie is out.** of
75a0: 20 64 61 74 65 2c 20 72 65 74 75 72 6e 20 30 2e   date, return 0.
75b0: 20 20 49 66 20 61 6c 6c 20 73 63 68 65 6d 61 20    If all schema 
75c0: 63 6f 6f 6b 69 65 73 20 61 72 65 20 63 75 72 72  cookies are curr
75d0: 65 6e 74 2c 20 72 65 74 75 72 6e 20 31 2e 0a 2a  ent, return 1..*
75e0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 63 68  /.static int sch
75f0: 65 6d 61 49 73 56 61 6c 69 64 28 73 71 6c 69 74  emaIsValid(sqlit
7600: 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 69  e3 *db){.  int i
7610: 44 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  Db;.  int rc;.  
7620: 42 74 43 75 72 73 6f 72 20 2a 63 75 72 54 65 6d  BtCursor *curTem
7630: 70 3b 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 3b  p;.  int cookie;
7640: 0a 20 20 69 6e 74 20 61 6c 6c 4f 6b 20 3d 20 31  .  int allOk = 1
7650: 3b 0a 0a 20 20 66 6f 72 28 69 44 62 3d 30 3b 20  ;..  for(iDb=0; 
7660: 61 6c 6c 4f 6b 20 26 26 20 69 44 62 3c 64 62 2d  allOk && iDb<db-
7670: 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20  >nDb; iDb++){.  
7680: 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20    Btree *pBt;.  
7690: 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
76a0: 69 44 62 5d 2e 70 42 74 3b 0a 20 20 20 20 69 66  iDb].pBt;.    if
76b0: 28 20 70 42 74 3d 3d 30 20 29 20 63 6f 6e 74 69  ( pBt==0 ) conti
76c0: 6e 75 65 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  nue;.    rc = sq
76d0: 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
76e0: 28 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f  (pBt, MASTER_ROO
76f0: 54 2c 20 30 2c 20 30 2c 20 30 2c 20 26 63 75 72  T, 0, 0, 0, &cur
7700: 54 65 6d 70 29 3b 0a 20 20 20 20 69 66 28 20 72  Temp);.    if( r
7710: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
7720: 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
7730: 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 70  e3BtreeGetMeta(p
7740: 42 74 2c 20 31 2c 20 28 75 33 32 20 2a 29 26 63  Bt, 1, (u32 *)&c
7750: 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 20 20 69 66  ookie);.      if
7760: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
7770: 26 26 20 63 6f 6f 6b 69 65 21 3d 64 62 2d 3e 61  && cookie!=db->a
7780: 44 62 5b 69 44 62 5d 2e 73 63 68 65 6d 61 5f 63  Db[iDb].schema_c
7790: 6f 6f 6b 69 65 20 29 7b 0a 20 20 20 20 20 20 20  ookie ){.       
77a0: 20 61 6c 6c 4f 6b 20 3d 20 30 3b 0a 20 20 20 20   allOk = 0;.    
77b0: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
77c0: 33 42 74 72 65 65 43 6c 6f 73 65 43 75 72 73 6f  3BtreeCloseCurso
77d0: 72 28 63 75 72 54 65 6d 70 29 3b 0a 20 20 20 20  r(curTemp);.    
77e0: 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 61  }.  }.  return a
77f0: 6c 6c 4f 6b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43  llOk;.}../*.** C
7800: 6f 6d 70 69 6c 65 20 74 68 65 20 55 54 46 2d 38  ompile the UTF-8
7810: 20 65 6e 63 6f 64 65 64 20 53 51 4c 20 73 74 61   encoded SQL sta
7820: 74 65 6d 65 6e 74 20 7a 53 71 6c 20 69 6e 74 6f  tement zSql into
7830: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 68 61 6e   a statement han
7840: 64 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  dle..*/.int sqli
7850: 74 65 33 5f 70 72 65 70 61 72 65 28 0a 20 20 73  te3_prepare(.  s
7860: 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20  qlite3 *db,     
7870: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
7880: 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 2a 2f 0a  base handle. */.
7890: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53    const char *zS
78a0: 71 6c 2c 20 20 20 20 20 20 20 20 20 2f 2a 20 55  ql,         /* U
78b0: 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 53 51 4c  TF-8 encoded SQL
78c0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 2a 2f 0a 20   statement. */. 
78d0: 20 69 6e 74 20 6e 42 79 74 65 73 2c 20 20 20 20   int nBytes,    
78e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65             /* Le
78f0: 6e 67 74 68 20 6f 66 20 7a 53 71 6c 20 69 6e 20  ngth of zSql in 
7900: 62 79 74 65 73 2e 20 2a 2f 0a 20 20 73 71 6c 69  bytes. */.  sqli
7910: 74 65 33 5f 73 74 6d 74 20 2a 2a 70 70 53 74 6d  te3_stmt **ppStm
7920: 74 2c 20 20 20 20 2f 2a 20 4f 55 54 3a 20 41 20  t,    /* OUT: A 
7930: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 70  pointer to the p
7940: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
7950: 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  t */.  const cha
7960: 72 2a 2a 20 70 7a 54 61 69 6c 20 20 20 20 20 20  r** pzTail      
7970: 20 2f 2a 20 4f 55 54 3a 20 45 6e 64 20 6f 66 20   /* OUT: End of 
7980: 70 61 72 73 65 64 20 73 74 72 69 6e 67 20 2a 2f  parsed string */
7990: 0a 29 7b 0a 20 20 50 61 72 73 65 20 73 50 61 72  .){.  Parse sPar
79a0: 73 65 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72  se;.  char *zErr
79b0: 4d 73 67 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72  Msg = 0;.  int r
79c0: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 0a  c = SQLITE_OK;..
79d0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 6d 61    if( sqlite3_ma
79e0: 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 29 7b 0a 20  lloc_failed ){. 
79f0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
7a00: 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 0a 20 20 61  _NOMEM;.  }..  a
7a10: 73 73 65 72 74 28 20 70 70 53 74 6d 74 20 29 3b  ssert( ppStmt );
7a20: 0a 20 20 2a 70 70 53 74 6d 74 20 3d 20 30 3b 0a  .  *ppStmt = 0;.
7a30: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
7a40: 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20 20 20  etyOn(db) ){.   
7a50: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d   return SQLITE_M
7a60: 49 53 55 53 45 3b 0a 20 20 7d 0a 0a 20 20 6d 65  ISUSE;.  }..  me
7a70: 6d 73 65 74 28 26 73 50 61 72 73 65 2c 20 30 2c  mset(&sParse, 0,
7a80: 20 73 69 7a 65 6f 66 28 73 50 61 72 73 65 29 29   sizeof(sParse))
7a90: 3b 0a 20 20 73 50 61 72 73 65 2e 64 62 20 3d 20  ;.  sParse.db = 
7aa0: 64 62 3b 0a 20 20 73 71 6c 69 74 65 33 52 75 6e  db;.  sqlite3Run
7ab0: 50 61 72 73 65 72 28 26 73 50 61 72 73 65 2c 20  Parser(&sParse, 
7ac0: 7a 53 71 6c 2c 20 26 7a 45 72 72 4d 73 67 29 3b  zSql, &zErrMsg);
7ad0: 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f  ..  if( sqlite3_
7ae0: 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 29 7b  malloc_failed ){
7af0: 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
7b00: 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 73 71 6c 69  _NOMEM;.    sqli
7b10: 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64  te3RollbackAll(d
7b20: 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 52  b);.    sqlite3R
7b30: 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65  esetInternalSche
7b40: 6d 61 28 64 62 2c 20 30 29 3b 0a 20 20 20 20 64  ma(db, 0);.    d
7b50: 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 53 51 4c  b->flags &= ~SQL
7b60: 49 54 45 5f 49 6e 54 72 61 6e 73 3b 0a 20 20 20  ITE_InTrans;.   
7b70: 20 67 6f 74 6f 20 70 72 65 70 61 72 65 5f 6f 75   goto prepare_ou
7b80: 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 50 61  t;.  }.  if( sPa
7b90: 72 73 65 2e 72 63 3d 3d 53 51 4c 49 54 45 5f 44  rse.rc==SQLITE_D
7ba0: 4f 4e 45 20 29 20 73 50 61 72 73 65 2e 72 63 20  ONE ) sParse.rc 
7bb0: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69  = SQLITE_OK;.  i
7bc0: 66 28 20 73 50 61 72 73 65 2e 72 63 21 3d 53 51  f( sParse.rc!=SQ
7bd0: 4c 49 54 45 5f 4f 4b 20 26 26 20 73 50 61 72 73  LITE_OK && sPars
7be0: 65 2e 63 68 65 63 6b 53 63 68 65 6d 61 20 26 26  e.checkSchema &&
7bf0: 20 21 73 63 68 65 6d 61 49 73 56 61 6c 69 64 28   !schemaIsValid(
7c00: 64 62 29 20 29 7b 0a 20 20 20 20 73 50 61 72 73  db) ){.    sPars
7c10: 65 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43  e.rc = SQLITE_SC
7c20: 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 69 66 28 20  HEMA;.  }.  if( 
7c30: 73 50 61 72 73 65 2e 72 63 3d 3d 53 51 4c 49 54  sParse.rc==SQLIT
7c40: 45 5f 53 43 48 45 4d 41 20 29 7b 0a 20 20 20 20  E_SCHEMA ){.    
7c50: 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65  sqlite3ResetInte
7c60: 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 30  rnalSchema(db, 0
7c70: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 7a 54  );.  }.  if( pzT
7c80: 61 69 6c 20 29 20 2a 70 7a 54 61 69 6c 20 3d 20  ail ) *pzTail = 
7c90: 73 50 61 72 73 65 2e 7a 54 61 69 6c 3b 0a 20 20  sParse.zTail;.  
7ca0: 72 63 20 3d 20 73 50 61 72 73 65 2e 72 63 3b 0a  rc = sParse.rc;.
7cb0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
7cc0: 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69  OMIT_EXPLAIN.  i
7cd0: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
7ce0: 20 26 26 20 73 50 61 72 73 65 2e 70 56 64 62 65   && sParse.pVdbe
7cf0: 20 26 26 20 73 50 61 72 73 65 2e 65 78 70 6c 61   && sParse.expla
7d00: 69 6e 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  in ){.    sqlite
7d10: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
7d20: 73 50 61 72 73 65 2e 70 56 64 62 65 2c 20 35 29  sParse.pVdbe, 5)
7d30: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
7d40: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 73 50 61 72  eSetColName(sPar
7d50: 73 65 2e 70 56 64 62 65 2c 20 30 2c 20 22 61 64  se.pVdbe, 0, "ad
7d60: 64 72 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b  dr", P3_STATIC);
7d70: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
7d80: 53 65 74 43 6f 6c 4e 61 6d 65 28 73 50 61 72 73  SetColName(sPars
7d90: 65 2e 70 56 64 62 65 2c 20 31 2c 20 22 6f 70 63  e.pVdbe, 1, "opc
7da0: 6f 64 65 22 2c 20 50 33 5f 53 54 41 54 49 43 29  ode", P3_STATIC)
7db0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
7dc0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 73 50 61 72  eSetColName(sPar
7dd0: 73 65 2e 70 56 64 62 65 2c 20 32 2c 20 22 70 31  se.pVdbe, 2, "p1
7de0: 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20  ", P3_STATIC);. 
7df0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
7e00: 74 43 6f 6c 4e 61 6d 65 28 73 50 61 72 73 65 2e  tColName(sParse.
7e10: 70 56 64 62 65 2c 20 33 2c 20 22 70 32 22 2c 20  pVdbe, 3, "p2", 
7e20: 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P3_STATIC);.    
7e30: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
7e40: 6c 4e 61 6d 65 28 73 50 61 72 73 65 2e 70 56 64  lName(sParse.pVd
7e50: 62 65 2c 20 34 2c 20 22 70 33 22 2c 20 50 33 5f  be, 4, "p3", P3_
7e60: 53 54 41 54 49 43 29 3b 0a 20 20 7d 20 0a 23 65  STATIC);.  } .#e
7e70: 6e 64 69 66 0a 0a 70 72 65 70 61 72 65 5f 6f 75  ndif..prepare_ou
7e80: 74 3a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  t:.  if( sqlite3
7e90: 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 7b  SafetyOff(db) ){
7ea0: 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
7eb0: 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 69  _MISUSE;.  }.  i
7ec0: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
7ed0: 20 29 7b 0a 20 20 20 20 2a 70 70 53 74 6d 74 20   ){.    *ppStmt 
7ee0: 3d 20 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a  = (sqlite3_stmt*
7ef0: 29 73 50 61 72 73 65 2e 70 56 64 62 65 3b 0a 20  )sParse.pVdbe;. 
7f00: 20 7d 65 6c 73 65 20 69 66 28 20 73 50 61 72 73   }else if( sPars
7f10: 65 2e 70 56 64 62 65 20 29 7b 0a 20 20 20 20 73  e.pVdbe ){.    s
7f20: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
7f30: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 29 73  (sqlite3_stmt*)s
7f40: 50 61 72 73 65 2e 70 56 64 62 65 29 3b 0a 20 20  Parse.pVdbe);.  
7f50: 7d 0a 0a 20 20 69 66 28 20 7a 45 72 72 4d 73 67  }..  if( zErrMsg
7f60: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45   ){.    sqlite3E
7f70: 72 72 6f 72 28 64 62 2c 20 72 63 2c 20 22 25 73  rror(db, rc, "%s
7f80: 22 2c 20 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  ", zErrMsg);.   
7f90: 20 73 71 6c 69 74 65 46 72 65 65 28 7a 45 72 72   sqliteFree(zErr
7fa0: 4d 73 67 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Msg);.  }else{. 
7fb0: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28     sqlite3Error(
7fc0: 64 62 2c 20 72 63 2c 20 30 29 3b 0a 20 20 7d 0a  db, rc, 0);.  }.
7fd0: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a    return rc;.}..
7fe0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
7ff0: 4d 49 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20  MIT_UTF16./*.** 
8000: 43 6f 6d 70 69 6c 65 20 74 68 65 20 55 54 46 2d  Compile the UTF-
8010: 31 36 20 65 6e 63 6f 64 65 64 20 53 51 4c 20 73  16 encoded SQL s
8020: 74 61 74 65 6d 65 6e 74 20 7a 53 71 6c 20 69 6e  tatement zSql in
8030: 74 6f 20 61 20 73 74 61 74 65 6d 65 6e 74 20 68  to a statement h
8040: 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71  andle..*/.int sq
8050: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 28  lite3_prepare16(
8060: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  .  sqlite3 *db, 
8070: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8080: 44 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e  Database handle.
8090: 20 2a 2f 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69   */ .  const voi
80a0: 64 20 2a 7a 53 71 6c 2c 20 20 20 20 20 20 20 20  d *zSql,        
80b0: 20 2f 2a 20 55 54 46 2d 38 20 65 6e 63 6f 64 65   /* UTF-8 encode
80c0: 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  d SQL statement.
80d0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 73   */.  int nBytes
80e0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
80f0: 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 7a 53 71  /* Length of zSq
8100: 6c 20 69 6e 20 62 79 74 65 73 2e 20 2a 2f 0a 20  l in bytes. */. 
8110: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2a   sqlite3_stmt **
8120: 70 70 53 74 6d 74 2c 20 20 20 20 2f 2a 20 4f 55  ppStmt,    /* OU
8130: 54 3a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  T: A pointer to 
8140: 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
8150: 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73  tement */.  cons
8160: 74 20 76 6f 69 64 20 2a 2a 70 7a 54 61 69 6c 20  t void **pzTail 
8170: 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 45 6e        /* OUT: En
8180: 64 20 6f 66 20 70 61 72 73 65 64 20 73 74 72 69  d of parsed stri
8190: 6e 67 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 54 68  ng */.){.  /* Th
81a0: 69 73 20 66 75 6e 63 74 69 6f 6e 20 63 75 72 72  is function curr
81b0: 65 6e 74 6c 79 20 77 6f 72 6b 73 20 62 79 20 66  ently works by f
81c0: 69 72 73 74 20 74 72 61 6e 73 66 6f 72 6d 69 6e  irst transformin
81d0: 67 20 74 68 65 20 55 54 46 2d 31 36 0a 20 20 2a  g the UTF-16.  *
81e0: 2a 20 65 6e 63 6f 64 65 64 20 73 74 72 69 6e 67  * encoded string
81f0: 20 74 6f 20 55 54 46 2d 38 2c 20 74 68 65 6e 20   to UTF-8, then 
8200: 69 6e 76 6f 6b 69 6e 67 20 73 71 6c 69 74 65 33  invoking sqlite3
8210: 5f 70 72 65 70 61 72 65 28 29 2e 20 54 68 65 0a  _prepare(). The.
8220: 20 20 2a 2a 20 74 72 69 63 6b 79 20 62 69 74 20    ** tricky bit 
8230: 69 73 20 66 69 67 75 72 69 6e 67 20 6f 75 74 20  is figuring out 
8240: 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 72  the pointer to r
8250: 65 74 75 72 6e 20 69 6e 20 2a 70 7a 54 61 69 6c  eturn in *pzTail
8260: 2e 0a 20 20 2a 2f 0a 20 20 63 68 61 72 20 63 6f  ..  */.  char co
8270: 6e 73 74 20 2a 7a 53 71 6c 38 20 3d 20 30 3b 0a  nst *zSql8 = 0;.
8280: 20 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 54    char const *zT
8290: 61 69 6c 38 20 3d 20 30 3b 0a 20 20 69 6e 74 20  ail8 = 0;.  int 
82a0: 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  rc;.  sqlite3_va
82b0: 6c 75 65 20 2a 70 54 6d 70 3b 0a 0a 20 20 69 66  lue *pTmp;..  if
82c0: 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  ( sqlite3SafetyC
82d0: 68 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20  heck(db) ){.    
82e0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
82f0: 53 55 53 45 3b 0a 20 20 7d 0a 20 20 70 54 6d 70  SUSE;.  }.  pTmp
8300: 20 3d 20 73 71 6c 69 74 65 33 47 65 74 54 72 61   = sqlite3GetTra
8310: 6e 73 69 65 6e 74 56 61 6c 75 65 28 64 62 29 3b  nsientValue(db);
8320: 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  .  sqlite3ValueS
8330: 65 74 53 74 72 28 70 54 6d 70 2c 20 2d 31 2c 20  etStr(pTmp, -1, 
8340: 7a 53 71 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46  zSql, SQLITE_UTF
8350: 31 36 4e 41 54 49 56 45 2c 20 53 51 4c 49 54 45  16NATIVE, SQLITE
8360: 5f 53 54 41 54 49 43 29 3b 0a 20 20 7a 53 71 6c  _STATIC);.  zSql
8370: 38 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65  8 = sqlite3Value
8380: 54 65 78 74 28 70 54 6d 70 2c 20 53 51 4c 49 54  Text(pTmp, SQLIT
8390: 45 5f 55 54 46 38 29 3b 0a 20 20 69 66 28 20 21  E_UTF8);.  if( !
83a0: 7a 53 71 6c 38 20 29 7b 0a 20 20 20 20 73 71 6c  zSql8 ){.    sql
83b0: 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51  ite3Error(db, SQ
83c0: 4c 49 54 45 5f 4e 4f 4d 45 4d 2c 20 30 29 3b 0a  LITE_NOMEM, 0);.
83d0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
83e0: 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 20 20 72  E_NOMEM;.  }.  r
83f0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
8400: 61 72 65 28 64 62 2c 20 7a 53 71 6c 38 2c 20 2d  are(db, zSql8, -
8410: 31 2c 20 70 70 53 74 6d 74 2c 20 26 7a 54 61 69  1, ppStmt, &zTai
8420: 6c 38 29 3b 0a 0a 20 20 69 66 28 20 7a 54 61 69  l8);..  if( zTai
8430: 6c 38 20 26 26 20 70 7a 54 61 69 6c 20 29 7b 0a  l8 && pzTail ){.
8440: 20 20 20 20 2f 2a 20 49 66 20 73 71 6c 69 74 65      /* If sqlite
8450: 33 5f 70 72 65 70 61 72 65 20 72 65 74 75 72 6e  3_prepare return
8460: 73 20 61 20 74 61 69 6c 20 70 6f 69 6e 74 65 72  s a tail pointer
8470: 2c 20 77 65 20 63 61 6c 63 75 6c 61 74 65 20 74  , we calculate t
8480: 68 65 0a 20 20 20 20 2a 2a 20 65 71 75 69 76 61  he.    ** equiva
8490: 6c 65 6e 74 20 70 6f 69 6e 74 65 72 20 69 6e 74  lent pointer int
84a0: 6f 20 74 68 65 20 55 54 46 2d 31 36 20 73 74 72  o the UTF-16 str
84b0: 69 6e 67 20 62 79 20 63 6f 75 6e 74 69 6e 67 20  ing by counting 
84c0: 74 68 65 20 75 6e 69 63 6f 64 65 0a 20 20 20 20  the unicode.    
84d0: 2a 2a 20 63 68 61 72 61 63 74 65 72 73 20 62 65  ** characters be
84e0: 74 77 65 65 6e 20 7a 53 71 6c 38 20 61 6e 64 20  tween zSql8 and 
84f0: 7a 54 61 69 6c 38 2c 20 61 6e 64 20 74 68 65 6e  zTail8, and then
8500: 20 72 65 74 75 72 6e 69 6e 67 20 61 20 70 6f 69   returning a poi
8510: 6e 74 65 72 0a 20 20 20 20 2a 2a 20 74 68 65 20  nter.    ** the 
8520: 73 61 6d 65 20 6e 75 6d 62 65 72 20 6f 66 20 63  same number of c
8530: 68 61 72 61 63 74 65 72 73 20 69 6e 74 6f 20 74  haracters into t
8540: 68 65 20 55 54 46 2d 31 36 20 73 74 72 69 6e 67  he UTF-16 string
8550: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 6e 74  ..    */.    int
8560: 20 63 68 61 72 73 5f 70 61 72 73 65 64 20 3d 20   chars_parsed = 
8570: 73 71 6c 69 74 65 33 75 74 66 38 43 68 61 72 4c  sqlite3utf8CharL
8580: 65 6e 28 7a 53 71 6c 38 2c 20 7a 54 61 69 6c 38  en(zSql8, zTail8
8590: 2d 7a 53 71 6c 38 29 3b 0a 20 20 20 20 2a 70 7a  -zSql8);.    *pz
85a0: 54 61 69 6c 20 3d 20 28 75 38 20 2a 29 7a 53 71  Tail = (u8 *)zSq
85b0: 6c 20 2b 20 73 71 6c 69 74 65 33 75 74 66 31 36  l + sqlite3utf16
85c0: 42 79 74 65 4c 65 6e 28 7a 53 71 6c 2c 20 63 68  ByteLen(zSql, ch
85d0: 61 72 73 5f 70 61 72 73 65 64 29 3b 0a 20 20 7d  ars_parsed);.  }
85e0: 0a 20 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a  . .  return rc;.
85f0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
8600: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f  TE_OMIT_UTF16 */
8610: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ../*.** This rou
8620: 74 69 6e 65 20 64 6f 65 73 20 74 68 65 20 77 6f  tine does the wo
8630: 72 6b 20 6f 66 20 6f 70 65 6e 69 6e 67 20 61 20  rk of opening a 
8640: 64 61 74 61 62 61 73 65 20 6f 6e 20 62 65 68 61  database on beha
8650: 6c 66 20 6f 66 0a 2a 2a 20 73 71 6c 69 74 65 33  lf of.** sqlite3
8660: 5f 6f 70 65 6e 28 29 20 61 6e 64 20 73 71 6c 69  _open() and sqli
8670: 74 65 33 5f 6f 70 65 6e 31 36 28 29 2e 20 54 68  te3_open16(). Th
8680: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 6e  e database filen
8690: 61 6d 65 20 22 7a 46 69 6c 65 6e 61 6d 65 22 20  ame "zFilename" 
86a0: 20 0a 2a 2a 20 69 73 20 55 54 46 2d 38 20 65 6e   .** is UTF-8 en
86b0: 63 6f 64 65 64 2e 20 54 68 65 20 66 6f 75 72 74  coded. The fourt
86c0: 68 20 61 72 67 75 6d 65 6e 74 2c 20 22 64 65 66  h argument, "def
86d0: 5f 65 6e 63 22 20 69 73 20 6f 6e 65 20 6f 66 20  _enc" is one of 
86e0: 74 68 65 20 54 45 58 54 5f 2a 0a 2a 2a 20 6d 61  the TEXT_*.** ma
86f0: 63 72 6f 73 20 66 72 6f 6d 20 73 71 6c 69 74 65  cros from sqlite
8700: 49 6e 74 2e 68 2e 20 49 66 20 77 65 20 65 6e 64  Int.h. If we end
8710: 20 75 70 20 63 72 65 61 74 69 6e 67 20 61 20 6e   up creating a n
8720: 65 77 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ew database file
8730: 0a 2a 2a 20 28 6e 6f 74 20 6f 70 65 6e 69 6e 67  .** (not opening
8740: 20 61 6e 20 65 78 69 73 74 69 6e 67 20 6f 6e 65   an existing one
8750: 29 2c 20 74 68 65 20 74 65 78 74 20 65 6e 63 6f  ), the text enco
8760: 64 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61  ding of the data
8770: 62 61 73 65 0a 2a 2a 20 77 69 6c 6c 20 62 65 20  base.** will be 
8780: 73 65 74 20 74 6f 20 74 68 69 73 20 76 61 6c 75  set to this valu
8790: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
87a0: 20 6f 70 65 6e 44 61 74 61 62 61 73 65 28 0a 20   openDatabase(. 
87b0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69   const char *zFi
87c0: 6c 65 6e 61 6d 65 2c 20 2f 2a 20 44 61 74 61 62  lename, /* Datab
87d0: 61 73 65 20 66 69 6c 65 6e 61 6d 65 20 55 54 46  ase filename UTF
87e0: 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20  -8 encoded */.  
87f0: 73 71 6c 69 74 65 33 20 2a 2a 70 70 44 62 20 20  sqlite3 **ppDb  
8800: 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 52         /* OUT: R
8810: 65 74 75 72 6e 65 64 20 64 61 74 61 62 61 73 65  eturned database
8820: 20 68 61 6e 64 6c 65 20 2a 2f 0a 29 7b 0a 20 20   handle */.){.  
8830: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
8840: 6e 74 20 72 63 2c 20 69 3b 0a 0a 20 20 2f 2a 20  nt rc, i;..  /* 
8850: 41 6c 6c 6f 63 61 74 65 20 74 68 65 20 73 71 6c  Allocate the sql
8860: 69 74 65 20 64 61 74 61 20 73 74 72 75 63 74 75  ite data structu
8870: 72 65 20 2a 2f 0a 20 20 64 62 20 3d 20 73 71 6c  re */.  db = sql
8880: 69 74 65 4d 61 6c 6c 6f 63 28 20 73 69 7a 65 6f  iteMalloc( sizeo
8890: 66 28 73 71 6c 69 74 65 33 29 20 29 3b 0a 20 20  f(sqlite3) );.  
88a0: 69 66 28 20 64 62 3d 3d 30 20 29 20 67 6f 74 6f  if( db==0 ) goto
88b0: 20 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a 20 20 64   opendb_out;.  d
88c0: 62 2d 3e 70 72 69 6f 72 4e 65 77 52 6f 77 69 64  b->priorNewRowid
88d0: 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 6d 61 67 69   = 0;.  db->magi
88e0: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  c = SQLITE_MAGIC
88f0: 5f 42 55 53 59 3b 0a 20 20 64 62 2d 3e 6e 44 62  _BUSY;.  db->nDb
8900: 20 3d 20 32 3b 0a 20 20 64 62 2d 3e 61 44 62 20   = 2;.  db->aDb 
8910: 3d 20 64 62 2d 3e 61 44 62 53 74 61 74 69 63 3b  = db->aDbStatic;
8920: 0a 20 20 64 62 2d 3e 65 6e 63 20 3d 20 53 51 4c  .  db->enc = SQL
8930: 49 54 45 5f 55 54 46 38 3b 0a 20 20 64 62 2d 3e  ITE_UTF8;.  db->
8940: 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a  autoCommit = 1;.
8950: 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53    db->flags |= S
8960: 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61  QLITE_ShortColNa
8970: 6d 65 73 3b 0a 20 20 73 71 6c 69 74 65 33 48 61  mes;.  sqlite3Ha
8980: 73 68 49 6e 69 74 28 26 64 62 2d 3e 61 46 75 6e  shInit(&db->aFun
8990: 63 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53  c, SQLITE_HASH_S
89a0: 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20 73 71 6c  TRING, 0);.  sql
89b0: 69 74 65 33 48 61 73 68 49 6e 69 74 28 26 64 62  ite3HashInit(&db
89c0: 2d 3e 61 43 6f 6c 6c 53 65 71 2c 20 53 51 4c 49  ->aCollSeq, SQLI
89d0: 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20  TE_HASH_STRING, 
89e0: 30 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  0);.  for(i=0; i
89f0: 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a  <db->nDb; i++){.
8a00: 20 20 20 20 73 71 6c 69 74 65 33 48 61 73 68 49      sqlite3HashI
8a10: 6e 69 74 28 26 64 62 2d 3e 61 44 62 5b 69 5d 2e  nit(&db->aDb[i].
8a20: 74 62 6c 48 61 73 68 2c 20 53 51 4c 49 54 45 5f  tblHash, SQLITE_
8a30: 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30 29 3b  HASH_STRING, 0);
8a40: 0a 20 20 20 20 73 71 6c 69 74 65 33 48 61 73 68  .    sqlite3Hash
8a50: 49 6e 69 74 28 26 64 62 2d 3e 61 44 62 5b 69 5d  Init(&db->aDb[i]
8a60: 2e 69 64 78 48 61 73 68 2c 20 53 51 4c 49 54 45  .idxHash, SQLITE
8a70: 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30 29  _HASH_STRING, 0)
8a80: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 48 61 73  ;.    sqlite3Has
8a90: 68 49 6e 69 74 28 26 64 62 2d 3e 61 44 62 5b 69  hInit(&db->aDb[i
8aa0: 5d 2e 74 72 69 67 48 61 73 68 2c 20 53 51 4c 49  ].trigHash, SQLI
8ab0: 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20  TE_HASH_STRING, 
8ac0: 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 48  0);.    sqlite3H
8ad0: 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61 44 62  ashInit(&db->aDb
8ae0: 5b 69 5d 2e 61 46 4b 65 79 2c 20 53 51 4c 49 54  [i].aFKey, SQLIT
8af0: 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 31  E_HASH_STRING, 1
8b00: 29 3b 0a 20 20 7d 0a 20 20 0a 20 20 2f 2a 20 41  );.  }.  .  /* A
8b10: 64 64 20 74 68 65 20 64 65 66 61 75 6c 74 20 63  dd the default c
8b20: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
8b30: 65 20 42 49 4e 41 52 59 2e 20 42 49 4e 41 52 59  e BINARY. BINARY
8b40: 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68 20   works for both 
8b50: 55 54 46 2d 38 0a 20 20 2a 2a 20 61 6e 64 20 55  UTF-8.  ** and U
8b60: 54 46 2d 31 36 2c 20 73 6f 20 61 64 64 20 61 20  TF-16, so add a 
8b70: 76 65 72 73 69 6f 6e 20 66 6f 72 20 65 61 63 68  version for each
8b80: 20 74 6f 20 61 76 6f 69 64 20 61 6e 79 20 75 6e   to avoid any un
8b90: 6e 65 63 65 73 73 61 72 79 0a 20 20 2a 2a 20 63  necessary.  ** c
8ba0: 6f 6e 76 65 72 73 69 6f 6e 73 2e 20 54 68 65 20  onversions. The 
8bb0: 6f 6e 6c 79 20 65 72 72 6f 72 20 74 68 61 74 20  only error that 
8bc0: 63 61 6e 20 6f 63 63 75 72 20 68 65 72 65 20 69  can occur here i
8bd0: 73 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69  s a malloc() fai
8be0: 6c 75 72 65 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  lure..  */.  if(
8bf0: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
8c00: 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22 42  collation(db, "B
8c10: 49 4e 41 52 59 22 2c 20 53 51 4c 49 54 45 5f 55  INARY", SQLITE_U
8c20: 54 46 38 2c 20 30 2c 62 69 6e 43 6f 6c 6c 46 75  TF8, 0,binCollFu
8c30: 6e 63 29 20 7c 7c 0a 20 20 20 20 20 20 73 71 6c  nc) ||.      sql
8c40: 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c  ite3_create_coll
8c50: 61 74 69 6f 6e 28 64 62 2c 20 22 42 49 4e 41 52  ation(db, "BINAR
8c60: 59 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  Y", SQLITE_UTF16
8c70: 2c 20 30 2c 62 69 6e 43 6f 6c 6c 46 75 6e 63 29  , 0,binCollFunc)
8c80: 20 7c 7c 0a 20 20 20 20 20 20 21 28 64 62 2d 3e   ||.      !(db->
8c90: 70 44 66 6c 74 43 6f 6c 6c 20 3d 20 73 71 6c 69  pDfltColl = sqli
8ca0: 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 64  te3FindCollSeq(d
8cb0: 62 2c 20 64 62 2d 3e 65 6e 63 2c 20 22 42 49 4e  b, db->enc, "BIN
8cc0: 41 52 59 22 2c 20 36 2c 20 30 29 29 20 29 7b 0a  ARY", 6, 0)) ){.
8cd0: 20 20 20 20 72 63 20 3d 20 64 62 2d 3e 65 72 72      rc = db->err
8ce0: 43 6f 64 65 3b 0a 20 20 20 20 61 73 73 65 72 74  Code;.    assert
8cf0: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
8d00: 29 3b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63  );.    db->magic
8d10: 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f   = SQLITE_MAGIC_
8d20: 43 4c 4f 53 45 44 3b 0a 20 20 20 20 67 6f 74 6f  CLOSED;.    goto
8d30: 20 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a 20 20 7d   opendb_out;.  }
8d40: 0a 0a 20 20 2f 2a 20 41 6c 73 6f 20 61 64 64 20  ..  /* Also add 
8d50: 61 20 55 54 46 2d 38 20 63 61 73 65 2d 69 6e 73  a UTF-8 case-ins
8d60: 65 6e 73 69 74 69 76 65 20 63 6f 6c 6c 61 74 69  ensitive collati
8d70: 6f 6e 20 73 65 71 75 65 6e 63 65 2e 20 2a 2f 0a  on sequence. */.
8d80: 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65    sqlite3_create
8d90: 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22  _collation(db, "
8da0: 4e 4f 43 41 53 45 22 2c 20 53 51 4c 49 54 45 5f  NOCASE", SQLITE_
8db0: 55 54 46 38 2c 20 30 2c 20 6e 6f 63 61 73 65 43  UTF8, 0, nocaseC
8dc0: 6f 6c 6c 61 74 69 6e 67 46 75 6e 63 29 3b 0a 0a  ollatingFunc);..
8dd0: 20 20 2f 2a 20 4f 70 65 6e 20 74 68 65 20 62 61    /* Open the ba
8de0: 63 6b 65 6e 64 20 64 61 74 61 62 61 73 65 20 64  ckend database d
8df0: 72 69 76 65 72 20 2a 2f 0a 20 20 72 63 20 3d 20  river */.  rc = 
8e00: 73 71 6c 69 74 65 33 42 74 72 65 65 46 61 63 74  sqlite3BtreeFact
8e10: 6f 72 79 28 64 62 2c 20 7a 46 69 6c 65 6e 61 6d  ory(db, zFilenam
8e20: 65 2c 20 30 2c 20 4d 41 58 5f 50 41 47 45 53 2c  e, 0, MAX_PAGES,
8e30: 20 26 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42 74   &db->aDb[0].pBt
8e40: 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  );.  if( rc!=SQL
8e50: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71  ITE_OK ){.    sq
8e60: 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 72  lite3Error(db, r
8e70: 63 2c 20 30 29 3b 0a 20 20 20 20 64 62 2d 3e 6d  c, 0);.    db->m
8e80: 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41  agic = SQLITE_MA
8e90: 47 49 43 5f 43 4c 4f 53 45 44 3b 0a 20 20 20 20  GIC_CLOSED;.    
8ea0: 67 6f 74 6f 20 6f 70 65 6e 64 62 5f 6f 75 74 3b  goto opendb_out;
8eb0: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 65 20 64  .  }..  /* The d
8ec0: 65 66 61 75 6c 74 20 73 61 66 65 74 79 5f 6c 65  efault safety_le
8ed0: 76 65 6c 20 66 6f 72 20 74 68 65 20 6d 61 69 6e  vel for the main
8ee0: 20 64 61 74 61 62 61 73 65 20 69 73 20 27 66 75   database is 'fu
8ef0: 6c 6c 27 3b 20 66 6f 72 20 74 68 65 20 74 65 6d  ll'; for the tem
8f00: 70 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20  p.  ** database 
8f10: 69 74 20 69 73 20 27 4e 4f 4e 45 27 2e 20 54 68  it is 'NONE'. Th
8f20: 69 73 20 6d 61 74 63 68 65 73 20 74 68 65 20 70  is matches the p
8f30: 61 67 65 72 20 6c 61 79 65 72 20 64 65 66 61 75  ager layer defau
8f40: 6c 74 73 2e 20 20 0a 20 20 2a 2f 0a 20 20 64 62  lts.  .  */.  db
8f50: 2d 3e 61 44 62 5b 30 5d 2e 7a 4e 61 6d 65 20 3d  ->aDb[0].zName =
8f60: 20 22 6d 61 69 6e 22 3b 0a 20 20 64 62 2d 3e 61   "main";.  db->a
8f70: 44 62 5b 30 5d 2e 73 61 66 65 74 79 5f 6c 65 76  Db[0].safety_lev
8f80: 65 6c 20 3d 20 33 3b 0a 23 69 66 6e 64 65 66 20  el = 3;.#ifndef 
8f90: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50  SQLITE_OMIT_TEMP
8fa0: 44 42 0a 20 20 64 62 2d 3e 61 44 62 5b 31 5d 2e  DB.  db->aDb[1].
8fb0: 7a 4e 61 6d 65 20 3d 20 22 74 65 6d 70 22 3b 0a  zName = "temp";.
8fc0: 20 20 64 62 2d 3e 61 44 62 5b 31 5d 2e 73 61 66    db->aDb[1].saf
8fd0: 65 74 79 5f 6c 65 76 65 6c 20 3d 20 31 3b 0a 23  ety_level = 1;.#
8fe0: 65 6e 64 69 66 0a 0a 0a 20 20 2f 2a 20 52 65 67  endif...  /* Reg
8ff0: 69 73 74 65 72 20 61 6c 6c 20 62 75 69 6c 74 2d  ister all built-
9000: 69 6e 20 66 75 6e 63 74 69 6f 6e 73 2c 20 62 75  in functions, bu
9010: 74 20 64 6f 20 6e 6f 74 20 61 74 74 65 6d 70 74  t do not attempt
9020: 20 74 6f 20 72 65 61 64 20 74 68 65 0a 20 20 2a   to read the.  *
9030: 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  * database schem
9040: 61 20 79 65 74 2e 20 54 68 69 73 20 69 73 20 64  a yet. This is d
9050: 65 6c 61 79 65 64 20 75 6e 74 69 6c 20 74 68 65  elayed until the
9060: 20 66 69 72 73 74 20 74 69 6d 65 20 74 68 65 20   first time the 
9070: 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 73  database.  ** is
9080: 20 61 63 63 65 73 73 65 64 2e 0a 20 20 2a 2f 0a   accessed..  */.
9090: 20 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65    sqlite3Registe
90a0: 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  rBuiltinFunction
90b0: 73 28 64 62 29 3b 0a 20 20 73 71 6c 69 74 65 33  s(db);.  sqlite3
90c0: 45 72 72 6f 72 28 64 62 2c 20 53 51 4c 49 54 45  Error(db, SQLITE
90d0: 5f 4f 4b 2c 20 30 29 3b 0a 20 20 64 62 2d 3e 6d  _OK, 0);.  db->m
90e0: 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41  agic = SQLITE_MA
90f0: 47 49 43 5f 4f 50 45 4e 3b 0a 0a 6f 70 65 6e 64  GIC_OPEN;..opend
9100: 62 5f 6f 75 74 3a 0a 20 20 69 66 28 20 73 71 6c  b_out:.  if( sql
9110: 69 74 65 33 5f 65 72 72 63 6f 64 65 28 64 62 29  ite3_errcode(db)
9120: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 73  ==SQLITE_OK && s
9130: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61  qlite3_malloc_fa
9140: 69 6c 65 64 20 29 7b 0a 20 20 20 20 73 71 6c 69  iled ){.    sqli
9150: 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c  te3Error(db, SQL
9160: 49 54 45 5f 4e 4f 4d 45 4d 2c 20 30 29 3b 0a 20  ITE_NOMEM, 0);. 
9170: 20 7d 0a 20 20 2a 70 70 44 62 20 3d 20 64 62 3b   }.  *ppDb = db;
9180: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
9190: 4f 4d 49 54 5f 47 4c 4f 42 41 4c 52 45 43 4f 56  OMIT_GLOBALRECOV
91a0: 45 52 0a 20 20 69 66 28 20 64 62 20 29 7b 0a 20  ER.  if( db ){. 
91b0: 20 20 20 73 71 6c 69 74 65 33 4f 73 45 6e 74 65     sqlite3OsEnte
91c0: 72 4d 75 74 65 78 28 29 3b 0a 20 20 20 20 64 62  rMutex();.    db
91d0: 2d 3e 70 4e 65 78 74 20 3d 20 70 44 62 4c 69 73  ->pNext = pDbLis
91e0: 74 3b 0a 20 20 20 20 70 44 62 4c 69 73 74 20 3d  t;.    pDbList =
91f0: 20 64 62 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   db;.    sqlite3
9200: 4f 73 4c 65 61 76 65 4d 75 74 65 78 28 29 3b 0a  OsLeaveMutex();.
9210: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 65 74    }.#endif.  ret
9220: 75 72 6e 20 73 71 6c 69 74 65 33 5f 65 72 72 63  urn sqlite3_errc
9230: 6f 64 65 28 64 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  ode(db);.}../*.*
9240: 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 64 61 74  * Open a new dat
9250: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 0a 2a 2f  abase handle..*/
9260: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70 65  .int sqlite3_ope
9270: 6e 28 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  n(.  const char 
9280: 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 0a 20 20 73  *zFilename, .  s
9290: 71 6c 69 74 65 33 20 2a 2a 70 70 44 62 20 0a 29  qlite3 **ppDb .)
92a0: 7b 0a 20 20 72 65 74 75 72 6e 20 6f 70 65 6e 44  {.  return openD
92b0: 61 74 61 62 61 73 65 28 7a 46 69 6c 65 6e 61 6d  atabase(zFilenam
92c0: 65 2c 20 70 70 44 62 29 3b 0a 7d 0a 0a 23 69 66  e, ppDb);.}..#if
92d0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
92e0: 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20 4f 70 65  _UTF16./*.** Ope
92f0: 6e 20 61 20 6e 65 77 20 64 61 74 61 62 61 73 65  n a new database
9300: 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74 20   handle..*/.int 
9310: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28 0a  sqlite3_open16(.
9320: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 46    const void *zF
9330: 69 6c 65 6e 61 6d 65 2c 20 0a 20 20 73 71 6c 69  ilename, .  sqli
9340: 74 65 33 20 2a 2a 70 70 44 62 0a 29 7b 0a 20 20  te3 **ppDb.){.  
9350: 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 46 69 6c  char const *zFil
9360: 65 6e 61 6d 65 38 3b 20 20 20 2f 2a 20 7a 46 69  ename8;   /* zFi
9370: 6c 65 6e 61 6d 65 20 65 6e 63 6f 64 65 64 20 69  lename encoded i
9380: 6e 20 55 54 46 2d 38 20 69 6e 73 74 65 61 64 20  n UTF-8 instead 
9390: 6f 66 20 55 54 46 2d 31 36 20 2a 2f 0a 20 20 69  of UTF-16 */.  i
93a0: 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e  nt rc = SQLITE_N
93b0: 4f 4d 45 4d 3b 0a 20 20 73 71 6c 69 74 65 33 5f  OMEM;.  sqlite3_
93c0: 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 0a 20 20  value *pVal;..  
93d0: 61 73 73 65 72 74 28 20 70 70 44 62 20 29 3b 0a  assert( ppDb );.
93e0: 20 20 2a 70 70 44 62 20 3d 20 30 3b 0a 20 20 70    *ppDb = 0;.  p
93f0: 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c  Val = sqlite3Val
9400: 75 65 4e 65 77 28 29 3b 0a 20 20 73 71 6c 69 74  ueNew();.  sqlit
9410: 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 56  e3ValueSetStr(pV
9420: 61 6c 2c 20 2d 31 2c 20 7a 46 69 6c 65 6e 61 6d  al, -1, zFilenam
9430: 65 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  e, SQLITE_UTF16N
9440: 41 54 49 56 45 2c 20 53 51 4c 49 54 45 5f 53 54  ATIVE, SQLITE_ST
9450: 41 54 49 43 29 3b 0a 20 20 7a 46 69 6c 65 6e 61  ATIC);.  zFilena
9460: 6d 65 38 20 3d 20 73 71 6c 69 74 65 33 56 61 6c  me8 = sqlite3Val
9470: 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53 51 4c  ueText(pVal, SQL
9480: 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 69 66 28  ITE_UTF8);.  if(
9490: 20 7a 46 69 6c 65 6e 61 6d 65 38 20 29 7b 0a 20   zFilename8 ){. 
94a0: 20 20 20 72 63 20 3d 20 6f 70 65 6e 44 61 74 61     rc = openData
94b0: 62 61 73 65 28 7a 46 69 6c 65 6e 61 6d 65 38 2c  base(zFilename8,
94c0: 20 70 70 44 62 29 3b 0a 20 20 20 20 69 66 28 20   ppDb);.    if( 
94d0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
94e0: 20 2a 70 70 44 62 20 29 7b 0a 20 20 20 20 20 20   *ppDb ){.      
94f0: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 2a 70 70  sqlite3_exec(*pp
9500: 44 62 2c 20 22 50 52 41 47 4d 41 20 65 6e 63 6f  Db, "PRAGMA enco
9510: 64 69 6e 67 20 3d 20 27 55 54 46 2d 31 36 27 22  ding = 'UTF-16'"
9520: 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  , 0, 0, 0);.    
9530: 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 56 61 6c  }.  }.  if( pVal
9540: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
9550: 61 6c 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a  alueFree(pVal);.
9560: 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 72 63    }..  return rc
9570: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
9580: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
9590: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  */../*.** The fo
95a0: 6c 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65 20  llowing routine 
95b0: 64 65 73 74 72 6f 79 73 20 61 20 76 69 72 74 75  destroys a virtu
95c0: 61 6c 20 6d 61 63 68 69 6e 65 20 74 68 61 74 20  al machine that 
95d0: 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a  is created by.**
95e0: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6d   the sqlite3_com
95f0: 70 69 6c 65 28 29 20 72 6f 75 74 69 6e 65 2e 20  pile() routine. 
9600: 54 68 65 20 69 6e 74 65 67 65 72 20 72 65 74 75  The integer retu
9610: 72 6e 65 64 20 69 73 20 61 6e 20 53 51 4c 49 54  rned is an SQLIT
9620: 45 5f 0a 2a 2a 20 73 75 63 63 65 73 73 2f 66 61  E_.** success/fa
9630: 69 6c 75 72 65 20 63 6f 64 65 20 74 68 61 74 20  ilure code that 
9640: 64 65 73 63 72 69 62 65 73 20 74 68 65 20 72 65  describes the re
9650: 73 75 6c 74 20 6f 66 20 65 78 65 63 75 74 69 6e  sult of executin
9660: 67 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  g the virtual.**
9670: 20 6d 61 63 68 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20   machine..**.** 
9680: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74  This routine set
9690: 73 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  s the error code
96a0: 20 61 6e 64 20 73 74 72 69 6e 67 20 72 65 74 75   and string retu
96b0: 72 6e 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  rned by.** sqlit
96c0: 65 33 5f 65 72 72 63 6f 64 65 28 29 2c 20 73 71  e3_errcode(), sq
96d0: 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29 20 61  lite3_errmsg() a
96e0: 6e 64 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  nd sqlite3_errms
96f0: 67 31 36 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71  g16()..*/.int sq
9700: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 73  lite3_finalize(s
9710: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
9720: 6d 74 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  mt){.  int rc;. 
9730: 20 69 66 28 20 70 53 74 6d 74 3d 3d 30 20 29 7b   if( pStmt==0 ){
9740: 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
9750: 5f 4f 4b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  _OK;.  }else{.  
9760: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
9770: 62 65 46 69 6e 61 6c 69 7a 65 28 28 56 64 62 65  beFinalize((Vdbe
9780: 2a 29 70 53 74 6d 74 29 3b 0a 20 20 7d 0a 20 20  *)pStmt);.  }.  
9790: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
97a0: 0a 2a 2a 20 54 65 72 6d 69 6e 61 74 65 20 74 68  .** Terminate th
97b0: 65 20 63 75 72 72 65 6e 74 20 65 78 65 63 75 74  e current execut
97c0: 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 73 74  ion of an SQL st
97d0: 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65 73 65  atement and rese
97e0: 74 20 69 74 0a 2a 2a 20 62 61 63 6b 20 74 6f 20  t it.** back to 
97f0: 69 74 73 20 73 74 61 72 74 69 6e 67 20 73 74 61  its starting sta
9800: 74 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  te so that it ca
9810: 6e 20 62 65 20 72 65 75 73 65 64 2e 20 41 20 73  n be reused. A s
9820: 75 63 63 65 73 73 20 63 6f 64 65 20 66 72 6f 6d  uccess code from
9830: 0a 2a 2a 20 74 68 65 20 70 72 69 6f 72 20 65 78  .** the prior ex
9840: 65 63 75 74 69 6f 6e 20 69 73 20 72 65 74 75 72  ecution is retur
9850: 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ned..**.** This 
9860: 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68 65  routine sets the
9870: 20 65 72 72 6f 72 20 63 6f 64 65 20 61 6e 64 20   error code and 
9880: 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20  string returned 
9890: 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 65 72  by.** sqlite3_er
98a0: 72 63 6f 64 65 28 29 2c 20 73 71 6c 69 74 65 33  rcode(), sqlite3
98b0: 5f 65 72 72 6d 73 67 28 29 20 61 6e 64 20 73 71  _errmsg() and sq
98c0: 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36 28 29  lite3_errmsg16()
98d0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
98e0: 5f 72 65 73 65 74 28 73 71 6c 69 74 65 33 5f 73  _reset(sqlite3_s
98f0: 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 69  tmt *pStmt){.  i
9900: 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 70 53 74  nt rc;.  if( pSt
9910: 6d 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  mt==0 ){.    rc 
9920: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d  = SQLITE_OK;.  }
9930: 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73  else{.    rc = s
9940: 71 6c 69 74 65 33 56 64 62 65 52 65 73 65 74 28  qlite3VdbeReset(
9950: 28 56 64 62 65 2a 29 70 53 74 6d 74 29 3b 0a 20  (Vdbe*)pStmt);. 
9960: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61     sqlite3VdbeMa
9970: 6b 65 52 65 61 64 79 28 28 56 64 62 65 2a 29 70  keReady((Vdbe*)p
9980: 53 74 6d 74 2c 20 2d 31 2c 20 30 2c 20 30 2c 20  Stmt, -1, 0, 0, 
9990: 30 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74  0, 0);.  }.  ret
99a0: 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  urn rc;.}../*.**
99b0: 20 52 65 67 69 73 74 65 72 20 61 20 6e 65 77 20   Register a new 
99c0: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
99d0: 63 65 20 77 69 74 68 20 74 68 65 20 64 61 74 61  ce with the data
99e0: 62 61 73 65 20 68 61 6e 64 6c 65 20 64 62 2e 0a  base handle db..
99f0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63  */.int sqlite3_c
9a00: 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28  reate_collation(
9a10: 0a 20 20 73 71 6c 69 74 65 33 2a 20 64 62 2c 20  .  sqlite3* db, 
9a20: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
9a30: 4e 61 6d 65 2c 20 0a 20 20 69 6e 74 20 65 6e 63  Name, .  int enc
9a40: 2c 20 0a 20 20 76 6f 69 64 2a 20 70 43 74 78 2c  , .  void* pCtx,
9a50: 0a 20 20 69 6e 74 28 2a 78 43 6f 6d 70 61 72 65  .  int(*xCompare
9a60: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
9a70: 74 20 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  t void*,int,cons
9a80: 74 20 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 43 6f  t void*).){.  Co
9a90: 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 0a 20 20  llSeq *pColl;.  
9aa0: 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  int rc = SQLITE_
9ab0: 4f 4b 3b 0a 20 20 0a 20 20 69 66 28 20 73 71 6c  OK;.  .  if( sql
9ac0: 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28  ite3SafetyCheck(
9ad0: 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  db) ){.    retur
9ae0: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b  n SQLITE_MISUSE;
9af0: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 53 51  .  }..  /* If SQ
9b00: 4c 49 54 45 5f 55 54 46 31 36 20 69 73 20 73 70  LITE_UTF16 is sp
9b10: 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 65  ecified as the e
9b20: 6e 63 6f 64 69 6e 67 20 74 79 70 65 2c 20 74 72  ncoding type, tr
9b30: 61 6e 73 66 6f 72 6d 20 74 68 69 73 0a 20 20 2a  ansform this.  *
9b40: 2a 20 74 6f 20 6f 6e 65 20 6f 66 20 53 51 4c 49  * to one of SQLI
9b50: 54 45 5f 55 54 46 31 36 4c 45 20 6f 72 20 53 51  TE_UTF16LE or SQ
9b60: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 75 73 69  LITE_UTF16BE usi
9b70: 6e 67 20 74 68 65 0a 20 20 2a 2a 20 53 51 4c 49  ng the.  ** SQLI
9b80: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 6d  TE_UTF16NATIVE m
9b90: 61 63 72 6f 2e 20 53 51 4c 49 54 45 5f 55 54 46  acro. SQLITE_UTF
9ba0: 31 36 20 69 73 20 6e 6f 74 20 75 73 65 64 20 69  16 is not used i
9bb0: 6e 74 65 72 6e 61 6c 6c 79 2e 0a 20 20 2a 2f 0a  nternally..  */.
9bc0: 20 20 69 66 28 20 65 6e 63 3d 3d 53 51 4c 49 54    if( enc==SQLIT
9bd0: 45 5f 55 54 46 31 36 20 29 7b 0a 20 20 20 20 65  E_UTF16 ){.    e
9be0: 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 31  nc = SQLITE_UTF1
9bf0: 36 4e 41 54 49 56 45 3b 0a 20 20 7d 0a 0a 20 20  6NATIVE;.  }..  
9c00: 69 66 28 20 65 6e 63 21 3d 53 51 4c 49 54 45 5f  if( enc!=SQLITE_
9c10: 55 54 46 38 20 26 26 20 65 6e 63 21 3d 53 51 4c  UTF8 && enc!=SQL
9c20: 49 54 45 5f 55 54 46 31 36 4c 45 20 26 26 20 65  ITE_UTF16LE && e
9c30: 6e 63 21 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc!=SQLITE_UTF16
9c40: 42 45 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  BE ){.    sqlite
9c50: 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c 49 54  3Error(db, SQLIT
9c60: 45 5f 45 52 52 4f 52 2c 20 0a 20 20 20 20 20 20  E_ERROR, .      
9c70: 20 20 22 50 61 72 61 6d 20 33 20 74 6f 20 73 71    "Param 3 to sq
9c80: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c  lite3_create_col
9c90: 6c 61 74 69 6f 6e 28 29 20 6d 75 73 74 20 62 65  lation() must be
9ca0: 20 6f 6e 65 20 6f 66 20 22 0a 20 20 20 20 20 20   one of ".      
9cb0: 20 20 22 53 51 4c 49 54 45 5f 55 54 46 38 2c 20    "SQLITE_UTF8, 
9cc0: 53 51 4c 49 54 45 5f 55 54 46 31 36 2c 20 53 51  SQLITE_UTF16, SQ
9cd0: 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 6f 72 20  LITE_UTF16LE or 
9ce0: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 22 0a  SQLITE_UTF16BE".
9cf0: 20 20 20 20 29 3b 0a 20 20 20 20 72 65 74 75 72      );.    retur
9d00: 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  n SQLITE_ERROR;.
9d10: 20 20 7d 0a 0a 20 20 2f 2a 20 43 68 65 63 6b 20    }..  /* Check 
9d20: 69 66 20 74 68 69 73 20 63 61 6c 6c 20 69 73 20  if this call is 
9d30: 72 65 6d 6f 76 69 6e 67 20 6f 72 20 72 65 70 6c  removing or repl
9d40: 61 63 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e  acing an existin
9d50: 67 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a 20 20 2a  g collation .  *
9d60: 2a 20 73 65 71 75 65 6e 63 65 2e 20 49 66 20 73  * sequence. If s
9d70: 6f 2c 20 61 6e 64 20 74 68 65 72 65 20 61 72 65  o, and there are
9d80: 20 61 63 74 69 76 65 20 56 4d 73 2c 20 72 65 74   active VMs, ret
9d90: 75 72 6e 20 62 75 73 79 2e 20 49 66 20 74 68 65  urn busy. If the
9da0: 72 65 0a 20 20 2a 2a 20 61 72 65 20 6e 6f 20 61  re.  ** are no a
9db0: 63 74 69 76 65 20 56 4d 73 2c 20 69 6e 76 61 6c  ctive VMs, inval
9dc0: 69 64 61 74 65 20 61 6e 79 20 70 72 65 2d 63 6f  idate any pre-co
9dd0: 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74  mpiled statement
9de0: 73 2e 0a 20 20 2a 2f 0a 20 20 70 43 6f 6c 6c 20  s..  */.  pColl 
9df0: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c  = sqlite3FindCol
9e00: 6c 53 65 71 28 64 62 2c 20 28 75 38 29 65 6e 63  lSeq(db, (u8)enc
9e10: 2c 20 7a 4e 61 6d 65 2c 20 73 74 72 6c 65 6e 28  , zName, strlen(
9e20: 7a 4e 61 6d 65 29 2c 20 30 29 3b 0a 20 20 69 66  zName), 0);.  if
9e30: 28 20 70 43 6f 6c 6c 20 26 26 20 70 43 6f 6c 6c  ( pColl && pColl
9e40: 2d 3e 78 43 6d 70 20 29 7b 0a 20 20 20 20 69 66  ->xCmp ){.    if
9e50: 28 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65  ( db->activeVdbe
9e60: 43 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  Cnt ){.      sql
9e70: 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51  ite3Error(db, SQ
9e80: 4c 49 54 45 5f 42 55 53 59 2c 20 0a 20 20 20 20  LITE_BUSY, .    
9e90: 20 20 20 20 22 55 6e 61 62 6c 65 20 74 6f 20 64      "Unable to d
9ea0: 65 6c 65 74 65 2f 6d 6f 64 69 66 79 20 63 6f 6c  elete/modify col
9eb0: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
9ec0: 64 75 65 20 74 6f 20 61 63 74 69 76 65 20 73 74  due to active st
9ed0: 61 74 65 6d 65 6e 74 73 22 29 3b 0a 20 20 20 20  atements");.    
9ee0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
9ef0: 42 55 53 59 3b 0a 20 20 20 20 7d 0a 20 20 20 20  BUSY;.    }.    
9f00: 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
9f10: 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
9f20: 64 62 29 3b 0a 20 20 7d 0a 0a 20 20 70 43 6f 6c  db);.  }..  pCol
9f30: 6c 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 43  l = sqlite3FindC
9f40: 6f 6c 6c 53 65 71 28 64 62 2c 20 28 75 38 29 65  ollSeq(db, (u8)e
9f50: 6e 63 2c 20 7a 4e 61 6d 65 2c 20 73 74 72 6c 65  nc, zName, strle
9f60: 6e 28 7a 4e 61 6d 65 29 2c 20 31 29 3b 0a 20 20  n(zName), 1);.  
9f70: 69 66 28 20 30 3d 3d 70 43 6f 6c 6c 20 29 7b 0a  if( 0==pColl ){.
9f80: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e     rc = SQLITE_N
9f90: 4f 4d 45 4d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  OMEM;.  }else{. 
9fa0: 20 20 20 70 43 6f 6c 6c 2d 3e 78 43 6d 70 20 3d     pColl->xCmp =
9fb0: 20 78 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 70   xCompare;.    p
9fc0: 43 6f 6c 6c 2d 3e 70 55 73 65 72 20 3d 20 70 43  Coll->pUser = pC
9fd0: 74 78 3b 0a 20 20 20 20 70 43 6f 6c 6c 2d 3e 65  tx;.    pColl->e
9fe0: 6e 63 20 3d 20 65 6e 63 3b 0a 20 20 7d 0a 20 20  nc = enc;.  }.  
9ff0: 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c  sqlite3Error(db,
a000: 20 72 63 2c 20 30 29 3b 0a 20 20 72 65 74 75 72   rc, 0);.  retur
a010: 6e 20 72 63 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  n rc;.}..#ifndef
a020: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
a030: 31 36 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65  16./*.** Registe
a040: 72 20 61 20 6e 65 77 20 63 6f 6c 6c 61 74 69 6f  r a new collatio
a050: 6e 20 73 65 71 75 65 6e 63 65 20 77 69 74 68 20  n sequence with 
a060: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
a070: 64 6c 65 20 64 62 2e 0a 2a 2f 0a 69 6e 74 20 73  dle db..*/.int s
a080: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
a090: 6c 6c 61 74 69 6f 6e 31 36 28 0a 20 20 73 71 6c  llation16(.  sql
a0a0: 69 74 65 33 2a 20 64 62 2c 20 0a 20 20 63 6f 6e  ite3* db, .  con
a0b0: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20  st char *zName, 
a0c0: 0a 20 20 69 6e 74 20 65 6e 63 2c 20 0a 20 20 76  .  int enc, .  v
a0d0: 6f 69 64 2a 20 70 43 74 78 2c 0a 20 20 69 6e 74  oid* pCtx,.  int
a0e0: 28 2a 78 43 6f 6d 70 61 72 65 29 28 76 6f 69 64  (*xCompare)(void
a0f0: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64  *,int,const void
a100: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64  *,int,const void
a110: 2a 29 0a 29 7b 0a 20 20 63 68 61 72 20 63 6f 6e  *).){.  char con
a120: 73 74 20 2a 7a 4e 61 6d 65 38 3b 0a 20 20 73 71  st *zName8;.  sq
a130: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 54 6d  lite3_value *pTm
a140: 70 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  p;.  if( sqlite3
a150: 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29 20  SafetyCheck(db) 
a160: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
a170: 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d  LITE_MISUSE;.  }
a180: 0a 20 20 70 54 6d 70 20 3d 20 73 71 6c 69 74 65  .  pTmp = sqlite
a190: 33 47 65 74 54 72 61 6e 73 69 65 6e 74 56 61 6c  3GetTransientVal
a1a0: 75 65 28 64 62 29 3b 0a 20 20 73 71 6c 69 74 65  ue(db);.  sqlite
a1b0: 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 54 6d  3ValueSetStr(pTm
a1c0: 70 2c 20 2d 31 2c 20 7a 4e 61 6d 65 2c 20 53 51  p, -1, zName, SQ
a1d0: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
a1e0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
a1f0: 3b 0a 20 20 7a 4e 61 6d 65 38 20 3d 20 73 71 6c  ;.  zName8 = sql
a200: 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 70 54  ite3ValueText(pT
a210: 6d 70 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29  mp, SQLITE_UTF8)
a220: 3b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74  ;.  return sqlit
a230: 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74  e3_create_collat
a240: 69 6f 6e 28 64 62 2c 20 7a 4e 61 6d 65 38 2c 20  ion(db, zName8, 
a250: 65 6e 63 2c 20 70 43 74 78 2c 20 78 43 6f 6d 70  enc, pCtx, xComp
a260: 61 72 65 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  are);.}.#endif /
a270: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  * SQLITE_OMIT_UT
a280: 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65  F16 */../*.** Re
a290: 67 69 73 74 65 72 20 61 20 63 6f 6c 6c 61 74 69  gister a collati
a2a0: 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 61 63 74  on sequence fact
a2b0: 6f 72 79 20 63 61 6c 6c 62 61 63 6b 20 77 69 74  ory callback wit
a2c0: 68 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  h the database h
a2d0: 61 6e 64 6c 65 0a 2a 2a 20 64 62 2e 20 52 65 70  andle.** db. Rep
a2e0: 6c 61 63 65 20 61 6e 79 20 70 72 65 76 69 6f 75  lace any previou
a2f0: 73 6c 79 20 69 6e 73 74 61 6c 6c 65 64 20 63 6f  sly installed co
a300: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
a310: 20 66 61 63 74 6f 72 79 2e 0a 2a 2f 0a 69 6e 74   factory..*/.int
a320: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 6c 61 74 69   sqlite3_collati
a330: 6f 6e 5f 6e 65 65 64 65 64 28 0a 20 20 73 71 6c  on_needed(.  sql
a340: 69 74 65 33 20 2a 64 62 2c 20 0a 20 20 76 6f 69  ite3 *db, .  voi
a350: 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72  d *pCollNeededAr
a360: 67 2c 20 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c  g, .  void(*xCol
a370: 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73  lNeeded)(void*,s
a380: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
a390: 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a  tRep,const char*
a3a0: 29 0a 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74  ).){.  if( sqlit
a3b0: 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 64 62  e3SafetyCheck(db
a3c0: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
a3d0: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20  SQLITE_MISUSE;. 
a3e0: 20 7d 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c 4e 65   }.  db->xCollNe
a3f0: 65 64 65 64 20 3d 20 78 43 6f 6c 6c 4e 65 65 64  eded = xCollNeed
a400: 65 64 3b 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c 4e  ed;.  db->xCollN
a410: 65 65 64 65 64 31 36 20 3d 20 30 3b 0a 20 20 64  eeded16 = 0;.  d
a420: 62 2d 3e 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72  b->pCollNeededAr
a430: 67 20 3d 20 70 43 6f 6c 6c 4e 65 65 64 65 64 41  g = pCollNeededA
a440: 72 67 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  rg;.  return SQL
a450: 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64  ITE_OK;.}..#ifnd
a460: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
a470: 54 46 31 36 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73  TF16./*.** Regis
a480: 74 65 72 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20  ter a collation 
a490: 73 65 71 75 65 6e 63 65 20 66 61 63 74 6f 72 79  sequence factory
a4a0: 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68 20 74   callback with t
a4b0: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
a4c0: 6c 65 0a 2a 2a 20 64 62 2e 20 52 65 70 6c 61 63  le.** db. Replac
a4d0: 65 20 61 6e 79 20 70 72 65 76 69 6f 75 73 6c 79  e any previously
a4e0: 20 69 6e 73 74 61 6c 6c 65 64 20 63 6f 6c 6c 61   installed colla
a4f0: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 61  tion sequence fa
a500: 63 74 6f 72 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71  ctory..*/.int sq
a510: 6c 69 74 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f  lite3_collation_
a520: 6e 65 65 64 65 64 31 36 28 0a 20 20 73 71 6c 69  needed16(.  sqli
a530: 74 65 33 20 2a 64 62 2c 20 0a 20 20 76 6f 69 64  te3 *db, .  void
a540: 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67   *pCollNeededArg
a550: 2c 20 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  , .  void(*xColl
a560: 4e 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c  Needed16)(void*,
a570: 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65  sqlite3*,int eTe
a580: 78 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64  xtRep,const void
a590: 2a 29 0a 29 7b 0a 20 20 69 66 28 20 73 71 6c 69  *).){.  if( sqli
a5a0: 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 64  te3SafetyCheck(d
a5b0: 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  b) ){.    return
a5c0: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a   SQLITE_MISUSE;.
a5d0: 20 20 7d 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c 4e    }.  db->xCollN
a5e0: 65 65 64 65 64 20 3d 20 30 3b 0a 20 20 64 62 2d  eeded = 0;.  db-
a5f0: 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 20 3d  >xCollNeeded16 =
a600: 20 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 3b 0a   xCollNeeded16;.
a610: 20 20 64 62 2d 3e 70 43 6f 6c 6c 4e 65 65 64 65    db->pCollNeede
a620: 64 41 72 67 20 3d 20 70 43 6f 6c 6c 4e 65 65 64  dArg = pCollNeed
a630: 65 64 41 72 67 3b 0a 20 20 72 65 74 75 72 6e 20  edArg;.  return 
a640: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e  SQLITE_OK;.}.#en
a650: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
a660: 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 23 69 66  IT_UTF16 */..#if
a670: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
a680: 5f 47 4c 4f 42 41 4c 52 45 43 4f 56 45 52 0a 2f  _GLOBALRECOVER./
a690: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
a6a0: 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20  on is called to 
a6b0: 72 65 63 6f 76 65 72 20 66 72 6f 6d 20 61 20 6d  recover from a m
a6c0: 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 74 68  alloc failure th
a6d0: 61 74 20 6f 63 63 75 72 65 64 0a 2a 2a 20 77 69  at occured.** wi
a6e0: 74 68 69 6e 20 53 51 4c 69 74 65 2e 20 0a 2a 2a  thin SQLite. .**
a6f0: 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f  .** This functio
a700: 6e 20 69 73 20 2a 6e 6f 74 2a 20 74 68 72 65 61  n is *not* threa
a710: 64 73 61 66 65 2e 20 43 61 6c 6c 69 6e 67 20 74  dsafe. Calling t
a720: 68 69 73 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  his from within 
a730: 61 20 74 68 72 65 61 64 65 64 0a 2a 2a 20 61 70  a threaded.** ap
a740: 70 6c 69 63 61 74 69 6f 6e 20 77 68 65 6e 20 74  plication when t
a750: 68 72 65 61 64 73 20 6f 74 68 65 72 20 74 68 61  hreads other tha
a760: 6e 20 74 68 65 20 63 61 6c 6c 65 72 20 68 61 76  n the caller hav
a770: 65 20 75 73 65 64 20 53 51 4c 69 74 65 20 69 73  e used SQLite is
a780: 20 0a 2a 2a 20 64 61 6e 67 65 72 6f 75 73 20 61   .** dangerous a
a790: 6e 64 20 77 69 6c 6c 20 61 6c 6d 6f 73 74 20 63  nd will almost c
a7a0: 65 72 74 61 69 6e 6c 79 20 72 65 73 75 6c 74 20  ertainly result 
a7b0: 69 6e 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 73 2e  in malfunctions.
a7c0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
a7d0: 67 6c 6f 62 61 6c 5f 72 65 63 6f 76 65 72 28 29  global_recover()
a7e0: 7b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c  {.  int rc = SQL
a7f0: 49 54 45 5f 4f 4b 3b 0a 0a 20 20 69 66 28 20 73  ITE_OK;..  if( s
a800: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61  qlite3_malloc_fa
a810: 69 6c 65 64 20 29 7b 0a 20 20 20 20 73 71 6c 69  iled ){.    sqli
a820: 74 65 33 20 2a 64 62 3b 0a 20 20 20 20 69 6e 74  te3 *db;.    int
a830: 20 69 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   i;.    sqlite3_
a840: 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 3d 20  malloc_failed = 
a850: 30 3b 0a 20 20 20 20 66 6f 72 28 64 62 3d 70 44  0;.    for(db=pD
a860: 62 4c 69 73 74 3b 20 64 62 3b 20 64 62 3d 64 62  bList; db; db=db
a870: 2d 3e 70 4e 65 78 74 20 29 7b 0a 20 20 20 20 20  ->pNext ){.     
a880: 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
a890: 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
a8a0: 28 64 62 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  (db);.      for(
a8b0: 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20  i=0; i<db->nDb; 
a8c0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 42 74  i++){.        Bt
a8d0: 72 65 65 20 2a 70 42 74 20 3d 20 64 62 2d 3e 61  ree *pBt = db->a
a8e0: 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20 20 20 20  Db[i].pBt;.     
a8f0: 20 20 20 69 66 28 20 70 42 74 20 26 26 20 28 72     if( pBt && (r
a900: 63 3d 73 71 6c 69 74 65 33 42 74 72 65 65 52 65  c=sqlite3BtreeRe
a910: 73 65 74 28 70 42 74 29 29 20 29 7b 0a 20 20 20  set(pBt)) ){.   
a920: 20 20 20 20 20 20 20 67 6f 74 6f 20 72 65 63 6f         goto reco
a930: 76 65 72 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20  ver_out;.       
a940: 20 7d 0a 20 20 20 20 20 20 7d 20 0a 20 20 20 20   }.      } .    
a950: 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
a960: 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 1;.    }.  }.
a970: 0a 72 65 63 6f 76 65 72 5f 6f 75 74 3a 0a 20 20  .recover_out:.  
a980: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
a990: 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  K ){.    sqlite3
a9a0: 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 3d  _malloc_failed =
a9b0: 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e   1;.  }.  return
a9c0: 20 72 63 3b 0a 7d 0a 23 65 6e 64 69 66 0a         rc;.}.#endif.