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

Artifact 244a346ae0d1953c4c872b3429b8712b32f590a1:


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 33 31 36 20 32 30 30 36 2f 30 31  ,v 1.316 2006/01
0280: 2f 30 36 20 30 36 3a 33 33 3a 31 33 20 64 61 6e  /06 06:33:13 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 2f 2a 0a 2a 2a 20 54 68 65 20 76 65 72 73 69  ./*.** The versi
0370: 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72  on of the librar
0380: 79 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20  y.*/.const char 
0390: 72 63 73 69 64 33 5b 5d 20 3d 20 22 40 28 23 29  rcsid3[] = "@(#)
03a0: 20 5c 30 34 34 49 64 3a 20 53 51 4c 69 74 65 20   \044Id: SQLite 
03b0: 76 65 72 73 69 6f 6e 20 22 20 53 51 4c 49 54 45  version " SQLITE
03c0: 5f 56 45 52 53 49 4f 4e 20 22 20 24 22 3b 0a 63  _VERSION " $";.c
03d0: 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74 65  onst char sqlite
03e0: 33 5f 76 65 72 73 69 6f 6e 5b 5d 20 3d 20 53 51  3_version[] = SQ
03f0: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 3b 0a 63 6f  LITE_VERSION;.co
0400: 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
0410: 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 76 6f 69  3_libversion(voi
0420: 64 29 7b 20 72 65 74 75 72 6e 20 73 71 6c 69 74  d){ return sqlit
0430: 65 33 5f 76 65 72 73 69 6f 6e 3b 20 7d 0a 69 6e  e3_version; }.in
0440: 74 20 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72  t sqlite3_libver
0450: 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 76 6f 69 64  sion_number(void
0460: 29 7b 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  ){ return SQLITE
0470: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 3b  _VERSION_NUMBER;
0480: 20 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69   }../*.** This i
0490: 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f  s the default co
04a0: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
04b0: 20 6e 61 6d 65 64 20 22 42 49 4e 41 52 59 22 20   named "BINARY" 
04c0: 77 68 69 63 68 20 69 73 20 61 6c 77 61 79 73 0a  which is always.
04d0: 2a 2a 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2f  ** available..*/
04e0: 0a 73 74 61 74 69 63 20 69 6e 74 20 62 69 6e 43  .static int binC
04f0: 6f 6c 6c 46 75 6e 63 28 0a 20 20 76 6f 69 64 20  ollFunc(.  void 
0500: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 69 6e 74 20  *NotUsed,.  int 
0510: 6e 4b 65 79 31 2c 20 63 6f 6e 73 74 20 76 6f 69  nKey1, const voi
0520: 64 20 2a 70 4b 65 79 31 2c 0a 20 20 69 6e 74 20  d *pKey1,.  int 
0530: 6e 4b 65 79 32 2c 20 63 6f 6e 73 74 20 76 6f 69  nKey2, const voi
0540: 64 20 2a 70 4b 65 79 32 0a 29 7b 0a 20 20 69 6e  d *pKey2.){.  in
0550: 74 20 72 63 2c 20 6e 3b 0a 20 20 6e 20 3d 20 6e  t rc, n;.  n = n
0560: 4b 65 79 31 3c 6e 4b 65 79 32 20 3f 20 6e 4b 65  Key1<nKey2 ? nKe
0570: 79 31 20 3a 20 6e 4b 65 79 32 3b 0a 20 20 72 63  y1 : nKey2;.  rc
0580: 20 3d 20 6d 65 6d 63 6d 70 28 70 4b 65 79 31 2c   = memcmp(pKey1,
0590: 20 70 4b 65 79 32 2c 20 6e 29 3b 0a 20 20 69 66   pKey2, n);.  if
05a0: 28 20 72 63 3d 3d 30 20 29 7b 0a 20 20 20 20 72  ( rc==0 ){.    r
05b0: 63 20 3d 20 6e 4b 65 79 31 20 2d 20 6e 4b 65 79  c = nKey1 - nKey
05c0: 32 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  2;.  }.  return 
05d0: 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 6f  rc;.}../*.** Ano
05e0: 74 68 65 72 20 62 75 69 6c 74 2d 69 6e 20 63 6f  ther built-in co
05f0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
0600: 3a 20 4e 4f 43 41 53 45 2e 20 0a 2a 2a 0a 2a 2a  : NOCASE. .**.**
0610: 20 54 68 69 73 20 63 6f 6c 6c 61 74 69 6e 67 20   This collating 
0620: 73 65 71 75 65 6e 63 65 20 69 73 20 69 6e 74 65  sequence is inte
0630: 6e 64 65 64 20 74 6f 20 62 65 20 75 73 65 64 20  nded to be used 
0640: 66 6f 72 20 22 63 61 73 65 20 69 6e 64 65 70 65  for "case indepe
0650: 6e 64 61 6e 74 0a 2a 2a 20 63 6f 6d 70 61 72 69  ndant.** compari
0660: 73 6f 6e 22 2e 20 53 51 4c 69 74 65 27 73 20 6b  son". SQLite's k
0670: 6e 6f 77 6c 65 64 67 65 20 6f 66 20 75 70 70 65  nowledge of uppe
0680: 72 20 61 6e 64 20 6c 6f 77 65 72 20 63 61 73 65  r and lower case
0690: 20 65 71 75 69 76 61 6c 65 6e 74 73 0a 2a 2a 20   equivalents.** 
06a0: 65 78 74 65 6e 64 73 20 6f 6e 6c 79 20 74 6f 20  extends only to 
06b0: 74 68 65 20 32 36 20 63 68 61 72 61 63 74 65 72  the 26 character
06c0: 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 45 6e  s used in the En
06d0: 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 2e 0a  glish language..
06e0: 2a 2a 0a 2a 2a 20 41 74 20 74 68 65 20 6d 6f 6d  **.** At the mom
06f0: 65 6e 74 20 74 68 65 72 65 20 69 73 20 6f 6e 6c  ent there is onl
0700: 79 20 61 20 55 54 46 2d 38 20 69 6d 70 6c 65 6d  y a UTF-8 implem
0710: 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61  entation..*/.sta
0720: 74 69 63 20 69 6e 74 20 6e 6f 63 61 73 65 43 6f  tic int nocaseCo
0730: 6c 6c 61 74 69 6e 67 46 75 6e 63 28 0a 20 20 76  llatingFunc(.  v
0740: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
0750: 69 6e 74 20 6e 4b 65 79 31 2c 20 63 6f 6e 73 74  int nKey1, const
0760: 20 76 6f 69 64 20 2a 70 4b 65 79 31 2c 0a 20 20   void *pKey1,.  
0770: 69 6e 74 20 6e 4b 65 79 32 2c 20 63 6f 6e 73 74  int nKey2, const
0780: 20 76 6f 69 64 20 2a 70 4b 65 79 32 0a 29 7b 0a   void *pKey2.){.
0790: 20 20 69 6e 74 20 72 20 3d 20 73 71 6c 69 74 65    int r = sqlite
07a0: 33 53 74 72 4e 49 43 6d 70 28 0a 20 20 20 20 20  3StrNICmp(.     
07b0: 20 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 70   (const char *)p
07c0: 4b 65 79 31 2c 20 28 63 6f 6e 73 74 20 63 68 61  Key1, (const cha
07d0: 72 20 2a 29 70 4b 65 79 32 2c 20 28 6e 4b 65 79  r *)pKey2, (nKey
07e0: 31 3c 6e 4b 65 79 32 29 3f 6e 4b 65 79 31 3a 6e  1<nKey2)?nKey1:n
07f0: 4b 65 79 32 29 3b 0a 20 20 69 66 28 20 30 3d 3d  Key2);.  if( 0==
0800: 72 20 29 7b 0a 20 20 20 20 72 20 3d 20 6e 4b 65  r ){.    r = nKe
0810: 79 31 2d 6e 4b 65 79 32 3b 0a 20 20 7d 0a 20 20  y1-nKey2;.  }.  
0820: 72 65 74 75 72 6e 20 72 3b 0a 7d 0a 0a 2f 2a 0a  return r;.}../*.
0830: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 52 4f  ** Return the RO
0840: 57 49 44 20 6f 66 20 74 68 65 20 6d 6f 73 74 20  WID of the most 
0850: 72 65 63 65 6e 74 20 69 6e 73 65 72 74 0a 2a 2f  recent insert.*/
0860: 0a 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 73 71  .sqlite_int64 sq
0870: 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
0880: 74 5f 72 6f 77 69 64 28 73 71 6c 69 74 65 33 20  t_rowid(sqlite3 
0890: 2a 64 62 29 7b 0a 20 20 72 65 74 75 72 6e 20 64  *db){.  return d
08a0: 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 7d 0a  b->lastRowid;.}.
08b0: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
08c0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 6e  e number of chan
08d0: 67 65 73 20 69 6e 20 74 68 65 20 6d 6f 73 74 20  ges in the most 
08e0: 72 65 63 65 6e 74 20 63 61 6c 6c 20 74 6f 20 73  recent call to s
08f0: 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2e 0a 2a  qlite3_exec()..*
0900: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 68  /.int sqlite3_ch
0910: 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 64  anges(sqlite3 *d
0920: 62 29 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 2d  b){.  return db-
0930: 3e 6e 43 68 61 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a  >nChange;.}../*.
0940: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75  ** Return the nu
0950: 6d 62 65 72 20 6f 66 20 63 68 61 6e 67 65 73 20  mber of changes 
0960: 73 69 6e 63 65 20 74 68 65 20 64 61 74 61 62 61  since the databa
0970: 73 65 20 68 61 6e 64 6c 65 20 77 61 73 20 6f 70  se handle was op
0980: 65 6e 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  ened..*/.int sql
0990: 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67  ite3_total_chang
09a0: 65 73 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b  es(sqlite3 *db){
09b0: 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 6e 54  .  return db->nT
09c0: 6f 74 61 6c 43 68 61 6e 67 65 3b 0a 7d 0a 0a 2f  otalChange;.}../
09d0: 2a 0a 2a 2a 20 46 72 65 65 20 61 6c 6c 20 72 65  *.** Free all re
09e0: 73 6f 75 72 63 65 73 20 68 65 6c 64 20 62 79 20  sources held by 
09f0: 74 68 65 20 73 63 68 65 6d 61 20 73 74 72 75 63  the schema struc
0a00: 74 75 72 65 2e 20 54 68 65 20 76 6f 69 64 2a 20  ture. The void* 
0a10: 61 72 67 75 6d 65 6e 74 20 70 6f 69 6e 74 73 0a  argument points.
0a20: 2a 2a 20 61 74 20 61 20 44 62 53 63 68 65 6d 61  ** at a DbSchema
0a30: 20 73 74 72 75 63 74 2e 20 54 68 69 73 20 66 75   struct. This fu
0a40: 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20  nction does not 
0a50: 63 61 6c 6c 20 73 71 6c 69 74 65 46 72 65 65 28  call sqliteFree(
0a60: 29 20 6f 6e 20 74 68 65 20 0a 2a 2a 20 70 6f 69  ) on the .** poi
0a70: 6e 74 65 72 20 69 74 73 65 6c 66 2c 20 69 74 20  nter itself, it 
0a80: 6a 75 73 74 20 63 6c 65 61 6e 73 20 75 70 20 73  just cleans up s
0a90: 75 62 73 69 64 75 61 72 79 20 72 65 73 6f 75 72  ubsiduary resour
0aa0: 63 65 73 20 28 69 2e 65 2e 20 74 68 65 20 63 6f  ces (i.e. the co
0ab0: 6e 74 65 6e 74 73 0a 2a 2a 20 6f 66 20 74 68 65  ntents.** of the
0ac0: 20 73 63 68 65 6d 61 20 68 61 73 68 20 74 61 62   schema hash tab
0ad0: 6c 65 73 29 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  les)..*/.void sq
0ae0: 6c 69 74 65 33 53 63 68 65 6d 61 46 72 65 65 28  lite3SchemaFree(
0af0: 76 6f 69 64 20 2a 70 29 7b 0a 20 20 48 61 73 68  void *p){.  Hash
0b00: 20 74 65 6d 70 31 3b 0a 20 20 48 61 73 68 20 74   temp1;.  Hash t
0b10: 65 6d 70 32 3b 0a 20 20 48 61 73 68 45 6c 65 6d  emp2;.  HashElem
0b20: 20 2a 70 45 6c 65 6d 3b 0a 20 20 44 62 53 63 68   *pElem;.  DbSch
0b30: 65 6d 61 20 2a 70 53 63 68 65 6d 61 20 3d 20 28  ema *pSchema = (
0b40: 44 62 53 63 68 65 6d 61 20 2a 29 70 3b 0a 0a 20  DbSchema *)p;.. 
0b50: 20 74 65 6d 70 31 20 3d 20 70 53 63 68 65 6d 61   temp1 = pSchema
0b60: 2d 3e 74 62 6c 48 61 73 68 3b 0a 20 20 74 65 6d  ->tblHash;.  tem
0b70: 70 32 20 3d 20 70 53 63 68 65 6d 61 2d 3e 74 72  p2 = pSchema->tr
0b80: 69 67 48 61 73 68 3b 0a 20 20 73 71 6c 69 74 65  igHash;.  sqlite
0b90: 33 48 61 73 68 49 6e 69 74 28 26 70 53 63 68 65  3HashInit(&pSche
0ba0: 6d 61 2d 3e 74 72 69 67 48 61 73 68 2c 20 53 51  ma->trigHash, SQ
0bb0: 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47  LITE_HASH_STRING
0bc0: 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 48  , 0);.  sqlite3H
0bd0: 61 73 68 43 6c 65 61 72 28 26 70 53 63 68 65 6d  ashClear(&pSchem
0be0: 61 2d 3e 61 46 4b 65 79 29 3b 0a 20 20 73 71 6c  a->aFKey);.  sql
0bf0: 69 74 65 33 48 61 73 68 43 6c 65 61 72 28 26 70  ite3HashClear(&p
0c00: 53 63 68 65 6d 61 2d 3e 69 64 78 48 61 73 68 29  Schema->idxHash)
0c10: 3b 0a 20 20 66 6f 72 28 70 45 6c 65 6d 3d 73 71  ;.  for(pElem=sq
0c20: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26 74  liteHashFirst(&t
0c30: 65 6d 70 32 29 3b 20 70 45 6c 65 6d 3b 20 70 45  emp2); pElem; pE
0c40: 6c 65 6d 3d 73 71 6c 69 74 65 48 61 73 68 4e 65  lem=sqliteHashNe
0c50: 78 74 28 70 45 6c 65 6d 29 29 7b 0a 20 20 20 20  xt(pElem)){.    
0c60: 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
0c70: 67 67 65 72 28 28 54 72 69 67 67 65 72 2a 29 73  gger((Trigger*)s
0c80: 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 70 45  qliteHashData(pE
0c90: 6c 65 6d 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c  lem));.  }.  sql
0ca0: 69 74 65 33 48 61 73 68 43 6c 65 61 72 28 26 74  ite3HashClear(&t
0cb0: 65 6d 70 32 29 3b 0a 20 20 73 71 6c 69 74 65 33  emp2);.  sqlite3
0cc0: 48 61 73 68 49 6e 69 74 28 26 70 53 63 68 65 6d  HashInit(&pSchem
0cd0: 61 2d 3e 74 62 6c 48 61 73 68 2c 20 53 51 4c 49  a->tblHash, SQLI
0ce0: 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20  TE_HASH_STRING, 
0cf0: 30 29 3b 0a 20 20 66 6f 72 28 70 45 6c 65 6d 3d  0);.  for(pElem=
0d00: 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28  sqliteHashFirst(
0d10: 26 74 65 6d 70 31 29 3b 20 70 45 6c 65 6d 3b 20  &temp1); pElem; 
0d20: 70 45 6c 65 6d 3d 73 71 6c 69 74 65 48 61 73 68  pElem=sqliteHash
0d30: 4e 65 78 74 28 70 45 6c 65 6d 29 29 7b 0a 20 20  Next(pElem)){.  
0d40: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20    Table *pTab = 
0d50: 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 70  sqliteHashData(p
0d60: 45 6c 65 6d 29 3b 0a 20 20 20 20 73 71 6c 69 74  Elem);.    sqlit
0d70: 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 30 2c  e3DeleteTable(0,
0d80: 20 70 54 61 62 29 3b 0a 20 20 7d 0a 20 20 73 71   pTab);.  }.  sq
0d90: 6c 69 74 65 33 48 61 73 68 43 6c 65 61 72 28 26  lite3HashClear(&
0da0: 74 65 6d 70 31 29 3b 0a 20 20 70 53 63 68 65 6d  temp1);.  pSchem
0db0: 61 2d 3e 70 53 65 71 54 61 62 20 3d 20 30 3b 0a  a->pSeqTab = 0;.
0dc0: 20 20 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73    pSchema->flags
0dd0: 20 26 3d 20 7e 44 42 5f 53 63 68 65 6d 61 4c 6f   &= ~DB_SchemaLo
0de0: 61 64 65 64 3b 0a 7d 0a 0a 44 62 53 63 68 65 6d  aded;.}..DbSchem
0df0: 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61  a *sqlite3Schema
0e00: 47 65 74 28 42 74 72 65 65 20 2a 70 42 74 29 7b  Get(Btree *pBt){
0e10: 0a 20 20 44 62 53 63 68 65 6d 61 20 2a 20 70 3b  .  DbSchema * p;
0e20: 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20  .  if( pBt ){.  
0e30: 20 20 70 20 3d 20 28 44 62 53 63 68 65 6d 61 20    p = (DbSchema 
0e40: 2a 29 73 71 6c 69 74 65 33 42 74 72 65 65 53 63  *)sqlite3BtreeSc
0e50: 68 65 6d 61 28 70 42 74 2c 73 69 7a 65 6f 66 28  hema(pBt,sizeof(
0e60: 44 62 53 63 68 65 6d 61 29 2c 73 71 6c 69 74 65  DbSchema),sqlite
0e70: 33 53 63 68 65 6d 61 46 72 65 65 29 3b 0a 20 20  3SchemaFree);.  
0e80: 7d 65 6c 73 65 7b 0a 20 20 20 20 70 20 3d 20 28  }else{.    p = (
0e90: 44 62 53 63 68 65 6d 61 20 2a 29 73 71 6c 69 74  DbSchema *)sqlit
0ea0: 65 4d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 44  eMalloc(sizeof(D
0eb0: 62 53 63 68 65 6d 61 29 29 3b 0a 20 20 7d 0a 20  bSchema));.  }. 
0ec0: 20 69 66 28 20 70 20 26 26 20 30 3d 3d 70 2d 3e   if( p && 0==p->
0ed0: 66 69 6c 65 5f 66 6f 72 6d 61 74 20 29 7b 0a 20  file_format ){. 
0ee0: 20 20 20 73 71 6c 69 74 65 33 48 61 73 68 49 6e     sqlite3HashIn
0ef0: 69 74 28 26 70 2d 3e 74 62 6c 48 61 73 68 2c 20  it(&p->tblHash, 
0f00: 53 51 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49  SQLITE_HASH_STRI
0f10: 4e 47 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69  NG, 0);.    sqli
0f20: 74 65 33 48 61 73 68 49 6e 69 74 28 26 70 2d 3e  te3HashInit(&p->
0f30: 69 64 78 48 61 73 68 2c 20 53 51 4c 49 54 45 5f  idxHash, SQLITE_
0f40: 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30 29 3b  HASH_STRING, 0);
0f50: 0a 20 20 20 20 73 71 6c 69 74 65 33 48 61 73 68  .    sqlite3Hash
0f60: 49 6e 69 74 28 26 70 2d 3e 74 72 69 67 48 61 73  Init(&p->trigHas
0f70: 68 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53  h, SQLITE_HASH_S
0f80: 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20 20 20 73  TRING, 0);.    s
0f90: 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28 26  qlite3HashInit(&
0fa0: 70 2d 3e 61 46 4b 65 79 2c 20 53 51 4c 49 54 45  p->aFKey, SQLITE
0fb0: 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 31 29  _HASH_STRING, 1)
0fc0: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70  ;.  }.  return p
0fd0: 3b 0a 7d 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  ;.}..int sqlite3
0fe0: 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71  SchemaToIndex(sq
0ff0: 6c 69 74 65 33 20 2a 64 62 2c 20 44 62 53 63 68  lite3 *db, DbSch
1000: 65 6d 61 20 2a 70 53 63 68 65 6d 61 29 7b 0a 20  ema *pSchema){. 
1010: 20 69 6e 74 20 69 20 3d 20 2d 31 30 30 30 30 30   int i = -100000
1020: 30 3b 0a 0a 20 20 2f 2a 20 49 66 20 70 53 63 68  0;..  /* If pSch
1030: 65 6d 61 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  ema is NULL, the
1040: 6e 20 72 65 74 75 72 6e 20 2d 31 30 30 30 30 30  n return -100000
1050: 30 2e 20 54 68 69 73 20 68 61 70 70 65 6e 73 20  0. This happens 
1060: 77 68 65 6e 20 63 6f 64 65 20 69 6e 20 0a 20 20  when code in .  
1070: 2a 2a 20 65 78 70 72 2e 63 20 69 73 20 74 72 79  ** expr.c is try
1080: 69 6e 67 20 74 6f 20 72 65 73 6f 6c 76 65 20 61  ing to resolve a
1090: 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20 61 20   reference to a 
10a0: 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 20  transient table 
10b0: 28 69 2e 65 2e 20 6f 6e 65 0a 20 20 2a 2a 20 63  (i.e. one.  ** c
10c0: 72 65 61 74 65 64 20 62 79 20 61 20 73 75 62 2d  reated by a sub-
10d0: 73 65 6c 65 63 74 29 2e 20 49 6e 20 74 68 69 73  select). In this
10e0: 20 63 61 73 65 20 74 68 65 20 72 65 74 75 72 6e   case the return
10f0: 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 0a   value of this .
1100: 20 20 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 73 68    ** function sh
1110: 6f 75 6c 64 20 6e 65 76 65 72 20 62 65 20 75 73  ould never be us
1120: 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 65  ed..  **.  ** We
1130: 20 72 65 74 75 72 6e 20 2d 31 30 30 30 30 30 30   return -1000000
1140: 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20   instead of the 
1150: 6d 6f 72 65 20 75 73 75 61 6c 20 2d 31 20 73 69  more usual -1 si
1160: 6d 70 6c 79 20 62 65 63 61 75 73 65 20 75 73 69  mply because usi
1170: 6e 67 0a 20 20 2a 2a 20 2d 31 30 30 30 30 30 30  ng.  ** -1000000
1180: 20 61 73 20 69 6e 63 6f 72 72 65 63 74 6c 79 20   as incorrectly 
1190: 75 73 69 6e 67 20 2d 31 30 30 30 30 30 30 20 69  using -1000000 i
11a0: 6e 64 65 78 20 69 6e 74 6f 20 64 62 2d 3e 61 44  ndex into db->aD
11b0: 62 5b 5d 20 69 73 20 6d 75 63 68 20 0a 20 20 2a  b[] is much .  *
11c0: 2a 20 6d 6f 72 65 20 6c 69 6b 65 6c 79 20 74 6f  * more likely to
11d0: 20 63 61 75 73 65 20 61 20 73 65 67 66 61 75 6c   cause a segfaul
11e0: 74 20 74 68 61 6e 20 2d 31 20 28 6f 66 20 63 6f  t than -1 (of co
11f0: 75 72 73 65 20 74 68 65 72 65 20 61 72 65 20 61  urse there are a
1200: 73 73 65 72 74 28 29 0a 20 20 2a 2a 20 73 74 61  ssert().  ** sta
1210: 74 65 6d 65 6e 74 73 20 74 6f 6f 2c 20 62 75 74  tements too, but
1220: 20 69 74 20 6e 65 76 65 72 20 68 75 72 74 73 20   it never hurts 
1230: 74 6f 20 70 6c 61 79 20 74 68 65 20 6f 64 64 73  to play the odds
1240: 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 53  )..  */.  if( pS
1250: 63 68 65 6d 61 20 29 7b 0a 20 20 20 20 66 6f 72  chema ){.    for
1260: 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b  (i=0; i<db->nDb;
1270: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28   i++){.      if(
1280: 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 53 63 68   db->aDb[i].pSch
1290: 65 6d 61 3d 3d 70 53 63 68 65 6d 61 20 29 7b 0a  ema==pSchema ){.
12a0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
12b0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
12c0: 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26   assert( i>=0 &&
12d0: 69 3e 3d 30 20 26 26 20 20 69 3c 64 62 2d 3e 6e  i>=0 &&  i<db->n
12e0: 44 62 20 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  Db );.  }.  retu
12f0: 72 6e 20 69 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43  rn i;.}../*.** C
1300: 6c 6f 73 65 20 61 6e 20 65 78 69 73 74 69 6e 67  lose an existing
1310: 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65   SQLite database
1320: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
1330: 63 6c 6f 73 65 28 73 71 6c 69 74 65 33 20 2a 64  close(sqlite3 *d
1340: 62 29 7b 0a 20 20 48 61 73 68 45 6c 65 6d 20 2a  b){.  HashElem *
1350: 69 3b 0a 20 20 69 6e 74 20 6a 3b 0a 0a 20 20 69  i;.  int j;..  i
1360: 66 28 20 21 64 62 20 29 7b 0a 20 20 20 20 72 65  f( !db ){.    re
1370: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
1380: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
1390: 33 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29  3SafetyCheck(db)
13a0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
13b0: 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20  QLITE_MISUSE;.  
13c0: 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
13d0: 5f 53 53 45 0a 20 20 73 71 6c 69 74 65 33 5f 66  _SSE.  sqlite3_f
13e0: 69 6e 61 6c 69 7a 65 28 64 62 2d 3e 70 46 65 74  inalize(db->pFet
13f0: 63 68 29 3b 0a 23 65 6e 64 69 66 20 0a 0a 20 20  ch);.#endif ..  
1400: 2f 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20  /* If there are 
1410: 61 6e 79 20 6f 75 74 73 74 61 6e 64 69 6e 67 20  any outstanding 
1420: 56 4d 73 2c 20 72 65 74 75 72 6e 20 53 51 4c 49  VMs, return SQLI
1430: 54 45 5f 42 55 53 59 2e 20 2a 2f 0a 20 20 69 66  TE_BUSY. */.  if
1440: 28 20 64 62 2d 3e 70 56 64 62 65 20 29 7b 0a 20  ( db->pVdbe ){. 
1450: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28     sqlite3Error(
1460: 64 62 2c 20 53 51 4c 49 54 45 5f 42 55 53 59 2c  db, SQLITE_BUSY,
1470: 20 0a 20 20 20 20 20 20 20 20 22 55 6e 61 62 6c   .        "Unabl
1480: 65 20 74 6f 20 63 6c 6f 73 65 20 64 75 65 20 74  e to close due t
1490: 6f 20 75 6e 66 69 6e 61 6c 69 73 65 64 20 73 74  o unfinalised st
14a0: 61 74 65 6d 65 6e 74 73 22 29 3b 0a 20 20 20 20  atements");.    
14b0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 42 55  return SQLITE_BU
14c0: 53 59 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  SY;.  }.  assert
14d0: 28 20 21 73 71 6c 69 74 65 33 53 61 66 65 74 79  ( !sqlite3Safety
14e0: 43 68 65 63 6b 28 64 62 29 20 29 3b 0a 0a 20 20  Check(db) );..  
14f0: 2f 2a 20 46 49 58 20 4d 45 3a 20 64 62 2d 3e 6d  /* FIX ME: db->m
1500: 61 67 69 63 20 6d 61 79 20 62 65 20 73 65 74 20  agic may be set 
1510: 74 6f 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  to SQLITE_MAGIC_
1520: 43 4c 4f 53 45 44 20 69 66 20 74 68 65 20 64 61  CLOSED if the da
1530: 74 61 62 61 73 65 0a 20 20 2a 2a 20 63 61 6e 6e  tabase.  ** cann
1540: 6f 74 20 62 65 20 6f 70 65 6e 65 64 20 66 6f 72  ot be opened for
1550: 20 73 6f 6d 65 20 72 65 61 73 6f 6e 2e 20 53 6f   some reason. So
1560: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 6e 65   this routine ne
1570: 65 64 73 20 74 6f 20 72 75 6e 20 69 6e 0a 20 20  eds to run in.  
1580: 2a 2a 20 74 68 61 74 20 63 61 73 65 2e 20 42 75  ** that case. Bu
1590: 74 20 6d 61 79 62 65 20 74 68 65 72 65 20 73 68  t maybe there sh
15a0: 6f 75 6c 64 20 62 65 20 61 6e 20 65 78 74 72 61  ould be an extra
15b0: 20 6d 61 67 69 63 20 76 61 6c 75 65 20 66 6f 72   magic value for
15c0: 20 74 68 65 0a 20 20 2a 2a 20 22 66 61 69 6c 65   the.  ** "faile
15d0: 64 20 74 6f 20 6f 70 65 6e 22 20 73 74 61 74 65  d to open" state
15e0: 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  ..  */.  if( db-
15f0: 3e 6d 61 67 69 63 21 3d 53 51 4c 49 54 45 5f 4d  >magic!=SQLITE_M
1600: 41 47 49 43 5f 43 4c 4f 53 45 44 20 26 26 20 73  AGIC_CLOSED && s
1610: 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
1620: 62 29 20 29 7b 0a 20 20 20 20 2f 2a 20 70 72 69  b) ){.    /* pri
1630: 6e 74 66 28 22 44 49 44 20 4e 4f 54 20 43 4c 4f  ntf("DID NOT CLO
1640: 53 45 5c 6e 22 29 3b 20 66 66 6c 75 73 68 28 73  SE\n"); fflush(s
1650: 74 64 6f 75 74 29 3b 20 2a 2f 0a 20 20 20 20 72  tdout); */.    r
1660: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
1670: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 73 71  OR;.  }..  /* sq
1680: 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 20 6d 61  lite3_close() ma
1690: 79 20 6e 6f 74 20 69 6e 76 6f 6b 65 20 73 71 6c  y not invoke sql
16a0: 69 74 65 4d 61 6c 6c 6f 63 28 29 2e 20 2a 2f 0a  iteMalloc(). */.
16b0: 20 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 44    sqlite3MallocD
16c0: 69 73 61 6c 6c 6f 77 28 29 3b 0a 0a 20 20 66 6f  isallow();..  fo
16d0: 72 28 6a 3d 30 3b 20 6a 3c 64 62 2d 3e 6e 44 62  r(j=0; j<db->nDb
16e0: 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 73 74 72 75  ; j++){.    stru
16f0: 63 74 20 44 62 20 2a 70 44 62 20 3d 20 26 64 62  ct Db *pDb = &db
1700: 2d 3e 61 44 62 5b 6a 5d 3b 0a 20 20 20 20 69 66  ->aDb[j];.    if
1710: 28 20 70 44 62 2d 3e 70 42 74 20 29 7b 0a 20 20  ( pDb->pBt ){.  
1720: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
1730: 43 6c 6f 73 65 28 70 44 62 2d 3e 70 42 74 29 3b  Close(pDb->pBt);
1740: 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 42 74 20  .      pDb->pBt 
1750: 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  = 0;.    }.  }. 
1760: 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74   sqlite3ResetInt
1770: 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20  ernalSchema(db, 
1780: 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62  0);.  assert( db
1790: 2d 3e 6e 44 62 3c 3d 32 20 29 3b 0a 20 20 61 73  ->nDb<=2 );.  as
17a0: 73 65 72 74 28 20 64 62 2d 3e 61 44 62 3d 3d 64  sert( db->aDb==d
17b0: 62 2d 3e 61 44 62 53 74 61 74 69 63 20 29 3b 0a  b->aDbStatic );.
17c0: 20 20 66 6f 72 28 69 3d 73 71 6c 69 74 65 48 61    for(i=sqliteHa
17d0: 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61 46 75  shFirst(&db->aFu
17e0: 6e 63 29 3b 20 69 3b 20 69 3d 73 71 6c 69 74 65  nc); i; i=sqlite
17f0: 48 61 73 68 4e 65 78 74 28 69 29 29 7b 0a 20 20  HashNext(i)){.  
1800: 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63    FuncDef *pFunc
1810: 2c 20 2a 70 4e 65 78 74 3b 0a 20 20 20 20 66 6f  , *pNext;.    fo
1820: 72 28 70 46 75 6e 63 20 3d 20 28 46 75 6e 63 44  r(pFunc = (FuncD
1830: 65 66 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61  ef*)sqliteHashDa
1840: 74 61 28 69 29 3b 20 70 46 75 6e 63 3b 20 70 46  ta(i); pFunc; pF
1850: 75 6e 63 3d 70 4e 65 78 74 29 7b 0a 20 20 20 20  unc=pNext){.    
1860: 20 20 70 4e 65 78 74 20 3d 20 70 46 75 6e 63 2d    pNext = pFunc-
1870: 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 73 71  >pNext;.      sq
1880: 6c 69 74 65 46 72 65 65 28 70 46 75 6e 63 29 3b  liteFree(pFunc);
1890: 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 66 6f  .    }.  }..  fo
18a0: 72 28 69 3d 73 71 6c 69 74 65 48 61 73 68 46 69  r(i=sqliteHashFi
18b0: 72 73 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65  rst(&db->aCollSe
18c0: 71 29 3b 20 69 3b 20 69 3d 73 71 6c 69 74 65 48  q); i; i=sqliteH
18d0: 61 73 68 4e 65 78 74 28 69 29 29 7b 0a 20 20 20  ashNext(i)){.   
18e0: 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 20   CollSeq *pColl 
18f0: 3d 20 28 43 6f 6c 6c 53 65 71 20 2a 29 73 71 6c  = (CollSeq *)sql
1900: 69 74 65 48 61 73 68 44 61 74 61 28 69 29 3b 0a  iteHashData(i);.
1910: 20 20 20 20 73 71 6c 69 74 65 46 72 65 65 28 70      sqliteFree(p
1920: 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 71 6c  Coll);.  }.  sql
1930: 69 74 65 33 48 61 73 68 43 6c 65 61 72 28 26 64  ite3HashClear(&d
1940: 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 0a 0a 20  b->aCollSeq);.. 
1950: 20 73 71 6c 69 74 65 33 48 61 73 68 43 6c 65 61   sqlite3HashClea
1960: 72 28 26 64 62 2d 3e 61 46 75 6e 63 29 3b 0a 20  r(&db->aFunc);. 
1970: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62   sqlite3Error(db
1980: 2c 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 30 29 3b  , SQLITE_OK, 0);
1990: 20 2f 2a 20 44 65 61 6c 6c 6f 63 61 74 65 73 20   /* Deallocates 
19a0: 61 6e 79 20 63 61 63 68 65 64 20 65 72 72 6f 72  any cached error
19b0: 20 73 74 72 69 6e 67 73 2e 20 2a 2f 0a 20 20 69   strings. */.  i
19c0: 66 28 20 64 62 2d 3e 70 45 72 72 20 29 7b 0a 20  f( db->pErr ){. 
19d0: 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46     sqlite3ValueF
19e0: 72 65 65 28 64 62 2d 3e 70 45 72 72 29 3b 0a 20  ree(db->pErr);. 
19f0: 20 7d 0a 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20   }..  db->magic 
1a00: 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45  = SQLITE_MAGIC_E
1a10: 52 52 4f 52 3b 0a 20 20 73 71 6c 69 74 65 46 72  RROR;.  sqliteFr
1a20: 65 65 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 53  ee(db->aDb[1].pS
1a30: 63 68 65 6d 61 29 3b 0a 20 20 73 71 6c 69 74 65  chema);.  sqlite
1a40: 46 72 65 65 28 64 62 29 3b 0a 20 20 73 71 6c 69  Free(db);.  sqli
1a50: 74 65 33 4d 61 6c 6c 6f 63 41 6c 6c 6f 77 28 29  te3MallocAllow()
1a60: 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ;.  return SQLIT
1a70: 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  E_OK;.}../*.** R
1a80: 6f 6c 6c 62 61 63 6b 20 61 6c 6c 20 64 61 74 61  ollback all data
1a90: 62 61 73 65 20 66 69 6c 65 73 2e 0a 2a 2f 0a 76  base files..*/.v
1aa0: 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62  oid sqlite3Rollb
1ab0: 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 20 2a  ackAll(sqlite3 *
1ac0: 64 62 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  db){.  int i;.  
1ad0: 69 6e 74 20 69 6e 54 72 61 6e 73 20 3d 20 30 3b  int inTrans = 0;
1ae0: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62  .  for(i=0; i<db
1af0: 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20  ->nDb; i++){.   
1b00: 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e   if( db->aDb[i].
1b10: 70 42 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28  pBt ){.      if(
1b20: 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49   sqlite3BtreeIsI
1b30: 6e 54 72 61 6e 73 28 64 62 2d 3e 61 44 62 5b 69  nTrans(db->aDb[i
1b40: 5d 2e 70 42 74 29 20 29 7b 0a 20 20 20 20 20 20  ].pBt) ){.      
1b50: 20 20 69 6e 54 72 61 6e 73 20 3d 20 31 3b 0a 20    inTrans = 1;. 
1b60: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c       }.      sql
1b70: 69 74 65 33 42 74 72 65 65 52 6f 6c 6c 62 61 63  ite3BtreeRollbac
1b80: 6b 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  k(db->aDb[i].pBt
1b90: 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62  );.      db->aDb
1ba0: 5b 69 5d 2e 69 6e 54 72 61 6e 73 20 3d 20 30 3b  [i].inTrans = 0;
1bb0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
1bc0: 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54   db->flags&SQLIT
1bd0: 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 20  E_InternChanges 
1be0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65  ){.    sqlite3Re
1bf0: 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
1c00: 61 28 64 62 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20  a(db, 0);.  }.. 
1c10: 20 2f 2a 20 49 66 20 6f 6e 65 20 68 61 73 20 62   /* If one has b
1c20: 65 65 6e 20 63 6f 6e 66 69 67 75 72 65 64 2c 20  een configured, 
1c30: 69 6e 76 6f 6b 65 20 74 68 65 20 72 6f 6c 6c 62  invoke the rollb
1c40: 61 63 6b 2d 68 6f 6f 6b 20 63 61 6c 6c 62 61 63  ack-hook callbac
1c50: 6b 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78  k */.  if( db->x
1c60: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
1c70: 20 26 26 20 28 69 6e 54 72 61 6e 73 20 7c 7c 20   && (inTrans || 
1c80: 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 29  !db->autoCommit)
1c90: 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 52 6f 6c   ){.    db->xRol
1ca0: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 64 62  lbackCallback(db
1cb0: 2d 3e 70 52 6f 6c 6c 62 61 63 6b 41 72 67 29 3b  ->pRollbackArg);
1cc0: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  .  }.}../*.** Re
1cd0: 74 75 72 6e 20 61 20 73 74 61 74 69 63 20 73 74  turn a static st
1ce0: 72 69 6e 67 20 74 68 61 74 20 64 65 73 63 72 69  ring that descri
1cf0: 62 65 73 20 74 68 65 20 6b 69 6e 64 20 6f 66 20  bes the kind of 
1d00: 65 72 72 6f 72 20 73 70 65 63 69 66 69 65 64 20  error specified 
1d10: 69 6e 20 74 68 65 0a 2a 2a 20 61 72 67 75 6d 65  in the.** argume
1d20: 6e 74 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61  nt..*/.const cha
1d30: 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72  r *sqlite3ErrStr
1d40: 28 69 6e 74 20 72 63 29 7b 0a 20 20 63 6f 6e 73  (int rc){.  cons
1d50: 74 20 63 68 61 72 20 2a 7a 3b 0a 20 20 73 77 69  t char *z;.  swi
1d60: 74 63 68 28 20 72 63 20 29 7b 0a 20 20 20 20 63  tch( rc ){.    c
1d70: 61 73 65 20 53 51 4c 49 54 45 5f 52 4f 57 3a 0a  ase SQLITE_ROW:.
1d80: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
1d90: 44 4f 4e 45 3a 0a 20 20 20 20 63 61 73 65 20 53  DONE:.    case S
1da0: 51 4c 49 54 45 5f 4f 4b 3a 20 20 20 20 20 20 20  QLITE_OK:       
1db0: 20 20 7a 20 3d 20 22 6e 6f 74 20 61 6e 20 65 72    z = "not an er
1dc0: 72 6f 72 22 3b 20 20 20 20 20 20 20 20 20 20 20  ror";           
1dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
1de0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
1df0: 51 4c 49 54 45 5f 45 52 52 4f 52 3a 20 20 20 20  QLITE_ERROR:    
1e00: 20 20 7a 20 3d 20 22 53 51 4c 20 6c 6f 67 69 63    z = "SQL logic
1e10: 20 65 72 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e   error or missin
1e20: 67 20 64 61 74 61 62 61 73 65 22 3b 20 20 20 62  g database";   b
1e30: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
1e40: 51 4c 49 54 45 5f 50 45 52 4d 3a 20 20 20 20 20  QLITE_PERM:     
1e50: 20 20 7a 20 3d 20 22 61 63 63 65 73 73 20 70 65    z = "access pe
1e60: 72 6d 69 73 73 69 6f 6e 20 64 65 6e 69 65 64 22  rmission denied"
1e70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62  ;              b
1e80: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
1e90: 51 4c 49 54 45 5f 41 42 4f 52 54 3a 20 20 20 20  QLITE_ABORT:    
1ea0: 20 20 7a 20 3d 20 22 63 61 6c 6c 62 61 63 6b 20    z = "callback 
1eb0: 72 65 71 75 65 73 74 65 64 20 71 75 65 72 79 20  requested query 
1ec0: 61 62 6f 72 74 22 3b 20 20 20 20 20 20 20 20 62  abort";        b
1ed0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
1ee0: 51 4c 49 54 45 5f 42 55 53 59 3a 20 20 20 20 20  QLITE_BUSY:     
1ef0: 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73 65 20    z = "database 
1f00: 69 73 20 6c 6f 63 6b 65 64 22 3b 20 20 20 20 20  is locked";     
1f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
1f20: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
1f30: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3a 20 20 20  QLITE_LOCKED:   
1f40: 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73 65 20    z = "database 
1f50: 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 22  table is locked"
1f60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62  ;              b
1f70: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
1f80: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3a 20 20 20 20  QLITE_NOMEM:    
1f90: 20 20 7a 20 3d 20 22 6f 75 74 20 6f 66 20 6d 65    z = "out of me
1fa0: 6d 6f 72 79 22 3b 20 20 20 20 20 20 20 20 20 20  mory";          
1fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
1fc0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
1fd0: 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3a 20  QLITE_READONLY: 
1fe0: 20 20 7a 20 3d 20 22 61 74 74 65 6d 70 74 20 74    z = "attempt t
1ff0: 6f 20 77 72 69 74 65 20 61 20 72 65 61 64 6f 6e  o write a readon
2000: 6c 79 20 64 61 74 61 62 61 73 65 22 3b 20 20 62  ly database";  b
2010: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
2020: 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3a  QLITE_INTERRUPT:
2030: 20 20 7a 20 3d 20 22 69 6e 74 65 72 72 75 70 74    z = "interrupt
2040: 65 64 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  ed";            
2050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
2060: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
2070: 51 4c 49 54 45 5f 49 4f 45 52 52 3a 20 20 20 20  QLITE_IOERR:    
2080: 20 20 7a 20 3d 20 22 64 69 73 6b 20 49 2f 4f 20    z = "disk I/O 
2090: 65 72 72 6f 72 22 3b 20 20 20 20 20 20 20 20 20  error";         
20a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
20b0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
20c0: 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 3a 20 20  QLITE_CORRUPT:  
20d0: 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73 65 20    z = "database 
20e0: 64 69 73 6b 20 69 6d 61 67 65 20 69 73 20 6d 61  disk image is ma
20f0: 6c 66 6f 72 6d 65 64 22 3b 20 20 20 20 20 20 62  lformed";      b
2100: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
2110: 51 4c 49 54 45 5f 46 55 4c 4c 3a 20 20 20 20 20  QLITE_FULL:     
2120: 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73 65 20    z = "database 
2130: 6f 72 20 64 69 73 6b 20 69 73 20 66 75 6c 6c 22  or disk is full"
2140: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62  ;              b
2150: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
2160: 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 3a 20  QLITE_CANTOPEN: 
2170: 20 20 7a 20 3d 20 22 75 6e 61 62 6c 65 20 74 6f    z = "unable to
2180: 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 20 66   open database f
2190: 69 6c 65 22 3b 20 20 20 20 20 20 20 20 20 20 62  ile";          b
21a0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
21b0: 51 4c 49 54 45 5f 50 52 4f 54 4f 43 4f 4c 3a 20  QLITE_PROTOCOL: 
21c0: 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73 65 20    z = "database 
21d0: 6c 6f 63 6b 69 6e 67 20 70 72 6f 74 6f 63 6f 6c  locking protocol
21e0: 20 66 61 69 6c 75 72 65 22 3b 20 20 20 20 20 62   failure";     b
21f0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
2200: 51 4c 49 54 45 5f 45 4d 50 54 59 3a 20 20 20 20  QLITE_EMPTY:    
2210: 20 20 7a 20 3d 20 22 74 61 62 6c 65 20 63 6f 6e    z = "table con
2220: 74 61 69 6e 73 20 6e 6f 20 64 61 74 61 22 3b 20  tains no data"; 
2230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
2240: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
2250: 51 4c 49 54 45 5f 53 43 48 45 4d 41 3a 20 20 20  QLITE_SCHEMA:   
2260: 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73 65 20    z = "database 
2270: 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67  schema has chang
2280: 65 64 22 3b 20 20 20 20 20 20 20 20 20 20 20 62  ed";           b
2290: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
22a0: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
22b0: 3a 20 7a 20 3d 20 22 63 6f 6e 73 74 72 61 69 6e  : z = "constrain
22c0: 74 20 66 61 69 6c 65 64 22 3b 20 20 20 20 20 20  t failed";      
22d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
22e0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
22f0: 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3a 20  QLITE_MISMATCH: 
2300: 20 20 7a 20 3d 20 22 64 61 74 61 74 79 70 65 20    z = "datatype 
2310: 6d 69 73 6d 61 74 63 68 22 3b 20 20 20 20 20 20  mismatch";      
2320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
2330: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
2340: 51 4c 49 54 45 5f 4d 49 53 55 53 45 3a 20 20 20  QLITE_MISUSE:   
2350: 20 20 7a 20 3d 20 22 6c 69 62 72 61 72 79 20 72    z = "library r
2360: 6f 75 74 69 6e 65 20 63 61 6c 6c 65 64 20 6f 75  outine called ou
2370: 74 20 6f 66 20 73 65 71 75 65 6e 63 65 22 3b 62  t of sequence";b
2380: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
2390: 51 4c 49 54 45 5f 4e 4f 4c 46 53 3a 20 20 20 20  QLITE_NOLFS:    
23a0: 20 20 7a 20 3d 20 22 6b 65 72 6e 65 6c 20 6c 61    z = "kernel la
23b0: 63 6b 73 20 6c 61 72 67 65 20 66 69 6c 65 20 73  cks large file s
23c0: 75 70 70 6f 72 74 22 3b 20 20 20 20 20 20 20 62  upport";       b
23d0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
23e0: 51 4c 49 54 45 5f 41 55 54 48 3a 20 20 20 20 20  QLITE_AUTH:     
23f0: 20 20 7a 20 3d 20 22 61 75 74 68 6f 72 69 7a 61    z = "authoriza
2400: 74 69 6f 6e 20 64 65 6e 69 65 64 22 3b 20 20 20  tion denied";   
2410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
2420: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
2430: 51 4c 49 54 45 5f 46 4f 52 4d 41 54 3a 20 20 20  QLITE_FORMAT:   
2440: 20 20 7a 20 3d 20 22 61 75 78 69 6c 69 61 72 79    z = "auxiliary
2450: 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
2460: 20 65 72 72 6f 72 22 3b 20 20 20 20 20 20 20 62   error";       b
2470: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
2480: 51 4c 49 54 45 5f 52 41 4e 47 45 3a 20 20 20 20  QLITE_RANGE:    
2490: 20 20 7a 20 3d 20 22 62 69 6e 64 20 6f 72 20 63    z = "bind or c
24a0: 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 6f 75 74 20  olumn index out 
24b0: 6f 66 20 72 61 6e 67 65 22 3b 20 20 20 20 20 62  of range";     b
24c0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
24d0: 51 4c 49 54 45 5f 4e 4f 54 41 44 42 3a 20 20 20  QLITE_NOTADB:   
24e0: 20 20 7a 20 3d 20 22 66 69 6c 65 20 69 73 20 65    z = "file is e
24f0: 6e 63 72 79 70 74 65 64 20 6f 72 20 69 73 20 6e  ncrypted or is n
2500: 6f 74 20 61 20 64 61 74 61 62 61 73 65 22 3b 62  ot a database";b
2510: 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c  reak;.    defaul
2520: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
2530: 20 20 7a 20 3d 20 22 75 6e 6b 6e 6f 77 6e 20 65    z = "unknown e
2540: 72 72 6f 72 22 3b 20 20 20 20 20 20 20 20 20 20  rror";          
2550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
2560: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 72 65 74 75  reak;.  }.  retu
2570: 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  rn z;.}../*.** T
2580: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 6d 70 6c  his routine impl
2590: 65 6d 65 6e 74 73 20 61 20 62 75 73 79 20 63 61  ements a busy ca
25a0: 6c 6c 62 61 63 6b 20 74 68 61 74 20 73 6c 65 65  llback that slee
25b0: 70 73 20 61 6e 64 20 74 72 69 65 73 0a 2a 2a 20  ps and tries.** 
25c0: 61 67 61 69 6e 20 75 6e 74 69 6c 20 61 20 74 69  again until a ti
25d0: 6d 65 6f 75 74 20 76 61 6c 75 65 20 69 73 20 72  meout value is r
25e0: 65 61 63 68 65 64 2e 20 20 54 68 65 20 74 69 6d  eached.  The tim
25f0: 65 6f 75 74 20 76 61 6c 75 65 20 69 73 0a 2a 2a  eout value is.**
2600: 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62   an integer numb
2610: 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e  er of millisecon
2620: 64 73 20 70 61 73 73 65 64 20 69 6e 20 61 73 20  ds passed in as 
2630: 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67  the first.** arg
2640: 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63  ument..*/.static
2650: 20 69 6e 74 20 73 71 6c 69 74 65 44 65 66 61 75   int sqliteDefau
2660: 6c 74 42 75 73 79 43 61 6c 6c 62 61 63 6b 28 0a  ltBusyCallback(.
2670: 20 76 6f 69 64 20 2a 70 74 72 2c 20 20 20 20 20   void *ptr,     
2680: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
2690: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
26a0: 20 2a 2f 0a 20 69 6e 74 20 63 6f 75 6e 74 20 20   */. int count  
26b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
26c0: 20 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73   Number of times
26d0: 20 74 61 62 6c 65 20 68 61 73 20 62 65 65 6e 20   table has been 
26e0: 62 75 73 79 20 2a 2f 0a 29 7b 0a 23 69 66 20 53  busy */.){.#if S
26f0: 51 4c 49 54 45 5f 4d 49 4e 5f 53 4c 45 45 50 5f  QLITE_MIN_SLEEP_
2700: 4d 53 3d 3d 31 0a 20 20 73 74 61 74 69 63 20 63  MS==1.  static c
2710: 6f 6e 73 74 20 75 38 20 64 65 6c 61 79 73 5b 5d  onst u8 delays[]
2720: 20 3d 0a 20 20 20 20 20 7b 20 31 2c 20 32 2c 20   =.     { 1, 2, 
2730: 35 2c 20 31 30 2c 20 31 35 2c 20 32 30 2c 20 32  5, 10, 15, 20, 2
2740: 35 2c 20 32 35 2c 20 20 32 35 2c 20 20 35 30 2c  5, 25,  25,  50,
2750: 20 20 35 30 2c 20 31 30 30 20 7d 3b 0a 20 20 73    50, 100 };.  s
2760: 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38 20 74  tatic const u8 t
2770: 6f 74 61 6c 73 5b 5d 20 3d 0a 20 20 20 20 20 7b  otals[] =.     {
2780: 20 30 2c 20 31 2c 20 33 2c 20 20 38 2c 20 31 38   0, 1, 3,  8, 18
2790: 2c 20 33 33 2c 20 35 33 2c 20 37 38 2c 20 31 30  , 33, 53, 78, 10
27a0: 33 2c 20 31 32 38 2c 20 31 37 38 2c 20 32 32 38  3, 128, 178, 228
27b0: 20 7d 3b 0a 23 20 64 65 66 69 6e 65 20 4e 44 45   };.# define NDE
27c0: 4c 41 59 20 28 73 69 7a 65 6f 66 28 64 65 6c 61  LAY (sizeof(dela
27d0: 79 73 29 2f 73 69 7a 65 6f 66 28 64 65 6c 61 79  ys)/sizeof(delay
27e0: 73 5b 30 5d 29 29 0a 20 20 69 6e 74 20 74 69 6d  s[0])).  int tim
27f0: 65 6f 75 74 20 3d 20 28 28 73 71 6c 69 74 65 33  eout = ((sqlite3
2800: 20 2a 29 70 74 72 29 2d 3e 62 75 73 79 54 69 6d   *)ptr)->busyTim
2810: 65 6f 75 74 3b 0a 20 20 69 6e 74 20 64 65 6c 61  eout;.  int dela
2820: 79 2c 20 70 72 69 6f 72 3b 0a 0a 20 20 61 73 73  y, prior;..  ass
2830: 65 72 74 28 20 63 6f 75 6e 74 3e 3d 30 20 29 3b  ert( count>=0 );
2840: 0a 20 20 69 66 28 20 63 6f 75 6e 74 20 3c 20 4e  .  if( count < N
2850: 44 45 4c 41 59 20 29 7b 0a 20 20 20 20 64 65 6c  DELAY ){.    del
2860: 61 79 20 3d 20 64 65 6c 61 79 73 5b 63 6f 75 6e  ay = delays[coun
2870: 74 5d 3b 0a 20 20 20 20 70 72 69 6f 72 20 3d 20  t];.    prior = 
2880: 74 6f 74 61 6c 73 5b 63 6f 75 6e 74 5d 3b 0a 20  totals[count];. 
2890: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 64 65 6c 61   }else{.    dela
28a0: 79 20 3d 20 64 65 6c 61 79 73 5b 4e 44 45 4c 41  y = delays[NDELA
28b0: 59 2d 31 5d 3b 0a 20 20 20 20 70 72 69 6f 72 20  Y-1];.    prior 
28c0: 3d 20 74 6f 74 61 6c 73 5b 4e 44 45 4c 41 59 2d  = totals[NDELAY-
28d0: 31 5d 20 2b 20 64 65 6c 61 79 2a 28 63 6f 75 6e  1] + delay*(coun
28e0: 74 2d 28 4e 44 45 4c 41 59 2d 31 29 29 3b 0a 20  t-(NDELAY-1));. 
28f0: 20 7d 0a 20 20 69 66 28 20 70 72 69 6f 72 20 2b   }.  if( prior +
2900: 20 64 65 6c 61 79 20 3e 20 74 69 6d 65 6f 75 74   delay > timeout
2910: 20 29 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20   ){.    delay = 
2920: 74 69 6d 65 6f 75 74 20 2d 20 70 72 69 6f 72 3b  timeout - prior;
2930: 0a 20 20 20 20 69 66 28 20 64 65 6c 61 79 3c 3d  .    if( delay<=
2940: 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  0 ) return 0;.  
2950: 7d 0a 20 20 73 71 6c 69 74 65 33 4f 73 2e 78 53  }.  sqlite3Os.xS
2960: 6c 65 65 70 28 64 65 6c 61 79 29 3b 0a 20 20 72  leep(delay);.  r
2970: 65 74 75 72 6e 20 31 3b 0a 23 65 6c 73 65 0a 20  eturn 1;.#else. 
2980: 20 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20 28   int timeout = (
2990: 28 73 71 6c 69 74 65 33 20 2a 29 70 74 72 29 2d  (sqlite3 *)ptr)-
29a0: 3e 62 75 73 79 54 69 6d 65 6f 75 74 3b 0a 20 20  >busyTimeout;.  
29b0: 69 66 28 20 28 63 6f 75 6e 74 2b 31 29 2a 31 30  if( (count+1)*10
29c0: 30 30 20 3e 20 74 69 6d 65 6f 75 74 20 29 7b 0a  00 > timeout ){.
29d0: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
29e0: 7d 0a 20 20 73 71 6c 69 74 65 33 4f 73 2e 78 53  }.  sqlite3Os.xS
29f0: 6c 65 65 70 28 31 30 30 30 29 3b 0a 20 20 72 65  leep(1000);.  re
2a00: 74 75 72 6e 20 31 3b 0a 23 65 6e 64 69 66 0a 7d  turn 1;.#endif.}
2a10: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
2a20: 68 65 20 67 69 76 65 6e 20 62 75 73 79 20 68 61  he given busy ha
2a30: 6e 64 6c 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ndler..**.** Thi
2a40: 73 20 72 6f 75 74 69 6e 65 20 69 73 20 63 61 6c  s routine is cal
2a50: 6c 65 64 20 77 68 65 6e 20 61 6e 20 6f 70 65 72  led when an oper
2a60: 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 77 69 74  ation failed wit
2a70: 68 20 61 20 6c 6f 63 6b 2e 0a 2a 2a 20 49 66 20  h a lock..** If 
2a80: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74  this routine ret
2a90: 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  urns non-zero, t
2aa0: 68 65 20 6c 6f 63 6b 20 69 73 20 72 65 74 72 69  he lock is retri
2ab0: 65 64 2e 20 20 49 66 20 69 74 0a 2a 2a 20 72 65  ed.  If it.** re
2ac0: 74 75 72 6e 73 20 30 2c 20 74 68 65 20 6f 70 65  turns 0, the ope
2ad0: 72 61 74 69 6f 6e 20 61 62 6f 72 74 73 20 77 69  ration aborts wi
2ae0: 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 42 55 53  th an SQLITE_BUS
2af0: 59 20 65 72 72 6f 72 2e 0a 2a 2f 0a 69 6e 74 20  Y error..*/.int 
2b00: 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73  sqlite3InvokeBus
2b10: 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e  yHandler(BusyHan
2b20: 64 6c 65 72 20 2a 70 29 7b 0a 20 20 69 6e 74 20  dler *p){.  int 
2b30: 72 63 3b 0a 20 20 69 66 28 20 70 3d 3d 30 20 7c  rc;.  if( p==0 |
2b40: 7c 20 70 2d 3e 78 46 75 6e 63 3d 3d 30 20 7c 7c  | p->xFunc==0 ||
2b50: 20 70 2d 3e 6e 42 75 73 79 3c 30 20 29 20 72 65   p->nBusy<0 ) re
2b60: 74 75 72 6e 20 30 3b 0a 20 20 72 63 20 3d 20 70  turn 0;.  rc = p
2b70: 2d 3e 78 46 75 6e 63 28 70 2d 3e 70 41 72 67 2c  ->xFunc(p->pArg,
2b80: 20 70 2d 3e 6e 42 75 73 79 29 3b 0a 20 20 69 66   p->nBusy);.  if
2b90: 28 20 72 63 3d 3d 30 20 29 7b 0a 20 20 20 20 70  ( rc==0 ){.    p
2ba0: 2d 3e 6e 42 75 73 79 20 3d 20 2d 31 3b 0a 20 20  ->nBusy = -1;.  
2bb0: 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 42  }else{.    p->nB
2bc0: 75 73 79 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74  usy++;.  }.  ret
2bd0: 75 72 6e 20 72 63 3b 20 0a 7d 0a 0a 2f 2a 0a 2a  urn rc; .}../*.*
2be0: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73  * This routine s
2bf0: 65 74 73 20 74 68 65 20 62 75 73 79 20 63 61 6c  ets the busy cal
2c00: 6c 62 61 63 6b 20 66 6f 72 20 61 6e 20 53 71 6c  lback for an Sql
2c10: 69 74 65 20 64 61 74 61 62 61 73 65 20 74 6f 20  ite database to 
2c20: 74 68 65 0a 2a 2a 20 67 69 76 65 6e 20 63 61 6c  the.** given cal
2c30: 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 77  lback function w
2c40: 69 74 68 20 74 68 65 20 67 69 76 65 6e 20 61 72  ith the given ar
2c50: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  gument..*/.int s
2c60: 71 6c 69 74 65 33 5f 62 75 73 79 5f 68 61 6e 64  qlite3_busy_hand
2c70: 6c 65 72 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  ler(.  sqlite3 *
2c80: 64 62 2c 0a 20 20 69 6e 74 20 28 2a 78 42 75 73  db,.  int (*xBus
2c90: 79 29 28 76 6f 69 64 2a 2c 69 6e 74 29 2c 0a 20  y)(void*,int),. 
2ca0: 20 76 6f 69 64 20 2a 70 41 72 67 0a 29 7b 0a 20   void *pArg.){. 
2cb0: 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
2cc0: 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b 0a 20  tyCheck(db) ){. 
2cd0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
2ce0: 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 64  _MISUSE;.  }.  d
2cf0: 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 78  b->busyHandler.x
2d00: 46 75 6e 63 20 3d 20 78 42 75 73 79 3b 0a 20 20  Func = xBusy;.  
2d10: 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e  db->busyHandler.
2d20: 70 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 64  pArg = pArg;.  d
2d30: 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e  b->busyHandler.n
2d40: 42 75 73 79 20 3d 20 30 3b 0a 20 20 72 65 74 75  Busy = 0;.  retu
2d50: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
2d60: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2d70: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
2d80: 4c 4c 42 41 43 4b 0a 2f 2a 0a 2a 2a 20 54 68 69  LLBACK./*.** Thi
2d90: 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74  s routine sets t
2da0: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
2db0: 62 61 63 6b 20 66 6f 72 20 61 6e 20 53 71 6c 69  back for an Sqli
2dc0: 74 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74  te database to t
2dd0: 68 65 0a 2a 2a 20 67 69 76 65 6e 20 63 61 6c 6c  he.** given call
2de0: 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 77 69  back function wi
2df0: 74 68 20 74 68 65 20 67 69 76 65 6e 20 61 72 67  th the given arg
2e00: 75 6d 65 6e 74 2e 20 54 68 65 20 70 72 6f 67 72  ument. The progr
2e10: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77 69 6c  ess callback wil
2e20: 6c 0a 2a 2a 20 62 65 20 69 6e 76 6f 6b 65 64 20  l.** be invoked 
2e30: 65 76 65 72 79 20 6e 4f 70 73 20 6f 70 63 6f 64  every nOps opcod
2e40: 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  es..*/.void sqli
2e50: 74 65 33 5f 70 72 6f 67 72 65 73 73 5f 68 61 6e  te3_progress_han
2e60: 64 6c 65 72 28 0a 20 20 73 71 6c 69 74 65 33 20  dler(.  sqlite3 
2e70: 2a 64 62 2c 20 0a 20 20 69 6e 74 20 6e 4f 70 73  *db, .  int nOps
2e80: 2c 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72  ,.  int (*xProgr
2e90: 65 73 73 29 28 76 6f 69 64 2a 29 2c 20 0a 20 20  ess)(void*), .  
2ea0: 76 6f 69 64 20 2a 70 41 72 67 0a 29 7b 0a 20 20  void *pArg.){.  
2eb0: 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66 65  if( !sqlite3Safe
2ec0: 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b 0a 20  tyCheck(db) ){. 
2ed0: 20 20 20 69 66 28 20 6e 4f 70 73 3e 30 20 29 7b     if( nOps>0 ){
2ee0: 0a 20 20 20 20 20 20 64 62 2d 3e 78 50 72 6f 67  .      db->xProg
2ef0: 72 65 73 73 20 3d 20 78 50 72 6f 67 72 65 73 73  ress = xProgress
2f00: 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6e 50 72 6f  ;.      db->nPro
2f10: 67 72 65 73 73 4f 70 73 20 3d 20 6e 4f 70 73 3b  gressOps = nOps;
2f20: 0a 20 20 20 20 20 20 64 62 2d 3e 70 50 72 6f 67  .      db->pProg
2f30: 72 65 73 73 41 72 67 20 3d 20 70 41 72 67 3b 0a  ressArg = pArg;.
2f40: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2f50: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 3d   db->xProgress =
2f60: 20 30 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6e 50   0;.      db->nP
2f70: 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 30 3b 0a  rogressOps = 0;.
2f80: 20 20 20 20 20 20 64 62 2d 3e 70 50 72 6f 67 72        db->pProgr
2f90: 65 73 73 41 72 67 20 3d 20 30 3b 0a 20 20 20 20  essArg = 0;.    
2fa0: 7d 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a  }.  }.}.#endif..
2fb0: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  ./*.** This rout
2fc0: 69 6e 65 20 69 6e 73 74 61 6c 6c 73 20 61 20 64  ine installs a d
2fd0: 65 66 61 75 6c 74 20 62 75 73 79 20 68 61 6e 64  efault busy hand
2fe0: 6c 65 72 20 74 68 61 74 20 77 61 69 74 73 20 66  ler that waits f
2ff0: 6f 72 20 74 68 65 0a 2a 2a 20 73 70 65 63 69 66  or the.** specif
3000: 69 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 6d 69  ied number of mi
3010: 6c 6c 69 73 65 63 6f 6e 64 73 20 62 65 66 6f 72  lliseconds befor
3020: 65 20 72 65 74 75 72 6e 69 6e 67 20 30 2e 0a 2a  e returning 0..*
3030: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 75  /.int sqlite3_bu
3040: 73 79 5f 74 69 6d 65 6f 75 74 28 73 71 6c 69 74  sy_timeout(sqlit
3050: 65 33 20 2a 64 62 2c 20 69 6e 74 20 6d 73 29 7b  e3 *db, int ms){
3060: 0a 20 20 69 66 28 20 6d 73 3e 30 20 29 7b 0a 20  .  if( ms>0 ){. 
3070: 20 20 20 64 62 2d 3e 62 75 73 79 54 69 6d 65 6f     db->busyTimeo
3080: 75 74 20 3d 20 6d 73 3b 0a 20 20 20 20 73 71 6c  ut = ms;.    sql
3090: 69 74 65 33 5f 62 75 73 79 5f 68 61 6e 64 6c 65  ite3_busy_handle
30a0: 72 28 64 62 2c 20 73 71 6c 69 74 65 44 65 66 61  r(db, sqliteDefa
30b0: 75 6c 74 42 75 73 79 43 61 6c 6c 62 61 63 6b 2c  ultBusyCallback,
30c0: 20 28 76 6f 69 64 2a 29 64 62 29 3b 0a 20 20 7d   (void*)db);.  }
30d0: 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
30e0: 33 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 64  3_busy_handler(d
30f0: 62 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  b, 0, 0);.  }.  
3100: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
3110: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 61 75 73 65  ;.}../*.** Cause
3120: 20 61 6e 79 20 70 65 6e 64 69 6e 67 20 6f 70 65   any pending ope
3130: 72 61 74 69 6f 6e 20 74 6f 20 73 74 6f 70 20 61  ration to stop a
3140: 74 20 69 74 73 20 65 61 72 6c 69 65 73 74 20 6f  t its earliest o
3150: 70 70 6f 72 74 75 6e 69 74 79 2e 0a 2a 2f 0a 76  pportunity..*/.v
3160: 6f 69 64 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  oid sqlite3_inte
3170: 72 72 75 70 74 28 73 71 6c 69 74 65 33 20 2a 64  rrupt(sqlite3 *d
3180: 62 29 7b 0a 20 20 69 66 28 20 21 73 71 6c 69 74  b){.  if( !sqlit
3190: 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 64 62  e3SafetyCheck(db
31a0: 29 20 29 7b 0a 20 20 20 20 64 62 2d 3e 66 6c 61  ) ){.    db->fla
31b0: 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74  gs |= SQLITE_Int
31c0: 65 72 72 75 70 74 3b 0a 20 20 7d 0a 7d 0a 0a 2f  errupt;.  }.}../
31d0: 2a 0a 2a 2a 20 57 69 6e 64 6f 77 73 20 73 79 73  *.** Windows sys
31e0: 74 65 6d 73 20 73 68 6f 75 6c 64 20 63 61 6c 6c  tems should call
31f0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 74 6f   this routine to
3200: 20 66 72 65 65 20 6d 65 6d 6f 72 79 20 74 68 61   free memory tha
3210: 74 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64  t.** is returned
3220: 20 69 6e 20 74 68 65 20 69 6e 20 74 68 65 20 65   in the in the e
3230: 72 72 6d 73 67 20 70 61 72 61 6d 65 74 65 72 20  rrmsg parameter 
3240: 6f 66 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28  of sqlite3_open(
3250: 29 20 77 68 65 6e 0a 2a 2a 20 53 51 4c 69 74 65  ) when.** SQLite
3260: 20 69 73 20 61 20 44 4c 4c 2e 20 20 46 6f 72 20   is a DLL.  For 
3270: 73 6f 6d 65 20 72 65 61 73 6f 6e 2c 20 69 74 20  some reason, it 
3280: 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20 74 6f  does not work to
3290: 20 63 61 6c 6c 20 66 72 65 65 28 29 0a 2a 2a 20   call free().** 
32a0: 64 69 72 65 63 74 6c 79 2e 0a 2a 2a 0a 2a 2a 20  directly..**.** 
32b0: 4e 6f 74 65 20 74 68 61 74 20 77 65 20 6e 65 65  Note that we nee
32c0: 64 20 74 6f 20 63 61 6c 6c 20 66 72 65 65 28 29  d to call free()
32d0: 20 6e 6f 74 20 73 71 6c 69 74 65 46 72 65 65 28   not sqliteFree(
32e0: 29 20 68 65 72 65 2e 0a 2a 2f 0a 76 6f 69 64 20  ) here..*/.void 
32f0: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 63 68 61  sqlite3_free(cha
3300: 72 20 2a 70 29 7b 20 66 72 65 65 28 70 29 3b 20  r *p){ free(p); 
3310: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72 65 61 74 65 20  }../*.** Create 
3320: 6e 65 77 20 75 73 65 72 20 66 75 6e 63 74 69 6f  new user functio
3330: 6e 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ns..*/.int sqlit
3340: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
3350: 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  on(.  sqlite3 *d
3360: 62 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  b,.  const char 
3370: 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 0a  *zFunctionName,.
3380: 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 69 6e    int nArg,.  in
3390: 74 20 65 6e 63 2c 0a 20 20 76 6f 69 64 20 2a 70  t enc,.  void *p
33a0: 55 73 65 72 44 61 74 61 2c 0a 20 20 76 6f 69 64  UserData,.  void
33b0: 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65   (*xFunc)(sqlite
33c0: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
33d0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
33e0: 2c 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70  ,.  void (*xStep
33f0: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
3400: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
3410: 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64  alue **),.  void
3420: 20 28 2a 78 46 69 6e 61 6c 29 28 73 71 6c 69 74   (*xFinal)(sqlit
3430: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 0a 29 7b 0a  e3_context*).){.
3440: 20 20 46 75 6e 63 44 65 66 20 2a 70 3b 0a 20 20    FuncDef *p;.  
3450: 69 6e 74 20 6e 4e 61 6d 65 3b 0a 0a 20 20 69 66  int nName;..  if
3460: 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  ( sqlite3SafetyC
3470: 68 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20  heck(db) ){.    
3480: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
3490: 53 55 53 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20  SUSE;.  }.  if( 
34a0: 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 3d 3d 30  zFunctionName==0
34b0: 20 7c 7c 0a 20 20 20 20 20 20 28 78 46 75 6e 63   ||.      (xFunc
34c0: 20 26 26 20 28 78 46 69 6e 61 6c 20 7c 7c 20 78   && (xFinal || x
34d0: 53 74 65 70 29 29 20 7c 7c 20 0a 20 20 20 20 20  Step)) || .     
34e0: 20 28 21 78 46 75 6e 63 20 26 26 20 28 78 46 69   (!xFunc && (xFi
34f0: 6e 61 6c 20 26 26 20 21 78 53 74 65 70 29 29 20  nal && !xStep)) 
3500: 7c 7c 0a 20 20 20 20 20 20 28 21 78 46 75 6e 63  ||.      (!xFunc
3510: 20 26 26 20 28 21 78 46 69 6e 61 6c 20 26 26 20   && (!xFinal && 
3520: 78 53 74 65 70 29 29 20 7c 7c 0a 20 20 20 20 20  xStep)) ||.     
3530: 20 28 6e 41 72 67 3c 2d 31 20 7c 7c 20 6e 41 72   (nArg<-1 || nAr
3540: 67 3e 31 32 37 29 20 7c 7c 0a 20 20 20 20 20 20  g>127) ||.      
3550: 28 32 35 35 3c 28 6e 4e 61 6d 65 20 3d 20 73 74  (255<(nName = st
3560: 72 6c 65 6e 28 7a 46 75 6e 63 74 69 6f 6e 4e 61  rlen(zFunctionNa
3570: 6d 65 29 29 29 20 29 7b 0a 20 20 20 20 72 65 74  me))) ){.    ret
3580: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
3590: 3b 0a 20 20 7d 0a 20 20 0a 23 69 66 6e 64 65 66  ;.  }.  .#ifndef
35a0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
35b0: 31 36 0a 20 20 2f 2a 20 49 66 20 53 51 4c 49 54  16.  /* If SQLIT
35c0: 45 5f 55 54 46 31 36 20 69 73 20 73 70 65 63 69  E_UTF16 is speci
35d0: 66 69 65 64 20 61 73 20 74 68 65 20 65 6e 63 6f  fied as the enco
35e0: 64 69 6e 67 20 74 79 70 65 2c 20 74 72 61 6e 73  ding type, trans
35f0: 66 6f 72 6d 20 74 68 69 73 0a 20 20 2a 2a 20 74  form this.  ** t
3600: 6f 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f  o one of SQLITE_
3610: 55 54 46 31 36 4c 45 20 6f 72 20 53 51 4c 49 54  UTF16LE or SQLIT
3620: 45 5f 55 54 46 31 36 42 45 20 75 73 69 6e 67 20  E_UTF16BE using 
3630: 74 68 65 0a 20 20 2a 2a 20 53 51 4c 49 54 45 5f  the.  ** SQLITE_
3640: 55 54 46 31 36 4e 41 54 49 56 45 20 6d 61 63 72  UTF16NATIVE macr
3650: 6f 2e 20 53 51 4c 49 54 45 5f 55 54 46 31 36 20  o. SQLITE_UTF16 
3660: 69 73 20 6e 6f 74 20 75 73 65 64 20 69 6e 74 65  is not used inte
3670: 72 6e 61 6c 6c 79 2e 0a 20 20 2a 2a 0a 20 20 2a  rnally..  **.  *
3680: 2a 20 49 66 20 53 51 4c 49 54 45 5f 41 4e 59 20  * If SQLITE_ANY 
3690: 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 61 64  is specified, ad
36a0: 64 20 74 68 72 65 65 20 76 65 72 73 69 6f 6e 73  d three versions
36b0: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
36c0: 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 68 61 73  .  ** to the has
36d0: 68 20 74 61 62 6c 65 2e 0a 20 20 2a 2f 0a 20 20  h table..  */.  
36e0: 69 66 28 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  if( enc==SQLITE_
36f0: 55 54 46 31 36 20 29 7b 0a 20 20 20 20 65 6e 63  UTF16 ){.    enc
3700: 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e   = SQLITE_UTF16N
3710: 41 54 49 56 45 3b 0a 20 20 7d 65 6c 73 65 20 69  ATIVE;.  }else i
3720: 66 28 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 41  f( enc==SQLITE_A
3730: 4e 59 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 63  NY ){.    int rc
3740: 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
3750: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
3760: 6f 6e 28 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e  on(db, zFunction
3770: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 53 51 4c 49  Name, nArg, SQLI
3780: 54 45 5f 55 54 46 38 2c 0a 20 20 20 20 20 20 20  TE_UTF8,.       
3790: 20 20 70 55 73 65 72 44 61 74 61 2c 20 78 46 75    pUserData, xFu
37a0: 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  nc, xStep, xFina
37b0: 6c 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d  l);.    if( rc!=
37c0: 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 65 74 75  SQLITE_OK ) retu
37d0: 72 6e 20 72 63 3b 0a 20 20 20 20 72 63 20 3d 20  rn rc;.    rc = 
37e0: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
37f0: 75 6e 63 74 69 6f 6e 28 64 62 2c 20 7a 46 75 6e  unction(db, zFun
3800: 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c  ctionName, nArg,
3810: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 2c   SQLITE_UTF16LE,
3820: 0a 20 20 20 20 20 20 20 20 70 55 73 65 72 44 61  .        pUserDa
3830: 74 61 2c 20 78 46 75 6e 63 2c 20 78 53 74 65 70  ta, xFunc, xStep
3840: 2c 20 78 46 69 6e 61 6c 29 3b 0a 20 20 20 20 69  , xFinal);.    i
3850: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
3860: 20 29 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20   ) return rc;.  
3870: 20 20 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55    enc = SQLITE_U
3880: 54 46 31 36 42 45 3b 0a 20 20 7d 0a 23 65 6c 73  TF16BE;.  }.#els
3890: 65 0a 20 20 65 6e 63 20 3d 20 53 51 4c 49 54 45  e.  enc = SQLITE
38a0: 5f 55 54 46 38 3b 0a 23 65 6e 64 69 66 0a 20 20  _UTF8;.#endif.  
38b0: 0a 20 20 2f 2a 20 43 68 65 63 6b 20 69 66 20 61  .  /* Check if a
38c0: 6e 20 65 78 69 73 74 69 6e 67 20 66 75 6e 63 74  n existing funct
38d0: 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 6f 76 65  ion is being ove
38e0: 72 72 69 64 64 65 6e 20 6f 72 20 64 65 6c 65 74  rridden or delet
38f0: 65 64 2e 20 49 66 20 73 6f 2c 0a 20 20 2a 2a 20  ed. If so,.  ** 
3900: 61 6e 64 20 74 68 65 72 65 20 61 72 65 20 61 63  and there are ac
3910: 74 69 76 65 20 56 4d 73 2c 20 74 68 65 6e 20 72  tive VMs, then r
3920: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53  eturn SQLITE_BUS
3930: 59 2e 20 49 66 20 61 20 66 75 6e 63 74 69 6f 6e  Y. If a function
3940: 0a 20 20 2a 2a 20 69 73 20 62 65 69 6e 67 20 6f  .  ** is being o
3950: 76 65 72 72 69 64 64 65 6e 2f 64 65 6c 65 74 65  verridden/delete
3960: 64 20 62 75 74 20 74 68 65 72 65 20 61 72 65 20  d but there are 
3970: 6e 6f 20 61 63 74 69 76 65 20 56 4d 73 2c 20 61  no active VMs, a
3980: 6c 6c 6f 77 20 74 68 65 0a 20 20 2a 2a 20 6f 70  llow the.  ** op
3990: 65 72 61 74 69 6f 6e 20 74 6f 20 63 6f 6e 74 69  eration to conti
39a0: 6e 75 65 20 62 75 74 20 69 6e 76 61 6c 69 64 61  nue but invalida
39b0: 74 65 20 61 6c 6c 20 70 72 65 63 6f 6d 70 69 6c  te all precompil
39c0: 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20  ed statements.. 
39d0: 20 2a 2f 0a 20 20 70 20 3d 20 73 71 6c 69 74 65   */.  p = sqlite
39e0: 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 64 62  3FindFunction(db
39f0: 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c  , zFunctionName,
3a00: 20 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 65 6e   nName, nArg, en
3a10: 63 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 20 26  c, 0);.  if( p &
3a20: 26 20 70 2d 3e 69 50 72 65 66 45 6e 63 3d 3d 65  & p->iPrefEnc==e
3a30: 6e 63 20 26 26 20 70 2d 3e 6e 41 72 67 3d 3d 6e  nc && p->nArg==n
3a40: 41 72 67 20 29 7b 0a 20 20 20 20 69 66 28 20 64  Arg ){.    if( d
3a50: 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74  b->activeVdbeCnt
3a60: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
3a70: 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c 49 54  3Error(db, SQLIT
3a80: 45 5f 42 55 53 59 2c 20 0a 20 20 20 20 20 20 20  E_BUSY, .       
3a90: 20 22 55 6e 61 62 6c 65 20 74 6f 20 64 65 6c 65   "Unable to dele
3aa0: 74 65 2f 6d 6f 64 69 66 79 20 75 73 65 72 2d 66  te/modify user-f
3ab0: 75 6e 63 74 69 6f 6e 20 64 75 65 20 74 6f 20 61  unction due to a
3ac0: 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73  ctive statements
3ad0: 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ");.      return
3ae0: 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
3af0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73    }else{.      s
3b00: 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
3b10: 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
3b20: 62 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20  b);.    }.  }.. 
3b30: 20 70 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64   p = sqlite3Find
3b40: 46 75 6e 63 74 69 6f 6e 28 64 62 2c 20 7a 46 75  Function(db, zFu
3b50: 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 4e 61 6d  nctionName, nNam
3b60: 65 2c 20 6e 41 72 67 2c 20 65 6e 63 2c 20 31 29  e, nArg, enc, 1)
3b70: 3b 0a 20 20 69 66 28 20 70 3d 3d 30 20 29 20 72  ;.  if( p==0 ) r
3b80: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d  eturn SQLITE_NOM
3b90: 45 4d 3b 0a 20 20 70 2d 3e 66 6c 61 67 73 20 3d  EM;.  p->flags =
3ba0: 20 30 3b 0a 20 20 70 2d 3e 78 46 75 6e 63 20 3d   0;.  p->xFunc =
3bb0: 20 78 46 75 6e 63 3b 0a 20 20 70 2d 3e 78 53 74   xFunc;.  p->xSt
3bc0: 65 70 20 3d 20 78 53 74 65 70 3b 0a 20 20 70 2d  ep = xStep;.  p-
3bd0: 3e 78 46 69 6e 61 6c 69 7a 65 20 3d 20 78 46 69  >xFinalize = xFi
3be0: 6e 61 6c 3b 0a 20 20 70 2d 3e 70 55 73 65 72 44  nal;.  p->pUserD
3bf0: 61 74 61 20 3d 20 70 55 73 65 72 44 61 74 61 3b  ata = pUserData;
3c00: 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  .  return SQLITE
3c10: 5f 4f 4b 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53  _OK;.}.#ifndef S
3c20: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
3c30: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 72 65  .int sqlite3_cre
3c40: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 31 36 28 0a  ate_function16(.
3c50: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20    sqlite3 *db,. 
3c60: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 46 75   const void *zFu
3c70: 6e 63 74 69 6f 6e 4e 61 6d 65 2c 0a 20 20 69 6e  nctionName,.  in
3c80: 74 20 6e 41 72 67 2c 0a 20 20 69 6e 74 20 65 54  t nArg,.  int eT
3c90: 65 78 74 52 65 70 2c 0a 20 20 76 6f 69 64 20 2a  extRep,.  void *
3ca0: 70 55 73 65 72 44 61 74 61 2c 0a 20 20 76 6f 69  pUserData,.  voi
3cb0: 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74  d (*xFunc)(sqlit
3cc0: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
3cd0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
3ce0: 2c 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70  ,.  void (*xStep
3cf0: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
3d00: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
3d10: 61 6c 75 65 2a 2a 29 2c 0a 20 20 76 6f 69 64 20  alue**),.  void 
3d20: 28 2a 78 46 69 6e 61 6c 29 28 73 71 6c 69 74 65  (*xFinal)(sqlite
3d30: 33 5f 63 6f 6e 74 65 78 74 2a 29 0a 29 7b 0a 20  3_context*).){. 
3d40: 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20   int rc;.  char 
3d50: 2a 7a 46 75 6e 63 38 3b 0a 0a 20 20 69 66 28 20  *zFunc8;..  if( 
3d60: 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
3d70: 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65  ck(db) ){.    re
3d80: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
3d90: 53 45 3b 0a 20 20 7d 0a 20 20 7a 46 75 6e 63 38  SE;.  }.  zFunc8
3da0: 20 3d 20 73 71 6c 69 74 65 33 75 74 66 31 36 74   = sqlite3utf16t
3db0: 6f 38 28 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65  o8(zFunctionName
3dc0: 2c 20 2d 31 29 3b 0a 20 20 69 66 28 20 21 7a 46  , -1);.  if( !zF
3dd0: 75 6e 63 38 20 29 7b 0a 20 20 20 20 72 65 74 75  unc8 ){.    retu
3de0: 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b  rn SQLITE_NOMEM;
3df0: 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
3e00: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
3e10: 69 6f 6e 28 64 62 2c 20 7a 46 75 6e 63 38 2c 20  ion(db, zFunc8, 
3e20: 6e 41 72 67 2c 20 65 54 65 78 74 52 65 70 2c 20  nArg, eTextRep, 
3e30: 0a 20 20 20 20 20 20 70 55 73 65 72 44 61 74 61  .      pUserData
3e40: 2c 20 78 46 75 6e 63 2c 20 78 53 74 65 70 2c 20  , xFunc, xStep, 
3e50: 78 46 69 6e 61 6c 29 3b 0a 20 20 73 71 6c 69 74  xFinal);.  sqlit
3e60: 65 46 72 65 65 28 7a 46 75 6e 63 38 29 3b 0a 20  eFree(zFunc8);. 
3e70: 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 23 65   return rc;.}.#e
3e80: 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
3e90: 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a  LITE_OMIT_TRACE.
3ea0: 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61  /*.** Register a
3eb0: 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 2e   trace function.
3ec0: 20 20 54 68 65 20 70 41 72 67 20 66 72 6f 6d 20    The pArg from 
3ed0: 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79 20 72  the previously r
3ee0: 65 67 69 73 74 65 72 65 64 20 74 72 61 63 65 0a  egistered trace.
3ef0: 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20  ** is returned. 
3f00: 20 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 74   .**.** A NULL t
3f10: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 6d 65  race function me
3f20: 61 6e 73 20 74 68 61 74 20 6e 6f 20 74 72 61 63  ans that no trac
3f30: 69 6e 67 20 69 73 20 65 78 65 63 75 74 65 73 2e  ing is executes.
3f40: 20 20 41 20 6e 6f 6e 2d 4e 55 4c 4c 0a 2a 2a 20    A non-NULL.** 
3f50: 74 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74  trace is a point
3f60: 65 72 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e  er to a function
3f70: 20 74 68 61 74 20 69 73 20 69 6e 76 6f 6b 65 64   that is invoked
3f80: 20 61 74 20 74 68 65 20 73 74 61 72 74 20 6f 66   at the start of
3f90: 20 65 61 63 68 0a 2a 2a 20 53 51 4c 20 73 74 61   each.** SQL sta
3fa0: 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 76 6f 69 64 20  tement..*/.void 
3fb0: 2a 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 73  *sqlite3_trace(s
3fc0: 71 6c 69 74 65 33 20 2a 64 62 2c 20 76 6f 69 64  qlite3 *db, void
3fd0: 20 28 2a 78 54 72 61 63 65 29 28 76 6f 69 64 2a   (*xTrace)(void*
3fe0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 2c 20 76  ,const char*), v
3ff0: 6f 69 64 20 2a 70 41 72 67 29 7b 0a 20 20 76 6f  oid *pArg){.  vo
4000: 69 64 20 2a 70 4f 6c 64 20 3d 20 64 62 2d 3e 70  id *pOld = db->p
4010: 54 72 61 63 65 41 72 67 3b 0a 20 20 64 62 2d 3e  TraceArg;.  db->
4020: 78 54 72 61 63 65 20 3d 20 78 54 72 61 63 65 3b  xTrace = xTrace;
4030: 0a 20 20 64 62 2d 3e 70 54 72 61 63 65 41 72 67  .  db->pTraceArg
4040: 20 3d 20 70 41 72 67 3b 0a 20 20 72 65 74 75 72   = pArg;.  retur
4050: 6e 20 70 4f 6c 64 3b 0a 7d 0a 2f 2a 0a 2a 2a 20  n pOld;.}./*.** 
4060: 52 65 67 69 73 74 65 72 20 61 20 70 72 6f 66 69  Register a profi
4070: 6c 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  le function.  Th
4080: 65 20 70 41 72 67 20 66 72 6f 6d 20 74 68 65 20  e pArg from the 
4090: 70 72 65 76 69 6f 75 73 6c 79 20 72 65 67 69 73  previously regis
40a0: 74 65 72 65 64 20 0a 2a 2a 20 70 72 6f 66 69 6c  tered .** profil
40b0: 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 72 65  e function is re
40c0: 74 75 72 6e 65 64 2e 20 20 0a 2a 2a 0a 2a 2a 20  turned.  .**.** 
40d0: 41 20 4e 55 4c 4c 20 70 72 6f 66 69 6c 65 20 66  A NULL profile f
40e0: 75 6e 63 74 69 6f 6e 20 6d 65 61 6e 73 20 74 68  unction means th
40f0: 61 74 20 6e 6f 20 70 72 6f 66 69 6c 69 6e 67 20  at no profiling 
4100: 69 73 20 65 78 65 63 75 74 65 73 2e 20 20 41 20  is executes.  A 
4110: 6e 6f 6e 2d 4e 55 4c 4c 0a 2a 2a 20 70 72 6f 66  non-NULL.** prof
4120: 69 6c 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72  ile is a pointer
4130: 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 20 74   to a function t
4140: 68 61 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 61  hat is invoked a
4150: 74 20 74 68 65 20 63 6f 6e 63 6c 75 73 69 6f 6e  t the conclusion
4160: 20 6f 66 0a 2a 2a 20 65 61 63 68 20 53 51 4c 20   of.** each SQL 
4170: 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69  statement that i
4180: 73 20 72 75 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 2a  s run..*/.void *
4190: 73 71 6c 69 74 65 33 5f 70 72 6f 66 69 6c 65 28  sqlite3_profile(
41a0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a  .  sqlite3 *db,.
41b0: 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c    void (*xProfil
41c0: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
41d0: 68 61 72 2a 2c 73 71 6c 69 74 65 5f 75 69 6e 74  har*,sqlite_uint
41e0: 36 34 29 2c 0a 20 20 76 6f 69 64 20 2a 70 41 72  64),.  void *pAr
41f0: 67 0a 29 7b 0a 20 20 76 6f 69 64 20 2a 70 4f 6c  g.){.  void *pOl
4200: 64 20 3d 20 64 62 2d 3e 70 50 72 6f 66 69 6c 65  d = db->pProfile
4210: 41 72 67 3b 0a 20 20 64 62 2d 3e 78 50 72 6f 66  Arg;.  db->xProf
4220: 69 6c 65 20 3d 20 78 50 72 6f 66 69 6c 65 3b 0a  ile = xProfile;.
4230: 20 20 64 62 2d 3e 70 50 72 6f 66 69 6c 65 41 72    db->pProfileAr
4240: 67 20 3d 20 70 41 72 67 3b 0a 20 20 72 65 74 75  g = pArg;.  retu
4250: 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 23 65 6e 64 69  rn pOld;.}.#endi
4260: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
4270: 5f 54 52 41 43 45 20 2a 2f 0a 0a 2f 2a 2a 2a 20  _TRACE */../*** 
4280: 45 58 50 45 52 49 4d 45 4e 54 41 4c 20 2a 2a 2a  EXPERIMENTAL ***
4290: 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
42a0: 61 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65  a function to be
42b0: 20 69 6e 76 6f 6b 65 64 20 77 68 65 6e 20 61 20   invoked when a 
42c0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d  transaction comm
42d0: 65 6e 74 73 2e 0a 2a 2a 20 49 66 20 74 68 65 20  ents..** If the 
42e0: 69 6e 76 6f 6b 65 64 20 66 75 6e 63 74 69 6f 6e  invoked function
42f0: 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72   returns non-zer
4300: 6f 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6d 6d  o, then the comm
4310: 69 74 20 62 65 63 6f 6d 65 73 20 61 0a 2a 2a 20  it becomes a.** 
4320: 72 6f 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 76 6f 69  rollback..*/.voi
4330: 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6d 6d 69  d *sqlite3_commi
4340: 74 5f 68 6f 6f 6b 28 0a 20 20 73 71 6c 69 74 65  t_hook(.  sqlite
4350: 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20  3 *db,          
4360: 20 20 20 20 2f 2a 20 41 74 74 61 63 68 20 74 68      /* Attach th
4370: 65 20 68 6f 6f 6b 20 74 6f 20 74 68 69 73 20 64  e hook to this d
4380: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 69 6e 74  atabase */.  int
4390: 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28 76 6f   (*xCallback)(vo
43a0: 69 64 2a 29 2c 20 20 2f 2a 20 46 75 6e 63 74 69  id*),  /* Functi
43b0: 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65 20 6f 6e 20  on to invoke on 
43c0: 65 61 63 68 20 63 6f 6d 6d 69 74 20 2a 2f 0a 20  each commit */. 
43d0: 20 76 6f 69 64 20 2a 70 41 72 67 20 20 20 20 20   void *pArg     
43e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
43f0: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 66 75  gument to the fu
4400: 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 76  nction */.){.  v
4410: 6f 69 64 20 2a 70 4f 6c 64 20 3d 20 64 62 2d 3e  oid *pOld = db->
4420: 70 43 6f 6d 6d 69 74 41 72 67 3b 0a 20 20 64 62  pCommitArg;.  db
4430: 2d 3e 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63  ->xCommitCallbac
4440: 6b 20 3d 20 78 43 61 6c 6c 62 61 63 6b 3b 0a 20  k = xCallback;. 
4450: 20 64 62 2d 3e 70 43 6f 6d 6d 69 74 41 72 67 20   db->pCommitArg 
4460: 3d 20 70 41 72 67 3b 0a 20 20 72 65 74 75 72 6e  = pArg;.  return
4470: 20 70 4f 6c 64 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20   pOld;.}../*.** 
4480: 52 65 67 69 73 74 65 72 20 61 20 63 61 6c 6c 62  Register a callb
4490: 61 63 6b 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65  ack to be invoke
44a0: 64 20 65 61 63 68 20 74 69 6d 65 20 61 20 72 6f  d each time a ro
44b0: 77 20 69 73 20 75 70 64 61 74 65 64 2c 0a 2a 2a  w is updated,.**
44c0: 20 69 6e 73 65 72 74 65 64 20 6f 72 20 64 65 6c   inserted or del
44d0: 65 74 65 64 20 75 73 69 6e 67 20 74 68 69 73 20  eted using this 
44e0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
44f0: 69 6f 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71  ion..*/.void *sq
4500: 6c 69 74 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f  lite3_update_hoo
4510: 6b 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  k(.  sqlite3 *db
4520: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
4530: 2a 20 41 74 74 61 63 68 20 74 68 65 20 68 6f 6f  * Attach the hoo
4540: 6b 20 74 6f 20 74 68 69 73 20 64 61 74 61 62 61  k to this databa
4550: 73 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  se */.  void (*x
4560: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c  Callback)(void*,
4570: 69 6e 74 2c 63 68 61 72 20 63 6f 6e 73 74 20 2a  int,char const *
4580: 2c 63 68 61 72 20 63 6f 6e 73 74 20 2a 2c 73 71  ,char const *,sq
4590: 6c 69 74 65 5f 69 6e 74 36 34 29 2c 0a 20 20 76  lite_int64),.  v
45a0: 6f 69 64 20 2a 70 41 72 67 20 20 20 20 20 20 20  oid *pArg       
45b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
45c0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 66 75 6e 63  ment to the func
45d0: 74 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 76 6f 69  tion */.){.  voi
45e0: 64 20 2a 70 52 65 74 20 3d 20 64 62 2d 3e 70 55  d *pRet = db->pU
45f0: 70 64 61 74 65 41 72 67 3b 0a 20 20 64 62 2d 3e  pdateArg;.  db->
4600: 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  xUpdateCallback 
4610: 3d 20 78 43 61 6c 6c 62 61 63 6b 3b 0a 20 20 64  = xCallback;.  d
4620: 62 2d 3e 70 55 70 64 61 74 65 41 72 67 20 3d 20  b->pUpdateArg = 
4630: 70 41 72 67 3b 0a 20 20 72 65 74 75 72 6e 20 70  pArg;.  return p
4640: 52 65 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  Ret;.}../*.** Re
4650: 67 69 73 74 65 72 20 61 20 63 61 6c 6c 62 61 63  gister a callbac
4660: 6b 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20  k to be invoked 
4670: 65 61 63 68 20 74 69 6d 65 20 61 20 74 72 61 6e  each time a tran
4680: 73 61 63 74 69 6f 6e 20 69 73 20 72 6f 6c 6c 65  saction is rolle
4690: 64 0a 2a 2a 20 62 61 63 6b 20 62 79 20 74 68 69  d.** back by thi
46a0: 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  s database conne
46b0: 63 74 69 6f 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 2a  ction..*/.void *
46c0: 73 71 6c 69 74 65 33 5f 72 6f 6c 6c 62 61 63 6b  sqlite3_rollback
46d0: 5f 68 6f 6f 6b 28 0a 20 20 73 71 6c 69 74 65 33  _hook(.  sqlite3
46e0: 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20   *db,           
46f0: 20 20 20 2f 2a 20 41 74 74 61 63 68 20 74 68 65     /* Attach the
4700: 20 68 6f 6f 6b 20 74 6f 20 74 68 69 73 20 64 61   hook to this da
4710: 74 61 62 61 73 65 20 2a 2f 0a 20 20 76 6f 69 64  tabase */.  void
4720: 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28 76 6f   (*xCallback)(vo
4730: 69 64 2a 29 2c 20 2f 2a 20 43 61 6c 6c 62 61 63  id*), /* Callbac
4740: 6b 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  k function */.  
4750: 76 6f 69 64 20 2a 70 41 72 67 20 20 20 20 20 20  void *pArg      
4760: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
4770: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 66 75 6e  ument to the fun
4780: 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 76 6f  ction */.){.  vo
4790: 69 64 20 2a 70 52 65 74 20 3d 20 64 62 2d 3e 70  id *pRet = db->p
47a0: 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 0a 20 20 64  RollbackArg;.  d
47b0: 62 2d 3e 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c  b->xRollbackCall
47c0: 62 61 63 6b 20 3d 20 78 43 61 6c 6c 62 61 63 6b  back = xCallback
47d0: 3b 0a 20 20 64 62 2d 3e 70 52 6f 6c 6c 62 61 63  ;.  db->pRollbac
47e0: 6b 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 72  kArg = pArg;.  r
47f0: 65 74 75 72 6e 20 70 52 65 74 3b 0a 7d 0a 0a 2f  eturn pRet;.}../
4800: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
4810: 65 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63  e is called to c
4820: 72 65 61 74 65 20 61 20 63 6f 6e 6e 65 63 74 69  reate a connecti
4830: 6f 6e 20 74 6f 20 61 20 64 61 74 61 62 61 73 65  on to a database
4840: 20 42 54 72 65 65 0a 2a 2a 20 64 72 69 76 65 72   BTree.** driver
4850: 2e 20 20 49 66 20 7a 46 69 6c 65 6e 61 6d 65 20  .  If zFilename 
4860: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
4870: 20 66 69 6c 65 2c 20 74 68 65 6e 20 74 68 61 74   file, then that
4880: 20 66 69 6c 65 20 69 73 0a 2a 2a 20 6f 70 65 6e   file is.** open
4890: 65 64 20 61 6e 64 20 75 73 65 64 2e 20 20 49 66  ed and used.  If
48a0: 20 7a 46 69 6c 65 6e 61 6d 65 20 69 73 20 74 68   zFilename is th
48b0: 65 20 6d 61 67 69 63 20 6e 61 6d 65 20 22 3a 6d  e magic name ":m
48c0: 65 6d 6f 72 79 3a 22 20 74 68 65 6e 0a 2a 2a 20  emory:" then.** 
48d0: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
48e0: 73 74 6f 72 65 64 20 69 6e 20 6d 65 6d 6f 72 79  stored in memory
48f0: 20 28 61 6e 64 20 69 73 20 74 68 75 73 20 66 6f   (and is thus fo
4900: 72 67 6f 74 74 65 6e 20 61 73 20 73 6f 6f 6e 20  rgotten as soon 
4910: 61 73 0a 2a 2a 20 74 68 65 20 63 6f 6e 6e 65 63  as.** the connec
4920: 74 69 6f 6e 20 69 73 20 63 6c 6f 73 65 64 2e 29  tion is closed.)
4930: 20 20 49 66 20 7a 46 69 6c 65 6e 61 6d 65 20 69    If zFilename i
4940: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
4950: 64 61 74 61 62 61 73 65 0a 2a 2a 20 69 73 20 61  database.** is a
4960: 20 22 76 69 72 74 75 61 6c 22 20 64 61 74 61 62   "virtual" datab
4970: 61 73 65 20 66 6f 72 20 74 72 61 6e 73 69 65 6e  ase for transien
4980: 74 20 75 73 65 20 6f 6e 6c 79 20 61 6e 64 20 69  t use only and i
4990: 73 20 64 65 6c 65 74 65 64 20 61 73 0a 2a 2a 20  s deleted as.** 
49a0: 73 6f 6f 6e 20 61 73 20 74 68 65 20 63 6f 6e 6e  soon as the conn
49b0: 65 63 74 69 6f 6e 20 69 73 20 63 6c 6f 73 65 64  ection is closed
49c0: 2e 0a 2a 2a 0a 2a 2a 20 41 20 76 69 72 74 75 61  ..**.** A virtua
49d0: 6c 20 64 61 74 61 62 61 73 65 20 63 61 6e 20 62  l database can b
49e0: 65 20 65 69 74 68 65 72 20 61 20 64 69 73 6b 20  e either a disk 
49f0: 66 69 6c 65 20 28 74 68 61 74 20 69 73 20 61 75  file (that is au
4a00: 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 64  tomatically.** d
4a10: 65 6c 65 74 65 64 20 77 68 65 6e 20 74 68 65 20  eleted when the 
4a20: 66 69 6c 65 20 69 73 20 63 6c 6f 73 65 64 29 20  file is closed) 
4a30: 6f 72 20 69 74 20 61 6e 20 62 65 20 68 65 6c 64  or it an be held
4a40: 20 65 6e 74 69 72 65 6c 79 20 69 6e 20 6d 65 6d   entirely in mem
4a50: 6f 72 79 2c 0a 2a 2a 20 64 65 70 65 6e 64 69 6e  ory,.** dependin
4a60: 67 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 73 20  g on the values 
4a70: 6f 66 20 74 68 65 20 54 45 4d 50 5f 53 54 4f 52  of the TEMP_STOR
4a80: 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6d  E compile-time m
4a90: 61 63 72 6f 20 61 6e 64 20 74 68 65 0a 2a 2a 20  acro and the.** 
4aa0: 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20 76  db->temp_store v
4ab0: 61 72 69 61 62 6c 65 2c 20 61 63 63 6f 72 64 69  ariable, accordi
4ac0: 6e 67 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ng to the follow
4ad0: 69 6e 67 20 63 68 61 72 74 3a 0a 2a 2a 0a 2a 2a  ing chart:.**.**
4ae0: 20 20 20 20 20 20 20 54 45 4d 50 5f 53 54 4f 52         TEMP_STOR
4af0: 45 20 20 20 20 20 64 62 2d 3e 74 65 6d 70 5f 73  E     db->temp_s
4b00: 74 6f 72 65 20 20 20 20 20 4c 6f 63 61 74 69 6f  tore     Locatio
4b10: 6e 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 64  n of temporary d
4b20: 61 74 61 62 61 73 65 0a 2a 2a 20 20 20 20 20 20  atabase.**      
4b30: 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 20 20 20 20   ----------     
4b40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 20  --------------  
4b50: 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d     -------------
4b60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4b70: 2d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 30  -.**           0
4b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
4b90: 6e 79 20 20 20 20 20 20 20 20 20 20 20 20 20 66  ny             f
4ba0: 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ile.**          
4bb0: 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20   1              
4bc0: 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20    1             
4bd0: 20 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20   file.**        
4be0: 20 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20     1            
4bf0: 20 20 20 20 32 20 20 20 20 20 20 20 20 20 20 20      2           
4c00: 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20     memory.**    
4c10: 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20         1        
4c20: 20 20 20 20 20 20 20 20 30 20 20 20 20 20 20 20          0       
4c30: 20 20 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20 20         file.**  
4c40: 20 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20           2      
4c50: 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20            1     
4c60: 20 20 20 20 20 20 20 20 20 66 69 6c 65 0a 2a 2a           file.**
4c70: 20 20 20 20 20 20 20 20 20 20 20 32 20 20 20 20             2    
4c80: 20 20 20 20 20 20 20 20 20 20 20 20 32 20 20 20              2   
4c90: 20 20 20 20 20 20 20 20 20 20 20 6d 65 6d 6f 72             memor
4ca0: 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 32  y.**           2
4cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4cc0: 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d  0              m
4cd0: 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20 20 20  emory.**        
4ce0: 20 20 20 33 20 20 20 20 20 20 20 20 20 20 20 20     3            
4cf0: 20 20 20 61 6e 79 20 20 20 20 20 20 20 20 20 20     any          
4d00: 20 20 20 6d 65 6d 6f 72 79 0a 2a 2f 0a 69 6e 74     memory.*/.int
4d10: 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 61 63   sqlite3BtreeFac
4d20: 74 6f 72 79 28 0a 20 20 63 6f 6e 73 74 20 73 71  tory(.  const sq
4d30: 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20  lite3 *db,      
4d40: 20 20 2f 2a 20 4d 61 69 6e 20 64 61 74 61 62 61    /* Main databa
4d50: 73 65 20 77 68 65 6e 20 6f 70 65 6e 69 6e 67 20  se when opening 
4d60: 61 75 78 20 6f 74 68 65 72 77 69 73 65 20 30 20  aux otherwise 0 
4d70: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
4d80: 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 20 20 20 2f  *zFilename,    /
4d90: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 66 69  * Name of the fi
4da0: 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
4db0: 65 20 42 54 72 65 65 20 64 61 74 61 62 61 73 65  e BTree database
4dc0: 20 2a 2f 0a 20 20 69 6e 74 20 6f 6d 69 74 4a 6f   */.  int omitJo
4dd0: 75 72 6e 61 6c 2c 20 20 20 20 20 20 20 20 20 20  urnal,          
4de0: 2f 2a 20 69 66 20 54 52 55 45 20 74 68 65 6e 20  /* if TRUE then 
4df0: 64 6f 20 6e 6f 74 20 6a 6f 75 72 6e 61 6c 20 74  do not journal t
4e00: 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e  his file */.  in
4e10: 74 20 6e 43 61 63 68 65 2c 20 20 20 20 20 20 20  t nCache,       
4e20: 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 6d          /* How m
4e30: 61 6e 79 20 70 61 67 65 73 20 69 6e 20 74 68 65  any pages in the
4e40: 20 70 61 67 65 20 63 61 63 68 65 20 2a 2f 0a 20   page cache */. 
4e50: 20 42 74 72 65 65 20 2a 2a 70 70 42 74 72 65 65   Btree **ppBtree
4e60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f             /* Po
4e70: 69 6e 74 65 72 20 74 6f 20 6e 65 77 20 42 74 72  inter to new Btr
4e80: 65 65 20 6f 62 6a 65 63 74 20 77 72 69 74 74 65  ee object writte
4e90: 6e 20 68 65 72 65 20 2a 2f 0a 29 7b 0a 20 20 69  n here */.){.  i
4ea0: 6e 74 20 62 74 72 65 65 5f 66 6c 61 67 73 20 3d  nt btree_flags =
4eb0: 20 30 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20   0;.  int rc;.  
4ec0: 0a 20 20 61 73 73 65 72 74 28 20 70 70 42 74 72  .  assert( ppBtr
4ed0: 65 65 20 21 3d 20 30 29 3b 0a 20 20 69 66 28 20  ee != 0);.  if( 
4ee0: 6f 6d 69 74 4a 6f 75 72 6e 61 6c 20 29 7b 0a 20  omitJournal ){. 
4ef0: 20 20 20 62 74 72 65 65 5f 66 6c 61 67 73 20 7c     btree_flags |
4f00: 3d 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55  = BTREE_OMIT_JOU
4f10: 52 4e 41 4c 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RNAL;.  }.  if( 
4f20: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
4f30: 54 45 5f 4e 6f 52 65 61 64 6c 6f 63 6b 20 29 7b  TE_NoReadlock ){
4f40: 0a 20 20 20 20 62 74 72 65 65 5f 66 6c 61 67 73  .    btree_flags
4f50: 20 7c 3d 20 42 54 52 45 45 5f 4e 4f 5f 52 45 41   |= BTREE_NO_REA
4f60: 44 4c 4f 43 4b 3b 0a 20 20 7d 0a 20 20 69 66 28  DLOCK;.  }.  if(
4f70: 20 7a 46 69 6c 65 6e 61 6d 65 3d 3d 30 20 29 7b   zFilename==0 ){
4f80: 0a 23 69 66 20 54 45 4d 50 5f 53 54 4f 52 45 3d  .#if TEMP_STORE=
4f90: 3d 30 0a 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74  =0.    /* Do not
4fa0: 68 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  hing */.#endif.#
4fb0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
4fc0: 49 54 5f 4d 45 4d 4f 52 59 44 42 0a 23 69 66 20  IT_MEMORYDB.#if 
4fd0: 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 31 0a 20 20  TEMP_STORE==1.  
4fe0: 20 20 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f 73    if( db->temp_s
4ff0: 74 6f 72 65 3d 3d 32 20 29 20 7a 46 69 6c 65 6e  tore==2 ) zFilen
5000: 61 6d 65 20 3d 20 22 3a 6d 65 6d 6f 72 79 3a 22  ame = ":memory:"
5010: 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 54 45 4d  ;.#endif.#if TEM
5020: 50 5f 53 54 4f 52 45 3d 3d 32 0a 20 20 20 20 69  P_STORE==2.    i
5030: 66 28 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  f( db->temp_stor
5040: 65 21 3d 31 20 29 20 7a 46 69 6c 65 6e 61 6d 65  e!=1 ) zFilename
5050: 20 3d 20 22 3a 6d 65 6d 6f 72 79 3a 22 3b 0a 23   = ":memory:";.#
5060: 65 6e 64 69 66 0a 23 69 66 20 54 45 4d 50 5f 53  endif.#if TEMP_S
5070: 54 4f 52 45 3d 3d 33 0a 20 20 20 20 7a 46 69 6c  TORE==3.    zFil
5080: 65 6e 61 6d 65 20 3d 20 22 3a 6d 65 6d 6f 72 79  ename = ":memory
5090: 3a 22 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69  :";.#endif.#endi
50a0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
50b0: 5f 4d 45 4d 4f 52 59 44 42 20 2a 2f 0a 20 20 7d  _MEMORYDB */.  }
50c0: 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
50d0: 42 74 72 65 65 4f 70 65 6e 28 7a 46 69 6c 65 6e  BtreeOpen(zFilen
50e0: 61 6d 65 2c 20 28 73 71 6c 69 74 65 33 20 2a 29  ame, (sqlite3 *)
50f0: 64 62 2c 20 70 70 42 74 72 65 65 2c 20 62 74 72  db, ppBtree, btr
5100: 65 65 5f 66 6c 61 67 73 29 3b 0a 20 20 69 66 28  ee_flags);.  if(
5110: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
5120: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72  {.    sqlite3Btr
5130: 65 65 53 65 74 42 75 73 79 48 61 6e 64 6c 65 72  eeSetBusyHandler
5140: 28 2a 70 70 42 74 72 65 65 2c 20 28 76 6f 69 64  (*ppBtree, (void
5150: 2a 29 26 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c  *)&db->busyHandl
5160: 65 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  er);.    sqlite3
5170: 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a  BtreeSetCacheSiz
5180: 65 28 2a 70 70 42 74 72 65 65 2c 20 6e 43 61 63  e(*ppBtree, nCac
5190: 68 65 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  he);.  }.  retur
51a0: 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  n rc;.}../*.** R
51b0: 65 74 75 72 6e 20 55 54 46 2d 38 20 65 6e 63 6f  eturn UTF-8 enco
51c0: 64 65 64 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67  ded English lang
51d0: 75 61 67 65 20 65 78 70 6c 61 6e 61 74 69 6f 6e  uage explanation
51e0: 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63   of the most rec
51f0: 65 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 0a 2a 2f  ent.** error..*/
5200: 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
5210: 69 74 65 33 5f 65 72 72 6d 73 67 28 73 71 6c 69  ite3_errmsg(sqli
5220: 74 65 33 20 2a 64 62 29 7b 0a 20 20 63 6f 6e 73  te3 *db){.  cons
5230: 74 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28  t char *z;.  if(
5240: 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 6d   sqlite3Tsd()->m
5250: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20  allocFailed ){. 
5260: 20 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65     return sqlite
5270: 33 45 72 72 53 74 72 28 53 51 4c 49 54 45 5f 4e  3ErrStr(SQLITE_N
5280: 4f 4d 45 4d 29 3b 0a 20 20 7d 0a 20 20 69 66 28  OMEM);.  }.  if(
5290: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
52a0: 65 63 6b 28 64 62 29 20 7c 7c 20 64 62 2d 3e 65  eck(db) || db->e
52b0: 72 72 43 6f 64 65 3d 3d 53 51 4c 49 54 45 5f 4d  rrCode==SQLITE_M
52c0: 49 53 55 53 45 20 29 7b 0a 20 20 20 20 72 65 74  ISUSE ){.    ret
52d0: 75 72 6e 20 73 71 6c 69 74 65 33 45 72 72 53 74  urn sqlite3ErrSt
52e0: 72 28 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 29  r(SQLITE_MISUSE)
52f0: 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 28 63 68 61  ;.  }.  z = (cha
5300: 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  r*)sqlite3_value
5310: 5f 74 65 78 74 28 64 62 2d 3e 70 45 72 72 29 3b  _text(db->pErr);
5320: 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20  .  if( z==0 ){. 
5330: 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 45 72     z = sqlite3Er
5340: 72 53 74 72 28 64 62 2d 3e 65 72 72 43 6f 64 65  rStr(db->errCode
5350: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
5360: 7a 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  z;.}..#ifndef SQ
5370: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
5380: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 55 54 46  /*.** Return UTF
5390: 2d 31 36 20 65 6e 63 6f 64 65 64 20 45 6e 67 6c  -16 encoded Engl
53a0: 69 73 68 20 6c 61 6e 67 75 61 67 65 20 65 78 70  ish language exp
53b0: 6c 61 6e 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  lanation of the 
53c0: 6d 6f 73 74 20 72 65 63 65 6e 74 0a 2a 2a 20 65  most recent.** e
53d0: 72 72 6f 72 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 76  rror..*/.const v
53e0: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 65 72 72  oid *sqlite3_err
53f0: 6d 73 67 31 36 28 73 71 6c 69 74 65 33 20 2a 64  msg16(sqlite3 *d
5400: 62 29 7b 0a 20 20 2f 2a 20 42 65 63 61 75 73 65  b){.  /* Because
5410: 20 61 6c 6c 20 74 68 65 20 63 68 61 72 61 63 74   all the charact
5420: 65 72 73 20 69 6e 20 74 68 65 20 73 74 72 69 6e  ers in the strin
5430: 67 20 61 72 65 20 69 6e 20 74 68 65 20 75 6e 69  g are in the uni
5440: 63 6f 64 65 0a 20 20 2a 2a 20 72 61 6e 67 65 20  code.  ** range 
5450: 30 78 30 30 2d 30 78 46 46 2c 20 69 66 20 77 65  0x00-0xFF, if we
5460: 20 70 61 64 20 74 68 65 20 62 69 67 2d 65 6e 64   pad the big-end
5470: 69 61 6e 20 73 74 72 69 6e 67 20 77 69 74 68 20  ian string with 
5480: 61 20 0a 20 20 2a 2a 20 7a 65 72 6f 20 62 79 74  a .  ** zero byt
5490: 65 2c 20 77 65 20 63 61 6e 20 6f 62 74 61 69 6e  e, we can obtain
54a0: 20 74 68 65 20 6c 69 74 74 6c 65 2d 65 6e 64 69   the little-endi
54b0: 61 6e 20 73 74 72 69 6e 67 20 77 69 74 68 0a 20  an string with. 
54c0: 20 2a 2a 20 26 62 69 67 5f 65 6e 64 69 61 6e 5b   ** &big_endian[
54d0: 31 5d 2e 0a 20 20 2a 2f 0a 20 20 73 74 61 74 69  1]..  */.  stati
54e0: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 6f 75 74  c const char out
54f0: 4f 66 4d 65 6d 42 65 5b 5d 20 3d 20 7b 0a 20 20  OfMemBe[] = {.  
5500: 20 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27 75 27    0, 'o', 0, 'u'
5510: 2c 20 30 2c 20 27 74 27 2c 20 30 2c 20 27 20 27  , 0, 't', 0, ' '
5520: 2c 20 0a 20 20 20 20 30 2c 20 27 6f 27 2c 20 30  , .    0, 'o', 0
5530: 2c 20 27 66 27 2c 20 30 2c 20 27 20 27 2c 20 0a  , 'f', 0, ' ', .
5540: 20 20 20 20 30 2c 20 27 6d 27 2c 20 30 2c 20 27      0, 'm', 0, '
5550: 65 27 2c 20 30 2c 20 27 6d 27 2c 20 30 2c 20 27  e', 0, 'm', 0, '
5560: 6f 27 2c 20 30 2c 20 27 72 27 2c 20 30 2c 20 27  o', 0, 'r', 0, '
5570: 79 27 2c 20 30 2c 20 30 2c 20 30 0a 20 20 7d 3b  y', 0, 0, 0.  };
5580: 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
5590: 63 68 61 72 20 6d 69 73 75 73 65 42 65 20 5b 5d  char misuseBe []
55a0: 20 3d 20 7b 0a 20 20 20 20 30 2c 20 27 6c 27 2c   = {.    0, 'l',
55b0: 20 30 2c 20 27 69 27 2c 20 30 2c 20 27 62 27 2c   0, 'i', 0, 'b',
55c0: 20 30 2c 20 27 72 27 2c 20 30 2c 20 27 61 27 2c   0, 'r', 0, 'a',
55d0: 20 30 2c 20 27 72 27 2c 20 30 2c 20 27 79 27 2c   0, 'r', 0, 'y',
55e0: 20 30 2c 20 27 20 27 2c 20 0a 20 20 20 20 30 2c   0, ' ', .    0,
55f0: 20 27 72 27 2c 20 30 2c 20 27 6f 27 2c 20 30 2c   'r', 0, 'o', 0,
5600: 20 27 75 27 2c 20 30 2c 20 27 74 27 2c 20 30 2c   'u', 0, 't', 0,
5610: 20 27 69 27 2c 20 30 2c 20 27 6e 27 2c 20 30 2c   'i', 0, 'n', 0,
5620: 20 27 65 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20   'e', 0, ' ', . 
5630: 20 20 20 30 2c 20 27 63 27 2c 20 30 2c 20 27 61     0, 'c', 0, 'a
5640: 27 2c 20 30 2c 20 27 6c 27 2c 20 30 2c 20 27 6c  ', 0, 'l', 0, 'l
5650: 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20 27 64  ', 0, 'e', 0, 'd
5660: 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20 20 20  ', 0, ' ', .    
5670: 30 2c 20 27 6f 27 2c 20 30 2c 20 27 75 27 2c 20  0, 'o', 0, 'u', 
5680: 30 2c 20 27 74 27 2c 20 30 2c 20 27 20 27 2c 20  0, 't', 0, ' ', 
5690: 0a 20 20 20 20 30 2c 20 27 6f 27 2c 20 30 2c 20  .    0, 'o', 0, 
56a0: 27 66 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20  'f', 0, ' ', .  
56b0: 20 20 30 2c 20 27 73 27 2c 20 30 2c 20 27 65 27    0, 's', 0, 'e'
56c0: 2c 20 30 2c 20 27 71 27 2c 20 30 2c 20 27 75 27  , 0, 'q', 0, 'u'
56d0: 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20 27 6e 27  , 0, 'e', 0, 'n'
56e0: 2c 20 30 2c 20 27 63 27 2c 20 30 2c 20 27 65 27  , 0, 'c', 0, 'e'
56f0: 2c 20 30 2c 20 30 2c 20 30 0a 20 20 7d 3b 0a 0a  , 0, 0, 0.  };..
5700: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 3b    const void *z;
5710: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 73  .  if( sqlite3Ts
5720: 64 28 29 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  d()->mallocFaile
5730: 64 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  d ){.    return 
5740: 28 76 6f 69 64 20 2a 29 28 26 6f 75 74 4f 66 4d  (void *)(&outOfM
5750: 65 6d 42 65 5b 53 51 4c 49 54 45 5f 55 54 46 31  emBe[SQLITE_UTF1
5760: 36 4e 41 54 49 56 45 3d 3d 53 51 4c 49 54 45 5f  6NATIVE==SQLITE_
5770: 55 54 46 31 36 4c 45 3f 31 3a 30 5d 29 3b 0a 20  UTF16LE?1:0]);. 
5780: 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
5790: 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29 20  SafetyCheck(db) 
57a0: 7c 7c 20 64 62 2d 3e 65 72 72 43 6f 64 65 3d 3d  || db->errCode==
57b0: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 29 7b  SQLITE_MISUSE ){
57c0: 0a 20 20 20 20 72 65 74 75 72 6e 20 28 76 6f 69  .    return (voi
57d0: 64 20 2a 29 28 26 6d 69 73 75 73 65 42 65 5b 53  d *)(&misuseBe[S
57e0: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
57f0: 45 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  E==SQLITE_UTF16L
5800: 45 3f 31 3a 30 5d 29 3b 0a 20 20 7d 0a 20 20 7a  E?1:0]);.  }.  z
5810: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
5820: 5f 74 65 78 74 31 36 28 64 62 2d 3e 70 45 72 72  _text16(db->pErr
5830: 29 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 7b  );.  if( z==0 ){
5840: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75  .    sqlite3Valu
5850: 65 53 65 74 53 74 72 28 64 62 2d 3e 70 45 72 72  eSetStr(db->pErr
5860: 2c 20 2d 31 2c 20 73 71 6c 69 74 65 33 45 72 72  , -1, sqlite3Err
5870: 53 74 72 28 64 62 2d 3e 65 72 72 43 6f 64 65 29  Str(db->errCode)
5880: 2c 0a 20 20 20 20 20 20 20 20 20 53 51 4c 49 54  ,.         SQLIT
5890: 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53  E_UTF8, SQLITE_S
58a0: 54 41 54 49 43 29 3b 0a 20 20 20 20 7a 20 3d 20  TATIC);.    z = 
58b0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
58c0: 78 74 31 36 28 64 62 2d 3e 70 45 72 72 29 3b 0a  xt16(db->pErr);.
58d0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a    }.  return z;.
58e0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
58f0: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f  TE_OMIT_UTF16 */
5900: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
5910: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 65  he most recent e
5920: 72 72 6f 72 20 63 6f 64 65 20 67 65 6e 65 72 61  rror code genera
5930: 74 65 64 20 62 79 20 61 6e 20 53 51 4c 69 74 65  ted by an SQLite
5940: 20 72 6f 75 74 69 6e 65 2e 20 49 66 20 4e 55 4c   routine. If NUL
5950: 4c 20 69 73 0a 2a 2a 20 70 61 73 73 65 64 20 74  L is.** passed t
5960: 6f 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2c  o this function,
5970: 20 77 65 20 61 73 73 75 6d 65 20 61 20 6d 61 6c   we assume a mal
5980: 6c 6f 63 28 29 20 66 61 69 6c 65 64 20 64 75 72  loc() failed dur
5990: 69 6e 67 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  ing sqlite3_open
59a0: 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ()..*/.int sqlit
59b0: 65 33 5f 65 72 72 63 6f 64 65 28 73 71 6c 69 74  e3_errcode(sqlit
59c0: 65 33 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 21  e3 *db){.  if( !
59d0: 64 62 20 7c 7c 20 73 71 6c 69 74 65 33 54 73 64  db || sqlite3Tsd
59e0: 28 29 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  ()->mallocFailed
59f0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
5a00: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d  QLITE_NOMEM;.  }
5a10: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
5a20: 66 65 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b  fetyCheck(db) ){
5a30: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
5a40: 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20  TE_MISUSE;.  }. 
5a50: 20 72 65 74 75 72 6e 20 64 62 2d 3e 65 72 72 43   return db->errC
5a60: 6f 64 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68  ode;.}../*.** Th
5a70: 69 73 20 72 6f 75 74 69 6e 65 20 64 6f 65 73 20  is routine does 
5a80: 74 68 65 20 77 6f 72 6b 20 6f 66 20 6f 70 65 6e  the work of open
5a90: 69 6e 67 20 61 20 64 61 74 61 62 61 73 65 20 6f  ing a database o
5aa0: 6e 20 62 65 68 61 6c 66 20 6f 66 0a 2a 2a 20 73  n behalf of.** s
5ab0: 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29 20 61 6e  qlite3_open() an
5ac0: 64 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36  d sqlite3_open16
5ad0: 28 29 2e 20 54 68 65 20 64 61 74 61 62 61 73 65  (). The database
5ae0: 20 66 69 6c 65 6e 61 6d 65 20 22 7a 46 69 6c 65   filename "zFile
5af0: 6e 61 6d 65 22 20 20 0a 2a 2a 20 69 73 20 55 54  name"  .** is UT
5b00: 46 2d 38 20 65 6e 63 6f 64 65 64 2e 0a 2a 2f 0a  F-8 encoded..*/.
5b10: 73 74 61 74 69 63 20 69 6e 74 20 6f 70 65 6e 44  static int openD
5b20: 61 74 61 62 61 73 65 28 0a 20 20 63 6f 6e 73 74  atabase(.  const
5b30: 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65   char *zFilename
5b40: 2c 20 2f 2a 20 44 61 74 61 62 61 73 65 20 66 69  , /* Database fi
5b50: 6c 65 6e 61 6d 65 20 55 54 46 2d 38 20 65 6e 63  lename UTF-8 enc
5b60: 6f 64 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65  oded */.  sqlite
5b70: 33 20 2a 2a 70 70 44 62 20 20 20 20 20 20 20 20  3 **ppDb        
5b80: 20 2f 2a 20 4f 55 54 3a 20 52 65 74 75 72 6e 65   /* OUT: Returne
5b90: 64 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  d database handl
5ba0: 65 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65  e */.){.  sqlite
5bb0: 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b  3 *db;.  int rc;
5bc0: 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c  .  CollSeq *pCol
5bd0: 6c 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 21 73  l;..  assert( !s
5be0: 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 6d 61 6c  qlite3Tsd()->mal
5bf0: 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 0a 20 20  locFailed );..  
5c00: 2f 2a 20 41 6c 6c 6f 63 61 74 65 20 74 68 65 20  /* Allocate the 
5c10: 73 71 6c 69 74 65 20 64 61 74 61 20 73 74 72 75  sqlite data stru
5c20: 63 74 75 72 65 20 2a 2f 0a 20 20 64 62 20 3d 20  cture */.  db = 
5c30: 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 20 73 69  sqliteMalloc( si
5c40: 7a 65 6f 66 28 73 71 6c 69 74 65 33 29 20 29 3b  zeof(sqlite3) );
5c50: 0a 20 20 69 66 28 20 64 62 3d 3d 30 20 29 20 67  .  if( db==0 ) g
5c60: 6f 74 6f 20 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a  oto opendb_out;.
5c70: 20 20 64 62 2d 3e 70 72 69 6f 72 4e 65 77 52 6f    db->priorNewRo
5c80: 77 69 64 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 6d  wid = 0;.  db->m
5c90: 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41  agic = SQLITE_MA
5ca0: 47 49 43 5f 42 55 53 59 3b 0a 20 20 64 62 2d 3e  GIC_BUSY;.  db->
5cb0: 6e 44 62 20 3d 20 32 3b 0a 20 20 64 62 2d 3e 61  nDb = 2;.  db->a
5cc0: 44 62 20 3d 20 64 62 2d 3e 61 44 62 53 74 61 74  Db = db->aDbStat
5cd0: 69 63 3b 0a 20 20 64 62 2d 3e 65 6e 63 20 3d 20  ic;.  db->enc = 
5ce0: 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20 64  SQLITE_UTF8;.  d
5cf0: 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
5d00: 31 3b 0a 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c  1;.  db->flags |
5d10: 3d 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f  = SQLITE_ShortCo
5d20: 6c 4e 61 6d 65 73 3b 0a 20 20 73 71 6c 69 74 65  lNames;.  sqlite
5d30: 33 48 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61  3HashInit(&db->a
5d40: 46 75 6e 63 2c 20 53 51 4c 49 54 45 5f 48 41 53  Func, SQLITE_HAS
5d50: 48 5f 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20  H_STRING, 0);.  
5d60: 73 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28  sqlite3HashInit(
5d70: 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 2c 20 53  &db->aCollSeq, S
5d80: 51 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e  QLITE_HASH_STRIN
5d90: 47 2c 20 30 29 3b 0a 0a 23 69 66 20 30 0a 20 20  G, 0);..#if 0.  
5da0: 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e  for(i=0; i<db->n
5db0: 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71  Db; i++){.    sq
5dc0: 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28 26 64  lite3HashInit(&d
5dd0: 62 2d 3e 61 44 62 5b 69 5d 2e 74 62 6c 48 61 73  b->aDb[i].tblHas
5de0: 68 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53  h, SQLITE_HASH_S
5df0: 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20 20 20 73  TRING, 0);.    s
5e00: 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28 26  qlite3HashInit(&
5e10: 64 62 2d 3e 61 44 62 5b 69 5d 2e 69 64 78 48 61  db->aDb[i].idxHa
5e20: 73 68 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f  sh, SQLITE_HASH_
5e30: 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20 20 20  STRING, 0);.    
5e40: 73 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28  sqlite3HashInit(
5e50: 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 74 72 69 67  &db->aDb[i].trig
5e60: 48 61 73 68 2c 20 53 51 4c 49 54 45 5f 48 41 53  Hash, SQLITE_HAS
5e70: 48 5f 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20  H_STRING, 0);.  
5e80: 20 20 73 71 6c 69 74 65 33 48 61 73 68 49 6e 69    sqlite3HashIni
5e90: 74 28 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 61 46  t(&db->aDb[i].aF
5ea0: 4b 65 79 2c 20 53 51 4c 49 54 45 5f 48 41 53 48  Key, SQLITE_HASH
5eb0: 5f 53 54 52 49 4e 47 2c 20 31 29 3b 0a 20 20 7d  _STRING, 1);.  }
5ec0: 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 2f 2a 20  .#endif.  .  /* 
5ed0: 41 64 64 20 74 68 65 20 64 65 66 61 75 6c 74 20  Add the default 
5ee0: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
5ef0: 63 65 20 42 49 4e 41 52 59 2e 20 42 49 4e 41 52  ce BINARY. BINAR
5f00: 59 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68  Y works for both
5f10: 20 55 54 46 2d 38 0a 20 20 2a 2a 20 61 6e 64 20   UTF-8.  ** and 
5f20: 55 54 46 2d 31 36 2c 20 73 6f 20 61 64 64 20 61  UTF-16, so add a
5f30: 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 65 61 63   version for eac
5f40: 68 20 74 6f 20 61 76 6f 69 64 20 61 6e 79 20 75  h to avoid any u
5f50: 6e 6e 65 63 65 73 73 61 72 79 0a 20 20 2a 2a 20  nnecessary.  ** 
5f60: 63 6f 6e 76 65 72 73 69 6f 6e 73 2e 20 54 68 65  conversions. The
5f70: 20 6f 6e 6c 79 20 65 72 72 6f 72 20 74 68 61 74   only error that
5f80: 20 63 61 6e 20 6f 63 63 75 72 20 68 65 72 65 20   can occur here 
5f90: 69 73 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61  is a malloc() fa
5fa0: 69 6c 75 72 65 2e 0a 20 20 2a 2f 0a 20 20 69 66  ilure..  */.  if
5fb0: 28 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  ( sqlite3_create
5fc0: 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22  _collation(db, "
5fd0: 42 49 4e 41 52 59 22 2c 20 53 51 4c 49 54 45 5f  BINARY", SQLITE_
5fe0: 55 54 46 38 2c 20 30 2c 62 69 6e 43 6f 6c 6c 46  UTF8, 0,binCollF
5ff0: 75 6e 63 29 20 7c 7c 0a 20 20 20 20 20 20 73 71  unc) ||.      sq
6000: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c  lite3_create_col
6010: 6c 61 74 69 6f 6e 28 64 62 2c 20 22 42 49 4e 41  lation(db, "BINA
6020: 52 59 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  RY", SQLITE_UTF1
6030: 36 2c 20 30 2c 62 69 6e 43 6f 6c 6c 46 75 6e 63  6, 0,binCollFunc
6040: 29 20 7c 7c 0a 20 20 20 20 20 20 28 64 62 2d 3e  ) ||.      (db->
6050: 70 44 66 6c 74 43 6f 6c 6c 20 3d 20 73 71 6c 69  pDfltColl = sqli
6060: 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 64  te3FindCollSeq(d
6070: 62 2c 20 64 62 2d 3e 65 6e 63 2c 20 22 42 49 4e  b, db->enc, "BIN
6080: 41 52 59 22 2c 20 36 2c 20 30 29 29 3d 3d 30 20  ARY", 6, 0))==0 
6090: 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 73 71 6c  .  ){.    /* sql
60a0: 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c  ite3_create_coll
60b0: 61 74 69 6f 6e 28 29 20 69 73 20 61 6e 20 65 78  ation() is an ex
60c0: 74 65 72 6e 61 6c 20 41 50 49 2e 20 53 6f 20 74  ternal API. So t
60d0: 68 65 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  he mallocFailed 
60e0: 66 6c 61 67 0a 20 20 20 20 2a 2a 20 77 69 6c 6c  flag.    ** will
60f0: 20 68 61 76 65 20 62 65 65 6e 20 63 6c 65 61 72   have been clear
6100: 65 64 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e  ed before return
6110: 69 6e 67 2e 20 53 6f 20 73 65 74 20 69 74 20 65  ing. So set it e
6120: 78 70 6c 69 63 69 74 6c 79 20 68 65 72 65 2e 0a  xplicitly here..
6130: 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74      */.    sqlit
6140: 65 33 54 73 64 28 29 2d 3e 6d 61 6c 6c 6f 63 46  e3Tsd()->mallocF
6150: 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 64  ailed = 1;.    d
6160: 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54  b->magic = SQLIT
6170: 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 3b 0a  E_MAGIC_CLOSED;.
6180: 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f      goto opendb_
6190: 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41  out;.  }..  /* A
61a0: 6c 73 6f 20 61 64 64 20 61 20 55 54 46 2d 38 20  lso add a UTF-8 
61b0: 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69 76 65  case-insensitive
61c0: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
61d0: 6e 63 65 2e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  nce. */.  sqlite
61e0: 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69  3_create_collati
61f0: 6f 6e 28 64 62 2c 20 22 4e 4f 43 41 53 45 22 2c  on(db, "NOCASE",
6200: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c   SQLITE_UTF8, 0,
6210: 20 6e 6f 63 61 73 65 43 6f 6c 6c 61 74 69 6e 67   nocaseCollating
6220: 46 75 6e 63 29 3b 0a 0a 20 20 2f 2a 20 53 65 74  Func);..  /* Set
6230: 20 66 6c 61 67 73 20 6f 6e 20 74 68 65 20 62 75   flags on the bu
6240: 69 6c 74 2d 69 6e 20 63 6f 6c 6c 61 74 69 6e 67  ilt-in collating
6250: 20 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20   sequences */.  
6260: 64 62 2d 3e 70 44 66 6c 74 43 6f 6c 6c 2d 3e 74  db->pDfltColl->t
6270: 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 43 4f 4c  ype = SQLITE_COL
6280: 4c 5f 42 49 4e 41 52 59 3b 0a 20 20 70 43 6f 6c  L_BINARY;.  pCol
6290: 6c 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 43  l = sqlite3FindC
62a0: 6f 6c 6c 53 65 71 28 64 62 2c 20 53 51 4c 49 54  ollSeq(db, SQLIT
62b0: 45 5f 55 54 46 38 2c 20 22 4e 4f 43 41 53 45 22  E_UTF8, "NOCASE"
62c0: 2c 20 36 2c 20 30 29 3b 0a 20 20 69 66 28 20 70  , 6, 0);.  if( p
62d0: 43 6f 6c 6c 20 29 7b 0a 20 20 20 20 70 43 6f 6c  Coll ){.    pCol
62e0: 6c 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45  l->type = SQLITE
62f0: 5f 43 4f 4c 4c 5f 4e 4f 43 41 53 45 3b 0a 20 20  _COLL_NOCASE;.  
6300: 7d 0a 0a 20 20 2f 2a 20 4f 70 65 6e 20 74 68 65  }..  /* Open the
6310: 20 62 61 63 6b 65 6e 64 20 64 61 74 61 62 61 73   backend databas
6320: 65 20 64 72 69 76 65 72 20 2a 2f 0a 20 20 72 63  e driver */.  rc
6330: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46   = sqlite3BtreeF
6340: 61 63 74 6f 72 79 28 64 62 2c 20 7a 46 69 6c 65  actory(db, zFile
6350: 6e 61 6d 65 2c 20 30 2c 20 4d 41 58 5f 50 41 47  name, 0, MAX_PAG
6360: 45 53 2c 20 26 64 62 2d 3e 61 44 62 5b 30 5d 2e  ES, &db->aDb[0].
6370: 70 42 74 29 3b 0a 20 20 69 66 28 20 72 63 21 3d  pBt);.  if( rc!=
6380: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
6390: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62   sqlite3Error(db
63a0: 2c 20 72 63 2c 20 30 29 3b 0a 20 20 20 20 64 62  , rc, 0);.    db
63b0: 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45  ->magic = SQLITE
63c0: 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 3b 0a 20  _MAGIC_CLOSED;. 
63d0: 20 20 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f 6f     goto opendb_o
63e0: 75 74 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 61 44  ut;.  }.  db->aD
63f0: 62 5b 30 5d 2e 70 53 63 68 65 6d 61 20 3d 20 73  b[0].pSchema = s
6400: 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28  qlite3SchemaGet(
6410: 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42 74 29 3b  db->aDb[0].pBt);
6420: 0a 20 20 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 53  .  db->aDb[1].pS
6430: 63 68 65 6d 61 20 3d 20 73 71 6c 69 74 65 33 53  chema = sqlite3S
6440: 63 68 65 6d 61 47 65 74 28 30 29 3b 0a 0a 20 20  chemaGet(0);..  
6450: 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 73  /* The default s
6460: 61 66 65 74 79 5f 6c 65 76 65 6c 20 66 6f 72 20  afety_level for 
6470: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
6480: 65 20 69 73 20 27 66 75 6c 6c 27 3b 20 66 6f 72  e is 'full'; for
6490: 20 74 68 65 20 74 65 6d 70 0a 20 20 2a 2a 20 64   the temp.  ** d
64a0: 61 74 61 62 61 73 65 20 69 74 20 69 73 20 27 4e  atabase it is 'N
64b0: 4f 4e 45 27 2e 20 54 68 69 73 20 6d 61 74 63 68  ONE'. This match
64c0: 65 73 20 74 68 65 20 70 61 67 65 72 20 6c 61 79  es the pager lay
64d0: 65 72 20 64 65 66 61 75 6c 74 73 2e 20 20 0a 20  er defaults.  . 
64e0: 20 2a 2f 0a 20 20 64 62 2d 3e 61 44 62 5b 30 5d   */.  db->aDb[0]
64f0: 2e 7a 4e 61 6d 65 20 3d 20 22 6d 61 69 6e 22 3b  .zName = "main";
6500: 0a 20 20 64 62 2d 3e 61 44 62 5b 30 5d 2e 73 61  .  db->aDb[0].sa
6510: 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 33 3b 0a  fety_level = 3;.
6520: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
6530: 4d 49 54 5f 54 45 4d 50 44 42 0a 20 20 64 62 2d  MIT_TEMPDB.  db-
6540: 3e 61 44 62 5b 31 5d 2e 7a 4e 61 6d 65 20 3d 20  >aDb[1].zName = 
6550: 22 74 65 6d 70 22 3b 0a 20 20 64 62 2d 3e 61 44  "temp";.  db->aD
6560: 62 5b 31 5d 2e 73 61 66 65 74 79 5f 6c 65 76 65  b[1].safety_leve
6570: 6c 20 3d 20 31 3b 0a 23 65 6e 64 69 66 0a 0a 20  l = 1;.#endif.. 
6580: 20 2f 2a 20 52 65 67 69 73 74 65 72 20 61 6c 6c   /* Register all
6590: 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69   built-in functi
65a0: 6f 6e 73 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20  ons, but do not 
65b0: 61 74 74 65 6d 70 74 20 74 6f 20 72 65 61 64 20  attempt to read 
65c0: 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73  the.  ** databas
65d0: 65 20 73 63 68 65 6d 61 20 79 65 74 2e 20 54 68  e schema yet. Th
65e0: 69 73 20 69 73 20 64 65 6c 61 79 65 64 20 75 6e  is is delayed un
65f0: 74 69 6c 20 74 68 65 20 66 69 72 73 74 20 74 69  til the first ti
6600: 6d 65 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  me the database.
6610: 20 20 2a 2a 20 69 73 20 61 63 63 65 73 73 65 64    ** is accessed
6620: 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
6630: 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46  RegisterBuiltinF
6640: 75 6e 63 74 69 6f 6e 73 28 64 62 29 3b 0a 20 20  unctions(db);.  
6650: 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c  sqlite3Error(db,
6660: 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 30 29 3b 0a   SQLITE_OK, 0);.
6670: 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51    db->magic = SQ
6680: 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 3b  LITE_MAGIC_OPEN;
6690: 0a 0a 6f 70 65 6e 64 62 5f 6f 75 74 3a 0a 20 20  ..opendb_out:.  
66a0: 69 66 28 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  if( SQLITE_NOMEM
66b0: 3d 3d 28 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  ==(rc = sqlite3_
66c0: 65 72 72 63 6f 64 65 28 64 62 29 29 20 29 7b 0a  errcode(db)) ){.
66d0: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73      sqlite3_clos
66e0: 65 28 64 62 29 3b 0a 20 20 20 20 64 62 20 3d 20  e(db);.    db = 
66f0: 30 3b 0a 20 20 7d 0a 20 20 2a 70 70 44 62 20 3d  0;.  }.  *ppDb =
6700: 20 64 62 3b 0a 20 20 73 71 6c 69 74 65 33 4d 61   db;.  sqlite3Ma
6710: 6c 6c 6f 63 43 6c 65 61 72 46 61 69 6c 65 64 28  llocClearFailed(
6720: 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a  );.  return rc;.
6730: 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  }../*.** Open a 
6740: 6e 65 77 20 64 61 74 61 62 61 73 65 20 68 61 6e  new database han
6750: 64 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  dle..*/.int sqli
6760: 74 65 33 5f 6f 70 65 6e 28 0a 20 20 63 6f 6e 73  te3_open(.  cons
6770: 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d  t char *zFilenam
6780: 65 2c 20 0a 20 20 73 71 6c 69 74 65 33 20 2a 2a  e, .  sqlite3 **
6790: 70 70 44 62 20 0a 29 7b 0a 20 20 72 65 74 75 72  ppDb .){.  retur
67a0: 6e 20 6f 70 65 6e 44 61 74 61 62 61 73 65 28 7a  n openDatabase(z
67b0: 46 69 6c 65 6e 61 6d 65 2c 20 70 70 44 62 29 3b  Filename, ppDb);
67c0: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
67d0: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 2f 2a  TE_OMIT_UTF16./*
67e0: 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 64  .** Open a new d
67f0: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 0a  atabase handle..
6800: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f  */.int sqlite3_o
6810: 70 65 6e 31 36 28 0a 20 20 63 6f 6e 73 74 20 76  pen16(.  const v
6820: 6f 69 64 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20  oid *zFilename, 
6830: 0a 20 20 73 71 6c 69 74 65 33 20 2a 2a 70 70 44  .  sqlite3 **ppD
6840: 62 0a 29 7b 0a 20 20 63 68 61 72 20 63 6f 6e 73  b.){.  char cons
6850: 74 20 2a 7a 46 69 6c 65 6e 61 6d 65 38 3b 20 20  t *zFilename8;  
6860: 20 2f 2a 20 7a 46 69 6c 65 6e 61 6d 65 20 65 6e   /* zFilename en
6870: 63 6f 64 65 64 20 69 6e 20 55 54 46 2d 38 20 69  coded in UTF-8 i
6880: 6e 73 74 65 61 64 20 6f 66 20 55 54 46 2d 31 36  nstead of UTF-16
6890: 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20 53   */.  int rc = S
68a0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 73  QLITE_NOMEM;.  s
68b0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
68c0: 61 6c 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 7a  al;..  assert( z
68d0: 46 69 6c 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73  Filename );.  as
68e0: 73 65 72 74 28 20 70 70 44 62 20 29 3b 0a 20 20  sert( ppDb );.  
68f0: 2a 70 70 44 62 20 3d 20 30 3b 0a 20 20 70 56 61  *ppDb = 0;.  pVa
6900: 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65  l = sqlite3Value
6910: 4e 65 77 28 29 3b 0a 20 20 73 71 6c 69 74 65 33  New();.  sqlite3
6920: 56 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c  ValueSetStr(pVal
6930: 2c 20 2d 31 2c 20 7a 46 69 6c 65 6e 61 6d 65 2c  , -1, zFilename,
6940: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
6950: 49 56 45 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  IVE, SQLITE_STAT
6960: 49 43 29 3b 0a 20 20 7a 46 69 6c 65 6e 61 6d 65  IC);.  zFilename
6970: 38 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65  8 = sqlite3Value
6980: 54 65 78 74 28 70 56 61 6c 2c 20 53 51 4c 49 54  Text(pVal, SQLIT
6990: 45 5f 55 54 46 38 29 3b 0a 20 20 69 66 28 20 7a  E_UTF8);.  if( z
69a0: 46 69 6c 65 6e 61 6d 65 38 20 29 7b 0a 20 20 20  Filename8 ){.   
69b0: 20 72 63 20 3d 20 6f 70 65 6e 44 61 74 61 62 61   rc = openDataba
69c0: 73 65 28 7a 46 69 6c 65 6e 61 6d 65 38 2c 20 70  se(zFilename8, p
69d0: 70 44 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63  pDb);.    if( rc
69e0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 2a  ==SQLITE_OK && *
69f0: 70 70 44 62 20 29 7b 0a 20 20 20 20 20 20 72 63  ppDb ){.      rc
6a00: 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
6a10: 2a 70 70 44 62 2c 20 22 50 52 41 47 4d 41 20 65  *ppDb, "PRAGMA e
6a20: 6e 63 6f 64 69 6e 67 20 3d 20 27 55 54 46 2d 31  ncoding = 'UTF-1
6a30: 36 27 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20  6'", 0, 0, 0);. 
6a40: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
6a50: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
6a60: 33 54 73 64 28 29 2d 3e 6d 61 6c 6c 6f 63 46 61  3Tsd()->mallocFa
6a70: 69 6c 65 64 20 29 3b 0a 20 20 20 20 73 71 6c 69  iled );.    sqli
6a80: 74 65 33 4d 61 6c 6c 6f 63 43 6c 65 61 72 46 61  te3MallocClearFa
6a90: 69 6c 65 64 28 29 3b 0a 20 20 7d 0a 20 20 73 71  iled();.  }.  sq
6aa0: 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70  lite3ValueFree(p
6ab0: 56 61 6c 29 3b 0a 0a 20 20 72 65 74 75 72 6e 20  Val);..  return 
6ac0: 72 63 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  rc;.}.#endif /* 
6ad0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
6ae0: 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  6 */../*.** The 
6af0: 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e  following routin
6b00: 65 20 64 65 73 74 72 6f 79 73 20 61 20 76 69 72  e destroys a vir
6b10: 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 74 68 61  tual machine tha
6b20: 74 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a  t is created by.
6b30: 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63  ** the sqlite3_c
6b40: 6f 6d 70 69 6c 65 28 29 20 72 6f 75 74 69 6e 65  ompile() routine
6b50: 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20 72 65  . The integer re
6b60: 74 75 72 6e 65 64 20 69 73 20 61 6e 20 53 51 4c  turned is an SQL
6b70: 49 54 45 5f 0a 2a 2a 20 73 75 63 63 65 73 73 2f  ITE_.** success/
6b80: 66 61 69 6c 75 72 65 20 63 6f 64 65 20 74 68 61  failure code tha
6b90: 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  t describes the 
6ba0: 72 65 73 75 6c 74 20 6f 66 20 65 78 65 63 75 74  result of execut
6bb0: 69 6e 67 20 74 68 65 20 76 69 72 74 75 61 6c 0a  ing the virtual.
6bc0: 2a 2a 20 6d 61 63 68 69 6e 65 2e 0a 2a 2a 0a 2a  ** machine..**.*
6bd0: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73  * This routine s
6be0: 65 74 73 20 74 68 65 20 65 72 72 6f 72 20 63 6f  ets the error co
6bf0: 64 65 20 61 6e 64 20 73 74 72 69 6e 67 20 72 65  de and string re
6c00: 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20 73 71 6c  turned by.** sql
6c10: 69 74 65 33 5f 65 72 72 63 6f 64 65 28 29 2c 20  ite3_errcode(), 
6c20: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29  sqlite3_errmsg()
6c30: 20 61 6e 64 20 73 71 6c 69 74 65 33 5f 65 72 72   and sqlite3_err
6c40: 6d 73 67 31 36 28 29 2e 0a 2a 2f 0a 69 6e 74 20  msg16()..*/.int 
6c50: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
6c60: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
6c70: 53 74 6d 74 29 7b 0a 20 20 69 6e 74 20 72 63 3b  Stmt){.  int rc;
6c80: 0a 20 20 69 66 28 20 70 53 74 6d 74 3d 3d 30 20  .  if( pStmt==0 
6c90: 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
6ca0: 54 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73 65 7b 0a  TE_OK;.  }else{.
6cb0: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
6cc0: 56 64 62 65 46 69 6e 61 6c 69 7a 65 28 28 56 64  VdbeFinalize((Vd
6cd0: 62 65 2a 29 70 53 74 6d 74 29 3b 0a 20 20 7d 0a  be*)pStmt);.  }.
6ce0: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a    return rc;.}..
6cf0: 2f 2a 0a 2a 2a 20 54 65 72 6d 69 6e 61 74 65 20  /*.** Terminate 
6d00: 74 68 65 20 63 75 72 72 65 6e 74 20 65 78 65 63  the current exec
6d10: 75 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20  ution of an SQL 
6d20: 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65  statement and re
6d30: 73 65 74 20 69 74 0a 2a 2a 20 62 61 63 6b 20 74  set it.** back t
6d40: 6f 20 69 74 73 20 73 74 61 72 74 69 6e 67 20 73  o its starting s
6d50: 74 61 74 65 20 73 6f 20 74 68 61 74 20 69 74 20  tate so that it 
6d60: 63 61 6e 20 62 65 20 72 65 75 73 65 64 2e 20 41  can be reused. A
6d70: 20 73 75 63 63 65 73 73 20 63 6f 64 65 20 66 72   success code fr
6d80: 6f 6d 0a 2a 2a 20 74 68 65 20 70 72 69 6f 72 20  om.** the prior 
6d90: 65 78 65 63 75 74 69 6f 6e 20 69 73 20 72 65 74  execution is ret
6da0: 75 72 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  urned..**.** Thi
6db0: 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74  s routine sets t
6dc0: 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 61 6e  he error code an
6dd0: 64 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65  d string returne
6de0: 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  d by.** sqlite3_
6df0: 65 72 72 63 6f 64 65 28 29 2c 20 73 71 6c 69 74  errcode(), sqlit
6e00: 65 33 5f 65 72 72 6d 73 67 28 29 20 61 6e 64 20  e3_errmsg() and 
6e10: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36  sqlite3_errmsg16
6e20: 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ()..*/.int sqlit
6e30: 65 33 5f 72 65 73 65 74 28 73 71 6c 69 74 65 33  e3_reset(sqlite3
6e40: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20  _stmt *pStmt){. 
6e50: 20 69 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 70   int rc;.  if( p
6e60: 53 74 6d 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72  Stmt==0 ){.    r
6e70: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
6e80: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d   }else{.    rc =
6e90: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 73 65   sqlite3VdbeRese
6ea0: 74 28 28 56 64 62 65 2a 29 70 53 74 6d 74 29 3b  t((Vdbe*)pStmt);
6eb0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
6ec0: 4d 61 6b 65 52 65 61 64 79 28 28 56 64 62 65 2a  MakeReady((Vdbe*
6ed0: 29 70 53 74 6d 74 2c 20 2d 31 2c 20 30 2c 20 30  )pStmt, -1, 0, 0
6ee0: 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  , 0);.  }.  retu
6ef0: 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn rc;.}../*.** 
6f00: 52 65 67 69 73 74 65 72 20 61 20 6e 65 77 20 63  Register a new c
6f10: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
6f20: 65 20 77 69 74 68 20 74 68 65 20 64 61 74 61 62  e with the datab
6f30: 61 73 65 20 68 61 6e 64 6c 65 20 64 62 2e 0a 2a  ase handle db..*
6f40: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 72  /.int sqlite3_cr
6f50: 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 0a  eate_collation(.
6f60: 20 20 73 71 6c 69 74 65 33 2a 20 64 62 2c 20 0a    sqlite3* db, .
6f70: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
6f80: 61 6d 65 2c 20 0a 20 20 69 6e 74 20 65 6e 63 2c  ame, .  int enc,
6f90: 20 0a 20 20 76 6f 69 64 2a 20 70 43 74 78 2c 0a   .  void* pCtx,.
6fa0: 20 20 69 6e 74 28 2a 78 43 6f 6d 70 61 72 65 29    int(*xCompare)
6fb0: 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
6fc0: 20 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74   void*,int,const
6fd0: 20 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 43 6f 6c   void*).){.  Col
6fe0: 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 0a 20 20 69  lSeq *pColl;.  i
6ff0: 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  nt rc = SQLITE_O
7000: 4b 3b 0a 20 20 0a 20 20 69 66 28 20 73 71 6c 69  K;.  .  if( sqli
7010: 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 64  te3SafetyCheck(d
7020: 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  b) ){.    return
7030: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a   SQLITE_MISUSE;.
7040: 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 53 51 4c    }..  /* If SQL
7050: 49 54 45 5f 55 54 46 31 36 20 69 73 20 73 70 65  ITE_UTF16 is spe
7060: 63 69 66 69 65 64 20 61 73 20 74 68 65 20 65 6e  cified as the en
7070: 63 6f 64 69 6e 67 20 74 79 70 65 2c 20 74 72 61  coding type, tra
7080: 6e 73 66 6f 72 6d 20 74 68 69 73 0a 20 20 2a 2a  nsform this.  **
7090: 20 74 6f 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54   to one of SQLIT
70a0: 45 5f 55 54 46 31 36 4c 45 20 6f 72 20 53 51 4c  E_UTF16LE or SQL
70b0: 49 54 45 5f 55 54 46 31 36 42 45 20 75 73 69 6e  ITE_UTF16BE usin
70c0: 67 20 74 68 65 0a 20 20 2a 2a 20 53 51 4c 49 54  g the.  ** SQLIT
70d0: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 6d 61  E_UTF16NATIVE ma
70e0: 63 72 6f 2e 20 53 51 4c 49 54 45 5f 55 54 46 31  cro. SQLITE_UTF1
70f0: 36 20 69 73 20 6e 6f 74 20 75 73 65 64 20 69 6e  6 is not used in
7100: 74 65 72 6e 61 6c 6c 79 2e 0a 20 20 2a 2f 0a 20  ternally..  */. 
7110: 20 69 66 28 20 65 6e 63 3d 3d 53 51 4c 49 54 45   if( enc==SQLITE
7120: 5f 55 54 46 31 36 20 29 7b 0a 20 20 20 20 65 6e  _UTF16 ){.    en
7130: 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 31 36  c = SQLITE_UTF16
7140: 4e 41 54 49 56 45 3b 0a 20 20 7d 0a 0a 20 20 69  NATIVE;.  }..  i
7150: 66 28 20 65 6e 63 21 3d 53 51 4c 49 54 45 5f 55  f( enc!=SQLITE_U
7160: 54 46 38 20 26 26 20 65 6e 63 21 3d 53 51 4c 49  TF8 && enc!=SQLI
7170: 54 45 5f 55 54 46 31 36 4c 45 20 26 26 20 65 6e  TE_UTF16LE && en
7180: 63 21 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42  c!=SQLITE_UTF16B
7190: 45 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  E ){.    sqlite3
71a0: 45 72 72 6f 72 28 64 62 2c 20 53 51 4c 49 54 45  Error(db, SQLITE
71b0: 5f 45 52 52 4f 52 2c 20 0a 20 20 20 20 20 20 20  _ERROR, .       
71c0: 20 22 50 61 72 61 6d 20 33 20 74 6f 20 73 71 6c   "Param 3 to sql
71d0: 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c  ite3_create_coll
71e0: 61 74 69 6f 6e 28 29 20 6d 75 73 74 20 62 65 20  ation() must be 
71f0: 6f 6e 65 20 6f 66 20 22 0a 20 20 20 20 20 20 20  one of ".       
7200: 20 22 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53   "SQLITE_UTF8, S
7210: 51 4c 49 54 45 5f 55 54 46 31 36 2c 20 53 51 4c  QLITE_UTF16, SQL
7220: 49 54 45 5f 55 54 46 31 36 4c 45 20 6f 72 20 53  ITE_UTF16LE or S
7230: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 22 0a 20  QLITE_UTF16BE". 
7240: 20 20 20 29 3b 0a 20 20 20 20 72 65 74 75 72 6e     );.    return
7250: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
7260: 20 7d 0a 0a 20 20 2f 2a 20 43 68 65 63 6b 20 69   }..  /* Check i
7270: 66 20 74 68 69 73 20 63 61 6c 6c 20 69 73 20 72  f this call is r
7280: 65 6d 6f 76 69 6e 67 20 6f 72 20 72 65 70 6c 61  emoving or repla
7290: 63 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67  cing an existing
72a0: 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a 20 20 2a 2a   collation .  **
72b0: 20 73 65 71 75 65 6e 63 65 2e 20 49 66 20 73 6f   sequence. If so
72c0: 2c 20 61 6e 64 20 74 68 65 72 65 20 61 72 65 20  , and there are 
72d0: 61 63 74 69 76 65 20 56 4d 73 2c 20 72 65 74 75  active VMs, retu
72e0: 72 6e 20 62 75 73 79 2e 20 49 66 20 74 68 65 72  rn busy. If ther
72f0: 65 0a 20 20 2a 2a 20 61 72 65 20 6e 6f 20 61 63  e.  ** are no ac
7300: 74 69 76 65 20 56 4d 73 2c 20 69 6e 76 61 6c 69  tive VMs, invali
7310: 64 61 74 65 20 61 6e 79 20 70 72 65 2d 63 6f 6d  date any pre-com
7320: 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73  piled statements
7330: 2e 0a 20 20 2a 2f 0a 20 20 70 43 6f 6c 6c 20 3d  ..  */.  pColl =
7340: 20 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c   sqlite3FindColl
7350: 53 65 71 28 64 62 2c 20 28 75 38 29 65 6e 63 2c  Seq(db, (u8)enc,
7360: 20 7a 4e 61 6d 65 2c 20 73 74 72 6c 65 6e 28 7a   zName, strlen(z
7370: 4e 61 6d 65 29 2c 20 30 29 3b 0a 20 20 69 66 28  Name), 0);.  if(
7380: 20 70 43 6f 6c 6c 20 26 26 20 70 43 6f 6c 6c 2d   pColl && pColl-
7390: 3e 78 43 6d 70 20 29 7b 0a 20 20 20 20 69 66 28  >xCmp ){.    if(
73a0: 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43   db->activeVdbeC
73b0: 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  nt ){.      sqli
73c0: 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c  te3Error(db, SQL
73d0: 49 54 45 5f 42 55 53 59 2c 20 0a 20 20 20 20 20  ITE_BUSY, .     
73e0: 20 20 20 22 55 6e 61 62 6c 65 20 74 6f 20 64 65     "Unable to de
73f0: 6c 65 74 65 2f 6d 6f 64 69 66 79 20 63 6f 6c 6c  lete/modify coll
7400: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 64  ation sequence d
7410: 75 65 20 74 6f 20 61 63 74 69 76 65 20 73 74 61  ue to active sta
7420: 74 65 6d 65 6e 74 73 22 29 3b 0a 20 20 20 20 20  tements");.     
7430: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 42   return SQLITE_B
7440: 55 53 59 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  USY;.    }.    s
7450: 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
7460: 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
7470: 62 29 3b 0a 20 20 7d 0a 0a 20 20 70 43 6f 6c 6c  b);.  }..  pColl
7480: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 43 6f   = sqlite3FindCo
7490: 6c 6c 53 65 71 28 64 62 2c 20 28 75 38 29 65 6e  llSeq(db, (u8)en
74a0: 63 2c 20 7a 4e 61 6d 65 2c 20 73 74 72 6c 65 6e  c, zName, strlen
74b0: 28 7a 4e 61 6d 65 29 2c 20 31 29 3b 0a 20 20 69  (zName), 1);.  i
74c0: 66 28 20 30 3d 3d 70 43 6f 6c 6c 20 29 7b 0a 20  f( 0==pColl ){. 
74d0: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e     rc = SQLITE_N
74e0: 4f 4d 45 4d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  OMEM;.  }else{. 
74f0: 20 20 20 70 43 6f 6c 6c 2d 3e 78 43 6d 70 20 3d     pColl->xCmp =
7500: 20 78 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 70   xCompare;.    p
7510: 43 6f 6c 6c 2d 3e 70 55 73 65 72 20 3d 20 70 43  Coll->pUser = pC
7520: 74 78 3b 0a 20 20 20 20 70 43 6f 6c 6c 2d 3e 65  tx;.    pColl->e
7530: 6e 63 20 3d 20 65 6e 63 3b 0a 20 20 7d 0a 20 20  nc = enc;.  }.  
7540: 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c  sqlite3Error(db,
7550: 20 72 63 2c 20 30 29 3b 0a 20 20 72 65 74 75 72   rc, 0);.  retur
7560: 6e 20 72 63 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  n rc;.}..#ifndef
7570: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
7580: 31 36 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65  16./*.** Registe
7590: 72 20 61 20 6e 65 77 20 63 6f 6c 6c 61 74 69 6f  r a new collatio
75a0: 6e 20 73 65 71 75 65 6e 63 65 20 77 69 74 68 20  n sequence with 
75b0: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
75c0: 64 6c 65 20 64 62 2e 0a 2a 2f 0a 69 6e 74 20 73  dle db..*/.int s
75d0: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
75e0: 6c 6c 61 74 69 6f 6e 31 36 28 0a 20 20 73 71 6c  llation16(.  sql
75f0: 69 74 65 33 2a 20 64 62 2c 20 0a 20 20 63 6f 6e  ite3* db, .  con
7600: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20  st char *zName, 
7610: 0a 20 20 69 6e 74 20 65 6e 63 2c 20 0a 20 20 76  .  int enc, .  v
7620: 6f 69 64 2a 20 70 43 74 78 2c 0a 20 20 69 6e 74  oid* pCtx,.  int
7630: 28 2a 78 43 6f 6d 70 61 72 65 29 28 76 6f 69 64  (*xCompare)(void
7640: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64  *,int,const void
7650: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64  *,int,const void
7660: 2a 29 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  *).){.  char *zN
7670: 61 6d 65 38 3b 0a 20 20 69 6e 74 20 72 63 3b 0a  ame8;.  int rc;.
7680: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
7690: 65 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b 0a  etyCheck(db) ){.
76a0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
76b0: 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20  E_MISUSE;.  }.  
76c0: 7a 4e 61 6d 65 38 20 3d 20 73 71 6c 69 74 65 33  zName8 = sqlite3
76d0: 75 74 66 31 36 74 6f 38 28 7a 4e 61 6d 65 2c 20  utf16to8(zName, 
76e0: 2d 31 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  -1);.  rc = sqli
76f0: 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61  te3_create_colla
7700: 74 69 6f 6e 28 64 62 2c 20 7a 4e 61 6d 65 38 2c  tion(db, zName8,
7710: 20 65 6e 63 2c 20 70 43 74 78 2c 20 78 43 6f 6d   enc, pCtx, xCom
7720: 70 61 72 65 29 3b 0a 20 20 73 71 6c 69 74 65 46  pare);.  sqliteF
7730: 72 65 65 28 7a 4e 61 6d 65 38 29 3b 0a 20 20 72  ree(zName8);.  r
7740: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 23 65 6e 64  eturn rc;.}.#end
7750: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
7760: 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a  T_UTF16 */../*.*
7770: 2a 20 52 65 67 69 73 74 65 72 20 61 20 63 6f 6c  * Register a col
7780: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
7790: 66 61 63 74 6f 72 79 20 63 61 6c 6c 62 61 63 6b  factory callback
77a0: 20 77 69 74 68 20 74 68 65 20 64 61 74 61 62 61   with the databa
77b0: 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 64 62 2e  se handle.** db.
77c0: 20 52 65 70 6c 61 63 65 20 61 6e 79 20 70 72 65   Replace any pre
77d0: 76 69 6f 75 73 6c 79 20 69 6e 73 74 61 6c 6c 65  viously installe
77e0: 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  d collation sequ
77f0: 65 6e 63 65 20 66 61 63 74 6f 72 79 2e 0a 2a 2f  ence factory..*/
7800: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c  .int sqlite3_col
7810: 6c 61 74 69 6f 6e 5f 6e 65 65 64 65 64 28 0a 20  lation_needed(. 
7820: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 0a 20   sqlite3 *db, . 
7830: 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64   void *pCollNeed
7840: 65 64 41 72 67 2c 20 0a 20 20 76 6f 69 64 28 2a  edArg, .  void(*
7850: 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69  xCollNeeded)(voi
7860: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
7870: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63  eTextRep,const c
7880: 68 61 72 2a 29 0a 29 7b 0a 20 20 69 66 28 20 73  har*).){.  if( s
7890: 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
78a0: 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74  k(db) ){.    ret
78b0: 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  urn SQLITE_MISUS
78c0: 45 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 78 43 6f  E;.  }.  db->xCo
78d0: 6c 6c 4e 65 65 64 65 64 20 3d 20 78 43 6f 6c 6c  llNeeded = xColl
78e0: 4e 65 65 64 65 64 3b 0a 20 20 64 62 2d 3e 78 43  Needed;.  db->xC
78f0: 6f 6c 6c 4e 65 65 64 65 64 31 36 20 3d 20 30 3b  ollNeeded16 = 0;
7900: 0a 20 20 64 62 2d 3e 70 43 6f 6c 6c 4e 65 65 64  .  db->pCollNeed
7910: 65 64 41 72 67 20 3d 20 70 43 6f 6c 6c 4e 65 65  edArg = pCollNee
7920: 64 65 64 41 72 67 3b 0a 20 20 72 65 74 75 72 6e  dedArg;.  return
7930: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 23   SQLITE_OK;.}..#
7940: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
7950: 49 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20 52  IT_UTF16./*.** R
7960: 65 67 69 73 74 65 72 20 61 20 63 6f 6c 6c 61 74  egister a collat
7970: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 61 63  ion sequence fac
7980: 74 6f 72 79 20 63 61 6c 6c 62 61 63 6b 20 77 69  tory callback wi
7990: 74 68 20 74 68 65 20 64 61 74 61 62 61 73 65 20  th the database 
79a0: 68 61 6e 64 6c 65 0a 2a 2a 20 64 62 2e 20 52 65  handle.** db. Re
79b0: 70 6c 61 63 65 20 61 6e 79 20 70 72 65 76 69 6f  place any previo
79c0: 75 73 6c 79 20 69 6e 73 74 61 6c 6c 65 64 20 63  usly installed c
79d0: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
79e0: 65 20 66 61 63 74 6f 72 79 2e 0a 2a 2f 0a 69 6e  e factory..*/.in
79f0: 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c 6c 61 74  t sqlite3_collat
7a00: 69 6f 6e 5f 6e 65 65 64 65 64 31 36 28 0a 20 20  ion_needed16(.  
7a10: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 0a 20 20  sqlite3 *db, .  
7a20: 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65  void *pCollNeede
7a30: 64 41 72 67 2c 20 0a 20 20 76 6f 69 64 28 2a 78  dArg, .  void(*x
7a40: 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f  CollNeeded16)(vo
7a50: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
7a60: 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20   eTextRep,const 
7a70: 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 69 66 28 20  void*).){.  if( 
7a80: 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
7a90: 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65  ck(db) ){.    re
7aa0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
7ab0: 53 45 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 78 43  SE;.  }.  db->xC
7ac0: 6f 6c 6c 4e 65 65 64 65 64 20 3d 20 30 3b 0a 20  ollNeeded = 0;. 
7ad0: 20 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64   db->xCollNeeded
7ae0: 31 36 20 3d 20 78 43 6f 6c 6c 4e 65 65 64 65 64  16 = xCollNeeded
7af0: 31 36 3b 0a 20 20 64 62 2d 3e 70 43 6f 6c 6c 4e  16;.  db->pCollN
7b00: 65 65 64 65 64 41 72 67 20 3d 20 70 43 6f 6c 6c  eededArg = pColl
7b10: 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 72 65 74  NeededArg;.  ret
7b20: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d  urn SQLITE_OK;.}
7b30: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
7b40: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
7b50: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
7b60: 4f 4d 49 54 5f 47 4c 4f 42 41 4c 52 45 43 4f 56  OMIT_GLOBALRECOV
7b70: 45 52 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75  ER./*.** This fu
7b80: 6e 63 74 69 6f 6e 20 69 73 20 6e 6f 77 20 61 6e  nction is now an
7b90: 20 61 6e 61 63 68 72 6f 6e 69 73 6d 2e 20 49 74   anachronism. It
7ba0: 20 75 73 65 64 20 74 6f 20 62 65 20 75 73 65 64   used to be used
7bb0: 20 74 6f 20 72 65 63 6f 76 65 72 20 66 72 6f 6d   to recover from
7bc0: 20 61 0a 2a 2a 20 6d 61 6c 6c 6f 63 28 29 20 66   a.** malloc() f
7bd0: 61 69 6c 75 72 65 2c 20 62 75 74 20 53 51 4c 69  ailure, but SQLi
7be0: 74 65 20 6e 6f 77 20 64 6f 65 73 20 74 68 69 73  te now does this
7bf0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a   automatically..
7c00: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 67  */.int sqlite3_g
7c10: 6c 6f 62 61 6c 5f 72 65 63 6f 76 65 72 28 29 7b  lobal_recover(){
7c20: 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  .  return SQLITE
7c30: 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  _OK;.}.#endif../
7c40: 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65  *.** Test to see
7c50: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
7c60: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
7c70: 6e 65 63 74 69 6f 6e 20 69 73 20 69 6e 20 61 75  nection is in au
7c80: 74 6f 63 6f 6d 6d 69 74 0a 2a 2a 20 6d 6f 64 65  tocommit.** mode
7c90: 2e 20 20 52 65 74 75 72 6e 20 54 52 55 45 20 69  .  Return TRUE i
7ca0: 66 20 69 74 20 69 73 20 61 6e 64 20 46 41 4c 53  f it is and FALS
7cb0: 45 20 69 66 20 6e 6f 74 2e 20 20 41 75 74 6f 63  E if not.  Autoc
7cc0: 6f 6d 6d 69 74 20 6d 6f 64 65 20 69 73 20 6f 6e  ommit mode is on
7cd0: 0a 2a 2a 20 62 79 20 64 65 66 61 75 6c 74 2e 20  .** by default. 
7ce0: 20 41 75 74 6f 63 6f 6d 6d 69 74 20 69 73 20 64   Autocommit is d
7cf0: 69 73 61 62 6c 65 64 20 62 79 20 61 20 42 45 47  isabled by a BEG
7d00: 49 4e 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  IN statement and
7d10: 20 72 65 65 6e 61 62 6c 65 64 0a 2a 2a 20 62 79   reenabled.** by
7d20: 20 74 68 65 20 6e 65 78 74 20 43 4f 4d 4d 49 54   the next COMMIT
7d30: 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2e 0a 2a 2a   or ROLLBACK..**
7d40: 0a 2a 2a 2a 2a 2a 2a 2a 20 54 48 49 53 20 49 53  .******* THIS IS
7d50: 20 41 4e 20 45 58 50 45 52 49 4d 45 4e 54 41 4c   AN EXPERIMENTAL
7d60: 20 41 50 49 20 41 4e 44 20 49 53 20 53 55 42 4a   API AND IS SUBJ
7d70: 45 43 54 20 54 4f 20 43 48 41 4e 47 45 20 2a 2a  ECT TO CHANGE **
7d80: 2a 2a 2a 2a 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ****.*/.int sqli
7d90: 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d  te3_get_autocomm
7da0: 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b  it(sqlite3 *db){
7db0: 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 61 75  .  return db->au
7dc0: 74 6f 43 6f 6d 6d 69 74 3b 0a 7d 0a 0a 23 69 66  toCommit;.}..#if
7dd0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
7de0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
7df0: 77 69 6e 67 20 72 6f 75 74 69 6e 65 20 69 73 20  wing routine is 
7e00: 73 75 62 74 69 74 75 74 65 64 20 66 6f 72 20 63  subtituted for c
7e10: 6f 6e 73 74 61 6e 74 20 53 51 4c 49 54 45 5f 43  onstant SQLITE_C
7e20: 4f 52 52 55 50 54 20 69 6e 0a 2a 2a 20 64 65 62  ORRUPT in.** deb
7e30: 75 67 67 69 6e 67 20 62 75 69 6c 64 73 2e 20 20  ugging builds.  
7e40: 54 68 69 73 20 70 72 6f 76 69 64 65 73 20 61 20  This provides a 
7e50: 77 61 79 20 74 6f 20 73 65 74 20 61 20 62 72 65  way to set a bre
7e60: 61 6b 70 6f 69 6e 74 20 66 6f 72 20 77 68 65 6e  akpoint for when
7e70: 0a 2a 2a 20 63 6f 72 72 75 70 74 69 6f 6e 20 69  .** corruption i
7e80: 73 20 66 69 72 73 74 20 64 65 74 65 63 74 65 64  s first detected
7e90: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
7ea0: 43 6f 72 72 75 70 74 28 76 6f 69 64 29 7b 0a 20  Corrupt(void){. 
7eb0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 43   return SQLITE_C
7ec0: 4f 52 52 55 50 54 3b 0a 7d 0a 23 65 6e 64 69 66  ORRUPT;.}.#endif
7ed0: 0a                                               .