/ Hex Artifact Content
Login

Artifact 14937db8a0c383598f1901fcc308cf9126ef62ae:


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 35 32 20 32 30 30 36 2f 30 37  ,v 1.352 2006/07
0280: 2f 31 31 20 31 34 3a 31 37 3a 35 32 20 64 72 68  /11 14:17:52 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 69 66 28 20 64 62 2d 3e 70 56 64 62 65 20    if( db->pVdbe 
0b00: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72  ){.    sqlite3Er
0b10: 72 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 42  ror(db, SQLITE_B
0b20: 55 53 59 2c 20 0a 20 20 20 20 20 20 20 20 22 55  USY, .        "U
0b30: 6e 61 62 6c 65 20 74 6f 20 63 6c 6f 73 65 20 64  nable to close d
0b40: 75 65 20 74 6f 20 75 6e 66 69 6e 61 6c 69 73 65  ue to unfinalise
0b50: 64 20 73 74 61 74 65 6d 65 6e 74 73 22 29 3b 0a  d statements");.
0b60: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
0b70: 45 5f 42 55 53 59 3b 0a 20 20 7d 0a 20 20 61 73  E_BUSY;.  }.  as
0b80: 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 53 61  sert( !sqlite3Sa
0b90: 66 65 74 79 43 68 65 63 6b 28 64 62 29 20 29 3b  fetyCheck(db) );
0ba0: 0a 0a 20 20 2f 2a 20 46 49 58 20 4d 45 3a 20 64  ..  /* FIX ME: d
0bb0: 62 2d 3e 6d 61 67 69 63 20 6d 61 79 20 62 65 20  b->magic may be 
0bc0: 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4d 41  set to SQLITE_MA
0bd0: 47 49 43 5f 43 4c 4f 53 45 44 20 69 66 20 74 68  GIC_CLOSED if th
0be0: 65 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20  e database.  ** 
0bf0: 63 61 6e 6e 6f 74 20 62 65 20 6f 70 65 6e 65 64  cannot be opened
0c00: 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e   for some reason
0c10: 2e 20 53 6f 20 74 68 69 73 20 72 6f 75 74 69 6e  . So this routin
0c20: 65 20 6e 65 65 64 73 20 74 6f 20 72 75 6e 20 69  e needs to run i
0c30: 6e 0a 20 20 2a 2a 20 74 68 61 74 20 63 61 73 65  n.  ** that case
0c40: 2e 20 42 75 74 20 6d 61 79 62 65 20 74 68 65 72  . But maybe ther
0c50: 65 20 73 68 6f 75 6c 64 20 62 65 20 61 6e 20 65  e should be an e
0c60: 78 74 72 61 20 6d 61 67 69 63 20 76 61 6c 75 65  xtra magic value
0c70: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 22 66   for the.  ** "f
0c80: 61 69 6c 65 64 20 74 6f 20 6f 70 65 6e 22 20 73  ailed to open" s
0c90: 74 61 74 65 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  tate..  */.  if(
0ca0: 20 64 62 2d 3e 6d 61 67 69 63 21 3d 53 51 4c 49   db->magic!=SQLI
0cb0: 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20  TE_MAGIC_CLOSED 
0cc0: 26 26 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  && sqlite3Safety
0cd0: 4f 6e 28 64 62 29 20 29 7b 0a 20 20 20 20 2f 2a  On(db) ){.    /*
0ce0: 20 70 72 69 6e 74 66 28 22 44 49 44 20 4e 4f 54   printf("DID NOT
0cf0: 20 43 4c 4f 53 45 5c 6e 22 29 3b 20 66 66 6c 75   CLOSE\n"); fflu
0d00: 73 68 28 73 74 64 6f 75 74 29 3b 20 2a 2f 0a 20  sh(stdout); */. 
0d10: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
0d20: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 73  _ERROR;.  }..  s
0d30: 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
0d40: 63 6b 28 64 62 29 3b 0a 0a 20 20 66 6f 72 28 6a  ck(db);..  for(j
0d50: 3d 30 3b 20 6a 3c 64 62 2d 3e 6e 44 62 3b 20 6a  =0; j<db->nDb; j
0d60: 2b 2b 29 7b 0a 20 20 20 20 73 74 72 75 63 74 20  ++){.    struct 
0d70: 44 62 20 2a 70 44 62 20 3d 20 26 64 62 2d 3e 61  Db *pDb = &db->a
0d80: 44 62 5b 6a 5d 3b 0a 20 20 20 20 69 66 28 20 70  Db[j];.    if( p
0d90: 44 62 2d 3e 70 42 74 20 29 7b 0a 20 20 20 20 20  Db->pBt ){.     
0da0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 6f   sqlite3BtreeClo
0db0: 73 65 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20  se(pDb->pBt);.  
0dc0: 20 20 20 20 70 44 62 2d 3e 70 42 74 20 3d 20 30      pDb->pBt = 0
0dd0: 3b 0a 20 20 20 20 20 20 69 66 28 20 6a 21 3d 31  ;.      if( j!=1
0de0: 20 29 7b 0a 20 20 20 20 20 20 20 20 70 44 62 2d   ){.        pDb-
0df0: 3e 70 53 63 68 65 6d 61 20 3d 20 30 3b 0a 20 20  >pSchema = 0;.  
0e00: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
0e10: 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e    sqlite3ResetIn
0e20: 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c  ternalSchema(db,
0e30: 20 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64   0);.  assert( d
0e40: 62 2d 3e 6e 44 62 3c 3d 32 20 29 3b 0a 20 20 61  b->nDb<=2 );.  a
0e50: 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 3d 3d  ssert( db->aDb==
0e60: 64 62 2d 3e 61 44 62 53 74 61 74 69 63 20 29 3b  db->aDbStatic );
0e70: 0a 20 20 66 6f 72 28 69 3d 73 71 6c 69 74 65 48  .  for(i=sqliteH
0e80: 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61 46  ashFirst(&db->aF
0e90: 75 6e 63 29 3b 20 69 3b 20 69 3d 73 71 6c 69 74  unc); i; i=sqlit
0ea0: 65 48 61 73 68 4e 65 78 74 28 69 29 29 7b 0a 20  eHashNext(i)){. 
0eb0: 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e     FuncDef *pFun
0ec0: 63 2c 20 2a 70 4e 65 78 74 3b 0a 20 20 20 20 66  c, *pNext;.    f
0ed0: 6f 72 28 70 46 75 6e 63 20 3d 20 28 46 75 6e 63  or(pFunc = (Func
0ee0: 44 65 66 2a 29 73 71 6c 69 74 65 48 61 73 68 44  Def*)sqliteHashD
0ef0: 61 74 61 28 69 29 3b 20 70 46 75 6e 63 3b 20 70  ata(i); pFunc; p
0f00: 46 75 6e 63 3d 70 4e 65 78 74 29 7b 0a 20 20 20  Func=pNext){.   
0f10: 20 20 20 70 4e 65 78 74 20 3d 20 70 46 75 6e 63     pNext = pFunc
0f20: 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 73  ->pNext;.      s
0f30: 71 6c 69 74 65 46 72 65 65 28 70 46 75 6e 63 29  qliteFree(pFunc)
0f40: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 66  ;.    }.  }..  f
0f50: 6f 72 28 69 3d 73 71 6c 69 74 65 48 61 73 68 46  or(i=sqliteHashF
0f60: 69 72 73 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53  irst(&db->aCollS
0f70: 65 71 29 3b 20 69 3b 20 69 3d 73 71 6c 69 74 65  eq); i; i=sqlite
0f80: 48 61 73 68 4e 65 78 74 28 69 29 29 7b 0a 20 20  HashNext(i)){.  
0f90: 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c    CollSeq *pColl
0fa0: 20 3d 20 28 43 6f 6c 6c 53 65 71 20 2a 29 73 71   = (CollSeq *)sq
0fb0: 6c 69 74 65 48 61 73 68 44 61 74 61 28 69 29 3b  liteHashData(i);
0fc0: 0a 20 20 20 20 73 71 6c 69 74 65 46 72 65 65 28  .    sqliteFree(
0fd0: 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 71  pColl);.  }.  sq
0fe0: 6c 69 74 65 33 48 61 73 68 43 6c 65 61 72 28 26  lite3HashClear(&
0ff0: 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 0a 23  db->aCollSeq);.#
1000: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1010: 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
1020: 20 20 66 6f 72 28 69 3d 73 71 6c 69 74 65 48 61    for(i=sqliteHa
1030: 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61 4d 6f  shFirst(&db->aMo
1040: 64 75 6c 65 29 3b 20 69 3b 20 69 3d 73 71 6c 69  dule); i; i=sqli
1050: 74 65 48 61 73 68 4e 65 78 74 28 69 29 29 7b 0a  teHashNext(i)){.
1060: 20 20 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64      Module *pMod
1070: 20 3d 20 28 4d 6f 64 75 6c 65 20 2a 29 73 71 6c   = (Module *)sql
1080: 69 74 65 48 61 73 68 44 61 74 61 28 69 29 3b 0a  iteHashData(i);.
1090: 20 20 20 20 73 71 6c 69 74 65 46 72 65 65 28 70      sqliteFree(p
10a0: 4d 6f 64 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  Mod);.  }.  sqli
10b0: 74 65 33 48 61 73 68 43 6c 65 61 72 28 26 64 62  te3HashClear(&db
10c0: 2d 3e 61 4d 6f 64 75 6c 65 29 3b 0a 23 65 6e 64  ->aModule);.#end
10d0: 69 66 0a 0a 20 20 73 71 6c 69 74 65 33 48 61 73  if..  sqlite3Has
10e0: 68 43 6c 65 61 72 28 26 64 62 2d 3e 61 46 75 6e  hClear(&db->aFun
10f0: 63 29 3b 0a 20 20 73 71 6c 69 74 65 33 45 72 72  c);.  sqlite3Err
1100: 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 4f 4b  or(db, SQLITE_OK
1110: 2c 20 30 29 3b 20 2f 2a 20 44 65 61 6c 6c 6f 63  , 0); /* Dealloc
1120: 61 74 65 73 20 61 6e 79 20 63 61 63 68 65 64 20  ates any cached 
1130: 65 72 72 6f 72 20 73 74 72 69 6e 67 73 2e 20 2a  error strings. *
1140: 2f 0a 20 20 69 66 28 20 64 62 2d 3e 70 45 72 72  /.  if( db->pErr
1150: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
1160: 61 6c 75 65 46 72 65 65 28 64 62 2d 3e 70 45 72  alueFree(db->pEr
1170: 72 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  r);.  }.  sqlite
1180: 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
1190: 28 64 62 29 3b 0a 0a 20 20 64 62 2d 3e 6d 61 67  (db);..  db->mag
11a0: 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49  ic = SQLITE_MAGI
11b0: 43 5f 45 52 52 4f 52 3b 0a 0a 20 20 2f 2a 20 54  C_ERROR;..  /* T
11c0: 68 65 20 74 65 6d 70 2d 64 61 74 61 62 61 73 65  he temp-database
11d0: 20 73 63 68 65 6d 61 20 69 73 20 61 6c 6c 6f 63   schema is alloc
11e0: 61 74 65 64 20 64 69 66 66 65 72 65 6e 74 6c 79  ated differently
11f0: 20 66 72 6f 6d 20 74 68 65 20 6f 74 68 65 72 20   from the other 
1200: 73 63 68 65 6d 61 0a 20 20 2a 2a 20 6f 62 6a 65  schema.  ** obje
1210: 63 74 73 20 28 75 73 69 6e 67 20 73 71 6c 69 74  cts (using sqlit
1220: 65 4d 61 6c 6c 6f 63 28 29 20 64 69 72 65 63 74  eMalloc() direct
1230: 6c 79 2c 20 69 6e 73 74 65 61 64 20 6f 66 20 73  ly, instead of s
1240: 71 6c 69 74 65 33 42 74 72 65 65 53 63 68 65 6d  qlite3BtreeSchem
1250: 61 28 29 29 2e 0a 20 20 2a 2a 20 53 6f 20 69 74  a())..  ** So it
1260: 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72 65   needs to be fre
1270: 65 64 20 68 65 72 65 2e 20 54 6f 64 6f 3a 20 57  ed here. Todo: W
1280: 68 79 20 6e 6f 74 20 72 6f 6c 6c 20 74 68 65 20  hy not roll the 
1290: 74 65 6d 70 20 73 63 68 65 6d 61 20 69 6e 74 6f  temp schema into
12a0: 0a 20 20 2a 2a 20 74 68 65 20 73 61 6d 65 20 73  .  ** the same s
12b0: 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 20 61 73  qliteMalloc() as
12c0: 20 74 68 65 20 6f 6e 65 20 74 68 61 74 20 61 6c   the one that al
12d0: 6c 6f 63 61 74 65 73 20 74 68 65 20 64 61 74 61  locates the data
12e0: 62 61 73 65 20 0a 20 20 2a 2a 20 73 74 72 75 63  base .  ** struc
12f0: 74 75 72 65 3f 0a 20 20 2a 2f 0a 20 20 73 71 6c  ture?.  */.  sql
1300: 69 74 65 46 72 65 65 28 64 62 2d 3e 61 44 62 5b  iteFree(db->aDb[
1310: 31 5d 2e 70 53 63 68 65 6d 61 29 3b 0a 20 20 73  1].pSchema);.  s
1320: 71 6c 69 74 65 46 72 65 65 28 64 62 29 3b 0a 20  qliteFree(db);. 
1330: 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54   sqlite3ReleaseT
1340: 68 72 65 61 64 44 61 74 61 28 29 3b 0a 20 20 72  hreadData();.  r
1350: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
1360: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 6f 6c 6c 62 61  .}../*.** Rollba
1370: 63 6b 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20  ck all database 
1380: 66 69 6c 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73  files..*/.void s
1390: 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
13a0: 6c 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  l(sqlite3 *db){.
13b0: 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 69    int i;.  int i
13c0: 6e 54 72 61 6e 73 20 3d 20 30 3b 0a 20 20 66 6f  nTrans = 0;.  fo
13d0: 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62  r(i=0; i<db->nDb
13e0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20  ; i++){.    if( 
13f0: 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 20 29  db->aDb[i].pBt )
1400: 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  {.      if( sqli
1410: 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e  te3BtreeIsInTran
1420: 73 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  s(db->aDb[i].pBt
1430: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 54  ) ){.        inT
1440: 72 61 6e 73 20 3d 20 31 3b 0a 20 20 20 20 20 20  rans = 1;.      
1450: 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  }.      sqlite3B
1460: 74 72 65 65 52 6f 6c 6c 62 61 63 6b 28 64 62 2d  treeRollback(db-
1470: 3e 61 44 62 5b 69 5d 2e 70 42 74 29 3b 0a 20 20  >aDb[i].pBt);.  
1480: 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 69      db->aDb[i].i
1490: 6e 54 72 61 6e 73 20 3d 20 30 3b 0a 20 20 20 20  nTrans = 0;.    
14a0: 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  }.  }.  sqlite3V
14b0: 74 61 62 52 6f 6c 6c 62 61 63 6b 28 64 62 29 3b  tabRollback(db);
14c0: 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73  .  if( db->flags
14d0: 26 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68  &SQLITE_InternCh
14e0: 61 6e 67 65 73 20 29 7b 0a 20 20 20 20 73 71 6c  anges ){.    sql
14f0: 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61  ite3ResetInterna
1500: 6c 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a  lSchema(db, 0);.
1510: 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 6f 6e 65    }..  /* If one
1520: 20 68 61 73 20 62 65 65 6e 20 63 6f 6e 66 69 67   has been config
1530: 75 72 65 64 2c 20 69 6e 76 6f 6b 65 20 74 68 65  ured, invoke the
1540: 20 72 6f 6c 6c 62 61 63 6b 2d 68 6f 6f 6b 20 63   rollback-hook c
1550: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 66 28  allback */.  if(
1560: 20 64 62 2d 3e 78 52 6f 6c 6c 62 61 63 6b 43 61   db->xRollbackCa
1570: 6c 6c 62 61 63 6b 20 26 26 20 28 69 6e 54 72 61  llback && (inTra
1580: 6e 73 20 7c 7c 20 21 64 62 2d 3e 61 75 74 6f 43  ns || !db->autoC
1590: 6f 6d 6d 69 74 29 20 29 7b 0a 20 20 20 20 64 62  ommit) ){.    db
15a0: 2d 3e 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  ->xRollbackCallb
15b0: 61 63 6b 28 64 62 2d 3e 70 52 6f 6c 6c 62 61 63  ack(db->pRollbac
15c0: 6b 41 72 67 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a  kArg);.  }.}../*
15d0: 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 73 74 61  .** Return a sta
15e0: 74 69 63 20 73 74 72 69 6e 67 20 74 68 61 74 20  tic string that 
15f0: 64 65 73 63 72 69 62 65 73 20 74 68 65 20 6b 69  describes the ki
1600: 6e 64 20 6f 66 20 65 72 72 6f 72 20 73 70 65 63  nd of error spec
1610: 69 66 69 65 64 20 69 6e 20 74 68 65 0a 2a 2a 20  ified in the.** 
1620: 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 63 6f 6e  argument..*/.con
1630: 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
1640: 45 72 72 53 74 72 28 69 6e 74 20 72 63 29 7b 0a  ErrStr(int rc){.
1650: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b    const char *z;
1660: 0a 20 20 73 77 69 74 63 68 28 20 72 63 20 29 7b  .  switch( rc ){
1670: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
1680: 5f 52 4f 57 3a 0a 20 20 20 20 63 61 73 65 20 53  _ROW:.    case S
1690: 51 4c 49 54 45 5f 44 4f 4e 45 3a 0a 20 20 20 20  QLITE_DONE:.    
16a0: 63 61 73 65 20 53 51 4c 49 54 45 5f 4f 4b 3a 20  case SQLITE_OK: 
16b0: 20 20 20 20 20 20 20 20 7a 20 3d 20 22 6e 6f 74          z = "not
16c0: 20 61 6e 20 65 72 72 6f 72 22 3b 20 20 20 20 20   an error";     
16d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
16f0: 63 61 73 65 20 53 51 4c 49 54 45 5f 45 52 52 4f  case SQLITE_ERRO
1700: 52 3a 20 20 20 20 20 20 7a 20 3d 20 22 53 51 4c  R:      z = "SQL
1710: 20 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72 20   logic error or 
1720: 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65  missing database
1730: 22 3b 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  ";   break;.    
1740: 63 61 73 65 20 53 51 4c 49 54 45 5f 50 45 52 4d  case SQLITE_PERM
1750: 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 61 63 63  :       z = "acc
1760: 65 73 73 20 70 65 72 6d 69 73 73 69 6f 6e 20 64  ess permission d
1770: 65 6e 69 65 64 22 3b 20 20 20 20 20 20 20 20 20  enied";         
1780: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1790: 63 61 73 65 20 53 51 4c 49 54 45 5f 41 42 4f 52  case SQLITE_ABOR
17a0: 54 3a 20 20 20 20 20 20 7a 20 3d 20 22 63 61 6c  T:      z = "cal
17b0: 6c 62 61 63 6b 20 72 65 71 75 65 73 74 65 64 20  lback requested 
17c0: 71 75 65 72 79 20 61 62 6f 72 74 22 3b 20 20 20  query abort";   
17d0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
17e0: 63 61 73 65 20 53 51 4c 49 54 45 5f 42 55 53 59  case SQLITE_BUSY
17f0: 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 64 61 74  :       z = "dat
1800: 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 22  abase is locked"
1810: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1820: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1830: 63 61 73 65 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  case SQLITE_LOCK
1840: 45 44 3a 20 20 20 20 20 7a 20 3d 20 22 64 61 74  ED:     z = "dat
1850: 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c  abase table is l
1860: 6f 63 6b 65 64 22 3b 20 20 20 20 20 20 20 20 20  ocked";         
1870: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1880: 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  case SQLITE_NOME
1890: 4d 3a 20 20 20 20 20 20 7a 20 3d 20 22 6f 75 74  M:      z = "out
18a0: 20 6f 66 20 6d 65 6d 6f 72 79 22 3b 20 20 20 20   of memory";    
18b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
18d0: 63 61 73 65 20 53 51 4c 49 54 45 5f 52 45 41 44  case SQLITE_READ
18e0: 4f 4e 4c 59 3a 20 20 20 7a 20 3d 20 22 61 74 74  ONLY:   z = "att
18f0: 65 6d 70 74 20 74 6f 20 77 72 69 74 65 20 61 20  empt to write a 
1900: 72 65 61 64 6f 6e 6c 79 20 64 61 74 61 62 61 73  readonly databas
1910: 65 22 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  e";  break;.    
1920: 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54 45  case SQLITE_INTE
1930: 52 52 55 50 54 3a 20 20 7a 20 3d 20 22 69 6e 74  RRUPT:  z = "int
1940: 65 72 72 75 70 74 65 64 22 3b 20 20 20 20 20 20  errupted";      
1950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1960: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1970: 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45 52  case SQLITE_IOER
1980: 52 3a 20 20 20 20 20 20 7a 20 3d 20 22 64 69 73  R:      z = "dis
1990: 6b 20 49 2f 4f 20 65 72 72 6f 72 22 3b 20 20 20  k I/O error";   
19a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
19c0: 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 52 52  case SQLITE_CORR
19d0: 55 50 54 3a 20 20 20 20 7a 20 3d 20 22 64 61 74  UPT:    z = "dat
19e0: 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61 67 65  abase disk image
19f0: 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 22 3b 20   is malformed"; 
1a00: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1a10: 63 61 73 65 20 53 51 4c 49 54 45 5f 46 55 4c 4c  case SQLITE_FULL
1a20: 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 64 61 74  :       z = "dat
1a30: 61 62 61 73 65 20 6f 72 20 64 69 73 6b 20 69 73  abase or disk is
1a40: 20 66 75 6c 6c 22 3b 20 20 20 20 20 20 20 20 20   full";         
1a50: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1a60: 63 61 73 65 20 53 51 4c 49 54 45 5f 43 41 4e 54  case SQLITE_CANT
1a70: 4f 50 45 4e 3a 20 20 20 7a 20 3d 20 22 75 6e 61  OPEN:   z = "una
1a80: 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61  ble to open data
1a90: 62 61 73 65 20 66 69 6c 65 22 3b 20 20 20 20 20  base file";     
1aa0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1ab0: 63 61 73 65 20 53 51 4c 49 54 45 5f 50 52 4f 54  case SQLITE_PROT
1ac0: 4f 43 4f 4c 3a 20 20 20 7a 20 3d 20 22 64 61 74  OCOL:   z = "dat
1ad0: 61 62 61 73 65 20 6c 6f 63 6b 69 6e 67 20 70 72  abase locking pr
1ae0: 6f 74 6f 63 6f 6c 20 66 61 69 6c 75 72 65 22 3b  otocol failure";
1af0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1b00: 63 61 73 65 20 53 51 4c 49 54 45 5f 45 4d 50 54  case SQLITE_EMPT
1b10: 59 3a 20 20 20 20 20 20 7a 20 3d 20 22 74 61 62  Y:      z = "tab
1b20: 6c 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64  le contains no d
1b30: 61 74 61 22 3b 20 20 20 20 20 20 20 20 20 20 20  ata";           
1b40: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1b50: 63 61 73 65 20 53 51 4c 49 54 45 5f 53 43 48 45  case SQLITE_SCHE
1b60: 4d 41 3a 20 20 20 20 20 7a 20 3d 20 22 64 61 74  MA:     z = "dat
1b70: 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
1b80: 20 63 68 61 6e 67 65 64 22 3b 20 20 20 20 20 20   changed";      
1b90: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1ba0: 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e 53  case SQLITE_CONS
1bb0: 54 52 41 49 4e 54 3a 20 7a 20 3d 20 22 63 6f 6e  TRAINT: z = "con
1bc0: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 22 3b  straint failed";
1bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1bf0: 63 61 73 65 20 53 51 4c 49 54 45 5f 4d 49 53 4d  case SQLITE_MISM
1c00: 41 54 43 48 3a 20 20 20 7a 20 3d 20 22 64 61 74  ATCH:   z = "dat
1c10: 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22 3b  atype mismatch";
1c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c30: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1c40: 63 61 73 65 20 53 51 4c 49 54 45 5f 4d 49 53 55  case SQLITE_MISU
1c50: 53 45 3a 20 20 20 20 20 7a 20 3d 20 22 6c 69 62  SE:     z = "lib
1c60: 72 61 72 79 20 72 6f 75 74 69 6e 65 20 63 61 6c  rary routine cal
1c70: 6c 65 64 20 6f 75 74 20 6f 66 20 73 65 71 75 65  led out of seque
1c80: 6e 63 65 22 3b 62 72 65 61 6b 3b 0a 20 20 20 20  nce";break;.    
1c90: 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4c 46  case SQLITE_NOLF
1ca0: 53 3a 20 20 20 20 20 20 7a 20 3d 20 22 6b 65 72  S:      z = "ker
1cb0: 6e 65 6c 20 6c 61 63 6b 73 20 6c 61 72 67 65 20  nel lacks large 
1cc0: 66 69 6c 65 20 73 75 70 70 6f 72 74 22 3b 20 20  file support";  
1cd0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1ce0: 63 61 73 65 20 53 51 4c 49 54 45 5f 41 55 54 48  case SQLITE_AUTH
1cf0: 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 61 75 74  :       z = "aut
1d00: 68 6f 72 69 7a 61 74 69 6f 6e 20 64 65 6e 69 65  horization denie
1d10: 64 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  d";             
1d20: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1d30: 63 61 73 65 20 53 51 4c 49 54 45 5f 46 4f 52 4d  case SQLITE_FORM
1d40: 41 54 3a 20 20 20 20 20 7a 20 3d 20 22 61 75 78  AT:     z = "aux
1d50: 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
1d60: 66 6f 72 6d 61 74 20 65 72 72 6f 72 22 3b 20 20  format error";  
1d70: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1d80: 63 61 73 65 20 53 51 4c 49 54 45 5f 52 41 4e 47  case SQLITE_RANG
1d90: 45 3a 20 20 20 20 20 20 7a 20 3d 20 22 62 69 6e  E:      z = "bin
1da0: 64 20 6f 72 20 63 6f 6c 75 6d 6e 20 69 6e 64 65  d or column inde
1db0: 78 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 22 3b  x out of range";
1dc0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1dd0: 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 54 41  case SQLITE_NOTA
1de0: 44 42 3a 20 20 20 20 20 7a 20 3d 20 22 66 69 6c  DB:     z = "fil
1df0: 65 20 69 73 20 65 6e 63 72 79 70 74 65 64 20 6f  e is encrypted o
1e00: 72 20 69 73 20 6e 6f 74 20 61 20 64 61 74 61 62  r is not a datab
1e10: 61 73 65 22 3b 62 72 65 61 6b 3b 0a 20 20 20 20  ase";break;.    
1e20: 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 20  default:        
1e30: 20 20 20 20 20 20 20 20 7a 20 3d 20 22 75 6e 6b          z = "unk
1e40: 6e 6f 77 6e 20 65 72 72 6f 72 22 3b 20 20 20 20  nown error";    
1e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e60: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a       break;.  }.
1e70: 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f    return z;.}../
1e80: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
1e90: 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 62  e implements a b
1ea0: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 74 68 61  usy callback tha
1eb0: 74 20 73 6c 65 65 70 73 20 61 6e 64 20 74 72 69  t sleeps and tri
1ec0: 65 73 0a 2a 2a 20 61 67 61 69 6e 20 75 6e 74 69  es.** again unti
1ed0: 6c 20 61 20 74 69 6d 65 6f 75 74 20 76 61 6c 75  l a timeout valu
1ee0: 65 20 69 73 20 72 65 61 63 68 65 64 2e 20 20 54  e is reached.  T
1ef0: 68 65 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65  he timeout value
1f00: 20 69 73 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65   is.** an intege
1f10: 72 20 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c  r number of mill
1f20: 69 73 65 63 6f 6e 64 73 20 70 61 73 73 65 64 20  iseconds passed 
1f30: 69 6e 20 61 73 20 74 68 65 20 66 69 72 73 74 0a  in as the first.
1f40: 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  ** argument..*/.
1f50: 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
1f60: 65 44 65 66 61 75 6c 74 42 75 73 79 43 61 6c 6c  eDefaultBusyCall
1f70: 62 61 63 6b 28 0a 20 76 6f 69 64 20 2a 70 74 72  back(. void *ptr
1f80: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
1f90: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e  /* Database conn
1fa0: 65 63 74 69 6f 6e 20 2a 2f 0a 20 69 6e 74 20 63  ection */. int c
1fb0: 6f 75 6e 74 20 20 20 20 20 20 20 20 20 20 20 20  ount            
1fc0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1fd0: 20 74 69 6d 65 73 20 74 61 62 6c 65 20 68 61 73   times table has
1fe0: 20 62 65 65 6e 20 62 75 73 79 20 2a 2f 0a 29 7b   been busy */.){
1ff0: 0a 23 69 66 20 4f 53 5f 57 49 4e 20 7c 7c 20 28  .#if OS_WIN || (
2000: 64 65 66 69 6e 65 64 28 48 41 56 45 5f 55 53 4c  defined(HAVE_USL
2010: 45 45 50 29 20 26 26 20 48 41 56 45 5f 55 53 4c  EEP) && HAVE_USL
2020: 45 45 50 29 0a 20 20 73 74 61 74 69 63 20 63 6f  EEP).  static co
2030: 6e 73 74 20 75 38 20 64 65 6c 61 79 73 5b 5d 20  nst u8 delays[] 
2040: 3d 0a 20 20 20 20 20 7b 20 31 2c 20 32 2c 20 35  =.     { 1, 2, 5
2050: 2c 20 31 30 2c 20 31 35 2c 20 32 30 2c 20 32 35  , 10, 15, 20, 25
2060: 2c 20 32 35 2c 20 20 32 35 2c 20 20 35 30 2c 20  , 25,  25,  50, 
2070: 20 35 30 2c 20 31 30 30 20 7d 3b 0a 20 20 73 74   50, 100 };.  st
2080: 61 74 69 63 20 63 6f 6e 73 74 20 75 38 20 74 6f  atic const u8 to
2090: 74 61 6c 73 5b 5d 20 3d 0a 20 20 20 20 20 7b 20  tals[] =.     { 
20a0: 30 2c 20 31 2c 20 33 2c 20 20 38 2c 20 31 38 2c  0, 1, 3,  8, 18,
20b0: 20 33 33 2c 20 35 33 2c 20 37 38 2c 20 31 30 33   33, 53, 78, 103
20c0: 2c 20 31 32 38 2c 20 31 37 38 2c 20 32 32 38 20  , 128, 178, 228 
20d0: 7d 3b 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 4c  };.# define NDEL
20e0: 41 59 20 28 73 69 7a 65 6f 66 28 64 65 6c 61 79  AY (sizeof(delay
20f0: 73 29 2f 73 69 7a 65 6f 66 28 64 65 6c 61 79 73  s)/sizeof(delays
2100: 5b 30 5d 29 29 0a 20 20 69 6e 74 20 74 69 6d 65  [0])).  int time
2110: 6f 75 74 20 3d 20 28 28 73 71 6c 69 74 65 33 20  out = ((sqlite3 
2120: 2a 29 70 74 72 29 2d 3e 62 75 73 79 54 69 6d 65  *)ptr)->busyTime
2130: 6f 75 74 3b 0a 20 20 69 6e 74 20 64 65 6c 61 79  out;.  int delay
2140: 2c 20 70 72 69 6f 72 3b 0a 0a 20 20 61 73 73 65  , prior;..  asse
2150: 72 74 28 20 63 6f 75 6e 74 3e 3d 30 20 29 3b 0a  rt( count>=0 );.
2160: 20 20 69 66 28 20 63 6f 75 6e 74 20 3c 20 4e 44    if( count < ND
2170: 45 4c 41 59 20 29 7b 0a 20 20 20 20 64 65 6c 61  ELAY ){.    dela
2180: 79 20 3d 20 64 65 6c 61 79 73 5b 63 6f 75 6e 74  y = delays[count
2190: 5d 3b 0a 20 20 20 20 70 72 69 6f 72 20 3d 20 74  ];.    prior = t
21a0: 6f 74 61 6c 73 5b 63 6f 75 6e 74 5d 3b 0a 20 20  otals[count];.  
21b0: 7d 65 6c 73 65 7b 0a 20 20 20 20 64 65 6c 61 79  }else{.    delay
21c0: 20 3d 20 64 65 6c 61 79 73 5b 4e 44 45 4c 41 59   = delays[NDELAY
21d0: 2d 31 5d 3b 0a 20 20 20 20 70 72 69 6f 72 20 3d  -1];.    prior =
21e0: 20 74 6f 74 61 6c 73 5b 4e 44 45 4c 41 59 2d 31   totals[NDELAY-1
21f0: 5d 20 2b 20 64 65 6c 61 79 2a 28 63 6f 75 6e 74  ] + delay*(count
2200: 2d 28 4e 44 45 4c 41 59 2d 31 29 29 3b 0a 20 20  -(NDELAY-1));.  
2210: 7d 0a 20 20 69 66 28 20 70 72 69 6f 72 20 2b 20  }.  if( prior + 
2220: 64 65 6c 61 79 20 3e 20 74 69 6d 65 6f 75 74 20  delay > timeout 
2230: 29 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20 74  ){.    delay = t
2240: 69 6d 65 6f 75 74 20 2d 20 70 72 69 6f 72 3b 0a  imeout - prior;.
2250: 20 20 20 20 69 66 28 20 64 65 6c 61 79 3c 3d 30      if( delay<=0
2260: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d   ) return 0;.  }
2270: 0a 20 20 73 71 6c 69 74 65 33 4f 73 53 6c 65 65  .  sqlite3OsSlee
2280: 70 28 64 65 6c 61 79 29 3b 0a 20 20 72 65 74 75  p(delay);.  retu
2290: 72 6e 20 31 3b 0a 23 65 6c 73 65 0a 20 20 69 6e  rn 1;.#else.  in
22a0: 74 20 74 69 6d 65 6f 75 74 20 3d 20 28 28 73 71  t timeout = ((sq
22b0: 6c 69 74 65 33 20 2a 29 70 74 72 29 2d 3e 62 75  lite3 *)ptr)->bu
22c0: 73 79 54 69 6d 65 6f 75 74 3b 0a 20 20 69 66 28  syTimeout;.  if(
22d0: 20 28 63 6f 75 6e 74 2b 31 29 2a 31 30 30 30 20   (count+1)*1000 
22e0: 3e 20 74 69 6d 65 6f 75 74 20 29 7b 0a 20 20 20  > timeout ){.   
22f0: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
2300: 20 73 71 6c 69 74 65 33 4f 73 53 6c 65 65 70 28   sqlite3OsSleep(
2310: 31 30 30 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  1000);.  return 
2320: 31 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a  1;.#endif.}../*.
2330: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 67 69  ** Invoke the gi
2340: 76 65 6e 20 62 75 73 79 20 68 61 6e 64 6c 65 72  ven busy handler
2350: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ..**.** This rou
2360: 74 69 6e 65 20 69 73 20 63 61 6c 6c 65 64 20 77  tine is called w
2370: 68 65 6e 20 61 6e 20 6f 70 65 72 61 74 69 6f 6e  hen an operation
2380: 20 66 61 69 6c 65 64 20 77 69 74 68 20 61 20 6c   failed with a l
2390: 6f 63 6b 2e 0a 2a 2a 20 49 66 20 74 68 69 73 20  ock..** If this 
23a0: 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20  routine returns 
23b0: 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 6c 6f  non-zero, the lo
23c0: 63 6b 20 69 73 20 72 65 74 72 69 65 64 2e 20 20  ck is retried.  
23d0: 49 66 20 69 74 0a 2a 2a 20 72 65 74 75 72 6e 73  If it.** returns
23e0: 20 30 2c 20 74 68 65 20 6f 70 65 72 61 74 69 6f   0, the operatio
23f0: 6e 20 61 62 6f 72 74 73 20 77 69 74 68 20 61 6e  n aborts with an
2400: 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72   SQLITE_BUSY err
2410: 6f 72 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  or..*/.int sqlit
2420: 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64  e3InvokeBusyHand
2430: 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72 20  ler(BusyHandler 
2440: 2a 70 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  *p){.  int rc;. 
2450: 20 69 66 28 20 70 3d 3d 30 20 7c 7c 20 70 2d 3e   if( p==0 || p->
2460: 78 46 75 6e 63 3d 3d 30 20 7c 7c 20 70 2d 3e 6e  xFunc==0 || p->n
2470: 42 75 73 79 3c 30 20 29 20 72 65 74 75 72 6e 20  Busy<0 ) return 
2480: 30 3b 0a 20 20 72 63 20 3d 20 70 2d 3e 78 46 75  0;.  rc = p->xFu
2490: 6e 63 28 70 2d 3e 70 41 72 67 2c 20 70 2d 3e 6e  nc(p->pArg, p->n
24a0: 42 75 73 79 29 3b 0a 20 20 69 66 28 20 72 63 3d  Busy);.  if( rc=
24b0: 3d 30 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 42 75  =0 ){.    p->nBu
24c0: 73 79 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65  sy = -1;.  }else
24d0: 7b 0a 20 20 20 20 70 2d 3e 6e 42 75 73 79 2b 2b  {.    p->nBusy++
24e0: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72  ;.  }.  return r
24f0: 63 3b 20 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  c; .}../*.** Thi
2500: 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74  s routine sets t
2510: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
2520: 20 66 6f 72 20 61 6e 20 53 71 6c 69 74 65 20 64   for an Sqlite d
2530: 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 0a 2a  atabase to the.*
2540: 2a 20 67 69 76 65 6e 20 63 61 6c 6c 62 61 63 6b  * given callback
2550: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74   function with t
2560: 68 65 20 67 69 76 65 6e 20 61 72 67 75 6d 65 6e  he given argumen
2570: 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
2580: 33 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 0a  3_busy_handler(.
2590: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20    sqlite3 *db,. 
25a0: 20 69 6e 74 20 28 2a 78 42 75 73 79 29 28 76 6f   int (*xBusy)(vo
25b0: 69 64 2a 2c 69 6e 74 29 2c 0a 20 20 76 6f 69 64  id*,int),.  void
25c0: 20 2a 70 41 72 67 0a 29 7b 0a 20 20 69 66 28 20   *pArg.){.  if( 
25d0: 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
25e0: 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65  ck(db) ){.    re
25f0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
2600: 53 45 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 62 75  SE;.  }.  db->bu
2610: 73 79 48 61 6e 64 6c 65 72 2e 78 46 75 6e 63 20  syHandler.xFunc 
2620: 3d 20 78 42 75 73 79 3b 0a 20 20 64 62 2d 3e 62  = xBusy;.  db->b
2630: 75 73 79 48 61 6e 64 6c 65 72 2e 70 41 72 67 20  usyHandler.pArg 
2640: 3d 20 70 41 72 67 3b 0a 20 20 64 62 2d 3e 62 75  = pArg;.  db->bu
2650: 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20  syHandler.nBusy 
2660: 3d 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 53 51  = 0;.  return SQ
2670: 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e  LITE_OK;.}..#ifn
2680: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2690: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
26a0: 4b 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  K./*.** This rou
26b0: 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 70 72  tine sets the pr
26c0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
26d0: 66 6f 72 20 61 6e 20 53 71 6c 69 74 65 20 64 61  for an Sqlite da
26e0: 74 61 62 61 73 65 20 74 6f 20 74 68 65 0a 2a 2a  tabase to the.**
26f0: 20 67 69 76 65 6e 20 63 61 6c 6c 62 61 63 6b 20   given callback 
2700: 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74 68  function with th
2710: 65 20 67 69 76 65 6e 20 61 72 67 75 6d 65 6e 74  e given argument
2720: 2e 20 54 68 65 20 70 72 6f 67 72 65 73 73 20 63  . The progress c
2730: 61 6c 6c 62 61 63 6b 20 77 69 6c 6c 0a 2a 2a 20  allback will.** 
2740: 62 65 20 69 6e 76 6f 6b 65 64 20 65 76 65 72 79  be invoked every
2750: 20 6e 4f 70 73 20 6f 70 63 6f 64 65 73 2e 0a 2a   nOps opcodes..*
2760: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 70  /.void sqlite3_p
2770: 72 6f 67 72 65 73 73 5f 68 61 6e 64 6c 65 72 28  rogress_handler(
2780: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  .  sqlite3 *db, 
2790: 0a 20 20 69 6e 74 20 6e 4f 70 73 2c 0a 20 20 69  .  int nOps,.  i
27a0: 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28  nt (*xProgress)(
27b0: 76 6f 69 64 2a 29 2c 20 0a 20 20 76 6f 69 64 20  void*), .  void 
27c0: 2a 70 41 72 67 0a 29 7b 0a 20 20 69 66 28 20 21  *pArg.){.  if( !
27d0: 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
27e0: 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 69 66  ck(db) ){.    if
27f0: 28 20 6e 4f 70 73 3e 30 20 29 7b 0a 20 20 20 20  ( nOps>0 ){.    
2800: 20 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20    db->xProgress 
2810: 3d 20 78 50 72 6f 67 72 65 73 73 3b 0a 20 20 20  = xProgress;.   
2820: 20 20 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73     db->nProgress
2830: 4f 70 73 20 3d 20 6e 4f 70 73 3b 0a 20 20 20 20  Ops = nOps;.    
2840: 20 20 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41    db->pProgressA
2850: 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 20 20 7d  rg = pArg;.    }
2860: 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
2870: 78 50 72 6f 67 72 65 73 73 20 3d 20 30 3b 0a 20  xProgress = 0;. 
2880: 20 20 20 20 20 64 62 2d 3e 6e 50 72 6f 67 72 65       db->nProgre
2890: 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20 20  ssOps = 0;.     
28a0: 20 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72   db->pProgressAr
28b0: 67 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  g = 0;.    }.  }
28c0: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  .}.#endif.../*.*
28d0: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69  * This routine i
28e0: 6e 73 74 61 6c 6c 73 20 61 20 64 65 66 61 75 6c  nstalls a defaul
28f0: 74 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 74  t busy handler t
2900: 68 61 74 20 77 61 69 74 73 20 66 6f 72 20 74 68  hat waits for th
2910: 65 0a 2a 2a 20 73 70 65 63 69 66 69 65 64 20 6e  e.** specified n
2920: 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65  umber of millise
2930: 63 6f 6e 64 73 20 62 65 66 6f 72 65 20 72 65 74  conds before ret
2940: 75 72 6e 69 6e 67 20 30 2e 0a 2a 2f 0a 69 6e 74  urning 0..*/.int
2950: 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69   sqlite3_busy_ti
2960: 6d 65 6f 75 74 28 73 71 6c 69 74 65 33 20 2a 64  meout(sqlite3 *d
2970: 62 2c 20 69 6e 74 20 6d 73 29 7b 0a 20 20 69 66  b, int ms){.  if
2980: 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  ( sqlite3SafetyC
2990: 68 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20  heck(db) ){.    
29a0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
29b0: 53 55 53 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20  SUSE;.  }.  if( 
29c0: 6d 73 3e 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e  ms>0 ){.    db->
29d0: 62 75 73 79 54 69 6d 65 6f 75 74 20 3d 20 6d 73  busyTimeout = ms
29e0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 75  ;.    sqlite3_bu
29f0: 73 79 5f 68 61 6e 64 6c 65 72 28 64 62 2c 20 73  sy_handler(db, s
2a00: 71 6c 69 74 65 44 65 66 61 75 6c 74 42 75 73 79  qliteDefaultBusy
2a10: 43 61 6c 6c 62 61 63 6b 2c 20 28 76 6f 69 64 2a  Callback, (void*
2a20: 29 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  )db);.  }else{. 
2a30: 20 20 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f     sqlite3_busy_
2a40: 68 61 6e 64 6c 65 72 28 64 62 2c 20 30 2c 20 30  handler(db, 0, 0
2a50: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
2a60: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  SQLITE_OK;.}../*
2a70: 0a 2a 2a 20 43 61 75 73 65 20 61 6e 79 20 70 65  .** Cause any pe
2a80: 6e 64 69 6e 67 20 6f 70 65 72 61 74 69 6f 6e 20  nding operation 
2a90: 74 6f 20 73 74 6f 70 20 61 74 20 69 74 73 20 65  to stop at its e
2aa0: 61 72 6c 69 65 73 74 20 6f 70 70 6f 72 74 75 6e  arliest opportun
2ab0: 69 74 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  ity..*/.void sql
2ac0: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 73  ite3_interrupt(s
2ad0: 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69  qlite3 *db){.  i
2ae0: 66 28 20 21 73 71 6c 69 74 65 33 53 61 66 65 74  f( !sqlite3Safet
2af0: 79 43 68 65 63 6b 28 64 62 29 20 29 7b 0a 20 20  yCheck(db) ){.  
2b00: 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53    db->flags |= S
2b10: 51 4c 49 54 45 5f 49 6e 74 65 72 72 75 70 74 3b  QLITE_Interrupt;
2b20: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4d 65  .  }.}../*.** Me
2b30: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
2b40: 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20 75 73  routines that us
2b50: 65 20 53 51 4c 69 74 65 73 20 69 6e 74 65 72 6e  e SQLites intern
2b60: 61 6c 20 6d 65 6d 6f 72 79 0a 2a 2a 20 6d 65 6d  al memory.** mem
2b70: 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 2e 20 20  ory allocator.  
2b80: 44 65 70 65 6e 64 69 6e 67 20 6f 6e 20 68 6f 77  Depending on how
2b90: 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69   SQLite is compi
2ba0: 6c 65 64 2c 20 74 68 65 0a 2a 2a 20 69 6e 74 65  led, the.** inte
2bb0: 72 6e 61 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  rnal memory allo
2bc0: 63 61 74 6f 72 20 6d 69 67 68 74 20 62 65 20 6a  cator might be j
2bd0: 75 73 74 20 61 6e 20 61 6c 69 61 73 20 66 6f 72  ust an alias for
2be0: 20 74 68 65 0a 2a 2a 20 73 79 73 74 65 6d 20 64   the.** system d
2bf0: 65 66 61 75 6c 74 20 6d 61 6c 6c 6f 63 2f 72 65  efault malloc/re
2c00: 61 6c 6c 6f 63 2f 66 72 65 65 2e 20 20 4f 72 20  alloc/free.  Or 
2c10: 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 61 6c 6c  the built-in all
2c20: 6f 63 61 74 6f 72 0a 2a 2a 20 6d 69 67 68 74 20  ocator.** might 
2c30: 64 6f 20 65 78 74 72 61 20 73 74 75 66 66 20 6c  do extra stuff l
2c40: 69 6b 65 20 70 75 74 20 73 65 6e 74 69 6e 61 6c  ike put sentinal
2c50: 73 20 61 72 6f 75 6e 64 20 62 75 66 66 65 72 73  s around buffers
2c60: 20 74 6f 20 0a 2a 2a 20 63 68 65 63 6b 20 66 6f   to .** check fo
2c70: 72 20 6f 76 65 72 72 75 6e 73 20 6f 72 20 6c 6f  r overruns or lo
2c80: 6f 6b 20 66 6f 72 20 6d 65 6d 6f 72 79 20 6c 65  ok for memory le
2c90: 61 6b 73 2e 0a 2a 2a 0a 2a 2a 20 55 73 65 20 73  aks..**.** Use s
2ca0: 71 6c 69 74 65 33 5f 66 72 65 65 28 29 20 74 6f  qlite3_free() to
2cb0: 20 66 72 65 65 20 6d 65 6d 6f 72 79 20 72 65 74   free memory ret
2cc0: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
2cd0: 5f 6d 70 72 69 6e 74 66 28 29 2e 0a 2a 2f 0a 76  _mprintf()..*/.v
2ce0: 6f 69 64 20 73 71 6c 69 74 65 33 5f 66 72 65 65  oid sqlite3_free
2cf0: 28 76 6f 69 64 20 2a 70 29 7b 20 69 66 28 20 70  (void *p){ if( p
2d00: 20 29 20 73 71 6c 69 74 65 33 4f 73 46 72 65 65   ) sqlite3OsFree
2d10: 28 70 29 3b 20 7d 0a 76 6f 69 64 20 2a 73 71 6c  (p); }.void *sql
2d20: 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 69 6e 74 20  ite3_malloc(int 
2d30: 6e 42 79 74 65 29 7b 20 72 65 74 75 72 6e 20 6e  nByte){ return n
2d40: 42 79 74 65 3e 30 20 3f 20 73 71 6c 69 74 65 33  Byte>0 ? sqlite3
2d50: 4f 73 4d 61 6c 6c 6f 63 28 6e 42 79 74 65 29 20  OsMalloc(nByte) 
2d60: 3a 20 30 3b 20 7d 0a 76 6f 69 64 20 2a 73 71 6c  : 0; }.void *sql
2d70: 69 74 65 33 5f 72 65 61 6c 6c 6f 63 28 76 6f 69  ite3_realloc(voi
2d80: 64 20 2a 70 4f 6c 64 2c 20 69 6e 74 20 6e 42 79  d *pOld, int nBy
2d90: 74 65 29 7b 20 0a 20 20 69 66 28 20 70 4f 6c 64  te){ .  if( pOld
2da0: 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 42 79 74   ){.    if( nByt
2db0: 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 72 65 74  e>0 ){.      ret
2dc0: 75 72 6e 20 73 71 6c 69 74 65 33 4f 73 52 65 61  urn sqlite3OsRea
2dd0: 6c 6c 6f 63 28 70 4f 6c 64 2c 20 6e 42 79 74 65  lloc(pOld, nByte
2de0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
2df0: 20 20 20 20 73 71 6c 69 74 65 33 4f 73 46 72 65      sqlite3OsFre
2e00: 65 28 70 4f 6c 64 29 3b 0a 20 20 20 20 20 20 72  e(pOld);.      r
2e10: 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 0a 20  eturn 0;.    }. 
2e20: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75   }else{.    retu
2e30: 72 6e 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  rn sqlite3_mallo
2e40: 63 28 6e 42 79 74 65 29 3b 0a 20 20 7d 0a 7d 0a  c(nByte);.  }.}.
2e50: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63  ./*.** This func
2e60: 74 69 6f 6e 20 69 73 20 65 78 61 63 74 6c 79 20  tion is exactly 
2e70: 74 68 65 20 73 61 6d 65 20 61 73 20 73 71 6c 69  the same as sqli
2e80: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
2e90: 69 6f 6e 28 29 2c 20 65 78 63 65 70 74 0a 2a 2a  ion(), except.**
2ea0: 20 74 68 61 74 20 69 74 20 69 73 20 64 65 73 69   that it is desi
2eb0: 67 6e 65 64 20 74 6f 20 62 65 20 63 61 6c 6c 65  gned to be calle
2ec0: 64 20 62 79 20 69 6e 74 65 72 6e 61 6c 20 63 6f  d by internal co
2ed0: 64 65 2e 20 54 68 65 20 64 69 66 66 65 72 65 6e  de. The differen
2ee0: 63 65 20 69 73 0a 2a 2a 20 74 68 61 74 20 69 66  ce is.** that if
2ef0: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
2f00: 73 20 69 6e 20 73 71 6c 69 74 65 33 5f 63 72 65  s in sqlite3_cre
2f10: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 2c 20  ate_function(), 
2f20: 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 0a 2a 2a  an error code.**
2f30: 20 69 73 20 72 65 74 75 72 6e 65 64 20 61 6e 64   is returned and
2f40: 20 74 68 65 20 6d 61 6c 6c 6f 63 46 61 69 6c 65   the mallocFaile
2f50: 64 20 66 6c 61 67 20 63 6c 65 61 72 65 64 2e 20  d flag cleared. 
2f60: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  .*/.int sqlite3C
2f70: 72 65 61 74 65 46 75 6e 63 28 0a 20 20 73 71 6c  reateFunc(.  sql
2f80: 69 74 65 33 20 2a 64 62 2c 0a 20 20 63 6f 6e 73  ite3 *db,.  cons
2f90: 74 20 63 68 61 72 20 2a 7a 46 75 6e 63 74 69 6f  t char *zFunctio
2fa0: 6e 4e 61 6d 65 2c 0a 20 20 69 6e 74 20 6e 41 72  nName,.  int nAr
2fb0: 67 2c 0a 20 20 69 6e 74 20 65 6e 63 2c 0a 20 20  g,.  int enc,.  
2fc0: 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 2c  void *pUserData,
2fd0: 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e 63 29  .  void (*xFunc)
2fe0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2ff0: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
3000: 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20  lue **),.  void 
3010: 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65 33  (*xStep)(sqlite3
3020: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
3030: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
3040: 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c  .  void (*xFinal
3050: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
3060: 74 2a 29 0a 29 7b 0a 20 20 46 75 6e 63 44 65 66  t*).){.  FuncDef
3070: 20 2a 70 3b 0a 20 20 69 6e 74 20 6e 4e 61 6d 65   *p;.  int nName
3080: 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ;..  if( sqlite3
3090: 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29 20  SafetyCheck(db) 
30a0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
30b0: 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d  LITE_MISUSE;.  }
30c0: 0a 20 20 69 66 28 20 7a 46 75 6e 63 74 69 6f 6e  .  if( zFunction
30d0: 4e 61 6d 65 3d 3d 30 20 7c 7c 0a 20 20 20 20 20  Name==0 ||.     
30e0: 20 28 78 46 75 6e 63 20 26 26 20 28 78 46 69 6e   (xFunc && (xFin
30f0: 61 6c 20 7c 7c 20 78 53 74 65 70 29 29 20 7c 7c  al || xStep)) ||
3100: 20 0a 20 20 20 20 20 20 28 21 78 46 75 6e 63 20   .      (!xFunc 
3110: 26 26 20 28 78 46 69 6e 61 6c 20 26 26 20 21 78  && (xFinal && !x
3120: 53 74 65 70 29 29 20 7c 7c 0a 20 20 20 20 20 20  Step)) ||.      
3130: 28 21 78 46 75 6e 63 20 26 26 20 28 21 78 46 69  (!xFunc && (!xFi
3140: 6e 61 6c 20 26 26 20 78 53 74 65 70 29 29 20 7c  nal && xStep)) |
3150: 7c 0a 20 20 20 20 20 20 28 6e 41 72 67 3c 2d 31  |.      (nArg<-1
3160: 20 7c 7c 20 6e 41 72 67 3e 31 32 37 29 20 7c 7c   || nArg>127) ||
3170: 0a 20 20 20 20 20 20 28 32 35 35 3c 28 6e 4e 61  .      (255<(nNa
3180: 6d 65 20 3d 20 73 74 72 6c 65 6e 28 7a 46 75 6e  me = strlen(zFun
3190: 63 74 69 6f 6e 4e 61 6d 65 29 29 29 20 29 7b 0a  ctionName))) ){.
31a0: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
31b0: 28 64 62 2c 20 53 51 4c 49 54 45 5f 45 52 52 4f  (db, SQLITE_ERRO
31c0: 52 2c 20 22 62 61 64 20 70 61 72 61 6d 65 74 65  R, "bad paramete
31d0: 72 73 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  rs");.    return
31e0: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
31f0: 20 7d 0a 20 20 0a 23 69 66 6e 64 65 66 20 53 51   }.  .#ifndef SQ
3200: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
3210: 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 55    /* If SQLITE_U
3220: 54 46 31 36 20 69 73 20 73 70 65 63 69 66 69 65  TF16 is specifie
3230: 64 20 61 73 20 74 68 65 20 65 6e 63 6f 64 69 6e  d as the encodin
3240: 67 20 74 79 70 65 2c 20 74 72 61 6e 73 66 6f 72  g type, transfor
3250: 6d 20 74 68 69 73 0a 20 20 2a 2a 20 74 6f 20 6f  m this.  ** to o
3260: 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 55 54 46  ne of SQLITE_UTF
3270: 31 36 4c 45 20 6f 72 20 53 51 4c 49 54 45 5f 55  16LE or SQLITE_U
3280: 54 46 31 36 42 45 20 75 73 69 6e 67 20 74 68 65  TF16BE using the
3290: 0a 20 20 2a 2a 20 53 51 4c 49 54 45 5f 55 54 46  .  ** SQLITE_UTF
32a0: 31 36 4e 41 54 49 56 45 20 6d 61 63 72 6f 2e 20  16NATIVE macro. 
32b0: 53 51 4c 49 54 45 5f 55 54 46 31 36 20 69 73 20  SQLITE_UTF16 is 
32c0: 6e 6f 74 20 75 73 65 64 20 69 6e 74 65 72 6e 61  not used interna
32d0: 6c 6c 79 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49  lly..  **.  ** I
32e0: 66 20 53 51 4c 49 54 45 5f 41 4e 59 20 69 73 20  f SQLITE_ANY is 
32f0: 73 70 65 63 69 66 69 65 64 2c 20 61 64 64 20 74  specified, add t
3300: 68 72 65 65 20 76 65 72 73 69 6f 6e 73 20 6f 66  hree versions of
3310: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20   the function.  
3320: 2a 2a 20 74 6f 20 74 68 65 20 68 61 73 68 20 74  ** to the hash t
3330: 61 62 6c 65 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  able..  */.  if(
3340: 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46   enc==SQLITE_UTF
3350: 31 36 20 29 7b 0a 20 20 20 20 65 6e 63 20 3d 20  16 ){.    enc = 
3360: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
3370: 56 45 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  VE;.  }else if( 
3380: 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 41 4e 59 20  enc==SQLITE_ANY 
3390: 29 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 20  ){.    int rc;. 
33a0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43     rc = sqlite3C
33b0: 72 65 61 74 65 46 75 6e 63 28 64 62 2c 20 7a 46  reateFunc(db, zF
33c0: 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 41 72  unctionName, nAr
33d0: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 0a  g, SQLITE_UTF8,.
33e0: 20 20 20 20 20 20 20 20 20 70 55 73 65 72 44 61           pUserDa
33f0: 74 61 2c 20 78 46 75 6e 63 2c 20 78 53 74 65 70  ta, xFunc, xStep
3400: 2c 20 78 46 69 6e 61 6c 29 3b 0a 20 20 20 20 69  , xFinal);.    i
3410: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
3420: 20 29 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20   ) return rc;.  
3430: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43 72    rc = sqlite3Cr
3440: 65 61 74 65 46 75 6e 63 28 64 62 2c 20 7a 46 75  eateFunc(db, zFu
3450: 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 41 72 67  nctionName, nArg
3460: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  , SQLITE_UTF16LE
3470: 2c 0a 20 20 20 20 20 20 20 20 70 55 73 65 72 44  ,.        pUserD
3480: 61 74 61 2c 20 78 46 75 6e 63 2c 20 78 53 74 65  ata, xFunc, xSte
3490: 70 2c 20 78 46 69 6e 61 6c 29 3b 0a 20 20 20 20  p, xFinal);.    
34a0: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
34b0: 4b 20 29 20 72 65 74 75 72 6e 20 72 63 3b 0a 20  K ) return rc;. 
34c0: 20 20 20 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f     enc = SQLITE_
34d0: 55 54 46 31 36 42 45 3b 0a 20 20 7d 0a 23 65 6c  UTF16BE;.  }.#el
34e0: 73 65 0a 20 20 65 6e 63 20 3d 20 53 51 4c 49 54  se.  enc = SQLIT
34f0: 45 5f 55 54 46 38 3b 0a 23 65 6e 64 69 66 0a 20  E_UTF8;.#endif. 
3500: 20 0a 20 20 2f 2a 20 43 68 65 63 6b 20 69 66 20   .  /* Check if 
3510: 61 6e 20 65 78 69 73 74 69 6e 67 20 66 75 6e 63  an existing func
3520: 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 6f 76  tion is being ov
3530: 65 72 72 69 64 64 65 6e 20 6f 72 20 64 65 6c 65  erridden or dele
3540: 74 65 64 2e 20 49 66 20 73 6f 2c 0a 20 20 2a 2a  ted. If so,.  **
3550: 20 61 6e 64 20 74 68 65 72 65 20 61 72 65 20 61   and there are a
3560: 63 74 69 76 65 20 56 4d 73 2c 20 74 68 65 6e 20  ctive VMs, then 
3570: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 42 55  return SQLITE_BU
3580: 53 59 2e 20 49 66 20 61 20 66 75 6e 63 74 69 6f  SY. If a functio
3590: 6e 0a 20 20 2a 2a 20 69 73 20 62 65 69 6e 67 20  n.  ** is being 
35a0: 6f 76 65 72 72 69 64 64 65 6e 2f 64 65 6c 65 74  overridden/delet
35b0: 65 64 20 62 75 74 20 74 68 65 72 65 20 61 72 65  ed but there are
35c0: 20 6e 6f 20 61 63 74 69 76 65 20 56 4d 73 2c 20   no active VMs, 
35d0: 61 6c 6c 6f 77 20 74 68 65 0a 20 20 2a 2a 20 6f  allow the.  ** o
35e0: 70 65 72 61 74 69 6f 6e 20 74 6f 20 63 6f 6e 74  peration to cont
35f0: 69 6e 75 65 20 62 75 74 20 69 6e 76 61 6c 69 64  inue but invalid
3600: 61 74 65 20 61 6c 6c 20 70 72 65 63 6f 6d 70 69  ate all precompi
3610: 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  led statements..
3620: 20 20 2a 2f 0a 20 20 70 20 3d 20 73 71 6c 69 74    */.  p = sqlit
3630: 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 64  e3FindFunction(d
3640: 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65  b, zFunctionName
3650: 2c 20 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 65  , nName, nArg, e
3660: 6e 63 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 20  nc, 0);.  if( p 
3670: 26 26 20 70 2d 3e 69 50 72 65 66 45 6e 63 3d 3d  && p->iPrefEnc==
3680: 65 6e 63 20 26 26 20 70 2d 3e 6e 41 72 67 3d 3d  enc && p->nArg==
3690: 6e 41 72 67 20 29 7b 0a 20 20 20 20 69 66 28 20  nArg ){.    if( 
36a0: 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e  db->activeVdbeCn
36b0: 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
36c0: 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c 49  e3Error(db, SQLI
36d0: 54 45 5f 42 55 53 59 2c 20 0a 20 20 20 20 20 20  TE_BUSY, .      
36e0: 20 20 22 55 6e 61 62 6c 65 20 74 6f 20 64 65 6c    "Unable to del
36f0: 65 74 65 2f 6d 6f 64 69 66 79 20 75 73 65 72 2d  ete/modify user-
3700: 66 75 6e 63 74 69 6f 6e 20 64 75 65 20 74 6f 20  function due to 
3710: 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
3720: 73 22 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  s");.      asser
3730: 74 28 20 21 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  t( !sqlite3Mallo
3740: 63 46 61 69 6c 65 64 28 29 20 29 3b 0a 20 20 20  cFailed() );.   
3750: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
3760: 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65  _BUSY;.    }else
3770: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 45  {.      sqlite3E
3780: 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
3790: 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20  tements(db);.   
37a0: 20 7d 0a 20 20 7d 0a 0a 20 20 70 20 3d 20 73 71   }.  }..  p = sq
37b0: 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f  lite3FindFunctio
37c0: 6e 28 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e  n(db, zFunctionN
37d0: 61 6d 65 2c 20 6e 4e 61 6d 65 2c 20 6e 41 72 67  ame, nName, nArg
37e0: 2c 20 65 6e 63 2c 20 31 29 3b 0a 20 20 69 66 28  , enc, 1);.  if(
37f0: 20 70 20 29 7b 0a 20 20 20 20 70 2d 3e 66 6c 61   p ){.    p->fla
3800: 67 73 20 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 78  gs = 0;.    p->x
3810: 46 75 6e 63 20 3d 20 78 46 75 6e 63 3b 0a 20 20  Func = xFunc;.  
3820: 20 20 70 2d 3e 78 53 74 65 70 20 3d 20 78 53 74    p->xStep = xSt
3830: 65 70 3b 0a 20 20 20 20 70 2d 3e 78 46 69 6e 61  ep;.    p->xFina
3840: 6c 69 7a 65 20 3d 20 78 46 69 6e 61 6c 3b 0a 20  lize = xFinal;. 
3850: 20 20 20 70 2d 3e 70 55 73 65 72 44 61 74 61 20     p->pUserData 
3860: 3d 20 70 55 73 65 72 44 61 74 61 3b 0a 20 20 20  = pUserData;.   
3870: 20 70 2d 3e 6e 41 72 67 20 3d 20 6e 41 72 67 3b   p->nArg = nArg;
3880: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 53 51  .  }.  return SQ
3890: 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a  LITE_OK;.}../*.*
38a0: 2a 20 43 72 65 61 74 65 20 6e 65 77 20 75 73 65  * Create new use
38b0: 72 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a  r functions..*/.
38c0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 72 65 61  int sqlite3_crea
38d0: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 0a 20 20 73  te_function(.  s
38e0: 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20 63 6f  qlite3 *db,.  co
38f0: 6e 73 74 20 63 68 61 72 20 2a 7a 46 75 6e 63 74  nst char *zFunct
3900: 69 6f 6e 4e 61 6d 65 2c 0a 20 20 69 6e 74 20 6e  ionName,.  int n
3910: 41 72 67 2c 0a 20 20 69 6e 74 20 65 6e 63 2c 0a  Arg,.  int enc,.
3920: 20 20 76 6f 69 64 20 2a 70 2c 0a 20 20 76 6f 69    void *p,.  voi
3930: 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74  d (*xFunc)(sqlit
3940: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
3950: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
3960: 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65  ),.  void (*xSte
3970: 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  p)(sqlite3_conte
3980: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
3990: 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69  value **),.  voi
39a0: 64 20 28 2a 78 46 69 6e 61 6c 29 28 73 71 6c 69  d (*xFinal)(sqli
39b0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 0a 29 7b  te3_context*).){
39c0: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 61 73 73  .  int rc;.  ass
39d0: 65 72 74 28 20 21 73 71 6c 69 74 65 33 4d 61 6c  ert( !sqlite3Mal
39e0: 6c 6f 63 46 61 69 6c 65 64 28 29 20 29 3b 0a 20  locFailed() );. 
39f0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43 72 65   rc = sqlite3Cre
3a00: 61 74 65 46 75 6e 63 28 64 62 2c 20 7a 46 75 6e  ateFunc(db, zFun
3a10: 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c  ctionName, nArg,
3a20: 20 65 6e 63 2c 20 70 2c 20 78 46 75 6e 63 2c 20   enc, p, xFunc, 
3a30: 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 3b 0a  xStep, xFinal);.
3a40: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
3a50: 33 41 70 69 45 78 69 74 28 64 62 2c 20 72 63 29  3ApiExit(db, rc)
3a60: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
3a70: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 69  ITE_OMIT_UTF16.i
3a80: 6e 74 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  nt sqlite3_creat
3a90: 65 5f 66 75 6e 63 74 69 6f 6e 31 36 28 0a 20 20  e_function16(.  
3aa0: 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20 63  sqlite3 *db,.  c
3ab0: 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 46 75 6e 63  onst void *zFunc
3ac0: 74 69 6f 6e 4e 61 6d 65 2c 0a 20 20 69 6e 74 20  tionName,.  int 
3ad0: 6e 41 72 67 2c 0a 20 20 69 6e 74 20 65 54 65 78  nArg,.  int eTex
3ae0: 74 52 65 70 2c 0a 20 20 76 6f 69 64 20 2a 70 2c  tRep,.  void *p,
3af0: 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e 63 29  .  void (*xFunc)
3b00: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
3b10: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
3b20: 6c 75 65 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28  lue**),.  void (
3b30: 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65 33 5f  *xStep)(sqlite3_
3b40: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
3b50: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 2c 0a 20  ite3_value**),. 
3b60: 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 29 28   void (*xFinal)(
3b70: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
3b80: 29 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  ).){.  int rc;. 
3b90: 20 63 68 61 72 20 2a 7a 46 75 6e 63 38 3b 0a 20   char *zFunc8;. 
3ba0: 20 61 73 73 65 72 74 28 20 21 73 71 6c 69 74 65   assert( !sqlite
3bb0: 33 4d 61 6c 6c 6f 63 46 61 69 6c 65 64 28 29 20  3MallocFailed() 
3bc0: 29 3b 0a 0a 20 20 7a 46 75 6e 63 38 20 3d 20 73  );..  zFunc8 = s
3bd0: 71 6c 69 74 65 33 75 74 66 31 36 74 6f 38 28 7a  qlite3utf16to8(z
3be0: 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 2d 31  FunctionName, -1
3bf0: 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
3c00: 33 43 72 65 61 74 65 46 75 6e 63 28 64 62 2c 20  3CreateFunc(db, 
3c10: 7a 46 75 6e 63 38 2c 20 6e 41 72 67 2c 20 65 54  zFunc8, nArg, eT
3c20: 65 78 74 52 65 70 2c 20 70 2c 20 78 46 75 6e 63  extRep, p, xFunc
3c30: 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29  , xStep, xFinal)
3c40: 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28 7a  ;.  sqliteFree(z
3c50: 46 75 6e 63 38 29 3b 0a 0a 20 20 72 65 74 75 72  Func8);..  retur
3c60: 6e 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74  n sqlite3ApiExit
3c70: 28 64 62 2c 20 72 63 29 3b 0a 7d 0a 23 65 6e 64  (db, rc);.}.#end
3c80: 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
3c90: 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 2f 2a  TE_OMIT_TRACE./*
3ca0: 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 74  .** Register a t
3cb0: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20  race function.  
3cc0: 54 68 65 20 70 41 72 67 20 66 72 6f 6d 20 74 68  The pArg from th
3cd0: 65 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65 67  e previously reg
3ce0: 69 73 74 65 72 65 64 20 74 72 61 63 65 0a 2a 2a  istered trace.**
3cf0: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 0a   is returned.  .
3d00: 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 74 72 61  **.** A NULL tra
3d10: 63 65 20 66 75 6e 63 74 69 6f 6e 20 6d 65 61 6e  ce function mean
3d20: 73 20 74 68 61 74 20 6e 6f 20 74 72 61 63 69 6e  s that no tracin
3d30: 67 20 69 73 20 65 78 65 63 75 74 65 73 2e 20 20  g is executes.  
3d40: 41 20 6e 6f 6e 2d 4e 55 4c 4c 0a 2a 2a 20 74 72  A non-NULL.** tr
3d50: 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72  ace is a pointer
3d60: 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 20 74   to a function t
3d70: 68 61 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 61  hat is invoked a
3d80: 74 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 65  t the start of e
3d90: 61 63 68 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65  ach.** SQL state
3da0: 6d 65 6e 74 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73  ment..*/.void *s
3db0: 71 6c 69 74 65 33 5f 74 72 61 63 65 28 73 71 6c  qlite3_trace(sql
3dc0: 69 74 65 33 20 2a 64 62 2c 20 76 6f 69 64 20 28  ite3 *db, void (
3dd0: 2a 78 54 72 61 63 65 29 28 76 6f 69 64 2a 2c 63  *xTrace)(void*,c
3de0: 6f 6e 73 74 20 63 68 61 72 2a 29 2c 20 76 6f 69  onst char*), voi
3df0: 64 20 2a 70 41 72 67 29 7b 0a 20 20 76 6f 69 64  d *pArg){.  void
3e00: 20 2a 70 4f 6c 64 20 3d 20 64 62 2d 3e 70 54 72   *pOld = db->pTr
3e10: 61 63 65 41 72 67 3b 0a 20 20 64 62 2d 3e 78 54  aceArg;.  db->xT
3e20: 72 61 63 65 20 3d 20 78 54 72 61 63 65 3b 0a 20  race = xTrace;. 
3e30: 20 64 62 2d 3e 70 54 72 61 63 65 41 72 67 20 3d   db->pTraceArg =
3e40: 20 70 41 72 67 3b 0a 20 20 72 65 74 75 72 6e 20   pArg;.  return 
3e50: 70 4f 6c 64 3b 0a 7d 0a 2f 2a 0a 2a 2a 20 52 65  pOld;.}./*.** Re
3e60: 67 69 73 74 65 72 20 61 20 70 72 6f 66 69 6c 65  gister a profile
3e70: 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20   function.  The 
3e80: 70 41 72 67 20 66 72 6f 6d 20 74 68 65 20 70 72  pArg from the pr
3e90: 65 76 69 6f 75 73 6c 79 20 72 65 67 69 73 74 65  eviously registe
3ea0: 72 65 64 20 0a 2a 2a 20 70 72 6f 66 69 6c 65 20  red .** profile 
3eb0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 72 65 74 75  function is retu
3ec0: 72 6e 65 64 2e 20 20 0a 2a 2a 0a 2a 2a 20 41 20  rned.  .**.** A 
3ed0: 4e 55 4c 4c 20 70 72 6f 66 69 6c 65 20 66 75 6e  NULL profile fun
3ee0: 63 74 69 6f 6e 20 6d 65 61 6e 73 20 74 68 61 74  ction means that
3ef0: 20 6e 6f 20 70 72 6f 66 69 6c 69 6e 67 20 69 73   no profiling is
3f00: 20 65 78 65 63 75 74 65 73 2e 20 20 41 20 6e 6f   executes.  A no
3f10: 6e 2d 4e 55 4c 4c 0a 2a 2a 20 70 72 6f 66 69 6c  n-NULL.** profil
3f20: 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  e is a pointer t
3f30: 6f 20 61 20 66 75 6e 63 74 69 6f 6e 20 74 68 61  o a function tha
3f40: 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 74 20  t is invoked at 
3f50: 74 68 65 20 63 6f 6e 63 6c 75 73 69 6f 6e 20 6f  the conclusion o
3f60: 66 0a 2a 2a 20 65 61 63 68 20 53 51 4c 20 73 74  f.** each SQL st
3f70: 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69 73 20  atement that is 
3f80: 72 75 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71  run..*/.void *sq
3f90: 6c 69 74 65 33 5f 70 72 6f 66 69 6c 65 28 0a 20  lite3_profile(. 
3fa0: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20   sqlite3 *db,.  
3fb0: 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29  void (*xProfile)
3fc0: 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61  (void*,const cha
3fd0: 72 2a 2c 73 71 6c 69 74 65 5f 75 69 6e 74 36 34  r*,sqlite_uint64
3fe0: 29 2c 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 0a  ),.  void *pArg.
3ff0: 29 7b 0a 20 20 76 6f 69 64 20 2a 70 4f 6c 64 20  ){.  void *pOld 
4000: 3d 20 64 62 2d 3e 70 50 72 6f 66 69 6c 65 41 72  = db->pProfileAr
4010: 67 3b 0a 20 20 64 62 2d 3e 78 50 72 6f 66 69 6c  g;.  db->xProfil
4020: 65 20 3d 20 78 50 72 6f 66 69 6c 65 3b 0a 20 20  e = xProfile;.  
4030: 64 62 2d 3e 70 50 72 6f 66 69 6c 65 41 72 67 20  db->pProfileArg 
4040: 3d 20 70 41 72 67 3b 0a 20 20 72 65 74 75 72 6e  = pArg;.  return
4050: 20 70 4f 6c 64 3b 0a 7d 0a 23 65 6e 64 69 66 20   pOld;.}.#endif 
4060: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  /* SQLITE_OMIT_T
4070: 52 41 43 45 20 2a 2f 0a 0a 2f 2a 2a 2a 20 45 58  RACE */../*** EX
4080: 50 45 52 49 4d 45 4e 54 41 4c 20 2a 2a 2a 0a 2a  PERIMENTAL ***.*
4090: 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20  *.** Register a 
40a0: 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 69  function to be i
40b0: 6e 76 6f 6b 65 64 20 77 68 65 6e 20 61 20 74 72  nvoked when a tr
40c0: 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e  ansaction commen
40d0: 74 73 2e 0a 2a 2a 20 49 66 20 74 68 65 20 69 6e  ts..** If the in
40e0: 76 6f 6b 65 64 20 66 75 6e 63 74 69 6f 6e 20 72  voked function r
40f0: 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  eturns non-zero,
4100: 20 74 68 65 6e 20 74 68 65 20 63 6f 6d 6d 69 74   then the commit
4110: 20 62 65 63 6f 6d 65 73 20 61 0a 2a 2a 20 72 6f   becomes a.** ro
4120: 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 76 6f 69 64 20  llback..*/.void 
4130: 2a 73 71 6c 69 74 65 33 5f 63 6f 6d 6d 69 74 5f  *sqlite3_commit_
4140: 68 6f 6f 6b 28 0a 20 20 73 71 6c 69 74 65 33 20  hook(.  sqlite3 
4150: 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  *db,            
4160: 20 20 2f 2a 20 41 74 74 61 63 68 20 74 68 65 20    /* Attach the 
4170: 68 6f 6f 6b 20 74 6f 20 74 68 69 73 20 64 61 74  hook to this dat
4180: 61 62 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 28  abase */.  int (
4190: 2a 78 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  *xCallback)(void
41a0: 2a 29 2c 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e  *),  /* Function
41b0: 20 74 6f 20 69 6e 76 6f 6b 65 20 6f 6e 20 65 61   to invoke on ea
41c0: 63 68 20 63 6f 6d 6d 69 74 20 2a 2f 0a 20 20 76  ch commit */.  v
41d0: 6f 69 64 20 2a 70 41 72 67 20 20 20 20 20 20 20  oid *pArg       
41e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
41f0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 66 75 6e 63  ment to the func
4200: 74 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 76 6f 69  tion */.){.  voi
4210: 64 20 2a 70 4f 6c 64 20 3d 20 64 62 2d 3e 70 43  d *pOld = db->pC
4220: 6f 6d 6d 69 74 41 72 67 3b 0a 20 20 64 62 2d 3e  ommitArg;.  db->
4230: 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 20  xCommitCallback 
4240: 3d 20 78 43 61 6c 6c 62 61 63 6b 3b 0a 20 20 64  = xCallback;.  d
4250: 62 2d 3e 70 43 6f 6d 6d 69 74 41 72 67 20 3d 20  b->pCommitArg = 
4260: 70 41 72 67 3b 0a 20 20 72 65 74 75 72 6e 20 70  pArg;.  return p
4270: 4f 6c 64 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  Old;.}../*.** Re
4280: 67 69 73 74 65 72 20 61 20 63 61 6c 6c 62 61 63  gister a callbac
4290: 6b 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20  k to be invoked 
42a0: 65 61 63 68 20 74 69 6d 65 20 61 20 72 6f 77 20  each time a row 
42b0: 69 73 20 75 70 64 61 74 65 64 2c 0a 2a 2a 20 69  is updated,.** i
42c0: 6e 73 65 72 74 65 64 20 6f 72 20 64 65 6c 65 74  nserted or delet
42d0: 65 64 20 75 73 69 6e 67 20 74 68 69 73 20 64 61  ed using this da
42e0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
42f0: 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69  n..*/.void *sqli
4300: 74 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 28  te3_update_hook(
4310: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  .  sqlite3 *db, 
4320: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4330: 41 74 74 61 63 68 20 74 68 65 20 68 6f 6f 6b 20  Attach the hook 
4340: 74 6f 20 74 68 69 73 20 64 61 74 61 62 61 73 65  to this database
4350: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 43 61   */.  void (*xCa
4360: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e  llback)(void*,in
4370: 74 2c 63 68 61 72 20 63 6f 6e 73 74 20 2a 2c 63  t,char const *,c
4380: 68 61 72 20 63 6f 6e 73 74 20 2a 2c 73 71 6c 69  har const *,sqli
4390: 74 65 5f 69 6e 74 36 34 29 2c 0a 20 20 76 6f 69  te_int64),.  voi
43a0: 64 20 2a 70 41 72 67 20 20 20 20 20 20 20 20 20  d *pArg         
43b0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
43c0: 6e 74 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69  nt to the functi
43d0: 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 76 6f 69 64 20  on */.){.  void 
43e0: 2a 70 52 65 74 20 3d 20 64 62 2d 3e 70 55 70 64  *pRet = db->pUpd
43f0: 61 74 65 41 72 67 3b 0a 20 20 64 62 2d 3e 78 55  ateArg;.  db->xU
4400: 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 3d 20  pdateCallback = 
4410: 78 43 61 6c 6c 62 61 63 6b 3b 0a 20 20 64 62 2d  xCallback;.  db-
4420: 3e 70 55 70 64 61 74 65 41 72 67 20 3d 20 70 41  >pUpdateArg = pA
4430: 72 67 3b 0a 20 20 72 65 74 75 72 6e 20 70 52 65  rg;.  return pRe
4440: 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69  t;.}../*.** Regi
4450: 73 74 65 72 20 61 20 63 61 6c 6c 62 61 63 6b 20  ster a callback 
4460: 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20 65 61  to be invoked ea
4470: 63 68 20 74 69 6d 65 20 61 20 74 72 61 6e 73 61  ch time a transa
4480: 63 74 69 6f 6e 20 69 73 20 72 6f 6c 6c 65 64 0a  ction is rolled.
4490: 2a 2a 20 62 61 63 6b 20 62 79 20 74 68 69 73 20  ** back by this 
44a0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
44b0: 69 6f 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71  ion..*/.void *sq
44c0: 6c 69 74 65 33 5f 72 6f 6c 6c 62 61 63 6b 5f 68  lite3_rollback_h
44d0: 6f 6f 6b 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  ook(.  sqlite3 *
44e0: 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  db,             
44f0: 20 2f 2a 20 41 74 74 61 63 68 20 74 68 65 20 68   /* Attach the h
4500: 6f 6f 6b 20 74 6f 20 74 68 69 73 20 64 61 74 61  ook to this data
4510: 62 61 73 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28  base */.  void (
4520: 2a 78 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  *xCallback)(void
4530: 2a 29 2c 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  *), /* Callback 
4540: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
4550: 69 64 20 2a 70 41 72 67 20 20 20 20 20 20 20 20  id *pArg        
4560: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
4570: 65 6e 74 20 74 6f 20 74 68 65 20 66 75 6e 63 74  ent to the funct
4580: 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 76 6f 69 64  ion */.){.  void
4590: 20 2a 70 52 65 74 20 3d 20 64 62 2d 3e 70 52 6f   *pRet = db->pRo
45a0: 6c 6c 62 61 63 6b 41 72 67 3b 0a 20 20 64 62 2d  llbackArg;.  db-
45b0: 3e 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61  >xRollbackCallba
45c0: 63 6b 20 3d 20 78 43 61 6c 6c 62 61 63 6b 3b 0a  ck = xCallback;.
45d0: 20 20 64 62 2d 3e 70 52 6f 6c 6c 62 61 63 6b 41    db->pRollbackA
45e0: 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 72 65 74  rg = pArg;.  ret
45f0: 75 72 6e 20 70 52 65 74 3b 0a 7d 0a 0a 2f 2a 0a  urn pRet;.}../*.
4600: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
4610: 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65  is called to cre
4620: 61 74 65 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e  ate a connection
4630: 20 74 6f 20 61 20 64 61 74 61 62 61 73 65 20 42   to a database B
4640: 54 72 65 65 0a 2a 2a 20 64 72 69 76 65 72 2e 20  Tree.** driver. 
4650: 20 49 66 20 7a 46 69 6c 65 6e 61 6d 65 20 69 73   If zFilename is
4660: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 66   the name of a f
4670: 69 6c 65 2c 20 74 68 65 6e 20 74 68 61 74 20 66  ile, then that f
4680: 69 6c 65 20 69 73 0a 2a 2a 20 6f 70 65 6e 65 64  ile is.** opened
4690: 20 61 6e 64 20 75 73 65 64 2e 20 20 49 66 20 7a   and used.  If z
46a0: 46 69 6c 65 6e 61 6d 65 20 69 73 20 74 68 65 20  Filename is the 
46b0: 6d 61 67 69 63 20 6e 61 6d 65 20 22 3a 6d 65 6d  magic name ":mem
46c0: 6f 72 79 3a 22 20 74 68 65 6e 0a 2a 2a 20 74 68  ory:" then.** th
46d0: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 73 74  e database is st
46e0: 6f 72 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 28  ored in memory (
46f0: 61 6e 64 20 69 73 20 74 68 75 73 20 66 6f 72 67  and is thus forg
4700: 6f 74 74 65 6e 20 61 73 20 73 6f 6f 6e 20 61 73  otten as soon as
4710: 0a 2a 2a 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  .** the connecti
4720: 6f 6e 20 69 73 20 63 6c 6f 73 65 64 2e 29 20 20  on is closed.)  
4730: 49 66 20 7a 46 69 6c 65 6e 61 6d 65 20 69 73 20  If zFilename is 
4740: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 64 61  NULL then the da
4750: 74 61 62 61 73 65 0a 2a 2a 20 69 73 20 61 20 22  tabase.** is a "
4760: 76 69 72 74 75 61 6c 22 20 64 61 74 61 62 61 73  virtual" databas
4770: 65 20 66 6f 72 20 74 72 61 6e 73 69 65 6e 74 20  e for transient 
4780: 75 73 65 20 6f 6e 6c 79 20 61 6e 64 20 69 73 20  use only and is 
4790: 64 65 6c 65 74 65 64 20 61 73 0a 2a 2a 20 73 6f  deleted as.** so
47a0: 6f 6e 20 61 73 20 74 68 65 20 63 6f 6e 6e 65 63  on as the connec
47b0: 74 69 6f 6e 20 69 73 20 63 6c 6f 73 65 64 2e 0a  tion is closed..
47c0: 2a 2a 0a 2a 2a 20 41 20 76 69 72 74 75 61 6c 20  **.** A virtual 
47d0: 64 61 74 61 62 61 73 65 20 63 61 6e 20 62 65 20  database can be 
47e0: 65 69 74 68 65 72 20 61 20 64 69 73 6b 20 66 69  either a disk fi
47f0: 6c 65 20 28 74 68 61 74 20 69 73 20 61 75 74 6f  le (that is auto
4800: 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 64 65 6c  matically.** del
4810: 65 74 65 64 20 77 68 65 6e 20 74 68 65 20 66 69  eted when the fi
4820: 6c 65 20 69 73 20 63 6c 6f 73 65 64 29 20 6f 72  le is closed) or
4830: 20 69 74 20 61 6e 20 62 65 20 68 65 6c 64 20 65   it an be held e
4840: 6e 74 69 72 65 6c 79 20 69 6e 20 6d 65 6d 6f 72  ntirely in memor
4850: 79 2c 0a 2a 2a 20 64 65 70 65 6e 64 69 6e 67 20  y,.** depending 
4860: 6f 6e 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  on the values of
4870: 20 74 68 65 20 54 45 4d 50 5f 53 54 4f 52 45 20   the TEMP_STORE 
4880: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6d 61 63  compile-time mac
4890: 72 6f 20 61 6e 64 20 74 68 65 0a 2a 2a 20 64 62  ro and the.** db
48a0: 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20 76 61 72  ->temp_store var
48b0: 69 61 62 6c 65 2c 20 61 63 63 6f 72 64 69 6e 67  iable, according
48c0: 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
48d0: 67 20 63 68 61 72 74 3a 0a 2a 2a 0a 2a 2a 20 20  g chart:.**.**  
48e0: 20 20 20 20 20 54 45 4d 50 5f 53 54 4f 52 45 20       TEMP_STORE 
48f0: 20 20 20 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f      db->temp_sto
4900: 72 65 20 20 20 20 20 4c 6f 63 61 74 69 6f 6e 20  re     Location 
4910: 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74  of temporary dat
4920: 61 62 61 73 65 0a 2a 2a 20 20 20 20 20 20 20 2d  abase.**       -
4930: 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 20 20 20 20 2d 2d  ---------     --
4940: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 20 20 20  ------------    
4950: 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ---------------
4960: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
4970: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 30 20 20  **           0  
4980: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 79               any
4990: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c               fil
49a0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 31  e.**           1
49b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
49c0: 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66  1              f
49d0: 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ile.**          
49e0: 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20   1              
49f0: 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20    2             
4a00: 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20   memory.**      
4a10: 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20 20       1          
4a20: 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20 20        0         
4a30: 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20       file.**    
4a40: 20 20 20 20 20 20 20 32 20 20 20 20 20 20 20 20         2        
4a50: 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20          1       
4a60: 20 20 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20 20         file.**  
4a70: 20 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20           2      
4a80: 20 20 20 20 20 20 20 20 20 20 32 20 20 20 20 20            2     
4a90: 20 20 20 20 20 20 20 20 20 6d 65 6d 6f 72 79 0a           memory.
4aa0: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 32 20 20  **           2  
4ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 20                0 
4ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65 6d               mem
4ad0: 6f 72 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ory.**          
4ae0: 20 33 20 20 20 20 20 20 20 20 20 20 20 20 20 20   3              
4af0: 20 61 6e 79 20 20 20 20 20 20 20 20 20 20 20 20   any            
4b00: 20 6d 65 6d 6f 72 79 0a 2a 2f 0a 69 6e 74 20 73   memory.*/.int s
4b10: 71 6c 69 74 65 33 42 74 72 65 65 46 61 63 74 6f  qlite3BtreeFacto
4b20: 72 79 28 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ry(.  const sqli
4b30: 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20  te3 *db,        
4b40: 2f 2a 20 4d 61 69 6e 20 64 61 74 61 62 61 73 65  /* Main database
4b50: 20 77 68 65 6e 20 6f 70 65 6e 69 6e 67 20 61 75   when opening au
4b60: 78 20 6f 74 68 65 72 77 69 73 65 20 30 20 2a 2f  x otherwise 0 */
4b70: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
4b80: 46 69 6c 65 6e 61 6d 65 2c 20 20 20 20 2f 2a 20  Filename,    /* 
4b90: 4e 61 6d 65 20 6f 66 20 74 68 65 20 66 69 6c 65  Name of the file
4ba0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
4bb0: 42 54 72 65 65 20 64 61 74 61 62 61 73 65 20 2a  BTree database *
4bc0: 2f 0a 20 20 69 6e 74 20 6f 6d 69 74 4a 6f 75 72  /.  int omitJour
4bd0: 6e 61 6c 2c 20 20 20 20 20 20 20 20 20 20 2f 2a  nal,          /*
4be0: 20 69 66 20 54 52 55 45 20 74 68 65 6e 20 64 6f   if TRUE then do
4bf0: 20 6e 6f 74 20 6a 6f 75 72 6e 61 6c 20 74 68 69   not journal thi
4c00: 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  s file */.  int 
4c10: 6e 43 61 63 68 65 2c 20 20 20 20 20 20 20 20 20  nCache,         
4c20: 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 6d 61 6e        /* How man
4c30: 79 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 70  y pages in the p
4c40: 61 67 65 20 63 61 63 68 65 20 2a 2f 0a 20 20 42  age cache */.  B
4c50: 74 72 65 65 20 2a 2a 70 70 42 74 72 65 65 20 20  tree **ppBtree  
4c60: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
4c70: 74 65 72 20 74 6f 20 6e 65 77 20 42 74 72 65 65  ter to new Btree
4c80: 20 6f 62 6a 65 63 74 20 77 72 69 74 74 65 6e 20   object written 
4c90: 68 65 72 65 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  here */.){.  int
4ca0: 20 62 74 72 65 65 5f 66 6c 61 67 73 20 3d 20 30   btree_flags = 0
4cb0: 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 0a 20  ;.  int rc;.  . 
4cc0: 20 61 73 73 65 72 74 28 20 70 70 42 74 72 65 65   assert( ppBtree
4cd0: 20 21 3d 20 30 29 3b 0a 20 20 69 66 28 20 6f 6d   != 0);.  if( om
4ce0: 69 74 4a 6f 75 72 6e 61 6c 20 29 7b 0a 20 20 20  itJournal ){.   
4cf0: 20 62 74 72 65 65 5f 66 6c 61 67 73 20 7c 3d 20   btree_flags |= 
4d00: 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e  BTREE_OMIT_JOURN
4d10: 41 4c 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62  AL;.  }.  if( db
4d20: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
4d30: 5f 4e 6f 52 65 61 64 6c 6f 63 6b 20 29 7b 0a 20  _NoReadlock ){. 
4d40: 20 20 20 62 74 72 65 65 5f 66 6c 61 67 73 20 7c     btree_flags |
4d50: 3d 20 42 54 52 45 45 5f 4e 4f 5f 52 45 41 44 4c  = BTREE_NO_READL
4d60: 4f 43 4b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a  OCK;.  }.  if( z
4d70: 46 69 6c 65 6e 61 6d 65 3d 3d 30 20 29 7b 0a 23  Filename==0 ){.#
4d80: 69 66 20 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 30  if TEMP_STORE==0
4d90: 0a 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 68 69  .    /* Do nothi
4da0: 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  ng */.#endif.#if
4db0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
4dc0: 5f 4d 45 4d 4f 52 59 44 42 0a 23 69 66 20 54 45  _MEMORYDB.#if TE
4dd0: 4d 50 5f 53 54 4f 52 45 3d 3d 31 0a 20 20 20 20  MP_STORE==1.    
4de0: 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f  if( db->temp_sto
4df0: 72 65 3d 3d 32 20 29 20 7a 46 69 6c 65 6e 61 6d  re==2 ) zFilenam
4e00: 65 20 3d 20 22 3a 6d 65 6d 6f 72 79 3a 22 3b 0a  e = ":memory:";.
4e10: 23 65 6e 64 69 66 0a 23 69 66 20 54 45 4d 50 5f  #endif.#if TEMP_
4e20: 53 54 4f 52 45 3d 3d 32 0a 20 20 20 20 69 66 28  STORE==2.    if(
4e30: 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 21   db->temp_store!
4e40: 3d 31 20 29 20 7a 46 69 6c 65 6e 61 6d 65 20 3d  =1 ) zFilename =
4e50: 20 22 3a 6d 65 6d 6f 72 79 3a 22 3b 0a 23 65 6e   ":memory:";.#en
4e60: 64 69 66 0a 23 69 66 20 54 45 4d 50 5f 53 54 4f  dif.#if TEMP_STO
4e70: 52 45 3d 3d 33 0a 20 20 20 20 7a 46 69 6c 65 6e  RE==3.    zFilen
4e80: 61 6d 65 20 3d 20 22 3a 6d 65 6d 6f 72 79 3a 22  ame = ":memory:"
4e90: 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 20  ;.#endif.#endif 
4ea0: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d  /* SQLITE_OMIT_M
4eb0: 45 4d 4f 52 59 44 42 20 2a 2f 0a 20 20 7d 0a 0a  EMORYDB */.  }..
4ec0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
4ed0: 72 65 65 4f 70 65 6e 28 7a 46 69 6c 65 6e 61 6d  reeOpen(zFilenam
4ee0: 65 2c 20 28 73 71 6c 69 74 65 33 20 2a 29 64 62  e, (sqlite3 *)db
4ef0: 2c 20 70 70 42 74 72 65 65 2c 20 62 74 72 65 65  , ppBtree, btree
4f00: 5f 66 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72  _flags);.  if( r
4f10: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
4f20: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
4f30: 53 65 74 42 75 73 79 48 61 6e 64 6c 65 72 28 2a  SetBusyHandler(*
4f40: 70 70 42 74 72 65 65 2c 20 28 76 6f 69 64 2a 29  ppBtree, (void*)
4f50: 26 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72  &db->busyHandler
4f60: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  );.    sqlite3Bt
4f70: 72 65 65 53 65 74 43 61 63 68 65 53 69 7a 65 28  reeSetCacheSize(
4f80: 2a 70 70 42 74 72 65 65 2c 20 6e 43 61 63 68 65  *ppBtree, nCache
4f90: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
4fa0: 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  rc;.}../*.** Ret
4fb0: 75 72 6e 20 55 54 46 2d 38 20 65 6e 63 6f 64 65  urn UTF-8 encode
4fc0: 64 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61  d English langua
4fd0: 67 65 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 6f  ge explanation o
4fe0: 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  f the most recen
4ff0: 74 0a 2a 2a 20 65 72 72 6f 72 2e 0a 2a 2f 0a 63  t.** error..*/.c
5000: 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
5010: 65 33 5f 65 72 72 6d 73 67 28 73 71 6c 69 74 65  e3_errmsg(sqlite
5020: 33 20 2a 64 62 29 7b 0a 20 20 63 6f 6e 73 74 20  3 *db){.  const 
5030: 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 21  char *z;.  if( !
5040: 64 62 20 7c 7c 20 73 71 6c 69 74 65 33 4d 61 6c  db || sqlite3Mal
5050: 6c 6f 63 46 61 69 6c 65 64 28 29 20 29 7b 0a 20  locFailed() ){. 
5060: 20 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65     return sqlite
5070: 33 45 72 72 53 74 72 28 53 51 4c 49 54 45 5f 4e  3ErrStr(SQLITE_N
5080: 4f 4d 45 4d 29 3b 0a 20 20 7d 0a 20 20 69 66 28  OMEM);.  }.  if(
5090: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
50a0: 65 63 6b 28 64 62 29 20 7c 7c 20 64 62 2d 3e 65  eck(db) || db->e
50b0: 72 72 43 6f 64 65 3d 3d 53 51 4c 49 54 45 5f 4d  rrCode==SQLITE_M
50c0: 49 53 55 53 45 20 29 7b 0a 20 20 20 20 72 65 74  ISUSE ){.    ret
50d0: 75 72 6e 20 73 71 6c 69 74 65 33 45 72 72 53 74  urn sqlite3ErrSt
50e0: 72 28 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 29  r(SQLITE_MISUSE)
50f0: 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 28 63 68 61  ;.  }.  z = (cha
5100: 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  r*)sqlite3_value
5110: 5f 74 65 78 74 28 64 62 2d 3e 70 45 72 72 29 3b  _text(db->pErr);
5120: 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20  .  if( z==0 ){. 
5130: 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 45 72     z = sqlite3Er
5140: 72 53 74 72 28 64 62 2d 3e 65 72 72 43 6f 64 65  rStr(db->errCode
5150: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
5160: 7a 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  z;.}..#ifndef SQ
5170: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
5180: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 55 54 46  /*.** Return UTF
5190: 2d 31 36 20 65 6e 63 6f 64 65 64 20 45 6e 67 6c  -16 encoded Engl
51a0: 69 73 68 20 6c 61 6e 67 75 61 67 65 20 65 78 70  ish language exp
51b0: 6c 61 6e 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  lanation of the 
51c0: 6d 6f 73 74 20 72 65 63 65 6e 74 0a 2a 2a 20 65  most recent.** e
51d0: 72 72 6f 72 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 76  rror..*/.const v
51e0: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 65 72 72  oid *sqlite3_err
51f0: 6d 73 67 31 36 28 73 71 6c 69 74 65 33 20 2a 64  msg16(sqlite3 *d
5200: 62 29 7b 0a 20 20 2f 2a 20 42 65 63 61 75 73 65  b){.  /* Because
5210: 20 61 6c 6c 20 74 68 65 20 63 68 61 72 61 63 74   all the charact
5220: 65 72 73 20 69 6e 20 74 68 65 20 73 74 72 69 6e  ers in the strin
5230: 67 20 61 72 65 20 69 6e 20 74 68 65 20 75 6e 69  g are in the uni
5240: 63 6f 64 65 0a 20 20 2a 2a 20 72 61 6e 67 65 20  code.  ** range 
5250: 30 78 30 30 2d 30 78 46 46 2c 20 69 66 20 77 65  0x00-0xFF, if we
5260: 20 70 61 64 20 74 68 65 20 62 69 67 2d 65 6e 64   pad the big-end
5270: 69 61 6e 20 73 74 72 69 6e 67 20 77 69 74 68 20  ian string with 
5280: 61 20 0a 20 20 2a 2a 20 7a 65 72 6f 20 62 79 74  a .  ** zero byt
5290: 65 2c 20 77 65 20 63 61 6e 20 6f 62 74 61 69 6e  e, we can obtain
52a0: 20 74 68 65 20 6c 69 74 74 6c 65 2d 65 6e 64 69   the little-endi
52b0: 61 6e 20 73 74 72 69 6e 67 20 77 69 74 68 0a 20  an string with. 
52c0: 20 2a 2a 20 26 62 69 67 5f 65 6e 64 69 61 6e 5b   ** &big_endian[
52d0: 31 5d 2e 0a 20 20 2a 2f 0a 20 20 73 74 61 74 69  1]..  */.  stati
52e0: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 6f 75 74  c const char out
52f0: 4f 66 4d 65 6d 42 65 5b 5d 20 3d 20 7b 0a 20 20  OfMemBe[] = {.  
5300: 20 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27 75 27    0, 'o', 0, 'u'
5310: 2c 20 30 2c 20 27 74 27 2c 20 30 2c 20 27 20 27  , 0, 't', 0, ' '
5320: 2c 20 0a 20 20 20 20 30 2c 20 27 6f 27 2c 20 30  , .    0, 'o', 0
5330: 2c 20 27 66 27 2c 20 30 2c 20 27 20 27 2c 20 0a  , 'f', 0, ' ', .
5340: 20 20 20 20 30 2c 20 27 6d 27 2c 20 30 2c 20 27      0, 'm', 0, '
5350: 65 27 2c 20 30 2c 20 27 6d 27 2c 20 30 2c 20 27  e', 0, 'm', 0, '
5360: 6f 27 2c 20 30 2c 20 27 72 27 2c 20 30 2c 20 27  o', 0, 'r', 0, '
5370: 79 27 2c 20 30 2c 20 30 2c 20 30 0a 20 20 7d 3b  y', 0, 0, 0.  };
5380: 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
5390: 63 68 61 72 20 6d 69 73 75 73 65 42 65 20 5b 5d  char misuseBe []
53a0: 20 3d 20 7b 0a 20 20 20 20 30 2c 20 27 6c 27 2c   = {.    0, 'l',
53b0: 20 30 2c 20 27 69 27 2c 20 30 2c 20 27 62 27 2c   0, 'i', 0, 'b',
53c0: 20 30 2c 20 27 72 27 2c 20 30 2c 20 27 61 27 2c   0, 'r', 0, 'a',
53d0: 20 30 2c 20 27 72 27 2c 20 30 2c 20 27 79 27 2c   0, 'r', 0, 'y',
53e0: 20 30 2c 20 27 20 27 2c 20 0a 20 20 20 20 30 2c   0, ' ', .    0,
53f0: 20 27 72 27 2c 20 30 2c 20 27 6f 27 2c 20 30 2c   'r', 0, 'o', 0,
5400: 20 27 75 27 2c 20 30 2c 20 27 74 27 2c 20 30 2c   'u', 0, 't', 0,
5410: 20 27 69 27 2c 20 30 2c 20 27 6e 27 2c 20 30 2c   'i', 0, 'n', 0,
5420: 20 27 65 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20   'e', 0, ' ', . 
5430: 20 20 20 30 2c 20 27 63 27 2c 20 30 2c 20 27 61     0, 'c', 0, 'a
5440: 27 2c 20 30 2c 20 27 6c 27 2c 20 30 2c 20 27 6c  ', 0, 'l', 0, 'l
5450: 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20 27 64  ', 0, 'e', 0, 'd
5460: 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20 20 20  ', 0, ' ', .    
5470: 30 2c 20 27 6f 27 2c 20 30 2c 20 27 75 27 2c 20  0, 'o', 0, 'u', 
5480: 30 2c 20 27 74 27 2c 20 30 2c 20 27 20 27 2c 20  0, 't', 0, ' ', 
5490: 0a 20 20 20 20 30 2c 20 27 6f 27 2c 20 30 2c 20  .    0, 'o', 0, 
54a0: 27 66 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20  'f', 0, ' ', .  
54b0: 20 20 30 2c 20 27 73 27 2c 20 30 2c 20 27 65 27    0, 's', 0, 'e'
54c0: 2c 20 30 2c 20 27 71 27 2c 20 30 2c 20 27 75 27  , 0, 'q', 0, 'u'
54d0: 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20 27 6e 27  , 0, 'e', 0, 'n'
54e0: 2c 20 30 2c 20 27 63 27 2c 20 30 2c 20 27 65 27  , 0, 'c', 0, 'e'
54f0: 2c 20 30 2c 20 30 2c 20 30 0a 20 20 7d 3b 0a 0a  , 0, 0, 0.  };..
5500: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 3b    const void *z;
5510: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 4d 61  .  if( sqlite3Ma
5520: 6c 6c 6f 63 46 61 69 6c 65 64 28 29 20 29 7b 0a  llocFailed() ){.
5530: 20 20 20 20 72 65 74 75 72 6e 20 28 76 6f 69 64      return (void
5540: 20 2a 29 28 26 6f 75 74 4f 66 4d 65 6d 42 65 5b   *)(&outOfMemBe[
5550: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
5560: 56 45 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  VE==SQLITE_UTF16
5570: 4c 45 3f 31 3a 30 5d 29 3b 0a 20 20 7d 0a 20 20  LE?1:0]);.  }.  
5580: 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
5590: 79 43 68 65 63 6b 28 64 62 29 20 7c 7c 20 64 62  yCheck(db) || db
55a0: 2d 3e 65 72 72 43 6f 64 65 3d 3d 53 51 4c 49 54  ->errCode==SQLIT
55b0: 45 5f 4d 49 53 55 53 45 20 29 7b 0a 20 20 20 20  E_MISUSE ){.    
55c0: 72 65 74 75 72 6e 20 28 76 6f 69 64 20 2a 29 28  return (void *)(
55d0: 26 6d 69 73 75 73 65 42 65 5b 53 51 4c 49 54 45  &misuseBe[SQLITE
55e0: 5f 55 54 46 31 36 4e 41 54 49 56 45 3d 3d 53 51  _UTF16NATIVE==SQ
55f0: 4c 49 54 45 5f 55 54 46 31 36 4c 45 3f 31 3a 30  LITE_UTF16LE?1:0
5600: 5d 29 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71  ]);.  }.  z = sq
5610: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
5620: 31 36 28 64 62 2d 3e 70 45 72 72 29 3b 0a 20 20  16(db->pErr);.  
5630: 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20  if( z==0 ){.    
5640: 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53  sqlite3ValueSetS
5650: 74 72 28 64 62 2d 3e 70 45 72 72 2c 20 2d 31 2c  tr(db->pErr, -1,
5660: 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 64   sqlite3ErrStr(d
5670: 62 2d 3e 65 72 72 43 6f 64 65 29 2c 0a 20 20 20  b->errCode),.   
5680: 20 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46        SQLITE_UTF
5690: 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  8, SQLITE_STATIC
56a0: 29 3b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74  );.    z = sqlit
56b0: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 28  e3_value_text16(
56c0: 64 62 2d 3e 70 45 72 72 29 3b 0a 20 20 7d 0a 20  db->pErr);.  }. 
56d0: 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
56e0: 30 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  0, 0);.  return 
56f0: 7a 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  z;.}.#endif /* S
5700: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
5710: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72   */../*.** Retur
5720: 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  n the most recen
5730: 74 20 65 72 72 6f 72 20 63 6f 64 65 20 67 65 6e  t error code gen
5740: 65 72 61 74 65 64 20 62 79 20 61 6e 20 53 51 4c  erated by an SQL
5750: 69 74 65 20 72 6f 75 74 69 6e 65 2e 20 49 66 20  ite routine. If 
5760: 4e 55 4c 4c 20 69 73 0a 2a 2a 20 70 61 73 73 65  NULL is.** passe
5770: 64 20 74 6f 20 74 68 69 73 20 66 75 6e 63 74 69  d to this functi
5780: 6f 6e 2c 20 77 65 20 61 73 73 75 6d 65 20 61 20  on, we assume a 
5790: 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 65 64 20  malloc() failed 
57a0: 64 75 72 69 6e 67 20 73 71 6c 69 74 65 33 5f 6f  during sqlite3_o
57b0: 70 65 6e 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71  pen()..*/.int sq
57c0: 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 73 71  lite3_errcode(sq
57d0: 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 66  lite3 *db){.  if
57e0: 28 20 21 64 62 20 7c 7c 20 73 71 6c 69 74 65 33  ( !db || sqlite3
57f0: 4d 61 6c 6c 6f 63 46 61 69 6c 65 64 28 29 20 29  MallocFailed() )
5800: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  {.    return SQL
5810: 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 20  ITE_NOMEM;.  }. 
5820: 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
5830: 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b 0a 20  tyCheck(db) ){. 
5840: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
5850: 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 72  _MISUSE;.  }.  r
5860: 65 74 75 72 6e 20 64 62 2d 3e 65 72 72 43 6f 64  eturn db->errCod
5870: 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72 65 61  e;.}../*.** Crea
5880: 74 65 20 61 20 6e 65 77 20 63 6f 6c 6c 61 74 69  te a new collati
5890: 6e 67 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  ng function for 
58a0: 64 61 74 61 62 61 73 65 20 22 64 62 22 2e 20 20  database "db".  
58b0: 54 68 65 20 6e 61 6d 65 20 69 73 20 7a 4e 61 6d  The name is zNam
58c0: 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 65 6e 63  e.** and the enc
58d0: 6f 64 69 6e 67 20 69 73 20 65 6e 63 2e 0a 2a 2f  oding is enc..*/
58e0: 0a 73 74 61 74 69 63 20 69 6e 74 20 63 72 65 61  .static int crea
58f0: 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20 73  teCollation(.  s
5900: 71 6c 69 74 65 33 2a 20 64 62 2c 20 0a 20 20 63  qlite3* db, .  c
5910: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
5920: 2c 20 0a 20 20 69 6e 74 20 65 6e 63 2c 20 0a 20  , .  int enc, . 
5930: 20 76 6f 69 64 2a 20 70 43 74 78 2c 0a 20 20 69   void* pCtx,.  i
5940: 6e 74 28 2a 78 43 6f 6d 70 61 72 65 29 28 76 6f  nt(*xCompare)(vo
5950: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f  id*,int,const vo
5960: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f  id*,int,const vo
5970: 69 64 2a 29 0a 29 7b 0a 20 20 43 6f 6c 6c 53 65  id*).){.  CollSe
5980: 71 20 2a 70 43 6f 6c 6c 3b 0a 20 20 69 6e 74 20  q *pColl;.  int 
5990: 65 6e 63 32 3b 0a 20 20 0a 20 20 69 66 28 20 73  enc2;.  .  if( s
59a0: 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
59b0: 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74  k(db) ){.    ret
59c0: 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  urn SQLITE_MISUS
59d0: 45 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  E;.  }..  /* If 
59e0: 53 51 4c 49 54 45 5f 55 54 46 31 36 20 69 73 20  SQLITE_UTF16 is 
59f0: 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65  specified as the
5a00: 20 65 6e 63 6f 64 69 6e 67 20 74 79 70 65 2c 20   encoding type, 
5a10: 74 72 61 6e 73 66 6f 72 6d 20 74 68 69 73 0a 20  transform this. 
5a20: 20 2a 2a 20 74 6f 20 6f 6e 65 20 6f 66 20 53 51   ** to one of SQ
5a30: 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 6f 72 20  LITE_UTF16LE or 
5a40: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 75  SQLITE_UTF16BE u
5a50: 73 69 6e 67 20 74 68 65 0a 20 20 2a 2a 20 53 51  sing the.  ** SQ
5a60: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
5a70: 20 6d 61 63 72 6f 2e 20 53 51 4c 49 54 45 5f 55   macro. SQLITE_U
5a80: 54 46 31 36 20 69 73 20 6e 6f 74 20 75 73 65 64  TF16 is not used
5a90: 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 20 20 2a   internally..  *
5aa0: 2f 0a 20 20 65 6e 63 32 20 3d 20 65 6e 63 20 26  /.  enc2 = enc &
5ab0: 20 7e 53 51 4c 49 54 45 5f 55 54 46 31 36 5f 41   ~SQLITE_UTF16_A
5ac0: 4c 49 47 4e 45 44 3b 0a 20 20 69 66 28 20 65 6e  LIGNED;.  if( en
5ad0: 63 32 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  c2==SQLITE_UTF16
5ae0: 20 29 7b 0a 20 20 20 20 65 6e 63 32 20 3d 20 53   ){.    enc2 = S
5af0: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
5b00: 45 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28 65  E;.  }..  if( (e
5b10: 6e 63 32 26 7e 33 29 21 3d 30 20 29 7b 0a 20 20  nc2&~3)!=0 ){.  
5b20: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64    sqlite3Error(d
5b30: 62 2c 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2c  b, SQLITE_ERROR,
5b40: 20 22 75 6e 6b 6e 6f 77 6e 20 65 6e 63 6f 64 69   "unknown encodi
5b50: 6e 67 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  ng");.    return
5b60: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
5b70: 20 7d 0a 0a 20 20 2f 2a 20 43 68 65 63 6b 20 69   }..  /* Check i
5b80: 66 20 74 68 69 73 20 63 61 6c 6c 20 69 73 20 72  f this call is r
5b90: 65 6d 6f 76 69 6e 67 20 6f 72 20 72 65 70 6c 61  emoving or repla
5ba0: 63 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67  cing an existing
5bb0: 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a 20 20 2a 2a   collation .  **
5bc0: 20 73 65 71 75 65 6e 63 65 2e 20 49 66 20 73 6f   sequence. If so
5bd0: 2c 20 61 6e 64 20 74 68 65 72 65 20 61 72 65 20  , and there are 
5be0: 61 63 74 69 76 65 20 56 4d 73 2c 20 72 65 74 75  active VMs, retu
5bf0: 72 6e 20 62 75 73 79 2e 20 49 66 20 74 68 65 72  rn busy. If ther
5c00: 65 0a 20 20 2a 2a 20 61 72 65 20 6e 6f 20 61 63  e.  ** are no ac
5c10: 74 69 76 65 20 56 4d 73 2c 20 69 6e 76 61 6c 69  tive VMs, invali
5c20: 64 61 74 65 20 61 6e 79 20 70 72 65 2d 63 6f 6d  date any pre-com
5c30: 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73  piled statements
5c40: 2e 0a 20 20 2a 2f 0a 20 20 70 43 6f 6c 6c 20 3d  ..  */.  pColl =
5c50: 20 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c   sqlite3FindColl
5c60: 53 65 71 28 64 62 2c 20 28 75 38 29 65 6e 63 32  Seq(db, (u8)enc2
5c70: 2c 20 7a 4e 61 6d 65 2c 20 73 74 72 6c 65 6e 28  , zName, strlen(
5c80: 7a 4e 61 6d 65 29 2c 20 30 29 3b 0a 20 20 69 66  zName), 0);.  if
5c90: 28 20 70 43 6f 6c 6c 20 26 26 20 70 43 6f 6c 6c  ( pColl && pColl
5ca0: 2d 3e 78 43 6d 70 20 29 7b 0a 20 20 20 20 69 66  ->xCmp ){.    if
5cb0: 28 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65  ( db->activeVdbe
5cc0: 43 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  Cnt ){.      sql
5cd0: 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51  ite3Error(db, SQ
5ce0: 4c 49 54 45 5f 42 55 53 59 2c 20 0a 20 20 20 20  LITE_BUSY, .    
5cf0: 20 20 20 20 22 55 6e 61 62 6c 65 20 74 6f 20 64      "Unable to d
5d00: 65 6c 65 74 65 2f 6d 6f 64 69 66 79 20 63 6f 6c  elete/modify col
5d10: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
5d20: 64 75 65 20 74 6f 20 61 63 74 69 76 65 20 73 74  due to active st
5d30: 61 74 65 6d 65 6e 74 73 22 29 3b 0a 20 20 20 20  atements");.    
5d40: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
5d50: 42 55 53 59 3b 0a 20 20 20 20 7d 0a 20 20 20 20  BUSY;.    }.    
5d60: 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
5d70: 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
5d80: 64 62 29 3b 0a 20 20 7d 0a 0a 20 20 70 43 6f 6c  db);.  }..  pCol
5d90: 6c 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 43  l = sqlite3FindC
5da0: 6f 6c 6c 53 65 71 28 64 62 2c 20 28 75 38 29 65  ollSeq(db, (u8)e
5db0: 6e 63 32 2c 20 7a 4e 61 6d 65 2c 20 73 74 72 6c  nc2, zName, strl
5dc0: 65 6e 28 7a 4e 61 6d 65 29 2c 20 31 29 3b 0a 20  en(zName), 1);. 
5dd0: 20 69 66 28 20 70 43 6f 6c 6c 20 29 7b 0a 20 20   if( pColl ){.  
5de0: 20 20 70 43 6f 6c 6c 2d 3e 78 43 6d 70 20 3d 20    pColl->xCmp = 
5df0: 78 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 70 43  xCompare;.    pC
5e00: 6f 6c 6c 2d 3e 70 55 73 65 72 20 3d 20 70 43 74  oll->pUser = pCt
5e10: 78 3b 0a 20 20 20 20 70 43 6f 6c 6c 2d 3e 65 6e  x;.    pColl->en
5e20: 63 20 3d 20 65 6e 63 32 20 7c 20 28 65 6e 63 20  c = enc2 | (enc 
5e30: 26 20 53 51 4c 49 54 45 5f 55 54 46 31 36 5f 41  & SQLITE_UTF16_A
5e40: 4c 49 47 4e 45 44 29 3b 0a 20 20 7d 0a 20 20 73  LIGNED);.  }.  s
5e50: 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20  qlite3Error(db, 
5e60: 53 51 4c 49 54 45 5f 4f 4b 2c 20 30 29 3b 0a 20  SQLITE_OK, 0);. 
5e70: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
5e80: 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  K;.}.../*.** Thi
5e90: 73 20 72 6f 75 74 69 6e 65 20 64 6f 65 73 20 74  s routine does t
5ea0: 68 65 20 77 6f 72 6b 20 6f 66 20 6f 70 65 6e 69  he work of openi
5eb0: 6e 67 20 61 20 64 61 74 61 62 61 73 65 20 6f 6e  ng a database on
5ec0: 20 62 65 68 61 6c 66 20 6f 66 0a 2a 2a 20 73 71   behalf of.** sq
5ed0: 6c 69 74 65 33 5f 6f 70 65 6e 28 29 20 61 6e 64  lite3_open() and
5ee0: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28   sqlite3_open16(
5ef0: 29 2e 20 54 68 65 20 64 61 74 61 62 61 73 65 20  ). The database 
5f00: 66 69 6c 65 6e 61 6d 65 20 22 7a 46 69 6c 65 6e  filename "zFilen
5f10: 61 6d 65 22 20 20 0a 2a 2a 20 69 73 20 55 54 46  ame"  .** is UTF
5f20: 2d 38 20 65 6e 63 6f 64 65 64 2e 0a 2a 2f 0a 73  -8 encoded..*/.s
5f30: 74 61 74 69 63 20 69 6e 74 20 6f 70 65 6e 44 61  tatic int openDa
5f40: 74 61 62 61 73 65 28 0a 20 20 63 6f 6e 73 74 20  tabase(.  const 
5f50: 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c  char *zFilename,
5f60: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 66 69 6c   /* Database fil
5f70: 65 6e 61 6d 65 20 55 54 46 2d 38 20 65 6e 63 6f  ename UTF-8 enco
5f80: 64 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ded */.  sqlite3
5f90: 20 2a 2a 70 70 44 62 20 20 20 20 20 20 20 20 20   **ppDb         
5fa0: 2f 2a 20 4f 55 54 3a 20 52 65 74 75 72 6e 65 64  /* OUT: Returned
5fb0: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
5fc0: 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
5fd0: 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a   *db;.  int rc;.
5fe0: 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c    CollSeq *pColl
5ff0: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 21 73 71  ;..  assert( !sq
6000: 6c 69 74 65 33 4d 61 6c 6c 6f 63 46 61 69 6c 65  lite3MallocFaile
6010: 64 28 29 20 29 3b 0a 0a 20 20 2f 2a 20 41 6c 6c  d() );..  /* All
6020: 6f 63 61 74 65 20 74 68 65 20 73 71 6c 69 74 65  ocate the sqlite
6030: 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 20   data structure 
6040: 2a 2f 0a 20 20 64 62 20 3d 20 73 71 6c 69 74 65  */.  db = sqlite
6050: 4d 61 6c 6c 6f 63 28 20 73 69 7a 65 6f 66 28 73  Malloc( sizeof(s
6060: 71 6c 69 74 65 33 29 20 29 3b 0a 20 20 69 66 28  qlite3) );.  if(
6070: 20 64 62 3d 3d 30 20 29 20 67 6f 74 6f 20 6f 70   db==0 ) goto op
6080: 65 6e 64 62 5f 6f 75 74 3b 0a 20 20 64 62 2d 3e  endb_out;.  db->
6090: 70 72 69 6f 72 4e 65 77 52 6f 77 69 64 20 3d 20  priorNewRowid = 
60a0: 30 3b 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d  0;.  db->magic =
60b0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55   SQLITE_MAGIC_BU
60c0: 53 59 3b 0a 20 20 64 62 2d 3e 6e 44 62 20 3d 20  SY;.  db->nDb = 
60d0: 32 3b 0a 20 20 64 62 2d 3e 61 44 62 20 3d 20 64  2;.  db->aDb = d
60e0: 62 2d 3e 61 44 62 53 74 61 74 69 63 3b 0a 20 20  b->aDbStatic;.  
60f0: 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
6100: 20 31 3b 0a 20 20 64 62 2d 3e 66 6c 61 67 73 20   1;.  db->flags 
6110: 7c 3d 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43  |= SQLITE_ShortC
6120: 6f 6c 4e 61 6d 65 73 0a 23 69 66 20 53 51 4c 49  olNames.#if SQLI
6130: 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f  TE_DEFAULT_FILE_
6140: 46 4f 52 4d 41 54 3c 34 0a 20 20 20 20 20 20 20  FORMAT<4.       
6150: 20 20 20 20 20 20 20 20 20 20 7c 20 53 51 4c 49            | SQLI
6160: 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74  TE_LegacyFileFmt
6170: 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 3b 0a  .#endif.      ;.
6180: 20 20 73 71 6c 69 74 65 33 48 61 73 68 49 6e 69    sqlite3HashIni
6190: 74 28 26 64 62 2d 3e 61 46 75 6e 63 2c 20 53 51  t(&db->aFunc, SQ
61a0: 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47  LITE_HASH_STRING
61b0: 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 48  , 0);.  sqlite3H
61c0: 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61 43 6f  ashInit(&db->aCo
61d0: 6c 6c 53 65 71 2c 20 53 51 4c 49 54 45 5f 48 41  llSeq, SQLITE_HA
61e0: 53 48 5f 53 54 52 49 4e 47 2c 20 30 29 3b 0a 23  SH_STRING, 0);.#
61f0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
6200: 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
6210: 20 20 73 71 6c 69 74 65 33 48 61 73 68 49 6e 69    sqlite3HashIni
6220: 74 28 26 64 62 2d 3e 61 4d 6f 64 75 6c 65 2c 20  t(&db->aModule, 
6230: 53 51 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49  SQLITE_HASH_STRI
6240: 4e 47 2c 20 30 29 3b 0a 23 65 6e 64 69 66 0a 0a  NG, 0);.#endif..
6250: 20 20 2f 2a 20 41 64 64 20 74 68 65 20 64 65 66    /* Add the def
6260: 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  ault collation s
6270: 65 71 75 65 6e 63 65 20 42 49 4e 41 52 59 2e 20  equence BINARY. 
6280: 42 49 4e 41 52 59 20 77 6f 72 6b 73 20 66 6f 72  BINARY works for
6290: 20 62 6f 74 68 20 55 54 46 2d 38 0a 20 20 2a 2a   both UTF-8.  **
62a0: 20 61 6e 64 20 55 54 46 2d 31 36 2c 20 73 6f 20   and UTF-16, so 
62b0: 61 64 64 20 61 20 76 65 72 73 69 6f 6e 20 66 6f  add a version fo
62c0: 72 20 65 61 63 68 20 74 6f 20 61 76 6f 69 64 20  r each to avoid 
62d0: 61 6e 79 20 75 6e 6e 65 63 65 73 73 61 72 79 0a  any unnecessary.
62e0: 20 20 2a 2a 20 63 6f 6e 76 65 72 73 69 6f 6e 73    ** conversions
62f0: 2e 20 54 68 65 20 6f 6e 6c 79 20 65 72 72 6f 72  . The only error
6300: 20 74 68 61 74 20 63 61 6e 20 6f 63 63 75 72 20   that can occur 
6310: 68 65 72 65 20 69 73 20 61 20 6d 61 6c 6c 6f 63  here is a malloc
6320: 28 29 20 66 61 69 6c 75 72 65 2e 0a 20 20 2a 2f  () failure..  */
6330: 0a 20 20 69 66 28 20 63 72 65 61 74 65 43 6f 6c  .  if( createCol
6340: 6c 61 74 69 6f 6e 28 64 62 2c 20 22 42 49 4e 41  lation(db, "BINA
6350: 52 59 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  RY", SQLITE_UTF8
6360: 2c 20 30 2c 20 62 69 6e 43 6f 6c 6c 46 75 6e 63  , 0, binCollFunc
6370: 29 20 7c 7c 0a 20 20 20 20 20 20 63 72 65 61 74  ) ||.      creat
6380: 65 43 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22  eCollation(db, "
6390: 42 49 4e 41 52 59 22 2c 20 53 51 4c 49 54 45 5f  BINARY", SQLITE_
63a0: 55 54 46 31 36 42 45 2c 20 30 2c 20 62 69 6e 43  UTF16BE, 0, binC
63b0: 6f 6c 6c 46 75 6e 63 29 20 7c 7c 0a 20 20 20 20  ollFunc) ||.    
63c0: 20 20 63 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f    createCollatio
63d0: 6e 28 64 62 2c 20 22 42 49 4e 41 52 59 22 2c 20  n(db, "BINARY", 
63e0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 2c 20  SQLITE_UTF16LE, 
63f0: 30 2c 20 62 69 6e 43 6f 6c 6c 46 75 6e 63 29 20  0, binCollFunc) 
6400: 7c 7c 0a 20 20 20 20 20 20 28 64 62 2d 3e 70 44  ||.      (db->pD
6410: 66 6c 74 43 6f 6c 6c 20 3d 20 73 71 6c 69 74 65  fltColl = sqlite
6420: 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 64 62 2c  3FindCollSeq(db,
6430: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 22 42   SQLITE_UTF8, "B
6440: 49 4e 41 52 59 22 2c 20 36 2c 20 30 29 29 3d 3d  INARY", 6, 0))==
6450: 30 20 0a 20 20 29 7b 0a 20 20 20 20 61 73 73 65  0 .  ){.    asse
6460: 72 74 28 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  rt( sqlite3Mallo
6470: 63 46 61 69 6c 65 64 28 29 20 29 3b 0a 20 20 20  cFailed() );.   
6480: 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c   db->magic = SQL
6490: 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44  ITE_MAGIC_CLOSED
64a0: 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 64  ;.    goto opend
64b0: 62 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  b_out;.  }..  /*
64c0: 20 41 6c 73 6f 20 61 64 64 20 61 20 55 54 46 2d   Also add a UTF-
64d0: 38 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69  8 case-insensiti
64e0: 76 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  ve collation seq
64f0: 75 65 6e 63 65 2e 20 2a 2f 0a 20 20 63 72 65 61  uence. */.  crea
6500: 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20  teCollation(db, 
6510: 22 4e 4f 43 41 53 45 22 2c 20 53 51 4c 49 54 45  "NOCASE", SQLITE
6520: 5f 55 54 46 38 2c 20 30 2c 20 6e 6f 63 61 73 65  _UTF8, 0, nocase
6530: 43 6f 6c 6c 61 74 69 6e 67 46 75 6e 63 29 3b 0a  CollatingFunc);.
6540: 0a 20 20 2f 2a 20 53 65 74 20 66 6c 61 67 73 20  .  /* Set flags 
6550: 6f 6e 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20  on the built-in 
6560: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
6570: 63 65 73 20 2a 2f 0a 20 20 64 62 2d 3e 70 44 66  ces */.  db->pDf
6580: 6c 74 43 6f 6c 6c 2d 3e 74 79 70 65 20 3d 20 53  ltColl->type = S
6590: 51 4c 49 54 45 5f 43 4f 4c 4c 5f 42 49 4e 41 52  QLITE_COLL_BINAR
65a0: 59 3b 0a 20 20 70 43 6f 6c 6c 20 3d 20 73 71 6c  Y;.  pColl = sql
65b0: 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28  ite3FindCollSeq(
65c0: 64 62 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  db, SQLITE_UTF8,
65d0: 20 22 4e 4f 43 41 53 45 22 2c 20 36 2c 20 30 29   "NOCASE", 6, 0)
65e0: 3b 0a 20 20 69 66 28 20 70 43 6f 6c 6c 20 29 7b  ;.  if( pColl ){
65f0: 0a 20 20 20 20 70 43 6f 6c 6c 2d 3e 74 79 70 65  .    pColl->type
6600: 20 3d 20 53 51 4c 49 54 45 5f 43 4f 4c 4c 5f 4e   = SQLITE_COLL_N
6610: 4f 43 41 53 45 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  OCASE;.  }..  /*
6620: 20 4f 70 65 6e 20 74 68 65 20 62 61 63 6b 65 6e   Open the backen
6630: 64 20 64 61 74 61 62 61 73 65 20 64 72 69 76 65  d database drive
6640: 72 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  r */.  rc = sqli
6650: 74 65 33 42 74 72 65 65 46 61 63 74 6f 72 79 28  te3BtreeFactory(
6660: 64 62 2c 20 7a 46 69 6c 65 6e 61 6d 65 2c 20 30  db, zFilename, 0
6670: 2c 20 4d 41 58 5f 50 41 47 45 53 2c 20 26 64 62  , MAX_PAGES, &db
6680: 2d 3e 61 44 62 5b 30 5d 2e 70 42 74 29 3b 0a 20  ->aDb[0].pBt);. 
6690: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
66a0: 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  OK ){.    sqlite
66b0: 33 45 72 72 6f 72 28 64 62 2c 20 72 63 2c 20 30  3Error(db, rc, 0
66c0: 29 3b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63  );.    db->magic
66d0: 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f   = SQLITE_MAGIC_
66e0: 43 4c 4f 53 45 44 3b 0a 20 20 20 20 67 6f 74 6f  CLOSED;.    goto
66f0: 20 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a 20 20 7d   opendb_out;.  }
6700: 0a 20 20 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 53  .  db->aDb[0].pS
6710: 63 68 65 6d 61 20 3d 20 73 71 6c 69 74 65 33 53  chema = sqlite3S
6720: 63 68 65 6d 61 47 65 74 28 64 62 2d 3e 61 44 62  chemaGet(db->aDb
6730: 5b 30 5d 2e 70 42 74 29 3b 0a 20 20 64 62 2d 3e  [0].pBt);.  db->
6740: 61 44 62 5b 31 5d 2e 70 53 63 68 65 6d 61 20 3d  aDb[1].pSchema =
6750: 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65   sqlite3SchemaGe
6760: 74 28 30 29 3b 0a 0a 0a 20 20 2f 2a 20 54 68 65  t(0);...  /* The
6770: 20 64 65 66 61 75 6c 74 20 73 61 66 65 74 79 5f   default safety_
6780: 6c 65 76 65 6c 20 66 6f 72 20 74 68 65 20 6d 61  level for the ma
6790: 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 27  in database is '
67a0: 66 75 6c 6c 27 3b 20 66 6f 72 20 74 68 65 20 74  full'; for the t
67b0: 65 6d 70 0a 20 20 2a 2a 20 64 61 74 61 62 61 73  emp.  ** databas
67c0: 65 20 69 74 20 69 73 20 27 4e 4f 4e 45 27 2e 20  e it is 'NONE'. 
67d0: 54 68 69 73 20 6d 61 74 63 68 65 73 20 74 68 65  This matches the
67e0: 20 70 61 67 65 72 20 6c 61 79 65 72 20 64 65 66   pager layer def
67f0: 61 75 6c 74 73 2e 20 20 0a 20 20 2a 2f 0a 20 20  aults.  .  */.  
6800: 64 62 2d 3e 61 44 62 5b 30 5d 2e 7a 4e 61 6d 65  db->aDb[0].zName
6810: 20 3d 20 22 6d 61 69 6e 22 3b 0a 20 20 64 62 2d   = "main";.  db-
6820: 3e 61 44 62 5b 30 5d 2e 73 61 66 65 74 79 5f 6c  >aDb[0].safety_l
6830: 65 76 65 6c 20 3d 20 33 3b 0a 23 69 66 6e 64 65  evel = 3;.#ifnde
6840: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45  f SQLITE_OMIT_TE
6850: 4d 50 44 42 0a 20 20 64 62 2d 3e 61 44 62 5b 31  MPDB.  db->aDb[1
6860: 5d 2e 7a 4e 61 6d 65 20 3d 20 22 74 65 6d 70 22  ].zName = "temp"
6870: 3b 0a 20 20 64 62 2d 3e 61 44 62 5b 31 5d 2e 73  ;.  db->aDb[1].s
6880: 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 31 3b  afety_level = 1;
6890: 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 52 65  .#endif..  /* Re
68a0: 67 69 73 74 65 72 20 61 6c 6c 20 62 75 69 6c 74  gister all built
68b0: 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 2c 20 62  -in functions, b
68c0: 75 74 20 64 6f 20 6e 6f 74 20 61 74 74 65 6d 70  ut do not attemp
68d0: 74 20 74 6f 20 72 65 61 64 20 74 68 65 0a 20 20  t to read the.  
68e0: 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ** database sche
68f0: 6d 61 20 79 65 74 2e 20 54 68 69 73 20 69 73 20  ma yet. This is 
6900: 64 65 6c 61 79 65 64 20 75 6e 74 69 6c 20 74 68  delayed until th
6910: 65 20 66 69 72 73 74 20 74 69 6d 65 20 74 68 65  e first time the
6920: 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69   database.  ** i
6930: 73 20 61 63 63 65 73 73 65 64 2e 0a 20 20 2a 2f  s accessed..  */
6940: 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 4d  .  if( !sqlite3M
6950: 61 6c 6c 6f 63 46 61 69 6c 65 64 28 29 20 29 7b  allocFailed() ){
6960: 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 67 69  .    sqlite3Regi
6970: 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74  sterBuiltinFunct
6980: 69 6f 6e 73 28 64 62 29 3b 0a 20 20 20 20 73 71  ions(db);.    sq
6990: 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53  lite3Error(db, S
69a0: 51 4c 49 54 45 5f 4f 4b 2c 20 30 29 3b 0a 20 20  QLITE_OK, 0);.  
69b0: 7d 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20  }.  db->magic = 
69c0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45  SQLITE_MAGIC_OPE
69d0: 4e 3b 0a 0a 6f 70 65 6e 64 62 5f 6f 75 74 3a 0a  N;..opendb_out:.
69e0: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4e 4f 4d    if( SQLITE_NOM
69f0: 45 4d 3d 3d 28 72 63 20 3d 20 73 71 6c 69 74 65  EM==(rc = sqlite
6a00: 33 5f 65 72 72 63 6f 64 65 28 64 62 29 29 20 29  3_errcode(db)) )
6a10: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c  {.    sqlite3_cl
6a20: 6f 73 65 28 64 62 29 3b 0a 20 20 20 20 64 62 20  ose(db);.    db 
6a30: 3d 20 30 3b 0a 20 20 7d 0a 20 20 2a 70 70 44 62  = 0;.  }.  *ppDb
6a40: 20 3d 20 64 62 3b 0a 20 20 72 65 74 75 72 6e 20   = db;.  return 
6a50: 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 30  sqlite3ApiExit(0
6a60: 2c 20 72 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  , rc);.}../*.** 
6a70: 4f 70 65 6e 20 61 20 6e 65 77 20 64 61 74 61 62  Open a new datab
6a80: 61 73 65 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69  ase handle..*/.i
6a90: 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28  nt sqlite3_open(
6aa0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
6ab0: 46 69 6c 65 6e 61 6d 65 2c 20 0a 20 20 73 71 6c  Filename, .  sql
6ac0: 69 74 65 33 20 2a 2a 70 70 44 62 20 0a 29 7b 0a  ite3 **ppDb .){.
6ad0: 20 20 72 65 74 75 72 6e 20 6f 70 65 6e 44 61 74    return openDat
6ae0: 61 62 61 73 65 28 7a 46 69 6c 65 6e 61 6d 65 2c  abase(zFilename,
6af0: 20 70 70 44 62 29 3b 0a 7d 0a 0a 23 69 66 6e 64   ppDb);.}..#ifnd
6b00: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
6b10: 54 46 31 36 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e 20  TF16./*.** Open 
6b20: 61 20 6e 65 77 20 64 61 74 61 62 61 73 65 20 68  a new database h
6b30: 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71  andle..*/.int sq
6b40: 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28 0a 20 20  lite3_open16(.  
6b50: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 46 69 6c  const void *zFil
6b60: 65 6e 61 6d 65 2c 20 0a 20 20 73 71 6c 69 74 65  ename, .  sqlite
6b70: 33 20 2a 2a 70 70 44 62 0a 29 7b 0a 20 20 63 68  3 **ppDb.){.  ch
6b80: 61 72 20 63 6f 6e 73 74 20 2a 7a 46 69 6c 65 6e  ar const *zFilen
6b90: 61 6d 65 38 3b 20 20 20 2f 2a 20 7a 46 69 6c 65  ame8;   /* zFile
6ba0: 6e 61 6d 65 20 65 6e 63 6f 64 65 64 20 69 6e 20  name encoded in 
6bb0: 55 54 46 2d 38 20 69 6e 73 74 65 61 64 20 6f 66  UTF-8 instead of
6bc0: 20 55 54 46 2d 31 36 20 2a 2f 0a 20 20 69 6e 74   UTF-16 */.  int
6bd0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
6be0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
6bf0: 20 2a 70 56 61 6c 3b 0a 0a 20 20 61 73 73 65 72   *pVal;..  asser
6c00: 74 28 20 7a 46 69 6c 65 6e 61 6d 65 20 29 3b 0a  t( zFilename );.
6c10: 20 20 61 73 73 65 72 74 28 20 70 70 44 62 20 29    assert( ppDb )
6c20: 3b 0a 20 20 2a 70 70 44 62 20 3d 20 30 3b 0a 20  ;.  *ppDb = 0;. 
6c30: 20 70 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 56   pVal = sqlite3V
6c40: 61 6c 75 65 4e 65 77 28 29 3b 0a 20 20 73 71 6c  alueNew();.  sql
6c50: 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28  ite3ValueSetStr(
6c60: 70 56 61 6c 2c 20 2d 31 2c 20 7a 46 69 6c 65 6e  pVal, -1, zFilen
6c70: 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  ame, SQLITE_UTF1
6c80: 36 4e 41 54 49 56 45 2c 20 53 51 4c 49 54 45 5f  6NATIVE, SQLITE_
6c90: 53 54 41 54 49 43 29 3b 0a 20 20 7a 46 69 6c 65  STATIC);.  zFile
6ca0: 6e 61 6d 65 38 20 3d 20 73 71 6c 69 74 65 33 56  name8 = sqlite3V
6cb0: 61 6c 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53  alueText(pVal, S
6cc0: 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 69  QLITE_UTF8);.  i
6cd0: 66 28 20 7a 46 69 6c 65 6e 61 6d 65 38 20 29 7b  f( zFilename8 ){
6ce0: 0a 20 20 20 20 72 63 20 3d 20 6f 70 65 6e 44 61  .    rc = openDa
6cf0: 74 61 62 61 73 65 28 7a 46 69 6c 65 6e 61 6d 65  tabase(zFilename
6d00: 38 2c 20 70 70 44 62 29 3b 0a 20 20 20 20 69 66  8, ppDb);.    if
6d10: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
6d20: 26 26 20 2a 70 70 44 62 20 29 7b 0a 20 20 20 20  && *ppDb ){.    
6d30: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65    rc = sqlite3_e
6d40: 78 65 63 28 2a 70 70 44 62 2c 20 22 50 52 41 47  xec(*ppDb, "PRAG
6d50: 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20 27 55  MA encoding = 'U
6d60: 54 46 2d 31 36 27 22 2c 20 30 2c 20 30 2c 20 30  TF-16'", 0, 0, 0
6d70: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
6d80: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
6d90: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c        sqlite3_cl
6da0: 6f 73 65 28 2a 70 70 44 62 29 3b 0a 20 20 20 20  ose(*ppDb);.    
6db0: 20 20 20 20 2a 70 70 44 62 20 3d 20 30 3b 0a 20      *ppDb = 0;. 
6dc0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
6dd0: 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  .  sqlite3ValueF
6de0: 72 65 65 28 70 56 61 6c 29 3b 0a 0a 20 20 72 65  ree(pVal);..  re
6df0: 74 75 72 6e 20 73 71 6c 69 74 65 33 41 70 69 45  turn sqlite3ApiE
6e00: 78 69 74 28 30 2c 20 72 63 29 3b 0a 7d 0a 23 65  xit(0, rc);.}.#e
6e10: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
6e20: 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 2f 2a  MIT_UTF16 */../*
6e30: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
6e40: 67 20 72 6f 75 74 69 6e 65 20 64 65 73 74 72 6f  g routine destro
6e50: 79 73 20 61 20 76 69 72 74 75 61 6c 20 6d 61 63  ys a virtual mac
6e60: 68 69 6e 65 20 74 68 61 74 20 69 73 20 63 72 65  hine that is cre
6e70: 61 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 73  ated by.** the s
6e80: 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 28 29  qlite3_compile()
6e90: 20 72 6f 75 74 69 6e 65 2e 20 54 68 65 20 69 6e   routine. The in
6ea0: 74 65 67 65 72 20 72 65 74 75 72 6e 65 64 20 69  teger returned i
6eb0: 73 20 61 6e 20 53 51 4c 49 54 45 5f 0a 2a 2a 20  s an SQLITE_.** 
6ec0: 73 75 63 63 65 73 73 2f 66 61 69 6c 75 72 65 20  success/failure 
6ed0: 63 6f 64 65 20 74 68 61 74 20 64 65 73 63 72 69  code that descri
6ee0: 62 65 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f  bes the result o
6ef0: 66 20 65 78 65 63 75 74 69 6e 67 20 74 68 65 20  f executing the 
6f00: 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69  virtual.** machi
6f10: 6e 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72  ne..**.** This r
6f20: 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68 65 20  outine sets the 
6f30: 65 72 72 6f 72 20 63 6f 64 65 20 61 6e 64 20 73  error code and s
6f40: 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62  tring returned b
6f50: 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 65 72 72  y.** sqlite3_err
6f60: 63 6f 64 65 28 29 2c 20 73 71 6c 69 74 65 33 5f  code(), sqlite3_
6f70: 65 72 72 6d 73 67 28 29 20 61 6e 64 20 73 71 6c  errmsg() and sql
6f80: 69 74 65 33 5f 65 72 72 6d 73 67 31 36 28 29 2e  ite3_errmsg16().
6f90: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
6fa0: 66 69 6e 61 6c 69 7a 65 28 73 71 6c 69 74 65 33  finalize(sqlite3
6fb0: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20  _stmt *pStmt){. 
6fc0: 20 69 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 70   int rc;.  if( p
6fd0: 53 74 6d 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72  Stmt==0 ){.    r
6fe0: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
6ff0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d   }else{.    rc =
7000: 20 73 71 6c 69 74 65 33 56 64 62 65 46 69 6e 61   sqlite3VdbeFina
7010: 6c 69 7a 65 28 28 56 64 62 65 2a 29 70 53 74 6d  lize((Vdbe*)pStm
7020: 74 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  t);.  }.  return
7030: 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65   rc;.}../*.** Te
7040: 72 6d 69 6e 61 74 65 20 74 68 65 20 63 75 72 72  rminate the curr
7050: 65 6e 74 20 65 78 65 63 75 74 69 6f 6e 20 6f 66  ent execution of
7060: 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e   an SQL statemen
7070: 74 20 61 6e 64 20 72 65 73 65 74 20 69 74 0a 2a  t and reset it.*
7080: 2a 20 62 61 63 6b 20 74 6f 20 69 74 73 20 73 74  * back to its st
7090: 61 72 74 69 6e 67 20 73 74 61 74 65 20 73 6f 20  arting state so 
70a0: 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72  that it can be r
70b0: 65 75 73 65 64 2e 20 41 20 73 75 63 63 65 73 73  eused. A success
70c0: 20 63 6f 64 65 20 66 72 6f 6d 0a 2a 2a 20 74 68   code from.** th
70d0: 65 20 70 72 69 6f 72 20 65 78 65 63 75 74 69 6f  e prior executio
70e0: 6e 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a  n is returned..*
70f0: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
7100: 65 20 73 65 74 73 20 74 68 65 20 65 72 72 6f 72  e sets the error
7110: 20 63 6f 64 65 20 61 6e 64 20 73 74 72 69 6e 67   code and string
7120: 20 72 65 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20   returned by.** 
7130: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28  sqlite3_errcode(
7140: 29 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ), sqlite3_errms
7150: 67 28 29 20 61 6e 64 20 73 71 6c 69 74 65 33 5f  g() and sqlite3_
7160: 65 72 72 6d 73 67 31 36 28 29 2e 0a 2a 2f 0a 69  errmsg16()..*/.i
7170: 6e 74 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74  nt sqlite3_reset
7180: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
7190: 53 74 6d 74 29 7b 0a 20 20 69 6e 74 20 72 63 3b  Stmt){.  int rc;
71a0: 0a 20 20 69 66 28 20 70 53 74 6d 74 3d 3d 30 20  .  if( pStmt==0 
71b0: 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
71c0: 54 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73 65 7b 0a  TE_OK;.  }else{.
71d0: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
71e0: 56 64 62 65 52 65 73 65 74 28 28 56 64 62 65 2a  VdbeReset((Vdbe*
71f0: 29 70 53 74 6d 74 29 3b 0a 20 20 20 20 73 71 6c  )pStmt);.    sql
7200: 69 74 65 33 56 64 62 65 4d 61 6b 65 52 65 61 64  ite3VdbeMakeRead
7210: 79 28 28 56 64 62 65 2a 29 70 53 74 6d 74 2c 20  y((Vdbe*)pStmt, 
7220: 2d 31 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20  -1, 0, 0, 0);.  
7230: 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  }.  return rc;.}
7240: 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  ../*.** Register
7250: 20 61 20 6e 65 77 20 63 6f 6c 6c 61 74 69 6f 6e   a new collation
7260: 20 73 65 71 75 65 6e 63 65 20 77 69 74 68 20 74   sequence with t
7270: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
7280: 6c 65 20 64 62 2e 0a 2a 2f 0a 69 6e 74 20 73 71  le db..*/.int sq
7290: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c  lite3_create_col
72a0: 6c 61 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65  lation(.  sqlite
72b0: 33 2a 20 64 62 2c 20 0a 20 20 63 6f 6e 73 74 20  3* db, .  const 
72c0: 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 0a 20 20  char *zName, .  
72d0: 69 6e 74 20 65 6e 63 2c 20 0a 20 20 76 6f 69 64  int enc, .  void
72e0: 2a 20 70 43 74 78 2c 0a 20 20 69 6e 74 28 2a 78  * pCtx,.  int(*x
72f0: 43 6f 6d 70 61 72 65 29 28 76 6f 69 64 2a 2c 69  Compare)(void*,i
7300: 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 69  nt,const void*,i
7310: 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 0a  nt,const void*).
7320: 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 61  ){.  int rc;.  a
7330: 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 4d  ssert( !sqlite3M
7340: 61 6c 6c 6f 63 46 61 69 6c 65 64 28 29 20 29 3b  allocFailed() );
7350: 0a 20 20 72 63 20 3d 20 63 72 65 61 74 65 43 6f  .  rc = createCo
7360: 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 7a 4e 61 6d  llation(db, zNam
7370: 65 2c 20 65 6e 63 2c 20 70 43 74 78 2c 20 78 43  e, enc, pCtx, xC
7380: 6f 6d 70 61 72 65 29 3b 0a 20 20 72 65 74 75 72  ompare);.  retur
7390: 6e 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74  n sqlite3ApiExit
73a0: 28 64 62 2c 20 72 63 29 3b 0a 7d 0a 0a 23 69 66  (db, rc);.}..#if
73b0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
73c0: 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20 52 65 67  _UTF16./*.** Reg
73d0: 69 73 74 65 72 20 61 20 6e 65 77 20 63 6f 6c 6c  ister a new coll
73e0: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77  ation sequence w
73f0: 69 74 68 20 74 68 65 20 64 61 74 61 62 61 73 65  ith the database
7400: 20 68 61 6e 64 6c 65 20 64 62 2e 0a 2a 2f 0a 69   handle db..*/.i
7410: 6e 74 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  nt sqlite3_creat
7420: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 31 36 28 0a 20  e_collation16(. 
7430: 20 73 71 6c 69 74 65 33 2a 20 64 62 2c 20 0a 20   sqlite3* db, . 
7440: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
7450: 6d 65 2c 20 0a 20 20 69 6e 74 20 65 6e 63 2c 20  me, .  int enc, 
7460: 0a 20 20 76 6f 69 64 2a 20 70 43 74 78 2c 0a 20  .  void* pCtx,. 
7470: 20 69 6e 74 28 2a 78 43 6f 6d 70 61 72 65 29 28   int(*xCompare)(
7480: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
7490: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
74a0: 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 69 6e 74 20  void*).){.  int 
74b0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
74c0: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 38 3b 20    char *zName8; 
74d0: 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69  .  assert( !sqli
74e0: 74 65 33 4d 61 6c 6c 6f 63 46 61 69 6c 65 64 28  te3MallocFailed(
74f0: 29 20 29 3b 0a 20 20 7a 4e 61 6d 65 38 20 3d 20  ) );.  zName8 = 
7500: 73 71 6c 69 74 65 33 75 74 66 31 36 74 6f 38 28  sqlite3utf16to8(
7510: 7a 4e 61 6d 65 2c 20 2d 31 29 3b 0a 20 20 69 66  zName, -1);.  if
7520: 28 20 7a 4e 61 6d 65 38 20 29 7b 0a 20 20 20 20  ( zName8 ){.    
7530: 72 63 20 3d 20 63 72 65 61 74 65 43 6f 6c 6c 61  rc = createColla
7540: 74 69 6f 6e 28 64 62 2c 20 7a 4e 61 6d 65 38 2c  tion(db, zName8,
7550: 20 65 6e 63 2c 20 70 43 74 78 2c 20 78 43 6f 6d   enc, pCtx, xCom
7560: 70 61 72 65 29 3b 0a 20 20 20 20 73 71 6c 69 74  pare);.    sqlit
7570: 65 46 72 65 65 28 7a 4e 61 6d 65 38 29 3b 0a 20  eFree(zName8);. 
7580: 20 7d 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69   }.  return sqli
7590: 74 65 33 41 70 69 45 78 69 74 28 64 62 2c 20 72  te3ApiExit(db, r
75a0: 63 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  c);.}.#endif /* 
75b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
75c0: 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69  6 */../*.** Regi
75d0: 73 74 65 72 20 61 20 63 6f 6c 6c 61 74 69 6f 6e  ster a collation
75e0: 20 73 65 71 75 65 6e 63 65 20 66 61 63 74 6f 72   sequence factor
75f0: 79 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68 20  y callback with 
7600: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
7610: 64 6c 65 0a 2a 2a 20 64 62 2e 20 52 65 70 6c 61  dle.** db. Repla
7620: 63 65 20 61 6e 79 20 70 72 65 76 69 6f 75 73 6c  ce any previousl
7630: 79 20 69 6e 73 74 61 6c 6c 65 64 20 63 6f 6c 6c  y installed coll
7640: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66  ation sequence f
7650: 61 63 74 6f 72 79 2e 0a 2a 2f 0a 69 6e 74 20 73  actory..*/.int s
7660: 71 6c 69 74 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e  qlite3_collation
7670: 5f 6e 65 65 64 65 64 28 0a 20 20 73 71 6c 69 74  _needed(.  sqlit
7680: 65 33 20 2a 64 62 2c 20 0a 20 20 76 6f 69 64 20  e3 *db, .  void 
7690: 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 2c  *pCollNeededArg,
76a0: 20 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e   .  void(*xCollN
76b0: 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c  eeded)(void*,sql
76c0: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
76d0: 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 0a  ep,const char*).
76e0: 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ){.  if( sqlite3
76f0: 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29 20  SafetyCheck(db) 
7700: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
7710: 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d  LITE_MISUSE;.  }
7720: 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64  .  db->xCollNeed
7730: 65 64 20 3d 20 78 43 6f 6c 6c 4e 65 65 64 65 64  ed = xCollNeeded
7740: 3b 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65  ;.  db->xCollNee
7750: 64 65 64 31 36 20 3d 20 30 3b 0a 20 20 64 62 2d  ded16 = 0;.  db-
7760: 3e 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 20  >pCollNeededArg 
7770: 3d 20 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67  = pCollNeededArg
7780: 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ;.  return SQLIT
7790: 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  E_OK;.}..#ifndef
77a0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
77b0: 31 36 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65  16./*.** Registe
77c0: 72 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  r a collation se
77d0: 71 75 65 6e 63 65 20 66 61 63 74 6f 72 79 20 63  quence factory c
77e0: 61 6c 6c 62 61 63 6b 20 77 69 74 68 20 74 68 65  allback with the
77f0: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
7800: 0a 2a 2a 20 64 62 2e 20 52 65 70 6c 61 63 65 20  .** db. Replace 
7810: 61 6e 79 20 70 72 65 76 69 6f 75 73 6c 79 20 69  any previously i
7820: 6e 73 74 61 6c 6c 65 64 20 63 6f 6c 6c 61 74 69  nstalled collati
7830: 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 61 63 74  on sequence fact
7840: 6f 72 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ory..*/.int sqli
7850: 74 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 6e 65  te3_collation_ne
7860: 65 64 65 64 31 36 28 0a 20 20 73 71 6c 69 74 65  eded16(.  sqlite
7870: 33 20 2a 64 62 2c 20 0a 20 20 76 6f 69 64 20 2a  3 *db, .  void *
7880: 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 2c 20  pCollNeededArg, 
7890: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
78a0: 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71  eded16)(void*,sq
78b0: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
78c0: 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29  Rep,const void*)
78d0: 0a 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  .){.  if( sqlite
78e0: 33 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29  3SafetyCheck(db)
78f0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
7900: 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20  QLITE_MISUSE;.  
7910: 7d 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65  }.  db->xCollNee
7920: 64 65 64 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 78  ded = 0;.  db->x
7930: 43 6f 6c 6c 4e 65 65 64 65 64 31 36 20 3d 20 78  CollNeeded16 = x
7940: 43 6f 6c 6c 4e 65 65 64 65 64 31 36 3b 0a 20 20  CollNeeded16;.  
7950: 64 62 2d 3e 70 43 6f 6c 6c 4e 65 65 64 65 64 41  db->pCollNeededA
7960: 72 67 20 3d 20 70 43 6f 6c 6c 4e 65 65 64 65 64  rg = pCollNeeded
7970: 41 72 67 3b 0a 20 20 72 65 74 75 72 6e 20 53 51  Arg;.  return SQ
7980: 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69  LITE_OK;.}.#endi
7990: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
79a0: 5f 55 54 46 31 36 20 2a 2f 0a 0a 23 69 66 6e 64  _UTF16 */..#ifnd
79b0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47  ef SQLITE_OMIT_G
79c0: 4c 4f 42 41 4c 52 45 43 4f 56 45 52 0a 2f 2a 0a  LOBALRECOVER./*.
79d0: 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  ** This function
79e0: 20 69 73 20 6e 6f 77 20 61 6e 20 61 6e 61 63 68   is now an anach
79f0: 72 6f 6e 69 73 6d 2e 20 49 74 20 75 73 65 64 20  ronism. It used 
7a00: 74 6f 20 62 65 20 75 73 65 64 20 74 6f 20 72 65  to be used to re
7a10: 63 6f 76 65 72 20 66 72 6f 6d 20 61 0a 2a 2a 20  cover from a.** 
7a20: 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65  malloc() failure
7a30: 2c 20 62 75 74 20 53 51 4c 69 74 65 20 6e 6f 77  , but SQLite now
7a40: 20 64 6f 65 73 20 74 68 69 73 20 61 75 74 6f 6d   does this autom
7a50: 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 69 6e 74  atically..*/.int
7a60: 20 73 71 6c 69 74 65 33 5f 67 6c 6f 62 61 6c 5f   sqlite3_global_
7a70: 72 65 63 6f 76 65 72 28 29 7b 0a 20 20 72 65 74  recover(){.  ret
7a80: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d  urn SQLITE_OK;.}
7a90: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
7aa0: 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68  est to see wheth
7ab0: 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 64 61  er or not the da
7ac0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
7ad0: 6e 20 69 73 20 69 6e 20 61 75 74 6f 63 6f 6d 6d  n is in autocomm
7ae0: 69 74 0a 2a 2a 20 6d 6f 64 65 2e 20 20 52 65 74  it.** mode.  Ret
7af0: 75 72 6e 20 54 52 55 45 20 69 66 20 69 74 20 69  urn TRUE if it i
7b00: 73 20 61 6e 64 20 46 41 4c 53 45 20 69 66 20 6e  s and FALSE if n
7b10: 6f 74 2e 20 20 41 75 74 6f 63 6f 6d 6d 69 74 20  ot.  Autocommit 
7b20: 6d 6f 64 65 20 69 73 20 6f 6e 0a 2a 2a 20 62 79  mode is on.** by
7b30: 20 64 65 66 61 75 6c 74 2e 20 20 41 75 74 6f 63   default.  Autoc
7b40: 6f 6d 6d 69 74 20 69 73 20 64 69 73 61 62 6c 65  ommit is disable
7b50: 64 20 62 79 20 61 20 42 45 47 49 4e 20 73 74 61  d by a BEGIN sta
7b60: 74 65 6d 65 6e 74 20 61 6e 64 20 72 65 65 6e 61  tement and reena
7b70: 62 6c 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 6e  bled.** by the n
7b80: 65 78 74 20 43 4f 4d 4d 49 54 20 6f 72 20 52 4f  ext COMMIT or RO
7b90: 4c 4c 42 41 43 4b 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a  LLBACK..**.*****
7ba0: 2a 2a 20 54 48 49 53 20 49 53 20 41 4e 20 45 58  ** THIS IS AN EX
7bb0: 50 45 52 49 4d 45 4e 54 41 4c 20 41 50 49 20 41  PERIMENTAL API A
7bc0: 4e 44 20 49 53 20 53 55 42 4a 45 43 54 20 54 4f  ND IS SUBJECT TO
7bd0: 20 43 48 41 4e 47 45 20 2a 2a 2a 2a 2a 2a 0a 2a   CHANGE ******.*
7be0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 67 65  /.int sqlite3_ge
7bf0: 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 73 71 6c  t_autocommit(sql
7c00: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 72 65 74  ite3 *db){.  ret
7c10: 75 72 6e 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  urn db->autoComm
7c20: 69 74 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51  it;.}..#ifdef SQ
7c30: 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
7c40: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72   The following r
7c50: 6f 75 74 69 6e 65 20 69 73 20 73 75 62 74 69 74  outine is subtit
7c60: 75 74 65 64 20 66 6f 72 20 63 6f 6e 73 74 61 6e  uted for constan
7c70: 74 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  t SQLITE_CORRUPT
7c80: 20 69 6e 0a 2a 2a 20 64 65 62 75 67 67 69 6e 67   in.** debugging
7c90: 20 62 75 69 6c 64 73 2e 20 20 54 68 69 73 20 70   builds.  This p
7ca0: 72 6f 76 69 64 65 73 20 61 20 77 61 79 20 74 6f  rovides a way to
7cb0: 20 73 65 74 20 61 20 62 72 65 61 6b 70 6f 69 6e   set a breakpoin
7cc0: 74 20 66 6f 72 20 77 68 65 6e 0a 2a 2a 20 63 6f  t for when.** co
7cd0: 72 72 75 70 74 69 6f 6e 20 69 73 20 66 69 72 73  rruption is firs
7ce0: 74 20 64 65 74 65 63 74 65 64 2e 0a 2a 2f 0a 69  t detected..*/.i
7cf0: 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  nt sqlite3Corrup
7d00: 74 28 76 6f 69 64 29 7b 0a 20 20 72 65 74 75 72  t(void){.  retur
7d10: 6e 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  n SQLITE_CORRUPT
7d20: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66  ;.}.#endif...#if
7d30: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
7d40: 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a  _SHARED_CACHE./*
7d50: 0a 2a 2a 20 45 6e 61 62 6c 65 20 6f 72 20 64 69  .** Enable or di
7d60: 73 61 62 6c 65 20 74 68 65 20 73 68 61 72 65 64  sable the shared
7d70: 20 70 61 67 65 72 20 61 6e 64 20 73 63 68 65 6d   pager and schem
7d80: 61 20 66 65 61 74 75 72 65 73 20 66 6f 72 20 74  a features for t
7d90: 68 65 0a 2a 2a 20 63 75 72 72 65 6e 74 20 74 68  he.** current th
7da0: 72 65 61 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  read..**.** This
7db0: 20 72 6f 75 74 69 6e 65 20 73 68 6f 75 6c 64 20   routine should 
7dc0: 6f 6e 6c 79 20 62 65 20 63 61 6c 6c 65 64 20 77  only be called w
7dd0: 68 65 6e 20 74 68 65 72 65 20 61 72 65 20 6e 6f  hen there are no
7de0: 20 6f 70 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73   open.** databas
7df0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 0a 2a  e connections..*
7e00: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 65 6e  /.int sqlite3_en
7e10: 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68  able_shared_cach
7e20: 65 28 69 6e 74 20 65 6e 61 62 6c 65 29 7b 0a 20  e(int enable){. 
7e30: 20 54 68 72 65 61 64 44 61 74 61 20 2a 70 54 64   ThreadData *pTd
7e40: 20 3d 20 73 71 6c 69 74 65 33 54 68 72 65 61 64   = sqlite3Thread
7e50: 44 61 74 61 28 29 3b 0a 20 20 69 66 28 20 70 54  Data();.  if( pT
7e60: 64 20 29 7b 0a 20 20 20 20 2f 2a 20 49 74 20 69  d ){.    /* It i
7e70: 73 20 6f 6e 6c 79 20 6c 65 67 61 6c 20 74 6f 20  s only legal to 
7e80: 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 65 6e 61  call sqlite3_ena
7e90: 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65  ble_shared_cache
7ea0: 28 29 20 77 68 65 6e 20 74 68 65 72 65 0a 20 20  () when there.  
7eb0: 20 20 2a 2a 20 61 72 65 20 6e 6f 20 63 75 72 72    ** are no curr
7ec0: 65 6e 74 6c 79 20 6f 70 65 6e 20 62 2d 74 72 65  ently open b-tre
7ed0: 65 73 20 74 68 61 74 20 77 65 72 65 20 6f 70 65  es that were ope
7ee0: 6e 65 64 20 62 79 20 74 68 65 20 63 61 6c 6c 69  ned by the calli
7ef0: 6e 67 20 74 68 72 65 61 64 2e 0a 20 20 20 20 2a  ng thread..    *
7f00: 2a 20 54 68 69 73 20 63 6f 6e 64 69 74 69 6f 6e  * This condition
7f10: 20 69 73 20 6f 6e 6c 79 20 65 61 73 79 20 74 6f   is only easy to
7f20: 20 64 65 74 65 63 74 20 69 66 20 74 68 65 20 73   detect if the s
7f30: 68 61 72 65 64 2d 63 61 63 68 65 20 77 65 72 65  hared-cache were
7f40: 20 0a 20 20 20 20 2a 2a 20 70 72 65 76 69 6f 75   .    ** previou
7f50: 73 6c 79 20 65 6e 61 62 6c 65 64 20 28 61 6e 64  sly enabled (and
7f60: 20 69 73 20 62 65 69 6e 67 20 64 69 73 61 62 6c   is being disabl
7f70: 65 64 29 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20  ed). .    */.   
7f80: 20 69 66 28 20 70 54 64 2d 3e 70 42 74 72 65 65   if( pTd->pBtree
7f90: 20 26 26 20 21 65 6e 61 62 6c 65 20 29 7b 0a 20   && !enable ){. 
7fa0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54 64       assert( pTd
7fb0: 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 20  ->useSharedData 
7fc0: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
7fd0: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20  SQLITE_MISUSE;. 
7fe0: 20 20 20 7d 0a 0a 20 20 20 20 70 54 64 2d 3e 75     }..    pTd->u
7ff0: 73 65 53 68 61 72 65 64 44 61 74 61 20 3d 20 65  seSharedData = e
8000: 6e 61 62 6c 65 3b 0a 20 20 20 20 73 71 6c 69 74  nable;.    sqlit
8010: 65 33 52 65 6c 65 61 73 65 54 68 72 65 61 64 44  e3ReleaseThreadD
8020: 61 74 61 28 29 3b 0a 20 20 7d 0a 20 20 72 65 74  ata();.  }.  ret
8030: 75 72 6e 20 73 71 6c 69 74 65 33 41 70 69 45 78  urn sqlite3ApiEx
8040: 69 74 28 30 2c 20 53 51 4c 49 54 45 5f 4f 4b 29  it(0, SQLITE_OK)
8050: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
8060: 2a 20 54 68 69 73 20 69 73 20 61 20 63 6f 6e 76  * This is a conv
8070: 65 6e 69 65 6e 63 65 20 72 6f 75 74 69 6e 65 20  enience routine 
8080: 74 68 61 74 20 6d 61 6b 65 73 20 73 75 72 65 20  that makes sure 
8090: 74 68 61 74 20 61 6c 6c 20 74 68 72 65 61 64 2d  that all thread-
80a0: 73 70 65 63 69 66 69 63 0a 2a 2a 20 64 61 74 61  specific.** data
80b0: 20 66 6f 72 20 74 68 69 73 20 74 68 72 65 61 64   for this thread
80c0: 20 68 61 73 20 62 65 65 6e 20 64 65 61 6c 6c 6f   has been deallo
80d0: 63 61 74 65 64 2e 0a 2a 2f 0a 76 6f 69 64 20 73  cated..*/.void s
80e0: 71 6c 69 74 65 33 5f 74 68 72 65 61 64 5f 63 6c  qlite3_thread_cl
80f0: 65 61 6e 75 70 28 76 6f 69 64 29 7b 0a 20 20 54  eanup(void){.  T
8100: 68 72 65 61 64 44 61 74 61 20 2a 70 54 64 20 3d  hreadData *pTd =
8110: 20 73 71 6c 69 74 65 33 4f 73 54 68 72 65 61 64   sqlite3OsThread
8120: 53 70 65 63 69 66 69 63 44 61 74 61 28 30 29 3b  SpecificData(0);
8130: 0a 20 20 69 66 28 20 70 54 64 20 29 7b 0a 20 20  .  if( pTd ){.  
8140: 20 20 6d 65 6d 73 65 74 28 70 54 64 2c 20 30 2c    memset(pTd, 0,
8150: 20 73 69 7a 65 6f 66 28 2a 70 54 64 29 29 3b 0a   sizeof(*pTd));.
8160: 20 20 20 20 73 71 6c 69 74 65 33 4f 73 54 68 72      sqlite3OsThr
8170: 65 61 64 53 70 65 63 69 66 69 63 44 61 74 61 28  eadSpecificData(
8180: 2d 31 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  -1);.  }.}../*.*
8190: 2a 20 52 65 74 75 72 6e 20 6d 65 74 61 20 69 6e  * Return meta in
81a0: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
81b0: 61 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d  a specific colum
81c0: 6e 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 20  n of a database 
81d0: 74 61 62 6c 65 2e 0a 2a 2a 20 53 65 65 20 63 6f  table..** See co
81e0: 6d 6d 65 6e 74 20 69 6e 20 73 71 6c 69 74 65 33  mment in sqlite3
81f0: 2e 68 20 28 73 71 6c 69 74 65 2e 68 2e 69 6e 29  .h (sqlite.h.in)
8200: 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f   for details..*/
8210: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
8220: 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54  NABLE_COLUMN_MET
8230: 41 44 41 54 41 0a 69 6e 74 20 73 71 6c 69 74 65  ADATA.int sqlite
8240: 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d  3_table_column_m
8250: 65 74 61 64 61 74 61 28 0a 20 20 73 71 6c 69 74  etadata(.  sqlit
8260: 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20  e3 *db,         
8270: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63         /* Connec
8280: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 2a 2f 0a 20  tion handle */. 
8290: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
82a0: 4e 61 6d 65 2c 20 20 20 20 20 20 20 20 2f 2a 20  Name,        /* 
82b0: 44 61 74 61 62 61 73 65 20 6e 61 6d 65 20 6f 72  Database name or
82c0: 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 6f 6e 73 74   NULL */.  const
82d0: 20 63 68 61 72 20 2a 7a 54 61 62 6c 65 4e 61 6d   char *zTableNam
82e0: 65 2c 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  e,     /* Table 
82f0: 6e 61 6d 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  name */.  const 
8300: 63 68 61 72 20 2a 7a 43 6f 6c 75 6d 6e 4e 61 6d  char *zColumnNam
8310: 65 2c 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  e,    /* Column 
8320: 6e 61 6d 65 20 2a 2f 0a 20 20 63 68 61 72 20 63  name */.  char c
8330: 6f 6e 73 74 20 2a 2a 70 7a 44 61 74 61 54 79 70  onst **pzDataTyp
8340: 65 2c 20 20 20 20 2f 2a 20 4f 55 54 50 55 54 3a  e,    /* OUTPUT:
8350: 20 44 65 63 6c 61 72 65 64 20 64 61 74 61 20 74   Declared data t
8360: 79 70 65 20 2a 2f 0a 20 20 63 68 61 72 20 63 6f  ype */.  char co
8370: 6e 73 74 20 2a 2a 70 7a 43 6f 6c 6c 53 65 71 2c  nst **pzCollSeq,
8380: 20 20 20 20 20 2f 2a 20 4f 55 54 50 55 54 3a 20       /* OUTPUT: 
8390: 43 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  Collation sequen
83a0: 63 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 69 6e 74  ce name */.  int
83b0: 20 2a 70 4e 6f 74 4e 75 6c 6c 2c 20 20 20 20 20   *pNotNull,     
83c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 50           /* OUTP
83d0: 55 54 3a 20 54 72 75 65 20 69 66 20 4e 4f 54 20  UT: True if NOT 
83e0: 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20  NULL constraint 
83f0: 65 78 69 73 74 73 20 2a 2f 0a 20 20 69 6e 74 20  exists */.  int 
8400: 2a 70 50 72 69 6d 61 72 79 4b 65 79 2c 20 20 20  *pPrimaryKey,   
8410: 20 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 50 55          /* OUTPU
8420: 54 3a 20 54 72 75 65 20 69 66 20 63 6f 6c 75 6d  T: True if colum
8430: 6e 20 70 61 72 74 20 6f 66 20 50 4b 20 2a 2f 0a  n part of PK */.
8440: 20 20 69 6e 74 20 2a 70 41 75 74 6f 69 6e 63 20    int *pAutoinc 
8450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8460: 20 4f 55 54 50 55 54 3a 20 54 72 75 65 20 69 66   OUTPUT: True if
8470: 20 63 6f 6c 75 6d 73 20 69 73 20 61 75 74 6f 2d   colums is auto-
8480: 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 29 7b 0a  increment */.){.
8490: 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72    int rc;.  char
84a0: 20 2a 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20   *zErrMsg = 0;. 
84b0: 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 30   Table *pTab = 0
84c0: 3b 0a 20 20 43 6f 6c 75 6d 6e 20 2a 70 43 6f 6c  ;.  Column *pCol
84d0: 20 3d 20 30 3b 0a 20 20 69 6e 74 20 69 43 6f 6c   = 0;.  int iCol
84e0: 3b 0a 0a 20 20 63 68 61 72 20 63 6f 6e 73 74 20  ;..  char const 
84f0: 2a 7a 44 61 74 61 54 79 70 65 20 3d 20 30 3b 0a  *zDataType = 0;.
8500: 20 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 43    char const *zC
8510: 6f 6c 6c 53 65 71 20 3d 20 30 3b 0a 20 20 69 6e  ollSeq = 0;.  in
8520: 74 20 6e 6f 74 6e 75 6c 6c 20 3d 20 30 3b 0a 20  t notnull = 0;. 
8530: 20 69 6e 74 20 70 72 69 6d 61 72 79 6b 65 79 20   int primarykey 
8540: 3d 20 30 3b 0a 20 20 69 6e 74 20 61 75 74 6f 69  = 0;.  int autoi
8550: 6e 63 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 45 6e  nc = 0;..  /* En
8560: 73 75 72 65 20 74 68 65 20 64 61 74 61 62 61 73  sure the databas
8570: 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65  e schema has bee
8580: 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 20 20 69 66  n loaded */.  if
8590: 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
85a0: 6e 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74  n(db) ){.    ret
85b0: 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  urn SQLITE_MISUS
85c0: 45 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  E;.  }.  rc = sq
85d0: 6c 69 74 65 33 49 6e 69 74 28 64 62 2c 20 26 7a  lite3Init(db, &z
85e0: 45 72 72 4d 73 67 29 3b 0a 20 20 69 66 28 20 53  ErrMsg);.  if( S
85f0: 51 4c 49 54 45 5f 4f 4b 21 3d 72 63 20 29 7b 0a  QLITE_OK!=rc ){.
8600: 20 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 5f 6f      goto error_o
8610: 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c 6f  ut;.  }..  /* Lo
8620: 63 61 74 65 20 74 68 65 20 74 61 62 6c 65 20 69  cate the table i
8630: 6e 20 71 75 65 73 74 69 6f 6e 20 2a 2f 0a 20 20  n question */.  
8640: 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69  pTab = sqlite3Fi
8650: 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 54 61 62  ndTable(db, zTab
8660: 6c 65 4e 61 6d 65 2c 20 7a 44 62 4e 61 6d 65 29  leName, zDbName)
8670: 3b 0a 20 20 69 66 28 20 21 70 54 61 62 20 7c 7c  ;.  if( !pTab ||
8680: 20 70 54 61 62 2d 3e 70 53 65 6c 65 63 74 20 29   pTab->pSelect )
8690: 7b 0a 20 20 20 20 70 54 61 62 20 3d 20 30 3b 0a  {.    pTab = 0;.
86a0: 20 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 5f 6f      goto error_o
86b0: 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 46 69  ut;.  }..  /* Fi
86c0: 6e 64 20 74 68 65 20 63 6f 6c 75 6d 6e 20 66 6f  nd the column fo
86d0: 72 20 77 68 69 63 68 20 69 6e 66 6f 20 69 73 20  r which info is 
86e0: 72 65 71 75 65 73 74 65 64 20 2a 2f 0a 20 20 69  requested */.  i
86f0: 66 28 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69  f( sqlite3IsRowi
8700: 64 28 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 29 20 29  d(zColumnName) )
8710: 7b 0a 20 20 20 20 69 43 6f 6c 20 3d 20 70 54 61  {.    iCol = pTa
8720: 62 2d 3e 69 50 4b 65 79 3b 0a 20 20 20 20 69 66  b->iPKey;.    if
8730: 28 20 69 43 6f 6c 3e 3d 30 20 29 7b 0a 20 20 20  ( iCol>=0 ){.   
8740: 20 20 20 70 43 6f 6c 20 3d 20 26 70 54 61 62 2d     pCol = &pTab-
8750: 3e 61 43 6f 6c 5b 69 43 6f 6c 5d 3b 0a 20 20 20  >aCol[iCol];.   
8760: 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
8770: 66 6f 72 28 69 43 6f 6c 3d 30 3b 20 69 43 6f 6c  for(iCol=0; iCol
8780: 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20 69 43 6f  <pTab->nCol; iCo
8790: 6c 2b 2b 29 7b 0a 20 20 20 20 20 20 70 43 6f 6c  l++){.      pCol
87a0: 20 3d 20 26 70 54 61 62 2d 3e 61 43 6f 6c 5b 69   = &pTab->aCol[i
87b0: 43 6f 6c 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  Col];.      if( 
87c0: 30 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d  0==sqlite3StrICm
87d0: 70 28 70 43 6f 6c 2d 3e 7a 4e 61 6d 65 2c 20 7a  p(pCol->zName, z
87e0: 43 6f 6c 75 6d 6e 4e 61 6d 65 29 20 29 7b 0a 20  ColumnName) ){. 
87f0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
8800: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
8810: 69 66 28 20 69 43 6f 6c 3d 3d 70 54 61 62 2d 3e  if( iCol==pTab->
8820: 6e 43 6f 6c 20 29 7b 0a 20 20 20 20 20 20 70 54  nCol ){.      pT
8830: 61 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 67 6f  ab = 0;.      go
8840: 74 6f 20 65 72 72 6f 72 5f 6f 75 74 3b 0a 20 20  to error_out;.  
8850: 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68    }.  }..  /* Th
8860: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 6c 6f 63  e following bloc
8870: 6b 20 73 74 6f 72 65 73 20 74 68 65 20 6d 65 74  k stores the met
8880: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  a information th
8890: 61 74 20 77 69 6c 6c 20 62 65 20 72 65 74 75 72  at will be retur
88a0: 6e 65 64 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20  ned.  ** to the 
88b0: 63 61 6c 6c 65 72 20 69 6e 20 6c 6f 63 61 6c 20  caller in local 
88c0: 76 61 72 69 61 62 6c 65 73 20 7a 44 61 74 61 54  variables zDataT
88d0: 79 70 65 2c 20 7a 43 6f 6c 6c 53 65 71 2c 20 6e  ype, zCollSeq, n
88e0: 6f 74 6e 75 6c 6c 2c 20 70 72 69 6d 61 72 79 6b  otnull, primaryk
88f0: 65 79 0a 20 20 2a 2a 20 61 6e 64 20 61 75 74 6f  ey.  ** and auto
8900: 69 6e 63 2e 20 41 74 20 74 68 69 73 20 70 6f 69  inc. At this poi
8910: 6e 74 20 74 68 65 72 65 20 61 72 65 20 74 77 6f  nt there are two
8920: 20 70 6f 73 73 69 62 69 6c 69 74 69 65 73 3a 0a   possibilities:.
8930: 20 20 2a 2a 20 0a 20 20 2a 2a 20 20 20 20 20 31    ** .  **     1
8940: 2e 20 54 68 65 20 73 70 65 63 69 66 69 65 64 20  . The specified 
8950: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 77 61 73 20  column name was 
8960: 72 6f 77 69 64 22 2c 20 22 6f 69 64 22 20 6f 72  rowid", "oid" or
8970: 20 22 5f 72 6f 77 69 64 5f 22 20 0a 20 20 2a 2a   "_rowid_" .  **
8980: 20 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 72          and ther
8990: 65 20 69 73 20 6e 6f 20 65 78 70 6c 69 63 69 74  e is no explicit
89a0: 6c 79 20 64 65 63 6c 61 72 65 64 20 49 50 4b 20  ly declared IPK 
89b0: 63 6f 6c 75 6d 6e 2e 20 0a 20 20 2a 2a 0a 20 20  column. .  **.  
89c0: 2a 2a 20 20 20 20 20 32 2e 20 54 68 65 20 74 61  **     2. The ta
89d0: 62 6c 65 20 69 73 20 6e 6f 74 20 61 20 76 69 65  ble is not a vie
89e0: 77 20 61 6e 64 20 74 68 65 20 63 6f 6c 75 6d 6e  w and the column
89f0: 20 6e 61 6d 65 20 69 64 65 6e 74 69 66 69 65 64   name identified
8a00: 20 61 6e 20 0a 20 20 2a 2a 20 20 20 20 20 20 20   an .  **       
8a10: 20 65 78 70 6c 69 63 69 74 6c 79 20 64 65 63 6c   explicitly decl
8a20: 61 72 65 64 20 63 6f 6c 75 6d 6e 2e 20 43 6f 70  ared column. Cop
8a30: 79 20 6d 65 74 61 20 69 6e 66 6f 72 6d 61 74 69  y meta informati
8a40: 6f 6e 20 66 72 6f 6d 20 2a 70 43 6f 6c 2e 0a 20  on from *pCol.. 
8a50: 20 2a 2f 20 0a 20 20 69 66 28 20 70 43 6f 6c 20   */ .  if( pCol 
8a60: 29 7b 0a 20 20 20 20 7a 44 61 74 61 54 79 70 65  ){.    zDataType
8a70: 20 3d 20 70 43 6f 6c 2d 3e 7a 54 79 70 65 3b 0a   = pCol->zType;.
8a80: 20 20 20 20 7a 43 6f 6c 6c 53 65 71 20 3d 20 70      zCollSeq = p
8a90: 43 6f 6c 2d 3e 7a 43 6f 6c 6c 3b 0a 20 20 20 20  Col->zColl;.    
8aa0: 6e 6f 74 6e 75 6c 6c 20 3d 20 28 70 43 6f 6c 2d  notnull = (pCol-
8ab0: 3e 6e 6f 74 4e 75 6c 6c 3f 31 3a 30 29 3b 0a 20  >notNull?1:0);. 
8ac0: 20 20 20 70 72 69 6d 61 72 79 6b 65 79 20 20 3d     primarykey  =
8ad0: 20 28 70 43 6f 6c 2d 3e 69 73 50 72 69 6d 4b 65   (pCol->isPrimKe
8ae0: 79 3f 31 3a 30 29 3b 0a 20 20 20 20 61 75 74 6f  y?1:0);.    auto
8af0: 69 6e 63 20 3d 20 28 28 70 54 61 62 2d 3e 69 50  inc = ((pTab->iP
8b00: 4b 65 79 3d 3d 69 43 6f 6c 20 26 26 20 70 54 61  Key==iCol && pTa
8b10: 62 2d 3e 61 75 74 6f 49 6e 63 29 3f 31 3a 30 29  b->autoInc)?1:0)
8b20: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a  ;.  }else{.    z
8b30: 44 61 74 61 54 79 70 65 20 3d 20 22 49 4e 54 45  DataType = "INTE
8b40: 47 45 52 22 3b 0a 20 20 20 20 70 72 69 6d 61 72  GER";.    primar
8b50: 79 6b 65 79 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  ykey = 1;.  }.  
8b60: 69 66 28 20 21 7a 43 6f 6c 6c 53 65 71 20 29 7b  if( !zCollSeq ){
8b70: 0a 20 20 20 20 7a 43 6f 6c 6c 53 65 71 20 3d 20  .    zCollSeq = 
8b80: 22 42 49 4e 41 52 59 22 3b 0a 20 20 7d 0a 0a 65  "BINARY";.  }..e
8b90: 72 72 6f 72 5f 6f 75 74 3a 0a 20 20 69 66 28 20  rror_out:.  if( 
8ba0: 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
8bb0: 28 64 62 29 20 29 7b 0a 20 20 20 20 72 63 20 3d  (db) ){.    rc =
8bc0: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a   SQLITE_MISUSE;.
8bd0: 20 20 7d 0a 0a 20 20 2f 2a 20 57 68 65 74 68 65    }..  /* Whethe
8be0: 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 63  r the function c
8bf0: 61 6c 6c 20 73 75 63 63 65 65 64 65 64 20 6f 72  all succeeded or
8c00: 20 66 61 69 6c 65 64 2c 20 73 65 74 20 74 68 65   failed, set the
8c10: 20 6f 75 74 70 75 74 20 70 61 72 61 6d 65 74 65   output paramete
8c20: 72 73 0a 20 20 2a 2a 20 74 6f 20 77 68 61 74 65  rs.  ** to whate
8c30: 76 65 72 20 74 68 65 69 72 20 6c 6f 63 61 6c 20  ver their local 
8c40: 63 6f 75 6e 74 65 72 70 61 72 74 73 20 63 6f 6e  counterparts con
8c50: 74 61 69 6e 2e 20 49 66 20 61 6e 20 65 72 72 6f  tain. If an erro
8c60: 72 20 64 69 64 20 6f 63 63 75 72 2c 0a 20 20 2a  r did occur,.  *
8c70: 2a 20 74 68 69 73 20 68 61 73 20 74 68 65 20 65  * this has the e
8c80: 66 66 65 63 74 20 6f 66 20 7a 65 72 6f 69 6e 67  ffect of zeroing
8c90: 20 61 6c 6c 20 6f 75 74 70 75 74 20 70 61 72 61   all output para
8ca0: 6d 65 74 65 72 73 2e 0a 20 20 2a 2f 0a 20 20 69  meters..  */.  i
8cb0: 66 28 20 70 7a 44 61 74 61 54 79 70 65 20 29 20  f( pzDataType ) 
8cc0: 2a 70 7a 44 61 74 61 54 79 70 65 20 3d 20 7a 44  *pzDataType = zD
8cd0: 61 74 61 54 79 70 65 3b 0a 20 20 69 66 28 20 70  ataType;.  if( p
8ce0: 7a 43 6f 6c 6c 53 65 71 20 29 20 2a 70 7a 43 6f  zCollSeq ) *pzCo
8cf0: 6c 6c 53 65 71 20 3d 20 7a 43 6f 6c 6c 53 65 71  llSeq = zCollSeq
8d00: 3b 0a 20 20 69 66 28 20 70 4e 6f 74 4e 75 6c 6c  ;.  if( pNotNull
8d10: 20 29 20 2a 70 4e 6f 74 4e 75 6c 6c 20 3d 20 6e   ) *pNotNull = n
8d20: 6f 74 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 70 50  otnull;.  if( pP
8d30: 72 69 6d 61 72 79 4b 65 79 20 29 20 2a 70 50 72  rimaryKey ) *pPr
8d40: 69 6d 61 72 79 4b 65 79 20 3d 20 70 72 69 6d 61  imaryKey = prima
8d50: 72 79 6b 65 79 3b 0a 20 20 69 66 28 20 70 41 75  rykey;.  if( pAu
8d60: 74 6f 69 6e 63 20 29 20 2a 70 41 75 74 6f 69 6e  toinc ) *pAutoin
8d70: 63 20 3d 20 61 75 74 6f 69 6e 63 3b 0a 0a 20 20  c = autoinc;..  
8d80: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72  if( SQLITE_OK==r
8d90: 63 20 26 26 20 21 70 54 61 62 20 29 7b 0a 20 20  c && !pTab ){.  
8da0: 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
8db0: 6e 67 28 26 7a 45 72 72 4d 73 67 2c 20 22 6e 6f  ng(&zErrMsg, "no
8dc0: 20 73 75 63 68 20 74 61 62 6c 65 20 63 6f 6c 75   such table colu
8dd0: 6d 6e 3a 20 22 2c 20 7a 54 61 62 6c 65 4e 61 6d  mn: ", zTableNam
8de0: 65 2c 20 22 2e 22 2c 20 0a 20 20 20 20 20 20 20  e, ".", .       
8df0: 20 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 30 29   zColumnName, 0)
8e00: 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
8e10: 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 73  E_ERROR;.  }.  s
8e20: 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20  qlite3Error(db, 
8e30: 72 63 2c 20 28 7a 45 72 72 4d 73 67 3f 22 25 73  rc, (zErrMsg?"%s
8e40: 22 3a 30 29 2c 20 7a 45 72 72 4d 73 67 29 3b 0a  ":0), zErrMsg);.
8e50: 20 20 73 71 6c 69 74 65 46 72 65 65 28 7a 45 72    sqliteFree(zEr
8e60: 72 4d 73 67 29 3b 0a 20 20 72 65 74 75 72 6e 20  rMsg);.  return 
8e70: 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 64  sqlite3ApiExit(d
8e80: 62 2c 20 72 63 29 3b 0a 7d 0a 23 65 6e 64 69 66  b, rc);.}.#endif
8e90: 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 61 6c 6c 20  ../*.** Set all 
8ea0: 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 69  the parameters i
8eb0: 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 53  n the compiled S
8ec0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  QL statement to 
8ed0: 4e 55 4c 4c 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  NULL..*/.int sql
8ee0: 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69  ite3_clear_bindi
8ef0: 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ngs(sqlite3_stmt
8f00: 20 2a 70 53 74 6d 74 29 7b 0a 20 20 69 6e 74 20   *pStmt){.  int 
8f10: 69 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51  i;.  int rc = SQ
8f20: 4c 49 54 45 5f 4f 4b 3b 0a 20 20 66 6f 72 28 69  LITE_OK;.  for(i
8f30: 3d 31 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  =1; rc==SQLITE_O
8f40: 4b 20 26 26 20 69 3c 3d 73 71 6c 69 74 65 33 5f  K && i<=sqlite3_
8f50: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63  bind_parameter_c
8f60: 6f 75 6e 74 28 70 53 74 6d 74 29 3b 20 69 2b 2b  ount(pStmt); i++
8f70: 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
8f80: 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 70 53  te3_bind_null(pS
8f90: 74 6d 74 2c 20 69 29 3b 0a 20 20 7d 0a 20 20 72  tmt, i);.  }.  r
8fa0: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a  eturn rc;.}../*.
8fb0: 2a 2a 20 53 6c 65 65 70 20 66 6f 72 20 61 20 6c  ** Sleep for a l
8fc0: 69 74 74 6c 65 20 77 68 69 6c 65 2e 20 20 52 65  ittle while.  Re
8fd0: 74 75 72 6e 20 74 68 65 20 61 6d 6f 75 6e 74 20  turn the amount 
8fe0: 6f 66 20 74 69 6d 65 20 73 6c 65 70 74 2e 0a 2a  of time slept..*
8ff0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6c  /.int sqlite3_sl
9000: 65 65 70 28 69 6e 74 20 6d 73 29 7b 0a 20 20 72  eep(int ms){.  r
9010: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 4f 73 53  eturn sqlite3OsS
9020: 6c 65 65 70 28 6d 73 29 3b 0a 7d 0a              leep(ms);.}.