Documentation Source Text

Hex Artifact Content
Login

Artifact bf4389df8bbf0df3342305a5aa91694df901c826:


0000: 3c 74 69 74 6c 65 3e 51 75 65 72 79 20 4c 61 6e  <title>Query Lan
0010: 67 75 61 67 65 20 55 6e 64 65 72 73 74 6f 6f 64  guage Understood
0020: 20 62 79 20 53 51 4c 69 74 65 3c 2f 74 69 74 6c   by SQLite</titl
0030: 65 3e 0a 0a 3c 68 31 20 61 6c 69 67 6e 3d 63 65  e>..<h1 align=ce
0040: 6e 74 65 72 3e 53 51 4c 20 41 73 20 55 6e 64 65  nter>SQL As Unde
0050: 72 73 74 6f 6f 64 20 42 79 20 53 51 4c 69 74 65  rstood By SQLite
0060: 3c 2f 68 31 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65  </h1>..<p>SQLite
0070: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 6d 6f 73   understands mos
0080: 74 20 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72  t of the standar
0090: 64 20 53 51 4c 0a 6c 61 6e 67 75 61 67 65 2e 20  d SQL.language. 
00a0: 20 42 75 74 20 69 74 20 64 6f 65 73 20 3c 61 20   But it does <a 
00b0: 68 72 65 66 3d 22 6f 6d 69 74 74 65 64 2e 68 74  href="omitted.ht
00c0: 6d 6c 22 3e 6f 6d 69 74 20 73 6f 6d 65 20 66 65  ml">omit some fe
00d0: 61 74 75 72 65 73 3c 2f 61 3e 0a 77 68 69 6c 65  atures</a>.while
00e0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
00f0: 65 0a 61 64 64 69 6e 67 20 61 20 66 65 77 20 66  e.adding a few f
0100: 65 61 74 75 72 65 73 20 6f 66 20 69 74 73 20 6f  eatures of its o
0110: 77 6e 2e 20 20 54 68 69 73 20 64 6f 63 75 6d 65  wn.  This docume
0120: 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 0a 64  nt attempts to.d
0130: 65 73 63 72 69 62 65 20 70 72 65 63 69 73 65 6c  escribe precisel
0140: 79 20 77 68 61 74 20 70 61 72 74 73 20 6f 66 20  y what parts of 
0150: 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
0160: 20 53 51 4c 69 74 65 20 64 6f 65 73 0a 61 6e 64   SQLite does.and
0170: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
0180: 74 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 5b 53  t.  A list of [S
0190: 51 4c 20 6b 65 79 77 6f 72 64 73 5d 20 69 73 20  QL keywords] is 
01a0: 0a 61 6c 73 6f 20 70 72 6f 76 69 64 65 64 2e 20  .also provided. 
01b0: 20 54 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   The SQL languag
01c0: 65 20 73 79 6e 74 61 78 20 69 73 20 64 65 73 63  e syntax is desc
01d0: 72 69 62 65 64 20 62 79 0a 5b 73 79 6e 74 61 78  ribed by.[syntax
01e0: 20 64 69 61 67 72 61 6d 73 5d 2e 0a 0a 3c 70 3e   diagrams]...<p>
01f0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  The following sy
0200: 6e 74 61 78 20 64 6f 63 75 6d 65 6e 74 61 74 69  ntax documentati
0210: 6f 6e 20 74 6f 70 69 63 73 20 61 72 65 20 61 76  on topics are av
0220: 61 69 6c 61 62 6c 65 3a 3c 2f 70 3e 0a 0a 3c 74  ailable:</p>..<t
0230: 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25  able width="100%
0240: 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35  " cellpadding="5
0250: 22 20 62 6f 72 64 65 72 3d 22 30 22 3e 0a 3c 74  " border="0">.<t
0260: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
0270: 70 22 3e 3c 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 20  p"><ul>..<tcl>. 
0280: 20 73 65 74 20 69 20 30 0a 20 20 73 65 74 20 6c   set i 0.  set l
0290: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
02a0: 20 7b 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20   {.    {{CREATE 
02b0: 54 41 42 4c 45 7d 20 63 72 65 61 74 65 74 61 62  TABLE} createtab
02c0: 6c 65 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45  le}.    {{CREATE
02d0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20   VIRTUAL TABLE} 
02e0: 63 72 65 61 74 65 76 74 61 62 7d 0a 20 20 20 20  createvtab}.    
02f0: 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20  {{CREATE INDEX} 
0300: 63 72 65 61 74 65 69 6e 64 65 78 7d 0a 20 20 20  createindex}.   
0310: 20 7b 56 41 43 55 55 4d 20 76 61 63 75 75 6d 7d   {VACUUM vacuum}
0320: 0a 20 20 20 20 7b 7b 44 52 4f 50 20 54 41 42 4c  .    {{DROP TABL
0330: 45 7d 20 64 72 6f 70 74 61 62 6c 65 7d 0a 20 20  E} droptable}.  
0340: 20 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20    {{DROP INDEX} 
0350: 64 72 6f 70 69 6e 64 65 78 7d 0a 20 20 20 20 7b  dropindex}.    {
0360: 49 4e 53 45 52 54 20 69 6e 73 65 72 74 7d 0a 20  INSERT insert}. 
0370: 20 20 20 7b 52 45 50 4c 41 43 45 20 72 65 70 6c     {REPLACE repl
0380: 61 63 65 7d 0a 20 20 20 20 7b 44 45 4c 45 54 45  ace}.    {DELETE
0390: 20 64 65 6c 65 74 65 7d 0a 20 20 20 20 7b 55 50   delete}.    {UP
03a0: 44 41 54 45 20 75 70 64 61 74 65 7d 0a 20 20 20  DATE update}.   
03b0: 20 7b 53 45 4c 45 43 54 20 73 65 6c 65 63 74 7d   {SELECT select}
03c0: 0a 20 20 20 20 7b 63 6f 6d 6d 65 6e 74 20 63 6f  .    {comment co
03d0: 6d 6d 65 6e 74 7d 0a 20 20 20 20 7b 45 58 50 4c  mment}.    {EXPL
03e0: 41 49 4e 20 65 78 70 6c 61 69 6e 7d 0a 20 20 20  AIN explain}.   
03f0: 20 7b 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70   {expression exp
0400: 72 7d 0a 20 20 20 20 7b 7b 42 45 47 49 4e 20 54  r}.    {{BEGIN T
0410: 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e  RANSACTION} tran
0420: 73 61 63 74 69 6f 6e 7d 0a 20 20 20 20 7b 7b 43  saction}.    {{C
0430: 4f 4d 4d 49 54 20 54 52 41 4e 53 41 43 54 49 4f  OMMIT TRANSACTIO
0440: 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 43  N} transaction C
0450: 4f 4d 4d 49 54 7d 0a 20 20 20 20 7b 7b 45 4e 44  OMMIT}.    {{END
0460: 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72   TRANSACTION} tr
0470: 61 6e 73 61 63 74 69 6f 6e 20 43 4f 4d 4d 49 54  ansaction COMMIT
0480: 7d 0a 20 20 20 20 7b 7b 52 4f 4c 4c 42 41 43 4b  }.    {{ROLLBACK
0490: 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72   TRANSACTION} tr
04a0: 61 6e 73 61 63 74 69 6f 6e 20 52 4f 4c 4c 42 41  ansaction ROLLBA
04b0: 43 4b 7d 0a 20 20 20 20 7b 53 41 56 45 50 4f 49  CK}.    {SAVEPOI
04c0: 4e 54 20 73 61 76 65 70 6f 69 6e 74 7d 0a 20 20  NT savepoint}.  
04d0: 20 20 7b 7b 52 45 4c 45 41 53 45 20 53 41 56 45    {{RELEASE SAVE
04e0: 50 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74  POINT} savepoint
04f0: 20 53 41 56 45 50 4f 49 4e 54 7d 0a 20 20 20 20   SAVEPOINT}.    
0500: 7b 50 52 41 47 4d 41 20 70 72 61 67 6d 61 2e 68  {PRAGMA pragma.h
0510: 74 6d 6c 7d 0a 20 20 20 20 7b 7b 4f 4e 20 43 4f  tml}.    {{ON CO
0520: 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63  NFLICT clause} c
0530: 6f 6e 66 6c 69 63 74 7d 0a 20 20 20 20 7b 7b 43  onflict}.    {{C
0540: 52 45 41 54 45 20 56 49 45 57 7d 20 63 72 65 61  REATE VIEW} crea
0550: 74 65 76 69 65 77 7d 0a 20 20 20 20 7b 7b 44 52  teview}.    {{DR
0560: 4f 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65  OP VIEW} dropvie
0570: 77 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20  w}.    {{CREATE 
0580: 54 52 49 47 47 45 52 7d 20 63 72 65 61 74 65 74  TRIGGER} createt
0590: 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 44 52  rigger}.    {{DR
05a0: 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70  OP TRIGGER} drop
05b0: 74 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 41  trigger}.    {{A
05c0: 54 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20  TTACH DATABASE} 
05d0: 61 74 74 61 63 68 7d 0a 20 20 20 20 7b 7b 44 45  attach}.    {{DE
05e0: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64  TACH DATABASE} d
05f0: 65 74 61 63 68 7d 0a 20 20 20 20 7b 52 45 49 4e  etach}.    {REIN
0600: 44 45 58 20 72 65 69 6e 64 65 78 7d 0a 20 20 20  DEX reindex}.   
0610: 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d 20   {{ALTER TABLE} 
0620: 61 6c 74 65 72 74 61 62 6c 65 7d 0a 20 20 20 20  altertable}.    
0630: 7b 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c 79  {{ANALYZE} analy
0640: 7a 65 7d 0a 20 20 20 20 7b 7b 49 4e 44 45 58 45  ze}.    {{INDEXE
0650: 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79 7d  D BY} indexedby}
0660: 0a 20 20 20 20 7b 7b 61 67 67 72 65 67 61 74 65  .    {{aggregate
0670: 20 66 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67 66   functions} aggf
0680: 75 6e 63 20 61 67 67 66 75 6e 63 7d 0a 20 20 20  unc aggfunc}.   
0690: 20 7b 7b 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e   {{core function
06a0: 73 7d 20 63 6f 72 65 66 75 6e 63 20 63 6f 72 65  s} corefunc core
06b0: 66 75 6e 63 7d 0a 20 20 20 20 7b 7b 64 61 74 65  func}.    {{date
06c0: 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69   and time functi
06d0: 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20 64 61  ons} datefunc da
06e0: 74 65 66 75 6e 63 7d 0a 20 20 20 20 7b 6b 65 79  tefunc}.    {key
06f0: 77 6f 72 64 73 20 6b 65 79 77 6f 72 64 73 20 7b  words keywords {
0700: 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a 20  SQL keywords}}. 
0710: 20 7d 0a 20 20 73 65 74 20 6c 61 6e 67 5f 73 65   }.  set lang_se
0720: 63 74 69 6f 6e 5f 62 72 65 61 6b 20 5b 65 78 70  ction_break [exp
0730: 72 20 7b 28 5b 6c 6c 65 6e 67 74 68 20 24 6c 61  r {([llength $la
0740: 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74 5d  ng_section_list]
0750: 2b 32 29 2f 33 7d 5d 0a 20 20 66 6f 72 65 61 63  +2)/3}].  foreac
0760: 68 20 7b 73 65 63 74 69 6f 6e 7d 20 5b 6c 73 6f  h {section} [lso
0770: 72 74 20 2d 69 6e 64 65 78 20 30 20 2d 64 69 63  rt -index 0 -dic
0780: 74 69 6f 6e 61 72 79 20 24 6c 61 6e 67 5f 73 65  tionary $lang_se
0790: 63 74 69 6f 6e 5f 6c 69 73 74 5d 20 7b 0a 20 20  ction_list] {.  
07a0: 66 6f 72 65 61 63 68 20 7b 73 5f 74 69 74 6c 65  foreach {s_title
07b0: 20 73 5f 74 61 67 20 73 5f 6b 77 7d 20 24 73 65   s_tag s_kw} $se
07c0: 63 74 69 6f 6e 20 7b 7d 0a 20 20 69 66 20 7b 24  ction {}.  if {$
07d0: 73 5f 6b 77 20 3d 3d 20 22 22 7d 20 7b 0a 20 20  s_kw == ""} {.  
07e0: 20 20 73 65 74 20 73 5f 6b 77 20 24 73 5f 74 69    set s_kw $s_ti
07f0: 74 6c 65 0a 20 20 7d 0a 20 20 69 66 20 7b 24 73  tle.  }.  if {$s
0800: 5f 74 61 67 3d 3d 22 70 72 61 67 6d 61 2e 68 74  _tag=="pragma.ht
0810: 6d 6c 22 7d 20 7b 0a 20 20 20 20 73 65 74 20 75  ml"} {.    set u
0820: 72 6c 20 24 73 5f 74 61 67 0a 20 20 7d 20 65 6c  rl $s_tag.  } el
0830: 73 65 20 7b 0a 20 20 20 20 73 65 74 20 75 72 6c  se {.    set url
0840: 20 6c 61 6e 67 5f 24 73 5f 74 61 67 2e 68 74 6d   lang_$s_tag.htm
0850: 6c 0a 20 20 7d 0a 20 20 68 64 5f 72 65 73 6f 6c  l.  }.  hd_resol
0860: 76 65 20 22 3c 6c 69 3e 5c 5b 24 73 5f 6b 77 7c  ve "<li>\[$s_kw|
0870: 24 73 5f 74 69 74 6c 65 5c 5d 3c 2f 6c 69 3e 22  $s_title\]</li>"
0880: 0a 20 20 69 6e 63 72 20 69 0a 20 20 69 66 20 7b  .  incr i.  if {
0890: 24 69 3d 3d 24 6c 61 6e 67 5f 73 65 63 74 69 6f  $i==$lang_sectio
08a0: 6e 5f 62 72 65 61 6b 20 7c 7c 20 24 69 3d 3d 32  n_break || $i==2
08b0: 2a 24 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 62  *$lang_section_b
08c0: 72 65 61 6b 7d 20 7b 0a 20 20 20 20 68 64 5f 70  reak} {.    hd_p
08d0: 75 74 73 20 22 3c 2f 75 6c 3e 3c 2f 74 64 3e 3c  uts "</ul></td><
08e0: 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c  td valign=\"top\
08f0: 22 3e 3c 75 6c 3e 22 0a 20 20 7d 0a 7d 0a 3c 2f  "><ul>".  }.}.</
0900: 74 63 6c 3e 0a 3c 2f 75 6c 3e 3c 2f 74 64 3e 3c  tcl>.</ul></td><
0910: 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70  /tr></table>..<p
0920: 3e 5e 54 68 65 20 72 6f 75 74 69 6e 65 73 20 5b  >^The routines [
0930: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
0940: 76 32 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f  v2()], [sqlite3_
0950: 70 72 65 70 61 72 65 28 29 5d 2c 0a 5b 73 71 6c  prepare()],.[sql
0960: 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 28 29  ite3_prepare16()
0970: 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  ], [sqlite3_prep
0980: 61 72 65 31 36 5f 76 32 28 29 5d 2c 20 0a 5b 73  are16_v2()], .[s
0990: 71 6c 69 74 65 33 5f 65 78 65 63 28 29 5d 2c 20  qlite3_exec()], 
09a0: 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 67 65 74  and [sqlite3_get
09b0: 5f 74 61 62 6c 65 28 29 5d 20 61 63 63 65 70 74  _table()] accept
09c0: 0a 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  .an SQL statemen
09d0: 74 20 6c 69 73 74 20 28 73 71 6c 2d 73 74 6d 74  t list (sql-stmt
09e0: 2d 6c 69 73 74 29 20 77 68 69 63 68 20 69 73 20  -list) which is 
09f0: 61 20 73 65 6d 69 63 6f 6c 6f 6e 2d 73 65 70 61  a semicolon-sepa
0a00: 72 61 74 65 64 0a 6c 69 73 74 20 6f 66 20 73 74  rated.list of st
0a10: 61 74 65 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c  atements.</p>..<
0a20: 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61  tcl>BubbleDiagra
0a30: 6d 20 73 71 6c 2d 73 74 6d 74 2d 6c 69 73 74 3c  m sql-stmt-list<
0a40: 2f 74 63 6c 3e 0a 0a 3c 70 3e 45 61 63 68 20 53  /tcl>..<p>Each S
0a50: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20  QL statement in 
0a60: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 6c 69  the statement li
0a70: 73 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  st is an instanc
0a80: 65 20 6f 66 20 74 68 65 0a 66 6f 6c 6c 6f 77 69  e of the.followi
0a90: 6e 67 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75  ng:</p>..<tcl>Bu
0aa0: 62 62 6c 65 44 69 61 67 72 61 6d 20 73 71 6c 2d  bbleDiagram sql-
0ab0: 73 74 6d 74 3c 2f 74 63 6c 3e 0a 0a 3c 74 63 6c  stmt</tcl>..<tcl
0ac0: 3e 0a 70 72 6f 63 20 4f 70 65 72 61 74 6f 72 20  >.proc Operator 
0ad0: 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65 74 75 72  {name} {.  retur
0ae0: 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c  n "<font color=\
0af0: 22 23 32 63 32 63 66 30 5c 22 3e 3c 62 69 67 3e  "#2c2cf0\"><big>
0b00: 24 6e 61 6d 65 3c 2f 62 69 67 3e 3c 2f 66 6f 6e  $name</big></fon
0b10: 74 3e 22 0a 7d 0a 70 72 6f 63 20 4e 6f 6e 74 65  t>".}.proc Nonte
0b20: 72 6d 69 6e 61 6c 20 7b 6e 61 6d 65 7d 20 7b 0a  rminal {name} {.
0b30: 20 20 72 65 74 75 72 6e 20 22 3c 69 3e 3c 66 6f    return "<i><fo
0b40: 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 66 66 33 34  nt color=\"#ff34
0b50: 33 34 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74  34\">$name</font
0b60: 3e 3c 2f 69 3e 22 0a 7d 0a 70 72 6f 63 20 4b 65  ></i>".}.proc Ke
0b70: 79 77 6f 72 64 20 7b 6e 61 6d 65 7d 20 7b 0a 20  yword {name} {. 
0b80: 20 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74 20 63   return "<font c
0b90: 6f 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30 5c 22  olor=\"#2c2cf0\"
0ba0: 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 22 0a 7d  >$name</font>".}
0bb0: 0a 70 72 6f 63 20 45 78 61 6d 70 6c 65 20 7b 74  .proc Example {t
0bc0: 65 78 74 7d 20 7b 0a 20 20 68 64 5f 70 75 74 73  ext} {.  hd_puts
0bd0: 20 22 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70   "<blockquote><p
0be0: 72 65 3e 24 74 65 78 74 3c 2f 70 72 65 3e 3c 2f  re>$text</pre></
0bf0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 22 0a 7d 0a 0a  blockquote>".}..
0c00: 70 72 6f 63 20 53 65 63 74 69 6f 6e 20 7b 6e 61  proc Section {na
0c10: 6d 65 20 6c 61 62 65 6c 20 6b 65 79 77 6f 72 64  me label keyword
0c20: 73 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 44 4f  s} {.  global DO
0c30: 43 0a 20 20 68 64 5f 63 6c 6f 73 65 5f 6d 61 69  C.  hd_close_mai
0c40: 6e 0a 20 20 68 64 5f 6f 70 65 6e 5f 6d 61 69 6e  n.  hd_open_main
0c50: 20 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e 68 74 6d   lang_$label.htm
0c60: 6c 0a 20 20 68 64 5f 68 65 61 64 65 72 20 22 53  l.  hd_header "S
0c70: 51 4c 69 74 65 20 51 75 65 72 79 20 4c 61 6e 67  QLite Query Lang
0c80: 75 61 67 65 3a 20 24 6e 61 6d 65 22 20 24 44 4f  uage: $name" $DO
0c90: 43 2f 70 61 67 65 73 2f 6c 61 6e 67 2e 69 6e 0a  C/pages/lang.in.
0ca0: 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72    eval hd_keywor
0cb0: 64 73 20 24 6b 65 79 77 6f 72 64 73 0a 20 20 69  ds $keywords.  i
0cc0: 66 20 7b 5b 6c 73 65 61 72 63 68 20 24 6b 65 79  f {[lsearch $key
0cd0: 77 6f 72 64 73 20 24 6e 61 6d 65 5d 20 3d 3d 20  words $name] == 
0ce0: 2d 31 20 26 26 20 5b 6c 73 65 61 72 63 68 20 24  -1 && [lsearch $
0cf0: 6b 65 79 77 6f 72 64 73 20 2a 24 6e 61 6d 65 5d  keywords *$name]
0d00: 20 3d 3d 20 2d 31 7d 20 7b 0a 20 20 20 20 65 76   == -1} {.    ev
0d10: 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  al hd_keywords {
0d20: 20 24 6e 61 6d 65 20 7d 0a 20 20 7d 0a 20 20 68   $name }.  }.  h
0d30: 64 5f 70 75 74 73 20 7b 3c 68 31 20 61 6c 69 67  d_puts {<h1 alig
0d40: 6e 3d 22 63 65 6e 74 65 72 22 3e 53 51 4c 20 41  n="center">SQL A
0d50: 73 20 55 6e 64 65 72 73 74 6f 6f 64 20 42 79 20  s Understood By 
0d60: 53 51 4c 69 74 65 3c 2f 68 31 3e 7d 0a 20 20 68  SQLite</h1>}.  h
0d70: 64 5f 70 75 74 73 20 7b 3c 70 3e 3c 61 20 68 72  d_puts {<p><a hr
0d80: 65 66 3d 22 6c 61 6e 67 2e 68 74 6d 6c 22 3e 5b  ef="lang.html">[
0d90: 54 6f 70 5d 3c 2f 61 3e 3c 2f 70 3e 7d 0a 20 20  Top]</a></p>}.  
0da0: 68 64 5f 70 75 74 73 20 22 3c 68 32 3e 24 6e 61  hd_puts "<h2>$na
0db0: 6d 65 3c 2f 68 32 3e 22 0a 7d 0a 0a 23 23 23 23  me</h2>".}..####
0dc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e00: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
0e10: 69 6f 6e 20 7b 41 4c 54 45 52 20 54 41 42 4c 45  ion {ALTER TABLE
0e20: 7d 20 61 6c 74 65 72 74 61 62 6c 65 20 7b 7b 41  } altertable {{A
0e30: 4c 54 45 52 20 54 41 42 4c 45 7d 20 7b 2a 41 4c  LTER TABLE} {*AL
0e40: 54 45 52 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61  TER}}..BubbleDia
0e50: 67 72 61 6d 20 61 6c 74 65 72 2d 74 61 62 6c 65  gram alter-table
0e60: 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a  -stmt 1.</tcl>..
0e70: 3c 70 3e 53 51 4c 69 74 65 20 73 75 70 70 6f 72  <p>SQLite suppor
0e80: 74 73 20 61 20 6c 69 6d 69 74 65 64 20 73 75 62  ts a limited sub
0e90: 73 65 74 20 6f 66 20 41 4c 54 45 52 20 54 41 42  set of ALTER TAB
0ea0: 4c 45 2e 0a 54 68 65 20 41 4c 54 45 52 20 54 41  LE..The ALTER TA
0eb0: 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 53  BLE command in S
0ec0: 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74 68 65  QLite allows the
0ed0: 20 75 73 65 72 20 74 6f 20 72 65 6e 61 6d 65 20   user to rename 
0ee0: 61 20 74 61 62 6c 65 0a 6f 72 20 74 6f 20 61 64  a table.or to ad
0ef0: 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 74  d a new column t
0f00: 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61  o an existing ta
0f10: 62 6c 65 2e 20 49 74 20 69 73 20 6e 6f 74 20 70  ble. It is not p
0f20: 6f 73 73 69 62 6c 65 0a 74 6f 20 72 65 6e 61 6d  ossible.to renam
0f30: 65 20 61 20 63 6f 6c 75 6d 6e 2c 20 72 65 6d 6f  e a column, remo
0f40: 76 65 20 61 20 63 6f 6c 75 6d 6e 2c 20 6f 72 20  ve a column, or 
0f50: 61 64 64 20 6f 72 20 72 65 6d 6f 76 65 20 63 6f  add or remove co
0f60: 6e 73 74 72 61 69 6e 74 73 20 66 72 6f 6d 20 61  nstraints from a
0f70: 20 74 61 62 6c 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70   table..</p>..<p
0f80: 3e 20 5e 28 54 68 65 20 52 45 4e 41 4d 45 20 54  > ^(The RENAME T
0f90: 4f 20 73 79 6e 74 61 78 20 69 73 20 75 73 65 64  O syntax is used
0fa0: 20 74 6f 20 72 65 6e 61 6d 65 20 74 68 65 20 74   to rename the t
0fb0: 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65 64 20  able identified 
0fc0: 62 79 20 0a 3c 69 3e 26 23 39 31 3b 64 61 74 61  by .<i>&#91;data
0fd0: 62 61 73 65 2d 6e 61 6d 65 2e 26 23 39 33 3b 74  base-name.&#93;t
0fe0: 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 74 6f  able-name</i> to
0ff0: 20 3c 69 3e 6e 65 77 2d 74 61 62 6c 65 2d 6e 61   <i>new-table-na
1000: 6d 65 3c 2f 69 3e 2e 29 5e 0a 54 68 69 73 20 63  me</i>.)^.This c
1010: 6f 6d 6d 61 6e 64 20 0a 63 61 6e 6e 6f 74 20 62  ommand .cannot b
1020: 65 20 75 73 65 64 20 74 6f 20 6d 6f 76 65 20 61  e used to move a
1030: 20 74 61 62 6c 65 20 62 65 74 77 65 65 6e 20 61   table between a
1040: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
1050: 73 2c 20 6f 6e 6c 79 20 74 6f 20 72 65 6e 61 6d  s, only to renam
1060: 65 20 0a 61 20 74 61 62 6c 65 20 77 69 74 68 69  e .a table withi
1070: 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  n the same datab
1080: 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 49  ase.</p>..<p> ^I
1090: 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  f the table bein
10a0: 67 20 72 65 6e 61 6d 65 64 20 68 61 73 20 74 72  g renamed has tr
10b0: 69 67 67 65 72 73 20 6f 72 20 69 6e 64 69 63 65  iggers or indice
10c0: 73 2c 20 74 68 65 6e 20 74 68 65 73 65 20 72 65  s, then these re
10d0: 6d 61 69 6e 0a 61 74 74 61 63 68 65 64 20 74 6f  main.attached to
10e0: 20 74 68 65 20 74 61 62 6c 65 20 61 66 74 65 72   the table after
10f0: 20 69 74 20 68 61 73 20 62 65 65 6e 20 72 65 6e   it has been ren
1100: 61 6d 65 64 2e 20 20 5e 48 6f 77 65 76 65 72 2c  amed.  ^However,
1110: 20 69 66 20 74 68 65 72 65 20 61 72 65 0a 61 6e   if there are.an
1120: 79 20 76 69 65 77 20 64 65 66 69 6e 69 74 69 6f  y view definitio
1130: 6e 73 2c 20 6f 72 20 73 74 61 74 65 6d 65 6e 74  ns, or statement
1140: 73 20 65 78 65 63 75 74 65 64 20 62 79 20 74 72  s executed by tr
1150: 69 67 67 65 72 73 20 74 68 61 74 20 72 65 66 65  iggers that refe
1160: 72 20 74 6f 0a 74 68 65 20 74 61 62 6c 65 20 62  r to.the table b
1170: 65 69 6e 67 20 72 65 6e 61 6d 65 64 2c 20 74 68  eing renamed, th
1180: 65 73 65 20 61 72 65 20 6e 6f 74 20 61 75 74 6f  ese are not auto
1190: 6d 61 74 69 63 61 6c 6c 79 20 6d 6f 64 69 66 69  matically modifi
11a0: 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e 65  ed to use the ne
11b0: 77 0a 74 61 62 6c 65 20 6e 61 6d 65 2e 20 49 66  w.table name. If
11c0: 20 74 68 69 73 20 69 73 20 72 65 71 75 69 72 65   this is require
11d0: 64 2c 20 74 68 65 20 74 72 69 67 67 65 72 73 20  d, the triggers 
11e0: 6f 72 20 76 69 65 77 20 64 65 66 69 6e 69 74 69  or view definiti
11f0: 6f 6e 73 20 6d 75 73 74 20 62 65 0a 64 72 6f 70  ons must be.drop
1200: 70 65 64 20 61 6e 64 20 72 65 63 72 65 61 74 65  ped and recreate
1210: 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e 65 77  d to use the new
1220: 20 74 61 62 6c 65 20 6e 61 6d 65 20 62 79 20 68   table name by h
1230: 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  and..</p>..<p>^I
1240: 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  f [foreign key c
1250: 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72 65 20  onstraints] are 
1260: 0a 5b 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20 70  .[foreign_keys p
1270: 72 61 67 6d 61 20 7c 20 65 6e 61 62 6c 65 64 5d  ragma | enabled]
1280: 20 77 68 65 6e 20 61 20 74 61 62 6c 65 20 69 73   when a table is
1290: 20 72 65 6e 61 6d 65 64 2c 20 74 68 65 6e 20 61   renamed, then a
12a0: 6e 79 0a 5b 66 6f 72 65 69 67 6e 2d 6b 65 79 2d  ny.[foreign-key-
12b0: 63 6c 61 75 73 65 20 7c 20 52 45 46 45 52 45 4e  clause | REFEREN
12c0: 43 45 53 20 63 6c 61 75 73 65 73 5d 20 69 6e 20  CES clauses] in 
12d0: 61 6e 79 20 74 61 62 6c 65 20 28 65 69 74 68 65  any table (eithe
12e0: 72 20 74 68 65 0a 74 61 62 6c 65 20 62 65 69 6e  r the.table bein
12f0: 67 20 72 65 6e 61 6d 65 64 20 6f 72 20 73 6f 6d  g renamed or som
1300: 65 20 6f 74 68 65 72 20 74 61 62 6c 65 29 0a 74  e other table).t
1310: 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 65  hat refer to the
1320: 20 74 61 62 6c 65 20 62 65 69 6e 67 20 72 65 6e   table being ren
1330: 61 6d 65 64 20 61 72 65 20 6d 6f 64 69 66 69 65  amed are modifie
1340: 64 20 74 6f 20 72 65 66 65 72 20 0a 74 6f 20 74  d to refer .to t
1350: 68 65 20 72 65 6e 61 6d 65 64 20 74 61 62 6c 65  he renamed table
1360: 20 62 79 20 69 74 73 20 6e 65 77 20 6e 61 6d 65   by its new name
1370: 2e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 44 44 20  ...<p> ^The ADD 
1380: 43 4f 4c 55 4d 4e 20 73 79 6e 74 61 78 0a 69 73  COLUMN syntax.is
1390: 20 75 73 65 64 20 74 6f 20 61 64 64 20 61 20 6e   used to add a n
13a0: 65 77 20 63 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20  ew column to an 
13b0: 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65 2e 0a  existing table..
13c0: 5e 54 68 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 20  ^The new column 
13d0: 69 73 20 61 6c 77 61 79 73 20 61 70 70 65 6e 64  is always append
13e0: 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66  ed to the end of
13f0: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65 78 69   the list of exi
1400: 73 74 69 6e 67 20 63 6f 6c 75 6d 6e 73 2e 0a 54  sting columns..T
1410: 68 65 20 5b 63 6f 6c 75 6d 6e 2d 64 65 66 5d 20  he [column-def] 
1420: 72 75 6c 65 20 64 65 66 69 6e 65 73 20 74 68 65  rule defines the
1430: 20 63 68 61 72 61 63 74 65 72 69 73 74 69 63 73   characteristics
1440: 20 6f 66 20 74 68 65 20 6e 65 77 20 63 6f 6c 75   of the new colu
1450: 6d 6e 2e 0a 5e 28 54 68 65 20 6e 65 77 20 63 6f  mn..^(The new co
1460: 6c 75 6d 6e 20 6d 61 79 20 74 61 6b 65 20 61 6e  lumn may take an
1470: 79 20 6f 66 20 74 68 65 20 66 6f 72 6d 73 20 70  y of the forms p
1480: 65 72 6d 69 73 73 69 62 6c 65 20 69 6e 20 61 20  ermissible in a 
1490: 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 0a 73  [CREATE TABLE].s
14a0: 74 61 74 65 6d 65 6e 74 2c 20 77 69 74 68 20 74  tatement, with t
14b0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 73  he following res
14c0: 74 72 69 63 74 69 6f 6e 73 3a 29 5e 0a 3c 75 6c  trictions:)^.<ul
14d0: 3e 0a 3c 6c 69 3e 5e 54 68 65 20 63 6f 6c 75 6d  >.<li>^The colum
14e0: 6e 20 6d 61 79 20 6e 6f 74 20 68 61 76 65 20 61  n may not have a
14f0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20   PRIMARY KEY or 
1500: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
1510: 74 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 5e 54 68 65  t.</li>.<li>^The
1520: 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20   column may not 
1530: 68 61 76 65 20 61 20 64 65 66 61 75 6c 74 20 76  have a default v
1540: 61 6c 75 65 20 6f 66 20 43 55 52 52 45 4e 54 5f  alue of CURRENT_
1550: 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41  TIME, CURRENT_DA
1560: 54 45 2c 20 0a 20 20 20 20 43 55 52 52 45 4e 54  TE, .    CURRENT
1570: 5f 54 49 4d 45 53 54 41 4d 50 2c 20 6f 72 20 61  _TIMESTAMP, or a
1580: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  n expression in 
1590: 70 61 72 65 6e 74 68 65 73 65 73 2e 3c 2f 6c 69  parentheses.</li
15a0: 3e 0a 3c 6c 69 3e 5e 49 66 20 61 20 4e 4f 54 20  >.<li>^If a NOT 
15b0: 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20  NULL constraint 
15c0: 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  is specified, th
15d0: 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 75  en the column mu
15e0: 73 74 20 68 61 76 65 20 61 0a 20 20 20 20 64 65  st have a.    de
15f0: 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 74 68 65  fault value othe
1600: 72 20 74 68 61 6e 20 4e 55 4c 4c 2e 0a 3c 6c 69  r than NULL..<li
1610: 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65  >^If [foreign ke
1620: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61  y constraints] a
1630: 72 65 20 5b 66 6f 72 65 69 67 6e 5f 6b 65 79 73  re [foreign_keys
1640: 20 70 72 61 67 6d 61 20 7c 20 65 6e 61 62 6c 65   pragma | enable
1650: 64 5d 20 61 6e 64 0a 20 20 20 20 61 20 63 6f 6c  d] and.    a col
1660: 75 6d 6e 20 77 69 74 68 20 61 20 5b 66 6f 72 65  umn with a [fore
1670: 69 67 6e 2d 6b 65 79 2d 63 6c 61 75 73 65 20 7c  ign-key-clause |
1680: 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
1690: 73 65 5d 0a 20 20 20 20 69 73 20 61 64 64 65 64  se].    is added
16a0: 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 75 73  , the column mus
16b0: 74 20 68 61 76 65 20 61 20 64 65 66 61 75 6c 74  t have a default
16c0: 20 76 61 6c 75 65 20 6f 66 20 4e 55 4c 4c 2e 0a   value of NULL..
16d0: 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20  </ul>..<p>^Note 
16e0: 61 6c 73 6f 20 74 68 61 74 20 77 68 65 6e 20 61  also that when a
16f0: 64 64 69 6e 67 20 61 20 43 48 45 43 4b 20 63 6f  dding a CHECK co
1700: 6e 73 74 72 61 69 6e 74 2c 20 74 68 65 20 43 48  nstraint, the CH
1710: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 0a 69  ECK constraint.i
1720: 73 20 6e 6f 74 20 74 65 73 74 65 64 20 61 67 61  s not tested aga
1730: 69 6e 73 74 20 70 72 65 65 78 69 73 74 69 6e 67  inst preexisting
1740: 20 72 6f 77 73 20 6f 66 20 74 68 65 20 74 61 62   rows of the tab
1750: 6c 65 2e 0a 5e 54 68 69 73 20 63 61 6e 20 72 65  le..^This can re
1760: 73 75 6c 74 20 69 6e 20 61 20 74 61 62 6c 65 20  sult in a table 
1770: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 64 61  that contains da
1780: 74 61 20 74 68 61 74 0a 69 73 20 69 6e 20 76 69  ta that.is in vi
1790: 6f 6c 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 43  olation of the C
17a0: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2e  HECK constraint.
17b0: 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e    Future version
17c0: 73 20 6f 66 20 53 51 4c 69 74 65 20 6d 69 67 68  s of SQLite migh
17d0: 74 0a 63 68 61 6e 67 65 20 74 6f 20 76 61 6c 69  t.change to vali
17e0: 64 61 74 65 20 43 48 45 43 4b 20 63 6f 6e 73 74  date CHECK const
17f0: 72 61 69 6e 74 73 20 61 73 20 74 68 65 79 20 61  raints as they a
1800: 72 65 20 61 64 64 65 64 2e 3c 2f 70 3e 0a 0a 3c  re added.</p>..<
1810: 70 3e 20 54 68 65 20 65 78 65 63 75 74 69 6f 6e  p> The execution
1820: 20 74 69 6d 65 20 6f 66 20 74 68 65 20 41 4c 54   time of the ALT
1830: 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  ER TABLE command
1840: 20 69 73 20 69 6e 64 65 70 65 6e 64 65 6e 74 20   is independent 
1850: 6f 66 0a 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66  of.the amount of
1860: 20 64 61 74 61 20 69 6e 20 74 68 65 20 74 61 62   data in the tab
1870: 6c 65 2e 20 20 54 68 65 20 41 4c 54 45 52 20 54  le.  The ALTER T
1880: 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 72 75 6e  ABLE command run
1890: 73 20 61 73 20 71 75 69 63 6b 6c 79 0a 6f 6e 20  s as quickly.on 
18a0: 61 20 74 61 62 6c 65 20 77 69 74 68 20 31 30 20  a table with 10 
18b0: 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73 20 61 73 20  million rows as 
18c0: 69 74 20 64 6f 65 73 20 6f 6e 20 61 20 74 61 62  it does on a tab
18d0: 6c 65 20 77 69 74 68 20 31 20 72 6f 77 2e 0a 3c  le with 1 row..<
18e0: 2f 70 3e 0a 0a 3c 70 3e 41 66 74 65 72 20 41 44  /p>..<p>After AD
18f0: 44 20 43 4f 4c 55 4d 4e 20 68 61 73 20 62 65 65  D COLUMN has bee
1900: 6e 20 72 75 6e 20 6f 6e 20 61 20 64 61 74 61 62  n run on a datab
1910: 61 73 65 2c 20 74 68 61 74 20 64 61 74 61 62 61  ase, that databa
1920: 73 65 20 77 69 6c 6c 20 6e 6f 74 0a 62 65 20 72  se will not.be r
1930: 65 61 64 61 62 6c 65 20 62 79 20 53 51 4c 69 74  eadable by SQLit
1940: 65 20 76 65 72 73 69 6f 6e 20 33 2e 31 2e 33 20  e version 3.1.3 
1950: 61 6e 64 20 65 61 72 6c 69 65 72 2e 3c 2f 70 3e  and earlier.</p>
1960: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
1970: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1980: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19b0: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
19c0: 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c 79 7a 65  ANALYZE} analyze
19d0: 20 41 4e 41 4c 59 5a 45 0a 0a 42 75 62 62 6c 65   ANALYZE..Bubble
19e0: 44 69 61 67 72 61 6d 20 61 6e 61 6c 79 7a 65 2d  Diagram analyze-
19f0: 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c  stmt 1.</tcl>..<
1a00: 70 3e 20 5e 54 68 65 20 41 4e 41 4c 59 5a 45 20  p> ^The ANALYZE 
1a10: 63 6f 6d 6d 61 6e 64 20 67 61 74 68 65 72 73 20  command gathers 
1a20: 73 74 61 74 69 73 74 69 63 73 20 61 62 6f 75 74  statistics about
1a30: 20 69 6e 64 69 63 65 73 20 61 6e 64 20 73 74 6f   indices and sto
1a40: 72 65 73 20 74 68 65 6d 0a 69 6e 20 61 20 73 70  res them.in a sp
1a50: 65 63 69 61 6c 20 74 61 62 6c 65 73 20 69 6e 20  ecial tables in 
1a60: 74 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65  the database whe
1a70: 72 65 20 74 68 65 20 71 75 65 72 79 20 6f 70 74  re the query opt
1a80: 69 6d 69 7a 65 72 20 63 61 6e 20 75 73 65 0a 74  imizer can use.t
1a90: 68 65 6d 20 74 6f 20 68 65 6c 70 20 6d 61 6b 65  hem to help make
1aa0: 20 62 65 74 74 65 72 20 69 6e 64 65 78 20 63 68   better index ch
1ab0: 6f 69 63 65 73 2e 0a 5e 49 66 20 6e 6f 20 61 72  oices..^If no ar
1ac0: 67 75 6d 65 6e 74 73 20 61 72 65 20 67 69 76 65  guments are give
1ad0: 6e 2c 20 61 6c 6c 20 69 6e 64 69 63 65 73 20 69  n, all indices i
1ae0: 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  n all attached d
1af0: 61 74 61 62 61 73 65 73 20 61 72 65 0a 61 6e 61  atabases are.ana
1b00: 6c 79 7a 65 64 2e 20 20 5e 49 66 20 61 20 64 61  lyzed.  ^If a da
1b10: 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73 20 67  tabase name is g
1b20: 69 76 65 6e 20 61 73 20 74 68 65 20 61 72 67 75  iven as the argu
1b30: 6d 65 6e 74 2c 20 61 6c 6c 20 69 6e 64 69 63 65  ment, all indice
1b40: 73 0a 69 6e 20 74 68 61 74 20 6f 6e 65 20 64 61  s.in that one da
1b50: 74 61 62 61 73 65 20 61 72 65 20 61 6e 61 6c 79  tabase are analy
1b60: 7a 65 64 2e 20 20 5e 49 66 20 74 68 65 20 61 72  zed.  ^If the ar
1b70: 67 75 6d 65 6e 74 20 69 73 20 61 20 74 61 62 6c  gument is a tabl
1b80: 65 20 6e 61 6d 65 2c 0a 74 68 65 6e 20 6f 6e 6c  e name,.then onl
1b90: 79 20 69 6e 64 69 63 65 73 20 61 73 73 6f 63 69  y indices associ
1ba0: 61 74 65 64 20 77 69 74 68 20 74 68 61 74 20 6f  ated with that o
1bb0: 6e 65 20 74 61 62 6c 65 20 61 72 65 20 61 6e 61  ne table are ana
1bc0: 6c 79 7a 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20  lyzed.</p>..<p> 
1bd0: 5e 54 68 65 20 64 65 66 61 75 6c 74 20 69 6d 70  ^The default imp
1be0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 73 74 6f 72  lementation stor
1bf0: 65 73 20 61 6c 6c 20 73 74 61 74 69 73 74 69 63  es all statistic
1c00: 73 20 69 6e 20 61 20 73 69 6e 67 6c 65 0a 74 61  s in a single.ta
1c10: 62 6c 65 20 6e 61 6d 65 64 20 3c 62 3e 73 71 6c  ble named <b>sql
1c20: 69 74 65 5f 73 74 61 74 31 3c 2f 62 3e 2e 20 20  ite_stat1</b>.  
1c30: 5e 49 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f  ^If SQLite is co
1c40: 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 0a  mpiled with the.
1c50: 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  [SQLITE_ENABLE_S
1c60: 54 41 54 32 5d 20 6f 70 74 69 6f 6e 2c 20 74 68  TAT2] option, th
1c70: 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 68 69  en additional hi
1c80: 73 74 6f 67 72 61 6d 20 64 61 74 61 20 69 73 0a  stogram data is.
1c90: 63 6f 6c 6c 65 63 74 65 64 20 61 6e 64 20 73 74  collected and st
1ca0: 6f 72 65 64 20 69 6e 20 3c 62 3e 73 71 6c 69 74  ored in <b>sqlit
1cb0: 65 5f 73 74 61 74 32 3c 2f 62 3e 2e 0a 46 75 74  e_stat2</b>..Fut
1cc0: 75 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73  ure enhancements
1cd0: 20 6d 61 79 20 63 72 65 61 74 65 0a 61 64 64 69   may create.addi
1ce0: 74 69 6f 6e 61 6c 20 74 61 62 6c 65 73 20 77 69  tional tables wi
1cf0: 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  th the same name
1d00: 20 70 61 74 74 65 72 6e 20 65 78 63 65 70 74 20   pattern except 
1d10: 77 69 74 68 20 74 68 65 20 22 31 22 0a 6f 72 20  with the "1".or 
1d20: 22 32 22 20 63 68 61 6e 67 65 64 20 74 6f 20 61  "2" changed to a
1d30: 20 64 69 66 66 65 72 65 6e 74 20 64 69 67 69 74   different digit
1d40: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20  .</p>..<p> ^The 
1d50: 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20 63 6f 6d  [DROP TABLE] com
1d60: 6d 61 6e 64 20 64 6f 65 73 0a 6e 6f 74 20 77 6f  mand does.not wo
1d70: 72 6b 20 6f 6e 20 74 68 65 20 3c 62 3e 73 71 6c  rk on the <b>sql
1d80: 69 74 65 5f 73 74 61 74 31 3c 2f 62 3e 20 6f 72  ite_stat1</b> or
1d90: 20 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61 74 32   <b>sqlite_stat2
1da0: 3c 2f 62 3e 20 74 61 62 6c 65 73 2c 0a 62 75 74  </b> tables,.but
1db0: 20 61 6c 6c 20 74 68 65 20 63 6f 6e 74 65 6e 74   all the content
1dc0: 20 6f 66 20 74 68 6f 73 65 20 74 61 62 6c 65 73   of those tables
1dd0: 20 63 61 6e 20 62 65 20 71 75 65 72 69 65 64 20   can be queried 
1de0: 75 73 69 6e 67 20 5b 53 45 4c 45 43 54 5d 0a 61  using [SELECT].a
1df0: 6e 64 20 63 61 6e 20 62 65 20 64 65 6c 65 74 65  nd can be delete
1e00: 64 2c 20 61 75 67 6d 65 6e 74 65 64 2c 20 6f 72  d, augmented, or
1e10: 20 6d 6f 64 69 66 69 65 64 20 75 73 69 6e 67 20   modified using 
1e20: 74 68 65 20 5b 44 45 4c 45 54 45 5d 2c 0a 5b 49  the [DELETE],.[I
1e30: 4e 53 45 52 54 5d 2c 20 61 6e 64 20 5b 55 50 44  NSERT], and [UPD
1e40: 41 54 45 5d 20 63 6f 6d 6d 61 6e 64 73 2e 0a 41  ATE] commands..A
1e50: 70 70 72 6f 70 72 69 61 74 65 20 63 61 72 65 20  ppropriate care 
1e60: 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 77  should be used w
1e70: 68 65 6e 20 63 68 61 6e 67 69 6e 67 20 74 68 65  hen changing the
1e80: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
1e90: 73 74 61 74 69 73 74 69 63 73 0a 74 61 62 6c 65  statistics.table
1ea0: 73 20 61 73 20 69 6e 76 61 6c 69 64 20 63 6f 6e  s as invalid con
1eb0: 74 65 6e 74 20 63 61 6e 20 63 61 75 73 65 20 53  tent can cause S
1ec0: 51 4c 69 74 65 20 74 6f 20 73 65 6c 65 63 74 20  QLite to select 
1ed0: 69 6e 65 66 66 69 63 69 65 6e 74 0a 71 75 65 72  inefficient.quer
1ee0: 79 20 70 6c 61 6e 73 2e 20 20 47 65 6e 65 72 61  y plans.  Genera
1ef0: 6c 6c 79 20 73 70 65 61 6b 69 6e 67 2c 20 6f 6e  lly speaking, on
1f00: 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 6d 6f 64  e should not mod
1f10: 69 66 79 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ify the content 
1f20: 6f 66 0a 74 68 65 20 73 74 61 74 69 73 74 69 63  of.the statistic
1f30: 73 20 74 61 62 6c 65 73 20 62 79 20 61 6e 79 20  s tables by any 
1f40: 6d 65 63 68 61 6e 69 73 6d 20 6f 74 68 65 72 20  mechanism other 
1f50: 74 68 61 6e 20 69 6e 76 6f 6b 69 6e 67 20 74 68  than invoking th
1f60: 65 0a 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e  e.ANALYZE comman
1f70: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 53 74 61  d.</p>..<p> ^Sta
1f80: 74 69 73 74 69 63 73 20 67 61 74 68 65 72 65 64  tistics gathered
1f90: 20 62 79 20 41 4e 41 4c 59 5a 45 20 61 72 65 20   by ANALYZE are 
1fa0: 3c 75 3e 6e 6f 74 3c 2f 75 3e 20 61 75 74 6f 6d  <u>not</u> autom
1fb0: 61 74 69 63 61 6c 6c 79 20 75 70 64 61 74 65 64  atically updated
1fc0: 20 61 73 0a 74 68 65 20 63 6f 6e 74 65 6e 74 20   as.the content 
1fd0: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
1fe0: 63 68 61 6e 67 65 73 2e 20 20 49 66 20 74 68 65  changes.  If the
1ff0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
2000: 64 61 74 61 62 61 73 65 0a 63 68 61 6e 67 65 73  database.changes
2010: 20 73 69 67 6e 69 66 69 63 61 6e 74 6c 79 2c 20   significantly, 
2020: 6f 72 20 69 66 20 74 68 65 20 64 61 74 61 62 61  or if the databa
2030: 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  se schema change
2040: 73 2c 20 74 68 65 6e 20 6f 6e 65 20 73 68 6f 75  s, then one shou
2050: 6c 64 0a 63 6f 6e 73 69 64 65 72 20 72 65 72 75  ld.consider reru
2060: 6e 6e 69 6e 67 20 74 68 65 20 41 4e 41 4c 59 5a  nning the ANALYZ
2070: 45 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 6f 72 64  E command in ord
2080: 65 72 20 74 6f 20 75 70 64 61 74 65 20 74 68 65  er to update the
2090: 20 73 74 61 74 69 73 74 69 63 73 2e 3c 2f 70 3e   statistics.</p>
20a0: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
20b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20f0: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
2100: 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45 7d  ATTACH DATABASE}
2110: 20 61 74 74 61 63 68 20 2a 41 54 54 41 43 48 0a   attach *ATTACH.
2120: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61  .BubbleDiagram a
2130: 74 74 61 63 68 2d 73 74 6d 74 20 31 0a 3c 2f 74  ttach-stmt 1.</t
2140: 63 6c 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 54  cl>..<p> ^The AT
2150: 54 41 43 48 20 44 41 54 41 42 41 53 45 20 73 74  TACH DATABASE st
2160: 61 74 65 6d 65 6e 74 20 61 64 64 73 20 61 6e 6f  atement adds ano
2170: 74 68 65 72 20 64 61 74 61 62 61 73 65 20 0a 66  ther database .f
2180: 69 6c 65 20 74 6f 20 74 68 65 20 63 75 72 72 65  ile to the curre
2190: 6e 74 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e  nt [database con
21a0: 6e 65 63 74 69 6f 6e 5d 2e 20 0a 5e 54 68 65 20  nection]. .^The 
21b0: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 73 20 27  database-names '
21c0: 6d 61 69 6e 27 20 61 6e 64 20 0a 27 74 65 6d 70  main' and .'temp
21d0: 27 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6d  ' refer to the m
21e0: 61 69 6e 20 64 61 74 61 62 61 73 65 20 61 6e 64  ain database and
21f0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73   the database us
2200: 65 64 20 66 6f 72 20 0a 74 65 6d 70 6f 72 61 72  ed for .temporar
2210: 79 20 74 61 62 6c 65 73 2e 20 20 5e 54 68 65 20  y tables.  ^The 
2220: 6d 61 69 6e 20 61 6e 64 20 74 65 6d 70 20 64 61  main and temp da
2230: 74 61 62 61 73 65 73 20 63 61 6e 6e 6f 74 20 62  tabases cannot b
2240: 65 20 61 74 74 61 63 68 65 64 20 6f 72 0a 64 65  e attached or.de
2250: 74 61 63 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  tached.</p>..<p>
2260: 20 5e 28 54 61 62 6c 65 73 20 69 6e 20 61 6e 20   ^(Tables in an 
2270: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
2280: 65 20 63 61 6e 20 62 65 20 72 65 66 65 72 72 65  e can be referre
2290: 64 20 74 6f 20 75 73 69 6e 67 20 74 68 65 20 73  d to using the s
22a0: 79 6e 74 61 78 20 0a 3c 69 3e 64 61 74 61 62 61  yntax .<i>databa
22b0: 73 65 2d 6e 61 6d 65 2e 74 61 62 6c 65 2d 6e 61  se-name.table-na
22c0: 6d 65 3c 2f 69 3e 2e 29 5e 20 20 5e 49 66 20 74  me</i>.)^  ^If t
22d0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
22e0: 61 62 6c 65 20 69 73 20 75 6e 69 71 75 65 0a 61  able is unique.a
22f0: 63 72 6f 73 73 20 61 6c 6c 20 61 74 74 61 63 68  cross all attach
2300: 65 64 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ed databases and
2310: 20 74 68 65 20 6d 61 69 6e 20 61 6e 64 20 74 65   the main and te
2320: 6d 70 20 64 61 74 61 62 61 73 65 73 2c 20 74 68  mp databases, th
2330: 65 6e 20 74 68 65 0a 3c 69 3e 64 61 74 61 62 61  en the.<i>databa
2340: 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 70 72 65 66  se-name</i> pref
2350: 69 78 20 69 73 20 6e 6f 74 20 72 65 71 75 69 72  ix is not requir
2360: 65 64 2e 20 20 5e 49 66 20 74 77 6f 20 6f 72 20  ed.  ^If two or 
2370: 6d 6f 72 65 20 74 61 62 6c 65 73 20 69 6e 0a 64  more tables in.d
2380: 69 66 66 65 72 65 6e 74 20 64 61 74 61 62 61 73  ifferent databas
2390: 65 73 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  es have the same
23a0: 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 20 0a 3c   name and the .<
23b0: 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c  i>database-name<
23c0: 2f 69 3e 20 70 72 65 66 69 78 20 69 73 20 6e 6f  /i> prefix is no
23d0: 74 20 75 73 65 64 20 6f 6e 20 61 20 74 61 62 6c  t used on a tabl
23e0: 65 20 72 65 66 65 72 65 6e 63 65 2c 20 74 68 65  e reference, the
23f0: 6e 20 74 68 65 0a 74 61 62 6c 65 20 63 68 6f 73  n the.table chos
2400: 65 6e 20 69 73 20 74 68 65 20 6f 6e 65 20 69 6e  en is the one in
2410: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 68   the database th
2420: 61 74 20 77 61 73 20 6c 65 61 73 74 20 72 65 63  at was least rec
2430: 65 6e 74 6c 79 20 61 74 74 61 63 68 65 64 2e 3c  ently attached.<
2440: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61  /p>..<p>.^Transa
2450: 63 74 69 6f 6e 73 20 69 6e 76 6f 6c 76 69 6e 67  ctions involving
2460: 20 6d 75 6c 74 69 70 6c 65 20 61 74 74 61 63 68   multiple attach
2470: 65 64 20 64 61 74 61 62 61 73 65 73 20 61 72 65  ed databases are
2480: 20 61 74 6f 6d 69 63 2c 0a 61 73 73 75 6d 69 6e   atomic,.assumin
2490: 67 20 74 68 61 74 20 74 68 65 20 6d 61 69 6e 20  g that the main 
24a0: 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20  database is not 
24b0: 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22 20 61 6e 64  "[:memory:]" and
24c0: 20 74 68 65 20 0a 5b 6a 6f 75 72 6e 61 6c 5f 6d   the .[journal_m
24d0: 6f 64 65 5d 20 69 73 20 6e 6f 74 20 5b 57 41 4c  ode] is not [WAL
24e0: 5d 2e 20 20 5e 28 49 66 20 74 68 65 20 6d 61 69  ].  ^(If the mai
24f0: 6e 0a 64 61 74 61 62 61 73 65 20 69 73 20 22 3a  n.database is ":
2500: 6d 65 6d 6f 72 79 3a 22 20 6f 72 20 69 66 20 74  memory:" or if t
2510: 68 65 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20  he journal_mode 
2520: 69 73 20 57 41 4c 2c 20 74 68 65 6e 20 0a 74 72  is WAL, then .tr
2530: 61 6e 73 61 63 74 69 6f 6e 73 20 63 6f 6e 74 69  ansactions conti
2540: 6e 75 65 20 74 6f 20 62 65 20 61 74 6f 6d 69 63  nue to be atomic
2550: 20 77 69 74 68 69 6e 20 65 61 63 68 20 69 6e 64   within each ind
2560: 69 76 69 64 75 61 6c 0a 64 61 74 61 62 61 73 65  ividual.database
2570: 20 66 69 6c 65 2e 20 42 75 74 20 69 66 20 74 68   file. But if th
2580: 65 20 68 6f 73 74 20 63 6f 6d 70 75 74 65 72 20  e host computer 
2590: 63 72 61 73 68 65 73 20 69 6e 20 74 68 65 20 6d  crashes in the m
25a0: 69 64 64 6c 65 0a 6f 66 20 61 20 5b 43 4f 4d 4d  iddle.of a [COMM
25b0: 49 54 5d 20 77 68 65 72 65 20 74 77 6f 20 6f 72  IT] where two or
25c0: 20 6d 6f 72 65 20 64 61 74 61 62 61 73 65 20 66   more database f
25d0: 69 6c 65 73 20 61 72 65 20 75 70 64 61 74 65 64  iles are updated
25e0: 2c 0a 73 6f 6d 65 20 6f 66 20 74 68 6f 73 65 20  ,.some of those 
25f0: 66 69 6c 65 73 20 6d 69 67 68 74 20 67 65 74 20  files might get 
2600: 74 68 65 20 63 68 61 6e 67 65 73 20 77 68 65 72  the changes wher
2610: 65 20 6f 74 68 65 72 73 0a 6d 69 67 68 74 20 6e  e others.might n
2620: 6f 74 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20  ot.)^.</p>..<p> 
2630: 5e 54 68 65 72 65 20 69 73 20 61 20 6c 69 6d 69  ^There is a limi
2640: 74 2c 20 73 65 74 20 75 73 69 6e 67 20 5b 73 71  t, set using [sq
2650: 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 5d 20 61  lite3_limit()] a
2660: 6e 64 20 0a 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  nd .[SQLITE_LIMI
2670: 54 5f 41 54 54 41 43 48 45 44 5d 2c 20 74 6f 20  T_ATTACHED], to 
2680: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61  the number of da
2690: 74 61 62 61 73 65 73 20 74 68 61 74 20 63 61 6e  tabases that can
26a0: 20 62 65 0a 73 69 6d 75 6c 74 61 6e 65 6f 75 73   be.simultaneous
26b0: 6c 79 20 61 74 74 61 63 68 65 64 20 74 6f 20 61  ly attached to a
26c0: 20 73 69 6e 67 6c 65 20 64 61 74 61 62 61 73 65   single database
26d0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 3e   connection.</p>
26e0: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
26f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2700: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2710: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2720: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2730: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
2740: 7b 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49  {BEGIN TRANSACTI
2750: 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ON} transaction 
2760: 7b 2a 42 45 47 49 4e 20 43 4f 4d 4d 49 54 20 52  {*BEGIN COMMIT R
2770: 4f 4c 4c 42 41 43 4b 7d 0a 0a 42 75 62 62 6c 65  OLLBACK}..Bubble
2780: 44 69 61 67 72 61 6d 20 62 65 67 69 6e 2d 73 74  Diagram begin-st
2790: 6d 74 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  mt.BubbleDiagram
27a0: 20 63 6f 6d 6d 69 74 2d 73 74 6d 74 0a 42 75 62   commit-stmt.Bub
27b0: 62 6c 65 44 69 61 67 72 61 6d 20 72 6f 6c 6c 62  bleDiagram rollb
27c0: 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ack-stmt.</tcl>.
27d0: 0a 3c 70 3e 0a 5e 4e 6f 20 63 68 61 6e 67 65 73  .<p>.^No changes
27e0: 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20   can be made to 
27f0: 74 68 65 20 64 61 74 61 62 61 73 65 20 65 78 63  the database exc
2800: 65 70 74 20 77 69 74 68 69 6e 20 61 20 74 72 61  ept within a tra
2810: 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 6e 79 20 63  nsaction..^Any c
2820: 6f 6d 6d 61 6e 64 20 74 68 61 74 20 63 68 61 6e  ommand that chan
2830: 67 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65  ges the database
2840: 20 28 62 61 73 69 63 61 6c 6c 79 2c 20 61 6e 79   (basically, any
2850: 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a 6f 74 68   SQL command.oth
2860: 65 72 20 74 68 61 6e 20 5b 53 45 4c 45 43 54 5d  er than [SELECT]
2870: 29 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63  ) will automatic
2880: 61 6c 6c 79 20 73 74 61 72 74 20 61 20 74 72 61  ally start a tra
2890: 6e 73 61 63 74 69 6f 6e 20 69 66 0a 6f 6e 65 20  nsaction if.one 
28a0: 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 69  is not already i
28b0: 6e 20 65 66 66 65 63 74 2e 20 20 5e 41 75 74 6f  n effect.  ^Auto
28c0: 6d 61 74 69 63 61 6c 6c 79 20 73 74 61 72 74 65  matically starte
28d0: 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61  d transactions.a
28e0: 72 65 20 63 6f 6d 6d 69 74 74 65 64 20 77 68 65  re committed whe
28f0: 6e 20 74 68 65 20 6c 61 73 74 20 71 75 65 72 79  n the last query
2900: 20 66 69 6e 69 73 68 65 73 2e 0a 3c 2f 70 3e 0a   finishes..</p>.
2910: 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f  .<p>.^Transactio
2920: 6e 73 20 63 61 6e 20 62 65 20 73 74 61 72 74 65  ns can be starte
2930: 64 20 6d 61 6e 75 61 6c 6c 79 20 75 73 69 6e 67  d manually using
2940: 20 74 68 65 20 42 45 47 49 4e 0a 63 6f 6d 6d 61   the BEGIN.comma
2950: 6e 64 2e 20 20 5e 28 53 75 63 68 20 74 72 61 6e  nd.  ^(Such tran
2960: 73 61 63 74 69 6f 6e 73 20 75 73 75 61 6c 6c 79  sactions usually
2970: 20 70 65 72 73 69 73 74 20 75 6e 74 69 6c 20 74   persist until t
2980: 68 65 20 6e 65 78 74 0a 43 4f 4d 4d 49 54 20 6f  he next.COMMIT o
2990: 72 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  r ROLLBACK comma
29a0: 6e 64 2e 20 20 42 75 74 20 61 20 74 72 61 6e 73  nd.  But a trans
29b0: 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61 6c 73 6f  action will also
29c0: 20 0a 52 4f 4c 4c 42 41 43 4b 20 69 66 20 74 68   .ROLLBACK if th
29d0: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 63 6c  e database is cl
29e0: 6f 73 65 64 20 6f 72 20 69 66 20 61 6e 20 65 72  osed or if an er
29f0: 72 6f 72 20 6f 63 63 75 72 73 0a 61 6e 64 20 74  ror occurs.and t
2a00: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6e 66  he ROLLBACK conf
2a10: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
2a20: 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70 65  algorithm is spe
2a30: 63 69 66 69 65 64 2e 29 5e 0a 53 65 65 20 74 68  cified.)^.See th
2a40: 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  e documentation 
2a50: 6f 6e 20 74 68 65 20 5b 4f 4e 20 43 4f 4e 46 4c  on the [ON CONFL
2a60: 49 43 54 5d 0a 63 6c 61 75 73 65 20 66 6f 72 20  ICT].clause for 
2a70: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
2a80: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
2a90: 20 52 4f 4c 4c 42 41 43 4b 0a 63 6f 6e 66 6c 69   ROLLBACK.confli
2aa0: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
2ab0: 67 6f 72 69 74 68 6d 2e 0a 3c 2f 70 3e 0a 0a 3c  gorithm..</p>..<
2ac0: 70 3e 0a 5e 45 4e 44 20 54 52 41 4e 53 41 43 54  p>.^END TRANSACT
2ad0: 49 4f 4e 20 69 73 20 61 6e 20 61 6c 69 61 73 20  ION is an alias 
2ae0: 66 6f 72 20 43 4f 4d 4d 49 54 2e 0a 3c 2f 70 3e  for COMMIT..</p>
2af0: 0a 0a 3c 70 3e 20 5e 28 54 72 61 6e 73 61 63 74  ..<p> ^(Transact
2b00: 69 6f 6e 73 20 63 72 65 61 74 65 64 20 75 73 69  ions created usi
2b10: 6e 67 20 42 45 47 49 4e 2e 2e 2e 43 4f 4d 4d 49  ng BEGIN...COMMI
2b20: 54 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 29 5e  T do not nest.)^
2b30: 0a 5e 46 6f 72 20 6e 65 73 74 65 64 20 74 72 61  .^For nested tra
2b40: 6e 73 61 63 74 69 6f 6e 73 2c 20 75 73 65 20 74  nsactions, use t
2b50: 68 65 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 61  he [SAVEPOINT] a
2b60: 6e 64 20 5b 52 45 4c 45 41 53 45 5d 20 63 6f 6d  nd [RELEASE] com
2b70: 6d 61 6e 64 73 2e 0a 54 68 65 20 22 54 4f 20 53  mands..The "TO S
2b80: 41 56 45 50 4f 49 4e 54 20 3c 69 3e 6e 61 6d 65  AVEPOINT <i>name
2b90: 3c 2f 69 3e 22 20 63 6c 61 75 73 65 20 6f 66 20  </i>" clause of 
2ba0: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d  the ROLLBACK com
2bb0: 6d 61 6e 64 20 73 68 6f 77 6e 0a 69 6e 20 74 68  mand shown.in th
2bc0: 65 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d  e syntax diagram
2bd0: 20 61 62 6f 76 65 20 69 73 20 6f 6e 6c 79 20 61   above is only a
2be0: 70 70 6c 69 63 61 62 6c 65 20 74 6f 20 5b 53 41  pplicable to [SA
2bf0: 56 45 50 4f 49 4e 54 5d 0a 74 72 61 6e 73 61 63  VEPOINT].transac
2c00: 74 69 6f 6e 73 2e 20 20 5e 41 6e 20 61 74 74 65  tions.  ^An atte
2c10: 6d 70 74 20 74 6f 20 69 6e 76 6f 6b 65 20 74 68  mpt to invoke th
2c20: 65 20 42 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20  e BEGIN command 
2c30: 77 69 74 68 69 6e 0a 61 20 74 72 61 6e 73 61 63  within.a transac
2c40: 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 77  tion will fail w
2c50: 69 74 68 20 61 6e 20 65 72 72 6f 72 2c 20 72 65  ith an error, re
2c60: 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
2c70: 68 65 72 0a 74 68 65 20 74 72 61 6e 73 61 63 74  her.the transact
2c80: 69 6f 6e 20 77 61 73 20 73 74 61 72 74 65 64 20  ion was started 
2c90: 62 79 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 6f  by [SAVEPOINT] o
2ca0: 72 20 61 20 70 72 69 6f 72 20 42 45 47 49 4e 2e  r a prior BEGIN.
2cb0: 0a 5e 54 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d  .^The COMMIT com
2cc0: 6d 61 6e 64 20 61 6e 64 20 74 68 65 20 52 4f 4c  mand and the ROL
2cd0: 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69  LBACK command wi
2ce0: 74 68 6f 75 74 20 74 68 65 20 54 4f 20 63 6c 61  thout the TO cla
2cf0: 75 73 65 0a 77 6f 72 6b 20 74 68 65 20 73 61 6d  use.work the sam
2d00: 65 20 6f 6e 20 5b 53 41 56 45 50 4f 49 4e 54 5d  e on [SAVEPOINT]
2d10: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 73   transactions as
2d20: 20 74 68 65 79 20 64 6f 20 77 69 74 68 20 74 72   they do with tr
2d30: 61 6e 73 61 63 74 69 6f 6e 73 0a 73 74 61 72 74  ansactions.start
2d40: 65 64 20 62 79 20 42 45 47 49 4e 2e 3c 2f 70 3e  ed by BEGIN.</p>
2d50: 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69  ..<p>.^Transacti
2d60: 6f 6e 73 20 63 61 6e 20 62 65 20 64 65 66 65 72  ons can be defer
2d70: 72 65 64 2c 20 69 6d 6d 65 64 69 61 74 65 2c 20  red, immediate, 
2d80: 6f 72 20 65 78 63 6c 75 73 69 76 65 2e 20 20 0a  or exclusive.  .
2d90: 5e 54 68 65 20 64 65 66 61 75 6c 74 20 74 72 61  ^The default tra
2da0: 6e 73 61 63 74 69 6f 6e 20 62 65 68 61 76 69 6f  nsaction behavio
2db0: 72 20 69 73 20 64 65 66 65 72 72 65 64 2e 0a 5e  r is deferred..^
2dc0: 44 65 66 65 72 72 65 64 20 6d 65 61 6e 73 20 74  Deferred means t
2dd0: 68 61 74 20 6e 6f 20 6c 6f 63 6b 73 20 61 72 65  hat no locks are
2de0: 20 61 63 71 75 69 72 65 64 0a 6f 6e 20 74 68 65   acquired.on the
2df0: 20 64 61 74 61 62 61 73 65 20 75 6e 74 69 6c 20   database until 
2e00: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
2e10: 66 69 72 73 74 20 61 63 63 65 73 73 65 64 2e 20  first accessed. 
2e20: 20 5e 54 68 75 73 20 77 69 74 68 20 61 0a 64 65   ^Thus with a.de
2e30: 66 65 72 72 65 64 20 74 72 61 6e 73 61 63 74 69  ferred transacti
2e40: 6f 6e 2c 20 74 68 65 20 42 45 47 49 4e 20 73 74  on, the BEGIN st
2e50: 61 74 65 6d 65 6e 74 20 69 74 73 65 6c 66 20 64  atement itself d
2e60: 6f 65 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74  oes nothing to t
2e70: 68 65 0a 66 69 6c 65 73 79 73 74 65 6d 2e 20 20  he.filesystem.  
2e80: 5e 4c 6f 63 6b 73 0a 61 72 65 20 6e 6f 74 20 61  ^Locks.are not a
2e90: 63 71 75 69 72 65 64 20 75 6e 74 69 6c 20 74 68  cquired until th
2ea0: 65 20 66 69 72 73 74 20 72 65 61 64 20 6f 72 20  e first read or 
2eb0: 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 2e  write operation.
2ec0: 20 20 5e 54 68 65 20 66 69 72 73 74 20 72 65 61    ^The first rea
2ed0: 64 0a 6f 70 65 72 61 74 69 6f 6e 20 61 67 61 69  d.operation agai
2ee0: 6e 73 74 20 61 20 64 61 74 61 62 61 73 65 20 63  nst a database c
2ef0: 72 65 61 74 65 73 20 61 20 5b 53 48 41 52 45 44  reates a [SHARED
2f00: 5d 20 6c 6f 63 6b 20 61 6e 64 20 74 68 65 20 66  ] lock and the f
2f10: 69 72 73 74 0a 77 72 69 74 65 20 6f 70 65 72 61  irst.write opera
2f20: 74 69 6f 6e 20 63 72 65 61 74 65 73 20 61 20 5b  tion creates a [
2f30: 52 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b 2e 20  RESERVED] lock. 
2f40: 20 20 5e 42 65 63 61 75 73 65 20 74 68 65 20 61    ^Because the a
2f50: 63 71 75 69 73 69 74 69 6f 6e 20 6f 66 0a 6c 6f  cquisition of.lo
2f60: 63 6b 73 20 69 73 20 64 65 66 65 72 72 65 64 20  cks is deferred 
2f70: 75 6e 74 69 6c 20 74 68 65 79 20 61 72 65 20 6e  until they are n
2f80: 65 65 64 65 64 2c 20 69 74 20 69 73 20 70 6f 73  eeded, it is pos
2f90: 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68  sible that anoth
2fa0: 65 72 0a 74 68 72 65 61 64 20 6f 72 20 70 72 6f  er.thread or pro
2fb0: 63 65 73 73 20 63 6f 75 6c 64 20 63 72 65 61 74  cess could creat
2fc0: 65 20 61 20 73 65 70 61 72 61 74 65 20 74 72 61  e a separate tra
2fd0: 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 77 72 69  nsaction and wri
2fe0: 74 65 20 74 6f 0a 74 68 65 20 64 61 74 61 62 61  te to.the databa
2ff0: 73 65 20 61 66 74 65 72 20 74 68 65 20 42 45 47  se after the BEG
3000: 49 4e 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e  IN on the curren
3010: 74 20 74 68 72 65 61 64 20 68 61 73 20 65 78 65  t thread has exe
3020: 63 75 74 65 64 2e 0a 5e 49 66 20 74 68 65 20 74  cuted..^If the t
3030: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 69 6d  ransaction is im
3040: 6d 65 64 69 61 74 65 2c 20 74 68 65 6e 20 5b 52  mediate, then [R
3050: 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b 73 0a 61  ESERVED] locks.a
3060: 72 65 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61  re acquired on a
3070: 6c 6c 20 64 61 74 61 62 61 73 65 73 20 61 73 20  ll databases as 
3080: 73 6f 6f 6e 20 61 73 20 74 68 65 20 42 45 47 49  soon as the BEGI
3090: 4e 20 63 6f 6d 6d 61 6e 64 20 69 73 0a 65 78 65  N command is.exe
30a0: 63 75 74 65 64 2c 20 77 69 74 68 6f 75 74 20 77  cuted, without w
30b0: 61 69 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 64  aiting for the.d
30c0: 61 74 61 62 61 73 65 20 74 6f 20 62 65 20 75 73  atabase to be us
30d0: 65 64 2e 20 20 5e 41 66 74 65 72 20 61 20 42 45  ed.  ^After a BE
30e0: 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 2c 20 0a  GIN IMMEDIATE, .
30f0: 6e 6f 20 6f 74 68 65 72 20 5b 64 61 74 61 62 61  no other [databa
3100: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 77  se connection] w
3110: 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 77  ill be able to w
3120: 72 69 74 65 20 74 6f 20 74 68 65 20 64 61 74 61  rite to the data
3130: 62 61 73 65 20 6f 72 0a 64 6f 20 61 20 42 45 47  base or.do a BEG
3140: 49 4e 20 49 4d 4d 45 44 49 41 54 45 20 6f 72 20  IN IMMEDIATE or 
3150: 42 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45 2e  BEGIN EXCLUSIVE.
3160: 20 20 5e 4f 74 68 65 72 20 70 72 6f 63 65 73 73    ^Other process
3170: 65 73 20 63 61 6e 20 63 6f 6e 74 69 6e 75 65 0a  es can continue.
3180: 74 6f 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65  to read from the
3190: 20 64 61 74 61 62 61 73 65 2c 20 68 6f 77 65 76   database, howev
31a0: 65 72 2e 20 20 5e 41 6e 20 65 78 63 6c 75 73 69  er.  ^An exclusi
31b0: 76 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63  ve transaction c
31c0: 61 75 73 65 73 0a 5b 45 58 43 4c 55 53 49 56 45  auses.[EXCLUSIVE
31d0: 5d 20 6c 6f 63 6b 73 20 74 6f 20 62 65 20 61 63  ] locks to be ac
31e0: 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20 64 61  quired on all da
31f0: 74 61 62 61 73 65 73 2e 20 20 5e 41 66 74 65 72  tabases.  ^After
3200: 20 61 20 42 45 47 49 4e 0a 45 58 43 4c 55 53 49   a BEGIN.EXCLUSI
3210: 56 45 2c 20 6e 6f 20 6f 74 68 65 72 20 5b 64 61  VE, no other [da
3220: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
3230: 6e 5d 20 65 78 63 65 70 74 20 66 6f 72 20 5b 72  n] except for [r
3240: 65 61 64 5f 75 6e 63 6f 6d 6d 69 74 74 65 64 5d  ead_uncommitted]
3250: 0a 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 77 69 6c  .connections wil
3260: 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 72 65 61  l be able to rea
3270: 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  d the database a
3280: 6e 64 20 6e 6f 20 6f 74 68 65 72 20 63 6f 6e 6e  nd no other conn
3290: 65 63 74 69 6f 6e 20 77 69 74 68 6f 75 74 0a 65  ection without.e
32a0: 78 63 65 70 74 69 6f 6e 20 77 69 6c 6c 20 62 65  xception will be
32b0: 20 61 62 6c 65 20 74 6f 20 77 72 69 74 65 20 74   able to write t
32c0: 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 74 69  he database unti
32d0: 6c 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  l the transactio
32e0: 6e 20 69 73 0a 63 6f 6d 70 6c 65 74 65 2e 0a 3c  n is.complete..<
32f0: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28 41 6e 20 69 6d  /p>..<p>.^(An im
3300: 70 6c 69 63 69 74 20 74 72 61 6e 73 61 63 74 69  plicit transacti
3310: 6f 6e 20 28 61 20 74 72 61 6e 73 61 63 74 69 6f  on (a transactio
3320: 6e 20 74 68 61 74 20 69 73 20 73 74 61 72 74 65  n that is starte
3330: 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2c  d automatically,
3340: 0a 6e 6f 74 20 61 20 74 72 61 6e 73 61 63 74 69  .not a transacti
3350: 6f 6e 20 73 74 61 72 74 65 64 20 62 79 20 42 45  on started by BE
3360: 47 49 4e 29 20 69 73 20 63 6f 6d 6d 69 74 74 65  GIN) is committe
3370: 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  d automatically 
3380: 77 68 65 6e 0a 74 68 65 20 6c 61 73 74 20 61 63  when.the last ac
3390: 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 20 66  tive statement f
33a0: 69 6e 69 73 68 65 73 2e 20 20 41 20 73 74 61 74  inishes.  A stat
33b0: 65 6d 65 6e 74 20 66 69 6e 69 73 68 65 73 20 77  ement finishes w
33c0: 68 65 6e 20 69 74 73 0a 70 72 65 70 61 72 65 64  hen its.prepared
33d0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 5b 73   statement is [s
33e0: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 20 7c  qlite3_reset() |
33f0: 20 72 65 73 65 74 5d 20 6f 72 0a 5b 73 71 6c 69   reset] or.[sqli
3400: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 20 7c  te3_finalize() |
3410: 20 66 69 6e 61 6c 69 7a 65 64 5d 2e 20 20 41 6e   finalized].  An
3420: 20 6f 70 65 6e 20 5b 73 71 6c 69 74 65 33 5f 62   open [sqlite3_b
3430: 6c 6f 62 5d 20 75 73 65 64 20 66 6f 72 0a 69 6e  lob] used for.in
3440: 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49  cremental BLOB I
3450: 2f 4f 20 63 6f 75 6e 74 73 20 61 73 20 61 6e 20  /O counts as an 
3460: 75 6e 66 69 6e 69 73 68 65 64 20 73 74 61 74 65  unfinished state
3470: 6d 65 6e 74 2e 20 20 54 68 65 20 5b 73 71 6c 69  ment.  The [sqli
3480: 74 65 33 5f 62 6c 6f 62 5d 0a 66 69 6e 69 73 68  te3_blob].finish
3490: 65 73 20 77 68 65 6e 20 69 74 20 69 73 20 5b 73  es when it is [s
34a0: 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 63 6c 6f 73  qlite3_blob_clos
34b0: 65 28 29 20 7c 20 63 6c 6f 73 65 64 5d 2e 29 5e  e() | closed].)^
34c0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 68 65 20  .</p>..<p>.^The 
34d0: 65 78 70 6c 69 63 69 74 20 43 4f 4d 4d 49 54 20  explicit COMMIT 
34e0: 63 6f 6d 6d 61 6e 64 20 72 75 6e 73 20 69 6d 6d  command runs imm
34f0: 65 64 69 61 74 65 6c 79 2c 20 65 76 65 6e 20 69  ediately, even i
3500: 66 20 74 68 65 72 65 20 61 72 65 0a 70 65 6e 64  f there are.pend
3510: 69 6e 67 20 5b 53 45 4c 45 43 54 5d 20 73 74 61  ing [SELECT] sta
3520: 74 65 6d 65 6e 74 73 2e 20 20 5e 48 6f 77 65 76  tements.  ^Howev
3530: 65 72 2c 20 69 66 20 74 68 65 72 65 20 61 72 65  er, if there are
3540: 20 70 65 6e 64 69 6e 67 0a 77 72 69 74 65 20 6f   pending.write o
3550: 70 65 72 61 74 69 6f 6e 73 2c 20 74 68 65 20 43  perations, the C
3560: 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 0a 77 69  OMMIT command.wi
3570: 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 20 65  ll fail with a e
3580: 72 72 6f 72 20 63 6f 64 65 20 5b 53 51 4c 49 54  rror code [SQLIT
3590: 45 5f 42 55 53 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c  E_BUSY]..</p>..<
35a0: 70 3e 0a 5e 41 6e 20 61 74 74 65 6d 70 74 20 74  p>.^An attempt t
35b0: 6f 20 65 78 65 63 75 74 65 20 43 4f 4d 4d 49 54  o execute COMMIT
35c0: 20 6d 69 67 68 74 20 61 6c 73 6f 20 72 65 73 75   might also resu
35d0: 6c 74 20 69 6e 20 61 6e 20 5b 53 51 4c 49 54 45  lt in an [SQLITE
35e0: 5f 42 55 53 59 5d 20 72 65 74 75 72 6e 20 63 6f  _BUSY] return co
35f0: 64 65 0a 69 66 20 61 6e 20 61 6e 6f 74 68 65 72  de.if an another
3600: 20 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65   thread or proce
3610: 73 73 20 68 61 73 20 61 20 5b 73 68 61 72 65 64  ss has a [shared
3620: 20 6c 6f 63 6b 5d 20 6f 6e 20 74 68 65 20 64 61   lock] on the da
3630: 74 61 62 61 73 65 0a 74 68 61 74 20 70 72 65 76  tabase.that prev
3640: 65 6e 74 65 64 20 74 68 65 20 64 61 74 61 62 61  ented the databa
3650: 73 65 20 66 72 6f 6d 20 62 65 69 6e 67 20 75 70  se from being up
3660: 64 61 74 65 64 2e 20 20 5e 57 68 65 6e 20 43 4f  dated.  ^When CO
3670: 4d 4d 49 54 20 66 61 69 6c 73 20 69 6e 20 74 68  MMIT fails in th
3680: 69 73 0a 77 61 79 2c 20 74 68 65 20 74 72 61 6e  is.way, the tran
3690: 73 61 63 74 69 6f 6e 20 72 65 6d 61 69 6e 73 20  saction remains 
36a0: 61 63 74 69 76 65 20 61 6e 64 20 74 68 65 20 43  active and the C
36b0: 4f 4d 4d 49 54 20 63 61 6e 20 62 65 20 72 65 74  OMMIT can be ret
36c0: 72 69 65 64 20 6c 61 74 65 72 0a 61 66 74 65 72  ried later.after
36d0: 20 74 68 65 20 72 65 61 64 65 72 20 68 61 73 20   the reader has 
36e0: 68 61 64 20 61 20 63 68 61 6e 63 65 20 74 6f 20  had a chance to 
36f0: 63 6c 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  clear..</p>..<p>
3700: 0a 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20 77  .^The ROLLBACK w
3710: 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e  ill fail with an
3720: 20 65 72 72 6f 72 20 63 6f 64 65 20 5b 53 51 4c   error code [SQL
3730: 49 54 45 5f 42 55 53 59 5d 20 69 66 20 74 68 65  ITE_BUSY] if the
3740: 72 65 0a 61 72 65 20 61 6e 79 20 70 65 6e 64 69  re.are any pendi
3750: 6e 67 20 71 75 65 72 69 65 73 2e 20 20 5e 42 6f  ng queries.  ^Bo
3760: 74 68 20 72 65 61 64 2d 6f 6e 6c 79 20 61 6e 64  th read-only and
3770: 20 72 65 61 64 2f 77 72 69 74 65 20 71 75 65 72   read/write quer
3780: 69 65 73 20 77 69 6c 6c 0a 63 61 75 73 65 20 61  ies will.cause a
3790: 20 52 4f 4c 4c 42 41 43 4b 20 74 6f 20 66 61 69   ROLLBACK to fai
37a0: 6c 2e 20 20 41 20 52 4f 4c 4c 42 41 43 4b 20 6d  l.  A ROLLBACK m
37b0: 75 73 74 20 66 61 69 6c 20 69 66 20 74 68 65 72  ust fail if ther
37c0: 65 20 61 72 65 20 70 65 6e 64 69 6e 67 0a 72 65  e are pending.re
37d0: 61 64 20 6f 70 65 72 61 74 69 6f 6e 73 20 28 75  ad operations (u
37e0: 6e 6c 69 6b 65 20 43 4f 4d 4d 49 54 20 77 68 69  nlike COMMIT whi
37f0: 63 68 20 63 61 6e 20 73 75 63 63 65 65 64 29 20  ch can succeed) 
3800: 62 65 63 61 75 73 65 20 62 61 64 20 74 68 69 6e  because bad thin
3810: 67 73 0a 77 69 6c 6c 20 68 61 70 70 65 6e 20 69  gs.will happen i
3820: 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20  f the in-memory 
3830: 69 6d 61 67 65 20 6f 66 20 74 68 65 20 64 61 74  image of the dat
3840: 61 62 61 73 65 20 69 73 20 63 68 61 6e 67 65 64  abase is changed
3850: 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 0a   out from under.
3860: 61 6e 20 61 63 74 69 76 65 20 71 75 65 72 79 2e  an active query.
3870: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 66 20 5b 50  .</p>..<p>.If [P
3880: 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  RAGMA journal_mo
3890: 64 65 5d 20 69 73 20 73 65 74 20 74 6f 20 4f 46  de] is set to OF
38a0: 46 20 28 74 68 75 73 20 64 69 73 61 62 6c 69 6e  F (thus disablin
38b0: 67 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a  g the rollback j
38c0: 6f 75 72 6e 61 6c 0a 66 69 6c 65 29 20 74 68 65  ournal.file) the
38d0: 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 6f  n the behavior o
38e0: 66 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63  f the ROLLBACK c
38f0: 6f 6d 6d 61 6e 64 20 69 73 20 75 6e 64 65 66 69  ommand is undefi
3900: 6e 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 52  ned..</p>..<h3>R
3910: 65 73 70 6f 6e 73 65 20 54 6f 20 45 72 72 6f 72  esponse To Error
3920: 73 20 57 69 74 68 69 6e 20 41 20 54 72 61 6e 73  s Within A Trans
3930: 61 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e  action</h3>..<p>
3940: 20 5e 28 49 66 20 63 65 72 74 61 69 6e 20 6b 69   ^(If certain ki
3950: 6e 64 73 20 6f 66 20 65 72 72 6f 72 73 20 6f 63  nds of errors oc
3960: 63 75 72 20 77 69 74 68 69 6e 20 61 20 74 72 61  cur within a tra
3970: 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 0a 74 72  nsaction, the.tr
3980: 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 6f 72  ansaction may or
3990: 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 6f 6c 6c   may not be roll
39a0: 65 64 20 62 61 63 6b 20 61 75 74 6f 6d 61 74 69  ed back automati
39b0: 63 61 6c 6c 79 2e 20 20 54 68 65 0a 65 72 72 6f  cally.  The.erro
39c0: 72 73 20 74 68 61 74 20 63 61 75 73 65 20 74 68  rs that cause th
39d0: 65 20 62 65 68 61 76 69 6f 72 20 69 6e 63 6c 75  e behavior inclu
39e0: 64 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c  de:</p>..<ul>.<l
39f0: 69 3e 20 5b 53 51 4c 49 54 45 5f 46 55 4c 4c 5d  i> [SQLITE_FULL]
3a00: 3a 20 64 61 74 61 62 61 73 65 20 6f 72 20 64 69  : database or di
3a10: 73 6b 20 66 75 6c 6c 0a 3c 6c 69 3e 20 5b 53 51  sk full.<li> [SQ
3a20: 4c 49 54 45 5f 49 4f 45 52 52 5d 3a 20 64 69 73  LITE_IOERR]: dis
3a30: 6b 20 49 2f 4f 20 65 72 72 6f 72 0a 3c 6c 69 3e  k I/O error.<li>
3a40: 20 5b 53 51 4c 49 54 45 5f 42 55 53 59 5d 3a 20   [SQLITE_BUSY]: 
3a50: 64 61 74 61 62 61 73 65 20 69 6e 20 75 73 65 20  database in use 
3a60: 62 79 20 61 6e 6f 74 68 65 72 20 70 72 6f 63 65  by another proce
3a70: 73 73 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f  ss.<li> [SQLITE_
3a80: 4e 4f 4d 45 4d 5d 3a 20 6f 75 74 20 6f 72 20 6d  NOMEM]: out or m
3a90: 65 6d 6f 72 79 0a 3c 6c 69 3e 20 5b 53 51 4c 49  emory.<li> [SQLI
3aa0: 54 45 5f 49 4e 54 45 52 52 55 50 54 5d 3a 20 70  TE_INTERRUPT]: p
3ab0: 72 6f 63 65 73 73 69 6e 67 20 5b 73 71 6c 69 74  rocessing [sqlit
3ac0: 65 33 5f 69 6e 74 65 72 72 75 70 74 7c 69 6e 74  e3_interrupt|int
3ad0: 65 72 72 75 70 74 65 64 5d 0a 20 20 20 20 20 62  errupted].     b
3ae0: 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 72 65  y application re
3af0: 71 75 65 73 74 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c  quest.</ul>)^..<
3b00: 70 3e 0a 5e 46 6f 72 20 61 6c 6c 20 6f 66 20 74  p>.^For all of t
3b10: 68 65 73 65 20 65 72 72 6f 72 73 2c 20 53 51 4c  hese errors, SQL
3b20: 69 74 65 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ite attempts to 
3b30: 75 6e 64 6f 20 6a 75 73 74 20 74 68 65 20 6f 6e  undo just the on
3b40: 65 20 73 74 61 74 65 6d 65 6e 74 0a 69 74 20 77  e statement.it w
3b50: 61 73 20 77 6f 72 6b 69 6e 67 20 6f 6e 20 61 6e  as working on an
3b60: 64 20 6c 65 61 76 65 20 63 68 61 6e 67 65 73 20  d leave changes 
3b70: 66 72 6f 6d 20 70 72 69 6f 72 20 73 74 61 74 65  from prior state
3b80: 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65  ments within the
3b90: 0a 73 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f  .same transactio
3ba0: 6e 20 69 6e 74 61 63 74 20 61 6e 64 20 63 6f 6e  n intact and con
3bb0: 74 69 6e 75 65 20 77 69 74 68 20 74 68 65 20 74  tinue with the t
3bc0: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 48 6f  ransaction.  ^Ho
3bd0: 77 65 76 65 72 2c 20 0a 64 65 70 65 6e 64 69 6e  wever, .dependin
3be0: 67 20 6f 6e 20 74 68 65 20 73 74 61 74 65 6d 65  g on the stateme
3bf0: 6e 74 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74  nt being evaluat
3c00: 65 64 20 61 6e 64 20 74 68 65 20 70 6f 69 6e 74  ed and the point
3c10: 20 61 74 20 77 68 69 63 68 20 74 68 65 0a 65 72   at which the.er
3c20: 72 6f 72 20 6f 63 63 75 72 73 2c 20 69 74 20 6d  ror occurs, it m
3c30: 69 67 68 74 20 62 65 20 6e 65 63 65 73 73 61 72  ight be necessar
3c40: 79 20 66 6f 72 20 53 51 4c 69 74 65 20 74 6f 20  y for SQLite to 
3c50: 72 6f 6c 6c 62 61 63 6b 20 61 6e 64 0a 63 61 6e  rollback and.can
3c60: 63 65 6c 20 74 68 65 20 65 6e 74 69 72 65 20 74  cel the entire t
3c70: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 41 6e  ransaction.  ^An
3c80: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63 61 6e   application can
3c90: 20 74 65 6c 6c 20 77 68 69 63 68 0a 63 6f 75 72   tell which.cour
3ca0: 73 65 20 6f 66 20 61 63 74 69 6f 6e 20 53 51 4c  se of action SQL
3cb0: 69 74 65 20 74 6f 6f 6b 20 62 79 20 75 73 69 6e  ite took by usin
3cc0: 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f 67  g the.[sqlite3_g
3cd0: 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 29 5d  et_autocommit()]
3ce0: 20 43 2d 6c 61 6e 67 75 61 67 65 20 69 6e 74 65   C-language inte
3cf0: 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49  rface.</p>..<p>I
3d00: 74 20 69 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64  t is recommended
3d10: 20 74 68 61 74 20 61 70 70 6c 69 63 61 74 69 6f   that applicatio
3d20: 6e 73 20 72 65 73 70 6f 6e 64 20 74 6f 20 74 68  ns respond to th
3d30: 65 20 65 72 72 6f 72 73 0a 6c 69 73 74 65 64 20  e errors.listed 
3d40: 61 62 6f 76 65 20 62 79 20 65 78 70 6c 69 63 69  above by explici
3d50: 74 6c 79 20 69 73 73 75 69 6e 67 20 61 20 52 4f  tly issuing a RO
3d60: 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20  LLBACK command. 
3d70: 20 5e 49 66 20 74 68 65 20 0a 74 72 61 6e 73 61   ^If the .transa
3d80: 63 74 69 6f 6e 20 68 61 73 20 61 6c 72 65 61 64  ction has alread
3d90: 79 20 62 65 65 6e 20 72 6f 6c 6c 65 64 20 62 61  y been rolled ba
3da0: 63 6b 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ck automatically
3db0: 0a 62 79 20 74 68 65 20 65 72 72 6f 72 20 72 65  .by the error re
3dc0: 73 70 6f 6e 73 65 2c 20 74 68 65 6e 20 74 68 65  sponse, then the
3dd0: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
3de0: 64 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68  d will fail with
3df0: 20 61 6e 0a 65 72 72 6f 72 2c 20 62 75 74 20 6e   an.error, but n
3e00: 6f 20 68 61 72 6d 20 69 73 20 63 61 75 73 65 64  o harm is caused
3e10: 20 62 79 20 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c   by this.</p>..<
3e20: 70 3e 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e  p>Future version
3e30: 73 20 6f 66 20 53 51 4c 69 74 65 20 6d 61 79 20  s of SQLite may 
3e40: 65 78 74 65 6e 64 20 74 68 65 20 6c 69 73 74 20  extend the list 
3e50: 6f 66 20 65 72 72 6f 72 73 20 77 68 69 63 68 0a  of errors which.
3e60: 6d 69 67 68 74 20 63 61 75 73 65 20 61 75 74 6f  might cause auto
3e70: 6d 61 74 69 63 20 74 72 61 6e 73 61 63 74 69 6f  matic transactio
3e80: 6e 20 72 6f 6c 6c 62 61 63 6b 2e 20 20 46 75 74  n rollback.  Fut
3e90: 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a  ure versions of.
3ea0: 53 51 4c 69 74 65 20 6d 69 67 68 74 20 63 68 61  SQLite might cha
3eb0: 6e 67 65 20 74 68 65 20 65 72 72 6f 72 20 72 65  nge the error re
3ec0: 73 70 6f 6e 73 65 2e 20 20 49 6e 20 70 61 72 74  sponse.  In part
3ed0: 69 63 75 6c 61 72 2c 20 77 65 20 6d 61 79 0a 63  icular, we may.c
3ee0: 68 6f 6f 73 65 20 74 6f 20 73 69 6d 70 6c 69 66  hoose to simplif
3ef0: 79 20 74 68 65 20 69 6e 74 65 72 66 61 63 65 20  y the interface 
3f00: 69 6e 20 66 75 74 75 72 65 20 76 65 72 73 69 6f  in future versio
3f10: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 62 79 0a  ns of SQLite by.
3f20: 63 61 75 73 69 6e 67 20 74 68 65 20 65 72 72 6f  causing the erro
3f30: 72 73 20 61 62 6f 76 65 20 74 6f 20 66 6f 72 63  rs above to forc
3f40: 65 20 61 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e  e an uncondition
3f50: 61 6c 20 72 6f 6c 6c 62 61 63 6b 2e 3c 2f 70 3e  al rollback.</p>
3f60: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
3f70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3f80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3f90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3fa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3fb0: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
3fc0: 7b 53 41 56 45 50 4f 49 4e 54 7d 20 73 61 76 65  {SAVEPOINT} save
3fd0: 70 6f 69 6e 74 20 7b 53 41 56 45 50 4f 49 4e 54  point {SAVEPOINT
3fe0: 20 52 45 4c 45 41 53 45 7d 0a 0a 42 75 62 62 6c   RELEASE}..Bubbl
3ff0: 65 44 69 61 67 72 61 6d 20 73 61 76 65 70 6f 69  eDiagram savepoi
4000: 6e 74 2d 73 74 6d 74 0a 42 75 62 62 6c 65 44 69  nt-stmt.BubbleDi
4010: 61 67 72 61 6d 20 72 65 6c 65 61 73 65 2d 73 74  agram release-st
4020: 6d 74 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  mt.BubbleDiagram
4030: 20 72 6f 6c 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c   rollback-stmt.<
4040: 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 53 41 56 45  /tcl>..<p> ^SAVE
4050: 50 4f 49 4e 54 73 20 61 72 65 20 61 20 6d 65 74  POINTs are a met
4060: 68 6f 64 20 6f 66 20 63 72 65 61 74 69 6e 67 20  hod of creating 
4070: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20 73 69  transactions, si
4080: 6d 69 6c 61 72 20 74 6f 0a 5b 42 45 47 49 4e 5d  milar to.[BEGIN]
4090: 20 61 6e 64 20 5b 43 4f 4d 4d 49 54 5d 2c 20 65   and [COMMIT], e
40a0: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 53  xcept that the S
40b0: 41 56 45 50 4f 49 4e 54 20 61 6e 64 20 52 45 4c  AVEPOINT and REL
40c0: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 73 0a 61 72  EASE commands.ar
40d0: 65 20 6e 61 6d 65 64 20 61 6e 64 20 6d 61 79 20  e named and may 
40e0: 62 65 20 6e 65 73 74 65 64 2e 3c 2f 70 3e 0a 0a  be nested.</p>..
40f0: 3c 70 3e 20 5e 54 68 65 20 53 41 56 45 50 4f 49  <p> ^The SAVEPOI
4100: 4e 54 20 63 6f 6d 6d 61 6e 64 20 73 74 61 72 74  NT command start
4110: 73 20 61 20 6e 65 77 20 74 72 61 6e 73 61 63 74  s a new transact
4120: 69 6f 6e 20 77 69 74 68 20 61 20 6e 61 6d 65 2e  ion with a name.
4130: 0a 5e 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f  .^The transactio
4140: 6e 20 6e 61 6d 65 73 20 6e 65 65 64 20 6e 6f 74  n names need not
4150: 20 62 65 20 75 6e 69 71 75 65 2e 0a 5e 28 41 20   be unique..^(A 
4160: 53 41 56 45 50 4f 49 4e 54 20 63 61 6e 20 62 65  SAVEPOINT can be
4170: 20 73 74 61 72 74 65 64 20 65 69 74 68 65 72 20   started either 
4180: 77 69 74 68 69 6e 20 6f 72 20 6f 75 74 73 69 64  within or outsid
4190: 65 20 6f 66 0a 61 20 5b 42 45 47 49 4e 5d 2e 2e  e of.a [BEGIN]..
41a0: 2e 5b 43 4f 4d 4d 49 54 5d 2e 29 5e 20 20 5e 28  .[COMMIT].)^  ^(
41b0: 57 68 65 6e 20 61 20 53 41 56 45 50 4f 49 4e 54  When a SAVEPOINT
41c0: 20 69 73 20 74 68 65 20 6f 75 74 65 72 2d 6d 6f   is the outer-mo
41d0: 73 74 20 73 61 76 65 70 6f 69 6e 74 0a 61 6e 64  st savepoint.and
41e0: 20 69 74 20 69 73 20 6e 6f 74 20 77 69 74 68 69   it is not withi
41f0: 6e 20 61 20 5b 42 45 47 49 4e 5d 2e 2e 2e 5b 43  n a [BEGIN]...[C
4200: 4f 4d 4d 49 54 5d 20 74 68 65 6e 20 74 68 65 20  OMMIT] then the 
4210: 62 65 68 61 76 69 6f 72 20 69 73 20 74 68 65 0a  behavior is the.
4220: 73 61 6d 65 20 61 73 20 42 45 47 49 4e 20 44 45  same as BEGIN DE
4230: 46 45 52 52 45 44 20 54 52 41 4e 53 41 43 54 49  FERRED TRANSACTI
4240: 4f 4e 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  ON.)^</p>..<p>^T
4250: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63  he ROLLBACK TO c
4260: 6f 6d 6d 61 6e 64 20 72 65 76 65 72 74 73 20 74  ommand reverts t
4270: 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20  he state of the 
4280: 64 61 74 61 62 61 73 65 20 62 61 63 6b 20 74 6f  database back to
4290: 20 77 68 61 74 0a 69 74 20 77 61 73 20 6a 75 73   what.it was jus
42a0: 74 20 61 66 74 65 72 20 74 68 65 20 63 6f 72 72  t after the corr
42b0: 65 73 70 6f 6e 64 69 6e 67 20 53 41 56 45 50 4f  esponding SAVEPO
42c0: 49 4e 54 2e 20 20 5e 4e 6f 74 65 20 74 68 61 74  INT.  ^Note that
42d0: 20 75 6e 6c 69 6b 65 20 74 68 61 74 0a 70 6c 61   unlike that.pla
42e0: 69 6e 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20 63 6f  in [ROLLBACK] co
42f0: 6d 6d 61 6e 64 20 28 77 69 74 68 6f 75 74 20 74  mmand (without t
4300: 68 65 20 54 4f 20 6b 65 79 77 6f 72 64 29 20 74  he TO keyword) t
4310: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63  he ROLLBACK TO c
4320: 6f 6d 6d 61 6e 64 0a 64 6f 65 73 20 6e 6f 74 20  ommand.does not 
4330: 63 61 6e 63 65 6c 20 74 68 65 20 74 72 61 6e 73  cancel the trans
4340: 61 63 74 69 6f 6e 2e 20 20 5e 49 6e 73 74 65 61  action.  ^Instea
4350: 64 20 6f 66 20 63 61 6e 63 65 6c 6c 69 6e 67 20  d of cancelling 
4360: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  the transaction,
4370: 0a 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f  .the ROLLBACK TO
4380: 20 63 6f 6d 6d 61 6e 64 20 72 65 73 74 61 72 74   command restart
4390: 73 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  s the transactio
43a0: 6e 20 61 67 61 69 6e 20 61 74 20 74 68 65 20 62  n again at the b
43b0: 65 67 69 6e 6e 69 6e 67 2e 0a 5e 41 6c 6c 20 69  eginning..^All i
43c0: 6e 74 65 72 76 65 6e 69 6e 67 20 53 41 56 45 50  ntervening SAVEP
43d0: 4f 49 4e 54 73 20 61 72 65 20 63 61 6e 63 65 6c  OINTs are cancel
43e0: 65 64 2c 20 68 6f 77 65 76 65 72 2e 3c 2f 70 3e  ed, however.</p>
43f0: 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 4c 45 41 53  ..<p>^The RELEAS
4400: 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6c 69 6b  E command is lik
4410: 65 20 61 20 5b 43 4f 4d 4d 49 54 5d 20 66 6f 72  e a [COMMIT] for
4420: 20 61 20 53 41 56 45 50 4f 49 4e 54 2e 0a 5e 54   a SAVEPOINT..^T
4430: 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  he RELEASE comma
4440: 6e 64 20 63 61 75 73 65 73 20 61 6c 6c 20 73 61  nd causes all sa
4450: 76 65 70 6f 69 6e 74 73 20 62 61 63 6b 20 74 6f  vepoints back to
4460: 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74   and including t
4470: 68 65 20 0a 6d 6f 73 74 20 72 65 63 65 6e 74 20  he .most recent 
4480: 73 61 76 65 70 6f 69 6e 74 20 77 69 74 68 20 61  savepoint with a
4490: 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 20 74   matching name t
44a0: 6f 20 62 65 20 72 65 6d 6f 76 65 64 20 66 72 6f  o be removed fro
44b0: 6d 20 74 68 65 20 0a 74 72 61 6e 73 61 63 74 69  m the .transacti
44c0: 6f 6e 20 73 74 61 63 6b 2e 20 20 5e 54 68 65 20  on stack.  ^The 
44d0: 52 45 4c 45 41 53 45 20 6f 66 20 61 6e 20 69 6e  RELEASE of an in
44e0: 6e 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ner transaction.
44f0: 64 6f 65 73 20 6e 6f 74 20 63 61 75 73 65 20 61  does not cause a
4500: 6e 79 20 63 68 61 6e 67 65 73 20 74 6f 20 62 65  ny changes to be
4510: 20 77 72 69 74 74 65 6e 20 74 6f 20 74 68 65 20   written to the 
4520: 64 61 74 61 62 61 73 65 20 66 69 6c 65 3b 20 69  database file; i
4530: 74 20 6d 65 72 65 6c 79 0a 72 65 6d 6f 76 65 73  t merely.removes
4540: 20 73 61 76 65 70 6f 69 6e 74 73 20 66 72 6f 6d   savepoints from
4550: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
4560: 20 73 74 61 63 6b 20 73 75 63 68 20 74 68 61 74   stack such that
4570: 20 69 74 20 69 73 0a 6e 6f 20 6c 6f 6e 67 65 72   it is.no longer
4580: 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 52 4f 4c   possible to ROL
4590: 4c 42 41 43 4b 20 54 4f 20 74 68 6f 73 65 20 73  LBACK TO those s
45a0: 61 76 65 70 6f 69 6e 74 73 2e 0a 5e 49 66 20 61  avepoints..^If a
45b0: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
45c0: 20 72 65 6c 65 61 73 65 73 20 74 68 65 20 6f 75   releases the ou
45d0: 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e  termost savepoin
45e0: 74 2c 20 73 6f 0a 74 68 61 74 20 74 68 65 20 74  t, so.that the t
45f0: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b  ransaction stack
4600: 20 62 65 63 6f 6d 65 73 20 65 6d 70 74 79 2c 20   becomes empty, 
4610: 74 68 65 6e 20 52 45 4c 45 41 53 45 20 69 73 20  then RELEASE is 
4620: 74 68 65 20 73 61 6d 65 0a 61 73 20 5b 43 4f 4d  the same.as [COM
4630: 4d 49 54 5d 2e 0a 5e 54 68 65 20 5b 43 4f 4d 4d  MIT]..^The [COMM
4640: 49 54 5d 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20  IT] command may 
4650: 62 65 20 75 73 65 64 20 74 6f 20 72 65 6c 65 61  be used to relea
4660: 73 65 20 61 6c 6c 20 73 61 76 65 70 6f 69 6e 74  se all savepoint
4670: 73 20 61 6e 64 0a 63 6f 6d 6d 69 74 20 74 68 65  s and.commit the
4680: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 65 76 65   transaction eve
4690: 6e 20 69 66 20 74 68 65 20 74 72 61 6e 73 61 63  n if the transac
46a0: 74 69 6f 6e 20 77 61 73 20 6f 72 69 67 69 6e 61  tion was origina
46b0: 6c 6c 79 20 73 74 61 72 74 65 64 0a 62 79 20 61  lly started.by a
46c0: 20 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61   SAVEPOINT comma
46d0: 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20  nd instead of a 
46e0: 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64 2e  [BEGIN] command.
46f0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  </p>..<p>^If the
4700: 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 20   savepoint-name 
4710: 69 6e 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d  in a RELEASE com
4720: 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6d 61  mand does not ma
4730: 74 63 68 20 61 6e 79 0a 73 61 76 65 70 6f 69 6e  tch any.savepoin
4740: 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 74  t currently in t
4750: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  he transaction s
4760: 74 61 63 6b 2c 20 74 68 65 6e 20 6e 6f 20 73 61  tack, then no sa
4770: 76 65 70 6f 69 6e 74 73 20 61 72 65 0a 72 65 6c  vepoints are.rel
4780: 65 61 73 65 64 2c 20 74 68 65 20 64 61 74 61 62  eased, the datab
4790: 61 73 65 20 69 73 20 75 6e 63 68 61 6e 67 65 64  ase is unchanged
47a0: 2c 20 61 6e 64 20 74 68 65 20 52 45 4c 45 41 53  , and the RELEAS
47b0: 45 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72 6e  E command return
47c0: 73 0a 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a  s.an error.</p>.
47d0: 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 61  .<p>^Note that a
47e0: 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74  n inner transact
47f0: 69 6f 6e 20 6d 69 67 68 74 20 63 6f 6d 6d 69 74  ion might commit
4800: 20 28 75 73 69 6e 67 20 74 68 65 20 52 45 4c 45   (using the RELE
4810: 41 53 45 20 63 6f 6d 6d 61 6e 64 29 0a 62 75 74  ASE command).but
4820: 20 74 68 65 6e 20 6c 61 74 65 72 20 68 61 76 65   then later have
4830: 20 69 74 73 20 77 6f 72 6b 20 75 6e 64 6f 6e 65   its work undone
4840: 20 62 79 20 61 20 52 4f 4c 4c 42 41 43 4b 20 69   by a ROLLBACK i
4850: 6e 20 61 6e 20 6f 75 74 65 72 20 74 72 61 6e 73  n an outer trans
4860: 61 63 74 69 6f 6e 2e 0a 5e 41 20 70 6f 77 65 72  action..^A power
4870: 20 66 61 69 6c 75 72 65 20 6f 72 20 70 72 6f 67   failure or prog
4880: 72 61 6d 20 63 72 61 73 68 20 6f 72 20 4f 53 20  ram crash or OS 
4890: 63 72 61 73 68 20 77 69 6c 6c 20 63 61 75 73 65  crash will cause
48a0: 20 74 68 65 20 6f 75 74 65 72 2d 6d 6f 73 74 0a   the outer-most.
48b0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 6f 20 72  transaction to r
48c0: 6f 6c 6c 62 61 63 6b 2c 20 75 6e 64 6f 69 6e 67  ollback, undoing
48d0: 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61   all changes tha
48e0: 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20  t have occurred 
48f0: 77 69 74 68 69 6e 0a 74 68 61 74 20 6f 75 74 65  within.that oute
4900: 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 65  r transaction, e
4910: 76 65 6e 20 63 68 61 6e 67 65 73 20 74 68 61 74  ven changes that
4920: 20 68 61 76 65 20 73 75 70 70 6f 73 65 64 6c 79   have supposedly
4930: 20 62 65 65 6e 20 22 63 6f 6d 6d 69 74 74 65 64   been "committed
4940: 22 0a 62 79 20 74 68 65 20 52 45 4c 45 41 53 45  ".by the RELEASE
4950: 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 43 6f 6e 74   command.  ^Cont
4960: 65 6e 74 20 69 73 20 6e 6f 74 20 61 63 74 75 61  ent is not actua
4970: 6c 6c 79 20 63 6f 6d 6d 69 74 74 65 64 20 6f 6e  lly committed on
4980: 20 74 68 65 20 64 69 73 6b 20 0a 75 6e 74 69 6c   the disk .until
4990: 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 74   the outermost t
49a0: 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69  ransaction commi
49b0: 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 72  ts.</p>..<p>Ther
49c0: 65 20 61 72 65 20 73 65 76 65 72 61 6c 20 77 61  e are several wa
49d0: 79 73 20 6f 66 20 74 68 69 6e 6b 69 6e 67 20 61  ys of thinking a
49e0: 62 6f 75 74 20 74 68 65 20 52 45 4c 45 41 53 45  bout the RELEASE
49f0: 20 63 6f 6d 6d 61 6e 64 3a 3c 2f 70 3e 0a 0a 3c   command:</p>..<
4a00: 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 53 6f 6d 65  ul>.<li><p>.Some
4a10: 20 70 65 6f 70 6c 65 20 76 69 65 77 20 52 45 4c   people view REL
4a20: 45 41 53 45 20 61 73 20 74 68 65 20 65 71 75 69  EASE as the equi
4a30: 76 61 6c 65 6e 74 20 6f 66 20 43 4f 4d 4d 49 54  valent of COMMIT
4a40: 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49 4e 54   for a SAVEPOINT
4a50: 2e 0a 54 68 69 73 20 69 73 20 61 6e 20 61 63 63  ..This is an acc
4a60: 65 70 74 61 62 6c 65 20 70 6f 69 6e 74 20 6f 66  eptable point of
4a70: 20 76 69 65 77 20 61 73 20 6c 6f 6e 67 20 61 73   view as long as
4a80: 20 6f 6e 65 20 72 65 6d 65 6d 62 65 72 73 20 74   one remembers t
4a90: 68 61 74 20 74 68 65 0a 63 68 61 6e 67 65 73 20  hat the.changes 
4aa0: 63 6f 6d 6d 69 74 74 65 64 20 62 79 20 61 6e 20  committed by an 
4ab0: 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74 69 6f  inner transactio
4ac0: 6e 20 6d 69 67 68 74 20 6c 61 74 65 72 20 62 65  n might later be
4ad0: 20 75 6e 64 6f 6e 65 20 62 79 20 61 0a 72 6f 6c   undone by a.rol
4ae0: 6c 62 61 63 6b 20 69 6e 20 61 6e 20 6f 75 74 65  lback in an oute
4af0: 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f  r transaction.</
4b00: 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
4b10: 0a 41 6e 6f 74 68 65 72 20 76 69 65 77 20 6f 66  .Another view of
4b20: 20 52 45 4c 45 41 53 45 20 69 73 20 74 68 61 74   RELEASE is that
4b30: 20 69 74 20 6d 65 72 67 65 73 20 61 20 6e 61 6d   it merges a nam
4b40: 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  ed transaction i
4b50: 6e 74 6f 20 69 74 73 0a 70 61 72 65 6e 74 20 74  nto its.parent t
4b60: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 73 6f 20 74  ransaction, so t
4b70: 68 61 74 20 74 68 65 20 6e 61 6d 65 64 20 74 72  hat the named tr
4b80: 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 69 74  ansaction and it
4b90: 73 20 70 61 72 65 6e 74 20 62 65 63 6f 6d 65 0a  s parent become.
4ba0: 74 68 65 20 73 61 6d 65 20 74 72 61 6e 73 61 63  the same transac
4bb0: 74 69 6f 6e 2e 20 20 41 66 74 65 72 20 52 45 4c  tion.  After REL
4bc0: 45 41 53 45 2c 20 74 68 65 20 6e 61 6d 65 64 20  EASE, the named 
4bd0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20  transaction and 
4be0: 69 74 73 20 70 61 72 65 6e 74 0a 77 69 6c 6c 20  its parent.will 
4bf0: 63 6f 6d 6d 69 74 20 6f 72 20 72 6f 6c 6c 62 61  commit or rollba
4c00: 63 6b 20 74 6f 67 65 74 68 65 72 2c 20 77 68 61  ck together, wha
4c10: 74 65 76 65 72 20 74 68 65 69 72 20 66 61 74 65  tever their fate
4c20: 20 6d 61 79 20 62 65 2e 0a 3c 2f 70 3e 3c 2f 6c   may be..</p></l
4c30: 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 4f 6e 65 20  i>..<li><p>.One 
4c40: 63 61 6e 20 61 6c 73 6f 20 74 68 69 6e 6b 20 6f  can also think o
4c50: 66 20 73 61 76 65 70 6f 69 6e 74 73 20 61 73 0a  f savepoints as.
4c60: 22 6d 61 72 6b 73 22 20 69 6e 20 74 68 65 20 74  "marks" in the t
4c70: 72 61 6e 73 61 63 74 69 6f 6e 20 74 69 6d 65 6c  ransaction timel
4c80: 69 6e 65 2e 20 20 49 6e 20 74 68 69 73 20 76 69  ine.  In this vi
4c90: 65 77 2c 20 74 68 65 20 53 41 56 45 50 4f 49 4e  ew, the SAVEPOIN
4ca0: 54 20 63 6f 6d 6d 61 6e 64 0a 63 72 65 61 74 65  T command.create
4cb0: 73 20 61 20 6e 65 77 20 6d 61 72 6b 2c 20 74 68  s a new mark, th
4cc0: 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f  e ROLLBACK TO co
4cd0: 6d 6d 61 6e 64 20 72 65 77 69 6e 64 73 20 74 68  mmand rewinds th
4ce0: 65 20 74 69 6d 65 6c 69 6e 65 20 62 61 63 6b 0a  e timeline back.
4cf0: 74 6f 20 61 20 70 6f 69 6e 74 20 6a 75 73 74 20  to a point just 
4d00: 61 66 74 65 72 20 74 68 65 20 6e 61 6d 65 64 20  after the named 
4d10: 6d 61 72 6b 2c 20 61 6e 64 20 74 68 65 20 52 45  mark, and the RE
4d20: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 0a 65 72  LEASE command.er
4d30: 61 73 65 73 20 6d 61 72 6b 73 20 66 72 6f 6d 20  ases marks from 
4d40: 74 68 65 20 74 69 6d 65 6c 69 6e 65 20 77 69 74  the timeline wit
4d50: 68 6f 75 74 20 61 63 74 75 61 6c 6c 79 20 6d 61  hout actually ma
4d60: 6b 69 6e 67 20 61 6e 79 0a 63 68 61 6e 67 65 73  king any.changes
4d70: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
4d80: 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c  ..</p></li>.</ul
4d90: 3e 0a 0a 0a 0a 3c 68 33 3e 54 72 61 6e 73 61 63  >....<h3>Transac
4da0: 74 69 6f 6e 20 4e 65 73 74 69 6e 67 20 52 75 6c  tion Nesting Rul
4db0: 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65  es</h3>..<p>^The
4dc0: 20 6c 61 73 74 20 74 72 61 6e 73 61 63 74 69 6f   last transactio
4dd0: 6e 20 73 74 61 72 74 65 64 20 77 69 6c 6c 20 62  n started will b
4de0: 65 20 74 68 65 20 66 69 72 73 74 0a 74 72 61 6e  e the first.tran
4df0: 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 74 65  saction committe
4e00: 64 20 6f 72 20 72 6f 6c 6c 65 64 20 62 61 63 6b  d or rolled back
4e10: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b  .</p>..<p>^The [
4e20: 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64 20 6f  BEGIN] command o
4e30: 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20 74 68 65  nly works if the
4e40: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
4e50: 63 6b 20 69 73 20 65 6d 70 74 79 2c 20 6f 72 0a  ck is empty, or.
4e60: 69 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 20 69  in other words i
4e70: 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 70  f there are no p
4e80: 65 6e 64 69 6e 67 20 74 72 61 6e 73 61 63 74 69  ending transacti
4e90: 6f 6e 73 2e 20 20 5e 49 66 20 74 68 65 20 74 72  ons.  ^If the tr
4ea0: 61 6e 73 61 63 74 69 6f 6e 0a 73 74 61 63 6b 20  ansaction.stack 
4eb0: 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 77 68 65  is not empty whe
4ec0: 6e 20 74 68 65 20 5b 42 45 47 49 4e 5d 20 63 6f  n the [BEGIN] co
4ed0: 6d 6d 61 6e 64 20 69 73 20 69 6e 76 6f 6b 65 64  mmand is invoked
4ee0: 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6d 6d 61  , then the comma
4ef0: 6e 64 0a 66 61 69 6c 73 20 77 69 74 68 20 61 6e  nd.fails with an
4f00: 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e   error.</p>..<p>
4f10: 5e 54 68 65 20 5b 43 4f 4d 4d 49 54 5d 20 63 6f  ^The [COMMIT] co
4f20: 6d 6d 61 6e 64 20 63 6f 6d 6d 69 74 73 20 61 6c  mmand commits al
4f30: 6c 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 74 72  l outstanding tr
4f40: 61 6e 73 61 63 74 69 6f 6e 73 20 61 6e 64 20 6c  ansactions and l
4f50: 65 61 76 65 73 0a 74 68 65 20 74 72 61 6e 73 61  eaves.the transa
4f60: 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70 74  ction stack empt
4f70: 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  y.</p>..<p>^The 
4f80: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
4f90: 73 74 61 72 74 73 20 77 69 74 68 20 74 68 65 20  starts with the 
4fa0: 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 64 64 69  most recent addi
4fb0: 74 69 6f 6e 20 74 6f 20 74 68 65 0a 74 72 61 6e  tion to the.tran
4fc0: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 61 6e  saction stack an
4fd0: 64 20 72 65 6c 65 61 73 65 73 20 73 61 76 65 70  d releases savep
4fe0: 6f 69 6e 74 73 20 62 61 63 6b 77 61 72 64 73 20  oints backwards 
4ff0: 0a 69 6e 20 74 69 6d 65 20 75 6e 74 69 6c 20 69  .in time until i
5000: 74 20 72 65 6c 65 61 73 65 73 20 61 20 73 61 76  t releases a sav
5010: 65 70 6f 69 6e 74 20 77 69 74 68 20 61 20 6d 61  epoint with a ma
5020: 74 63 68 69 6e 67 20 73 61 76 65 70 6f 69 6e 74  tching savepoint
5030: 2d 6e 61 6d 65 2e 0a 5e 50 72 69 6f 72 20 73 61  -name..^Prior sa
5040: 76 65 70 6f 69 6e 74 73 2c 20 65 76 65 6e 20 73  vepoints, even s
5050: 61 76 65 70 6f 69 6e 74 73 20 77 69 74 68 20 6d  avepoints with m
5060: 61 74 63 68 69 6e 67 20 73 61 76 65 70 6f 69 6e  atching savepoin
5070: 74 2d 6e 61 6d 65 73 2c 20 61 72 65 0a 75 6e 63  t-names, are.unc
5080: 68 61 6e 67 65 64 2e 0a 5e 49 66 20 74 68 65 20  hanged..^If the 
5090: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
50a0: 63 61 75 73 65 73 20 74 68 65 0a 74 72 61 6e 73  causes the.trans
50b0: 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 74 6f 20  action stack to 
50c0: 62 65 63 6f 6d 65 20 65 6d 70 74 79 20 28 69 66  become empty (if
50d0: 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d   the RELEASE com
50e0: 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20 74 68  mand releases th
50f0: 65 0a 6f 75 74 65 72 6d 6f 73 74 20 74 72 61 6e  e.outermost tran
5100: 73 61 63 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65  saction from the
5110: 20 73 74 61 63 6b 29 20 74 68 65 6e 20 74 68 65   stack) then the
5120: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d   transaction com
5130: 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  mits.</p>..<p>^T
5140: 68 65 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20 63 6f  he [ROLLBACK] co
5150: 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74 20 61 20  mmand without a 
5160: 54 4f 20 63 6c 61 75 73 65 20 72 6f 6c 6c 73 20  TO clause rolls 
5170: 62 61 63 6b 73 20 61 6c 6c 20 74 72 61 6e 73 61  backs all transa
5180: 63 74 69 6f 6e 73 0a 61 6e 64 20 6c 65 61 76 65  ctions.and leave
5190: 73 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  s the transactio
51a0: 6e 20 73 74 61 63 6b 20 65 6d 70 74 79 2e 3c 2f  n stack empty.</
51b0: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 4f 4c 4c  p>..<p>^The ROLL
51c0: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 74  BACK command wit
51d0: 68 20 61 20 54 4f 20 63 6c 61 75 73 65 20 72 6f  h a TO clause ro
51e0: 6c 6c 73 20 62 61 63 6b 20 74 72 61 6e 73 61 63  lls back transac
51f0: 74 69 6f 6e 73 20 67 6f 69 6e 67 0a 62 61 63 6b  tions going.back
5200: 77 61 72 64 73 20 69 6e 20 74 69 6d 65 20 62 61  wards in time ba
5210: 63 6b 20 74 6f 20 74 68 65 20 6d 6f 73 74 20 72  ck to the most r
5220: 65 63 65 6e 74 20 53 41 56 45 50 4f 49 4e 54 20  ecent SAVEPOINT 
5230: 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20  with a matching 
5240: 6e 61 6d 65 2e 0a 5e 54 68 65 20 53 41 56 45 50  name..^The SAVEP
5250: 4f 49 4e 54 20 77 69 74 68 20 74 68 65 20 6d 61  OINT with the ma
5260: 74 63 68 69 6e 67 20 6e 61 6d 65 20 72 65 6d 61  tching name rema
5270: 69 6e 73 20 6f 6e 20 74 68 65 20 74 72 61 6e 73  ins on the trans
5280: 61 63 74 69 6f 6e 20 73 74 61 63 6b 2c 0a 62 75  action stack,.bu
5290: 74 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20 63  t all database c
52a0: 68 61 6e 67 65 73 20 74 68 61 74 20 6f 63 63 75  hanges that occu
52b0: 72 72 65 64 20 61 66 74 65 72 20 74 68 61 74 20  rred after that 
52c0: 53 41 56 45 50 4f 49 4e 54 20 77 61 73 20 63 72  SAVEPOINT was cr
52d0: 65 61 74 65 64 0a 61 72 65 20 72 6f 6c 6c 65 64  eated.are rolled
52e0: 20 62 61 63 6b 2e 20 20 5e 49 66 20 74 68 65 20   back.  ^If the 
52f0: 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 20 69  savepoint-name i
5300: 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20  n a ROLLBACK TO 
5310: 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74  command does not
5320: 0a 6d 61 74 63 68 20 61 6e 79 20 53 41 56 45 50  .match any SAVEP
5330: 4f 49 4e 54 20 6f 6e 20 74 68 65 20 73 74 61 63  OINT on the stac
5340: 6b 2c 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c  k, then the ROLL
5350: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 66 61 69  BACK command fai
5360: 6c 73 20 77 69 74 68 20 61 6e 0a 65 72 72 6f 72  ls with an.error
5370: 20 61 6e 64 20 6c 65 61 76 65 73 20 74 68 65 20   and leaves the 
5380: 73 74 61 74 65 20 6f 66 20 74 68 65 20 64 61 74  state of the dat
5390: 61 62 61 73 65 20 75 6e 63 68 61 6e 67 65 64 2e  abase unchanged.
53a0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
53b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
53c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
53d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
53e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
53f0: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
5400: 69 6f 6e 20 63 6f 6d 6d 65 6e 74 20 63 6f 6d 6d  ion comment comm
5410: 65 6e 74 20 7b 63 6f 6d 6d 65 6e 74 20 2a 63 6f  ent {comment *co
5420: 6d 6d 65 6e 74 73 7d 0a 0a 42 75 62 62 6c 65 44  mments}..BubbleD
5430: 69 61 67 72 61 6d 20 63 6f 6d 6d 65 6e 74 2d 73  iagram comment-s
5440: 79 6e 74 61 78 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  yntax.</tcl>..<p
5450: 3e 5e 43 6f 6d 6d 65 6e 74 73 20 61 72 65 20 6e  >^Comments are n
5460: 6f 74 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2c  ot SQL commands,
5470: 20 62 75 74 20 63 61 6e 20 6f 63 63 75 72 20 77   but can occur w
5480: 69 74 68 69 6e 20 74 68 65 20 74 65 78 74 20 6f  ithin the text o
5490: 66 0a 53 51 4c 20 71 75 65 72 69 65 73 20 70 61  f.SQL queries pa
54a0: 73 73 65 64 20 74 6f 20 5b 73 71 6c 69 74 65 33  ssed to [sqlite3
54b0: 5f 70 72 65 70 61 72 65 5f 76 32 28 29 5d 20 61  _prepare_v2()] a
54c0: 6e 64 20 72 65 6c 61 74 65 64 20 69 6e 74 65 72  nd related inter
54d0: 66 61 63 65 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73  faces..^Comments
54e0: 20 61 72 65 20 74 72 65 61 74 65 64 20 61 73 20   are treated as 
54f0: 77 68 69 74 65 73 70 61 63 65 20 62 79 20 74 68  whitespace by th
5500: 65 20 70 61 72 73 65 72 2e 0a 5e 43 6f 6d 6d 65  e parser..^Comme
5510: 6e 74 73 20 63 61 6e 20 62 65 67 69 6e 20 61 6e  nts can begin an
5520: 79 77 68 65 72 65 20 77 68 69 74 65 73 70 61 63  ywhere whitespac
5530: 65 20 0a 63 61 6e 20 62 65 20 66 6f 75 6e 64 2c  e .can be found,
5540: 20 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69 64   including insid
5550: 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68  e expressions th
5560: 61 74 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65  at span multiple
5570: 20 6c 69 6e 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70   lines..</p>..<p
5580: 3e 5e 53 51 4c 20 63 6f 6d 6d 65 6e 74 73 20 62  >^SQL comments b
5590: 65 67 69 6e 20 77 69 74 68 20 74 77 6f 20 63 6f  egin with two co
55a0: 6e 73 65 63 75 74 69 76 65 20 22 2d 22 20 63 68  nsecutive "-" ch
55b0: 61 72 61 63 74 65 72 73 20 28 41 53 43 49 49 20  aracters (ASCII 
55c0: 30 78 32 64 29 0a 61 6e 64 20 65 78 74 65 6e 64  0x2d).and extend
55d0: 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75   up to and inclu
55e0: 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20 6e 65  ding the next ne
55f0: 77 6c 69 6e 65 20 63 68 61 72 61 63 74 65 72 20  wline character 
5600: 28 41 53 43 49 49 20 30 78 30 61 29 0a 6f 72 20  (ASCII 0x0a).or 
5610: 75 6e 74 69 6c 20 74 68 65 20 65 6e 64 20 6f 66  until the end of
5620: 20 69 6e 70 75 74 2c 20 77 68 69 63 68 65 76 65   input, whicheve
5630: 72 20 63 6f 6d 65 73 20 66 69 72 73 74 2e 3c 2f  r comes first.</
5640: 70 3e 0a 0a 3c 70 3e 5e 43 2d 73 74 79 6c 65 20  p>..<p>^C-style 
5650: 63 6f 6d 6d 65 6e 74 73 20 62 65 67 69 6e 0a 77  comments begin.w
5660: 69 74 68 20 22 2f 2a 22 20 61 6e 64 20 65 78 74  ith "/*" and ext
5670: 65 6e 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e  end up to and in
5680: 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74  cluding the next
5690: 20 22 2a 2f 22 20 63 68 61 72 61 63 74 65 72 20   "*/" character 
56a0: 70 61 69 72 0a 6f 72 20 75 6e 74 69 6c 20 74 68  pair.or until th
56b0: 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20  e end of input, 
56c0: 77 68 69 63 68 65 76 65 72 20 63 6f 6d 65 73 20  whichever comes 
56d0: 66 69 72 73 74 2e 20 20 5e 43 2d 73 74 79 6c 65  first.  ^C-style
56e0: 20 63 6f 6d 6d 65 6e 74 73 0a 63 61 6e 20 73 70   comments.can sp
56f0: 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65  an multiple line
5700: 73 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 6f 6d  s. </p>..<p>^Com
5710: 6d 65 6e 74 73 20 63 61 6e 20 61 70 70 65 61 72  ments can appear
5720: 20 61 6e 79 77 68 65 72 65 20 77 68 69 74 65 73   anywhere whites
5730: 70 61 63 65 20 63 61 6e 20 6f 63 63 75 72 2c 0a  pace can occur,.
5740: 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65  including inside
5750: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 6e 64   expressions and
5760: 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f   in the middle o
5770: 66 20 6f 74 68 65 72 20 53 51 4c 20 73 74 61 74  f other SQL stat
5780: 65 6d 65 6e 74 73 2e 0a 5e 43 6f 6d 6d 65 6e 74  ements..^Comment
5790: 73 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 0a 3c  s do not nest..<
57a0: 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  /p>...<tcl>.####
57b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57f0: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
5800: 6f 6e 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58  on {CREATE INDEX
5810: 7d 20 63 72 65 61 74 65 69 6e 64 65 78 20 7b 7b  } createindex {{
5820: 43 52 45 41 54 45 20 49 4e 44 45 58 7d 7d 0a 0a  CREATE INDEX}}..
5830: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72  BubbleDiagram cr
5840: 65 61 74 65 2d 69 6e 64 65 78 2d 73 74 6d 74 20  eate-index-stmt 
5850: 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  1.BubbleDiagram 
5860: 69 6e 64 65 78 65 64 2d 63 6f 6c 75 6d 6e 0a 3c  indexed-column.<
5870: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43  /tcl>..<p>^The C
5880: 52 45 41 54 45 20 49 4e 44 45 58 20 63 6f 6d 6d  REATE INDEX comm
5890: 61 6e 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  and consists of 
58a0: 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22 43 52  the keywords "CR
58b0: 45 41 54 45 20 49 4e 44 45 58 22 20 66 6f 6c 6c  EATE INDEX" foll
58c0: 6f 77 65 64 0a 62 79 20 74 68 65 20 6e 61 6d 65  owed.by the name
58d0: 20 6f 66 20 74 68 65 20 6e 65 77 20 69 6e 64 65   of the new inde
58e0: 78 2c 20 74 68 65 20 6b 65 79 77 6f 72 64 20 22  x, the keyword "
58f0: 4f 4e 22 2c 20 74 68 65 20 6e 61 6d 65 20 6f 66  ON", the name of
5900: 20 61 20 70 72 65 76 69 6f 75 73 6c 79 0a 63 72   a previously.cr
5910: 65 61 74 65 64 20 74 61 62 6c 65 20 74 68 61 74  eated table that
5920: 20 69 73 20 74 6f 20 62 65 20 69 6e 64 65 78 65   is to be indexe
5930: 64 2c 20 61 6e 64 20 61 20 70 61 72 65 6e 74 68  d, and a parenth
5940: 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66 20 6e  esized list of n
5950: 61 6d 65 73 20 6f 66 0a 63 6f 6c 75 6d 6e 73 20  ames of.columns 
5960: 69 6e 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  in the table tha
5970: 74 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 74  t are used for t
5980: 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 3c 2f 70  he index key.</p
5990: 3e 0a 0a 3c 70 3e 5e 45 61 63 68 20 63 6f 6c 75  >..<p>^Each colu
59a0: 6d 6e 20 6e 61 6d 65 20 63 61 6e 20 62 65 20 66  mn name can be f
59b0: 6f 6c 6c 6f 77 65 64 20 62 79 20 6f 6e 65 20 6f  ollowed by one o
59c0: 66 20 74 68 65 20 22 41 53 43 22 20 6f 72 20 22  f the "ASC" or "
59d0: 44 45 53 43 22 20 6b 65 79 77 6f 72 64 73 0a 74  DESC" keywords.t
59e0: 6f 20 69 6e 64 69 63 61 74 65 20 73 6f 72 74 20  o indicate sort 
59f0: 6f 72 64 65 72 2e 20 20 5e 54 68 65 20 73 6f 72  order.  ^The sor
5a00: 74 20 6f 72 64 65 72 20 6d 61 79 20 6f 72 20 6d  t order may or m
5a10: 61 79 20 6e 6f 74 20 62 65 20 69 67 6e 6f 72 65  ay not be ignore
5a20: 64 20 64 65 70 65 6e 64 69 6e 67 0a 6f 6e 20 74  d depending.on t
5a30: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
5a40: 20 66 6f 72 6d 61 74 2e 20 20 5e 54 68 65 20 22   format.  ^The "
5a50: 6c 65 67 61 63 79 22 20 66 69 6c 65 20 66 6f 72  legacy" file for
5a60: 6d 61 74 20 69 67 6e 6f 72 65 73 20 69 6e 64 65  mat ignores inde
5a70: 78 0a 73 6f 72 74 20 6f 72 64 65 72 2e 20 20 5e  x.sort order.  ^
5a80: 54 68 65 20 64 65 73 63 65 6e 64 69 6e 67 20 69  The descending i
5a90: 6e 64 65 78 20 66 69 6c 65 20 66 6f 72 6d 61 74  ndex file format
5aa0: 20 74 61 6b 65 73 20 69 6e 64 65 78 20 73 6f 72   takes index sor
5ab0: 74 20 6f 72 64 65 72 0a 69 6e 74 6f 20 61 63 63  t order.into acc
5ac0: 6f 75 6e 74 2e 20 20 5e 28 4f 6e 6c 79 20 63 6f  ount.  ^(Only co
5ad0: 70 69 65 73 20 6f 66 20 53 51 4c 69 74 65 20 6e  pies of SQLite n
5ae0: 65 77 65 72 20 74 68 61 6e 20 5b 76 65 72 73 69  ewer than [versi
5af0: 6f 6e 20 33 2e 33 2e 30 5d 20 0a 28 72 65 6c 65  on 3.3.0] .(rele
5b00: 61 73 65 64 20 6f 6e 20 32 30 30 36 2d 30 31 2d  ased on 2006-01-
5b10: 31 30 29 20 61 72 65 20 61 62 6c 65 20 74 6f 20  10) are able to 
5b20: 75 6e 64 65 72 73 74 61 6e 64 20 74 68 65 20 6e  understand the n
5b30: 65 77 65 72 20 64 65 73 63 65 6e 64 69 6e 67 0a  ewer descending.
5b40: 69 6e 64 65 78 20 66 69 6c 65 20 66 6f 72 6d 61  index file forma
5b50: 74 20 61 6e 64 20 73 6f 20 66 6f 72 20 63 6f 6d  t and so for com
5b60: 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20  patibility with 
5b70: 6f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f  older versions o
5b80: 66 0a 53 51 4c 69 74 65 2c 20 74 68 65 20 6c 65  f.SQLite, the le
5b90: 67 61 63 79 20 66 69 6c 65 20 66 6f 72 6d 61 74  gacy file format
5ba0: 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 62 79   is generated by
5bb0: 20 64 65 66 61 75 6c 74 2e 29 5e 20 20 5e 55 73   default.)^  ^Us
5bc0: 65 20 74 68 65 0a 5b 6c 65 67 61 63 79 5f 66 69  e the.[legacy_fi
5bd0: 6c 65 5f 66 6f 72 6d 61 74 5d 20 70 72 61 67 6d  le_format] pragm
5be0: 61 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 69 73  a to modify this
5bf0: 20 62 65 68 61 76 69 6f 72 20 61 6e 64 20 67 65   behavior and ge
5c00: 6e 65 72 61 74 65 0a 64 61 74 61 62 61 73 65 73  nerate.databases
5c10: 20 74 68 61 74 20 75 73 65 20 74 68 65 20 6e 65   that use the ne
5c20: 77 65 72 20 66 69 6c 65 20 66 6f 72 6d 61 74 2e  wer file format.
5c30: 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e    Future version
5c40: 73 20 6f 66 20 53 51 4c 69 74 65 0a 6d 61 79 20  s of SQLite.may 
5c50: 62 65 67 69 6e 20 74 6f 20 67 65 6e 65 72 61 74  begin to generat
5c60: 65 20 74 68 65 20 6e 65 77 65 72 20 66 69 6c 65  e the newer file
5c70: 20 66 6f 72 6d 61 74 20 62 79 20 64 65 66 61 75   format by defau
5c80: 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  lt.</p>..<p>^The
5c90: 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20   COLLATE clause 
5ca0: 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f  optionally follo
5cb0: 77 69 6e 67 20 65 61 63 68 20 63 6f 6c 75 6d 6e  wing each column
5cc0: 20 6e 61 6d 65 20 64 65 66 69 6e 65 73 20 61 0a   name defines a.
5cd0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
5ce0: 63 65 20 75 73 65 64 20 66 6f 72 20 74 65 78 74  ce used for text
5cf0: 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 61 74   entries in that
5d00: 20 63 6f 6c 75 6d 6e 2e 0a 5e 54 68 65 20 64 65   column..^The de
5d10: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 0a  fault collating.
5d20: 73 65 71 75 65 6e 63 65 20 69 73 20 74 68 65 20  sequence is the 
5d30: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
5d40: 63 65 20 64 65 66 69 6e 65 64 20 66 6f 72 20 74  ce defined for t
5d50: 68 61 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  hat column in th
5d60: 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  e.[CREATE TABLE]
5d70: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 5e 4f 72   statement.  ^Or
5d80: 20 69 66 20 6e 6f 20 63 6f 6c 6c 61 74 69 6e 67   if no collating
5d90: 20 73 65 71 75 65 6e 63 65 20 69 73 20 6f 74 68   sequence is oth
5da0: 65 72 77 69 73 65 20 64 65 66 69 6e 65 64 2c 0a  erwise defined,.
5db0: 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 42 49 4e  the built-in BIN
5dc0: 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ARY collating se
5dd0: 71 75 65 6e 63 65 20 69 73 20 75 73 65 64 2e 3c  quence is used.<
5de0: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72  /p>..<p>There ar
5df0: 65 20 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c  e no arbitrary l
5e00: 69 6d 69 74 73 20 6f 6e 20 74 68 65 20 6e 75 6d  imits on the num
5e10: 62 65 72 20 6f 66 20 69 6e 64 69 63 65 73 20 74  ber of indices t
5e20: 68 61 74 20 63 61 6e 20 62 65 0a 61 74 74 61 63  hat can be.attac
5e30: 68 65 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20  hed to a single 
5e40: 74 61 62 6c 65 2e 20 20 5e 28 54 68 65 20 6e 75  table.  ^(The nu
5e50: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
5e60: 69 6e 20 61 6e 20 69 6e 64 65 78 20 69 73 20 0a  in an index is .
5e70: 6c 69 6d 69 74 65 64 20 74 6f 20 74 68 65 20 76  limited to the v
5e80: 61 6c 75 65 20 73 65 74 20 62 79 0a 5b 73 71 6c  alue set by.[sql
5e90: 69 74 65 33 5f 6c 69 6d 69 74 5d 28 5b 53 51 4c  ite3_limit]([SQL
5ea0: 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e  ITE_LIMIT_COLUMN
5eb0: 5d 2c 2e 2e 2e 29 2e 29 5e 3c 2f 70 3e 0a 0a 3c  ],...).)^</p>..<
5ec0: 70 3e 5e 49 66 20 74 68 65 20 55 4e 49 51 55 45  p>^If the UNIQUE
5ed0: 20 6b 65 79 77 6f 72 64 20 61 70 70 65 61 72 73   keyword appears
5ee0: 20 62 65 74 77 65 65 6e 20 43 52 45 41 54 45 20   between CREATE 
5ef0: 61 6e 64 20 49 4e 44 45 58 20 74 68 65 6e 20 64  and INDEX then d
5f00: 75 70 6c 69 63 61 74 65 0a 69 6e 64 65 78 20 65  uplicate.index e
5f10: 6e 74 72 69 65 73 20 61 72 65 20 6e 6f 74 20 61  ntries are not a
5f20: 6c 6c 6f 77 65 64 2e 20 20 5e 41 6e 79 20 61 74  llowed.  ^Any at
5f30: 74 65 6d 70 74 20 74 6f 20 69 6e 73 65 72 74 20  tempt to insert 
5f40: 61 20 64 75 70 6c 69 63 61 74 65 20 65 6e 74 72  a duplicate entr
5f50: 79 0a 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e  y.will result in
5f60: 20 61 6e 20 65 72 72 6f 72 2e 20 20 5e 46 6f 72   an error.  ^For
5f70: 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66   the purposes of
5f80: 20 75 6e 69 71 75 65 20 69 6e 64 69 63 65 73 2c   unique indices,
5f90: 20 61 6c 6c 20 4e 55 4c 4c 20 76 61 6c 75 65 73   all NULL values
5fa0: 0a 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20  .are considered 
5fb0: 74 6f 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f  to different fro
5fc0: 6d 20 61 6c 6c 20 6f 74 68 65 72 20 4e 55 4c 4c  m all other NULL
5fd0: 20 76 61 6c 75 65 73 20 61 6e 64 20 61 72 65 20   values and are 
5fe0: 74 68 75 73 20 75 6e 69 71 75 65 2e 0a 54 68 69  thus unique..Thi
5ff0: 73 20 69 73 20 6f 6e 65 20 6f 66 20 74 68 65 20  s is one of the 
6000: 74 77 6f 20 70 6f 73 73 69 62 6c 65 20 69 6e 74  two possible int
6010: 65 72 70 72 65 74 61 74 69 6f 6e 73 20 6f 66 20  erpretations of 
6020: 74 68 65 20 53 51 4c 2d 39 32 20 73 74 61 6e 64  the SQL-92 stand
6030: 61 72 64 0a 28 74 68 65 20 6c 61 6e 67 75 61 67  ard.(the languag
6040: 65 20 69 6e 20 74 68 65 20 73 74 61 6e 64 61 72  e in the standar
6050: 64 20 69 73 20 61 6d 62 69 67 75 6f 75 73 29 20  d is ambiguous) 
6060: 61 6e 64 20 69 73 20 74 68 65 20 69 6e 74 65 72  and is the inter
6070: 70 72 65 74 61 74 69 6f 6e 0a 66 6f 6c 6c 6f 77  pretation.follow
6080: 65 64 20 62 79 20 50 6f 73 74 67 72 65 53 51 4c  ed by PostgreSQL
6090: 2c 20 4d 79 53 51 4c 2c 20 46 69 72 65 62 69 72  , MySQL, Firebir
60a0: 64 2c 20 61 6e 64 20 4f 72 61 63 6c 65 2e 20 20  d, and Oracle.  
60b0: 49 6e 66 6f 72 6d 69 78 20 61 6e 64 0a 4d 69 63  Informix and.Mic
60c0: 72 6f 73 6f 66 74 20 53 51 4c 20 53 65 72 76 65  rosoft SQL Serve
60d0: 72 20 66 6f 6c 6c 6f 77 20 74 68 65 20 6f 74 68  r follow the oth
60e0: 65 72 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  er interpretatio
60f0: 6e 20 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72  n of the standar
6100: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74  d.</p>..<p>^If t
6110: 68 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 4e  he optional IF N
6120: 4f 54 20 45 58 49 53 54 53 20 63 6c 61 75 73 65  OT EXISTS clause
6130: 20 69 73 20 70 72 65 73 65 6e 74 20 61 6e 64 20   is present and 
6140: 61 6e 6f 74 68 65 72 20 69 6e 64 65 78 0a 77 69  another index.wi
6150: 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  th the same name
6160: 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 2c   already exists,
6170: 20 74 68 65 6e 20 74 68 69 73 20 63 6f 6d 6d 61   then this comma
6180: 6e 64 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d  nd becomes a no-
6190: 6f 70 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 64  op.</p>..<p>^Ind
61a0: 65 78 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64  exes are removed
61b0: 20 77 69 74 68 20 74 68 65 20 5b 44 52 4f 50 20   with the [DROP 
61c0: 49 4e 44 45 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c  INDEX] command.<
61d0: 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  /p>...<tcl>.####
61e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
61f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6200: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6220: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
6230: 6f 6e 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45  on {CREATE TABLE
6240: 7d 20 7b 63 72 65 61 74 65 74 61 62 6c 65 7d 20  } {createtable} 
6250: 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45 7d 7d  {{CREATE TABLE}}
6260: 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
6270: 63 72 65 61 74 65 2d 74 61 62 6c 65 2d 73 74 6d  create-table-stm
6280: 74 20 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61  t 1.BubbleDiagra
6290: 6d 20 63 6f 6c 75 6d 6e 2d 64 65 66 0a 42 75 62  m column-def.Bub
62a0: 62 6c 65 44 69 61 67 72 61 6d 20 74 79 70 65 2d  bleDiagram type-
62b0: 6e 61 6d 65 0a 42 75 62 62 6c 65 44 69 61 67 72  name.BubbleDiagr
62c0: 61 6d 20 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74 72  am column-constr
62d0: 61 69 6e 74 0a 42 75 62 62 6c 65 44 69 61 67 72  aint.BubbleDiagr
62e0: 61 6d 20 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61  am table-constra
62f0: 69 6e 74 0a 42 75 62 62 6c 65 44 69 61 67 72 61  int.BubbleDiagra
6300: 6d 20 66 6f 72 65 69 67 6e 2d 6b 65 79 2d 63 6c  m foreign-key-cl
6310: 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ause.</tcl>..<p>
6320: 5e 41 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  ^A CREATE TABLE 
6330: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 62 61 73  statement is bas
6340: 69 63 61 6c 6c 79 20 74 68 65 20 6b 65 79 77 6f  ically the keywo
6350: 72 64 73 20 22 43 52 45 41 54 45 20 54 41 42 4c  rds "CREATE TABL
6360: 45 22 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74  E".followed by t
6370: 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 6e 65 77  he name of a new
6380: 20 74 61 62 6c 65 20 61 6e 64 20 61 20 70 61 72   table and a par
6390: 65 6e 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20  enthesized list 
63a0: 6f 66 20 63 6f 6c 75 6d 6e 0a 64 65 66 69 6e 69  of column.defini
63b0: 74 69 6f 6e 73 20 61 6e 64 20 63 6f 6e 73 74 72  tions and constr
63c0: 61 69 6e 74 73 2e 20 20 0a 5e 54 61 62 6c 65 73  aints.  .^Tables
63d0: 20 6e 61 6d 65 73 20 74 68 61 74 20 62 65 67 69   names that begi
63e0: 6e 20 77 69 74 68 20 22 3c 62 3e 73 71 6c 69 74  n with "<b>sqlit
63f0: 65 5f 3c 2f 62 3e 22 20 61 72 65 20 72 65 73 65  e_</b>" are rese
6400: 72 76 65 64 0a 66 6f 72 20 75 73 65 20 62 79 20  rved.for use by 
6410: 53 51 4c 69 74 65 20 69 74 73 65 6c 66 20 61 6e  SQLite itself an
6420: 64 20 63 61 6e 6e 6f 74 20 6e 6f 72 6d 61 6c 6c  d cannot normall
6430: 79 0a 61 70 70 65 61 72 20 69 6e 20 61 20 43 52  y.appear in a CR
6440: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
6450: 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  ment.</p>..<tcl>
6460: 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 74 61 62  hd_fragment {tab
6470: 6c 65 63 6f 6c 64 65 66 7d 20 7b 63 6f 6c 75 6d  lecoldef} {colum
6480: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 7d 20 7b 63  n definition} {c
6490: 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e  olumn definition
64a0: 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 45 61 63  s}</tcl>.<p>^Eac
64b0: 68 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74  h column definit
64c0: 69 6f 6e 20 69 73 20 74 68 65 20 6e 61 6d 65 20  ion is the name 
64d0: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 70  of the column op
64e0: 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65  tionally followe
64f0: 64 20 62 79 20 74 68 65 0a 5b 64 61 74 61 74 79  d by the.[dataty
6500: 70 65 5d 20 66 6f 72 20 74 68 61 74 20 63 6f 6c  pe] for that col
6510: 75 6d 6e 2c 20 74 68 65 6e 20 6f 6e 65 20 6f 72  umn, then one or
6520: 20 6d 6f 72 65 20 6f 70 74 69 6f 6e 61 6c 20 63   more optional c
6530: 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72 61 69 6e 74  olumn constraint
6540: 73 2e 0a 5e 53 51 4c 69 74 65 20 75 73 65 73 20  s..^SQLite uses 
6550: 5b 64 79 6e 61 6d 69 63 20 74 79 70 69 6e 67 5d  [dynamic typing]
6560: 3b 20 0a 74 68 65 20 64 61 74 61 74 79 70 65 20  ; .the datatype 
6570: 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 64  for the column d
6580: 6f 65 73 20 6e 6f 74 20 72 65 73 74 72 69 63 74  oes not restrict
6590: 20 77 68 61 74 20 64 61 74 61 20 6d 61 79 20 62   what data may b
65a0: 65 20 70 75 74 0a 69 6e 20 74 68 61 74 20 63 6f  e put.in that co
65b0: 6c 75 6d 6e 2e 0a 5e 54 68 65 20 55 4e 49 51 55  lumn..^The UNIQU
65c0: 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 61 75  E constraint cau
65d0: 73 65 73 20 61 6e 20 75 6e 69 71 75 65 20 69 6e  ses an unique in
65e0: 64 65 78 20 74 6f 20 62 65 20 63 72 65 61 74 65  dex to be create
65f0: 64 20 6f 6e 20 74 68 65 20 73 70 65 63 69 66 69  d on the specifi
6600: 65 64 0a 63 6f 6c 75 6d 6e 73 2e 20 20 5e 41 6c  ed.columns.  ^Al
6610: 6c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72  l NULL values ar
6620: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 64 69 66  e considered dif
6630: 66 65 72 65 6e 74 20 66 72 6f 6d 20 65 61 63 68  ferent from each
6640: 20 6f 74 68 65 72 20 61 6e 64 20 66 72 6f 6d 0a   other and from.
6650: 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73  all other values
6660: 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65   for the purpose
6670: 20 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 20   of determining 
6680: 75 6e 69 71 75 65 6e 65 73 73 2c 20 68 65 6e 63  uniqueness, henc
6690: 65 20 61 20 55 4e 49 51 55 45 0a 63 6f 6c 75 6d  e a UNIQUE.colum
66a0: 6e 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 6d 75  n may contain mu
66b0: 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73 20 77  ltiple entries w
66c0: 69 74 68 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ith the value of
66d0: 20 4e 55 4c 4c 2e 0a 5e 54 68 65 20 43 4f 4c 4c   NULL..^The COLL
66e0: 41 54 45 20 63 6c 61 75 73 65 20 73 70 65 63 69  ATE clause speci
66f0: 66 69 65 73 20 77 68 61 74 20 74 65 78 74 20 0a  fies what text .
6700: 5b 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74  [collating funct
6710: 69 6f 6e 5d 20 74 6f 20 75 73 65 20 77 68 65 6e  ion] to use when
6720: 20 63 6f 6d 70 61 72 69 6e 67 20 74 65 78 74 20   comparing text 
6730: 65 6e 74 72 69 65 73 20 66 6f 72 20 74 68 65 20  entries for the 
6740: 63 6f 6c 75 6d 6e 2e 20 20 0a 5e 54 68 65 20 62  column.  .^The b
6750: 75 69 6c 74 2d 69 6e 20 5b 42 49 4e 41 52 59 5d  uilt-in [BINARY]
6760: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
6770: 69 6f 6e 20 69 73 20 75 73 65 64 20 62 79 20 64  ion is used by d
6780: 65 66 61 75 6c 74 2e 0a 3c 70 3e 0a 5e 54 68 65  efault..<p>.^The
6790: 20 44 45 46 41 55 4c 54 20 63 6f 6e 73 74 72 61   DEFAULT constra
67a0: 69 6e 74 20 73 70 65 63 69 66 69 65 73 20 61 20  int specifies a 
67b0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 74 6f  default value to
67c0: 20 75 73 65 20 77 68 65 6e 20 64 6f 69 6e 67 20   use when doing 
67d0: 61 6e 20 5b 49 4e 53 45 52 54 5d 2e 0a 5e 54 68  an [INSERT]..^Th
67e0: 65 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 4e  e value may be N
67f0: 55 4c 4c 2c 20 61 20 73 74 72 69 6e 67 20 63 6f  ULL, a string co
6800: 6e 73 74 61 6e 74 2c 20 61 20 6e 75 6d 62 65 72  nstant, a number
6810: 2c 20 6f 72 20 61 20 63 6f 6e 73 74 61 6e 74 20  , or a constant 
6820: 65 78 70 72 65 73 73 69 6f 6e 0a 65 6e 63 6c 6f  expression.enclo
6830: 73 65 64 20 69 6e 20 70 61 72 65 6e 74 68 65 73  sed in parenthes
6840: 65 73 2e 0a 5e 54 68 65 20 64 65 66 61 75 6c 74  es..^The default
6850: 20 76 61 6c 75 65 20 6d 61 79 20 61 6c 73 6f 20   value may also 
6860: 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 73 70  be one of the sp
6870: 65 63 69 61 6c 20 63 61 73 65 2d 69 6e 64 65 70  ecial case-indep
6880: 65 6e 64 65 6e 74 0a 6b 65 79 77 6f 72 64 73 20  endent.keywords 
6890: 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55  CURRENT_TIME, CU
68a0: 52 52 45 4e 54 5f 44 41 54 45 20 6f 72 20 43 55  RRENT_DATE or CU
68b0: 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2e  RRENT_TIMESTAMP.
68c0: 20 20 5e 49 66 20 74 68 65 20 76 61 6c 75 65 20    ^If the value 
68d0: 69 73 0a 4e 55 4c 4c 2c 20 61 20 73 74 72 69 6e  is.NULL, a strin
68e0: 67 20 63 6f 6e 73 74 61 6e 74 20 6f 72 20 6e 75  g constant or nu
68f0: 6d 62 65 72 2c 20 69 74 20 69 73 20 69 6e 73 65  mber, it is inse
6900: 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 63 6f  rted into the co
6910: 6c 75 6d 6e 0a 77 68 65 6e 65 76 65 72 20 61 6e  lumn.whenever an
6920: 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
6930: 74 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20  t that does not 
6940: 73 70 65 63 69 66 79 20 61 20 76 61 6c 75 65 20  specify a value 
6950: 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69  for the column i
6960: 73 0a 65 78 65 63 75 74 65 64 2e 20 5e 49 66 20  s.executed. ^If 
6970: 74 68 65 20 76 61 6c 75 65 20 69 73 20 43 55 52  the value is CUR
6980: 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45  RENT_TIME, CURRE
6990: 4e 54 5f 44 41 54 45 20 6f 72 20 43 55 52 52 45  NT_DATE or CURRE
69a0: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 74 68  NT_TIMESTAMP, th
69b0: 65 6e 0a 74 68 65 20 63 75 72 72 65 6e 74 20 55  en.the current U
69c0: 54 43 20 64 61 74 65 20 61 6e 64 2f 6f 72 20 74  TC date and/or t
69d0: 69 6d 65 20 69 73 20 69 6e 73 65 72 74 65 64 20  ime is inserted 
69e0: 69 6e 74 6f 20 74 68 65 20 63 6f 6c 75 6d 6e 73  into the columns
69f0: 2e 20 5e 46 6f 72 0a 43 55 52 52 45 4e 54 5f 54  . ^For.CURRENT_T
6a00: 49 4d 45 2c 20 74 68 65 20 66 6f 72 6d 61 74 20  IME, the format 
6a10: 69 73 20 48 48 3a 4d 4d 3a 53 53 2e 20 5e 46 6f  is HH:MM:SS. ^Fo
6a20: 72 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2c 20  r CURRENT_DATE, 
6a30: 59 59 59 59 2d 4d 4d 2d 44 44 2e 0a 5e 54 68 65  YYYY-MM-DD..^The
6a40: 20 66 6f 72 6d 61 74 20 66 6f 72 20 43 55 52 52   format for CURR
6a50: 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20 69 73  ENT_TIMESTAMP is
6a60: 20 22 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a   "YYYY-MM-DD HH:
6a70: 4d 4d 3a 53 53 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70  MM:SS"..</p>..<p
6a80: 3e 5e 28 54 68 65 20 50 52 49 4d 41 52 59 20 4b  >^(The PRIMARY K
6a90: 45 59 20 61 74 74 72 69 62 75 74 65 20 6e 6f 72  EY attribute nor
6aa0: 6d 61 6c 6c 79 20 63 72 65 61 74 65 73 20 61 20  mally creates a 
6ab0: 55 4e 49 51 55 45 20 69 6e 64 65 78 20 6f 6e 0a  UNIQUE index on.
6ac0: 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 63 6f  the column or co
6ad0: 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65 20 73  lumns that are s
6ae0: 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20  pecified as the 
6af0: 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 54 68  PRIMARY KEY.  Th
6b00: 65 20 6f 6e 6c 79 0a 65 78 63 65 70 74 69 6f 6e  e only.exception
6b10: 20 74 6f 20 74 68 69 73 20 62 65 68 61 76 69 6f   to this behavio
6b20: 72 20 69 73 20 73 70 65 63 69 61 6c 20 5b 49 4e  r is special [IN
6b30: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
6b40: 59 5d 20 63 6f 6c 75 6d 6e 2c 0a 64 65 73 63 72  Y] column,.descr
6b50: 69 62 65 64 20 62 65 6c 6f 77 2e 29 5e 0a 5e 28  ibed below.)^.^(
6b60: 41 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65  According to the
6b70: 20 53 51 4c 20 73 74 61 6e 64 61 72 64 2c 20 50   SQL standard, P
6b80: 52 49 4d 41 52 59 20 4b 45 59 20 73 68 6f 75 6c  RIMARY KEY shoul
6b90: 64 20 69 6d 70 6c 79 20 4e 4f 54 20 4e 55 4c 4c  d imply NOT NULL
6ba0: 2e 0a 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c  ..Unfortunately,
6bb0: 20 64 75 65 20 74 6f 20 61 20 6c 6f 6e 67 2d 73   due to a long-s
6bc0: 74 61 6e 64 69 6e 67 20 63 6f 64 69 6e 67 20 6f  tanding coding o
6bd0: 76 65 72 73 69 67 68 74 2c 20 74 68 69 73 20 69  versight, this i
6be0: 73 20 6e 6f 74 20 0a 74 68 65 20 63 61 73 65 20  s not .the case 
6bf0: 69 6e 20 53 51 4c 69 74 65 2e 20 20 53 51 4c 69  in SQLite.  SQLi
6c00: 74 65 20 61 6c 6c 6f 77 73 20 4e 55 4c 4c 20 76  te allows NULL v
6c10: 61 6c 75 65 73 0a 69 6e 20 61 20 50 52 49 4d 41  alues.in a PRIMA
6c20: 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 2e 29 5e  RY KEY column.)^
6c30: 20 20 57 65 20 63 6f 75 6c 64 20 63 68 61 6e 67    We could chang
6c40: 65 20 53 51 4c 69 74 65 20 74 6f 20 63 6f 6e 66  e SQLite to conf
6c50: 6f 72 6d 20 74 6f 20 74 68 65 0a 73 74 61 6e 64  orm to the.stand
6c60: 61 72 64 20 28 61 6e 64 20 77 65 20 6d 69 67 68  ard (and we migh
6c70: 74 20 64 6f 20 73 6f 20 69 6e 20 74 68 65 20 66  t do so in the f
6c80: 75 74 75 72 65 29 2c 20 62 75 74 20 62 79 20 74  uture), but by t
6c90: 68 65 20 74 69 6d 65 20 74 68 65 0a 6f 76 65 72  he time the.over
6ca0: 73 69 67 68 74 20 77 61 73 20 64 69 73 63 6f 76  sight was discov
6cb0: 65 72 65 64 2c 20 53 51 4c 69 74 65 20 77 61 73  ered, SQLite was
6cc0: 20 69 6e 20 73 75 63 68 20 77 69 64 65 20 75 73   in such wide us
6cd0: 65 20 74 68 61 74 20 77 65 20 66 65 61 72 65 64  e that we feared
6ce0: 0a 62 72 65 61 6b 69 6e 67 20 6c 65 67 61 63 79  .breaking legacy
6cf0: 20 63 6f 64 65 20 69 66 20 77 65 20 66 69 78 65   code if we fixe
6d00: 64 20 74 68 65 20 70 72 6f 62 6c 65 6d 2e 20 20  d the problem.  
6d10: 53 6f 20 66 6f 72 20 6e 6f 77 20 77 65 20 68 61  So for now we ha
6d20: 76 65 0a 63 68 6f 73 65 6e 20 74 6f 20 63 6f 6e  ve.chosen to con
6d30: 74 69 6e 75 65 20 61 6c 6c 6f 77 69 6e 67 20 4e  tinue allowing N
6d40: 55 4c 4c 73 20 69 6e 20 50 52 49 4d 41 52 59 20  ULLs in PRIMARY 
6d50: 4b 45 59 20 63 6f 6c 75 6d 6e 73 2e 0a 44 65 76  KEY columns..Dev
6d60: 65 6c 6f 70 65 72 73 20 73 68 6f 75 6c 64 20 62  elopers should b
6d70: 65 20 61 77 61 72 65 2c 20 68 6f 77 65 76 65 72  e aware, however
6d80: 2c 20 74 68 61 74 20 77 65 20 6d 61 79 20 63 68  , that we may ch
6d90: 61 6e 67 65 20 53 51 4c 69 74 65 20 74 6f 0a 63  ange SQLite to.c
6da0: 6f 6e 66 6f 72 6d 20 74 6f 20 74 68 65 20 53 51  onform to the SQ
6db0: 4c 20 73 74 61 6e 64 61 72 64 20 69 6e 20 66 75  L standard in fu
6dc0: 74 75 72 65 20 61 6e 64 20 73 68 6f 75 6c 64 20  ture and should 
6dd0: 64 65 73 69 67 6e 20 6e 65 77 20 70 72 6f 67 72  design new progr
6de0: 61 6d 73 0a 61 63 63 6f 72 64 69 6e 67 6c 79 2e  ams.accordingly.
6df0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 53 51 4c 69 74 65  </p>..<p>^SQLite
6e00: 20 75 73 65 73 20 5b 64 79 6e 61 6d 69 63 20 74   uses [dynamic t
6e10: 79 70 69 6e 67 5d 20 69 6e 73 74 65 61 64 20 6f  yping] instead o
6e20: 66 20 73 74 61 74 69 63 20 74 79 70 69 6e 67 2e  f static typing.
6e30: 20 20 5e 45 78 63 65 70 74 20 66 6f 72 20 74 68    ^Except for th
6e40: 65 0a 73 70 65 63 69 61 6c 20 63 61 73 65 20 6f  e.special case o
6e50: 66 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  f [INTEGER PRIMA
6e60: 52 59 20 4b 45 59 5d 2c 20 53 51 4c 69 74 65 20  RY KEY], SQLite 
6e70: 77 69 6c 6c 20 61 6c 6c 6f 77 20 76 61 6c 75 65  will allow value
6e80: 73 20 6f 66 20 61 6e 79 0a 74 79 70 65 20 74 6f  s of any.type to
6e90: 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 6e   be stored in an
6ea0: 79 20 63 6f 6c 75 6d 6e 20 72 65 67 61 72 64 6c  y column regardl
6eb0: 65 73 73 20 6f 66 20 74 68 65 20 64 65 63 6c 61  ess of the decla
6ec0: 72 65 64 20 64 61 74 61 74 79 70 65 20 6f 66 0a  red datatype of.
6ed0: 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 20 20 5e 54  that column.  ^T
6ee0: 68 65 20 64 65 63 6c 61 72 65 64 20 64 61 74 61  he declared data
6ef0: 74 79 70 65 20 69 73 20 61 20 5b 61 66 66 69 6e  type is a [affin
6f00: 69 74 79 20 7c 20 74 79 70 65 20 61 66 66 69 6e  ity | type affin
6f10: 69 74 79 5d 20 74 68 61 74 0a 53 51 4c 69 74 65  ity] that.SQLite
6f20: 20 61 74 74 65 6d 70 74 73 20 74 6f 20 63 6f 6d   attempts to com
6f30: 70 6c 79 20 77 69 74 68 2c 20 62 75 74 20 74 68  ply with, but th
6f40: 65 20 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c  e operation will
6f50: 20 70 72 6f 63 65 65 64 20 65 76 65 6e 20 69 66   proceed even if
6f60: 0a 63 6f 6d 70 6c 69 61 6e 63 65 20 69 73 20 6e  .compliance is n
6f70: 6f 74 20 70 6f 73 73 69 62 6c 65 2e 3c 2f 70 3e  ot possible.</p>
6f80: 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 22 54 45  ..<p>^If the "TE
6f90: 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41 52  MP" or "TEMPORAR
6fa0: 59 22 20 6b 65 79 77 6f 72 64 20 6f 63 63 75 72  Y" keyword occur
6fb0: 73 20 69 6e 20 62 65 74 77 65 65 6e 20 22 43 52  s in between "CR
6fc0: 45 41 54 45 22 0a 61 6e 64 20 22 54 41 42 4c 45  EATE".and "TABLE
6fd0: 22 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  " then the table
6fe0: 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64   that is created
6ff0: 20 69 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c 65   is only visible
7000: 0a 77 69 74 68 69 6e 20 74 68 61 74 20 73 61 6d  .within that sam
7010: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
7020: 63 74 69 6f 6e 0a 61 6e 64 20 69 73 20 61 75 74  ction.and is aut
7030: 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74  omatically delet
7040: 65 64 20 77 68 65 6e 0a 74 68 65 20 64 61 74 61  ed when.the data
7050: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
7060: 69 73 20 63 6c 6f 73 65 64 2e 20 20 5e 41 6e 79  is closed.  ^Any
7070: 20 69 6e 64 69 63 65 73 20 63 72 65 61 74 65 64   indices created
7080: 20 6f 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20   on a temporary 
7090: 74 61 62 6c 65 0a 61 72 65 20 61 6c 73 6f 20 74  table.are also t
70a0: 65 6d 70 6f 72 61 72 79 2e 20 20 5e 54 65 6d 70  emporary.  ^Temp
70b0: 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64  orary tables and
70c0: 20 69 6e 64 69 63 65 73 20 61 72 65 20 73 74 6f   indices are sto
70d0: 72 65 64 20 69 6e 20 61 0a 73 65 70 61 72 61 74  red in a.separat
70e0: 65 20 66 69 6c 65 20 64 69 73 74 69 6e 63 74 20  e file distinct 
70f0: 66 72 6f 6d 20 74 68 65 20 6d 61 69 6e 20 64 61  from the main da
7100: 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e  tabase file.</p>
7110: 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 26 6c 74 3b  ..<p> ^If a &lt;
7120: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74  database-name&gt
7130: 3b 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  ; is specified, 
7140: 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69  then the table i
7150: 73 20 63 72 65 61 74 65 64 20 69 6e 20 0a 74 68  s created in .th
7160: 65 20 6e 61 6d 65 64 20 64 61 74 61 62 61 73 65  e named database
7170: 2e 20 5e 49 74 20 69 73 20 61 6e 20 65 72 72 6f  . ^It is an erro
7180: 72 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f 74  r to specify bot
7190: 68 20 61 20 26 6c 74 3b 64 61 74 61 62 61 73 65  h a &lt;database
71a0: 2d 6e 61 6d 65 26 67 74 3b 0a 61 6e 64 20 74 68  -name&gt;.and th
71b0: 65 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 2c 20  e TEMP keyword, 
71c0: 75 6e 6c 65 73 73 20 74 68 65 20 26 6c 74 3b 64  unless the &lt;d
71d0: 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b  atabase-name&gt;
71e0: 20 69 73 20 22 74 65 6d 70 22 2e 20 5e 49 66 20   is "temp". ^If 
71f0: 6e 6f 0a 64 61 74 61 62 61 73 65 20 6e 61 6d 65  no.database name
7200: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 6e   is specified an
7210: 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f  d the TEMP keywo
7220: 72 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e  rd is not presen
7230: 74 20 74 68 65 6e 0a 74 68 65 20 74 61 62 6c 65  t then.the table
7240: 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20 74   is created in t
7250: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
7260: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f  .</p>..<p>^The o
7270: 70 74 69 6f 6e 61 6c 20 5b 63 6f 6e 66 6c 69 63  ptional [conflic
7280: 74 20 63 6c 61 75 73 65 5d 20 66 6f 6c 6c 6f 77  t clause] follow
7290: 69 6e 67 20 65 61 63 68 20 63 6f 6e 73 74 72 61  ing each constra
72a0: 69 6e 74 0a 61 6c 6c 6f 77 73 20 74 68 65 20 73  int.allows the s
72b0: 70 65 63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20  pecification of 
72c0: 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20 64  an alternative d
72d0: 65 66 61 75 6c 74 0a 63 6f 6e 73 74 72 61 69 6e  efault.constrain
72e0: 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  t conflict resol
72f0: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
7300: 66 6f 72 20 74 68 61 74 20 63 6f 6e 73 74 72 61  for that constra
7310: 69 6e 74 2e 0a 5e 49 66 20 6e 6f 20 63 6f 6e 66  int..^If no conf
7320: 6c 69 63 74 20 63 6c 61 75 73 65 20 69 73 20 73  lict clause is s
7330: 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 41 42  pecified, the AB
7340: 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ORT algorithm is
7350: 20 75 73 65 64 2e 0a 5e 44 69 66 66 65 72 65 6e   used..^Differen
7360: 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 69  t constraints wi
7370: 74 68 69 6e 20 74 68 65 20 73 61 6d 65 0a 74 61  thin the same.ta
7380: 62 6c 65 20 6d 61 79 20 68 61 76 65 20 64 69 66  ble may have dif
7390: 66 65 72 65 6e 74 20 63 6f 6e 66 6c 69 63 74 20  ferent conflict 
73a0: 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
73b0: 69 74 68 6d 73 2e 0a 5e 49 66 20 61 6e 20 5b 49  ithms..^If an [I
73c0: 4e 53 45 52 54 5d 20 6f 72 20 5b 55 50 44 41 54  NSERT] or [UPDAT
73d0: 45 5d 20 73 74 61 74 65 6d 65 6e 74 20 73 70 65  E] statement spe
73e0: 63 69 66 69 65 73 20 61 20 63 6f 6e 66 6c 69 63  cifies a conflic
73f0: 74 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t.resolution alg
7400: 6f 72 69 74 68 6d 2c 20 74 68 65 6e 20 74 68 65  orithm, then the
7410: 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69   algorithm speci
7420: 66 69 65 64 20 6f 6e 20 74 68 65 20 49 4e 53 45  fied on the INSE
7430: 52 54 20 6f 72 0a 55 50 44 41 54 45 20 73 74 61  RT or.UPDATE sta
7440: 74 65 6d 65 6e 74 20 6f 76 65 72 72 69 64 65 73  tement overrides
7450: 20 74 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 73   the algorithm s
7460: 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 20  pecified in the 
7470: 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74  .CREATE TABLE st
7480: 61 74 65 6d 65 6e 74 2e 0a 53 65 65 20 74 68 65  atement..See the
7490: 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 0a   section titled.
74a0: 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f  [ON CONFLICT] fo
74b0: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
74c0: 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c  ormation.</p>..<
74d0: 70 3e 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  p>CHECK constrai
74e0: 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65  nts are supporte
74f0: 64 20 61 73 20 6f 66 20 5b 76 65 72 73 69 6f 6e  d as of [version
7500: 20 33 2e 33 2e 30 5d 2e 20 20 50 72 69 6f 72 0a   3.3.0].  Prior.
7510: 74 6f 20 76 65 72 73 69 6f 6e 20 33 2e 33 2e 30  to version 3.3.0
7520: 2c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  , CHECK constrai
7530: 6e 74 73 20 77 65 72 65 20 70 61 72 73 65 64 20  nts were parsed 
7540: 62 75 74 20 6e 6f 74 20 65 6e 66 6f 72 63 65 64  but not enforced
7550: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6e  .</p>..<p>^The n
7560: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
7570: 20 69 6e 20 61 20 74 61 62 6c 65 20 69 73 20 6c   in a table is l
7580: 69 6d 69 74 65 64 20 62 79 20 74 68 65 0a 5b 53  imited by the.[S
7590: 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e  QLITE_MAX_COLUMN
75a0: 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 70  ] compile-time p
75b0: 61 72 61 6d 65 74 65 72 2e 0a 5e 41 20 73 69 6e  arameter..^A sin
75c0: 67 6c 65 20 72 6f 77 20 6f 66 20 61 20 74 61 62  gle row of a tab
75d0: 6c 65 20 63 61 6e 6e 6f 74 20 73 74 6f 72 65 20  le cannot store 
75e0: 6d 6f 72 65 20 74 68 61 6e 0a 5b 53 51 4c 49 54  more than.[SQLIT
75f0: 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 5d 20 62 79  E_MAX_LENGTH] by
7600: 74 65 73 20 6f 66 20 64 61 74 61 2e 0a 5e 42 6f  tes of data..^Bo
7610: 74 68 20 6f 66 20 74 68 65 73 65 20 6c 69 6d 69  th of these limi
7620: 74 73 20 63 61 6e 20 62 65 20 6c 6f 77 65 72 65  ts can be lowere
7630: 64 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73 69  d at runtime usi
7640: 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f  ng the.[sqlite3_
7650: 6c 69 6d 69 74 28 29 5d 20 43 2f 43 2b 2b 20 69  limit()] C/C++ i
7660: 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 0a  nterface.</p>...
7670: 3c 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 54  <p>^The CREATE T
7680: 41 42 4c 45 20 41 53 20 66 6f 72 6d 20 64 65 66  ABLE AS form def
7690: 69 6e 65 73 20 74 68 65 20 74 61 62 6c 65 20 74  ines the table t
76a0: 6f 20 62 65 0a 74 68 65 20 72 65 73 75 6c 74 20  o be.the result 
76b0: 73 65 74 20 6f 66 20 61 20 71 75 65 72 79 2e 20  set of a query. 
76c0: 20 5e 54 68 65 20 6e 61 6d 65 73 20 6f 66 20 74   ^The names of t
76d0: 68 65 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73  he table columns
76e0: 20 61 72 65 0a 74 68 65 20 6e 61 6d 65 73 20 6f   are.the names o
76f0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  f the columns in
7700: 20 74 68 65 20 72 65 73 75 6c 74 2e 3c 2f 70 3e   the result.</p>
7710: 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70 74  ..<p>^If the opt
7720: 69 6f 6e 61 6c 20 49 46 20 4e 4f 54 20 45 58 49  ional IF NOT EXI
7730: 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70 72  STS clause is pr
7740: 65 73 65 6e 74 20 61 6e 64 20 61 6e 6f 74 68 65  esent and anothe
7750: 72 20 74 61 62 6c 65 0a 77 69 74 68 20 74 68 65  r table.with the
7760: 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72 65 61   same name alrea
7770: 64 79 20 65 78 69 73 74 73 2c 20 74 68 65 6e 20  dy exists, then 
7780: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 62 65 63  this command bec
7790: 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 3c 2f 70  omes a no-op.</p
77a0: 3e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73 20 61 72  >..<p>^Tables ar
77b0: 65 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20  e removed using 
77c0: 74 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d  the [DROP TABLE]
77d0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 3c 2f 70   statement.  </p
77e0: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
77f0: 65 6e 74 20 72 6f 77 69 64 20 7b 49 4e 54 45 47  ent rowid {INTEG
7800: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 7d 20  ER PRIMARY KEY} 
7810: 52 4f 57 49 44 20 72 6f 77 69 64 3c 2f 74 63 6c  ROWID rowid</tcl
7820: 3e 0a 3c 68 33 3e 52 4f 57 49 44 73 20 61 6e 64  >.<h3>ROWIDs and
7830: 20 74 68 65 20 49 4e 54 45 47 45 52 20 50 52 49   the INTEGER PRI
7840: 4d 41 52 59 20 4b 45 59 3c 2f 68 33 3e 0a 0a 3c  MARY KEY</h3>..<
7850: 70 3e 5e 45 76 65 72 79 20 72 6f 77 20 6f 66 20  p>^Every row of 
7860: 65 76 65 72 79 20 53 51 4c 69 74 65 20 74 61 62  every SQLite tab
7870: 6c 65 20 68 61 73 20 61 20 36 34 2d 62 69 74 20  le has a 64-bit 
7880: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 6b  signed integer k
7890: 65 79 20 0a 74 68 61 74 20 69 73 20 75 6e 69 71  ey .that is uniq
78a0: 75 65 20 77 69 74 68 69 6e 20 74 68 65 20 73 61  ue within the sa
78b0: 6d 65 20 74 61 62 6c 65 2e 0a 54 68 69 73 20 69  me table..This i
78c0: 6e 74 65 67 65 72 20 69 73 20 75 73 75 61 6c 6c  nteger is usuall
78d0: 79 20 63 61 6c 6c 65 64 20 74 68 65 20 22 72 6f  y called the "ro
78e0: 77 69 64 22 2e 20 20 5e 54 68 65 20 72 6f 77 69  wid".  ^The rowi
78f0: 64 20 69 73 20 74 68 65 20 61 63 74 75 61 6c 20  d is the actual 
7900: 6b 65 79 20 75 73 65 64 0a 69 6e 20 74 68 65 20  key used.in the 
7910: 42 2d 54 72 65 65 20 74 68 61 74 20 69 6d 70 6c  B-Tree that impl
7920: 65 6d 65 6e 74 73 20 61 6e 20 53 51 4c 69 74 65  ements an SQLite
7930: 20 74 61 62 6c 65 2e 20 20 5e 52 6f 77 73 20 61   table.  ^Rows a
7940: 72 65 20 73 74 6f 72 65 64 20 69 6e 0a 72 6f 77  re stored in.row
7950: 69 64 20 6f 72 64 65 72 2e 20 5e 54 68 65 0a 72  id order. ^The.r
7960: 6f 77 69 64 20 76 61 6c 75 65 20 63 61 6e 20 62  owid value can b
7970: 65 20 61 63 63 65 73 73 65 64 20 75 73 69 6e 67  e accessed using
7980: 20 6f 6e 65 20 6f 66 20 74 68 65 20 73 70 65 63   one of the spec
7990: 69 61 6c 20 6e 61 6d 65 73 0a 22 3c 62 3e 52 4f  ial names."<b>RO
79a0: 57 49 44 3c 2f 62 3e 22 2c 20 22 3c 62 3e 4f 49  WID</b>", "<b>OI
79b0: 44 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c 62 3e 5f  D</b>", or "<b>_
79c0: 52 4f 57 49 44 5f 3c 2f 62 3e 22 20 61 73 73 75  ROWID_</b>" assu
79d0: 6d 69 6e 67 20 74 68 6f 73 65 20 6e 61 6d 65 73  ming those names
79e0: 0a 61 72 65 20 6e 6f 20 75 73 65 64 20 62 79 20  .are no used by 
79f0: 6f 74 68 65 72 20 63 6f 6e 76 65 6e 74 69 6f 6e  other convention
7a00: 61 6c 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73  al table columns
7a10: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 49 66 20 61  .</p>..<p>.^If a
7a20: 20 63 6f 6c 75 6d 6e 20 69 73 20 64 65 63 6c 61   column is decla
7a30: 72 65 64 20 74 6f 20 62 65 20 61 6e 20 49 4e 54  red to be an INT
7a40: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
7a50: 2c 20 74 68 65 6e 20 74 68 61 74 20 63 6f 6c 75  , then that colu
7a60: 6d 6e 20 69 73 20 6e 6f 74 0a 61 20 22 72 65 61  mn is not.a "rea
7a70: 6c 22 20 64 61 74 61 62 61 73 65 20 63 6f 6c 75  l" database colu
7a80: 6d 6e 20 62 75 74 20 69 6e 73 74 65 61 64 20 62  mn but instead b
7a90: 65 63 6f 6d 65 73 0a 61 6e 20 61 6c 69 61 73 20  ecomes.an alias 
7aa0: 66 6f 72 20 74 68 65 20 72 6f 77 69 64 2e 20 20  for the rowid.  
7ab0: 5e 55 6e 6c 69 6b 65 20 6e 6f 72 6d 61 6c 20 53  ^Unlike normal S
7ac0: 51 4c 69 74 65 20 63 6f 6c 75 6d 6e 73 2c 20 74  QLite columns, t
7ad0: 68 65 20 72 6f 77 69 64 0a 6d 75 73 74 20 62 65  he rowid.must be
7ae0: 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 74 65   a non-NULL inte
7af0: 67 65 72 20 76 61 6c 75 65 2e 20 20 5e 54 68 65  ger value.  ^The
7b00: 20 72 6f 77 69 64 20 69 73 20 6e 6f 74 20 61 62   rowid is not ab
7b10: 6c 65 20 74 6f 20 68 6f 6c 64 0a 66 6c 6f 61 74  le to hold.float
7b20: 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 73  ing point values
7b30: 2c 20 73 74 72 69 6e 67 73 2c 20 42 4c 4f 42 73  , strings, BLOBs
7b40: 2c 20 6f 72 20 4e 55 4c 4c 73 2e 3c 2f 70 3e 0a  , or NULLs.</p>.
7b50: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 69 3e  .<blockquote><i>
7b60: 0a 5e 41 6e 20 49 4e 54 45 47 45 52 20 50 52 49  .^An INTEGER PRI
7b70: 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 20  MARY KEY column 
7b80: 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  is an alias for 
7b90: 74 68 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65  the 64-bit signe
7ba0: 64 20 69 6e 74 65 67 65 72 20 72 6f 77 69 64 2e  d integer rowid.
7bb0: 0a 3c 2f 69 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  .</i></blockquot
7bc0: 65 3e 0a 0a 3c 70 3e 5e 41 6e 20 49 4e 54 45 47  e>..<p>^An INTEG
7bd0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  ER PRIMARY KEY c
7be0: 6f 6c 75 6d 6e 20 63 61 6e 20 61 6c 73 6f 20 69  olumn can also i
7bf0: 6e 63 6c 75 64 65 20 74 68 65 0a 6b 65 79 77 6f  nclude the.keywo
7c00: 72 64 20 5b 41 55 54 4f 49 4e 43 52 45 4d 45 4e  rd [AUTOINCREMEN
7c10: 54 5d 2e 20 20 5e 54 68 65 20 5b 41 55 54 4f 49  T].  ^The [AUTOI
7c20: 4e 43 52 45 4d 45 4e 54 5d 20 6b 65 79 77 6f 72  NCREMENT] keywor
7c30: 64 20 6d 6f 64 69 66 69 65 64 20 74 68 65 20 77  d modified the w
7c40: 61 79 0a 74 68 61 74 20 42 2d 54 72 65 65 20 6b  ay.that B-Tree k
7c50: 65 79 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69  eys are automati
7c60: 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 64 2e  cally generated.
7c70: 20 20 41 64 64 69 74 69 6f 6e 61 6c 20 64 65 74    Additional det
7c80: 61 69 6c 0a 6f 6e 20 61 75 74 6f 6d 61 74 69 63  ail.on automatic
7c90: 20 42 2d 54 72 65 65 20 6b 65 79 20 67 65 6e 65   B-Tree key gene
7ca0: 72 61 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61  ration is availa
7cb0: 62 6c 65 0a 3c 61 20 68 72 65 66 3d 22 61 75 74  ble.<a href="aut
7cc0: 6f 69 6e 63 2e 68 74 6d 6c 22 3e 73 65 70 61 72  oinc.html">separ
7cd0: 61 74 65 6c 79 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a  ately</a>.</p>..
7ce0: 3c 70 3e 5e 54 68 65 20 73 70 65 63 69 61 6c 20  <p>^The special 
7cf0: 62 65 68 61 76 69 6f 72 20 6f 66 20 49 4e 54 45  behavior of INTE
7d00: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 0a  GER PRIMARY KEY.
7d10: 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c  is only availabl
7d20: 65 20 69 66 20 74 68 65 20 74 79 70 65 20 6e 61  e if the type na
7d30: 6d 65 20 69 73 20 65 78 61 63 74 6c 79 20 22 49  me is exactly "I
7d40: 4e 54 45 47 45 52 22 20 69 6e 20 61 6e 79 20 6d  NTEGER" in any m
7d50: 69 78 74 75 72 65 0a 6f 66 20 75 70 70 65 72 20  ixture.of upper 
7d60: 61 6e 64 20 6c 6f 77 65 72 20 63 61 73 65 2e 20  and lower case. 
7d70: 20 5e 4f 74 68 65 72 20 69 6e 74 65 67 65 72 20   ^Other integer 
7d80: 74 79 70 65 20 6e 61 6d 65 73 0a 6c 69 6b 65 20  type names.like 
7d90: 22 49 4e 54 22 20 6f 72 20 22 42 49 47 49 4e 54  "INT" or "BIGINT
7da0: 22 20 6f 72 20 22 53 48 4f 52 54 20 49 4e 54 45  " or "SHORT INTE
7db0: 47 45 52 22 20 6f 72 20 22 55 4e 53 49 47 4e 45  GER" or "UNSIGNE
7dc0: 44 20 49 4e 54 45 47 45 52 22 0a 63 61 75 73 65  D INTEGER".cause
7dd0: 73 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  s the primary ke
7de0: 79 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 68 61  y column to beha
7df0: 76 65 20 61 73 20 61 6e 20 6f 72 64 69 6e 61 72  ve as an ordinar
7e00: 79 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 77  y table column w
7e10: 69 74 68 0a 69 6e 74 65 67 65 72 20 5b 61 66 66  ith.integer [aff
7e20: 69 6e 69 74 79 5d 20 61 6e 64 20 61 20 75 6e 69  inity] and a uni
7e30: 71 75 65 20 69 6e 64 65 78 2c 20 6e 6f 74 20 61  que index, not a
7e40: 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
7e50: 68 65 20 72 6f 77 69 64 2e 0a 5e 28 54 68 65 20  he rowid..^(The 
7e60: 73 70 65 63 69 61 6c 20 62 65 68 61 76 69 6f 72  special behavior
7e70: 20 6f 66 20 49 4e 54 45 47 45 52 20 50 52 49 4d   of INTEGER PRIM
7e80: 41 52 59 20 4b 45 59 20 69 73 20 6f 6e 6c 79 20  ARY KEY is only 
7e90: 61 76 61 69 6c 61 62 6c 65 20 69 66 20 74 68 65  available if the
7ea0: 0a 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20  .primary key is 
7eb0: 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
7ec0: 20 20 4d 75 6c 74 69 2d 63 6f 6c 75 6d 6e 20 70    Multi-column p
7ed0: 72 69 6d 61 72 79 20 6b 65 79 73 20 64 6f 20 6e  rimary keys do n
7ee0: 6f 74 20 62 65 63 6f 6d 65 0a 61 6c 69 61 73 65  ot become.aliase
7ef0: 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 2e  s for the rowid.
7f00: 29 5e 0a 5e 54 68 65 20 41 55 54 4f 49 4e 43 52  )^.^The AUTOINCR
7f10: 45 4d 45 4e 54 20 6b 65 79 77 6f 72 64 20 6f 6e  EMENT keyword on
7f20: 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 61 20 63 6f  ly works on a co
7f30: 6c 75 6d 6e 20 74 68 61 74 20 69 73 20 61 6e 20  lumn that is an 
7f40: 61 6c 69 61 73 0a 66 6f 72 20 74 68 65 20 72 6f  alias.for the ro
7f50: 77 69 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e 6f 74  wid.</p>..<p>Not
7f60: 65 20 74 68 61 74 20 73 65 61 72 63 68 65 73 20  e that searches 
7f70: 61 67 61 69 6e 73 74 20 61 20 72 6f 77 69 64 20  against a rowid 
7f80: 61 72 65 20 67 65 6e 65 72 61 6c 6c 79 20 61 62  are generally ab
7f90: 6f 75 74 20 74 77 69 63 65 20 61 73 0a 66 61 73  out twice as.fas
7fa0: 74 20 61 73 20 73 65 61 72 63 68 65 73 20 61 67  t as searches ag
7fb0: 61 69 6e 73 74 20 61 6e 79 20 6f 74 68 65 72 20  ainst any other 
7fc0: 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 69  PRIMARY KEY or i
7fd0: 6e 64 65 78 65 64 20 76 61 6c 75 65 2e 0a 3c 2f  ndexed value..</
7fe0: 70 3e 0a 0a 3c 70 3e 3c 62 3e 47 6f 6f 66 79 20  p>..<p><b>Goofy 
7ff0: 62 65 68 61 76 69 6f 72 20 61 6c 65 72 74 3a 3c  behavior alert:<
8000: 2f 62 3e 20 20 5e 28 54 68 65 20 66 6f 6c 6c 6f  /b>  ^(The follo
8010: 77 69 6e 67 20 74 68 72 65 65 20 64 65 63 6c 61  wing three decla
8020: 72 61 74 69 6f 6e 73 20 61 6c 6c 20 63 61 75 73  rations all caus
8030: 65 0a 74 68 65 20 63 6f 6c 75 6d 6e 20 22 78 22  e.the column "x"
8040: 20 62 65 20 61 6e 20 61 6c 69 61 73 20 66 6f 72   be an alias for
8050: 20 74 68 65 20 72 6f 77 69 64 3a 3c 2f 70 3e 0a   the rowid:</p>.
8060: 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52  .<ul>.<li><tt>CR
8070: 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49  EATE TABLE t(x I
8080: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
8090: 45 59 20 41 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f  EY ASC, y, z);</
80a0: 74 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41  tt>.<li><tt>CREA
80b0: 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54  TE TABLE t(x INT
80c0: 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d  EGER, y, z, PRIM
80d0: 41 52 59 20 4b 45 59 28 78 20 41 53 43 29 29 3b  ARY KEY(x ASC));
80e0: 3c 2f 74 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52  </tt>.<li><tt>CR
80f0: 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49  EATE TABLE t(x I
8100: 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52  NTEGER, y, z, PR
8110: 49 4d 41 52 59 20 4b 45 59 28 78 20 44 45 53 43  IMARY KEY(x DESC
8120: 29 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e  ));</tt>.</ul>)^
8130: 0a 0a 3c 70 3e 42 75 74 2c 20 69 6e 20 63 6f 6e  ..<p>But, in con
8140: 74 72 61 73 74 2c 20 5e 28 74 68 65 20 66 6f 6c  trast, ^(the fol
8150: 6c 6f 77 69 6e 67 20 64 65 63 6c 61 72 61 74 69  lowing declarati
8160: 6f 6e 20 64 6f 65 73 20 3c 75 3e 6e 6f 74 3c 2f  on does <u>not</
8170: 75 3e 20 72 65 73 75 6c 74 20 69 6e 0a 22 78 22  u> result in."x"
8180: 20 62 65 69 6e 67 20 61 6e 20 61 6c 69 61 73 20   being an alias 
8190: 66 6f 72 20 74 68 65 20 72 6f 77 69 64 3a 3c 2f  for the rowid:</
81a0: 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74  p>..<ul>.<li><tt
81b0: 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 28  >CREATE TABLE t(
81c0: 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  x INTEGER PRIMAR
81d0: 59 20 4b 45 59 20 44 45 53 43 2c 20 79 2c 20 7a  Y KEY DESC, y, z
81e0: 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a  );</tt>.</ul>)^.
81f0: 0a 3c 70 3e 54 68 69 73 20 61 73 79 6d 6d 65 74  .<p>This asymmet
8200: 72 69 63 61 6c 20 62 65 68 61 76 69 6f 72 20 69  rical behavior i
8210: 73 20 75 6e 66 6f 72 74 75 6e 61 74 65 20 61 6e  s unfortunate an
8220: 64 20 69 73 20 72 65 61 6c 6c 79 20 64 75 65 20  d is really due 
8230: 74 6f 20 61 20 62 75 67 0a 69 6e 20 74 68 65 20  to a bug.in the 
8240: 70 61 72 73 65 72 20 69 6e 20 65 61 72 6c 79 20  parser in early 
8250: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
8260: 74 65 2e 20 20 42 75 74 20 66 69 78 69 6e 67 20  te.  But fixing 
8270: 74 68 65 20 62 75 67 20 77 6f 75 6c 64 0a 72 65  the bug would.re
8280: 73 75 6c 74 20 69 6e 20 76 65 72 79 20 73 65 72  sult in very ser
8290: 69 6f 75 73 20 62 61 63 6b 77 61 72 64 73 20 69  ious backwards i
82a0: 6e 63 6f 6d 70 61 74 69 62 69 6c 69 74 69 65 73  ncompatibilities
82b0: 2e 20 20 54 68 65 20 53 51 4c 69 74 65 20 64 65  .  The SQLite de
82c0: 76 65 6c 6f 70 65 72 73 0a 66 65 65 6c 20 74 68  velopers.feel th
82d0: 61 74 20 67 6f 6f 66 79 20 62 65 68 61 76 69 6f  at goofy behavio
82e0: 72 20 69 6e 20 61 6e 20 63 6f 72 6e 65 72 20 63  r in an corner c
82f0: 61 73 65 20 69 73 20 66 61 72 20 62 65 74 74 65  ase is far bette
8300: 72 20 74 68 61 6e 0a 61 20 63 6f 6d 70 61 74 69  r than.a compati
8310: 62 69 6c 69 74 79 20 62 72 65 61 6b 2c 20 73 6f  bility break, so
8320: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 62 65   the original be
8330: 68 61 76 69 6f 72 20 69 73 20 72 65 74 61 69 6e  havior is retain
8340: 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  ed.</p>..<tcl>.#
8350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8370: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8380: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8390: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
83a0: 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 52  ction {CREATE TR
83b0: 49 47 47 45 52 7d 20 63 72 65 61 74 65 74 72 69  IGGER} createtri
83c0: 67 67 65 72 20 7b 7b 43 52 45 41 54 45 20 54 52  gger {{CREATE TR
83d0: 49 47 47 45 52 7d 7d 0a 0a 42 75 62 62 6c 65 44  IGGER}}..BubbleD
83e0: 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d 74 72  iagram create-tr
83f0: 69 67 67 65 72 2d 73 74 6d 74 20 31 0a 3c 2f 74  igger-stmt 1.</t
8400: 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45  cl>..<p>^The CRE
8410: 41 54 45 20 54 52 49 47 47 45 52 20 73 74 61 74  ATE TRIGGER stat
8420: 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f  ement is used to
8430: 20 61 64 64 20 74 72 69 67 67 65 72 73 20 74 6f   add triggers to
8440: 20 74 68 65 20 0a 64 61 74 61 62 61 73 65 20 73   the .database s
8450: 63 68 65 6d 61 2e 20 5e 54 72 69 67 67 65 72 73  chema. ^Triggers
8460: 20 61 72 65 20 64 61 74 61 62 61 73 65 20 6f 70   are database op
8470: 65 72 61 74 69 6f 6e 73 20 0a 74 68 61 74 20 61  erations .that a
8480: 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  re automatically
8490: 20 70 65 72 66 6f 72 6d 65 64 20 77 68 65 6e 20   performed when 
84a0: 61 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61  a specified data
84b0: 62 61 73 65 20 65 76 65 6e 74 0a 6f 63 63 75 72  base event.occur
84c0: 73 2e 20 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20  s.  </p>..<p>^A 
84d0: 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 73  trigger may be s
84e0: 70 65 63 69 66 69 65 64 20 74 6f 20 66 69 72 65  pecified to fire
84f0: 20 77 68 65 6e 65 76 65 72 20 61 20 5b 44 45 4c   whenever a [DEL
8500: 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 0a  ETE], [INSERT],.
8510: 6f 72 20 5b 55 50 44 41 54 45 5d 20 6f 66 20 61  or [UPDATE] of a
8520: 0a 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61  .particular data
8530: 62 61 73 65 20 74 61 62 6c 65 20 6f 63 63 75 72  base table occur
8540: 73 2c 20 6f 72 20 77 68 65 6e 65 76 65 72 20 61  s, or whenever a
8550: 6e 20 5b 55 50 44 41 54 45 5d 20 6f 63 63 75 72  n [UPDATE] occur
8560: 73 20 6f 6e 0a 6f 6e 20 6f 6e 65 20 6f 72 20 6d  s on.on one or m
8570: 6f 72 65 20 73 70 65 63 69 66 69 65 64 20 63 6f  ore specified co
8580: 6c 75 6d 6e 73 20 6f 66 20 61 20 74 61 62 6c 65  lumns of a table
8590: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 74 20 74 68  .</p>..<p>^At th
85a0: 69 73 20 74 69 6d 65 20 53 51 4c 69 74 65 20 73  is time SQLite s
85b0: 75 70 70 6f 72 74 73 20 6f 6e 6c 79 20 46 4f 52  upports only FOR
85c0: 20 45 41 43 48 20 52 4f 57 20 74 72 69 67 67 65   EACH ROW trigge
85d0: 72 73 2c 20 6e 6f 74 20 46 4f 52 20 45 41 43 48  rs, not FOR EACH
85e0: 0a 53 54 41 54 45 4d 45 4e 54 20 74 72 69 67 67  .STATEMENT trigg
85f0: 65 72 73 2e 20 5e 48 65 6e 63 65 20 65 78 70 6c  ers. ^Hence expl
8600: 69 63 69 74 6c 79 20 73 70 65 63 69 66 79 69 6e  icitly specifyin
8610: 67 20 46 4f 52 20 45 41 43 48 20 52 4f 57 20 69  g FOR EACH ROW i
8620: 73 20 6f 70 74 69 6f 6e 61 6c 2e 0a 5e 46 4f 52  s optional..^FOR
8630: 20 45 41 43 48 20 52 4f 57 20 69 6d 70 6c 69 65   EACH ROW implie
8640: 73 20 74 68 61 74 20 74 68 65 20 53 51 4c 20 73  s that the SQL s
8650: 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66  tatements specif
8660: 69 65 64 20 69 6e 20 74 68 65 20 74 72 69 67 67  ied in the trigg
8670: 65 72 0a 6d 61 79 20 62 65 20 65 78 65 63 75 74  er.may be execut
8680: 65 64 20 28 64 65 70 65 6e 64 69 6e 67 20 6f 6e  ed (depending on
8690: 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   the WHEN clause
86a0: 29 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62  ) for each datab
86b0: 61 73 65 20 72 6f 77 20 62 65 69 6e 67 0a 69 6e  ase row being.in
86c0: 73 65 72 74 65 64 2c 20 75 70 64 61 74 65 64 20  serted, updated 
86d0: 6f 72 20 64 65 6c 65 74 65 64 20 62 79 20 74 68  or deleted by th
86e0: 65 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73  e statement caus
86f0: 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
8700: 74 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70  to fire.</p>..<p
8710: 3e 5e 28 42 6f 74 68 20 74 68 65 20 57 48 45 4e  >^(Both the WHEN
8720: 20 63 6c 61 75 73 65 20 61 6e 64 20 74 68 65 20   clause and the 
8730: 74 72 69 67 67 65 72 20 61 63 74 69 6f 6e 73 20  trigger actions 
8740: 6d 61 79 20 61 63 63 65 73 73 20 65 6c 65 6d 65  may access eleme
8750: 6e 74 73 20 6f 66 20 0a 74 68 65 20 72 6f 77 20  nts of .the row 
8760: 62 65 69 6e 67 20 69 6e 73 65 72 74 65 64 2c 20  being inserted, 
8770: 64 65 6c 65 74 65 64 20 6f 72 20 75 70 64 61 74  deleted or updat
8780: 65 64 20 75 73 69 6e 67 20 72 65 66 65 72 65 6e  ed using referen
8790: 63 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ces of the form 
87a0: 0a 22 4e 45 57 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d  ."NEW.<i>column-
87b0: 6e 61 6d 65 3c 2f 69 3e 22 20 61 6e 64 20 22 4f  name</i>" and "O
87c0: 4c 44 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d  LD.<i>column-nam
87d0: 65 3c 2f 69 3e 22 2c 20 77 68 65 72 65 0a 3c 69  e</i>", where.<i
87e0: 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e  >column-name</i>
87f0: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
8800: 61 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68  a column from th
8810: 65 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  e table that the
8820: 20 74 72 69 67 67 65 72 0a 69 73 20 61 73 73 6f   trigger.is asso
8830: 63 69 61 74 65 64 20 77 69 74 68 2e 29 5e 20 5e  ciated with.)^ ^
8840: 28 4f 4c 44 20 61 6e 64 20 4e 45 57 20 72 65 66  (OLD and NEW ref
8850: 65 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79  erences may only
8860: 20 62 65 20 75 73 65 64 20 69 6e 20 74 72 69 67   be used in trig
8870: 67 65 72 73 20 6f 6e 0a 65 76 65 6e 74 73 20 66  gers on.events f
8880: 6f 72 20 77 68 69 63 68 20 74 68 65 79 20 61 72  or which they ar
8890: 65 20 72 65 6c 65 76 61 6e 74 2c 20 61 73 20 66  e relevant, as f
88a0: 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 61  ollows:</p>..<ta
88b0: 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c  ble border=0 cel
88c0: 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 72  lpadding=10>.<tr
88d0: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
88e0: 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
88f0: 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 49 4e   width=120><i>IN
8900: 53 45 52 54 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74  SERT</i></td>.<t
8910: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e  d valign="top">N
8920: 45 57 20 72 65 66 65 72 65 6e 63 65 73 20 61 72  EW references ar
8930: 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74  e valid</td>.</t
8940: 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69  r>.<tr>.<td vali
8950: 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
8960: 72 69 67 68 74 22 20 77 69 64 74 68 3d 31 32 30  right" width=120
8970: 3e 3c 69 3e 55 50 44 41 54 45 3c 2f 69 3e 3c 2f  ><i>UPDATE</i></
8980: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
8990: 74 6f 70 22 3e 4e 45 57 20 61 6e 64 20 4f 4c 44  top">NEW and OLD
89a0: 20 72 65 66 65 72 65 6e 63 65 73 20 61 72 65 20   references are 
89b0: 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  valid</td>.</tr>
89c0: 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
89d0: 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69  ="top" align="ri
89e0: 67 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c  ght" width=120><
89f0: 69 3e 44 45 4c 45 54 45 3c 2f 69 3e 3c 2f 74 64  i>DELETE</i></td
8a00: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
8a10: 70 22 3e 4f 4c 44 20 72 65 66 65 72 65 6e 63 65  p">OLD reference
8a20: 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e  s are valid</td>
8a30: 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a  .</tr>.</table>.
8a40: 3c 2f 70 3e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 61  </p>)^..<p>^If a
8a50: 20 57 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20   WHEN clause is 
8a60: 73 75 70 70 6c 69 65 64 2c 20 74 68 65 20 53 51  supplied, the SQ
8a70: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65  L statements spe
8a80: 63 69 66 69 65 64 0a 61 72 65 20 6f 6e 6c 79 20  cified.are only 
8a90: 65 78 65 63 75 74 65 64 20 66 6f 72 20 72 6f 77  executed for row
8aa0: 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20  s for which the 
8ab0: 57 48 45 4e 0a 63 6c 61 75 73 65 20 69 73 20 74  WHEN.clause is t
8ac0: 72 75 65 2e 20 5e 49 66 20 6e 6f 20 57 48 45 4e  rue. ^If no WHEN
8ad0: 20 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c   clause is suppl
8ae0: 69 65 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61  ied, the SQL sta
8af0: 74 65 6d 65 6e 74 73 0a 61 72 65 20 65 78 65 63  tements.are exec
8b00: 75 74 65 64 20 66 6f 72 20 61 6c 6c 20 72 6f 77  uted for all row
8b10: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  s.</p>..<p>^The 
8b20: 42 45 46 4f 52 45 20 6f 72 20 41 46 54 45 52 20  BEFORE or AFTER 
8b30: 6b 65 79 77 6f 72 64 20 64 65 74 65 72 6d 69 6e  keyword determin
8b40: 65 73 20 77 68 65 6e 20 74 68 65 20 74 72 69 67  es when the trig
8b50: 67 65 72 20 61 63 74 69 6f 6e 73 0a 77 69 6c 6c  ger actions.will
8b60: 20 62 65 20 65 78 65 63 75 74 65 64 20 72 65 6c   be executed rel
8b70: 61 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e 73  ative to the ins
8b80: 65 72 74 69 6f 6e 2c 20 6d 6f 64 69 66 69 63 61  ertion, modifica
8b90: 74 69 6f 6e 20 6f 72 20 72 65 6d 6f 76 61 6c 20  tion or removal 
8ba0: 6f 66 20 74 68 65 0a 61 73 73 6f 63 69 61 74 65  of the.associate
8bb0: 64 20 72 6f 77 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  d row.</p>..<p>^
8bc0: 41 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d  An [ON CONFLICT]
8bd0: 20 63 6c 61 75 73 65 20 6d 61 79 20 62 65 20 73   clause may be s
8be0: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
8bf0: 20 6f 66 20 61 6e 20 5b 55 50 44 41 54 45 5d 20   of an [UPDATE] 
8c00: 6f 72 20 5b 49 4e 53 45 52 54 5d 0a 61 63 74 69  or [INSERT].acti
8c10: 6f 6e 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f  on within the bo
8c20: 64 79 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  dy of the trigge
8c30: 72 2e 0a 5e 48 6f 77 65 76 65 72 20 69 66 20 61  r..^However if a
8c40: 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20  n [ON CONFLICT] 
8c50: 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66  clause is specif
8c60: 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 0a  ied as part of .
8c70: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 61  the statement ca
8c80: 75 73 69 6e 67 20 74 68 65 20 74 72 69 67 67 65  using the trigge
8c90: 72 20 74 6f 20 66 69 72 65 2c 20 74 68 65 6e 20  r to fire, then 
8ca0: 63 6f 6e 66 6c 69 63 74 20 68 61 6e 64 6c 69 6e  conflict handlin
8cb0: 67 0a 70 6f 6c 69 63 79 20 6f 66 20 74 68 65 20  g.policy of the 
8cc0: 6f 75 74 65 72 20 73 74 61 74 65 6d 65 6e 74 20  outer statement 
8cd0: 69 73 20 75 73 65 64 20 69 6e 73 74 65 61 64 2e  is used instead.
8ce0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65  </p>..<p>^Trigge
8cf0: 72 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  rs are automatic
8d00: 61 6c 6c 79 20 5b 44 52 4f 50 20 54 52 49 47 47  ally [DROP TRIGG
8d10: 45 52 20 7c 20 64 72 6f 70 70 65 64 5d 0a 77 68  ER | dropped].wh
8d20: 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  en the table tha
8d30: 74 20 74 68 65 79 20 61 72 65 20 0a 61 73 73 6f  t they are .asso
8d40: 63 69 61 74 65 64 20 77 69 74 68 20 28 74 68 65  ciated with (the
8d50: 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f   <i>table-name</
8d60: 69 3e 20 74 61 62 6c 65 29 20 69 73 20 0a 5b 44  i> table) is .[D
8d70: 52 4f 50 20 54 41 42 4c 45 20 7c 20 64 72 6f 70  ROP TABLE | drop
8d80: 70 65 64 5d 2e 20 20 5e 48 6f 77 65 76 65 72 20  ped].  ^However 
8d90: 69 66 20 74 68 65 20 74 72 69 67 67 65 72 20 61  if the trigger a
8da0: 63 74 69 6f 6e 73 20 72 65 66 65 72 65 6e 63 65  ctions reference
8db0: 0a 6f 74 68 65 72 20 74 61 62 6c 65 73 2c 20 74  .other tables, t
8dc0: 68 65 20 74 72 69 67 67 65 72 20 69 73 20 6e 6f  he trigger is no
8dd0: 74 20 64 72 6f 70 70 65 64 20 6f 72 20 6d 6f 64  t dropped or mod
8de0: 69 66 69 65 64 20 69 66 20 74 68 6f 73 65 20 6f  ified if those o
8df0: 74 68 65 72 0a 74 61 62 6c 65 73 20 61 72 65 20  ther.tables are 
8e00: 5b 44 52 4f 50 20 54 41 42 4c 45 20 7c 20 64 72  [DROP TABLE | dr
8e10: 6f 70 70 65 64 5d 20 6f 72 20 5b 41 4c 54 45 52  opped] or [ALTER
8e20: 20 54 41 42 4c 45 20 7c 20 6d 6f 64 69 66 69 65   TABLE | modifie
8e30: 64 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69  d].</p>..<p>^Tri
8e40: 67 67 65 72 73 20 61 72 65 20 72 65 6d 6f 76 65  ggers are remove
8e50: 64 20 75 73 69 6e 67 20 74 68 65 20 5b 44 52 4f  d using the [DRO
8e60: 50 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65  P TRIGGER] state
8e70: 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53  ment.</p>..<h3>S
8e80: 79 6e 74 61 78 20 52 65 73 74 72 69 63 74 69 6f  yntax Restrictio
8e90: 6e 73 20 4f 6e 20 55 50 44 41 54 45 2c 20 44 45  ns On UPDATE, DE
8ea0: 4c 45 54 45 2c 20 61 6e 64 20 49 4e 53 45 52 54  LETE, and INSERT
8eb0: 20 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68   Statements With
8ec0: 69 6e 0a 20 20 20 20 54 72 69 67 67 65 72 73 3c  in.    Triggers<
8ed0: 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 55  /h3>..<p>^The [U
8ee0: 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d  PDATE], [DELETE]
8ef0: 2c 20 61 6e 64 20 5b 49 4e 53 45 52 54 5d 0a 73  , and [INSERT].s
8f00: 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
8f10: 20 74 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74   triggers do not
8f20: 20 73 75 70 70 6f 72 74 0a 74 68 65 20 66 75 6c   support.the ful
8f30: 6c 20 73 79 6e 74 61 78 20 66 6f 72 20 5b 55 50  l syntax for [UP
8f40: 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c  DATE], [DELETE],
8f50: 20 61 6e 64 20 5b 49 4e 53 45 52 54 5d 20 73 74   and [INSERT] st
8f60: 61 74 65 6d 65 6e 74 73 2e 20 20 54 68 65 20 66  atements.  The f
8f70: 6f 6c 6c 6f 77 69 6e 67 0a 72 65 73 74 72 69 63  ollowing.restric
8f80: 74 69 6f 6e 73 20 61 70 70 6c 79 3a 3c 2f 70 3e  tions apply:</p>
8f90: 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20  ..<ul>.<li><p>. 
8fa0: 20 5e 28 54 68 65 20 6e 61 6d 65 20 6f 66 20 74   ^(The name of t
8fb0: 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 6d  he table to be m
8fc0: 6f 64 69 66 69 65 64 20 69 6e 20 61 6e 20 5b 55  odified in an [U
8fd0: 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d  PDATE], [DELETE]
8fe0: 2c 20 6f 72 20 5b 49 4e 53 45 52 54 5d 0a 20 20  , or [INSERT].  
8ff0: 73 74 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 62  statement must b
9000: 65 20 61 6e 20 75 6e 71 75 61 6c 69 66 69 65 64  e an unqualified
9010: 20 74 61 62 6c 65 20 6e 61 6d 65 2e 20 20 49 6e   table name.  In
9020: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 6f 6e   other words, on
9030: 65 20 6d 75 73 74 0a 20 20 75 73 65 20 6a 75 73  e must.  use jus
9040: 74 20 22 3c 69 3e 74 61 62 6c 65 6e 61 6d 65 3c  t "<i>tablename<
9050: 2f 69 3e 22 20 6e 6f 74 20 22 3c 69 3e 64 61 74  /i>" not "<i>dat
9060: 61 62 61 73 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62  abase</i><b>.</b
9070: 3e 3c 69 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f 69  ><i>tablename</i
9080: 3e 22 0a 20 20 77 68 65 6e 20 73 70 65 63 69 66  >".  when specif
9090: 79 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2e 29  ying the table.)
90a0: 5e 20 20 5e 54 68 65 20 74 61 62 6c 65 20 74 6f  ^  ^The table to
90b0: 20 62 65 20 6d 6f 64 69 66 69 65 64 20 6d 75 73   be modified mus
90c0: 74 20 65 78 69 73 74 20 69 6e 20 74 68 65 0a 20  t exist in the. 
90d0: 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61   same database a
90e0: 73 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76  s the table or v
90f0: 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65  iew to which the
9100: 20 74 72 69 67 67 65 72 20 69 73 20 61 74 74 61   trigger is atta
9110: 63 68 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69  ched..  </p></li
9120: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68  >..<li><p>.  ^Th
9130: 65 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 3c  e "INSERT INTO <
9140: 69 3e 74 61 62 6c 65 3c 2f 69 3e 20 44 45 46 41  i>table</i> DEFA
9150: 55 4c 54 20 56 41 4c 55 45 53 22 20 66 6f 72 6d  ULT VALUES" form
9160: 20 6f 66 20 74 68 65 20 5b 49 4e 53 45 52 54 5d   of the [INSERT]
9170: 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 69 73 20   statement.  is 
9180: 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 2e 0a 20  not supported.. 
9190: 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e   </p></li>..<li>
91a0: 3c 70 3e 0a 20 20 5e 54 68 65 20 49 4e 44 45 58  <p>.  ^The INDEX
91b0: 45 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e  ED BY and NOT IN
91c0: 44 45 58 45 44 20 63 6c 61 75 73 65 73 20 61 72  DEXED clauses ar
91d0: 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20  e not supported 
91e0: 66 6f 72 20 5b 55 50 44 41 54 45 5d 20 61 6e 64  for [UPDATE] and
91f0: 0a 20 20 5b 44 45 4c 45 54 45 5d 20 73 74 61 74  .  [DELETE] stat
9200: 65 6d 65 6e 74 73 2e 0a 20 20 3c 2f 70 3e 3c 2f  ements..  </p></
9210: 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e  li>..<li><p>.  ^
9220: 28 54 68 65 20 4f 52 44 45 52 20 42 59 20 61 6e  (The ORDER BY an
9230: 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 20  d LIMIT clauses 
9240: 6f 6e 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20  on [UPDATE] and 
9250: 5b 44 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65  [DELETE] stateme
9260: 6e 74 73 20 61 72 65 20 6e 6f 74 0a 20 20 73 75  nts are not.  su
9270: 70 70 6f 72 74 65 64 2e 20 20 4f 52 44 45 52 20  pported.  ORDER 
9280: 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 61 72 65  BY and LIMIT are
9290: 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 73 75   not normally su
92a0: 70 70 6f 72 74 65 64 20 66 6f 72 20 5b 55 50 44  pported for [UPD
92b0: 41 54 45 5d 20 6f 72 0a 20 20 5b 44 45 4c 45 54  ATE] or.  [DELET
92c0: 45 5d 20 69 6e 20 61 6e 79 20 63 6f 6e 74 65 78  E] in any contex
92d0: 74 20 62 75 74 20 63 61 6e 20 62 65 20 65 6e 61  t but can be ena
92e0: 62 6c 65 64 20 66 6f 72 20 74 6f 70 2d 6c 65 76  bled for top-lev
92f0: 65 6c 20 73 74 61 74 65 6d 65 6e 74 73 0a 20 20  el statements.  
9300: 75 73 69 6e 67 20 74 68 65 20 5b 53 51 4c 49 54  using the [SQLIT
9310: 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
9320: 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 20 63 6f  DELETE_LIMIT] co
9330: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
9340: 6e 2e 20 20 48 6f 77 65 76 65 72 2c 0a 20 20 74  n.  However,.  t
9350: 68 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  hat compile-time
9360: 20 6f 70 74 69 6f 6e 20 6f 6e 6c 79 20 61 70 70   option only app
9370: 6c 69 65 73 20 74 6f 20 74 6f 70 2d 6c 65 76 65  lies to top-leve
9380: 6c 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b  l [UPDATE] and [
9390: 44 45 4c 45 54 45 5d 0a 20 20 73 74 61 74 65 6d  DELETE].  statem
93a0: 65 6e 74 73 2c 20 6e 6f 74 20 5b 55 50 44 41 54  ents, not [UPDAT
93b0: 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20  E] and [DELETE] 
93c0: 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
93d0: 6e 20 74 72 69 67 67 65 72 73 2e 29 5e 0a 20 20  n triggers.)^.  
93e0: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a  </p></li>.</ul>.
93f0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
9400: 74 20 69 6e 73 74 65 61 64 5f 6f 66 5f 74 72 69  t instead_of_tri
9410: 67 67 65 72 20 7b 49 4e 53 54 45 41 44 20 4f 46  gger {INSTEAD OF
9420: 7d 20 7b 49 4e 53 54 45 41 44 20 4f 46 20 74 72  } {INSTEAD OF tr
9430: 69 67 67 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  igger}</tcl>.<h3
9440: 3e 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67  >INSTEAD OF trig
9450: 67 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 72  ger</h3>..<p>^Tr
9460: 69 67 67 65 72 73 20 6d 61 79 20 62 65 20 63 72  iggers may be cr
9470: 65 61 74 65 64 20 6f 6e 20 5b 76 69 65 77 73 5d  eated on [views]
9480: 2c 20 61 73 20 77 65 6c 6c 20 61 73 20 6f 72 64  , as well as ord
9490: 69 6e 61 72 79 20 74 61 62 6c 65 73 2c 20 62 79  inary tables, by
94a0: 0a 73 70 65 63 69 66 79 69 6e 67 20 49 4e 53 54  .specifying INST
94b0: 45 41 44 20 4f 46 20 69 6e 20 74 68 65 20 43 52  EAD OF in the CR
94c0: 45 41 54 45 20 54 52 49 47 47 45 52 20 73 74 61  EATE TRIGGER sta
94d0: 74 65 6d 65 6e 74 2e 20 0a 5e 49 66 20 6f 6e 65  tement. .^If one
94e0: 20 6f 72 20 6d 6f 72 65 20 4f 4e 20 49 4e 53 45   or more ON INSE
94f0: 52 54 2c 20 4f 4e 20 44 45 4c 45 54 45 0a 6f 72  RT, ON DELETE.or
9500: 20 4f 4e 20 55 50 44 41 54 45 20 74 72 69 67 67   ON UPDATE trigg
9510: 65 72 73 20 61 72 65 20 64 65 66 69 6e 65 64 20  ers are defined 
9520: 6f 6e 20 61 20 76 69 65 77 2c 20 74 68 65 6e 20  on a view, then 
9530: 69 74 20 69 73 20 6e 6f 74 20 61 6e 0a 65 72 72  it is not an.err
9540: 6f 72 20 74 6f 20 65 78 65 63 75 74 65 20 61 6e  or to execute an
9550: 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 20   INSERT, DELETE 
9560: 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  or UPDATE statem
9570: 65 6e 74 20 6f 6e 20 74 68 65 20 76 69 65 77 2c  ent on the view,
9580: 20 0a 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20   .respectively. 
9590: 20 5e 49 6e 73 74 65 61 64 2c 0a 65 78 65 63 75   ^Instead,.execu
95a0: 74 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20  ting an INSERT, 
95b0: 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
95c0: 20 6f 6e 20 74 68 65 20 76 69 65 77 20 63 61 75   on the view cau
95d0: 73 65 73 20 74 68 65 20 61 73 73 6f 63 69 61 74  ses the associat
95e0: 65 64 0a 74 72 69 67 67 65 72 73 20 74 6f 20 66  ed.triggers to f
95f0: 69 72 65 2e 20 5e 54 68 65 20 72 65 61 6c 20 74  ire. ^The real t
9600: 61 62 6c 65 73 20 75 6e 64 65 72 6c 79 69 6e 67  ables underlying
9610: 20 74 68 65 20 76 69 65 77 20 61 72 65 20 6e 6f   the view are no
9620: 74 20 6d 6f 64 69 66 69 65 64 0a 28 65 78 63 65  t modified.(exce
9630: 70 74 20 70 6f 73 73 69 62 6c 79 20 65 78 70 6c  pt possibly expl
9640: 69 63 69 74 6c 79 2c 20 62 79 20 61 20 74 72 69  icitly, by a tri
9650: 67 67 65 72 20 70 72 6f 67 72 61 6d 29 2e 3c 2f  gger program).</
9660: 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61  p>..<p>^Note tha
9670: 74 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63  t the [sqlite3_c
9680: 68 61 6e 67 65 73 28 29 5d 20 61 6e 64 20 5b 73  hanges()] and [s
9690: 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61  qlite3_total_cha
96a0: 6e 67 65 73 28 29 5d 20 69 6e 74 65 72 66 61 63  nges()] interfac
96b0: 65 73 0a 64 6f 20 6e 6f 74 20 63 6f 75 6e 74 20  es.do not count 
96c0: 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67  INSTEAD OF trigg
96d0: 65 72 20 66 69 72 69 6e 67 73 2c 20 62 75 74 20  er firings, but 
96e0: 74 68 65 0a 5b 63 6f 75 6e 74 5f 63 68 61 6e 67  the.[count_chang
96f0: 65 73 20 70 72 61 67 6d 61 5d 20 64 6f 65 73 20  es pragma] does 
9700: 63 6f 75 6e 74 20 49 4e 53 54 45 41 44 20 4f 46  count INSTEAD OF
9710: 20 74 72 69 67 67 65 72 20 66 69 72 69 6e 67 2e   trigger firing.
9720: 3c 2f 70 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c  </p>..<h3>Exampl
9730: 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 73  es</h3>..<p>^(As
9740: 73 75 6d 69 6e 67 20 74 68 61 74 20 63 75 73 74  suming that cust
9750: 6f 6d 65 72 20 72 65 63 6f 72 64 73 20 61 72 65  omer records are
9760: 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 22   stored in the "
9770: 63 75 73 74 6f 6d 65 72 73 22 20 74 61 62 6c 65  customers" table
9780: 2c 20 61 6e 64 0a 74 68 61 74 20 6f 72 64 65 72  , and.that order
9790: 20 72 65 63 6f 72 64 73 20 61 72 65 20 73 74 6f   records are sto
97a0: 72 65 64 20 69 6e 20 74 68 65 20 22 6f 72 64 65  red in the "orde
97b0: 72 73 22 20 74 61 62 6c 65 2c 20 74 68 65 20 66  rs" table, the f
97c0: 6f 6c 6c 6f 77 69 6e 67 20 74 72 69 67 67 65 72  ollowing trigger
97d0: 0a 65 6e 73 75 72 65 73 20 74 68 61 74 20 61 6c  .ensures that al
97e0: 6c 20 61 73 73 6f 63 69 61 74 65 64 20 6f 72 64  l associated ord
97f0: 65 72 73 20 61 72 65 20 72 65 64 69 72 65 63 74  ers are redirect
9800: 65 64 20 77 68 65 6e 20 61 20 63 75 73 74 6f 6d  ed when a custom
9810: 65 72 20 63 68 61 6e 67 65 73 0a 68 69 73 20 6f  er changes.his o
9820: 72 20 68 65 72 20 61 64 64 72 65 73 73 3a 3c 2f  r her address:</
9830: 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65  p>..<tcl>Example
9840: 20 7b 0a 43 52 45 41 54 45 20 54 52 49 47 47 45   {.CREATE TRIGGE
9850: 52 20 75 70 64 61 74 65 5f 63 75 73 74 6f 6d 65  R update_custome
9860: 72 5f 61 64 64 72 65 73 73 20 55 50 44 41 54 45  r_address UPDATE
9870: 20 4f 46 20 61 64 64 72 65 73 73 20 4f 4e 20 63   OF address ON c
9880: 75 73 74 6f 6d 65 72 73 20 0a 20 20 42 45 47 49  ustomers .  BEGI
9890: 4e 0a 20 20 20 20 55 50 44 41 54 45 20 6f 72 64  N.    UPDATE ord
98a0: 65 72 73 20 53 45 54 20 61 64 64 72 65 73 73 20  ers SET address 
98b0: 3d 20 6e 65 77 2e 61 64 64 72 65 73 73 20 57 48  = new.address WH
98c0: 45 52 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d  ERE customer_nam
98d0: 65 20 3d 20 6f 6c 64 2e 6e 61 6d 65 3b 0a 20 20  e = old.name;.  
98e0: 45 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  END;.}</tcl>..<p
98f0: 3e 57 69 74 68 20 74 68 69 73 20 74 72 69 67 67  >With this trigg
9900: 65 72 20 69 6e 73 74 61 6c 6c 65 64 2c 20 65 78  er installed, ex
9910: 65 63 75 74 69 6e 67 20 74 68 65 20 73 74 61 74  ecuting the stat
9920: 65 6d 65 6e 74 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c  ement:</p>..<tcl
9930: 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54  >Example {.UPDAT
9940: 45 20 63 75 73 74 6f 6d 65 72 73 20 53 45 54 20  E customers SET 
9950: 61 64 64 72 65 73 73 20 3d 20 27 31 20 4d 61 69  address = '1 Mai
9960: 6e 20 53 74 2e 27 20 57 48 45 52 45 20 6e 61 6d  n St.' WHERE nam
9970: 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27  e = 'Jack Jones'
9980: 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 63 61  ;.}</tcl>..<p>ca
9990: 75 73 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69  uses the followi
99a0: 6e 67 20 74 6f 20 62 65 20 61 75 74 6f 6d 61 74  ng to be automat
99b0: 69 63 61 6c 6c 79 20 65 78 65 63 75 74 65 64 3a  ically executed:
99c0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70  </p>..<tcl>Examp
99d0: 6c 65 20 7b 0a 55 50 44 41 54 45 20 6f 72 64 65  le {.UPDATE orde
99e0: 72 73 20 53 45 54 20 61 64 64 72 65 73 73 20 3d  rs SET address =
99f0: 20 27 31 20 4d 61 69 6e 20 53 74 2e 27 20 57 48   '1 Main St.' WH
9a00: 45 52 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d  ERE customer_nam
9a10: 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27  e = 'Jack Jones'
9a20: 3b 0a 7d 3c 2f 74 63 6c 3e 29 5e 0a 0a 3c 74 63  ;.}</tcl>)^..<tc
9a30: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e  l>hd_fragment un
9a40: 64 65 66 5f 62 65 66 6f 72 65 20 7b 75 6e 64 65  def_before {unde
9a50: 66 69 6e 65 64 20 42 45 46 4f 52 45 20 74 72 69  fined BEFORE tri
9a60: 67 67 65 72 20 62 65 68 61 76 69 6f 72 7d 3c 2f  gger behavior}</
9a70: 74 63 6c 3e 0a 3c 68 33 3e 43 61 75 74 69 6f 6e  tcl>.<h3>Caution
9a80: 73 20 4f 6e 20 54 68 65 20 55 73 65 20 4f 66 20  s On The Use Of 
9a90: 42 45 46 4f 52 45 20 74 72 69 67 67 65 72 73 3c  BEFORE triggers<
9aa0: 2f 68 33 3e 0a 0a 3c 70 3e 49 66 20 61 20 42 45  /h3>..<p>If a BE
9ab0: 46 4f 52 45 20 55 50 44 41 54 45 20 6f 72 20 42  FORE UPDATE or B
9ac0: 45 46 4f 52 45 20 44 45 4c 45 54 45 20 74 72 69  EFORE DELETE tri
9ad0: 67 67 65 72 20 6d 6f 64 69 66 69 65 73 20 6f 72  gger modifies or
9ae0: 20 64 65 6c 65 74 65 73 20 61 20 72 6f 77 0a 74   deletes a row.t
9af0: 68 61 74 20 77 61 73 20 74 6f 20 68 61 76 65 20  hat was to have 
9b00: 62 65 65 6e 20 75 70 64 61 74 65 64 20 6f 72 20  been updated or 
9b10: 64 65 6c 65 74 65 64 2c 20 74 68 65 6e 20 74 68  deleted, then th
9b20: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
9b30: 73 75 62 73 65 71 75 65 6e 74 0a 75 70 64 61 74  subsequent.updat
9b40: 65 20 6f 72 20 64 65 6c 65 74 65 20 6f 70 65 72  e or delete oper
9b50: 61 74 69 6f 6e 20 69 73 20 75 6e 64 65 66 69 6e  ation is undefin
9b60: 65 64 2e 20 20 46 75 72 74 68 65 72 6d 6f 72 65  ed.  Furthermore
9b70: 2c 20 69 66 20 61 20 42 45 46 4f 52 45 20 74 72  , if a BEFORE tr
9b80: 69 67 67 65 72 0a 6d 6f 64 69 66 69 65 73 20 6f  igger.modifies o
9b90: 72 20 64 65 6c 65 74 65 73 20 61 20 72 6f 77 2c  r deletes a row,
9ba0: 20 74 68 65 6e 20 69 74 20 69 73 20 75 6e 64 65   then it is unde
9bb0: 66 69 6e 65 64 20 77 68 65 74 68 65 72 20 6f 72  fined whether or
9bc0: 20 6e 6f 74 20 41 46 54 45 52 20 74 72 69 67 67   not AFTER trigg
9bd0: 65 72 73 0a 74 68 61 74 20 77 6f 75 6c 64 20 68  ers.that would h
9be0: 61 76 65 20 6f 74 68 65 72 77 69 73 65 20 72 75  ave otherwise ru
9bf0: 6e 20 6f 6e 20 74 68 6f 73 65 20 72 6f 77 73 20  n on those rows 
9c00: 77 69 6c 6c 20 69 6e 20 66 61 63 74 20 72 75 6e  will in fact run
9c10: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 76  ..</p>..<p>The v
9c20: 61 6c 75 65 20 6f 66 20 4e 45 57 2e 72 6f 77 69  alue of NEW.rowi
9c30: 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64 20 69  d is undefined i
9c40: 6e 20 61 20 42 45 46 4f 52 45 20 49 4e 53 45 52  n a BEFORE INSER
9c50: 54 20 74 72 69 67 67 65 72 20 69 6e 20 77 68 69  T trigger in whi
9c60: 63 68 0a 74 68 65 20 72 6f 77 69 64 20 69 73 20  ch.the rowid is 
9c70: 6e 6f 74 20 65 78 70 6c 69 63 69 74 6c 79 20 73  not explicitly s
9c80: 65 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  et to an integer
9c90: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 42 65 63 61 75 73  .</p>..<p>Becaus
9ca0: 65 20 6f 66 20 74 68 65 20 62 65 68 61 76 69 6f  e of the behavio
9cb0: 72 73 20 64 65 73 63 72 69 62 65 64 20 61 62 6f  rs described abo
9cc0: 76 65 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73 20  ve, programmers 
9cd0: 61 72 65 20 65 6e 63 6f 75 72 61 67 65 64 20 74  are encouraged t
9ce0: 6f 0a 70 72 65 66 65 72 20 41 46 54 45 52 20 74  o.prefer AFTER t
9cf0: 72 69 67 67 65 72 73 20 6f 76 65 72 20 42 45 46  riggers over BEF
9d00: 4f 52 45 20 74 72 69 67 67 65 72 73 2e 3c 2f 70  ORE triggers.</p
9d10: 3e 0a 0a 3c 68 33 3e 54 68 65 20 52 41 49 53 45  >..<h3>The RAISE
9d20: 28 29 20 66 75 6e 63 74 69 6f 6e 3c 2f 68 33 3e  () function</h3>
9d30: 0a 0a 3c 70 3e 5e 28 41 20 73 70 65 63 69 61 6c  ..<p>^(A special
9d40: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 52 41   SQL function RA
9d50: 49 53 45 28 29 20 6d 61 79 20 62 65 20 75 73 65  ISE() may be use
9d60: 64 20 77 69 74 68 69 6e 20 61 20 74 72 69 67 67  d within a trigg
9d70: 65 72 2d 70 72 6f 67 72 61 6d 2c 29 5e 0a 77 69  er-program,)^.wi
9d80: 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  th the following
9d90: 20 73 79 6e 74 61 78 3c 2f 70 3e 20 0a 0a 3c 74   syntax</p> ..<t
9da0: 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d  cl>BubbleDiagram
9db0: 20 72 61 69 73 65 2d 66 75 6e 63 74 69 6f 6e 3c   raise-function<
9dc0: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20  /tcl>..<p>^When 
9dd0: 6f 6e 65 20 6f 66 20 74 68 65 20 66 69 72 73 74  one of the first
9de0: 20 74 68 72 65 65 20 66 6f 72 6d 73 20 69 73 20   three forms is 
9df0: 63 61 6c 6c 65 64 20 64 75 72 69 6e 67 20 74 72  called during tr
9e00: 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 0a 65 78  igger-program.ex
9e10: 65 63 75 74 69 6f 6e 2c 20 74 68 65 20 73 70 65  ecution, the spe
9e20: 63 69 66 69 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c  cified [ON CONFL
9e30: 49 43 54 5d 20 70 72 6f 63 65 73 73 69 6e 67 20  ICT] processing 
9e40: 69 73 20 70 65 72 66 6f 72 6d 65 64 0a 28 65 69  is performed.(ei
9e50: 74 68 65 72 20 41 42 4f 52 54 2c 20 46 41 49 4c  ther ABORT, FAIL
9e60: 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 29 20 61 6e   or ROLLBACK) an
9e70: 64 20 74 68 65 20 63 75 72 72 65 6e 74 20 71 75  d the current qu
9e80: 65 72 79 20 74 65 72 6d 69 6e 61 74 65 73 2e 0a  ery terminates..
9e90: 41 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66  An error code of
9ea0: 20 5b 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41   [SQLITE_CONSTRA
9eb0: 49 4e 54 5d 20 69 73 20 72 65 74 75 72 6e 65 64  INT] is returned
9ec0: 20 74 6f 20 74 68 65 20 61 70 70 6c 69 63 61 74   to the applicat
9ed0: 69 6f 6e 2c 0a 61 6c 6f 6e 67 20 77 69 74 68 20  ion,.along with 
9ee0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65 72  the specified er
9ef0: 72 6f 72 20 6d 65 73 73 61 67 65 2e 3c 2f 70 3e  ror message.</p>
9f00: 0a 0a 3c 70 3e 5e 57 68 65 6e 20 52 41 49 53 45  ..<p>^When RAISE
9f10: 28 49 47 4e 4f 52 45 29 20 69 73 20 63 61 6c 6c  (IGNORE) is call
9f20: 65 64 2c 20 74 68 65 20 72 65 6d 61 69 6e 64 65  ed, the remainde
9f30: 72 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  r of the current
9f40: 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
9f50: 2c 0a 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  ,.the statement 
9f60: 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20  that caused the 
9f70: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
9f80: 74 6f 20 65 78 65 63 75 74 65 20 61 6e 64 20 61  to execute and a
9f90: 6e 79 20 73 75 62 73 65 71 75 65 6e 74 0a 74 72  ny subsequent.tr
9fa0: 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74  igger programs t
9fb0: 68 61 74 20 77 6f 75 6c 64 20 6f 66 20 62 65 65  hat would of bee
9fc0: 6e 20 65 78 65 63 75 74 65 64 20 61 72 65 20 61  n executed are a
9fd0: 62 61 6e 64 6f 6e 65 64 2e 20 5e 4e 6f 20 64 61  bandoned. ^No da
9fe0: 74 61 62 61 73 65 0a 63 68 61 6e 67 65 73 20 61  tabase.changes a
9ff0: 72 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  re rolled back. 
a000: 20 5e 49 66 20 74 68 65 20 73 74 61 74 65 6d 65   ^If the stateme
a010: 6e 74 20 74 68 61 74 20 63 61 75 73 65 64 20 74  nt that caused t
a020: 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
a030: 61 6d 0a 74 6f 20 65 78 65 63 75 74 65 20 69 73  am.to execute is
a040: 20 69 74 73 65 6c 66 20 70 61 72 74 20 6f 66 20   itself part of 
a050: 61 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  a trigger progra
a060: 6d 2c 20 74 68 65 6e 20 74 68 61 74 20 74 72 69  m, then that tri
a070: 67 67 65 72 20 70 72 6f 67 72 61 6d 0a 72 65 73  gger program.res
a080: 75 6d 65 73 20 65 78 65 63 75 74 69 6f 6e 20 61  umes execution a
a090: 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
a0a0: 6f 66 20 74 68 65 20 6e 65 78 74 20 73 74 65 70  of the next step
a0b0: 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23  ..</p>...<tcl>.#
a0c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a0d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a0e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a0f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
a110: 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 56  ection {CREATE V
a120: 49 45 57 7d 20 7b 63 72 65 61 74 65 76 69 65 77  IEW} {createview
a130: 7d 20 7b 7b 43 52 45 41 54 45 20 56 49 45 57 7d  } {{CREATE VIEW}
a140: 20 76 69 65 77 20 2a 76 69 65 77 73 7d 0a 0a 42   view *views}..B
a150: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65  ubbleDiagram cre
a160: 61 74 65 2d 76 69 65 77 2d 73 74 6d 74 20 31 0a  ate-view-stmt 1.
a170: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
a180: 43 52 45 41 54 45 20 56 49 45 57 20 63 6f 6d 6d  CREATE VIEW comm
a190: 61 6e 64 20 61 73 73 69 67 6e 73 20 61 20 6e 61  and assigns a na
a1a0: 6d 65 20 74 6f 20 61 20 70 72 65 2d 70 61 63 6b  me to a pre-pack
a1b0: 61 67 65 64 20 0a 5b 53 45 4c 45 43 54 5d 20 73  aged .[SELECT] s
a1c0: 74 61 74 65 6d 65 6e 74 2e 20 0a 5e 4f 6e 63 65  tatement. .^Once
a1d0: 20 74 68 65 20 76 69 65 77 20 69 73 20 63 72 65   the view is cre
a1e0: 61 74 65 64 2c 20 69 74 20 63 61 6e 20 62 65 20  ated, it can be 
a1f0: 75 73 65 64 20 69 6e 20 74 68 65 20 46 52 4f 4d  used in the FROM
a200: 20 63 6c 61 75 73 65 0a 6f 66 20 61 6e 6f 74 68   clause.of anoth
a210: 65 72 20 5b 53 45 4c 45 43 54 5d 20 69 6e 20 70  er [SELECT] in p
a220: 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20  lace of a table 
a230: 6e 61 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e  name..</p>..<p>^
a240: 49 66 20 74 68 65 20 22 54 45 4d 50 22 20 6f 72  If the "TEMP" or
a250: 20 22 54 45 4d 50 4f 52 41 52 59 22 20 6b 65 79   "TEMPORARY" key
a260: 77 6f 72 64 20 6f 63 63 75 72 73 20 69 6e 20 62  word occurs in b
a270: 65 74 77 65 65 6e 20 22 43 52 45 41 54 45 22 0a  etween "CREATE".
a280: 61 6e 64 20 22 56 49 45 57 22 20 74 68 65 6e 20  and "VIEW" then 
a290: 74 68 65 20 76 69 65 77 20 74 68 61 74 20 69 73  the view that is
a2a0: 20 63 72 65 61 74 65 64 20 69 73 20 6f 6e 6c 79   created is only
a2b0: 20 76 69 73 69 62 6c 65 20 74 6f 20 74 68 65 0a   visible to the.
a2c0: 70 72 6f 63 65 73 73 20 74 68 61 74 20 6f 70 65  process that ope
a2d0: 6e 65 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ned the database
a2e0: 20 61 6e 64 20 69 73 20 61 75 74 6f 6d 61 74 69   and is automati
a2f0: 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 20 77 68  cally deleted wh
a300: 65 6e 0a 74 68 65 20 64 61 74 61 62 61 73 65 20  en.the database 
a310: 69 73 20 63 6c 6f 73 65 64 2e 3c 2f 70 3e 0a 0a  is closed.</p>..
a320: 3c 70 3e 20 5e 49 66 20 61 20 26 6c 74 3b 64 61  <p> ^If a &lt;da
a330: 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20  tabase-name&gt; 
a340: 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  is specified, th
a350: 65 6e 20 74 68 65 20 76 69 65 77 20 69 73 20 63  en the view is c
a360: 72 65 61 74 65 64 20 69 6e 20 0a 74 68 65 20 6e  reated in .the n
a370: 61 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20 5e  amed database. ^
a380: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74  It is an error t
a390: 6f 20 73 70 65 63 69 66 79 20 62 6f 74 68 20 61  o specify both a
a3a0: 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61   &lt;database-na
a3b0: 6d 65 26 67 74 3b 0a 61 6e 64 20 74 68 65 20 54  me&gt;.and the T
a3c0: 45 4d 50 20 6b 65 79 77 6f 72 64 20 6f 6e 20 61  EMP keyword on a
a3d0: 20 56 49 45 57 2c 20 75 6e 6c 65 73 73 20 74 68   VIEW, unless th
a3e0: 65 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e  e &lt;database-n
a3f0: 61 6d 65 26 67 74 3b 20 69 73 20 22 74 65 6d 70  ame&gt; is "temp
a400: 22 2e 0a 5e 49 66 20 6e 6f 20 64 61 74 61 62 61  "..^If no databa
a410: 73 65 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69  se name is speci
a420: 66 69 65 64 2c 20 61 6e 64 20 74 68 65 20 54 45  fied, and the TE
a430: 4d 50 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f  MP keyword is no
a440: 74 20 70 72 65 73 65 6e 74 2c 0a 74 68 65 20 56  t present,.the V
a450: 49 45 57 20 69 73 20 63 72 65 61 74 65 64 20 69  IEW is created i
a460: 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
a470: 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 59 6f  ase.</p>..<p>^Yo
a480: 75 20 63 61 6e 6e 6f 74 20 5b 44 45 4c 45 54 45  u cannot [DELETE
a490: 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 20 6f 72 20  ], [INSERT], or 
a4a0: 5b 55 50 44 41 54 45 5d 20 61 20 76 69 65 77 2e  [UPDATE] a view.
a4b0: 20 20 5e 56 69 65 77 73 20 61 72 65 20 72 65 61    ^Views are rea
a4c0: 64 2d 6f 6e 6c 79 20 0a 69 6e 20 53 51 4c 69 74  d-only .in SQLit
a4d0: 65 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 69 6e  e.  ^However, in
a4e0: 20 6d 61 6e 79 20 63 61 73 65 73 20 79 6f 75 20   many cases you 
a4f0: 63 61 6e 20 75 73 65 20 61 6e 0a 5b 49 4e 53 54  can use an.[INST
a500: 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 5d 20  EAD OF trigger] 
a510: 6f 6e 20 74 68 65 20 76 69 65 77 20 74 6f 20 61  on the view to a
a520: 63 63 6f 6d 70 6c 69 73 68 20 0a 74 68 65 20 73  ccomplish .the s
a530: 61 6d 65 20 74 68 69 6e 67 2e 20 20 5e 56 69 65  ame thing.  ^Vie
a540: 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 0a  ws are removed .
a550: 77 69 74 68 20 74 68 65 20 5b 44 52 4f 50 20 56  with the [DROP V
a560: 49 45 57 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70  IEW] command.</p
a570: 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
a580: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a590: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a5a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a5b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a5c0: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
a5d0: 7b 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20  {CREATE VIRTUAL 
a5e0: 54 41 42 4c 45 7d 20 7b 63 72 65 61 74 65 76 74  TABLE} {createvt
a5f0: 61 62 7d 20 7b 7b 43 52 45 41 54 45 20 56 49 52  ab} {{CREATE VIR
a600: 54 55 41 4c 20 54 41 42 4c 45 7d 7d 0a 0a 42 75  TUAL TABLE}}..Bu
a610: 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61  bbleDiagram crea
a620: 74 65 2d 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  te-virtual-table
a630: 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a  -stmt 1.</tcl>..
a640: 3c 70 3e 41 20 5b 76 69 72 74 75 61 6c 20 74 61  <p>A [virtual ta
a650: 62 6c 65 5d 20 69 73 20 61 6e 20 69 6e 74 65 72  ble] is an inter
a660: 66 61 63 65 20 74 6f 20 61 6e 20 65 78 74 65 72  face to an exter
a670: 6e 61 6c 20 73 74 6f 72 61 67 65 20 6f 72 20 63  nal storage or c
a680: 6f 6d 70 75 74 61 74 69 6f 6e 0a 65 6e 67 69 6e  omputation.engin
a690: 65 20 74 68 61 74 20 61 70 70 65 61 72 73 20 74  e that appears t
a6a0: 6f 20 62 65 20 61 20 74 61 62 6c 65 20 62 75 74  o be a table but
a6b0: 20 64 6f 65 73 20 6e 6f 74 20 61 63 74 75 61 6c   does not actual
a6c0: 6c 79 20 73 74 6f 72 65 20 69 6e 66 6f 72 6d 61  ly store informa
a6d0: 74 69 6f 6e 0a 69 6e 20 74 68 65 20 64 61 74 61  tion.in the data
a6e0: 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a  base file.</p>..
a6f0: 3c 70 3e 49 6e 20 67 65 6e 65 72 61 6c 2c 20 79  <p>In general, y
a700: 6f 75 20 63 61 6e 20 64 6f 20 61 6e 79 74 68 69  ou can do anythi
a710: 6e 67 20 77 69 74 68 20 61 20 5b 76 69 72 74 75  ng with a [virtu
a720: 61 6c 20 74 61 62 6c 65 5d 20 74 68 61 74 20 63  al table] that c
a730: 61 6e 20 62 65 20 64 6f 6e 65 0a 77 69 74 68 20  an be done.with 
a740: 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c  an ordinary tabl
a750: 65 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 5e  e, except that ^
a760: 79 6f 75 20 63 61 6e 6e 6f 74 20 63 72 65 61 74  you cannot creat
a770: 65 20 69 6e 64 69 63 65 73 20 6f 72 20 74 72 69  e indices or tri
a780: 67 67 65 72 73 20 6f 6e 20 61 0a 76 69 72 74 75  ggers on a.virtu
a790: 61 6c 20 74 61 62 6c 65 2e 20 20 5e 53 6f 6d 65  al table.  ^Some
a7a0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
a7b0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d  mplementations m
a7c0: 69 67 68 74 20 69 6d 70 6f 73 65 20 61 64 64 69  ight impose addi
a7d0: 74 69 6f 6e 61 6c 0a 72 65 73 74 72 69 63 74 69  tional.restricti
a7e0: 6f 6e 73 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ons.  For exampl
a7f0: 65 2c 20 6d 61 6e 79 20 76 69 72 74 75 61 6c 20  e, many virtual 
a800: 74 61 62 6c 65 73 20 61 72 65 20 72 65 61 64 2d  tables are read-
a810: 6f 6e 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  only.</p>..<p>Th
a820: 65 20 26 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d  e &lt;module-nam
a830: 65 26 67 74 3b 20 69 73 20 74 68 65 20 6e 61 6d  e&gt; is the nam
a840: 65 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 74  e of an object t
a850: 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 0a 74  hat implements.t
a860: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
a870: 2e 20 20 5e 54 68 65 20 26 6c 74 3b 6d 6f 64 75  .  ^The &lt;modu
a880: 6c 65 2d 6e 61 6d 65 26 67 74 3b 20 6d 75 73 74  le-name&gt; must
a890: 20 62 65 20 72 65 67 69 73 74 65 72 65 64 20 77   be registered w
a8a0: 69 74 68 0a 74 68 65 20 53 51 4c 69 74 65 20 64  ith.the SQLite d
a8b0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
a8c0: 6f 6e 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65  on using.[sqlite
a8d0: 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  3_create_module(
a8e0: 29 5d 20 6f 72 20 5b 73 71 6c 69 74 65 33 5f 63  )] or [sqlite3_c
a8f0: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28  reate_module_v2(
a900: 29 5d 0a 70 72 69 6f 72 20 74 6f 20 69 73 73 75  )].prior to issu
a910: 69 6e 67 20 74 68 65 20 43 52 45 41 54 45 20 56  ing the CREATE V
a920: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61  IRTUAL TABLE sta
a930: 74 65 6d 65 6e 74 2e 0a 5e 54 68 65 20 6d 6f 64  tement..^The mod
a940: 75 6c 65 20 74 61 6b 65 73 20 7a 65 72 6f 20 6f  ule takes zero o
a950: 72 20 6d 6f 72 65 20 63 6f 6d 6d 61 2d 73 65 70  r more comma-sep
a960: 61 72 61 74 65 64 20 61 72 67 75 6d 65 6e 74 73  arated arguments
a970: 2e 0a 5e 54 68 65 20 61 72 67 75 6d 65 6e 74 73  ..^The arguments
a980: 20 63 61 6e 20 62 65 20 6a 75 73 74 20 61 62 6f   can be just abo
a990: 75 74 20 61 6e 79 20 74 65 78 74 20 61 73 20 6c  ut any text as l
a9a0: 6f 6e 67 20 61 73 20 69 74 20 68 61 73 20 62 61  ong as it has ba
a9b0: 6c 61 6e 63 65 64 0a 70 61 72 65 6e 74 68 65 73  lanced.parenthes
a9c0: 65 73 2e 20 20 54 68 65 20 61 72 67 75 6d 65 6e  es.  The argumen
a9d0: 74 20 73 79 6e 74 61 78 20 69 73 20 73 75 66 66  t syntax is suff
a9e0: 69 63 69 65 6e 74 6c 79 20 67 65 6e 65 72 61 6c  iciently general
a9f0: 20 74 68 61 74 20 74 68 65 0a 61 72 67 75 6d 65   that the.argume
aa00: 6e 74 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20  nts can be made 
aa10: 74 6f 20 61 70 70 65 61 72 20 61 73 20 5b 63 6f  to appear as [co
aa20: 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73  lumn definitions
aa30: 5d 20 69 6e 20 61 20 74 72 61 64 69 74 69 6f 6e  ] in a tradition
aa40: 61 6c 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45  al.[CREATE TABLE
aa50: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e  ] statement.  .^
aa60: 53 51 4c 69 74 65 20 70 61 73 73 65 73 20 74 68  SQLite passes th
aa70: 65 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e  e module argumen
aa80: 74 73 20 64 69 72 65 63 74 6c 79 0a 74 6f 20 74  ts directly.to t
aa90: 68 65 20 5b 78 43 72 65 61 74 65 5d 20 61 6e 64  he [xCreate] and
aaa0: 20 5b 78 43 6f 6e 6e 65 63 74 5d 20 6d 65 74 68   [xConnect] meth
aab0: 6f 64 73 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c  ods of the modul
aac0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
aad0: 0a 77 69 74 68 6f 75 74 20 61 6e 79 20 69 6e 74  .without any int
aae0: 65 72 70 72 65 74 61 74 69 6f 6e 2e 20 20 49 74  erpretation.  It
aaf0: 20 69 73 20 74 68 65 20 72 65 73 70 6f 6e 73 69   is the responsi
ab00: 62 69 6c 69 74 79 0a 6f 66 20 74 68 65 20 6d 6f  bility.of the mo
ab10: 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
ab20: 69 6f 6e 20 74 6f 20 70 61 72 73 65 20 61 6e 64  ion to parse and
ab30: 20 69 6e 74 65 72 70 72 65 74 20 69 74 73 20 6f   interpret its o
ab40: 77 6e 20 61 72 67 75 6d 65 6e 74 73 2e 3c 2f 70  wn arguments.</p
ab50: 3e 0a 0a 3c 70 3e 5e 41 20 76 69 72 74 75 61 6c  >..<p>^A virtual
ab60: 20 74 61 62 6c 65 20 69 73 20 64 65 73 74 72 6f   table is destro
ab70: 79 65 64 20 75 73 69 6e 67 20 74 68 65 20 6f 72  yed using the or
ab80: 64 69 6e 61 72 79 0a 5b 44 52 4f 50 20 54 41 42  dinary.[DROP TAB
ab90: 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  LE] statement.  
aba0: 54 68 65 72 65 20 69 73 20 6e 6f 0a 44 52 4f 50  There is no.DROP
abb0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73   VIRTUAL TABLE s
abc0: 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c  tatement.</p>..<
abd0: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
abe0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
abf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ac00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ac10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ac20: 23 23 23 0a 53 65 63 74 69 6f 6e 20 44 45 4c 45  ###.Section DELE
ac30: 54 45 20 64 65 6c 65 74 65 20 7b 44 45 4c 45 54  TE delete {DELET
ac40: 45 20 2a 44 45 4c 45 54 45 73 7d 0a 0a 42 75 62  E *DELETEs}..Bub
ac50: 62 6c 65 44 69 61 67 72 61 6d 20 64 65 6c 65 74  bleDiagram delet
ac60: 65 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44  e-stmt 1.BubbleD
ac70: 69 61 67 72 61 6d 20 71 75 61 6c 69 66 69 65 64  iagram qualified
ac80: 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63  -table-name.</tc
ac90: 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 45 4c 45  l>..<p>^The DELE
aca0: 54 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73  TE command is us
acb0: 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 72 65 63  ed to remove rec
acc0: 6f 72 64 73 20 66 72 6f 6d 20 61 20 74 61 62 6c  ords from a tabl
acd0: 65 2e 0a 5e 54 68 65 20 63 6f 6d 6d 61 6e 64 20  e..^The command 
ace0: 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20  consists of the 
acf0: 22 44 45 4c 45 54 45 20 46 52 4f 4d 22 20 6b 65  "DELETE FROM" ke
ad00: 79 77 6f 72 64 73 20 66 6f 6c 6c 6f 77 65 64 20  ywords followed 
ad10: 62 79 0a 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  by.the name of t
ad20: 68 65 20 74 61 62 6c 65 20 66 72 6f 6d 20 77 68  he table from wh
ad30: 69 63 68 20 72 65 63 6f 72 64 73 20 61 72 65 20  ich records are 
ad40: 74 6f 20 62 65 20 72 65 6d 6f 76 65 64 2e 0a 3c  to be removed..<
ad50: 2f 70 3e 0a 0a 3c 70 3e 5e 57 69 74 68 6f 75 74  /p>..<p>^Without
ad60: 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 2c   a WHERE clause,
ad70: 20 61 6c 6c 20 72 6f 77 73 20 6f 66 20 74 68 65   all rows of the
ad80: 20 74 61 62 6c 65 20 61 72 65 20 72 65 6d 6f 76   table are remov
ad90: 65 64 2e 0a 5e 49 66 20 61 20 57 48 45 52 45 20  ed..^If a WHERE 
ada0: 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c 69  clause is suppli
adb0: 65 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68  ed, then only th
adc0: 6f 73 65 20 72 6f 77 73 20 74 68 61 74 20 6d 61  ose rows that ma
add0: 74 63 68 0a 74 68 65 20 65 78 70 72 65 73 73 69  tch.the expressi
ade0: 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 2e 3c  on are removed.<
adf0: 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63  /p>..<h3>Restric
ae00: 74 69 6f 6e 73 20 6f 6e 20 44 45 4c 45 54 45 20  tions on DELETE 
ae10: 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69  Statements Withi
ae20: 6e 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  n CREATE TRIGGER
ae30: 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 72 65  </h3>..<p>^There
ae40: 20 61 72 65 20 61 64 64 69 74 69 6f 6e 61 6c 20   are additional 
ae50: 73 79 6e 74 61 78 20 72 65 73 74 72 69 63 74 69  syntax restricti
ae60: 6f 6e 73 20 6f 6e 20 44 45 4c 45 54 45 20 73 74  ons on DELETE st
ae70: 61 74 65 6d 65 6e 74 73 20 74 68 61 74 0a 6f 63  atements that.oc
ae80: 63 75 72 20 77 69 74 68 69 6e 20 74 68 65 20 62  cur within the b
ae90: 6f 64 79 20 6f 66 20 61 20 5b 43 52 45 41 54 45  ody of a [CREATE
aea0: 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d   TRIGGER] statem
aeb0: 65 6e 74 2e 20 20 5e 54 68 65 20 3c 69 3e 74 61  ent.  ^The <i>ta
aec0: 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 0a 6d 75 73  ble-name</i>.mus
aed0: 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69 65 64  t be unqualified
aee0: 2e 20 0a 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f  . .^(In other wo
aef0: 72 64 73 2c 20 74 68 65 20 3c 69 3e 64 61 74 61  rds, the <i>data
af00: 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e  base-name</i><b>
af10: 2e 3c 2f 62 3e 20 70 72 65 66 69 78 0a 6f 6e 20  .</b> prefix.on 
af20: 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 20 69  the table name i
af30: 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 77 69  s not allowed wi
af40: 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20 29  thin triggers. )
af50: 5e 0a 5e 54 68 65 20 74 61 62 6c 65 20 66 72 6f  ^.^The table fro
af60: 6d 20 77 68 69 63 68 20 74 6f 20 64 65 6c 65 74  m which to delet
af70: 65 20 6d 75 73 74 20 62 65 20 69 6e 20 74 68 65  e must be in the
af80: 20 73 61 6d 65 0a 64 61 74 61 62 61 73 65 20 61   same.database a
af90: 73 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77  s the table to w
afa0: 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
afb0: 20 69 73 20 61 74 74 61 63 68 65 64 2e 3c 2f 70   is attached.</p
afc0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58  >..<p>^The INDEX
afd0: 45 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e  ED BY and NOT IN
afe0: 44 45 58 45 44 20 63 6c 61 75 73 65 73 20 61 72  DEXED clauses ar
aff0: 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e  e not allowed on
b000: 20 44 45 4c 45 54 45 0a 73 74 61 74 65 6d 65 6e   DELETE.statemen
b010: 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ts within trigge
b020: 72 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  rs.</p>..<p>^The
b030: 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 28 64   LIMIT clause (d
b040: 65 73 63 72 69 62 65 64 20 62 65 6c 6f 77 29 20  escribed below) 
b050: 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64 20 77  is unsupported w
b060: 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 3c  ithin triggers.<
b070: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
b080: 67 6d 65 6e 74 20 74 72 75 6e 63 61 74 65 6f 70  gment truncateop
b090: 74 20 7b 74 72 75 6e 63 61 74 65 20 6f 70 74 69  t {truncate opti
b0a0: 6d 69 7a 61 74 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a  mization}</tcl>.
b0b0: 3c 68 33 3e 54 68 65 20 54 72 75 6e 63 61 74 65  <h3>The Truncate
b0c0: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 3c 2f 68   Optimization</h
b0d0: 33 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65  3>..<p>^When the
b0e0: 20 57 48 45 52 45 20 69 73 20 6f 6d 69 74 74 65   WHERE is omitte
b0f0: 64 20 66 72 6f 6d 20 61 20 44 45 4c 45 54 45 20  d from a DELETE 
b100: 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 74 68  statement and th
b110: 65 20 74 61 62 6c 65 0a 62 65 69 6e 67 20 64 65  e table.being de
b120: 6c 65 74 65 64 20 68 61 73 20 6e 6f 20 74 72 69  leted has no tri
b130: 67 67 65 72 73 2c 0a 53 51 4c 69 74 65 20 75 73  ggers,.SQLite us
b140: 65 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69  es an optimizati
b150: 6f 6e 20 74 6f 20 65 72 61 73 65 20 74 68 65 20  on to erase the 
b160: 65 6e 74 69 72 65 20 74 61 62 6c 65 20 63 6f 6e  entire table con
b170: 74 65 6e 74 0a 77 69 74 68 6f 75 74 20 68 61 76  tent.without hav
b180: 69 6e 67 20 74 6f 20 76 69 73 69 74 20 65 61 63  ing to visit eac
b190: 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74 61 62  h row of the tab
b1a0: 6c 65 20 69 6e 64 69 76 69 64 75 61 6c 6c 79 2e  le individually.
b1b0: 0a 54 68 69 73 20 22 74 72 75 6e 63 61 74 65 22  .This "truncate"
b1c0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 6d 61   optimization ma
b1d0: 6b 65 73 20 74 68 65 20 64 65 6c 65 74 65 20 72  kes the delete r
b1e0: 75 6e 20 6d 75 63 68 20 66 61 73 74 65 72 2e 0a  un much faster..
b1f0: 50 72 69 6f 72 20 74 6f 20 53 51 4c 69 74 65 20  Prior to SQLite 
b200: 5b 76 65 72 73 69 6f 6e 20 33 2e 36 2e 35 5d 2c  [version 3.6.5],
b210: 20 74 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70   the truncate op
b220: 74 69 6d 69 7a 61 74 69 6f 6e 0a 61 6c 73 6f 20  timization.also 
b230: 6d 65 61 6e 74 20 74 68 61 74 20 74 68 65 20 5b  meant that the [
b240: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
b250: 29 5d 20 61 6e 64 0a 5b 73 71 6c 69 74 65 33 5f  )] and.[sqlite3_
b260: 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d  total_changes()]
b270: 20 69 6e 74 65 72 66 61 63 65 73 0a 61 6e 64 20   interfaces.and 
b280: 74 68 65 20 5b 63 6f 75 6e 74 5f 63 68 61 6e 67  the [count_chang
b290: 65 73 20 70 72 61 67 6d 61 5d 0a 77 69 6c 6c 20  es pragma].will 
b2a0: 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 72 65 74  not actually ret
b2b0: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
b2c0: 66 20 64 65 6c 65 74 65 64 20 72 6f 77 73 2e 20  f deleted rows. 
b2d0: 20 0a 54 68 61 74 20 70 72 6f 62 6c 65 6d 20 68   .That problem h
b2e0: 61 73 20 62 65 65 6e 20 66 69 78 65 64 20 61 73  as been fixed as
b2f0: 20 6f 66 20 5b 76 65 72 73 69 6f 6e 20 33 2e 36   of [version 3.6
b300: 2e 35 5d 2e 0a 0a 3c 70 3e 5e 54 68 65 20 74 72  .5]...<p>^The tr
b310: 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74  uncate optimizat
b320: 69 6f 6e 20 63 61 6e 20 62 65 20 70 65 72 6d 61  ion can be perma
b330: 6e 65 6e 74 6c 79 20 64 69 73 61 62 6c 65 64 20  nently disabled 
b340: 66 6f 72 20 61 6c 6c 20 71 75 65 72 69 65 73 0a  for all queries.
b350: 62 79 20 72 65 63 6f 6d 70 69 6c 69 6e 67 0a 53  by recompiling.S
b360: 51 4c 69 74 65 20 77 69 74 68 20 74 68 65 20 5b  QLite with the [
b370: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 55 4e  SQLITE_OMIT_TRUN
b380: 43 41 54 45 5f 4f 50 54 49 4d 49 5a 41 54 49 4f  CATE_OPTIMIZATIO
b390: 4e 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  N] compile-time 
b3a0: 73 77 69 74 63 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e  switch.</p>..<p>
b3b0: 54 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74  The truncate opt
b3c0: 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20 61 6c  imization can al
b3d0: 73 6f 20 62 65 20 64 69 73 61 62 6c 65 64 20 61  so be disabled a
b3e0: 74 20 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 0a  t runtime using.
b3f0: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 65 74  the [sqlite3_set
b400: 5f 61 75 74 68 6f 72 69 7a 65 72 28 29 5d 20 69  _authorizer()] i
b410: 6e 74 65 72 66 61 63 65 2e 20 20 5e 49 66 20 61  nterface.  ^If a
b420: 6e 20 61 75 74 68 6f 72 69 7a 65 72 20 63 61 6c  n authorizer cal
b430: 6c 62 61 63 6b 0a 72 65 74 75 72 6e 73 20 5b 53  lback.returns [S
b440: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 5d 20 66 6f  QLITE_IGNORE] fo
b450: 72 20 61 6e 20 5b 53 51 4c 49 54 45 5f 44 45 4c  r an [SQLITE_DEL
b460: 45 54 45 5d 20 61 63 74 69 6f 6e 20 63 6f 64 65  ETE] action code
b470: 2c 20 74 68 65 6e 0a 74 68 65 20 44 45 4c 45 54  , then.the DELET
b480: 45 20 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c  E operation will
b490: 20 70 72 6f 63 65 65 64 20 62 75 74 20 74 68 65   proceed but the
b4a0: 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69   truncate optimi
b4b0: 7a 61 74 69 6f 6e 20 77 69 6c 6c 0a 62 65 20 62  zation will.be b
b4c0: 79 70 61 73 73 65 64 20 61 6e 64 20 72 6f 77 73  ypassed and rows
b4d0: 20 77 69 6c 6c 20 62 65 20 64 65 6c 65 74 65 64   will be deleted
b4e0: 20 6f 6e 65 20 62 79 20 6f 6e 65 2e 3c 2f 70 3e   one by one.</p>
b4f0: 0a 0a 3c 68 33 3e 55 73 65 20 4f 66 20 4c 49 4d  ..<h3>Use Of LIM
b500: 49 54 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66  IT</h3>..<p>^(If
b510: 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69   SQLite is compi
b520: 6c 65 64 20 77 69 74 68 20 74 68 65 20 5b 53 51  led with the [SQ
b530: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
b540: 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d  TE_DELETE_LIMIT]
b550: 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70  .compile-time op
b560: 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 73  tion, then the s
b570: 79 6e 74 61 78 20 6f 66 20 74 68 65 20 44 45 4c  yntax of the DEL
b580: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ETE statement is
b590: 0a 65 78 74 65 6e 64 65 64 20 62 79 20 74 68 65  .extended by the
b5a0: 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6f 70 74   addition of opt
b5b0: 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59 20 61  ional ORDER BY a
b5c0: 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73  nd LIMIT clauses
b5d0: 3a 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75  :)^</p>..<tcl>Bu
b5e0: 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65 6c 65  bbleDiagram dele
b5f0: 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65 64 3c  te-stmt-limited<
b600: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f  /tcl>..<p>^The o
b610: 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 63 6c  ptional LIMIT cl
b620: 61 75 73 65 20 63 61 6e 20 62 65 20 75 73 65 64  ause can be used
b630: 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75   to limit the nu
b640: 6d 62 65 72 20 6f 66 0a 72 6f 77 73 20 64 65 6c  mber of.rows del
b650: 65 74 65 64 2c 20 61 6e 64 20 74 68 65 72 65 62  eted, and thereb
b660: 79 20 6c 69 6d 69 74 20 74 68 65 20 73 69 7a 65  y limit the size
b670: 20 6f 66 20 74 68 65 20 74 72 61 6e 73 61 63 74   of the transact
b680: 69 6f 6e 2e 0a 5e 54 68 65 20 4f 52 44 45 52 20  ion..^The ORDER 
b690: 42 59 20 63 6c 61 75 73 65 20 6f 6e 20 61 20 44  BY clause on a D
b6a0: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 0a  ELETE statement.
b6b0: 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20  is used only to 
b6c0: 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 20  determine which 
b6d0: 72 6f 77 73 20 66 61 6c 6c 0a 77 69 74 68 69 6e  rows fall.within
b6e0: 20 74 68 65 20 4c 49 4d 49 54 2e 20 20 5e 54 68   the LIMIT.  ^Th
b6f0: 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68  e order in which
b700: 20 72 6f 77 73 20 61 72 65 20 64 65 6c 65 74 65   rows are delete
b710: 64 20 69 73 20 61 72 62 69 74 72 61 72 79 0a 61  d is arbitrary.a
b720: 6e 64 20 69 73 20 6e 6f 74 20 64 65 74 65 72 6d  nd is not determ
b730: 69 6e 65 64 20 62 79 20 74 68 65 20 4f 52 44 45  ined by the ORDE
b740: 52 20 42 59 20 63 6c 61 75 73 65 2e 3c 2f 70 3e  R BY clause.</p>
b750: 0a 0a 3c 70 3e 5e 54 68 65 20 70 72 65 73 65 6e  ..<p>^The presen
b760: 63 65 20 6f 66 20 61 20 4c 49 4d 49 54 20 63 6c  ce of a LIMIT cl
b770: 61 75 73 65 20 64 65 66 65 61 74 73 20 74 68 65  ause defeats the
b780: 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69   truncate optimi
b790: 7a 61 74 69 6f 6e 0a 63 61 75 73 69 6e 67 20 61  zation.causing a
b7a0: 6c 6c 20 72 6f 77 73 20 62 65 69 6e 67 20 64 65  ll rows being de
b7b0: 6c 65 74 65 64 20 74 6f 20 62 65 20 76 69 73 69  leted to be visi
b7c0: 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  ted.</p>..<tcl>.
b7d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b7e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b7f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
b820: 53 65 63 74 69 6f 6e 20 7b 44 45 54 41 43 48 20  Section {DETACH 
b830: 44 41 54 41 42 41 53 45 7d 20 64 65 74 61 63 68  DATABASE} detach
b840: 20 2a 44 45 54 41 43 48 0a 0a 42 75 62 62 6c 65   *DETACH..Bubble
b850: 44 69 61 67 72 61 6d 20 64 65 74 61 63 68 2d 73  Diagram detach-s
b860: 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  tmt 1.</tcl>..<p
b870: 3e 5e 54 68 69 73 20 73 74 61 74 65 6d 65 6e 74  >^This statement
b880: 20 64 65 74 61 63 68 65 73 20 61 6e 20 61 64 64   detaches an add
b890: 69 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65  itional database
b8a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76   connection prev
b8b0: 69 6f 75 73 6c 79 20 0a 61 74 74 61 63 68 65 64  iously .attached
b8c0: 20 75 73 69 6e 67 20 74 68 65 20 5b 41 54 54 41   using the [ATTA
b8d0: 43 48 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  CH] statement.  
b8e0: 0a 5e 49 74 20 69 73 20 70 6f 73 73 69 62 6c 65  .^It is possible
b8f0: 20 74 6f 20 68 61 76 65 20 74 68 65 20 73 61 6d   to have the sam
b900: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
b910: 61 74 74 61 63 68 65 64 20 6d 75 6c 74 69 70 6c  attached multipl
b920: 65 20 74 69 6d 65 73 20 75 73 69 6e 67 20 0a 64  e times using .d
b930: 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 73 2c 20  ifferent names, 
b940: 61 6e 64 20 64 65 74 61 63 68 69 6e 67 20 6f 6e  and detaching on
b950: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  e connection to 
b960: 61 20 66 69 6c 65 20 77 69 6c 6c 20 6c 65 61 76  a file will leav
b970: 65 20 74 68 65 20 0a 6f 74 68 65 72 73 20 69 6e  e the .others in
b980: 74 61 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  tact.</p>..<p>^T
b990: 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 77 69  his statement wi
b9a0: 6c 6c 20 66 61 69 6c 20 69 66 20 53 51 4c 69 74  ll fail if SQLit
b9b0: 65 20 69 73 20 69 6e 20 74 68 65 20 6d 69 64 64  e is in the midd
b9c0: 6c 65 20 6f 66 20 61 20 74 72 61 6e 73 61 63 74  le of a transact
b9d0: 69 6f 6e 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e  ion.</p>...<tcl>
b9e0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
b9f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ba00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ba10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ba20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
ba30: 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 49 4e  Section {DROP IN
ba40: 44 45 58 7d 20 64 72 6f 70 69 6e 64 65 78 20 7b  DEX} dropindex {
ba50: 7b 44 52 4f 50 20 49 4e 44 45 58 7d 7d 0a 0a 42  {DROP INDEX}}..B
ba60: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f  ubbleDiagram dro
ba70: 70 2d 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a 3c  p-index-stmt 1.<
ba80: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44  /tcl>..<p>^The D
ba90: 52 4f 50 20 49 4e 44 45 58 20 73 74 61 74 65 6d  ROP INDEX statem
baa0: 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 6e 20 69  ent removes an i
bab0: 6e 64 65 78 20 61 64 64 65 64 0a 77 69 74 68 20  ndex added.with 
bac0: 74 68 65 20 5b 43 52 45 41 54 45 20 49 4e 44 45  the [CREATE INDE
bad0: 58 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  X] statement.  T
bae0: 68 65 20 69 6e 64 65 78 20 69 73 20 63 6f 6d 70  he index is comp
baf0: 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66  letely removed f
bb00: 72 6f 6d 0a 74 68 65 20 64 69 73 6b 2e 20 20 54  rom.the disk.  T
bb10: 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 6f 20 72  he only way to r
bb20: 65 63 6f 76 65 72 20 74 68 65 20 69 6e 64 65 78  ecover the index
bb30: 20 69 73 20 74 6f 20 72 65 65 6e 74 65 72 20 74   is to reenter t
bb40: 68 65 0a 61 70 70 72 6f 70 72 69 61 74 65 20 5b  he.appropriate [
bb50: 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20 63 6f  CREATE INDEX] co
bb60: 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  mmand.</p>..<tcl
bb70: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
bb80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bb90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bba0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bbb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bbc0: 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54  .Section {DROP T
bbd0: 41 42 4c 45 7d 20 64 72 6f 70 74 61 62 6c 65 20  ABLE} droptable 
bbe0: 7b 7b 44 52 4f 50 20 54 41 42 4c 45 7d 7d 0a 0a  {{DROP TABLE}}..
bbf0: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72  BubbleDiagram dr
bc00: 6f 70 2d 74 61 62 6c 65 2d 73 74 6d 74 20 31 0a  op-table-stmt 1.
bc10: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
bc20: 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65  DROP TABLE state
bc30: 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74  ment removes a t
bc40: 61 62 6c 65 20 61 64 64 65 64 20 77 69 74 68 20  able added with 
bc50: 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c  the.[CREATE TABL
bc60: 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  E] statement.  T
bc70: 68 65 20 6e 61 6d 65 20 73 70 65 63 69 66 69 65  he name specifie
bc80: 64 20 69 73 20 74 68 65 0a 74 61 62 6c 65 20 6e  d is the.table n
bc90: 61 6d 65 2e 20 20 5e 54 68 65 20 64 72 6f 70 70  ame.  ^The dropp
bca0: 65 64 20 74 61 62 6c 65 20 69 73 20 63 6f 6d 70  ed table is comp
bcb0: 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66  letely removed f
bcc0: 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
bcd0: 20 0a 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65   .schema and the
bce0: 20 64 69 73 6b 20 66 69 6c 65 2e 20 20 54 68 65   disk file.  The
bcf0: 20 74 61 62 6c 65 20 63 61 6e 20 6e 6f 74 20 62   table can not b
bd00: 65 20 72 65 63 6f 76 65 72 65 64 2e 20 20 0a 5e  e recovered.  .^
bd10: 41 6c 6c 20 69 6e 64 69 63 65 73 20 61 6e 64 20  All indices and 
bd20: 74 72 69 67 67 65 72 73 0a 61 73 73 6f 63 69 61  triggers.associa
bd30: 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
bd40: 6c 65 20 61 72 65 20 61 6c 73 6f 20 64 65 6c 65  le are also dele
bd50: 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ted.</p>..<p>^Th
bd60: 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 45 58  e optional IF EX
bd70: 49 53 54 53 20 63 6c 61 75 73 65 20 73 75 70 70  ISTS clause supp
bd80: 72 65 73 73 65 73 20 74 68 65 20 65 72 72 6f 72  resses the error
bd90: 20 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d   that would norm
bda0: 61 6c 6c 79 0a 72 65 73 75 6c 74 20 69 66 20 74  ally.result if t
bdb0: 68 65 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f  he table does no
bdc0: 74 20 65 78 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 70  t exist.</p>..<p
bdd0: 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65  >^If [foreign ke
bde0: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61  y constraints] a
bdf0: 72 65 20 65 6e 61 62 6c 65 64 2c 20 61 20 44 52  re enabled, a DR
be00: 4f 50 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  OP TABLE command
be10: 20 70 65 72 66 6f 72 6d 73 20 61 6e 0a 69 6d 70   performs an.imp
be20: 6c 69 63 69 74 20 5b 44 45 4c 45 54 45 20 7c 20  licit [DELETE | 
be30: 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b  DELETE FROM &lt;
be40: 74 62 6c 26 67 74 3b 5d 20 63 6f 6d 6d 61 6e 64  tbl&gt;] command
be50: 20 62 65 66 6f 72 65 20 72 65 6d 6f 76 69 6e 67   before removing
be60: 20 74 68 65 0a 74 61 62 6c 65 20 66 72 6f 6d 20   the.table from 
be70: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
be80: 65 6d 61 2e 20 5e 41 6e 79 20 74 72 69 67 67 65  ema. ^Any trigge
be90: 72 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  rs attached to t
bea0: 68 65 20 74 61 62 6c 65 20 61 72 65 0a 64 72 6f  he table are.dro
beb0: 70 70 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61  pped from the da
bec0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 62 65  tabase schema be
bed0: 66 6f 72 65 20 74 68 65 20 69 6d 70 6c 69 63 69  fore the implici
bee0: 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c  t DELETE FROM &l
bef0: 74 3b 74 62 6c 26 67 74 3b 20 0a 69 73 20 65 78  t;tbl&gt; .is ex
bf00: 65 63 75 74 65 64 2c 20 73 6f 20 74 68 69 73 20  ecuted, so this 
bf10: 63 61 6e 6e 6f 74 20 63 61 75 73 65 20 61 6e 79  cannot cause any
bf20: 20 74 72 69 67 67 65 72 73 20 74 6f 20 66 69 72   triggers to fir
bf30: 65 2e 20 42 79 20 63 6f 6e 74 72 61 73 74 2c 20  e. By contrast, 
bf40: 5e 61 6e 0a 69 6d 70 6c 69 63 69 74 20 44 45 4c  ^an.implicit DEL
bf50: 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c  ETE FROM &lt;tbl
bf60: 26 67 74 3b 20 64 6f 65 73 20 63 61 75 73 65 20  &gt; does cause 
bf70: 61 6e 79 20 63 6f 6e 66 69 67 75 72 65 64 0a 5b  any configured.[
bf80: 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69  foreign key acti
bf90: 6f 6e 73 5d 20 74 6f 20 74 61 6b 65 20 70 6c 61  ons] to take pla
bfa0: 63 65 2e 20 0a 5e 49 66 20 74 68 65 20 69 6d 70  ce. .^If the imp
bfb0: 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f  licit DELETE FRO
bfc0: 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 65 78  M &lt;tbl&gt; ex
bfd0: 65 63 75 74 65 64 0a 61 73 20 70 61 72 74 20 6f  ecuted.as part o
bfe0: 66 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63  f a DROP TABLE c
bff0: 6f 6d 6d 61 6e 64 20 76 69 6f 6c 61 74 65 73 20  ommand violates 
c000: 61 6e 79 20 69 6d 6d 65 64 69 61 74 65 20 66 6f  any immediate fo
c010: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
c020: 61 69 6e 74 73 2c 0a 61 6e 20 65 72 72 6f 72 20  aints,.an error 
c030: 69 73 20 72 65 74 75 72 6e 65 64 20 61 6e 64 20  is returned and 
c040: 74 68 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74  the table is not
c050: 20 64 72 6f 70 70 65 64 2e 20 5e 49 66 20 0a 74   dropped. ^If .t
c060: 68 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45  he implicit DELE
c070: 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26  TE FROM &lt;tbl&
c080: 67 74 3b 20 63 61 75 73 65 73 20 61 6e 79 20 0a  gt; causes any .
c090: 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e  deferred foreign
c0a0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
c0b0: 20 74 6f 20 62 65 20 76 69 6f 6c 61 74 65 64 2c   to be violated,
c0c0: 20 61 6e 64 20 74 68 65 20 76 69 6f 6c 61 74 69   and the violati
c0d0: 6f 6e 73 20 73 74 69 6c 6c 0a 65 78 69 73 74 20  ons still.exist 
c0e0: 77 68 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63  when the transac
c0f0: 74 69 6f 6e 20 69 73 20 63 6f 6d 6d 69 74 74 65  tion is committe
c100: 64 2c 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72  d, an error is r
c110: 65 74 75 72 6e 65 64 20 61 74 20 74 68 65 20 74  eturned at the t
c120: 69 6d 65 0a 6f 66 20 63 6f 6d 6d 69 74 2e 0a 0a  ime.of commit...
c130: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
c140: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c150: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c160: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c170: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c180: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52  ####.Section {DR
c190: 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70  OP TRIGGER} drop
c1a0: 74 72 69 67 67 65 72 20 7b 7b 44 52 4f 50 20 54  trigger {{DROP T
c1b0: 52 49 47 47 45 52 7d 7d 0a 0a 42 75 62 62 6c 65  RIGGER}}..Bubble
c1c0: 44 69 61 67 72 61 6d 20 64 72 6f 70 2d 74 72 69  Diagram drop-tri
c1d0: 67 67 65 72 2d 73 74 6d 74 20 31 0a 3c 2f 74 63  gger-stmt 1.</tc
c1e0: 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50  l>..<p>^The DROP
c1f0: 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d 65   TRIGGER stateme
c200: 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74 72 69  nt removes a tri
c210: 67 67 65 72 20 63 72 65 61 74 65 64 20 62 79 20  gger created by 
c220: 74 68 65 20 0a 5b 43 52 45 41 54 45 20 54 52 49  the .[CREATE TRI
c230: 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e  GGER] statement.
c240: 20 20 5e 54 68 65 20 74 72 69 67 67 65 72 20 69    ^The trigger i
c250: 73 20 0a 64 65 6c 65 74 65 64 20 66 72 6f 6d 20  s .deleted from 
c260: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
c270: 65 6d 61 2e 20 5e 4e 6f 74 65 20 74 68 61 74 20  ema. ^Note that 
c280: 74 72 69 67 67 65 72 73 20 61 72 65 20 61 75 74  triggers are aut
c290: 6f 6d 61 74 69 63 61 6c 6c 79 20 0a 64 72 6f 70  omatically .drop
c2a0: 70 65 64 20 77 68 65 6e 20 74 68 65 20 61 73 73  ped when the ass
c2b0: 6f 63 69 61 74 65 64 20 74 61 62 6c 65 20 69 73  ociated table is
c2c0: 20 64 72 6f 70 70 65 64 2e 3c 2f 70 3e 0a 0a 3c   dropped.</p>..<
c2d0: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
c2e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c2f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c320: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f  ###.Section {DRO
c330: 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65 77  P VIEW} dropview
c340: 20 7b 7b 44 52 4f 50 20 56 49 45 57 7d 7d 0a 0a   {{DROP VIEW}}..
c350: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72  BubbleDiagram dr
c360: 6f 70 2d 76 69 65 77 2d 73 74 6d 74 20 31 0a 3c  op-view-stmt 1.<
c370: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44  /tcl>..<p>^The D
c380: 52 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d 65  ROP VIEW stateme
c390: 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 76 69 65  nt removes a vie
c3a0: 77 20 63 72 65 61 74 65 64 20 62 79 20 74 68 65  w created by the
c3b0: 0a 5b 43 52 45 41 54 45 20 56 49 45 57 5d 20 73  .[CREATE VIEW] s
c3c0: 74 61 74 65 6d 65 6e 74 2e 20 20 5e 54 68 65 20  tatement.  ^The 
c3d0: 6e 61 6d 65 20 73 70 65 63 69 66 69 65 64 20 69  name specified i
c3e0: 73 20 74 68 65 20 0a 76 69 65 77 20 6e 61 6d 65  s the .view name
c3f0: 2e 20 20 5e 49 74 20 69 73 20 72 65 6d 6f 76 65  .  ^It is remove
c400: 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  d from the datab
c410: 61 73 65 20 73 63 68 65 6d 61 2c 20 62 75 74 20  ase schema, but 
c420: 6e 6f 20 61 63 74 75 61 6c 20 64 61 74 61 20 0a  no actual data .
c430: 69 6e 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  in the underlyin
c440: 67 20 62 61 73 65 20 74 61 62 6c 65 73 20 69 73  g base tables is
c450: 20 6d 6f 64 69 66 69 65 64 2e 3c 2f 70 3e 0a 0a   modified.</p>..
c460: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
c470: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c4a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c4b0: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 45 58 50  ####.Section EXP
c4c0: 4c 41 49 4e 20 65 78 70 6c 61 69 6e 20 45 58 50  LAIN explain EXP
c4d0: 4c 41 49 4e 0a 0a 42 75 62 62 6c 65 44 69 61 67  LAIN..BubbleDiag
c4e0: 72 61 6d 20 73 71 6c 2d 73 74 6d 74 0a 3c 2f 74  ram sql-stmt.</t
c4f0: 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 53 51 4c 20  cl>..<p>^An SQL 
c500: 73 74 61 74 65 6d 65 6e 74 20 63 61 6e 20 62 65  statement can be
c510: 20 70 72 65 63 65 64 65 64 20 62 79 20 74 68 65   preceded by the
c520: 20 6b 65 79 77 6f 72 64 20 22 45 58 50 4c 41 49   keyword "EXPLAI
c530: 4e 22 20 6f 72 0a 62 79 20 74 68 65 20 70 68 72  N" or.by the phr
c540: 61 73 65 20 22 45 58 50 4c 41 49 4e 20 51 55 45  ase "EXPLAIN QUE
c550: 52 59 20 50 4c 41 4e 22 2e 20 20 5e 45 69 74 68  RY PLAN".  ^Eith
c560: 65 72 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20  er modification 
c570: 63 61 75 73 65 73 20 74 68 65 0a 53 51 4c 20 73  causes the.SQL s
c580: 74 61 74 65 6d 65 6e 74 20 74 6f 20 62 65 68 61  tatement to beha
c590: 76 65 20 61 73 20 61 20 71 75 65 72 79 20 61 6e  ve as a query an
c5a0: 64 20 74 6f 20 72 65 74 75 72 6e 20 69 6e 66 6f  d to return info
c5b0: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 0a 68 6f  rmation about.ho
c5c0: 77 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  w the SQL statem
c5d0: 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20 6f  ent would have o
c5e0: 70 65 72 61 74 65 64 20 69 66 20 74 68 65 20 45  perated if the E
c5f0: 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20 6f  XPLAIN keyword o
c600: 72 0a 70 68 72 61 73 65 20 68 61 64 20 62 65 65  r.phrase had bee
c610: 6e 20 6f 6d 69 74 74 65 64 2e 3c 2f 70 3e 0a 0a  n omitted.</p>..
c620: 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 45 58 50  <p>^When the EXP
c630: 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20 61 70 70  LAIN keyword app
c640: 65 61 72 73 20 62 79 20 69 74 73 65 6c 66 20 69  ears by itself i
c650: 74 20 63 61 75 73 65 73 20 74 68 65 20 73 74 61  t causes the sta
c660: 74 65 6d 65 6e 74 0a 74 6f 20 62 65 68 61 76 65  tement.to behave
c670: 20 61 73 20 61 20 71 75 65 72 79 20 74 68 61 74   as a query that
c680: 20 72 65 74 75 72 6e 73 20 74 68 65 20 73 65 71   returns the seq
c690: 75 65 6e 63 65 20 6f 66 20 0a 5b 76 69 72 74 75  uence of .[virtu
c6a0: 61 6c 20 6d 61 63 68 69 6e 65 20 69 6e 73 74 72  al machine instr
c6b0: 75 63 74 69 6f 6e 73 5d 20 69 74 20 77 6f 75 6c  uctions] it woul
c6c0: 64 20 68 61 76 65 0a 75 73 65 64 20 74 6f 20 65  d have.used to e
c6d0: 78 65 63 75 74 65 20 74 68 65 20 63 6f 6d 6d 61  xecute the comma
c6e0: 6e 64 20 68 61 64 20 74 68 65 20 45 58 50 4c 41  nd had the EXPLA
c6f0: 49 4e 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 62  IN keyword not b
c700: 65 65 6e 20 70 72 65 73 65 6e 74 2e 0a 5e 57 68  een present..^Wh
c710: 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51  en the EXPLAIN Q
c720: 55 45 52 59 20 50 4c 41 4e 20 70 68 72 61 73 65  UERY PLAN phrase
c730: 20 61 70 70 65 61 72 73 2c 20 74 68 65 20 73 74   appears, the st
c740: 61 74 65 6d 65 6e 74 20 72 65 74 75 72 6e 73 0a  atement returns.
c750: 68 69 67 68 2d 6c 65 76 65 6c 20 69 6e 66 6f 72  high-level infor
c760: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 77 68 61  mation about wha
c770: 74 20 69 6e 64 69 63 65 73 20 77 6f 75 6c 64 20  t indices would 
c780: 68 61 76 65 20 62 65 65 6e 20 75 73 65 64 2e 3c  have been used.<
c790: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70  /p>..<p>The outp
c7a0: 75 74 20 66 72 6f 6d 20 45 58 50 4c 41 49 4e 20  ut from EXPLAIN 
c7b0: 61 6e 64 20 45 58 50 4c 41 49 4e 20 51 55 45 52  and EXPLAIN QUER
c7c0: 59 20 50 4c 41 4e 20 69 73 20 69 6e 74 65 6e 64  Y PLAN is intend
c7d0: 65 64 20 66 6f 72 0a 69 6e 74 65 72 61 63 74 69  ed for.interacti
c7e0: 76 65 20 61 6e 61 6c 79 73 69 73 20 61 6e 64 20  ve analysis and 
c7f0: 74 72 6f 75 62 6c 65 73 68 6f 6f 74 69 6e 67 20  troubleshooting 
c800: 6f 6e 6c 79 2e 20 20 54 68 65 20 64 65 74 61 69  only.  The detai
c810: 6c 73 20 6f 66 20 74 68 65 20 0a 6f 75 74 70 75  ls of the .outpu
c820: 74 20 66 6f 72 6d 61 74 20 61 72 65 20 73 75 62  t format are sub
c830: 6a 65 63 74 20 74 6f 20 63 68 61 6e 67 65 20 66  ject to change f
c840: 72 6f 6d 20 6f 6e 65 20 72 65 6c 65 61 73 65 20  rom one release 
c850: 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 74 68 65  of SQLite to the
c860: 20 6e 65 78 74 2e 0a 41 70 70 6c 69 63 61 74 69   next..Applicati
c870: 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74 20 75  ons should not u
c880: 73 65 20 45 58 50 4c 41 49 4e 20 6f 72 20 45 58  se EXPLAIN or EX
c890: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
c8a0: 20 73 69 6e 63 65 0a 74 68 65 69 72 20 65 78 61   since.their exa
c8b0: 63 74 20 62 65 68 61 76 69 6f 72 20 69 73 20 75  ct behavior is u
c8c0: 6e 64 6f 63 75 6d 65 6e 74 65 64 2c 20 75 6e 73  ndocumented, uns
c8d0: 70 65 63 69 66 69 65 64 2c 20 61 6e 64 20 76 61  pecified, and va
c8e0: 72 69 61 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63  riable.</p>..<tc
c8f0: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
c900: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c910: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c920: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c930: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c940: 23 0a 53 65 63 74 69 6f 6e 20 65 78 70 72 65 73  #.Section expres
c950: 73 69 6f 6e 20 65 78 70 72 20 7b 2a 65 78 70 72  sion expr {*expr
c960: 65 73 73 69 6f 6e 20 7b 65 78 70 72 65 73 73 69  ession {expressi
c970: 6f 6e 20 73 79 6e 74 61 78 7d 7d 0a 0a 42 75 62  on syntax}}..Bub
c980: 62 6c 65 44 69 61 67 72 61 6d 20 65 78 70 72 20  bleDiagram expr 
c990: 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  1.BubbleDiagram 
c9a0: 6c 69 74 65 72 61 6c 2d 76 61 6c 75 65 0a 42 75  literal-value.Bu
c9b0: 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69 67 6e  bbleDiagram sign
c9c0: 65 64 2d 6e 75 6d 62 65 72 0a 42 75 62 62 6c 65  ed-number.Bubble
c9d0: 44 69 61 67 72 61 6d 20 72 61 69 73 65 2d 66 75  Diagram raise-fu
c9e0: 6e 63 74 69 6f 6e 0a 3c 2f 74 63 6c 3e 0a 0a 3c  nction.</tcl>..<
c9f0: 70 3e 54 68 69 73 20 73 65 63 74 69 6f 6e 20 69  p>This section i
ca00: 73 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  s different from
ca10: 20 74 68 65 20 6f 74 68 65 72 73 2e 20 20 4d 6f   the others.  Mo
ca20: 73 74 20 6f 74 68 65 72 20 73 65 63 74 69 6f 6e  st other section
ca30: 73 20 6f 66 0a 74 68 69 73 20 64 6f 63 75 6d 65  s of.this docume
ca40: 6e 74 20 74 61 6c 6b 73 20 61 62 6f 75 74 20 61  nt talks about a
ca50: 20 70 61 72 74 69 63 75 6c 61 72 20 53 51 4c 20   particular SQL 
ca60: 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20 73  command.  This s
ca70: 65 63 74 69 6f 6e 20 64 6f 65 73 0a 6e 6f 74 20  ection does.not 
ca80: 74 61 6c 6b 20 61 62 6f 75 74 20 61 20 73 74 61  talk about a sta
ca90: 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61 6e 64 20  ndalone command 
caa0: 62 75 74 20 61 62 6f 75 74 20 22 65 78 70 72 65  but about "expre
cab0: 73 73 69 6f 6e 73 22 20 77 68 69 63 68 20 61 72  ssions" which ar
cac0: 65 20 0a 73 75 62 63 6f 6d 70 6f 6e 65 6e 74 73  e .subcomponents
cad0: 20 6f 66 20 6d 6f 73 74 20 6f 74 68 65 72 20 63   of most other c
cae0: 6f 6d 6d 61 6e 64 73 2e 3c 2f 70 3e 0a 0a 3c 74  ommands.</p>..<t
caf0: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62  cl>hd_fragment b
cb00: 69 6e 61 72 79 6f 70 73 20 7b 62 69 6e 61 72 79  inaryops {binary
cb10: 20 6f 70 65 72 61 74 6f 72 73 7d 3c 2f 74 63 6c   operators}</tcl
cb20: 3e 0a 3c 68 33 3e 4f 70 65 72 61 74 6f 72 73 3c  >.<h3>Operators<
cb30: 2f 68 33 3e 0a 3c 70 3e 5e 28 53 51 4c 69 74 65  /h3>.<p>^(SQLite
cb40: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 74 68 65   understands the
cb50: 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 69 6e 61 72   following binar
cb60: 79 20 6f 70 65 72 61 74 6f 72 73 2c 20 69 6e 20  y operators, in 
cb70: 6f 72 64 65 72 20 66 72 6f 6d 0a 68 69 67 68 65  order from.highe
cb80: 73 74 20 74 6f 20 6c 6f 77 65 73 74 20 70 72 65  st to lowest pre
cb90: 63 65 64 65 6e 63 65 3a 3c 2f 70 3e 0a 0a 3c 62  cedence:</p>..<b
cba0: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
cbb0: 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32 63  <font color="#2c
cbc0: 32 63 66 30 22 3e 3c 62 69 67 3e 7c 7c 0a 2a 20  2cf0"><big>||.* 
cbd0: 20 20 20 2f 20 20 20 20 25 0a 2b 20 20 20 20 2d     /    %.+    -
cbe0: 0a 26 6c 74 3b 26 6c 74 3b 20 20 20 26 67 74 3b  .&lt;&lt;   &gt;
cbf0: 26 67 74 3b 20 20 20 26 61 6d 70 3b 20 20 20 20  &gt;   &amp;    
cc00: 7c 0a 26 6c 74 3b 20 20 20 20 26 6c 74 3b 3d 20  |.&lt;    &lt;= 
cc10: 20 20 26 67 74 3b 20 20 20 20 26 67 74 3b 3d 0a    &gt;    &gt;=.
cc20: 3d 20 20 20 20 3d 3d 20 20 20 21 3d 20 20 20 26  =    ==   !=   &
cc30: 6c 74 3b 26 67 74 3b 20 20 20 3c 2f 62 69 67 3e  lt;&gt;   </big>
cc40: 49 53 20 20 20 49 53 20 4e 4f 54 20 20 20 49 4e  IS   IS NOT   IN
cc50: 20 20 20 4c 49 4b 45 20 20 20 47 4c 4f 42 20 20     LIKE   GLOB  
cc60: 20 4d 41 54 43 48 20 20 20 52 45 47 45 58 50 0a   MATCH   REGEXP.
cc70: 41 4e 44 20 20 20 0a 4f 52 3c 2f 66 6f 6e 74 3e  AND   .OR</font>
cc80: 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
cc90: 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 28 53 75 70  ote>)^..<p>^(Sup
cca0: 70 6f 72 74 65 64 20 75 6e 61 72 79 20 70 72 65  ported unary pre
ccb0: 66 69 78 20 6f 70 65 72 61 74 6f 72 73 20 61 72  fix operators ar
ccc0: 65 20 74 68 65 73 65 3a 3c 2f 70 3e 0a 0a 3c 62  e these:</p>..<b
ccd0: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
cce0: 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32 63  <font color="#2c
ccf0: 32 63 66 30 22 3e 3c 62 69 67 3e 2d 20 20 20 20  2cf0"><big>-    
cd00: 2b 20 20 20 20 7e 20 20 20 20 4e 4f 54 3c 2f 62  +    ~    NOT</b
cd10: 69 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65  ig></font>.</pre
cd20: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  ></blockquote>)^
cd30: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
cd40: 6e 74 20 63 6f 6c 6c 61 74 65 6f 70 20 7b 43 4f  nt collateop {CO
cd50: 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 7d 3c  LLATE operator}<
cd60: 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 43 4f  /tcl>.<p>^The CO
cd70: 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 69  LLATE operator i
cd80: 73 20 61 20 75 6e 61 72 79 20 70 6f 73 74 66 69  s a unary postfi
cd90: 78 0a 6f 70 65 72 61 74 6f 72 20 74 68 61 74 20  x.operator that 
cda0: 61 73 73 69 67 6e 73 20 61 20 5b 63 6f 6c 6c 61  assigns a [colla
cdb0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 5d 20 74  ting sequence] t
cdc0: 6f 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e  o an expression.
cdd0: 0a 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70  .^The COLLATE op
cde0: 65 72 61 74 6f 72 20 68 61 73 20 61 20 68 69 67  erator has a hig
cdf0: 68 65 72 20 70 72 65 63 65 64 65 6e 63 65 20 28  her precedence (
ce00: 62 69 6e 64 73 20 6d 6f 72 65 20 74 69 67 68 74  binds more tight
ce10: 6c 79 29 20 74 68 61 6e 20 61 6e 79 0a 70 72 65  ly) than any.pre
ce20: 66 69 78 20 75 6e 61 72 79 20 6f 70 65 72 61 74  fix unary operat
ce30: 6f 72 20 6f 72 20 61 6e 79 20 62 69 6e 61 72 79  or or any binary
ce40: 20 6f 70 65 72 61 74 6f 72 2e 0a 5e 54 68 65 20   operator..^The 
ce50: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
ce60: 63 65 20 73 65 74 20 62 79 20 74 68 65 20 43 4f  ce set by the CO
ce70: 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 6f  LLATE operator o
ce80: 76 65 72 72 69 64 65 73 20 74 68 65 0a 63 6f 6c  verrides the.col
ce90: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
cea0: 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
ceb0: 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65  e COLLATE clause
cec0: 20 69 6e 20 61 20 74 61 62 6c 65 0a 5b 63 6f 6c   in a table.[col
ced0: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 5d 2e  umn definition].
cee0: 0a 53 65 65 20 74 68 65 20 5b 63 6f 6c 6c 61 74  .See the [collat
cef0: 69 6e 67 20 73 65 71 75 65 6e 63 65 7c 20 64 65  ing sequence| de
cf00: 74 61 69 6c 65 64 20 64 69 73 63 75 73 73 69 6f  tailed discussio
cf10: 6e 20 6f 6e 20 63 6f 6c 6c 61 74 69 6e 67 20 73  n on collating s
cf20: 65 71 75 65 6e 63 65 73 5d 0a 69 6e 20 74 68 65  equences].in the
cf30: 20 5b 64 61 74 61 74 79 70 65 20 7c 20 44 61 74   [datatype | Dat
cf40: 61 74 79 70 65 20 49 6e 20 53 51 4c 69 74 65 33  atype In SQLite3
cf50: 5d 20 64 6f 63 75 6d 65 6e 74 20 66 6f 72 20 61  ] document for a
cf60: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
cf70: 61 74 69 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63  ation..</p>..<tc
cf80: 6c 3e 68 64 5f 70 75 74 73 20 22 0a 3c 70 3e 5e  l>hd_puts ".<p>^
cf90: 54 68 65 20 75 6e 61 72 79 20 6f 70 65 72 61 74  The unary operat
cfa0: 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 2b 5d 20  or [Operator +] 
cfb0: 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 5e 49 74  is a no-op.  ^It
cfc0: 20 63 61 6e 20 62 65 20 61 70 70 6c 69 65 64 0a   can be applied.
cfd0: 74 6f 20 73 74 72 69 6e 67 73 2c 20 6e 75 6d 62  to strings, numb
cfe0: 65 72 73 2c 20 62 6c 6f 62 73 20 6f 72 20 4e 55  ers, blobs or NU
cff0: 4c 4c 20 61 6e 64 20 69 74 20 61 6c 77 61 79 73  LL and it always
d000: 20 72 65 74 75 72 6e 73 20 61 20 72 65 73 75 6c   returns a resul
d010: 74 0a 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  t.with the same 
d020: 76 61 6c 75 65 20 61 73 20 74 68 65 20 6f 70 65  value as the ope
d030: 72 61 6e 64 2e 3c 2f 70 3e 22 3c 2f 74 63 6c 3e  rand.</p>"</tcl>
d040: 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20 74  ..<p>Note that t
d050: 68 65 72 65 20 61 72 65 20 74 77 6f 20 76 61 72  here are two var
d060: 69 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 65  iations of the e
d070: 71 75 61 6c 73 20 61 6e 64 20 6e 6f 74 20 65 71  quals and not eq
d080: 75 61 6c 73 0a 6f 70 65 72 61 74 6f 72 73 2e 20  uals.operators. 
d090: 20 5e 45 71 75 61 6c 73 20 63 61 6e 20 62 65 20   ^Equals can be 
d0a0: 65 69 74 68 65 72 0a 0a 3c 74 63 6c 3e 0a 68 64  either..<tcl>.hd
d0b0: 5f 70 75 74 73 20 22 5b 4f 70 65 72 61 74 6f 72  _puts "[Operator
d0c0: 20 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72   =] or [Operator
d0d0: 20 3d 3d 5d 2e 0a 5e 54 68 65 20 6e 6f 6e 2d 65   ==]..^The non-e
d0e0: 71 75 61 6c 73 20 6f 70 65 72 61 74 6f 72 20 63  quals operator c
d0f0: 61 6e 20 62 65 20 65 69 74 68 65 72 0a 5b 4f 70  an be either.[Op
d100: 65 72 61 74 6f 72 20 21 3d 5d 20 6f 72 20 5b 4f  erator !=] or [O
d110: 70 65 72 61 74 6f 72 20 7b 26 6c 74 3b 26 67 74  perator {&lt;&gt
d120: 3b 7d 5d 2e 0a 5e 54 68 65 20 5b 4f 70 65 72 61  ;}]..^The [Opera
d130: 74 6f 72 20 7c 7c 5d 20 6f 70 65 72 61 74 6f 72  tor ||] operator
d140: 20 69 73 20 5c 22 63 6f 6e 63 61 74 65 6e 61 74   is \"concatenat
d150: 65 5c 22 20 2d 20 69 74 20 6a 6f 69 6e 73 20 74  e\" - it joins t
d160: 6f 67 65 74 68 65 72 0a 74 68 65 20 74 77 6f 20  ogether.the two 
d170: 73 74 72 69 6e 67 73 20 6f 66 20 69 74 73 20 6f  strings of its o
d180: 70 65 72 61 6e 64 73 2e 0a 5e 54 68 65 20 6f 70  perands..^The op
d190: 65 72 61 74 6f 72 20 5b 4f 70 65 72 61 74 6f 72  erator [Operator
d1a0: 20 25 5d 20 6f 75 74 70 75 74 73 20 74 68 65 20   %] outputs the 
d1b0: 76 61 6c 75 65 20 6f 66 20 69 74 73 20 6c 65 66  value of its lef
d1c0: 74 20 0a 6f 70 65 72 61 6e 64 20 6d 6f 64 75 6c  t .operand modul
d1d0: 6f 20 69 74 73 20 72 69 67 68 74 20 6f 70 65 72  o its right oper
d1e0: 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  and.</p>..<p>^Th
d1f0: 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 79 20  e result of any 
d200: 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20  binary operator 
d210: 69 73 20 65 69 74 68 65 72 20 61 20 6e 75 6d 65  is either a nume
d220: 72 69 63 20 76 61 6c 75 65 20 6f 72 20 0a 4e 55  ric value or .NU
d230: 4c 4c 2c 20 65 78 63 65 70 74 20 66 6f 72 20 74  LL, except for t
d240: 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d  he [Operator ||]
d250: 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f   concatenation o
d260: 70 65 72 61 74 6f 72 20 77 68 69 63 68 20 61 6c  perator which al
d270: 77 61 79 73 20 0a 65 76 61 6c 75 61 74 65 73 20  ways .evaluates 
d280: 74 6f 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f  to either NULL o
d290: 72 20 61 20 74 65 78 74 20 76 61 6c 75 65 2e 3c  r a text value.<
d2a0: 2f 70 3e 22 0a 0a 68 64 5f 66 72 61 67 6d 65 6e  /p>"..hd_fragmen
d2b0: 74 20 7b 69 73 69 73 6e 6f 74 7d 20 7b 49 53 20  t {isisnot} {IS 
d2c0: 6f 70 65 72 61 74 6f 72 7d 20 7b 49 53 20 4e 4f  operator} {IS NO
d2d0: 54 20 6f 70 65 72 61 74 6f 72 7d 0a 0a 68 64 5f  T operator}..hd_
d2e0: 70 75 74 73 20 22 3c 70 3e 5e 54 68 65 20 5b 4f  puts "<p>^The [O
d2f0: 70 65 72 61 74 6f 72 20 49 53 5d 20 61 6e 64 20  perator IS] and 
d300: 5b 4f 70 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f  [Operator {IS NO
d310: 54 7d 5d 20 6f 70 65 72 61 74 6f 72 73 20 77 6f  T}] operators wo
d320: 72 6b 0a 6c 69 6b 65 20 5b 4f 70 65 72 61 74 6f  rk.like [Operato
d330: 72 20 3d 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74  r =] and [Operat
d340: 6f 72 20 21 3d 5d 20 65 78 63 65 70 74 20 77 68  or !=] except wh
d350: 65 6e 20 6f 6e 65 20 6f 72 20 62 6f 74 68 20 6f  en one or both o
d360: 66 20 74 68 65 0a 6f 70 65 72 61 6e 64 73 20 61  f the.operands a
d370: 72 65 20 4e 55 4c 4c 2e 20 5e 49 6e 20 74 68 69  re NULL. ^In thi
d380: 73 20 63 61 73 65 2c 20 69 66 20 62 6f 74 68 20  s case, if both 
d390: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
d3a0: 4c 2c 20 74 68 65 6e 20 74 68 65 0a 49 53 20 6f  L, then the.IS o
d3b0: 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65  perator evaluate
d3c0: 73 20 74 6f 20 31 20 28 74 72 75 65 29 20 61 6e  s to 1 (true) an
d3d0: 64 20 74 68 65 20 49 53 20 4e 4f 54 20 6f 70 65  d the IS NOT ope
d3e0: 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73 0a  rator evaluates.
d3f0: 74 6f 20 30 20 28 66 61 6c 73 65 29 2e 20 5e 49  to 0 (false). ^I
d400: 66 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73  f one operand is
d410: 20 4e 55 4c 4c 20 61 6e 64 20 74 68 65 20 6f 74   NULL and the ot
d420: 68 65 72 20 69 73 20 6e 6f 74 2c 20 74 68 65 6e  her is not, then
d430: 20 74 68 65 0a 49 53 20 6f 70 65 72 61 74 6f 72   the.IS operator
d440: 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 30 20   evaluates to 0 
d450: 28 66 61 6c 73 65 29 20 61 6e 64 20 74 68 65 20  (false) and the 
d460: 49 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f 72 20  IS NOT operator 
d470: 69 73 20 31 20 28 74 72 75 65 29 2e 0a 5e 49 74  is 1 (true)..^It
d480: 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
d490: 20 66 6f 72 20 61 6e 20 49 53 20 6f 72 20 49 53   for an IS or IS
d4a0: 20 4e 4f 54 20 65 78 70 72 65 73 73 69 6f 6e 20   NOT expression 
d4b0: 74 6f 20 65 76 61 6c 75 61 74 65 20 74 6f 20 4e  to evaluate to N
d4c0: 55 4c 4c 2e 0a 5e 4f 70 65 72 61 74 6f 72 73 20  ULL..^Operators 
d4d0: 5b 4f 70 65 72 61 74 6f 72 20 49 53 5d 20 61 6e  [Operator IS] an
d4e0: 64 20 5b 4f 70 65 72 61 74 6f 72 20 7b 49 53 20  d [Operator {IS 
d4f0: 4e 4f 54 7d 5d 20 68 61 76 65 20 74 68 65 20 73  NOT}] have the s
d500: 61 6d 65 20 0a 70 72 65 63 65 64 65 6e 63 65 20  ame .precedence 
d510: 61 73 20 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 2e  as [Operator =].
d520: 22 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  "..<tcl>hd_fragm
d530: 65 6e 74 20 6c 69 74 76 61 6c 75 65 20 7b 6c 69  ent litvalue {li
d540: 74 65 72 61 6c 20 76 61 6c 75 65 7d 3c 2f 74 63  teral value}</tc
d550: 6c 3e 0a 3c 68 33 3e 4c 69 74 65 72 61 6c 20 56  l>.<h3>Literal V
d560: 61 6c 75 65 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 5e  alues</h3>.<p>.^
d570: 41 20 6c 69 74 65 72 61 6c 20 76 61 6c 75 65 20  A literal value 
d580: 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 66  is a constant of
d590: 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 5e 4c 69 74   some kind..^Lit
d5a0: 65 72 61 6c 20 76 61 6c 75 65 73 20 6d 61 79 20  eral values may 
d5b0: 62 65 20 69 6e 74 65 67 65 72 73 2c 20 66 6c 6f  be integers, flo
d5c0: 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62  ating point numb
d5d0: 65 72 73 2c 20 73 74 72 69 6e 67 73 2c 0a 42 4c  ers, strings,.BL
d5e0: 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e 0a 5e  OBs, or NULLs..^
d5f0: 53 63 69 65 6e 74 69 66 69 63 20 6e 6f 74 61 74  Scientific notat
d600: 69 6f 6e 20 69 73 20 73 75 70 70 6f 72 74 65 64  ion is supported
d610: 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 20 70 6f   for floating po
d620: 69 6e 74 20 6c 69 74 65 72 61 6c 20 76 61 6c 75  int literal valu
d630: 65 73 2e 0a 5e 28 54 68 65 20 22 2e 22 20 63 68  es..^(The "." ch
d640: 61 72 61 63 74 65 72 20 69 73 20 61 6c 77 61 79  aracter is alway
d650: 73 20 75 73 65 64 20 0a 61 73 20 74 68 65 20 64  s used .as the d
d660: 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 65 76 65  ecimal point eve
d670: 6e 20 69 66 20 74 68 65 20 6c 6f 63 61 6c 65 20  n if the locale 
d680: 73 65 74 74 69 6e 67 20 73 70 65 63 69 66 69 65  setting specifie
d690: 73 20 22 2c 22 20 66 6f 72 0a 74 68 69 73 20 72  s "," for.this r
d6a0: 6f 6c 65 20 2d 20 74 68 65 20 75 73 65 20 6f 66  ole - the use of
d6b0: 20 22 2c 22 20 66 6f 72 20 74 68 65 20 64 65 63   "," for the dec
d6c0: 69 6d 61 6c 20 70 6f 69 6e 74 20 77 6f 75 6c 64  imal point would
d6d0: 20 72 65 73 75 6c 74 20 69 6e 0a 73 79 6e 74 61   result in.synta
d6e0: 63 74 69 63 20 61 6d 62 69 67 75 69 74 79 2e 29  ctic ambiguity.)
d6f0: 5e 20 20 5e 41 20 73 74 72 69 6e 67 20 63 6f 6e  ^  ^A string con
d700: 73 74 61 6e 74 20 69 73 20 66 6f 72 6d 65 64 20  stant is formed 
d710: 62 79 20 65 6e 63 6c 6f 73 69 6e 67 20 74 68 65  by enclosing the
d720: 0a 73 74 72 69 6e 67 20 69 6e 20 73 69 6e 67 6c  .string in singl
d730: 65 20 71 75 6f 74 65 73 20 28 27 29 2e 20 20 5e  e quotes (').  ^
d740: 41 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 20 77  A single quote w
d750: 69 74 68 69 6e 20 74 68 65 20 73 74 72 69 6e 67  ithin the string
d760: 20 63 61 6e 0a 62 65 20 65 6e 63 6f 64 65 64 20   can.be encoded 
d770: 62 79 20 70 75 74 74 69 6e 67 20 74 77 6f 20 73  by putting two s
d780: 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 69 6e 20  ingle quotes in 
d790: 61 20 72 6f 77 20 2d 20 61 73 20 69 6e 20 50 61  a row - as in Pa
d7a0: 73 63 61 6c 2e 0a 43 2d 73 74 79 6c 65 20 65 73  scal..C-style es
d7b0: 63 61 70 65 73 20 75 73 69 6e 67 20 74 68 65 20  capes using the 
d7c0: 62 61 63 6b 73 6c 61 73 68 20 63 68 61 72 61 63  backslash charac
d7d0: 74 65 72 20 61 72 65 20 6e 6f 74 20 73 75 70 70  ter are not supp
d7e0: 6f 72 74 65 64 20 62 65 63 61 75 73 65 0a 74 68  orted because.th
d7f0: 65 79 20 61 72 65 20 6e 6f 74 20 73 74 61 6e 64  ey are not stand
d800: 61 72 64 20 53 51 4c 2e 0a 5e 42 4c 4f 42 20 6c  ard SQL..^BLOB l
d810: 69 74 65 72 61 6c 73 20 61 72 65 20 73 74 72 69  iterals are stri
d820: 6e 67 20 6c 69 74 65 72 61 6c 73 20 63 6f 6e 74  ng literals cont
d830: 61 69 6e 69 6e 67 20 68 65 78 61 64 65 63 69 6d  aining hexadecim
d840: 61 6c 20 64 61 74 61 20 61 6e 64 0a 70 72 65 63  al data and.prec
d850: 65 64 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65  eded by a single
d860: 20 22 78 22 20 6f 72 20 22 58 22 20 63 68 61 72   "x" or "X" char
d870: 61 63 74 65 72 2e 20 20 5e 28 46 6f 72 20 65 78  acter.  ^(For ex
d880: 61 6d 70 6c 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  ample:</p>..<blo
d890: 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 58 27  ckquote><pre>.X'
d8a0: 35 33 35 31 34 43 36 39 37 34 36 35 27 0a 3c 2f  53514C697465'.</
d8b0: 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
d8c0: 3e 29 5e 0a 0a 3c 70 3e 0a 5e 41 20 6c 69 74 65  >)^..<p>.^A lite
d8d0: 72 61 6c 20 76 61 6c 75 65 20 63 61 6e 20 61 6c  ral value can al
d8e0: 73 6f 20 62 65 20 74 68 65 20 74 6f 6b 65 6e 20  so be the token 
d8f0: 22 4e 55 4c 4c 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74  "NULL"..</p>..<t
d900: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76  cl>hd_fragment v
d910: 61 72 70 61 72 61 6d 20 70 61 72 61 6d 65 74 65  arparam paramete
d920: 72 20 70 61 72 61 6d 65 74 65 72 73 20 7b 62 6f  r parameters {bo
d930: 75 6e 64 20 70 61 72 61 6d 65 74 65 72 7d 20 7b  und parameter} {
d940: 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73  bound parameters
d950: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 50 61 72 61  }</tcl>.<h3>Para
d960: 6d 65 74 65 72 73 3c 2f 68 33 3e 0a 3c 70 3e 0a  meters</h3>.<p>.
d970: 41 20 22 76 61 72 69 61 62 6c 65 22 20 6f 72 20  A "variable" or 
d980: 22 70 61 72 61 6d 65 74 65 72 22 20 74 6f 6b 65  "parameter" toke
d990: 6e 0a 73 70 65 63 69 66 69 65 73 20 61 20 70 6c  n.specifies a pl
d9a0: 61 63 65 68 6f 6c 64 65 72 20 69 6e 20 74 68 65  aceholder in the
d9b0: 20 65 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20   expression for 
d9c0: 61 20 0a 76 61 6c 75 65 20 74 68 61 74 20 69 73  a .value that is
d9d0: 20 66 69 6c 6c 65 64 20 69 6e 20 61 74 20 72 75   filled in at ru
d9e0: 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65 0a  ntime using the.
d9f0: 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c  [sqlite3_bind_bl
da00: 6f 62 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62  ob() | sqlite3_b
da10: 69 6e 64 28 29 5d 20 66 61 6d 69 6c 79 20 6f 66  ind()] family of
da20: 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65   C/C++ interface
da30: 73 2e 0a 50 61 72 61 6d 65 74 65 72 73 20 63 61  s..Parameters ca
da40: 6e 20 74 61 6b 65 20 73 65 76 65 72 61 6c 20 66  n take several f
da50: 6f 72 6d 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  orms:.</p>..<blo
da60: 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e  ckquote>.<table>
da70: 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
da80: 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22  "right" valign="
da90: 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 69 3e  top"><b>?</b><i>
daa0: 4e 4e 4e 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20  NNN</i></td><td 
dab0: 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e  width="20"></td>
dac0: 0a 3c 74 64 3e 5e 28 41 20 71 75 65 73 74 69 6f  .<td>^(A questio
dad0: 6e 20 6d 61 72 6b 20 66 6f 6c 6c 6f 77 65 64 20  n mark followed 
dae0: 62 79 20 61 20 6e 75 6d 62 65 72 20 3c 69 3e 4e  by a number <i>N
daf0: 4e 4e 3c 2f 69 3e 20 68 6f 6c 64 73 20 61 20 73  NN</i> holds a s
db00: 70 6f 74 20 66 6f 72 20 74 68 65 0a 4e 4e 4e 2d  pot for the.NNN-
db10: 74 68 20 70 61 72 61 6d 65 74 65 72 2e 20 20 4e  th parameter.  N
db20: 4e 4e 20 6d 75 73 74 20 62 65 20 62 65 74 77 65  NN must be betwe
db30: 65 6e 20 31 20 61 6e 64 20 5b 53 51 4c 49 54 45  en 1 and [SQLITE
db40: 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
db50: 4d 42 45 52 5d 2e 29 5e 0a 3c 2f 74 64 3e 0a 3c  MBER].)^.</td>.<
db60: 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  /tr>.<tr>.<td al
db70: 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69  ign="right" vali
db80: 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62  gn="top"><b>?</b
db90: 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d  ></td><td width=
dba0: 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e  "20"></td>.<td>^
dbb0: 41 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20  A question mark 
dbc0: 74 68 61 74 20 69 73 20 6e 6f 74 20 66 6f 6c 6c  that is not foll
dbd0: 6f 77 65 64 20 62 79 20 61 20 6e 75 6d 62 65 72  owed by a number
dbe0: 20 63 72 65 61 74 65 73 20 61 20 70 61 72 61 6d   creates a param
dbf0: 65 74 65 72 0a 77 69 74 68 20 61 20 6e 75 6d 62  eter.with a numb
dc00: 65 72 20 6f 6e 65 20 67 72 65 61 74 65 72 20 74  er one greater t
dc10: 68 61 6e 20 74 68 65 20 6c 61 72 67 65 73 74 20  han the largest 
dc20: 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72  parameter number
dc30: 20 61 6c 72 65 61 64 79 20 61 73 73 69 67 6e 65   already assigne
dc40: 64 2e 0a 5e 49 66 20 74 68 69 73 20 6d 65 61 6e  d..^If this mean
dc50: 73 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20  s the parameter 
dc60: 6e 75 6d 62 65 72 20 69 73 20 67 72 65 61 74 65  number is greate
dc70: 72 20 74 68 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d  r than.[SQLITE_M
dc80: 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
dc90: 45 52 5d 2c 20 69 74 20 69 73 20 61 6e 20 65 72  ER], it is an er
dca0: 72 6f 72 2e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  ror..</td>.</tr>
dcb0: 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
dcc0: 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22  "right" valign="
dcd0: 74 6f 70 22 3e 3c 62 3e 3a 3c 2f 62 3e 3c 69 3e  top"><b>:</b><i>
dce0: 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64  AAAA</i></td><td
dcf0: 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64   width="20"></td
dd00: 3e 0a 3c 74 64 3e 5e 41 20 63 6f 6c 6f 6e 20 66  >.<td>^A colon f
dd10: 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 69 64  ollowed by an id
dd20: 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 68 6f  entifier name ho
dd30: 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20 61  lds a spot for a
dd40: 20 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   .[sqlite3_bind_
dd50: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 7c 6e  parameter_name|n
dd60: 61 6d 65 64 20 70 61 72 61 6d 65 74 65 72 5d 20  amed parameter] 
dd70: 77 69 74 68 20 74 68 65 20 6e 61 6d 65 20 3a 41  with the name :A
dd80: 41 41 41 2e 20 20 0a 5e 28 4e 61 6d 65 64 20 70  AAA.  .^(Named p
dd90: 61 72 61 6d 65 74 65 72 73 20 61 72 65 20 61 6c  arameters are al
dda0: 73 6f 20 6e 75 6d 62 65 72 65 64 2e 20 54 68 65  so numbered. The
ddb0: 20 6e 75 6d 62 65 72 20 61 73 73 69 67 6e 65 64   number assigned
ddc0: 20 69 73 20 6f 6e 65 20 67 72 65 61 74 65 72 20   is one greater 
ddd0: 74 68 61 6e 0a 74 68 65 20 6c 61 72 67 65 73 74  than.the largest
dde0: 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65   parameter numbe
ddf0: 72 20 61 6c 72 65 61 64 79 20 61 73 73 69 67 6e  r already assign
de00: 65 64 2e 29 5e 20 5e 49 66 20 74 68 69 73 20 6d  ed.)^ ^If this m
de10: 65 61 6e 73 20 74 68 65 20 70 61 72 61 6d 65 74  eans the paramet
de20: 65 72 0a 77 6f 75 6c 64 20 62 65 20 61 73 73 69  er.would be assi
de30: 67 6e 65 64 20 61 20 6e 75 6d 62 65 72 20 67 72  gned a number gr
de40: 65 61 74 65 72 20 74 68 61 6e 20 5b 53 51 4c 49  eater than [SQLI
de50: 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
de60: 4e 55 4d 42 45 52 5d 2c 20 69 74 20 69 73 0a 61  NUMBER], it is.a
de70: 6e 20 65 72 72 6f 72 2e 20 54 6f 20 61 76 6f 69  n error. To avoi
de80: 64 20 63 6f 6e 66 75 73 69 6f 6e 2c 20 69 74 20  d confusion, it 
de90: 69 73 20 62 65 73 74 20 74 6f 20 61 76 6f 69 64  is best to avoid
dea0: 20 6d 69 78 69 6e 67 20 6e 61 6d 65 64 20 61 6e   mixing named an
deb0: 64 20 6e 75 6d 62 65 72 65 64 0a 70 61 72 61 6d  d numbered.param
dec0: 65 74 65 72 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72  eters.</td>.</tr
ded0: 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  >.<tr>.<td align
dee0: 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d  ="right" valign=
def0: 22 74 6f 70 22 3e 3c 62 3e 40 3c 2f 62 3e 3c 69  "top"><b>@</b><i
df00: 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74  >AAAA</i></td><t
df10: 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74  d width="20"></t
df20: 64 3e 0a 3c 74 64 3e 5e 41 6e 20 22 61 74 22 20  d>.<td>^An "at" 
df30: 73 69 67 6e 20 77 6f 72 6b 73 20 65 78 61 63 74  sign works exact
df40: 6c 79 20 6c 69 6b 65 20 61 20 63 6f 6c 6f 6e 2c  ly like a colon,
df50: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
df60: 20 6e 61 6d 65 20 6f 66 0a 74 68 65 20 70 61 72   name of.the par
df70: 61 6d 65 74 65 72 20 63 72 65 61 74 65 64 20 69  ameter created i
df80: 73 20 40 41 41 41 41 2e 3c 2f 74 64 3e 0a 3c 2f  s @AAAA.</td>.</
df90: 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  tr>.<tr>.<td ali
dfa0: 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67  gn="right" valig
dfb0: 6e 3d 22 74 6f 70 22 3e 3c 62 3e 24 3c 2f 62 3e  n="top"><b>$</b>
dfc0: 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e  <i>AAAA</i></td>
dfd0: 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c  <td width="20"><
dfe0: 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 64 6f 6c 6c  /td>.<td>^A doll
dff0: 61 72 2d 73 69 67 6e 20 66 6f 6c 6c 6f 77 65 64  ar-sign followed
e000: 20 62 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65   by an identifie
e010: 72 20 6e 61 6d 65 20 61 6c 73 6f 20 68 6f 6c 64  r name also hold
e020: 73 20 61 20 73 70 6f 74 20 66 6f 72 20 61 20 6e  s a spot for a n
e030: 61 6d 65 64 0a 70 61 72 61 6d 65 74 65 72 20 77  amed.parameter w
e040: 69 74 68 20 74 68 65 20 6e 61 6d 65 20 24 41 41  ith the name $AA
e050: 41 41 2e 20 20 5e 28 54 68 65 20 69 64 65 6e 74  AA.  ^(The ident
e060: 69 66 69 65 72 20 6e 61 6d 65 20 69 6e 20 74 68  ifier name in th
e070: 69 73 20 63 61 73 65 20 63 61 6e 20 69 6e 63 6c  is case can incl
e080: 75 64 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ude.one or more 
e090: 6f 63 63 75 72 72 65 6e 63 65 73 20 6f 66 20 22  occurrences of "
e0a0: 3a 3a 22 20 61 6e 64 20 61 20 73 75 66 66 69 78  ::" and a suffix
e0b0: 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 22 28 2e   enclosed in "(.
e0c0: 2e 2e 29 22 20 63 6f 6e 74 61 69 6e 69 6e 67 0a  ..)" containing.
e0d0: 61 6e 79 20 74 65 78 74 20 61 74 20 61 6c 6c 2e  any text at all.
e0e0: 29 5e 20 20 54 68 69 73 20 73 79 6e 74 61 78 20  )^  This syntax 
e0f0: 69 73 20 74 68 65 20 66 6f 72 6d 20 6f 66 20 61  is the form of a
e100: 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 20 69   variable name i
e110: 6e 20 74 68 65 0a 5b 68 74 74 70 3a 2f 2f 77 77  n the.[http://ww
e120: 77 2e 74 63 6c 2e 74 6b 2f 20 7c 20 54 63 6c 20  w.tcl.tk/ | Tcl 
e130: 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e 67  programming lang
e140: 75 61 67 65 5d 2e 20 20 54 68 65 20 70 72 65 73  uage].  The pres
e150: 65 6e 63 65 0a 6f 66 20 74 68 69 73 20 73 79 6e  ence.of this syn
e160: 74 61 78 20 72 65 73 75 6c 74 73 20 66 72 6f 6d  tax results from
e170: 20 74 68 65 20 66 61 63 74 20 74 68 61 74 20 53   the fact that S
e180: 51 4c 69 74 65 20 69 73 20 72 65 61 6c 6c 79 20  QLite is really 
e190: 61 20 0a 5b 54 63 6c 20 65 78 74 65 6e 73 69 6f  a .[Tcl extensio
e1a0: 6e 5d 20 74 68 61 74 20 68 61 73 20 65 73 63 61  n] that has esca
e1b0: 70 65 64 20 69 6e 74 6f 20 74 68 65 20 77 69 6c  ped into the wil
e1c0: 64 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f  d.</td>.</tr>.</
e1d0: 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75  table>.</blockqu
e1e0: 6f 74 65 3e 0a 0a 3c 70 3e 5e 50 61 72 61 6d 65  ote>..<p>^Parame
e1f0: 74 65 72 73 20 74 68 61 74 20 61 72 65 20 6e 6f  ters that are no
e200: 74 20 61 73 73 69 67 6e 65 64 20 76 61 6c 75 65  t assigned value
e210: 73 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33  s using.[sqlite3
e220: 5f 62 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20 73  _bind_blob() | s
e230: 71 6c 69 74 65 33 5f 62 69 6e 64 28 29 5d 20 61  qlite3_bind()] a
e240: 72 65 20 74 72 65 61 74 65 64 0a 61 73 20 4e 55  re treated.as NU
e250: 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  LL.</p>..<tcl>hd
e260: 5f 66 72 61 67 6d 65 6e 74 20 6c 69 6b 65 20 4c  _fragment like L
e270: 49 4b 45 20 45 53 43 41 50 45 3c 2f 74 63 6c 3e  IKE ESCAPE</tcl>
e280: 0a 3c 68 33 3e 54 68 65 20 4c 49 4b 45 20 61 6e  .<h3>The LIKE an
e290: 64 20 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72 73  d GLOB operators
e2a0: 3c 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65 20 4c 49  </h3>.<p>^The LI
e2b0: 4b 45 20 6f 70 65 72 61 74 6f 72 20 64 6f 65 73  KE operator does
e2c0: 20 61 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68   a pattern match
e2d0: 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  ing comparison. 
e2e0: 5e 54 68 65 20 6f 70 65 72 61 6e 64 0a 74 6f 20  ^The operand.to 
e2f0: 74 68 65 20 72 69 67 68 74 20 6f 66 20 74 68 65  the right of the
e300: 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 63   LIKE operator c
e310: 6f 6e 74 61 69 6e 73 20 74 68 65 20 70 61 74 74  ontains the patt
e320: 65 72 6e 20 61 6e 64 20 74 68 65 20 6c 65 66 74  ern and the left
e330: 20 68 61 6e 64 0a 6f 70 65 72 61 6e 64 20 63 6f   hand.operand co
e340: 6e 74 61 69 6e 73 20 74 68 65 20 73 74 72 69 6e  ntains the strin
e350: 67 20 74 6f 20 6d 61 74 63 68 20 61 67 61 69 6e  g to match again
e360: 73 74 20 74 68 65 20 70 61 74 74 65 72 6e 2e 0a  st the pattern..
e370: 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20 22 5e  .<tcl>hd_puts "^
e380: 41 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c  A percent symbol
e390: 20 28 5c 22 25 5c 22 29 20 69 6e 20 74 68 65 20   (\"%\") in the 
e3a0: 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 6d 61 74  LIKE pattern mat
e3b0: 63 68 65 73 20 61 6e 79 0a 73 65 71 75 65 6e 63  ches any.sequenc
e3c0: 65 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  e of zero or mor
e3d0: 65 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20  e characters in 
e3e0: 74 68 65 20 73 74 72 69 6e 67 2e 20 20 5e 41 6e  the string.  ^An
e3f0: 20 75 6e 64 65 72 73 63 6f 72 65 0a 28 5c 22 5f   underscore.(\"_
e400: 5c 22 29 20 69 6e 20 74 68 65 20 4c 49 4b 45 20  \") in the LIKE 
e410: 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73 20  pattern matches 
e420: 61 6e 79 20 73 69 6e 67 6c 65 20 63 68 61 72 61  any single chara
e430: 63 74 65 72 20 69 6e 20 74 68 65 0a 73 74 72 69  cter in the.stri
e440: 6e 67 2e 20 20 5e 28 41 6e 79 20 6f 74 68 65 72  ng.  ^(Any other
e450: 20 63 68 61 72 61 63 74 65 72 20 6d 61 74 63 68   character match
e460: 65 73 20 69 74 73 65 6c 66 20 6f 72 20 69 74 73  es itself or its
e470: 20 6c 6f 77 65 72 2f 75 70 70 65 72 20 63 61 73   lower/upper cas
e480: 65 0a 65 71 75 69 76 61 6c 65 6e 74 20 28 69 2e  e.equivalent (i.
e490: 65 2e 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74  e. case-insensit
e4a0: 69 76 65 20 6d 61 74 63 68 69 6e 67 29 2e 29 5e  ive matching).)^
e4b0: 20 20 28 41 20 62 75 67 3a 20 5e 53 51 4c 69 74    (A bug: ^SQLit
e4c0: 65 20 6f 6e 6c 79 0a 75 6e 64 65 72 73 74 61 6e  e only.understan
e4d0: 64 73 20 75 70 70 65 72 2f 6c 6f 77 65 72 20 63  ds upper/lower c
e4e0: 61 73 65 20 66 6f 72 20 41 53 43 49 49 20 63 68  ase for ASCII ch
e4f0: 61 72 61 63 74 65 72 73 20 62 79 20 64 65 66 61  aracters by defa
e500: 75 6c 74 2e 20 20 5e 54 68 65 0a 4c 49 4b 45 20  ult.  ^The.LIKE 
e510: 6f 70 65 72 61 74 6f 72 20 69 73 20 63 61 73 65  operator is case
e520: 20 73 65 6e 73 69 74 69 76 65 20 62 79 20 64 65   sensitive by de
e530: 66 61 75 6c 74 20 66 6f 72 20 75 6e 69 63 6f 64  fault for unicod
e540: 65 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61  e characters tha
e550: 74 20 61 72 65 0a 62 65 79 6f 6e 64 20 74 68 65  t are.beyond the
e560: 20 41 53 43 49 49 20 72 61 6e 67 65 2e 20 20 46   ASCII range.  F
e570: 6f 72 20 65 78 61 6d 70 6c 65 2c 0a 5e 74 68 65  or example,.^the
e580: 20 65 78 70 72 65 73 73 69 6f 6e 20 3c 62 3e 27   expression <b>'
e590: 61 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73  a'&nbsp;LIKE&nbs
e5a0: 70 3b 27 41 27 3c 2f 62 3e 0a 69 73 20 54 52 55  p;'A'</b>.is TRU
e5b0: 45 20 62 75 74 20 3c 62 3e 27 26 61 65 6c 69 67  E but <b>'&aelig
e5c0: 3b 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73  ;'&nbsp;LIKE&nbs
e5d0: 70 3b 27 26 41 45 6c 69 67 3b 27 3c 2f 62 3e 20  p;'&AElig;'</b> 
e5e0: 69 73 20 46 41 4c 53 45 2e 29 3c 70 3e 22 3c 2f  is FALSE.)<p>"</
e5f0: 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  tcl>..<p>^If the
e600: 20 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41 50 45   optional ESCAPE
e610: 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65   clause is prese
e620: 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 65 78 70  nt, then the exp
e630: 72 65 73 73 69 6f 6e 0a 66 6f 6c 6c 6f 77 69 6e  ression.followin
e640: 67 20 74 68 65 20 45 53 43 41 50 45 20 6b 65 79  g the ESCAPE key
e650: 77 6f 72 64 20 6d 75 73 74 20 65 76 61 6c 75 61  word must evalua
e660: 74 65 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63  te to a string c
e670: 6f 6e 73 69 73 74 69 6e 67 20 6f 66 0a 61 20 73  onsisting of.a s
e680: 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 2e  ingle character.
e690: 20 5e 54 68 69 73 20 63 68 61 72 61 63 74 65 72   ^This character
e6a0: 20 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e 20   may be used in 
e6b0: 74 68 65 20 4c 49 4b 45 20 70 61 74 74 65 72 6e  the LIKE pattern
e6c0: 0a 74 6f 20 69 6e 63 6c 75 64 65 20 6c 69 74 65  .to include lite
e6d0: 72 61 6c 20 70 65 72 63 65 6e 74 20 6f 72 20 75  ral percent or u
e6e0: 6e 64 65 72 73 63 6f 72 65 20 63 68 61 72 61 63  nderscore charac
e6f0: 74 65 72 73 2e 20 5e 54 68 65 20 65 73 63 61 70  ters. ^The escap
e700: 65 0a 63 68 61 72 61 63 74 65 72 20 66 6f 6c 6c  e.character foll
e710: 6f 77 65 64 20 62 79 20 61 20 70 65 72 63 65 6e  owed by a percen
e720: 74 20 73 79 6d 62 6f 6c 20 28 25 29 2c 20 75 6e  t symbol (%), un
e730: 64 65 72 73 63 6f 72 65 20 28 5f 29 2c 20 6f 72  derscore (_), or
e740: 20 61 20 73 65 63 6f 6e 64 0a 69 6e 73 74 61 6e   a second.instan
e750: 63 65 20 6f 66 20 74 68 65 20 65 73 63 61 70 65  ce of the escape
e760: 20 63 68 61 72 61 63 74 65 72 20 69 74 73 65 6c   character itsel
e770: 66 20 6d 61 74 63 68 65 73 20 61 0a 6c 69 74 65  f matches a.lite
e780: 72 61 6c 20 70 65 72 63 65 6e 74 20 73 79 6d 62  ral percent symb
e790: 6f 6c 2c 20 75 6e 64 65 72 73 63 6f 72 65 2c 20  ol, underscore, 
e7a0: 6f 72 20 61 20 73 69 6e 67 6c 65 20 65 73 63 61  or a single esca
e7b0: 70 65 20 63 68 61 72 61 63 74 65 72 2c 0a 72 65  pe character,.re
e7c0: 73 70 65 63 74 69 76 65 6c 79 2e 0a 0a 3c 70 3e  spectively...<p>
e7d0: 5e 54 68 65 20 69 6e 66 69 78 20 4c 49 4b 45 20  ^The infix LIKE 
e7e0: 6f 70 65 72 61 74 6f 72 20 69 73 20 69 6d 70 6c  operator is impl
e7f0: 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69  emented by calli
e800: 6e 67 20 74 68 65 0a 61 70 70 6c 69 63 61 74 69  ng the.applicati
e810: 6f 6e 2d 64 65 66 69 6e 65 64 20 53 51 4c 20 66  on-defined SQL f
e820: 75 6e 63 74 69 6f 6e 73 20 5b 6c 69 6b 65 28 3c  unctions [like(<
e830: 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e  i>Y</i>,<i>X</i>
e840: 29 5d 20 6f 72 0a 5b 6c 69 6b 65 28 3c 69 3e 59  )] or.[like(<i>Y
e850: 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 2c 3c 69  </i>,<i>X</i>,<i
e860: 3e 5a 3c 2f 69 3e 29 5d 3c 2f 61 3e 2e 3c 2f 70  >Z</i>)]</a>.</p
e870: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b 45 20  >..<p>^The LIKE 
e880: 6f 70 65 72 61 74 6f 72 20 63 61 6e 20 62 65 20  operator can be 
e890: 6d 61 64 65 20 63 61 73 65 20 73 65 6e 73 69 74  made case sensit
e8a0: 69 76 65 20 75 73 69 6e 67 20 74 68 65 0a 5b 63  ive using the.[c
e8b0: 61 73 65 5f 73 65 6e 73 69 74 69 76 65 5f 6c 69  ase_sensitive_li
e8c0: 6b 65 20 70 72 61 67 6d 61 5d 2e 3c 2f 70 3e 0a  ke pragma].</p>.
e8d0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
e8e0: 74 20 67 6c 6f 62 20 47 4c 4f 42 3c 2f 74 63 6c  t glob GLOB</tcl
e8f0: 3e 0a 3c 70 3e 5e 54 68 65 20 47 4c 4f 42 20 6f  >.<p>^The GLOB o
e900: 70 65 72 61 74 6f 72 20 69 73 20 73 69 6d 69 6c  perator is simil
e910: 61 72 20 74 6f 20 4c 49 4b 45 20 62 75 74 20 75  ar to LIKE but u
e920: 73 65 73 20 74 68 65 20 55 6e 69 78 0a 66 69 6c  ses the Unix.fil
e930: 65 20 67 6c 6f 62 62 69 6e 67 20 73 79 6e 74 61  e globbing synta
e940: 78 20 66 6f 72 20 69 74 73 20 77 69 6c 64 63 61  x for its wildca
e950: 72 64 73 2e 20 20 5e 41 6c 73 6f 2c 20 47 4c 4f  rds.  ^Also, GLO
e960: 42 20 69 73 20 63 61 73 65 0a 73 65 6e 73 69 74  B is case.sensit
e970: 69 76 65 2c 20 75 6e 6c 69 6b 65 20 4c 49 4b 45  ive, unlike LIKE
e980: 2e 20 20 5e 42 6f 74 68 20 47 4c 4f 42 20 61 6e  .  ^Both GLOB an
e990: 64 20 4c 49 4b 45 20 6d 61 79 20 62 65 20 70 72  d LIKE may be pr
e9a0: 65 63 65 64 65 64 20 62 79 0a 74 68 65 20 4e 4f  eceded by.the NO
e9b0: 54 20 6b 65 79 77 6f 72 64 20 74 6f 20 69 6e 76  T keyword to inv
e9c0: 65 72 74 20 74 68 65 20 73 65 6e 73 65 20 6f 66  ert the sense of
e9d0: 20 74 68 65 20 74 65 73 74 2e 20 20 5e 54 68 65   the test.  ^The
e9e0: 20 69 6e 66 69 78 20 47 4c 4f 42 20 0a 6f 70 65   infix GLOB .ope
e9f0: 72 61 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65  rator is impleme
ea00: 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20  nted by calling 
ea10: 74 68 65 20 66 75 6e 63 74 69 6f 6e 0a 5b 67 6c  the function.[gl
ea20: 6f 62 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58  ob(<i>Y</i>,<i>X
ea30: 3c 2f 69 3e 29 5d 20 61 6e 64 20 63 61 6e 20 62  </i>)] and can b
ea40: 65 20 6d 6f 64 69 66 69 65 64 20 62 79 20 6f 76  e modified by ov
ea50: 65 72 72 69 64 69 6e 67 0a 74 68 61 74 20 66 75  erriding.that fu
ea60: 6e 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63  nction.</p>..<tc
ea70: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65  l>hd_fragment re
ea80: 67 65 78 70 20 52 45 47 45 58 50 3c 2f 74 63 6c  gexp REGEXP</tcl
ea90: 3e 0a 3c 70 3e 5e 54 68 65 20 52 45 47 45 58 50  >.<p>^The REGEXP
eaa0: 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73   operator is a s
eab0: 70 65 63 69 61 6c 20 73 79 6e 74 61 78 20 66 6f  pecial syntax fo
eac0: 72 20 74 68 65 20 72 65 67 65 78 70 28 29 0a 75  r the regexp().u
ead0: 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e 20 20 5e  ser function.  ^
eae0: 4e 6f 20 72 65 67 65 78 70 28 29 20 75 73 65 72  No regexp() user
eaf0: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66   function is def
eb00: 69 6e 65 64 20 62 79 20 64 65 66 61 75 6c 74 0a  ined by default.
eb10: 61 6e 64 20 73 6f 20 75 73 65 20 6f 66 20 74 68  and so use of th
eb20: 65 20 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f  e REGEXP operato
eb30: 72 20 77 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20  r will normally 
eb40: 72 65 73 75 6c 74 20 69 6e 20 61 6e 0a 65 72 72  result in an.err
eb50: 6f 72 20 6d 65 73 73 61 67 65 2e 20 20 5e 49 66  or message.  ^If
eb60: 20 61 20 5b 61 70 70 6c 69 63 61 74 69 6f 6e 2d   a [application-
eb70: 64 65 66 69 6e 65 64 20 53 51 4c 20 66 75 6e 63  defined SQL func
eb80: 74 69 6f 6e 5d 20 6e 61 6d 65 64 20 22 72 65 67  tion] named "reg
eb90: 65 78 70 22 0a 69 73 20 61 64 64 65 64 20 61 74  exp".is added at
eba0: 20 72 75 6e 2d 74 69 6d 65 2c 20 74 68 61 74 20   run-time, that 
ebb0: 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65  function will be
ebc0: 20 63 61 6c 6c 65 64 20 69 6e 20 6f 72 64 65 72   called in order
ebd0: 0a 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68  .to implement th
ebe0: 65 20 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f  e REGEXP operato
ebf0: 72 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  r.</p>..<tcl>hd_
ec00: 66 72 61 67 6d 65 6e 74 20 6d 61 74 63 68 20 4d  fragment match M
ec10: 41 54 43 48 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54  ATCH</tcl>.<p>^T
ec20: 68 65 20 4d 41 54 43 48 20 6f 70 65 72 61 74 6f  he MATCH operato
ec30: 72 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 73  r is a special s
ec40: 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 6d 61  yntax for the ma
ec50: 74 63 68 28 29 0a 61 70 70 6c 69 63 61 74 69 6f  tch().applicatio
ec60: 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69  n-defined functi
ec70: 6f 6e 2e 20 20 5e 54 68 65 20 64 65 66 61 75 6c  on.  ^The defaul
ec80: 74 20 6d 61 74 63 68 28 29 20 66 75 6e 63 74 69  t match() functi
ec90: 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  on implementatio
eca0: 6e 0a 72 61 69 73 65 73 20 61 6e 20 65 78 63 65  n.raises an exce
ecb0: 70 74 69 6f 6e 20 61 6e 64 20 69 73 20 6e 6f 74  ption and is not
ecc0: 20 72 65 61 6c 6c 79 20 75 73 65 66 75 6c 20 66   really useful f
ecd0: 6f 72 20 61 6e 79 74 68 69 6e 67 2e 0a 5e 42 75  or anything..^Bu
ece0: 74 20 65 78 74 65 6e 73 69 6f 6e 73 20 63 61 6e  t extensions can
ecf0: 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 6d 61   override the ma
ed00: 74 63 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 77  tch() function w
ed10: 69 74 68 20 6d 6f 72 65 0a 68 65 6c 70 66 75 6c  ith more.helpful
ed20: 20 6c 6f 67 69 63 2e 3c 2f 70 3e 0a 0a 3c 74 63   logic.</p>..<tc
ed30: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62 65  l>hd_fragment be
ed40: 74 77 65 65 6e 20 42 45 54 57 45 45 4e 3c 2f 74  tween BETWEEN</t
ed50: 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 42 45 54 57  cl>.<h3>The BETW
ed60: 45 45 4e 20 6f 70 65 72 61 74 6f 72 3c 2f 68 33  EEN operator</h3
ed70: 3e 0a 3c 70 3e 5e 28 54 68 65 20 42 45 54 57 45  >.<p>^(The BETWE
ed80: 45 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 6c  EN operator is l
ed90: 6f 67 69 63 61 6c 6c 79 20 65 71 75 69 76 61 6c  ogically equival
eda0: 65 6e 74 20 74 6f 20 61 20 70 61 69 72 20 6f 66  ent to a pair of
edb0: 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 22 3c   comparisons.."<
edc0: 69 3e 78 3c 2f 69 3e 20 3c 62 3e 42 45 54 57 45  i>x</i> <b>BETWE
edd0: 45 4e 3c 2f 62 3e 20 3c 69 3e 79 3c 2f 69 3e 20  EN</b> <i>y</i> 
ede0: 3c 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e 7a 3c  <b>AND</b> <i>z<
edf0: 2f 69 3e 22 20 69 73 20 0a 65 71 75 69 76 61 6c  /i>" is .equival
ee00: 65 6e 74 20 74 6f 20 0a 22 3c 69 3e 78 3c 2f 69  ent to ."<i>x</i
ee10: 3e 3c 62 3e 26 67 74 3b 3d 3c 2f 62 3e 3c 69 3e  ><b>&gt;=</b><i>
ee20: 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62 3e  y</i> <b>AND</b>
ee30: 20 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 6c 74 3b   <i>x</i><b>&lt;
ee40: 3d 3c 2f 62 3e 3c 69 3e 7a 3c 2f 69 3e 22 20 65  =</b><i>z</i>" e
ee50: 78 63 65 70 74 0a 74 68 61 74 20 77 69 74 68 20  xcept.that with 
ee60: 42 45 54 57 45 45 4e 2c 20 74 68 65 20 3c 69 3e  BETWEEN, the <i>
ee70: 78 3c 2f 69 3e 20 65 78 70 72 65 73 73 69 6f 6e  x</i> expression
ee80: 20 69 73 20 6f 6e 6c 79 20 65 76 61 6c 75 61 74   is only evaluat
ee90: 65 64 20 6f 6e 63 65 2e 29 5e 0a 5e 54 68 65 20  ed once.)^.^The 
eea0: 70 72 65 63 65 64 65 6e 63 65 20 6f 66 20 74 68  precedence of th
eeb0: 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74  e BETWEEN operat
eec0: 6f 72 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  or is the same a
eed0: 73 20 74 68 65 20 70 72 65 63 65 64 65 6e 63 65  s the precedence
eee0: 0a 61 73 20 6f 70 65 72 61 74 6f 72 73 20 3c 62  .as operators <b
eef0: 3e 3d 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 21  >==</b> and <b>!
ef00: 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 4c 49 4b  =</b> and <b>LIK
ef10: 45 3c 2f 62 3e 20 61 6e 64 20 67 72 6f 75 70 73  E</b> and groups
ef20: 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 0a   left to right..
ef30: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
ef40: 74 20 63 61 73 65 20 7b 43 41 53 45 20 65 78 70  t case {CASE exp
ef50: 72 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c  ression}</tcl>.<
ef60: 68 33 3e 54 68 65 20 43 41 53 45 20 65 78 70 72  h3>The CASE expr
ef70: 65 73 73 69 6f 6e 3c 2f 68 33 3e 0a 3c 70 3e 41  ession</h3>.<p>A
ef80: 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
ef90: 20 73 65 72 76 65 73 20 61 20 72 6f 6c 65 20 73   serves a role s
efa0: 69 6d 69 6c 61 72 20 74 6f 20 49 46 2d 54 48 45  imilar to IF-THE
efb0: 4e 2d 45 4c 53 45 20 69 6e 20 6f 74 68 65 72 0a  N-ELSE in other.
efc0: 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e 67  programming lang
efd0: 75 61 67 65 73 2e 20 20 0a 0a 3c 70 3e 54 68 65  uages.  ..<p>The
efe0: 20 6f 70 74 69 6f 6e 61 6c 20 65 78 70 72 65 73   optional expres
eff0: 73 69 6f 6e 20 74 68 61 74 20 6f 63 63 75 72 73  sion that occurs
f000: 20 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20   in between the 
f010: 43 41 53 45 20 6b 65 79 77 6f 72 64 20 61 6e 64  CASE keyword and
f020: 20 74 68 65 0a 66 69 72 73 74 20 57 48 45 4e 20   the.first WHEN 
f030: 6b 65 79 77 6f 72 64 20 69 73 20 63 61 6c 6c 65  keyword is calle
f040: 64 20 74 68 65 20 22 62 61 73 65 22 20 65 78 70  d the "base" exp
f050: 72 65 73 73 69 6f 6e 2e 20 5e 54 68 65 72 65 20  ression. ^There 
f060: 61 72 65 20 74 77 6f 20 62 61 73 69 63 20 66 6f  are two basic fo
f070: 72 6d 73 0a 6f 66 20 74 68 65 20 43 41 53 45 20  rms.of the CASE 
f080: 65 78 70 72 65 73 73 69 6f 6e 3a 20 74 68 6f 73  expression: thos
f090: 65 20 77 69 74 68 20 61 20 62 61 73 65 20 65 78  e with a base ex
f0a0: 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 6f  pression and tho
f0b0: 73 65 20 77 69 74 68 6f 75 74 2e 0a 0a 3c 70 3e  se without...<p>
f0c0: 5e 49 6e 20 61 20 43 41 53 45 20 77 69 74 68 6f  ^In a CASE witho
f0d0: 75 74 20 61 20 62 61 73 65 20 65 78 70 72 65 73  ut a base expres
f0e0: 73 69 6f 6e 2c 20 65 61 63 68 20 57 48 45 4e 20  sion, each WHEN 
f0f0: 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76  expression is ev
f100: 61 6c 75 61 74 65 64 0a 61 6e 64 20 74 68 65 20  aluated.and the 
f110: 72 65 73 75 6c 74 20 74 72 65 61 74 65 64 20 61  result treated a
f120: 73 20 61 20 62 6f 6f 6c 65 61 6e 2c 20 73 74 61  s a boolean, sta
f130: 72 74 69 6e 67 20 77 69 74 68 20 74 68 65 20 6c  rting with the l
f140: 65 66 74 6d 6f 73 74 20 61 6e 64 20 63 6f 6e 74  eftmost and cont
f150: 69 6e 75 69 6e 67 0a 74 6f 20 74 68 65 20 72 69  inuing.to the ri
f160: 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c 74  ght. ^The result
f170: 20 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70   of the CASE exp
f180: 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 65  ression is the e
f190: 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65  valuation of the
f1a0: 20 54 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e   THEN.expression
f1b0: 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
f1c0: 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 57  s to the first W
f1d0: 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 74  HEN expression t
f1e0: 68 61 74 20 65 76 61 6c 75 61 74 65 73 20 74 6f  hat evaluates to
f1f0: 0a 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66 20 6e  .true. ^Or, if n
f200: 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e 20  one of the WHEN 
f210: 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c  expressions eval
f220: 75 61 74 65 20 74 6f 20 74 72 75 65 2c 20 74 68  uate to true, th
f230: 65 20 72 65 73 75 6c 74 20 6f 66 0a 65 76 61 6c  e result of.eval
f240: 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45 20  uating the ELSE 
f250: 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 66 20 61  expression, if a
f260: 6e 79 2e 20 5e 49 66 20 74 68 65 72 65 20 69 73  ny. ^If there is
f270: 20 6e 6f 20 45 4c 53 45 20 65 78 70 72 65 73 73   no ELSE express
f280: 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f 66 20  ion and.none of 
f290: 74 68 65 20 57 48 45 4e 20 65 78 70 72 65 73 73  the WHEN express
f2a0: 69 6f 6e 73 20 61 72 65 20 74 72 75 65 2c 20 74  ions are true, t
f2b0: 68 65 6e 20 74 68 65 20 6f 76 65 72 61 6c 6c 20  hen the overall 
f2c0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
f2d0: 0a 3c 70 3e 5e 41 20 4e 55 4c 4c 20 72 65 73 75  .<p>^A NULL resu
f2e0: 6c 74 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  lt is considered
f2f0: 20 75 6e 74 72 75 65 20 77 68 65 6e 20 65 76 61   untrue when eva
f300: 6c 75 61 74 69 6e 67 20 57 48 45 4e 20 74 65 72  luating WHEN ter
f310: 6d 73 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43 41  ms...<p>^In a CA
f320: 53 45 20 77 69 74 68 20 61 20 62 61 73 65 20 65  SE with a base e
f330: 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 62  xpression, the b
f340: 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ase expression i
f350: 73 20 65 76 61 6c 75 61 74 65 64 20 6a 75 73 74  s evaluated just
f360: 0a 6f 6e 63 65 20 61 6e 64 20 74 68 65 20 72 65  .once and the re
f370: 73 75 6c 74 20 69 73 20 63 6f 6d 70 61 72 65 64  sult is compared
f380: 20 61 67 61 69 6e 73 74 20 74 68 65 20 65 76 61   against the eva
f390: 6c 75 61 74 69 6f 6e 20 6f 66 20 65 61 63 68 20  luation of each 
f3a0: 57 48 45 4e 20 0a 65 78 70 72 65 73 73 69 6f 6e  WHEN .expression
f3b0: 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
f3c0: 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c 74  ght. ^The result
f3d0: 20 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70   of the CASE exp
f3e0: 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 0a  ression is the .
f3f0: 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68  evaluation of th
f400: 65 20 54 48 45 4e 20 65 78 70 72 65 73 73 69 6f  e THEN expressio
f410: 6e 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  n that correspon
f420: 64 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ds to the first 
f430: 57 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e 20  WHEN.expression 
f440: 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 63 6f  for which the co
f450: 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65  mparison is true
f460: 2e 20 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65 20 6f  . ^Or, if none o
f470: 66 20 74 68 65 20 57 48 45 4e 0a 65 78 70 72 65  f the WHEN.expre
f480: 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 20  ssions evaluate 
f490: 74 6f 20 61 20 76 61 6c 75 65 20 65 71 75 61 6c  to a value equal
f4a0: 20 74 6f 20 74 68 65 20 62 61 73 65 20 65 78 70   to the base exp
f4b0: 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 72 65 73  ression, the res
f4c0: 75 6c 74 0a 6f 66 20 65 76 61 6c 75 61 74 69 6e  ult.of evaluatin
f4d0: 67 20 74 68 65 20 45 4c 53 45 20 65 78 70 72 65  g the ELSE expre
f4e0: 73 73 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 20 5e  ssion, if any. ^
f4f0: 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 45  If there is no E
f500: 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 61  LSE expression a
f510: 6e 64 0a 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57  nd.none of the W
f520: 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 20  HEN expressions 
f530: 70 72 6f 64 75 63 65 20 61 20 72 65 73 75 6c 74  produce a result
f540: 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 62 61   equal to the ba
f550: 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 0a 74  se expression,.t
f560: 68 65 20 6f 76 65 72 61 6c 6c 20 72 65 73 75 6c  he overall resul
f570: 74 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e  t is NULL...<p>^
f580: 57 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 61  When comparing a
f590: 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e   base expression
f5a0: 20 61 67 61 69 6e 73 74 20 61 20 57 48 45 4e 20   against a WHEN 
f5b0: 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20  expression, the 
f5c0: 73 61 6d 65 0a 63 6f 6c 6c 61 74 69 6e 67 20 73  same.collating s
f5d0: 65 71 75 65 6e 63 65 2c 20 61 66 66 69 6e 69 74  equence, affinit
f5e0: 79 2c 20 61 6e 64 20 4e 55 4c 4c 2d 68 61 6e 64  y, and NULL-hand
f5f0: 6c 69 6e 67 20 72 75 6c 65 73 20 61 70 70 6c 79  ling rules apply
f600: 20 61 73 20 69 66 20 74 68 65 0a 62 61 73 65 20   as if the.base 
f610: 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 57  expression and W
f620: 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 61  HEN expression a
f630: 72 65 20 72 65 73 70 65 63 74 69 76 65 6c 79 20  re respectively 
f640: 74 68 65 20 6c 65 66 74 2d 20 61 6e 64 0a 72 69  the left- and.ri
f650: 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64  ght-hand operand
f660: 73 20 6f 66 20 61 6e 20 3c 62 69 67 3e 3c 62 3e  s of an <big><b>
f670: 3d 3c 2f 62 3e 3c 2f 62 69 67 3e 20 6f 70 65 72  =</b></big> oper
f680: 61 74 6f 72 2e 3c 2f 70 3e 20 5e 49 66 20 74 68  ator.</p> ^If th
f690: 65 20 62 61 73 65 20 0a 65 78 70 72 65 73 73 69  e base .expressi
f6a0: 6f 6e 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  on is NULL then 
f6b0: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
f6c0: 65 20 43 41 53 45 20 69 73 20 61 6c 77 61 79 73  e CASE is always
f6d0: 20 74 68 65 20 72 65 73 75 6c 74 20 0a 6f 66 20   the result .of 
f6e0: 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 45  evaluating the E
f6f0: 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69  LSE expression i
f700: 66 20 69 74 20 65 78 69 73 74 73 2c 20 6f 72 20  f it exists, or 
f710: 4e 55 4c 4c 20 69 66 20 69 74 20 64 6f 65 73 20  NULL if it does 
f720: 6e 6f 74 2e 0a 0a 3c 70 3e 5e 42 6f 74 68 20 66  not...<p>^Both f
f730: 6f 72 6d 73 20 6f 66 20 74 68 65 20 43 41 53 45  orms of the CASE
f740: 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65 20   expression use 
f750: 6c 61 7a 79 2c 20 6f 72 20 73 68 6f 72 74 2d 63  lazy, or short-c
f760: 69 72 63 75 69 74 2c 20 0a 65 76 61 6c 75 61 74  ircuit, .evaluat
f770: 69 6f 6e 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f  ion...<p>^(The o
f780: 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20 62  nly difference b
f790: 65 74 77 65 65 6e 20 74 68 65 20 66 6f 6c 6c 6f  etween the follo
f7a0: 77 69 6e 67 20 74 77 6f 20 43 41 53 45 20 65 78  wing two CASE ex
f7b0: 70 72 65 73 73 69 6f 6e 73 20 69 73 20 74 68 61  pressions is tha
f7c0: 74 20 0a 74 68 65 20 3c 69 3e 78 3c 2f 69 3e 20  t .the <i>x</i> 
f7d0: 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76  expression is ev
f7e0: 61 6c 75 61 74 65 64 20 65 78 61 63 74 6c 79 20  aluated exactly 
f7f0: 6f 6e 63 65 20 69 6e 20 74 68 65 20 66 69 72 73  once in the firs
f800: 74 20 65 78 61 6d 70 6c 65 20 62 75 74 20 0a 6d  t example but .m
f810: 69 67 68 74 20 62 65 20 65 76 61 6c 75 61 74 65  ight be evaluate
f820: 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73  d multiple times
f830: 20 69 6e 20 74 68 65 20 73 65 63 6f 6e 64 3a 0a   in the second:.
f840: 0a 3c 75 6c 3e 3c 70 72 65 3e 0a 3c 6c 69 3e 43  .<ul><pre>.<li>C
f850: 41 53 45 20 78 20 57 48 45 4e 20 77 31 20 54 48  ASE x WHEN w1 TH
f860: 45 4e 20 72 31 20 57 48 45 4e 20 77 32 20 54 48  EN r1 WHEN w2 TH
f870: 45 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45 4e  EN r2 ELSE r3 EN
f880: 44 0a 3c 6c 69 3e 43 41 53 45 20 57 48 45 4e 20  D.<li>CASE WHEN 
f890: 78 3d 77 31 20 54 48 45 4e 20 72 31 20 57 48 45  x=w1 THEN r1 WHE
f8a0: 4e 20 78 3d 77 32 20 54 48 45 4e 20 72 32 20 45  N x=w2 THEN r2 E
f8b0: 4c 53 45 20 72 33 20 45 4e 44 0a 3c 2f 70 72 65  LSE r3 END.</pre
f8c0: 3e 3c 2f 75 6c 3e 29 5e 0a 0a 0a 3c 74 63 6c 3e  ></ul>)^...<tcl>
f8d0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 5f 6f  hd_fragment in_o
f8e0: 70 20 7b 49 4e 20 6f 70 65 72 61 74 6f 72 7d 20  p {IN operator} 
f8f0: 7b 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72  {NOT IN operator
f900: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  }</tcl>.<h3>The 
f910: 49 4e 20 61 6e 64 20 4e 4f 54 20 49 4e 20 6f 70  IN and NOT IN op
f920: 65 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e  erators</h3>.<p>
f930: 5e 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f 54 20  ^The IN and NOT 
f940: 49 4e 20 6f 70 65 72 61 74 6f 72 73 20 74 61 6b  IN operators tak
f950: 65 20 61 20 73 69 6e 67 6c 65 20 73 63 61 6c 61  e a single scala
f960: 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68 65  r operand on the
f970: 0a 6c 65 66 74 20 61 6e 64 20 61 20 76 65 63 74  .left and a vect
f980: 6f 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68  or operand on th
f990: 65 20 72 69 67 68 74 0a 66 6f 72 6d 65 64 20 62  e right.formed b
f9a0: 79 20 61 6e 20 65 78 70 6c 69 63 69 74 20 6c 69  y an explicit li
f9b0: 73 74 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f  st of zero or mo
f9c0: 72 65 20 73 63 61 6c 61 72 73 20 6f 72 20 62 79  re scalars or by
f9d0: 20 61 20 0a 73 69 6e 67 6c 65 20 73 75 62 71 75   a .single subqu
f9e0: 65 72 79 2e 0a 5e 57 68 65 6e 20 74 68 65 20 72  ery..^When the r
f9f0: 69 67 68 74 20 6f 70 65 72 61 6e 64 20 6f 66 20  ight operand of 
fa00: 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20  an IN or NOT IN 
fa10: 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 75  operator is a su
fa20: 62 71 75 65 72 79 2c 20 74 68 65 0a 73 75 62 71  bquery, the.subq
fa30: 75 65 72 79 20 6d 75 73 74 20 68 61 76 65 20 61  uery must have a
fa40: 20 73 69 6e 67 6c 65 20 72 65 73 75 6c 74 20 63   single result c
fa50: 6f 6c 75 6d 6e 2e 0a 5e 57 68 65 6e 20 74 68 65  olumn..^When the
fa60: 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 69   right operand i
fa70: 73 20 61 6e 20 65 6d 70 74 79 20 73 65 74 2c 20  s an empty set, 
fa80: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 49 4e  the result of IN
fa90: 20 69 73 20 66 61 6c 73 65 20 61 6e 64 20 74 68   is false and th
faa0: 65 0a 72 65 73 75 6c 74 20 6f 66 20 4e 4f 54 20  e.result of NOT 
fab0: 49 4e 20 69 73 20 74 72 75 65 2c 20 72 65 67 61  IN is true, rega
fac0: 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6c 65  rdless of the le
fad0: 66 74 20 6f 70 65 72 61 6e 64 20 61 6e 64 20 65  ft operand and e
fae0: 76 65 6e 20 69 66 20 74 68 65 0a 6c 65 66 74 20  ven if the.left 
faf0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e  operand is NULL.
fb00: 0a 5e 28 54 68 65 20 72 65 73 75 6c 74 20 6f 66  .^(The result of
fb10: 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e   an IN or NOT IN
fb20: 20 6f 70 65 72 61 74 6f 72 20 69 73 20 64 65 74   operator is det
fb30: 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 66  ermined by the f
fb40: 6f 6c 6c 6f 77 69 6e 67 0a 6d 61 74 72 69 78 3a  ollowing.matrix:
fb50: 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74 61 62 6c  ..<center>.<tabl
fb60: 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e  e border=1>.<tr>
fb70: 0a 3c 74 68 3e 4c 65 66 74 20 6f 70 65 72 61 6e  .<th>Left operan
fb80: 64 20 3c 62 72 3e 69 73 20 4e 55 4c 4c 0a 3c 74  d <br>is NULL.<t
fb90: 68 3e 52 69 67 68 74 20 6f 70 65 72 61 6e 64 20  h>Right operand 
fba0: 3c 62 72 3e 63 6f 6e 74 61 69 6e 73 20 4e 55 4c  <br>contains NUL
fbb0: 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70 65 72  L.<th>Right oper
fbc0: 61 6e 64 20 3c 62 72 3e 69 73 20 61 6e 20 65 6d  and <br>is an em
fbd0: 70 74 79 20 73 65 74 0a 3c 74 68 3e 4c 65 66 74  pty set.<th>Left
fbe0: 20 6f 70 65 72 61 6e 64 20 66 6f 75 6e 64 20 3c   operand found <
fbf0: 62 72 3e 77 69 74 68 69 6e 20 72 69 67 68 74 20  br>within right 
fc00: 6f 70 65 72 61 6e 64 0a 3c 74 68 3e 52 65 73 75  operand.<th>Resu
fc10: 6c 74 20 6f 66 20 3c 62 72 3e 49 4e 20 6f 70 65  lt of <br>IN ope
fc20: 72 61 74 6f 72 0a 3c 74 68 3e 52 65 73 75 6c 74  rator.<th>Result
fc30: 20 6f 66 20 3c 62 72 3e 4e 4f 54 20 49 4e 20 6f   of <br>NOT IN o
fc40: 70 65 72 61 74 6f 72 0a 3c 74 72 3e 0a 3c 74 64  perator.<tr>.<td
fc50: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
fc60: 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
fc70: 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
fc80: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
fc90: 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
fca0: 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
fcb0: 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74  center">false.<t
fcc0: 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
fcd0: 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64 20 61  >true.<tr>.<td a
fce0: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f  lign="center">do
fcf0: 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74  es not matter.<t
fd00: 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
fd10: 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
fd20: 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61  enter">yes.<td a
fd30: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f  lign="center">no
fd40: 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
fd50: 65 72 22 3e 66 61 6c 73 65 0a 3c 74 64 20 61 6c  er">false.<td al
fd60: 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74 72 75  ign="center">tru
fd70: 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  e.<tr>.<td align
fd80: 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
fd90: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
fda0: 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a  does not matter.
fdb0: 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
fdc0: 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
fdd0: 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64  "center">yes.<td
fde0: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
fdf0: 74 72 75 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  true.<td align="
fe00: 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74  center">false.<t
fe10: 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  r>.<td align="ce
fe20: 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
fe30: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a  gn="center">yes.
fe40: 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
fe50: 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
fe60: 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
fe70: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e  align="center">N
fe80: 55 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  ULL.<td align="c
fe90: 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 72 3e  enter">NULL.<tr>
fea0: 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
feb0: 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67  er">yes.<td alig
fec0: 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20  n="center">does 
fed0: 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61  not matter.<td a
fee0: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f  lign="center">no
fef0: 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
ff00: 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74  er">does not mat
ff10: 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  ter.<td align="c
ff20: 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64 20  enter">NULL.<td 
ff30: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e  align="center">N
ff40: 55 4c 4c 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63  ULL.</table>.</c
ff50: 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 4e 6f  enter>)^..<p>^No
ff60: 74 65 20 74 68 61 74 20 53 51 4c 69 74 65 20 61  te that SQLite a
ff70: 6c 6c 6f 77 73 20 74 68 65 20 70 61 72 65 6e 74  llows the parent
ff80: 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66 20  hesized list of 
ff90: 73 63 61 6c 61 72 20 76 61 6c 75 65 73 20 6f 6e  scalar values on
ffa0: 0a 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20  .the right-hand 
ffb0: 73 69 64 65 20 6f 66 20 61 6e 20 49 4e 20 6f 72  side of an IN or
ffc0: 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72   NOT IN operator
ffd0: 20 74 6f 20 62 65 20 61 6e 20 65 6d 70 74 79 20   to be an empty 
ffe0: 6c 69 73 74 20 62 75 74 0a 6d 6f 73 74 20 6f 74  list but.most ot
fff0: 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65  her SQL database
10000 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
10010 73 20 61 6e 64 20 74 68 65 20 53 51 4c 39 32 20  s and the SQL92 
10020 73 74 61 6e 64 61 72 64 20 72 65 71 75 69 72 65  standard require
10030 0a 74 68 65 20 6c 69 73 74 20 74 6f 20 63 6f 6e  .the list to con
10040 74 61 69 6e 20 61 74 20 6c 65 61 73 74 20 6f 6e  tain at least on
10050 65 20 65 6c 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a  e element.</p>..
10060 0a 3c 68 33 3e 54 61 62 6c 65 20 43 6f 6c 75 6d  .<h3>Table Colum
10070 6e 20 4e 61 6d 65 73 3c 2f 68 33 3e 0a 3c 70 3e  n Names</h3>.<p>
10080 5e 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63  ^A column name c
10090 61 6e 20 62 65 20 61 6e 79 20 6f 66 20 74 68 65  an be any of the
100a0 20 6e 61 6d 65 73 20 64 65 66 69 6e 65 64 20 69   names defined i
100b0 6e 20 74 68 65 20 5b 43 52 45 41 54 45 20 54 41  n the [CREATE TA
100c0 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20 6f  BLE].statement o
100d0 72 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  r one of the fol
100e0 6c 6f 77 69 6e 67 20 73 70 65 63 69 61 6c 20 69  lowing special i
100f0 64 65 6e 74 69 66 69 65 72 73 3a 20 22 3c 62 3e  dentifiers: "<b>
10100 52 4f 57 49 44 3c 2f 62 3e 22 2c 0a 22 3c 62 3e  ROWID</b>",."<b>
10110 4f 49 44 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c 62  OID</b>", or "<b
10120 3e 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22 2e 0a 5e  >_ROWID_</b>"..^
10130 54 68 65 73 65 20 73 70 65 63 69 61 6c 20 69 64  These special id
10140 65 6e 74 69 66 69 65 72 73 20 61 6c 6c 20 64 65  entifiers all de
10150 73 63 72 69 62 65 20 74 68 65 0a 75 6e 69 71 75  scribe the.uniqu
10160 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 28 74  e integer key (t
10170 68 65 20 5b 72 6f 77 69 64 5d 29 20 61 73 73 6f  he [rowid]) asso
10180 63 69 61 74 65 64 20 77 69 74 68 20 65 76 65 72  ciated with ever
10190 79 20 0a 72 6f 77 20 6f 66 20 65 76 65 72 79 20  y .row of every 
101a0 74 61 62 6c 65 2e 0a 5e 54 68 65 20 73 70 65 63  table..^The spec
101b0 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73 20  ial identifiers 
101c0 6f 6e 6c 79 20 72 65 66 65 72 20 74 6f 20 74 68  only refer to th
101d0 65 20 72 6f 77 20 6b 65 79 20 69 66 20 74 68 65  e row key if the
101e0 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 0a   [CREATE TABLE].
101f0 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e  statement does n
10200 6f 74 20 64 65 66 69 6e 65 20 61 20 72 65 61 6c  ot define a real
10210 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 74 68 65   column with the
10220 20 73 61 6d 65 20 6e 61 6d 65 2e 0a 5e 54 68 65   same name..^The
10230 20 72 6f 77 69 64 20 63 61 6e 20 62 65 20 75 73   rowid can be us
10240 65 64 20 61 6e 79 77 68 65 72 65 20 61 20 72 65  ed anywhere a re
10250 67 75 6c 61 72 0a 63 6f 6c 75 6d 6e 20 63 61 6e  gular.column can
10260 20 62 65 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c   be used.</p>..<
10270 68 33 3e 53 75 62 71 75 65 72 69 65 73 3c 2f 68  h3>Subqueries</h
10280 33 3e 0a 3c 70 3e 5e 5b 53 45 4c 45 43 54 5d 20  3>.<p>^[SELECT] 
10290 73 74 61 74 65 6d 65 6e 74 73 20 63 61 6e 20 61  statements can a
102a0 70 70 65 61 72 20 69 6e 20 65 78 70 72 65 73 73  ppear in express
102b0 69 6f 6e 73 20 61 73 20 65 69 74 68 65 72 20 74  ions as either t
102c0 68 65 0a 72 69 67 68 74 2d 68 61 6e 64 20 6f 70  he.right-hand op
102d0 65 72 61 6e 64 20 6f 66 20 74 68 65 20 49 4e 20  erand of the IN 
102e0 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74  or NOT IN operat
102f0 6f 72 73 2c 20 61 73 20 61 20 73 63 61 6c 61 72  ors, as a scalar
10300 20 71 75 61 6e 74 69 74 79 2c 20 6f 72 0a 61 73   quantity, or.as
10310 20 74 68 65 20 6f 70 65 72 61 6e 64 20 6f 66 20   the operand of 
10320 61 6e 20 45 58 49 53 54 53 20 6f 70 65 72 61 74  an EXISTS operat
10330 6f 72 2e 0a 5e 41 73 20 61 20 73 63 61 6c 61 72  or..^As a scalar
10340 20 71 75 61 6e 74 69 74 79 20 6f 72 20 74 68 65   quantity or the
10350 20 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49   operand of an I
10360 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72  N or NOT IN oper
10370 61 74 6f 72 2c 0a 74 68 65 20 53 45 4c 45 43 54  ator,.the SELECT
10380 20 6d 61 79 20 68 61 76 65 20 6f 6e 6c 79 20 61   may have only a
10390 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 69   single column i
103a0 6e 20 69 74 73 0a 72 65 73 75 6c 74 2e 20 20 5e  n its.result.  ^
103b0 43 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 73  Compound SELECTs
103c0 20 28 63 6f 6e 6e 65 63 74 65 64 20 77 69 74 68   (connected with
103d0 20 6b 65 79 77 6f 72 64 73 20 6c 69 6b 65 20 55   keywords like U
103e0 4e 49 4f 4e 20 6f 72 0a 45 58 43 45 50 54 29 20  NION or.EXCEPT) 
103f0 61 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 20 61  are allowed in a
10400 6e 79 20 73 75 62 71 75 65 72 79 2e 0a 5e 57 69  ny subquery..^Wi
10410 74 68 20 74 68 65 20 45 58 49 53 54 53 20 6f 70  th the EXISTS op
10420 65 72 61 74 6f 72 2c 20 74 68 65 20 63 6f 6c 75  erator, the colu
10430 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c  mns in the resul
10440 74 20 73 65 74 20 6f 66 20 74 68 65 20 5b 53 45  t set of the [SE
10450 4c 45 43 54 5d 20 61 72 65 0a 69 67 6e 6f 72 65  LECT] are.ignore
10460 64 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73  d and the expres
10470 73 69 6f 6e 20 72 65 74 75 72 6e 73 20 54 52 55  sion returns TRU
10480 45 20 69 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  E if one or more
10490 20 72 6f 77 73 20 65 78 69 73 74 0a 61 6e 64 20   rows exist.and 
104a0 46 41 4c 53 45 20 69 66 20 74 68 65 20 72 65 73  FALSE if the res
104b0 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79  ult set is empty
104c0 2e 0a 5e 49 66 20 6e 6f 20 74 65 72 6d 73 20 69  ..^If no terms i
104d0 6e 20 74 68 65 20 5b 53 45 4c 45 43 54 5d 20 65  n the [SELECT] e
104e0 78 70 72 65 73 73 69 6f 6e 20 72 65 66 65 72 20  xpression refer 
104f0 74 6f 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  to values in the
10500 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 71 75 65 72   containing.quer
10510 79 2c 20 74 68 65 6e 20 74 68 65 20 65 78 70 72  y, then the expr
10520 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61  ession is evalua
10530 74 65 64 20 6f 6e 63 65 20 70 72 69 6f 72 20 74  ted once prior t
10540 6f 20 61 6e 79 20 6f 74 68 65 72 0a 70 72 6f 63  o any other.proc
10550 65 73 73 69 6e 67 20 61 6e 64 20 74 68 65 20 72  essing and the r
10560 65 73 75 6c 74 20 69 73 20 72 65 75 73 65 64 20  esult is reused 
10570 61 73 20 6e 65 63 65 73 73 61 72 79 2e 20 20 5e  as necessary.  ^
10580 49 66 20 74 68 65 20 5b 53 45 4c 45 43 54 5d 20  If the [SELECT] 
10590 65 78 70 72 65 73 73 69 6f 6e 0a 64 6f 65 73 20  expression.does 
105a0 63 6f 6e 74 61 69 6e 20 76 61 72 69 61 62 6c 65  contain variable
105b0 73 20 66 72 6f 6d 20 74 68 65 20 6f 75 74 65 72  s from the outer
105c0 20 71 75 65 72 79 2c 20 74 68 65 6e 20 74 68 65   query, then the
105d0 20 5b 53 45 4c 45 43 54 5d 20 69 73 20 72 65 65   [SELECT] is ree
105e0 76 61 6c 75 61 74 65 64 0a 65 76 65 72 79 20 74  valuated.every t
105f0 69 6d 65 20 69 74 20 69 73 20 6e 65 65 64 65 64  ime it is needed
10600 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20  .</p>..<p>^When 
10610 61 20 53 45 4c 45 43 54 20 61 70 70 65 61 72 73  a SELECT appears
10620 20 77 69 74 68 69 6e 20 61 6e 20 65 78 70 72 65   within an expre
10630 73 73 69 6f 6e 20 62 75 74 20 69 73 20 6e 6f 74  ssion but is not
10640 20 74 68 65 20 72 69 67 68 74 0a 6f 70 65 72 61   the right.opera
10650 6e 64 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e  nd of an IN or N
10660 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 2c 20  OT IN operator, 
10670 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 72  then the first r
10680 6f 77 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ow of the result
10690 20 6f 66 20 74 68 65 0a 53 45 4c 45 43 54 20 62   of the.SELECT b
106a0 65 63 6f 6d 65 73 20 74 68 65 20 76 61 6c 75 65  ecomes the value
106b0 20 75 73 65 64 20 69 6e 20 74 68 65 20 65 78 70   used in the exp
106c0 72 65 73 73 69 6f 6e 2e 20 20 5e 49 66 20 74 68  ression.  ^If th
106d0 65 20 53 45 4c 45 43 54 20 79 69 65 6c 64 73 0a  e SELECT yields.
106e0 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 65  more than one re
106f0 73 75 6c 74 20 72 6f 77 2c 20 61 6c 6c 20 72 6f  sult row, all ro
10700 77 73 20 61 66 74 65 72 20 74 68 65 20 66 69 72  ws after the fir
10710 73 74 20 61 72 65 20 69 67 6e 6f 72 65 64 2e 20  st are ignored. 
10720 20 5e 49 66 0a 74 68 65 20 53 45 4c 45 43 54 20   ^If.the SELECT 
10730 79 69 65 6c 64 73 20 6e 6f 20 72 6f 77 73 2c 20  yields no rows, 
10740 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 6f  then the value o
10750 66 20 74 68 65 20 53 45 4c 45 43 54 20 69 73 20  f the SELECT is 
10760 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  NULL.</p>..<tcl>
10770 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 61 73 74  hd_fragment cast
10780 65 78 70 72 20 7b 43 41 53 54 20 65 78 70 72 65  expr {CAST expre
10790 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  ssion}</tcl>.<h3
107a0 3e 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e  >CAST expression
107b0 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20 43 41 53  s</h3>..<p>A CAS
107c0 54 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  T expression is 
107d0 75 73 65 64 20 74 6f 20 63 6f 6e 76 65 72 74 20  used to convert 
107e0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 26 6c 74  the value of &lt
107f0 3b 65 78 70 72 26 67 74 3b 20 74 6f 20 0a 61 20  ;expr&gt; to .a 
10800 64 69 66 66 65 72 65 6e 74 20 5b 73 74 6f 72 61  different [stora
10810 67 65 20 63 6c 61 73 73 5d 20 69 6e 20 61 20 73  ge class] in a s
10820 69 6d 69 6c 61 72 20 77 61 79 20 74 6f 20 74 68  imilar way to th
10830 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 68 61  e conversion tha
10840 74 20 74 61 6b 65 73 0a 70 6c 61 63 65 20 77 68  t takes.place wh
10850 65 6e 20 61 20 5b 63 6f 6c 75 6d 6e 20 61 66 66  en a [column aff
10860 69 6e 69 74 79 5d 20 69 73 20 61 70 70 6c 69 65  inity] is applie
10870 64 20 74 6f 20 61 20 76 61 6c 75 65 2e 20 5e 41  d to a value. ^A
10880 70 70 6c 69 63 61 74 69 6f 6e 20 6f 66 20 61 20  pplication of a 
10890 43 41 53 54 0a 65 78 70 72 65 73 73 69 6f 6e 20  CAST.expression 
108a0 69 73 20 64 69 66 66 65 72 65 6e 74 20 74 6f 20  is different to 
108b0 61 70 70 6c 69 63 61 74 69 6f 6e 20 6f 66 20 61  application of a
108c0 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   column affinity
108d0 2c 20 61 73 0a 77 69 74 68 20 61 20 43 41 53 54  , as.with a CAST
108e0 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 65 20   expression the 
108f0 73 74 6f 72 61 67 65 20 63 6c 61 73 73 20 63 6f  storage class co
10900 6e 76 65 72 73 69 6f 6e 20 69 73 20 66 6f 72 63  nversion is forc
10910 65 64 20 65 76 65 6e 20 0a 69 66 20 69 74 20 69  ed even .if it i
10920 73 20 6c 6f 73 73 79 20 61 6e 64 20 69 72 72 72  s lossy and irrr
10930 65 76 65 72 73 69 62 6c 65 2e 0a 0a 3c 70 3e 5e  eversible...<p>^
10940 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  If the value of 
10950 26 6c 74 3b 65 78 70 72 26 67 74 3b 20 69 73 20  &lt;expr&gt; is 
10960 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 72  NULL, then the r
10970 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41 53  esult of the CAS
10980 54 0a 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  T.expression is 
10990 61 6c 73 6f 20 4e 55 4c 4c 2e 20 5e 4f 74 68 65  also NULL. ^Othe
109a0 72 77 69 73 65 2c 20 74 68 65 20 73 74 6f 72 61  rwise, the stora
109b0 67 65 20 63 6c 61 73 73 20 6f 66 20 74 68 65 20  ge class of the 
109c0 72 65 73 75 6c 74 20 76 61 6c 75 65 0a 69 73 20  result value.is 
109d0 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 70  determined by ap
109e0 70 6c 79 69 6e 67 20 74 68 65 20 5b 72 75 6c 65  plying the [rule
109f0 73 20 66 6f 72 20 64 65 74 65 72 6d 69 6e 69 6e  s for determinin
10a00 67 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  g column affinit
10a10 79 5d 20 74 6f 0a 74 68 65 20 26 6c 74 3b 74 79  y] to.the &lt;ty
10a20 70 65 2d 6e 61 6d 65 26 67 74 3b 20 73 70 65 63  pe-name&gt; spec
10a30 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
10a40 20 74 68 65 20 43 41 53 54 20 65 78 70 72 65 73   the CAST expres
10a50 73 69 6f 6e 2e 0a 0a 3c 74 61 62 6c 65 20 62 6f  sion...<table bo
10a60 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 0a 20 20 3c  rder=1>.<tr>.  <
10a70 74 68 3e 20 41 66 66 69 6e 69 74 79 20 6f 66 20  th> Affinity of 
10a80 26 6c 74 3b 74 79 70 65 2d 6e 61 6d 65 26 67 74  &lt;type-name&gt
10a90 3b 0a 20 20 3c 74 68 3e 20 43 6f 6e 76 65 72 73  ;.  <th> Convers
10aa0 69 6f 6e 20 50 72 6f 63 65 73 73 69 6e 67 0a 3c  ion Processing.<
10ab0 74 72 3e 0a 20 20 3c 74 64 3e 20 4e 4f 4e 45 20  tr>.  <td> NONE 
10ac0 0a 20 20 3c 74 64 3e 20 5e 43 61 73 74 69 6e 67  .  <td> ^Casting
10ad0 20 61 20 76 61 6c 75 65 20 74 6f 20 61 20 26 6c   a value to a &l
10ae0 74 3b 74 79 70 65 2d 6e 61 6d 65 26 67 74 3b 20  t;type-name&gt; 
10af0 77 69 74 68 20 6e 6f 20 61 66 66 69 6e 69 74 79  with no affinity
10b00 20 63 61 75 73 65 73 20 74 68 65 20 76 61 6c 75   causes the valu
10b10 65 20 74 6f 0a 20 20 62 65 20 63 6f 6e 76 65 72  e to.  be conver
10b20 74 65 64 20 69 6e 74 6f 20 61 20 42 4c 4f 42 2e  ted into a BLOB.
10b30 20 20 5e 43 61 73 74 69 6e 67 20 74 6f 20 61 20    ^Casting to a 
10b40 42 4c 4f 42 20 63 6f 6e 73 69 73 74 73 20 6f 66  BLOB consists of
10b50 20 66 69 72 73 74 20 63 61 73 74 69 6e 67 0a 20   first casting. 
10b60 20 74 68 65 20 76 61 6c 75 65 20 74 6f 20 54 45   the value to TE
10b70 58 54 20 69 6e 20 74 68 65 20 5b 65 6e 63 6f 64  XT in the [encod
10b80 69 6e 67 5d 20 6f 66 20 74 68 65 20 64 61 74 61  ing] of the data
10b90 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c  base connection,
10ba0 20 74 68 65 6e 0a 20 20 69 6e 74 65 72 70 72 65   then.  interpre
10bb0 74 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 69  ting the resulti
10bc0 6e 67 20 62 79 74 65 20 73 65 71 75 65 6e 63 65  ng byte sequence
10bd0 20 61 73 20 61 20 42 4c 4f 42 20 69 6e 73 74 65   as a BLOB inste
10be0 61 64 20 6f 66 20 61 73 20 54 45 58 54 2e 0a 0a  ad of as TEXT...
10bf0 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 54 45 58 54  <tr>.  <td> TEXT
10c00 0a 20 20 3c 74 64 3e 20 5e 54 6f 20 63 61 73 74  .  <td> ^To cast
10c10 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f   a BLOB value to
10c20 20 54 45 58 54 2c 20 74 68 65 20 73 65 71 75 65   TEXT, the seque
10c30 6e 63 65 20 6f 66 20 62 79 74 65 73 20 74 68 61  nce of bytes tha
10c40 74 20 6d 61 6b 65 20 75 70 20 74 68 65 0a 20 20  t make up the.  
10c50 42 4c 4f 42 20 69 73 20 69 6e 74 65 72 70 72 65  BLOB is interpre
10c60 74 65 64 20 61 73 20 74 65 78 74 20 65 6e 63 6f  ted as text enco
10c70 64 65 64 20 75 73 69 6e 67 20 74 68 65 20 64 61  ded using the da
10c80 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 2e  tabase encoding.
10c90 0a 20 20 3c 70 3e 0a 20 20 20 5e 43 61 73 74 69  .  <p>.   ^Casti
10ca0 6e 67 20 61 6e 20 49 4e 54 45 47 45 52 20 6f 72  ng an INTEGER or
10cb0 20 52 45 41 4c 20 76 61 6c 75 65 20 69 6e 74 6f   REAL value into
10cc0 20 54 45 58 54 20 72 65 6e 64 65 72 73 20 74 68   TEXT renders th
10cd0 65 20 76 61 6c 75 65 20 61 73 20 69 66 20 76 69  e value as if vi
10ce0 61 20 0a 20 20 20 20 5b 73 71 6c 69 74 65 33 5f  a .    [sqlite3_
10cf0 73 6e 70 72 69 6e 74 66 28 29 5d 20 65 78 63 65  snprintf()] exce
10d00 70 74 20 74 68 61 74 20 74 68 65 20 72 65 73 75  pt that the resu
10d10 6c 74 69 6e 67 20 54 45 58 54 20 75 73 65 73 20  lting TEXT uses 
10d20 74 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 6f  the [encoding] o
10d30 66 0a 20 20 20 20 74 68 65 20 64 61 74 61 62 61  f.    the databa
10d40 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 0a  se connection...
10d50 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 52 45 41 4c  <tr>.  <td> REAL
10d60 0a 20 20 3c 74 64 3e 20 5e 57 68 65 6e 20 63 61  .  <td> ^When ca
10d70 73 74 69 6e 67 20 61 20 42 4c 4f 42 20 76 61 6c  sting a BLOB val
10d80 75 65 20 74 6f 20 61 20 52 45 41 4c 2c 20 74 68  ue to a REAL, th
10d90 65 20 76 61 6c 75 65 20 69 73 20 66 69 72 73 74  e value is first
10da0 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 0a 20 20   converted to.  
10db0 20 20 20 20 20 20 54 45 58 54 2e 0a 20 20 20 20        TEXT..    
10dc0 20 20 20 3c 70 3e 5e 57 68 65 6e 20 63 61 73 74     <p>^When cast
10dd0 69 6e 67 20 61 20 54 45 58 54 20 76 61 6c 75 65  ing a TEXT value
10de0 20 74 6f 20 52 45 41 4c 2c 20 74 68 65 20 6c 6f   to REAL, the lo
10df0 6e 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 70  ngest possible p
10e00 72 65 66 69 78 20 6f 66 0a 20 20 20 20 20 20 20  refix of.       
10e10 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20   the value that 
10e20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74  can be interpret
10e30 65 64 20 61 73 20 61 20 72 65 61 6c 20 6e 75 6d  ed as a real num
10e40 62 65 72 20 69 73 20 65 78 74 72 61 63 74 65 64  ber is extracted
10e50 20 66 72 6f 6d 0a 20 20 20 20 20 20 20 20 74 68   from.        th
10e60 65 20 54 45 58 54 20 76 61 6c 75 65 20 61 6e 64  e TEXT value and
10e70 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 69   the remainder i
10e80 67 6e 6f 72 65 64 2e 20 5e 41 6e 79 20 6c 65 61  gnored. ^Any lea
10e90 64 69 6e 67 20 73 70 61 63 65 73 20 69 6e 20 74  ding spaces in t
10ea0 68 65 0a 20 20 20 20 20 20 20 20 54 45 58 54 20  he.        TEXT 
10eb0 76 61 6c 75 65 20 61 72 65 20 69 67 6e 6f 72 65  value are ignore
10ec0 64 20 77 68 65 6e 20 63 6f 6e 76 65 72 67 69 6e  d when convergin
10ed0 67 20 66 72 6f 6d 20 54 45 58 54 20 74 6f 20 52  g from TEXT to R
10ee0 45 41 4c 2e 20 5e 28 49 66 20 74 68 65 72 65 20  EAL. ^(If there 
10ef0 69 73 0a 20 20 20 20 20 20 20 20 6e 6f 20 70 72  is.        no pr
10f00 65 66 69 78 20 74 68 61 74 20 63 61 6e 20 62 65  efix that can be
10f10 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
10f20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20 74  a real number, t
10f30 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
10f40 0a 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 73  .        convers
10f50 69 6f 6e 20 69 73 20 30 2e 30 2e 29 5e 0a 0a 3c  ion is 0.0.)^..<
10f60 74 72 3e 0a 20 20 3c 74 64 3e 20 49 4e 54 45 47  tr>.  <td> INTEG
10f70 45 52 0a 20 20 3c 74 64 3e 20 5e 57 68 65 6e 20  ER.  <td> ^When 
10f80 63 61 73 74 69 6e 67 20 61 20 42 4c 4f 42 20 76  casting a BLOB v
10f90 61 6c 75 65 20 74 6f 20 49 4e 54 45 47 45 52 2c  alue to INTEGER,
10fa0 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 66 69   the value is fi
10fb0 72 73 74 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  rst converted to
10fc0 0a 20 20 20 20 20 20 20 20 54 45 58 54 2e 0a 20  .        TEXT.. 
10fd0 20 20 20 20 20 20 3c 70 3e 5e 57 68 65 6e 20 63        <p>^When c
10fe0 61 73 74 69 6e 67 20 61 20 54 45 58 54 20 76 61  asting a TEXT va
10ff0 6c 75 65 20 74 6f 20 49 4e 54 45 47 45 52 2c 20  lue to INTEGER, 
11000 74 68 65 20 6c 6f 6e 67 65 73 74 20 70 6f 73 73  the longest poss
11010 69 62 6c 65 20 70 72 65 66 69 78 20 6f 66 0a 20  ible prefix of. 
11020 20 20 20 20 20 20 20 74 68 65 20 76 61 6c 75 65         the value
11030 20 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74   that can be int
11040 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69  erpreted as an i
11050 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 20 69 73  nteger number is
11060 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 0a   extracted from.
11070 20 20 20 20 20 20 20 20 74 68 65 20 54 45 58 54          the TEXT
11080 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 72   value and the r
11090 65 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72 65 64  emainder ignored
110a0 2e 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67 20 73  . ^Any leading s
110b0 70 61 63 65 73 20 69 6e 20 74 68 65 0a 20 20 20  paces in the.   
110c0 20 20 20 20 20 54 45 58 54 20 76 61 6c 75 65 20       TEXT value 
110d0 77 68 65 6e 20 63 6f 6e 76 65 72 74 69 6e 67 20  when converting 
110e0 66 72 6f 6d 20 54 45 58 54 20 74 6f 20 49 4e 54  from TEXT to INT
110f0 45 47 45 52 20 61 72 65 20 69 67 6e 6f 72 65 64  EGER are ignored
11100 2e 20 5e 49 66 20 74 68 65 72 65 0a 20 20 20 20  . ^If there.    
11110 20 20 20 20 69 73 20 6e 6f 20 70 72 65 66 69 78      is no prefix
11120 20 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74   that can be int
11130 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69  erpreted as an i
11140 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 2c 20 74  nteger number, t
11150 68 65 20 72 65 73 75 6c 74 0a 20 20 20 20 20 20  he result.      
11160 20 20 6f 66 20 74 68 65 20 63 6f 6e 76 65 72 73    of the convers
11170 69 6f 6e 20 69 73 20 30 2e 0a 0a 20 20 20 20 20  ion is 0...     
11180 20 3c 70 3e 5e 41 20 63 61 73 74 20 6f 66 20 61   <p>^A cast of a
11190 20 52 45 41 4c 20 76 61 6c 75 65 20 69 6e 74 6f   REAL value into
111a0 20 61 6e 20 49 4e 54 45 47 45 52 20 77 69 6c 6c   an INTEGER will
111b0 20 74 72 75 6e 63 61 74 65 20 74 68 65 20 66 72   truncate the fr
111c0 61 63 74 69 6f 6e 61 6c 0a 20 20 20 20 20 20 70  actional.      p
111d0 61 72 74 20 6f 66 20 74 68 65 20 52 45 41 4c 2e  art of the REAL.
111e0 20 20 5e 49 66 20 61 6e 20 52 45 41 4c 20 69 73    ^If an REAL is
111f0 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62 65   too large to be
11200 20 72 65 70 72 65 73 65 6e 74 65 64 20 61 73 20   represented as 
11210 61 6e 20 0a 20 20 20 20 20 20 49 4e 54 45 47 45  an .      INTEGE
11220 52 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  R then the resul
11230 74 20 6f 66 20 74 68 65 20 63 61 73 74 20 69 73  t of the cast is
11240 20 74 68 65 20 6c 61 72 67 65 73 74 20 6e 65 67   the largest neg
11250 61 74 69 76 65 20 69 6e 74 65 67 65 72 3a 20 0a  ative integer: .
11260 20 20 20 20 20 20 2d 39 32 32 33 33 37 32 30 33        -922337203
11270 36 38 35 34 37 37 35 38 30 38 2e 0a 0a 3c 74 72  6854775808...<tr
11280 3e 0a 20 20 3c 74 64 3e 20 4e 55 4d 45 52 49 43  >.  <td> NUMERIC
11290 0a 20 20 3c 74 64 3e 20 5e 43 61 73 74 69 6e 67  .  <td> ^Casting
112a0 20 61 20 54 45 58 54 20 6f 72 20 42 4c 4f 42 20   a TEXT or BLOB 
112b0 76 61 6c 75 65 20 69 6e 74 6f 20 4e 55 4d 45 52  value into NUMER
112c0 49 43 20 66 69 72 73 74 20 64 6f 65 73 20 61 20  IC first does a 
112d0 66 6f 72 63 65 64 0a 20 20 20 63 6f 6e 76 65 72  forced.   conver
112e0 73 69 6f 6e 20 69 6e 74 6f 20 52 45 41 4c 20 62  sion into REAL b
112f0 75 74 20 74 68 65 6e 20 66 75 72 74 68 65 72 20  ut then further 
11300 63 6f 6e 76 65 72 74 73 20 74 68 65 20 72 65 73  converts the res
11310 75 6c 74 20 69 6e 74 6f 20 49 4e 54 45 47 45 52  ult into INTEGER
11320 20 69 66 0a 20 20 20 61 6e 64 20 6f 6e 6c 79 20   if.   and only 
11330 69 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f  if the conversio
11340 6e 20 66 72 6f 6d 20 52 45 41 4c 20 74 6f 20 49  n from REAL to I
11350 4e 54 45 47 45 52 20 69 73 20 6c 6f 73 73 6c 65  NTEGER is lossle
11360 73 73 20 61 6e 64 20 72 65 76 65 72 73 69 62 6c  ss and reversibl
11370 65 2e 0a 20 20 20 54 68 69 73 20 69 73 20 74 68  e..   This is th
11380 65 20 6f 6e 6c 79 20 63 6f 6e 74 65 78 74 20 69  e only context i
11390 6e 20 53 51 4c 69 74 65 20 77 68 65 72 65 20 74  n SQLite where t
113a0 68 65 20 4e 55 4d 45 52 49 43 20 61 6e 64 20 49  he NUMERIC and I
113b0 4e 54 45 47 45 52 20 5b 61 66 66 69 6e 69 74 69  NTEGER [affiniti
113c0 65 73 5d 0a 20 20 20 62 65 68 61 76 65 20 64 69  es].   behave di
113d0 66 66 65 72 65 6e 74 6c 79 2e 0a 20 20 20 3c 70  fferently..   <p
113e0 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 52 45 41  > ^Casting a REA
113f0 4c 20 6f 72 20 49 4e 54 45 47 45 52 20 76 61 6c  L or INTEGER val
11400 75 65 20 74 6f 20 4e 55 4d 45 52 49 43 20 69 73  ue to NUMERIC is
11410 20 61 20 6e 6f 2d 6f 70 2c 20 65 76 65 6e 20 69   a no-op, even i
11420 66 20 61 20 72 65 61 6c 0a 20 20 20 76 61 6c 75  f a real.   valu
11430 65 20 63 6f 75 6c 64 20 62 65 20 6c 6f 73 73 6c  e could be lossl
11440 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20  essly converted 
11450 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 0a  to an integer...
11460 3c 2f 74 72 3e 0a 0a 3c 2f 74 61 62 6c 65 3e 0a  </tr>..</table>.
11470 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74  .<p>^Note that t
11480 68 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 63  he result from c
11490 61 73 74 69 6e 67 20 61 6e 79 20 6e 6f 6e 2d 42  asting any non-B
114a0 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f 20 61  LOB value into a
114b0 20 0a 42 4c 4f 42 20 61 6e 64 20 74 68 65 20 72   .BLOB and the r
114c0 65 73 75 6c 74 20 66 72 6f 6d 20 63 61 73 74 69  esult from casti
114d0 6e 67 20 61 6e 79 20 42 4c 4f 42 20 76 61 6c 75  ng any BLOB valu
114e0 65 20 69 6e 74 6f 20 61 20 6e 6f 6e 2d 42 4c 4f  e into a non-BLO
114f0 42 20 76 61 6c 75 65 0a 6d 61 79 20 62 65 20 64  B value.may be d
11500 69 66 66 65 72 65 6e 74 20 64 65 70 65 6e 64 69  ifferent dependi
11510 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68  ng on whether th
11520 65 20 64 61 74 61 62 61 73 65 20 5b 65 6e 63 6f  e database [enco
11530 64 69 6e 67 5d 20 69 73 20 55 54 46 2d 38 2c 0a  ding] is UTF-8,.
11540 55 54 46 2d 31 36 62 65 2c 20 6f 72 20 55 54 46  UTF-16be, or UTF
11550 2d 31 36 6c 65 2e 0a 0a 3c 68 33 3e 46 75 6e 63  -16le...<h3>Func
11560 74 69 6f 6e 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 42  tions</h3>.<p>^B
11570 6f 74 68 20 5b 63 6f 72 65 66 75 6e 63 7c 73 69  oth [corefunc|si
11580 6d 70 6c 65 5d 20 61 6e 64 20 5b 61 67 67 66 75  mple] and [aggfu
11590 6e 63 7c 61 67 67 72 65 67 61 74 65 5d 20 66 75  nc|aggregate] fu
115a0 6e 63 74 69 6f 6e 73 20 61 72 65 20 73 75 70 70  nctions are supp
115b0 6f 72 74 65 64 2e 0a 28 46 6f 72 20 70 72 65 73  orted..(For pres
115c0 65 6e 74 61 74 69 6f 6e 20 70 75 72 70 6f 73 65  entation purpose
115d0 73 2c 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69  s, simple functi
115e0 6f 6e 73 20 61 72 65 20 66 75 72 74 68 65 72 20  ons are further 
115f0 73 75 62 64 69 76 69 64 65 64 20 69 6e 74 6f 0a  subdivided into.
11600 5b 63 6f 72 65 66 75 6e 63 20 7c 20 63 6f 72 65  [corefunc | core
11610 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 6e 64 20   functions] and 
11620 5b 64 61 74 65 66 75 6e 63 20 7c 20 64 61 74 65  [datefunc | date
11630 2d 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d  -time functions]
11640 2e 29 0a 5e 41 20 73 69 6d 70 6c 65 20 66 75 6e  .).^A simple fun
11650 63 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65  ction can be use
11660 64 20 69 6e 20 61 6e 79 20 65 78 70 72 65 73 73  d in any express
11670 69 6f 6e 2e 20 20 5e 53 69 6d 70 6c 65 20 66 75  ion.  ^Simple fu
11680 6e 63 74 69 6f 6e 73 20 72 65 74 75 72 6e 0a 61  nctions return.a
11690 20 72 65 73 75 6c 74 20 69 6d 6d 65 64 69 61 74   result immediat
116a0 65 6c 79 20 62 61 73 65 64 20 6f 6e 20 74 68 65  ely based on the
116b0 69 72 20 69 6e 70 75 74 73 2e 20 20 5e 41 67 67  ir inputs.  ^Agg
116c0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
116d0 0a 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65  .may only be use
116e0 64 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74  d in a SELECT st
116f0 61 74 65 6d 65 6e 74 2e 20 20 5e 41 67 67 72 65  atement.  ^Aggre
11700 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 63  gate functions c
11710 6f 6d 70 75 74 65 0a 74 68 65 69 72 20 72 65 73  ompute.their res
11720 75 6c 74 20 61 63 72 6f 73 73 20 61 6c 6c 20 72  ult across all r
11730 6f 77 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ows of the resul
11740 74 20 73 65 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  t set.</p>..<tcl
11750 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
11760 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
117a0 0a 53 65 63 74 69 6f 6e 20 7b 43 6f 72 65 20 46  .Section {Core F
117b0 75 6e 63 74 69 6f 6e 73 7d 20 63 6f 72 65 66 75  unctions} corefu
117c0 6e 63 20 7b 2a 63 6f 72 65 66 75 6e 63 7d 0a 70  nc {*corefunc}.p
117d0 72 6f 63 20 66 75 6e 63 64 65 66 20 7b 73 79 6e  roc funcdef {syn
117e0 74 61 78 20 6b 65 79 77 6f 72 64 73 20 64 65 73  tax keywords des
117f0 63 7d 20 7b 0a 20 20 68 64 5f 70 75 74 73 20 7b  c} {.  hd_puts {
11800 3c 74 72 3e 7d 0a 20 20 72 65 67 73 75 62 20 2d  <tr>}.  regsub -
11810 61 6c 6c 20 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e  all {\s+} [strin
11820 67 20 74 72 69 6d 20 24 73 79 6e 74 61 78 5d 20  g trim $syntax] 
11830 7b 3c 62 72 3e 3c 2f 62 72 3e 7d 20 73 79 6e 74  {<br></br>} synt
11840 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  ax.  regsub -all
11850 20 7b 5c 28 28 5b 5e 2a 29 5d 2b 29 5c 29 7d 20   {\(([^*)]+)\)} 
11860 24 73 79 6e 74 61 78 20 7b 28 3c 69 3e 5c 31 3c  $syntax {(<i>\1<
11870 2f 69 3e 29 7d 20 73 79 6e 74 61 78 0a 20 20 72  /i>)} syntax.  r
11880 65 67 73 75 62 20 2d 61 6c 6c 20 7b 2c 7d 20 24  egsub -all {,} $
11890 73 79 6e 74 61 78 20 7b 3c 2f 69 3e 2c 3c 69 3e  syntax {</i>,<i>
118a0 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75  } syntax.  regsu
118b0 62 20 2d 61 6c 6c 20 7b 3c 69 3e 5c 2e 5c 2e 5c  b -all {<i>\.\.\
118c0 2e 3c 2f 69 3e 7d 20 24 73 79 6e 74 61 78 20 7b  .</i>} $syntax {
118d0 2e 2e 2e 7d 20 73 79 6e 74 61 78 0a 20 20 68 64  ...} syntax.  hd
118e0 5f 70 75 74 73 20 22 3c 74 64 20 76 61 6c 69 67  _puts "<td valig
118f0 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c 69 67 6e 3d  n=\"top\" align=
11900 5c 22 72 69 67 68 74 5c 22 20 77 69 64 74 68 3d  \"right\" width=
11910 5c 22 31 32 30 5c 22 3e 22 0a 20 20 69 66 20 7b  \"120\">".  if {
11920 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72  [llength $keywor
11930 64 73 5d 3d 3d 30 7d 20 7b 0a 20 20 20 20 72 65  ds]==0} {.    re
11940 67 65 78 70 20 7b 5b 61 2d 7a 5f 5d 2b 7d 20 24  gexp {[a-z_]+} $
11950 73 79 6e 74 61 78 20 6e 61 6d 65 0a 20 20 20 20  syntax name.    
11960 68 64 5f 66 72 61 67 6d 65 6e 74 20 24 6e 61 6d  hd_fragment $nam
11970 65 20 2a 24 6e 61 6d 65 20 22 24 7b 6e 61 6d 65  e *$name "${name
11980 7d 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  }() SQL function
11990 22 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20  ".  } else {.   
119a0 20 73 65 74 20 66 72 61 67 6e 61 6d 65 20 5b 6c   set fragname [l
119b0 69 6e 64 65 78 20 24 6b 65 79 77 6f 72 64 73 20  index $keywords 
119c0 30 5d 0a 20 20 20 20 72 65 67 73 75 62 20 2d 61  0].    regsub -a
119d0 6c 6c 20 7b 5b 5e 61 2d 7a 5d 7d 20 24 66 72 61  ll {[^a-z]} $fra
119e0 67 6e 61 6d 65 20 7b 7d 20 66 72 61 67 6e 61 6d  gname {} fragnam
119f0 65 0a 20 20 20 20 68 64 5f 66 72 61 67 6d 65 6e  e.    hd_fragmen
11a00 74 20 24 66 72 61 67 6e 61 6d 65 0a 20 20 20 20  t $fragname.    
11a10 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73  eval hd_keywords
11a20 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 5c 6e   [string map {\n
11a30 20 7b 20 7d 7d 20 24 6b 65 79 77 6f 72 64 73 5d   { }} $keywords]
11a40 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74 73 20 22  .  }.  hd_puts "
11a50 24 73 79 6e 74 61 78 3c 2f 74 64 3e 22 0a 20 20  $syntax</td>".  
11a60 68 64 5f 70 75 74 73 20 7b 3c 74 64 20 76 61 6c  hd_puts {<td val
11a70 69 67 6e 3d 22 74 6f 70 22 3e 7d 0a 20 20 68 64  ign="top">}.  hd
11a80 5f 72 65 73 6f 6c 76 65 20 24 64 65 73 63 0a 20  _resolve $desc. 
11a90 20 68 64 5f 70 75 74 73 20 7b 3c 2f 74 64 3e 3c   hd_puts {</td><
11aa0 2f 74 72 3e 7d 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a  /tr>}.}.</tcl>..
11ab0 3c 70 3e 54 68 65 20 63 6f 72 65 20 66 75 6e 63  <p>The core func
11ac0 74 69 6f 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f  tions shown belo
11ad0 77 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  w are available 
11ae0 62 79 20 64 65 66 61 75 6c 74 2e 20 0a 5b 64 61  by default. .[da
11af0 74 65 66 75 6e 63 20 7c 20 44 61 74 65 20 26 61  tefunc | Date &a
11b00 6d 70 3b 20 54 69 6d 65 20 66 75 6e 63 74 69 6f  mp; Time functio
11b10 6e 73 5d 20 61 6e 64 0a 5b 61 67 67 66 75 6e 63  ns] and.[aggfunc
11b20 20 7c 20 61 67 67 72 65 67 61 74 65 20 66 75 6e   | aggregate fun
11b30 63 74 69 6f 6e 73 5d 20 61 72 65 20 64 6f 63 75  ctions] are docu
11b40 6d 65 6e 74 65 64 20 73 65 70 61 72 61 74 65 6c  mented separatel
11b50 79 2e 20 20 41 6e 0a 61 70 70 6c 69 63 61 74 69  y.  An.applicati
11b60 6f 6e 20 6d 61 79 20 64 65 66 69 6e 65 20 61 64  on may define ad
11b70 64 69 74 69 6f 6e 61 6c 0a 66 75 6e 63 74 69 6f  ditional.functio
11b80 6e 73 20 77 72 69 74 74 65 6e 20 69 6e 20 43 20  ns written in C 
11b90 61 6e 64 20 61 64 64 65 64 20 74 6f 20 74 68 65  and added to the
11ba0 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
11bb0 20 75 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c 69   using.the [sqli
11bc0 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
11bd0 69 6f 6e 28 29 5d 20 41 50 49 2e 3c 2f 70 3e 0a  ion()] API.</p>.
11be0 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30  .<table border=0
11bf0 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e   cellpadding=10>
11c00 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64 65 66 20 7b  .<tcl>.funcdef {
11c10 61 62 73 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  abs(X)} {} {.  ^
11c20 54 68 65 20 61 62 73 28 58 29 20 66 75 6e 63 74  The abs(X) funct
11c30 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
11c40 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f  absolute value o
11c50 66 20 74 68 65 20 6e 75 6d 65 72 69 63 0a 20 20  f the numeric.  
11c60 61 72 67 75 6d 65 6e 74 20 58 2e 20 20 5e 41 62  argument X.  ^Ab
11c70 73 28 58 29 20 72 65 74 75 72 6e 73 20 4e 55 4c  s(X) returns NUL
11c80 4c 20 69 66 20 58 20 69 73 20 4e 55 4c 4c 2e 20  L if X is NULL. 
11c90 0a 20 20 5e 28 41 62 73 28 58 29 20 72 65 74 75  .  ^(Abs(X) retu
11ca0 72 6e 20 30 2e 30 20 69 66 20 58 20 69 73 20 61  rn 0.0 if X is a
11cb0 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 0a   string or blob.
11cc0 20 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65    that cannot be
11cd0 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 20   converted to a 
11ce0 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 2e 29 5e  numeric value.)^
11cf0 20 20 5e 49 66 20 58 20 69 73 20 74 68 65 20 0a    ^If X is the .
11d00 20 20 69 6e 74 65 67 65 72 20 2d 39 32 32 33 33    integer -92233
11d10 37 32 30 33 36 38 35 34 37 37 35 38 30 37 20 74  72036854775807 t
11d20 68 65 6e 20 61 62 73 28 58 29 20 74 68 72 6f 77  hen abs(X) throw
11d30 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76 65  s an integer ove
11d40 72 66 6c 6f 77 0a 20 20 65 72 72 6f 72 20 73 69  rflow.  error si
11d50 6e 63 65 20 74 68 65 72 65 20 69 73 20 6e 6f 20  nce there is no 
11d60 65 71 75 69 76 61 6c 65 6e 74 20 70 6f 73 69 74  equivalent posit
11d70 69 76 65 20 36 34 2d 62 69 74 20 74 77 6f 20 63  ive 64-bit two c
11d80 6f 6d 70 6c 65 6d 65 6e 74 20 76 61 6c 75 65 2e  omplement value.
11d90 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 68 61  .}..funcdef {cha
11da0 6e 67 65 73 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e  nges()} {} {.  ^
11db0 54 68 65 20 63 68 61 6e 67 65 73 28 29 20 66 75  The changes() fu
11dc0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
11dd0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61 74  he number of dat
11de0 61 62 61 73 65 20 72 6f 77 73 20 74 68 61 74 20  abase rows that 
11df0 77 65 72 65 20 63 68 61 6e 67 65 64 0a 20 20 6f  were changed.  o
11e00 72 20 69 6e 73 65 72 74 65 64 20 6f 72 20 64 65  r inserted or de
11e10 6c 65 74 65 64 20 62 79 20 74 68 65 20 6d 6f 73  leted by the mos
11e20 74 20 72 65 63 65 6e 74 6c 79 20 63 6f 6d 70 6c  t recently compl
11e30 65 74 65 64 20 49 4e 53 45 52 54 2c 20 44 45 4c  eted INSERT, DEL
11e40 45 54 45 2c 0a 20 20 6f 72 20 55 50 44 41 54 45  ETE,.  or UPDATE
11e50 20 73 74 61 74 65 6d 65 6e 74 2c 20 65 78 63 6c   statement, excl
11e60 75 73 69 76 65 20 6f 66 20 73 74 61 74 65 6d 65  usive of stateme
11e70 6e 74 73 20 69 6e 20 6c 6f 77 65 72 2d 6c 65 76  nts in lower-lev
11e80 65 6c 20 74 72 69 67 67 65 72 73 2e 0a 20 20 5e  el triggers..  ^
11e90 54 68 65 20 63 68 61 6e 67 65 73 28 29 20 53 51  The changes() SQ
11ea0 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20  L function is a 
11eb0 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
11ec0 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e  he [sqlite3_chan
11ed0 67 65 73 28 29 5d 0a 20 20 43 2f 43 2b 2b 20 66  ges()].  C/C++ f
11ee0 75 6e 63 74 69 6f 6e 20 61 6e 64 20 68 65 6e 63  unction and henc
11ef0 65 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 73 61  e follows the sa
11f00 6d 65 20 72 75 6c 65 73 20 66 6f 72 20 63 6f 75  me rules for cou
11f10 6e 74 69 6e 67 20 63 68 61 6e 67 65 73 2e 0a 7d  nting changes..}
11f20 0a 0a 66 75 6e 63 64 65 66 20 7b 63 6f 61 6c 65  ..funcdef {coale
11f30 73 63 65 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 7d  sce(X,Y,...)} {}
11f40 20 7b 0a 20 20 5e 54 68 65 20 63 6f 61 6c 65 73   {.  ^The coales
11f50 63 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  ce() function re
11f60 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20  turns a copy of 
11f70 69 74 73 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55  its first non-NU
11f80 4c 4c 20 61 72 67 75 6d 65 6e 74 2c 20 6f 72 0a  LL argument, or.
11f90 20 20 4e 55 4c 4c 20 69 66 20 61 6c 6c 20 61 72    NULL if all ar
11fa0 67 75 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c 4c  guments are NULL
11fb0 2e 20 20 5e 43 6f 61 6c 65 73 63 65 28 29 20 6d  .  ^Coalesce() m
11fc0 75 73 74 20 62 65 20 61 74 20 6c 65 61 73 74 20  ust be at least 
11fd0 0a 20 20 32 20 61 72 67 75 6d 65 6e 74 73 2e 0a  .  2 arguments..
11fe0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67 6c 6f 62  }..funcdef {glob
11ff0 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  (X,Y)} {} {.  ^T
12000 68 65 20 67 6c 6f 62 28 58 2c 59 29 20 66 75 6e  he glob(X,Y) fun
12010 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c  ction is equival
12020 65 6e 74 20 74 6f 20 74 68 65 0a 20 20 65 78 70  ent to the.  exp
12030 72 65 73 73 69 6f 6e 20 22 3c 62 3e 59 20 47 4c  ression "<b>Y GL
12040 4f 42 20 58 3c 2f 62 3e 22 2e 0a 20 20 4e 6f 74  OB X</b>"..  Not
12050 65 20 74 68 61 74 20 74 68 65 20 58 20 61 6e 64  e that the X and
12060 20 59 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65   Y arguments are
12070 20 72 65 76 65 72 73 65 64 20 69 6e 20 74 68 65   reversed in the
12080 20 67 6c 6f 62 28 29 20 66 75 6e 63 74 69 6f 6e   glob() function
12090 0a 20 20 72 65 6c 61 74 69 76 65 20 74 6f 20 74  .  relative to t
120a0 68 65 20 69 6e 66 69 78 20 5b 47 4c 4f 42 5d 20  he infix [GLOB] 
120b0 6f 70 65 72 61 74 6f 72 2e 0a 20 20 5e 49 66 20  operator..  ^If 
120c0 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65  the [sqlite3_cre
120d0 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20  ate_function()] 
120e0 69 6e 74 65 72 66 61 63 65 20 69 73 20 75 73 65  interface is use
120f0 64 20 74 6f 0a 20 20 6f 76 65 72 72 69 64 65 20  d to.  override 
12100 74 68 65 20 67 6c 6f 62 28 58 2c 59 29 20 66 75  the glob(X,Y) fu
12110 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 6e 20 61  nction with an a
12120 6c 74 65 72 6e 61 74 69 76 65 20 69 6d 70 6c 65  lternative imple
12130 6d 65 6e 74 61 74 69 6f 6e 20 74 68 65 6e 0a 20  mentation then. 
12140 20 74 68 65 20 5b 47 4c 4f 42 5d 20 6f 70 65 72   the [GLOB] oper
12150 61 74 6f 72 20 77 69 6c 6c 20 69 6e 76 6f 6b 65  ator will invoke
12160 20 74 68 65 20 61 6c 74 65 72 6e 61 74 69 76 65   the alternative
12170 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
12180 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 69 66 6e  .}..funcdef {ifn
12190 75 6c 6c 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  ull(X,Y)} {} {. 
121a0 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28 29 20 66   ^The ifnull() f
121b0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
121c0 61 20 63 6f 70 79 20 6f 66 20 69 74 73 20 66 69  a copy of its fi
121d0 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67  rst non-NULL arg
121e0 75 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c  ument, or.  NULL
121f0 20 69 66 20 62 6f 74 68 20 61 72 67 75 6d 65 6e   if both argumen
12200 74 73 20 61 72 65 20 4e 55 4c 4c 2e 20 20 5e 49  ts are NULL.  ^I
12210 66 6e 75 6c 6c 28 29 20 6d 75 73 74 20 68 61 76  fnull() must hav
12220 65 20 65 78 61 63 74 6c 79 20 32 20 61 72 67 75  e exactly 2 argu
12230 6d 65 6e 74 73 2e 0a 20 20 5e 54 68 65 20 69 66  ments..  ^The if
12240 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69 6f 6e 20  null() function 
12250 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f  is equivalent to
12260 20 5b 63 6f 61 6c 65 73 63 65 28 29 5d 20 77 69   [coalesce()] wi
12270 74 68 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73  th two arguments
12280 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 68 65  ..}..funcdef {he
12290 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  x(X)} {} {.  ^Th
122a0 65 20 68 65 78 28 29 20 66 75 6e 63 74 69 6f 6e  e hex() function
122b0 20 69 6e 74 65 72 70 72 65 74 73 20 69 74 73 20   interprets its 
122c0 61 72 67 75 6d 65 6e 74 20 61 73 20 61 20 42 4c  argument as a BL
122d0 4f 42 20 61 6e 64 20 72 65 74 75 72 6e 73 0a 20  OB and returns. 
122e0 20 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 20   a string which 
122f0 69 73 20 74 68 65 20 75 70 70 65 72 2d 63 61 73  is the upper-cas
12300 65 20 68 65 78 61 64 65 63 69 6d 61 6c 20 72 65  e hexadecimal re
12310 6e 64 65 72 69 6e 67 20 6f 66 20 74 68 65 20 63  ndering of the c
12320 6f 6e 74 65 6e 74 20 6f 66 0a 20 20 74 68 61 74  ontent of.  that
12330 20 62 6c 6f 62 2e 0a 7d 0a 0a 66 75 6e 63 64 65   blob..}..funcde
12340 66 20 7b 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  f {last_insert_r
12350 6f 77 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e  owid()} {} {.  ^
12360 54 68 65 20 6c 61 73 74 5f 69 6e 73 65 72 74 5f  The last_insert_
12370 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e  rowid() function
12380 20 72 65 74 75 72 6e 73 20 74 68 65 20 5b 52 4f   returns the [RO
12390 57 49 44 5d 0a 20 20 6f 66 20 74 68 65 20 6c 61  WID].  of the la
123a0 73 74 20 72 6f 77 20 69 6e 73 65 72 74 20 66 72  st row insert fr
123b0 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
123c0 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 68 69 63 68  connection which
123d0 20 69 6e 76 6f 6b 65 64 20 74 68 65 0a 20 20 66   invoked the.  f
123e0 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54 68 65 20  unction..  ^The 
123f0 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
12400 64 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  d() SQL function
12410 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72   is a wrapper ar
12420 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c 69  ound the.  [sqli
12430 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
12440 72 6f 77 69 64 28 29 5d 20 43 2f 43 2b 2b 20 69  rowid()] C/C++ i
12450 6e 74 65 72 66 61 63 65 20 66 75 6e 63 74 69 6f  nterface functio
12460 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c  n..}..funcdef {l
12470 65 6e 67 74 68 28 58 29 7d 20 7b 7d 20 7b 0a 20  ength(X)} {} {. 
12480 20 5e 54 68 65 20 6c 65 6e 67 74 68 28 58 29 20   ^The length(X) 
12490 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
124a0 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 58   the length of X
124b0 20 69 6e 20 0a 20 20 63 68 61 72 61 63 74 65 72   in .  character
124c0 73 20 69 66 20 58 20 69 73 20 61 20 73 74 72 69  s if X is a stri
124d0 6e 67 2c 20 6f 72 20 69 6e 20 62 79 74 65 73 20  ng, or in bytes 
124e0 69 66 20 58 20 69 73 20 61 20 62 6c 6f 62 2e 0a  if X is a blob..
124f0 20 20 5e 49 66 20 58 20 69 73 20 4e 55 4c 4c 20    ^If X is NULL 
12500 74 68 65 6e 20 6c 65 6e 67 74 68 28 58 29 20 69  then length(X) i
12510 73 20 4e 55 4c 4c 2e 0a 20 20 5e 49 66 20 58 20  s NULL..  ^If X 
12520 69 73 20 6e 75 6d 65 72 69 63 20 74 68 65 6e 20  is numeric then 
12530 6c 65 6e 67 74 68 28 58 29 20 72 65 74 75 72 6e  length(X) return
12540 73 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20  s the length of 
12550 61 20 73 74 72 69 6e 67 0a 20 20 72 65 70 72 65  a string.  repre
12560 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 58 2e 0a  sentation of X..
12570 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 69 6b 65  }..funcdef {like
12580 28 58 2c 59 29 20 6c 69 6b 65 28 58 2c 59 2c 5a  (X,Y) like(X,Y,Z
12590 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c  )} {} {.  ^The l
125a0 69 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 69  ike() function i
125b0 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d  s used to implem
125c0 65 6e 74 20 74 68 65 0a 20 20 22 3c 62 3e 59 20  ent the.  "<b>Y 
125d0 4c 49 4b 45 20 58 20 26 23 39 31 3b 45 53 43 41  LIKE X &#91;ESCA
125e0 50 45 20 5a 26 23 39 33 3b 3c 2f 62 3e 22 20 65  PE Z&#93;</b>" e
125f0 78 70 72 65 73 73 69 6f 6e 2e 20 0a 20 20 5e 49  xpression. .  ^I
12600 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 45  f the optional E
12610 53 43 41 50 45 20 63 6c 61 75 73 65 20 69 73 20  SCAPE clause is 
12620 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68  present, then th
12630 65 0a 20 20 6c 69 6b 65 28 29 20 66 75 6e 63 74  e.  like() funct
12640 69 6f 6e 20 69 73 20 69 6e 76 6f 6b 65 64 20 77  ion is invoked w
12650 69 74 68 20 74 68 72 65 65 20 61 72 67 75 6d 65  ith three argume
12660 6e 74 73 2e 20 20 5e 4f 74 68 65 72 77 69 73 65  nts.  ^Otherwise
12670 2c 20 69 74 20 69 73 0a 20 20 69 6e 76 6f 6b 65  , it is.  invoke
12680 64 20 77 69 74 68 20 74 77 6f 20 61 72 67 75 6d  d with two argum
12690 65 6e 74 73 20 6f 6e 6c 79 2e 20 4e 6f 74 65 20  ents only. Note 
126a0 74 68 61 74 20 74 68 65 20 58 20 61 6e 64 20 59  that the X and Y
126b0 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 0a   parameters are.
126c0 20 20 72 65 76 65 72 73 65 64 20 69 6e 20 74 68    reversed in th
126d0 65 20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f  e like() functio
126e0 6e 20 72 65 6c 61 74 69 76 65 20 74 6f 20 74 68  n relative to th
126f0 65 20 69 6e 66 69 78 20 5b 4c 49 4b 45 5d 20 6f  e infix [LIKE] o
12700 70 65 72 61 74 6f 72 2e 0a 20 20 5e 54 68 65 20  perator..  ^The 
12710 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  [sqlite3_create_
12720 66 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65  function()] inte
12730 72 66 61 63 65 20 63 61 6e 20 62 65 20 75 73 65  rface can be use
12740 64 20 74 6f 20 6f 76 65 72 72 69 64 65 20 74 68  d to override th
12750 65 0a 20 20 6c 69 6b 65 28 29 20 66 75 6e 63 74  e.  like() funct
12760 69 6f 6e 20 61 6e 64 20 74 68 65 72 65 62 79 20  ion and thereby 
12770 63 68 61 6e 67 65 20 74 68 65 20 6f 70 65 72 61  change the opera
12780 74 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20 5b 4c  tion of the.  [L
12790 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 20 20  IKE] operator.  
127a0 57 68 65 6e 20 6f 76 65 72 72 69 64 69 6e 67 20  When overriding 
127b0 74 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63 74  the like() funct
127c0 69 6f 6e 2c 20 69 74 20 6d 61 79 20 62 65 20 69  ion, it may be i
127d0 6d 70 6f 72 74 61 6e 74 0a 20 20 74 6f 20 6f 76  mportant.  to ov
127e0 65 72 72 69 64 65 20 62 6f 74 68 20 74 68 65 20  erride both the 
127f0 74 77 6f 20 61 6e 64 20 74 68 72 65 65 20 61 72  two and three ar
12800 67 75 6d 65 6e 74 20 76 65 72 73 69 6f 6e 73 20  gument versions 
12810 6f 66 20 74 68 65 20 6c 69 6b 65 28 29 20 0a 20  of the like() . 
12820 20 66 75 6e 63 74 69 6f 6e 2e 20 4f 74 68 65 72   function. Other
12830 77 69 73 65 2c 20 64 69 66 66 65 72 65 6e 74 20  wise, different 
12840 63 6f 64 65 20 6d 61 79 20 62 65 20 63 61 6c 6c  code may be call
12850 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
12860 74 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65  the.  [LIKE] ope
12870 72 61 74 6f 72 20 64 65 70 65 6e 64 69 6e 67 20  rator depending 
12880 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  on whether or no
12890 74 20 61 6e 20 45 53 43 41 50 45 20 63 6c 61 75  t an ESCAPE clau
128a0 73 65 20 77 61 73 20 0a 20 20 73 70 65 63 69 66  se was .  specif
128b0 69 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ied..}..funcdef 
128c0 7b 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28  {load_extension(
128d0 58 29 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  X) load_extensio
128e0 6e 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  n(X,Y)} {} {.  ^
128f0 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  The load_extensi
12900 6f 6e 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  on(X,Y) function
12910 20 6c 6f 61 64 73 20 53 51 4c 69 74 65 20 65 78   loads SQLite ex
12920 74 65 6e 73 69 6f 6e 73 20 6f 75 74 20 6f 66 20  tensions out of 
12930 74 68 65 20 73 68 61 72 65 64 0a 20 20 6c 69 62  the shared.  lib
12940 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65 64 20  rary file named 
12950 58 20 75 73 69 6e 67 20 74 68 65 20 65 6e 74 72  X using the entr
12960 79 20 70 6f 69 6e 74 20 59 2e 20 20 5e 54 68 65  y point Y.  ^The
12970 20 72 65 73 75 6c 74 20 6f 66 20 6c 6f 61 64 5f   result of load_
12980 65 78 74 65 6e 73 69 6f 6e 28 29 0a 20 20 69 73  extension().  is
12990 20 61 6c 77 61 79 73 20 61 20 4e 55 4c 4c 2e 20   always a NULL. 
129a0 20 5e 49 66 20 59 20 69 73 20 6f 6d 69 74 74 65   ^If Y is omitte
129b0 64 20 74 68 65 6e 20 74 68 65 20 64 65 66 61 75  d then the defau
129c0 6c 74 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a 20  lt entry point. 
129d0 20 6f 66 20 3c 62 3e 73 71 6c 69 74 65 33 5f 65   of <b>sqlite3_e
129e0 78 74 65 6e 73 69 6f 6e 5f 69 6e 69 74 3c 2f 62  xtension_init</b
129f0 3e 20 69 73 20 75 73 65 64 2e 20 20 5e 54 68 65  > is used.  ^The
12a00 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28   load_extension(
12a10 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 61 69  ) function.  rai
12a20 73 65 73 20 61 6e 20 65 78 63 65 70 74 69 6f 6e  ses an exception
12a30 20 69 66 20 74 68 65 20 65 78 74 65 6e 73 69 6f   if the extensio
12a40 6e 20 66 61 69 6c 73 20 74 6f 20 6c 6f 61 64 20  n fails to load 
12a50 6f 72 20 69 6e 69 74 69 61 6c 69 7a 65 20 63 6f  or initialize co
12a60 72 72 65 63 74 6c 79 2e 0a 0a 20 20 3c 70 3e 5e  rrectly...  <p>^
12a70 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  The load_extensi
12a80 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 69  on() function wi
12a90 6c 6c 20 66 61 69 6c 20 69 66 20 74 68 65 20 65  ll fail if the e
12aa0 78 74 65 6e 73 69 6f 6e 20 61 74 74 65 6d 70 74  xtension attempt
12ab0 73 20 74 6f 20 0a 20 20 6d 6f 64 69 66 79 20 6f  s to .  modify o
12ac0 72 20 64 65 6c 65 74 65 20 61 20 53 51 4c 20 66  r delete a SQL f
12ad0 75 6e 63 74 69 6f 6e 20 6f 72 20 63 6f 6c 6c 61  unction or colla
12ae0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20  ting sequence.  
12af0 5e 54 68 65 0a 20 20 65 78 74 65 6e 73 69 6f 6e  ^The.  extension
12b00 20 63 61 6e 20 61 64 64 20 6e 65 77 20 66 75 6e   can add new fun
12b10 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74  ctions or collat
12b20 69 6e 67 20 73 65 71 75 65 6e 63 65 73 2c 20 62  ing sequences, b
12b30 75 74 20 63 61 6e 6e 6f 74 0a 20 20 6d 6f 64 69  ut cannot.  modi
12b40 66 79 20 6f 72 20 64 65 6c 65 74 65 20 65 78 69  fy or delete exi
12b50 73 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20  sting functions 
12b60 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  or collating seq
12b70 75 65 6e 63 65 73 20 62 65 63 61 75 73 65 0a 20  uences because. 
12b80 20 74 68 6f 73 65 20 66 75 6e 63 74 69 6f 6e 73   those functions
12b90 20 61 6e 64 2f 6f 72 20 63 6f 6c 6c 61 74 69 6e   and/or collatin
12ba0 67 20 73 65 71 75 65 6e 63 65 73 20 6d 69 67 68  g sequences migh
12bb0 74 20 62 65 20 75 73 65 64 20 65 6c 73 65 77 68  t be used elsewh
12bc0 65 72 65 0a 20 20 69 6e 20 74 68 65 20 63 75 72  ere.  in the cur
12bd0 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 53  rently running S
12be0 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  QL statement.  T
12bf0 6f 20 6c 6f 61 64 20 61 6e 20 65 78 74 65 6e 73  o load an extens
12c00 69 6f 6e 20 74 68 61 74 0a 20 20 63 68 61 6e 67  ion that.  chang
12c10 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20 66 75  es or deletes fu
12c20 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61  nctions or colla
12c30 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 2c 20  ting sequences, 
12c40 75 73 65 20 74 68 65 0a 20 20 5b 73 71 6c 69 74  use the.  [sqlit
12c50 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  e3_load_extensio
12c60 6e 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67 65 20  n()] C-language 
12c70 41 50 49 2e 3c 2f 70 3e 0a 7d 0a 0a 66 75 6e 63  API.</p>.}..func
12c80 64 65 66 20 7b 6c 6f 77 65 72 28 58 29 7d 20 7b  def {lower(X)} {
12c90 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 6f 77 65 72  } {.  ^The lower
12ca0 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  (X) function ret
12cb0 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 73  urns a copy of s
12cc0 74 72 69 6e 67 20 58 20 77 69 74 68 20 61 6c 6c  tring X with all
12cd0 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
12ce0 73 0a 20 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  s.  converted to
12cf0 20 6c 6f 77 65 72 20 63 61 73 65 2e 20 20 5e 54   lower case.  ^T
12d00 68 65 20 64 65 66 61 75 6c 74 20 62 75 69 6c 74  he default built
12d10 2d 69 6e 20 6c 6f 77 65 72 28 29 20 66 75 6e 63  -in lower() func
12d20 74 69 6f 6e 20 77 6f 72 6b 73 0a 20 20 66 6f 72  tion works.  for
12d30 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
12d40 73 20 6f 6e 6c 79 2e 20 20 54 6f 20 64 6f 20 63  s only.  To do c
12d50 61 73 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  ase conversions 
12d60 6f 6e 20 6e 6f 6e 2d 41 53 43 49 49 0a 20 20 63  on non-ASCII.  c
12d70 68 61 72 61 63 74 65 72 73 2c 20 6c 6f 61 64 20  haracters, load 
12d80 74 68 65 20 49 43 55 20 65 78 74 65 6e 73 69 6f  the ICU extensio
12d90 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c  n..}..funcdef {l
12da0 74 72 69 6d 28 58 29 20 6c 74 72 69 6d 28 58 2c  trim(X) ltrim(X,
12db0 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
12dc0 6c 74 72 69 6d 28 58 2c 59 29 20 66 75 6e 63 74  ltrim(X,Y) funct
12dd0 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74  ion returns a st
12de0 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 72  ring formed by r
12df0 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64 20  emoving any and 
12e00 61 6c 6c 0a 20 20 63 68 61 72 61 63 74 65 72 73  all.  characters
12e10 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e 20   that appear in 
12e20 59 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74 20  Y from the left 
12e30 73 69 64 65 20 6f 66 20 58 2e 0a 20 20 5e 49 66  side of X..  ^If
12e40 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20   the Y argument 
12e50 69 73 20 6f 6d 69 74 74 65 64 2c 20 6c 74 72 69  is omitted, ltri
12e60 6d 28 58 29 20 72 65 6d 6f 76 65 73 20 73 70 61  m(X) removes spa
12e70 63 65 73 20 66 72 6f 6d 20 74 68 65 20 6c 65 66  ces from the lef
12e80 74 20 73 69 64 65 0a 20 20 6f 66 20 58 2e 0a 7d  t side.  of X..}
12e90 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78 28 58  ..funcdef {max(X
12ea0 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 61 78 43 6f  ,Y,...)} {*maxCo
12eb0 72 65 46 75 6e 63 20 2a 6d 61 78 20 7b 6d 61 78  reFunc *max {max
12ec0 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d  () SQL function}
12ed0 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69  } {.  ^The multi
12ee0 2d 61 72 67 75 6d 65 6e 74 20 6d 61 78 28 29 20  -argument max() 
12ef0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
12f00 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 77 69   the argument wi
12f10 74 68 20 74 68 65 20 0a 20 20 6d 61 78 69 6d 75  th the .  maximu
12f20 6d 20 76 61 6c 75 65 2c 20 6f 72 20 72 65 74 75  m value, or retu
12f30 72 6e 20 4e 55 4c 4c 20 69 66 20 61 6e 79 20 61  rn NULL if any a
12f40 72 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c 2e  rgument is NULL.
12f50 20 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61   .  ^The multi-a
12f60 72 67 75 6d 65 6e 74 20 6d 61 78 28 29 20 66 75  rgument max() fu
12f70 6e 63 74 69 6f 6e 20 73 65 61 72 63 68 65 73 20  nction searches 
12f80 69 74 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72  its arguments fr
12f90 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
12fa0 0a 20 20 66 6f 72 20 61 6e 20 61 72 67 75 6d 65  .  for an argume
12fb0 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  nt that defines 
12fc0 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  a collating func
12fd0 74 69 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68  tion and uses th
12fe0 61 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66  at collating.  f
12ff0 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20  unction for all 
13000 73 74 72 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f  string compariso
13010 6e 73 2e 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66  ns.  ^If none of
13020 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74   the arguments t
13030 6f 20 6d 61 78 28 29 0a 20 20 64 65 66 69 6e 65  o max().  define
13040 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e   a collating fun
13050 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20  ction, then the 
13060 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67  BINARY collating
13070 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65   function is use
13080 64 2e 0a 20 20 4e 6f 74 65 20 74 68 61 74 20 3c  d..  Note that <
13090 62 3e 6d 61 78 28 29 3c 2f 62 3e 20 69 73 20 61  b>max()</b> is a
130a0 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e   simple function
130b0 20 77 68 65 6e 0a 20 20 69 74 20 68 61 73 20 32   when.  it has 2
130c0 20 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e   or more argumen
130d0 74 73 20 62 75 74 20 6f 70 65 72 61 74 65 73 20  ts but operates 
130e0 61 73 20 61 6e 0a 20 20 5b 6d 69 6e 41 67 67 46  as an.  [minAggF
130f0 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65 20  unc | aggregate 
13100 66 75 6e 63 74 69 6f 6e 5d 20 69 66 20 67 69 76  function] if giv
13110 65 6e 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65  en only a single
13120 20 61 72 67 75 6d 65 6e 74 2e 0a 7d 0a 0a 66 75   argument..}..fu
13130 6e 63 64 65 66 20 7b 6d 69 6e 28 58 2c 59 2c 2e  ncdef {min(X,Y,.
13140 2e 2e 29 7d 20 7b 2a 6d 69 6e 43 6f 72 65 46 75  ..)} {*minCoreFu
13150 6e 63 20 2a 6d 69 6e 20 7b 6d 69 6e 28 29 20 53  nc *min {min() S
13160 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a  QL function}} {.
13170 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67    ^The multi-arg
13180 75 6d 65 6e 74 20 6d 69 6e 28 29 20 66 75 6e 63  ument min() func
13190 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
131a0 20 61 72 67 75 6d 65 6e 74 20 77 69 74 68 20 74   argument with t
131b0 68 65 0a 20 20 6d 69 6e 69 6d 75 6d 20 76 61 6c  he.  minimum val
131c0 75 65 2e 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69  ue..  ^The multi
131d0 2d 61 72 67 75 6d 65 6e 74 20 6d 69 6e 28 29 20  -argument min() 
131e0 66 75 6e 63 74 69 6f 6e 20 73 65 61 72 63 68 65  function searche
131f0 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74 73 20  s its arguments 
13200 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
13210 68 74 0a 20 20 66 6f 72 20 61 6e 20 61 72 67 75  ht.  for an argu
13220 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65  ment that define
13230 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  s a collating fu
13240 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73 65 73 20  nction and uses 
13250 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 20  that collating. 
13260 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c   function for al
13270 6c 20 73 74 72 69 6e 67 20 63 6f 6d 70 61 72 69  l string compari
13280 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 6f 6e 65 20  sons.  ^If none 
13290 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73  of the arguments
132a0 20 74 6f 20 6d 69 6e 28 29 0a 20 20 64 65 66 69   to min().  defi
132b0 6e 65 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66  ne a collating f
132c0 75 6e 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68  unction, then th
132d0 65 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69  e BINARY collati
132e0 6e 67 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75  ng function is u
132f0 73 65 64 2e 0a 20 20 4e 6f 74 65 20 74 68 61 74  sed..  Note that
13300 20 3c 62 3e 6d 69 6e 28 29 3c 2f 62 3e 20 69 73   <b>min()</b> is
13310 20 61 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69   a simple functi
13320 6f 6e 20 77 68 65 6e 0a 20 20 69 74 20 68 61 73  on when.  it has
13330 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d   2 or more argum
13340 65 6e 74 73 20 62 75 74 20 6f 70 65 72 61 74 65  ents but operate
13350 73 20 61 73 20 61 6e 20 0a 20 20 5b 6d 61 78 41  s as an .  [maxA
13360 67 67 46 75 6e 63 20 7c 20 61 67 67 72 65 67 61  ggFunc | aggrega
13370 74 65 20 66 75 6e 63 74 69 6f 6e 5d 20 69 66 20  te function] if 
13380 67 69 76 65 6e 0a 20 20 6f 6e 6c 79 20 61 20 73  given.  only a s
13390 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2e 0a  ingle argument..
133a0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6e 75 6c 6c  }..funcdef {null
133b0 69 66 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  if(X,Y)} {} {.  
133c0 5e 54 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29  ^The nullif(X,Y)
133d0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
133e0 73 20 69 74 73 20 66 69 72 73 74 20 61 72 67 75  s its first argu
133f0 6d 65 6e 74 20 69 66 20 74 68 65 20 61 72 67 75  ment if the argu
13400 6d 65 6e 74 73 20 61 72 65 0a 20 20 64 69 66 66  ments are.  diff
13410 65 72 65 6e 74 20 61 6e 64 20 4e 55 4c 4c 20 69  erent and NULL i
13420 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20  f the arguments 
13430 61 72 65 20 74 68 65 20 73 61 6d 65 2e 20 20 5e  are the same.  ^
13440 54 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29 20  The nullif(X,Y) 
13450 66 75 6e 63 74 69 6f 6e 0a 20 20 73 65 61 72 63  function.  searc
13460 68 65 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74  hes its argument
13470 73 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  s from left to r
13480 69 67 68 74 20 66 6f 72 20 61 6e 20 61 72 67 75  ight for an argu
13490 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65  ment that define
134a0 73 20 61 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20  s a.  collating 
134b0 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73 65  function and use
134c0 73 20 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67  s that collating
134d0 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c   function for al
134e0 6c 20 73 74 72 69 6e 67 0a 20 20 63 6f 6d 70 61  l string.  compa
134f0 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 65 69  risons.  ^If nei
13500 74 68 65 72 20 61 72 67 75 6d 65 6e 74 20 74 6f  ther argument to
13510 20 6e 75 6c 6c 69 66 28 29 20 64 65 66 69 6e 65   nullif() define
13520 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  s a collating fu
13530 6e 63 74 69 6f 6e 0a 20 20 74 68 65 6e 20 74 68  nction.  then th
13540 65 20 42 49 4e 41 52 59 20 69 73 20 75 73 65 64  e BINARY is used
13550 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 71 75  ..}..funcdef {qu
13560 6f 74 65 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  ote(X)} {} {.  ^
13570 54 68 65 20 71 75 6f 74 65 28 58 29 20 66 75 6e  The quote(X) fun
13580 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
13590 73 74 72 69 6e 67 20 77 68 69 63 68 20 69 73 20  string which is 
135a0 74 68 65 20 76 61 6c 75 65 20 6f 66 0a 20 20 69  the value of.  i
135b0 74 73 20 61 72 67 75 6d 65 6e 74 20 73 75 69 74  ts argument suit
135c0 61 62 6c 65 20 66 6f 72 20 69 6e 63 6c 75 73 69  able for inclusi
135d0 6f 6e 20 69 6e 74 6f 20 61 6e 6f 74 68 65 72 20  on into another 
135e0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20  SQL statement.. 
135f0 20 5e 53 74 72 69 6e 67 73 20 61 72 65 20 73 75   ^Strings are su
13600 72 72 6f 75 6e 64 65 64 20 62 79 20 73 69 6e 67  rrounded by sing
13610 6c 65 2d 71 75 6f 74 65 73 20 77 69 74 68 20 65  le-quotes with e
13620 73 63 61 70 65 73 20 6f 6e 20 69 6e 74 65 72 69  scapes on interi
13630 6f 72 20 71 75 6f 74 65 73 0a 20 20 61 73 20 6e  or quotes.  as n
13640 65 65 64 65 64 2e 20 20 5e 42 4c 4f 42 73 20 61  eeded.  ^BLOBs a
13650 72 65 20 65 6e 63 6f 64 65 64 20 61 73 20 68 65  re encoded as he
13660 78 61 64 65 63 69 6d 61 6c 20 6c 69 74 65 72 61  xadecimal litera
13670 6c 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ls..}..funcdef {
13680 72 61 6e 64 6f 6d 28 29 7d 20 7b 7d 20 7b 0a 20  random()} {} {. 
13690 20 5e 54 68 65 20 72 61 6e 64 6f 6d 28 29 20 66   ^The random() f
136a0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
136b0 61 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 20  a pseudo-random 
136c0 69 6e 74 65 67 65 72 0a 20 20 62 65 74 77 65 65  integer.  betwee
136d0 6e 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34  n -9223372036854
136e0 37 37 35 38 30 38 20 61 6e 64 20 2b 39 32 32 33  775808 and +9223
136f0 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37 2e  372036854775807.
13700 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e  .}..funcdef {ran
13710 64 6f 6d 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b  domblob(N)} {} {
13720 0a 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d 62 6c  .  ^The randombl
13730 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72  ob(N) function r
13740 65 74 75 72 6e 20 61 6e 20 4e 2d 62 79 74 65 20  eturn an N-byte 
13750 62 6c 6f 62 20 63 6f 6e 74 61 69 6e 69 6e 67 20  blob containing 
13760 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 0a 20 20  pseudo-random.  
13770 62 79 74 65 73 2e 20 5e 49 66 20 4e 20 69 73 20  bytes. ^If N is 
13780 6c 65 73 73 20 74 68 61 6e 20 31 20 74 68 65 6e  less than 1 then
13790 20 61 20 31 2d 62 79 74 65 20 72 61 6e 64 6f 6d   a 1-byte random
137a0 20 62 6c 6f 62 20 69 73 20 72 65 74 75 72 6e 65   blob is returne
137b0 64 2e 0a 0a 20 20 3c 70 3e 48 69 6e 74 3a 20 20  d...  <p>Hint:  
137c0 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 63 61 6e  applications can
137d0 20 67 65 6e 65 72 61 74 65 20 67 6c 6f 62 61 6c   generate global
137e0 6c 79 20 75 6e 69 71 75 65 20 69 64 65 6e 74 69  ly unique identi
137f0 66 69 65 72 73 0a 20 20 75 73 69 6e 67 20 74 68  fiers.  using th
13800 69 73 20 66 75 6e 63 74 69 6f 6e 20 74 6f 67 65  is function toge
13810 74 68 65 72 20 77 69 74 68 20 5b 68 65 78 28 29  ther with [hex()
13820 5d 20 61 6e 64 2f 6f 72 0a 20 20 5b 6c 6f 77 65  ] and/or.  [lowe
13830 72 28 29 5d 20 6c 69 6b 65 20 74 68 69 73 3a 3c  r()] like this:<
13840 2f 70 3e 0a 0a 20 20 3c 62 6c 6f 63 6b 71 75 6f  /p>..  <blockquo
13850 74 65 3e 0a 20 20 68 65 78 28 72 61 6e 64 6f 6d  te>.  hex(random
13860 62 6c 6f 62 28 31 36 29 29 3c 62 72 3e 3c 2f 62  blob(16))<br></b
13870 72 3e 0a 20 20 6c 6f 77 65 72 28 68 65 78 28 72  r>.  lower(hex(r
13880 61 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29 29 0a  andomblob(16))).
13890 20 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a    </blockquote>.
138a0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 65 70 6c  }..funcdef {repl
138b0 61 63 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b  ace(X,Y,Z)} {} {
138c0 0a 20 20 5e 54 68 65 20 72 65 70 6c 61 63 65 28  .  ^The replace(
138d0 58 2c 59 2c 5a 29 20 66 75 6e 63 74 69 6f 6e 20  X,Y,Z) function 
138e0 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67  returns a string
138f0 20 66 6f 72 6d 65 64 20 62 79 20 73 75 62 73 74   formed by subst
13900 69 74 75 74 69 6e 67 0a 20 20 73 74 72 69 6e 67  ituting.  string
13910 20 5a 20 66 6f 72 20 65 76 65 72 79 20 6f 63 63   Z for every occ
13920 75 72 72 65 6e 63 65 20 6f 66 20 73 74 72 69 6e  urrence of strin
13930 67 20 59 20 69 6e 20 73 74 72 69 6e 67 20 58 2e  g Y in string X.
13940 20 20 5e 54 68 65 20 5b 42 49 4e 41 52 59 5d 0a    ^The [BINARY].
13950 20 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75    collating sequ
13960 65 6e 63 65 20 69 73 20 75 73 65 64 20 66 6f 72  ence is used for
13970 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e   comparisons.  ^
13980 49 66 20 59 20 69 73 20 61 6e 20 65 6d 70 74 79  If Y is an empty
13990 0a 20 20 73 74 72 69 6e 67 20 74 68 65 6e 20 72  .  string then r
139a0 65 74 75 72 6e 20 58 20 75 6e 63 68 61 6e 67 65  eturn X unchange
139b0 64 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 6f 74  d.  ^If Z is not
139c0 20 69 6e 69 74 69 61 6c 6c 79 0a 20 20 61 20 73   initially.  a s
139d0 74 72 69 6e 67 2c 20 69 74 20 69 73 20 63 61 73  tring, it is cas
139e0 74 20 74 6f 20 61 20 55 54 46 2d 38 20 73 74 72  t to a UTF-8 str
139f0 69 6e 67 20 70 72 69 6f 72 20 74 6f 20 70 72 6f  ing prior to pro
13a00 63 65 73 73 69 6e 67 2e 0a 7d 0a 0a 66 75 6e 63  cessing..}..func
13a10 64 65 66 20 7b 72 6f 75 6e 64 28 58 29 20 72 6f  def {round(X) ro
13a20 75 6e 64 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  und(X,Y)} {} {. 
13a30 20 5e 54 68 65 20 72 6f 75 6e 64 28 58 2c 59 29   ^The round(X,Y)
13a40 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
13a50 73 20 61 20 73 74 72 69 6e 67 20 72 65 70 72 65  s a string repre
13a60 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
13a70 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a   floating-point.
13a80 20 20 76 61 6c 75 65 20 58 20 72 6f 75 6e 64 65    value X rounde
13a90 64 20 74 6f 20 59 20 64 69 67 69 74 73 20 74 6f  d to Y digits to
13aa0 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 74 68   the right of th
13ab0 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 2e  e decimal point.
13ac0 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67  .  ^If the Y arg
13ad0 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64  ument is omitted
13ae0 2c 20 74 68 65 20 58 20 76 61 6c 75 65 20 69 73  , the X value is
13af0 20 74 72 75 6e 63 61 74 65 64 20 74 6f 20 61 6e   truncated to an
13b00 20 69 6e 74 65 67 65 72 2e 0a 7d 0a 0a 66 75 6e   integer..}..fun
13b10 63 64 65 66 20 7b 72 74 72 69 6d 28 58 29 20 72  cdef {rtrim(X) r
13b20 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  trim(X,Y)} {} {.
13b30 20 20 5e 54 68 65 20 72 74 72 69 6d 28 58 2c 59    ^The rtrim(X,Y
13b40 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
13b50 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d  ns a string form
13b60 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61  ed by removing a
13b70 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61  ny and all.  cha
13b80 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70 70  racters that app
13b90 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74 68  ear in Y from th
13ba0 65 20 72 69 67 68 74 20 73 69 64 65 20 6f 66 20  e right side of 
13bb0 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61  X..  ^If the Y a
13bc0 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74  rgument is omitt
13bd0 65 64 2c 20 72 74 72 69 6d 28 58 29 20 72 65 6d  ed, rtrim(X) rem
13be0 6f 76 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d  oves spaces from
13bf0 20 74 68 65 20 72 69 67 68 74 0a 20 20 73 69 64   the right.  sid
13c00 65 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64  e of X..}..funcd
13c10 65 66 20 7b 73 6f 75 6e 64 65 78 28 58 29 7d 20  ef {soundex(X)} 
13c20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 6f 75 6e  {} {.  ^The soun
13c30 64 65 78 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  dex(X) function 
13c40 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67  returns a string
13c50 20 74 68 61 74 20 69 73 20 74 68 65 20 73 6f 75   that is the sou
13c60 6e 64 65 78 20 65 6e 63 6f 64 69 6e 67 20 0a 20  ndex encoding . 
13c70 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 58   of the string X
13c80 2e 0a 20 20 5e 54 68 65 20 73 74 72 69 6e 67 20  ..  ^The string 
13c90 22 3f 30 30 30 22 20 69 73 20 72 65 74 75 72 6e  "?000" is return
13ca0 65 64 20 69 66 20 74 68 65 20 61 72 67 75 6d 65  ed if the argume
13cb0 6e 74 20 69 73 20 4e 55 4c 4c 20 6f 72 20 63 6f  nt is NULL or co
13cc0 6e 74 61 69 6e 73 0a 20 20 6e 6f 20 41 53 43 49  ntains.  no ASCI
13cd0 49 20 61 6c 70 68 61 62 65 74 69 63 20 63 68 61  I alphabetic cha
13ce0 72 61 63 74 65 72 73 2e 0a 20 20 5e 28 54 68 69  racters..  ^(Thi
13cf0 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6d  s function is om
13d00 69 74 74 65 64 20 66 72 6f 6d 20 53 51 4c 69 74  itted from SQLit
13d10 65 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 20 20  e by default..  
13d20 49 74 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c  It is only avail
13d30 61 62 6c 65 20 69 66 20 74 68 65 20 5b 53 51 4c  able if the [SQL
13d40 49 54 45 5f 53 4f 55 4e 44 45 58 5d 20 63 6f 6d  ITE_SOUNDEX] com
13d50 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
13d60 0a 20 20 69 73 20 75 73 65 64 20 77 68 65 6e 20  .  is used when 
13d70 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74 2e  SQLite is built.
13d80 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73  )^.}..funcdef {s
13d90 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74  qlite_compileopt
13da0 69 6f 6e 5f 67 65 74 28 4e 29 7d 20 7b 7d 20 7b  ion_get(N)} {} {
13db0 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 63  .  ^The sqlite_c
13dc0 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74  ompileoption_get
13dd0 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  () SQL function 
13de0 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72 6f  is a wrapper aro
13df0 75 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c 69 74  und the.  [sqlit
13e00 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e  e3_compileoption
13e10 5f 67 65 74 28 29 5d 20 43 2f 43 2b 2b 20 66 75  _get()] C/C++ fu
13e20 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54 68 69 73 20  nction..  ^This 
13e30 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20  routine returns 
13e40 74 68 65 20 4e 2d 74 68 20 63 6f 6d 70 69 6c 65  the N-th compile
13e50 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65  -time option use
13e60 64 20 74 6f 20 62 75 69 6c 64 20 53 51 4c 69 74  d to build SQLit
13e70 65 0a 20 20 6f 72 20 4e 55 4c 4c 20 69 66 20 4e  e.  or NULL if N
13e80 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65   is out of range
13e90 2e 20 20 53 65 65 20 61 6c 73 6f 20 74 68 65 20  .  See also the 
13ea0 5b 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73  [compile_options
13eb0 20 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 66 75 6e   pragma]..}..fun
13ec0 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 63 6f 6d  cdef {sqlite_com
13ed0 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28  pileoption_used(
13ee0 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  X)} {} {.  ^The 
13ef0 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70  sqlite_compileop
13f00 74 69 6f 6e 5f 75 73 65 64 28 29 20 53 51 4c 20  tion_used() SQL 
13f10 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72  function is a wr
13f20 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65  apper around the
13f30 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d 70  .  [sqlite3_comp
13f40 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 29  ileoption_used()
13f50 5d 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e  ] C/C++ function
13f60 2e 0a 20 20 5e 57 68 65 6e 20 74 68 65 20 61 72  ..  ^When the ar
13f70 67 75 6d 65 6e 74 20 58 20 74 6f 20 73 71 6c 69  gument X to sqli
13f80 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e  te_compileoption
13f90 5f 75 73 65 64 28 58 29 20 69 73 20 61 20 73 74  _used(X) is a st
13fa0 72 69 6e 67 20 77 68 69 63 68 0a 20 20 69 73 20  ring which.  is 
13fb0 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f  the name of a co
13fc0 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
13fd0 6e 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  n, this routine 
13fe0 72 65 74 75 72 6e 73 20 74 72 75 65 20 28 31 29  returns true (1)
13ff0 20 6f 72 0a 20 20 66 61 6c 73 65 20 28 30 29 20   or.  false (0) 
14000 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
14010 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74  ther or not that
14020 20 6f 70 74 69 6f 6e 20 77 61 73 20 75 73 65 64   option was used
14030 20 64 75 72 69 6e 67 20 74 68 65 0a 20 20 62 75   during the.  bu
14040 69 6c 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ild..}..funcdef 
14050 7b 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69  {sqlite_source_i
14060 64 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  d()} {} {.  ^The
14070 20 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69   sqlite_source_i
14080 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  d() function ret
14090 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 74 68  urns a string th
140a0 61 74 20 69 64 65 6e 74 69 66 69 65 73 20 74 68  at identifies th
140b0 65 0a 20 20 73 70 65 63 69 66 69 63 20 76 65 72  e.  specific ver
140c0 73 69 6f 6e 20 6f 66 20 74 68 65 20 73 6f 75 72  sion of the sour
140d0 63 65 20 63 6f 64 65 20 74 68 61 74 20 77 61 73  ce code that was
140e0 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20 74   used to build t
140f0 68 65 20 53 51 4c 69 74 65 0a 20 20 6c 69 62 72  he SQLite.  libr
14100 61 72 79 2e 20 20 5e 54 68 65 20 73 74 72 69 6e  ary.  ^The strin
14110 67 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  g returned by sq
14120 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 28 29  lite_source_id()
14130 20 62 65 67 69 6e 73 20 77 69 74 68 0a 20 20 74   begins with.  t
14140 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  he date and time
14150 20 74 68 61 74 20 74 68 65 20 73 6f 75 72 63 65   that the source
14160 20 63 6f 64 65 20 77 61 73 20 63 68 65 63 6b 65   code was checke
14170 64 20 69 6e 20 61 6e 64 20 69 73 20 66 6f 6c 6c  d in and is foll
14180 6f 77 73 20 62 79 0a 20 20 61 6e 20 53 48 41 31  ows by.  an SHA1
14190 20 68 61 73 68 20 74 68 61 74 20 75 6e 69 71 75   hash that uniqu
141a0 65 6c 79 20 69 64 65 6e 74 69 66 69 65 73 20 74  ely identifies t
141b0 68 65 20 73 6f 75 72 63 65 20 74 72 65 65 2e 20  he source tree. 
141c0 20 5e 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20   ^This function 
141d0 69 73 0a 20 20 61 6e 20 53 51 4c 20 77 72 61 70  is.  an SQL wrap
141e0 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b  per around the [
141f0 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69 64  sqlite3_sourceid
14200 28 29 5d 20 43 20 69 6e 74 65 72 66 61 63 65 2e  ()] C interface.
14210 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c  .}..funcdef {sql
14220 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 7d 20 7b  ite_version()} {
14230 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74  } {.  ^The sqlit
14240 65 5f 76 65 72 73 69 6f 6e 28 29 20 66 75 6e 63  e_version() func
14250 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
14260 20 76 65 72 73 69 6f 6e 20 73 74 72 69 6e 67 20   version string 
14270 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0a 20  for the SQLite. 
14280 20 6c 69 62 72 61 72 79 20 74 68 61 74 20 69 73   library that is
14290 20 72 75 6e 6e 69 6e 67 2e 20 20 5e 54 68 69 73   running.  ^This
142a0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 6e 20   function is an 
142b0 53 51 4c 0a 20 20 77 72 61 70 70 65 72 20 61 72  SQL.  wrapper ar
142c0 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65  ound the [sqlite
142d0 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 5d 20  3_libversion()] 
142e0 43 2d 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a  C-interface..}..
142f0 66 75 6e 63 64 65 66 20 7b 73 75 62 73 74 72 28  funcdef {substr(
14300 58 2c 59 2c 5a 29 20 73 75 62 73 74 72 28 58 2c  X,Y,Z) substr(X,
14310 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
14320 73 75 62 73 74 72 28 58 2c 59 2c 5a 29 20 66 75  substr(X,Y,Z) fu
14330 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
14340 20 73 75 62 73 74 72 69 6e 67 20 6f 66 20 69 6e   substring of in
14350 70 75 74 20 73 74 72 69 6e 67 20 58 20 74 68 61  put string X tha
14360 74 20 62 65 67 69 6e 73 0a 20 20 77 69 74 68 20  t begins.  with 
14370 74 68 65 20 59 2d 74 68 20 63 68 61 72 61 63 74  the Y-th charact
14380 65 72 20 61 6e 64 20 77 68 69 63 68 20 69 73 20  er and which is 
14390 5a 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  Z characters lon
143a0 67 2e 0a 20 20 5e 49 66 20 5a 20 69 73 20 6f 6d  g..  ^If Z is om
143b0 69 74 74 65 64 20 74 68 65 6e 20 73 75 62 73 74  itted then subst
143c0 72 28 58 2c 59 29 20 72 65 74 75 72 6e 73 20 61  r(X,Y) returns a
143d0 6c 6c 20 63 68 61 72 61 63 74 65 72 73 20 74 68  ll characters th
143e0 72 6f 75 67 68 20 74 68 65 20 65 6e 64 0a 20 20  rough the end.  
143f0 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 58 20  of the string X 
14400 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 74  beginning with t
14410 68 65 20 59 2d 74 68 2e 0a 20 20 5e 54 68 65 20  he Y-th..  ^The 
14420 6c 65 66 74 2d 6d 6f 73 74 20 63 68 61 72 61 63  left-most charac
14430 74 65 72 20 6f 66 20 58 20 69 73 20 6e 75 6d 62  ter of X is numb
14440 65 72 20 31 2e 20 20 5e 49 66 20 59 20 69 73 20  er 1.  ^If Y is 
14450 6e 65 67 61 74 69 76 65 0a 20 20 74 68 65 6e 20  negative.  then 
14460 74 68 65 20 66 69 72 73 74 20 63 68 61 72 61 63  the first charac
14470 74 65 72 20 6f 66 20 74 68 65 20 73 75 62 73 74  ter of the subst
14480 72 69 6e 67 20 69 73 20 66 6f 75 6e 64 20 62 79  ring is found by
14490 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f 6d 20 74   counting from t
144a0 68 65 0a 20 20 72 69 67 68 74 20 72 61 74 68 65  he.  right rathe
144b0 72 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74 2e  r than the left.
144c0 20 20 5e 49 66 20 5a 20 69 73 20 6e 65 67 61 74    ^If Z is negat
144d0 69 76 65 20 74 68 65 6e 0a 20 20 74 68 65 20 61  ive then.  the a
144e0 62 73 28 5a 29 20 63 68 61 72 61 63 74 65 72 73  bs(Z) characters
144f0 20 70 72 65 63 65 64 69 6e 67 20 74 68 65 20 59   preceding the Y
14500 2d 74 68 20 63 68 61 72 61 63 74 65 72 20 61 72  -th character ar
14510 65 20 72 65 74 75 72 6e 65 64 2e 0a 20 20 5e 49  e returned..  ^I
14520 66 20 58 20 69 73 20 61 20 73 74 72 69 6e 67 20  f X is a string 
14530 74 68 65 6e 20 63 68 61 72 61 63 74 65 72 73 20  then characters 
14540 69 6e 64 69 63 65 73 20 72 65 66 65 72 20 74 6f  indices refer to
14550 20 61 63 74 75 61 6c 20 55 54 46 2d 38 20 0a 20   actual UTF-8 . 
14560 20 63 68 61 72 61 63 74 65 72 73 2e 20 20 5e 49   characters.  ^I
14570 66 20 58 20 69 73 20 61 20 42 4c 4f 42 20 74 68  f X is a BLOB th
14580 65 6e 20 74 68 65 20 69 6e 64 69 63 65 73 20 72  en the indices r
14590 65 66 65 72 20 74 6f 20 62 79 74 65 73 2e 0a 7d  efer to bytes..}
145a0 0a 0a 66 75 6e 63 64 65 66 20 7b 74 6f 74 61 6c  ..funcdef {total
145b0 5f 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20 7b  _changes()} {} {
145c0 0a 20 20 5e 54 68 65 20 74 6f 74 61 6c 5f 63 68  .  ^The total_ch
145d0 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f 6e  anges() function
145e0 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   returns the num
145f0 62 65 72 20 6f 66 20 72 6f 77 20 63 68 61 6e 67  ber of row chang
14600 65 73 0a 20 20 63 61 75 73 65 64 20 62 79 20 49  es.  caused by I
14610 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72  NSERT, UPDATE or
14620 20 44 45 4c 45 54 45 0a 20 20 73 74 61 74 65 6d   DELETE.  statem
14630 65 6e 74 73 20 73 69 6e 63 65 20 74 68 65 20 63  ents since the c
14640 75 72 72 65 6e 74 20 64 61 74 61 62 61 73 65 20  urrent database 
14650 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 6f  connection was o
14660 70 65 6e 65 64 2e 0a 20 20 5e 54 68 69 73 20 66  pened..  ^This f
14670 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61  unction is a wra
14680 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20  pper around the 
14690 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63  [sqlite3_total_c
146a0 68 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43 2b  hanges()].  C/C+
146b0 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a  + interface..}..
146c0 66 75 6e 63 64 65 66 20 7b 74 72 69 6d 28 58 29  funcdef {trim(X)
146d0 20 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b   trim(X,Y)} {} {
146e0 0a 20 20 5e 54 68 65 20 74 72 69 6d 28 58 2c 59  .  ^The trim(X,Y
146f0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
14700 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d  ns a string form
14710 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61  ed by removing a
14720 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61  ny and all.  cha
14730 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70 70  racters that app
14740 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 62 6f  ear in Y from bo
14750 74 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 20 20  th ends of X..  
14760 5e 49 66 20 74 68 65 20 59 20 61 72 67 75 6d 65  ^If the Y argume
14770 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 74  nt is omitted, t
14780 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20 73  rim(X) removes s
14790 70 61 63 65 73 20 66 72 6f 6d 20 62 6f 74 68 20  paces from both 
147a0 65 6e 64 73 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75  ends of X..}..fu
147b0 6e 63 64 65 66 20 7b 74 79 70 65 6f 66 28 58 29  ncdef {typeof(X)
147c0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74 79  } {} {.  ^The ty
147d0 70 65 6f 66 28 58 29 20 66 75 6e 63 74 69 6f 6e  peof(X) function
147e0 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
147f0 67 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73  g that indicates
14800 20 74 68 65 20 5b 64 61 74 61 74 79 70 65 5d 20   the [datatype] 
14810 6f 66 0a 20 20 74 68 65 20 65 78 70 72 65 73 73  of.  the express
14820 69 6f 6e 20 58 3a 20 22 6e 75 6c 6c 22 2c 20 22  ion X: "null", "
14830 69 6e 74 65 67 65 72 22 2c 20 22 72 65 61 6c 22  integer", "real"
14840 2c 20 22 74 65 78 74 22 2c 20 6f 72 20 22 62 6c  , "text", or "bl
14850 6f 62 22 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ob"..}..funcdef 
14860 7b 75 70 70 65 72 28 58 29 7d 20 7b 7d 20 7b 0a  {upper(X)} {} {.
14870 20 20 5e 54 68 65 20 75 70 70 65 72 28 58 29 20    ^The upper(X) 
14880 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
14890 20 61 20 63 6f 70 79 20 6f 66 20 69 6e 70 75 74   a copy of input
148a0 20 73 74 72 69 6e 67 20 58 20 69 6e 20 77 68 69   string X in whi
148b0 63 68 20 61 6c 6c 20 0a 20 20 6c 6f 77 65 72 2d  ch all .  lower-
148c0 63 61 73 65 20 41 53 43 49 49 20 63 68 61 72 61  case ASCII chara
148d0 63 74 65 72 73 20 61 72 65 20 63 6f 6e 76 65 72  cters are conver
148e0 74 65 64 20 74 6f 20 74 68 65 69 72 20 75 70 70  ted to their upp
148f0 65 72 2d 63 61 73 65 20 65 71 75 69 76 61 6c 65  er-case equivale
14900 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  nt..}..funcdef {
14910 7a 65 72 6f 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20  zeroblob(N)} {} 
14920 7b 0a 20 20 5e 54 68 65 20 7a 65 72 6f 62 6c 6f  {.  ^The zeroblo
14930 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  b(N) function re
14940 74 75 72 6e 73 20 61 20 42 4c 4f 42 20 63 6f 6e  turns a BLOB con
14950 73 69 73 74 69 6e 67 20 6f 66 20 4e 20 62 79 74  sisting of N byt
14960 65 73 20 6f 66 20 30 78 30 30 2e 0a 20 20 53 51  es of 0x00..  SQ
14970 4c 69 74 65 20 6d 61 6e 61 67 65 73 20 74 68 65  Lite manages the
14980 73 65 20 7a 65 72 6f 62 6c 6f 62 73 20 76 65 72  se zeroblobs ver
14990 79 20 65 66 66 69 63 69 65 6e 74 6c 79 2e 20 20  y efficiently.  
149a0 5a 65 72 6f 62 6c 6f 62 73 20 63 61 6e 20 62 65  Zeroblobs can be
149b0 20 75 73 65 64 20 74 6f 0a 20 20 72 65 73 65 72   used to.  reser
149c0 76 65 20 73 70 61 63 65 20 66 6f 72 20 61 20 42  ve space for a B
149d0 4c 4f 42 20 74 68 61 74 20 69 73 20 6c 61 74 65  LOB that is late
149e0 72 20 77 72 69 74 74 65 6e 20 75 73 69 6e 67 20  r written using 
149f0 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62  .  [sqlite3_blob
14a00 5f 6f 70 65 6e 28 29 20 7c 20 69 6e 63 72 65 6d  _open() | increm
14a10 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 5d 2e  ental BLOB I/O].
14a20 0a 20 20 5e 54 68 69 73 20 53 51 4c 20 66 75 6e  .  ^This SQL fun
14a30 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65 6d 65  ction is impleme
14a40 6e 74 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b  nted using the [
14a50 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 7a  sqlite3_result_z
14a60 65 72 6f 62 6c 6f 62 28 29 5d 0a 20 20 72 6f 75  eroblob()].  rou
14a70 74 69 6e 65 20 66 72 6f 6d 20 74 68 65 20 43 2f  tine from the C/
14a80 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d  C++ interface..}
14a90 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c 65 3e  .</tcl>.</table>
14aa0 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
14ab0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14ac0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14ad0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14ae0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14af0 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
14b00 44 61 74 65 20 41 6e 64 20 54 69 6d 65 20 46 75  Date And Time Fu
14b10 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e  nctions} datefun
14b20 63 20 7b 2a 64 61 74 65 66 75 6e 63 7d 0a 68 64  c {*datefunc}.hd
14b30 5f 6b 65 79 77 6f 72 64 73 20 7b 64 61 74 65 28  _keywords {date(
14b40 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20  ) SQL function} 
14b50 7b 74 69 6d 65 28 29 20 53 51 4c 20 66 75 6e 63  {time() SQL func
14b60 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64  tion}.hd_keyword
14b70 73 20 7b 64 61 74 65 74 69 6d 65 28 29 20 53 51  s {datetime() SQ
14b80 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b 6a 75 6c  L function} {jul
14b90 69 61 6e 64 61 79 28 29 20 53 51 4c 20 66 75 6e  ianday() SQL fun
14ba0 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72  ction}.hd_keywor
14bb0 64 73 20 7b 73 74 72 66 74 69 6d 65 28 29 20 53  ds {strftime() S
14bc0 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 3c 2f 74  QL function}.</t
14bd0 63 6c 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20  cl>..<p>.SQLite 
14be0 73 75 70 70 6f 72 74 73 20 66 69 76 65 20 64 61  supports five da
14bf0 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63  te and time func
14c00 74 69 6f 6e 73 20 61 73 20 66 6f 6c 6c 6f 77 73  tions as follows
14c10 3a 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 6f 6c 3e  :.</p>..<p>.<ol>
14c20 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65 28  .<li> ^(<b>date(
14c30 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e  </b><i>timestrin
14c40 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64  g, modifier, mod
14c50 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62  ifier, ...</i><b
14c60 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c  >)</b>)^ </li>.<
14c70 6c 69 3e 20 5e 28 3c 62 3e 74 69 6d 65 28 3c 2f  li> ^(<b>time(</
14c80 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c  b><i>timestring,
14c90 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66   modifier, modif
14ca0 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29  ier, ...</i><b>)
14cb0 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69  </b>)^ </li>.<li
14cc0 3e 20 5e 28 3c 62 3e 64 61 74 65 74 69 6d 65 28  > ^(<b>datetime(
14cd0 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e  </b><i>timestrin
14ce0 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64  g, modifier, mod
14cf0 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62  ifier, ...</i><b
14d00 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c  >)</b>)^ </li>.<
14d10 6c 69 3e 20 5e 28 3c 62 3e 6a 75 6c 69 61 6e 64  li> ^(<b>juliand
14d20 61 79 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74  ay(</b><i>timest
14d30 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20  ring, modifier, 
14d40 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69  modifier, ...</i
14d50 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69  ><b>)</b>)^ </li
14d60 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 73 74 72 66  >.<li> ^(<b>strf
14d70 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 66 6f 72 6d  time(</b><i>form
14d80 61 74 2c 20 74 69 6d 65 73 74 72 69 6e 67 2c 20  at, timestring, 
14d90 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69  modifier, modifi
14da0 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c  er, ...</i><b>)<
14db0 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 2f 6f 6c  /b>)^ </li>.</ol
14dc0 3e 0a 0a 3c 70 3e 0a 5e 41 6c 6c 20 66 69 76 65  >..<p>.^All five
14dd0 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66   date and time f
14de0 75 6e 63 74 69 6f 6e 73 20 74 61 6b 65 20 61 20  unctions take a 
14df0 74 69 6d 65 20 73 74 72 69 6e 67 20 61 73 20 61  time string as a
14e00 6e 20 61 72 67 75 6d 65 6e 74 2e 20 0a 5e 54 68  n argument. .^Th
14e10 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20 69 73  e time string is
14e20 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72   followed by zer
14e30 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64 69 66 69  o or more modifi
14e40 65 72 73 2e 20 0a 5e 54 68 65 20 73 74 72 66 74  ers. .^The strft
14e50 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 61  ime() function a
14e60 6c 73 6f 20 74 61 6b 65 73 20 61 20 66 6f 72 6d  lso takes a form
14e70 61 74 20 73 74 72 69 6e 67 20 61 73 20 69 74 73  at string as its
14e80 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e   first argument.
14e90 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 64  .</p>..<p>.The d
14ea0 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e  ate and time fun
14eb0 63 74 69 6f 6e 73 20 75 73 65 20 61 20 73 75 62  ctions use a sub
14ec0 73 65 74 20 6f 66 0a 5b 68 74 74 70 3a 2f 2f 65  set of.[http://e
14ed0 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
14ee0 77 69 6b 69 2f 49 53 4f 5f 38 36 30 31 20 7c 20  wiki/ISO_8601 | 
14ef0 49 53 30 2d 38 36 30 31 5d 20 64 61 74 65 20 61  IS0-8601] date a
14f00 6e 64 20 74 69 6d 65 0a 66 6f 72 6d 61 74 73 2e  nd time.formats.
14f10 0a 5e 54 68 65 20 64 61 74 65 28 29 20 66 75 6e  .^The date() fun
14f20 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
14f30 65 20 64 61 74 65 20 69 6e 20 74 68 69 73 20 66  e date in this f
14f40 6f 72 6d 61 74 3a 20 59 59 59 59 2d 4d 4d 2d 44  ormat: YYYY-MM-D
14f50 44 2e 20 0a 5e 54 68 65 20 74 69 6d 65 28 29 20  D. .^The time() 
14f60 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
14f70 20 74 68 65 20 74 69 6d 65 20 61 73 20 48 48 3a   the time as HH:
14f80 4d 4d 3a 53 53 2e 20 0a 5e 54 68 65 20 64 61 74  MM:SS. .^The dat
14f90 65 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e  etime() function
14fa0 20 72 65 74 75 72 6e 73 20 22 59 59 59 59 2d 4d   returns "YYYY-M
14fb0 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 20  M-DD HH:MM:SS". 
14fc0 0a 5e 28 54 68 65 20 6a 75 6c 69 61 6e 64 61 79  .^(The julianday
14fd0 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
14fe0 72 6e 73 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f  rns the .[http:/
14ff0 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72  /en.wikipedia.or
15000 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61  g/wiki/Julian_da
15010 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61 79 5d 20  y | Julian day] 
15020 2d 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20  - the.number of 
15030 64 61 79 73 20 73 69 6e 63 65 20 6e 6f 6f 6e 20  days since noon 
15040 69 6e 20 47 72 65 65 6e 77 69 63 68 20 6f 6e 20  in Greenwich on 
15050 4e 6f 76 65 6d 62 65 72 20 32 34 2c 20 34 37 31  November 24, 471
15060 34 20 42 2e 43 2e 20 0a 28 5b 68 74 74 70 3a 2f  4 B.C. .([http:/
15070 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72  /en.wikipedia.or
15080 67 2f 77 69 6b 69 2f 50 72 6f 6c 65 70 74 69 63  g/wiki/Proleptic
15090 5f 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e  _Gregorian_calen
150a0 64 61 72 20 7c 20 50 72 6f 6c 65 70 74 69 63 20  dar | Proleptic 
150b0 47 72 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64  Gregorian calend
150c0 61 72 5d 29 2e 29 5e 0a 5e 54 68 65 20 73 74 72  ar]).)^.^The str
150d0 66 74 69 6d 65 28 29 20 72 6f 75 74 69 6e 65 20  ftime() routine 
150e0 72 65 74 75 72 6e 73 20 74 68 65 20 64 61 74 65  returns the date
150f0 20 66 6f 72 6d 61 74 74 65 64 20 61 63 63 6f 72   formatted accor
15100 64 69 6e 67 20 74 6f 20 0a 74 68 65 20 66 6f 72  ding to .the for
15110 6d 61 74 20 73 74 72 69 6e 67 20 73 70 65 63 69  mat string speci
15120 66 69 65 64 20 61 73 20 74 68 65 20 66 69 72 73  fied as the firs
15130 74 20 61 72 67 75 6d 65 6e 74 2e 0a 5e 54 68 65  t argument..^The
15140 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73   format string s
15150 75 70 70 6f 72 74 73 20 74 68 65 20 6d 6f 73 74  upports the most
15160 20 63 6f 6d 6d 6f 6e 20 73 75 62 73 74 69 74 75   common substitu
15170 74 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20 74  tions found in t
15180 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 6f 70 65 6e  he .[http://open
15190 67 72 6f 75 70 2e 6f 72 67 2f 6f 6e 6c 69 6e 65  group.org/online
151a0 70 75 62 73 2f 30 30 37 39 30 38 37 39 39 2f 78  pubs/007908799/x
151b0 73 68 2f 73 74 72 66 74 69 6d 65 2e 68 74 6d 6c  sh/strftime.html
151c0 20 7c 20 73 74 72 66 74 69 6d 65 28 29 20 66 75   | strftime() fu
151d0 6e 63 74 69 6f 6e 5d 0a 66 72 6f 6d 20 74 68 65  nction].from the
151e0 20 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72   standard C libr
151f0 61 72 79 20 70 6c 75 73 20 74 77 6f 20 6e 65 77  ary plus two new
15200 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73 2c 20   substitutions, 
15210 25 66 20 61 6e 64 20 25 4a 2e 0a 5e 28 54 68 65  %f and %J..^(The
15220 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 61 20   following is a 
15230 63 6f 6d 70 6c 65 74 65 20 6c 69 73 74 20 6f 66  complete list of
15240 20 76 61 6c 69 64 20 73 74 72 66 74 69 6d 65 28   valid strftime(
15250 29 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73 3a  ) substitutions:
15260 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
15270 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  te>.<table borde
15280 72 3d 22 30 22 20 63 65 6c 6c 70 61 64 64 69 6e  r="0" cellpaddin
15290 67 3d 22 30 22 20 63 65 6c 6c 73 70 61 63 69 6e  g="0" cellspacin
152a0 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c  g="0">.<tr><td><
152b0 74 64 20 77 69 64 74 68 3d 22 31 30 22 3e 3c 74  td width="10"><t
152c0 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 3c 74 64  d></tr>..<tr><td
152d0 3e 20 25 64 20 3c 74 64 3e 3c 74 64 3e 20 64 61  > %d <td><td> da
152e0 79 20 6f 66 20 6d 6f 6e 74 68 3a 20 30 30 0a 3c  y of month: 00.<
152f0 74 72 3e 3c 74 64 3e 20 25 66 20 3c 74 64 3e 3c  tr><td> %f <td><
15300 74 64 3e 20 66 72 61 63 74 69 6f 6e 61 6c 20 73  td> fractional s
15310 65 63 6f 6e 64 73 3a 20 53 53 2e 53 53 53 0a 3c  econds: SS.SSS.<
15320 74 72 3e 3c 74 64 3e 20 25 48 20 3c 74 64 3e 3c  tr><td> %H <td><
15330 74 64 3e 20 68 6f 75 72 3a 20 30 30 2d 32 34 20  td> hour: 00-24 
15340 0a 3c 74 72 3e 3c 74 64 3e 20 25 6a 20 3c 74 64  .<tr><td> %j <td
15350 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 79 65 61  ><td> day of yea
15360 72 3a 20 30 30 31 2d 33 36 36 0a 3c 74 72 3e 3c  r: 001-366.<tr><
15370 74 64 3e 20 25 4a 20 3c 74 64 3e 3c 74 64 3e 20  td> %J <td><td> 
15380 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65  Julian day numbe
15390 72 0a 3c 74 72 3e 3c 74 64 3e 20 25 6d 20 3c 74  r.<tr><td> %m <t
153a0 64 3e 3c 74 64 3e 20 6d 6f 6e 74 68 3a 20 30 31  d><td> month: 01
153b0 2d 31 32 0a 3c 74 72 3e 3c 74 64 3e 20 25 4d 20  -12.<tr><td> %M 
153c0 3c 74 64 3e 3c 74 64 3e 20 6d 69 6e 75 74 65 3a  <td><td> minute:
153d0 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20   00-59.<tr><td> 
153e0 25 73 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f  %s <td><td> seco
153f0 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30 2d 30  nds since 1970-0
15400 31 2d 30 31 0a 3c 74 72 3e 3c 74 64 3e 20 25 53  1-01.<tr><td> %S
15410 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64   <td><td> second
15420 73 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64  s: 00-59.<tr><td
15430 3e 20 25 77 20 3c 74 64 3e 3c 74 64 3e 20 64 61  > %w <td><td> da
15440 79 20 6f 66 20 77 65 65 6b 20 30 2d 36 20 77 69  y of week 0-6 wi
15450 74 68 20 53 75 6e 64 61 79 3d 3d 30 0a 3c 74 72  th Sunday==0.<tr
15460 3e 3c 74 64 3e 20 25 57 20 3c 74 64 3e 3c 74 64  ><td> %W <td><td
15470 3e 20 77 65 65 6b 20 6f 66 20 79 65 61 72 3a 20  > week of year: 
15480 30 30 2d 35 33 0a 3c 74 72 3e 3c 74 64 3e 20 25  00-53.<tr><td> %
15490 59 20 3c 74 64 3e 3c 74 64 3e 20 79 65 61 72 3a  Y <td><td> year:
154a0 20 30 30 30 30 2d 39 39 39 39 0a 3c 74 72 3e 3c   0000-9999.<tr><
154b0 74 64 3e 20 25 25 20 3c 74 64 3e 3c 74 64 3e 20  td> %% <td><td> 
154c0 25 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f  %.</table>.</blo
154d0 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a  ckquote>)^..<p>.
154e0 5e 28 4e 6f 74 69 63 65 20 74 68 61 74 20 61 6c  ^(Notice that al
154f0 6c 20 6f 74 68 65 72 20 64 61 74 65 20 61 6e 64  l other date and
15500 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20   time functions 
15510 63 61 6e 20 62 65 20 65 78 70 72 65 73 73 65 64  can be expressed
15520 0a 69 6e 20 74 65 72 6d 73 20 6f 66 20 73 74 72  .in terms of str
15530 66 74 69 6d 65 28 29 3a 0a 3c 2f 70 3e 0a 0a 3c  ftime():.</p>..<
15540 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62  blockquote>.<tab
15550 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20 63 65  le border="0" ce
15560 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22 20 63 65  llpadding="0" ce
15570 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c  llspacing="0">.<
15580 74 72 3e 3c 74 64 3e 3c 62 3e 46 75 6e 63 74 69  tr><td><b>Functi
15590 6f 6e 3c 2f 62 3e 3c 74 64 20 77 69 64 74 68 3d  on</b><td width=
155a0 22 33 30 22 3e 3c 74 64 3e 3c 62 3e 45 71 75 69  "30"><td><b>Equi
155b0 76 61 6c 65 6e 74 20 73 74 72 66 74 69 6d 65 28  valent strftime(
155c0 29 3c 2f 62 3e 0a 3c 74 72 3e 3c 74 64 3e 20 20  )</b>.<tr><td>  
155d0 20 64 61 74 65 28 2e 2e 2e 29 20 20 20 20 20 20   date(...)      
155e0 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69  <td><td>  strfti
155f0 6d 65 28 27 25 59 2d 25 6d 2d 25 64 27 2c 20 2e  me('%Y-%m-%d', .
15600 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 74  ..).<tr><td>   t
15610 69 6d 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74  ime(...)      <t
15620 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65  d><td>  strftime
15630 28 27 25 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e  ('%H:%M:%S', ...
15640 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61 74  ).<tr><td>   dat
15650 65 74 69 6d 65 28 2e 2e 2e 29 20 20 3c 74 64 3e  etime(...)  <td>
15660 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27  <td>  strftime('
15670 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25  %Y-%m-%d %H:%M:%
15680 53 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64  S', ...).<tr><td
15690 3e 20 20 20 6a 75 6c 69 61 6e 64 61 79 28 2e 2e  >   julianday(..
156a0 2e 29 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72  .) <td><td>  str
156b0 66 74 69 6d 65 28 27 25 4a 27 2c 20 2e 2e 2e 29  ftime('%J', ...)
156c0 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63  .</table>.</bloc
156d0 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 54  kquote>)^..<p>.T
156e0 68 65 20 6f 6e 6c 79 20 72 65 61 73 6f 6e 73 20  he only reasons 
156f0 66 6f 72 20 70 72 6f 76 69 64 69 6e 67 20 66 75  for providing fu
15700 6e 63 74 69 6f 6e 73 20 6f 74 68 65 72 20 74 68  nctions other th
15710 61 6e 20 73 74 72 66 74 69 6d 65 28 29 20 69 73  an strftime() is
15720 0a 66 6f 72 20 63 6f 6e 76 65 6e 69 65 6e 63 65  .for convenience
15730 20 61 6e 64 20 66 6f 72 20 65 66 66 69 63 69 65   and for efficie
15740 6e 63 79 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 54  ncy..</p>..<h3>T
15750 69 6d 65 20 53 74 72 69 6e 67 73 3c 2f 68 33 3e  ime Strings</h3>
15760 0a 0a 3c 70 3e 5e 28 41 20 74 69 6d 65 20 73 74  ..<p>^(A time st
15770 72 69 6e 67 20 63 61 6e 20 62 65 20 69 6e 20 61  ring can be in a
15780 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ny of the follow
15790 69 6e 67 20 66 6f 72 6d 61 74 73 3a 3c 2f 70 3e  ing formats:</p>
157a0 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c 69 3e 59  ..<ol>.<li> <i>Y
157b0 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 0a 3c 6c  YYY-MM-DD</i>.<l
157c0 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44  i> <i>YYYY-MM-DD
157d0 20 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20   HH:MM</i>.<li> 
157e0 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48  <i>YYYY-MM-DD HH
157f0 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  :MM:SS</i>.<li> 
15800 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48  <i>YYYY-MM-DD HH
15810 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c  :MM:SS.SSS</i>.<
15820 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44  li> <i>YYYY-MM-D
15830 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e  D</i><b>T</b><i>
15840 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  HH:MM</i>.<li> <
15850 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e  i>YYYY-MM-DD</i>
15860 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d  <b>T</b><i>HH:MM
15870 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  :SS</i>.<li> <i>
15880 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62  YYYY-MM-DD</i><b
15890 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53  >T</b><i>HH:MM:S
158a0 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  S.SSS</i>.<li> <
158b0 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e  i>HH:MM</i>.<li>
158c0 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e   <i>HH:MM:SS</i>
158d0 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53  .<li> <i>HH:MM:S
158e0 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  S.SSS</i>.<li> <
158f0 62 3e 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69 3e 20 3c  b>now</b>.<li> <
15900 69 3e 44 44 44 44 44 44 44 44 44 44 3c 2f 69 3e  i>DDDDDDDDDD</i>
15910 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 49  .</ol>)^..<p>.^I
15920 6e 20 66 6f 72 6d 61 74 73 20 35 20 74 68 72 6f  n formats 5 thro
15930 75 67 68 20 37 2c 20 74 68 65 20 22 54 22 20 69  ugh 7, the "T" i
15940 73 20 61 20 6c 69 74 65 72 61 6c 20 63 68 61 72  s a literal char
15950 61 63 74 65 72 20 73 65 70 61 72 61 74 69 6e 67  acter separating
15960 20 0a 74 68 65 20 64 61 74 65 20 61 6e 64 20 74   .the date and t
15970 68 65 20 74 69 6d 65 2c 20 61 73 20 72 65 71 75  he time, as requ
15980 69 72 65 64 20 62 79 20 0a 5b 68 74 74 70 3a 2f  ired by .[http:/
15990 2f 77 77 77 2e 77 33 63 2e 6f 72 67 2f 54 52 2f  /www.w3c.org/TR/
159a0 4e 4f 54 45 2d 64 61 74 65 74 69 6d 65 20 7c 20  NOTE-datetime | 
159b0 49 53 4f 2d 38 36 30 31 5d 2e 20 0a 5e 46 6f 72  ISO-8601]. .^For
159c0 6d 61 74 73 20 38 20 74 68 72 6f 75 67 68 20 31  mats 8 through 1
159d0 30 20 74 68 61 74 20 73 70 65 63 69 66 79 20 6f  0 that specify o
159e0 6e 6c 79 20 61 20 74 69 6d 65 20 61 73 73 75 6d  nly a time assum
159f0 65 20 61 20 64 61 74 65 20 6f 66 20 0a 32 30 30  e a date of .200
15a00 30 2d 30 31 2d 30 31 2e 20 46 6f 72 6d 61 74 20  0-01-01. Format 
15a10 31 31 2c 20 74 68 65 20 73 74 72 69 6e 67 20 27  11, the string '
15a20 6e 6f 77 27 2c 20 69 73 20 63 6f 6e 76 65 72 74  now', is convert
15a30 65 64 20 69 6e 74 6f 20 74 68 65 20 0a 63 75 72  ed into the .cur
15a40 72 65 6e 74 20 64 61 74 65 20 61 6e 64 20 74 69  rent date and ti
15a50 6d 65 20 61 73 20 6f 62 74 61 69 6e 65 64 20 66  me as obtained f
15a60 72 6f 6d 20 74 68 65 20 78 43 75 72 72 65 6e 74  rom the xCurrent
15a70 54 69 6d 65 20 6d 65 74 68 6f 64 0a 6f 66 20 74  Time method.of t
15a80 68 65 20 5b 73 71 6c 69 74 65 33 5f 76 66 73 5d  he [sqlite3_vfs]
15a90 20 6f 62 6a 65 63 74 20 69 6e 20 75 73 65 2e 0a   object in use..
15aa0 5e 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69  ^[http://en.wiki
15ab0 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 43  pedia.org/wiki/C
15ac0 6f 6f 72 64 69 6e 61 74 65 64 5f 55 6e 69 76 65  oordinated_Unive
15ad0 72 73 61 6c 5f 54 69 6d 65 20 7c 20 55 6e 69 76  rsal_Time | Univ
15ae0 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65  ersal Coordinate
15af0 64 20 54 69 6d 65 20 28 55 54 43 29 5d 20 69 73  d Time (UTC)] is
15b00 20 75 73 65 64 2e 20 0a 5e 46 6f 72 6d 61 74 20   used. .^Format 
15b10 31 32 20 69 73 20 74 68 65 20 0a 5b 68 74 74 70  12 is the .[http
15b20 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e  ://en.wikipedia.
15b30 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f  org/wiki/Julian_
15b40 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61 79  day | Julian day
15b50 20 6e 75 6d 62 65 72 5d 0a 65 78 70 72 65 73 73   number].express
15b60 65 64 20 61 73 20 61 20 66 6c 6f 61 74 69 6e 67  ed as a floating
15b70 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 3c 2f   point value..</
15b80 70 3e 0a 0a 3c 68 33 3e 4d 6f 64 69 66 69 65 72  p>..<h3>Modifier
15b90 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20  s</h3>..<p>^The 
15ba0 74 69 6d 65 20 73 74 72 69 6e 67 20 63 61 6e 20  time string can 
15bb0 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a  be followed by z
15bc0 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64 69  ero or more modi
15bd0 66 69 65 72 73 20 74 68 61 74 20 0a 61 6c 74 65  fiers that .alte
15be0 72 20 74 68 65 20 64 61 74 65 20 61 6e 64 20 74  r the date and t
15bf0 69 6d 65 20 73 74 72 69 6e 67 2e 20 5e 45 61 63  ime string. ^Eac
15c00 68 20 6d 6f 64 69 66 69 65 72 0a 69 73 20 61 20  h modifier.is a 
15c10 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 20 74  transformation t
15c20 68 61 74 20 69 73 20 61 70 70 6c 69 65 64 20 74  hat is applied t
15c30 6f 20 74 68 65 20 74 69 6d 65 20 76 61 6c 75 65  o the time value
15c40 20 74 6f 20 69 74 73 20 6c 65 66 74 2e 0a 5e 4d   to its left..^M
15c50 6f 64 69 66 69 65 72 73 20 61 72 65 20 61 70 70  odifiers are app
15c60 6c 69 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74  lied from left t
15c70 6f 20 72 69 67 68 74 3b 20 6f 72 64 65 72 20 69  o right; order i
15c80 73 20 69 6d 70 6f 72 74 61 6e 74 2e 0a 5e 28 54  s important..^(T
15c90 68 65 20 61 76 61 69 6c 61 62 6c 65 20 6d 6f 64  he available mod
15ca0 69 66 69 65 72 73 20 61 72 65 20 61 73 20 66 6f  ifiers are as fo
15cb0 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 6f 6c 3e  llows.</p>..<ol>
15cc0 0a 3c 6c 69 3e 20 4e 4e 4e 20 64 61 79 73 0a 3c  .<li> NNN days.<
15cd0 6c 69 3e 20 4e 4e 4e 20 68 6f 75 72 73 0a 3c 6c  li> NNN hours.<l
15ce0 69 3e 20 4e 4e 4e 20 6d 69 6e 75 74 65 73 0a 3c  i> NNN minutes.<
15cf0 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e 4e 20 73 65 63  li> NNN.NNNN sec
15d00 6f 6e 64 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 6f  onds.<li> NNN mo
15d10 6e 74 68 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 79 65  nths.<li> NNN ye
15d20 61 72 73 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f  ars.<li> start o
15d30 66 20 6d 6f 6e 74 68 0a 3c 6c 69 3e 20 73 74 61  f month.<li> sta
15d40 72 74 20 6f 66 20 79 65 61 72 0a 3c 6c 69 3e 20  rt of year.<li> 
15d50 73 74 61 72 74 20 6f 66 20 64 61 79 0a 3c 6c 69  start of day.<li
15d60 3e 20 77 65 65 6b 64 61 79 20 4e 0a 3c 6c 69 3e  > weekday N.<li>
15d70 20 75 6e 69 78 65 70 6f 63 68 0a 3c 6c 69 3e 20   unixepoch.<li> 
15d80 6c 6f 63 61 6c 74 69 6d 65 0a 3c 6c 69 3e 20 75  localtime.<li> u
15d90 74 63 20 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e  tc .</ol>)^..<p>
15da0 5e 54 68 65 20 66 69 72 73 74 20 73 69 78 20 6d  ^The first six m
15db0 6f 64 69 66 69 65 72 73 20 28 31 20 74 68 72 6f  odifiers (1 thro
15dc0 75 67 68 20 36 29 20 0a 73 69 6d 70 6c 79 20 61  ugh 6) .simply a
15dd0 64 64 20 74 68 65 20 73 70 65 63 69 66 69 65 64  dd the specified
15de0 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20   amount of time 
15df0 74 6f 20 74 68 65 20 64 61 74 65 20 61 6e 64 20  to the date and 
15e00 74 69 6d 65 20 0a 73 70 65 63 69 66 69 65 64 20  time .specified 
15e10 62 79 20 74 68 65 20 70 72 65 63 65 64 69 6e 67  by the preceding
15e20 20 74 69 6d 65 73 74 72 69 6e 67 20 61 6e 64 20   timestring and 
15e30 6d 6f 64 69 66 69 65 72 73 2e 0a 5e 4e 6f 74 65  modifiers..^Note
15e40 20 74 68 61 74 20 22 26 70 6c 75 73 6d 6e 3b 4e   that "&plusmn;N
15e50 4e 4e 20 6d 6f 6e 74 68 73 22 20 77 6f 72 6b 73  NN months" works
15e60 20 62 79 20 72 65 6e 64 65 72 69 6e 67 20 74 68   by rendering th
15e70 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 65 20  e original date 
15e80 69 6e 74 6f 0a 74 68 65 20 59 59 59 59 2d 4d 4d  into.the YYYY-MM
15e90 2d 44 44 20 66 6f 72 6d 61 74 2c 20 61 64 64 69  -DD format, addi
15ea0 6e 67 20 74 68 65 20 26 70 6c 75 73 6d 6e 3b 4e  ng the &plusmn;N
15eb0 4e 4e 20 74 6f 20 74 68 65 20 4d 4d 20 6d 6f 6e  NN to the MM mon
15ec0 74 68 20 76 61 6c 75 65 2c 20 74 68 65 6e 0a 6e  th value, then.n
15ed0 6f 72 6d 61 6c 69 7a 69 6e 67 20 74 68 65 20 72  ormalizing the r
15ee0 65 73 75 6c 74 2e 20 20 5e 54 68 75 73 2c 20 66  esult.  ^Thus, f
15ef0 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20  or example, the 
15f00 64 61 74 61 20 32 30 30 31 2d 30 33 2d 33 31 20  data 2001-03-31 
15f10 6d 6f 64 69 66 69 65 64 0a 62 79 20 27 2b 31 20  modified.by '+1 
15f20 6d 6f 6e 74 68 27 20 69 6e 69 74 69 61 6c 6c 79  month' initially
15f30 20 79 69 65 6c 64 73 20 32 30 30 31 2d 30 34 2d   yields 2001-04-
15f40 33 31 2c 20 62 75 74 20 41 70 72 69 6c 20 6f 6e  31, but April on
15f50 6c 79 20 68 61 73 20 33 30 20 64 61 79 73 0a 73  ly has 30 days.s
15f60 6f 20 74 68 65 20 64 61 74 65 20 69 73 20 6e 6f  o the date is no
15f70 72 6d 61 6c 69 7a 65 64 20 74 6f 20 32 30 30 31  rmalized to 2001
15f80 2d 30 35 2d 30 31 2e 20 20 5e 41 20 73 69 6d 69  -05-01.  ^A simi
15f90 6c 61 72 20 65 66 66 65 63 74 20 6f 63 63 75 72  lar effect occur
15fa0 73 20 77 68 65 6e 0a 74 68 65 20 6f 72 69 67 69  s when.the origi
15fb0 6e 61 6c 20 64 61 74 65 20 69 73 20 46 65 62 72  nal date is Febr
15fc0 75 61 72 79 20 32 39 20 6f 66 20 61 20 6c 65 61  uary 29 of a lea
15fd0 70 79 65 61 72 20 61 6e 64 20 74 68 65 20 6d 6f  pyear and the mo
15fe0 64 69 66 69 65 72 20 69 73 0a 26 70 6c 75 73 6d  difier is.&plusm
15ff0 6e 3b 4e 20 79 65 61 72 73 20 77 68 65 72 65 20  n;N years where 
16000 4e 20 69 73 20 6e 6f 74 20 61 20 6d 75 6c 74 69  N is not a multi
16010 70 6c 65 20 6f 66 20 66 6f 75 72 2e 3c 2f 70 3e  ple of four.</p>
16020 0a 0a 3c 70 3e 5e 54 68 65 20 22 73 74 61 72 74  ..<p>^The "start
16030 20 6f 66 22 20 6d 6f 64 69 66 69 65 72 73 20 28   of" modifiers (
16040 37 20 74 68 72 6f 75 67 68 20 39 29 20 73 68 69  7 through 9) shi
16050 66 74 20 74 68 65 20 64 61 74 65 20 62 61 63 6b  ft the date back
16060 77 61 72 64 73 20 0a 74 6f 20 74 68 65 20 62 65  wards .to the be
16070 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 63  ginning of the c
16080 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2c 20 79 65  urrent month, ye
16090 61 72 20 6f 72 20 64 61 79 2e 3c 2f 70 3e 0a 0a  ar or day.</p>..
160a0 3c 70 3e 5e 54 68 65 20 22 77 65 65 6b 64 61 79  <p>^The "weekday
160b0 22 20 6d 6f 64 69 66 69 65 72 20 61 64 76 61 6e  " modifier advan
160c0 63 65 73 20 74 68 65 20 64 61 74 65 20 66 6f 72  ces the date for
160d0 77 61 72 64 20 74 6f 20 74 68 65 20 6e 65 78 74  ward to the next
160e0 20 64 61 74 65 20 0a 77 68 65 72 65 20 74 68 65   date .where the
160f0 20 77 65 65 6b 64 61 79 20 6e 75 6d 62 65 72 20   weekday number 
16100 69 73 20 4e 2e 20 53 75 6e 64 61 79 20 69 73 20  is N. Sunday is 
16110 30 2c 20 4d 6f 6e 64 61 79 20 69 73 20 31 2c 20  0, Monday is 1, 
16120 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 3c 2f 70  and so forth.</p
16130 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 75 6e 69 78  >..<p>^The "unix
16140 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20  epoch" modifier 
16150 28 31 31 29 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  (11) only works 
16160 69 66 20 69 74 20 69 6d 6d 65 64 69 61 74 65 6c  if it immediatel
16170 79 20 66 6f 6c 6c 6f 77 73 20 0a 61 20 74 69 6d  y follows .a tim
16180 65 73 74 72 69 6e 67 20 69 6e 20 74 68 65 20 44  estring in the D
16190 44 44 44 44 44 44 44 44 44 20 66 6f 72 6d 61 74  DDDDDDDDD format
161a0 2e 20 0a 5e 54 68 69 73 20 6d 6f 64 69 66 69 65  . .^This modifie
161b0 72 20 63 61 75 73 65 73 20 74 68 65 20 44 44 44  r causes the DDD
161c0 44 44 44 44 44 44 44 20 74 6f 20 62 65 20 69 6e  DDDDDDD to be in
161d0 74 65 72 70 72 65 74 65 64 20 6e 6f 74 20 0a 61  terpreted not .a
161e0 73 20 61 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e  s a Julian day n
161f0 75 6d 62 65 72 20 61 73 20 69 74 20 6e 6f 72 6d  umber as it norm
16200 61 6c 6c 79 20 77 6f 75 6c 64 20 62 65 2c 20 62  ally would be, b
16210 75 74 20 61 73 0a 5b 68 74 74 70 3a 2f 2f 65 6e  ut as.[http://en
16220 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77  .wikipedia.org/w
16230 69 6b 69 2f 55 6e 69 78 5f 74 69 6d 65 20 7c 20  iki/Unix_time | 
16240 55 6e 69 78 20 54 69 6d 65 5d 20 2d 20 74 68 65  Unix Time] - the
16250 20 0a 6e 75 6d 62 65 72 20 6f 66 20 73 65 63 6f   .number of seco
16260 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30 2e 20  nds since 1970. 
16270 20 49 66 20 74 68 65 20 22 75 6e 69 78 65 70 6f   If the "unixepo
16280 63 68 22 20 6d 6f 64 69 66 69 65 72 20 64 6f 65  ch" modifier doe
16290 73 20 6e 6f 74 0a 66 6f 6c 6c 6f 77 20 61 20 74  s not.follow a t
162a0 69 6d 65 73 74 72 69 6e 67 20 6f 66 20 74 68 65  imestring of the
162b0 20 66 6f 72 6d 20 44 44 44 44 44 44 44 44 44 44   form DDDDDDDDDD
162c0 20 77 68 69 63 68 20 65 78 70 72 65 73 73 65 73   which expresses
162d0 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 73   the number.of s
162e0 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37  econds since 197
162f0 30 20 6f 72 20 69 66 20 6f 74 68 65 72 20 6d 6f  0 or if other mo
16300 64 69 66 69 65 72 73 0a 73 65 70 61 72 61 74 65  difiers.separate
16310 20 74 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22   the "unixepoch"
16320 20 6d 6f 64 69 66 69 65 72 20 66 72 6f 6d 20 70   modifier from p
16330 72 69 6f 72 20 44 44 44 44 44 44 44 44 44 44 20  rior DDDDDDDDDD 
16340 74 68 65 6e 20 74 68 65 0a 62 65 68 61 76 69 6f  then the.behavio
16350 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  r is undefined..
16360 44 75 65 20 74 6f 20 70 72 65 63 69 73 69 6f 6e  Due to precision
16370 20 6c 69 6d 69 74 61 74 69 6f 6e 73 20 69 6d 70   limitations imp
16380 6f 73 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c  osed by the impl
16390 65 6d 65 6e 74 61 74 69 6f 6e 73 20 75 73 65 0a  ementations use.
163a0 6f 66 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65  of 64-bit intege
163b0 72 73 2c 20 74 68 65 20 22 75 6e 69 78 65 70 6f  rs, the "unixepo
163c0 63 68 22 20 6d 6f 64 69 66 69 65 72 20 6f 6e 6c  ch" modifier onl
163d0 79 20 77 6f 72 6b 73 20 66 6f 72 0a 64 61 74 65  y works for.date
163e0 73 20 62 65 74 77 65 65 6e 20 30 30 30 30 2d 30  s between 0000-0
163f0 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 20 61 6e  1-01 00:00:00 an
16400 64 20 35 33 35 32 2d 31 31 2d 30 31 20 31 30 3a  d 5352-11-01 10:
16410 35 32 3a 34 37 20 28 75 6e 69 78 20 74 69 6d 65  52:47 (unix time
16420 73 0a 6f 66 20 2d 36 32 31 36 37 32 31 39 32 30  s.of -6216721920
16430 30 20 74 68 72 6f 75 67 68 20 31 30 36 37 35 31  0 through 106751
16440 39 39 31 36 37 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e  99167).</p>..<p>
16450 5e 54 68 65 20 22 6c 6f 63 61 6c 74 69 6d 65 22  ^The "localtime"
16460 20 6d 6f 64 69 66 69 65 72 20 28 31 32 29 20 61   modifier (12) a
16470 73 73 75 6d 65 73 20 74 68 65 20 74 69 6d 65 20  ssumes the time 
16480 73 74 72 69 6e 67 20 74 6f 20 69 74 73 20 6c 65  string to its le
16490 66 74 20 69 73 20 69 6e 0a 55 6e 69 76 65 72 73  ft is in.Univers
164a0 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64 20 54  al Coordinated T
164b0 69 6d 65 20 28 55 54 43 29 20 61 6e 64 20 61 64  ime (UTC) and ad
164c0 6a 75 73 74 73 20 74 68 65 20 74 69 6d 65 0a 73  justs the time.s
164d0 74 72 69 6e 67 20 73 6f 20 74 68 61 74 20 69 74  tring so that it
164e0 20 64 69 73 70 6c 61 79 73 20 6c 6f 63 61 6c 74   displays localt
164f0 69 6d 65 2e 20 20 49 66 20 22 6c 6f 63 61 6c 74  ime.  If "localt
16500 69 6d 65 22 0a 66 6f 6c 6c 6f 77 73 20 61 20 74  ime".follows a t
16510 69 6d 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20  ime that is not 
16520 55 54 43 2c 20 74 68 65 6e 20 74 68 65 20 62 65  UTC, then the be
16530 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69  havior is undefi
16540 6e 65 64 2e 0a 5e 28 54 68 65 20 22 75 74 63 22  ned..^(The "utc"
16550 20 69 73 20 74 68 65 20 6f 70 70 6f 73 69 74 65   is the opposite
16560 20 6f 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22 2e   of "localtime".
16570 20 20 22 75 74 63 22 20 61 73 73 75 6d 65 73 20    "utc" assumes 
16580 74 68 61 74 20 74 68 65 20 73 74 72 69 6e 67 0a  that the string.
16590 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73 20 69  to its left is i
165a0 6e 20 74 68 65 20 6c 6f 63 61 6c 20 74 69 6d 65  n the local time
165b0 7a 6f 6e 65 20 61 6e 64 20 61 64 6a 75 73 74 73  zone and adjusts
165c0 20 74 68 61 74 20 73 74 72 69 6e 67 20 74 6f 20   that string to 
165d0 62 65 20 69 6e 20 55 54 43 2e 29 5e 0a 49 66 20  be in UTC.)^.If 
165e0 74 68 65 20 70 72 69 6f 72 20 73 74 72 69 6e 67  the prior string
165f0 20 69 73 20 6e 6f 74 20 69 6e 20 6c 6f 63 61 6c   is not in local
16600 74 69 6d 65 2c 20 74 68 65 6e 20 74 68 65 20 72  time, then the r
16610 65 73 75 6c 74 20 6f 66 20 22 75 74 63 22 20 69  esult of "utc" i
16620 73 0a 75 6e 64 65 66 69 6e 65 64 2e 3c 2f 70 3e  s.undefined.</p>
16630 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c 65 73 3c 2f  ..<h3>Examples</
16640 68 33 3e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74  h3>..^(<p>Comput
16650 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 61  e the current da
16660 74 65 2e 3c 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  te.<p>..<blockqu
16670 6f 74 65 3e 53 45 4c 45 43 54 20 64 61 74 65 28  ote>SELECT date(
16680 27 6e 6f 77 27 29 3b 3c 2f 62 6c 6f 63 6b 71 75  'now');</blockqu
16690 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d  ote>)^..^(<p>Com
166a0 70 75 74 65 20 74 68 65 20 6c 61 73 74 20 64 61  pute the last da
166b0 79 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  y of the current
166c0 20 6d 6f 6e 74 68 2e 3c 2f 70 3e 0a 0a 3c 62 6c   month.</p>..<bl
166d0 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45 43 54 20  ockquote>SELECT 
166e0 64 61 74 65 28 27 6e 6f 77 27 2c 27 73 74 61 72  date('now','star
166f0 74 20 6f 66 20 6d 6f 6e 74 68 27 2c 27 2b 31 20  t of month','+1 
16700 6d 6f 6e 74 68 27 2c 27 2d 31 20 64 61 79 27 29  month','-1 day')
16710 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
16720 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20  ^..^(<p>Compute 
16730 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  the date and tim
16740 65 20 67 69 76 65 6e 20 61 20 75 6e 69 78 20 74  e given a unix t
16750 69 6d 65 73 74 61 6d 70 20 31 30 39 32 39 34 31  imestamp 1092941
16760 34 36 36 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  466.</p>..<block
16770 71 75 6f 74 65 3e 0a 20 20 20 20 53 45 4c 45 43  quote>.    SELEC
16780 54 20 64 61 74 65 74 69 6d 65 28 31 30 39 32 39  T datetime(10929
16790 34 31 34 36 36 2c 20 27 75 6e 69 78 65 70 6f 63  41466, 'unixepoc
167a0 68 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  h');.</blockquot
167b0 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75  e>)^..^(<p>Compu
167c0 74 65 20 74 68 65 20 64 61 74 65 20 61 6e 64 20  te the date and 
167d0 74 69 6d 65 20 67 69 76 65 6e 20 61 20 75 6e 69  time given a uni
167e0 78 20 74 69 6d 65 73 74 61 6d 70 20 31 30 39 32  x timestamp 1092
167f0 39 34 31 34 36 36 2c 20 61 6e 64 20 0a 63 6f 6d  941466, and .com
16800 70 65 6e 73 61 74 65 20 66 6f 72 20 79 6f 75 72  pensate for your
16810 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65 2e   local timezone.
16820 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
16830 65 3e 0a 20 20 53 45 4c 45 43 54 20 64 61 74 65  e>.  SELECT date
16840 74 69 6d 65 28 31 30 39 32 39 34 31 34 36 36 2c  time(1092941466,
16850 20 27 75 6e 69 78 65 70 6f 63 68 27 2c 20 27 6c   'unixepoch', 'l
16860 6f 63 61 6c 74 69 6d 65 27 29 3b 0a 3c 2f 62 6c  ocaltime');.</bl
16870 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
16880 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 63 75  p>Compute the cu
16890 72 72 65 6e 74 20 75 6e 69 78 20 74 69 6d 65 73  rrent unix times
168a0 74 61 6d 70 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  tamp.</p>..<bloc
168b0 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54  kquote>.  SELECT
168c0 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27   strftime('%s','
168d0 6e 6f 77 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  now');.</blockqu
168e0 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d  ote>)^..^(<p>Com
168f0 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20  pute the number 
16900 6f 66 20 64 61 79 73 20 73 69 6e 63 65 20 74 68  of days since th
16910 65 20 73 69 67 6e 69 6e 67 20 6f 66 20 74 68 65  e signing of the
16920 20 55 53 20 44 65 63 6c 61 72 61 74 69 6f 6e 0a   US Declaration.
16930 6f 66 20 49 6e 64 65 70 65 6e 64 65 6e 63 65 2e  of Independence.
16940 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
16950 65 3e 0a 20 20 53 45 4c 45 43 54 20 6a 75 6c 69  e>.  SELECT juli
16960 61 6e 64 61 79 28 27 6e 6f 77 27 29 20 2d 20 6a  anday('now') - j
16970 75 6c 69 61 6e 64 61 79 28 27 31 37 37 36 2d 30  ulianday('1776-0
16980 37 2d 30 34 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  7-04');.</blockq
16990 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
169a0 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72  mpute the number
169b0 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63   of seconds sinc
169c0 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 6d  e a particular m
169d0 6f 6d 65 6e 74 20 69 6e 20 32 30 30 34 3a 3c 2f  oment in 2004:</
169e0 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
169f0 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66 74 69  .  SELECT strfti
16a00 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 20 2d  me('%s','now') -
16a10 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27   strftime('%s','
16a20 32 30 30 34 2d 30 31 2d 30 31 20 30 32 3a 33 34  2004-01-01 02:34
16a30 3a 35 36 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  :56');.</blockqu
16a40 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 0a 43 6f  ote>)^..^(<p>.Co
16a50 6d 70 75 74 65 20 74 68 65 20 64 61 74 65 20 6f  mpute the date o
16a60 66 20 74 68 65 20 66 69 72 73 74 20 54 75 65 73  f the first Tues
16a70 64 61 79 20 69 6e 20 4f 63 74 6f 62 65 72 0a 66  day in October.f
16a80 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 79  or the current y
16a90 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  ear..</p>..<bloc
16aa0 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54  kquote>.  SELECT
16ab0 20 64 61 74 65 28 27 6e 6f 77 27 2c 27 73 74 61   date('now','sta
16ac0 72 74 20 6f 66 20 79 65 61 72 27 2c 27 2b 39 20  rt of year','+9 
16ad0 6d 6f 6e 74 68 73 27 2c 27 77 65 65 6b 64 61 79  months','weekday
16ae0 20 32 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f   2');.</blockquo
16af0 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70  te>)^..^(<p>Comp
16b00 75 74 65 20 74 68 65 20 74 69 6d 65 20 73 69 6e  ute the time sin
16b10 63 65 20 74 68 65 20 75 6e 69 78 20 65 70 6f 63  ce the unix epoc
16b20 68 20 69 6e 20 73 65 63 6f 6e 64 73 20 0a 28 6c  h in seconds .(l
16b30 69 6b 65 20 73 74 72 66 74 69 6d 65 28 27 25 73  ike strftime('%s
16b40 27 2c 27 6e 6f 77 27 29 20 65 78 63 65 70 74 20  ','now') except 
16b50 69 6e 63 6c 75 64 65 73 20 66 72 61 63 74 69 6f  includes fractio
16b60 6e 61 6c 20 70 61 72 74 29 3a 3c 2f 70 3e 0a 0a  nal part):</p>..
16b70 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
16b80 45 4c 45 43 54 20 28 6a 75 6c 69 61 6e 64 61 79  ELECT (julianday
16b90 28 27 6e 6f 77 27 29 20 2d 20 32 34 34 30 35 38  ('now') - 244058
16ba0 37 2e 35 29 2a 38 36 34 30 30 2e 30 3b 0a 3c 2f  7.5)*86400.0;.</
16bb0 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
16bc0 68 33 3e 43 61 76 65 61 74 73 20 41 6e 64 20 42  h3>Caveats And B
16bd0 75 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  ugs</h3>..<p>The
16be0 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20   computation of 
16bf0 6c 6f 63 61 6c 20 74 69 6d 65 20 64 65 70 65 6e  local time depen
16c00 64 73 20 68 65 61 76 69 6c 79 20 6f 6e 20 74 68  ds heavily on th
16c10 65 20 77 68 69 6d 20 0a 6f 66 20 70 6f 6c 69 74  e whim .of polit
16c20 69 63 69 61 6e 73 20 61 6e 64 20 69 73 20 74 68  icians and is th
16c30 75 73 20 64 69 66 66 69 63 75 6c 74 20 74 6f 20  us difficult to 
16c40 67 65 74 20 63 6f 72 72 65 63 74 20 66 6f 72 20  get correct for 
16c50 0a 61 6c 6c 20 6c 6f 63 61 6c 65 73 2e 20 5e 49  .all locales. ^I
16c60 6e 20 74 68 69 73 20 69 6d 70 6c 65 6d 65 6e 74  n this implement
16c70 61 74 69 6f 6e 2c 20 74 68 65 20 73 74 61 6e 64  ation, the stand
16c80 61 72 64 20 43 20 6c 69 62 72 61 72 79 20 0a 66  ard C library .f
16c90 75 6e 63 74 69 6f 6e 20 6c 6f 63 61 6c 74 69 6d  unction localtim
16ca0 65 5f 72 28 29 20 69 73 20 75 73 65 64 20 74 6f  e_r() is used to
16cb0 20 61 73 73 69 73 74 20 69 6e 20 74 68 65 20 63   assist in the c
16cc0 61 6c 63 75 6c 61 74 69 6f 6e 20 6f 66 20 0a 6c  alculation of .l
16cd0 6f 63 61 6c 20 74 69 6d 65 2e 20 20 5e 28 54 68  ocal time.  ^(Th
16ce0 65 20 0a 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29  e .localtime_r()
16cf0 20 43 20 66 75 6e 63 74 69 6f 6e 20 6e 6f 72 6d   C function norm
16d00 61 6c 6c 79 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  ally only works 
16d10 66 6f 72 20 79 65 61 72 73 0a 62 65 74 77 65 65  for years.betwee
16d20 6e 20 31 39 37 30 20 61 6e 64 20 32 30 33 37 2e  n 1970 and 2037.
16d30 20 46 6f 72 20 64 61 74 65 73 20 6f 75 74 73 69   For dates outsi
16d40 64 65 20 74 68 69 73 20 72 61 6e 67 65 2c 20 53  de this range, S
16d50 51 4c 69 74 65 20 0a 61 74 74 65 6d 70 74 73 20  QLite .attempts 
16d60 74 6f 20 6d 61 70 20 74 68 65 20 79 65 61 72 20  to map the year 
16d70 69 6e 74 6f 20 61 6e 20 65 71 75 69 76 61 6c 65  into an equivale
16d80 6e 74 20 79 65 61 72 20 77 69 74 68 69 6e 20 0a  nt year within .
16d90 74 68 69 73 20 72 61 6e 67 65 2c 20 64 6f 20 74  this range, do t
16da0 68 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e 2c 20  he calculation, 
16db0 74 68 65 6e 20 6d 61 70 20 74 68 65 20 79 65 61  then map the yea
16dc0 72 20 62 61 63 6b 2e 29 5e 3c 2f 70 3e 0a 0a 0a  r back.)^</p>...
16dd0 3c 70 3e 5e 28 54 68 65 73 65 20 66 75 6e 63 74  <p>^(These funct
16de0 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66  ions only work f
16df0 6f 72 20 64 61 74 65 73 20 62 65 74 77 65 65 6e  or dates between
16e00 20 30 30 30 30 2d 30 31 2d 30 31 20 30 30 3a 30   0000-01-01 00:0
16e10 30 3a 30 30 0a 61 6e 64 20 39 39 39 39 2d 31 32  0:00.and 9999-12
16e20 2d 33 31 20 32 33 3a 35 39 3a 35 39 20 28 6a 75  -31 23:59:59 (ju
16e30 6c 69 64 61 6e 20 64 61 79 20 6e 75 6d 62 65 72  lidan day number
16e40 73 20 31 37 32 31 30 35 39 2e 35 20 74 68 72 6f  s 1721059.5 thro
16e50 75 67 68 20 35 33 37 33 34 38 34 2e 35 29 2e 29  ugh 5373484.5).)
16e60 5e 0a 46 6f 72 20 64 61 74 65 73 20 6f 75 74 73  ^.For dates outs
16e70 69 64 65 20 74 68 61 74 20 72 61 6e 67 65 2c 20  ide that range, 
16e80 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
16e90 68 65 73 65 0a 66 75 6e 63 74 69 6f 6e 73 20 61  hese.functions a
16ea0 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 3c 2f 70  re undefined.</p
16eb0 3e 0a 0a 3c 70 3e 4e 6f 6e 2d 56 69 73 74 61 20  >..<p>Non-Vista 
16ec0 57 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f 72 6d  Windows platform
16ed0 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 20 6f  s only support o
16ee0 6e 65 20 73 65 74 20 6f 66 20 44 53 54 20 72 75  ne set of DST ru
16ef0 6c 65 73 2e 20 0a 56 69 73 74 61 20 6f 6e 6c 79  les. .Vista only
16f00 20 73 75 70 70 6f 72 74 73 20 74 77 6f 2e 20 54   supports two. T
16f10 68 65 72 65 66 6f 72 65 2c 20 6f 6e 20 74 68 65  herefore, on the
16f20 73 65 20 70 6c 61 74 66 6f 72 6d 73 2c 20 0a 68  se platforms, .h
16f30 69 73 74 6f 72 69 63 61 6c 20 44 53 54 20 63 61  istorical DST ca
16f40 6c 63 75 6c 61 74 69 6f 6e 73 20 77 69 6c 6c 20  lculations will 
16f50 62 65 20 69 6e 63 6f 72 72 65 63 74 2e 20 0a 46  be incorrect. .F
16f60 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 20 74  or example, in t
16f70 68 65 20 55 53 2c 20 69 6e 20 32 30 30 37 20 74  he US, in 2007 t
16f80 68 65 20 44 53 54 20 72 75 6c 65 73 20 63 68 61  he DST rules cha
16f90 6e 67 65 64 2e 20 0a 4e 6f 6e 2d 56 69 73 74 61  nged. .Non-Vista
16fa0 20 57 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f 72   Windows platfor
16fb0 6d 73 20 61 70 70 6c 79 20 74 68 65 20 6e 65 77  ms apply the new
16fc0 20 32 30 30 37 20 44 53 54 20 72 75 6c 65 73 20   2007 DST rules 
16fd0 0a 74 6f 20 61 6c 6c 20 70 72 65 76 69 6f 75 73  .to all previous
16fe0 20 79 65 61 72 73 20 61 73 20 77 65 6c 6c 2e 20   years as well. 
16ff0 56 69 73 74 61 20 64 6f 65 73 20 73 6f 6d 65 77  Vista does somew
17000 68 61 74 20 62 65 74 74 65 72 0a 67 65 74 74 69  hat better.getti
17010 6e 67 20 72 65 73 75 6c 74 73 20 63 6f 72 72 65  ng results corre
17020 63 74 20 62 61 63 6b 20 74 6f 20 31 39 38 36 2c  ct back to 1986,
17030 20 77 68 65 6e 20 74 68 65 20 72 75 6c 65 73 20   when the rules 
17040 77 65 72 65 20 61 6c 73 6f 20 63 68 61 6e 67 65  were also change
17050 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6c 6c 20 69  d.</p>..<p>All i
17060 6e 74 65 72 6e 61 6c 20 63 6f 6d 70 75 74 61 74  nternal computat
17070 69 6f 6e 73 20 61 73 73 75 6d 65 20 74 68 65 20  ions assume the 
17080 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69  .[http://en.wiki
17090 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 47  pedia.org/wiki/G
170a0 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e 64 61  regorian_calenda
170b0 72 20 7c 20 47 72 65 67 6f 72 69 61 6e 20 63 61  r | Gregorian ca
170c0 6c 65 6e 64 61 72 5d 0a 73 79 73 74 65 6d 2e 20  lendar].system. 
170d0 20 49 74 20 69 73 20 61 6c 73 6f 20 61 73 73 75   It is also assu
170e0 6d 65 64 20 74 68 61 74 20 65 76 65 72 79 0a 64  med that every.d
170f0 61 79 20 69 73 20 65 78 61 63 74 6c 79 20 38 36  ay is exactly 86
17100 34 30 30 20 73 65 63 6f 6e 64 73 20 69 6e 20 64  400 seconds in d
17110 75 72 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74  uration.</p>..<t
17120 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
17130 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17140 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17150 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17160 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17170 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41 67 67 72  ##.Section {Aggr
17180 65 67 61 74 65 20 46 75 6e 63 74 69 6f 6e 73 7d  egate Functions}
17190 20 61 67 67 66 75 6e 63 20 7b 2a 61 67 67 66 75   aggfunc {*aggfu
171a0 6e 63 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a  nc}.</tcl>..<p>.
171b0 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75  The aggregate fu
171c0 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e 20 62 65  nctions shown be
171d0 6c 6f 77 20 61 72 65 20 61 76 61 69 6c 61 62 6c  low are availabl
171e0 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 41  e by default.  A
171f0 64 64 69 74 69 6f 6e 61 6c 0a 61 67 67 72 65 67  dditional.aggreg
17200 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 77 72  ate functions wr
17210 69 74 74 65 6e 20 69 6e 20 43 20 6d 61 79 20 62  itten in C may b
17220 65 20 61 64 64 65 64 20 75 73 69 6e 67 20 74 68  e added using th
17230 65 20 0a 5b 73 71 6c 69 74 65 33 5f 63 72 65 61  e .[sqlite3_crea
17240 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 3c 2f  te_function()]</
17250 61 3e 0a 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 70 3e  a>.API.</p>..<p>
17260 0a 5e 49 6e 20 61 6e 79 20 61 67 67 72 65 67 61  .^In any aggrega
17270 74 65 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74  te function that
17280 20 74 61 6b 65 73 20 61 20 73 69 6e 67 6c 65 20   takes a single 
17290 61 72 67 75 6d 65 6e 74 2c 20 74 68 61 74 20 61  argument, that a
172a0 72 67 75 6d 65 6e 74 0a 63 61 6e 20 62 65 20 70  rgument.can be p
172b0 72 65 63 65 64 65 64 20 62 79 20 74 68 65 20 6b  receded by the k
172c0 65 79 77 6f 72 64 20 44 49 53 54 49 4e 43 54 2e  eyword DISTINCT.
172d0 20 20 5e 49 6e 20 73 75 63 68 20 63 61 73 65 73    ^In such cases
172e0 2c 20 64 75 70 6c 69 63 61 74 65 0a 65 6c 65 6d  , duplicate.elem
172f0 65 6e 74 73 20 61 72 65 20 66 69 6c 74 65 72 65  ents are filtere
17300 64 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20 70  d before being p
17310 61 73 73 65 64 20 69 6e 74 6f 20 74 68 65 20 61  assed into the a
17320 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
17330 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c  n..^For example,
17340 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 22 63   the function "c
17350 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 58 29  ount(distinct X)
17360 22 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 74 68  " will return th
17370 65 20 6e 75 6d 62 65 72 0a 6f 66 20 64 69 73 74  e number.of dist
17380 69 6e 63 74 20 76 61 6c 75 65 73 20 6f 66 20 63  inct values of c
17390 6f 6c 75 6d 6e 20 58 20 69 6e 73 74 65 61 64 20  olumn X instead 
173a0 6f 66 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  of the total num
173b0 62 65 72 20 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c 0a  ber of non-null.
173c0 76 61 6c 75 65 73 20 69 6e 20 63 6f 6c 75 6d 6e  values in column
173d0 20 58 2e 0a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65   X..</p>..<table
173e0 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61   border=0 cellpa
173f0 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c 3e 0a  dding=10>.<tcl>.
17400 66 75 6e 63 64 65 66 20 7b 61 76 67 28 58 29 7d  funcdef {avg(X)}
17410 20 7b 2a 61 76 67 20 7b 61 76 67 28 29 20 61 67   {*avg {avg() ag
17420 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
17430 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 61 76 67 28  }} {.  ^The avg(
17440 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74  ) function.  ret
17450 75 72 6e 73 20 74 68 65 20 61 76 65 72 61 67 65  urns the average
17460 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 6e 6f   value of all no
17470 6e 2d 4e 55 4c 4c 20 3c 69 3e 58 3c 2f 69 3e 20  n-NULL <i>X</i> 
17480 77 69 74 68 69 6e 20 61 0a 20 20 67 72 6f 75 70  within a.  group
17490 2e 20 20 5e 53 74 72 69 6e 67 20 61 6e 64 20 42  .  ^String and B
174a0 4c 4f 42 20 76 61 6c 75 65 73 20 74 68 61 74 20  LOB values that 
174b0 64 6f 20 6e 6f 74 20 6c 6f 6f 6b 20 6c 69 6b 65  do not look like
174c0 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 20 20 69   numbers are.  i
174d0 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 30 2e  nterpreted as 0.
174e0 0a 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  .  ^The result o
174f0 66 20 61 76 67 28 29 20 69 73 20 61 6c 77 61 79  f avg() is alway
17500 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  s a floating poi
17510 6e 74 20 76 61 6c 75 65 20 61 73 20 6c 6f 6e 67  nt value as long
17520 20 61 73 0a 20 20 61 74 20 74 68 65 72 65 20 69   as.  at there i
17530 73 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6e  s at least one n
17540 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 65 76  on-NULL input ev
17550 65 6e 20 69 66 20 61 6c 6c 0a 20 20 69 6e 70 75  en if all.  inpu
17560 74 73 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e  ts are integers.
17570 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66    ^The result of
17580 20 61 76 67 28 29 20 69 73 20 4e 55 4c 4c 20 69   avg() is NULL i
17590 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 20 20  f and only if.  
175a0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e  there are no non
175b0 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 2e 20 20 0a  -NULL inputs.  .
175c0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 6f 75 6e  }..funcdef {coun
175d0 74 28 58 29 20 63 6f 75 6e 74 28 2a 29 7d 20 7b  t(X) count(*)} {
175e0 2a 63 6f 75 6e 74 20 7b 63 6f 75 6e 74 28 29 20  *count {count() 
175f0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
17600 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 63 6f  on}} {.  ^The co
17610 75 6e 74 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  unt(X) function 
17620 72 65 74 75 72 6e 73 0a 20 20 61 20 63 6f 75 6e  returns.  a coun
17630 74 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20  t of the number 
17640 6f 66 20 74 69 6d 65 73 0a 20 20 74 68 61 74 20  of times.  that 
17650 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 6e 6f 74 20  <i>X</i> is not 
17660 4e 55 4c 4c 20 69 6e 20 61 20 67 72 6f 75 70 2e  NULL in a group.
17670 20 20 5e 54 68 65 20 63 6f 75 6e 74 28 2a 29 20    ^The count(*) 
17680 66 75 6e 63 74 69 6f 6e 0a 20 20 28 77 69 74 68  function.  (with
17690 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 29 20 72   no arguments) r
176a0 65 74 75 72 6e 73 20 74 68 65 20 74 6f 74 61 6c  eturns the total
176b0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
176c0 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a  in the group..}.
176d0 0a 66 75 6e 63 64 65 66 20 7b 67 72 6f 75 70 5f  .funcdef {group_
176e0 63 6f 6e 63 61 74 28 58 29 20 67 72 6f 75 70 5f  concat(X) group_
176f0 63 6f 6e 63 61 74 28 58 2c 59 29 7d 20 7b 0a 20  concat(X,Y)} {. 
17700 20 2a 67 72 6f 75 70 5f 63 6f 6e 63 61 74 20 7b   *group_concat {
17710 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 29 20 61  group_concat() a
17720 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
17730 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68 65 20 67 72  n}.} {.  ^The gr
17740 6f 75 70 5f 63 6f 6e 63 61 74 28 29 20 66 75 6e  oup_concat() fun
17750 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 0a 20 20  ction returns.  
17760 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 20 69  a string which i
17770 73 20 74 68 65 20 63 6f 6e 63 61 74 65 6e 61 74  s the concatenat
17780 69 6f 6e 20 6f 66 0a 20 20 61 6c 6c 20 6e 6f 6e  ion of.  all non
17790 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 6f 66 20  -NULL values of 
177a0 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 49 66 20 70  <i>X</i>.  ^If p
177b0 61 72 61 6d 65 74 65 72 20 3c 69 3e 59 3c 2f 69  arameter <i>Y</i
177c0 3e 20 69 73 20 70 72 65 73 65 6e 74 20 74 68 65  > is present the
177d0 6e 0a 20 20 69 74 20 69 73 20 75 73 65 64 20 61  n.  it is used a
177e0 73 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 0a  s the separator.
177f0 20 20 62 65 74 77 65 65 6e 20 69 6e 73 74 61 6e    between instan
17800 63 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e  ces of <i>X</i>.
17810 20 20 5e 41 20 63 6f 6d 6d 61 20 28 22 2c 22 29    ^A comma (",")
17820 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20   is used as the 
17830 73 65 70 61 72 61 74 6f 72 0a 20 20 69 66 20 3c  separator.  if <
17840 69 3e 59 3c 2f 69 3e 20 69 73 20 6f 6d 69 74 74  i>Y</i> is omitt
17850 65 64 2e 20 20 54 68 65 20 6f 72 64 65 72 20 6f  ed.  The order o
17860 66 20 74 68 65 20 63 6f 6e 63 61 74 65 6e 61 74  f the concatenat
17870 65 64 20 65 6c 65 6d 65 6e 74 73 20 69 73 0a 20  ed elements is. 
17880 20 61 72 62 69 74 72 61 72 79 2e 0a 7d 0a 0a 66   arbitrary..}..f
17890 75 6e 63 64 65 66 20 7b 6d 61 78 28 58 29 7d 20  uncdef {max(X)} 
178a0 7b 2a 6d 61 78 41 67 67 46 75 6e 63 20 2a 61 67  {*maxAggFunc *ag
178b0 67 5f 6d 61 78 20 7b 6d 61 78 28 29 20 61 67 67  g_max {max() agg
178c0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d  regate function}
178d0 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 61 78 28 29  } {.  ^The max()
178e0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
178f0 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68  ion.  returns th
17900 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20  e maximum value 
17910 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e  of all values in
17920 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e 54   the group..  ^T
17930 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65  he maximum value
17940 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 74 68   is the value th
17950 61 74 20 77 6f 75 6c 64 20 62 65 20 72 65 74 75  at would be retu
17960 72 6e 65 64 20 6c 61 73 74 20 69 6e 20 61 6e 0a  rned last in an.
17970 20 20 4f 52 44 45 52 20 42 59 20 6f 6e 20 74 68    ORDER BY on th
17980 65 20 73 61 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20  e same column.  
17990 5e 41 67 67 72 65 67 61 74 65 20 6d 61 78 28 29  ^Aggregate max()
179a0 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 0a 20   returns NULL . 
179b0 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20   if and only if 
179c0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e  there are no non
179d0 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20  -NULL values in 
179e0 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75  the group..}..fu
179f0 6e 63 64 65 66 20 7b 6d 69 6e 28 58 29 7d 20 7b  ncdef {min(X)} {
17a00 2a 6d 69 6e 41 67 67 46 75 6e 63 20 2a 61 67 67  *minAggFunc *agg
17a10 5f 6d 69 6e 20 7b 6d 69 6e 28 29 20 61 67 67 72  _min {min() aggr
17a20 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d  egate function}}
17a30 20 7b 0a 20 20 5e 54 68 65 20 6d 69 6e 28 29 20   {.  ^The min() 
17a40 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
17a50 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68 65  on.  returns the
17a60 20 6d 69 6e 69 6d 75 6d 20 6e 6f 6e 2d 4e 55 4c   minimum non-NUL
17a70 4c 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76  L value of all v
17a80 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f  alues in the gro
17a90 75 70 2e 0a 20 20 5e 54 68 65 20 6d 69 6e 69 6d  up..  ^The minim
17aa0 75 6d 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  um value is the 
17ab0 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 76  first non-NULL v
17ac0 61 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20  alue that would 
17ad0 61 70 70 65 61 72 0a 20 20 69 6e 20 61 6e 20 4f  appear.  in an O
17ae0 52 44 45 52 20 42 59 20 6f 66 20 74 68 65 20 63  RDER BY of the c
17af0 6f 6c 75 6d 6e 2e 0a 20 20 5e 41 67 67 72 65 67  olumn..  ^Aggreg
17b00 61 74 65 20 6d 69 6e 28 29 20 72 65 74 75 72 6e  ate min() return
17b10 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64 20 6f 6e  s NULL if and on
17b20 6c 79 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ly if there are 
17b30 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 0a 20 20 76 61  no non-NULL.  va
17b40 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75  lues in the grou
17b50 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73  p..}..funcdef {s
17b60 75 6d 28 58 29 20 74 6f 74 61 6c 28 58 29 7d 20  um(X) total(X)} 
17b70 7b 0a 20 20 2a 73 75 6d 46 75 6e 63 20 2a 73 75  {.  *sumFunc *su
17b80 6d 20 2a 74 6f 74 61 6c 0a 20 20 7b 73 75 6d 28  m *total.  {sum(
17b90 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
17ba0 74 69 6f 6e 7d 0a 20 20 7b 74 6f 74 61 6c 28 29  tion}.  {total()
17bb0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
17bc0 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68 65 20  ion}.} {.  ^The 
17bd0 73 75 6d 28 29 20 61 6e 64 20 74 6f 74 61 6c 28  sum() and total(
17be0 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
17bf0 74 69 6f 6e 73 0a 20 20 72 65 74 75 72 6e 20 73  tions.  return s
17c00 75 6d 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55  um of all non-NU
17c10 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  LL values in the
17c20 20 67 72 6f 75 70 2e 0a 20 20 5e 49 66 20 74 68   group..  ^If th
17c30 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e  ere are no non-N
17c40 55 4c 4c 20 69 6e 70 75 74 20 72 6f 77 73 20 74  ULL input rows t
17c50 68 65 6e 20 73 75 6d 28 29 20 72 65 74 75 72 6e  hen sum() return
17c60 73 0a 20 20 4e 55 4c 4c 20 62 75 74 20 74 6f 74  s.  NULL but tot
17c70 61 6c 28 29 20 72 65 74 75 72 6e 73 20 30 2e 30  al() returns 0.0
17c80 2e 0a 20 20 4e 55 4c 4c 20 69 73 20 6e 6f 74 20  ..  NULL is not 
17c90 6e 6f 72 6d 61 6c 6c 79 20 61 20 68 65 6c 70 66  normally a helpf
17ca0 75 6c 20 72 65 73 75 6c 74 20 66 6f 72 20 74 68  ul result for th
17cb0 65 20 73 75 6d 20 6f 66 20 6e 6f 20 72 6f 77 73  e sum of no rows
17cc0 0a 20 20 62 75 74 20 74 68 65 20 53 51 4c 20 73  .  but the SQL s
17cd0 74 61 6e 64 61 72 64 20 72 65 71 75 69 72 65 73  tandard requires
17ce0 20 69 74 20 61 6e 64 20 6d 6f 73 74 20 6f 74 68   it and most oth
17cf0 65 72 0a 20 20 53 51 4c 20 64 61 74 61 62 61 73  er.  SQL databas
17d00 65 20 65 6e 67 69 6e 65 73 20 69 6d 70 6c 65 6d  e engines implem
17d10 65 6e 74 20 73 75 6d 28 29 20 74 68 61 74 20 77  ent sum() that w
17d20 61 79 20 73 6f 20 53 51 4c 69 74 65 20 64 6f 65  ay so SQLite doe
17d30 73 20 69 74 20 69 6e 20 74 68 65 0a 20 20 73 61  s it in the.  sa
17d40 6d 65 20 77 61 79 20 69 6e 20 6f 72 64 65 72 20  me way in order 
17d50 74 6f 20 62 65 20 63 6f 6d 70 61 74 69 62 6c 65  to be compatible
17d60 2e 20 20 20 54 68 65 20 6e 6f 6e 2d 73 74 61 6e  .   The non-stan
17d70 64 61 72 64 20 74 6f 74 61 6c 28 29 20 66 75 6e  dard total() fun
17d80 63 74 69 6f 6e 0a 20 20 69 73 20 70 72 6f 76 69  ction.  is provi
17d90 64 65 64 20 61 73 20 61 20 63 6f 6e 76 65 6e 69  ded as a conveni
17da0 65 6e 74 20 77 61 79 20 74 6f 20 77 6f 72 6b 20  ent way to work 
17db0 61 72 6f 75 6e 64 20 74 68 69 73 20 64 65 73 69  around this desi
17dc0 67 6e 20 70 72 6f 62 6c 65 6d 0a 20 20 69 6e 20  gn problem.  in 
17dd0 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
17de0 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 54 68 65  .</p>..  <p>^The
17df0 20 72 65 73 75 6c 74 20 6f 66 20 74 6f 74 61 6c   result of total
17e00 28 29 20 69 73 20 61 6c 77 61 79 73 20 61 20 66  () is always a f
17e10 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
17e20 6c 75 65 2e 0a 20 20 5e 54 68 65 20 72 65 73 75  lue..  ^The resu
17e30 6c 74 20 6f 66 20 73 75 6d 28 29 20 69 73 20 61  lt of sum() is a
17e40 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  n integer value 
17e50 69 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20  if all non-NULL 
17e60 69 6e 70 75 74 73 20 61 72 65 20 69 6e 74 65 67  inputs are integ
17e70 65 72 73 2e 0a 20 20 5e 49 66 20 61 6e 79 20 69  ers..  ^If any i
17e80 6e 70 75 74 20 74 6f 20 73 75 6d 28 29 20 69 73  nput to sum() is
17e90 20 6e 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65   neither an inte
17ea0 67 65 72 20 6f 72 20 61 20 4e 55 4c 4c 0a 20 20  ger or a NULL.  
17eb0 74 68 65 6e 20 73 75 6d 28 29 20 72 65 74 75 72  then sum() retur
17ec0 6e 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f  ns a floating po
17ed0 69 6e 74 20 76 61 6c 75 65 0a 20 20 77 68 69 63  int value.  whic
17ee0 68 20 6d 69 67 68 74 20 62 65 20 61 6e 20 61 70  h might be an ap
17ef0 70 72 6f 78 69 6d 61 74 69 6f 6e 20 74 6f 20 74  proximation to t
17f00 68 65 20 74 72 75 65 20 73 75 6d 2e 3c 2f 70 3e  he true sum.</p>
17f10 0a 0a 20 20 3c 70 3e 5e 53 75 6d 28 29 20 77 69  ..  <p>^Sum() wi
17f20 6c 6c 20 74 68 72 6f 77 20 61 6e 20 22 69 6e 74  ll throw an "int
17f30 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 22 20 65  eger overflow" e
17f40 78 63 65 70 74 69 6f 6e 20 69 66 20 61 6c 6c 20  xception if all 
17f50 69 6e 70 75 74 73 0a 20 20 61 72 65 20 69 6e 74  inputs.  are int
17f60 65 67 65 72 73 20 6f 72 20 4e 55 4c 4c 0a 20 20  egers or NULL.  
17f70 61 6e 64 20 61 6e 20 69 6e 74 65 67 65 72 20 6f  and an integer o
17f80 76 65 72 66 6c 6f 77 20 6f 63 63 75 72 73 20 61  verflow occurs a
17f90 74 20 61 6e 79 20 70 6f 69 6e 74 20 64 75 72 69  t any point duri
17fa0 6e 67 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69  ng the computati
17fb0 6f 6e 2e 0a 20 20 5e 54 6f 74 61 6c 28 29 20 6e  on..  ^Total() n
17fc0 65 76 65 72 20 74 68 72 6f 77 73 20 61 6e 20 69  ever throws an i
17fd0 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 2e  nteger overflow.
17fe0 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c  .}.</tcl>.</tabl
17ff0 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  e>..<tcl>.######
18000 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18010 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18030 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18040 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
18050 20 49 4e 53 45 52 54 20 69 6e 73 65 72 74 20 7b   INSERT insert {
18060 49 4e 53 45 52 54 20 2a 49 4e 53 45 52 54 73 7d  INSERT *INSERTs}
18070 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
18080 69 6e 73 65 72 74 2d 73 74 6d 74 20 31 0a 3c 2f  insert-stmt 1.</
18090 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e 53  tcl>..<p>The INS
180a0 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  ERT statement co
180b0 6d 65 73 20 69 6e 20 74 68 72 65 65 20 62 61 73  mes in three bas
180c0 69 63 20 66 6f 72 6d 73 2e 20 20 5e 54 68 65 20  ic forms.  ^The 
180d0 66 69 72 73 74 20 66 6f 72 6d 0a 28 77 69 74 68  first form.(with
180e0 20 74 68 65 20 22 56 41 4c 55 45 53 22 20 6b 65   the "VALUES" ke
180f0 79 77 6f 72 64 29 20 63 72 65 61 74 65 73 20 61  yword) creates a
18100 20 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77 20   single new row 
18110 69 6e 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74  in an existing t
18120 61 62 6c 65 2e 0a 5e 49 66 20 6e 6f 20 63 6f 6c  able..^If no col
18130 75 6d 6e 2d 6c 69 73 74 20 69 73 20 73 70 65 63  umn-list is spec
18140 69 66 69 65 64 20 74 68 65 6e 20 74 68 65 20 6e  ified then the n
18150 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20  umber of values 
18160 6d 75 73 74 0a 62 65 20 74 68 65 20 73 61 6d 65  must.be the same
18170 20 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   as the number o
18180 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
18190 20 74 61 62 6c 65 2e 20 20 5e 49 66 20 61 20 63   table.  ^If a c
181a0 6f 6c 75 6d 6e 2d 6c 69 73 74 0a 69 73 20 73 70  olumn-list.is sp
181b0 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68  ecified, then th
181c0 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75  e number of valu
181d0 65 73 20 6d 75 73 74 20 6d 61 74 63 68 20 74 68  es must match th
181e0 65 20 6e 75 6d 62 65 72 20 6f 66 0a 73 70 65 63  e number of.spec
181f0 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73 2e 20 20  ified columns.  
18200 5e 43 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20  ^Columns of the 
18210 74 61 62 6c 65 20 74 68 61 74 20 64 6f 20 6e 6f  table that do no
18220 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 0a  t appear in the.
18230 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 61 72 65 20  column list are 
18240 66 69 6c 6c 65 64 20 77 69 74 68 20 74 68 65 20  filled with the 
18250 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2c 20 6f  default value, o
18260 72 20 77 69 74 68 20 4e 55 4c 4c 20 69 66 20 6e  r with NULL if n
18270 6f 0a 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  o.default value 
18280 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 3c 2f  is specified..</
18290 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 65 63 6f  p>..<p>^The seco
182a0 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 49  nd form of the I
182b0 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
182c0 74 61 6b 65 73 20 69 74 73 20 64 61 74 61 20 66  takes its data f
182d0 72 6f 6d 20 61 0a 53 45 4c 45 43 54 20 73 74 61  rom a.SELECT sta
182e0 74 65 6d 65 6e 74 2e 20 20 5e 54 68 65 20 6e 75  tement.  ^The nu
182f0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
18300 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  in the result of
18310 20 74 68 65 0a 53 45 4c 45 43 54 20 6d 75 73 74   the.SELECT must
18320 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20 74   exactly match t
18330 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
18340 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
18350 65 20 69 66 0a 6e 6f 20 63 6f 6c 75 6d 6e 20 6c  e if.no column l
18360 69 73 74 20 69 73 20 73 70 65 63 69 66 69 65 64  ist is specified
18370 2c 20 6f 72 20 69 74 20 6d 75 73 74 20 6d 61 74  , or it must mat
18380 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ch the number of
18390 20 63 6f 6c 75 6d 6e 73 0a 6e 61 6d 65 64 20 69   columns.named i
183a0 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6c 69 73  n the column lis
183b0 74 2e 20 20 5e 41 20 6e 65 77 20 65 6e 74 72 79  t.  ^A new entry
183c0 20 69 73 20 6d 61 64 65 20 69 6e 20 74 68 65 20   is made in the 
183d0 74 61 62 6c 65 0a 66 6f 72 20 65 76 65 72 79 20  table.for every 
183e0 72 6f 77 20 6f 66 20 74 68 65 20 53 45 4c 45 43  row of the SELEC
183f0 54 20 72 65 73 75 6c 74 2e 20 20 5e 54 68 65 20  T result.  ^The 
18400 53 45 4c 45 43 54 20 6d 61 79 20 62 65 20 73 69  SELECT may be si
18410 6d 70 6c 65 0a 6f 72 20 63 6f 6d 70 6f 75 6e 64  mple.or compound
18420 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 74  .</p>..<p>^The t
18430 68 69 72 64 20 66 6f 72 6d 20 6f 66 20 61 6e 20  hird form of an 
18440 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
18450 20 69 73 20 77 69 74 68 20 44 45 46 41 55 4c 54   is with DEFAULT
18460 20 56 41 4c 55 45 53 2e 0a 5e 28 54 68 65 20 49   VALUES..^(The I
18470 4e 53 45 52 54 20 2e 2e 2e 20 44 45 46 41 55 4c  NSERT ... DEFAUL
18480 54 20 56 41 4c 55 45 53 20 73 74 61 74 65 6d 65  T VALUES stateme
18490 6e 74 20 73 69 6d 70 6c 79 20 63 72 65 61 74 65  nt simply create
184a0 73 20 61 20 73 69 6e 67 6c 65 20 6e 65 77 0a 72  s a single new.r
184b0 6f 77 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ow in the table 
184c0 69 6e 20 77 68 69 63 68 20 65 61 63 68 20 63 6f  in which each co
184d0 6c 75 6d 6e 20 69 73 20 66 69 6c 6c 65 64 20 77  lumn is filled w
184e0 69 74 68 20 69 74 73 20 64 65 66 61 75 6c 74 20  ith its default 
184f0 76 61 6c 75 65 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70  value.)^</p>..<p
18500 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63  >^The optional c
18510 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 20 61  onflict-clause a
18520 6c 6c 6f 77 73 20 74 68 65 20 73 70 65 63 69 66  llows the specif
18530 69 63 61 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c  ication of an al
18540 74 65 72 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72  ternative.constr
18550 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65  aint conflict re
18560 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
18570 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69 6e 67  hm to use during
18580 20 74 68 69 73 20 6f 6e 65 20 49 4e 53 45 52 54   this one INSERT
18590 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65 65 20 74 68   command..See th
185a0 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64  e section titled
185b0 0a 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66  .[ON CONFLICT] f
185c0 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
185d0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 5e 46 6f 72 20  formation..^For 
185e0 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69  compatibility wi
185f0 74 68 20 4d 79 53 51 4c 2c 20 74 68 65 20 70 61  th MySQL, the pa
18600 72 73 65 72 20 61 6c 6c 6f 77 73 20 74 68 65 20  rser allows the 
18610 75 73 65 20 6f 66 20 74 68 65 0a 73 69 6e 67 6c  use of the.singl
18620 65 20 6b 65 79 77 6f 72 64 20 3c 61 20 68 72 65  e keyword <a hre
18630 66 3d 22 6c 61 6e 67 5f 72 65 70 6c 61 63 65 2e  f="lang_replace.
18640 68 74 6d 6c 22 3e 52 45 50 4c 41 43 45 3c 2f 61  html">REPLACE</a
18650 3e 20 61 73 20 61 6e 20 0a 61 6c 69 61 73 20 66  > as an .alias f
18660 6f 72 20 22 49 4e 53 45 52 54 20 4f 52 20 52 45  or "INSERT OR RE
18670 50 4c 41 43 45 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70  PLACE"..</p>..<p
18680 3e 5e 28 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  >^(The optional 
18690 22 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d  "<i>database-nam
186a0 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 22 20 70  e</i><b>.</b>" p
186b0 72 65 66 69 78 20 6f 6e 20 74 68 65 20 3c 69 3e  refix on the <i>
186c0 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 0a 69  table-name</i>.i
186d0 73 20 73 75 70 70 6f 72 74 20 66 6f 72 20 74 6f  s support for to
186e0 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54 20 73  p-level INSERT s
186f0 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 2e 29  tatements only.)
18700 5e 20 20 5e 54 68 65 20 74 61 62 6c 65 20 6e 61  ^  ^The table na
18710 6d 65 20 6d 75 73 74 20 62 65 0a 75 6e 71 75 61  me must be.unqua
18720 6c 69 66 69 65 64 20 66 6f 72 20 49 4e 53 45 52  lified for INSER
18730 54 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  T statements tha
18740 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20 5b  t occur within [
18750 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20  CREATE TRIGGER] 
18760 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e 53 69 6d  statements..^Sim
18770 69 6c 61 72 6c 79 2c 20 74 68 65 20 22 44 45 46  ilarly, the "DEF
18780 41 55 4c 54 20 56 41 4c 55 45 53 22 20 66 6f 72  AULT VALUES" for
18790 6d 20 6f 66 20 74 68 65 20 49 4e 53 45 52 54 20  m of the INSERT 
187a0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 75 70  statement is sup
187b0 70 6f 72 74 65 64 20 66 6f 72 0a 74 6f 70 2d 6c  ported for.top-l
187c0 65 76 65 6c 20 49 4e 53 45 52 54 20 73 74 61 74  evel INSERT stat
187d0 65 6d 65 6e 74 73 20 6f 6e 6c 79 20 61 6e 64 20  ements only and 
187e0 6e 6f 74 20 66 6f 72 20 49 4e 53 45 52 54 20 73  not for INSERT s
187f0 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
18800 0a 74 72 69 67 67 65 72 73 2e 0a 3c 70 3e 0a 0a  .triggers..<p>..
18810 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
18820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18830 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18860 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 4f 4e  ####.Section {ON
18870 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
18880 7d 20 63 6f 6e 66 6c 69 63 74 20 7b 7b 63 6f 6e  } conflict {{con
18890 66 6c 69 63 74 20 63 6c 61 75 73 65 7d 20 7b 4f  flict clause} {O
188a0 4e 20 43 4f 4e 46 4c 49 43 54 7d 7d 0a 0a 42 75  N CONFLICT}}..Bu
188b0 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6e 66  bbleDiagram conf
188c0 6c 69 63 74 2d 63 6c 61 75 73 65 0a 3c 2f 74 63  lict-clause.</tc
188d0 6c 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f  l>..<p>The ON CO
188e0 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 73  NFLICT clause is
188f0 20 6e 6f 74 20 61 20 73 65 70 61 72 61 74 65 20   not a separate 
18900 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 49 74  SQL command.  It
18910 20 69 73 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64 61   is a.non-standa
18920 72 64 20 63 6c 61 75 73 65 20 74 68 61 74 20 63  rd clause that c
18930 61 6e 20 61 70 70 65 61 72 20 69 6e 20 6d 61 6e  an appear in man
18940 79 20 6f 74 68 65 72 20 53 51 4c 20 63 6f 6d 6d  y other SQL comm
18950 61 6e 64 73 2e 0a 49 74 20 69 73 20 67 69 76 65  ands..It is give
18960 6e 20 69 74 73 20 6f 77 6e 20 73 65 63 74 69 6f  n its own sectio
18970 6e 20 69 6e 20 74 68 69 73 20 64 6f 63 75 6d 65  n in this docume
18980 6e 74 20 62 65 63 61 75 73 65 20 69 74 20 69 73  nt because it is
18990 20 6e 6f 74 0a 70 61 72 74 20 6f 66 20 73 74 61   not.part of sta
189a0 6e 64 61 72 64 20 53 51 4c 20 61 6e 64 20 74 68  ndard SQL and th
189b0 65 72 65 66 6f 72 65 20 6d 69 67 68 74 20 6e 6f  erefore might no
189c0 74 20 62 65 20 66 61 6d 69 6c 69 61 72 2e 3c 2f  t be familiar.</
189d0 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 79 6e 74  p>..<p>^The synt
189e0 61 78 20 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f  ax for the ON CO
189f0 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 73  NFLICT clause is
18a00 20 61 73 20 73 68 6f 77 6e 20 61 62 6f 76 65 20   as shown above 
18a10 66 6f 72 0a 74 68 65 20 43 52 45 41 54 45 20 54  for.the CREATE T
18a20 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e  ABLE command.  ^
18a30 46 6f 72 20 74 68 65 20 49 4e 53 45 52 54 20 61  For the INSERT a
18a40 6e 64 0a 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e  nd.UPDATE comman
18a50 64 73 2c 20 74 68 65 20 6b 65 79 77 6f 72 64 73  ds, the keywords
18a60 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 22 20 61   "ON CONFLICT" a
18a70 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 20 22  re replaced by "
18a80 4f 52 22 20 73 6f 20 74 68 61 74 0a 74 68 65 20  OR" so that.the 
18a90 73 79 6e 74 61 78 20 72 65 61 64 73 20 6d 6f 72  syntax reads mor
18aa0 65 20 6e 61 74 75 72 61 6c 6c 79 2e 20 20 46 6f  e naturally.  Fo
18ab0 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 73 74 65  r example, inste
18ac0 61 64 20 6f 66 0a 22 49 4e 53 45 52 54 20 4f 4e  ad of."INSERT ON
18ad0 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45   CONFLICT IGNORE
18ae0 22 20 77 65 20 68 61 76 65 20 22 49 4e 53 45 52  " we have "INSER
18af0 54 20 4f 52 20 49 47 4e 4f 52 45 22 2e 0a 54 68  T OR IGNORE"..Th
18b00 65 20 6b 65 79 77 6f 72 64 73 20 63 68 61 6e 67  e keywords chang
18b10 65 20 62 75 74 20 74 68 65 20 6d 65 61 6e 69 6e  e but the meanin
18b20 67 20 6f 66 20 74 68 65 20 63 6c 61 75 73 65 20  g of the clause 
18b30 69 73 20 74 68 65 20 73 61 6d 65 0a 65 69 74 68  is the same.eith
18b40 65 72 20 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e  er way.</p>..<p>
18b50 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  The ON CONFLICT 
18b60 63 6c 61 75 73 65 20 61 70 70 6c 69 65 73 20 74  clause applies t
18b70 6f 20 55 4e 49 51 55 45 2c 20 4e 4f 54 20 4e 55  o UNIQUE, NOT NU
18b80 4c 4c 2c 20 61 6e 64 20 43 48 45 43 4b 0a 63 6f  LL, and CHECK.co
18b90 6e 73 74 72 61 69 6e 74 73 20 28 61 6e 64 20 74  nstraints (and t
18ba0 6f 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f  o PRIMARY KEY co
18bb0 6e 73 74 72 61 69 6e 74 73 20 77 68 69 63 68 20  nstraints which 
18bc0 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  for the purposes
18bd0 20 0a 6f 66 20 74 68 69 73 20 73 65 63 74 69 6f   .of this sectio
18be0 6e 20 61 72 65 20 74 68 65 20 73 61 6d 65 20 74  n are the same t
18bf0 68 69 6e 67 20 61 73 20 55 4e 49 51 55 45 20 63  hing as UNIQUE c
18c00 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 54 68 65  onstraints)..The
18c10 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67   ON CONFLICT alg
18c20 6f 72 69 74 68 6d 20 64 6f 65 73 20 6e 6f 74 0a  orithm does not.
18c30 61 70 70 6c 79 20 74 6f 20 5b 46 4f 52 45 49 47  apply to [FOREIG
18c40 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
18c50 73 5d 2e 0a 54 68 65 72 65 20 61 72 65 20 66 69  s]..There are fi
18c60 76 65 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  ve conflict reso
18c70 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
18c80 20 63 68 6f 69 63 65 73 3a 0a 52 4f 4c 4c 42 41   choices:.ROLLBA
18c90 43 4b 2c 20 41 42 4f 52 54 2c 20 46 41 49 4c 2c  CK, ABORT, FAIL,
18ca0 20 49 47 4e 4f 52 45 2c 20 61 6e 64 20 52 45 50   IGNORE, and REP
18cb0 4c 41 43 45 2e 0a 5e 54 68 65 20 64 65 66 61 75  LACE..^The defau
18cc0 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  lt conflict reso
18cd0 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
18ce0 20 69 73 20 41 42 4f 52 54 2e 20 20 54 68 69 73   is ABORT.  This
18cf0 0a 69 73 20 77 68 61 74 20 74 68 65 79 20 6d 65  .is what they me
18d00 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c 64  an:</p>..<dl>.<d
18d10 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43 4b 3c 2f 62  t><b>ROLLBACK</b
18d20 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e  ></dt>.<dd><p> ^
18d30 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62  When an applicab
18d40 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  le constraint vi
18d50 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
18d60 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 72 65 73  the ROLLBACK.res
18d70 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
18d80 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63 75 72  m aborts the cur
18d90 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65  rent SQL stateme
18da0 6e 74 20 77 69 74 68 0a 61 6e 20 53 51 4c 49 54  nt with.an SQLIT
18db0 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72 72  E_CONSTRAINT err
18dc0 6f 72 20 61 6e 64 20 72 6f 6c 6c 73 20 62 61 63  or and rolls bac
18dd0 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  k the current tr
18de0 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 49 66 20 6e  ansaction..^If n
18df0 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
18e00 0a 61 63 74 69 76 65 20 28 6f 74 68 65 72 20 74  .active (other t
18e10 68 61 6e 20 74 68 65 20 69 6d 70 6c 69 65 64 20  han the implied 
18e20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 61 74  transaction that
18e30 20 69 73 20 63 72 65 61 74 65 64 20 6f 6e 20 65   is created on e
18e40 76 65 72 79 0a 63 6f 6d 6d 61 6e 64 29 20 74 68  very.command) th
18e50 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  en the ROLLBACK 
18e60 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
18e70 69 74 68 6d 20 77 6f 72 6b 73 20 74 68 65 20 73  ithm works the s
18e80 61 6d 65 20 61 73 20 74 68 65 0a 41 42 4f 52 54  ame as the.ABORT
18e90 20 61 6c 67 6f 72 69 74 68 6d 2e 3c 2f 70 3e 3c   algorithm.</p><
18ea0 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 41 42 4f  /dd>..<dt><b>ABO
18eb0 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  RT</b></dt>.<dd>
18ec0 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70  <p> ^When an app
18ed0 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69  licable constrai
18ee0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
18ef0 75 72 73 2c 20 74 68 65 20 41 42 4f 52 54 0a 72  urs, the ABORT.r
18f00 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
18f10 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63  thm aborts the c
18f20 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65  urrent SQL state
18f30 6d 65 6e 74 0a 77 69 74 68 20 61 6e 20 53 51 4c  ment.with an SQL
18f40 49 54 45 5f 43 4f 4e 53 54 52 41 49 54 20 65 72  ITE_CONSTRAIT er
18f50 72 6f 72 20 61 6e 64 20 62 61 63 6b 73 20 6f 75  ror and backs ou
18f60 74 20 61 6e 79 20 63 68 61 6e 67 65 73 0a 6d 61  t any changes.ma
18f70 64 65 20 62 79 20 74 68 65 20 63 75 72 72 65 6e  de by the curren
18f80 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 3b  t SQL statement;
18f90 20 62 75 74 20 63 68 61 6e 67 65 73 20 63 61 75   but changes cau
18fa0 73 65 64 0a 62 79 20 70 72 69 6f 72 20 53 51 4c  sed.by prior SQL
18fb0 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
18fc0 69 6e 20 74 68 65 20 73 61 6d 65 20 74 72 61 6e  in the same tran
18fd0 73 61 63 74 69 6f 6e 20 61 72 65 20 70 72 65 73  saction are pres
18fe0 65 72 76 65 64 20 61 6e 64 20 74 68 65 0a 74 72  erved and the.tr
18ff0 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69 6e  ansaction remain
19000 73 20 61 63 74 69 76 65 2e 0a 54 68 69 73 20 69  s active..This i
19010 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 62 65  s the default be
19020 68 61 76 69 6f 72 20 61 6e 64 20 74 68 65 20 62  havior and the b
19030 65 68 61 76 69 6f 72 20 70 72 6f 73 63 72 69 62  ehavior proscrib
19040 65 64 20 74 68 65 20 53 51 4c 0a 73 74 61 6e 64  ed the SQL.stand
19050 61 72 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c  ard.</p></dd>..<
19060 64 74 3e 3c 62 3e 46 41 49 4c 3c 2f 62 3e 3c 2f  dt><b>FAIL</b></
19070 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65  dt>.<dd><p> ^Whe
19080 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20  n an applicable 
19090 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
190a0 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65  tion occurs, the
190b0 20 46 41 49 4c 0a 72 65 73 6f 6c 75 74 69 6f 6e   FAIL.resolution
190c0 20 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72 74   algorithm abort
190d0 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 53 51  s the current SQ
190e0 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68  L statement with
190f0 20 61 6e 0a 53 51 4c 49 54 45 5f 43 4f 4e 53 54   an.SQLITE_CONST
19100 52 41 49 4e 54 20 65 72 72 6f 72 2e 20 20 5e 42  RAINT error.  ^B
19110 75 74 20 74 68 65 20 46 41 49 4c 20 72 65 73 6f  ut the FAIL reso
19120 6c 75 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0a  lution does not.
19130 62 61 63 6b 20 6f 75 74 20 70 72 69 6f 72 20 63  back out prior c
19140 68 61 6e 67 65 73 20 6f 66 20 74 68 65 20 53 51  hanges of the SQ
19150 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  L statement that
19160 20 66 61 69 6c 65 64 20 6e 6f 72 20 64 6f 65 73   failed nor does
19170 0a 69 74 20 65 6e 64 20 74 68 65 20 74 72 61 6e  .it end the tran
19180 73 61 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78  saction..^For ex
19190 61 6d 70 6c 65 2c 20 69 66 20 61 6e 20 55 50 44  ample, if an UPD
191a0 41 54 45 0a 73 74 61 74 65 6d 65 6e 74 20 65 6e  ATE.statement en
191b0 63 6f 75 6e 74 65 72 65 64 20 61 20 63 6f 6e 73  countered a cons
191c0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
191d0 20 6f 6e 20 74 68 65 20 31 30 30 74 68 20 72 6f   on the 100th ro
191e0 77 20 74 68 61 74 0a 69 74 20 61 74 74 65 6d 70  w that.it attemp
191f0 74 73 20 74 6f 20 75 70 64 61 74 65 2c 20 74 68  ts to update, th
19200 65 6e 20 74 68 65 20 66 69 72 73 74 20 39 39 20  en the first 99 
19210 72 6f 77 20 63 68 61 6e 67 65 73 20 61 72 65 20  row changes are 
19220 70 72 65 73 65 72 76 65 64 0a 62 75 74 20 63 68  preserved.but ch
19230 61 6e 67 65 73 20 74 6f 20 72 6f 77 73 20 31 30  anges to rows 10
19240 30 20 61 6e 64 20 62 65 79 6f 6e 64 20 6e 65 76  0 and beyond nev
19250 65 72 20 6f 63 63 75 72 2e 3c 2f 70 3e 3c 2f 64  er occur.</p></d
19260 64 3e 0a 0a 28 3c 64 74 3e 3c 62 3e 49 47 4e 4f  d>..(<dt><b>IGNO
19270 52 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  RE</b></dt>.<dd>
19280 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70  <p> ^When an app
19290 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69  licable constrai
192a0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
192b0 75 72 73 2c 20 0a 74 68 65 20 49 47 4e 4f 52 45  urs, .the IGNORE
192c0 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
192d0 72 69 74 68 6d 20 73 6b 69 70 73 20 74 68 65 20  rithm skips the 
192e0 6f 6e 65 20 72 6f 77 20 74 68 61 74 20 63 6f 6e  one row that con
192f0 74 61 69 6e 73 0a 74 68 65 20 63 6f 6e 73 74 72  tains.the constr
19300 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61  aint violation a
19310 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20 70 72 6f  nd continues pro
19320 63 65 73 73 69 6e 67 20 73 75 62 73 65 71 75 65  cessing subseque
19330 6e 74 20 72 6f 77 73 0a 6f 66 20 74 68 65 20 53  nt rows.of the S
19340 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61 73 20  QL statement as 
19350 69 66 20 6e 6f 74 68 69 6e 67 20 77 65 6e 74 20  if nothing went 
19360 77 72 6f 6e 67 2e 0a 4f 74 68 65 72 20 72 6f 77  wrong..Other row
19370 73 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74  s before and aft
19380 65 72 20 74 68 65 20 72 6f 77 20 74 68 61 74 0a  er the row that.
19390 63 6f 6e 74 61 69 6e 65 64 20 74 68 65 20 63 6f  contained the co
193a0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
193b0 6f 6e 20 61 72 65 20 69 6e 73 65 72 74 65 64 20  on are inserted 
193c0 6f 72 20 75 70 64 61 74 65 64 0a 6e 6f 72 6d 61  or updated.norma
193d0 6c 6c 79 2e 20 5e 4e 6f 20 65 72 72 6f 72 20 69  lly. ^No error i
193e0 73 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20  s returned when 
193f0 74 68 65 20 49 47 4e 4f 52 45 20 63 6f 6e 66 6c  the IGNORE confl
19400 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 61  ict resolution.a
19410 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64  lgorithm is used
19420 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e  .</p></dd>..<dt>
19430 3c 62 3e 52 45 50 4c 41 43 45 3c 2f 62 3e 3c 2f  <b>REPLACE</b></
19440 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65  dt>.<dd><p> ^Whe
19450 6e 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  n a UNIQUE const
19460 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
19470 6f 63 63 75 72 73 2c 20 74 68 65 20 52 45 50 4c  occurs, the REPL
19480 41 43 45 20 61 6c 67 6f 72 69 74 68 6d 0a 64 65  ACE algorithm.de
19490 6c 65 74 65 73 20 70 72 65 2d 65 78 69 73 74 69  letes pre-existi
194a0 6e 67 20 72 6f 77 73 20 74 68 61 74 20 61 72 65  ng rows that are
194b0 20 63 61 75 73 69 6e 67 20 74 68 65 20 63 6f 6e   causing the con
194c0 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
194d0 6e 0a 70 72 69 6f 72 20 74 6f 20 69 6e 73 65 72  n.prior to inser
194e0 74 69 6e 67 20 6f 72 20 75 70 64 61 74 69 6e 67  ting or updating
194f0 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
19500 20 61 6e 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64   and the command
19510 20 63 6f 6e 74 69 6e 75 65 73 20 0a 65 78 65 63   continues .exec
19520 75 74 69 6e 67 20 6e 6f 72 6d 61 6c 6c 79 2e 0a  uting normally..
19530 5e 49 66 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63  ^If a NOT NULL c
19540 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
19550 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20  ion occurs, the 
19560 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74  REPLACE conflict
19570 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 72 65 70 6c  .resolution repl
19580 61 63 65 73 20 74 68 65 20 4e 55 4c 4c 20 76 61  aces the NULL va
19590 6c 75 65 20 77 69 74 68 0a 68 65 20 64 65 66 61  lue with.he defa
195a0 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ult value for th
195b0 61 74 20 63 6f 6c 75 6d 6e 2c 20 6f 72 20 69 66  at column, or if
195c0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 61 73 20   the column has 
195d0 6e 6f 20 64 65 66 61 75 6c 74 0a 76 61 6c 75 65  no default.value
195e0 2c 20 74 68 65 6e 20 74 68 65 20 41 42 4f 52 54  , then the ABORT
195f0 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73   algorithm is us
19600 65 64 2e 0a 5e 49 66 20 61 20 43 48 45 43 4b 20  ed..^If a CHECK 
19610 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
19620 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65  tion occurs, the
19630 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63   REPLACE conflic
19640 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67  t resolution.alg
19650 6f 72 69 74 68 6d 20 61 6c 77 61 79 73 20 77 6f  orithm always wo
19660 72 6b 73 20 6c 69 6b 65 20 41 42 4f 52 54 2e 3c  rks like ABORT.<
19670 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68  /p>..<p>^When th
19680 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69  e REPLACE confli
19690 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73 74  ct resolution st
196a0 72 61 74 65 67 79 20 64 65 6c 65 74 65 73 20 72  rategy deletes r
196b0 6f 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ows in order to.
196c0 73 61 74 69 73 66 79 20 61 20 63 6f 6e 73 74 72  satisfy a constr
196d0 61 69 6e 74 2c 20 5b 43 52 45 41 54 45 20 54 52  aint, [CREATE TR
196e0 49 47 47 45 52 20 7c 20 64 65 6c 65 74 65 20 74  IGGER | delete t
196f0 72 69 67 67 65 72 73 5d 20 66 69 72 65 20 69 66  riggers] fire if
19700 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 5b 72 65   and only if.[re
19710 63 75 72 73 69 76 65 5f 74 72 69 67 67 65 72 73  cursive_triggers
19720 20 70 72 61 67 6d 61 20 7c 20 72 65 63 75 72 73   pragma | recurs
19730 69 76 65 20 74 72 69 67 67 65 72 73 5d 20 61 72  ive triggers] ar
19740 65 20 65 6e 61 62 6c 65 64 2e 3c 2f 70 3e 0a 0a  e enabled.</p>..
19750 3c 70 3e 5e 54 68 65 20 5b 73 71 6c 69 74 65 33  <p>^The [sqlite3
19760 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 20 7c 20 75  _update_hook | u
19770 70 64 61 74 65 20 68 6f 6f 6b 5d 20 69 73 20 6e  pdate hook] is n
19780 6f 74 20 69 6e 76 6f 6b 65 64 20 66 6f 72 20 72  ot invoked for r
19790 6f 77 73 20 74 68 61 74 0a 61 72 65 20 64 65 6c  ows that.are del
197a0 65 74 65 64 20 62 79 20 74 68 65 20 52 45 50 4c  eted by the REPL
197b0 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ACE conflict res
197c0 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74 65 67 79  olution strategy
197d0 2e 20 20 5e 4e 6f 72 20 64 6f 65 73 0a 52 45 50  .  ^Nor does.REP
197e0 4c 41 43 45 20 69 6e 63 72 65 6d 65 6e 74 20 74  LACE increment t
197f0 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e  he [sqlite3_chan
19800 67 65 73 20 7c 20 63 68 61 6e 67 65 20 63 6f 75  ges | change cou
19810 6e 74 65 72 5d 2e 0a 54 68 65 20 65 78 63 65 70  nter]..The excep
19820 74 69 6f 6e 61 6c 20 62 65 68 61 76 69 6f 72 73  tional behaviors
19830 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68 69 73   defined in this
19840 20 70 61 72 61 67 72 61 70 68 20 6d 69 67 68 74   paragraph might
19850 20 63 68 61 6e 67 65 20 0a 69 6e 20 61 20 66 75   change .in a fu
19860 74 75 72 65 20 72 65 6c 65 61 73 65 2e 3c 2f 70  ture release.</p
19870 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  >.</dl>..<p>^The
19880 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69   algorithm speci
19890 66 69 65 64 20 69 6e 20 74 68 65 20 4f 52 20 63  fied in the OR c
198a0 6c 61 75 73 65 20 6f 66 20 61 20 49 4e 53 45 52  lause of a INSER
198b0 54 20 6f 72 20 55 50 44 41 54 45 0a 6f 76 65 72  T or UPDATE.over
198c0 72 69 64 65 73 20 61 6e 79 20 61 6c 67 6f 72 69  rides any algori
198d0 74 68 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e  thm specified in
198e0 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 2e   a CREATE TABLE.
198f0 0a 5e 49 66 20 6e 6f 20 61 6c 67 6f 72 69 74 68  .^If no algorith
19900 6d 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61  m is specified a
19910 6e 79 77 68 65 72 65 2c 20 74 68 65 20 41 42 4f  nywhere, the ABO
19920 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  RT algorithm is 
19930 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  used.</p>..<tcl>
19940 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
19950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19970 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19980 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
19990 53 65 63 74 69 6f 6e 20 52 45 49 4e 44 45 58 20  Section REINDEX 
199a0 72 65 69 6e 64 65 78 20 52 45 49 4e 44 45 58 0a  reindex REINDEX.
199b0 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72  .BubbleDiagram r
199c0 65 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a 3c 2f  eindex-stmt 1.</
199d0 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45  tcl>..<p>^The RE
199e0 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20 69 73  INDEX command is
199f0 20 75 73 65 64 20 74 6f 20 64 65 6c 65 74 65 20   used to delete 
19a00 61 6e 64 20 72 65 63 72 65 61 74 65 20 69 6e 64  and recreate ind
19a10 69 63 65 73 20 66 72 6f 6d 20 73 63 72 61 74 63  ices from scratc
19a20 68 2e 0a 54 68 69 73 20 69 73 20 75 73 65 66 75  h..This is usefu
19a30 6c 20 77 68 65 6e 20 74 68 65 20 64 65 66 69 6e  l when the defin
19a40 69 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 6c 61  ition of a colla
19a50 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 68 61  tion sequence ha
19a60 73 20 63 68 61 6e 67 65 64 2e 0a 3c 2f 70 3e 0a  s changed..</p>.
19a70 0a 3c 70 3e 5e 49 6e 20 74 68 65 20 66 69 72 73  .<p>^In the firs
19a80 74 20 66 6f 72 6d 2c 20 61 6c 6c 20 69 6e 64 69  t form, all indi
19a90 63 65 73 20 69 6e 20 61 6c 6c 20 61 74 74 61 63  ces in all attac
19aa0 68 65 64 20 64 61 74 61 62 61 73 65 73 20 74 68  hed databases th
19ab0 61 74 20 75 73 65 20 74 68 65 0a 6e 61 6d 65 64  at use the.named
19ac0 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
19ad0 6e 63 65 20 61 72 65 20 72 65 63 72 65 61 74 65  nce are recreate
19ae0 64 2e 20 5e 28 49 6e 20 74 68 65 20 73 65 63 6f  d. ^(In the seco
19af0 6e 64 20 66 6f 72 6d 2c 20 69 66 20 0a 3c 69 3e  nd form, if .<i>
19b00 26 23 39 31 3b 64 61 74 61 62 61 73 65 2d 6e 61  &#91;database-na
19b10 6d 65 2e 26 23 39 33 3b 74 61 62 6c 65 2f 69 6e  me.&#93;table/in
19b20 64 65 78 2d 6e 61 6d 65 3c 2f 69 3e 20 69 64 65  dex-name</i> ide
19b30 6e 74 69 66 69 65 73 20 61 20 74 61 62 6c 65 2c  ntifies a table,
19b40 0a 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69 63 65  .then all indice
19b50 73 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s.associated wit
19b60 68 20 74 68 65 20 74 61 62 6c 65 20 61 72 65 20  h the table are 
19b70 72 65 62 75 69 6c 74 2e 29 5e 20 5e 49 66 20 61  rebuilt.)^ ^If a
19b80 6e 20 69 6e 64 65 78 20 69 73 20 69 64 65 6e 74  n index is ident
19b90 69 66 69 65 64 2c 20 74 68 65 6e 20 6f 6e 6c 79  ified, then only
19ba0 0a 74 68 69 73 20 73 70 65 63 69 66 69 63 20 69  .this specific i
19bb0 6e 64 65 78 20 69 73 20 64 65 6c 65 74 65 64 20  ndex is deleted 
19bc0 61 6e 64 20 72 65 63 72 65 61 74 65 64 2e 0a 3c  and recreated..<
19bd0 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 6e 6f 20 3c  /p>..<p>^If no <
19be0 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c  i>database-name<
19bf0 2f 69 3e 20 69 73 20 73 70 65 63 69 66 69 65 64  /i> is specified
19c00 20 61 6e 64 20 74 68 65 72 65 20 65 78 69 73 74   and there exist
19c10 73 20 62 6f 74 68 20 61 20 74 61 62 6c 65 20 6f  s both a table o
19c20 72 0a 69 6e 64 65 78 20 61 6e 64 20 61 20 63 6f  r.index and a co
19c30 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
19c40 20 6f 66 20 74 68 65 20 73 70 65 63 69 66 69 65   of the specifie
19c50 64 20 6e 61 6d 65 2c 20 74 68 65 6e 20 69 6e 64  d name, then ind
19c60 69 63 65 73 20 61 73 73 6f 63 69 61 74 65 64 0a  ices associated.
19c70 77 69 74 68 20 74 68 65 20 63 6f 6c 6c 61 74 69  with the collati
19c80 6f 6e 20 73 65 71 75 65 6e 63 65 20 6f 6e 6c 79  on sequence only
19c90 20 61 72 65 20 72 65 63 6f 6e 73 74 72 75 63 74   are reconstruct
19ca0 65 64 2e 20 54 68 69 73 20 61 6d 62 69 67 75 69  ed. This ambigui
19cb0 74 79 20 6d 61 79 20 62 65 0a 64 69 73 70 65 6c  ty may be.dispel
19cc0 6c 65 64 20 62 79 20 61 6c 77 61 79 73 20 73 70  led by always sp
19cd0 65 63 69 66 79 69 6e 67 20 61 20 3c 69 3e 64 61  ecifying a <i>da
19ce0 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20  tabase-name</i> 
19cf0 77 68 65 6e 20 72 65 69 6e 64 65 78 69 6e 67 20  when reindexing 
19d00 61 0a 73 70 65 63 69 66 69 63 20 74 61 62 6c 65  a.specific table
19d10 20 6f 72 20 69 6e 64 65 78 2e 0a 0a 3c 74 63 6c   or index...<tcl
19d20 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
19d30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19d40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19d50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19d60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19d70 23 0a 53 65 63 74 69 6f 6e 20 52 45 50 4c 41 43  #.Section REPLAC
19d80 45 20 72 65 70 6c 61 63 65 20 52 45 50 4c 41 43  E replace REPLAC
19d90 45 0a 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  E..</tcl>..<p>^T
19da0 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6d 6d 61  he REPLACE comma
19db0 6e 64 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66  nd is an alias f
19dc0 6f 72 20 74 68 65 20 22 5b 4f 4e 20 43 4f 4e 46  or the "[ON CONF
19dd0 4c 49 43 54 20 7c 20 49 4e 53 45 52 54 20 4f 52  LICT | INSERT OR
19de0 20 52 45 50 4c 41 43 45 5d 22 0a 76 61 72 69 61   REPLACE]".varia
19df0 6e 74 20 6f 66 20 74 68 65 20 5b 49 4e 53 45 52  nt of the [INSER
19e00 54 5d 20 63 6f 6d 6d 61 6e 64 2e 20 20 0a 54 68  T] command.  .Th
19e10 69 73 20 61 6c 69 61 73 20 69 73 20 70 72 6f 76  is alias is prov
19e20 69 64 65 64 20 66 6f 72 20 63 6f 6d 70 61 74 69  ided for compati
19e30 62 69 6c 69 74 79 20 6f 74 68 65 72 20 53 51 4c  bility other SQL
19e40 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
19e50 73 2e 20 20 53 65 65 20 74 68 65 20 0a 5b 49 4e  s.  See the .[IN
19e60 53 45 52 54 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f  SERT] command do
19e70 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20  cumentation for 
19e80 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
19e90 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 20 20 0a 0a 3c  mation.</p>  ..<
19ea0 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
19eb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19ec0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19ed0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19ee0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19ef0 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 53 45 4c  ####.Section SEL
19f00 45 43 54 20 73 65 6c 65 63 74 20 7b 53 45 4c 45  ECT select {SELE
19f10 43 54 20 71 75 65 72 79 7d 0a 0a 42 75 62 62 6c  CT query}..Bubbl
19f20 65 44 69 61 67 72 61 6d 20 73 65 6c 65 63 74 2d  eDiagram select-
19f30 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61  stmt 1.BubbleDia
19f40 67 72 61 6d 20 73 65 6c 65 63 74 2d 63 6f 72 65  gram select-core
19f50 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72  .BubbleDiagram r
19f60 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 0a 42 75 62  esult-column.Bub
19f70 62 6c 65 44 69 61 67 72 61 6d 20 6a 6f 69 6e 2d  bleDiagram join-
19f80 73 6f 75 72 63 65 0a 42 75 62 62 6c 65 44 69 61  source.BubbleDia
19f90 67 72 61 6d 20 73 69 6e 67 6c 65 2d 73 6f 75 72  gram single-sour
19fa0 63 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  ce.BubbleDiagram
19fb0 20 6a 6f 69 6e 2d 6f 70 0a 42 75 62 62 6c 65 44   join-op.BubbleD
19fc0 69 61 67 72 61 6d 20 6a 6f 69 6e 2d 63 6f 6e 73  iagram join-cons
19fd0 74 72 61 69 6e 74 0a 42 75 62 62 6c 65 44 69 61  traint.BubbleDia
19fe0 67 72 61 6d 20 6f 72 64 65 72 69 6e 67 2d 74 65  gram ordering-te
19ff0 72 6d 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  rm.BubbleDiagram
1a000 20 63 6f 6d 70 6f 75 6e 64 2d 6f 70 65 72 61 74   compound-operat
1a010 6f 72 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68  or.</tcl>..<p>Th
1a020 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
1a030 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 71 75  nt is used to qu
1a040 65 72 79 20 74 68 65 20 64 61 74 61 62 61 73 65  ery the database
1a050 2e 20 20 5e 54 68 65 0a 72 65 73 75 6c 74 20 6f  .  ^The.result o
1a060 66 20 61 20 53 45 4c 45 43 54 20 69 73 20 7a 65  f a SELECT is ze
1a070 72 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20  ro or more rows 
1a080 6f 66 20 64 61 74 61 20 77 68 65 72 65 20 65 61  of data where ea
1a090 63 68 20 72 6f 77 0a 68 61 73 20 61 20 66 69 78  ch row.has a fix
1a0a0 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  ed number of col
1a0b0 75 6d 6e 73 2e 20 20 5e 54 68 65 20 6e 75 6d 62  umns.  ^The numb
1a0c0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1a0d0 20 74 68 65 0a 72 65 73 75 6c 74 20 69 73 20 73   the.result is s
1a0e0 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20  pecified by the 
1a0f0 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20  expression list 
1a100 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 0a 53  in between the.S
1a110 45 4c 45 43 54 20 61 6e 64 20 46 52 4f 4d 20 6b  ELECT and FROM k
1a120 65 79 77 6f 72 64 73 2e 20 20 5e 41 6e 79 20 61  eywords.  ^Any a
1a130 72 62 69 74 72 61 72 79 20 65 78 70 72 65 73 73  rbitrary express
1a140 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 0a  ion can be used.
1a150 61 73 20 61 20 72 65 73 75 6c 74 2e 20 20 5e 49  as a result.  ^I
1a160 66 20 61 20 72 65 73 75 6c 74 20 65 78 70 72 65  f a result expre
1a170 73 73 69 6f 6e 20 69 73 20 7d 0a 68 64 5f 70 75  ssion is }.hd_pu
1a180 74 73 20 22 5b 4f 70 65 72 61 74 6f 72 20 2a 5d  ts "[Operator *]
1a190 20 74 68 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e   then all column
1a1a0 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20  s of all tables 
1a1b0 61 72 65 20 73 75 62 73 74 69 74 75 74 65 64 5c  are substituted\
1a1c0 6e 22 0a 68 64 5f 70 75 74 73 20 22 66 6f 72 20  n".hd_puts "for 
1a1d0 74 68 61 74 20 6f 6e 65 20 65 78 70 72 65 73 73  that one express
1a1e0 69 6f 6e 2e 20 20 5e 28 49 66 20 74 68 65 20 65  ion.  ^(If the e
1a1f0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65  xpression is the
1a200 20 6e 61 6d 65 20 6f 66 5c 6e 22 0a 68 64 5f 70   name of\n".hd_p
1a210 75 74 73 20 22 61 20 74 61 62 6c 65 20 66 6f 6c  uts "a table fol
1a220 6c 6f 77 65 64 20 62 79 20 5b 4f 70 65 72 61 74  lowed by [Operat
1a230 6f 72 20 2e 2a 5d 20 74 68 65 6e 20 74 68 65 20  or .*] then the 
1a240 72 65 73 75 6c 74 20 69 73 20 61 6c 6c 20 63 6f  result is all co
1a250 6c 75 6d 6e 73 5c 6e 22 0a 68 64 5f 70 75 74 73  lumns\n".hd_puts
1a260 20 7b 69 6e 20 74 68 61 74 20 6f 6e 65 20 74 61   {in that one ta
1a270 62 6c 65 2e 3c 2f 70 3e 29 5e 0a 0a 3c 70 3e 5e  ble.</p>)^..<p>^
1a280 54 68 65 20 44 49 53 54 49 4e 43 54 20 6b 65 79  The DISTINCT key
1a290 77 6f 72 64 20 63 61 75 73 65 73 20 61 20 73 75  word causes a su
1a2a0 62 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72  bset of result r
1a2b0 6f 77 73 20 74 6f 20 62 65 20 72 65 74 75 72 6e  ows to be return
1a2c0 65 64 2c 20 0a 69 6e 20 77 68 69 63 68 20 65 61  ed, .in which ea
1a2d0 63 68 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73  ch result row is
1a2e0 20 64 69 66 66 65 72 65 6e 74 2e 20 20 5e 4e 55   different.  ^NU
1a2f0 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f  LL values are no
1a300 74 20 74 72 65 61 74 65 64 20 61 73 20 0a 64 69  t treated as .di
1a310 73 74 69 6e 63 74 20 66 72 6f 6d 20 65 61 63 68  stinct from each
1a320 20 6f 74 68 65 72 2e 20 20 5e 54 68 65 20 64 65   other.  ^The de
1a330 66 61 75 6c 74 20 62 65 68 61 76 69 6f 72 20 69  fault behavior i
1a340 73 20 74 68 61 74 20 61 6c 6c 20 72 65 73 75 6c  s that all resul
1a350 74 20 72 6f 77 73 20 0a 62 65 20 72 65 74 75 72  t rows .be retur
1a360 6e 65 64 2c 20 77 68 69 63 68 20 63 61 6e 20 62  ned, which can b
1a370 65 20 6d 61 64 65 20 65 78 70 6c 69 63 69 74 20  e made explicit 
1a380 77 69 74 68 20 74 68 65 20 6b 65 79 77 6f 72 64  with the keyword
1a390 20 41 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54   ALL.</p>..<p>^T
1a3a0 68 65 20 71 75 65 72 79 20 69 73 20 65 78 65 63  he query is exec
1a3b0 75 74 65 64 20 61 67 61 69 6e 73 74 20 6f 6e 65  uted against one
1a3c0 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20   or more tables 
1a3d0 73 70 65 63 69 66 69 65 64 20 61 66 74 65 72 0a  specified after.
1a3e0 74 68 65 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64  the FROM keyword
1a3f0 2e 20 20 5e 49 66 20 6d 75 6c 74 69 70 6c 65 20  .  ^If multiple 
1a400 74 61 62 6c 65 73 20 6e 61 6d 65 73 20 61 72 65  tables names are
1a410 20 73 65 70 61 72 61 74 65 64 20 62 79 20 63 6f   separated by co
1a420 6d 6d 61 73 2c 0a 74 68 65 6e 20 74 68 65 20 71  mmas,.then the q
1a430 75 65 72 79 20 69 73 20 61 67 61 69 6e 73 74 20  uery is against 
1a440 74 68 65 20 63 72 6f 73 73 20 6a 6f 69 6e 20 6f  the cross join o
1a450 66 20 74 68 65 20 76 61 72 69 6f 75 73 20 74 61  f the various ta
1a460 62 6c 65 73 2e 0a 5e 54 68 65 20 66 75 6c 6c 20  bles..^The full 
1a470 53 51 4c 2d 39 32 20 6a 6f 69 6e 20 73 79 6e 74  SQL-92 join synt
1a480 61 78 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75  ax can also be u
1a490 73 65 64 20 74 6f 20 73 70 65 63 69 66 79 20 6a  sed to specify j
1a4a0 6f 69 6e 73 2e 0a 5e 41 20 73 75 62 2d 71 75 65  oins..^A sub-que
1a4b0 72 79 0a 69 6e 20 70 61 72 65 6e 74 68 65 73 65  ry.in parenthese
1a4c0 73 20 6d 61 79 20 62 65 20 73 75 62 73 74 69 74  s may be substit
1a4d0 75 74 65 64 20 66 6f 72 20 61 6e 79 20 74 61 62  uted for any tab
1a4e0 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65 20 46  le name in the F
1a4f0 52 4f 4d 20 63 6c 61 75 73 65 2e 0a 5e 54 68 65  ROM clause..^The
1a500 20 65 6e 74 69 72 65 20 46 52 4f 4d 20 63 6c 61   entire FROM cla
1a510 75 73 65 20 6d 61 79 20 62 65 20 6f 6d 69 74 74  use may be omitt
1a520 65 64 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73  ed, in which cas
1a530 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  e the result is 
1a540 61 0a 73 69 6e 67 6c 65 20 72 6f 77 20 63 6f 6e  a.single row con
1a550 73 69 73 74 69 6e 67 20 6f 66 20 74 68 65 20 76  sisting of the v
1a560 61 6c 75 65 73 20 6f 66 20 74 68 65 20 65 78 70  alues of the exp
1a570 72 65 73 73 69 6f 6e 20 6c 69 73 74 2e 0a 3c 2f  ression list..</
1a580 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 57 48 45 52  p>..<p>^The WHER
1a590 45 20 63 6c 61 75 73 65 20 63 61 6e 20 62 65 20  E clause can be 
1a5a0 75 73 65 64 20 74 6f 20 6c 69 6d 69 74 20 74 68  used to limit th
1a5b0 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
1a5c0 20 6f 76 65 72 0a 77 68 69 63 68 20 74 68 65 20   over.which the 
1a5d0 71 75 65 72 79 20 6f 70 65 72 61 74 65 73 2e 3c  query operates.<
1a5e0 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 47 52 4f  /p>..<p>^The GRO
1a5f0 55 50 20 42 59 20 63 6c 61 75 73 65 20 63 61 75  UP BY clause cau
1a600 73 65 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ses one or more 
1a610 72 6f 77 73 20 6f 66 20 74 68 65 20 72 65 73 75  rows of the resu
1a620 6c 74 20 74 6f 0a 62 65 20 63 6f 6d 62 69 6e 65  lt to.be combine
1a630 64 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20  d into a single 
1a640 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 2e 20 20  row of output.  
1a650 54 68 69 73 20 69 73 20 65 73 70 65 63 69 61 6c  This is especial
1a660 6c 79 20 75 73 65 66 75 6c 0a 77 68 65 6e 20 74  ly useful.when t
1a670 68 65 20 72 65 73 75 6c 74 20 63 6f 6e 74 61 69  he result contai
1a680 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ns aggregate fun
1a690 63 74 69 6f 6e 73 2e 20 20 5e 54 68 65 20 65 78  ctions.  ^The ex
1a6a0 70 72 65 73 73 69 6f 6e 73 20 69 6e 0a 74 68 65  pressions in.the
1a6b0 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
1a6c0 20 64 6f 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e   do <em>not</em>
1a6d0 20 68 61 76 65 20 74 6f 20 62 65 20 65 78 70 72   have to be expr
1a6e0 65 73 73 69 6f 6e 73 20 74 68 61 74 0a 61 70 70  essions that.app
1a6f0 65 61 72 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ear in the resul
1a700 74 2e 20 20 5e 54 68 65 20 48 41 56 49 4e 47 20  t.  ^The HAVING 
1a710 63 6c 61 75 73 65 20 69 73 20 73 69 6d 69 6c 61  clause is simila
1a720 72 20 74 6f 20 57 48 45 52 45 20 65 78 63 65 70  r to WHERE excep
1a730 74 0a 74 68 61 74 20 48 41 56 49 4e 47 20 61 70  t.that HAVING ap
1a740 70 6c 69 65 73 20 61 66 74 65 72 20 67 72 6f 75  plies after grou
1a750 70 69 6e 67 20 68 61 73 20 6f 63 63 75 72 72 65  ping has occurre
1a760 64 2e 20 20 5e 54 68 65 20 48 41 56 49 4e 47 20  d.  ^The HAVING 
1a770 65 78 70 72 65 73 73 69 6f 6e 0a 6d 61 79 20 72  expression.may r
1a780 65 66 65 72 20 74 6f 20 76 61 6c 75 65 73 2c 20  efer to values, 
1a790 65 76 65 6e 20 61 67 67 72 65 67 61 74 65 20 66  even aggregate f
1a7a0 75 6e 63 74 69 6f 6e 73 2c 20 74 68 61 74 20 61  unctions, that a
1a7b0 72 65 20 6e 6f 74 20 69 6e 20 74 68 65 20 72 65  re not in the re
1a7c0 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  sult.</p>..<p>^T
1a7d0 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1a7e0 73 65 20 63 61 75 73 65 73 20 74 68 65 20 6f 75  se causes the ou
1a7f0 74 70 75 74 20 72 6f 77 73 20 74 6f 20 62 65 20  tput rows to be 
1a800 73 6f 72 74 65 64 2e 20 20 0a 5e 54 68 65 20 61  sorted.  .^The a
1a810 72 67 75 6d 65 6e 74 20 74 6f 20 4f 52 44 45 52  rgument to ORDER
1a820 20 42 59 20 69 73 20 61 20 6c 69 73 74 20 6f 66   BY is a list of
1a830 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61   expressions tha
1a840 74 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68  t are used as th
1a850 65 0a 6b 65 79 20 66 6f 72 20 74 68 65 20 73 6f  e.key for the so
1a860 72 74 2e 20 20 5e 54 68 65 20 65 78 70 72 65 73  rt.  ^The expres
1a870 73 69 6f 6e 73 20 64 6f 20 6e 6f 74 20 68 61 76  sions do not hav
1a880 65 20 74 6f 20 62 65 20 70 61 72 74 20 6f 66 20  e to be part of 
1a890 74 68 65 0a 72 65 73 75 6c 74 20 66 6f 72 20 61  the.result for a
1a8a0 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 2c 20   simple SELECT, 
1a8b0 62 75 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  but in a compoun
1a8c0 64 20 53 45 4c 45 43 54 20 65 61 63 68 20 73 6f  d SELECT each so
1a8d0 72 74 0a 65 78 70 72 65 73 73 69 6f 6e 20 6d 75  rt.expression mu
1a8e0 73 74 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68  st exactly match
1a8f0 20 6f 6e 65 20 6f 66 20 74 68 65 20 72 65 73 75   one of the resu
1a900 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20 20 5e 45 61  lt columns.  ^Ea
1a910 63 68 0a 73 6f 72 74 20 65 78 70 72 65 73 73 69  ch.sort expressi
1a920 6f 6e 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e  on may be option
1a930 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79  ally followed by
1a940 20 61 20 43 4f 4c 4c 41 54 45 20 6b 65 79 77 6f   a COLLATE keywo
1a950 72 64 20 61 6e 64 0a 74 68 65 20 6e 61 6d 65 20  rd and.the name 
1a960 6f 66 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66  of a collating f
1a970 75 6e 63 74 69 6f 6e 20 75 73 65 64 20 66 6f 72  unction used for
1a980 20 6f 72 64 65 72 69 6e 67 20 74 65 78 74 20 61   ordering text a
1a990 6e 64 2f 6f 72 0a 6b 65 79 77 6f 72 64 73 20 41  nd/or.keywords A
1a9a0 53 43 20 6f 72 20 44 45 53 43 20 74 6f 20 73 70  SC or DESC to sp
1a9b0 65 63 69 66 79 20 74 68 65 20 73 6f 72 74 20 6f  ecify the sort o
1a9c0 72 64 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61  rder.</p>..<p>Ea
1a9d0 63 68 20 74 65 72 6d 20 6f 66 20 61 6e 20 4f 52  ch term of an OR
1a9e0 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
1a9f0 6e 20 69 73 20 70 72 6f 63 65 73 73 65 64 20 61  n is processed a
1aa00 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a  s follows:</p>..
1aa10 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20  <ol>.<li><p>^If 
1aa20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70  the ORDER BY exp
1aa30 72 65 73 73 69 6f 6e 20 69 73 20 61 20 63 6f 6e  ression is a con
1aa40 73 74 61 6e 74 20 69 6e 74 65 67 65 72 20 4b 20  stant integer K 
1aa50 74 68 65 6e 20 74 68 65 0a 6f 75 74 70 75 74 20  then the.output 
1aa60 69 73 20 6f 72 64 65 72 65 64 20 62 79 20 74 68  is ordered by th
1aa70 65 20 4b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66  e K-th column of
1aa80 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e   the result set.
1aa90 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 3c 70  </p></li>.<li><p
1aaa0 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20 42  >^If the ORDER B
1aab0 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
1aac0 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 61 6e  an identifier an
1aad0 64 20 6f 6e 65 20 6f 66 20 74 68 65 0a 6f 75 74  d one of the.out
1aae0 70 75 74 20 63 6f 6c 75 6d 6e 73 20 68 61 73 20  put columns has 
1aaf0 61 6e 20 61 6c 69 61 73 20 62 79 20 74 68 65 20  an alias by the 
1ab00 73 61 6d 65 20 6e 61 6d 65 2c 20 74 68 65 6e 20  same name, then 
1ab10 74 68 65 20 6f 75 74 70 75 74 20 69 73 0a 6f 72  the output is.or
1ab20 64 65 72 65 64 20 62 79 20 74 68 65 20 69 64 65  dered by the ide
1ab30 6e 74 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 3c  ntified column.<
1ab40 2f 70 3e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 3c 70 3e  /p></li>.<li><p>
1ab50 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20  ^Otherwise, the 
1ab60 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73  ORDER BY express
1ab70 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64  ion is evaluated
1ab80 20 61 6e 64 20 74 68 65 20 6f 75 74 70 75 74 20   and the output 
1ab90 0a 69 73 20 6f 72 64 65 72 65 64 20 62 79 20 74  .is ordered by t
1aba0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 61 74  he value of that
1abb0 20 65 78 70 72 65 73 73 69 6f 6e 2e 3c 2f 70 3e   expression.</p>
1abc0 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  </li>.</ol>..<p>
1abd0 5e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53  ^In a compound S
1abe0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c  ELECT statement,
1abf0 20 74 68 65 20 74 68 69 72 64 20 4f 52 44 45 52   the third ORDER
1ac00 20 42 59 20 6d 61 74 63 68 69 6e 67 20 72 75 6c   BY matching rul
1ac10 65 0a 72 65 71 75 69 72 65 73 20 74 68 61 74 20  e.requires that 
1ac20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 62  the expression b
1ac30 65 20 69 64 65 6e 74 69 63 61 6c 20 74 6f 20 6f  e identical to o
1ac40 6e 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ne of the column
1ac50 73 20 69 6e 0a 74 68 65 20 72 65 73 75 6c 74 20  s in.the result 
1ac60 73 65 74 2e 20 20 5e 28 54 68 65 20 74 68 72 65  set.  ^(The thre
1ac70 65 20 72 75 6c 65 73 20 61 72 65 20 66 69 72 73  e rules are firs
1ac80 74 20 61 70 70 6c 69 65 64 20 74 6f 20 74 68 65  t applied to the
1ac90 20 6c 65 66 74 2d 6d 6f 73 74 0a 53 45 4c 45 43   left-most.SELEC
1aca0 54 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e  T in the compoun
1acb0 64 2e 20 20 49 66 20 61 20 6d 61 74 63 68 20 69  d.  If a match i
1acc0 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 73 65 61  s found, the sea
1acd0 72 63 68 20 73 74 6f 70 73 2e 20 20 4f 74 68 65  rch stops.  Othe
1ace0 72 77 69 73 65 2c 0a 74 68 65 20 6e 65 78 74 20  rwise,.the next 
1acf0 53 45 4c 45 43 54 20 74 6f 20 74 68 65 20 72 69  SELECT to the ri
1ad00 67 68 74 20 69 73 20 74 72 69 65 64 2e 20 20 54  ght is tried.  T
1ad10 68 69 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e  his continues un
1ad20 74 69 6c 20 61 20 6d 61 74 63 68 0a 69 73 20 66  til a match.is f
1ad30 6f 75 6e 64 2e 29 5e 20 20 5e 45 61 63 68 20 74  ound.)^  ^Each t
1ad40 65 72 6d 20 6f 66 20 74 68 65 20 4f 52 44 45 52  erm of the ORDER
1ad50 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 70 72   BY clause is pr
1ad60 6f 63 65 73 73 65 64 20 73 65 70 61 72 61 74 65  ocessed separate
1ad70 6c 79 20 0a 61 6e 64 20 6d 61 79 20 63 6f 6d 65  ly .and may come
1ad80 20 66 72 6f 6d 20 64 69 66 66 65 72 65 6e 74 20   from different 
1ad90 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1ada0 73 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e  s in the compoun
1adb0 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  d.</p>..<p>^The 
1adc0 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 70 6c 61  LIMIT clause pla
1add0 63 65 73 20 61 6e 20 75 70 70 65 72 20 62 6f 75  ces an upper bou
1ade0 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72  nd on the number
1adf0 20 6f 66 20 72 6f 77 73 0a 72 65 74 75 72 6e 65   of rows.returne
1ae00 64 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e  d in the result.
1ae10 20 20 5e 41 20 6e 65 67 61 74 69 76 65 20 4c 49    ^A negative LI
1ae20 4d 49 54 20 69 6e 64 69 63 61 74 65 73 20 6e 6f  MIT indicates no
1ae30 20 75 70 70 65 72 20 62 6f 75 6e 64 2e 0a 5e 54   upper bound..^T
1ae40 68 65 20 6f 70 74 69 6f 6e 61 6c 20 4f 46 46 53  he optional OFFS
1ae50 45 54 20 66 6f 6c 6c 6f 77 69 6e 67 20 4c 49 4d  ET following LIM
1ae60 49 54 20 73 70 65 63 69 66 69 65 73 20 68 6f 77  IT specifies how
1ae70 20 6d 61 6e 79 0a 72 6f 77 73 20 74 6f 20 73 6b   many.rows to sk
1ae80 69 70 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  ip at the beginn
1ae90 69 6e 67 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ing of the resul
1aea0 74 20 73 65 74 2e 0a 5e 49 6e 20 61 20 63 6f 6d  t set..^In a com
1aeb0 70 6f 75 6e 64 20 71 75 65 72 79 2c 20 74 68 65  pound query, the
1aec0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 6d 61   LIMIT clause ma
1aed0 79 20 6f 6e 6c 79 20 61 70 70 65 61 72 20 6f 6e  y only appear on
1aee0 20 74 68 65 0a 66 69 6e 61 6c 20 53 45 4c 45 43   the.final SELEC
1aef0 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 5e 54 68  T statement..^Th
1af00 65 20 6c 69 6d 69 74 20 69 73 20 61 70 70 6c 69  e limit is appli
1af10 65 64 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65  ed to the entire
1af20 20 71 75 65 72 79 20 6e 6f 74 0a 74 6f 20 74 68   query not.to th
1af30 65 20 69 6e 64 69 76 69 64 75 61 6c 20 53 45 4c  e individual SEL
1af40 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 74 6f  ECT statement to
1af50 20 77 68 69 63 68 20 69 74 20 69 73 20 61 74 74   which it is att
1af60 61 63 68 65 64 2e 0a 5e 4e 6f 74 65 20 74 68 61  ached..^Note tha
1af70 74 20 69 66 20 74 68 65 20 4f 46 46 53 45 54 20  t if the OFFSET 
1af80 6b 65 79 77 6f 72 64 20 69 73 20 75 73 65 64 20  keyword is used 
1af90 69 6e 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61  in the LIMIT cla
1afa0 75 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 6c 69  use, then the.li
1afb0 6d 69 74 20 69 73 20 74 68 65 20 66 69 72 73 74  mit is the first
1afc0 20 6e 75 6d 62 65 72 20 61 6e 64 20 74 68 65 20   number and the 
1afd0 6f 66 66 73 65 74 20 69 73 20 74 68 65 20 73 65  offset is the se
1afe0 63 6f 6e 64 20 6e 75 6d 62 65 72 2e 20 20 5e 49  cond number.  ^I
1aff0 66 20 61 0a 63 6f 6d 6d 61 20 69 73 20 75 73 65  f a.comma is use
1b000 64 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65  d instead of the
1b010 20 4f 46 46 53 45 54 20 6b 65 79 77 6f 72 64 2c   OFFSET keyword,
1b020 20 74 68 65 6e 20 74 68 65 20 6f 66 66 73 65 74   then the offset
1b030 20 69 73 20 74 68 65 0a 66 69 72 73 74 20 6e 75   is the.first nu
1b040 6d 62 65 72 20 61 6e 64 20 74 68 65 20 6c 69 6d  mber and the lim
1b050 69 74 20 69 73 20 74 68 65 20 73 65 63 6f 6e 64  it is the second
1b060 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 73   number.  This s
1b070 65 65 6d 69 6e 67 0a 63 6f 6e 74 72 61 64 69 63  eeming.contradic
1b080 74 69 6f 6e 20 69 73 20 69 6e 74 65 6e 74 69 6f  tion is intentio
1b090 6e 61 6c 20 2d 20 69 74 20 6d 61 78 69 6d 69 7a  nal - it maximiz
1b0a0 65 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  es compatibility
1b0b0 20 77 69 74 68 20 6c 65 67 61 63 79 0a 53 51 4c   with legacy.SQL
1b0c0 20 64 61 74 61 62 61 73 65 20 73 79 73 74 65 6d   database system
1b0d0 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 63  s..</p>..<p>^A c
1b0e0 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 69  ompound SELECT i
1b0f0 73 20 66 6f 72 6d 65 64 20 66 72 6f 6d 20 74 77  s formed from tw
1b100 6f 20 6f 72 20 6d 6f 72 65 20 73 69 6d 70 6c 65  o or more simple
1b110 20 53 45 4c 45 43 54 73 20 63 6f 6e 6e 65 63 74   SELECTs connect
1b120 65 64 0a 62 79 20 6f 6e 65 20 6f 66 20 74 68 65  ed.by one of the
1b130 20 6f 70 65 72 61 74 6f 72 73 20 55 4e 49 4f 4e   operators UNION
1b140 2c 20 55 4e 49 4f 4e 20 41 4c 4c 2c 20 49 4e 54  , UNION ALL, INT
1b150 45 52 53 45 43 54 2c 20 6f 72 20 45 58 43 45 50  ERSECT, or EXCEP
1b160 54 2e 20 20 5e 49 6e 0a 61 20 63 6f 6d 70 6f 75  T.  ^In.a compou
1b170 6e 64 20 53 45 4c 45 43 54 2c 20 61 6c 6c 20 74  nd SELECT, all t
1b180 68 65 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 53  he constituent S
1b190 45 4c 45 43 54 73 20 6d 75 73 74 20 73 70 65 63  ELECTs must spec
1b1a0 69 66 79 20 74 68 65 0a 73 61 6d 65 20 6e 75 6d  ify the.same num
1b1b0 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 63 6f  ber of result co
1b1c0 6c 75 6d 6e 73 2e 20 20 5e 54 68 65 72 65 20 6d  lumns.  ^There m
1b1d0 61 79 20 62 65 20 6f 6e 6c 79 20 61 20 73 69 6e  ay be only a sin
1b1e0 67 6c 65 20 4f 52 44 45 52 20 42 59 0a 63 6c 61  gle ORDER BY.cla
1b1f0 75 73 65 20 61 74 20 74 68 65 20 65 6e 64 20 6f  use at the end o
1b200 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 53  f the compound S
1b210 45 4c 45 43 54 2e 20 20 5e 54 68 65 20 55 4e 49  ELECT.  ^The UNI
1b220 4f 4e 20 61 6e 64 20 55 4e 49 4f 4e 20 41 4c 4c  ON and UNION ALL
1b230 0a 6f 70 65 72 61 74 6f 72 73 20 63 6f 6d 62 69  .operators combi
1b240 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  ne the results o
1b250 66 20 74 68 65 20 53 45 4c 45 43 54 73 20 74 6f  f the SELECTs to
1b260 20 74 68 65 20 72 69 67 68 74 20 61 6e 64 20 6c   the right and l
1b270 65 66 74 20 69 6e 74 6f 0a 61 20 73 69 6e 67 6c  eft into.a singl
1b280 65 20 62 69 67 20 74 61 62 6c 65 2e 20 20 5e 54  e big table.  ^T
1b290 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 69 73  he difference is
1b2a0 20 74 68 61 74 20 69 6e 20 55 4e 49 4f 4e 20 61   that in UNION a
1b2b0 6c 6c 20 72 65 73 75 6c 74 20 72 6f 77 73 0a 61  ll result rows.a
1b2c0 72 65 20 64 69 73 74 69 6e 63 74 20 77 68 65 72  re distinct wher
1b2d0 65 20 69 6e 20 55 4e 49 4f 4e 20 41 4c 4c 20 74  e in UNION ALL t
1b2e0 68 65 72 65 20 6d 61 79 20 62 65 20 64 75 70 6c  here may be dupl
1b2f0 69 63 61 74 65 73 2e 0a 5e 54 68 65 20 49 4e 54  icates..^The INT
1b300 45 52 53 45 43 54 20 6f 70 65 72 61 74 6f 72 20  ERSECT operator 
1b310 74 61 6b 65 73 20 74 68 65 20 69 6e 74 65 72 73  takes the inters
1b320 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 72 65  ection of the re
1b330 73 75 6c 74 73 20 6f 66 20 74 68 65 0a 6c 65 66  sults of the.lef
1b340 74 20 61 6e 64 20 72 69 67 68 74 20 53 45 4c 45  t and right SELE
1b350 43 54 73 2e 20 20 5e 45 58 43 45 50 54 20 74 61  CTs.  ^EXCEPT ta
1b360 6b 65 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f  kes the result o
1b370 66 20 6c 65 66 74 20 53 45 4c 45 43 54 20 61 66  f left SELECT af
1b380 74 65 72 0a 72 65 6d 6f 76 69 6e 67 20 74 68 65  ter.removing the
1b390 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
1b3a0 72 69 67 68 74 20 53 45 4c 45 43 54 2e 20 20 5e  right SELECT.  ^
1b3b0 57 68 65 6e 20 74 68 72 65 65 20 6f 72 20 6d 6f  When three or mo
1b3c0 72 65 20 53 45 4c 45 43 54 73 0a 61 72 65 20 63  re SELECTs.are c
1b3d0 6f 6e 6e 65 63 74 65 64 20 69 6e 74 6f 20 61 20  onnected into a 
1b3e0 63 6f 6d 70 6f 75 6e 64 2c 20 74 68 65 79 20 67  compound, they g
1b3f0 72 6f 75 70 20 66 72 6f 6d 20 6c 65 66 74 20 74  roup from left t
1b400 6f 20 72 69 67 68 74 2e 3c 2f 70 3e 0a 0a 0a 3c  o right.</p>...<
1b410 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
1b420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b430 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b440 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b450 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b460 23 23 23 0a 53 65 63 74 69 6f 6e 20 55 50 44 41  ###.Section UPDA
1b470 54 45 20 75 70 64 61 74 65 20 7b 55 50 44 41 54  TE update {UPDAT
1b480 45 20 2a 55 50 44 41 54 45 73 7d 0a 0a 42 75 62  E *UPDATEs}..Bub
1b490 62 6c 65 44 69 61 67 72 61 6d 20 75 70 64 61 74  bleDiagram updat
1b4a0 65 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44  e-stmt 1.BubbleD
1b4b0 69 61 67 72 61 6d 20 71 75 61 6c 69 66 69 65 64  iagram qualified
1b4c0 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63  -table-name.</tc
1b4d0 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 55 50 44 41  l>..<p>^The UPDA
1b4e0 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  TE statement is 
1b4f0 75 73 65 64 20 74 6f 20 63 68 61 6e 67 65 20 74  used to change t
1b500 68 65 20 76 61 6c 75 65 20 6f 66 20 63 6f 6c 75  he value of colu
1b510 6d 6e 73 20 69 6e 20 0a 73 65 6c 65 63 74 65 64  mns in .selected
1b520 20 72 6f 77 73 20 6f 66 20 61 20 74 61 62 6c 65   rows of a table
1b530 2e 20 20 5e 45 61 63 68 20 61 73 73 69 67 6e 6d  .  ^Each assignm
1b540 65 6e 74 20 69 6e 20 61 6e 20 55 50 44 41 54 45  ent in an UPDATE
1b550 20 73 70 65 63 69 66 69 65 73 0a 61 20 63 6f 6c   specifies.a col
1b560 75 6d 6e 20 6e 61 6d 65 20 74 6f 20 74 68 65 20  umn name to the 
1b570 6c 65 66 74 20 6f 66 20 74 68 65 20 65 71 75 61  left of the equa
1b580 6c 73 20 73 69 67 6e 20 61 6e 64 20 61 6e 20 61  ls sign and an a
1b590 72 62 69 74 72 61 72 79 20 65 78 70 72 65 73 73  rbitrary express
1b5a0 69 6f 6e 0a 74 6f 20 74 68 65 20 72 69 67 68 74  ion.to the right
1b5b0 2e 20 20 5e 54 68 65 20 65 78 70 72 65 73 73 69  .  ^The expressi
1b5c0 6f 6e 73 20 6d 61 79 20 75 73 65 20 74 68 65 20  ons may use the 
1b5d0 76 61 6c 75 65 73 20 6f 66 20 6f 74 68 65 72 20  values of other 
1b5e0 63 6f 6c 75 6d 6e 73 2e 0a 5e 41 6c 6c 20 65 78  columns..^All ex
1b5f0 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65 76  pressions are ev
1b600 61 6c 75 61 74 65 64 20 62 65 66 6f 72 65 20 61  aluated before a
1b610 6e 79 20 61 73 73 69 67 6e 6d 65 6e 74 73 20 61  ny assignments a
1b620 72 65 20 6d 61 64 65 2e 0a 5e 41 20 57 48 45 52  re made..^A WHER
1b630 45 20 63 6c 61 75 73 65 20 63 61 6e 20 62 65 20  E clause can be 
1b640 75 73 65 64 20 74 6f 20 72 65 73 74 72 69 63 74  used to restrict
1b650 20 77 68 69 63 68 20 72 6f 77 73 20 61 72 65 20   which rows are 
1b660 75 70 64 61 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  updated.</p>..<p
1b670 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63  >^The optional c
1b680 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 20 61  onflict-clause a
1b690 6c 6c 6f 77 73 20 74 68 65 20 73 70 65 63 69 66  llows the specif
1b6a0 69 63 61 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c  ication of an al
1b6b0 74 65 72 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72  ternative.constr
1b6c0 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65  aint conflict re
1b6d0 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
1b6e0 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69 6e 67  hm to use during
1b6f0 20 74 68 69 73 20 6f 6e 65 20 55 50 44 41 54 45   this one UPDATE
1b700 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65 65 20 74 68   command..See th
1b710 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64  e section titled
1b720 0a 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66  .[ON CONFLICT] f
1b730 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
1b740 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a  formation.</p>..
1b750 3c 68 33 3e 52 65 73 74 72 69 63 74 69 6f 6e 73  <h3>Restrictions
1b760 20 6f 6e 20 55 50 44 41 54 45 20 53 74 61 74 65   on UPDATE State
1b770 6d 65 6e 74 73 20 57 69 74 68 69 6e 20 43 52 45  ments Within CRE
1b780 41 54 45 20 54 52 49 47 47 45 52 3c 2f 68 33 3e  ATE TRIGGER</h3>
1b790 0a 0a 3c 70 3e 5e 54 68 65 72 65 20 61 72 65 20  ..<p>^There are 
1b7a0 61 64 64 69 74 69 6f 6e 61 6c 20 73 79 6e 74 61  additional synta
1b7b0 78 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 6f  x restrictions o
1b7c0 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  n UPDATE stateme
1b7d0 6e 74 73 20 74 68 61 74 0a 6f 63 63 75 72 20 77  nts that.occur w
1b7e0 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f  ithin the body o
1b7f0 66 20 61 20 5b 43 52 45 41 54 45 20 54 52 49 47  f a [CREATE TRIG
1b800 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  GER] statement. 
1b810 20 5e 54 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e   ^The <i>table-n
1b820 61 6d 65 3c 2f 69 3e 0a 6f 66 20 74 68 65 20 55  ame</i>.of the U
1b830 50 44 41 54 45 20 6d 75 73 74 20 62 65 20 75 6e  PDATE must be un
1b840 71 75 61 6c 69 66 69 65 64 2e 20 0a 5e 28 49 6e  qualified. .^(In
1b850 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
1b860 65 20 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61  e <i>database-na
1b870 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70  me</i><b>.</b> p
1b880 72 65 66 69 78 20 0a 6f 6e 20 74 68 65 20 74 61  refix .on the ta
1b890 62 6c 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ble name of the 
1b8a0 55 50 44 41 54 45 20 69 73 20 6e 6f 74 20 61 6c  UPDATE is not al
1b8b0 6c 6f 77 65 64 20 77 69 74 68 69 6e 20 74 72 69  lowed within tri
1b8c0 67 67 65 72 73 2e 29 5e 0a 5e 54 68 65 20 74 61  ggers.)^.^The ta
1b8d0 62 6c 65 20 74 6f 20 62 65 20 75 70 64 61 74 65  ble to be update
1b8e0 64 20 6d 75 73 74 20 62 65 20 69 6e 20 74 68 65  d must be in the
1b8f0 20 73 61 6d 65 0a 64 61 74 61 62 61 73 65 20 61   same.database a
1b900 73 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77  s the table to w
1b910 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
1b920 20 69 73 20 61 74 74 61 63 68 65 64 2e 3c 2f 70   is attached.</p
1b930 3e 0a 0a 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58  >..<p>^The INDEX
1b940 45 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e  ED BY and NOT IN
1b950 44 45 58 45 44 20 63 6c 61 75 73 65 73 20 61 72  DEXED clauses ar
1b960 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e  e not allowed on
1b970 20 55 50 44 41 54 45 0a 73 74 61 74 65 6d 65 6e   UPDATE.statemen
1b980 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ts within trigge
1b990 72 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  rs.</p>..<p>^The
1b9a0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 66 6f   LIMIT clause fo
1b9b0 72 20 55 50 44 41 54 45 20 69 73 20 75 6e 73 75  r UPDATE is unsu
1b9c0 70 70 6f 72 74 65 64 20 77 69 74 68 69 6e 20 74  pported within t
1b9d0 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 68  riggers.</p>..<h
1b9e0 33 3e 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54  3>Optional LIMIT
1b9f0 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20 43 6c   and ORDER BY Cl
1ba00 61 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  auses</h3>..<p>^
1ba10 28 49 66 20 53 51 4c 69 74 65 20 69 73 20 62 75  (If SQLite is bu
1ba20 69 6c 74 20 77 69 74 68 20 74 68 65 20 5b 53 51  ilt with the [SQ
1ba30 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
1ba40 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d  TE_DELETE_LIMIT]
1ba50 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70  .compile-time op
1ba60 74 69 6f 6e 20 74 68 65 6e 20 74 68 65 20 73 79  tion then the sy
1ba70 6e 74 61 78 20 6f 66 20 74 68 65 20 55 50 44 41  ntax of the UPDA
1ba80 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  TE statement is 
1ba90 65 78 74 65 6e 64 65 64 0a 77 69 74 68 20 6f 70  extended.with op
1baa0 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59 20  tional ORDER BY 
1bab0 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  and LIMIT clause
1bac0 73 29 5e 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c  s)^ as follows:<
1bad0 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65  /p>..<tcl>Bubble
1bae0 44 69 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73  Diagram update-s
1baf0 74 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c  tmt-limited</tcl
1bb00 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f  >..<p>^The optio
1bb10 6e 61 6c 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  nal LIMIT clause
1bb20 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
1bb30 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72  limit the number
1bb40 20 6f 66 0a 72 6f 77 73 20 6d 6f 64 69 66 69 65   of.rows modifie
1bb50 64 2c 20 61 6e 64 20 74 68 65 72 65 62 79 20 6c  d, and thereby l
1bb60 69 6d 69 74 20 74 68 65 20 73 69 7a 65 20 6f 66  imit the size of
1bb70 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
1bb80 2e 0a 5e 54 68 65 20 4f 52 44 45 52 20 42 59 20  ..^The ORDER BY 
1bb90 63 6c 61 75 73 65 20 6f 6e 20 61 6e 20 55 50 44  clause on an UPD
1bba0 41 54 45 20 73 74 61 74 65 6d 65 6e 74 0a 69 73  ATE statement.is
1bbb0 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64 65   used only to de
1bbc0 74 65 72 6d 69 6e 65 20 77 68 69 63 68 20 72 6f  termine which ro
1bbd0 77 73 20 66 61 6c 6c 0a 77 69 74 68 69 6e 20 74  ws fall.within t
1bbe0 68 65 20 4c 49 4d 49 54 2e 20 20 5e 54 68 65 20  he LIMIT.  ^The 
1bbf0 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72  order in which r
1bc00 6f 77 73 20 61 72 65 20 6d 6f 64 69 66 69 65 64  ows are modified
1bc10 20 69 73 20 61 72 62 69 74 72 61 72 79 0a 61 6e   is arbitrary.an
1bc20 64 20 69 73 20 6e 6f 74 20 64 65 74 65 72 6d 69  d is not determi
1bc30 6e 65 64 20 62 79 20 74 68 65 20 4f 52 44 45 52  ned by the ORDER
1bc40 20 42 59 20 63 6c 61 75 73 65 2e 3c 2f 70 3e 0a   BY clause.</p>.
1bc50 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
1bc60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bc70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bc80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bc90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bca0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 56 41  #####.Section VA
1bcb0 43 55 55 4d 20 76 61 63 75 75 6d 20 56 41 43 55  CUUM vacuum VACU
1bcc0 55 4d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  UM..BubbleDiagra
1bcd0 6d 20 76 61 63 75 75 6d 2d 73 74 6d 74 20 31 0a  m vacuum-stmt 1.
1bce0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 57 68 65 6e  </tcl>..<p>^When
1bcf0 20 61 6e 20 6f 62 6a 65 63 74 20 28 74 61 62 6c   an object (tabl
1bd00 65 2c 20 69 6e 64 65 78 2c 20 74 72 69 67 67 65  e, index, trigge
1bd10 72 2c 20 6f 72 20 76 69 65 77 29 20 69 73 20 64  r, or view) is d
1bd20 72 6f 70 70 65 64 20 66 72 6f 6d 20 74 68 65 20  ropped from the 
1bd30 0a 64 61 74 61 62 61 73 65 2c 20 69 74 20 6c 65  .database, it le
1bd40 61 76 65 73 20 62 65 68 69 6e 64 20 65 6d 70 74  aves behind empt
1bd50 79 20 73 70 61 63 65 2e 20 0a 5e 54 68 69 73 20  y space. .^This 
1bd60 65 6d 70 74 79 20 73 70 61 63 65 20 77 69 6c 6c  empty space will
1bd70 20 62 65 20 72 65 75 73 65 64 20 74 68 65 20 6e   be reused the n
1bd80 65 78 74 20 74 69 6d 65 20 6e 65 77 20 69 6e 66  ext time new inf
1bd90 6f 72 6d 61 74 69 6f 6e 20 69 73 0a 61 64 64 65  ormation is.adde
1bda0 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  d to the databas
1bdb0 65 2e 20 20 42 75 74 20 69 6e 20 74 68 65 20 6d  e.  But in the m
1bdc0 65 61 6e 74 69 6d 65 2c 20 74 68 65 20 64 61 74  eantime, the dat
1bdd0 61 62 61 73 65 20 66 69 6c 65 20 6d 69 67 68 74  abase file might
1bde0 0a 62 65 20 6c 61 72 67 65 72 20 74 68 61 6e 20  .be larger than 
1bdf0 73 74 72 69 63 74 6c 79 20 6e 65 63 65 73 73 61  strictly necessa
1be00 72 79 2e 20 20 41 6c 73 6f 2c 20 66 72 65 71 75  ry.  Also, frequ
1be10 65 6e 74 20 69 6e 73 65 72 74 73 2c 20 75 70 64  ent inserts, upd
1be20 61 74 65 73 2c 0a 61 6e 64 20 64 65 6c 65 74 65  ates,.and delete
1be30 73 20 63 61 6e 20 63 61 75 73 65 20 74 68 65 20  s can cause the 
1be40 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 74  information in t
1be50 68 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 62  he database to b
1be60 65 63 6f 6d 65 0a 66 72 61 67 6d 65 6e 74 65 64  ecome.fragmented
1be70 20 2d 20 73 63 61 74 74 65 72 65 64 20 6f 75 74   - scattered out
1be80 20 61 6c 6c 20 61 63 72 6f 73 73 20 74 68 65 20   all across the 
1be90 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 72 61  database file ra
1bea0 74 68 65 72 0a 74 68 61 6e 20 63 6c 75 73 74 65  ther.than cluste
1beb0 72 65 64 20 74 6f 67 65 74 68 65 72 20 69 6e 20  red together in 
1bec0 6f 6e 65 20 70 6c 61 63 65 2e 3c 2f 70 3e 0a 0a  one place.</p>..
1bed0 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20 63  <p>^The VACUUM c
1bee0 6f 6d 6d 61 6e 64 20 63 6c 65 61 6e 73 0a 74 68  ommand cleans.th
1bef0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1bf00 62 79 20 63 6f 70 79 69 6e 67 20 69 74 73 20 63  by copying its c
1bf10 6f 6e 74 65 6e 74 73 20 74 6f 20 61 20 74 65 6d  ontents to a tem
1bf20 70 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 20  porary database 
1bf30 66 69 6c 65 20 61 6e 64 20 0a 72 65 6c 6f 61 64  file and .reload
1bf40 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  ing the original
1bf50 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66   database file f
1bf60 72 6f 6d 20 74 68 65 20 63 6f 70 79 2e 20 20 54  rom the copy.  T
1bf70 68 69 73 20 65 6c 69 6d 69 6e 61 74 65 73 20 0a  his eliminates .
1bf80 66 72 65 65 20 70 61 67 65 73 2c 20 20 61 6c 69  free pages,  ali
1bf90 67 6e 73 20 74 61 62 6c 65 20 64 61 74 61 20 74  gns table data t
1bfa0 6f 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 2c  o be contiguous,
1bfb0 20 61 6e 64 20 6f 74 68 65 72 77 69 73 65 20 63   and otherwise c
1bfc0 6c 65 61 6e 73 20 0a 75 70 20 74 68 65 20 64 61  leans .up the da
1bfd0 74 61 62 61 73 65 20 66 69 6c 65 20 73 74 72 75  tabase file stru
1bfe0 63 74 75 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  cture.</p>..<p>^
1bff0 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61  The VACUUM comma
1c000 6e 64 20 6d 61 79 20 63 68 61 6e 67 65 20 74 68  nd may change th
1c010 65 20 0a 5b 52 4f 57 49 44 20 7c 20 52 4f 57 49  e .[ROWID | ROWI
1c020 44 73 5d 20 6f 66 20 65 6e 74 72 69 65 73 20 69  Ds] of entries i
1c030 6e 20 74 61 62 6c 65 73 20 74 68 61 74 20 64 6f  n tables that do
1c040 0a 6e 6f 74 20 68 61 76 65 20 61 6e 20 65 78 70  .not have an exp
1c050 6c 69 63 69 74 20 5b 49 4e 54 45 47 45 52 20 50  licit [INTEGER P
1c060 52 49 4d 41 52 59 20 4b 45 59 5d 2e 3c 2f 70 3e  RIMARY KEY].</p>
1c070 0a 0a 3c 70 3e 5e 56 41 43 55 55 4d 20 6f 6e 6c  ..<p>^VACUUM onl
1c080 79 20 77 6f 72 6b 73 20 6f 6e 20 74 68 65 20 6d  y works on the m
1c090 61 69 6e 20 64 61 74 61 62 61 73 65 2e 0a 49 74  ain database..It
1c0a0 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
1c0b0 20 74 6f 20 56 41 43 55 55 4d 20 61 6e 20 61 74   to VACUUM an at
1c0c0 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
1c0d0 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  file.</p>..<p>^T
1c0e0 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e  he VACUUM comman
1c0f0 64 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20 74  d will fail if t
1c100 68 65 72 65 20 69 73 20 61 6e 20 61 63 74 69 76  here is an activ
1c110 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e  e transaction..^
1c120 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61  The VACUUM comma
1c130 6e 64 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f  nd is a no-op fo
1c140 72 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61  r in-memory data
1c150 62 61 73 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  bases.</p>..<p>^
1c160 28 41 73 20 6f 66 20 53 51 4c 69 74 65 20 76 65  (As of SQLite ve
1c170 72 73 69 6f 6e 20 33 2e 31 2c 20 61 6e 20 61 6c  rsion 3.1, an al
1c180 74 65 72 6e 61 74 69 76 65 20 74 6f 20 75 73 69  ternative to usi
1c190 6e 67 20 74 68 65 20 56 41 43 55 55 4d 20 63 6f  ng the VACUUM co
1c1a0 6d 6d 61 6e 64 0a 69 73 20 61 75 74 6f 2d 76 61  mmand.is auto-va
1c1b0 63 75 75 6d 20 6d 6f 64 65 2c 20 65 6e 61 62 6c  cuum mode, enabl
1c1c0 65 64 20 75 73 69 6e 67 20 74 68 65 20 0a 5b 61  ed using the .[a
1c1d0 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72 61 67  uto_vacuum] prag
1c1e0 6d 61 2e 29 5e 20 20 5e 57 68 65 6e 20 5b 61 75  ma.)^  ^When [au
1c1f0 74 6f 5f 76 61 63 75 75 6d 5d 20 69 73 20 65 6e  to_vacuum] is en
1c200 61 62 6c 65 64 20 66 6f 72 20 61 20 64 61 74 61  abled for a data
1c210 62 61 73 65 2c 20 0a 6c 61 72 67 65 20 64 65 6c  base, .large del
1c220 65 74 65 73 20 63 61 75 73 65 0a 74 68 65 20 73  etes cause.the s
1c230 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ize of the datab
1c240 61 73 65 20 66 69 6c 65 20 74 6f 20 73 68 72 69  ase file to shri
1c250 6e 6b 2e 20 20 48 6f 77 65 76 65 72 2c 20 5b 61  nk.  However, [a
1c260 75 74 6f 5f 76 61 63 75 75 6d 5d 0a 61 6c 73 6f  uto_vacuum].also
1c270 20 63 61 75 73 65 73 20 65 78 63 65 73 73 20 66   causes excess f
1c280 72 61 67 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  ragmentation of 
1c290 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
1c2a0 65 2e 20 20 5e 41 6e 64 20 5b 61 75 74 6f 5f 76  e.  ^And [auto_v
1c2b0 61 63 75 75 6d 5d 0a 64 6f 65 73 20 6e 6f 74 20  acuum].does not 
1c2c0 63 6f 6d 70 61 63 74 20 70 61 72 74 69 61 6c 6c  compact partiall
1c2d0 79 20 66 69 6c 6c 65 64 20 70 61 67 65 73 20 6f  y filled pages o
1c2e0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  f the database a
1c2f0 73 20 56 41 43 55 55 4d 0a 64 6f 65 73 2e 3c 2f  s VACUUM.does.</
1c300 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 70 61 67  p>..<p>^The [pag
1c310 65 5f 73 69 7a 65 5d 20 61 6e 64 2f 6f 72 20 5b  e_size] and/or [
1c320 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 6d 6f 64  auto_vacuum] mod
1c330 65 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 20  e of a database 
1c340 63 61 6e 20 62 65 20 63 68 61 6e 67 65 64 0a 62  can be changed.b
1c350 79 20 69 6e 76 6f 6b 69 6e 67 20 74 68 65 20 5b  y invoking the [
1c360 70 61 67 65 5f 73 69 7a 65 20 70 72 61 67 6d 61  page_size pragma
1c370 5d 20 61 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f 76  ] and/or [auto_v
1c380 61 63 75 75 6d 20 70 72 61 67 6d 61 5d 20 61 6e  acuum pragma] an
1c390 64 20 74 68 65 6e 0a 69 6d 6d 65 64 69 61 74 65  d then.immediate
1c3a0 6c 79 20 56 41 43 55 55 4d 69 6e 67 20 74 68 65  ly VACUUMing the
1c3b0 20 64 61 74 61 62 61 73 65 2e 20 5e 45 78 63 65   database. ^Exce
1c3c0 70 74 2c 20 74 68 65 20 70 61 67 65 20 73 69 7a  pt, the page siz
1c3d0 65 20 63 61 6e 6e 6f 74 20 62 65 0a 63 68 61 6e  e cannot be.chan
1c3e0 67 65 64 20 77 68 65 6e 20 5b 77 72 69 74 65 2d  ged when [write-
1c3f0 61 68 65 61 64 20 6c 6f 67 5d 20 6d 6f 64 65 20  ahead log] mode 
1c400 69 73 20 69 6e 20 75 73 65 2e 3c 2f 70 3e 0a 0a  is in use.</p>..
1c410 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
1c420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c430 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c440 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c450 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c460 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 49 4e  ####.Section {IN
1c470 44 45 58 45 44 20 42 59 7d 20 69 6e 64 65 78 65  DEXED BY} indexe
1c480 64 62 79 20 7b 7b 49 4e 44 45 58 45 44 20 42 59  dby {{INDEXED BY
1c490 7d 20 7b 4e 4f 54 20 49 4e 44 45 58 45 44 7d 7d  } {NOT INDEXED}}
1c4a0 0a 0a 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65  ..</tcl>.<p>^The
1c4b0 20 49 4e 44 45 58 45 44 20 42 59 20 70 68 72 61   INDEXED BY phra
1c4c0 73 65 20 69 73 20 61 20 53 51 4c 20 65 78 74 65  se is a SQL exte
1c4d0 6e 73 69 6f 6e 20 66 6f 75 6e 64 20 6f 6e 6c 79  nsion found only
1c4e0 20 69 6e 20 53 51 4c 69 74 65 20 77 68 69 63 68   in SQLite which
1c4f0 20 63 61 6e 0a 62 65 20 75 73 65 64 20 74 6f 20   can.be used to 
1c500 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20  verify that the 
1c510 63 6f 72 72 65 63 74 20 69 6e 64 69 63 65 73 20  correct indices 
1c520 61 72 65 20 62 65 69 6e 67 20 75 73 65 64 20 6f  are being used o
1c530 6e 20 61 20 5b 44 45 4c 45 54 45 5d 2c 0a 5b 53  n a [DELETE],.[S
1c540 45 4c 45 43 54 5d 2c 20 6f 72 20 5b 55 50 44 41  ELECT], or [UPDA
1c550 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a 5e  TE] statement..^
1c560 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70  The INDEXED BY p
1c570 68 72 61 73 65 20 61 6c 77 61 79 73 20 66 6f 6c  hrase always fol
1c580 6c 6f 77 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  lows the name of
1c590 20 61 20 74 61 62 6c 65 20 74 68 61 74 20 53 51   a table that SQ
1c5a0 4c 69 74 65 20 77 69 6c 6c 0a 62 65 20 72 65 61  Lite will.be rea
1c5b0 64 69 6e 67 2e 20 20 54 68 65 20 49 4e 44 45 58  ding.  The INDEX
1c5c0 45 44 20 42 59 20 70 68 72 61 73 65 20 63 61 6e  ED BY phrase can
1c5d0 20 62 65 20 73 65 65 6e 20 69 6e 20 74 68 65 20   be seen in the 
1c5e0 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78  following syntax
1c5f0 0a 64 69 61 67 72 61 6d 73 3a 3c 2f 70 3e 0a 0a  .diagrams:</p>..
1c600 3c 74 63 6c 3e 0a 42 75 62 62 6c 65 44 69 61 67  <tcl>.BubbleDiag
1c610 72 61 6d 20 71 75 61 6c 69 66 69 65 64 2d 74 61  ram qualified-ta
1c620 62 6c 65 2d 6e 61 6d 65 0a 42 75 62 62 6c 65 44  ble-name.BubbleD
1c630 69 61 67 72 61 6d 20 73 69 6e 67 6c 65 2d 73 6f  iagram single-so
1c640 75 72 63 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  urce.</tcl>..<p>
1c650 5e 54 68 65 20 22 49 4e 44 45 58 45 44 20 42 59  ^The "INDEXED BY
1c660 20 69 6e 64 65 78 2d 6e 61 6d 65 22 20 63 6c 61   index-name" cla
1c670 75 73 65 20 73 70 65 63 69 66 69 65 73 20 74 68  use specifies th
1c680 61 74 20 74 68 65 20 6e 61 6d 65 64 20 69 6e 64  at the named ind
1c690 65 78 0a 6d 75 73 74 20 62 65 20 75 73 65 64 20  ex.must be used 
1c6a0 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c 6f 6f 6b  in order to look
1c6b0 20 75 70 20 76 61 6c 75 65 73 20 6f 6e 20 74 68   up values on th
1c6c0 65 20 70 72 65 63 65 64 69 6e 67 20 74 61 62 6c  e preceding tabl
1c6d0 65 2e 0a 5e 49 66 20 69 6e 64 65 78 2d 6e 61 6d  e..^If index-nam
1c6e0 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  e does not exist
1c6f0 20 6f 72 20 63 61 6e 6e 6f 74 20 62 65 20 75 73   or cannot be us
1c700 65 64 20 66 6f 72 20 74 68 65 20 71 75 65 72 79  ed for the query
1c710 2c 20 74 68 65 6e 0a 74 68 65 20 70 72 65 70 61  , then.the prepa
1c720 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 53 51  ration of the SQ
1c730 4c 20 73 74 61 74 65 6d 65 6e 74 20 66 61 69 6c  L statement fail
1c740 73 2e 0a 5e 28 54 68 65 20 22 4e 4f 54 20 49 4e  s..^(The "NOT IN
1c750 44 45 58 45 44 22 20 63 6c 61 75 73 65 20 73 70  DEXED" clause sp
1c760 65 63 69 66 69 65 73 20 74 68 61 74 20 6e 6f 20  ecifies that no 
1c770 69 6e 64 65 78 20 73 68 61 6c 6c 20 62 65 20 75  index shall be u
1c780 73 65 64 20 77 68 65 6e 0a 61 63 63 65 73 73 69  sed when.accessi
1c790 6e 67 20 74 68 65 20 70 72 65 63 65 64 69 6e 67  ng the preceding
1c7a0 20 74 61 62 6c 65 2c 20 69 6e 63 6c 75 64 69 6e   table, includin
1c7b0 67 20 69 6d 70 6c 69 65 64 20 69 6e 64 69 63 65  g implied indice
1c7c0 73 20 63 72 65 61 74 65 20 62 79 0a 55 4e 49 51  s create by.UNIQ
1c7d0 55 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b  UE and PRIMARY K
1c7e0 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20  EY constraints. 
1c7f0 20 48 6f 77 65 76 65 72 2c 20 74 68 65 20 49 4e   However, the IN
1c800 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
1c810 59 0a 63 61 6e 20 73 74 69 6c 6c 20 62 65 20 75  Y.can still be u
1c820 73 65 64 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 65  sed to look up e
1c830 6e 74 72 69 65 73 20 65 76 65 6e 20 77 68 65 6e  ntries even when
1c840 20 22 4e 4f 54 20 49 4e 44 45 58 45 44 22 20 69   "NOT INDEXED" i
1c850 73 20 73 70 65 63 69 66 69 65 64 2e 29 5e 3c 2f  s specified.)^</
1c860 70 3e 0a 0a 3c 70 3e 53 6f 6d 65 20 53 51 4c 20  p>..<p>Some SQL 
1c870 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73  database engines
1c880 20 70 72 6f 76 69 64 65 20 6e 6f 6e 2d 73 74 61   provide non-sta
1c890 6e 64 61 72 64 20 22 68 69 6e 74 22 20 6d 65 63  ndard "hint" mec
1c8a0 68 61 6e 69 73 6d 73 20 77 68 69 63 68 0a 63 61  hanisms which.ca
1c8b0 6e 20 62 65 20 75 73 65 64 20 74 6f 20 67 69 76  n be used to giv
1c8c0 65 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69  e the query opti
1c8d0 6d 69 7a 65 72 20 63 6c 75 65 73 20 61 62 6f 75  mizer clues abou
1c8e0 74 20 77 68 61 74 20 69 6e 64 69 63 65 73 20 69  t what indices i
1c8f0 74 20 73 68 6f 75 6c 64 0a 75 73 65 20 66 6f 72  t should.use for
1c900 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 73 74   a particular st
1c910 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 49 4e  atement.  The IN
1c920 44 45 58 20 42 59 20 63 6c 61 75 73 65 20 6f 66  DEX BY clause of
1c930 20 53 51 4c 69 74 65 20 69 73 20 0a 3c 65 6d 3e   SQLite is .<em>
1c940 6e 6f 74 3c 2f 65 6d 3e 20 61 20 68 69 6e 74 69  not</em> a hinti
1c950 6e 67 20 6d 65 63 68 61 6e 69 73 6d 20 61 6e 64  ng mechanism and
1c960 20 69 74 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62   it should not b
1c970 65 20 75 73 65 64 20 61 73 20 73 75 63 68 2e 0a  e used as such..
1c980 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  ^The INDEXED BY 
1c990 63 6c 61 75 73 65 20 64 6f 65 73 20 6e 6f 74 20  clause does not 
1c9a0 67 69 76 65 20 74 68 65 20 6f 70 74 69 6d 69 7a  give the optimiz
1c9b0 65 72 20 68 69 6e 74 73 20 61 62 6f 75 74 20 77  er hints about w
1c9c0 68 69 63 68 20 69 6e 64 65 78 0a 74 6f 20 75 73  hich index.to us
1c9d0 65 3b 20 69 74 20 67 69 76 65 73 20 74 68 65 20  e; it gives the 
1c9e0 6f 70 74 69 6d 69 7a 65 72 20 61 20 72 65 71 75  optimizer a requ
1c9f0 69 72 65 6d 65 6e 74 20 6f 66 20 77 68 69 63 68  irement of which
1ca00 20 69 6e 64 65 78 20 74 6f 20 75 73 65 2e 0a 5e   index to use..^
1ca10 49 66 20 74 68 65 20 71 75 65 72 79 20 6f 70 74  If the query opt
1ca20 69 6d 69 7a 65 72 20 69 73 20 75 6e 61 62 6c 65  imizer is unable
1ca30 20 74 6f 20 75 73 65 20 74 68 65 20 69 6e 64 65   to use the inde
1ca40 78 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  x specified by t
1ca50 68 65 0a 49 4e 44 45 58 20 42 59 20 63 6c 61 75  he.INDEX BY clau
1ca60 73 65 2c 20 74 68 65 6e 20 74 68 65 20 71 75 65  se, then the que
1ca70 72 79 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74  ry will fail wit
1ca80 68 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a  h an error.</p>.
1ca90 0a 3c 70 3e 54 68 65 20 49 4e 44 45 58 45 44 20  .<p>The INDEXED 
1caa0 42 59 20 63 6c 61 75 73 65 20 69 73 20 3c 65 6d  BY clause is <em
1cab0 3e 6e 6f 74 3c 2f 65 6d 3e 20 69 6e 74 65 6e 64  >not</em> intend
1cac0 65 64 20 66 6f 72 20 75 73 65 20 69 6e 20 74 75  ed for use in tu
1cad0 6e 69 6e 67 0a 74 68 65 20 70 65 72 66 6f 72 6d  ning.the perform
1cae0 61 6e 63 65 20 6f 66 20 61 20 71 75 65 72 79 2e  ance of a query.
1caf0 20 20 54 68 65 20 69 6e 74 65 6e 74 20 6f 66 20    The intent of 
1cb00 74 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63  the INDEXED BY c
1cb10 6c 61 75 73 65 20 69 73 0a 74 6f 20 72 61 69 73  lause is.to rais
1cb20 65 20 61 20 72 75 6e 2d 74 69 6d 65 20 65 72 72  e a run-time err
1cb30 6f 72 20 69 66 20 61 20 73 63 68 65 6d 61 20 63  or if a schema c
1cb40 68 61 6e 67 65 2c 20 73 75 63 68 20 61 73 20 64  hange, such as d
1cb50 72 6f 70 70 69 6e 67 20 6f 72 0a 63 72 65 61 74  ropping or.creat
1cb60 69 6e 67 20 61 6e 20 69 6e 64 65 78 2c 20 63 61  ing an index, ca
1cb70 75 73 65 73 20 74 68 65 20 71 75 65 72 79 20 70  uses the query p
1cb80 6c 61 6e 20 66 6f 72 20 61 20 74 69 6d 65 2d 73  lan for a time-s
1cb90 65 6e 73 69 74 69 76 65 20 71 75 65 72 79 0a 74  ensitive query.t
1cba0 6f 20 63 68 61 6e 67 65 2e 20 20 54 68 65 20 49  o change.  The I
1cbb0 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65  NDEXED BY clause
1cbc0 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20   is designed to 
1cbd0 68 65 6c 70 20 64 65 74 65 63 74 0a 75 6e 64 65  help detect.unde
1cbe0 73 69 72 61 62 6c 65 20 71 75 65 72 79 20 70 6c  sirable query pl
1cbf0 61 6e 20 63 68 61 6e 67 65 73 20 64 75 72 69 6e  an changes durin
1cc00 67 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73  g regression tes
1cc10 74 69 6e 67 2e 0a 44 65 76 65 6c 6f 70 65 72 73  ting..Developers
1cc20 20 61 72 65 20 61 64 6d 6f 6e 69 73 68 65 64 20   are admonished 
1cc30 74 6f 20 6f 6d 69 74 20 61 6c 6c 20 75 73 65 20  to omit all use 
1cc40 6f 66 20 49 4e 44 45 58 45 44 20 42 59 20 64 75  of INDEXED BY du
1cc50 72 69 6e 67 0a 61 70 70 6c 69 63 61 74 69 6f 6e  ring.application
1cc60 20 64 65 73 69 67 6e 2c 20 69 6d 70 6c 65 6d 65   design, impleme
1cc70 6e 74 61 74 69 6f 6e 2c 20 74 65 73 74 69 6e 67  ntation, testing
1cc80 2c 20 61 6e 64 20 74 75 6e 69 6e 67 2e 20 20 49  , and tuning.  I
1cc90 66 0a 49 4e 44 45 58 45 44 20 42 59 20 69 73 20  f.INDEXED BY is 
1cca0 74 6f 20 62 65 20 75 73 65 64 20 61 74 20 61 6c  to be used at al
1ccb0 6c 2c 20 69 74 20 73 68 6f 75 6c 64 20 62 65 20  l, it should be 
1ccc0 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65 20  inserted at the 
1ccd0 76 65 72 79 0a 65 6e 64 20 6f 66 20 74 68 65 20  very.end of the 
1cce0 64 65 76 65 6c 6f 70 6d 65 6e 74 20 70 72 6f 63  development proc
1ccf0 65 73 73 20 77 68 65 6e 20 22 6c 6f 63 6b 69 6e  ess when "lockin
1cd00 67 20 64 6f 77 6e 22 20 61 20 64 65 73 69 67 6e  g down" a design
1cd10 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 65 65 20 41  .</p>..<h3>See A
1cd20 6c 73 6f 3a 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  lso:</h3>..<p>Th
1cd30 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f  e [sqlite3_stmt_
1cd40 73 74 61 74 75 73 28 29 5d 20 43 2f 43 2b 2b 20  status()] C/C++ 
1cd50 69 6e 74 65 72 66 61 63 65 20 74 6f 67 65 74 68  interface togeth
1cd60 65 72 20 77 69 74 68 20 74 68 65 0a 5b 53 51 4c  er with the.[SQL
1cd70 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 46  ITE_STMTSTATUS_F
1cd80 55 4c 4c 53 43 41 4e 5f 53 54 45 50 5d 20 61 6e  ULLSCAN_STEP] an
1cd90 64 20 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  d [SQLITE_STMTST
1cda0 41 54 55 53 5f 53 4f 52 54 5d 20 76 65 72 62 73  ATUS_SORT] verbs
1cdb0 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20  .can be used to 
1cdc0 64 65 74 65 63 74 20 61 74 20 72 75 6e 2d 74 69  detect at run-ti
1cdd0 6d 65 20 77 68 65 6e 20 61 6e 20 53 51 4c 20 73  me when an SQL s
1cde0 74 61 74 65 6d 65 6e 74 20 69 73 20 6e 6f 74 0a  tatement is not.
1cdf0 6d 61 6b 69 6e 67 20 65 66 66 65 63 74 69 76 65  making effective
1ce00 20 75 73 65 20 6f 66 20 69 6e 64 69 63 65 73 2e   use of indices.
1ce10 20 20 4d 61 6e 79 20 61 70 70 6c 69 63 61 74 69    Many applicati
1ce20 6f 6e 73 20 6d 61 79 20 70 72 65 66 65 72 20 74  ons may prefer t
1ce30 6f 0a 75 73 65 20 74 68 65 20 5b 73 71 6c 69 74  o.use the [sqlit
1ce40 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 29  e3_stmt_status()
1ce50 5d 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 64  ] interface to d
1ce60 65 74 65 63 74 20 69 6e 64 65 78 20 6d 69 73 75  etect index misu
1ce70 73 65 0a 72 61 74 68 65 72 20 74 68 61 6e 20 74  se.rather than t
1ce80 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70 68  he INDEXED BY ph
1ce90 72 61 73 65 20 64 65 73 63 72 69 62 65 64 20 68  rase described h
1cea0 65 72 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  ere.</p>..<tcl>.
1ceb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cec0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ced0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cee0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cef0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20  #############.# 
1cf00 41 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f 72  A list of keywor
1cf10 64 73 2e 20 20 41 20 61 73 74 65 72 69 73 6b 20  ds.  A asterisk 
1cf20 6f 63 63 75 72 73 20 61 66 74 65 72 20 74 68 65  occurs after the
1cf30 20 6b 65 79 77 6f 72 64 20 69 66 20 69 74 20 69   keyword if it i
1cf40 73 20 6f 6e 0a 23 20 74 68 65 20 66 61 6c 6c 62  s on.# the fallb
1cf50 61 63 6b 20 6c 69 73 74 2e 0a 23 0a 73 65 74 20  ack list..#.set 
1cf60 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20 5b 6c 73  keyword_list [ls
1cf70 6f 72 74 20 7b 0a 20 20 20 41 42 4f 52 54 0a 20  ort {.   ABORT. 
1cf80 20 20 41 43 54 49 4f 4e 0a 20 20 20 41 44 44 0a    ACTION.   ADD.
1cf90 20 20 20 41 46 54 45 52 0a 20 20 20 41 4c 4c 0a     AFTER.   ALL.
1cfa0 20 20 20 41 4c 54 45 52 0a 20 20 20 41 4e 41 4c     ALTER.   ANAL
1cfb0 59 5a 45 0a 20 20 20 41 4e 44 0a 20 20 20 41 53  YZE.   AND.   AS
1cfc0 0a 20 20 20 41 53 43 0a 20 20 20 41 54 54 41 43  .   ASC.   ATTAC
1cfd0 48 0a 20 20 20 41 55 54 4f 49 4e 43 52 45 4d 45  H.   AUTOINCREME
1cfe0 4e 54 0a 20 20 20 42 45 46 4f 52 45 0a 20 20 20  NT.   BEFORE.   
1cff0 42 45 47 49 4e 0a 20 20 20 42 45 54 57 45 45 4e  BEGIN.   BETWEEN
1d000 0a 20 20 20 42 59 0a 20 20 20 43 41 53 43 41 44  .   BY.   CASCAD
1d010 45 0a 20 20 20 43 41 53 45 0a 20 20 20 43 41 53  E.   CASE.   CAS
1d020 54 0a 20 20 20 43 48 45 43 4b 0a 20 20 20 43 4f  T.   CHECK.   CO
1d030 4c 4c 41 54 45 0a 20 20 20 43 4f 4c 55 4d 4e 0a  LLATE.   COLUMN.
1d040 20 20 20 43 4f 4d 4d 49 54 0a 20 20 20 43 4f 4e     COMMIT.   CON
1d050 46 4c 49 43 54 0a 20 20 20 43 4f 4e 53 54 52 41  FLICT.   CONSTRA
1d060 49 4e 54 0a 20 20 20 43 52 45 41 54 45 0a 20 20  INT.   CREATE.  
1d070 20 43 52 4f 53 53 0a 20 20 20 43 55 52 52 45 4e   CROSS.   CURREN
1d080 54 5f 44 41 54 45 0a 20 20 20 43 55 52 52 45 4e  T_DATE.   CURREN
1d090 54 5f 54 49 4d 45 0a 20 20 20 43 55 52 52 45 4e  T_TIME.   CURREN
1d0a0 54 5f 54 49 4d 45 53 54 41 4d 50 0a 20 20 20 44  T_TIMESTAMP.   D
1d0b0 41 54 41 42 41 53 45 0a 20 20 20 44 45 46 41 55  ATABASE.   DEFAU
1d0c0 4c 54 0a 20 20 20 44 45 46 45 52 52 45 44 0a 20  LT.   DEFERRED. 
1d0d0 20 20 44 45 46 45 52 52 41 42 4c 45 0a 20 20 20    DEFERRABLE.   
1d0e0 44 45 4c 45 54 45 0a 20 20 20 44 45 53 43 0a 20  DELETE.   DESC. 
1d0f0 20 20 44 45 54 41 43 48 0a 20 20 20 44 49 53 54    DETACH.   DIST
1d100 49 4e 43 54 0a 20 20 20 44 52 4f 50 0a 20 20 20  INCT.   DROP.   
1d110 45 4e 44 0a 20 20 20 45 41 43 48 0a 20 20 20 45  END.   EACH.   E
1d120 4c 53 45 0a 20 20 20 45 53 43 41 50 45 0a 20 20  LSE.   ESCAPE.  
1d130 20 45 58 43 45 50 54 0a 20 20 20 45 58 43 4c 55   EXCEPT.   EXCLU
1d140 53 49 56 45 0a 20 20 20 45 58 49 53 54 53 0a 20  SIVE.   EXISTS. 
1d150 20 20 45 58 50 4c 41 49 4e 0a 20 20 20 46 41 49    EXPLAIN.   FAI
1d160 4c 0a 20 20 20 46 4f 52 0a 20 20 20 46 4f 52 45  L.   FOR.   FORE
1d170 49 47 4e 0a 20 20 20 46 52 4f 4d 0a 20 20 20 46  IGN.   FROM.   F
1d180 55 4c 4c 0a 20 20 20 47 4c 4f 42 0a 20 20 20 47  ULL.   GLOB.   G
1d190 52 4f 55 50 0a 20 20 20 48 41 56 49 4e 47 0a 20  ROUP.   HAVING. 
1d1a0 20 20 49 46 0a 20 20 20 49 47 4e 4f 52 45 0a 20    IF.   IGNORE. 
1d1b0 20 20 49 4d 4d 45 44 49 41 54 45 0a 20 20 20 49    IMMEDIATE.   I
1d1c0 4e 0a 20 20 20 49 4e 44 45 58 0a 20 20 20 49 4e  N.   INDEX.   IN
1d1d0 44 45 58 45 44 0a 20 20 20 49 4e 49 54 49 41 4c  DEXED.   INITIAL
1d1e0 4c 59 0a 20 20 20 49 4e 4e 45 52 0a 20 20 20 49  LY.   INNER.   I
1d1f0 4e 53 45 52 54 0a 20 20 20 49 4e 53 54 45 41 44  NSERT.   INSTEAD
1d200 0a 20 20 20 49 4e 54 45 52 53 45 43 54 0a 20 20  .   INTERSECT.  
1d210 20 49 4e 54 4f 0a 20 20 20 49 53 0a 20 20 20 49   INTO.   IS.   I
1d220 53 4e 55 4c 4c 0a 20 20 20 4a 4f 49 4e 0a 20 20  SNULL.   JOIN.  
1d230 20 4b 45 59 0a 20 20 20 4c 45 46 54 0a 20 20 20   KEY.   LEFT.   
1d240 4c 49 4b 45 0a 20 20 20 4c 49 4d 49 54 0a 20 20  LIKE.   LIMIT.  
1d250 20 4d 41 54 43 48 0a 20 20 20 4e 41 54 55 52 41   MATCH.   NATURA
1d260 4c 0a 20 20 20 4e 4f 0a 20 20 20 4e 4f 54 0a 20  L.   NO.   NOT. 
1d270 20 20 4e 4f 54 4e 55 4c 4c 0a 20 20 20 4e 55 4c    NOTNULL.   NUL
1d280 4c 0a 20 20 20 4f 46 0a 20 20 20 4f 46 46 53 45  L.   OF.   OFFSE
1d290 54 0a 20 20 20 4f 4e 0a 20 20 20 4f 52 0a 20 20  T.   ON.   OR.  
1d2a0 20 4f 52 44 45 52 0a 20 20 20 4f 55 54 45 52 0a   ORDER.   OUTER.
1d2b0 20 20 20 50 4c 41 4e 0a 20 20 20 50 52 41 47 4d     PLAN.   PRAGM
1d2c0 41 0a 20 20 20 50 52 49 4d 41 52 59 0a 20 20 20  A.   PRIMARY.   
1d2d0 51 55 45 52 59 0a 20 20 20 52 41 49 53 45 0a 20  QUERY.   RAISE. 
1d2e0 20 20 52 45 46 45 52 45 4e 43 45 53 0a 20 20 20    REFERENCES.   
1d2f0 52 45 47 45 58 50 0a 20 20 20 52 45 49 4e 44 45  REGEXP.   REINDE
1d300 58 0a 20 20 20 52 45 4c 45 41 53 45 0a 20 20 20  X.   RELEASE.   
1d310 52 45 4e 41 4d 45 0a 20 20 20 52 45 50 4c 41 43  RENAME.   REPLAC
1d320 45 0a 20 20 20 52 45 53 54 52 49 43 54 0a 20 20  E.   RESTRICT.  
1d330 20 52 49 47 48 54 0a 20 20 20 52 4f 4c 4c 42 41   RIGHT.   ROLLBA
1d340 43 4b 0a 20 20 20 52 4f 57 0a 20 20 20 53 41 56  CK.   ROW.   SAV
1d350 45 50 4f 49 4e 54 0a 20 20 20 53 45 4c 45 43 54  EPOINT.   SELECT
1d360 0a 20 20 20 53 45 54 0a 20 20 20 54 41 42 4c 45  .   SET.   TABLE
1d370 0a 20 20 20 54 45 4d 50 0a 20 20 20 54 45 4d 50  .   TEMP.   TEMP
1d380 4f 52 41 52 59 0a 20 20 20 54 48 45 4e 0a 20 20  ORARY.   THEN.  
1d390 20 54 4f 0a 20 20 20 54 52 41 4e 53 41 43 54 49   TO.   TRANSACTI
1d3a0 4f 4e 0a 20 20 20 54 52 49 47 47 45 52 0a 20 20  ON.   TRIGGER.  
1d3b0 20 55 4e 49 4f 4e 0a 20 20 20 55 4e 49 51 55 45   UNION.   UNIQUE
1d3c0 0a 20 20 20 55 50 44 41 54 45 0a 20 20 20 55 53  .   UPDATE.   US
1d3d0 49 4e 47 0a 20 20 20 56 41 43 55 55 4d 0a 20 20  ING.   VACUUM.  
1d3e0 20 56 41 4c 55 45 53 0a 20 20 20 56 49 45 57 0a   VALUES.   VIEW.
1d3f0 20 20 20 56 49 52 54 55 41 4c 0a 20 20 20 57 48     VIRTUAL.   WH
1d400 45 4e 0a 20 20 20 57 48 45 52 45 0a 7d 5d 0a 0a  EN.   WHERE.}]..
1d410 68 64 5f 70 75 74 73 20 7b 3c 44 49 56 20 63 6c  hd_puts {<DIV cl
1d420 61 73 73 3d 22 70 64 66 5f 73 65 63 74 69 6f 6e  ass="pdf_section
1d430 22 3e 7d 0a 53 65 63 74 69 6f 6e 20 7b 53 51 4c  ">}.Section {SQL
1d440 69 74 65 20 4b 65 79 77 6f 72 64 73 7d 20 6b 65  ite Keywords} ke
1d450 79 77 6f 72 64 73 20 7b 7b 2a 53 51 4c 20 6b 65  ywords {{*SQL ke
1d460 79 77 6f 72 64 7d 20 7b 53 51 4c 20 6b 65 79 77  yword} {SQL keyw
1d470 6f 72 64 73 7d 7d 0a 68 64 5f 70 75 74 73 20 7b  ords}}.hd_puts {
1d480 3c 2f 44 49 56 3e 7d 0a 3c 2f 74 63 6c 3e 0a 0a  </DIV>}.</tcl>..
1d490 3c 70 3e 54 68 65 20 53 51 4c 20 73 74 61 6e 64  <p>The SQL stand
1d4a0 61 72 64 20 73 70 65 63 69 66 69 65 73 20 61 20  ard specifies a 
1d4b0 68 75 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 6b  huge number of k
1d4c0 65 79 77 6f 72 64 73 20 77 68 69 63 68 20 6d 61  eywords which ma
1d4d0 79 20 6e 6f 74 0a 62 65 20 75 73 65 64 20 61 73  y not.be used as
1d4e0 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 61   the names of ta
1d4f0 62 6c 65 73 2c 20 69 6e 64 69 63 65 73 2c 20 63  bles, indices, c
1d500 6f 6c 75 6d 6e 73 2c 20 64 61 74 61 62 61 73 65  olumns, database
1d510 73 2c 20 75 73 65 72 2d 64 65 66 69 6e 65 64 0a  s, user-defined.
1d520 66 75 6e 63 74 69 6f 6e 73 2c 20 63 6f 6c 6c 61  functions, colla
1d530 74 69 6f 6e 73 2c 20 76 69 72 74 75 61 6c 20 74  tions, virtual t
1d540 61 62 6c 65 20 6d 6f 64 75 6c 65 73 2c 20 6f 72  able modules, or
1d550 20 61 6e 79 20 6f 74 68 65 72 20 6e 61 6d 65 64   any other named
1d560 20 6f 62 6a 65 63 74 2e 0a 54 68 65 20 6c 69 73   object..The lis
1d570 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 69 73  t of keywords is
1d580 20 73 6f 20 6c 6f 6e 67 20 74 68 61 74 20 66 65   so long that fe
1d590 77 20 70 65 6f 70 6c 65 20 63 61 6e 20 72 65 6d  w people can rem
1d5a0 65 6d 62 65 72 20 74 68 65 6d 20 61 6c 6c 2e 0a  ember them all..
1d5b0 46 6f 72 20 6d 6f 73 74 20 53 51 4c 20 63 6f 64  For most SQL cod
1d5c0 65 2c 20 79 6f 75 72 20 73 61 66 65 73 74 20 62  e, your safest b
1d5d0 65 74 20 69 73 20 74 6f 20 6e 65 76 65 72 20 75  et is to never u
1d5e0 73 65 20 61 6e 79 20 45 6e 67 6c 69 73 68 20 6c  se any English l
1d5f0 61 6e 67 75 61 67 65 0a 77 6f 72 64 20 61 73 20  anguage.word as 
1d600 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 75 73  the name of a us
1d610 65 72 2d 64 65 66 69 6e 65 64 20 6f 62 6a 65 63  er-defined objec
1d620 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 79 6f  t.</p>..<p>If yo
1d630 75 20 77 61 6e 74 20 74 6f 20 75 73 65 20 61 20  u want to use a 
1d640 6b 65 79 77 6f 72 64 20 61 73 20 61 20 6e 61 6d  keyword as a nam
1d650 65 2c 20 79 6f 75 20 6e 65 65 64 20 74 6f 20 71  e, you need to q
1d660 75 6f 74 65 20 69 74 2e 20 20 54 68 65 72 65 0a  uote it.  There.
1d670 61 72 65 20 74 68 72 65 65 20 77 61 79 73 20 6f  are three ways o
1d680 66 20 71 75 6f 74 69 6e 67 20 6b 65 79 77 6f 72  f quoting keywor
1d690 64 73 20 69 6e 20 53 51 4c 69 74 65 3a 3c 2f 70  ds in SQLite:</p
1d6a0 3e 0a 0a 3c 70 3e 0a 3c 62 6c 6f 63 6b 71 75 6f  >..<p>.<blockquo
1d6b0 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e  te>.<table>.<tr>
1d6c0 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
1d6d0 22 3e 3c 62 3e 27 6b 65 79 77 6f 72 64 27 3c 2f  "><b>'keyword'</
1d6e0 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68  b></td><td width
1d6f0 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 09 3c 74 64  ="20"></td>..<td
1d700 3e 5e 41 20 6b 65 79 77 6f 72 64 20 69 6e 20 73  >^A keyword in s
1d710 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 69 73 20  ingle quotes is 
1d720 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  a string literal
1d730 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72  .</td></tr>..<tr
1d740 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
1d750 70 22 3e 3c 62 3e 22 6b 65 79 77 6f 72 64 22 3c  p"><b>"keyword"<
1d760 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64  /b></td><td></td
1d770 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72  >..<td>^A keywor
1d780 64 20 69 6e 20 64 6f 75 62 6c 65 2d 71 75 6f 74  d in double-quot
1d790 65 73 20 69 73 20 61 6e 20 69 64 65 6e 74 69 66  es is an identif
1d7a0 69 65 72 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a  ier.</td></tr>..
1d7b0 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
1d7c0 22 74 6f 70 22 3e 3c 62 3e 26 23 39 31 3b 6b 65  "top"><b>&#91;ke
1d7d0 79 77 6f 72 64 26 23 39 33 3b 3c 2f 62 3e 3c 2f  yword&#93;</b></
1d7e0 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74  td><td></td>..<t
1d7f0 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 65 6e 63  d>^A keyword enc
1d800 6c 6f 73 65 64 20 69 6e 20 73 71 75 61 72 65 20  losed in square 
1d810 62 72 61 63 6b 65 74 73 20 69 73 20 0a 20 20 20  brackets is .   
1d820 20 20 20 20 20 61 6e 20 69 64 65 6e 74 69 66 69       an identifi
1d830 65 72 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74  er.  This is not
1d840 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 20 20   standard SQL.  
1d850 54 68 69 73 20 71 75 6f 74 69 6e 67 20 6d 65 63  This quoting mec
1d860 68 61 6e 69 73 6d 0a 20 20 20 20 20 20 20 20 69  hanism.        i
1d870 73 20 75 73 65 64 20 62 79 20 4d 53 20 41 63 63  s used by MS Acc
1d880 65 73 73 20 61 6e 64 20 53 51 4c 20 53 65 72 76  ess and SQL Serv
1d890 65 72 20 61 6e 64 20 69 73 20 69 6e 63 6c 75 64  er and is includ
1d8a0 65 64 20 69 6e 20 53 51 4c 69 74 65 20 66 6f 72  ed in SQLite for
1d8b0 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 61 74 69  .        compati
1d8c0 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72  bility.</td></tr
1d8d0 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69  >..<tr>.<td vali
1d8e0 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26 23 39 36  gn="top"><b>&#96
1d8f0 3b 6b 65 79 77 6f 72 64 26 23 39 36 3b 3c 2f 62  ;keyword&#96;</b
1d900 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a  ></td><td></td>.
1d910 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20  .<td>^A keyword 
1d920 65 6e 63 6c 6f 73 65 64 20 69 6e 20 67 72 61 76  enclosed in grav
1d930 65 20 61 63 63 65 6e 74 73 20 28 41 53 43 49 49  e accents (ASCII
1d940 20 63 6f 64 65 20 39 36 29 20 69 73 20 0a 20 20   code 96) is .  
1d950 20 20 20 20 20 20 61 6e 20 69 64 65 6e 74 69 66        an identif
1d960 69 65 72 2e 20 20 54 68 69 73 20 69 73 20 6e 6f  ier.  This is no
1d970 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 20  t standard SQL. 
1d980 20 54 68 69 73 20 71 75 6f 74 69 6e 67 20 6d 65   This quoting me
1d990 63 68 61 6e 69 73 6d 0a 20 20 20 20 20 20 20 20  chanism.        
1d9a0 69 73 20 75 73 65 64 20 62 79 20 4d 79 53 51 4c  is used by MySQL
1d9b0 20 61 6e 64 20 69 73 20 69 6e 63 6c 75 64 65 64   and is included
1d9c0 20 69 6e 20 53 51 4c 69 74 65 20 66 6f 72 0a 20   in SQLite for. 
1d9d0 20 20 20 20 20 20 20 63 6f 6d 70 61 74 69 62 69         compatibi
1d9e0 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a  lity.</td></tr>.
1d9f0 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b  </table>.</block
1da00 71 75 6f 74 65 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  quote>.</p>..<p>
1da10 46 6f 72 20 72 65 73 69 6c 69 65 6e 63 65 20 77  For resilience w
1da20 68 65 6e 20 63 6f 6e 66 72 6f 6e 74 65 64 20 77  hen confronted w
1da30 69 74 68 20 68 69 73 74 6f 72 69 63 61 6c 20 53  ith historical S
1da40 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 53  QL statements, S
1da50 51 4c 69 74 65 0a 77 69 6c 6c 20 73 6f 6d 65 74  QLite.will somet
1da60 69 6d 65 73 20 62 65 6e 64 20 74 68 65 20 71 75  imes bend the qu
1da70 6f 74 69 6e 67 20 72 75 6c 65 73 20 61 62 6f 76  oting rules abov
1da80 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69  e:</p>..<ul>.<li
1da90 3e 3c 70 3e 5e 49 66 20 61 20 6b 65 79 77 6f 72  ><p>^If a keywor
1daa0 64 20 69 6e 20 73 69 6e 67 6c 65 0a 71 75 6f 74  d in single.quot
1dab0 65 73 20 28 65 78 3a 20 3c 62 3e 27 6b 65 79 27  es (ex: <b>'key'
1dac0 3c 2f 62 3e 20 6f 72 20 3c 62 3e 27 67 6c 6f 62  </b> or <b>'glob
1dad0 27 3c 2f 62 3e 29 20 69 73 20 75 73 65 64 20 69  '</b>) is used i
1dae0 6e 20 61 20 63 6f 6e 74 65 78 74 20 77 68 65 72  n a context wher
1daf0 65 0a 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  e.an identifier 
1db00 69 73 20 61 6c 6c 6f 77 65 64 20 62 75 74 20 77  is allowed but w
1db10 68 65 72 65 20 61 20 73 74 72 69 6e 67 20 6c 69  here a string li
1db20 74 65 72 61 6c 20 69 73 20 6e 6f 74 20 61 6c 6c  teral is not all
1db30 6f 77 65 64 2c 20 74 68 65 6e 0a 74 68 65 20 74  owed, then.the t
1db40 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72 73 74 6f  oken is understo
1db50 6f 64 20 74 6f 20 62 65 20 61 6e 20 69 64 65 6e  od to be an iden
1db60 74 69 66 69 65 72 20 69 6e 73 74 65 61 64 20 6f  tifier instead o
1db70 66 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72  f a string liter
1db80 61 6c 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c  al..</p></li>..<
1db90 6c 69 3e 3c 70 3e 5e 49 66 20 61 20 6b 65 79 77  li><p>^If a keyw
1dba0 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65 0a 71 75  ord in double.qu
1dbb0 6f 74 65 73 20 28 65 78 3a 20 3c 62 3e 22 6b 65  otes (ex: <b>"ke
1dbc0 79 22 3c 2f 62 3e 20 6f 72 20 3c 62 3e 22 67 6c  y"</b> or <b>"gl
1dbd0 6f 62 22 3c 2f 62 3e 29 20 69 73 20 75 73 65 64  ob"</b>) is used
1dbe0 20 69 6e 20 61 20 63 6f 6e 74 65 78 74 20 77 68   in a context wh
1dbf0 65 72 65 0a 69 74 20 63 61 6e 6e 6f 74 20 62 65  ere.it cannot be
1dc00 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 61 6e 20   resolved to an 
1dc10 69 64 65 6e 74 69 66 69 65 72 20 62 75 74 20 77  identifier but w
1dc20 68 65 72 65 20 61 20 73 74 72 69 6e 67 20 6c 69  here a string li
1dc30 74 65 72 61 6c 0a 69 73 20 61 6c 6c 6f 77 65 64  teral.is allowed
1dc40 2c 20 74 68 65 6e 20 74 68 65 20 74 6f 6b 65 6e  , then the token
1dc50 20 69 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 74   is understood t
1dc60 6f 20 62 65 20 61 20 73 74 72 69 6e 67 20 6c 69  o be a string li
1dc70 74 65 72 61 6c 20 69 6e 73 74 65 61 64 0a 6f 66  teral instead.of
1dc80 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 3c   an identifier.<
1dc90 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a  /p></li>.</ul>..
1dca0 3c 70 3e 50 72 6f 67 72 61 6d 6d 65 72 73 20 61  <p>Programmers a
1dcb0 72 65 20 63 61 75 74 69 6f 6e 65 64 20 6e 6f 74  re cautioned not
1dcc0 20 74 6f 20 75 73 65 20 74 68 65 20 74 77 6f 20   to use the two 
1dcd0 65 78 63 65 70 74 69 6f 6e 73 20 64 65 73 63 72  exceptions descr
1dce0 69 62 65 64 20 69 6e 0a 74 68 65 20 70 72 65 76  ibed in.the prev
1dcf0 69 6f 75 73 20 62 75 6c 6c 65 74 73 2e 20 20 57  ious bullets.  W
1dd00 65 20 65 6d 70 68 61 73 69 7a 65 20 74 68 61 74  e emphasize that
1dd10 20 74 68 65 79 20 65 78 69 73 74 20 6f 6e 6c 79   they exist only
1dd20 20 73 6f 20 74 68 61 74 20 6f 6c 64 0a 61 6e 64   so that old.and
1dd30 20 69 6c 6c 2d 66 6f 72 6d 65 64 20 53 51 4c 20   ill-formed SQL 
1dd40 73 74 61 74 65 6d 65 6e 74 73 20 77 69 6c 6c 20  statements will 
1dd50 72 75 6e 20 63 6f 72 72 65 63 74 6c 79 2e 20 20  run correctly.  
1dd60 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20  Future versions 
1dd70 6f 66 0a 53 51 4c 69 74 65 20 6d 69 67 68 74 20  of.SQLite might 
1dd80 63 68 61 6e 67 65 20 74 6f 20 72 61 69 73 65 20  change to raise 
1dd90 65 72 72 6f 72 73 20 69 6e 73 74 65 61 64 20 6f  errors instead o
1dda0 66 20 61 63 63 65 70 74 69 6e 67 20 74 68 65 20  f accepting the 
1ddb0 6d 61 6c 66 6f 72 6d 65 64 0a 73 74 61 74 65 6d  malformed.statem
1ddc0 65 6e 74 73 20 63 6f 76 65 72 65 64 20 62 79 20  ents covered by 
1ddd0 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20 61  the exceptions a
1dde0 62 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53  bove.</p>..<p>.S
1ddf0 51 4c 69 74 65 20 61 64 64 73 20 6e 65 77 20 6b  QLite adds new k
1de00 65 79 77 6f 72 64 73 20 66 72 6f 6d 20 74 69 6d  eywords from tim
1de10 65 20 74 6f 20 74 69 6d 65 20 77 68 65 6e 20 69  e to time when i
1de20 74 20 74 61 6b 65 73 20 6f 6e 20 6e 65 77 20 66  t takes on new f
1de30 65 61 74 75 72 65 73 2e 0a 53 6f 20 74 6f 20 70  eatures..So to p
1de40 72 65 76 65 6e 74 20 79 6f 75 72 20 63 6f 64 65  revent your code
1de50 20 66 72 6f 6d 20 62 65 69 6e 67 20 62 72 6f 6b   from being brok
1de60 65 6e 20 62 79 20 66 75 74 75 72 65 20 65 6e 68  en by future enh
1de70 61 6e 63 65 6d 65 6e 74 73 2c 20 79 6f 75 20 73  ancements, you s
1de80 68 6f 75 6c 64 0a 6e 6f 72 6d 61 6c 6c 79 20 71  hould.normally q
1de90 75 6f 74 65 20 61 6e 79 20 69 64 65 6e 74 69 66  uote any identif
1dea0 69 65 72 20 74 68 61 74 20 69 73 20 61 6e 20 45  ier that is an E
1deb0 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20  nglish language 
1dec0 77 6f 72 64 2c 20 65 76 65 6e 20 69 66 0a 79 6f  word, even if.yo
1ded0 75 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 6f  u do not have to
1dee0 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20  ..</p>..<p>.The 
1def0 6c 69 73 74 20 62 65 6c 6f 77 20 73 68 6f 77 73  list below shows
1df00 20 61 6c 6c 20 70 6f 73 73 69 62 6c 65 20 6b 65   all possible ke
1df10 79 77 6f 72 64 73 20 75 73 65 64 20 62 79 20 61  ywords used by a
1df20 6e 79 20 62 75 69 6c 64 20 6f 66 0a 53 51 4c 69  ny build of.SQLi
1df30 74 65 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  te regardless of
1df40 20 5b 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f   [compile-time o
1df50 70 74 69 6f 6e 73 5d 2e 20 20 0a 4d 6f 73 74 20  ptions].  .Most 
1df60 72 65 61 73 6f 6e 61 62 6c 65 20 63 6f 6e 66 69  reasonable confi
1df70 67 75 72 61 74 69 6f 6e 73 20 75 73 65 20 6d 6f  gurations use mo
1df80 72 65 20 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65  re or all of the
1df90 73 65 20 6b 65 79 77 6f 72 64 73 2c 0a 62 75 74  se keywords,.but
1dfa0 20 73 6f 6d 65 20 6b 65 79 77 6f 72 64 73 20 6d   some keywords m
1dfb0 61 79 20 62 65 20 6f 6d 69 74 74 65 64 20 77 68  ay be omitted wh
1dfc0 65 6e 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20  en SQL language 
1dfd0 66 65 61 74 75 72 65 73 20 61 72 65 0a 64 69 73  features are.dis
1dfe0 61 62 6c 65 64 2e 0a 5e 28 52 65 67 61 72 64 6c  abled..^(Regardl
1dff0 65 73 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 69  ess of the compi
1e000 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72  le-time configur
1e010 61 74 69 6f 6e 2c 20 61 6e 79 20 69 64 65 6e 74  ation, any ident
1e020 69 66 69 65 72 20 74 68 61 74 20 69 73 20 6e 6f  ifier that is no
1e030 74 20 6f 6e 0a 74 68 65 20 66 6f 6c 6c 6f 77 69  t on.the followi
1e040 6e 67 20 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20  ng <tcl>hd_puts 
1e050 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72  [llength $keywor
1e060 64 5f 6c 69 73 74 5d 3c 2f 74 63 6c 3e 20 65 6c  d_list]</tcl> el
1e070 65 6d 65 6e 74 0a 6c 69 73 74 20 69 73 20 6e 6f  ement.list is no
1e080 74 20 61 20 6b 65 79 77 6f 72 64 20 74 6f 20 74  t a keyword to t
1e090 68 65 20 53 51 4c 20 70 61 72 73 65 72 20 69 6e  he SQL parser in
1e0a0 20 53 51 4c 69 74 65 3a 0a 3c 2f 70 3e 0a 0a 3c   SQLite:.</p>..<
1e0b0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62  blockquote>.<tab
1e0c0 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25 22 3e  le width="100%">
1e0d0 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
1e0e0 6c 65 66 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f  left" valign="to
1e0f0 70 22 20 77 69 64 74 68 3d 22 32 30 25 22 3e 0a  p" width="20%">.
1e100 3c 74 63 6c 3e 0a 73 65 74 20 6e 20 5b 6c 6c 65  <tcl>.set n [lle
1e110 6e 67 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69  ngth $keyword_li
1e120 73 74 5d 0a 73 65 74 20 6e 43 6f 6c 20 35 0a 73  st].set nCol 5.s
1e130 65 74 20 6e 52 6f 77 20 5b 65 78 70 72 20 7b 28  et nRow [expr {(
1e140 24 6e 2b 24 6e 43 6f 6c 2d 31 29 2f 24 6e 43 6f  $n+$nCol-1)/$nCo
1e150 6c 7d 5d 0a 73 65 74 20 69 20 30 0a 66 6f 72 65  l}].set i 0.fore
1e160 61 63 68 20 77 6f 72 64 20 24 6b 65 79 77 6f 72  ach word $keywor
1e170 64 5f 6c 69 73 74 20 7b 0a 20 20 69 66 20 7b 24  d_list {.  if {$
1e180 69 3d 3d 24 6e 52 6f 77 7d 20 7b 0a 20 20 20 20  i==$nRow} {.    
1e190 68 64 5f 70 75 74 73 20 22 3c 2f 74 64 3e 3c 74  hd_puts "</td><t
1e1a0 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c 22  d valign=\"top\"
1e1b0 20 61 6c 69 67 6e 3d 5c 22 6c 65 66 74 5c 22 20   align=\"left\" 
1e1c0 77 69 64 74 68 3d 5c 22 32 30 25 5c 22 3e 22 0a  width=\"20%\">".
1e1d0 20 20 20 20 73 65 74 20 69 20 31 0a 20 20 7d 20      set i 1.  } 
1e1e0 65 6c 73 65 20 7b 0a 20 20 20 20 69 6e 63 72 20  else {.    incr 
1e1f0 69 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74 73 20  i.  }.  hd_puts 
1e200 22 24 77 6f 72 64 3c 62 72 3e 5c 6e 22 0a 7d 0a  "$word<br>\n".}.
1e210 3c 2f 74 63 6c 3e 0a 3c 2f 74 64 3e 3c 2f 74 72  </tcl>.</td></tr
1e220 3e 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63 6b  ></table></block
1e230 71 75 6f 74 65 3e 29 5e 0a                       quote>)^.