Documentation Source Text

Hex Artifact Content
Login

Artifact fb07a01637d07b6c5c6f9c6745b7d3e7dafbded8:


0000: 3c 74 69 74 6c 65 3e 53 51 4c 69 74 65 20 52 65  <title>SQLite Re
0010: 73 75 6c 74 20 43 6f 64 65 73 3c 2f 74 69 74 6c  sult Codes</titl
0020: 65 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f  e>.<tcl>hd_keywo
0030: 72 64 73 20 7b 72 65 73 75 6c 74 20 63 6f 64 65  rds {result code
0040: 7d 20 7b 72 65 73 75 6c 74 20 63 6f 64 65 73 7d  } {result codes}
0050: 20 7b 65 72 72 6f 72 20 63 6f 64 65 7d 20 7b 65   {error code} {e
0060: 72 72 6f 72 20 63 6f 64 65 73 7d 3c 2f 74 63 6c  rror codes}</tcl
0070: 3e 0a 3c 68 31 20 61 6c 69 67 6e 3d 22 63 65 6e  >.<h1 align="cen
0080: 74 65 72 22 3e 53 51 4c 69 74 65 20 52 65 73 75  ter">SQLite Resu
0090: 6c 74 20 43 6f 64 65 73 3c 2f 68 31 3e 0a 0a 3c  lt Codes</h1>..<
00a0: 70 3e 0a 4d 61 6e 79 20 6f 66 20 74 68 65 20 72  p>.Many of the r
00b0: 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 53  outines in the S
00c0: 51 4c 69 74 65 20 5b 43 2d 6c 61 6e 67 75 61 67  QLite [C-languag
00d0: 65 20 49 6e 74 65 72 66 61 63 65 5d 20 72 65 74  e Interface] ret
00e0: 75 72 6e 0a 6e 75 6d 65 72 69 63 20 72 65 73 75  urn.numeric resu
00f0: 6c 74 20 63 6f 64 65 73 20 69 6e 64 69 63 61 74  lt codes indicat
0100: 69 6e 67 20 65 69 74 68 65 72 20 73 75 63 63 65  ing either succe
0110: 73 73 20 6f 72 20 66 61 69 6c 75 72 65 2c 20 61  ss or failure, a
0120: 6e 64 20 0a 69 6e 20 74 68 65 20 65 76 65 6e 74  nd .in the event
0130: 20 6f 66 20 61 20 66 61 69 6c 75 72 65 2c 20 70   of a failure, p
0140: 72 6f 76 69 64 69 6e 67 20 73 6f 6d 65 20 69 64  roviding some id
0150: 65 61 20 6f 66 20 74 68 65 20 63 61 75 73 65 20  ea of the cause 
0160: 6f 66 0a 74 68 65 20 66 61 69 6c 75 72 65 2e 20  of.the failure. 
0170: 20 54 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 73   This document s
0180: 74 72 69 76 65 73 20 74 6f 20 65 78 70 6c 61 69  trives to explai
0190: 6e 20 77 68 61 74 20 65 61 63 68 0a 6f 66 20 74  n what each.of t
01a0: 68 6f 73 65 20 6e 75 6d 65 72 69 63 20 72 65 73  hose numeric res
01b0: 75 6c 74 20 63 6f 64 65 73 20 6d 65 61 6e 73 2e  ult codes means.
01c0: 0a 0a 3c 68 32 3e 52 65 73 75 6c 74 20 43 6f 64  ..<h2>Result Cod
01d0: 65 73 20 76 65 72 73 75 73 20 45 72 72 6f 72 20  es versus Error 
01e0: 43 6f 64 65 73 3c 2f 68 32 3e 0a 0a 3c 70 3e 0a  Codes</h2>..<p>.
01f0: 22 45 72 72 6f 72 20 63 6f 64 65 73 22 20 61 72  "Error codes" ar
0200: 65 20 61 20 73 75 62 73 65 74 20 6f 66 20 22 72  e a subset of "r
0210: 65 73 75 6c 74 20 63 6f 64 65 73 22 20 74 68 61  esult codes" tha
0220: 74 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 0a  t indicate that.
0230: 73 6f 6d 65 74 68 69 6e 67 20 68 61 73 20 67 6f  something has go
0240: 6e 65 20 77 72 6f 6e 67 2e 20 20 54 68 65 72 65  ne wrong.  There
0250: 20 61 72 65 20 6f 6e 6c 79 20 61 20 66 65 77 20   are only a few 
0260: 6e 6f 6e 2d 65 72 72 6f 72 20 72 65 73 75 6c 74  non-error result
0270: 0a 63 6f 64 65 73 3a 20 20 5b 53 51 4c 49 54 45  .codes:  [SQLITE
0280: 5f 4f 4b 5d 2c 20 5b 53 51 4c 49 54 45 5f 52 4f  _OK], [SQLITE_RO
0290: 57 5d 2c 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f  W], and [SQLITE_
02a0: 44 4f 4e 45 5d 2e 20 20 54 68 65 20 74 65 72 6d  DONE].  The term
02b0: 0a 22 65 72 72 6f 72 20 63 6f 64 65 22 20 6d 65  ."error code" me
02c0: 61 6e 73 20 61 6e 79 20 72 65 73 75 6c 74 20 63  ans any result c
02d0: 6f 64 65 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ode other than t
02e0: 68 65 73 65 20 74 68 72 65 65 2e 0a 0a 3c 74 63  hese three...<tc
02f0: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 70 76  l>hd_fragment pv
0300: 65 20 7b 70 72 69 6d 61 72 79 20 76 65 72 73 75  e {primary versu
0310: 73 20 65 78 74 65 6e 64 65 64 20 72 65 73 75 6c  s extended resul
0320: 74 20 63 6f 64 65 73 7d 20 5c 0a 20 20 20 20 20  t codes} \.     
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0340: 7b 2a 65 78 74 2d 76 2d 70 72 69 6d 7d 20 3c 2f  {*ext-v-prim} </
0350: 74 63 6c 3e 0a 3c 68 32 3e 50 72 69 6d 61 72 79  tcl>.<h2>Primary
0360: 20 52 65 73 75 6c 74 20 43 6f 64 65 73 20 76 65   Result Codes ve
0370: 72 73 75 73 20 45 78 74 65 6e 64 65 64 20 52 65  rsus Extended Re
0380: 73 75 6c 74 20 43 6f 64 65 73 3c 2f 68 32 3e 0a  sult Codes</h2>.
0390: 0a 3c 70 3e 0a 52 65 73 75 6c 74 20 63 6f 64 65  .<p>.Result code
03a0: 73 20 61 72 65 20 73 69 67 6e 65 64 20 33 32 2d  s are signed 32-
03b0: 62 69 74 20 69 6e 74 65 67 65 72 73 2e 0a 54 68  bit integers..Th
03c0: 65 20 6c 65 61 73 74 20 73 69 67 6e 69 66 69 63  e least signific
03d0: 61 6e 74 20 38 20 62 69 74 73 20 6f 66 20 74 68  ant 8 bits of th
03e0: 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20 64 65  e result code de
03f0: 66 69 6e 65 20 61 20 62 72 6f 61 64 20 63 61 74  fine a broad cat
0400: 65 67 6f 72 79 0a 61 6e 64 20 61 72 65 20 63 61  egory.and are ca
0410: 6c 6c 65 64 20 74 68 65 20 22 70 72 69 6d 61 72  lled the "primar
0420: 79 20 72 65 73 75 6c 74 20 63 6f 64 65 22 2e 20  y result code". 
0430: 20 4d 6f 72 65 20 73 69 67 6e 69 66 69 63 61 6e   More significan
0440: 74 20 62 69 74 73 20 70 72 6f 76 69 64 65 0a 6d  t bits provide.m
0450: 6f 72 65 20 64 65 74 61 69 6c 65 64 20 69 6e 66  ore detailed inf
0460: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
0470: 68 65 20 65 72 72 6f 72 20 61 6e 64 20 61 72 65  he error and are
0480: 20 63 61 6c 6c 65 64 20 74 68 65 0a 22 65 78 74   called the."ext
0490: 65 6e 64 65 64 20 72 65 73 75 6c 74 20 63 6f 64  ended result cod
04a0: 65 22 0a 0a 3c 70 3e 0a 4e 6f 74 65 20 74 68 61  e"..<p>.Note tha
04b0: 74 20 74 68 65 20 70 72 69 6d 61 72 79 20 72 65  t the primary re
04c0: 73 75 6c 74 20 63 6f 64 65 20 69 73 20 61 6c 77  sult code is alw
04d0: 61 79 73 20 61 20 70 61 72 74 20 6f 66 20 74 68  ays a part of th
04e0: 65 20 65 78 74 65 6e 64 65 64 0a 72 65 73 75 6c  e extended.resul
04f0: 74 20 63 6f 64 65 2e 20 20 47 69 76 65 6e 20 61  t code.  Given a
0500: 20 66 75 6c 6c 20 33 32 2d 62 69 74 20 65 78 74   full 32-bit ext
0510: 65 6e 64 65 64 20 72 65 73 75 6c 74 20 63 6f 64  ended result cod
0520: 65 2c 20 74 68 65 20 61 70 70 6c 69 63 61 74 69  e, the applicati
0530: 6f 6e 0a 63 61 6e 20 61 6c 77 61 79 73 20 66 69  on.can always fi
0540: 6e 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  nd the correspon
0550: 64 69 6e 67 20 70 72 69 6d 61 72 79 20 72 65 73  ding primary res
0560: 75 6c 74 20 63 6f 64 65 20 6d 65 72 65 6c 79 20  ult code merely 
0570: 62 79 20 65 78 74 72 61 63 74 69 6e 67 0a 74 68  by extracting.th
0580: 65 20 6c 65 61 73 74 20 73 69 67 6e 69 66 69 63  e least signific
0590: 61 6e 74 20 38 20 62 69 74 73 20 6f 66 20 74 68  ant 8 bits of th
05a0: 65 20 65 78 74 65 6e 64 65 64 20 72 65 73 75 6c  e extended resul
05b0: 74 20 63 6f 64 65 2e 0a 0a 3c 70 3e 0a 41 6c 6c  t code...<p>.All
05c0: 20 65 78 74 65 6e 64 65 64 20 72 65 73 75 6c 74   extended result
05d0: 20 63 6f 64 65 73 20 61 72 65 20 61 6c 73 6f 20   codes are also 
05e0: 65 72 72 6f 72 20 63 6f 64 65 73 2e 20 20 48 65  error codes.  He
05f0: 6e 63 65 20 74 68 65 20 74 65 72 6d 73 0a 22 65  nce the terms."e
0600: 78 74 65 6e 64 65 64 20 72 65 73 75 6c 74 20 63  xtended result c
0610: 6f 64 65 22 20 61 6e 64 20 22 65 78 74 65 6e 64  ode" and "extend
0620: 65 64 20 65 72 72 6f 72 20 63 6f 64 65 22 20 61  ed error code" a
0630: 72 65 20 69 6e 74 65 72 63 68 61 6e 67 65 61 62  re interchangeab
0640: 6c 65 2e 0a 0a 3c 70 3e 0a 46 6f 72 20 68 69 73  le...<p>.For his
0650: 74 6f 72 69 63 20 63 6f 6d 70 61 74 69 62 69 6c  toric compatibil
0660: 69 74 79 2c 20 74 68 65 20 43 2d 6c 61 6e 67 75  ity, the C-langu
0670: 61 67 65 20 69 6e 74 65 72 66 61 63 65 73 20 72  age interfaces r
0680: 65 74 75 72 6e 0a 70 72 69 6d 61 72 79 20 72 65  eturn.primary re
0690: 73 75 6c 74 20 63 6f 64 65 73 20 62 79 20 64 65  sult codes by de
06a0: 66 61 75 6c 74 2e 20 20 0a 54 68 65 20 65 78 74  fault.  .The ext
06b0: 65 6e 64 65 64 20 72 65 73 75 6c 74 20 63 6f 64  ended result cod
06c0: 65 20 66 6f 72 20 74 68 65 20 6d 6f 73 74 20 72  e for the most r
06d0: 65 63 65 6e 74 20 65 72 72 6f 72 20 63 61 6e 20  ecent error can 
06e0: 62 65 0a 72 65 74 72 69 65 76 65 64 20 75 73 69  be.retrieved usi
06f0: 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  ng the [sqlite3_
0700: 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65  extended_errcode
0710: 28 29 5d 20 69 6e 74 65 72 66 61 63 65 2e 0a 54  ()] interface..T
0720: 68 65 20 5b 73 71 6c 69 74 65 33 5f 65 78 74 65  he [sqlite3_exte
0730: 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65  nded_result_code
0740: 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20 63  s()] interface c
0750: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 70 75  an be used to pu
0760: 74 0a 61 20 5b 64 61 74 61 62 61 73 65 20 63 6f  t.a [database co
0770: 6e 6e 65 63 74 69 6f 6e 5d 20 69 6e 74 6f 20 61  nnection] into a
0780: 20 6d 6f 64 65 20 77 68 65 72 65 20 69 74 20 72   mode where it r
0790: 65 74 75 72 6e 73 20 74 68 65 0a 65 78 74 65 6e  eturns the.exten
07a0: 64 65 64 20 72 65 73 75 6c 74 20 63 6f 64 65 73  ded result codes
07b0: 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20   instead of the 
07c0: 70 72 69 6d 61 72 79 20 72 65 73 75 6c 74 20 63  primary result c
07d0: 6f 64 65 73 2e 0a 0a 3c 68 32 3e 44 65 66 69 6e  odes...<h2>Defin
07e0: 69 74 69 6f 6e 73 3c 2f 68 32 3e 0a 0a 3c 70 3e  itions</h2>..<p>
07f0: 0a 41 6c 6c 20 72 65 73 75 6c 74 20 63 6f 64 65  .All result code
0800: 73 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e 0a  s are integers..
0810: 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 73 20 66  Symbolic names f
0820: 6f 72 20 61 6c 6c 20 72 65 73 75 6c 74 20 63 6f  or all result co
0830: 64 65 73 20 61 72 65 20 63 72 65 61 74 65 64 20  des are created 
0840: 75 73 69 6e 67 0a 22 23 64 65 66 69 6e 65 22 20  using."#define" 
0850: 6d 61 63 72 6f 73 20 69 6e 20 74 68 65 20 73 71  macros in the sq
0860: 6c 69 74 65 33 2e 68 20 68 65 61 64 65 72 20 66  lite3.h header f
0870: 69 6c 65 2e 0a 54 68 65 72 65 20 61 72 65 20 73  ile..There are s
0880: 65 70 61 72 61 74 65 20 73 65 63 74 69 6f 6e 73  eparate sections
0890: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e   in the sqlite3.
08a0: 68 20 68 65 61 64 65 72 20 66 69 6c 65 20 66 6f  h header file fo
08b0: 72 0a 74 68 65 20 5b 72 65 73 75 6c 74 20 63 6f  r.the [result co
08c0: 64 65 20 64 65 66 69 6e 69 74 69 6f 6e 73 5d 20  de definitions] 
08d0: 61 6e 64 20 74 68 65 20 5b 65 78 74 65 6e 64 65  and the [extende
08e0: 64 20 72 65 73 75 6c 74 20 63 6f 64 65 20 64 65  d result code de
08f0: 66 69 6e 69 74 69 6f 6e 73 5d 2e 0a 0a 3c 70 3e  finitions]...<p>
0900: 0a 50 72 69 6d 61 72 79 20 72 65 73 75 6c 74 20  .Primary result 
0910: 63 6f 64 65 20 73 79 6d 62 6f 6c 69 63 20 6e 61  code symbolic na
0920: 6d 65 73 20 61 72 65 20 6f 66 20 74 68 65 20 66  mes are of the f
0930: 6f 72 6d 20 22 53 51 4c 49 54 45 5f 58 58 58 58  orm "SQLITE_XXXX
0940: 58 58 22 20 77 68 65 72 65 0a 58 58 58 58 58 58  XX" where.XXXXXX
0950: 20 69 73 20 61 20 73 65 71 75 65 6e 63 65 20 6f   is a sequence o
0960: 66 20 75 70 70 65 72 63 61 73 65 20 61 6c 70 68  f uppercase alph
0970: 61 62 65 74 69 63 20 63 68 61 72 61 63 74 65 72  abetic character
0980: 73 2e 20 20 45 78 74 65 6e 64 65 64 0a 72 65 73  s.  Extended.res
0990: 75 6c 74 20 63 6f 64 65 20 6e 61 6d 65 73 20 61  ult code names a
09a0: 72 65 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  re of the form "
09b0: 53 51 4c 49 54 45 5f 58 58 58 58 58 58 5f 59 59  SQLITE_XXXXXX_YY
09c0: 59 59 59 59 59 22 20 77 68 65 72 65 0a 74 68 65  YYYYY" where.the
09d0: 20 58 58 58 58 58 58 20 70 61 72 74 20 69 73 20   XXXXXX part is 
09e0: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
09f0: 67 20 70 72 69 6d 61 72 79 20 72 65 73 75 6c 74  g primary result
0a00: 20 63 6f 64 65 20 61 6e 64 20 74 68 65 0a 59 59   code and the.YY
0a10: 59 59 59 59 59 20 69 73 20 61 6e 20 65 78 74 65  YYYYY is an exte
0a20: 6e 73 69 6f 6e 20 74 68 61 74 20 66 75 72 74 68  nsion that furth
0a30: 65 72 20 63 6c 61 73 73 69 66 69 65 73 20 74 68  er classifies th
0a40: 65 20 72 65 73 75 6c 74 20 63 6f 64 65 2e 0a 0a  e result code...
0a50: 3c 70 3e 0a 54 68 65 20 6e 61 6d 65 73 20 61 6e  <p>.The names an
0a60: 64 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 73  d numeric values
0a70: 20 66 6f 72 20 65 78 69 73 74 69 6e 67 20 72 65   for existing re
0a80: 73 75 6c 74 20 63 6f 64 65 73 20 61 72 65 20 66  sult codes are f
0a90: 69 78 65 64 0a 61 6e 64 20 75 6e 63 68 61 6e 67  ixed.and unchang
0aa0: 69 6e 67 2e 20 20 48 6f 77 65 76 65 72 2c 20 6e  ing.  However, n
0ab0: 65 77 20 72 65 73 75 6c 74 20 63 6f 64 65 73 2c  ew result codes,
0ac0: 20 61 6e 64 20 65 73 70 65 63 69 61 6c 6c 79 20   and especially 
0ad0: 6e 65 77 20 65 78 74 65 6e 64 65 64 0a 72 65 73  new extended.res
0ae0: 75 6c 74 20 63 6f 64 65 73 2c 20 6d 69 67 68 74  ult codes, might
0af0: 20 61 70 70 65 61 72 20 69 6e 20 66 75 74 75 72   appear in futur
0b00: 65 20 72 65 6c 65 61 73 65 73 20 6f 66 20 53 51  e releases of SQ
0b10: 4c 69 74 65 2e 0a 0a 3c 74 63 6c 3e 0a 75 6e 73  Lite...<tcl>.uns
0b20: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72  et -nocomplain r
0b30: 65 73 64 65 73 63 0a 75 6e 73 65 74 20 2d 6e 6f  esdesc.unset -no
0b40: 63 6f 6d 70 6c 61 69 6e 20 72 65 73 76 61 6c 75  complain resvalu
0b50: 65 0a 70 72 6f 63 20 52 45 53 43 4f 44 45 20 7b  e.proc RESCODE {
0b60: 6e 61 6d 65 20 76 61 6c 75 65 20 64 65 73 63 7d  name value desc}
0b70: 20 7b 0a 20 20 73 65 74 20 3a 3a 72 65 73 64 65   {.  set ::resde
0b80: 73 63 28 24 6e 61 6d 65 29 20 24 64 65 73 63 0a  sc($name) $desc.
0b90: 20 20 73 65 74 20 3a 3a 72 65 73 76 61 6c 75 65    set ::resvalue
0ba0: 28 24 6e 61 6d 65 29 20 24 76 61 6c 75 65 0a 7d  ($name) $value.}
0bb0: 0a 0a 52 45 53 43 4f 44 45 20 53 51 4c 49 54 45  ..RESCODE SQLITE
0bc0: 5f 4f 4b 20 30 20 7b 0a 20 20 54 68 65 20 53 51  _OK 0 {.  The SQ
0bd0: 4c 49 54 45 5f 4f 4b 20 72 65 73 75 6c 74 20 63  LITE_OK result c
0be0: 6f 64 65 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ode means that t
0bf0: 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 77 61 73  he operation was
0c00: 20 73 75 63 63 65 73 73 66 75 6c 20 61 6e 64 0a   successful and.
0c10: 20 20 74 68 61 74 20 74 68 65 72 65 20 77 65 72    that there wer
0c20: 65 20 6e 6f 20 65 72 72 6f 72 73 2e 20 20 4d 6f  e no errors.  Mo
0c30: 73 74 20 6f 74 68 65 72 20 72 65 73 75 6c 74 20  st other result 
0c40: 63 6f 64 65 73 20 69 6e 64 69 63 61 74 65 20 61  codes indicate a
0c50: 6e 20 65 72 72 6f 72 2e 0a 7d 0a 52 45 53 43 4f  n error..}.RESCO
0c60: 44 45 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20  DE SQLITE_ERROR 
0c70: 31 20 7b 0a 20 20 54 68 65 20 53 51 4c 49 54 45  1 {.  The SQLITE
0c80: 5f 45 52 52 4f 52 20 72 65 73 75 6c 74 20 63 6f  _ERROR result co
0c90: 64 65 20 69 73 20 61 20 67 65 6e 65 72 69 63 20  de is a generic 
0ca0: 65 72 72 6f 72 20 63 6f 64 65 20 74 68 61 74 20  error code that 
0cb0: 69 73 20 75 73 65 64 20 77 68 65 6e 0a 20 20 6e  is used when.  n
0cc0: 6f 20 6f 74 68 65 72 20 6d 6f 72 65 20 73 70 65  o other more spe
0cd0: 63 69 66 69 63 20 65 72 72 6f 72 20 63 6f 64 65  cific error code
0ce0: 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a 7d   is available..}
0cf0: 0a 52 45 53 43 4f 44 45 20 53 51 4c 49 54 45 5f  .RESCODE SQLITE_
0d00: 49 4e 54 45 52 4e 41 4c 20 20 20 20 20 32 20 20  INTERNAL     2  
0d10: 7b 0a 20 20 54 68 65 20 53 51 4c 49 54 45 5f 49  {.  The SQLITE_I
0d20: 4e 54 45 52 4e 41 4c 20 72 65 73 75 6c 74 20 63  NTERNAL result c
0d30: 6f 64 65 20 69 6e 64 69 63 61 74 65 73 20 61 6e  ode indicates an
0d40: 20 69 6e 74 65 72 6e 61 6c 20 6d 61 6c 66 75 6e   internal malfun
0d50: 63 74 69 6f 6e 2e 0a 20 20 49 6e 20 61 20 77 6f  ction..  In a wo
0d60: 72 6b 69 6e 67 20 76 65 72 73 69 6f 6e 20 6f 66  rking version of
0d70: 20 53 51 4c 69 74 65 2c 20 61 6e 20 61 70 70 6c   SQLite, an appl
0d80: 69 63 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e  ication should n
0d90: 65 76 65 72 20 73 65 65 20 74 68 69 73 0a 20 20  ever see this.  
0da0: 72 65 73 75 6c 74 20 63 6f 64 65 2e 20 20 49 66  result code.  If
0db0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 65   application doe
0dc0: 73 20 65 6e 63 6f 75 6e 74 65 72 20 74 68 69 73  s encounter this
0dd0: 20 72 65 73 75 6c 74 20 63 6f 64 65 2c 20 69 74   result code, it
0de0: 20 73 68 6f 77 73 0a 20 20 74 68 61 74 20 74 68   shows.  that th
0df0: 65 72 65 20 69 73 20 61 20 62 75 67 20 69 6e 20  ere is a bug in 
0e00: 74 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 67  the database eng
0e10: 69 6e 65 2e 0a 20 20 3c 70 3e 0a 20 20 53 51 4c  ine..  <p>.  SQL
0e20: 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 63 75 72  ite does not cur
0e30: 72 65 6e 74 6c 79 20 67 65 6e 65 72 61 74 65 20  rently generate 
0e40: 74 68 69 73 20 72 65 73 75 6c 74 20 63 6f 64 65  this result code
0e50: 2e 0a 20 20 48 6f 77 65 76 65 72 2c 20 5b 61 70  ..  However, [ap
0e60: 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65  plication-define
0e70: 64 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 5d  d SQL functions]
0e80: 20 6f 72 0a 20 20 5b 76 69 72 74 75 61 6c 20 74   or.  [virtual t
0e90: 61 62 6c 65 73 5d 2c 20 6f 72 20 5b 56 46 53 65  ables], or [VFSe
0ea0: 73 5d 2c 20 6f 72 20 6f 74 68 65 72 20 65 78 74  s], or other ext
0eb0: 65 6e 73 69 6f 6e 73 20 6d 69 67 68 74 20 63 61  ensions might ca
0ec0: 75 73 65 20 74 68 69 73 20 0a 20 20 72 65 73 75  use this .  resu
0ed0: 6c 74 20 63 6f 64 65 20 74 6f 20 62 65 20 72 65  lt code to be re
0ee0: 74 75 72 6e 65 64 2e 0a 7d 0a 52 45 53 43 4f 44  turned..}.RESCOD
0ef0: 45 20 53 51 4c 49 54 45 5f 50 45 52 4d 20 20 20  E SQLITE_PERM   
0f00: 20 20 20 20 20 20 33 20 20 7b 0a 20 20 54 68 65        3  {.  The
0f10: 20 53 51 4c 49 54 45 5f 50 45 52 4d 20 72 65 73   SQLITE_PERM res
0f20: 75 6c 74 20 63 6f 64 65 20 69 6e 64 69 63 61 74  ult code indicat
0f30: 65 73 20 74 68 61 74 20 74 68 65 20 72 65 71 75  es that the requ
0f40: 65 73 74 65 64 20 61 63 63 65 73 73 20 6d 6f 64  ested access mod
0f50: 65 0a 20 20 66 6f 72 20 61 20 6e 65 77 6c 79 20  e.  for a newly 
0f60: 63 72 65 61 74 65 64 20 64 61 74 61 62 61 73 65  created database
0f70: 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 70 72   could not be pr
0f80: 6f 76 69 64 65 64 2e 0a 7d 0a 52 45 53 43 4f 44  ovided..}.RESCOD
0f90: 45 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 20 20  E SQLITE_ABORT  
0fa0: 20 20 20 20 20 20 34 20 20 7b 0a 20 20 54 68 65        4  {.  The
0fb0: 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 20 72 65   SQLITE_ABORT re
0fc0: 73 75 6c 74 20 63 6f 64 65 20 69 6e 64 69 63 61  sult code indica
0fd0: 74 65 73 20 74 68 61 74 20 61 6e 20 6f 70 65 72  tes that an oper
0fe0: 61 74 69 6f 6e 20 77 61 73 20 61 62 6f 72 74 65  ation was aborte
0ff0: 64 0a 20 20 70 72 69 6f 72 20 74 6f 20 63 6f 6d  d.  prior to com
1000: 70 6c 65 74 69 6f 6e 2c 20 75 73 75 61 6c 6c 79  pletion, usually
1010: 20 62 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20   be application 
1020: 72 65 71 75 65 73 74 2e 0a 20 20 53 65 65 20 61  request..  See a
1030: 6c 73 6f 3a 20 5b 53 51 4c 49 54 45 5f 49 4e 54  lso: [SQLITE_INT
1040: 45 52 52 55 50 54 5d 2e 0a 20 20 3c 70 3e 0a 20  ERRUPT]..  <p>. 
1050: 20 5e 49 66 20 74 68 65 20 63 61 6c 6c 62 61 63   ^If the callbac
1060: 6b 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 5b 73  k function to [s
1070: 71 6c 69 74 65 33 5f 65 78 65 63 28 29 5d 20 72  qlite3_exec()] r
1080: 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  eturns non-zero,
1090: 20 74 68 65 6e 0a 20 20 73 71 6c 69 74 65 33 5f   then.  sqlite3_
10a0: 65 78 65 63 28 29 20 77 69 6c 6c 20 72 65 74 75  exec() will retu
10b0: 72 6e 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e  rn SQLITE_ABORT.
10c0: 0a 20 20 3c 70 3e 0a 20 20 5e 49 66 20 61 20 5b  .  <p>.  ^If a [
10d0: 52 4f 4c 4c 42 41 43 4b 5d 20 6f 70 65 72 61 74  ROLLBACK] operat
10e0: 69 6f 6e 20 6f 63 63 75 72 73 20 6f 6e 20 74 68  ion occurs on th
10f0: 65 20 73 61 6d 65 20 5b 64 61 74 61 62 61 73 65  e same [database
1100: 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 61 73 0a   connection] as.
1110: 20 20 61 20 70 65 6e 64 69 6e 67 20 72 65 61 64    a pending read
1120: 20 6f 72 20 77 72 69 74 65 2c 20 74 68 65 6e 20   or write, then 
1130: 74 68 65 20 70 65 6e 64 69 6e 67 20 72 65 61 64  the pending read
1140: 20 6f 72 20 77 72 69 74 65 20 6d 61 79 20 66 61   or write may fa
1150: 69 6c 20 77 69 74 68 0a 20 20 61 6e 20 53 51 4c  il with.  an SQL
1160: 49 54 45 5f 41 42 4f 52 54 20 6f 72 20 5b 53 51  ITE_ABORT or [SQ
1170: 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42  LITE_ABORT_ROLLB
1180: 41 43 4b 5d 20 65 72 72 6f 72 2e 0a 20 20 3c 70  ACK] error..  <p
1190: 3e 0a 20 20 5e 49 6e 20 61 64 64 69 74 69 6f 6e  >.  ^In addition
11a0: 20 74 6f 20 62 65 69 6e 67 20 61 20 72 65 73 75   to being a resu
11b0: 6c 74 20 63 6f 64 65 2c 0a 20 20 74 68 65 20 53  lt code,.  the S
11c0: 51 4c 49 54 45 5f 41 42 4f 52 54 20 76 61 6c 75  QLITE_ABORT valu
11d0: 65 20 69 73 20 61 6c 73 6f 20 75 73 65 64 20 61  e is also used a
11e0: 73 20 61 20 5b 63 6f 6e 66 6c 69 63 74 20 72 65  s a [conflict re
11f0: 73 6f 6c 75 74 69 6f 6e 20 6d 6f 64 65 5d 0a 20  solution mode]. 
1200: 20 72 65 74 75 72 6e 65 64 20 66 72 6f 6d 20 74   returned from t
1210: 68 65 20 5b 73 71 6c 69 74 65 33 5f 76 74 61 62  he [sqlite3_vtab
1220: 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 5d 20  _on_conflict()] 
1230: 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 52 45 53  interface..}.RES
1240: 43 4f 44 45 20 53 51 4c 49 54 45 5f 42 55 53 59  CODE SQLITE_BUSY
1250: 20 20 20 20 20 20 20 20 20 35 20 20 7b 0a 20 20           5  {.  
1260: 54 68 65 20 53 51 4c 49 54 45 5f 42 55 53 59 20  The SQLITE_BUSY 
1270: 72 65 73 75 6c 74 20 63 6f 64 65 20 69 6e 64 69  result code indi
1280: 63 61 74 65 73 20 74 68 61 74 20 74 68 65 20 64  cates that the d
1290: 61 74 61 62 61 73 65 20 66 69 6c 65 20 63 6f 75  atabase file cou
12a0: 6c 64 20 6e 6f 74 0a 20 20 62 65 20 77 72 69 74  ld not.  be writ
12b0: 74 65 6e 20 28 6f 72 20 69 6e 20 73 6f 6d 65 20  ten (or in some 
12c0: 63 61 73 65 73 20 72 65 61 64 29 20 62 65 63 61  cases read) beca
12d0: 75 73 65 20 6f 66 20 63 6f 6e 63 75 72 72 65 6e  use of concurren
12e0: 74 20 61 63 74 69 76 69 74 79 20 62 79 20 0a 20  t activity by . 
12f0: 20 73 6f 6d 65 20 6f 74 68 65 72 20 5b 64 61 74   some other [dat
1300: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
1310: 5d 2c 20 75 73 75 61 6c 6c 79 20 61 20 64 61 74  ], usually a dat
1320: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
1330: 20 69 6e 20 61 0a 20 20 73 65 70 61 72 61 74 65   in a.  separate
1340: 20 70 72 6f 63 65 73 73 2e 0a 20 20 3c 70 3e 0a   process..  <p>.
1350: 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69    For example, i
1360: 66 20 70 72 6f 63 65 73 73 20 41 20 69 73 20 69  f process A is i
1370: 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20  n the middle of 
1380: 61 20 6c 61 72 67 65 20 77 72 69 74 65 20 74 72  a large write tr
1390: 61 6e 73 61 63 74 69 6f 6e 0a 20 20 61 6e 64 20  ansaction.  and 
13a0: 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65  at the same time
13b0: 20 70 72 6f 63 65 73 73 20 42 20 61 74 74 65 6d   process B attem
13c0: 70 74 73 20 74 6f 20 73 74 61 72 74 20 61 20 6e  pts to start a n
13d0: 65 77 20 77 72 69 74 65 20 74 72 61 6e 73 61 63  ew write transac
13e0: 74 69 6f 6e 2c 0a 20 20 70 72 6f 63 65 73 73 20  tion,.  process 
13f0: 42 20 77 69 6c 6c 20 67 65 74 20 62 61 63 6b 20  B will get back 
1400: 61 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 20 72  an SQLITE_BUSY r
1410: 65 73 75 6c 74 20 62 65 63 61 75 73 65 20 53 51  esult because SQ
1420: 4c 69 74 65 20 6f 6e 6c 79 20 73 75 70 70 6f 72  Lite only suppor
1430: 74 73 0a 20 20 6f 6e 65 20 77 72 69 74 65 72 20  ts.  one writer 
1440: 61 74 20 61 20 74 69 6d 65 2e 20 20 50 72 6f 63  at a time.  Proc
1450: 65 73 73 20 42 20 77 69 6c 6c 20 6e 65 65 64 20  ess B will need 
1460: 74 6f 20 77 61 69 74 20 66 6f 72 20 70 72 6f 63  to wait for proc
1470: 65 73 73 20 41 20 74 6f 20 66 69 6e 69 73 68 0a  ess A to finish.
1480: 20 20 69 74 73 20 74 72 61 6e 73 61 63 74 69 6f    its transactio
1490: 6e 20 62 65 66 6f 72 65 20 73 74 61 72 74 69 6e  n before startin
14a0: 67 20 61 20 6e 65 77 20 74 72 61 6e 73 61 63 74  g a new transact
14b0: 69 6f 6e 2e 20 20 54 68 65 0a 20 20 5b 73 71 6c  ion.  The.  [sql
14c0: 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75  ite3_busy_timeou
14d0: 74 28 29 5d 20 61 6e 64 20 5b 73 71 6c 69 74 65  t()] and [sqlite
14e0: 33 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 29  3_busy_handler()
14f0: 5d 20 69 6e 74 65 72 66 61 63 65 73 20 61 6e 64  ] interfaces and
1500: 0a 20 20 74 68 65 20 5b 62 75 73 79 5f 74 69 6d  .  the [busy_tim
1510: 65 6f 75 74 20 70 72 61 67 6d 61 5d 20 61 72 65  eout pragma] are
1520: 20 61 76 61 69 6c 61 62 6c 65 20 74 6f 20 70 72   available to pr
1530: 6f 63 65 73 73 20 42 20 74 6f 20 68 65 6c 70 20  ocess B to help 
1540: 69 74 20 64 65 61 6c 0a 20 20 77 69 74 68 20 53  it deal.  with S
1550: 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72  QLITE_BUSY error
1560: 73 2e 0a 20 20 3c 70 3e 0a 20 20 41 6e 20 53 51  s..  <p>.  An SQ
1570: 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72 20  LITE_BUSY error 
1580: 63 61 6e 20 6f 63 63 75 72 20 61 74 20 61 6e 79  can occur at any
1590: 20 70 6f 69 6e 74 20 69 6e 20 61 20 74 72 61 6e   point in a tran
15a0: 73 61 63 74 69 6f 6e 3a 20 77 68 65 6e 20 74 68  saction: when th
15b0: 65 0a 20 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  e.  transaction 
15c0: 69 73 20 66 69 72 73 74 20 73 74 61 72 74 65 64  is first started
15d0: 2c 20 64 75 72 69 6e 67 20 61 6e 79 20 77 72 69  , during any wri
15e0: 74 65 20 6f 72 20 75 70 64 61 74 65 20 6f 70 65  te or update ope
15f0: 72 61 74 69 6f 6e 73 2c 20 6f 72 0a 20 20 77 68  rations, or.  wh
1600: 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  en the transacti
1610: 6f 6e 20 63 6f 6d 6d 69 74 73 2e 0a 20 20 54 6f  on commits..  To
1620: 20 61 76 6f 69 64 20 65 6e 63 6f 75 6e 74 65 72   avoid encounter
1630: 69 6e 67 20 53 51 4c 49 54 45 5f 42 55 53 59 20  ing SQLITE_BUSY 
1640: 65 72 72 6f 72 73 20 69 6e 20 74 68 65 20 6d 69  errors in the mi
1650: 64 64 6c 65 20 6f 66 20 61 20 74 72 61 6e 73 61  ddle of a transa
1660: 63 74 69 6f 6e 2c 0a 20 20 74 68 65 20 61 70 70  ction,.  the app
1670: 6c 69 63 61 74 69 6f 6e 20 63 61 6e 20 75 73 65  lication can use
1680: 20 5b 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54   [BEGIN IMMEDIAT
1690: 45 5d 20 69 6e 73 74 65 61 64 20 6f 66 20 6a 75  E] instead of ju
16a0: 73 74 20 5b 42 45 47 49 4e 5d 20 74 6f 0a 20 20  st [BEGIN] to.  
16b0: 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74  start a transact
16c0: 69 6f 6e 2e 20 20 54 68 65 20 5b 42 45 47 49 4e  ion.  The [BEGIN
16d0: 20 49 4d 4d 45 44 49 41 54 45 5d 20 63 6f 6d 6d   IMMEDIATE] comm
16e0: 61 6e 64 20 6d 69 67 68 74 20 69 74 73 65 6c 66  and might itself
16f0: 20 72 65 74 75 72 6e 0a 20 20 53 51 4c 49 54 45   return.  SQLITE
1700: 5f 42 55 53 59 2c 20 62 75 74 20 69 66 20 69 74  _BUSY, but if it
1710: 20 73 75 63 63 65 65 64 73 2c 20 74 68 65 6e 20   succeeds, then 
1720: 53 51 4c 69 74 65 20 67 75 61 72 61 6e 74 65 65  SQLite guarantee
1730: 73 20 74 68 61 74 20 6e 6f 20 0a 20 20 73 75 62  s that no .  sub
1740: 73 65 71 75 65 6e 74 20 6f 70 65 72 61 74 69 6f  sequent operatio
1750: 6e 73 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 64  ns on the same d
1760: 61 74 61 62 61 73 65 20 74 68 72 6f 75 67 68 20  atabase through 
1770: 74 68 65 20 6e 65 78 74 20 5b 43 4f 4d 4d 49 54  the next [COMMIT
1780: 5d 20 0a 20 20 77 69 6c 6c 20 72 65 74 75 72 6e  ] .  will return
1790: 20 53 51 4c 49 54 45 5f 42 55 53 59 2e 0a 20 20   SQLITE_BUSY..  
17a0: 3c 70 3e 0a 20 20 53 65 65 20 61 6c 73 6f 3a 20  <p>.  See also: 
17b0: 20 5b 53 51 4c 49 54 45 5f 42 55 53 59 5f 52 45   [SQLITE_BUSY_RE
17c0: 43 4f 56 45 52 59 5d 20 61 6e 64 20 5b 53 51 4c  COVERY] and [SQL
17d0: 49 54 45 5f 42 55 53 59 5f 53 4e 41 50 53 48 4f  ITE_BUSY_SNAPSHO
17e0: 54 5d 2e 0a 20 20 3c 70 3e 0a 20 20 54 68 65 20  T]..  <p>.  The 
17f0: 53 51 4c 49 54 45 5f 42 55 53 59 20 72 65 73 75  SQLITE_BUSY resu
1800: 6c 74 20 63 6f 64 65 20 64 69 66 66 65 72 73 20  lt code differs 
1810: 66 72 6f 6d 20 5b 53 51 4c 49 54 45 5f 4c 4f 43  from [SQLITE_LOC
1820: 4b 45 44 5d 20 69 6e 20 74 68 61 74 0a 20 20 53  KED] in that.  S
1830: 51 4c 49 54 45 5f 42 55 53 59 20 69 6e 64 69 63  QLITE_BUSY indic
1840: 61 74 65 73 20 61 20 63 6f 6e 66 6c 69 63 74 20  ates a conflict 
1850: 77 69 74 68 20 61 0a 20 20 73 65 70 61 72 61 74  with a.  separat
1860: 65 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  e [database conn
1870: 65 63 74 69 6f 6e 5d 2c 20 70 72 6f 62 61 62 6c  ection], probabl
1880: 79 20 69 6e 20 61 20 73 65 70 61 72 61 74 65 20  y in a separate 
1890: 70 72 6f 63 65 73 73 2c 0a 20 20 77 68 65 72 65  process,.  where
18a0: 61 73 20 5b 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  as [SQLITE_LOCKE
18b0: 44 5d 20 0a 20 20 69 6e 64 69 63 61 74 65 73 20  D] .  indicates 
18c0: 61 20 63 6f 6e 66 6c 69 63 74 20 77 69 74 68 69  a conflict withi
18d0: 6e 20 74 68 65 20 73 61 6d 65 20 5b 64 61 74 61  n the same [data
18e0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d  base connection]
18f0: 20 28 6f 72 20 73 6f 6d 65 74 69 6d 65 73 0a 20   (or sometimes. 
1900: 20 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e   a database conn
1910: 65 63 74 69 6f 6e 20 77 69 74 68 20 61 20 5b 73  ection with a [s
1920: 68 61 72 65 64 20 63 61 63 68 65 5d 29 2e 0a 7d  hared cache])..}
1930: 0a 52 45 53 43 4f 44 45 20 53 51 4c 49 54 45 5f  .RESCODE SQLITE_
1940: 4c 4f 43 4b 45 44 20 20 20 20 20 20 20 36 20 20  LOCKED       6  
1950: 7b 0a 20 20 54 68 65 20 53 51 4c 49 54 45 5f 4c  {.  The SQLITE_L
1960: 4f 43 4b 45 44 20 72 65 73 75 6c 74 20 63 6f 64  OCKED result cod
1970: 65 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74  e indicates that
1980: 20 61 20 77 72 69 74 65 20 6f 70 65 72 61 74 69   a write operati
1990: 6f 6e 20 63 6f 75 6c 64 20 6e 6f 74 0a 20 20 63  on could not.  c
19a0: 6f 6e 74 69 6e 75 65 20 62 65 63 61 75 73 65 20  ontinue because 
19b0: 6f 66 20 61 20 63 6f 6e 66 6c 69 63 74 20 77 69  of a conflict wi
19c0: 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 5b 64  thin the same [d
19d0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
19e0: 6f 6e 5d 20 6f 72 0a 20 20 61 20 63 6f 6e 66 6c  on] or.  a confl
19f0: 69 63 74 20 77 69 74 68 20 61 20 64 69 66 66 65  ict with a diffe
1a00: 72 65 6e 74 20 64 61 74 61 62 61 73 65 20 63 6f  rent database co
1a10: 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 75 73  nnection that us
1a20: 65 73 20 61 20 5b 73 68 61 72 65 64 20 63 61 63  es a [shared cac
1a30: 68 65 5d 2e 0a 20 20 3c 70 3e 0a 20 20 46 6f 72  he]..  <p>.  For
1a40: 20 65 78 61 6d 70 6c 65 2c 20 61 20 5b 44 52 4f   example, a [DRO
1a50: 50 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65  P TABLE] stateme
1a60: 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 72 75 6e  nt cannot be run
1a70: 20 77 68 69 6c 65 20 61 6e 6f 74 68 65 72 20 74   while another t
1a80: 68 72 65 61 64 0a 20 20 69 73 20 72 65 61 64 69  hread.  is readi
1a90: 6e 67 20 66 72 6f 6d 20 74 68 61 74 20 74 61 62  ng from that tab
1aa0: 6c 65 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 5b  le on the same [
1ab0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
1ac0: 69 6f 6e 5d 20 62 65 63 61 75 73 65 20 0a 20 20  ion] because .  
1ad0: 64 72 6f 70 70 69 6e 67 20 74 68 65 20 74 61 62  dropping the tab
1ae0: 6c 65 20 77 6f 75 6c 64 20 64 65 6c 65 74 65 20  le would delete 
1af0: 74 68 65 20 74 61 62 6c 65 20 6f 75 74 20 66 72  the table out fr
1b00: 6f 6d 20 75 6e 64 65 72 20 74 68 65 20 63 6f 6e  om under the con
1b10: 63 75 72 72 65 6e 74 0a 20 20 72 65 61 64 65 72  current.  reader
1b20: 2e 0a 20 20 3c 70 3e 0a 20 20 54 68 65 20 53 51  ..  <p>.  The SQ
1b30: 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 72 65 73 75  LITE_LOCKED resu
1b40: 6c 74 20 63 6f 64 65 20 64 69 66 66 65 72 73 20  lt code differs 
1b50: 66 72 6f 6d 20 5b 53 51 4c 49 54 45 5f 42 55 53  from [SQLITE_BUS
1b60: 59 5d 20 69 6e 20 74 68 61 74 0a 20 20 53 51 4c  Y] in that.  SQL
1b70: 49 54 45 5f 4c 4f 43 4b 45 44 20 69 6e 64 69 63  ITE_LOCKED indic
1b80: 61 74 65 73 20 61 20 63 6f 6e 66 6c 69 63 74 20  ates a conflict 
1b90: 6f 6e 20 74 68 65 20 73 61 6d 65 20 5b 64 61 74  on the same [dat
1ba0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
1bb0: 5d 0a 20 20 28 6f 72 20 6f 6e 20 61 20 63 6f 6e  ].  (or on a con
1bc0: 6e 65 63 74 69 6f 6e 20 77 69 74 68 20 61 20 5b  nection with a [
1bd0: 73 68 61 72 65 64 20 63 61 63 68 65 5d 29 20 77  shared cache]) w
1be0: 68 65 72 65 61 73 20 5b 53 51 4c 49 54 45 5f 42  hereas [SQLITE_B
1bf0: 55 53 59 5d 20 69 6e 64 69 63 61 74 65 73 0a 20  USY] indicates. 
1c00: 20 61 20 63 6f 6e 66 6c 69 63 74 20 77 69 74 68   a conflict with
1c10: 20 61 20 64 69 66 66 65 72 65 6e 74 20 64 61 74   a different dat
1c20: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
1c30: 2c 20 70 72 6f 62 61 62 6c 79 20 69 6e 20 61 20  , probably in a 
1c40: 64 69 66 66 65 72 65 6e 74 0a 20 20 70 72 6f 63  different.  proc
1c50: 65 73 73 2e 0a 7d 0a 52 45 53 43 4f 44 45 20 53  ess..}.RESCODE S
1c60: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 20 20 20 20  QLITE_NOMEM     
1c70: 20 20 20 37 20 20 20 7b 0a 20 20 54 68 65 20 53     7   {.  The S
1c80: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 72 65 73 75  QLITE_NOMEM resu
1c90: 6c 74 20 63 6f 64 65 20 69 6e 64 69 63 61 74 65  lt code indicate
1ca0: 73 20 74 68 61 74 20 53 51 4c 69 74 65 20 77 61  s that SQLite wa
1cb0: 73 20 75 6e 61 62 6c 65 20 74 6f 20 61 6c 6c 6f  s unable to allo
1cc0: 63 61 74 65 0a 20 20 61 6c 6c 20 74 68 65 20 6d  cate.  all the m
1cd0: 65 6d 6f 72 79 20 69 74 20 6e 65 65 64 65 64 20  emory it needed 
1ce0: 74 6f 20 63 6f 6d 70 6c 65 74 65 20 74 68 65 20  to complete the 
1cf0: 6f 70 65 72 61 74 69 6f 6e 2e 20 20 49 6e 20 6f  operation.  In o
1d00: 74 68 65 72 20 77 6f 72 64 73 2c 20 61 6e 0a 20  ther words, an. 
1d10: 20 69 6e 74 65 72 6e 61 6c 20 63 61 6c 6c 20 74   internal call t
1d20: 6f 20 5b 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  o [sqlite3_mallo
1d30: 63 28 29 5d 20 6f 72 20 5b 73 71 6c 69 74 65 33  c()] or [sqlite3
1d40: 5f 72 65 61 6c 6c 6f 63 28 29 5d 20 68 61 73 20  _realloc()] has 
1d50: 66 61 69 6c 65 64 20 69 6e 0a 20 20 61 20 63 61  failed in.  a ca
1d60: 73 65 20 77 68 65 72 65 20 74 68 65 20 6d 65 6d  se where the mem
1d70: 6f 72 79 20 62 65 69 6e 67 20 61 6c 6c 6f 63 61  ory being alloca
1d80: 74 65 64 20 77 61 73 20 72 65 71 75 69 72 65 64  ted was required
1d90: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f 6e   in order to con
1da0: 74 69 6e 75 65 0a 20 20 74 68 65 20 6f 70 65 72  tinue.  the oper
1db0: 61 74 69 6f 6e 2e 0a 7d 0a 52 45 53 43 4f 44 45  ation..}.RESCODE
1dc0: 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59   SQLITE_READONLY
1dd0: 20 20 20 20 20 38 20 20 20 7b 0a 20 20 54 68 65       8   {.  The
1de0: 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59   SQLITE_READONLY
1df0: 20 72 65 73 75 6c 74 20 63 6f 64 65 20 69 73 20   result code is 
1e00: 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20 61 6e  returned when an
1e10: 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65   attempt is made
1e20: 20 74 6f 20 0a 20 20 61 6c 74 65 72 20 73 6f 6d   to .  alter som
1e30: 65 20 64 61 74 61 20 66 6f 72 20 77 68 69 63 68  e data for which
1e40: 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 61 74   the current dat
1e50: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
1e60: 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 0a 20   does not have. 
1e70: 20 77 72 69 74 65 20 70 65 72 6d 69 73 73 69 6f   write permissio
1e80: 6e 2e 0a 7d 0a 52 45 53 43 4f 44 45 20 53 51 4c  n..}.RESCODE SQL
1e90: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 20 20 20  ITE_INTERRUPT   
1ea0: 20 39 20 20 20 7b 0a 20 20 54 68 65 20 53 51 4c   9   {.  The SQL
1eb0: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 20 72 65  ITE_INTERRUPT re
1ec0: 73 75 6c 74 20 63 6f 64 65 20 69 6e 64 69 63 61  sult code indica
1ed0: 74 65 73 20 74 68 61 74 20 61 6e 20 6f 70 65 72  tes that an oper
1ee0: 61 74 69 6f 6e 20 77 61 73 0a 20 20 69 6e 74 65  ation was.  inte
1ef0: 72 72 75 70 74 65 64 20 62 79 20 74 68 65 20 5b  rrupted by the [
1f00: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
1f10: 74 28 29 5d 20 69 6e 74 65 72 66 61 63 65 2e 0a  t()] interface..
1f20: 20 20 53 65 65 20 61 6c 73 6f 3a 20 5b 53 51 4c    See also: [SQL
1f30: 49 54 45 5f 41 42 4f 52 54 5d 0a 7d 0a 52 45 53  ITE_ABORT].}.RES
1f40: 43 4f 44 45 20 53 51 4c 49 54 45 5f 49 4f 45 52  CODE SQLITE_IOER
1f50: 52 20 20 20 20 20 20 20 31 30 20 20 20 7b 0a 20  R       10   {. 
1f60: 20 54 68 65 20 53 51 4c 49 54 45 5f 49 4f 45 52   The SQLITE_IOER
1f70: 52 20 72 65 73 75 6c 74 20 63 6f 64 65 20 73 61  R result code sa
1f80: 79 73 20 74 68 61 74 20 74 68 65 20 6f 70 65 72  ys that the oper
1f90: 61 74 69 6f 6e 20 63 6f 75 6c 64 20 6e 6f 74 20  ation could not 
1fa0: 66 69 6e 69 73 68 0a 20 20 62 65 63 61 75 73 65  finish.  because
1fb0: 20 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73   the operating s
1fc0: 79 73 74 65 6d 20 72 65 70 6f 72 74 65 64 20 61  ystem reported a
1fd0: 6e 20 49 2f 4f 20 65 72 72 6f 72 2e 0a 20 20 3c  n I/O error..  <
1fe0: 70 3e 0a 20 20 41 20 66 75 6c 6c 20 64 69 73 6b  p>.  A full disk
1ff0: 20 64 72 69 76 65 20 77 69 6c 6c 20 6e 6f 72 6d   drive will norm
2000: 61 6c 6c 79 20 67 69 76 65 20 61 6e 20 5b 53 51  ally give an [SQ
2010: 4c 49 54 45 5f 46 55 4c 4c 5d 20 65 72 72 6f 72  LITE_FULL] error
2020: 20 72 61 74 68 65 72 20 74 68 61 6e 0a 20 20 61   rather than.  a
2030: 6e 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 20 65  n SQLITE_IOERR e
2040: 72 72 6f 72 2e 0a 20 20 3c 70 3e 0a 20 20 54 68  rror..  <p>.  Th
2050: 65 72 65 20 61 72 65 20 6d 61 6e 79 20 64 69 66  ere are many dif
2060: 66 65 72 65 6e 74 20 65 78 74 65 6e 64 65 64 20  ferent extended 
2070: 72 65 73 75 6c 74 20 63 6f 64 65 73 20 66 6f 72  result codes for
2080: 20 49 2f 4f 20 65 72 72 6f 72 73 20 74 68 61 74   I/O errors that
2090: 0a 20 20 69 64 65 6e 74 69 66 79 20 74 68 65 20  .  identify the 
20a0: 73 70 65 63 69 66 69 63 20 49 2f 4f 20 6f 70 65  specific I/O ope
20b0: 72 61 74 69 6f 6e 20 74 68 61 74 20 66 61 69 6c  ration that fail
20c0: 65 64 2e 0a 7d 0a 52 45 53 43 4f 44 45 20 53 51  ed..}.RESCODE SQ
20d0: 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 20 20 20  LITE_CORRUPT    
20e0: 20 31 31 20 20 20 7b 0a 20 20 54 68 65 20 53 51   11   {.  The SQ
20f0: 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 72 65 73  LITE_CORRUPT res
2100: 75 6c 74 20 63 6f 64 65 20 69 6e 64 69 63 61 74  ult code indicat
2110: 65 73 20 74 68 61 74 20 74 68 65 20 64 61 74 61  es that the data
2120: 62 61 73 65 20 66 69 6c 65 20 68 61 73 0a 20 20  base file has.  
2130: 62 65 65 6e 20 63 6f 72 72 75 70 74 65 64 2e 20  been corrupted. 
2140: 20 53 65 65 20 74 68 65 20 5b 48 6f 77 20 54 6f   See the [How To
2150: 20 43 6f 72 72 75 70 74 20 59 6f 75 72 20 44 61   Corrupt Your Da
2160: 74 61 62 61 73 65 20 46 69 6c 65 73 5d 20 66 6f  tabase Files] fo
2170: 72 0a 20 20 66 75 72 74 68 65 72 20 64 69 73 63  r.  further disc
2180: 75 73 73 69 6f 6e 20 6f 6e 20 68 6f 77 20 63 6f  ussion on how co
2190: 72 72 75 70 74 69 6f 6e 20 63 61 6e 20 6f 63 63  rruption can occ
21a0: 75 72 2e 0a 7d 0a 52 45 53 43 4f 44 45 20 53 51  ur..}.RESCODE SQ
21b0: 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 20 20  LITE_NOTFOUND   
21c0: 20 31 32 20 20 20 7b 0a 20 20 54 68 65 20 53 51   12   {.  The SQ
21d0: 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 72 65  LITE_NOTFOUND re
21e0: 73 75 6c 74 20 63 6f 64 65 20 69 73 20 75 73 65  sult code is use
21f0: 64 20 69 6e 20 74 77 6f 20 63 6f 6e 74 65 78 74  d in two context
2200: 73 2e 0a 20 20 53 51 4c 49 54 45 5f 4e 4f 54 46  s..  SQLITE_NOTF
2210: 4f 55 4e 44 20 63 61 6e 20 62 65 20 72 65 74 75  OUND can be retu
2220: 72 6e 65 64 20 62 79 20 74 68 65 20 5b 73 71 6c  rned by the [sql
2230: 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
2240: 6c 28 29 5d 20 69 6e 74 65 72 66 61 63 65 0a 20  l()] interface. 
2250: 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61   to indicate tha
2260: 74 20 74 68 65 20 5b 66 69 6c 65 20 63 6f 6e 74  t the [file cont
2270: 72 6f 6c 20 6f 70 63 6f 64 65 5d 20 70 61 73 73  rol opcode] pass
2280: 65 64 20 61 73 20 74 68 65 20 74 68 69 72 64 20  ed as the third 
2290: 61 72 67 75 6d 65 6e 74 0a 20 20 77 61 73 20 6e  argument.  was n
22a0: 6f 74 20 72 65 63 6f 67 6e 69 7a 65 64 20 62 79  ot recognized by
22b0: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
22c0: 5b 56 46 53 5d 2e 0a 20 20 53 51 4c 49 54 45 5f  [VFS]..  SQLITE_
22d0: 4e 4f 54 46 4f 55 4e 44 20 63 61 6e 20 61 6c 73  NOTFOUND can als
22e0: 6f 20 62 65 20 72 65 74 75 72 6e 65 64 20 62 79  o be returned by
22f0: 20 74 68 65 20 78 53 65 74 53 79 73 74 65 6d 43   the xSetSystemC
2300: 61 6c 6c 28 29 20 6d 65 74 68 6f 64 20 6f 66 0a  all() method of.
2310: 20 20 61 6e 20 5b 73 71 6c 69 74 65 33 5f 76 66    an [sqlite3_vf
2320: 73 5d 20 6f 62 6a 65 63 74 2e 0a 20 20 3c 70 3e  s] object..  <p>
2330: 0a 20 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f  .  The SQLITE_NO
2340: 54 46 4f 55 4e 44 20 72 65 73 75 6c 74 20 63 6f  TFOUND result co
2350: 64 65 20 69 73 20 61 6c 73 6f 20 75 73 65 64 0a  de is also used.
2360: 20 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20    internally by 
2370: 74 68 65 20 53 51 4c 69 74 65 20 69 6d 70 6c 65  the SQLite imple
2380: 6d 65 6e 74 61 74 69 6f 6e 2c 20 62 75 74 20 74  mentation, but t
2390: 68 6f 73 65 20 69 6e 74 65 72 6e 61 6c 20 75 73  hose internal us
23a0: 65 73 20 61 72 65 0a 20 20 6e 6f 74 20 65 78 70  es are.  not exp
23b0: 6f 73 65 64 20 74 6f 20 74 68 65 20 61 70 70 6c  osed to the appl
23c0: 69 63 61 74 69 6f 6e 2e 0a 7d 0a 52 45 53 43 4f  ication..}.RESCO
23d0: 44 45 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 20  DE SQLITE_FULL  
23e0: 20 20 20 20 20 20 31 33 20 20 20 7b 0a 20 20 54        13   {.  T
23f0: 68 65 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 72  he SQLITE_FULL r
2400: 65 73 75 6c 74 20 63 6f 64 65 20 69 6e 64 69 63  esult code indic
2410: 61 74 65 73 20 74 68 61 74 20 61 20 77 72 69 74  ates that a writ
2420: 65 20 63 6f 75 6c 64 20 6e 6f 74 20 63 6f 6d 70  e could not comp
2430: 6c 65 74 65 0a 20 20 62 65 63 61 75 73 65 20 74  lete.  because t
2440: 68 65 20 64 69 73 6b 20 69 73 20 66 75 6c 6c 2e  he disk is full.
2450: 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 69 73    Note that this
2460: 20 65 72 72 6f 72 20 63 61 6e 20 6f 63 63 75 72   error can occur
2470: 20 77 68 65 6e 20 74 72 79 69 6e 67 0a 20 20 74   when trying.  t
2480: 6f 20 77 72 69 74 65 20 69 6e 66 6f 72 6d 61 74  o write informat
2490: 69 6f 6e 20 69 6e 74 6f 20 74 68 65 20 6d 61 69  ion into the mai
24a0: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c  n database file,
24b0: 20 6f 72 20 69 74 20 63 61 6e 20 61 6c 73 6f 0a   or it can also.
24c0: 20 20 6f 63 63 75 72 20 77 68 65 6e 20 77 72 69    occur when wri
24d0: 74 69 6e 67 20 69 6e 74 6f 20 5b 74 65 6d 70 6f  ting into [tempo
24e0: 72 61 72 79 20 64 69 73 6b 20 66 69 6c 65 73 5d  rary disk files]
24f0: 2e 0a 20 20 3c 70 3e 0a 20 20 53 6f 6d 65 74 69  ..  <p>.  Someti
2500: 6d 65 73 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  mes applications
2510: 20 65 6e 63 6f 75 6e 74 65 72 20 74 68 69 73 20   encounter this 
2520: 65 72 72 6f 72 20 65 76 65 6e 20 74 68 6f 75 67  error even thoug
2530: 68 20 74 68 65 72 65 20 69 73 20 61 6e 0a 20 20  h there is an.  
2540: 61 62 75 6e 64 61 6e 63 65 20 6f 66 20 70 72 69  abundance of pri
2550: 6d 61 72 79 20 64 69 73 6b 20 73 70 61 63 65 20  mary disk space 
2560: 62 65 63 61 75 73 65 20 74 68 65 20 65 72 72 6f  because the erro
2570: 72 20 6f 63 63 75 72 73 20 77 68 65 6e 20 77 72  r occurs when wr
2580: 69 74 69 6e 67 0a 20 20 69 6e 74 6f 20 5b 74 65  iting.  into [te
2590: 6d 70 6f 72 61 72 79 20 64 69 73 6b 20 66 69 6c  mporary disk fil
25a0: 65 73 5d 20 6f 6e 20 61 20 73 79 73 74 65 6d 20  es] on a system 
25b0: 77 68 65 72 65 20 74 65 6d 70 6f 72 61 72 79 20  where temporary 
25c0: 66 69 6c 65 73 20 61 72 65 20 73 74 6f 72 65 64  files are stored
25d0: 0a 20 20 6f 6e 20 61 20 73 65 70 61 72 61 74 65  .  on a separate
25e0: 20 70 61 72 74 69 74 69 6f 6e 20 77 69 74 68 20   partition with 
25f0: 6d 75 63 68 20 6c 65 73 73 20 73 70 61 63 65 20  much less space 
2600: 74 68 61 74 20 74 68 65 20 70 72 69 6d 61 72 79  that the primary
2610: 20 64 69 73 6b 2e 0a 7d 0a 52 45 53 43 4f 44 45   disk..}.RESCODE
2620: 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e   SQLITE_CANTOPEN
2630: 20 20 20 20 31 34 20 20 20 7b 0a 20 20 54 68 65      14   {.  The
2640: 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e   SQLITE_CANTOPEN
2650: 20 72 65 73 75 6c 74 20 63 6f 64 65 20 69 6e 64   result code ind
2660: 69 63 61 74 65 73 20 74 68 61 74 20 53 51 4c 69  icates that SQLi
2670: 74 65 20 77 61 73 20 75 6e 61 62 6c 65 20 74 6f  te was unable to
2680: 0a 20 20 6f 70 65 6e 20 61 20 66 69 6c 65 2e 20  .  open a file. 
2690: 20 54 68 65 20 66 69 6c 65 20 69 6e 20 71 75 65   The file in que
26a0: 73 74 69 6f 6e 20 6d 69 67 68 74 20 62 65 20 61  stion might be a
26b0: 20 70 72 69 6d 61 72 79 20 64 61 74 61 62 61 73   primary databas
26c0: 65 20 66 69 6c 65 0a 20 20 6f 72 20 6f 6e 20 6f  e file.  or on o
26d0: 66 20 73 65 76 65 72 61 6c 20 5b 74 65 6d 70 6f  f several [tempo
26e0: 72 61 72 79 20 64 69 73 6b 20 66 69 6c 65 73 5d  rary disk files]
26f0: 2e 0a 7d 0a 52 45 53 43 4f 44 45 20 53 51 4c 49  ..}.RESCODE SQLI
2700: 54 45 5f 50 52 4f 54 4f 43 4f 4c 20 20 20 20 31  TE_PROTOCOL    1
2710: 35 20 20 20 7b 0a 20 20 54 68 65 20 53 51 4c 49  5   {.  The SQLI
2720: 54 45 5f 50 52 4f 54 4f 43 4f 4c 20 72 65 73 75  TE_PROTOCOL resu
2730: 6c 74 20 63 6f 64 65 20 69 6e 64 69 63 61 74 65  lt code indicate
2740: 73 20 61 20 70 72 6f 62 6c 65 6d 20 77 69 74 68  s a problem with
2750: 20 74 68 65 20 66 69 6c 65 20 6c 6f 63 6b 69 6e   the file lockin
2760: 67 0a 20 20 70 72 6f 74 6f 63 6f 6c 20 75 73 65  g.  protocol use
2770: 64 20 62 79 20 53 51 4c 69 74 65 2e 20 20 54 68  d by SQLite.  Th
2780: 65 20 53 51 4c 49 54 45 5f 50 52 4f 54 4f 43 4f  e SQLITE_PROTOCO
2790: 4c 20 65 72 72 6f 72 20 69 73 20 63 75 72 72 65  L error is curre
27a0: 6e 74 6c 79 20 6f 6e 6c 79 0a 20 20 72 65 74 75  ntly only.  retu
27b0: 72 6e 65 64 20 77 68 65 6e 20 75 73 69 6e 67 20  rned when using 
27c0: 5b 57 41 4c 20 6d 6f 64 65 5d 20 61 6e 64 20 61  [WAL mode] and a
27d0: 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 73 74 61  ttempting to sta
27e0: 72 74 20 61 20 6e 65 77 20 74 72 61 6e 73 61 63  rt a new transac
27f0: 74 69 6f 6e 2e 0a 20 20 54 68 65 72 65 20 69 73  tion..  There is
2800: 20 61 20 72 61 63 65 20 63 6f 6e 64 69 74 69 6f   a race conditio
2810: 6e 20 74 68 61 74 20 63 61 6e 20 6f 63 63 75 72  n that can occur
2820: 20 77 68 65 6e 20 74 77 6f 20 73 65 70 61 72 61   when two separa
2830: 74 65 20 0a 20 20 5b 64 61 74 61 62 61 73 65 20  te .  [database 
2840: 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d 20 62 6f 74  connections] bot
2850: 68 20 74 72 79 20 74 6f 20 73 74 61 72 74 20 61  h try to start a
2860: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 74 20   transaction at 
2870: 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 20 20  the same time.  
2880: 69 6e 20 5b 57 41 4c 20 6d 6f 64 65 5d 2e 20 20  in [WAL mode].  
2890: 54 68 65 20 6c 6f 73 65 72 20 6f 66 20 74 68 65  The loser of the
28a0: 20 72 61 63 65 20 62 61 63 6b 73 20 6f 66 66 20   race backs off 
28b0: 61 6e 64 20 74 72 69 65 73 20 61 67 61 69 6e 2c  and tries again,
28c0: 20 61 66 74 65 72 0a 20 20 61 20 62 72 69 65 66   after.  a brief
28d0: 20 64 65 6c 61 79 2e 20 20 49 66 20 74 68 65 20   delay.  If the 
28e0: 73 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  same connection 
28f0: 6c 6f 73 65 73 20 74 68 65 20 6c 6f 63 6b 69 6e  loses the lockin
2900: 67 20 72 61 63 65 20 64 6f 7a 65 6e 73 0a 20 20  g race dozens.  
2910: 6f 66 20 74 69 6d 65 73 20 6f 76 65 72 20 61 20  of times over a 
2920: 73 70 61 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65  span of multiple
2930: 20 73 65 63 6f 6e 64 73 2c 20 69 74 20 77 69 6c   seconds, it wil
2940: 6c 20 65 76 65 6e 74 75 61 6c 6c 79 20 67 69 76  l eventually giv
2950: 65 20 75 70 20 61 6e 64 0a 20 20 72 65 74 75 72  e up and.  retur
2960: 6e 20 53 51 4c 49 54 45 5f 50 52 4f 54 4f 43 4f  n SQLITE_PROTOCO
2970: 4c 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 50  L.  The SQLITE_P
2980: 52 4f 54 4f 43 4f 4c 20 65 72 72 6f 72 20 73 68  ROTOCOL error sh
2990: 6f 75 6c 64 20 61 70 70 65 61 72 20 69 6e 20 70  ould appear in p
29a0: 72 61 63 74 69 63 65 0a 20 20 76 65 72 79 2c 20  ractice.  very, 
29b0: 76 65 72 79 20 72 61 72 65 6c 79 2c 20 61 6e 64  very rarely, and
29c0: 20 6f 6e 6c 79 20 77 68 65 6e 20 74 68 65 72 65   only when there
29d0: 20 61 72 65 20 6d 61 6e 79 20 73 65 70 61 72 61   are many separa
29e0: 74 65 20 70 72 6f 63 65 73 73 65 73 20 61 6c 6c  te processes all
29f0: 0a 20 20 63 6f 6d 70 65 74 69 6e 67 20 69 6e 74  .  competing int
2a00: 65 6e 73 65 6c 79 20 74 6f 20 77 72 69 74 65 20  ensely to write 
2a10: 74 6f 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  to the same data
2a20: 62 61 73 65 2e 0a 7d 0a 52 45 53 43 4f 44 45 20  base..}.RESCODE 
2a30: 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 20 20 20  SQLITE_EMPTY    
2a40: 20 20 20 31 36 20 20 20 7b 0a 20 20 54 68 65 20     16   {.  The 
2a50: 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 72 65 73  SQLITE_EMPTY res
2a60: 75 6c 74 20 63 6f 64 65 20 69 73 20 6e 6f 74 20  ult code is not 
2a70: 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64 2e 0a  currently used..
2a80: 7d 0a 52 45 53 43 4f 44 45 20 53 51 4c 49 54 45  }.RESCODE SQLITE
2a90: 5f 53 43 48 45 4d 41 20 20 20 20 20 20 31 37 20  _SCHEMA      17 
2aa0: 20 20 7b 0a 20 20 54 68 65 20 53 51 4c 49 54 45    {.  The SQLITE
2ab0: 5f 53 43 48 45 4d 41 20 72 65 73 75 6c 74 20 63  _SCHEMA result c
2ac0: 6f 64 65 20 69 6e 64 69 63 61 74 65 73 20 74 68  ode indicates th
2ad0: 61 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  at the database 
2ae0: 73 63 68 65 6d 61 0a 20 20 68 61 73 20 63 68 61  schema.  has cha
2af0: 6e 67 65 64 2e 20 20 54 68 69 73 20 72 65 73 75  nged.  This resu
2b00: 6c 74 20 63 6f 64 65 20 63 61 6e 20 62 65 20 72  lt code can be r
2b10: 65 74 75 72 6e 65 64 20 66 72 6f 6d 20 5b 73 71  eturned from [sq
2b20: 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 20 66 6f  lite3_step()] fo
2b30: 72 0a 20 20 61 20 5b 70 72 65 70 61 72 65 64 20  r.  a [prepared 
2b40: 73 74 61 74 65 6d 65 6e 74 5d 20 74 68 61 74 20  statement] that 
2b50: 77 61 73 20 67 65 6e 65 72 61 74 65 64 20 75 73  was generated us
2b60: 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  ing [sqlite3_pre
2b70: 70 61 72 65 28 29 5d 20 6f 72 0a 20 20 5b 73 71  pare()] or.  [sq
2b80: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 28  lite3_prepare16(
2b90: 29 5d 2e 20 20 49 66 20 74 68 65 20 64 61 74 61  )].  If the data
2ba0: 62 61 73 65 20 73 63 68 65 6d 61 20 77 61 73 20  base schema was 
2bb0: 63 68 61 6e 67 65 64 20 62 79 20 73 6f 6d 65 20  changed by some 
2bc0: 6f 74 68 65 72 0a 20 20 70 72 6f 63 65 73 73 20  other.  process 
2bd0: 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 74  in between the t
2be0: 69 6d 65 20 74 68 61 74 20 74 68 65 20 73 74 61  ime that the sta
2bf0: 74 65 6d 65 6e 74 20 77 61 73 20 70 72 65 70 61  tement was prepa
2c00: 72 65 64 20 61 6e 64 20 74 68 65 20 74 69 6d 65  red and the time
2c10: 0a 20 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  .  the statement
2c20: 20 77 61 73 20 72 75 6e 2c 20 74 68 69 73 20 65   was run, this e
2c30: 72 72 6f 72 20 63 61 6e 20 72 65 73 75 6c 74 2e  rror can result.
2c40: 0a 20 20 3c 70 3e 0a 20 20 49 66 20 61 20 5b 70  .  <p>.  If a [p
2c50: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
2c60: 74 5d 20 69 73 20 67 65 6e 65 72 61 74 65 64 20  t] is generated 
2c70: 66 72 6f 6d 20 5b 73 71 6c 69 74 65 33 5f 70 72  from [sqlite3_pr
2c80: 65 70 61 72 65 5f 76 32 28 29 5d 20 74 68 65 6e  epare_v2()] then
2c90: 0a 20 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  .  the statement
2ca0: 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   is automaticall
2cb0: 79 20 72 65 2d 70 72 65 70 61 72 65 64 20 69 66  y re-prepared if
2cc0: 20 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e   the schema chan
2cd0: 67 65 73 2c 20 75 70 20 74 6f 0a 20 20 5b 53 51  ges, up to.  [SQ
2ce0: 4c 49 54 45 5f 4d 41 58 5f 53 43 48 45 4d 41 5f  LITE_MAX_SCHEMA_
2cf0: 52 45 54 52 59 5d 20 74 69 6d 65 73 20 28 64 65  RETRY] times (de
2d00: 66 61 75 6c 74 3a 20 35 30 29 2e 20 20 54 68 65  fault: 50).  The
2d10: 20 5b 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29   [sqlite3_step()
2d20: 5d 0a 20 20 69 6e 74 65 72 66 61 63 65 20 77 69  ].  interface wi
2d30: 6c 6c 20 6f 6e 6c 79 20 72 65 74 75 72 6e 20 53  ll only return S
2d40: 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 62 61 63  QLITE_SCHEMA bac
2d50: 6b 20 74 6f 20 74 68 65 20 61 70 70 6c 69 63 61  k to the applica
2d60: 74 69 6f 6e 20 69 66 20 0a 20 20 74 68 65 20 66  tion if .  the f
2d70: 61 69 6c 75 72 65 20 70 65 72 73 69 73 74 73 20  ailure persists 
2d80: 61 66 74 65 72 20 74 68 65 73 65 20 6d 61 6e 79  after these many
2d90: 20 72 65 74 72 69 65 73 2e 0a 7d 0a 52 45 53 43   retries..}.RESC
2da0: 4f 44 45 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49  ODE SQLITE_TOOBI
2db0: 47 20 20 20 20 20 20 31 38 20 20 20 7b 0a 20 20  G      18   {.  
2dc0: 54 68 65 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49  The SQLITE_TOOBI
2dd0: 47 20 65 72 72 6f 72 20 63 6f 64 65 20 69 6e 64  G error code ind
2de0: 69 63 61 74 65 73 20 74 68 61 74 20 61 20 73 74  icates that a st
2df0: 72 69 6e 67 20 6f 72 20 42 4c 4f 42 20 77 61 73  ring or BLOB was
2e00: 0a 20 20 74 6f 6f 20 6c 61 72 67 65 2e 20 20 54  .  too large.  T
2e10: 68 65 20 64 65 66 61 75 6c 74 20 6d 61 78 69 6d  he default maxim
2e20: 75 6d 20 6c 65 6e 67 74 68 20 6f 66 20 61 20 73  um length of a s
2e30: 74 72 69 6e 67 20 6f 72 20 42 4c 4f 42 20 69 6e  tring or BLOB in
2e40: 20 53 51 4c 69 74 65 20 69 73 0a 20 20 31 2c 30   SQLite is.  1,0
2e50: 30 30 2c 30 30 30 2c 30 30 30 20 62 79 74 65 73  00,000,000 bytes
2e60: 2e 20 20 54 68 69 73 20 6d 61 78 69 6d 75 6d 20  .  This maximum 
2e70: 6c 65 6e 67 74 68 20 63 61 6e 20 62 65 20 63 68  length can be ch
2e80: 61 6e 67 65 64 20 61 74 20 63 6f 6d 70 69 6c 65  anged at compile
2e90: 2d 74 69 6d 65 0a 20 20 75 73 69 6e 67 20 74 68  -time.  using th
2ea0: 65 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  e [SQLITE_MAX_LE
2eb0: 4e 47 54 48 5d 20 63 6f 6d 70 69 6c 65 2d 74 69  NGTH] compile-ti
2ec0: 6d 65 20 6f 70 74 69 6f 6e 2c 20 6f 72 20 61 74  me option, or at
2ed0: 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67 0a   run-time using.
2ee0: 20 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c    the [sqlite3_l
2ef0: 69 6d 69 74 5d 28 64 62 2c 5b 53 51 4c 49 54 45  imit](db,[SQLITE
2f00: 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 2c 2e  _LIMIT_LENGTH],.
2f10: 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 2e 20 20  ..) interface.  
2f20: 54 68 65 0a 20 20 53 51 4c 49 54 45 5f 54 4f 4f  The.  SQLITE_TOO
2f30: 42 49 47 20 65 72 72 6f 72 20 72 65 73 75 6c 74  BIG error result
2f40: 73 20 77 68 65 6e 20 53 51 4c 69 74 65 20 65 6e  s when SQLite en
2f50: 63 6f 75 6e 74 65 72 73 20 61 20 73 74 72 69 6e  counters a strin
2f60: 67 20 6f 72 20 42 4c 4f 42 0a 20 20 74 68 61 74  g or BLOB.  that
2f70: 20 65 78 63 65 65 64 73 20 74 68 65 20 63 6f 6d   exceeds the com
2f80: 70 69 6c 65 2d 74 69 6d 65 20 6f 72 20 72 75 6e  pile-time or run
2f90: 2d 74 69 6d 65 20 6c 69 6d 69 74 2e 0a 20 20 3c  -time limit..  <
2fa0: 70 3e 0a 20 20 54 68 65 20 53 51 4c 49 54 45 5f  p>.  The SQLITE_
2fb0: 54 4f 4f 42 49 47 20 65 72 72 6f 72 20 63 6f 64  TOOBIG error cod
2fc0: 65 20 63 61 6e 20 61 6c 73 6f 20 72 65 73 75 6c  e can also resul
2fd0: 74 20 77 68 65 6e 20 61 6e 20 6f 76 65 72 73 69  t when an oversi
2fe0: 7a 65 64 20 53 51 4c 0a 20 20 73 74 61 74 65 6d  zed SQL.  statem
2ff0: 65 6e 74 20 69 73 20 70 61 73 73 65 64 20 69 6e  ent is passed in
3000: 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 5b 73  to one of the [s
3010: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
3020: 32 28 29 5d 20 69 6e 74 65 72 66 61 63 65 73 2e  2()] interfaces.
3030: 0a 20 20 54 68 65 20 6d 61 78 69 6d 75 6d 20 6c  .  The maximum l
3040: 65 6e 67 74 68 20 6f 66 20 61 6e 20 53 51 4c 20  ength of an SQL 
3050: 73 74 61 74 65 6d 65 6e 74 20 64 65 66 61 75 6c  statement defaul
3060: 74 73 20 74 6f 20 61 20 6d 75 63 68 20 73 6d 61  ts to a much sma
3070: 6c 6c 65 72 0a 20 20 76 61 6c 75 65 20 6f 66 20  ller.  value of 
3080: 31 2c 30 30 30 2c 30 30 30 20 62 79 74 65 73 2e  1,000,000 bytes.
3090: 20 20 54 68 65 20 6d 61 78 69 6d 75 6d 20 53 51    The maximum SQ
30a0: 4c 20 73 74 61 74 65 6d 65 6e 74 20 6c 65 6e 67  L statement leng
30b0: 74 68 20 63 61 6e 20 62 65 0a 20 20 73 65 74 20  th can be.  set 
30c0: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  at compile-time 
30d0: 75 73 69 6e 67 20 5b 53 51 4c 49 54 45 5f 4d 41  using [SQLITE_MA
30e0: 58 5f 53 51 4c 5f 4c 45 4e 47 54 48 5d 20 6f 72  X_SQL_LENGTH] or
30f0: 20 61 74 20 72 75 6e 2d 74 69 6d 65 0a 20 20 75   at run-time.  u
3100: 73 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f 6c 69  sing [sqlite3_li
3110: 6d 69 74 5d 28 64 62 2c 5b 53 51 4c 49 54 45 5f  mit](db,[SQLITE_
3120: 4c 49 4d 49 54 5f 53 51 4c 5f 4c 45 4e 47 54 48  LIMIT_SQL_LENGTH
3130: 5d 2c 2e 2e 2e 29 2e 0a 7d 0a 52 45 53 43 4f 44  ],...)..}.RESCOD
3140: 45 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  E SQLITE_CONSTRA
3150: 49 4e 54 20 20 31 39 20 20 20 7b 0a 20 20 54 68  INT  19   {.  Th
3160: 65 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  e SQLITE_CONSTRA
3170: 49 4e 54 20 65 72 72 6f 72 20 63 6f 64 65 20 6d  INT error code m
3180: 65 61 6e 73 20 74 68 61 74 20 61 6e 20 53 51 4c  eans that an SQL
3190: 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
31a0: 61 74 69 6f 6e 0a 20 20 6f 63 63 75 72 72 65 64  ation.  occurred
31b0: 20 77 68 69 6c 65 20 74 72 79 69 6e 67 20 74 6f   while trying to
31c0: 20 70 72 6f 63 65 73 73 20 61 6e 20 53 51 4c 20   process an SQL 
31d0: 73 74 61 74 65 6d 65 6e 74 2e 20 20 41 64 64 69  statement.  Addi
31e0: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
31f0: 6f 6e 0a 20 20 61 62 6f 75 74 20 74 68 65 20 66  on.  about the f
3200: 61 69 6c 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  ailed constraint
3210: 20 63 61 6e 20 62 65 20 66 6f 75 6e 64 20 62 79   can be found by
3220: 20 63 6f 6e 73 75 6c 74 69 6e 67 20 74 68 65 0a   consulting the.
3230: 20 20 61 63 63 6f 6d 70 61 6e 79 69 6e 67 20 65    accompanying e
3240: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 28 72 65  rror message (re
3250: 74 75 72 6e 65 64 20 76 69 61 20 5b 73 71 6c 69  turned via [sqli
3260: 74 65 33 5f 65 72 72 6d 73 67 28 29 5d 20 6f 72  te3_errmsg()] or
3270: 0a 20 20 5b 73 71 6c 69 74 65 33 5f 65 72 72 6d  .  [sqlite3_errm
3280: 73 67 31 36 28 29 5d 29 20 6f 72 20 62 79 20 6c  sg16()]) or by l
3290: 6f 6f 6b 69 6e 67 20 61 74 20 74 68 65 20 5b 65  ooking at the [e
32a0: 78 74 65 6e 64 65 64 20 65 72 72 6f 72 20 63 6f  xtended error co
32b0: 64 65 5d 2e 0a 7d 0a 52 45 53 43 4f 44 45 20 53  de]..}.RESCODE S
32c0: 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 20  QLITE_MISMATCH  
32d0: 20 20 32 30 20 20 20 7b 0a 20 20 54 68 65 20 53    20   {.  The S
32e0: 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65  QLITE_MISMATCH e
32f0: 72 72 6f 72 20 63 6f 64 65 20 69 6e 64 69 63 61  rror code indica
3300: 74 65 73 20 61 20 64 61 74 61 74 79 70 65 20 6d  tes a datatype m
3310: 69 73 6d 61 74 63 68 2e 0a 20 20 3c 70 3e 0a 20  ismatch..  <p>. 
3320: 20 53 51 4c 69 74 65 20 69 73 20 6e 6f 72 6d 61   SQLite is norma
3330: 6c 6c 79 20 76 65 72 79 20 66 6f 72 67 69 76 69  lly very forgivi
3340: 6e 67 20 61 62 6f 75 74 20 6d 69 73 6d 61 74 63  ng about mismatc
3350: 68 65 73 20 62 65 74 77 65 65 6e 20 74 68 65 20  hes between the 
3360: 74 79 70 65 20 6f 66 0a 20 20 61 20 76 61 6c 75  type of.  a valu
3370: 65 20 61 6e 64 20 74 68 65 20 64 65 63 6c 61 72  e and the declar
3380: 65 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 63  ed type of the c
3390: 6f 6e 74 61 69 6e 65 72 20 69 6e 20 77 68 69 63  ontainer in whic
33a0: 68 20 74 68 61 74 20 76 61 6c 75 65 20 69 73 0a  h that value is.
33b0: 20 20 74 6f 20 62 65 20 73 74 6f 72 65 64 2e 20    to be stored. 
33c0: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 53 51   For example, SQ
33d0: 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74 68 65 20  Lite allows the 
33e0: 61 70 70 6c 69 63 61 74 69 6f 6e 20 74 6f 20 73  application to s
33f0: 74 6f 72 65 0a 20 20 61 20 6c 61 72 67 65 20 42  tore.  a large B
3400: 4c 4f 42 20 69 6e 20 61 20 63 6f 6c 75 6d 6e 20  LOB in a column 
3410: 77 69 74 68 20 61 20 64 65 63 6c 61 72 65 64 20  with a declared 
3420: 74 79 70 65 20 6f 66 20 42 4f 4f 4c 45 41 4e 2e  type of BOOLEAN.
3430: 20 20 42 75 74 20 69 6e 20 61 20 66 65 77 0a 20    But in a few. 
3440: 20 63 61 73 65 73 2c 20 53 51 4c 69 74 65 20 69   cases, SQLite i
3450: 73 20 73 74 72 69 63 74 20 61 62 6f 75 74 20 74  s strict about t
3460: 79 70 65 73 2e 20 20 54 68 65 20 53 51 4c 49 54  ypes.  The SQLIT
3470: 45 5f 4d 49 53 4d 41 54 43 48 20 65 72 72 6f 72  E_MISMATCH error
3480: 20 69 73 0a 20 20 72 65 74 75 72 6e 65 64 20 69   is.  returned i
3490: 6e 20 74 68 6f 73 65 20 66 65 77 20 63 61 73 65  n those few case
34a0: 73 20 77 68 65 6e 20 74 68 65 20 74 79 70 65 73  s when the types
34b0: 20 64 6f 20 6e 6f 74 20 6d 61 74 63 68 2e 0a 20   do not match.. 
34c0: 20 3c 70 3e 0a 20 20 54 68 65 20 5b 72 6f 77 69   <p>.  The [rowi
34d0: 64 5d 20 6f 66 20 61 20 74 61 62 6c 65 20 6d 75  d] of a table mu
34e0: 73 74 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  st be an integer
34f0: 2e 20 20 41 74 74 65 6d 70 74 20 74 6f 20 73 65  .  Attempt to se
3500: 74 20 74 68 65 20 5b 72 6f 77 69 64 5d 0a 20 20  t the [rowid].  
3510: 74 6f 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65  to anything othe
3520: 72 20 74 68 61 6e 20 61 6e 20 69 6e 74 65 67 65  r than an intege
3530: 72 20 28 6f 72 20 61 20 4e 55 4c 4c 20 77 68 69  r (or a NULL whi
3540: 63 68 20 77 69 6c 6c 20 62 65 20 61 75 74 6f 6d  ch will be autom
3550: 61 74 69 63 61 6c 6c 79 0a 20 20 63 6f 6e 76 65  atically.  conve
3560: 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65  rted into the ne
3570: 78 74 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 74  xt available int
3580: 65 67 65 72 20 72 6f 77 69 64 29 20 72 65 73 75  eger rowid) resu
3590: 6c 74 73 20 69 6e 20 61 6e 0a 20 20 53 51 4c 49  lts in an.  SQLI
35a0: 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 72 72 6f  TE_MISMATCH erro
35b0: 72 2e 0a 7d 0a 52 45 53 43 4f 44 45 20 53 51 4c  r..}.RESCODE SQL
35c0: 49 54 45 5f 4d 49 53 55 53 45 20 20 20 20 20 20  ITE_MISUSE      
35d0: 32 31 20 20 20 7b 0a 20 20 54 68 65 20 53 51 4c  21   {.  The SQL
35e0: 49 54 45 5f 4d 49 53 55 53 45 20 72 65 74 75 72  ITE_MISUSE retur
35f0: 6e 20 63 6f 64 65 20 6d 69 67 68 74 20 62 65 20  n code might be 
3600: 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65 20  returned if the 
3610: 61 70 70 6c 69 63 61 74 69 6f 6e 20 75 73 65 73  application uses
3620: 0a 20 20 61 6e 79 20 53 51 4c 69 74 65 20 69 6e  .  any SQLite in
3630: 74 65 72 66 61 63 65 20 69 6e 20 61 20 77 61 79  terface in a way
3640: 20 74 68 61 74 20 69 73 20 75 6e 64 65 66 69 6e   that is undefin
3650: 65 64 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65  ed or unsupporte
3660: 64 2e 20 20 46 6f 72 0a 20 20 65 78 61 6d 70 6c  d.  For.  exampl
3670: 65 2c 20 75 73 69 6e 67 20 61 20 5b 70 72 65 70  e, using a [prep
3680: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 5d 20  ared statement] 
3690: 61 66 74 65 72 20 74 68 61 74 20 70 72 65 70 61  after that prepa
36a0: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 68 61  red statement ha
36b0: 73 0a 20 20 62 65 65 6e 20 5b 73 71 6c 69 74 65  s.  been [sqlite
36c0: 33 5f 66 69 6e 61 6c 69 7a 65 7c 66 69 6e 61 6c  3_finalize|final
36d0: 69 7a 65 64 5d 20 6d 69 67 68 74 20 72 65 73 75  ized] might resu
36e0: 6c 74 20 69 6e 20 61 6e 20 53 51 4c 49 54 45 5f  lt in an SQLITE_
36f0: 4d 49 53 55 53 45 20 65 72 72 6f 72 2e 0a 20 20  MISUSE error..  
3700: 3c 70 3e 0a 20 20 53 51 4c 69 74 65 20 74 72 69  <p>.  SQLite tri
3710: 65 73 20 74 6f 20 64 65 74 65 63 74 20 6d 69 73  es to detect mis
3720: 75 73 65 20 61 6e 64 20 72 65 70 6f 72 74 20 74  use and report t
3730: 68 65 20 6d 69 73 75 73 65 20 75 73 69 6e 67 20  he misuse using 
3740: 74 68 69 73 20 72 65 73 75 6c 74 20 63 6f 64 65  this result code
3750: 2e 0a 20 20 48 6f 77 65 76 65 72 2c 20 74 68 65  ..  However, the
3760: 72 65 20 69 73 20 6e 6f 20 67 75 61 72 61 6e 74  re is no guarant
3770: 65 65 20 74 68 61 74 20 74 68 65 20 64 65 74 65  ee that the dete
3780: 63 74 69 6f 6e 20 6f 66 20 6d 69 73 75 73 65 20  ction of misuse 
3790: 77 69 6c 6c 20 62 65 0a 20 20 73 75 63 63 65 73  will be.  succes
37a0: 73 66 75 6c 2e 20 20 4d 69 73 75 73 65 20 64 65  sful.  Misuse de
37b0: 74 65 63 74 69 6f 6e 20 69 73 20 70 72 6f 62 61  tection is proba
37c0: 62 69 6c 69 73 74 69 63 2e 20 20 41 70 70 6c 69  bilistic.  Appli
37d0: 63 61 74 69 6f 6e 73 20 73 68 6f 75 6c 64 0a 20  cations should. 
37e0: 20 6e 65 76 65 72 20 64 65 70 65 6e 64 20 6f 6e   never depend on
37f0: 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53   an SQLITE_MISUS
3800: 45 20 72 65 74 75 72 6e 20 76 61 6c 75 65 2e 0a  E return value..
3810: 20 20 3c 70 3e 0a 20 20 49 66 20 53 51 4c 69 74    <p>.  If SQLit
3820: 65 20 65 76 65 72 20 72 65 74 75 72 6e 73 20 53  e ever returns S
3830: 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 66 72 6f  QLITE_MISUSE fro
3840: 6d 20 61 6e 79 20 69 6e 74 65 72 66 61 63 65 2c  m any interface,
3850: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
3860: 0a 20 20 74 68 65 20 61 70 70 6c 69 63 61 74 69  .  the applicati
3870: 6f 6e 20 69 73 20 69 6e 63 6f 72 72 65 63 74 6c  on is incorrectl
3880: 79 20 63 6f 64 65 64 20 61 6e 64 20 6e 65 65 64  y coded and need
3890: 73 20 74 6f 20 62 65 20 66 69 78 65 64 2e 20 20  s to be fixed.  
38a0: 44 6f 20 6e 6f 74 20 73 68 69 70 0a 20 20 61 6e  Do not ship.  an
38b0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 74 68 61   application tha
38c0: 74 20 73 6f 6d 65 74 69 6d 65 73 20 72 65 74 75  t sometimes retu
38d0: 72 6e 73 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  rns SQLITE_MISUS
38e0: 45 20 66 72 6f 6d 20 61 20 73 74 61 6e 64 61 72  E from a standar
38f0: 64 0a 20 20 53 51 4c 69 74 65 20 69 6e 74 65 72  d.  SQLite inter
3900: 66 61 63 65 20 62 65 63 61 75 73 65 20 74 68 61  face because tha
3910: 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63 6f  t application co
3920: 6e 74 61 69 6e 73 20 70 6f 74 65 6e 74 69 61 6c  ntains potential
3930: 6c 79 20 73 65 72 69 6f 75 73 20 62 75 67 73 2e  ly serious bugs.
3940: 0a 7d 0a 52 45 53 43 4f 44 45 20 53 51 4c 49 54  .}.RESCODE SQLIT
3950: 45 5f 4e 4f 4c 46 53 20 20 20 20 20 20 20 32 32  E_NOLFS       22
3960: 20 20 20 7b 0a 20 20 54 68 65 20 53 51 4c 49 54     {.  The SQLIT
3970: 45 5f 4e 4f 4c 46 53 20 65 72 72 6f 72 20 63 61  E_NOLFS error ca
3980: 6e 20 62 65 20 72 65 74 75 72 6e 65 64 20 6f 6e  n be returned on
3990: 20 73 79 73 74 65 6d 73 20 74 68 61 74 20 64 6f   systems that do
39a0: 20 6e 6f 74 20 73 75 70 70 6f 72 74 0a 20 20 6c   not support.  l
39b0: 61 72 67 65 20 66 69 6c 65 73 20 77 68 65 6e 20  arge files when 
39c0: 74 68 65 20 64 61 74 61 62 61 73 65 20 67 72 6f  the database gro
39d0: 77 73 20 74 6f 20 62 65 20 6c 61 72 67 65 72 20  ws to be larger 
39e0: 74 68 61 6e 20 77 68 61 74 20 74 68 65 20 66 69  than what the fi
39f0: 6c 65 73 79 73 74 65 6d 0a 20 20 63 61 6e 20 68  lesystem.  can h
3a00: 61 6e 64 6c 65 2e 20 20 22 4e 4f 4c 46 53 22 20  andle.  "NOLFS" 
3a10: 73 74 61 6e 64 73 20 66 6f 72 20 22 4e 4f 20 4c  stands for "NO L
3a20: 61 72 67 65 20 46 69 6c 65 20 53 75 70 70 6f 72  arge File Suppor
3a30: 74 22 2e 0a 7d 0a 52 45 53 43 4f 44 45 20 53 51  t"..}.RESCODE SQ
3a40: 4c 49 54 45 5f 41 55 54 48 20 20 20 20 20 20 20  LITE_AUTH       
3a50: 20 32 33 20 20 20 7b 0a 20 20 54 68 65 20 53 51   23   {.  The SQ
3a60: 4c 49 54 45 5f 41 55 54 48 20 65 72 72 6f 72 20  LITE_AUTH error 
3a70: 69 73 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e  is returned when
3a80: 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f   the.  [sqlite3_
3a90: 73 65 74 5f 61 75 74 68 6f 72 69 7a 65 72 20 7c  set_authorizer |
3aa0: 20 61 75 74 68 6f 72 69 7a 65 72 20 63 61 6c 6c   authorizer call
3ab0: 62 61 63 6b 5d 20 69 6e 64 69 63 61 74 65 73 20  back] indicates 
3ac0: 74 68 61 74 20 61 6e 0a 20 20 53 51 4c 20 73 74  that an.  SQL st
3ad0: 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 70 72  atement being pr
3ae0: 65 70 61 72 65 64 20 69 73 20 6e 6f 74 20 61 75  epared is not au
3af0: 74 68 6f 72 69 7a 65 64 2e 0a 7d 0a 52 45 53 43  thorized..}.RESC
3b00: 4f 44 45 20 53 51 4c 49 54 45 5f 46 4f 52 4d 41  ODE SQLITE_FORMA
3b10: 54 20 20 20 20 20 20 32 34 20 20 20 7b 0a 20 20  T      24   {.  
3b20: 54 68 65 20 53 51 4c 49 54 45 5f 46 4f 52 4d 41  The SQLITE_FORMA
3b30: 54 20 65 72 72 6f 72 20 63 6f 64 65 20 69 73 20  T error code is 
3b40: 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73  not currently us
3b50: 65 64 20 62 79 20 53 51 4c 69 74 65 2e 0a 7d 0a  ed by SQLite..}.
3b60: 52 45 53 43 4f 44 45 20 53 51 4c 49 54 45 5f 52  RESCODE SQLITE_R
3b70: 41 4e 47 45 20 20 20 20 20 20 20 32 35 20 20 20  ANGE       25   
3b80: 7b 0a 20 20 54 68 65 20 53 51 4c 49 54 45 5f 52  {.  The SQLITE_R
3b90: 41 4e 47 45 20 65 72 72 6f 72 20 69 6e 64 69 63  ANGE error indic
3ba0: 65 73 20 74 68 61 74 20 74 68 65 20 70 61 72 61  es that the para
3bb0: 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 61 72 67  meter number arg
3bc0: 75 6d 65 6e 74 0a 20 20 74 6f 20 6f 6e 65 20 6f  ument.  to one o
3bd0: 66 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 62  f the [sqlite3_b
3be0: 69 6e 64 5f 62 6c 6f 62 7c 73 71 6c 69 74 65 33  ind_blob|sqlite3
3bf0: 5f 62 69 6e 64 5d 20 72 6f 75 74 69 6e 65 73 20  _bind] routines 
3c00: 69 73 20 6f 75 74 20 6f 66 0a 20 20 72 61 6e 67  is out of.  rang
3c10: 65 2e 0a 7d 0a 52 45 53 43 4f 44 45 20 53 51 4c  e..}.RESCODE SQL
3c20: 49 54 45 5f 4e 4f 54 41 44 42 20 20 20 20 20 20  ITE_NOTADB      
3c30: 32 36 20 20 20 7b 0a 20 20 57 68 65 6e 20 61 74  26   {.  When at
3c40: 74 65 6d 70 74 69 6e 67 20 74 6f 20 6f 70 65 6e  tempting to open
3c50: 20 61 20 66 69 6c 65 2c 20 74 68 65 20 53 51 4c   a file, the SQL
3c60: 49 54 45 5f 4e 4f 54 41 44 42 20 65 72 72 6f 72  ITE_NOTADB error
3c70: 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74 0a   indicates that.
3c80: 20 20 74 68 65 20 66 69 6c 65 20 62 65 69 6e 67    the file being
3c90: 20 6f 70 65 6e 65 64 20 64 6f 65 73 20 6e 6f 74   opened does not
3ca0: 20 61 70 70 65 61 72 20 74 6f 20 62 65 20 61 6e   appear to be an
3cb0: 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65   SQLite database
3cc0: 20 66 69 6c 65 2e 0a 7d 0a 52 45 53 43 4f 44 45   file..}.RESCODE
3cd0: 20 53 51 4c 49 54 45 5f 4e 4f 54 49 43 45 20 20   SQLITE_NOTICE  
3ce0: 20 20 20 20 32 37 20 20 20 7b 0a 20 20 54 68 65      27   {.  The
3cf0: 20 53 51 4c 49 54 45 5f 4e 4f 54 49 43 45 20 72   SQLITE_NOTICE r
3d00: 65 73 75 6c 74 20 63 6f 64 65 20 69 73 20 6e 6f  esult code is no
3d10: 74 20 72 65 74 75 72 6e 65 64 20 62 79 20 61 6e  t returned by an
3d20: 79 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63  y C/C++ interfac
3d30: 65 2e 0a 20 20 48 6f 77 65 76 65 72 2c 20 53 51  e..  However, SQ
3d40: 4c 49 54 45 5f 4e 4f 54 49 43 45 20 28 6f 72 20  LITE_NOTICE (or 
3d50: 72 61 74 68 65 72 20 6f 6e 65 20 6f 66 20 69 74  rather one of it
3d60: 73 20 5b 65 78 74 65 6e 64 65 64 20 65 72 72 6f  s [extended erro
3d70: 72 20 63 6f 64 65 73 5d 29 0a 20 20 69 73 20 73  r codes]).  is s
3d80: 6f 6d 65 74 69 6d 65 73 20 75 73 65 64 20 61 73  ometimes used as
3d90: 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d   the first argum
3da0: 65 6e 74 20 69 6e 20 61 6e 20 5b 73 71 6c 69 74  ent in an [sqlit
3db0: 65 33 5f 6c 6f 67 28 29 5d 20 63 61 6c 6c 62 61  e3_log()] callba
3dc0: 63 6b 0a 20 20 74 6f 20 69 6e 64 69 63 61 74 65  ck.  to indicate
3dd0: 20 74 68 61 74 20 61 6e 20 75 6e 75 73 75 61 6c   that an unusual
3de0: 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 74 61   operation is ta
3df0: 6b 69 6e 67 20 70 6c 61 63 65 2e 0a 7d 0a 52 45  king place..}.RE
3e00: 53 43 4f 44 45 20 53 51 4c 49 54 45 5f 57 41 52  SCODE SQLITE_WAR
3e10: 4e 49 4e 47 20 20 20 20 20 32 38 20 20 20 7b 0a  NING     28   {.
3e20: 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57 41 52    The SQLITE_WAR
3e30: 4e 49 4e 47 20 72 65 73 75 6c 74 20 63 6f 64 65  NING result code
3e40: 20 69 73 20 6e 6f 74 20 72 65 74 75 72 6e 65 64   is not returned
3e50: 20 62 79 20 61 6e 79 20 43 2f 43 2b 2b 20 69 6e   by any C/C++ in
3e60: 74 65 72 66 61 63 65 2e 0a 20 20 48 6f 77 65 76  terface..  Howev
3e70: 65 72 2c 20 53 51 4c 49 54 45 5f 57 41 52 4e 49  er, SQLITE_WARNI
3e80: 4e 47 20 28 6f 72 20 72 61 74 68 65 72 20 6f 6e  NG (or rather on
3e90: 65 20 6f 66 20 69 74 73 20 5b 65 78 74 65 6e 64  e of its [extend
3ea0: 65 64 20 65 72 72 6f 72 20 63 6f 64 65 73 5d 29  ed error codes])
3eb0: 0a 20 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 20  .  is sometimes 
3ec0: 75 73 65 64 20 61 73 20 74 68 65 20 66 69 72 73  used as the firs
3ed0: 74 20 61 72 67 75 6d 65 6e 74 20 69 6e 20 61 6e  t argument in an
3ee0: 20 5b 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 5d   [sqlite3_log()]
3ef0: 20 63 61 6c 6c 62 61 63 6b 0a 20 20 74 6f 20 69   callback.  to i
3f00: 6e 64 69 63 61 74 65 20 74 68 61 74 20 61 6e 20  ndicate that an 
3f10: 75 6e 75 73 75 61 6c 20 61 6e 64 20 70 6f 73 73  unusual and poss
3f20: 69 62 6c 79 20 69 6c 6c 2d 61 64 76 69 73 65 64  ibly ill-advised
3f30: 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 0a 20 20   operation is.  
3f40: 74 61 6b 69 6e 67 20 70 6c 61 63 65 2e 0a 7d 0a  taking place..}.
3f50: 52 45 53 43 4f 44 45 20 53 51 4c 49 54 45 5f 52  RESCODE SQLITE_R
3f60: 4f 57 20 20 20 20 20 20 20 20 20 31 30 30 20 20  OW         100  
3f70: 7b 0a 20 20 54 68 65 20 53 51 4c 49 54 45 5f 52  {.  The SQLITE_R
3f80: 4f 57 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72  OW result code r
3f90: 65 74 75 72 6e 65 64 20 62 79 0a 20 20 5b 73 71  eturned by.  [sq
3fa0: 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 20 69 6e  lite3_step()] in
3fb0: 64 69 63 61 74 65 73 20 74 68 61 74 20 61 6e 6f  dicates that ano
3fc0: 74 68 65 72 20 72 6f 77 20 6f 66 20 6f 75 74 70  ther row of outp
3fd0: 75 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e  ut is available.
3fe0: 0a 7d 0a 52 45 53 43 4f 44 45 20 53 51 4c 49 54  .}.RESCODE SQLIT
3ff0: 45 5f 44 4f 4e 45 20 20 20 20 20 20 20 20 31 30  E_DONE        10
4000: 31 20 20 7b 0a 20 20 54 68 65 20 53 51 4c 49 54  1  {.  The SQLIT
4010: 45 5f 44 4f 4e 45 20 72 65 73 75 6c 74 20 63 6f  E_DONE result co
4020: 64 65 20 69 6e 64 69 63 61 74 65 73 20 74 68 61  de indicates tha
4030: 74 20 61 6e 20 6f 70 65 72 61 74 69 6f 6e 20 68  t an operation h
4040: 61 73 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 20 20  as completed..  
4050: 54 68 65 20 53 51 4c 49 54 45 5f 44 4f 4e 45 20  The SQLITE_DONE 
4060: 72 65 73 75 6c 74 20 63 6f 64 65 20 69 73 20 6d  result code is m
4070: 6f 73 74 20 63 6f 6d 6d 6f 6e 6c 79 20 73 65 65  ost commonly see
4080: 6e 20 61 73 20 61 20 72 65 74 75 72 6e 20 76 61  n as a return va
4090: 6c 75 65 0a 20 20 66 72 6f 6d 20 5b 73 71 6c 69  lue.  from [sqli
40a0: 74 65 33 5f 73 74 65 70 28 29 5d 20 69 6e 64 69  te3_step()] indi
40b0: 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20  cating that the 
40c0: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 68 61  SQL statement ha
40d0: 73 20 72 75 6e 20 74 6f 0a 20 20 63 6f 6d 70 6c  s run to.  compl
40e0: 65 74 69 6f 6e 2e 20 20 42 75 74 20 53 51 4c 49  etion.  But SQLI
40f0: 54 45 5f 44 4f 4e 45 20 63 61 6e 20 61 6c 73 6f  TE_DONE can also
4100: 20 62 65 20 72 65 74 75 72 6e 65 64 20 62 79 20   be returned by 
4110: 6f 74 68 65 72 20 6d 75 6c 74 69 2d 73 74 65 70  other multi-step
4120: 0a 20 20 69 6e 74 65 72 66 61 63 65 73 20 73 75  .  interfaces su
4130: 63 68 20 61 73 20 5b 73 71 6c 69 74 65 33 5f 62  ch as [sqlite3_b
4140: 61 63 6b 75 70 5f 73 74 65 70 28 29 5d 2e 0a 7d  ackup_step()]..}
4150: 0a 52 45 53 43 4f 44 45 20 53 51 4c 49 54 45 5f  .RESCODE SQLITE_
4160: 49 4f 45 52 52 5f 52 45 41 44 20 20 20 20 20 20  IOERR_READ      
4170: 20 20 20 20 20 20 20 20 7b 53 51 4c 49 54 45 5f          {SQLITE_
4180: 49 4f 45 52 52 20 7c 20 28 31 3c 3c 38 29 7d 20  IOERR | (1<<8)} 
4190: 7b 0a 20 20 54 68 65 20 53 51 4c 49 54 45 5f 49  {.  The SQLITE_I
41a0: 4f 45 52 52 5f 52 45 41 44 20 65 72 72 6f 72 20  OERR_READ error 
41b0: 63 6f 64 65 20 69 73 20 61 6e 20 5b 65 78 74 2d  code is an [ext-
41c0: 76 2d 70 72 69 6d 7c 65 78 74 65 6e 64 65 64 20  v-prim|extended 
41d0: 65 72 72 6f 72 20 63 6f 64 65 5d 0a 20 20 66 6f  error code].  fo
41e0: 72 20 5b 53 51 4c 49 54 45 5f 49 4f 45 52 52 5d  r [SQLITE_IOERR]
41f0: 20 69 6e 64 69 63 61 74 69 6e 67 20 61 6e 20 49   indicating an I
4200: 2f 4f 20 65 72 72 6f 72 20 69 6e 20 74 68 65 20  /O error in the 
4210: 5b 56 46 53 5d 20 6c 61 79 65 72 0a 20 20 77 68  [VFS] layer.  wh
4220: 69 6c 65 20 74 72 79 69 6e 67 20 74 6f 20 72 65  ile trying to re
4230: 61 64 20 66 72 6f 6d 20 61 20 66 69 6c 65 20 6f  ad from a file o
4240: 6e 20 64 69 73 6b 2e 20 20 54 68 69 73 20 65 72  n disk.  This er
4250: 72 6f 72 20 6d 69 67 68 74 20 72 65 73 75 6c 74  ror might result
4260: 0a 20 20 66 72 6f 6d 20 61 20 68 61 72 64 77 61  .  from a hardwa
4270: 72 65 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 20 6f  re malfunction o
4280: 72 20 62 65 63 61 75 73 65 20 61 20 66 69 6c 65  r because a file
4290: 73 79 73 74 65 6d 20 63 61 6d 65 20 75 6e 6d 6f  system came unmo
42a0: 75 6e 74 65 64 0a 20 20 77 68 69 6c 65 20 74 68  unted.  while th
42b0: 65 20 66 69 6c 65 20 77 61 73 20 6f 70 65 6e 2e  e file was open.
42c0: 0a 7d 0a 52 45 53 43 4f 44 45 20 53 51 4c 49 54  .}.RESCODE SQLIT
42d0: 45 5f 49 4f 45 52 52 5f 53 48 4f 52 54 5f 52 45  E_IOERR_SHORT_RE
42e0: 41 44 20 20 20 20 20 20 20 20 7b 53 51 4c 49 54  AD        {SQLIT
42f0: 45 5f 49 4f 45 52 52 20 7c 20 28 32 3c 3c 38 29  E_IOERR | (2<<8)
4300: 7d 20 7b 0a 20 20 54 68 65 20 53 51 4c 49 54 45  } {.  The SQLITE
4310: 5f 49 4f 45 52 52 5f 53 48 4f 52 54 5f 52 45 41  _IOERR_SHORT_REA
4320: 44 20 65 72 72 6f 72 20 63 6f 64 65 20 69 73 20  D error code is 
4330: 61 6e 20 5b 65 78 74 2d 76 2d 70 72 69 6d 7c 65  an [ext-v-prim|e
4340: 78 74 65 6e 64 65 64 20 65 72 72 6f 72 20 63 6f  xtended error co
4350: 64 65 5d 0a 20 20 66 6f 72 20 5b 53 51 4c 49 54  de].  for [SQLIT
4360: 45 5f 49 4f 45 52 52 5d 20 69 6e 64 69 63 61 74  E_IOERR] indicat
4370: 69 6e 67 20 74 68 61 74 20 61 20 72 65 61 64 20  ing that a read 
4380: 61 74 74 65 6d 70 74 20 69 6e 20 74 68 65 20 5b  attempt in the [
4390: 56 46 53 5d 20 6c 61 79 65 72 0a 20 20 77 61 73  VFS] layer.  was
43a0: 20 75 6e 61 62 6c 65 20 74 6f 20 6f 62 74 61 69   unable to obtai
43b0: 6e 20 61 73 20 6d 61 6e 79 20 62 79 74 65 73 20  n as many bytes 
43c0: 61 73 20 77 61 73 20 72 65 71 75 65 73 74 65 64  as was requested
43d0: 2e 20 20 54 68 69 73 20 6d 69 67 68 74 20 62 65  .  This might be
43e0: 0a 20 20 64 75 65 20 74 6f 20 61 20 74 72 75 6e  .  due to a trun
43f0: 63 61 74 65 64 20 66 69 6c 65 2e 0a 7d 0a 52 45  cated file..}.RE
4400: 53 43 4f 44 45 20 53 51 4c 49 54 45 5f 49 4f 45  SCODE SQLITE_IOE
4410: 52 52 5f 57 52 49 54 45 20 20 20 20 20 20 20 20  RR_WRITE        
4420: 20 20 20 20 20 7b 53 51 4c 49 54 45 5f 49 4f 45       {SQLITE_IOE
4430: 52 52 20 7c 20 28 33 3c 3c 38 29 7d 20 7b 0a 20  RR | (3<<8)} {. 
4440: 20 54 68 65 20 53 51 4c 49 54 45 5f 49 4f 45 52   The SQLITE_IOER
4450: 52 5f 57 52 49 54 45 20 65 72 72 6f 72 20 63 6f  R_WRITE error co
4460: 64 65 20 69 73 20 61 6e 20 5b 65 78 74 2d 76 2d  de is an [ext-v-
4470: 70 72 69 6d 7c 65 78 74 65 6e 64 65 64 20 65 72  prim|extended er
4480: 72 6f 72 20 63 6f 64 65 5d 0a 20 20 66 6f 72 20  ror code].  for 
4490: 5b 53 51 4c 49 54 45 5f 49 4f 45 52 52 5d 20 69  [SQLITE_IOERR] i
44a0: 6e 64 69 63 61 74 69 6e 67 20 61 6e 20 49 2f 4f  ndicating an I/O
44b0: 20 65 72 72 6f 72 20 69 6e 20 74 68 65 20 5b 56   error in the [V
44c0: 46 53 5d 20 6c 61 79 65 72 0a 20 20 77 68 69 6c  FS] layer.  whil
44d0: 65 20 74 72 79 69 6e 67 20 74 6f 20 77 72 69 74  e trying to writ
44e0: 65 20 69 6e 74 6f 20 61 20 66 69 6c 65 20 6f 6e  e into a file on
44f0: 20 64 69 73 6b 2e 20 20 54 68 69 73 20 65 72 72   disk.  This err
4500: 6f 72 20 6d 69 67 68 74 20 72 65 73 75 6c 74 0a  or might result.
4510: 20 20 66 72 6f 6d 20 61 20 68 61 72 64 77 61 72    from a hardwar
4520: 65 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 20 6f 72  e malfunction or
4530: 20 62 65 63 61 75 73 65 20 61 20 66 69 6c 65 73   because a files
4540: 79 73 74 65 6d 20 63 61 6d 65 20 75 6e 6d 6f 75  ystem came unmou
4550: 6e 74 65 64 0a 20 20 77 68 69 6c 65 20 74 68 65  nted.  while the
4560: 20 66 69 6c 65 20 77 61 73 20 6f 70 65 6e 2e 20   file was open. 
4570: 20 54 68 69 73 20 65 72 72 6f 72 20 73 68 6f 75   This error shou
4580: 6c 64 20 6e 6f 74 20 6f 63 63 75 72 20 69 66 20  ld not occur if 
4590: 74 68 65 20 66 69 6c 65 73 79 73 74 65 6d 0a 20  the filesystem. 
45a0: 20 69 73 20 66 75 6c 6c 20 61 73 20 74 68 65 72   is full as ther
45b0: 65 20 69 73 20 61 20 73 65 70 61 72 61 74 65 20  e is a separate 
45c0: 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51 4c 49  error code (SQLI
45d0: 54 45 5f 46 55 4c 4c 29 20 66 6f 72 20 74 68 61  TE_FULL) for tha
45e0: 74 20 70 75 72 70 6f 73 65 2e 0a 7d 0a 52 45 53  t purpose..}.RES
45f0: 43 4f 44 45 20 53 51 4c 49 54 45 5f 49 4f 45 52  CODE SQLITE_IOER
4600: 52 5f 46 53 59 4e 43 20 20 20 20 20 20 20 20 20  R_FSYNC         
4610: 20 20 20 20 7b 53 51 4c 49 54 45 5f 49 4f 45 52      {SQLITE_IOER
4620: 52 20 7c 20 28 34 3c 3c 38 29 7d 20 7b 0a 20 20  R | (4<<8)} {.  
4630: 54 68 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  The SQLITE_IOERR
4640: 5f 46 53 59 4e 43 20 65 72 72 6f 72 20 63 6f 64  _FSYNC error cod
4650: 65 20 69 73 20 61 6e 20 5b 65 78 74 2d 76 2d 70  e is an [ext-v-p
4660: 72 69 6d 7c 65 78 74 65 6e 64 65 64 20 65 72 72  rim|extended err
4670: 6f 72 20 63 6f 64 65 5d 0a 20 20 66 6f 72 20 5b  or code].  for [
4680: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5d 20 69 6e  SQLITE_IOERR] in
4690: 64 69 63 61 74 69 6e 67 20 61 6e 20 49 2f 4f 20  dicating an I/O 
46a0: 65 72 72 6f 72 20 69 6e 20 74 68 65 20 5b 56 46  error in the [VF
46b0: 53 5d 20 6c 61 79 65 72 0a 20 20 77 68 69 6c 65  S] layer.  while
46c0: 20 74 72 79 69 6e 67 20 74 6f 20 66 6c 75 73 68   trying to flush
46d0: 20 70 72 65 76 69 6f 75 73 6c 79 20 77 72 69 74   previously writ
46e0: 74 65 6e 20 63 6f 6e 74 65 6e 74 20 6f 75 74 20  ten content out 
46f0: 6f 66 20 4f 53 20 61 6e 64 2f 6f 72 0a 20 20 64  of OS and/or.  d
4700: 69 73 6b 2d 63 6f 6e 74 72 6f 6c 20 62 75 66 66  isk-control buff
4710: 65 72 73 20 61 6e 64 20 69 6e 74 6f 20 70 65 72  ers and into per
4720: 73 69 73 74 65 6e 74 20 73 74 6f 72 61 67 65 2e  sistent storage.
4730: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
4740: 2c 0a 20 20 74 68 69 73 20 63 6f 64 65 20 69 6e  ,.  this code in
4750: 64 69 63 61 74 65 73 20 61 20 70 72 6f 62 6c 65  dicates a proble
4760: 6d 20 77 69 74 68 20 74 68 65 20 66 73 79 6e 63  m with the fsync
4770: 28 29 20 73 79 73 74 65 6d 20 63 61 6c 6c 20 69  () system call i
4780: 6e 20 75 6e 69 78 0a 20 20 6f 72 20 74 68 65 20  n unix.  or the 
4790: 46 6c 75 73 68 46 69 6c 65 42 75 66 66 65 72 73  FlushFileBuffers
47a0: 28 29 20 73 79 73 74 65 6d 20 63 61 6c 6c 20 69  () system call i
47b0: 6e 20 77 69 6e 64 6f 77 73 2e 0a 7d 0a 52 45 53  n windows..}.RES
47c0: 43 4f 44 45 20 53 51 4c 49 54 45 5f 49 4f 45 52  CODE SQLITE_IOER
47d0: 52 5f 44 49 52 5f 46 53 59 4e 43 20 20 20 20 20  R_DIR_FSYNC     
47e0: 20 20 20 20 7b 53 51 4c 49 54 45 5f 49 4f 45 52      {SQLITE_IOER
47f0: 52 20 7c 20 28 35 3c 3c 38 29 7d 20 7b 0a 20 20  R | (5<<8)} {.  
4800: 54 68 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  The SQLITE_IOERR
4810: 5f 44 49 52 5f 46 53 59 4e 43 20 65 72 72 6f 72  _DIR_FSYNC error
4820: 20 63 6f 64 65 20 69 73 20 61 6e 20 5b 65 78 74   code is an [ext
4830: 2d 76 2d 70 72 69 6d 7c 65 78 74 65 6e 64 65 64  -v-prim|extended
4840: 20 65 72 72 6f 72 20 63 6f 64 65 5d 0a 20 20 66   error code].  f
4850: 6f 72 20 5b 53 51 4c 49 54 45 5f 49 4f 45 52 52  or [SQLITE_IOERR
4860: 5d 20 69 6e 64 69 63 61 74 69 6e 67 20 61 6e 20  ] indicating an 
4870: 49 2f 4f 20 65 72 72 6f 72 20 69 6e 20 74 68 65  I/O error in the
4880: 20 5b 56 46 53 5d 20 6c 61 79 65 72 0a 20 20 77   [VFS] layer.  w
4890: 68 69 6c 65 20 74 72 79 69 6e 67 20 74 6f 20 69  hile trying to i
48a0: 6e 76 6f 6b 65 20 66 73 79 6e 63 28 29 20 6f 6e  nvoke fsync() on
48b0: 20 61 20 64 69 72 65 63 74 6f 72 79 2e 20 20 54   a directory.  T
48c0: 68 65 20 75 6e 69 78 20 5b 56 46 53 5d 20 61 74  he unix [VFS] at
48d0: 74 65 6d 70 74 73 0a 20 20 74 6f 20 66 73 79 6e  tempts.  to fsyn
48e0: 63 28 29 20 64 69 72 65 63 74 6f 72 69 65 73 20  c() directories 
48f0: 61 66 74 65 72 20 63 72 65 61 74 69 6e 67 20 6f  after creating o
4900: 72 20 64 65 6c 65 74 69 6e 67 20 63 65 72 74 61  r deleting certa
4910: 69 6e 20 66 69 6c 65 73 20 74 6f 0a 20 20 65 6e  in files to.  en
4920: 73 75 72 65 20 74 68 61 74 20 74 68 6f 73 65 20  sure that those 
4930: 66 69 6c 65 73 20 77 69 6c 6c 20 73 74 69 6c 6c  files will still
4940: 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 66   appear in the f
4950: 69 6c 65 73 79 73 74 65 6d 20 66 6f 6c 6c 6f 77  ilesystem follow
4960: 69 6e 67 0a 20 20 61 20 70 6f 77 65 72 20 6c 6f  ing.  a power lo
4970: 73 73 20 6f 72 20 73 79 73 74 65 6d 20 63 72 61  ss or system cra
4980: 73 68 2e 20 20 54 68 69 73 20 65 72 72 6f 72 20  sh.  This error 
4990: 63 6f 64 65 20 69 6e 64 69 63 61 74 65 73 20 61  code indicates a
49a0: 20 70 72 6f 62 6c 65 6d 0a 20 20 61 74 74 65 6d   problem.  attem
49b0: 70 74 69 6e 67 20 74 6f 20 70 65 72 66 6f 72 6d  pting to perform
49c0: 20 74 68 61 74 20 66 73 79 6e 63 28 29 2e 0a 7d   that fsync()..}
49d0: 0a 52 45 53 43 4f 44 45 20 53 51 4c 49 54 45 5f  .RESCODE SQLITE_
49e0: 49 4f 45 52 52 5f 54 52 55 4e 43 41 54 45 20 20  IOERR_TRUNCATE  
49f0: 20 20 20 20 20 20 20 20 7b 53 51 4c 49 54 45 5f          {SQLITE_
4a00: 49 4f 45 52 52 20 7c 20 28 36 3c 3c 38 29 7d 20  IOERR | (6<<8)} 
4a10: 7b 0a 20 20 54 68 65 20 53 51 4c 49 54 45 5f 49  {.  The SQLITE_I
4a20: 4f 45 52 52 5f 54 52 55 4e 43 41 54 45 20 65 72  OERR_TRUNCATE er
4a30: 72 6f 72 20 63 6f 64 65 20 69 73 20 61 6e 20 5b  ror code is an [
4a40: 65 78 74 2d 76 2d 70 72 69 6d 7c 65 78 74 65 6e  ext-v-prim|exten
4a50: 64 65 64 20 65 72 72 6f 72 20 63 6f 64 65 5d 0a  ded error code].
4a60: 20 20 66 6f 72 20 5b 53 51 4c 49 54 45 5f 49 4f    for [SQLITE_IO
4a70: 45 52 52 5d 20 69 6e 64 69 63 61 74 69 6e 67 20  ERR] indicating 
4a80: 61 6e 20 49 2f 4f 20 65 72 72 6f 72 20 69 6e 20  an I/O error in 
4a90: 74 68 65 20 5b 56 46 53 5d 20 6c 61 79 65 72 0a  the [VFS] layer.
4aa0: 20 20 77 68 69 6c 65 20 74 72 79 69 6e 67 20 74    while trying t
4ab0: 6f 20 74 72 75 6e 63 61 74 65 20 61 20 66 69 6c  o truncate a fil
4ac0: 65 20 74 6f 20 61 20 73 6d 61 6c 6c 65 72 20 73  e to a smaller s
4ad0: 69 7a 65 2e 0a 7d 0a 52 45 53 43 4f 44 45 20 53  ize..}.RESCODE S
4ae0: 51 4c 49 54 45 5f 49 4f 45 52 52 5f 46 53 54 41  QLITE_IOERR_FSTA
4af0: 54 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 53  T             {S
4b00: 51 4c 49 54 45 5f 49 4f 45 52 52 20 7c 20 28 37  QLITE_IOERR | (7
4b10: 3c 3c 38 29 7d 20 7b 0a 20 20 54 68 65 20 53 51  <<8)} {.  The SQ
4b20: 4c 49 54 45 5f 49 4f 45 52 52 5f 46 53 54 41 54  LITE_IOERR_FSTAT
4b30: 20 65 72 72 6f 72 20 63 6f 64 65 20 69 73 20 61   error code is a
4b40: 6e 20 5b 65 78 74 2d 76 2d 70 72 69 6d 7c 65 78  n [ext-v-prim|ex
4b50: 74 65 6e 64 65 64 20 65 72 72 6f 72 20 63 6f 64  tended error cod
4b60: 65 5d 0a 20 20 66 6f 72 20 5b 53 51 4c 49 54 45  e].  for [SQLITE
4b70: 5f 49 4f 45 52 52 5d 20 69 6e 64 69 63 61 74 69  _IOERR] indicati
4b80: 6e 67 20 61 6e 20 49 2f 4f 20 65 72 72 6f 72 20  ng an I/O error 
4b90: 69 6e 20 74 68 65 20 5b 56 46 53 5d 20 6c 61 79  in the [VFS] lay
4ba0: 65 72 0a 20 20 77 68 69 6c 65 20 74 72 79 69 6e  er.  while tryin
4bb0: 67 20 74 6f 20 69 6e 76 6f 6b 65 20 66 73 74 61  g to invoke fsta
4bc0: 74 28 29 20 28 6f 72 20 74 68 65 20 65 71 75 69  t() (or the equi
4bd0: 76 61 6c 65 6e 74 29 20 6f 6e 20 61 20 66 69 6c  valent) on a fil
4be0: 65 20 69 6e 20 6f 72 64 65 72 0a 20 20 74 6f 20  e in order.  to 
4bf0: 64 65 74 65 72 6d 69 6e 65 20 69 6e 66 6f 72 6d  determine inform
4c00: 61 74 69 6f 6e 20 73 75 63 68 20 61 73 20 74 68  ation such as th
4c10: 65 20 66 69 6c 65 20 73 69 7a 65 20 6f 72 20 61  e file size or a
4c20: 63 63 65 73 73 20 70 65 72 6d 69 73 73 69 6f 6e  ccess permission
4c30: 73 2e 0a 7d 0a 52 45 53 43 4f 44 45 20 53 51 4c  s..}.RESCODE SQL
4c40: 49 54 45 5f 49 4f 45 52 52 5f 55 4e 4c 4f 43 4b  ITE_IOERR_UNLOCK
4c50: 20 20 20 20 20 20 20 20 20 20 20 20 7b 53 51 4c              {SQL
4c60: 49 54 45 5f 49 4f 45 52 52 20 7c 20 28 38 3c 3c  ITE_IOERR | (8<<
4c70: 38 29 7d 20 7b 0a 20 20 54 68 65 20 53 51 4c 49  8)} {.  The SQLI
4c80: 54 45 5f 49 4f 45 52 52 5f 55 4e 4c 4f 43 4b 20  TE_IOERR_UNLOCK 
4c90: 65 72 72 6f 72 20 63 6f 64 65 20 69 73 20 61 6e  error code is an
4ca0: 20 5b 65 78 74 2d 76 2d 70 72 69 6d 7c 65 78 74   [ext-v-prim|ext
4cb0: 65 6e 64 65 64 20 65 72 72 6f 72 20 63 6f 64 65  ended error code
4cc0: 5d 0a 20 20 66 6f 72 20 5b 53 51 4c 49 54 45 5f  ].  for [SQLITE_
4cd0: 49 4f 45 52 52 5d 20 69 6e 64 69 63 61 74 69 6e  IOERR] indicatin
4ce0: 67 20 61 6e 20 49 2f 4f 20 65 72 72 6f 72 0a 20  g an I/O error. 
4cf0: 20 77 69 74 68 69 6e 20 78 55 6e 6c 6f 63 6b 20   within xUnlock 
4d00: 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65 20 5b 73  method on the [s
4d10: 71 6c 69 74 65 33 5f 69 6f 5f 6d 65 74 68 6f 64  qlite3_io_method
4d20: 73 5d 20 6f 62 6a 65 63 74 2e 0a 7d 0a 52 45 53  s] object..}.RES
4d30: 43 4f 44 45 20 53 51 4c 49 54 45 5f 49 4f 45 52  CODE SQLITE_IOER
4d40: 52 5f 52 44 4c 4f 43 4b 20 20 20 20 20 20 20 20  R_RDLOCK        
4d50: 20 20 20 20 7b 53 51 4c 49 54 45 5f 49 4f 45 52      {SQLITE_IOER
4d60: 52 20 7c 20 28 39 3c 3c 38 29 7d 20 7b 0a 20 20  R | (9<<8)} {.  
4d70: 54 68 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  The SQLITE_IOERR
4d80: 5f 55 4e 4c 4f 43 4b 20 65 72 72 6f 72 20 63 6f  _UNLOCK error co
4d90: 64 65 20 69 73 20 61 6e 20 5b 65 78 74 2d 76 2d  de is an [ext-v-
4da0: 70 72 69 6d 7c 65 78 74 65 6e 64 65 64 20 65 72  prim|extended er
4db0: 72 6f 72 20 63 6f 64 65 5d 0a 20 20 66 6f 72 20  ror code].  for 
4dc0: 5b 53 51 4c 49 54 45 5f 49 4f 45 52 52 5d 20 69  [SQLITE_IOERR] i
4dd0: 6e 64 69 63 61 74 69 6e 67 20 61 6e 20 49 2f 4f  ndicating an I/O
4de0: 20 65 72 72 6f 72 0a 20 20 77 69 74 68 69 6e 20   error.  within 
4df0: 78 4c 6f 63 6b 20 6d 65 74 68 6f 64 20 6f 6e 20  xLock method on 
4e00: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 69 6f 5f  the [sqlite3_io_
4e10: 6d 65 74 68 6f 64 73 5d 20 6f 62 6a 65 63 74 20  methods] object 
4e20: 77 68 69 6c 65 20 74 72 79 69 6e 67 0a 20 20 74  while trying.  t
4e30: 6f 20 6f 62 74 61 69 6e 20 61 20 72 65 61 64 20  o obtain a read 
4e40: 6c 6f 63 6b 2e 0a 7d 0a 52 45 53 43 4f 44 45 20  lock..}.RESCODE 
4e50: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 44 45 4c  SQLITE_IOERR_DEL
4e60: 45 54 45 20 20 20 20 20 20 20 20 20 20 20 20 7b  ETE            {
4e70: 53 51 4c 49 54 45 5f 49 4f 45 52 52 20 7c 20 28  SQLITE_IOERR | (
4e80: 31 30 3c 3c 38 29 7d 20 7b 0a 20 20 54 68 65 20  10<<8)} {.  The 
4e90: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 55 4e 4c  SQLITE_IOERR_UNL
4ea0: 4f 43 4b 20 65 72 72 6f 72 20 63 6f 64 65 20 69  OCK error code i
4eb0: 73 20 61 6e 20 5b 65 78 74 2d 76 2d 70 72 69 6d  s an [ext-v-prim
4ec0: 7c 65 78 74 65 6e 64 65 64 20 65 72 72 6f 72 20  |extended error 
4ed0: 63 6f 64 65 5d 0a 20 20 66 6f 72 20 5b 53 51 4c  code].  for [SQL
4ee0: 49 54 45 5f 49 4f 45 52 52 5d 20 69 6e 64 69 63  ITE_IOERR] indic
4ef0: 61 74 69 6e 67 20 61 6e 20 49 2f 4f 20 65 72 72  ating an I/O err
4f00: 6f 72 0a 20 20 77 69 74 68 69 6e 20 78 44 65 6c  or.  within xDel
4f10: 65 74 65 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68  ete method on th
4f20: 65 20 5b 73 71 6c 69 74 65 33 5f 76 66 73 5d 20  e [sqlite3_vfs] 
4f30: 6f 62 6a 65 63 74 2e 0a 7d 0a 52 45 53 43 4f 44  object..}.RESCOD
4f40: 45 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 42  E SQLITE_IOERR_B
4f50: 4c 4f 43 4b 45 44 20 20 20 20 20 20 20 20 20 20  LOCKED          
4f60: 20 7b 53 51 4c 49 54 45 5f 49 4f 45 52 52 20 7c   {SQLITE_IOERR |
4f70: 20 28 31 31 3c 3c 38 29 7d 20 7b 0a 20 20 54 68   (11<<8)} {.  Th
4f80: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 42  e SQLITE_IOERR_B
4f90: 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 63 6f 64  LOCKED error cod
4fa0: 65 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 75  e is no longer u
4fb0: 73 65 64 2e 0a 7d 0a 52 45 53 43 4f 44 45 20 53  sed..}.RESCODE S
4fc0: 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
4fd0: 4d 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 53  M             {S
4fe0: 51 4c 49 54 45 5f 49 4f 45 52 52 20 7c 20 28 31  QLITE_IOERR | (1
4ff0: 32 3c 3c 38 29 7d 20 7b 0a 20 20 54 68 65 20 53  2<<8)} {.  The S
5000: 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
5010: 4d 20 65 72 72 6f 72 20 63 6f 64 65 20 69 73 20  M error code is 
5020: 73 6f 6d 65 74 69 6d 65 73 20 72 65 74 75 72 6e  sometimes return
5030: 65 64 20 62 79 20 74 68 65 20 5b 56 46 53 5d 0a  ed by the [VFS].
5040: 20 20 6c 61 79 65 72 20 74 6f 20 69 6e 64 69 63    layer to indic
5050: 61 74 65 20 74 68 61 74 20 61 6e 20 6f 70 65 72  ate that an oper
5060: 61 74 69 6f 6e 20 63 6f 75 6c 64 20 6e 6f 74 20  ation could not 
5070: 62 65 20 63 6f 6d 70 6c 65 74 65 64 20 64 75 65  be completed due
5080: 20 74 6f 20 74 68 65 0a 20 20 69 6e 61 62 69 6c   to the.  inabil
5090: 69 74 79 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20  ity to allocate 
50a0: 73 75 66 66 69 63 69 65 6e 74 20 6d 65 6d 6f 72  sufficient memor
50b0: 79 2e 20 20 54 68 69 73 20 65 72 72 6f 72 20 63  y.  This error c
50c0: 6f 64 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 0a  ode is normally.
50d0: 20 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f    converted into
50e0: 20 5b 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5d 20   [SQLITE_NOMEM] 
50f0: 62 79 20 74 68 65 20 68 69 67 68 65 72 20 6c 61  by the higher la
5100: 79 65 72 73 20 6f 66 20 53 51 4c 69 74 65 20 62  yers of SQLite b
5110: 65 66 6f 72 65 0a 20 20 62 65 69 6e 67 20 72 65  efore.  being re
5120: 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 61 70  turned to the ap
5130: 70 6c 69 63 61 74 69 6f 6e 2e 0a 7d 0a 52 45 53  plication..}.RES
5140: 43 4f 44 45 20 53 51 4c 49 54 45 5f 49 4f 45 52  CODE SQLITE_IOER
5150: 52 5f 41 43 43 45 53 53 20 20 20 20 20 20 20 20  R_ACCESS        
5160: 20 20 20 20 7b 53 51 4c 49 54 45 5f 49 4f 45 52      {SQLITE_IOER
5170: 52 20 7c 20 28 31 33 3c 3c 38 29 7d 20 7b 0a 20  R | (13<<8)} {. 
5180: 20 54 68 65 20 53 51 4c 49 54 45 5f 49 4f 45 52   The SQLITE_IOER
5190: 52 5f 41 43 43 45 53 53 20 65 72 72 6f 72 20 63  R_ACCESS error c
51a0: 6f 64 65 20 69 73 20 61 6e 20 5b 65 78 74 2d 76  ode is an [ext-v
51b0: 2d 70 72 69 6d 7c 65 78 74 65 6e 64 65 64 20 65  -prim|extended e
51c0: 72 72 6f 72 20 63 6f 64 65 5d 0a 20 20 66 6f 72  rror code].  for
51d0: 20 5b 53 51 4c 49 54 45 5f 49 4f 45 52 52 5d 20   [SQLITE_IOERR] 
51e0: 69 6e 64 69 63 61 74 69 6e 67 20 61 6e 20 49 2f  indicating an I/
51f0: 4f 20 65 72 72 6f 72 0a 20 20 77 69 74 68 69 6e  O error.  within
5200: 20 74 68 65 20 78 41 63 63 65 73 73 20 6d 65 74   the xAccess met
5210: 68 6f 64 20 6f 6e 20 74 68 65 20 5b 73 71 6c 69  hod on the [sqli
5220: 74 65 33 5f 76 66 73 5d 20 6f 62 6a 65 63 74 2e  te3_vfs] object.
5230: 0a 7d 0a 52 45 53 43 4f 44 45 20 53 51 4c 49 54  .}.RESCODE SQLIT
5240: 45 5f 49 4f 45 52 52 5f 43 48 45 43 4b 52 45 53  E_IOERR_CHECKRES
5250: 45 52 56 45 44 4c 4f 43 4b 20 7b 53 51 4c 49 54  ERVEDLOCK {SQLIT
5260: 45 5f 49 4f 45 52 52 20 7c 20 28 31 34 3c 3c 38  E_IOERR | (14<<8
5270: 29 7d 20 7b 0a 20 20 54 68 65 20 53 51 4c 49 54  )} {.  The SQLIT
5280: 45 5f 49 4f 45 52 52 5f 43 48 45 43 4b 52 45 53  E_IOERR_CHECKRES
5290: 45 52 56 45 44 4c 4f 43 4b 20 65 72 72 6f 72 20  ERVEDLOCK error 
52a0: 63 6f 64 65 20 69 73 0a 20 20 61 6e 20 5b 65 78  code is.  an [ex
52b0: 74 2d 76 2d 70 72 69 6d 7c 65 78 74 65 6e 64 65  t-v-prim|extende
52c0: 64 20 65 72 72 6f 72 20 63 6f 64 65 5d 0a 20 20  d error code].  
52d0: 66 6f 72 20 5b 53 51 4c 49 54 45 5f 49 4f 45 52  for [SQLITE_IOER
52e0: 52 5d 20 69 6e 64 69 63 61 74 69 6e 67 20 61 6e  R] indicating an
52f0: 20 49 2f 4f 20 65 72 72 6f 72 0a 20 20 77 69 74   I/O error.  wit
5300: 68 69 6e 20 74 68 65 20 78 43 68 65 63 6b 52 65  hin the xCheckRe
5310: 73 65 72 76 65 64 4c 6f 63 6b 20 6d 65 74 68 6f  servedLock metho
5320: 64 20 6f 6e 20 74 68 65 20 5b 73 71 6c 69 74 65  d on the [sqlite
5330: 33 5f 69 6f 5f 6d 65 74 68 6f 64 73 5d 20 6f 62  3_io_methods] ob
5340: 6a 65 63 74 2e 0a 7d 0a 52 45 53 43 4f 44 45 20  ject..}.RESCODE 
5350: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4c 4f 43  SQLITE_IOERR_LOC
5360: 4b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  K              {
5370: 53 51 4c 49 54 45 5f 49 4f 45 52 52 20 7c 20 28  SQLITE_IOERR | (
5380: 31 35 3c 3c 38 29 7d 20 7b 0a 20 20 54 68 65 20  15<<8)} {.  The 
5390: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4c 4f 43  SQLITE_IOERR_LOC
53a0: 4b 20 65 72 72 6f 72 20 63 6f 64 65 20 69 73 20  K error code is 
53b0: 61 6e 20 5b 65 78 74 2d 76 2d 70 72 69 6d 7c 65  an [ext-v-prim|e
53c0: 78 74 65 6e 64 65 64 20 65 72 72 6f 72 20 63 6f  xtended error co
53d0: 64 65 5d 0a 20 20 66 6f 72 20 5b 53 51 4c 49 54  de].  for [SQLIT
53e0: 45 5f 49 4f 45 52 52 5d 20 69 6e 64 69 63 61 74  E_IOERR] indicat
53f0: 69 6e 67 20 61 6e 20 49 2f 4f 20 65 72 72 6f 72  ing an I/O error
5400: 20 69 6e 20 74 68 65 20 0a 20 20 61 64 76 69 73   in the .  advis
5410: 6f 72 79 20 66 69 6c 65 20 6c 6f 63 6b 69 6e 67  ory file locking
5420: 20 6c 6f 67 69 63 2e 0a 20 20 55 73 75 61 6c 6c   logic..  Usuall
5430: 79 20 61 6e 20 53 51 4c 49 54 45 5f 49 4f 45 52  y an SQLITE_IOER
5440: 52 5f 4c 4f 43 4b 20 65 72 72 6f 72 20 69 6e 64  R_LOCK error ind
5450: 69 63 61 74 65 73 20 61 20 70 72 6f 62 6c 65 6d  icates a problem
5460: 20 6f 62 74 61 69 6e 69 6e 67 0a 20 20 61 20 5b   obtaining.  a [
5470: 50 45 4e 44 49 4e 47 20 6c 6f 63 6b 5d 2e 20 20  PENDING lock].  
5480: 48 6f 77 65 76 65 72 20 69 74 20 63 61 6e 20 61  However it can a
5490: 6c 73 6f 20 69 6e 64 69 63 61 74 65 20 6d 69 73  lso indicate mis
54a0: 63 65 6c 6c 61 6e 65 6f 75 73 0a 20 20 6c 6f 63  cellaneous.  loc
54b0: 6b 69 6e 67 20 65 72 72 6f 72 73 20 6f 6e 20 73  king errors on s
54c0: 6f 6d 65 20 6f 66 20 74 68 65 20 73 70 65 63 69  ome of the speci
54d0: 61 6c 69 7a 65 64 20 5b 56 46 53 65 73 5d 20 75  alized [VFSes] u
54e0: 73 65 64 20 6f 6e 20 4d 61 63 73 2e 0a 7d 0a 52  sed on Macs..}.R
54f0: 45 53 43 4f 44 45 20 53 51 4c 49 54 45 5f 49 4f  ESCODE SQLITE_IO
5500: 45 52 52 5f 43 4c 4f 53 45 20 20 20 20 20 20 20  ERR_CLOSE       
5510: 20 20 20 20 20 20 7b 53 51 4c 49 54 45 5f 49 4f        {SQLITE_IO
5520: 45 52 52 20 7c 20 28 31 36 3c 3c 38 29 7d 20 7b  ERR | (16<<8)} {
5530: 0a 20 20 54 68 65 20 53 51 4c 49 54 45 5f 49 4f  .  The SQLITE_IO
5540: 45 52 52 5f 41 43 43 45 53 53 20 65 72 72 6f 72  ERR_ACCESS error
5550: 20 63 6f 64 65 20 69 73 20 61 6e 20 5b 65 78 74   code is an [ext
5560: 2d 76 2d 70 72 69 6d 7c 65 78 74 65 6e 64 65 64  -v-prim|extended
5570: 20 65 72 72 6f 72 20 63 6f 64 65 5d 0a 20 20 66   error code].  f
5580: 6f 72 20 5b 53 51 4c 49 54 45 5f 49 4f 45 52 52  or [SQLITE_IOERR
5590: 5d 20 69 6e 64 69 63 61 74 69 6e 67 20 61 6e 20  ] indicating an 
55a0: 49 2f 4f 20 65 72 72 6f 72 0a 20 20 77 69 74 68  I/O error.  with
55b0: 69 6e 20 74 68 65 20 78 43 6c 6f 73 65 20 6d 65  in the xClose me
55c0: 74 68 6f 64 20 6f 6e 20 74 68 65 20 5b 73 71 6c  thod on the [sql
55d0: 69 74 65 33 5f 69 6f 5f 6d 65 74 68 6f 64 73 5d  ite3_io_methods]
55e0: 20 6f 62 6a 65 63 74 2e 0a 7d 0a 52 45 53 43 4f   object..}.RESCO
55f0: 44 45 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  DE SQLITE_IOERR_
5600: 44 49 52 5f 43 4c 4f 53 45 20 20 20 20 20 20 20  DIR_CLOSE       
5610: 20 20 7b 53 51 4c 49 54 45 5f 49 4f 45 52 52 20    {SQLITE_IOERR 
5620: 7c 20 28 31 37 3c 3c 38 29 7d 20 7b 0a 20 20 54  | (17<<8)} {.  T
5630: 68 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  he SQLITE_IOERR_
5640: 44 49 52 5f 43 4c 4f 53 45 20 65 72 72 6f 72 20  DIR_CLOSE error 
5650: 63 6f 64 65 20 69 73 20 6e 6f 20 6c 6f 6e 67 65  code is no longe
5660: 72 20 75 73 65 64 2e 0a 7d 0a 52 45 53 43 4f 44  r used..}.RESCOD
5670: 45 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 53  E SQLITE_IOERR_S
5680: 48 4d 4f 50 45 4e 20 20 20 20 20 20 20 20 20 20  HMOPEN          
5690: 20 7b 53 51 4c 49 54 45 5f 49 4f 45 52 52 20 7c   {SQLITE_IOERR |
56a0: 20 28 31 38 3c 3c 38 29 7d 20 7b 0a 20 20 54 68   (18<<8)} {.  Th
56b0: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 53  e SQLITE_IOERR_S
56c0: 48 4d 4f 50 45 4e 20 65 72 72 6f 72 20 63 6f 64  HMOPEN error cod
56d0: 65 20 69 73 20 61 6e 20 5b 65 78 74 2d 76 2d 70  e is an [ext-v-p
56e0: 72 69 6d 7c 65 78 74 65 6e 64 65 64 20 65 72 72  rim|extended err
56f0: 6f 72 20 63 6f 64 65 5d 0a 20 20 66 6f 72 20 5b  or code].  for [
5700: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5d 20 69 6e  SQLITE_IOERR] in
5710: 64 69 63 61 74 69 6e 67 20 61 6e 20 49 2f 4f 20  dicating an I/O 
5720: 65 72 72 6f 72 0a 20 20 77 69 74 68 69 6e 20 74  error.  within t
5730: 68 65 20 78 53 68 6d 4d 61 70 20 6d 65 74 68 6f  he xShmMap metho
5740: 64 20 6f 6e 20 74 68 65 20 5b 73 71 6c 69 74 65  d on the [sqlite
5750: 33 5f 69 6f 5f 6d 65 74 68 6f 64 73 5d 20 6f 62  3_io_methods] ob
5760: 6a 65 63 74 0a 20 20 77 68 69 6c 65 20 74 72 79  ject.  while try
5770: 69 6e 67 20 74 6f 20 6f 70 65 6e 20 61 20 6e 65  ing to open a ne
5780: 77 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 20  w shared memory 
5790: 73 65 67 6d 65 6e 74 2e 0a 7d 0a 52 45 53 43 4f  segment..}.RESCO
57a0: 44 45 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  DE SQLITE_IOERR_
57b0: 53 48 4d 53 49 5a 45 20 20 20 20 20 20 20 20 20  SHMSIZE         
57c0: 20 20 7b 53 51 4c 49 54 45 5f 49 4f 45 52 52 20    {SQLITE_IOERR 
57d0: 7c 20 28 31 39 3c 3c 38 29 7d 20 7b 0a 20 20 54  | (19<<8)} {.  T
57e0: 68 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  he SQLITE_IOERR_
57f0: 53 48 4d 53 49 5a 45 20 65 72 72 6f 72 20 63 6f  SHMSIZE error co
5800: 64 65 20 69 73 20 61 6e 20 5b 65 78 74 2d 76 2d  de is an [ext-v-
5810: 70 72 69 6d 7c 65 78 74 65 6e 64 65 64 20 65 72  prim|extended er
5820: 72 6f 72 20 63 6f 64 65 5d 0a 20 20 66 6f 72 20  ror code].  for 
5830: 5b 53 51 4c 49 54 45 5f 49 4f 45 52 52 5d 20 69  [SQLITE_IOERR] i
5840: 6e 64 69 63 61 74 69 6e 67 20 61 6e 20 49 2f 4f  ndicating an I/O
5850: 20 65 72 72 6f 72 0a 20 20 77 69 74 68 69 6e 20   error.  within 
5860: 74 68 65 20 78 53 68 6d 4d 61 70 20 6d 65 74 68  the xShmMap meth
5870: 6f 64 20 6f 6e 20 74 68 65 20 5b 73 71 6c 69 74  od on the [sqlit
5880: 65 33 5f 69 6f 5f 6d 65 74 68 6f 64 73 5d 20 6f  e3_io_methods] o
5890: 62 6a 65 63 74 0a 20 20 77 68 69 6c 65 20 74 72  bject.  while tr
58a0: 79 69 6e 67 20 74 6f 20 72 65 73 69 7a 65 20 61  ying to resize a
58b0: 6e 20 65 78 69 73 74 69 6e 67 20 73 68 61 72 65  n existing share
58c0: 64 20 6d 65 6d 6f 72 79 20 73 65 67 6d 65 6e 74  d memory segment
58d0: 2e 0a 7d 0a 52 45 53 43 4f 44 45 20 53 51 4c 49  ..}.RESCODE SQLI
58e0: 54 45 5f 49 4f 45 52 52 5f 53 48 4d 4c 4f 43 4b  TE_IOERR_SHMLOCK
58f0: 20 20 20 20 20 20 20 20 20 20 20 7b 53 51 4c 49             {SQLI
5900: 54 45 5f 49 4f 45 52 52 20 7c 20 28 32 30 3c 3c  TE_IOERR | (20<<
5910: 38 29 7d 20 7b 0a 20 20 54 68 65 20 53 51 4c 49  8)} {.  The SQLI
5920: 54 45 5f 49 4f 45 52 52 5f 53 48 4d 4c 4f 43 4b  TE_IOERR_SHMLOCK
5930: 20 65 72 72 6f 72 20 63 6f 64 65 20 69 73 20 6e   error code is n
5940: 6f 20 6c 6f 6e 67 65 72 20 75 73 65 64 2e 0a 7d  o longer used..}
5950: 0a 52 45 53 43 4f 44 45 20 53 51 4c 49 54 45 5f  .RESCODE SQLITE_
5960: 49 4f 45 52 52 5f 53 48 4d 4d 41 50 20 20 20 20  IOERR_SHMMAP    
5970: 20 20 20 20 20 20 20 20 7b 53 51 4c 49 54 45 5f          {SQLITE_
5980: 49 4f 45 52 52 20 7c 20 28 32 31 3c 3c 38 29 7d  IOERR | (21<<8)}
5990: 20 7b 0a 20 20 54 68 65 20 53 51 4c 49 54 45 5f   {.  The SQLITE_
59a0: 49 4f 45 52 52 5f 53 48 4d 4d 41 50 20 65 72 72  IOERR_SHMMAP err
59b0: 6f 72 20 63 6f 64 65 20 69 73 20 61 6e 20 5b 65  or code is an [e
59c0: 78 74 2d 76 2d 70 72 69 6d 7c 65 78 74 65 6e 64  xt-v-prim|extend
59d0: 65 64 20 65 72 72 6f 72 20 63 6f 64 65 5d 0a 20  ed error code]. 
59e0: 20 66 6f 72 20 5b 53 51 4c 49 54 45 5f 49 4f 45   for [SQLITE_IOE
59f0: 52 52 5d 20 69 6e 64 69 63 61 74 69 6e 67 20 61  RR] indicating a
5a00: 6e 20 49 2f 4f 20 65 72 72 6f 72 0a 20 20 77 69  n I/O error.  wi
5a10: 74 68 69 6e 20 74 68 65 20 78 53 68 6d 4d 61 70  thin the xShmMap
5a20: 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65 20 5b   method on the [
5a30: 73 71 6c 69 74 65 33 5f 69 6f 5f 6d 65 74 68 6f  sqlite3_io_metho
5a40: 64 73 5d 20 6f 62 6a 65 63 74 0a 20 20 77 68 69  ds] object.  whi
5a50: 6c 65 20 74 72 79 69 6e 67 20 74 6f 20 6d 61 70  le trying to map
5a60: 20 61 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79   a shared memory
5a70: 20 73 65 67 6d 65 6e 74 20 69 6e 74 6f 20 74 68   segment into th
5a80: 65 20 70 72 6f 63 65 73 73 20 61 64 64 72 65 73  e process addres
5a90: 73 20 73 70 61 63 65 2e 0a 7d 0a 52 45 53 43 4f  s space..}.RESCO
5aa0: 44 45 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  DE SQLITE_IOERR_
5ab0: 53 45 45 4b 20 20 20 20 20 20 20 20 20 20 20 20  SEEK            
5ac0: 20 20 7b 53 51 4c 49 54 45 5f 49 4f 45 52 52 20    {SQLITE_IOERR 
5ad0: 7c 20 28 32 32 3c 3c 38 29 7d 20 7b 0a 20 20 54  | (22<<8)} {.  T
5ae0: 68 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  he SQLITE_IOERR_
5af0: 53 45 45 4b 20 65 72 72 6f 72 20 63 6f 64 65 20  SEEK error code 
5b00: 69 73 20 61 6e 20 5b 65 78 74 2d 76 2d 70 72 69  is an [ext-v-pri
5b10: 6d 7c 65 78 74 65 6e 64 65 64 20 65 72 72 6f 72  m|extended error
5b20: 20 63 6f 64 65 5d 0a 20 20 66 6f 72 20 5b 53 51   code].  for [SQ
5b30: 4c 49 54 45 5f 49 4f 45 52 52 5d 20 69 6e 64 69  LITE_IOERR] indi
5b40: 63 61 74 69 6e 67 20 61 6e 20 49 2f 4f 20 65 72  cating an I/O er
5b50: 72 6f 72 0a 20 20 77 69 74 68 69 6e 20 74 68 65  ror.  within the
5b60: 20 78 52 65 61 64 20 6f 72 20 78 57 72 69 74 65   xRead or xWrite
5b70: 20 6d 65 74 68 6f 64 73 20 6f 6e 20 74 68 65 20   methods on the 
5b80: 5b 73 71 6c 69 74 65 33 5f 69 6f 5f 6d 65 74 68  [sqlite3_io_meth
5b90: 6f 64 73 5d 20 6f 62 6a 65 63 74 0a 20 20 77 68  ods] object.  wh
5ba0: 69 6c 65 20 74 72 79 69 6e 67 20 74 6f 20 73 65  ile trying to se
5bb0: 65 6b 20 61 20 66 69 6c 65 20 64 65 73 63 72 69  ek a file descri
5bc0: 70 74 6f 72 20 74 6f 20 74 68 65 20 62 65 67 69  ptor to the begi
5bd0: 6e 6e 69 6e 67 20 70 6f 69 6e 74 20 6f 66 20 74  nning point of t
5be0: 68 65 0a 20 20 66 69 6c 65 20 77 68 65 72 65 20  he.  file where 
5bf0: 74 68 65 20 72 65 61 64 20 6f 72 20 77 72 69 74  the read or writ
5c00: 65 20 69 73 20 74 6f 20 6f 63 63 75 72 2e 0a 7d  e is to occur..}
5c10: 0a 52 45 53 43 4f 44 45 20 53 51 4c 49 54 45 5f  .RESCODE SQLITE_
5c20: 49 4f 45 52 52 5f 44 45 4c 45 54 45 5f 4e 4f 45  IOERR_DELETE_NOE
5c30: 4e 54 20 20 20 20 20 20 7b 53 51 4c 49 54 45 5f  NT      {SQLITE_
5c40: 49 4f 45 52 52 20 7c 20 28 32 33 3c 3c 38 29 7d  IOERR | (23<<8)}
5c50: 20 7b 0a 20 20 54 68 65 20 53 51 4c 49 54 45 5f   {.  The SQLITE_
5c60: 49 4f 45 52 52 5f 44 45 4c 45 54 45 5f 4e 4f 45  IOERR_DELETE_NOE
5c70: 4e 54 20 65 72 72 6f 72 20 63 6f 64 65 0a 20 20  NT error code.  
5c80: 69 73 20 61 6e 20 5b 65 78 74 2d 76 2d 70 72 69  is an [ext-v-pri
5c90: 6d 7c 65 78 74 65 6e 64 65 64 20 65 72 72 6f 72  m|extended error
5ca0: 20 63 6f 64 65 5d 0a 20 20 66 6f 72 20 5b 53 51   code].  for [SQ
5cb0: 4c 49 54 45 5f 49 4f 45 52 52 5d 20 69 6e 64 69  LITE_IOERR] indi
5cc0: 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 0a  cating that the.
5cd0: 20 20 78 44 65 6c 65 74 65 20 6d 65 74 68 6f 64    xDelete method
5ce0: 20 6f 6e 20 74 68 65 20 5b 73 71 6c 69 74 65 33   on the [sqlite3
5cf0: 5f 76 66 73 5d 20 6f 62 6a 65 63 74 20 66 61 69  _vfs] object fai
5d00: 6c 65 64 20 62 65 63 61 75 73 65 20 74 68 65 0a  led because the.
5d10: 20 20 66 69 6c 65 20 62 65 69 6e 67 20 64 65 6c    file being del
5d20: 65 74 65 64 20 64 6f 65 73 20 6e 6f 74 20 65 78  eted does not ex
5d30: 69 73 74 2e 0a 7d 0a 52 45 53 43 4f 44 45 20 53  ist..}.RESCODE S
5d40: 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4d 4d 41 50  QLITE_IOERR_MMAP
5d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 53                {S
5d60: 51 4c 49 54 45 5f 49 4f 45 52 52 20 7c 20 28 32  QLITE_IOERR | (2
5d70: 34 3c 3c 38 29 7d 20 7b 0a 20 20 54 68 65 20 53  4<<8)} {.  The S
5d80: 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4d 4d 41 50  QLITE_IOERR_MMAP
5d90: 20 65 72 72 6f 72 20 63 6f 64 65 20 69 73 20 61   error code is a
5da0: 6e 20 5b 65 78 74 2d 76 2d 70 72 69 6d 7c 65 78  n [ext-v-prim|ex
5db0: 74 65 6e 64 65 64 20 65 72 72 6f 72 20 63 6f 64  tended error cod
5dc0: 65 5d 0a 20 20 66 6f 72 20 5b 53 51 4c 49 54 45  e].  for [SQLITE
5dd0: 5f 49 4f 45 52 52 5d 20 69 6e 64 69 63 61 74 69  _IOERR] indicati
5de0: 6e 67 20 61 6e 20 49 2f 4f 20 65 72 72 6f 72 0a  ng an I/O error.
5df0: 20 20 77 69 74 68 69 6e 20 74 68 65 20 78 46 65    within the xFe
5e00: 74 63 68 20 6f 72 20 78 55 6e 66 65 74 63 68 20  tch or xUnfetch 
5e10: 6d 65 74 68 6f 64 73 20 6f 6e 20 74 68 65 20 5b  methods on the [
5e20: 73 71 6c 69 74 65 33 5f 69 6f 5f 6d 65 74 68 6f  sqlite3_io_metho
5e30: 64 73 5d 20 6f 62 6a 65 63 74 0a 20 20 77 68 69  ds] object.  whi
5e40: 6c 65 20 74 72 79 69 6e 67 20 74 6f 20 6d 61 70  le trying to map
5e50: 20 6f 72 20 75 6e 6d 61 70 20 70 61 72 74 20 6f   or unmap part o
5e60: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
5e70: 69 6c 65 20 69 6e 74 6f 20 74 68 65 0a 20 20 70  ile into the.  p
5e80: 72 6f 63 65 73 73 20 61 64 64 72 65 73 73 20 73  rocess address s
5e90: 70 61 63 65 2e 0a 7d 0a 52 45 53 43 4f 44 45 20  pace..}.RESCODE 
5ea0: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 47 45 54  SQLITE_IOERR_GET
5eb0: 54 45 4d 50 50 41 54 48 20 20 20 20 20 20 20 7b  TEMPPATH       {
5ec0: 53 51 4c 49 54 45 5f 49 4f 45 52 52 20 7c 20 28  SQLITE_IOERR | (
5ed0: 32 35 3c 3c 38 29 7d 20 7b 0a 20 20 54 68 65 20  25<<8)} {.  The 
5ee0: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 47 45 54  SQLITE_IOERR_GET
5ef0: 54 45 4d 50 50 41 54 48 20 65 72 72 6f 72 20 63  TEMPPATH error c
5f00: 6f 64 65 20 69 73 20 61 6e 20 5b 65 78 74 2d 76  ode is an [ext-v
5f10: 2d 70 72 69 6d 7c 65 78 74 65 6e 64 65 64 20 65  -prim|extended e
5f20: 72 72 6f 72 20 63 6f 64 65 5d 0a 20 20 66 6f 72  rror code].  for
5f30: 20 5b 53 51 4c 49 54 45 5f 49 4f 45 52 52 5d 20   [SQLITE_IOERR] 
5f40: 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20  indicating that 
5f50: 74 68 65 20 5b 56 46 53 5d 20 69 73 20 75 6e 61  the [VFS] is una
5f60: 62 6c 65 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ble to determine
5f70: 0a 20 20 61 20 73 75 69 74 61 62 6c 65 20 64 69  .  a suitable di
5f80: 72 65 63 74 6f 72 79 20 69 6e 20 77 68 69 63 68  rectory in which
5f90: 20 74 6f 20 70 6c 61 63 65 20 74 65 6d 70 6f 72   to place tempor
5fa0: 61 72 79 20 66 69 6c 65 73 2e 0a 7d 0a 52 45 53  ary files..}.RES
5fb0: 43 4f 44 45 20 53 51 4c 49 54 45 5f 49 4f 45 52  CODE SQLITE_IOER
5fc0: 52 5f 43 4f 4e 56 50 41 54 48 20 20 20 20 20 20  R_CONVPATH      
5fd0: 20 20 20 20 7b 53 51 4c 49 54 45 5f 49 4f 45 52      {SQLITE_IOER
5fe0: 52 20 7c 20 28 32 36 3c 3c 38 29 7d 20 7b 0a 20  R | (26<<8)} {. 
5ff0: 20 54 68 65 20 53 51 4c 49 54 45 5f 49 4f 45 52   The SQLITE_IOER
6000: 52 5f 43 4f 4e 56 50 41 54 48 20 65 72 72 6f 72  R_CONVPATH error
6010: 20 63 6f 64 65 20 69 73 20 61 6e 20 5b 65 78 74   code is an [ext
6020: 2d 76 2d 70 72 69 6d 7c 65 78 74 65 6e 64 65 64  -v-prim|extended
6030: 20 65 72 72 6f 72 20 63 6f 64 65 5d 0a 20 20 66   error code].  f
6040: 6f 72 20 5b 53 51 4c 49 54 45 5f 49 4f 45 52 52  or [SQLITE_IOERR
6050: 5d 20 75 73 65 64 20 6f 6e 6c 79 20 62 79 20 43  ] used only by C
6060: 79 67 77 69 6e 20 5b 56 46 53 5d 20 61 6e 64 20  ygwin [VFS] and 
6070: 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 0a  indicating that.
6080: 20 20 74 68 65 20 63 79 67 77 69 6e 5f 63 6f 6e    the cygwin_con
6090: 76 5f 70 61 74 68 28 29 20 73 79 73 74 65 6d 20  v_path() system 
60a0: 63 61 6c 6c 20 66 61 69 6c 65 64 2e 0a 20 20 53  call failed..  S
60b0: 65 65 20 61 6c 73 6f 3a 20 5b 53 51 4c 49 54 45  ee also: [SQLITE
60c0: 5f 43 41 4e 54 4f 50 45 4e 5f 43 4f 4e 56 50 41  _CANTOPEN_CONVPA
60d0: 54 48 5d 0a 7d 0a 52 45 53 43 4f 44 45 20 53 51  TH].}.RESCODE SQ
60e0: 4c 49 54 45 5f 4c 4f 43 4b 45 44 5f 53 48 41 52  LITE_LOCKED_SHAR
60f0: 45 44 43 41 43 48 45 20 20 20 20 20 20 7b 53 51  EDCACHE      {SQ
6100: 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 7c 20 20 28  LITE_LOCKED |  (
6110: 31 3c 3c 38 29 7d 20 7b 0a 20 20 54 68 65 20 53  1<<8)} {.  The S
6120: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 5f 53 48 41  QLITE_LOCKED_SHA
6130: 52 45 44 43 41 43 48 45 20 65 72 72 6f 72 20 63  REDCACHE error c
6140: 6f 64 65 20 69 73 0a 20 20 61 6e 20 5b 65 78 74  ode is.  an [ext
6150: 2d 76 2d 70 72 69 6d 7c 65 78 74 65 6e 64 65 64  -v-prim|extended
6160: 20 65 72 72 6f 72 20 63 6f 64 65 5d 20 66 6f 72   error code] for
6170: 20 5b 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 5d   [SQLITE_LOCKED]
6180: 0a 20 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  .  indicating th
6190: 61 74 20 74 68 65 20 6c 6f 63 6b 69 6e 67 20 63  at the locking c
61a0: 6f 6e 66 6c 69 63 74 20 68 61 73 20 6f 63 63 75  onflict has occu
61b0: 72 72 65 64 20 64 75 65 20 74 6f 20 63 6f 6e 74  rred due to cont
61c0: 65 6e 74 69 6f 6e 0a 20 20 77 69 74 68 20 61 20  ention.  with a 
61d0: 64 69 66 66 65 72 65 6e 74 20 5b 64 61 74 61 62  different [datab
61e0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20  ase connection] 
61f0: 74 68 61 74 20 68 61 70 70 65 6e 73 20 74 6f 20  that happens to 
6200: 68 6f 6c 64 20 61 20 0a 20 20 5b 73 68 61 72 65  hold a .  [share
6210: 64 20 63 61 63 68 65 5d 20 77 69 74 68 20 74 68  d cache] with th
6220: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
6230: 63 74 69 6f 6e 20 74 6f 20 77 68 69 63 68 20 74  ction to which t
6240: 68 65 20 65 72 72 6f 72 20 77 61 73 0a 20 20 72  he error was.  r
6250: 65 74 75 72 6e 65 64 2e 20 20 46 6f 72 20 65 78  eturned.  For ex
6260: 61 6d 70 6c 65 2c 20 69 66 20 74 68 65 20 6f 74  ample, if the ot
6270: 68 65 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e  her database con
6280: 6e 65 63 74 69 6f 6e 20 69 73 20 68 6f 6c 64 69  nection is holdi
6290: 6e 67 0a 20 20 61 6e 20 5b 65 78 63 6c 75 73 69  ng.  an [exclusi
62a0: 76 65 20 6c 6f 63 6b 5d 20 6f 6e 20 74 68 65 20  ve lock] on the 
62b0: 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74  database, then t
62c0: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
62d0: 65 63 74 69 6f 6e 0a 20 20 74 68 61 74 20 72 65  ection.  that re
62e0: 63 65 69 76 65 73 20 74 68 69 73 20 65 72 72 6f  ceives this erro
62f0: 72 20 77 69 6c 6c 20 62 65 20 75 6e 61 62 6c 65  r will be unable
6300: 20 74 6f 20 72 65 61 64 20 6f 72 20 77 72 69 74   to read or writ
6310: 65 20 61 6e 79 20 70 61 72 74 0a 20 20 6f 66 20  e any part.  of 
6320: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
6330: 65 20 75 6e 6c 65 73 73 20 69 74 20 68 61 73 20  e unless it has 
6340: 74 68 65 20 5b 72 65 61 64 5f 75 6e 63 6f 6d 6d  the [read_uncomm
6350: 69 74 74 65 64 20 70 72 61 67 6d 61 5d 0a 20 20  itted pragma].  
6360: 65 6e 61 62 6c 65 64 2e 0a 20 20 3c 70 3e 0a 20  enabled..  <p>. 
6370: 20 54 68 65 20 53 51 4c 49 54 45 5f 4c 4f 43 4b   The SQLITE_LOCK
6380: 45 44 5f 53 48 41 52 45 43 41 43 48 45 20 65 72  ED_SHARECACHE er
6390: 72 6f 72 20 63 6f 64 65 20 77 6f 72 6b 73 20 76  ror code works v
63a0: 65 72 79 20 6d 75 63 68 20 6c 69 6b 65 20 74 68  ery much like th
63b0: 65 0a 20 20 5b 53 51 4c 49 54 45 5f 42 55 53 59  e.  [SQLITE_BUSY
63c0: 5d 20 65 72 72 6f 72 20 63 6f 64 65 20 65 78 63  ] error code exc
63d0: 65 70 74 20 74 68 61 74 20 53 51 4c 49 54 45 5f  ept that SQLITE_
63e0: 4c 4f 43 4b 45 44 5f 53 48 41 52 45 43 41 43 48  LOCKED_SHARECACH
63f0: 45 20 69 73 0a 20 20 66 6f 72 20 73 65 70 61 72  E is.  for separ
6400: 61 74 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ate database con
6410: 6e 65 63 74 69 6f 6e 73 20 74 68 61 74 20 73 68  nections that sh
6420: 61 72 65 20 61 20 63 61 63 68 65 20 77 68 65 72  are a cache wher
6430: 65 61 73 20 0a 20 20 53 51 4c 49 54 45 5f 42 55  eas .  SQLITE_BU
6440: 53 59 20 69 73 20 66 6f 72 20 74 68 65 20 6d 75  SY is for the mu
6450: 63 68 20 6d 6f 72 65 20 63 6f 6d 6d 6f 6e 20 63  ch more common c
6460: 61 73 65 20 6f 66 20 73 65 70 61 72 61 74 65 20  ase of separate 
6470: 64 61 74 61 62 61 73 65 0a 20 20 63 6f 6e 6e 65  database.  conne
6480: 63 74 69 6f 6e 73 20 74 68 61 74 20 64 6f 20 6e  ctions that do n
6490: 6f 74 20 73 68 61 72 65 20 74 68 65 20 73 61 6d  ot share the sam
64a0: 65 20 63 61 63 68 65 2e 20 20 41 6c 73 6f 2c 20  e cache.  Also, 
64b0: 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62  the.  [sqlite3_b
64c0: 75 73 79 5f 68 61 6e 64 6c 65 72 28 29 5d 20 61  usy_handler()] a
64d0: 6e 64 20 5b 73 71 6c 69 74 65 33 5f 62 75 73 79  nd [sqlite3_busy
64e0: 5f 74 69 6d 65 6f 75 74 28 29 5d 20 69 6e 74 65  _timeout()] inte
64f0: 72 66 61 63 65 73 0a 20 20 64 6f 20 6e 6f 74 20  rfaces.  do not 
6500: 68 65 6c 70 20 69 6e 20 72 65 73 6f 6c 76 69 6e  help in resolvin
6510: 67 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 5f  g SQLITE_LOCKED_
6520: 53 48 41 52 45 44 43 41 43 48 45 20 63 6f 6e 66  SHAREDCACHE conf
6530: 6c 69 63 74 73 2e 0a 7d 0a 52 45 53 43 4f 44 45  licts..}.RESCODE
6540: 20 53 51 4c 49 54 45 5f 42 55 53 59 5f 52 45 43   SQLITE_BUSY_REC
6550: 4f 56 45 52 59 20 20 20 20 20 20 20 20 20 20 20  OVERY           
6560: 7b 53 51 4c 49 54 45 5f 42 55 53 59 20 20 20 7c  {SQLITE_BUSY   |
6570: 20 20 28 31 3c 3c 38 29 7d 20 7b 0a 20 20 54 68    (1<<8)} {.  Th
6580: 65 20 53 51 4c 49 54 45 5f 42 55 53 59 5f 52 45  e SQLITE_BUSY_RE
6590: 43 4f 56 45 52 59 20 65 72 72 6f 72 20 63 6f 64  COVERY error cod
65a0: 65 20 69 73 20 61 6e 20 5b 65 78 74 2d 76 2d 70  e is an [ext-v-p
65b0: 72 69 6d 7c 65 78 74 65 6e 64 65 64 20 65 72 72  rim|extended err
65c0: 6f 72 20 63 6f 64 65 5d 0a 20 20 66 6f 72 20 5b  or code].  for [
65d0: 53 51 4c 49 54 45 5f 42 55 53 59 5d 20 74 68 61  SQLITE_BUSY] tha
65e0: 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74  t indicates that
65f0: 20 61 6e 20 6f 70 65 72 61 74 69 6f 6e 20 63 6f   an operation co
6600: 75 6c 64 20 6e 6f 74 20 63 6f 6e 74 69 6e 75 65  uld not continue
6610: 0a 20 20 62 65 63 61 75 73 65 20 61 6e 6f 74 68  .  because anoth
6620: 65 72 20 70 72 6f 63 65 73 73 20 69 73 20 62 75  er process is bu
6630: 73 79 20 72 65 63 6f 76 65 72 69 6e 67 20 61 20  sy recovering a 
6640: 5b 57 41 4c 20 6d 6f 64 65 5d 20 64 61 74 61 62  [WAL mode] datab
6650: 61 73 65 20 66 69 6c 65 0a 20 20 66 6f 6c 6c 6f  ase file.  follo
6660: 77 69 6e 67 20 61 20 63 72 61 73 68 2e 20 20 54  wing a crash.  T
6670: 68 65 20 53 51 4c 49 54 45 5f 42 55 53 59 5f 52  he SQLITE_BUSY_R
6680: 45 43 4f 56 45 52 59 20 65 72 72 6f 72 20 63 6f  ECOVERY error co
6690: 64 65 20 6f 6e 6c 79 20 6f 63 63 75 72 73 0a 20  de only occurs. 
66a0: 20 6f 6e 20 5b 57 41 4c 20 6d 6f 64 65 5d 20 64   on [WAL mode] d
66b0: 61 74 61 62 61 73 65 73 2e 0a 7d 0a 52 45 53 43  atabases..}.RESC
66c0: 4f 44 45 20 53 51 4c 49 54 45 5f 42 55 53 59 5f  ODE SQLITE_BUSY_
66d0: 53 4e 41 50 53 48 4f 54 20 20 20 20 20 20 20 20  SNAPSHOT        
66e0: 20 20 20 7b 53 51 4c 49 54 45 5f 42 55 53 59 20     {SQLITE_BUSY 
66f0: 20 20 7c 20 20 28 32 3c 3c 38 29 7d 20 7b 0a 20    |  (2<<8)} {. 
6700: 20 54 68 65 20 53 51 4c 49 54 45 5f 42 55 53 59   The SQLITE_BUSY
6710: 5f 53 4e 41 50 53 48 4f 54 20 65 72 72 6f 72 20  _SNAPSHOT error 
6720: 63 6f 64 65 20 69 73 20 61 6e 20 5b 65 78 74 2d  code is an [ext-
6730: 76 2d 70 72 69 6d 7c 65 78 74 65 6e 64 65 64 20  v-prim|extended 
6740: 65 72 72 6f 72 20 63 6f 64 65 5d 0a 20 20 66 6f  error code].  fo
6750: 72 20 5b 53 51 4c 49 54 45 5f 42 55 53 59 5d 20  r [SQLITE_BUSY] 
6760: 74 68 61 74 20 6f 63 63 75 72 73 20 6f 6e 20 5b  that occurs on [
6770: 57 41 4c 20 6d 6f 64 65 5d 20 64 61 74 61 62 61  WAL mode] databa
6780: 73 65 73 20 77 68 65 6e 20 61 20 64 61 74 61 62  ses when a datab
6790: 61 73 65 0a 20 20 63 6f 6e 6e 65 63 74 69 6f 6e  ase.  connection
67a0: 20 74 72 69 65 73 20 74 6f 20 70 72 6f 6d 6f 74   tries to promot
67b0: 65 20 61 20 72 65 61 64 20 74 72 61 6e 73 61 63  e a read transac
67c0: 74 69 6f 6e 20 69 6e 74 6f 20 61 20 77 72 69 74  tion into a writ
67d0: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20  e transaction.  
67e0: 62 75 74 20 66 69 6e 64 73 20 74 68 61 74 20 61  but finds that a
67f0: 6e 6f 74 68 65 72 20 5b 64 61 74 61 62 61 73 65  nother [database
6800: 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 68 61 73   connection] has
6810: 20 61 6c 72 65 61 64 79 20 77 72 69 74 74 65 6e   already written
6820: 20 74 6f 20 74 68 65 0a 20 20 64 61 74 61 62 61   to the.  databa
6830: 73 65 20 61 6e 64 20 74 68 75 73 20 69 6e 76 61  se and thus inva
6840: 6c 69 64 61 74 65 64 20 70 72 69 6f 72 20 72 65  lidated prior re
6850: 61 64 73 2e 0a 20 20 3c 70 3e 0a 20 20 54 68 65  ads..  <p>.  The
6860: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 63 65 6e 61   following scena
6870: 72 69 6f 20 69 6c 6c 75 73 74 72 61 74 65 73 20  rio illustrates 
6880: 68 6f 77 20 61 6e 20 53 51 4c 49 54 45 5f 42 55  how an SQLITE_BU
6890: 53 59 5f 53 4e 41 50 53 48 4f 54 20 65 72 72 6f  SY_SNAPSHOT erro
68a0: 72 0a 20 20 6d 69 67 68 74 20 61 72 69 73 65 3a  r.  might arise:
68b0: 0a 20 20 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 20 50  .  <ol>.  <li> P
68c0: 72 6f 63 65 73 73 20 41 20 73 74 61 72 74 73 20  rocess A starts 
68d0: 61 20 72 65 61 64 20 74 72 61 6e 73 61 63 74 69  a read transacti
68e0: 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  on on the databa
68f0: 73 65 20 61 6e 64 20 64 6f 65 73 20 6f 6e 65 0a  se and does one.
6900: 20 20 20 20 20 20 20 6f 72 20 6d 6f 72 65 20 53         or more S
6910: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
6920: 20 20 50 72 6f 63 65 73 73 20 41 20 6b 65 65 70    Process A keep
6930: 73 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  s the transactio
6940: 6e 20 6f 70 65 6e 2e 0a 20 20 3c 6c 69 3e 20 50  n open..  <li> P
6950: 72 6f 63 65 73 73 20 42 20 75 70 64 61 74 65 73  rocess B updates
6960: 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 63   the database, c
6970: 68 61 6e 67 69 6e 67 20 76 61 6c 75 65 73 20 70  hanging values p
6980: 72 65 76 69 6f 75 73 20 72 65 61 64 20 62 79 0a  revious read by.
6990: 20 20 20 20 20 20 20 70 72 6f 63 65 73 73 20 41         process A
69a0: 2e 0a 20 20 3c 6c 69 3e 20 50 72 6f 63 65 73 73  ..  <li> Process
69b0: 20 41 20 6e 6f 77 20 74 72 69 65 73 20 74 6f 20   A now tries to 
69c0: 77 72 69 74 65 20 74 6f 20 74 68 65 20 64 61 74  write to the dat
69d0: 61 62 61 73 65 2e 20 20 42 75 74 20 70 72 6f 63  abase.  But proc
69e0: 65 73 73 20 41 27 73 20 76 69 65 77 0a 20 20 20  ess A's view.   
69f0: 20 20 20 20 6f 66 20 74 68 65 20 64 61 74 61 62      of the datab
6a00: 61 73 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e  ase content is n
6a10: 6f 77 20 6f 62 73 6f 6c 65 74 65 20 62 65 63 61  ow obsolete beca
6a20: 75 73 65 20 70 72 6f 63 65 73 73 20 42 20 68 61  use process B ha
6a30: 73 0a 20 20 20 20 20 20 20 6d 6f 64 69 66 69 65  s.       modifie
6a40: 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  d the database f
6a50: 69 6c 65 20 61 66 74 65 72 20 70 72 6f 63 65 73  ile after proces
6a60: 73 20 41 20 72 65 61 64 20 66 72 6f 6d 20 69 74  s A read from it
6a70: 2e 20 20 48 65 6e 63 65 0a 20 20 20 20 20 20 20  .  Hence.       
6a80: 70 72 6f 63 65 73 73 20 42 20 67 65 74 73 20 61  process B gets a
6a90: 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 5f 53 4e  n SQLITE_BUSY_SN
6aa0: 41 50 53 48 4f 54 20 65 72 72 6f 72 2e 0a 20 20  APSHOT error..  
6ab0: 3c 2f 6f 6c 3e 0a 7d 0a 52 45 53 43 4f 44 45 20  </ol>.}.RESCODE 
6ac0: 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f  SQLITE_CANTOPEN_
6ad0: 4e 4f 54 45 4d 50 44 49 52 20 20 20 20 20 20 7b  NOTEMPDIR      {
6ae0: 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 20  SQLITE_CANTOPEN 
6af0: 7c 20 28 31 3c 3c 38 29 7d 20 7b 0a 20 20 54 68  | (1<<8)} {.  Th
6b00: 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45  e SQLITE_CANTOPE
6b10: 4e 5f 4e 4f 54 45 4d 50 44 49 52 20 65 72 72 6f  N_NOTEMPDIR erro
6b20: 72 20 63 6f 64 65 20 69 73 20 6e 6f 20 6c 6f 6e  r code is no lon
6b30: 67 65 72 20 75 73 65 64 2e 0a 7d 0a 52 45 53 43  ger used..}.RESC
6b40: 4f 44 45 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f  ODE SQLITE_CANTO
6b50: 50 45 4e 5f 49 53 44 49 52 20 20 20 20 20 20 20  PEN_ISDIR       
6b60: 20 20 20 7b 53 51 4c 49 54 45 5f 43 41 4e 54 4f     {SQLITE_CANTO
6b70: 50 45 4e 20 7c 20 28 32 3c 3c 38 29 7d 20 7b 0a  PEN | (2<<8)} {.
6b80: 20 20 54 68 65 20 53 51 4c 49 54 45 5f 43 41 4e    The SQLITE_CAN
6b90: 54 4f 50 45 4e 5f 49 53 44 49 52 20 65 72 72 6f  TOPEN_ISDIR erro
6ba0: 72 20 63 6f 64 65 20 69 73 20 61 6e 20 5b 65 78  r code is an [ex
6bb0: 74 2d 76 2d 70 72 69 6d 7c 65 78 74 65 6e 64 65  t-v-prim|extende
6bc0: 64 20 65 72 72 6f 72 20 63 6f 64 65 5d 0a 20 20  d error code].  
6bd0: 66 6f 72 20 5b 53 51 4c 49 54 45 5f 43 41 4e 54  for [SQLITE_CANT
6be0: 4f 50 45 4e 5d 20 69 6e 64 69 63 61 74 69 6e 67  OPEN] indicating
6bf0: 20 74 68 61 74 20 61 20 66 69 6c 65 20 6f 70 65   that a file ope
6c00: 6e 20 6f 70 65 72 61 74 69 6f 6e 20 66 61 69 6c  n operation fail
6c10: 65 64 20 62 65 63 61 75 73 65 0a 20 20 74 68 65  ed because.  the
6c20: 20 66 69 6c 65 20 69 73 20 72 65 61 6c 6c 79 20   file is really 
6c30: 61 20 64 69 72 65 63 74 6f 72 79 2e 0a 7d 0a 52  a directory..}.R
6c40: 45 53 43 4f 44 45 20 53 51 4c 49 54 45 5f 43 41  ESCODE SQLITE_CA
6c50: 4e 54 4f 50 45 4e 5f 46 55 4c 4c 50 41 54 48 20  NTOPEN_FULLPATH 
6c60: 20 20 20 20 20 20 7b 53 51 4c 49 54 45 5f 43 41        {SQLITE_CA
6c70: 4e 54 4f 50 45 4e 20 7c 20 28 33 3c 3c 38 29 7d  NTOPEN | (3<<8)}
6c80: 20 7b 0a 20 20 54 68 65 20 53 51 4c 49 54 45 5f   {.  The SQLITE_
6c90: 43 41 4e 54 4f 50 45 4e 5f 46 55 4c 4c 50 41 54  CANTOPEN_FULLPAT
6ca0: 48 20 65 72 72 6f 72 20 63 6f 64 65 20 69 73 20  H error code is 
6cb0: 61 6e 20 5b 65 78 74 2d 76 2d 70 72 69 6d 7c 65  an [ext-v-prim|e
6cc0: 78 74 65 6e 64 65 64 20 65 72 72 6f 72 20 63 6f  xtended error co
6cd0: 64 65 5d 0a 20 20 66 6f 72 20 5b 53 51 4c 49 54  de].  for [SQLIT
6ce0: 45 5f 43 41 4e 54 4f 50 45 4e 5d 20 69 6e 64 69  E_CANTOPEN] indi
6cf0: 63 61 74 69 6e 67 20 74 68 61 74 20 61 20 66 69  cating that a fi
6d00: 6c 65 20 6f 70 65 6e 20 6f 70 65 72 61 74 69 6f  le open operatio
6d10: 6e 20 66 61 69 6c 65 64 20 62 65 63 61 75 73 65  n failed because
6d20: 0a 20 20 74 68 65 20 6f 70 65 72 61 74 69 6e 67  .  the operating
6d30: 20 73 79 73 74 65 6d 20 77 61 73 20 75 6e 61 62   system was unab
6d40: 6c 65 20 74 6f 20 63 6f 6e 76 65 72 74 20 74 68  le to convert th
6d50: 65 20 66 69 6c 65 6e 61 6d 65 20 69 6e 74 6f 20  e filename into 
6d60: 61 20 66 75 6c 6c 20 70 61 74 68 6e 61 6d 65 2e  a full pathname.
6d70: 0a 7d 0a 52 45 53 43 4f 44 45 20 53 51 4c 49 54  .}.RESCODE SQLIT
6d80: 45 5f 43 41 4e 54 4f 50 45 4e 5f 43 4f 4e 56 50  E_CANTOPEN_CONVP
6d90: 41 54 48 20 20 20 20 20 20 20 7b 53 51 4c 49 54  ATH       {SQLIT
6da0: 45 5f 43 41 4e 54 4f 50 45 4e 20 7c 20 28 34 3c  E_CANTOPEN | (4<
6db0: 3c 38 29 7d 20 7b 0a 20 20 54 68 65 20 53 51 4c  <8)} {.  The SQL
6dc0: 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 43 4f 4e  ITE_CANTOPEN_CON
6dd0: 56 50 41 54 48 20 65 72 72 6f 72 20 63 6f 64 65  VPATH error code
6de0: 20 69 73 20 61 6e 20 5b 65 78 74 2d 76 2d 70 72   is an [ext-v-pr
6df0: 69 6d 7c 65 78 74 65 6e 64 65 64 20 65 72 72 6f  im|extended erro
6e00: 72 20 63 6f 64 65 5d 0a 20 20 66 6f 72 20 5b 53  r code].  for [S
6e10: 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5d 20  QLITE_CANTOPEN] 
6e20: 75 73 65 64 20 6f 6e 6c 79 20 62 79 20 43 79 67  used only by Cyg
6e30: 77 69 6e 20 5b 56 46 53 5d 20 61 6e 64 20 69 6e  win [VFS] and in
6e40: 64 69 63 61 74 69 6e 67 20 74 68 61 74 0a 20 20  dicating that.  
6e50: 74 68 65 20 63 79 67 77 69 6e 5f 63 6f 6e 76 5f  the cygwin_conv_
6e60: 70 61 74 68 28 29 20 73 79 73 74 65 6d 20 63 61  path() system ca
6e70: 6c 6c 20 66 61 69 6c 65 64 20 77 68 69 6c 65 20  ll failed while 
6e80: 74 72 79 69 6e 67 20 74 6f 20 6f 70 65 6e 20 61  trying to open a
6e90: 20 66 69 6c 65 2e 0a 20 20 53 65 65 20 61 6c 73   file..  See als
6ea0: 6f 3a 20 5b 53 51 4c 49 54 45 5f 49 4f 45 52 52  o: [SQLITE_IOERR
6eb0: 5f 43 4f 4e 56 50 41 54 48 5d 0a 7d 0a 52 45 53  _CONVPATH].}.RES
6ec0: 43 4f 44 45 20 53 51 4c 49 54 45 5f 43 4f 52 52  CODE SQLITE_CORR
6ed0: 55 50 54 5f 56 54 41 42 20 20 20 20 20 20 20 20  UPT_VTAB        
6ee0: 20 20 20 20 7b 53 51 4c 49 54 45 5f 43 4f 52 52      {SQLITE_CORR
6ef0: 55 50 54 20 7c 20 28 31 3c 3c 38 29 7d 20 7b 0a  UPT | (1<<8)} {.
6f00: 20 20 54 68 65 20 53 51 4c 49 54 45 5f 43 4f 52    The SQLITE_COR
6f10: 52 55 50 54 5f 56 54 41 42 20 65 72 72 6f 72 20  RUPT_VTAB error 
6f20: 63 6f 64 65 20 69 73 20 61 6e 20 5b 65 78 74 2d  code is an [ext-
6f30: 76 2d 70 72 69 6d 7c 65 78 74 65 6e 64 65 64 20  v-prim|extended 
6f40: 65 72 72 6f 72 20 63 6f 64 65 5d 0a 20 20 66 6f  error code].  fo
6f50: 72 20 5b 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  r [SQLITE_CORRUP
6f60: 54 5d 20 75 73 65 64 20 62 79 20 5b 76 69 72 74  T] used by [virt
6f70: 75 61 6c 20 74 61 62 6c 65 73 5d 2e 20 20 41 20  ual tables].  A 
6f80: 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 5d 20  [virtual table] 
6f90: 6d 69 67 68 74 0a 20 20 72 65 74 75 72 6e 20 53  might.  return S
6fa0: 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 56 54  QLITE_CORRUPT_VT
6fb0: 41 42 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74  AB to indicate t
6fc0: 68 61 74 20 63 6f 6e 74 65 6e 74 20 69 6e 20 74  hat content in t
6fd0: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
6fe0: 0a 20 20 69 73 20 63 6f 72 72 75 70 74 2e 0a 7d  .  is corrupt..}
6ff0: 0a 52 45 53 43 4f 44 45 20 53 51 4c 49 54 45 5f  .RESCODE SQLITE_
7000: 52 45 41 44 4f 4e 4c 59 5f 52 45 43 4f 56 45 52  READONLY_RECOVER
7010: 59 20 20 20 20 20 20 20 7b 53 51 4c 49 54 45 5f  Y       {SQLITE_
7020: 52 45 41 44 4f 4e 4c 59 20 7c 20 28 31 3c 3c 38  READONLY | (1<<8
7030: 29 7d 20 7b 0a 20 20 54 68 65 20 53 51 4c 49 54  )} {.  The SQLIT
7040: 45 5f 52 45 41 44 4f 4e 4c 59 5f 52 45 43 4f 56  E_READONLY_RECOV
7050: 45 52 59 20 65 72 72 6f 72 20 63 6f 64 65 20 69  ERY error code i
7060: 73 20 61 6e 20 5b 65 78 74 2d 76 2d 70 72 69 6d  s an [ext-v-prim
7070: 7c 65 78 74 65 6e 64 65 64 20 65 72 72 6f 72 20  |extended error 
7080: 63 6f 64 65 5d 0a 20 20 66 6f 72 20 5b 53 51 4c  code].  for [SQL
7090: 49 54 45 5f 52 45 41 44 4f 4e 4c 59 5d 2e 20 20  ITE_READONLY].  
70a0: 54 68 65 20 53 51 4c 49 54 45 5f 52 45 41 44 4f  The SQLITE_READO
70b0: 4e 4c 59 5f 52 45 43 4f 56 45 52 59 20 65 72 72  NLY_RECOVERY err
70c0: 6f 72 20 63 6f 64 65 20 69 6e 64 69 63 61 74 65  or code indicate
70d0: 73 0a 20 20 74 68 61 74 20 61 20 5b 57 41 4c 20  s.  that a [WAL 
70e0: 6d 6f 64 65 5d 20 64 61 74 61 62 61 73 65 20 63  mode] database c
70f0: 61 6e 6e 6f 74 20 62 65 20 6f 70 65 6e 65 64 20  annot be opened 
7100: 62 65 63 61 75 73 65 20 74 68 65 20 64 61 74 61  because the data
7110: 62 61 73 65 20 66 69 6c 65 0a 20 20 6e 65 65 64  base file.  need
7120: 73 20 74 6f 20 62 65 20 72 65 63 6f 76 65 72 65  s to be recovere
7130: 64 20 61 6e 64 20 72 65 63 6f 76 65 72 79 20 72  d and recovery r
7140: 65 71 75 69 72 65 73 20 77 72 69 74 65 20 61 63  equires write ac
7150: 63 65 73 73 20 62 75 74 20 6f 6e 6c 79 0a 20 20  cess but only.  
7160: 72 65 61 64 20 61 63 63 65 73 73 20 69 73 20 61  read access is a
7170: 76 61 69 6c 61 62 6c 65 2e 0a 7d 0a 52 45 53 43  vailable..}.RESC
7180: 4f 44 45 20 53 51 4c 49 54 45 5f 52 45 41 44 4f  ODE SQLITE_READO
7190: 4e 4c 59 5f 43 41 4e 54 4c 4f 43 4b 20 20 20 20  NLY_CANTLOCK    
71a0: 20 20 20 7b 53 51 4c 49 54 45 5f 52 45 41 44 4f     {SQLITE_READO
71b0: 4e 4c 59 20 7c 20 28 32 3c 3c 38 29 7d 20 7b 0a  NLY | (2<<8)} {.
71c0: 20 20 54 68 65 20 53 51 4c 49 54 45 5f 52 45 41    The SQLITE_REA
71d0: 44 4f 4e 4c 59 5f 43 41 4e 54 4c 4f 43 4b 20 65  DONLY_CANTLOCK e
71e0: 72 72 6f 72 20 63 6f 64 65 20 69 73 20 61 6e 20  rror code is an 
71f0: 5b 65 78 74 2d 76 2d 70 72 69 6d 7c 65 78 74 65  [ext-v-prim|exte
7200: 6e 64 65 64 20 65 72 72 6f 72 20 63 6f 64 65 5d  nded error code]
7210: 0a 20 20 66 6f 72 20 5b 53 51 4c 49 54 45 5f 52  .  for [SQLITE_R
7220: 45 41 44 4f 4e 4c 59 5d 2e 20 20 54 68 65 20 53  EADONLY].  The S
7230: 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 5f 43  QLITE_READONLY_C
7240: 41 4e 54 4c 4f 43 4b 20 65 72 72 6f 72 20 63 6f  ANTLOCK error co
7250: 64 65 20 69 6e 64 69 63 61 74 65 73 0a 20 20 74  de indicates.  t
7260: 68 61 74 20 53 51 4c 69 74 65 20 69 73 20 75 6e  hat SQLite is un
7270: 61 62 6c 65 20 74 6f 20 6f 62 74 61 69 6e 20 61  able to obtain a
7280: 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 61 20   read lock on a 
7290: 5b 57 41 4c 20 6d 6f 64 65 5d 20 64 61 74 61 62  [WAL mode] datab
72a0: 61 73 65 0a 20 20 62 65 63 61 75 73 65 20 74 68  ase.  because th
72b0: 65 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20  e shared-memory 
72c0: 66 69 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20  file associated 
72d0: 77 69 74 68 20 74 68 61 74 20 64 61 74 61 62 61  with that databa
72e0: 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e  se is read-only.
72f0: 0a 7d 0a 52 45 53 43 4f 44 45 20 53 51 4c 49 54  .}.RESCODE SQLIT
7300: 45 5f 52 45 41 44 4f 4e 4c 59 5f 52 4f 4c 4c 42  E_READONLY_ROLLB
7310: 41 43 4b 20 20 20 20 20 20 20 7b 53 51 4c 49 54  ACK       {SQLIT
7320: 45 5f 52 45 41 44 4f 4e 4c 59 20 7c 20 28 33 3c  E_READONLY | (3<
7330: 3c 38 29 7d 20 7b 0a 20 20 54 68 65 20 53 51 4c  <8)} {.  The SQL
7340: 49 54 45 5f 52 45 41 44 4f 4e 4c 59 5f 52 4f 4c  ITE_READONLY_ROL
7350: 4c 42 41 43 4b 20 65 72 72 6f 72 20 63 6f 64 65  LBACK error code
7360: 20 69 73 20 61 6e 20 5b 65 78 74 2d 76 2d 70 72   is an [ext-v-pr
7370: 69 6d 7c 65 78 74 65 6e 64 65 64 20 65 72 72 6f  im|extended erro
7380: 72 20 63 6f 64 65 5d 0a 20 20 66 6f 72 20 5b 53  r code].  for [S
7390: 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 5d 2e  QLITE_READONLY].
73a0: 20 20 54 68 65 20 53 51 4c 49 54 45 5f 52 45 41    The SQLITE_REA
73b0: 44 4f 4e 4c 59 5f 52 4f 4c 4c 42 41 43 4b 20 65  DONLY_ROLLBACK e
73c0: 72 72 6f 72 20 63 6f 64 65 20 69 6e 64 69 63 61  rror code indica
73d0: 74 65 73 0a 20 20 74 68 61 74 20 61 20 64 61 74  tes.  that a dat
73e0: 61 62 61 73 65 20 63 61 6e 6e 6f 74 20 62 65 20  abase cannot be 
73f0: 6f 70 65 6e 65 64 20 62 65 63 61 75 73 65 20 69  opened because i
7400: 74 20 68 61 73 20 61 20 5b 68 6f 74 20 6a 6f 75  t has a [hot jou
7410: 72 6e 61 6c 5d 20 74 68 61 74 0a 20 20 6e 65 65  rnal] that.  nee
7420: 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  ds to be rolled 
7430: 62 61 63 6b 20 62 75 74 20 63 61 6e 6e 6f 74 20  back but cannot 
7440: 62 65 63 61 75 73 65 20 74 68 65 20 64 61 74 61  because the data
7450: 62 61 73 65 20 69 73 20 72 65 61 64 6f 6e 6c 79  base is readonly
7460: 2e 0a 7d 0a 52 45 53 43 4f 44 45 20 53 51 4c 49  ..}.RESCODE SQLI
7470: 54 45 5f 52 45 41 44 4f 4e 4c 59 5f 44 42 4d 4f  TE_READONLY_DBMO
7480: 56 45 44 20 20 20 20 20 20 20 20 7b 53 51 4c 49  VED        {SQLI
7490: 54 45 5f 52 45 41 44 4f 4e 4c 59 20 7c 20 28 34  TE_READONLY | (4
74a0: 3c 3c 38 29 7d 20 7b 0a 20 20 54 68 65 20 53 51  <<8)} {.  The SQ
74b0: 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 5f 44 42  LITE_READONLY_DB
74c0: 4d 4f 56 45 44 20 65 72 72 6f 72 20 63 6f 64 65  MOVED error code
74d0: 20 69 73 20 61 6e 20 5b 65 78 74 2d 76 2d 70 72   is an [ext-v-pr
74e0: 69 6d 7c 65 78 74 65 6e 64 65 64 20 65 72 72 6f  im|extended erro
74f0: 72 20 63 6f 64 65 5d 0a 20 20 66 6f 72 20 5b 53  r code].  for [S
7500: 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 5d 2e  QLITE_READONLY].
7510: 20 20 54 68 65 20 53 51 4c 49 54 45 5f 52 45 41    The SQLITE_REA
7520: 44 4f 4e 4c 59 5f 44 42 4d 4f 56 45 44 20 65 72  DONLY_DBMOVED er
7530: 72 6f 72 20 63 6f 64 65 20 69 6e 64 69 63 61 74  ror code indicat
7540: 65 73 0a 20 20 74 68 61 74 20 61 20 64 61 74 61  es.  that a data
7550: 62 61 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 6d  base cannot be m
7560: 6f 64 69 66 69 65 64 20 62 65 63 61 75 73 65 20  odified because 
7570: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
7580: 65 20 68 61 73 20 62 65 65 6e 0a 20 20 6d 6f 76  e has been.  mov
7590: 65 64 20 73 69 6e 63 65 20 69 74 20 77 61 73 20  ed since it was 
75a0: 6f 70 65 6e 65 64 2c 20 61 6e 64 20 73 6f 20 61  opened, and so a
75b0: 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20 6d 6f  ny attempt to mo
75c0: 64 69 66 79 20 74 68 65 20 64 61 74 61 62 61 73  dify the databas
75d0: 65 0a 20 20 6d 69 67 68 74 20 72 65 73 75 6c 74  e.  might result
75e0: 20 69 6e 20 64 61 74 61 62 61 73 65 20 63 6f 72   in database cor
75f0: 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65 20 70  ruption if the p
7600: 72 6f 63 65 73 73 65 73 20 63 72 61 73 68 65 73  rocesses crashes
7610: 20 62 65 63 61 75 73 65 20 74 68 65 0a 20 20 5b   because the.  [
7620: 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
7630: 5d 20 77 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63  ] would not be c
7640: 6f 72 72 65 63 74 6c 79 20 6e 61 6d 65 64 2e 0a  orrectly named..
7650: 7d 0a 52 45 53 43 4f 44 45 20 53 51 4c 49 54 45  }.RESCODE SQLITE
7660: 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 20  _ABORT_ROLLBACK 
7670: 20 20 20 20 20 20 20 20 20 7b 53 51 4c 49 54 45           {SQLITE
7680: 5f 41 42 4f 52 54 20 7c 20 28 32 3c 3c 38 29 7d  _ABORT | (2<<8)}
7690: 20 7b 0a 20 20 54 68 65 20 53 51 4c 49 54 45 5f   {.  The SQLITE_
76a0: 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 20 65  ABORT_ROLLBACK e
76b0: 72 72 6f 72 20 63 6f 64 65 20 69 73 20 61 6e 20  rror code is an 
76c0: 5b 65 78 74 2d 76 2d 70 72 69 6d 7c 65 78 74 65  [ext-v-prim|exte
76d0: 6e 64 65 64 20 65 72 72 6f 72 20 63 6f 64 65 5d  nded error code]
76e0: 0a 20 20 66 6f 72 20 5b 53 51 4c 49 54 45 5f 41  .  for [SQLITE_A
76f0: 42 4f 52 54 5d 20 69 6e 64 69 63 61 74 69 6e 67  BORT] indicating
7700: 20 74 68 61 74 20 61 6e 20 53 51 4c 20 73 74 61   that an SQL sta
7710: 74 65 6d 65 6e 74 20 61 62 6f 72 74 65 64 20 62  tement aborted b
7720: 65 63 61 75 73 65 0a 20 20 74 68 65 20 74 72 61  ecause.  the tra
7730: 6e 73 61 63 74 69 6f 6e 20 74 68 61 74 20 77 61  nsaction that wa
7740: 73 20 61 63 74 69 76 65 20 77 68 65 6e 20 74 68  s active when th
7750: 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
7760: 66 69 72 73 74 20 73 74 61 72 74 65 64 0a 20 20  first started.  
7770: 77 61 73 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e  was rolled back.
7780: 20 20 5e 50 65 6e 64 69 6e 67 20 77 72 69 74 65    ^Pending write
7790: 20 6f 70 65 72 61 74 69 6f 6e 73 20 61 6c 77 61   operations alwa
77a0: 79 73 20 66 61 69 6c 20 77 69 74 68 20 74 68 69  ys fail with thi
77b0: 73 20 65 72 72 6f 72 0a 20 20 77 68 65 6e 20 61  s error.  when a
77c0: 20 72 6f 6c 6c 62 61 63 6b 20 6f 63 63 75 72 73   rollback occurs
77d0: 2e 20 20 5e 41 20 5b 52 4f 4c 4c 42 41 43 4b 5d  .  ^A [ROLLBACK]
77e0: 20 77 69 6c 6c 20 63 61 75 73 65 20 61 20 70 65   will cause a pe
77f0: 6e 64 69 6e 67 20 72 65 61 64 20 6f 70 65 72 61  nding read opera
7800: 74 69 6f 6e 0a 20 20 74 6f 20 66 61 69 6c 20 6f  tion.  to fail o
7810: 6e 6c 79 20 69 66 20 74 68 65 20 73 63 68 65 6d  nly if the schem
7820: 61 20 77 61 73 20 63 68 61 6e 67 65 64 20 77 69  a was changed wi
7830: 74 68 69 6e 20 74 68 65 20 74 72 61 6e 73 61 63  thin the transac
7840: 74 69 6f 6e 20 62 65 69 6e 67 20 72 6f 6c 6c 65  tion being rolle
7850: 64 0a 20 20 62 61 63 6b 2e 0a 7d 0a 52 45 53 43  d.  back..}.RESC
7860: 4f 44 45 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54  ODE SQLITE_CONST
7870: 52 41 49 4e 54 5f 43 48 45 43 4b 20 20 20 20 20  RAINT_CHECK     
7880: 20 20 20 7b 53 51 4c 49 54 45 5f 43 4f 4e 53 54     {SQLITE_CONST
7890: 52 41 49 4e 54 20 7c 20 28 31 3c 3c 38 29 7d 20  RAINT | (1<<8)} 
78a0: 7b 0a 20 20 54 68 65 20 53 51 4c 49 54 45 5f 43  {.  The SQLITE_C
78b0: 4f 4e 53 54 52 41 49 4e 54 5f 43 48 45 43 4b 20  ONSTRAINT_CHECK 
78c0: 65 72 72 6f 72 20 63 6f 64 65 20 69 73 20 61 6e  error code is an
78d0: 20 5b 65 78 74 2d 76 2d 70 72 69 6d 7c 65 78 74   [ext-v-prim|ext
78e0: 65 6e 64 65 64 20 65 72 72 6f 72 20 63 6f 64 65  ended error code
78f0: 5d 0a 20 20 66 6f 72 20 5b 53 51 4c 49 54 45 5f  ].  for [SQLITE_
7900: 43 4f 4e 53 54 52 41 49 4e 54 5d 20 69 6e 64 69  CONSTRAINT] indi
7910: 63 61 74 69 6e 67 20 74 68 61 74 20 61 20 5b 43  cating that a [C
7920: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 5d  HECK constraint]
7930: 20 66 61 69 6c 65 64 2e 0a 7d 0a 52 45 53 43 4f   failed..}.RESCO
7940: 44 45 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  DE SQLITE_CONSTR
7950: 41 49 4e 54 5f 43 4f 4d 4d 49 54 48 4f 4f 4b 20  AINT_COMMITHOOK 
7960: 20 20 7b 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52    {SQLITE_CONSTR
7970: 41 49 4e 54 20 7c 20 28 32 3c 3c 38 29 7d 20 7b  AINT | (2<<8)} {
7980: 0a 20 20 54 68 65 20 53 51 4c 49 54 45 5f 43 4f  .  The SQLITE_CO
7990: 4e 53 54 52 41 49 4e 54 5f 43 4f 4d 4d 49 54 48  NSTRAINT_COMMITH
79a0: 4f 4f 4b 20 65 72 72 6f 72 20 63 6f 64 65 0a 20  OOK error code. 
79b0: 20 69 73 20 61 6e 20 5b 65 78 74 2d 76 2d 70 72   is an [ext-v-pr
79c0: 69 6d 7c 65 78 74 65 6e 64 65 64 20 65 72 72 6f  im|extended erro
79d0: 72 20 63 6f 64 65 5d 0a 20 20 66 6f 72 20 5b 53  r code].  for [S
79e0: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
79f0: 5d 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61  ] indicating tha
7a00: 74 20 61 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63  t a.  [sqlite3_c
7a10: 6f 6d 6d 69 74 5f 68 6f 6f 6b 7c 63 6f 6d 6d 69  ommit_hook|commi
7a20: 74 20 68 6f 6f 6b 20 63 61 6c 6c 62 61 63 6b 5d  t hook callback]
7a30: 20 72 65 74 75 72 6e 65 64 20 6e 6f 6e 2d 7a 65   returned non-ze
7a40: 72 6f 20 74 68 61 74 20 74 68 75 73 0a 20 20 63  ro that thus.  c
7a50: 61 75 73 65 64 20 74 68 65 20 53 51 4c 20 73 74  aused the SQL st
7a60: 61 74 65 6d 65 6e 74 20 74 6f 20 62 65 20 72 6f  atement to be ro
7a70: 6c 6c 65 64 20 62 61 63 6b 2e 0a 7d 0a 52 45 53  lled back..}.RES
7a80: 43 4f 44 45 20 53 51 4c 49 54 45 5f 43 4f 4e 53  CODE SQLITE_CONS
7a90: 54 52 41 49 4e 54 5f 46 4f 52 45 49 47 4e 4b 45  TRAINT_FOREIGNKE
7aa0: 59 20 20 20 7b 53 51 4c 49 54 45 5f 43 4f 4e 53  Y   {SQLITE_CONS
7ab0: 54 52 41 49 4e 54 20 7c 20 28 33 3c 3c 38 29 7d  TRAINT | (3<<8)}
7ac0: 20 7b 0a 20 20 54 68 65 20 53 51 4c 49 54 45 5f   {.  The SQLITE_
7ad0: 43 4f 4e 53 54 52 41 49 4e 54 5f 46 4f 52 45 49  CONSTRAINT_FOREI
7ae0: 47 4e 4b 45 59 20 65 72 72 6f 72 20 63 6f 64 65  GNKEY error code
7af0: 0a 20 20 69 73 20 61 6e 20 5b 65 78 74 2d 76 2d  .  is an [ext-v-
7b00: 70 72 69 6d 7c 65 78 74 65 6e 64 65 64 20 65 72  prim|extended er
7b10: 72 6f 72 20 63 6f 64 65 5d 0a 20 20 66 6f 72 20  ror code].  for 
7b20: 5b 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49  [SQLITE_CONSTRAI
7b30: 4e 54 5d 20 69 6e 64 69 63 61 74 69 6e 67 20 74  NT] indicating t
7b40: 68 61 74 20 61 20 5b 66 6f 72 65 69 67 6e 20 6b  hat a [foreign k
7b50: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 5d 20 66  ey constraint] f
7b60: 61 69 6c 65 64 2e 0a 7d 0a 52 45 53 43 4f 44 45  ailed..}.RESCODE
7b70: 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49   SQLITE_CONSTRAI
7b80: 4e 54 5f 46 55 4e 43 54 49 4f 4e 20 20 20 20 20  NT_FUNCTION     
7b90: 7b 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49  {SQLITE_CONSTRAI
7ba0: 4e 54 20 7c 20 28 34 3c 3c 38 29 7d 20 7b 0a 20  NT | (4<<8)} {. 
7bb0: 20 54 68 65 20 53 51 4c 49 54 45 5f 43 4f 4e 53   The SQLITE_CONS
7bc0: 54 52 41 49 4e 54 5f 46 55 4e 43 54 49 4f 4e 20  TRAINT_FUNCTION 
7bd0: 65 72 72 6f 72 20 63 6f 64 65 20 69 73 20 6e 6f  error code is no
7be0: 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64  t currently used
7bf0: 0a 20 20 62 79 20 74 68 65 20 53 51 4c 69 74 65  .  by the SQLite
7c00: 20 63 6f 72 65 2e 20 20 48 6f 77 65 76 65 72 2c   core.  However,
7c10: 20 74 68 69 73 20 65 72 72 6f 72 20 63 6f 64 65   this error code
7c20: 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 66 6f   is available fo
7c30: 72 20 75 73 65 0a 20 20 62 79 20 65 78 74 65 6e  r use.  by exten
7c40: 73 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  sion functions..
7c50: 7d 0a 52 45 53 43 4f 44 45 20 53 51 4c 49 54 45  }.RESCODE SQLITE
7c60: 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 4e 4f 54 4e  _CONSTRAINT_NOTN
7c70: 55 4c 4c 20 20 20 20 20 20 7b 53 51 4c 49 54 45  ULL      {SQLITE
7c80: 5f 43 4f 4e 53 54 52 41 49 4e 54 20 7c 20 28 35  _CONSTRAINT | (5
7c90: 3c 3c 38 29 7d 20 7b 0a 20 20 54 68 65 20 53 51  <<8)} {.  The SQ
7ca0: 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5f  LITE_CONSTRAINT_
7cb0: 4e 4f 54 4e 55 4c 4c 20 65 72 72 6f 72 20 63 6f  NOTNULL error co
7cc0: 64 65 0a 20 20 69 73 20 61 6e 20 5b 65 78 74 2d  de.  is an [ext-
7cd0: 76 2d 70 72 69 6d 7c 65 78 74 65 6e 64 65 64 20  v-prim|extended 
7ce0: 65 72 72 6f 72 20 63 6f 64 65 5d 0a 20 20 66 6f  error code].  fo
7cf0: 72 20 5b 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  r [SQLITE_CONSTR
7d00: 41 49 4e 54 5d 20 69 6e 64 69 63 61 74 69 6e 67  AINT] indicating
7d10: 20 74 68 61 74 20 61 20 5b 4e 4f 54 20 4e 55 4c   that a [NOT NUL
7d20: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 5d 20 66 61  L constraint] fa
7d30: 69 6c 65 64 2e 0a 7d 0a 52 45 53 43 4f 44 45 20  iled..}.RESCODE 
7d40: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
7d50: 54 5f 50 52 49 4d 41 52 59 4b 45 59 20 20 20 7b  T_PRIMARYKEY   {
7d60: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
7d70: 54 20 7c 20 28 36 3c 3c 38 29 7d 20 7b 0a 20 20  T | (6<<8)} {.  
7d80: 54 68 65 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54  The SQLITE_CONST
7d90: 52 41 49 4e 54 5f 50 52 49 4d 41 52 59 4b 45 59  RAINT_PRIMARYKEY
7da0: 20 65 72 72 6f 72 20 63 6f 64 65 0a 20 20 69 73   error code.  is
7db0: 20 61 6e 20 5b 65 78 74 2d 76 2d 70 72 69 6d 7c   an [ext-v-prim|
7dc0: 65 78 74 65 6e 64 65 64 20 65 72 72 6f 72 20 63  extended error c
7dd0: 6f 64 65 5d 0a 20 20 66 6f 72 20 5b 53 51 4c 49  ode].  for [SQLI
7de0: 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5d 20 69  TE_CONSTRAINT] i
7df0: 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 61  ndicating that a
7e00: 20 5b 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f   [PRIMARY KEY co
7e10: 6e 73 74 72 61 69 6e 74 5d 20 66 61 69 6c 65 64  nstraint] failed
7e20: 2e 0a 7d 0a 52 45 53 43 4f 44 45 20 53 51 4c 49  ..}.RESCODE SQLI
7e30: 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 54 52  TE_CONSTRAINT_TR
7e40: 49 47 47 45 52 20 20 20 20 20 20 7b 53 51 4c 49  IGGER      {SQLI
7e50: 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 7c 20  TE_CONSTRAINT | 
7e60: 28 37 3c 3c 38 29 7d 20 7b 0a 20 20 54 68 65 20  (7<<8)} {.  The 
7e70: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
7e80: 54 5f 54 52 49 47 47 45 52 20 65 72 72 6f 72 20  T_TRIGGER error 
7e90: 63 6f 64 65 0a 20 20 69 73 20 61 6e 20 5b 65 78  code.  is an [ex
7ea0: 74 2d 76 2d 70 72 69 6d 7c 65 78 74 65 6e 64 65  t-v-prim|extende
7eb0: 64 20 65 72 72 6f 72 20 63 6f 64 65 5d 0a 20 20  d error code].  
7ec0: 66 6f 72 20 5b 53 51 4c 49 54 45 5f 43 4f 4e 53  for [SQLITE_CONS
7ed0: 54 52 41 49 4e 54 5d 20 69 6e 64 69 63 61 74 69  TRAINT] indicati
7ee0: 6e 67 20 74 68 61 74 20 61 20 5b 52 41 49 53 45  ng that a [RAISE
7ef0: 20 66 75 6e 63 74 69 6f 6e 5d 20 77 69 74 68 69   function] withi
7f00: 6e 0a 20 20 61 20 5b 43 52 45 41 54 45 20 54 52  n.  a [CREATE TR
7f10: 49 47 47 45 52 7c 74 72 69 67 67 65 72 5d 20 66  IGGER|trigger] f
7f20: 69 72 65 64 2c 20 63 61 75 73 69 6e 67 20 74 68  ired, causing th
7f30: 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
7f40: 74 6f 20 61 62 6f 72 74 2e 0a 7d 0a 52 45 53 43  to abort..}.RESC
7f50: 4f 44 45 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54  ODE SQLITE_CONST
7f60: 52 41 49 4e 54 5f 55 4e 49 51 55 45 20 20 20 20  RAINT_UNIQUE    
7f70: 20 20 20 7b 53 51 4c 49 54 45 5f 43 4f 4e 53 54     {SQLITE_CONST
7f80: 52 41 49 4e 54 20 7c 20 28 38 3c 3c 38 29 7d 20  RAINT | (8<<8)} 
7f90: 7b 0a 20 20 54 68 65 20 53 51 4c 49 54 45 5f 43  {.  The SQLITE_C
7fa0: 4f 4e 53 54 52 41 49 4e 54 5f 55 4e 49 51 55 45  ONSTRAINT_UNIQUE
7fb0: 20 65 72 72 6f 72 20 63 6f 64 65 0a 20 20 69 73   error code.  is
7fc0: 20 61 6e 20 5b 65 78 74 2d 76 2d 70 72 69 6d 7c   an [ext-v-prim|
7fd0: 65 78 74 65 6e 64 65 64 20 65 72 72 6f 72 20 63  extended error c
7fe0: 6f 64 65 5d 0a 20 20 66 6f 72 20 5b 53 51 4c 49  ode].  for [SQLI
7ff0: 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5d 20 69  TE_CONSTRAINT] i
8000: 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 61  ndicating that a
8010: 20 5b 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61   [UNIQUE constra
8020: 69 6e 74 5d 20 66 61 69 6c 65 64 2e 0a 7d 0a 52  int] failed..}.R
8030: 45 53 43 4f 44 45 20 53 51 4c 49 54 45 5f 43 4f  ESCODE SQLITE_CO
8040: 4e 53 54 52 41 49 4e 54 5f 56 54 41 42 20 20 20  NSTRAINT_VTAB   
8050: 20 20 20 20 20 20 7b 53 51 4c 49 54 45 5f 43 4f        {SQLITE_CO
8060: 4e 53 54 52 41 49 4e 54 20 7c 20 28 39 3c 3c 38  NSTRAINT | (9<<8
8070: 29 7d 20 7b 0a 20 20 54 68 65 20 53 51 4c 49 54  )} {.  The SQLIT
8080: 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 56 54 41  E_CONSTRAINT_VTA
8090: 42 20 65 72 72 6f 72 20 63 6f 64 65 20 69 73 20  B error code is 
80a0: 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73  not currently us
80b0: 65 64 0a 20 20 62 79 20 74 68 65 20 53 51 4c 69  ed.  by the SQLi
80c0: 74 65 20 63 6f 72 65 2e 20 20 48 6f 77 65 76 65  te core.  Howeve
80d0: 72 2c 20 74 68 69 73 20 65 72 72 6f 72 20 63 6f  r, this error co
80e0: 64 65 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20  de is available 
80f0: 66 6f 72 20 75 73 65 0a 20 20 62 79 20 61 70 70  for use.  by app
8100: 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
8110: 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73   [virtual tables
8120: 5d 2e 0a 7d 0a 52 45 53 43 4f 44 45 20 53 51 4c  ]..}.RESCODE SQL
8130: 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 52  ITE_CONSTRAINT_R
8140: 4f 57 49 44 20 20 20 20 20 20 20 20 7b 53 51 4c  OWID        {SQL
8150: 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 7c  ITE_CONSTRAINT |
8160: 28 31 30 3c 3c 38 29 7d 20 7b 0a 20 20 54 68 65  (10<<8)} {.  The
8170: 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49   SQLITE_CONSTRAI
8180: 4e 54 5f 52 4f 57 49 44 20 65 72 72 6f 72 20 63  NT_ROWID error c
8190: 6f 64 65 0a 20 20 69 73 20 61 6e 20 5b 65 78 74  ode.  is an [ext
81a0: 2d 76 2d 70 72 69 6d 7c 65 78 74 65 6e 64 65 64  -v-prim|extended
81b0: 20 65 72 72 6f 72 20 63 6f 64 65 5d 0a 20 20 66   error code].  f
81c0: 6f 72 20 5b 53 51 4c 49 54 45 5f 43 4f 4e 53 54  or [SQLITE_CONST
81d0: 52 41 49 4e 54 5d 20 69 6e 64 69 63 61 74 69 6e  RAINT] indicatin
81e0: 67 20 74 68 61 74 20 61 20 5b 72 6f 77 69 64 5d  g that a [rowid]
81f0: 20 69 73 20 6e 6f 74 20 75 6e 69 71 75 65 2e 0a   is not unique..
8200: 7d 0a 52 45 53 43 4f 44 45 20 53 51 4c 49 54 45  }.RESCODE SQLITE
8210: 5f 4e 4f 54 49 43 45 5f 52 45 43 4f 56 45 52 5f  _NOTICE_RECOVER_
8220: 57 41 4c 20 20 20 20 20 20 7b 53 51 4c 49 54 45  WAL      {SQLITE
8230: 5f 4e 4f 54 49 43 45 20 7c 20 28 31 3c 3c 38 29  _NOTICE | (1<<8)
8240: 7d 20 7b 0a 20 20 54 68 65 20 53 51 4c 49 54 45  } {.  The SQLITE
8250: 5f 4e 4f 54 49 43 45 5f 52 45 43 4f 56 45 52 5f  _NOTICE_RECOVER_
8260: 57 41 4c 20 72 65 73 75 6c 74 20 63 6f 64 65 20  WAL result code 
8270: 69 73 0a 20 20 70 61 73 73 65 64 20 74 6f 20 74  is.  passed to t
8280: 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 66 0a 20  he callback of. 
8290: 20 5b 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 5d   [sqlite3_log()]
82a0: 20 77 68 65 6e 20 61 20 5b 57 41 4c 20 6d 6f 64   when a [WAL mod
82b0: 65 5d 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  e] database file
82c0: 20 69 73 20 72 65 63 6f 76 65 72 65 64 2e 0a 7d   is recovered..}
82d0: 0a 52 45 53 43 4f 44 45 20 53 51 4c 49 54 45 5f  .RESCODE SQLITE_
82e0: 4e 4f 54 49 43 45 5f 52 45 43 4f 56 45 52 5f 52  NOTICE_RECOVER_R
82f0: 4f 4c 4c 42 41 43 4b 20 7b 53 51 4c 49 54 45 5f  OLLBACK {SQLITE_
8300: 4e 4f 54 49 43 45 20 7c 20 28 32 3c 3c 38 29 7d  NOTICE | (2<<8)}
8310: 20 7b 0a 20 20 54 68 65 20 53 51 4c 49 54 45 5f   {.  The SQLITE_
8320: 4e 4f 54 49 43 45 5f 52 45 43 4f 56 45 52 5f 52  NOTICE_RECOVER_R
8330: 4f 4c 4c 42 41 43 4b 20 72 65 73 75 6c 74 20 63  OLLBACK result c
8340: 6f 64 65 20 69 73 0a 20 20 70 61 73 73 65 64 20  ode is.  passed 
8350: 74 6f 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  to the callback 
8360: 6f 66 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c 6f  of.  [sqlite3_lo
8370: 67 28 29 5d 20 77 68 65 6e 20 61 20 5b 68 6f 74  g()] when a [hot
8380: 20 6a 6f 75 72 6e 61 6c 5d 20 69 73 20 72 6f 6c   journal] is rol
8390: 6c 65 64 20 62 61 63 6b 2e 0a 7d 0a 52 45 53 43  led back..}.RESC
83a0: 4f 44 45 20 53 51 4c 49 54 45 5f 57 41 52 4e 49  ODE SQLITE_WARNI
83b0: 4e 47 5f 41 55 54 4f 49 4e 44 45 58 20 20 20 20  NG_AUTOINDEX    
83c0: 20 20 20 7b 53 51 4c 49 54 45 5f 57 41 52 4e 49     {SQLITE_WARNI
83d0: 4e 47 20 7c 20 28 31 3c 3c 38 29 7d 20 7b 0a 20  NG | (1<<8)} {. 
83e0: 20 54 68 65 20 53 51 4c 49 54 45 5f 57 41 52 4e   The SQLITE_WARN
83f0: 49 4e 47 5f 41 55 54 4f 49 4e 44 45 58 20 72 65  ING_AUTOINDEX re
8400: 73 75 6c 74 20 63 6f 64 65 20 69 73 0a 20 20 70  sult code is.  p
8410: 61 73 73 65 64 20 74 6f 20 74 68 65 20 63 61 6c  assed to the cal
8420: 6c 62 61 63 6b 20 6f 66 0a 20 20 5b 73 71 6c 69  lback of.  [sqli
8430: 74 65 33 5f 6c 6f 67 28 29 5d 20 77 68 65 6e 65  te3_log()] whene
8440: 76 65 72 20 5b 61 75 74 6f 6d 61 74 69 63 20 69  ver [automatic i
8450: 6e 64 65 78 69 6e 67 5d 20 69 73 20 75 73 65 64  ndexing] is used
8460: 2e 0a 20 20 54 68 69 73 20 63 61 6e 20 73 65 72  ..  This can ser
8470: 76 65 20 61 73 20 61 20 77 61 72 6e 69 6e 67 20  ve as a warning 
8480: 74 6f 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64  to application d
8490: 65 73 69 67 6e 65 72 73 20 74 68 61 74 20 74 68  esigners that th
84a0: 65 0a 20 20 64 61 74 61 62 61 73 65 20 6d 69 67  e.  database mig
84b0: 68 74 20 62 65 6e 65 66 69 74 20 66 72 6f 6d 20  ht benefit from 
84c0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 64 65 78  additional index
84d0: 65 73 2e 0a 7d 0a 0a 23 23 23 23 23 23 23 23 23  es..}..#########
84e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
84f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8500: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8510: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8520: 23 23 23 23 0a 23 20 43 6f 64 65 20 74 6f 20 70  ####.# Code to p
8530: 72 6f 63 65 73 73 20 74 68 65 20 52 45 53 43 4f  rocess the RESCO
8540: 44 45 20 76 61 6c 75 65 73 0a 23 0a 23 20 43 6f  DE values.#.# Co
8550: 6e 76 65 72 74 20 66 6f 72 6d 75 6c 61 20 52 45  nvert formula RE
8560: 53 43 4f 44 45 20 76 61 6c 75 65 73 20 69 6e 74  SCODE values int
8570: 6f 20 6e 75 6d 65 72 69 63 73 0a 73 65 74 20 6e  o numerics.set n
8580: 52 65 73 43 6f 64 65 20 30 0a 73 65 74 20 6e 50  ResCode 0.set nP
8590: 72 69 6d 43 6f 64 65 20 30 0a 73 65 74 20 6e 45  rimCode 0.set nE
85a0: 78 74 43 6f 64 65 20 30 0a 73 65 74 20 6e 4e 6f  xtCode 0.set nNo
85b0: 6e 45 72 72 6f 72 20 33 0a 75 6e 73 65 74 20 2d  nError 3.unset -
85c0: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 70 72 69 6d 5f  nocomplain prim_
85d0: 72 63 0a 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  rc.unset -nocomp
85e0: 6c 61 69 6e 20 65 78 74 5f 72 63 0a 66 6f 72 65  lain ext_rc.fore
85f0: 61 63 68 20 6e 61 6d 65 20 5b 61 72 72 61 79 20  ach name [array 
8600: 6e 61 6d 65 73 20 72 65 73 76 61 6c 75 65 5d 20  names resvalue] 
8610: 7b 0a 20 20 73 65 74 20 76 61 6c 20 24 72 65 73  {.  set val $res
8620: 76 61 6c 75 65 28 24 6e 61 6d 65 29 0a 20 20 69  value($name).  i
8630: 66 20 7b 5b 72 65 67 65 78 70 20 7b 5e 28 53 51  f {[regexp {^(SQ
8640: 4c 49 54 45 5f 5b 5e 20 5d 2b 29 20 2a 5c 7c 20  LITE_[^ ]+) *\| 
8650: 2a 5c 28 28 5c 64 2b 29 3c 3c 38 5c 29 24 7d 20  *\((\d+)<<8\)$} 
8660: 24 76 61 6c 20 61 6c 6c 20 62 61 73 65 6e 61 6d  $val all basenam
8670: 65 20 68 69 76 61 6c 5d 7d 20 7b 0a 20 20 20 20  e hival]} {.    
8680: 73 65 74 20 76 61 6c 20 5b 65 78 70 72 20 7b 24  set val [expr {$
8690: 72 65 73 76 61 6c 75 65 28 24 62 61 73 65 6e 61  resvalue($basena
86a0: 6d 65 29 2b 28 24 68 69 76 61 6c 3c 3c 38 29 7d  me)+($hival<<8)}
86b0: 5d 0a 20 20 20 20 73 65 74 20 72 65 73 76 61 6c  ].    set resval
86c0: 75 65 28 24 6e 61 6d 65 29 20 24 76 61 6c 0a 20  ue($name) $val. 
86d0: 20 7d 0a 20 20 73 65 74 20 76 61 6c 74 6f 6e 61   }.  set valtona
86e0: 6d 65 28 24 76 61 6c 29 20 24 6e 61 6d 65 0a 20  me($val) $name. 
86f0: 20 69 6e 63 72 20 6e 52 65 73 43 6f 64 65 0a 20   incr nResCode. 
8700: 20 69 66 20 7b 24 76 61 6c 3c 32 35 36 7d 20 7b   if {$val<256} {
8710: 0a 20 20 20 20 69 6e 63 72 20 6e 50 72 69 6d 43  .    incr nPrimC
8720: 6f 64 65 0a 20 20 20 20 73 65 74 20 70 72 69 6d  ode.    set prim
8730: 5f 72 63 28 24 6e 61 6d 65 29 20 24 76 61 6c 0a  _rc($name) $val.
8740: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 69    } else {.    i
8750: 6e 63 72 20 6e 45 78 74 43 6f 64 65 0a 20 20 20  ncr nExtCode.   
8760: 20 73 65 74 20 65 78 74 5f 72 63 28 24 6e 61 6d   set ext_rc($nam
8770: 65 29 20 24 76 61 6c 0a 20 20 7d 0a 7d 0a 0a 68  e) $val.  }.}..h
8780: 64 5f 70 75 74 73 20 22 3c 68 32 3e 50 72 69 6d  d_puts "<h2>Prim
8790: 61 72 79 20 52 65 73 75 6c 74 20 43 6f 64 65 20  ary Result Code 
87a0: 4c 69 73 74 3c 2f 68 32 3e 5c 6e 22 0a 68 64 5f  List</h2>\n".hd_
87b0: 70 75 74 73 20 22 3c 70 3e 54 68 65 20 24 6e 50  puts "<p>The $nP
87c0: 72 69 6d 43 6f 64 65 20 72 65 73 75 6c 74 20 63  rimCode result c
87d0: 6f 64 65 73 22 0a 3c 2f 74 63 6c 3e 0a 20 20 61  odes".</tcl>.  a
87e0: 72 65 20 5b 72 65 73 75 6c 74 20 63 6f 64 65 20  re [result code 
87f0: 64 65 66 69 6e 69 74 69 6f 6e 73 7c 64 65 66 69  definitions|defi
8800: 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 33 2e 68  ned in sqlite3.h
8810: 5d 20 61 6e 64 20 61 72 65 0a 20 20 6c 69 73 74  ] and are.  list
8820: 65 64 20 69 6e 20 61 6c 70 68 61 62 65 74 69 63  ed in alphabetic
8830: 61 6c 20 6f 72 64 65 72 20 62 65 6c 6f 77 3a 0a  al order below:.
8840: 20 20 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d    <table border=
8850: 30 20 77 69 64 74 68 3d 22 31 30 30 25 22 20 63  0 width="100%" c
8860: 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 20  ellpadding=10>. 
8870: 20 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d   <tr><td valign=
8880: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 6c 65 66  "top" align="lef
8890: 74 22 3e 3c 75 6c 3e 0a 3c 74 63 6c 3e 0a 73 65  t"><ul>.<tcl>.se
88a0: 74 20 6e 72 6f 77 20 5b 65 78 70 72 20 7b 28 24  t nrow [expr {($
88b0: 6e 50 72 69 6d 43 6f 64 65 2b 32 29 2f 33 7d 5d  nPrimCode+2)/3}]
88c0: 0a 73 65 74 20 69 20 30 0a 66 6f 72 65 61 63 68  .set i 0.foreach
88d0: 20 6e 61 6d 65 20 5b 6c 73 6f 72 74 20 5b 61 72   name [lsort [ar
88e0: 72 61 79 20 6e 61 6d 65 73 20 70 72 69 6d 5f 72  ray names prim_r
88f0: 63 5d 5d 20 7b 0a 20 20 69 66 20 7b 24 69 3d 3d  c]] {.  if {$i==
8900: 24 6e 72 6f 77 7d 20 7b 0a 20 20 20 20 68 64 5f  $nrow} {.    hd_
8910: 70 75 74 73 20 22 3c 2f 75 6c 3e 3c 2f 74 64 3e  puts "</ul></td>
8920: 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70  <td valign=\"top
8930: 5c 22 20 61 6c 69 67 6e 3d 5c 22 6c 65 66 74 5c  \" align=\"left\
8940: 22 3e 3c 75 6c 3e 5c 6e 22 0a 20 20 20 20 73 65  "><ul>\n".    se
8950: 74 20 69 20 30 0a 20 20 7d 0a 20 20 69 6e 63 72  t i 0.  }.  incr
8960: 20 69 0a 20 20 68 64 5f 72 65 73 6f 6c 76 65 20   i.  hd_resolve 
8970: 22 3c 6c 69 3e 20 5c 5b 24 6e 61 6d 65 5c 5d 20  "<li> \[$name\] 
8980: 28 24 70 72 69 6d 5f 72 63 28 24 6e 61 6d 65 29  ($prim_rc($name)
8990: 29 5c 6e 22 0a 7d 0a 68 64 5f 70 75 74 73 20 22  )\n".}.hd_puts "
89a0: 3c 2f 74 64 3e 3c 2f 74 64 3e 3c 2f 74 61 62 6c  </td></td></tabl
89b0: 65 3e 5c 6e 5c 6e 22 0a 0a 68 64 5f 66 72 61 67  e>\n\n"..hd_frag
89c0: 6d 65 6e 74 20 65 78 74 72 63 20 7b 65 78 74 65  ment extrc {exte
89d0: 6e 64 65 64 20 72 65 73 75 6c 74 20 63 6f 64 65  nded result code
89e0: 7d 20 7b 65 78 74 65 6e 64 65 64 20 72 65 73 75  } {extended resu
89f0: 6c 74 20 63 6f 64 65 73 7d 20 5c 0a 20 20 20 20  lt codes} \.    
8a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 65                {e
8a10: 78 74 65 6e 64 65 64 20 65 72 72 6f 72 20 63 6f  xtended error co
8a20: 64 65 7d 20 7b 65 78 74 65 6e 64 65 64 20 65 72  de} {extended er
8a30: 72 6f 72 20 63 6f 64 65 73 7d 0a 68 64 5f 70 75  ror codes}.hd_pu
8a40: 74 73 20 22 3c 68 32 3e 45 78 74 65 6e 64 65 64  ts "<h2>Extended
8a50: 20 52 65 73 75 6c 74 20 43 6f 64 65 20 4c 69 73   Result Code Lis
8a60: 74 3c 2f 68 32 3e 5c 6e 22 0a 68 64 5f 70 75 74  t</h2>\n".hd_put
8a70: 73 20 22 3c 70 3e 54 68 65 20 24 6e 45 78 74 43  s "<p>The $nExtC
8a80: 6f 64 65 20 65 78 74 65 6e 64 65 64 20 72 65 73  ode extended res
8a90: 75 6c 74 20 63 6f 64 65 73 22 0a 3c 2f 74 63 6c  ult codes".</tcl
8aa0: 3e 0a 20 20 61 72 65 20 5b 65 78 74 65 6e 64 65  >.  are [extende
8ab0: 64 20 72 65 73 75 6c 74 20 63 6f 64 65 20 64 65  d result code de
8ac0: 66 69 6e 69 74 69 6f 6e 73 7c 64 65 66 69 6e 65  finitions|define
8ad0: 64 20 69 6e 20 73 71 6c 69 74 65 33 2e 68 5d 20  d in sqlite3.h] 
8ae0: 61 6e 64 20 61 72 65 0a 20 20 6c 69 73 74 65 64  and are.  listed
8af0: 20 69 6e 20 61 6c 70 68 61 62 65 74 69 63 61 6c   in alphabetical
8b00: 20 6f 72 64 65 72 20 62 65 6c 6f 77 3a 0a 20 20   order below:.  
8b10: 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20  <table border=0 
8b20: 77 69 64 74 68 3d 22 31 30 30 25 22 20 63 65 6c  width="100%" cel
8b30: 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 20 20 3c  lpadding=10>.  <
8b40: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  tr><td valign="t
8b50: 6f 70 22 20 61 6c 69 67 6e 3d 22 6c 65 66 74 22  op" align="left"
8b60: 3e 3c 75 6c 3e 0a 3c 74 63 6c 3e 0a 73 65 74 20  ><ul>.<tcl>.set 
8b70: 6e 72 6f 77 20 5b 65 78 70 72 20 7b 28 24 6e 45  nrow [expr {($nE
8b80: 78 74 43 6f 64 65 2b 31 29 2f 32 7d 5d 0a 73 65  xtCode+1)/2}].se
8b90: 74 20 69 20 30 0a 66 6f 72 65 61 63 68 20 6e 61  t i 0.foreach na
8ba0: 6d 65 20 5b 6c 73 6f 72 74 20 5b 61 72 72 61 79  me [lsort [array
8bb0: 20 6e 61 6d 65 73 20 65 78 74 5f 72 63 5d 5d 20   names ext_rc]] 
8bc0: 7b 0a 20 20 69 66 20 7b 24 69 3d 3d 24 6e 72 6f  {.  if {$i==$nro
8bd0: 77 7d 20 7b 0a 20 20 20 20 68 64 5f 70 75 74 73  w} {.    hd_puts
8be0: 20 22 3c 2f 75 6c 3e 3c 2f 74 64 3e 3c 74 64 20   "</ul></td><td 
8bf0: 76 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c 22 20 61  valign=\"top\" a
8c00: 6c 69 67 6e 3d 5c 22 6c 65 66 74 5c 22 3e 3c 75  lign=\"left\"><u
8c10: 6c 3e 5c 6e 22 0a 20 20 20 20 73 65 74 20 69 20  l>\n".    set i 
8c20: 30 0a 20 20 7d 0a 20 20 69 6e 63 72 20 69 0a 20  0.  }.  incr i. 
8c30: 20 68 64 5f 72 65 73 6f 6c 76 65 20 22 3c 6c 69   hd_resolve "<li
8c40: 3e 20 5c 5b 24 6e 61 6d 65 5c 5d 20 28 24 65 78  > \[$name\] ($ex
8c50: 74 5f 72 63 28 24 6e 61 6d 65 29 29 5c 6e 22 0a  t_rc($name))\n".
8c60: 7d 0a 68 64 5f 70 75 74 73 20 22 3c 2f 74 64 3e  }.hd_puts "</td>
8c70: 3c 2f 74 64 3e 3c 2f 74 61 62 6c 65 3e 5c 6e 5c  </td></table>\n\
8c80: 6e 22 0a 0a 68 64 5f 70 75 74 73 20 22 0a 3c 68  n"..hd_puts ".<h
8c90: 32 3e 52 65 73 75 6c 74 20 43 6f 64 65 20 4d 65  2>Result Code Me
8ca0: 61 6e 69 6e 67 73 3c 2f 68 32 3e 0a 3c 70 3e 0a  anings</h2>.<p>.
8cb0: 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 66 6f 72  The meanings for
8cc0: 20 61 6c 6c 20 24 6e 52 65 73 43 6f 64 65 20 72   all $nResCode r
8cd0: 65 73 75 6c 74 20 63 6f 64 65 20 76 61 6c 75 65  esult code value
8ce0: 73 20 61 72 65 20 73 68 6f 77 6e 20 62 65 6c 6f  s are shown belo
8cf0: 77 2c 0a 69 6e 20 6e 75 6d 65 72 69 63 20 6f 72  w,.in numeric or
8d00: 64 65 72 2e 0a 22 0a 0a 23 20 47 65 6e 65 72 61  der.."..# Genera
8d10: 74 65 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20  te the table of 
8d20: 72 65 73 75 6c 74 20 63 6f 64 65 73 0a 23 0a 66  result codes.#.f
8d30: 6f 72 65 61 63 68 20 76 61 6c 20 5b 6c 73 6f 72  oreach val [lsor
8d40: 74 20 2d 69 6e 74 20 5b 61 72 72 61 79 20 6e 61  t -int [array na
8d50: 6d 65 73 20 76 61 6c 74 6f 6e 61 6d 65 5d 5d 20  mes valtoname]] 
8d60: 7b 0a 20 20 73 65 74 20 6e 61 6d 65 20 24 76 61  {.  set name $va
8d70: 6c 74 6f 6e 61 6d 65 28 24 76 61 6c 29 0a 20 20  ltoname($val).  
8d80: 72 65 67 73 75 62 20 7b 73 71 6c 69 74 65 5f 7d  regsub {sqlite_}
8d90: 20 5b 73 74 72 69 6e 67 20 74 6f 6c 6f 77 65 72   [string tolower
8da0: 20 24 6e 61 6d 65 5d 20 7b 7d 20 74 61 67 0a 20   $name] {} tag. 
8db0: 20 68 64 5f 70 75 74 73 20 22 3c 21 2d 2d 2d 2d   hd_puts "<!----
8dc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8dd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8de0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8df0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 3e 5c 6e 22 0a  ----------->\n".
8e00: 20 20 68 64 5f 66 72 61 67 6d 65 6e 74 20 24 74    hd_fragment $t
8e10: 61 67 20 2d 2d 6f 76 65 72 72 69 64 65 20 24 6e  ag --override $n
8e20: 61 6d 65 0a 20 20 68 64 5f 70 75 74 73 20 22 3c  ame.  hd_puts "<
8e30: 68 33 3e 28 24 76 61 6c 29 20 24 76 61 6c 74 6f  h3>($val) $valto
8e40: 6e 61 6d 65 28 24 76 61 6c 29 3c 2f 68 33 3e 5c  name($val)</h3>\
8e50: 6e 22 0a 20 20 68 64 5f 72 65 73 6f 6c 76 65 20  n".  hd_resolve 
8e60: 24 72 65 73 64 65 73 63 28 24 6e 61 6d 65 29 5c  $resdesc($name)\
8e70: 6e 5c 6e 0a 7d 0a 0a 3c 2f 74 63 6c 3e 0a        n\n.}..</tcl>.