Documentation Source Text

Hex Artifact Content
Login

Artifact a71d12231d1c4b986d7ad61c708a81d2ea4e7d57:


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 69 73 20 61 20 6c  ^There is is a l
2640: 69 6d 69 74 2c 20 73 65 74 20 75 73 69 6e 67 20  imit, set using 
2650: 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29  [sqlite3_limit()
2660: 5d 20 61 6e 64 20 0a 5b 53 51 4c 49 54 45 5f 4c  ] and .[SQLITE_L
2670: 49 4d 49 54 5f 41 54 54 41 43 48 45 44 5d 2c 20  IMIT_ATTACHED], 
2680: 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
2690: 20 64 61 74 61 62 61 73 65 73 20 74 68 61 74 20   databases that 
26a0: 63 61 6e 20 62 65 0a 73 69 6d 75 6c 74 61 6e 65  can be.simultane
26b0: 6f 75 73 6c 79 20 61 74 74 61 63 68 65 64 20 74  ously attached t
26c0: 6f 20 61 20 73 69 6e 67 6c 65 20 64 61 74 61 62  o a single datab
26d0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c  ase connection.<
26e0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<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 23 23 23 0a 53 65 63 74 69  ##########.Secti
2740: 6f 6e 20 7b 42 45 47 49 4e 20 54 52 41 4e 53 41  on {BEGIN TRANSA
2750: 43 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69  CTION} transacti
2760: 6f 6e 20 7b 2a 42 45 47 49 4e 20 43 4f 4d 4d 49  on {*BEGIN COMMI
2770: 54 20 52 4f 4c 4c 42 41 43 4b 7d 0a 0a 42 75 62  T ROLLBACK}..Bub
2780: 62 6c 65 44 69 61 67 72 61 6d 20 62 65 67 69 6e  bleDiagram begin
2790: 2d 73 74 6d 74 0a 42 75 62 62 6c 65 44 69 61 67  -stmt.BubbleDiag
27a0: 72 61 6d 20 63 6f 6d 6d 69 74 2d 73 74 6d 74 0a  ram commit-stmt.
27b0: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 6f  BubbleDiagram ro
27c0: 6c 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63  llback-stmt.</tc
27d0: 6c 3e 0a 0a 3c 70 3e 0a 5e 4e 6f 20 63 68 61 6e  l>..<p>.^No chan
27e0: 67 65 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20  ges can be made 
27f0: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
2800: 65 78 63 65 70 74 20 77 69 74 68 69 6e 20 61 20  except within a 
2810: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 6e  transaction..^An
2820: 79 20 63 6f 6d 6d 61 6e 64 20 74 68 61 74 20 63  y command that c
2830: 68 61 6e 67 65 73 20 74 68 65 20 64 61 74 61 62  hanges the datab
2840: 61 73 65 20 28 62 61 73 69 63 61 6c 6c 79 2c 20  ase (basically, 
2850: 61 6e 79 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a  any SQL command.
2860: 6f 74 68 65 72 20 74 68 61 6e 20 5b 53 45 4c 45  other than [SELE
2870: 43 54 5d 29 20 77 69 6c 6c 20 61 75 74 6f 6d 61  CT]) will automa
2880: 74 69 63 61 6c 6c 79 20 73 74 61 72 74 20 61 20  tically start a 
2890: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 66 0a 6f  transaction if.o
28a0: 6e 65 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64  ne is not alread
28b0: 79 20 69 6e 20 65 66 66 65 63 74 2e 20 20 5e 41  y in effect.  ^A
28c0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 74 61  utomatically sta
28d0: 72 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  rted transaction
28e0: 73 0a 61 72 65 20 63 6f 6d 6d 69 74 74 65 64 20  s.are committed 
28f0: 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 71 75  when the last qu
2900: 65 72 79 20 66 69 6e 69 73 68 65 73 2e 0a 3c 2f  ery finishes..</
2910: 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63  p>..<p>.^Transac
2920: 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 73 74 61  tions can be sta
2930: 72 74 65 64 20 6d 61 6e 75 61 6c 6c 79 20 75 73  rted manually us
2940: 69 6e 67 20 74 68 65 20 42 45 47 49 4e 0a 63 6f  ing the BEGIN.co
2950: 6d 6d 61 6e 64 2e 20 20 5e 28 53 75 63 68 20 74  mmand.  ^(Such t
2960: 72 61 6e 73 61 63 74 69 6f 6e 73 20 75 73 75 61  ransactions usua
2970: 6c 6c 79 20 70 65 72 73 69 73 74 20 75 6e 74 69  lly persist unti
2980: 6c 20 74 68 65 20 6e 65 78 74 0a 43 4f 4d 4d 49  l the next.COMMI
2990: 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 20 63 6f  T or ROLLBACK co
29a0: 6d 6d 61 6e 64 2e 20 20 42 75 74 20 61 20 74 72  mmand.  But a tr
29b0: 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61  ansaction will a
29c0: 6c 73 6f 20 0a 52 4f 4c 4c 42 41 43 4b 20 69 66  lso .ROLLBACK if
29d0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
29e0: 20 63 6c 6f 73 65 64 20 6f 72 20 69 66 20 61 6e   closed or if an
29f0: 20 65 72 72 6f 72 20 6f 63 63 75 72 73 0a 61 6e   error occurs.an
2a00: 64 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63  d the ROLLBACK c
2a10: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
2a20: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  on algorithm is 
2a30: 73 70 65 63 69 66 69 65 64 2e 29 5e 0a 53 65 65  specified.)^.See
2a40: 20 74 68 65 20 64 6f 63 75 6d 65 6e 74 61 74 69   the documentati
2a50: 6f 6e 20 6f 6e 20 74 68 65 20 5b 4f 4e 20 43 4f  on on the [ON CO
2a60: 4e 46 4c 49 43 54 5d 0a 63 6c 61 75 73 65 20 66  NFLICT].clause f
2a70: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
2a80: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
2a90: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 63 6f 6e  the ROLLBACK.con
2aa0: 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
2ab0: 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 3c 2f 70 3e   algorithm..</p>
2ac0: 0a 0a 3c 70 3e 0a 5e 45 4e 44 20 54 52 41 4e 53  ..<p>.^END TRANS
2ad0: 41 43 54 49 4f 4e 20 69 73 20 61 6e 20 61 6c 69  ACTION is an ali
2ae0: 61 73 20 66 6f 72 20 43 4f 4d 4d 49 54 2e 0a 3c  as for COMMIT..<
2af0: 2f 70 3e 0a 0a 3c 70 3e 20 5e 28 54 72 61 6e 73  /p>..<p> ^(Trans
2b00: 61 63 74 69 6f 6e 73 20 63 72 65 61 74 65 64 20  actions created 
2b10: 75 73 69 6e 67 20 42 45 47 49 4e 2e 2e 2e 43 4f  using BEGIN...CO
2b20: 4d 4d 49 54 20 64 6f 20 6e 6f 74 20 6e 65 73 74  MMIT do not nest
2b30: 2e 29 5e 0a 5e 46 6f 72 20 6e 65 73 74 65 64 20  .)^.^For nested 
2b40: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20 75 73  transactions, us
2b50: 65 20 74 68 65 20 5b 53 41 56 45 50 4f 49 4e 54  e the [SAVEPOINT
2b60: 5d 20 61 6e 64 20 5b 52 45 4c 45 41 53 45 5d 20  ] and [RELEASE] 
2b70: 63 6f 6d 6d 61 6e 64 73 2e 0a 54 68 65 20 22 54  commands..The "T
2b80: 4f 20 53 41 56 45 50 4f 49 4e 54 20 3c 69 3e 6e  O SAVEPOINT <i>n
2b90: 61 6d 65 3c 2f 69 3e 22 20 63 6c 61 75 73 65 20  ame</i>" clause 
2ba0: 6f 66 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  of the ROLLBACK 
2bb0: 63 6f 6d 6d 61 6e 64 20 73 68 6f 77 6e 0a 69 6e  command shown.in
2bc0: 20 74 68 65 20 73 79 6e 74 61 78 20 64 69 61 67   the syntax diag
2bd0: 72 61 6d 20 61 62 6f 76 65 20 69 73 20 6f 6e 6c  ram above is onl
2be0: 79 20 61 70 70 6c 69 63 61 62 6c 65 20 74 6f 20  y applicable to 
2bf0: 5b 53 41 56 45 50 4f 49 4e 54 5d 0a 74 72 61 6e  [SAVEPOINT].tran
2c00: 73 61 63 74 69 6f 6e 73 2e 20 20 5e 41 6e 20 61  sactions.  ^An a
2c10: 74 74 65 6d 70 74 20 74 6f 20 69 6e 76 6f 6b 65  ttempt to invoke
2c20: 20 74 68 65 20 42 45 47 49 4e 20 63 6f 6d 6d 61   the BEGIN comma
2c30: 6e 64 20 77 69 74 68 69 6e 0a 61 20 74 72 61 6e  nd within.a tran
2c40: 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69  saction will fai
2c50: 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 2c  l with an error,
2c60: 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   regardless of w
2c70: 68 65 74 68 65 72 0a 74 68 65 20 74 72 61 6e 73  hether.the trans
2c80: 61 63 74 69 6f 6e 20 77 61 73 20 73 74 61 72 74  action was start
2c90: 65 64 20 62 79 20 5b 53 41 56 45 50 4f 49 4e 54  ed by [SAVEPOINT
2ca0: 5d 20 6f 72 20 61 20 70 72 69 6f 72 20 42 45 47  ] or a prior BEG
2cb0: 49 4e 2e 0a 5e 54 68 65 20 43 4f 4d 4d 49 54 20  IN..^The COMMIT 
2cc0: 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 74 68 65 20  command and the 
2cd0: 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64  ROLLBACK command
2ce0: 20 77 69 74 68 6f 75 74 20 74 68 65 20 54 4f 20   without the TO 
2cf0: 63 6c 61 75 73 65 0a 77 6f 72 6b 20 74 68 65 20  clause.work the 
2d00: 73 61 6d 65 20 6f 6e 20 5b 53 41 56 45 50 4f 49  same on [SAVEPOI
2d10: 4e 54 5d 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  NT] transactions
2d20: 20 61 73 20 74 68 65 79 20 64 6f 20 77 69 74 68   as they do with
2d30: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 73 74   transactions.st
2d40: 61 72 74 65 64 20 62 79 20 42 45 47 49 4e 2e 3c  arted by BEGIN.<
2d50: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61  /p>..<p>.^Transa
2d60: 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 64 65  ctions can be de
2d70: 66 65 72 72 65 64 2c 20 69 6d 6d 65 64 69 61 74  ferred, immediat
2d80: 65 2c 20 6f 72 20 65 78 63 6c 75 73 69 76 65 2e  e, or exclusive.
2d90: 20 20 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20    .^The default 
2da0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 62 65 68 61  transaction beha
2db0: 76 69 6f 72 20 69 73 20 64 65 66 65 72 72 65 64  vior is deferred
2dc0: 2e 0a 5e 44 65 66 65 72 72 65 64 20 6d 65 61 6e  ..^Deferred mean
2dd0: 73 20 74 68 61 74 20 6e 6f 20 6c 6f 63 6b 73 20  s that no locks 
2de0: 61 72 65 20 61 63 71 75 69 72 65 64 0a 6f 6e 20  are acquired.on 
2df0: 74 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 74  the database unt
2e00: 69 6c 20 74 68 65 20 64 61 74 61 62 61 73 65 20  il the database 
2e10: 69 73 20 66 69 72 73 74 20 61 63 63 65 73 73 65  is first accesse
2e20: 64 2e 20 20 5e 54 68 75 73 20 77 69 74 68 20 61  d.  ^Thus with a
2e30: 0a 64 65 66 65 72 72 65 64 20 74 72 61 6e 73 61  .deferred transa
2e40: 63 74 69 6f 6e 2c 20 74 68 65 20 42 45 47 49 4e  ction, the BEGIN
2e50: 20 73 74 61 74 65 6d 65 6e 74 20 69 74 73 65 6c   statement itsel
2e60: 66 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67 20 74  f does nothing t
2e70: 6f 20 74 68 65 0a 66 69 6c 65 73 79 73 74 65 6d  o the.filesystem
2e80: 2e 20 20 5e 4c 6f 63 6b 73 0a 61 72 65 20 6e 6f  .  ^Locks.are no
2e90: 74 20 61 63 71 75 69 72 65 64 20 75 6e 74 69 6c  t acquired until
2ea0: 20 74 68 65 20 66 69 72 73 74 20 72 65 61 64 20   the first read 
2eb0: 6f 72 20 77 72 69 74 65 20 6f 70 65 72 61 74 69  or write operati
2ec0: 6f 6e 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20  on.  ^The first 
2ed0: 72 65 61 64 0a 6f 70 65 72 61 74 69 6f 6e 20 61  read.operation a
2ee0: 67 61 69 6e 73 74 20 61 20 64 61 74 61 62 61 73  gainst a databas
2ef0: 65 20 63 72 65 61 74 65 73 20 61 20 5b 53 48 41  e creates a [SHA
2f00: 52 45 44 5d 20 6c 6f 63 6b 20 61 6e 64 20 74 68  RED] lock and th
2f10: 65 20 66 69 72 73 74 0a 77 72 69 74 65 20 6f 70  e first.write op
2f20: 65 72 61 74 69 6f 6e 20 63 72 65 61 74 65 73 20  eration creates 
2f30: 61 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f 63  a [RESERVED] loc
2f40: 6b 2e 20 20 20 5e 42 65 63 61 75 73 65 20 74 68  k.   ^Because th
2f50: 65 20 61 63 71 75 69 73 69 74 69 6f 6e 20 6f 66  e acquisition of
2f60: 0a 6c 6f 63 6b 73 20 69 73 20 64 65 66 65 72 72  .locks is deferr
2f70: 65 64 20 75 6e 74 69 6c 20 74 68 65 79 20 61 72  ed until they ar
2f80: 65 20 6e 65 65 64 65 64 2c 20 69 74 20 69 73 20  e needed, it is 
2f90: 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e  possible that an
2fa0: 6f 74 68 65 72 0a 74 68 72 65 61 64 20 6f 72 20  other.thread or 
2fb0: 70 72 6f 63 65 73 73 20 63 6f 75 6c 64 20 63 72  process could cr
2fc0: 65 61 74 65 20 61 20 73 65 70 61 72 61 74 65 20  eate a separate 
2fd0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20  transaction and 
2fe0: 77 72 69 74 65 20 74 6f 0a 74 68 65 20 64 61 74  write to.the dat
2ff0: 61 62 61 73 65 20 61 66 74 65 72 20 74 68 65 20  abase after the 
3000: 42 45 47 49 4e 20 6f 6e 20 74 68 65 20 63 75 72  BEGIN on the cur
3010: 72 65 6e 74 20 74 68 72 65 61 64 20 68 61 73 20  rent thread has 
3020: 65 78 65 63 75 74 65 64 2e 0a 5e 49 66 20 74 68  executed..^If th
3030: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
3040: 20 69 6d 6d 65 64 69 61 74 65 2c 20 74 68 65 6e   immediate, then
3050: 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b   [RESERVED] lock
3060: 73 0a 61 72 65 20 61 63 71 75 69 72 65 64 20 6f  s.are acquired o
3070: 6e 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73 20  n all databases 
3080: 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 42  as soon as the B
3090: 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 69 73 0a  EGIN command is.
30a0: 65 78 65 63 75 74 65 64 2c 20 77 69 74 68 6f 75  executed, withou
30b0: 74 20 77 61 69 74 69 6e 67 20 66 6f 72 20 74 68  t waiting for th
30c0: 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20 62 65  e.database to be
30d0: 20 75 73 65 64 2e 20 20 5e 41 66 74 65 72 20 61   used.  ^After a
30e0: 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45   BEGIN IMMEDIATE
30f0: 2c 20 0a 6e 6f 20 6f 74 68 65 72 20 5b 64 61 74  , .no other [dat
3100: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
3110: 5d 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20 74  ] will be able t
3120: 6f 20 77 72 69 74 65 20 74 6f 20 74 68 65 20 64  o write to the d
3130: 61 74 61 62 61 73 65 20 6f 72 0a 64 6f 20 61 20  atabase or.do a 
3140: 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 20  BEGIN IMMEDIATE 
3150: 6f 72 20 42 45 47 49 4e 20 45 58 43 4c 55 53 49  or BEGIN EXCLUSI
3160: 56 45 2e 20 20 5e 4f 74 68 65 72 20 70 72 6f 63  VE.  ^Other proc
3170: 65 73 73 65 73 20 63 61 6e 20 63 6f 6e 74 69 6e  esses can contin
3180: 75 65 0a 74 6f 20 72 65 61 64 20 66 72 6f 6d 20  ue.to read from 
3190: 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 68 6f  the database, ho
31a0: 77 65 76 65 72 2e 20 20 5e 41 6e 20 65 78 63 6c  wever.  ^An excl
31b0: 75 73 69 76 65 20 74 72 61 6e 73 61 63 74 69 6f  usive transactio
31c0: 6e 20 63 61 75 73 65 73 0a 5b 45 58 43 4c 55 53  n causes.[EXCLUS
31d0: 49 56 45 5d 20 6c 6f 63 6b 73 20 74 6f 20 62 65  IVE] locks to be
31e0: 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c   acquired on all
31f0: 20 64 61 74 61 62 61 73 65 73 2e 20 20 5e 41 66   databases.  ^Af
3200: 74 65 72 20 61 20 42 45 47 49 4e 0a 45 58 43 4c  ter a BEGIN.EXCL
3210: 55 53 49 56 45 2c 20 6e 6f 20 6f 74 68 65 72 20  USIVE, no other 
3220: 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63  [database connec
3230: 74 69 6f 6e 5d 20 65 78 63 65 70 74 20 66 6f 72  tion] except for
3240: 20 5b 72 65 61 64 5f 75 6e 63 6f 6d 6d 69 74 74   [read_uncommitt
3250: 65 64 5d 0a 63 6f 6e 6e 65 63 74 69 6f 6e 73 20  ed].connections 
3260: 77 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20  will be able to 
3270: 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73  read the databas
3280: 65 20 61 6e 64 20 6e 6f 20 6f 74 68 65 72 20 63  e and no other c
3290: 6f 6e 6e 65 63 74 69 6f 6e 20 77 69 74 68 6f 75  onnection withou
32a0: 74 0a 65 78 63 65 70 74 69 6f 6e 20 77 69 6c 6c  t.exception will
32b0: 20 62 65 20 61 62 6c 65 20 74 6f 20 77 72 69 74   be able to writ
32c0: 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75  e the database u
32d0: 6e 74 69 6c 20 74 68 65 20 74 72 61 6e 73 61 63  ntil the transac
32e0: 74 69 6f 6e 20 69 73 0a 63 6f 6d 70 6c 65 74 65  tion is.complete
32f0: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28 41 6e  ..</p>..<p>.^(An
3300: 20 69 6d 70 6c 69 63 69 74 20 74 72 61 6e 73 61   implicit transa
3310: 63 74 69 6f 6e 20 28 61 20 74 72 61 6e 73 61 63  ction (a transac
3320: 74 69 6f 6e 20 74 68 61 74 20 69 73 20 73 74 61  tion that is sta
3330: 72 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  rted automatical
3340: 6c 79 2c 0a 6e 6f 74 20 61 20 74 72 61 6e 73 61  ly,.not a transa
3350: 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20 62 79  ction started by
3360: 20 42 45 47 49 4e 29 20 69 73 20 63 6f 6d 6d 69   BEGIN) is commi
3370: 74 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  tted automatical
3380: 6c 79 20 77 68 65 6e 0a 74 68 65 20 6c 61 73 74  ly when.the last
3390: 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
33a0: 74 20 66 69 6e 69 73 68 65 73 2e 20 20 41 20 73  t finishes.  A s
33b0: 74 61 74 65 6d 65 6e 74 20 66 69 6e 69 73 68 65  tatement finishe
33c0: 73 20 77 68 65 6e 20 69 74 73 0a 70 72 65 70 61  s when its.prepa
33d0: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73  red statement is
33e0: 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28   [sqlite3_reset(
33f0: 29 20 7c 20 72 65 73 65 74 5d 20 6f 72 0a 5b 73  ) | reset] or.[s
3400: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
3410: 29 20 7c 20 66 69 6e 61 6c 69 7a 65 64 5d 2e 20  ) | finalized]. 
3420: 20 41 6e 20 6f 70 65 6e 20 5b 73 71 6c 69 74 65   An open [sqlite
3430: 33 5f 62 6c 6f 62 5d 20 75 73 65 64 20 66 6f 72  3_blob] used for
3440: 0a 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f  .incremental BLO
3450: 42 20 49 2f 4f 20 63 6f 75 6e 74 73 20 61 73 20  B I/O counts as 
3460: 61 6e 20 75 6e 66 69 6e 69 73 68 65 64 20 73 74  an unfinished st
3470: 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 5b 73  atement.  The [s
3480: 71 6c 69 74 65 33 5f 62 6c 6f 62 5d 0a 66 69 6e  qlite3_blob].fin
3490: 69 73 68 65 73 20 77 68 65 6e 20 69 74 20 69 73  ishes when it is
34a0: 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 63   [sqlite3_blob_c
34b0: 6c 6f 73 65 28 29 20 7c 20 63 6c 6f 73 65 64 5d  lose() | closed]
34c0: 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54  .)^.</p>..<p>.^T
34d0: 68 65 20 65 78 70 6c 69 63 69 74 20 43 4f 4d 4d  he explicit COMM
34e0: 49 54 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73 20  IT command runs 
34f0: 69 6d 6d 65 64 69 61 74 65 6c 79 2c 20 65 76 65  immediately, eve
3500: 6e 20 69 66 20 74 68 65 72 65 20 61 72 65 0a 70  n if there are.p
3510: 65 6e 64 69 6e 67 20 5b 53 45 4c 45 43 54 5d 20  ending [SELECT] 
3520: 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 5e 48 6f  statements.  ^Ho
3530: 77 65 76 65 72 2c 20 69 66 20 74 68 65 72 65 20  wever, if there 
3540: 61 72 65 20 70 65 6e 64 69 6e 67 0a 77 72 69 74  are pending.writ
3550: 65 20 6f 70 65 72 61 74 69 6f 6e 73 2c 20 74 68  e operations, th
3560: 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64  e COMMIT command
3570: 0a 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20  .will fail with 
3580: 61 20 65 72 72 6f 72 20 63 6f 64 65 20 5b 53 51  a error code [SQ
3590: 4c 49 54 45 5f 42 55 53 59 5d 2e 0a 3c 2f 70 3e  LITE_BUSY]..</p>
35a0: 0a 0a 3c 70 3e 0a 5e 41 6e 20 61 74 74 65 6d 70  ..<p>.^An attemp
35b0: 74 20 74 6f 20 65 78 65 63 75 74 65 20 43 4f 4d  t to execute COM
35c0: 4d 49 54 20 6d 69 67 68 74 20 61 6c 73 6f 20 72  MIT might also r
35d0: 65 73 75 6c 74 20 69 6e 20 61 6e 20 5b 53 51 4c  esult in an [SQL
35e0: 49 54 45 5f 42 55 53 59 5d 20 72 65 74 75 72 6e  ITE_BUSY] return
35f0: 20 63 6f 64 65 0a 69 66 20 61 6e 20 61 6e 6f 74   code.if an anot
3600: 68 65 72 20 74 68 72 65 61 64 20 6f 72 20 70 72  her thread or pr
3610: 6f 63 65 73 73 20 68 61 73 20 61 20 5b 73 68 61  ocess has a [sha
3620: 72 65 64 20 6c 6f 63 6b 5d 20 6f 6e 20 74 68 65  red lock] on the
3630: 20 64 61 74 61 62 61 73 65 0a 74 68 61 74 20 70   database.that p
3640: 72 65 76 65 6e 74 65 64 20 74 68 65 20 64 61 74  revented the dat
3650: 61 62 61 73 65 20 66 72 6f 6d 20 62 65 69 6e 67  abase from being
3660: 20 75 70 64 61 74 65 64 2e 20 20 5e 57 68 65 6e   updated.  ^When
3670: 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 6e   COMMIT fails in
3680: 20 74 68 69 73 0a 77 61 79 2c 20 74 68 65 20 74   this.way, the t
3690: 72 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69  ransaction remai
36a0: 6e 73 20 61 63 74 69 76 65 20 61 6e 64 20 74 68  ns active and th
36b0: 65 20 43 4f 4d 4d 49 54 20 63 61 6e 20 62 65 20  e COMMIT can be 
36c0: 72 65 74 72 69 65 64 20 6c 61 74 65 72 0a 61 66  retried later.af
36d0: 74 65 72 20 74 68 65 20 72 65 61 64 65 72 20 68  ter the reader h
36e0: 61 73 20 68 61 64 20 61 20 63 68 61 6e 63 65 20  as had a chance 
36f0: 74 6f 20 63 6c 65 61 72 2e 0a 3c 2f 70 3e 0a 0a  to clear..</p>..
3700: 3c 70 3e 0a 5e 54 68 65 20 52 4f 4c 4c 42 41 43  <p>.^The ROLLBAC
3710: 4b 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68  K will fail with
3720: 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 5b   an error code [
3730: 53 51 4c 49 54 45 5f 42 55 53 59 5d 20 69 66 20  SQLITE_BUSY] if 
3740: 74 68 65 72 65 0a 61 72 65 20 61 6e 79 20 70 65  there.are any pe
3750: 6e 64 69 6e 67 20 71 75 65 72 69 65 73 2e 20 20  nding queries.  
3760: 5e 42 6f 74 68 20 72 65 61 64 2d 6f 6e 6c 79 20  ^Both read-only 
3770: 61 6e 64 20 72 65 61 64 2f 77 72 69 74 65 20 71  and read/write q
3780: 75 65 72 69 65 73 20 77 69 6c 6c 0a 63 61 75 73  ueries will.caus
3790: 65 20 61 20 52 4f 4c 4c 42 41 43 4b 20 74 6f 20  e a ROLLBACK to 
37a0: 66 61 69 6c 2e 20 20 41 20 52 4f 4c 4c 42 41 43  fail.  A ROLLBAC
37b0: 4b 20 6d 75 73 74 20 66 61 69 6c 20 69 66 20 74  K must fail if t
37c0: 68 65 72 65 20 61 72 65 20 70 65 6e 64 69 6e 67  here are pending
37d0: 0a 72 65 61 64 20 6f 70 65 72 61 74 69 6f 6e 73  .read operations
37e0: 20 28 75 6e 6c 69 6b 65 20 43 4f 4d 4d 49 54 20   (unlike COMMIT 
37f0: 77 68 69 63 68 20 63 61 6e 20 73 75 63 63 65 65  which can succee
3800: 64 29 20 62 65 63 61 75 73 65 20 62 61 64 20 74  d) because bad t
3810: 68 69 6e 67 73 0a 77 69 6c 6c 20 68 61 70 70 65  hings.will happe
3820: 6e 20 69 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f  n if the in-memo
3830: 72 79 20 69 6d 61 67 65 20 6f 66 20 74 68 65 20  ry image of the 
3840: 64 61 74 61 62 61 73 65 20 69 73 20 63 68 61 6e  database is chan
3850: 67 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64  ged out from und
3860: 65 72 0a 61 6e 20 61 63 74 69 76 65 20 71 75 65  er.an active que
3870: 72 79 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 66  ry..</p>..<p>.If
3880: 20 5b 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c   [PRAGMA journal
3890: 5f 6d 6f 64 65 5d 20 69 73 20 73 65 74 20 74 6f  _mode] is set to
38a0: 20 4f 46 46 20 28 74 68 75 73 20 64 69 73 61 62   OFF (thus disab
38b0: 6c 69 6e 67 20 74 68 65 20 72 6f 6c 6c 62 61 63  ling the rollbac
38c0: 6b 20 6a 6f 75 72 6e 61 6c 0a 66 69 6c 65 29 20  k journal.file) 
38d0: 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f  then the behavio
38e0: 72 20 6f 66 20 74 68 65 20 52 4f 4c 4c 42 41 43  r of the ROLLBAC
38f0: 4b 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 6e 64  K command is und
3900: 65 66 69 6e 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 68  efined..</p>..<h
3910: 33 3e 52 65 73 70 6f 6e 73 65 20 54 6f 20 45 72  3>Response To Er
3920: 72 6f 72 73 20 57 69 74 68 69 6e 20 41 20 54 72  rors Within A Tr
3930: 61 6e 73 61 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a  ansaction</h3>..
3940: 3c 70 3e 20 5e 28 49 66 20 63 65 72 74 61 69 6e  <p> ^(If certain
3950: 20 6b 69 6e 64 73 20 6f 66 20 65 72 72 6f 72 73   kinds of errors
3960: 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20 61 20   occur within a 
3970: 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
3980: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79  .transaction may
3990: 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 72   or may not be r
39a0: 6f 6c 6c 65 64 20 62 61 63 6b 20 61 75 74 6f 6d  olled back autom
39b0: 61 74 69 63 61 6c 6c 79 2e 20 20 54 68 65 0a 65  atically.  The.e
39c0: 72 72 6f 72 73 20 74 68 61 74 20 63 61 75 73 65  rrors that cause
39d0: 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 6e   the behavior in
39e0: 63 6c 75 64 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e  clude:</p>..<ul>
39f0: 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 46 55  .<li> [SQLITE_FU
3a00: 4c 4c 5d 3a 20 64 61 74 61 62 61 73 65 20 6f 72  LL]: database or
3a10: 20 64 69 73 6b 20 66 75 6c 6c 0a 3c 6c 69 3e 20   disk full.<li> 
3a20: 5b 53 51 4c 49 54 45 5f 49 4f 45 52 52 5d 3a 20  [SQLITE_IOERR]: 
3a30: 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f 72 0a 3c  disk I/O error.<
3a40: 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 42 55 53 59  li> [SQLITE_BUSY
3a50: 5d 3a 20 64 61 74 61 62 61 73 65 20 69 6e 20 75  ]: database in u
3a60: 73 65 20 62 79 20 61 6e 6f 74 68 65 72 20 70 72  se by another pr
3a70: 6f 63 65 73 73 0a 3c 6c 69 3e 20 5b 53 51 4c 49  ocess.<li> [SQLI
3a80: 54 45 5f 4e 4f 4d 45 4d 5d 3a 20 6f 75 74 20 6f  TE_NOMEM]: out o
3a90: 72 20 6d 65 6d 6f 72 79 0a 3c 6c 69 3e 20 5b 53  r memory.<li> [S
3aa0: 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 5d  QLITE_INTERRUPT]
3ab0: 3a 20 70 72 6f 63 65 73 73 69 6e 67 20 5b 73 71  : processing [sq
3ac0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 7c  lite3_interrupt|
3ad0: 69 6e 74 65 72 72 75 70 74 65 64 5d 0a 20 20 20  interrupted].   
3ae0: 20 20 62 79 20 61 70 70 6c 69 63 61 74 69 6f 6e    by application
3af0: 20 72 65 71 75 65 73 74 0a 3c 2f 75 6c 3e 29 5e   request.</ul>)^
3b00: 0a 0a 3c 70 3e 0a 5e 46 6f 72 20 61 6c 6c 20 6f  ..<p>.^For all o
3b10: 66 20 74 68 65 73 65 20 65 72 72 6f 72 73 2c 20  f these errors, 
3b20: 53 51 4c 69 74 65 20 61 74 74 65 6d 70 74 73 20  SQLite attempts 
3b30: 74 6f 20 75 6e 64 6f 20 6a 75 73 74 20 74 68 65  to undo just the
3b40: 20 6f 6e 65 20 73 74 61 74 65 6d 65 6e 74 0a 69   one statement.i
3b50: 74 20 77 61 73 20 77 6f 72 6b 69 6e 67 20 6f 6e  t was working on
3b60: 20 61 6e 64 20 6c 65 61 76 65 20 63 68 61 6e 67   and leave chang
3b70: 65 73 20 66 72 6f 6d 20 70 72 69 6f 72 20 73 74  es from prior st
3b80: 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
3b90: 74 68 65 0a 73 61 6d 65 20 74 72 61 6e 73 61 63  the.same transac
3ba0: 74 69 6f 6e 20 69 6e 74 61 63 74 20 61 6e 64 20  tion intact and 
3bb0: 63 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 74 68  continue with th
3bc0: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  e transaction.  
3bd0: 5e 48 6f 77 65 76 65 72 2c 20 0a 64 65 70 65 6e  ^However, .depen
3be0: 64 69 6e 67 20 6f 6e 20 74 68 65 20 73 74 61 74  ding on the stat
3bf0: 65 6d 65 6e 74 20 62 65 69 6e 67 20 65 76 61 6c  ement being eval
3c00: 75 61 74 65 64 20 61 6e 64 20 74 68 65 20 70 6f  uated and the po
3c10: 69 6e 74 20 61 74 20 77 68 69 63 68 20 74 68 65  int at which the
3c20: 0a 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 69  .error occurs, i
3c30: 74 20 6d 69 67 68 74 20 62 65 20 6e 65 63 65 73  t might be neces
3c40: 73 61 72 79 20 66 6f 72 20 53 51 4c 69 74 65 20  sary for SQLite 
3c50: 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 64 0a  to rollback and.
3c60: 63 61 6e 63 65 6c 20 74 68 65 20 65 6e 74 69 72  cancel the entir
3c70: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  e transaction.  
3c80: 5e 41 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  ^An application 
3c90: 63 61 6e 20 74 65 6c 6c 20 77 68 69 63 68 0a 63  can tell which.c
3ca0: 6f 75 72 73 65 20 6f 66 20 61 63 74 69 6f 6e 20  ourse of action 
3cb0: 53 51 4c 69 74 65 20 74 6f 6f 6b 20 62 79 20 75  SQLite took by u
3cc0: 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74 65  sing the.[sqlite
3cd0: 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74  3_get_autocommit
3ce0: 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67 65 20 69  ()] C-language i
3cf0: 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c  nterface.</p>..<
3d00: 70 3e 49 74 20 69 73 20 72 65 63 6f 6d 6d 65 6e  p>It is recommen
3d10: 64 65 64 20 74 68 61 74 20 61 70 70 6c 69 63 61  ded that applica
3d20: 74 69 6f 6e 73 20 72 65 73 70 6f 6e 64 20 74 6f  tions respond to
3d30: 20 74 68 65 20 65 72 72 6f 72 73 0a 6c 69 73 74   the errors.list
3d40: 65 64 20 61 62 6f 76 65 20 62 79 20 65 78 70 6c  ed above by expl
3d50: 69 63 69 74 6c 79 20 69 73 73 75 69 6e 67 20 61  icitly issuing a
3d60: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
3d70: 64 2e 20 20 5e 49 66 20 74 68 65 20 0a 74 72 61  d.  ^If the .tra
3d80: 6e 73 61 63 74 69 6f 6e 20 68 61 73 20 61 6c 72  nsaction has alr
3d90: 65 61 64 79 20 62 65 65 6e 20 72 6f 6c 6c 65 64  eady been rolled
3da0: 20 62 61 63 6b 20 61 75 74 6f 6d 61 74 69 63 61   back automatica
3db0: 6c 6c 79 0a 62 79 20 74 68 65 20 65 72 72 6f 72  lly.by the error
3dc0: 20 72 65 73 70 6f 6e 73 65 2c 20 74 68 65 6e 20   response, then 
3dd0: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d  the ROLLBACK com
3de0: 6d 61 6e 64 20 77 69 6c 6c 20 66 61 69 6c 20 77  mand will fail w
3df0: 69 74 68 20 61 6e 0a 65 72 72 6f 72 2c 20 62 75  ith an.error, bu
3e00: 74 20 6e 6f 20 68 61 72 6d 20 69 73 20 63 61 75  t no harm is cau
3e10: 73 65 64 20 62 79 20 74 68 69 73 2e 3c 2f 70 3e  sed by this.</p>
3e20: 0a 0a 3c 70 3e 46 75 74 75 72 65 20 76 65 72 73  ..<p>Future vers
3e30: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 6d  ions of SQLite m
3e40: 61 79 20 65 78 74 65 6e 64 20 74 68 65 20 6c 69  ay extend the li
3e50: 73 74 20 6f 66 20 65 72 72 6f 72 73 20 77 68 69  st of errors whi
3e60: 63 68 0a 6d 69 67 68 74 20 63 61 75 73 65 20 61  ch.might cause a
3e70: 75 74 6f 6d 61 74 69 63 20 74 72 61 6e 73 61 63  utomatic transac
3e80: 74 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b 2e 20 20  tion rollback.  
3e90: 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20  Future versions 
3ea0: 6f 66 0a 53 51 4c 69 74 65 20 6d 69 67 68 74 20  of.SQLite might 
3eb0: 63 68 61 6e 67 65 20 74 68 65 20 65 72 72 6f 72  change the error
3ec0: 20 72 65 73 70 6f 6e 73 65 2e 20 20 49 6e 20 70   response.  In p
3ed0: 61 72 74 69 63 75 6c 61 72 2c 20 77 65 20 6d 61  articular, we ma
3ee0: 79 0a 63 68 6f 6f 73 65 20 74 6f 20 73 69 6d 70  y.choose to simp
3ef0: 6c 69 66 79 20 74 68 65 20 69 6e 74 65 72 66 61  lify the interfa
3f00: 63 65 20 69 6e 20 66 75 74 75 72 65 20 76 65 72  ce in future ver
3f10: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
3f20: 62 79 0a 63 61 75 73 69 6e 67 20 74 68 65 20 65  by.causing the e
3f30: 72 72 6f 72 73 20 61 62 6f 76 65 20 74 6f 20 66  rrors above to f
3f40: 6f 72 63 65 20 61 6e 20 75 6e 63 6f 6e 64 69 74  orce an uncondit
3f50: 69 6f 6e 61 6c 20 72 6f 6c 6c 62 61 63 6b 2e 3c  ional rollback.<
3f60: 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<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 23 23 23 0a 53 65 63 74 69  ##########.Secti
3fc0: 6f 6e 20 7b 53 41 56 45 50 4f 49 4e 54 7d 20 73  on {SAVEPOINT} s
3fd0: 61 76 65 70 6f 69 6e 74 20 7b 53 41 56 45 50 4f  avepoint {SAVEPO
3fe0: 49 4e 54 20 52 45 4c 45 41 53 45 7d 0a 0a 42 75  INT RELEASE}..Bu
3ff0: 62 62 6c 65 44 69 61 67 72 61 6d 20 73 61 76 65  bbleDiagram save
4000: 70 6f 69 6e 74 2d 73 74 6d 74 0a 42 75 62 62 6c  point-stmt.Bubbl
4010: 65 44 69 61 67 72 61 6d 20 72 65 6c 65 61 73 65  eDiagram release
4020: 2d 73 74 6d 74 0a 42 75 62 62 6c 65 44 69 61 67  -stmt.BubbleDiag
4030: 72 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d 73 74 6d  ram rollback-stm
4040: 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 53  t.</tcl>..<p> ^S
4050: 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20 61 20  AVEPOINTs are a 
4060: 6d 65 74 68 6f 64 20 6f 66 20 63 72 65 61 74 69  method of creati
4070: 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c  ng transactions,
4080: 20 73 69 6d 69 6c 61 72 20 74 6f 0a 5b 42 45 47   similar to.[BEG
4090: 49 4e 5d 20 61 6e 64 20 5b 43 4f 4d 4d 49 54 5d  IN] and [COMMIT]
40a0: 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  , except that th
40b0: 65 20 53 41 56 45 50 4f 49 4e 54 20 61 6e 64 20  e SAVEPOINT and 
40c0: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 73  RELEASE commands
40d0: 0a 61 72 65 20 6e 61 6d 65 64 20 61 6e 64 20 6d  .are named and m
40e0: 61 79 20 62 65 20 6e 65 73 74 65 64 2e 3c 2f 70  ay be nested.</p
40f0: 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 53 41 56 45  >..<p> ^The SAVE
4100: 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 20 73 74  POINT command st
4110: 61 72 74 73 20 61 20 6e 65 77 20 74 72 61 6e 73  arts a new trans
4120: 61 63 74 69 6f 6e 20 77 69 74 68 20 61 20 6e 61  action with a na
4130: 6d 65 2e 0a 5e 54 68 65 20 74 72 61 6e 73 61 63  me..^The transac
4140: 74 69 6f 6e 20 6e 61 6d 65 73 20 6e 65 65 64 20  tion names need 
4150: 6e 6f 74 20 62 65 20 75 6e 69 71 75 65 2e 0a 5e  not be unique..^
4160: 28 41 20 53 41 56 45 50 4f 49 4e 54 20 63 61 6e  (A SAVEPOINT can
4170: 20 62 65 20 73 74 61 72 74 65 64 20 65 69 74 68   be started eith
4180: 65 72 20 77 69 74 68 69 6e 20 6f 72 20 6f 75 74  er within or out
4190: 73 69 64 65 20 6f 66 0a 61 20 5b 42 45 47 49 4e  side of.a [BEGIN
41a0: 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e 29 5e 20  ]...[COMMIT].)^ 
41b0: 20 5e 28 57 68 65 6e 20 61 20 53 41 56 45 50 4f   ^(When a SAVEPO
41c0: 49 4e 54 20 69 73 20 74 68 65 20 6f 75 74 65 72  INT is the outer
41d0: 2d 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 0a  -most savepoint.
41e0: 61 6e 64 20 69 74 20 69 73 20 6e 6f 74 20 77 69  and it is not wi
41f0: 74 68 69 6e 20 61 20 5b 42 45 47 49 4e 5d 2e 2e  thin a [BEGIN]..
4200: 2e 5b 43 4f 4d 4d 49 54 5d 20 74 68 65 6e 20 74  .[COMMIT] then t
4210: 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 74  he behavior is t
4220: 68 65 0a 73 61 6d 65 20 61 73 20 42 45 47 49 4e  he.same as BEGIN
4230: 20 44 45 46 45 52 52 45 44 20 54 52 41 4e 53 41   DEFERRED TRANSA
4240: 43 54 49 4f 4e 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70  CTION.)^</p>..<p
4250: 3e 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54  >^The ROLLBACK T
4260: 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 76 65 72 74  O command revert
4270: 73 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74  s the state of t
4280: 68 65 20 64 61 74 61 62 61 73 65 20 62 61 63 6b  he database back
4290: 20 74 6f 20 77 68 61 74 0a 69 74 20 77 61 73 20   to what.it was 
42a0: 6a 75 73 74 20 61 66 74 65 72 20 74 68 65 20 63  just after the c
42b0: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 53 41 56  orresponding SAV
42c0: 45 50 4f 49 4e 54 2e 20 20 5e 4e 6f 74 65 20 74  EPOINT.  ^Note t
42d0: 68 61 74 20 75 6e 6c 69 6b 65 20 74 68 61 74 0a  hat unlike that.
42e0: 70 6c 61 69 6e 20 5b 52 4f 4c 4c 42 41 43 4b 5d  plain [ROLLBACK]
42f0: 20 63 6f 6d 6d 61 6e 64 20 28 77 69 74 68 6f 75   command (withou
4300: 74 20 74 68 65 20 54 4f 20 6b 65 79 77 6f 72 64  t the TO keyword
4310: 29 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54  ) the ROLLBACK T
4320: 4f 20 63 6f 6d 6d 61 6e 64 0a 64 6f 65 73 20 6e  O command.does n
4330: 6f 74 20 63 61 6e 63 65 6c 20 74 68 65 20 74 72  ot cancel the tr
4340: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 49 6e 73  ansaction.  ^Ins
4350: 74 65 61 64 20 6f 66 20 63 61 6e 63 65 6c 6c 69  tead of cancelli
4360: 6e 67 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ng the transacti
4370: 6f 6e 2c 0a 74 68 65 20 52 4f 4c 4c 42 41 43 4b  on,.the ROLLBACK
4380: 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 73 74   TO command rest
4390: 61 72 74 73 20 74 68 65 20 74 72 61 6e 73 61 63  arts the transac
43a0: 74 69 6f 6e 20 61 67 61 69 6e 20 61 74 20 74 68  tion again at th
43b0: 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 5e 41 6c  e beginning..^Al
43c0: 6c 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 53 41  l intervening SA
43d0: 56 45 50 4f 49 4e 54 73 20 61 72 65 20 63 61 6e  VEPOINTs are can
43e0: 63 65 6c 65 64 2c 20 68 6f 77 65 76 65 72 2e 3c  celed, however.<
43f0: 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 4c  /p>..<p>^The REL
4400: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20  EASE command is 
4410: 6c 69 6b 65 20 61 20 5b 43 4f 4d 4d 49 54 5d 20  like a [COMMIT] 
4420: 66 6f 72 20 61 20 53 41 56 45 50 4f 49 4e 54 2e  for a SAVEPOINT.
4430: 0a 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f  .^The RELEASE co
4440: 6d 6d 61 6e 64 20 63 61 75 73 65 73 20 61 6c 6c  mmand causes all
4450: 20 73 61 76 65 70 6f 69 6e 74 73 20 62 61 63 6b   savepoints back
4460: 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e   to and includin
4470: 67 20 74 68 65 20 0a 6d 6f 73 74 20 72 65 63 65  g the .most rece
4480: 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 77 69 74  nt savepoint wit
4490: 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d  h a matching nam
44a0: 65 20 74 6f 20 62 65 20 72 65 6d 6f 76 65 64 20  e to be removed 
44b0: 66 72 6f 6d 20 74 68 65 20 0a 74 72 61 6e 73 61  from the .transa
44c0: 63 74 69 6f 6e 20 73 74 61 63 6b 2e 20 20 5e 54  ction stack.  ^T
44d0: 68 65 20 52 45 4c 45 41 53 45 20 6f 66 20 61 6e  he RELEASE of an
44e0: 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74 69   inner transacti
44f0: 6f 6e 0a 64 6f 65 73 20 6e 6f 74 20 63 61 75 73  on.does not caus
4500: 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20 74 6f  e any changes to
4510: 20 62 65 20 77 72 69 74 74 65 6e 20 74 6f 20 74   be written to t
4520: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
4530: 3b 20 69 74 20 6d 65 72 65 6c 79 0a 72 65 6d 6f  ; it merely.remo
4540: 76 65 73 20 73 61 76 65 70 6f 69 6e 74 73 20 66  ves savepoints f
4550: 72 6f 6d 20 74 68 65 20 74 72 61 6e 73 61 63 74  rom the transact
4560: 69 6f 6e 20 73 74 61 63 6b 20 73 75 63 68 20 74  ion stack such t
4570: 68 61 74 20 69 74 20 69 73 0a 6e 6f 20 6c 6f 6e  hat it is.no lon
4580: 67 65 72 20 70 6f 73 73 69 62 6c 65 20 74 6f 20  ger possible to 
4590: 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 74 68 6f 73  ROLLBACK TO thos
45a0: 65 20 73 61 76 65 70 6f 69 6e 74 73 2e 0a 5e 49  e savepoints..^I
45b0: 66 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  f a RELEASE comm
45c0: 61 6e 64 20 72 65 6c 65 61 73 65 73 20 74 68 65  and releases the
45d0: 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70   outermost savep
45e0: 6f 69 6e 74 2c 20 73 6f 0a 74 68 61 74 20 74 68  oint, so.that th
45f0: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74  e transaction st
4600: 61 63 6b 20 62 65 63 6f 6d 65 73 20 65 6d 70 74  ack becomes empt
4610: 79 2c 20 74 68 65 6e 20 52 45 4c 45 41 53 45 20  y, then RELEASE 
4620: 69 73 20 74 68 65 20 73 61 6d 65 0a 61 73 20 5b  is the same.as [
4630: 43 4f 4d 4d 49 54 5d 2e 0a 5e 54 68 65 20 5b 43  COMMIT]..^The [C
4640: 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64 20 6d  OMMIT] command m
4650: 61 79 20 62 65 20 75 73 65 64 20 74 6f 20 72 65  ay be used to re
4660: 6c 65 61 73 65 20 61 6c 6c 20 73 61 76 65 70 6f  lease all savepo
4670: 69 6e 74 73 20 61 6e 64 0a 63 6f 6d 6d 69 74 20  ints and.commit 
4680: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
4690: 65 76 65 6e 20 69 66 20 74 68 65 20 74 72 61 6e  even if the tran
46a0: 73 61 63 74 69 6f 6e 20 77 61 73 20 6f 72 69 67  saction was orig
46b0: 69 6e 61 6c 6c 79 20 73 74 61 72 74 65 64 0a 62  inally started.b
46c0: 79 20 61 20 53 41 56 45 50 4f 49 4e 54 20 63 6f  y a SAVEPOINT co
46d0: 6d 6d 61 6e 64 20 69 6e 73 74 65 61 64 20 6f 66  mmand instead of
46e0: 20 61 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61   a [BEGIN] comma
46f0: 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20  nd.</p>..<p>^If 
4700: 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61  the savepoint-na
4710: 6d 65 20 69 6e 20 61 20 52 45 4c 45 41 53 45 20  me in a RELEASE 
4720: 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74  command does not
4730: 20 6d 61 74 63 68 20 61 6e 79 0a 73 61 76 65 70   match any.savep
4740: 6f 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 69  oint currently i
4750: 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  n the transactio
4760: 6e 20 73 74 61 63 6b 2c 20 74 68 65 6e 20 6e 6f  n stack, then no
4770: 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 0a   savepoints are.
4780: 72 65 6c 65 61 73 65 64 2c 20 74 68 65 20 64 61  released, the da
4790: 74 61 62 61 73 65 20 69 73 20 75 6e 63 68 61 6e  tabase is unchan
47a0: 67 65 64 2c 20 61 6e 64 20 74 68 65 20 52 45 4c  ged, and the REL
47b0: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65 74  EASE command ret
47c0: 75 72 6e 73 0a 61 6e 20 65 72 72 6f 72 2e 3c 2f  urns.an error.</
47d0: 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61  p>..<p>^Note tha
47e0: 74 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73  t an inner trans
47f0: 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 63 6f 6d  action might com
4800: 6d 69 74 20 28 75 73 69 6e 67 20 74 68 65 20 52  mit (using the R
4810: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 29 0a  ELEASE command).
4820: 62 75 74 20 74 68 65 6e 20 6c 61 74 65 72 20 68  but then later h
4830: 61 76 65 20 69 74 73 20 77 6f 72 6b 20 75 6e 64  ave its work und
4840: 6f 6e 65 20 62 79 20 61 20 52 4f 4c 4c 42 41 43  one by a ROLLBAC
4850: 4b 20 69 6e 20 61 6e 20 6f 75 74 65 72 20 74 72  K in an outer tr
4860: 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 20 70 6f  ansaction..^A po
4870: 77 65 72 20 66 61 69 6c 75 72 65 20 6f 72 20 70  wer failure or p
4880: 72 6f 67 72 61 6d 20 63 72 61 73 68 20 6f 72 20  rogram crash or 
4890: 4f 53 20 63 72 61 73 68 20 77 69 6c 6c 20 63 61  OS crash will ca
48a0: 75 73 65 20 74 68 65 20 6f 75 74 65 72 2d 6d 6f  use the outer-mo
48b0: 73 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 74  st.transaction t
48c0: 6f 20 72 6f 6c 6c 62 61 63 6b 2c 20 75 6e 64 6f  o rollback, undo
48d0: 69 6e 67 20 61 6c 6c 20 63 68 61 6e 67 65 73 20  ing all changes 
48e0: 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72  that have occurr
48f0: 65 64 20 77 69 74 68 69 6e 0a 74 68 61 74 20 6f  ed within.that o
4900: 75 74 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e  uter transaction
4910: 2c 20 65 76 65 6e 20 63 68 61 6e 67 65 73 20 74  , even changes t
4920: 68 61 74 20 68 61 76 65 20 73 75 70 70 6f 73 65  hat have suppose
4930: 64 6c 79 20 62 65 65 6e 20 22 63 6f 6d 6d 69 74  dly been "commit
4940: 74 65 64 22 0a 62 79 20 74 68 65 20 52 45 4c 45  ted".by the RELE
4950: 41 53 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 43  ASE command.  ^C
4960: 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 61 63  ontent is not ac
4970: 74 75 61 6c 6c 79 20 63 6f 6d 6d 69 74 74 65 64  tually committed
4980: 20 6f 6e 20 74 68 65 20 64 69 73 6b 20 0a 75 6e   on the disk .un
4990: 74 69 6c 20 74 68 65 20 6f 75 74 65 72 6d 6f 73  til the outermos
49a0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f  t transaction co
49b0: 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  mmits.</p>..<p>T
49c0: 68 65 72 65 20 61 72 65 20 73 65 76 65 72 61 6c  here are several
49d0: 20 77 61 79 73 20 6f 66 20 74 68 69 6e 6b 69 6e   ways of thinkin
49e0: 67 20 61 62 6f 75 74 20 74 68 65 20 52 45 4c 45  g about the RELE
49f0: 41 53 45 20 63 6f 6d 6d 61 6e 64 3a 3c 2f 70 3e  ASE command:</p>
4a00: 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 53  ..<ul>.<li><p>.S
4a10: 6f 6d 65 20 70 65 6f 70 6c 65 20 76 69 65 77 20  ome people view 
4a20: 52 45 4c 45 41 53 45 20 61 73 20 74 68 65 20 65  RELEASE as the e
4a30: 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 43 4f 4d  quivalent of COM
4a40: 4d 49 54 20 66 6f 72 20 61 20 53 41 56 45 50 4f  MIT for a SAVEPO
4a50: 49 4e 54 2e 0a 54 68 69 73 20 69 73 20 61 6e 20  INT..This is an 
4a60: 61 63 63 65 70 74 61 62 6c 65 20 70 6f 69 6e 74  acceptable point
4a70: 20 6f 66 20 76 69 65 77 20 61 73 20 6c 6f 6e 67   of view as long
4a80: 20 61 73 20 6f 6e 65 20 72 65 6d 65 6d 62 65 72   as one remember
4a90: 73 20 74 68 61 74 20 74 68 65 0a 63 68 61 6e 67  s that the.chang
4aa0: 65 73 20 63 6f 6d 6d 69 74 74 65 64 20 62 79 20  es committed by 
4ab0: 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63  an inner transac
4ac0: 74 69 6f 6e 20 6d 69 67 68 74 20 6c 61 74 65 72  tion might later
4ad0: 20 62 65 20 75 6e 64 6f 6e 65 20 62 79 20 61 0a   be undone by a.
4ae0: 72 6f 6c 6c 62 61 63 6b 20 69 6e 20 61 6e 20 6f  rollback in an o
4af0: 75 74 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e  uter transaction
4b00: 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e  .</p></li>..<li>
4b10: 3c 70 3e 0a 41 6e 6f 74 68 65 72 20 76 69 65 77  <p>.Another view
4b20: 20 6f 66 20 52 45 4c 45 41 53 45 20 69 73 20 74   of RELEASE is t
4b30: 68 61 74 20 69 74 20 6d 65 72 67 65 73 20 61 20  hat it merges a 
4b40: 6e 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f  named transactio
4b50: 6e 20 69 6e 74 6f 20 69 74 73 0a 70 61 72 65 6e  n into its.paren
4b60: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 73  t transaction, s
4b70: 6f 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65 64  o that the named
4b80: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64   transaction and
4b90: 20 69 74 73 20 70 61 72 65 6e 74 20 62 65 63 6f   its parent beco
4ba0: 6d 65 0a 74 68 65 20 73 61 6d 65 20 74 72 61 6e  me.the same tran
4bb0: 73 61 63 74 69 6f 6e 2e 20 20 41 66 74 65 72 20  saction.  After 
4bc0: 52 45 4c 45 41 53 45 2c 20 74 68 65 20 6e 61 6d  RELEASE, the nam
4bd0: 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  ed transaction a
4be0: 6e 64 20 69 74 73 20 70 61 72 65 6e 74 0a 77 69  nd its parent.wi
4bf0: 6c 6c 20 63 6f 6d 6d 69 74 20 6f 72 20 72 6f 6c  ll commit or rol
4c00: 6c 62 61 63 6b 20 74 6f 67 65 74 68 65 72 2c 20  lback together, 
4c10: 77 68 61 74 65 76 65 72 20 74 68 65 69 72 20 66  whatever their f
4c20: 61 74 65 20 6d 61 79 20 62 65 2e 0a 3c 2f 70 3e  ate may be..</p>
4c30: 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 4f  </li>..<li><p>.O
4c40: 6e 65 20 63 61 6e 20 61 6c 73 6f 20 74 68 69 6e  ne can also thin
4c50: 6b 20 6f 66 20 73 61 76 65 70 6f 69 6e 74 73 20  k of savepoints 
4c60: 61 73 0a 22 6d 61 72 6b 73 22 20 69 6e 20 74 68  as."marks" in th
4c70: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 69  e transaction ti
4c80: 6d 65 6c 69 6e 65 2e 20 20 49 6e 20 74 68 69 73  meline.  In this
4c90: 20 76 69 65 77 2c 20 74 68 65 20 53 41 56 45 50   view, the SAVEP
4ca0: 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 0a 63 72 65  OINT command.cre
4cb0: 61 74 65 73 20 61 20 6e 65 77 20 6d 61 72 6b 2c  ates a new mark,
4cc0: 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f   the ROLLBACK TO
4cd0: 20 63 6f 6d 6d 61 6e 64 20 72 65 77 69 6e 64 73   command rewinds
4ce0: 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 20 62 61   the timeline ba
4cf0: 63 6b 0a 74 6f 20 61 20 70 6f 69 6e 74 20 6a 75  ck.to a point ju
4d00: 73 74 20 61 66 74 65 72 20 74 68 65 20 6e 61 6d  st after the nam
4d10: 65 64 20 6d 61 72 6b 2c 20 61 6e 64 20 74 68 65  ed mark, and the
4d20: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
4d30: 0a 65 72 61 73 65 73 20 6d 61 72 6b 73 20 66 72  .erases marks fr
4d40: 6f 6d 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 20  om the timeline 
4d50: 77 69 74 68 6f 75 74 20 61 63 74 75 61 6c 6c 79  without actually
4d60: 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 63 68 61 6e   making any.chan
4d70: 67 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62  ges to the datab
4d80: 61 73 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c  ase..</p></li>.<
4d90: 2f 75 6c 3e 0a 0a 0a 0a 3c 68 33 3e 54 72 61 6e  /ul>....<h3>Tran
4da0: 73 61 63 74 69 6f 6e 20 4e 65 73 74 69 6e 67 20  saction Nesting 
4db0: 52 75 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  Rules</h3>..<p>^
4dc0: 54 68 65 20 6c 61 73 74 20 74 72 61 6e 73 61 63  The last transac
4dd0: 74 69 6f 6e 20 73 74 61 72 74 65 64 20 77 69 6c  tion started wil
4de0: 6c 20 62 65 20 74 68 65 20 66 69 72 73 74 0a 74  l be the first.t
4df0: 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69  ransaction commi
4e00: 74 74 65 64 20 6f 72 20 72 6f 6c 6c 65 64 20 62  tted or rolled b
4e10: 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ack.</p>..<p>^Th
4e20: 65 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e  e [BEGIN] comman
4e30: 64 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20  d only works if 
4e40: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
4e50: 73 74 61 63 6b 20 69 73 20 65 6d 70 74 79 2c 20  stack is empty, 
4e60: 6f 72 0a 69 6e 20 6f 74 68 65 72 20 77 6f 72 64  or.in other word
4e70: 73 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e  s if there are n
4e80: 6f 20 70 65 6e 64 69 6e 67 20 74 72 61 6e 73 61  o pending transa
4e90: 63 74 69 6f 6e 73 2e 20 20 5e 49 66 20 74 68 65  ctions.  ^If the
4ea0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 73 74 61   transaction.sta
4eb0: 63 6b 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20  ck is not empty 
4ec0: 77 68 65 6e 20 74 68 65 20 5b 42 45 47 49 4e 5d  when the [BEGIN]
4ed0: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e 76 6f   command is invo
4ee0: 6b 65 64 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  ked, then the co
4ef0: 6d 6d 61 6e 64 0a 66 61 69 6c 73 20 77 69 74 68  mmand.fails with
4f00: 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a   an error.</p>..
4f10: 3c 70 3e 5e 54 68 65 20 5b 43 4f 4d 4d 49 54 5d  <p>^The [COMMIT]
4f20: 20 63 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 69 74 73   command commits
4f30: 20 61 6c 6c 20 6f 75 74 73 74 61 6e 64 69 6e 67   all outstanding
4f40: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 6e   transactions an
4f50: 64 20 6c 65 61 76 65 73 0a 74 68 65 20 74 72 61  d leaves.the tra
4f60: 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 65  nsaction stack e
4f70: 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  mpty.</p>..<p>^T
4f80: 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  he RELEASE comma
4f90: 6e 64 20 73 74 61 72 74 73 20 77 69 74 68 20 74  nd starts with t
4fa0: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 61  he most recent a
4fb0: 64 64 69 74 69 6f 6e 20 74 6f 20 74 68 65 0a 74  ddition to the.t
4fc0: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b  ransaction stack
4fd0: 20 61 6e 64 20 72 65 6c 65 61 73 65 73 20 73 61   and releases sa
4fe0: 76 65 70 6f 69 6e 74 73 20 62 61 63 6b 77 61 72  vepoints backwar
4ff0: 64 73 20 0a 69 6e 20 74 69 6d 65 20 75 6e 74 69  ds .in time unti
5000: 6c 20 69 74 20 72 65 6c 65 61 73 65 73 20 61 20  l it releases a 
5010: 73 61 76 65 70 6f 69 6e 74 20 77 69 74 68 20 61  savepoint with a
5020: 20 6d 61 74 63 68 69 6e 67 20 73 61 76 65 70 6f   matching savepo
5030: 69 6e 74 2d 6e 61 6d 65 2e 0a 5e 50 72 69 6f 72  int-name..^Prior
5040: 20 73 61 76 65 70 6f 69 6e 74 73 2c 20 65 76 65   savepoints, eve
5050: 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 77 69 74  n savepoints wit
5060: 68 20 6d 61 74 63 68 69 6e 67 20 73 61 76 65 70  h matching savep
5070: 6f 69 6e 74 2d 6e 61 6d 65 73 2c 20 61 72 65 0a  oint-names, are.
5080: 75 6e 63 68 61 6e 67 65 64 2e 0a 5e 49 66 20 74  unchanged..^If t
5090: 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  he RELEASE comma
50a0: 6e 64 20 63 61 75 73 65 73 20 74 68 65 0a 74 72  nd causes the.tr
50b0: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20  ansaction stack 
50c0: 74 6f 20 62 65 63 6f 6d 65 20 65 6d 70 74 79 20  to become empty 
50d0: 28 69 66 20 74 68 65 20 52 45 4c 45 41 53 45 20  (if the RELEASE 
50e0: 63 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65 73  command releases
50f0: 20 74 68 65 0a 6f 75 74 65 72 6d 6f 73 74 20 74   the.outermost t
5100: 72 61 6e 73 61 63 74 69 6f 6e 20 66 72 6f 6d 20  ransaction from 
5110: 74 68 65 20 73 74 61 63 6b 29 20 74 68 65 6e 20  the stack) then 
5120: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
5130: 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70  commits.</p>..<p
5140: 3e 5e 54 68 65 20 5b 52 4f 4c 4c 42 41 43 4b 5d  >^The [ROLLBACK]
5150: 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74   command without
5160: 20 61 20 54 4f 20 63 6c 61 75 73 65 20 72 6f 6c   a TO clause rol
5170: 6c 73 20 62 61 63 6b 73 20 61 6c 6c 20 74 72 61  ls backs all tra
5180: 6e 73 61 63 74 69 6f 6e 73 0a 61 6e 64 20 6c 65  nsactions.and le
5190: 61 76 65 73 20 74 68 65 20 74 72 61 6e 73 61 63  aves the transac
51a0: 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70 74 79  tion stack empty
51b0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52  .</p>..<p>^The R
51c0: 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20  OLLBACK command 
51d0: 77 69 74 68 20 61 20 54 4f 20 63 6c 61 75 73 65  with a TO clause
51e0: 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74 72 61 6e   rolls back tran
51f0: 73 61 63 74 69 6f 6e 73 20 67 6f 69 6e 67 0a 62  sactions going.b
5200: 61 63 6b 77 61 72 64 73 20 69 6e 20 74 69 6d 65  ackwards in time
5210: 20 62 61 63 6b 20 74 6f 20 74 68 65 20 6d 6f 73   back to the mos
5220: 74 20 72 65 63 65 6e 74 20 53 41 56 45 50 4f 49  t recent SAVEPOI
5230: 4e 54 20 77 69 74 68 20 61 20 6d 61 74 63 68 69  NT with a matchi
5240: 6e 67 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 53 41  ng name..^The SA
5250: 56 45 50 4f 49 4e 54 20 77 69 74 68 20 74 68 65  VEPOINT with the
5260: 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 20 72   matching name r
5270: 65 6d 61 69 6e 73 20 6f 6e 20 74 68 65 20 74 72  emains on the tr
5280: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2c  ansaction stack,
5290: 0a 62 75 74 20 61 6c 6c 20 64 61 74 61 62 61 73  .but all databas
52a0: 65 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 6f  e changes that o
52b0: 63 63 75 72 72 65 64 20 61 66 74 65 72 20 74 68  ccurred after th
52c0: 61 74 20 53 41 56 45 50 4f 49 4e 54 20 77 61 73  at SAVEPOINT was
52d0: 20 63 72 65 61 74 65 64 0a 61 72 65 20 72 6f 6c   created.are rol
52e0: 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49 66 20 74  led back.  ^If t
52f0: 68 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d  he savepoint-nam
5300: 65 20 69 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20  e in a ROLLBACK 
5310: 54 4f 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20  TO command does 
5320: 6e 6f 74 0a 6d 61 74 63 68 20 61 6e 79 20 53 41  not.match any SA
5330: 56 45 50 4f 49 4e 54 20 6f 6e 20 74 68 65 20 73  VEPOINT on the s
5340: 74 61 63 6b 2c 20 74 68 65 6e 20 74 68 65 20 52  tack, then the R
5350: 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20  OLLBACK command 
5360: 66 61 69 6c 73 20 77 69 74 68 20 61 6e 0a 65 72  fails with an.er
5370: 72 6f 72 20 61 6e 64 20 6c 65 61 76 65 73 20 74  ror and leaves t
5380: 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20  he state of the 
5390: 64 61 74 61 62 61 73 65 20 75 6e 63 68 61 6e 67  database unchang
53a0: 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  ed.</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 23 23 23 0a 53  ##############.S
5400: 65 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74 20 63  ection comment c
5410: 6f 6d 6d 65 6e 74 20 7b 63 6f 6d 6d 65 6e 74 20  omment {comment 
5420: 2a 63 6f 6d 6d 65 6e 74 73 7d 0a 0a 42 75 62 62  *comments}..Bubb
5430: 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d 6d 65 6e  leDiagram commen
5440: 74 2d 73 79 6e 74 61 78 0a 3c 2f 74 63 6c 3e 0a  t-syntax.</tcl>.
5450: 0a 3c 70 3e 5e 43 6f 6d 6d 65 6e 74 73 20 61 72  .<p>^Comments ar
5460: 65 20 6e 6f 74 20 53 51 4c 20 63 6f 6d 6d 61 6e  e not SQL comman
5470: 64 73 2c 20 62 75 74 20 63 61 6e 20 6f 63 63 75  ds, but can occu
5480: 72 20 77 69 74 68 69 6e 20 74 68 65 20 74 65 78  r within the tex
5490: 74 20 6f 66 0a 53 51 4c 20 71 75 65 72 69 65 73  t of.SQL queries
54a0: 20 70 61 73 73 65 64 20 74 6f 20 5b 73 71 6c 69   passed to [sqli
54b0: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29  te3_prepare_v2()
54c0: 5d 20 61 6e 64 20 72 65 6c 61 74 65 64 20 69 6e  ] and related in
54d0: 74 65 72 66 61 63 65 73 2e 0a 5e 43 6f 6d 6d 65  terfaces..^Comme
54e0: 6e 74 73 20 61 72 65 20 74 72 65 61 74 65 64 20  nts are treated 
54f0: 61 73 20 77 68 69 74 65 73 70 61 63 65 20 62 79  as whitespace by
5500: 20 74 68 65 20 70 61 72 73 65 72 2e 0a 5e 43 6f   the parser..^Co
5510: 6d 6d 65 6e 74 73 20 63 61 6e 20 62 65 67 69 6e  mments can begin
5520: 20 61 6e 79 77 68 65 72 65 20 77 68 69 74 65 73   anywhere whites
5530: 70 61 63 65 20 0a 63 61 6e 20 62 65 20 66 6f 75  pace .can be fou
5540: 6e 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6e  nd, including in
5550: 73 69 64 65 20 65 78 70 72 65 73 73 69 6f 6e 73  side expressions
5560: 20 74 68 61 74 20 73 70 61 6e 20 6d 75 6c 74 69   that span multi
5570: 70 6c 65 20 6c 69 6e 65 73 2e 0a 3c 2f 70 3e 0a  ple lines..</p>.
5580: 0a 3c 70 3e 5e 53 51 4c 20 63 6f 6d 6d 65 6e 74  .<p>^SQL comment
5590: 73 20 62 65 67 69 6e 20 77 69 74 68 20 74 77 6f  s begin with two
55a0: 20 63 6f 6e 73 65 63 75 74 69 76 65 20 22 2d 22   consecutive "-"
55b0: 20 63 68 61 72 61 63 74 65 72 73 20 28 41 53 43   characters (ASC
55c0: 49 49 20 30 78 32 64 29 0a 61 6e 64 20 65 78 74  II 0x2d).and ext
55d0: 65 6e 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e  end up to and in
55e0: 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74  cluding the next
55f0: 20 6e 65 77 6c 69 6e 65 20 63 68 61 72 61 63 74   newline charact
5600: 65 72 20 28 41 53 43 49 49 20 30 78 30 61 29 0a  er (ASCII 0x0a).
5610: 6f 72 20 75 6e 74 69 6c 20 74 68 65 20 65 6e 64  or until the end
5620: 20 6f 66 20 69 6e 70 75 74 2c 20 77 68 69 63 68   of input, which
5630: 65 76 65 72 20 63 6f 6d 65 73 20 66 69 72 73 74  ever comes first
5640: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 2d 73 74 79  .</p>..<p>^C-sty
5650: 6c 65 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67 69  le comments begi
5660: 6e 0a 77 69 74 68 20 22 2f 2a 22 20 61 6e 64 20  n.with "/*" and 
5670: 65 78 74 65 6e 64 20 75 70 20 74 6f 20 61 6e 64  extend up to and
5680: 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e   including the n
5690: 65 78 74 20 22 2a 2f 22 20 63 68 61 72 61 63 74  ext "*/" charact
56a0: 65 72 20 70 61 69 72 0a 6f 72 20 75 6e 74 69 6c  er pair.or until
56b0: 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75   the end of inpu
56c0: 74 2c 20 77 68 69 63 68 65 76 65 72 20 63 6f 6d  t, whichever com
56d0: 65 73 20 66 69 72 73 74 2e 20 20 5e 43 2d 73 74  es first.  ^C-st
56e0: 79 6c 65 20 63 6f 6d 6d 65 6e 74 73 0a 63 61 6e  yle comments.can
56f0: 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c   span multiple l
5700: 69 6e 65 73 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ines. </p>..<p>^
5710: 43 6f 6d 6d 65 6e 74 73 20 63 61 6e 20 61 70 70  Comments can app
5720: 65 61 72 20 61 6e 79 77 68 65 72 65 20 77 68 69  ear anywhere whi
5730: 74 65 73 70 61 63 65 20 63 61 6e 20 6f 63 63 75  tespace can occu
5740: 72 2c 0a 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73  r,.including ins
5750: 69 64 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ide expressions 
5760: 61 6e 64 20 69 6e 20 74 68 65 20 6d 69 64 64 6c  and in the middl
5770: 65 20 6f 66 20 6f 74 68 65 72 20 53 51 4c 20 73  e of other SQL s
5780: 74 61 74 65 6d 65 6e 74 73 2e 0a 5e 43 6f 6d 6d  tatements..^Comm
5790: 65 6e 74 73 20 64 6f 20 6e 6f 74 20 6e 65 73 74  ents do not nest
57a0: 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 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 23 23 23 0a 53 65  #############.Se
5800: 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 49 4e  ction {CREATE IN
5810: 44 45 58 7d 20 63 72 65 61 74 65 69 6e 64 65 78  DEX} createindex
5820: 20 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d   {{CREATE INDEX}
5830: 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  }..BubbleDiagram
5840: 20 63 72 65 61 74 65 2d 69 6e 64 65 78 2d 73 74   create-index-st
5850: 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61 67 72  mt 1.BubbleDiagr
5860: 61 6d 20 69 6e 64 65 78 65 64 2d 63 6f 6c 75 6d  am indexed-colum
5870: 6e 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  n.</tcl>..<p>^Th
5880: 65 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 63  e CREATE INDEX c
5890: 6f 6d 6d 61 6e 64 20 63 6f 6e 73 69 73 74 73 20  ommand consists 
58a0: 6f 66 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20  of the keywords 
58b0: 22 43 52 45 41 54 45 20 49 4e 44 45 58 22 20 66  "CREATE INDEX" f
58c0: 6f 6c 6c 6f 77 65 64 0a 62 79 20 74 68 65 20 6e  ollowed.by the n
58d0: 61 6d 65 20 6f 66 20 74 68 65 20 6e 65 77 20 69  ame of the new i
58e0: 6e 64 65 78 2c 20 74 68 65 20 6b 65 79 77 6f 72  ndex, the keywor
58f0: 64 20 22 4f 4e 22 2c 20 74 68 65 20 6e 61 6d 65  d "ON", the name
5900: 20 6f 66 20 61 20 70 72 65 76 69 6f 75 73 6c 79   of a previously
5910: 0a 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 74  .created table t
5920: 68 61 74 20 69 73 20 74 6f 20 62 65 20 69 6e 64  hat is to be ind
5930: 65 78 65 64 2c 20 61 6e 64 20 61 20 70 61 72 65  exed, and a pare
5940: 6e 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f  nthesized list o
5950: 66 20 6e 61 6d 65 73 20 6f 66 0a 63 6f 6c 75 6d  f names of.colum
5960: 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ns in the table 
5970: 74 68 61 74 20 61 72 65 20 75 73 65 64 20 66 6f  that are used fo
5980: 72 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e  r the index key.
5990: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 45 61 63 68 20 63  </p>..<p>^Each c
59a0: 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 6e 20 62  olumn name can b
59b0: 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6f 6e  e followed by on
59c0: 65 20 6f 66 20 74 68 65 20 22 41 53 43 22 20 6f  e of the "ASC" o
59d0: 72 20 22 44 45 53 43 22 20 6b 65 79 77 6f 72 64  r "DESC" keyword
59e0: 73 0a 74 6f 20 69 6e 64 69 63 61 74 65 20 73 6f  s.to indicate so
59f0: 72 74 20 6f 72 64 65 72 2e 20 20 5e 54 68 65 20  rt order.  ^The 
5a00: 73 6f 72 74 20 6f 72 64 65 72 20 6d 61 79 20 6f  sort order may o
5a10: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 69 67 6e  r may not be ign
5a20: 6f 72 65 64 20 64 65 70 65 6e 64 69 6e 67 0a 6f  ored depending.o
5a30: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
5a40: 69 6c 65 20 66 6f 72 6d 61 74 2e 20 20 5e 54 68  ile format.  ^Th
5a50: 65 20 22 6c 65 67 61 63 79 22 20 66 69 6c 65 20  e "legacy" file 
5a60: 66 6f 72 6d 61 74 20 69 67 6e 6f 72 65 73 20 69  format ignores i
5a70: 6e 64 65 78 0a 73 6f 72 74 20 6f 72 64 65 72 2e  ndex.sort order.
5a80: 20 20 5e 54 68 65 20 64 65 73 63 65 6e 64 69 6e    ^The descendin
5a90: 67 20 69 6e 64 65 78 20 66 69 6c 65 20 66 6f 72  g index file for
5aa0: 6d 61 74 20 74 61 6b 65 73 20 69 6e 64 65 78 20  mat takes index 
5ab0: 73 6f 72 74 20 6f 72 64 65 72 0a 69 6e 74 6f 20  sort order.into 
5ac0: 61 63 63 6f 75 6e 74 2e 20 20 5e 28 4f 6e 6c 79  account.  ^(Only
5ad0: 20 63 6f 70 69 65 73 20 6f 66 20 53 51 4c 69 74   copies of SQLit
5ae0: 65 20 6e 65 77 65 72 20 74 68 61 6e 20 5b 76 65  e newer than [ve
5af0: 72 73 69 6f 6e 20 33 2e 33 2e 30 5d 20 0a 28 72  rsion 3.3.0] .(r
5b00: 65 6c 65 61 73 65 64 20 6f 6e 20 32 30 30 36 2d  eleased on 2006-
5b10: 30 31 2d 31 30 29 20 61 72 65 20 61 62 6c 65 20  01-10) are able 
5b20: 74 6f 20 75 6e 64 65 72 73 74 61 6e 64 20 74 68  to understand th
5b30: 65 20 6e 65 77 65 72 20 64 65 73 63 65 6e 64 69  e newer descendi
5b40: 6e 67 0a 69 6e 64 65 78 20 66 69 6c 65 20 66 6f  ng.index file fo
5b50: 72 6d 61 74 20 61 6e 64 20 73 6f 20 66 6f 72 20  rmat and so for 
5b60: 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69  compatibility wi
5b70: 74 68 20 6f 6c 64 65 72 20 76 65 72 73 69 6f 6e  th older version
5b80: 73 20 6f 66 0a 53 51 4c 69 74 65 2c 20 74 68 65  s of.SQLite, the
5b90: 20 6c 65 67 61 63 79 20 66 69 6c 65 20 66 6f 72   legacy file for
5ba0: 6d 61 74 20 69 73 20 67 65 6e 65 72 61 74 65 64  mat is generated
5bb0: 20 62 79 20 64 65 66 61 75 6c 74 2e 29 5e 20 20   by default.)^  
5bc0: 5e 55 73 65 20 74 68 65 0a 5b 6c 65 67 61 63 79  ^Use the.[legacy
5bd0: 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 5d 20 70 72  _file_format] pr
5be0: 61 67 6d 61 20 74 6f 20 6d 6f 64 69 66 79 20 74  agma to modify t
5bf0: 68 69 73 20 62 65 68 61 76 69 6f 72 20 61 6e 64  his behavior and
5c00: 20 67 65 6e 65 72 61 74 65 0a 64 61 74 61 62 61   generate.databa
5c10: 73 65 73 20 74 68 61 74 20 75 73 65 20 74 68 65  ses that use the
5c20: 20 6e 65 77 65 72 20 66 69 6c 65 20 66 6f 72 6d   newer file form
5c30: 61 74 2e 20 20 46 75 74 75 72 65 20 76 65 72 73  at.  Future vers
5c40: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 6d  ions of SQLite.m
5c50: 61 79 20 62 65 67 69 6e 20 74 6f 20 67 65 6e 65  ay begin to gene
5c60: 72 61 74 65 20 74 68 65 20 6e 65 77 65 72 20 66  rate the newer f
5c70: 69 6c 65 20 66 6f 72 6d 61 74 20 62 79 20 64 65  ile format by de
5c80: 66 61 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  fault.</p>..<p>^
5c90: 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75  The COLLATE clau
5ca0: 73 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f  se optionally fo
5cb0: 6c 6c 6f 77 69 6e 67 20 65 61 63 68 20 63 6f 6c  llowing each col
5cc0: 75 6d 6e 20 6e 61 6d 65 20 64 65 66 69 6e 65 73  umn name defines
5cd0: 20 61 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71   a.collating seq
5ce0: 75 65 6e 63 65 20 75 73 65 64 20 66 6f 72 20 74  uence used for t
5cf0: 65 78 74 20 65 6e 74 72 69 65 73 20 69 6e 20 74  ext entries in t
5d00: 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 5e 54 68 65  hat column..^The
5d10: 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
5d20: 6e 67 0a 73 65 71 75 65 6e 63 65 20 69 73 20 74  ng.sequence is t
5d30: 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  he collating seq
5d40: 75 65 6e 63 65 20 64 65 66 69 6e 65 64 20 66 6f  uence defined fo
5d50: 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69 6e  r that column in
5d60: 20 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42   the.[CREATE TAB
5d70: 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  LE] statement.  
5d80: 5e 4f 72 20 69 66 20 6e 6f 20 63 6f 6c 6c 61 74  ^Or if no collat
5d90: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20  ing sequence is 
5da0: 6f 74 68 65 72 77 69 73 65 20 64 65 66 69 6e 65  otherwise define
5db0: 64 2c 0a 74 68 65 20 62 75 69 6c 74 2d 69 6e 20  d,.the built-in 
5dc0: 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67  BINARY collating
5dd0: 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 73 65   sequence is use
5de0: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 72 65  d.</p>..<p>There
5df0: 20 61 72 65 20 6e 6f 20 61 72 62 69 74 72 61 72   are no arbitrar
5e00: 79 20 6c 69 6d 69 74 73 20 6f 6e 20 74 68 65 20  y limits on the 
5e10: 6e 75 6d 62 65 72 20 6f 66 20 69 6e 64 69 63 65  number of indice
5e20: 73 20 74 68 61 74 20 63 61 6e 20 62 65 0a 61 74  s that can be.at
5e30: 74 61 63 68 65 64 20 74 6f 20 61 20 73 69 6e 67  tached to a sing
5e40: 6c 65 20 74 61 62 6c 65 2e 20 20 5e 28 54 68 65  le table.  ^(The
5e50: 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
5e60: 6e 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 69  ns in an index i
5e70: 73 20 0a 6c 69 6d 69 74 65 64 20 74 6f 20 74 68  s .limited to th
5e80: 65 20 76 61 6c 75 65 20 73 65 74 20 62 79 0a 5b  e value set by.[
5e90: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d 28 5b  sqlite3_limit]([
5ea0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c  SQLITE_LIMIT_COL
5eb0: 55 4d 4e 5d 2c 2e 2e 2e 29 2e 29 5e 3c 2f 70 3e  UMN],...).)^</p>
5ec0: 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55 4e 49  ..<p>^If the UNI
5ed0: 51 55 45 20 6b 65 79 77 6f 72 64 20 61 70 70 65  QUE keyword appe
5ee0: 61 72 73 20 62 65 74 77 65 65 6e 20 43 52 45 41  ars between CREA
5ef0: 54 45 20 61 6e 64 20 49 4e 44 45 58 20 74 68 65  TE and INDEX the
5f00: 6e 20 64 75 70 6c 69 63 61 74 65 0a 69 6e 64 65  n duplicate.inde
5f10: 78 20 65 6e 74 72 69 65 73 20 61 72 65 20 6e 6f  x entries are no
5f20: 74 20 61 6c 6c 6f 77 65 64 2e 20 20 5e 41 6e 79  t allowed.  ^Any
5f30: 20 61 74 74 65 6d 70 74 20 74 6f 20 69 6e 73 65   attempt to inse
5f40: 72 74 20 61 20 64 75 70 6c 69 63 61 74 65 20 65  rt a duplicate e
5f50: 6e 74 72 79 0a 77 69 6c 6c 20 72 65 73 75 6c 74  ntry.will result
5f60: 20 69 6e 20 61 6e 20 65 72 72 6f 72 2e 20 20 5e   in an error.  ^
5f70: 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
5f80: 20 6f 66 20 75 6e 69 71 75 65 20 69 6e 64 69 63   of unique indic
5f90: 65 73 2c 20 61 6c 6c 20 4e 55 4c 4c 20 76 61 6c  es, all NULL val
5fa0: 75 65 73 0a 61 72 65 20 63 6f 6e 73 69 64 65 72  ues.are consider
5fb0: 65 64 20 74 6f 20 64 69 66 66 65 72 65 6e 74 20  ed to different 
5fc0: 66 72 6f 6d 20 61 6c 6c 20 6f 74 68 65 72 20 4e  from all other N
5fd0: 55 4c 4c 20 76 61 6c 75 65 73 20 61 6e 64 20 61  ULL values and a
5fe0: 72 65 20 74 68 75 73 20 75 6e 69 71 75 65 2e 0a  re thus unique..
5ff0: 54 68 69 73 20 69 73 20 6f 6e 65 20 6f 66 20 74  This is one of t
6000: 68 65 20 74 77 6f 20 70 6f 73 73 69 62 6c 65 20  he two possible 
6010: 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 73 20  interpretations 
6020: 6f 66 20 74 68 65 20 53 51 4c 2d 39 32 20 73 74  of the SQL-92 st
6030: 61 6e 64 61 72 64 0a 28 74 68 65 20 6c 61 6e 67  andard.(the lang
6040: 75 61 67 65 20 69 6e 20 74 68 65 20 73 74 61 6e  uage in the stan
6050: 64 61 72 64 20 69 73 20 61 6d 62 69 67 75 6f 75  dard is ambiguou
6060: 73 29 20 61 6e 64 20 69 73 20 74 68 65 20 69 6e  s) and is the in
6070: 74 65 72 70 72 65 74 61 74 69 6f 6e 0a 66 6f 6c  terpretation.fol
6080: 6c 6f 77 65 64 20 62 79 20 50 6f 73 74 67 72 65  lowed by Postgre
6090: 53 51 4c 2c 20 4d 79 53 51 4c 2c 20 46 69 72 65  SQL, MySQL, Fire
60a0: 62 69 72 64 2c 20 61 6e 64 20 4f 72 61 63 6c 65  bird, and Oracle
60b0: 2e 20 20 49 6e 66 6f 72 6d 69 78 20 61 6e 64 0a  .  Informix and.
60c0: 4d 69 63 72 6f 73 6f 66 74 20 53 51 4c 20 53 65  Microsoft SQL Se
60d0: 72 76 65 72 20 66 6f 6c 6c 6f 77 20 74 68 65 20  rver follow the 
60e0: 6f 74 68 65 72 20 69 6e 74 65 72 70 72 65 74 61  other interpreta
60f0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 74 61 6e  tion of the stan
6100: 64 61 72 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  dard.</p>..<p>^I
6110: 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 49  f the optional I
6120: 46 20 4e 4f 54 20 45 58 49 53 54 53 20 63 6c 61  F NOT EXISTS cla
6130: 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 20 61  use is present a
6140: 6e 64 20 61 6e 6f 74 68 65 72 20 69 6e 64 65 78  nd another index
6150: 0a 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e  .with the same n
6160: 61 6d 65 20 61 6c 72 65 61 64 79 20 65 78 69 73  ame already exis
6170: 74 73 2c 20 74 68 65 6e 20 74 68 69 73 20 63 6f  ts, then this co
6180: 6d 6d 61 6e 64 20 62 65 63 6f 6d 65 73 20 61 20  mmand becomes a 
6190: 6e 6f 2d 6f 70 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  no-op.</p>..<p>^
61a0: 49 6e 64 65 78 65 73 20 61 72 65 20 72 65 6d 6f  Indexes are remo
61b0: 76 65 64 20 77 69 74 68 20 74 68 65 20 5b 44 52  ved with the [DR
61c0: 4f 50 20 49 4e 44 45 58 5d 20 63 6f 6d 6d 61 6e  OP INDEX] comman
61d0: 64 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23  d.</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 23 23 23 0a 53 65  #############.Se
6230: 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 41  ction {CREATE TA
6240: 42 4c 45 7d 20 7b 63 72 65 61 74 65 74 61 62 6c  BLE} {createtabl
6250: 65 7d 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c  e} {{CREATE TABL
6260: 45 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  E}}..BubbleDiagr
6270: 61 6d 20 63 72 65 61 74 65 2d 74 61 62 6c 65 2d  am create-table-
6280: 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61  stmt 1.BubbleDia
6290: 67 72 61 6d 20 63 6f 6c 75 6d 6e 2d 64 65 66 0a  gram column-def.
62a0: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 74 79  BubbleDiagram ty
62b0: 70 65 2d 6e 61 6d 65 0a 42 75 62 62 6c 65 44 69  pe-name.BubbleDi
62c0: 61 67 72 61 6d 20 63 6f 6c 75 6d 6e 2d 63 6f 6e  agram column-con
62d0: 73 74 72 61 69 6e 74 0a 42 75 62 62 6c 65 44 69  straint.BubbleDi
62e0: 61 67 72 61 6d 20 74 61 62 6c 65 2d 63 6f 6e 73  agram table-cons
62f0: 74 72 61 69 6e 74 0a 42 75 62 62 6c 65 44 69 61  traint.BubbleDia
6300: 67 72 61 6d 20 66 6f 72 65 69 67 6e 2d 6b 65 79  gram foreign-key
6310: 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a  -clause.</tcl>..
6320: 3c 70 3e 5e 41 20 43 52 45 41 54 45 20 54 41 42  <p>^A CREATE TAB
6330: 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  LE statement is 
6340: 62 61 73 69 63 61 6c 6c 79 20 74 68 65 20 6b 65  basically the ke
6350: 79 77 6f 72 64 73 20 22 43 52 45 41 54 45 20 54  ywords "CREATE T
6360: 41 42 4c 45 22 0a 66 6f 6c 6c 6f 77 65 64 20 62  ABLE".followed b
6370: 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  y the name of a 
6380: 6e 65 77 20 74 61 62 6c 65 20 61 6e 64 20 61 20  new table and a 
6390: 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c 69  parenthesized li
63a0: 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 0a 64 65 66  st of column.def
63b0: 69 6e 69 74 69 6f 6e 73 20 61 6e 64 20 63 6f 6e  initions and con
63c0: 73 74 72 61 69 6e 74 73 2e 20 20 0a 5e 54 61 62  straints.  .^Tab
63d0: 6c 65 73 20 6e 61 6d 65 73 20 74 68 61 74 20 62  les names that b
63e0: 65 67 69 6e 20 77 69 74 68 20 22 3c 62 3e 73 71  egin with "<b>sq
63f0: 6c 69 74 65 5f 3c 2f 62 3e 22 20 61 72 65 20 72  lite_</b>" are r
6400: 65 73 65 72 76 65 64 0a 66 6f 72 20 75 73 65 20  eserved.for use 
6410: 62 79 20 53 51 4c 69 74 65 20 69 74 73 65 6c 66  by SQLite itself
6420: 20 61 6e 64 20 63 61 6e 6e 6f 74 20 6e 6f 72 6d   and cannot norm
6430: 61 6c 6c 79 0a 61 70 70 65 61 72 20 69 6e 20 61  ally.appear in a
6440: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
6450: 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74  atement.</p>..<t
6460: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b  cl>hd_fragment {
6470: 74 61 62 6c 65 63 6f 6c 64 65 66 7d 20 7b 63 6f  tablecoldef} {co
6480: 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 7d  lumn definition}
6490: 20 7b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74   {column definit
64a0: 69 6f 6e 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  ions}</tcl>.<p>^
64b0: 45 61 63 68 20 63 6f 6c 75 6d 6e 20 64 65 66 69  Each column defi
64c0: 6e 69 74 69 6f 6e 20 69 73 20 74 68 65 20 6e 61  nition is the na
64d0: 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  me of the column
64e0: 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c   optionally foll
64f0: 6f 77 65 64 20 62 79 20 74 68 65 0a 5b 64 61 74  owed by the.[dat
6500: 61 74 79 70 65 5d 20 66 6f 72 20 74 68 61 74 20  atype] for that 
6510: 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20 6f 6e 65  column, then one
6520: 20 6f 72 20 6d 6f 72 65 20 6f 70 74 69 6f 6e 61   or more optiona
6530: 6c 20 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72 61  l column constra
6540: 69 6e 74 73 2e 0a 5e 53 51 4c 69 74 65 20 75 73  ints..^SQLite us
6550: 65 73 20 5b 64 79 6e 61 6d 69 63 20 74 79 70 69  es [dynamic typi
6560: 6e 67 5d 3b 20 0a 74 68 65 20 64 61 74 61 74 79  ng]; .the dataty
6570: 70 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  pe for the colum
6580: 6e 20 64 6f 65 73 20 6e 6f 74 20 72 65 73 74 72  n does not restr
6590: 69 63 74 20 77 68 61 74 20 64 61 74 61 20 6d 61  ict what data ma
65a0: 79 20 62 65 20 70 75 74 0a 69 6e 20 74 68 61 74  y be put.in that
65b0: 20 63 6f 6c 75 6d 6e 2e 0a 5e 54 68 65 20 55 4e   column..^The UN
65c0: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
65d0: 63 61 75 73 65 73 20 61 6e 20 75 6e 69 71 75 65  causes an unique
65e0: 20 69 6e 64 65 78 20 74 6f 20 62 65 20 63 72 65   index to be cre
65f0: 61 74 65 64 20 6f 6e 20 74 68 65 20 73 70 65 63  ated on the spec
6600: 69 66 69 65 64 0a 63 6f 6c 75 6d 6e 73 2e 20 20  ified.columns.  
6610: 5e 41 6c 6c 20 4e 55 4c 4c 20 76 61 6c 75 65 73  ^All NULL values
6620: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
6630: 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 65  different from e
6640: 61 63 68 20 6f 74 68 65 72 20 61 6e 64 20 66 72  ach other and fr
6650: 6f 6d 0a 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c  om.all other val
6660: 75 65 73 20 66 6f 72 20 74 68 65 20 70 75 72 70  ues for the purp
6670: 6f 73 65 20 6f 66 20 64 65 74 65 72 6d 69 6e 69  ose of determini
6680: 6e 67 20 75 6e 69 71 75 65 6e 65 73 73 2c 20 68  ng uniqueness, h
6690: 65 6e 63 65 20 61 20 55 4e 49 51 55 45 0a 63 6f  ence a UNIQUE.co
66a0: 6c 75 6d 6e 20 6d 61 79 20 63 6f 6e 74 61 69 6e  lumn may contain
66b0: 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65   multiple entrie
66c0: 73 20 77 69 74 68 20 74 68 65 20 76 61 6c 75 65  s with the value
66d0: 20 6f 66 20 4e 55 4c 4c 2e 0a 5e 54 68 65 20 43   of NULL..^The C
66e0: 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 73 70  OLLATE clause sp
66f0: 65 63 69 66 69 65 73 20 77 68 61 74 20 74 65 78  ecifies what tex
6700: 74 20 0a 5b 63 6f 6c 6c 61 74 69 6e 67 20 66 75  t .[collating fu
6710: 6e 63 74 69 6f 6e 5d 20 74 6f 20 75 73 65 20 77  nction] to use w
6720: 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 65  hen comparing te
6730: 78 74 20 65 6e 74 72 69 65 73 20 66 6f 72 20 74  xt entries for t
6740: 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 0a 5e 54 68  he column.  .^Th
6750: 65 20 62 75 69 6c 74 2d 69 6e 20 5b 42 49 4e 41  e built-in [BINA
6760: 52 59 5d 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  RY] collating fu
6770: 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 62  nction is used b
6780: 79 20 64 65 66 61 75 6c 74 2e 0a 3c 70 3e 0a 5e  y default..<p>.^
6790: 54 68 65 20 44 45 46 41 55 4c 54 20 63 6f 6e 73  The DEFAULT cons
67a0: 74 72 61 69 6e 74 20 73 70 65 63 69 66 69 65 73  traint specifies
67b0: 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65   a default value
67c0: 20 74 6f 20 75 73 65 20 77 68 65 6e 20 64 6f 69   to use when doi
67d0: 6e 67 20 61 6e 20 5b 49 4e 53 45 52 54 5d 2e 0a  ng an [INSERT]..
67e0: 5e 54 68 65 20 76 61 6c 75 65 20 6d 61 79 20 62  ^The value may b
67f0: 65 20 4e 55 4c 4c 2c 20 61 20 73 74 72 69 6e 67  e NULL, a string
6800: 20 63 6f 6e 73 74 61 6e 74 2c 20 61 20 6e 75 6d   constant, a num
6810: 62 65 72 2c 20 6f 72 20 61 20 63 6f 6e 73 74 61  ber, or a consta
6820: 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 0a 65 6e  nt expression.en
6830: 63 6c 6f 73 65 64 20 69 6e 20 70 61 72 65 6e 74  closed in parent
6840: 68 65 73 65 73 2e 0a 5e 54 68 65 20 64 65 66 61  heses..^The defa
6850: 75 6c 74 20 76 61 6c 75 65 20 6d 61 79 20 61 6c  ult value may al
6860: 73 6f 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  so be one of the
6870: 20 73 70 65 63 69 61 6c 20 63 61 73 65 2d 69 6e   special case-in
6880: 64 65 70 65 6e 64 65 6e 74 0a 6b 65 79 77 6f 72  dependent.keywor
6890: 64 73 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c  ds CURRENT_TIME,
68a0: 20 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f 72   CURRENT_DATE or
68b0: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
68c0: 4d 50 2e 20 20 5e 49 66 20 74 68 65 20 76 61 6c  MP.  ^If the val
68d0: 75 65 20 69 73 0a 4e 55 4c 4c 2c 20 61 20 73 74  ue is.NULL, a st
68e0: 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 20 6f 72  ring constant or
68f0: 20 6e 75 6d 62 65 72 2c 20 69 74 20 69 73 20 69   number, it is i
6900: 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nserted into the
6910: 20 63 6f 6c 75 6d 6e 0a 77 68 65 6e 65 76 65 72   column.whenever
6920: 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65   an INSERT state
6930: 6d 65 6e 74 20 74 68 61 74 20 64 6f 65 73 20 6e  ment that does n
6940: 6f 74 20 73 70 65 63 69 66 79 20 61 20 76 61 6c  ot specify a val
6950: 75 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ue for the colum
6960: 6e 20 69 73 0a 65 78 65 63 75 74 65 64 2e 20 5e  n is.executed. ^
6970: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
6980: 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55  CURRENT_TIME, CU
6990: 52 52 45 4e 54 5f 44 41 54 45 20 6f 72 20 43 55  RRENT_DATE or CU
69a0: 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c  RRENT_TIMESTAMP,
69b0: 20 74 68 65 6e 0a 74 68 65 20 63 75 72 72 65 6e   then.the curren
69c0: 74 20 55 54 43 20 64 61 74 65 20 61 6e 64 2f 6f  t UTC date and/o
69d0: 72 20 74 69 6d 65 20 69 73 20 69 6e 73 65 72 74  r time is insert
69e0: 65 64 20 69 6e 74 6f 20 74 68 65 20 63 6f 6c 75  ed into the colu
69f0: 6d 6e 73 2e 20 5e 46 6f 72 0a 43 55 52 52 45 4e  mns. ^For.CURREN
6a00: 54 5f 54 49 4d 45 2c 20 74 68 65 20 66 6f 72 6d  T_TIME, the form
6a10: 61 74 20 69 73 20 48 48 3a 4d 4d 3a 53 53 2e 20  at is HH:MM:SS. 
6a20: 5e 46 6f 72 20 43 55 52 52 45 4e 54 5f 44 41 54  ^For CURRENT_DAT
6a30: 45 2c 20 59 59 59 59 2d 4d 4d 2d 44 44 2e 0a 5e  E, YYYY-MM-DD..^
6a40: 54 68 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 43  The format for C
6a50: 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
6a60: 20 69 73 20 22 59 59 59 59 2d 4d 4d 2d 44 44 20   is "YYYY-MM-DD 
6a70: 48 48 3a 4d 4d 3a 53 53 22 2e 0a 3c 2f 70 3e 0a  HH:MM:SS"..</p>.
6a80: 0a 3c 70 3e 5e 28 54 68 65 20 50 52 49 4d 41 52  .<p>^(The PRIMAR
6a90: 59 20 4b 45 59 20 61 74 74 72 69 62 75 74 65 20  Y KEY attribute 
6aa0: 6e 6f 72 6d 61 6c 6c 79 20 63 72 65 61 74 65 73  normally creates
6ab0: 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78 20   a UNIQUE index 
6ac0: 6f 6e 0a 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72  on.the column or
6ad0: 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72   columns that ar
6ae0: 65 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74  e specified as t
6af0: 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20  he PRIMARY KEY. 
6b00: 20 54 68 65 20 6f 6e 6c 79 0a 65 78 63 65 70 74   The only.except
6b10: 69 6f 6e 20 74 6f 20 74 68 69 73 20 62 65 68 61  ion to this beha
6b20: 76 69 6f 72 20 69 73 20 73 70 65 63 69 61 6c 20  vior is special 
6b30: 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59  [INTEGER PRIMARY
6b40: 20 4b 45 59 5d 20 63 6f 6c 75 6d 6e 2c 0a 64 65   KEY] column,.de
6b50: 73 63 72 69 62 65 64 20 62 65 6c 6f 77 2e 29 5e  scribed below.)^
6b60: 0a 5e 28 41 63 63 6f 72 64 69 6e 67 20 74 6f 20  .^(According to 
6b70: 74 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64  the SQL standard
6b80: 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 20 73 68  , PRIMARY KEY sh
6b90: 6f 75 6c 64 20 69 6d 70 6c 79 20 4e 4f 54 20 4e  ould imply NOT N
6ba0: 55 4c 4c 2e 0a 55 6e 66 6f 72 74 75 6e 61 74 65  ULL..Unfortunate
6bb0: 6c 79 2c 20 64 75 65 20 74 6f 20 61 20 6c 6f 6e  ly, due to a lon
6bc0: 67 2d 73 74 61 6e 64 69 6e 67 20 63 6f 64 69 6e  g-standing codin
6bd0: 67 20 6f 76 65 72 73 69 67 68 74 2c 20 74 68 69  g oversight, thi
6be0: 73 20 69 73 20 6e 6f 74 20 0a 74 68 65 20 63 61  s is not .the ca
6bf0: 73 65 20 69 6e 20 53 51 4c 69 74 65 2e 20 20 53  se in SQLite.  S
6c00: 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 4e 55 4c  QLite allows NUL
6c10: 4c 20 76 61 6c 75 65 73 0a 69 6e 20 61 20 50 52  L values.in a PR
6c20: 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e  IMARY KEY column
6c30: 2e 29 5e 20 20 57 65 20 63 6f 75 6c 64 20 63 68  .)^  We could ch
6c40: 61 6e 67 65 20 53 51 4c 69 74 65 20 74 6f 20 63  ange SQLite to c
6c50: 6f 6e 66 6f 72 6d 20 74 6f 20 74 68 65 0a 73 74  onform to the.st
6c60: 61 6e 64 61 72 64 20 28 61 6e 64 20 77 65 20 6d  andard (and we m
6c70: 69 67 68 74 20 64 6f 20 73 6f 20 69 6e 20 74 68  ight do so in th
6c80: 65 20 66 75 74 75 72 65 29 2c 20 62 75 74 20 62  e future), but b
6c90: 79 20 74 68 65 20 74 69 6d 65 20 74 68 65 0a 6f  y the time the.o
6ca0: 76 65 72 73 69 67 68 74 20 77 61 73 20 64 69 73  versight was dis
6cb0: 63 6f 76 65 72 65 64 2c 20 53 51 4c 69 74 65 20  covered, SQLite 
6cc0: 77 61 73 20 69 6e 20 73 75 63 68 20 77 69 64 65  was in such wide
6cd0: 20 75 73 65 20 74 68 61 74 20 77 65 20 66 65 61   use that we fea
6ce0: 72 65 64 0a 62 72 65 61 6b 69 6e 67 20 6c 65 67  red.breaking leg
6cf0: 61 63 79 20 63 6f 64 65 20 69 66 20 77 65 20 66  acy code if we f
6d00: 69 78 65 64 20 74 68 65 20 70 72 6f 62 6c 65 6d  ixed the problem
6d10: 2e 20 20 53 6f 20 66 6f 72 20 6e 6f 77 20 77 65  .  So for now we
6d20: 20 68 61 76 65 0a 63 68 6f 73 65 6e 20 74 6f 20   have.chosen to 
6d30: 63 6f 6e 74 69 6e 75 65 20 61 6c 6c 6f 77 69 6e  continue allowin
6d40: 67 20 4e 55 4c 4c 73 20 69 6e 20 50 52 49 4d 41  g NULLs in PRIMA
6d50: 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 2e 0a  RY KEY columns..
6d60: 44 65 76 65 6c 6f 70 65 72 73 20 73 68 6f 75 6c  Developers shoul
6d70: 64 20 62 65 20 61 77 61 72 65 2c 20 68 6f 77 65  d be aware, howe
6d80: 76 65 72 2c 20 74 68 61 74 20 77 65 20 6d 61 79  ver, that we may
6d90: 20 63 68 61 6e 67 65 20 53 51 4c 69 74 65 20 74   change SQLite t
6da0: 6f 0a 63 6f 6e 66 6f 72 6d 20 74 6f 20 74 68 65  o.conform to the
6db0: 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20 69 6e   SQL standard in
6dc0: 20 66 75 74 75 72 65 20 61 6e 64 20 73 68 6f 75   future and shou
6dd0: 6c 64 20 64 65 73 69 67 6e 20 6e 65 77 20 70 72  ld design new pr
6de0: 6f 67 72 61 6d 73 0a 61 63 63 6f 72 64 69 6e 67  ograms.according
6df0: 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 53 51 4c  ly.</p>..<p>^SQL
6e00: 69 74 65 20 75 73 65 73 20 5b 64 79 6e 61 6d 69  ite uses [dynami
6e10: 63 20 74 79 70 69 6e 67 5d 20 69 6e 73 74 65 61  c typing] instea
6e20: 64 20 6f 66 20 73 74 61 74 69 63 20 74 79 70 69  d of static typi
6e30: 6e 67 2e 20 20 5e 45 78 63 65 70 74 20 66 6f 72  ng.  ^Except for
6e40: 20 74 68 65 0a 73 70 65 63 69 61 6c 20 63 61 73   the.special cas
6e50: 65 20 6f 66 20 5b 49 4e 54 45 47 45 52 20 50 52  e of [INTEGER PR
6e60: 49 4d 41 52 59 20 4b 45 59 5d 2c 20 53 51 4c 69  IMARY KEY], SQLi
6e70: 74 65 20 77 69 6c 6c 20 61 6c 6c 6f 77 20 76 61  te will allow va
6e80: 6c 75 65 73 20 6f 66 20 61 6e 79 0a 74 79 70 65  lues of any.type
6e90: 20 74 6f 20 62 65 20 73 74 6f 72 65 64 20 69 6e   to be stored in
6ea0: 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 72 65 67 61   any column rega
6eb0: 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 64 65  rdless of the de
6ec0: 63 6c 61 72 65 64 20 64 61 74 61 74 79 70 65 20  clared datatype 
6ed0: 6f 66 0a 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 20  of.that column. 
6ee0: 20 5e 54 68 65 20 64 65 63 6c 61 72 65 64 20 64   ^The declared d
6ef0: 61 74 61 74 79 70 65 20 69 73 20 61 20 5b 61 66  atatype is a [af
6f00: 66 69 6e 69 74 79 20 7c 20 74 79 70 65 20 61 66  finity | type af
6f10: 66 69 6e 69 74 79 5d 20 74 68 61 74 0a 53 51 4c  finity] that.SQL
6f20: 69 74 65 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ite attempts to 
6f30: 63 6f 6d 70 6c 79 20 77 69 74 68 2c 20 62 75 74  comply with, but
6f40: 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 77   the operation w
6f50: 69 6c 6c 20 70 72 6f 63 65 65 64 20 65 76 65 6e  ill proceed even
6f60: 20 69 66 0a 63 6f 6d 70 6c 69 61 6e 63 65 20 69   if.compliance i
6f70: 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 3c  s not possible.<
6f80: 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  /p>..<p>^If the 
6f90: 22 54 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f  "TEMP" or "TEMPO
6fa0: 52 41 52 59 22 20 6b 65 79 77 6f 72 64 20 6f 63  RARY" keyword oc
6fb0: 63 75 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20  curs in between 
6fc0: 22 43 52 45 41 54 45 22 0a 61 6e 64 20 22 54 41  "CREATE".and "TA
6fd0: 42 4c 45 22 20 74 68 65 6e 20 74 68 65 20 74 61  BLE" then the ta
6fe0: 62 6c 65 20 74 68 61 74 20 69 73 20 63 72 65 61  ble that is crea
6ff0: 74 65 64 20 69 73 20 6f 6e 6c 79 20 76 69 73 69  ted is only visi
7000: 62 6c 65 0a 77 69 74 68 69 6e 20 74 68 61 74 20  ble.within that 
7010: 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 63 6f  same database co
7020: 6e 6e 65 63 74 69 6f 6e 0a 61 6e 64 20 69 73 20  nnection.and is 
7030: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
7040: 6c 65 74 65 64 20 77 68 65 6e 0a 74 68 65 20 64  leted when.the d
7050: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
7060: 6f 6e 20 69 73 20 63 6c 6f 73 65 64 2e 20 20 5e  on is closed.  ^
7070: 41 6e 79 20 69 6e 64 69 63 65 73 20 63 72 65 61  Any indices crea
7080: 74 65 64 20 6f 6e 20 61 20 74 65 6d 70 6f 72 61  ted on a tempora
7090: 72 79 20 74 61 62 6c 65 0a 61 72 65 20 61 6c 73  ry table.are als
70a0: 6f 20 74 65 6d 70 6f 72 61 72 79 2e 20 20 5e 54  o temporary.  ^T
70b0: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20  emporary tables 
70c0: 61 6e 64 20 69 6e 64 69 63 65 73 20 61 72 65 20  and indices are 
70d0: 73 74 6f 72 65 64 20 69 6e 20 61 0a 73 65 70 61  stored in a.sepa
70e0: 72 61 74 65 20 66 69 6c 65 20 64 69 73 74 69 6e  rate file distin
70f0: 63 74 20 66 72 6f 6d 20 74 68 65 20 6d 61 69 6e  ct from the main
7100: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c   database file.<
7110: 2f 70 3e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 26  /p>..<p> ^If a &
7120: 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  lt;database-name
7130: 26 67 74 3b 20 69 73 20 73 70 65 63 69 66 69 65  &gt; is specifie
7140: 64 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  d, then the tabl
7150: 65 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20  e is created in 
7160: 0a 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61 62  .the named datab
7170: 61 73 65 2e 20 5e 49 74 20 69 73 20 61 6e 20 65  ase. ^It is an e
7180: 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79 20  rror to specify 
7190: 62 6f 74 68 20 61 20 26 6c 74 3b 64 61 74 61 62  both a &lt;datab
71a0: 61 73 65 2d 6e 61 6d 65 26 67 74 3b 0a 61 6e 64  ase-name&gt;.and
71b0: 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f 72   the TEMP keywor
71c0: 64 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 26 6c  d, unless the &l
71d0: 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26  t;database-name&
71e0: 67 74 3b 20 69 73 20 22 74 65 6d 70 22 2e 20 5e  gt; is "temp". ^
71f0: 49 66 20 6e 6f 0a 64 61 74 61 62 61 73 65 20 6e  If no.database n
7200: 61 6d 65 20 69 73 20 73 70 65 63 69 66 69 65 64  ame is specified
7210: 20 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b 65   and the TEMP ke
7220: 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 70 72 65  yword is not pre
7230: 73 65 6e 74 20 74 68 65 6e 0a 74 68 65 20 74 61  sent then.the ta
7240: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 69  ble is created i
7250: 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
7260: 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ase.</p>..<p>^Th
7270: 65 20 6f 70 74 69 6f 6e 61 6c 20 5b 63 6f 6e 66  e optional [conf
7280: 6c 69 63 74 20 63 6c 61 75 73 65 5d 20 66 6f 6c  lict clause] fol
7290: 6c 6f 77 69 6e 67 20 65 61 63 68 20 63 6f 6e 73  lowing each cons
72a0: 74 72 61 69 6e 74 0a 61 6c 6c 6f 77 73 20 74 68  traint.allows th
72b0: 65 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20  e specification 
72c0: 6f 66 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76  of an alternativ
72d0: 65 20 64 65 66 61 75 6c 74 0a 63 6f 6e 73 74 72  e default.constr
72e0: 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65  aint conflict re
72f0: 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
7300: 68 6d 20 66 6f 72 20 74 68 61 74 20 63 6f 6e 73  hm for that cons
7310: 74 72 61 69 6e 74 2e 0a 5e 49 66 20 6e 6f 20 63  traint..^If no c
7320: 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73 65 20 69  onflict clause i
7330: 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65  s specified, the
7340: 20 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d   ABORT algorithm
7350: 20 69 73 20 75 73 65 64 2e 0a 5e 44 69 66 66 65   is used..^Diffe
7360: 72 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 73  rent constraints
7370: 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
7380: 0a 74 61 62 6c 65 20 6d 61 79 20 68 61 76 65 20  .table may have 
7390: 64 69 66 66 65 72 65 6e 74 20 63 6f 6e 66 6c 69  different confli
73a0: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
73b0: 67 6f 72 69 74 68 6d 73 2e 0a 5e 49 66 20 61 6e  gorithms..^If an
73c0: 20 5b 49 4e 53 45 52 54 5d 20 6f 72 20 5b 55 50   [INSERT] or [UP
73d0: 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 20  DATE] statement 
73e0: 73 70 65 63 69 66 69 65 73 20 61 20 63 6f 6e 66  specifies a conf
73f0: 6c 69 63 74 0a 72 65 73 6f 6c 75 74 69 6f 6e 20  lict.resolution 
7400: 61 6c 67 6f 72 69 74 68 6d 2c 20 74 68 65 6e 20  algorithm, then 
7410: 74 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 73 70  the algorithm sp
7420: 65 63 69 66 69 65 64 20 6f 6e 20 74 68 65 20 49  ecified on the I
7430: 4e 53 45 52 54 20 6f 72 0a 55 50 44 41 54 45 20  NSERT or.UPDATE 
7440: 73 74 61 74 65 6d 65 6e 74 20 6f 76 65 72 72 69  statement overri
7450: 64 65 73 20 74 68 65 20 61 6c 67 6f 72 69 74 68  des the algorith
7460: 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74  m specified in t
7470: 68 65 20 0a 43 52 45 41 54 45 20 54 41 42 4c 45  he .CREATE TABLE
7480: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 53 65 65 20   statement..See 
7490: 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c  the section titl
74a0: 65 64 0a 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d  ed.[ON CONFLICT]
74b0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
74c0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e  information.</p>
74d0: 0a 0a 3c 70 3e 43 48 45 43 4b 20 63 6f 6e 73 74  ..<p>CHECK const
74e0: 72 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f  raints are suppo
74f0: 72 74 65 64 20 61 73 20 6f 66 20 5b 76 65 72 73  rted as of [vers
7500: 69 6f 6e 20 33 2e 33 2e 30 5d 2e 20 20 50 72 69  ion 3.3.0].  Pri
7510: 6f 72 0a 74 6f 20 76 65 72 73 69 6f 6e 20 33 2e  or.to version 3.
7520: 33 2e 30 2c 20 43 48 45 43 4b 20 63 6f 6e 73 74  3.0, CHECK const
7530: 72 61 69 6e 74 73 20 77 65 72 65 20 70 61 72 73  raints were pars
7540: 65 64 20 62 75 74 20 6e 6f 74 20 65 6e 66 6f 72  ed but not enfor
7550: 63 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ced.</p>..<p>^Th
7560: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
7570: 6d 6e 73 20 69 6e 20 61 20 74 61 62 6c 65 20 69  mns in a table i
7580: 73 20 6c 69 6d 69 74 65 64 20 62 79 20 74 68 65  s limited by the
7590: 0a 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c  .[SQLITE_MAX_COL
75a0: 55 4d 4e 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  UMN] compile-tim
75b0: 65 20 70 61 72 61 6d 65 74 65 72 2e 0a 5e 41 20  e parameter..^A 
75c0: 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 61 20  single row of a 
75d0: 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20 73 74 6f  table cannot sto
75e0: 72 65 20 6d 6f 72 65 20 74 68 61 6e 0a 5b 53 51  re more than.[SQ
75f0: 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 5d  LITE_MAX_LENGTH]
7600: 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 2e 0a   bytes of data..
7610: 5e 42 6f 74 68 20 6f 66 20 74 68 65 73 65 20 6c  ^Both of these l
7620: 69 6d 69 74 73 20 63 61 6e 20 62 65 20 6c 6f 77  imits can be low
7630: 65 72 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20  ered at runtime 
7640: 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74  using the.[sqlit
7650: 65 33 5f 6c 69 6d 69 74 28 29 5d 20 43 2f 43 2b  e3_limit()] C/C+
7660: 2b 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e  + interface.</p>
7670: 0a 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41 54  ...<p>^The CREAT
7680: 45 20 54 41 42 4c 45 20 41 53 20 66 6f 72 6d 20  E TABLE AS form 
7690: 64 65 66 69 6e 65 73 20 74 68 65 20 74 61 62 6c  defines the tabl
76a0: 65 20 74 6f 20 62 65 0a 74 68 65 20 72 65 73 75  e to be.the resu
76b0: 6c 74 20 73 65 74 20 6f 66 20 61 20 71 75 65 72  lt set of a quer
76c0: 79 2e 20 20 5e 54 68 65 20 6e 61 6d 65 73 20 6f  y.  ^The names o
76d0: 66 20 74 68 65 20 74 61 62 6c 65 20 63 6f 6c 75  f the table colu
76e0: 6d 6e 73 20 61 72 65 0a 74 68 65 20 6e 61 6d 65  mns are.the name
76f0: 73 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  s of the columns
7700: 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 3c   in the result.<
7710: 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  /p>..<p>^If the 
7720: 6f 70 74 69 6f 6e 61 6c 20 49 46 20 4e 4f 54 20  optional IF NOT 
7730: 45 58 49 53 54 53 20 63 6c 61 75 73 65 20 69 73  EXISTS clause is
7740: 20 70 72 65 73 65 6e 74 20 61 6e 64 20 61 6e 6f   present and ano
7750: 74 68 65 72 20 74 61 62 6c 65 0a 77 69 74 68 20  ther table.with 
7760: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c  the same name al
7770: 72 65 61 64 79 20 65 78 69 73 74 73 2c 20 74 68  ready exists, th
7780: 65 6e 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  en this command 
7790: 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e  becomes a no-op.
77a0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73  </p>..<p>^Tables
77b0: 20 61 72 65 20 72 65 6d 6f 76 65 64 20 75 73 69   are removed usi
77c0: 6e 67 20 74 68 65 20 5b 44 52 4f 50 20 54 41 42  ng the [DROP TAB
77d0: 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  LE] statement.  
77e0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
77f0: 61 67 6d 65 6e 74 20 72 6f 77 69 64 20 7b 49 4e  agment rowid {IN
7800: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
7810: 59 7d 20 52 4f 57 49 44 20 72 6f 77 69 64 3c 2f  Y} ROWID rowid</
7820: 74 63 6c 3e 0a 3c 68 33 3e 52 4f 57 49 44 73 20  tcl>.<h3>ROWIDs 
7830: 61 6e 64 20 74 68 65 20 49 4e 54 45 47 45 52 20  and the INTEGER 
7840: 50 52 49 4d 41 52 59 20 4b 45 59 3c 2f 68 33 3e  PRIMARY KEY</h3>
7850: 0a 0a 3c 70 3e 5e 45 76 65 72 79 20 72 6f 77 20  ..<p>^Every row 
7860: 6f 66 20 65 76 65 72 79 20 53 51 4c 69 74 65 20  of every SQLite 
7870: 74 61 62 6c 65 20 68 61 73 20 61 20 36 34 2d 62  table has a 64-b
7880: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
7890: 72 20 6b 65 79 20 0a 74 68 61 74 20 69 73 20 75  r key .that is u
78a0: 6e 69 71 75 65 20 77 69 74 68 69 6e 20 74 68 65  nique within the
78b0: 20 73 61 6d 65 20 74 61 62 6c 65 2e 0a 54 68 69   same table..Thi
78c0: 73 20 69 6e 74 65 67 65 72 20 69 73 20 75 73 75  s integer is usu
78d0: 61 6c 6c 79 20 63 61 6c 6c 65 64 20 74 68 65 20  ally called the 
78e0: 22 72 6f 77 69 64 22 2e 20 20 5e 54 68 65 20 72  "rowid".  ^The r
78f0: 6f 77 69 64 20 69 73 20 74 68 65 20 61 63 74 75  owid is the actu
7900: 61 6c 20 6b 65 79 20 75 73 65 64 0a 69 6e 20 74  al key used.in t
7910: 68 65 20 42 2d 54 72 65 65 20 74 68 61 74 20 69  he B-Tree that i
7920: 6d 70 6c 65 6d 65 6e 74 73 20 61 6e 20 53 51 4c  mplements an SQL
7930: 69 74 65 20 74 61 62 6c 65 2e 20 20 5e 52 6f 77  ite table.  ^Row
7940: 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 0a  s are stored in.
7950: 72 6f 77 69 64 20 6f 72 64 65 72 2e 20 5e 54 68  rowid order. ^Th
7960: 65 0a 72 6f 77 69 64 20 76 61 6c 75 65 20 63 61  e.rowid value ca
7970: 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 75 73  n be accessed us
7980: 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65 20 73  ing one of the s
7990: 70 65 63 69 61 6c 20 6e 61 6d 65 73 0a 22 3c 62  pecial names."<b
79a0: 3e 52 4f 57 49 44 3c 2f 62 3e 22 2c 20 22 3c 62  >ROWID</b>", "<b
79b0: 3e 4f 49 44 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c  >OID</b>", or "<
79c0: 62 3e 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22 20 61  b>_ROWID_</b>" a
79d0: 73 73 75 6d 69 6e 67 20 74 68 6f 73 65 20 6e 61  ssuming those na
79e0: 6d 65 73 0a 61 72 65 20 6e 6f 20 75 73 65 64 20  mes.are no used 
79f0: 62 79 20 6f 74 68 65 72 20 63 6f 6e 76 65 6e 74  by other convent
7a00: 69 6f 6e 61 6c 20 74 61 62 6c 65 20 63 6f 6c 75  ional table colu
7a10: 6d 6e 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 49  mns.</p>..<p>.^I
7a20: 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 64 65  f a column is de
7a30: 63 6c 61 72 65 64 20 74 6f 20 62 65 20 61 6e 20  clared to be an 
7a40: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
7a50: 4b 45 59 2c 20 74 68 65 6e 20 74 68 61 74 20 63  KEY, then that c
7a60: 6f 6c 75 6d 6e 20 69 73 20 6e 6f 74 0a 61 20 22  olumn is not.a "
7a70: 72 65 61 6c 22 20 64 61 74 61 62 61 73 65 20 63  real" database c
7a80: 6f 6c 75 6d 6e 20 62 75 74 20 69 6e 73 74 65 61  olumn but instea
7a90: 64 20 62 65 63 6f 6d 65 73 0a 61 6e 20 61 6c 69  d becomes.an ali
7aa0: 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64  as for the rowid
7ab0: 2e 20 20 5e 55 6e 6c 69 6b 65 20 6e 6f 72 6d 61  .  ^Unlike norma
7ac0: 6c 20 53 51 4c 69 74 65 20 63 6f 6c 75 6d 6e 73  l SQLite columns
7ad0: 2c 20 74 68 65 20 72 6f 77 69 64 0a 6d 75 73 74  , the rowid.must
7ae0: 20 62 65 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 69   be a non-NULL i
7af0: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 20 5e  nteger value.  ^
7b00: 54 68 65 20 72 6f 77 69 64 20 69 73 20 6e 6f 74  The rowid is not
7b10: 20 61 62 6c 65 20 74 6f 20 68 6f 6c 64 0a 66 6c   able to hold.fl
7b20: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
7b30: 75 65 73 2c 20 73 74 72 69 6e 67 73 2c 20 42 4c  ues, strings, BL
7b40: 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e 3c 2f  OBs, or NULLs.</
7b50: 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
7b60: 3c 69 3e 0a 5e 41 6e 20 49 4e 54 45 47 45 52 20  <i>.^An INTEGER 
7b70: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75  PRIMARY KEY colu
7b80: 6d 6e 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66  mn is an alias f
7b90: 6f 72 20 74 68 65 20 36 34 2d 62 69 74 20 73 69  or the 64-bit si
7ba0: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 72 6f 77  gned integer row
7bb0: 69 64 2e 0a 3c 2f 69 3e 3c 2f 62 6c 6f 63 6b 71  id..</i></blockq
7bc0: 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 41 6e 20 49 4e  uote>..<p>^An IN
7bd0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
7be0: 59 20 63 6f 6c 75 6d 6e 20 63 61 6e 20 61 6c 73  Y column can als
7bf0: 6f 20 69 6e 63 6c 75 64 65 20 74 68 65 0a 6b 65  o include the.ke
7c00: 79 77 6f 72 64 20 5b 41 55 54 4f 49 4e 43 52 45  yword [AUTOINCRE
7c10: 4d 45 4e 54 5d 2e 20 20 5e 54 68 65 20 5b 41 55  MENT].  ^The [AU
7c20: 54 4f 49 4e 43 52 45 4d 45 4e 54 5d 20 6b 65 79  TOINCREMENT] key
7c30: 77 6f 72 64 20 6d 6f 64 69 66 69 65 64 20 74 68  word modified th
7c40: 65 20 77 61 79 0a 74 68 61 74 20 42 2d 54 72 65  e way.that B-Tre
7c50: 65 20 6b 65 79 73 20 61 72 65 20 61 75 74 6f 6d  e keys are autom
7c60: 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74  atically generat
7c70: 65 64 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 20  ed.  Additional 
7c80: 64 65 74 61 69 6c 0a 6f 6e 20 61 75 74 6f 6d 61  detail.on automa
7c90: 74 69 63 20 42 2d 54 72 65 65 20 6b 65 79 20 67  tic B-Tree key g
7ca0: 65 6e 65 72 61 74 69 6f 6e 20 69 73 20 61 76 61  eneration is ava
7cb0: 69 6c 61 62 6c 65 0a 3c 61 20 68 72 65 66 3d 22  ilable.<a href="
7cc0: 61 75 74 6f 69 6e 63 2e 68 74 6d 6c 22 3e 73 65  autoinc.html">se
7cd0: 70 61 72 61 74 65 6c 79 3c 2f 61 3e 2e 3c 2f 70  parately</a>.</p
7ce0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 70 65 63 69  >..<p>^The speci
7cf0: 61 6c 20 62 65 68 61 76 69 6f 72 20 6f 66 20 49  al behavior of I
7d00: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
7d10: 45 59 0a 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c  EY.is only avail
7d20: 61 62 6c 65 20 69 66 20 74 68 65 20 74 79 70 65  able if the type
7d30: 20 6e 61 6d 65 20 69 73 20 65 78 61 63 74 6c 79   name is exactly
7d40: 20 22 49 4e 54 45 47 45 52 22 20 69 6e 20 61 6e   "INTEGER" in an
7d50: 79 20 6d 69 78 74 75 72 65 0a 6f 66 20 75 70 70  y mixture.of upp
7d60: 65 72 20 61 6e 64 20 6c 6f 77 65 72 20 63 61 73  er and lower cas
7d70: 65 2e 20 20 5e 4f 74 68 65 72 20 69 6e 74 65 67  e.  ^Other integ
7d80: 65 72 20 74 79 70 65 20 6e 61 6d 65 73 0a 6c 69  er type names.li
7d90: 6b 65 20 22 49 4e 54 22 20 6f 72 20 22 42 49 47  ke "INT" or "BIG
7da0: 49 4e 54 22 20 6f 72 20 22 53 48 4f 52 54 20 49  INT" or "SHORT I
7db0: 4e 54 45 47 45 52 22 20 6f 72 20 22 55 4e 53 49  NTEGER" or "UNSI
7dc0: 47 4e 45 44 20 49 4e 54 45 47 45 52 22 0a 63 61  GNED INTEGER".ca
7dd0: 75 73 65 73 20 74 68 65 20 70 72 69 6d 61 72 79  uses the primary
7de0: 20 6b 65 79 20 63 6f 6c 75 6d 6e 20 74 6f 20 62   key column to b
7df0: 65 68 61 76 65 20 61 73 20 61 6e 20 6f 72 64 69  ehave as an ordi
7e00: 6e 61 72 79 20 74 61 62 6c 65 20 63 6f 6c 75 6d  nary table colum
7e10: 6e 20 77 69 74 68 0a 69 6e 74 65 67 65 72 20 5b  n with.integer [
7e20: 61 66 66 69 6e 69 74 79 5d 20 61 6e 64 20 61 20  affinity] and a 
7e30: 75 6e 69 71 75 65 20 69 6e 64 65 78 2c 20 6e 6f  unique index, no
7e40: 74 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  t as an alias fo
7e50: 72 20 74 68 65 20 72 6f 77 69 64 2e 0a 5e 28 54  r the rowid..^(T
7e60: 68 65 20 73 70 65 63 69 61 6c 20 62 65 68 61 76  he special behav
7e70: 69 6f 72 20 6f 66 20 49 4e 54 45 47 45 52 20 50  ior of INTEGER P
7e80: 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 6f 6e  RIMARY KEY is on
7e90: 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 69 66 20  ly available if 
7ea0: 74 68 65 0a 70 72 69 6d 61 72 79 20 6b 65 79 20  the.primary key 
7eb0: 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  is a single colu
7ec0: 6d 6e 2e 20 20 4d 75 6c 74 69 2d 63 6f 6c 75 6d  mn.  Multi-colum
7ed0: 6e 20 70 72 69 6d 61 72 79 20 6b 65 79 73 20 64  n primary keys d
7ee0: 6f 20 6e 6f 74 20 62 65 63 6f 6d 65 0a 61 6c 69  o not become.ali
7ef0: 61 73 65 73 20 66 6f 72 20 74 68 65 20 72 6f 77  ases for the row
7f00: 69 64 2e 29 5e 0a 5e 54 68 65 20 41 55 54 4f 49  id.)^.^The AUTOI
7f10: 4e 43 52 45 4d 45 4e 54 20 6b 65 79 77 6f 72 64  NCREMENT keyword
7f20: 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 61   only works on a
7f30: 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 69 73 20   column that is 
7f40: 61 6e 20 61 6c 69 61 73 0a 66 6f 72 20 74 68 65  an alias.for the
7f50: 20 72 6f 77 69 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e   rowid.</p>..<p>
7f60: 4e 6f 74 65 20 74 68 61 74 20 73 65 61 72 63 68  Note that search
7f70: 65 73 20 61 67 61 69 6e 73 74 20 61 20 72 6f 77  es against a row
7f80: 69 64 20 61 72 65 20 67 65 6e 65 72 61 6c 6c 79  id are generally
7f90: 20 61 62 6f 75 74 20 74 77 69 63 65 20 61 73 0a   about twice as.
7fa0: 66 61 73 74 20 61 73 20 73 65 61 72 63 68 65 73  fast as searches
7fb0: 20 61 67 61 69 6e 73 74 20 61 6e 79 20 6f 74 68   against any oth
7fc0: 65 72 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  er PRIMARY KEY o
7fd0: 72 20 69 6e 64 65 78 65 64 20 76 61 6c 75 65 2e  r indexed value.
7fe0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 3c 62 3e 47 6f 6f  .</p>..<p><b>Goo
7ff0: 66 79 20 62 65 68 61 76 69 6f 72 20 61 6c 65 72  fy behavior aler
8000: 74 3a 3c 2f 62 3e 20 20 5e 28 54 68 65 20 66 6f  t:</b>  ^(The fo
8010: 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 64 65  llowing three de
8020: 63 6c 61 72 61 74 69 6f 6e 73 20 61 6c 6c 20 63  clarations all c
8030: 61 75 73 65 0a 74 68 65 20 63 6f 6c 75 6d 6e 20  ause.the column 
8040: 22 78 22 20 62 65 20 61 6e 20 61 6c 69 61 73 20  "x" be an alias 
8050: 66 6f 72 20 74 68 65 20 72 6f 77 69 64 3a 3c 2f  for the rowid:</
8060: 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74  p>..<ul>.<li><tt
8070: 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 28  >CREATE TABLE t(
8080: 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  x INTEGER PRIMAR
8090: 59 20 4b 45 59 20 41 53 43 2c 20 79 2c 20 7a 29  Y KEY ASC, y, z)
80a0: 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43  ;</tt>.<li><tt>C
80b0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20  REATE TABLE t(x 
80c0: 49 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50  INTEGER, y, z, P
80d0: 52 49 4d 41 52 59 20 4b 45 59 28 78 20 41 53 43  RIMARY KEY(x ASC
80e0: 29 29 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e 3c 74 74  ));</tt>.<li><tt
80f0: 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 28  >CREATE TABLE t(
8100: 78 20 49 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c  x INTEGER, y, z,
8110: 20 50 52 49 4d 41 52 59 20 4b 45 59 28 78 20 44   PRIMARY KEY(x D
8120: 45 53 43 29 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c  ESC));</tt>.</ul
8130: 3e 29 5e 0a 0a 3c 70 3e 42 75 74 2c 20 69 6e 20  >)^..<p>But, in 
8140: 63 6f 6e 74 72 61 73 74 2c 20 5e 28 74 68 65 20  contrast, ^(the 
8150: 66 6f 6c 6c 6f 77 69 6e 67 20 64 65 63 6c 61 72  following declar
8160: 61 74 69 6f 6e 20 64 6f 65 73 20 3c 75 3e 6e 6f  ation does <u>no
8170: 74 3c 2f 75 3e 20 72 65 73 75 6c 74 20 69 6e 0a  t</u> result in.
8180: 22 78 22 20 62 65 69 6e 67 20 61 6e 20 61 6c 69  "x" being an ali
8190: 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64  as for the rowid
81a0: 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  :</p>..<ul>.<li>
81b0: 3c 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45  <tt>CREATE TABLE
81c0: 20 74 28 78 20 49 4e 54 45 47 45 52 20 50 52 49   t(x INTEGER PRI
81d0: 4d 41 52 59 20 4b 45 59 20 44 45 53 43 2c 20 79  MARY KEY DESC, y
81e0: 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e  , z);</tt>.</ul>
81f0: 29 5e 0a 0a 3c 70 3e 54 68 69 73 20 61 73 79 6d  )^..<p>This asym
8200: 6d 65 74 72 69 63 61 6c 20 62 65 68 61 76 69 6f  metrical behavio
8210: 72 20 69 73 20 75 6e 66 6f 72 74 75 6e 61 74 65  r is unfortunate
8220: 20 61 6e 64 20 69 73 20 72 65 61 6c 6c 79 20 64   and is really d
8230: 75 65 20 74 6f 20 61 20 62 75 67 0a 69 6e 20 74  ue to a bug.in t
8240: 68 65 20 70 61 72 73 65 72 20 69 6e 20 65 61 72  he parser in ear
8250: 6c 79 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  ly versions of S
8260: 51 4c 69 74 65 2e 20 20 42 75 74 20 66 69 78 69  QLite.  But fixi
8270: 6e 67 20 74 68 65 20 62 75 67 20 77 6f 75 6c 64  ng the bug would
8280: 0a 72 65 73 75 6c 74 20 69 6e 20 76 65 72 79 20  .result in very 
8290: 73 65 72 69 6f 75 73 20 62 61 63 6b 77 61 72 64  serious backward
82a0: 73 20 69 6e 63 6f 6d 70 61 74 69 62 69 6c 69 74  s incompatibilit
82b0: 69 65 73 2e 20 20 54 68 65 20 53 51 4c 69 74 65  ies.  The SQLite
82c0: 20 64 65 76 65 6c 6f 70 65 72 73 0a 66 65 65 6c   developers.feel
82d0: 20 74 68 61 74 20 67 6f 6f 66 79 20 62 65 68 61   that goofy beha
82e0: 76 69 6f 72 20 69 6e 20 61 6e 20 63 6f 72 6e 65  vior in an corne
82f0: 72 20 63 61 73 65 20 69 73 20 66 61 72 20 62 65  r case is far be
8300: 74 74 65 72 20 74 68 61 6e 0a 61 20 63 6f 6d 70  tter than.a comp
8310: 61 74 69 62 69 6c 69 74 79 20 62 72 65 61 6b 2c  atibility break,
8320: 20 73 6f 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   so the original
8330: 20 62 65 68 61 76 69 6f 72 20 69 73 20 72 65 74   behavior is ret
8340: 61 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  ained.</p>..<tcl
8350: 3e 0a 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 23 23 23  ################
83a0: 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45  .Section {CREATE
83b0: 20 54 52 49 47 47 45 52 7d 20 63 72 65 61 74 65   TRIGGER} create
83c0: 74 72 69 67 67 65 72 20 7b 7b 43 52 45 41 54 45  trigger {{CREATE
83d0: 20 54 52 49 47 47 45 52 7d 7d 0a 0a 42 75 62 62   TRIGGER}}..Bubb
83e0: 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74 65  leDiagram create
83f0: 2d 74 72 69 67 67 65 72 2d 73 74 6d 74 20 31 0a  -trigger-stmt 1.
8400: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
8410: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 73  CREATE TRIGGER s
8420: 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64  tatement is used
8430: 20 74 6f 20 61 64 64 20 74 72 69 67 67 65 72 73   to add triggers
8440: 20 74 6f 20 74 68 65 20 0a 64 61 74 61 62 61 73   to the .databas
8450: 65 20 73 63 68 65 6d 61 2e 20 5e 54 72 69 67 67  e schema. ^Trigg
8460: 65 72 73 20 61 72 65 20 64 61 74 61 62 61 73 65  ers are database
8470: 20 6f 70 65 72 61 74 69 6f 6e 73 20 0a 74 68 61   operations .tha
8480: 74 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  t are automatica
8490: 6c 6c 79 20 70 65 72 66 6f 72 6d 65 64 20 77 68  lly performed wh
84a0: 65 6e 20 61 20 73 70 65 63 69 66 69 65 64 20 64  en a specified d
84b0: 61 74 61 62 61 73 65 20 65 76 65 6e 74 0a 6f 63  atabase event.oc
84c0: 63 75 72 73 2e 20 20 3c 2f 70 3e 0a 0a 3c 70 3e  curs.  </p>..<p>
84d0: 5e 41 20 74 72 69 67 67 65 72 20 6d 61 79 20 62  ^A trigger may b
84e0: 65 20 73 70 65 63 69 66 69 65 64 20 74 6f 20 66  e specified to f
84f0: 69 72 65 20 77 68 65 6e 65 76 65 72 20 61 20 5b  ire whenever a [
8500: 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54  DELETE], [INSERT
8510: 5d 2c 0a 6f 72 20 5b 55 50 44 41 54 45 5d 20 6f  ],.or [UPDATE] o
8520: 66 20 61 0a 70 61 72 74 69 63 75 6c 61 72 20 64  f a.particular d
8530: 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 63  atabase table oc
8540: 63 75 72 73 2c 20 6f 72 20 77 68 65 6e 65 76 65  curs, or wheneve
8550: 72 20 61 6e 20 5b 55 50 44 41 54 45 5d 20 6f 63  r an [UPDATE] oc
8560: 63 75 72 73 20 6f 6e 0a 6f 6e 20 6f 6e 65 20 6f  curs on.on one o
8570: 72 20 6d 6f 72 65 20 73 70 65 63 69 66 69 65 64  r more specified
8580: 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 20 74 61   columns of a ta
8590: 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 74  ble.</p>..<p>^At
85a0: 20 74 68 69 73 20 74 69 6d 65 20 53 51 4c 69 74   this time SQLit
85b0: 65 20 73 75 70 70 6f 72 74 73 20 6f 6e 6c 79 20  e supports only 
85c0: 46 4f 52 20 45 41 43 48 20 52 4f 57 20 74 72 69  FOR EACH ROW tri
85d0: 67 67 65 72 73 2c 20 6e 6f 74 20 46 4f 52 20 45  ggers, not FOR E
85e0: 41 43 48 0a 53 54 41 54 45 4d 45 4e 54 20 74 72  ACH.STATEMENT tr
85f0: 69 67 67 65 72 73 2e 20 5e 48 65 6e 63 65 20 65  iggers. ^Hence e
8600: 78 70 6c 69 63 69 74 6c 79 20 73 70 65 63 69 66  xplicitly specif
8610: 79 69 6e 67 20 46 4f 52 20 45 41 43 48 20 52 4f  ying FOR EACH RO
8620: 57 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 0a 5e  W is optional..^
8630: 46 4f 52 20 45 41 43 48 20 52 4f 57 20 69 6d 70  FOR EACH ROW imp
8640: 6c 69 65 73 20 74 68 61 74 20 74 68 65 20 53 51  lies that the SQ
8650: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65  L statements spe
8660: 63 69 66 69 65 64 20 69 6e 20 74 68 65 20 74 72  cified in the tr
8670: 69 67 67 65 72 0a 6d 61 79 20 62 65 20 65 78 65  igger.may be exe
8680: 63 75 74 65 64 20 28 64 65 70 65 6e 64 69 6e 67  cuted (depending
8690: 20 6f 6e 20 74 68 65 20 57 48 45 4e 20 63 6c 61   on the WHEN cla
86a0: 75 73 65 29 20 66 6f 72 20 65 61 63 68 20 64 61  use) for each da
86b0: 74 61 62 61 73 65 20 72 6f 77 20 62 65 69 6e 67  tabase row being
86c0: 0a 69 6e 73 65 72 74 65 64 2c 20 75 70 64 61 74  .inserted, updat
86d0: 65 64 20 6f 72 20 64 65 6c 65 74 65 64 20 62 79  ed or deleted by
86e0: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63   the statement c
86f0: 61 75 73 69 6e 67 20 74 68 65 20 74 72 69 67 67  ausing the trigg
8700: 65 72 20 74 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a  er to fire.</p>.
8710: 0a 3c 70 3e 5e 28 42 6f 74 68 20 74 68 65 20 57  .<p>^(Both the W
8720: 48 45 4e 20 63 6c 61 75 73 65 20 61 6e 64 20 74  HEN clause and t
8730: 68 65 20 74 72 69 67 67 65 72 20 61 63 74 69 6f  he trigger actio
8740: 6e 73 20 6d 61 79 20 61 63 63 65 73 73 20 65 6c  ns may access el
8750: 65 6d 65 6e 74 73 20 6f 66 20 0a 74 68 65 20 72  ements of .the r
8760: 6f 77 20 62 65 69 6e 67 20 69 6e 73 65 72 74 65  ow being inserte
8770: 64 2c 20 64 65 6c 65 74 65 64 20 6f 72 20 75 70  d, deleted or up
8780: 64 61 74 65 64 20 75 73 69 6e 67 20 72 65 66 65  dated using refe
8790: 72 65 6e 63 65 73 20 6f 66 20 74 68 65 20 66 6f  rences of the fo
87a0: 72 6d 20 0a 22 4e 45 57 2e 3c 69 3e 63 6f 6c 75  rm ."NEW.<i>colu
87b0: 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 20 61 6e 64  mn-name</i>" and
87c0: 20 22 4f 4c 44 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d   "OLD.<i>column-
87d0: 6e 61 6d 65 3c 2f 69 3e 22 2c 20 77 68 65 72 65  name</i>", where
87e0: 0a 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c  .<i>column-name<
87f0: 2f 69 3e 20 69 73 20 74 68 65 20 6e 61 6d 65 20  /i> is the name 
8800: 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d  of a column from
8810: 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
8820: 74 68 65 20 74 72 69 67 67 65 72 0a 69 73 20 61  the trigger.is a
8830: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 2e 29  ssociated with.)
8840: 5e 20 5e 28 4f 4c 44 20 61 6e 64 20 4e 45 57 20  ^ ^(OLD and NEW 
8850: 72 65 66 65 72 65 6e 63 65 73 20 6d 61 79 20 6f  references may o
8860: 6e 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20 74  nly be used in t
8870: 72 69 67 67 65 72 73 20 6f 6e 0a 65 76 65 6e 74  riggers on.event
8880: 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 79  s for which they
8890: 20 61 72 65 20 72 65 6c 65 76 61 6e 74 2c 20 61   are relevant, a
88a0: 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a  s follows:</p>..
88b0: 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20  <table border=0 
88c0: 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a  cellpadding=10>.
88d0: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
88e0: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
88f0: 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69  ht" width=120><i
8900: 3e 49 4e 53 45 52 54 3c 2f 69 3e 3c 2f 74 64 3e  >INSERT</i></td>
8910: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
8920: 22 3e 4e 45 57 20 72 65 66 65 72 65 6e 63 65 73  ">NEW references
8930: 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a   are valid</td>.
8940: 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76  </tr>.<tr>.<td v
8950: 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
8960: 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74 68 3d  n="right" width=
8970: 31 32 30 3e 3c 69 3e 55 50 44 41 54 45 3c 2f 69  120><i>UPDATE</i
8980: 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  ></td>.<td valig
8990: 6e 3d 22 74 6f 70 22 3e 4e 45 57 20 61 6e 64 20  n="top">NEW and 
89a0: 4f 4c 44 20 72 65 66 65 72 65 6e 63 65 73 20 61  OLD references a
89b0: 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f  re valid</td>.</
89c0: 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  tr>.<tr>.<td val
89d0: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
89e0: 22 72 69 67 68 74 22 20 77 69 64 74 68 3d 31 32  "right" width=12
89f0: 30 3e 3c 69 3e 44 45 4c 45 54 45 3c 2f 69 3e 3c  0><i>DELETE</i><
8a00: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
8a10: 22 74 6f 70 22 3e 4f 4c 44 20 72 65 66 65 72 65  "top">OLD refere
8a20: 6e 63 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f  nces are valid</
8a30: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c  td>.</tr>.</tabl
8a40: 65 3e 0a 3c 2f 70 3e 29 5e 0a 0a 3c 70 3e 5e 49  e>.</p>)^..<p>^I
8a50: 66 20 61 20 57 48 45 4e 20 63 6c 61 75 73 65 20  f a WHEN clause 
8a60: 69 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65  is supplied, the
8a70: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
8a80: 73 70 65 63 69 66 69 65 64 0a 61 72 65 20 6f 6e  specified.are on
8a90: 6c 79 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  ly executed for 
8aa0: 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74  rows for which t
8ab0: 68 65 20 57 48 45 4e 0a 63 6c 61 75 73 65 20 69  he WHEN.clause i
8ac0: 73 20 74 72 75 65 2e 20 5e 49 66 20 6e 6f 20 57  s true. ^If no W
8ad0: 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20 73 75  HEN clause is su
8ae0: 70 70 6c 69 65 64 2c 20 74 68 65 20 53 51 4c 20  pplied, the SQL 
8af0: 73 74 61 74 65 6d 65 6e 74 73 0a 61 72 65 20 65  statements.are e
8b00: 78 65 63 75 74 65 64 20 66 6f 72 20 61 6c 6c 20  xecuted for all 
8b10: 72 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  rows.</p>..<p>^T
8b20: 68 65 20 42 45 46 4f 52 45 20 6f 72 20 41 46 54  he BEFORE or AFT
8b30: 45 52 20 6b 65 79 77 6f 72 64 20 64 65 74 65 72  ER keyword deter
8b40: 6d 69 6e 65 73 20 77 68 65 6e 20 74 68 65 20 74  mines when the t
8b50: 72 69 67 67 65 72 20 61 63 74 69 6f 6e 73 0a 77  rigger actions.w
8b60: 69 6c 6c 20 62 65 20 65 78 65 63 75 74 65 64 20  ill be executed 
8b70: 72 65 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20  relative to the 
8b80: 69 6e 73 65 72 74 69 6f 6e 2c 20 6d 6f 64 69 66  insertion, modif
8b90: 69 63 61 74 69 6f 6e 20 6f 72 20 72 65 6d 6f 76  ication or remov
8ba0: 61 6c 20 6f 66 20 74 68 65 0a 61 73 73 6f 63 69  al of the.associ
8bb0: 61 74 65 64 20 72 6f 77 2e 3c 2f 70 3e 0a 0a 3c  ated row.</p>..<
8bc0: 70 3e 5e 41 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49  p>^An [ON CONFLI
8bd0: 43 54 5d 20 63 6c 61 75 73 65 20 6d 61 79 20 62  CT] clause may b
8be0: 65 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  e specified as p
8bf0: 61 72 74 20 6f 66 20 61 6e 20 5b 55 50 44 41 54  art of an [UPDAT
8c00: 45 5d 20 6f 72 20 5b 49 4e 53 45 52 54 5d 0a 61  E] or [INSERT].a
8c10: 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 74 68 65  ction within the
8c20: 20 62 6f 64 79 20 6f 66 20 74 68 65 20 74 72 69   body of the tri
8c30: 67 67 65 72 2e 0a 5e 48 6f 77 65 76 65 72 20 69  gger..^However i
8c40: 66 20 61 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43  f an [ON CONFLIC
8c50: 54 5d 20 63 6c 61 75 73 65 20 69 73 20 73 70 65  T] clause is spe
8c60: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
8c70: 66 20 0a 74 68 65 20 73 74 61 74 65 6d 65 6e 74  f .the statement
8c80: 20 63 61 75 73 69 6e 67 20 74 68 65 20 74 72 69   causing the tri
8c90: 67 67 65 72 20 74 6f 20 66 69 72 65 2c 20 74 68  gger to fire, th
8ca0: 65 6e 20 63 6f 6e 66 6c 69 63 74 20 68 61 6e 64  en conflict hand
8cb0: 6c 69 6e 67 0a 70 6f 6c 69 63 79 20 6f 66 20 74  ling.policy of t
8cc0: 68 65 20 6f 75 74 65 72 20 73 74 61 74 65 6d 65  he outer stateme
8cd0: 6e 74 20 69 73 20 75 73 65 64 20 69 6e 73 74 65  nt is used inste
8ce0: 61 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69  ad.</p>..<p>^Tri
8cf0: 67 67 65 72 73 20 61 72 65 20 61 75 74 6f 6d 61  ggers are automa
8d00: 74 69 63 61 6c 6c 79 20 5b 44 52 4f 50 20 54 52  tically [DROP TR
8d10: 49 47 47 45 52 20 7c 20 64 72 6f 70 70 65 64 5d  IGGER | dropped]
8d20: 0a 77 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20  .when the table 
8d30: 74 68 61 74 20 74 68 65 79 20 61 72 65 20 0a 61  that they are .a
8d40: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 28  ssociated with (
8d50: 74 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d  the <i>table-nam
8d60: 65 3c 2f 69 3e 20 74 61 62 6c 65 29 20 69 73 20  e</i> table) is 
8d70: 0a 5b 44 52 4f 50 20 54 41 42 4c 45 20 7c 20 64  .[DROP TABLE | d
8d80: 72 6f 70 70 65 64 5d 2e 20 20 5e 48 6f 77 65 76  ropped].  ^Howev
8d90: 65 72 20 69 66 20 74 68 65 20 74 68 65 20 74 72  er if the the tr
8da0: 69 67 67 65 72 20 61 63 74 69 6f 6e 73 20 72 65  igger actions re
8db0: 66 65 72 65 6e 63 65 0a 6f 74 68 65 72 20 74 61  ference.other ta
8dc0: 62 6c 65 73 2c 20 74 68 65 20 74 72 69 67 67 65  bles, the trigge
8dd0: 72 20 69 73 20 6e 6f 74 20 64 72 6f 70 70 65 64  r is not dropped
8de0: 20 6f 72 20 6d 6f 64 69 66 69 65 64 20 69 66 20   or modified if 
8df0: 74 68 6f 73 65 20 6f 74 68 65 72 0a 74 61 62 6c  those other.tabl
8e00: 65 73 20 61 72 65 20 5b 44 52 4f 50 20 54 41 42  es are [DROP TAB
8e10: 4c 45 20 7c 20 64 72 6f 70 70 65 64 5d 20 6f 72  LE | dropped] or
8e20: 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 20 7c 20   [ALTER TABLE | 
8e30: 6d 6f 64 69 66 69 65 64 5d 2e 3c 2f 70 3e 0a 0a  modified].</p>..
8e40: 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 61 72 65  <p>^Triggers are
8e50: 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 74   removed using t
8e60: 68 65 20 5b 44 52 4f 50 20 54 52 49 47 47 45 52  he [DROP TRIGGER
8e70: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e  ] statement.</p>
8e80: 0a 0a 3c 68 33 3e 53 79 6e 74 61 78 20 52 65 73  ..<h3>Syntax Res
8e90: 74 72 69 63 74 69 6f 6e 73 20 4f 6e 20 55 50 44  trictions On UPD
8ea0: 41 54 45 2c 20 44 45 4c 45 54 45 2c 20 61 6e 64  ATE, DELETE, and
8eb0: 20 49 4e 53 45 52 54 20 53 74 61 74 65 6d 65 6e   INSERT Statemen
8ec0: 74 73 20 57 69 74 68 69 6e 0a 20 20 20 20 54 72  ts Within.    Tr
8ed0: 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  iggers</h3>..<p>
8ee0: 5e 54 68 65 20 5b 55 50 44 41 54 45 5d 2c 20 5b  ^The [UPDATE], [
8ef0: 44 45 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e  DELETE], and [IN
8f00: 53 45 52 54 5d 0a 73 74 61 74 65 6d 65 6e 74 73  SERT].statements
8f10: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
8f20: 20 64 6f 20 6e 6f 74 20 73 75 70 70 6f 72 74 0a   do not support.
8f30: 74 68 65 20 66 75 6c 6c 20 73 79 6e 74 61 78 20  the full syntax 
8f40: 66 6f 72 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44  for [UPDATE], [D
8f50: 45 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e 53  ELETE], and [INS
8f60: 45 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e  ERT] statements.
8f70: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a    The following.
8f80: 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70 70  restrictions app
8f90: 6c 79 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c  ly:</p>..<ul>.<l
8fa0: 69 3e 3c 70 3e 0a 20 20 5e 28 54 68 65 20 6e 61  i><p>.  ^(The na
8fb0: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
8fc0: 74 6f 20 62 65 20 6d 6f 64 69 66 69 65 64 20 69  to be modified i
8fd0: 6e 20 61 6e 20 5b 55 50 44 41 54 45 5d 2c 20 5b  n an [UPDATE], [
8fe0: 44 45 4c 45 54 45 5d 2c 20 6f 72 20 5b 49 4e 53  DELETE], or [INS
8ff0: 45 52 54 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74  ERT].  statement
9000: 20 6d 75 73 74 20 62 65 20 61 6e 20 75 6e 71 75   must be an unqu
9010: 61 6c 69 66 69 65 64 20 74 61 62 6c 65 20 6e 61  alified table na
9020: 6d 65 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  me.  In other wo
9030: 72 64 73 2c 20 6f 6e 65 20 6d 75 73 74 0a 20 20  rds, one must.  
9040: 75 73 65 20 6a 75 73 74 20 22 3c 69 3e 74 61 62  use just "<i>tab
9050: 6c 65 6e 61 6d 65 3c 2f 69 3e 22 20 6e 6f 74 20  lename</i>" not 
9060: 22 3c 69 3e 64 61 74 61 62 61 73 65 3c 2f 69 3e  "<i>database</i>
9070: 3c 62 3e 2e 3c 2f 62 3e 3c 69 3e 74 61 62 6c 65  <b>.</b><i>table
9080: 6e 61 6d 65 3c 2f 69 3e 22 0a 20 20 77 68 65 6e  name</i>".  when
9090: 20 73 70 65 63 69 66 79 69 6e 67 20 74 68 65 20   specifying the 
90a0: 74 61 62 6c 65 2e 29 5e 20 20 5e 54 68 65 20 74  table.)^  ^The t
90b0: 61 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64 69 66  able to be modif
90c0: 69 65 64 20 6d 75 73 74 20 65 78 69 73 74 20 69  ied must exist i
90d0: 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 64 61 74  n the.  same dat
90e0: 61 62 61 73 65 20 61 73 20 74 68 65 20 74 61 62  abase as the tab
90f0: 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68  le or view to wh
9100: 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
9110: 69 73 20 61 74 74 61 63 68 65 64 2e 0a 20 20 3c  is attached..  <
9120: 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
9130: 3e 0a 20 20 5e 54 68 65 20 22 49 4e 53 45 52 54  >.  ^The "INSERT
9140: 20 49 4e 54 4f 20 3c 69 3e 74 61 62 6c 65 3c 2f   INTO <i>table</
9150: 69 3e 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45  i> DEFAULT VALUE
9160: 53 22 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 5b  S" form of the [
9170: 49 4e 53 45 52 54 5d 20 73 74 61 74 65 6d 65 6e  INSERT] statemen
9180: 74 0a 20 20 69 73 20 6e 6f 74 20 73 75 70 70 6f  t.  is not suppo
9190: 72 74 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69  rted..  </p></li
91a0: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68  >..<li><p>.  ^Th
91b0: 65 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64  e INDEXED BY and
91c0: 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61   NOT INDEXED cla
91d0: 75 73 65 73 20 61 72 65 20 6e 6f 74 20 73 75 70  uses are not sup
91e0: 70 6f 72 74 65 64 20 66 6f 72 20 5b 55 50 44 41  ported for [UPDA
91f0: 54 45 5d 20 61 6e 64 0a 20 20 5b 44 45 4c 45 54  TE] and.  [DELET
9200: 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20  E] statements.. 
9210: 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e   </p></li>..<li>
9220: 3c 70 3e 0a 20 20 5e 28 54 68 65 20 4f 52 44 45  <p>.  ^(The ORDE
9230: 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63  R BY and LIMIT c
9240: 6c 61 75 73 65 73 20 6f 6e 20 5b 55 50 44 41 54  lauses on [UPDAT
9250: 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20  E] and [DELETE] 
9260: 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 6e  statements are n
9270: 6f 74 0a 20 20 73 75 70 70 6f 72 74 65 64 2e 20  ot.  supported. 
9280: 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49   ORDER BY and LI
9290: 4d 49 54 20 61 72 65 20 6e 6f 74 20 6e 6f 72 6d  MIT are not norm
92a0: 61 6c 6c 79 20 73 75 70 70 6f 72 74 65 64 20 66  ally supported f
92b0: 6f 72 20 5b 55 50 44 41 54 45 5d 20 6f 72 0a 20  or [UPDATE] or. 
92c0: 20 5b 44 45 4c 45 54 45 5d 20 69 6e 20 61 6e 79   [DELETE] in any
92d0: 20 63 6f 6e 74 65 78 74 20 62 75 74 20 63 61 6e   context but can
92e0: 20 62 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20   be enabled for 
92f0: 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d  top-level statem
9300: 65 6e 74 73 0a 20 20 75 73 69 6e 67 20 74 68 65  ents.  using the
9310: 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   [SQLITE_ENABLE_
9320: 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49  UPDATE_DELETE_LI
9330: 4d 49 54 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  MIT] compile-tim
9340: 65 20 6f 70 74 69 6f 6e 2e 20 20 48 6f 77 65 76  e option.  Howev
9350: 65 72 2c 0a 20 20 74 68 61 74 20 63 6f 6d 70 69  er,.  that compi
9360: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 6f  le-time option o
9370: 6e 6c 79 20 61 70 70 6c 69 65 73 20 74 6f 20 74  nly applies to t
9380: 6f 70 2d 6c 65 76 65 6c 20 5b 55 50 44 41 54 45  op-level [UPDATE
9390: 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 0a 20  ] and [DELETE]. 
93a0: 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 6e 6f 74   statements, not
93b0: 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44   [UPDATE] and [D
93c0: 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74  ELETE] statement
93d0: 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  s within trigger
93e0: 73 2e 29 5e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e  s.)^.  </p></li>
93f0: 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  .</ul>..<tcl>hd_
9400: 66 72 61 67 6d 65 6e 74 20 69 6e 73 74 65 61 64  fragment instead
9410: 5f 6f 66 5f 74 72 69 67 67 65 72 20 7b 49 4e 53  _of_trigger {INS
9420: 54 45 41 44 20 4f 46 7d 20 7b 49 4e 53 54 45 41  TEAD OF} {INSTEA
9430: 44 20 4f 46 20 74 72 69 67 67 65 72 7d 3c 2f 74  D OF trigger}</t
9440: 63 6c 3e 0a 3c 68 33 3e 49 4e 53 54 45 41 44 20  cl>.<h3>INSTEAD 
9450: 4f 46 20 74 72 69 67 67 65 72 3c 2f 68 33 3e 0a  OF trigger</h3>.
9460: 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 6d 61  .<p>^Triggers ma
9470: 79 20 62 65 20 63 72 65 61 74 65 64 20 6f 6e 20  y be created on 
9480: 5b 76 69 65 77 73 5d 2c 20 61 73 20 77 65 6c 6c  [views], as well
9490: 20 61 73 20 6f 72 64 69 6e 61 72 79 20 74 61 62   as ordinary tab
94a0: 6c 65 73 2c 20 62 79 0a 73 70 65 63 69 66 79 69  les, by.specifyi
94b0: 6e 67 20 49 4e 53 54 45 41 44 20 4f 46 20 69 6e  ng INSTEAD OF in
94c0: 20 74 68 65 20 43 52 45 41 54 45 20 54 52 49 47   the CREATE TRIG
94d0: 47 45 52 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a  GER statement. .
94e0: 5e 49 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ^If one or more 
94f0: 4f 4e 20 49 4e 53 45 52 54 2c 20 4f 4e 20 44 45  ON INSERT, ON DE
9500: 4c 45 54 45 0a 6f 72 20 4f 4e 20 55 50 44 41 54  LETE.or ON UPDAT
9510: 45 20 74 72 69 67 67 65 72 73 20 61 72 65 20 64  E triggers are d
9520: 65 66 69 6e 65 64 20 6f 6e 20 61 20 76 69 65 77  efined on a view
9530: 2c 20 74 68 65 6e 20 69 74 20 69 73 20 6e 6f 74  , then it is not
9540: 20 61 6e 0a 65 72 72 6f 72 20 74 6f 20 65 78 65   an.error to exe
9550: 63 75 74 65 20 61 6e 20 49 4e 53 45 52 54 2c 20  cute an INSERT, 
9560: 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
9570: 20 73 74 61 74 65 6d 65 6e 74 20 6f 6e 20 74 68   statement on th
9580: 65 20 76 69 65 77 2c 20 0a 72 65 73 70 65 63 74  e view, .respect
9590: 69 76 65 6c 79 2e 20 20 5e 49 6e 73 74 65 61 64  ively.  ^Instead
95a0: 2c 0a 65 78 65 63 75 74 69 6e 67 20 61 6e 20 49  ,.executing an I
95b0: 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f 72  NSERT, DELETE or
95c0: 20 55 50 44 41 54 45 20 6f 6e 20 74 68 65 20 76   UPDATE on the v
95d0: 69 65 77 20 63 61 75 73 65 73 20 74 68 65 20 61  iew causes the a
95e0: 73 73 6f 63 69 61 74 65 64 0a 74 72 69 67 67 65  ssociated.trigge
95f0: 72 73 20 74 6f 20 66 69 72 65 2e 20 5e 54 68 65  rs to fire. ^The
9600: 20 72 65 61 6c 20 74 61 62 6c 65 73 20 75 6e 64   real tables und
9610: 65 72 6c 79 69 6e 67 20 74 68 65 20 76 69 65 77  erlying the view
9620: 20 61 72 65 20 6e 6f 74 20 6d 6f 64 69 66 69 65   are not modifie
9630: 64 0a 28 65 78 63 65 70 74 20 70 6f 73 73 69 62  d.(except possib
9640: 6c 79 20 65 78 70 6c 69 63 69 74 6c 79 2c 20 62  ly explicitly, b
9650: 79 20 61 20 74 72 69 67 67 65 72 20 70 72 6f 67  y a trigger prog
9660: 72 61 6d 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e  ram).</p>..<p>^N
9670: 6f 74 65 20 74 68 61 74 20 74 68 65 20 5b 73 71  ote that the [sq
9680: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d  lite3_changes()]
9690: 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 74 6f   and [sqlite3_to
96a0: 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20 69  tal_changes()] i
96b0: 6e 74 65 72 66 61 63 65 73 0a 64 6f 20 6e 6f 74  nterfaces.do not
96c0: 20 63 6f 75 6e 74 20 49 4e 53 54 45 41 44 20 4f   count INSTEAD O
96d0: 46 20 74 72 69 67 67 65 72 20 66 69 72 69 6e 67  F trigger firing
96e0: 73 2c 20 62 75 74 20 74 68 65 0a 5b 63 6f 75 6e  s, but the.[coun
96f0: 74 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d 61  t_changes pragma
9700: 5d 20 64 6f 65 73 20 63 6f 75 6e 74 20 49 4e 53  ] does count INS
9710: 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 20  TEAD OF trigger 
9720: 66 69 72 69 6e 67 2e 3c 2f 70 3e 0a 0a 3c 68 33  firing.</p>..<h3
9730: 3e 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a  >Examples</h3>..
9740: 3c 70 3e 5e 28 41 73 73 75 6d 69 6e 67 20 74 68  <p>^(Assuming th
9750: 61 74 20 63 75 73 74 6f 6d 65 72 20 72 65 63 6f  at customer reco
9760: 72 64 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  rds are stored i
9770: 6e 20 74 68 65 20 22 63 75 73 74 6f 6d 65 72 73  n the "customers
9780: 22 20 74 61 62 6c 65 2c 20 61 6e 64 0a 74 68 61  " table, and.tha
9790: 74 20 6f 72 64 65 72 20 72 65 63 6f 72 64 73 20  t order records 
97a0: 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  are stored in th
97b0: 65 20 22 6f 72 64 65 72 73 22 20 74 61 62 6c 65  e "orders" table
97c0: 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
97d0: 74 72 69 67 67 65 72 0a 65 6e 73 75 72 65 73 20  trigger.ensures 
97e0: 74 68 61 74 20 61 6c 6c 20 61 73 73 6f 63 69 61  that all associa
97f0: 74 65 64 20 6f 72 64 65 72 73 20 61 72 65 20 72  ted orders are r
9800: 65 64 69 72 65 63 74 65 64 20 77 68 65 6e 20 61  edirected when a
9810: 20 63 75 73 74 6f 6d 65 72 20 63 68 61 6e 67 65   customer change
9820: 73 0a 68 69 73 20 6f 72 20 68 65 72 20 61 64 64  s.his or her add
9830: 72 65 73 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  ress:</p>..<tcl>
9840: 45 78 61 6d 70 6c 65 20 7b 0a 43 52 45 41 54 45  Example {.CREATE
9850: 20 54 52 49 47 47 45 52 20 75 70 64 61 74 65 5f   TRIGGER update_
9860: 63 75 73 74 6f 6d 65 72 5f 61 64 64 72 65 73 73  customer_address
9870: 20 55 50 44 41 54 45 20 4f 46 20 61 64 64 72 65   UPDATE OF addre
9880: 73 73 20 4f 4e 20 63 75 73 74 6f 6d 65 72 73 20  ss ON customers 
9890: 0a 20 20 42 45 47 49 4e 0a 20 20 20 20 55 50 44  .  BEGIN.    UPD
98a0: 41 54 45 20 6f 72 64 65 72 73 20 53 45 54 20 61  ATE orders SET a
98b0: 64 64 72 65 73 73 20 3d 20 6e 65 77 2e 61 64 64  ddress = new.add
98c0: 72 65 73 73 20 57 48 45 52 45 20 63 75 73 74 6f  ress WHERE custo
98d0: 6d 65 72 5f 6e 61 6d 65 20 3d 20 6f 6c 64 2e 6e  mer_name = old.n
98e0: 61 6d 65 3b 0a 20 20 45 4e 44 3b 0a 7d 3c 2f 74  ame;.  END;.}</t
98f0: 63 6c 3e 0a 0a 3c 70 3e 57 69 74 68 20 74 68 69  cl>..<p>With thi
9900: 73 20 74 72 69 67 67 65 72 20 69 6e 73 74 61 6c  s trigger instal
9910: 6c 65 64 2c 20 65 78 65 63 75 74 69 6e 67 20 74  led, executing t
9920: 68 65 20 73 74 61 74 65 6d 65 6e 74 3a 3c 2f 70  he statement:</p
9930: 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20  >..<tcl>Example 
9940: 7b 0a 55 50 44 41 54 45 20 63 75 73 74 6f 6d 65  {.UPDATE custome
9950: 72 73 20 53 45 54 20 61 64 64 72 65 73 73 20 3d  rs SET address =
9960: 20 27 31 20 4d 61 69 6e 20 53 74 2e 27 20 57 48   '1 Main St.' WH
9970: 45 52 45 20 6e 61 6d 65 20 3d 20 27 4a 61 63 6b  ERE name = 'Jack
9980: 20 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e   Jones';.}</tcl>
9990: 0a 0a 3c 70 3e 63 61 75 73 65 73 20 74 68 65 20  ..<p>causes the 
99a0: 66 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20 62 65 20  following to be 
99b0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 65 78  automatically ex
99c0: 65 63 75 74 65 64 3a 3c 2f 70 3e 0a 0a 3c 74 63  ecuted:</p>..<tc
99d0: 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41  l>Example {.UPDA
99e0: 54 45 20 6f 72 64 65 72 73 20 53 45 54 20 61 64  TE orders SET ad
99f0: 64 72 65 73 73 20 3d 20 27 31 20 4d 61 69 6e 20  dress = '1 Main 
9a00: 53 74 2e 27 20 57 48 45 52 45 20 63 75 73 74 6f  St.' WHERE custo
9a10: 6d 65 72 5f 6e 61 6d 65 20 3d 20 27 4a 61 63 6b  mer_name = 'Jack
9a20: 20 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e   Jones';.}</tcl>
9a30: 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  )^..<tcl>hd_frag
9a40: 6d 65 6e 74 20 75 6e 64 65 66 5f 62 65 66 6f 72  ment undef_befor
9a50: 65 20 7b 75 6e 64 65 66 69 6e 65 64 20 42 45 46  e {undefined BEF
9a60: 4f 52 45 20 74 72 69 67 67 65 72 20 62 65 68 61  ORE trigger beha
9a70: 76 69 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  vior}</tcl>.<h3>
9a80: 43 61 75 74 69 6f 6e 73 20 4f 6e 20 54 68 65 20  Cautions On The 
9a90: 55 73 65 20 4f 66 20 42 45 46 4f 52 45 20 74 72  Use Of BEFORE tr
9aa0: 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  iggers</h3>..<p>
9ab0: 49 66 20 61 20 42 45 46 4f 52 45 20 55 50 44 41  If a BEFORE UPDA
9ac0: 54 45 20 6f 72 20 42 45 46 4f 52 45 20 44 45 4c  TE or BEFORE DEL
9ad0: 45 54 45 20 74 72 69 67 67 65 72 20 6d 6f 64 69  ETE trigger modi
9ae0: 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20  fies or deletes 
9af0: 61 20 72 6f 77 0a 74 68 61 74 20 77 61 73 20 74  a row.that was t
9b00: 6f 20 68 61 76 65 20 62 65 65 6e 20 75 70 64 61  o have been upda
9b10: 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64 2c 20  ted or deleted, 
9b20: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
9b30: 6f 66 20 74 68 65 20 73 75 62 73 65 71 75 65 6e  of the subsequen
9b40: 74 0a 75 70 64 61 74 65 20 6f 72 20 64 65 6c 65  t.update or dele
9b50: 74 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  te operation is 
9b60: 75 6e 64 65 66 69 6e 65 64 2e 20 20 46 75 72 74  undefined.  Furt
9b70: 68 65 72 6d 6f 72 65 2c 20 69 66 20 61 20 42 45  hermore, if a BE
9b80: 46 4f 52 45 20 74 72 69 67 67 65 72 0a 6d 6f 64  FORE trigger.mod
9b90: 69 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73  ifies or deletes
9ba0: 20 61 20 72 6f 77 2c 20 74 68 65 6e 20 69 74 20   a row, then it 
9bb0: 69 73 20 75 6e 64 65 66 69 6e 65 64 20 77 68 65  is undefined whe
9bc0: 74 68 65 72 20 6f 72 20 6e 6f 74 20 41 46 54 45  ther or not AFTE
9bd0: 52 20 74 72 69 67 67 65 72 73 0a 74 68 61 74 20  R triggers.that 
9be0: 77 6f 75 6c 64 20 68 61 76 65 20 6f 74 68 65 72  would have other
9bf0: 77 69 73 65 20 72 75 6e 20 6f 6e 20 74 68 6f 73  wise run on thos
9c00: 65 20 72 6f 77 73 20 77 69 6c 6c 20 69 6e 20 66  e rows will in f
9c10: 61 63 74 20 72 75 6e 2e 0a 3c 2f 70 3e 0a 0a 3c  act run..</p>..<
9c20: 70 3e 54 68 65 20 76 61 6c 75 65 20 6f 66 20 4e  p>The value of N
9c30: 45 57 2e 72 6f 77 69 64 20 69 73 20 75 6e 64 65  EW.rowid is unde
9c40: 66 69 6e 65 64 20 69 6e 20 61 20 42 45 46 4f 52  fined in a BEFOR
9c50: 45 20 49 4e 53 45 52 54 20 74 72 69 67 67 65 72  E INSERT trigger
9c60: 20 69 6e 20 77 68 69 63 68 0a 74 68 65 20 72 6f   in which.the ro
9c70: 77 69 64 20 69 73 20 6e 6f 74 20 65 78 70 6c 69  wid is not expli
9c80: 63 69 74 6c 79 20 73 65 74 20 74 6f 20 61 6e 20  citly set to an 
9c90: 69 6e 74 65 67 65 72 2e 3c 2f 70 3e 0a 0a 3c 70  integer.</p>..<p
9ca0: 3e 42 65 63 61 75 73 65 20 6f 66 20 74 68 65 20  >Because of the 
9cb0: 62 65 68 61 76 69 6f 72 73 20 64 65 73 63 72 69  behaviors descri
9cc0: 62 65 64 20 61 62 6f 76 65 2c 20 70 72 6f 67 72  bed above, progr
9cd0: 61 6d 6d 65 72 73 20 61 72 65 20 65 6e 63 6f 75  ammers are encou
9ce0: 72 61 67 65 64 20 74 6f 0a 70 72 65 66 65 72 20  raged to.prefer 
9cf0: 41 46 54 45 52 20 74 72 69 67 67 65 72 73 20 6f  AFTER triggers o
9d00: 76 65 72 20 42 45 46 4f 52 45 20 74 72 69 67 67  ver BEFORE trigg
9d10: 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 68  ers.</p>..<h3>Th
9d20: 65 20 52 41 49 53 45 28 29 20 66 75 6e 63 74 69  e RAISE() functi
9d30: 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20  on</h3>..<p>^(A 
9d40: 73 70 65 63 69 61 6c 20 53 51 4c 20 66 75 6e 63  special SQL func
9d50: 74 69 6f 6e 20 52 41 49 53 45 28 29 20 6d 61 79  tion RAISE() may
9d60: 20 62 65 20 75 73 65 64 20 77 69 74 68 69 6e 20   be used within 
9d70: 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  a trigger-progra
9d80: 6d 2c 29 5e 0a 77 69 74 68 20 74 68 65 20 66 6f  m,)^.with the fo
9d90: 6c 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78 3c 2f  llowing syntax</
9da0: 70 3e 20 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65  p> ..<tcl>Bubble
9db0: 44 69 61 67 72 61 6d 20 72 61 69 73 65 2d 66 75  Diagram raise-fu
9dc0: 6e 63 74 69 6f 6e 3c 2f 74 63 6c 3e 0a 0a 3c 70  nction</tcl>..<p
9dd0: 3e 5e 57 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68  >^When one of th
9de0: 65 20 66 69 72 73 74 20 74 68 72 65 65 20 66 6f  e first three fo
9df0: 72 6d 73 20 69 73 20 63 61 6c 6c 65 64 20 64 75  rms is called du
9e00: 72 69 6e 67 20 74 72 69 67 67 65 72 2d 70 72 6f  ring trigger-pro
9e10: 67 72 61 6d 0a 65 78 65 63 75 74 69 6f 6e 2c 20  gram.execution, 
9e20: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 5b 4f  the specified [O
9e30: 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 70 72 6f 63  N CONFLICT] proc
9e40: 65 73 73 69 6e 67 20 69 73 20 70 65 72 66 6f 72  essing is perfor
9e50: 6d 65 64 0a 28 65 69 74 68 65 72 20 41 42 4f 52  med.(either ABOR
9e60: 54 2c 20 46 41 49 4c 20 6f 72 20 52 4f 4c 4c 42  T, FAIL or ROLLB
9e70: 41 43 4b 29 20 61 6e 64 20 74 68 65 20 63 75 72  ACK) and the cur
9e80: 72 65 6e 74 20 71 75 65 72 79 20 74 65 72 6d 69  rent query termi
9e90: 6e 61 74 65 73 2e 0a 41 6e 20 65 72 72 6f 72 20  nates..An error 
9ea0: 63 6f 64 65 20 6f 66 20 5b 53 51 4c 49 54 45 5f  code of [SQLITE_
9eb0: 43 4f 4e 53 54 52 41 49 4e 54 5d 20 69 73 20 72  CONSTRAINT] is r
9ec0: 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 61  eturned to the a
9ed0: 70 70 6c 69 63 61 74 69 6f 6e 2c 0a 61 6c 6f 6e  pplication,.alon
9ee0: 67 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69  g with the speci
9ef0: 66 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73 61  fied error messa
9f00: 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65  ge.</p>..<p>^Whe
9f10: 6e 20 52 41 49 53 45 28 49 47 4e 4f 52 45 29 20  n RAISE(IGNORE) 
9f20: 69 73 20 63 61 6c 6c 65 64 2c 20 74 68 65 20 72  is called, the r
9f30: 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 65 20  emainder of the 
9f40: 63 75 72 72 65 6e 74 20 74 72 69 67 67 65 72 20  current trigger 
9f50: 70 72 6f 67 72 61 6d 2c 0a 74 68 65 20 73 74 61  program,.the sta
9f60: 74 65 6d 65 6e 74 20 74 68 61 74 20 63 61 75 73  tement that caus
9f70: 65 64 20 74 68 65 20 74 72 69 67 67 65 72 20 70  ed the trigger p
9f80: 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74  rogram to execut
9f90: 65 20 61 6e 64 20 61 6e 79 20 73 75 62 73 65 71  e and any subseq
9fa0: 75 65 6e 74 0a 74 72 69 67 67 65 72 20 70 72 6f  uent.trigger pro
9fb0: 67 72 61 6d 73 20 74 68 61 74 20 77 6f 75 6c 64  grams that would
9fc0: 20 6f 66 20 62 65 65 6e 20 65 78 65 63 75 74 65   of been execute
9fd0: 64 20 61 72 65 20 61 62 61 6e 64 6f 6e 65 64 2e  d are abandoned.
9fe0: 20 5e 4e 6f 20 64 61 74 61 62 61 73 65 0a 63 68   ^No database.ch
9ff0: 61 6e 67 65 73 20 61 72 65 20 72 6f 6c 6c 65 64  anges are rolled
a000: 20 62 61 63 6b 2e 20 20 5e 49 66 20 74 68 65 20   back.  ^If the 
a010: 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 63  statement that c
a020: 61 75 73 65 64 20 74 68 65 20 74 72 69 67 67 65  aused the trigge
a030: 72 20 70 72 6f 67 72 61 6d 0a 74 6f 20 65 78 65  r program.to exe
a040: 63 75 74 65 20 69 73 20 69 74 73 65 6c 66 20 70  cute is itself p
a050: 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72  art of a trigger
a060: 20 70 72 6f 67 72 61 6d 2c 20 74 68 65 6e 20 74   program, then t
a070: 68 61 74 20 74 72 69 67 67 65 72 20 70 72 6f 67  hat trigger prog
a080: 72 61 6d 0a 72 65 73 75 6d 65 73 20 65 78 65 63  ram.resumes exec
a090: 75 74 69 6f 6e 20 61 74 20 74 68 65 20 62 65 67  ution at the beg
a0a0: 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 6e 65  inning of the ne
a0b0: 78 74 20 73 74 65 70 2e 0a 3c 2f 70 3e 0a 0a 0a  xt step..</p>...
a0c0: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
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 23 23  ################
a110: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43  #####.Section {C
a120: 52 45 41 54 45 20 56 49 45 57 7d 20 7b 63 72 65  REATE VIEW} {cre
a130: 61 74 65 76 69 65 77 7d 20 7b 7b 43 52 45 41 54  ateview} {{CREAT
a140: 45 20 56 49 45 57 7d 20 76 69 65 77 20 2a 76 69  E VIEW} view *vi
a150: 65 77 73 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67  ews}..BubbleDiag
a160: 72 61 6d 20 63 72 65 61 74 65 2d 76 69 65 77 2d  ram create-view-
a170: 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c  stmt 1.</tcl>..<
a180: 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 56 49  p>^The CREATE VI
a190: 45 57 20 63 6f 6d 6d 61 6e 64 20 61 73 73 69 67  EW command assig
a1a0: 6e 73 20 61 20 6e 61 6d 65 20 74 6f 20 61 20 70  ns a name to a p
a1b0: 72 65 2d 70 61 63 6b 61 67 65 64 20 0a 5b 53 45  re-packaged .[SE
a1c0: 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2e  LECT] statement.
a1d0: 20 0a 5e 4f 6e 63 65 20 74 68 65 20 76 69 65 77   .^Once the view
a1e0: 20 69 73 20 63 72 65 61 74 65 64 2c 20 69 74 20   is created, it 
a1f0: 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 74  can be used in t
a200: 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 6f  he FROM clause.o
a210: 66 20 61 6e 6f 74 68 65 72 20 5b 53 45 4c 45 43  f another [SELEC
a220: 54 5d 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61  T] in place of a
a230: 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a 3c 2f 70   table name..</p
a240: 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 22 54  >..<p>^If the "T
a250: 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41  EMP" or "TEMPORA
a260: 52 59 22 20 6b 65 79 77 6f 72 64 20 6f 63 63 75  RY" keyword occu
a270: 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20 22 43  rs in between "C
a280: 52 45 41 54 45 22 0a 61 6e 64 20 22 56 49 45 57  REATE".and "VIEW
a290: 22 20 74 68 65 6e 20 74 68 65 20 76 69 65 77 20  " then the view 
a2a0: 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64 20  that is created 
a2b0: 69 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c 65 20  is only visible 
a2c0: 74 6f 20 74 68 65 0a 70 72 6f 63 65 73 73 20 74  to the.process t
a2d0: 68 61 74 20 6f 70 65 6e 65 64 20 74 68 65 20 64  hat opened the d
a2e0: 61 74 61 62 61 73 65 20 61 6e 64 20 69 73 20 61  atabase and is a
a2f0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c  utomatically del
a300: 65 74 65 64 20 77 68 65 6e 0a 74 68 65 20 64 61  eted when.the da
a310: 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64  tabase is closed
a320: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 49 66 20 61  .</p>..<p> ^If a
a330: 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61   &lt;database-na
a340: 6d 65 26 67 74 3b 20 69 73 20 73 70 65 63 69 66  me&gt; is specif
a350: 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 76 69  ied, then the vi
a360: 65 77 20 69 73 20 63 72 65 61 74 65 64 20 69 6e  ew is created in
a370: 20 0a 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61   .the named data
a380: 62 61 73 65 2e 20 5e 49 74 20 69 73 20 61 6e 20  base. ^It is an 
a390: 65 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79  error to specify
a3a0: 20 62 6f 74 68 20 61 20 26 6c 74 3b 64 61 74 61   both a &lt;data
a3b0: 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 0a 61 6e  base-name&gt;.an
a3c0: 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f  d the TEMP keywo
a3d0: 72 64 20 6f 6e 20 61 20 56 49 45 57 2c 20 75 6e  rd on a VIEW, un
a3e0: 6c 65 73 73 20 74 68 65 20 26 6c 74 3b 64 61 74  less the &lt;dat
a3f0: 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69  abase-name&gt; i
a400: 73 20 22 74 65 6d 70 22 2e 0a 5e 49 66 20 6e 6f  s "temp"..^If no
a410: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69   database name i
a420: 73 20 73 70 65 63 69 66 69 65 64 2c 20 61 6e 64  s specified, and
a430: 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f 72   the TEMP keywor
a440: 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74  d is not present
a450: 2c 0a 74 68 65 20 56 49 45 57 20 69 73 20 63 72  ,.the VIEW is cr
a460: 65 61 74 65 64 20 69 6e 20 74 68 65 20 6d 61 69  eated in the mai
a470: 6e 20 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a  n database.</p>.
a480: 0a 3c 70 3e 5e 59 6f 75 20 63 61 6e 6e 6f 74 20  .<p>^You cannot 
a490: 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52  [DELETE], [INSER
a4a0: 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d 20  T], or [UPDATE] 
a4b0: 61 20 76 69 65 77 2e 20 20 5e 56 69 65 77 73 20  a view.  ^Views 
a4c0: 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 20 0a 69  are read-only .i
a4d0: 6e 20 53 51 4c 69 74 65 2e 20 20 5e 48 6f 77 65  n SQLite.  ^Howe
a4e0: 76 65 72 2c 20 69 6e 20 6d 61 6e 79 20 63 61 73  ver, in many cas
a4f0: 65 73 20 79 6f 75 20 63 61 6e 20 75 73 65 20 61  es you can use a
a500: 6e 0a 5b 49 4e 53 54 45 41 44 20 4f 46 20 74 72  n.[INSTEAD OF tr
a510: 69 67 67 65 72 5d 20 6f 6e 20 74 68 65 20 76 69  igger] on the vi
a520: 65 77 20 74 6f 20 61 63 63 6f 6d 70 6c 69 73 68  ew to accomplish
a530: 20 0a 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67   .the same thing
a540: 2e 20 20 5e 56 69 65 77 73 20 61 72 65 20 72 65  .  ^Views are re
a550: 6d 6f 76 65 64 20 0a 77 69 74 68 20 74 68 65 20  moved .with the 
a560: 5b 44 52 4f 50 20 56 49 45 57 5d 20 63 6f 6d 6d  [DROP VIEW] comm
a570: 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  and.</p>..<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 23 23 23 23 23 23 23 0a 53  ##############.S
a5d0: 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 56  ection {CREATE V
a5e0: 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20 7b 63  IRTUAL TABLE} {c
a5f0: 72 65 61 74 65 76 74 61 62 7d 20 7b 7b 43 52 45  reatevtab} {{CRE
a600: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
a610: 45 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  E}}..BubbleDiagr
a620: 61 6d 20 63 72 65 61 74 65 2d 76 69 72 74 75 61  am create-virtua
a630: 6c 2d 74 61 62 6c 65 2d 73 74 6d 74 20 31 0a 3c  l-table-stmt 1.<
a640: 2f 74 63 6c 3e 0a 0a 3c 70 3e 41 20 5b 76 69 72  /tcl>..<p>A [vir
a650: 74 75 61 6c 20 74 61 62 6c 65 5d 20 69 73 20 61  tual table] is a
a660: 6e 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 61  n interface to a
a670: 6e 20 65 78 74 65 72 6e 61 6c 20 73 74 6f 72 61  n external stora
a680: 67 65 20 6f 72 20 63 6f 6d 70 75 74 61 74 69 6f  ge or computatio
a690: 6e 0a 65 6e 67 69 6e 65 20 74 68 61 74 20 61 70  n.engine that ap
a6a0: 70 65 61 72 73 20 74 6f 20 62 65 20 61 20 74 61  pears to be a ta
a6b0: 62 6c 65 20 62 75 74 20 64 6f 65 73 20 6e 6f 74  ble but does not
a6c0: 20 61 63 74 75 61 6c 6c 79 20 73 74 6f 72 65 20   actually store 
a6d0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69 6e 20 74  information.in t
a6e0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
a6f0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 67 65 6e  .</p>..<p>In gen
a700: 65 72 61 6c 2c 20 79 6f 75 20 63 61 6e 20 64 6f  eral, you can do
a710: 20 61 6e 79 74 68 69 6e 67 20 77 69 74 68 20 61   anything with a
a720: 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 5d   [virtual table]
a730: 20 74 68 61 74 20 63 61 6e 20 62 65 20 64 6f 6e   that can be don
a740: 65 0a 77 69 74 68 20 61 6e 20 6f 72 64 69 6e 61  e.with an ordina
a750: 72 79 20 74 61 62 6c 65 2c 20 65 78 63 65 70 74  ry table, except
a760: 20 74 68 61 74 20 5e 79 6f 75 20 63 61 6e 6e 6f   that ^you canno
a770: 74 20 63 72 65 61 74 65 20 69 6e 64 69 63 65 73  t create indices
a780: 20 6f 72 20 74 72 69 67 67 65 72 73 20 6f 6e 20   or triggers on 
a790: 61 0a 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a.virtual table.
a7a0: 20 20 5e 53 6f 6d 65 20 76 69 72 74 75 61 6c 20    ^Some virtual 
a7b0: 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  table implementa
a7c0: 74 69 6f 6e 73 20 6d 69 67 68 74 20 69 6d 70 6f  tions might impo
a7d0: 73 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a 72 65  se additional.re
a7e0: 73 74 72 69 63 74 69 6f 6e 73 2e 20 20 46 6f 72  strictions.  For
a7f0: 20 65 78 61 6d 70 6c 65 2c 20 6d 61 6e 79 20 76   example, many v
a800: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 61 72  irtual tables ar
a810: 65 20 72 65 61 64 2d 6f 6e 6c 79 2e 3c 2f 70 3e  e read-only.</p>
a820: 0a 0a 3c 70 3e 54 68 65 20 26 6c 74 3b 6d 6f 64  ..<p>The &lt;mod
a830: 75 6c 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20  ule-name&gt; is 
a840: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20 6f  the name of an o
a850: 62 6a 65 63 74 20 74 68 61 74 20 69 6d 70 6c 65  bject that imple
a860: 6d 65 6e 74 73 0a 74 68 65 20 76 69 72 74 75 61  ments.the virtua
a870: 6c 20 74 61 62 6c 65 2e 20 20 5e 54 68 65 20 26  l table.  ^The &
a880: 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d 65 26 67  lt;module-name&g
a890: 74 3b 20 6d 75 73 74 20 62 65 20 72 65 67 69 73  t; must be regis
a8a0: 74 65 72 65 64 20 77 69 74 68 0a 74 68 65 20 53  tered with.the S
a8b0: 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 63  QLite database c
a8c0: 6f 6e 6e 65 63 74 69 6f 6e 20 75 73 69 6e 67 0a  onnection using.
a8d0: 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  [sqlite3_create_
a8e0: 6d 6f 64 75 6c 65 28 29 5d 20 6f 72 20 5b 73 71  module()] or [sq
a8f0: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64  lite3_create_mod
a900: 75 6c 65 5f 76 32 28 29 5d 0a 70 72 69 6f 72 20  ule_v2()].prior 
a910: 74 6f 20 69 73 73 75 69 6e 67 20 74 68 65 20 43  to issuing the C
a920: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
a930: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 5e  BLE statement..^
a940: 54 68 65 20 6d 6f 64 75 6c 65 20 74 61 6b 65 73  The module takes
a950: 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 63 6f   zero or more co
a960: 6d 6d 61 2d 73 65 70 61 72 61 74 65 64 20 61 72  mma-separated ar
a970: 67 75 6d 65 6e 74 73 2e 0a 5e 54 68 65 20 61 72  guments..^The ar
a980: 67 75 6d 65 6e 74 73 20 63 61 6e 20 62 65 20 6a  guments can be j
a990: 75 73 74 20 61 62 6f 75 74 20 61 6e 79 20 74 65  ust about any te
a9a0: 78 74 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74  xt as long as it
a9b0: 20 68 61 73 20 62 61 6c 61 6e 63 65 64 0a 70 61   has balanced.pa
a9c0: 72 65 6e 74 68 65 73 65 73 2e 20 20 54 68 65 20  rentheses.  The 
a9d0: 61 72 67 75 6d 65 6e 74 20 73 79 6e 74 61 78 20  argument syntax 
a9e0: 69 73 20 73 75 66 66 69 63 69 65 6e 74 6c 79 20  is sufficiently 
a9f0: 67 65 6e 65 72 61 6c 20 74 68 61 74 20 74 68 65  general that the
aa00: 0a 61 72 67 75 6d 65 6e 74 73 20 63 61 6e 20 62  .arguments can b
aa10: 65 20 6d 61 64 65 20 74 6f 20 61 70 70 65 61 72  e made to appear
aa20: 20 61 73 20 5b 63 6f 6c 75 6d 6e 20 64 65 66 69   as [column defi
aa30: 6e 69 74 69 6f 6e 73 5d 20 69 6e 20 61 20 74 72  nitions] in a tr
aa40: 61 64 69 74 69 6f 6e 61 6c 0a 5b 43 52 45 41 54  aditional.[CREAT
aa50: 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65  E TABLE] stateme
aa60: 6e 74 2e 20 20 0a 5e 53 51 4c 69 74 65 20 70 61  nt.  .^SQLite pa
aa70: 73 73 65 73 20 74 68 65 20 6d 6f 64 75 6c 65 20  sses the module 
aa80: 61 72 67 75 6d 65 6e 74 73 20 64 69 72 65 63 74  arguments direct
aa90: 6c 79 0a 74 6f 20 74 68 65 20 5b 78 43 72 65 61  ly.to the [xCrea
aaa0: 74 65 5d 20 61 6e 64 20 5b 78 43 6f 6e 6e 65 63  te] and [xConnec
aab0: 74 5d 20 6d 65 74 68 6f 64 73 20 6f 66 20 74 68  t] methods of th
aac0: 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  e module impleme
aad0: 6e 74 61 74 69 6f 6e 0a 77 69 74 68 6f 75 74 20  ntation.without 
aae0: 61 6e 79 20 69 6e 74 65 72 70 72 65 74 61 74 69  any interpretati
aaf0: 6f 6e 2e 20 20 49 74 20 69 73 20 74 68 65 20 72  on.  It is the r
ab00: 65 73 70 6f 6e 73 69 62 69 6c 69 74 79 0a 6f 66  esponsibility.of
ab10: 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c   the module impl
ab20: 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 70 61  ementation to pa
ab30: 72 73 65 20 61 6e 64 20 69 6e 74 65 72 70 72 65  rse and interpre
ab40: 74 20 69 74 73 20 6f 77 6e 20 61 72 67 75 6d 65  t its own argume
ab50: 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20  nts.</p>..<p>^A 
ab60: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 73  virtual table is
ab70: 20 64 65 73 74 72 6f 79 65 64 20 75 73 69 6e 67   destroyed using
ab80: 20 74 68 65 20 6f 72 64 69 6e 61 72 79 0a 5b 44   the ordinary.[D
ab90: 52 4f 50 20 54 41 42 4c 45 5d 20 73 74 61 74 65  ROP TABLE] state
aba0: 6d 65 6e 74 2e 20 20 54 68 65 72 65 20 69 73 20  ment.  There is 
abb0: 6e 6f 0a 44 52 4f 50 20 56 49 52 54 55 41 4c 20  no.DROP VIRTUAL 
abc0: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e  TABLE statement.
abd0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<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 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
ac30: 6f 6e 20 44 45 4c 45 54 45 20 64 65 6c 65 74 65  on DELETE delete
ac40: 20 7b 44 45 4c 45 54 45 20 2a 44 45 4c 45 54 45   {DELETE *DELETE
ac50: 73 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  s}..BubbleDiagra
ac60: 6d 20 64 65 6c 65 74 65 2d 73 74 6d 74 20 31 0a  m delete-stmt 1.
ac70: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 71 75  BubbleDiagram qu
ac80: 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61  alified-table-na
ac90: 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  me.</tcl>..<p>^T
aca0: 68 65 20 44 45 4c 45 54 45 20 63 6f 6d 6d 61 6e  he DELETE comman
acb0: 64 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 6d  d is used to rem
acc0: 6f 76 65 20 72 65 63 6f 72 64 73 20 66 72 6f 6d  ove records from
acd0: 20 61 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20 63   a table..^The c
ace0: 6f 6d 6d 61 6e 64 20 63 6f 6e 73 69 73 74 73 20  ommand consists 
acf0: 6f 66 20 74 68 65 20 22 44 45 4c 45 54 45 20 46  of the "DELETE F
ad00: 52 4f 4d 22 20 6b 65 79 77 6f 72 64 73 20 66 6f  ROM" keywords fo
ad10: 6c 6c 6f 77 65 64 20 62 79 0a 74 68 65 20 6e 61  llowed by.the na
ad20: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
ad30: 66 72 6f 6d 20 77 68 69 63 68 20 72 65 63 6f 72  from which recor
ad40: 64 73 20 61 72 65 20 74 6f 20 62 65 20 72 65 6d  ds are to be rem
ad50: 6f 76 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e  oved..</p>..<p>^
ad60: 57 69 74 68 6f 75 74 20 61 20 57 48 45 52 45 20  Without a WHERE 
ad70: 63 6c 61 75 73 65 2c 20 61 6c 6c 20 72 6f 77 73  clause, all rows
ad80: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 61 72   of the table ar
ad90: 65 20 72 65 6d 6f 76 65 64 2e 0a 5e 49 66 20 61  e removed..^If a
ada0: 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 73   WHERE clause is
adb0: 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65 6e 20   supplied, then 
adc0: 6f 6e 6c 79 20 74 68 6f 73 65 20 72 6f 77 73 20  only those rows 
add0: 74 68 61 74 20 6d 61 74 63 68 0a 74 68 65 20 65  that match.the e
ade0: 78 70 72 65 73 73 69 6f 6e 20 61 72 65 20 72 65  xpression are re
adf0: 6d 6f 76 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e  moved.</p>..<h3>
ae00: 52 65 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20  Restrictions on 
ae10: 44 45 4c 45 54 45 20 53 74 61 74 65 6d 65 6e 74  DELETE Statement
ae20: 73 20 57 69 74 68 69 6e 20 43 52 45 41 54 45 20  s Within CREATE 
ae30: 54 52 49 47 47 45 52 3c 2f 68 33 3e 0a 0a 3c 70  TRIGGER</h3>..<p
ae40: 3e 5e 54 68 65 72 65 20 61 72 65 20 61 64 64 69  >^There are addi
ae50: 74 69 6f 6e 61 6c 20 73 79 6e 74 61 78 20 72 65  tional syntax re
ae60: 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20 44 45  strictions on DE
ae70: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20  LETE statements 
ae80: 74 68 61 74 0a 6f 63 63 75 72 20 77 69 74 68 69  that.occur withi
ae90: 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20  n the body of a 
aea0: 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d  [CREATE TRIGGER]
aeb0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 5e 54 68   statement.  ^Th
aec0: 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c  e <i>table-name<
aed0: 2f 69 3e 0a 6d 75 73 74 20 62 65 20 75 6e 71 75  /i>.must be unqu
aee0: 61 6c 69 66 69 65 64 2e 20 0a 5e 28 49 6e 20 6f  alified. .^(In o
aef0: 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
af00: 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  <i>database-name
af10: 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65  </i><b>.</b> pre
af20: 66 69 78 0a 6f 6e 20 74 68 65 20 74 61 62 6c 65  fix.on the table
af30: 20 6e 61 6d 65 20 69 73 20 6e 6f 74 20 61 6c 6c   name is not all
af40: 6f 77 65 64 20 77 69 74 68 69 6e 20 74 72 69 67  owed within trig
af50: 67 65 72 73 2e 20 29 5e 0a 5e 54 68 65 20 74 61  gers. )^.^The ta
af60: 62 6c 65 20 66 72 6f 6d 20 77 68 69 63 68 20 74  ble from which t
af70: 6f 20 64 65 6c 65 74 65 20 6d 75 73 74 20 62 65  o delete must be
af80: 20 69 6e 20 74 68 65 20 73 61 6d 65 0a 64 61 74   in the same.dat
af90: 61 62 61 73 65 20 61 73 20 74 68 65 20 74 61 62  abase as the tab
afa0: 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  le to which the 
afb0: 74 72 69 67 67 65 72 20 69 73 20 61 74 74 61 63  trigger is attac
afc0: 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  hed.</p>..<p>^Th
afd0: 65 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64  e INDEXED BY and
afe0: 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61   NOT INDEXED cla
aff0: 75 73 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c  uses are not all
b000: 6f 77 65 64 20 6f 6e 20 44 45 4c 45 54 45 0a 73  owed on DELETE.s
b010: 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
b020: 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a   triggers.</p>..
b030: 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20 63 6c  <p>^The LIMIT cl
b040: 61 75 73 65 20 28 64 65 73 63 72 69 62 65 64 20  ause (described 
b050: 62 65 6c 6f 77 29 20 69 73 20 75 6e 73 75 70 70  below) is unsupp
b060: 6f 72 74 65 64 20 77 69 74 68 69 6e 20 74 72 69  orted within tri
b070: 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  ggers.</p>..<tcl
b080: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 74 72 75  >hd_fragment tru
b090: 63 61 74 65 6f 70 74 20 7b 74 72 75 6e 63 61 74  cateopt {truncat
b0a0: 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 7d 3c  e optimization}<
b0b0: 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 54 72  /tcl>.<h3>The Tr
b0c0: 75 6e 63 61 74 65 20 4f 70 74 69 6d 69 7a 61 74  uncate Optimizat
b0d0: 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 57 68  ion</h3>..<p>^Wh
b0e0: 65 6e 20 74 68 65 20 57 48 45 52 45 20 69 73 20  en the WHERE is 
b0f0: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 61 20 44  omitted from a D
b100: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
b110: 61 6e 64 20 74 68 65 20 74 61 62 6c 65 0a 62 65  and the table.be
b120: 69 6e 67 20 64 65 6c 65 74 65 64 20 68 61 73 20  ing deleted has 
b130: 6e 6f 20 74 72 69 67 67 65 72 73 2c 0a 53 51 4c  no triggers,.SQL
b140: 69 74 65 20 75 73 65 73 20 61 6e 20 6f 70 74 69  ite uses an opti
b150: 6d 69 7a 61 74 69 6f 6e 20 74 6f 20 65 72 61 73  mization to eras
b160: 65 20 74 68 65 20 65 6e 74 69 72 65 20 74 61 62  e the entire tab
b170: 6c 65 20 63 6f 6e 74 65 6e 74 0a 77 69 74 68 6f  le content.witho
b180: 75 74 20 68 61 76 69 6e 67 20 74 6f 20 76 69 73  ut having to vis
b190: 69 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74  it each row of t
b1a0: 68 65 20 74 61 62 6c 65 20 69 6e 64 69 76 69 64  he table individ
b1b0: 75 61 6c 6c 79 2e 0a 54 68 69 73 20 22 74 72 75  ually..This "tru
b1c0: 6e 63 61 74 65 22 20 6f 70 74 69 6d 69 7a 61 74  ncate" optimizat
b1d0: 69 6f 6e 20 6d 61 6b 65 73 20 74 68 65 20 64 65  ion makes the de
b1e0: 6c 65 74 65 20 72 75 6e 20 6d 75 63 68 20 66 61  lete run much fa
b1f0: 73 74 65 72 2e 0a 50 72 69 6f 72 20 74 6f 20 53  ster..Prior to S
b200: 51 4c 69 74 65 20 5b 76 65 72 73 69 6f 6e 20 33  QLite [version 3
b210: 2e 36 2e 35 5d 2c 20 74 68 65 20 74 72 75 6e 63  .6.5], the trunc
b220: 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ate optimization
b230: 0a 61 6c 73 6f 20 6d 65 61 6e 74 20 74 68 61 74  .also meant that
b240: 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68   the [sqlite3_ch
b250: 61 6e 67 65 73 28 29 5d 20 61 6e 64 0a 5b 73 71  anges()] and.[sq
b260: 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e  lite3_total_chan
b270: 67 65 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65  ges()] interface
b280: 73 0a 61 6e 64 20 74 68 65 20 5b 63 6f 75 6e 74  s.and the [count
b290: 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d 61 5d  _changes pragma]
b2a0: 0a 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c  .will not actual
b2b0: 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75  ly return the nu
b2c0: 6d 62 65 72 20 6f 66 20 64 65 6c 65 74 65 64 20  mber of deleted 
b2d0: 72 6f 77 73 2e 20 20 0a 54 68 61 74 20 70 72 6f  rows.  .That pro
b2e0: 62 6c 65 6d 20 68 61 73 20 62 65 65 6e 20 66 69  blem has been fi
b2f0: 78 65 64 20 61 73 20 6f 66 20 5b 76 65 72 73 69  xed as of [versi
b300: 6f 6e 20 33 2e 36 2e 35 5d 2e 0a 0a 3c 70 3e 5e  on 3.6.5]...<p>^
b310: 54 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74  The truncate opt
b320: 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20 62 65  imization can be
b330: 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73   permanently dis
b340: 61 62 6c 65 64 20 66 6f 72 20 61 6c 6c 20 71 75  abled for all qu
b350: 65 72 69 65 73 0a 62 79 20 72 65 63 6f 6d 70 69  eries.by recompi
b360: 6c 69 6e 67 0a 53 51 4c 69 74 65 20 77 69 74 68  ling.SQLite with
b370: 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4f 4d 49   the [SQLITE_OMI
b380: 54 5f 54 52 55 4e 43 41 54 45 5f 4f 50 54 49 4d  T_TRUNCATE_OPTIM
b390: 49 5a 41 54 49 4f 4e 5d 20 63 6f 6d 70 69 6c 65  IZATION] compile
b3a0: 2d 74 69 6d 65 20 73 77 69 74 63 68 2e 3c 2f 70  -time switch.</p
b3b0: 3e 0a 0a 3c 70 3e 54 68 65 20 74 72 75 6e 63 61  >..<p>The trunca
b3c0: 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  te optimization 
b3d0: 63 61 6e 20 61 6c 73 6f 20 62 65 20 64 69 73 61  can also be disa
b3e0: 62 6c 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20  bled at runtime 
b3f0: 75 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c 69 74  using.the [sqlit
b400: 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a 65  e3_set_authorize
b410: 72 28 29 5d 20 69 6e 74 65 72 66 61 63 65 2e 20  r()] interface. 
b420: 20 5e 49 66 20 61 6e 20 61 75 74 68 6f 72 69 7a   ^If an authoriz
b430: 65 72 20 63 61 6c 6c 62 61 63 6b 0a 72 65 74 75  er callback.retu
b440: 72 6e 73 20 5b 53 51 4c 49 54 45 5f 49 47 4e 4f  rns [SQLITE_IGNO
b450: 52 45 5d 20 66 6f 72 20 61 6e 20 5b 53 51 4c 49  RE] for an [SQLI
b460: 54 45 5f 44 45 4c 45 54 45 5d 20 61 63 74 69 6f  TE_DELETE] actio
b470: 6e 20 63 6f 64 65 2c 20 74 68 65 6e 0a 74 68 65  n code, then.the
b480: 20 44 45 4c 45 54 45 20 6f 70 65 72 61 74 69 6f   DELETE operatio
b490: 6e 20 77 69 6c 6c 20 70 72 6f 63 65 65 64 20 62  n will proceed b
b4a0: 75 74 20 74 68 65 20 74 72 75 6e 63 61 74 65 20  ut the truncate 
b4b0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 77 69 6c  optimization wil
b4c0: 6c 0a 62 65 20 62 79 70 61 73 73 65 64 20 61 6e  l.be bypassed an
b4d0: 64 20 72 6f 77 73 20 77 69 6c 6c 20 62 65 20 64  d rows will be d
b4e0: 65 6c 65 74 65 64 20 6f 6e 65 20 62 79 20 6f 6e  eleted one by on
b4f0: 65 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 55 73 65 20  e.</p>..<h3>Use 
b500: 4f 66 20 4c 49 4d 49 54 3c 2f 68 33 3e 0a 0a 3c  Of LIMIT</h3>..<
b510: 70 3e 5e 28 49 66 20 53 51 4c 69 74 65 20 69 73  p>^(If SQLite is
b520: 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74   compiled with t
b530: 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  he [SQLITE_ENABL
b540: 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f  E_UPDATE_DELETE_
b550: 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c 65 2d 74  LIMIT].compile-t
b560: 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 74 68 65 6e  ime option, then
b570: 20 74 68 65 20 73 79 6e 74 61 78 20 6f 66 20 74   the syntax of t
b580: 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  he DELETE statem
b590: 65 6e 74 20 69 73 0a 65 78 74 65 6e 64 65 64 20  ent is.extended 
b5a0: 62 79 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20  by the addition 
b5b0: 6f 66 20 6f 70 74 69 6f 6e 61 6c 20 4f 52 44 45  of optional ORDE
b5c0: 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63  R BY and LIMIT c
b5d0: 6c 61 75 73 65 73 3a 29 5e 3c 2f 70 3e 0a 0a 3c  lauses:)^</p>..<
b5e0: 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61  tcl>BubbleDiagra
b5f0: 6d 20 64 65 6c 65 74 65 2d 73 74 6d 74 2d 6c 69  m delete-stmt-li
b600: 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mited</tcl>..<p>
b610: 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 4c 49  ^The optional LI
b620: 4d 49 54 20 63 6c 61 75 73 65 20 63 61 6e 20 62  MIT clause can b
b630: 65 20 75 73 65 64 20 74 6f 20 6c 69 6d 69 74 20  e used to limit 
b640: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 72 6f  the number of.ro
b650: 77 73 20 64 65 6c 65 74 65 64 2c 20 61 6e 64 20  ws deleted, and 
b660: 74 68 65 72 65 62 79 20 6c 69 6d 69 74 20 74 68  thereby limit th
b670: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 74 72  e size of the tr
b680: 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 54 68 65 20  ansaction..^The 
b690: 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
b6a0: 6f 6e 20 61 20 44 45 4c 45 54 45 20 73 74 61 74  on a DELETE stat
b6b0: 65 6d 65 6e 74 0a 69 73 20 75 73 65 64 20 6f 6e  ement.is used on
b6c0: 6c 79 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ly to determine 
b6d0: 77 68 69 63 68 20 72 6f 77 73 20 66 61 6c 6c 0a  which rows fall.
b6e0: 77 69 74 68 69 6e 20 74 68 65 20 4c 49 4d 49 54  within the LIMIT
b6f0: 2e 20 20 5e 54 68 65 20 6f 72 64 65 72 20 69 6e  .  ^The order in
b700: 20 77 68 69 63 68 20 72 6f 77 73 20 61 72 65 20   which rows are 
b710: 64 65 6c 65 74 65 64 20 69 73 20 61 72 62 69 74  deleted is arbit
b720: 72 61 72 79 0a 61 6e 64 20 69 73 20 6e 6f 74 20  rary.and is not 
b730: 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
b740: 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
b750: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  e.</p>..<p>^The 
b760: 70 72 65 73 65 6e 63 65 20 6f 66 20 61 20 4c 49  presence of a LI
b770: 4d 49 54 20 63 6c 61 75 73 65 20 64 65 66 65 61  MIT clause defea
b780: 74 73 20 74 68 65 20 74 72 75 6e 63 61 74 65 20  ts the truncate 
b790: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 63 61 75  optimization.cau
b7a0: 73 69 6e 67 20 61 6c 6c 20 72 6f 77 73 20 62 65  sing all rows be
b7b0: 69 6e 67 20 64 65 6c 65 74 65 64 20 74 6f 20 62  ing deleted to b
b7c0: 65 20 76 69 73 69 74 65 64 2e 3c 2f 70 3e 0a 0a  e visited.</p>..
b7d0: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
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 23  ################
b820: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
b830: 45 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20  ETACH DATABASE} 
b840: 64 65 74 61 63 68 20 2a 44 45 54 41 43 48 0a 0a  detach *DETACH..
b850: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65  BubbleDiagram de
b860: 74 61 63 68 2d 73 74 6d 74 20 31 0a 3c 2f 74 63  tach-stmt 1.</tc
b870: 6c 3e 0a 0a 3c 70 3e 5e 54 68 69 73 20 73 74 61  l>..<p>^This sta
b880: 74 65 6d 65 6e 74 20 64 65 74 61 63 68 65 73 20  tement detaches 
b890: 61 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 64 61  an additional da
b8a0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
b8b0: 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 0a 61 74  n previously .at
b8c0: 74 61 63 68 65 64 20 75 73 69 6e 67 20 74 68 65  tached using the
b8d0: 20 5b 41 54 54 41 43 48 5d 20 73 74 61 74 65 6d   [ATTACH] statem
b8e0: 65 6e 74 2e 20 20 0a 5e 49 74 20 69 73 20 70 6f  ent.  .^It is po
b8f0: 73 73 69 62 6c 65 20 74 6f 20 68 61 76 65 20 74  ssible to have t
b900: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
b910: 20 66 69 6c 65 20 61 74 74 61 63 68 65 64 20 6d   file attached m
b920: 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 20 75 73  ultiple times us
b930: 69 6e 67 20 0a 64 69 66 66 65 72 65 6e 74 20 6e  ing .different n
b940: 61 6d 65 73 2c 20 61 6e 64 20 64 65 74 61 63 68  ames, and detach
b950: 69 6e 67 20 6f 6e 65 20 63 6f 6e 6e 65 63 74 69  ing one connecti
b960: 6f 6e 20 74 6f 20 61 20 66 69 6c 65 20 77 69 6c  on to a file wil
b970: 6c 20 6c 65 61 76 65 20 74 68 65 20 0a 6f 74 68  l leave the .oth
b980: 65 72 73 20 69 6e 74 61 63 74 2e 3c 2f 70 3e 0a  ers intact.</p>.
b990: 0a 3c 70 3e 5e 54 68 69 73 20 73 74 61 74 65 6d  .<p>^This statem
b9a0: 65 6e 74 20 77 69 6c 6c 20 66 61 69 6c 20 69 66  ent will fail if
b9b0: 20 53 51 4c 69 74 65 20 69 73 20 69 6e 20 74 68   SQLite is in th
b9c0: 65 20 6d 69 64 64 6c 65 20 6f 66 20 61 20 74 72  e middle of a tr
b9d0: 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a  ansaction.</p>..
b9e0: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
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 23  ################
ba30: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
ba40: 52 4f 50 20 49 4e 44 45 58 7d 20 64 72 6f 70 69  ROP INDEX} dropi
ba50: 6e 64 65 78 20 7b 7b 44 52 4f 50 20 49 4e 44 45  ndex {{DROP INDE
ba60: 58 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  X}}..BubbleDiagr
ba70: 61 6d 20 64 72 6f 70 2d 69 6e 64 65 78 2d 73 74  am drop-index-st
ba80: 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mt 1.</tcl>..<p>
ba90: 5e 54 68 65 20 44 52 4f 50 20 49 4e 44 45 58 20  ^The DROP INDEX 
baa0: 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65  statement remove
bab0: 73 20 61 6e 20 69 6e 64 65 78 20 61 64 64 65 64  s an index added
bac0: 0a 77 69 74 68 20 74 68 65 20 5b 43 52 45 41 54  .with the [CREAT
bad0: 45 20 49 4e 44 45 58 5d 20 73 74 61 74 65 6d 65  E INDEX] stateme
bae0: 6e 74 2e 20 20 54 68 65 20 69 6e 64 65 78 20 69  nt.  The index i
baf0: 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d  s completely rem
bb00: 6f 76 65 64 20 66 72 6f 6d 0a 74 68 65 20 64 69  oved from.the di
bb10: 73 6b 2e 20 20 54 68 65 20 6f 6e 6c 79 20 77 61  sk.  The only wa
bb20: 79 20 74 6f 20 72 65 63 6f 76 65 72 20 74 68 65  y to recover the
bb30: 20 69 6e 64 65 78 20 69 73 20 74 6f 20 72 65 65   index is to ree
bb40: 6e 74 65 72 20 74 68 65 0a 61 70 70 72 6f 70 72  nter the.appropr
bb50: 69 61 74 65 20 5b 43 52 45 41 54 45 20 49 4e 44  iate [CREATE IND
bb60: 45 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e  EX] command.</p>
bb70: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
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: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
bbd0: 44 52 4f 50 20 54 41 42 4c 45 7d 20 64 72 6f 70  DROP TABLE} drop
bbe0: 74 61 62 6c 65 20 7b 7b 44 52 4f 50 20 54 41 42  table {{DROP TAB
bbf0: 4c 45 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67  LE}}..BubbleDiag
bc00: 72 61 6d 20 64 72 6f 70 2d 74 61 62 6c 65 2d 73  ram drop-table-s
bc10: 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  tmt 1.</tcl>..<p
bc20: 3e 5e 54 68 65 20 44 52 4f 50 20 54 41 42 4c 45  >^The DROP TABLE
bc30: 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76   statement remov
bc40: 65 73 20 61 20 74 61 62 6c 65 20 61 64 64 65 64  es a table added
bc50: 20 77 69 74 68 20 74 68 65 0a 5b 43 52 45 41 54   with the.[CREAT
bc60: 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65  E TABLE] stateme
bc70: 6e 74 2e 20 20 54 68 65 20 6e 61 6d 65 20 73 70  nt.  The name sp
bc80: 65 63 69 66 69 65 64 20 69 73 20 74 68 65 0a 74  ecified is the.t
bc90: 61 62 6c 65 20 6e 61 6d 65 2e 20 20 5e 54 68 65  able name.  ^The
bca0: 20 64 72 6f 70 70 65 64 20 74 61 62 6c 65 20 69   dropped table i
bcb0: 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d  s completely rem
bcc0: 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61  oved from the da
bcd0: 74 61 62 61 73 65 20 0a 73 63 68 65 6d 61 20 61  tabase .schema a
bce0: 6e 64 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65  nd the disk file
bcf0: 2e 20 20 54 68 65 20 74 61 62 6c 65 20 63 61 6e  .  The table can
bd00: 20 6e 6f 74 20 62 65 20 72 65 63 6f 76 65 72 65   not be recovere
bd10: 64 2e 20 20 0a 5e 41 6c 6c 20 69 6e 64 69 63 65  d.  .^All indice
bd20: 73 20 61 6e 64 20 74 72 69 67 67 65 72 73 0a 61  s and triggers.a
bd30: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
bd40: 68 65 20 74 61 62 6c 65 20 61 72 65 20 61 6c 73  he table are als
bd50: 6f 20 64 65 6c 65 74 65 64 2e 3c 2f 70 3e 0a 0a  o deleted.</p>..
bd60: 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c  <p>^The optional
bd70: 20 49 46 20 45 58 49 53 54 53 20 63 6c 61 75 73   IF EXISTS claus
bd80: 65 20 73 75 70 70 72 65 73 73 65 73 20 74 68 65  e suppresses the
bd90: 20 65 72 72 6f 72 20 74 68 61 74 20 77 6f 75 6c   error that woul
bda0: 64 20 6e 6f 72 6d 61 6c 6c 79 0a 72 65 73 75 6c  d normally.resul
bdb0: 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 64  t if the table d
bdc0: 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2e 3c 2f  oes not exist.</
bdd0: 70 3e 0a 0a 3c 70 3e 5e 49 66 20 5b 66 6f 72 65  p>..<p>^If [fore
bde0: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
bdf0: 6e 74 73 5d 20 61 72 65 20 65 6e 61 62 6c 65 64  nts] are enabled
be00: 2c 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63  , a DROP TABLE c
be10: 6f 6d 6d 61 6e 64 20 70 65 72 66 6f 72 6d 73 20  ommand performs 
be20: 61 6e 0a 69 6d 70 6c 69 63 69 74 20 5b 44 45 4c  an.implicit [DEL
be30: 45 54 45 20 7c 20 44 45 4c 45 54 45 20 46 52 4f  ETE | DELETE FRO
be40: 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 5d 20 63  M &lt;tbl&gt;] c
be50: 6f 6d 6d 61 6e 64 20 62 65 66 6f 72 65 20 72 65  ommand before re
be60: 6d 6f 76 69 6e 67 20 74 68 65 0a 74 61 62 6c 65  moving the.table
be70: 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
be80: 73 65 20 73 63 68 65 6d 61 2e 20 5e 41 6e 79 20  se schema. ^Any 
be90: 74 72 69 67 67 65 72 73 20 61 74 74 61 63 68 65  triggers attache
bea0: 64 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 61  d to the table a
beb0: 72 65 0a 64 72 6f 70 70 65 64 20 66 72 6f 6d 20  re.dropped from 
bec0: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
bed0: 65 6d 61 20 62 65 66 6f 72 65 20 74 68 65 20 69  ema before the i
bee0: 6d 70 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46  mplicit DELETE F
bef0: 52 4f 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20  ROM &lt;tbl&gt; 
bf00: 0a 69 73 20 65 78 65 63 75 74 65 64 2c 20 73 6f  .is executed, so
bf10: 20 74 68 69 73 20 63 61 6e 6e 6f 74 20 63 61 75   this cannot cau
bf20: 73 65 20 61 6e 79 20 74 72 69 67 67 65 72 73 20  se any triggers 
bf30: 74 6f 20 66 69 72 65 2e 20 42 79 20 63 6f 6e 74  to fire. By cont
bf40: 72 61 73 74 2c 20 5e 61 6e 0a 69 6d 70 6c 69 63  rast, ^an.implic
bf50: 69 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26  it DELETE FROM &
bf60: 6c 74 3b 74 62 6c 26 67 74 3b 20 64 6f 65 73 20  lt;tbl&gt; does 
bf70: 63 61 75 73 65 20 61 6e 79 20 63 6f 6e 66 69 67  cause any config
bf80: 75 72 65 64 0a 5b 66 6f 72 65 69 67 6e 20 6b 65  ured.[foreign ke
bf90: 79 20 61 63 74 69 6f 6e 73 5d 20 74 6f 20 74 61  y actions] to ta
bfa0: 6b 65 20 70 6c 61 63 65 2e 20 0a 5e 49 66 20 74  ke place. .^If t
bfb0: 68 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45  he implicit DELE
bfc0: 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26  TE FROM &lt;tbl&
bfd0: 67 74 3b 20 65 78 65 63 75 74 65 64 0a 61 73 20  gt; executed.as 
bfe0: 70 61 72 74 20 6f 66 20 61 20 44 52 4f 50 20 54  part of a DROP T
bff0: 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 76 69 6f  ABLE command vio
c000: 6c 61 74 65 73 20 61 6e 79 20 69 6d 6d 65 64 69  lates any immedi
c010: 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
c020: 63 6f 6e 73 74 72 61 69 6e 74 73 2c 0a 61 6e 20  constraints,.an 
c030: 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65  error is returne
c040: 64 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20  d and the table 
c050: 69 73 20 6e 6f 74 20 64 72 6f 70 70 65 64 2e 20  is not dropped. 
c060: 5e 49 66 20 0a 74 68 65 20 69 6d 70 6c 69 63 69  ^If .the implici
c070: 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c  t DELETE FROM &l
c080: 74 3b 74 62 6c 26 67 74 3b 20 63 61 75 73 65 73  t;tbl&gt; causes
c090: 20 61 6e 79 20 0a 64 65 66 65 72 72 65 64 20 66   any .deferred f
c0a0: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
c0b0: 72 61 69 6e 74 73 20 74 6f 20 62 65 20 76 69 6f  raints to be vio
c0c0: 6c 61 74 65 64 2c 20 61 6e 64 20 74 68 65 20 76  lated, and the v
c0d0: 69 6f 6c 61 74 69 6f 6e 73 20 73 74 69 6c 6c 0a  iolations still.
c0e0: 65 78 69 73 74 20 77 68 65 6e 20 74 68 65 20 74  exist when the t
c0f0: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 63 6f  ransaction is co
c100: 6d 6d 69 74 74 65 64 2c 20 61 6e 20 65 72 72 6f  mmitted, an erro
c110: 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 61 74  r is returned at
c120: 20 74 68 65 20 74 69 6d 65 0a 6f 66 20 63 6f 6d   the time.of com
c130: 6d 69 74 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  mit...<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 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
c190: 6f 6e 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52  on {DROP TRIGGER
c1a0: 7d 20 64 72 6f 70 74 72 69 67 67 65 72 20 7b 7b  } droptrigger {{
c1b0: 44 52 4f 50 20 54 52 49 47 47 45 52 7d 7d 0a 0a  DROP TRIGGER}}..
c1c0: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72  BubbleDiagram dr
c1d0: 6f 70 2d 74 72 69 67 67 65 72 2d 73 74 6d 74 20  op-trigger-stmt 
c1e0: 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  1.</tcl>..<p>^Th
c1f0: 65 20 44 52 4f 50 20 54 52 49 47 47 45 52 20 73  e DROP TRIGGER s
c200: 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73  tatement removes
c210: 20 61 20 74 72 69 67 67 65 72 20 63 72 65 61 74   a trigger creat
c220: 65 64 20 62 79 20 74 68 65 20 0a 5b 43 52 45 41  ed by the .[CREA
c230: 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61 74  TE TRIGGER] stat
c240: 65 6d 65 6e 74 2e 20 20 5e 54 68 65 20 74 72 69  ement.  ^The tri
c250: 67 67 65 72 20 69 73 20 0a 64 65 6c 65 74 65 64  gger is .deleted
c260: 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
c270: 73 65 20 73 63 68 65 6d 61 2e 20 5e 4e 6f 74 65  se schema. ^Note
c280: 20 74 68 61 74 20 74 72 69 67 67 65 72 73 20 61   that triggers a
c290: 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  re automatically
c2a0: 20 0a 64 72 6f 70 70 65 64 20 77 68 65 6e 20 74   .dropped when t
c2b0: 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 74 61  he associated ta
c2c0: 62 6c 65 20 69 73 20 64 72 6f 70 70 65 64 2e 3c  ble is dropped.<
c2d0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<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 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
c330: 6e 20 7b 44 52 4f 50 20 56 49 45 57 7d 20 64 72  n {DROP VIEW} dr
c340: 6f 70 76 69 65 77 20 7b 7b 44 52 4f 50 20 56 49  opview {{DROP VI
c350: 45 57 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67  EW}}..BubbleDiag
c360: 72 61 6d 20 64 72 6f 70 2d 76 69 65 77 2d 73 74  ram drop-view-st
c370: 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mt 1.</tcl>..<p>
c380: 5e 54 68 65 20 44 52 4f 50 20 56 49 45 57 20 73  ^The DROP VIEW s
c390: 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73  tatement removes
c3a0: 20 61 20 76 69 65 77 20 63 72 65 61 74 65 64 20   a view created 
c3b0: 62 79 20 74 68 65 0a 5b 43 52 45 41 54 45 20 56  by the.[CREATE V
c3c0: 49 45 57 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  IEW] statement. 
c3d0: 20 5e 54 68 65 20 6e 61 6d 65 20 73 70 65 63 69   ^The name speci
c3e0: 66 69 65 64 20 69 73 20 74 68 65 20 0a 76 69 65  fied is the .vie
c3f0: 77 20 6e 61 6d 65 2e 20 20 5e 49 74 20 69 73 20  w name.  ^It is 
c400: 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65  removed from the
c410: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
c420: 2c 20 62 75 74 20 6e 6f 20 61 63 74 75 61 6c 20  , but no actual 
c430: 64 61 74 61 20 0a 69 6e 20 74 68 65 20 75 6e 64  data .in the und
c440: 65 72 6c 79 69 6e 67 20 62 61 73 65 20 74 61 62  erlying base tab
c450: 6c 65 73 20 69 73 20 6d 6f 64 69 66 69 65 64 2e  les is modified.
c460: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<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 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
c4c0: 6f 6e 20 45 58 50 4c 41 49 4e 20 65 78 70 6c 61  on EXPLAIN expla
c4d0: 69 6e 20 45 58 50 4c 41 49 4e 0a 0a 42 75 62 62  in EXPLAIN..Bubb
c4e0: 6c 65 44 69 61 67 72 61 6d 20 73 71 6c 2d 73 74  leDiagram sql-st
c4f0: 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41  mt.</tcl>..<p>^A
c500: 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  n SQL statement 
c510: 63 61 6e 20 62 65 20 70 72 65 63 65 64 65 64 20  can be preceded 
c520: 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64 20 22  by the keyword "
c530: 45 58 50 4c 41 49 4e 22 20 6f 72 0a 62 79 20 74  EXPLAIN" or.by t
c540: 68 65 20 70 68 72 61 73 65 20 22 45 58 50 4c 41  he phrase "EXPLA
c550: 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 22 2e 20  IN QUERY PLAN". 
c560: 20 5e 45 69 74 68 65 72 20 6d 6f 64 69 66 69 63   ^Either modific
c570: 61 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65  ation causes the
c580: 0a 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74  .SQL statement t
c590: 6f 20 62 65 68 61 76 65 20 61 73 20 61 20 71 75  o behave as a qu
c5a0: 65 72 79 20 61 6e 64 20 74 6f 20 72 65 74 75 72  ery and to retur
c5b0: 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  n information ab
c5c0: 6f 75 74 0a 68 6f 77 20 74 68 65 20 53 51 4c 20  out.how the SQL 
c5d0: 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20  statement would 
c5e0: 68 61 76 65 20 6f 70 65 72 61 74 65 64 20 69 66  have operated if
c5f0: 20 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79   the EXPLAIN key
c600: 77 6f 72 64 20 6f 72 0a 70 68 72 61 73 65 20 68  word or.phrase h
c610: 61 64 20 62 65 65 6e 20 6f 6d 69 74 74 65 64 2e  ad been omitted.
c620: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74  </p>..<p>^When t
c630: 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f  he EXPLAIN keywo
c640: 72 64 20 61 70 70 65 61 72 73 20 62 79 20 69 74  rd appears by it
c650: 73 65 6c 66 20 69 74 20 63 61 75 73 65 73 20 74  self it causes t
c660: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 74 6f 20  he statement.to 
c670: 62 65 68 61 76 65 20 61 73 20 61 20 71 75 65 72  behave as a quer
c680: 79 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 74  y that returns t
c690: 68 65 20 73 65 71 75 65 6e 63 65 20 6f 66 20 0a  he sequence of .
c6a0: 5b 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65  [virtual machine
c6b0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 5d 20 69   instructions] i
c6c0: 74 20 77 6f 75 6c 64 20 68 61 76 65 0a 75 73 65  t would have.use
c6d0: 64 20 74 6f 20 65 78 65 63 75 74 65 20 74 68 65  d to execute the
c6e0: 20 63 6f 6d 6d 61 6e 64 20 68 61 64 20 74 68 65   command had the
c6f0: 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64   EXPLAIN keyword
c700: 20 6e 6f 74 20 62 65 65 6e 20 70 72 65 73 65 6e   not been presen
c710: 74 2e 0a 5e 57 68 65 6e 20 74 68 65 20 45 58 50  t..^When the EXP
c720: 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
c730: 70 68 72 61 73 65 20 61 70 70 65 61 72 73 2c 20  phrase appears, 
c740: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 72 65  the statement re
c750: 74 75 72 6e 73 0a 68 69 67 68 2d 6c 65 76 65 6c  turns.high-level
c760: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
c770: 75 74 20 77 68 61 74 20 69 6e 64 69 63 65 73 20  ut what indices 
c780: 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20  would have been 
c790: 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  used.</p>..<p>Th
c7a0: 65 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 45 58  e output from EX
c7b0: 50 4c 41 49 4e 20 61 6e 64 20 45 58 50 4c 41 49  PLAIN and EXPLAI
c7c0: 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 69 73 20  N QUERY PLAN is 
c7d0: 69 6e 74 65 6e 64 65 64 20 66 6f 72 0a 69 6e 74  intended for.int
c7e0: 65 72 61 63 74 69 76 65 20 61 6e 61 6c 79 73 69  eractive analysi
c7f0: 73 20 61 6e 64 20 74 72 6f 75 62 6c 65 73 68 6f  s and troublesho
c800: 6f 74 69 6e 67 20 6f 6e 6c 79 2e 20 20 54 68 65  oting only.  The
c810: 20 64 65 74 61 69 6c 73 20 6f 66 20 74 68 65 20   details of the 
c820: 0a 6f 75 74 70 75 74 20 66 6f 72 6d 61 74 20 61  .output format a
c830: 72 65 20 73 75 62 6a 65 63 74 20 74 6f 20 63 68  re subject to ch
c840: 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20 72 65  ange from one re
c850: 6c 65 61 73 65 20 6f 66 20 53 51 4c 69 74 65 20  lease of SQLite 
c860: 74 6f 20 74 68 65 20 6e 65 78 74 2e 0a 41 70 70  to the next..App
c870: 6c 69 63 61 74 69 6f 6e 73 20 73 68 6f 75 6c 64  lications should
c880: 20 6e 6f 74 20 75 73 65 20 45 58 50 4c 41 49 4e   not use EXPLAIN
c890: 20 6f 72 20 45 58 50 4c 41 49 4e 20 51 55 45 52   or EXPLAIN QUER
c8a0: 59 20 50 4c 41 4e 20 73 69 6e 63 65 0a 74 68 65  Y PLAN since.the
c8b0: 69 72 20 65 78 61 63 74 20 62 65 68 61 76 69 6f  ir exact behavio
c8c0: 72 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65  r is undocumente
c8d0: 64 2c 20 75 6e 73 70 65 63 69 66 69 65 64 2c 20  d, unspecified, 
c8e0: 61 6e 64 20 76 61 72 69 61 62 6c 65 2e 3c 2f 70  and variable.</p
c8f0: 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
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 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
c950: 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72 20  expression expr 
c960: 7b 2a 65 78 70 72 65 73 73 69 6f 6e 20 7b 65 78  {*expression {ex
c970: 70 72 65 73 73 69 6f 6e 20 73 79 6e 74 61 78 7d  pression syntax}
c980: 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  }..BubbleDiagram
c990: 20 65 78 70 72 20 31 0a 42 75 62 62 6c 65 44 69   expr 1.BubbleDi
c9a0: 61 67 72 61 6d 20 6c 69 74 65 72 61 6c 2d 76 61  agram literal-va
c9b0: 6c 75 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61  lue.BubbleDiagra
c9c0: 6d 20 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72 0a  m signed-number.
c9d0: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 61  BubbleDiagram ra
c9e0: 69 73 65 2d 66 75 6e 63 74 69 6f 6e 0a 3c 2f 74  ise-function.</t
c9f0: 63 6c 3e 0a 0a 3c 70 3e 54 68 69 73 20 73 65 63  cl>..<p>This sec
ca00: 74 69 6f 6e 20 69 73 20 64 69 66 66 65 72 65 6e  tion is differen
ca10: 74 20 66 72 6f 6d 20 74 68 65 20 6f 74 68 65 72  t from the other
ca20: 73 2e 20 20 4d 6f 73 74 20 6f 74 68 65 72 20 73  s.  Most other s
ca30: 65 63 74 69 6f 6e 73 20 6f 66 0a 74 68 69 73 20  ections of.this 
ca40: 64 6f 63 75 6d 65 6e 74 20 74 61 6c 6b 73 20 61  document talks a
ca50: 62 6f 75 74 20 61 20 70 61 72 74 69 63 75 6c 61  bout a particula
ca60: 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20  r SQL command.  
ca70: 54 68 69 73 20 73 65 63 74 69 6f 6e 20 64 6f 65  This section doe
ca80: 73 0a 6e 6f 74 20 74 61 6c 6b 20 61 62 6f 75 74  s.not talk about
ca90: 20 61 20 73 74 61 6e 64 61 6c 6f 6e 65 20 63 6f   a standalone co
caa0: 6d 6d 61 6e 64 20 62 75 74 20 61 62 6f 75 74 20  mmand but about 
cab0: 22 65 78 70 72 65 73 73 69 6f 6e 73 22 20 77 68  "expressions" wh
cac0: 69 63 68 20 61 72 65 20 0a 73 75 62 63 6f 6d 70  ich are .subcomp
cad0: 6f 6e 65 6e 74 73 20 6f 66 20 6d 6f 73 74 20 6f  onents of most o
cae0: 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 2e 3c 2f  ther commands.</
caf0: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
cb00: 6d 65 6e 74 20 62 69 6e 61 72 79 6f 70 73 20 7b  ment binaryops {
cb10: 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 73  binary operators
cb20: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 70 65 72  }</tcl>.<h3>Oper
cb30: 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 28  ators</h3>.<p>^(
cb40: 53 51 4c 69 74 65 20 75 6e 64 65 72 73 74 61 6e  SQLite understan
cb50: 64 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ds the following
cb60: 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72   binary operator
cb70: 73 2c 20 69 6e 20 6f 72 64 65 72 20 66 72 6f 6d  s, in order from
cb80: 0a 68 69 67 68 65 73 74 20 74 6f 20 6c 6f 77 65  .highest to lowe
cb90: 73 74 20 70 72 65 63 65 64 65 6e 63 65 3a 3c 2f  st precedence:</
cba0: 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
cbb0: 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f  <pre>.<font colo
cbc0: 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69 67  r="#2c2cf0"><big
cbd0: 3e 7c 7c 0a 2a 20 20 20 20 2f 20 20 20 20 25 0a  >||.*    /    %.
cbe0: 2b 20 20 20 20 2d 0a 26 6c 74 3b 26 6c 74 3b 20  +    -.&lt;&lt; 
cbf0: 20 20 26 67 74 3b 26 67 74 3b 20 20 20 26 61 6d    &gt;&gt;   &am
cc00: 70 3b 20 20 20 20 7c 0a 26 6c 74 3b 20 20 20 20  p;    |.&lt;    
cc10: 26 6c 74 3b 3d 20 20 20 26 67 74 3b 20 20 20 20  &lt;=   &gt;    
cc20: 26 67 74 3b 3d 0a 3d 20 20 20 20 3d 3d 20 20 20  &gt;=.=    ==   
cc30: 21 3d 20 20 20 26 6c 74 3b 26 67 74 3b 20 20 20  !=   &lt;&gt;   
cc40: 3c 2f 62 69 67 3e 49 53 20 20 20 49 53 20 4e 4f  </big>IS   IS NO
cc50: 54 20 20 20 49 4e 20 20 20 4c 49 4b 45 20 20 20  T   IN   LIKE   
cc60: 47 4c 4f 42 20 20 20 4d 41 54 43 48 20 20 20 52  GLOB   MATCH   R
cc70: 45 47 45 58 50 0a 41 4e 44 20 20 20 0a 4f 52 3c  EGEXP.AND   .OR<
cc80: 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62  /font>.</pre></b
cc90: 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70  lockquote>)^..<p
cca0: 3e 5e 28 53 75 70 70 6f 72 74 65 64 20 75 6e 61  >^(Supported una
ccb0: 72 79 20 70 72 65 66 69 78 20 6f 70 65 72 61 74  ry prefix operat
ccc0: 6f 72 73 20 61 72 65 20 74 68 65 73 65 3a 3c 2f  ors are these:</
ccd0: 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
cce0: 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f  <pre>.<font colo
ccf0: 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69 67  r="#2c2cf0"><big
cd00: 3e 2d 20 20 20 20 2b 20 20 20 20 7e 20 20 20 20  >-    +    ~    
cd10: 4e 4f 54 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e  NOT</big></font>
cd20: 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
cd30: 6f 74 65 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f  ote>)^..<tcl>hd_
cd40: 66 72 61 67 6d 65 6e 74 20 63 6f 6c 6c 61 74 65  fragment collate
cd50: 6f 70 20 7b 43 4f 4c 4c 41 54 45 20 6f 70 65 72  op {COLLATE oper
cd60: 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  ator}</tcl>.<p>^
cd70: 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72  The COLLATE oper
cd80: 61 74 6f 72 20 69 73 20 61 20 75 6e 61 72 79 20  ator is a unary 
cd90: 70 6f 73 74 66 69 78 0a 6f 70 65 72 61 74 6f 72  postfix.operator
cda0: 20 74 68 61 74 20 61 73 73 69 67 6e 73 20 61 20   that assigns a 
cdb0: 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65  [collating seque
cdc0: 6e 63 65 5d 20 74 6f 20 61 6e 20 65 78 70 72 65  nce] to an expre
cdd0: 73 73 69 6f 6e 2e 0a 5e 54 68 65 20 43 4f 4c 4c  ssion..^The COLL
cde0: 41 54 45 20 6f 70 65 72 61 74 6f 72 20 68 61 73  ATE operator has
cdf0: 20 61 20 68 69 67 68 65 72 20 70 72 65 63 65 64   a higher preced
ce00: 65 6e 63 65 20 28 62 69 6e 64 73 20 6d 6f 72 65  ence (binds more
ce10: 20 74 69 67 68 74 6c 79 29 20 74 68 61 6e 20 61   tightly) than a
ce20: 6e 79 0a 70 72 65 66 69 78 20 75 6e 61 72 79 20  ny.prefix unary 
ce30: 6f 70 65 72 61 74 6f 72 20 6f 72 20 61 6e 79 20  operator or any 
ce40: 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e  binary operator.
ce50: 0a 5e 54 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  .^The collating 
ce60: 73 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20  sequence set by 
ce70: 74 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72  the COLLATE oper
ce80: 61 74 6f 72 20 6f 76 65 72 72 69 64 65 73 20 74  ator overrides t
ce90: 68 65 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  he.collating seq
cea0: 75 65 6e 63 65 20 64 65 74 65 72 6d 69 6e 65 64  uence determined
ceb0: 20 62 79 20 74 68 65 20 43 4f 4c 4c 41 54 45 20   by the COLLATE 
cec0: 63 6c 61 75 73 65 20 69 6e 20 61 20 74 61 62 6c  clause in a tabl
ced0: 65 0a 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69  e.[column defini
cee0: 74 69 6f 6e 5d 2e 0a 53 65 65 20 74 68 65 20 5b  tion]..See the [
cef0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
cf00: 63 65 7c 20 64 65 74 61 69 6c 65 64 20 64 69 73  ce| detailed dis
cf10: 63 75 73 73 69 6f 6e 20 6f 6e 20 63 6f 6c 6c 61  cussion on colla
cf20: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 5d 0a  ting sequences].
cf30: 69 6e 20 74 68 65 20 5b 64 61 74 61 74 79 70 65  in the [datatype
cf40: 20 7c 20 44 61 74 61 74 79 70 65 20 49 6e 20 53   | Datatype In S
cf50: 51 4c 69 74 65 33 5d 20 64 6f 63 75 6d 65 6e 74  QLite3] document
cf60: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
cf70: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 3c 2f 70  information..</p
cf80: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20  >..<tcl>hd_puts 
cf90: 22 0a 3c 70 3e 5e 54 68 65 20 75 6e 61 72 79 20  ".<p>^The unary 
cfa0: 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65 72 61 74  operator [Operat
cfb0: 6f 72 20 2b 5d 20 69 73 20 61 20 6e 6f 2d 6f 70  or +] is a no-op
cfc0: 2e 20 20 5e 49 74 20 63 61 6e 20 62 65 20 61 70  .  ^It can be ap
cfd0: 70 6c 69 65 64 0a 74 6f 20 73 74 72 69 6e 67 73  plied.to strings
cfe0: 2c 20 6e 75 6d 62 65 72 73 2c 20 62 6c 6f 62 73  , numbers, blobs
cff0: 20 6f 72 20 4e 55 4c 4c 20 61 6e 64 20 69 74 20   or NULL and it 
d000: 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20 61  always returns a
d010: 20 72 65 73 75 6c 74 0a 77 69 74 68 20 74 68 65   result.with the
d020: 20 73 61 6d 65 20 76 61 6c 75 65 20 61 73 20 74   same value as t
d030: 68 65 20 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e 22  he operand.</p>"
d040: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20  </tcl>..<p>Note 
d050: 74 68 61 74 20 74 68 65 72 65 20 61 72 65 20 74  that there are t
d060: 77 6f 20 76 61 72 69 61 74 69 6f 6e 73 20 6f 66  wo variations of
d070: 20 74 68 65 20 65 71 75 61 6c 73 20 61 6e 64 20   the equals and 
d080: 6e 6f 74 20 65 71 75 61 6c 73 0a 6f 70 65 72 61  not equals.opera
d090: 74 6f 72 73 2e 20 20 5e 45 71 75 61 6c 73 20 63  tors.  ^Equals c
d0a0: 61 6e 20 62 65 20 65 69 74 68 65 72 0a 0a 3c 74  an be either..<t
d0b0: 63 6c 3e 0a 68 64 5f 70 75 74 73 20 22 5b 4f 70  cl>.hd_puts "[Op
d0c0: 65 72 61 74 6f 72 20 3d 5d 20 6f 72 20 5b 4f 70  erator =] or [Op
d0d0: 65 72 61 74 6f 72 20 3d 3d 5d 2e 0a 5e 54 68 65  erator ==]..^The
d0e0: 20 6e 6f 6e 2d 65 71 75 61 6c 73 20 6f 70 65 72   non-equals oper
d0f0: 61 74 6f 72 20 63 61 6e 20 62 65 20 65 69 74 68  ator can be eith
d100: 65 72 0a 5b 4f 70 65 72 61 74 6f 72 20 21 3d 5d  er.[Operator !=]
d110: 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 7b 26   or [Operator {&
d120: 6c 74 3b 26 67 74 3b 7d 5d 2e 0a 5e 54 68 65 20  lt;&gt;}]..^The 
d130: 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20 6f 70  [Operator ||] op
d140: 65 72 61 74 6f 72 20 69 73 20 5c 22 63 6f 6e 63  erator is \"conc
d150: 61 74 65 6e 61 74 65 5c 22 20 2d 20 69 74 20 6a  atenate\" - it j
d160: 6f 69 6e 73 20 74 6f 67 65 74 68 65 72 0a 74 68  oins together.th
d170: 65 20 74 77 6f 20 73 74 72 69 6e 67 73 20 6f 66  e two strings of
d180: 20 69 74 73 20 6f 70 65 72 61 6e 64 73 2e 0a 5e   its operands..^
d190: 54 68 65 20 6f 70 65 72 61 74 6f 72 20 5b 4f 70  The operator [Op
d1a0: 65 72 61 74 6f 72 20 25 5d 20 6f 75 74 70 75 74  erator %] output
d1b0: 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 69  s the value of i
d1c0: 74 73 20 6c 65 66 74 20 0a 6f 70 65 72 61 6e 64  ts left .operand
d1d0: 20 6d 6f 64 75 6c 6f 20 69 74 73 20 72 69 67 68   modulo its righ
d1e0: 74 20 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e 0a 0a  t operand.</p>..
d1f0: 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  <p>^The result o
d200: 66 20 61 6e 79 20 62 69 6e 61 72 79 20 6f 70 65  f any binary ope
d210: 72 61 74 6f 72 20 69 73 20 65 69 74 68 65 72 20  rator is either 
d220: 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20  a numeric value 
d230: 6f 72 20 0a 4e 55 4c 4c 2c 20 65 78 63 65 70 74  or .NULL, except
d240: 20 66 6f 72 20 74 68 65 20 5b 4f 70 65 72 61 74   for the [Operat
d250: 6f 72 20 7c 7c 5d 20 63 6f 6e 63 61 74 65 6e 61  or ||] concatena
d260: 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 20 77 68  tion operator wh
d270: 69 63 68 20 61 6c 77 61 79 73 20 0a 65 76 61 6c  ich always .eval
d280: 75 61 74 65 73 20 74 6f 20 65 69 74 68 65 72 20  uates to either 
d290: 4e 55 4c 4c 20 6f 72 20 61 20 74 65 78 74 20 76  NULL or a text v
d2a0: 61 6c 75 65 2e 3c 2f 70 3e 22 0a 0a 68 64 5f 66  alue.</p>"..hd_f
d2b0: 72 61 67 6d 65 6e 74 20 7b 69 73 69 73 6e 6f 74  ragment {isisnot
d2c0: 7d 20 7b 49 53 20 6f 70 65 72 61 74 6f 72 7d 20  } {IS operator} 
d2d0: 7b 49 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f 72  {IS NOT operator
d2e0: 7d 0a 0a 68 64 5f 70 75 74 73 20 22 3c 70 3e 5e  }..hd_puts "<p>^
d2f0: 54 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 49 53  The [Operator IS
d300: 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20  ] and [Operator 
d310: 7b 49 53 20 4e 4f 54 7d 5d 20 6f 70 65 72 61 74  {IS NOT}] operat
d320: 6f 72 73 20 77 6f 72 6b 0a 6c 69 6b 65 20 5b 4f  ors work.like [O
d330: 70 65 72 61 74 6f 72 20 3d 5d 20 61 6e 64 20 5b  perator =] and [
d340: 4f 70 65 72 61 74 6f 72 20 21 3d 5d 20 65 78 63  Operator !=] exc
d350: 65 70 74 20 77 68 65 6e 20 6f 6e 65 20 6f 72 20  ept when one or 
d360: 62 6f 74 68 20 6f 66 20 74 68 65 0a 6f 70 65 72  both of the.oper
d370: 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 2e 20 5e  ands are NULL. ^
d380: 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 69 66  In this case, if
d390: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
d3a0: 72 65 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68  re NULL, then th
d3b0: 65 0a 49 53 20 6f 70 65 72 61 74 6f 72 20 65 76  e.IS operator ev
d3c0: 61 6c 75 61 74 65 73 20 74 6f 20 31 20 28 74 72  aluates to 1 (tr
d3d0: 75 65 29 20 61 6e 64 20 74 68 65 20 49 53 20 4e  ue) and the IS N
d3e0: 4f 54 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c  OT operator eval
d3f0: 75 61 74 65 73 0a 74 6f 20 30 20 28 66 61 6c 73  uates.to 0 (fals
d400: 65 29 2e 20 5e 49 66 20 6f 6e 65 20 6f 70 65 72  e). ^If one oper
d410: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 61 6e 64 20  and is NULL and 
d420: 74 68 65 20 6f 74 68 65 72 20 69 73 20 6e 6f 74  the other is not
d430: 2c 20 74 68 65 6e 20 74 68 65 0a 49 53 20 6f 70  , then the.IS op
d440: 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73  erator evaluates
d450: 20 74 6f 20 30 20 28 66 61 6c 73 65 29 20 61 6e   to 0 (false) an
d460: 64 20 74 68 65 20 49 53 20 4e 4f 54 20 6f 70 65  d the IS NOT ope
d470: 72 61 74 6f 72 20 69 73 20 31 20 28 74 72 75 65  rator is 1 (true
d480: 29 2e 0a 5e 49 74 20 69 73 20 6e 6f 74 20 70 6f  )..^It is not po
d490: 73 73 69 62 6c 65 20 66 6f 72 20 61 6e 20 49 53  ssible for an IS
d4a0: 20 6f 72 20 49 53 20 4e 4f 54 20 65 78 70 72 65   or IS NOT expre
d4b0: 73 73 69 6f 6e 20 74 6f 20 65 76 61 6c 75 61 74  ssion to evaluat
d4c0: 65 20 74 6f 20 4e 55 4c 4c 2e 0a 5e 4f 70 65 72  e to NULL..^Oper
d4d0: 61 74 6f 72 73 20 5b 4f 70 65 72 61 74 6f 72 20  ators [Operator 
d4e0: 49 53 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f  IS] and [Operato
d4f0: 72 20 7b 49 53 20 4e 4f 54 7d 5d 20 68 61 76 65  r {IS NOT}] have
d500: 20 74 68 65 20 73 61 6d 65 20 0a 70 72 65 63 65   the same .prece
d510: 64 65 6e 63 65 20 61 73 20 5b 4f 70 65 72 61 74  dence as [Operat
d520: 6f 72 20 3d 5d 2e 22 0a 0a 3c 74 63 6c 3e 68 64  or =]."..<tcl>hd
d530: 5f 66 72 61 67 6d 65 6e 74 20 6c 69 74 76 61 6c  _fragment litval
d540: 75 65 20 7b 6c 69 74 65 72 61 6c 20 76 61 6c 75  ue {literal valu
d550: 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4c 69 74  e}</tcl>.<h3>Lit
d560: 65 72 61 6c 20 56 61 6c 75 65 73 3c 2f 68 33 3e  eral Values</h3>
d570: 0a 3c 70 3e 0a 5e 41 20 6c 69 74 65 72 61 6c 20  .<p>.^A literal 
d580: 76 61 6c 75 65 20 69 73 20 61 20 63 6f 6e 73 74  value is a const
d590: 61 6e 74 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64  ant of some kind
d5a0: 2e 0a 5e 4c 69 74 65 72 61 6c 20 76 61 6c 75 65  ..^Literal value
d5b0: 73 20 6d 61 79 20 62 65 20 69 6e 74 65 67 65 72  s may be integer
d5c0: 73 2c 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  s, floating poin
d5d0: 74 20 6e 75 6d 62 65 72 73 2c 20 73 74 72 69 6e  t numbers, strin
d5e0: 67 73 2c 0a 42 4c 4f 42 73 2c 20 6f 72 20 4e 55  gs,.BLOBs, or NU
d5f0: 4c 4c 73 2e 0a 5e 53 63 69 65 6e 74 69 66 69 63  LLs..^Scientific
d600: 20 6e 6f 74 61 74 69 6f 6e 20 69 73 20 73 75 70   notation is sup
d610: 70 6f 72 74 65 64 20 66 6f 72 20 66 6c 6f 61 74  ported for float
d620: 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61  ing point litera
d630: 6c 20 76 61 6c 75 65 73 2e 0a 5e 28 54 68 65 20  l values..^(The 
d640: 22 2e 22 20 63 68 61 72 61 63 74 65 72 20 69 73  "." character is
d650: 20 61 6c 77 61 79 73 20 75 73 65 64 20 0a 61 73   always used .as
d660: 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69   the decimal poi
d670: 6e 74 20 65 76 65 6e 20 69 66 20 74 68 65 20 6c  nt even if the l
d680: 6f 63 61 6c 65 20 73 65 74 74 69 6e 67 20 73 70  ocale setting sp
d690: 65 63 69 66 69 65 73 20 22 2c 22 20 66 6f 72 0a  ecifies "," for.
d6a0: 74 68 69 73 20 72 6f 6c 65 20 2d 20 74 68 65 20  this role - the 
d6b0: 75 73 65 20 6f 66 20 22 2c 22 20 66 6f 72 20 74  use of "," for t
d6c0: 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74  he decimal point
d6d0: 20 77 6f 75 6c 64 20 72 65 73 75 6c 74 20 69 6e   would result in
d6e0: 0a 73 79 6e 74 61 63 74 69 63 20 61 6d 62 69 67  .syntactic ambig
d6f0: 75 69 74 79 2e 29 5e 20 20 5e 41 20 73 74 72 69  uity.)^  ^A stri
d700: 6e 67 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 66  ng constant is f
d710: 6f 72 6d 65 64 20 62 79 20 65 6e 63 6c 6f 73 69  ormed by enclosi
d720: 6e 67 20 74 68 65 0a 73 74 72 69 6e 67 20 69 6e  ng the.string in
d730: 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 28   single quotes (
d740: 27 29 2e 20 20 5e 41 20 73 69 6e 67 6c 65 20 71  ').  ^A single q
d750: 75 6f 74 65 20 77 69 74 68 69 6e 20 74 68 65 20  uote within the 
d760: 73 74 72 69 6e 67 20 63 61 6e 0a 62 65 20 65 6e  string can.be en
d770: 63 6f 64 65 64 20 62 79 20 70 75 74 74 69 6e 67  coded by putting
d780: 20 74 77 6f 20 73 69 6e 67 6c 65 20 71 75 6f 74   two single quot
d790: 65 73 20 69 6e 20 61 20 72 6f 77 20 2d 20 61 73  es in a row - as
d7a0: 20 69 6e 20 50 61 73 63 61 6c 2e 0a 43 2d 73 74   in Pascal..C-st
d7b0: 79 6c 65 20 65 73 63 61 70 65 73 20 75 73 69 6e  yle escapes usin
d7c0: 67 20 74 68 65 20 62 61 63 6b 73 6c 61 73 68 20  g the backslash 
d7d0: 63 68 61 72 61 63 74 65 72 20 61 72 65 20 6e 6f  character are no
d7e0: 74 20 73 75 70 70 6f 72 74 65 64 20 62 65 63 61  t supported beca
d7f0: 75 73 65 0a 74 68 65 79 20 61 72 65 20 6e 6f 74  use.they are not
d800: 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 0a 5e   standard SQL..^
d810: 42 4c 4f 42 20 6c 69 74 65 72 61 6c 73 20 61 72  BLOB literals ar
d820: 65 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  e string literal
d830: 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 68 65 78  s containing hex
d840: 61 64 65 63 69 6d 61 6c 20 64 61 74 61 20 61 6e  adecimal data an
d850: 64 0a 70 72 65 63 65 64 65 64 20 62 79 20 61 20  d.preceded by a 
d860: 73 69 6e 67 6c 65 20 22 78 22 20 6f 72 20 22 58  single "x" or "X
d870: 22 20 63 68 61 72 61 63 74 65 72 2e 20 20 5e 28  " character.  ^(
d880: 46 6f 72 20 65 78 61 6d 70 6c 65 3a 3c 2f 70 3e  For example:</p>
d890: 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
d8a0: 72 65 3e 0a 58 27 35 33 35 31 34 43 36 39 37 34  re>.X'53514C6974
d8b0: 36 35 27 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  65'.</pre></bloc
d8c0: 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 5e  kquote>)^..<p>.^
d8d0: 41 20 6c 69 74 65 72 61 6c 20 76 61 6c 75 65 20  A literal value 
d8e0: 63 61 6e 20 61 6c 73 6f 20 62 65 20 74 68 65 20  can also be the 
d8f0: 74 6f 6b 65 6e 20 22 4e 55 4c 4c 22 2e 0a 3c 2f  token "NULL"..</
d900: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
d910: 6d 65 6e 74 20 76 61 72 70 61 72 61 6d 20 70 61  ment varparam pa
d920: 72 61 6d 65 74 65 72 20 70 61 72 61 6d 65 74 65  rameter paramete
d930: 72 73 20 7b 62 6f 75 6e 64 20 70 61 72 61 6d 65  rs {bound parame
d940: 74 65 72 7d 20 7b 62 6f 75 6e 64 20 70 61 72 61  ter} {bound para
d950: 6d 65 74 65 72 73 7d 3c 2f 74 63 6c 3e 0a 3c 68  meters}</tcl>.<h
d960: 33 3e 50 61 72 61 6d 65 74 65 72 73 3c 2f 68 33  3>Parameters</h3
d970: 3e 0a 3c 70 3e 0a 41 20 22 76 61 72 69 61 62 6c  >.<p>.A "variabl
d980: 65 22 20 6f 72 20 22 70 61 72 61 6d 65 74 65 72  e" or "parameter
d990: 22 20 74 6f 6b 65 6e 0a 73 70 65 63 69 66 69 65  " token.specifie
d9a0: 73 20 61 20 70 6c 61 63 65 68 6f 6c 64 65 72 20  s a placeholder 
d9b0: 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  in the expressio
d9c0: 6e 20 66 6f 72 20 61 20 0a 76 61 6c 75 65 20 74  n for a .value t
d9d0: 68 61 74 20 69 73 20 66 69 6c 6c 65 64 20 69 6e  hat is filled in
d9e0: 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73 69 6e   at runtime usin
d9f0: 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f 62  g the.[sqlite3_b
da00: 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20 73 71 6c  ind_blob() | sql
da10: 69 74 65 33 5f 62 69 6e 64 28 29 5d 20 66 61 6d  ite3_bind()] fam
da20: 69 6c 79 20 6f 66 20 43 2f 43 2b 2b 20 69 6e 74  ily of C/C++ int
da30: 65 72 66 61 63 65 73 2e 0a 50 61 72 61 6d 65 74  erfaces..Paramet
da40: 65 72 73 20 63 61 6e 20 74 61 6b 65 20 73 65 76  ers can take sev
da50: 65 72 61 6c 20 66 6f 72 6d 73 3a 0a 3c 2f 70 3e  eral forms:.</p>
da60: 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c  ..<blockquote>.<
da70: 74 61 62 6c 65 3e 0a 3c 74 72 3e 0a 3c 74 64 20  table>.<tr>.<td 
da80: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61  align="right" va
da90: 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c  lign="top"><b>?<
daa0: 2f 62 3e 3c 69 3e 4e 4e 4e 3c 2f 69 3e 3c 2f 74  /b><i>NNN</i></t
dab0: 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22  d><td width="20"
dac0: 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 28 41 20 71  ></td>.<td>^(A q
dad0: 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 66 6f 6c  uestion mark fol
dae0: 6c 6f 77 65 64 20 62 79 20 61 20 6e 75 6d 62 65  lowed by a numbe
daf0: 72 20 3c 69 3e 4e 4e 4e 3c 2f 69 3e 20 68 6f 6c  r <i>NNN</i> hol
db00: 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20 74 68  ds a spot for th
db10: 65 0a 4e 4e 4e 2d 74 68 20 70 61 72 61 6d 65 74  e.NNN-th paramet
db20: 65 72 2e 20 20 4e 4e 4e 20 6d 75 73 74 20 62 65  er.  NNN must be
db30: 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 5b   between 1 and [
db40: 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
db50: 42 4c 45 5f 4e 55 4d 42 45 52 5d 2e 29 5e 0a 3c  BLE_NUMBER].)^.<
db60: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a  /td>.</tr>.<tr>.
db70: 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  <td align="right
db80: 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  " valign="top"><
db90: 62 3e 3f 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20  b>?</b></td><td 
dba0: 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e  width="20"></td>
dbb0: 0a 3c 74 64 3e 5e 41 20 71 75 65 73 74 69 6f 6e  .<td>^A question
dbc0: 20 6d 61 72 6b 20 74 68 61 74 20 69 73 20 6e 6f   mark that is no
dbd0: 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  t followed by a 
dbe0: 6e 75 6d 62 65 72 20 63 72 65 61 74 65 73 20 61  number creates a
dbf0: 20 70 61 72 61 6d 65 74 65 72 0a 77 69 74 68 20   parameter.with 
dc00: 61 20 6e 75 6d 62 65 72 20 6f 6e 65 20 67 72 65  a number one gre
dc10: 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6c 61  ater than the la
dc20: 72 67 65 73 74 20 70 61 72 61 6d 65 74 65 72 20  rgest parameter 
dc30: 6e 75 6d 62 65 72 20 61 6c 72 65 61 64 79 20 61  number already a
dc40: 73 73 69 67 6e 65 64 2e 0a 5e 49 66 20 74 68 69  ssigned..^If thi
dc50: 73 20 6d 65 61 6e 73 20 74 68 65 20 70 61 72 61  s means the para
dc60: 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 69 73 20  meter number is 
dc70: 67 72 65 61 74 65 72 20 74 68 61 6e 0a 5b 53 51  greater than.[SQ
dc80: 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
dc90: 45 5f 4e 55 4d 42 45 52 5d 2c 20 69 74 20 69 73  E_NUMBER], it is
dca0: 20 61 6e 20 65 72 72 6f 72 2e 0a 3c 2f 74 64 3e   an error..</td>
dcb0: 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20  .</tr>.<tr>.<td 
dcc0: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61  align="right" va
dcd0: 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3a 3c  lign="top"><b>:<
dce0: 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f  /b><i>AAAA</i></
dcf0: 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30  td><td width="20
dd00: 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 63  "></td>.<td>^A c
dd10: 6f 6c 6f 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79  olon followed by
dd20: 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6e   an identifier n
dd30: 61 6d 65 20 68 6f 6c 64 73 20 61 20 73 70 6f 74  ame holds a spot
dd40: 20 66 6f 72 20 61 20 0a 5b 73 71 6c 69 74 65 33   for a .[sqlite3
dd50: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
dd60: 6e 61 6d 65 7c 6e 61 6d 65 64 20 70 61 72 61 6d  name|named param
dd70: 65 74 65 72 5d 20 77 69 74 68 20 74 68 65 20 6e  eter] with the n
dd80: 61 6d 65 20 3a 41 41 41 41 2e 20 20 0a 5e 28 4e  ame :AAAA.  .^(N
dd90: 61 6d 65 64 20 70 61 72 61 6d 65 74 65 72 73 20  amed parameters 
dda0: 61 72 65 20 61 6c 73 6f 20 6e 75 6d 62 65 72 65  are also numbere
ddb0: 64 2e 20 54 68 65 20 6e 75 6d 62 65 72 20 61 73  d. The number as
ddc0: 73 69 67 6e 65 64 20 69 73 20 6f 6e 65 20 67 72  signed is one gr
ddd0: 65 61 74 65 72 20 74 68 61 6e 0a 74 68 65 20 6c  eater than.the l
dde0: 61 72 67 65 73 74 20 70 61 72 61 6d 65 74 65 72  argest parameter
ddf0: 20 6e 75 6d 62 65 72 20 61 6c 72 65 61 64 79 20   number already 
de00: 61 73 73 69 67 6e 65 64 2e 29 5e 20 5e 49 66 20  assigned.)^ ^If 
de10: 74 68 69 73 20 6d 65 61 6e 73 20 74 68 65 20 70  this means the p
de20: 61 72 61 6d 65 74 65 72 0a 77 6f 75 6c 64 20 62  arameter.would b
de30: 65 20 61 73 73 69 67 6e 65 64 20 61 20 6e 75 6d  e assigned a num
de40: 62 65 72 20 67 72 65 61 74 65 72 20 74 68 61 6e  ber greater than
de50: 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52   [SQLITE_MAX_VAR
de60: 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 20 69  IABLE_NUMBER], i
de70: 74 20 69 73 0a 61 6e 20 65 72 72 6f 72 2e 20 54  t is.an error. T
de80: 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f  o avoid confusio
de90: 6e 2c 20 69 74 20 69 73 20 62 65 73 74 20 74 6f  n, it is best to
dea0: 20 61 76 6f 69 64 20 6d 69 78 69 6e 67 20 6e 61   avoid mixing na
deb0: 6d 65 64 20 61 6e 64 20 6e 75 6d 62 65 72 65 64  med and numbered
dec0: 0a 70 61 72 61 6d 65 74 65 72 73 2e 3c 2f 74 64  .parameters.</td
ded0: 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64  >.</tr>.<tr>.<td
dee0: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76   align="right" v
def0: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 40  align="top"><b>@
df00: 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c  </b><i>AAAA</i><
df10: 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32  /td><td width="2
df20: 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 6e  0"></td>.<td>^An
df30: 20 22 61 74 22 20 73 69 67 6e 20 77 6f 72 6b 73   "at" sign works
df40: 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 61 20   exactly like a 
df50: 63 6f 6c 6f 6e 2c 20 65 78 63 65 70 74 20 74 68  colon, except th
df60: 61 74 20 74 68 65 20 6e 61 6d 65 20 6f 66 0a 74  at the name of.t
df70: 68 65 20 70 61 72 61 6d 65 74 65 72 20 63 72 65  he parameter cre
df80: 61 74 65 64 20 69 73 20 40 41 41 41 41 2e 3c 2f  ated is @AAAA.</
df90: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c  td>.</tr>.<tr>.<
dfa0: 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  td align="right"
dfb0: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
dfc0: 3e 24 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69  >$</b><i>AAAA</i
dfd0: 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d  ></td><td width=
dfe0: 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e  "20"></td>.<td>^
dff0: 41 20 64 6f 6c 6c 61 72 2d 73 69 67 6e 20 66 6f  A dollar-sign fo
e000: 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 69 64 65  llowed by an ide
e010: 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 61 6c 73  ntifier name als
e020: 6f 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66  o holds a spot f
e030: 6f 72 20 61 20 6e 61 6d 65 64 0a 70 61 72 61 6d  or a named.param
e040: 65 74 65 72 20 77 69 74 68 20 74 68 65 20 6e 61  eter with the na
e050: 6d 65 20 24 41 41 41 41 2e 20 20 5e 28 54 68 65  me $AAAA.  ^(The
e060: 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65   identifier name
e070: 20 69 6e 20 74 68 69 73 20 63 61 73 65 20 63 61   in this case ca
e080: 6e 20 69 6e 63 6c 75 64 65 0a 6f 6e 65 20 6f 72  n include.one or
e090: 20 6d 6f 72 65 20 6f 63 63 75 72 72 65 6e 63 65   more occurrence
e0a0: 73 20 6f 66 20 22 3a 3a 22 20 61 6e 64 20 61 20  s of "::" and a 
e0b0: 73 75 66 66 69 78 20 65 6e 63 6c 6f 73 65 64 20  suffix enclosed 
e0c0: 69 6e 20 22 28 2e 2e 2e 29 22 20 63 6f 6e 74 61  in "(...)" conta
e0d0: 69 6e 69 6e 67 0a 61 6e 79 20 74 65 78 74 20 61  ining.any text a
e0e0: 74 20 61 6c 6c 2e 29 5e 20 20 54 68 69 73 20 73  t all.)^  This s
e0f0: 79 6e 74 61 78 20 69 73 20 74 68 65 20 66 6f 72  yntax is the for
e100: 6d 20 6f 66 20 61 20 76 61 72 69 61 62 6c 65 20  m of a variable 
e110: 6e 61 6d 65 20 69 6e 20 74 68 65 0a 5b 68 74 74  name in the.[htt
e120: 70 3a 2f 2f 77 77 77 2e 74 63 6c 2e 74 6b 2f 20  p://www.tcl.tk/ 
e130: 7c 20 54 63 6c 20 70 72 6f 67 72 61 6d 6d 69 6e  | Tcl programmin
e140: 67 20 6c 61 6e 67 75 61 67 65 5d 2e 20 20 54 68  g language].  Th
e150: 65 20 70 72 65 73 65 6e 63 65 0a 6f 66 20 74 68  e presence.of th
e160: 69 73 20 73 79 6e 74 61 78 20 72 65 73 75 6c 74  is syntax result
e170: 73 20 66 72 6f 6d 20 74 68 65 20 66 61 63 74 20  s from the fact 
e180: 74 68 61 74 20 53 51 4c 69 74 65 20 69 73 20 72  that SQLite is r
e190: 65 61 6c 6c 79 20 61 20 0a 5b 54 63 6c 20 65 78  eally a .[Tcl ex
e1a0: 74 65 6e 73 69 6f 6e 5d 20 74 68 61 74 20 68 61  tension] that ha
e1b0: 73 20 65 73 63 61 70 65 64 20 69 6e 74 6f 20 74  s escaped into t
e1c0: 68 65 20 77 69 6c 64 2e 3c 2f 74 64 3e 0a 3c 2f  he wild.</td>.</
e1d0: 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62  tr>.</table>.</b
e1e0: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e  lockquote>..<p>^
e1f0: 50 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20  Parameters that 
e200: 61 72 65 20 6e 6f 74 20 61 73 73 69 67 6e 65 64  are not assigned
e210: 20 76 61 6c 75 65 73 20 75 73 69 6e 67 0a 5b 73   values using.[s
e220: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62  qlite3_bind_blob
e230: 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e  () | sqlite3_bin
e240: 64 28 29 5d 20 61 72 65 20 74 72 65 61 74 65 64  d()] are treated
e250: 0a 61 73 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c  .as NULL.</p>..<
e260: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
e270: 6c 69 6b 65 20 4c 49 4b 45 20 45 53 43 41 50 45  like LIKE ESCAPE
e280: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 4c  </tcl>.<h3>The L
e290: 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20 6f 70 65  IKE and GLOB ope
e2a0: 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e  rators</h3>.<p>^
e2b0: 54 68 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f  The LIKE operato
e2c0: 72 20 64 6f 65 73 20 61 20 70 61 74 74 65 72 6e  r does a pattern
e2d0: 20 6d 61 74 63 68 69 6e 67 20 63 6f 6d 70 61 72   matching compar
e2e0: 69 73 6f 6e 2e 20 5e 54 68 65 20 6f 70 65 72 61  ison. ^The opera
e2f0: 6e 64 0a 74 6f 20 74 68 65 20 72 69 67 68 74 20  nd.to the right 
e300: 6f 66 20 74 68 65 20 4c 49 4b 45 20 6f 70 65 72  of the LIKE oper
e310: 61 74 6f 72 20 63 6f 6e 74 61 69 6e 73 20 74 68  ator contains th
e320: 65 20 70 61 74 74 65 72 6e 20 61 6e 64 20 74 68  e pattern and th
e330: 65 20 6c 65 66 74 20 68 61 6e 64 0a 6f 70 65 72  e left hand.oper
e340: 61 6e 64 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  and contains the
e350: 20 73 74 72 69 6e 67 20 74 6f 20 6d 61 74 63 68   string to match
e360: 20 61 67 61 69 6e 73 74 20 74 68 65 20 70 61 74   against the pat
e370: 74 65 72 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 70  tern...<tcl>hd_p
e380: 75 74 73 20 22 5e 41 20 70 65 72 63 65 6e 74 20  uts "^A percent 
e390: 73 79 6d 62 6f 6c 20 28 5c 22 25 5c 22 29 20 69  symbol (\"%\") i
e3a0: 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74 65  n the LIKE patte
e3b0: 72 6e 20 6d 61 74 63 68 65 73 20 61 6e 79 0a 73  rn matches any.s
e3c0: 65 71 75 65 6e 63 65 20 6f 66 20 7a 65 72 6f 20  equence of zero 
e3d0: 6f 72 20 6d 6f 72 65 20 63 68 61 72 61 63 74 65  or more characte
e3e0: 72 73 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67  rs in the string
e3f0: 2e 20 20 5e 41 6e 20 75 6e 64 65 72 73 63 6f 72  .  ^An underscor
e400: 65 0a 28 5c 22 5f 5c 22 29 20 69 6e 20 74 68 65  e.(\"_\") in the
e410: 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 6d 61   LIKE pattern ma
e420: 74 63 68 65 73 20 61 6e 79 20 73 69 6e 67 6c 65  tches any single
e430: 20 63 68 61 72 61 63 74 65 72 20 69 6e 20 74 68   character in th
e440: 65 0a 73 74 72 69 6e 67 2e 20 20 5e 28 41 6e 79  e.string.  ^(Any
e450: 20 6f 74 68 65 72 20 63 68 61 72 61 63 74 65 72   other character
e460: 20 6d 61 74 63 68 65 73 20 69 74 73 65 6c 66 20   matches itself 
e470: 6f 72 20 69 74 73 20 6c 6f 77 65 72 2f 75 70 70  or its lower/upp
e480: 65 72 20 63 61 73 65 0a 65 71 75 69 76 61 6c 65  er case.equivale
e490: 6e 74 20 28 69 2e 65 2e 20 63 61 73 65 2d 69 6e  nt (i.e. case-in
e4a0: 73 65 6e 73 69 74 69 76 65 20 6d 61 74 63 68 69  sensitive matchi
e4b0: 6e 67 29 2e 29 5e 20 20 28 41 20 62 75 67 3a 20  ng).)^  (A bug: 
e4c0: 5e 53 51 4c 69 74 65 20 6f 6e 6c 79 0a 75 6e 64  ^SQLite only.und
e4d0: 65 72 73 74 61 6e 64 73 20 75 70 70 65 72 2f 6c  erstands upper/l
e4e0: 6f 77 65 72 20 63 61 73 65 20 66 6f 72 20 41 53  ower case for AS
e4f0: 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20 62  CII characters b
e500: 79 20 64 65 66 61 75 6c 74 2e 20 20 5e 54 68 65  y default.  ^The
e510: 0a 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 69  .LIKE operator i
e520: 73 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65  s case sensitive
e530: 20 62 79 20 64 65 66 61 75 6c 74 20 66 6f 72 20   by default for 
e540: 75 6e 69 63 6f 64 65 20 63 68 61 72 61 63 74 65  unicode characte
e550: 72 73 20 74 68 61 74 20 61 72 65 0a 62 65 79 6f  rs that are.beyo
e560: 6e 64 20 74 68 65 20 41 53 43 49 49 20 72 61 6e  nd the ASCII ran
e570: 67 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ge.  For example
e580: 2c 0a 5e 74 68 65 20 65 78 70 72 65 73 73 69 6f  ,.^the expressio
e590: 6e 20 3c 62 3e 27 61 27 26 6e 62 73 70 3b 4c 49  n <b>'a'&nbsp;LI
e5a0: 4b 45 26 6e 62 73 70 3b 27 41 27 3c 2f 62 3e 0a  KE&nbsp;'A'</b>.
e5b0: 69 73 20 54 52 55 45 20 62 75 74 20 3c 62 3e 27  is TRUE but <b>'
e5c0: 26 61 65 6c 69 67 3b 27 26 6e 62 73 70 3b 4c 49  &aelig;'&nbsp;LI
e5d0: 4b 45 26 6e 62 73 70 3b 27 26 41 45 6c 69 67 3b  KE&nbsp;'&AElig;
e5e0: 27 3c 2f 62 3e 20 69 73 20 46 41 4c 53 45 2e 29  '</b> is FALSE.)
e5f0: 3c 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  <p>"</tcl>..<p>^
e600: 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20  If the optional 
e610: 45 53 43 41 50 45 20 63 6c 61 75 73 65 20 69 73  ESCAPE clause is
e620: 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74   present, then t
e630: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 66 6f  he expression.fo
e640: 6c 6c 6f 77 69 6e 67 20 74 68 65 20 45 53 43 41  llowing the ESCA
e650: 50 45 20 6b 65 79 77 6f 72 64 20 6d 75 73 74 20  PE keyword must 
e660: 65 76 61 6c 75 61 74 65 20 74 6f 20 61 20 73 74  evaluate to a st
e670: 72 69 6e 67 20 63 6f 6e 73 69 73 74 69 6e 67 20  ring consisting 
e680: 6f 66 0a 61 20 73 69 6e 67 6c 65 20 63 68 61 72  of.a single char
e690: 61 63 74 65 72 2e 20 5e 54 68 69 73 20 63 68 61  acter. ^This cha
e6a0: 72 61 63 74 65 72 20 6d 61 79 20 62 65 20 75 73  racter may be us
e6b0: 65 64 20 69 6e 20 74 68 65 20 4c 49 4b 45 20 70  ed in the LIKE p
e6c0: 61 74 74 65 72 6e 0a 74 6f 20 69 6e 63 6c 75 64  attern.to includ
e6d0: 65 20 6c 69 74 65 72 61 6c 20 70 65 72 63 65 6e  e literal percen
e6e0: 74 20 6f 72 20 75 6e 64 65 72 73 63 6f 72 65 20  t or underscore 
e6f0: 63 68 61 72 61 63 74 65 72 73 2e 20 5e 54 68 65  characters. ^The
e700: 20 65 73 63 61 70 65 0a 63 68 61 72 61 63 74 65   escape.characte
e710: 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  r followed by a 
e720: 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 20 28  percent symbol (
e730: 25 29 2c 20 75 6e 64 65 72 73 63 6f 72 65 20 28  %), underscore (
e740: 5f 29 2c 20 6f 72 20 61 20 73 65 63 6f 6e 64 0a  _), or a second.
e750: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
e760: 65 73 63 61 70 65 20 63 68 61 72 61 63 74 65 72  escape character
e770: 20 69 74 73 65 6c 66 20 6d 61 74 63 68 65 73 20   itself matches 
e780: 61 0a 6c 69 74 65 72 61 6c 20 70 65 72 63 65 6e  a.literal percen
e790: 74 20 73 79 6d 62 6f 6c 2c 20 75 6e 64 65 72 73  t symbol, unders
e7a0: 63 6f 72 65 2c 20 6f 72 20 61 20 73 69 6e 67 6c  core, or a singl
e7b0: 65 20 65 73 63 61 70 65 20 63 68 61 72 61 63 74  e escape charact
e7c0: 65 72 2c 0a 72 65 73 70 65 63 74 69 76 65 6c 79  er,.respectively
e7d0: 2e 0a 0a 3c 70 3e 5e 54 68 65 20 69 6e 66 69 78  ...<p>^The infix
e7e0: 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 69   LIKE operator i
e7f0: 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  s implemented by
e800: 20 63 61 6c 6c 69 6e 67 20 74 68 65 0a 61 70 70   calling the.app
e810: 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
e820: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20 5b   SQL functions [
e830: 6c 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69  like(<i>Y</i>,<i
e840: 3e 58 3c 2f 69 3e 29 5d 20 6f 72 0a 5b 6c 69 6b  >X</i>)] or.[lik
e850: 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c  e(<i>Y</i>,<i>X<
e860: 2f 69 3e 2c 3c 69 3e 5a 3c 2f 69 3e 29 5d 3c 2f  /i>,<i>Z</i>)]</
e870: 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  a>.</p>..<p>^The
e880: 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 63   LIKE operator c
e890: 61 6e 20 62 65 20 6d 61 64 65 20 63 61 73 65 20  an be made case 
e8a0: 73 65 6e 73 69 74 69 76 65 20 75 73 69 6e 67 20  sensitive using 
e8b0: 74 68 65 0a 5b 63 61 73 65 5f 73 65 6e 73 69 74  the.[case_sensit
e8c0: 69 76 65 5f 6c 69 6b 65 20 70 72 61 67 6d 61 5d  ive_like pragma]
e8d0: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
e8e0: 72 61 67 6d 65 6e 74 20 67 6c 6f 62 20 47 4c 4f  ragment glob GLO
e8f0: 42 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20  B</tcl>.<p>^The 
e900: 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72 20 69 73  GLOB operator is
e910: 20 73 69 6d 69 6c 61 72 20 74 6f 20 4c 49 4b 45   similar to LIKE
e920: 20 62 75 74 20 75 73 65 73 20 74 68 65 20 55 6e   but uses the Un
e930: 69 78 0a 66 69 6c 65 20 67 6c 6f 62 62 69 6e 67  ix.file globbing
e940: 20 73 79 6e 74 61 78 20 66 6f 72 20 69 74 73 20   syntax for its 
e950: 77 69 6c 64 63 61 72 64 73 2e 20 20 5e 41 6c 73  wildcards.  ^Als
e960: 6f 2c 20 47 4c 4f 42 20 69 73 20 63 61 73 65 0a  o, GLOB is case.
e970: 73 65 6e 73 69 74 69 76 65 2c 20 75 6e 6c 69 6b  sensitive, unlik
e980: 65 20 4c 49 4b 45 2e 20 20 5e 42 6f 74 68 20 47  e LIKE.  ^Both G
e990: 4c 4f 42 20 61 6e 64 20 4c 49 4b 45 20 6d 61 79  LOB and LIKE may
e9a0: 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79 0a   be preceded by.
e9b0: 74 68 65 20 4e 4f 54 20 6b 65 79 77 6f 72 64 20  the NOT keyword 
e9c0: 74 6f 20 69 6e 76 65 72 74 20 74 68 65 20 73 65  to invert the se
e9d0: 6e 73 65 20 6f 66 20 74 68 65 20 74 65 73 74 2e  nse of the test.
e9e0: 20 20 5e 54 68 65 20 69 6e 66 69 78 20 47 4c 4f    ^The infix GLO
e9f0: 42 20 0a 6f 70 65 72 61 74 6f 72 20 69 73 20 69  B .operator is i
ea00: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61  mplemented by ca
ea10: 6c 6c 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69  lling the functi
ea20: 6f 6e 0a 5b 67 6c 6f 62 28 3c 69 3e 59 3c 2f 69  on.[glob(<i>Y</i
ea30: 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20 61 6e 64  >,<i>X</i>)] and
ea40: 20 63 61 6e 20 62 65 20 6d 6f 64 69 66 69 65 64   can be modified
ea50: 20 62 79 20 6f 76 65 72 72 69 64 69 6e 67 0a 74   by overriding.t
ea60: 68 61 74 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70  hat function.</p
ea70: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
ea80: 65 6e 74 20 72 65 67 65 78 70 20 52 45 47 45 58  ent regexp REGEX
ea90: 50 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20  P</tcl>.<p>^The 
eaa0: 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72 20  REGEXP operator 
eab0: 69 73 20 61 20 73 70 65 63 69 61 6c 20 73 79 6e  is a special syn
eac0: 74 61 78 20 66 6f 72 20 74 68 65 20 72 65 67 65  tax for the rege
ead0: 78 70 28 29 0a 75 73 65 72 20 66 75 6e 63 74 69  xp().user functi
eae0: 6f 6e 2e 20 20 5e 4e 6f 20 72 65 67 65 78 70 28  on.  ^No regexp(
eaf0: 29 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  ) user function 
eb00: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 64 65  is defined by de
eb10: 66 61 75 6c 74 0a 61 6e 64 20 73 6f 20 75 73 65  fault.and so use
eb20: 20 6f 66 20 74 68 65 20 52 45 47 45 58 50 20 6f   of the REGEXP o
eb30: 70 65 72 61 74 6f 72 20 77 69 6c 6c 20 6e 6f 72  perator will nor
eb40: 6d 61 6c 6c 79 20 72 65 73 75 6c 74 20 69 6e 20  mally result in 
eb50: 61 6e 0a 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an.error message
eb60: 2e 20 20 5e 49 66 20 61 20 5b 61 70 70 6c 69 63  .  ^If a [applic
eb70: 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53 51  ation-defined SQ
eb80: 4c 20 66 75 6e 63 74 69 6f 6e 5d 20 6e 61 6d 65  L function] name
eb90: 64 20 22 72 65 67 65 78 70 22 0a 69 73 20 61 64  d "regexp".is ad
eba0: 64 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65 2c  ded at run-time,
ebb0: 20 74 68 61 74 20 66 75 6e 63 74 69 6f 6e 20 77   that function w
ebc0: 69 6c 6c 20 62 65 20 63 61 6c 6c 65 64 20 69 6e  ill be called in
ebd0: 20 6f 72 64 65 72 0a 74 6f 20 69 6d 70 6c 65 6d   order.to implem
ebe0: 65 6e 74 20 74 68 65 20 52 45 47 45 58 50 20 6f  ent the REGEXP o
ebf0: 70 65 72 61 74 6f 72 2e 3c 2f 70 3e 0a 0a 3c 74  perator.</p>..<t
ec00: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6d  cl>hd_fragment m
ec10: 61 74 63 68 20 4d 41 54 43 48 3c 2f 74 63 6c 3e  atch MATCH</tcl>
ec20: 0a 3c 70 3e 5e 54 68 65 20 4d 41 54 43 48 20 6f  .<p>^The MATCH o
ec30: 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 70 65  perator is a spe
ec40: 63 69 61 6c 20 73 79 6e 74 61 78 20 66 6f 72 20  cial syntax for 
ec50: 74 68 65 20 6d 61 74 63 68 28 29 0a 61 70 70 6c  the match().appl
ec60: 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20  ication-defined 
ec70: 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 54 68 65 20  function.  ^The 
ec80: 64 65 66 61 75 6c 74 20 6d 61 74 63 68 28 29 20  default match() 
ec90: 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  function impleme
eca0: 6e 74 61 74 69 6f 6e 0a 72 61 69 73 65 73 20 61  ntation.raises a
ecb0: 6e 20 65 78 63 65 70 74 69 6f 6e 20 61 6e 64 20  n exception and 
ecc0: 69 73 20 6e 6f 74 20 72 65 61 6c 6c 79 20 75 73  is not really us
ecd0: 65 66 75 6c 20 66 6f 72 20 61 6e 79 74 68 69 6e  eful for anythin
ece0: 67 2e 0a 5e 42 75 74 20 65 78 74 65 6e 73 69 6f  g..^But extensio
ecf0: 6e 73 20 63 61 6e 20 6f 76 65 72 72 69 64 65 20  ns can override 
ed00: 74 68 65 20 6d 61 74 63 68 28 29 20 66 75 6e 63  the match() func
ed10: 74 69 6f 6e 20 77 69 74 68 20 6d 6f 72 65 0a 68  tion with more.h
ed20: 65 6c 70 66 75 6c 20 6c 6f 67 69 63 2e 3c 2f 70  elpful logic.</p
ed30: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
ed40: 65 6e 74 20 62 65 74 77 65 65 6e 20 42 45 54 57  ent between BETW
ed50: 45 45 4e 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  EEN</tcl>.<h3>Th
ed60: 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74  e BETWEEN operat
ed70: 6f 72 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 54 68 65  or</h3>.<p>^(The
ed80: 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74 6f   BETWEEN operato
ed90: 72 20 69 73 20 6c 6f 67 69 63 61 6c 6c 79 20 65  r is logically e
eda0: 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 61 20 70  quivalent to a p
edb0: 61 69 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  air of compariso
edc0: 6e 73 2e 0a 22 3c 69 3e 78 3c 2f 69 3e 20 3c 62  ns.."<i>x</i> <b
edd0: 3e 42 45 54 57 45 45 4e 3c 2f 62 3e 20 3c 69 3e  >BETWEEN</b> <i>
ede0: 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62 3e  y</i> <b>AND</b>
edf0: 20 3c 69 3e 7a 3c 2f 69 3e 22 20 69 73 20 0a 65   <i>z</i>" is .e
ee00: 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 0a 22 3c  quivalent to ."<
ee10: 69 3e 78 3c 2f 69 3e 3c 62 3e 26 67 74 3b 3d 3c  i>x</i><b>&gt;=<
ee20: 2f 62 3e 3c 69 3e 79 3c 2f 69 3e 20 3c 62 3e 41  /b><i>y</i> <b>A
ee30: 4e 44 3c 2f 62 3e 20 3c 69 3e 78 3c 2f 69 3e 3c  ND</b> <i>x</i><
ee40: 62 3e 26 6c 74 3b 3d 3c 2f 62 3e 3c 69 3e 7a 3c  b>&lt;=</b><i>z<
ee50: 2f 69 3e 22 20 65 78 63 65 70 74 0a 74 68 61 74  /i>" except.that
ee60: 20 77 69 74 68 20 42 45 54 57 45 45 4e 2c 20 74   with BETWEEN, t
ee70: 68 65 20 3c 69 3e 78 3c 2f 69 3e 20 65 78 70 72  he <i>x</i> expr
ee80: 65 73 73 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 65  ession is only e
ee90: 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 2e 29 5e  valuated once.)^
eea0: 0a 5e 54 68 65 20 70 72 65 63 65 64 65 6e 63 65  .^The precedence
eeb0: 20 6f 66 20 74 68 65 20 42 45 54 57 45 45 4e 20   of the BETWEEN 
eec0: 6f 70 65 72 61 74 6f 72 20 69 73 20 74 68 65 20  operator is the 
eed0: 73 61 6d 65 20 61 73 20 74 68 65 20 70 72 65 63  same as the prec
eee0: 65 64 65 6e 63 65 0a 61 73 20 6f 70 65 72 61 74  edence.as operat
eef0: 6f 72 73 20 3c 62 3e 3d 3d 3c 2f 62 3e 20 61 6e  ors <b>==</b> an
ef00: 64 20 3c 62 3e 21 3d 3c 2f 62 3e 20 61 6e 64 20  d <b>!=</b> and 
ef10: 3c 62 3e 4c 49 4b 45 3c 2f 62 3e 20 61 6e 64 20  <b>LIKE</b> and 
ef20: 67 72 6f 75 70 73 20 6c 65 66 74 20 74 6f 20 72  groups left to r
ef30: 69 67 68 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  ight...<tcl>hd_f
ef40: 72 61 67 6d 65 6e 74 20 63 61 73 65 20 7b 43 41  ragment case {CA
ef50: 53 45 20 65 78 70 72 65 73 73 69 6f 6e 7d 3c 2f  SE expression}</
ef60: 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 43 41 53  tcl>.<h3>The CAS
ef70: 45 20 65 78 70 72 65 73 73 69 6f 6e 3c 2f 68 33  E expression</h3
ef80: 3e 0a 3c 70 3e 41 20 43 41 53 45 20 65 78 70 72  >.<p>A CASE expr
ef90: 65 73 73 69 6f 6e 20 73 65 72 76 65 73 20 61 20  ession serves a 
efa0: 72 6f 6c 65 20 73 69 6d 69 6c 61 72 20 74 6f 20  role similar to 
efb0: 49 46 2d 54 48 45 4e 2d 45 4c 53 45 20 69 6e 20  IF-THEN-ELSE in 
efc0: 6f 74 68 65 72 0a 70 72 6f 67 72 61 6d 6d 69 6e  other.programmin
efd0: 67 20 6c 61 6e 67 75 61 67 65 73 2e 20 20 0a 0a  g languages.  ..
efe0: 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  <p>The optional 
eff0: 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
f000: 6f 63 63 75 72 73 20 69 6e 20 62 65 74 77 65 65  occurs in betwee
f010: 6e 20 74 68 65 20 43 41 53 45 20 6b 65 79 77 6f  n the CASE keywo
f020: 72 64 20 61 6e 64 20 74 68 65 0a 66 69 72 73 74  rd and the.first
f030: 20 57 48 45 4e 20 6b 65 79 77 6f 72 64 20 69 73   WHEN keyword is
f040: 20 63 61 6c 6c 65 64 20 74 68 65 20 22 62 61 73   called the "bas
f050: 65 22 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e  e" expression. ^
f060: 54 68 65 72 65 20 61 72 65 20 74 77 6f 20 62 61  There are two ba
f070: 73 69 63 20 66 6f 72 6d 73 0a 6f 66 20 74 68 65  sic forms.of the
f080: 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
f090: 3a 20 74 68 6f 73 65 20 77 69 74 68 20 61 20 62  : those with a b
f0a0: 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61  ase expression a
f0b0: 6e 64 20 74 68 6f 73 65 20 77 69 74 68 6f 75 74  nd those without
f0c0: 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43 41 53 45  ...<p>^In a CASE
f0d0: 20 77 69 74 68 6f 75 74 20 61 20 62 61 73 65 20   without a base 
f0e0: 65 78 70 72 65 73 73 69 6f 6e 2c 20 65 61 63 68  expression, each
f0f0: 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e   WHEN expression
f100: 20 69 73 20 65 76 61 6c 75 61 74 65 64 0a 61 6e   is evaluated.an
f110: 64 20 74 68 65 20 72 65 73 75 6c 74 20 74 72 65  d the result tre
f120: 61 74 65 64 20 61 73 20 61 20 62 6f 6f 6c 65 61  ated as a boolea
f130: 6e 2c 20 73 74 61 72 74 69 6e 67 20 77 69 74 68  n, starting with
f140: 20 74 68 65 20 6c 65 66 74 6d 6f 73 74 20 61 6e   the leftmost an
f150: 64 20 63 6f 6e 74 69 6e 75 69 6e 67 0a 74 6f 20  d continuing.to 
f160: 74 68 65 20 72 69 67 68 74 2e 20 5e 54 68 65 20  the right. ^The 
f170: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41  result of the CA
f180: 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  SE expression is
f190: 20 74 68 65 20 65 76 61 6c 75 61 74 69 6f 6e 20   the evaluation 
f1a0: 6f 66 20 74 68 65 20 54 48 45 4e 0a 65 78 70 72  of the THEN.expr
f1b0: 65 73 73 69 6f 6e 20 74 68 61 74 20 63 6f 72 72  ession that corr
f1c0: 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 66  esponds to the f
f1d0: 69 72 73 74 20 57 48 45 4e 20 65 78 70 72 65 73  irst WHEN expres
f1e0: 73 69 6f 6e 20 74 68 61 74 20 65 76 61 6c 75 61  sion that evalua
f1f0: 74 65 73 20 74 6f 0a 74 72 75 65 2e 20 5e 4f 72  tes to.true. ^Or
f200: 2c 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65  , if none of the
f210: 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e   WHEN expression
f220: 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20 74 72  s evaluate to tr
f230: 75 65 2c 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ue, the result o
f240: 66 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f.evaluating the
f250: 20 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e   ELSE expression
f260: 2c 20 69 66 20 61 6e 79 2e 20 5e 49 66 20 74 68  , if any. ^If th
f270: 65 72 65 20 69 73 20 6e 6f 20 45 4c 53 45 20 65  ere is no ELSE e
f280: 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 0a 6e 6f  xpression and.no
f290: 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e 20 65  ne of the WHEN e
f2a0: 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 74  xpressions are t
f2b0: 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 6f 76  rue, then the ov
f2c0: 65 72 61 6c 6c 20 72 65 73 75 6c 74 20 69 73 20  erall result is 
f2d0: 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e 41 20 4e 55 4c  NULL...<p>^A NUL
f2e0: 4c 20 72 65 73 75 6c 74 20 69 73 20 63 6f 6e 73  L result is cons
f2f0: 69 64 65 72 65 64 20 75 6e 74 72 75 65 20 77 68  idered untrue wh
f300: 65 6e 20 65 76 61 6c 75 61 74 69 6e 67 20 57 48  en evaluating WH
f310: 45 4e 20 74 65 72 6d 73 2e 0a 0a 3c 70 3e 5e 49  EN terms...<p>^I
f320: 6e 20 61 20 43 41 53 45 20 77 69 74 68 20 61 20  n a CASE with a 
f330: 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c  base expression,
f340: 20 74 68 65 20 62 61 73 65 20 65 78 70 72 65 73   the base expres
f350: 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65  sion is evaluate
f360: 64 20 6a 75 73 74 0a 6f 6e 63 65 20 61 6e 64 20  d just.once and 
f370: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 63 6f  the result is co
f380: 6d 70 61 72 65 64 20 61 67 61 69 6e 73 74 20 74  mpared against t
f390: 68 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66  he evaluation of
f3a0: 20 65 61 63 68 20 57 48 45 4e 20 0a 65 78 70 72   each WHEN .expr
f3b0: 65 73 73 69 6f 6e 20 66 72 6f 6d 20 6c 65 66 74  ession from left
f3c0: 20 74 6f 20 72 69 67 68 74 2e 20 5e 54 68 65 20   to right. ^The 
f3d0: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41  result of the CA
f3e0: 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  SE expression is
f3f0: 20 74 68 65 20 0a 65 76 61 6c 75 61 74 69 6f 6e   the .evaluation
f400: 20 6f 66 20 74 68 65 20 54 48 45 4e 20 65 78 70   of the THEN exp
f410: 72 65 73 73 69 6f 6e 20 74 68 61 74 20 63 6f 72  ression that cor
f420: 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
f430: 66 69 72 73 74 20 57 48 45 4e 0a 65 78 70 72 65  first WHEN.expre
f440: 73 73 69 6f 6e 20 66 6f 72 20 77 68 69 63 68 20  ssion for which 
f450: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  the comparison i
f460: 73 20 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66 20  s true. ^Or, if 
f470: 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e  none of the WHEN
f480: 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61  .expressions eva
f490: 6c 75 61 74 65 20 74 6f 20 61 20 76 61 6c 75 65  luate to a value
f4a0: 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 62 61   equal to the ba
f4b0: 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 74  se expression, t
f4c0: 68 65 20 72 65 73 75 6c 74 0a 6f 66 20 65 76 61  he result.of eva
f4d0: 6c 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45  luating the ELSE
f4e0: 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 66 20   expression, if 
f4f0: 61 6e 79 2e 20 5e 49 66 20 74 68 65 72 65 20 69  any. ^If there i
f500: 73 20 6e 6f 20 45 4c 53 45 20 65 78 70 72 65 73  s no ELSE expres
f510: 73 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f 66  sion and.none of
f520: 20 74 68 65 20 57 48 45 4e 20 65 78 70 72 65 73   the WHEN expres
f530: 73 69 6f 6e 73 20 70 72 6f 64 75 63 65 20 61 20  sions produce a 
f540: 72 65 73 75 6c 74 20 65 71 75 61 6c 20 74 6f 20  result equal to 
f550: 74 68 65 20 62 61 73 65 20 65 78 70 72 65 73 73  the base express
f560: 69 6f 6e 2c 0a 74 68 65 20 6f 76 65 72 61 6c 6c  ion,.the overall
f570: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
f580: 0a 0a 3c 70 3e 5e 57 68 65 6e 20 63 6f 6d 70 61  ..<p>^When compa
f590: 72 69 6e 67 20 61 20 62 61 73 65 20 65 78 70 72  ring a base expr
f5a0: 65 73 73 69 6f 6e 20 61 67 61 69 6e 73 74 20 61  ession against a
f5b0: 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e   WHEN expression
f5c0: 2c 20 74 68 65 20 73 61 6d 65 0a 63 6f 6c 6c 61  , the same.colla
f5d0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 61  ting sequence, a
f5e0: 66 66 69 6e 69 74 79 2c 20 61 6e 64 20 4e 55 4c  ffinity, and NUL
f5f0: 4c 2d 68 61 6e 64 6c 69 6e 67 20 72 75 6c 65 73  L-handling rules
f600: 20 61 70 70 6c 79 20 61 73 20 69 66 20 74 68 65   apply as if the
f610: 0a 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e  .base expression
f620: 20 61 6e 64 20 57 48 45 4e 20 65 78 70 72 65 73   and WHEN expres
f630: 73 69 6f 6e 20 61 72 65 20 72 65 73 70 65 63 74  sion are respect
f640: 69 76 65 6c 79 20 74 68 65 20 6c 65 66 74 2d 20  ively the left- 
f650: 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64 20 6f  and.right-hand o
f660: 70 65 72 61 6e 64 73 20 6f 66 20 61 6e 20 3c 62  perands of an <b
f670: 69 67 3e 3c 62 3e 3d 3c 2f 62 3e 3c 2f 62 69 67  ig><b>=</b></big
f680: 3e 20 6f 70 65 72 61 74 6f 72 2e 3c 2f 70 3e 20  > operator.</p> 
f690: 5e 49 66 20 74 68 65 20 62 61 73 65 20 0a 65 78  ^If the base .ex
f6a0: 70 72 65 73 73 69 6f 6e 20 69 73 20 4e 55 4c 4c  pression is NULL
f6b0: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
f6c0: 20 6f 66 20 74 68 65 20 43 41 53 45 20 69 73 20   of the CASE is 
f6d0: 61 6c 77 61 79 73 20 74 68 65 20 72 65 73 75 6c  always the resul
f6e0: 74 20 0a 6f 66 20 65 76 61 6c 75 61 74 69 6e 67  t .of evaluating
f6f0: 20 74 68 65 20 45 4c 53 45 20 65 78 70 72 65 73   the ELSE expres
f700: 73 69 6f 6e 20 69 66 20 69 74 20 65 78 69 73 74  sion if it exist
f710: 73 2c 20 6f 72 20 4e 55 4c 4c 20 69 66 20 69 74  s, or NULL if it
f720: 20 64 6f 65 73 20 6e 6f 74 2e 0a 0a 3c 70 3e 5e   does not...<p>^
f730: 42 6f 74 68 20 66 6f 72 6d 73 20 6f 66 20 74 68  Both forms of th
f740: 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  e CASE expressio
f750: 6e 20 75 73 65 20 6c 61 7a 79 2c 20 6f 72 20 73  n use lazy, or s
f760: 68 6f 72 74 2d 63 69 72 63 75 69 74 2c 20 0a 65  hort-circuit, .e
f770: 76 61 6c 75 61 74 69 6f 6e 2e 0a 0a 3c 70 3e 5e  valuation...<p>^
f780: 28 54 68 65 20 6f 6e 6c 79 20 64 69 66 66 65 72  (The only differ
f790: 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74 68 65  ence between the
f7a0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 77 6f 20 43   following two C
f7b0: 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ASE expressions 
f7c0: 69 73 20 74 68 61 74 20 0a 74 68 65 20 3c 69 3e  is that .the <i>
f7d0: 78 3c 2f 69 3e 20 65 78 70 72 65 73 73 69 6f 6e  x</i> expression
f7e0: 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 65 78   is evaluated ex
f7f0: 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74 68  actly once in th
f800: 65 20 66 69 72 73 74 20 65 78 61 6d 70 6c 65 20  e first example 
f810: 62 75 74 20 0a 6d 69 67 68 74 20 62 65 20 65 76  but .might be ev
f820: 61 6c 75 61 74 65 64 20 6d 75 6c 74 69 70 6c 65  aluated multiple
f830: 20 74 69 6d 65 73 20 69 6e 20 74 68 65 20 73 65   times in the se
f840: 63 6f 6e 64 3a 0a 0a 3c 75 6c 3e 3c 70 72 65 3e  cond:..<ul><pre>
f850: 0a 3c 6c 69 3e 43 41 53 45 20 78 20 57 48 45 4e  .<li>CASE x WHEN
f860: 20 77 31 20 54 48 45 4e 20 72 31 20 57 48 45 4e   w1 THEN r1 WHEN
f870: 20 77 32 20 54 48 45 4e 20 72 32 20 45 4c 53 45   w2 THEN r2 ELSE
f880: 20 72 33 20 45 4e 44 0a 3c 6c 69 3e 43 41 53 45   r3 END.<li>CASE
f890: 20 57 48 45 4e 20 78 3d 77 31 20 54 48 45 4e 20   WHEN x=w1 THEN 
f8a0: 72 31 20 57 48 45 4e 20 78 3d 77 32 20 54 48 45  r1 WHEN x=w2 THE
f8b0: 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45 4e 44  N r2 ELSE r3 END
f8c0: 0a 3c 2f 70 72 65 3e 3c 2f 75 6c 3e 29 5e 0a 0a  .</pre></ul>)^..
f8d0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
f8e0: 74 20 69 6e 5f 6f 70 20 7b 49 4e 20 6f 70 65 72  t in_op {IN oper
f8f0: 61 74 6f 72 7d 20 7b 4e 4f 54 20 49 4e 20 6f 70  ator} {NOT IN op
f900: 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68  erator}</tcl>.<h
f910: 33 3e 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f 54  3>The IN and NOT
f920: 20 49 4e 20 6f 70 65 72 61 74 6f 72 73 3c 2f 68   IN operators</h
f930: 33 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 20 61 6e  3>.<p>^The IN an
f940: 64 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f  d NOT IN operato
f950: 72 73 20 74 61 6b 65 20 61 20 73 69 6e 67 6c 65  rs take a single
f960: 20 73 63 61 6c 61 72 20 6f 70 65 72 61 6e 64 20   scalar operand 
f970: 6f 6e 20 74 68 65 0a 6c 65 66 74 20 61 6e 64 20  on the.left and 
f980: 61 20 76 65 63 74 6f 72 20 6f 70 65 72 61 6e 64  a vector operand
f990: 20 6f 6e 20 74 68 65 20 72 69 67 68 74 0a 66 6f   on the right.fo
f9a0: 72 6d 65 64 20 62 79 20 61 6e 20 65 78 70 6c 69  rmed by an expli
f9b0: 63 69 74 20 6c 69 73 74 20 6f 66 20 7a 65 72 6f  cit list of zero
f9c0: 20 6f 72 20 6d 6f 72 65 20 73 63 61 6c 61 72 73   or more scalars
f9d0: 20 6f 72 20 62 79 20 61 20 0a 73 69 6e 67 6c 65   or by a .single
f9e0: 20 73 75 62 71 75 65 72 79 2e 0a 5e 57 68 65 6e   subquery..^When
f9f0: 20 74 68 65 20 72 69 67 68 74 20 6f 70 65 72 61   the right opera
fa00: 6e 64 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e  nd of an IN or N
fa10: 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 69  OT IN operator i
fa20: 73 20 61 20 73 75 62 71 75 65 72 79 2c 20 74 68  s a subquery, th
fa30: 65 0a 73 75 62 71 75 65 72 79 20 6d 75 73 74 20  e.subquery must 
fa40: 68 61 76 65 20 61 20 73 69 6e 67 6c 65 20 72 65  have a single re
fa50: 73 75 6c 74 20 63 6f 6c 75 6d 6e 2e 0a 5e 57 68  sult column..^Wh
fa60: 65 6e 20 74 68 65 20 72 69 67 68 74 20 6f 70 65  en the right ope
fa70: 72 61 6e 64 20 69 73 20 61 6e 20 65 6d 70 74 79  rand is an empty
fa80: 20 73 65 74 2c 20 74 68 65 20 72 65 73 75 6c 74   set, the result
fa90: 20 6f 66 20 49 4e 20 69 73 20 66 61 6c 73 65 20   of IN is false 
faa0: 61 6e 64 20 74 68 65 0a 72 65 73 75 6c 74 20 6f  and the.result o
fab0: 66 20 4e 4f 54 20 49 4e 20 69 73 20 74 72 75 65  f NOT IN is true
fac0: 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
fad0: 74 68 65 20 6c 65 66 74 20 6f 70 65 72 61 6e 64  the left operand
fae0: 20 61 6e 64 20 65 76 65 6e 20 69 66 20 74 68 65   and even if the
faf0: 0a 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 69 73  .left operand is
fb00: 20 4e 55 4c 4c 2e 0a 5e 28 54 68 65 20 72 65 73   NULL..^(The res
fb10: 75 6c 74 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20  ult of an IN or 
fb20: 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20  NOT IN operator 
fb30: 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
fb40: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 6d   the following.m
fb50: 61 74 72 69 78 3a 0a 0a 3c 63 65 6e 74 65 72 3e  atrix:..<center>
fb60: 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31  .<table border=1
fb70: 3e 0a 3c 74 72 3e 0a 3c 74 68 3e 4c 65 66 74 20  >.<tr>.<th>Left 
fb80: 6f 70 65 72 61 6e 64 20 3c 62 72 3e 69 73 20 4e  operand <br>is N
fb90: 55 4c 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70  ULL.<th>Right op
fba0: 65 72 61 6e 64 20 3c 62 72 3e 63 6f 6e 74 61 69  erand <br>contai
fbb0: 6e 73 20 4e 55 4c 4c 0a 3c 74 68 3e 52 69 67 68  ns NULL.<th>Righ
fbc0: 74 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e 69 73  t operand <br>is
fbd0: 20 61 6e 20 65 6d 70 74 79 20 73 65 74 0a 3c 74   an empty set.<t
fbe0: 68 3e 4c 65 66 74 20 6f 70 65 72 61 6e 64 20 66  h>Left operand f
fbf0: 6f 75 6e 64 20 3c 62 72 3e 77 69 74 68 69 6e 20  ound <br>within 
fc00: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 0a 3c 74  right operand.<t
fc10: 68 3e 52 65 73 75 6c 74 20 6f 66 20 3c 62 72 3e  h>Result of <br>
fc20: 49 4e 20 6f 70 65 72 61 74 6f 72 0a 3c 74 68 3e  IN operator.<th>
fc30: 52 65 73 75 6c 74 20 6f 66 20 3c 62 72 3e 4e 4f  Result of <br>NO
fc40: 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 0a 3c 74  T IN operator.<t
fc50: 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  r>.<td align="ce
fc60: 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
fc70: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
fc80: 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
fc90: 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
fca0: 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
fcb0: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61  lign="center">fa
fcc0: 6c 73 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  lse.<td align="c
fcd0: 65 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74 72 3e  enter">true.<tr>
fce0: 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
fcf0: 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74  er">does not mat
fd00: 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  ter.<td align="c
fd10: 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
fd20: 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73  ign="center">yes
fd30: 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
fd40: 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
fd50: 3d 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a  ="center">false.
fd60: 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
fd70: 72 22 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64  r">true.<tr>.<td
fd80: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
fd90: 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
fda0: 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d  nter">does not m
fdb0: 61 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d  atter.<td align=
fdc0: 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
fdd0: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79  align="center">y
fde0: 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  es.<td align="ce
fdf0: 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74 64 20 61  nter">true.<td a
fe00: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61  lign="center">fa
fe10: 6c 73 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  lse.<tr>.<td ali
fe20: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
fe30: 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
fe40: 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d  ">yes.<td align=
fe50: 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
fe60: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
fe70: 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
fe80: 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64 20 61 6c  ter">NULL.<td al
fe90: 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c  ign="center">NUL
fea0: 4c 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  L.<tr>.<td align
feb0: 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74  ="center">yes.<t
fec0: 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
fed0: 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72  >does not matter
fee0: 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
fef0: 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
ff00: 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e  ="center">does n
ff10: 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c  ot matter.<td al
ff20: 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c  ign="center">NUL
ff30: 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  L.<td align="cen
ff40: 74 65 72 22 3e 4e 55 4c 4c 0a 3c 2f 74 61 62 6c  ter">NULL.</tabl
ff50: 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a  e>.</center>)^..
ff60: 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 53 51  <p>^Note that SQ
ff70: 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74 68 65 20  Lite allows the 
ff80: 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c 69  parenthesized li
ff90: 73 74 20 6f 66 20 73 63 61 6c 61 72 20 76 61 6c  st of scalar val
ffa0: 75 65 73 20 6f 6e 0a 74 68 65 20 72 69 67 68 74  ues on.the right
ffb0: 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 61 6e  -hand side of an
ffc0: 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70   IN or NOT IN op
ffd0: 65 72 61 74 6f 72 20 74 6f 20 62 65 20 61 6e 20  erator to be an 
ffe0: 65 6d 70 74 79 20 6c 69 73 74 20 62 75 74 0a 6d  empty list but.m
fff0: 6f 73 74 20 6f 74 68 65 72 20 53 51 4c 20 64 61  ost other SQL da
10000 74 61 62 61 73 65 20 64 61 74 61 62 61 73 65 20  tabase database 
10010 65 6e 67 69 6e 65 73 20 61 6e 64 20 74 68 65 20  engines and the 
10020 53 51 4c 39 32 20 73 74 61 6e 64 61 72 64 20 72  SQL92 standard r
10030 65 71 75 69 72 65 0a 74 68 65 20 6c 69 73 74 20  equire.the list 
10040 74 6f 20 63 6f 6e 74 61 69 6e 20 61 74 20 6c 65  to contain at le
10050 61 73 74 20 6f 6e 65 20 65 6c 65 6d 65 6e 74 2e  ast one element.
10060 3c 2f 70 3e 0a 0a 0a 3c 68 33 3e 54 61 62 6c 65  </p>...<h3>Table
10070 20 43 6f 6c 75 6d 6e 20 4e 61 6d 65 73 3c 2f 68   Column Names</h
10080 33 3e 0a 3c 70 3e 5e 41 20 63 6f 6c 75 6d 6e 20  3>.<p>^A column 
10090 6e 61 6d 65 20 63 61 6e 20 62 65 20 61 6e 79 20  name can be any 
100a0 6f 66 20 74 68 65 20 6e 61 6d 65 73 20 64 65 66  of the names def
100b0 69 6e 65 64 20 69 6e 20 74 68 65 20 5b 43 52 45  ined in the [CRE
100c0 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74 65  ATE TABLE].state
100d0 6d 65 6e 74 20 6f 72 20 6f 6e 65 20 6f 66 20 74  ment or one of t
100e0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 70 65  he following spe
100f0 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73  cial identifiers
10100 3a 20 22 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e 22  : "<b>ROWID</b>"
10110 2c 0a 22 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c 20  ,."<b>OID</b>", 
10120 6f 72 20 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c 2f  or "<b>_ROWID_</
10130 62 3e 22 2e 0a 5e 54 68 65 73 65 20 73 70 65 63  b>"..^These spec
10140 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73 20  ial identifiers 
10150 61 6c 6c 20 64 65 73 63 72 69 62 65 20 74 68 65  all describe the
10160 0a 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20  .unique integer 
10170 6b 65 79 20 28 74 68 65 20 5b 72 6f 77 69 64 5d  key (the [rowid]
10180 29 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  ) associated wit
10190 68 20 65 76 65 72 79 20 0a 72 6f 77 20 6f 66 20  h every .row of 
101a0 65 76 65 72 79 20 74 61 62 6c 65 2e 0a 5e 54 68  every table..^Th
101b0 65 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69  e special identi
101c0 66 69 65 72 73 20 6f 6e 6c 79 20 72 65 66 65 72  fiers only refer
101d0 20 74 6f 20 74 68 65 20 72 6f 77 20 6b 65 79 20   to the row key 
101e0 69 66 20 74 68 65 20 5b 43 52 45 41 54 45 20 54  if the [CREATE T
101f0 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20  ABLE].statement 
10200 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20  does not define 
10210 61 20 72 65 61 6c 20 63 6f 6c 75 6d 6e 20 77 69  a real column wi
10220 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  th the same name
10230 2e 0a 5e 54 68 65 20 72 6f 77 69 64 20 63 61 6e  ..^The rowid can
10240 20 62 65 20 75 73 65 64 20 61 6e 79 77 68 65 72   be used anywher
10250 65 20 61 20 72 65 67 75 6c 61 72 0a 63 6f 6c 75  e a regular.colu
10260 6d 6e 20 63 61 6e 20 62 65 20 75 73 65 64 2e 3c  mn can be used.<
10270 2f 70 3e 0a 0a 3c 68 33 3e 53 75 62 71 75 65 72  /p>..<h3>Subquer
10280 69 65 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 5b 53 45  ies</h3>.<p>^[SE
10290 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 73  LECT] statements
102a0 20 63 61 6e 20 61 70 70 65 61 72 20 69 6e 20 65   can appear in e
102b0 78 70 72 65 73 73 69 6f 6e 73 20 61 73 20 65 69  xpressions as ei
102c0 74 68 65 72 20 74 68 65 0a 72 69 67 68 74 2d 68  ther the.right-h
102d0 61 6e 64 20 6f 70 65 72 61 6e 64 20 6f 66 20 74  and operand of t
102e0 68 65 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20  he IN or NOT IN 
102f0 6f 70 65 72 61 74 6f 72 73 2c 20 61 73 20 61 20  operators, as a 
10300 73 63 61 6c 61 72 20 71 75 61 6e 74 69 74 79 2c  scalar quantity,
10310 20 6f 72 0a 61 73 20 74 68 65 20 6f 70 65 72 61   or.as the opera
10320 6e 64 20 6f 66 20 61 6e 20 45 58 49 53 54 53 20  nd of an EXISTS 
10330 6f 70 65 72 61 74 6f 72 2e 0a 5e 41 73 20 61 20  operator..^As a 
10340 73 63 61 6c 61 72 20 71 75 61 6e 74 69 74 79 20  scalar quantity 
10350 6f 72 20 74 68 65 20 6f 70 65 72 61 6e 64 20 6f  or the operand o
10360 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49  f an IN or NOT I
10370 4e 20 6f 70 65 72 61 74 6f 72 2c 0a 74 68 65 20  N operator,.the 
10380 53 45 4c 45 43 54 20 6d 61 79 20 68 61 76 65 20  SELECT may have 
10390 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 63 6f  only a single co
103a0 6c 75 6d 6e 20 69 6e 20 69 74 73 0a 72 65 73 75  lumn in its.resu
103b0 6c 74 2e 20 20 5e 43 6f 6d 70 6f 75 6e 64 20 53  lt.  ^Compound S
103c0 45 4c 45 43 54 73 20 28 63 6f 6e 6e 65 63 74 65  ELECTs (connecte
103d0 64 20 77 69 74 68 20 6b 65 79 77 6f 72 64 73 20  d with keywords 
103e0 6c 69 6b 65 20 55 4e 49 4f 4e 20 6f 72 0a 45 58  like UNION or.EX
103f0 43 45 50 54 29 20 61 72 65 20 61 6c 6c 6f 77 65  CEPT) are allowe
10400 64 20 69 6e 20 61 6e 79 20 73 75 62 71 75 65 72  d in any subquer
10410 79 2e 0a 5e 57 69 74 68 20 74 68 65 20 45 58 49  y..^With the EXI
10420 53 54 53 20 6f 70 65 72 61 74 6f 72 2c 20 74 68  STS operator, th
10430 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
10440 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20 74   result set of t
10450 68 65 20 5b 53 45 4c 45 43 54 5d 20 61 72 65 0a  he [SELECT] are.
10460 69 67 6e 6f 72 65 64 20 61 6e 64 20 74 68 65 20  ignored and the 
10470 65 78 70 72 65 73 73 69 6f 6e 20 72 65 74 75 72  expression retur
10480 6e 73 20 54 52 55 45 20 69 66 20 6f 6e 65 20 6f  ns TRUE if one o
10490 72 20 6d 6f 72 65 20 72 6f 77 73 20 65 78 69 73  r more rows exis
104a0 74 0a 61 6e 64 20 46 41 4c 53 45 20 69 66 20 74  t.and FALSE if t
104b0 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 69 73  he result set is
104c0 20 65 6d 70 74 79 2e 0a 5e 49 66 20 6e 6f 20 74   empty..^If no t
104d0 65 72 6d 73 20 69 6e 20 74 68 65 20 5b 53 45 4c  erms in the [SEL
104e0 45 43 54 5d 20 65 78 70 72 65 73 73 69 6f 6e 20  ECT] expression 
104f0 72 65 66 65 72 20 74 6f 20 76 61 6c 75 65 73 20  refer to values 
10500 69 6e 20 74 68 65 20 63 6f 6e 74 61 69 6e 69 6e  in the containin
10510 67 0a 71 75 65 72 79 2c 20 74 68 65 6e 20 74 68  g.query, then th
10520 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
10530 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 70  evaluated once p
10540 72 69 6f 72 20 74 6f 20 61 6e 79 20 6f 74 68 65  rior to any othe
10550 72 0a 70 72 6f 63 65 73 73 69 6e 67 20 61 6e 64  r.processing and
10560 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 72   the result is r
10570 65 75 73 65 64 20 61 73 20 6e 65 63 65 73 73 61  eused as necessa
10580 72 79 2e 20 20 5e 49 66 20 74 68 65 20 5b 53 45  ry.  ^If the [SE
10590 4c 45 43 54 5d 20 65 78 70 72 65 73 73 69 6f 6e  LECT] expression
105a0 0a 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 76 61  .does contain va
105b0 72 69 61 62 6c 65 73 20 66 72 6f 6d 20 74 68 65  riables from the
105c0 20 6f 75 74 65 72 20 71 75 65 72 79 2c 20 74 68   outer query, th
105d0 65 6e 20 74 68 65 20 5b 53 45 4c 45 43 54 5d 20  en the [SELECT] 
105e0 69 73 20 72 65 65 76 61 6c 75 61 74 65 64 0a 65  is reevaluated.e
105f0 76 65 72 79 20 74 69 6d 65 20 69 74 20 69 73 20  very time it is 
10600 6e 65 65 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  needed.</p>..<p>
10610 5e 57 68 65 6e 20 61 20 53 45 4c 45 43 54 20 61  ^When a SELECT a
10620 70 70 65 61 72 73 20 77 69 74 68 69 6e 20 61 6e  ppears within an
10630 20 65 78 70 72 65 73 73 69 6f 6e 20 62 75 74 20   expression but 
10640 69 73 20 6e 6f 74 20 74 68 65 20 72 69 67 68 74  is not the right
10650 0a 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49  .operand of an I
10660 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72  N or NOT IN oper
10670 61 74 6f 72 2c 20 74 68 65 6e 20 74 68 65 20 66  ator, then the f
10680 69 72 73 74 20 72 6f 77 20 6f 66 20 74 68 65 20  irst row of the 
10690 72 65 73 75 6c 74 20 6f 66 20 74 68 65 0a 53 45  result of the.SE
106a0 4c 45 43 54 20 62 65 63 6f 6d 65 73 20 74 68 65  LECT becomes the
106b0 20 76 61 6c 75 65 20 75 73 65 64 20 69 6e 20 74   value used in t
106c0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20  he expression.  
106d0 5e 49 66 20 74 68 65 20 53 45 4c 45 43 54 20 79  ^If the SELECT y
106e0 69 65 6c 64 73 0a 6d 6f 72 65 20 74 68 61 6e 20  ields.more than 
106f0 6f 6e 65 20 72 65 73 75 6c 74 20 72 6f 77 2c 20  one result row, 
10700 61 6c 6c 20 72 6f 77 73 20 61 66 74 65 72 20 74  all rows after t
10710 68 65 20 66 69 72 73 74 20 61 72 65 20 69 67 6e  he first are ign
10720 6f 72 65 64 2e 20 20 5e 49 66 0a 74 68 65 20 53  ored.  ^If.the S
10730 45 4c 45 43 54 20 79 69 65 6c 64 73 20 6e 6f 20  ELECT yields no 
10740 72 6f 77 73 2c 20 74 68 65 6e 20 74 68 65 20 76  rows, then the v
10750 61 6c 75 65 20 6f 66 20 74 68 65 20 53 45 4c 45  alue of the SELE
10760 43 54 20 69 73 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a  CT is NULL.</p>.
10770 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
10780 74 20 63 61 73 74 65 78 70 72 20 7b 43 41 53 54  t castexpr {CAST
10790 20 65 78 70 72 65 73 73 69 6f 6e 7d 3c 2f 74 63   expression}</tc
107a0 6c 3e 0a 3c 68 33 3e 43 41 53 54 20 65 78 70 72  l>.<h3>CAST expr
107b0 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70  essions</h3>..<p
107c0 3e 41 20 43 41 53 54 20 65 78 70 72 65 73 73 69  >A CAST expressi
107d0 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  on is used to co
107e0 6e 76 65 72 74 20 74 68 65 20 76 61 6c 75 65 20  nvert the value 
107f0 6f 66 20 26 6c 74 3b 65 78 70 72 26 67 74 3b 20  of &lt;expr&gt; 
10800 74 6f 20 0a 61 20 64 69 66 66 65 72 65 6e 74 20  to .a different 
10810 5b 73 74 6f 72 61 67 65 20 63 6c 61 73 73 5d 20  [storage class] 
10820 69 6e 20 61 20 73 69 6d 69 6c 61 72 20 77 61 79  in a similar way
10830 20 74 6f 20 74 68 65 20 63 6f 6e 76 65 72 73 69   to the conversi
10840 6f 6e 20 74 68 61 74 20 74 61 6b 65 73 0a 70 6c  on that takes.pl
10850 61 63 65 20 77 68 65 6e 20 61 20 5b 63 6f 6c 75  ace when a [colu
10860 6d 6e 20 61 66 66 69 6e 69 74 79 5d 20 69 73 20  mn affinity] is 
10870 61 70 70 6c 69 65 64 20 74 6f 20 61 20 76 61 6c  applied to a val
10880 75 65 2e 20 5e 41 70 70 6c 69 63 61 74 69 6f 6e  ue. ^Application
10890 20 6f 66 20 61 20 43 41 53 54 0a 65 78 70 72 65   of a CAST.expre
108a0 73 73 69 6f 6e 20 69 73 20 64 69 66 66 65 72 65  ssion is differe
108b0 6e 74 20 74 6f 20 61 70 70 6c 69 63 61 74 69 6f  nt to applicatio
108c0 6e 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 61 66  n of a column af
108d0 66 69 6e 69 74 79 2c 20 61 73 0a 77 69 74 68 20  finity, as.with 
108e0 61 20 43 41 53 54 20 65 78 70 72 65 73 73 69 6f  a CAST expressio
108f0 6e 20 74 68 65 20 73 74 6f 72 61 67 65 20 63 6c  n the storage cl
10900 61 73 73 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  ass conversion i
10910 73 20 66 6f 72 63 65 64 20 65 76 65 6e 20 0a 69  s forced even .i
10920 66 20 69 74 20 69 73 20 6c 6f 73 73 79 20 61 6e  f it is lossy an
10930 64 20 69 72 72 72 65 76 65 72 73 69 62 6c 65 2e  d irrreversible.
10940 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 76 61 6c  ..<p>^If the val
10950 75 65 20 6f 66 20 26 6c 74 3b 65 78 70 72 26 67  ue of &lt;expr&g
10960 74 3b 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e  t; is NULL, then
10970 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
10980 68 65 20 43 41 53 54 0a 65 78 70 72 65 73 73 69  he CAST.expressi
10990 6f 6e 20 69 73 20 61 6c 73 6f 20 4e 55 4c 4c 2e  on is also NULL.
109a0 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65   ^Otherwise, the
109b0 20 73 74 6f 72 61 67 65 20 63 6c 61 73 73 20 6f   storage class o
109c0 66 20 74 68 65 20 72 65 73 75 6c 74 20 76 61 6c  f the result val
109d0 75 65 0a 69 73 20 64 65 74 65 72 6d 69 6e 65 64  ue.is determined
109e0 20 62 79 20 61 70 70 6c 79 69 6e 67 20 74 68 65   by applying the
109f0 20 5b 72 75 6c 65 73 20 66 6f 72 20 64 65 74 65   [rules for dete
10a00 72 6d 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 20 61  rmining column a
10a10 66 66 69 6e 69 74 79 5d 20 74 6f 0a 74 68 65 20  ffinity] to.the 
10a20 26 6c 74 3b 74 79 70 65 2d 6e 61 6d 65 26 67 74  &lt;type-name&gt
10a30 3b 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  ; specified as p
10a40 61 72 74 20 6f 66 20 74 68 65 20 43 41 53 54 20  art of the CAST 
10a50 65 78 70 72 65 73 73 69 6f 6e 2e 0a 0a 3c 74 61  expression...<ta
10a60 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74  ble border=1>.<t
10a70 72 3e 0a 20 20 3c 74 68 3e 20 41 66 66 69 6e 69  r>.  <th> Affini
10a80 74 79 20 6f 66 3c 62 72 3e 26 6c 74 3b 74 79 70  ty of<br>&lt;typ
10a90 65 2d 6e 61 6d 65 26 67 74 3b 0a 20 20 3c 74 68  e-name&gt;.  <th
10aa0 3e 20 43 6f 6e 76 65 72 73 69 6f 6e 20 50 72 6f  > Conversion Pro
10ab0 63 65 73 73 69 6e 67 0a 3c 74 72 3e 0a 20 20 3c  cessing.<tr>.  <
10ac0 74 64 3e 20 4e 4f 4e 45 20 0a 20 20 3c 74 64 3e  td> NONE .  <td>
10ad0 20 5e 43 61 73 74 69 6e 67 20 61 20 76 61 6c 75   ^Casting a valu
10ae0 65 20 74 6f 20 61 20 26 6c 74 3b 74 79 70 65 2d  e to a &lt;type-
10af0 6e 61 6d 65 26 67 74 3b 20 77 69 74 68 20 6e 6f  name&gt; with no
10b00 20 61 66 66 69 6e 69 74 79 20 63 61 75 73 65 73   affinity causes
10b10 20 74 68 65 20 76 61 6c 75 65 20 74 6f 0a 20 20   the value to.  
10b20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
10b30 6f 20 61 20 42 4c 4f 42 2e 20 20 5e 43 61 73 74  o a BLOB.  ^Cast
10b40 69 6e 67 20 74 6f 20 61 20 42 4c 4f 42 20 63 6f  ing to a BLOB co
10b50 6e 73 69 73 74 73 20 6f 66 20 66 69 72 73 74 20  nsists of first 
10b60 63 61 73 74 69 6e 67 0a 20 20 74 68 65 20 76 61  casting.  the va
10b70 6c 75 65 20 74 6f 20 54 45 58 54 20 69 6e 20 74  lue to TEXT in t
10b80 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 6f 66  he [encoding] of
10b90 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
10ba0 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65 6e 0a 20  nnection, then. 
10bb0 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20 74 68   interpreting th
10bc0 65 20 72 65 73 75 6c 74 69 6e 67 20 62 79 74 65  e resulting byte
10bd0 20 73 65 71 75 65 6e 63 65 20 61 73 20 61 20 42   sequence as a B
10be0 4c 4f 42 20 69 6e 73 74 65 61 64 20 6f 66 20 61  LOB instead of a
10bf0 73 20 54 45 58 54 2e 0a 0a 3c 74 72 3e 0a 20 20  s TEXT...<tr>.  
10c00 3c 74 64 3e 20 54 45 58 54 0a 20 20 3c 74 64 3e  <td> TEXT.  <td>
10c10 20 5e 54 6f 20 63 61 73 74 20 61 20 42 4c 4f 42   ^To cast a BLOB
10c20 20 76 61 6c 75 65 20 74 6f 20 54 45 58 54 2c 20   value to TEXT, 
10c30 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f 66 20  the sequence of 
10c40 62 79 74 65 73 20 74 68 61 74 20 6d 61 6b 65 20  bytes that make 
10c50 75 70 20 74 68 65 0a 20 20 42 4c 4f 42 20 69 73  up the.  BLOB is
10c60 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
10c70 74 65 78 74 20 65 6e 63 6f 64 65 64 20 75 73 69  text encoded usi
10c80 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ng the database 
10c90 65 6e 63 6f 64 69 6e 67 2e 0a 20 20 3c 70 3e 0a  encoding..  <p>.
10ca0 20 20 20 5e 43 61 73 74 69 6e 67 20 61 6e 20 49     ^Casting an I
10cb0 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c 20 76  NTEGER or REAL v
10cc0 61 6c 75 65 20 69 6e 74 6f 20 54 45 58 54 20 72  alue into TEXT r
10cd0 65 6e 64 65 72 73 20 74 68 65 20 76 61 6c 75 65  enders the value
10ce0 20 61 73 20 69 66 20 76 69 61 20 0a 20 20 20 20   as if via .    
10cf0 5b 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74  [sqlite3_snprint
10d00 66 28 29 5d 20 65 78 63 65 70 74 20 74 68 61 74  f()] except that
10d10 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 54   the resulting T
10d20 45 58 54 20 75 73 65 73 20 74 68 65 20 5b 65 6e  EXT uses the [en
10d30 63 6f 64 69 6e 67 5d 20 6f 66 0a 20 20 20 20 74  coding] of.    t
10d40 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
10d50 65 63 74 69 6f 6e 2e 0a 0a 3c 74 72 3e 0a 20 20  ection...<tr>.  
10d60 3c 74 64 3e 20 52 45 41 4c 0a 20 20 3c 74 64 3e  <td> REAL.  <td>
10d70 20 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61   ^When casting a
10d80 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f 20 61   BLOB value to a
10d90 20 52 45 41 4c 2c 20 74 68 65 20 76 61 6c 75 65   REAL, the value
10da0 20 69 73 20 66 69 72 73 74 20 63 6f 6e 76 65 72   is first conver
10db0 74 65 64 20 74 6f 0a 20 20 20 20 20 20 20 20 54  ted to.        T
10dc0 45 58 54 2e 0a 20 20 20 20 20 20 20 3c 70 3e 5e  EXT..       <p>^
10dd0 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20 54  When casting a T
10de0 45 58 54 20 76 61 6c 75 65 20 74 6f 20 52 45 41  EXT value to REA
10df0 4c 2c 20 74 68 65 20 6c 6f 6e 67 65 73 74 20 70  L, the longest p
10e00 6f 73 73 69 62 6c 65 20 70 72 65 66 69 78 20 6f  ossible prefix o
10e10 66 0a 20 20 20 20 20 20 20 20 74 68 65 20 76 61  f.        the va
10e20 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65 20  lue that can be 
10e30 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
10e40 20 72 65 61 6c 20 6e 75 6d 62 65 72 20 69 73 20   real number is 
10e50 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 0a 20  extracted from. 
10e60 20 20 20 20 20 20 20 74 68 65 20 54 45 58 54 20         the TEXT 
10e70 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 72 65  value and the re
10e80 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72 65 64 2e  mainder ignored.
10e90 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67 20 73 70   ^Any leading sp
10ea0 61 63 65 73 20 69 6e 20 74 68 65 0a 20 20 20 20  aces in the.    
10eb0 20 20 20 20 54 45 58 54 20 76 61 6c 75 65 20 61      TEXT value a
10ec0 72 65 20 69 67 6e 6f 72 65 64 20 77 68 65 6e 20  re ignored when 
10ed0 63 6f 6e 76 65 72 67 69 6e 67 20 66 72 6f 6d 20  converging from 
10ee0 54 45 58 54 20 74 6f 20 52 45 41 4c 2e 20 5e 49  TEXT to REAL. ^I
10ef0 66 20 74 68 65 72 65 20 69 73 0a 20 20 20 20 20  f there is.     
10f00 20 20 20 6e 6f 20 70 72 65 66 69 78 20 74 68 61     no prefix tha
10f10 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72  t can be interpr
10f20 65 74 65 64 20 61 73 20 61 20 72 65 61 6c 20 6e  eted as a real n
10f30 75 6d 62 65 72 2c 20 74 68 65 20 72 65 73 75 6c  umber, the resul
10f40 74 20 6f 66 20 74 68 65 0a 20 20 20 20 20 20 20  t of the.       
10f50 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 30   conversion is 0
10f60 2e 30 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e  .0...<tr>.  <td>
10f70 20 49 4e 54 45 47 45 52 0a 20 20 3c 74 64 3e 20   INTEGER.  <td> 
10f80 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20  ^When casting a 
10f90 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f 20 49 4e  BLOB value to IN
10fa0 54 45 47 45 52 2c 20 74 68 65 20 76 61 6c 75 65  TEGER, the value
10fb0 20 69 73 20 66 69 72 73 74 20 63 6f 6e 76 65 72   is first conver
10fc0 74 65 64 20 74 6f 0a 20 20 20 20 20 20 20 20 54  ted to.        T
10fd0 45 58 54 2e 0a 20 20 20 20 20 20 20 3c 70 3e 5e  EXT..       <p>^
10fe0 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20 54  When casting a T
10ff0 45 58 54 20 76 61 6c 75 65 20 74 6f 20 49 4e 54  EXT value to INT
11000 45 47 45 52 2c 20 74 68 65 20 6c 6f 6e 67 65 73  EGER, the longes
11010 74 20 70 6f 73 73 69 62 6c 65 20 70 72 65 66 69  t possible prefi
11020 78 20 6f 66 0a 20 20 20 20 20 20 20 20 74 68 65  x of.        the
11030 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20   value that can 
11040 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  be interpreted a
11050 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d  s an integer num
11060 62 65 72 20 69 73 20 65 78 74 72 61 63 74 65 64  ber is extracted
11070 20 66 72 6f 6d 0a 20 20 20 20 20 20 20 20 74 68   from.        th
11080 65 20 54 45 58 54 20 76 61 6c 75 65 20 61 6e 64  e TEXT value and
11090 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 69   the remainder i
110a0 67 6e 6f 72 65 64 2e 20 5e 41 6e 79 20 6c 65 61  gnored. ^Any lea
110b0 64 69 6e 67 20 73 70 61 63 65 73 20 69 6e 20 74  ding spaces in t
110c0 68 65 0a 20 20 20 20 20 20 20 20 54 45 58 54 20  he.        TEXT 
110d0 76 61 6c 75 65 20 77 68 65 6e 20 63 6f 6e 76 65  value when conve
110e0 72 74 69 6e 67 20 66 72 6f 6d 20 54 45 58 54 20  rting from TEXT 
110f0 74 6f 20 49 4e 54 45 47 45 52 20 61 72 65 20 69  to INTEGER are i
11100 67 6e 6f 72 65 64 2e 20 5e 49 66 20 74 68 65 72  gnored. ^If ther
11110 65 0a 20 20 20 20 20 20 20 20 69 73 20 6e 6f 20  e.        is no 
11120 70 72 65 66 69 78 20 74 68 61 74 20 63 61 6e 20  prefix that can 
11130 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  be interpreted a
11140 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d  s an integer num
11150 62 65 72 2c 20 74 68 65 20 72 65 73 75 6c 74 0a  ber, the result.
11160 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63          of the c
11170 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 30 2e 0a  onversion is 0..
11180 0a 20 20 20 20 20 20 3c 70 3e 5e 41 20 63 61 73  .      <p>^A cas
11190 74 20 6f 66 20 61 20 52 45 41 4c 20 76 61 6c 75  t of a REAL valu
111a0 65 20 69 6e 74 6f 20 61 6e 20 49 4e 54 45 47 45  e into an INTEGE
111b0 52 20 77 69 6c 6c 20 74 72 75 6e 63 61 74 65 20  R will truncate 
111c0 74 68 65 20 66 72 61 63 74 69 6f 6e 61 6c 0a 20  the fractional. 
111d0 20 20 20 20 20 70 61 72 74 20 6f 66 20 74 68 65       part of the
111e0 20 52 45 41 4c 2e 20 20 5e 49 66 20 61 6e 20 52   REAL.  ^If an R
111f0 45 41 4c 20 69 73 20 74 6f 6f 20 6c 61 72 67 65  EAL is too large
11200 20 74 6f 20 62 65 20 72 65 70 72 65 73 65 6e 74   to be represent
11210 65 64 20 61 73 20 61 6e 20 0a 20 20 20 20 20 20  ed as an .      
11220 49 4e 54 45 47 45 52 20 74 68 65 6e 20 74 68 65  INTEGER then the
11230 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 63   result of the c
11240 61 73 74 20 69 73 20 74 68 65 20 6c 61 72 67 65  ast is the large
11250 73 74 20 6e 65 67 61 74 69 76 65 20 69 6e 74 65  st negative inte
11260 67 65 72 3a 20 0a 20 20 20 20 20 20 2d 39 32 32  ger: .      -922
11270 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38  3372036854775808
11280 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 4e  ...<tr>.  <td> N
11290 55 4d 45 52 49 43 0a 20 20 3c 74 64 3e 20 5e 43  UMERIC.  <td> ^C
112a0 61 73 74 69 6e 67 20 61 20 76 61 6c 75 65 20 69  asting a value i
112b0 6e 74 6f 20 4e 55 4d 45 52 49 43 20 66 69 72 73  nto NUMERIC firs
112c0 74 20 64 6f 65 73 20 61 20 66 6f 72 63 65 64 20  t does a forced 
112d0 63 6f 6e 76 65 72 73 69 6f 6e 20 69 6e 74 6f 20  conversion into 
112e0 52 45 41 4c 0a 20 20 62 75 74 20 74 68 65 6e 20  REAL.  but then 
112f0 66 75 72 74 68 65 72 20 63 6f 6e 76 65 72 74 73  further converts
11300 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f   the result into
11310 20 49 4e 54 45 47 45 52 20 69 66 20 61 6e 64 20   INTEGER if and 
11320 6f 6e 6c 79 20 69 66 20 74 68 65 0a 20 20 63 6f  only if the.  co
11330 6e 76 65 72 73 69 6f 6e 20 66 72 6f 6d 20 52 45  nversion from RE
11340 41 4c 20 74 6f 20 49 4e 54 45 47 45 52 20 69 73  AL to INTEGER is
11350 20 6c 6f 73 73 6c 65 73 73 20 61 6e 64 20 72 65   lossless and re
11360 76 65 72 73 69 62 6c 65 2e 20 20 54 68 69 73 20  versible.  This 
11370 69 73 20 74 68 65 20 6f 6e 6c 79 0a 20 20 63 6f  is the only.  co
11380 6e 74 65 78 74 20 69 6e 20 53 51 4c 69 74 65 20  ntext in SQLite 
11390 77 68 65 72 65 20 74 68 65 20 4e 55 4d 45 52 49  where the NUMERI
113a0 43 20 61 6e 64 20 49 4e 54 45 47 45 52 20 5b 61  C and INTEGER [a
113b0 66 66 69 6e 69 74 69 65 73 5d 20 62 65 68 61 76  ffinities] behav
113c0 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 0a 0a  e differently...
113d0 3c 2f 74 72 3e 0a 0a 3c 2f 74 61 62 6c 65 3e 0a  </tr>..</table>.
113e0 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74  .<p>^Note that t
113f0 68 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 63  he result from c
11400 61 73 74 69 6e 67 20 61 6e 79 20 6e 6f 6e 2d 42  asting any non-B
11410 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f 20 61  LOB value into a
11420 20 0a 42 4c 4f 42 20 61 6e 64 20 74 68 65 20 72   .BLOB and the r
11430 65 73 75 6c 74 20 66 72 6f 6d 20 63 61 73 74 69  esult from casti
11440 6e 67 20 61 6e 79 20 42 4c 4f 42 20 76 61 6c 75  ng any BLOB valu
11450 65 20 69 6e 74 6f 20 61 20 6e 6f 6e 2d 42 4c 4f  e into a non-BLO
11460 42 20 76 61 6c 75 65 0a 77 69 6c 6c 20 62 65 20  B value.will be 
11470 64 69 66 66 65 72 65 6e 74 20 64 65 70 65 6e 64  different depend
11480 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20 74  ing on whether t
11490 68 65 20 64 61 74 61 62 61 73 65 20 5b 65 6e 63  he database [enc
114a0 6f 64 69 6e 67 5d 20 69 73 20 55 54 46 2d 38 2c  oding] is UTF-8,
114b0 0a 55 54 46 2d 31 36 62 65 2c 20 6f 72 20 55 54  .UTF-16be, or UT
114c0 46 2d 31 36 6c 65 2e 0a 0a 3c 68 33 3e 46 75 6e  F-16le...<h3>Fun
114d0 63 74 69 6f 6e 73 3c 2f 68 33 3e 0a 3c 70 3e 5e  ctions</h3>.<p>^
114e0 42 6f 74 68 20 5b 63 6f 72 65 66 75 6e 63 7c 73  Both [corefunc|s
114f0 69 6d 70 6c 65 5d 20 61 6e 64 20 5b 61 67 67 66  imple] and [aggf
11500 75 6e 63 7c 61 67 67 72 65 67 61 74 65 5d 20 66  unc|aggregate] f
11510 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 73 75 70  unctions are sup
11520 70 6f 72 74 65 64 2e 0a 28 46 6f 72 20 70 72 65  ported..(For pre
11530 73 65 6e 74 61 74 69 6f 6e 20 70 75 72 70 6f 73  sentation purpos
11540 65 73 2c 20 73 69 6d 70 6c 65 20 66 75 6e 63 74  es, simple funct
11550 69 6f 6e 73 20 61 72 65 20 66 75 72 74 68 65 72  ions are further
11560 20 73 75 62 64 69 76 69 64 65 64 20 69 6e 74 6f   subdivided into
11570 0a 5b 63 6f 72 65 66 75 6e 63 20 7c 20 63 6f 72  .[corefunc | cor
11580 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 6e 64  e functions] and
11590 20 5b 64 61 74 65 66 75 6e 63 20 7c 20 64 61 74   [datefunc | dat
115a0 65 2d 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  e-time functions
115b0 5d 2e 29 0a 5e 41 20 73 69 6d 70 6c 65 20 66 75  ].).^A simple fu
115c0 6e 63 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73  nction can be us
115d0 65 64 20 69 6e 20 61 6e 79 20 65 78 70 72 65 73  ed in any expres
115e0 73 69 6f 6e 2e 20 20 5e 53 69 6d 70 6c 65 20 66  sion.  ^Simple f
115f0 75 6e 63 74 69 6f 6e 73 20 72 65 74 75 72 6e 0a  unctions return.
11600 61 20 72 65 73 75 6c 74 20 69 6d 6d 65 64 69 61  a result immedia
11610 74 65 6c 79 20 62 61 73 65 64 20 6f 6e 20 74 68  tely based on th
11620 65 69 72 20 69 6e 70 75 74 73 2e 20 20 5e 41 67  eir inputs.  ^Ag
11630 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
11640 73 0a 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73  s.may only be us
11650 65 64 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73  ed in a SELECT s
11660 74 61 74 65 6d 65 6e 74 2e 20 20 5e 41 67 67 72  tatement.  ^Aggr
11670 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
11680 63 6f 6d 70 75 74 65 0a 74 68 65 69 72 20 72 65  compute.their re
11690 73 75 6c 74 20 61 63 72 6f 73 73 20 61 6c 6c 20  sult across all 
116a0 72 6f 77 73 20 6f 66 20 74 68 65 20 72 65 73 75  rows of the resu
116b0 6c 74 20 73 65 74 2e 3c 2f 70 3e 0a 0a 3c 74 63  lt set.</p>..<tc
116c0 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
116d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
116e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
116f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11710 23 0a 53 65 63 74 69 6f 6e 20 7b 43 6f 72 65 20  #.Section {Core 
11720 46 75 6e 63 74 69 6f 6e 73 7d 20 63 6f 72 65 66  Functions} coref
11730 75 6e 63 20 7b 2a 63 6f 72 65 66 75 6e 63 7d 0a  unc {*corefunc}.
11740 70 72 6f 63 20 66 75 6e 63 64 65 66 20 7b 73 79  proc funcdef {sy
11750 6e 74 61 78 20 6b 65 79 77 6f 72 64 73 20 64 65  ntax keywords de
11760 73 63 7d 20 7b 0a 20 20 68 64 5f 70 75 74 73 20  sc} {.  hd_puts 
11770 7b 3c 74 72 3e 7d 0a 20 20 72 65 67 73 75 62 20  {<tr>}.  regsub 
11780 2d 61 6c 6c 20 7b 5c 73 2b 7d 20 5b 73 74 72 69  -all {\s+} [stri
11790 6e 67 20 74 72 69 6d 20 24 73 79 6e 74 61 78 5d  ng trim $syntax]
117a0 20 7b 3c 62 72 3e 3c 2f 62 72 3e 7d 20 73 79 6e   {<br></br>} syn
117b0 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c  tax.  regsub -al
117c0 6c 20 7b 5c 28 28 5b 5e 2a 29 5d 2b 29 5c 29 7d  l {\(([^*)]+)\)}
117d0 20 24 73 79 6e 74 61 78 20 7b 28 3c 69 3e 5c 31   $syntax {(<i>\1
117e0 3c 2f 69 3e 29 7d 20 73 79 6e 74 61 78 0a 20 20  </i>)} syntax.  
117f0 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 2c 7d 20  regsub -all {,} 
11800 24 73 79 6e 74 61 78 20 7b 3c 2f 69 3e 2c 3c 69  $syntax {</i>,<i
11810 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73  >} syntax.  regs
11820 75 62 20 2d 61 6c 6c 20 7b 3c 69 3e 5c 2e 5c 2e  ub -all {<i>\.\.
11830 5c 2e 3c 2f 69 3e 7d 20 24 73 79 6e 74 61 78 20  \.</i>} $syntax 
11840 7b 2e 2e 2e 7d 20 73 79 6e 74 61 78 0a 20 20 68  {...} syntax.  h
11850 64 5f 70 75 74 73 20 22 3c 74 64 20 76 61 6c 69  d_puts "<td vali
11860 67 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c 69 67 6e  gn=\"top\" align
11870 3d 5c 22 72 69 67 68 74 5c 22 20 77 69 64 74 68  =\"right\" width
11880 3d 5c 22 31 32 30 5c 22 3e 22 0a 20 20 69 66 20  =\"120\">".  if 
11890 7b 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f  {[llength $keywo
118a0 72 64 73 5d 3d 3d 30 7d 20 7b 0a 20 20 20 20 72  rds]==0} {.    r
118b0 65 67 65 78 70 20 7b 5b 61 2d 7a 5f 5d 2b 7d 20  egexp {[a-z_]+} 
118c0 24 73 79 6e 74 61 78 20 6e 61 6d 65 0a 20 20 20  $syntax name.   
118d0 20 68 64 5f 66 72 61 67 6d 65 6e 74 20 24 6e 61   hd_fragment $na
118e0 6d 65 20 2a 24 6e 61 6d 65 20 22 24 7b 6e 61 6d  me *$name "${nam
118f0 65 7d 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  e}() SQL functio
11900 6e 22 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20  n".  } else {.  
11910 20 20 73 65 74 20 66 72 61 67 6e 61 6d 65 20 5b    set fragname [
11920 6c 69 6e 64 65 78 20 24 6b 65 79 77 6f 72 64 73  lindex $keywords
11930 20 30 5d 0a 20 20 20 20 72 65 67 73 75 62 20 2d   0].    regsub -
11940 61 6c 6c 20 7b 5b 5e 61 2d 7a 5d 7d 20 24 66 72  all {[^a-z]} $fr
11950 61 67 6e 61 6d 65 20 7b 7d 20 66 72 61 67 6e 61  agname {} fragna
11960 6d 65 0a 20 20 20 20 68 64 5f 66 72 61 67 6d 65  me.    hd_fragme
11970 6e 74 20 24 66 72 61 67 6e 61 6d 65 0a 20 20 20  nt $fragname.   
11980 20 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64   eval hd_keyword
11990 73 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 5c  s [string map {\
119a0 6e 20 7b 20 7d 7d 20 24 6b 65 79 77 6f 72 64 73  n { }} $keywords
119b0 5d 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74 73 20  ].  }.  hd_puts 
119c0 22 24 73 79 6e 74 61 78 3c 2f 74 64 3e 22 0a 20  "$syntax</td>". 
119d0 20 68 64 5f 70 75 74 73 20 7b 3c 74 64 20 76 61   hd_puts {<td va
119e0 6c 69 67 6e 3d 22 74 6f 70 22 3e 7d 0a 20 20 68  lign="top">}.  h
119f0 64 5f 72 65 73 6f 6c 76 65 20 24 64 65 73 63 0a  d_resolve $desc.
11a00 20 20 68 64 5f 70 75 74 73 20 7b 3c 2f 74 64 3e    hd_puts {</td>
11a10 3c 2f 74 72 3e 7d 0a 7d 0a 3c 2f 74 63 6c 3e 0a  </tr>}.}.</tcl>.
11a20 0a 3c 70 3e 54 68 65 20 63 6f 72 65 20 66 75 6e  .<p>The core fun
11a30 63 74 69 6f 6e 73 20 73 68 6f 77 6e 20 62 65 6c  ctions shown bel
11a40 6f 77 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  ow are available
11a50 20 62 79 20 64 65 66 61 75 6c 74 2e 20 0a 5b 64   by default. .[d
11a60 61 74 65 66 75 6e 63 20 7c 20 44 61 74 65 20 26  atefunc | Date &
11a70 61 6d 70 3b 20 54 69 6d 65 20 66 75 6e 63 74 69  amp; Time functi
11a80 6f 6e 73 5d 20 61 6e 64 0a 5b 61 67 67 66 75 6e  ons] and.[aggfun
11a90 63 20 7c 20 61 67 67 72 65 67 61 74 65 20 66 75  c | aggregate fu
11aa0 6e 63 74 69 6f 6e 73 5d 20 61 72 65 20 64 6f 63  nctions] are doc
11ab0 75 6d 65 6e 74 65 64 20 73 65 70 61 72 61 74 65  umented separate
11ac0 6c 79 2e 20 20 41 6e 0a 61 70 70 6c 69 63 61 74  ly.  An.applicat
11ad0 69 6f 6e 20 6d 61 79 20 64 65 66 69 6e 65 20 61  ion may define a
11ae0 64 64 69 74 69 6f 6e 61 6c 0a 66 75 6e 63 74 69  dditional.functi
11af0 6f 6e 73 20 77 72 69 74 74 65 6e 20 69 6e 20 43  ons written in C
11b00 20 61 6e 64 20 61 64 64 65 64 20 74 6f 20 74 68   and added to th
11b10 65 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  e database engin
11b20 65 20 75 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c  e using.the [sql
11b30 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
11b40 74 69 6f 6e 28 29 5d 20 41 50 49 2e 3c 2f 70 3e  tion()] API.</p>
11b50 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  ..<table border=
11b60 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30  0 cellpadding=10
11b70 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64 65 66 20  >.<tcl>.funcdef 
11b80 7b 61 62 73 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  {abs(X)} {} {.  
11b90 5e 54 68 65 20 61 62 73 28 58 29 20 66 75 6e 63  ^The abs(X) func
11ba0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
11bb0 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20   absolute value 
11bc0 6f 66 20 74 68 65 20 6e 75 6d 65 72 69 63 0a 20  of the numeric. 
11bd0 20 61 72 67 75 6d 65 6e 74 20 58 2e 20 20 5e 41   argument X.  ^A
11be0 62 73 28 58 29 20 72 65 74 75 72 6e 73 20 4e 55  bs(X) returns NU
11bf0 4c 4c 20 69 66 20 58 20 69 73 20 4e 55 4c 4c 2e  LL if X is NULL.
11c00 20 0a 20 20 5e 28 41 62 73 28 58 29 20 72 65 74   .  ^(Abs(X) ret
11c10 75 72 6e 20 30 2e 30 20 69 66 20 58 20 69 73 20  urn 0.0 if X is 
11c20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  a string or blob
11c30 0a 20 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62  .  that cannot b
11c40 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  e converted to a
11c50 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 2e 29   numeric value.)
11c60 5e 20 20 5e 49 66 20 58 20 69 73 20 74 68 65 20  ^  ^If X is the 
11c70 0a 20 20 69 6e 74 65 67 65 72 20 2d 39 32 32 33  .  integer -9223
11c80 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37 20  372036854775807 
11c90 74 68 65 6e 20 61 62 73 28 58 29 20 74 68 72 6f  then abs(X) thro
11ca0 77 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76  ws an integer ov
11cb0 65 72 66 6c 6f 77 0a 20 20 65 72 72 6f 72 20 73  erflow.  error s
11cc0 69 6e 63 65 20 74 68 65 72 65 20 69 73 20 6e 6f  ince there is no
11cd0 20 65 71 75 69 76 61 6c 65 6e 74 20 70 6f 73 69   equivalent posi
11ce0 74 69 76 65 20 36 34 2d 62 69 74 20 74 77 6f 20  tive 64-bit two 
11cf0 63 6f 6d 70 6c 65 6d 65 6e 74 20 76 61 6c 75 65  complement value
11d00 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 68  ..}..funcdef {ch
11d10 61 6e 67 65 73 28 29 7d 20 7b 7d 20 7b 0a 20 20  anges()} {} {.  
11d20 5e 54 68 65 20 63 68 61 6e 67 65 73 28 29 20 66  ^The changes() f
11d30 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
11d40 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61  the number of da
11d50 74 61 62 61 73 65 20 72 6f 77 73 20 74 68 61 74  tabase rows that
11d60 20 77 65 72 65 20 63 68 61 6e 67 65 64 0a 20 20   were changed.  
11d70 6f 72 20 69 6e 73 65 72 74 65 64 20 6f 72 20 64  or inserted or d
11d80 65 6c 65 74 65 64 20 62 79 20 74 68 65 20 6d 6f  eleted by the mo
11d90 73 74 20 72 65 63 65 6e 74 6c 79 20 63 6f 6d 70  st recently comp
11da0 6c 65 74 65 64 20 49 4e 53 45 52 54 2c 20 44 45  leted INSERT, DE
11db0 4c 45 54 45 2c 0a 20 20 6f 72 20 55 50 44 41 54  LETE,.  or UPDAT
11dc0 45 20 73 74 61 74 65 6d 65 6e 74 2c 20 65 78 63  E statement, exc
11dd0 6c 75 73 69 76 65 20 6f 66 20 73 74 61 74 65 6d  lusive of statem
11de0 65 6e 74 73 20 69 6e 20 6c 6f 77 65 72 2d 6c 65  ents in lower-le
11df0 76 65 6c 20 74 72 69 67 67 65 72 73 2e 0a 20 20  vel triggers..  
11e00 5e 54 68 65 20 63 68 61 6e 67 65 73 28 29 20 53  ^The changes() S
11e10 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61  QL function is a
11e20 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20   wrapper around 
11e30 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61  the [sqlite3_cha
11e40 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43 2b 2b 20  nges()].  C/C++ 
11e50 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 68 65 6e  function and hen
11e60 63 65 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 73  ce follows the s
11e70 61 6d 65 20 72 75 6c 65 73 20 66 6f 72 20 63 6f  ame rules for co
11e80 75 6e 74 69 6e 67 20 63 68 61 6e 67 65 73 2e 0a  unting changes..
11e90 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 6f 61 6c  }..funcdef {coal
11ea0 65 73 63 65 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b  esce(X,Y,...)} {
11eb0 7d 20 7b 0a 20 20 5e 54 68 65 20 63 6f 61 6c 65  } {.  ^The coale
11ec0 73 63 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  sce() function r
11ed0 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66  eturns a copy of
11ee0 20 69 74 73 20 66 69 72 73 74 20 6e 6f 6e 2d 4e   its first non-N
11ef0 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2c 20 6f 72  ULL argument, or
11f00 0a 20 20 4e 55 4c 4c 20 69 66 20 61 6c 6c 20 61  .  NULL if all a
11f10 72 67 75 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c  rguments are NUL
11f20 4c 2e 20 20 5e 43 6f 61 6c 65 73 63 65 28 29 20  L.  ^Coalesce() 
11f30 6d 75 73 74 20 62 65 20 61 74 20 6c 65 61 73 74  must be at least
11f40 20 0a 20 20 32 20 61 72 67 75 6d 65 6e 74 73 2e   .  2 arguments.
11f50 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67 6c 6f  .}..funcdef {glo
11f60 62 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  b(X,Y)} {} {.  ^
11f70 54 68 65 20 67 6c 6f 62 28 58 2c 59 29 20 66 75  The glob(X,Y) fu
11f80 6e 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61  nction is equiva
11f90 6c 65 6e 74 20 74 6f 20 74 68 65 0a 20 20 65 78  lent to the.  ex
11fa0 70 72 65 73 73 69 6f 6e 20 22 3c 62 3e 59 20 47  pression "<b>Y G
11fb0 4c 4f 42 20 58 3c 2f 62 3e 22 2e 0a 20 20 4e 6f  LOB X</b>"..  No
11fc0 74 65 20 74 68 61 74 20 74 68 65 20 58 20 61 6e  te that the X an
11fd0 64 20 59 20 61 72 67 75 6d 65 6e 74 73 20 61 72  d Y arguments ar
11fe0 65 20 72 65 76 65 72 73 65 64 20 69 6e 20 74 68  e reversed in th
11ff0 65 20 67 6c 6f 62 28 29 20 66 75 6e 63 74 69 6f  e glob() functio
12000 6e 0a 20 20 72 65 6c 61 74 69 76 65 20 74 6f 20  n.  relative to 
12010 74 68 65 20 69 6e 66 69 78 20 5b 47 4c 4f 42 5d  the infix [GLOB]
12020 20 6f 70 65 72 61 74 6f 72 2e 0a 20 20 5e 49 66   operator..  ^If
12030 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72   the [sqlite3_cr
12040 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d  eate_function()]
12050 20 69 6e 74 65 72 66 61 63 65 20 69 73 20 75 73   interface is us
12060 65 64 20 74 6f 0a 20 20 6f 76 65 72 72 69 64 65  ed to.  override
12070 20 74 68 65 20 67 6c 6f 62 28 58 2c 59 29 20 66   the glob(X,Y) f
12080 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 6e 20  unction with an 
12090 61 6c 74 65 72 6e 61 74 69 76 65 20 69 6d 70 6c  alternative impl
120a0 65 6d 65 6e 74 61 74 69 6f 6e 20 74 68 65 6e 0a  ementation then.
120b0 20 20 74 68 65 20 5b 47 4c 4f 42 5d 20 6f 70 65    the [GLOB] ope
120c0 72 61 74 6f 72 20 77 69 6c 6c 20 69 6e 76 6f 6b  rator will invok
120d0 65 20 74 68 65 20 61 6c 74 65 72 6e 61 74 69 76  e the alternativ
120e0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
120f0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 69 66  ..}..funcdef {if
12100 6e 75 6c 6c 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  null(X,Y)} {} {.
12110 20 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28 29 20    ^The ifnull() 
12120 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
12130 20 61 20 63 6f 70 79 20 6f 66 20 69 74 73 20 66   a copy of its f
12140 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72  irst non-NULL ar
12150 67 75 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c  gument, or.  NUL
12160 4c 20 69 66 20 62 6f 74 68 20 61 72 67 75 6d 65  L if both argume
12170 6e 74 73 20 61 72 65 20 4e 55 4c 4c 2e 20 20 5e  nts are NULL.  ^
12180 49 66 6e 75 6c 6c 28 29 20 6d 75 73 74 20 68 61  Ifnull() must ha
12190 76 65 20 65 78 61 63 74 6c 79 20 32 20 61 72 67  ve exactly 2 arg
121a0 75 6d 65 6e 74 73 2e 0a 20 20 5e 54 68 65 20 69  uments..  ^The i
121b0 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69 6f 6e  fnull() function
121c0 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74   is equivalent t
121d0 6f 20 5b 63 6f 61 6c 65 73 63 65 28 29 5d 20 77  o [coalesce()] w
121e0 69 74 68 20 74 77 6f 20 61 72 67 75 6d 65 6e 74  ith two argument
121f0 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 68  s..}..funcdef {h
12200 65 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ex(X)} {} {.  ^T
12210 68 65 20 68 65 78 28 29 20 66 75 6e 63 74 69 6f  he hex() functio
12220 6e 20 69 6e 74 65 72 70 72 65 74 73 20 69 74 73  n interprets its
12230 20 61 72 67 75 6d 65 6e 74 20 61 73 20 61 20 42   argument as a B
12240 4c 4f 42 20 61 6e 64 20 72 65 74 75 72 6e 73 0a  LOB and returns.
12250 20 20 61 20 73 74 72 69 6e 67 20 77 68 69 63 68    a string which
12260 20 69 73 20 74 68 65 20 75 70 70 65 72 2d 63 61   is the upper-ca
12270 73 65 20 68 65 78 61 64 65 63 69 6d 61 6c 20 72  se hexadecimal r
12280 65 6e 64 65 72 69 6e 67 20 6f 66 20 74 68 65 20  endering of the 
12290 63 6f 6e 74 65 6e 74 20 6f 66 0a 20 20 74 68 61  content of.  tha
122a0 74 20 62 6c 6f 62 2e 0a 7d 0a 0a 66 75 6e 63 64  t blob..}..funcd
122b0 65 66 20 7b 6c 61 73 74 5f 69 6e 73 65 72 74 5f  ef {last_insert_
122c0 72 6f 77 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20  rowid()} {} {.  
122d0 5e 54 68 65 20 6c 61 73 74 5f 69 6e 73 65 72 74  ^The last_insert
122e0 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f  _rowid() functio
122f0 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 5b 52  n returns the [R
12300 4f 57 49 44 5d 0a 20 20 6f 66 20 74 68 65 20 6c  OWID].  of the l
12310 61 73 74 20 72 6f 77 20 69 6e 73 65 72 74 20 66  ast row insert f
12320 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
12330 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 68 69 63   connection whic
12340 68 20 69 6e 76 6f 6b 65 64 20 74 68 65 0a 20 20  h invoked the.  
12350 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54 68 65  function..  ^The
12360 20 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77   last_insert_row
12370 69 64 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  id() SQL functio
12380 6e 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61  n is a wrapper a
12390 72 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c  round the.  [sql
123a0 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74  ite3_last_insert
123b0 5f 72 6f 77 69 64 28 29 5d 20 43 2f 43 2b 2b 20  _rowid()] C/C++ 
123c0 69 6e 74 65 72 66 61 63 65 20 66 75 6e 63 74 69  interface functi
123d0 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  on..}..funcdef {
123e0 6c 65 6e 67 74 68 28 58 29 7d 20 7b 7d 20 7b 0a  length(X)} {} {.
123f0 20 20 5e 54 68 65 20 6c 65 6e 67 74 68 28 58 29    ^The length(X)
12400 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
12410 73 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20  s the length of 
12420 58 20 69 6e 20 0a 20 20 63 68 61 72 61 63 74 65  X in .  characte
12430 72 73 20 69 66 20 58 20 69 73 20 61 20 73 74 72  rs if X is a str
12440 69 6e 67 2c 20 6f 72 20 69 6e 20 62 79 74 65 73  ing, or in bytes
12450 20 69 66 20 58 20 69 73 20 61 20 62 6c 6f 62 2e   if X is a blob.
12460 0a 20 20 5e 49 66 20 58 20 69 73 20 4e 55 4c 4c  .  ^If X is NULL
12470 20 74 68 65 6e 20 6c 65 6e 67 74 68 28 58 29 20   then length(X) 
12480 69 73 20 4e 55 4c 4c 2e 0a 20 20 5e 49 66 20 58  is NULL..  ^If X
12490 20 69 73 20 6e 75 6d 65 72 69 63 20 74 68 65 6e   is numeric then
124a0 20 6c 65 6e 67 74 68 28 58 29 20 72 65 74 75 72   length(X) retur
124b0 6e 73 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66  ns the length of
124c0 20 61 20 73 74 72 69 6e 67 0a 20 20 72 65 70 72   a string.  repr
124d0 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 58 2e  esentation of X.
124e0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 69 6b  .}..funcdef {lik
124f0 65 28 58 2c 59 29 20 6c 69 6b 65 28 58 2c 59 2c  e(X,Y) like(X,Y,
12500 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Z)} {} {.  ^The 
12510 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  like() function 
12520 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  is used to imple
12530 6d 65 6e 74 20 74 68 65 0a 20 20 22 3c 62 3e 59  ment the.  "<b>Y
12540 20 4c 49 4b 45 20 58 20 26 23 39 31 3b 45 53 43   LIKE X &#91;ESC
12550 41 50 45 20 5a 26 23 39 33 3b 3c 2f 62 3e 22 20  APE Z&#93;</b>" 
12560 65 78 70 72 65 73 73 69 6f 6e 2e 20 0a 20 20 5e  expression. .  ^
12570 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20  If the optional 
12580 45 53 43 41 50 45 20 63 6c 61 75 73 65 20 69 73  ESCAPE clause is
12590 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74   present, then t
125a0 68 65 0a 20 20 6c 69 6b 65 28 29 20 66 75 6e 63  he.  like() func
125b0 74 69 6f 6e 20 69 73 20 69 6e 76 6f 6b 65 64 20  tion is invoked 
125c0 77 69 74 68 20 74 68 72 65 65 20 61 72 67 75 6d  with three argum
125d0 65 6e 74 73 2e 20 20 5e 4f 74 68 65 72 77 69 73  ents.  ^Otherwis
125e0 65 2c 20 69 74 20 69 73 0a 20 20 69 6e 76 6f 6b  e, it is.  invok
125f0 65 64 20 77 69 74 68 20 74 77 6f 20 61 72 67 75  ed with two argu
12600 6d 65 6e 74 73 20 6f 6e 6c 79 2e 20 4e 6f 74 65  ments only. Note
12610 20 74 68 61 74 20 74 68 65 20 58 20 61 6e 64 20   that the X and 
12620 59 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65  Y parameters are
12630 0a 20 20 72 65 76 65 72 73 65 64 20 69 6e 20 74  .  reversed in t
12640 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69  he like() functi
12650 6f 6e 20 72 65 6c 61 74 69 76 65 20 74 6f 20 74  on relative to t
12660 68 65 20 69 6e 66 69 78 20 5b 4c 49 4b 45 5d 20  he infix [LIKE] 
12670 6f 70 65 72 61 74 6f 72 2e 0a 20 20 5e 54 68 65  operator..  ^The
12680 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65   [sqlite3_create
12690 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74  _function()] int
126a0 65 72 66 61 63 65 20 63 61 6e 20 62 65 20 75 73  erface can be us
126b0 65 64 20 74 6f 20 6f 76 65 72 72 69 64 65 20 74  ed to override t
126c0 68 65 0a 20 20 6c 69 6b 65 28 29 20 66 75 6e 63  he.  like() func
126d0 74 69 6f 6e 20 61 6e 64 20 74 68 65 72 65 62 79  tion and thereby
126e0 20 63 68 61 6e 67 65 20 74 68 65 20 6f 70 65 72   change the oper
126f0 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20 5b  ation of the.  [
12700 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 20  LIKE] operator. 
12710 20 57 68 65 6e 20 6f 76 65 72 72 69 64 69 6e 67   When overriding
12720 20 74 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63   the like() func
12730 74 69 6f 6e 2c 20 69 74 20 6d 61 79 20 62 65 20  tion, it may be 
12740 69 6d 70 6f 72 74 61 6e 74 0a 20 20 74 6f 20 6f  important.  to o
12750 76 65 72 72 69 64 65 20 62 6f 74 68 20 74 68 65  verride both the
12760 20 74 77 6f 20 61 6e 64 20 74 68 72 65 65 20 61   two and three a
12770 72 67 75 6d 65 6e 74 20 76 65 72 73 69 6f 6e 73  rgument versions
12780 20 6f 66 20 74 68 65 20 6c 69 6b 65 28 29 20 0a   of the like() .
12790 20 20 66 75 6e 63 74 69 6f 6e 2e 20 4f 74 68 65    function. Othe
127a0 72 77 69 73 65 2c 20 64 69 66 66 65 72 65 6e 74  rwise, different
127b0 20 63 6f 64 65 20 6d 61 79 20 62 65 20 63 61 6c   code may be cal
127c0 6c 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  led to implement
127d0 20 74 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70   the.  [LIKE] op
127e0 65 72 61 74 6f 72 20 64 65 70 65 6e 64 69 6e 67  erator depending
127f0 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e   on whether or n
12800 6f 74 20 61 6e 20 45 53 43 41 50 45 20 63 6c 61  ot an ESCAPE cla
12810 75 73 65 20 77 61 73 20 0a 20 20 73 70 65 63 69  use was .  speci
12820 66 69 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  fied..}..funcdef
12830 20 7b 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e   {load_extension
12840 28 58 29 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  (X) load_extensi
12850 6f 6e 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  on(X,Y)} {} {.  
12860 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  ^The load_extens
12870 69 6f 6e 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  ion(X,Y) functio
12880 6e 20 6c 6f 61 64 73 20 53 51 4c 69 74 65 20 65  n loads SQLite e
12890 78 74 65 6e 73 69 6f 6e 73 20 6f 75 74 20 6f 66  xtensions out of
128a0 20 74 68 65 20 73 68 61 72 65 64 0a 20 20 6c 69   the shared.  li
128b0 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65 64  brary file named
128c0 20 58 20 75 73 69 6e 67 20 74 68 65 20 65 6e 74   X using the ent
128d0 72 79 20 70 6f 69 6e 74 20 59 2e 20 20 5e 54 68  ry point Y.  ^Th
128e0 65 20 72 65 73 75 6c 74 20 6f 66 20 6c 6f 61 64  e result of load
128f0 5f 65 78 74 65 6e 73 69 6f 6e 28 29 0a 20 20 69  _extension().  i
12900 73 20 61 6c 77 61 79 73 20 61 20 4e 55 4c 4c 2e  s always a NULL.
12910 20 20 5e 49 66 20 59 20 69 73 20 6f 6d 69 74 74    ^If Y is omitt
12920 65 64 20 74 68 65 6e 20 74 68 65 20 64 65 66 61  ed then the defa
12930 75 6c 74 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a  ult entry point.
12940 20 20 6f 66 20 3c 62 3e 73 71 6c 69 74 65 33 5f    of <b>sqlite3_
12950 65 78 74 65 6e 73 69 6f 6e 5f 69 6e 69 74 3c 2f  extension_init</
12960 62 3e 20 69 73 20 75 73 65 64 2e 20 20 5e 54 68  b> is used.  ^Th
12970 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
12980 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 61  () function.  ra
12990 69 73 65 73 20 61 6e 20 65 78 63 65 70 74 69 6f  ises an exceptio
129a0 6e 20 69 66 20 74 68 65 20 65 78 74 65 6e 73 69  n if the extensi
129b0 6f 6e 20 66 61 69 6c 73 20 74 6f 20 6c 6f 61 64  on fails to load
129c0 20 6f 72 20 69 6e 69 74 69 61 6c 69 7a 65 20 63   or initialize c
129d0 6f 72 72 65 63 74 6c 79 2e 0a 0a 20 20 3c 70 3e  orrectly...  <p>
129e0 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  ^The load_extens
129f0 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 77  ion() function w
12a00 69 6c 6c 20 66 61 69 6c 20 69 66 20 74 68 65 20  ill fail if the 
12a10 65 78 74 65 6e 73 69 6f 6e 20 61 74 74 65 6d 70  extension attemp
12a20 74 73 20 74 6f 20 0a 20 20 6d 6f 64 69 66 79 20  ts to .  modify 
12a30 6f 72 20 64 65 6c 65 74 65 20 61 20 53 51 4c 20  or delete a SQL 
12a40 66 75 6e 63 74 69 6f 6e 20 6f 72 20 63 6f 6c 6c  function or coll
12a50 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20  ating sequence. 
12a60 20 5e 54 68 65 0a 20 20 65 78 74 65 6e 73 69 6f   ^The.  extensio
12a70 6e 20 63 61 6e 20 61 64 64 20 6e 65 77 20 66 75  n can add new fu
12a80 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61  nctions or colla
12a90 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 2c 20  ting sequences, 
12aa0 62 75 74 20 63 61 6e 6e 6f 74 0a 20 20 6d 6f 64  but cannot.  mod
12ab0 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20 65 78  ify or delete ex
12ac0 69 73 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73  isting functions
12ad0 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65   or collating se
12ae0 71 75 65 6e 63 65 73 20 62 65 63 61 75 73 65 0a  quences because.
12af0 20 20 74 68 6f 73 65 20 66 75 6e 63 74 69 6f 6e    those function
12b00 73 20 61 6e 64 2f 6f 72 20 63 6f 6c 6c 61 74 69  s and/or collati
12b10 6e 67 20 73 65 71 75 65 6e 63 65 73 20 6d 69 67  ng sequences mig
12b20 68 74 20 62 65 20 75 73 65 64 20 65 6c 73 65 77  ht be used elsew
12b30 68 65 72 65 0a 20 20 69 6e 20 74 68 65 20 63 75  here.  in the cu
12b40 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20  rrently running 
12b50 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  SQL statement.  
12b60 54 6f 20 6c 6f 61 64 20 61 6e 20 65 78 74 65 6e  To load an exten
12b70 73 69 6f 6e 20 74 68 61 74 0a 20 20 63 68 61 6e  sion that.  chan
12b80 67 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20 66  ges or deletes f
12b90 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c  unctions or coll
12ba0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 2c  ating sequences,
12bb0 20 75 73 65 20 74 68 65 0a 20 20 5b 73 71 6c 69   use the.  [sqli
12bc0 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69  te3_load_extensi
12bd0 6f 6e 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67 65  on()] C-language
12be0 20 41 50 49 2e 3c 2f 70 3e 0a 7d 0a 0a 66 75 6e   API.</p>.}..fun
12bf0 63 64 65 66 20 7b 6c 6f 77 65 72 28 58 29 7d 20  cdef {lower(X)} 
12c00 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 6f 77 65  {} {.  ^The lowe
12c10 72 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  r(X) function re
12c20 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20  turns a copy of 
12c30 73 74 72 69 6e 67 20 58 20 77 69 74 68 20 61 6c  string X with al
12c40 6c 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  l ASCII characte
12c50 72 73 0a 20 20 63 6f 6e 76 65 72 74 65 64 20 74  rs.  converted t
12c60 6f 20 6c 6f 77 65 72 20 63 61 73 65 2e 20 20 5e  o lower case.  ^
12c70 54 68 65 20 64 65 66 61 75 6c 74 20 62 75 69 6c  The default buil
12c80 74 2d 69 6e 20 6c 6f 77 65 72 28 29 20 66 75 6e  t-in lower() fun
12c90 63 74 69 6f 6e 20 77 6f 72 6b 73 0a 20 20 66 6f  ction works.  fo
12ca0 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  r ASCII characte
12cb0 72 73 20 6f 6e 6c 79 2e 20 20 54 6f 20 64 6f 20  rs only.  To do 
12cc0 63 61 73 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73  case conversions
12cd0 20 6f 6e 20 6e 6f 6e 2d 41 53 43 49 49 0a 20 20   on non-ASCII.  
12ce0 63 68 61 72 61 63 74 65 72 73 2c 20 6c 6f 61 64  characters, load
12cf0 20 74 68 65 20 49 43 55 20 65 78 74 65 6e 73 69   the ICU extensi
12d00 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  on..}..funcdef {
12d10 6c 74 72 69 6d 28 58 29 20 6c 74 72 69 6d 28 58  ltrim(X) ltrim(X
12d20 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
12d30 20 6c 74 72 69 6d 28 58 2c 59 29 20 66 75 6e 63   ltrim(X,Y) func
12d40 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
12d50 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20  tring formed by 
12d60 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64  removing any and
12d70 20 61 6c 6c 0a 20 20 63 68 61 72 61 63 74 65 72   all.  character
12d80 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e  s that appear in
12d90 20 59 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74   Y from the left
12da0 20 73 69 64 65 20 6f 66 20 58 2e 0a 20 20 5e 49   side of X..  ^I
12db0 66 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74  f the Y argument
12dc0 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 6c 74 72   is omitted, ltr
12dd0 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20 73 70  im(X) removes sp
12de0 61 63 65 73 20 66 72 6f 6d 20 74 68 65 20 6c 65  aces from the le
12df0 66 74 20 73 69 64 65 0a 20 20 6f 66 20 58 2e 0a  ft side.  of X..
12e00 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78 28  }..funcdef {max(
12e10 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 61 78 43  X,Y,...)} {*maxC
12e20 6f 72 65 46 75 6e 63 20 2a 6d 61 78 20 7b 6d 61  oreFunc *max {ma
12e30 78 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  x() SQL function
12e40 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 75 6c 74  }} {.  ^The mult
12e50 69 2d 61 72 67 75 6d 65 6e 74 20 6d 61 78 28 29  i-argument max()
12e60 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
12e70 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 77  s the argument w
12e80 69 74 68 20 74 68 65 20 0a 20 20 6d 61 78 69 6d  ith the .  maxim
12e90 75 6d 20 76 61 6c 75 65 2c 20 6f 72 20 72 65 74  um value, or ret
12ea0 75 72 6e 20 4e 55 4c 4c 20 69 66 20 61 6e 79 20  urn NULL if any 
12eb0 61 72 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c  argument is NULL
12ec0 2e 20 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d  . .  ^The multi-
12ed0 61 72 67 75 6d 65 6e 74 20 6d 61 78 28 29 20 66  argument max() f
12ee0 75 6e 63 74 69 6f 6e 20 73 65 61 72 63 68 65 73  unction searches
12ef0 20 69 74 73 20 61 72 67 75 6d 65 6e 74 73 20 66   its arguments f
12f00 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
12f10 74 0a 20 20 66 6f 72 20 61 6e 20 61 72 67 75 6d  t.  for an argum
12f20 65 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65 73  ent that defines
12f30 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e   a collating fun
12f40 63 74 69 6f 6e 20 61 6e 64 20 75 73 65 73 20 74  ction and uses t
12f50 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 20 20  hat collating.  
12f60 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c  function for all
12f70 20 73 74 72 69 6e 67 20 63 6f 6d 70 61 72 69 73   string comparis
12f80 6f 6e 73 2e 20 20 5e 49 66 20 6e 6f 6e 65 20 6f  ons.  ^If none o
12f90 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20  f the arguments 
12fa0 74 6f 20 6d 61 78 28 29 0a 20 20 64 65 66 69 6e  to max().  defin
12fb0 65 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  e a collating fu
12fc0 6e 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  nction, then the
12fd0 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e   BINARY collatin
12fe0 67 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73  g function is us
12ff0 65 64 2e 0a 20 20 4e 6f 74 65 20 74 68 61 74 20  ed..  Note that 
13000 3c 62 3e 6d 61 78 28 29 3c 2f 62 3e 20 69 73 20  <b>max()</b> is 
13010 61 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f  a simple functio
13020 6e 20 77 68 65 6e 0a 20 20 69 74 20 68 61 73 20  n when.  it has 
13030 32 20 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d 65  2 or more argume
13040 6e 74 73 20 62 75 74 20 6f 70 65 72 61 74 65 73  nts but operates
13050 20 61 73 20 61 6e 0a 20 20 5b 6d 69 6e 41 67 67   as an.  [minAgg
13060 46 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65  Func | aggregate
13070 20 66 75 6e 63 74 69 6f 6e 5d 20 69 66 20 67 69   function] if gi
13080 76 65 6e 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c  ven only a singl
13090 65 20 61 72 67 75 6d 65 6e 74 2e 0a 7d 0a 0a 66  e argument..}..f
130a0 75 6e 63 64 65 66 20 7b 6d 69 6e 28 58 2c 59 2c  uncdef {min(X,Y,
130b0 2e 2e 2e 29 7d 20 7b 2a 6d 69 6e 43 6f 72 65 46  ...)} {*minCoreF
130c0 75 6e 63 20 2a 6d 69 6e 20 7b 6d 69 6e 28 29 20  unc *min {min() 
130d0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b  SQL function}} {
130e0 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72  .  ^The multi-ar
130f0 67 75 6d 65 6e 74 20 6d 69 6e 28 29 20 66 75 6e  gument min() fun
13100 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
13110 65 20 61 72 67 75 6d 65 6e 74 20 77 69 74 68 20  e argument with 
13120 74 68 65 0a 20 20 6d 69 6e 69 6d 75 6d 20 76 61  the.  minimum va
13130 6c 75 65 2e 0a 20 20 5e 54 68 65 20 6d 75 6c 74  lue..  ^The mult
13140 69 2d 61 72 67 75 6d 65 6e 74 20 6d 69 6e 28 29  i-argument min()
13150 20 66 75 6e 63 74 69 6f 6e 20 73 65 61 72 63 68   function search
13160 65 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74 73  es its arguments
13170 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
13180 67 68 74 0a 20 20 66 6f 72 20 61 6e 20 61 72 67  ght.  for an arg
13190 75 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69 6e  ument that defin
131a0 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66  es a collating f
131b0 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73 65 73  unction and uses
131c0 20 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67 0a   that collating.
131d0 20 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61    function for a
131e0 6c 6c 20 73 74 72 69 6e 67 20 63 6f 6d 70 61 72  ll string compar
131f0 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 6f 6e 65  isons.  ^If none
13200 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   of the argument
13210 73 20 74 6f 20 6d 69 6e 28 29 0a 20 20 64 65 66  s to min().  def
13220 69 6e 65 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20  ine a collating 
13230 66 75 6e 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74  function, then t
13240 68 65 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74  he BINARY collat
13250 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  ing function is 
13260 75 73 65 64 2e 0a 20 20 4e 6f 74 65 20 74 68 61  used..  Note tha
13270 74 20 3c 62 3e 6d 69 6e 28 29 3c 2f 62 3e 20 69  t <b>min()</b> i
13280 73 20 61 20 73 69 6d 70 6c 65 20 66 75 6e 63 74  s a simple funct
13290 69 6f 6e 20 77 68 65 6e 0a 20 20 69 74 20 68 61  ion when.  it ha
132a0 73 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 67 75  s 2 or more argu
132b0 6d 65 6e 74 73 20 62 75 74 20 6f 70 65 72 61 74  ments but operat
132c0 65 73 20 61 73 20 61 6e 20 0a 20 20 5b 6d 61 78  es as an .  [max
132d0 41 67 67 46 75 6e 63 20 7c 20 61 67 67 72 65 67  AggFunc | aggreg
132e0 61 74 65 20 66 75 6e 63 74 69 6f 6e 5d 20 69 66  ate function] if
132f0 20 67 69 76 65 6e 0a 20 20 6f 6e 6c 79 20 61 20   given.  only a 
13300 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2e  single argument.
13310 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6e 75 6c  .}..funcdef {nul
13320 6c 69 66 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  lif(X,Y)} {} {. 
13330 20 5e 54 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59   ^The nullif(X,Y
13340 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
13350 6e 73 20 69 74 73 20 66 69 72 73 74 20 61 72 67  ns its first arg
13360 75 6d 65 6e 74 20 69 66 20 74 68 65 20 61 72 67  ument if the arg
13370 75 6d 65 6e 74 73 20 61 72 65 0a 20 20 64 69 66  uments are.  dif
13380 66 65 72 65 6e 74 20 61 6e 64 20 4e 55 4c 4c 20  ferent and NULL 
13390 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73  if the arguments
133a0 20 61 72 65 20 74 68 65 20 73 61 6d 65 2e 20 20   are the same.  
133b0 5e 54 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29  ^The nullif(X,Y)
133c0 20 66 75 6e 63 74 69 6f 6e 0a 20 20 73 65 61 72   function.  sear
133d0 63 68 65 73 20 69 74 73 20 61 72 67 75 6d 65 6e  ches its argumen
133e0 74 73 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  ts from left to 
133f0 72 69 67 68 74 20 66 6f 72 20 61 6e 20 61 72 67  right for an arg
13400 75 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69 6e  ument that defin
13410 65 73 20 61 0a 20 20 63 6f 6c 6c 61 74 69 6e 67  es a.  collating
13420 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73   function and us
13430 65 73 20 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e  es that collatin
13440 67 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  g function for a
13450 6c 6c 20 73 74 72 69 6e 67 0a 20 20 63 6f 6d 70  ll string.  comp
13460 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 65  arisons.  ^If ne
13470 69 74 68 65 72 20 61 72 67 75 6d 65 6e 74 20 74  ither argument t
13480 6f 20 6e 75 6c 6c 69 66 28 29 20 64 65 66 69 6e  o nullif() defin
13490 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66  es a collating f
134a0 75 6e 63 74 69 6f 6e 0a 20 20 74 68 65 6e 20 74  unction.  then t
134b0 68 65 20 42 49 4e 41 52 59 20 69 73 20 75 73 65  he BINARY is use
134c0 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 71  d..}..funcdef {q
134d0 75 6f 74 65 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  uote(X)} {} {.  
134e0 5e 54 68 65 20 71 75 6f 74 65 28 58 29 20 66 75  ^The quote(X) fu
134f0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
13500 20 73 74 72 69 6e 67 20 77 68 69 63 68 20 69 73   string which is
13510 20 74 68 65 20 76 61 6c 75 65 20 6f 66 0a 20 20   the value of.  
13520 69 74 73 20 61 72 67 75 6d 65 6e 74 20 73 75 69  its argument sui
13530 74 61 62 6c 65 20 66 6f 72 20 69 6e 63 6c 75 73  table for inclus
13540 69 6f 6e 20 69 6e 74 6f 20 61 6e 6f 74 68 65 72  ion into another
13550 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a   SQL statement..
13560 20 20 5e 53 74 72 69 6e 67 73 20 61 72 65 20 73    ^Strings are s
13570 75 72 72 6f 75 6e 64 65 64 20 62 79 20 73 69 6e  urrounded by sin
13580 67 6c 65 2d 71 75 6f 74 65 73 20 77 69 74 68 20  gle-quotes with 
13590 65 73 63 61 70 65 73 20 6f 6e 20 69 6e 74 65 72  escapes on inter
135a0 69 6f 72 20 71 75 6f 74 65 73 0a 20 20 61 73 20  ior quotes.  as 
135b0 6e 65 65 64 65 64 2e 20 20 5e 42 4c 4f 42 73 20  needed.  ^BLOBs 
135c0 61 72 65 20 65 6e 63 6f 64 65 64 20 61 73 20 68  are encoded as h
135d0 65 78 61 64 65 63 69 6d 61 6c 20 6c 69 74 65 72  exadecimal liter
135e0 61 6c 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  als..}..funcdef 
135f0 7b 72 61 6e 64 6f 6d 28 29 7d 20 7b 7d 20 7b 0a  {random()} {} {.
13600 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d 28 29 20    ^The random() 
13610 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
13620 20 61 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d   a pseudo-random
13630 20 69 6e 74 65 67 65 72 0a 20 20 62 65 74 77 65   integer.  betwe
13640 65 6e 20 2d 39 32 32 33 33 37 32 30 33 36 38 35  en -922337203685
13650 34 37 37 35 38 30 38 20 61 6e 64 20 2b 39 32 32  4775808 and +922
13660 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37  3372036854775807
13670 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61  ..}..funcdef {ra
13680 6e 64 6f 6d 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20  ndomblob(N)} {} 
13690 7b 0a 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d 62  {.  ^The randomb
136a0 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20  lob(N) function 
136b0 72 65 74 75 72 6e 20 61 6e 20 4e 2d 62 79 74 65  return an N-byte
136c0 20 62 6c 6f 62 20 63 6f 6e 74 61 69 6e 69 6e 67   blob containing
136d0 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 0a 20   pseudo-random. 
136e0 20 62 79 74 65 73 2e 20 5e 49 66 20 4e 20 69 73   bytes. ^If N is
136f0 20 6c 65 73 73 20 74 68 61 6e 20 31 20 74 68 65   less than 1 the
13700 6e 20 61 20 31 2d 62 79 74 65 20 72 61 6e 64 6f  n a 1-byte rando
13710 6d 20 62 6c 6f 62 20 69 73 20 72 65 74 75 72 6e  m blob is return
13720 65 64 2e 0a 0a 20 20 3c 70 3e 48 69 6e 74 3a 20  ed...  <p>Hint: 
13730 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 63 61   applications ca
13740 6e 20 67 65 6e 65 72 61 74 65 20 67 6c 6f 62 61  n generate globa
13750 6c 6c 79 20 75 6e 69 71 75 65 20 69 64 65 6e 74  lly unique ident
13760 69 66 69 65 72 73 0a 20 20 75 73 69 6e 67 20 74  ifiers.  using t
13770 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 74 6f 67  his function tog
13780 65 74 68 65 72 20 77 69 74 68 20 5b 68 65 78 28  ether with [hex(
13790 29 5d 20 61 6e 64 2f 6f 72 0a 20 20 5b 6c 6f 77  )] and/or.  [low
137a0 65 72 28 29 5d 20 6c 69 6b 65 20 74 68 69 73 3a  er()] like this:
137b0 3c 2f 70 3e 0a 0a 20 20 3c 62 6c 6f 63 6b 71 75  </p>..  <blockqu
137c0 6f 74 65 3e 0a 20 20 68 65 78 28 72 61 6e 64 6f  ote>.  hex(rando
137d0 6d 62 6c 6f 62 28 31 36 29 29 3c 62 72 3e 3c 2f  mblob(16))<br></
137e0 62 72 3e 0a 20 20 6c 6f 77 65 72 28 68 65 78 28  br>.  lower(hex(
137f0 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29 29  randomblob(16)))
13800 0a 20 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  .  </blockquote>
13810 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 65 70  .}..funcdef {rep
13820 6c 61 63 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20  lace(X,Y,Z)} {} 
13830 7b 0a 20 20 5e 54 68 65 20 72 65 70 6c 61 63 65  {.  ^The replace
13840 28 58 2c 59 2c 5a 29 20 66 75 6e 63 74 69 6f 6e  (X,Y,Z) function
13850 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
13860 67 20 66 6f 72 6d 65 64 20 62 79 20 73 75 62 73  g formed by subs
13870 74 69 74 75 74 69 6e 67 0a 20 20 73 74 72 69 6e  tituting.  strin
13880 67 20 5a 20 66 6f 72 20 65 76 65 72 79 20 6f 63  g Z for every oc
13890 63 75 72 72 65 6e 63 65 20 6f 66 20 73 74 72 69  currence of stri
138a0 6e 67 20 59 20 69 6e 20 73 74 72 69 6e 67 20 58  ng Y in string X
138b0 2e 20 20 5e 54 68 65 20 5b 42 49 4e 41 52 59 5d  .  ^The [BINARY]
138c0 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  .  collating seq
138d0 75 65 6e 63 65 20 69 73 20 75 73 65 64 20 66 6f  uence is used fo
138e0 72 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20  r comparisons.  
138f0 5e 49 66 20 59 20 69 73 20 61 6e 20 65 6d 70 74  ^If Y is an empt
13900 79 0a 20 20 73 74 72 69 6e 67 20 74 68 65 6e 20  y.  string then 
13910 72 65 74 75 72 6e 20 58 20 75 6e 63 68 61 6e 67  return X unchang
13920 65 64 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 6f  ed.  ^If Z is no
13930 74 20 69 6e 69 74 69 61 6c 6c 79 0a 20 20 61 20  t initially.  a 
13940 73 74 72 69 6e 67 2c 20 69 74 20 69 73 20 63 61  string, it is ca
13950 73 74 20 74 6f 20 61 20 55 54 46 2d 38 20 73 74  st to a UTF-8 st
13960 72 69 6e 67 20 70 72 69 6f 72 20 74 6f 20 70 72  ring prior to pr
13970 6f 63 65 73 73 69 6e 67 2e 0a 7d 0a 0a 66 75 6e  ocessing..}..fun
13980 63 64 65 66 20 7b 72 6f 75 6e 64 28 58 29 20 72  cdef {round(X) r
13990 6f 75 6e 64 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  ound(X,Y)} {} {.
139a0 20 20 5e 54 68 65 20 72 6f 75 6e 64 28 58 2c 59    ^The round(X,Y
139b0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
139c0 6e 73 20 61 20 73 74 72 69 6e 67 20 72 65 70 72  ns a string repr
139d0 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
139e0 65 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74  e floating-point
139f0 0a 20 20 76 61 6c 75 65 20 58 20 72 6f 75 6e 64  .  value X round
13a00 65 64 20 74 6f 20 59 20 64 69 67 69 74 73 20 74  ed to Y digits t
13a10 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 74  o the right of t
13a20 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74  he decimal point
13a30 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72  ..  ^If the Y ar
13a40 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65  gument is omitte
13a50 64 2c 20 74 68 65 20 58 20 76 61 6c 75 65 20 69  d, the X value i
13a60 73 20 74 72 75 6e 63 61 74 65 64 20 74 6f 20 61  s truncated to a
13a70 6e 20 69 6e 74 65 67 65 72 2e 0a 7d 0a 0a 66 75  n integer..}..fu
13a80 6e 63 64 65 66 20 7b 72 74 72 69 6d 28 58 29 20  ncdef {rtrim(X) 
13a90 72 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b  rtrim(X,Y)} {} {
13aa0 0a 20 20 5e 54 68 65 20 72 74 72 69 6d 28 58 2c  .  ^The rtrim(X,
13ab0 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
13ac0 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72  rns a string for
13ad0 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20  med by removing 
13ae0 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68  any and all.  ch
13af0 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70  aracters that ap
13b00 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74  pear in Y from t
13b10 68 65 20 72 69 67 68 74 20 73 69 64 65 20 6f 66  he right side of
13b20 20 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20   X..  ^If the Y 
13b30 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74  argument is omit
13b40 74 65 64 2c 20 72 74 72 69 6d 28 58 29 20 72 65  ted, rtrim(X) re
13b50 6d 6f 76 65 73 20 73 70 61 63 65 73 20 66 72 6f  moves spaces fro
13b60 6d 20 74 68 65 20 72 69 67 68 74 0a 20 20 73 69  m the right.  si
13b70 64 65 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63  de of X..}..func
13b80 64 65 66 20 7b 73 6f 75 6e 64 65 78 28 58 29 7d  def {soundex(X)}
13b90 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 6f 75   {} {.  ^The sou
13ba0 6e 64 65 78 28 58 29 20 66 75 6e 63 74 69 6f 6e  ndex(X) function
13bb0 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
13bc0 67 20 74 68 61 74 20 69 73 20 74 68 65 20 73 6f  g that is the so
13bd0 75 6e 64 65 78 20 65 6e 63 6f 64 69 6e 67 20 0a  undex encoding .
13be0 20 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20    of the string 
13bf0 58 2e 0a 20 20 5e 54 68 65 20 73 74 72 69 6e 67  X..  ^The string
13c00 20 22 3f 30 30 30 22 20 69 73 20 72 65 74 75 72   "?000" is retur
13c10 6e 65 64 20 69 66 20 74 68 65 20 61 72 67 75 6d  ned if the argum
13c20 65 6e 74 20 69 73 20 4e 55 4c 4c 20 6f 72 20 63  ent is NULL or c
13c30 6f 6e 74 61 69 6e 73 0a 20 20 6e 6f 20 41 53 43  ontains.  no ASC
13c40 49 49 20 61 6c 70 68 61 62 65 74 69 63 20 63 68  II alphabetic ch
13c50 61 72 61 63 74 65 72 73 2e 0a 20 20 5e 28 54 68  aracters..  ^(Th
13c60 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f  is function is o
13c70 6d 69 74 74 65 64 20 66 72 6f 6d 20 53 51 4c 69  mitted from SQLi
13c80 74 65 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 20  te by default.. 
13c90 20 49 74 20 69 73 20 6f 6e 6c 79 20 61 76 61 69   It is only avai
13ca0 6c 61 62 6c 65 20 69 66 20 74 68 65 20 5b 53 51  lable if the [SQ
13cb0 4c 49 54 45 5f 53 4f 55 4e 44 45 58 5d 20 63 6f  LITE_SOUNDEX] co
13cc0 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
13cd0 6e 0a 20 20 69 73 20 75 73 65 64 20 77 68 65 6e  n.  is used when
13ce0 20 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74   SQLite is built
13cf0 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  .)^.}..funcdef {
13d00 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70  sqlite_compileop
13d10 74 69 6f 6e 5f 67 65 74 28 4e 29 7d 20 7b 7d 20  tion_get(N)} {} 
13d20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f  {.  ^The sqlite_
13d30 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65  compileoption_ge
13d40 74 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  t() SQL function
13d50 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72   is a wrapper ar
13d60 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c 69  ound the.  [sqli
13d70 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  te3_compileoptio
13d80 6e 5f 67 65 74 28 29 5d 20 43 2f 43 2b 2b 20 66  n_get()] C/C++ f
13d90 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54 68 69 73  unction..  ^This
13da0 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73   routine returns
13db0 20 74 68 65 20 4e 2d 74 68 20 63 6f 6d 70 69 6c   the N-th compil
13dc0 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73  e-time option us
13dd0 65 64 20 74 6f 20 62 75 69 6c 64 20 53 51 4c 69  ed to build SQLi
13de0 74 65 0a 20 20 6f 72 20 4e 55 4c 4c 20 69 66 20  te.  or NULL if 
13df0 4e 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67  N is out of rang
13e00 65 2e 20 20 53 65 65 20 61 6c 73 6f 20 74 68 65  e.  See also the
13e10 20 5b 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e   [compile_option
13e20 73 20 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 66 75  s pragma]..}..fu
13e30 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 63 6f  ncdef {sqlite_co
13e40 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64  mpileoption_used
13e50 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
13e60 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f   sqlite_compileo
13e70 70 74 69 6f 6e 5f 75 73 65 64 28 29 20 53 51 4c  ption_used() SQL
13e80 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77   function is a w
13e90 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68  rapper around th
13ea0 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d  e.  [sqlite3_com
13eb0 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28  pileoption_used(
13ec0 29 5d 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f  )] C/C++ functio
13ed0 6e 2e 0a 20 20 5e 57 68 65 6e 20 74 68 65 20 61  n..  ^When the a
13ee0 72 67 75 6d 65 6e 74 20 58 20 74 6f 20 73 71 6c  rgument X to sql
13ef0 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  ite_compileoptio
13f00 6e 5f 75 73 65 64 28 58 29 20 69 73 20 61 20 73  n_used(X) is a s
13f10 74 72 69 6e 67 20 77 68 69 63 68 0a 20 20 69 73  tring which.  is
13f20 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63   the name of a c
13f30 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
13f40 6f 6e 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65  on, this routine
13f50 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 28 31   returns true (1
13f60 29 20 6f 72 0a 20 20 66 61 6c 73 65 20 28 30 29  ) or.  false (0)
13f70 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
13f80 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61  ether or not tha
13f90 74 20 6f 70 74 69 6f 6e 20 77 61 73 20 75 73 65  t option was use
13fa0 64 20 64 75 72 69 6e 67 20 74 68 65 0a 20 20 62  d during the.  b
13fb0 75 69 6c 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  uild..}..funcdef
13fc0 20 7b 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f   {sqlite_source_
13fd0 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  id()} {} {.  ^Th
13fe0 65 20 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f  e sqlite_source_
13ff0 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  id() function re
14000 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 74  turns a string t
14010 68 61 74 20 69 64 65 6e 74 69 66 69 65 73 20 74  hat identifies t
14020 68 65 0a 20 20 73 70 65 63 69 66 69 63 20 76 65  he.  specific ve
14030 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 73 6f 75  rsion of the sou
14040 72 63 65 20 63 6f 64 65 20 74 68 61 74 20 77 61  rce code that wa
14050 73 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20  s used to build 
14060 74 68 65 20 53 51 4c 69 74 65 0a 20 20 6c 69 62  the SQLite.  lib
14070 72 61 72 79 2e 20 20 5e 54 68 65 20 73 74 72 69  rary.  ^The stri
14080 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ng returned by s
14090 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 28  qlite_source_id(
140a0 29 20 62 65 67 69 6e 73 20 77 69 74 68 0a 20 20  ) begins with.  
140b0 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  the date and tim
140c0 65 20 74 68 61 74 20 74 68 65 20 73 6f 75 72 63  e that the sourc
140d0 65 20 63 6f 64 65 20 77 61 73 20 63 68 65 63 6b  e code was check
140e0 65 64 20 69 6e 20 61 6e 64 20 69 73 20 66 6f 6c  ed in and is fol
140f0 6c 6f 77 73 20 62 79 0a 20 20 61 6e 20 53 48 41  lows by.  an SHA
14100 31 20 68 61 73 68 20 74 68 61 74 20 75 6e 69 71  1 hash that uniq
14110 75 65 6c 79 20 69 64 65 6e 74 69 66 69 65 73 20  uely identifies 
14120 74 68 65 20 73 6f 75 72 63 65 20 74 72 65 65 2e  the source tree.
14130 20 20 5e 54 68 69 73 20 66 75 6e 63 74 69 6f 6e    ^This function
14140 20 69 73 0a 20 20 61 6e 20 53 51 4c 20 77 72 61   is.  an SQL wra
14150 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20  pper around the 
14160 5b 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69  [sqlite3_sourcei
14170 64 28 29 5d 20 43 20 69 6e 74 65 72 66 61 63 65  d()] C interface
14180 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71  ..}..funcdef {sq
14190 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 7d 20  lite_version()} 
141a0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69  {} {.  ^The sqli
141b0 74 65 5f 76 65 72 73 69 6f 6e 28 29 20 66 75 6e  te_version() fun
141c0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
141d0 65 20 76 65 72 73 69 6f 6e 20 73 74 72 69 6e 67  e version string
141e0 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0a   for the SQLite.
141f0 20 20 6c 69 62 72 61 72 79 20 74 68 61 74 20 69    library that i
14200 73 20 72 75 6e 6e 69 6e 67 2e 20 20 5e 54 68 69  s running.  ^Thi
14210 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 6e  s function is an
14220 20 53 51 4c 0a 20 20 77 72 61 70 70 65 72 20 61   SQL.  wrapper a
14230 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74  round the [sqlit
14240 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 5d  e3_libversion()]
14250 20 43 2d 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a   C-interface..}.
14260 0a 66 75 6e 63 64 65 66 20 7b 73 75 62 73 74 72  .funcdef {substr
14270 28 58 2c 59 2c 5a 29 20 73 75 62 73 74 72 28 58  (X,Y,Z) substr(X
14280 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
14290 20 73 75 62 73 74 72 28 58 2c 59 2c 5a 29 20 66   substr(X,Y,Z) f
142a0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
142b0 61 20 73 75 62 73 74 72 69 6e 67 20 6f 66 20 69  a substring of i
142c0 6e 70 75 74 20 73 74 72 69 6e 67 20 58 20 74 68  nput string X th
142d0 61 74 20 62 65 67 69 6e 73 0a 20 20 77 69 74 68  at begins.  with
142e0 20 74 68 65 20 59 2d 74 68 20 63 68 61 72 61 63   the Y-th charac
142f0 74 65 72 20 61 6e 64 20 77 68 69 63 68 20 69 73  ter and which is
14300 20 5a 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f   Z characters lo
14310 6e 67 2e 0a 20 20 5e 49 66 20 5a 20 69 73 20 6f  ng..  ^If Z is o
14320 6d 69 74 74 65 64 20 74 68 65 6e 20 73 75 62 73  mitted then subs
14330 74 72 28 58 2c 59 29 20 72 65 74 75 72 6e 73 20  tr(X,Y) returns 
14340 61 6c 6c 20 63 68 61 72 61 63 74 65 72 73 20 74  all characters t
14350 68 72 6f 75 67 68 20 74 68 65 20 65 6e 64 0a 20  hrough the end. 
14360 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 58   of the string X
14370 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
14380 74 68 65 20 59 2d 74 68 2e 0a 20 20 5e 54 68 65  the Y-th..  ^The
14390 20 6c 65 66 74 2d 6d 6f 73 74 20 63 68 61 72 61   left-most chara
143a0 63 74 65 72 20 6f 66 20 58 20 69 73 20 6e 75 6d  cter of X is num
143b0 62 65 72 20 31 2e 20 20 5e 49 66 20 59 20 69 73  ber 1.  ^If Y is
143c0 20 6e 65 67 61 74 69 76 65 0a 20 20 74 68 65 6e   negative.  then
143d0 20 74 68 65 20 66 69 72 73 74 20 63 68 61 72 61   the first chara
143e0 63 74 65 72 20 6f 66 20 74 68 65 20 73 75 62 73  cter of the subs
143f0 74 72 69 6e 67 20 69 73 20 66 6f 75 6e 64 20 62  tring is found b
14400 79 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f 6d 20  y counting from 
14410 74 68 65 0a 20 20 72 69 67 68 74 20 72 61 74 68  the.  right rath
14420 65 72 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74  er than the left
14430 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 65 67 61  .  ^If Z is nega
14440 74 69 76 65 20 74 68 65 6e 0a 20 20 74 68 65 20  tive then.  the 
14450 61 62 73 28 5a 29 20 63 68 61 72 61 63 74 65 72  abs(Z) character
14460 73 20 70 72 65 63 65 64 69 6e 67 20 74 68 65 20  s preceding the 
14470 59 2d 74 68 20 63 68 61 72 61 63 74 65 72 20 61  Y-th character a
14480 72 65 20 72 65 74 75 72 6e 65 64 2e 0a 20 20 5e  re returned..  ^
14490 49 66 20 58 20 69 73 20 61 20 73 74 72 69 6e 67  If X is a string
144a0 20 74 68 65 6e 20 63 68 61 72 61 63 74 65 72 73   then characters
144b0 20 69 6e 64 69 63 65 73 20 72 65 66 65 72 20 74   indices refer t
144c0 6f 20 61 63 74 75 61 6c 20 55 54 46 2d 38 20 0a  o actual UTF-8 .
144d0 20 20 63 68 61 72 61 63 74 65 72 73 2e 20 20 5e    characters.  ^
144e0 49 66 20 58 20 69 73 20 61 20 42 4c 4f 42 20 74  If X is a BLOB t
144f0 68 65 6e 20 74 68 65 20 69 6e 64 69 63 65 73 20  hen the indices 
14500 72 65 66 65 72 20 74 6f 20 62 79 74 65 73 2e 0a  refer to bytes..
14510 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 6f 74 61  }..funcdef {tota
14520 6c 5f 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20  l_changes()} {} 
14530 7b 0a 20 20 5e 54 68 65 20 74 6f 74 61 6c 5f 63  {.  ^The total_c
14540 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f  hanges() functio
14550 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  n returns the nu
14560 6d 62 65 72 20 6f 66 20 72 6f 77 20 63 68 61 6e  mber of row chan
14570 67 65 73 0a 20 20 63 61 75 73 65 64 20 62 79 20  ges.  caused by 
14580 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f  INSERT, UPDATE o
14590 72 20 44 45 4c 45 54 45 0a 20 20 73 74 61 74 65  r DELETE.  state
145a0 6d 65 6e 74 73 20 73 69 6e 63 65 20 74 68 65 20  ments since the 
145b0 63 75 72 72 65 6e 74 20 64 61 74 61 62 61 73 65  current database
145c0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20   connection was 
145d0 6f 70 65 6e 65 64 2e 0a 20 20 5e 54 68 69 73 20  opened..  ^This 
145e0 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72  function is a wr
145f0 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65  apper around the
14600 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f   [sqlite3_total_
14610 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43  changes()].  C/C
14620 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a  ++ interface..}.
14630 0a 66 75 6e 63 64 65 66 20 7b 74 72 69 6d 28 58  .funcdef {trim(X
14640 29 20 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20  ) trim(X,Y)} {} 
14650 7b 0a 20 20 5e 54 68 65 20 74 72 69 6d 28 58 2c  {.  ^The trim(X,
14660 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
14670 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72  rns a string for
14680 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20  med by removing 
14690 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68  any and all.  ch
146a0 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70  aracters that ap
146b0 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 62  pear in Y from b
146c0 6f 74 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 20  oth ends of X.. 
146d0 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75 6d   ^If the Y argum
146e0 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20  ent is omitted, 
146f0 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20  trim(X) removes 
14700 73 70 61 63 65 73 20 66 72 6f 6d 20 62 6f 74 68  spaces from both
14710 20 65 6e 64 73 20 6f 66 20 58 2e 0a 7d 0a 0a 66   ends of X..}..f
14720 75 6e 63 64 65 66 20 7b 74 79 70 65 6f 66 28 58  uncdef {typeof(X
14730 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74  )} {} {.  ^The t
14740 79 70 65 6f 66 28 58 29 20 66 75 6e 63 74 69 6f  ypeof(X) functio
14750 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69  n returns a stri
14760 6e 67 20 74 68 61 74 20 69 6e 64 69 63 61 74 65  ng that indicate
14770 73 20 74 68 65 20 5b 64 61 74 61 74 79 70 65 5d  s the [datatype]
14780 20 6f 66 0a 20 20 74 68 65 20 65 78 70 72 65 73   of.  the expres
14790 73 69 6f 6e 20 58 3a 20 22 6e 75 6c 6c 22 2c 20  sion X: "null", 
147a0 22 69 6e 74 65 67 65 72 22 2c 20 22 72 65 61 6c  "integer", "real
147b0 22 2c 20 22 74 65 78 74 22 2c 20 6f 72 20 22 62  ", "text", or "b
147c0 6c 6f 62 22 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  lob"..}..funcdef
147d0 20 7b 75 70 70 65 72 28 58 29 7d 20 7b 7d 20 7b   {upper(X)} {} {
147e0 0a 20 20 5e 54 68 65 20 75 70 70 65 72 28 58 29  .  ^The upper(X)
147f0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
14800 73 20 61 20 63 6f 70 79 20 6f 66 20 69 6e 70 75  s a copy of inpu
14810 74 20 73 74 72 69 6e 67 20 58 20 69 6e 20 77 68  t string X in wh
14820 69 63 68 20 61 6c 6c 20 0a 20 20 6c 6f 77 65 72  ich all .  lower
14830 2d 63 61 73 65 20 41 53 43 49 49 20 63 68 61 72  -case ASCII char
14840 61 63 74 65 72 73 20 61 72 65 20 63 6f 6e 76 65  acters are conve
14850 72 74 65 64 20 74 6f 20 74 68 65 69 72 20 75 70  rted to their up
14860 70 65 72 2d 63 61 73 65 20 65 71 75 69 76 61 6c  per-case equival
14870 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ent..}..funcdef 
14880 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29 7d 20 7b 7d  {zeroblob(N)} {}
14890 20 7b 0a 20 20 5e 54 68 65 20 7a 65 72 6f 62 6c   {.  ^The zerobl
148a0 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72  ob(N) function r
148b0 65 74 75 72 6e 73 20 61 20 42 4c 4f 42 20 63 6f  eturns a BLOB co
148c0 6e 73 69 73 74 69 6e 67 20 6f 66 20 4e 20 62 79  nsisting of N by
148d0 74 65 73 20 6f 66 20 30 78 30 30 2e 0a 20 20 53  tes of 0x00..  S
148e0 51 4c 69 74 65 20 6d 61 6e 61 67 65 73 20 74 68  QLite manages th
148f0 65 73 65 20 7a 65 72 6f 62 6c 6f 62 73 20 76 65  ese zeroblobs ve
14900 72 79 20 65 66 66 69 63 69 65 6e 74 6c 79 2e 20  ry efficiently. 
14910 20 5a 65 72 6f 62 6c 6f 62 73 20 63 61 6e 20 62   Zeroblobs can b
14920 65 20 75 73 65 64 20 74 6f 0a 20 20 72 65 73 65  e used to.  rese
14930 72 76 65 20 73 70 61 63 65 20 66 6f 72 20 61 20  rve space for a 
14940 42 4c 4f 42 20 74 68 61 74 20 69 73 20 6c 61 74  BLOB that is lat
14950 65 72 20 77 72 69 74 74 65 6e 20 75 73 69 6e 67  er written using
14960 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f   .  [sqlite3_blo
14970 62 5f 6f 70 65 6e 28 29 20 7c 20 69 6e 63 72 65  b_open() | incre
14980 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 5d  mental BLOB I/O]
14990 2e 0a 20 20 5e 54 68 69 73 20 53 51 4c 20 66 75  ..  ^This SQL fu
149a0 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65 6d  nction is implem
149b0 65 6e 74 65 64 20 75 73 69 6e 67 20 74 68 65 20  ented using the 
149c0 5b 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  [sqlite3_result_
149d0 7a 65 72 6f 62 6c 6f 62 28 29 5d 0a 20 20 72 6f  zeroblob()].  ro
149e0 75 74 69 6e 65 20 66 72 6f 6d 20 74 68 65 20 43  utine from the C
149f0 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a  /C++ interface..
14a00 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c 65  }.</tcl>.</table
14a10 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
14a20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14a30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14a40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14a50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14a60 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
14a70 7b 44 61 74 65 20 41 6e 64 20 54 69 6d 65 20 46  {Date And Time F
14a80 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65 66 75  unctions} datefu
14a90 6e 63 20 7b 2a 64 61 74 65 66 75 6e 63 7d 0a 68  nc {*datefunc}.h
14aa0 64 5f 6b 65 79 77 6f 72 64 73 20 7b 64 61 74 65  d_keywords {date
14ab0 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d  () SQL function}
14ac0 20 7b 74 69 6d 65 28 29 20 53 51 4c 20 66 75 6e   {time() SQL fun
14ad0 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72  ction}.hd_keywor
14ae0 64 73 20 7b 64 61 74 65 74 69 6d 65 28 29 20 53  ds {datetime() S
14af0 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b 6a 75  QL function} {ju
14b00 6c 69 61 6e 64 61 79 28 29 20 53 51 4c 20 66 75  lianday() SQL fu
14b10 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f  nction}.hd_keywo
14b20 72 64 73 20 7b 73 74 72 66 74 69 6d 65 28 29 20  rds {strftime() 
14b30 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 3c 2f  SQL function}.</
14b40 74 63 6c 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65  tcl>..<p>.SQLite
14b50 20 73 75 70 70 6f 72 74 73 20 66 69 76 65 20 64   supports five d
14b60 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e  ate and time fun
14b70 63 74 69 6f 6e 73 20 61 73 20 66 6f 6c 6c 6f 77  ctions as follow
14b80 73 3a 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 6f 6c  s:.</p>..<p>.<ol
14b90 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65  >.<li> ^(<b>date
14ba0 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69  (</b><i>timestri
14bb0 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f  ng, modifier, mo
14bc0 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c  difier, ...</i><
14bd0 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a  b>)</b>)^ </li>.
14be0 3c 6c 69 3e 20 5e 28 3c 62 3e 74 69 6d 65 28 3c  <li> ^(<b>time(<
14bf0 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67  /b><i>timestring
14c00 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69  , modifier, modi
14c10 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e  fier, ...</i><b>
14c20 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c  )</b>)^ </li>.<l
14c30 69 3e 20 5e 28 3c 62 3e 64 61 74 65 74 69 6d 65  i> ^(<b>datetime
14c40 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69  (</b><i>timestri
14c50 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f  ng, modifier, mo
14c60 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c  difier, ...</i><
14c70 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a  b>)</b>)^ </li>.
14c80 3c 6c 69 3e 20 5e 28 3c 62 3e 6a 75 6c 69 61 6e  <li> ^(<b>julian
14c90 64 61 79 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73  day(</b><i>times
14ca0 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c  tring, modifier,
14cb0 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f   modifier, ...</
14cc0 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c  i><b>)</b>)^ </l
14cd0 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 73 74 72  i>.<li> ^(<b>str
14ce0 66 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 66 6f 72  ftime(</b><i>for
14cf0 6d 61 74 2c 20 74 69 6d 65 73 74 72 69 6e 67 2c  mat, timestring,
14d00 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66   modifier, modif
14d10 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29  ier, ...</i><b>)
14d20 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 2f 6f  </b>)^ </li>.</o
14d30 6c 3e 0a 0a 3c 70 3e 0a 5e 41 6c 6c 20 66 69 76  l>..<p>.^All fiv
14d40 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  e date and time 
14d50 66 75 6e 63 74 69 6f 6e 73 20 74 61 6b 65 20 61  functions take a
14d60 20 74 69 6d 65 20 73 74 72 69 6e 67 20 61 73 20   time string as 
14d70 61 6e 20 61 72 67 75 6d 65 6e 74 2e 20 0a 5e 54  an argument. .^T
14d80 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20 69  he time string i
14d90 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65  s followed by ze
14da0 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64 69 66  ro or more modif
14db0 69 65 72 73 2e 20 0a 5e 54 68 65 20 73 74 72 66  iers. .^The strf
14dc0 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  time() function 
14dd0 61 6c 73 6f 20 74 61 6b 65 73 20 61 20 66 6f 72  also takes a for
14de0 6d 61 74 20 73 74 72 69 6e 67 20 61 73 20 69 74  mat string as it
14df0 73 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  s first argument
14e00 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20  ..</p>..<p>.The 
14e10 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75  date and time fu
14e20 6e 63 74 69 6f 6e 73 20 75 73 65 20 61 20 73 75  nctions use a su
14e30 62 73 65 74 20 6f 66 0a 5b 68 74 74 70 3a 2f 2f  bset of.[http://
14e40 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67  en.wikipedia.org
14e50 2f 77 69 6b 69 2f 49 53 4f 5f 38 36 30 31 20 7c  /wiki/ISO_8601 |
14e60 20 49 53 30 2d 38 36 30 31 5d 20 64 61 74 65 20   IS0-8601] date 
14e70 61 6e 64 20 74 69 6d 65 0a 66 6f 72 6d 61 74 73  and time.formats
14e80 2e 0a 5e 54 68 65 20 64 61 74 65 28 29 20 66 75  ..^The date() fu
14e90 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
14ea0 68 65 20 64 61 74 65 20 69 6e 20 74 68 69 73 20  he date in this 
14eb0 66 6f 72 6d 61 74 3a 20 59 59 59 59 2d 4d 4d 2d  format: YYYY-MM-
14ec0 44 44 2e 20 0a 5e 54 68 65 20 74 69 6d 65 28 29  DD. .^The time()
14ed0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
14ee0 73 20 74 68 65 20 74 69 6d 65 20 61 73 20 48 48  s the time as HH
14ef0 3a 4d 4d 3a 53 53 2e 20 0a 5e 54 68 65 20 64 61  :MM:SS. .^The da
14f00 74 65 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f  tetime() functio
14f10 6e 20 72 65 74 75 72 6e 73 20 22 59 59 59 59 2d  n returns "YYYY-
14f20 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e  MM-DD HH:MM:SS".
14f30 20 0a 5e 28 54 68 65 20 6a 75 6c 69 61 6e 64 61   .^(The julianda
14f40 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  y() function ret
14f50 75 72 6e 73 20 74 68 65 20 0a 5b 68 74 74 70 3a  urns the .[http:
14f60 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
14f70 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64  rg/wiki/Julian_d
14f80 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61 79 5d  ay | Julian day]
14f90 20 2d 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66   - the.number of
14fa0 20 64 61 79 73 20 73 69 6e 63 65 20 6e 6f 6f 6e   days since noon
14fb0 20 69 6e 20 47 72 65 65 6e 77 69 63 68 20 6f 6e   in Greenwich on
14fc0 20 4e 6f 76 65 6d 62 65 72 20 32 34 2c 20 34 37   November 24, 47
14fd0 31 34 20 42 2e 43 2e 20 0a 28 5b 68 74 74 70 3a  14 B.C. .([http:
14fe0 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
14ff0 72 67 2f 77 69 6b 69 2f 50 72 6f 6c 65 70 74 69  rg/wiki/Prolepti
15000 63 5f 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65  c_Gregorian_cale
15010 6e 64 61 72 20 7c 20 50 72 6f 6c 65 70 74 69 63  ndar | Proleptic
15020 20 47 72 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e   Gregorian calen
15030 64 61 72 5d 29 2e 29 5e 0a 5e 54 68 65 20 73 74  dar]).)^.^The st
15040 72 66 74 69 6d 65 28 29 20 72 6f 75 74 69 6e 65  rftime() routine
15050 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 61 74   returns the dat
15060 65 20 66 6f 72 6d 61 74 74 65 64 20 61 63 63 6f  e formatted acco
15070 72 64 69 6e 67 20 74 6f 20 0a 74 68 65 20 66 6f  rding to .the fo
15080 72 6d 61 74 20 73 74 72 69 6e 67 20 73 70 65 63  rmat string spec
15090 69 66 69 65 64 20 61 73 20 74 68 65 20 66 69 72  ified as the fir
150a0 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 5e 54 68  st argument..^Th
150b0 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  e format string 
150c0 73 75 70 70 6f 72 74 73 20 74 68 65 20 6d 6f 73  supports the mos
150d0 74 20 63 6f 6d 6d 6f 6e 20 73 75 62 73 74 69 74  t common substit
150e0 75 74 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20  utions found in 
150f0 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 6f 70 65  the .[http://ope
15100 6e 67 72 6f 75 70 2e 6f 72 67 2f 6f 6e 6c 69 6e  ngroup.org/onlin
15110 65 70 75 62 73 2f 30 30 37 39 30 38 37 39 39 2f  epubs/007908799/
15120 78 73 68 2f 73 74 72 66 74 69 6d 65 2e 68 74 6d  xsh/strftime.htm
15130 6c 20 7c 20 73 74 72 66 74 69 6d 65 28 29 20 66  l | strftime() f
15140 75 6e 63 74 69 6f 6e 5d 0a 66 72 6f 6d 20 74 68  unction].from th
15150 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62  e standard C lib
15160 72 61 72 79 20 70 6c 75 73 20 74 77 6f 20 6e 65  rary plus two ne
15170 77 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73 2c  w substitutions,
15180 20 25 66 20 61 6e 64 20 25 4a 2e 0a 5e 28 54 68   %f and %J..^(Th
15190 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 61  e following is a
151a0 20 63 6f 6d 70 6c 65 74 65 20 6c 69 73 74 20 6f   complete list o
151b0 66 20 76 61 6c 69 64 20 73 74 72 66 74 69 6d 65  f valid strftime
151c0 28 29 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73  () substitutions
151d0 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  :.</p>..<blockqu
151e0 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64  ote>.<table bord
151f0 65 72 3d 22 30 22 20 63 65 6c 6c 70 61 64 64 69  er="0" cellpaddi
15200 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70 61 63 69  ng="0" cellspaci
15210 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e  ng="0">.<tr><td>
15220 3c 74 64 20 77 69 64 74 68 3d 22 31 30 22 3e 3c  <td width="10"><
15230 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 3c 74  td></tr>..<tr><t
15240 64 3e 20 25 64 20 3c 74 64 3e 3c 74 64 3e 20 64  d> %d <td><td> d
15250 61 79 20 6f 66 20 6d 6f 6e 74 68 3a 20 30 30 0a  ay of month: 00.
15260 3c 74 72 3e 3c 74 64 3e 20 25 66 20 3c 74 64 3e  <tr><td> %f <td>
15270 3c 74 64 3e 20 66 72 61 63 74 69 6f 6e 61 6c 20  <td> fractional 
15280 73 65 63 6f 6e 64 73 3a 20 53 53 2e 53 53 53 0a  seconds: SS.SSS.
15290 3c 74 72 3e 3c 74 64 3e 20 25 48 20 3c 74 64 3e  <tr><td> %H <td>
152a0 3c 74 64 3e 20 68 6f 75 72 3a 20 30 30 2d 32 34  <td> hour: 00-24
152b0 20 0a 3c 74 72 3e 3c 74 64 3e 20 25 6a 20 3c 74   .<tr><td> %j <t
152c0 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 79 65  d><td> day of ye
152d0 61 72 3a 20 30 30 31 2d 33 36 36 0a 3c 74 72 3e  ar: 001-366.<tr>
152e0 3c 74 64 3e 20 25 4a 20 3c 74 64 3e 3c 74 64 3e  <td> %J <td><td>
152f0 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62   Julian day numb
15300 65 72 0a 3c 74 72 3e 3c 74 64 3e 20 25 6d 20 3c  er.<tr><td> %m <
15310 74 64 3e 3c 74 64 3e 20 6d 6f 6e 74 68 3a 20 30  td><td> month: 0
15320 31 2d 31 32 0a 3c 74 72 3e 3c 74 64 3e 20 25 4d  1-12.<tr><td> %M
15330 20 3c 74 64 3e 3c 74 64 3e 20 6d 69 6e 75 74 65   <td><td> minute
15340 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e  : 00-59.<tr><td>
15350 20 25 73 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63   %s <td><td> sec
15360 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30 2d  onds since 1970-
15370 30 31 2d 30 31 0a 3c 74 72 3e 3c 74 64 3e 20 25  01-01.<tr><td> %
15380 53 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e  S <td><td> secon
15390 64 73 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74  ds: 00-59.<tr><t
153a0 64 3e 20 25 77 20 3c 74 64 3e 3c 74 64 3e 20 64  d> %w <td><td> d
153b0 61 79 20 6f 66 20 77 65 65 6b 20 30 2d 36 20 77  ay of week 0-6 w
153c0 69 74 68 20 73 75 6e 64 61 79 3d 3d 30 0a 3c 74  ith sunday==0.<t
153d0 72 3e 3c 74 64 3e 20 25 57 20 3c 74 64 3e 3c 74  r><td> %W <td><t
153e0 64 3e 20 77 65 65 6b 20 6f 66 20 79 65 61 72 3a  d> week of year:
153f0 20 30 30 2d 35 33 0a 3c 74 72 3e 3c 74 64 3e 20   00-53.<tr><td> 
15400 25 59 20 3c 74 64 3e 3c 74 64 3e 20 79 65 61 72  %Y <td><td> year
15410 3a 20 30 30 30 30 2d 39 39 39 39 0a 3c 74 72 3e  : 0000-9999.<tr>
15420 3c 74 64 3e 20 25 25 20 3c 74 64 3e 3c 74 64 3e  <td> %% <td><td>
15430 20 25 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c   %.</table>.</bl
15440 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e  ockquote>)^..<p>
15450 0a 5e 28 4e 6f 74 69 63 65 20 74 68 61 74 20 61  .^(Notice that a
15460 6c 6c 20 6f 74 68 65 72 20 64 61 74 65 20 61 6e  ll other date an
15470 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  d time functions
15480 20 63 61 6e 20 62 65 20 65 78 70 72 65 73 73 65   can be expresse
15490 64 0a 69 6e 20 74 65 72 6d 73 20 6f 66 20 73 74  d.in terms of st
154a0 72 66 74 69 6d 65 28 29 3a 0a 3c 2f 70 3e 0a 0a  rftime():.</p>..
154b0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61  <blockquote>.<ta
154c0 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20 63  ble border="0" c
154d0 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22 20 63  ellpadding="0" c
154e0 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a  ellspacing="0">.
154f0 3c 74 72 3e 3c 74 64 3e 3c 62 3e 46 75 6e 63 74  <tr><td><b>Funct
15500 69 6f 6e 3c 2f 62 3e 3c 74 64 20 77 69 64 74 68  ion</b><td width
15510 3d 22 33 30 22 3e 3c 74 64 3e 3c 62 3e 45 71 75  ="30"><td><b>Equ
15520 69 76 61 6c 65 6e 74 20 73 74 72 66 74 69 6d 65  ivalent strftime
15530 28 29 3c 2f 62 3e 0a 3c 74 72 3e 3c 74 64 3e 20  ()</b>.<tr><td> 
15540 20 20 64 61 74 65 28 2e 2e 2e 29 20 20 20 20 20    date(...)     
15550 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74   <td><td>  strft
15560 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 27 2c 20  ime('%Y-%m-%d', 
15570 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20  ...).<tr><td>   
15580 74 69 6d 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c  time(...)      <
15590 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d  td><td>  strftim
155a0 65 28 27 25 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e  e('%H:%M:%S', ..
155b0 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61  .).<tr><td>   da
155c0 74 65 74 69 6d 65 28 2e 2e 2e 29 20 20 3c 74 64  tetime(...)  <td
155d0 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28  ><td>  strftime(
155e0 27 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a  '%Y-%m-%d %H:%M:
155f0 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74  %S', ...).<tr><t
15600 64 3e 20 20 20 6a 75 6c 69 61 6e 64 61 79 28 2e  d>   julianday(.
15610 2e 2e 29 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74  ..) <td><td>  st
15620 72 66 74 69 6d 65 28 27 25 4a 27 2c 20 2e 2e 2e  rftime('%J', ...
15630 29 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f  ).</table>.</blo
15640 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a  ckquote>)^..<p>.
15650 54 68 65 20 6f 6e 6c 79 20 72 65 61 73 6f 6e 73  The only reasons
15660 20 66 6f 72 20 70 72 6f 76 69 64 69 6e 67 20 66   for providing f
15670 75 6e 63 74 69 6f 6e 73 20 6f 74 68 65 72 20 74  unctions other t
15680 68 61 6e 20 73 74 72 66 74 69 6d 65 28 29 20 69  han strftime() i
15690 73 0a 66 6f 72 20 63 6f 6e 76 65 6e 69 65 6e 63  s.for convenienc
156a0 65 20 61 6e 64 20 66 6f 72 20 65 66 66 69 63 69  e and for effici
156b0 65 6e 63 79 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e  ency..</p>..<h3>
156c0 54 69 6d 65 20 53 74 72 69 6e 67 73 3c 2f 68 33  Time Strings</h3
156d0 3e 0a 0a 3c 70 3e 5e 28 41 20 74 69 6d 65 20 73  >..<p>^(A time s
156e0 74 72 69 6e 67 20 63 61 6e 20 62 65 20 69 6e 20  tring can be in 
156f0 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  any of the follo
15700 77 69 6e 67 20 66 6f 72 6d 61 74 73 3a 3c 2f 70  wing formats:</p
15710 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c 69 3e  >..<ol>.<li> <i>
15720 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 0a 3c  YYYY-MM-DD</i>.<
15730 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44  li> <i>YYYY-MM-D
15740 44 20 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e  D HH:MM</i>.<li>
15750 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48   <i>YYYY-MM-DD H
15760 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e  H:MM:SS</i>.<li>
15770 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48   <i>YYYY-MM-DD H
15780 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a  H:MM:SS.SSS</i>.
15790 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
157a0 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69  DD</i><b>T</b><i
157b0 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20  >HH:MM</i>.<li> 
157c0 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69  <i>YYYY-MM-DD</i
157d0 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d  ><b>T</b><i>HH:M
157e0 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  M:SS</i>.<li> <i
157f0 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c  >YYYY-MM-DD</i><
15800 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a  b>T</b><i>HH:MM:
15810 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  SS.SSS</i>.<li> 
15820 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69  <i>HH:MM</i>.<li
15830 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69  > <i>HH:MM:SS</i
15840 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a  >.<li> <i>HH:MM:
15850 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  SS.SSS</i>.<li> 
15860 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69 3e 20  <b>now</b>.<li> 
15870 3c 69 3e 44 44 44 44 44 44 44 44 44 44 3c 2f 69  <i>DDDDDDDDDD</i
15880 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e  >.</ol>)^..<p>.^
15890 49 6e 20 66 6f 72 6d 61 74 73 20 35 20 74 68 72  In formats 5 thr
158a0 6f 75 67 68 20 37 2c 20 74 68 65 20 22 54 22 20  ough 7, the "T" 
158b0 69 73 20 61 20 6c 69 74 65 72 61 6c 20 63 68 61  is a literal cha
158c0 72 61 63 74 65 72 20 73 65 70 61 72 61 74 69 6e  racter separatin
158d0 67 20 0a 74 68 65 20 64 61 74 65 20 61 6e 64 20  g .the date and 
158e0 74 68 65 20 74 69 6d 65 2c 20 61 73 20 72 65 71  the time, as req
158f0 75 69 72 65 64 20 62 79 20 0a 5b 68 74 74 70 3a  uired by .[http:
15900 2f 2f 77 77 77 2e 77 33 63 2e 6f 72 67 2f 54 52  //www.w3c.org/TR
15910 2f 4e 4f 54 45 2d 64 61 74 65 74 69 6d 65 20 7c  /NOTE-datetime |
15920 20 49 53 4f 2d 38 36 30 31 5d 2e 20 0a 5e 46 6f   ISO-8601]. .^Fo
15930 72 6d 61 74 73 20 38 20 74 68 72 6f 75 67 68 20  rmats 8 through 
15940 31 30 20 74 68 61 74 20 73 70 65 63 69 66 79 20  10 that specify 
15950 6f 6e 6c 79 20 61 20 74 69 6d 65 20 61 73 73 75  only a time assu
15960 6d 65 20 61 20 64 61 74 65 20 6f 66 20 0a 32 30  me a date of .20
15970 30 30 2d 30 31 2d 30 31 2e 20 46 6f 72 6d 61 74  00-01-01. Format
15980 20 31 31 2c 20 74 68 65 20 73 74 72 69 6e 67 20   11, the string 
15990 27 6e 6f 77 27 2c 20 69 73 20 63 6f 6e 76 65 72  'now', is conver
159a0 74 65 64 20 69 6e 74 6f 20 74 68 65 20 0a 63 75  ted into the .cu
159b0 72 72 65 6e 74 20 64 61 74 65 20 61 6e 64 20 74  rrent date and t
159c0 69 6d 65 20 61 73 20 6f 62 74 61 69 6e 65 64 20  ime as obtained 
159d0 66 72 6f 6d 20 74 68 65 20 78 43 75 72 72 65 6e  from the xCurren
159e0 74 54 69 6d 65 20 6d 65 74 68 6f 64 0a 6f 66 20  tTime method.of 
159f0 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 76 66 73  the [sqlite3_vfs
15a00 5d 20 6f 62 6a 65 63 74 20 69 6e 20 75 73 65 2e  ] object in use.
15a10 0a 5e 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b  .^[http://en.wik
15a20 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f  ipedia.org/wiki/
15a30 43 6f 6f 72 64 69 6e 61 74 65 64 5f 55 6e 69 76  Coordinated_Univ
15a40 65 72 73 61 6c 5f 54 69 6d 65 20 7c 20 55 6e 69  ersal_Time | Uni
15a50 76 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74  versal Coordinat
15a60 65 64 20 54 69 6d 65 20 28 55 54 43 29 5d 20 69  ed Time (UTC)] i
15a70 73 20 75 73 65 64 2e 20 0a 5e 46 6f 72 6d 61 74  s used. .^Format
15a80 20 31 32 20 69 73 20 74 68 65 20 0a 5b 68 74 74   12 is the .[htt
15a90 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
15aa0 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e  .org/wiki/Julian
15ab0 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61  _day | Julian da
15ac0 79 20 6e 75 6d 62 65 72 5d 0a 65 78 70 72 65 73  y number].expres
15ad0 73 65 64 20 61 73 20 61 20 66 6c 6f 61 74 69 6e  sed as a floatin
15ae0 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 3c  g point value..<
15af0 2f 70 3e 0a 0a 3c 68 33 3e 4d 6f 64 69 66 69 65  /p>..<h3>Modifie
15b00 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65  rs</h3>..<p>^The
15b10 20 74 69 6d 65 20 73 74 72 69 6e 67 20 63 61 6e   time string can
15b20 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   be followed by 
15b30 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64  zero or more mod
15b40 69 66 69 65 72 73 20 74 68 61 74 20 0a 61 6c 74  ifiers that .alt
15b50 65 72 20 74 68 65 20 64 61 74 65 20 61 6e 64 20  er the date and 
15b60 74 69 6d 65 20 73 74 72 69 6e 67 2e 20 5e 45 61  time string. ^Ea
15b70 63 68 20 6d 6f 64 69 66 69 65 72 0a 69 73 20 61  ch modifier.is a
15b80 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 20   transformation 
15b90 74 68 61 74 20 69 73 20 61 70 70 6c 69 65 64 20  that is applied 
15ba0 74 6f 20 74 68 65 20 74 69 6d 65 20 76 61 6c 75  to the time valu
15bb0 65 20 74 6f 20 69 74 73 20 6c 65 66 74 2e 0a 5e  e to its left..^
15bc0 4d 6f 64 69 66 69 65 72 73 20 61 72 65 20 61 70  Modifiers are ap
15bd0 70 6c 69 65 64 20 66 72 6f 6d 20 6c 65 66 74 20  plied from left 
15be0 74 6f 20 72 69 67 68 74 3b 20 6f 72 64 65 72 20  to right; order 
15bf0 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 0a 5e 28  is important..^(
15c00 54 68 65 20 61 76 61 69 6c 61 62 6c 65 20 6d 6f  The available mo
15c10 64 69 66 69 65 72 73 20 61 72 65 20 61 73 20 66  difiers are as f
15c20 6f 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 6f 6c  ollows.</p>..<ol
15c30 3e 0a 3c 6c 69 3e 20 4e 4e 4e 20 64 61 79 73 0a  >.<li> NNN days.
15c40 3c 6c 69 3e 20 4e 4e 4e 20 68 6f 75 72 73 0a 3c  <li> NNN hours.<
15c50 6c 69 3e 20 4e 4e 4e 20 6d 69 6e 75 74 65 73 0a  li> NNN minutes.
15c60 3c 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e 4e 20 73 65  <li> NNN.NNNN se
15c70 63 6f 6e 64 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d  conds.<li> NNN m
15c80 6f 6e 74 68 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 79  onths.<li> NNN y
15c90 65 61 72 73 0a 3c 6c 69 3e 20 73 74 61 72 74 20  ears.<li> start 
15ca0 6f 66 20 6d 6f 6e 74 68 0a 3c 6c 69 3e 20 73 74  of month.<li> st
15cb0 61 72 74 20 6f 66 20 79 65 61 72 0a 3c 6c 69 3e  art of year.<li>
15cc0 20 73 74 61 72 74 20 6f 66 20 64 61 79 0a 3c 6c   start of day.<l
15cd0 69 3e 20 77 65 65 6b 64 61 79 20 4e 0a 3c 6c 69  i> weekday N.<li
15ce0 3e 20 75 6e 69 78 65 70 6f 63 68 0a 3c 6c 69 3e  > unixepoch.<li>
15cf0 20 6c 6f 63 61 6c 74 69 6d 65 0a 3c 6c 69 3e 20   localtime.<li> 
15d00 75 74 63 20 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70  utc .</ol>)^..<p
15d10 3e 5e 54 68 65 20 66 69 72 73 74 20 73 69 78 20  >^The first six 
15d20 6d 6f 64 69 66 69 65 72 73 20 28 31 20 74 68 72  modifiers (1 thr
15d30 6f 75 67 68 20 36 29 20 0a 73 69 6d 70 6c 79 20  ough 6) .simply 
15d40 61 64 64 20 74 68 65 20 73 70 65 63 69 66 69 65  add the specifie
15d50 64 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65  d amount of time
15d60 20 74 6f 20 74 68 65 20 64 61 74 65 20 61 6e 64   to the date and
15d70 20 74 69 6d 65 20 0a 73 70 65 63 69 66 69 65 64   time .specified
15d80 20 62 79 20 74 68 65 20 70 72 65 63 65 64 69 6e   by the precedin
15d90 67 20 74 69 6d 65 73 74 72 69 6e 67 20 61 6e 64  g timestring and
15da0 20 6d 6f 64 69 66 69 65 72 73 2e 0a 5e 4e 6f 74   modifiers..^Not
15db0 65 20 74 68 61 74 20 22 26 70 6c 75 73 6d 6e 3b  e that "&plusmn;
15dc0 4e 4e 4e 20 6d 6f 6e 74 68 73 22 20 77 6f 72 6b  NNN months" work
15dd0 73 20 62 79 20 72 65 6e 64 65 72 69 6e 67 20 74  s by rendering t
15de0 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 65  he original date
15df0 20 69 6e 74 6f 0a 74 68 65 20 59 59 59 59 2d 4d   into.the YYYY-M
15e00 4d 2d 44 44 20 66 6f 72 6d 61 74 2c 20 61 64 64  M-DD format, add
15e10 69 6e 67 20 74 68 65 20 26 70 6c 75 73 6d 6e 3b  ing the &plusmn;
15e20 4e 4e 4e 20 74 6f 20 74 68 65 20 4d 4d 20 6d 6f  NNN to the MM mo
15e30 6e 74 68 20 76 61 6c 75 65 2c 20 74 68 65 6e 0a  nth value, then.
15e40 6e 6f 72 6d 61 6c 69 7a 69 6e 67 20 74 68 65 20  normalizing the 
15e50 72 65 73 75 6c 74 2e 20 20 5e 54 68 75 73 2c 20  result.  ^Thus, 
15e60 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  for example, the
15e70 20 64 61 74 61 20 32 30 30 31 2d 30 33 2d 33 31   data 2001-03-31
15e80 20 6d 6f 64 69 66 69 65 64 0a 62 79 20 27 2b 31   modified.by '+1
15e90 20 6d 6f 6e 74 68 27 20 69 6e 69 74 69 61 6c 6c   month' initiall
15ea0 79 20 79 69 65 6c 64 73 20 32 30 30 31 2d 30 34  y yields 2001-04
15eb0 2d 33 31 2c 20 62 75 74 20 41 70 72 69 6c 20 6f  -31, but April o
15ec0 6e 6c 79 20 68 61 73 20 33 30 20 64 61 79 73 0a  nly has 30 days.
15ed0 73 6f 20 74 68 65 20 64 61 74 65 20 69 73 20 6e  so the date is n
15ee0 6f 72 6d 61 6c 69 7a 65 64 20 74 6f 20 32 30 30  ormalized to 200
15ef0 31 2d 30 35 2d 30 31 2e 20 20 5e 41 20 73 69 6d  1-05-01.  ^A sim
15f00 69 6c 61 72 20 65 66 66 65 63 74 20 6f 63 63 75  ilar effect occu
15f10 72 73 20 77 68 65 6e 0a 74 68 65 20 6f 72 69 67  rs when.the orig
15f20 69 6e 61 6c 20 64 61 74 65 20 69 73 20 46 65 62  inal date is Feb
15f30 72 75 61 72 79 20 32 39 20 6f 66 20 61 20 6c 65  ruary 29 of a le
15f40 61 70 79 65 61 72 20 61 6e 64 20 74 68 65 20 6d  apyear and the m
15f50 6f 64 69 66 69 65 72 20 69 73 0a 26 70 6c 75 73  odifier is.&plus
15f60 6d 6e 3b 4e 20 79 65 61 72 73 20 77 68 65 72 65  mn;N years where
15f70 20 4e 20 69 73 20 6e 6f 74 20 61 20 6d 75 6c 74   N is not a mult
15f80 69 70 6c 65 20 6f 66 20 66 6f 75 72 2e 3c 2f 70  iple of four.</p
15f90 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 73 74 61 72  >..<p>^The "star
15fa0 74 20 6f 66 22 20 6d 6f 64 69 66 69 65 72 73 20  t of" modifiers 
15fb0 28 37 20 74 68 72 6f 75 67 68 20 39 29 20 73 68  (7 through 9) sh
15fc0 69 66 74 20 74 68 65 20 64 61 74 65 20 62 61 63  ift the date bac
15fd0 6b 77 61 72 64 73 20 0a 74 6f 20 74 68 65 20 62  kwards .to the b
15fe0 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
15ff0 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2c 20 79  current month, y
16000 65 61 72 20 6f 72 20 64 61 79 2e 3c 2f 70 3e 0a  ear or day.</p>.
16010 0a 3c 70 3e 5e 54 68 65 20 22 77 65 65 6b 64 61  .<p>^The "weekda
16020 79 22 20 6d 6f 64 69 66 69 65 72 20 61 64 76 61  y" modifier adva
16030 6e 63 65 73 20 74 68 65 20 64 61 74 65 20 66 6f  nces the date fo
16040 72 77 61 72 64 20 74 6f 20 74 68 65 20 6e 65 78  rward to the nex
16050 74 20 64 61 74 65 20 0a 77 68 65 72 65 20 74 68  t date .where th
16060 65 20 77 65 65 6b 64 61 79 20 6e 75 6d 62 65 72  e weekday number
16070 20 69 73 20 4e 2e 20 53 75 6e 64 61 79 20 69 73   is N. Sunday is
16080 20 30 2c 20 4d 6f 6e 64 61 79 20 69 73 20 31 2c   0, Monday is 1,
16090 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 3c 2f   and so forth.</
160a0 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 75 6e 69  p>..<p>^The "uni
160b0 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72  xepoch" modifier
160c0 20 28 31 31 29 20 6f 6e 6c 79 20 77 6f 72 6b 73   (11) only works
160d0 20 69 66 20 69 74 20 69 6d 6d 65 64 69 61 74 65   if it immediate
160e0 6c 79 20 66 6f 6c 6c 6f 77 73 20 0a 61 20 74 69  ly follows .a ti
160f0 6d 65 73 74 72 69 6e 67 20 69 6e 20 74 68 65 20  mestring in the 
16100 44 44 44 44 44 44 44 44 44 44 20 66 6f 72 6d 61  DDDDDDDDDD forma
16110 74 2e 20 0a 5e 54 68 69 73 20 6d 6f 64 69 66 69  t. .^This modifi
16120 65 72 20 63 61 75 73 65 73 20 74 68 65 20 44 44  er causes the DD
16130 44 44 44 44 44 44 44 44 20 74 6f 20 62 65 20 69  DDDDDDDD to be i
16140 6e 74 65 72 70 72 65 74 65 64 20 6e 6f 74 20 0a  nterpreted not .
16150 61 73 20 61 20 4a 75 6c 69 61 6e 20 64 61 79 20  as a Julian day 
16160 6e 75 6d 62 65 72 20 61 73 20 69 74 20 6e 6f 72  number as it nor
16170 6d 61 6c 6c 79 20 77 6f 75 6c 64 20 62 65 2c 20  mally would be, 
16180 62 75 74 20 61 73 0a 5b 68 74 74 70 3a 2f 2f 65  but as.[http://e
16190 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
161a0 77 69 6b 69 2f 55 6e 69 78 5f 74 69 6d 65 20 7c  wiki/Unix_time |
161b0 20 55 6e 69 78 20 54 69 6d 65 5d 20 2d 20 74 68   Unix Time] - th
161c0 65 20 0a 6e 75 6d 62 65 72 20 6f 66 20 73 65 63  e .number of sec
161d0 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30 2e  onds since 1970.
161e0 20 20 49 66 20 74 68 65 20 22 75 6e 69 78 65 70    If the "unixep
161f0 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 64 6f  och" modifier do
16200 65 73 20 6e 6f 74 0a 66 6f 6c 6c 6f 77 20 61 20  es not.follow a 
16210 74 69 6d 65 73 74 72 69 6e 67 20 6f 66 20 74 68  timestring of th
16220 65 20 66 6f 72 6d 20 44 44 44 44 44 44 44 44 44  e form DDDDDDDDD
16230 44 20 77 68 69 63 68 20 65 78 70 72 65 73 73 65  D which expresse
16240 73 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20  s the number.of 
16250 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39  seconds since 19
16260 37 30 20 6f 72 20 69 66 20 6f 74 68 65 72 20 6d  70 or if other m
16270 6f 64 69 66 69 65 72 73 0a 73 65 70 61 72 61 74  odifiers.separat
16280 65 20 74 68 65 20 22 75 6e 69 78 65 70 6f 63 68  e the "unixepoch
16290 22 20 6d 6f 64 69 66 69 65 72 20 66 72 6f 6d 20  " modifier from 
162a0 70 72 69 6f 72 20 44 44 44 44 44 44 44 44 44 44  prior DDDDDDDDDD
162b0 20 74 68 65 6e 20 74 68 65 0a 62 65 68 61 76 69   then the.behavi
162c0 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  or is undefined.
162d0 0a 44 75 65 20 74 6f 20 70 72 65 63 69 73 69 6f  .Due to precisio
162e0 6e 20 6c 69 6d 69 74 61 74 69 6f 6e 73 20 69 6d  n limitations im
162f0 70 6f 73 65 64 20 62 79 20 74 68 65 20 69 6d 70  posed by the imp
16300 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 75 73 65  lementations use
16310 0a 6f 66 20 36 34 2d 62 69 74 20 69 6e 74 65 67  .of 64-bit integ
16320 65 72 73 2c 20 74 68 65 20 22 75 6e 69 78 65 70  ers, the "unixep
16330 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 6f 6e  och" modifier on
16340 6c 79 20 77 6f 72 6b 73 20 66 6f 72 0a 64 61 74  ly works for.dat
16350 65 73 20 62 65 74 77 65 65 6e 20 30 30 30 30 2d  es between 0000-
16360 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 20 61  01-01 00:00:00 a
16370 6e 64 20 35 33 35 32 2d 31 31 2d 30 31 20 31 30  nd 5352-11-01 10
16380 3a 35 32 3a 34 37 20 28 75 6e 69 78 20 74 69 6d  :52:47 (unix tim
16390 65 73 0a 6f 66 20 2d 36 32 31 36 37 32 31 39 32  es.of -621672192
163a0 30 30 20 74 68 72 6f 75 67 68 20 31 30 36 37 35  00 through 10675
163b0 31 39 39 31 36 37 29 2e 3c 2f 70 3e 0a 0a 3c 70  199167).</p>..<p
163c0 3e 5e 54 68 65 20 22 6c 6f 63 61 6c 74 69 6d 65  >^The "localtime
163d0 22 20 6d 6f 64 69 66 69 65 72 20 28 31 32 29 20  " modifier (12) 
163e0 61 73 73 75 6d 65 73 20 74 68 65 20 74 69 6d 65  assumes the time
163f0 20 73 74 72 69 6e 67 20 74 6f 20 69 74 73 20 6c   string to its l
16400 65 66 74 20 69 73 20 69 6e 0a 55 6e 69 76 65 72  eft is in.Univer
16410 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64 20  sal Coordinated 
16420 54 69 6d 65 20 28 55 54 43 29 20 61 6e 64 20 61  Time (UTC) and a
16430 64 6a 75 73 74 73 20 74 68 65 20 74 69 6d 65 0a  djusts the time.
16440 73 74 72 69 6e 67 20 73 6f 20 74 68 61 74 20 69  string so that i
16450 74 20 64 69 73 70 6c 61 79 73 20 6c 6f 63 61 6c  t displays local
16460 74 69 6d 65 2e 20 20 49 66 20 22 6c 6f 63 61 6c  time.  If "local
16470 74 69 6d 65 22 0a 66 6f 6c 6c 6f 77 73 20 61 20  time".follows a 
16480 74 69 6d 65 20 74 68 61 74 20 69 73 20 6e 6f 74  time that is not
16490 20 55 54 43 2c 20 74 68 65 6e 20 74 68 65 20 62   UTC, then the b
164a0 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66  ehavior is undef
164b0 69 6e 65 64 2e 0a 5e 28 54 68 65 20 22 75 74 63  ined..^(The "utc
164c0 22 20 69 73 20 74 68 65 20 6f 70 70 6f 73 69 74  " is the opposit
164d0 65 20 6f 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22  e of "localtime"
164e0 2e 20 20 22 75 74 63 22 20 61 73 73 75 6d 65 73  .  "utc" assumes
164f0 20 74 68 61 74 20 74 68 65 20 73 74 72 69 6e 67   that the string
16500 0a 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73 20  .to its left is 
16510 69 6e 20 74 68 65 20 6c 6f 63 61 6c 20 74 69 6d  in the local tim
16520 65 7a 6f 6e 65 20 61 6e 64 20 61 64 6a 75 73 74  ezone and adjust
16530 73 20 74 68 61 74 20 73 74 72 69 6e 67 20 74 6f  s that string to
16540 20 62 65 20 69 6e 20 55 54 43 2e 29 5e 0a 49 66   be in UTC.)^.If
16550 20 74 68 65 20 70 72 69 6f 72 20 73 74 72 69 6e   the prior strin
16560 67 20 69 73 20 6e 6f 74 20 69 6e 20 6c 6f 63 61  g is not in loca
16570 6c 74 69 6d 65 2c 20 74 68 65 6e 20 74 68 65 20  ltime, then the 
16580 72 65 73 75 6c 74 20 6f 66 20 22 75 74 63 22 20  result of "utc" 
16590 69 73 0a 75 6e 64 65 66 69 6e 65 64 2e 3c 2f 70  is.undefined.</p
165a0 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c 65 73 3c  >..<h3>Examples<
165b0 2f 68 33 3e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75  /h3>..^(<p>Compu
165c0 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 64  te the current d
165d0 61 74 65 2e 3c 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  ate.<p>..<blockq
165e0 75 6f 74 65 3e 53 45 4c 45 43 54 20 64 61 74 65  uote>SELECT date
165f0 28 27 6e 6f 77 27 29 3b 3c 2f 62 6c 6f 63 6b 71  ('now');</blockq
16600 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
16610 6d 70 75 74 65 20 74 68 65 20 6c 61 73 74 20 64  mpute the last d
16620 61 79 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  ay of the curren
16630 74 20 6d 6f 6e 74 68 2e 3c 2f 70 3e 0a 0a 3c 62  t month.</p>..<b
16640 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45 43 54  lockquote>SELECT
16650 20 64 61 74 65 28 27 6e 6f 77 27 2c 27 73 74 61   date('now','sta
16660 72 74 20 6f 66 20 6d 6f 6e 74 68 27 2c 27 2b 31  rt of month','+1
16670 20 6d 6f 6e 74 68 27 2c 27 2d 31 20 64 61 79 27   month','-1 day'
16680 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  );.</blockquote>
16690 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65  )^..^(<p>Compute
166a0 20 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 69   the date and ti
166b0 6d 65 20 67 69 76 65 6e 20 61 20 75 6e 69 78 20  me given a unix 
166c0 74 69 6d 65 73 74 61 6d 70 20 31 30 39 32 39 34  timestamp 109294
166d0 31 34 36 36 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  1466.</p>..<bloc
166e0 6b 71 75 6f 74 65 3e 0a 20 20 20 20 53 45 4c 45  kquote>.    SELE
166f0 43 54 20 64 61 74 65 74 69 6d 65 28 31 30 39 32  CT datetime(1092
16700 39 34 31 34 36 36 2c 20 27 75 6e 69 78 65 70 6f  941466, 'unixepo
16710 63 68 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  ch');.</blockquo
16720 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70  te>)^..^(<p>Comp
16730 75 74 65 20 74 68 65 20 64 61 74 65 20 61 6e 64  ute the date and
16740 20 74 69 6d 65 20 67 69 76 65 6e 20 61 20 75 6e   time given a un
16750 69 78 20 74 69 6d 65 73 74 61 6d 70 20 31 30 39  ix timestamp 109
16760 32 39 34 31 34 36 36 2c 20 61 6e 64 20 0a 63 6f  2941466, and .co
16770 6d 70 65 6e 73 61 74 65 20 66 6f 72 20 79 6f 75  mpensate for you
16780 72 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65  r local timezone
16790 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
167a0 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 64 61 74  te>.  SELECT dat
167b0 65 74 69 6d 65 28 31 30 39 32 39 34 31 34 36 36  etime(1092941466
167c0 2c 20 27 75 6e 69 78 65 70 6f 63 68 27 2c 20 27  , 'unixepoch', '
167d0 6c 6f 63 61 6c 74 69 6d 65 27 29 3b 0a 3c 2f 62  localtime');.</b
167e0 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28  lockquote>)^..^(
167f0 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 63  <p>Compute the c
16800 75 72 72 65 6e 74 20 75 6e 69 78 20 74 69 6d 65  urrent unix time
16810 73 74 61 6d 70 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f  stamp.</p>..<blo
16820 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43  ckquote>.  SELEC
16830 54 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c  T strftime('%s',
16840 27 6e 6f 77 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  'now');.</blockq
16850 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
16860 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72  mpute the number
16870 20 6f 66 20 64 61 79 73 20 73 69 6e 63 65 20 74   of days since t
16880 68 65 20 73 69 67 6e 69 6e 67 20 6f 66 20 74 68  he signing of th
16890 65 20 55 53 20 44 65 63 6c 61 72 61 74 69 6f 6e  e US Declaration
168a0 0a 6f 66 20 49 6e 64 65 70 65 6e 64 65 6e 63 65  .of Independence
168b0 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
168c0 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 6a 75 6c  te>.  SELECT jul
168d0 69 61 6e 64 61 79 28 27 6e 6f 77 27 29 20 2d 20  ianday('now') - 
168e0 6a 75 6c 69 61 6e 64 61 79 28 27 31 37 37 36 2d  julianday('1776-
168f0 30 37 2d 30 34 27 29 3b 0a 3c 2f 62 6c 6f 63 6b  07-04');.</block
16900 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43  quote>)^..^(<p>C
16910 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65  ompute the numbe
16920 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e  r of seconds sin
16930 63 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  ce a particular 
16940 6d 6f 6d 65 6e 74 20 69 6e 20 32 30 30 34 3a 3c  moment in 2004:<
16950 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
16960 3e 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66 74  >.  SELECT strft
16970 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 20  ime('%s','now') 
16980 2d 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c  - strftime('%s',
16990 27 32 30 30 34 2d 30 31 2d 30 31 20 30 32 3a 33  '2004-01-01 02:3
169a0 34 3a 35 36 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  4:56');.</blockq
169b0 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 0a 43  uote>)^..^(<p>.C
169c0 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74 65 20  ompute the date 
169d0 6f 66 20 74 68 65 20 66 69 72 73 74 20 54 75 65  of the first Tue
169e0 73 64 61 79 20 69 6e 20 4f 63 74 6f 62 65 72 0a  sday in October.
169f0 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
16a00 79 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  year..</p>..<blo
16a10 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43  ckquote>.  SELEC
16a20 54 20 64 61 74 65 28 27 6e 6f 77 27 2c 27 73 74  T date('now','st
16a30 61 72 74 20 6f 66 20 79 65 61 72 27 2c 27 2b 39  art of year','+9
16a40 20 6d 6f 6e 74 68 73 27 2c 27 77 65 65 6b 64 61   months','weekda
16a50 79 20 32 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  y 2');.</blockqu
16a60 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d  ote>)^..^(<p>Com
16a70 70 75 74 65 20 74 68 65 20 74 69 6d 65 20 73 69  pute the time si
16a80 6e 63 65 20 74 68 65 20 75 6e 69 78 20 65 70 6f  nce the unix epo
16a90 63 68 20 69 6e 20 73 65 63 6f 6e 64 73 20 0a 28  ch in seconds .(
16aa0 6c 69 6b 65 20 73 74 72 66 74 69 6d 65 28 27 25  like strftime('%
16ab0 73 27 2c 27 6e 6f 77 27 29 20 65 78 63 65 70 74  s','now') except
16ac0 20 69 6e 63 6c 75 64 65 73 20 66 72 61 63 74 69   includes fracti
16ad0 6f 6e 61 6c 20 70 61 72 74 29 3a 3c 2f 70 3e 0a  onal part):</p>.
16ae0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20  .<blockquote>.  
16af0 53 45 4c 45 43 54 20 28 6a 75 6c 69 61 6e 64 61  SELECT (julianda
16b00 79 28 27 6e 6f 77 27 29 20 2d 20 32 34 34 30 35  y('now') - 24405
16b10 38 37 2e 35 29 2a 38 36 34 30 30 2e 30 3b 0a 3c  87.5)*86400.0;.<
16b20 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
16b30 3c 68 33 3e 43 61 76 65 61 74 73 20 41 6e 64 20  <h3>Caveats And 
16b40 42 75 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  Bugs</h3>..<p>Th
16b50 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66  e computation of
16b60 20 6c 6f 63 61 6c 20 74 69 6d 65 20 64 65 70 65   local time depe
16b70 6e 64 73 20 68 65 61 76 69 6c 79 20 6f 6e 20 74  nds heavily on t
16b80 68 65 20 77 68 69 6d 20 0a 6f 66 20 70 6f 6c 69  he whim .of poli
16b90 74 69 63 69 61 6e 73 20 61 6e 64 20 69 73 20 74  ticians and is t
16ba0 68 75 73 20 64 69 66 66 69 63 75 6c 74 20 74 6f  hus difficult to
16bb0 20 67 65 74 20 63 6f 72 72 65 63 74 20 66 6f 72   get correct for
16bc0 20 0a 61 6c 6c 20 6c 6f 63 61 6c 65 73 2e 20 5e   .all locales. ^
16bd0 49 6e 20 74 68 69 73 20 69 6d 70 6c 65 6d 65 6e  In this implemen
16be0 74 61 74 69 6f 6e 2c 20 74 68 65 20 73 74 61 6e  tation, the stan
16bf0 64 61 72 64 20 43 20 6c 69 62 72 61 72 79 20 0a  dard C library .
16c00 66 75 6e 63 74 69 6f 6e 20 6c 6f 63 61 6c 74 69  function localti
16c10 6d 65 5f 72 28 29 20 69 73 20 75 73 65 64 20 74  me_r() is used t
16c20 6f 20 61 73 73 69 73 74 20 69 6e 20 74 68 65 20  o assist in the 
16c30 63 61 6c 63 75 6c 61 74 69 6f 6e 20 6f 66 20 0a  calculation of .
16c40 6c 6f 63 61 6c 20 74 69 6d 65 2e 20 20 5e 28 54  local time.  ^(T
16c50 68 65 20 0a 6c 6f 63 61 6c 74 69 6d 65 5f 72 28  he .localtime_r(
16c60 29 20 43 20 66 75 6e 63 74 69 6f 6e 20 6e 6f 72  ) C function nor
16c70 6d 61 6c 6c 79 20 6f 6e 6c 79 20 77 6f 72 6b 73  mally only works
16c80 20 66 6f 72 20 79 65 61 72 73 0a 62 65 74 77 65   for years.betwe
16c90 65 6e 20 31 39 37 30 20 61 6e 64 20 32 30 33 37  en 1970 and 2037
16ca0 2e 20 46 6f 72 20 64 61 74 65 73 20 6f 75 74 73  . For dates outs
16cb0 69 64 65 20 74 68 69 73 20 72 61 6e 67 65 2c 20  ide this range, 
16cc0 53 51 4c 69 74 65 20 0a 61 74 74 65 6d 70 74 73  SQLite .attempts
16cd0 20 74 6f 20 6d 61 70 20 74 68 65 20 79 65 61 72   to map the year
16ce0 20 69 6e 74 6f 20 61 6e 20 65 71 75 69 76 61 6c   into an equival
16cf0 65 6e 74 20 79 65 61 72 20 77 69 74 68 69 6e 20  ent year within 
16d00 0a 74 68 69 73 20 72 61 6e 67 65 2c 20 64 6f 20  .this range, do 
16d10 74 68 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e 2c  the calculation,
16d20 20 74 68 65 6e 20 6d 61 70 20 74 68 65 20 79 65   then map the ye
16d30 61 72 20 62 61 63 6b 2e 29 5e 3c 2f 70 3e 0a 0a  ar back.)^</p>..
16d40 0a 3c 70 3e 5e 28 54 68 65 73 65 20 66 75 6e 63  .<p>^(These func
16d50 74 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20  tions only work 
16d60 66 6f 72 20 64 61 74 65 73 20 62 65 74 77 65 65  for dates betwee
16d70 6e 20 30 30 30 30 2d 30 31 2d 30 31 20 30 30 3a  n 0000-01-01 00:
16d80 30 30 3a 30 30 0a 61 6e 64 20 39 39 39 39 2d 31  00:00.and 9999-1
16d90 32 2d 33 31 20 32 33 3a 35 39 3a 35 39 20 28 6a  2-31 23:59:59 (j
16da0 75 6c 69 64 61 6e 20 64 61 79 20 6e 75 6d 62 65  ulidan day numbe
16db0 72 73 20 31 37 32 31 30 35 39 2e 35 20 74 68 72  rs 1721059.5 thr
16dc0 6f 75 67 68 20 35 33 37 33 34 38 34 2e 35 29 2e  ough 5373484.5).
16dd0 29 5e 0a 46 6f 72 20 64 61 74 65 73 20 6f 75 74  )^.For dates out
16de0 73 69 64 65 20 74 68 61 74 20 72 61 6e 67 65 2c  side that range,
16df0 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
16e00 74 68 65 73 65 0a 66 75 6e 63 74 69 6f 6e 73 20  these.functions 
16e10 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 3c 2f  are undefined.</
16e20 70 3e 0a 0a 3c 70 3e 4e 6f 6e 2d 56 69 73 74 61  p>..<p>Non-Vista
16e30 20 57 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f 72   Windows platfor
16e40 6d 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 20  ms only support 
16e50 6f 6e 65 20 73 65 74 20 6f 66 20 44 53 54 20 72  one set of DST r
16e60 75 6c 65 73 2e 20 0a 56 69 73 74 61 20 6f 6e 6c  ules. .Vista onl
16e70 79 20 73 75 70 70 6f 72 74 73 20 74 77 6f 2e 20  y supports two. 
16e80 54 68 65 72 65 66 6f 72 65 2c 20 6f 6e 20 74 68  Therefore, on th
16e90 65 73 65 20 70 6c 61 74 66 6f 72 6d 73 2c 20 0a  ese platforms, .
16ea0 68 69 73 74 6f 72 69 63 61 6c 20 44 53 54 20 63  historical DST c
16eb0 61 6c 63 75 6c 61 74 69 6f 6e 73 20 77 69 6c 6c  alculations will
16ec0 20 62 65 20 69 6e 63 6f 72 72 65 63 74 2e 20 0a   be incorrect. .
16ed0 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 20  For example, in 
16ee0 74 68 65 20 55 53 2c 20 69 6e 20 32 30 30 37 20  the US, in 2007 
16ef0 74 68 65 20 44 53 54 20 72 75 6c 65 73 20 63 68  the DST rules ch
16f00 61 6e 67 65 64 2e 20 0a 4e 6f 6e 2d 56 69 73 74  anged. .Non-Vist
16f10 61 20 57 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f  a Windows platfo
16f20 72 6d 73 20 61 70 70 6c 79 20 74 68 65 20 6e 65  rms apply the ne
16f30 77 20 32 30 30 37 20 44 53 54 20 72 75 6c 65 73  w 2007 DST rules
16f40 20 0a 74 6f 20 61 6c 6c 20 70 72 65 76 69 6f 75   .to all previou
16f50 73 20 79 65 61 72 73 20 61 73 20 77 65 6c 6c 2e  s years as well.
16f60 20 56 69 73 74 61 20 64 6f 65 73 20 73 6f 6d 65   Vista does some
16f70 77 68 61 74 20 62 65 74 74 65 72 0a 67 65 74 74  what better.gett
16f80 69 6e 67 20 72 65 73 75 6c 74 73 20 63 6f 72 72  ing results corr
16f90 65 63 74 20 62 61 63 6b 20 74 6f 20 31 39 38 36  ect back to 1986
16fa0 2c 20 77 68 65 6e 20 74 68 65 20 72 75 6c 65 73  , when the rules
16fb0 20 77 65 72 65 20 61 6c 73 6f 20 63 68 61 6e 67   were also chang
16fc0 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6c 6c 20  ed.</p>..<p>All 
16fd0 69 6e 74 65 72 6e 61 6c 20 63 6f 6d 70 75 74 61  internal computa
16fe0 74 69 6f 6e 73 20 61 73 73 75 6d 65 20 74 68 65  tions assume the
16ff0 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b   .[http://en.wik
17000 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f  ipedia.org/wiki/
17010 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e 64  Gregorian_calend
17020 61 72 20 7c 20 47 72 65 67 6f 72 69 61 6e 20 63  ar | Gregorian c
17030 61 6c 65 6e 64 61 72 5d 0a 73 79 73 74 65 6d 2e  alendar].system.
17040 20 20 49 74 20 69 73 20 61 6c 73 6f 20 61 73 73    It is also ass
17050 75 6d 65 64 20 74 68 61 74 20 65 76 65 72 79 0a  umed that every.
17060 64 61 79 20 69 73 20 65 78 61 63 74 6c 79 20 38  day is exactly 8
17070 36 34 30 30 20 73 65 63 6f 6e 64 73 20 69 6e 20  6400 seconds in 
17080 64 75 72 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c  duration.</p>..<
17090 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
170a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
170b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
170c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
170d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
170e0 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41 67 67  ###.Section {Agg
170f0 72 65 67 61 74 65 20 46 75 6e 63 74 69 6f 6e 73  regate Functions
17100 7d 20 61 67 67 66 75 6e 63 20 7b 2a 61 67 67 66  } aggfunc {*aggf
17110 75 6e 63 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  unc}.</tcl>..<p>
17120 0a 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66  .The aggregate f
17130 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e 20 62  unctions shown b
17140 65 6c 6f 77 20 61 72 65 20 61 76 61 69 6c 61 62  elow are availab
17150 6c 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  le by default.  
17160 41 64 64 69 74 69 6f 6e 61 6c 0a 61 67 67 72 65  Additional.aggre
17170 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 77  gate functions w
17180 72 69 74 74 65 6e 20 69 6e 20 43 20 6d 61 79 20  ritten in C may 
17190 62 65 20 61 64 64 65 64 20 75 73 69 6e 67 20 74  be added using t
171a0 68 65 20 0a 5b 73 71 6c 69 74 65 33 5f 63 72 65  he .[sqlite3_cre
171b0 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 3c  ate_function()]<
171c0 2f 61 3e 0a 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 70  /a>.API.</p>..<p
171d0 3e 0a 5e 49 6e 20 61 6e 79 20 61 67 67 72 65 67  >.^In any aggreg
171e0 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 74 68 61  ate function tha
171f0 74 20 74 61 6b 65 73 20 61 20 73 69 6e 67 6c 65  t takes a single
17200 20 61 72 67 75 6d 65 6e 74 2c 20 74 68 61 74 20   argument, that 
17210 61 72 67 75 6d 65 6e 74 0a 63 61 6e 20 62 65 20  argument.can be 
17220 70 72 65 63 65 64 65 64 20 62 79 20 74 68 65 20  preceded by the 
17230 6b 65 79 77 6f 72 64 20 44 49 53 54 49 4e 43 54  keyword DISTINCT
17240 2e 20 20 5e 49 6e 20 73 75 63 68 20 63 61 73 65  .  ^In such case
17250 73 2c 20 64 75 70 6c 69 63 61 74 65 0a 65 6c 65  s, duplicate.ele
17260 6d 65 6e 74 73 20 61 72 65 20 66 69 6c 74 65 72  ments are filter
17270 65 64 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20  ed before being 
17280 70 61 73 73 65 64 20 69 6e 74 6f 20 74 68 65 20  passed into the 
17290 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
172a0 6f 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c 65  on..^For example
172b0 2c 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 22  , the function "
172c0 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 58  count(distinct X
172d0 29 22 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 74  )" will return t
172e0 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 64 69 73  he number.of dis
172f0 74 69 6e 63 74 20 76 61 6c 75 65 73 20 6f 66 20  tinct values of 
17300 63 6f 6c 75 6d 6e 20 58 20 69 6e 73 74 65 61 64  column X instead
17310 20 6f 66 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   of the total nu
17320 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c  mber of non-null
17330 0a 76 61 6c 75 65 73 20 69 6e 20 63 6f 6c 75 6d  .values in colum
17340 6e 20 58 2e 0a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c  n X..</p>..<tabl
17350 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70  e border=0 cellp
17360 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c 3e  adding=10>.<tcl>
17370 0a 66 75 6e 63 64 65 66 20 7b 61 76 67 28 58 29  .funcdef {avg(X)
17380 7d 20 7b 2a 61 76 67 20 7b 61 76 67 28 29 20 61  } {*avg {avg() a
17390 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
173a0 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 61 76 67  n}} {.  ^The avg
173b0 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65  () function.  re
173c0 74 75 72 6e 73 20 74 68 65 20 61 76 65 72 61 67  turns the averag
173d0 65 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 6e  e value of all n
173e0 6f 6e 2d 4e 55 4c 4c 20 3c 69 3e 58 3c 2f 69 3e  on-NULL <i>X</i>
173f0 20 77 69 74 68 69 6e 20 61 0a 20 20 67 72 6f 75   within a.  grou
17400 70 2e 20 20 5e 53 74 72 69 6e 67 20 61 6e 64 20  p.  ^String and 
17410 42 4c 4f 42 20 76 61 6c 75 65 73 20 74 68 61 74  BLOB values that
17420 20 64 6f 20 6e 6f 74 20 6c 6f 6f 6b 20 6c 69 6b   do not look lik
17430 65 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 20 20  e numbers are.  
17440 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 30  interpreted as 0
17450 2e 0a 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20  ..  ^The result 
17460 6f 66 20 61 76 67 28 29 20 69 73 20 61 6c 77 61  of avg() is alwa
17470 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f  ys a floating po
17480 69 6e 74 20 76 61 6c 75 65 20 61 73 20 6c 6f 6e  int value as lon
17490 67 20 61 73 0a 20 20 61 74 20 74 68 65 72 65 20  g as.  at there 
174a0 69 73 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20  is at least one 
174b0 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 65  non-NULL input e
174c0 76 65 6e 20 69 66 20 61 6c 6c 0a 20 20 69 6e 70  ven if all.  inp
174d0 75 74 73 20 61 72 65 20 69 6e 74 65 67 65 72 73  uts are integers
174e0 2e 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 4e 55 4c 4c 20  f avg() is NULL 
17500 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 20  if and only if. 
17510 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f   there are no no
17520 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 2e 20 20  n-NULL inputs.  
17530 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 6f 75  .}..funcdef {cou
17540 6e 74 28 58 29 20 63 6f 75 6e 74 28 2a 29 7d 20  nt(X) count(*)} 
17550 7b 2a 63 6f 75 6e 74 20 7b 63 6f 75 6e 74 28 29  {*count {count()
17560 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
17570 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 63  ion}} {.  ^The c
17580 6f 75 6e 74 28 58 29 20 66 75 6e 63 74 69 6f 6e  ount(X) function
17590 20 72 65 74 75 72 6e 73 0a 20 20 61 20 63 6f 75   returns.  a cou
175a0 6e 74 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72  nt of the number
175b0 20 6f 66 20 74 69 6d 65 73 0a 20 20 74 68 61 74   of times.  that
175c0 20 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 6e 6f 74   <i>X</i> is not
175d0 20 4e 55 4c 4c 20 69 6e 20 61 20 67 72 6f 75 70   NULL in a group
175e0 2e 20 20 5e 54 68 65 20 63 6f 75 6e 74 28 2a 29  .  ^The count(*)
175f0 20 66 75 6e 63 74 69 6f 6e 0a 20 20 28 77 69 74   function.  (wit
17600 68 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 29 20  h no arguments) 
17610 72 65 74 75 72 6e 73 20 74 68 65 20 74 6f 74 61  returns the tota
17620 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  l number of rows
17630 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d   in the group..}
17640 0a 0a 66 75 6e 63 64 65 66 20 7b 67 72 6f 75 70  ..funcdef {group
17650 5f 63 6f 6e 63 61 74 28 58 29 20 67 72 6f 75 70  _concat(X) group
17660 5f 63 6f 6e 63 61 74 28 58 2c 59 29 7d 20 7b 0a  _concat(X,Y)} {.
17670 20 20 2a 67 72 6f 75 70 5f 63 6f 6e 63 61 74 20    *group_concat 
17680 7b 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 29 20  {group_concat() 
17690 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
176a0 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68 65 20 67  on}.} {.  ^The g
176b0 72 6f 75 70 5f 63 6f 6e 63 61 74 28 29 20 66 75  roup_concat() fu
176c0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 0a 20  nction returns. 
176d0 20 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 20   a string which 
176e0 69 73 20 74 68 65 20 63 6f 6e 63 61 74 65 6e 61  is the concatena
176f0 74 69 6f 6e 20 6f 66 0a 20 20 61 6c 6c 20 6e 6f  tion of.  all no
17700 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 6f 66  n-NULL values of
17710 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 49 66 20   <i>X</i>.  ^If 
17720 70 61 72 61 6d 65 74 65 72 20 3c 69 3e 59 3c 2f  parameter <i>Y</
17730 69 3e 20 69 73 20 70 72 65 73 65 6e 74 20 74 68  i> is present th
17740 65 6e 0a 20 20 69 73 20 69 73 20 75 73 65 64 20  en.  is is used 
17750 61 73 20 74 68 65 20 73 65 70 61 72 61 74 6f 72  as the separator
17760 0a 20 20 62 65 74 77 65 65 6e 20 69 6e 73 74 61  .  between insta
17770 6e 63 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e  nces of <i>X</i>
17780 2e 20 20 5e 41 20 63 6f 6d 6d 61 20 28 22 2c 22  .  ^A comma (","
17790 29 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65  ) is used as the
177a0 20 73 65 70 61 72 61 74 6f 72 0a 20 20 69 66 20   separator.  if 
177b0 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 6f 6d 69 74  <i>Y</i> is omit
177c0 74 65 64 2e 20 20 54 68 65 20 6f 72 64 65 72 20  ted.  The order 
177d0 6f 66 20 74 68 65 20 63 6f 6e 63 61 74 65 6e 61  of the concatena
177e0 74 65 64 20 65 6c 65 6d 65 6e 74 73 20 69 73 0a  ted elements is.
177f0 20 20 61 72 62 69 74 72 61 72 79 2e 0a 7d 0a 0a    arbitrary..}..
17800 66 75 6e 63 64 65 66 20 7b 6d 61 78 28 58 29 7d  funcdef {max(X)}
17810 20 7b 2a 6d 61 78 41 67 67 46 75 6e 63 20 2a 61   {*maxAggFunc *a
17820 67 67 5f 6d 61 78 20 7b 6d 61 78 28 29 20 61 67  gg_max {max() ag
17830 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
17840 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 61 78 28  }} {.  ^The max(
17850 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
17860 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74  tion.  returns t
17870 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65  he maximum value
17880 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69   of all values i
17890 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e  n the group..  ^
178a0 54 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75  The maximum valu
178b0 65 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 74  e is the value t
178c0 68 61 74 20 77 6f 75 6c 64 20 62 65 20 72 65 74  hat would be ret
178d0 75 72 6e 65 64 20 6c 61 73 74 20 69 6e 20 61 6e  urned last in an
178e0 0a 20 20 4f 52 44 45 52 20 42 59 20 6f 6e 20 74  .  ORDER BY on t
178f0 68 65 20 73 61 6d 65 20 63 6f 6c 75 6d 6e 2e 20  he same column. 
17900 20 5e 41 67 67 72 65 67 61 74 65 20 6d 61 78 28   ^Aggregate max(
17910 29 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 0a  ) returns NULL .
17920 20 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66    if and only if
17930 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f   there are no no
17940 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e  n-NULL values in
17950 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66   the group..}..f
17960 75 6e 63 64 65 66 20 7b 6d 69 6e 28 58 29 7d 20  uncdef {min(X)} 
17970 7b 2a 6d 69 6e 41 67 67 46 75 6e 63 20 2a 61 67  {*minAggFunc *ag
17980 67 5f 6d 69 6e 20 7b 6d 69 6e 28 29 20 61 67 67  g_min {min() agg
17990 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d  regate function}
179a0 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 69 6e 28 29  } {.  ^The min()
179b0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
179c0 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68  ion.  returns th
179d0 65 20 6d 69 6e 69 6d 75 6d 20 6e 6f 6e 2d 4e 55  e minimum non-NU
179e0 4c 4c 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20  LL value of all 
179f0 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72  values in the gr
17a00 6f 75 70 2e 0a 20 20 5e 54 68 65 20 6d 69 6e 69  oup..  ^The mini
17a10 6d 75 6d 20 76 61 6c 75 65 20 69 73 20 74 68 65  mum value is the
17a20 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20   first non-NULL 
17a30 76 61 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64  value that would
17a40 20 61 70 70 65 61 72 0a 20 20 69 6e 20 61 6e 20   appear.  in an 
17a50 4f 52 44 45 52 20 42 59 20 6f 66 20 74 68 65 20  ORDER BY of the 
17a60 63 6f 6c 75 6d 6e 2e 0a 20 20 5e 41 67 67 72 65  column..  ^Aggre
17a70 67 61 74 65 20 6d 69 6e 28 29 20 72 65 74 75 72  gate min() retur
17a80 6e 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64 20 6f  ns NULL if and o
17a90 6e 6c 79 20 69 66 20 74 68 65 72 65 20 61 72 65  nly if there are
17aa0 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 0a 20 20 76   no non-NULL.  v
17ab0 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f  alues in the gro
17ac0 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  up..}..funcdef {
17ad0 73 75 6d 28 58 29 20 74 6f 74 61 6c 28 58 29 7d  sum(X) total(X)}
17ae0 20 7b 0a 20 20 2a 73 75 6d 46 75 6e 63 20 2a 73   {.  *sumFunc *s
17af0 75 6d 20 2a 74 6f 74 61 6c 0a 20 20 7b 73 75 6d  um *total.  {sum
17b00 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
17b10 63 74 69 6f 6e 7d 0a 20 20 7b 74 6f 74 61 6c 28  ction}.  {total(
17b20 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
17b30 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68 65  tion}.} {.  ^The
17b40 20 73 75 6d 28 29 20 61 6e 64 20 74 6f 74 61 6c   sum() and total
17b50 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
17b60 63 74 69 6f 6e 73 0a 20 20 72 65 74 75 72 6e 20  ctions.  return 
17b70 73 75 6d 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e  sum of all non-N
17b80 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68  ULL values in th
17b90 65 20 67 72 6f 75 70 2e 0a 20 20 5e 49 66 20 74  e group..  ^If t
17ba0 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d  here are no non-
17bb0 4e 55 4c 4c 20 69 6e 70 75 74 20 72 6f 77 73 20  NULL input rows 
17bc0 74 68 65 6e 20 73 75 6d 28 29 20 72 65 74 75 72  then sum() retur
17bd0 6e 73 0a 20 20 4e 55 4c 4c 20 62 75 74 20 74 6f  ns.  NULL but to
17be0 74 61 6c 28 29 20 72 65 74 75 72 6e 73 20 30 2e  tal() returns 0.
17bf0 30 2e 0a 20 20 4e 55 4c 4c 20 69 73 20 6e 6f 74  0..  NULL is not
17c00 20 6e 6f 72 6d 61 6c 6c 79 20 61 20 68 65 6c 70   normally a help
17c10 66 75 6c 20 72 65 73 75 6c 74 20 66 6f 72 20 74  ful result for t
17c20 68 65 20 73 75 6d 20 6f 66 20 6e 6f 20 72 6f 77  he sum of no row
17c30 73 0a 20 20 62 75 74 20 74 68 65 20 53 51 4c 20  s.  but the SQL 
17c40 73 74 61 6e 64 61 72 64 20 72 65 71 75 69 72 65  standard require
17c50 73 20 69 74 20 61 6e 64 20 6d 6f 73 74 20 6f 74  s it and most ot
17c60 68 65 72 0a 20 20 53 51 4c 20 64 61 74 61 62 61  her.  SQL databa
17c70 73 65 20 65 6e 67 69 6e 65 73 20 69 6d 70 6c 65  se engines imple
17c80 6d 65 6e 74 20 73 75 6d 28 29 20 74 68 61 74 20  ment sum() that 
17c90 77 61 79 20 73 6f 20 53 51 4c 69 74 65 20 64 6f  way so SQLite do
17ca0 65 73 20 69 74 20 69 6e 20 74 68 65 0a 20 20 73  es it in the.  s
17cb0 61 6d 65 20 77 61 79 20 69 6e 20 6f 72 64 65 72  ame way in order
17cc0 20 74 6f 20 62 65 20 63 6f 6d 70 61 74 69 62 6c   to be compatibl
17cd0 65 2e 20 20 20 54 68 65 20 6e 6f 6e 2d 73 74 61  e.   The non-sta
17ce0 6e 64 61 72 64 20 74 6f 74 61 6c 28 29 20 66 75  ndard total() fu
17cf0 6e 63 74 69 6f 6e 0a 20 20 69 73 20 70 72 6f 76  nction.  is prov
17d00 69 64 65 64 20 61 73 20 61 20 63 6f 6e 76 65 6e  ided as a conven
17d10 69 65 6e 74 20 77 61 79 20 74 6f 20 77 6f 72 6b  ient way to work
17d20 20 61 72 6f 75 6e 64 20 74 68 69 73 20 64 65 73   around this des
17d30 69 67 6e 20 70 72 6f 62 6c 65 6d 0a 20 20 69 6e  ign problem.  in
17d40 20 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   the SQL languag
17d50 65 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 54 68  e.</p>..  <p>^Th
17d60 65 20 72 65 73 75 6c 74 20 6f 66 20 74 6f 74 61  e result of tota
17d70 6c 28 29 20 69 73 20 61 6c 77 61 79 73 20 61 20  l() is always a 
17d80 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
17d90 61 6c 75 65 2e 0a 20 20 5e 54 68 65 20 72 65 73  alue..  ^The res
17da0 75 6c 74 20 6f 66 20 73 75 6d 28 29 20 69 73 20  ult of sum() is 
17db0 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
17dc0 20 69 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c   if all non-NULL
17dd0 20 69 6e 70 75 74 73 20 61 72 65 20 69 6e 74 65   inputs are inte
17de0 67 65 72 73 2e 0a 20 20 5e 49 66 20 61 6e 79 20  gers..  ^If any 
17df0 69 6e 70 75 74 20 74 6f 20 73 75 6d 28 29 20 69  input to sum() i
17e00 73 20 6e 65 69 74 68 65 72 20 61 6e 20 69 6e 74  s neither an int
17e10 65 67 65 72 20 6f 72 20 61 20 4e 55 4c 4c 0a 20  eger or a NULL. 
17e20 20 74 68 65 6e 20 73 75 6d 28 29 20 72 65 74 75   then sum() retu
17e30 72 6e 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70  rns a floating p
17e40 6f 69 6e 74 20 76 61 6c 75 65 0a 20 20 77 68 69  oint value.  whi
17e50 63 68 20 6d 69 67 68 74 20 62 65 20 61 6e 20 61  ch might be an a
17e60 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 74 6f 20  pproximation to 
17e70 74 68 65 20 74 72 75 65 20 73 75 6d 2e 3c 2f 70  the true sum.</p
17e80 3e 0a 0a 20 20 3c 70 3e 5e 53 75 6d 28 29 20 77  >..  <p>^Sum() w
17e90 69 6c 6c 20 74 68 72 6f 77 20 61 6e 20 22 69 6e  ill throw an "in
17ea0 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 22 20  teger overflow" 
17eb0 65 78 63 65 70 74 69 6f 6e 20 69 66 20 61 6c 6c  exception if all
17ec0 20 69 6e 70 75 74 73 0a 20 20 61 72 65 20 69 6e   inputs.  are in
17ed0 74 65 67 65 72 73 20 6f 72 20 4e 55 4c 4c 0a 20  tegers or NULL. 
17ee0 20 61 6e 64 20 61 6e 20 69 6e 74 65 67 65 72 20   and an integer 
17ef0 6f 76 65 72 66 6c 6f 77 20 6f 63 63 75 72 73 20  overflow occurs 
17f00 61 74 20 61 6e 79 20 70 6f 69 6e 74 20 64 75 72  at any point dur
17f10 69 6e 67 20 74 68 65 20 63 6f 6d 70 75 74 61 74  ing the computat
17f20 69 6f 6e 2e 0a 20 20 5e 54 6f 74 61 6c 28 29 20  ion..  ^Total() 
17f30 6e 65 76 65 72 20 74 68 72 6f 77 73 20 61 6e 20  never throws an 
17f40 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77  integer overflow
17f50 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62  ..}.</tcl>.</tab
17f60 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  le>..<tcl>.#####
17f70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17f80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17f90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17fa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17fb0 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
17fc0 6e 20 49 4e 53 45 52 54 20 69 6e 73 65 72 74 20  n INSERT insert 
17fd0 7b 49 4e 53 45 52 54 20 2a 49 4e 53 45 52 54 73  {INSERT *INSERTs
17fe0 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  }..BubbleDiagram
17ff0 20 69 6e 73 65 72 74 2d 73 74 6d 74 20 31 0a 3c   insert-stmt 1.<
18000 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e  /tcl>..<p>The IN
18010 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 63  SERT statement c
18020 6f 6d 65 73 20 69 6e 20 74 68 72 65 65 20 62 61  omes in three ba
18030 73 69 63 20 66 6f 72 6d 73 2e 20 20 5e 54 68 65  sic forms.  ^The
18040 20 66 69 72 73 74 20 66 6f 72 6d 0a 28 77 69 74   first form.(wit
18050 68 20 74 68 65 20 22 56 41 4c 55 45 53 22 20 6b  h the "VALUES" k
18060 65 79 77 6f 72 64 29 20 63 72 65 61 74 65 73 20  eyword) creates 
18070 61 20 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77  a single new row
18080 20 69 6e 20 61 6e 20 65 78 69 73 74 69 6e 67 20   in an existing 
18090 74 61 62 6c 65 2e 0a 5e 49 66 20 6e 6f 20 63 6f  table..^If no co
180a0 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 20 73 70 65  lumn-list is spe
180b0 63 69 66 69 65 64 20 74 68 65 6e 20 74 68 65 20  cified then the 
180c0 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73  number of values
180d0 20 6d 75 73 74 0a 62 65 20 74 68 65 20 73 61 6d   must.be the sam
180e0 65 20 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20  e as the number 
180f0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
18100 65 20 74 61 62 6c 65 2e 20 20 5e 49 66 20 61 20  e table.  ^If a 
18110 63 6f 6c 75 6d 6e 2d 6c 69 73 74 0a 69 73 20 73  column-list.is s
18120 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74  pecified, then t
18130 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c  he number of val
18140 75 65 73 20 6d 75 73 74 20 6d 61 74 63 68 20 74  ues must match t
18150 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 73 70 65  he number of.spe
18160 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73 2e 20  cified columns. 
18170 20 5e 43 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65   ^Columns of the
18180 20 74 61 62 6c 65 20 74 68 61 74 20 64 6f 20 6e   table that do n
18190 6f 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65  ot appear in the
181a0 0a 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 61 72 65  .column list are
181b0 20 66 69 6c 6c 65 64 20 77 69 74 68 20 74 68 65   filled with the
181c0 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2c 20   default value, 
181d0 6f 72 20 77 69 74 68 20 4e 55 4c 4c 20 69 66 20  or with NULL if 
181e0 6e 6f 0a 64 65 66 61 75 6c 74 20 76 61 6c 75 65  no.default value
181f0 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 3c   is specified..<
18200 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 65 63  /p>..<p>^The sec
18210 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68 65 20  ond form of the 
18220 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
18230 20 74 61 6b 65 73 20 69 74 73 20 64 61 74 61 20   takes its data 
18240 66 72 6f 6d 20 61 0a 53 45 4c 45 43 54 20 73 74  from a.SELECT st
18250 61 74 65 6d 65 6e 74 2e 20 20 5e 54 68 65 20 6e  atement.  ^The n
18260 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
18270 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f   in the result o
18280 66 20 74 68 65 0a 53 45 4c 45 43 54 20 6d 75 73  f the.SELECT mus
18290 74 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20  t exactly match 
182a0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
182b0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
182c0 6c 65 20 69 66 0a 6e 6f 20 63 6f 6c 75 6d 6e 20  le if.no column 
182d0 6c 69 73 74 20 69 73 20 73 70 65 63 69 66 69 65  list is specifie
182e0 64 2c 20 6f 72 20 69 74 20 6d 75 73 74 20 6d 61  d, or it must ma
182f0 74 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  tch the number o
18300 66 20 63 6f 6c 75 6d 6e 73 0a 6e 61 6d 65 64 20  f columns.named 
18310 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6c 69  in the column li
18320 73 74 2e 20 20 5e 41 20 6e 65 77 20 65 6e 74 72  st.  ^A new entr
18330 79 20 69 73 20 6d 61 64 65 20 69 6e 20 74 68 65  y is made in the
18340 20 74 61 62 6c 65 0a 66 6f 72 20 65 76 65 72 79   table.for every
18350 20 72 6f 77 20 6f 66 20 74 68 65 20 53 45 4c 45   row of the SELE
18360 43 54 20 72 65 73 75 6c 74 2e 20 20 5e 54 68 65  CT result.  ^The
18370 20 53 45 4c 45 43 54 20 6d 61 79 20 62 65 20 73   SELECT may be s
18380 69 6d 70 6c 65 0a 6f 72 20 63 6f 6d 70 6f 75 6e  imple.or compoun
18390 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  d.</p>..<p>^The 
183a0 74 68 69 72 64 20 66 6f 72 6d 20 6f 66 20 61 6e  third form of an
183b0 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
183c0 74 20 69 73 20 77 69 74 68 20 44 45 46 41 55 4c  t is with DEFAUL
183d0 54 20 56 41 4c 55 45 53 2e 0a 5e 28 54 68 65 20  T VALUES..^(The 
183e0 49 4e 53 45 52 54 20 2e 2e 2e 20 44 45 46 41 55  INSERT ... DEFAU
183f0 4c 54 20 56 41 4c 55 45 53 20 73 74 61 74 65 6d  LT VALUES statem
18400 65 6e 74 20 73 69 6d 70 6c 79 20 63 72 65 61 74  ent simply creat
18410 65 73 20 61 20 73 69 6e 67 6c 65 20 6e 65 77 0a  es a single new.
18420 72 6f 77 20 69 6e 20 74 68 65 20 74 61 62 6c 65  row in the table
18430 20 69 6e 20 77 68 69 63 68 20 65 61 63 68 20 63   in which each c
18440 6f 6c 75 6d 6e 20 69 73 20 66 69 6c 6c 65 64 20  olumn is filled 
18450 77 69 74 68 20 69 74 73 20 64 65 66 61 75 6c 74  with its default
18460 20 76 61 6c 75 65 2e 29 5e 3c 2f 70 3e 0a 0a 3c   value.)^</p>..<
18470 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  p>^The optional 
18480 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 20  conflict-clause 
18490 61 6c 6c 6f 77 73 20 74 68 65 20 73 70 65 63 69  allows the speci
184a0 66 69 63 61 74 69 6f 6e 20 6f 66 20 61 6e 20 61  fication of an a
184b0 6c 74 65 72 6e 61 74 69 76 65 0a 63 6f 6e 73 74  lternative.const
184c0 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72  raint conflict r
184d0 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
184e0 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69 6e  thm to use durin
184f0 67 20 74 68 69 73 20 6f 6e 65 20 49 4e 53 45 52  g this one INSER
18500 54 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65 65 20 74  T command..See t
18510 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65  he section title
18520 64 0a 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20  d.[ON CONFLICT] 
18530 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
18540 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 5e 46 6f 72  nformation..^For
18550 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77   compatibility w
18560 69 74 68 20 4d 79 53 51 4c 2c 20 74 68 65 20 70  ith MySQL, the p
18570 61 72 73 65 72 20 61 6c 6c 6f 77 73 20 74 68 65  arser allows the
18580 20 75 73 65 20 6f 66 20 74 68 65 0a 73 69 6e 67   use of the.sing
18590 6c 65 20 6b 65 79 77 6f 72 64 20 3c 61 20 68 72  le keyword <a hr
185a0 65 66 3d 22 6c 61 6e 67 5f 72 65 70 6c 61 63 65  ef="lang_replace
185b0 2e 68 74 6d 6c 22 3e 52 45 50 4c 41 43 45 3c 2f  .html">REPLACE</
185c0 61 3e 20 61 73 20 61 6e 20 0a 61 6c 69 61 73 20  a> as an .alias 
185d0 66 6f 72 20 22 49 4e 53 45 52 54 20 4f 52 20 52  for "INSERT OR R
185e0 45 50 4c 41 43 45 22 2e 0a 3c 2f 70 3e 0a 0a 3c  EPLACE"..</p>..<
185f0 70 3e 5e 28 54 68 65 20 6f 70 74 69 6f 6e 61 6c  p>^(The optional
18600 20 22 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61   "<i>database-na
18610 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 22 20  me</i><b>.</b>" 
18620 70 72 65 66 69 78 20 6f 6e 20 74 68 65 20 3c 69  prefix on the <i
18630 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 0a  >table-name</i>.
18640 69 73 20 73 75 70 70 6f 72 74 20 66 6f 72 20 74  is support for t
18650 6f 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54 20  op-level INSERT 
18660 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 2e  statements only.
18670 29 5e 20 20 5e 54 68 65 20 74 61 62 6c 65 20 6e  )^  ^The table n
18680 61 6d 65 20 6d 75 73 74 20 62 65 0a 75 6e 71 75  ame must be.unqu
18690 61 6c 69 66 69 65 64 20 66 6f 72 20 49 4e 53 45  alified for INSE
186a0 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  RT statements th
186b0 61 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20  at occur within 
186c0 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d  [CREATE TRIGGER]
186d0 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e 53 69   statements..^Si
186e0 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 22 44 45  milarly, the "DE
186f0 46 41 55 4c 54 20 56 41 4c 55 45 53 22 20 66 6f  FAULT VALUES" fo
18700 72 6d 20 6f 66 20 74 68 65 20 49 4e 53 45 52 54  rm of the INSERT
18710 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 75   statement is su
18720 70 70 6f 72 74 65 64 20 66 6f 72 0a 74 6f 70 2d  pported for.top-
18730 6c 65 76 65 6c 20 49 4e 53 45 52 54 20 73 74 61  level INSERT sta
18740 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 20 61 6e 64  tements only and
18750 20 6e 6f 74 20 66 6f 72 20 49 4e 53 45 52 54 20   not for INSERT 
18760 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
18770 6e 0a 74 72 69 67 67 65 72 73 2e 0a 3c 70 3e 0a  n.triggers..<p>.
18780 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
18790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
187a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
187b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
187c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
187d0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 4f  #####.Section {O
187e0 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
187f0 65 7d 20 63 6f 6e 66 6c 69 63 74 20 7b 7b 63 6f  e} conflict {{co
18800 6e 66 6c 69 63 74 20 63 6c 61 75 73 65 7d 20 7b  nflict clause} {
18810 4f 4e 20 43 4f 4e 46 4c 49 43 54 7d 7d 0a 0a 42  ON CONFLICT}}..B
18820 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6e  ubbleDiagram con
18830 66 6c 69 63 74 2d 63 6c 61 75 73 65 0a 3c 2f 74  flict-clause.</t
18840 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43  cl>..<p>The ON C
18850 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
18860 73 20 6e 6f 74 20 61 20 73 65 70 61 72 61 74 65  s not a separate
18870 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 49   SQL command.  I
18880 74 20 69 73 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64  t is a.non-stand
18890 61 72 64 20 63 6c 61 75 73 65 20 74 68 61 74 20  ard clause that 
188a0 63 61 6e 20 61 70 70 65 61 72 20 69 6e 20 6d 61  can appear in ma
188b0 6e 79 20 6f 74 68 65 72 20 53 51 4c 20 63 6f 6d  ny other SQL com
188c0 6d 61 6e 64 73 2e 0a 49 74 20 69 73 20 67 69 76  mands..It is giv
188d0 65 6e 20 69 74 73 20 6f 77 6e 20 73 65 63 74 69  en its own secti
188e0 6f 6e 20 69 6e 20 74 68 69 73 20 64 6f 63 75 6d  on in this docum
188f0 65 6e 74 20 62 65 63 61 75 73 65 20 69 74 20 69  ent because it i
18900 73 20 6e 6f 74 0a 70 61 72 74 20 6f 66 20 73 74  s not.part of st
18910 61 6e 64 61 72 64 20 53 51 4c 20 61 6e 64 20 74  andard SQL and t
18920 68 65 72 65 66 6f 72 65 20 6d 69 67 68 74 20 6e  herefore might n
18930 6f 74 20 62 65 20 66 61 6d 69 6c 69 61 72 2e 3c  ot be familiar.<
18940 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 79 6e  /p>..<p>^The syn
18950 74 61 78 20 66 6f 72 20 74 68 65 20 4f 4e 20 43  tax for the ON C
18960 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
18970 73 20 61 73 20 73 68 6f 77 6e 20 61 62 6f 76 65  s as shown above
18980 20 66 6f 72 0a 74 68 65 20 43 52 45 41 54 45 20   for.the CREATE 
18990 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 2e 20 20  TABLE command.  
189a0 5e 46 6f 72 20 74 68 65 20 49 4e 53 45 52 54 20  ^For the INSERT 
189b0 61 6e 64 0a 55 50 44 41 54 45 20 63 6f 6d 6d 61  and.UPDATE comma
189c0 6e 64 73 2c 20 74 68 65 20 6b 65 79 77 6f 72 64  nds, the keyword
189d0 73 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 22 20  s "ON CONFLICT" 
189e0 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 20  are replaced by 
189f0 22 4f 52 22 20 73 6f 20 74 68 61 74 0a 74 68 65  "OR" so that.the
18a00 20 73 79 6e 74 61 78 20 72 65 61 64 73 20 6d 6f   syntax reads mo
18a10 72 65 20 6e 61 74 75 72 61 6c 6c 79 2e 20 20 46  re naturally.  F
18a20 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 73 74  or example, inst
18a30 65 61 64 20 6f 66 0a 22 49 4e 53 45 52 54 20 4f  ead of."INSERT O
18a40 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52  N CONFLICT IGNOR
18a50 45 22 20 77 65 20 68 61 76 65 20 22 49 4e 53 45  E" we have "INSE
18a60 52 54 20 4f 52 20 49 47 4e 4f 52 45 22 2e 0a 54  RT OR IGNORE"..T
18a70 68 65 20 6b 65 79 77 6f 72 64 73 20 63 68 61 6e  he keywords chan
18a80 67 65 20 62 75 74 20 74 68 65 20 6d 65 61 6e 69  ge but the meani
18a90 6e 67 20 6f 66 20 74 68 65 20 63 6c 61 75 73 65  ng of the clause
18aa0 20 69 73 20 74 68 65 20 73 61 6d 65 0a 65 69 74   is the same.eit
18ab0 68 65 72 20 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70  her way.</p>..<p
18ac0 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  >The ON CONFLICT
18ad0 20 63 6c 61 75 73 65 20 61 70 70 6c 69 65 73 20   clause applies 
18ae0 74 6f 20 55 4e 49 51 55 45 2c 20 4e 4f 54 20 4e  to UNIQUE, NOT N
18af0 55 4c 4c 2c 20 61 6e 64 20 43 48 45 43 4b 0a 63  ULL, and CHECK.c
18b00 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6e 64 20  onstraints (and 
18b10 74 6f 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  to PRIMARY KEY c
18b20 6f 6e 73 74 72 61 69 6e 74 73 20 77 68 69 63 68  onstraints which
18b30 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65   for the purpose
18b40 73 20 0a 6f 66 20 74 68 69 73 20 73 65 63 74 69  s .of this secti
18b50 6f 6e 20 61 72 65 20 74 68 65 20 73 61 6d 65 20  on are the same 
18b60 74 68 69 6e 67 20 61 73 20 55 4e 49 51 55 45 20  thing as UNIQUE 
18b70 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 54 68  constraints)..Th
18b80 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  e ON CONFLICT al
18b90 67 6f 72 69 74 68 6d 20 64 6f 65 73 20 6e 6f 74  gorithm does not
18ba0 0a 61 70 70 6c 79 20 74 6f 20 5b 46 4f 52 45 49  .apply to [FOREI
18bb0 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  GN KEY constrain
18bc0 74 73 5d 2e 0a 54 68 65 72 65 20 61 72 65 20 66  ts]..There are f
18bd0 69 76 65 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ive conflict res
18be0 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
18bf0 6d 20 63 68 6f 69 63 65 73 3a 0a 52 4f 4c 4c 42  m choices:.ROLLB
18c00 41 43 4b 2c 20 41 42 4f 52 54 2c 20 46 41 49 4c  ACK, ABORT, FAIL
18c10 2c 20 49 47 4e 4f 52 45 2c 20 61 6e 64 20 52 45  , IGNORE, and RE
18c20 50 4c 41 43 45 2e 0a 5e 54 68 65 20 64 65 66 61  PLACE..^The defa
18c30 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ult conflict res
18c40 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
18c50 6d 20 69 73 20 41 42 4f 52 54 2e 20 20 54 68 69  m is ABORT.  Thi
18c60 73 0a 69 73 20 77 68 61 74 20 74 68 65 79 20 6d  s.is what they m
18c70 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c  ean:</p>..<dl>.<
18c80 64 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43 4b 3c 2f  dt><b>ROLLBACK</
18c90 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20  b></dt>.<dd><p> 
18ca0 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61  ^When an applica
18cb0 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  ble constraint v
18cc0 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
18cd0 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 72 65   the ROLLBACK.re
18ce0 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
18cf0 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63 75  hm aborts the cu
18d00 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d  rrent SQL statem
18d10 65 6e 74 20 77 69 74 68 0a 61 6e 20 53 51 4c 49  ent with.an SQLI
18d20 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72  TE_CONSTRAINT er
18d30 72 6f 72 20 61 6e 64 20 72 6f 6c 6c 73 20 62 61  ror and rolls ba
18d40 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  ck the current t
18d50 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 49 66 20  ransaction..^If 
18d60 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
18d70 73 0a 61 63 74 69 76 65 20 28 6f 74 68 65 72 20  s.active (other 
18d80 74 68 61 6e 20 74 68 65 20 69 6d 70 6c 69 65 64  than the implied
18d90 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 61   transaction tha
18da0 74 20 69 73 20 63 72 65 61 74 65 64 20 6f 6e 20  t is created on 
18db0 65 76 65 72 79 0a 63 6f 6d 6d 61 6e 64 29 20 74  every.command) t
18dc0 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  hen the ROLLBACK
18dd0 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
18de0 72 69 74 68 6d 20 77 6f 72 6b 73 20 74 68 65 20  rithm works the 
18df0 73 61 6d 65 20 61 73 20 74 68 65 0a 41 42 4f 52  same as the.ABOR
18e00 54 20 61 6c 67 6f 72 69 74 68 6d 2e 3c 2f 70 3e  T algorithm.</p>
18e10 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 41 42  </dd>..<dt><b>AB
18e20 4f 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  ORT</b></dt>.<dd
18e30 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70  ><p> ^When an ap
18e40 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61  plicable constra
18e50 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
18e60 63 75 72 73 2c 20 74 68 65 20 41 42 4f 52 54 0a  curs, the ABORT.
18e70 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
18e80 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20  ithm aborts the 
18e90 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74  current SQL stat
18ea0 65 6d 65 6e 74 0a 77 69 74 68 20 61 6e 20 53 51  ement.with an SQ
18eb0 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 54 20 65  LITE_CONSTRAIT e
18ec0 72 72 6f 72 20 61 6e 64 20 62 61 63 6b 73 20 6f  rror and backs o
18ed0 75 74 20 61 6e 79 20 63 68 61 6e 67 65 73 0a 6d  ut any changes.m
18ee0 61 64 65 20 62 79 20 74 68 65 20 63 75 72 72 65  ade by the curre
18ef0 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  nt SQL statement
18f00 3b 20 62 75 74 20 63 68 61 6e 67 65 73 20 63 61  ; but changes ca
18f10 75 73 65 64 0a 62 79 20 70 72 69 6f 72 20 53 51  used.by prior SQ
18f20 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  L statements wit
18f30 68 69 6e 20 74 68 65 20 73 61 6d 65 20 74 72 61  hin the same tra
18f40 6e 73 61 63 74 69 6f 6e 20 61 72 65 20 70 72 65  nsaction are pre
18f50 73 65 72 76 65 64 20 61 6e 64 20 74 68 65 0a 74  served and the.t
18f60 72 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69  ransaction remai
18f70 6e 73 20 61 63 74 69 76 65 2e 0a 54 68 69 73 20  ns active..This 
18f80 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 62  is the default b
18f90 65 68 61 76 69 6f 72 20 61 6e 64 20 74 68 65 20  ehavior and the 
18fa0 62 65 68 61 76 69 6f 72 20 70 72 6f 73 63 72 69  behavior proscri
18fb0 62 65 64 20 74 68 65 20 74 68 65 20 53 51 4c 0a  bed the the SQL.
18fc0 73 74 61 6e 64 61 72 64 2e 3c 2f 70 3e 3c 2f 64  standard.</p></d
18fd0 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 46 41 49 4c 3c  d>..<dt><b>FAIL<
18fe0 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  /b></dt>.<dd><p>
18ff0 20 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63   ^When an applic
19000 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  able constraint 
19010 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73  violation occurs
19020 2c 20 74 68 65 20 46 41 49 4c 0a 72 65 73 6f 6c  , the FAIL.resol
19030 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
19040 61 62 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  aborts the curre
19050 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  nt SQL statement
19060 20 77 69 74 68 20 61 6e 0a 53 51 4c 49 54 45 5f   with an.SQLITE_
19070 43 4f 4e 53 54 52 41 49 4e 54 20 65 72 72 6f 72  CONSTRAINT error
19080 2e 20 20 5e 42 75 74 20 74 68 65 20 46 41 49 4c  .  ^But the FAIL
19090 20 72 65 73 6f 6c 75 74 69 6f 6e 20 64 6f 65 73   resolution does
190a0 20 6e 6f 74 0a 62 61 63 6b 20 6f 75 74 20 70 72   not.back out pr
190b0 69 6f 72 20 63 68 61 6e 67 65 73 20 6f 66 20 74  ior changes of t
190c0 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
190d0 20 74 68 61 74 20 66 61 69 6c 65 64 20 6e 6f 72   that failed nor
190e0 20 64 6f 65 73 0a 69 74 20 65 6e 64 20 74 68 65   does.it end the
190f0 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 46   transaction..^F
19100 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 66 20 61  or example, if a
19110 6e 20 55 50 44 41 54 45 0a 73 74 61 74 65 6d 65  n UPDATE.stateme
19120 6e 74 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 61  nt encountered a
19130 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
19140 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 31 30 30  ation on the 100
19150 74 68 20 72 6f 77 20 74 68 61 74 0a 69 74 20 61  th row that.it a
19160 74 74 65 6d 70 74 73 20 74 6f 20 75 70 64 61 74  ttempts to updat
19170 65 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72 73  e, then the firs
19180 74 20 39 39 20 72 6f 77 20 63 68 61 6e 67 65 73  t 99 row changes
19190 20 61 72 65 20 70 72 65 73 65 72 76 65 64 0a 62   are preserved.b
191a0 75 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 6f  ut changes to ro
191b0 77 73 20 31 30 30 20 61 6e 64 20 62 65 79 6f 6e  ws 100 and beyon
191c0 64 20 6e 65 76 65 72 20 6f 63 63 75 72 2e 3c 2f  d never occur.</
191d0 70 3e 3c 2f 64 64 3e 0a 0a 28 3c 64 74 3e 3c 62  p></dd>..(<dt><b
191e0 3e 49 47 4e 4f 52 45 3c 2f 62 3e 3c 2f 64 74 3e  >IGNORE</b></dt>
191f0 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61  .<dd><p> ^When a
19200 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e  n applicable con
19210 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
19220 6e 20 6f 63 63 75 72 73 2c 20 0a 74 68 65 20 49  n occurs, .the I
19230 47 4e 4f 52 45 20 72 65 73 6f 6c 75 74 69 6f 6e  GNORE resolution
19240 20 61 6c 67 6f 72 69 74 68 6d 20 73 6b 69 70 73   algorithm skips
19250 20 74 68 65 20 6f 6e 65 20 72 6f 77 20 74 68 61   the one row tha
19260 74 20 63 6f 6e 74 61 69 6e 73 0a 74 68 65 20 63  t contains.the c
19270 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
19280 69 6f 6e 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65  ion and continue
19290 73 20 70 72 6f 63 65 73 73 69 6e 67 20 73 75 62  s processing sub
192a0 73 65 71 75 65 6e 74 20 72 6f 77 73 0a 6f 66 20  sequent rows.of 
192b0 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
192c0 74 20 61 73 20 69 66 20 6e 6f 74 68 69 6e 67 20  t as if nothing 
192d0 77 65 6e 74 20 77 72 6f 6e 67 2e 0a 4f 74 68 65  went wrong..Othe
192e0 72 20 72 6f 77 73 20 62 65 66 6f 72 65 20 61 6e  r rows before an
192f0 64 20 61 66 74 65 72 20 74 68 65 20 72 6f 77 20  d after the row 
19300 74 68 61 74 0a 63 6f 6e 74 61 69 6e 65 64 20 74  that.contained t
19310 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  he constraint vi
19320 6f 6c 61 74 69 6f 6e 20 61 72 65 20 69 6e 73 65  olation are inse
19330 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 0a  rted or updated.
19340 6e 6f 72 6d 61 6c 6c 79 2e 20 5e 4e 6f 20 65 72  normally. ^No er
19350 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20  ror is returned 
19360 77 68 65 6e 20 74 68 65 20 49 47 4e 4f 52 45 20  when the IGNORE 
19370 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
19380 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d 20 69 73  ion.algorithm is
19390 20 75 73 65 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a   used.</p></dd>.
193a0 0a 3c 64 74 3e 3c 62 3e 52 45 50 4c 41 43 45 3c  .<dt><b>REPLACE<
193b0 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  /b></dt>.<dd><p>
193c0 20 5e 57 68 65 6e 20 61 20 55 4e 49 51 55 45 20   ^When a UNIQUE 
193d0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
193e0 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65  tion occurs, the
193f0 20 52 45 50 4c 41 43 45 20 61 6c 67 6f 72 69 74   REPLACE algorit
19400 68 6d 0a 64 65 6c 65 74 65 73 20 70 72 65 2d 65  hm.deletes pre-e
19410 78 69 73 74 69 6e 67 20 72 6f 77 73 20 74 68 61  xisting rows tha
19420 74 20 61 72 65 20 63 61 75 73 69 6e 67 20 74 68  t are causing th
19430 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  e constraint vio
19440 6c 61 74 69 6f 6e 0a 70 72 69 6f 72 20 74 6f 20  lation.prior to 
19450 69 6e 73 65 72 74 69 6e 67 20 6f 72 20 75 70 64  inserting or upd
19460 61 74 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e  ating the curren
19470 74 20 72 6f 77 20 61 6e 64 20 74 68 65 20 63 6f  t row and the co
19480 6d 6d 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20  mmand continues 
19490 0a 65 78 65 63 75 74 69 6e 67 20 6e 6f 72 6d 61  .executing norma
194a0 6c 6c 79 2e 0a 5e 49 66 20 61 20 4e 4f 54 20 4e  lly..^If a NOT N
194b0 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  ULL constraint v
194c0 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
194d0 20 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e   the REPLACE con
194e0 66 6c 69 63 74 0a 72 65 73 6f 6c 75 74 69 6f 6e  flict.resolution
194f0 20 72 65 70 6c 61 63 65 73 20 74 68 65 20 4e 55   replaces the NU
19500 4c 4c 20 76 61 6c 75 65 20 77 69 74 68 0a 68 65  LL value with.he
19510 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66   default value f
19520 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2c 20  or that column, 
19530 6f 72 20 69 66 20 74 68 65 20 63 6f 6c 75 6d 6e  or if the column
19540 20 68 61 73 20 6e 6f 20 64 65 66 61 75 6c 74 0a   has no default.
19550 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 65 20  value, then the 
19560 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 20  ABORT algorithm 
19570 69 73 20 75 73 65 64 2e 0a 5e 49 66 20 61 20 43  is used..^If a C
19580 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
19590 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73  violation occurs
195a0 2c 20 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f  , the REPLACE co
195b0 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
195c0 6e 0a 61 6c 67 6f 72 69 74 68 6d 20 61 6c 77 61  n.algorithm alwa
195d0 79 73 20 77 6f 72 6b 73 20 6c 69 6b 65 20 41 42  ys works like AB
195e0 4f 52 54 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68  ORT.</p>..<p>^Wh
195f0 65 6e 20 74 68 65 20 52 45 50 4c 41 43 45 20 63  en the REPLACE c
19600 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
19610 6f 6e 20 73 74 72 61 74 65 67 79 20 64 65 6c 65  on strategy dele
19620 74 65 73 20 72 6f 77 73 20 69 6e 20 6f 72 64 65  tes rows in orde
19630 72 20 74 6f 0a 73 61 74 69 73 66 79 20 61 20 63  r to.satisfy a c
19640 6f 6e 73 74 72 61 69 6e 74 2c 20 5b 43 52 45 41  onstraint, [CREA
19650 54 45 20 54 52 49 47 47 45 52 20 7c 20 64 65 6c  TE TRIGGER | del
19660 65 74 65 20 74 72 69 67 67 65 72 73 5d 20 66 69  ete triggers] fi
19670 72 65 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  re if and only i
19680 66 0a 5b 72 65 63 75 72 73 69 76 65 5f 74 72 69  f.[recursive_tri
19690 67 67 65 72 73 20 70 72 61 67 6d 61 20 7c 20 72  ggers pragma | r
196a0 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72  ecursive trigger
196b0 73 5d 20 61 72 65 20 65 6e 61 62 6c 65 64 2e 3c  s] are enabled.<
196c0 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 73 71  /p>..<p>^The [sq
196d0 6c 69 74 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f  lite3_update_hoo
196e0 6b 20 7c 20 75 70 64 61 74 65 20 68 6f 6f 6b 5d  k | update hook]
196f0 20 69 73 20 6e 6f 74 20 69 6e 76 6f 6b 65 64 20   is not invoked 
19700 66 6f 72 20 72 6f 77 73 20 74 68 61 74 0a 61 72  for rows that.ar
19710 65 20 64 65 6c 65 74 65 64 20 62 79 20 74 68 65  e deleted by the
19720 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63   REPLACE conflic
19730 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73 74 72  t resolution str
19740 65 74 65 67 79 2e 20 20 5e 4e 6f 72 20 64 6f 65  etegy.  ^Nor doe
19750 73 0a 52 45 50 4c 41 43 45 20 69 6e 63 72 65 6d  s.REPLACE increm
19760 65 6e 74 20 74 68 65 20 5b 73 71 6c 69 74 65 33  ent the [sqlite3
19770 5f 63 68 61 6e 67 65 73 20 7c 20 63 68 61 6e 67  _changes | chang
19780 65 20 63 6f 75 6e 74 65 72 5d 2e 0a 54 68 65 20  e counter]..The 
19790 65 78 63 65 70 74 69 6f 6e 61 6c 20 62 65 68 61  exceptional beha
197a0 76 69 6f 72 73 20 64 65 66 69 6e 65 64 20 69 6e  viors defined in
197b0 20 74 68 69 73 20 70 61 72 61 67 72 61 70 68 20   this paragraph 
197c0 6d 69 67 68 74 20 63 68 61 6e 67 65 20 0a 69 6e  might change .in
197d0 20 61 20 66 75 74 75 72 65 20 72 65 6c 65 61 73   a future releas
197e0 65 2e 3c 2f 70 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70  e.</p>.</dl>..<p
197f0 3e 5e 54 68 65 20 61 6c 67 6f 72 69 74 68 6d 20  >^The algorithm 
19800 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65  specified in the
19810 20 4f 52 20 63 6c 61 75 73 65 20 6f 66 20 61 20   OR clause of a 
19820 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
19830 0a 6f 76 65 72 72 69 64 65 73 20 61 6e 79 20 61  .overrides any a
19840 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66 69  lgorithm specifi
19850 65 64 20 69 6e 20 61 20 43 52 45 41 54 45 20 54  ed in a CREATE T
19860 41 42 4c 45 2e 0a 5e 49 66 20 6e 6f 20 61 6c 67  ABLE..^If no alg
19870 6f 72 69 74 68 6d 20 69 73 20 73 70 65 63 69 66  orithm is specif
19880 69 65 64 20 61 6e 79 77 68 65 72 65 2c 20 74 68  ied anywhere, th
19890 65 20 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68  e ABORT algorith
198a0 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a  m is used.</p>..
198b0 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
198c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
198d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
198e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
198f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19900 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 52 45 49  ####.Section REI
19910 4e 44 45 58 20 72 65 69 6e 64 65 78 20 52 45 49  NDEX reindex REI
19920 4e 44 45 58 0a 0a 42 75 62 62 6c 65 44 69 61 67  NDEX..BubbleDiag
19930 72 61 6d 20 72 65 69 6e 64 65 78 2d 73 74 6d 74  ram reindex-stmt
19940 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54   1.</tcl>..<p>^T
19950 68 65 20 52 45 49 4e 44 45 58 20 63 6f 6d 6d 61  he REINDEX comma
19960 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  nd is used to de
19970 6c 65 74 65 20 61 6e 64 20 72 65 63 72 65 61 74  lete and recreat
19980 65 20 69 6e 64 69 63 65 73 20 66 72 6f 6d 20 73  e indices from s
19990 63 72 61 74 63 68 2e 0a 54 68 69 73 20 69 73 20  cratch..This is 
199a0 75 73 65 66 75 6c 20 77 68 65 6e 20 74 68 65 20  useful when the 
199b0 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
199c0 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
199d0 63 65 20 68 61 73 20 63 68 61 6e 67 65 64 2e 0a  ce has changed..
199e0 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 20 74 68 65  </p>..<p>^In the
199f0 20 66 69 72 73 74 20 66 6f 72 6d 2c 20 61 6c 6c   first form, all
19a00 20 69 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c 20   indices in all 
19a10 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
19a20 65 73 20 74 68 61 74 20 75 73 65 20 74 68 65 0a  es that use the.
19a30 6e 61 6d 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20  named collation 
19a40 73 65 71 75 65 6e 63 65 20 61 72 65 20 72 65 63  sequence are rec
19a50 72 65 61 74 65 64 2e 20 5e 28 49 6e 20 74 68 65  reated. ^(In the
19a60 20 73 65 63 6f 6e 64 20 66 6f 72 6d 2c 20 69 66   second form, if
19a70 20 0a 3c 69 3e 26 23 39 31 3b 64 61 74 61 62 61   .<i>&#91;databa
19a80 73 65 2d 6e 61 6d 65 2e 26 23 39 33 3b 74 61 62  se-name.&#93;tab
19a90 6c 65 2f 69 6e 64 65 78 2d 6e 61 6d 65 3c 2f 69  le/index-name</i
19aa0 3e 20 69 64 65 6e 74 69 66 69 65 73 20 61 20 74  > identifies a t
19ab0 61 62 6c 65 2c 0a 74 68 65 6e 20 61 6c 6c 20 69  able,.then all i
19ac0 6e 64 69 63 65 73 0a 61 73 73 6f 63 69 61 74 65  ndices.associate
19ad0 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65  d with the table
19ae0 20 61 72 65 20 72 65 62 75 69 6c 74 2e 29 5e 20   are rebuilt.)^ 
19af0 5e 49 66 20 61 6e 20 69 6e 64 65 78 20 69 73 20  ^If an index is 
19b00 69 64 65 6e 74 69 66 69 65 64 2c 20 74 68 65 6e  identified, then
19b10 20 6f 6e 6c 79 0a 74 68 69 73 20 73 70 65 63 69   only.this speci
19b20 66 69 63 20 69 6e 64 65 78 20 69 73 20 64 65 6c  fic index is del
19b30 65 74 65 64 20 61 6e 64 20 72 65 63 72 65 61 74  eted and recreat
19b40 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66  ed..</p>..<p>^If
19b50 20 6e 6f 20 3c 69 3e 64 61 74 61 62 61 73 65 2d   no <i>database-
19b60 6e 61 6d 65 3c 2f 69 3e 20 69 73 20 73 70 65 63  name</i> is spec
19b70 69 66 69 65 64 20 61 6e 64 20 74 68 65 72 65 20  ified and there 
19b80 65 78 69 73 74 73 20 62 6f 74 68 20 61 20 74 61  exists both a ta
19b90 62 6c 65 20 6f 72 0a 69 6e 64 65 78 20 61 6e 64  ble or.index and
19ba0 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71   a collation seq
19bb0 75 65 6e 63 65 20 6f 66 20 74 68 65 20 73 70 65  uence of the spe
19bc0 63 69 66 69 65 64 20 6e 61 6d 65 2c 20 74 68 65  cified name, the
19bd0 6e 20 69 6e 64 69 63 65 73 20 61 73 73 6f 63 69  n indices associ
19be0 61 74 65 64 0a 77 69 74 68 20 74 68 65 20 63 6f  ated.with the co
19bf0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
19c00 20 6f 6e 6c 79 20 61 72 65 20 72 65 63 6f 6e 73   only are recons
19c10 74 72 75 63 74 65 64 2e 20 54 68 69 73 20 61 6d  tructed. This am
19c20 62 69 67 75 69 74 79 20 6d 61 79 20 62 65 0a 64  biguity may be.d
19c30 69 73 70 65 6c 6c 65 64 20 62 79 20 61 6c 77 61  ispelled by alwa
19c40 79 73 20 73 70 65 63 69 66 79 69 6e 67 20 61 20  ys specifying a 
19c50 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  <i>database-name
19c60 3c 2f 69 3e 20 77 68 65 6e 20 72 65 69 6e 64 65  </i> when reinde
19c70 78 69 6e 67 20 61 0a 73 70 65 63 69 66 69 63 20  xing a.specific 
19c80 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a  table or index..
19c90 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
19ca0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19cb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19cc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19cd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19ce0 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 52  ######.Section R
19cf0 45 50 4c 41 43 45 20 72 65 70 6c 61 63 65 20 52  EPLACE replace R
19d00 45 50 4c 41 43 45 0a 0a 3c 2f 74 63 6c 3e 0a 0a  EPLACE..</tcl>..
19d10 3c 70 3e 5e 54 68 65 20 52 45 50 4c 41 43 45 20  <p>^The REPLACE 
19d20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 6e 20 61 6c  command is an al
19d30 69 61 73 20 66 6f 72 20 74 68 65 20 22 5b 4f 4e  ias for the "[ON
19d40 20 43 4f 4e 46 4c 49 43 54 20 7c 20 49 4e 53 45   CONFLICT | INSE
19d50 52 54 20 4f 52 20 52 45 50 4c 41 43 45 5d 22 0a  RT OR REPLACE]".
19d60 76 61 72 69 61 6e 74 20 6f 66 20 74 68 65 20 5b  variant of the [
19d70 49 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e 64 2e  INSERT] command.
19d80 20 20 0a 54 68 69 73 20 61 6c 69 61 73 20 69 73    .This alias is
19d90 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 63 6f   provided for co
19da0 6d 70 61 74 69 62 69 6c 69 74 79 20 6f 74 68 65  mpatibility othe
19db0 72 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65  r SQL database e
19dc0 6e 67 69 6e 65 73 2e 20 20 53 65 65 20 74 68 65  ngines.  See the
19dd0 20 0a 5b 49 4e 53 45 52 54 5d 20 63 6f 6d 6d 61   .[INSERT] comma
19de0 6e 64 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  nd documentation
19df0 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
19e00 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e  information.</p>
19e10 20 20 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23    ..<tcl>.######
19e20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19e30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19e40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19e50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19e60 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
19e70 6e 20 53 45 4c 45 43 54 20 73 65 6c 65 63 74 20  n SELECT select 
19e80 7b 53 45 4c 45 43 54 20 71 75 65 72 79 7d 0a 0a  {SELECT query}..
19e90 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 65  BubbleDiagram se
19ea0 6c 65 63 74 2d 73 74 6d 74 20 31 0a 42 75 62 62  lect-stmt 1.Bubb
19eb0 6c 65 44 69 61 67 72 61 6d 20 73 65 6c 65 63 74  leDiagram select
19ec0 2d 63 6f 72 65 0a 42 75 62 62 6c 65 44 69 61 67  -core.BubbleDiag
19ed0 72 61 6d 20 72 65 73 75 6c 74 2d 63 6f 6c 75 6d  ram result-colum
19ee0 6e 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  n.BubbleDiagram 
19ef0 6a 6f 69 6e 2d 73 6f 75 72 63 65 0a 42 75 62 62  join-source.Bubb
19f00 6c 65 44 69 61 67 72 61 6d 20 73 69 6e 67 6c 65  leDiagram single
19f10 2d 73 6f 75 72 63 65 0a 42 75 62 62 6c 65 44 69  -source.BubbleDi
19f20 61 67 72 61 6d 20 6a 6f 69 6e 2d 6f 70 0a 42 75  agram join-op.Bu
19f30 62 62 6c 65 44 69 61 67 72 61 6d 20 6a 6f 69 6e  bbleDiagram join
19f40 2d 63 6f 6e 73 74 72 61 69 6e 74 0a 42 75 62 62  -constraint.Bubb
19f50 6c 65 44 69 61 67 72 61 6d 20 6f 72 64 65 72 69  leDiagram orderi
19f60 6e 67 2d 74 65 72 6d 0a 42 75 62 62 6c 65 44 69  ng-term.BubbleDi
19f70 61 67 72 61 6d 20 63 6f 6d 70 6f 75 6e 64 2d 6f  agram compound-o
19f80 70 65 72 61 74 6f 72 0a 3c 2f 74 63 6c 3e 0a 0a  perator.</tcl>..
19f90 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20 73 74  <p>The SELECT st
19fa0 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20  atement is used 
19fb0 74 6f 20 71 75 65 72 79 20 74 68 65 20 64 61 74  to query the dat
19fc0 61 62 61 73 65 2e 20 20 5e 54 68 65 0a 72 65 73  abase.  ^The.res
19fd0 75 6c 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20  ult of a SELECT 
19fe0 69 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  is zero or more 
19ff0 72 6f 77 73 20 6f 66 20 64 61 74 61 20 77 68 65  rows of data whe
1a000 72 65 20 65 61 63 68 20 72 6f 77 0a 68 61 73 20  re each row.has 
1a010 61 20 66 69 78 65 64 20 6e 75 6d 62 65 72 20 6f  a fixed number o
1a020 66 20 63 6f 6c 75 6d 6e 73 2e 20 20 5e 54 68 65  f columns.  ^The
1a030 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
1a040 6e 73 20 69 6e 20 74 68 65 0a 72 65 73 75 6c 74  ns in the.result
1a050 20 69 73 20 73 70 65 63 69 66 69 65 64 20 62 79   is specified by
1a060 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
1a070 6c 69 73 74 20 69 6e 20 62 65 74 77 65 65 6e 20  list in between 
1a080 74 68 65 0a 53 45 4c 45 43 54 20 61 6e 64 20 46  the.SELECT and F
1a090 52 4f 4d 20 6b 65 79 77 6f 72 64 73 2e 20 20 5e  ROM keywords.  ^
1a0a0 41 6e 79 20 61 72 62 69 74 72 61 72 79 20 65 78  Any arbitrary ex
1a0b0 70 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65 20  pression can be 
1a0c0 75 73 65 64 0a 61 73 20 61 20 72 65 73 75 6c 74  used.as a result
1a0d0 2e 20 20 5e 49 66 20 61 20 72 65 73 75 6c 74 20  .  ^If a result 
1a0e0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 7d 0a  expression is }.
1a0f0 68 64 5f 70 75 74 73 20 22 5b 4f 70 65 72 61 74  hd_puts "[Operat
1a100 6f 72 20 2a 5d 20 74 68 65 6e 20 61 6c 6c 20 63  or *] then all c
1a110 6f 6c 75 6d 6e 73 20 6f 66 20 61 6c 6c 20 74 61  olumns of all ta
1a120 62 6c 65 73 20 61 72 65 20 73 75 62 73 74 69 74  bles are substit
1a130 75 74 65 64 5c 6e 22 0a 68 64 5f 70 75 74 73 20  uted\n".hd_puts 
1a140 22 66 6f 72 20 74 68 61 74 20 6f 6e 65 20 65 78  "for that one ex
1a150 70 72 65 73 73 69 6f 6e 2e 20 20 5e 28 49 66 20  pression.  ^(If 
1a160 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
1a170 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 5c 6e 22  s the name of\n"
1a180 0a 68 64 5f 70 75 74 73 20 22 61 20 74 61 62 6c  .hd_puts "a tabl
1a190 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 5b 4f  e followed by [O
1a1a0 70 65 72 61 74 6f 72 20 2e 2a 5d 20 74 68 65 6e  perator .*] then
1a1b0 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   the result is a
1a1c0 6c 6c 20 63 6f 6c 75 6d 6e 73 5c 6e 22 0a 68 64  ll columns\n".hd
1a1d0 5f 70 75 74 73 20 7b 69 6e 20 74 68 61 74 20 6f  _puts {in that o
1a1e0 6e 65 20 74 61 62 6c 65 2e 3c 2f 70 3e 29 5e 0a  ne table.</p>)^.
1a1f0 0a 3c 70 3e 5e 54 68 65 20 44 49 53 54 49 4e 43  .<p>^The DISTINC
1a200 54 20 6b 65 79 77 6f 72 64 20 63 61 75 73 65 73  T keyword causes
1a210 20 61 20 73 75 62 73 65 74 20 6f 66 20 72 65 73   a subset of res
1a220 75 6c 74 20 72 6f 77 73 20 74 6f 20 62 65 20 72  ult rows to be r
1a230 65 74 75 72 6e 65 64 2c 20 0a 69 6e 20 77 68 69  eturned, .in whi
1a240 63 68 20 65 61 63 68 20 72 65 73 75 6c 74 20 72  ch each result r
1a250 6f 77 20 69 73 20 64 69 66 66 65 72 65 6e 74 2e  ow is different.
1a260 20 20 5e 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61    ^NULL values a
1a270 72 65 20 6e 6f 74 20 74 72 65 61 74 65 64 20 61  re not treated a
1a280 73 20 0a 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  s .distinct from
1a290 20 65 61 63 68 20 6f 74 68 65 72 2e 20 20 5e 54   each other.  ^T
1a2a0 68 65 20 64 65 66 61 75 6c 74 20 62 65 68 61 76  he default behav
1a2b0 69 6f 72 20 69 73 20 74 68 61 74 20 61 6c 6c 20  ior is that all 
1a2c0 72 65 73 75 6c 74 20 72 6f 77 73 20 0a 62 65 20  result rows .be 
1a2d0 72 65 74 75 72 6e 65 64 2c 20 77 68 69 63 68 20  returned, which 
1a2e0 63 61 6e 20 62 65 20 6d 61 64 65 20 65 78 70 6c  can be made expl
1a2f0 69 63 69 74 20 77 69 74 68 20 74 68 65 20 6b 65  icit with the ke
1a300 79 77 6f 72 64 20 41 4c 4c 2e 3c 2f 70 3e 0a 0a  yword ALL.</p>..
1a310 3c 70 3e 5e 54 68 65 20 71 75 65 72 79 20 69 73  <p>^The query is
1a320 20 65 78 65 63 75 74 65 64 20 61 67 61 69 6e 73   executed agains
1a330 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61  t one or more ta
1a340 62 6c 65 73 20 73 70 65 63 69 66 69 65 64 20 61  bles specified a
1a350 66 74 65 72 0a 74 68 65 20 46 52 4f 4d 20 6b 65  fter.the FROM ke
1a360 79 77 6f 72 64 2e 20 20 5e 49 66 20 6d 75 6c 74  yword.  ^If mult
1a370 69 70 6c 65 20 74 61 62 6c 65 73 20 6e 61 6d 65  iple tables name
1a380 73 20 61 72 65 20 73 65 70 61 72 61 74 65 64 20  s are separated 
1a390 62 79 20 63 6f 6d 6d 61 73 2c 0a 74 68 65 6e 20  by commas,.then 
1a3a0 74 68 65 20 71 75 65 72 79 20 69 73 20 61 67 61  the query is aga
1a3b0 69 6e 73 74 20 74 68 65 20 63 72 6f 73 73 20 6a  inst the cross j
1a3c0 6f 69 6e 20 6f 66 20 74 68 65 20 76 61 72 69 6f  oin of the vario
1a3d0 75 73 20 74 61 62 6c 65 73 2e 0a 5e 54 68 65 20  us tables..^The 
1a3e0 66 75 6c 6c 20 53 51 4c 2d 39 32 20 6a 6f 69 6e  full SQL-92 join
1a3f0 20 73 79 6e 74 61 78 20 63 61 6e 20 61 6c 73 6f   syntax can also
1a400 20 62 65 20 75 73 65 64 20 74 6f 20 73 70 65 63   be used to spec
1a410 69 66 79 20 6a 6f 69 6e 73 2e 0a 5e 41 20 73 75  ify joins..^A su
1a420 62 2d 71 75 65 72 79 0a 69 6e 20 70 61 72 65 6e  b-query.in paren
1a430 74 68 65 73 65 73 20 6d 61 79 20 62 65 20 73 75  theses may be su
1a440 62 73 74 69 74 75 74 65 64 20 66 6f 72 20 61 6e  bstituted for an
1a450 79 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20  y table name in 
1a460 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e  the FROM clause.
1a470 0a 5e 54 68 65 20 65 6e 74 69 72 65 20 46 52 4f  .^The entire FRO
1a480 4d 20 63 6c 61 75 73 65 20 6d 61 79 20 62 65 20  M clause may be 
1a490 6f 6d 69 74 74 65 64 2c 20 69 6e 20 77 68 69 63  omitted, in whic
1a4a0 68 20 63 61 73 65 20 74 68 65 20 72 65 73 75 6c  h case the resul
1a4b0 74 20 69 73 20 61 0a 73 69 6e 67 6c 65 20 72 6f  t is a.single ro
1a4c0 77 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20  w consisting of 
1a4d0 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 74 68  the values of th
1a4e0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73  e expression lis
1a4f0 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  t..</p>..<p>^The
1a500 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 61   WHERE clause ca
1a510 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6c 69 6d  n be used to lim
1a520 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  it the number of
1a530 20 72 6f 77 73 20 6f 76 65 72 0a 77 68 69 63 68   rows over.which
1a540 20 74 68 65 20 71 75 65 72 79 20 6f 70 65 72 61   the query opera
1a550 74 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  tes.</p>..<p>^Th
1a560 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  e GROUP BY claus
1a570 65 20 63 61 75 73 65 73 20 6f 6e 65 20 6f 72 20  e causes one or 
1a580 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20 74 68 65  more rows of the
1a590 20 72 65 73 75 6c 74 20 74 6f 0a 62 65 20 63 6f   result to.be co
1a5a0 6d 62 69 6e 65 64 20 69 6e 74 6f 20 61 20 73 69  mbined into a si
1a5b0 6e 67 6c 65 20 72 6f 77 20 6f 66 20 6f 75 74 70  ngle row of outp
1a5c0 75 74 2e 20 20 54 68 69 73 20 69 73 20 65 73 70  ut.  This is esp
1a5d0 65 63 69 61 6c 6c 79 20 75 73 65 66 75 6c 0a 77  ecially useful.w
1a5e0 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 63  hen the result c
1a5f0 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74  ontains aggregat
1a600 65 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 5e 54  e functions.  ^T
1a610 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  he expressions i
1a620 6e 0a 74 68 65 20 47 52 4f 55 50 20 42 59 20 63  n.the GROUP BY c
1a630 6c 61 75 73 65 20 64 6f 20 3c 65 6d 3e 6e 6f 74  lause do <em>not
1a640 3c 2f 65 6d 3e 20 68 61 76 65 20 74 6f 20 62 65  </em> have to be
1a650 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61   expressions tha
1a660 74 0a 61 70 70 65 61 72 20 69 6e 20 74 68 65 20  t.appear in the 
1a670 72 65 73 75 6c 74 2e 20 20 5e 54 68 65 20 48 41  result.  ^The HA
1a680 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 73  VING clause is s
1a690 69 6d 69 6c 61 72 20 74 6f 20 57 48 45 52 45 20  imilar to WHERE 
1a6a0 65 78 63 65 70 74 0a 74 68 61 74 20 48 41 56 49  except.that HAVI
1a6b0 4e 47 20 61 70 70 6c 69 65 73 20 61 66 74 65 72  NG applies after
1a6c0 20 67 72 6f 75 70 69 6e 67 20 68 61 73 20 6f 63   grouping has oc
1a6d0 63 75 72 72 65 64 2e 20 20 5e 54 68 65 20 48 41  curred.  ^The HA
1a6e0 56 49 4e 47 20 65 78 70 72 65 73 73 69 6f 6e 0a  VING expression.
1a6f0 6d 61 79 20 72 65 66 65 72 20 74 6f 20 76 61 6c  may refer to val
1a700 75 65 73 2c 20 65 76 65 6e 20 61 67 67 72 65 67  ues, even aggreg
1a710 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74  ate functions, t
1a720 68 61 74 20 61 72 65 20 6e 6f 74 20 69 6e 20 74  hat are not in t
1a730 68 65 20 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a  he result.</p>..
1a740 3c 70 3e 5e 54 68 65 20 4f 52 44 45 52 20 42 59  <p>^The ORDER BY
1a750 20 63 6c 61 75 73 65 20 63 61 75 73 65 73 20 74   clause causes t
1a760 68 65 20 6f 75 74 70 75 74 20 72 6f 77 73 20 74  he output rows t
1a770 6f 20 62 65 20 73 6f 72 74 65 64 2e 20 20 0a 5e  o be sorted.  .^
1a780 54 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  The argument to 
1a790 4f 52 44 45 52 20 42 59 20 69 73 20 61 20 6c 69  ORDER BY is a li
1a7a0 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
1a7b0 73 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  s that are used 
1a7c0 61 73 20 74 68 65 0a 6b 65 79 20 66 6f 72 20 74  as the.key for t
1a7d0 68 65 20 73 6f 72 74 2e 20 20 5e 54 68 65 20 65  he sort.  ^The e
1a7e0 78 70 72 65 73 73 69 6f 6e 73 20 64 6f 20 6e 6f  xpressions do no
1a7f0 74 20 68 61 76 65 20 74 6f 20 62 65 20 70 61 72  t have to be par
1a800 74 20 6f 66 20 74 68 65 0a 72 65 73 75 6c 74 20  t of the.result 
1a810 66 6f 72 20 61 20 73 69 6d 70 6c 65 20 53 45 4c  for a simple SEL
1a820 45 43 54 2c 20 62 75 74 20 69 6e 20 61 20 63 6f  ECT, but in a co
1a830 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 65 61  mpound SELECT ea
1a840 63 68 20 73 6f 72 74 0a 65 78 70 72 65 73 73 69  ch sort.expressi
1a850 6f 6e 20 6d 75 73 74 20 65 78 61 63 74 6c 79 20  on must exactly 
1a860 6d 61 74 63 68 20 6f 6e 65 20 6f 66 20 74 68 65  match one of the
1a870 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 2e   result columns.
1a880 20 20 5e 45 61 63 68 0a 73 6f 72 74 20 65 78 70    ^Each.sort exp
1a890 72 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 6f  ression may be o
1a8a0 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77  ptionally follow
1a8b0 65 64 20 62 79 20 61 20 43 4f 4c 4c 41 54 45 20  ed by a COLLATE 
1a8c0 6b 65 79 77 6f 72 64 20 61 6e 64 0a 74 68 65 20  keyword and.the 
1a8d0 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6c 6c 61 74  name of a collat
1a8e0 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 75 73 65  ing function use
1a8f0 64 20 66 6f 72 20 6f 72 64 65 72 69 6e 67 20 74  d for ordering t
1a900 65 78 74 20 61 6e 64 2f 6f 72 0a 6b 65 79 77 6f  ext and/or.keywo
1a910 72 64 73 20 41 53 43 20 6f 72 20 44 45 53 43 20  rds ASC or DESC 
1a920 74 6f 20 73 70 65 63 69 66 79 20 74 68 65 20 73  to specify the s
1a930 6f 72 74 20 6f 72 64 65 72 2e 3c 2f 70 3e 0a 0a  ort order.</p>..
1a940 3c 70 3e 45 61 63 68 20 74 65 72 6d 20 6f 66 20  <p>Each term of 
1a950 61 6e 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  an ORDER BY expr
1a960 65 73 73 69 6f 6e 20 69 73 20 70 72 6f 63 65 73  ession is proces
1a970 73 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c  sed as follows:<
1a980 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70  /p>..<ol>.<li><p
1a990 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20 42  >^If the ORDER B
1a9a0 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
1a9b0 61 20 63 6f 6e 73 74 61 6e 74 20 69 6e 74 65 67  a constant integ
1a9c0 65 72 20 4b 20 74 68 65 6e 20 74 68 65 0a 6f 75  er K then the.ou
1a9d0 74 70 75 74 20 69 73 20 6f 72 64 65 72 65 64 20  tput is ordered 
1a9e0 62 79 20 74 68 65 20 4b 2d 74 68 20 63 6f 6c 75  by the K-th colu
1a9f0 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  mn of the result
1aa00 20 73 65 74 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c   set.</p></li>.<
1aa10 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52  li><p>^If the OR
1aa20 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
1aa30 6e 20 69 73 20 61 6e 20 69 64 65 6e 74 69 66 69  n is an identifi
1aa40 65 72 20 61 6e 64 20 6f 6e 65 20 6f 66 20 74 68  er and one of th
1aa50 65 0a 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73  e.output columns
1aa60 20 68 61 73 20 61 6e 20 61 6c 69 61 73 20 62 79   has an alias by
1aa70 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2c 20   the same name, 
1aa80 74 68 65 6e 20 74 68 65 20 6f 75 74 70 75 74 20  then the output 
1aa90 69 73 0a 6f 72 64 65 72 65 64 20 62 79 20 74 68  is.ordered by th
1aaa0 65 20 69 64 65 6e 74 69 66 69 65 64 20 63 6f 6c  e identified col
1aab0 75 6d 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 6c  umn.</p></li>.<l
1aac0 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c  i><p>^Otherwise,
1aad0 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78   the ORDER BY ex
1aae0 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c  pression is eval
1aaf0 75 61 74 65 64 20 61 6e 64 20 74 68 65 20 6f 75  uated and the ou
1ab00 74 70 75 74 20 0a 69 73 20 6f 72 64 65 72 65 64  tput .is ordered
1ab10 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 6f 66   by the value of
1ab20 20 74 68 61 74 20 65 78 70 72 65 73 73 69 6f 6e   that expression
1ab30 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e  .</p></li>.</ol>
1ab40 0a 0a 3c 70 3e 5e 49 6e 20 61 20 63 6f 6d 70 6f  ..<p>^In a compo
1ab50 75 6e 64 20 53 45 4c 45 43 54 20 73 74 61 74 65  und SELECT state
1ab60 6d 65 6e 74 2c 20 74 68 65 20 74 68 69 72 64 20  ment, the third 
1ab70 4f 52 44 45 52 20 42 59 20 6d 61 74 63 68 69 6e  ORDER BY matchin
1ab80 67 20 72 75 6c 65 0a 72 65 71 75 69 72 65 73 20  g rule.requires 
1ab90 74 68 61 74 20 74 68 65 20 65 78 70 72 65 73 73  that the express
1aba0 69 6f 6e 20 62 65 20 69 64 65 6e 74 69 63 61 6c  ion be identical
1abb0 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 63   to one of the c
1abc0 6f 6c 75 6d 6e 73 20 69 6e 0a 74 68 65 20 72 65  olumns in.the re
1abd0 73 75 6c 74 20 73 65 74 2e 20 20 5e 28 54 68 65  sult set.  ^(The
1abe0 20 74 68 72 65 65 20 72 75 6c 65 73 20 61 72 65   three rules are
1abf0 20 66 69 72 73 74 20 61 70 70 6c 69 65 64 20 74   first applied t
1ac00 6f 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 0a  o the left-most.
1ac10 53 45 4c 45 43 54 20 69 6e 20 74 68 65 20 63 6f  SELECT in the co
1ac20 6d 70 6f 75 6e 64 2e 20 20 49 66 20 61 20 6d 61  mpound.  If a ma
1ac30 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
1ac40 65 20 73 65 61 72 63 68 20 73 74 6f 70 73 2e 20  e search stops. 
1ac50 20 4f 74 68 65 72 77 69 73 65 2c 0a 74 68 65 20   Otherwise,.the 
1ac60 6e 65 78 74 20 53 45 4c 45 43 54 20 74 6f 20 74  next SELECT to t
1ac70 68 65 20 72 69 67 68 74 20 69 73 20 74 72 69 65  he right is trie
1ac80 64 2e 20 20 54 68 69 73 20 63 6f 6e 74 69 6e 75  d.  This continu
1ac90 65 73 20 75 6e 74 69 6c 20 61 20 6d 61 74 63 68  es until a match
1aca0 0a 69 73 20 66 6f 75 6e 64 2e 29 5e 20 20 5e 45  .is found.)^  ^E
1acb0 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20  ach term of the 
1acc0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
1acd0 69 73 20 70 72 6f 63 65 73 73 65 64 20 73 65 70  is processed sep
1ace0 61 72 61 74 65 6c 79 20 0a 61 6e 64 20 6d 61 79  arately .and may
1acf0 20 63 6f 6d 65 20 66 72 6f 6d 20 64 69 66 66 65   come from diffe
1ad00 72 65 6e 74 20 53 45 4c 45 43 54 20 73 74 61 74  rent SELECT stat
1ad10 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f  ements in the co
1ad20 6d 70 6f 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  mpound.</p>..<p>
1ad30 5e 54 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73  ^The LIMIT claus
1ad40 65 20 70 6c 61 63 65 73 20 61 6e 20 75 70 70 65  e places an uppe
1ad50 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e  r bound on the n
1ad60 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a 72 65  umber of rows.re
1ad70 74 75 72 6e 65 64 20 69 6e 20 74 68 65 20 72 65  turned in the re
1ad80 73 75 6c 74 2e 20 20 5e 41 20 6e 65 67 61 74 69  sult.  ^A negati
1ad90 76 65 20 4c 49 4d 49 54 20 69 6e 64 69 63 61 74  ve LIMIT indicat
1ada0 65 73 20 6e 6f 20 75 70 70 65 72 20 62 6f 75 6e  es no upper boun
1adb0 64 2e 0a 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c  d..^The optional
1adc0 20 4f 46 46 53 45 54 20 66 6f 6c 6c 6f 77 69 6e   OFFSET followin
1add0 67 20 4c 49 4d 49 54 20 73 70 65 63 69 66 69 65  g LIMIT specifie
1ade0 73 20 68 6f 77 20 6d 61 6e 79 0a 72 6f 77 73 20  s how many.rows 
1adf0 74 6f 20 73 6b 69 70 20 61 74 20 74 68 65 20 62  to skip at the b
1ae00 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
1ae10 72 65 73 75 6c 74 20 73 65 74 2e 0a 5e 49 6e 20  result set..^In 
1ae20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79  a compound query
1ae30 2c 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75  , the LIMIT clau
1ae40 73 65 20 6d 61 79 20 6f 6e 6c 79 20 61 70 70 65  se may only appe
1ae50 61 72 20 6f 6e 20 74 68 65 0a 66 69 6e 61 6c 20  ar on the.final 
1ae60 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1ae70 2e 0a 5e 54 68 65 20 6c 69 6d 69 74 20 69 73 20  ..^The limit is 
1ae80 61 70 70 6c 69 65 64 20 74 6f 20 74 68 65 20 65  applied to the e
1ae90 6e 74 69 72 65 20 71 75 65 72 79 20 6e 6f 74 0a  ntire query not.
1aea0 74 6f 20 74 68 65 20 69 6e 64 69 76 69 64 75 61  to the individua
1aeb0 6c 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  l SELECT stateme
1aec0 6e 74 20 74 6f 20 77 68 69 63 68 20 69 74 20 69  nt to which it i
1aed0 73 20 61 74 74 61 63 68 65 64 2e 0a 5e 4e 6f 74  s attached..^Not
1aee0 65 20 74 68 61 74 20 69 66 20 74 68 65 20 4f 46  e that if the OF
1aef0 46 53 45 54 20 6b 65 79 77 6f 72 64 20 69 73 20  FSET keyword is 
1af00 75 73 65 64 20 69 6e 20 74 68 65 20 4c 49 4d 49  used in the LIMI
1af10 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74  T clause, then t
1af20 68 65 0a 6c 69 6d 69 74 20 69 73 20 74 68 65 20  he.limit is the 
1af30 66 69 72 73 74 20 6e 75 6d 62 65 72 20 61 6e 64  first number and
1af40 20 74 68 65 20 6f 66 66 73 65 74 20 69 73 20 74   the offset is t
1af50 68 65 20 73 65 63 6f 6e 64 20 6e 75 6d 62 65 72  he second number
1af60 2e 20 20 5e 49 66 20 61 0a 63 6f 6d 6d 61 20 69  .  ^If a.comma i
1af70 73 20 75 73 65 64 20 69 6e 73 74 65 61 64 20 6f  s used instead o
1af80 66 20 74 68 65 20 4f 46 46 53 45 54 20 6b 65 79  f the OFFSET key
1af90 77 6f 72 64 2c 20 74 68 65 6e 20 74 68 65 20 6f  word, then the o
1afa0 66 66 73 65 74 20 69 73 20 74 68 65 0a 66 69 72  ffset is the.fir
1afb0 73 74 20 6e 75 6d 62 65 72 20 61 6e 64 20 74 68  st number and th
1afc0 65 20 6c 69 6d 69 74 20 69 73 20 74 68 65 20 73  e limit is the s
1afd0 65 63 6f 6e 64 20 6e 75 6d 62 65 72 2e 20 20 54  econd number.  T
1afe0 68 69 73 20 73 65 65 6d 69 6e 67 0a 63 6f 6e 74  his seeming.cont
1aff0 72 61 64 69 63 74 69 6f 6e 20 69 73 20 69 6e 74  radiction is int
1b000 65 6e 74 69 6f 6e 61 6c 20 2d 20 69 74 20 6d 61  entional - it ma
1b010 78 69 6d 69 7a 65 73 20 63 6f 6d 70 61 74 69 62  ximizes compatib
1b020 69 6c 69 74 79 20 77 69 74 68 20 6c 65 67 61 63  ility with legac
1b030 79 0a 53 51 4c 20 64 61 74 61 62 61 73 65 20 73  y.SQL database s
1b040 79 73 74 65 6d 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70  ystems..</p>..<p
1b050 3e 5e 41 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c  >^A compound SEL
1b060 45 43 54 20 69 73 20 66 6f 72 6d 65 64 20 66 72  ECT is formed fr
1b070 6f 6d 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 73  om two or more s
1b080 69 6d 70 6c 65 20 53 45 4c 45 43 54 73 20 63 6f  imple SELECTs co
1b090 6e 6e 65 63 74 65 64 0a 62 79 20 6f 6e 65 20 6f  nnected.by one o
1b0a0 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 73 20  f the operators 
1b0b0 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c  UNION, UNION ALL
1b0c0 2c 20 49 4e 54 45 52 53 45 43 54 2c 20 6f 72 20  , INTERSECT, or 
1b0d0 45 58 43 45 50 54 2e 20 20 5e 49 6e 0a 61 20 63  EXCEPT.  ^In.a c
1b0e0 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20  ompound SELECT, 
1b0f0 61 6c 6c 20 74 68 65 20 63 6f 6e 73 74 69 74 75  all the constitu
1b100 65 6e 74 20 53 45 4c 45 43 54 73 20 6d 75 73 74  ent SELECTs must
1b110 20 73 70 65 63 69 66 79 20 74 68 65 0a 73 61 6d   specify the.sam
1b120 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75  e number of resu
1b130 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20 20 5e 54 68  lt columns.  ^Th
1b140 65 72 65 20 6d 61 79 20 62 65 20 6f 6e 6c 79 20  ere may be only 
1b150 61 20 73 69 6e 67 6c 65 20 4f 52 44 45 52 20 42  a single ORDER B
1b160 59 0a 63 6c 61 75 73 65 20 61 74 20 74 68 65 20  Y.clause at the 
1b170 65 6e 64 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f  end of the compo
1b180 75 6e 64 20 53 45 4c 45 43 54 2e 20 20 5e 54 68  und SELECT.  ^Th
1b190 65 20 55 4e 49 4f 4e 20 61 6e 64 20 55 4e 49 4f  e UNION and UNIO
1b1a0 4e 20 41 4c 4c 0a 6f 70 65 72 61 74 6f 72 73 20  N ALL.operators 
1b1b0 63 6f 6d 62 69 6e 65 20 74 68 65 20 72 65 73 75  combine the resu
1b1c0 6c 74 73 20 6f 66 20 74 68 65 20 53 45 4c 45 43  lts of the SELEC
1b1d0 54 73 20 74 6f 20 74 68 65 20 72 69 67 68 74 20  Ts to the right 
1b1e0 61 6e 64 20 6c 65 66 74 20 69 6e 74 6f 0a 61 20  and left into.a 
1b1f0 73 69 6e 67 6c 65 20 62 69 67 20 74 61 62 6c 65  single big table
1b200 2e 20 20 5e 54 68 65 20 64 69 66 66 65 72 65 6e  .  ^The differen
1b210 63 65 20 69 73 20 74 68 61 74 20 69 6e 20 55 4e  ce is that in UN
1b220 49 4f 4e 20 61 6c 6c 20 72 65 73 75 6c 74 20 72  ION all result r
1b230 6f 77 73 0a 61 72 65 20 64 69 73 74 69 6e 63 74  ows.are distinct
1b240 20 77 68 65 72 65 20 69 6e 20 55 4e 49 4f 4e 20   where in UNION 
1b250 41 4c 4c 20 74 68 65 72 65 20 6d 61 79 20 62 65  ALL there may be
1b260 20 64 75 70 6c 69 63 61 74 65 73 2e 0a 5e 54 68   duplicates..^Th
1b270 65 20 49 4e 54 45 52 53 45 43 54 20 6f 70 65 72  e INTERSECT oper
1b280 61 74 6f 72 20 74 61 6b 65 73 20 74 68 65 20 69  ator takes the i
1b290 6e 74 65 72 73 65 63 74 69 6f 6e 20 6f 66 20 74  ntersection of t
1b2a0 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
1b2b0 65 0a 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e.left and right
1b2c0 20 53 45 4c 45 43 54 73 2e 20 20 5e 45 58 43 45   SELECTs.  ^EXCE
1b2d0 50 54 20 74 61 6b 65 73 20 74 68 65 20 72 65 73  PT takes the res
1b2e0 75 6c 74 20 6f 66 20 6c 65 66 74 20 53 45 4c 45  ult of left SELE
1b2f0 43 54 20 61 66 74 65 72 0a 72 65 6d 6f 76 69 6e  CT after.removin
1b300 67 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  g the results of
1b310 20 74 68 65 20 72 69 67 68 74 20 53 45 4c 45 43   the right SELEC
1b320 54 2e 20 20 5e 57 68 65 6e 20 74 68 72 65 65 20  T.  ^When three 
1b330 6f 72 20 6d 6f 72 65 20 53 45 4c 45 43 54 73 0a  or more SELECTs.
1b340 61 72 65 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e  are connected in
1b350 74 6f 20 61 20 63 6f 6d 70 6f 75 6e 64 2c 20 74  to a compound, t
1b360 68 65 79 20 67 72 6f 75 70 20 66 72 6f 6d 20 6c  hey group from l
1b370 65 66 74 20 74 6f 20 72 69 67 68 74 2e 3c 2f 70  eft to right.</p
1b380 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  >...<tcl>.######
1b390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b3a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b3b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b3c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b3d0 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
1b3e0 20 55 50 44 41 54 45 20 75 70 64 61 74 65 20 7b   UPDATE update {
1b3f0 55 50 44 41 54 45 20 2a 55 50 44 41 54 45 73 7d  UPDATE *UPDATEs}
1b400 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
1b410 75 70 64 61 74 65 2d 73 74 6d 74 20 31 0a 42 75  update-stmt 1.Bu
1b420 62 62 6c 65 44 69 61 67 72 61 6d 20 71 75 61 6c  bbleDiagram qual
1b430 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65  ified-table-name
1b440 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
1b450 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
1b460 74 20 69 73 20 75 73 65 64 20 74 6f 20 63 68 61  t is used to cha
1b470 6e 67 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  nge the value of
1b480 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 0a 73 65 6c   columns in .sel
1b490 65 63 74 65 64 20 72 6f 77 73 20 6f 66 20 61 20  ected rows of a 
1b4a0 74 61 62 6c 65 2e 20 20 5e 45 61 63 68 20 61 73  table.  ^Each as
1b4b0 73 69 67 6e 6d 65 6e 74 20 69 6e 20 61 6e 20 55  signment in an U
1b4c0 50 44 41 54 45 20 73 70 65 63 69 66 69 65 73 0a  PDATE specifies.
1b4d0 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74 6f  a column name to
1b4e0 20 74 68 65 20 6c 65 66 74 20 6f 66 20 74 68 65   the left of the
1b4f0 20 65 71 75 61 6c 73 20 73 69 67 6e 20 61 6e 64   equals sign and
1b500 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 65 78   an arbitrary ex
1b510 70 72 65 73 73 69 6f 6e 0a 74 6f 20 74 68 65 20  pression.to the 
1b520 72 69 67 68 74 2e 20 20 5e 54 68 65 20 65 78 70  right.  ^The exp
1b530 72 65 73 73 69 6f 6e 73 20 6d 61 79 20 75 73 65  ressions may use
1b540 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 6f   the values of o
1b550 74 68 65 72 20 63 6f 6c 75 6d 6e 73 2e 0a 5e 41  ther columns..^A
1b560 6c 6c 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61  ll expressions a
1b570 72 65 20 65 76 61 6c 75 61 74 65 64 20 62 65 66  re evaluated bef
1b580 6f 72 65 20 61 6e 79 20 61 73 73 69 67 6e 6d 65  ore any assignme
1b590 6e 74 73 20 61 72 65 20 6d 61 64 65 2e 0a 5e 41  nts are made..^A
1b5a0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 61   WHERE clause ca
1b5b0 6e 20 62 65 20 75 73 65 64 20 74 6f 20 72 65 73  n be used to res
1b5c0 74 72 69 63 74 20 77 68 69 63 68 20 72 6f 77 73  trict which rows
1b5d0 20 61 72 65 20 75 70 64 61 74 65 64 2e 3c 2f 70   are updated.</p
1b5e0 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f  >..<p>^The optio
1b5f0 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61  nal conflict-cla
1b600 75 73 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 73  use allows the s
1b610 70 65 63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20  pecification of 
1b620 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 0a 63  an alternative.c
1b630 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69  onstraint confli
1b640 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
1b650 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64  gorithm to use d
1b660 75 72 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 55  uring this one U
1b670 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64 2e 0a 53  PDATE command..S
1b680 65 65 20 74 68 65 20 73 65 63 74 69 6f 6e 20 74  ee the section t
1b690 69 74 6c 65 64 0a 5b 4f 4e 20 43 4f 4e 46 4c 49  itled.[ON CONFLI
1b6a0 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  CT] for addition
1b6b0 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c  al information.<
1b6c0 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63  /p>..<h3>Restric
1b6d0 74 69 6f 6e 73 20 6f 6e 20 55 50 44 41 54 45 20  tions on UPDATE 
1b6e0 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69  Statements Withi
1b6f0 6e 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  n CREATE TRIGGER
1b700 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 72 65  </h3>..<p>^There
1b710 20 61 72 65 20 61 64 64 69 74 69 6f 6e 61 6c 20   are additional 
1b720 73 79 6e 74 61 78 20 72 65 73 74 72 69 63 74 69  syntax restricti
1b730 6f 6e 73 20 6f 6e 20 55 50 44 41 54 45 20 73 74  ons on UPDATE st
1b740 61 74 65 6d 65 6e 74 73 20 74 68 61 74 0a 6f 63  atements that.oc
1b750 63 75 72 20 77 69 74 68 69 6e 20 74 68 65 20 62  cur within the b
1b760 6f 64 79 20 6f 66 20 61 20 5b 43 52 45 41 54 45  ody of a [CREATE
1b770 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d   TRIGGER] statem
1b780 65 6e 74 2e 20 20 5e 54 68 65 20 3c 69 3e 74 61  ent.  ^The <i>ta
1b790 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 0a 6f 66 20  ble-name</i>.of 
1b7a0 74 68 65 20 55 50 44 41 54 45 20 6d 75 73 74 20  the UPDATE must 
1b7b0 62 65 20 75 6e 71 75 61 6c 69 66 69 65 64 2e 20  be unqualified. 
1b7c0 0a 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .^(In other word
1b7d0 73 2c 20 74 68 65 20 3c 69 3e 64 61 74 61 62 61  s, the <i>databa
1b7e0 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c  se-name</i><b>.<
1b7f0 2f 62 3e 20 70 72 65 66 69 78 20 0a 6f 6e 20 74  /b> prefix .on t
1b800 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 20 6f 66  he table name of
1b810 20 74 68 65 20 55 50 44 41 54 45 20 69 73 20 6e   the UPDATE is n
1b820 6f 74 20 61 6c 6c 6f 77 65 64 20 77 69 74 68 69  ot allowed withi
1b830 6e 20 74 72 69 67 67 65 72 73 2e 29 5e 0a 5e 54  n triggers.)^.^T
1b840 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 75  he table to be u
1b850 70 64 61 74 65 64 20 6d 75 73 74 20 62 65 20 69  pdated must be i
1b860 6e 20 74 68 65 20 73 61 6d 65 0a 64 61 74 61 62  n the same.datab
1b870 61 73 65 20 61 73 20 74 68 65 20 74 61 62 6c 65  ase as the table
1b880 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72   to which the tr
1b890 69 67 67 65 72 20 69 73 20 61 74 74 61 63 68 65  igger is attache
1b8a0 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  d.</p>..<p>^The 
1b8b0 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64 20 4e  INDEXED BY and N
1b8c0 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73  OT INDEXED claus
1b8d0 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77  es are not allow
1b8e0 65 64 20 6f 6e 20 55 50 44 41 54 45 0a 73 74 61  ed on UPDATE.sta
1b8f0 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
1b900 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 70  riggers.</p>..<p
1b910 3e 5e 54 68 65 20 4c 49 4d 49 54 20 63 6c 61 75  >^The LIMIT clau
1b920 73 65 20 66 6f 72 20 55 50 44 41 54 45 20 69 73  se for UPDATE is
1b930 20 75 6e 73 75 70 70 6f 72 74 65 64 20 77 69 74   unsupported wit
1b940 68 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70  hin triggers.</p
1b950 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f 6e 61 6c 20  >..<h3>Optional 
1b960 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52 20  LIMIT and ORDER 
1b970 42 59 20 43 6c 61 75 73 65 73 3c 2f 68 33 3e 0a  BY Clauses</h3>.
1b980 0a 3c 70 3e 5e 28 49 66 20 53 51 4c 69 74 65 20  .<p>^(If SQLite 
1b990 69 73 20 62 75 69 6c 74 20 77 69 74 68 20 74 68  is built with th
1b9a0 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  e [SQLITE_ENABLE
1b9b0 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c  _UPDATE_DELETE_L
1b9c0 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69  IMIT].compile-ti
1b9d0 6d 65 20 6f 70 74 69 6f 6e 20 74 68 65 6e 20 74  me option then t
1b9e0 68 65 20 73 79 6e 74 61 78 20 6f 66 20 74 68 65  he syntax of the
1b9f0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
1ba00 74 20 69 73 20 65 78 74 65 6e 64 65 64 0a 77 69  t is extended.wi
1ba10 74 68 20 6f 70 74 69 6f 6e 61 6c 20 4f 52 44 45  th optional ORDE
1ba20 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63  R BY and LIMIT c
1ba30 6c 61 75 73 65 73 29 5e 20 61 73 20 66 6f 6c 6c  lauses)^ as foll
1ba40 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42  ows:</p>..<tcl>B
1ba50 75 62 62 6c 65 44 69 61 67 72 61 6d 20 75 70 64  ubbleDiagram upd
1ba60 61 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65 64  ate-stmt-limited
1ba70 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
1ba80 6f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 63  optional LIMIT c
1ba90 6c 61 75 73 65 20 63 61 6e 20 62 65 20 75 73 65  lause can be use
1baa0 64 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e  d to limit the n
1bab0 75 6d 62 65 72 20 6f 66 0a 72 6f 77 73 20 6d 6f  umber of.rows mo
1bac0 64 69 66 69 65 64 2c 20 61 6e 64 20 74 68 65 72  dified, and ther
1bad0 65 62 79 20 6c 69 6d 69 74 20 74 68 65 20 73 69  eby limit the si
1bae0 7a 65 20 6f 66 20 74 68 65 20 74 72 61 6e 73 61  ze of the transa
1baf0 63 74 69 6f 6e 2e 0a 5e 54 68 65 20 4f 52 44 45  ction..^The ORDE
1bb00 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e 20 61  R BY clause on a
1bb10 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  n UPDATE stateme
1bb20 6e 74 0a 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  nt.is used only 
1bb30 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69  to determine whi
1bb40 63 68 20 72 6f 77 73 20 66 61 6c 6c 0a 77 69 74  ch rows fall.wit
1bb50 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20 20  hin the LIMIT.  
1bb60 5e 54 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68  ^The order in wh
1bb70 69 63 68 20 72 6f 77 73 20 61 72 65 20 6d 6f 64  ich rows are mod
1bb80 69 66 69 65 64 20 69 73 20 61 72 62 69 74 72 61  ified is arbitra
1bb90 72 79 0a 61 6e 64 20 69 73 20 6e 6f 74 20 64 65  ry.and is not de
1bba0 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
1bbb0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1bbc0 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
1bbd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bbe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bbf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bc00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bc10 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
1bc20 6f 6e 20 56 41 43 55 55 4d 20 76 61 63 75 75 6d  on VACUUM vacuum
1bc30 20 56 41 43 55 55 4d 0a 0a 42 75 62 62 6c 65 44   VACUUM..BubbleD
1bc40 69 61 67 72 61 6d 20 76 61 63 75 75 6d 2d 73 74  iagram vacuum-st
1bc50 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mt 1.</tcl>..<p>
1bc60 5e 57 68 65 6e 20 61 6e 20 6f 62 6a 65 63 74 20  ^When an object 
1bc70 28 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 74  (table, index, t
1bc80 72 69 67 67 65 72 2c 20 6f 72 20 76 69 65 77 29  rigger, or view)
1bc90 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d   is dropped from
1bca0 20 74 68 65 20 0a 64 61 74 61 62 61 73 65 2c 20   the .database, 
1bcb0 69 74 20 6c 65 61 76 65 73 20 62 65 68 69 6e 64  it leaves behind
1bcc0 20 65 6d 70 74 79 20 73 70 61 63 65 2e 20 0a 5e   empty space. .^
1bcd0 54 68 69 73 20 65 6d 70 74 79 20 73 70 61 63 65  This empty space
1bce0 20 77 69 6c 6c 20 62 65 20 72 65 75 73 65 64 20   will be reused 
1bcf0 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20 6e 65  the next time ne
1bd00 77 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  w information is
1bd10 0a 61 64 64 65 64 20 74 6f 20 74 68 65 20 64 61  .added to the da
1bd20 74 61 62 61 73 65 2e 20 20 42 75 74 20 69 6e 20  tabase.  But in 
1bd30 74 68 65 20 6d 65 61 6e 74 69 6d 65 2c 20 74 68  the meantime, th
1bd40 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
1bd50 6d 69 67 68 74 0a 62 65 20 6c 61 72 67 65 72 20  might.be larger 
1bd60 74 68 61 6e 20 73 74 72 69 63 74 6c 79 20 6e 65  than strictly ne
1bd70 63 65 73 73 61 72 79 2e 20 20 41 6c 73 6f 2c 20  cessary.  Also, 
1bd80 66 72 65 71 75 65 6e 74 20 69 6e 73 65 72 74 73  frequent inserts
1bd90 2c 20 75 70 64 61 74 65 73 2c 0a 61 6e 64 20 64  , updates,.and d
1bda0 65 6c 65 74 65 73 20 63 61 6e 20 63 61 75 73 65  eletes can cause
1bdb0 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   the information
1bdc0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
1bdd0 20 74 6f 20 62 65 63 6f 6d 65 0a 66 72 61 67 6d   to become.fragm
1bde0 65 6e 74 65 64 20 2d 20 73 63 61 74 74 65 72 65  ented - scattere
1bdf0 64 20 6f 75 74 20 61 6c 6c 20 61 63 72 6f 73 73  d out all across
1be00 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
1be10 6c 65 20 72 61 74 68 65 72 0a 74 68 61 6e 20 63  le rather.than c
1be20 6c 75 73 74 65 72 65 64 20 74 6f 67 65 74 68 65  lustered togethe
1be30 72 20 69 6e 20 6f 6e 65 20 70 6c 61 63 65 2e 3c  r in one place.<
1be40 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43  /p>..<p>^The VAC
1be50 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 63 6c 65 61  UUM command clea
1be60 6e 73 0a 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ns.the main data
1be70 62 61 73 65 20 62 79 20 63 6f 70 79 69 6e 67 20  base by copying 
1be80 69 74 73 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20  its contents to 
1be90 61 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61  a temporary data
1bea0 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 0a 72  base file and .r
1beb0 65 6c 6f 61 64 69 6e 67 20 74 68 65 20 6f 72 69  eloading the ori
1bec0 67 69 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66  ginal database f
1bed0 69 6c 65 20 66 72 6f 6d 20 74 68 65 20 63 6f 70  ile from the cop
1bee0 79 2e 20 20 54 68 69 73 20 65 6c 69 6d 69 6e 61  y.  This elimina
1bef0 74 65 73 20 0a 66 72 65 65 20 70 61 67 65 73 2c  tes .free pages,
1bf00 20 20 61 6c 69 67 6e 73 20 74 61 62 6c 65 20 64    aligns table d
1bf10 61 74 61 20 74 6f 20 62 65 20 63 6f 6e 74 69 67  ata to be contig
1bf20 75 6f 75 73 2c 20 61 6e 64 20 6f 74 68 65 72 77  uous, and otherw
1bf30 69 73 65 20 63 6c 65 61 6e 73 20 0a 75 70 20 74  ise cleans .up t
1bf40 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1bf50 20 73 74 72 75 63 74 75 72 65 2e 3c 2f 70 3e 0a   structure.</p>.
1bf60 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20  .<p>^The VACUUM 
1bf70 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 63 68 61 6e  command may chan
1bf80 67 65 20 74 68 65 20 0a 5b 52 4f 57 49 44 20 7c  ge the .[ROWID |
1bf90 20 52 4f 57 49 44 73 5d 20 6f 66 20 65 6e 74 72   ROWIDs] of entr
1bfa0 69 65 73 20 69 6e 20 74 61 62 6c 65 73 20 74 68  ies in tables th
1bfb0 61 74 20 64 6f 0a 6e 6f 74 20 68 61 76 65 20 61  at do.not have a
1bfc0 6e 20 65 78 70 6c 69 63 69 74 20 5b 49 4e 54 45  n explicit [INTE
1bfd0 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d  GER PRIMARY KEY]
1bfe0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 56 41 43 55 55  .</p>..<p>^VACUU
1bff0 4d 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20  M only works on 
1c000 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
1c010 65 2e 0a 49 74 20 69 73 20 6e 6f 74 20 70 6f 73  e..It is not pos
1c020 73 69 62 6c 65 20 74 6f 20 56 41 43 55 55 4d 20  sible to VACUUM 
1c030 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
1c040 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a  base file.</p>..
1c050 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20 63  <p>^The VACUUM c
1c060 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 66 61 69 6c  ommand will fail
1c070 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   if there is an 
1c080 61 63 74 69 76 65 20 74 72 61 6e 73 61 63 74 69  active transacti
1c090 6f 6e 2e 0a 5e 54 68 65 20 56 41 43 55 55 4d 20  on..^The VACUUM 
1c0a0 63 6f 6d 6d 61 6e 64 20 69 73 20 61 20 6e 6f 2d  command is a no-
1c0b0 6f 70 20 66 6f 72 20 69 6e 2d 6d 65 6d 6f 72 79  op for in-memory
1c0c0 20 64 61 74 61 62 61 73 65 73 2e 3c 2f 70 3e 0a   databases.</p>.
1c0d0 0a 3c 70 3e 5e 28 41 73 20 6f 66 20 53 51 4c 69  .<p>^(As of SQLi
1c0e0 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 31 2c 20  te version 3.1, 
1c0f0 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20 74  an alternative t
1c100 6f 20 75 73 69 6e 67 20 74 68 65 20 56 41 43 55  o using the VACU
1c110 55 4d 20 63 6f 6d 6d 61 6e 64 0a 69 73 20 61 75  UM command.is au
1c120 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2c 20  to-vacuum mode, 
1c130 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  enabled using th
1c140 65 20 0a 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  e .[auto_vacuum]
1c150 20 70 72 61 67 6d 61 2e 29 5e 20 20 5e 57 68 65   pragma.)^  ^Whe
1c160 6e 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20  n [auto_vacuum] 
1c170 69 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 61  is enabled for a
1c180 20 64 61 74 61 62 61 73 65 2c 20 0a 6c 61 72 67   database, .larg
1c190 65 20 64 65 6c 65 74 65 73 20 63 61 75 73 65 0a  e deletes cause.
1c1a0 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
1c1b0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f  database file to
1c1c0 20 73 68 72 69 6e 6b 2e 20 20 48 6f 77 65 76 65   shrink.  Howeve
1c1d0 72 2c 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  r, [auto_vacuum]
1c1e0 0a 61 6c 73 6f 20 63 61 75 73 65 73 20 65 78 63  .also causes exc
1c1f0 65 73 73 20 66 72 61 67 6d 65 6e 74 61 74 69 6f  ess fragmentatio
1c200 6e 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  n of the databas
1c210 65 20 66 69 6c 65 2e 20 20 5e 41 6e 64 20 5b 61  e file.  ^And [a
1c220 75 74 6f 5f 76 61 63 75 75 6d 5d 0a 64 6f 65 73  uto_vacuum].does
1c230 20 6e 6f 74 20 63 6f 6d 70 61 63 74 20 70 61 72   not compact par
1c240 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61  tially filled pa
1c250 67 65 73 20 6f 66 20 74 68 65 20 64 61 74 61 62  ges of the datab
1c260 61 73 65 20 61 73 20 56 41 43 55 55 4d 0a 64 6f  ase as VACUUM.do
1c270 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  es.</p>..<p>^The
1c280 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64   [page_size] and
1c290 2f 6f 72 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d  /or [auto_vacuum
1c2a0 5d 20 6d 6f 64 65 20 6f 66 20 61 20 64 61 74 61  ] mode of a data
1c2b0 62 61 73 65 20 63 61 6e 20 62 65 20 63 68 61 6e  base can be chan
1c2c0 67 65 64 0a 62 79 20 69 6e 76 6f 6b 69 6e 67 20  ged.by invoking 
1c2d0 74 68 65 20 5b 70 61 67 65 5f 73 69 7a 65 20 70  the [page_size p
1c2e0 72 61 67 6d 61 5d 20 61 6e 64 2f 6f 72 20 5b 61  ragma] and/or [a
1c2f0 75 74 6f 5f 76 61 63 75 75 6d 20 70 72 61 67 6d  uto_vacuum pragm
1c300 61 5d 20 61 6e 64 20 74 68 65 6e 0a 69 6d 6d 65  a] and then.imme
1c310 64 69 61 74 65 6c 79 20 56 41 43 55 55 4d 69 6e  diately VACUUMin
1c320 67 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  g the database. 
1c330 5e 45 78 63 65 70 74 2c 20 74 68 65 20 70 61 67  ^Except, the pag
1c340 65 20 73 69 7a 65 20 63 61 6e 6e 6f 74 20 62 65  e size cannot be
1c350 0a 63 68 61 6e 67 65 64 20 77 68 65 6e 20 5b 77  .changed when [w
1c360 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20  rite-ahead log] 
1c370 6d 6f 64 65 20 69 73 20 69 6e 20 75 73 65 2e 3c  mode is in use.<
1c380 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
1c390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c3a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c3b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c3c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c3d0 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
1c3e0 6e 20 7b 49 4e 44 45 58 45 44 20 42 59 7d 20 69  n {INDEXED BY} i
1c3f0 6e 64 65 78 65 64 62 79 20 7b 7b 49 4e 44 45 58  ndexedby {{INDEX
1c400 45 44 20 42 59 7d 20 7b 4e 4f 54 20 49 4e 44 45  ED BY} {NOT INDE
1c410 58 45 44 7d 7d 0a 0a 3c 2f 74 63 6c 3e 0a 3c 70  XED}}..</tcl>.<p
1c420 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59  >^The INDEXED BY
1c430 20 70 68 72 61 73 65 20 69 73 20 61 20 53 51 4c   phrase is a SQL
1c440 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 75 6e 64   extension found
1c450 20 6f 6e 6c 79 20 69 6e 20 53 51 4c 69 74 65 20   only in SQLite 
1c460 77 68 69 63 68 20 63 61 6e 0a 62 65 20 75 73 65  which can.be use
1c470 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  d to verify that
1c480 20 74 68 65 20 63 6f 72 72 65 63 74 20 69 6e 64   the correct ind
1c490 69 63 65 73 20 61 72 65 20 62 65 69 6e 67 20 75  ices are being u
1c4a0 73 65 64 20 6f 6e 20 61 20 5b 44 45 4c 45 54 45  sed on a [DELETE
1c4b0 5d 2c 0a 5b 53 45 4c 45 43 54 5d 2c 20 6f 72 20  ],.[SELECT], or 
1c4c0 5b 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d 65  [UPDATE] stateme
1c4d0 6e 74 2e 0a 5e 54 68 65 20 49 4e 44 45 58 45 44  nt..^The INDEXED
1c4e0 20 42 59 20 70 68 72 61 73 65 20 61 6c 77 61 79   BY phrase alway
1c4f0 73 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 6e 61  s follows the na
1c500 6d 65 20 6f 66 20 61 20 74 61 62 6c 65 20 74 68  me of a table th
1c510 61 74 20 53 51 4c 69 74 65 20 77 69 6c 6c 0a 62  at SQLite will.b
1c520 65 20 72 65 61 64 69 6e 67 2e 20 20 54 68 65 20  e reading.  The 
1c530 49 4e 44 45 58 45 44 20 42 59 20 70 68 72 61 73  INDEXED BY phras
1c540 65 20 63 61 6e 20 62 65 20 73 65 65 6e 20 69 6e  e can be seen in
1c550 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1c560 79 6e 74 61 78 0a 64 69 61 67 72 61 6d 73 3a 3c  yntax.diagrams:<
1c570 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 42 75 62 62 6c  /p>..<tcl>.Bubbl
1c580 65 44 69 61 67 72 61 6d 20 71 75 61 6c 69 66 69  eDiagram qualifi
1c590 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a 42 75  ed-table-name.Bu
1c5a0 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69 6e 67  bbleDiagram sing
1c5b0 6c 65 2d 73 6f 75 72 63 65 0a 3c 2f 74 63 6c 3e  le-source.</tcl>
1c5c0 0a 0a 3c 70 3e 5e 54 68 65 20 22 49 4e 44 45 58  ..<p>^The "INDEX
1c5d0 45 44 20 42 59 20 69 6e 64 65 78 2d 6e 61 6d 65  ED BY index-name
1c5e0 22 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69  " clause specifi
1c5f0 65 73 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65  es that the name
1c600 64 20 69 6e 64 65 78 0a 6d 75 73 74 20 62 65 20  d index.must be 
1c610 75 73 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  used in order to
1c620 20 6c 6f 6f 6b 20 75 70 20 76 61 6c 75 65 73 20   look up values 
1c630 6f 6e 20 74 68 65 20 70 72 65 63 65 64 69 6e 67  on the preceding
1c640 20 74 61 62 6c 65 2e 0a 5e 49 66 20 69 6e 64 65   table..^If inde
1c650 78 2d 6e 61 6d 65 20 64 6f 65 73 20 6e 6f 74 20  x-name does not 
1c660 65 78 69 73 74 20 6f 72 20 63 61 6e 6e 6f 74 20  exist or cannot 
1c670 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
1c680 71 75 65 72 79 2c 20 74 68 65 6e 0a 74 68 65 20  query, then.the 
1c690 70 72 65 70 61 72 61 74 69 6f 6e 20 6f 66 20 74  preparation of t
1c6a0 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
1c6b0 20 66 61 69 6c 73 2e 0a 5e 28 54 68 65 20 22 4e   fails..^(The "N
1c6c0 4f 54 20 49 4e 44 45 58 45 44 22 20 63 6c 61 75  OT INDEXED" clau
1c6d0 73 65 20 73 70 65 63 69 66 69 65 73 20 74 68 61  se specifies tha
1c6e0 74 20 6e 6f 20 69 6e 64 65 78 20 73 68 61 6c 6c  t no index shall
1c6f0 20 62 65 20 75 73 65 64 20 77 68 65 6e 0a 61 63   be used when.ac
1c700 63 65 73 73 69 6e 67 20 74 68 65 20 70 72 65 63  cessing the prec
1c710 65 64 69 6e 67 20 74 61 62 6c 65 2c 20 69 6e 63  eding table, inc
1c720 6c 75 64 69 6e 67 20 69 6d 70 6c 69 65 64 20 69  luding implied i
1c730 6e 64 69 63 65 73 20 63 72 65 61 74 65 20 62 79  ndices create by
1c740 0a 55 4e 49 51 55 45 20 61 6e 64 20 50 52 49 4d  .UNIQUE and PRIM
1c750 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69  ARY KEY constrai
1c760 6e 74 73 2e 20 20 48 6f 77 65 76 65 72 2c 20 74  nts.  However, t
1c770 68 65 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  he INTEGER PRIMA
1c780 52 59 20 4b 45 59 0a 63 61 6e 20 73 74 69 6c 6c  RY KEY.can still
1c790 20 62 65 20 75 73 65 64 20 74 6f 20 6c 6f 6f 6b   be used to look
1c7a0 20 75 70 20 65 6e 74 72 69 65 73 20 65 76 65 6e   up entries even
1c7b0 20 77 68 65 6e 20 22 4e 4f 54 20 49 4e 44 45 58   when "NOT INDEX
1c7c0 45 44 22 20 69 73 20 73 70 65 63 69 66 69 65 64  ED" is specified
1c7d0 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 53 6f 6d 65  .)^</p>..<p>Some
1c7e0 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e   SQL database en
1c7f0 67 69 6e 65 73 20 70 72 6f 76 69 64 65 20 6e 6f  gines provide no
1c800 6e 2d 73 74 61 6e 64 61 72 64 20 22 68 69 6e 74  n-standard "hint
1c810 22 20 6d 65 63 68 61 6e 69 73 6d 73 20 77 68 69  " mechanisms whi
1c820 63 68 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74  ch.can be used t
1c830 6f 20 67 69 76 65 20 74 68 65 20 71 75 65 72 79  o give the query
1c840 20 6f 70 74 69 6d 69 7a 65 72 20 63 6c 75 65 73   optimizer clues
1c850 20 61 62 6f 75 74 20 77 68 61 74 20 69 6e 64 69   about what indi
1c860 63 65 73 20 69 74 20 73 68 6f 75 6c 64 0a 75 73  ces it should.us
1c870 65 20 66 6f 72 20 61 20 70 61 72 74 69 63 75 6c  e for a particul
1c880 61 72 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  ar statement.  T
1c890 68 65 20 49 4e 44 45 58 20 42 59 20 63 6c 61 75  he INDEX BY clau
1c8a0 73 65 20 6f 66 20 53 51 4c 69 74 65 20 69 73 20  se of SQLite is 
1c8b0 0a 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 20  .<em>not</em> a 
1c8c0 68 69 6e 74 69 6e 67 20 6d 65 63 68 61 6e 69 73  hinting mechanis
1c8d0 6d 20 61 6e 64 20 69 74 20 73 68 6f 75 6c 64 20  m and it should 
1c8e0 6e 6f 74 20 62 65 20 75 73 65 64 20 61 73 20 73  not be used as s
1c8f0 75 63 68 2e 0a 5e 54 68 65 20 49 4e 44 45 58 45  uch..^The INDEXE
1c900 44 20 42 59 20 63 6c 61 75 73 65 20 64 6f 65 73  D BY clause does
1c910 20 6e 6f 74 20 67 69 76 65 20 74 68 65 20 6f 70   not give the op
1c920 74 69 6d 69 7a 65 72 20 68 69 6e 74 73 20 61 62  timizer hints ab
1c930 6f 75 74 20 77 68 69 63 68 20 69 6e 64 65 78 0a  out which index.
1c940 74 6f 20 75 73 65 3b 20 69 74 20 67 69 76 65 73  to use; it gives
1c950 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 61   the optimizer a
1c960 20 72 65 71 75 69 72 65 6d 65 6e 74 20 6f 66 20   requirement of 
1c970 77 68 69 63 68 20 69 6e 64 65 78 20 74 6f 20 75  which index to u
1c980 73 65 2e 0a 5e 49 66 20 74 68 65 20 71 75 65 72  se..^If the quer
1c990 79 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 20 75  y optimizer is u
1c9a0 6e 61 62 6c 65 20 74 6f 20 75 73 65 20 74 68 65  nable to use the
1c9b0 20 69 6e 64 65 78 20 73 70 65 63 69 66 69 65 64   index specified
1c9c0 20 62 79 20 74 68 65 0a 49 4e 44 45 58 20 42 59   by the.INDEX BY
1c9d0 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68   clause, then th
1c9e0 65 20 71 75 65 72 79 20 77 69 6c 6c 20 66 61 69  e query will fai
1c9f0 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 2e  l with an error.
1ca00 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e 44  </p>..<p>The IND
1ca10 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 69  EXED BY clause i
1ca20 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 69  s <em>not</em> i
1ca30 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20  ntended for use 
1ca40 69 6e 20 74 75 6e 69 6e 67 0a 74 68 65 20 70 72  in tuning.the pr
1ca50 65 66 6f 72 6d 61 6e 63 65 20 6f 66 20 61 20 71  eformance of a q
1ca60 75 65 72 79 2e 20 20 54 68 65 20 69 6e 74 65 6e  uery.  The inten
1ca70 74 20 6f 66 20 74 68 65 20 49 4e 44 45 58 45 44  t of the INDEXED
1ca80 20 42 59 20 63 6c 61 75 73 65 20 69 73 0a 74 6f   BY clause is.to
1ca90 20 72 61 69 73 65 20 61 20 72 75 6e 2d 74 69 6d   raise a run-tim
1caa0 65 20 65 72 72 6f 72 20 69 66 20 61 20 73 63 68  e error if a sch
1cab0 65 6d 61 20 63 68 61 6e 67 65 2c 20 73 75 63 68  ema change, such
1cac0 20 61 73 20 64 72 6f 70 70 69 6e 67 20 6f 72 0a   as dropping or.
1cad0 63 72 65 61 74 69 6e 67 20 61 6e 20 69 6e 64 65  creating an inde
1cae0 78 2c 20 63 61 75 73 65 73 20 74 68 65 20 71 75  x, causes the qu
1caf0 65 72 79 20 70 6c 61 6e 20 66 6f 72 20 61 20 74  ery plan for a t
1cb00 69 6d 65 2d 73 65 6e 73 69 74 69 76 65 20 71 75  ime-sensitive qu
1cb10 65 72 79 0a 74 6f 20 63 68 61 6e 67 65 2e 20 20  ery.to change.  
1cb20 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63  The INDEXED BY c
1cb30 6c 61 75 73 65 20 69 73 20 64 65 73 69 67 6e 65  lause is designe
1cb40 64 20 74 6f 20 68 65 6c 70 20 64 65 74 65 63 74  d to help detect
1cb50 0a 75 6e 64 65 73 69 72 61 62 6c 65 20 71 75 65  .undesirable que
1cb60 72 79 20 70 6c 61 6e 20 63 68 61 6e 67 65 73 20  ry plan changes 
1cb70 64 75 72 69 6e 67 20 72 65 67 72 65 73 73 69 6f  during regressio
1cb80 6e 20 74 65 73 74 69 6e 67 2e 0a 44 65 76 65 6c  n testing..Devel
1cb90 6f 70 65 72 73 20 61 72 65 20 61 64 6d 6f 6e 69  opers are admoni
1cba0 73 68 65 64 20 74 6f 20 6f 6d 69 74 20 61 6c 6c  shed to omit all
1cbb0 20 75 73 65 20 6f 66 20 49 4e 44 45 58 45 44 20   use of INDEXED 
1cbc0 42 59 20 64 75 72 69 6e 67 0a 61 70 70 6c 69 63  BY during.applic
1cbd0 61 74 69 6f 6e 20 64 65 73 69 67 6e 2c 20 69 6d  ation design, im
1cbe0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 65  plementation, te
1cbf0 73 74 69 6e 67 2c 20 61 6e 64 20 74 75 6e 69 6e  sting, and tunin
1cc00 67 2e 20 20 49 66 0a 49 4e 44 45 58 45 44 20 42  g.  If.INDEXED B
1cc10 59 20 69 73 20 74 6f 20 62 65 20 75 73 65 64 20  Y is to be used 
1cc20 61 74 20 61 6c 6c 2c 20 69 74 20 73 68 6f 75 6c  at all, it shoul
1cc30 64 20 62 65 20 69 6e 73 65 72 74 65 64 20 61 74  d be inserted at
1cc40 20 74 68 65 20 76 65 72 79 0a 65 6e 64 20 6f 66   the very.end of
1cc50 20 74 68 65 20 64 65 76 65 6c 6f 70 6d 65 6e 74   the development
1cc60 20 70 72 6f 63 65 73 73 20 77 68 65 6e 20 22 6c   process when "l
1cc70 6f 63 6b 69 6e 67 20 64 6f 77 6e 22 20 61 20 64  ocking down" a d
1cc80 65 73 69 67 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e  esign.</p>..<h3>
1cc90 53 65 65 20 41 6c 73 6f 3a 3c 2f 68 33 3e 0a 0a  See Also:</h3>..
1cca0 3c 70 3e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f  <p>The [sqlite3_
1ccb0 73 74 6d 74 5f 73 74 61 74 75 73 28 29 5d 20 43  stmt_status()] C
1ccc0 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 20 74  /C++ interface t
1ccd0 6f 67 65 74 68 65 72 20 77 69 74 68 20 74 68 65  ogether with the
1cce0 0a 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41  .[SQLITE_STMTSTA
1ccf0 54 55 53 5f 46 55 4c 4c 53 43 41 4e 5f 53 54 45  TUS_FULLSCAN_STE
1cd00 50 5d 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f 53  P] and [SQLITE_S
1cd10 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 20  TMTSTATUS_SORT] 
1cd20 76 65 72 62 73 0a 63 61 6e 20 62 65 20 75 73 65  verbs.can be use
1cd30 64 20 74 6f 20 64 65 74 65 63 74 20 61 74 20 72  d to detect at r
1cd40 75 6e 2d 74 69 6d 65 20 77 68 65 6e 20 61 6e 20  un-time when an 
1cd50 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69 73  SQL statement is
1cd60 20 6e 6f 74 0a 6d 61 6b 69 6e 67 20 65 66 66 65   not.making effe
1cd70 63 74 69 76 65 20 75 73 65 20 6f 66 20 69 6e 64  ctive use of ind
1cd80 69 63 65 73 2e 20 20 4d 61 6e 79 20 61 70 70 6c  ices.  Many appl
1cd90 69 63 61 74 69 6f 6e 73 20 6d 61 79 20 70 72 65  ications may pre
1cda0 66 65 72 20 74 6f 0a 75 73 65 20 74 68 65 20 5b  fer to.use the [
1cdb0 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61  sqlite3_stmt_sta
1cdc0 74 75 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65  tus()] interface
1cdd0 20 74 6f 20 64 65 74 65 63 74 20 69 6e 64 65 78   to detect index
1cde0 20 6d 69 73 75 73 65 0a 72 61 74 68 65 72 20 74   misuse.rather t
1cdf0 68 61 6e 20 74 68 65 20 49 4e 44 45 58 45 44 20  han the INDEXED 
1ce00 42 59 20 70 68 72 61 73 65 20 64 65 73 63 72 69  BY phrase descri
1ce10 62 65 64 20 68 65 72 65 2e 3c 2f 70 3e 0a 0a 3c  bed here.</p>..<
1ce20 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
1ce30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ce40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ce50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ce60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ce70 23 23 0a 23 20 41 20 6c 69 73 74 20 6f 66 20 6b  ##.# A list of k
1ce80 65 79 77 6f 72 64 73 2e 20 20 41 20 61 73 74 65  eywords.  A aste
1ce90 72 69 73 6b 20 6f 63 63 75 72 73 20 61 66 74 65  risk occurs afte
1cea0 72 20 74 68 65 20 6b 65 79 77 6f 72 64 20 69 66  r the keyword if
1ceb0 20 69 74 20 69 73 20 6f 6e 0a 23 20 74 68 65 20   it is on.# the 
1cec0 66 61 6c 6c 62 61 63 6b 20 6c 69 73 74 2e 0a 23  fallback list..#
1ced0 0a 73 65 74 20 6b 65 79 77 6f 72 64 5f 6c 69 73  .set keyword_lis
1cee0 74 20 5b 6c 73 6f 72 74 20 7b 0a 20 20 20 41 42  t [lsort {.   AB
1cef0 4f 52 54 0a 20 20 20 41 43 54 49 4f 4e 0a 20 20  ORT.   ACTION.  
1cf00 20 41 44 44 0a 20 20 20 41 46 54 45 52 0a 20 20   ADD.   AFTER.  
1cf10 20 41 4c 4c 0a 20 20 20 41 4c 54 45 52 0a 20 20   ALL.   ALTER.  
1cf20 20 41 4e 41 4c 59 5a 45 0a 20 20 20 41 4e 44 0a   ANALYZE.   AND.
1cf30 20 20 20 41 53 0a 20 20 20 41 53 43 0a 20 20 20     AS.   ASC.   
1cf40 41 54 54 41 43 48 0a 20 20 20 41 55 54 4f 49 4e  ATTACH.   AUTOIN
1cf50 43 52 45 4d 45 4e 54 0a 20 20 20 42 45 46 4f 52  CREMENT.   BEFOR
1cf60 45 0a 20 20 20 42 45 47 49 4e 0a 20 20 20 42 45  E.   BEGIN.   BE
1cf70 54 57 45 45 4e 0a 20 20 20 42 59 0a 20 20 20 43  TWEEN.   BY.   C
1cf80 41 53 43 41 44 45 0a 20 20 20 43 41 53 45 0a 20  ASCADE.   CASE. 
1cf90 20 20 43 41 53 54 0a 20 20 20 43 48 45 43 4b 0a    CAST.   CHECK.
1cfa0 20 20 20 43 4f 4c 4c 41 54 45 0a 20 20 20 43 4f     COLLATE.   CO
1cfb0 4c 55 4d 4e 0a 20 20 20 43 4f 4d 4d 49 54 0a 20  LUMN.   COMMIT. 
1cfc0 20 20 43 4f 4e 46 4c 49 43 54 0a 20 20 20 43 4f    CONFLICT.   CO
1cfd0 4e 53 54 52 41 49 4e 54 0a 20 20 20 43 52 45 41  NSTRAINT.   CREA
1cfe0 54 45 0a 20 20 20 43 52 4f 53 53 0a 20 20 20 43  TE.   CROSS.   C
1cff0 55 52 52 45 4e 54 5f 44 41 54 45 0a 20 20 20 43  URRENT_DATE.   C
1d000 55 52 52 45 4e 54 5f 54 49 4d 45 0a 20 20 20 43  URRENT_TIME.   C
1d010 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
1d020 0a 20 20 20 44 41 54 41 42 41 53 45 0a 20 20 20  .   DATABASE.   
1d030 44 45 46 41 55 4c 54 0a 20 20 20 44 45 46 45 52  DEFAULT.   DEFER
1d040 52 45 44 0a 20 20 20 44 45 46 45 52 52 41 42 4c  RED.   DEFERRABL
1d050 45 0a 20 20 20 44 45 4c 45 54 45 0a 20 20 20 44  E.   DELETE.   D
1d060 45 53 43 0a 20 20 20 44 45 54 41 43 48 0a 20 20  ESC.   DETACH.  
1d070 20 44 49 53 54 49 4e 43 54 0a 20 20 20 44 52 4f   DISTINCT.   DRO
1d080 50 0a 20 20 20 45 4e 44 0a 20 20 20 45 41 43 48  P.   END.   EACH
1d090 0a 20 20 20 45 4c 53 45 0a 20 20 20 45 53 43 41  .   ELSE.   ESCA
1d0a0 50 45 0a 20 20 20 45 58 43 45 50 54 0a 20 20 20  PE.   EXCEPT.   
1d0b0 45 58 43 4c 55 53 49 56 45 0a 20 20 20 45 58 49  EXCLUSIVE.   EXI
1d0c0 53 54 53 0a 20 20 20 45 58 50 4c 41 49 4e 0a 20  STS.   EXPLAIN. 
1d0d0 20 20 46 41 49 4c 0a 20 20 20 46 4f 52 0a 20 20    FAIL.   FOR.  
1d0e0 20 46 4f 52 45 49 47 4e 0a 20 20 20 46 52 4f 4d   FOREIGN.   FROM
1d0f0 0a 20 20 20 46 55 4c 4c 0a 20 20 20 47 4c 4f 42  .   FULL.   GLOB
1d100 0a 20 20 20 47 52 4f 55 50 0a 20 20 20 48 41 56  .   GROUP.   HAV
1d110 49 4e 47 0a 20 20 20 49 46 0a 20 20 20 49 47 4e  ING.   IF.   IGN
1d120 4f 52 45 0a 20 20 20 49 4d 4d 45 44 49 41 54 45  ORE.   IMMEDIATE
1d130 0a 20 20 20 49 4e 0a 20 20 20 49 4e 44 45 58 0a  .   IN.   INDEX.
1d140 20 20 20 49 4e 44 45 58 45 44 0a 20 20 20 49 4e     INDEXED.   IN
1d150 49 54 49 41 4c 4c 59 0a 20 20 20 49 4e 4e 45 52  ITIALLY.   INNER
1d160 0a 20 20 20 49 4e 53 45 52 54 0a 20 20 20 49 4e  .   INSERT.   IN
1d170 53 54 45 41 44 0a 20 20 20 49 4e 54 45 52 53 45  STEAD.   INTERSE
1d180 43 54 0a 20 20 20 49 4e 54 4f 0a 20 20 20 49 53  CT.   INTO.   IS
1d190 0a 20 20 20 49 53 4e 55 4c 4c 0a 20 20 20 4a 4f  .   ISNULL.   JO
1d1a0 49 4e 0a 20 20 20 4b 45 59 0a 20 20 20 4c 45 46  IN.   KEY.   LEF
1d1b0 54 0a 20 20 20 4c 49 4b 45 0a 20 20 20 4c 49 4d  T.   LIKE.   LIM
1d1c0 49 54 0a 20 20 20 4d 41 54 43 48 0a 20 20 20 4e  IT.   MATCH.   N
1d1d0 41 54 55 52 41 4c 0a 20 20 20 4e 4f 0a 20 20 20  ATURAL.   NO.   
1d1e0 4e 4f 54 0a 20 20 20 4e 4f 54 4e 55 4c 4c 0a 20  NOT.   NOTNULL. 
1d1f0 20 20 4e 55 4c 4c 0a 20 20 20 4f 46 0a 20 20 20    NULL.   OF.   
1d200 4f 46 46 53 45 54 0a 20 20 20 4f 4e 0a 20 20 20  OFFSET.   ON.   
1d210 4f 52 0a 20 20 20 4f 52 44 45 52 0a 20 20 20 4f  OR.   ORDER.   O
1d220 55 54 45 52 0a 20 20 20 50 4c 41 4e 0a 20 20 20  UTER.   PLAN.   
1d230 50 52 41 47 4d 41 0a 20 20 20 50 52 49 4d 41 52  PRAGMA.   PRIMAR
1d240 59 0a 20 20 20 51 55 45 52 59 0a 20 20 20 52 41  Y.   QUERY.   RA
1d250 49 53 45 0a 20 20 20 52 45 46 45 52 45 4e 43 45  ISE.   REFERENCE
1d260 53 0a 20 20 20 52 45 47 45 58 50 0a 20 20 20 52  S.   REGEXP.   R
1d270 45 49 4e 44 45 58 0a 20 20 20 52 45 4c 45 41 53  EINDEX.   RELEAS
1d280 45 0a 20 20 20 52 45 4e 41 4d 45 0a 20 20 20 52  E.   RENAME.   R
1d290 45 50 4c 41 43 45 0a 20 20 20 52 45 53 54 52 49  EPLACE.   RESTRI
1d2a0 43 54 0a 20 20 20 52 49 47 48 54 0a 20 20 20 52  CT.   RIGHT.   R
1d2b0 4f 4c 4c 42 41 43 4b 0a 20 20 20 52 4f 57 0a 20  OLLBACK.   ROW. 
1d2c0 20 20 53 41 56 45 50 4f 49 4e 54 0a 20 20 20 53    SAVEPOINT.   S
1d2d0 45 4c 45 43 54 0a 20 20 20 53 45 54 0a 20 20 20  ELECT.   SET.   
1d2e0 54 41 42 4c 45 0a 20 20 20 54 45 4d 50 0a 20 20  TABLE.   TEMP.  
1d2f0 20 54 45 4d 50 4f 52 41 52 59 0a 20 20 20 54 48   TEMPORARY.   TH
1d300 45 4e 0a 20 20 20 54 4f 0a 20 20 20 54 52 41 4e  EN.   TO.   TRAN
1d310 53 41 43 54 49 4f 4e 0a 20 20 20 54 52 49 47 47  SACTION.   TRIGG
1d320 45 52 0a 20 20 20 55 4e 49 4f 4e 0a 20 20 20 55  ER.   UNION.   U
1d330 4e 49 51 55 45 0a 20 20 20 55 50 44 41 54 45 0a  NIQUE.   UPDATE.
1d340 20 20 20 55 53 49 4e 47 0a 20 20 20 56 41 43 55     USING.   VACU
1d350 55 4d 0a 20 20 20 56 41 4c 55 45 53 0a 20 20 20  UM.   VALUES.   
1d360 56 49 45 57 0a 20 20 20 56 49 52 54 55 41 4c 0a  VIEW.   VIRTUAL.
1d370 20 20 20 57 48 45 4e 0a 20 20 20 57 48 45 52 45     WHEN.   WHERE
1d380 0a 7d 5d 0a 0a 68 64 5f 70 75 74 73 20 7b 3c 44  .}]..hd_puts {<D
1d390 49 56 20 63 6c 61 73 73 3d 22 70 64 66 5f 73 65  IV class="pdf_se
1d3a0 63 74 69 6f 6e 22 3e 7d 0a 53 65 63 74 69 6f 6e  ction">}.Section
1d3b0 20 7b 53 51 4c 69 74 65 20 4b 65 79 77 6f 72 64   {SQLite Keyword
1d3c0 73 7d 20 6b 65 79 77 6f 72 64 73 20 7b 7b 2a 53  s} keywords {{*S
1d3d0 51 4c 20 6b 65 79 77 6f 72 64 7d 20 7b 53 51 4c  QL keyword} {SQL
1d3e0 20 6b 65 79 77 6f 72 64 73 7d 7d 0a 68 64 5f 70   keywords}}.hd_p
1d3f0 75 74 73 20 7b 3c 2f 44 49 56 3e 7d 0a 3c 2f 74  uts {</DIV>}.</t
1d400 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 53 51 4c 20  cl>..<p>The SQL 
1d410 73 74 61 6e 64 61 72 64 20 73 70 65 63 69 66 69  standard specifi
1d420 65 73 20 61 20 68 75 67 65 20 6e 75 6d 62 65 72  es a huge number
1d430 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 77 68 69   of keywords whi
1d440 63 68 20 6d 61 79 20 6e 6f 74 0a 62 65 20 75 73  ch may not.be us
1d450 65 64 20 61 73 20 74 68 65 20 6e 61 6d 65 73 20  ed as the names 
1d460 6f 66 20 74 61 62 6c 65 73 2c 20 69 6e 64 69 63  of tables, indic
1d470 65 73 2c 20 63 6f 6c 75 6d 6e 73 2c 20 64 61 74  es, columns, dat
1d480 61 62 61 73 65 73 2c 20 75 73 65 72 2d 64 65 66  abases, user-def
1d490 69 6e 65 64 0a 66 75 6e 63 74 69 6f 6e 73 2c 20  ined.functions, 
1d4a0 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20 76 69 72 74  collations, virt
1d4b0 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65  ual table module
1d4c0 73 2c 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20  s, or any other 
1d4d0 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2e 0a 54 68  named object..Th
1d4e0 65 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f 72  e list of keywor
1d4f0 64 73 20 69 73 20 73 6f 20 6c 6f 6e 67 20 74 68  ds is so long th
1d500 61 74 20 66 65 77 20 70 65 6f 70 6c 65 20 63 61  at few people ca
1d510 6e 20 72 65 6d 65 6d 62 65 72 20 74 68 65 6d 20  n remember them 
1d520 61 6c 6c 2e 0a 46 6f 72 20 6d 6f 73 74 20 53 51  all..For most SQ
1d530 4c 20 63 6f 64 65 2c 20 79 6f 75 72 20 73 61 66  L code, your saf
1d540 65 73 74 20 62 65 74 20 69 73 20 74 6f 20 6e 65  est bet is to ne
1d550 76 65 72 20 75 73 65 20 61 6e 79 20 45 6e 67 6c  ver use any Engl
1d560 69 73 68 20 6c 61 6e 67 75 61 67 65 0a 77 6f 72  ish language.wor
1d570 64 20 61 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  d as the name of
1d580 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20   a user-defined 
1d590 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e  object.</p>..<p>
1d5a0 49 66 20 79 6f 75 20 77 61 6e 74 20 74 6f 20 75  If you want to u
1d5b0 73 65 20 61 20 6b 65 79 77 6f 72 64 20 61 73 20  se a keyword as 
1d5c0 61 20 6e 61 6d 65 2c 20 79 6f 75 20 6e 65 65 64  a name, you need
1d5d0 20 74 6f 20 71 75 6f 74 65 20 69 74 2e 20 20 54   to quote it.  T
1d5e0 68 65 72 65 0a 61 72 65 20 74 68 72 65 65 20 77  here.are three w
1d5f0 61 79 73 20 6f 66 20 71 75 6f 74 69 6e 67 20 6b  ays of quoting k
1d600 65 79 77 6f 72 64 73 20 69 6e 20 53 51 4c 69 74  eywords in SQLit
1d610 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62 6c 6f  e:</p>..<p>.<blo
1d620 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e  ckquote>.<table>
1d630 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
1d640 3d 22 74 6f 70 22 3e 3c 62 3e 27 6b 65 79 77 6f  ="top"><b>'keywo
1d650 72 64 27 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20  rd'</b></td><td 
1d660 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e  width="20"></td>
1d670 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64  ..<td>^A keyword
1d680 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65   in single quote
1d690 73 20 69 73 20 61 20 73 74 72 69 6e 67 20 6c 69  s is a string li
1d6a0 74 65 72 61 6c 2e 3c 2f 74 64 3e 3c 2f 74 72 3e  teral.</td></tr>
1d6b0 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67  ..<tr>.<td valig
1d6c0 6e 3d 22 74 6f 70 22 3e 3c 62 3e 22 6b 65 79 77  n="top"><b>"keyw
1d6d0 6f 72 64 22 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  ord"</b></td><td
1d6e0 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b  ></td>..<td>^A k
1d6f0 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65  eyword in double
1d700 2d 71 75 6f 74 65 73 20 69 73 20 61 6e 20 69 64  -quotes is an id
1d710 65 6e 74 69 66 69 65 72 2e 3c 2f 74 64 3e 3c 2f  entifier.</td></
1d720 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61  tr>..<tr>.<td va
1d730 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26 23  lign="top"><b>&#
1d740 39 31 3b 6b 65 79 77 6f 72 64 26 23 39 33 3b 3c  91;keyword&#93;<
1d750 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64  /b></td><td></td
1d760 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72  >..<td>^A keywor
1d770 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 73 71  d enclosed in sq
1d780 75 61 72 65 20 62 72 61 63 6b 65 74 73 20 69 73  uare brackets is
1d790 20 0a 20 20 20 20 20 20 20 20 61 6e 20 69 64 65   .        an ide
1d7a0 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73 20 69  ntifier.  This i
1d7b0 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53  s not standard S
1d7c0 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74 69 6e  QL.  This quotin
1d7d0 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20 20  g mechanism.    
1d7e0 20 20 20 20 69 73 20 75 73 65 64 20 62 79 20 4d      is used by M
1d7f0 53 20 41 63 63 65 73 73 20 61 6e 64 20 53 51 4c  S Access and SQL
1d800 20 53 65 72 76 65 72 20 61 6e 64 20 69 73 20 69   Server and is i
1d810 6e 63 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74  ncluded in SQLit
1d820 65 20 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f  e for.        co
1d830 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64  mpatibility.</td
1d840 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64  ></tr>..<tr>.<td
1d850 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
1d860 3e 26 23 39 36 3b 6b 65 79 77 6f 72 64 26 23 39  >&#96;keyword&#9
1d870 36 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c  6;</b></td><td><
1d880 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79  /td>..<td>^A key
1d890 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e  word enclosed in
1d8a0 20 67 72 61 76 65 20 61 63 63 65 6e 74 73 20 28   grave accents (
1d8b0 41 53 43 49 49 20 63 6f 64 65 20 39 36 29 20 69  ASCII code 96) i
1d8c0 73 20 0a 20 20 20 20 20 20 20 20 61 6e 20 69 64  s .        an id
1d8d0 65 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73 20  entifier.  This 
1d8e0 69 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20  is not standard 
1d8f0 53 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74 69  SQL.  This quoti
1d900 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20  ng mechanism.   
1d910 20 20 20 20 20 69 73 20 75 73 65 64 20 62 79 20       is used by 
1d920 4d 79 53 51 4c 20 61 6e 64 20 69 73 20 69 6e 63  MySQL and is inc
1d930 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20  luded in SQLite 
1d940 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f 6d 70  for.        comp
1d950 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c  atibility.</td><
1d960 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  /tr>.</table>.</
1d970 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 2f 70 3e  blockquote>.</p>
1d980 0a 0a 3c 70 3e 46 6f 72 20 72 65 73 69 6c 69 65  ..<p>For resilie
1d990 6e 63 65 20 77 68 65 6e 20 63 6f 6e 66 72 6f 6e  nce when confron
1d9a0 74 65 64 20 77 69 74 68 20 68 69 73 74 6f 72 69  ted with histori
1d9b0 63 61 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  cal SQL statemen
1d9c0 74 73 2c 20 53 51 4c 69 74 65 0a 77 69 6c 6c 20  ts, SQLite.will 
1d9d0 73 6f 6d 65 74 69 6d 65 73 20 62 65 6e 64 20 74  sometimes bend t
1d9e0 68 65 20 71 75 6f 74 69 6e 67 20 72 75 6c 65 73  he quoting rules
1d9f0 20 61 62 6f 76 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c   above:</p>..<ul
1da00 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61 20 6b  >.<li><p>^If a k
1da10 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65  eyword in single
1da20 0a 71 75 6f 74 65 73 20 28 65 78 3a 20 3c 62 3e  .quotes (ex: <b>
1da30 27 6b 65 79 27 3c 2f 62 3e 20 6f 72 20 3c 62 3e  'key'</b> or <b>
1da40 27 67 6c 6f 62 27 3c 2f 62 3e 29 20 69 73 20 75  'glob'</b>) is u
1da50 73 65 64 20 69 6e 20 61 20 63 6f 6e 74 65 78 74  sed in a context
1da60 20 77 68 65 72 65 0a 61 6e 20 69 64 65 6e 74 69   where.an identi
1da70 66 69 65 72 20 69 73 20 61 6c 6c 6f 77 65 64 20  fier is allowed 
1da80 62 75 74 20 77 68 65 72 65 20 61 20 73 74 72 69  but where a stri
1da90 6e 67 20 6c 69 74 65 72 61 6c 20 69 73 20 6e 6f  ng literal is no
1daa0 74 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e 0a  t allowed, then.
1dab0 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e 64  the token is und
1dac0 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20 61 6e  erstood to be an
1dad0 20 69 64 65 6e 74 69 66 69 65 72 20 69 6e 73 74   identifier inst
1dae0 65 61 64 20 6f 66 20 61 20 73 74 72 69 6e 67 20  ead of a string 
1daf0 6c 69 74 65 72 61 6c 2e 0a 3c 2f 70 3e 3c 2f 6c  literal..</p></l
1db00 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61  i>..<li><p>^If a
1db10 20 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62   keyword in doub
1db20 6c 65 0a 71 75 6f 74 65 73 20 28 65 78 3a 20 3c  le.quotes (ex: <
1db30 62 3e 22 6b 65 79 22 3c 2f 62 3e 20 6f 72 20 3c  b>"key"</b> or <
1db40 62 3e 22 67 6c 6f 62 22 3c 2f 62 3e 29 20 69 73  b>"glob"</b>) is
1db50 20 75 73 65 64 20 69 6e 20 61 20 63 6f 6e 74 65   used in a conte
1db60 78 74 20 77 68 65 72 65 0a 69 74 20 63 61 6e 6e  xt where.it cann
1db70 6f 74 20 62 65 20 72 65 73 6f 6c 76 65 64 20 74  ot be resolved t
1db80 6f 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  o an identifier 
1db90 62 75 74 20 77 68 65 72 65 20 61 20 73 74 72 69  but where a stri
1dba0 6e 67 20 6c 69 74 65 72 61 6c 0a 69 73 20 61 6c  ng literal.is al
1dbb0 6c 6f 77 65 64 2c 20 74 68 65 6e 20 74 68 65 20  lowed, then the 
1dbc0 74 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72 73 74  token is underst
1dbd0 6f 6f 64 20 74 6f 20 62 65 20 61 20 73 74 72 69  ood to be a stri
1dbe0 6e 67 20 6c 69 74 65 72 61 6c 20 69 6e 73 74 65  ng literal inste
1dbf0 61 64 0a 6f 66 20 61 6e 20 69 64 65 6e 74 69 66  ad.of an identif
1dc00 69 65 72 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f  ier.</p></li>.</
1dc10 75 6c 3e 0a 0a 3c 70 3e 50 72 6f 67 72 61 6d 6d  ul>..<p>Programm
1dc20 65 72 73 20 61 72 65 20 63 61 75 74 69 6f 6e 65  ers are cautione
1dc30 64 20 6e 6f 74 20 74 6f 20 75 73 65 20 74 68 65  d not to use the
1dc40 20 74 77 6f 20 65 78 63 65 70 74 69 6f 6e 73 20   two exceptions 
1dc50 64 65 73 63 72 69 62 65 64 20 69 6e 0a 74 68 65  described in.the
1dc60 20 70 72 65 76 69 6f 75 73 20 62 75 6c 6c 65 74   previous bullet
1dc70 73 2e 20 20 57 65 20 65 6d 70 68 61 73 69 7a 65  s.  We emphasize
1dc80 20 74 68 61 74 20 74 68 65 79 20 65 78 69 73 74   that they exist
1dc90 20 6f 6e 6c 79 20 73 6f 20 74 68 61 74 20 6f 6c   only so that ol
1dca0 64 0a 61 6e 64 20 69 6c 6c 2d 66 6f 72 6d 65 64  d.and ill-formed
1dcb0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
1dcc0 77 69 6c 6c 20 72 75 6e 20 63 6f 72 72 65 63 74  will run correct
1dcd0 6c 79 2e 20 20 46 75 74 75 72 65 20 76 65 72 73  ly.  Future vers
1dce0 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 6d  ions of.SQLite m
1dcf0 69 67 68 74 20 63 68 61 6e 67 65 20 74 6f 20 72  ight change to r
1dd00 61 69 73 65 20 65 72 72 6f 72 73 20 69 6e 73 74  aise errors inst
1dd10 65 61 64 20 6f 66 20 61 63 63 65 70 74 69 6e 67  ead of accepting
1dd20 20 74 68 65 20 6d 61 6c 66 6f 72 6d 65 64 0a 73   the malformed.s
1dd30 74 61 74 65 6d 65 6e 74 73 20 63 6f 76 65 72 65  tatements covere
1dd40 64 20 62 79 20 74 68 65 20 65 78 63 65 70 74 69  d by the excepti
1dd50 6f 6e 73 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a 0a  ons above.</p>..
1dd60 3c 70 3e 0a 53 51 4c 69 74 65 20 61 64 64 73 20  <p>.SQLite adds 
1dd70 6e 65 77 20 6b 65 79 77 6f 72 64 73 20 66 72 6f  new keywords fro
1dd80 6d 20 74 69 6d 65 20 74 6f 20 74 69 6d 65 20 77  m time to time w
1dd90 68 65 6e 20 69 74 20 74 61 6b 65 73 20 6f 6e 20  hen it takes on 
1dda0 6e 65 77 20 66 65 61 74 75 72 65 73 2e 0a 53 6f  new features..So
1ddb0 20 74 6f 20 70 72 65 76 65 6e 74 20 79 6f 75 72   to prevent your
1ddc0 20 63 6f 64 65 20 66 72 6f 6d 20 62 65 69 6e 67   code from being
1ddd0 20 62 72 6f 6b 65 6e 20 62 79 20 66 75 74 75 72   broken by futur
1dde0 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 2c 20  e enhancements, 
1ddf0 79 6f 75 20 73 68 6f 75 6c 64 0a 6e 6f 72 6d 61  you should.norma
1de00 6c 6c 79 20 71 75 6f 74 65 20 61 6e 79 20 69 64  lly quote any id
1de10 65 6e 74 69 66 69 65 72 20 74 68 61 74 20 69 73  entifier that is
1de20 20 61 6e 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67   an English lang
1de30 75 61 67 65 20 77 6f 72 64 2c 20 65 76 65 6e 20  uage word, even 
1de40 69 66 0a 79 6f 75 20 64 6f 20 6e 6f 74 20 68 61  if.you do not ha
1de50 76 65 20 74 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  ve to..</p>..<p>
1de60 0a 54 68 65 20 6c 69 73 74 20 62 65 6c 6f 77 20  .The list below 
1de70 73 68 6f 77 73 20 61 6c 6c 20 70 6f 73 73 69 62  shows all possib
1de80 6c 65 20 6b 65 79 77 6f 72 64 73 20 75 73 65 64  le keywords used
1de90 20 62 79 20 61 6e 79 20 62 75 69 6c 64 20 6f 66   by any build of
1dea0 0a 53 51 4c 69 74 65 20 72 65 67 61 72 64 6c 65  .SQLite regardle
1deb0 73 73 20 6f 66 20 5b 63 6f 6d 70 69 6c 65 2d 74  ss of [compile-t
1dec0 69 6d 65 20 6f 70 74 69 6f 6e 73 5d 2e 20 20 0a  ime options].  .
1ded0 4d 6f 73 74 20 72 65 61 73 6f 6e 61 62 6c 65 20  Most reasonable 
1dee0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 75  configurations u
1def0 73 65 20 6d 6f 72 65 20 6f 72 20 61 6c 6c 20 6f  se more or all o
1df00 66 20 74 68 65 73 65 20 6b 65 79 77 6f 72 64 73  f these keywords
1df10 2c 0a 62 75 74 20 73 6f 6d 65 20 6b 65 79 77 6f  ,.but some keywo
1df20 72 64 73 20 6d 61 79 20 62 65 20 6f 6d 69 74 74  rds may be omitt
1df30 65 64 20 77 68 65 6e 20 53 51 4c 20 6c 61 6e 67  ed when SQL lang
1df40 75 61 67 65 20 66 65 61 74 75 72 65 73 20 61 72  uage features ar
1df50 65 0a 64 69 73 61 62 6c 65 64 2e 0a 5e 28 52 65  e.disabled..^(Re
1df60 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
1df70 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e  compile-time con
1df80 66 69 67 75 72 61 74 69 6f 6e 2c 20 61 6e 79 20  figuration, any 
1df90 69 64 65 6e 74 69 66 69 65 72 20 74 68 61 74 20  identifier that 
1dfa0 69 73 20 6e 6f 74 20 6f 6e 0a 74 68 65 20 66 6f  is not on.the fo
1dfb0 6c 6c 6f 77 69 6e 67 20 3c 74 63 6c 3e 68 64 5f  llowing <tcl>hd_
1dfc0 70 75 74 73 20 5b 6c 6c 65 6e 67 74 68 20 24 6b  puts [llength $k
1dfd0 65 79 77 6f 72 64 5f 6c 69 73 74 5d 3c 2f 74 63  eyword_list]</tc
1dfe0 6c 3e 20 65 6c 65 6d 65 6e 74 0a 6c 69 73 74 20  l> element.list 
1dff0 69 73 20 6e 6f 74 20 61 20 6b 65 79 77 6f 72 64  is not a keyword
1e000 20 74 6f 20 74 68 65 20 53 51 4c 20 70 61 72 73   to the SQL pars
1e010 65 72 20 69 6e 20 53 51 4c 69 74 65 3a 0a 3c 2f  er in SQLite:.</
1e020 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
1e030 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 31  .<table width="1
1e040 30 30 25 22 3e 3c 74 72 3e 0a 3c 74 64 20 61 6c  00%"><tr>.<td al
1e050 69 67 6e 3d 22 6c 65 66 74 22 20 76 61 6c 69 67  ign="left" valig
1e060 6e 3d 22 74 6f 70 22 20 77 69 64 74 68 3d 22 32  n="top" width="2
1e070 30 25 22 3e 0a 3c 74 63 6c 3e 0a 73 65 74 20 6e  0%">.<tcl>.set n
1e080 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f   [llength $keywo
1e090 72 64 5f 6c 69 73 74 5d 0a 73 65 74 20 6e 43 6f  rd_list].set nCo
1e0a0 6c 20 35 0a 73 65 74 20 6e 52 6f 77 20 5b 65 78  l 5.set nRow [ex
1e0b0 70 72 20 7b 28 24 6e 2b 24 6e 43 6f 6c 2d 31 29  pr {($n+$nCol-1)
1e0c0 2f 24 6e 43 6f 6c 7d 5d 0a 73 65 74 20 69 20 30  /$nCol}].set i 0
1e0d0 0a 66 6f 72 65 61 63 68 20 77 6f 72 64 20 24 6b  .foreach word $k
1e0e0 65 79 77 6f 72 64 5f 6c 69 73 74 20 7b 0a 20 20  eyword_list {.  
1e0f0 69 66 20 7b 24 69 3d 3d 24 6e 52 6f 77 7d 20 7b  if {$i==$nRow} {
1e100 0a 20 20 20 20 68 64 5f 70 75 74 73 20 22 3c 2f  .    hd_puts "</
1e110 74 64 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22  td><td valign=\"
1e120 74 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 6c 65  top\" align=\"le
1e130 66 74 5c 22 20 77 69 64 74 68 3d 5c 22 32 30 25  ft\" width=\"20%
1e140 5c 22 3e 22 0a 20 20 20 20 73 65 74 20 69 20 31  \">".    set i 1
1e150 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20  .  } else {.    
1e160 69 6e 63 72 20 69 0a 20 20 7d 0a 20 20 68 64 5f  incr i.  }.  hd_
1e170 70 75 74 73 20 22 24 77 6f 72 64 3c 62 72 3e 5c  puts "$word<br>\
1e180 6e 22 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 64  n".}.</tcl>.</td
1e190 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 3c 2f  ></tr></table></
1e1a0 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a        blockquote>)^.