/ Hex Artifact Content
Login

Artifact b9cf8dd198b0463b3de8954744e7cac6a1218126:


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