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

Artifact 33c32014da3a1471e8869d2eba32b2c4314c39ce:


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 36 30 20 32 30 30 36 2f 31 32  ,v 1.360 2006/12
0280: 2f 31 39 20 31 38 3a 35 37 3a 31 31 20 64 72 68  /19 18:57:11 drh
0290: 20 45 78 70 20 24 0a 2a 2f 0a 23 69 6e 63 6c 75   Exp $.*/.#inclu
02a0: 64 65 20 22 73 71 6c 69 74 65 49 6e 74 2e 68 22  de "sqliteInt.h"
02b0: 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22  .#include "os.h"
02c0: 0a 23 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65  .#include <ctype
02d0: 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .h>../*.** The f
02e0: 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e  ollowing constan
02f0: 74 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  t value is used 
0300: 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 42 49  by the SQLITE_BI
0310: 47 45 4e 44 49 41 4e 20 61 6e 64 0a 2a 2a 20 53  GENDIAN and.** S
0320: 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49  QLITE_LITTLEENDI
0330: 41 4e 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 63 6f  AN macros..*/.co
0340: 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f  nst int sqlite3o
0350: 6e 65 20 3d 20 31 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ne = 1;../*.** T
0360: 68 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  he version of th
0370: 65 20 6c 69 62 72 61 72 79 0a 2a 2f 0a 63 6f 6e  e library.*/.con
0380: 73 74 20 63 68 61 72 20 73 71 6c 69 74 65 33 5f  st char sqlite3_
0390: 76 65 72 73 69 6f 6e 5b 5d 20 3d 20 53 51 4c 49  version[] = SQLI
03a0: 54 45 5f 56 45 52 53 49 4f 4e 3b 0a 63 6f 6e 73  TE_VERSION;.cons
03b0: 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f  t char *sqlite3_
03c0: 6c 69 62 76 65 72 73 69 6f 6e 28 76 6f 69 64 29  libversion(void)
03d0: 7b 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33  { return sqlite3
03e0: 5f 76 65 72 73 69 6f 6e 3b 20 7d 0a 69 6e 74 20  _version; }.int 
03f0: 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69  sqlite3_libversi
0400: 6f 6e 5f 6e 75 6d 62 65 72 28 76 6f 69 64 29 7b  on_number(void){
0410: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 56   return SQLITE_V
0420: 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 3b 20 7d  ERSION_NUMBER; }
0430: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ../*.** This is 
0440: 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c  the default coll
0450: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 6e  ating function n
0460: 61 6d 65 64 20 22 42 49 4e 41 52 59 22 20 77 68  amed "BINARY" wh
0470: 69 63 68 20 69 73 20 61 6c 77 61 79 73 0a 2a 2a  ich is always.**
0480: 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2f 0a 73   available..*/.s
0490: 74 61 74 69 63 20 69 6e 74 20 62 69 6e 43 6f 6c  tatic int binCol
04a0: 6c 46 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a 4e  lFunc(.  void *N
04b0: 6f 74 55 73 65 64 2c 0a 20 20 69 6e 74 20 6e 4b  otUsed,.  int nK
04c0: 65 79 31 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  ey1, const void 
04d0: 2a 70 4b 65 79 31 2c 0a 20 20 69 6e 74 20 6e 4b  *pKey1,.  int nK
04e0: 65 79 32 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  ey2, const void 
04f0: 2a 70 4b 65 79 32 0a 29 7b 0a 20 20 69 6e 74 20  *pKey2.){.  int 
0500: 72 63 2c 20 6e 3b 0a 20 20 6e 20 3d 20 6e 4b 65  rc, n;.  n = nKe
0510: 79 31 3c 6e 4b 65 79 32 20 3f 20 6e 4b 65 79 31  y1<nKey2 ? nKey1
0520: 20 3a 20 6e 4b 65 79 32 3b 0a 20 20 72 63 20 3d   : nKey2;.  rc =
0530: 20 6d 65 6d 63 6d 70 28 70 4b 65 79 31 2c 20 70   memcmp(pKey1, p
0540: 4b 65 79 32 2c 20 6e 29 3b 0a 20 20 69 66 28 20  Key2, n);.  if( 
0550: 72 63 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  rc==0 ){.    rc 
0560: 3d 20 6e 4b 65 79 31 20 2d 20 6e 4b 65 79 32 3b  = nKey1 - nKey2;
0570: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63  .  }.  return rc
0580: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 6f 74 68  ;.}../*.** Anoth
0590: 65 72 20 62 75 69 6c 74 2d 69 6e 20 63 6f 6c 6c  er built-in coll
05a0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 3a 20  ating sequence: 
05b0: 4e 4f 43 41 53 45 2e 20 0a 2a 2a 0a 2a 2a 20 54  NOCASE. .**.** T
05c0: 68 69 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  his collating se
05d0: 71 75 65 6e 63 65 20 69 73 20 69 6e 74 65 6e 64  quence is intend
05e0: 65 64 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f  ed to be used fo
05f0: 72 20 22 63 61 73 65 20 69 6e 64 65 70 65 6e 64  r "case independ
0600: 61 6e 74 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  ant.** compariso
0610: 6e 22 2e 20 53 51 4c 69 74 65 27 73 20 6b 6e 6f  n". SQLite's kno
0620: 77 6c 65 64 67 65 20 6f 66 20 75 70 70 65 72 20  wledge of upper 
0630: 61 6e 64 20 6c 6f 77 65 72 20 63 61 73 65 20 65  and lower case e
0640: 71 75 69 76 61 6c 65 6e 74 73 0a 2a 2a 20 65 78  quivalents.** ex
0650: 74 65 6e 64 73 20 6f 6e 6c 79 20 74 6f 20 74 68  tends only to th
0660: 65 20 32 36 20 63 68 61 72 61 63 74 65 72 73 20  e 26 characters 
0670: 75 73 65 64 20 69 6e 20 74 68 65 20 45 6e 67 6c  used in the Engl
0680: 69 73 68 20 6c 61 6e 67 75 61 67 65 2e 0a 2a 2a  ish language..**
0690: 0a 2a 2a 20 41 74 20 74 68 65 20 6d 6f 6d 65 6e  .** At the momen
06a0: 74 20 74 68 65 72 65 20 69 73 20 6f 6e 6c 79 20  t there is only 
06b0: 61 20 55 54 46 2d 38 20 69 6d 70 6c 65 6d 65 6e  a UTF-8 implemen
06c0: 74 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69  tation..*/.stati
06d0: 63 20 69 6e 74 20 6e 6f 63 61 73 65 43 6f 6c 6c  c int nocaseColl
06e0: 61 74 69 6e 67 46 75 6e 63 28 0a 20 20 76 6f 69  atingFunc(.  voi
06f0: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 69 6e  d *NotUsed,.  in
0700: 74 20 6e 4b 65 79 31 2c 20 63 6f 6e 73 74 20 76  t nKey1, const v
0710: 6f 69 64 20 2a 70 4b 65 79 31 2c 0a 20 20 69 6e  oid *pKey1,.  in
0720: 74 20 6e 4b 65 79 32 2c 20 63 6f 6e 73 74 20 76  t nKey2, const v
0730: 6f 69 64 20 2a 70 4b 65 79 32 0a 29 7b 0a 20 20  oid *pKey2.){.  
0740: 69 6e 74 20 72 20 3d 20 73 71 6c 69 74 65 33 53  int r = sqlite3S
0750: 74 72 4e 49 43 6d 70 28 0a 20 20 20 20 20 20 28  trNICmp(.      (
0760: 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 70 4b 65  const char *)pKe
0770: 79 31 2c 20 28 63 6f 6e 73 74 20 63 68 61 72 20  y1, (const char 
0780: 2a 29 70 4b 65 79 32 2c 20 28 6e 4b 65 79 31 3c  *)pKey2, (nKey1<
0790: 6e 4b 65 79 32 29 3f 6e 4b 65 79 31 3a 6e 4b 65  nKey2)?nKey1:nKe
07a0: 79 32 29 3b 0a 20 20 69 66 28 20 30 3d 3d 72 20  y2);.  if( 0==r 
07b0: 29 7b 0a 20 20 20 20 72 20 3d 20 6e 4b 65 79 31  ){.    r = nKey1
07c0: 2d 6e 4b 65 79 32 3b 0a 20 20 7d 0a 20 20 72 65  -nKey2;.  }.  re
07d0: 74 75 72 6e 20 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn r;.}../*.**
07e0: 20 52 65 74 75 72 6e 20 74 68 65 20 52 4f 57 49   Return the ROWI
07f0: 44 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72 65  D of the most re
0800: 63 65 6e 74 20 69 6e 73 65 72 74 0a 2a 2f 0a 73  cent insert.*/.s
0810: 71 6c 69 74 65 5f 69 6e 74 36 34 20 73 71 6c 69  qlite_int64 sqli
0820: 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
0830: 72 6f 77 69 64 28 73 71 6c 69 74 65 33 20 2a 64  rowid(sqlite3 *d
0840: 62 29 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 2d  b){.  return db-
0850: 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 7d 0a 0a 2f  >lastRowid;.}../
0860: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
0870: 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 6e 67 65  number of change
0880: 73 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65  s in the most re
0890: 63 65 6e 74 20 63 61 6c 6c 20 74 6f 20 73 71 6c  cent call to sql
08a0: 69 74 65 33 5f 65 78 65 63 28 29 2e 0a 2a 2f 0a  ite3_exec()..*/.
08b0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 68 61 6e  int sqlite3_chan
08c0: 67 65 73 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ges(sqlite3 *db)
08d0: 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 6e  {.  return db->n
08e0: 43 68 61 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  Change;.}../*.**
08f0: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   Return the numb
0900: 65 72 20 6f 66 20 63 68 61 6e 67 65 73 20 73 69  er of changes si
0910: 6e 63 65 20 74 68 65 20 64 61 74 61 62 61 73 65  nce the database
0920: 20 68 61 6e 64 6c 65 20 77 61 73 20 6f 70 65 6e   handle was open
0930: 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ed..*/.int sqlit
0940: 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73  e3_total_changes
0950: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
0960: 20 72 65 74 75 72 6e 20 64 62 2d 3e 6e 54 6f 74   return db->nTot
0970: 61 6c 43 68 61 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a  alChange;.}../*.
0980: 2a 2a 20 43 6c 6f 73 65 20 61 6e 20 65 78 69 73  ** Close an exis
0990: 74 69 6e 67 20 53 51 4c 69 74 65 20 64 61 74 61  ting SQLite data
09a0: 62 61 73 65 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  base.*/.int sqli
09b0: 74 65 33 5f 63 6c 6f 73 65 28 73 71 6c 69 74 65  te3_close(sqlite
09c0: 33 20 2a 64 62 29 7b 0a 20 20 48 61 73 68 45 6c  3 *db){.  HashEl
09d0: 65 6d 20 2a 69 3b 0a 20 20 69 6e 74 20 6a 3b 0a  em *i;.  int j;.
09e0: 0a 20 20 69 66 28 20 21 64 62 20 29 7b 0a 20 20  .  if( !db ){.  
09f0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
0a00: 4f 4b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71  OK;.  }.  if( sq
0a10: 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
0a20: 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75  (db) ){.    retu
0a30: 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  rn SQLITE_MISUSE
0a40: 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51  ;.  }..#ifdef SQ
0a50: 4c 49 54 45 5f 53 53 45 0a 20 20 7b 0a 20 20 20  LITE_SSE.  {.   
0a60: 20 65 78 74 65 72 6e 20 76 6f 69 64 20 73 71 6c   extern void sql
0a70: 69 74 65 33 53 73 65 43 6c 65 61 6e 75 70 28 73  ite3SseCleanup(s
0a80: 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 20 73 71  qlite3*);.    sq
0a90: 6c 69 74 65 33 53 73 65 43 6c 65 61 6e 75 70 28  lite3SseCleanup(
0aa0: 64 62 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  db);.  }.#endif 
0ab0: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20  ..  /* If there 
0ac0: 61 72 65 20 61 6e 79 20 6f 75 74 73 74 61 6e 64  are any outstand
0ad0: 69 6e 67 20 56 4d 73 2c 20 72 65 74 75 72 6e 20  ing VMs, return 
0ae0: 53 51 4c 49 54 45 5f 42 55 53 59 2e 20 2a 2f 0a  SQLITE_BUSY. */.
0af0: 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e    sqlite3ResetIn
0b00: 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c  ternalSchema(db,
0b10: 20 30 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 70   0);.  if( db->p
0b20: 56 64 62 65 20 29 7b 0a 20 20 20 20 73 71 6c 69  Vdbe ){.    sqli
0b30: 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c  te3Error(db, SQL
0b40: 49 54 45 5f 42 55 53 59 2c 20 0a 20 20 20 20 20  ITE_BUSY, .     
0b50: 20 20 20 22 55 6e 61 62 6c 65 20 74 6f 20 63 6c     "Unable to cl
0b60: 6f 73 65 20 64 75 65 20 74 6f 20 75 6e 66 69 6e  ose due to unfin
0b70: 61 6c 69 73 65 64 20 73 74 61 74 65 6d 65 6e 74  alised statement
0b80: 73 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  s");.    return 
0b90: 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d  SQLITE_BUSY;.  }
0ba0: 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69  .  assert( !sqli
0bb0: 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 64  te3SafetyCheck(d
0bc0: 62 29 20 29 3b 0a 0a 20 20 2f 2a 20 46 49 58 20  b) );..  /* FIX 
0bd0: 4d 45 3a 20 64 62 2d 3e 6d 61 67 69 63 20 6d 61  ME: db->magic ma
0be0: 79 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49  y be set to SQLI
0bf0: 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20  TE_MAGIC_CLOSED 
0c00: 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  if the database.
0c10: 20 20 2a 2a 20 63 61 6e 6e 6f 74 20 62 65 20 6f    ** cannot be o
0c20: 70 65 6e 65 64 20 66 6f 72 20 73 6f 6d 65 20 72  pened for some r
0c30: 65 61 73 6f 6e 2e 20 53 6f 20 74 68 69 73 20 72  eason. So this r
0c40: 6f 75 74 69 6e 65 20 6e 65 65 64 73 20 74 6f 20  outine needs to 
0c50: 72 75 6e 20 69 6e 0a 20 20 2a 2a 20 74 68 61 74  run in.  ** that
0c60: 20 63 61 73 65 2e 20 42 75 74 20 6d 61 79 62 65   case. But maybe
0c70: 20 74 68 65 72 65 20 73 68 6f 75 6c 64 20 62 65   there should be
0c80: 20 61 6e 20 65 78 74 72 61 20 6d 61 67 69 63 20   an extra magic 
0c90: 76 61 6c 75 65 20 66 6f 72 20 74 68 65 0a 20 20  value for the.  
0ca0: 2a 2a 20 22 66 61 69 6c 65 64 20 74 6f 20 6f 70  ** "failed to op
0cb0: 65 6e 22 20 73 74 61 74 65 2e 0a 20 20 2a 2f 0a  en" state..  */.
0cc0: 20 20 69 66 28 20 64 62 2d 3e 6d 61 67 69 63 21    if( db->magic!
0cd0: 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c  =SQLITE_MAGIC_CL
0ce0: 4f 53 45 44 20 26 26 20 73 71 6c 69 74 65 33 53  OSED && sqlite3S
0cf0: 61 66 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20  afetyOn(db) ){. 
0d00: 20 20 20 2f 2a 20 70 72 69 6e 74 66 28 22 44 49     /* printf("DI
0d10: 44 20 4e 4f 54 20 43 4c 4f 53 45 5c 6e 22 29 3b  D NOT CLOSE\n");
0d20: 20 66 66 6c 75 73 68 28 73 74 64 6f 75 74 29 3b   fflush(stdout);
0d30: 20 2a 2f 0a 20 20 20 20 72 65 74 75 72 6e 20 53   */.    return S
0d40: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
0d50: 0a 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 52  ..  sqlite3VtabR
0d60: 6f 6c 6c 62 61 63 6b 28 64 62 29 3b 0a 0a 20 20  ollback(db);..  
0d70: 66 6f 72 28 6a 3d 30 3b 20 6a 3c 64 62 2d 3e 6e  for(j=0; j<db->n
0d80: 44 62 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 73 74  Db; j++){.    st
0d90: 72 75 63 74 20 44 62 20 2a 70 44 62 20 3d 20 26  ruct Db *pDb = &
0da0: 64 62 2d 3e 61 44 62 5b 6a 5d 3b 0a 20 20 20 20  db->aDb[j];.    
0db0: 69 66 28 20 70 44 62 2d 3e 70 42 74 20 29 7b 0a  if( pDb->pBt ){.
0dc0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
0dd0: 65 65 43 6c 6f 73 65 28 70 44 62 2d 3e 70 42 74  eeClose(pDb->pBt
0de0: 29 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 42  );.      pDb->pB
0df0: 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 69 66 28  t = 0;.      if(
0e00: 20 6a 21 3d 31 20 29 7b 0a 20 20 20 20 20 20 20   j!=1 ){.       
0e10: 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 20 3d 20   pDb->pSchema = 
0e20: 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
0e30: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 65  .  }.  sqlite3Re
0e40: 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
0e50: 61 28 64 62 2c 20 30 29 3b 0a 20 20 61 73 73 65  a(db, 0);.  asse
0e60: 72 74 28 20 64 62 2d 3e 6e 44 62 3c 3d 32 20 29  rt( db->nDb<=2 )
0e70: 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
0e80: 61 44 62 3d 3d 64 62 2d 3e 61 44 62 53 74 61 74  aDb==db->aDbStat
0e90: 69 63 20 29 3b 0a 20 20 66 6f 72 28 69 3d 73 71  ic );.  for(i=sq
0ea0: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64  liteHashFirst(&d
0eb0: 62 2d 3e 61 46 75 6e 63 29 3b 20 69 3b 20 69 3d  b->aFunc); i; i=
0ec0: 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 69  sqliteHashNext(i
0ed0: 29 29 7b 0a 20 20 20 20 46 75 6e 63 44 65 66 20  )){.    FuncDef 
0ee0: 2a 70 46 75 6e 63 2c 20 2a 70 4e 65 78 74 3b 0a  *pFunc, *pNext;.
0ef0: 20 20 20 20 66 6f 72 28 70 46 75 6e 63 20 3d 20      for(pFunc = 
0f00: 28 46 75 6e 63 44 65 66 2a 29 73 71 6c 69 74 65  (FuncDef*)sqlite
0f10: 48 61 73 68 44 61 74 61 28 69 29 3b 20 70 46 75  HashData(i); pFu
0f20: 6e 63 3b 20 70 46 75 6e 63 3d 70 4e 65 78 74 29  nc; pFunc=pNext)
0f30: 7b 0a 20 20 20 20 20 20 70 4e 65 78 74 20 3d 20  {.      pNext = 
0f40: 70 46 75 6e 63 2d 3e 70 4e 65 78 74 3b 0a 20 20  pFunc->pNext;.  
0f50: 20 20 20 20 73 71 6c 69 74 65 46 72 65 65 28 70      sqliteFree(p
0f60: 46 75 6e 63 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  Func);.    }.  }
0f70: 0a 0a 20 20 66 6f 72 28 69 3d 73 71 6c 69 74 65  ..  for(i=sqlite
0f80: 48 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61  HashFirst(&db->a
0f90: 43 6f 6c 6c 53 65 71 29 3b 20 69 3b 20 69 3d 73  CollSeq); i; i=s
0fa0: 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 69 29  qliteHashNext(i)
0fb0: 29 7b 0a 20 20 20 20 43 6f 6c 6c 53 65 71 20 2a  ){.    CollSeq *
0fc0: 70 43 6f 6c 6c 20 3d 20 28 43 6f 6c 6c 53 65 71  pColl = (CollSeq
0fd0: 20 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61 74   *)sqliteHashDat
0fe0: 61 28 69 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  a(i);.    sqlite
0ff0: 46 72 65 65 28 70 43 6f 6c 6c 29 3b 0a 20 20 7d  Free(pColl);.  }
1000: 0a 20 20 73 71 6c 69 74 65 33 48 61 73 68 43 6c  .  sqlite3HashCl
1010: 65 61 72 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65  ear(&db->aCollSe
1020: 71 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  q);.#ifndef SQLI
1030: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
1040: 41 42 4c 45 0a 20 20 66 6f 72 28 69 3d 73 71 6c  ABLE.  for(i=sql
1050: 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64 62  iteHashFirst(&db
1060: 2d 3e 61 4d 6f 64 75 6c 65 29 3b 20 69 3b 20 69  ->aModule); i; i
1070: 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28  =sqliteHashNext(
1080: 69 29 29 7b 0a 20 20 20 20 4d 6f 64 75 6c 65 20  i)){.    Module 
1090: 2a 70 4d 6f 64 20 3d 20 28 4d 6f 64 75 6c 65 20  *pMod = (Module 
10a0: 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61 74 61  *)sqliteHashData
10b0: 28 69 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 46  (i);.    sqliteF
10c0: 72 65 65 28 70 4d 6f 64 29 3b 0a 20 20 7d 0a 20  ree(pMod);.  }. 
10d0: 20 73 71 6c 69 74 65 33 48 61 73 68 43 6c 65 61   sqlite3HashClea
10e0: 72 28 26 64 62 2d 3e 61 4d 6f 64 75 6c 65 29 3b  r(&db->aModule);
10f0: 0a 23 65 6e 64 69 66 0a 0a 20 20 73 71 6c 69 74  .#endif..  sqlit
1100: 65 33 48 61 73 68 43 6c 65 61 72 28 26 64 62 2d  e3HashClear(&db-
1110: 3e 61 46 75 6e 63 29 3b 0a 20 20 73 71 6c 69 74  >aFunc);.  sqlit
1120: 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c 49  e3Error(db, SQLI
1130: 54 45 5f 4f 4b 2c 20 30 29 3b 20 2f 2a 20 44 65  TE_OK, 0); /* De
1140: 61 6c 6c 6f 63 61 74 65 73 20 61 6e 79 20 63 61  allocates any ca
1150: 63 68 65 64 20 65 72 72 6f 72 20 73 74 72 69 6e  ched error strin
1160: 67 73 2e 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  gs. */.  if( db-
1170: 3e 70 45 72 72 20 29 7b 0a 20 20 20 20 73 71 6c  >pErr ){.    sql
1180: 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 64 62  ite3ValueFree(db
1190: 2d 3e 70 45 72 72 29 3b 0a 20 20 7d 0a 20 20 73  ->pErr);.  }.  s
11a0: 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
11b0: 73 69 6f 6e 73 28 64 62 29 3b 0a 0a 20 20 64 62  sions(db);..  db
11c0: 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45  ->magic = SQLITE
11d0: 5f 4d 41 47 49 43 5f 45 52 52 4f 52 3b 0a 0a 20  _MAGIC_ERROR;.. 
11e0: 20 2f 2a 20 54 68 65 20 74 65 6d 70 2d 64 61 74   /* The temp-dat
11f0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
1200: 61 6c 6c 6f 63 61 74 65 64 20 64 69 66 66 65 72  allocated differ
1210: 65 6e 74 6c 79 20 66 72 6f 6d 20 74 68 65 20 6f  ently from the o
1220: 74 68 65 72 20 73 63 68 65 6d 61 0a 20 20 2a 2a  ther schema.  **
1230: 20 6f 62 6a 65 63 74 73 20 28 75 73 69 6e 67 20   objects (using 
1240: 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 20 64  sqliteMalloc() d
1250: 69 72 65 63 74 6c 79 2c 20 69 6e 73 74 65 61 64  irectly, instead
1260: 20 6f 66 20 73 71 6c 69 74 65 33 42 74 72 65 65   of sqlite3Btree
1270: 53 63 68 65 6d 61 28 29 29 2e 0a 20 20 2a 2a 20  Schema())..  ** 
1280: 53 6f 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62  So it needs to b
1290: 65 20 66 72 65 65 64 20 68 65 72 65 2e 20 54 6f  e freed here. To
12a0: 64 6f 3a 20 57 68 79 20 6e 6f 74 20 72 6f 6c 6c  do: Why not roll
12b0: 20 74 68 65 20 74 65 6d 70 20 73 63 68 65 6d 61   the temp schema
12c0: 20 69 6e 74 6f 0a 20 20 2a 2a 20 74 68 65 20 73   into.  ** the s
12d0: 61 6d 65 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63  ame sqliteMalloc
12e0: 28 29 20 61 73 20 74 68 65 20 6f 6e 65 20 74 68  () as the one th
12f0: 61 74 20 61 6c 6c 6f 63 61 74 65 73 20 74 68 65  at allocates the
1300: 20 64 61 74 61 62 61 73 65 20 0a 20 20 2a 2a 20   database .  ** 
1310: 73 74 72 75 63 74 75 72 65 3f 0a 20 20 2a 2f 0a  structure?.  */.
1320: 20 20 73 71 6c 69 74 65 46 72 65 65 28 64 62 2d    sqliteFree(db-
1330: 3e 61 44 62 5b 31 5d 2e 70 53 63 68 65 6d 61 29  >aDb[1].pSchema)
1340: 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28 64  ;.  sqliteFree(d
1350: 62 29 3b 0a 20 20 73 71 6c 69 74 65 33 52 65 6c  b);.  sqlite3Rel
1360: 65 61 73 65 54 68 72 65 61 64 44 61 74 61 28 29  easeThreadData()
1370: 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ;.  return SQLIT
1380: 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  E_OK;.}../*.** R
1390: 6f 6c 6c 62 61 63 6b 20 61 6c 6c 20 64 61 74 61  ollback all data
13a0: 62 61 73 65 20 66 69 6c 65 73 2e 0a 2a 2f 0a 76  base files..*/.v
13b0: 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62  oid sqlite3Rollb
13c0: 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 20 2a  ackAll(sqlite3 *
13d0: 64 62 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  db){.  int i;.  
13e0: 69 6e 74 20 69 6e 54 72 61 6e 73 20 3d 20 30 3b  int inTrans = 0;
13f0: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62  .  for(i=0; i<db
1400: 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20  ->nDb; i++){.   
1410: 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e   if( db->aDb[i].
1420: 70 42 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28  pBt ){.      if(
1430: 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49   sqlite3BtreeIsI
1440: 6e 54 72 61 6e 73 28 64 62 2d 3e 61 44 62 5b 69  nTrans(db->aDb[i
1450: 5d 2e 70 42 74 29 20 29 7b 0a 20 20 20 20 20 20  ].pBt) ){.      
1460: 20 20 69 6e 54 72 61 6e 73 20 3d 20 31 3b 0a 20    inTrans = 1;. 
1470: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c       }.      sql
1480: 69 74 65 33 42 74 72 65 65 52 6f 6c 6c 62 61 63  ite3BtreeRollbac
1490: 6b 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  k(db->aDb[i].pBt
14a0: 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62  );.      db->aDb
14b0: 5b 69 5d 2e 69 6e 54 72 61 6e 73 20 3d 20 30 3b  [i].inTrans = 0;
14c0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c  .    }.  }.  sql
14d0: 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b  ite3VtabRollback
14e0: 28 64 62 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e  (db);.  if( db->
14f0: 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 49 6e 74  flags&SQLITE_Int
1500: 65 72 6e 43 68 61 6e 67 65 73 20 29 7b 0a 20 20  ernChanges ){.  
1510: 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e    sqlite3ResetIn
1520: 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c  ternalSchema(db,
1530: 20 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49   0);.  }..  /* I
1540: 66 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 20 63  f one has been c
1550: 6f 6e 66 69 67 75 72 65 64 2c 20 69 6e 76 6f 6b  onfigured, invok
1560: 65 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 2d 68  e the rollback-h
1570: 6f 6f 6b 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ook callback */.
1580: 20 20 69 66 28 20 64 62 2d 3e 78 52 6f 6c 6c 62    if( db->xRollb
1590: 61 63 6b 43 61 6c 6c 62 61 63 6b 20 26 26 20 28  ackCallback && (
15a0: 69 6e 54 72 61 6e 73 20 7c 7c 20 21 64 62 2d 3e  inTrans || !db->
15b0: 61 75 74 6f 43 6f 6d 6d 69 74 29 20 29 7b 0a 20  autoCommit) ){. 
15c0: 20 20 20 64 62 2d 3e 78 52 6f 6c 6c 62 61 63 6b     db->xRollback
15d0: 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 52 6f  Callback(db->pRo
15e0: 6c 6c 62 61 63 6b 41 72 67 29 3b 0a 20 20 7d 0a  llbackArg);.  }.
15f0: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
1600: 61 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  a static string 
1610: 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74  that describes t
1620: 68 65 20 6b 69 6e 64 20 6f 66 20 65 72 72 6f 72  he kind of error
1630: 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68   specified in th
1640: 65 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 2a  e.** argument..*
1650: 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  /.const char *sq
1660: 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 20  lite3ErrStr(int 
1670: 72 63 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  rc){.  const cha
1680: 72 20 2a 7a 3b 0a 20 20 73 77 69 74 63 68 28 20  r *z;.  switch( 
1690: 72 63 20 26 20 30 78 66 66 20 29 7b 0a 20 20 20  rc & 0xff ){.   
16a0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52 4f 57   case SQLITE_ROW
16b0: 3a 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  :.    case SQLIT
16c0: 45 5f 44 4f 4e 45 3a 0a 20 20 20 20 63 61 73 65  E_DONE:.    case
16d0: 20 53 51 4c 49 54 45 5f 4f 4b 3a 20 20 20 20 20   SQLITE_OK:     
16e0: 20 20 20 20 7a 20 3d 20 22 6e 6f 74 20 61 6e 20      z = "not an 
16f0: 65 72 72 6f 72 22 3b 20 20 20 20 20 20 20 20 20  error";         
1700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1710: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
1720: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3a 20 20   SQLITE_ERROR:  
1730: 20 20 20 20 7a 20 3d 20 22 53 51 4c 20 6c 6f 67      z = "SQL log
1740: 69 63 20 65 72 72 6f 72 20 6f 72 20 6d 69 73 73  ic error or miss
1750: 69 6e 67 20 64 61 74 61 62 61 73 65 22 3b 20 20  ing database";  
1760: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
1770: 20 53 51 4c 49 54 45 5f 50 45 52 4d 3a 20 20 20   SQLITE_PERM:   
1780: 20 20 20 20 7a 20 3d 20 22 61 63 63 65 73 73 20      z = "access 
1790: 70 65 72 6d 69 73 73 69 6f 6e 20 64 65 6e 69 65  permission denie
17a0: 64 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  d";             
17b0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
17c0: 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3a 20 20   SQLITE_ABORT:  
17d0: 20 20 20 20 7a 20 3d 20 22 63 61 6c 6c 62 61 63      z = "callbac
17e0: 6b 20 72 65 71 75 65 73 74 65 64 20 71 75 65 72  k requested quer
17f0: 79 20 61 62 6f 72 74 22 3b 20 20 20 20 20 20 20  y abort";       
1800: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
1810: 20 53 51 4c 49 54 45 5f 42 55 53 59 3a 20 20 20   SQLITE_BUSY:   
1820: 20 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73      z = "databas
1830: 65 20 69 73 20 6c 6f 63 6b 65 64 22 3b 20 20 20  e is locked";   
1840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1850: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
1860: 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3a 20   SQLITE_LOCKED: 
1870: 20 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73      z = "databas
1880: 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65  e table is locke
1890: 64 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  d";             
18a0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
18b0: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3a 20 20   SQLITE_NOMEM:  
18c0: 20 20 20 20 7a 20 3d 20 22 6f 75 74 20 6f 66 20      z = "out of 
18d0: 6d 65 6d 6f 72 79 22 3b 20 20 20 20 20 20 20 20  memory";        
18e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
1900: 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59   SQLITE_READONLY
1910: 3a 20 20 20 7a 20 3d 20 22 61 74 74 65 6d 70 74  :   z = "attempt
1920: 20 74 6f 20 77 72 69 74 65 20 61 20 72 65 61 64   to write a read
1930: 6f 6e 6c 79 20 64 61 74 61 62 61 73 65 22 3b 20  only database"; 
1940: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
1950: 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50   SQLITE_INTERRUP
1960: 54 3a 20 20 7a 20 3d 20 22 69 6e 74 65 72 72 75  T:  z = "interru
1970: 70 74 65 64 22 3b 20 20 20 20 20 20 20 20 20 20  pted";          
1980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1990: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
19a0: 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 3a 20 20   SQLITE_IOERR:  
19b0: 20 20 20 20 7a 20 3d 20 22 64 69 73 6b 20 49 2f      z = "disk I/
19c0: 4f 20 65 72 72 6f 72 22 3b 20 20 20 20 20 20 20  O error";       
19d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
19f0: 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 3a   SQLITE_CORRUPT:
1a00: 20 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73      z = "databas
1a10: 65 20 64 69 73 6b 20 69 6d 61 67 65 20 69 73 20  e disk image is 
1a20: 6d 61 6c 66 6f 72 6d 65 64 22 3b 20 20 20 20 20  malformed";     
1a30: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
1a40: 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3a 20 20 20   SQLITE_FULL:   
1a50: 20 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73      z = "databas
1a60: 65 20 6f 72 20 64 69 73 6b 20 69 73 20 66 75 6c  e or disk is ful
1a70: 6c 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  l";             
1a80: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
1a90: 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e   SQLITE_CANTOPEN
1aa0: 3a 20 20 20 7a 20 3d 20 22 75 6e 61 62 6c 65 20  :   z = "unable 
1ab0: 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65  to open database
1ac0: 20 66 69 6c 65 22 3b 20 20 20 20 20 20 20 20 20   file";         
1ad0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
1ae0: 20 53 51 4c 49 54 45 5f 50 52 4f 54 4f 43 4f 4c   SQLITE_PROTOCOL
1af0: 3a 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73  :   z = "databas
1b00: 65 20 6c 6f 63 6b 69 6e 67 20 70 72 6f 74 6f 63  e locking protoc
1b10: 6f 6c 20 66 61 69 6c 75 72 65 22 3b 20 20 20 20  ol failure";    
1b20: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
1b30: 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 3a 20 20   SQLITE_EMPTY:  
1b40: 20 20 20 20 7a 20 3d 20 22 74 61 62 6c 65 20 63      z = "table c
1b50: 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 61 74 61 22  ontains no data"
1b60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b70: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
1b80: 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3a 20   SQLITE_SCHEMA: 
1b90: 20 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73      z = "databas
1ba0: 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61  e schema has cha
1bb0: 6e 67 65 64 22 3b 20 20 20 20 20 20 20 20 20 20  nged";          
1bc0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
1bd0: 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49   SQLITE_CONSTRAI
1be0: 4e 54 3a 20 7a 20 3d 20 22 63 6f 6e 73 74 72 61  NT: z = "constra
1bf0: 69 6e 74 20 66 61 69 6c 65 64 22 3b 20 20 20 20  int failed";    
1c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c10: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
1c20: 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48   SQLITE_MISMATCH
1c30: 3a 20 20 20 7a 20 3d 20 22 64 61 74 61 74 79 70  :   z = "datatyp
1c40: 65 20 6d 69 73 6d 61 74 63 68 22 3b 20 20 20 20  e mismatch";    
1c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c60: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
1c70: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3a 20   SQLITE_MISUSE: 
1c80: 20 20 20 20 7a 20 3d 20 22 6c 69 62 72 61 72 79      z = "library
1c90: 20 72 6f 75 74 69 6e 65 20 63 61 6c 6c 65 64 20   routine called 
1ca0: 6f 75 74 20 6f 66 20 73 65 71 75 65 6e 63 65 22  out of sequence"
1cb0: 3b 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65  ;break;.    case
1cc0: 20 53 51 4c 49 54 45 5f 4e 4f 4c 46 53 3a 20 20   SQLITE_NOLFS:  
1cd0: 20 20 20 20 7a 20 3d 20 22 6b 65 72 6e 65 6c 20      z = "kernel 
1ce0: 6c 61 63 6b 73 20 6c 61 72 67 65 20 66 69 6c 65  lacks large file
1cf0: 20 73 75 70 70 6f 72 74 22 3b 20 20 20 20 20 20   support";      
1d00: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
1d10: 20 53 51 4c 49 54 45 5f 41 55 54 48 3a 20 20 20   SQLITE_AUTH:   
1d20: 20 20 20 20 7a 20 3d 20 22 61 75 74 68 6f 72 69      z = "authori
1d30: 7a 61 74 69 6f 6e 20 64 65 6e 69 65 64 22 3b 20  zation denied"; 
1d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d50: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
1d60: 20 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54 3a 20   SQLITE_FORMAT: 
1d70: 20 20 20 20 7a 20 3d 20 22 61 75 78 69 6c 69 61      z = "auxilia
1d80: 72 79 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d  ry database form
1d90: 61 74 20 65 72 72 6f 72 22 3b 20 20 20 20 20 20  at error";      
1da0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
1db0: 20 53 51 4c 49 54 45 5f 52 41 4e 47 45 3a 20 20   SQLITE_RANGE:  
1dc0: 20 20 20 20 7a 20 3d 20 22 62 69 6e 64 20 6f 72      z = "bind or
1dd0: 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 6f 75   column index ou
1de0: 74 20 6f 66 20 72 61 6e 67 65 22 3b 20 20 20 20  t of range";    
1df0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
1e00: 20 53 51 4c 49 54 45 5f 4e 4f 54 41 44 42 3a 20   SQLITE_NOTADB: 
1e10: 20 20 20 20 7a 20 3d 20 22 66 69 6c 65 20 69 73      z = "file is
1e20: 20 65 6e 63 72 79 70 74 65 64 20 6f 72 20 69 73   encrypted or is
1e30: 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65 22   not a database"
1e40: 3b 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61  ;break;.    defa
1e50: 75 6c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  ult:            
1e60: 20 20 20 20 7a 20 3d 20 22 75 6e 6b 6e 6f 77 6e      z = "unknown
1e70: 20 65 72 72 6f 72 22 3b 20 20 20 20 20 20 20 20   error";        
1e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e90: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 72 65   break;.  }.  re
1ea0: 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn z;.}../*.**
1eb0: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 6d   This routine im
1ec0: 70 6c 65 6d 65 6e 74 73 20 61 20 62 75 73 79 20  plements a busy 
1ed0: 63 61 6c 6c 62 61 63 6b 20 74 68 61 74 20 73 6c  callback that sl
1ee0: 65 65 70 73 20 61 6e 64 20 74 72 69 65 73 0a 2a  eeps and tries.*
1ef0: 2a 20 61 67 61 69 6e 20 75 6e 74 69 6c 20 61 20  * again until a 
1f00: 74 69 6d 65 6f 75 74 20 76 61 6c 75 65 20 69 73  timeout value is
1f10: 20 72 65 61 63 68 65 64 2e 20 20 54 68 65 20 74   reached.  The t
1f20: 69 6d 65 6f 75 74 20 76 61 6c 75 65 20 69 73 0a  imeout value is.
1f30: 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75  ** an integer nu
1f40: 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63  mber of millisec
1f50: 6f 6e 64 73 20 70 61 73 73 65 64 20 69 6e 20 61  onds passed in a
1f60: 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61  s the first.** a
1f70: 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74  rgument..*/.stat
1f80: 69 63 20 69 6e 74 20 73 71 6c 69 74 65 44 65 66  ic int sqliteDef
1f90: 61 75 6c 74 42 75 73 79 43 61 6c 6c 62 61 63 6b  aultBusyCallback
1fa0: 28 0a 20 76 6f 69 64 20 2a 70 74 72 2c 20 20 20  (. void *ptr,   
1fb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1fc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
1fd0: 6f 6e 20 2a 2f 0a 20 69 6e 74 20 63 6f 75 6e 74  on */. int count
1fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d  /* Number of tim
2000: 65 73 20 74 61 62 6c 65 20 68 61 73 20 62 65 65  es table has bee
2010: 6e 20 62 75 73 79 20 2a 2f 0a 29 7b 0a 23 69 66  n busy */.){.#if
2020: 20 4f 53 5f 57 49 4e 20 7c 7c 20 28 64 65 66 69   OS_WIN || (defi
2030: 6e 65 64 28 48 41 56 45 5f 55 53 4c 45 45 50 29  ned(HAVE_USLEEP)
2040: 20 26 26 20 48 41 56 45 5f 55 53 4c 45 45 50 29   && HAVE_USLEEP)
2050: 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
2060: 75 38 20 64 65 6c 61 79 73 5b 5d 20 3d 0a 20 20  u8 delays[] =.  
2070: 20 20 20 7b 20 31 2c 20 32 2c 20 35 2c 20 31 30     { 1, 2, 5, 10
2080: 2c 20 31 35 2c 20 32 30 2c 20 32 35 2c 20 32 35  , 15, 20, 25, 25
2090: 2c 20 20 32 35 2c 20 20 35 30 2c 20 20 35 30 2c  ,  25,  50,  50,
20a0: 20 31 30 30 20 7d 3b 0a 20 20 73 74 61 74 69 63   100 };.  static
20b0: 20 63 6f 6e 73 74 20 75 38 20 74 6f 74 61 6c 73   const u8 totals
20c0: 5b 5d 20 3d 0a 20 20 20 20 20 7b 20 30 2c 20 31  [] =.     { 0, 1
20d0: 2c 20 33 2c 20 20 38 2c 20 31 38 2c 20 33 33 2c  , 3,  8, 18, 33,
20e0: 20 35 33 2c 20 37 38 2c 20 31 30 33 2c 20 31 32   53, 78, 103, 12
20f0: 38 2c 20 31 37 38 2c 20 32 32 38 20 7d 3b 0a 23  8, 178, 228 };.#
2100: 20 64 65 66 69 6e 65 20 4e 44 45 4c 41 59 20 28   define NDELAY (
2110: 73 69 7a 65 6f 66 28 64 65 6c 61 79 73 29 2f 73  sizeof(delays)/s
2120: 69 7a 65 6f 66 28 64 65 6c 61 79 73 5b 30 5d 29  izeof(delays[0])
2130: 29 0a 20 20 69 6e 74 20 74 69 6d 65 6f 75 74 20  ).  int timeout 
2140: 3d 20 28 28 73 71 6c 69 74 65 33 20 2a 29 70 74  = ((sqlite3 *)pt
2150: 72 29 2d 3e 62 75 73 79 54 69 6d 65 6f 75 74 3b  r)->busyTimeout;
2160: 0a 20 20 69 6e 74 20 64 65 6c 61 79 2c 20 70 72  .  int delay, pr
2170: 69 6f 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  ior;..  assert( 
2180: 63 6f 75 6e 74 3e 3d 30 20 29 3b 0a 20 20 69 66  count>=0 );.  if
2190: 28 20 63 6f 75 6e 74 20 3c 20 4e 44 45 4c 41 59  ( count < NDELAY
21a0: 20 29 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20   ){.    delay = 
21b0: 64 65 6c 61 79 73 5b 63 6f 75 6e 74 5d 3b 0a 20  delays[count];. 
21c0: 20 20 20 70 72 69 6f 72 20 3d 20 74 6f 74 61 6c     prior = total
21d0: 73 5b 63 6f 75 6e 74 5d 3b 0a 20 20 7d 65 6c 73  s[count];.  }els
21e0: 65 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20 64  e{.    delay = d
21f0: 65 6c 61 79 73 5b 4e 44 45 4c 41 59 2d 31 5d 3b  elays[NDELAY-1];
2200: 0a 20 20 20 20 70 72 69 6f 72 20 3d 20 74 6f 74  .    prior = tot
2210: 61 6c 73 5b 4e 44 45 4c 41 59 2d 31 5d 20 2b 20  als[NDELAY-1] + 
2220: 64 65 6c 61 79 2a 28 63 6f 75 6e 74 2d 28 4e 44  delay*(count-(ND
2230: 45 4c 41 59 2d 31 29 29 3b 0a 20 20 7d 0a 20 20  ELAY-1));.  }.  
2240: 69 66 28 20 70 72 69 6f 72 20 2b 20 64 65 6c 61  if( prior + dela
2250: 79 20 3e 20 74 69 6d 65 6f 75 74 20 29 7b 0a 20  y > timeout ){. 
2260: 20 20 20 64 65 6c 61 79 20 3d 20 74 69 6d 65 6f     delay = timeo
2270: 75 74 20 2d 20 70 72 69 6f 72 3b 0a 20 20 20 20  ut - prior;.    
2280: 69 66 28 20 64 65 6c 61 79 3c 3d 30 20 29 20 72  if( delay<=0 ) r
2290: 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 73  eturn 0;.  }.  s
22a0: 71 6c 69 74 65 33 4f 73 53 6c 65 65 70 28 64 65  qlite3OsSleep(de
22b0: 6c 61 79 29 3b 0a 20 20 72 65 74 75 72 6e 20 31  lay);.  return 1
22c0: 3b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 74 69  ;.#else.  int ti
22d0: 6d 65 6f 75 74 20 3d 20 28 28 73 71 6c 69 74 65  meout = ((sqlite
22e0: 33 20 2a 29 70 74 72 29 2d 3e 62 75 73 79 54 69  3 *)ptr)->busyTi
22f0: 6d 65 6f 75 74 3b 0a 20 20 69 66 28 20 28 63 6f  meout;.  if( (co
2300: 75 6e 74 2b 31 29 2a 31 30 30 30 20 3e 20 74 69  unt+1)*1000 > ti
2310: 6d 65 6f 75 74 20 29 7b 0a 20 20 20 20 72 65 74  meout ){.    ret
2320: 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c  urn 0;.  }.  sql
2330: 69 74 65 33 4f 73 53 6c 65 65 70 28 31 30 30 30  ite3OsSleep(1000
2340: 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 23  );.  return 1;.#
2350: 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49  endif.}../*.** I
2360: 6e 76 6f 6b 65 20 74 68 65 20 67 69 76 65 6e 20  nvoke the given 
2370: 62 75 73 79 20 68 61 6e 64 6c 65 72 2e 0a 2a 2a  busy handler..**
2380: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
2390: 20 69 73 20 63 61 6c 6c 65 64 20 77 68 65 6e 20   is called when 
23a0: 61 6e 20 6f 70 65 72 61 74 69 6f 6e 20 66 61 69  an operation fai
23b0: 6c 65 64 20 77 69 74 68 20 61 20 6c 6f 63 6b 2e  led with a lock.
23c0: 0a 2a 2a 20 49 66 20 74 68 69 73 20 72 6f 75 74  .** If this rout
23d0: 69 6e 65 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d  ine returns non-
23e0: 7a 65 72 6f 2c 20 74 68 65 20 6c 6f 63 6b 20 69  zero, the lock i
23f0: 73 20 72 65 74 72 69 65 64 2e 20 20 49 66 20 69  s retried.  If i
2400: 74 0a 2a 2a 20 72 65 74 75 72 6e 73 20 30 2c 20  t.** returns 0, 
2410: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 62  the operation ab
2420: 6f 72 74 73 20 77 69 74 68 20 61 6e 20 53 51 4c  orts with an SQL
2430: 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72 2e 0a  ITE_BUSY error..
2440: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  */.int sqlite3In
2450: 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28  vokeBusyHandler(
2460: 42 75 73 79 48 61 6e 64 6c 65 72 20 2a 70 29 7b  BusyHandler *p){
2470: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 66 28  .  int rc;.  if(
2480: 20 70 3d 3d 30 20 7c 7c 20 70 2d 3e 78 46 75 6e   p==0 || p->xFun
2490: 63 3d 3d 30 20 7c 7c 20 70 2d 3e 6e 42 75 73 79  c==0 || p->nBusy
24a0: 3c 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  <0 ) return 0;. 
24b0: 20 72 63 20 3d 20 70 2d 3e 78 46 75 6e 63 28 70   rc = p->xFunc(p
24c0: 2d 3e 70 41 72 67 2c 20 70 2d 3e 6e 42 75 73 79  ->pArg, p->nBusy
24d0: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 30 20 29  );.  if( rc==0 )
24e0: 7b 0a 20 20 20 20 70 2d 3e 6e 42 75 73 79 20 3d  {.    p->nBusy =
24f0: 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20   -1;.  }else{.  
2500: 20 20 70 2d 3e 6e 42 75 73 79 2b 2b 3b 0a 20 20    p->nBusy++;.  
2510: 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 20 0a  }.  return rc; .
2520: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  }../*.** This ro
2530: 75 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 62  utine sets the b
2540: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  usy callback for
2550: 20 61 6e 20 53 71 6c 69 74 65 20 64 61 74 61 62   an Sqlite datab
2560: 61 73 65 20 74 6f 20 74 68 65 0a 2a 2a 20 67 69  ase to the.** gi
2570: 76 65 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e  ven callback fun
2580: 63 74 69 6f 6e 20 77 69 74 68 20 74 68 65 20 67  ction with the g
2590: 69 76 65 6e 20 61 72 67 75 6d 65 6e 74 2e 0a 2a  iven argument..*
25a0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 75  /.int sqlite3_bu
25b0: 73 79 5f 68 61 6e 64 6c 65 72 28 0a 20 20 73 71  sy_handler(.  sq
25c0: 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20 69 6e 74  lite3 *db,.  int
25d0: 20 28 2a 78 42 75 73 79 29 28 76 6f 69 64 2a 2c   (*xBusy)(void*,
25e0: 69 6e 74 29 2c 0a 20 20 76 6f 69 64 20 2a 70 41  int),.  void *pA
25f0: 72 67 0a 29 7b 0a 20 20 69 66 28 20 73 71 6c 69  rg.){.  if( sqli
2600: 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 64  te3SafetyCheck(d
2610: 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  b) ){.    return
2620: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a   SQLITE_MISUSE;.
2630: 20 20 7d 0a 20 20 64 62 2d 3e 62 75 73 79 48 61    }.  db->busyHa
2640: 6e 64 6c 65 72 2e 78 46 75 6e 63 20 3d 20 78 42  ndler.xFunc = xB
2650: 75 73 79 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48  usy;.  db->busyH
2660: 61 6e 64 6c 65 72 2e 70 41 72 67 20 3d 20 70 41  andler.pArg = pA
2670: 72 67 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61  rg;.  db->busyHa
2680: 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b  ndler.nBusy = 0;
2690: 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  .  return SQLITE
26a0: 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  _OK;.}..#ifndef 
26b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
26c0: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 2f 2a  RESS_CALLBACK./*
26d0: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
26e0: 20 73 65 74 73 20 74 68 65 20 70 72 6f 67 72 65   sets the progre
26f0: 73 73 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  ss callback for 
2700: 61 6e 20 53 71 6c 69 74 65 20 64 61 74 61 62 61  an Sqlite databa
2710: 73 65 20 74 6f 20 74 68 65 0a 2a 2a 20 67 69 76  se to the.** giv
2720: 65 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63  en callback func
2730: 74 69 6f 6e 20 77 69 74 68 20 74 68 65 20 67 69  tion with the gi
2740: 76 65 6e 20 61 72 67 75 6d 65 6e 74 2e 20 54 68  ven argument. Th
2750: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
2760: 61 63 6b 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 69  ack will.** be i
2770: 6e 76 6f 6b 65 64 20 65 76 65 72 79 20 6e 4f 70  nvoked every nOp
2780: 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 76 6f  s opcodes..*/.vo
2790: 69 64 20 73 71 6c 69 74 65 33 5f 70 72 6f 67 72  id sqlite3_progr
27a0: 65 73 73 5f 68 61 6e 64 6c 65 72 28 0a 20 20 73  ess_handler(.  s
27b0: 71 6c 69 74 65 33 20 2a 64 62 2c 20 0a 20 20 69  qlite3 *db, .  i
27c0: 6e 74 20 6e 4f 70 73 2c 0a 20 20 69 6e 74 20 28  nt nOps,.  int (
27d0: 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64  *xProgress)(void
27e0: 2a 29 2c 20 0a 20 20 76 6f 69 64 20 2a 70 41 72  *), .  void *pAr
27f0: 67 0a 29 7b 0a 20 20 69 66 28 20 21 73 71 6c 69  g.){.  if( !sqli
2800: 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 64  te3SafetyCheck(d
2810: 62 29 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 4f  b) ){.    if( nO
2820: 70 73 3e 30 20 29 7b 0a 20 20 20 20 20 20 64 62  ps>0 ){.      db
2830: 2d 3e 78 50 72 6f 67 72 65 73 73 20 3d 20 78 50  ->xProgress = xP
2840: 72 6f 67 72 65 73 73 3b 0a 20 20 20 20 20 20 64  rogress;.      d
2850: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20  b->nProgressOps 
2860: 3d 20 6e 4f 70 73 3b 0a 20 20 20 20 20 20 64 62  = nOps;.      db
2870: 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 20 3d  ->pProgressArg =
2880: 20 70 41 72 67 3b 0a 20 20 20 20 7d 65 6c 73 65   pArg;.    }else
2890: 7b 0a 20 20 20 20 20 20 64 62 2d 3e 78 50 72 6f  {.      db->xPro
28a0: 67 72 65 73 73 20 3d 20 30 3b 0a 20 20 20 20 20  gress = 0;.     
28b0: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
28c0: 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 64 62 2d  s = 0;.      db-
28d0: 3e 70 50 72 6f 67 72 65 73 73 41 72 67 20 3d 20  >pProgressArg = 
28e0: 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 23  0;.    }.  }.}.#
28f0: 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68  endif.../*.** Th
2900: 69 73 20 72 6f 75 74 69 6e 65 20 69 6e 73 74 61  is routine insta
2910: 6c 6c 73 20 61 20 64 65 66 61 75 6c 74 20 62 75  lls a default bu
2920: 73 79 20 68 61 6e 64 6c 65 72 20 74 68 61 74 20  sy handler that 
2930: 77 61 69 74 73 20 66 6f 72 20 74 68 65 0a 2a 2a  waits for the.**
2940: 20 73 70 65 63 69 66 69 65 64 20 6e 75 6d 62 65   specified numbe
2950: 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64  r of millisecond
2960: 73 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  s before returni
2970: 6e 67 20 30 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  ng 0..*/.int sql
2980: 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75  ite3_busy_timeou
2990: 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69  t(sqlite3 *db, i
29a0: 6e 74 20 6d 73 29 7b 0a 20 20 69 66 28 20 73 71  nt ms){.  if( sq
29b0: 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
29c0: 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75  (db) ){.    retu
29d0: 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  rn SQLITE_MISUSE
29e0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6d 73 3e 30  ;.  }.  if( ms>0
29f0: 20 29 7b 0a 20 20 20 20 64 62 2d 3e 62 75 73 79   ){.    db->busy
2a00: 54 69 6d 65 6f 75 74 20 3d 20 6d 73 3b 0a 20 20  Timeout = ms;.  
2a10: 20 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 68    sqlite3_busy_h
2a20: 61 6e 64 6c 65 72 28 64 62 2c 20 73 71 6c 69 74  andler(db, sqlit
2a30: 65 44 65 66 61 75 6c 74 42 75 73 79 43 61 6c 6c  eDefaultBusyCall
2a40: 62 61 63 6b 2c 20 28 76 6f 69 64 2a 29 64 62 29  back, (void*)db)
2a50: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
2a60: 71 6c 69 74 65 33 5f 62 75 73 79 5f 68 61 6e 64  qlite3_busy_hand
2a70: 6c 65 72 28 64 62 2c 20 30 2c 20 30 29 3b 0a 20  ler(db, 0, 0);. 
2a80: 20 7d 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49   }.  return SQLI
2a90: 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  TE_OK;.}../*.** 
2aa0: 43 61 75 73 65 20 61 6e 79 20 70 65 6e 64 69 6e  Cause any pendin
2ab0: 67 20 6f 70 65 72 61 74 69 6f 6e 20 74 6f 20 73  g operation to s
2ac0: 74 6f 70 20 61 74 20 69 74 73 20 65 61 72 6c 69  top at its earli
2ad0: 65 73 74 20 6f 70 70 6f 72 74 75 6e 69 74 79 2e  est opportunity.
2ae0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
2af0: 5f 69 6e 74 65 72 72 75 70 74 28 73 71 6c 69 74  _interrupt(sqlit
2b00: 65 33 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 64  e3 *db){.  if( d
2b10: 62 20 26 26 20 28 64 62 2d 3e 6d 61 67 69 63 3d  b && (db->magic=
2b20: 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50  =SQLITE_MAGIC_OP
2b30: 45 4e 20 7c 7c 20 64 62 2d 3e 6d 61 67 69 63 3d  EN || db->magic=
2b40: 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55  =SQLITE_MAGIC_BU
2b50: 53 59 29 20 29 7b 0a 20 20 20 20 64 62 2d 3e 75  SY) ){.    db->u
2b60: 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
2b70: 3d 20 31 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  = 1;.  }.}../*.*
2b80: 2a 20 4d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  * Memory allocat
2b90: 69 6f 6e 20 72 6f 75 74 69 6e 65 73 20 74 68 61  ion routines tha
2ba0: 74 20 75 73 65 20 53 51 4c 69 74 65 73 20 69 6e  t use SQLites in
2bb0: 74 65 72 6e 61 6c 20 6d 65 6d 6f 72 79 0a 2a 2a  ternal memory.**
2bc0: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f   memory allocato
2bd0: 72 2e 20 20 44 65 70 65 6e 64 69 6e 67 20 6f 6e  r.  Depending on
2be0: 20 68 6f 77 20 53 51 4c 69 74 65 20 69 73 20 63   how SQLite is c
2bf0: 6f 6d 70 69 6c 65 64 2c 20 74 68 65 0a 2a 2a 20  ompiled, the.** 
2c00: 69 6e 74 65 72 6e 61 6c 20 6d 65 6d 6f 72 79 20  internal memory 
2c10: 61 6c 6c 6f 63 61 74 6f 72 20 6d 69 67 68 74 20  allocator might 
2c20: 62 65 20 6a 75 73 74 20 61 6e 20 61 6c 69 61 73  be just an alias
2c30: 20 66 6f 72 20 74 68 65 0a 2a 2a 20 73 79 73 74   for the.** syst
2c40: 65 6d 20 64 65 66 61 75 6c 74 20 6d 61 6c 6c 6f  em default mallo
2c50: 63 2f 72 65 61 6c 6c 6f 63 2f 66 72 65 65 2e 20  c/realloc/free. 
2c60: 20 4f 72 20 74 68 65 20 62 75 69 6c 74 2d 69 6e   Or the built-in
2c70: 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6d 69   allocator.** mi
2c80: 67 68 74 20 64 6f 20 65 78 74 72 61 20 73 74 75  ght do extra stu
2c90: 66 66 20 6c 69 6b 65 20 70 75 74 20 73 65 6e 74  ff like put sent
2ca0: 69 6e 61 6c 73 20 61 72 6f 75 6e 64 20 62 75 66  inals around buf
2cb0: 66 65 72 73 20 74 6f 20 0a 2a 2a 20 63 68 65 63  fers to .** chec
2cc0: 6b 20 66 6f 72 20 6f 76 65 72 72 75 6e 73 20 6f  k for overruns o
2cd0: 72 20 6c 6f 6f 6b 20 66 6f 72 20 6d 65 6d 6f 72  r look for memor
2ce0: 79 20 6c 65 61 6b 73 2e 0a 2a 2a 0a 2a 2a 20 55  y leaks..**.** U
2cf0: 73 65 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  se sqlite3_free(
2d00: 29 20 74 6f 20 66 72 65 65 20 6d 65 6d 6f 72 79  ) to free memory
2d10: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
2d20: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 29 2e 0a  ite3_mprintf()..
2d30: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f  */.void sqlite3_
2d40: 66 72 65 65 28 76 6f 69 64 20 2a 70 29 7b 20 69  free(void *p){ i
2d50: 66 28 20 70 20 29 20 73 71 6c 69 74 65 33 4f 73  f( p ) sqlite3Os
2d60: 46 72 65 65 28 70 29 3b 20 7d 0a 76 6f 69 64 20  Free(p); }.void 
2d70: 2a 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28  *sqlite3_malloc(
2d80: 69 6e 74 20 6e 42 79 74 65 29 7b 20 72 65 74 75  int nByte){ retu
2d90: 72 6e 20 6e 42 79 74 65 3e 30 20 3f 20 73 71 6c  rn nByte>0 ? sql
2da0: 69 74 65 33 4f 73 4d 61 6c 6c 6f 63 28 6e 42 79  ite3OsMalloc(nBy
2db0: 74 65 29 20 3a 20 30 3b 20 7d 0a 76 6f 69 64 20  te) : 0; }.void 
2dc0: 2a 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63  *sqlite3_realloc
2dd0: 28 76 6f 69 64 20 2a 70 4f 6c 64 2c 20 69 6e 74  (void *pOld, int
2de0: 20 6e 42 79 74 65 29 7b 20 0a 20 20 69 66 28 20   nByte){ .  if( 
2df0: 70 4f 6c 64 20 29 7b 0a 20 20 20 20 69 66 28 20  pOld ){.    if( 
2e00: 6e 42 79 74 65 3e 30 20 29 7b 0a 20 20 20 20 20  nByte>0 ){.     
2e10: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 4f   return sqlite3O
2e20: 73 52 65 61 6c 6c 6f 63 28 70 4f 6c 64 2c 20 6e  sRealloc(pOld, n
2e30: 42 79 74 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65  Byte);.    }else
2e40: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f  {.      sqlite3O
2e50: 73 46 72 65 65 28 70 4f 6c 64 29 3b 0a 20 20 20  sFree(pOld);.   
2e60: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20     return 0;.   
2e70: 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
2e80: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 6d  return sqlite3_m
2e90: 61 6c 6c 6f 63 28 6e 42 79 74 65 29 3b 0a 20 20  alloc(nByte);.  
2ea0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  }.}../*.** This 
2eb0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 78 61 63  function is exac
2ec0: 74 6c 79 20 74 68 65 20 73 61 6d 65 20 61 73 20  tly the same as 
2ed0: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
2ee0: 75 6e 63 74 69 6f 6e 28 29 2c 20 65 78 63 65 70  unction(), excep
2ef0: 74 0a 2a 2a 20 74 68 61 74 20 69 74 20 69 73 20  t.** that it is 
2f00: 64 65 73 69 67 6e 65 64 20 74 6f 20 62 65 20 63  designed to be c
2f10: 61 6c 6c 65 64 20 62 79 20 69 6e 74 65 72 6e 61  alled by interna
2f20: 6c 20 63 6f 64 65 2e 20 54 68 65 20 64 69 66 66  l code. The diff
2f30: 65 72 65 6e 63 65 20 69 73 0a 2a 2a 20 74 68 61  erence is.** tha
2f40: 74 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20  t if a malloc() 
2f50: 66 61 69 6c 73 20 69 6e 20 73 71 6c 69 74 65 33  fails in sqlite3
2f60: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
2f70: 28 29 2c 20 61 6e 20 65 72 72 6f 72 20 63 6f 64  (), an error cod
2f80: 65 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64  e.** is returned
2f90: 20 61 6e 64 20 74 68 65 20 6d 61 6c 6c 6f 63 46   and the mallocF
2fa0: 61 69 6c 65 64 20 66 6c 61 67 20 63 6c 65 61 72  ailed flag clear
2fb0: 65 64 2e 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ed. .*/.int sqli
2fc0: 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 0a 20  te3CreateFunc(. 
2fd0: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20   sqlite3 *db,.  
2fe0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 75 6e  const char *zFun
2ff0: 63 74 69 6f 6e 4e 61 6d 65 2c 0a 20 20 69 6e 74  ctionName,.  int
3000: 20 6e 41 72 67 2c 0a 20 20 69 6e 74 20 65 6e 63   nArg,.  int enc
3010: 2c 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  ,.  void *pUserD
3020: 61 74 61 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46  ata,.  void (*xF
3030: 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  unc)(sqlite3_con
3040: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
3050: 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76  3_value **),.  v
3060: 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c  oid (*xStep)(sql
3070: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
3080: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
3090: 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46  **),.  void (*xF
30a0: 69 6e 61 6c 29 28 73 71 6c 69 74 65 33 5f 63 6f  inal)(sqlite3_co
30b0: 6e 74 65 78 74 2a 29 0a 29 7b 0a 20 20 46 75 6e  ntext*).){.  Fun
30c0: 63 44 65 66 20 2a 70 3b 0a 20 20 69 6e 74 20 6e  cDef *p;.  int n
30d0: 4e 61 6d 65 3b 0a 0a 20 20 69 66 28 20 73 71 6c  Name;..  if( sql
30e0: 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28  ite3SafetyCheck(
30f0: 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  db) ){.    retur
3100: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b  n SQLITE_MISUSE;
3110: 0a 20 20 7d 0a 20 20 69 66 28 20 7a 46 75 6e 63  .  }.  if( zFunc
3120: 74 69 6f 6e 4e 61 6d 65 3d 3d 30 20 7c 7c 0a 20  tionName==0 ||. 
3130: 20 20 20 20 20 28 78 46 75 6e 63 20 26 26 20 28       (xFunc && (
3140: 78 46 69 6e 61 6c 20 7c 7c 20 78 53 74 65 70 29  xFinal || xStep)
3150: 29 20 7c 7c 20 0a 20 20 20 20 20 20 28 21 78 46  ) || .      (!xF
3160: 75 6e 63 20 26 26 20 28 78 46 69 6e 61 6c 20 26  unc && (xFinal &
3170: 26 20 21 78 53 74 65 70 29 29 20 7c 7c 0a 20 20  & !xStep)) ||.  
3180: 20 20 20 20 28 21 78 46 75 6e 63 20 26 26 20 28      (!xFunc && (
3190: 21 78 46 69 6e 61 6c 20 26 26 20 78 53 74 65 70  !xFinal && xStep
31a0: 29 29 20 7c 7c 0a 20 20 20 20 20 20 28 6e 41 72  )) ||.      (nAr
31b0: 67 3c 2d 31 20 7c 7c 20 6e 41 72 67 3e 31 32 37  g<-1 || nArg>127
31c0: 29 20 7c 7c 0a 20 20 20 20 20 20 28 32 35 35 3c  ) ||.      (255<
31d0: 28 6e 4e 61 6d 65 20 3d 20 73 74 72 6c 65 6e 28  (nName = strlen(
31e0: 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 29 29 29  zFunctionName)))
31f0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45   ){.    sqlite3E
3200: 72 72 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f  rror(db, SQLITE_
3210: 45 52 52 4f 52 2c 20 22 62 61 64 20 70 61 72 61  ERROR, "bad para
3220: 6d 65 74 65 72 73 22 29 3b 0a 20 20 20 20 72 65  meters");.    re
3230: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
3240: 52 3b 0a 20 20 7d 0a 20 20 0a 23 69 66 6e 64 65  R;.  }.  .#ifnde
3250: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
3260: 46 31 36 0a 20 20 2f 2a 20 49 66 20 53 51 4c 49  F16.  /* If SQLI
3270: 54 45 5f 55 54 46 31 36 20 69 73 20 73 70 65 63  TE_UTF16 is spec
3280: 69 66 69 65 64 20 61 73 20 74 68 65 20 65 6e 63  ified as the enc
3290: 6f 64 69 6e 67 20 74 79 70 65 2c 20 74 72 61 6e  oding type, tran
32a0: 73 66 6f 72 6d 20 74 68 69 73 0a 20 20 2a 2a 20  sform this.  ** 
32b0: 74 6f 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45  to one of SQLITE
32c0: 5f 55 54 46 31 36 4c 45 20 6f 72 20 53 51 4c 49  _UTF16LE or SQLI
32d0: 54 45 5f 55 54 46 31 36 42 45 20 75 73 69 6e 67  TE_UTF16BE using
32e0: 20 74 68 65 0a 20 20 2a 2a 20 53 51 4c 49 54 45   the.  ** SQLITE
32f0: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 6d 61 63  _UTF16NATIVE mac
3300: 72 6f 2e 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ro. SQLITE_UTF16
3310: 20 69 73 20 6e 6f 74 20 75 73 65 64 20 69 6e 74   is not used int
3320: 65 72 6e 61 6c 6c 79 2e 0a 20 20 2a 2a 0a 20 20  ernally..  **.  
3330: 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 41 4e 59  ** If SQLITE_ANY
3340: 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 61   is specified, a
3350: 64 64 20 74 68 72 65 65 20 76 65 72 73 69 6f 6e  dd three version
3360: 73 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  s of the functio
3370: 6e 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 68 61  n.  ** to the ha
3380: 73 68 20 74 61 62 6c 65 2e 0a 20 20 2a 2f 0a 20  sh table..  */. 
3390: 20 69 66 28 20 65 6e 63 3d 3d 53 51 4c 49 54 45   if( enc==SQLITE
33a0: 5f 55 54 46 31 36 20 29 7b 0a 20 20 20 20 65 6e  _UTF16 ){.    en
33b0: 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 31 36  c = SQLITE_UTF16
33c0: 4e 41 54 49 56 45 3b 0a 20 20 7d 65 6c 73 65 20  NATIVE;.  }else 
33d0: 69 66 28 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  if( enc==SQLITE_
33e0: 41 4e 59 20 29 7b 0a 20 20 20 20 69 6e 74 20 72  ANY ){.    int r
33f0: 63 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  c;.    rc = sqli
3400: 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 64 62  te3CreateFunc(db
3410: 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c  , zFunctionName,
3420: 20 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54   nArg, SQLITE_UT
3430: 46 38 2c 0a 20 20 20 20 20 20 20 20 20 70 55 73  F8,.         pUs
3440: 65 72 44 61 74 61 2c 20 78 46 75 6e 63 2c 20 78  erData, xFunc, x
3450: 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 3b 0a 20  Step, xFinal);. 
3460: 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
3470: 45 5f 4f 4b 20 29 20 72 65 74 75 72 6e 20 72 63  E_OK ) return rc
3480: 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
3490: 65 33 43 72 65 61 74 65 46 75 6e 63 28 64 62 2c  e3CreateFunc(db,
34a0: 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20   zFunctionName, 
34b0: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
34c0: 31 36 4c 45 2c 0a 20 20 20 20 20 20 20 20 70 55  16LE,.        pU
34d0: 73 65 72 44 61 74 61 2c 20 78 46 75 6e 63 2c 20  serData, xFunc, 
34e0: 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 3b 0a  xStep, xFinal);.
34f0: 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
3500: 54 45 5f 4f 4b 20 29 20 72 65 74 75 72 6e 20 72  TE_OK ) return r
3510: 63 3b 0a 20 20 20 20 65 6e 63 20 3d 20 53 51 4c  c;.    enc = SQL
3520: 49 54 45 5f 55 54 46 31 36 42 45 3b 0a 20 20 7d  ITE_UTF16BE;.  }
3530: 0a 23 65 6c 73 65 0a 20 20 65 6e 63 20 3d 20 53  .#else.  enc = S
3540: 51 4c 49 54 45 5f 55 54 46 38 3b 0a 23 65 6e 64  QLITE_UTF8;.#end
3550: 69 66 0a 20 20 0a 20 20 2f 2a 20 43 68 65 63 6b  if.  .  /* Check
3560: 20 69 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20   if an existing 
3570: 66 75 6e 63 74 69 6f 6e 20 69 73 20 62 65 69 6e  function is bein
3580: 67 20 6f 76 65 72 72 69 64 64 65 6e 20 6f 72 20  g overridden or 
3590: 64 65 6c 65 74 65 64 2e 20 49 66 20 73 6f 2c 0a  deleted. If so,.
35a0: 20 20 2a 2a 20 61 6e 64 20 74 68 65 72 65 20 61    ** and there a
35b0: 72 65 20 61 63 74 69 76 65 20 56 4d 73 2c 20 74  re active VMs, t
35c0: 68 65 6e 20 72 65 74 75 72 6e 20 53 51 4c 49 54  hen return SQLIT
35d0: 45 5f 42 55 53 59 2e 20 49 66 20 61 20 66 75 6e  E_BUSY. If a fun
35e0: 63 74 69 6f 6e 0a 20 20 2a 2a 20 69 73 20 62 65  ction.  ** is be
35f0: 69 6e 67 20 6f 76 65 72 72 69 64 64 65 6e 2f 64  ing overridden/d
3600: 65 6c 65 74 65 64 20 62 75 74 20 74 68 65 72 65  eleted but there
3610: 20 61 72 65 20 6e 6f 20 61 63 74 69 76 65 20 56   are no active V
3620: 4d 73 2c 20 61 6c 6c 6f 77 20 74 68 65 0a 20 20  Ms, allow the.  
3630: 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 74 6f 20  ** operation to 
3640: 63 6f 6e 74 69 6e 75 65 20 62 75 74 20 69 6e 76  continue but inv
3650: 61 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65 63  alidate all prec
3660: 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e  ompiled statemen
3670: 74 73 2e 0a 20 20 2a 2f 0a 20 20 70 20 3d 20 73  ts..  */.  p = s
3680: 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69  qlite3FindFuncti
3690: 6f 6e 28 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e  on(db, zFunction
36a0: 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2c 20 6e 41 72  Name, nName, nAr
36b0: 67 2c 20 65 6e 63 2c 20 30 29 3b 0a 20 20 69 66  g, enc, 0);.  if
36c0: 28 20 70 20 26 26 20 70 2d 3e 69 50 72 65 66 45  ( p && p->iPrefE
36d0: 6e 63 3d 3d 65 6e 63 20 26 26 20 70 2d 3e 6e 41  nc==enc && p->nA
36e0: 72 67 3d 3d 6e 41 72 67 20 29 7b 0a 20 20 20 20  rg==nArg ){.    
36f0: 69 66 28 20 64 62 2d 3e 61 63 74 69 76 65 56 64  if( db->activeVd
3700: 62 65 43 6e 74 20 29 7b 0a 20 20 20 20 20 20 73  beCnt ){.      s
3710: 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20  qlite3Error(db, 
3720: 53 51 4c 49 54 45 5f 42 55 53 59 2c 20 0a 20 20  SQLITE_BUSY, .  
3730: 20 20 20 20 20 20 22 55 6e 61 62 6c 65 20 74 6f        "Unable to
3740: 20 64 65 6c 65 74 65 2f 6d 6f 64 69 66 79 20 75   delete/modify u
3750: 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 75 65  ser-function due
3760: 20 74 6f 20 61 63 74 69 76 65 20 73 74 61 74 65   to active state
3770: 6d 65 6e 74 73 22 29 3b 0a 20 20 20 20 20 20 61  ments");.      a
3780: 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 4d  ssert( !sqlite3M
3790: 61 6c 6c 6f 63 46 61 69 6c 65 64 28 29 20 29 3b  allocFailed() );
37a0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
37b0: 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d  LITE_BUSY;.    }
37c0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69  else{.      sqli
37d0: 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
37e0: 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b  dStatements(db);
37f0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 70 20  .    }.  }..  p 
3800: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e  = sqlite3FindFun
3810: 63 74 69 6f 6e 28 64 62 2c 20 7a 46 75 6e 63 74  ction(db, zFunct
3820: 69 6f 6e 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2c 20  ionName, nName, 
3830: 6e 41 72 67 2c 20 65 6e 63 2c 20 31 29 3b 0a 20  nArg, enc, 1);. 
3840: 20 69 66 28 20 70 20 29 7b 0a 20 20 20 20 70 2d   if( p ){.    p-
3850: 3e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20  >flags = 0;.    
3860: 70 2d 3e 78 46 75 6e 63 20 3d 20 78 46 75 6e 63  p->xFunc = xFunc
3870: 3b 0a 20 20 20 20 70 2d 3e 78 53 74 65 70 20 3d  ;.    p->xStep =
3880: 20 78 53 74 65 70 3b 0a 20 20 20 20 70 2d 3e 78   xStep;.    p->x
3890: 46 69 6e 61 6c 69 7a 65 20 3d 20 78 46 69 6e 61  Finalize = xFina
38a0: 6c 3b 0a 20 20 20 20 70 2d 3e 70 55 73 65 72 44  l;.    p->pUserD
38b0: 61 74 61 20 3d 20 70 55 73 65 72 44 61 74 61 3b  ata = pUserData;
38c0: 0a 20 20 20 20 70 2d 3e 6e 41 72 67 20 3d 20 6e  .    p->nArg = n
38d0: 41 72 67 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  Arg;.  }.  retur
38e0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a  n SQLITE_OK;.}..
38f0: 2f 2a 0a 2a 2a 20 43 72 65 61 74 65 20 6e 65 77  /*.** Create new
3900: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 73 2e   user functions.
3910: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
3920: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
3930: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a  .  sqlite3 *db,.
3940: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46    const char *zF
3950: 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 0a 20 20 69  unctionName,.  i
3960: 6e 74 20 6e 41 72 67 2c 0a 20 20 69 6e 74 20 65  nt nArg,.  int e
3970: 6e 63 2c 0a 20 20 76 6f 69 64 20 2a 70 2c 0a 20  nc,.  void *p,. 
3980: 20 76 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73   void (*xFunc)(s
3990: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
39a0: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
39b0: 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  e **),.  void (*
39c0: 78 53 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63  xStep)(sqlite3_c
39d0: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
39e0: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20  te3_value **),. 
39f0: 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 29 28   void (*xFinal)(
3a00: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
3a10: 29 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  ).){.  int rc;. 
3a20: 20 61 73 73 65 72 74 28 20 21 73 71 6c 69 74 65   assert( !sqlite
3a30: 33 4d 61 6c 6c 6f 63 46 61 69 6c 65 64 28 29 20  3MallocFailed() 
3a40: 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
3a50: 33 43 72 65 61 74 65 46 75 6e 63 28 64 62 2c 20  3CreateFunc(db, 
3a60: 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e  zFunctionName, n
3a70: 41 72 67 2c 20 65 6e 63 2c 20 70 2c 20 78 46 75  Arg, enc, p, xFu
3a80: 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  nc, xStep, xFina
3a90: 6c 29 3b 0a 0a 20 20 72 65 74 75 72 6e 20 73 71  l);..  return sq
3aa0: 6c 69 74 65 33 41 70 69 45 78 69 74 28 64 62 2c  lite3ApiExit(db,
3ab0: 20 72 63 29 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66   rc);.}..#ifndef
3ac0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
3ad0: 31 36 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63  16.int sqlite3_c
3ae0: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 31 36  reate_function16
3af0: 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c  (.  sqlite3 *db,
3b00: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
3b10: 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 0a 20 20  FunctionName,.  
3b20: 69 6e 74 20 6e 41 72 67 2c 0a 20 20 69 6e 74 20  int nArg,.  int 
3b30: 65 54 65 78 74 52 65 70 2c 0a 20 20 76 6f 69 64  eTextRep,.  void
3b40: 20 2a 70 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46   *p,.  void (*xF
3b50: 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  unc)(sqlite3_con
3b60: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
3b70: 33 5f 76 61 6c 75 65 2a 2a 29 2c 0a 20 20 76 6f  3_value**),.  vo
3b80: 69 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69  id (*xStep)(sqli
3b90: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
3ba0: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
3bb0: 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e  ),.  void (*xFin
3bc0: 61 6c 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  al)(sqlite3_cont
3bd0: 65 78 74 2a 29 0a 29 7b 0a 20 20 69 6e 74 20 72  ext*).){.  int r
3be0: 63 3b 0a 20 20 63 68 61 72 20 2a 7a 46 75 6e 63  c;.  char *zFunc
3bf0: 38 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73 71  8;.  assert( !sq
3c00: 6c 69 74 65 33 4d 61 6c 6c 6f 63 46 61 69 6c 65  lite3MallocFaile
3c10: 64 28 29 20 29 3b 0a 0a 20 20 7a 46 75 6e 63 38  d() );..  zFunc8
3c20: 20 3d 20 73 71 6c 69 74 65 33 75 74 66 31 36 74   = sqlite3utf16t
3c30: 6f 38 28 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65  o8(zFunctionName
3c40: 2c 20 2d 31 29 3b 0a 20 20 72 63 20 3d 20 73 71  , -1);.  rc = sq
3c50: 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28  lite3CreateFunc(
3c60: 64 62 2c 20 7a 46 75 6e 63 38 2c 20 6e 41 72 67  db, zFunc8, nArg
3c70: 2c 20 65 54 65 78 74 52 65 70 2c 20 70 2c 20 78  , eTextRep, p, x
3c80: 46 75 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69  Func, xStep, xFi
3c90: 6e 61 6c 29 3b 0a 20 20 73 71 6c 69 74 65 46 72  nal);.  sqliteFr
3ca0: 65 65 28 7a 46 75 6e 63 38 29 3b 0a 0a 20 20 72  ee(zFunc8);..  r
3cb0: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 41 70 69  eturn sqlite3Api
3cc0: 45 78 69 74 28 64 62 2c 20 72 63 29 3b 0a 7d 0a  Exit(db, rc);.}.
3cd0: 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 44  #endif.../*.** D
3ce0: 65 63 6c 61 72 65 20 74 68 61 74 20 61 20 66 75  eclare that a fu
3cf0: 6e 63 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 20  nction has been 
3d00: 6f 76 65 72 6c 6f 61 64 65 64 20 62 79 20 61 20  overloaded by a 
3d10: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a  virtual table..*
3d20: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 66 75 6e 63  *.** If the func
3d30: 74 69 6f 6e 20 61 6c 72 65 61 64 79 20 65 78 69  tion already exi
3d40: 73 74 73 20 61 73 20 61 20 72 65 67 75 6c 61 72  sts as a regular
3d50: 20 67 6c 6f 62 61 6c 20 66 75 6e 63 74 69 6f 6e   global function
3d60: 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 69 73 20 72  , then.** this r
3d70: 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f  outine is a no-o
3d80: 70 2e 20 20 49 66 20 74 68 65 20 66 75 6e 63 74  p.  If the funct
3d90: 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 65 78 69  ion does not exi
3da0: 73 74 2c 20 74 68 65 6e 20 63 72 65 61 74 65 0a  st, then create.
3db0: 2a 2a 20 61 20 6e 65 77 20 6f 6e 65 20 74 68 61  ** a new one tha
3dc0: 74 20 61 6c 77 61 79 73 20 74 68 72 6f 77 73 20  t always throws 
3dd0: 61 20 72 75 6e 2d 74 69 6d 65 20 65 72 72 6f 72  a run-time error
3de0: 2e 20 20 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 76  .  .**.** When v
3df0: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 69 6e  irtual tables in
3e00: 74 65 6e 64 20 74 6f 20 70 72 6f 76 69 64 65 20  tend to provide 
3e10: 61 6e 20 6f 76 65 72 6c 6f 61 64 65 64 20 66 75  an overloaded fu
3e20: 6e 63 74 69 6f 6e 2c 20 74 68 65 79 0a 2a 2a 20  nction, they.** 
3e30: 73 68 6f 75 6c 64 20 63 61 6c 6c 20 74 68 69 73  should call this
3e40: 20 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6b 65   routine to make
3e50: 20 73 75 72 65 20 74 68 65 20 67 6c 6f 62 61 6c   sure the global
3e60: 20 66 75 6e 63 74 69 6f 6e 20 65 78 69 73 74 73   function exists
3e70: 2e 0a 2a 2a 20 41 20 67 6c 6f 62 61 6c 20 66 75  ..** A global fu
3e80: 6e 63 74 69 6f 6e 20 6d 75 73 74 20 65 78 69 73  nction must exis
3e90: 74 20 69 6e 20 6f 72 64 65 72 20 66 6f 72 20 6e  t in order for n
3ea0: 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 74  ame resolution t
3eb0: 6f 20 77 6f 72 6b 0a 2a 2a 20 70 72 6f 70 65 72  o work.** proper
3ec0: 6c 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ly..*/.int sqlit
3ed0: 65 33 5f 6f 76 65 72 6c 6f 61 64 5f 66 75 6e 63  e3_overload_func
3ee0: 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33 20  tion(.  sqlite3 
3ef0: 2a 64 62 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61  *db,.  const cha
3f00: 72 20 2a 7a 4e 61 6d 65 2c 0a 20 20 69 6e 74 20  r *zName,.  int 
3f10: 6e 41 72 67 0a 29 7b 0a 20 20 69 6e 74 20 6e 4e  nArg.){.  int nN
3f20: 61 6d 65 20 3d 20 73 74 72 6c 65 6e 28 7a 4e 61  ame = strlen(zNa
3f30: 6d 65 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  me);.  if( sqlit
3f40: 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 64  e3FindFunction(d
3f50: 62 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2c  b, zName, nName,
3f60: 20 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54   nArg, SQLITE_UT
3f70: 46 38 2c 20 30 29 3d 3d 30 20 29 7b 0a 20 20 20  F8, 0)==0 ){.   
3f80: 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75   sqlite3CreateFu
3f90: 6e 63 28 64 62 2c 20 7a 4e 61 6d 65 2c 20 6e 41  nc(db, zName, nA
3fa0: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  rg, SQLITE_UTF8,
3fb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3fc0: 20 20 20 20 20 20 20 30 2c 20 73 71 6c 69 74 65         0, sqlite
3fd0: 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e  3InvalidFunction
3fe0: 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72  , 0, 0);.  }.  r
3ff0: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 41 70 69  eturn sqlite3Api
4000: 45 78 69 74 28 64 62 2c 20 53 51 4c 49 54 45 5f  Exit(db, SQLITE_
4010: 4f 4b 29 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  OK);.}..#ifndef 
4020: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
4030: 45 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  E./*.** Register
4040: 20 61 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f   a trace functio
4050: 6e 2e 20 20 54 68 65 20 70 41 72 67 20 66 72 6f  n.  The pArg fro
4060: 6d 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79  m the previously
4070: 20 72 65 67 69 73 74 65 72 65 64 20 74 72 61 63   registered trac
4080: 65 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64  e.** is returned
4090: 2e 20 20 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  .  .**.** A NULL
40a0: 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   trace function 
40b0: 6d 65 61 6e 73 20 74 68 61 74 20 6e 6f 20 74 72  means that no tr
40c0: 61 63 69 6e 67 20 69 73 20 65 78 65 63 75 74 65  acing is execute
40d0: 73 2e 20 20 41 20 6e 6f 6e 2d 4e 55 4c 4c 0a 2a  s.  A non-NULL.*
40e0: 2a 20 74 72 61 63 65 20 69 73 20 61 20 70 6f 69  * trace is a poi
40f0: 6e 74 65 72 20 74 6f 20 61 20 66 75 6e 63 74 69  nter to a functi
4100: 6f 6e 20 74 68 61 74 20 69 73 20 69 6e 76 6f 6b  on that is invok
4110: 65 64 20 61 74 20 74 68 65 20 73 74 61 72 74 20  ed at the start 
4120: 6f 66 20 65 61 63 68 0a 2a 2a 20 53 51 4c 20 73  of each.** SQL s
4130: 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 76 6f 69  tatement..*/.voi
4140: 64 20 2a 73 71 6c 69 74 65 33 5f 74 72 61 63 65  d *sqlite3_trace
4150: 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 76 6f  (sqlite3 *db, vo
4160: 69 64 20 28 2a 78 54 72 61 63 65 29 28 76 6f 69  id (*xTrace)(voi
4170: 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 2c  d*,const char*),
4180: 20 76 6f 69 64 20 2a 70 41 72 67 29 7b 0a 20 20   void *pArg){.  
4190: 76 6f 69 64 20 2a 70 4f 6c 64 20 3d 20 64 62 2d  void *pOld = db-
41a0: 3e 70 54 72 61 63 65 41 72 67 3b 0a 20 20 64 62  >pTraceArg;.  db
41b0: 2d 3e 78 54 72 61 63 65 20 3d 20 78 54 72 61 63  ->xTrace = xTrac
41c0: 65 3b 0a 20 20 64 62 2d 3e 70 54 72 61 63 65 41  e;.  db->pTraceA
41d0: 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 72 65 74  rg = pArg;.  ret
41e0: 75 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 2f 2a 0a 2a  urn pOld;.}./*.*
41f0: 2a 20 52 65 67 69 73 74 65 72 20 61 20 70 72 6f  * Register a pro
4200: 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20  file function.  
4210: 54 68 65 20 70 41 72 67 20 66 72 6f 6d 20 74 68  The pArg from th
4220: 65 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65 67  e previously reg
4230: 69 73 74 65 72 65 64 20 0a 2a 2a 20 70 72 6f 66  istered .** prof
4240: 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  ile function is 
4250: 72 65 74 75 72 6e 65 64 2e 20 20 0a 2a 2a 0a 2a  returned.  .**.*
4260: 2a 20 41 20 4e 55 4c 4c 20 70 72 6f 66 69 6c 65  * A NULL profile
4270: 20 66 75 6e 63 74 69 6f 6e 20 6d 65 61 6e 73 20   function means 
4280: 74 68 61 74 20 6e 6f 20 70 72 6f 66 69 6c 69 6e  that no profilin
4290: 67 20 69 73 20 65 78 65 63 75 74 65 73 2e 20 20  g is executes.  
42a0: 41 20 6e 6f 6e 2d 4e 55 4c 4c 0a 2a 2a 20 70 72  A non-NULL.** pr
42b0: 6f 66 69 6c 65 20 69 73 20 61 20 70 6f 69 6e 74  ofile is a point
42c0: 65 72 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e  er to a function
42d0: 20 74 68 61 74 20 69 73 20 69 6e 76 6f 6b 65 64   that is invoked
42e0: 20 61 74 20 74 68 65 20 63 6f 6e 63 6c 75 73 69   at the conclusi
42f0: 6f 6e 20 6f 66 0a 2a 2a 20 65 61 63 68 20 53 51  on of.** each SQ
4300: 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  L statement that
4310: 20 69 73 20 72 75 6e 2e 0a 2a 2f 0a 76 6f 69 64   is run..*/.void
4320: 20 2a 73 71 6c 69 74 65 33 5f 70 72 6f 66 69 6c   *sqlite3_profil
4330: 65 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  e(.  sqlite3 *db
4340: 2c 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66  ,.  void (*xProf
4350: 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74  ile)(void*,const
4360: 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 75 69   char*,sqlite_ui
4370: 6e 74 36 34 29 2c 0a 20 20 76 6f 69 64 20 2a 70  nt64),.  void *p
4380: 41 72 67 0a 29 7b 0a 20 20 76 6f 69 64 20 2a 70  Arg.){.  void *p
4390: 4f 6c 64 20 3d 20 64 62 2d 3e 70 50 72 6f 66 69  Old = db->pProfi
43a0: 6c 65 41 72 67 3b 0a 20 20 64 62 2d 3e 78 50 72  leArg;.  db->xPr
43b0: 6f 66 69 6c 65 20 3d 20 78 50 72 6f 66 69 6c 65  ofile = xProfile
43c0: 3b 0a 20 20 64 62 2d 3e 70 50 72 6f 66 69 6c 65  ;.  db->pProfile
43d0: 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 72 65  Arg = pArg;.  re
43e0: 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 23 65 6e  turn pOld;.}.#en
43f0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
4400: 49 54 5f 54 52 41 43 45 20 2a 2f 0a 0a 2f 2a 2a  IT_TRACE */../**
4410: 2a 20 45 58 50 45 52 49 4d 45 4e 54 41 4c 20 2a  * EXPERIMENTAL *
4420: 2a 2a 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  **.**.** Registe
4430: 72 20 61 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  r a function to 
4440: 62 65 20 69 6e 76 6f 6b 65 64 20 77 68 65 6e 20  be invoked when 
4450: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f  a transaction co
4460: 6d 6d 65 6e 74 73 2e 0a 2a 2a 20 49 66 20 74 68  mments..** If th
4470: 65 20 69 6e 76 6f 6b 65 64 20 66 75 6e 63 74 69  e invoked functi
4480: 6f 6e 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a  on returns non-z
4490: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  ero, then the co
44a0: 6d 6d 69 74 20 62 65 63 6f 6d 65 73 20 61 0a 2a  mmit becomes a.*
44b0: 2a 20 72 6f 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 76  * rollback..*/.v
44c0: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6d  oid *sqlite3_com
44d0: 6d 69 74 5f 68 6f 6f 6b 28 0a 20 20 73 71 6c 69  mit_hook(.  sqli
44e0: 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20  te3 *db,        
44f0: 20 20 20 20 20 20 2f 2a 20 41 74 74 61 63 68 20        /* Attach 
4500: 74 68 65 20 68 6f 6f 6b 20 74 6f 20 74 68 69 73  the hook to this
4510: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 69   database */.  i
4520: 6e 74 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28  nt (*xCallback)(
4530: 76 6f 69 64 2a 29 2c 20 20 2f 2a 20 46 75 6e 63  void*),  /* Func
4540: 74 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65 20 6f  tion to invoke o
4550: 6e 20 65 61 63 68 20 63 6f 6d 6d 69 74 20 2a 2f  n each commit */
4560: 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 20 20 20  .  void *pArg   
4570: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4580: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
4590: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a 20  function */.){. 
45a0: 20 76 6f 69 64 20 2a 70 4f 6c 64 20 3d 20 64 62   void *pOld = db
45b0: 2d 3e 70 43 6f 6d 6d 69 74 41 72 67 3b 0a 20 20  ->pCommitArg;.  
45c0: 64 62 2d 3e 78 43 6f 6d 6d 69 74 43 61 6c 6c 62  db->xCommitCallb
45d0: 61 63 6b 20 3d 20 78 43 61 6c 6c 62 61 63 6b 3b  ack = xCallback;
45e0: 0a 20 20 64 62 2d 3e 70 43 6f 6d 6d 69 74 41 72  .  db->pCommitAr
45f0: 67 20 3d 20 70 41 72 67 3b 0a 20 20 72 65 74 75  g = pArg;.  retu
4600: 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 0a 2f 2a 0a 2a  rn pOld;.}../*.*
4610: 2a 20 52 65 67 69 73 74 65 72 20 61 20 63 61 6c  * Register a cal
4620: 6c 62 61 63 6b 20 74 6f 20 62 65 20 69 6e 76 6f  lback to be invo
4630: 6b 65 64 20 65 61 63 68 20 74 69 6d 65 20 61 20  ked each time a 
4640: 72 6f 77 20 69 73 20 75 70 64 61 74 65 64 2c 0a  row is updated,.
4650: 2a 2a 20 69 6e 73 65 72 74 65 64 20 6f 72 20 64  ** inserted or d
4660: 65 6c 65 74 65 64 20 75 73 69 6e 67 20 74 68 69  eleted using thi
4670: 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  s database conne
4680: 63 74 69 6f 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 2a  ction..*/.void *
4690: 73 71 6c 69 74 65 33 5f 75 70 64 61 74 65 5f 68  sqlite3_update_h
46a0: 6f 6f 6b 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  ook(.  sqlite3 *
46b0: 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  db,             
46c0: 20 2f 2a 20 41 74 74 61 63 68 20 74 68 65 20 68   /* Attach the h
46d0: 6f 6f 6b 20 74 6f 20 74 68 69 73 20 64 61 74 61  ook to this data
46e0: 62 61 73 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28  base */.  void (
46f0: 2a 78 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  *xCallback)(void
4700: 2a 2c 69 6e 74 2c 63 68 61 72 20 63 6f 6e 73 74  *,int,char const
4710: 20 2a 2c 63 68 61 72 20 63 6f 6e 73 74 20 2a 2c   *,char const *,
4720: 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 2c 0a 20  sqlite_int64),. 
4730: 20 76 6f 69 64 20 2a 70 41 72 67 20 20 20 20 20   void *pArg     
4740: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
4750: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 66 75  gument to the fu
4760: 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 76  nction */.){.  v
4770: 6f 69 64 20 2a 70 52 65 74 20 3d 20 64 62 2d 3e  oid *pRet = db->
4780: 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 64 62  pUpdateArg;.  db
4790: 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
47a0: 6b 20 3d 20 78 43 61 6c 6c 62 61 63 6b 3b 0a 20  k = xCallback;. 
47b0: 20 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 20   db->pUpdateArg 
47c0: 3d 20 70 41 72 67 3b 0a 20 20 72 65 74 75 72 6e  = pArg;.  return
47d0: 20 70 52 65 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20   pRet;.}../*.** 
47e0: 52 65 67 69 73 74 65 72 20 61 20 63 61 6c 6c 62  Register a callb
47f0: 61 63 6b 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65  ack to be invoke
4800: 64 20 65 61 63 68 20 74 69 6d 65 20 61 20 74 72  d each time a tr
4810: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 72 6f 6c  ansaction is rol
4820: 6c 65 64 0a 2a 2a 20 62 61 63 6b 20 62 79 20 74  led.** back by t
4830: 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e  his database con
4840: 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a 76 6f 69 64  nection..*/.void
4850: 20 2a 73 71 6c 69 74 65 33 5f 72 6f 6c 6c 62 61   *sqlite3_rollba
4860: 63 6b 5f 68 6f 6f 6b 28 0a 20 20 73 71 6c 69 74  ck_hook(.  sqlit
4870: 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20  e3 *db,         
4880: 20 20 20 20 20 2f 2a 20 41 74 74 61 63 68 20 74       /* Attach t
4890: 68 65 20 68 6f 6f 6b 20 74 6f 20 74 68 69 73 20  he hook to this 
48a0: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 76 6f  database */.  vo
48b0: 69 64 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28  id (*xCallback)(
48c0: 76 6f 69 64 2a 29 2c 20 2f 2a 20 43 61 6c 6c 62  void*), /* Callb
48d0: 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ack function */.
48e0: 20 20 76 6f 69 64 20 2a 70 41 72 67 20 20 20 20    void *pArg    
48f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
4900: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 66  rgument to the f
4910: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20  unction */.){.  
4920: 76 6f 69 64 20 2a 70 52 65 74 20 3d 20 64 62 2d  void *pRet = db-
4930: 3e 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 0a 20  >pRollbackArg;. 
4940: 20 64 62 2d 3e 78 52 6f 6c 6c 62 61 63 6b 43 61   db->xRollbackCa
4950: 6c 6c 62 61 63 6b 20 3d 20 78 43 61 6c 6c 62 61  llback = xCallba
4960: 63 6b 3b 0a 20 20 64 62 2d 3e 70 52 6f 6c 6c 62  ck;.  db->pRollb
4970: 61 63 6b 41 72 67 20 3d 20 70 41 72 67 3b 0a 20  ackArg = pArg;. 
4980: 20 72 65 74 75 72 6e 20 70 52 65 74 3b 0a 7d 0a   return pRet;.}.
4990: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  ./*.** This rout
49a0: 69 6e 65 20 69 73 20 63 61 6c 6c 65 64 20 74 6f  ine is called to
49b0: 20 63 72 65 61 74 65 20 61 20 63 6f 6e 6e 65 63   create a connec
49c0: 74 69 6f 6e 20 74 6f 20 61 20 64 61 74 61 62 61  tion to a databa
49d0: 73 65 20 42 54 72 65 65 0a 2a 2a 20 64 72 69 76  se BTree.** driv
49e0: 65 72 2e 20 20 49 66 20 7a 46 69 6c 65 6e 61 6d  er.  If zFilenam
49f0: 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  e is the name of
4a00: 20 61 20 66 69 6c 65 2c 20 74 68 65 6e 20 74 68   a file, then th
4a10: 61 74 20 66 69 6c 65 20 69 73 0a 2a 2a 20 6f 70  at file is.** op
4a20: 65 6e 65 64 20 61 6e 64 20 75 73 65 64 2e 20 20  ened and used.  
4a30: 49 66 20 7a 46 69 6c 65 6e 61 6d 65 20 69 73 20  If zFilename is 
4a40: 74 68 65 20 6d 61 67 69 63 20 6e 61 6d 65 20 22  the magic name "
4a50: 3a 6d 65 6d 6f 72 79 3a 22 20 74 68 65 6e 0a 2a  :memory:" then.*
4a60: 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  * the database i
4a70: 73 20 73 74 6f 72 65 64 20 69 6e 20 6d 65 6d 6f  s stored in memo
4a80: 72 79 20 28 61 6e 64 20 69 73 20 74 68 75 73 20  ry (and is thus 
4a90: 66 6f 72 67 6f 74 74 65 6e 20 61 73 20 73 6f 6f  forgotten as soo
4aa0: 6e 20 61 73 0a 2a 2a 20 74 68 65 20 63 6f 6e 6e  n as.** the conn
4ab0: 65 63 74 69 6f 6e 20 69 73 20 63 6c 6f 73 65 64  ection is closed
4ac0: 2e 29 20 20 49 66 20 7a 46 69 6c 65 6e 61 6d 65  .)  If zFilename
4ad0: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68   is NULL then th
4ae0: 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 69 73  e database.** is
4af0: 20 61 20 22 76 69 72 74 75 61 6c 22 20 64 61 74   a "virtual" dat
4b00: 61 62 61 73 65 20 66 6f 72 20 74 72 61 6e 73 69  abase for transi
4b10: 65 6e 74 20 75 73 65 20 6f 6e 6c 79 20 61 6e 64  ent use only and
4b20: 20 69 73 20 64 65 6c 65 74 65 64 20 61 73 0a 2a   is deleted as.*
4b30: 2a 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 63 6f  * soon as the co
4b40: 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c 6f 73  nnection is clos
4b50: 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 76 69 72 74  ed..**.** A virt
4b60: 75 61 6c 20 64 61 74 61 62 61 73 65 20 63 61 6e  ual database can
4b70: 20 62 65 20 65 69 74 68 65 72 20 61 20 64 69 73   be either a dis
4b80: 6b 20 66 69 6c 65 20 28 74 68 61 74 20 69 73 20  k file (that is 
4b90: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a  automatically.**
4ba0: 20 64 65 6c 65 74 65 64 20 77 68 65 6e 20 74 68   deleted when th
4bb0: 65 20 66 69 6c 65 20 69 73 20 63 6c 6f 73 65 64  e file is closed
4bc0: 29 20 6f 72 20 69 74 20 61 6e 20 62 65 20 68 65  ) or it an be he
4bd0: 6c 64 20 65 6e 74 69 72 65 6c 79 20 69 6e 20 6d  ld entirely in m
4be0: 65 6d 6f 72 79 2c 0a 2a 2a 20 64 65 70 65 6e 64  emory,.** depend
4bf0: 69 6e 67 20 6f 6e 20 74 68 65 20 76 61 6c 75 65  ing on the value
4c00: 73 20 6f 66 20 74 68 65 20 54 45 4d 50 5f 53 54  s of the TEMP_ST
4c10: 4f 52 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  ORE compile-time
4c20: 20 6d 61 63 72 6f 20 61 6e 64 20 74 68 65 0a 2a   macro and the.*
4c30: 2a 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65  * db->temp_store
4c40: 20 76 61 72 69 61 62 6c 65 2c 20 61 63 63 6f 72   variable, accor
4c50: 64 69 6e 67 20 74 6f 20 74 68 65 20 66 6f 6c 6c  ding to the foll
4c60: 6f 77 69 6e 67 20 63 68 61 72 74 3a 0a 2a 2a 0a  owing chart:.**.
4c70: 2a 2a 20 20 20 20 20 20 20 54 45 4d 50 5f 53 54  **       TEMP_ST
4c80: 4f 52 45 20 20 20 20 20 64 62 2d 3e 74 65 6d 70  ORE     db->temp
4c90: 5f 73 74 6f 72 65 20 20 20 20 20 4c 6f 63 61 74  _store     Locat
4ca0: 69 6f 6e 20 6f 66 20 74 65 6d 70 6f 72 61 72 79  ion of temporary
4cb0: 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 20 20 20   database.**    
4cc0: 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 20 20     ----------   
4cd0: 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    --------------
4ce0: 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d       -----------
4cf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4d00: 2d 2d 2d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ---.**          
4d10: 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20   0              
4d20: 20 61 6e 79 20 20 20 20 20 20 20 20 20 20 20 20   any            
4d30: 20 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20   file.**        
4d40: 20 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20     1            
4d50: 20 20 20 20 31 20 20 20 20 20 20 20 20 20 20 20      1           
4d60: 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20     file.**      
4d70: 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20 20       1          
4d80: 20 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20        2         
4d90: 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20       memory.**  
4da0: 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20           1      
4db0: 20 20 20 20 20 20 20 20 20 20 30 20 20 20 20 20            0     
4dc0: 20 20 20 20 20 20 20 20 20 66 69 6c 65 0a 2a 2a           file.**
4dd0: 20 20 20 20 20 20 20 20 20 20 20 32 20 20 20 20             2    
4de0: 20 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20              1   
4df0: 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 0a             file.
4e00: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 32 20 20  **           2  
4e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 20                2 
4e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65 6d               mem
4e30: 6f 72 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ory.**          
4e40: 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20   2              
4e50: 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20    0             
4e60: 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20   memory.**      
4e70: 20 20 20 20 20 33 20 20 20 20 20 20 20 20 20 20       3          
4e80: 20 20 20 20 20 61 6e 79 20 20 20 20 20 20 20 20       any        
4e90: 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2f 0a 69       memory.*/.i
4ea0: 6e 74 20 73 71 6c 69 74 65 33 42 74 72 65 65 46  nt sqlite3BtreeF
4eb0: 61 63 74 6f 72 79 28 0a 20 20 63 6f 6e 73 74 20  actory(.  const 
4ec0: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20  sqlite3 *db,    
4ed0: 20 20 20 20 2f 2a 20 4d 61 69 6e 20 64 61 74 61      /* Main data
4ee0: 62 61 73 65 20 77 68 65 6e 20 6f 70 65 6e 69 6e  base when openin
4ef0: 67 20 61 75 78 20 6f 74 68 65 72 77 69 73 65 20  g aux otherwise 
4f00: 30 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  0 */.  const cha
4f10: 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 20 20  r *zFilename,   
4f20: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
4f30: 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  file containing 
4f40: 74 68 65 20 42 54 72 65 65 20 64 61 74 61 62 61  the BTree databa
4f50: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 6d 69 74  se */.  int omit
4f60: 4a 6f 75 72 6e 61 6c 2c 20 20 20 20 20 20 20 20  Journal,        
4f70: 20 20 2f 2a 20 69 66 20 54 52 55 45 20 74 68 65    /* if TRUE the
4f80: 6e 20 64 6f 20 6e 6f 74 20 6a 6f 75 72 6e 61 6c  n do not journal
4f90: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
4fa0: 69 6e 74 20 6e 43 61 63 68 65 2c 20 20 20 20 20  int nCache,     
4fb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77            /* How
4fc0: 20 6d 61 6e 79 20 70 61 67 65 73 20 69 6e 20 74   many pages in t
4fd0: 68 65 20 70 61 67 65 20 63 61 63 68 65 20 2a 2f  he page cache */
4fe0: 0a 20 20 42 74 72 65 65 20 2a 2a 70 70 42 74 72  .  Btree **ppBtr
4ff0: 65 65 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ee           /* 
5000: 50 6f 69 6e 74 65 72 20 74 6f 20 6e 65 77 20 42  Pointer to new B
5010: 74 72 65 65 20 6f 62 6a 65 63 74 20 77 72 69 74  tree object writ
5020: 74 65 6e 20 68 65 72 65 20 2a 2f 0a 29 7b 0a 20  ten here */.){. 
5030: 20 69 6e 74 20 62 74 72 65 65 5f 66 6c 61 67 73   int btree_flags
5040: 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72 63 3b 0a   = 0;.  int rc;.
5050: 20 20 0a 20 20 61 73 73 65 72 74 28 20 70 70 42    .  assert( ppB
5060: 74 72 65 65 20 21 3d 20 30 29 3b 0a 20 20 69 66  tree != 0);.  if
5070: 28 20 6f 6d 69 74 4a 6f 75 72 6e 61 6c 20 29 7b  ( omitJournal ){
5080: 0a 20 20 20 20 62 74 72 65 65 5f 66 6c 61 67 73  .    btree_flags
5090: 20 7c 3d 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a   |= BTREE_OMIT_J
50a0: 4f 55 52 4e 41 4c 3b 0a 20 20 7d 0a 20 20 69 66  OURNAL;.  }.  if
50b0: 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ( db->flags & SQ
50c0: 4c 49 54 45 5f 4e 6f 52 65 61 64 6c 6f 63 6b 20  LITE_NoReadlock 
50d0: 29 7b 0a 20 20 20 20 62 74 72 65 65 5f 66 6c 61  ){.    btree_fla
50e0: 67 73 20 7c 3d 20 42 54 52 45 45 5f 4e 4f 5f 52  gs |= BTREE_NO_R
50f0: 45 41 44 4c 4f 43 4b 3b 0a 20 20 7d 0a 20 20 69  EADLOCK;.  }.  i
5100: 66 28 20 7a 46 69 6c 65 6e 61 6d 65 3d 3d 30 20  f( zFilename==0 
5110: 29 7b 0a 23 69 66 20 54 45 4d 50 5f 53 54 4f 52  ){.#if TEMP_STOR
5120: 45 3d 3d 30 0a 20 20 20 20 2f 2a 20 44 6f 20 6e  E==0.    /* Do n
5130: 6f 74 68 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66  othing */.#endif
5140: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5150: 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44 42 0a 23 69  OMIT_MEMORYDB.#i
5160: 66 20 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 31 0a  f TEMP_STORE==1.
5170: 20 20 20 20 69 66 28 20 64 62 2d 3e 74 65 6d 70      if( db->temp
5180: 5f 73 74 6f 72 65 3d 3d 32 20 29 20 7a 46 69 6c  _store==2 ) zFil
5190: 65 6e 61 6d 65 20 3d 20 22 3a 6d 65 6d 6f 72 79  ename = ":memory
51a0: 3a 22 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 54  :";.#endif.#if T
51b0: 45 4d 50 5f 53 54 4f 52 45 3d 3d 32 0a 20 20 20  EMP_STORE==2.   
51c0: 20 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f 73 74   if( db->temp_st
51d0: 6f 72 65 21 3d 31 20 29 20 7a 46 69 6c 65 6e 61  ore!=1 ) zFilena
51e0: 6d 65 20 3d 20 22 3a 6d 65 6d 6f 72 79 3a 22 3b  me = ":memory:";
51f0: 0a 23 65 6e 64 69 66 0a 23 69 66 20 54 45 4d 50  .#endif.#if TEMP
5200: 5f 53 54 4f 52 45 3d 3d 33 0a 20 20 20 20 7a 46  _STORE==3.    zF
5210: 69 6c 65 6e 61 6d 65 20 3d 20 22 3a 6d 65 6d 6f  ilename = ":memo
5220: 72 79 3a 22 3b 0a 23 65 6e 64 69 66 0a 23 65 6e  ry:";.#endif.#en
5230: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
5240: 49 54 5f 4d 45 4d 4f 52 59 44 42 20 2a 2f 0a 20  IT_MEMORYDB */. 
5250: 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   }..  rc = sqlit
5260: 65 33 42 74 72 65 65 4f 70 65 6e 28 7a 46 69 6c  e3BtreeOpen(zFil
5270: 65 6e 61 6d 65 2c 20 28 73 71 6c 69 74 65 33 20  ename, (sqlite3 
5280: 2a 29 64 62 2c 20 70 70 42 74 72 65 65 2c 20 62  *)db, ppBtree, b
5290: 74 72 65 65 5f 66 6c 61 67 73 29 3b 0a 20 20 69  tree_flags);.  i
52a0: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
52b0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42   ){.    sqlite3B
52c0: 74 72 65 65 53 65 74 42 75 73 79 48 61 6e 64 6c  treeSetBusyHandl
52d0: 65 72 28 2a 70 70 42 74 72 65 65 2c 20 28 76 6f  er(*ppBtree, (vo
52e0: 69 64 2a 29 26 64 62 2d 3e 62 75 73 79 48 61 6e  id*)&db->busyHan
52f0: 64 6c 65 72 29 3b 0a 20 20 20 20 73 71 6c 69 74  dler);.    sqlit
5300: 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65 53  e3BtreeSetCacheS
5310: 69 7a 65 28 2a 70 70 42 74 72 65 65 2c 20 6e 43  ize(*ppBtree, nC
5320: 61 63 68 65 29 3b 0a 20 20 7d 0a 20 20 72 65 74  ache);.  }.  ret
5330: 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  urn rc;.}../*.**
5340: 20 52 65 74 75 72 6e 20 55 54 46 2d 38 20 65 6e   Return UTF-8 en
5350: 63 6f 64 65 64 20 45 6e 67 6c 69 73 68 20 6c 61  coded English la
5360: 6e 67 75 61 67 65 20 65 78 70 6c 61 6e 61 74 69  nguage explanati
5370: 6f 6e 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72  on of the most r
5380: 65 63 65 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 0a  ecent.** error..
5390: 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  */.const char *s
53a0: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 73 71  qlite3_errmsg(sq
53b0: 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 63 6f  lite3 *db){.  co
53c0: 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69  nst char *z;.  i
53d0: 66 28 20 21 64 62 20 7c 7c 20 73 71 6c 69 74 65  f( !db || sqlite
53e0: 33 4d 61 6c 6c 6f 63 46 61 69 6c 65 64 28 29 20  3MallocFailed() 
53f0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 73 71  ){.    return sq
5400: 6c 69 74 65 33 45 72 72 53 74 72 28 53 51 4c 49  lite3ErrStr(SQLI
5410: 54 45 5f 4e 4f 4d 45 4d 29 3b 0a 20 20 7d 0a 20  TE_NOMEM);.  }. 
5420: 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
5430: 74 79 43 68 65 63 6b 28 64 62 29 20 7c 7c 20 64  tyCheck(db) || d
5440: 62 2d 3e 65 72 72 43 6f 64 65 3d 3d 53 51 4c 49  b->errCode==SQLI
5450: 54 45 5f 4d 49 53 55 53 45 20 29 7b 0a 20 20 20  TE_MISUSE ){.   
5460: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 45   return sqlite3E
5470: 72 72 53 74 72 28 53 51 4c 49 54 45 5f 4d 49 53  rrStr(SQLITE_MIS
5480: 55 53 45 29 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20  USE);.  }.  z = 
5490: 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76  (char*)sqlite3_v
54a0: 61 6c 75 65 5f 74 65 78 74 28 64 62 2d 3e 70 45  alue_text(db->pE
54b0: 72 72 29 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20  rr);.  if( z==0 
54c0: 29 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74  ){.    z = sqlit
54d0: 65 33 45 72 72 53 74 72 28 64 62 2d 3e 65 72 72  e3ErrStr(db->err
54e0: 43 6f 64 65 29 3b 0a 20 20 7d 0a 20 20 72 65 74  Code);.  }.  ret
54f0: 75 72 6e 20 7a 3b 0a 7d 0a 0a 23 69 66 6e 64 65  urn z;.}..#ifnde
5500: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
5510: 46 31 36 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  F16./*.** Return
5520: 20 55 54 46 2d 31 36 20 65 6e 63 6f 64 65 64 20   UTF-16 encoded 
5530: 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65  English language
5540: 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 6f 66 20   explanation of 
5550: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 0a  the most recent.
5560: 2a 2a 20 65 72 72 6f 72 2e 0a 2a 2f 0a 63 6f 6e  ** error..*/.con
5570: 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  st void *sqlite3
5580: 5f 65 72 72 6d 73 67 31 36 28 73 71 6c 69 74 65  _errmsg16(sqlite
5590: 33 20 2a 64 62 29 7b 0a 20 20 2f 2a 20 42 65 63  3 *db){.  /* Bec
55a0: 61 75 73 65 20 61 6c 6c 20 74 68 65 20 63 68 61  ause all the cha
55b0: 72 61 63 74 65 72 73 20 69 6e 20 74 68 65 20 73  racters in the s
55c0: 74 72 69 6e 67 20 61 72 65 20 69 6e 20 74 68 65  tring are in the
55d0: 20 75 6e 69 63 6f 64 65 0a 20 20 2a 2a 20 72 61   unicode.  ** ra
55e0: 6e 67 65 20 30 78 30 30 2d 30 78 46 46 2c 20 69  nge 0x00-0xFF, i
55f0: 66 20 77 65 20 70 61 64 20 74 68 65 20 62 69 67  f we pad the big
5600: 2d 65 6e 64 69 61 6e 20 73 74 72 69 6e 67 20 77  -endian string w
5610: 69 74 68 20 61 20 0a 20 20 2a 2a 20 7a 65 72 6f  ith a .  ** zero
5620: 20 62 79 74 65 2c 20 77 65 20 63 61 6e 20 6f 62   byte, we can ob
5630: 74 61 69 6e 20 74 68 65 20 6c 69 74 74 6c 65 2d  tain the little-
5640: 65 6e 64 69 61 6e 20 73 74 72 69 6e 67 20 77 69  endian string wi
5650: 74 68 0a 20 20 2a 2a 20 26 62 69 67 5f 65 6e 64  th.  ** &big_end
5660: 69 61 6e 5b 31 5d 2e 0a 20 20 2a 2f 0a 20 20 73  ian[1]..  */.  s
5670: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
5680: 20 6f 75 74 4f 66 4d 65 6d 42 65 5b 5d 20 3d 20   outOfMemBe[] = 
5690: 7b 0a 20 20 20 20 30 2c 20 27 6f 27 2c 20 30 2c  {.    0, 'o', 0,
56a0: 20 27 75 27 2c 20 30 2c 20 27 74 27 2c 20 30 2c   'u', 0, 't', 0,
56b0: 20 27 20 27 2c 20 0a 20 20 20 20 30 2c 20 27 6f   ' ', .    0, 'o
56c0: 27 2c 20 30 2c 20 27 66 27 2c 20 30 2c 20 27 20  ', 0, 'f', 0, ' 
56d0: 27 2c 20 0a 20 20 20 20 30 2c 20 27 6d 27 2c 20  ', .    0, 'm', 
56e0: 30 2c 20 27 65 27 2c 20 30 2c 20 27 6d 27 2c 20  0, 'e', 0, 'm', 
56f0: 30 2c 20 27 6f 27 2c 20 30 2c 20 27 72 27 2c 20  0, 'o', 0, 'r', 
5700: 30 2c 20 27 79 27 2c 20 30 2c 20 30 2c 20 30 0a  0, 'y', 0, 0, 0.
5710: 20 20 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f    };.  static co
5720: 6e 73 74 20 63 68 61 72 20 6d 69 73 75 73 65 42  nst char misuseB
5730: 65 20 5b 5d 20 3d 20 7b 0a 20 20 20 20 30 2c 20  e [] = {.    0, 
5740: 27 6c 27 2c 20 30 2c 20 27 69 27 2c 20 30 2c 20  'l', 0, 'i', 0, 
5750: 27 62 27 2c 20 30 2c 20 27 72 27 2c 20 30 2c 20  'b', 0, 'r', 0, 
5760: 27 61 27 2c 20 30 2c 20 27 72 27 2c 20 30 2c 20  'a', 0, 'r', 0, 
5770: 27 79 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20  'y', 0, ' ', .  
5780: 20 20 30 2c 20 27 72 27 2c 20 30 2c 20 27 6f 27    0, 'r', 0, 'o'
5790: 2c 20 30 2c 20 27 75 27 2c 20 30 2c 20 27 74 27  , 0, 'u', 0, 't'
57a0: 2c 20 30 2c 20 27 69 27 2c 20 30 2c 20 27 6e 27  , 0, 'i', 0, 'n'
57b0: 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20 27 20 27  , 0, 'e', 0, ' '
57c0: 2c 20 0a 20 20 20 20 30 2c 20 27 63 27 2c 20 30  , .    0, 'c', 0
57d0: 2c 20 27 61 27 2c 20 30 2c 20 27 6c 27 2c 20 30  , 'a', 0, 'l', 0
57e0: 2c 20 27 6c 27 2c 20 30 2c 20 27 65 27 2c 20 30  , 'l', 0, 'e', 0
57f0: 2c 20 27 64 27 2c 20 30 2c 20 27 20 27 2c 20 0a  , 'd', 0, ' ', .
5800: 20 20 20 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27      0, 'o', 0, '
5810: 75 27 2c 20 30 2c 20 27 74 27 2c 20 30 2c 20 27  u', 0, 't', 0, '
5820: 20 27 2c 20 0a 20 20 20 20 30 2c 20 27 6f 27 2c   ', .    0, 'o',
5830: 20 30 2c 20 27 66 27 2c 20 30 2c 20 27 20 27 2c   0, 'f', 0, ' ',
5840: 20 0a 20 20 20 20 30 2c 20 27 73 27 2c 20 30 2c   .    0, 's', 0,
5850: 20 27 65 27 2c 20 30 2c 20 27 71 27 2c 20 30 2c   'e', 0, 'q', 0,
5860: 20 27 75 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c   'u', 0, 'e', 0,
5870: 20 27 6e 27 2c 20 30 2c 20 27 63 27 2c 20 30 2c   'n', 0, 'c', 0,
5880: 20 27 65 27 2c 20 30 2c 20 30 2c 20 30 0a 20 20   'e', 0, 0, 0.  
5890: 7d 3b 0a 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  };..  const void
58a0: 20 2a 7a 3b 0a 20 20 69 66 28 20 73 71 6c 69 74   *z;.  if( sqlit
58b0: 65 33 4d 61 6c 6c 6f 63 46 61 69 6c 65 64 28 29  e3MallocFailed()
58c0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 28   ){.    return (
58d0: 76 6f 69 64 20 2a 29 28 26 6f 75 74 4f 66 4d 65  void *)(&outOfMe
58e0: 6d 42 65 5b 53 51 4c 49 54 45 5f 55 54 46 31 36  mBe[SQLITE_UTF16
58f0: 4e 41 54 49 56 45 3d 3d 53 51 4c 49 54 45 5f 55  NATIVE==SQLITE_U
5900: 54 46 31 36 4c 45 3f 31 3a 30 5d 29 3b 0a 20 20  TF16LE?1:0]);.  
5910: 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  }.  if( sqlite3S
5920: 61 66 65 74 79 43 68 65 63 6b 28 64 62 29 20 7c  afetyCheck(db) |
5930: 7c 20 64 62 2d 3e 65 72 72 43 6f 64 65 3d 3d 53  | db->errCode==S
5940: 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 29 7b 0a  QLITE_MISUSE ){.
5950: 20 20 20 20 72 65 74 75 72 6e 20 28 76 6f 69 64      return (void
5960: 20 2a 29 28 26 6d 69 73 75 73 65 42 65 5b 53 51   *)(&misuseBe[SQ
5970: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
5980: 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  ==SQLITE_UTF16LE
5990: 3f 31 3a 30 5d 29 3b 0a 20 20 7d 0a 20 20 7a 20  ?1:0]);.  }.  z 
59a0: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
59b0: 74 65 78 74 31 36 28 64 62 2d 3e 70 45 72 72 29  text16(db->pErr)
59c0: 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a  ;.  if( z==0 ){.
59d0: 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65      sqlite3Value
59e0: 53 65 74 53 74 72 28 64 62 2d 3e 70 45 72 72 2c  SetStr(db->pErr,
59f0: 20 2d 31 2c 20 73 71 6c 69 74 65 33 45 72 72 53   -1, sqlite3ErrS
5a00: 74 72 28 64 62 2d 3e 65 72 72 43 6f 64 65 29 2c  tr(db->errCode),
5a10: 0a 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45  .         SQLITE
5a20: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
5a30: 41 54 49 43 29 3b 0a 20 20 20 20 7a 20 3d 20 73  ATIC);.    z = s
5a40: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
5a50: 74 31 36 28 64 62 2d 3e 70 45 72 72 29 3b 0a 20  t16(db->pErr);. 
5a60: 20 7d 0a 20 20 73 71 6c 69 74 65 33 41 70 69 45   }.  sqlite3ApiE
5a70: 78 69 74 28 30 2c 20 30 29 3b 0a 20 20 72 65 74  xit(0, 0);.  ret
5a80: 75 72 6e 20 7a 3b 0a 7d 0a 23 65 6e 64 69 66 20  urn z;.}.#endif 
5a90: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  /* SQLITE_OMIT_U
5aa0: 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52  TF16 */../*.** R
5ab0: 65 74 75 72 6e 20 74 68 65 20 6d 6f 73 74 20 72  eturn the most r
5ac0: 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65  ecent error code
5ad0: 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 61 6e   generated by an
5ae0: 20 53 51 4c 69 74 65 20 72 6f 75 74 69 6e 65 2e   SQLite routine.
5af0: 20 49 66 20 4e 55 4c 4c 20 69 73 0a 2a 2a 20 70   If NULL is.** p
5b00: 61 73 73 65 64 20 74 6f 20 74 68 69 73 20 66 75  assed to this fu
5b10: 6e 63 74 69 6f 6e 2c 20 77 65 20 61 73 73 75 6d  nction, we assum
5b20: 65 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69  e a malloc() fai
5b30: 6c 65 64 20 64 75 72 69 6e 67 20 73 71 6c 69 74  led during sqlit
5b40: 65 33 5f 6f 70 65 6e 28 29 2e 0a 2a 2f 0a 69 6e  e3_open()..*/.in
5b50: 74 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64  t sqlite3_errcod
5b60: 65 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  e(sqlite3 *db){.
5b70: 20 20 69 66 28 20 21 64 62 20 7c 7c 20 73 71 6c    if( !db || sql
5b80: 69 74 65 33 4d 61 6c 6c 6f 63 46 61 69 6c 65 64  ite3MallocFailed
5b90: 28 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  () ){.    return
5ba0: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20   SQLITE_NOMEM;. 
5bb0: 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
5bc0: 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29 20  SafetyCheck(db) 
5bd0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
5be0: 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d  LITE_MISUSE;.  }
5bf0: 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 65 72  .  return db->er
5c00: 72 43 6f 64 65 20 26 20 64 62 2d 3e 65 72 72 4d  rCode & db->errM
5c10: 61 73 6b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72  ask;.}../*.** Cr
5c20: 65 61 74 65 20 61 20 6e 65 77 20 63 6f 6c 6c 61  eate a new colla
5c30: 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 66 6f  ting function fo
5c40: 72 20 64 61 74 61 62 61 73 65 20 22 64 62 22 2e  r database "db".
5c50: 20 20 54 68 65 20 6e 61 6d 65 20 69 73 20 7a 4e    The name is zN
5c60: 61 6d 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 65  ame.** and the e
5c70: 6e 63 6f 64 69 6e 67 20 69 73 20 65 6e 63 2e 0a  ncoding is enc..
5c80: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 72  */.static int cr
5c90: 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 0a 20  eateCollation(. 
5ca0: 20 73 71 6c 69 74 65 33 2a 20 64 62 2c 20 0a 20   sqlite3* db, . 
5cb0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
5cc0: 6d 65 2c 20 0a 20 20 69 6e 74 20 65 6e 63 2c 20  me, .  int enc, 
5cd0: 0a 20 20 76 6f 69 64 2a 20 70 43 74 78 2c 0a 20  .  void* pCtx,. 
5ce0: 20 69 6e 74 28 2a 78 43 6f 6d 70 61 72 65 29 28   int(*xCompare)(
5cf0: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
5d00: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
5d10: 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 43 6f 6c 6c  void*).){.  Coll
5d20: 53 65 71 20 2a 70 43 6f 6c 6c 3b 0a 20 20 69 6e  Seq *pColl;.  in
5d30: 74 20 65 6e 63 32 3b 0a 20 20 0a 20 20 69 66 28  t enc2;.  .  if(
5d40: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
5d50: 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72  eck(db) ){.    r
5d60: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53  eturn SQLITE_MIS
5d70: 55 53 45 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  USE;.  }..  /* I
5d80: 66 20 53 51 4c 49 54 45 5f 55 54 46 31 36 20 69  f SQLITE_UTF16 i
5d90: 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74  s specified as t
5da0: 68 65 20 65 6e 63 6f 64 69 6e 67 20 74 79 70 65  he encoding type
5db0: 2c 20 74 72 61 6e 73 66 6f 72 6d 20 74 68 69 73  , transform this
5dc0: 0a 20 20 2a 2a 20 74 6f 20 6f 6e 65 20 6f 66 20  .  ** to one of 
5dd0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 6f  SQLITE_UTF16LE o
5de0: 72 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  r SQLITE_UTF16BE
5df0: 20 75 73 69 6e 67 20 74 68 65 0a 20 20 2a 2a 20   using the.  ** 
5e00: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
5e10: 56 45 20 6d 61 63 72 6f 2e 20 53 51 4c 49 54 45  VE macro. SQLITE
5e20: 5f 55 54 46 31 36 20 69 73 20 6e 6f 74 20 75 73  _UTF16 is not us
5e30: 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 20  ed internally.. 
5e40: 20 2a 2f 0a 20 20 65 6e 63 32 20 3d 20 65 6e 63   */.  enc2 = enc
5e50: 20 26 20 7e 53 51 4c 49 54 45 5f 55 54 46 31 36   & ~SQLITE_UTF16
5e60: 5f 41 4c 49 47 4e 45 44 3b 0a 20 20 69 66 28 20  _ALIGNED;.  if( 
5e70: 65 6e 63 32 3d 3d 53 51 4c 49 54 45 5f 55 54 46  enc2==SQLITE_UTF
5e80: 31 36 20 29 7b 0a 20 20 20 20 65 6e 63 32 20 3d  16 ){.    enc2 =
5e90: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
5ea0: 49 56 45 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  IVE;.  }..  if( 
5eb0: 28 65 6e 63 32 26 7e 33 29 21 3d 30 20 29 7b 0a  (enc2&~3)!=0 ){.
5ec0: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
5ed0: 28 64 62 2c 20 53 51 4c 49 54 45 5f 45 52 52 4f  (db, SQLITE_ERRO
5ee0: 52 2c 20 22 75 6e 6b 6e 6f 77 6e 20 65 6e 63 6f  R, "unknown enco
5ef0: 64 69 6e 67 22 29 3b 0a 20 20 20 20 72 65 74 75  ding");.    retu
5f00: 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b  rn SQLITE_ERROR;
5f10: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 68 65 63 6b  .  }..  /* Check
5f20: 20 69 66 20 74 68 69 73 20 63 61 6c 6c 20 69 73   if this call is
5f30: 20 72 65 6d 6f 76 69 6e 67 20 6f 72 20 72 65 70   removing or rep
5f40: 6c 61 63 69 6e 67 20 61 6e 20 65 78 69 73 74 69  lacing an existi
5f50: 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a 20 20  ng collation .  
5f60: 2a 2a 20 73 65 71 75 65 6e 63 65 2e 20 49 66 20  ** sequence. If 
5f70: 73 6f 2c 20 61 6e 64 20 74 68 65 72 65 20 61 72  so, and there ar
5f80: 65 20 61 63 74 69 76 65 20 56 4d 73 2c 20 72 65  e active VMs, re
5f90: 74 75 72 6e 20 62 75 73 79 2e 20 49 66 20 74 68  turn busy. If th
5fa0: 65 72 65 0a 20 20 2a 2a 20 61 72 65 20 6e 6f 20  ere.  ** are no 
5fb0: 61 63 74 69 76 65 20 56 4d 73 2c 20 69 6e 76 61  active VMs, inva
5fc0: 6c 69 64 61 74 65 20 61 6e 79 20 70 72 65 2d 63  lidate any pre-c
5fd0: 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e  ompiled statemen
5fe0: 74 73 2e 0a 20 20 2a 2f 0a 20 20 70 43 6f 6c 6c  ts..  */.  pColl
5ff0: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 43 6f   = sqlite3FindCo
6000: 6c 6c 53 65 71 28 64 62 2c 20 28 75 38 29 65 6e  llSeq(db, (u8)en
6010: 63 32 2c 20 7a 4e 61 6d 65 2c 20 73 74 72 6c 65  c2, zName, strle
6020: 6e 28 7a 4e 61 6d 65 29 2c 20 30 29 3b 0a 20 20  n(zName), 0);.  
6030: 69 66 28 20 70 43 6f 6c 6c 20 26 26 20 70 43 6f  if( pColl && pCo
6040: 6c 6c 2d 3e 78 43 6d 70 20 29 7b 0a 20 20 20 20  ll->xCmp ){.    
6050: 69 66 28 20 64 62 2d 3e 61 63 74 69 76 65 56 64  if( db->activeVd
6060: 62 65 43 6e 74 20 29 7b 0a 20 20 20 20 20 20 73  beCnt ){.      s
6070: 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20  qlite3Error(db, 
6080: 53 51 4c 49 54 45 5f 42 55 53 59 2c 20 0a 20 20  SQLITE_BUSY, .  
6090: 20 20 20 20 20 20 22 55 6e 61 62 6c 65 20 74 6f        "Unable to
60a0: 20 64 65 6c 65 74 65 2f 6d 6f 64 69 66 79 20 63   delete/modify c
60b0: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
60c0: 65 20 64 75 65 20 74 6f 20 61 63 74 69 76 65 20  e due to active 
60d0: 73 74 61 74 65 6d 65 6e 74 73 22 29 3b 0a 20 20  statements");.  
60e0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
60f0: 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 0a 20 20  E_BUSY;.    }.  
6100: 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
6110: 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
6120: 73 28 64 62 29 3b 0a 20 20 7d 0a 0a 20 20 70 43  s(db);.  }..  pC
6130: 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  oll = sqlite3Fin
6140: 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20 28 75 38  dCollSeq(db, (u8
6150: 29 65 6e 63 32 2c 20 7a 4e 61 6d 65 2c 20 73 74  )enc2, zName, st
6160: 72 6c 65 6e 28 7a 4e 61 6d 65 29 2c 20 31 29 3b  rlen(zName), 1);
6170: 0a 20 20 69 66 28 20 70 43 6f 6c 6c 20 29 7b 0a  .  if( pColl ){.
6180: 20 20 20 20 70 43 6f 6c 6c 2d 3e 78 43 6d 70 20      pColl->xCmp 
6190: 3d 20 78 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20  = xCompare;.    
61a0: 70 43 6f 6c 6c 2d 3e 70 55 73 65 72 20 3d 20 70  pColl->pUser = p
61b0: 43 74 78 3b 0a 20 20 20 20 70 43 6f 6c 6c 2d 3e  Ctx;.    pColl->
61c0: 65 6e 63 20 3d 20 65 6e 63 32 20 7c 20 28 65 6e  enc = enc2 | (en
61d0: 63 20 26 20 53 51 4c 49 54 45 5f 55 54 46 31 36  c & SQLITE_UTF16
61e0: 5f 41 4c 49 47 4e 45 44 29 3b 0a 20 20 7d 0a 20  _ALIGNED);.  }. 
61f0: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62   sqlite3Error(db
6200: 2c 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 30 29 3b  , SQLITE_OK, 0);
6210: 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  .  return SQLITE
6220: 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54  _OK;.}.../*.** T
6230: 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f 65 73  his routine does
6240: 20 74 68 65 20 77 6f 72 6b 20 6f 66 20 6f 70 65   the work of ope
6250: 6e 69 6e 67 20 61 20 64 61 74 61 62 61 73 65 20  ning a database 
6260: 6f 6e 20 62 65 68 61 6c 66 20 6f 66 0a 2a 2a 20  on behalf of.** 
6270: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29 20 61  sqlite3_open() a
6280: 6e 64 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31  nd sqlite3_open1
6290: 36 28 29 2e 20 54 68 65 20 64 61 74 61 62 61 73  6(). The databas
62a0: 65 20 66 69 6c 65 6e 61 6d 65 20 22 7a 46 69 6c  e filename "zFil
62b0: 65 6e 61 6d 65 22 20 20 0a 2a 2a 20 69 73 20 55  ename"  .** is U
62c0: 54 46 2d 38 20 65 6e 63 6f 64 65 64 2e 0a 2a 2f  TF-8 encoded..*/
62d0: 0a 73 74 61 74 69 63 20 69 6e 74 20 6f 70 65 6e  .static int open
62e0: 44 61 74 61 62 61 73 65 28 0a 20 20 63 6f 6e 73  Database(.  cons
62f0: 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d  t char *zFilenam
6300: 65 2c 20 2f 2a 20 44 61 74 61 62 61 73 65 20 66  e, /* Database f
6310: 69 6c 65 6e 61 6d 65 20 55 54 46 2d 38 20 65 6e  ilename UTF-8 en
6320: 63 6f 64 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74  coded */.  sqlit
6330: 65 33 20 2a 2a 70 70 44 62 20 20 20 20 20 20 20  e3 **ppDb       
6340: 20 20 2f 2a 20 4f 55 54 3a 20 52 65 74 75 72 6e    /* OUT: Return
6350: 65 64 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  ed database hand
6360: 6c 65 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  le */.){.  sqlit
6370: 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63  e3 *db;.  int rc
6380: 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f  ;.  CollSeq *pCo
6390: 6c 6c 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 21  ll;..  assert( !
63a0: 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 46 61 69  sqlite3MallocFai
63b0: 6c 65 64 28 29 20 29 3b 0a 0a 20 20 2f 2a 20 41  led() );..  /* A
63c0: 6c 6c 6f 63 61 74 65 20 74 68 65 20 73 71 6c 69  llocate the sqli
63d0: 74 65 20 64 61 74 61 20 73 74 72 75 63 74 75 72  te data structur
63e0: 65 20 2a 2f 0a 20 20 64 62 20 3d 20 73 71 6c 69  e */.  db = sqli
63f0: 74 65 4d 61 6c 6c 6f 63 28 20 73 69 7a 65 6f 66  teMalloc( sizeof
6400: 28 73 71 6c 69 74 65 33 29 20 29 3b 0a 20 20 69  (sqlite3) );.  i
6410: 66 28 20 64 62 3d 3d 30 20 29 20 67 6f 74 6f 20  f( db==0 ) goto 
6420: 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a 20 20 64 62  opendb_out;.  db
6430: 2d 3e 65 72 72 4d 61 73 6b 20 3d 20 30 78 66 66  ->errMask = 0xff
6440: 3b 0a 20 20 64 62 2d 3e 70 72 69 6f 72 4e 65 77  ;.  db->priorNew
6450: 52 6f 77 69 64 20 3d 20 30 3b 0a 20 20 64 62 2d  Rowid = 0;.  db-
6460: 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f  >magic = SQLITE_
6470: 4d 41 47 49 43 5f 42 55 53 59 3b 0a 20 20 64 62  MAGIC_BUSY;.  db
6480: 2d 3e 6e 44 62 20 3d 20 32 3b 0a 20 20 64 62 2d  ->nDb = 2;.  db-
6490: 3e 61 44 62 20 3d 20 64 62 2d 3e 61 44 62 53 74  >aDb = db->aDbSt
64a0: 61 74 69 63 3b 0a 20 20 64 62 2d 3e 61 75 74 6f  atic;.  db->auto
64b0: 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 64 62  Commit = 1;.  db
64c0: 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54  ->flags |= SQLIT
64d0: 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 0a  E_ShortColNames.
64e0: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  #if SQLITE_DEFAU
64f0: 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 3c 34  LT_FILE_FORMAT<4
6500: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6510: 20 20 7c 20 53 51 4c 49 54 45 5f 4c 65 67 61 63    | SQLITE_Legac
6520: 79 46 69 6c 65 46 6d 74 0a 23 65 6e 64 69 66 0a  yFileFmt.#endif.
6530: 20 20 20 20 20 20 3b 0a 20 20 73 71 6c 69 74 65        ;.  sqlite
6540: 33 48 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61  3HashInit(&db->a
6550: 46 75 6e 63 2c 20 53 51 4c 49 54 45 5f 48 41 53  Func, SQLITE_HAS
6560: 48 5f 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20  H_STRING, 0);.  
6570: 73 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28  sqlite3HashInit(
6580: 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 2c 20 53  &db->aCollSeq, S
6590: 51 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e  QLITE_HASH_STRIN
65a0: 47 2c 20 30 29 3b 0a 23 69 66 6e 64 65 66 20 53  G, 0);.#ifndef S
65b0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
65c0: 41 4c 54 41 42 4c 45 0a 20 20 73 71 6c 69 74 65  ALTABLE.  sqlite
65d0: 33 48 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61  3HashInit(&db->a
65e0: 4d 6f 64 75 6c 65 2c 20 53 51 4c 49 54 45 5f 48  Module, SQLITE_H
65f0: 41 53 48 5f 53 54 52 49 4e 47 2c 20 30 29 3b 0a  ASH_STRING, 0);.
6600: 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 41 64 64  #endif..  /* Add
6610: 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c   the default col
6620: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
6630: 42 49 4e 41 52 59 2e 20 42 49 4e 41 52 59 20 77  BINARY. BINARY w
6640: 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68 20 55 54  orks for both UT
6650: 46 2d 38 0a 20 20 2a 2a 20 61 6e 64 20 55 54 46  F-8.  ** and UTF
6660: 2d 31 36 2c 20 73 6f 20 61 64 64 20 61 20 76 65  -16, so add a ve
6670: 72 73 69 6f 6e 20 66 6f 72 20 65 61 63 68 20 74  rsion for each t
6680: 6f 20 61 76 6f 69 64 20 61 6e 79 20 75 6e 6e 65  o avoid any unne
6690: 63 65 73 73 61 72 79 0a 20 20 2a 2a 20 63 6f 6e  cessary.  ** con
66a0: 76 65 72 73 69 6f 6e 73 2e 20 54 68 65 20 6f 6e  versions. The on
66b0: 6c 79 20 65 72 72 6f 72 20 74 68 61 74 20 63 61  ly error that ca
66c0: 6e 20 6f 63 63 75 72 20 68 65 72 65 20 69 73 20  n occur here is 
66d0: 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 75  a malloc() failu
66e0: 72 65 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 63  re..  */.  if( c
66f0: 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 64  reateCollation(d
6700: 62 2c 20 22 42 49 4e 41 52 59 22 2c 20 53 51 4c  b, "BINARY", SQL
6710: 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 62 69 6e  ITE_UTF8, 0, bin
6720: 43 6f 6c 6c 46 75 6e 63 29 20 7c 7c 0a 20 20 20  CollFunc) ||.   
6730: 20 20 20 63 72 65 61 74 65 43 6f 6c 6c 61 74 69     createCollati
6740: 6f 6e 28 64 62 2c 20 22 42 49 4e 41 52 59 22 2c  on(db, "BINARY",
6750: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 2c   SQLITE_UTF16BE,
6760: 20 30 2c 20 62 69 6e 43 6f 6c 6c 46 75 6e 63 29   0, binCollFunc)
6770: 20 7c 7c 0a 20 20 20 20 20 20 63 72 65 61 74 65   ||.      create
6780: 43 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22 42  Collation(db, "B
6790: 49 4e 41 52 59 22 2c 20 53 51 4c 49 54 45 5f 55  INARY", SQLITE_U
67a0: 54 46 31 36 4c 45 2c 20 30 2c 20 62 69 6e 43 6f  TF16LE, 0, binCo
67b0: 6c 6c 46 75 6e 63 29 20 7c 7c 0a 20 20 20 20 20  llFunc) ||.     
67c0: 20 28 64 62 2d 3e 70 44 66 6c 74 43 6f 6c 6c 20   (db->pDfltColl 
67d0: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c  = sqlite3FindCol
67e0: 6c 53 65 71 28 64 62 2c 20 53 51 4c 49 54 45 5f  lSeq(db, SQLITE_
67f0: 55 54 46 38 2c 20 22 42 49 4e 41 52 59 22 2c 20  UTF8, "BINARY", 
6800: 36 2c 20 30 29 29 3d 3d 30 20 0a 20 20 29 7b 0a  6, 0))==0 .  ){.
6810: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
6820: 74 65 33 4d 61 6c 6c 6f 63 46 61 69 6c 65 64 28  te3MallocFailed(
6830: 29 20 29 3b 0a 20 20 20 20 64 62 2d 3e 6d 61 67  ) );.    db->mag
6840: 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49  ic = SQLITE_MAGI
6850: 43 5f 43 4c 4f 53 45 44 3b 0a 20 20 20 20 67 6f  C_CLOSED;.    go
6860: 74 6f 20 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a 20  to opendb_out;. 
6870: 20 7d 0a 0a 20 20 2f 2a 20 41 6c 73 6f 20 61 64   }..  /* Also ad
6880: 64 20 61 20 55 54 46 2d 38 20 63 61 73 65 2d 69  d a UTF-8 case-i
6890: 6e 73 65 6e 73 69 74 69 76 65 20 63 6f 6c 6c 61  nsensitive colla
68a0: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 2e 20 2a  tion sequence. *
68b0: 2f 0a 20 20 63 72 65 61 74 65 43 6f 6c 6c 61 74  /.  createCollat
68c0: 69 6f 6e 28 64 62 2c 20 22 4e 4f 43 41 53 45 22  ion(db, "NOCASE"
68d0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30  , SQLITE_UTF8, 0
68e0: 2c 20 6e 6f 63 61 73 65 43 6f 6c 6c 61 74 69 6e  , nocaseCollatin
68f0: 67 46 75 6e 63 29 3b 0a 0a 20 20 2f 2a 20 53 65  gFunc);..  /* Se
6900: 74 20 66 6c 61 67 73 20 6f 6e 20 74 68 65 20 62  t flags on the b
6910: 75 69 6c 74 2d 69 6e 20 63 6f 6c 6c 61 74 69 6e  uilt-in collatin
6920: 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20  g sequences */. 
6930: 20 64 62 2d 3e 70 44 66 6c 74 43 6f 6c 6c 2d 3e   db->pDfltColl->
6940: 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 43 4f  type = SQLITE_CO
6950: 4c 4c 5f 42 49 4e 41 52 59 3b 0a 20 20 70 43 6f  LL_BINARY;.  pCo
6960: 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64  ll = sqlite3Find
6970: 43 6f 6c 6c 53 65 71 28 64 62 2c 20 53 51 4c 49  CollSeq(db, SQLI
6980: 54 45 5f 55 54 46 38 2c 20 22 4e 4f 43 41 53 45  TE_UTF8, "NOCASE
6990: 22 2c 20 36 2c 20 30 29 3b 0a 20 20 69 66 28 20  ", 6, 0);.  if( 
69a0: 70 43 6f 6c 6c 20 29 7b 0a 20 20 20 20 70 43 6f  pColl ){.    pCo
69b0: 6c 6c 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54  ll->type = SQLIT
69c0: 45 5f 43 4f 4c 4c 5f 4e 4f 43 41 53 45 3b 0a 20  E_COLL_NOCASE;. 
69d0: 20 7d 0a 0a 20 20 2f 2a 20 4f 70 65 6e 20 74 68   }..  /* Open th
69e0: 65 20 62 61 63 6b 65 6e 64 20 64 61 74 61 62 61  e backend databa
69f0: 73 65 20 64 72 69 76 65 72 20 2a 2f 0a 20 20 72  se driver */.  r
6a00: 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
6a10: 46 61 63 74 6f 72 79 28 64 62 2c 20 7a 46 69 6c  Factory(db, zFil
6a20: 65 6e 61 6d 65 2c 20 30 2c 20 4d 41 58 5f 50 41  ename, 0, MAX_PA
6a30: 47 45 53 2c 20 26 64 62 2d 3e 61 44 62 5b 30 5d  GES, &db->aDb[0]
6a40: 2e 70 42 74 29 3b 0a 20 20 69 66 28 20 72 63 21  .pBt);.  if( rc!
6a50: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
6a60: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64    sqlite3Error(d
6a70: 62 2c 20 72 63 2c 20 30 29 3b 0a 20 20 20 20 64  b, rc, 0);.    d
6a80: 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54  b->magic = SQLIT
6a90: 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 3b 0a  E_MAGIC_CLOSED;.
6aa0: 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f      goto opendb_
6ab0: 6f 75 74 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 61  out;.  }.  db->a
6ac0: 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 20 3d 20  Db[0].pSchema = 
6ad0: 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74  sqlite3SchemaGet
6ae0: 28 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42 74 29  (db->aDb[0].pBt)
6af0: 3b 0a 20 20 64 62 2d 3e 61 44 62 5b 31 5d 2e 70  ;.  db->aDb[1].p
6b00: 53 63 68 65 6d 61 20 3d 20 73 71 6c 69 74 65 33  Schema = sqlite3
6b10: 53 63 68 65 6d 61 47 65 74 28 30 29 3b 0a 0a 0a  SchemaGet(0);...
6b20: 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74    /* The default
6b30: 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 66 6f   safety_level fo
6b40: 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  r the main datab
6b50: 61 73 65 20 69 73 20 27 66 75 6c 6c 27 3b 20 66  ase is 'full'; f
6b60: 6f 72 20 74 68 65 20 74 65 6d 70 0a 20 20 2a 2a  or the temp.  **
6b70: 20 64 61 74 61 62 61 73 65 20 69 74 20 69 73 20   database it is 
6b80: 27 4e 4f 4e 45 27 2e 20 54 68 69 73 20 6d 61 74  'NONE'. This mat
6b90: 63 68 65 73 20 74 68 65 20 70 61 67 65 72 20 6c  ches the pager l
6ba0: 61 79 65 72 20 64 65 66 61 75 6c 74 73 2e 20 20  ayer defaults.  
6bb0: 0a 20 20 2a 2f 0a 20 20 64 62 2d 3e 61 44 62 5b  .  */.  db->aDb[
6bc0: 30 5d 2e 7a 4e 61 6d 65 20 3d 20 22 6d 61 69 6e  0].zName = "main
6bd0: 22 3b 0a 20 20 64 62 2d 3e 61 44 62 5b 30 5d 2e  ";.  db->aDb[0].
6be0: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 33  safety_level = 3
6bf0: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
6c00: 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 20 20 64  _OMIT_TEMPDB.  d
6c10: 62 2d 3e 61 44 62 5b 31 5d 2e 7a 4e 61 6d 65 20  b->aDb[1].zName 
6c20: 3d 20 22 74 65 6d 70 22 3b 0a 20 20 64 62 2d 3e  = "temp";.  db->
6c30: 61 44 62 5b 31 5d 2e 73 61 66 65 74 79 5f 6c 65  aDb[1].safety_le
6c40: 76 65 6c 20 3d 20 31 3b 0a 23 65 6e 64 69 66 0a  vel = 1;.#endif.
6c50: 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 61  .  /* Register a
6c60: 6c 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  ll built-in func
6c70: 74 69 6f 6e 73 2c 20 62 75 74 20 64 6f 20 6e 6f  tions, but do no
6c80: 74 20 61 74 74 65 6d 70 74 20 74 6f 20 72 65 61  t attempt to rea
6c90: 64 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62  d the.  ** datab
6ca0: 61 73 65 20 73 63 68 65 6d 61 20 79 65 74 2e 20  ase schema yet. 
6cb0: 54 68 69 73 20 69 73 20 64 65 6c 61 79 65 64 20  This is delayed 
6cc0: 75 6e 74 69 6c 20 74 68 65 20 66 69 72 73 74 20  until the first 
6cd0: 74 69 6d 65 20 74 68 65 20 64 61 74 61 62 61 73  time the databas
6ce0: 65 0a 20 20 2a 2a 20 69 73 20 61 63 63 65 73 73  e.  ** is access
6cf0: 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 21  ed..  */.  if( !
6d00: 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 46 61 69  sqlite3MallocFai
6d10: 6c 65 64 28 29 20 29 7b 0a 20 20 20 20 73 71 6c  led() ){.    sql
6d20: 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51  ite3Error(db, SQ
6d30: 4c 49 54 45 5f 4f 4b 2c 20 30 29 3b 0a 20 20 20  LITE_OK, 0);.   
6d40: 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
6d50: 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
6d60: 28 64 62 29 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e  (db);.  }.  db->
6d70: 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d  magic = SQLITE_M
6d80: 41 47 49 43 5f 4f 50 45 4e 3b 0a 0a 20 20 2f 2a  AGIC_OPEN;..  /*
6d90: 20 4c 6f 61 64 20 61 75 74 6f 6d 61 74 69 63 20   Load automatic 
6da0: 65 78 74 65 6e 73 69 6f 6e 73 20 2d 20 65 78 74  extensions - ext
6db0: 65 6e 73 69 6f 6e 73 20 74 68 61 74 20 68 61 76  ensions that hav
6dc0: 65 20 62 65 65 6e 20 72 65 67 69 73 74 65 72 65  e been registere
6dd0: 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 74 68 65  d.  ** using the
6de0: 20 73 71 6c 69 74 65 33 5f 61 75 74 6f 6d 61 74   sqlite3_automat
6df0: 69 63 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 41  ic_extension() A
6e00: 50 49 2e 0a 20 20 2a 2f 0a 20 20 28 76 6f 69 64  PI..  */.  (void
6e10: 29 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64  )sqlite3AutoLoad
6e20: 45 78 74 65 6e 73 69 6f 6e 73 28 64 62 29 3b 0a  Extensions(db);.
6e30: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
6e40: 4e 41 42 4c 45 5f 46 54 53 31 0a 20 20 7b 0a 20  NABLE_FTS1.  {. 
6e50: 20 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71     extern int sq
6e60: 6c 69 74 65 33 46 74 73 31 49 6e 69 74 28 73 71  lite3Fts1Init(sq
6e70: 6c 69 74 65 33 2a 29 3b 0a 20 20 20 20 73 71 6c  lite3*);.    sql
6e80: 69 74 65 33 46 74 73 31 49 6e 69 74 28 64 62 29  ite3Fts1Init(db)
6e90: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ;.  }.#endif..#i
6ea0: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
6eb0: 4c 45 5f 46 54 53 32 0a 20 20 7b 0a 20 20 20 20  LE_FTS2.  {.    
6ec0: 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
6ed0: 65 33 46 74 73 32 49 6e 69 74 28 73 71 6c 69 74  e3Fts2Init(sqlit
6ee0: 65 33 2a 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  e3*);.    sqlite
6ef0: 33 46 74 73 32 49 6e 69 74 28 64 62 29 3b 0a 20  3Fts2Init(db);. 
6f00: 20 7d 0a 23 65 6e 64 69 66 0a 0a 6f 70 65 6e 64   }.#endif..opend
6f10: 62 5f 6f 75 74 3a 0a 20 20 69 66 28 20 53 51 4c  b_out:.  if( SQL
6f20: 49 54 45 5f 4e 4f 4d 45 4d 3d 3d 28 72 63 20 3d  ITE_NOMEM==(rc =
6f30: 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65   sqlite3_errcode
6f40: 28 64 62 29 29 20 29 7b 0a 20 20 20 20 73 71 6c  (db)) ){.    sql
6f50: 69 74 65 33 5f 63 6c 6f 73 65 28 64 62 29 3b 0a  ite3_close(db);.
6f60: 20 20 20 20 64 62 20 3d 20 30 3b 0a 20 20 7d 0a      db = 0;.  }.
6f70: 20 20 2a 70 70 44 62 20 3d 20 64 62 3b 0a 20 20    *ppDb = db;.  
6f80: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 41 70  return sqlite3Ap
6f90: 69 45 78 69 74 28 30 2c 20 72 63 29 3b 0a 7d 0a  iExit(0, rc);.}.
6fa0: 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65  ./*.** Open a ne
6fb0: 77 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  w database handl
6fc0: 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  e..*/.int sqlite
6fd0: 33 5f 6f 70 65 6e 28 0a 20 20 63 6f 6e 73 74 20  3_open(.  const 
6fe0: 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c  char *zFilename,
6ff0: 20 0a 20 20 73 71 6c 69 74 65 33 20 2a 2a 70 70   .  sqlite3 **pp
7000: 44 62 20 0a 29 7b 0a 20 20 72 65 74 75 72 6e 20  Db .){.  return 
7010: 6f 70 65 6e 44 61 74 61 62 61 73 65 28 7a 46 69  openDatabase(zFi
7020: 6c 65 6e 61 6d 65 2c 20 70 70 44 62 29 3b 0a 7d  lename, ppDb);.}
7030: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
7040: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a  _OMIT_UTF16./*.*
7050: 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 64 61 74  * Open a new dat
7060: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 0a 2a 2f  abase handle..*/
7070: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70 65  .int sqlite3_ope
7080: 6e 31 36 28 0a 20 20 63 6f 6e 73 74 20 76 6f 69  n16(.  const voi
7090: 64 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 0a 20  d *zFilename, . 
70a0: 20 73 71 6c 69 74 65 33 20 2a 2a 70 70 44 62 0a   sqlite3 **ppDb.
70b0: 29 7b 0a 20 20 63 68 61 72 20 63 6f 6e 73 74 20  ){.  char const 
70c0: 2a 7a 46 69 6c 65 6e 61 6d 65 38 3b 20 20 20 2f  *zFilename8;   /
70d0: 2a 20 7a 46 69 6c 65 6e 61 6d 65 20 65 6e 63 6f  * zFilename enco
70e0: 64 65 64 20 69 6e 20 55 54 46 2d 38 20 69 6e 73  ded in UTF-8 ins
70f0: 74 65 61 64 20 6f 66 20 55 54 46 2d 31 36 20 2a  tead of UTF-16 *
7100: 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c  /.  int rc = SQL
7110: 49 54 45 5f 4f 4b 3b 0a 20 20 73 71 6c 69 74 65  ITE_OK;.  sqlite
7120: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 0a  3_value *pVal;..
7130: 20 20 61 73 73 65 72 74 28 20 7a 46 69 6c 65 6e    assert( zFilen
7140: 61 6d 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ame );.  assert(
7150: 20 70 70 44 62 20 29 3b 0a 20 20 2a 70 70 44 62   ppDb );.  *ppDb
7160: 20 3d 20 30 3b 0a 20 20 70 56 61 6c 20 3d 20 73   = 0;.  pVal = s
7170: 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29  qlite3ValueNew()
7180: 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65  ;.  sqlite3Value
7190: 53 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c  SetStr(pVal, -1,
71a0: 20 7a 46 69 6c 65 6e 61 6d 65 2c 20 53 51 4c 49   zFilename, SQLI
71b0: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 2c 20  TE_UTF16NATIVE, 
71c0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
71d0: 20 20 7a 46 69 6c 65 6e 61 6d 65 38 20 3d 20 73    zFilename8 = s
71e0: 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28  qlite3ValueText(
71f0: 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46  pVal, SQLITE_UTF
7200: 38 29 3b 0a 20 20 69 66 28 20 7a 46 69 6c 65 6e  8);.  if( zFilen
7210: 61 6d 65 38 20 29 7b 0a 20 20 20 20 72 63 20 3d  ame8 ){.    rc =
7220: 20 6f 70 65 6e 44 61 74 61 62 61 73 65 28 7a 46   openDatabase(zF
7230: 69 6c 65 6e 61 6d 65 38 2c 20 70 70 44 62 29 3b  ilename8, ppDb);
7240: 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
7250: 49 54 45 5f 4f 4b 20 26 26 20 2a 70 70 44 62 20  ITE_OK && *ppDb 
7260: 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
7270: 6c 69 74 65 33 5f 65 78 65 63 28 2a 70 70 44 62  lite3_exec(*ppDb
7280: 2c 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69  , "PRAGMA encodi
7290: 6e 67 20 3d 20 27 55 54 46 2d 31 36 27 22 2c 20  ng = 'UTF-16'", 
72a0: 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20  0, 0, 0);.      
72b0: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
72c0: 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  K ){.        sql
72d0: 69 74 65 33 5f 63 6c 6f 73 65 28 2a 70 70 44 62  ite3_close(*ppDb
72e0: 29 3b 0a 20 20 20 20 20 20 20 20 2a 70 70 44 62  );.        *ppDb
72f0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
7300: 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65    }.  }.  sqlite
7310: 33 56 61 6c 75 65 46 72 65 65 28 70 56 61 6c 29  3ValueFree(pVal)
7320: 3b 0a 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69  ;..  return sqli
7330: 74 65 33 41 70 69 45 78 69 74 28 30 2c 20 72 63  te3ApiExit(0, rc
7340: 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  );.}.#endif /* S
7350: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
7360: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66   */../*.** The f
7370: 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65  ollowing routine
7380: 20 64 65 73 74 72 6f 79 73 20 61 20 76 69 72 74   destroys a virt
7390: 75 61 6c 20 6d 61 63 68 69 6e 65 20 74 68 61 74  ual machine that
73a0: 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a   is created by.*
73b0: 2a 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f  * the sqlite3_co
73c0: 6d 70 69 6c 65 28 29 20 72 6f 75 74 69 6e 65 2e  mpile() routine.
73d0: 20 54 68 65 20 69 6e 74 65 67 65 72 20 72 65 74   The integer ret
73e0: 75 72 6e 65 64 20 69 73 20 61 6e 20 53 51 4c 49  urned is an SQLI
73f0: 54 45 5f 0a 2a 2a 20 73 75 63 63 65 73 73 2f 66  TE_.** success/f
7400: 61 69 6c 75 72 65 20 63 6f 64 65 20 74 68 61 74  ailure code that
7410: 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20 72   describes the r
7420: 65 73 75 6c 74 20 6f 66 20 65 78 65 63 75 74 69  esult of executi
7430: 6e 67 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a  ng the virtual.*
7440: 2a 20 6d 61 63 68 69 6e 65 2e 0a 2a 2a 0a 2a 2a  * machine..**.**
7450: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65   This routine se
7460: 74 73 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64  ts the error cod
7470: 65 20 61 6e 64 20 73 74 72 69 6e 67 20 72 65 74  e and string ret
7480: 75 72 6e 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69  urned by.** sqli
7490: 74 65 33 5f 65 72 72 63 6f 64 65 28 29 2c 20 73  te3_errcode(), s
74a0: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29 20  qlite3_errmsg() 
74b0: 61 6e 64 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  and sqlite3_errm
74c0: 73 67 31 36 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73  sg16()..*/.int s
74d0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
74e0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
74f0: 74 6d 74 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a  tmt){.  int rc;.
7500: 20 20 69 66 28 20 70 53 74 6d 74 3d 3d 30 20 29    if( pStmt==0 )
7510: 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
7520: 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  E_OK;.  }else{. 
7530: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
7540: 64 62 65 46 69 6e 61 6c 69 7a 65 28 28 56 64 62  dbeFinalize((Vdb
7550: 65 2a 29 70 53 74 6d 74 29 3b 0a 20 20 7d 0a 20  e*)pStmt);.  }. 
7560: 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f   return rc;.}../
7570: 2a 0a 2a 2a 20 54 65 72 6d 69 6e 61 74 65 20 74  *.** Terminate t
7580: 68 65 20 63 75 72 72 65 6e 74 20 65 78 65 63 75  he current execu
7590: 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 73  tion of an SQL s
75a0: 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65 73  tatement and res
75b0: 65 74 20 69 74 0a 2a 2a 20 62 61 63 6b 20 74 6f  et it.** back to
75c0: 20 69 74 73 20 73 74 61 72 74 69 6e 67 20 73 74   its starting st
75d0: 61 74 65 20 73 6f 20 74 68 61 74 20 69 74 20 63  ate so that it c
75e0: 61 6e 20 62 65 20 72 65 75 73 65 64 2e 20 41 20  an be reused. A 
75f0: 73 75 63 63 65 73 73 20 63 6f 64 65 20 66 72 6f  success code fro
7600: 6d 0a 2a 2a 20 74 68 65 20 70 72 69 6f 72 20 65  m.** the prior e
7610: 78 65 63 75 74 69 6f 6e 20 69 73 20 72 65 74 75  xecution is retu
7620: 72 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  rned..**.** This
7630: 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68   routine sets th
7640: 65 20 65 72 72 6f 72 20 63 6f 64 65 20 61 6e 64  e error code and
7650: 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64   string returned
7660: 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 65   by.** sqlite3_e
7670: 72 72 63 6f 64 65 28 29 2c 20 73 71 6c 69 74 65  rrcode(), sqlite
7680: 33 5f 65 72 72 6d 73 67 28 29 20 61 6e 64 20 73  3_errmsg() and s
7690: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36 28  qlite3_errmsg16(
76a0: 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  )..*/.int sqlite
76b0: 33 5f 72 65 73 65 74 28 73 71 6c 69 74 65 33 5f  3_reset(sqlite3_
76c0: 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20  stmt *pStmt){.  
76d0: 69 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 70 53  int rc;.  if( pS
76e0: 74 6d 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63  tmt==0 ){.    rc
76f0: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
7700: 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20  }else{.    rc = 
7710: 73 71 6c 69 74 65 33 56 64 62 65 52 65 73 65 74  sqlite3VdbeReset
7720: 28 28 56 64 62 65 2a 29 70 53 74 6d 74 29 3b 0a  ((Vdbe*)pStmt);.
7730: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
7740: 61 6b 65 52 65 61 64 79 28 28 56 64 62 65 2a 29  akeReady((Vdbe*)
7750: 70 53 74 6d 74 2c 20 2d 31 2c 20 30 2c 20 30 2c  pStmt, -1, 0, 0,
7760: 20 30 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28   0);.    assert(
7770: 20 28 72 63 20 26 20 28 73 71 6c 69 74 65 33 5f   (rc & (sqlite3_
7780: 64 62 5f 68 61 6e 64 6c 65 28 70 53 74 6d 74 29  db_handle(pStmt)
7790: 2d 3e 65 72 72 4d 61 73 6b 29 29 3d 3d 72 63 20  ->errMask))==rc 
77a0: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
77b0: 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67  rc;.}../*.** Reg
77c0: 69 73 74 65 72 20 61 20 6e 65 77 20 63 6f 6c 6c  ister a new coll
77d0: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77  ation sequence w
77e0: 69 74 68 20 74 68 65 20 64 61 74 61 62 61 73 65  ith the database
77f0: 20 68 61 6e 64 6c 65 20 64 62 2e 0a 2a 2f 0a 69   handle db..*/.i
7800: 6e 74 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  nt sqlite3_creat
7810: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20 73  e_collation(.  s
7820: 71 6c 69 74 65 33 2a 20 64 62 2c 20 0a 20 20 63  qlite3* db, .  c
7830: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
7840: 2c 20 0a 20 20 69 6e 74 20 65 6e 63 2c 20 0a 20  , .  int enc, . 
7850: 20 76 6f 69 64 2a 20 70 43 74 78 2c 0a 20 20 69   void* pCtx,.  i
7860: 6e 74 28 2a 78 43 6f 6d 70 61 72 65 29 28 76 6f  nt(*xCompare)(vo
7870: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f  id*,int,const vo
7880: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f  id*,int,const vo
7890: 69 64 2a 29 0a 29 7b 0a 20 20 69 6e 74 20 72 63  id*).){.  int rc
78a0: 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c  ;.  assert( !sql
78b0: 69 74 65 33 4d 61 6c 6c 6f 63 46 61 69 6c 65 64  ite3MallocFailed
78c0: 28 29 20 29 3b 0a 20 20 72 63 20 3d 20 63 72 65  () );.  rc = cre
78d0: 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c  ateCollation(db,
78e0: 20 7a 4e 61 6d 65 2c 20 65 6e 63 2c 20 70 43 74   zName, enc, pCt
78f0: 78 2c 20 78 43 6f 6d 70 61 72 65 29 3b 0a 20 20  x, xCompare);.  
7900: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 41 70  return sqlite3Ap
7910: 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b 0a 7d  iExit(db, rc);.}
7920: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
7930: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a  _OMIT_UTF16./*.*
7940: 2a 20 52 65 67 69 73 74 65 72 20 61 20 6e 65 77  * Register a new
7950: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
7960: 6e 63 65 20 77 69 74 68 20 74 68 65 20 64 61 74  nce with the dat
7970: 61 62 61 73 65 20 68 61 6e 64 6c 65 20 64 62 2e  abase handle db.
7980: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
7990: 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
79a0: 31 36 28 0a 20 20 73 71 6c 69 74 65 33 2a 20 64  16(.  sqlite3* d
79b0: 62 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  b, .  const char
79c0: 20 2a 7a 4e 61 6d 65 2c 20 0a 20 20 69 6e 74 20   *zName, .  int 
79d0: 65 6e 63 2c 20 0a 20 20 76 6f 69 64 2a 20 70 43  enc, .  void* pC
79e0: 74 78 2c 0a 20 20 69 6e 74 28 2a 78 43 6f 6d 70  tx,.  int(*xComp
79f0: 61 72 65 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  are)(void*,int,c
7a00: 6f 6e 73 74 20 76 6f 69 64 2a 2c 69 6e 74 2c 63  onst void*,int,c
7a10: 6f 6e 73 74 20 76 6f 69 64 2a 29 0a 29 7b 0a 20  onst void*).){. 
7a20: 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45   int rc = SQLITE
7a30: 5f 4f 4b 3b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  _OK;.  char *zNa
7a40: 6d 65 38 3b 20 0a 20 20 61 73 73 65 72 74 28 20  me8; .  assert( 
7a50: 21 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 46 61  !sqlite3MallocFa
7a60: 69 6c 65 64 28 29 20 29 3b 0a 20 20 7a 4e 61 6d  iled() );.  zNam
7a70: 65 38 20 3d 20 73 71 6c 69 74 65 33 75 74 66 31  e8 = sqlite3utf1
7a80: 36 74 6f 38 28 7a 4e 61 6d 65 2c 20 2d 31 29 3b  6to8(zName, -1);
7a90: 0a 20 20 69 66 28 20 7a 4e 61 6d 65 38 20 29 7b  .  if( zName8 ){
7aa0: 0a 20 20 20 20 72 63 20 3d 20 63 72 65 61 74 65  .    rc = create
7ab0: 43 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 7a 4e  Collation(db, zN
7ac0: 61 6d 65 38 2c 20 65 6e 63 2c 20 70 43 74 78 2c  ame8, enc, pCtx,
7ad0: 20 78 43 6f 6d 70 61 72 65 29 3b 0a 20 20 20 20   xCompare);.    
7ae0: 73 71 6c 69 74 65 46 72 65 65 28 7a 4e 61 6d 65  sqliteFree(zName
7af0: 38 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  8);.  }.  return
7b00: 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
7b10: 64 62 2c 20 72 63 29 3b 0a 7d 0a 23 65 6e 64 69  db, rc);.}.#endi
7b20: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
7b30: 5f 55 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  _UTF16 */../*.**
7b40: 20 52 65 67 69 73 74 65 72 20 61 20 63 6f 6c 6c   Register a coll
7b50: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66  ation sequence f
7b60: 61 63 74 6f 72 79 20 63 61 6c 6c 62 61 63 6b 20  actory callback 
7b70: 77 69 74 68 20 74 68 65 20 64 61 74 61 62 61 73  with the databas
7b80: 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 64 62 2e 20  e handle.** db. 
7b90: 52 65 70 6c 61 63 65 20 61 6e 79 20 70 72 65 76  Replace any prev
7ba0: 69 6f 75 73 6c 79 20 69 6e 73 74 61 6c 6c 65 64  iously installed
7bb0: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
7bc0: 6e 63 65 20 66 61 63 74 6f 72 79 2e 0a 2a 2f 0a  nce factory..*/.
7bd0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c 6c  int sqlite3_coll
7be0: 61 74 69 6f 6e 5f 6e 65 65 64 65 64 28 0a 20 20  ation_needed(.  
7bf0: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 0a 20 20  sqlite3 *db, .  
7c00: 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65  void *pCollNeede
7c10: 64 41 72 67 2c 20 0a 20 20 76 6f 69 64 28 2a 78  dArg, .  void(*x
7c20: 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64  CollNeeded)(void
7c30: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65  *,sqlite3*,int e
7c40: 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68  TextRep,const ch
7c50: 61 72 2a 29 0a 29 7b 0a 20 20 69 66 28 20 73 71  ar*).){.  if( sq
7c60: 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
7c70: 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75  (db) ){.    retu
7c80: 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  rn SQLITE_MISUSE
7c90: 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 78 43 6f 6c  ;.  }.  db->xCol
7ca0: 6c 4e 65 65 64 65 64 20 3d 20 78 43 6f 6c 6c 4e  lNeeded = xCollN
7cb0: 65 65 64 65 64 3b 0a 20 20 64 62 2d 3e 78 43 6f  eeded;.  db->xCo
7cc0: 6c 6c 4e 65 65 64 65 64 31 36 20 3d 20 30 3b 0a  llNeeded16 = 0;.
7cd0: 20 20 64 62 2d 3e 70 43 6f 6c 6c 4e 65 65 64 65    db->pCollNeede
7ce0: 64 41 72 67 20 3d 20 70 43 6f 6c 6c 4e 65 65 64  dArg = pCollNeed
7cf0: 65 64 41 72 67 3b 0a 20 20 72 65 74 75 72 6e 20  edArg;.  return 
7d00: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69  SQLITE_OK;.}..#i
7d10: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
7d20: 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20 52 65  T_UTF16./*.** Re
7d30: 67 69 73 74 65 72 20 61 20 63 6f 6c 6c 61 74 69  gister a collati
7d40: 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 61 63 74  on sequence fact
7d50: 6f 72 79 20 63 61 6c 6c 62 61 63 6b 20 77 69 74  ory callback wit
7d60: 68 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  h the database h
7d70: 61 6e 64 6c 65 0a 2a 2a 20 64 62 2e 20 52 65 70  andle.** db. Rep
7d80: 6c 61 63 65 20 61 6e 79 20 70 72 65 76 69 6f 75  lace any previou
7d90: 73 6c 79 20 69 6e 73 74 61 6c 6c 65 64 20 63 6f  sly installed co
7da0: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
7db0: 20 66 61 63 74 6f 72 79 2e 0a 2a 2f 0a 69 6e 74   factory..*/.int
7dc0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 6c 61 74 69   sqlite3_collati
7dd0: 6f 6e 5f 6e 65 65 64 65 64 31 36 28 0a 20 20 73  on_needed16(.  s
7de0: 71 6c 69 74 65 33 20 2a 64 62 2c 20 0a 20 20 76  qlite3 *db, .  v
7df0: 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64  oid *pCollNeeded
7e00: 41 72 67 2c 20 0a 20 20 76 6f 69 64 28 2a 78 43  Arg, .  void(*xC
7e10: 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69  ollNeeded16)(voi
7e20: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
7e30: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76  eTextRep,const v
7e40: 6f 69 64 2a 29 0a 29 7b 0a 20 20 69 66 28 20 73  oid*).){.  if( s
7e50: 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
7e60: 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74  k(db) ){.    ret
7e70: 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  urn SQLITE_MISUS
7e80: 45 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 78 43 6f  E;.  }.  db->xCo
7e90: 6c 6c 4e 65 65 64 65 64 20 3d 20 30 3b 0a 20 20  llNeeded = 0;.  
7ea0: 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 31  db->xCollNeeded1
7eb0: 36 20 3d 20 78 43 6f 6c 6c 4e 65 65 64 65 64 31  6 = xCollNeeded1
7ec0: 36 3b 0a 20 20 64 62 2d 3e 70 43 6f 6c 6c 4e 65  6;.  db->pCollNe
7ed0: 65 64 65 64 41 72 67 20 3d 20 70 43 6f 6c 6c 4e  ededArg = pCollN
7ee0: 65 65 64 65 64 41 72 67 3b 0a 20 20 72 65 74 75  eededArg;.  retu
7ef0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
7f00: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
7f10: 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a  _OMIT_UTF16 */..
7f20: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
7f30: 4d 49 54 5f 47 4c 4f 42 41 4c 52 45 43 4f 56 45  MIT_GLOBALRECOVE
7f40: 52 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  R./*.** This fun
7f50: 63 74 69 6f 6e 20 69 73 20 6e 6f 77 20 61 6e 20  ction is now an 
7f60: 61 6e 61 63 68 72 6f 6e 69 73 6d 2e 20 49 74 20  anachronism. It 
7f70: 75 73 65 64 20 74 6f 20 62 65 20 75 73 65 64 20  used to be used 
7f80: 74 6f 20 72 65 63 6f 76 65 72 20 66 72 6f 6d 20  to recover from 
7f90: 61 0a 2a 2a 20 6d 61 6c 6c 6f 63 28 29 20 66 61  a.** malloc() fa
7fa0: 69 6c 75 72 65 2c 20 62 75 74 20 53 51 4c 69 74  ilure, but SQLit
7fb0: 65 20 6e 6f 77 20 64 6f 65 73 20 74 68 69 73 20  e now does this 
7fc0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a  automatically..*
7fd0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 67 6c  /.int sqlite3_gl
7fe0: 6f 62 61 6c 5f 72 65 63 6f 76 65 72 28 29 7b 0a  obal_recover(){.
7ff0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
8000: 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OK;.}.#endif../*
8010: 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20  .** Test to see 
8020: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
8030: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
8040: 65 63 74 69 6f 6e 20 69 73 20 69 6e 20 61 75 74  ection is in aut
8050: 6f 63 6f 6d 6d 69 74 0a 2a 2a 20 6d 6f 64 65 2e  ocommit.** mode.
8060: 20 20 52 65 74 75 72 6e 20 54 52 55 45 20 69 66    Return TRUE if
8070: 20 69 74 20 69 73 20 61 6e 64 20 46 41 4c 53 45   it is and FALSE
8080: 20 69 66 20 6e 6f 74 2e 20 20 41 75 74 6f 63 6f   if not.  Autoco
8090: 6d 6d 69 74 20 6d 6f 64 65 20 69 73 20 6f 6e 0a  mmit mode is on.
80a0: 2a 2a 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  ** by default.  
80b0: 41 75 74 6f 63 6f 6d 6d 69 74 20 69 73 20 64 69  Autocommit is di
80c0: 73 61 62 6c 65 64 20 62 79 20 61 20 42 45 47 49  sabled by a BEGI
80d0: 4e 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20  N statement and 
80e0: 72 65 65 6e 61 62 6c 65 64 0a 2a 2a 20 62 79 20  reenabled.** by 
80f0: 74 68 65 20 6e 65 78 74 20 43 4f 4d 4d 49 54 20  the next COMMIT 
8100: 6f 72 20 52 4f 4c 4c 42 41 43 4b 2e 0a 2a 2a 0a  or ROLLBACK..**.
8110: 2a 2a 2a 2a 2a 2a 2a 20 54 48 49 53 20 49 53 20  ******* THIS IS 
8120: 41 4e 20 45 58 50 45 52 49 4d 45 4e 54 41 4c 20  AN EXPERIMENTAL 
8130: 41 50 49 20 41 4e 44 20 49 53 20 53 55 42 4a 45  API AND IS SUBJE
8140: 43 54 20 54 4f 20 43 48 41 4e 47 45 20 2a 2a 2a  CT TO CHANGE ***
8150: 2a 2a 2a 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ***.*/.int sqlit
8160: 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
8170: 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  t(sqlite3 *db){.
8180: 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 61 75 74    return db->aut
8190: 6f 43 6f 6d 6d 69 74 3b 0a 7d 0a 0a 23 69 66 64  oCommit;.}..#ifd
81a0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
81b0: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
81c0: 69 6e 67 20 72 6f 75 74 69 6e 65 20 69 73 20 73  ing routine is s
81d0: 75 62 74 69 74 75 74 65 64 20 66 6f 72 20 63 6f  ubtituted for co
81e0: 6e 73 74 61 6e 74 20 53 51 4c 49 54 45 5f 43 4f  nstant SQLITE_CO
81f0: 52 52 55 50 54 20 69 6e 0a 2a 2a 20 64 65 62 75  RRUPT in.** debu
8200: 67 67 69 6e 67 20 62 75 69 6c 64 73 2e 20 20 54  gging builds.  T
8210: 68 69 73 20 70 72 6f 76 69 64 65 73 20 61 20 77  his provides a w
8220: 61 79 20 74 6f 20 73 65 74 20 61 20 62 72 65 61  ay to set a brea
8230: 6b 70 6f 69 6e 74 20 66 6f 72 20 77 68 65 6e 0a  kpoint for when.
8240: 2a 2a 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 73  ** corruption is
8250: 20 66 69 72 73 74 20 64 65 74 65 63 74 65 64 2e   first detected.
8260: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  .*/.int sqlite3C
8270: 6f 72 72 75 70 74 28 76 6f 69 64 29 7b 0a 20 20  orrupt(void){.  
8280: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 43 4f  return SQLITE_CO
8290: 52 52 55 50 54 3b 0a 7d 0a 23 65 6e 64 69 66 0a  RRUPT;.}.#endif.
82a0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
82b0: 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
82c0: 48 45 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20  HE./*.** Enable 
82d0: 6f 72 20 64 69 73 61 62 6c 65 20 74 68 65 20 73  or disable the s
82e0: 68 61 72 65 64 20 70 61 67 65 72 20 61 6e 64 20  hared pager and 
82f0: 73 63 68 65 6d 61 20 66 65 61 74 75 72 65 73 20  schema features 
8300: 66 6f 72 20 74 68 65 0a 2a 2a 20 63 75 72 72 65  for the.** curre
8310: 6e 74 20 74 68 72 65 61 64 2e 0a 2a 2a 0a 2a 2a  nt thread..**.**
8320: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 68   This routine sh
8330: 6f 75 6c 64 20 6f 6e 6c 79 20 62 65 20 63 61 6c  ould only be cal
8340: 6c 65 64 20 77 68 65 6e 20 74 68 65 72 65 20 61  led when there a
8350: 72 65 20 6e 6f 20 6f 70 65 6e 0a 2a 2a 20 64 61  re no open.** da
8360: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
8370: 6e 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ns..*/.int sqlit
8380: 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64  e3_enable_shared
8390: 5f 63 61 63 68 65 28 69 6e 74 20 65 6e 61 62 6c  _cache(int enabl
83a0: 65 29 7b 0a 20 20 54 68 72 65 61 64 44 61 74 61  e){.  ThreadData
83b0: 20 2a 70 54 64 20 3d 20 73 71 6c 69 74 65 33 54   *pTd = sqlite3T
83c0: 68 72 65 61 64 44 61 74 61 28 29 3b 0a 20 20 69  hreadData();.  i
83d0: 66 28 20 70 54 64 20 29 7b 0a 20 20 20 20 2f 2a  f( pTd ){.    /*
83e0: 20 49 74 20 69 73 20 6f 6e 6c 79 20 6c 65 67 61   It is only lega
83f0: 6c 20 74 6f 20 63 61 6c 6c 20 73 71 6c 69 74 65  l to call sqlite
8400: 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f  3_enable_shared_
8410: 63 61 63 68 65 28 29 20 77 68 65 6e 20 74 68 65  cache() when the
8420: 72 65 0a 20 20 20 20 2a 2a 20 61 72 65 20 6e 6f  re.    ** are no
8430: 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20   currently open 
8440: 62 2d 74 72 65 65 73 20 74 68 61 74 20 77 65 72  b-trees that wer
8450: 65 20 6f 70 65 6e 65 64 20 62 79 20 74 68 65 20  e opened by the 
8460: 63 61 6c 6c 69 6e 67 20 74 68 72 65 61 64 2e 0a  calling thread..
8470: 20 20 20 20 2a 2a 20 54 68 69 73 20 63 6f 6e 64      ** This cond
8480: 69 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 65 61  ition is only ea
8490: 73 79 20 74 6f 20 64 65 74 65 63 74 20 69 66 20  sy to detect if 
84a0: 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65  the shared-cache
84b0: 20 77 65 72 65 20 0a 20 20 20 20 2a 2a 20 70 72   were .    ** pr
84c0: 65 76 69 6f 75 73 6c 79 20 65 6e 61 62 6c 65 64  eviously enabled
84d0: 20 28 61 6e 64 20 69 73 20 62 65 69 6e 67 20 64   (and is being d
84e0: 69 73 61 62 6c 65 64 29 2e 20 0a 20 20 20 20 2a  isabled). .    *
84f0: 2f 0a 20 20 20 20 69 66 28 20 70 54 64 2d 3e 70  /.    if( pTd->p
8500: 42 74 72 65 65 20 26 26 20 21 65 6e 61 62 6c 65  Btree && !enable
8510: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
8520: 28 20 70 54 64 2d 3e 75 73 65 53 68 61 72 65 64  ( pTd->useShared
8530: 44 61 74 61 20 29 3b 0a 20 20 20 20 20 20 72 65  Data );.      re
8540: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
8550: 53 45 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70  SE;.    }..    p
8560: 54 64 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74  Td->useSharedDat
8570: 61 20 3d 20 65 6e 61 62 6c 65 3b 0a 20 20 20 20  a = enable;.    
8580: 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 68  sqlite3ReleaseTh
8590: 72 65 61 64 44 61 74 61 28 29 3b 0a 20 20 7d 0a  readData();.  }.
85a0: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
85b0: 41 70 69 45 78 69 74 28 30 2c 20 53 51 4c 49 54  ApiExit(0, SQLIT
85c0: 45 5f 4f 4b 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a  E_OK);.}.#endif.
85d0: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61  ./*.** This is a
85e0: 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 72 6f 75   convenience rou
85f0: 74 69 6e 65 20 74 68 61 74 20 6d 61 6b 65 73 20  tine that makes 
8600: 73 75 72 65 20 74 68 61 74 20 61 6c 6c 20 74 68  sure that all th
8610: 72 65 61 64 2d 73 70 65 63 69 66 69 63 0a 2a 2a  read-specific.**
8620: 20 64 61 74 61 20 66 6f 72 20 74 68 69 73 20 74   data for this t
8630: 68 72 65 61 64 20 68 61 73 20 62 65 65 6e 20 64  hread has been d
8640: 65 61 6c 6c 6f 63 61 74 65 64 2e 0a 2a 2f 0a 76  eallocated..*/.v
8650: 6f 69 64 20 73 71 6c 69 74 65 33 5f 74 68 72 65  oid sqlite3_thre
8660: 61 64 5f 63 6c 65 61 6e 75 70 28 76 6f 69 64 29  ad_cleanup(void)
8670: 7b 0a 20 20 54 68 72 65 61 64 44 61 74 61 20 2a  {.  ThreadData *
8680: 70 54 64 20 3d 20 73 71 6c 69 74 65 33 4f 73 54  pTd = sqlite3OsT
8690: 68 72 65 61 64 53 70 65 63 69 66 69 63 44 61 74  hreadSpecificDat
86a0: 61 28 30 29 3b 0a 20 20 69 66 28 20 70 54 64 20  a(0);.  if( pTd 
86b0: 29 7b 0a 20 20 20 20 6d 65 6d 73 65 74 28 70 54  ){.    memset(pT
86c0: 64 2c 20 30 2c 20 73 69 7a 65 6f 66 28 2a 70 54  d, 0, sizeof(*pT
86d0: 64 29 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  d));.    sqlite3
86e0: 4f 73 54 68 72 65 61 64 53 70 65 63 69 66 69 63  OsThreadSpecific
86f0: 44 61 74 61 28 2d 31 29 3b 0a 20 20 7d 0a 7d 0a  Data(-1);.  }.}.
8700: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 6d 65  ./*.** Return me
8710: 74 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ta information a
8720: 62 6f 75 74 20 61 20 73 70 65 63 69 66 69 63 20  bout a specific 
8730: 63 6f 6c 75 6d 6e 20 6f 66 20 61 20 64 61 74 61  column of a data
8740: 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2a 20 53  base table..** S
8750: 65 65 20 63 6f 6d 6d 65 6e 74 20 69 6e 20 73 71  ee comment in sq
8760: 6c 69 74 65 33 2e 68 20 28 73 71 6c 69 74 65 2e  lite3.h (sqlite.
8770: 68 2e 69 6e 29 20 66 6f 72 20 64 65 74 61 69 6c  h.in) for detail
8780: 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  s..*/.#ifdef SQL
8790: 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d  ITE_ENABLE_COLUM
87a0: 4e 5f 4d 45 54 41 44 41 54 41 0a 69 6e 74 20 73  N_METADATA.int s
87b0: 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c  qlite3_table_col
87c0: 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28 0a 20 20  umn_metadata(.  
87d0: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20  sqlite3 *db,    
87e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
87f0: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
8800: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
8810: 20 2a 7a 44 62 4e 61 6d 65 2c 20 20 20 20 20 20   *zDbName,      
8820: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 6e 61    /* Database na
8830: 6d 65 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  me or NULL */.  
8840: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 62  const char *zTab
8850: 6c 65 4e 61 6d 65 2c 20 20 20 20 20 2f 2a 20 54  leName,     /* T
8860: 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 63  able name */.  c
8870: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c 75  onst char *zColu
8880: 6d 6e 4e 61 6d 65 2c 20 20 20 20 2f 2a 20 43 6f  mnName,    /* Co
8890: 6c 75 6d 6e 20 6e 61 6d 65 20 2a 2f 0a 20 20 63  lumn name */.  c
88a0: 68 61 72 20 63 6f 6e 73 74 20 2a 2a 70 7a 44 61  har const **pzDa
88b0: 74 61 54 79 70 65 2c 20 20 20 20 2f 2a 20 4f 55  taType,    /* OU
88c0: 54 50 55 54 3a 20 44 65 63 6c 61 72 65 64 20 64  TPUT: Declared d
88d0: 61 74 61 20 74 79 70 65 20 2a 2f 0a 20 20 63 68  ata type */.  ch
88e0: 61 72 20 63 6f 6e 73 74 20 2a 2a 70 7a 43 6f 6c  ar const **pzCol
88f0: 6c 53 65 71 2c 20 20 20 20 20 2f 2a 20 4f 55 54  lSeq,     /* OUT
8900: 50 55 54 3a 20 43 6f 6c 6c 61 74 69 6f 6e 20 73  PUT: Collation s
8910: 65 71 75 65 6e 63 65 20 6e 61 6d 65 20 2a 2f 0a  equence name */.
8920: 20 20 69 6e 74 20 2a 70 4e 6f 74 4e 75 6c 6c 2c    int *pNotNull,
8930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8940: 20 4f 55 54 50 55 54 3a 20 54 72 75 65 20 69 66   OUTPUT: True if
8950: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
8960: 61 69 6e 74 20 65 78 69 73 74 73 20 2a 2f 0a 20  aint exists */. 
8970: 20 69 6e 74 20 2a 70 50 72 69 6d 61 72 79 4b 65   int *pPrimaryKe
8980: 79 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  y,           /* 
8990: 4f 55 54 50 55 54 3a 20 54 72 75 65 20 69 66 20  OUTPUT: True if 
89a0: 63 6f 6c 75 6d 6e 20 70 61 72 74 20 6f 66 20 50  column part of P
89b0: 4b 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 41 75 74  K */.  int *pAut
89c0: 6f 69 6e 63 20 20 20 20 20 20 20 20 20 20 20 20  oinc            
89d0: 20 20 20 2f 2a 20 4f 55 54 50 55 54 3a 20 54 72     /* OUTPUT: Tr
89e0: 75 65 20 69 66 20 63 6f 6c 75 6d 73 20 69 73 20  ue if colums is 
89f0: 61 75 74 6f 2d 69 6e 63 72 65 6d 65 6e 74 20 2a  auto-increment *
8a00: 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  /.){.  int rc;. 
8a10: 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 20 3d   char *zErrMsg =
8a20: 20 30 3b 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   0;.  Table *pTa
8a30: 62 20 3d 20 30 3b 0a 20 20 43 6f 6c 75 6d 6e 20  b = 0;.  Column 
8a40: 2a 70 43 6f 6c 20 3d 20 30 3b 0a 20 20 69 6e 74  *pCol = 0;.  int
8a50: 20 69 43 6f 6c 3b 0a 0a 20 20 63 68 61 72 20 63   iCol;..  char c
8a60: 6f 6e 73 74 20 2a 7a 44 61 74 61 54 79 70 65 20  onst *zDataType 
8a70: 3d 20 30 3b 0a 20 20 63 68 61 72 20 63 6f 6e 73  = 0;.  char cons
8a80: 74 20 2a 7a 43 6f 6c 6c 53 65 71 20 3d 20 30 3b  t *zCollSeq = 0;
8a90: 0a 20 20 69 6e 74 20 6e 6f 74 6e 75 6c 6c 20 3d  .  int notnull =
8aa0: 20 30 3b 0a 20 20 69 6e 74 20 70 72 69 6d 61 72   0;.  int primar
8ab0: 79 6b 65 79 20 3d 20 30 3b 0a 20 20 69 6e 74 20  ykey = 0;.  int 
8ac0: 61 75 74 6f 69 6e 63 20 3d 20 30 3b 0a 0a 20 20  autoinc = 0;..  
8ad0: 2f 2a 20 45 6e 73 75 72 65 20 74 68 65 20 64 61  /* Ensure the da
8ae0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61  tabase schema ha
8af0: 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f  s been loaded */
8b00: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
8b10: 66 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20 20  fetyOn(db) ){.  
8b20: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
8b30: 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 72 63  MISUSE;.  }.  rc
8b40: 20 3d 20 73 71 6c 69 74 65 33 49 6e 69 74 28 64   = sqlite3Init(d
8b50: 62 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20  b, &zErrMsg);.  
8b60: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 72  if( SQLITE_OK!=r
8b70: 63 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 65 72  c ){.    goto er
8b80: 72 6f 72 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20  ror_out;.  }..  
8b90: 2f 2a 20 4c 6f 63 61 74 65 20 74 68 65 20 74 61  /* Locate the ta
8ba0: 62 6c 65 20 69 6e 20 71 75 65 73 74 69 6f 6e 20  ble in question 
8bb0: 2a 2f 0a 20 20 70 54 61 62 20 3d 20 73 71 6c 69  */.  pTab = sqli
8bc0: 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c  te3FindTable(db,
8bd0: 20 7a 54 61 62 6c 65 4e 61 6d 65 2c 20 7a 44 62   zTableName, zDb
8be0: 4e 61 6d 65 29 3b 0a 20 20 69 66 28 20 21 70 54  Name);.  if( !pT
8bf0: 61 62 20 7c 7c 20 70 54 61 62 2d 3e 70 53 65 6c  ab || pTab->pSel
8c00: 65 63 74 20 29 7b 0a 20 20 20 20 70 54 61 62 20  ect ){.    pTab 
8c10: 3d 20 30 3b 0a 20 20 20 20 67 6f 74 6f 20 65 72  = 0;.    goto er
8c20: 72 6f 72 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20  ror_out;.  }..  
8c30: 2f 2a 20 46 69 6e 64 20 74 68 65 20 63 6f 6c 75  /* Find the colu
8c40: 6d 6e 20 66 6f 72 20 77 68 69 63 68 20 69 6e 66  mn for which inf
8c50: 6f 20 69 73 20 72 65 71 75 65 73 74 65 64 20 2a  o is requested *
8c60: 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 49  /.  if( sqlite3I
8c70: 73 52 6f 77 69 64 28 7a 43 6f 6c 75 6d 6e 4e 61  sRowid(zColumnNa
8c80: 6d 65 29 20 29 7b 0a 20 20 20 20 69 43 6f 6c 20  me) ){.    iCol 
8c90: 3d 20 70 54 61 62 2d 3e 69 50 4b 65 79 3b 0a 20  = pTab->iPKey;. 
8ca0: 20 20 20 69 66 28 20 69 43 6f 6c 3e 3d 30 20 29     if( iCol>=0 )
8cb0: 7b 0a 20 20 20 20 20 20 70 43 6f 6c 20 3d 20 26  {.      pCol = &
8cc0: 70 54 61 62 2d 3e 61 43 6f 6c 5b 69 43 6f 6c 5d  pTab->aCol[iCol]
8cd0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
8ce0: 0a 20 20 20 20 66 6f 72 28 69 43 6f 6c 3d 30 3b  .    for(iCol=0;
8cf0: 20 69 43 6f 6c 3c 70 54 61 62 2d 3e 6e 43 6f 6c   iCol<pTab->nCol
8d00: 3b 20 69 43 6f 6c 2b 2b 29 7b 0a 20 20 20 20 20  ; iCol++){.     
8d10: 20 70 43 6f 6c 20 3d 20 26 70 54 61 62 2d 3e 61   pCol = &pTab->a
8d20: 43 6f 6c 5b 69 43 6f 6c 5d 3b 0a 20 20 20 20 20  Col[iCol];.     
8d30: 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53   if( 0==sqlite3S
8d40: 74 72 49 43 6d 70 28 70 43 6f 6c 2d 3e 7a 4e 61  trICmp(pCol->zNa
8d50: 6d 65 2c 20 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 29  me, zColumnName)
8d60: 20 29 7b 0a 20 20 20 20 20 20 20 20 62 72 65 61   ){.        brea
8d70: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
8d80: 0a 20 20 20 20 69 66 28 20 69 43 6f 6c 3d 3d 70  .    if( iCol==p
8d90: 54 61 62 2d 3e 6e 43 6f 6c 20 29 7b 0a 20 20 20  Tab->nCol ){.   
8da0: 20 20 20 70 54 61 62 20 3d 20 30 3b 0a 20 20 20     pTab = 0;.   
8db0: 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 5f 6f 75     goto error_ou
8dc0: 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  t;.    }.  }..  
8dd0: 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
8de0: 20 62 6c 6f 63 6b 20 73 74 6f 72 65 73 20 74 68   block stores th
8df0: 65 20 6d 65 74 61 20 69 6e 66 6f 72 6d 61 74 69  e meta informati
8e00: 6f 6e 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20  on that will be 
8e10: 72 65 74 75 72 6e 65 64 0a 20 20 2a 2a 20 74 6f  returned.  ** to
8e20: 20 74 68 65 20 63 61 6c 6c 65 72 20 69 6e 20 6c   the caller in l
8e30: 6f 63 61 6c 20 76 61 72 69 61 62 6c 65 73 20 7a  ocal variables z
8e40: 44 61 74 61 54 79 70 65 2c 20 7a 43 6f 6c 6c 53  DataType, zCollS
8e50: 65 71 2c 20 6e 6f 74 6e 75 6c 6c 2c 20 70 72 69  eq, notnull, pri
8e60: 6d 61 72 79 6b 65 79 0a 20 20 2a 2a 20 61 6e 64  marykey.  ** and
8e70: 20 61 75 74 6f 69 6e 63 2e 20 41 74 20 74 68 69   autoinc. At thi
8e80: 73 20 70 6f 69 6e 74 20 74 68 65 72 65 20 61 72  s point there ar
8e90: 65 20 74 77 6f 20 70 6f 73 73 69 62 69 6c 69 74  e two possibilit
8ea0: 69 65 73 3a 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20  ies:.  ** .  ** 
8eb0: 20 20 20 20 31 2e 20 54 68 65 20 73 70 65 63 69      1. The speci
8ec0: 66 69 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  fied column name
8ed0: 20 77 61 73 20 72 6f 77 69 64 22 2c 20 22 6f 69   was rowid", "oi
8ee0: 64 22 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22 20  d" or "_rowid_" 
8ef0: 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 61 6e 64  .  **        and
8f00: 20 74 68 65 72 65 20 69 73 20 6e 6f 20 65 78 70   there is no exp
8f10: 6c 69 63 69 74 6c 79 20 64 65 63 6c 61 72 65 64  licitly declared
8f20: 20 49 50 4b 20 63 6f 6c 75 6d 6e 2e 20 0a 20 20   IPK column. .  
8f30: 2a 2a 0a 20 20 2a 2a 20 20 20 20 20 32 2e 20 54  **.  **     2. T
8f40: 68 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74 20  he table is not 
8f50: 61 20 76 69 65 77 20 61 6e 64 20 74 68 65 20 63  a view and the c
8f60: 6f 6c 75 6d 6e 20 6e 61 6d 65 20 69 64 65 6e 74  olumn name ident
8f70: 69 66 69 65 64 20 61 6e 20 0a 20 20 2a 2a 20 20  ified an .  **  
8f80: 20 20 20 20 20 20 65 78 70 6c 69 63 69 74 6c 79        explicitly
8f90: 20 64 65 63 6c 61 72 65 64 20 63 6f 6c 75 6d 6e   declared column
8fa0: 2e 20 43 6f 70 79 20 6d 65 74 61 20 69 6e 66 6f  . Copy meta info
8fb0: 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 2a 70 43  rmation from *pC
8fc0: 6f 6c 2e 0a 20 20 2a 2f 20 0a 20 20 69 66 28 20  ol..  */ .  if( 
8fd0: 70 43 6f 6c 20 29 7b 0a 20 20 20 20 7a 44 61 74  pCol ){.    zDat
8fe0: 61 54 79 70 65 20 3d 20 70 43 6f 6c 2d 3e 7a 54  aType = pCol->zT
8ff0: 79 70 65 3b 0a 20 20 20 20 7a 43 6f 6c 6c 53 65  ype;.    zCollSe
9000: 71 20 3d 20 70 43 6f 6c 2d 3e 7a 43 6f 6c 6c 3b  q = pCol->zColl;
9010: 0a 20 20 20 20 6e 6f 74 6e 75 6c 6c 20 3d 20 28  .    notnull = (
9020: 70 43 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c 3f 31 3a  pCol->notNull?1:
9030: 30 29 3b 0a 20 20 20 20 70 72 69 6d 61 72 79 6b  0);.    primaryk
9040: 65 79 20 20 3d 20 28 70 43 6f 6c 2d 3e 69 73 50  ey  = (pCol->isP
9050: 72 69 6d 4b 65 79 3f 31 3a 30 29 3b 0a 20 20 20  rimKey?1:0);.   
9060: 20 61 75 74 6f 69 6e 63 20 3d 20 28 28 70 54 61   autoinc = ((pTa
9070: 62 2d 3e 69 50 4b 65 79 3d 3d 69 43 6f 6c 20 26  b->iPKey==iCol &
9080: 26 20 70 54 61 62 2d 3e 61 75 74 6f 49 6e 63 29  & pTab->autoInc)
9090: 3f 31 3a 30 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ?1:0);.  }else{.
90a0: 20 20 20 20 7a 44 61 74 61 54 79 70 65 20 3d 20      zDataType = 
90b0: 22 49 4e 54 45 47 45 52 22 3b 0a 20 20 20 20 70  "INTEGER";.    p
90c0: 72 69 6d 61 72 79 6b 65 79 20 3d 20 31 3b 0a 20  rimarykey = 1;. 
90d0: 20 7d 0a 20 20 69 66 28 20 21 7a 43 6f 6c 6c 53   }.  if( !zCollS
90e0: 65 71 20 29 7b 0a 20 20 20 20 7a 43 6f 6c 6c 53  eq ){.    zCollS
90f0: 65 71 20 3d 20 22 42 49 4e 41 52 59 22 3b 0a 20  eq = "BINARY";. 
9100: 20 7d 0a 0a 65 72 72 6f 72 5f 6f 75 74 3a 0a 20   }..error_out:. 
9110: 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
9120: 74 79 4f 66 66 28 64 62 29 20 29 7b 0a 20 20 20  tyOff(db) ){.   
9130: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53   rc = SQLITE_MIS
9140: 55 53 45 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 57  USE;.  }..  /* W
9150: 68 65 74 68 65 72 20 74 68 65 20 66 75 6e 63 74  hether the funct
9160: 69 6f 6e 20 63 61 6c 6c 20 73 75 63 63 65 65 64  ion call succeed
9170: 65 64 20 6f 72 20 66 61 69 6c 65 64 2c 20 73 65  ed or failed, se
9180: 74 20 74 68 65 20 6f 75 74 70 75 74 20 70 61 72  t the output par
9190: 61 6d 65 74 65 72 73 0a 20 20 2a 2a 20 74 6f 20  ameters.  ** to 
91a0: 77 68 61 74 65 76 65 72 20 74 68 65 69 72 20 6c  whatever their l
91b0: 6f 63 61 6c 20 63 6f 75 6e 74 65 72 70 61 72 74  ocal counterpart
91c0: 73 20 63 6f 6e 74 61 69 6e 2e 20 49 66 20 61 6e  s contain. If an
91d0: 20 65 72 72 6f 72 20 64 69 64 20 6f 63 63 75 72   error did occur
91e0: 2c 0a 20 20 2a 2a 20 74 68 69 73 20 68 61 73 20  ,.  ** this has 
91f0: 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 7a 65  the effect of ze
9200: 72 6f 69 6e 67 20 61 6c 6c 20 6f 75 74 70 75 74  roing all output
9210: 20 70 61 72 61 6d 65 74 65 72 73 2e 0a 20 20 2a   parameters..  *
9220: 2f 0a 20 20 69 66 28 20 70 7a 44 61 74 61 54 79  /.  if( pzDataTy
9230: 70 65 20 29 20 2a 70 7a 44 61 74 61 54 79 70 65  pe ) *pzDataType
9240: 20 3d 20 7a 44 61 74 61 54 79 70 65 3b 0a 20 20   = zDataType;.  
9250: 69 66 28 20 70 7a 43 6f 6c 6c 53 65 71 20 29 20  if( pzCollSeq ) 
9260: 2a 70 7a 43 6f 6c 6c 53 65 71 20 3d 20 7a 43 6f  *pzCollSeq = zCo
9270: 6c 6c 53 65 71 3b 0a 20 20 69 66 28 20 70 4e 6f  llSeq;.  if( pNo
9280: 74 4e 75 6c 6c 20 29 20 2a 70 4e 6f 74 4e 75 6c  tNull ) *pNotNul
9290: 6c 20 3d 20 6e 6f 74 6e 75 6c 6c 3b 0a 20 20 69  l = notnull;.  i
92a0: 66 28 20 70 50 72 69 6d 61 72 79 4b 65 79 20 29  f( pPrimaryKey )
92b0: 20 2a 70 50 72 69 6d 61 72 79 4b 65 79 20 3d 20   *pPrimaryKey = 
92c0: 70 72 69 6d 61 72 79 6b 65 79 3b 0a 20 20 69 66  primarykey;.  if
92d0: 28 20 70 41 75 74 6f 69 6e 63 20 29 20 2a 70 41  ( pAutoinc ) *pA
92e0: 75 74 6f 69 6e 63 20 3d 20 61 75 74 6f 69 6e 63  utoinc = autoinc
92f0: 3b 0a 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f  ;..  if( SQLITE_
9300: 4f 4b 3d 3d 72 63 20 26 26 20 21 70 54 61 62 20  OK==rc && !pTab 
9310: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
9320: 74 53 74 72 69 6e 67 28 26 7a 45 72 72 4d 73 67  tString(&zErrMsg
9330: 2c 20 22 6e 6f 20 73 75 63 68 20 74 61 62 6c 65  , "no such table
9340: 20 63 6f 6c 75 6d 6e 3a 20 22 2c 20 7a 54 61 62   column: ", zTab
9350: 6c 65 4e 61 6d 65 2c 20 22 2e 22 2c 20 0a 20 20  leName, ".", .  
9360: 20 20 20 20 20 20 7a 43 6f 6c 75 6d 6e 4e 61 6d        zColumnNam
9370: 65 2c 20 30 29 3b 0a 20 20 20 20 72 63 20 3d 20  e, 0);.    rc = 
9380: 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
9390: 7d 0a 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72  }.  sqlite3Error
93a0: 28 64 62 2c 20 72 63 2c 20 28 7a 45 72 72 4d 73  (db, rc, (zErrMs
93b0: 67 3f 22 25 73 22 3a 30 29 2c 20 7a 45 72 72 4d  g?"%s":0), zErrM
93c0: 73 67 29 3b 0a 20 20 73 71 6c 69 74 65 46 72 65  sg);.  sqliteFre
93d0: 65 28 7a 45 72 72 4d 73 67 29 3b 0a 20 20 72 65  e(zErrMsg);.  re
93e0: 74 75 72 6e 20 73 71 6c 69 74 65 33 41 70 69 45  turn sqlite3ApiE
93f0: 78 69 74 28 64 62 2c 20 72 63 29 3b 0a 7d 0a 23  xit(db, rc);.}.#
9400: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 65 74  endif../*.** Set
9410: 20 61 6c 6c 20 74 68 65 20 70 61 72 61 6d 65 74   all the paramet
9420: 65 72 73 20 69 6e 20 74 68 65 20 63 6f 6d 70 69  ers in the compi
9430: 6c 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  led SQL statemen
9440: 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2f 0a 69 6e  t to NULL..*/.in
9450: 74 20 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f  t sqlite3_clear_
9460: 62 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33  bindings(sqlite3
9470: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20  _stmt *pStmt){. 
9480: 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 72 63   int i;.  int rc
9490: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
94a0: 66 6f 72 28 69 3d 31 3b 20 72 63 3d 3d 53 51 4c  for(i=1; rc==SQL
94b0: 49 54 45 5f 4f 4b 20 26 26 20 69 3c 3d 73 71 6c  ITE_OK && i<=sql
94c0: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
94d0: 74 65 72 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29  ter_count(pStmt)
94e0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 72 63 20 3d  ; i++){.    rc =
94f0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75   sqlite3_bind_nu
9500: 6c 6c 28 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20  ll(pStmt, i);.  
9510: 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  }.  return rc;.}
9520: 0a 0a 2f 2a 0a 2a 2a 20 53 6c 65 65 70 20 66 6f  ../*.** Sleep fo
9530: 72 20 61 20 6c 69 74 74 6c 65 20 77 68 69 6c 65  r a little while
9540: 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 61 6d  .  Return the am
9550: 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 73 6c 65  ount of time sle
9560: 70 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  pt..*/.int sqlit
9570: 65 33 5f 73 6c 65 65 70 28 69 6e 74 20 6d 73 29  e3_sleep(int ms)
9580: 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74  {.  return sqlit
9590: 65 33 4f 73 53 6c 65 65 70 28 6d 73 29 3b 0a 7d  e3OsSleep(ms);.}
95a0: 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 6f  ../*.** Enable o
95b0: 72 20 64 69 73 61 62 6c 65 20 74 68 65 20 65 78  r disable the ex
95c0: 74 65 6e 64 65 64 20 72 65 73 75 6c 74 20 63 6f  tended result co
95d0: 64 65 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  des..*/.int sqli
95e0: 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 72 65 73  te3_extended_res
95f0: 75 6c 74 5f 63 6f 64 65 73 28 73 71 6c 69 74 65  ult_codes(sqlite
9600: 33 20 2a 64 62 2c 20 69 6e 74 20 6f 6e 6f 66 66  3 *db, int onoff
9610: 29 7b 0a 20 20 64 62 2d 3e 65 72 72 4d 61 73 6b  ){.  db->errMask
9620: 20 3d 20 6f 6e 6f 66 66 20 3f 20 30 78 66 66 66   = onoff ? 0xfff
9630: 66 66 66 66 66 20 3a 20 30 78 66 66 3b 0a 20 20  fffff : 0xff;.  
9640: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
9650: 3b 0a 7d 0a                                      ;.}.