/ Hex Artifact Content
Login

Artifact 7850774e64fc1f804a3f91a8a66ba4215e9fa05b:


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 38 30 20 32 30 30 37 2f 30 38  ,v 1.380 2007/08
0280: 2f 31 36 20 30 34 3a 33 30 3a 34 30 20 64 72 68  /16 04:30:40 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 76  .h>../*.** The v
02e0: 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ersion of the li
02f0: 62 72 61 72 79 0a 2a 2f 0a 63 6f 6e 73 74 20 63  brary.*/.const c
0300: 68 61 72 20 73 71 6c 69 74 65 33 5f 76 65 72 73  har sqlite3_vers
0310: 69 6f 6e 5b 5d 20 3d 20 53 51 4c 49 54 45 5f 56  ion[] = SQLITE_V
0320: 45 52 53 49 4f 4e 3b 0a 63 6f 6e 73 74 20 63 68  ERSION;.const ch
0330: 61 72 20 2a 73 71 6c 69 74 65 33 5f 6c 69 62 76  ar *sqlite3_libv
0340: 65 72 73 69 6f 6e 28 76 6f 69 64 29 7b 20 72 65  ersion(void){ re
0350: 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 76 65 72  turn sqlite3_ver
0360: 73 69 6f 6e 3b 20 7d 0a 69 6e 74 20 73 71 6c 69  sion; }.int sqli
0370: 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e  te3_libversion_n
0380: 75 6d 62 65 72 28 76 6f 69 64 29 7b 20 72 65 74  umber(void){ ret
0390: 75 72 6e 20 53 51 4c 49 54 45 5f 56 45 52 53 49  urn SQLITE_VERSI
03a0: 4f 4e 5f 4e 55 4d 42 45 52 3b 20 7d 0a 0a 2f 2a  ON_NUMBER; }../*
03b0: 0a 2a 2a 20 49 66 20 74 68 65 20 66 6f 6c 6c 6f  .** If the follo
03c0: 77 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 70 6f  wing function po
03d0: 69 6e 74 65 72 20 69 73 20 6e 6f 74 20 4e 55 4c  inter is not NUL
03e0: 4c 20 61 6e 64 20 69 66 0a 2a 2a 20 53 51 4c 49  L and if.** SQLI
03f0: 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43  TE_ENABLE_IOTRAC
0400: 45 20 69 73 20 65 6e 61 62 6c 65 64 2c 20 74 68  E is enabled, th
0410: 65 6e 20 6d 65 73 73 61 67 65 73 20 64 65 73 63  en messages desc
0420: 72 69 62 69 6e 67 0a 2a 2a 20 49 2f 4f 20 61 63  ribing.** I/O ac
0430: 74 69 76 65 20 61 72 65 20 77 72 69 74 74 65 6e  tive are written
0440: 20 75 73 69 6e 67 20 74 68 69 73 20 66 75 6e 63   using this func
0450: 74 69 6f 6e 2e 20 20 54 68 65 73 65 20 6d 65 73  tion.  These mes
0460: 73 61 67 65 73 0a 2a 2a 20 61 72 65 20 69 6e 74  sages.** are int
0470: 65 6e 64 65 64 20 66 6f 72 20 64 65 62 75 67 67  ended for debugg
0480: 69 6e 67 20 61 63 74 69 76 69 74 79 20 6f 6e 6c  ing activity onl
0490: 79 2e 0a 2a 2f 0a 76 6f 69 64 20 28 2a 73 71 6c  y..*/.void (*sql
04a0: 69 74 65 33 5f 69 6f 5f 74 72 61 63 65 29 28 63  ite3_io_trace)(c
04b0: 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
04c0: 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 49 66 20   = 0;../*.** If 
04d0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 67 6c  the following gl
04e0: 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 70 6f  obal variable po
04f0: 69 6e 74 73 20 74 6f 20 61 20 73 74 72 69 6e 67  ints to a string
0500: 20 77 68 69 63 68 20 69 73 20 74 68 65 0a 2a 2a   which is the.**
0510: 20 6e 61 6d 65 20 6f 66 20 61 20 64 69 72 65 63   name of a direc
0520: 74 6f 72 79 2c 20 74 68 65 6e 20 74 68 61 74 20  tory, then that 
0530: 64 69 72 65 63 74 6f 72 79 20 77 69 6c 6c 20 62  directory will b
0540: 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a  e used to store.
0550: 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c  ** temporary fil
0560: 65 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  es..**.** See al
0570: 73 6f 20 74 68 65 20 22 50 52 41 47 4d 41 20 74  so the "PRAGMA t
0580: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
0590: 6f 72 79 22 20 53 51 4c 20 63 6f 6d 6d 61 6e 64  ory" SQL command
05a0: 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74  ..*/.char *sqlit
05b0: 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72  e3_temp_director
05c0: 79 20 3d 20 30 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 54  y = 0;.../*.** T
05d0: 68 69 73 20 69 73 20 74 68 65 20 64 65 66 61 75  his is the defau
05e0: 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  lt collating fun
05f0: 63 74 69 6f 6e 20 6e 61 6d 65 64 20 22 42 49 4e  ction named "BIN
0600: 41 52 59 22 20 77 68 69 63 68 20 69 73 20 61 6c  ARY" which is al
0610: 77 61 79 73 0a 2a 2a 20 61 76 61 69 6c 61 62 6c  ways.** availabl
0620: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
0630: 20 62 69 6e 43 6f 6c 6c 46 75 6e 63 28 0a 20 20   binCollFunc(.  
0640: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
0650: 20 69 6e 74 20 6e 4b 65 79 31 2c 20 63 6f 6e 73   int nKey1, cons
0660: 74 20 76 6f 69 64 20 2a 70 4b 65 79 31 2c 0a 20  t void *pKey1,. 
0670: 20 69 6e 74 20 6e 4b 65 79 32 2c 20 63 6f 6e 73   int nKey2, cons
0680: 74 20 76 6f 69 64 20 2a 70 4b 65 79 32 0a 29 7b  t void *pKey2.){
0690: 0a 20 20 69 6e 74 20 72 63 2c 20 6e 3b 0a 20 20  .  int rc, n;.  
06a0: 6e 20 3d 20 6e 4b 65 79 31 3c 6e 4b 65 79 32 20  n = nKey1<nKey2 
06b0: 3f 20 6e 4b 65 79 31 20 3a 20 6e 4b 65 79 32 3b  ? nKey1 : nKey2;
06c0: 0a 20 20 72 63 20 3d 20 6d 65 6d 63 6d 70 28 70  .  rc = memcmp(p
06d0: 4b 65 79 31 2c 20 70 4b 65 79 32 2c 20 6e 29 3b  Key1, pKey2, n);
06e0: 0a 20 20 69 66 28 20 72 63 3d 3d 30 20 29 7b 0a  .  if( rc==0 ){.
06f0: 20 20 20 20 72 63 20 3d 20 6e 4b 65 79 31 20 2d      rc = nKey1 -
0700: 20 6e 4b 65 79 32 3b 0a 20 20 7d 0a 20 20 72 65   nKey2;.  }.  re
0710: 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a  turn rc;.}../*.*
0720: 2a 20 41 6e 6f 74 68 65 72 20 62 75 69 6c 74 2d  * Another built-
0730: 69 6e 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  in collating seq
0740: 75 65 6e 63 65 3a 20 4e 4f 43 41 53 45 2e 20 0a  uence: NOCASE. .
0750: 2a 2a 0a 2a 2a 20 54 68 69 73 20 63 6f 6c 6c 61  **.** This colla
0760: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73  ting sequence is
0770: 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 62 65 20   intended to be 
0780: 75 73 65 64 20 66 6f 72 20 22 63 61 73 65 20 69  used for "case i
0790: 6e 64 65 70 65 6e 64 61 6e 74 0a 2a 2a 20 63 6f  ndependant.** co
07a0: 6d 70 61 72 69 73 6f 6e 22 2e 20 53 51 4c 69 74  mparison". SQLit
07b0: 65 27 73 20 6b 6e 6f 77 6c 65 64 67 65 20 6f 66  e's knowledge of
07c0: 20 75 70 70 65 72 20 61 6e 64 20 6c 6f 77 65 72   upper and lower
07d0: 20 63 61 73 65 20 65 71 75 69 76 61 6c 65 6e 74   case equivalent
07e0: 73 0a 2a 2a 20 65 78 74 65 6e 64 73 20 6f 6e 6c  s.** extends onl
07f0: 79 20 74 6f 20 74 68 65 20 32 36 20 63 68 61 72  y to the 26 char
0800: 61 63 74 65 72 73 20 75 73 65 64 20 69 6e 20 74  acters used in t
0810: 68 65 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75  he English langu
0820: 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 41 74 20 74 68  age..**.** At th
0830: 65 20 6d 6f 6d 65 6e 74 20 74 68 65 72 65 20 69  e moment there i
0840: 73 20 6f 6e 6c 79 20 61 20 55 54 46 2d 38 20 69  s only a UTF-8 i
0850: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a  mplementation..*
0860: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 6e 6f 63  /.static int noc
0870: 61 73 65 43 6f 6c 6c 61 74 69 6e 67 46 75 6e 63  aseCollatingFunc
0880: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
0890: 64 2c 0a 20 20 69 6e 74 20 6e 4b 65 79 31 2c 20  d,.  int nKey1, 
08a0: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 4b 65 79  const void *pKey
08b0: 31 2c 0a 20 20 69 6e 74 20 6e 4b 65 79 32 2c 20  1,.  int nKey2, 
08c0: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 4b 65 79  const void *pKey
08d0: 32 0a 29 7b 0a 20 20 69 6e 74 20 72 20 3d 20 73  2.){.  int r = s
08e0: 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 0a  qlite3StrNICmp(.
08f0: 20 20 20 20 20 20 28 63 6f 6e 73 74 20 63 68 61        (const cha
0900: 72 20 2a 29 70 4b 65 79 31 2c 20 28 63 6f 6e 73  r *)pKey1, (cons
0910: 74 20 63 68 61 72 20 2a 29 70 4b 65 79 32 2c 20  t char *)pKey2, 
0920: 28 6e 4b 65 79 31 3c 6e 4b 65 79 32 29 3f 6e 4b  (nKey1<nKey2)?nK
0930: 65 79 31 3a 6e 4b 65 79 32 29 3b 0a 20 20 69 66  ey1:nKey2);.  if
0940: 28 20 30 3d 3d 72 20 29 7b 0a 20 20 20 20 72 20  ( 0==r ){.    r 
0950: 3d 20 6e 4b 65 79 31 2d 6e 4b 65 79 32 3b 0a 20  = nKey1-nKey2;. 
0960: 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 3b 0a 7d   }.  return r;.}
0970: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
0980: 68 65 20 52 4f 57 49 44 20 6f 66 20 74 68 65 20  he ROWID of the 
0990: 6d 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65  most recent inse
09a0: 72 74 0a 2a 2f 0a 73 71 6c 69 74 65 5f 69 6e 74  rt.*/.sqlite_int
09b0: 36 34 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  64 sqlite3_last_
09c0: 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 73 71 6c  insert_rowid(sql
09d0: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 72 65 74  ite3 *db){.  ret
09e0: 75 72 6e 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  urn db->lastRowi
09f0: 64 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  d;.}../*.** Retu
0a00: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
0a10: 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20   changes in the 
0a20: 6d 6f 73 74 20 72 65 63 65 6e 74 20 63 61 6c 6c  most recent call
0a30: 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 78 65 63   to sqlite3_exec
0a40: 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ()..*/.int sqlit
0a50: 65 33 5f 63 68 61 6e 67 65 73 28 73 71 6c 69 74  e3_changes(sqlit
0a60: 65 33 20 2a 64 62 29 7b 0a 20 20 72 65 74 75 72  e3 *db){.  retur
0a70: 6e 20 64 62 2d 3e 6e 43 68 61 6e 67 65 3b 0a 7d  n db->nChange;.}
0a80: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
0a90: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61  he number of cha
0aa0: 6e 67 65 73 20 73 69 6e 63 65 20 74 68 65 20 64  nges since the d
0ab0: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 77  atabase handle w
0ac0: 61 73 20 6f 70 65 6e 65 64 2e 0a 2a 2f 0a 69 6e  as opened..*/.in
0ad0: 74 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f  t sqlite3_total_
0ae0: 63 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20  changes(sqlite3 
0af0: 2a 64 62 29 7b 0a 20 20 72 65 74 75 72 6e 20 64  *db){.  return d
0b00: 62 2d 3e 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b  b->nTotalChange;
0b10: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6c 6f 73 65 20  .}../*.** Close 
0b20: 61 6e 20 65 78 69 73 74 69 6e 67 20 53 51 4c 69  an existing SQLi
0b30: 74 65 20 64 61 74 61 62 61 73 65 0a 2a 2f 0a 69  te database.*/.i
0b40: 6e 74 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  nt sqlite3_close
0b50: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
0b60: 20 48 61 73 68 45 6c 65 6d 20 2a 69 3b 0a 20 20   HashElem *i;.  
0b70: 69 6e 74 20 6a 3b 0a 0a 20 20 69 66 28 20 21 64  int j;..  if( !d
0b80: 62 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  b ){.    return 
0b90: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20  SQLITE_OK;.  }. 
0ba0: 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
0bb0: 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b 0a 20  tyCheck(db) ){. 
0bc0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
0bd0: 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 0a 23 69  _MISUSE;.  }..#i
0be0: 66 64 65 66 20 53 51 4c 49 54 45 5f 53 53 45 0a  fdef SQLITE_SSE.
0bf0: 20 20 7b 0a 20 20 20 20 65 78 74 65 72 6e 20 76    {.    extern v
0c00: 6f 69 64 20 73 71 6c 69 74 65 33 53 73 65 43 6c  oid sqlite3SseCl
0c10: 65 61 6e 75 70 28 73 71 6c 69 74 65 33 2a 29 3b  eanup(sqlite3*);
0c20: 0a 20 20 20 20 73 71 6c 69 74 65 33 53 73 65 43  .    sqlite3SseC
0c30: 6c 65 61 6e 75 70 28 64 62 29 3b 0a 20 20 7d 0a  leanup(db);.  }.
0c40: 23 65 6e 64 69 66 20 0a 0a 20 20 73 71 6c 69 74  #endif ..  sqlit
0c50: 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53  e3ResetInternalS
0c60: 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a 0a 20  chema(db, 0);.. 
0c70: 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 61 63   /* If a transac
0c80: 74 69 6f 6e 20 69 73 20 6f 70 65 6e 2c 20 74 68  tion is open, th
0c90: 65 20 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53  e ResetInternalS
0ca0: 63 68 65 6d 61 28 29 20 63 61 6c 6c 20 61 62 6f  chema() call abo
0cb0: 76 65 0a 20 20 2a 2a 20 77 69 6c 6c 20 6e 6f 74  ve.  ** will not
0cc0: 20 68 61 76 65 20 63 61 6c 6c 65 64 20 74 68 65   have called the
0cd0: 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 20 6d   xDisconnect() m
0ce0: 65 74 68 6f 64 20 6f 6e 20 61 6e 79 20 76 69 72  ethod on any vir
0cf0: 74 75 61 6c 0a 20 20 2a 2a 20 74 61 62 6c 65 73  tual.  ** tables
0d00: 20 69 6e 20 74 68 65 20 64 62 2d 3e 61 56 54 72   in the db->aVTr
0d10: 61 6e 73 5b 5d 20 61 72 72 61 79 2e 20 54 68 65  ans[] array. The
0d20: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 71 6c 69 74   following sqlit
0d30: 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 29  e3VtabRollback()
0d40: 0a 20 20 2a 2a 20 63 61 6c 6c 20 77 69 6c 6c 20  .  ** call will 
0d50: 64 6f 20 73 6f 2e 20 57 65 20 6e 65 65 64 20 74  do so. We need t
0d60: 6f 20 64 6f 20 74 68 69 73 20 62 65 66 6f 72 65  o do this before
0d70: 20 74 68 65 20 63 68 65 63 6b 20 66 6f 72 20 61   the check for a
0d80: 63 74 69 76 65 0a 20 20 2a 2a 20 53 51 4c 20 73  ctive.  ** SQL s
0d90: 74 61 74 65 6d 65 6e 74 73 20 62 65 6c 6f 77 2c  tatements below,
0da0: 20 61 73 20 74 68 65 20 76 2d 74 61 62 6c 65 20   as the v-table 
0db0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d  implementation m
0dc0: 61 79 20 62 65 20 73 74 6f 72 69 6e 67 0a 20 20  ay be storing.  
0dd0: 2a 2a 20 73 6f 6d 65 20 70 72 65 70 61 72 65 64  ** some prepared
0de0: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 74 65   statements inte
0df0: 72 6e 61 6c 6c 79 2e 0a 20 20 2a 2f 0a 20 20 73  rnally..  */.  s
0e00: 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
0e10: 63 6b 28 64 62 29 3b 0a 0a 20 20 2f 2a 20 49 66  ck(db);..  /* If
0e20: 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 6f   there are any o
0e30: 75 74 73 74 61 6e 64 69 6e 67 20 56 4d 73 2c 20  utstanding VMs, 
0e40: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 42 55  return SQLITE_BU
0e50: 53 59 2e 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  SY. */.  if( db-
0e60: 3e 70 56 64 62 65 20 29 7b 0a 20 20 20 20 73 71  >pVdbe ){.    sq
0e70: 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53  lite3Error(db, S
0e80: 51 4c 49 54 45 5f 42 55 53 59 2c 20 0a 20 20 20  QLITE_BUSY, .   
0e90: 20 20 20 20 20 22 55 6e 61 62 6c 65 20 74 6f 20       "Unable to 
0ea0: 63 6c 6f 73 65 20 64 75 65 20 74 6f 20 75 6e 66  close due to unf
0eb0: 69 6e 61 6c 69 73 65 64 20 73 74 61 74 65 6d 65  inalised stateme
0ec0: 6e 74 73 22 29 3b 0a 20 20 20 20 72 65 74 75 72  nts");.    retur
0ed0: 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  n SQLITE_BUSY;. 
0ee0: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 21 73 71   }.  assert( !sq
0ef0: 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
0f00: 28 64 62 29 20 29 3b 0a 0a 20 20 2f 2a 20 46 49  (db) );..  /* FI
0f10: 58 20 4d 45 3a 20 64 62 2d 3e 6d 61 67 69 63 20  X ME: db->magic 
0f20: 6d 61 79 20 62 65 20 73 65 74 20 74 6f 20 53 51  may be set to SQ
0f30: 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45  LITE_MAGIC_CLOSE
0f40: 44 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73  D if the databas
0f50: 65 0a 20 20 2a 2a 20 63 61 6e 6e 6f 74 20 62 65  e.  ** cannot be
0f60: 20 6f 70 65 6e 65 64 20 66 6f 72 20 73 6f 6d 65   opened for some
0f70: 20 72 65 61 73 6f 6e 2e 20 53 6f 20 74 68 69 73   reason. So this
0f80: 20 72 6f 75 74 69 6e 65 20 6e 65 65 64 73 20 74   routine needs t
0f90: 6f 20 72 75 6e 20 69 6e 0a 20 20 2a 2a 20 74 68  o run in.  ** th
0fa0: 61 74 20 63 61 73 65 2e 20 42 75 74 20 6d 61 79  at case. But may
0fb0: 62 65 20 74 68 65 72 65 20 73 68 6f 75 6c 64 20  be there should 
0fc0: 62 65 20 61 6e 20 65 78 74 72 61 20 6d 61 67 69  be an extra magi
0fd0: 63 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 0a  c value for the.
0fe0: 20 20 2a 2a 20 22 66 61 69 6c 65 64 20 74 6f 20    ** "failed to 
0ff0: 6f 70 65 6e 22 20 73 74 61 74 65 2e 0a 20 20 2a  open" state..  *
1000: 2a 0a 20 20 2a 2a 20 54 4f 44 4f 3a 20 43 6f 76  *.  ** TODO: Cov
1010: 65 72 61 67 65 20 74 65 73 74 73 20 64 6f 20 6e  erage tests do n
1020: 6f 74 20 74 65 73 74 20 74 68 65 20 63 61 73 65  ot test the case
1030: 20 77 68 65 72 65 20 74 68 69 73 20 63 6f 6e 64   where this cond
1040: 69 74 69 6f 6e 20 69 73 0a 20 20 2a 2a 20 74 72  ition is.  ** tr
1050: 75 65 2e 20 49 74 27 73 20 68 61 72 64 20 74 6f  ue. It's hard to
1060: 20 73 65 65 20 68 6f 77 20 74 6f 20 63 61 75 73   see how to caus
1070: 65 20 69 74 20 77 69 74 68 6f 75 74 20 6d 65 73  e it without mes
1080: 73 69 6e 67 20 77 69 74 68 20 74 68 72 65 61 64  sing with thread
1090: 73 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62  s..  */.  if( db
10a0: 2d 3e 6d 61 67 69 63 21 3d 53 51 4c 49 54 45 5f  ->magic!=SQLITE_
10b0: 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 26 26 20  MAGIC_CLOSED && 
10c0: 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
10d0: 64 62 29 20 29 7b 0a 20 20 20 20 2f 2a 20 70 72  db) ){.    /* pr
10e0: 69 6e 74 66 28 22 44 49 44 20 4e 4f 54 20 43 4c  intf("DID NOT CL
10f0: 4f 53 45 5c 6e 22 29 3b 20 66 66 6c 75 73 68 28  OSE\n"); fflush(
1100: 73 74 64 6f 75 74 29 3b 20 2a 2f 0a 20 20 20 20  stdout); */.    
1110: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
1120: 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 66 6f 72 28  ROR;.  }..  for(
1130: 6a 3d 30 3b 20 6a 3c 64 62 2d 3e 6e 44 62 3b 20  j=0; j<db->nDb; 
1140: 6a 2b 2b 29 7b 0a 20 20 20 20 73 74 72 75 63 74  j++){.    struct
1150: 20 44 62 20 2a 70 44 62 20 3d 20 26 64 62 2d 3e   Db *pDb = &db->
1160: 61 44 62 5b 6a 5d 3b 0a 20 20 20 20 69 66 28 20  aDb[j];.    if( 
1170: 70 44 62 2d 3e 70 42 74 20 29 7b 0a 20 20 20 20  pDb->pBt ){.    
1180: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
1190: 6f 73 65 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20  ose(pDb->pBt);. 
11a0: 20 20 20 20 20 70 44 62 2d 3e 70 42 74 20 3d 20       pDb->pBt = 
11b0: 30 3b 0a 20 20 20 20 20 20 69 66 28 20 6a 21 3d  0;.      if( j!=
11c0: 31 20 29 7b 0a 20 20 20 20 20 20 20 20 70 44 62  1 ){.        pDb
11d0: 2d 3e 70 53 63 68 65 6d 61 20 3d 20 30 3b 0a 20  ->pSchema = 0;. 
11e0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
11f0: 0a 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49  .  sqlite3ResetI
1200: 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62  nternalSchema(db
1210: 2c 20 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20  , 0);.  assert( 
1220: 64 62 2d 3e 6e 44 62 3c 3d 32 20 29 3b 0a 20 20  db->nDb<=2 );.  
1230: 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 3d  assert( db->aDb=
1240: 3d 64 62 2d 3e 61 44 62 53 74 61 74 69 63 20 29  =db->aDbStatic )
1250: 3b 0a 20 20 66 6f 72 28 69 3d 73 71 6c 69 74 65  ;.  for(i=sqlite
1260: 48 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61  HashFirst(&db->a
1270: 46 75 6e 63 29 3b 20 69 3b 20 69 3d 73 71 6c 69  Func); i; i=sqli
1280: 74 65 48 61 73 68 4e 65 78 74 28 69 29 29 7b 0a  teHashNext(i)){.
1290: 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75      FuncDef *pFu
12a0: 6e 63 2c 20 2a 70 4e 65 78 74 3b 0a 20 20 20 20  nc, *pNext;.    
12b0: 66 6f 72 28 70 46 75 6e 63 20 3d 20 28 46 75 6e  for(pFunc = (Fun
12c0: 63 44 65 66 2a 29 73 71 6c 69 74 65 48 61 73 68  cDef*)sqliteHash
12d0: 44 61 74 61 28 69 29 3b 20 70 46 75 6e 63 3b 20  Data(i); pFunc; 
12e0: 70 46 75 6e 63 3d 70 4e 65 78 74 29 7b 0a 20 20  pFunc=pNext){.  
12f0: 20 20 20 20 70 4e 65 78 74 20 3d 20 70 46 75 6e      pNext = pFun
1300: 63 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20  c->pNext;.      
1310: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 46 75  sqlite3_free(pFu
1320: 6e 63 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  nc);.    }.  }..
1330: 20 20 66 6f 72 28 69 3d 73 71 6c 69 74 65 48 61    for(i=sqliteHa
1340: 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61 43 6f  shFirst(&db->aCo
1350: 6c 6c 53 65 71 29 3b 20 69 3b 20 69 3d 73 71 6c  llSeq); i; i=sql
1360: 69 74 65 48 61 73 68 4e 65 78 74 28 69 29 29 7b  iteHashNext(i)){
1370: 0a 20 20 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43  .    CollSeq *pC
1380: 6f 6c 6c 20 3d 20 28 43 6f 6c 6c 53 65 71 20 2a  oll = (CollSeq *
1390: 29 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28  )sqliteHashData(
13a0: 69 29 3b 0a 20 20 20 20 2f 2a 20 49 6e 76 6f 6b  i);.    /* Invok
13b0: 65 20 61 6e 79 20 64 65 73 74 72 75 63 74 6f 72  e any destructor
13c0: 73 20 72 65 67 69 73 74 65 72 65 64 20 66 6f 72  s registered for
13d0: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
13e0: 6e 63 65 20 75 73 65 72 20 64 61 74 61 2e 20 2a  nce user data. *
13f0: 2f 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a  /.    for(j=0; j
1400: 3c 33 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  <3; j++){.      
1410: 69 66 28 20 70 43 6f 6c 6c 5b 6a 5d 2e 78 44 65  if( pColl[j].xDe
1420: 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43 6f  l ){.        pCo
1430: 6c 6c 5b 6a 5d 2e 78 44 65 6c 28 70 43 6f 6c 6c  ll[j].xDel(pColl
1440: 5b 6a 5d 2e 70 55 73 65 72 29 3b 0a 20 20 20 20  [j].pUser);.    
1450: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71    }.    }.    sq
1460: 6c 69 74 65 33 5f 66 72 65 65 28 70 43 6f 6c 6c  lite3_free(pColl
1470: 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
1480: 48 61 73 68 43 6c 65 61 72 28 26 64 62 2d 3e 61  HashClear(&db->a
1490: 43 6f 6c 6c 53 65 71 29 3b 0a 23 69 66 6e 64 65  CollSeq);.#ifnde
14a0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
14b0: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 66 6f 72  RTUALTABLE.  for
14c0: 28 69 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72  (i=sqliteHashFir
14d0: 73 74 28 26 64 62 2d 3e 61 4d 6f 64 75 6c 65 29  st(&db->aModule)
14e0: 3b 20 69 3b 20 69 3d 73 71 6c 69 74 65 48 61 73  ; i; i=sqliteHas
14f0: 68 4e 65 78 74 28 69 29 29 7b 0a 20 20 20 20 4d  hNext(i)){.    M
1500: 6f 64 75 6c 65 20 2a 70 4d 6f 64 20 3d 20 28 4d  odule *pMod = (M
1510: 6f 64 75 6c 65 20 2a 29 73 71 6c 69 74 65 48 61  odule *)sqliteHa
1520: 73 68 44 61 74 61 28 69 29 3b 0a 20 20 20 20 69  shData(i);.    i
1530: 66 28 20 70 4d 6f 64 2d 3e 78 44 65 73 74 72 6f  f( pMod->xDestro
1540: 79 20 29 7b 0a 20 20 20 20 20 20 70 4d 6f 64 2d  y ){.      pMod-
1550: 3e 78 44 65 73 74 72 6f 79 28 70 4d 6f 64 2d 3e  >xDestroy(pMod->
1560: 70 41 75 78 29 3b 0a 20 20 20 20 7d 0a 20 20 20  pAux);.    }.   
1570: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70 4d   sqlite3_free(pM
1580: 6f 64 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  od);.  }.  sqlit
1590: 65 33 48 61 73 68 43 6c 65 61 72 28 26 64 62 2d  e3HashClear(&db-
15a0: 3e 61 4d 6f 64 75 6c 65 29 3b 0a 23 65 6e 64 69  >aModule);.#endi
15b0: 66 0a 0a 20 20 73 71 6c 69 74 65 33 48 61 73 68  f..  sqlite3Hash
15c0: 43 6c 65 61 72 28 26 64 62 2d 3e 61 46 75 6e 63  Clear(&db->aFunc
15d0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 45 72 72 6f  );.  sqlite3Erro
15e0: 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 4f 4b 2c  r(db, SQLITE_OK,
15f0: 20 30 29 3b 20 2f 2a 20 44 65 61 6c 6c 6f 63 61   0); /* Dealloca
1600: 74 65 73 20 61 6e 79 20 63 61 63 68 65 64 20 65  tes any cached e
1610: 72 72 6f 72 20 73 74 72 69 6e 67 73 2e 20 2a 2f  rror strings. */
1620: 0a 20 20 69 66 28 20 64 62 2d 3e 70 45 72 72 20  .  if( db->pErr 
1630: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61  ){.    sqlite3Va
1640: 6c 75 65 46 72 65 65 28 64 62 2d 3e 70 45 72 72  lueFree(db->pErr
1650: 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
1660: 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28  CloseExtensions(
1670: 64 62 29 3b 0a 0a 20 20 64 62 2d 3e 6d 61 67 69  db);..  db->magi
1680: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  c = SQLITE_MAGIC
1690: 5f 45 52 52 4f 52 3b 0a 0a 20 20 2f 2a 20 54 68  _ERROR;..  /* Th
16a0: 65 20 74 65 6d 70 2d 64 61 74 61 62 61 73 65 20  e temp-database 
16b0: 73 63 68 65 6d 61 20 69 73 20 61 6c 6c 6f 63 61  schema is alloca
16c0: 74 65 64 20 64 69 66 66 65 72 65 6e 74 6c 79 20  ted differently 
16d0: 66 72 6f 6d 20 74 68 65 20 6f 74 68 65 72 20 73  from the other s
16e0: 63 68 65 6d 61 0a 20 20 2a 2a 20 6f 62 6a 65 63  chema.  ** objec
16f0: 74 73 20 28 75 73 69 6e 67 20 73 71 6c 69 74 65  ts (using sqlite
1700: 4d 61 6c 6c 6f 63 28 29 20 64 69 72 65 63 74 6c  Malloc() directl
1710: 79 2c 20 69 6e 73 74 65 61 64 20 6f 66 20 73 71  y, instead of sq
1720: 6c 69 74 65 33 42 74 72 65 65 53 63 68 65 6d 61  lite3BtreeSchema
1730: 28 29 29 2e 0a 20 20 2a 2a 20 53 6f 20 69 74 20  ())..  ** So it 
1740: 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72 65 65  needs to be free
1750: 64 20 68 65 72 65 2e 20 54 6f 64 6f 3a 20 57 68  d here. Todo: Wh
1760: 79 20 6e 6f 74 20 72 6f 6c 6c 20 74 68 65 20 74  y not roll the t
1770: 65 6d 70 20 73 63 68 65 6d 61 20 69 6e 74 6f 0a  emp schema into.
1780: 20 20 2a 2a 20 74 68 65 20 73 61 6d 65 20 73 71    ** the same sq
1790: 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 20 61 73 20  liteMalloc() as 
17a0: 74 68 65 20 6f 6e 65 20 74 68 61 74 20 61 6c 6c  the one that all
17b0: 6f 63 61 74 65 73 20 74 68 65 20 64 61 74 61 62  ocates the datab
17c0: 61 73 65 20 0a 20 20 2a 2a 20 73 74 72 75 63 74  ase .  ** struct
17d0: 75 72 65 3f 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  ure?.  */.  sqli
17e0: 74 65 33 5f 66 72 65 65 28 64 62 2d 3e 61 44 62  te3_free(db->aDb
17f0: 5b 31 5d 2e 70 53 63 68 65 6d 61 29 3b 0a 20 20  [1].pSchema);.  
1800: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 64 62 29  sqlite3_free(db)
1810: 3b 0a 20 20 73 71 6c 69 74 65 33 52 65 6c 65 61  ;.  sqlite3Relea
1820: 73 65 54 68 72 65 61 64 44 61 74 61 28 29 3b 0a  seThreadData();.
1830: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1840: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 6f 6c  OK;.}../*.** Rol
1850: 6c 62 61 63 6b 20 61 6c 6c 20 64 61 74 61 62 61  lback all databa
1860: 73 65 20 66 69 6c 65 73 2e 0a 2a 2f 0a 76 6f 69  se files..*/.voi
1870: 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63  d sqlite3Rollbac
1880: 6b 41 6c 6c 28 73 71 6c 69 74 65 33 20 2a 64 62  kAll(sqlite3 *db
1890: 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  ){.  int i;.  in
18a0: 74 20 69 6e 54 72 61 6e 73 20 3d 20 30 3b 0a 20  t inTrans = 0;. 
18b0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e   for(i=0; i<db->
18c0: 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  nDb; i++){.    i
18d0: 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42  f( db->aDb[i].pB
18e0: 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73  t ){.      if( s
18f0: 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54  qlite3BtreeIsInT
1900: 72 61 6e 73 28 64 62 2d 3e 61 44 62 5b 69 5d 2e  rans(db->aDb[i].
1910: 70 42 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20  pBt) ){.        
1920: 69 6e 54 72 61 6e 73 20 3d 20 31 3b 0a 20 20 20  inTrans = 1;.   
1930: 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74     }.      sqlit
1940: 65 33 42 74 72 65 65 52 6f 6c 6c 62 61 63 6b 28  e3BtreeRollback(
1950: 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 29 3b  db->aDb[i].pBt);
1960: 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69  .      db->aDb[i
1970: 5d 2e 69 6e 54 72 61 6e 73 20 3d 20 30 3b 0a 20  ].inTrans = 0;. 
1980: 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74     }.  }.  sqlit
1990: 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 64  e3VtabRollback(d
19a0: 62 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c  b);.  if( db->fl
19b0: 61 67 73 26 53 51 4c 49 54 45 5f 49 6e 74 65 72  ags&SQLITE_Inter
19c0: 6e 43 68 61 6e 67 65 73 20 29 7b 0a 20 20 20 20  nChanges ){.    
19d0: 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
19e0: 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
19f0: 64 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  db);.    sqlite3
1a00: 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68  ResetInternalSch
1a10: 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20 20 7d 0a  ema(db, 0);.  }.
1a20: 0a 20 20 2f 2a 20 49 66 20 6f 6e 65 20 68 61 73  .  /* If one has
1a30: 20 62 65 65 6e 20 63 6f 6e 66 69 67 75 72 65 64   been configured
1a40: 2c 20 69 6e 76 6f 6b 65 20 74 68 65 20 72 6f 6c  , invoke the rol
1a50: 6c 62 61 63 6b 2d 68 6f 6f 6b 20 63 61 6c 6c 62  lback-hook callb
1a60: 61 63 6b 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  ack */.  if( db-
1a70: 3e 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61  >xRollbackCallba
1a80: 63 6b 20 26 26 20 28 69 6e 54 72 61 6e 73 20 7c  ck && (inTrans |
1a90: 7c 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  | !db->autoCommi
1aa0: 74 29 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 52  t) ){.    db->xR
1ab0: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28  ollbackCallback(
1ac0: 64 62 2d 3e 70 52 6f 6c 6c 62 61 63 6b 41 72 67  db->pRollbackArg
1ad0: 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  );.  }.}../*.** 
1ae0: 52 65 74 75 72 6e 20 61 20 73 74 61 74 69 63 20  Return a static 
1af0: 73 74 72 69 6e 67 20 74 68 61 74 20 64 65 73 63  string that desc
1b00: 72 69 62 65 73 20 74 68 65 20 6b 69 6e 64 20 6f  ribes the kind o
1b10: 66 20 65 72 72 6f 72 20 73 70 65 63 69 66 69 65  f error specifie
1b20: 64 20 69 6e 20 74 68 65 0a 2a 2a 20 61 72 67 75  d in the.** argu
1b30: 6d 65 6e 74 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63  ment..*/.const c
1b40: 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53  har *sqlite3ErrS
1b50: 74 72 28 69 6e 74 20 72 63 29 7b 0a 20 20 63 6f  tr(int rc){.  co
1b60: 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20 20 73  nst char *z;.  s
1b70: 77 69 74 63 68 28 20 72 63 20 26 20 30 78 66 66  witch( rc & 0xff
1b80: 20 29 7b 0a 20 20 20 20 63 61 73 65 20 53 51 4c   ){.    case SQL
1b90: 49 54 45 5f 52 4f 57 3a 0a 20 20 20 20 63 61 73  ITE_ROW:.    cas
1ba0: 65 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3a 0a 20  e SQLITE_DONE:. 
1bb0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4f     case SQLITE_O
1bc0: 4b 3a 20 20 20 20 20 20 20 20 20 7a 20 3d 20 22  K:         z = "
1bd0: 6e 6f 74 20 61 6e 20 65 72 72 6f 72 22 3b 20 20  not an error";  
1be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1c00: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 45     case SQLITE_E
1c10: 52 52 4f 52 3a 20 20 20 20 20 20 7a 20 3d 20 22  RROR:      z = "
1c20: 53 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72 20  SQL logic error 
1c30: 6f 72 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62  or missing datab
1c40: 61 73 65 22 3b 20 20 20 62 72 65 61 6b 3b 0a 20  ase";   break;. 
1c50: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 50     case SQLITE_P
1c60: 45 52 4d 3a 20 20 20 20 20 20 20 7a 20 3d 20 22  ERM:       z = "
1c70: 61 63 63 65 73 73 20 70 65 72 6d 69 73 73 69 6f  access permissio
1c80: 6e 20 64 65 6e 69 65 64 22 3b 20 20 20 20 20 20  n denied";      
1c90: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1ca0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 41     case SQLITE_A
1cb0: 42 4f 52 54 3a 20 20 20 20 20 20 7a 20 3d 20 22  BORT:      z = "
1cc0: 63 61 6c 6c 62 61 63 6b 20 72 65 71 75 65 73 74  callback request
1cd0: 65 64 20 71 75 65 72 79 20 61 62 6f 72 74 22 3b  ed query abort";
1ce0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1cf0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 42     case SQLITE_B
1d00: 55 53 59 3a 20 20 20 20 20 20 20 7a 20 3d 20 22  USY:       z = "
1d10: 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b  database is lock
1d20: 65 64 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  ed";            
1d30: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1d40: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4c     case SQLITE_L
1d50: 4f 43 4b 45 44 3a 20 20 20 20 20 7a 20 3d 20 22  OCKED:     z = "
1d60: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69  database table i
1d70: 73 20 6c 6f 63 6b 65 64 22 3b 20 20 20 20 20 20  s locked";      
1d80: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1d90: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e     case SQLITE_N
1da0: 4f 4d 45 4d 3a 20 20 20 20 20 20 7a 20 3d 20 22  OMEM:      z = "
1db0: 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 3b 20  out of memory"; 
1dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1de0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52     case SQLITE_R
1df0: 45 41 44 4f 4e 4c 59 3a 20 20 20 7a 20 3d 20 22  EADONLY:   z = "
1e00: 61 74 74 65 6d 70 74 20 74 6f 20 77 72 69 74 65  attempt to write
1e10: 20 61 20 72 65 61 64 6f 6e 6c 79 20 64 61 74 61   a readonly data
1e20: 62 61 73 65 22 3b 20 20 62 72 65 61 6b 3b 0a 20  base";  break;. 
1e30: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49     case SQLITE_I
1e40: 4e 54 45 52 52 55 50 54 3a 20 20 7a 20 3d 20 22  NTERRUPT:  z = "
1e50: 69 6e 74 65 72 72 75 70 74 65 64 22 3b 20 20 20  interrupted";   
1e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e70: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1e80: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49     case SQLITE_I
1e90: 4f 45 52 52 3a 20 20 20 20 20 20 7a 20 3d 20 22  OERR:      z = "
1ea0: 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f 72 22 3b  disk I/O error";
1eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1ed0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43     case SQLITE_C
1ee0: 4f 52 52 55 50 54 3a 20 20 20 20 7a 20 3d 20 22  ORRUPT:    z = "
1ef0: 64 61 74 61 62 61 73 65 20 64 69 73 6b 20 69 6d  database disk im
1f00: 61 67 65 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64  age is malformed
1f10: 22 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ";      break;. 
1f20: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 46     case SQLITE_F
1f30: 55 4c 4c 3a 20 20 20 20 20 20 20 7a 20 3d 20 22  ULL:       z = "
1f40: 64 61 74 61 62 61 73 65 20 6f 72 20 64 69 73 6b  database or disk
1f50: 20 69 73 20 66 75 6c 6c 22 3b 20 20 20 20 20 20   is full";      
1f60: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1f70: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43     case SQLITE_C
1f80: 41 4e 54 4f 50 45 4e 3a 20 20 20 7a 20 3d 20 22  ANTOPEN:   z = "
1f90: 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64  unable to open d
1fa0: 61 74 61 62 61 73 65 20 66 69 6c 65 22 3b 20 20  atabase file";  
1fb0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1fc0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 45     case SQLITE_E
1fd0: 4d 50 54 59 3a 20 20 20 20 20 20 7a 20 3d 20 22  MPTY:      z = "
1fe0: 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 6e  table contains n
1ff0: 6f 20 64 61 74 61 22 3b 20 20 20 20 20 20 20 20  o data";        
2000: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
2010: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 53     case SQLITE_S
2020: 43 48 45 4d 41 3a 20 20 20 20 20 7a 20 3d 20 22  CHEMA:     z = "
2030: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
2040: 68 61 73 20 63 68 61 6e 67 65 64 22 3b 20 20 20  has changed";   
2050: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
2060: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54     case SQLITE_T
2070: 4f 4f 42 49 47 3a 20 20 20 20 20 7a 20 3d 20 22  OOBIG:     z = "
2080: 53 74 72 69 6e 67 20 6f 72 20 42 4c 4f 42 20 65  String or BLOB e
2090: 78 63 65 65 64 65 64 20 73 69 7a 65 20 6c 69 6d  xceeded size lim
20a0: 69 74 22 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20  it";    break;. 
20b0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43     case SQLITE_C
20c0: 4f 4e 53 54 52 41 49 4e 54 3a 20 7a 20 3d 20 22  ONSTRAINT: z = "
20d0: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
20e0: 64 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  d";             
20f0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
2100: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4d     case SQLITE_M
2110: 49 53 4d 41 54 43 48 3a 20 20 20 7a 20 3d 20 22  ISMATCH:   z = "
2120: 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63  datatype mismatc
2130: 68 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  h";             
2140: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
2150: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4d     case SQLITE_M
2160: 49 53 55 53 45 3a 20 20 20 20 20 7a 20 3d 20 22  ISUSE:     z = "
2170: 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e 65 20  library routine 
2180: 63 61 6c 6c 65 64 20 6f 75 74 20 6f 66 20 73 65  called out of se
2190: 71 75 65 6e 63 65 22 3b 62 72 65 61 6b 3b 0a 20  quence";break;. 
21a0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e     case SQLITE_N
21b0: 4f 4c 46 53 3a 20 20 20 20 20 20 7a 20 3d 20 22  OLFS:      z = "
21c0: 6b 65 72 6e 65 6c 20 6c 61 63 6b 73 20 6c 61 72  kernel lacks lar
21d0: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 22  ge file support"
21e0: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
21f0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 41     case SQLITE_A
2200: 55 54 48 3a 20 20 20 20 20 20 20 7a 20 3d 20 22  UTH:       z = "
2210: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 64 65  authorization de
2220: 6e 69 65 64 22 3b 20 20 20 20 20 20 20 20 20 20  nied";          
2230: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
2240: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 46     case SQLITE_F
2250: 4f 52 4d 41 54 3a 20 20 20 20 20 7a 20 3d 20 22  ORMAT:     z = "
2260: 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
2270: 73 65 20 66 6f 72 6d 61 74 20 65 72 72 6f 72 22  se format error"
2280: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
2290: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52     case SQLITE_R
22a0: 41 4e 47 45 3a 20 20 20 20 20 20 7a 20 3d 20 22  ANGE:      z = "
22b0: 62 69 6e 64 20 6f 72 20 63 6f 6c 75 6d 6e 20 69  bind or column i
22c0: 6e 64 65 78 20 6f 75 74 20 6f 66 20 72 61 6e 67  ndex out of rang
22d0: 65 22 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  e";     break;. 
22e0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e     case SQLITE_N
22f0: 4f 54 41 44 42 3a 20 20 20 20 20 7a 20 3d 20 22  OTADB:     z = "
2300: 66 69 6c 65 20 69 73 20 65 6e 63 72 79 70 74 65  file is encrypte
2310: 64 20 6f 72 20 69 73 20 6e 6f 74 20 61 20 64 61  d or is not a da
2320: 74 61 62 61 73 65 22 3b 62 72 65 61 6b 3b 0a 20  tabase";break;. 
2330: 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20     default:     
2340: 20 20 20 20 20 20 20 20 20 20 20 7a 20 3d 20 22             z = "
2350: 75 6e 6b 6e 6f 77 6e 20 65 72 72 6f 72 22 3b 20  unknown error"; 
2360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2370: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
2380: 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d   }.  return z;.}
2390: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ../*.** This rou
23a0: 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20  tine implements 
23b0: 61 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  a busy callback 
23c0: 74 68 61 74 20 73 6c 65 65 70 73 20 61 6e 64 20  that sleeps and 
23d0: 74 72 69 65 73 0a 2a 2a 20 61 67 61 69 6e 20 75  tries.** again u
23e0: 6e 74 69 6c 20 61 20 74 69 6d 65 6f 75 74 20 76  ntil a timeout v
23f0: 61 6c 75 65 20 69 73 20 72 65 61 63 68 65 64 2e  alue is reached.
2400: 20 20 54 68 65 20 74 69 6d 65 6f 75 74 20 76 61    The timeout va
2410: 6c 75 65 20 69 73 0a 2a 2a 20 61 6e 20 69 6e 74  lue is.** an int
2420: 65 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 6d  eger number of m
2430: 69 6c 6c 69 73 65 63 6f 6e 64 73 20 70 61 73 73  illiseconds pass
2440: 65 64 20 69 6e 20 61 73 20 74 68 65 20 66 69 72  ed in as the fir
2450: 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a  st.** argument..
2460: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
2470: 6c 69 74 65 44 65 66 61 75 6c 74 42 75 73 79 43  liteDefaultBusyC
2480: 61 6c 6c 62 61 63 6b 28 0a 20 76 6f 69 64 20 2a  allback(. void *
2490: 70 74 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  ptr,            
24a0: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63     /* Database c
24b0: 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 69 6e  onnection */. in
24c0: 74 20 63 6f 75 6e 74 20 20 20 20 20 20 20 20 20  t count         
24d0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
24e0: 20 6f 66 20 74 69 6d 65 73 20 74 61 62 6c 65 20   of times table 
24f0: 68 61 73 20 62 65 65 6e 20 62 75 73 79 20 2a 2f  has been busy */
2500: 0a 29 7b 0a 23 69 66 20 4f 53 5f 57 49 4e 20 7c  .){.#if OS_WIN |
2510: 7c 20 28 64 65 66 69 6e 65 64 28 48 41 56 45 5f  | (defined(HAVE_
2520: 55 53 4c 45 45 50 29 20 26 26 20 48 41 56 45 5f  USLEEP) && HAVE_
2530: 55 53 4c 45 45 50 29 0a 20 20 73 74 61 74 69 63  USLEEP).  static
2540: 20 63 6f 6e 73 74 20 75 38 20 64 65 6c 61 79 73   const u8 delays
2550: 5b 5d 20 3d 0a 20 20 20 20 20 7b 20 31 2c 20 32  [] =.     { 1, 2
2560: 2c 20 35 2c 20 31 30 2c 20 31 35 2c 20 32 30 2c  , 5, 10, 15, 20,
2570: 20 32 35 2c 20 32 35 2c 20 20 32 35 2c 20 20 35   25, 25,  25,  5
2580: 30 2c 20 20 35 30 2c 20 31 30 30 20 7d 3b 0a 20  0,  50, 100 };. 
2590: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38   static const u8
25a0: 20 74 6f 74 61 6c 73 5b 5d 20 3d 0a 20 20 20 20   totals[] =.    
25b0: 20 7b 20 30 2c 20 31 2c 20 33 2c 20 20 38 2c 20   { 0, 1, 3,  8, 
25c0: 31 38 2c 20 33 33 2c 20 35 33 2c 20 37 38 2c 20  18, 33, 53, 78, 
25d0: 31 30 33 2c 20 31 32 38 2c 20 31 37 38 2c 20 32  103, 128, 178, 2
25e0: 32 38 20 7d 3b 0a 23 20 64 65 66 69 6e 65 20 4e  28 };.# define N
25f0: 44 45 4c 41 59 20 28 73 69 7a 65 6f 66 28 64 65  DELAY (sizeof(de
2600: 6c 61 79 73 29 2f 73 69 7a 65 6f 66 28 64 65 6c  lays)/sizeof(del
2610: 61 79 73 5b 30 5d 29 29 0a 20 20 69 6e 74 20 74  ays[0])).  int t
2620: 69 6d 65 6f 75 74 20 3d 20 28 28 73 71 6c 69 74  imeout = ((sqlit
2630: 65 33 20 2a 29 70 74 72 29 2d 3e 62 75 73 79 54  e3 *)ptr)->busyT
2640: 69 6d 65 6f 75 74 3b 0a 20 20 69 6e 74 20 64 65  imeout;.  int de
2650: 6c 61 79 2c 20 70 72 69 6f 72 3b 0a 0a 20 20 61  lay, prior;..  a
2660: 73 73 65 72 74 28 20 63 6f 75 6e 74 3e 3d 30 20  ssert( count>=0 
2670: 29 3b 0a 20 20 69 66 28 20 63 6f 75 6e 74 20 3c  );.  if( count <
2680: 20 4e 44 45 4c 41 59 20 29 7b 0a 20 20 20 20 64   NDELAY ){.    d
2690: 65 6c 61 79 20 3d 20 64 65 6c 61 79 73 5b 63 6f  elay = delays[co
26a0: 75 6e 74 5d 3b 0a 20 20 20 20 70 72 69 6f 72 20  unt];.    prior 
26b0: 3d 20 74 6f 74 61 6c 73 5b 63 6f 75 6e 74 5d 3b  = totals[count];
26c0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 64 65  .  }else{.    de
26d0: 6c 61 79 20 3d 20 64 65 6c 61 79 73 5b 4e 44 45  lay = delays[NDE
26e0: 4c 41 59 2d 31 5d 3b 0a 20 20 20 20 70 72 69 6f  LAY-1];.    prio
26f0: 72 20 3d 20 74 6f 74 61 6c 73 5b 4e 44 45 4c 41  r = totals[NDELA
2700: 59 2d 31 5d 20 2b 20 64 65 6c 61 79 2a 28 63 6f  Y-1] + delay*(co
2710: 75 6e 74 2d 28 4e 44 45 4c 41 59 2d 31 29 29 3b  unt-(NDELAY-1));
2720: 0a 20 20 7d 0a 20 20 69 66 28 20 70 72 69 6f 72  .  }.  if( prior
2730: 20 2b 20 64 65 6c 61 79 20 3e 20 74 69 6d 65 6f   + delay > timeo
2740: 75 74 20 29 7b 0a 20 20 20 20 64 65 6c 61 79 20  ut ){.    delay 
2750: 3d 20 74 69 6d 65 6f 75 74 20 2d 20 70 72 69 6f  = timeout - prio
2760: 72 3b 0a 20 20 20 20 69 66 28 20 64 65 6c 61 79  r;.    if( delay
2770: 3c 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  <=0 ) return 0;.
2780: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 4f 73 53    }.  sqlite3OsS
2790: 6c 65 65 70 28 64 65 6c 61 79 29 3b 0a 20 20 72  leep(delay);.  r
27a0: 65 74 75 72 6e 20 31 3b 0a 23 65 6c 73 65 0a 20  eturn 1;.#else. 
27b0: 20 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20 28   int timeout = (
27c0: 28 73 71 6c 69 74 65 33 20 2a 29 70 74 72 29 2d  (sqlite3 *)ptr)-
27d0: 3e 62 75 73 79 54 69 6d 65 6f 75 74 3b 0a 20 20  >busyTimeout;.  
27e0: 69 66 28 20 28 63 6f 75 6e 74 2b 31 29 2a 31 30  if( (count+1)*10
27f0: 30 30 20 3e 20 74 69 6d 65 6f 75 74 20 29 7b 0a  00 > timeout ){.
2800: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
2810: 7d 0a 20 20 73 71 6c 69 74 65 33 4f 73 53 6c 65  }.  sqlite3OsSle
2820: 65 70 28 31 30 30 30 29 3b 0a 20 20 72 65 74 75  ep(1000);.  retu
2830: 72 6e 20 31 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a  rn 1;.#endif.}..
2840: 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  /*.** Invoke the
2850: 20 67 69 76 65 6e 20 62 75 73 79 20 68 61 6e 64   given busy hand
2860: 6c 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ler..**.** This 
2870: 72 6f 75 74 69 6e 65 20 69 73 20 63 61 6c 6c 65  routine is calle
2880: 64 20 77 68 65 6e 20 61 6e 20 6f 70 65 72 61 74  d when an operat
2890: 69 6f 6e 20 66 61 69 6c 65 64 20 77 69 74 68 20  ion failed with 
28a0: 61 20 6c 6f 63 6b 2e 0a 2a 2a 20 49 66 20 74 68  a lock..** If th
28b0: 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72  is routine retur
28c0: 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  ns non-zero, the
28d0: 20 6c 6f 63 6b 20 69 73 20 72 65 74 72 69 65 64   lock is retried
28e0: 2e 20 20 49 66 20 69 74 0a 2a 2a 20 72 65 74 75  .  If it.** retu
28f0: 72 6e 73 20 30 2c 20 74 68 65 20 6f 70 65 72 61  rns 0, the opera
2900: 74 69 6f 6e 20 61 62 6f 72 74 73 20 77 69 74 68  tion aborts with
2910: 20 61 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 20   an SQLITE_BUSY 
2920: 65 72 72 6f 72 2e 0a 2a 2f 0a 69 6e 74 20 73 71  error..*/.int sq
2930: 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48  lite3InvokeBusyH
2940: 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c  andler(BusyHandl
2950: 65 72 20 2a 70 29 7b 0a 20 20 69 6e 74 20 72 63  er *p){.  int rc
2960: 3b 0a 20 20 69 66 28 20 70 3d 3d 30 20 7c 7c 20  ;.  if( p==0 || 
2970: 70 2d 3e 78 46 75 6e 63 3d 3d 30 20 7c 7c 20 70  p->xFunc==0 || p
2980: 2d 3e 6e 42 75 73 79 3c 30 20 29 20 72 65 74 75  ->nBusy<0 ) retu
2990: 72 6e 20 30 3b 0a 20 20 72 63 20 3d 20 70 2d 3e  rn 0;.  rc = p->
29a0: 78 46 75 6e 63 28 70 2d 3e 70 41 72 67 2c 20 70  xFunc(p->pArg, p
29b0: 2d 3e 6e 42 75 73 79 29 3b 0a 20 20 69 66 28 20  ->nBusy);.  if( 
29c0: 72 63 3d 3d 30 20 29 7b 0a 20 20 20 20 70 2d 3e  rc==0 ){.    p->
29d0: 6e 42 75 73 79 20 3d 20 2d 31 3b 0a 20 20 7d 65  nBusy = -1;.  }e
29e0: 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 42 75 73  lse{.    p->nBus
29f0: 79 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  y++;.  }.  retur
2a00: 6e 20 72 63 3b 20 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  n rc; .}../*.** 
2a10: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74  This routine set
2a20: 73 20 74 68 65 20 62 75 73 79 20 63 61 6c 6c 62  s the busy callb
2a30: 61 63 6b 20 66 6f 72 20 61 6e 20 53 71 6c 69 74  ack for an Sqlit
2a40: 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68  e database to th
2a50: 65 0a 2a 2a 20 67 69 76 65 6e 20 63 61 6c 6c 62  e.** given callb
2a60: 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ack function wit
2a70: 68 20 74 68 65 20 67 69 76 65 6e 20 61 72 67 75  h the given argu
2a80: 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  ment..*/.int sql
2a90: 69 74 65 33 5f 62 75 73 79 5f 68 61 6e 64 6c 65  ite3_busy_handle
2aa0: 72 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  r(.  sqlite3 *db
2ab0: 2c 0a 20 20 69 6e 74 20 28 2a 78 42 75 73 79 29  ,.  int (*xBusy)
2ac0: 28 76 6f 69 64 2a 2c 69 6e 74 29 2c 0a 20 20 76  (void*,int),.  v
2ad0: 6f 69 64 20 2a 70 41 72 67 0a 29 7b 0a 20 20 69  oid *pArg.){.  i
2ae0: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
2af0: 43 68 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20  Check(db) ){.   
2b00: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d   return SQLITE_M
2b10: 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 64 62 2d  ISUSE;.  }.  db-
2b20: 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 78 46 75  >busyHandler.xFu
2b30: 6e 63 20 3d 20 78 42 75 73 79 3b 0a 20 20 64 62  nc = xBusy;.  db
2b40: 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 70 41  ->busyHandler.pA
2b50: 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 64 62 2d  rg = pArg;.  db-
2b60: 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75  >busyHandler.nBu
2b70: 73 79 20 3d 20 30 3b 0a 20 20 72 65 74 75 72 6e  sy = 0;.  return
2b80: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 23   SQLITE_OK;.}..#
2b90: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2ba0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
2bb0: 42 41 43 4b 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  BACK./*.** This 
2bc0: 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68 65  routine sets the
2bd0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
2be0: 63 6b 20 66 6f 72 20 61 6e 20 53 71 6c 69 74 65  ck for an Sqlite
2bf0: 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65   database to the
2c00: 0a 2a 2a 20 67 69 76 65 6e 20 63 61 6c 6c 62 61  .** given callba
2c10: 63 6b 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  ck function with
2c20: 20 74 68 65 20 67 69 76 65 6e 20 61 72 67 75 6d   the given argum
2c30: 65 6e 74 2e 20 54 68 65 20 70 72 6f 67 72 65 73  ent. The progres
2c40: 73 20 63 61 6c 6c 62 61 63 6b 20 77 69 6c 6c 0a  s callback will.
2c50: 2a 2a 20 62 65 20 69 6e 76 6f 6b 65 64 20 65 76  ** be invoked ev
2c60: 65 72 79 20 6e 4f 70 73 20 6f 70 63 6f 64 65 73  ery nOps opcodes
2c70: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
2c80: 33 5f 70 72 6f 67 72 65 73 73 5f 68 61 6e 64 6c  3_progress_handl
2c90: 65 72 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  er(.  sqlite3 *d
2ca0: 62 2c 20 0a 20 20 69 6e 74 20 6e 4f 70 73 2c 0a  b, .  int nOps,.
2cb0: 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73    int (*xProgres
2cc0: 73 29 28 76 6f 69 64 2a 29 2c 20 0a 20 20 76 6f  s)(void*), .  vo
2cd0: 69 64 20 2a 70 41 72 67 0a 29 7b 0a 20 20 69 66  id *pArg.){.  if
2ce0: 28 20 21 73 71 6c 69 74 65 33 53 61 66 65 74 79  ( !sqlite3Safety
2cf0: 43 68 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20  Check(db) ){.   
2d00: 20 69 66 28 20 6e 4f 70 73 3e 30 20 29 7b 0a 20   if( nOps>0 ){. 
2d10: 20 20 20 20 20 64 62 2d 3e 78 50 72 6f 67 72 65       db->xProgre
2d20: 73 73 20 3d 20 78 50 72 6f 67 72 65 73 73 3b 0a  ss = xProgress;.
2d30: 20 20 20 20 20 20 64 62 2d 3e 6e 50 72 6f 67 72        db->nProgr
2d40: 65 73 73 4f 70 73 20 3d 20 6e 4f 70 73 3b 0a 20  essOps = nOps;. 
2d50: 20 20 20 20 20 64 62 2d 3e 70 50 72 6f 67 72 65       db->pProgre
2d60: 73 73 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20  ssArg = pArg;.  
2d70: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64    }else{.      d
2d80: 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 3d 20 30  b->xProgress = 0
2d90: 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6e 50 72 6f  ;.      db->nPro
2da0: 67 72 65 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20  gressOps = 0;.  
2db0: 20 20 20 20 64 62 2d 3e 70 50 72 6f 67 72 65 73      db->pProgres
2dc0: 73 41 72 67 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  sArg = 0;.    }.
2dd0: 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f    }.}.#endif.../
2de0: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
2df0: 65 20 69 6e 73 74 61 6c 6c 73 20 61 20 64 65 66  e installs a def
2e00: 61 75 6c 74 20 62 75 73 79 20 68 61 6e 64 6c 65  ault busy handle
2e10: 72 20 74 68 61 74 20 77 61 69 74 73 20 66 6f 72  r that waits for
2e20: 20 74 68 65 0a 2a 2a 20 73 70 65 63 69 66 69 65   the.** specifie
2e30: 64 20 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c  d number of mill
2e40: 69 73 65 63 6f 6e 64 73 20 62 65 66 6f 72 65 20  iseconds before 
2e50: 72 65 74 75 72 6e 69 6e 67 20 30 2e 0a 2a 2f 0a  returning 0..*/.
2e60: 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 75 73 79  int sqlite3_busy
2e70: 5f 74 69 6d 65 6f 75 74 28 73 71 6c 69 74 65 33  _timeout(sqlite3
2e80: 20 2a 64 62 2c 20 69 6e 74 20 6d 73 29 7b 0a 20   *db, int ms){. 
2e90: 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
2ea0: 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b 0a 20  tyCheck(db) ){. 
2eb0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
2ec0: 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 69  _MISUSE;.  }.  i
2ed0: 66 28 20 6d 73 3e 30 20 29 7b 0a 20 20 20 20 64  f( ms>0 ){.    d
2ee0: 62 2d 3e 62 75 73 79 54 69 6d 65 6f 75 74 20 3d  b->busyTimeout =
2ef0: 20 6d 73 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   ms;.    sqlite3
2f00: 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 64 62  _busy_handler(db
2f10: 2c 20 73 71 6c 69 74 65 44 65 66 61 75 6c 74 42  , sqliteDefaultB
2f20: 75 73 79 43 61 6c 6c 62 61 63 6b 2c 20 28 76 6f  usyCallback, (vo
2f30: 69 64 2a 29 64 62 29 3b 0a 20 20 7d 65 6c 73 65  id*)db);.  }else
2f40: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 75  {.    sqlite3_bu
2f50: 73 79 5f 68 61 6e 64 6c 65 72 28 64 62 2c 20 30  sy_handler(db, 0
2f60: 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  , 0);.  }.  retu
2f70: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
2f80: 0a 2f 2a 0a 2a 2a 20 43 61 75 73 65 20 61 6e 79  ./*.** Cause any
2f90: 20 70 65 6e 64 69 6e 67 20 6f 70 65 72 61 74 69   pending operati
2fa0: 6f 6e 20 74 6f 20 73 74 6f 70 20 61 74 20 69 74  on to stop at it
2fb0: 73 20 65 61 72 6c 69 65 73 74 20 6f 70 70 6f 72  s earliest oppor
2fc0: 74 75 6e 69 74 79 2e 0a 2a 2f 0a 76 6f 69 64 20  tunity..*/.void 
2fd0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
2fe0: 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  t(sqlite3 *db){.
2ff0: 20 20 69 66 28 20 64 62 20 26 26 20 28 64 62 2d    if( db && (db-
3000: 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d  >magic==SQLITE_M
3010: 41 47 49 43 5f 4f 50 45 4e 20 7c 7c 20 64 62 2d  AGIC_OPEN || db-
3020: 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d  >magic==SQLITE_M
3030: 41 47 49 43 5f 42 55 53 59 29 20 29 7b 0a 20 20  AGIC_BUSY) ){.  
3040: 20 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72    db->u1.isInter
3050: 72 75 70 74 65 64 20 3d 20 31 3b 0a 20 20 7d 0a  rupted = 1;.  }.
3060: 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  }.../*.** This f
3070: 75 6e 63 74 69 6f 6e 20 69 73 20 65 78 61 63 74  unction is exact
3080: 6c 79 20 74 68 65 20 73 61 6d 65 20 61 73 20 73  ly the same as s
3090: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
30a0: 6e 63 74 69 6f 6e 28 29 2c 20 65 78 63 65 70 74  nction(), except
30b0: 0a 2a 2a 20 74 68 61 74 20 69 74 20 69 73 20 64  .** that it is d
30c0: 65 73 69 67 6e 65 64 20 74 6f 20 62 65 20 63 61  esigned to be ca
30d0: 6c 6c 65 64 20 62 79 20 69 6e 74 65 72 6e 61 6c  lled by internal
30e0: 20 63 6f 64 65 2e 20 54 68 65 20 64 69 66 66 65   code. The diffe
30f0: 72 65 6e 63 65 20 69 73 0a 2a 2a 20 74 68 61 74  rence is.** that
3100: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
3110: 61 69 6c 73 20 69 6e 20 73 71 6c 69 74 65 33 5f  ails in sqlite3_
3120: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
3130: 29 2c 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65  ), an error code
3140: 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 20  .** is returned 
3150: 61 6e 64 20 74 68 65 20 6d 61 6c 6c 6f 63 46 61  and the mallocFa
3160: 69 6c 65 64 20 66 6c 61 67 20 63 6c 65 61 72 65  iled flag cleare
3170: 64 2e 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  d. .*/.int sqlit
3180: 65 33 43 72 65 61 74 65 46 75 6e 63 28 0a 20 20  e3CreateFunc(.  
3190: 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20 63  sqlite3 *db,.  c
31a0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 75 6e 63  onst char *zFunc
31b0: 74 69 6f 6e 4e 61 6d 65 2c 0a 20 20 69 6e 74 20  tionName,.  int 
31c0: 6e 41 72 67 2c 0a 20 20 69 6e 74 20 65 6e 63 2c  nArg,.  int enc,
31d0: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61  .  void *pUserDa
31e0: 74 61 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46 75  ta,.  void (*xFu
31f0: 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  nc)(sqlite3_cont
3200: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
3210: 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f  _value **),.  vo
3220: 69 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69  id (*xStep)(sqli
3230: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
3240: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
3250: 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46 69  *),.  void (*xFi
3260: 6e 61 6c 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  nal)(sqlite3_con
3270: 74 65 78 74 2a 29 0a 29 7b 0a 20 20 46 75 6e 63  text*).){.  Func
3280: 44 65 66 20 2a 70 3b 0a 20 20 69 6e 74 20 6e 4e  Def *p;.  int nN
3290: 61 6d 65 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69  ame;..  if( sqli
32a0: 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 64  te3SafetyCheck(d
32b0: 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  b) ){.    return
32c0: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a   SQLITE_MISUSE;.
32d0: 20 20 7d 0a 20 20 69 66 28 20 7a 46 75 6e 63 74    }.  if( zFunct
32e0: 69 6f 6e 4e 61 6d 65 3d 3d 30 20 7c 7c 0a 20 20  ionName==0 ||.  
32f0: 20 20 20 20 28 78 46 75 6e 63 20 26 26 20 28 78      (xFunc && (x
3300: 46 69 6e 61 6c 20 7c 7c 20 78 53 74 65 70 29 29  Final || xStep))
3310: 20 7c 7c 20 0a 20 20 20 20 20 20 28 21 78 46 75   || .      (!xFu
3320: 6e 63 20 26 26 20 28 78 46 69 6e 61 6c 20 26 26  nc && (xFinal &&
3330: 20 21 78 53 74 65 70 29 29 20 7c 7c 0a 20 20 20   !xStep)) ||.   
3340: 20 20 20 28 21 78 46 75 6e 63 20 26 26 20 28 21     (!xFunc && (!
3350: 78 46 69 6e 61 6c 20 26 26 20 78 53 74 65 70 29  xFinal && xStep)
3360: 29 20 7c 7c 0a 20 20 20 20 20 20 28 6e 41 72 67  ) ||.      (nArg
3370: 3c 2d 31 20 7c 7c 20 6e 41 72 67 3e 31 32 37 29  <-1 || nArg>127)
3380: 20 7c 7c 0a 20 20 20 20 20 20 28 32 35 35 3c 28   ||.      (255<(
3390: 6e 4e 61 6d 65 20 3d 20 73 74 72 6c 65 6e 28 7a  nName = strlen(z
33a0: 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 29 29 29 20  FunctionName))) 
33b0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72  ){.    sqlite3Er
33c0: 72 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 45  ror(db, SQLITE_E
33d0: 52 52 4f 52 2c 20 22 62 61 64 20 70 61 72 61 6d  RROR, "bad param
33e0: 65 74 65 72 73 22 29 3b 0a 20 20 20 20 72 65 74  eters");.    ret
33f0: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
3400: 3b 0a 20 20 7d 0a 20 20 0a 23 69 66 6e 64 65 66  ;.  }.  .#ifndef
3410: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
3420: 31 36 0a 20 20 2f 2a 20 49 66 20 53 51 4c 49 54  16.  /* If SQLIT
3430: 45 5f 55 54 46 31 36 20 69 73 20 73 70 65 63 69  E_UTF16 is speci
3440: 66 69 65 64 20 61 73 20 74 68 65 20 65 6e 63 6f  fied as the enco
3450: 64 69 6e 67 20 74 79 70 65 2c 20 74 72 61 6e 73  ding type, trans
3460: 66 6f 72 6d 20 74 68 69 73 0a 20 20 2a 2a 20 74  form this.  ** t
3470: 6f 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f  o one of SQLITE_
3480: 55 54 46 31 36 4c 45 20 6f 72 20 53 51 4c 49 54  UTF16LE or SQLIT
3490: 45 5f 55 54 46 31 36 42 45 20 75 73 69 6e 67 20  E_UTF16BE using 
34a0: 74 68 65 0a 20 20 2a 2a 20 53 51 4c 49 54 45 5f  the.  ** SQLITE_
34b0: 55 54 46 31 36 4e 41 54 49 56 45 20 6d 61 63 72  UTF16NATIVE macr
34c0: 6f 2e 20 53 51 4c 49 54 45 5f 55 54 46 31 36 20  o. SQLITE_UTF16 
34d0: 69 73 20 6e 6f 74 20 75 73 65 64 20 69 6e 74 65  is not used inte
34e0: 72 6e 61 6c 6c 79 2e 0a 20 20 2a 2a 0a 20 20 2a  rnally..  **.  *
34f0: 2a 20 49 66 20 53 51 4c 49 54 45 5f 41 4e 59 20  * If SQLITE_ANY 
3500: 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 61 64  is specified, ad
3510: 64 20 74 68 72 65 65 20 76 65 72 73 69 6f 6e 73  d three versions
3520: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
3530: 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 68 61 73  .  ** to the has
3540: 68 20 74 61 62 6c 65 2e 0a 20 20 2a 2f 0a 20 20  h table..  */.  
3550: 69 66 28 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  if( enc==SQLITE_
3560: 55 54 46 31 36 20 29 7b 0a 20 20 20 20 65 6e 63  UTF16 ){.    enc
3570: 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e   = SQLITE_UTF16N
3580: 41 54 49 56 45 3b 0a 20 20 7d 65 6c 73 65 20 69  ATIVE;.  }else i
3590: 66 28 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 41  f( enc==SQLITE_A
35a0: 4e 59 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 63  NY ){.    int rc
35b0: 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
35c0: 65 33 43 72 65 61 74 65 46 75 6e 63 28 64 62 2c  e3CreateFunc(db,
35d0: 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20   zFunctionName, 
35e0: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
35f0: 38 2c 0a 20 20 20 20 20 20 20 20 20 70 55 73 65  8,.         pUse
3600: 72 44 61 74 61 2c 20 78 46 75 6e 63 2c 20 78 53  rData, xFunc, xS
3610: 74 65 70 2c 20 78 46 69 6e 61 6c 29 3b 0a 20 20  tep, xFinal);.  
3620: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
3630: 5f 4f 4b 20 29 20 72 65 74 75 72 6e 20 72 63 3b  _OK ) return rc;
3640: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
3650: 33 43 72 65 61 74 65 46 75 6e 63 28 64 62 2c 20  3CreateFunc(db, 
3660: 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e  zFunctionName, n
3670: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  Arg, SQLITE_UTF1
3680: 36 4c 45 2c 0a 20 20 20 20 20 20 20 20 70 55 73  6LE,.        pUs
3690: 65 72 44 61 74 61 2c 20 78 46 75 6e 63 2c 20 78  erData, xFunc, x
36a0: 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 3b 0a 20  Step, xFinal);. 
36b0: 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
36c0: 45 5f 4f 4b 20 29 20 72 65 74 75 72 6e 20 72 63  E_OK ) return rc
36d0: 3b 0a 20 20 20 20 65 6e 63 20 3d 20 53 51 4c 49  ;.    enc = SQLI
36e0: 54 45 5f 55 54 46 31 36 42 45 3b 0a 20 20 7d 0a  TE_UTF16BE;.  }.
36f0: 23 65 6c 73 65 0a 20 20 65 6e 63 20 3d 20 53 51  #else.  enc = SQ
3700: 4c 49 54 45 5f 55 54 46 38 3b 0a 23 65 6e 64 69  LITE_UTF8;.#endi
3710: 66 0a 20 20 0a 20 20 2f 2a 20 43 68 65 63 6b 20  f.  .  /* Check 
3720: 69 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 66  if an existing f
3730: 75 6e 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67  unction is being
3740: 20 6f 76 65 72 72 69 64 64 65 6e 20 6f 72 20 64   overridden or d
3750: 65 6c 65 74 65 64 2e 20 49 66 20 73 6f 2c 0a 20  eleted. If so,. 
3760: 20 2a 2a 20 61 6e 64 20 74 68 65 72 65 20 61 72   ** and there ar
3770: 65 20 61 63 74 69 76 65 20 56 4d 73 2c 20 74 68  e active VMs, th
3780: 65 6e 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  en return SQLITE
3790: 5f 42 55 53 59 2e 20 49 66 20 61 20 66 75 6e 63  _BUSY. If a func
37a0: 74 69 6f 6e 0a 20 20 2a 2a 20 69 73 20 62 65 69  tion.  ** is bei
37b0: 6e 67 20 6f 76 65 72 72 69 64 64 65 6e 2f 64 65  ng overridden/de
37c0: 6c 65 74 65 64 20 62 75 74 20 74 68 65 72 65 20  leted but there 
37d0: 61 72 65 20 6e 6f 20 61 63 74 69 76 65 20 56 4d  are no active VM
37e0: 73 2c 20 61 6c 6c 6f 77 20 74 68 65 0a 20 20 2a  s, allow the.  *
37f0: 2a 20 6f 70 65 72 61 74 69 6f 6e 20 74 6f 20 63  * operation to c
3800: 6f 6e 74 69 6e 75 65 20 62 75 74 20 69 6e 76 61  ontinue but inva
3810: 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65 63 6f  lidate all preco
3820: 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74  mpiled statement
3830: 73 2e 0a 20 20 2a 2f 0a 20 20 70 20 3d 20 73 71  s..  */.  p = sq
3840: 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f  lite3FindFunctio
3850: 6e 28 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e  n(db, zFunctionN
3860: 61 6d 65 2c 20 6e 4e 61 6d 65 2c 20 6e 41 72 67  ame, nName, nArg
3870: 2c 20 65 6e 63 2c 20 30 29 3b 0a 20 20 69 66 28  , enc, 0);.  if(
3880: 20 70 20 26 26 20 70 2d 3e 69 50 72 65 66 45 6e   p && p->iPrefEn
3890: 63 3d 3d 65 6e 63 20 26 26 20 70 2d 3e 6e 41 72  c==enc && p->nAr
38a0: 67 3d 3d 6e 41 72 67 20 29 7b 0a 20 20 20 20 69  g==nArg ){.    i
38b0: 66 28 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62  f( db->activeVdb
38c0: 65 43 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71  eCnt ){.      sq
38d0: 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53  lite3Error(db, S
38e0: 51 4c 49 54 45 5f 42 55 53 59 2c 20 0a 20 20 20  QLITE_BUSY, .   
38f0: 20 20 20 20 20 22 55 6e 61 62 6c 65 20 74 6f 20       "Unable to 
3900: 64 65 6c 65 74 65 2f 6d 6f 64 69 66 79 20 75 73  delete/modify us
3910: 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 75 65 20  er-function due 
3920: 74 6f 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  to active statem
3930: 65 6e 74 73 22 29 3b 0a 20 20 20 20 20 20 61 73  ents");.      as
3940: 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f  sert( !db->mallo
3950: 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 20  cFailed );.     
3960: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 42   return SQLITE_B
3970: 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  USY;.    }else{.
3980: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70        sqlite3Exp
3990: 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
39a0: 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 7d  ments(db);.    }
39b0: 0a 20 20 7d 0a 0a 20 20 70 20 3d 20 73 71 6c 69  .  }..  p = sqli
39c0: 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28  te3FindFunction(
39d0: 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d  db, zFunctionNam
39e0: 65 2c 20 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  e, nName, nArg, 
39f0: 65 6e 63 2c 20 31 29 3b 0a 20 20 69 66 28 20 70  enc, 1);.  if( p
3a00: 20 29 7b 0a 20 20 20 20 70 2d 3e 66 6c 61 67 73   ){.    p->flags
3a10: 20 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 78 46 75   = 0;.    p->xFu
3a20: 6e 63 20 3d 20 78 46 75 6e 63 3b 0a 20 20 20 20  nc = xFunc;.    
3a30: 70 2d 3e 78 53 74 65 70 20 3d 20 78 53 74 65 70  p->xStep = xStep
3a40: 3b 0a 20 20 20 20 70 2d 3e 78 46 69 6e 61 6c 69  ;.    p->xFinali
3a50: 7a 65 20 3d 20 78 46 69 6e 61 6c 3b 0a 20 20 20  ze = xFinal;.   
3a60: 20 70 2d 3e 70 55 73 65 72 44 61 74 61 20 3d 20   p->pUserData = 
3a70: 70 55 73 65 72 44 61 74 61 3b 0a 20 20 20 20 70  pUserData;.    p
3a80: 2d 3e 6e 41 72 67 20 3d 20 6e 41 72 67 3b 0a 20  ->nArg = nArg;. 
3a90: 20 7d 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49   }.  return SQLI
3aa0: 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  TE_OK;.}../*.** 
3ab0: 43 72 65 61 74 65 20 6e 65 77 20 75 73 65 72 20  Create new user 
3ac0: 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 69 6e  functions..*/.in
3ad0: 74 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  t sqlite3_create
3ae0: 5f 66 75 6e 63 74 69 6f 6e 28 0a 20 20 73 71 6c  _function(.  sql
3af0: 69 74 65 33 20 2a 64 62 2c 0a 20 20 63 6f 6e 73  ite3 *db,.  cons
3b00: 74 20 63 68 61 72 20 2a 7a 46 75 6e 63 74 69 6f  t char *zFunctio
3b10: 6e 4e 61 6d 65 2c 0a 20 20 69 6e 74 20 6e 41 72  nName,.  int nAr
3b20: 67 2c 0a 20 20 69 6e 74 20 65 6e 63 2c 0a 20 20  g,.  int enc,.  
3b30: 76 6f 69 64 20 2a 70 2c 0a 20 20 76 6f 69 64 20  void *p,.  void 
3b40: 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33  (*xFunc)(sqlite3
3b50: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
3b60: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
3b70: 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29  .  void (*xStep)
3b80: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
3b90: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
3ba0: 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20  lue **),.  void 
3bb0: 28 2a 78 46 69 6e 61 6c 29 28 73 71 6c 69 74 65  (*xFinal)(sqlite
3bc0: 33 5f 63 6f 6e 74 65 78 74 2a 29 0a 29 7b 0a 20  3_context*).){. 
3bd0: 20 69 6e 74 20 72 63 3b 0a 20 20 61 73 73 65 72   int rc;.  asser
3be0: 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  t( !db->mallocFa
3bf0: 69 6c 65 64 20 29 3b 0a 20 20 72 63 20 3d 20 73  iled );.  rc = s
3c00: 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63  qlite3CreateFunc
3c10: 28 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61  (db, zFunctionNa
3c20: 6d 65 2c 20 6e 41 72 67 2c 20 65 6e 63 2c 20 70  me, nArg, enc, p
3c30: 2c 20 78 46 75 6e 63 2c 20 78 53 74 65 70 2c 20  , xFunc, xStep, 
3c40: 78 46 69 6e 61 6c 29 3b 0a 0a 20 20 72 65 74 75  xFinal);..  retu
3c50: 72 6e 20 73 71 6c 69 74 65 33 41 70 69 45 78 69  rn sqlite3ApiExi
3c60: 74 28 64 62 2c 20 72 63 29 3b 0a 7d 0a 0a 23 69  t(db, rc);.}..#i
3c70: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
3c80: 54 5f 55 54 46 31 36 0a 69 6e 74 20 73 71 6c 69  T_UTF16.int sqli
3c90: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
3ca0: 69 6f 6e 31 36 28 0a 20 20 73 71 6c 69 74 65 33  ion16(.  sqlite3
3cb0: 20 2a 64 62 2c 0a 20 20 63 6f 6e 73 74 20 76 6f   *db,.  const vo
3cc0: 69 64 20 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d  id *zFunctionNam
3cd0: 65 2c 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20  e,.  int nArg,. 
3ce0: 20 69 6e 74 20 65 54 65 78 74 52 65 70 2c 0a 20   int eTextRep,. 
3cf0: 20 76 6f 69 64 20 2a 70 2c 0a 20 20 76 6f 69 64   void *p,.  void
3d00: 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65   (*xFunc)(sqlite
3d10: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
3d20: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 2c  qlite3_value**),
3d30: 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29  .  void (*xStep)
3d40: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
3d50: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
3d60: 6c 75 65 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28  lue**),.  void (
3d70: 2a 78 46 69 6e 61 6c 29 28 73 71 6c 69 74 65 33  *xFinal)(sqlite3
3d80: 5f 63 6f 6e 74 65 78 74 2a 29 0a 29 7b 0a 20 20  _context*).){.  
3d90: 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20 2a  int rc;.  char *
3da0: 7a 46 75 6e 63 38 3b 0a 20 20 61 73 73 65 72 74  zFunc8;.  assert
3db0: 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  ( !db->mallocFai
3dc0: 6c 65 64 20 29 3b 0a 0a 20 20 7a 46 75 6e 63 38  led );..  zFunc8
3dd0: 20 3d 20 73 71 6c 69 74 65 33 55 74 66 31 36 74   = sqlite3Utf16t
3de0: 6f 38 28 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65  o8(zFunctionName
3df0: 2c 20 2d 31 29 3b 0a 20 20 72 63 20 3d 20 73 71  , -1);.  rc = sq
3e00: 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28  lite3CreateFunc(
3e10: 64 62 2c 20 7a 46 75 6e 63 38 2c 20 6e 41 72 67  db, zFunc8, nArg
3e20: 2c 20 65 54 65 78 74 52 65 70 2c 20 70 2c 20 78  , eTextRep, p, x
3e30: 46 75 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69  Func, xStep, xFi
3e40: 6e 61 6c 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  nal);.  sqlite3_
3e50: 66 72 65 65 28 7a 46 75 6e 63 38 29 3b 0a 0a 20  free(zFunc8);.. 
3e60: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 41   return sqlite3A
3e70: 70 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b 0a  piExit(db, rc);.
3e80: 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a  }.#endif.../*.**
3e90: 20 44 65 63 6c 61 72 65 20 74 68 61 74 20 61 20   Declare that a 
3ea0: 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 62 65 65  function has bee
3eb0: 6e 20 6f 76 65 72 6c 6f 61 64 65 64 20 62 79 20  n overloaded by 
3ec0: 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
3ed0: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 66 75  .**.** If the fu
3ee0: 6e 63 74 69 6f 6e 20 61 6c 72 65 61 64 79 20 65  nction already e
3ef0: 78 69 73 74 73 20 61 73 20 61 20 72 65 67 75 6c  xists as a regul
3f00: 61 72 20 67 6c 6f 62 61 6c 20 66 75 6e 63 74 69  ar global functi
3f10: 6f 6e 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 69 73  on, then.** this
3f20: 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f   routine is a no
3f30: 2d 6f 70 2e 20 20 49 66 20 74 68 65 20 66 75 6e  -op.  If the fun
3f40: 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 65  ction does not e
3f50: 78 69 73 74 2c 20 74 68 65 6e 20 63 72 65 61 74  xist, then creat
3f60: 65 0a 2a 2a 20 61 20 6e 65 77 20 6f 6e 65 20 74  e.** a new one t
3f70: 68 61 74 20 61 6c 77 61 79 73 20 74 68 72 6f 77  hat always throw
3f80: 73 20 61 20 72 75 6e 2d 74 69 6d 65 20 65 72 72  s a run-time err
3f90: 6f 72 2e 20 20 0a 2a 2a 0a 2a 2a 20 57 68 65 6e  or.  .**.** When
3fa0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
3fb0: 69 6e 74 65 6e 64 20 74 6f 20 70 72 6f 76 69 64  intend to provid
3fc0: 65 20 61 6e 20 6f 76 65 72 6c 6f 61 64 65 64 20  e an overloaded 
3fd0: 66 75 6e 63 74 69 6f 6e 2c 20 74 68 65 79 0a 2a  function, they.*
3fe0: 2a 20 73 68 6f 75 6c 64 20 63 61 6c 6c 20 74 68  * should call th
3ff0: 69 73 20 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61  is routine to ma
4000: 6b 65 20 73 75 72 65 20 74 68 65 20 67 6c 6f 62  ke sure the glob
4010: 61 6c 20 66 75 6e 63 74 69 6f 6e 20 65 78 69 73  al function exis
4020: 74 73 2e 0a 2a 2a 20 41 20 67 6c 6f 62 61 6c 20  ts..** A global 
4030: 66 75 6e 63 74 69 6f 6e 20 6d 75 73 74 20 65 78  function must ex
4040: 69 73 74 20 69 6e 20 6f 72 64 65 72 20 66 6f 72  ist in order for
4050: 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e   name resolution
4060: 20 74 6f 20 77 6f 72 6b 0a 2a 2a 20 70 72 6f 70   to work.** prop
4070: 65 72 6c 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  erly..*/.int sql
4080: 69 74 65 33 5f 6f 76 65 72 6c 6f 61 64 5f 66 75  ite3_overload_fu
4090: 6e 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65  nction(.  sqlite
40a0: 33 20 2a 64 62 2c 0a 20 20 63 6f 6e 73 74 20 63  3 *db,.  const c
40b0: 68 61 72 20 2a 7a 4e 61 6d 65 2c 0a 20 20 69 6e  har *zName,.  in
40c0: 74 20 6e 41 72 67 0a 29 7b 0a 20 20 69 6e 74 20  t nArg.){.  int 
40d0: 6e 4e 61 6d 65 20 3d 20 73 74 72 6c 65 6e 28 7a  nName = strlen(z
40e0: 4e 61 6d 65 29 3b 0a 20 20 69 66 28 20 73 71 6c  Name);.  if( sql
40f0: 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e  ite3FindFunction
4100: 28 64 62 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d  (db, zName, nNam
4110: 65 2c 20 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f  e, nArg, SQLITE_
4120: 55 54 46 38 2c 20 30 29 3d 3d 30 20 29 7b 0a 20  UTF8, 0)==0 ){. 
4130: 20 20 20 73 71 6c 69 74 65 33 43 72 65 61 74 65     sqlite3Create
4140: 46 75 6e 63 28 64 62 2c 20 7a 4e 61 6d 65 2c 20  Func(db, zName, 
4150: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
4160: 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  8,.             
4170: 20 20 20 20 20 20 20 20 20 30 2c 20 73 71 6c 69           0, sqli
4180: 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69  te3InvalidFuncti
4190: 6f 6e 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20  on, 0, 0);.  }. 
41a0: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 41   return sqlite3A
41b0: 70 69 45 78 69 74 28 64 62 2c 20 53 51 4c 49 54  piExit(db, SQLIT
41c0: 45 5f 4f 4b 29 3b 0a 7d 0a 0a 23 69 66 6e 64 65  E_OK);.}..#ifnde
41d0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
41e0: 41 43 45 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74  ACE./*.** Regist
41f0: 65 72 20 61 20 74 72 61 63 65 20 66 75 6e 63 74  er a trace funct
4200: 69 6f 6e 2e 20 20 54 68 65 20 70 41 72 67 20 66  ion.  The pArg f
4210: 72 6f 6d 20 74 68 65 20 70 72 65 76 69 6f 75 73  rom the previous
4220: 6c 79 20 72 65 67 69 73 74 65 72 65 64 20 74 72  ly registered tr
4230: 61 63 65 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e  ace.** is return
4240: 65 64 2e 20 20 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  ed.  .**.** A NU
4250: 4c 4c 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f  LL trace functio
4260: 6e 20 6d 65 61 6e 73 20 74 68 61 74 20 6e 6f 20  n means that no 
4270: 74 72 61 63 69 6e 67 20 69 73 20 65 78 65 63 75  tracing is execu
4280: 74 65 73 2e 20 20 41 20 6e 6f 6e 2d 4e 55 4c 4c  tes.  A non-NULL
4290: 0a 2a 2a 20 74 72 61 63 65 20 69 73 20 61 20 70  .** trace is a p
42a0: 6f 69 6e 74 65 72 20 74 6f 20 61 20 66 75 6e 63  ointer to a func
42b0: 74 69 6f 6e 20 74 68 61 74 20 69 73 20 69 6e 76  tion that is inv
42c0: 6f 6b 65 64 20 61 74 20 74 68 65 20 73 74 61 72  oked at the star
42d0: 74 20 6f 66 20 65 61 63 68 0a 2a 2a 20 53 51 4c  t of each.** SQL
42e0: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 76   statement..*/.v
42f0: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 74 72 61  oid *sqlite3_tra
4300: 63 65 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ce(sqlite3 *db, 
4310: 76 6f 69 64 20 28 2a 78 54 72 61 63 65 29 28 76  void (*xTrace)(v
4320: 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  oid*,const char*
4330: 29 2c 20 76 6f 69 64 20 2a 70 41 72 67 29 7b 0a  ), void *pArg){.
4340: 20 20 76 6f 69 64 20 2a 70 4f 6c 64 20 3d 20 64    void *pOld = d
4350: 62 2d 3e 70 54 72 61 63 65 41 72 67 3b 0a 20 20  b->pTraceArg;.  
4360: 64 62 2d 3e 78 54 72 61 63 65 20 3d 20 78 54 72  db->xTrace = xTr
4370: 61 63 65 3b 0a 20 20 64 62 2d 3e 70 54 72 61 63  ace;.  db->pTrac
4380: 65 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 72  eArg = pArg;.  r
4390: 65 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 2f 2a  eturn pOld;.}./*
43a0: 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 70  .** Register a p
43b0: 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 2e  rofile function.
43c0: 20 20 54 68 65 20 70 41 72 67 20 66 72 6f 6d 20    The pArg from 
43d0: 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79 20 72  the previously r
43e0: 65 67 69 73 74 65 72 65 64 20 0a 2a 2a 20 70 72  egistered .** pr
43f0: 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 69  ofile function i
4400: 73 20 72 65 74 75 72 6e 65 64 2e 20 20 0a 2a 2a  s returned.  .**
4410: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 70 72 6f 66 69  .** A NULL profi
4420: 6c 65 20 66 75 6e 63 74 69 6f 6e 20 6d 65 61 6e  le function mean
4430: 73 20 74 68 61 74 20 6e 6f 20 70 72 6f 66 69 6c  s that no profil
4440: 69 6e 67 20 69 73 20 65 78 65 63 75 74 65 73 2e  ing is executes.
4450: 20 20 41 20 6e 6f 6e 2d 4e 55 4c 4c 0a 2a 2a 20    A non-NULL.** 
4460: 70 72 6f 66 69 6c 65 20 69 73 20 61 20 70 6f 69  profile is a poi
4470: 6e 74 65 72 20 74 6f 20 61 20 66 75 6e 63 74 69  nter to a functi
4480: 6f 6e 20 74 68 61 74 20 69 73 20 69 6e 76 6f 6b  on that is invok
4490: 65 64 20 61 74 20 74 68 65 20 63 6f 6e 63 6c 75  ed at the conclu
44a0: 73 69 6f 6e 20 6f 66 0a 2a 2a 20 65 61 63 68 20  sion of.** each 
44b0: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 68  SQL statement th
44c0: 61 74 20 69 73 20 72 75 6e 2e 0a 2a 2f 0a 76 6f  at is run..*/.vo
44d0: 69 64 20 2a 73 71 6c 69 74 65 33 5f 70 72 6f 66  id *sqlite3_prof
44e0: 69 6c 65 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  ile(.  sqlite3 *
44f0: 64 62 2c 0a 20 20 76 6f 69 64 20 28 2a 78 50 72  db,.  void (*xPr
4500: 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  ofile)(void*,con
4510: 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f  st char*,sqlite_
4520: 75 69 6e 74 36 34 29 2c 0a 20 20 76 6f 69 64 20  uint64),.  void 
4530: 2a 70 41 72 67 0a 29 7b 0a 20 20 76 6f 69 64 20  *pArg.){.  void 
4540: 2a 70 4f 6c 64 20 3d 20 64 62 2d 3e 70 50 72 6f  *pOld = db->pPro
4550: 66 69 6c 65 41 72 67 3b 0a 20 20 64 62 2d 3e 78  fileArg;.  db->x
4560: 50 72 6f 66 69 6c 65 20 3d 20 78 50 72 6f 66 69  Profile = xProfi
4570: 6c 65 3b 0a 20 20 64 62 2d 3e 70 50 72 6f 66 69  le;.  db->pProfi
4580: 6c 65 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20  leArg = pArg;.  
4590: 72 65 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 23  return pOld;.}.#
45a0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
45b0: 4f 4d 49 54 5f 54 52 41 43 45 20 2a 2f 0a 0a 2f  OMIT_TRACE */../
45c0: 2a 2a 2a 20 45 58 50 45 52 49 4d 45 4e 54 41 4c  *** EXPERIMENTAL
45d0: 20 2a 2a 2a 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73   ***.**.** Regis
45e0: 74 65 72 20 61 20 66 75 6e 63 74 69 6f 6e 20 74  ter a function t
45f0: 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20 77 68 65  o be invoked whe
4600: 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  n a transaction 
4610: 63 6f 6d 6d 65 6e 74 73 2e 0a 2a 2a 20 49 66 20  comments..** If 
4620: 74 68 65 20 69 6e 76 6f 6b 65 64 20 66 75 6e 63  the invoked func
4630: 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 6e 6f 6e  tion returns non
4640: 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20  -zero, then the 
4650: 63 6f 6d 6d 69 74 20 62 65 63 6f 6d 65 73 20 61  commit becomes a
4660: 0a 2a 2a 20 72 6f 6c 6c 62 61 63 6b 2e 0a 2a 2f  .** rollback..*/
4670: 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 63  .void *sqlite3_c
4680: 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 0a 20 20 73 71  ommit_hook(.  sq
4690: 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20  lite3 *db,      
46a0: 20 20 20 20 20 20 20 20 2f 2a 20 41 74 74 61 63          /* Attac
46b0: 68 20 74 68 65 20 68 6f 6f 6b 20 74 6f 20 74 68  h the hook to th
46c0: 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  is database */. 
46d0: 20 69 6e 74 20 28 2a 78 43 61 6c 6c 62 61 63 6b   int (*xCallback
46e0: 29 28 76 6f 69 64 2a 29 2c 20 20 2f 2a 20 46 75  )(void*),  /* Fu
46f0: 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65  nction to invoke
4700: 20 6f 6e 20 65 61 63 68 20 63 6f 6d 6d 69 74 20   on each commit 
4710: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 20  */.  void *pArg 
4720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4730: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
4740: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b  e function */.){
4750: 0a 20 20 76 6f 69 64 20 2a 70 4f 6c 64 20 3d 20  .  void *pOld = 
4760: 64 62 2d 3e 70 43 6f 6d 6d 69 74 41 72 67 3b 0a  db->pCommitArg;.
4770: 20 20 64 62 2d 3e 78 43 6f 6d 6d 69 74 43 61 6c    db->xCommitCal
4780: 6c 62 61 63 6b 20 3d 20 78 43 61 6c 6c 62 61 63  lback = xCallbac
4790: 6b 3b 0a 20 20 64 62 2d 3e 70 43 6f 6d 6d 69 74  k;.  db->pCommit
47a0: 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 72 65  Arg = pArg;.  re
47b0: 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 0a 2f 2a  turn pOld;.}../*
47c0: 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 63  .** Register a c
47d0: 61 6c 6c 62 61 63 6b 20 74 6f 20 62 65 20 69 6e  allback to be in
47e0: 76 6f 6b 65 64 20 65 61 63 68 20 74 69 6d 65 20  voked each time 
47f0: 61 20 72 6f 77 20 69 73 20 75 70 64 61 74 65 64  a row is updated
4800: 2c 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20 6f 72  ,.** inserted or
4810: 20 64 65 6c 65 74 65 64 20 75 73 69 6e 67 20 74   deleted using t
4820: 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e  his database con
4830: 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a 76 6f 69 64  nection..*/.void
4840: 20 2a 73 71 6c 69 74 65 33 5f 75 70 64 61 74 65   *sqlite3_update
4850: 5f 68 6f 6f 6b 28 0a 20 20 73 71 6c 69 74 65 33  _hook(.  sqlite3
4860: 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20   *db,           
4870: 20 20 20 2f 2a 20 41 74 74 61 63 68 20 74 68 65     /* Attach the
4880: 20 68 6f 6f 6b 20 74 6f 20 74 68 69 73 20 64 61   hook to this da
4890: 74 61 62 61 73 65 20 2a 2f 0a 20 20 76 6f 69 64  tabase */.  void
48a0: 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28 76 6f   (*xCallback)(vo
48b0: 69 64 2a 2c 69 6e 74 2c 63 68 61 72 20 63 6f 6e  id*,int,char con
48c0: 73 74 20 2a 2c 63 68 61 72 20 63 6f 6e 73 74 20  st *,char const 
48d0: 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 2c  *,sqlite_int64),
48e0: 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 20 20 20  .  void *pArg   
48f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4900: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
4910: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a 20  function */.){. 
4920: 20 76 6f 69 64 20 2a 70 52 65 74 20 3d 20 64 62   void *pRet = db
4930: 2d 3e 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20  ->pUpdateArg;.  
4940: 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
4950: 61 63 6b 20 3d 20 78 43 61 6c 6c 62 61 63 6b 3b  ack = xCallback;
4960: 0a 20 20 64 62 2d 3e 70 55 70 64 61 74 65 41 72  .  db->pUpdateAr
4970: 67 20 3d 20 70 41 72 67 3b 0a 20 20 72 65 74 75  g = pArg;.  retu
4980: 72 6e 20 70 52 65 74 3b 0a 7d 0a 0a 2f 2a 0a 2a  rn pRet;.}../*.*
4990: 2a 20 52 65 67 69 73 74 65 72 20 61 20 63 61 6c  * Register a cal
49a0: 6c 62 61 63 6b 20 74 6f 20 62 65 20 69 6e 76 6f  lback to be invo
49b0: 6b 65 64 20 65 61 63 68 20 74 69 6d 65 20 61 20  ked each time a 
49c0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 72  transaction is r
49d0: 6f 6c 6c 65 64 0a 2a 2a 20 62 61 63 6b 20 62 79  olled.** back by
49e0: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 63   this database c
49f0: 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a 76 6f  onnection..*/.vo
4a00: 69 64 20 2a 73 71 6c 69 74 65 33 5f 72 6f 6c 6c  id *sqlite3_roll
4a10: 62 61 63 6b 5f 68 6f 6f 6b 28 0a 20 20 73 71 6c  back_hook(.  sql
4a20: 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20  ite3 *db,       
4a30: 20 20 20 20 20 20 20 2f 2a 20 41 74 74 61 63 68         /* Attach
4a40: 20 74 68 65 20 68 6f 6f 6b 20 74 6f 20 74 68 69   the hook to thi
4a50: 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
4a60: 76 6f 69 64 20 28 2a 78 43 61 6c 6c 62 61 63 6b  void (*xCallback
4a70: 29 28 76 6f 69 64 2a 29 2c 20 2f 2a 20 43 61 6c  )(void*), /* Cal
4a80: 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 2a  lback function *
4a90: 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 20 20  /.  void *pArg  
4aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
4ab0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
4ac0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a   function */.){.
4ad0: 20 20 76 6f 69 64 20 2a 70 52 65 74 20 3d 20 64    void *pRet = d
4ae0: 62 2d 3e 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b  b->pRollbackArg;
4af0: 0a 20 20 64 62 2d 3e 78 52 6f 6c 6c 62 61 63 6b  .  db->xRollback
4b00: 43 61 6c 6c 62 61 63 6b 20 3d 20 78 43 61 6c 6c  Callback = xCall
4b10: 62 61 63 6b 3b 0a 20 20 64 62 2d 3e 70 52 6f 6c  back;.  db->pRol
4b20: 6c 62 61 63 6b 41 72 67 20 3d 20 70 41 72 67 3b  lbackArg = pArg;
4b30: 0a 20 20 72 65 74 75 72 6e 20 70 52 65 74 3b 0a  .  return pRet;.
4b40: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  }../*.** This ro
4b50: 75 74 69 6e 65 20 69 73 20 63 61 6c 6c 65 64 20  utine is called 
4b60: 74 6f 20 63 72 65 61 74 65 20 61 20 63 6f 6e 6e  to create a conn
4b70: 65 63 74 69 6f 6e 20 74 6f 20 61 20 64 61 74 61  ection to a data
4b80: 62 61 73 65 20 42 54 72 65 65 0a 2a 2a 20 64 72  base BTree.** dr
4b90: 69 76 65 72 2e 20 20 49 66 20 7a 46 69 6c 65 6e  iver.  If zFilen
4ba0: 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20  ame is the name 
4bb0: 6f 66 20 61 20 66 69 6c 65 2c 20 74 68 65 6e 20  of a file, then 
4bc0: 74 68 61 74 20 66 69 6c 65 20 69 73 0a 2a 2a 20  that file is.** 
4bd0: 6f 70 65 6e 65 64 20 61 6e 64 20 75 73 65 64 2e  opened and used.
4be0: 20 20 49 66 20 7a 46 69 6c 65 6e 61 6d 65 20 69    If zFilename i
4bf0: 73 20 74 68 65 20 6d 61 67 69 63 20 6e 61 6d 65  s the magic name
4c00: 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 74 68 65 6e   ":memory:" then
4c10: 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65  .** the database
4c20: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 6d 65   is stored in me
4c30: 6d 6f 72 79 20 28 61 6e 64 20 69 73 20 74 68 75  mory (and is thu
4c40: 73 20 66 6f 72 67 6f 74 74 65 6e 20 61 73 20 73  s forgotten as s
4c50: 6f 6f 6e 20 61 73 0a 2a 2a 20 74 68 65 20 63 6f  oon as.** the co
4c60: 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c 6f 73  nnection is clos
4c70: 65 64 2e 29 20 20 49 66 20 7a 46 69 6c 65 6e 61  ed.)  If zFilena
4c80: 6d 65 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  me is NULL then 
4c90: 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
4ca0: 69 73 20 61 20 22 76 69 72 74 75 61 6c 22 20 64  is a "virtual" d
4cb0: 61 74 61 62 61 73 65 20 66 6f 72 20 74 72 61 6e  atabase for tran
4cc0: 73 69 65 6e 74 20 75 73 65 20 6f 6e 6c 79 20 61  sient use only a
4cd0: 6e 64 20 69 73 20 64 65 6c 65 74 65 64 20 61 73  nd is deleted as
4ce0: 0a 2a 2a 20 73 6f 6f 6e 20 61 73 20 74 68 65 20  .** soon as the 
4cf0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c  connection is cl
4d00: 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 76 69  osed..**.** A vi
4d10: 72 74 75 61 6c 20 64 61 74 61 62 61 73 65 20 63  rtual database c
4d20: 61 6e 20 62 65 20 65 69 74 68 65 72 20 61 20 64  an be either a d
4d30: 69 73 6b 20 66 69 6c 65 20 28 74 68 61 74 20 69  isk file (that i
4d40: 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a  s automatically.
4d50: 2a 2a 20 64 65 6c 65 74 65 64 20 77 68 65 6e 20  ** deleted when 
4d60: 74 68 65 20 66 69 6c 65 20 69 73 20 63 6c 6f 73  the file is clos
4d70: 65 64 29 20 6f 72 20 69 74 20 61 6e 20 62 65 20  ed) or it an be 
4d80: 68 65 6c 64 20 65 6e 74 69 72 65 6c 79 20 69 6e  held entirely in
4d90: 20 6d 65 6d 6f 72 79 2c 0a 2a 2a 20 64 65 70 65   memory,.** depe
4da0: 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 76 61 6c  nding on the val
4db0: 75 65 73 20 6f 66 20 74 68 65 20 54 45 4d 50 5f  ues of the TEMP_
4dc0: 53 54 4f 52 45 20 63 6f 6d 70 69 6c 65 2d 74 69  STORE compile-ti
4dd0: 6d 65 20 6d 61 63 72 6f 20 61 6e 64 20 74 68 65  me macro and the
4de0: 0a 2a 2a 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f  .** db->temp_sto
4df0: 72 65 20 76 61 72 69 61 62 6c 65 2c 20 61 63 63  re variable, acc
4e00: 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 66 6f  ording to the fo
4e10: 6c 6c 6f 77 69 6e 67 20 63 68 61 72 74 3a 0a 2a  llowing chart:.*
4e20: 2a 0a 2a 2a 20 20 20 20 20 20 20 54 45 4d 50 5f  *.**       TEMP_
4e30: 53 54 4f 52 45 20 20 20 20 20 64 62 2d 3e 74 65  STORE     db->te
4e40: 6d 70 5f 73 74 6f 72 65 20 20 20 20 20 4c 6f 63  mp_store     Loc
4e50: 61 74 69 6f 6e 20 6f 66 20 74 65 6d 70 6f 72 61  ation of tempora
4e60: 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 20  ry database.**  
4e70: 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20       ---------- 
4e80: 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d      ------------
4e90: 2d 2d 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  --     ---------
4ea0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4eb0: 2d 2d 2d 2d 2d 0a 2a 2a 20 20 20 20 20 20 20 20  -----.**        
4ec0: 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20     0            
4ed0: 20 20 20 61 6e 79 20 20 20 20 20 20 20 20 20 20     any          
4ee0: 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20     file.**      
4ef0: 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20 20       1          
4f00: 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20        1         
4f10: 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20       file.**    
4f20: 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20         1        
4f30: 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20 20          2       
4f40: 20 20 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a         memory.**
4f50: 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20             1    
4f60: 20 20 20 20 20 20 20 20 20 20 20 20 30 20 20 20              0   
4f70: 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 0a             file.
4f80: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 32 20 20  **           2  
4f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31 20                1 
4fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c               fil
4fb0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 32  e.**           2
4fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4fd0: 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d  2              m
4fe0: 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20 20 20  emory.**        
4ff0: 20 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20     2            
5000: 20 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20      0           
5010: 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20     memory.**    
5020: 20 20 20 20 20 20 20 33 20 20 20 20 20 20 20 20         3        
5030: 20 20 20 20 20 20 20 61 6e 79 20 20 20 20 20 20         any      
5040: 20 20 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2f         memory.*/
5050: 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 74 72 65  .int sqlite3Btre
5060: 65 46 61 63 74 6f 72 79 28 0a 20 20 63 6f 6e 73  eFactory(.  cons
5070: 74 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20  t sqlite3 *db,  
5080: 20 20 20 20 20 20 2f 2a 20 4d 61 69 6e 20 64 61        /* Main da
5090: 74 61 62 61 73 65 20 77 68 65 6e 20 6f 70 65 6e  tabase when open
50a0: 69 6e 67 20 61 75 78 20 6f 74 68 65 72 77 69 73  ing aux otherwis
50b0: 65 20 30 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  e 0 */.  const c
50c0: 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20  har *zFilename, 
50d0: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
50e0: 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  e file containin
50f0: 67 20 74 68 65 20 42 54 72 65 65 20 64 61 74 61  g the BTree data
5100: 62 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 6d  base */.  int om
5110: 69 74 4a 6f 75 72 6e 61 6c 2c 20 20 20 20 20 20  itJournal,      
5120: 20 20 20 20 2f 2a 20 69 66 20 54 52 55 45 20 74      /* if TRUE t
5130: 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 6f 75 72 6e  hen do not journ
5140: 61 6c 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a  al this file */.
5150: 20 20 69 6e 74 20 6e 43 61 63 68 65 2c 20 20 20    int nCache,   
5160: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
5170: 6f 77 20 6d 61 6e 79 20 70 61 67 65 73 20 69 6e  ow many pages in
5180: 20 74 68 65 20 70 61 67 65 20 63 61 63 68 65 20   the page cache 
5190: 2a 2f 0a 20 20 42 74 72 65 65 20 2a 2a 70 70 42  */.  Btree **ppB
51a0: 74 72 65 65 20 20 20 20 20 20 20 20 20 20 20 2f  tree           /
51b0: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6e 65 77  * Pointer to new
51c0: 20 42 74 72 65 65 20 6f 62 6a 65 63 74 20 77 72   Btree object wr
51d0: 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 29 7b  itten here */.){
51e0: 0a 20 20 69 6e 74 20 62 74 72 65 65 5f 66 6c 61  .  int btree_fla
51f0: 67 73 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72 63  gs = 0;.  int rc
5200: 3b 0a 20 20 0a 20 20 61 73 73 65 72 74 28 20 70  ;.  .  assert( p
5210: 70 42 74 72 65 65 20 21 3d 20 30 29 3b 0a 20 20  pBtree != 0);.  
5220: 69 66 28 20 6f 6d 69 74 4a 6f 75 72 6e 61 6c 20  if( omitJournal 
5230: 29 7b 0a 20 20 20 20 62 74 72 65 65 5f 66 6c 61  ){.    btree_fla
5240: 67 73 20 7c 3d 20 42 54 52 45 45 5f 4f 4d 49 54  gs |= BTREE_OMIT
5250: 5f 4a 4f 55 52 4e 41 4c 3b 0a 20 20 7d 0a 20 20  _JOURNAL;.  }.  
5260: 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20  if( db->flags & 
5270: 53 51 4c 49 54 45 5f 4e 6f 52 65 61 64 6c 6f 63  SQLITE_NoReadloc
5280: 6b 20 29 7b 0a 20 20 20 20 62 74 72 65 65 5f 66  k ){.    btree_f
5290: 6c 61 67 73 20 7c 3d 20 42 54 52 45 45 5f 4e 4f  lags |= BTREE_NO
52a0: 5f 52 45 41 44 4c 4f 43 4b 3b 0a 20 20 7d 0a 20  _READLOCK;.  }. 
52b0: 20 69 66 28 20 7a 46 69 6c 65 6e 61 6d 65 3d 3d   if( zFilename==
52c0: 30 20 29 7b 0a 23 69 66 20 54 45 4d 50 5f 53 54  0 ){.#if TEMP_ST
52d0: 4f 52 45 3d 3d 30 0a 20 20 20 20 2f 2a 20 44 6f  ORE==0.    /* Do
52e0: 20 6e 6f 74 68 69 6e 67 20 2a 2f 0a 23 65 6e 64   nothing */.#end
52f0: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
5300: 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44 42 0a  E_OMIT_MEMORYDB.
5310: 23 69 66 20 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  #if TEMP_STORE==
5320: 31 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 74 65  1.    if( db->te
5330: 6d 70 5f 73 74 6f 72 65 3d 3d 32 20 29 20 7a 46  mp_store==2 ) zF
5340: 69 6c 65 6e 61 6d 65 20 3d 20 22 3a 6d 65 6d 6f  ilename = ":memo
5350: 72 79 3a 22 3b 0a 23 65 6e 64 69 66 0a 23 69 66  ry:";.#endif.#if
5360: 20 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 32 0a 20   TEMP_STORE==2. 
5370: 20 20 20 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f     if( db->temp_
5380: 73 74 6f 72 65 21 3d 31 20 29 20 7a 46 69 6c 65  store!=1 ) zFile
5390: 6e 61 6d 65 20 3d 20 22 3a 6d 65 6d 6f 72 79 3a  name = ":memory:
53a0: 22 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 54 45  ";.#endif.#if TE
53b0: 4d 50 5f 53 54 4f 52 45 3d 3d 33 0a 20 20 20 20  MP_STORE==3.    
53c0: 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 22 3a 6d 65  zFilename = ":me
53d0: 6d 6f 72 79 3a 22 3b 0a 23 65 6e 64 69 66 0a 23  mory:";.#endif.#
53e0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
53f0: 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44 42 20 2a 2f  OMIT_MEMORYDB */
5400: 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c  .  }..  rc = sql
5410: 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28 7a 46  ite3BtreeOpen(zF
5420: 69 6c 65 6e 61 6d 65 2c 20 28 73 71 6c 69 74 65  ilename, (sqlite
5430: 33 20 2a 29 64 62 2c 20 70 70 42 74 72 65 65 2c  3 *)db, ppBtree,
5440: 20 62 74 72 65 65 5f 66 6c 61 67 73 29 3b 0a 20   btree_flags);. 
5450: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
5460: 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  OK ){.    sqlite
5470: 33 42 74 72 65 65 53 65 74 42 75 73 79 48 61 6e  3BtreeSetBusyHan
5480: 64 6c 65 72 28 2a 70 70 42 74 72 65 65 2c 20 28  dler(*ppBtree, (
5490: 76 6f 69 64 2a 29 26 64 62 2d 3e 62 75 73 79 48  void*)&db->busyH
54a0: 61 6e 64 6c 65 72 29 3b 0a 20 20 20 20 73 71 6c  andler);.    sql
54b0: 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68  ite3BtreeSetCach
54c0: 65 53 69 7a 65 28 2a 70 70 42 74 72 65 65 2c 20  eSize(*ppBtree, 
54d0: 6e 43 61 63 68 65 29 3b 0a 20 20 7d 0a 20 20 72  nCache);.  }.  r
54e0: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a  eturn rc;.}../*.
54f0: 2a 2a 20 52 65 74 75 72 6e 20 55 54 46 2d 38 20  ** Return UTF-8 
5500: 65 6e 63 6f 64 65 64 20 45 6e 67 6c 69 73 68 20  encoded English 
5510: 6c 61 6e 67 75 61 67 65 20 65 78 70 6c 61 6e 61  language explana
5520: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d 6f 73 74  tion of the most
5530: 20 72 65 63 65 6e 74 0a 2a 2a 20 65 72 72 6f 72   recent.** error
5540: 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20  ..*/.const char 
5550: 2a 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28  *sqlite3_errmsg(
5560: 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20  sqlite3 *db){.  
5570: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20  const char *z;. 
5580: 20 69 66 28 20 21 64 62 20 29 7b 0a 20 20 20 20   if( !db ){.    
5590: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 45 72  return sqlite3Er
55a0: 72 53 74 72 28 53 51 4c 49 54 45 5f 4e 4f 4d 45  rStr(SQLITE_NOME
55b0: 4d 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  M);.  }.  assert
55c0: 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  ( !db->mallocFai
55d0: 6c 65 64 20 29 3b 0a 20 20 69 66 28 20 73 71 6c  led );.  if( sql
55e0: 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28  ite3SafetyCheck(
55f0: 64 62 29 20 7c 7c 20 64 62 2d 3e 65 72 72 43 6f  db) || db->errCo
5600: 64 65 3d 3d 53 51 4c 49 54 45 5f 4d 49 53 55 53  de==SQLITE_MISUS
5610: 45 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  E ){.    return 
5620: 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 53 51  sqlite3ErrStr(SQ
5630: 4c 49 54 45 5f 4d 49 53 55 53 45 29 3b 0a 20 20  LITE_MISUSE);.  
5640: 7d 0a 20 20 7a 20 3d 20 28 63 68 61 72 2a 29 73  }.  z = (char*)s
5650: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
5660: 74 28 64 62 2d 3e 70 45 72 72 29 3b 0a 20 20 69  t(db->pErr);.  i
5670: 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 7a  f( z==0 ){.    z
5680: 20 3d 20 73 71 6c 69 74 65 33 45 72 72 53 74 72   = sqlite3ErrStr
5690: 28 64 62 2d 3e 65 72 72 43 6f 64 65 29 3b 0a 20  (db->errCode);. 
56a0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d   }.  return z;.}
56b0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
56c0: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a  _OMIT_UTF16./*.*
56d0: 2a 20 52 65 74 75 72 6e 20 55 54 46 2d 31 36 20  * Return UTF-16 
56e0: 65 6e 63 6f 64 65 64 20 45 6e 67 6c 69 73 68 20  encoded English 
56f0: 6c 61 6e 67 75 61 67 65 20 65 78 70 6c 61 6e 61  language explana
5700: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d 6f 73 74  tion of the most
5710: 20 72 65 63 65 6e 74 0a 2a 2a 20 65 72 72 6f 72   recent.** error
5720: 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 76 6f 69 64 20  ..*/.const void 
5730: 2a 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31  *sqlite3_errmsg1
5740: 36 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  6(sqlite3 *db){.
5750: 20 20 2f 2a 20 42 65 63 61 75 73 65 20 61 6c 6c    /* Because all
5760: 20 74 68 65 20 63 68 61 72 61 63 74 65 72 73 20   the characters 
5770: 69 6e 20 74 68 65 20 73 74 72 69 6e 67 20 61 72  in the string ar
5780: 65 20 69 6e 20 74 68 65 20 75 6e 69 63 6f 64 65  e in the unicode
5790: 0a 20 20 2a 2a 20 72 61 6e 67 65 20 30 78 30 30  .  ** range 0x00
57a0: 2d 30 78 46 46 2c 20 69 66 20 77 65 20 70 61 64  -0xFF, if we pad
57b0: 20 74 68 65 20 62 69 67 2d 65 6e 64 69 61 6e 20   the big-endian 
57c0: 73 74 72 69 6e 67 20 77 69 74 68 20 61 20 0a 20  string with a . 
57d0: 20 2a 2a 20 7a 65 72 6f 20 62 79 74 65 2c 20 77   ** zero byte, w
57e0: 65 20 63 61 6e 20 6f 62 74 61 69 6e 20 74 68 65  e can obtain the
57f0: 20 6c 69 74 74 6c 65 2d 65 6e 64 69 61 6e 20 73   little-endian s
5800: 74 72 69 6e 67 20 77 69 74 68 0a 20 20 2a 2a 20  tring with.  ** 
5810: 26 62 69 67 5f 65 6e 64 69 61 6e 5b 31 5d 2e 0a  &big_endian[1]..
5820: 20 20 2a 2f 0a 20 20 73 74 61 74 69 63 20 63 6f    */.  static co
5830: 6e 73 74 20 63 68 61 72 20 6f 75 74 4f 66 4d 65  nst char outOfMe
5840: 6d 42 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 30 2c  mBe[] = {.    0,
5850: 20 27 6f 27 2c 20 30 2c 20 27 75 27 2c 20 30 2c   'o', 0, 'u', 0,
5860: 20 27 74 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20   't', 0, ' ', . 
5870: 20 20 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27 66     0, 'o', 0, 'f
5880: 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20 20 20  ', 0, ' ', .    
5890: 30 2c 20 27 6d 27 2c 20 30 2c 20 27 65 27 2c 20  0, 'm', 0, 'e', 
58a0: 30 2c 20 27 6d 27 2c 20 30 2c 20 27 6f 27 2c 20  0, 'm', 0, 'o', 
58b0: 30 2c 20 27 72 27 2c 20 30 2c 20 27 79 27 2c 20  0, 'r', 0, 'y', 
58c0: 30 2c 20 30 2c 20 30 0a 20 20 7d 3b 0a 20 20 73  0, 0, 0.  };.  s
58d0: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
58e0: 20 6d 69 73 75 73 65 42 65 20 5b 5d 20 3d 20 7b   misuseBe [] = {
58f0: 0a 20 20 20 20 30 2c 20 27 6c 27 2c 20 30 2c 20  .    0, 'l', 0, 
5900: 27 69 27 2c 20 30 2c 20 27 62 27 2c 20 30 2c 20  'i', 0, 'b', 0, 
5910: 27 72 27 2c 20 30 2c 20 27 61 27 2c 20 30 2c 20  'r', 0, 'a', 0, 
5920: 27 72 27 2c 20 30 2c 20 27 79 27 2c 20 30 2c 20  'r', 0, 'y', 0, 
5930: 27 20 27 2c 20 0a 20 20 20 20 30 2c 20 27 72 27  ' ', .    0, 'r'
5940: 2c 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27 75 27  , 0, 'o', 0, 'u'
5950: 2c 20 30 2c 20 27 74 27 2c 20 30 2c 20 27 69 27  , 0, 't', 0, 'i'
5960: 2c 20 30 2c 20 27 6e 27 2c 20 30 2c 20 27 65 27  , 0, 'n', 0, 'e'
5970: 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20 20 20 30  , 0, ' ', .    0
5980: 2c 20 27 63 27 2c 20 30 2c 20 27 61 27 2c 20 30  , 'c', 0, 'a', 0
5990: 2c 20 27 6c 27 2c 20 30 2c 20 27 6c 27 2c 20 30  , 'l', 0, 'l', 0
59a0: 2c 20 27 65 27 2c 20 30 2c 20 27 64 27 2c 20 30  , 'e', 0, 'd', 0
59b0: 2c 20 27 20 27 2c 20 0a 20 20 20 20 30 2c 20 27  , ' ', .    0, '
59c0: 6f 27 2c 20 30 2c 20 27 75 27 2c 20 30 2c 20 27  o', 0, 'u', 0, '
59d0: 74 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20 20  t', 0, ' ', .   
59e0: 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27 66 27 2c   0, 'o', 0, 'f',
59f0: 20 30 2c 20 27 20 27 2c 20 0a 20 20 20 20 30 2c   0, ' ', .    0,
5a00: 20 27 73 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c   's', 0, 'e', 0,
5a10: 20 27 71 27 2c 20 30 2c 20 27 75 27 2c 20 30 2c   'q', 0, 'u', 0,
5a20: 20 27 65 27 2c 20 30 2c 20 27 6e 27 2c 20 30 2c   'e', 0, 'n', 0,
5a30: 20 27 63 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c   'c', 0, 'e', 0,
5a40: 20 30 2c 20 30 0a 20 20 7d 3b 0a 0a 20 20 63 6f   0, 0.  };..  co
5a50: 6e 73 74 20 76 6f 69 64 20 2a 7a 3b 0a 20 20 61  nst void *z;.  a
5a60: 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c  ssert( !db->mall
5a70: 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 69 66  ocFailed );.  if
5a80: 28 20 21 64 62 20 29 7b 0a 20 20 20 20 72 65 74  ( !db ){.    ret
5a90: 75 72 6e 20 28 76 6f 69 64 20 2a 29 28 26 6f 75  urn (void *)(&ou
5aa0: 74 4f 66 4d 65 6d 42 65 5b 53 51 4c 49 54 45 5f  tOfMemBe[SQLITE_
5ab0: 55 54 46 31 36 4e 41 54 49 56 45 3d 3d 53 51 4c  UTF16NATIVE==SQL
5ac0: 49 54 45 5f 55 54 46 31 36 4c 45 3f 31 3a 30 5d  ITE_UTF16LE?1:0]
5ad0: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  );.  }.  if( sql
5ae0: 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28  ite3SafetyCheck(
5af0: 64 62 29 20 7c 7c 20 64 62 2d 3e 65 72 72 43 6f  db) || db->errCo
5b00: 64 65 3d 3d 53 51 4c 49 54 45 5f 4d 49 53 55 53  de==SQLITE_MISUS
5b10: 45 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  E ){.    return 
5b20: 28 76 6f 69 64 20 2a 29 28 26 6d 69 73 75 73 65  (void *)(&misuse
5b30: 42 65 5b 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  Be[SQLITE_UTF16N
5b40: 41 54 49 56 45 3d 3d 53 51 4c 49 54 45 5f 55 54  ATIVE==SQLITE_UT
5b50: 46 31 36 4c 45 3f 31 3a 30 5d 29 3b 0a 20 20 7d  F16LE?1:0]);.  }
5b60: 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 76  .  z = sqlite3_v
5b70: 61 6c 75 65 5f 74 65 78 74 31 36 28 64 62 2d 3e  alue_text16(db->
5b80: 70 45 72 72 29 3b 0a 20 20 69 66 28 20 7a 3d 3d  pErr);.  if( z==
5b90: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
5ba0: 56 61 6c 75 65 53 65 74 53 74 72 28 64 62 2d 3e  ValueSetStr(db->
5bb0: 70 45 72 72 2c 20 2d 31 2c 20 73 71 6c 69 74 65  pErr, -1, sqlite
5bc0: 33 45 72 72 53 74 72 28 64 62 2d 3e 65 72 72 43  3ErrStr(db->errC
5bd0: 6f 64 65 29 2c 0a 20 20 20 20 20 20 20 20 20 53  ode),.         S
5be0: 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49  QLITE_UTF8, SQLI
5bf0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
5c00: 7a 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  z = sqlite3_valu
5c10: 65 5f 74 65 78 74 31 36 28 64 62 2d 3e 70 45 72  e_text16(db->pEr
5c20: 72 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  r);.  }.  sqlite
5c30: 33 41 70 69 45 78 69 74 28 30 2c 20 30 29 3b 0a  3ApiExit(0, 0);.
5c40: 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 23 65    return z;.}.#e
5c50: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
5c60: 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 2f 2a  MIT_UTF16 */../*
5c70: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6d  .** Return the m
5c80: 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72  ost recent error
5c90: 20 63 6f 64 65 20 67 65 6e 65 72 61 74 65 64 20   code generated 
5ca0: 62 79 20 61 6e 20 53 51 4c 69 74 65 20 72 6f 75  by an SQLite rou
5cb0: 74 69 6e 65 2e 20 49 66 20 4e 55 4c 4c 20 69 73  tine. If NULL is
5cc0: 0a 2a 2a 20 70 61 73 73 65 64 20 74 6f 20 74 68  .** passed to th
5cd0: 69 73 20 66 75 6e 63 74 69 6f 6e 2c 20 77 65 20  is function, we 
5ce0: 61 73 73 75 6d 65 20 61 20 6d 61 6c 6c 6f 63 28  assume a malloc(
5cf0: 29 20 66 61 69 6c 65 64 20 64 75 72 69 6e 67 20  ) failed during 
5d00: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29 2e 0a  sqlite3_open()..
5d10: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 65  */.int sqlite3_e
5d20: 72 72 63 6f 64 65 28 73 71 6c 69 74 65 33 20 2a  rrcode(sqlite3 *
5d30: 64 62 29 7b 0a 20 20 69 66 28 20 21 64 62 20 7c  db){.  if( !db |
5d40: 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  | db->mallocFail
5d50: 65 64 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  ed ){.    return
5d60: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20   SQLITE_NOMEM;. 
5d70: 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
5d80: 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29 20  SafetyCheck(db) 
5d90: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
5da0: 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d  LITE_MISUSE;.  }
5db0: 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 65 72  .  return db->er
5dc0: 72 43 6f 64 65 20 26 20 64 62 2d 3e 65 72 72 4d  rCode & db->errM
5dd0: 61 73 6b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72  ask;.}../*.** Cr
5de0: 65 61 74 65 20 61 20 6e 65 77 20 63 6f 6c 6c 61  eate a new colla
5df0: 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 66 6f  ting function fo
5e00: 72 20 64 61 74 61 62 61 73 65 20 22 64 62 22 2e  r database "db".
5e10: 20 20 54 68 65 20 6e 61 6d 65 20 69 73 20 7a 4e    The name is zN
5e20: 61 6d 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 65  ame.** and the e
5e30: 6e 63 6f 64 69 6e 67 20 69 73 20 65 6e 63 2e 0a  ncoding is enc..
5e40: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 72  */.static int cr
5e50: 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 0a 20  eateCollation(. 
5e60: 20 73 71 6c 69 74 65 33 2a 20 64 62 2c 20 0a 20   sqlite3* db, . 
5e70: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
5e80: 6d 65 2c 20 0a 20 20 69 6e 74 20 65 6e 63 2c 20  me, .  int enc, 
5e90: 0a 20 20 76 6f 69 64 2a 20 70 43 74 78 2c 0a 20  .  void* pCtx,. 
5ea0: 20 69 6e 74 28 2a 78 43 6f 6d 70 61 72 65 29 28   int(*xCompare)(
5eb0: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
5ec0: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
5ed0: 76 6f 69 64 2a 29 2c 0a 20 20 76 6f 69 64 28 2a  void*),.  void(*
5ee0: 78 44 65 6c 29 28 76 6f 69 64 2a 29 0a 29 7b 0a  xDel)(void*).){.
5ef0: 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c    CollSeq *pColl
5f00: 3b 0a 20 20 69 6e 74 20 65 6e 63 32 3b 0a 20 20  ;.  int enc2;.  
5f10: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
5f20: 66 65 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b  fetyCheck(db) ){
5f30: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
5f40: 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 0a  TE_MISUSE;.  }..
5f50: 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 55    /* If SQLITE_U
5f60: 54 46 31 36 20 69 73 20 73 70 65 63 69 66 69 65  TF16 is specifie
5f70: 64 20 61 73 20 74 68 65 20 65 6e 63 6f 64 69 6e  d as the encodin
5f80: 67 20 74 79 70 65 2c 20 74 72 61 6e 73 66 6f 72  g type, transfor
5f90: 6d 20 74 68 69 73 0a 20 20 2a 2a 20 74 6f 20 6f  m this.  ** to o
5fa0: 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 55 54 46  ne of SQLITE_UTF
5fb0: 31 36 4c 45 20 6f 72 20 53 51 4c 49 54 45 5f 55  16LE or SQLITE_U
5fc0: 54 46 31 36 42 45 20 75 73 69 6e 67 20 74 68 65  TF16BE using the
5fd0: 0a 20 20 2a 2a 20 53 51 4c 49 54 45 5f 55 54 46  .  ** SQLITE_UTF
5fe0: 31 36 4e 41 54 49 56 45 20 6d 61 63 72 6f 2e 20  16NATIVE macro. 
5ff0: 53 51 4c 49 54 45 5f 55 54 46 31 36 20 69 73 20  SQLITE_UTF16 is 
6000: 6e 6f 74 20 75 73 65 64 20 69 6e 74 65 72 6e 61  not used interna
6010: 6c 6c 79 2e 0a 20 20 2a 2f 0a 20 20 65 6e 63 32  lly..  */.  enc2
6020: 20 3d 20 65 6e 63 20 26 20 7e 53 51 4c 49 54 45   = enc & ~SQLITE
6030: 5f 55 54 46 31 36 5f 41 4c 49 47 4e 45 44 3b 0a  _UTF16_ALIGNED;.
6040: 20 20 69 66 28 20 65 6e 63 32 3d 3d 53 51 4c 49    if( enc2==SQLI
6050: 54 45 5f 55 54 46 31 36 20 29 7b 0a 20 20 20 20  TE_UTF16 ){.    
6060: 65 6e 63 32 20 3d 20 53 51 4c 49 54 45 5f 55 54  enc2 = SQLITE_UT
6070: 46 31 36 4e 41 54 49 56 45 3b 0a 20 20 7d 0a 0a  F16NATIVE;.  }..
6080: 20 20 69 66 28 20 28 65 6e 63 32 26 7e 33 29 21    if( (enc2&~3)!
6090: 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
60a0: 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c 49 54  3Error(db, SQLIT
60b0: 45 5f 45 52 52 4f 52 2c 20 22 75 6e 6b 6e 6f 77  E_ERROR, "unknow
60c0: 6e 20 65 6e 63 6f 64 69 6e 67 22 29 3b 0a 20 20  n encoding");.  
60d0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
60e0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  ERROR;.  }..  /*
60f0: 20 43 68 65 63 6b 20 69 66 20 74 68 69 73 20 63   Check if this c
6100: 61 6c 6c 20 69 73 20 72 65 6d 6f 76 69 6e 67 20  all is removing 
6110: 6f 72 20 72 65 70 6c 61 63 69 6e 67 20 61 6e 20  or replacing an 
6120: 65 78 69 73 74 69 6e 67 20 63 6f 6c 6c 61 74 69  existing collati
6130: 6f 6e 20 0a 20 20 2a 2a 20 73 65 71 75 65 6e 63  on .  ** sequenc
6140: 65 2e 20 49 66 20 73 6f 2c 20 61 6e 64 20 74 68  e. If so, and th
6150: 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20 56  ere are active V
6160: 4d 73 2c 20 72 65 74 75 72 6e 20 62 75 73 79 2e  Ms, return busy.
6170: 20 49 66 20 74 68 65 72 65 0a 20 20 2a 2a 20 61   If there.  ** a
6180: 72 65 20 6e 6f 20 61 63 74 69 76 65 20 56 4d 73  re no active VMs
6190: 2c 20 69 6e 76 61 6c 69 64 61 74 65 20 61 6e 79  , invalidate any
61a0: 20 70 72 65 2d 63 6f 6d 70 69 6c 65 64 20 73 74   pre-compiled st
61b0: 61 74 65 6d 65 6e 74 73 2e 0a 20 20 2a 2f 0a 20  atements..  */. 
61c0: 20 70 43 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33   pColl = sqlite3
61d0: 46 69 6e 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20  FindCollSeq(db, 
61e0: 28 75 38 29 65 6e 63 32 2c 20 7a 4e 61 6d 65 2c  (u8)enc2, zName,
61f0: 20 73 74 72 6c 65 6e 28 7a 4e 61 6d 65 29 2c 20   strlen(zName), 
6200: 30 29 3b 0a 20 20 69 66 28 20 70 43 6f 6c 6c 20  0);.  if( pColl 
6210: 26 26 20 70 43 6f 6c 6c 2d 3e 78 43 6d 70 20 29  && pColl->xCmp )
6220: 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61 63  {.    if( db->ac
6230: 74 69 76 65 56 64 62 65 43 6e 74 20 29 7b 0a 20  tiveVdbeCnt ){. 
6240: 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f       sqlite3Erro
6250: 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 42 55 53  r(db, SQLITE_BUS
6260: 59 2c 20 0a 20 20 20 20 20 20 20 20 22 55 6e 61  Y, .        "Una
6270: 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 2f 6d 6f  ble to delete/mo
6280: 64 69 66 79 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  dify collation s
6290: 65 71 75 65 6e 63 65 20 64 75 65 20 74 6f 20 61  equence due to a
62a0: 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73  ctive statements
62b0: 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ");.      return
62c0: 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
62d0: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 45    }.    sqlite3E
62e0: 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
62f0: 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 0a 20 20  tements(db);..  
6300: 20 20 2f 2a 20 49 66 20 63 6f 6c 6c 61 74 69 6f    /* If collatio
6310: 6e 20 73 65 71 75 65 6e 63 65 20 70 43 6f 6c 6c  n sequence pColl
6320: 20 77 61 73 20 63 72 65 61 74 65 64 20 64 69 72   was created dir
6330: 65 63 74 6c 79 20 62 79 20 61 20 63 61 6c 6c 20  ectly by a call 
6340: 74 6f 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  to.    ** sqlite
6350: 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69  3_create_collati
6360: 6f 6e 2c 20 61 6e 64 20 6e 6f 74 20 67 65 6e 65  on, and not gene
6370: 72 61 74 65 64 20 62 79 20 73 79 6e 74 68 43 6f  rated by synthCo
6380: 6c 6c 53 65 71 28 29 2c 0a 20 20 20 20 2a 2a 20  llSeq(),.    ** 
6390: 74 68 65 6e 20 61 6e 79 20 63 6f 70 69 65 73 20  then any copies 
63a0: 6d 61 64 65 20 62 79 20 73 79 6e 74 68 43 6f 6c  made by synthCol
63b0: 6c 53 65 71 28 29 20 6e 65 65 64 20 74 6f 20 62  lSeq() need to b
63c0: 65 20 69 6e 76 61 6c 69 64 61 74 65 64 2e 0a 20  e invalidated.. 
63d0: 20 20 20 2a 2a 20 41 6c 73 6f 2c 20 63 6f 6c 6c     ** Also, coll
63e0: 61 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72  ation destructor
63f0: 20 2d 20 43 6f 6c 6c 53 65 71 2e 78 44 65 6c 28   - CollSeq.xDel(
6400: 29 20 2d 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79  ) - function may
6410: 20 6e 65 65 64 0a 20 20 20 20 2a 2a 20 74 6f 20   need.    ** to 
6420: 62 65 20 63 61 6c 6c 65 64 2e 0a 20 20 20 20 2a  be called..    *
6430: 2f 20 0a 20 20 20 20 69 66 28 20 28 70 43 6f 6c  / .    if( (pCol
6440: 6c 2d 3e 65 6e 63 20 26 20 7e 53 51 4c 49 54 45  l->enc & ~SQLITE
6450: 5f 55 54 46 31 36 5f 41 4c 49 47 4e 45 44 29 3d  _UTF16_ALIGNED)=
6460: 3d 65 6e 63 32 20 29 7b 0a 20 20 20 20 20 20 43  =enc2 ){.      C
6470: 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 20 3d 20  ollSeq *aColl = 
6480: 73 71 6c 69 74 65 33 48 61 73 68 46 69 6e 64 28  sqlite3HashFind(
6490: 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 2c 20 7a  &db->aCollSeq, z
64a0: 4e 61 6d 65 2c 20 73 74 72 6c 65 6e 28 7a 4e 61  Name, strlen(zNa
64b0: 6d 65 29 29 3b 0a 20 20 20 20 20 20 69 6e 74 20  me));.      int 
64c0: 6a 3b 0a 20 20 20 20 20 20 66 6f 72 28 6a 3d 30  j;.      for(j=0
64d0: 3b 20 6a 3c 33 3b 20 6a 2b 2b 29 7b 0a 20 20 20  ; j<3; j++){.   
64e0: 20 20 20 20 20 43 6f 6c 6c 53 65 71 20 2a 70 20       CollSeq *p 
64f0: 3d 20 26 61 43 6f 6c 6c 5b 6a 5d 3b 0a 20 20 20  = &aColl[j];.   
6500: 20 20 20 20 20 69 66 28 20 70 2d 3e 65 6e 63 3d       if( p->enc=
6510: 3d 70 43 6f 6c 6c 2d 3e 65 6e 63 20 29 7b 0a 20  =pColl->enc ){. 
6520: 20 20 20 20 20 20 20 20 20 69 66 28 20 70 2d 3e           if( p->
6530: 78 44 65 6c 20 29 7b 0a 20 20 20 20 20 20 20 20  xDel ){.        
6540: 20 20 20 20 70 2d 3e 78 44 65 6c 28 70 2d 3e 70      p->xDel(p->p
6550: 55 73 65 72 29 3b 0a 20 20 20 20 20 20 20 20 20  User);.         
6560: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e   }.          p->
6570: 78 43 6d 70 20 3d 20 30 3b 0a 20 20 20 20 20 20  xCmp = 0;.      
6580: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
6590: 7d 0a 20 20 7d 0a 0a 20 20 70 43 6f 6c 6c 20 3d  }.  }..  pColl =
65a0: 20 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c   sqlite3FindColl
65b0: 53 65 71 28 64 62 2c 20 28 75 38 29 65 6e 63 32  Seq(db, (u8)enc2
65c0: 2c 20 7a 4e 61 6d 65 2c 20 73 74 72 6c 65 6e 28  , zName, strlen(
65d0: 7a 4e 61 6d 65 29 2c 20 31 29 3b 0a 20 20 69 66  zName), 1);.  if
65e0: 28 20 70 43 6f 6c 6c 20 29 7b 0a 20 20 20 20 70  ( pColl ){.    p
65f0: 43 6f 6c 6c 2d 3e 78 43 6d 70 20 3d 20 78 43 6f  Coll->xCmp = xCo
6600: 6d 70 61 72 65 3b 0a 20 20 20 20 70 43 6f 6c 6c  mpare;.    pColl
6610: 2d 3e 70 55 73 65 72 20 3d 20 70 43 74 78 3b 0a  ->pUser = pCtx;.
6620: 20 20 20 20 70 43 6f 6c 6c 2d 3e 78 44 65 6c 20      pColl->xDel 
6630: 3d 20 78 44 65 6c 3b 0a 20 20 20 20 70 43 6f 6c  = xDel;.    pCol
6640: 6c 2d 3e 65 6e 63 20 3d 20 65 6e 63 32 20 7c 20  l->enc = enc2 | 
6650: 28 65 6e 63 20 26 20 53 51 4c 49 54 45 5f 55 54  (enc & SQLITE_UT
6660: 46 31 36 5f 41 4c 49 47 4e 45 44 29 3b 0a 20 20  F16_ALIGNED);.  
6670: 7d 0a 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72  }.  sqlite3Error
6680: 28 64 62 2c 20 53 51 4c 49 54 45 5f 4f 4b 2c 20  (db, SQLITE_OK, 
6690: 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  0);.  return SQL
66a0: 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  ITE_OK;.}.../*.*
66b0: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 64  * This routine d
66c0: 6f 65 73 20 74 68 65 20 77 6f 72 6b 20 6f 66 20  oes the work of 
66d0: 6f 70 65 6e 69 6e 67 20 61 20 64 61 74 61 62 61  opening a databa
66e0: 73 65 20 6f 6e 20 62 65 68 61 6c 66 20 6f 66 0a  se on behalf of.
66f0: 2a 2a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28  ** sqlite3_open(
6700: 29 20 61 6e 64 20 73 71 6c 69 74 65 33 5f 6f 70  ) and sqlite3_op
6710: 65 6e 31 36 28 29 2e 20 54 68 65 20 64 61 74 61  en16(). The data
6720: 62 61 73 65 20 66 69 6c 65 6e 61 6d 65 20 22 7a  base filename "z
6730: 46 69 6c 65 6e 61 6d 65 22 20 20 0a 2a 2a 20 69  Filename"  .** i
6740: 73 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 2e  s UTF-8 encoded.
6750: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 6f  .*/.static int o
6760: 70 65 6e 44 61 74 61 62 61 73 65 28 0a 20 20 63  penDatabase(.  c
6770: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65  onst char *zFile
6780: 6e 61 6d 65 2c 20 2f 2a 20 44 61 74 61 62 61 73  name, /* Databas
6790: 65 20 66 69 6c 65 6e 61 6d 65 20 55 54 46 2d 38  e filename UTF-8
67a0: 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 73 71   encoded */.  sq
67b0: 6c 69 74 65 33 20 2a 2a 70 70 44 62 20 20 20 20  lite3 **ppDb    
67c0: 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 52 65 74       /* OUT: Ret
67d0: 75 72 6e 65 64 20 64 61 74 61 62 61 73 65 20 68  urned database h
67e0: 61 6e 64 6c 65 20 2a 2f 0a 29 7b 0a 20 20 73 71  andle */.){.  sq
67f0: 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74  lite3 *db;.  int
6800: 20 72 63 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a   rc;.  CollSeq *
6810: 70 43 6f 6c 6c 3b 0a 0a 20 20 2f 2a 20 41 6c 6c  pColl;..  /* All
6820: 6f 63 61 74 65 20 74 68 65 20 73 71 6c 69 74 65  ocate the sqlite
6830: 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 20   data structure 
6840: 2a 2f 0a 20 20 64 62 20 3d 20 73 71 6c 69 74 65  */.  db = sqlite
6850: 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 20 73 69 7a  3MallocZero( siz
6860: 65 6f 66 28 73 71 6c 69 74 65 33 29 20 29 3b 0a  eof(sqlite3) );.
6870: 20 20 69 66 28 20 64 62 3d 3d 30 20 29 20 67 6f    if( db==0 ) go
6880: 74 6f 20 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a 20  to opendb_out;. 
6890: 20 64 62 2d 3e 65 72 72 4d 61 73 6b 20 3d 20 30   db->errMask = 0
68a0: 78 66 66 3b 0a 20 20 64 62 2d 3e 70 72 69 6f 72  xff;.  db->prior
68b0: 4e 65 77 52 6f 77 69 64 20 3d 20 30 3b 0a 20 20  NewRowid = 0;.  
68c0: 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49  db->magic = SQLI
68d0: 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 3b 0a 20  TE_MAGIC_BUSY;. 
68e0: 20 64 62 2d 3e 6e 44 62 20 3d 20 32 3b 0a 20 20   db->nDb = 2;.  
68f0: 64 62 2d 3e 61 44 62 20 3d 20 64 62 2d 3e 61 44  db->aDb = db->aD
6900: 62 53 74 61 74 69 63 3b 0a 20 20 64 62 2d 3e 61  bStatic;.  db->a
6910: 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20  utoCommit = 1;. 
6920: 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51   db->flags |= SQ
6930: 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d  LITE_ShortColNam
6940: 65 73 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45  es.#if SQLITE_DE
6950: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
6960: 54 3c 34 0a 20 20 20 20 20 20 20 20 20 20 20 20  T<4.            
6970: 20 20 20 20 20 7c 20 53 51 4c 49 54 45 5f 4c 65       | SQLITE_Le
6980: 67 61 63 79 46 69 6c 65 46 6d 74 0a 23 65 6e 64  gacyFileFmt.#end
6990: 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
69a0: 5f 45 4e 41 42 4c 45 5f 4c 4f 41 44 5f 45 58 54  _ENABLE_LOAD_EXT
69b0: 45 4e 53 49 4f 4e 0a 20 20 20 20 20 20 20 20 20  ENSION.         
69c0: 20 20 20 20 20 20 20 20 7c 20 53 51 4c 49 54 45          | SQLITE
69d0: 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 0a 23  _LoadExtension.#
69e0: 65 6e 64 69 66 0a 20 20 20 20 20 20 3b 0a 20 20  endif.      ;.  
69f0: 73 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28  sqlite3HashInit(
6a00: 26 64 62 2d 3e 61 46 75 6e 63 2c 20 53 51 4c 49  &db->aFunc, SQLI
6a10: 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20  TE_HASH_STRING, 
6a20: 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 48 61 73  0);.  sqlite3Has
6a30: 68 49 6e 69 74 28 26 64 62 2d 3e 61 43 6f 6c 6c  hInit(&db->aColl
6a40: 53 65 71 2c 20 53 51 4c 49 54 45 5f 48 41 53 48  Seq, SQLITE_HASH
6a50: 5f 53 54 52 49 4e 47 2c 20 30 29 3b 0a 23 69 66  _STRING, 0);.#if
6a60: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
6a70: 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
6a80: 73 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28  sqlite3HashInit(
6a90: 26 64 62 2d 3e 61 4d 6f 64 75 6c 65 2c 20 53 51  &db->aModule, SQ
6aa0: 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47  LITE_HASH_STRING
6ab0: 2c 20 30 29 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  , 0);.#endif..  
6ac0: 2f 2a 20 41 64 64 20 74 68 65 20 64 65 66 61 75  /* Add the defau
6ad0: 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  lt collation seq
6ae0: 75 65 6e 63 65 20 42 49 4e 41 52 59 2e 20 42 49  uence BINARY. BI
6af0: 4e 41 52 59 20 77 6f 72 6b 73 20 66 6f 72 20 62  NARY works for b
6b00: 6f 74 68 20 55 54 46 2d 38 0a 20 20 2a 2a 20 61  oth UTF-8.  ** a
6b10: 6e 64 20 55 54 46 2d 31 36 2c 20 73 6f 20 61 64  nd UTF-16, so ad
6b20: 64 20 61 20 76 65 72 73 69 6f 6e 20 66 6f 72 20  d a version for 
6b30: 65 61 63 68 20 74 6f 20 61 76 6f 69 64 20 61 6e  each to avoid an
6b40: 79 20 75 6e 6e 65 63 65 73 73 61 72 79 0a 20 20  y unnecessary.  
6b50: 2a 2a 20 63 6f 6e 76 65 72 73 69 6f 6e 73 2e 20  ** conversions. 
6b60: 54 68 65 20 6f 6e 6c 79 20 65 72 72 6f 72 20 74  The only error t
6b70: 68 61 74 20 63 61 6e 20 6f 63 63 75 72 20 68 65  hat can occur he
6b80: 72 65 20 69 73 20 61 20 6d 61 6c 6c 6f 63 28 29  re is a malloc()
6b90: 20 66 61 69 6c 75 72 65 2e 0a 20 20 2a 2f 0a 20   failure..  */. 
6ba0: 20 69 66 28 20 63 72 65 61 74 65 43 6f 6c 6c 61   if( createColla
6bb0: 74 69 6f 6e 28 64 62 2c 20 22 42 49 4e 41 52 59  tion(db, "BINARY
6bc0: 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  ", SQLITE_UTF8, 
6bd0: 30 2c 20 62 69 6e 43 6f 6c 6c 46 75 6e 63 2c 20  0, binCollFunc, 
6be0: 30 29 20 7c 7c 0a 20 20 20 20 20 20 63 72 65 61  0) ||.      crea
6bf0: 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20  teCollation(db, 
6c00: 22 42 49 4e 41 52 59 22 2c 20 53 51 4c 49 54 45  "BINARY", SQLITE
6c10: 5f 55 54 46 31 36 42 45 2c 20 30 2c 20 62 69 6e  _UTF16BE, 0, bin
6c20: 43 6f 6c 6c 46 75 6e 63 2c 20 30 29 20 7c 7c 0a  CollFunc, 0) ||.
6c30: 20 20 20 20 20 20 63 72 65 61 74 65 43 6f 6c 6c        createColl
6c40: 61 74 69 6f 6e 28 64 62 2c 20 22 42 49 4e 41 52  ation(db, "BINAR
6c50: 59 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  Y", SQLITE_UTF16
6c60: 4c 45 2c 20 30 2c 20 62 69 6e 43 6f 6c 6c 46 75  LE, 0, binCollFu
6c70: 6e 63 2c 20 30 29 20 7c 7c 0a 20 20 20 20 20 20  nc, 0) ||.      
6c80: 28 64 62 2d 3e 70 44 66 6c 74 43 6f 6c 6c 20 3d  (db->pDfltColl =
6c90: 20 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c   sqlite3FindColl
6ca0: 53 65 71 28 64 62 2c 20 53 51 4c 49 54 45 5f 55  Seq(db, SQLITE_U
6cb0: 54 46 38 2c 20 22 42 49 4e 41 52 59 22 2c 20 36  TF8, "BINARY", 6
6cc0: 2c 20 30 29 29 3d 3d 30 20 0a 20 20 29 7b 0a 20  , 0))==0 .  ){. 
6cd0: 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6d     assert( db->m
6ce0: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
6cf0: 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53     db->magic = S
6d00: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53  QLITE_MAGIC_CLOS
6d10: 45 44 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65  ED;.    goto ope
6d20: 6e 64 62 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20  ndb_out;.  }..  
6d30: 2f 2a 20 41 6c 73 6f 20 61 64 64 20 61 20 55 54  /* Also add a UT
6d40: 46 2d 38 20 63 61 73 65 2d 69 6e 73 65 6e 73 69  F-8 case-insensi
6d50: 74 69 76 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  tive collation s
6d60: 65 71 75 65 6e 63 65 2e 20 2a 2f 0a 20 20 63 72  equence. */.  cr
6d70: 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 64 62  eateCollation(db
6d80: 2c 20 22 4e 4f 43 41 53 45 22 2c 20 53 51 4c 49  , "NOCASE", SQLI
6d90: 54 45 5f 55 54 46 38 2c 20 30 2c 20 6e 6f 63 61  TE_UTF8, 0, noca
6da0: 73 65 43 6f 6c 6c 61 74 69 6e 67 46 75 6e 63 2c  seCollatingFunc,
6db0: 20 30 29 3b 0a 0a 20 20 2f 2a 20 53 65 74 20 66   0);..  /* Set f
6dc0: 6c 61 67 73 20 6f 6e 20 74 68 65 20 62 75 69 6c  lags on the buil
6dd0: 74 2d 69 6e 20 63 6f 6c 6c 61 74 69 6e 67 20 73  t-in collating s
6de0: 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 64 62  equences */.  db
6df0: 2d 3e 70 44 66 6c 74 43 6f 6c 6c 2d 3e 74 79 70  ->pDfltColl->typ
6e00: 65 20 3d 20 53 51 4c 49 54 45 5f 43 4f 4c 4c 5f  e = SQLITE_COLL_
6e10: 42 49 4e 41 52 59 3b 0a 20 20 70 43 6f 6c 6c 20  BINARY;.  pColl 
6e20: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c  = sqlite3FindCol
6e30: 6c 53 65 71 28 64 62 2c 20 53 51 4c 49 54 45 5f  lSeq(db, SQLITE_
6e40: 55 54 46 38 2c 20 22 4e 4f 43 41 53 45 22 2c 20  UTF8, "NOCASE", 
6e50: 36 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 43 6f  6, 0);.  if( pCo
6e60: 6c 6c 20 29 7b 0a 20 20 20 20 70 43 6f 6c 6c 2d  ll ){.    pColl-
6e70: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 43  >type = SQLITE_C
6e80: 4f 4c 4c 5f 4e 4f 43 41 53 45 3b 0a 20 20 7d 0a  OLL_NOCASE;.  }.
6e90: 0a 20 20 2f 2a 20 4f 70 65 6e 20 74 68 65 20 62  .  /* Open the b
6ea0: 61 63 6b 65 6e 64 20 64 61 74 61 62 61 73 65 20  ackend database 
6eb0: 64 72 69 76 65 72 20 2a 2f 0a 20 20 72 63 20 3d  driver */.  rc =
6ec0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 61 63   sqlite3BtreeFac
6ed0: 74 6f 72 79 28 64 62 2c 20 7a 46 69 6c 65 6e 61  tory(db, zFilena
6ee0: 6d 65 2c 20 30 2c 20 53 51 4c 49 54 45 5f 44 45  me, 0, SQLITE_DE
6ef0: 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45  FAULT_CACHE_SIZE
6f00: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
6f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 26 64 62               &db
6f20: 2d 3e 61 44 62 5b 30 5d 2e 70 42 74 29 3b 0a 20  ->aDb[0].pBt);. 
6f30: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
6f40: 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  OK ){.    sqlite
6f50: 33 45 72 72 6f 72 28 64 62 2c 20 72 63 2c 20 30  3Error(db, rc, 0
6f60: 29 3b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63  );.    db->magic
6f70: 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f   = SQLITE_MAGIC_
6f80: 43 4c 4f 53 45 44 3b 0a 20 20 20 20 67 6f 74 6f  CLOSED;.    goto
6f90: 20 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a 20 20 7d   opendb_out;.  }
6fa0: 0a 20 20 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 53  .  db->aDb[0].pS
6fb0: 63 68 65 6d 61 20 3d 20 73 71 6c 69 74 65 33 53  chema = sqlite3S
6fc0: 63 68 65 6d 61 47 65 74 28 64 62 2c 20 64 62 2d  chemaGet(db, db-
6fd0: 3e 61 44 62 5b 30 5d 2e 70 42 74 29 3b 0a 20 20  >aDb[0].pBt);.  
6fe0: 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 53 63 68 65  db->aDb[1].pSche
6ff0: 6d 61 20 3d 20 73 71 6c 69 74 65 33 53 63 68 65  ma = sqlite3Sche
7000: 6d 61 47 65 74 28 64 62 2c 20 30 29 3b 0a 0a 0a  maGet(db, 0);...
7010: 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74    /* The default
7020: 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 66 6f   safety_level fo
7030: 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  r the main datab
7040: 61 73 65 20 69 73 20 27 66 75 6c 6c 27 3b 20 66  ase is 'full'; f
7050: 6f 72 20 74 68 65 20 74 65 6d 70 0a 20 20 2a 2a  or the temp.  **
7060: 20 64 61 74 61 62 61 73 65 20 69 74 20 69 73 20   database it is 
7070: 27 4e 4f 4e 45 27 2e 20 54 68 69 73 20 6d 61 74  'NONE'. This mat
7080: 63 68 65 73 20 74 68 65 20 70 61 67 65 72 20 6c  ches the pager l
7090: 61 79 65 72 20 64 65 66 61 75 6c 74 73 2e 20 20  ayer defaults.  
70a0: 0a 20 20 2a 2f 0a 20 20 64 62 2d 3e 61 44 62 5b  .  */.  db->aDb[
70b0: 30 5d 2e 7a 4e 61 6d 65 20 3d 20 22 6d 61 69 6e  0].zName = "main
70c0: 22 3b 0a 20 20 64 62 2d 3e 61 44 62 5b 30 5d 2e  ";.  db->aDb[0].
70d0: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 33  safety_level = 3
70e0: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
70f0: 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 20 20 64  _OMIT_TEMPDB.  d
7100: 62 2d 3e 61 44 62 5b 31 5d 2e 7a 4e 61 6d 65 20  b->aDb[1].zName 
7110: 3d 20 22 74 65 6d 70 22 3b 0a 20 20 64 62 2d 3e  = "temp";.  db->
7120: 61 44 62 5b 31 5d 2e 73 61 66 65 74 79 5f 6c 65  aDb[1].safety_le
7130: 76 65 6c 20 3d 20 31 3b 0a 23 65 6e 64 69 66 0a  vel = 1;.#endif.
7140: 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53  .  db->magic = S
7150: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
7160: 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c  ;.  if( db->mall
7170: 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 20  ocFailed ){.    
7180: 67 6f 74 6f 20 6f 70 65 6e 64 62 5f 6f 75 74 3b  goto opendb_out;
7190: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73  .  }..  /* Regis
71a0: 74 65 72 20 61 6c 6c 20 62 75 69 6c 74 2d 69 6e  ter all built-in
71b0: 20 66 75 6e 63 74 69 6f 6e 73 2c 20 62 75 74 20   functions, but 
71c0: 64 6f 20 6e 6f 74 20 61 74 74 65 6d 70 74 20 74  do not attempt t
71d0: 6f 20 72 65 61 64 20 74 68 65 0a 20 20 2a 2a 20  o read the.  ** 
71e0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
71f0: 79 65 74 2e 20 54 68 69 73 20 69 73 20 64 65 6c  yet. This is del
7200: 61 79 65 64 20 75 6e 74 69 6c 20 74 68 65 20 66  ayed until the f
7210: 69 72 73 74 20 74 69 6d 65 20 74 68 65 20 64 61  irst time the da
7220: 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 73 20 61  tabase.  ** is a
7230: 63 63 65 73 73 65 64 2e 0a 20 20 2a 2f 0a 20 20  ccessed..  */.  
7240: 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c  sqlite3Error(db,
7250: 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 30 29 3b 0a   SQLITE_OK, 0);.
7260: 20 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65    sqlite3Registe
7270: 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  rBuiltinFunction
7280: 73 28 64 62 29 3b 0a 0a 20 20 2f 2a 20 4c 6f 61  s(db);..  /* Loa
7290: 64 20 61 75 74 6f 6d 61 74 69 63 20 65 78 74 65  d automatic exte
72a0: 6e 73 69 6f 6e 73 20 2d 20 65 78 74 65 6e 73 69  nsions - extensi
72b0: 6f 6e 73 20 74 68 61 74 20 68 61 76 65 20 62 65  ons that have be
72c0: 65 6e 20 72 65 67 69 73 74 65 72 65 64 0a 20 20  en registered.  
72d0: 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c  ** using the sql
72e0: 69 74 65 33 5f 61 75 74 6f 6d 61 74 69 63 5f 65  ite3_automatic_e
72f0: 78 74 65 6e 73 69 6f 6e 28 29 20 41 50 49 2e 0a  xtension() API..
7300: 20 20 2a 2f 0a 20 20 28 76 6f 69 64 29 73 71 6c    */.  (void)sql
7310: 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65  ite3AutoLoadExte
7320: 6e 73 69 6f 6e 73 28 64 62 29 3b 0a 20 20 69 66  nsions(db);.  if
7330: 28 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64  ( sqlite3_errcod
7340: 65 28 64 62 29 21 3d 53 51 4c 49 54 45 5f 4f 4b  e(db)!=SQLITE_OK
7350: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65   ){.    goto ope
7360: 6e 64 62 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 23 69  ndb_out;.  }..#i
7370: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
7380: 4c 45 5f 46 54 53 31 0a 20 20 69 66 28 20 21 64  LE_FTS1.  if( !d
7390: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
73a0: 29 7b 0a 20 20 20 20 65 78 74 65 72 6e 20 69 6e  ){.    extern in
73b0: 74 20 73 71 6c 69 74 65 33 46 74 73 31 49 6e 69  t sqlite3Fts1Ini
73c0: 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20  t(sqlite3*);.   
73d0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 46 74 73   rc = sqlite3Fts
73e0: 31 49 6e 69 74 28 64 62 29 3b 0a 20 20 7d 0a 23  1Init(db);.  }.#
73f0: 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
7400: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 32  LITE_ENABLE_FTS2
7410: 0a 20 20 69 66 28 20 21 64 62 2d 3e 6d 61 6c 6c  .  if( !db->mall
7420: 6f 63 46 61 69 6c 65 64 20 26 26 20 72 63 3d 3d  ocFailed && rc==
7430: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
7440: 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
7450: 74 65 33 46 74 73 32 49 6e 69 74 28 73 71 6c 69  te3Fts2Init(sqli
7460: 74 65 33 2a 29 3b 0a 20 20 20 20 72 63 20 3d 20  te3*);.    rc = 
7470: 73 71 6c 69 74 65 33 46 74 73 32 49 6e 69 74 28  sqlite3Fts2Init(
7480: 64 62 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  db);.  }.#endif.
7490: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
74a0: 4e 41 42 4c 45 5f 49 43 55 0a 20 20 69 66 28 20  NABLE_ICU.  if( 
74b0: 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  !db->mallocFaile
74c0: 64 20 26 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f  d && rc==SQLITE_
74d0: 4f 4b 20 29 7b 0a 20 20 20 20 65 78 74 65 72 6e  OK ){.    extern
74e0: 20 69 6e 74 20 73 71 6c 69 74 65 33 49 63 75 49   int sqlite3IcuI
74f0: 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20  nit(sqlite3*);. 
7500: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 49     rc = sqlite3I
7510: 63 75 49 6e 69 74 28 64 62 29 3b 0a 20 20 7d 0a  cuInit(db);.  }.
7520: 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74 65 33  #endif.  sqlite3
7530: 45 72 72 6f 72 28 64 62 2c 20 72 63 2c 20 30 29  Error(db, rc, 0)
7540: 3b 0a 0a 20 20 2f 2a 20 2d 44 53 51 4c 49 54 45  ;..  /* -DSQLITE
7550: 5f 44 45 46 41 55 4c 54 5f 4c 4f 43 4b 49 4e 47  _DEFAULT_LOCKING
7560: 5f 4d 4f 44 45 3d 31 20 6d 61 6b 65 73 20 45 58  _MODE=1 makes EX
7570: 43 4c 55 53 49 56 45 20 74 68 65 20 64 65 66 61  CLUSIVE the defa
7580: 75 6c 74 20 6c 6f 63 6b 69 6e 67 0a 20 20 2a 2a  ult locking.  **
7590: 20 6d 6f 64 65 2e 20 20 2d 44 53 51 4c 49 54 45   mode.  -DSQLITE
75a0: 5f 44 45 46 41 55 4c 54 5f 4c 4f 43 4b 49 4e 47  _DEFAULT_LOCKING
75b0: 5f 4d 4f 44 45 3d 30 20 6d 61 6b 65 20 4e 4f 52  _MODE=0 make NOR
75c0: 4d 41 4c 20 74 68 65 20 64 65 66 61 75 6c 74 20  MAL the default 
75d0: 6c 6f 63 6b 69 6e 67 0a 20 20 2a 2a 20 6d 6f 64  locking.  ** mod
75e0: 65 2e 20 20 44 6f 69 6e 67 20 6e 6f 74 68 69 6e  e.  Doing nothin
75f0: 67 20 61 74 20 61 6c 6c 20 61 6c 73 6f 20 6d 61  g at all also ma
7600: 6b 65 73 20 4e 4f 52 4d 41 4c 20 74 68 65 20 64  kes NORMAL the d
7610: 65 66 61 75 6c 74 2e 0a 20 20 2a 2f 0a 23 69 66  efault..  */.#if
7620: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
7630: 4c 54 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f 44 45 0a  LT_LOCKING_MODE.
7640: 20 20 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f    db->dfltLockMo
7650: 64 65 20 3d 20 53 51 4c 49 54 45 5f 44 45 46 41  de = SQLITE_DEFA
7660: 55 4c 54 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f 44 45  ULT_LOCKING_MODE
7670: 3b 0a 20 20 73 71 6c 69 74 65 33 50 61 67 65 72  ;.  sqlite3Pager
7680: 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 73 71 6c 69  LockingMode(sqli
7690: 74 65 33 42 74 72 65 65 50 61 67 65 72 28 64 62  te3BtreePager(db
76a0: 2d 3e 61 44 62 5b 30 5d 2e 70 42 74 29 2c 0a 20  ->aDb[0].pBt),. 
76b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76c0: 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
76d0: 44 45 46 41 55 4c 54 5f 4c 4f 43 4b 49 4e 47 5f  DEFAULT_LOCKING_
76e0: 4d 4f 44 45 29 3b 0a 23 65 6e 64 69 66 0a 0a 6f  MODE);.#endif..o
76f0: 70 65 6e 64 62 5f 6f 75 74 3a 0a 20 20 69 66 28  pendb_out:.  if(
7700: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3d 3d 28   SQLITE_NOMEM==(
7710: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 72 72  rc = sqlite3_err
7720: 63 6f 64 65 28 64 62 29 29 20 29 7b 0a 20 20 20  code(db)) ){.   
7730: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 64   sqlite3_close(d
7740: 62 29 3b 0a 20 20 20 20 64 62 20 3d 20 30 3b 0a  b);.    db = 0;.
7750: 20 20 7d 0a 20 20 2a 70 70 44 62 20 3d 20 64 62    }.  *ppDb = db
7760: 3b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74  ;.  return sqlit
7770: 65 33 41 70 69 45 78 69 74 28 30 2c 20 72 63 29  e3ApiExit(0, rc)
7780: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e 20  ;.}../*.** Open 
7790: 61 20 6e 65 77 20 64 61 74 61 62 61 73 65 20 68  a new database h
77a0: 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71  andle..*/.int sq
77b0: 6c 69 74 65 33 5f 6f 70 65 6e 28 0a 20 20 63 6f  lite3_open(.  co
77c0: 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e  nst char *zFilen
77d0: 61 6d 65 2c 20 0a 20 20 73 71 6c 69 74 65 33 20  ame, .  sqlite3 
77e0: 2a 2a 70 70 44 62 20 0a 29 7b 0a 20 20 72 65 74  **ppDb .){.  ret
77f0: 75 72 6e 20 6f 70 65 6e 44 61 74 61 62 61 73 65  urn openDatabase
7800: 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 70 70 44 62  (zFilename, ppDb
7810: 29 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  );.}..#ifndef SQ
7820: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
7830: 2f 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77  /*.** Open a new
7840: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
7850: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
7860: 5f 6f 70 65 6e 31 36 28 0a 20 20 63 6f 6e 73 74  _open16(.  const
7870: 20 76 6f 69 64 20 2a 7a 46 69 6c 65 6e 61 6d 65   void *zFilename
7880: 2c 20 0a 20 20 73 71 6c 69 74 65 33 20 2a 2a 70  , .  sqlite3 **p
7890: 70 44 62 0a 29 7b 0a 20 20 63 68 61 72 20 63 6f  pDb.){.  char co
78a0: 6e 73 74 20 2a 7a 46 69 6c 65 6e 61 6d 65 38 3b  nst *zFilename8;
78b0: 20 20 20 2f 2a 20 7a 46 69 6c 65 6e 61 6d 65 20     /* zFilename 
78c0: 65 6e 63 6f 64 65 64 20 69 6e 20 55 54 46 2d 38  encoded in UTF-8
78d0: 20 69 6e 73 74 65 61 64 20 6f 66 20 55 54 46 2d   instead of UTF-
78e0: 31 36 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d  16 */.  int rc =
78f0: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 73 71   SQLITE_OK;.  sq
7900: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
7910: 6c 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 7a 46  l;..  assert( zF
7920: 69 6c 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73 73  ilename );.  ass
7930: 65 72 74 28 20 70 70 44 62 20 29 3b 0a 20 20 2a  ert( ppDb );.  *
7940: 70 70 44 62 20 3d 20 30 3b 0a 20 20 70 56 61 6c  ppDb = 0;.  pVal
7950: 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e   = sqlite3ValueN
7960: 65 77 28 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  ew();.  sqlite3V
7970: 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c  alueSetStr(pVal,
7980: 20 2d 31 2c 20 7a 46 69 6c 65 6e 61 6d 65 2c 20   -1, zFilename, 
7990: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
79a0: 56 45 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  VE, SQLITE_STATI
79b0: 43 29 3b 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 38  C);.  zFilename8
79c0: 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 54   = sqlite3ValueT
79d0: 65 78 74 28 70 56 61 6c 2c 20 53 51 4c 49 54 45  ext(pVal, SQLITE
79e0: 5f 55 54 46 38 29 3b 0a 20 20 69 66 28 20 7a 46  _UTF8);.  if( zF
79f0: 69 6c 65 6e 61 6d 65 38 20 29 7b 0a 20 20 20 20  ilename8 ){.    
7a00: 72 63 20 3d 20 6f 70 65 6e 44 61 74 61 62 61 73  rc = openDatabas
7a10: 65 28 7a 46 69 6c 65 6e 61 6d 65 38 2c 20 70 70  e(zFilename8, pp
7a20: 44 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  Db);.    if( rc=
7a30: 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 2a 70  =SQLITE_OK && *p
7a40: 70 44 62 20 29 7b 0a 20 20 20 20 20 20 72 63 20  pDb ){.      rc 
7a50: 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 2a  = sqlite3_exec(*
7a60: 70 70 44 62 2c 20 22 50 52 41 47 4d 41 20 65 6e  ppDb, "PRAGMA en
7a70: 63 6f 64 69 6e 67 20 3d 20 27 55 54 46 2d 31 36  coding = 'UTF-16
7a80: 27 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20  '", 0, 0, 0);.  
7a90: 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
7aa0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
7ab0: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 2a   sqlite3_close(*
7ac0: 70 70 44 62 29 3b 0a 20 20 20 20 20 20 20 20 2a  ppDb);.        *
7ad0: 70 70 44 62 20 3d 20 30 3b 0a 20 20 20 20 20 20  ppDb = 0;.      
7ae0: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71  }.    }.  }.  sq
7af0: 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70  lite3ValueFree(p
7b00: 56 61 6c 29 3b 0a 0a 20 20 72 65 74 75 72 6e 20  Val);..  return 
7b10: 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 30  sqlite3ApiExit(0
7b20: 2c 20 72 63 29 3b 0a 7d 0a 23 65 6e 64 69 66 20  , rc);.}.#endif 
7b30: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  /* SQLITE_OMIT_U
7b40: 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  TF16 */../*.** T
7b50: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75  he following rou
7b60: 74 69 6e 65 20 64 65 73 74 72 6f 79 73 20 61 20  tine destroys a 
7b70: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
7b80: 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64 20  that is created 
7b90: 62 79 0a 2a 2a 20 74 68 65 20 73 71 6c 69 74 65  by.** the sqlite
7ba0: 33 5f 63 6f 6d 70 69 6c 65 28 29 20 72 6f 75 74  3_compile() rout
7bb0: 69 6e 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72  ine. The integer
7bc0: 20 72 65 74 75 72 6e 65 64 20 69 73 20 61 6e 20   returned is an 
7bd0: 53 51 4c 49 54 45 5f 0a 2a 2a 20 73 75 63 63 65  SQLITE_.** succe
7be0: 73 73 2f 66 61 69 6c 75 72 65 20 63 6f 64 65 20  ss/failure code 
7bf0: 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74  that describes t
7c00: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65 78 65  he result of exe
7c10: 63 75 74 69 6e 67 20 74 68 65 20 76 69 72 74 75  cuting the virtu
7c20: 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 2e 0a 2a  al.** machine..*
7c30: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
7c40: 65 20 73 65 74 73 20 74 68 65 20 65 72 72 6f 72  e sets the error
7c50: 20 63 6f 64 65 20 61 6e 64 20 73 74 72 69 6e 67   code and string
7c60: 20 72 65 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20   returned by.** 
7c70: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28  sqlite3_errcode(
7c80: 29 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ), sqlite3_errms
7c90: 67 28 29 20 61 6e 64 20 73 71 6c 69 74 65 33 5f  g() and sqlite3_
7ca0: 65 72 72 6d 73 67 31 36 28 29 2e 0a 2a 2f 0a 69  errmsg16()..*/.i
7cb0: 6e 74 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  nt sqlite3_final
7cc0: 69 7a 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ize(sqlite3_stmt
7cd0: 20 2a 70 53 74 6d 74 29 7b 0a 20 20 69 6e 74 20   *pStmt){.  int 
7ce0: 72 63 3b 0a 20 20 69 66 28 20 70 53 74 6d 74 3d  rc;.  if( pStmt=
7cf0: 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  =0 ){.    rc = S
7d00: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73  QLITE_OK;.  }els
7d10: 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  e{.    rc = sqli
7d20: 74 65 33 56 64 62 65 46 69 6e 61 6c 69 7a 65 28  te3VdbeFinalize(
7d30: 28 56 64 62 65 2a 29 70 53 74 6d 74 29 3b 0a 20  (Vdbe*)pStmt);. 
7d40: 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a   }.  return rc;.
7d50: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65 72 6d 69 6e 61  }../*.** Termina
7d60: 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 65  te the current e
7d70: 78 65 63 75 74 69 6f 6e 20 6f 66 20 61 6e 20 53  xecution of an S
7d80: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  QL statement and
7d90: 20 72 65 73 65 74 20 69 74 0a 2a 2a 20 62 61 63   reset it.** bac
7da0: 6b 20 74 6f 20 69 74 73 20 73 74 61 72 74 69 6e  k to its startin
7db0: 67 20 73 74 61 74 65 20 73 6f 20 74 68 61 74 20  g state so that 
7dc0: 69 74 20 63 61 6e 20 62 65 20 72 65 75 73 65 64  it can be reused
7dd0: 2e 20 41 20 73 75 63 63 65 73 73 20 63 6f 64 65  . A success code
7de0: 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 70 72 69   from.** the pri
7df0: 6f 72 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20  or execution is 
7e00: 72 65 74 75 72 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20  returned..**.** 
7e10: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74  This routine set
7e20: 73 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  s the error code
7e30: 20 61 6e 64 20 73 74 72 69 6e 67 20 72 65 74 75   and string retu
7e40: 72 6e 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  rned by.** sqlit
7e50: 65 33 5f 65 72 72 63 6f 64 65 28 29 2c 20 73 71  e3_errcode(), sq
7e60: 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29 20 61  lite3_errmsg() a
7e70: 6e 64 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  nd sqlite3_errms
7e80: 67 31 36 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71  g16()..*/.int sq
7e90: 6c 69 74 65 33 5f 72 65 73 65 74 28 73 71 6c 69  lite3_reset(sqli
7ea0: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29  te3_stmt *pStmt)
7eb0: 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 66  {.  int rc;.  if
7ec0: 28 20 70 53 74 6d 74 3d 3d 30 20 29 7b 0a 20 20  ( pStmt==0 ){.  
7ed0: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
7ee0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
7ef0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  c = sqlite3VdbeR
7f00: 65 73 65 74 28 28 56 64 62 65 2a 29 70 53 74 6d  eset((Vdbe*)pStm
7f10: 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  t);.    sqlite3V
7f20: 64 62 65 4d 61 6b 65 52 65 61 64 79 28 28 56 64  dbeMakeReady((Vd
7f30: 62 65 2a 29 70 53 74 6d 74 2c 20 2d 31 2c 20 30  be*)pStmt, -1, 0
7f40: 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 61 73 73  , 0, 0);.    ass
7f50: 65 72 74 28 20 28 72 63 20 26 20 28 73 71 6c 69  ert( (rc & (sqli
7f60: 74 65 33 5f 64 62 5f 68 61 6e 64 6c 65 28 70 53  te3_db_handle(pS
7f70: 74 6d 74 29 2d 3e 65 72 72 4d 61 73 6b 29 29 3d  tmt)->errMask))=
7f80: 3d 72 63 20 29 3b 0a 20 20 7d 0a 20 20 72 65 74  =rc );.  }.  ret
7f90: 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  urn rc;.}../*.**
7fa0: 20 52 65 67 69 73 74 65 72 20 61 20 6e 65 77 20   Register a new 
7fb0: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
7fc0: 63 65 20 77 69 74 68 20 74 68 65 20 64 61 74 61  ce with the data
7fd0: 62 61 73 65 20 68 61 6e 64 6c 65 20 64 62 2e 0a  base handle db..
7fe0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63  */.int sqlite3_c
7ff0: 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28  reate_collation(
8000: 0a 20 20 73 71 6c 69 74 65 33 2a 20 64 62 2c 20  .  sqlite3* db, 
8010: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
8020: 4e 61 6d 65 2c 20 0a 20 20 69 6e 74 20 65 6e 63  Name, .  int enc
8030: 2c 20 0a 20 20 76 6f 69 64 2a 20 70 43 74 78 2c  , .  void* pCtx,
8040: 0a 20 20 69 6e 74 28 2a 78 43 6f 6d 70 61 72 65  .  int(*xCompare
8050: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
8060: 74 20 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  t void*,int,cons
8070: 74 20 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 69 6e  t void*).){.  in
8080: 74 20 72 63 3b 0a 20 20 61 73 73 65 72 74 28 20  t rc;.  assert( 
8090: 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  !db->mallocFaile
80a0: 64 20 29 3b 0a 20 20 72 63 20 3d 20 63 72 65 61  d );.  rc = crea
80b0: 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20  teCollation(db, 
80c0: 7a 4e 61 6d 65 2c 20 65 6e 63 2c 20 70 43 74 78  zName, enc, pCtx
80d0: 2c 20 78 43 6f 6d 70 61 72 65 2c 20 30 29 3b 0a  , xCompare, 0);.
80e0: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
80f0: 41 70 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b  ApiExit(db, rc);
8100: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74  .}../*.** Regist
8110: 65 72 20 61 20 6e 65 77 20 63 6f 6c 6c 61 74 69  er a new collati
8120: 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 74 68  on sequence with
8130: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
8140: 6e 64 6c 65 20 64 62 2e 0a 2a 2f 0a 69 6e 74 20  ndle db..*/.int 
8150: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
8160: 6f 6c 6c 61 74 69 6f 6e 5f 76 32 28 0a 20 20 73  ollation_v2(.  s
8170: 71 6c 69 74 65 33 2a 20 64 62 2c 20 0a 20 20 63  qlite3* db, .  c
8180: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
8190: 2c 20 0a 20 20 69 6e 74 20 65 6e 63 2c 20 0a 20  , .  int enc, . 
81a0: 20 76 6f 69 64 2a 20 70 43 74 78 2c 0a 20 20 69   void* pCtx,.  i
81b0: 6e 74 28 2a 78 43 6f 6d 70 61 72 65 29 28 76 6f  nt(*xCompare)(vo
81c0: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f  id*,int,const vo
81d0: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f  id*,int,const vo
81e0: 69 64 2a 29 2c 0a 20 20 76 6f 69 64 28 2a 78 44  id*),.  void(*xD
81f0: 65 6c 29 28 76 6f 69 64 2a 29 0a 29 7b 0a 20 20  el)(void*).){.  
8200: 69 6e 74 20 72 63 3b 0a 20 20 61 73 73 65 72 74  int rc;.  assert
8210: 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  ( !db->mallocFai
8220: 6c 65 64 20 29 3b 0a 20 20 72 63 20 3d 20 63 72  led );.  rc = cr
8230: 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 64 62  eateCollation(db
8240: 2c 20 7a 4e 61 6d 65 2c 20 65 6e 63 2c 20 70 43  , zName, enc, pC
8250: 74 78 2c 20 78 43 6f 6d 70 61 72 65 2c 20 78 44  tx, xCompare, xD
8260: 65 6c 29 3b 0a 20 20 72 65 74 75 72 6e 20 73 71  el);.  return sq
8270: 6c 69 74 65 33 41 70 69 45 78 69 74 28 64 62 2c  lite3ApiExit(db,
8280: 20 72 63 29 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66   rc);.}..#ifndef
8290: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
82a0: 31 36 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65  16./*.** Registe
82b0: 72 20 61 20 6e 65 77 20 63 6f 6c 6c 61 74 69 6f  r a new collatio
82c0: 6e 20 73 65 71 75 65 6e 63 65 20 77 69 74 68 20  n sequence with 
82d0: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
82e0: 64 6c 65 20 64 62 2e 0a 2a 2f 0a 69 6e 74 20 73  dle db..*/.int s
82f0: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
8300: 6c 6c 61 74 69 6f 6e 31 36 28 0a 20 20 73 71 6c  llation16(.  sql
8310: 69 74 65 33 2a 20 64 62 2c 20 0a 20 20 63 6f 6e  ite3* db, .  con
8320: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20  st char *zName, 
8330: 0a 20 20 69 6e 74 20 65 6e 63 2c 20 0a 20 20 76  .  int enc, .  v
8340: 6f 69 64 2a 20 70 43 74 78 2c 0a 20 20 69 6e 74  oid* pCtx,.  int
8350: 28 2a 78 43 6f 6d 70 61 72 65 29 28 76 6f 69 64  (*xCompare)(void
8360: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64  *,int,const void
8370: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64  *,int,const void
8380: 2a 29 0a 29 7b 0a 20 20 69 6e 74 20 72 63 20 3d  *).){.  int rc =
8390: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 63 68   SQLITE_OK;.  ch
83a0: 61 72 20 2a 7a 4e 61 6d 65 38 3b 20 0a 20 20 61  ar *zName8; .  a
83b0: 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c  ssert( !db->mall
83c0: 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 7a 4e  ocFailed );.  zN
83d0: 61 6d 65 38 20 3d 20 73 71 6c 69 74 65 33 55 74  ame8 = sqlite3Ut
83e0: 66 31 36 74 6f 38 28 7a 4e 61 6d 65 2c 20 2d 31  f16to8(zName, -1
83f0: 29 3b 0a 20 20 69 66 28 20 7a 4e 61 6d 65 38 20  );.  if( zName8 
8400: 29 7b 0a 20 20 20 20 72 63 20 3d 20 63 72 65 61  ){.    rc = crea
8410: 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20  teCollation(db, 
8420: 7a 4e 61 6d 65 38 2c 20 65 6e 63 2c 20 70 43 74  zName8, enc, pCt
8430: 78 2c 20 78 43 6f 6d 70 61 72 65 2c 20 30 29 3b  x, xCompare, 0);
8440: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65  .    sqlite3_fre
8450: 65 28 7a 4e 61 6d 65 38 29 3b 0a 20 20 7d 0a 20  e(zName8);.  }. 
8460: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 41   return sqlite3A
8470: 70 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b 0a  piExit(db, rc);.
8480: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
8490: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f  TE_OMIT_UTF16 */
84a0: 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  ../*.** Register
84b0: 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71   a collation seq
84c0: 75 65 6e 63 65 20 66 61 63 74 6f 72 79 20 63 61  uence factory ca
84d0: 6c 6c 62 61 63 6b 20 77 69 74 68 20 74 68 65 20  llback with the 
84e0: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a  database handle.
84f0: 2a 2a 20 64 62 2e 20 52 65 70 6c 61 63 65 20 61  ** db. Replace a
8500: 6e 79 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e  ny previously in
8510: 73 74 61 6c 6c 65 64 20 63 6f 6c 6c 61 74 69 6f  stalled collatio
8520: 6e 20 73 65 71 75 65 6e 63 65 20 66 61 63 74 6f  n sequence facto
8530: 72 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ry..*/.int sqlit
8540: 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65  e3_collation_nee
8550: 64 65 64 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  ded(.  sqlite3 *
8560: 64 62 2c 20 0a 20 20 76 6f 69 64 20 2a 70 43 6f  db, .  void *pCo
8570: 6c 6c 4e 65 65 64 65 64 41 72 67 2c 20 0a 20 20  llNeededArg, .  
8580: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
8590: 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  d)(void*,sqlite3
85a0: 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63  *,int eTextRep,c
85b0: 6f 6e 73 74 20 63 68 61 72 2a 29 0a 29 7b 0a 20  onst char*).){. 
85c0: 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
85d0: 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b 0a 20  tyCheck(db) ){. 
85e0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
85f0: 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 64  _MISUSE;.  }.  d
8600: 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 20 3d  b->xCollNeeded =
8610: 20 78 43 6f 6c 6c 4e 65 65 64 65 64 3b 0a 20 20   xCollNeeded;.  
8620: 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 31  db->xCollNeeded1
8630: 36 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 70 43 6f  6 = 0;.  db->pCo
8640: 6c 6c 4e 65 65 64 65 64 41 72 67 20 3d 20 70 43  llNeededArg = pC
8650: 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20  ollNeededArg;.  
8660: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
8670: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
8680: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 2f  ITE_OMIT_UTF16./
8690: 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20  *.** Register a 
86a0: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
86b0: 63 65 20 66 61 63 74 6f 72 79 20 63 61 6c 6c 62  ce factory callb
86c0: 61 63 6b 20 77 69 74 68 20 74 68 65 20 64 61 74  ack with the dat
86d0: 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20  abase handle.** 
86e0: 64 62 2e 20 52 65 70 6c 61 63 65 20 61 6e 79 20  db. Replace any 
86f0: 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 74 61  previously insta
8700: 6c 6c 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  lled collation s
8710: 65 71 75 65 6e 63 65 20 66 61 63 74 6f 72 79 2e  equence factory.
8720: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
8730: 63 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64 65 64  collation_needed
8740: 31 36 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  16(.  sqlite3 *d
8750: 62 2c 20 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c  b, .  void *pCol
8760: 6c 4e 65 65 64 65 64 41 72 67 2c 20 0a 20 20 76  lNeededArg, .  v
8770: 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
8780: 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  16)(void*,sqlite
8790: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
87a0: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 0a 29 7b 0a  const void*).){.
87b0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
87c0: 65 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b 0a  etyCheck(db) ){.
87d0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
87e0: 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20  E_MISUSE;.  }.  
87f0: 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 20  db->xCollNeeded 
8800: 3d 20 30 3b 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c  = 0;.  db->xColl
8810: 4e 65 65 64 65 64 31 36 20 3d 20 78 43 6f 6c 6c  Needed16 = xColl
8820: 4e 65 65 64 65 64 31 36 3b 0a 20 20 64 62 2d 3e  Needed16;.  db->
8830: 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 20 3d  pCollNeededArg =
8840: 20 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b   pCollNeededArg;
8850: 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  .  return SQLITE
8860: 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  _OK;.}.#endif /*
8870: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
8880: 31 36 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  16 */..#ifndef S
8890: 51 4c 49 54 45 5f 4f 4d 49 54 5f 47 4c 4f 42 41  QLITE_OMIT_GLOBA
88a0: 4c 52 45 43 4f 56 45 52 0a 2f 2a 0a 2a 2a 20 54  LRECOVER./*.** T
88b0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
88c0: 6e 6f 77 20 61 6e 20 61 6e 61 63 68 72 6f 6e 69  now an anachroni
88d0: 73 6d 2e 20 49 74 20 75 73 65 64 20 74 6f 20 62  sm. It used to b
88e0: 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 76 65  e used to recove
88f0: 72 20 66 72 6f 6d 20 61 0a 2a 2a 20 6d 61 6c 6c  r from a.** mall
8900: 6f 63 28 29 20 66 61 69 6c 75 72 65 2c 20 62 75  oc() failure, bu
8910: 74 20 53 51 4c 69 74 65 20 6e 6f 77 20 64 6f 65  t SQLite now doe
8920: 73 20 74 68 69 73 20 61 75 74 6f 6d 61 74 69 63  s this automatic
8930: 61 6c 6c 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  ally..*/.int sql
8940: 69 74 65 33 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f  ite3_global_reco
8950: 76 65 72 28 29 7b 0a 20 20 72 65 74 75 72 6e 20  ver(){.  return 
8960: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e  SQLITE_OK;.}.#en
8970: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20  dif../*.** Test 
8980: 74 6f 20 73 65 65 20 77 68 65 74 68 65 72 20 6f  to see whether o
8990: 72 20 6e 6f 74 20 74 68 65 20 64 61 74 61 62 61  r not the databa
89a0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  se connection is
89b0: 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 0a 2a   in autocommit.*
89c0: 2a 20 6d 6f 64 65 2e 20 20 52 65 74 75 72 6e 20  * mode.  Return 
89d0: 54 52 55 45 20 69 66 20 69 74 20 69 73 20 61 6e  TRUE if it is an
89e0: 64 20 46 41 4c 53 45 20 69 66 20 6e 6f 74 2e 20  d FALSE if not. 
89f0: 20 41 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65   Autocommit mode
8a00: 20 69 73 20 6f 6e 0a 2a 2a 20 62 79 20 64 65 66   is on.** by def
8a10: 61 75 6c 74 2e 20 20 41 75 74 6f 63 6f 6d 6d 69  ault.  Autocommi
8a20: 74 20 69 73 20 64 69 73 61 62 6c 65 64 20 62 79  t is disabled by
8a30: 20 61 20 42 45 47 49 4e 20 73 74 61 74 65 6d 65   a BEGIN stateme
8a40: 6e 74 20 61 6e 64 20 72 65 65 6e 61 62 6c 65 64  nt and reenabled
8a50: 0a 2a 2a 20 62 79 20 74 68 65 20 6e 65 78 74 20  .** by the next 
8a60: 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c 4c 42 41  COMMIT or ROLLBA
8a70: 43 4b 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 20 54  CK..**.******* T
8a80: 48 49 53 20 49 53 20 41 4e 20 45 58 50 45 52 49  HIS IS AN EXPERI
8a90: 4d 45 4e 54 41 4c 20 41 50 49 20 41 4e 44 20 49  MENTAL API AND I
8aa0: 53 20 53 55 42 4a 45 43 54 20 54 4f 20 43 48 41  S SUBJECT TO CHA
8ab0: 4e 47 45 20 2a 2a 2a 2a 2a 2a 0a 2a 2f 0a 69 6e  NGE ******.*/.in
8ac0: 74 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75  t sqlite3_get_au
8ad0: 74 6f 63 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33  tocommit(sqlite3
8ae0: 20 2a 64 62 29 7b 0a 20 20 72 65 74 75 72 6e 20   *db){.  return 
8af0: 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a  db->autoCommit;.
8b00: 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
8b10: 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 65  _DEBUG./*.** The
8b20: 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75 74 69   following routi
8b30: 6e 65 20 69 73 20 73 75 62 74 69 74 75 74 65 64  ne is subtituted
8b40: 20 66 6f 72 20 63 6f 6e 73 74 61 6e 74 20 53 51   for constant SQ
8b50: 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 69 6e 0a  LITE_CORRUPT in.
8b60: 2a 2a 20 64 65 62 75 67 67 69 6e 67 20 62 75 69  ** debugging bui
8b70: 6c 64 73 2e 20 20 54 68 69 73 20 70 72 6f 76 69  lds.  This provi
8b80: 64 65 73 20 61 20 77 61 79 20 74 6f 20 73 65 74  des a way to set
8b90: 20 61 20 62 72 65 61 6b 70 6f 69 6e 74 20 66 6f   a breakpoint fo
8ba0: 72 20 77 68 65 6e 0a 2a 2a 20 63 6f 72 72 75 70  r when.** corrup
8bb0: 74 69 6f 6e 20 69 73 20 66 69 72 73 74 20 64 65  tion is first de
8bc0: 74 65 63 74 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73  tected..*/.int s
8bd0: 71 6c 69 74 65 33 43 6f 72 72 75 70 74 28 76 6f  qlite3Corrupt(vo
8be0: 69 64 29 7b 0a 20 20 72 65 74 75 72 6e 20 53 51  id){.  return SQ
8bf0: 4c 49 54 45 5f 43 4f 52 52 55 50 54 3b 0a 7d 0a  LITE_CORRUPT;.}.
8c00: 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66  #endif...#ifndef
8c10: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
8c20: 52 45 44 5f 43 41 43 48 45 0a 2f 2a 0a 2a 2a 20  RED_CACHE./*.** 
8c30: 45 6e 61 62 6c 65 20 6f 72 20 64 69 73 61 62 6c  Enable or disabl
8c40: 65 20 74 68 65 20 73 68 61 72 65 64 20 70 61 67  e the shared pag
8c50: 65 72 20 61 6e 64 20 73 63 68 65 6d 61 20 66 65  er and schema fe
8c60: 61 74 75 72 65 73 20 66 6f 72 20 74 68 65 0a 2a  atures for the.*
8c70: 2a 20 63 75 72 72 65 6e 74 20 74 68 72 65 61 64  * current thread
8c80: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ..**.** This rou
8c90: 74 69 6e 65 20 73 68 6f 75 6c 64 20 6f 6e 6c 79  tine should only
8ca0: 20 62 65 20 63 61 6c 6c 65 64 20 77 68 65 6e 20   be called when 
8cb0: 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6f 70 65  there are no ope
8cc0: 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f  n.** database co
8cd0: 6e 6e 65 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 69 6e  nnections..*/.in
8ce0: 74 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65  t sqlite3_enable
8cf0: 5f 73 68 61 72 65 64 5f 63 61 63 68 65 28 69 6e  _shared_cache(in
8d00: 74 20 65 6e 61 62 6c 65 29 7b 0a 20 20 54 68 72  t enable){.  Thr
8d10: 65 61 64 44 61 74 61 20 2a 70 54 64 20 3d 20 73  eadData *pTd = s
8d20: 71 6c 69 74 65 33 54 68 72 65 61 64 44 61 74 61  qlite3ThreadData
8d30: 28 29 3b 0a 20 20 69 66 28 20 70 54 64 20 29 7b  ();.  if( pTd ){
8d40: 0a 20 20 20 20 2f 2a 20 49 74 20 69 73 20 6f 6e  .    /* It is on
8d50: 6c 79 20 6c 65 67 61 6c 20 74 6f 20 63 61 6c 6c  ly legal to call
8d60: 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f   sqlite3_enable_
8d70: 73 68 61 72 65 64 5f 63 61 63 68 65 28 29 20 77  shared_cache() w
8d80: 68 65 6e 20 74 68 65 72 65 0a 20 20 20 20 2a 2a  hen there.    **
8d90: 20 61 72 65 20 6e 6f 20 63 75 72 72 65 6e 74 6c   are no currentl
8da0: 79 20 6f 70 65 6e 20 62 2d 74 72 65 65 73 20 74  y open b-trees t
8db0: 68 61 74 20 77 65 72 65 20 6f 70 65 6e 65 64 20  hat were opened 
8dc0: 62 79 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 74  by the calling t
8dd0: 68 72 65 61 64 2e 0a 20 20 20 20 2a 2a 20 54 68  hread..    ** Th
8de0: 69 73 20 63 6f 6e 64 69 74 69 6f 6e 20 69 73 20  is condition is 
8df0: 6f 6e 6c 79 20 65 61 73 79 20 74 6f 20 64 65 74  only easy to det
8e00: 65 63 74 20 69 66 20 74 68 65 20 73 68 61 72 65  ect if the share
8e10: 64 2d 63 61 63 68 65 20 77 65 72 65 20 0a 20 20  d-cache were .  
8e20: 20 20 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20    ** previously 
8e30: 65 6e 61 62 6c 65 64 20 28 61 6e 64 20 69 73 20  enabled (and is 
8e40: 62 65 69 6e 67 20 64 69 73 61 62 6c 65 64 29 2e  being disabled).
8e50: 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28   .    */.    if(
8e60: 20 70 54 64 2d 3e 70 42 74 72 65 65 20 26 26 20   pTd->pBtree && 
8e70: 21 65 6e 61 62 6c 65 20 29 7b 0a 20 20 20 20 20  !enable ){.     
8e80: 20 61 73 73 65 72 74 28 20 70 54 64 2d 3e 75 73   assert( pTd->us
8e90: 65 53 68 61 72 65 64 44 61 74 61 20 29 3b 0a 20  eSharedData );. 
8ea0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
8eb0: 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 20 20 7d  TE_MISUSE;.    }
8ec0: 0a 0a 20 20 20 20 70 54 64 2d 3e 75 73 65 53 68  ..    pTd->useSh
8ed0: 61 72 65 64 44 61 74 61 20 3d 20 65 6e 61 62 6c  aredData = enabl
8ee0: 65 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65  e;.    sqlite3Re
8ef0: 6c 65 61 73 65 54 68 72 65 61 64 44 61 74 61 28  leaseThreadData(
8f00: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
8f10: 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 30  sqlite3ApiExit(0
8f20: 2c 20 53 51 4c 49 54 45 5f 4f 4b 29 3b 0a 7d 0a  , SQLITE_OK);.}.
8f30: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
8f40: 69 73 20 69 73 20 61 20 63 6f 6e 76 65 6e 69 65  is is a convenie
8f50: 6e 63 65 20 72 6f 75 74 69 6e 65 20 74 68 61 74  nce routine that
8f60: 20 6d 61 6b 65 73 20 73 75 72 65 20 74 68 61 74   makes sure that
8f70: 20 61 6c 6c 20 74 68 72 65 61 64 2d 73 70 65 63   all thread-spec
8f80: 69 66 69 63 0a 2a 2a 20 64 61 74 61 20 66 6f 72  ific.** data for
8f90: 20 74 68 69 73 20 74 68 72 65 61 64 20 68 61 73   this thread has
8fa0: 20 62 65 65 6e 20 64 65 61 6c 6c 6f 63 61 74 65   been deallocate
8fb0: 64 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  d..*/.void sqlit
8fc0: 65 33 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e 75  e3_thread_cleanu
8fd0: 70 28 76 6f 69 64 29 7b 0a 20 20 54 68 72 65 61  p(void){.  Threa
8fe0: 64 44 61 74 61 20 2a 70 54 64 20 3d 20 73 71 6c  dData *pTd = sql
8ff0: 69 74 65 33 4f 73 54 68 72 65 61 64 53 70 65 63  ite3OsThreadSpec
9000: 69 66 69 63 44 61 74 61 28 30 29 3b 0a 20 20 69  ificData(0);.  i
9010: 66 28 20 70 54 64 20 29 7b 0a 20 20 20 20 6d 65  f( pTd ){.    me
9020: 6d 73 65 74 28 70 54 64 2c 20 30 2c 20 73 69 7a  mset(pTd, 0, siz
9030: 65 6f 66 28 2a 70 54 64 29 29 3b 0a 20 20 20 20  eof(*pTd));.    
9040: 73 71 6c 69 74 65 33 4f 73 54 68 72 65 61 64 53  sqlite3OsThreadS
9050: 70 65 63 69 66 69 63 44 61 74 61 28 2d 31 29 3b  pecificData(-1);
9060: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  .  }.}../*.** Re
9070: 74 75 72 6e 20 6d 65 74 61 20 69 6e 66 6f 72 6d  turn meta inform
9080: 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 20 73 70  ation about a sp
9090: 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 20 6f 66  ecific column of
90a0: 20 61 20 64 61 74 61 62 61 73 65 20 74 61 62 6c   a database tabl
90b0: 65 2e 0a 2a 2a 20 53 65 65 20 63 6f 6d 6d 65 6e  e..** See commen
90c0: 74 20 69 6e 20 73 71 6c 69 74 65 33 2e 68 20 28  t in sqlite3.h (
90d0: 73 71 6c 69 74 65 2e 68 2e 69 6e 29 20 66 6f 72  sqlite.h.in) for
90e0: 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 69 66   details..*/.#if
90f0: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
9100: 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54  E_COLUMN_METADAT
9110: 41 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 74 61  A.int sqlite3_ta
9120: 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64  ble_column_metad
9130: 61 74 61 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  ata(.  sqlite3 *
9140: 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  db,             
9150: 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
9160: 20 68 61 6e 64 6c 65 20 2a 2f 0a 20 20 63 6f 6e   handle */.  con
9170: 73 74 20 63 68 61 72 20 2a 7a 44 62 4e 61 6d 65  st char *zDbName
9180: 2c 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61  ,        /* Data
9190: 62 61 73 65 20 6e 61 6d 65 20 6f 72 20 4e 55 4c  base name or NUL
91a0: 4c 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  L */.  const cha
91b0: 72 20 2a 7a 54 61 62 6c 65 4e 61 6d 65 2c 20 20  r *zTableName,  
91c0: 20 20 20 2f 2a 20 54 61 62 6c 65 20 6e 61 6d 65     /* Table name
91d0: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
91e0: 20 2a 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20   *zColumnName,  
91f0: 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65    /* Column name
9200: 20 2a 2f 0a 20 20 63 68 61 72 20 63 6f 6e 73 74   */.  char const
9210: 20 2a 2a 70 7a 44 61 74 61 54 79 70 65 2c 20 20   **pzDataType,  
9220: 20 20 2f 2a 20 4f 55 54 50 55 54 3a 20 44 65 63    /* OUTPUT: Dec
9230: 6c 61 72 65 64 20 64 61 74 61 20 74 79 70 65 20  lared data type 
9240: 2a 2f 0a 20 20 63 68 61 72 20 63 6f 6e 73 74 20  */.  char const 
9250: 2a 2a 70 7a 43 6f 6c 6c 53 65 71 2c 20 20 20 20  **pzCollSeq,    
9260: 20 2f 2a 20 4f 55 54 50 55 54 3a 20 43 6f 6c 6c   /* OUTPUT: Coll
9270: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e  ation sequence n
9280: 61 6d 65 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 4e  ame */.  int *pN
9290: 6f 74 4e 75 6c 6c 2c 20 20 20 20 20 20 20 20 20  otNull,         
92a0: 20 20 20 20 20 2f 2a 20 4f 55 54 50 55 54 3a 20       /* OUTPUT: 
92b0: 54 72 75 65 20 69 66 20 4e 4f 54 20 4e 55 4c 4c  True if NOT NULL
92c0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 65 78 69 73   constraint exis
92d0: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 50 72  ts */.  int *pPr
92e0: 69 6d 61 72 79 4b 65 79 2c 20 20 20 20 20 20 20  imaryKey,       
92f0: 20 20 20 20 2f 2a 20 4f 55 54 50 55 54 3a 20 54      /* OUTPUT: T
9300: 72 75 65 20 69 66 20 63 6f 6c 75 6d 6e 20 70 61  rue if column pa
9310: 72 74 20 6f 66 20 50 4b 20 2a 2f 0a 20 20 69 6e  rt of PK */.  in
9320: 74 20 2a 70 41 75 74 6f 69 6e 63 20 20 20 20 20  t *pAutoinc     
9330: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 55 54            /* OUT
9340: 50 55 54 3a 20 54 72 75 65 20 69 66 20 63 6f 6c  PUT: True if col
9350: 75 6d 73 20 69 73 20 61 75 74 6f 2d 69 6e 63 72  ums is auto-incr
9360: 65 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e  ement */.){.  in
9370: 74 20 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45  t rc;.  char *zE
9380: 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 54 61 62  rrMsg = 0;.  Tab
9390: 6c 65 20 2a 70 54 61 62 20 3d 20 30 3b 0a 20 20  le *pTab = 0;.  
93a0: 43 6f 6c 75 6d 6e 20 2a 70 43 6f 6c 20 3d 20 30  Column *pCol = 0
93b0: 3b 0a 20 20 69 6e 74 20 69 43 6f 6c 3b 0a 0a 20  ;.  int iCol;.. 
93c0: 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 44 61   char const *zDa
93d0: 74 61 54 79 70 65 20 3d 20 30 3b 0a 20 20 63 68  taType = 0;.  ch
93e0: 61 72 20 63 6f 6e 73 74 20 2a 7a 43 6f 6c 6c 53  ar const *zCollS
93f0: 65 71 20 3d 20 30 3b 0a 20 20 69 6e 74 20 6e 6f  eq = 0;.  int no
9400: 74 6e 75 6c 6c 20 3d 20 30 3b 0a 20 20 69 6e 74  tnull = 0;.  int
9410: 20 70 72 69 6d 61 72 79 6b 65 79 20 3d 20 30 3b   primarykey = 0;
9420: 0a 20 20 69 6e 74 20 61 75 74 6f 69 6e 63 20 3d  .  int autoinc =
9430: 20 30 3b 0a 0a 20 20 2f 2a 20 45 6e 73 75 72 65   0;..  /* Ensure
9440: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
9450: 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f  hema has been lo
9460: 61 64 65 64 20 2a 2f 0a 20 20 69 66 28 20 73 71  aded */.  if( sq
9470: 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62  lite3SafetyOn(db
9480: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
9490: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20  SQLITE_MISUSE;. 
94a0: 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
94b0: 33 49 6e 69 74 28 64 62 2c 20 26 7a 45 72 72 4d  3Init(db, &zErrM
94c0: 73 67 29 3b 0a 20 20 69 66 28 20 53 51 4c 49 54  sg);.  if( SQLIT
94d0: 45 5f 4f 4b 21 3d 72 63 20 29 7b 0a 20 20 20 20  E_OK!=rc ){.    
94e0: 67 6f 74 6f 20 65 72 72 6f 72 5f 6f 75 74 3b 0a  goto error_out;.
94f0: 20 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 63 61 74 65    }..  /* Locate
9500: 20 74 68 65 20 74 61 62 6c 65 20 69 6e 20 71 75   the table in qu
9510: 65 73 74 69 6f 6e 20 2a 2f 0a 20 20 70 54 61 62  estion */.  pTab
9520: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61   = sqlite3FindTa
9530: 62 6c 65 28 64 62 2c 20 7a 54 61 62 6c 65 4e 61  ble(db, zTableNa
9540: 6d 65 2c 20 7a 44 62 4e 61 6d 65 29 3b 0a 20 20  me, zDbName);.  
9550: 69 66 28 20 21 70 54 61 62 20 7c 7c 20 70 54 61  if( !pTab || pTa
9560: 62 2d 3e 70 53 65 6c 65 63 74 20 29 7b 0a 20 20  b->pSelect ){.  
9570: 20 20 70 54 61 62 20 3d 20 30 3b 0a 20 20 20 20    pTab = 0;.    
9580: 67 6f 74 6f 20 65 72 72 6f 72 5f 6f 75 74 3b 0a  goto error_out;.
9590: 20 20 7d 0a 0a 20 20 2f 2a 20 46 69 6e 64 20 74    }..  /* Find t
95a0: 68 65 20 63 6f 6c 75 6d 6e 20 66 6f 72 20 77 68  he column for wh
95b0: 69 63 68 20 69 6e 66 6f 20 69 73 20 72 65 71 75  ich info is requ
95c0: 65 73 74 65 64 20 2a 2f 0a 20 20 69 66 28 20 73  ested */.  if( s
95d0: 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 7a 43  qlite3IsRowid(zC
95e0: 6f 6c 75 6d 6e 4e 61 6d 65 29 20 29 7b 0a 20 20  olumnName) ){.  
95f0: 20 20 69 43 6f 6c 20 3d 20 70 54 61 62 2d 3e 69    iCol = pTab->i
9600: 50 4b 65 79 3b 0a 20 20 20 20 69 66 28 20 69 43  PKey;.    if( iC
9610: 6f 6c 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 70  ol>=0 ){.      p
9620: 43 6f 6c 20 3d 20 26 70 54 61 62 2d 3e 61 43 6f  Col = &pTab->aCo
9630: 6c 5b 69 43 6f 6c 5d 3b 0a 20 20 20 20 7d 0a 20  l[iCol];.    }. 
9640: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6f 72 28   }else{.    for(
9650: 69 43 6f 6c 3d 30 3b 20 69 43 6f 6c 3c 70 54 61  iCol=0; iCol<pTa
9660: 62 2d 3e 6e 43 6f 6c 3b 20 69 43 6f 6c 2b 2b 29  b->nCol; iCol++)
9670: 7b 0a 20 20 20 20 20 20 70 43 6f 6c 20 3d 20 26  {.      pCol = &
9680: 70 54 61 62 2d 3e 61 43 6f 6c 5b 69 43 6f 6c 5d  pTab->aCol[iCol]
9690: 3b 0a 20 20 20 20 20 20 69 66 28 20 30 3d 3d 73  ;.      if( 0==s
96a0: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70 43  qlite3StrICmp(pC
96b0: 6f 6c 2d 3e 7a 4e 61 6d 65 2c 20 7a 43 6f 6c 75  ol->zName, zColu
96c0: 6d 6e 4e 61 6d 65 29 20 29 7b 0a 20 20 20 20 20  mnName) ){.     
96d0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
96e0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
96f0: 69 43 6f 6c 3d 3d 70 54 61 62 2d 3e 6e 43 6f 6c  iCol==pTab->nCol
9700: 20 29 7b 0a 20 20 20 20 20 20 70 54 61 62 20 3d   ){.      pTab =
9710: 20 30 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 65   0;.      goto e
9720: 72 72 6f 72 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a  rror_out;.    }.
9730: 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 65 20 66 6f    }..  /* The fo
9740: 6c 6c 6f 77 69 6e 67 20 62 6c 6f 63 6b 20 73 74  llowing block st
9750: 6f 72 65 73 20 74 68 65 20 6d 65 74 61 20 69 6e  ores the meta in
9760: 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 77  formation that w
9770: 69 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64 0a  ill be returned.
9780: 20 20 2a 2a 20 74 6f 20 74 68 65 20 63 61 6c 6c    ** to the call
9790: 65 72 20 69 6e 20 6c 6f 63 61 6c 20 76 61 72 69  er in local vari
97a0: 61 62 6c 65 73 20 7a 44 61 74 61 54 79 70 65 2c  ables zDataType,
97b0: 20 7a 43 6f 6c 6c 53 65 71 2c 20 6e 6f 74 6e 75   zCollSeq, notnu
97c0: 6c 6c 2c 20 70 72 69 6d 61 72 79 6b 65 79 0a 20  ll, primarykey. 
97d0: 20 2a 2a 20 61 6e 64 20 61 75 74 6f 69 6e 63 2e   ** and autoinc.
97e0: 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74 20 74   At this point t
97f0: 68 65 72 65 20 61 72 65 20 74 77 6f 20 70 6f 73  here are two pos
9800: 73 69 62 69 6c 69 74 69 65 73 3a 0a 20 20 2a 2a  sibilities:.  **
9810: 20 0a 20 20 2a 2a 20 20 20 20 20 31 2e 20 54 68   .  **     1. Th
9820: 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75  e specified colu
9830: 6d 6e 20 6e 61 6d 65 20 77 61 73 20 72 6f 77 69  mn name was rowi
9840: 64 22 2c 20 22 6f 69 64 22 20 6f 72 20 22 5f 72  d", "oid" or "_r
9850: 6f 77 69 64 5f 22 20 0a 20 20 2a 2a 20 20 20 20  owid_" .  **    
9860: 20 20 20 20 61 6e 64 20 74 68 65 72 65 20 69 73      and there is
9870: 20 6e 6f 20 65 78 70 6c 69 63 69 74 6c 79 20 64   no explicitly d
9880: 65 63 6c 61 72 65 64 20 49 50 4b 20 63 6f 6c 75  eclared IPK colu
9890: 6d 6e 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20  mn. .  **.  **  
98a0: 20 20 20 32 2e 20 54 68 65 20 74 61 62 6c 65 20     2. The table 
98b0: 69 73 20 6e 6f 74 20 61 20 76 69 65 77 20 61 6e  is not a view an
98c0: 64 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d  d the column nam
98d0: 65 20 69 64 65 6e 74 69 66 69 65 64 20 61 6e 20  e identified an 
98e0: 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 65 78 70  .  **        exp
98f0: 6c 69 63 69 74 6c 79 20 64 65 63 6c 61 72 65 64  licitly declared
9900: 20 63 6f 6c 75 6d 6e 2e 20 43 6f 70 79 20 6d 65   column. Copy me
9910: 74 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ta information f
9920: 72 6f 6d 20 2a 70 43 6f 6c 2e 0a 20 20 2a 2f 20  rom *pCol..  */ 
9930: 0a 20 20 69 66 28 20 70 43 6f 6c 20 29 7b 0a 20  .  if( pCol ){. 
9940: 20 20 20 7a 44 61 74 61 54 79 70 65 20 3d 20 70     zDataType = p
9950: 43 6f 6c 2d 3e 7a 54 79 70 65 3b 0a 20 20 20 20  Col->zType;.    
9960: 7a 43 6f 6c 6c 53 65 71 20 3d 20 70 43 6f 6c 2d  zCollSeq = pCol-
9970: 3e 7a 43 6f 6c 6c 3b 0a 20 20 20 20 6e 6f 74 6e  >zColl;.    notn
9980: 75 6c 6c 20 3d 20 28 70 43 6f 6c 2d 3e 6e 6f 74  ull = (pCol->not
9990: 4e 75 6c 6c 3f 31 3a 30 29 3b 0a 20 20 20 20 70  Null?1:0);.    p
99a0: 72 69 6d 61 72 79 6b 65 79 20 20 3d 20 28 70 43  rimarykey  = (pC
99b0: 6f 6c 2d 3e 69 73 50 72 69 6d 4b 65 79 3f 31 3a  ol->isPrimKey?1:
99c0: 30 29 3b 0a 20 20 20 20 61 75 74 6f 69 6e 63 20  0);.    autoinc 
99d0: 3d 20 28 28 70 54 61 62 2d 3e 69 50 4b 65 79 3d  = ((pTab->iPKey=
99e0: 3d 69 43 6f 6c 20 26 26 20 70 54 61 62 2d 3e 61  =iCol && pTab->a
99f0: 75 74 6f 49 6e 63 29 3f 31 3a 30 29 3b 0a 20 20  utoInc)?1:0);.  
9a00: 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 44 61 74 61  }else{.    zData
9a10: 54 79 70 65 20 3d 20 22 49 4e 54 45 47 45 52 22  Type = "INTEGER"
9a20: 3b 0a 20 20 20 20 70 72 69 6d 61 72 79 6b 65 79  ;.    primarykey
9a30: 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 69 66 28 20   = 1;.  }.  if( 
9a40: 21 7a 43 6f 6c 6c 53 65 71 20 29 7b 0a 20 20 20  !zCollSeq ){.   
9a50: 20 7a 43 6f 6c 6c 53 65 71 20 3d 20 22 42 49 4e   zCollSeq = "BIN
9a60: 41 52 59 22 3b 0a 20 20 7d 0a 0a 65 72 72 6f 72  ARY";.  }..error
9a70: 5f 6f 75 74 3a 0a 20 20 69 66 28 20 73 71 6c 69  _out:.  if( sqli
9a80: 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29  te3SafetyOff(db)
9a90: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
9aa0: 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a  ITE_MISUSE;.  }.
9ab0: 0a 20 20 2f 2a 20 57 68 65 74 68 65 72 20 74 68  .  /* Whether th
9ac0: 65 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 20  e function call 
9ad0: 73 75 63 63 65 65 64 65 64 20 6f 72 20 66 61 69  succeeded or fai
9ae0: 6c 65 64 2c 20 73 65 74 20 74 68 65 20 6f 75 74  led, set the out
9af0: 70 75 74 20 70 61 72 61 6d 65 74 65 72 73 0a 20  put parameters. 
9b00: 20 2a 2a 20 74 6f 20 77 68 61 74 65 76 65 72 20   ** to whatever 
9b10: 74 68 65 69 72 20 6c 6f 63 61 6c 20 63 6f 75 6e  their local coun
9b20: 74 65 72 70 61 72 74 73 20 63 6f 6e 74 61 69 6e  terparts contain
9b30: 2e 20 49 66 20 61 6e 20 65 72 72 6f 72 20 64 69  . If an error di
9b40: 64 20 6f 63 63 75 72 2c 0a 20 20 2a 2a 20 74 68  d occur,.  ** th
9b50: 69 73 20 68 61 73 20 74 68 65 20 65 66 66 65 63  is has the effec
9b60: 74 20 6f 66 20 7a 65 72 6f 69 6e 67 20 61 6c 6c  t of zeroing all
9b70: 20 6f 75 74 70 75 74 20 70 61 72 61 6d 65 74 65   output paramete
9b80: 72 73 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70  rs..  */.  if( p
9b90: 7a 44 61 74 61 54 79 70 65 20 29 20 2a 70 7a 44  zDataType ) *pzD
9ba0: 61 74 61 54 79 70 65 20 3d 20 7a 44 61 74 61 54  ataType = zDataT
9bb0: 79 70 65 3b 0a 20 20 69 66 28 20 70 7a 43 6f 6c  ype;.  if( pzCol
9bc0: 6c 53 65 71 20 29 20 2a 70 7a 43 6f 6c 6c 53 65  lSeq ) *pzCollSe
9bd0: 71 20 3d 20 7a 43 6f 6c 6c 53 65 71 3b 0a 20 20  q = zCollSeq;.  
9be0: 69 66 28 20 70 4e 6f 74 4e 75 6c 6c 20 29 20 2a  if( pNotNull ) *
9bf0: 70 4e 6f 74 4e 75 6c 6c 20 3d 20 6e 6f 74 6e 75  pNotNull = notnu
9c00: 6c 6c 3b 0a 20 20 69 66 28 20 70 50 72 69 6d 61  ll;.  if( pPrima
9c10: 72 79 4b 65 79 20 29 20 2a 70 50 72 69 6d 61 72  ryKey ) *pPrimar
9c20: 79 4b 65 79 20 3d 20 70 72 69 6d 61 72 79 6b 65  yKey = primaryke
9c30: 79 3b 0a 20 20 69 66 28 20 70 41 75 74 6f 69 6e  y;.  if( pAutoin
9c40: 63 20 29 20 2a 70 41 75 74 6f 69 6e 63 20 3d 20  c ) *pAutoinc = 
9c50: 61 75 74 6f 69 6e 63 3b 0a 0a 20 20 69 66 28 20  autoinc;..  if( 
9c60: 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 26 26  SQLITE_OK==rc &&
9c70: 20 21 70 54 61 62 20 29 7b 0a 20 20 20 20 73 71   !pTab ){.    sq
9c80: 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
9c90: 7a 45 72 72 4d 73 67 2c 20 22 6e 6f 20 73 75 63  zErrMsg, "no suc
9ca0: 68 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 3a 20  h table column: 
9cb0: 22 2c 20 7a 54 61 62 6c 65 4e 61 6d 65 2c 20 22  ", zTableName, "
9cc0: 2e 22 2c 20 0a 20 20 20 20 20 20 20 20 7a 43 6f  .", .        zCo
9cd0: 6c 75 6d 6e 4e 61 6d 65 2c 20 30 29 3b 0a 20 20  lumnName, 0);.  
9ce0: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
9cf0: 52 4f 52 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  ROR;.  }.  sqlit
9d00: 65 33 45 72 72 6f 72 28 64 62 2c 20 72 63 2c 20  e3Error(db, rc, 
9d10: 28 7a 45 72 72 4d 73 67 3f 22 25 73 22 3a 30 29  (zErrMsg?"%s":0)
9d20: 2c 20 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73 71  , zErrMsg);.  sq
9d30: 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d  lite3_free(zErrM
9d40: 73 67 29 3b 0a 20 20 72 65 74 75 72 6e 20 73 71  sg);.  return sq
9d50: 6c 69 74 65 33 41 70 69 45 78 69 74 28 64 62 2c  lite3ApiExit(db,
9d60: 20 72 63 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a   rc);.}.#endif..
9d70: 2f 2a 0a 2a 2a 20 53 65 74 20 61 6c 6c 20 74 68  /*.** Set all th
9d80: 65 20 70 61 72 61 6d 65 74 65 72 73 20 69 6e 20  e parameters in 
9d90: 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c  the compiled SQL
9da0: 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 4e 55   statement to NU
9db0: 4c 4c 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  LL..*/.int sqlit
9dc0: 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67  e3_clear_binding
9dd0: 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  s(sqlite3_stmt *
9de0: 70 53 74 6d 74 29 7b 0a 20 20 69 6e 74 20 69 3b  pStmt){.  int i;
9df0: 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49  .  int rc = SQLI
9e00: 54 45 5f 4f 4b 3b 0a 20 20 66 6f 72 28 69 3d 31  TE_OK;.  for(i=1
9e10: 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ; rc==SQLITE_OK 
9e20: 26 26 20 69 3c 3d 73 71 6c 69 74 65 33 5f 62 69  && i<=sqlite3_bi
9e30: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75  nd_parameter_cou
9e40: 6e 74 28 70 53 74 6d 74 29 3b 20 69 2b 2b 29 7b  nt(pStmt); i++){
9e50: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
9e60: 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 70 53 74 6d  3_bind_null(pStm
9e70: 74 2c 20 69 29 3b 0a 20 20 7d 0a 20 20 72 65 74  t, i);.  }.  ret
9e80: 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  urn rc;.}../*.**
9e90: 20 53 6c 65 65 70 20 66 6f 72 20 61 20 6c 69 74   Sleep for a lit
9ea0: 74 6c 65 20 77 68 69 6c 65 2e 20 20 52 65 74 75  tle while.  Retu
9eb0: 72 6e 20 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66  rn the amount of
9ec0: 20 74 69 6d 65 20 73 6c 65 70 74 2e 0a 2a 2f 0a   time slept..*/.
9ed0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6c 65 65  int sqlite3_slee
9ee0: 70 28 69 6e 74 20 6d 73 29 7b 0a 20 20 72 65 74  p(int ms){.  ret
9ef0: 75 72 6e 20 73 71 6c 69 74 65 33 4f 73 53 6c 65  urn sqlite3OsSle
9f00: 65 70 28 6d 73 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  ep(ms);.}../*.**
9f10: 20 45 6e 61 62 6c 65 20 6f 72 20 64 69 73 61 62   Enable or disab
9f20: 6c 65 20 74 68 65 20 65 78 74 65 6e 64 65 64 20  le the extended 
9f30: 72 65 73 75 6c 74 20 63 6f 64 65 73 2e 0a 2a 2f  result codes..*/
9f40: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 65 78 74  .int sqlite3_ext
9f50: 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64  ended_result_cod
9f60: 65 73 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  es(sqlite3 *db, 
9f70: 69 6e 74 20 6f 6e 6f 66 66 29 7b 0a 20 20 64 62  int onoff){.  db
9f80: 2d 3e 65 72 72 4d 61 73 6b 20 3d 20 6f 6e 6f 66  ->errMask = onof
9f90: 66 20 3f 20 30 78 66 66 66 66 66 66 66 66 20 3a  f ? 0xffffffff :
9fa0: 20 30 78 66 66 3b 0a 20 20 72 65 74 75 72 6e 20   0xff;.  return 
9fb0: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a           SQLITE_OK;.}.