/ Hex Artifact Content
Login

Artifact 646deaa19e367fa8f3ace8b2e4577a53b1461d85:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 4d 61 69 6e 20 66  ******.** Main f
0180: 69 6c 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ile for the SQLi
0190: 74 65 20 6c 69 62 72 61 72 79 2e 20 20 54 68 65  te library.  The
01a0: 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 69   routines in thi
01b0: 73 20 66 69 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d  s file.** implem
01c0: 65 6e 74 20 74 68 65 20 70 72 6f 67 72 61 6d 6d  ent the programm
01d0: 65 72 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  er interface to 
01e0: 74 68 65 20 6c 69 62 72 61 72 79 2e 20 20 52 6f  the library.  Ro
01f0: 75 74 69 6e 65 73 20 69 6e 0a 2a 2a 20 6f 74 68  utines in.** oth
0200: 65 72 20 66 69 6c 65 73 20 61 72 65 20 66 6f 72  er files are for
0210: 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 20 62 79   internal use by
0220: 20 53 51 4c 69 74 65 20 61 6e 64 20 73 68 6f 75   SQLite and shou
0230: 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 61 63 63  ld not be.** acc
0240: 65 73 73 65 64 20 62 79 20 75 73 65 72 73 20 6f  essed by users o
0250: 66 20 74 68 65 20 6c 69 62 72 61 72 79 2e 0a 2a  f the library..*
0260: 2a 0a 2a 2a 20 24 49 64 3a 20 6d 61 69 6e 2e 63  *.** $Id: main.c
0270: 2c 76 20 31 2e 33 35 39 20 32 30 30 36 2f 31 30  ,v 1.359 2006/10
0280: 2f 31 39 20 32 30 3a 32 37 3a 35 39 20 73 68 65  /19 20:27:59 she
0290: 73 73 20 45 78 70 20 24 0a 2a 2f 0a 23 69 6e 63  ss Exp $.*/.#inc
02a0: 6c 75 64 65 20 22 73 71 6c 69 74 65 49 6e 74 2e  lude "sqliteInt.
02b0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e  h".#include "os.
02c0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 63 74 79  h".#include <cty
02d0: 70 65 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  pe.h>../*.** The
02e0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74   following const
02f0: 61 6e 74 20 76 61 6c 75 65 20 69 73 20 75 73 65  ant value is use
0300: 64 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f  d by the SQLITE_
0310: 42 49 47 45 4e 44 49 41 4e 20 61 6e 64 0a 2a 2a  BIGENDIAN and.**
0320: 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e   SQLITE_LITTLEEN
0330: 44 49 41 4e 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a  DIAN macros..*/.
0340: 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65  const int sqlite
0350: 33 6f 6e 65 20 3d 20 31 3b 0a 0a 2f 2a 0a 2a 2a  3one = 1;../*.**
0360: 20 54 68 65 20 76 65 72 73 69 6f 6e 20 6f 66 20   The version of 
0370: 74 68 65 20 6c 69 62 72 61 72 79 0a 2a 2f 0a 63  the library.*/.c
0380: 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74 65  onst char sqlite
0390: 33 5f 76 65 72 73 69 6f 6e 5b 5d 20 3d 20 53 51  3_version[] = SQ
03a0: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 3b 0a 63 6f  LITE_VERSION;.co
03b0: 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
03c0: 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 76 6f 69  3_libversion(voi
03d0: 64 29 7b 20 72 65 74 75 72 6e 20 73 71 6c 69 74  d){ return sqlit
03e0: 65 33 5f 76 65 72 73 69 6f 6e 3b 20 7d 0a 69 6e  e3_version; }.in
03f0: 74 20 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72  t sqlite3_libver
0400: 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 76 6f 69 64  sion_number(void
0410: 29 7b 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  ){ return SQLITE
0420: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 3b  _VERSION_NUMBER;
0430: 20 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69   }../*.** This i
0440: 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f  s the default co
0450: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
0460: 20 6e 61 6d 65 64 20 22 42 49 4e 41 52 59 22 20   named "BINARY" 
0470: 77 68 69 63 68 20 69 73 20 61 6c 77 61 79 73 0a  which is always.
0480: 2a 2a 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2f  ** available..*/
0490: 0a 73 74 61 74 69 63 20 69 6e 74 20 62 69 6e 43  .static int binC
04a0: 6f 6c 6c 46 75 6e 63 28 0a 20 20 76 6f 69 64 20  ollFunc(.  void 
04b0: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 69 6e 74 20  *NotUsed,.  int 
04c0: 6e 4b 65 79 31 2c 20 63 6f 6e 73 74 20 76 6f 69  nKey1, const voi
04d0: 64 20 2a 70 4b 65 79 31 2c 0a 20 20 69 6e 74 20  d *pKey1,.  int 
04e0: 6e 4b 65 79 32 2c 20 63 6f 6e 73 74 20 76 6f 69  nKey2, const voi
04f0: 64 20 2a 70 4b 65 79 32 0a 29 7b 0a 20 20 69 6e  d *pKey2.){.  in
0500: 74 20 72 63 2c 20 6e 3b 0a 20 20 6e 20 3d 20 6e  t rc, n;.  n = n
0510: 4b 65 79 31 3c 6e 4b 65 79 32 20 3f 20 6e 4b 65  Key1<nKey2 ? nKe
0520: 79 31 20 3a 20 6e 4b 65 79 32 3b 0a 20 20 72 63  y1 : nKey2;.  rc
0530: 20 3d 20 6d 65 6d 63 6d 70 28 70 4b 65 79 31 2c   = memcmp(pKey1,
0540: 20 70 4b 65 79 32 2c 20 6e 29 3b 0a 20 20 69 66   pKey2, n);.  if
0550: 28 20 72 63 3d 3d 30 20 29 7b 0a 20 20 20 20 72  ( rc==0 ){.    r
0560: 63 20 3d 20 6e 4b 65 79 31 20 2d 20 6e 4b 65 79  c = nKey1 - nKey
0570: 32 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  2;.  }.  return 
0580: 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 6f  rc;.}../*.** Ano
0590: 74 68 65 72 20 62 75 69 6c 74 2d 69 6e 20 63 6f  ther built-in co
05a0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
05b0: 3a 20 4e 4f 43 41 53 45 2e 20 0a 2a 2a 0a 2a 2a  : NOCASE. .**.**
05c0: 20 54 68 69 73 20 63 6f 6c 6c 61 74 69 6e 67 20   This collating 
05d0: 73 65 71 75 65 6e 63 65 20 69 73 20 69 6e 74 65  sequence is inte
05e0: 6e 64 65 64 20 74 6f 20 62 65 20 75 73 65 64 20  nded to be used 
05f0: 66 6f 72 20 22 63 61 73 65 20 69 6e 64 65 70 65  for "case indepe
0600: 6e 64 61 6e 74 0a 2a 2a 20 63 6f 6d 70 61 72 69  ndant.** compari
0610: 73 6f 6e 22 2e 20 53 51 4c 69 74 65 27 73 20 6b  son". SQLite's k
0620: 6e 6f 77 6c 65 64 67 65 20 6f 66 20 75 70 70 65  nowledge of uppe
0630: 72 20 61 6e 64 20 6c 6f 77 65 72 20 63 61 73 65  r and lower case
0640: 20 65 71 75 69 76 61 6c 65 6e 74 73 0a 2a 2a 20   equivalents.** 
0650: 65 78 74 65 6e 64 73 20 6f 6e 6c 79 20 74 6f 20  extends only to 
0660: 74 68 65 20 32 36 20 63 68 61 72 61 63 74 65 72  the 26 character
0670: 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 45 6e  s used in the En
0680: 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 2e 0a  glish language..
0690: 2a 2a 0a 2a 2a 20 41 74 20 74 68 65 20 6d 6f 6d  **.** At the mom
06a0: 65 6e 74 20 74 68 65 72 65 20 69 73 20 6f 6e 6c  ent there is onl
06b0: 79 20 61 20 55 54 46 2d 38 20 69 6d 70 6c 65 6d  y a UTF-8 implem
06c0: 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61  entation..*/.sta
06d0: 74 69 63 20 69 6e 74 20 6e 6f 63 61 73 65 43 6f  tic int nocaseCo
06e0: 6c 6c 61 74 69 6e 67 46 75 6e 63 28 0a 20 20 76  llatingFunc(.  v
06f0: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
0700: 69 6e 74 20 6e 4b 65 79 31 2c 20 63 6f 6e 73 74  int nKey1, const
0710: 20 76 6f 69 64 20 2a 70 4b 65 79 31 2c 0a 20 20   void *pKey1,.  
0720: 69 6e 74 20 6e 4b 65 79 32 2c 20 63 6f 6e 73 74  int nKey2, const
0730: 20 76 6f 69 64 20 2a 70 4b 65 79 32 0a 29 7b 0a   void *pKey2.){.
0740: 20 20 69 6e 74 20 72 20 3d 20 73 71 6c 69 74 65    int r = sqlite
0750: 33 53 74 72 4e 49 43 6d 70 28 0a 20 20 20 20 20  3StrNICmp(.     
0760: 20 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 70   (const char *)p
0770: 4b 65 79 31 2c 20 28 63 6f 6e 73 74 20 63 68 61  Key1, (const cha
0780: 72 20 2a 29 70 4b 65 79 32 2c 20 28 6e 4b 65 79  r *)pKey2, (nKey
0790: 31 3c 6e 4b 65 79 32 29 3f 6e 4b 65 79 31 3a 6e  1<nKey2)?nKey1:n
07a0: 4b 65 79 32 29 3b 0a 20 20 69 66 28 20 30 3d 3d  Key2);.  if( 0==
07b0: 72 20 29 7b 0a 20 20 20 20 72 20 3d 20 6e 4b 65  r ){.    r = nKe
07c0: 79 31 2d 6e 4b 65 79 32 3b 0a 20 20 7d 0a 20 20  y1-nKey2;.  }.  
07d0: 72 65 74 75 72 6e 20 72 3b 0a 7d 0a 0a 2f 2a 0a  return r;.}../*.
07e0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 52 4f  ** Return the RO
07f0: 57 49 44 20 6f 66 20 74 68 65 20 6d 6f 73 74 20  WID of the most 
0800: 72 65 63 65 6e 74 20 69 6e 73 65 72 74 0a 2a 2f  recent insert.*/
0810: 0a 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 73 71  .sqlite_int64 sq
0820: 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
0830: 74 5f 72 6f 77 69 64 28 73 71 6c 69 74 65 33 20  t_rowid(sqlite3 
0840: 2a 64 62 29 7b 0a 20 20 72 65 74 75 72 6e 20 64  *db){.  return d
0850: 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 7d 0a  b->lastRowid;.}.
0860: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
0870: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 6e  e number of chan
0880: 67 65 73 20 69 6e 20 74 68 65 20 6d 6f 73 74 20  ges in the most 
0890: 72 65 63 65 6e 74 20 63 61 6c 6c 20 74 6f 20 73  recent call to s
08a0: 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2e 0a 2a  qlite3_exec()..*
08b0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 68  /.int sqlite3_ch
08c0: 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 64  anges(sqlite3 *d
08d0: 62 29 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 2d  b){.  return db-
08e0: 3e 6e 43 68 61 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a  >nChange;.}../*.
08f0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75  ** Return the nu
0900: 6d 62 65 72 20 6f 66 20 63 68 61 6e 67 65 73 20  mber of changes 
0910: 73 69 6e 63 65 20 74 68 65 20 64 61 74 61 62 61  since the databa
0920: 73 65 20 68 61 6e 64 6c 65 20 77 61 73 20 6f 70  se handle was op
0930: 65 6e 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  ened..*/.int sql
0940: 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67  ite3_total_chang
0950: 65 73 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b  es(sqlite3 *db){
0960: 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 6e 54  .  return db->nT
0970: 6f 74 61 6c 43 68 61 6e 67 65 3b 0a 7d 0a 0a 2f  otalChange;.}../
0980: 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 6e 20 65 78  *.** Close an ex
0990: 69 73 74 69 6e 67 20 53 51 4c 69 74 65 20 64 61  isting SQLite da
09a0: 74 61 62 61 73 65 0a 2a 2f 0a 69 6e 74 20 73 71  tabase.*/.int sq
09b0: 6c 69 74 65 33 5f 63 6c 6f 73 65 28 73 71 6c 69  lite3_close(sqli
09c0: 74 65 33 20 2a 64 62 29 7b 0a 20 20 48 61 73 68  te3 *db){.  Hash
09d0: 45 6c 65 6d 20 2a 69 3b 0a 20 20 69 6e 74 20 6a  Elem *i;.  int j
09e0: 3b 0a 0a 20 20 69 66 28 20 21 64 62 20 29 7b 0a  ;..  if( !db ){.
09f0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
0a00: 45 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 69 66 28 20  E_OK;.  }.  if( 
0a10: 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
0a20: 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65  ck(db) ){.    re
0a30: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
0a40: 53 45 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20  SE;.  }..#ifdef 
0a50: 53 51 4c 49 54 45 5f 53 53 45 0a 20 20 7b 0a 20  SQLITE_SSE.  {. 
0a60: 20 20 20 65 78 74 65 72 6e 20 76 6f 69 64 20 73     extern void s
0a70: 71 6c 69 74 65 33 53 73 65 43 6c 65 61 6e 75 70  qlite3SseCleanup
0a80: 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 20  (sqlite3*);.    
0a90: 73 71 6c 69 74 65 33 53 73 65 43 6c 65 61 6e 75  sqlite3SseCleanu
0aa0: 70 28 64 62 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  p(db);.  }.#endi
0ab0: 66 20 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72  f ..  /* If ther
0ac0: 65 20 61 72 65 20 61 6e 79 20 6f 75 74 73 74 61  e are any outsta
0ad0: 6e 64 69 6e 67 20 56 4d 73 2c 20 72 65 74 75 72  nding VMs, retur
0ae0: 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 2e 20 2a  n SQLITE_BUSY. *
0af0: 2f 0a 20 20 73 71 6c 69 74 65 33 52 65 73 65 74  /.  sqlite3Reset
0b00: 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64  InternalSchema(d
0b10: 62 2c 20 30 29 3b 0a 20 20 69 66 28 20 64 62 2d  b, 0);.  if( db-
0b20: 3e 70 56 64 62 65 20 29 7b 0a 20 20 20 20 73 71  >pVdbe ){.    sq
0b30: 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53  lite3Error(db, S
0b40: 51 4c 49 54 45 5f 42 55 53 59 2c 20 0a 20 20 20  QLITE_BUSY, .   
0b50: 20 20 20 20 20 22 55 6e 61 62 6c 65 20 74 6f 20       "Unable to 
0b60: 63 6c 6f 73 65 20 64 75 65 20 74 6f 20 75 6e 66  close due to unf
0b70: 69 6e 61 6c 69 73 65 64 20 73 74 61 74 65 6d 65  inalised stateme
0b80: 6e 74 73 22 29 3b 0a 20 20 20 20 72 65 74 75 72  nts");.    retur
0b90: 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  n SQLITE_BUSY;. 
0ba0: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 21 73 71   }.  assert( !sq
0bb0: 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
0bc0: 28 64 62 29 20 29 3b 0a 0a 20 20 2f 2a 20 46 49  (db) );..  /* FI
0bd0: 58 20 4d 45 3a 20 64 62 2d 3e 6d 61 67 69 63 20  X ME: db->magic 
0be0: 6d 61 79 20 62 65 20 73 65 74 20 74 6f 20 53 51  may be set to SQ
0bf0: 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45  LITE_MAGIC_CLOSE
0c00: 44 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73  D if the databas
0c10: 65 0a 20 20 2a 2a 20 63 61 6e 6e 6f 74 20 62 65  e.  ** cannot be
0c20: 20 6f 70 65 6e 65 64 20 66 6f 72 20 73 6f 6d 65   opened for some
0c30: 20 72 65 61 73 6f 6e 2e 20 53 6f 20 74 68 69 73   reason. So this
0c40: 20 72 6f 75 74 69 6e 65 20 6e 65 65 64 73 20 74   routine needs t
0c50: 6f 20 72 75 6e 20 69 6e 0a 20 20 2a 2a 20 74 68  o run in.  ** th
0c60: 61 74 20 63 61 73 65 2e 20 42 75 74 20 6d 61 79  at case. But may
0c70: 62 65 20 74 68 65 72 65 20 73 68 6f 75 6c 64 20  be there should 
0c80: 62 65 20 61 6e 20 65 78 74 72 61 20 6d 61 67 69  be an extra magi
0c90: 63 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 0a  c value for the.
0ca0: 20 20 2a 2a 20 22 66 61 69 6c 65 64 20 74 6f 20    ** "failed to 
0cb0: 6f 70 65 6e 22 20 73 74 61 74 65 2e 0a 20 20 2a  open" state..  *
0cc0: 2f 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 67 69  /.  if( db->magi
0cd0: 63 21 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  c!=SQLITE_MAGIC_
0ce0: 43 4c 4f 53 45 44 20 26 26 20 73 71 6c 69 74 65  CLOSED && sqlite
0cf0: 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 7b  3SafetyOn(db) ){
0d00: 0a 20 20 20 20 2f 2a 20 70 72 69 6e 74 66 28 22  .    /* printf("
0d10: 44 49 44 20 4e 4f 54 20 43 4c 4f 53 45 5c 6e 22  DID NOT CLOSE\n"
0d20: 29 3b 20 66 66 6c 75 73 68 28 73 74 64 6f 75 74  ); fflush(stdout
0d30: 29 3b 20 2a 2f 0a 20 20 20 20 72 65 74 75 72 6e  ); */.    return
0d40: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
0d50: 20 7d 0a 0a 20 20 73 71 6c 69 74 65 33 56 74 61   }..  sqlite3Vta
0d60: 62 52 6f 6c 6c 62 61 63 6b 28 64 62 29 3b 0a 0a  bRollback(db);..
0d70: 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 64 62 2d    for(j=0; j<db-
0d80: 3e 6e 44 62 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20  >nDb; j++){.    
0d90: 73 74 72 75 63 74 20 44 62 20 2a 70 44 62 20 3d  struct Db *pDb =
0da0: 20 26 64 62 2d 3e 61 44 62 5b 6a 5d 3b 0a 20 20   &db->aDb[j];.  
0db0: 20 20 69 66 28 20 70 44 62 2d 3e 70 42 74 20 29    if( pDb->pBt )
0dc0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  {.      sqlite3B
0dd0: 74 72 65 65 43 6c 6f 73 65 28 70 44 62 2d 3e 70  treeClose(pDb->p
0de0: 42 74 29 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e  Bt);.      pDb->
0df0: 70 42 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 69  pBt = 0;.      i
0e00: 66 28 20 6a 21 3d 31 20 29 7b 0a 20 20 20 20 20  f( j!=1 ){.     
0e10: 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 20     pDb->pSchema 
0e20: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 0;.      }.   
0e30: 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33   }.  }.  sqlite3
0e40: 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68  ResetInternalSch
0e50: 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20 20 61 73  ema(db, 0);.  as
0e60: 73 65 72 74 28 20 64 62 2d 3e 6e 44 62 3c 3d 32  sert( db->nDb<=2
0e70: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
0e80: 2d 3e 61 44 62 3d 3d 64 62 2d 3e 61 44 62 53 74  ->aDb==db->aDbSt
0e90: 61 74 69 63 20 29 3b 0a 20 20 66 6f 72 28 69 3d  atic );.  for(i=
0ea0: 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28  sqliteHashFirst(
0eb0: 26 64 62 2d 3e 61 46 75 6e 63 29 3b 20 69 3b 20  &db->aFunc); i; 
0ec0: 69 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74  i=sqliteHashNext
0ed0: 28 69 29 29 7b 0a 20 20 20 20 46 75 6e 63 44 65  (i)){.    FuncDe
0ee0: 66 20 2a 70 46 75 6e 63 2c 20 2a 70 4e 65 78 74  f *pFunc, *pNext
0ef0: 3b 0a 20 20 20 20 66 6f 72 28 70 46 75 6e 63 20  ;.    for(pFunc 
0f00: 3d 20 28 46 75 6e 63 44 65 66 2a 29 73 71 6c 69  = (FuncDef*)sqli
0f10: 74 65 48 61 73 68 44 61 74 61 28 69 29 3b 20 70  teHashData(i); p
0f20: 46 75 6e 63 3b 20 70 46 75 6e 63 3d 70 4e 65 78  Func; pFunc=pNex
0f30: 74 29 7b 0a 20 20 20 20 20 20 70 4e 65 78 74 20  t){.      pNext 
0f40: 3d 20 70 46 75 6e 63 2d 3e 70 4e 65 78 74 3b 0a  = pFunc->pNext;.
0f50: 20 20 20 20 20 20 73 71 6c 69 74 65 46 72 65 65        sqliteFree
0f60: 28 70 46 75 6e 63 29 3b 0a 20 20 20 20 7d 0a 20  (pFunc);.    }. 
0f70: 20 7d 0a 0a 20 20 66 6f 72 28 69 3d 73 71 6c 69   }..  for(i=sqli
0f80: 74 65 48 61 73 68 46 69 72 73 74 28 26 64 62 2d  teHashFirst(&db-
0f90: 3e 61 43 6f 6c 6c 53 65 71 29 3b 20 69 3b 20 69  >aCollSeq); i; i
0fa0: 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28  =sqliteHashNext(
0fb0: 69 29 29 7b 0a 20 20 20 20 43 6f 6c 6c 53 65 71  i)){.    CollSeq
0fc0: 20 2a 70 43 6f 6c 6c 20 3d 20 28 43 6f 6c 6c 53   *pColl = (CollS
0fd0: 65 71 20 2a 29 73 71 6c 69 74 65 48 61 73 68 44  eq *)sqliteHashD
0fe0: 61 74 61 28 69 29 3b 0a 20 20 20 20 73 71 6c 69  ata(i);.    sqli
0ff0: 74 65 46 72 65 65 28 70 43 6f 6c 6c 29 3b 0a 20  teFree(pColl);. 
1000: 20 7d 0a 20 20 73 71 6c 69 74 65 33 48 61 73 68   }.  sqlite3Hash
1010: 43 6c 65 61 72 28 26 64 62 2d 3e 61 43 6f 6c 6c  Clear(&db->aColl
1020: 53 65 71 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  Seq);.#ifndef SQ
1030: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
1040: 4c 54 41 42 4c 45 0a 20 20 66 6f 72 28 69 3d 73  LTABLE.  for(i=s
1050: 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26  qliteHashFirst(&
1060: 64 62 2d 3e 61 4d 6f 64 75 6c 65 29 3b 20 69 3b  db->aModule); i;
1070: 20 69 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78   i=sqliteHashNex
1080: 74 28 69 29 29 7b 0a 20 20 20 20 4d 6f 64 75 6c  t(i)){.    Modul
1090: 65 20 2a 70 4d 6f 64 20 3d 20 28 4d 6f 64 75 6c  e *pMod = (Modul
10a0: 65 20 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61  e *)sqliteHashDa
10b0: 74 61 28 69 29 3b 0a 20 20 20 20 73 71 6c 69 74  ta(i);.    sqlit
10c0: 65 46 72 65 65 28 70 4d 6f 64 29 3b 0a 20 20 7d  eFree(pMod);.  }
10d0: 0a 20 20 73 71 6c 69 74 65 33 48 61 73 68 43 6c  .  sqlite3HashCl
10e0: 65 61 72 28 26 64 62 2d 3e 61 4d 6f 64 75 6c 65  ear(&db->aModule
10f0: 29 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 73 71 6c  );.#endif..  sql
1100: 69 74 65 33 48 61 73 68 43 6c 65 61 72 28 26 64  ite3HashClear(&d
1110: 62 2d 3e 61 46 75 6e 63 29 3b 0a 20 20 73 71 6c  b->aFunc);.  sql
1120: 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51  ite3Error(db, SQ
1130: 4c 49 54 45 5f 4f 4b 2c 20 30 29 3b 20 2f 2a 20  LITE_OK, 0); /* 
1140: 44 65 61 6c 6c 6f 63 61 74 65 73 20 61 6e 79 20  Deallocates any 
1150: 63 61 63 68 65 64 20 65 72 72 6f 72 20 73 74 72  cached error str
1160: 69 6e 67 73 2e 20 2a 2f 0a 20 20 69 66 28 20 64  ings. */.  if( d
1170: 62 2d 3e 70 45 72 72 20 29 7b 0a 20 20 20 20 73  b->pErr ){.    s
1180: 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
1190: 64 62 2d 3e 70 45 72 72 29 3b 0a 20 20 7d 0a 20  db->pErr);.  }. 
11a0: 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
11b0: 65 6e 73 69 6f 6e 73 28 64 62 29 3b 0a 0a 20 20  ensions(db);..  
11c0: 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49  db->magic = SQLI
11d0: 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 3b 0a  TE_MAGIC_ERROR;.
11e0: 0a 20 20 2f 2a 20 54 68 65 20 74 65 6d 70 2d 64  .  /* The temp-d
11f0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
1200: 73 20 61 6c 6c 6f 63 61 74 65 64 20 64 69 66 66  s allocated diff
1210: 65 72 65 6e 74 6c 79 20 66 72 6f 6d 20 74 68 65  erently from the
1220: 20 6f 74 68 65 72 20 73 63 68 65 6d 61 0a 20 20   other schema.  
1230: 2a 2a 20 6f 62 6a 65 63 74 73 20 28 75 73 69 6e  ** objects (usin
1240: 67 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29  g sqliteMalloc()
1250: 20 64 69 72 65 63 74 6c 79 2c 20 69 6e 73 74 65   directly, inste
1260: 61 64 20 6f 66 20 73 71 6c 69 74 65 33 42 74 72  ad of sqlite3Btr
1270: 65 65 53 63 68 65 6d 61 28 29 29 2e 0a 20 20 2a  eeSchema())..  *
1280: 2a 20 53 6f 20 69 74 20 6e 65 65 64 73 20 74 6f  * So it needs to
1290: 20 62 65 20 66 72 65 65 64 20 68 65 72 65 2e 20   be freed here. 
12a0: 54 6f 64 6f 3a 20 57 68 79 20 6e 6f 74 20 72 6f  Todo: Why not ro
12b0: 6c 6c 20 74 68 65 20 74 65 6d 70 20 73 63 68 65  ll the temp sche
12c0: 6d 61 20 69 6e 74 6f 0a 20 20 2a 2a 20 74 68 65  ma into.  ** the
12d0: 20 73 61 6d 65 20 73 71 6c 69 74 65 4d 61 6c 6c   same sqliteMall
12e0: 6f 63 28 29 20 61 73 20 74 68 65 20 6f 6e 65 20  oc() as the one 
12f0: 74 68 61 74 20 61 6c 6c 6f 63 61 74 65 73 20 74  that allocates t
1300: 68 65 20 64 61 74 61 62 61 73 65 20 0a 20 20 2a  he database .  *
1310: 2a 20 73 74 72 75 63 74 75 72 65 3f 0a 20 20 2a  * structure?.  *
1320: 2f 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28 64  /.  sqliteFree(d
1330: 62 2d 3e 61 44 62 5b 31 5d 2e 70 53 63 68 65 6d  b->aDb[1].pSchem
1340: 61 29 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65  a);.  sqliteFree
1350: 28 64 62 29 3b 0a 20 20 73 71 6c 69 74 65 33 52  (db);.  sqlite3R
1360: 65 6c 65 61 73 65 54 68 72 65 61 64 44 61 74 61  eleaseThreadData
1370: 28 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  ();.  return SQL
1380: 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  ITE_OK;.}../*.**
1390: 20 52 6f 6c 6c 62 61 63 6b 20 61 6c 6c 20 64 61   Rollback all da
13a0: 74 61 62 61 73 65 20 66 69 6c 65 73 2e 0a 2a 2f  tabase files..*/
13b0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
13c0: 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33  lbackAll(sqlite3
13d0: 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 69 3b 0a   *db){.  int i;.
13e0: 20 20 69 6e 74 20 69 6e 54 72 61 6e 73 20 3d 20    int inTrans = 
13f0: 30 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  0;.  for(i=0; i<
1400: 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20  db->nDb; i++){. 
1410: 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69     if( db->aDb[i
1420: 5d 2e 70 42 74 20 29 7b 0a 20 20 20 20 20 20 69  ].pBt ){.      i
1430: 66 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49  f( sqlite3BtreeI
1440: 73 49 6e 54 72 61 6e 73 28 64 62 2d 3e 61 44 62  sInTrans(db->aDb
1450: 5b 69 5d 2e 70 42 74 29 20 29 7b 0a 20 20 20 20  [i].pBt) ){.    
1460: 20 20 20 20 69 6e 54 72 61 6e 73 20 3d 20 31 3b      inTrans = 1;
1470: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
1480: 71 6c 69 74 65 33 42 74 72 65 65 52 6f 6c 6c 62  qlite3BtreeRollb
1490: 61 63 6b 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70  ack(db->aDb[i].p
14a0: 42 74 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61  Bt);.      db->a
14b0: 44 62 5b 69 5d 2e 69 6e 54 72 61 6e 73 20 3d 20  Db[i].inTrans = 
14c0: 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73  0;.    }.  }.  s
14d0: 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
14e0: 63 6b 28 64 62 29 3b 0a 20 20 69 66 28 20 64 62  ck(db);.  if( db
14f0: 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 49  ->flags&SQLITE_I
1500: 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 29 7b 0a  nternChanges ){.
1510: 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
1520: 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64  InternalSchema(d
1530: 62 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  b, 0);.  }..  /*
1540: 20 49 66 20 6f 6e 65 20 68 61 73 20 62 65 65 6e   If one has been
1550: 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 69 6e 76   configured, inv
1560: 6f 6b 65 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b  oke the rollback
1570: 2d 68 6f 6f 6b 20 63 61 6c 6c 62 61 63 6b 20 2a  -hook callback *
1580: 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 52 6f 6c  /.  if( db->xRol
1590: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 20 26 26  lbackCallback &&
15a0: 20 28 69 6e 54 72 61 6e 73 20 7c 7c 20 21 64 62   (inTrans || !db
15b0: 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 29 20 29 7b  ->autoCommit) ){
15c0: 0a 20 20 20 20 64 62 2d 3e 78 52 6f 6c 6c 62 61  .    db->xRollba
15d0: 63 6b 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70  ckCallback(db->p
15e0: 52 6f 6c 6c 62 61 63 6b 41 72 67 29 3b 0a 20 20  RollbackArg);.  
15f0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  }.}../*.** Retur
1600: 6e 20 61 20 73 74 61 74 69 63 20 73 74 72 69 6e  n a static strin
1610: 67 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  g that describes
1620: 20 74 68 65 20 6b 69 6e 64 20 6f 66 20 65 72 72   the kind of err
1630: 6f 72 20 73 70 65 63 69 66 69 65 64 20 69 6e 20  or specified in 
1640: 74 68 65 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 2e  the.** argument.
1650: 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  .*/.const char *
1660: 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e  sqlite3ErrStr(in
1670: 74 20 72 63 29 7b 0a 20 20 63 6f 6e 73 74 20 63  t rc){.  const c
1680: 68 61 72 20 2a 7a 3b 0a 20 20 73 77 69 74 63 68  har *z;.  switch
1690: 28 20 72 63 20 26 20 30 78 66 66 20 29 7b 0a 20  ( rc & 0xff ){. 
16a0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52     case SQLITE_R
16b0: 4f 57 3a 0a 20 20 20 20 63 61 73 65 20 53 51 4c  OW:.    case SQL
16c0: 49 54 45 5f 44 4f 4e 45 3a 0a 20 20 20 20 63 61  ITE_DONE:.    ca
16d0: 73 65 20 53 51 4c 49 54 45 5f 4f 4b 3a 20 20 20  se SQLITE_OK:   
16e0: 20 20 20 20 20 20 7a 20 3d 20 22 6e 6f 74 20 61        z = "not a
16f0: 6e 20 65 72 72 6f 72 22 3b 20 20 20 20 20 20 20  n error";       
1700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1710: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
1720: 73 65 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3a  se SQLITE_ERROR:
1730: 20 20 20 20 20 20 7a 20 3d 20 22 53 51 4c 20 6c        z = "SQL l
1740: 6f 67 69 63 20 65 72 72 6f 72 20 6f 72 20 6d 69  ogic error or mi
1750: 73 73 69 6e 67 20 64 61 74 61 62 61 73 65 22 3b  ssing database";
1760: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
1770: 73 65 20 53 51 4c 49 54 45 5f 50 45 52 4d 3a 20  se SQLITE_PERM: 
1780: 20 20 20 20 20 20 7a 20 3d 20 22 61 63 63 65 73        z = "acces
1790: 73 20 70 65 72 6d 69 73 73 69 6f 6e 20 64 65 6e  s permission den
17a0: 69 65 64 22 3b 20 20 20 20 20 20 20 20 20 20 20  ied";           
17b0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
17c0: 73 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3a  se SQLITE_ABORT:
17d0: 20 20 20 20 20 20 7a 20 3d 20 22 63 61 6c 6c 62        z = "callb
17e0: 61 63 6b 20 72 65 71 75 65 73 74 65 64 20 71 75  ack requested qu
17f0: 65 72 79 20 61 62 6f 72 74 22 3b 20 20 20 20 20  ery abort";     
1800: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
1810: 73 65 20 53 51 4c 49 54 45 5f 42 55 53 59 3a 20  se SQLITE_BUSY: 
1820: 20 20 20 20 20 20 7a 20 3d 20 22 64 61 74 61 62        z = "datab
1830: 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 22 3b 20  ase is locked"; 
1840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1850: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
1860: 73 65 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  se SQLITE_LOCKED
1870: 3a 20 20 20 20 20 7a 20 3d 20 22 64 61 74 61 62  :     z = "datab
1880: 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63  ase table is loc
1890: 6b 65 64 22 3b 20 20 20 20 20 20 20 20 20 20 20  ked";           
18a0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
18b0: 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3a  se SQLITE_NOMEM:
18c0: 20 20 20 20 20 20 7a 20 3d 20 22 6f 75 74 20 6f        z = "out o
18d0: 66 20 6d 65 6d 6f 72 79 22 3b 20 20 20 20 20 20  f memory";      
18e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
1900: 73 65 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e  se SQLITE_READON
1910: 4c 59 3a 20 20 20 7a 20 3d 20 22 61 74 74 65 6d  LY:   z = "attem
1920: 70 74 20 74 6f 20 77 72 69 74 65 20 61 20 72 65  pt to write a re
1930: 61 64 6f 6e 6c 79 20 64 61 74 61 62 61 73 65 22  adonly database"
1940: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61  ;  break;.    ca
1950: 73 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52  se SQLITE_INTERR
1960: 55 50 54 3a 20 20 7a 20 3d 20 22 69 6e 74 65 72  UPT:  z = "inter
1970: 72 75 70 74 65 64 22 3b 20 20 20 20 20 20 20 20  rupted";        
1980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1990: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
19a0: 73 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 3a  se SQLITE_IOERR:
19b0: 20 20 20 20 20 20 7a 20 3d 20 22 64 69 73 6b 20        z = "disk 
19c0: 49 2f 4f 20 65 72 72 6f 72 22 3b 20 20 20 20 20  I/O error";     
19d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
19f0: 73 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  se SQLITE_CORRUP
1a00: 54 3a 20 20 20 20 7a 20 3d 20 22 64 61 74 61 62  T:    z = "datab
1a10: 61 73 65 20 64 69 73 6b 20 69 6d 61 67 65 20 69  ase disk image i
1a20: 73 20 6d 61 6c 66 6f 72 6d 65 64 22 3b 20 20 20  s malformed";   
1a30: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
1a40: 73 65 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3a 20  se SQLITE_FULL: 
1a50: 20 20 20 20 20 20 7a 20 3d 20 22 64 61 74 61 62        z = "datab
1a60: 61 73 65 20 6f 72 20 64 69 73 6b 20 69 73 20 66  ase or disk is f
1a70: 75 6c 6c 22 3b 20 20 20 20 20 20 20 20 20 20 20  ull";           
1a80: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
1a90: 73 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50  se SQLITE_CANTOP
1aa0: 45 4e 3a 20 20 20 7a 20 3d 20 22 75 6e 61 62 6c  EN:   z = "unabl
1ab0: 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61  e to open databa
1ac0: 73 65 20 66 69 6c 65 22 3b 20 20 20 20 20 20 20  se file";       
1ad0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
1ae0: 73 65 20 53 51 4c 49 54 45 5f 50 52 4f 54 4f 43  se SQLITE_PROTOC
1af0: 4f 4c 3a 20 20 20 7a 20 3d 20 22 64 61 74 61 62  OL:   z = "datab
1b00: 61 73 65 20 6c 6f 63 6b 69 6e 67 20 70 72 6f 74  ase locking prot
1b10: 6f 63 6f 6c 20 66 61 69 6c 75 72 65 22 3b 20 20  ocol failure";  
1b20: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
1b30: 73 65 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 3a  se SQLITE_EMPTY:
1b40: 20 20 20 20 20 20 7a 20 3d 20 22 74 61 62 6c 65        z = "table
1b50: 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 61 74   contains no dat
1b60: 61 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  a";             
1b70: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
1b80: 73 65 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  se SQLITE_SCHEMA
1b90: 3a 20 20 20 20 20 7a 20 3d 20 22 64 61 74 61 62  :     z = "datab
1ba0: 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63  ase schema has c
1bb0: 68 61 6e 67 65 64 22 3b 20 20 20 20 20 20 20 20  hanged";        
1bc0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
1bd0: 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  se SQLITE_CONSTR
1be0: 41 49 4e 54 3a 20 7a 20 3d 20 22 63 6f 6e 73 74  AINT: z = "const
1bf0: 72 61 69 6e 74 20 66 61 69 6c 65 64 22 3b 20 20  raint failed";  
1c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c10: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
1c20: 73 65 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54  se SQLITE_MISMAT
1c30: 43 48 3a 20 20 20 7a 20 3d 20 22 64 61 74 61 74  CH:   z = "datat
1c40: 79 70 65 20 6d 69 73 6d 61 74 63 68 22 3b 20 20  ype mismatch";  
1c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c60: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
1c70: 73 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  se SQLITE_MISUSE
1c80: 3a 20 20 20 20 20 7a 20 3d 20 22 6c 69 62 72 61  :     z = "libra
1c90: 72 79 20 72 6f 75 74 69 6e 65 20 63 61 6c 6c 65  ry routine calle
1ca0: 64 20 6f 75 74 20 6f 66 20 73 65 71 75 65 6e 63  d out of sequenc
1cb0: 65 22 3b 62 72 65 61 6b 3b 0a 20 20 20 20 63 61  e";break;.    ca
1cc0: 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4c 46 53 3a  se SQLITE_NOLFS:
1cd0: 20 20 20 20 20 20 7a 20 3d 20 22 6b 65 72 6e 65        z = "kerne
1ce0: 6c 20 6c 61 63 6b 73 20 6c 61 72 67 65 20 66 69  l lacks large fi
1cf0: 6c 65 20 73 75 70 70 6f 72 74 22 3b 20 20 20 20  le support";    
1d00: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
1d10: 73 65 20 53 51 4c 49 54 45 5f 41 55 54 48 3a 20  se SQLITE_AUTH: 
1d20: 20 20 20 20 20 20 7a 20 3d 20 22 61 75 74 68 6f        z = "autho
1d30: 72 69 7a 61 74 69 6f 6e 20 64 65 6e 69 65 64 22  rization denied"
1d40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1d50: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
1d60: 73 65 20 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54  se SQLITE_FORMAT
1d70: 3a 20 20 20 20 20 7a 20 3d 20 22 61 75 78 69 6c  :     z = "auxil
1d80: 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 6f  iary database fo
1d90: 72 6d 61 74 20 65 72 72 6f 72 22 3b 20 20 20 20  rmat error";    
1da0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
1db0: 73 65 20 53 51 4c 49 54 45 5f 52 41 4e 47 45 3a  se SQLITE_RANGE:
1dc0: 20 20 20 20 20 20 7a 20 3d 20 22 62 69 6e 64 20        z = "bind 
1dd0: 6f 72 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20  or column index 
1de0: 6f 75 74 20 6f 66 20 72 61 6e 67 65 22 3b 20 20  out of range";  
1df0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
1e00: 73 65 20 53 51 4c 49 54 45 5f 4e 4f 54 41 44 42  se SQLITE_NOTADB
1e10: 3a 20 20 20 20 20 7a 20 3d 20 22 66 69 6c 65 20  :     z = "file 
1e20: 69 73 20 65 6e 63 72 79 70 74 65 64 20 6f 72 20  is encrypted or 
1e30: 69 73 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73  is not a databas
1e40: 65 22 3b 62 72 65 61 6b 3b 0a 20 20 20 20 64 65  e";break;.    de
1e50: 66 61 75 6c 74 3a 20 20 20 20 20 20 20 20 20 20  fault:          
1e60: 20 20 20 20 20 20 7a 20 3d 20 22 75 6e 6b 6e 6f        z = "unkno
1e70: 77 6e 20 65 72 72 6f 72 22 3b 20 20 20 20 20 20  wn error";      
1e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e90: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
1ea0: 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a  return z;.}../*.
1eb0: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
1ec0: 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 62 75 73  implements a bus
1ed0: 79 20 63 61 6c 6c 62 61 63 6b 20 74 68 61 74 20  y callback that 
1ee0: 73 6c 65 65 70 73 20 61 6e 64 20 74 72 69 65 73  sleeps and tries
1ef0: 0a 2a 2a 20 61 67 61 69 6e 20 75 6e 74 69 6c 20  .** again until 
1f00: 61 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65 20  a timeout value 
1f10: 69 73 20 72 65 61 63 68 65 64 2e 20 20 54 68 65  is reached.  The
1f20: 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65 20 69   timeout value i
1f30: 73 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 20  s.** an integer 
1f40: 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73  number of millis
1f50: 65 63 6f 6e 64 73 20 70 61 73 73 65 64 20 69 6e  econds passed in
1f60: 20 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   as the first.**
1f70: 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74   argument..*/.st
1f80: 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 44  atic int sqliteD
1f90: 65 66 61 75 6c 74 42 75 73 79 43 61 6c 6c 62 61  efaultBusyCallba
1fa0: 63 6b 28 0a 20 76 6f 69 64 20 2a 70 74 72 2c 20  ck(. void *ptr, 
1fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1fc0: 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   Database connec
1fd0: 74 69 6f 6e 20 2a 2f 0a 20 69 6e 74 20 63 6f 75  tion */. int cou
1fe0: 6e 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20  nt              
1ff0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
2000: 69 6d 65 73 20 74 61 62 6c 65 20 68 61 73 20 62  imes table has b
2010: 65 65 6e 20 62 75 73 79 20 2a 2f 0a 29 7b 0a 23  een busy */.){.#
2020: 69 66 20 4f 53 5f 57 49 4e 20 7c 7c 20 28 64 65  if OS_WIN || (de
2030: 66 69 6e 65 64 28 48 41 56 45 5f 55 53 4c 45 45  fined(HAVE_USLEE
2040: 50 29 20 26 26 20 48 41 56 45 5f 55 53 4c 45 45  P) && HAVE_USLEE
2050: 50 29 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  P).  static cons
2060: 74 20 75 38 20 64 65 6c 61 79 73 5b 5d 20 3d 0a  t u8 delays[] =.
2070: 20 20 20 20 20 7b 20 31 2c 20 32 2c 20 35 2c 20       { 1, 2, 5, 
2080: 31 30 2c 20 31 35 2c 20 32 30 2c 20 32 35 2c 20  10, 15, 20, 25, 
2090: 32 35 2c 20 20 32 35 2c 20 20 35 30 2c 20 20 35  25,  25,  50,  5
20a0: 30 2c 20 31 30 30 20 7d 3b 0a 20 20 73 74 61 74  0, 100 };.  stat
20b0: 69 63 20 63 6f 6e 73 74 20 75 38 20 74 6f 74 61  ic const u8 tota
20c0: 6c 73 5b 5d 20 3d 0a 20 20 20 20 20 7b 20 30 2c  ls[] =.     { 0,
20d0: 20 31 2c 20 33 2c 20 20 38 2c 20 31 38 2c 20 33   1, 3,  8, 18, 3
20e0: 33 2c 20 35 33 2c 20 37 38 2c 20 31 30 33 2c 20  3, 53, 78, 103, 
20f0: 31 32 38 2c 20 31 37 38 2c 20 32 32 38 20 7d 3b  128, 178, 228 };
2100: 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 4c 41 59  .# define NDELAY
2110: 20 28 73 69 7a 65 6f 66 28 64 65 6c 61 79 73 29   (sizeof(delays)
2120: 2f 73 69 7a 65 6f 66 28 64 65 6c 61 79 73 5b 30  /sizeof(delays[0
2130: 5d 29 29 0a 20 20 69 6e 74 20 74 69 6d 65 6f 75  ])).  int timeou
2140: 74 20 3d 20 28 28 73 71 6c 69 74 65 33 20 2a 29  t = ((sqlite3 *)
2150: 70 74 72 29 2d 3e 62 75 73 79 54 69 6d 65 6f 75  ptr)->busyTimeou
2160: 74 3b 0a 20 20 69 6e 74 20 64 65 6c 61 79 2c 20  t;.  int delay, 
2170: 70 72 69 6f 72 3b 0a 0a 20 20 61 73 73 65 72 74  prior;..  assert
2180: 28 20 63 6f 75 6e 74 3e 3d 30 20 29 3b 0a 20 20  ( count>=0 );.  
2190: 69 66 28 20 63 6f 75 6e 74 20 3c 20 4e 44 45 4c  if( count < NDEL
21a0: 41 59 20 29 7b 0a 20 20 20 20 64 65 6c 61 79 20  AY ){.    delay 
21b0: 3d 20 64 65 6c 61 79 73 5b 63 6f 75 6e 74 5d 3b  = delays[count];
21c0: 0a 20 20 20 20 70 72 69 6f 72 20 3d 20 74 6f 74  .    prior = tot
21d0: 61 6c 73 5b 63 6f 75 6e 74 5d 3b 0a 20 20 7d 65  als[count];.  }e
21e0: 6c 73 65 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d  lse{.    delay =
21f0: 20 64 65 6c 61 79 73 5b 4e 44 45 4c 41 59 2d 31   delays[NDELAY-1
2200: 5d 3b 0a 20 20 20 20 70 72 69 6f 72 20 3d 20 74  ];.    prior = t
2210: 6f 74 61 6c 73 5b 4e 44 45 4c 41 59 2d 31 5d 20  otals[NDELAY-1] 
2220: 2b 20 64 65 6c 61 79 2a 28 63 6f 75 6e 74 2d 28  + delay*(count-(
2230: 4e 44 45 4c 41 59 2d 31 29 29 3b 0a 20 20 7d 0a  NDELAY-1));.  }.
2240: 20 20 69 66 28 20 70 72 69 6f 72 20 2b 20 64 65    if( prior + de
2250: 6c 61 79 20 3e 20 74 69 6d 65 6f 75 74 20 29 7b  lay > timeout ){
2260: 0a 20 20 20 20 64 65 6c 61 79 20 3d 20 74 69 6d  .    delay = tim
2270: 65 6f 75 74 20 2d 20 70 72 69 6f 72 3b 0a 20 20  eout - prior;.  
2280: 20 20 69 66 28 20 64 65 6c 61 79 3c 3d 30 20 29    if( delay<=0 )
2290: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
22a0: 20 73 71 6c 69 74 65 33 4f 73 53 6c 65 65 70 28   sqlite3OsSleep(
22b0: 64 65 6c 61 79 29 3b 0a 20 20 72 65 74 75 72 6e  delay);.  return
22c0: 20 31 3b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20   1;.#else.  int 
22d0: 74 69 6d 65 6f 75 74 20 3d 20 28 28 73 71 6c 69  timeout = ((sqli
22e0: 74 65 33 20 2a 29 70 74 72 29 2d 3e 62 75 73 79  te3 *)ptr)->busy
22f0: 54 69 6d 65 6f 75 74 3b 0a 20 20 69 66 28 20 28  Timeout;.  if( (
2300: 63 6f 75 6e 74 2b 31 29 2a 31 30 30 30 20 3e 20  count+1)*1000 > 
2310: 74 69 6d 65 6f 75 74 20 29 7b 0a 20 20 20 20 72  timeout ){.    r
2320: 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 73  eturn 0;.  }.  s
2330: 71 6c 69 74 65 33 4f 73 53 6c 65 65 70 28 31 30  qlite3OsSleep(10
2340: 30 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b  00);.  return 1;
2350: 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a  .#endif.}../*.**
2360: 20 49 6e 76 6f 6b 65 20 74 68 65 20 67 69 76 65   Invoke the give
2370: 6e 20 62 75 73 79 20 68 61 6e 64 6c 65 72 2e 0a  n busy handler..
2380: 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  **.** This routi
2390: 6e 65 20 69 73 20 63 61 6c 6c 65 64 20 77 68 65  ne is called whe
23a0: 6e 20 61 6e 20 6f 70 65 72 61 74 69 6f 6e 20 66  n an operation f
23b0: 61 69 6c 65 64 20 77 69 74 68 20 61 20 6c 6f 63  ailed with a loc
23c0: 6b 2e 0a 2a 2a 20 49 66 20 74 68 69 73 20 72 6f  k..** If this ro
23d0: 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 6e 6f  utine returns no
23e0: 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 6c 6f 63 6b  n-zero, the lock
23f0: 20 69 73 20 72 65 74 72 69 65 64 2e 20 20 49 66   is retried.  If
2400: 20 69 74 0a 2a 2a 20 72 65 74 75 72 6e 73 20 30   it.** returns 0
2410: 2c 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  , the operation 
2420: 61 62 6f 72 74 73 20 77 69 74 68 20 61 6e 20 53  aborts with an S
2430: 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72  QLITE_BUSY error
2440: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
2450: 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65  InvokeBusyHandle
2460: 72 28 42 75 73 79 48 61 6e 64 6c 65 72 20 2a 70  r(BusyHandler *p
2470: 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69  ){.  int rc;.  i
2480: 66 28 20 70 3d 3d 30 20 7c 7c 20 70 2d 3e 78 46  f( p==0 || p->xF
2490: 75 6e 63 3d 3d 30 20 7c 7c 20 70 2d 3e 6e 42 75  unc==0 || p->nBu
24a0: 73 79 3c 30 20 29 20 72 65 74 75 72 6e 20 30 3b  sy<0 ) return 0;
24b0: 0a 20 20 72 63 20 3d 20 70 2d 3e 78 46 75 6e 63  .  rc = p->xFunc
24c0: 28 70 2d 3e 70 41 72 67 2c 20 70 2d 3e 6e 42 75  (p->pArg, p->nBu
24d0: 73 79 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 30  sy);.  if( rc==0
24e0: 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 42 75 73 79   ){.    p->nBusy
24f0: 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a   = -1;.  }else{.
2500: 20 20 20 20 70 2d 3e 6e 42 75 73 79 2b 2b 3b 0a      p->nBusy++;.
2510: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b    }.  return rc;
2520: 20 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20   .}../*.** This 
2530: 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68 65  routine sets the
2540: 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 66   busy callback f
2550: 6f 72 20 61 6e 20 53 71 6c 69 74 65 20 64 61 74  or an Sqlite dat
2560: 61 62 61 73 65 20 74 6f 20 74 68 65 0a 2a 2a 20  abase to the.** 
2570: 67 69 76 65 6e 20 63 61 6c 6c 62 61 63 6b 20 66  given callback f
2580: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74 68 65  unction with the
2590: 20 67 69 76 65 6e 20 61 72 67 75 6d 65 6e 74 2e   given argument.
25a0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
25b0: 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 0a 20 20  busy_handler(.  
25c0: 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20 69  sqlite3 *db,.  i
25d0: 6e 74 20 28 2a 78 42 75 73 79 29 28 76 6f 69 64  nt (*xBusy)(void
25e0: 2a 2c 69 6e 74 29 2c 0a 20 20 76 6f 69 64 20 2a  *,int),.  void *
25f0: 70 41 72 67 0a 29 7b 0a 20 20 69 66 28 20 73 71  pArg.){.  if( sq
2600: 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
2610: 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75  (db) ){.    retu
2620: 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  rn SQLITE_MISUSE
2630: 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 62 75 73 79  ;.  }.  db->busy
2640: 48 61 6e 64 6c 65 72 2e 78 46 75 6e 63 20 3d 20  Handler.xFunc = 
2650: 78 42 75 73 79 3b 0a 20 20 64 62 2d 3e 62 75 73  xBusy;.  db->bus
2660: 79 48 61 6e 64 6c 65 72 2e 70 41 72 67 20 3d 20  yHandler.pArg = 
2670: 70 41 72 67 3b 0a 20 20 64 62 2d 3e 62 75 73 79  pArg;.  db->busy
2680: 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20  Handler.nBusy = 
2690: 30 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49  0;.  return SQLI
26a0: 54 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  TE_OK;.}..#ifnde
26b0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
26c0: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
26d0: 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  /*.** This routi
26e0: 6e 65 20 73 65 74 73 20 74 68 65 20 70 72 6f 67  ne sets the prog
26f0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 66 6f  ress callback fo
2700: 72 20 61 6e 20 53 71 6c 69 74 65 20 64 61 74 61  r an Sqlite data
2710: 62 61 73 65 20 74 6f 20 74 68 65 0a 2a 2a 20 67  base to the.** g
2720: 69 76 65 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75  iven callback fu
2730: 6e 63 74 69 6f 6e 20 77 69 74 68 20 74 68 65 20  nction with the 
2740: 67 69 76 65 6e 20 61 72 67 75 6d 65 6e 74 2e 20  given argument. 
2750: 54 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  The progress cal
2760: 6c 62 61 63 6b 20 77 69 6c 6c 0a 2a 2a 20 62 65  lback will.** be
2770: 20 69 6e 76 6f 6b 65 64 20 65 76 65 72 79 20 6e   invoked every n
2780: 4f 70 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a  Ops opcodes..*/.
2790: 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 70 72 6f  void sqlite3_pro
27a0: 67 72 65 73 73 5f 68 61 6e 64 6c 65 72 28 0a 20  gress_handler(. 
27b0: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 0a 20   sqlite3 *db, . 
27c0: 20 69 6e 74 20 6e 4f 70 73 2c 0a 20 20 69 6e 74   int nOps,.  int
27d0: 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f   (*xProgress)(vo
27e0: 69 64 2a 29 2c 20 0a 20 20 76 6f 69 64 20 2a 70  id*), .  void *p
27f0: 41 72 67 0a 29 7b 0a 20 20 69 66 28 20 21 73 71  Arg.){.  if( !sq
2800: 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
2810: 28 64 62 29 20 29 7b 0a 20 20 20 20 69 66 28 20  (db) ){.    if( 
2820: 6e 4f 70 73 3e 30 20 29 7b 0a 20 20 20 20 20 20  nOps>0 ){.      
2830: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 3d 20  db->xProgress = 
2840: 78 50 72 6f 67 72 65 73 73 3b 0a 20 20 20 20 20  xProgress;.     
2850: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
2860: 73 20 3d 20 6e 4f 70 73 3b 0a 20 20 20 20 20 20  s = nOps;.      
2870: 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67  db->pProgressArg
2880: 20 3d 20 70 41 72 67 3b 0a 20 20 20 20 7d 65 6c   = pArg;.    }el
2890: 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 78 50  se{.      db->xP
28a0: 72 6f 67 72 65 73 73 20 3d 20 30 3b 0a 20 20 20  rogress = 0;.   
28b0: 20 20 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73     db->nProgress
28c0: 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 64  Ops = 0;.      d
28d0: 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 20  b->pProgressArg 
28e0: 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d  = 0;.    }.  }.}
28f0: 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20  .#endif.../*.** 
2900: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 6e 73  This routine ins
2910: 74 61 6c 6c 73 20 61 20 64 65 66 61 75 6c 74 20  talls a default 
2920: 62 75 73 79 20 68 61 6e 64 6c 65 72 20 74 68 61  busy handler tha
2930: 74 20 77 61 69 74 73 20 66 6f 72 20 74 68 65 0a  t waits for the.
2940: 2a 2a 20 73 70 65 63 69 66 69 65 64 20 6e 75 6d  ** specified num
2950: 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f  ber of milliseco
2960: 6e 64 73 20 62 65 66 6f 72 65 20 72 65 74 75 72  nds before retur
2970: 6e 69 6e 67 20 30 2e 0a 2a 2f 0a 69 6e 74 20 73  ning 0..*/.int s
2980: 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65  qlite3_busy_time
2990: 6f 75 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  out(sqlite3 *db,
29a0: 20 69 6e 74 20 6d 73 29 7b 0a 20 20 69 66 28 20   int ms){.  if( 
29b0: 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
29c0: 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65  ck(db) ){.    re
29d0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
29e0: 53 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6d 73  SE;.  }.  if( ms
29f0: 3e 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e 62 75  >0 ){.    db->bu
2a00: 73 79 54 69 6d 65 6f 75 74 20 3d 20 6d 73 3b 0a  syTimeout = ms;.
2a10: 20 20 20 20 73 71 6c 69 74 65 33 5f 62 75 73 79      sqlite3_busy
2a20: 5f 68 61 6e 64 6c 65 72 28 64 62 2c 20 73 71 6c  _handler(db, sql
2a30: 69 74 65 44 65 66 61 75 6c 74 42 75 73 79 43 61  iteDefaultBusyCa
2a40: 6c 6c 62 61 63 6b 2c 20 28 76 6f 69 64 2a 29 64  llback, (void*)d
2a50: 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  b);.  }else{.   
2a60: 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 68 61   sqlite3_busy_ha
2a70: 6e 64 6c 65 72 28 64 62 2c 20 30 2c 20 30 29 3b  ndler(db, 0, 0);
2a80: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 53 51  .  }.  return SQ
2a90: 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a  LITE_OK;.}../*.*
2aa0: 2a 20 43 61 75 73 65 20 61 6e 79 20 70 65 6e 64  * Cause any pend
2ab0: 69 6e 67 20 6f 70 65 72 61 74 69 6f 6e 20 74 6f  ing operation to
2ac0: 20 73 74 6f 70 20 61 74 20 69 74 73 20 65 61 72   stop at its ear
2ad0: 6c 69 65 73 74 20 6f 70 70 6f 72 74 75 6e 69 74  liest opportunit
2ae0: 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  y..*/.void sqlit
2af0: 65 33 5f 69 6e 74 65 72 72 75 70 74 28 73 71 6c  e3_interrupt(sql
2b00: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 66 28  ite3 *db){.  if(
2b10: 20 64 62 20 26 26 20 28 64 62 2d 3e 6d 61 67 69   db && (db->magi
2b20: 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  c==SQLITE_MAGIC_
2b30: 4f 50 45 4e 20 7c 7c 20 64 62 2d 3e 6d 61 67 69  OPEN || db->magi
2b40: 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  c==SQLITE_MAGIC_
2b50: 42 55 53 59 29 20 29 7b 0a 20 20 20 20 64 62 2d  BUSY) ){.    db-
2b60: 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
2b70: 64 20 3d 20 31 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a  d = 1;.  }.}../*
2b80: 0a 2a 2a 20 4d 65 6d 6f 72 79 20 61 6c 6c 6f 63  .** Memory alloc
2b90: 61 74 69 6f 6e 20 72 6f 75 74 69 6e 65 73 20 74  ation routines t
2ba0: 68 61 74 20 75 73 65 20 53 51 4c 69 74 65 73 20  hat use SQLites 
2bb0: 69 6e 74 65 72 6e 61 6c 20 6d 65 6d 6f 72 79 0a  internal memory.
2bc0: 2a 2a 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ** memory alloca
2bd0: 74 6f 72 2e 20 20 44 65 70 65 6e 64 69 6e 67 20  tor.  Depending 
2be0: 6f 6e 20 68 6f 77 20 53 51 4c 69 74 65 20 69 73  on how SQLite is
2bf0: 20 63 6f 6d 70 69 6c 65 64 2c 20 74 68 65 0a 2a   compiled, the.*
2c00: 2a 20 69 6e 74 65 72 6e 61 6c 20 6d 65 6d 6f 72  * internal memor
2c10: 79 20 61 6c 6c 6f 63 61 74 6f 72 20 6d 69 67 68  y allocator migh
2c20: 74 20 62 65 20 6a 75 73 74 20 61 6e 20 61 6c 69  t be just an ali
2c30: 61 73 20 66 6f 72 20 74 68 65 0a 2a 2a 20 73 79  as for the.** sy
2c40: 73 74 65 6d 20 64 65 66 61 75 6c 74 20 6d 61 6c  stem default mal
2c50: 6c 6f 63 2f 72 65 61 6c 6c 6f 63 2f 66 72 65 65  loc/realloc/free
2c60: 2e 20 20 4f 72 20 74 68 65 20 62 75 69 6c 74 2d  .  Or the built-
2c70: 69 6e 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20  in allocator.** 
2c80: 6d 69 67 68 74 20 64 6f 20 65 78 74 72 61 20 73  might do extra s
2c90: 74 75 66 66 20 6c 69 6b 65 20 70 75 74 20 73 65  tuff like put se
2ca0: 6e 74 69 6e 61 6c 73 20 61 72 6f 75 6e 64 20 62  ntinals around b
2cb0: 75 66 66 65 72 73 20 74 6f 20 0a 2a 2a 20 63 68  uffers to .** ch
2cc0: 65 63 6b 20 66 6f 72 20 6f 76 65 72 72 75 6e 73  eck for overruns
2cd0: 20 6f 72 20 6c 6f 6f 6b 20 66 6f 72 20 6d 65 6d   or look for mem
2ce0: 6f 72 79 20 6c 65 61 6b 73 2e 0a 2a 2a 0a 2a 2a  ory leaks..**.**
2cf0: 20 55 73 65 20 73 71 6c 69 74 65 33 5f 66 72 65   Use sqlite3_fre
2d00: 65 28 29 20 74 6f 20 66 72 65 65 20 6d 65 6d 6f  e() to free memo
2d10: 72 79 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ry returned by s
2d20: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 29  qlite3_mprintf()
2d30: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
2d40: 33 5f 66 72 65 65 28 76 6f 69 64 20 2a 70 29 7b  3_free(void *p){
2d50: 20 69 66 28 20 70 20 29 20 73 71 6c 69 74 65 33   if( p ) sqlite3
2d60: 4f 73 46 72 65 65 28 70 29 3b 20 7d 0a 76 6f 69  OsFree(p); }.voi
2d70: 64 20 2a 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  d *sqlite3_mallo
2d80: 63 28 69 6e 74 20 6e 42 79 74 65 29 7b 20 72 65  c(int nByte){ re
2d90: 74 75 72 6e 20 6e 42 79 74 65 3e 30 20 3f 20 73  turn nByte>0 ? s
2da0: 71 6c 69 74 65 33 4f 73 4d 61 6c 6c 6f 63 28 6e  qlite3OsMalloc(n
2db0: 42 79 74 65 29 20 3a 20 30 3b 20 7d 0a 76 6f 69  Byte) : 0; }.voi
2dc0: 64 20 2a 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c  d *sqlite3_reall
2dd0: 6f 63 28 76 6f 69 64 20 2a 70 4f 6c 64 2c 20 69  oc(void *pOld, i
2de0: 6e 74 20 6e 42 79 74 65 29 7b 20 0a 20 20 69 66  nt nByte){ .  if
2df0: 28 20 70 4f 6c 64 20 29 7b 0a 20 20 20 20 69 66  ( pOld ){.    if
2e00: 28 20 6e 42 79 74 65 3e 30 20 29 7b 0a 20 20 20  ( nByte>0 ){.   
2e10: 20 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65     return sqlite
2e20: 33 4f 73 52 65 61 6c 6c 6f 63 28 70 4f 6c 64 2c  3OsRealloc(pOld,
2e30: 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 7d 65 6c   nByte);.    }el
2e40: 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  se{.      sqlite
2e50: 33 4f 73 46 72 65 65 28 70 4f 6c 64 29 3b 0a 20  3OsFree(pOld);. 
2e60: 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20       return 0;. 
2e70: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
2e80: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
2e90: 5f 6d 61 6c 6c 6f 63 28 6e 42 79 74 65 29 3b 0a  _malloc(nByte);.
2ea0: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69    }.}../*.** Thi
2eb0: 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 78  s function is ex
2ec0: 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 61  actly the same a
2ed0: 73 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  s sqlite3_create
2ee0: 5f 66 75 6e 63 74 69 6f 6e 28 29 2c 20 65 78 63  _function(), exc
2ef0: 65 70 74 0a 2a 2a 20 74 68 61 74 20 69 74 20 69  ept.** that it i
2f00: 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20 62 65  s designed to be
2f10: 20 63 61 6c 6c 65 64 20 62 79 20 69 6e 74 65 72   called by inter
2f20: 6e 61 6c 20 63 6f 64 65 2e 20 54 68 65 20 64 69  nal code. The di
2f30: 66 66 65 72 65 6e 63 65 20 69 73 0a 2a 2a 20 74  fference is.** t
2f40: 68 61 74 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28  hat if a malloc(
2f50: 29 20 66 61 69 6c 73 20 69 6e 20 73 71 6c 69 74  ) fails in sqlit
2f60: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
2f70: 6f 6e 28 29 2c 20 61 6e 20 65 72 72 6f 72 20 63  on(), an error c
2f80: 6f 64 65 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e  ode.** is return
2f90: 65 64 20 61 6e 64 20 74 68 65 20 6d 61 6c 6c 6f  ed and the mallo
2fa0: 63 46 61 69 6c 65 64 20 66 6c 61 67 20 63 6c 65  cFailed flag cle
2fb0: 61 72 65 64 2e 20 0a 2a 2f 0a 69 6e 74 20 73 71  ared. .*/.int sq
2fc0: 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28  lite3CreateFunc(
2fd0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a  .  sqlite3 *db,.
2fe0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46    const char *zF
2ff0: 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 0a 20 20 69  unctionName,.  i
3000: 6e 74 20 6e 41 72 67 2c 0a 20 20 69 6e 74 20 65  nt nArg,.  int e
3010: 6e 63 2c 0a 20 20 76 6f 69 64 20 2a 70 55 73 65  nc,.  void *pUse
3020: 72 44 61 74 61 2c 0a 20 20 76 6f 69 64 20 28 2a  rData,.  void (*
3030: 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63  xFunc)(sqlite3_c
3040: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
3050: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20  te3_value **),. 
3060: 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73   void (*xStep)(s
3070: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
3080: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
3090: 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  e **),.  void (*
30a0: 78 46 69 6e 61 6c 29 28 73 71 6c 69 74 65 33 5f  xFinal)(sqlite3_
30b0: 63 6f 6e 74 65 78 74 2a 29 0a 29 7b 0a 20 20 46  context*).){.  F
30c0: 75 6e 63 44 65 66 20 2a 70 3b 0a 20 20 69 6e 74  uncDef *p;.  int
30d0: 20 6e 4e 61 6d 65 3b 0a 0a 20 20 69 66 28 20 73   nName;..  if( s
30e0: 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
30f0: 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74  k(db) ){.    ret
3100: 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  urn SQLITE_MISUS
3110: 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a 46 75  E;.  }.  if( zFu
3120: 6e 63 74 69 6f 6e 4e 61 6d 65 3d 3d 30 20 7c 7c  nctionName==0 ||
3130: 0a 20 20 20 20 20 20 28 78 46 75 6e 63 20 26 26  .      (xFunc &&
3140: 20 28 78 46 69 6e 61 6c 20 7c 7c 20 78 53 74 65   (xFinal || xSte
3150: 70 29 29 20 7c 7c 20 0a 20 20 20 20 20 20 28 21  p)) || .      (!
3160: 78 46 75 6e 63 20 26 26 20 28 78 46 69 6e 61 6c  xFunc && (xFinal
3170: 20 26 26 20 21 78 53 74 65 70 29 29 20 7c 7c 0a   && !xStep)) ||.
3180: 20 20 20 20 20 20 28 21 78 46 75 6e 63 20 26 26        (!xFunc &&
3190: 20 28 21 78 46 69 6e 61 6c 20 26 26 20 78 53 74   (!xFinal && xSt
31a0: 65 70 29 29 20 7c 7c 0a 20 20 20 20 20 20 28 6e  ep)) ||.      (n
31b0: 41 72 67 3c 2d 31 20 7c 7c 20 6e 41 72 67 3e 31  Arg<-1 || nArg>1
31c0: 32 37 29 20 7c 7c 0a 20 20 20 20 20 20 28 32 35  27) ||.      (25
31d0: 35 3c 28 6e 4e 61 6d 65 20 3d 20 73 74 72 6c 65  5<(nName = strle
31e0: 6e 28 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 29  n(zFunctionName)
31f0: 29 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  )) ){.    sqlite
3200: 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c 49 54  3Error(db, SQLIT
3210: 45 5f 45 52 52 4f 52 2c 20 22 62 61 64 20 70 61  E_ERROR, "bad pa
3220: 72 61 6d 65 74 65 72 73 22 29 3b 0a 20 20 20 20  rameters");.    
3230: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
3240: 52 4f 52 3b 0a 20 20 7d 0a 20 20 0a 23 69 66 6e  ROR;.  }.  .#ifn
3250: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
3260: 55 54 46 31 36 0a 20 20 2f 2a 20 49 66 20 53 51  UTF16.  /* If SQ
3270: 4c 49 54 45 5f 55 54 46 31 36 20 69 73 20 73 70  LITE_UTF16 is sp
3280: 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 65  ecified as the e
3290: 6e 63 6f 64 69 6e 67 20 74 79 70 65 2c 20 74 72  ncoding type, tr
32a0: 61 6e 73 66 6f 72 6d 20 74 68 69 73 0a 20 20 2a  ansform this.  *
32b0: 2a 20 74 6f 20 6f 6e 65 20 6f 66 20 53 51 4c 49  * to one of SQLI
32c0: 54 45 5f 55 54 46 31 36 4c 45 20 6f 72 20 53 51  TE_UTF16LE or SQ
32d0: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 75 73 69  LITE_UTF16BE usi
32e0: 6e 67 20 74 68 65 0a 20 20 2a 2a 20 53 51 4c 49  ng the.  ** SQLI
32f0: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 6d  TE_UTF16NATIVE m
3300: 61 63 72 6f 2e 20 53 51 4c 49 54 45 5f 55 54 46  acro. SQLITE_UTF
3310: 31 36 20 69 73 20 6e 6f 74 20 75 73 65 64 20 69  16 is not used i
3320: 6e 74 65 72 6e 61 6c 6c 79 2e 0a 20 20 2a 2a 0a  nternally..  **.
3330: 20 20 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 41    ** If SQLITE_A
3340: 4e 59 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  NY is specified,
3350: 20 61 64 64 20 74 68 72 65 65 20 76 65 72 73 69   add three versi
3360: 6f 6e 73 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ons of the funct
3370: 69 6f 6e 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20  ion.  ** to the 
3380: 68 61 73 68 20 74 61 62 6c 65 2e 0a 20 20 2a 2f  hash table..  */
3390: 0a 20 20 69 66 28 20 65 6e 63 3d 3d 53 51 4c 49  .  if( enc==SQLI
33a0: 54 45 5f 55 54 46 31 36 20 29 7b 0a 20 20 20 20  TE_UTF16 ){.    
33b0: 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
33c0: 31 36 4e 41 54 49 56 45 3b 0a 20 20 7d 65 6c 73  16NATIVE;.  }els
33d0: 65 20 69 66 28 20 65 6e 63 3d 3d 53 51 4c 49 54  e if( enc==SQLIT
33e0: 45 5f 41 4e 59 20 29 7b 0a 20 20 20 20 69 6e 74  E_ANY ){.    int
33f0: 20 72 63 3b 0a 20 20 20 20 72 63 20 3d 20 73 71   rc;.    rc = sq
3400: 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28  lite3CreateFunc(
3410: 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d  db, zFunctionNam
3420: 65 2c 20 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f  e, nArg, SQLITE_
3430: 55 54 46 38 2c 0a 20 20 20 20 20 20 20 20 20 70  UTF8,.         p
3440: 55 73 65 72 44 61 74 61 2c 20 78 46 75 6e 63 2c  UserData, xFunc,
3450: 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 3b   xStep, xFinal);
3460: 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
3470: 49 54 45 5f 4f 4b 20 29 20 72 65 74 75 72 6e 20  ITE_OK ) return 
3480: 72 63 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  rc;.    rc = sql
3490: 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 64  ite3CreateFunc(d
34a0: 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65  b, zFunctionName
34b0: 2c 20 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55  , nArg, SQLITE_U
34c0: 54 46 31 36 4c 45 2c 0a 20 20 20 20 20 20 20 20  TF16LE,.        
34d0: 70 55 73 65 72 44 61 74 61 2c 20 78 46 75 6e 63  pUserData, xFunc
34e0: 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29  , xStep, xFinal)
34f0: 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ;.    if( rc!=SQ
3500: 4c 49 54 45 5f 4f 4b 20 29 20 72 65 74 75 72 6e  LITE_OK ) return
3510: 20 72 63 3b 0a 20 20 20 20 65 6e 63 20 3d 20 53   rc;.    enc = S
3520: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3b 0a 20  QLITE_UTF16BE;. 
3530: 20 7d 0a 23 65 6c 73 65 0a 20 20 65 6e 63 20 3d   }.#else.  enc =
3540: 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 23 65   SQLITE_UTF8;.#e
3550: 6e 64 69 66 0a 20 20 0a 20 20 2f 2a 20 43 68 65  ndif.  .  /* Che
3560: 63 6b 20 69 66 20 61 6e 20 65 78 69 73 74 69 6e  ck if an existin
3570: 67 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 62 65  g function is be
3580: 69 6e 67 20 6f 76 65 72 72 69 64 64 65 6e 20 6f  ing overridden o
3590: 72 20 64 65 6c 65 74 65 64 2e 20 49 66 20 73 6f  r deleted. If so
35a0: 2c 0a 20 20 2a 2a 20 61 6e 64 20 74 68 65 72 65  ,.  ** and there
35b0: 20 61 72 65 20 61 63 74 69 76 65 20 56 4d 73 2c   are active VMs,
35c0: 20 74 68 65 6e 20 72 65 74 75 72 6e 20 53 51 4c   then return SQL
35d0: 49 54 45 5f 42 55 53 59 2e 20 49 66 20 61 20 66  ITE_BUSY. If a f
35e0: 75 6e 63 74 69 6f 6e 0a 20 20 2a 2a 20 69 73 20  unction.  ** is 
35f0: 62 65 69 6e 67 20 6f 76 65 72 72 69 64 64 65 6e  being overridden
3600: 2f 64 65 6c 65 74 65 64 20 62 75 74 20 74 68 65  /deleted but the
3610: 72 65 20 61 72 65 20 6e 6f 20 61 63 74 69 76 65  re are no active
3620: 20 56 4d 73 2c 20 61 6c 6c 6f 77 20 74 68 65 0a   VMs, allow the.
3630: 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 74    ** operation t
3640: 6f 20 63 6f 6e 74 69 6e 75 65 20 62 75 74 20 69  o continue but i
3650: 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 70 72  nvalidate all pr
3660: 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d  ecompiled statem
3670: 65 6e 74 73 2e 0a 20 20 2a 2f 0a 20 20 70 20 3d  ents..  */.  p =
3680: 20 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63   sqlite3FindFunc
3690: 74 69 6f 6e 28 64 62 2c 20 7a 46 75 6e 63 74 69  tion(db, zFuncti
36a0: 6f 6e 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2c 20 6e  onName, nName, n
36b0: 41 72 67 2c 20 65 6e 63 2c 20 30 29 3b 0a 20 20  Arg, enc, 0);.  
36c0: 69 66 28 20 70 20 26 26 20 70 2d 3e 69 50 72 65  if( p && p->iPre
36d0: 66 45 6e 63 3d 3d 65 6e 63 20 26 26 20 70 2d 3e  fEnc==enc && p->
36e0: 6e 41 72 67 3d 3d 6e 41 72 67 20 29 7b 0a 20 20  nArg==nArg ){.  
36f0: 20 20 69 66 28 20 64 62 2d 3e 61 63 74 69 76 65    if( db->active
3700: 56 64 62 65 43 6e 74 20 29 7b 0a 20 20 20 20 20  VdbeCnt ){.     
3710: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62   sqlite3Error(db
3720: 2c 20 53 51 4c 49 54 45 5f 42 55 53 59 2c 20 0a  , SQLITE_BUSY, .
3730: 20 20 20 20 20 20 20 20 22 55 6e 61 62 6c 65 20          "Unable 
3740: 74 6f 20 64 65 6c 65 74 65 2f 6d 6f 64 69 66 79  to delete/modify
3750: 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64   user-function d
3760: 75 65 20 74 6f 20 61 63 74 69 76 65 20 73 74 61  ue to active sta
3770: 74 65 6d 65 6e 74 73 22 29 3b 0a 20 20 20 20 20  tements");.     
3780: 20 61 73 73 65 72 74 28 20 21 73 71 6c 69 74 65   assert( !sqlite
3790: 33 4d 61 6c 6c 6f 63 46 61 69 6c 65 64 28 29 20  3MallocFailed() 
37a0: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
37b0: 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
37c0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71   }else{.      sq
37d0: 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
37e0: 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
37f0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  );.    }.  }..  
3800: 70 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 46  p = sqlite3FindF
3810: 75 6e 63 74 69 6f 6e 28 64 62 2c 20 7a 46 75 6e  unction(db, zFun
3820: 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 4e 61 6d 65  ctionName, nName
3830: 2c 20 6e 41 72 67 2c 20 65 6e 63 2c 20 31 29 3b  , nArg, enc, 1);
3840: 0a 20 20 69 66 28 20 70 20 29 7b 0a 20 20 20 20  .  if( p ){.    
3850: 70 2d 3e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20  p->flags = 0;.  
3860: 20 20 70 2d 3e 78 46 75 6e 63 20 3d 20 78 46 75    p->xFunc = xFu
3870: 6e 63 3b 0a 20 20 20 20 70 2d 3e 78 53 74 65 70  nc;.    p->xStep
3880: 20 3d 20 78 53 74 65 70 3b 0a 20 20 20 20 70 2d   = xStep;.    p-
3890: 3e 78 46 69 6e 61 6c 69 7a 65 20 3d 20 78 46 69  >xFinalize = xFi
38a0: 6e 61 6c 3b 0a 20 20 20 20 70 2d 3e 70 55 73 65  nal;.    p->pUse
38b0: 72 44 61 74 61 20 3d 20 70 55 73 65 72 44 61 74  rData = pUserDat
38c0: 61 3b 0a 20 20 20 20 70 2d 3e 6e 41 72 67 20 3d  a;.    p->nArg =
38d0: 20 6e 41 72 67 3b 0a 20 20 7d 0a 20 20 72 65 74   nArg;.  }.  ret
38e0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d  urn SQLITE_OK;.}
38f0: 0a 0a 2f 2a 0a 2a 2a 20 43 72 65 61 74 65 20 6e  ../*.** Create n
3900: 65 77 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  ew user function
3910: 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  s..*/.int sqlite
3920: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
3930: 6e 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  n(.  sqlite3 *db
3940: 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ,.  const char *
3950: 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 0a 20  zFunctionName,. 
3960: 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 69 6e 74   int nArg,.  int
3970: 20 65 6e 63 2c 0a 20 20 76 6f 69 64 20 2a 70 2c   enc,.  void *p,
3980: 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e 63 29  .  void (*xFunc)
3990: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
39a0: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
39b0: 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20  lue **),.  void 
39c0: 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65 33  (*xStep)(sqlite3
39d0: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
39e0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
39f0: 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c  .  void (*xFinal
3a00: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
3a10: 74 2a 29 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b  t*).){.  int rc;
3a20: 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69  .  assert( !sqli
3a30: 74 65 33 4d 61 6c 6c 6f 63 46 61 69 6c 65 64 28  te3MallocFailed(
3a40: 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ) );.  rc = sqli
3a50: 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 64 62  te3CreateFunc(db
3a60: 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c  , zFunctionName,
3a70: 20 6e 41 72 67 2c 20 65 6e 63 2c 20 70 2c 20 78   nArg, enc, p, x
3a80: 46 75 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69  Func, xStep, xFi
3a90: 6e 61 6c 29 3b 0a 0a 20 20 72 65 74 75 72 6e 20  nal);..  return 
3aa0: 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 64  sqlite3ApiExit(d
3ab0: 62 2c 20 72 63 29 3b 0a 7d 0a 0a 23 69 66 6e 64  b, rc);.}..#ifnd
3ac0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
3ad0: 54 46 31 36 0a 69 6e 74 20 73 71 6c 69 74 65 33  TF16.int sqlite3
3ae0: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
3af0: 31 36 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  16(.  sqlite3 *d
3b00: 62 2c 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  b,.  const void 
3b10: 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 0a  *zFunctionName,.
3b20: 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 69 6e    int nArg,.  in
3b30: 74 20 65 54 65 78 74 52 65 70 2c 0a 20 20 76 6f  t eTextRep,.  vo
3b40: 69 64 20 2a 70 2c 0a 20 20 76 6f 69 64 20 28 2a  id *p,.  void (*
3b50: 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63  xFunc)(sqlite3_c
3b60: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
3b70: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 2c 0a 20 20  te3_value**),.  
3b80: 76 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73 71  void (*xStep)(sq
3b90: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
3ba0: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
3bb0: 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46  **),.  void (*xF
3bc0: 69 6e 61 6c 29 28 73 71 6c 69 74 65 33 5f 63 6f  inal)(sqlite3_co
3bd0: 6e 74 65 78 74 2a 29 0a 29 7b 0a 20 20 69 6e 74  ntext*).){.  int
3be0: 20 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 46 75   rc;.  char *zFu
3bf0: 6e 63 38 3b 0a 20 20 61 73 73 65 72 74 28 20 21  nc8;.  assert( !
3c00: 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 46 61 69  sqlite3MallocFai
3c10: 6c 65 64 28 29 20 29 3b 0a 0a 20 20 7a 46 75 6e  led() );..  zFun
3c20: 63 38 20 3d 20 73 71 6c 69 74 65 33 75 74 66 31  c8 = sqlite3utf1
3c30: 36 74 6f 38 28 7a 46 75 6e 63 74 69 6f 6e 4e 61  6to8(zFunctionNa
3c40: 6d 65 2c 20 2d 31 29 3b 0a 20 20 72 63 20 3d 20  me, -1);.  rc = 
3c50: 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e  sqlite3CreateFun
3c60: 63 28 64 62 2c 20 7a 46 75 6e 63 38 2c 20 6e 41  c(db, zFunc8, nA
3c70: 72 67 2c 20 65 54 65 78 74 52 65 70 2c 20 70 2c  rg, eTextRep, p,
3c80: 20 78 46 75 6e 63 2c 20 78 53 74 65 70 2c 20 78   xFunc, xStep, x
3c90: 46 69 6e 61 6c 29 3b 0a 20 20 73 71 6c 69 74 65  Final);.  sqlite
3ca0: 46 72 65 65 28 7a 46 75 6e 63 38 29 3b 0a 0a 20  Free(zFunc8);.. 
3cb0: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 41   return sqlite3A
3cc0: 70 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b 0a  piExit(db, rc);.
3cd0: 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a  }.#endif.../*.**
3ce0: 20 44 65 63 6c 61 72 65 20 74 68 61 74 20 61 20   Declare that a 
3cf0: 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 62 65 65  function has bee
3d00: 6e 20 6f 76 65 72 6c 6f 61 64 65 64 20 62 79 20  n overloaded by 
3d10: 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
3d20: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 66 75  .**.** If the fu
3d30: 6e 63 74 69 6f 6e 20 61 6c 72 65 61 64 79 20 65  nction already e
3d40: 78 69 73 74 73 20 61 73 20 61 20 72 65 67 75 6c  xists as a regul
3d50: 61 72 20 67 6c 6f 62 61 6c 20 66 75 6e 63 74 69  ar global functi
3d60: 6f 6e 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 69 73  on, then.** this
3d70: 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f   routine is a no
3d80: 2d 6f 70 2e 20 20 49 66 20 74 68 65 20 66 75 6e  -op.  If the fun
3d90: 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 65  ction does not e
3da0: 78 69 73 74 2c 20 74 68 65 6e 20 63 72 65 61 74  xist, then creat
3db0: 65 0a 2a 2a 20 61 20 6e 65 77 20 6f 6e 65 20 74  e.** a new one t
3dc0: 68 61 74 20 61 6c 77 61 79 73 20 74 68 72 6f 77  hat always throw
3dd0: 73 20 61 20 72 75 6e 2d 74 69 6d 65 20 65 72 72  s a run-time err
3de0: 6f 72 2e 20 20 0a 2a 2a 0a 2a 2a 20 57 68 65 6e  or.  .**.** When
3df0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
3e00: 69 6e 74 65 6e 64 20 74 6f 20 70 72 6f 76 69 64  intend to provid
3e10: 65 20 61 6e 20 6f 76 65 72 6c 6f 61 64 65 64 20  e an overloaded 
3e20: 66 75 6e 63 74 69 6f 6e 2c 20 74 68 65 79 0a 2a  function, they.*
3e30: 2a 20 73 68 6f 75 6c 64 20 63 61 6c 6c 20 74 68  * should call th
3e40: 69 73 20 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61  is routine to ma
3e50: 6b 65 20 73 75 72 65 20 74 68 65 20 67 6c 6f 62  ke sure the glob
3e60: 61 6c 20 66 75 6e 63 74 69 6f 6e 20 65 78 69 73  al function exis
3e70: 74 73 2e 0a 2a 2a 20 41 20 67 6c 6f 62 61 6c 20  ts..** A global 
3e80: 66 75 6e 63 74 69 6f 6e 20 6d 75 73 74 20 65 78  function must ex
3e90: 69 73 74 20 69 6e 20 6f 72 64 65 72 20 66 6f 72  ist in order for
3ea0: 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e   name resolution
3eb0: 20 74 6f 20 77 6f 72 6b 0a 2a 2a 20 70 72 6f 70   to work.** prop
3ec0: 65 72 6c 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  erly..*/.int sql
3ed0: 69 74 65 33 5f 6f 76 65 72 6c 6f 61 64 5f 66 75  ite3_overload_fu
3ee0: 6e 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65  nction(.  sqlite
3ef0: 33 20 2a 64 62 2c 0a 20 20 63 6f 6e 73 74 20 63  3 *db,.  const c
3f00: 68 61 72 20 2a 7a 4e 61 6d 65 2c 0a 20 20 69 6e  har *zName,.  in
3f10: 74 20 6e 41 72 67 0a 29 7b 0a 20 20 69 6e 74 20  t nArg.){.  int 
3f20: 6e 4e 61 6d 65 20 3d 20 73 74 72 6c 65 6e 28 7a  nName = strlen(z
3f30: 4e 61 6d 65 29 3b 0a 20 20 69 66 28 20 73 71 6c  Name);.  if( sql
3f40: 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e  ite3FindFunction
3f50: 28 64 62 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d  (db, zName, nNam
3f60: 65 2c 20 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f  e, nArg, SQLITE_
3f70: 55 54 46 38 2c 20 30 29 3d 3d 30 20 29 7b 0a 20  UTF8, 0)==0 ){. 
3f80: 20 20 20 73 71 6c 69 74 65 33 43 72 65 61 74 65     sqlite3Create
3f90: 46 75 6e 63 28 64 62 2c 20 7a 4e 61 6d 65 2c 20  Func(db, zName, 
3fa0: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
3fb0: 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  8,.             
3fc0: 20 20 20 20 20 20 20 20 20 30 2c 20 73 71 6c 69           0, sqli
3fd0: 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69  te3InvalidFuncti
3fe0: 6f 6e 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20  on, 0, 0);.  }. 
3ff0: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 41   return sqlite3A
4000: 70 69 45 78 69 74 28 64 62 2c 20 53 51 4c 49 54  piExit(db, SQLIT
4010: 45 5f 4f 4b 29 3b 0a 7d 0a 0a 23 69 66 6e 64 65  E_OK);.}..#ifnde
4020: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
4030: 41 43 45 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74  ACE./*.** Regist
4040: 65 72 20 61 20 74 72 61 63 65 20 66 75 6e 63 74  er a trace funct
4050: 69 6f 6e 2e 20 20 54 68 65 20 70 41 72 67 20 66  ion.  The pArg f
4060: 72 6f 6d 20 74 68 65 20 70 72 65 76 69 6f 75 73  rom the previous
4070: 6c 79 20 72 65 67 69 73 74 65 72 65 64 20 74 72  ly registered tr
4080: 61 63 65 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e  ace.** is return
4090: 65 64 2e 20 20 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  ed.  .**.** A NU
40a0: 4c 4c 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f  LL trace functio
40b0: 6e 20 6d 65 61 6e 73 20 74 68 61 74 20 6e 6f 20  n means that no 
40c0: 74 72 61 63 69 6e 67 20 69 73 20 65 78 65 63 75  tracing is execu
40d0: 74 65 73 2e 20 20 41 20 6e 6f 6e 2d 4e 55 4c 4c  tes.  A non-NULL
40e0: 0a 2a 2a 20 74 72 61 63 65 20 69 73 20 61 20 70  .** trace is a p
40f0: 6f 69 6e 74 65 72 20 74 6f 20 61 20 66 75 6e 63  ointer to a func
4100: 74 69 6f 6e 20 74 68 61 74 20 69 73 20 69 6e 76  tion that is inv
4110: 6f 6b 65 64 20 61 74 20 74 68 65 20 73 74 61 72  oked at the star
4120: 74 20 6f 66 20 65 61 63 68 0a 2a 2a 20 53 51 4c  t of each.** SQL
4130: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 76   statement..*/.v
4140: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 74 72 61  oid *sqlite3_tra
4150: 63 65 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ce(sqlite3 *db, 
4160: 76 6f 69 64 20 28 2a 78 54 72 61 63 65 29 28 76  void (*xTrace)(v
4170: 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  oid*,const char*
4180: 29 2c 20 76 6f 69 64 20 2a 70 41 72 67 29 7b 0a  ), void *pArg){.
4190: 20 20 76 6f 69 64 20 2a 70 4f 6c 64 20 3d 20 64    void *pOld = d
41a0: 62 2d 3e 70 54 72 61 63 65 41 72 67 3b 0a 20 20  b->pTraceArg;.  
41b0: 64 62 2d 3e 78 54 72 61 63 65 20 3d 20 78 54 72  db->xTrace = xTr
41c0: 61 63 65 3b 0a 20 20 64 62 2d 3e 70 54 72 61 63  ace;.  db->pTrac
41d0: 65 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 72  eArg = pArg;.  r
41e0: 65 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 2f 2a  eturn pOld;.}./*
41f0: 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 70  .** Register a p
4200: 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 2e  rofile function.
4210: 20 20 54 68 65 20 70 41 72 67 20 66 72 6f 6d 20    The pArg from 
4220: 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79 20 72  the previously r
4230: 65 67 69 73 74 65 72 65 64 20 0a 2a 2a 20 70 72  egistered .** pr
4240: 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 69  ofile function i
4250: 73 20 72 65 74 75 72 6e 65 64 2e 20 20 0a 2a 2a  s returned.  .**
4260: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 70 72 6f 66 69  .** A NULL profi
4270: 6c 65 20 66 75 6e 63 74 69 6f 6e 20 6d 65 61 6e  le function mean
4280: 73 20 74 68 61 74 20 6e 6f 20 70 72 6f 66 69 6c  s that no profil
4290: 69 6e 67 20 69 73 20 65 78 65 63 75 74 65 73 2e  ing is executes.
42a0: 20 20 41 20 6e 6f 6e 2d 4e 55 4c 4c 0a 2a 2a 20    A non-NULL.** 
42b0: 70 72 6f 66 69 6c 65 20 69 73 20 61 20 70 6f 69  profile is a poi
42c0: 6e 74 65 72 20 74 6f 20 61 20 66 75 6e 63 74 69  nter to a functi
42d0: 6f 6e 20 74 68 61 74 20 69 73 20 69 6e 76 6f 6b  on that is invok
42e0: 65 64 20 61 74 20 74 68 65 20 63 6f 6e 63 6c 75  ed at the conclu
42f0: 73 69 6f 6e 20 6f 66 0a 2a 2a 20 65 61 63 68 20  sion of.** each 
4300: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 68  SQL statement th
4310: 61 74 20 69 73 20 72 75 6e 2e 0a 2a 2f 0a 76 6f  at is run..*/.vo
4320: 69 64 20 2a 73 71 6c 69 74 65 33 5f 70 72 6f 66  id *sqlite3_prof
4330: 69 6c 65 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  ile(.  sqlite3 *
4340: 64 62 2c 0a 20 20 76 6f 69 64 20 28 2a 78 50 72  db,.  void (*xPr
4350: 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  ofile)(void*,con
4360: 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f  st char*,sqlite_
4370: 75 69 6e 74 36 34 29 2c 0a 20 20 76 6f 69 64 20  uint64),.  void 
4380: 2a 70 41 72 67 0a 29 7b 0a 20 20 76 6f 69 64 20  *pArg.){.  void 
4390: 2a 70 4f 6c 64 20 3d 20 64 62 2d 3e 70 50 72 6f  *pOld = db->pPro
43a0: 66 69 6c 65 41 72 67 3b 0a 20 20 64 62 2d 3e 78  fileArg;.  db->x
43b0: 50 72 6f 66 69 6c 65 20 3d 20 78 50 72 6f 66 69  Profile = xProfi
43c0: 6c 65 3b 0a 20 20 64 62 2d 3e 70 50 72 6f 66 69  le;.  db->pProfi
43d0: 6c 65 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20  leArg = pArg;.  
43e0: 72 65 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 23  return pOld;.}.#
43f0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
4400: 4f 4d 49 54 5f 54 52 41 43 45 20 2a 2f 0a 0a 2f  OMIT_TRACE */../
4410: 2a 2a 2a 20 45 58 50 45 52 49 4d 45 4e 54 41 4c  *** EXPERIMENTAL
4420: 20 2a 2a 2a 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73   ***.**.** Regis
4430: 74 65 72 20 61 20 66 75 6e 63 74 69 6f 6e 20 74  ter a function t
4440: 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20 77 68 65  o be invoked whe
4450: 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  n a transaction 
4460: 63 6f 6d 6d 65 6e 74 73 2e 0a 2a 2a 20 49 66 20  comments..** If 
4470: 74 68 65 20 69 6e 76 6f 6b 65 64 20 66 75 6e 63  the invoked func
4480: 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 6e 6f 6e  tion returns non
4490: 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20  -zero, then the 
44a0: 63 6f 6d 6d 69 74 20 62 65 63 6f 6d 65 73 20 61  commit becomes a
44b0: 0a 2a 2a 20 72 6f 6c 6c 62 61 63 6b 2e 0a 2a 2f  .** rollback..*/
44c0: 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 63  .void *sqlite3_c
44d0: 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 0a 20 20 73 71  ommit_hook(.  sq
44e0: 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20  lite3 *db,      
44f0: 20 20 20 20 20 20 20 20 2f 2a 20 41 74 74 61 63          /* Attac
4500: 68 20 74 68 65 20 68 6f 6f 6b 20 74 6f 20 74 68  h the hook to th
4510: 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  is database */. 
4520: 20 69 6e 74 20 28 2a 78 43 61 6c 6c 62 61 63 6b   int (*xCallback
4530: 29 28 76 6f 69 64 2a 29 2c 20 20 2f 2a 20 46 75  )(void*),  /* Fu
4540: 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65  nction to invoke
4550: 20 6f 6e 20 65 61 63 68 20 63 6f 6d 6d 69 74 20   on each commit 
4560: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 20  */.  void *pArg 
4570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4580: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
4590: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b  e function */.){
45a0: 0a 20 20 76 6f 69 64 20 2a 70 4f 6c 64 20 3d 20  .  void *pOld = 
45b0: 64 62 2d 3e 70 43 6f 6d 6d 69 74 41 72 67 3b 0a  db->pCommitArg;.
45c0: 20 20 64 62 2d 3e 78 43 6f 6d 6d 69 74 43 61 6c    db->xCommitCal
45d0: 6c 62 61 63 6b 20 3d 20 78 43 61 6c 6c 62 61 63  lback = xCallbac
45e0: 6b 3b 0a 20 20 64 62 2d 3e 70 43 6f 6d 6d 69 74  k;.  db->pCommit
45f0: 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 72 65  Arg = pArg;.  re
4600: 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 0a 2f 2a  turn pOld;.}../*
4610: 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 63  .** Register a c
4620: 61 6c 6c 62 61 63 6b 20 74 6f 20 62 65 20 69 6e  allback to be in
4630: 76 6f 6b 65 64 20 65 61 63 68 20 74 69 6d 65 20  voked each time 
4640: 61 20 72 6f 77 20 69 73 20 75 70 64 61 74 65 64  a row is updated
4650: 2c 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20 6f 72  ,.** inserted or
4660: 20 64 65 6c 65 74 65 64 20 75 73 69 6e 67 20 74   deleted using t
4670: 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e  his database con
4680: 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a 76 6f 69 64  nection..*/.void
4690: 20 2a 73 71 6c 69 74 65 33 5f 75 70 64 61 74 65   *sqlite3_update
46a0: 5f 68 6f 6f 6b 28 0a 20 20 73 71 6c 69 74 65 33  _hook(.  sqlite3
46b0: 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20   *db,           
46c0: 20 20 20 2f 2a 20 41 74 74 61 63 68 20 74 68 65     /* Attach the
46d0: 20 68 6f 6f 6b 20 74 6f 20 74 68 69 73 20 64 61   hook to this da
46e0: 74 61 62 61 73 65 20 2a 2f 0a 20 20 76 6f 69 64  tabase */.  void
46f0: 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28 76 6f   (*xCallback)(vo
4700: 69 64 2a 2c 69 6e 74 2c 63 68 61 72 20 63 6f 6e  id*,int,char con
4710: 73 74 20 2a 2c 63 68 61 72 20 63 6f 6e 73 74 20  st *,char const 
4720: 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 2c  *,sqlite_int64),
4730: 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 20 20 20  .  void *pArg   
4740: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4750: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
4760: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a 20  function */.){. 
4770: 20 76 6f 69 64 20 2a 70 52 65 74 20 3d 20 64 62   void *pRet = db
4780: 2d 3e 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20  ->pUpdateArg;.  
4790: 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
47a0: 61 63 6b 20 3d 20 78 43 61 6c 6c 62 61 63 6b 3b  ack = xCallback;
47b0: 0a 20 20 64 62 2d 3e 70 55 70 64 61 74 65 41 72  .  db->pUpdateAr
47c0: 67 20 3d 20 70 41 72 67 3b 0a 20 20 72 65 74 75  g = pArg;.  retu
47d0: 72 6e 20 70 52 65 74 3b 0a 7d 0a 0a 2f 2a 0a 2a  rn pRet;.}../*.*
47e0: 2a 20 52 65 67 69 73 74 65 72 20 61 20 63 61 6c  * Register a cal
47f0: 6c 62 61 63 6b 20 74 6f 20 62 65 20 69 6e 76 6f  lback to be invo
4800: 6b 65 64 20 65 61 63 68 20 74 69 6d 65 20 61 20  ked each time a 
4810: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 72  transaction is r
4820: 6f 6c 6c 65 64 0a 2a 2a 20 62 61 63 6b 20 62 79  olled.** back by
4830: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 63   this database c
4840: 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a 76 6f  onnection..*/.vo
4850: 69 64 20 2a 73 71 6c 69 74 65 33 5f 72 6f 6c 6c  id *sqlite3_roll
4860: 62 61 63 6b 5f 68 6f 6f 6b 28 0a 20 20 73 71 6c  back_hook(.  sql
4870: 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20  ite3 *db,       
4880: 20 20 20 20 20 20 20 2f 2a 20 41 74 74 61 63 68         /* Attach
4890: 20 74 68 65 20 68 6f 6f 6b 20 74 6f 20 74 68 69   the hook to thi
48a0: 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
48b0: 76 6f 69 64 20 28 2a 78 43 61 6c 6c 62 61 63 6b  void (*xCallback
48c0: 29 28 76 6f 69 64 2a 29 2c 20 2f 2a 20 43 61 6c  )(void*), /* Cal
48d0: 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 2a  lback function *
48e0: 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 20 20  /.  void *pArg  
48f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
4900: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
4910: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a   function */.){.
4920: 20 20 76 6f 69 64 20 2a 70 52 65 74 20 3d 20 64    void *pRet = d
4930: 62 2d 3e 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b  b->pRollbackArg;
4940: 0a 20 20 64 62 2d 3e 78 52 6f 6c 6c 62 61 63 6b  .  db->xRollback
4950: 43 61 6c 6c 62 61 63 6b 20 3d 20 78 43 61 6c 6c  Callback = xCall
4960: 62 61 63 6b 3b 0a 20 20 64 62 2d 3e 70 52 6f 6c  back;.  db->pRol
4970: 6c 62 61 63 6b 41 72 67 20 3d 20 70 41 72 67 3b  lbackArg = pArg;
4980: 0a 20 20 72 65 74 75 72 6e 20 70 52 65 74 3b 0a  .  return pRet;.
4990: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  }../*.** This ro
49a0: 75 74 69 6e 65 20 69 73 20 63 61 6c 6c 65 64 20  utine is called 
49b0: 74 6f 20 63 72 65 61 74 65 20 61 20 63 6f 6e 6e  to create a conn
49c0: 65 63 74 69 6f 6e 20 74 6f 20 61 20 64 61 74 61  ection to a data
49d0: 62 61 73 65 20 42 54 72 65 65 0a 2a 2a 20 64 72  base BTree.** dr
49e0: 69 76 65 72 2e 20 20 49 66 20 7a 46 69 6c 65 6e  iver.  If zFilen
49f0: 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20  ame is the name 
4a00: 6f 66 20 61 20 66 69 6c 65 2c 20 74 68 65 6e 20  of a file, then 
4a10: 74 68 61 74 20 66 69 6c 65 20 69 73 0a 2a 2a 20  that file is.** 
4a20: 6f 70 65 6e 65 64 20 61 6e 64 20 75 73 65 64 2e  opened and used.
4a30: 20 20 49 66 20 7a 46 69 6c 65 6e 61 6d 65 20 69    If zFilename i
4a40: 73 20 74 68 65 20 6d 61 67 69 63 20 6e 61 6d 65  s the magic name
4a50: 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 74 68 65 6e   ":memory:" then
4a60: 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65  .** the database
4a70: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 6d 65   is stored in me
4a80: 6d 6f 72 79 20 28 61 6e 64 20 69 73 20 74 68 75  mory (and is thu
4a90: 73 20 66 6f 72 67 6f 74 74 65 6e 20 61 73 20 73  s forgotten as s
4aa0: 6f 6f 6e 20 61 73 0a 2a 2a 20 74 68 65 20 63 6f  oon as.** the co
4ab0: 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c 6f 73  nnection is clos
4ac0: 65 64 2e 29 20 20 49 66 20 7a 46 69 6c 65 6e 61  ed.)  If zFilena
4ad0: 6d 65 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  me is NULL then 
4ae0: 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
4af0: 69 73 20 61 20 22 76 69 72 74 75 61 6c 22 20 64  is a "virtual" d
4b00: 61 74 61 62 61 73 65 20 66 6f 72 20 74 72 61 6e  atabase for tran
4b10: 73 69 65 6e 74 20 75 73 65 20 6f 6e 6c 79 20 61  sient use only a
4b20: 6e 64 20 69 73 20 64 65 6c 65 74 65 64 20 61 73  nd is deleted as
4b30: 0a 2a 2a 20 73 6f 6f 6e 20 61 73 20 74 68 65 20  .** soon as the 
4b40: 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c  connection is cl
4b50: 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 76 69  osed..**.** A vi
4b60: 72 74 75 61 6c 20 64 61 74 61 62 61 73 65 20 63  rtual database c
4b70: 61 6e 20 62 65 20 65 69 74 68 65 72 20 61 20 64  an be either a d
4b80: 69 73 6b 20 66 69 6c 65 20 28 74 68 61 74 20 69  isk file (that i
4b90: 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a  s automatically.
4ba0: 2a 2a 20 64 65 6c 65 74 65 64 20 77 68 65 6e 20  ** deleted when 
4bb0: 74 68 65 20 66 69 6c 65 20 69 73 20 63 6c 6f 73  the file is clos
4bc0: 65 64 29 20 6f 72 20 69 74 20 61 6e 20 62 65 20  ed) or it an be 
4bd0: 68 65 6c 64 20 65 6e 74 69 72 65 6c 79 20 69 6e  held entirely in
4be0: 20 6d 65 6d 6f 72 79 2c 0a 2a 2a 20 64 65 70 65   memory,.** depe
4bf0: 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 76 61 6c  nding on the val
4c00: 75 65 73 20 6f 66 20 74 68 65 20 54 45 4d 50 5f  ues of the TEMP_
4c10: 53 54 4f 52 45 20 63 6f 6d 70 69 6c 65 2d 74 69  STORE compile-ti
4c20: 6d 65 20 6d 61 63 72 6f 20 61 6e 64 20 74 68 65  me macro and the
4c30: 0a 2a 2a 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f  .** db->temp_sto
4c40: 72 65 20 76 61 72 69 61 62 6c 65 2c 20 61 63 63  re variable, acc
4c50: 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 66 6f  ording to the fo
4c60: 6c 6c 6f 77 69 6e 67 20 63 68 61 72 74 3a 0a 2a  llowing chart:.*
4c70: 2a 0a 2a 2a 20 20 20 20 20 20 20 54 45 4d 50 5f  *.**       TEMP_
4c80: 53 54 4f 52 45 20 20 20 20 20 64 62 2d 3e 74 65  STORE     db->te
4c90: 6d 70 5f 73 74 6f 72 65 20 20 20 20 20 4c 6f 63  mp_store     Loc
4ca0: 61 74 69 6f 6e 20 6f 66 20 74 65 6d 70 6f 72 61  ation of tempora
4cb0: 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 20  ry database.**  
4cc0: 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20       ---------- 
4cd0: 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d      ------------
4ce0: 2d 2d 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  --     ---------
4cf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4d00: 2d 2d 2d 2d 2d 0a 2a 2a 20 20 20 20 20 20 20 20  -----.**        
4d10: 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20     0            
4d20: 20 20 20 61 6e 79 20 20 20 20 20 20 20 20 20 20     any          
4d30: 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20     file.**      
4d40: 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20 20       1          
4d50: 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20        1         
4d60: 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20       file.**    
4d70: 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20         1        
4d80: 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20 20          2       
4d90: 20 20 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a         memory.**
4da0: 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20             1    
4db0: 20 20 20 20 20 20 20 20 20 20 20 20 30 20 20 20              0   
4dc0: 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 0a             file.
4dd0: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 32 20 20  **           2  
4de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31 20                1 
4df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c               fil
4e00: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 32  e.**           2
4e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e20: 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d  2              m
4e30: 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20 20 20  emory.**        
4e40: 20 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20     2            
4e50: 20 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20      0           
4e60: 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20     memory.**    
4e70: 20 20 20 20 20 20 20 33 20 20 20 20 20 20 20 20         3        
4e80: 20 20 20 20 20 20 20 61 6e 79 20 20 20 20 20 20         any      
4e90: 20 20 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2f         memory.*/
4ea0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 74 72 65  .int sqlite3Btre
4eb0: 65 46 61 63 74 6f 72 79 28 0a 20 20 63 6f 6e 73  eFactory(.  cons
4ec0: 74 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20  t sqlite3 *db,  
4ed0: 20 20 20 20 20 20 2f 2a 20 4d 61 69 6e 20 64 61        /* Main da
4ee0: 74 61 62 61 73 65 20 77 68 65 6e 20 6f 70 65 6e  tabase when open
4ef0: 69 6e 67 20 61 75 78 20 6f 74 68 65 72 77 69 73  ing aux otherwis
4f00: 65 20 30 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  e 0 */.  const c
4f10: 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20  har *zFilename, 
4f20: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
4f30: 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  e file containin
4f40: 67 20 74 68 65 20 42 54 72 65 65 20 64 61 74 61  g the BTree data
4f50: 62 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 6d  base */.  int om
4f60: 69 74 4a 6f 75 72 6e 61 6c 2c 20 20 20 20 20 20  itJournal,      
4f70: 20 20 20 20 2f 2a 20 69 66 20 54 52 55 45 20 74      /* if TRUE t
4f80: 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 6f 75 72 6e  hen do not journ
4f90: 61 6c 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a  al this file */.
4fa0: 20 20 69 6e 74 20 6e 43 61 63 68 65 2c 20 20 20    int nCache,   
4fb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
4fc0: 6f 77 20 6d 61 6e 79 20 70 61 67 65 73 20 69 6e  ow many pages in
4fd0: 20 74 68 65 20 70 61 67 65 20 63 61 63 68 65 20   the page cache 
4fe0: 2a 2f 0a 20 20 42 74 72 65 65 20 2a 2a 70 70 42  */.  Btree **ppB
4ff0: 74 72 65 65 20 20 20 20 20 20 20 20 20 20 20 2f  tree           /
5000: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6e 65 77  * Pointer to new
5010: 20 42 74 72 65 65 20 6f 62 6a 65 63 74 20 77 72   Btree object wr
5020: 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 29 7b  itten here */.){
5030: 0a 20 20 69 6e 74 20 62 74 72 65 65 5f 66 6c 61  .  int btree_fla
5040: 67 73 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72 63  gs = 0;.  int rc
5050: 3b 0a 20 20 0a 20 20 61 73 73 65 72 74 28 20 70  ;.  .  assert( p
5060: 70 42 74 72 65 65 20 21 3d 20 30 29 3b 0a 20 20  pBtree != 0);.  
5070: 69 66 28 20 6f 6d 69 74 4a 6f 75 72 6e 61 6c 20  if( omitJournal 
5080: 29 7b 0a 20 20 20 20 62 74 72 65 65 5f 66 6c 61  ){.    btree_fla
5090: 67 73 20 7c 3d 20 42 54 52 45 45 5f 4f 4d 49 54  gs |= BTREE_OMIT
50a0: 5f 4a 4f 55 52 4e 41 4c 3b 0a 20 20 7d 0a 20 20  _JOURNAL;.  }.  
50b0: 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20  if( db->flags & 
50c0: 53 51 4c 49 54 45 5f 4e 6f 52 65 61 64 6c 6f 63  SQLITE_NoReadloc
50d0: 6b 20 29 7b 0a 20 20 20 20 62 74 72 65 65 5f 66  k ){.    btree_f
50e0: 6c 61 67 73 20 7c 3d 20 42 54 52 45 45 5f 4e 4f  lags |= BTREE_NO
50f0: 5f 52 45 41 44 4c 4f 43 4b 3b 0a 20 20 7d 0a 20  _READLOCK;.  }. 
5100: 20 69 66 28 20 7a 46 69 6c 65 6e 61 6d 65 3d 3d   if( zFilename==
5110: 30 20 29 7b 0a 23 69 66 20 54 45 4d 50 5f 53 54  0 ){.#if TEMP_ST
5120: 4f 52 45 3d 3d 30 0a 20 20 20 20 2f 2a 20 44 6f  ORE==0.    /* Do
5130: 20 6e 6f 74 68 69 6e 67 20 2a 2f 0a 23 65 6e 64   nothing */.#end
5140: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
5150: 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44 42 0a  E_OMIT_MEMORYDB.
5160: 23 69 66 20 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  #if TEMP_STORE==
5170: 31 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 74 65  1.    if( db->te
5180: 6d 70 5f 73 74 6f 72 65 3d 3d 32 20 29 20 7a 46  mp_store==2 ) zF
5190: 69 6c 65 6e 61 6d 65 20 3d 20 22 3a 6d 65 6d 6f  ilename = ":memo
51a0: 72 79 3a 22 3b 0a 23 65 6e 64 69 66 0a 23 69 66  ry:";.#endif.#if
51b0: 20 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 32 0a 20   TEMP_STORE==2. 
51c0: 20 20 20 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f     if( db->temp_
51d0: 73 74 6f 72 65 21 3d 31 20 29 20 7a 46 69 6c 65  store!=1 ) zFile
51e0: 6e 61 6d 65 20 3d 20 22 3a 6d 65 6d 6f 72 79 3a  name = ":memory:
51f0: 22 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 54 45  ";.#endif.#if TE
5200: 4d 50 5f 53 54 4f 52 45 3d 3d 33 0a 20 20 20 20  MP_STORE==3.    
5210: 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 22 3a 6d 65  zFilename = ":me
5220: 6d 6f 72 79 3a 22 3b 0a 23 65 6e 64 69 66 0a 23  mory:";.#endif.#
5230: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
5240: 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44 42 20 2a 2f  OMIT_MEMORYDB */
5250: 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c  .  }..  rc = sql
5260: 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28 7a 46  ite3BtreeOpen(zF
5270: 69 6c 65 6e 61 6d 65 2c 20 28 73 71 6c 69 74 65  ilename, (sqlite
5280: 33 20 2a 29 64 62 2c 20 70 70 42 74 72 65 65 2c  3 *)db, ppBtree,
5290: 20 62 74 72 65 65 5f 66 6c 61 67 73 29 3b 0a 20   btree_flags);. 
52a0: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
52b0: 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  OK ){.    sqlite
52c0: 33 42 74 72 65 65 53 65 74 42 75 73 79 48 61 6e  3BtreeSetBusyHan
52d0: 64 6c 65 72 28 2a 70 70 42 74 72 65 65 2c 20 28  dler(*ppBtree, (
52e0: 76 6f 69 64 2a 29 26 64 62 2d 3e 62 75 73 79 48  void*)&db->busyH
52f0: 61 6e 64 6c 65 72 29 3b 0a 20 20 20 20 73 71 6c  andler);.    sql
5300: 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68  ite3BtreeSetCach
5310: 65 53 69 7a 65 28 2a 70 70 42 74 72 65 65 2c 20  eSize(*ppBtree, 
5320: 6e 43 61 63 68 65 29 3b 0a 20 20 7d 0a 20 20 72  nCache);.  }.  r
5330: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a  eturn rc;.}../*.
5340: 2a 2a 20 52 65 74 75 72 6e 20 55 54 46 2d 38 20  ** Return UTF-8 
5350: 65 6e 63 6f 64 65 64 20 45 6e 67 6c 69 73 68 20  encoded English 
5360: 6c 61 6e 67 75 61 67 65 20 65 78 70 6c 61 6e 61  language explana
5370: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d 6f 73 74  tion of the most
5380: 20 72 65 63 65 6e 74 0a 2a 2a 20 65 72 72 6f 72   recent.** error
5390: 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20  ..*/.const char 
53a0: 2a 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28  *sqlite3_errmsg(
53b0: 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20  sqlite3 *db){.  
53c0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20  const char *z;. 
53d0: 20 69 66 28 20 21 64 62 20 7c 7c 20 73 71 6c 69   if( !db || sqli
53e0: 74 65 33 4d 61 6c 6c 6f 63 46 61 69 6c 65 64 28  te3MallocFailed(
53f0: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
5400: 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 53 51  sqlite3ErrStr(SQ
5410: 4c 49 54 45 5f 4e 4f 4d 45 4d 29 3b 0a 20 20 7d  LITE_NOMEM);.  }
5420: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
5430: 66 65 74 79 43 68 65 63 6b 28 64 62 29 20 7c 7c  fetyCheck(db) ||
5440: 20 64 62 2d 3e 65 72 72 43 6f 64 65 3d 3d 53 51   db->errCode==SQ
5450: 4c 49 54 45 5f 4d 49 53 55 53 45 20 29 7b 0a 20  LITE_MISUSE ){. 
5460: 20 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65     return sqlite
5470: 33 45 72 72 53 74 72 28 53 51 4c 49 54 45 5f 4d  3ErrStr(SQLITE_M
5480: 49 53 55 53 45 29 3b 0a 20 20 7d 0a 20 20 7a 20  ISUSE);.  }.  z 
5490: 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33  = (char*)sqlite3
54a0: 5f 76 61 6c 75 65 5f 74 65 78 74 28 64 62 2d 3e  _value_text(db->
54b0: 70 45 72 72 29 3b 0a 20 20 69 66 28 20 7a 3d 3d  pErr);.  if( z==
54c0: 30 20 29 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c  0 ){.    z = sql
54d0: 69 74 65 33 45 72 72 53 74 72 28 64 62 2d 3e 65  ite3ErrStr(db->e
54e0: 72 72 43 6f 64 65 29 3b 0a 20 20 7d 0a 20 20 72  rrCode);.  }.  r
54f0: 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 23 69 66 6e  eturn z;.}..#ifn
5500: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
5510: 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20 52 65 74 75  UTF16./*.** Retu
5520: 72 6e 20 55 54 46 2d 31 36 20 65 6e 63 6f 64 65  rn UTF-16 encode
5530: 64 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61  d English langua
5540: 67 65 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 6f  ge explanation o
5550: 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  f the most recen
5560: 74 0a 2a 2a 20 65 72 72 6f 72 2e 0a 2a 2f 0a 63  t.** error..*/.c
5570: 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74  onst void *sqlit
5580: 65 33 5f 65 72 72 6d 73 67 31 36 28 73 71 6c 69  e3_errmsg16(sqli
5590: 74 65 33 20 2a 64 62 29 7b 0a 20 20 2f 2a 20 42  te3 *db){.  /* B
55a0: 65 63 61 75 73 65 20 61 6c 6c 20 74 68 65 20 63  ecause all the c
55b0: 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 65  haracters in the
55c0: 20 73 74 72 69 6e 67 20 61 72 65 20 69 6e 20 74   string are in t
55d0: 68 65 20 75 6e 69 63 6f 64 65 0a 20 20 2a 2a 20  he unicode.  ** 
55e0: 72 61 6e 67 65 20 30 78 30 30 2d 30 78 46 46 2c  range 0x00-0xFF,
55f0: 20 69 66 20 77 65 20 70 61 64 20 74 68 65 20 62   if we pad the b
5600: 69 67 2d 65 6e 64 69 61 6e 20 73 74 72 69 6e 67  ig-endian string
5610: 20 77 69 74 68 20 61 20 0a 20 20 2a 2a 20 7a 65   with a .  ** ze
5620: 72 6f 20 62 79 74 65 2c 20 77 65 20 63 61 6e 20  ro byte, we can 
5630: 6f 62 74 61 69 6e 20 74 68 65 20 6c 69 74 74 6c  obtain the littl
5640: 65 2d 65 6e 64 69 61 6e 20 73 74 72 69 6e 67 20  e-endian string 
5650: 77 69 74 68 0a 20 20 2a 2a 20 26 62 69 67 5f 65  with.  ** &big_e
5660: 6e 64 69 61 6e 5b 31 5d 2e 0a 20 20 2a 2f 0a 20  ndian[1]..  */. 
5670: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
5680: 61 72 20 6f 75 74 4f 66 4d 65 6d 42 65 5b 5d 20  ar outOfMemBe[] 
5690: 3d 20 7b 0a 20 20 20 20 30 2c 20 27 6f 27 2c 20  = {.    0, 'o', 
56a0: 30 2c 20 27 75 27 2c 20 30 2c 20 27 74 27 2c 20  0, 'u', 0, 't', 
56b0: 30 2c 20 27 20 27 2c 20 0a 20 20 20 20 30 2c 20  0, ' ', .    0, 
56c0: 27 6f 27 2c 20 30 2c 20 27 66 27 2c 20 30 2c 20  'o', 0, 'f', 0, 
56d0: 27 20 27 2c 20 0a 20 20 20 20 30 2c 20 27 6d 27  ' ', .    0, 'm'
56e0: 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20 27 6d 27  , 0, 'e', 0, 'm'
56f0: 2c 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27 72 27  , 0, 'o', 0, 'r'
5700: 2c 20 30 2c 20 27 79 27 2c 20 30 2c 20 30 2c 20  , 0, 'y', 0, 0, 
5710: 30 0a 20 20 7d 3b 0a 20 20 73 74 61 74 69 63 20  0.  };.  static 
5720: 63 6f 6e 73 74 20 63 68 61 72 20 6d 69 73 75 73  const char misus
5730: 65 42 65 20 5b 5d 20 3d 20 7b 0a 20 20 20 20 30  eBe [] = {.    0
5740: 2c 20 27 6c 27 2c 20 30 2c 20 27 69 27 2c 20 30  , 'l', 0, 'i', 0
5750: 2c 20 27 62 27 2c 20 30 2c 20 27 72 27 2c 20 30  , 'b', 0, 'r', 0
5760: 2c 20 27 61 27 2c 20 30 2c 20 27 72 27 2c 20 30  , 'a', 0, 'r', 0
5770: 2c 20 27 79 27 2c 20 30 2c 20 27 20 27 2c 20 0a  , 'y', 0, ' ', .
5780: 20 20 20 20 30 2c 20 27 72 27 2c 20 30 2c 20 27      0, 'r', 0, '
5790: 6f 27 2c 20 30 2c 20 27 75 27 2c 20 30 2c 20 27  o', 0, 'u', 0, '
57a0: 74 27 2c 20 30 2c 20 27 69 27 2c 20 30 2c 20 27  t', 0, 'i', 0, '
57b0: 6e 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20 27  n', 0, 'e', 0, '
57c0: 20 27 2c 20 0a 20 20 20 20 30 2c 20 27 63 27 2c   ', .    0, 'c',
57d0: 20 30 2c 20 27 61 27 2c 20 30 2c 20 27 6c 27 2c   0, 'a', 0, 'l',
57e0: 20 30 2c 20 27 6c 27 2c 20 30 2c 20 27 65 27 2c   0, 'l', 0, 'e',
57f0: 20 30 2c 20 27 64 27 2c 20 30 2c 20 27 20 27 2c   0, 'd', 0, ' ',
5800: 20 0a 20 20 20 20 30 2c 20 27 6f 27 2c 20 30 2c   .    0, 'o', 0,
5810: 20 27 75 27 2c 20 30 2c 20 27 74 27 2c 20 30 2c   'u', 0, 't', 0,
5820: 20 27 20 27 2c 20 0a 20 20 20 20 30 2c 20 27 6f   ' ', .    0, 'o
5830: 27 2c 20 30 2c 20 27 66 27 2c 20 30 2c 20 27 20  ', 0, 'f', 0, ' 
5840: 27 2c 20 0a 20 20 20 20 30 2c 20 27 73 27 2c 20  ', .    0, 's', 
5850: 30 2c 20 27 65 27 2c 20 30 2c 20 27 71 27 2c 20  0, 'e', 0, 'q', 
5860: 30 2c 20 27 75 27 2c 20 30 2c 20 27 65 27 2c 20  0, 'u', 0, 'e', 
5870: 30 2c 20 27 6e 27 2c 20 30 2c 20 27 63 27 2c 20  0, 'n', 0, 'c', 
5880: 30 2c 20 27 65 27 2c 20 30 2c 20 30 2c 20 30 0a  0, 'e', 0, 0, 0.
5890: 20 20 7d 3b 0a 0a 20 20 63 6f 6e 73 74 20 76 6f    };..  const vo
58a0: 69 64 20 2a 7a 3b 0a 20 20 69 66 28 20 73 71 6c  id *z;.  if( sql
58b0: 69 74 65 33 4d 61 6c 6c 6f 63 46 61 69 6c 65 64  ite3MallocFailed
58c0: 28 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  () ){.    return
58d0: 20 28 76 6f 69 64 20 2a 29 28 26 6f 75 74 4f 66   (void *)(&outOf
58e0: 4d 65 6d 42 65 5b 53 51 4c 49 54 45 5f 55 54 46  MemBe[SQLITE_UTF
58f0: 31 36 4e 41 54 49 56 45 3d 3d 53 51 4c 49 54 45  16NATIVE==SQLITE
5900: 5f 55 54 46 31 36 4c 45 3f 31 3a 30 5d 29 3b 0a  _UTF16LE?1:0]);.
5910: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
5920: 33 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29  3SafetyCheck(db)
5930: 20 7c 7c 20 64 62 2d 3e 65 72 72 43 6f 64 65 3d   || db->errCode=
5940: 3d 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 29  =SQLITE_MISUSE )
5950: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 28 76 6f  {.    return (vo
5960: 69 64 20 2a 29 28 26 6d 69 73 75 73 65 42 65 5b  id *)(&misuseBe[
5970: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
5980: 56 45 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  VE==SQLITE_UTF16
5990: 4c 45 3f 31 3a 30 5d 29 3b 0a 20 20 7d 0a 20 20  LE?1:0]);.  }.  
59a0: 7a 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  z = sqlite3_valu
59b0: 65 5f 74 65 78 74 31 36 28 64 62 2d 3e 70 45 72  e_text16(db->pEr
59c0: 72 29 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29  r);.  if( z==0 )
59d0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c  {.    sqlite3Val
59e0: 75 65 53 65 74 53 74 72 28 64 62 2d 3e 70 45 72  ueSetStr(db->pEr
59f0: 72 2c 20 2d 31 2c 20 73 71 6c 69 74 65 33 45 72  r, -1, sqlite3Er
5a00: 72 53 74 72 28 64 62 2d 3e 65 72 72 43 6f 64 65  rStr(db->errCode
5a10: 29 2c 0a 20 20 20 20 20 20 20 20 20 53 51 4c 49  ),.         SQLI
5a20: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
5a30: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 7a 20 3d  STATIC);.    z =
5a40: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
5a50: 65 78 74 31 36 28 64 62 2d 3e 70 45 72 72 29 3b  ext16(db->pErr);
5a60: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 41 70  .  }.  sqlite3Ap
5a70: 69 45 78 69 74 28 30 2c 20 30 29 3b 0a 20 20 72  iExit(0, 0);.  r
5a80: 65 74 75 72 6e 20 7a 3b 0a 7d 0a 23 65 6e 64 69  eturn z;.}.#endi
5a90: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
5aa0: 5f 55 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  _UTF16 */../*.**
5ab0: 20 52 65 74 75 72 6e 20 74 68 65 20 6d 6f 73 74   Return the most
5ac0: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f   recent error co
5ad0: 64 65 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  de generated by 
5ae0: 61 6e 20 53 51 4c 69 74 65 20 72 6f 75 74 69 6e  an SQLite routin
5af0: 65 2e 20 49 66 20 4e 55 4c 4c 20 69 73 0a 2a 2a  e. If NULL is.**
5b00: 20 70 61 73 73 65 64 20 74 6f 20 74 68 69 73 20   passed to this 
5b10: 66 75 6e 63 74 69 6f 6e 2c 20 77 65 20 61 73 73  function, we ass
5b20: 75 6d 65 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66  ume a malloc() f
5b30: 61 69 6c 65 64 20 64 75 72 69 6e 67 20 73 71 6c  ailed during sql
5b40: 69 74 65 33 5f 6f 70 65 6e 28 29 2e 0a 2a 2f 0a  ite3_open()..*/.
5b50: 69 6e 74 20 73 71 6c 69 74 65 33 5f 65 72 72 63  int sqlite3_errc
5b60: 6f 64 65 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ode(sqlite3 *db)
5b70: 7b 0a 20 20 69 66 28 20 21 64 62 20 7c 7c 20 73  {.  if( !db || s
5b80: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 46 61 69 6c  qlite3MallocFail
5b90: 65 64 28 29 20 29 7b 0a 20 20 20 20 72 65 74 75  ed() ){.    retu
5ba0: 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b  rn SQLITE_NOMEM;
5bb0: 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
5bc0: 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 64 62  e3SafetyCheck(db
5bd0: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
5be0: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20  SQLITE_MISUSE;. 
5bf0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e   }.  return db->
5c00: 65 72 72 43 6f 64 65 20 26 20 64 62 2d 3e 65 72  errCode & db->er
5c10: 72 4d 61 73 6b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rMask;.}../*.** 
5c20: 43 72 65 61 74 65 20 61 20 6e 65 77 20 63 6f 6c  Create a new col
5c30: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
5c40: 66 6f 72 20 64 61 74 61 62 61 73 65 20 22 64 62  for database "db
5c50: 22 2e 20 20 54 68 65 20 6e 61 6d 65 20 69 73 20  ".  The name is 
5c60: 7a 4e 61 6d 65 0a 2a 2a 20 61 6e 64 20 74 68 65  zName.** and the
5c70: 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 65 6e 63   encoding is enc
5c80: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
5c90: 63 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28  createCollation(
5ca0: 0a 20 20 73 71 6c 69 74 65 33 2a 20 64 62 2c 20  .  sqlite3* db, 
5cb0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
5cc0: 4e 61 6d 65 2c 20 0a 20 20 69 6e 74 20 65 6e 63  Name, .  int enc
5cd0: 2c 20 0a 20 20 76 6f 69 64 2a 20 70 43 74 78 2c  , .  void* pCtx,
5ce0: 0a 20 20 69 6e 74 28 2a 78 43 6f 6d 70 61 72 65  .  int(*xCompare
5cf0: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
5d00: 74 20 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  t void*,int,cons
5d10: 74 20 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 43 6f  t void*).){.  Co
5d20: 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 0a 20 20  llSeq *pColl;.  
5d30: 69 6e 74 20 65 6e 63 32 3b 0a 20 20 0a 20 20 69  int enc2;.  .  i
5d40: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
5d50: 43 68 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20  Check(db) ){.   
5d60: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d   return SQLITE_M
5d70: 49 53 55 53 45 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  ISUSE;.  }..  /*
5d80: 20 49 66 20 53 51 4c 49 54 45 5f 55 54 46 31 36   If SQLITE_UTF16
5d90: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73   is specified as
5da0: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 74 79   the encoding ty
5db0: 70 65 2c 20 74 72 61 6e 73 66 6f 72 6d 20 74 68  pe, transform th
5dc0: 69 73 0a 20 20 2a 2a 20 74 6f 20 6f 6e 65 20 6f  is.  ** to one o
5dd0: 66 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  f SQLITE_UTF16LE
5de0: 20 6f 72 20 53 51 4c 49 54 45 5f 55 54 46 31 36   or SQLITE_UTF16
5df0: 42 45 20 75 73 69 6e 67 20 74 68 65 0a 20 20 2a  BE using the.  *
5e00: 2a 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  * SQLITE_UTF16NA
5e10: 54 49 56 45 20 6d 61 63 72 6f 2e 20 53 51 4c 49  TIVE macro. SQLI
5e20: 54 45 5f 55 54 46 31 36 20 69 73 20 6e 6f 74 20  TE_UTF16 is not 
5e30: 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 2e  used internally.
5e40: 0a 20 20 2a 2f 0a 20 20 65 6e 63 32 20 3d 20 65  .  */.  enc2 = e
5e50: 6e 63 20 26 20 7e 53 51 4c 49 54 45 5f 55 54 46  nc & ~SQLITE_UTF
5e60: 31 36 5f 41 4c 49 47 4e 45 44 3b 0a 20 20 69 66  16_ALIGNED;.  if
5e70: 28 20 65 6e 63 32 3d 3d 53 51 4c 49 54 45 5f 55  ( enc2==SQLITE_U
5e80: 54 46 31 36 20 29 7b 0a 20 20 20 20 65 6e 63 32  TF16 ){.    enc2
5e90: 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e   = SQLITE_UTF16N
5ea0: 41 54 49 56 45 3b 0a 20 20 7d 0a 0a 20 20 69 66  ATIVE;.  }..  if
5eb0: 28 20 28 65 6e 63 32 26 7e 33 29 21 3d 30 20 29  ( (enc2&~3)!=0 )
5ec0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72 72  {.    sqlite3Err
5ed0: 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 45 52  or(db, SQLITE_ER
5ee0: 52 4f 52 2c 20 22 75 6e 6b 6e 6f 77 6e 20 65 6e  ROR, "unknown en
5ef0: 63 6f 64 69 6e 67 22 29 3b 0a 20 20 20 20 72 65  coding");.    re
5f00: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
5f10: 52 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 68 65  R;.  }..  /* Che
5f20: 63 6b 20 69 66 20 74 68 69 73 20 63 61 6c 6c 20  ck if this call 
5f30: 69 73 20 72 65 6d 6f 76 69 6e 67 20 6f 72 20 72  is removing or r
5f40: 65 70 6c 61 63 69 6e 67 20 61 6e 20 65 78 69 73  eplacing an exis
5f50: 74 69 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a  ting collation .
5f60: 20 20 2a 2a 20 73 65 71 75 65 6e 63 65 2e 20 49    ** sequence. I
5f70: 66 20 73 6f 2c 20 61 6e 64 20 74 68 65 72 65 20  f so, and there 
5f80: 61 72 65 20 61 63 74 69 76 65 20 56 4d 73 2c 20  are active VMs, 
5f90: 72 65 74 75 72 6e 20 62 75 73 79 2e 20 49 66 20  return busy. If 
5fa0: 74 68 65 72 65 0a 20 20 2a 2a 20 61 72 65 20 6e  there.  ** are n
5fb0: 6f 20 61 63 74 69 76 65 20 56 4d 73 2c 20 69 6e  o active VMs, in
5fc0: 76 61 6c 69 64 61 74 65 20 61 6e 79 20 70 72 65  validate any pre
5fd0: 2d 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d  -compiled statem
5fe0: 65 6e 74 73 2e 0a 20 20 2a 2f 0a 20 20 70 43 6f  ents..  */.  pCo
5ff0: 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64  ll = sqlite3Find
6000: 43 6f 6c 6c 53 65 71 28 64 62 2c 20 28 75 38 29  CollSeq(db, (u8)
6010: 65 6e 63 32 2c 20 7a 4e 61 6d 65 2c 20 73 74 72  enc2, zName, str
6020: 6c 65 6e 28 7a 4e 61 6d 65 29 2c 20 30 29 3b 0a  len(zName), 0);.
6030: 20 20 69 66 28 20 70 43 6f 6c 6c 20 26 26 20 70    if( pColl && p
6040: 43 6f 6c 6c 2d 3e 78 43 6d 70 20 29 7b 0a 20 20  Coll->xCmp ){.  
6050: 20 20 69 66 28 20 64 62 2d 3e 61 63 74 69 76 65    if( db->active
6060: 56 64 62 65 43 6e 74 20 29 7b 0a 20 20 20 20 20  VdbeCnt ){.     
6070: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62   sqlite3Error(db
6080: 2c 20 53 51 4c 49 54 45 5f 42 55 53 59 2c 20 0a  , SQLITE_BUSY, .
6090: 20 20 20 20 20 20 20 20 22 55 6e 61 62 6c 65 20          "Unable 
60a0: 74 6f 20 64 65 6c 65 74 65 2f 6d 6f 64 69 66 79  to delete/modify
60b0: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
60c0: 6e 63 65 20 64 75 65 20 74 6f 20 61 63 74 69 76  nce due to activ
60d0: 65 20 73 74 61 74 65 6d 65 6e 74 73 22 29 3b 0a  e statements");.
60e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
60f0: 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 0a  ITE_BUSY;.    }.
6100: 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
6110: 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
6120: 6e 74 73 28 64 62 29 3b 0a 20 20 7d 0a 0a 20 20  nts(db);.  }..  
6130: 70 43 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46  pColl = sqlite3F
6140: 69 6e 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20 28  indCollSeq(db, (
6150: 75 38 29 65 6e 63 32 2c 20 7a 4e 61 6d 65 2c 20  u8)enc2, zName, 
6160: 73 74 72 6c 65 6e 28 7a 4e 61 6d 65 29 2c 20 31  strlen(zName), 1
6170: 29 3b 0a 20 20 69 66 28 20 70 43 6f 6c 6c 20 29  );.  if( pColl )
6180: 7b 0a 20 20 20 20 70 43 6f 6c 6c 2d 3e 78 43 6d  {.    pColl->xCm
6190: 70 20 3d 20 78 43 6f 6d 70 61 72 65 3b 0a 20 20  p = xCompare;.  
61a0: 20 20 70 43 6f 6c 6c 2d 3e 70 55 73 65 72 20 3d    pColl->pUser =
61b0: 20 70 43 74 78 3b 0a 20 20 20 20 70 43 6f 6c 6c   pCtx;.    pColl
61c0: 2d 3e 65 6e 63 20 3d 20 65 6e 63 32 20 7c 20 28  ->enc = enc2 | (
61d0: 65 6e 63 20 26 20 53 51 4c 49 54 45 5f 55 54 46  enc & SQLITE_UTF
61e0: 31 36 5f 41 4c 49 47 4e 45 44 29 3b 0a 20 20 7d  16_ALIGNED);.  }
61f0: 0a 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  .  sqlite3Error(
6200: 64 62 2c 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 30  db, SQLITE_OK, 0
6210: 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49  );.  return SQLI
6220: 54 45 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a  TE_OK;.}.../*.**
6230: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f   This routine do
6240: 65 73 20 74 68 65 20 77 6f 72 6b 20 6f 66 20 6f  es the work of o
6250: 70 65 6e 69 6e 67 20 61 20 64 61 74 61 62 61 73  pening a databas
6260: 65 20 6f 6e 20 62 65 68 61 6c 66 20 6f 66 0a 2a  e on behalf of.*
6270: 2a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29  * sqlite3_open()
6280: 20 61 6e 64 20 73 71 6c 69 74 65 33 5f 6f 70 65   and sqlite3_ope
6290: 6e 31 36 28 29 2e 20 54 68 65 20 64 61 74 61 62  n16(). The datab
62a0: 61 73 65 20 66 69 6c 65 6e 61 6d 65 20 22 7a 46  ase filename "zF
62b0: 69 6c 65 6e 61 6d 65 22 20 20 0a 2a 2a 20 69 73  ilename"  .** is
62c0: 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 2e 0a   UTF-8 encoded..
62d0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 6f 70  */.static int op
62e0: 65 6e 44 61 74 61 62 61 73 65 28 0a 20 20 63 6f  enDatabase(.  co
62f0: 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e  nst char *zFilen
6300: 61 6d 65 2c 20 2f 2a 20 44 61 74 61 62 61 73 65  ame, /* Database
6310: 20 66 69 6c 65 6e 61 6d 65 20 55 54 46 2d 38 20   filename UTF-8 
6320: 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 73 71 6c  encoded */.  sql
6330: 69 74 65 33 20 2a 2a 70 70 44 62 20 20 20 20 20  ite3 **ppDb     
6340: 20 20 20 20 2f 2a 20 4f 55 54 3a 20 52 65 74 75      /* OUT: Retu
6350: 72 6e 65 64 20 64 61 74 61 62 61 73 65 20 68 61  rned database ha
6360: 6e 64 6c 65 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c  ndle */.){.  sql
6370: 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20  ite3 *db;.  int 
6380: 72 63 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70  rc;.  CollSeq *p
6390: 43 6f 6c 6c 3b 0a 0a 20 20 61 73 73 65 72 74 28  Coll;..  assert(
63a0: 20 21 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 46   !sqlite3MallocF
63b0: 61 69 6c 65 64 28 29 20 29 3b 0a 0a 20 20 2f 2a  ailed() );..  /*
63c0: 20 41 6c 6c 6f 63 61 74 65 20 74 68 65 20 73 71   Allocate the sq
63d0: 6c 69 74 65 20 64 61 74 61 20 73 74 72 75 63 74  lite data struct
63e0: 75 72 65 20 2a 2f 0a 20 20 64 62 20 3d 20 73 71  ure */.  db = sq
63f0: 6c 69 74 65 4d 61 6c 6c 6f 63 28 20 73 69 7a 65  liteMalloc( size
6400: 6f 66 28 73 71 6c 69 74 65 33 29 20 29 3b 0a 20  of(sqlite3) );. 
6410: 20 69 66 28 20 64 62 3d 3d 30 20 29 20 67 6f 74   if( db==0 ) got
6420: 6f 20 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a 20 20  o opendb_out;.  
6430: 64 62 2d 3e 65 72 72 4d 61 73 6b 20 3d 20 30 78  db->errMask = 0x
6440: 66 66 3b 0a 20 20 64 62 2d 3e 70 72 69 6f 72 4e  ff;.  db->priorN
6450: 65 77 52 6f 77 69 64 20 3d 20 30 3b 0a 20 20 64  ewRowid = 0;.  d
6460: 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54  b->magic = SQLIT
6470: 45 5f 4d 41 47 49 43 5f 42 55 53 59 3b 0a 20 20  E_MAGIC_BUSY;.  
6480: 64 62 2d 3e 6e 44 62 20 3d 20 32 3b 0a 20 20 64  db->nDb = 2;.  d
6490: 62 2d 3e 61 44 62 20 3d 20 64 62 2d 3e 61 44 62  b->aDb = db->aDb
64a0: 53 74 61 74 69 63 3b 0a 20 20 64 62 2d 3e 61 75  Static;.  db->au
64b0: 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20  toCommit = 1;.  
64c0: 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c  db->flags |= SQL
64d0: 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65  ITE_ShortColName
64e0: 73 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46  s.#if SQLITE_DEF
64f0: 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  AULT_FILE_FORMAT
6500: 3c 34 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  <4.             
6510: 20 20 20 20 7c 20 53 51 4c 49 54 45 5f 4c 65 67      | SQLITE_Leg
6520: 61 63 79 46 69 6c 65 46 6d 74 0a 23 65 6e 64 69  acyFileFmt.#endi
6530: 66 0a 20 20 20 20 20 20 3b 0a 20 20 73 71 6c 69  f.      ;.  sqli
6540: 74 65 33 48 61 73 68 49 6e 69 74 28 26 64 62 2d  te3HashInit(&db-
6550: 3e 61 46 75 6e 63 2c 20 53 51 4c 49 54 45 5f 48  >aFunc, SQLITE_H
6560: 41 53 48 5f 53 54 52 49 4e 47 2c 20 30 29 3b 0a  ASH_STRING, 0);.
6570: 20 20 73 71 6c 69 74 65 33 48 61 73 68 49 6e 69    sqlite3HashIni
6580: 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 2c  t(&db->aCollSeq,
6590: 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53 54 52   SQLITE_HASH_STR
65a0: 49 4e 47 2c 20 30 29 3b 0a 23 69 66 6e 64 65 66  ING, 0);.#ifndef
65b0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
65c0: 54 55 41 4c 54 41 42 4c 45 0a 20 20 73 71 6c 69  TUALTABLE.  sqli
65d0: 74 65 33 48 61 73 68 49 6e 69 74 28 26 64 62 2d  te3HashInit(&db-
65e0: 3e 61 4d 6f 64 75 6c 65 2c 20 53 51 4c 49 54 45  >aModule, SQLITE
65f0: 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30 29  _HASH_STRING, 0)
6600: 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 41  ;.#endif..  /* A
6610: 64 64 20 74 68 65 20 64 65 66 61 75 6c 74 20 63  dd the default c
6620: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
6630: 65 20 42 49 4e 41 52 59 2e 20 42 49 4e 41 52 59  e BINARY. BINARY
6640: 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68 20   works for both 
6650: 55 54 46 2d 38 0a 20 20 2a 2a 20 61 6e 64 20 55  UTF-8.  ** and U
6660: 54 46 2d 31 36 2c 20 73 6f 20 61 64 64 20 61 20  TF-16, so add a 
6670: 76 65 72 73 69 6f 6e 20 66 6f 72 20 65 61 63 68  version for each
6680: 20 74 6f 20 61 76 6f 69 64 20 61 6e 79 20 75 6e   to avoid any un
6690: 6e 65 63 65 73 73 61 72 79 0a 20 20 2a 2a 20 63  necessary.  ** c
66a0: 6f 6e 76 65 72 73 69 6f 6e 73 2e 20 54 68 65 20  onversions. The 
66b0: 6f 6e 6c 79 20 65 72 72 6f 72 20 74 68 61 74 20  only error that 
66c0: 63 61 6e 20 6f 63 63 75 72 20 68 65 72 65 20 69  can occur here i
66d0: 73 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69  s a malloc() fai
66e0: 6c 75 72 65 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  lure..  */.  if(
66f0: 20 63 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e   createCollation
6700: 28 64 62 2c 20 22 42 49 4e 41 52 59 22 2c 20 53  (db, "BINARY", S
6710: 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 62  QLITE_UTF8, 0, b
6720: 69 6e 43 6f 6c 6c 46 75 6e 63 29 20 7c 7c 0a 20  inCollFunc) ||. 
6730: 20 20 20 20 20 63 72 65 61 74 65 43 6f 6c 6c 61       createColla
6740: 74 69 6f 6e 28 64 62 2c 20 22 42 49 4e 41 52 59  tion(db, "BINARY
6750: 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42  ", SQLITE_UTF16B
6760: 45 2c 20 30 2c 20 62 69 6e 43 6f 6c 6c 46 75 6e  E, 0, binCollFun
6770: 63 29 20 7c 7c 0a 20 20 20 20 20 20 63 72 65 61  c) ||.      crea
6780: 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20  teCollation(db, 
6790: 22 42 49 4e 41 52 59 22 2c 20 53 51 4c 49 54 45  "BINARY", SQLITE
67a0: 5f 55 54 46 31 36 4c 45 2c 20 30 2c 20 62 69 6e  _UTF16LE, 0, bin
67b0: 43 6f 6c 6c 46 75 6e 63 29 20 7c 7c 0a 20 20 20  CollFunc) ||.   
67c0: 20 20 20 28 64 62 2d 3e 70 44 66 6c 74 43 6f 6c     (db->pDfltCol
67d0: 6c 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 43  l = sqlite3FindC
67e0: 6f 6c 6c 53 65 71 28 64 62 2c 20 53 51 4c 49 54  ollSeq(db, SQLIT
67f0: 45 5f 55 54 46 38 2c 20 22 42 49 4e 41 52 59 22  E_UTF8, "BINARY"
6800: 2c 20 36 2c 20 30 29 29 3d 3d 30 20 0a 20 20 29  , 6, 0))==0 .  )
6810: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71  {.    assert( sq
6820: 6c 69 74 65 33 4d 61 6c 6c 6f 63 46 61 69 6c 65  lite3MallocFaile
6830: 64 28 29 20 29 3b 0a 20 20 20 20 64 62 2d 3e 6d  d() );.    db->m
6840: 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41  agic = SQLITE_MA
6850: 47 49 43 5f 43 4c 4f 53 45 44 3b 0a 20 20 20 20  GIC_CLOSED;.    
6860: 67 6f 74 6f 20 6f 70 65 6e 64 62 5f 6f 75 74 3b  goto opendb_out;
6870: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41 6c 73 6f 20  .  }..  /* Also 
6880: 61 64 64 20 61 20 55 54 46 2d 38 20 63 61 73 65  add a UTF-8 case
6890: 2d 69 6e 73 65 6e 73 69 74 69 76 65 20 63 6f 6c  -insensitive col
68a0: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 2e  lation sequence.
68b0: 20 2a 2f 0a 20 20 63 72 65 61 74 65 43 6f 6c 6c   */.  createColl
68c0: 61 74 69 6f 6e 28 64 62 2c 20 22 4e 4f 43 41 53  ation(db, "NOCAS
68d0: 45 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  E", SQLITE_UTF8,
68e0: 20 30 2c 20 6e 6f 63 61 73 65 43 6f 6c 6c 61 74   0, nocaseCollat
68f0: 69 6e 67 46 75 6e 63 29 3b 0a 0a 20 20 2f 2a 20  ingFunc);..  /* 
6900: 53 65 74 20 66 6c 61 67 73 20 6f 6e 20 74 68 65  Set flags on the
6910: 20 62 75 69 6c 74 2d 69 6e 20 63 6f 6c 6c 61 74   built-in collat
6920: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f  ing sequences */
6930: 0a 20 20 64 62 2d 3e 70 44 66 6c 74 43 6f 6c 6c  .  db->pDfltColl
6940: 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f  ->type = SQLITE_
6950: 43 4f 4c 4c 5f 42 49 4e 41 52 59 3b 0a 20 20 70  COLL_BINARY;.  p
6960: 43 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46 69  Coll = sqlite3Fi
6970: 6e 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20 53 51  ndCollSeq(db, SQ
6980: 4c 49 54 45 5f 55 54 46 38 2c 20 22 4e 4f 43 41  LITE_UTF8, "NOCA
6990: 53 45 22 2c 20 36 2c 20 30 29 3b 0a 20 20 69 66  SE", 6, 0);.  if
69a0: 28 20 70 43 6f 6c 6c 20 29 7b 0a 20 20 20 20 70  ( pColl ){.    p
69b0: 43 6f 6c 6c 2d 3e 74 79 70 65 20 3d 20 53 51 4c  Coll->type = SQL
69c0: 49 54 45 5f 43 4f 4c 4c 5f 4e 4f 43 41 53 45 3b  ITE_COLL_NOCASE;
69d0: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4f 70 65 6e 20  .  }..  /* Open 
69e0: 74 68 65 20 62 61 63 6b 65 6e 64 20 64 61 74 61  the backend data
69f0: 62 61 73 65 20 64 72 69 76 65 72 20 2a 2f 0a 20  base driver */. 
6a00: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
6a10: 65 65 46 61 63 74 6f 72 79 28 64 62 2c 20 7a 46  eeFactory(db, zF
6a20: 69 6c 65 6e 61 6d 65 2c 20 30 2c 20 4d 41 58 5f  ilename, 0, MAX_
6a30: 50 41 47 45 53 2c 20 26 64 62 2d 3e 61 44 62 5b  PAGES, &db->aDb[
6a40: 30 5d 2e 70 42 74 29 3b 0a 20 20 69 66 28 20 72  0].pBt);.  if( r
6a50: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
6a60: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
6a70: 28 64 62 2c 20 72 63 2c 20 30 29 3b 0a 20 20 20  (db, rc, 0);.   
6a80: 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c   db->magic = SQL
6a90: 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44  ITE_MAGIC_CLOSED
6aa0: 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 64  ;.    goto opend
6ab0: 62 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 64 62 2d  b_out;.  }.  db-
6ac0: 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 20  >aDb[0].pSchema 
6ad0: 3d 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47  = sqlite3SchemaG
6ae0: 65 74 28 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42  et(db->aDb[0].pB
6af0: 74 29 3b 0a 20 20 64 62 2d 3e 61 44 62 5b 31 5d  t);.  db->aDb[1]
6b00: 2e 70 53 63 68 65 6d 61 20 3d 20 73 71 6c 69 74  .pSchema = sqlit
6b10: 65 33 53 63 68 65 6d 61 47 65 74 28 30 29 3b 0a  e3SchemaGet(0);.
6b20: 0a 0a 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75  ..  /* The defau
6b30: 6c 74 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  lt safety_level 
6b40: 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74  for the main dat
6b50: 61 62 61 73 65 20 69 73 20 27 66 75 6c 6c 27 3b  abase is 'full';
6b60: 20 66 6f 72 20 74 68 65 20 74 65 6d 70 0a 20 20   for the temp.  
6b70: 2a 2a 20 64 61 74 61 62 61 73 65 20 69 74 20 69  ** database it i
6b80: 73 20 27 4e 4f 4e 45 27 2e 20 54 68 69 73 20 6d  s 'NONE'. This m
6b90: 61 74 63 68 65 73 20 74 68 65 20 70 61 67 65 72  atches the pager
6ba0: 20 6c 61 79 65 72 20 64 65 66 61 75 6c 74 73 2e   layer defaults.
6bb0: 20 20 0a 20 20 2a 2f 0a 20 20 64 62 2d 3e 61 44    .  */.  db->aD
6bc0: 62 5b 30 5d 2e 7a 4e 61 6d 65 20 3d 20 22 6d 61  b[0].zName = "ma
6bd0: 69 6e 22 3b 0a 20 20 64 62 2d 3e 61 44 62 5b 30  in";.  db->aDb[0
6be0: 5d 2e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d  ].safety_level =
6bf0: 20 33 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   3;.#ifndef SQLI
6c00: 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 20  TE_OMIT_TEMPDB. 
6c10: 20 64 62 2d 3e 61 44 62 5b 31 5d 2e 7a 4e 61 6d   db->aDb[1].zNam
6c20: 65 20 3d 20 22 74 65 6d 70 22 3b 0a 20 20 64 62  e = "temp";.  db
6c30: 2d 3e 61 44 62 5b 31 5d 2e 73 61 66 65 74 79 5f  ->aDb[1].safety_
6c40: 6c 65 76 65 6c 20 3d 20 31 3b 0a 23 65 6e 64 69  level = 1;.#endi
6c50: 66 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72  f..  /* Register
6c60: 20 61 6c 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75   all built-in fu
6c70: 6e 63 74 69 6f 6e 73 2c 20 62 75 74 20 64 6f 20  nctions, but do 
6c80: 6e 6f 74 20 61 74 74 65 6d 70 74 20 74 6f 20 72  not attempt to r
6c90: 65 61 64 20 74 68 65 0a 20 20 2a 2a 20 64 61 74  ead the.  ** dat
6ca0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 79 65 74  abase schema yet
6cb0: 2e 20 54 68 69 73 20 69 73 20 64 65 6c 61 79 65  . This is delaye
6cc0: 64 20 75 6e 74 69 6c 20 74 68 65 20 66 69 72 73  d until the firs
6cd0: 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61 62  t time the datab
6ce0: 61 73 65 0a 20 20 2a 2a 20 69 73 20 61 63 63 65  ase.  ** is acce
6cf0: 73 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  ssed..  */.  if(
6d00: 20 21 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 46   !sqlite3MallocF
6d10: 61 69 6c 65 64 28 29 20 29 7b 0a 20 20 20 20 73  ailed() ){.    s
6d20: 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20  qlite3Error(db, 
6d30: 53 51 4c 49 54 45 5f 4f 4b 2c 20 30 29 3b 0a 20  SQLITE_OK, 0);. 
6d40: 20 20 20 73 71 6c 69 74 65 33 52 65 67 69 73 74     sqlite3Regist
6d50: 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f  erBuiltinFunctio
6d60: 6e 73 28 64 62 29 3b 0a 20 20 7d 0a 20 20 64 62  ns(db);.  }.  db
6d70: 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45  ->magic = SQLITE
6d80: 5f 4d 41 47 49 43 5f 4f 50 45 4e 3b 0a 0a 20 20  _MAGIC_OPEN;..  
6d90: 2f 2a 20 4c 6f 61 64 20 61 75 74 6f 6d 61 74 69  /* Load automati
6da0: 63 20 65 78 74 65 6e 73 69 6f 6e 73 20 2d 20 65  c extensions - e
6db0: 78 74 65 6e 73 69 6f 6e 73 20 74 68 61 74 20 68  xtensions that h
6dc0: 61 76 65 20 62 65 65 6e 20 72 65 67 69 73 74 65  ave been registe
6dd0: 72 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 74  red.  ** using t
6de0: 68 65 20 73 71 6c 69 74 65 33 5f 61 75 74 6f 6d  he sqlite3_autom
6df0: 61 74 69 63 5f 65 78 74 65 6e 73 69 6f 6e 28 29  atic_extension()
6e00: 20 41 50 49 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c   API..  */.  sql
6e10: 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65  ite3AutoLoadExte
6e20: 6e 73 69 6f 6e 73 28 64 62 29 3b 0a 0a 23 69 66  nsions(db);..#if
6e30: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
6e40: 45 5f 46 54 53 31 0a 20 20 7b 0a 20 20 20 20 65  E_FTS1.  {.    e
6e50: 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
6e60: 33 46 74 73 31 49 6e 69 74 28 73 71 6c 69 74 65  3Fts1Init(sqlite
6e70: 33 2a 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  3*);.    sqlite3
6e80: 46 74 73 31 49 6e 69 74 28 64 62 29 3b 0a 20 20  Fts1Init(db);.  
6e90: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
6ea0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
6eb0: 54 53 32 0a 20 20 7b 0a 20 20 20 20 65 78 74 65  TS2.  {.    exte
6ec0: 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 46 74  rn int sqlite3Ft
6ed0: 73 32 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29  s2Init(sqlite3*)
6ee0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 46 74 73  ;.    sqlite3Fts
6ef0: 32 49 6e 69 74 28 64 62 29 3b 0a 20 20 7d 0a 23  2Init(db);.  }.#
6f00: 65 6e 64 69 66 0a 0a 6f 70 65 6e 64 62 5f 6f 75  endif..opendb_ou
6f10: 74 3a 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f  t:.  if( SQLITE_
6f20: 4e 4f 4d 45 4d 3d 3d 28 72 63 20 3d 20 73 71 6c  NOMEM==(rc = sql
6f30: 69 74 65 33 5f 65 72 72 63 6f 64 65 28 64 62 29  ite3_errcode(db)
6f40: 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ) ){.    sqlite3
6f50: 5f 63 6c 6f 73 65 28 64 62 29 3b 0a 20 20 20 20  _close(db);.    
6f60: 64 62 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 2a 70  db = 0;.  }.  *p
6f70: 70 44 62 20 3d 20 64 62 3b 0a 20 20 72 65 74 75  pDb = db;.  retu
6f80: 72 6e 20 73 71 6c 69 74 65 33 41 70 69 45 78 69  rn sqlite3ApiExi
6f90: 74 28 30 2c 20 72 63 29 3b 0a 7d 0a 0a 2f 2a 0a  t(0, rc);.}../*.
6fa0: 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 64 61  ** Open a new da
6fb0: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 0a 2a  tabase handle..*
6fc0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70  /.int sqlite3_op
6fd0: 65 6e 28 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  en(.  const char
6fe0: 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 0a 20 20   *zFilename, .  
6ff0: 73 71 6c 69 74 65 33 20 2a 2a 70 70 44 62 20 0a  sqlite3 **ppDb .
7000: 29 7b 0a 20 20 72 65 74 75 72 6e 20 6f 70 65 6e  ){.  return open
7010: 44 61 74 61 62 61 73 65 28 7a 46 69 6c 65 6e 61  Database(zFilena
7020: 6d 65 2c 20 70 70 44 62 29 3b 0a 7d 0a 0a 23 69  me, ppDb);.}..#i
7030: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
7040: 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20 4f 70  T_UTF16./*.** Op
7050: 65 6e 20 61 20 6e 65 77 20 64 61 74 61 62 61 73  en a new databas
7060: 65 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74  e handle..*/.int
7070: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28   sqlite3_open16(
7080: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
7090: 46 69 6c 65 6e 61 6d 65 2c 20 0a 20 20 73 71 6c  Filename, .  sql
70a0: 69 74 65 33 20 2a 2a 70 70 44 62 0a 29 7b 0a 20  ite3 **ppDb.){. 
70b0: 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 46 69   char const *zFi
70c0: 6c 65 6e 61 6d 65 38 3b 20 20 20 2f 2a 20 7a 46  lename8;   /* zF
70d0: 69 6c 65 6e 61 6d 65 20 65 6e 63 6f 64 65 64 20  ilename encoded 
70e0: 69 6e 20 55 54 46 2d 38 20 69 6e 73 74 65 61 64  in UTF-8 instead
70f0: 20 6f 66 20 55 54 46 2d 31 36 20 2a 2f 0a 20 20   of UTF-16 */.  
7100: 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  int rc = SQLITE_
7110: 4f 4b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  OK;.  sqlite3_va
7120: 6c 75 65 20 2a 70 56 61 6c 3b 0a 0a 20 20 61 73  lue *pVal;..  as
7130: 73 65 72 74 28 20 7a 46 69 6c 65 6e 61 6d 65 20  sert( zFilename 
7140: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 70 44  );.  assert( ppD
7150: 62 20 29 3b 0a 20 20 2a 70 70 44 62 20 3d 20 30  b );.  *ppDb = 0
7160: 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71 6c 69 74  ;.  pVal = sqlit
7170: 65 33 56 61 6c 75 65 4e 65 77 28 29 3b 0a 20 20  e3ValueNew();.  
7180: 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53  sqlite3ValueSetS
7190: 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20 7a 46 69  tr(pVal, -1, zFi
71a0: 6c 65 6e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55  lename, SQLITE_U
71b0: 54 46 31 36 4e 41 54 49 56 45 2c 20 53 51 4c 49  TF16NATIVE, SQLI
71c0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 7a 46  TE_STATIC);.  zF
71d0: 69 6c 65 6e 61 6d 65 38 20 3d 20 73 71 6c 69 74  ilename8 = sqlit
71e0: 65 33 56 61 6c 75 65 54 65 78 74 28 70 56 61 6c  e3ValueText(pVal
71f0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a  , SQLITE_UTF8);.
7200: 20 20 69 66 28 20 7a 46 69 6c 65 6e 61 6d 65 38    if( zFilename8
7210: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 6f 70 65   ){.    rc = ope
7220: 6e 44 61 74 61 62 61 73 65 28 7a 46 69 6c 65 6e  nDatabase(zFilen
7230: 61 6d 65 38 2c 20 70 70 44 62 29 3b 0a 20 20 20  ame8, ppDb);.   
7240: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
7250: 4f 4b 20 26 26 20 2a 70 70 44 62 20 29 7b 0a 20  OK && *ppDb ){. 
7260: 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
7270: 33 5f 65 78 65 63 28 2a 70 70 44 62 2c 20 22 50  3_exec(*ppDb, "P
7280: 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d  RAGMA encoding =
7290: 20 27 55 54 46 2d 31 36 27 22 2c 20 30 2c 20 30   'UTF-16'", 0, 0
72a0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
72b0: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
72c0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
72d0: 5f 63 6c 6f 73 65 28 2a 70 70 44 62 29 3b 0a 20  _close(*ppDb);. 
72e0: 20 20 20 20 20 20 20 2a 70 70 44 62 20 3d 20 30         *ppDb = 0
72f0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
7300: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 61 6c    }.  sqlite3Val
7310: 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 0a 20  ueFree(pVal);.. 
7320: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 41   return sqlite3A
7330: 70 69 45 78 69 74 28 30 2c 20 72 63 29 3b 0a 7d  piExit(0, rc);.}
7340: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
7350: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
7360: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
7370: 77 69 6e 67 20 72 6f 75 74 69 6e 65 20 64 65 73  wing routine des
7380: 74 72 6f 79 73 20 61 20 76 69 72 74 75 61 6c 20  troys a virtual 
7390: 6d 61 63 68 69 6e 65 20 74 68 61 74 20 69 73 20  machine that is 
73a0: 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68  created by.** th
73b0: 65 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c  e sqlite3_compil
73c0: 65 28 29 20 72 6f 75 74 69 6e 65 2e 20 54 68 65  e() routine. The
73d0: 20 69 6e 74 65 67 65 72 20 72 65 74 75 72 6e 65   integer returne
73e0: 64 20 69 73 20 61 6e 20 53 51 4c 49 54 45 5f 0a  d is an SQLITE_.
73f0: 2a 2a 20 73 75 63 63 65 73 73 2f 66 61 69 6c 75  ** success/failu
7400: 72 65 20 63 6f 64 65 20 74 68 61 74 20 64 65 73  re code that des
7410: 63 72 69 62 65 73 20 74 68 65 20 72 65 73 75 6c  cribes the resul
7420: 74 20 6f 66 20 65 78 65 63 75 74 69 6e 67 20 74  t of executing t
7430: 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61  he virtual.** ma
7440: 63 68 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  chine..**.** Thi
7450: 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74  s routine sets t
7460: 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 61 6e  he error code an
7470: 64 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65  d string returne
7480: 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  d by.** sqlite3_
7490: 65 72 72 63 6f 64 65 28 29 2c 20 73 71 6c 69 74  errcode(), sqlit
74a0: 65 33 5f 65 72 72 6d 73 67 28 29 20 61 6e 64 20  e3_errmsg() and 
74b0: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36  sqlite3_errmsg16
74c0: 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ()..*/.int sqlit
74d0: 65 33 5f 66 69 6e 61 6c 69 7a 65 28 73 71 6c 69  e3_finalize(sqli
74e0: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29  te3_stmt *pStmt)
74f0: 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 66  {.  int rc;.  if
7500: 28 20 70 53 74 6d 74 3d 3d 30 20 29 7b 0a 20 20  ( pStmt==0 ){.  
7510: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
7520: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
7530: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46  c = sqlite3VdbeF
7540: 69 6e 61 6c 69 7a 65 28 28 56 64 62 65 2a 29 70  inalize((Vdbe*)p
7550: 53 74 6d 74 29 3b 0a 20 20 7d 0a 20 20 72 65 74  Stmt);.  }.  ret
7560: 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  urn rc;.}../*.**
7570: 20 54 65 72 6d 69 6e 61 74 65 20 74 68 65 20 63   Terminate the c
7580: 75 72 72 65 6e 74 20 65 78 65 63 75 74 69 6f 6e  urrent execution
7590: 20 6f 66 20 61 6e 20 53 51 4c 20 73 74 61 74 65   of an SQL state
75a0: 6d 65 6e 74 20 61 6e 64 20 72 65 73 65 74 20 69  ment and reset i
75b0: 74 0a 2a 2a 20 62 61 63 6b 20 74 6f 20 69 74 73  t.** back to its
75c0: 20 73 74 61 72 74 69 6e 67 20 73 74 61 74 65 20   starting state 
75d0: 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62  so that it can b
75e0: 65 20 72 65 75 73 65 64 2e 20 41 20 73 75 63 63  e reused. A succ
75f0: 65 73 73 20 63 6f 64 65 20 66 72 6f 6d 0a 2a 2a  ess code from.**
7600: 20 74 68 65 20 70 72 69 6f 72 20 65 78 65 63 75   the prior execu
7610: 74 69 6f 6e 20 69 73 20 72 65 74 75 72 6e 65 64  tion is returned
7620: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ..**.** This rou
7630: 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 65 72  tine sets the er
7640: 72 6f 72 20 63 6f 64 65 20 61 6e 64 20 73 74 72  ror code and str
7650: 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79 0a  ing returned by.
7660: 2a 2a 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  ** sqlite3_errco
7670: 64 65 28 29 2c 20 73 71 6c 69 74 65 33 5f 65 72  de(), sqlite3_er
7680: 72 6d 73 67 28 29 20 61 6e 64 20 73 71 6c 69 74  rmsg() and sqlit
7690: 65 33 5f 65 72 72 6d 73 67 31 36 28 29 2e 0a 2a  e3_errmsg16()..*
76a0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 72 65  /.int sqlite3_re
76b0: 73 65 74 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  set(sqlite3_stmt
76c0: 20 2a 70 53 74 6d 74 29 7b 0a 20 20 69 6e 74 20   *pStmt){.  int 
76d0: 72 63 3b 0a 20 20 69 66 28 20 70 53 74 6d 74 3d  rc;.  if( pStmt=
76e0: 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  =0 ){.    rc = S
76f0: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73  QLITE_OK;.  }els
7700: 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  e{.    rc = sqli
7710: 74 65 33 56 64 62 65 52 65 73 65 74 28 28 56 64  te3VdbeReset((Vd
7720: 62 65 2a 29 70 53 74 6d 74 29 3b 0a 20 20 20 20  be*)pStmt);.    
7730: 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 52  sqlite3VdbeMakeR
7740: 65 61 64 79 28 28 56 64 62 65 2a 29 70 53 74 6d  eady((Vdbe*)pStm
7750: 74 2c 20 2d 31 2c 20 30 2c 20 30 2c 20 30 29 3b  t, -1, 0, 0, 0);
7760: 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 72 63  .    assert( (rc
7770: 20 26 20 28 73 71 6c 69 74 65 33 5f 64 62 5f 68   & (sqlite3_db_h
7780: 61 6e 64 6c 65 28 70 53 74 6d 74 29 2d 3e 65 72  andle(pStmt)->er
7790: 72 4d 61 73 6b 29 29 3d 3d 72 63 20 29 3b 0a 20  rMask))==rc );. 
77a0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a   }.  return rc;.
77b0: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65  }../*.** Registe
77c0: 72 20 61 20 6e 65 77 20 63 6f 6c 6c 61 74 69 6f  r a new collatio
77d0: 6e 20 73 65 71 75 65 6e 63 65 20 77 69 74 68 20  n sequence with 
77e0: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
77f0: 64 6c 65 20 64 62 2e 0a 2a 2f 0a 69 6e 74 20 73  dle db..*/.int s
7800: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
7810: 6c 6c 61 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74  llation(.  sqlit
7820: 65 33 2a 20 64 62 2c 20 0a 20 20 63 6f 6e 73 74  e3* db, .  const
7830: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 0a 20   char *zName, . 
7840: 20 69 6e 74 20 65 6e 63 2c 20 0a 20 20 76 6f 69   int enc, .  voi
7850: 64 2a 20 70 43 74 78 2c 0a 20 20 69 6e 74 28 2a  d* pCtx,.  int(*
7860: 78 43 6f 6d 70 61 72 65 29 28 76 6f 69 64 2a 2c  xCompare)(void*,
7870: 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  int,const void*,
7880: 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29  int,const void*)
7890: 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  .){.  int rc;.  
78a0: 61 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33  assert( !sqlite3
78b0: 4d 61 6c 6c 6f 63 46 61 69 6c 65 64 28 29 20 29  MallocFailed() )
78c0: 3b 0a 20 20 72 63 20 3d 20 63 72 65 61 74 65 43  ;.  rc = createC
78d0: 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 7a 4e 61  ollation(db, zNa
78e0: 6d 65 2c 20 65 6e 63 2c 20 70 43 74 78 2c 20 78  me, enc, pCtx, x
78f0: 43 6f 6d 70 61 72 65 29 3b 0a 20 20 72 65 74 75  Compare);.  retu
7900: 72 6e 20 73 71 6c 69 74 65 33 41 70 69 45 78 69  rn sqlite3ApiExi
7910: 74 28 64 62 2c 20 72 63 29 3b 0a 7d 0a 0a 23 69  t(db, rc);.}..#i
7920: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
7930: 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20 52 65  T_UTF16./*.** Re
7940: 67 69 73 74 65 72 20 61 20 6e 65 77 20 63 6f 6c  gister a new col
7950: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
7960: 77 69 74 68 20 74 68 65 20 64 61 74 61 62 61 73  with the databas
7970: 65 20 68 61 6e 64 6c 65 20 64 62 2e 0a 2a 2f 0a  e handle db..*/.
7980: 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 72 65 61  int sqlite3_crea
7990: 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 31 36 28 0a  te_collation16(.
79a0: 20 20 73 71 6c 69 74 65 33 2a 20 64 62 2c 20 0a    sqlite3* db, .
79b0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
79c0: 61 6d 65 2c 20 0a 20 20 69 6e 74 20 65 6e 63 2c  ame, .  int enc,
79d0: 20 0a 20 20 76 6f 69 64 2a 20 70 43 74 78 2c 0a   .  void* pCtx,.
79e0: 20 20 69 6e 74 28 2a 78 43 6f 6d 70 61 72 65 29    int(*xCompare)
79f0: 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
7a00: 20 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74   void*,int,const
7a10: 20 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 69 6e 74   void*).){.  int
7a20: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
7a30: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 38 3b  .  char *zName8;
7a40: 20 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c   .  assert( !sql
7a50: 69 74 65 33 4d 61 6c 6c 6f 63 46 61 69 6c 65 64  ite3MallocFailed
7a60: 28 29 20 29 3b 0a 20 20 7a 4e 61 6d 65 38 20 3d  () );.  zName8 =
7a70: 20 73 71 6c 69 74 65 33 75 74 66 31 36 74 6f 38   sqlite3utf16to8
7a80: 28 7a 4e 61 6d 65 2c 20 2d 31 29 3b 0a 20 20 69  (zName, -1);.  i
7a90: 66 28 20 7a 4e 61 6d 65 38 20 29 7b 0a 20 20 20  f( zName8 ){.   
7aa0: 20 72 63 20 3d 20 63 72 65 61 74 65 43 6f 6c 6c   rc = createColl
7ab0: 61 74 69 6f 6e 28 64 62 2c 20 7a 4e 61 6d 65 38  ation(db, zName8
7ac0: 2c 20 65 6e 63 2c 20 70 43 74 78 2c 20 78 43 6f  , enc, pCtx, xCo
7ad0: 6d 70 61 72 65 29 3b 0a 20 20 20 20 73 71 6c 69  mpare);.    sqli
7ae0: 74 65 46 72 65 65 28 7a 4e 61 6d 65 38 29 3b 0a  teFree(zName8);.
7af0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 73 71 6c    }.  return sql
7b00: 69 74 65 33 41 70 69 45 78 69 74 28 64 62 2c 20  ite3ApiExit(db, 
7b10: 72 63 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  rc);.}.#endif /*
7b20: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
7b30: 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 67  16 */../*.** Reg
7b40: 69 73 74 65 72 20 61 20 63 6f 6c 6c 61 74 69 6f  ister a collatio
7b50: 6e 20 73 65 71 75 65 6e 63 65 20 66 61 63 74 6f  n sequence facto
7b60: 72 79 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68  ry callback with
7b70: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
7b80: 6e 64 6c 65 0a 2a 2a 20 64 62 2e 20 52 65 70 6c  ndle.** db. Repl
7b90: 61 63 65 20 61 6e 79 20 70 72 65 76 69 6f 75 73  ace any previous
7ba0: 6c 79 20 69 6e 73 74 61 6c 6c 65 64 20 63 6f 6c  ly installed col
7bb0: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
7bc0: 66 61 63 74 6f 72 79 2e 0a 2a 2f 0a 69 6e 74 20  factory..*/.int 
7bd0: 73 71 6c 69 74 65 33 5f 63 6f 6c 6c 61 74 69 6f  sqlite3_collatio
7be0: 6e 5f 6e 65 65 64 65 64 28 0a 20 20 73 71 6c 69  n_needed(.  sqli
7bf0: 74 65 33 20 2a 64 62 2c 20 0a 20 20 76 6f 69 64  te3 *db, .  void
7c00: 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67   *pCollNeededArg
7c10: 2c 20 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  , .  void(*xColl
7c20: 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71  Needed)(void*,sq
7c30: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
7c40: 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  Rep,const char*)
7c50: 0a 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  .){.  if( sqlite
7c60: 33 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29  3SafetyCheck(db)
7c70: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
7c80: 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20  QLITE_MISUSE;.  
7c90: 7d 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65  }.  db->xCollNee
7ca0: 64 65 64 20 3d 20 78 43 6f 6c 6c 4e 65 65 64 65  ded = xCollNeede
7cb0: 64 3b 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c 4e 65  d;.  db->xCollNe
7cc0: 65 64 65 64 31 36 20 3d 20 30 3b 0a 20 20 64 62  eded16 = 0;.  db
7cd0: 2d 3e 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67  ->pCollNeededArg
7ce0: 20 3d 20 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72   = pCollNeededAr
7cf0: 67 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49  g;.  return SQLI
7d00: 54 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  TE_OK;.}..#ifnde
7d10: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
7d20: 46 31 36 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74  F16./*.** Regist
7d30: 65 72 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  er a collation s
7d40: 65 71 75 65 6e 63 65 20 66 61 63 74 6f 72 79 20  equence factory 
7d50: 63 61 6c 6c 62 61 63 6b 20 77 69 74 68 20 74 68  callback with th
7d60: 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
7d70: 65 0a 2a 2a 20 64 62 2e 20 52 65 70 6c 61 63 65  e.** db. Replace
7d80: 20 61 6e 79 20 70 72 65 76 69 6f 75 73 6c 79 20   any previously 
7d90: 69 6e 73 74 61 6c 6c 65 64 20 63 6f 6c 6c 61 74  installed collat
7da0: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 61 63  ion sequence fac
7db0: 74 6f 72 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  tory..*/.int sql
7dc0: 69 74 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 6e  ite3_collation_n
7dd0: 65 65 64 65 64 31 36 28 0a 20 20 73 71 6c 69 74  eeded16(.  sqlit
7de0: 65 33 20 2a 64 62 2c 20 0a 20 20 76 6f 69 64 20  e3 *db, .  void 
7df0: 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 2c  *pCollNeededArg,
7e00: 20 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e   .  void(*xCollN
7e10: 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73  eeded16)(void*,s
7e20: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
7e30: 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a  tRep,const void*
7e40: 29 0a 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74  ).){.  if( sqlit
7e50: 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 64 62  e3SafetyCheck(db
7e60: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
7e70: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20  SQLITE_MISUSE;. 
7e80: 20 7d 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c 4e 65   }.  db->xCollNe
7e90: 65 64 65 64 20 3d 20 30 3b 0a 20 20 64 62 2d 3e  eded = 0;.  db->
7ea0: 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 20 3d 20  xCollNeeded16 = 
7eb0: 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 3b 0a 20  xCollNeeded16;. 
7ec0: 20 64 62 2d 3e 70 43 6f 6c 6c 4e 65 65 64 65 64   db->pCollNeeded
7ed0: 41 72 67 20 3d 20 70 43 6f 6c 6c 4e 65 65 64 65  Arg = pCollNeede
7ee0: 64 41 72 67 3b 0a 20 20 72 65 74 75 72 6e 20 53  dArg;.  return S
7ef0: 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64  QLITE_OK;.}.#end
7f00: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
7f10: 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 23 69 66 6e  T_UTF16 */..#ifn
7f20: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
7f30: 47 4c 4f 42 41 4c 52 45 43 4f 56 45 52 0a 2f 2a  GLOBALRECOVER./*
7f40: 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f  .** This functio
7f50: 6e 20 69 73 20 6e 6f 77 20 61 6e 20 61 6e 61 63  n is now an anac
7f60: 68 72 6f 6e 69 73 6d 2e 20 49 74 20 75 73 65 64  hronism. It used
7f70: 20 74 6f 20 62 65 20 75 73 65 64 20 74 6f 20 72   to be used to r
7f80: 65 63 6f 76 65 72 20 66 72 6f 6d 20 61 0a 2a 2a  ecover from a.**
7f90: 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72   malloc() failur
7fa0: 65 2c 20 62 75 74 20 53 51 4c 69 74 65 20 6e 6f  e, but SQLite no
7fb0: 77 20 64 6f 65 73 20 74 68 69 73 20 61 75 74 6f  w does this auto
7fc0: 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 69 6e  matically..*/.in
7fd0: 74 20 73 71 6c 69 74 65 33 5f 67 6c 6f 62 61 6c  t sqlite3_global
7fe0: 5f 72 65 63 6f 76 65 72 28 29 7b 0a 20 20 72 65  _recover(){.  re
7ff0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
8000: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
8010: 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74  Test to see whet
8020: 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 64  her or not the d
8030: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
8040: 6f 6e 20 69 73 20 69 6e 20 61 75 74 6f 63 6f 6d  on is in autocom
8050: 6d 69 74 0a 2a 2a 20 6d 6f 64 65 2e 20 20 52 65  mit.** mode.  Re
8060: 74 75 72 6e 20 54 52 55 45 20 69 66 20 69 74 20  turn TRUE if it 
8070: 69 73 20 61 6e 64 20 46 41 4c 53 45 20 69 66 20  is and FALSE if 
8080: 6e 6f 74 2e 20 20 41 75 74 6f 63 6f 6d 6d 69 74  not.  Autocommit
8090: 20 6d 6f 64 65 20 69 73 20 6f 6e 0a 2a 2a 20 62   mode is on.** b
80a0: 79 20 64 65 66 61 75 6c 74 2e 20 20 41 75 74 6f  y default.  Auto
80b0: 63 6f 6d 6d 69 74 20 69 73 20 64 69 73 61 62 6c  commit is disabl
80c0: 65 64 20 62 79 20 61 20 42 45 47 49 4e 20 73 74  ed by a BEGIN st
80d0: 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65 65 6e  atement and reen
80e0: 61 62 6c 65 64 0a 2a 2a 20 62 79 20 74 68 65 20  abled.** by the 
80f0: 6e 65 78 74 20 43 4f 4d 4d 49 54 20 6f 72 20 52  next COMMIT or R
8100: 4f 4c 4c 42 41 43 4b 2e 0a 2a 2a 0a 2a 2a 2a 2a  OLLBACK..**.****
8110: 2a 2a 2a 20 54 48 49 53 20 49 53 20 41 4e 20 45  *** THIS IS AN E
8120: 58 50 45 52 49 4d 45 4e 54 41 4c 20 41 50 49 20  XPERIMENTAL API 
8130: 41 4e 44 20 49 53 20 53 55 42 4a 45 43 54 20 54  AND IS SUBJECT T
8140: 4f 20 43 48 41 4e 47 45 20 2a 2a 2a 2a 2a 2a 0a  O CHANGE ******.
8150: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 67  */.int sqlite3_g
8160: 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 73 71  et_autocommit(sq
8170: 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 72 65  lite3 *db){.  re
8180: 74 75 72 6e 20 64 62 2d 3e 61 75 74 6f 43 6f 6d  turn db->autoCom
8190: 6d 69 74 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  mit;.}..#ifdef S
81a0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
81b0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
81c0: 72 6f 75 74 69 6e 65 20 69 73 20 73 75 62 74 69  routine is subti
81d0: 74 75 74 65 64 20 66 6f 72 20 63 6f 6e 73 74 61  tuted for consta
81e0: 6e 74 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  nt SQLITE_CORRUP
81f0: 54 20 69 6e 0a 2a 2a 20 64 65 62 75 67 67 69 6e  T in.** debuggin
8200: 67 20 62 75 69 6c 64 73 2e 20 20 54 68 69 73 20  g builds.  This 
8210: 70 72 6f 76 69 64 65 73 20 61 20 77 61 79 20 74  provides a way t
8220: 6f 20 73 65 74 20 61 20 62 72 65 61 6b 70 6f 69  o set a breakpoi
8230: 6e 74 20 66 6f 72 20 77 68 65 6e 0a 2a 2a 20 63  nt for when.** c
8240: 6f 72 72 75 70 74 69 6f 6e 20 69 73 20 66 69 72  orruption is fir
8250: 73 74 20 64 65 74 65 63 74 65 64 2e 0a 2a 2f 0a  st detected..*/.
8260: 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75  int sqlite3Corru
8270: 70 74 28 76 6f 69 64 29 7b 0a 20 20 72 65 74 75  pt(void){.  retu
8280: 72 6e 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  rn SQLITE_CORRUP
8290: 54 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  T;.}.#endif...#i
82a0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
82b0: 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 2f  T_SHARED_CACHE./
82c0: 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 6f 72 20 64  *.** Enable or d
82d0: 69 73 61 62 6c 65 20 74 68 65 20 73 68 61 72 65  isable the share
82e0: 64 20 70 61 67 65 72 20 61 6e 64 20 73 63 68 65  d pager and sche
82f0: 6d 61 20 66 65 61 74 75 72 65 73 20 66 6f 72 20  ma features for 
8300: 74 68 65 0a 2a 2a 20 63 75 72 72 65 6e 74 20 74  the.** current t
8310: 68 72 65 61 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  hread..**.** Thi
8320: 73 20 72 6f 75 74 69 6e 65 20 73 68 6f 75 6c 64  s routine should
8330: 20 6f 6e 6c 79 20 62 65 20 63 61 6c 6c 65 64 20   only be called 
8340: 77 68 65 6e 20 74 68 65 72 65 20 61 72 65 20 6e  when there are n
8350: 6f 20 6f 70 65 6e 0a 2a 2a 20 64 61 74 61 62 61  o open.** databa
8360: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 0a  se connections..
8370: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 65  */.int sqlite3_e
8380: 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63  nable_shared_cac
8390: 68 65 28 69 6e 74 20 65 6e 61 62 6c 65 29 7b 0a  he(int enable){.
83a0: 20 20 54 68 72 65 61 64 44 61 74 61 20 2a 70 54    ThreadData *pT
83b0: 64 20 3d 20 73 71 6c 69 74 65 33 54 68 72 65 61  d = sqlite3Threa
83c0: 64 44 61 74 61 28 29 3b 0a 20 20 69 66 28 20 70  dData();.  if( p
83d0: 54 64 20 29 7b 0a 20 20 20 20 2f 2a 20 49 74 20  Td ){.    /* It 
83e0: 69 73 20 6f 6e 6c 79 20 6c 65 67 61 6c 20 74 6f  is only legal to
83f0: 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 65 6e   call sqlite3_en
8400: 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68  able_shared_cach
8410: 65 28 29 20 77 68 65 6e 20 74 68 65 72 65 0a 20  e() when there. 
8420: 20 20 20 2a 2a 20 61 72 65 20 6e 6f 20 63 75 72     ** are no cur
8430: 72 65 6e 74 6c 79 20 6f 70 65 6e 20 62 2d 74 72  rently open b-tr
8440: 65 65 73 20 74 68 61 74 20 77 65 72 65 20 6f 70  ees that were op
8450: 65 6e 65 64 20 62 79 20 74 68 65 20 63 61 6c 6c  ened by the call
8460: 69 6e 67 20 74 68 72 65 61 64 2e 0a 20 20 20 20  ing thread..    
8470: 2a 2a 20 54 68 69 73 20 63 6f 6e 64 69 74 69 6f  ** This conditio
8480: 6e 20 69 73 20 6f 6e 6c 79 20 65 61 73 79 20 74  n is only easy t
8490: 6f 20 64 65 74 65 63 74 20 69 66 20 74 68 65 20  o detect if the 
84a0: 73 68 61 72 65 64 2d 63 61 63 68 65 20 77 65 72  shared-cache wer
84b0: 65 20 0a 20 20 20 20 2a 2a 20 70 72 65 76 69 6f  e .    ** previo
84c0: 75 73 6c 79 20 65 6e 61 62 6c 65 64 20 28 61 6e  usly enabled (an
84d0: 64 20 69 73 20 62 65 69 6e 67 20 64 69 73 61 62  d is being disab
84e0: 6c 65 64 29 2e 20 0a 20 20 20 20 2a 2f 0a 20 20  led). .    */.  
84f0: 20 20 69 66 28 20 70 54 64 2d 3e 70 42 74 72 65    if( pTd->pBtre
8500: 65 20 26 26 20 21 65 6e 61 62 6c 65 20 29 7b 0a  e && !enable ){.
8510: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54        assert( pT
8520: 64 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61  d->useSharedData
8530: 20 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   );.      return
8540: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a   SQLITE_MISUSE;.
8550: 20 20 20 20 7d 0a 0a 20 20 20 20 70 54 64 2d 3e      }..    pTd->
8560: 75 73 65 53 68 61 72 65 64 44 61 74 61 20 3d 20  useSharedData = 
8570: 65 6e 61 62 6c 65 3b 0a 20 20 20 20 73 71 6c 69  enable;.    sqli
8580: 74 65 33 52 65 6c 65 61 73 65 54 68 72 65 61 64  te3ReleaseThread
8590: 44 61 74 61 28 29 3b 0a 20 20 7d 0a 20 20 72 65  Data();.  }.  re
85a0: 74 75 72 6e 20 73 71 6c 69 74 65 33 41 70 69 45  turn sqlite3ApiE
85b0: 78 69 74 28 30 2c 20 53 51 4c 49 54 45 5f 4f 4b  xit(0, SQLITE_OK
85c0: 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  );.}.#endif../*.
85d0: 2a 2a 20 54 68 69 73 20 69 73 20 61 20 63 6f 6e  ** This is a con
85e0: 76 65 6e 69 65 6e 63 65 20 72 6f 75 74 69 6e 65  venience routine
85f0: 20 74 68 61 74 20 6d 61 6b 65 73 20 73 75 72 65   that makes sure
8600: 20 74 68 61 74 20 61 6c 6c 20 74 68 72 65 61 64   that all thread
8610: 2d 73 70 65 63 69 66 69 63 0a 2a 2a 20 64 61 74  -specific.** dat
8620: 61 20 66 6f 72 20 74 68 69 73 20 74 68 72 65 61  a for this threa
8630: 64 20 68 61 73 20 62 65 65 6e 20 64 65 61 6c 6c  d has been deall
8640: 6f 63 61 74 65 64 2e 0a 2a 2f 0a 76 6f 69 64 20  ocated..*/.void 
8650: 73 71 6c 69 74 65 33 5f 74 68 72 65 61 64 5f 63  sqlite3_thread_c
8660: 6c 65 61 6e 75 70 28 76 6f 69 64 29 7b 0a 20 20  leanup(void){.  
8670: 54 68 72 65 61 64 44 61 74 61 20 2a 70 54 64 20  ThreadData *pTd 
8680: 3d 20 73 71 6c 69 74 65 33 4f 73 54 68 72 65 61  = sqlite3OsThrea
8690: 64 53 70 65 63 69 66 69 63 44 61 74 61 28 30 29  dSpecificData(0)
86a0: 3b 0a 20 20 69 66 28 20 70 54 64 20 29 7b 0a 20  ;.  if( pTd ){. 
86b0: 20 20 20 6d 65 6d 73 65 74 28 70 54 64 2c 20 30     memset(pTd, 0
86c0: 2c 20 73 69 7a 65 6f 66 28 2a 70 54 64 29 29 3b  , sizeof(*pTd));
86d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 4f 73 54 68  .    sqlite3OsTh
86e0: 72 65 61 64 53 70 65 63 69 66 69 63 44 61 74 61  readSpecificData
86f0: 28 2d 31 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a  (-1);.  }.}../*.
8700: 2a 2a 20 52 65 74 75 72 6e 20 6d 65 74 61 20 69  ** Return meta i
8710: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
8720: 20 61 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75   a specific colu
8730: 6d 6e 20 6f 66 20 61 20 64 61 74 61 62 61 73 65  mn of a database
8740: 20 74 61 62 6c 65 2e 0a 2a 2a 20 53 65 65 20 63   table..** See c
8750: 6f 6d 6d 65 6e 74 20 69 6e 20 73 71 6c 69 74 65  omment in sqlite
8760: 33 2e 68 20 28 73 71 6c 69 74 65 2e 68 2e 69 6e  3.h (sqlite.h.in
8770: 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a  ) for details..*
8780: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
8790: 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45  ENABLE_COLUMN_ME
87a0: 54 41 44 41 54 41 0a 69 6e 74 20 73 71 6c 69 74  TADATA.int sqlit
87b0: 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f  e3_table_column_
87c0: 6d 65 74 61 64 61 74 61 28 0a 20 20 73 71 6c 69  metadata(.  sqli
87d0: 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20  te3 *db,        
87e0: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65          /* Conne
87f0: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 2a 2f 0a  ction handle */.
8800: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
8810: 62 4e 61 6d 65 2c 20 20 20 20 20 20 20 20 2f 2a  bName,        /*
8820: 20 44 61 74 61 62 61 73 65 20 6e 61 6d 65 20 6f   Database name o
8830: 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 6f 6e 73  r NULL */.  cons
8840: 74 20 63 68 61 72 20 2a 7a 54 61 62 6c 65 4e 61  t char *zTableNa
8850: 6d 65 2c 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  me,     /* Table
8860: 20 6e 61 6d 65 20 2a 2f 0a 20 20 63 6f 6e 73 74   name */.  const
8870: 20 63 68 61 72 20 2a 7a 43 6f 6c 75 6d 6e 4e 61   char *zColumnNa
8880: 6d 65 2c 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  me,    /* Column
8890: 20 6e 61 6d 65 20 2a 2f 0a 20 20 63 68 61 72 20   name */.  char 
88a0: 63 6f 6e 73 74 20 2a 2a 70 7a 44 61 74 61 54 79  const **pzDataTy
88b0: 70 65 2c 20 20 20 20 2f 2a 20 4f 55 54 50 55 54  pe,    /* OUTPUT
88c0: 3a 20 44 65 63 6c 61 72 65 64 20 64 61 74 61 20  : Declared data 
88d0: 74 79 70 65 20 2a 2f 0a 20 20 63 68 61 72 20 63  type */.  char c
88e0: 6f 6e 73 74 20 2a 2a 70 7a 43 6f 6c 6c 53 65 71  onst **pzCollSeq
88f0: 2c 20 20 20 20 20 2f 2a 20 4f 55 54 50 55 54 3a  ,     /* OUTPUT:
8900: 20 43 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   Collation seque
8910: 6e 63 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 69 6e  nce name */.  in
8920: 74 20 2a 70 4e 6f 74 4e 75 6c 6c 2c 20 20 20 20  t *pNotNull,    
8930: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 55 54            /* OUT
8940: 50 55 54 3a 20 54 72 75 65 20 69 66 20 4e 4f 54  PUT: True if NOT
8950: 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
8960: 20 65 78 69 73 74 73 20 2a 2f 0a 20 20 69 6e 74   exists */.  int
8970: 20 2a 70 50 72 69 6d 61 72 79 4b 65 79 2c 20 20   *pPrimaryKey,  
8980: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 50           /* OUTP
8990: 55 54 3a 20 54 72 75 65 20 69 66 20 63 6f 6c 75  UT: True if colu
89a0: 6d 6e 20 70 61 72 74 20 6f 66 20 50 4b 20 2a 2f  mn part of PK */
89b0: 0a 20 20 69 6e 74 20 2a 70 41 75 74 6f 69 6e 63  .  int *pAutoinc
89c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
89d0: 2a 20 4f 55 54 50 55 54 3a 20 54 72 75 65 20 69  * OUTPUT: True i
89e0: 66 20 63 6f 6c 75 6d 73 20 69 73 20 61 75 74 6f  f colums is auto
89f0: 2d 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 29 7b  -increment */.){
8a00: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61  .  int rc;.  cha
8a10: 72 20 2a 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a  r *zErrMsg = 0;.
8a20: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20    Table *pTab = 
8a30: 30 3b 0a 20 20 43 6f 6c 75 6d 6e 20 2a 70 43 6f  0;.  Column *pCo
8a40: 6c 20 3d 20 30 3b 0a 20 20 69 6e 74 20 69 43 6f  l = 0;.  int iCo
8a50: 6c 3b 0a 0a 20 20 63 68 61 72 20 63 6f 6e 73 74  l;..  char const
8a60: 20 2a 7a 44 61 74 61 54 79 70 65 20 3d 20 30 3b   *zDataType = 0;
8a70: 0a 20 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a  .  char const *z
8a80: 43 6f 6c 6c 53 65 71 20 3d 20 30 3b 0a 20 20 69  CollSeq = 0;.  i
8a90: 6e 74 20 6e 6f 74 6e 75 6c 6c 20 3d 20 30 3b 0a  nt notnull = 0;.
8aa0: 20 20 69 6e 74 20 70 72 69 6d 61 72 79 6b 65 79    int primarykey
8ab0: 20 3d 20 30 3b 0a 20 20 69 6e 74 20 61 75 74 6f   = 0;.  int auto
8ac0: 69 6e 63 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 45  inc = 0;..  /* E
8ad0: 6e 73 75 72 65 20 74 68 65 20 64 61 74 61 62 61  nsure the databa
8ae0: 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  se schema has be
8af0: 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 20 20 69  en loaded */.  i
8b00: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
8b10: 4f 6e 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65  On(db) ){.    re
8b20: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
8b30: 53 45 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  SE;.  }.  rc = s
8b40: 71 6c 69 74 65 33 49 6e 69 74 28 64 62 2c 20 26  qlite3Init(db, &
8b50: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 69 66 28 20  zErrMsg);.  if( 
8b60: 53 51 4c 49 54 45 5f 4f 4b 21 3d 72 63 20 29 7b  SQLITE_OK!=rc ){
8b70: 0a 20 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 5f  .    goto error_
8b80: 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c  out;.  }..  /* L
8b90: 6f 63 61 74 65 20 74 68 65 20 74 61 62 6c 65 20  ocate the table 
8ba0: 69 6e 20 71 75 65 73 74 69 6f 6e 20 2a 2f 0a 20  in question */. 
8bb0: 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46   pTab = sqlite3F
8bc0: 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 54 61  indTable(db, zTa
8bd0: 62 6c 65 4e 61 6d 65 2c 20 7a 44 62 4e 61 6d 65  bleName, zDbName
8be0: 29 3b 0a 20 20 69 66 28 20 21 70 54 61 62 20 7c  );.  if( !pTab |
8bf0: 7c 20 70 54 61 62 2d 3e 70 53 65 6c 65 63 74 20  | pTab->pSelect 
8c00: 29 7b 0a 20 20 20 20 70 54 61 62 20 3d 20 30 3b  ){.    pTab = 0;
8c10: 0a 20 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 5f  .    goto error_
8c20: 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 46  out;.  }..  /* F
8c30: 69 6e 64 20 74 68 65 20 63 6f 6c 75 6d 6e 20 66  ind the column f
8c40: 6f 72 20 77 68 69 63 68 20 69 6e 66 6f 20 69 73  or which info is
8c50: 20 72 65 71 75 65 73 74 65 64 20 2a 2f 0a 20 20   requested */.  
8c60: 69 66 28 20 73 71 6c 69 74 65 33 49 73 52 6f 77  if( sqlite3IsRow
8c70: 69 64 28 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 29 20  id(zColumnName) 
8c80: 29 7b 0a 20 20 20 20 69 43 6f 6c 20 3d 20 70 54  ){.    iCol = pT
8c90: 61 62 2d 3e 69 50 4b 65 79 3b 0a 20 20 20 20 69  ab->iPKey;.    i
8ca0: 66 28 20 69 43 6f 6c 3e 3d 30 20 29 7b 0a 20 20  f( iCol>=0 ){.  
8cb0: 20 20 20 20 70 43 6f 6c 20 3d 20 26 70 54 61 62      pCol = &pTab
8cc0: 2d 3e 61 43 6f 6c 5b 69 43 6f 6c 5d 3b 0a 20 20  ->aCol[iCol];.  
8cd0: 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
8ce0: 20 66 6f 72 28 69 43 6f 6c 3d 30 3b 20 69 43 6f   for(iCol=0; iCo
8cf0: 6c 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20 69 43  l<pTab->nCol; iC
8d00: 6f 6c 2b 2b 29 7b 0a 20 20 20 20 20 20 70 43 6f  ol++){.      pCo
8d10: 6c 20 3d 20 26 70 54 61 62 2d 3e 61 43 6f 6c 5b  l = &pTab->aCol[
8d20: 69 43 6f 6c 5d 3b 0a 20 20 20 20 20 20 69 66 28  iCol];.      if(
8d30: 20 30 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43   0==sqlite3StrIC
8d40: 6d 70 28 70 43 6f 6c 2d 3e 7a 4e 61 6d 65 2c 20  mp(pCol->zName, 
8d50: 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 29 20 29 7b 0a  zColumnName) ){.
8d60: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
8d70: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
8d80: 20 69 66 28 20 69 43 6f 6c 3d 3d 70 54 61 62 2d   if( iCol==pTab-
8d90: 3e 6e 43 6f 6c 20 29 7b 0a 20 20 20 20 20 20 70  >nCol ){.      p
8da0: 54 61 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 67  Tab = 0;.      g
8db0: 6f 74 6f 20 65 72 72 6f 72 5f 6f 75 74 3b 0a 20  oto error_out;. 
8dc0: 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54     }.  }..  /* T
8dd0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 6c 6f  he following blo
8de0: 63 6b 20 73 74 6f 72 65 73 20 74 68 65 20 6d 65  ck stores the me
8df0: 74 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  ta information t
8e00: 68 61 74 20 77 69 6c 6c 20 62 65 20 72 65 74 75  hat will be retu
8e10: 72 6e 65 64 0a 20 20 2a 2a 20 74 6f 20 74 68 65  rned.  ** to the
8e20: 20 63 61 6c 6c 65 72 20 69 6e 20 6c 6f 63 61 6c   caller in local
8e30: 20 76 61 72 69 61 62 6c 65 73 20 7a 44 61 74 61   variables zData
8e40: 54 79 70 65 2c 20 7a 43 6f 6c 6c 53 65 71 2c 20  Type, zCollSeq, 
8e50: 6e 6f 74 6e 75 6c 6c 2c 20 70 72 69 6d 61 72 79  notnull, primary
8e60: 6b 65 79 0a 20 20 2a 2a 20 61 6e 64 20 61 75 74  key.  ** and aut
8e70: 6f 69 6e 63 2e 20 41 74 20 74 68 69 73 20 70 6f  oinc. At this po
8e80: 69 6e 74 20 74 68 65 72 65 20 61 72 65 20 74 77  int there are tw
8e90: 6f 20 70 6f 73 73 69 62 69 6c 69 74 69 65 73 3a  o possibilities:
8ea0: 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 20 20 20 20  .  ** .  **     
8eb0: 31 2e 20 54 68 65 20 73 70 65 63 69 66 69 65 64  1. The specified
8ec0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 77 61 73   column name was
8ed0: 20 72 6f 77 69 64 22 2c 20 22 6f 69 64 22 20 6f   rowid", "oid" o
8ee0: 72 20 22 5f 72 6f 77 69 64 5f 22 20 0a 20 20 2a  r "_rowid_" .  *
8ef0: 2a 20 20 20 20 20 20 20 20 61 6e 64 20 74 68 65  *        and the
8f00: 72 65 20 69 73 20 6e 6f 20 65 78 70 6c 69 63 69  re is no explici
8f10: 74 6c 79 20 64 65 63 6c 61 72 65 64 20 49 50 4b  tly declared IPK
8f20: 20 63 6f 6c 75 6d 6e 2e 20 0a 20 20 2a 2a 0a 20   column. .  **. 
8f30: 20 2a 2a 20 20 20 20 20 32 2e 20 54 68 65 20 74   **     2. The t
8f40: 61 62 6c 65 20 69 73 20 6e 6f 74 20 61 20 76 69  able is not a vi
8f50: 65 77 20 61 6e 64 20 74 68 65 20 63 6f 6c 75 6d  ew and the colum
8f60: 6e 20 6e 61 6d 65 20 69 64 65 6e 74 69 66 69 65  n name identifie
8f70: 64 20 61 6e 20 0a 20 20 2a 2a 20 20 20 20 20 20  d an .  **      
8f80: 20 20 65 78 70 6c 69 63 69 74 6c 79 20 64 65 63    explicitly dec
8f90: 6c 61 72 65 64 20 63 6f 6c 75 6d 6e 2e 20 43 6f  lared column. Co
8fa0: 70 79 20 6d 65 74 61 20 69 6e 66 6f 72 6d 61 74  py meta informat
8fb0: 69 6f 6e 20 66 72 6f 6d 20 2a 70 43 6f 6c 2e 0a  ion from *pCol..
8fc0: 20 20 2a 2f 20 0a 20 20 69 66 28 20 70 43 6f 6c    */ .  if( pCol
8fd0: 20 29 7b 0a 20 20 20 20 7a 44 61 74 61 54 79 70   ){.    zDataTyp
8fe0: 65 20 3d 20 70 43 6f 6c 2d 3e 7a 54 79 70 65 3b  e = pCol->zType;
8ff0: 0a 20 20 20 20 7a 43 6f 6c 6c 53 65 71 20 3d 20  .    zCollSeq = 
9000: 70 43 6f 6c 2d 3e 7a 43 6f 6c 6c 3b 0a 20 20 20  pCol->zColl;.   
9010: 20 6e 6f 74 6e 75 6c 6c 20 3d 20 28 70 43 6f 6c   notnull = (pCol
9020: 2d 3e 6e 6f 74 4e 75 6c 6c 3f 31 3a 30 29 3b 0a  ->notNull?1:0);.
9030: 20 20 20 20 70 72 69 6d 61 72 79 6b 65 79 20 20      primarykey  
9040: 3d 20 28 70 43 6f 6c 2d 3e 69 73 50 72 69 6d 4b  = (pCol->isPrimK
9050: 65 79 3f 31 3a 30 29 3b 0a 20 20 20 20 61 75 74  ey?1:0);.    aut
9060: 6f 69 6e 63 20 3d 20 28 28 70 54 61 62 2d 3e 69  oinc = ((pTab->i
9070: 50 4b 65 79 3d 3d 69 43 6f 6c 20 26 26 20 70 54  PKey==iCol && pT
9080: 61 62 2d 3e 61 75 74 6f 49 6e 63 29 3f 31 3a 30  ab->autoInc)?1:0
9090: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
90a0: 7a 44 61 74 61 54 79 70 65 20 3d 20 22 49 4e 54  zDataType = "INT
90b0: 45 47 45 52 22 3b 0a 20 20 20 20 70 72 69 6d 61  EGER";.    prima
90c0: 72 79 6b 65 79 20 3d 20 31 3b 0a 20 20 7d 0a 20  rykey = 1;.  }. 
90d0: 20 69 66 28 20 21 7a 43 6f 6c 6c 53 65 71 20 29   if( !zCollSeq )
90e0: 7b 0a 20 20 20 20 7a 43 6f 6c 6c 53 65 71 20 3d  {.    zCollSeq =
90f0: 20 22 42 49 4e 41 52 59 22 3b 0a 20 20 7d 0a 0a   "BINARY";.  }..
9100: 65 72 72 6f 72 5f 6f 75 74 3a 0a 20 20 69 66 28  error_out:.  if(
9110: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66   sqlite3SafetyOf
9120: 66 28 64 62 29 20 29 7b 0a 20 20 20 20 72 63 20  f(db) ){.    rc 
9130: 3d 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b  = SQLITE_MISUSE;
9140: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 57 68 65 74 68  .  }..  /* Wheth
9150: 65 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  er the function 
9160: 63 61 6c 6c 20 73 75 63 63 65 65 64 65 64 20 6f  call succeeded o
9170: 72 20 66 61 69 6c 65 64 2c 20 73 65 74 20 74 68  r failed, set th
9180: 65 20 6f 75 74 70 75 74 20 70 61 72 61 6d 65 74  e output paramet
9190: 65 72 73 0a 20 20 2a 2a 20 74 6f 20 77 68 61 74  ers.  ** to what
91a0: 65 76 65 72 20 74 68 65 69 72 20 6c 6f 63 61 6c  ever their local
91b0: 20 63 6f 75 6e 74 65 72 70 61 72 74 73 20 63 6f   counterparts co
91c0: 6e 74 61 69 6e 2e 20 49 66 20 61 6e 20 65 72 72  ntain. If an err
91d0: 6f 72 20 64 69 64 20 6f 63 63 75 72 2c 0a 20 20  or did occur,.  
91e0: 2a 2a 20 74 68 69 73 20 68 61 73 20 74 68 65 20  ** this has the 
91f0: 65 66 66 65 63 74 20 6f 66 20 7a 65 72 6f 69 6e  effect of zeroin
9200: 67 20 61 6c 6c 20 6f 75 74 70 75 74 20 70 61 72  g all output par
9210: 61 6d 65 74 65 72 73 2e 0a 20 20 2a 2f 0a 20 20  ameters..  */.  
9220: 69 66 28 20 70 7a 44 61 74 61 54 79 70 65 20 29  if( pzDataType )
9230: 20 2a 70 7a 44 61 74 61 54 79 70 65 20 3d 20 7a   *pzDataType = z
9240: 44 61 74 61 54 79 70 65 3b 0a 20 20 69 66 28 20  DataType;.  if( 
9250: 70 7a 43 6f 6c 6c 53 65 71 20 29 20 2a 70 7a 43  pzCollSeq ) *pzC
9260: 6f 6c 6c 53 65 71 20 3d 20 7a 43 6f 6c 6c 53 65  ollSeq = zCollSe
9270: 71 3b 0a 20 20 69 66 28 20 70 4e 6f 74 4e 75 6c  q;.  if( pNotNul
9280: 6c 20 29 20 2a 70 4e 6f 74 4e 75 6c 6c 20 3d 20  l ) *pNotNull = 
9290: 6e 6f 74 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 70  notnull;.  if( p
92a0: 50 72 69 6d 61 72 79 4b 65 79 20 29 20 2a 70 50  PrimaryKey ) *pP
92b0: 72 69 6d 61 72 79 4b 65 79 20 3d 20 70 72 69 6d  rimaryKey = prim
92c0: 61 72 79 6b 65 79 3b 0a 20 20 69 66 28 20 70 41  arykey;.  if( pA
92d0: 75 74 6f 69 6e 63 20 29 20 2a 70 41 75 74 6f 69  utoinc ) *pAutoi
92e0: 6e 63 20 3d 20 61 75 74 6f 69 6e 63 3b 0a 0a 20  nc = autoinc;.. 
92f0: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d   if( SQLITE_OK==
9300: 72 63 20 26 26 20 21 70 54 61 62 20 29 7b 0a 20  rc && !pTab ){. 
9310: 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
9320: 69 6e 67 28 26 7a 45 72 72 4d 73 67 2c 20 22 6e  ing(&zErrMsg, "n
9330: 6f 20 73 75 63 68 20 74 61 62 6c 65 20 63 6f 6c  o such table col
9340: 75 6d 6e 3a 20 22 2c 20 7a 54 61 62 6c 65 4e 61  umn: ", zTableNa
9350: 6d 65 2c 20 22 2e 22 2c 20 0a 20 20 20 20 20 20  me, ".", .      
9360: 20 20 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 30    zColumnName, 0
9370: 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  );.    rc = SQLI
9380: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  TE_ERROR;.  }.  
9390: 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c  sqlite3Error(db,
93a0: 20 72 63 2c 20 28 7a 45 72 72 4d 73 67 3f 22 25   rc, (zErrMsg?"%
93b0: 73 22 3a 30 29 2c 20 7a 45 72 72 4d 73 67 29 3b  s":0), zErrMsg);
93c0: 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28 7a 45  .  sqliteFree(zE
93d0: 72 72 4d 73 67 29 3b 0a 20 20 72 65 74 75 72 6e  rrMsg);.  return
93e0: 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
93f0: 64 62 2c 20 72 63 29 3b 0a 7d 0a 23 65 6e 64 69  db, rc);.}.#endi
9400: 66 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 61 6c 6c  f../*.** Set all
9410: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
9420: 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  in the compiled 
9430: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 6f  SQL statement to
9440: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 69 6e 74 20 73 71   NULL..*/.int sq
9450: 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64  lite3_clear_bind
9460: 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d  ings(sqlite3_stm
9470: 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 69 6e 74  t *pStmt){.  int
9480: 20 69 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53   i;.  int rc = S
9490: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 66 6f 72 28  QLITE_OK;.  for(
94a0: 69 3d 31 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f  i=1; rc==SQLITE_
94b0: 4f 4b 20 26 26 20 69 3c 3d 73 71 6c 69 74 65 33  OK && i<=sqlite3
94c0: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
94d0: 63 6f 75 6e 74 28 70 53 74 6d 74 29 3b 20 69 2b  count(pStmt); i+
94e0: 2b 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  +){.    rc = sql
94f0: 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 70  ite3_bind_null(p
9500: 53 74 6d 74 2c 20 69 29 3b 0a 20 20 7d 0a 20 20  Stmt, i);.  }.  
9510: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
9520: 0a 2a 2a 20 53 6c 65 65 70 20 66 6f 72 20 61 20  .** Sleep for a 
9530: 6c 69 74 74 6c 65 20 77 68 69 6c 65 2e 20 20 52  little while.  R
9540: 65 74 75 72 6e 20 74 68 65 20 61 6d 6f 75 6e 74  eturn the amount
9550: 20 6f 66 20 74 69 6d 65 20 73 6c 65 70 74 2e 0a   of time slept..
9560: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73  */.int sqlite3_s
9570: 6c 65 65 70 28 69 6e 74 20 6d 73 29 7b 0a 20 20  leep(int ms){.  
9580: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 4f 73  return sqlite3Os
9590: 53 6c 65 65 70 28 6d 73 29 3b 0a 7d 0a 0a 2f 2a  Sleep(ms);.}../*
95a0: 0a 2a 2a 20 45 6e 61 62 6c 65 20 6f 72 20 64 69  .** Enable or di
95b0: 73 61 62 6c 65 20 74 68 65 20 65 78 74 65 6e 64  sable the extend
95c0: 65 64 20 72 65 73 75 6c 74 20 63 6f 64 65 73 2e  ed result codes.
95d0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
95e0: 65 78 74 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f  extended_result_
95f0: 63 6f 64 65 73 28 73 71 6c 69 74 65 33 20 2a 64  codes(sqlite3 *d
9600: 62 2c 20 69 6e 74 20 6f 6e 6f 66 66 29 7b 0a 20  b, int onoff){. 
9610: 20 64 62 2d 3e 65 72 72 4d 61 73 6b 20 3d 20 6f   db->errMask = o
9620: 6e 6f 66 66 20 3f 20 30 78 66 66 66 66 66 66 66  noff ? 0xfffffff
9630: 66 20 3a 20 30 78 66 66 3b 0a 20 20 72 65 74 75  f : 0xff;.  retu
9640: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.