Documentation Source Text

Hex Artifact Content
Login

Artifact d3e00ec6472a34faa192782b1f98eb69476ca5b4:


0000: 3c 74 69 74 6c 65 3e 51 75 65 72 79 20 4c 61 6e  <title>Query Lan
0010: 67 75 61 67 65 20 55 6e 64 65 72 73 74 6f 6f 64  guage Understood
0020: 20 62 79 20 53 51 4c 69 74 65 3c 2f 74 69 74 6c   by SQLite</titl
0030: 65 3e 0a 0a 3c 68 31 20 61 6c 69 67 6e 3d 63 65  e>..<h1 align=ce
0040: 6e 74 65 72 3e 53 51 4c 20 41 73 20 55 6e 64 65  nter>SQL As Unde
0050: 72 73 74 6f 6f 64 20 42 79 20 53 51 4c 69 74 65  rstood By SQLite
0060: 3c 2f 68 31 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65  </h1>..<p>SQLite
0070: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 6d 6f 73   understands mos
0080: 74 20 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72  t of the standar
0090: 64 20 53 51 4c 0a 6c 61 6e 67 75 61 67 65 2e 20  d SQL.language. 
00a0: 20 42 75 74 20 69 74 20 64 6f 65 73 20 3c 61 20   But it does <a 
00b0: 68 72 65 66 3d 22 6f 6d 69 74 74 65 64 2e 68 74  href="omitted.ht
00c0: 6d 6c 22 3e 6f 6d 69 74 20 73 6f 6d 65 20 66 65  ml">omit some fe
00d0: 61 74 75 72 65 73 3c 2f 61 3e 0a 77 68 69 6c 65  atures</a>.while
00e0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
00f0: 65 0a 61 64 64 69 6e 67 20 61 20 66 65 77 20 66  e.adding a few f
0100: 65 61 74 75 72 65 73 20 6f 66 20 69 74 73 20 6f  eatures of its o
0110: 77 6e 2e 20 20 54 68 69 73 20 64 6f 63 75 6d 65  wn.  This docume
0120: 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 0a 64  nt attempts to.d
0130: 65 73 63 72 69 62 65 20 70 72 65 63 69 73 65 6c  escribe precisel
0140: 79 20 77 68 61 74 20 70 61 72 74 73 20 6f 66 20  y what parts of 
0150: 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
0160: 20 53 51 4c 69 74 65 20 64 6f 65 73 0a 61 6e 64   SQLite does.and
0170: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
0180: 74 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 5b 53  t.  A list of [S
0190: 51 4c 20 6b 65 79 77 6f 72 64 73 5d 20 69 73 20  QL keywords] is 
01a0: 0a 61 6c 73 6f 20 70 72 6f 76 69 64 65 64 2e 20  .also provided. 
01b0: 20 54 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   The SQL languag
01c0: 65 20 73 79 6e 74 61 78 20 69 73 20 64 65 73 63  e syntax is desc
01d0: 72 69 62 65 64 20 62 79 0a 5b 73 79 6e 74 61 78  ribed by.[syntax
01e0: 20 64 69 61 67 72 61 6d 73 5d 2e 0a 0a 3c 70 3e   diagrams]...<p>
01f0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  The following sy
0200: 6e 74 61 78 20 64 6f 63 75 6d 65 6e 74 61 74 69  ntax documentati
0210: 6f 6e 20 74 6f 70 69 63 73 20 61 72 65 20 61 76  on topics are av
0220: 61 69 6c 61 62 6c 65 3a 3c 2f 70 3e 0a 0a 3c 74  ailable:</p>..<t
0230: 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25  able width="100%
0240: 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35  " cellpadding="5
0250: 22 20 62 6f 72 64 65 72 3d 22 30 22 3e 0a 3c 74  " border="0">.<t
0260: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
0270: 70 22 3e 3c 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 20  p"><ul>..<tcl>. 
0280: 20 73 65 74 20 69 20 30 0a 20 20 73 65 74 20 6c   set i 0.  set l
0290: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
02a0: 20 7b 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20   {.    {{CREATE 
02b0: 54 41 42 4c 45 7d 20 63 72 65 61 74 65 74 61 62  TABLE} createtab
02c0: 6c 65 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45  le}.    {{CREATE
02d0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20   VIRTUAL TABLE} 
02e0: 63 72 65 61 74 65 76 74 61 62 7d 0a 20 20 20 20  createvtab}.    
02f0: 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20  {{CREATE INDEX} 
0300: 63 72 65 61 74 65 69 6e 64 65 78 7d 0a 20 20 20  createindex}.   
0310: 20 7b 56 41 43 55 55 4d 20 76 61 63 75 75 6d 7d   {VACUUM vacuum}
0320: 0a 20 20 20 20 7b 7b 44 52 4f 50 20 54 41 42 4c  .    {{DROP TABL
0330: 45 7d 20 64 72 6f 70 74 61 62 6c 65 7d 0a 20 20  E} droptable}.  
0340: 20 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20    {{DROP INDEX} 
0350: 64 72 6f 70 69 6e 64 65 78 7d 0a 20 20 20 20 7b  dropindex}.    {
0360: 49 4e 53 45 52 54 20 69 6e 73 65 72 74 7d 0a 20  INSERT insert}. 
0370: 20 20 20 7b 52 45 50 4c 41 43 45 20 72 65 70 6c     {REPLACE repl
0380: 61 63 65 7d 0a 20 20 20 20 7b 44 45 4c 45 54 45  ace}.    {DELETE
0390: 20 64 65 6c 65 74 65 7d 0a 20 20 20 20 7b 55 50   delete}.    {UP
03a0: 44 41 54 45 20 75 70 64 61 74 65 7d 0a 20 20 20  DATE update}.   
03b0: 20 7b 53 45 4c 45 43 54 20 73 65 6c 65 63 74 7d   {SELECT select}
03c0: 0a 20 20 20 20 7b 63 6f 6d 6d 65 6e 74 20 63 6f  .    {comment co
03d0: 6d 6d 65 6e 74 7d 0a 20 20 20 20 7b 45 58 50 4c  mment}.    {EXPL
03e0: 41 49 4e 20 65 78 70 6c 61 69 6e 7d 0a 20 20 20  AIN explain}.   
03f0: 20 7b 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70   {expression exp
0400: 72 7d 0a 20 20 20 20 7b 7b 42 45 47 49 4e 20 54  r}.    {{BEGIN T
0410: 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e  RANSACTION} tran
0420: 73 61 63 74 69 6f 6e 7d 0a 20 20 20 20 7b 7b 43  saction}.    {{C
0430: 4f 4d 4d 49 54 20 54 52 41 4e 53 41 43 54 49 4f  OMMIT TRANSACTIO
0440: 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 43  N} transaction C
0450: 4f 4d 4d 49 54 7d 0a 20 20 20 20 7b 7b 45 4e 44  OMMIT}.    {{END
0460: 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72   TRANSACTION} tr
0470: 61 6e 73 61 63 74 69 6f 6e 20 43 4f 4d 4d 49 54  ansaction COMMIT
0480: 7d 0a 20 20 20 20 7b 7b 52 4f 4c 4c 42 41 43 4b  }.    {{ROLLBACK
0490: 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72   TRANSACTION} tr
04a0: 61 6e 73 61 63 74 69 6f 6e 20 52 4f 4c 4c 42 41  ansaction ROLLBA
04b0: 43 4b 7d 0a 20 20 20 20 7b 53 41 56 45 50 4f 49  CK}.    {SAVEPOI
04c0: 4e 54 20 73 61 76 65 70 6f 69 6e 74 7d 0a 20 20  NT savepoint}.  
04d0: 20 20 7b 7b 52 45 4c 45 41 53 45 20 53 41 56 45    {{RELEASE SAVE
04e0: 50 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74  POINT} savepoint
04f0: 20 53 41 56 45 50 4f 49 4e 54 7d 0a 20 20 20 20   SAVEPOINT}.    
0500: 7b 50 52 41 47 4d 41 20 70 72 61 67 6d 61 2e 68  {PRAGMA pragma.h
0510: 74 6d 6c 7d 0a 20 20 20 20 7b 7b 4f 4e 20 43 4f  tml}.    {{ON CO
0520: 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63  NFLICT clause} c
0530: 6f 6e 66 6c 69 63 74 7d 0a 20 20 20 20 7b 7b 43  onflict}.    {{C
0540: 52 45 41 54 45 20 56 49 45 57 7d 20 63 72 65 61  REATE VIEW} crea
0550: 74 65 76 69 65 77 7d 0a 20 20 20 20 7b 7b 44 52  teview}.    {{DR
0560: 4f 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65  OP VIEW} dropvie
0570: 77 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20  w}.    {{CREATE 
0580: 54 52 49 47 47 45 52 7d 20 63 72 65 61 74 65 74  TRIGGER} createt
0590: 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 44 52  rigger}.    {{DR
05a0: 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70  OP TRIGGER} drop
05b0: 74 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 41  trigger}.    {{A
05c0: 54 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20  TTACH DATABASE} 
05d0: 61 74 74 61 63 68 7d 0a 20 20 20 20 7b 7b 44 45  attach}.    {{DE
05e0: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64  TACH DATABASE} d
05f0: 65 74 61 63 68 7d 0a 20 20 20 20 7b 52 45 49 4e  etach}.    {REIN
0600: 44 45 58 20 72 65 69 6e 64 65 78 7d 0a 20 20 20  DEX reindex}.   
0610: 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d 20   {{ALTER TABLE} 
0620: 61 6c 74 65 72 74 61 62 6c 65 7d 0a 20 20 20 20  altertable}.    
0630: 7b 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c 79  {{ANALYZE} analy
0640: 7a 65 7d 0a 20 20 20 20 7b 7b 49 4e 44 45 58 45  ze}.    {{INDEXE
0650: 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79 7d  D BY} indexedby}
0660: 0a 20 20 20 20 7b 7b 61 67 67 72 65 67 61 74 65  .    {{aggregate
0670: 20 66 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67 66   functions} aggf
0680: 75 6e 63 20 61 67 67 66 75 6e 63 7d 0a 20 20 20  unc aggfunc}.   
0690: 20 7b 7b 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e   {{core function
06a0: 73 7d 20 63 6f 72 65 66 75 6e 63 20 63 6f 72 65  s} corefunc core
06b0: 66 75 6e 63 7d 0a 20 20 20 20 7b 7b 64 61 74 65  func}.    {{date
06c0: 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69   and time functi
06d0: 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20 64 61  ons} datefunc da
06e0: 74 65 66 75 6e 63 7d 0a 20 20 20 20 7b 6b 65 79  tefunc}.    {key
06f0: 77 6f 72 64 73 20 6b 65 79 77 6f 72 64 73 20 7b  words keywords {
0700: 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a 20  SQL keywords}}. 
0710: 20 7d 0a 20 20 73 65 74 20 6c 61 6e 67 5f 73 65   }.  set lang_se
0720: 63 74 69 6f 6e 5f 62 72 65 61 6b 20 5b 65 78 70  ction_break [exp
0730: 72 20 7b 28 5b 6c 6c 65 6e 67 74 68 20 24 6c 61  r {([llength $la
0740: 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74 5d  ng_section_list]
0750: 2b 32 29 2f 33 7d 5d 0a 20 20 66 6f 72 65 61 63  +2)/3}].  foreac
0760: 68 20 7b 73 65 63 74 69 6f 6e 7d 20 5b 6c 73 6f  h {section} [lso
0770: 72 74 20 2d 69 6e 64 65 78 20 30 20 2d 64 69 63  rt -index 0 -dic
0780: 74 69 6f 6e 61 72 79 20 24 6c 61 6e 67 5f 73 65  tionary $lang_se
0790: 63 74 69 6f 6e 5f 6c 69 73 74 5d 20 7b 0a 20 20  ction_list] {.  
07a0: 66 6f 72 65 61 63 68 20 7b 73 5f 74 69 74 6c 65  foreach {s_title
07b0: 20 73 5f 74 61 67 20 73 5f 6b 77 7d 20 24 73 65   s_tag s_kw} $se
07c0: 63 74 69 6f 6e 20 7b 7d 0a 20 20 69 66 20 7b 24  ction {}.  if {$
07d0: 73 5f 6b 77 20 3d 3d 20 22 22 7d 20 7b 0a 20 20  s_kw == ""} {.  
07e0: 20 20 73 65 74 20 73 5f 6b 77 20 24 73 5f 74 69    set s_kw $s_ti
07f0: 74 6c 65 0a 20 20 7d 0a 20 20 69 66 20 7b 24 73  tle.  }.  if {$s
0800: 5f 74 61 67 3d 3d 22 70 72 61 67 6d 61 2e 68 74  _tag=="pragma.ht
0810: 6d 6c 22 7d 20 7b 0a 20 20 20 20 73 65 74 20 75  ml"} {.    set u
0820: 72 6c 20 24 73 5f 74 61 67 0a 20 20 7d 20 65 6c  rl $s_tag.  } el
0830: 73 65 20 7b 0a 20 20 20 20 73 65 74 20 75 72 6c  se {.    set url
0840: 20 6c 61 6e 67 5f 24 73 5f 74 61 67 2e 68 74 6d   lang_$s_tag.htm
0850: 6c 0a 20 20 7d 0a 20 20 68 64 5f 72 65 73 6f 6c  l.  }.  hd_resol
0860: 76 65 20 22 3c 6c 69 3e 5c 5b 24 73 5f 6b 77 7c  ve "<li>\[$s_kw|
0870: 24 73 5f 74 69 74 6c 65 5c 5d 3c 2f 6c 69 3e 22  $s_title\]</li>"
0880: 0a 20 20 69 6e 63 72 20 69 0a 20 20 69 66 20 7b  .  incr i.  if {
0890: 24 69 3d 3d 24 6c 61 6e 67 5f 73 65 63 74 69 6f  $i==$lang_sectio
08a0: 6e 5f 62 72 65 61 6b 20 7c 7c 20 24 69 3d 3d 32  n_break || $i==2
08b0: 2a 24 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 62  *$lang_section_b
08c0: 72 65 61 6b 7d 20 7b 0a 20 20 20 20 68 64 5f 70  reak} {.    hd_p
08d0: 75 74 73 20 22 3c 2f 75 6c 3e 3c 2f 74 64 3e 3c  uts "</ul></td><
08e0: 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c  td valign=\"top\
08f0: 22 3e 3c 75 6c 3e 22 0a 20 20 7d 0a 7d 0a 3c 2f  "><ul>".  }.}.</
0900: 74 63 6c 3e 0a 3c 2f 75 6c 3e 3c 2f 74 64 3e 3c  tcl>.</ul></td><
0910: 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70  /tr></table>..<p
0920: 3e 5e 54 68 65 20 72 6f 75 74 69 6e 65 73 20 5b  >^The routines [
0930: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
0940: 76 32 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f  v2()], [sqlite3_
0950: 70 72 65 70 61 72 65 28 29 5d 2c 0a 5b 73 71 6c  prepare()],.[sql
0960: 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 28 29  ite3_prepare16()
0970: 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  ], [sqlite3_prep
0980: 61 72 65 31 36 5f 76 32 28 29 5d 2c 20 0a 5b 73  are16_v2()], .[s
0990: 71 6c 69 74 65 33 5f 65 78 65 63 28 29 5d 2c 20  qlite3_exec()], 
09a0: 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 67 65 74  and [sqlite3_get
09b0: 5f 74 61 62 6c 65 28 29 5d 20 61 63 63 65 70 74  _table()] accept
09c0: 0a 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  .an SQL statemen
09d0: 74 20 6c 69 73 74 20 28 73 71 6c 2d 73 74 6d 74  t list (sql-stmt
09e0: 2d 6c 69 73 74 29 20 77 68 69 63 68 20 69 73 20  -list) which is 
09f0: 61 20 73 65 6d 69 63 6f 6c 6f 6e 2d 73 65 70 61  a semicolon-sepa
0a00: 72 61 74 65 64 0a 6c 69 73 74 20 6f 66 20 73 74  rated.list of st
0a10: 61 74 65 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c  atements.</p>..<
0a20: 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61  tcl>BubbleDiagra
0a30: 6d 20 73 71 6c 2d 73 74 6d 74 2d 6c 69 73 74 3c  m sql-stmt-list<
0a40: 2f 74 63 6c 3e 0a 0a 3c 70 3e 45 61 63 68 20 53  /tcl>..<p>Each S
0a50: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20  QL statement in 
0a60: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 6c 69  the statement li
0a70: 73 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  st is an instanc
0a80: 65 20 6f 66 20 74 68 65 0a 66 6f 6c 6c 6f 77 69  e of the.followi
0a90: 6e 67 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75  ng:</p>..<tcl>Bu
0aa0: 62 62 6c 65 44 69 61 67 72 61 6d 20 73 71 6c 2d  bbleDiagram sql-
0ab0: 73 74 6d 74 3c 2f 74 63 6c 3e 0a 0a 3c 74 63 6c  stmt</tcl>..<tcl
0ac0: 3e 0a 70 72 6f 63 20 4f 70 65 72 61 74 6f 72 20  >.proc Operator 
0ad0: 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65 74 75 72  {name} {.  retur
0ae0: 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c  n "<font color=\
0af0: 22 23 32 63 32 63 66 30 5c 22 3e 3c 62 69 67 3e  "#2c2cf0\"><big>
0b00: 24 6e 61 6d 65 3c 2f 62 69 67 3e 3c 2f 66 6f 6e  $name</big></fon
0b10: 74 3e 22 0a 7d 0a 70 72 6f 63 20 4e 6f 6e 74 65  t>".}.proc Nonte
0b20: 72 6d 69 6e 61 6c 20 7b 6e 61 6d 65 7d 20 7b 0a  rminal {name} {.
0b30: 20 20 72 65 74 75 72 6e 20 22 3c 69 3e 3c 66 6f    return "<i><fo
0b40: 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 66 66 33 34  nt color=\"#ff34
0b50: 33 34 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74  34\">$name</font
0b60: 3e 3c 2f 69 3e 22 0a 7d 0a 70 72 6f 63 20 4b 65  ></i>".}.proc Ke
0b70: 79 77 6f 72 64 20 7b 6e 61 6d 65 7d 20 7b 0a 20  yword {name} {. 
0b80: 20 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74 20 63   return "<font c
0b90: 6f 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30 5c 22  olor=\"#2c2cf0\"
0ba0: 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 22 0a 7d  >$name</font>".}
0bb0: 0a 70 72 6f 63 20 45 78 61 6d 70 6c 65 20 7b 74  .proc Example {t
0bc0: 65 78 74 7d 20 7b 0a 20 20 68 64 5f 70 75 74 73  ext} {.  hd_puts
0bd0: 20 22 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70   "<blockquote><p
0be0: 72 65 3e 24 74 65 78 74 3c 2f 70 72 65 3e 3c 2f  re>$text</pre></
0bf0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 22 0a 7d 0a 0a  blockquote>".}..
0c00: 70 72 6f 63 20 53 65 63 74 69 6f 6e 20 7b 6e 61  proc Section {na
0c10: 6d 65 20 6c 61 62 65 6c 20 6b 65 79 77 6f 72 64  me label keyword
0c20: 73 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 44 4f  s} {.  global DO
0c30: 43 0a 20 20 68 64 5f 63 6c 6f 73 65 5f 6d 61 69  C.  hd_close_mai
0c40: 6e 0a 20 20 68 64 5f 6f 70 65 6e 5f 6d 61 69 6e  n.  hd_open_main
0c50: 20 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e 68 74 6d   lang_$label.htm
0c60: 6c 0a 20 20 68 64 5f 68 65 61 64 65 72 20 22 53  l.  hd_header "S
0c70: 51 4c 69 74 65 20 51 75 65 72 79 20 4c 61 6e 67  QLite Query Lang
0c80: 75 61 67 65 3a 20 24 6e 61 6d 65 22 20 24 44 4f  uage: $name" $DO
0c90: 43 2f 70 61 67 65 73 2f 6c 61 6e 67 2e 69 6e 0a  C/pages/lang.in.
0ca0: 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72    eval hd_keywor
0cb0: 64 73 20 24 6b 65 79 77 6f 72 64 73 0a 20 20 69  ds $keywords.  i
0cc0: 66 20 7b 5b 6c 73 65 61 72 63 68 20 24 6b 65 79  f {[lsearch $key
0cd0: 77 6f 72 64 73 20 24 6e 61 6d 65 5d 20 3d 3d 20  words $name] == 
0ce0: 2d 31 20 26 26 20 5b 6c 73 65 61 72 63 68 20 24  -1 && [lsearch $
0cf0: 6b 65 79 77 6f 72 64 73 20 2a 24 6e 61 6d 65 5d  keywords *$name]
0d00: 20 3d 3d 20 2d 31 7d 20 7b 0a 20 20 20 20 65 76   == -1} {.    ev
0d10: 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  al hd_keywords {
0d20: 20 24 6e 61 6d 65 20 7d 0a 20 20 7d 0a 20 20 68   $name }.  }.  h
0d30: 64 5f 70 75 74 73 20 7b 3c 68 31 20 61 6c 69 67  d_puts {<h1 alig
0d40: 6e 3d 22 63 65 6e 74 65 72 22 3e 53 51 4c 20 41  n="center">SQL A
0d50: 73 20 55 6e 64 65 72 73 74 6f 6f 64 20 42 79 20  s Understood By 
0d60: 53 51 4c 69 74 65 3c 2f 68 31 3e 7d 0a 20 20 68  SQLite</h1>}.  h
0d70: 64 5f 70 75 74 73 20 7b 3c 70 3e 3c 61 20 68 72  d_puts {<p><a hr
0d80: 65 66 3d 22 6c 61 6e 67 2e 68 74 6d 6c 22 3e 5b  ef="lang.html">[
0d90: 54 6f 70 5d 3c 2f 61 3e 3c 2f 70 3e 7d 0a 20 20  Top]</a></p>}.  
0da0: 68 64 5f 70 75 74 73 20 22 3c 68 32 3e 24 6e 61  hd_puts "<h2>$na
0db0: 6d 65 3c 2f 68 32 3e 22 0a 7d 0a 0a 23 23 23 23  me</h2>".}..####
0dc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e00: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
0e10: 69 6f 6e 20 7b 41 4c 54 45 52 20 54 41 42 4c 45  ion {ALTER TABLE
0e20: 7d 20 61 6c 74 65 72 74 61 62 6c 65 20 7b 7b 41  } altertable {{A
0e30: 4c 54 45 52 20 54 41 42 4c 45 7d 20 7b 2a 41 4c  LTER TABLE} {*AL
0e40: 54 45 52 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61  TER}}..BubbleDia
0e50: 67 72 61 6d 20 61 6c 74 65 72 2d 74 61 62 6c 65  gram alter-table
0e60: 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a  -stmt 1.</tcl>..
0e70: 3c 70 3e 53 51 4c 69 74 65 20 73 75 70 70 6f 72  <p>SQLite suppor
0e80: 74 73 20 61 20 6c 69 6d 69 74 65 64 20 73 75 62  ts a limited sub
0e90: 73 65 74 20 6f 66 20 41 4c 54 45 52 20 54 41 42  set of ALTER TAB
0ea0: 4c 45 2e 0a 54 68 65 20 41 4c 54 45 52 20 54 41  LE..The ALTER TA
0eb0: 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 53  BLE command in S
0ec0: 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74 68 65  QLite allows the
0ed0: 20 75 73 65 72 20 74 6f 20 72 65 6e 61 6d 65 20   user to rename 
0ee0: 61 20 74 61 62 6c 65 0a 6f 72 20 74 6f 20 61 64  a table.or to ad
0ef0: 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 74  d a new column t
0f00: 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61  o an existing ta
0f10: 62 6c 65 2e 20 49 74 20 69 73 20 6e 6f 74 20 70  ble. It is not p
0f20: 6f 73 73 69 62 6c 65 0a 74 6f 20 72 65 6e 61 6d  ossible.to renam
0f30: 65 20 61 20 63 6f 6c 75 6d 6e 2c 20 72 65 6d 6f  e a column, remo
0f40: 76 65 20 61 20 63 6f 6c 75 6d 6e 2c 20 6f 72 20  ve a column, or 
0f50: 61 64 64 20 6f 72 20 72 65 6d 6f 76 65 20 63 6f  add or remove co
0f60: 6e 73 74 72 61 69 6e 74 73 20 66 72 6f 6d 20 61  nstraints from a
0f70: 20 74 61 62 6c 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70   table..</p>..<p
0f80: 3e 20 5e 28 54 68 65 20 52 45 4e 41 4d 45 20 54  > ^(The RENAME T
0f90: 4f 20 73 79 6e 74 61 78 20 69 73 20 75 73 65 64  O syntax is used
0fa0: 20 74 6f 20 72 65 6e 61 6d 65 20 74 68 65 20 74   to rename the t
0fb0: 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65 64 20  able identified 
0fc0: 62 79 20 0a 3c 69 3e 26 23 39 31 3b 64 61 74 61  by .<i>&#91;data
0fd0: 62 61 73 65 2d 6e 61 6d 65 2e 26 23 39 33 3b 74  base-name.&#93;t
0fe0: 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 74 6f  able-name</i> to
0ff0: 20 3c 69 3e 6e 65 77 2d 74 61 62 6c 65 2d 6e 61   <i>new-table-na
1000: 6d 65 3c 2f 69 3e 2e 29 5e 0a 54 68 69 73 20 63  me</i>.)^.This c
1010: 6f 6d 6d 61 6e 64 20 0a 63 61 6e 6e 6f 74 20 62  ommand .cannot b
1020: 65 20 75 73 65 64 20 74 6f 20 6d 6f 76 65 20 61  e used to move a
1030: 20 74 61 62 6c 65 20 62 65 74 77 65 65 6e 20 61   table between a
1040: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
1050: 73 2c 20 6f 6e 6c 79 20 74 6f 20 72 65 6e 61 6d  s, only to renam
1060: 65 20 0a 61 20 74 61 62 6c 65 20 77 69 74 68 69  e .a table withi
1070: 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  n the same datab
1080: 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 49  ase.</p>..<p> ^I
1090: 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  f the table bein
10a0: 67 20 72 65 6e 61 6d 65 64 20 68 61 73 20 74 72  g renamed has tr
10b0: 69 67 67 65 72 73 20 6f 72 20 69 6e 64 69 63 65  iggers or indice
10c0: 73 2c 20 74 68 65 6e 20 74 68 65 73 65 20 72 65  s, then these re
10d0: 6d 61 69 6e 0a 61 74 74 61 63 68 65 64 20 74 6f  main.attached to
10e0: 20 74 68 65 20 74 61 62 6c 65 20 61 66 74 65 72   the table after
10f0: 20 69 74 20 68 61 73 20 62 65 65 6e 20 72 65 6e   it has been ren
1100: 61 6d 65 64 2e 20 20 5e 48 6f 77 65 76 65 72 2c  amed.  ^However,
1110: 20 69 66 20 74 68 65 72 65 20 61 72 65 0a 61 6e   if there are.an
1120: 79 20 76 69 65 77 20 64 65 66 69 6e 69 74 69 6f  y view definitio
1130: 6e 73 2c 20 6f 72 20 73 74 61 74 65 6d 65 6e 74  ns, or statement
1140: 73 20 65 78 65 63 75 74 65 64 20 62 79 20 74 72  s executed by tr
1150: 69 67 67 65 72 73 20 74 68 61 74 20 72 65 66 65  iggers that refe
1160: 72 20 74 6f 0a 74 68 65 20 74 61 62 6c 65 20 62  r to.the table b
1170: 65 69 6e 67 20 72 65 6e 61 6d 65 64 2c 20 74 68  eing renamed, th
1180: 65 73 65 20 61 72 65 20 6e 6f 74 20 61 75 74 6f  ese are not auto
1190: 6d 61 74 69 63 61 6c 6c 79 20 6d 6f 64 69 66 69  matically modifi
11a0: 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e 65  ed to use the ne
11b0: 77 0a 74 61 62 6c 65 20 6e 61 6d 65 2e 20 49 66  w.table name. If
11c0: 20 74 68 69 73 20 69 73 20 72 65 71 75 69 72 65   this is require
11d0: 64 2c 20 74 68 65 20 74 72 69 67 67 65 72 73 20  d, the triggers 
11e0: 6f 72 20 76 69 65 77 20 64 65 66 69 6e 69 74 69  or view definiti
11f0: 6f 6e 73 20 6d 75 73 74 20 62 65 0a 64 72 6f 70  ons must be.drop
1200: 70 65 64 20 61 6e 64 20 72 65 63 72 65 61 74 65  ped and recreate
1210: 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e 65 77  d to use the new
1220: 20 74 61 62 6c 65 20 6e 61 6d 65 20 62 79 20 68   table name by h
1230: 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  and..</p>..<p>^I
1240: 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  f [foreign key c
1250: 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72 65 20  onstraints] are 
1260: 0a 5b 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20 70  .[foreign_keys p
1270: 72 61 67 6d 61 20 7c 20 65 6e 61 62 6c 65 64 5d  ragma | enabled]
1280: 20 77 68 65 6e 20 61 20 74 61 62 6c 65 20 69 73   when a table is
1290: 20 72 65 6e 61 6d 65 64 2c 20 74 68 65 6e 20 61   renamed, then a
12a0: 6e 79 0a 5b 66 6f 72 65 69 67 6e 2d 6b 65 79 2d  ny.[foreign-key-
12b0: 63 6c 61 75 73 65 20 7c 20 52 45 46 45 52 45 4e  clause | REFEREN
12c0: 43 45 53 20 63 6c 61 75 73 65 73 5d 20 69 6e 20  CES clauses] in 
12d0: 61 6e 79 20 74 61 62 6c 65 20 28 65 69 74 68 65  any table (eithe
12e0: 72 20 74 68 65 0a 74 61 62 6c 65 20 62 65 69 6e  r the.table bein
12f0: 67 20 72 65 6e 61 6d 65 64 20 6f 72 20 73 6f 6d  g renamed or som
1300: 65 20 6f 74 68 65 72 20 74 61 62 6c 65 29 0a 74  e other table).t
1310: 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 65  hat refer to the
1320: 20 74 61 62 6c 65 20 62 65 69 6e 67 20 72 65 6e   table being ren
1330: 61 6d 65 64 20 61 72 65 20 6d 6f 64 69 66 69 65  amed are modifie
1340: 64 20 74 6f 20 72 65 66 65 72 20 0a 74 6f 20 74  d to refer .to t
1350: 68 65 20 72 65 6e 61 6d 65 64 20 74 61 62 6c 65  he renamed table
1360: 20 62 79 20 69 74 73 20 6e 65 77 20 6e 61 6d 65   by its new name
1370: 2e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 44 44 20  ...<p> ^The ADD 
1380: 43 4f 4c 55 4d 4e 20 73 79 6e 74 61 78 0a 69 73  COLUMN syntax.is
1390: 20 75 73 65 64 20 74 6f 20 61 64 64 20 61 20 6e   used to add a n
13a0: 65 77 20 63 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20  ew column to an 
13b0: 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65 2e 0a  existing table..
13c0: 5e 54 68 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 20  ^The new column 
13d0: 69 73 20 61 6c 77 61 79 73 20 61 70 70 65 6e 64  is always append
13e0: 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66  ed to the end of
13f0: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65 78 69   the list of exi
1400: 73 74 69 6e 67 20 63 6f 6c 75 6d 6e 73 2e 0a 54  sting columns..T
1410: 68 65 20 5b 63 6f 6c 75 6d 6e 2d 64 65 66 5d 20  he [column-def] 
1420: 72 75 6c 65 20 64 65 66 69 6e 65 73 20 74 68 65  rule defines the
1430: 20 63 68 61 72 61 63 74 65 72 69 73 74 69 63 73   characteristics
1440: 20 6f 66 20 74 68 65 20 6e 65 77 20 63 6f 6c 75   of the new colu
1450: 6d 6e 2e 0a 5e 28 54 68 65 20 6e 65 77 20 63 6f  mn..^(The new co
1460: 6c 75 6d 6e 20 6d 61 79 20 74 61 6b 65 20 61 6e  lumn may take an
1470: 79 20 6f 66 20 74 68 65 20 66 6f 72 6d 73 20 70  y of the forms p
1480: 65 72 6d 69 73 73 69 62 6c 65 20 69 6e 20 61 20  ermissible in a 
1490: 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 0a 73  [CREATE TABLE].s
14a0: 74 61 74 65 6d 65 6e 74 2c 20 77 69 74 68 20 74  tatement, with t
14b0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 73  he following res
14c0: 74 72 69 63 74 69 6f 6e 73 3a 29 5e 0a 3c 75 6c  trictions:)^.<ul
14d0: 3e 0a 3c 6c 69 3e 5e 54 68 65 20 63 6f 6c 75 6d  >.<li>^The colum
14e0: 6e 20 6d 61 79 20 6e 6f 74 20 68 61 76 65 20 61  n may not have a
14f0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20   PRIMARY KEY or 
1500: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
1510: 74 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 5e 54 68 65  t.</li>.<li>^The
1520: 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20   column may not 
1530: 68 61 76 65 20 61 20 64 65 66 61 75 6c 74 20 76  have a default v
1540: 61 6c 75 65 20 6f 66 20 43 55 52 52 45 4e 54 5f  alue of CURRENT_
1550: 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41  TIME, CURRENT_DA
1560: 54 45 2c 20 0a 20 20 20 20 43 55 52 52 45 4e 54  TE, .    CURRENT
1570: 5f 54 49 4d 45 53 54 41 4d 50 2c 20 6f 72 20 61  _TIMESTAMP, or a
1580: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  n expression in 
1590: 70 61 72 65 6e 74 68 65 73 65 73 2e 3c 2f 6c 69  parentheses.</li
15a0: 3e 0a 3c 6c 69 3e 5e 49 66 20 61 20 4e 4f 54 20  >.<li>^If a NOT 
15b0: 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20  NULL constraint 
15c0: 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  is specified, th
15d0: 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 75  en the column mu
15e0: 73 74 20 68 61 76 65 20 61 0a 20 20 20 20 64 65  st have a.    de
15f0: 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 74 68 65  fault value othe
1600: 72 20 74 68 61 6e 20 4e 55 4c 4c 2e 0a 3c 6c 69  r than NULL..<li
1610: 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65  >^If [foreign ke
1620: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61  y constraints] a
1630: 72 65 20 5b 66 6f 72 65 69 67 6e 5f 6b 65 79 73  re [foreign_keys
1640: 20 70 72 61 67 6d 61 20 7c 20 65 6e 61 62 6c 65   pragma | enable
1650: 64 5d 20 61 6e 64 0a 20 20 20 20 61 20 63 6f 6c  d] and.    a col
1660: 75 6d 6e 20 77 69 74 68 20 61 20 5b 66 6f 72 65  umn with a [fore
1670: 69 67 6e 2d 6b 65 79 2d 63 6c 61 75 73 65 20 7c  ign-key-clause |
1680: 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
1690: 73 65 5d 0a 20 20 20 20 69 73 20 61 64 64 65 64  se].    is added
16a0: 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 75 73  , the column mus
16b0: 74 20 68 61 76 65 20 61 20 64 65 66 61 75 6c 74  t have a default
16c0: 20 76 61 6c 75 65 20 6f 66 20 4e 55 4c 4c 2e 0a   value of NULL..
16d0: 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20  </ul>..<p>^Note 
16e0: 61 6c 73 6f 20 74 68 61 74 20 77 68 65 6e 20 61  also that when a
16f0: 64 64 69 6e 67 20 61 20 43 48 45 43 4b 20 63 6f  dding a CHECK co
1700: 6e 73 74 72 61 69 6e 74 2c 20 74 68 65 20 43 48  nstraint, the CH
1710: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 0a 69  ECK constraint.i
1720: 73 20 6e 6f 74 20 74 65 73 74 65 64 20 61 67 61  s not tested aga
1730: 69 6e 73 74 20 70 72 65 65 78 69 73 74 69 6e 67  inst preexisting
1740: 20 72 6f 77 73 20 6f 66 20 74 68 65 20 74 61 62   rows of the tab
1750: 6c 65 2e 0a 5e 54 68 69 73 20 63 61 6e 20 72 65  le..^This can re
1760: 73 75 6c 74 20 69 6e 20 61 20 74 61 62 6c 65 20  sult in a table 
1770: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 64 61  that contains da
1780: 74 61 20 74 68 61 74 0a 69 73 20 69 6e 20 76 69  ta that.is in vi
1790: 6f 6c 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 43  olation of the C
17a0: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2e  HECK constraint.
17b0: 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e    Future version
17c0: 73 20 6f 66 20 53 51 4c 69 74 65 20 6d 69 67 68  s of SQLite migh
17d0: 74 0a 63 68 61 6e 67 65 20 74 6f 20 76 61 6c 69  t.change to vali
17e0: 64 61 74 65 20 43 48 45 43 4b 20 63 6f 6e 73 74  date CHECK const
17f0: 72 61 69 6e 74 73 20 61 73 20 74 68 65 79 20 61  raints as they a
1800: 72 65 20 61 64 64 65 64 2e 3c 2f 70 3e 0a 0a 3c  re added.</p>..<
1810: 70 3e 20 54 68 65 20 65 78 65 63 75 74 69 6f 6e  p> The execution
1820: 20 74 69 6d 65 20 6f 66 20 74 68 65 20 41 4c 54   time of the ALT
1830: 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  ER TABLE command
1840: 20 69 73 20 69 6e 64 65 70 65 6e 64 65 6e 74 20   is independent 
1850: 6f 66 0a 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66  of.the amount of
1860: 20 64 61 74 61 20 69 6e 20 74 68 65 20 74 61 62   data in the tab
1870: 6c 65 2e 20 20 54 68 65 20 41 4c 54 45 52 20 54  le.  The ALTER T
1880: 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 72 75 6e  ABLE command run
1890: 73 20 61 73 20 71 75 69 63 6b 6c 79 0a 6f 6e 20  s as quickly.on 
18a0: 61 20 74 61 62 6c 65 20 77 69 74 68 20 31 30 20  a table with 10 
18b0: 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73 20 61 73 20  million rows as 
18c0: 69 74 20 64 6f 65 73 20 6f 6e 20 61 20 74 61 62  it does on a tab
18d0: 6c 65 20 77 69 74 68 20 31 20 72 6f 77 2e 0a 3c  le with 1 row..<
18e0: 2f 70 3e 0a 0a 3c 70 3e 41 66 74 65 72 20 41 44  /p>..<p>After AD
18f0: 44 20 43 4f 4c 55 4d 4e 20 68 61 73 20 62 65 65  D COLUMN has bee
1900: 6e 20 72 75 6e 20 6f 6e 20 61 20 64 61 74 61 62  n run on a datab
1910: 61 73 65 2c 20 74 68 61 74 20 64 61 74 61 62 61  ase, that databa
1920: 73 65 20 77 69 6c 6c 20 6e 6f 74 0a 62 65 20 72  se will not.be r
1930: 65 61 64 61 62 6c 65 20 62 79 20 53 51 4c 69 74  eadable by SQLit
1940: 65 20 76 65 72 73 69 6f 6e 20 33 2e 31 2e 33 20  e version 3.1.3 
1950: 61 6e 64 20 65 61 72 6c 69 65 72 2e 3c 2f 70 3e  and earlier.</p>
1960: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
1970: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1980: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19b0: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
19c0: 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c 79 7a 65  ANALYZE} analyze
19d0: 20 41 4e 41 4c 59 5a 45 0a 0a 42 75 62 62 6c 65   ANALYZE..Bubble
19e0: 44 69 61 67 72 61 6d 20 61 6e 61 6c 79 7a 65 2d  Diagram analyze-
19f0: 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c  stmt 1.</tcl>..<
1a00: 70 3e 20 5e 54 68 65 20 41 4e 41 4c 59 5a 45 20  p> ^The ANALYZE 
1a10: 63 6f 6d 6d 61 6e 64 20 67 61 74 68 65 72 73 20  command gathers 
1a20: 73 74 61 74 69 73 74 69 63 73 20 61 62 6f 75 74  statistics about
1a30: 20 69 6e 64 69 63 65 73 20 61 6e 64 20 73 74 6f   indices and sto
1a40: 72 65 73 20 74 68 65 6d 0a 69 6e 20 61 20 73 70  res them.in a sp
1a50: 65 63 69 61 6c 20 74 61 62 6c 65 73 20 69 6e 20  ecial tables in 
1a60: 74 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65  the database whe
1a70: 72 65 20 74 68 65 20 71 75 65 72 79 20 6f 70 74  re the query opt
1a80: 69 6d 69 7a 65 72 20 63 61 6e 20 75 73 65 0a 74  imizer can use.t
1a90: 68 65 6d 20 74 6f 20 68 65 6c 70 20 6d 61 6b 65  hem to help make
1aa0: 20 62 65 74 74 65 72 20 69 6e 64 65 78 20 63 68   better index ch
1ab0: 6f 69 63 65 73 2e 0a 5e 49 66 20 6e 6f 20 61 72  oices..^If no ar
1ac0: 67 75 6d 65 6e 74 73 20 61 72 65 20 67 69 76 65  guments are give
1ad0: 6e 2c 20 61 6c 6c 20 69 6e 64 69 63 65 73 20 69  n, all indices i
1ae0: 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  n all attached d
1af0: 61 74 61 62 61 73 65 73 20 61 72 65 0a 61 6e 61  atabases are.ana
1b00: 6c 79 7a 65 64 2e 20 20 5e 49 66 20 61 20 64 61  lyzed.  ^If a da
1b10: 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73 20 67  tabase name is g
1b20: 69 76 65 6e 20 61 73 20 74 68 65 20 61 72 67 75  iven as the argu
1b30: 6d 65 6e 74 2c 20 61 6c 6c 20 69 6e 64 69 63 65  ment, all indice
1b40: 73 0a 69 6e 20 74 68 61 74 20 6f 6e 65 20 64 61  s.in that one da
1b50: 74 61 62 61 73 65 20 61 72 65 20 61 6e 61 6c 79  tabase are analy
1b60: 7a 65 64 2e 20 20 5e 49 66 20 74 68 65 20 61 72  zed.  ^If the ar
1b70: 67 75 6d 65 6e 74 20 69 73 20 61 20 74 61 62 6c  gument is a tabl
1b80: 65 20 6e 61 6d 65 2c 0a 74 68 65 6e 20 6f 6e 6c  e name,.then onl
1b90: 79 20 69 6e 64 69 63 65 73 20 61 73 73 6f 63 69  y indices associ
1ba0: 61 74 65 64 20 77 69 74 68 20 74 68 61 74 20 6f  ated with that o
1bb0: 6e 65 20 74 61 62 6c 65 20 61 72 65 20 61 6e 61  ne table are ana
1bc0: 6c 79 7a 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20  lyzed.</p>..<p> 
1bd0: 5e 54 68 65 20 64 65 66 61 75 6c 74 20 69 6d 70  ^The default imp
1be0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 73 74 6f 72  lementation stor
1bf0: 65 73 20 61 6c 6c 20 73 74 61 74 69 73 74 69 63  es all statistic
1c00: 73 20 69 6e 20 61 20 73 69 6e 67 6c 65 0a 74 61  s in a single.ta
1c10: 62 6c 65 20 6e 61 6d 65 64 20 3c 62 3e 73 71 6c  ble named <b>sql
1c20: 69 74 65 5f 73 74 61 74 31 3c 2f 62 3e 2e 20 20  ite_stat1</b>.  
1c30: 5e 49 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f  ^If SQLite is co
1c40: 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 0a  mpiled with the.
1c50: 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  [SQLITE_ENABLE_S
1c60: 54 41 54 32 5d 20 6f 70 74 69 6f 6e 2c 20 74 68  TAT2] option, th
1c70: 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 68 69  en additional hi
1c80: 73 74 6f 67 72 61 6d 20 64 61 74 61 20 69 73 0a  stogram data is.
1c90: 63 6f 6c 6c 65 63 74 65 64 20 61 6e 64 20 73 74  collected and st
1ca0: 6f 72 65 64 20 69 6e 20 3c 62 3e 73 71 6c 69 74  ored in <b>sqlit
1cb0: 65 5f 73 74 61 74 32 3c 2f 62 3e 2e 0a 46 75 74  e_stat2</b>..Fut
1cc0: 75 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73  ure enhancements
1cd0: 20 6d 61 79 20 63 72 65 61 74 65 0a 61 64 64 69   may create.addi
1ce0: 74 69 6f 6e 61 6c 20 74 61 62 6c 65 73 20 77 69  tional tables wi
1cf0: 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  th the same name
1d00: 20 70 61 74 74 65 72 6e 20 65 78 63 65 70 74 20   pattern except 
1d10: 77 69 74 68 20 74 68 65 20 22 31 22 0a 6f 72 20  with the "1".or 
1d20: 22 32 22 20 63 68 61 6e 67 65 64 20 74 6f 20 61  "2" changed to a
1d30: 20 64 69 66 66 65 72 65 6e 74 20 64 69 67 69 74   different digit
1d40: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20  .</p>..<p> ^The 
1d50: 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20 63 6f 6d  [DROP TABLE] com
1d60: 6d 61 6e 64 20 64 6f 65 73 0a 6e 6f 74 20 77 6f  mand does.not wo
1d70: 72 6b 20 6f 6e 20 74 68 65 20 3c 62 3e 73 71 6c  rk on the <b>sql
1d80: 69 74 65 5f 73 74 61 74 31 3c 2f 62 3e 20 6f 72  ite_stat1</b> or
1d90: 20 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61 74 32   <b>sqlite_stat2
1da0: 3c 2f 62 3e 20 74 61 62 6c 65 73 2c 0a 62 75 74  </b> tables,.but
1db0: 20 61 6c 6c 20 74 68 65 20 63 6f 6e 74 65 6e 74   all the content
1dc0: 20 6f 66 20 74 68 6f 73 65 20 74 61 62 6c 65 73   of those tables
1dd0: 20 63 61 6e 20 62 65 20 71 75 65 72 69 65 64 20   can be queried 
1de0: 75 73 69 6e 67 20 5b 53 45 4c 45 43 54 5d 0a 61  using [SELECT].a
1df0: 6e 64 20 63 61 6e 20 62 65 20 64 65 6c 65 74 65  nd can be delete
1e00: 64 2c 20 61 75 67 6d 65 6e 74 65 64 2c 20 6f 72  d, augmented, or
1e10: 20 6d 6f 64 69 66 69 65 64 20 75 73 69 6e 67 20   modified using 
1e20: 74 68 65 20 5b 44 45 4c 45 54 45 5d 2c 0a 5b 49  the [DELETE],.[I
1e30: 4e 53 45 52 54 5d 2c 20 61 6e 64 20 5b 55 50 44  NSERT], and [UPD
1e40: 41 54 45 5d 20 63 6f 6d 6d 61 6e 64 73 2e 0a 41  ATE] commands..A
1e50: 70 70 72 6f 70 72 69 61 74 65 20 63 61 72 65 20  ppropriate care 
1e60: 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 77  should be used w
1e70: 68 65 6e 20 63 68 61 6e 67 69 6e 67 20 74 68 65  hen changing the
1e80: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
1e90: 73 74 61 74 69 73 74 69 63 73 0a 74 61 62 6c 65  statistics.table
1ea0: 73 20 61 73 20 69 6e 76 61 6c 69 64 20 63 6f 6e  s as invalid con
1eb0: 74 65 6e 74 20 63 61 6e 20 63 61 75 73 65 20 53  tent can cause S
1ec0: 51 4c 69 74 65 20 74 6f 20 73 65 6c 65 63 74 20  QLite to select 
1ed0: 69 6e 65 66 66 69 63 69 65 6e 74 0a 71 75 65 72  inefficient.quer
1ee0: 79 20 70 6c 61 6e 73 2e 20 20 47 65 6e 65 72 61  y plans.  Genera
1ef0: 6c 6c 79 20 73 70 65 61 6b 69 6e 67 2c 20 6f 6e  lly speaking, on
1f00: 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 6d 6f 64  e should not mod
1f10: 69 66 79 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ify the content 
1f20: 6f 66 0a 74 68 65 20 73 74 61 74 69 73 74 69 63  of.the statistic
1f30: 73 20 74 61 62 6c 65 73 20 62 79 20 61 6e 79 20  s tables by any 
1f40: 6d 65 63 68 61 6e 69 73 6d 20 6f 74 68 65 72 20  mechanism other 
1f50: 74 68 61 6e 20 69 6e 76 6f 6b 69 6e 67 20 74 68  than invoking th
1f60: 65 0a 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e  e.ANALYZE comman
1f70: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 53 74 61  d.</p>..<p> ^Sta
1f80: 74 69 73 74 69 63 73 20 67 61 74 68 65 72 65 64  tistics gathered
1f90: 20 62 79 20 41 4e 41 4c 59 5a 45 20 61 72 65 20   by ANALYZE are 
1fa0: 3c 75 3e 6e 6f 74 3c 2f 75 3e 20 61 75 74 6f 6d  <u>not</u> autom
1fb0: 61 74 69 63 61 6c 6c 79 20 75 70 64 61 74 65 64  atically updated
1fc0: 20 61 73 0a 74 68 65 20 63 6f 6e 74 65 6e 74 20   as.the content 
1fd0: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
1fe0: 63 68 61 6e 67 65 73 2e 20 20 49 66 20 74 68 65  changes.  If the
1ff0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
2000: 64 61 74 61 62 61 73 65 0a 63 68 61 6e 67 65 73  database.changes
2010: 20 73 69 67 6e 69 66 69 63 61 6e 74 6c 79 2c 20   significantly, 
2020: 6f 72 20 69 66 20 74 68 65 20 64 61 74 61 62 61  or if the databa
2030: 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  se schema change
2040: 73 2c 20 74 68 65 6e 20 6f 6e 65 20 73 68 6f 75  s, then one shou
2050: 6c 64 0a 63 6f 6e 73 69 64 65 72 20 72 65 72 75  ld.consider reru
2060: 6e 6e 69 6e 67 20 74 68 65 20 41 4e 41 4c 59 5a  nning the ANALYZ
2070: 45 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 6f 72 64  E command in ord
2080: 65 72 20 74 6f 20 75 70 64 61 74 65 20 74 68 65  er to update the
2090: 20 73 74 61 74 69 73 74 69 63 73 2e 3c 2f 70 3e   statistics.</p>
20a0: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
20b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20f0: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
2100: 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45 7d  ATTACH DATABASE}
2110: 20 61 74 74 61 63 68 20 2a 41 54 54 41 43 48 0a   attach *ATTACH.
2120: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61  .BubbleDiagram a
2130: 74 74 61 63 68 2d 73 74 6d 74 20 31 0a 3c 2f 74  ttach-stmt 1.</t
2140: 63 6c 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 54  cl>..<p> ^The AT
2150: 54 41 43 48 20 44 41 54 41 42 41 53 45 20 73 74  TACH DATABASE st
2160: 61 74 65 6d 65 6e 74 20 61 64 64 73 20 61 6e 6f  atement adds ano
2170: 74 68 65 72 20 64 61 74 61 62 61 73 65 20 0a 66  ther database .f
2180: 69 6c 65 20 74 6f 20 74 68 65 20 63 75 72 72 65  ile to the curre
2190: 6e 74 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e  nt [database con
21a0: 6e 65 63 74 69 6f 6e 5d 2e 20 0a 5e 54 68 65 20  nection]. .^The 
21b0: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 73 20 27  database-names '
21c0: 6d 61 69 6e 27 20 61 6e 64 20 0a 27 74 65 6d 70  main' and .'temp
21d0: 27 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6d  ' refer to the m
21e0: 61 69 6e 20 64 61 74 61 62 61 73 65 20 61 6e 64  ain database and
21f0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73   the database us
2200: 65 64 20 66 6f 72 20 0a 74 65 6d 70 6f 72 61 72  ed for .temporar
2210: 79 20 74 61 62 6c 65 73 2e 20 20 5e 54 68 65 20  y tables.  ^The 
2220: 6d 61 69 6e 20 61 6e 64 20 74 65 6d 70 20 64 61  main and temp da
2230: 74 61 62 61 73 65 73 20 63 61 6e 6e 6f 74 20 62  tabases cannot b
2240: 65 20 61 74 74 61 63 68 65 64 20 6f 72 0a 64 65  e attached or.de
2250: 74 61 63 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  tached.</p>..<p>
2260: 20 5e 28 54 61 62 6c 65 73 20 69 6e 20 61 6e 20   ^(Tables in an 
2270: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
2280: 65 20 63 61 6e 20 62 65 20 72 65 66 65 72 72 65  e can be referre
2290: 64 20 74 6f 20 75 73 69 6e 67 20 74 68 65 20 73  d to using the s
22a0: 79 6e 74 61 78 20 0a 3c 69 3e 64 61 74 61 62 61  yntax .<i>databa
22b0: 73 65 2d 6e 61 6d 65 2e 74 61 62 6c 65 2d 6e 61  se-name.table-na
22c0: 6d 65 3c 2f 69 3e 2e 29 5e 20 20 5e 49 66 20 74  me</i>.)^  ^If t
22d0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
22e0: 61 62 6c 65 20 69 73 20 75 6e 69 71 75 65 0a 61  able is unique.a
22f0: 63 72 6f 73 73 20 61 6c 6c 20 61 74 74 61 63 68  cross all attach
2300: 65 64 20 64 61 74 61 62 61 73 65 73 20 61 6e 64  ed databases and
2310: 20 74 68 65 20 6d 61 69 6e 20 61 6e 64 20 74 65   the main and te
2320: 6d 70 20 64 61 74 61 62 61 73 65 73 2c 20 74 68  mp databases, th
2330: 65 6e 20 74 68 65 0a 3c 69 3e 64 61 74 61 62 61  en the.<i>databa
2340: 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 70 72 65 66  se-name</i> pref
2350: 69 78 20 69 73 20 6e 6f 74 20 72 65 71 75 69 72  ix is not requir
2360: 65 64 2e 20 20 5e 49 66 20 74 77 6f 20 6f 72 20  ed.  ^If two or 
2370: 6d 6f 72 65 20 74 61 62 6c 65 73 20 69 6e 0a 64  more tables in.d
2380: 69 66 66 65 72 65 6e 74 20 64 61 74 61 62 61 73  ifferent databas
2390: 65 73 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  es have the same
23a0: 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 20 0a 3c   name and the .<
23b0: 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c  i>database-name<
23c0: 2f 69 3e 20 70 72 65 66 69 78 20 69 73 20 6e 6f  /i> prefix is no
23d0: 74 20 75 73 65 64 20 6f 6e 20 61 20 74 61 62 6c  t used on a tabl
23e0: 65 20 72 65 66 65 72 65 6e 63 65 2c 20 74 68 65  e reference, the
23f0: 6e 20 74 68 65 0a 74 61 62 6c 65 20 63 68 6f 73  n the.table chos
2400: 65 6e 20 69 73 20 74 68 65 20 6f 6e 65 20 69 6e  en is the one in
2410: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 68   the database th
2420: 61 74 20 77 61 73 20 6c 65 61 73 74 20 72 65 63  at was least rec
2430: 65 6e 74 6c 79 20 61 74 74 61 63 68 65 64 2e 3c  ently attached.<
2440: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61  /p>..<p>.^Transa
2450: 63 74 69 6f 6e 73 20 69 6e 76 6f 6c 76 69 6e 67  ctions involving
2460: 20 6d 75 6c 74 69 70 6c 65 20 61 74 74 61 63 68   multiple attach
2470: 65 64 20 64 61 74 61 62 61 73 65 73 20 61 72 65  ed databases are
2480: 20 61 74 6f 6d 69 63 2c 0a 61 73 73 75 6d 69 6e   atomic,.assumin
2490: 67 20 74 68 61 74 20 74 68 65 20 6d 61 69 6e 20  g that the main 
24a0: 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20  database is not 
24b0: 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22 20 61 6e 64  "[:memory:]" and
24c0: 20 74 68 65 20 0a 5b 6a 6f 75 72 6e 61 6c 5f 6d   the .[journal_m
24d0: 6f 64 65 5d 20 69 73 20 6e 6f 74 20 5b 57 41 4c  ode] is not [WAL
24e0: 5d 2e 20 20 5e 28 49 66 20 74 68 65 20 6d 61 69  ].  ^(If the mai
24f0: 6e 0a 64 61 74 61 62 61 73 65 20 69 73 20 22 3a  n.database is ":
2500: 6d 65 6d 6f 72 79 3a 22 20 6f 72 20 69 66 20 74  memory:" or if t
2510: 68 65 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20  he journal_mode 
2520: 69 73 20 57 41 4c 2c 20 74 68 65 6e 20 0a 74 72  is WAL, then .tr
2530: 61 6e 73 61 63 74 69 6f 6e 73 20 63 6f 6e 74 69  ansactions conti
2540: 6e 75 65 20 74 6f 20 62 65 20 61 74 6f 6d 69 63  nue to be atomic
2550: 20 77 69 74 68 69 6e 20 65 61 63 68 20 69 6e 64   within each ind
2560: 69 76 69 64 75 61 6c 0a 64 61 74 61 62 61 73 65  ividual.database
2570: 20 66 69 6c 65 2e 20 42 75 74 20 69 66 20 74 68   file. But if th
2580: 65 20 68 6f 73 74 20 63 6f 6d 70 75 74 65 72 20  e host computer 
2590: 63 72 61 73 68 65 73 20 69 6e 20 74 68 65 20 6d  crashes in the m
25a0: 69 64 64 6c 65 0a 6f 66 20 61 20 5b 43 4f 4d 4d  iddle.of a [COMM
25b0: 49 54 5d 20 77 68 65 72 65 20 74 77 6f 20 6f 72  IT] where two or
25c0: 20 6d 6f 72 65 20 64 61 74 61 62 61 73 65 20 66   more database f
25d0: 69 6c 65 73 20 61 72 65 20 75 70 64 61 74 65 64  iles are updated
25e0: 2c 0a 73 6f 6d 65 20 6f 66 20 74 68 6f 73 65 20  ,.some of those 
25f0: 66 69 6c 65 73 20 6d 69 67 68 74 20 67 65 74 20  files might get 
2600: 74 68 65 20 63 68 61 6e 67 65 73 20 77 68 65 72  the changes wher
2610: 65 20 6f 74 68 65 72 73 0a 6d 69 67 68 74 20 6e  e others.might n
2620: 6f 74 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20  ot.)^.</p>..<p> 
2630: 5e 54 68 65 72 65 20 69 73 20 61 20 6c 69 6d 69  ^There is a limi
2640: 74 2c 20 73 65 74 20 75 73 69 6e 67 20 5b 73 71  t, set using [sq
2650: 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 5d 20 61  lite3_limit()] a
2660: 6e 64 20 0a 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  nd .[SQLITE_LIMI
2670: 54 5f 41 54 54 41 43 48 45 44 5d 2c 20 74 6f 20  T_ATTACHED], to 
2680: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61  the number of da
2690: 74 61 62 61 73 65 73 20 74 68 61 74 20 63 61 6e  tabases that can
26a0: 20 62 65 0a 73 69 6d 75 6c 74 61 6e 65 6f 75 73   be.simultaneous
26b0: 6c 79 20 61 74 74 61 63 68 65 64 20 74 6f 20 61  ly attached to a
26c0: 20 73 69 6e 67 6c 65 20 64 61 74 61 62 61 73 65   single database
26d0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 3e   connection.</p>
26e0: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
26f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2700: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2710: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2720: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2730: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
2740: 7b 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49  {BEGIN TRANSACTI
2750: 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ON} transaction 
2760: 7b 2a 42 45 47 49 4e 20 43 4f 4d 4d 49 54 20 52  {*BEGIN COMMIT R
2770: 4f 4c 4c 42 41 43 4b 7d 0a 0a 42 75 62 62 6c 65  OLLBACK}..Bubble
2780: 44 69 61 67 72 61 6d 20 62 65 67 69 6e 2d 73 74  Diagram begin-st
2790: 6d 74 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  mt.BubbleDiagram
27a0: 20 63 6f 6d 6d 69 74 2d 73 74 6d 74 0a 42 75 62   commit-stmt.Bub
27b0: 62 6c 65 44 69 61 67 72 61 6d 20 72 6f 6c 6c 62  bleDiagram rollb
27c0: 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ack-stmt.</tcl>.
27d0: 0a 3c 70 3e 0a 5e 4e 6f 20 63 68 61 6e 67 65 73  .<p>.^No changes
27e0: 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20   can be made to 
27f0: 74 68 65 20 64 61 74 61 62 61 73 65 20 65 78 63  the database exc
2800: 65 70 74 20 77 69 74 68 69 6e 20 61 20 74 72 61  ept within a tra
2810: 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 6e 79 20 63  nsaction..^Any c
2820: 6f 6d 6d 61 6e 64 20 74 68 61 74 20 63 68 61 6e  ommand that chan
2830: 67 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65  ges the database
2840: 20 28 62 61 73 69 63 61 6c 6c 79 2c 20 61 6e 79   (basically, any
2850: 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a 6f 74 68   SQL command.oth
2860: 65 72 20 74 68 61 6e 20 5b 53 45 4c 45 43 54 5d  er than [SELECT]
2870: 29 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63  ) will automatic
2880: 61 6c 6c 79 20 73 74 61 72 74 20 61 20 74 72 61  ally start a tra
2890: 6e 73 61 63 74 69 6f 6e 20 69 66 0a 6f 6e 65 20  nsaction if.one 
28a0: 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 69  is not already i
28b0: 6e 20 65 66 66 65 63 74 2e 20 20 5e 41 75 74 6f  n effect.  ^Auto
28c0: 6d 61 74 69 63 61 6c 6c 79 20 73 74 61 72 74 65  matically starte
28d0: 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61  d transactions.a
28e0: 72 65 20 63 6f 6d 6d 69 74 74 65 64 20 77 68 65  re committed whe
28f0: 6e 20 74 68 65 20 6c 61 73 74 20 71 75 65 72 79  n the last query
2900: 20 66 69 6e 69 73 68 65 73 2e 0a 3c 2f 70 3e 0a   finishes..</p>.
2910: 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f  .<p>.^Transactio
2920: 6e 73 20 63 61 6e 20 62 65 20 73 74 61 72 74 65  ns can be starte
2930: 64 20 6d 61 6e 75 61 6c 6c 79 20 75 73 69 6e 67  d manually using
2940: 20 74 68 65 20 42 45 47 49 4e 0a 63 6f 6d 6d 61   the BEGIN.comma
2950: 6e 64 2e 20 20 5e 28 53 75 63 68 20 74 72 61 6e  nd.  ^(Such tran
2960: 73 61 63 74 69 6f 6e 73 20 75 73 75 61 6c 6c 79  sactions usually
2970: 20 70 65 72 73 69 73 74 20 75 6e 74 69 6c 20 74   persist until t
2980: 68 65 20 6e 65 78 74 0a 43 4f 4d 4d 49 54 20 6f  he next.COMMIT o
2990: 72 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  r ROLLBACK comma
29a0: 6e 64 2e 20 20 42 75 74 20 61 20 74 72 61 6e 73  nd.  But a trans
29b0: 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61 6c 73 6f  action will also
29c0: 20 0a 52 4f 4c 4c 42 41 43 4b 20 69 66 20 74 68   .ROLLBACK if th
29d0: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 63 6c  e database is cl
29e0: 6f 73 65 64 20 6f 72 20 69 66 20 61 6e 20 65 72  osed or if an er
29f0: 72 6f 72 20 6f 63 63 75 72 73 0a 61 6e 64 20 74  ror occurs.and t
2a00: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6e 66  he ROLLBACK conf
2a10: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
2a20: 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70 65  algorithm is spe
2a30: 63 69 66 69 65 64 2e 29 5e 0a 53 65 65 20 74 68  cified.)^.See th
2a40: 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  e documentation 
2a50: 6f 6e 20 74 68 65 20 5b 4f 4e 20 43 4f 4e 46 4c  on the [ON CONFL
2a60: 49 43 54 5d 0a 63 6c 61 75 73 65 20 66 6f 72 20  ICT].clause for 
2a70: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
2a80: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
2a90: 20 52 4f 4c 4c 42 41 43 4b 0a 63 6f 6e 66 6c 69   ROLLBACK.confli
2aa0: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
2ab0: 67 6f 72 69 74 68 6d 2e 0a 3c 2f 70 3e 0a 0a 3c  gorithm..</p>..<
2ac0: 70 3e 0a 5e 45 4e 44 20 54 52 41 4e 53 41 43 54  p>.^END TRANSACT
2ad0: 49 4f 4e 20 69 73 20 61 6e 20 61 6c 69 61 73 20  ION is an alias 
2ae0: 66 6f 72 20 43 4f 4d 4d 49 54 2e 0a 3c 2f 70 3e  for COMMIT..</p>
2af0: 0a 0a 3c 70 3e 20 5e 28 54 72 61 6e 73 61 63 74  ..<p> ^(Transact
2b00: 69 6f 6e 73 20 63 72 65 61 74 65 64 20 75 73 69  ions created usi
2b10: 6e 67 20 42 45 47 49 4e 2e 2e 2e 43 4f 4d 4d 49  ng BEGIN...COMMI
2b20: 54 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 29 5e  T do not nest.)^
2b30: 0a 5e 46 6f 72 20 6e 65 73 74 65 64 20 74 72 61  .^For nested tra
2b40: 6e 73 61 63 74 69 6f 6e 73 2c 20 75 73 65 20 74  nsactions, use t
2b50: 68 65 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 61  he [SAVEPOINT] a
2b60: 6e 64 20 5b 52 45 4c 45 41 53 45 5d 20 63 6f 6d  nd [RELEASE] com
2b70: 6d 61 6e 64 73 2e 0a 54 68 65 20 22 54 4f 20 53  mands..The "TO S
2b80: 41 56 45 50 4f 49 4e 54 20 3c 69 3e 6e 61 6d 65  AVEPOINT <i>name
2b90: 3c 2f 69 3e 22 20 63 6c 61 75 73 65 20 6f 66 20  </i>" clause of 
2ba0: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d  the ROLLBACK com
2bb0: 6d 61 6e 64 20 73 68 6f 77 6e 0a 69 6e 20 74 68  mand shown.in th
2bc0: 65 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d  e syntax diagram
2bd0: 20 61 62 6f 76 65 20 69 73 20 6f 6e 6c 79 20 61   above is only a
2be0: 70 70 6c 69 63 61 62 6c 65 20 74 6f 20 5b 53 41  pplicable to [SA
2bf0: 56 45 50 4f 49 4e 54 5d 0a 74 72 61 6e 73 61 63  VEPOINT].transac
2c00: 74 69 6f 6e 73 2e 20 20 5e 41 6e 20 61 74 74 65  tions.  ^An atte
2c10: 6d 70 74 20 74 6f 20 69 6e 76 6f 6b 65 20 74 68  mpt to invoke th
2c20: 65 20 42 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20  e BEGIN command 
2c30: 77 69 74 68 69 6e 0a 61 20 74 72 61 6e 73 61 63  within.a transac
2c40: 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 77  tion will fail w
2c50: 69 74 68 20 61 6e 20 65 72 72 6f 72 2c 20 72 65  ith an error, re
2c60: 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
2c70: 68 65 72 0a 74 68 65 20 74 72 61 6e 73 61 63 74  her.the transact
2c80: 69 6f 6e 20 77 61 73 20 73 74 61 72 74 65 64 20  ion was started 
2c90: 62 79 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 6f  by [SAVEPOINT] o
2ca0: 72 20 61 20 70 72 69 6f 72 20 42 45 47 49 4e 2e  r a prior BEGIN.
2cb0: 0a 5e 54 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d  .^The COMMIT com
2cc0: 6d 61 6e 64 20 61 6e 64 20 74 68 65 20 52 4f 4c  mand and the ROL
2cd0: 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69  LBACK command wi
2ce0: 74 68 6f 75 74 20 74 68 65 20 54 4f 20 63 6c 61  thout the TO cla
2cf0: 75 73 65 0a 77 6f 72 6b 20 74 68 65 20 73 61 6d  use.work the sam
2d00: 65 20 6f 6e 20 5b 53 41 56 45 50 4f 49 4e 54 5d  e on [SAVEPOINT]
2d10: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 73   transactions as
2d20: 20 74 68 65 79 20 64 6f 20 77 69 74 68 20 74 72   they do with tr
2d30: 61 6e 73 61 63 74 69 6f 6e 73 0a 73 74 61 72 74  ansactions.start
2d40: 65 64 20 62 79 20 42 45 47 49 4e 2e 3c 2f 70 3e  ed by BEGIN.</p>
2d50: 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69  ..<p>.^Transacti
2d60: 6f 6e 73 20 63 61 6e 20 62 65 20 64 65 66 65 72  ons can be defer
2d70: 72 65 64 2c 20 69 6d 6d 65 64 69 61 74 65 2c 20  red, immediate, 
2d80: 6f 72 20 65 78 63 6c 75 73 69 76 65 2e 20 20 0a  or exclusive.  .
2d90: 5e 54 68 65 20 64 65 66 61 75 6c 74 20 74 72 61  ^The default tra
2da0: 6e 73 61 63 74 69 6f 6e 20 62 65 68 61 76 69 6f  nsaction behavio
2db0: 72 20 69 73 20 64 65 66 65 72 72 65 64 2e 0a 5e  r is deferred..^
2dc0: 44 65 66 65 72 72 65 64 20 6d 65 61 6e 73 20 74  Deferred means t
2dd0: 68 61 74 20 6e 6f 20 6c 6f 63 6b 73 20 61 72 65  hat no locks are
2de0: 20 61 63 71 75 69 72 65 64 0a 6f 6e 20 74 68 65   acquired.on the
2df0: 20 64 61 74 61 62 61 73 65 20 75 6e 74 69 6c 20   database until 
2e00: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
2e10: 66 69 72 73 74 20 61 63 63 65 73 73 65 64 2e 20  first accessed. 
2e20: 20 5e 54 68 75 73 20 77 69 74 68 20 61 0a 64 65   ^Thus with a.de
2e30: 66 65 72 72 65 64 20 74 72 61 6e 73 61 63 74 69  ferred transacti
2e40: 6f 6e 2c 20 74 68 65 20 42 45 47 49 4e 20 73 74  on, the BEGIN st
2e50: 61 74 65 6d 65 6e 74 20 69 74 73 65 6c 66 20 64  atement itself d
2e60: 6f 65 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74  oes nothing to t
2e70: 68 65 0a 66 69 6c 65 73 79 73 74 65 6d 2e 20 20  he.filesystem.  
2e80: 5e 4c 6f 63 6b 73 0a 61 72 65 20 6e 6f 74 20 61  ^Locks.are not a
2e90: 63 71 75 69 72 65 64 20 75 6e 74 69 6c 20 74 68  cquired until th
2ea0: 65 20 66 69 72 73 74 20 72 65 61 64 20 6f 72 20  e first read or 
2eb0: 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 2e  write operation.
2ec0: 20 20 5e 54 68 65 20 66 69 72 73 74 20 72 65 61    ^The first rea
2ed0: 64 0a 6f 70 65 72 61 74 69 6f 6e 20 61 67 61 69  d.operation agai
2ee0: 6e 73 74 20 61 20 64 61 74 61 62 61 73 65 20 63  nst a database c
2ef0: 72 65 61 74 65 73 20 61 20 5b 53 48 41 52 45 44  reates a [SHARED
2f00: 5d 20 6c 6f 63 6b 20 61 6e 64 20 74 68 65 20 66  ] lock and the f
2f10: 69 72 73 74 0a 77 72 69 74 65 20 6f 70 65 72 61  irst.write opera
2f20: 74 69 6f 6e 20 63 72 65 61 74 65 73 20 61 20 5b  tion creates a [
2f30: 52 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b 2e 20  RESERVED] lock. 
2f40: 20 20 5e 42 65 63 61 75 73 65 20 74 68 65 20 61    ^Because the a
2f50: 63 71 75 69 73 69 74 69 6f 6e 20 6f 66 0a 6c 6f  cquisition of.lo
2f60: 63 6b 73 20 69 73 20 64 65 66 65 72 72 65 64 20  cks is deferred 
2f70: 75 6e 74 69 6c 20 74 68 65 79 20 61 72 65 20 6e  until they are n
2f80: 65 65 64 65 64 2c 20 69 74 20 69 73 20 70 6f 73  eeded, it is pos
2f90: 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68  sible that anoth
2fa0: 65 72 0a 74 68 72 65 61 64 20 6f 72 20 70 72 6f  er.thread or pro
2fb0: 63 65 73 73 20 63 6f 75 6c 64 20 63 72 65 61 74  cess could creat
2fc0: 65 20 61 20 73 65 70 61 72 61 74 65 20 74 72 61  e a separate tra
2fd0: 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 77 72 69  nsaction and wri
2fe0: 74 65 20 74 6f 0a 74 68 65 20 64 61 74 61 62 61  te to.the databa
2ff0: 73 65 20 61 66 74 65 72 20 74 68 65 20 42 45 47  se after the BEG
3000: 49 4e 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e  IN on the curren
3010: 74 20 74 68 72 65 61 64 20 68 61 73 20 65 78 65  t thread has exe
3020: 63 75 74 65 64 2e 0a 5e 49 66 20 74 68 65 20 74  cuted..^If the t
3030: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 69 6d  ransaction is im
3040: 6d 65 64 69 61 74 65 2c 20 74 68 65 6e 20 5b 52  mediate, then [R
3050: 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b 73 0a 61  ESERVED] locks.a
3060: 72 65 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61  re acquired on a
3070: 6c 6c 20 64 61 74 61 62 61 73 65 73 20 61 73 20  ll databases as 
3080: 73 6f 6f 6e 20 61 73 20 74 68 65 20 42 45 47 49  soon as the BEGI
3090: 4e 20 63 6f 6d 6d 61 6e 64 20 69 73 0a 65 78 65  N command is.exe
30a0: 63 75 74 65 64 2c 20 77 69 74 68 6f 75 74 20 77  cuted, without w
30b0: 61 69 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 64  aiting for the.d
30c0: 61 74 61 62 61 73 65 20 74 6f 20 62 65 20 75 73  atabase to be us
30d0: 65 64 2e 20 20 5e 41 66 74 65 72 20 61 20 42 45  ed.  ^After a BE
30e0: 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 2c 20 0a  GIN IMMEDIATE, .
30f0: 6e 6f 20 6f 74 68 65 72 20 5b 64 61 74 61 62 61  no other [databa
3100: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 77  se connection] w
3110: 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 77  ill be able to w
3120: 72 69 74 65 20 74 6f 20 74 68 65 20 64 61 74 61  rite to the data
3130: 62 61 73 65 20 6f 72 0a 64 6f 20 61 20 42 45 47  base or.do a BEG
3140: 49 4e 20 49 4d 4d 45 44 49 41 54 45 20 6f 72 20  IN IMMEDIATE or 
3150: 42 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45 2e  BEGIN EXCLUSIVE.
3160: 20 20 5e 4f 74 68 65 72 20 70 72 6f 63 65 73 73    ^Other process
3170: 65 73 20 63 61 6e 20 63 6f 6e 74 69 6e 75 65 0a  es can continue.
3180: 74 6f 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65  to read from the
3190: 20 64 61 74 61 62 61 73 65 2c 20 68 6f 77 65 76   database, howev
31a0: 65 72 2e 20 20 5e 41 6e 20 65 78 63 6c 75 73 69  er.  ^An exclusi
31b0: 76 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63  ve transaction c
31c0: 61 75 73 65 73 0a 5b 45 58 43 4c 55 53 49 56 45  auses.[EXCLUSIVE
31d0: 5d 20 6c 6f 63 6b 73 20 74 6f 20 62 65 20 61 63  ] locks to be ac
31e0: 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20 64 61  quired on all da
31f0: 74 61 62 61 73 65 73 2e 20 20 5e 41 66 74 65 72  tabases.  ^After
3200: 20 61 20 42 45 47 49 4e 0a 45 58 43 4c 55 53 49   a BEGIN.EXCLUSI
3210: 56 45 2c 20 6e 6f 20 6f 74 68 65 72 20 5b 64 61  VE, no other [da
3220: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
3230: 6e 5d 20 65 78 63 65 70 74 20 66 6f 72 20 5b 72  n] except for [r
3240: 65 61 64 5f 75 6e 63 6f 6d 6d 69 74 74 65 64 5d  ead_uncommitted]
3250: 0a 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 77 69 6c  .connections wil
3260: 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 72 65 61  l be able to rea
3270: 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  d the database a
3280: 6e 64 20 6e 6f 20 6f 74 68 65 72 20 63 6f 6e 6e  nd no other conn
3290: 65 63 74 69 6f 6e 20 77 69 74 68 6f 75 74 0a 65  ection without.e
32a0: 78 63 65 70 74 69 6f 6e 20 77 69 6c 6c 20 62 65  xception will be
32b0: 20 61 62 6c 65 20 74 6f 20 77 72 69 74 65 20 74   able to write t
32c0: 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 74 69  he database unti
32d0: 6c 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  l the transactio
32e0: 6e 20 69 73 0a 63 6f 6d 70 6c 65 74 65 2e 0a 3c  n is.complete..<
32f0: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28 41 6e 20 69 6d  /p>..<p>.^(An im
3300: 70 6c 69 63 69 74 20 74 72 61 6e 73 61 63 74 69  plicit transacti
3310: 6f 6e 20 28 61 20 74 72 61 6e 73 61 63 74 69 6f  on (a transactio
3320: 6e 20 74 68 61 74 20 69 73 20 73 74 61 72 74 65  n that is starte
3330: 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2c  d automatically,
3340: 0a 6e 6f 74 20 61 20 74 72 61 6e 73 61 63 74 69  .not a transacti
3350: 6f 6e 20 73 74 61 72 74 65 64 20 62 79 20 42 45  on started by BE
3360: 47 49 4e 29 20 69 73 20 63 6f 6d 6d 69 74 74 65  GIN) is committe
3370: 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  d automatically 
3380: 77 68 65 6e 0a 74 68 65 20 6c 61 73 74 20 61 63  when.the last ac
3390: 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 20 66  tive statement f
33a0: 69 6e 69 73 68 65 73 2e 20 20 41 20 73 74 61 74  inishes.  A stat
33b0: 65 6d 65 6e 74 20 66 69 6e 69 73 68 65 73 20 77  ement finishes w
33c0: 68 65 6e 20 69 74 73 0a 70 72 65 70 61 72 65 64  hen its.prepared
33d0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 5b 73   statement is [s
33e0: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 20 7c  qlite3_reset() |
33f0: 20 72 65 73 65 74 5d 20 6f 72 0a 5b 73 71 6c 69   reset] or.[sqli
3400: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 20 7c  te3_finalize() |
3410: 20 66 69 6e 61 6c 69 7a 65 64 5d 2e 20 20 41 6e   finalized].  An
3420: 20 6f 70 65 6e 20 5b 73 71 6c 69 74 65 33 5f 62   open [sqlite3_b
3430: 6c 6f 62 5d 20 75 73 65 64 20 66 6f 72 0a 69 6e  lob] used for.in
3440: 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49  cremental BLOB I
3450: 2f 4f 20 63 6f 75 6e 74 73 20 61 73 20 61 6e 20  /O counts as an 
3460: 75 6e 66 69 6e 69 73 68 65 64 20 73 74 61 74 65  unfinished state
3470: 6d 65 6e 74 2e 20 20 54 68 65 20 5b 73 71 6c 69  ment.  The [sqli
3480: 74 65 33 5f 62 6c 6f 62 5d 0a 66 69 6e 69 73 68  te3_blob].finish
3490: 65 73 20 77 68 65 6e 20 69 74 20 69 73 20 5b 73  es when it is [s
34a0: 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 63 6c 6f 73  qlite3_blob_clos
34b0: 65 28 29 20 7c 20 63 6c 6f 73 65 64 5d 2e 29 5e  e() | closed].)^
34c0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 68 65 20  .</p>..<p>.^The 
34d0: 65 78 70 6c 69 63 69 74 20 43 4f 4d 4d 49 54 20  explicit COMMIT 
34e0: 63 6f 6d 6d 61 6e 64 20 72 75 6e 73 20 69 6d 6d  command runs imm
34f0: 65 64 69 61 74 65 6c 79 2c 20 65 76 65 6e 20 69  ediately, even i
3500: 66 20 74 68 65 72 65 20 61 72 65 0a 70 65 6e 64  f there are.pend
3510: 69 6e 67 20 5b 53 45 4c 45 43 54 5d 20 73 74 61  ing [SELECT] sta
3520: 74 65 6d 65 6e 74 73 2e 20 20 5e 48 6f 77 65 76  tements.  ^Howev
3530: 65 72 2c 20 69 66 20 74 68 65 72 65 20 61 72 65  er, if there are
3540: 20 70 65 6e 64 69 6e 67 0a 77 72 69 74 65 20 6f   pending.write o
3550: 70 65 72 61 74 69 6f 6e 73 2c 20 74 68 65 20 43  perations, the C
3560: 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 0a 77 69  OMMIT command.wi
3570: 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 20 65  ll fail with a e
3580: 72 72 6f 72 20 63 6f 64 65 20 5b 53 51 4c 49 54  rror code [SQLIT
3590: 45 5f 42 55 53 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c  E_BUSY]..</p>..<
35a0: 70 3e 0a 5e 41 6e 20 61 74 74 65 6d 70 74 20 74  p>.^An attempt t
35b0: 6f 20 65 78 65 63 75 74 65 20 43 4f 4d 4d 49 54  o execute COMMIT
35c0: 20 6d 69 67 68 74 20 61 6c 73 6f 20 72 65 73 75   might also resu
35d0: 6c 74 20 69 6e 20 61 6e 20 5b 53 51 4c 49 54 45  lt in an [SQLITE
35e0: 5f 42 55 53 59 5d 20 72 65 74 75 72 6e 20 63 6f  _BUSY] return co
35f0: 64 65 0a 69 66 20 61 6e 20 61 6e 6f 74 68 65 72  de.if an another
3600: 20 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65   thread or proce
3610: 73 73 20 68 61 73 20 61 20 5b 73 68 61 72 65 64  ss has a [shared
3620: 20 6c 6f 63 6b 5d 20 6f 6e 20 74 68 65 20 64 61   lock] on the da
3630: 74 61 62 61 73 65 0a 74 68 61 74 20 70 72 65 76  tabase.that prev
3640: 65 6e 74 65 64 20 74 68 65 20 64 61 74 61 62 61  ented the databa
3650: 73 65 20 66 72 6f 6d 20 62 65 69 6e 67 20 75 70  se from being up
3660: 64 61 74 65 64 2e 20 20 5e 57 68 65 6e 20 43 4f  dated.  ^When CO
3670: 4d 4d 49 54 20 66 61 69 6c 73 20 69 6e 20 74 68  MMIT fails in th
3680: 69 73 0a 77 61 79 2c 20 74 68 65 20 74 72 61 6e  is.way, the tran
3690: 73 61 63 74 69 6f 6e 20 72 65 6d 61 69 6e 73 20  saction remains 
36a0: 61 63 74 69 76 65 20 61 6e 64 20 74 68 65 20 43  active and the C
36b0: 4f 4d 4d 49 54 20 63 61 6e 20 62 65 20 72 65 74  OMMIT can be ret
36c0: 72 69 65 64 20 6c 61 74 65 72 0a 61 66 74 65 72  ried later.after
36d0: 20 74 68 65 20 72 65 61 64 65 72 20 68 61 73 20   the reader has 
36e0: 68 61 64 20 61 20 63 68 61 6e 63 65 20 74 6f 20  had a chance to 
36f0: 63 6c 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  clear..</p>..<p>
3700: 0a 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20 77  .^The ROLLBACK w
3710: 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e  ill fail with an
3720: 20 65 72 72 6f 72 20 63 6f 64 65 20 5b 53 51 4c   error code [SQL
3730: 49 54 45 5f 42 55 53 59 5d 20 69 66 20 74 68 65  ITE_BUSY] if the
3740: 72 65 0a 61 72 65 20 61 6e 79 20 70 65 6e 64 69  re.are any pendi
3750: 6e 67 20 71 75 65 72 69 65 73 2e 20 20 5e 42 6f  ng queries.  ^Bo
3760: 74 68 20 72 65 61 64 2d 6f 6e 6c 79 20 61 6e 64  th read-only and
3770: 20 72 65 61 64 2f 77 72 69 74 65 20 71 75 65 72   read/write quer
3780: 69 65 73 20 77 69 6c 6c 0a 63 61 75 73 65 20 61  ies will.cause a
3790: 20 52 4f 4c 4c 42 41 43 4b 20 74 6f 20 66 61 69   ROLLBACK to fai
37a0: 6c 2e 20 20 41 20 52 4f 4c 4c 42 41 43 4b 20 6d  l.  A ROLLBACK m
37b0: 75 73 74 20 66 61 69 6c 20 69 66 20 74 68 65 72  ust fail if ther
37c0: 65 20 61 72 65 20 70 65 6e 64 69 6e 67 0a 72 65  e are pending.re
37d0: 61 64 20 6f 70 65 72 61 74 69 6f 6e 73 20 28 75  ad operations (u
37e0: 6e 6c 69 6b 65 20 43 4f 4d 4d 49 54 20 77 68 69  nlike COMMIT whi
37f0: 63 68 20 63 61 6e 20 73 75 63 63 65 65 64 29 20  ch can succeed) 
3800: 62 65 63 61 75 73 65 20 62 61 64 20 74 68 69 6e  because bad thin
3810: 67 73 0a 77 69 6c 6c 20 68 61 70 70 65 6e 20 69  gs.will happen i
3820: 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20  f the in-memory 
3830: 69 6d 61 67 65 20 6f 66 20 74 68 65 20 64 61 74  image of the dat
3840: 61 62 61 73 65 20 69 73 20 63 68 61 6e 67 65 64  abase is changed
3850: 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 0a   out from under.
3860: 61 6e 20 61 63 74 69 76 65 20 71 75 65 72 79 2e  an active query.
3870: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 66 20 5b 50  .</p>..<p>.If [P
3880: 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  RAGMA journal_mo
3890: 64 65 5d 20 69 73 20 73 65 74 20 74 6f 20 4f 46  de] is set to OF
38a0: 46 20 28 74 68 75 73 20 64 69 73 61 62 6c 69 6e  F (thus disablin
38b0: 67 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a  g the rollback j
38c0: 6f 75 72 6e 61 6c 0a 66 69 6c 65 29 20 74 68 65  ournal.file) the
38d0: 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 6f  n the behavior o
38e0: 66 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63  f the ROLLBACK c
38f0: 6f 6d 6d 61 6e 64 20 69 73 20 75 6e 64 65 66 69  ommand is undefi
3900: 6e 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 52  ned..</p>..<h3>R
3910: 65 73 70 6f 6e 73 65 20 54 6f 20 45 72 72 6f 72  esponse To Error
3920: 73 20 57 69 74 68 69 6e 20 41 20 54 72 61 6e 73  s Within A Trans
3930: 61 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e  action</h3>..<p>
3940: 20 5e 28 49 66 20 63 65 72 74 61 69 6e 20 6b 69   ^(If certain ki
3950: 6e 64 73 20 6f 66 20 65 72 72 6f 72 73 20 6f 63  nds of errors oc
3960: 63 75 72 20 77 69 74 68 69 6e 20 61 20 74 72 61  cur within a tra
3970: 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 0a 74 72  nsaction, the.tr
3980: 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 6f 72  ansaction may or
3990: 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 6f 6c 6c   may not be roll
39a0: 65 64 20 62 61 63 6b 20 61 75 74 6f 6d 61 74 69  ed back automati
39b0: 63 61 6c 6c 79 2e 20 20 54 68 65 0a 65 72 72 6f  cally.  The.erro
39c0: 72 73 20 74 68 61 74 20 63 61 75 73 65 20 74 68  rs that cause th
39d0: 65 20 62 65 68 61 76 69 6f 72 20 69 6e 63 6c 75  e behavior inclu
39e0: 64 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c  de:</p>..<ul>.<l
39f0: 69 3e 20 5b 53 51 4c 49 54 45 5f 46 55 4c 4c 5d  i> [SQLITE_FULL]
3a00: 3a 20 64 61 74 61 62 61 73 65 20 6f 72 20 64 69  : database or di
3a10: 73 6b 20 66 75 6c 6c 0a 3c 6c 69 3e 20 5b 53 51  sk full.<li> [SQ
3a20: 4c 49 54 45 5f 49 4f 45 52 52 5d 3a 20 64 69 73  LITE_IOERR]: dis
3a30: 6b 20 49 2f 4f 20 65 72 72 6f 72 0a 3c 6c 69 3e  k I/O error.<li>
3a40: 20 5b 53 51 4c 49 54 45 5f 42 55 53 59 5d 3a 20   [SQLITE_BUSY]: 
3a50: 64 61 74 61 62 61 73 65 20 69 6e 20 75 73 65 20  database in use 
3a60: 62 79 20 61 6e 6f 74 68 65 72 20 70 72 6f 63 65  by another proce
3a70: 73 73 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f  ss.<li> [SQLITE_
3a80: 4e 4f 4d 45 4d 5d 3a 20 6f 75 74 20 6f 72 20 6d  NOMEM]: out or m
3a90: 65 6d 6f 72 79 0a 3c 6c 69 3e 20 5b 53 51 4c 49  emory.<li> [SQLI
3aa0: 54 45 5f 49 4e 54 45 52 52 55 50 54 5d 3a 20 70  TE_INTERRUPT]: p
3ab0: 72 6f 63 65 73 73 69 6e 67 20 5b 73 71 6c 69 74  rocessing [sqlit
3ac0: 65 33 5f 69 6e 74 65 72 72 75 70 74 7c 69 6e 74  e3_interrupt|int
3ad0: 65 72 72 75 70 74 65 64 5d 0a 20 20 20 20 20 62  errupted].     b
3ae0: 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 72 65  y application re
3af0: 71 75 65 73 74 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c  quest.</ul>)^..<
3b00: 70 3e 0a 5e 46 6f 72 20 61 6c 6c 20 6f 66 20 74  p>.^For all of t
3b10: 68 65 73 65 20 65 72 72 6f 72 73 2c 20 53 51 4c  hese errors, SQL
3b20: 69 74 65 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ite attempts to 
3b30: 75 6e 64 6f 20 6a 75 73 74 20 74 68 65 20 6f 6e  undo just the on
3b40: 65 20 73 74 61 74 65 6d 65 6e 74 0a 69 74 20 77  e statement.it w
3b50: 61 73 20 77 6f 72 6b 69 6e 67 20 6f 6e 20 61 6e  as working on an
3b60: 64 20 6c 65 61 76 65 20 63 68 61 6e 67 65 73 20  d leave changes 
3b70: 66 72 6f 6d 20 70 72 69 6f 72 20 73 74 61 74 65  from prior state
3b80: 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65  ments within the
3b90: 0a 73 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f  .same transactio
3ba0: 6e 20 69 6e 74 61 63 74 20 61 6e 64 20 63 6f 6e  n intact and con
3bb0: 74 69 6e 75 65 20 77 69 74 68 20 74 68 65 20 74  tinue with the t
3bc0: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 48 6f  ransaction.  ^Ho
3bd0: 77 65 76 65 72 2c 20 0a 64 65 70 65 6e 64 69 6e  wever, .dependin
3be0: 67 20 6f 6e 20 74 68 65 20 73 74 61 74 65 6d 65  g on the stateme
3bf0: 6e 74 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74  nt being evaluat
3c00: 65 64 20 61 6e 64 20 74 68 65 20 70 6f 69 6e 74  ed and the point
3c10: 20 61 74 20 77 68 69 63 68 20 74 68 65 0a 65 72   at which the.er
3c20: 72 6f 72 20 6f 63 63 75 72 73 2c 20 69 74 20 6d  ror occurs, it m
3c30: 69 67 68 74 20 62 65 20 6e 65 63 65 73 73 61 72  ight be necessar
3c40: 79 20 66 6f 72 20 53 51 4c 69 74 65 20 74 6f 20  y for SQLite to 
3c50: 72 6f 6c 6c 62 61 63 6b 20 61 6e 64 0a 63 61 6e  rollback and.can
3c60: 63 65 6c 20 74 68 65 20 65 6e 74 69 72 65 20 74  cel the entire t
3c70: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 41 6e  ransaction.  ^An
3c80: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63 61 6e   application can
3c90: 20 74 65 6c 6c 20 77 68 69 63 68 0a 63 6f 75 72   tell which.cour
3ca0: 73 65 20 6f 66 20 61 63 74 69 6f 6e 20 53 51 4c  se of action SQL
3cb0: 69 74 65 20 74 6f 6f 6b 20 62 79 20 75 73 69 6e  ite took by usin
3cc0: 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f 67  g the.[sqlite3_g
3cd0: 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 29 5d  et_autocommit()]
3ce0: 20 43 2d 6c 61 6e 67 75 61 67 65 20 69 6e 74 65   C-language inte
3cf0: 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49  rface.</p>..<p>I
3d00: 74 20 69 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64  t is recommended
3d10: 20 74 68 61 74 20 61 70 70 6c 69 63 61 74 69 6f   that applicatio
3d20: 6e 73 20 72 65 73 70 6f 6e 64 20 74 6f 20 74 68  ns respond to th
3d30: 65 20 65 72 72 6f 72 73 0a 6c 69 73 74 65 64 20  e errors.listed 
3d40: 61 62 6f 76 65 20 62 79 20 65 78 70 6c 69 63 69  above by explici
3d50: 74 6c 79 20 69 73 73 75 69 6e 67 20 61 20 52 4f  tly issuing a RO
3d60: 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20  LLBACK command. 
3d70: 20 5e 49 66 20 74 68 65 20 0a 74 72 61 6e 73 61   ^If the .transa
3d80: 63 74 69 6f 6e 20 68 61 73 20 61 6c 72 65 61 64  ction has alread
3d90: 79 20 62 65 65 6e 20 72 6f 6c 6c 65 64 20 62 61  y been rolled ba
3da0: 63 6b 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ck automatically
3db0: 0a 62 79 20 74 68 65 20 65 72 72 6f 72 20 72 65  .by the error re
3dc0: 73 70 6f 6e 73 65 2c 20 74 68 65 6e 20 74 68 65  sponse, then the
3dd0: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
3de0: 64 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68  d will fail with
3df0: 20 61 6e 0a 65 72 72 6f 72 2c 20 62 75 74 20 6e   an.error, but n
3e00: 6f 20 68 61 72 6d 20 69 73 20 63 61 75 73 65 64  o harm is caused
3e10: 20 62 79 20 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c   by this.</p>..<
3e20: 70 3e 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e  p>Future version
3e30: 73 20 6f 66 20 53 51 4c 69 74 65 20 6d 61 79 20  s of SQLite may 
3e40: 65 78 74 65 6e 64 20 74 68 65 20 6c 69 73 74 20  extend the list 
3e50: 6f 66 20 65 72 72 6f 72 73 20 77 68 69 63 68 0a  of errors which.
3e60: 6d 69 67 68 74 20 63 61 75 73 65 20 61 75 74 6f  might cause auto
3e70: 6d 61 74 69 63 20 74 72 61 6e 73 61 63 74 69 6f  matic transactio
3e80: 6e 20 72 6f 6c 6c 62 61 63 6b 2e 20 20 46 75 74  n rollback.  Fut
3e90: 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a  ure versions of.
3ea0: 53 51 4c 69 74 65 20 6d 69 67 68 74 20 63 68 61  SQLite might cha
3eb0: 6e 67 65 20 74 68 65 20 65 72 72 6f 72 20 72 65  nge the error re
3ec0: 73 70 6f 6e 73 65 2e 20 20 49 6e 20 70 61 72 74  sponse.  In part
3ed0: 69 63 75 6c 61 72 2c 20 77 65 20 6d 61 79 0a 63  icular, we may.c
3ee0: 68 6f 6f 73 65 20 74 6f 20 73 69 6d 70 6c 69 66  hoose to simplif
3ef0: 79 20 74 68 65 20 69 6e 74 65 72 66 61 63 65 20  y the interface 
3f00: 69 6e 20 66 75 74 75 72 65 20 76 65 72 73 69 6f  in future versio
3f10: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 62 79 0a  ns of SQLite by.
3f20: 63 61 75 73 69 6e 67 20 74 68 65 20 65 72 72 6f  causing the erro
3f30: 72 73 20 61 62 6f 76 65 20 74 6f 20 66 6f 72 63  rs above to forc
3f40: 65 20 61 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e  e an uncondition
3f50: 61 6c 20 72 6f 6c 6c 62 61 63 6b 2e 3c 2f 70 3e  al rollback.</p>
3f60: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
3f70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3f80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3f90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3fa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3fb0: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
3fc0: 7b 53 41 56 45 50 4f 49 4e 54 7d 20 73 61 76 65  {SAVEPOINT} save
3fd0: 70 6f 69 6e 74 20 7b 53 41 56 45 50 4f 49 4e 54  point {SAVEPOINT
3fe0: 20 52 45 4c 45 41 53 45 7d 0a 0a 42 75 62 62 6c   RELEASE}..Bubbl
3ff0: 65 44 69 61 67 72 61 6d 20 73 61 76 65 70 6f 69  eDiagram savepoi
4000: 6e 74 2d 73 74 6d 74 0a 42 75 62 62 6c 65 44 69  nt-stmt.BubbleDi
4010: 61 67 72 61 6d 20 72 65 6c 65 61 73 65 2d 73 74  agram release-st
4020: 6d 74 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  mt.BubbleDiagram
4030: 20 72 6f 6c 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c   rollback-stmt.<
4040: 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 53 41 56 45  /tcl>..<p> ^SAVE
4050: 50 4f 49 4e 54 73 20 61 72 65 20 61 20 6d 65 74  POINTs are a met
4060: 68 6f 64 20 6f 66 20 63 72 65 61 74 69 6e 67 20  hod of creating 
4070: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20 73 69  transactions, si
4080: 6d 69 6c 61 72 20 74 6f 0a 5b 42 45 47 49 4e 5d  milar to.[BEGIN]
4090: 20 61 6e 64 20 5b 43 4f 4d 4d 49 54 5d 2c 20 65   and [COMMIT], e
40a0: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 53  xcept that the S
40b0: 41 56 45 50 4f 49 4e 54 20 61 6e 64 20 52 45 4c  AVEPOINT and REL
40c0: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 73 0a 61 72  EASE commands.ar
40d0: 65 20 6e 61 6d 65 64 20 61 6e 64 20 6d 61 79 20  e named and may 
40e0: 62 65 20 6e 65 73 74 65 64 2e 3c 2f 70 3e 0a 0a  be nested.</p>..
40f0: 3c 70 3e 20 5e 54 68 65 20 53 41 56 45 50 4f 49  <p> ^The SAVEPOI
4100: 4e 54 20 63 6f 6d 6d 61 6e 64 20 73 74 61 72 74  NT command start
4110: 73 20 61 20 6e 65 77 20 74 72 61 6e 73 61 63 74  s a new transact
4120: 69 6f 6e 20 77 69 74 68 20 61 20 6e 61 6d 65 2e  ion with a name.
4130: 0a 5e 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f  .^The transactio
4140: 6e 20 6e 61 6d 65 73 20 6e 65 65 64 20 6e 6f 74  n names need not
4150: 20 62 65 20 75 6e 69 71 75 65 2e 0a 5e 28 41 20   be unique..^(A 
4160: 53 41 56 45 50 4f 49 4e 54 20 63 61 6e 20 62 65  SAVEPOINT can be
4170: 20 73 74 61 72 74 65 64 20 65 69 74 68 65 72 20   started either 
4180: 77 69 74 68 69 6e 20 6f 72 20 6f 75 74 73 69 64  within or outsid
4190: 65 20 6f 66 0a 61 20 5b 42 45 47 49 4e 5d 2e 2e  e of.a [BEGIN]..
41a0: 2e 5b 43 4f 4d 4d 49 54 5d 2e 29 5e 20 20 5e 28  .[COMMIT].)^  ^(
41b0: 57 68 65 6e 20 61 20 53 41 56 45 50 4f 49 4e 54  When a SAVEPOINT
41c0: 20 69 73 20 74 68 65 20 6f 75 74 65 72 2d 6d 6f   is the outer-mo
41d0: 73 74 20 73 61 76 65 70 6f 69 6e 74 0a 61 6e 64  st savepoint.and
41e0: 20 69 74 20 69 73 20 6e 6f 74 20 77 69 74 68 69   it is not withi
41f0: 6e 20 61 20 5b 42 45 47 49 4e 5d 2e 2e 2e 5b 43  n a [BEGIN]...[C
4200: 4f 4d 4d 49 54 5d 20 74 68 65 6e 20 74 68 65 20  OMMIT] then the 
4210: 62 65 68 61 76 69 6f 72 20 69 73 20 74 68 65 0a  behavior is the.
4220: 73 61 6d 65 20 61 73 20 42 45 47 49 4e 20 44 45  same as BEGIN DE
4230: 46 45 52 52 45 44 20 54 52 41 4e 53 41 43 54 49  FERRED TRANSACTI
4240: 4f 4e 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  ON.)^</p>..<p>^T
4250: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63  he ROLLBACK TO c
4260: 6f 6d 6d 61 6e 64 20 72 65 76 65 72 74 73 20 74  ommand reverts t
4270: 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20  he state of the 
4280: 64 61 74 61 62 61 73 65 20 62 61 63 6b 20 74 6f  database back to
4290: 20 77 68 61 74 0a 69 74 20 77 61 73 20 6a 75 73   what.it was jus
42a0: 74 20 61 66 74 65 72 20 74 68 65 20 63 6f 72 72  t after the corr
42b0: 65 73 70 6f 6e 64 69 6e 67 20 53 41 56 45 50 4f  esponding SAVEPO
42c0: 49 4e 54 2e 20 20 5e 4e 6f 74 65 20 74 68 61 74  INT.  ^Note that
42d0: 20 75 6e 6c 69 6b 65 20 74 68 61 74 0a 70 6c 61   unlike that.pla
42e0: 69 6e 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20 63 6f  in [ROLLBACK] co
42f0: 6d 6d 61 6e 64 20 28 77 69 74 68 6f 75 74 20 74  mmand (without t
4300: 68 65 20 54 4f 20 6b 65 79 77 6f 72 64 29 20 74  he TO keyword) t
4310: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63  he ROLLBACK TO c
4320: 6f 6d 6d 61 6e 64 0a 64 6f 65 73 20 6e 6f 74 20  ommand.does not 
4330: 63 61 6e 63 65 6c 20 74 68 65 20 74 72 61 6e 73  cancel the trans
4340: 61 63 74 69 6f 6e 2e 20 20 5e 49 6e 73 74 65 61  action.  ^Instea
4350: 64 20 6f 66 20 63 61 6e 63 65 6c 6c 69 6e 67 20  d of cancelling 
4360: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  the transaction,
4370: 0a 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f  .the ROLLBACK TO
4380: 20 63 6f 6d 6d 61 6e 64 20 72 65 73 74 61 72 74   command restart
4390: 73 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  s the transactio
43a0: 6e 20 61 67 61 69 6e 20 61 74 20 74 68 65 20 62  n again at the b
43b0: 65 67 69 6e 6e 69 6e 67 2e 0a 5e 41 6c 6c 20 69  eginning..^All i
43c0: 6e 74 65 72 76 65 6e 69 6e 67 20 53 41 56 45 50  ntervening SAVEP
43d0: 4f 49 4e 54 73 20 61 72 65 20 63 61 6e 63 65 6c  OINTs are cancel
43e0: 65 64 2c 20 68 6f 77 65 76 65 72 2e 3c 2f 70 3e  ed, however.</p>
43f0: 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 4c 45 41 53  ..<p>^The RELEAS
4400: 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6c 69 6b  E command is lik
4410: 65 20 61 20 5b 43 4f 4d 4d 49 54 5d 20 66 6f 72  e a [COMMIT] for
4420: 20 61 20 53 41 56 45 50 4f 49 4e 54 2e 0a 5e 54   a SAVEPOINT..^T
4430: 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  he RELEASE comma
4440: 6e 64 20 63 61 75 73 65 73 20 61 6c 6c 20 73 61  nd causes all sa
4450: 76 65 70 6f 69 6e 74 73 20 62 61 63 6b 20 74 6f  vepoints back to
4460: 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74   and including t
4470: 68 65 20 0a 6d 6f 73 74 20 72 65 63 65 6e 74 20  he .most recent 
4480: 73 61 76 65 70 6f 69 6e 74 20 77 69 74 68 20 61  savepoint with a
4490: 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 20 74   matching name t
44a0: 6f 20 62 65 20 72 65 6d 6f 76 65 64 20 66 72 6f  o be removed fro
44b0: 6d 20 74 68 65 20 0a 74 72 61 6e 73 61 63 74 69  m the .transacti
44c0: 6f 6e 20 73 74 61 63 6b 2e 20 20 5e 54 68 65 20  on stack.  ^The 
44d0: 52 45 4c 45 41 53 45 20 6f 66 20 61 6e 20 69 6e  RELEASE of an in
44e0: 6e 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ner transaction.
44f0: 64 6f 65 73 20 6e 6f 74 20 63 61 75 73 65 20 61  does not cause a
4500: 6e 79 20 63 68 61 6e 67 65 73 20 74 6f 20 62 65  ny changes to be
4510: 20 77 72 69 74 74 65 6e 20 74 6f 20 74 68 65 20   written to the 
4520: 64 61 74 61 62 61 73 65 20 66 69 6c 65 3b 20 69  database file; i
4530: 74 20 6d 65 72 65 6c 79 0a 72 65 6d 6f 76 65 73  t merely.removes
4540: 20 73 61 76 65 70 6f 69 6e 74 73 20 66 72 6f 6d   savepoints from
4550: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
4560: 20 73 74 61 63 6b 20 73 75 63 68 20 74 68 61 74   stack such that
4570: 20 69 74 20 69 73 0a 6e 6f 20 6c 6f 6e 67 65 72   it is.no longer
4580: 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 52 4f 4c   possible to ROL
4590: 4c 42 41 43 4b 20 54 4f 20 74 68 6f 73 65 20 73  LBACK TO those s
45a0: 61 76 65 70 6f 69 6e 74 73 2e 0a 5e 49 66 20 61  avepoints..^If a
45b0: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
45c0: 20 72 65 6c 65 61 73 65 73 20 74 68 65 20 6f 75   releases the ou
45d0: 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e  termost savepoin
45e0: 74 2c 20 73 6f 0a 74 68 61 74 20 74 68 65 20 74  t, so.that the t
45f0: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b  ransaction stack
4600: 20 62 65 63 6f 6d 65 73 20 65 6d 70 74 79 2c 20   becomes empty, 
4610: 74 68 65 6e 20 52 45 4c 45 41 53 45 20 69 73 20  then RELEASE is 
4620: 74 68 65 20 73 61 6d 65 0a 61 73 20 5b 43 4f 4d  the same.as [COM
4630: 4d 49 54 5d 2e 0a 5e 54 68 65 20 5b 43 4f 4d 4d  MIT]..^The [COMM
4640: 49 54 5d 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20  IT] command may 
4650: 62 65 20 75 73 65 64 20 74 6f 20 72 65 6c 65 61  be used to relea
4660: 73 65 20 61 6c 6c 20 73 61 76 65 70 6f 69 6e 74  se all savepoint
4670: 73 20 61 6e 64 0a 63 6f 6d 6d 69 74 20 74 68 65  s and.commit the
4680: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 65 76 65   transaction eve
4690: 6e 20 69 66 20 74 68 65 20 74 72 61 6e 73 61 63  n if the transac
46a0: 74 69 6f 6e 20 77 61 73 20 6f 72 69 67 69 6e 61  tion was origina
46b0: 6c 6c 79 20 73 74 61 72 74 65 64 0a 62 79 20 61  lly started.by a
46c0: 20 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61   SAVEPOINT comma
46d0: 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20  nd instead of a 
46e0: 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64 2e  [BEGIN] command.
46f0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  </p>..<p>^If the
4700: 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 20   savepoint-name 
4710: 69 6e 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d  in a RELEASE com
4720: 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6d 61  mand does not ma
4730: 74 63 68 20 61 6e 79 0a 73 61 76 65 70 6f 69 6e  tch any.savepoin
4740: 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 74  t currently in t
4750: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  he transaction s
4760: 74 61 63 6b 2c 20 74 68 65 6e 20 6e 6f 20 73 61  tack, then no sa
4770: 76 65 70 6f 69 6e 74 73 20 61 72 65 0a 72 65 6c  vepoints are.rel
4780: 65 61 73 65 64 2c 20 74 68 65 20 64 61 74 61 62  eased, the datab
4790: 61 73 65 20 69 73 20 75 6e 63 68 61 6e 67 65 64  ase is unchanged
47a0: 2c 20 61 6e 64 20 74 68 65 20 52 45 4c 45 41 53  , and the RELEAS
47b0: 45 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72 6e  E command return
47c0: 73 0a 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a  s.an error.</p>.
47d0: 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 61  .<p>^Note that a
47e0: 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74  n inner transact
47f0: 69 6f 6e 20 6d 69 67 68 74 20 63 6f 6d 6d 69 74  ion might commit
4800: 20 28 75 73 69 6e 67 20 74 68 65 20 52 45 4c 45   (using the RELE
4810: 41 53 45 20 63 6f 6d 6d 61 6e 64 29 0a 62 75 74  ASE command).but
4820: 20 74 68 65 6e 20 6c 61 74 65 72 20 68 61 76 65   then later have
4830: 20 69 74 73 20 77 6f 72 6b 20 75 6e 64 6f 6e 65   its work undone
4840: 20 62 79 20 61 20 52 4f 4c 4c 42 41 43 4b 20 69   by a ROLLBACK i
4850: 6e 20 61 6e 20 6f 75 74 65 72 20 74 72 61 6e 73  n an outer trans
4860: 61 63 74 69 6f 6e 2e 0a 5e 41 20 70 6f 77 65 72  action..^A power
4870: 20 66 61 69 6c 75 72 65 20 6f 72 20 70 72 6f 67   failure or prog
4880: 72 61 6d 20 63 72 61 73 68 20 6f 72 20 4f 53 20  ram crash or OS 
4890: 63 72 61 73 68 20 77 69 6c 6c 20 63 61 75 73 65  crash will cause
48a0: 20 74 68 65 20 6f 75 74 65 72 2d 6d 6f 73 74 0a   the outer-most.
48b0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 6f 20 72  transaction to r
48c0: 6f 6c 6c 62 61 63 6b 2c 20 75 6e 64 6f 69 6e 67  ollback, undoing
48d0: 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61   all changes tha
48e0: 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20  t have occurred 
48f0: 77 69 74 68 69 6e 0a 74 68 61 74 20 6f 75 74 65  within.that oute
4900: 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 65  r transaction, e
4910: 76 65 6e 20 63 68 61 6e 67 65 73 20 74 68 61 74  ven changes that
4920: 20 68 61 76 65 20 73 75 70 70 6f 73 65 64 6c 79   have supposedly
4930: 20 62 65 65 6e 20 22 63 6f 6d 6d 69 74 74 65 64   been "committed
4940: 22 0a 62 79 20 74 68 65 20 52 45 4c 45 41 53 45  ".by the RELEASE
4950: 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 43 6f 6e 74   command.  ^Cont
4960: 65 6e 74 20 69 73 20 6e 6f 74 20 61 63 74 75 61  ent is not actua
4970: 6c 6c 79 20 63 6f 6d 6d 69 74 74 65 64 20 6f 6e  lly committed on
4980: 20 74 68 65 20 64 69 73 6b 20 0a 75 6e 74 69 6c   the disk .until
4990: 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 74   the outermost t
49a0: 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69  ransaction commi
49b0: 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 72  ts.</p>..<p>Ther
49c0: 65 20 61 72 65 20 73 65 76 65 72 61 6c 20 77 61  e are several wa
49d0: 79 73 20 6f 66 20 74 68 69 6e 6b 69 6e 67 20 61  ys of thinking a
49e0: 62 6f 75 74 20 74 68 65 20 52 45 4c 45 41 53 45  bout the RELEASE
49f0: 20 63 6f 6d 6d 61 6e 64 3a 3c 2f 70 3e 0a 0a 3c   command:</p>..<
4a00: 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 53 6f 6d 65  ul>.<li><p>.Some
4a10: 20 70 65 6f 70 6c 65 20 76 69 65 77 20 52 45 4c   people view REL
4a20: 45 41 53 45 20 61 73 20 74 68 65 20 65 71 75 69  EASE as the equi
4a30: 76 61 6c 65 6e 74 20 6f 66 20 43 4f 4d 4d 49 54  valent of COMMIT
4a40: 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49 4e 54   for a SAVEPOINT
4a50: 2e 0a 54 68 69 73 20 69 73 20 61 6e 20 61 63 63  ..This is an acc
4a60: 65 70 74 61 62 6c 65 20 70 6f 69 6e 74 20 6f 66  eptable point of
4a70: 20 76 69 65 77 20 61 73 20 6c 6f 6e 67 20 61 73   view as long as
4a80: 20 6f 6e 65 20 72 65 6d 65 6d 62 65 72 73 20 74   one remembers t
4a90: 68 61 74 20 74 68 65 0a 63 68 61 6e 67 65 73 20  hat the.changes 
4aa0: 63 6f 6d 6d 69 74 74 65 64 20 62 79 20 61 6e 20  committed by an 
4ab0: 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74 69 6f  inner transactio
4ac0: 6e 20 6d 69 67 68 74 20 6c 61 74 65 72 20 62 65  n might later be
4ad0: 20 75 6e 64 6f 6e 65 20 62 79 20 61 0a 72 6f 6c   undone by a.rol
4ae0: 6c 62 61 63 6b 20 69 6e 20 61 6e 20 6f 75 74 65  lback in an oute
4af0: 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f  r transaction.</
4b00: 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
4b10: 0a 41 6e 6f 74 68 65 72 20 76 69 65 77 20 6f 66  .Another view of
4b20: 20 52 45 4c 45 41 53 45 20 69 73 20 74 68 61 74   RELEASE is that
4b30: 20 69 74 20 6d 65 72 67 65 73 20 61 20 6e 61 6d   it merges a nam
4b40: 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  ed transaction i
4b50: 6e 74 6f 20 69 74 73 0a 70 61 72 65 6e 74 20 74  nto its.parent t
4b60: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 73 6f 20 74  ransaction, so t
4b70: 68 61 74 20 74 68 65 20 6e 61 6d 65 64 20 74 72  hat the named tr
4b80: 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 69 74  ansaction and it
4b90: 73 20 70 61 72 65 6e 74 20 62 65 63 6f 6d 65 0a  s parent become.
4ba0: 74 68 65 20 73 61 6d 65 20 74 72 61 6e 73 61 63  the same transac
4bb0: 74 69 6f 6e 2e 20 20 41 66 74 65 72 20 52 45 4c  tion.  After REL
4bc0: 45 41 53 45 2c 20 74 68 65 20 6e 61 6d 65 64 20  EASE, the named 
4bd0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20  transaction and 
4be0: 69 74 73 20 70 61 72 65 6e 74 0a 77 69 6c 6c 20  its parent.will 
4bf0: 63 6f 6d 6d 69 74 20 6f 72 20 72 6f 6c 6c 62 61  commit or rollba
4c00: 63 6b 20 74 6f 67 65 74 68 65 72 2c 20 77 68 61  ck together, wha
4c10: 74 65 76 65 72 20 74 68 65 69 72 20 66 61 74 65  tever their fate
4c20: 20 6d 61 79 20 62 65 2e 0a 3c 2f 70 3e 3c 2f 6c   may be..</p></l
4c30: 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 4f 6e 65 20  i>..<li><p>.One 
4c40: 63 61 6e 20 61 6c 73 6f 20 74 68 69 6e 6b 20 6f  can also think o
4c50: 66 20 73 61 76 65 70 6f 69 6e 74 73 20 61 73 0a  f savepoints as.
4c60: 22 6d 61 72 6b 73 22 20 69 6e 20 74 68 65 20 74  "marks" in the t
4c70: 72 61 6e 73 61 63 74 69 6f 6e 20 74 69 6d 65 6c  ransaction timel
4c80: 69 6e 65 2e 20 20 49 6e 20 74 68 69 73 20 76 69  ine.  In this vi
4c90: 65 77 2c 20 74 68 65 20 53 41 56 45 50 4f 49 4e  ew, the SAVEPOIN
4ca0: 54 20 63 6f 6d 6d 61 6e 64 0a 63 72 65 61 74 65  T command.create
4cb0: 73 20 61 20 6e 65 77 20 6d 61 72 6b 2c 20 74 68  s a new mark, th
4cc0: 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f  e ROLLBACK TO co
4cd0: 6d 6d 61 6e 64 20 72 65 77 69 6e 64 73 20 74 68  mmand rewinds th
4ce0: 65 20 74 69 6d 65 6c 69 6e 65 20 62 61 63 6b 0a  e timeline back.
4cf0: 74 6f 20 61 20 70 6f 69 6e 74 20 6a 75 73 74 20  to a point just 
4d00: 61 66 74 65 72 20 74 68 65 20 6e 61 6d 65 64 20  after the named 
4d10: 6d 61 72 6b 2c 20 61 6e 64 20 74 68 65 20 52 45  mark, and the RE
4d20: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 0a 65 72  LEASE command.er
4d30: 61 73 65 73 20 6d 61 72 6b 73 20 66 72 6f 6d 20  ases marks from 
4d40: 74 68 65 20 74 69 6d 65 6c 69 6e 65 20 77 69 74  the timeline wit
4d50: 68 6f 75 74 20 61 63 74 75 61 6c 6c 79 20 6d 61  hout actually ma
4d60: 6b 69 6e 67 20 61 6e 79 0a 63 68 61 6e 67 65 73  king any.changes
4d70: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
4d80: 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c  ..</p></li>.</ul
4d90: 3e 0a 0a 0a 0a 3c 68 33 3e 54 72 61 6e 73 61 63  >....<h3>Transac
4da0: 74 69 6f 6e 20 4e 65 73 74 69 6e 67 20 52 75 6c  tion Nesting Rul
4db0: 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65  es</h3>..<p>^The
4dc0: 20 6c 61 73 74 20 74 72 61 6e 73 61 63 74 69 6f   last transactio
4dd0: 6e 20 73 74 61 72 74 65 64 20 77 69 6c 6c 20 62  n started will b
4de0: 65 20 74 68 65 20 66 69 72 73 74 0a 74 72 61 6e  e the first.tran
4df0: 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 74 65  saction committe
4e00: 64 20 6f 72 20 72 6f 6c 6c 65 64 20 62 61 63 6b  d or rolled back
4e10: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b  .</p>..<p>^The [
4e20: 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64 20 6f  BEGIN] command o
4e30: 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20 74 68 65  nly works if the
4e40: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
4e50: 63 6b 20 69 73 20 65 6d 70 74 79 2c 20 6f 72 0a  ck is empty, or.
4e60: 69 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 20 69  in other words i
4e70: 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 70  f there are no p
4e80: 65 6e 64 69 6e 67 20 74 72 61 6e 73 61 63 74 69  ending transacti
4e90: 6f 6e 73 2e 20 20 5e 49 66 20 74 68 65 20 74 72  ons.  ^If the tr
4ea0: 61 6e 73 61 63 74 69 6f 6e 0a 73 74 61 63 6b 20  ansaction.stack 
4eb0: 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 77 68 65  is not empty whe
4ec0: 6e 20 74 68 65 20 5b 42 45 47 49 4e 5d 20 63 6f  n the [BEGIN] co
4ed0: 6d 6d 61 6e 64 20 69 73 20 69 6e 76 6f 6b 65 64  mmand is invoked
4ee0: 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6d 6d 61  , then the comma
4ef0: 6e 64 0a 66 61 69 6c 73 20 77 69 74 68 20 61 6e  nd.fails with an
4f00: 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e   error.</p>..<p>
4f10: 5e 54 68 65 20 5b 43 4f 4d 4d 49 54 5d 20 63 6f  ^The [COMMIT] co
4f20: 6d 6d 61 6e 64 20 63 6f 6d 6d 69 74 73 20 61 6c  mmand commits al
4f30: 6c 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 74 72  l outstanding tr
4f40: 61 6e 73 61 63 74 69 6f 6e 73 20 61 6e 64 20 6c  ansactions and l
4f50: 65 61 76 65 73 0a 74 68 65 20 74 72 61 6e 73 61  eaves.the transa
4f60: 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70 74  ction stack empt
4f70: 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  y.</p>..<p>^The 
4f80: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
4f90: 73 74 61 72 74 73 20 77 69 74 68 20 74 68 65 20  starts with the 
4fa0: 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 64 64 69  most recent addi
4fb0: 74 69 6f 6e 20 74 6f 20 74 68 65 0a 74 72 61 6e  tion to the.tran
4fc0: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 61 6e  saction stack an
4fd0: 64 20 72 65 6c 65 61 73 65 73 20 73 61 76 65 70  d releases savep
4fe0: 6f 69 6e 74 73 20 62 61 63 6b 77 61 72 64 73 20  oints backwards 
4ff0: 0a 69 6e 20 74 69 6d 65 20 75 6e 74 69 6c 20 69  .in time until i
5000: 74 20 72 65 6c 65 61 73 65 73 20 61 20 73 61 76  t releases a sav
5010: 65 70 6f 69 6e 74 20 77 69 74 68 20 61 20 6d 61  epoint with a ma
5020: 74 63 68 69 6e 67 20 73 61 76 65 70 6f 69 6e 74  tching savepoint
5030: 2d 6e 61 6d 65 2e 0a 5e 50 72 69 6f 72 20 73 61  -name..^Prior sa
5040: 76 65 70 6f 69 6e 74 73 2c 20 65 76 65 6e 20 73  vepoints, even s
5050: 61 76 65 70 6f 69 6e 74 73 20 77 69 74 68 20 6d  avepoints with m
5060: 61 74 63 68 69 6e 67 20 73 61 76 65 70 6f 69 6e  atching savepoin
5070: 74 2d 6e 61 6d 65 73 2c 20 61 72 65 0a 75 6e 63  t-names, are.unc
5080: 68 61 6e 67 65 64 2e 0a 5e 49 66 20 74 68 65 20  hanged..^If the 
5090: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
50a0: 63 61 75 73 65 73 20 74 68 65 0a 74 72 61 6e 73  causes the.trans
50b0: 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 74 6f 20  action stack to 
50c0: 62 65 63 6f 6d 65 20 65 6d 70 74 79 20 28 69 66  become empty (if
50d0: 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d   the RELEASE com
50e0: 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20 74 68  mand releases th
50f0: 65 0a 6f 75 74 65 72 6d 6f 73 74 20 74 72 61 6e  e.outermost tran
5100: 73 61 63 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65  saction from the
5110: 20 73 74 61 63 6b 29 20 74 68 65 6e 20 74 68 65   stack) then the
5120: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d   transaction com
5130: 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  mits.</p>..<p>^T
5140: 68 65 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20 63 6f  he [ROLLBACK] co
5150: 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74 20 61 20  mmand without a 
5160: 54 4f 20 63 6c 61 75 73 65 20 72 6f 6c 6c 73 20  TO clause rolls 
5170: 62 61 63 6b 73 20 61 6c 6c 20 74 72 61 6e 73 61  backs all transa
5180: 63 74 69 6f 6e 73 0a 61 6e 64 20 6c 65 61 76 65  ctions.and leave
5190: 73 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  s the transactio
51a0: 6e 20 73 74 61 63 6b 20 65 6d 70 74 79 2e 3c 2f  n stack empty.</
51b0: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 4f 4c 4c  p>..<p>^The ROLL
51c0: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 74  BACK command wit
51d0: 68 20 61 20 54 4f 20 63 6c 61 75 73 65 20 72 6f  h a TO clause ro
51e0: 6c 6c 73 20 62 61 63 6b 20 74 72 61 6e 73 61 63  lls back transac
51f0: 74 69 6f 6e 73 20 67 6f 69 6e 67 0a 62 61 63 6b  tions going.back
5200: 77 61 72 64 73 20 69 6e 20 74 69 6d 65 20 62 61  wards in time ba
5210: 63 6b 20 74 6f 20 74 68 65 20 6d 6f 73 74 20 72  ck to the most r
5220: 65 63 65 6e 74 20 53 41 56 45 50 4f 49 4e 54 20  ecent SAVEPOINT 
5230: 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20  with a matching 
5240: 6e 61 6d 65 2e 0a 5e 54 68 65 20 53 41 56 45 50  name..^The SAVEP
5250: 4f 49 4e 54 20 77 69 74 68 20 74 68 65 20 6d 61  OINT with the ma
5260: 74 63 68 69 6e 67 20 6e 61 6d 65 20 72 65 6d 61  tching name rema
5270: 69 6e 73 20 6f 6e 20 74 68 65 20 74 72 61 6e 73  ins on the trans
5280: 61 63 74 69 6f 6e 20 73 74 61 63 6b 2c 0a 62 75  action stack,.bu
5290: 74 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20 63  t all database c
52a0: 68 61 6e 67 65 73 20 74 68 61 74 20 6f 63 63 75  hanges that occu
52b0: 72 72 65 64 20 61 66 74 65 72 20 74 68 61 74 20  rred after that 
52c0: 53 41 56 45 50 4f 49 4e 54 20 77 61 73 20 63 72  SAVEPOINT was cr
52d0: 65 61 74 65 64 0a 61 72 65 20 72 6f 6c 6c 65 64  eated.are rolled
52e0: 20 62 61 63 6b 2e 20 20 5e 49 66 20 74 68 65 20   back.  ^If the 
52f0: 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 20 69  savepoint-name i
5300: 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20  n a ROLLBACK TO 
5310: 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74  command does not
5320: 0a 6d 61 74 63 68 20 61 6e 79 20 53 41 56 45 50  .match any SAVEP
5330: 4f 49 4e 54 20 6f 6e 20 74 68 65 20 73 74 61 63  OINT on the stac
5340: 6b 2c 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c  k, then the ROLL
5350: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 66 61 69  BACK command fai
5360: 6c 73 20 77 69 74 68 20 61 6e 0a 65 72 72 6f 72  ls with an.error
5370: 20 61 6e 64 20 6c 65 61 76 65 73 20 74 68 65 20   and leaves the 
5380: 73 74 61 74 65 20 6f 66 20 74 68 65 20 64 61 74  state of the dat
5390: 61 62 61 73 65 20 75 6e 63 68 61 6e 67 65 64 2e  abase unchanged.
53a0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
53b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
53c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
53d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
53e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
53f0: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
5400: 69 6f 6e 20 63 6f 6d 6d 65 6e 74 20 63 6f 6d 6d  ion comment comm
5410: 65 6e 74 20 7b 63 6f 6d 6d 65 6e 74 20 2a 63 6f  ent {comment *co
5420: 6d 6d 65 6e 74 73 7d 0a 0a 42 75 62 62 6c 65 44  mments}..BubbleD
5430: 69 61 67 72 61 6d 20 63 6f 6d 6d 65 6e 74 2d 73  iagram comment-s
5440: 79 6e 74 61 78 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  yntax.</tcl>..<p
5450: 3e 5e 43 6f 6d 6d 65 6e 74 73 20 61 72 65 20 6e  >^Comments are n
5460: 6f 74 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2c  ot SQL commands,
5470: 20 62 75 74 20 63 61 6e 20 6f 63 63 75 72 20 77   but can occur w
5480: 69 74 68 69 6e 20 74 68 65 20 74 65 78 74 20 6f  ithin the text o
5490: 66 0a 53 51 4c 20 71 75 65 72 69 65 73 20 70 61  f.SQL queries pa
54a0: 73 73 65 64 20 74 6f 20 5b 73 71 6c 69 74 65 33  ssed to [sqlite3
54b0: 5f 70 72 65 70 61 72 65 5f 76 32 28 29 5d 20 61  _prepare_v2()] a
54c0: 6e 64 20 72 65 6c 61 74 65 64 20 69 6e 74 65 72  nd related inter
54d0: 66 61 63 65 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73  faces..^Comments
54e0: 20 61 72 65 20 74 72 65 61 74 65 64 20 61 73 20   are treated as 
54f0: 77 68 69 74 65 73 70 61 63 65 20 62 79 20 74 68  whitespace by th
5500: 65 20 70 61 72 73 65 72 2e 0a 5e 43 6f 6d 6d 65  e parser..^Comme
5510: 6e 74 73 20 63 61 6e 20 62 65 67 69 6e 20 61 6e  nts can begin an
5520: 79 77 68 65 72 65 20 77 68 69 74 65 73 70 61 63  ywhere whitespac
5530: 65 20 0a 63 61 6e 20 62 65 20 66 6f 75 6e 64 2c  e .can be found,
5540: 20 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69 64   including insid
5550: 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68  e expressions th
5560: 61 74 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65  at span multiple
5570: 20 6c 69 6e 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70   lines..</p>..<p
5580: 3e 5e 53 51 4c 20 63 6f 6d 6d 65 6e 74 73 20 62  >^SQL comments b
5590: 65 67 69 6e 20 77 69 74 68 20 74 77 6f 20 63 6f  egin with two co
55a0: 6e 73 65 63 75 74 69 76 65 20 22 2d 22 20 63 68  nsecutive "-" ch
55b0: 61 72 61 63 74 65 72 73 20 28 41 53 43 49 49 20  aracters (ASCII 
55c0: 30 78 32 64 29 0a 61 6e 64 20 65 78 74 65 6e 64  0x2d).and extend
55d0: 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75   up to and inclu
55e0: 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20 6e 65  ding the next ne
55f0: 77 6c 69 6e 65 20 63 68 61 72 61 63 74 65 72 20  wline character 
5600: 28 41 53 43 49 49 20 30 78 30 61 29 0a 6f 72 20  (ASCII 0x0a).or 
5610: 75 6e 74 69 6c 20 74 68 65 20 65 6e 64 20 6f 66  until the end of
5620: 20 69 6e 70 75 74 2c 20 77 68 69 63 68 65 76 65   input, whicheve
5630: 72 20 63 6f 6d 65 73 20 66 69 72 73 74 2e 3c 2f  r comes first.</
5640: 70 3e 0a 0a 3c 70 3e 5e 43 2d 73 74 79 6c 65 20  p>..<p>^C-style 
5650: 63 6f 6d 6d 65 6e 74 73 20 62 65 67 69 6e 0a 77  comments begin.w
5660: 69 74 68 20 22 2f 2a 22 20 61 6e 64 20 65 78 74  ith "/*" and ext
5670: 65 6e 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e  end up to and in
5680: 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74  cluding the next
5690: 20 22 2a 2f 22 20 63 68 61 72 61 63 74 65 72 20   "*/" character 
56a0: 70 61 69 72 0a 6f 72 20 75 6e 74 69 6c 20 74 68  pair.or until th
56b0: 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20  e end of input, 
56c0: 77 68 69 63 68 65 76 65 72 20 63 6f 6d 65 73 20  whichever comes 
56d0: 66 69 72 73 74 2e 20 20 5e 43 2d 73 74 79 6c 65  first.  ^C-style
56e0: 20 63 6f 6d 6d 65 6e 74 73 0a 63 61 6e 20 73 70   comments.can sp
56f0: 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65  an multiple line
5700: 73 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 6f 6d  s. </p>..<p>^Com
5710: 6d 65 6e 74 73 20 63 61 6e 20 61 70 70 65 61 72  ments can appear
5720: 20 61 6e 79 77 68 65 72 65 20 77 68 69 74 65 73   anywhere whites
5730: 70 61 63 65 20 63 61 6e 20 6f 63 63 75 72 2c 0a  pace can occur,.
5740: 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65  including inside
5750: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 6e 64   expressions and
5760: 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f   in the middle o
5770: 66 20 6f 74 68 65 72 20 53 51 4c 20 73 74 61 74  f other SQL stat
5780: 65 6d 65 6e 74 73 2e 0a 5e 43 6f 6d 6d 65 6e 74  ements..^Comment
5790: 73 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 0a 3c  s do not nest..<
57a0: 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  /p>...<tcl>.####
57b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57f0: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
5800: 6f 6e 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58  on {CREATE INDEX
5810: 7d 20 63 72 65 61 74 65 69 6e 64 65 78 20 7b 7b  } createindex {{
5820: 43 52 45 41 54 45 20 49 4e 44 45 58 7d 7d 0a 0a  CREATE INDEX}}..
5830: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72  BubbleDiagram cr
5840: 65 61 74 65 2d 69 6e 64 65 78 2d 73 74 6d 74 20  eate-index-stmt 
5850: 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  1.BubbleDiagram 
5860: 69 6e 64 65 78 65 64 2d 63 6f 6c 75 6d 6e 0a 3c  indexed-column.<
5870: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43  /tcl>..<p>^The C
5880: 52 45 41 54 45 20 49 4e 44 45 58 20 63 6f 6d 6d  REATE INDEX comm
5890: 61 6e 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  and consists of 
58a0: 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22 43 52  the keywords "CR
58b0: 45 41 54 45 20 49 4e 44 45 58 22 20 66 6f 6c 6c  EATE INDEX" foll
58c0: 6f 77 65 64 0a 62 79 20 74 68 65 20 6e 61 6d 65  owed.by the name
58d0: 20 6f 66 20 74 68 65 20 6e 65 77 20 69 6e 64 65   of the new inde
58e0: 78 2c 20 74 68 65 20 6b 65 79 77 6f 72 64 20 22  x, the keyword "
58f0: 4f 4e 22 2c 20 74 68 65 20 6e 61 6d 65 20 6f 66  ON", the name of
5900: 20 61 20 70 72 65 76 69 6f 75 73 6c 79 0a 63 72   a previously.cr
5910: 65 61 74 65 64 20 74 61 62 6c 65 20 74 68 61 74  eated table that
5920: 20 69 73 20 74 6f 20 62 65 20 69 6e 64 65 78 65   is to be indexe
5930: 64 2c 20 61 6e 64 20 61 20 70 61 72 65 6e 74 68  d, and a parenth
5940: 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66 20 6e  esized list of n
5950: 61 6d 65 73 20 6f 66 0a 63 6f 6c 75 6d 6e 73 20  ames of.columns 
5960: 69 6e 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  in the table tha
5970: 74 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 74  t are used for t
5980: 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 3c 2f 70  he index key.</p
5990: 3e 0a 0a 3c 70 3e 5e 45 61 63 68 20 63 6f 6c 75  >..<p>^Each colu
59a0: 6d 6e 20 6e 61 6d 65 20 63 61 6e 20 62 65 20 66  mn name can be f
59b0: 6f 6c 6c 6f 77 65 64 20 62 79 20 6f 6e 65 20 6f  ollowed by one o
59c0: 66 20 74 68 65 20 22 41 53 43 22 20 6f 72 20 22  f the "ASC" or "
59d0: 44 45 53 43 22 20 6b 65 79 77 6f 72 64 73 0a 74  DESC" keywords.t
59e0: 6f 20 69 6e 64 69 63 61 74 65 20 73 6f 72 74 20  o indicate sort 
59f0: 6f 72 64 65 72 2e 20 20 5e 54 68 65 20 73 6f 72  order.  ^The sor
5a00: 74 20 6f 72 64 65 72 20 6d 61 79 20 6f 72 20 6d  t order may or m
5a10: 61 79 20 6e 6f 74 20 62 65 20 69 67 6e 6f 72 65  ay not be ignore
5a20: 64 20 64 65 70 65 6e 64 69 6e 67 0a 6f 6e 20 74  d depending.on t
5a30: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
5a40: 20 66 6f 72 6d 61 74 2e 20 20 5e 54 68 65 20 22   format.  ^The "
5a50: 6c 65 67 61 63 79 22 20 66 69 6c 65 20 66 6f 72  legacy" file for
5a60: 6d 61 74 20 69 67 6e 6f 72 65 73 20 69 6e 64 65  mat ignores inde
5a70: 78 0a 73 6f 72 74 20 6f 72 64 65 72 2e 20 20 5e  x.sort order.  ^
5a80: 54 68 65 20 64 65 73 63 65 6e 64 69 6e 67 20 69  The descending i
5a90: 6e 64 65 78 20 66 69 6c 65 20 66 6f 72 6d 61 74  ndex file format
5aa0: 20 74 61 6b 65 73 20 69 6e 64 65 78 20 73 6f 72   takes index sor
5ab0: 74 20 6f 72 64 65 72 0a 69 6e 74 6f 20 61 63 63  t order.into acc
5ac0: 6f 75 6e 74 2e 20 20 5e 28 4f 6e 6c 79 20 63 6f  ount.  ^(Only co
5ad0: 70 69 65 73 20 6f 66 20 53 51 4c 69 74 65 20 6e  pies of SQLite n
5ae0: 65 77 65 72 20 74 68 61 6e 20 5b 76 65 72 73 69  ewer than [versi
5af0: 6f 6e 20 33 2e 33 2e 30 5d 20 0a 28 72 65 6c 65  on 3.3.0] .(rele
5b00: 61 73 65 64 20 6f 6e 20 32 30 30 36 2d 30 31 2d  ased on 2006-01-
5b10: 31 30 29 20 61 72 65 20 61 62 6c 65 20 74 6f 20  10) are able to 
5b20: 75 6e 64 65 72 73 74 61 6e 64 20 74 68 65 20 6e  understand the n
5b30: 65 77 65 72 20 64 65 73 63 65 6e 64 69 6e 67 0a  ewer descending.
5b40: 69 6e 64 65 78 20 66 69 6c 65 20 66 6f 72 6d 61  index file forma
5b50: 74 20 61 6e 64 20 73 6f 20 66 6f 72 20 63 6f 6d  t and so for com
5b60: 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20  patibility with 
5b70: 6f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f  older versions o
5b80: 66 0a 53 51 4c 69 74 65 2c 20 74 68 65 20 6c 65  f.SQLite, the le
5b90: 67 61 63 79 20 66 69 6c 65 20 66 6f 72 6d 61 74  gacy file format
5ba0: 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 62 79   is generated by
5bb0: 20 64 65 66 61 75 6c 74 2e 29 5e 20 20 5e 55 73   default.)^  ^Us
5bc0: 65 20 74 68 65 0a 5b 6c 65 67 61 63 79 5f 66 69  e the.[legacy_fi
5bd0: 6c 65 5f 66 6f 72 6d 61 74 5d 20 70 72 61 67 6d  le_format] pragm
5be0: 61 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 69 73  a to modify this
5bf0: 20 62 65 68 61 76 69 6f 72 20 61 6e 64 20 67 65   behavior and ge
5c00: 6e 65 72 61 74 65 0a 64 61 74 61 62 61 73 65 73  nerate.databases
5c10: 20 74 68 61 74 20 75 73 65 20 74 68 65 20 6e 65   that use the ne
5c20: 77 65 72 20 66 69 6c 65 20 66 6f 72 6d 61 74 2e  wer file format.
5c30: 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e    Future version
5c40: 73 20 6f 66 20 53 51 4c 69 74 65 0a 6d 61 79 20  s of SQLite.may 
5c50: 62 65 67 69 6e 20 74 6f 20 67 65 6e 65 72 61 74  begin to generat
5c60: 65 20 74 68 65 20 6e 65 77 65 72 20 66 69 6c 65  e the newer file
5c70: 20 66 6f 72 6d 61 74 20 62 79 20 64 65 66 61 75   format by defau
5c80: 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  lt.</p>..<p>^The
5c90: 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20   COLLATE clause 
5ca0: 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f  optionally follo
5cb0: 77 69 6e 67 20 65 61 63 68 20 63 6f 6c 75 6d 6e  wing each column
5cc0: 20 6e 61 6d 65 20 64 65 66 69 6e 65 73 20 61 0a   name defines a.
5cd0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
5ce0: 63 65 20 75 73 65 64 20 66 6f 72 20 74 65 78 74  ce used for text
5cf0: 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 61 74   entries in that
5d00: 20 63 6f 6c 75 6d 6e 2e 0a 5e 54 68 65 20 64 65   column..^The de
5d10: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 0a  fault collating.
5d20: 73 65 71 75 65 6e 63 65 20 69 73 20 74 68 65 20  sequence is the 
5d30: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
5d40: 63 65 20 64 65 66 69 6e 65 64 20 66 6f 72 20 74  ce defined for t
5d50: 68 61 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  hat column in th
5d60: 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  e.[CREATE TABLE]
5d70: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 5e 4f 72   statement.  ^Or
5d80: 20 69 66 20 6e 6f 20 63 6f 6c 6c 61 74 69 6e 67   if no collating
5d90: 20 73 65 71 75 65 6e 63 65 20 69 73 20 6f 74 68   sequence is oth
5da0: 65 72 77 69 73 65 20 64 65 66 69 6e 65 64 2c 0a  erwise defined,.
5db0: 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 42 49 4e  the built-in BIN
5dc0: 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ARY collating se
5dd0: 71 75 65 6e 63 65 20 69 73 20 75 73 65 64 2e 3c  quence is used.<
5de0: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72  /p>..<p>There ar
5df0: 65 20 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c  e no arbitrary l
5e00: 69 6d 69 74 73 20 6f 6e 20 74 68 65 20 6e 75 6d  imits on the num
5e10: 62 65 72 20 6f 66 20 69 6e 64 69 63 65 73 20 74  ber of indices t
5e20: 68 61 74 20 63 61 6e 20 62 65 0a 61 74 74 61 63  hat can be.attac
5e30: 68 65 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20  hed to a single 
5e40: 74 61 62 6c 65 2e 20 20 5e 28 54 68 65 20 6e 75  table.  ^(The nu
5e50: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
5e60: 69 6e 20 61 6e 20 69 6e 64 65 78 20 69 73 20 0a  in an index is .
5e70: 6c 69 6d 69 74 65 64 20 74 6f 20 74 68 65 20 76  limited to the v
5e80: 61 6c 75 65 20 73 65 74 20 62 79 0a 5b 73 71 6c  alue set by.[sql
5e90: 69 74 65 33 5f 6c 69 6d 69 74 5d 28 5b 53 51 4c  ite3_limit]([SQL
5ea0: 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e  ITE_LIMIT_COLUMN
5eb0: 5d 2c 2e 2e 2e 29 2e 29 5e 3c 2f 70 3e 0a 0a 3c  ],...).)^</p>..<
5ec0: 70 3e 5e 49 66 20 74 68 65 20 55 4e 49 51 55 45  p>^If the UNIQUE
5ed0: 20 6b 65 79 77 6f 72 64 20 61 70 70 65 61 72 73   keyword appears
5ee0: 20 62 65 74 77 65 65 6e 20 43 52 45 41 54 45 20   between CREATE 
5ef0: 61 6e 64 20 49 4e 44 45 58 20 74 68 65 6e 20 64  and INDEX then d
5f00: 75 70 6c 69 63 61 74 65 0a 69 6e 64 65 78 20 65  uplicate.index e
5f10: 6e 74 72 69 65 73 20 61 72 65 20 6e 6f 74 20 61  ntries are not a
5f20: 6c 6c 6f 77 65 64 2e 20 20 5e 41 6e 79 20 61 74  llowed.  ^Any at
5f30: 74 65 6d 70 74 20 74 6f 20 69 6e 73 65 72 74 20  tempt to insert 
5f40: 61 20 64 75 70 6c 69 63 61 74 65 20 65 6e 74 72  a duplicate entr
5f50: 79 0a 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e  y.will result in
5f60: 20 61 6e 20 65 72 72 6f 72 2e 20 20 5e 46 6f 72   an error.  ^For
5f70: 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66   the purposes of
5f80: 20 75 6e 69 71 75 65 20 69 6e 64 69 63 65 73 2c   unique indices,
5f90: 20 61 6c 6c 20 4e 55 4c 4c 20 76 61 6c 75 65 73   all NULL values
5fa0: 0a 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20  .are considered 
5fb0: 74 6f 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f  to different fro
5fc0: 6d 20 61 6c 6c 20 6f 74 68 65 72 20 4e 55 4c 4c  m all other NULL
5fd0: 20 76 61 6c 75 65 73 20 61 6e 64 20 61 72 65 20   values and are 
5fe0: 74 68 75 73 20 75 6e 69 71 75 65 2e 0a 54 68 69  thus unique..Thi
5ff0: 73 20 69 73 20 6f 6e 65 20 6f 66 20 74 68 65 20  s is one of the 
6000: 74 77 6f 20 70 6f 73 73 69 62 6c 65 20 69 6e 74  two possible int
6010: 65 72 70 72 65 74 61 74 69 6f 6e 73 20 6f 66 20  erpretations of 
6020: 74 68 65 20 53 51 4c 2d 39 32 20 73 74 61 6e 64  the SQL-92 stand
6030: 61 72 64 0a 28 74 68 65 20 6c 61 6e 67 75 61 67  ard.(the languag
6040: 65 20 69 6e 20 74 68 65 20 73 74 61 6e 64 61 72  e in the standar
6050: 64 20 69 73 20 61 6d 62 69 67 75 6f 75 73 29 20  d is ambiguous) 
6060: 61 6e 64 20 69 73 20 74 68 65 20 69 6e 74 65 72  and is the inter
6070: 70 72 65 74 61 74 69 6f 6e 0a 66 6f 6c 6c 6f 77  pretation.follow
6080: 65 64 20 62 79 20 50 6f 73 74 67 72 65 53 51 4c  ed by PostgreSQL
6090: 2c 20 4d 79 53 51 4c 2c 20 46 69 72 65 62 69 72  , MySQL, Firebir
60a0: 64 2c 20 61 6e 64 20 4f 72 61 63 6c 65 2e 20 20  d, and Oracle.  
60b0: 49 6e 66 6f 72 6d 69 78 20 61 6e 64 0a 4d 69 63  Informix and.Mic
60c0: 72 6f 73 6f 66 74 20 53 51 4c 20 53 65 72 76 65  rosoft SQL Serve
60d0: 72 20 66 6f 6c 6c 6f 77 20 74 68 65 20 6f 74 68  r follow the oth
60e0: 65 72 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  er interpretatio
60f0: 6e 20 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72  n of the standar
6100: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74  d.</p>..<p>^If t
6110: 68 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 4e  he optional IF N
6120: 4f 54 20 45 58 49 53 54 53 20 63 6c 61 75 73 65  OT EXISTS clause
6130: 20 69 73 20 70 72 65 73 65 6e 74 20 61 6e 64 20   is present and 
6140: 61 6e 6f 74 68 65 72 20 69 6e 64 65 78 0a 77 69  another index.wi
6150: 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  th the same name
6160: 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 2c   already exists,
6170: 20 74 68 65 6e 20 74 68 69 73 20 63 6f 6d 6d 61   then this comma
6180: 6e 64 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d  nd becomes a no-
6190: 6f 70 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 64  op.</p>..<p>^Ind
61a0: 65 78 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64  exes are removed
61b0: 20 77 69 74 68 20 74 68 65 20 5b 44 52 4f 50 20   with the [DROP 
61c0: 49 4e 44 45 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c  INDEX] command.<
61d0: 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  /p>...<tcl>.####
61e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
61f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6200: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6220: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
6230: 6f 6e 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45  on {CREATE TABLE
6240: 7d 20 7b 63 72 65 61 74 65 74 61 62 6c 65 7d 20  } {createtable} 
6250: 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45 7d 7d  {{CREATE TABLE}}
6260: 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
6270: 63 72 65 61 74 65 2d 74 61 62 6c 65 2d 73 74 6d  create-table-stm
6280: 74 20 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61  t 1.BubbleDiagra
6290: 6d 20 63 6f 6c 75 6d 6e 2d 64 65 66 0a 42 75 62  m column-def.Bub
62a0: 62 6c 65 44 69 61 67 72 61 6d 20 74 79 70 65 2d  bleDiagram type-
62b0: 6e 61 6d 65 0a 42 75 62 62 6c 65 44 69 61 67 72  name.BubbleDiagr
62c0: 61 6d 20 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74 72  am column-constr
62d0: 61 69 6e 74 0a 42 75 62 62 6c 65 44 69 61 67 72  aint.BubbleDiagr
62e0: 61 6d 20 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61  am table-constra
62f0: 69 6e 74 0a 42 75 62 62 6c 65 44 69 61 67 72 61  int.BubbleDiagra
6300: 6d 20 66 6f 72 65 69 67 6e 2d 6b 65 79 2d 63 6c  m foreign-key-cl
6310: 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ause.</tcl>..<p>
6320: 5e 41 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  ^A CREATE TABLE 
6330: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 62 61 73  statement is bas
6340: 69 63 61 6c 6c 79 20 74 68 65 20 6b 65 79 77 6f  ically the keywo
6350: 72 64 73 20 22 43 52 45 41 54 45 20 54 41 42 4c  rds "CREATE TABL
6360: 45 22 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74  E".followed by t
6370: 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 6e 65 77  he name of a new
6380: 20 74 61 62 6c 65 20 61 6e 64 20 61 20 70 61 72   table and a par
6390: 65 6e 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20  enthesized list 
63a0: 6f 66 20 63 6f 6c 75 6d 6e 0a 64 65 66 69 6e 69  of column.defini
63b0: 74 69 6f 6e 73 20 61 6e 64 20 63 6f 6e 73 74 72  tions and constr
63c0: 61 69 6e 74 73 2e 20 20 0a 5e 54 61 62 6c 65 73  aints.  .^Tables
63d0: 20 6e 61 6d 65 73 20 74 68 61 74 20 62 65 67 69   names that begi
63e0: 6e 20 77 69 74 68 20 22 3c 62 3e 73 71 6c 69 74  n with "<b>sqlit
63f0: 65 5f 3c 2f 62 3e 22 20 61 72 65 20 72 65 73 65  e_</b>" are rese
6400: 72 76 65 64 0a 66 6f 72 20 75 73 65 20 62 79 20  rved.for use by 
6410: 53 51 4c 69 74 65 20 69 74 73 65 6c 66 20 61 6e  SQLite itself an
6420: 64 20 63 61 6e 6e 6f 74 20 6e 6f 72 6d 61 6c 6c  d cannot normall
6430: 79 0a 61 70 70 65 61 72 20 69 6e 20 61 20 43 52  y.appear in a CR
6440: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
6450: 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  ment.</p>..<tcl>
6460: 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 74 61 62  hd_fragment {tab
6470: 6c 65 63 6f 6c 64 65 66 7d 20 7b 63 6f 6c 75 6d  lecoldef} {colum
6480: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 7d 20 7b 63  n definition} {c
6490: 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e  olumn definition
64a0: 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 45 61 63  s}</tcl>.<p>^Eac
64b0: 68 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74  h column definit
64c0: 69 6f 6e 20 69 73 20 74 68 65 20 6e 61 6d 65 20  ion is the name 
64d0: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 70  of the column op
64e0: 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65  tionally followe
64f0: 64 20 62 79 20 74 68 65 0a 5b 64 61 74 61 74 79  d by the.[dataty
6500: 70 65 5d 20 66 6f 72 20 74 68 61 74 20 63 6f 6c  pe] for that col
6510: 75 6d 6e 2c 20 74 68 65 6e 20 6f 6e 65 20 6f 72  umn, then one or
6520: 20 6d 6f 72 65 20 6f 70 74 69 6f 6e 61 6c 20 63   more optional c
6530: 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72 61 69 6e 74  olumn constraint
6540: 73 2e 0a 5e 53 51 4c 69 74 65 20 75 73 65 73 20  s..^SQLite uses 
6550: 5b 64 79 6e 61 6d 69 63 20 74 79 70 69 6e 67 5d  [dynamic typing]
6560: 3b 20 0a 74 68 65 20 64 61 74 61 74 79 70 65 20  ; .the datatype 
6570: 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 64  for the column d
6580: 6f 65 73 20 6e 6f 74 20 72 65 73 74 72 69 63 74  oes not restrict
6590: 20 77 68 61 74 20 64 61 74 61 20 6d 61 79 20 62   what data may b
65a0: 65 20 70 75 74 0a 69 6e 20 74 68 61 74 20 63 6f  e put.in that co
65b0: 6c 75 6d 6e 2e 0a 5e 54 68 65 20 55 4e 49 51 55  lumn..^The UNIQU
65c0: 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 61 75  E constraint cau
65d0: 73 65 73 20 61 6e 20 75 6e 69 71 75 65 20 69 6e  ses an unique in
65e0: 64 65 78 20 74 6f 20 62 65 20 63 72 65 61 74 65  dex to be create
65f0: 64 20 6f 6e 20 74 68 65 20 73 70 65 63 69 66 69  d on the specifi
6600: 65 64 0a 63 6f 6c 75 6d 6e 73 2e 20 20 5e 41 6c  ed.columns.  ^Al
6610: 6c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72  l NULL values ar
6620: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 64 69 66  e considered dif
6630: 66 65 72 65 6e 74 20 66 72 6f 6d 20 65 61 63 68  ferent from each
6640: 20 6f 74 68 65 72 20 61 6e 64 20 66 72 6f 6d 0a   other and from.
6650: 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73  all other values
6660: 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65   for the purpose
6670: 20 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 20   of determining 
6680: 75 6e 69 71 75 65 6e 65 73 73 2c 20 68 65 6e 63  uniqueness, henc
6690: 65 20 61 20 55 4e 49 51 55 45 0a 63 6f 6c 75 6d  e a UNIQUE.colum
66a0: 6e 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 6d 75  n may contain mu
66b0: 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73 20 77  ltiple entries w
66c0: 69 74 68 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ith the value of
66d0: 20 4e 55 4c 4c 2e 0a 5e 54 68 65 20 43 4f 4c 4c   NULL..^The COLL
66e0: 41 54 45 20 63 6c 61 75 73 65 20 73 70 65 63 69  ATE clause speci
66f0: 66 69 65 73 20 77 68 61 74 20 74 65 78 74 20 0a  fies what text .
6700: 5b 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74  [collating funct
6710: 69 6f 6e 5d 20 74 6f 20 75 73 65 20 77 68 65 6e  ion] to use when
6720: 20 63 6f 6d 70 61 72 69 6e 67 20 74 65 78 74 20   comparing text 
6730: 65 6e 74 72 69 65 73 20 66 6f 72 20 74 68 65 20  entries for the 
6740: 63 6f 6c 75 6d 6e 2e 20 20 0a 5e 54 68 65 20 62  column.  .^The b
6750: 75 69 6c 74 2d 69 6e 20 5b 42 49 4e 41 52 59 5d  uilt-in [BINARY]
6760: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
6770: 69 6f 6e 20 69 73 20 75 73 65 64 20 62 79 20 64  ion is used by d
6780: 65 66 61 75 6c 74 2e 0a 3c 70 3e 0a 5e 54 68 65  efault..<p>.^The
6790: 20 44 45 46 41 55 4c 54 20 63 6f 6e 73 74 72 61   DEFAULT constra
67a0: 69 6e 74 20 73 70 65 63 69 66 69 65 73 20 61 20  int specifies a 
67b0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 74 6f  default value to
67c0: 20 75 73 65 20 77 68 65 6e 20 64 6f 69 6e 67 20   use when doing 
67d0: 61 6e 20 5b 49 4e 53 45 52 54 5d 2e 0a 5e 54 68  an [INSERT]..^Th
67e0: 65 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 4e  e value may be N
67f0: 55 4c 4c 2c 20 61 20 73 74 72 69 6e 67 20 63 6f  ULL, a string co
6800: 6e 73 74 61 6e 74 2c 20 61 20 6e 75 6d 62 65 72  nstant, a number
6810: 2c 20 6f 72 20 61 20 63 6f 6e 73 74 61 6e 74 20  , or a constant 
6820: 65 78 70 72 65 73 73 69 6f 6e 0a 65 6e 63 6c 6f  expression.enclo
6830: 73 65 64 20 69 6e 20 70 61 72 65 6e 74 68 65 73  sed in parenthes
6840: 65 73 2e 0a 5e 54 68 65 20 64 65 66 61 75 6c 74  es..^The default
6850: 20 76 61 6c 75 65 20 6d 61 79 20 61 6c 73 6f 20   value may also 
6860: 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 73 70  be one of the sp
6870: 65 63 69 61 6c 20 63 61 73 65 2d 69 6e 64 65 70  ecial case-indep
6880: 65 6e 64 65 6e 74 0a 6b 65 79 77 6f 72 64 73 20  endent.keywords 
6890: 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55  CURRENT_TIME, CU
68a0: 52 52 45 4e 54 5f 44 41 54 45 20 6f 72 20 43 55  RRENT_DATE or CU
68b0: 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2e  RRENT_TIMESTAMP.
68c0: 20 20 5e 49 66 20 74 68 65 20 76 61 6c 75 65 20    ^If the value 
68d0: 69 73 0a 4e 55 4c 4c 2c 20 61 20 73 74 72 69 6e  is.NULL, a strin
68e0: 67 20 63 6f 6e 73 74 61 6e 74 20 6f 72 20 6e 75  g constant or nu
68f0: 6d 62 65 72 2c 20 69 74 20 69 73 20 69 6e 73 65  mber, it is inse
6900: 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 63 6f  rted into the co
6910: 6c 75 6d 6e 0a 77 68 65 6e 65 76 65 72 20 61 6e  lumn.whenever an
6920: 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
6930: 74 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20  t that does not 
6940: 73 70 65 63 69 66 79 20 61 20 76 61 6c 75 65 20  specify a value 
6950: 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69  for the column i
6960: 73 0a 65 78 65 63 75 74 65 64 2e 20 5e 49 66 20  s.executed. ^If 
6970: 74 68 65 20 76 61 6c 75 65 20 69 73 20 43 55 52  the value is CUR
6980: 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45  RENT_TIME, CURRE
6990: 4e 54 5f 44 41 54 45 20 6f 72 20 43 55 52 52 45  NT_DATE or CURRE
69a0: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 74 68  NT_TIMESTAMP, th
69b0: 65 6e 0a 74 68 65 20 63 75 72 72 65 6e 74 20 55  en.the current U
69c0: 54 43 20 64 61 74 65 20 61 6e 64 2f 6f 72 20 74  TC date and/or t
69d0: 69 6d 65 20 69 73 20 69 6e 73 65 72 74 65 64 20  ime is inserted 
69e0: 69 6e 74 6f 20 74 68 65 20 63 6f 6c 75 6d 6e 73  into the columns
69f0: 2e 20 5e 46 6f 72 0a 43 55 52 52 45 4e 54 5f 54  . ^For.CURRENT_T
6a00: 49 4d 45 2c 20 74 68 65 20 66 6f 72 6d 61 74 20  IME, the format 
6a10: 69 73 20 48 48 3a 4d 4d 3a 53 53 2e 20 5e 46 6f  is HH:MM:SS. ^Fo
6a20: 72 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2c 20  r CURRENT_DATE, 
6a30: 59 59 59 59 2d 4d 4d 2d 44 44 2e 0a 5e 54 68 65  YYYY-MM-DD..^The
6a40: 20 66 6f 72 6d 61 74 20 66 6f 72 20 43 55 52 52   format for CURR
6a50: 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20 69 73  ENT_TIMESTAMP is
6a60: 20 22 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a   "YYYY-MM-DD HH:
6a70: 4d 4d 3a 53 53 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70  MM:SS"..</p>..<p
6a80: 3e 5e 28 54 68 65 20 50 52 49 4d 41 52 59 20 4b  >^(The PRIMARY K
6a90: 45 59 20 61 74 74 72 69 62 75 74 65 20 6e 6f 72  EY attribute nor
6aa0: 6d 61 6c 6c 79 20 63 72 65 61 74 65 73 20 61 20  mally creates a 
6ab0: 55 4e 49 51 55 45 20 69 6e 64 65 78 20 6f 6e 0a  UNIQUE index on.
6ac0: 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 63 6f  the column or co
6ad0: 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65 20 73  lumns that are s
6ae0: 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20  pecified as the 
6af0: 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 54 68  PRIMARY KEY.  Th
6b00: 65 20 6f 6e 6c 79 0a 65 78 63 65 70 74 69 6f 6e  e only.exception
6b10: 20 74 6f 20 74 68 69 73 20 62 65 68 61 76 69 6f   to this behavio
6b20: 72 20 69 73 20 73 70 65 63 69 61 6c 20 5b 49 4e  r is special [IN
6b30: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
6b40: 59 5d 20 63 6f 6c 75 6d 6e 2c 0a 64 65 73 63 72  Y] column,.descr
6b50: 69 62 65 64 20 62 65 6c 6f 77 2e 29 5e 0a 5e 28  ibed below.)^.^(
6b60: 41 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65  According to the
6b70: 20 53 51 4c 20 73 74 61 6e 64 61 72 64 2c 20 50   SQL standard, P
6b80: 52 49 4d 41 52 59 20 4b 45 59 20 73 68 6f 75 6c  RIMARY KEY shoul
6b90: 64 20 69 6d 70 6c 79 20 4e 4f 54 20 4e 55 4c 4c  d imply NOT NULL
6ba0: 2e 0a 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c  ..Unfortunately,
6bb0: 20 64 75 65 20 74 6f 20 61 20 6c 6f 6e 67 2d 73   due to a long-s
6bc0: 74 61 6e 64 69 6e 67 20 63 6f 64 69 6e 67 20 6f  tanding coding o
6bd0: 76 65 72 73 69 67 68 74 2c 20 74 68 69 73 20 69  versight, this i
6be0: 73 20 6e 6f 74 20 0a 74 68 65 20 63 61 73 65 20  s not .the case 
6bf0: 69 6e 20 53 51 4c 69 74 65 2e 20 20 53 51 4c 69  in SQLite.  SQLi
6c00: 74 65 20 61 6c 6c 6f 77 73 20 4e 55 4c 4c 20 76  te allows NULL v
6c10: 61 6c 75 65 73 0a 69 6e 20 61 20 50 52 49 4d 41  alues.in a PRIMA
6c20: 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 2e 29 5e  RY KEY column.)^
6c30: 20 20 57 65 20 63 6f 75 6c 64 20 63 68 61 6e 67    We could chang
6c40: 65 20 53 51 4c 69 74 65 20 74 6f 20 63 6f 6e 66  e SQLite to conf
6c50: 6f 72 6d 20 74 6f 20 74 68 65 0a 73 74 61 6e 64  orm to the.stand
6c60: 61 72 64 20 28 61 6e 64 20 77 65 20 6d 69 67 68  ard (and we migh
6c70: 74 20 64 6f 20 73 6f 20 69 6e 20 74 68 65 20 66  t do so in the f
6c80: 75 74 75 72 65 29 2c 20 62 75 74 20 62 79 20 74  uture), but by t
6c90: 68 65 20 74 69 6d 65 20 74 68 65 0a 6f 76 65 72  he time the.over
6ca0: 73 69 67 68 74 20 77 61 73 20 64 69 73 63 6f 76  sight was discov
6cb0: 65 72 65 64 2c 20 53 51 4c 69 74 65 20 77 61 73  ered, SQLite was
6cc0: 20 69 6e 20 73 75 63 68 20 77 69 64 65 20 75 73   in such wide us
6cd0: 65 20 74 68 61 74 20 77 65 20 66 65 61 72 65 64  e that we feared
6ce0: 0a 62 72 65 61 6b 69 6e 67 20 6c 65 67 61 63 79  .breaking legacy
6cf0: 20 63 6f 64 65 20 69 66 20 77 65 20 66 69 78 65   code if we fixe
6d00: 64 20 74 68 65 20 70 72 6f 62 6c 65 6d 2e 20 20  d the problem.  
6d10: 53 6f 20 66 6f 72 20 6e 6f 77 20 77 65 20 68 61  So for now we ha
6d20: 76 65 0a 63 68 6f 73 65 6e 20 74 6f 20 63 6f 6e  ve.chosen to con
6d30: 74 69 6e 75 65 20 61 6c 6c 6f 77 69 6e 67 20 4e  tinue allowing N
6d40: 55 4c 4c 73 20 69 6e 20 50 52 49 4d 41 52 59 20  ULLs in PRIMARY 
6d50: 4b 45 59 20 63 6f 6c 75 6d 6e 73 2e 0a 44 65 76  KEY columns..Dev
6d60: 65 6c 6f 70 65 72 73 20 73 68 6f 75 6c 64 20 62  elopers should b
6d70: 65 20 61 77 61 72 65 2c 20 68 6f 77 65 76 65 72  e aware, however
6d80: 2c 20 74 68 61 74 20 77 65 20 6d 61 79 20 63 68  , that we may ch
6d90: 61 6e 67 65 20 53 51 4c 69 74 65 20 74 6f 0a 63  ange SQLite to.c
6da0: 6f 6e 66 6f 72 6d 20 74 6f 20 74 68 65 20 53 51  onform to the SQ
6db0: 4c 20 73 74 61 6e 64 61 72 64 20 69 6e 20 66 75  L standard in fu
6dc0: 74 75 72 65 20 61 6e 64 20 73 68 6f 75 6c 64 20  ture and should 
6dd0: 64 65 73 69 67 6e 20 6e 65 77 20 70 72 6f 67 72  design new progr
6de0: 61 6d 73 0a 61 63 63 6f 72 64 69 6e 67 6c 79 2e  ams.accordingly.
6df0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 53 51 4c 69 74 65  </p>..<p>^SQLite
6e00: 20 75 73 65 73 20 5b 64 79 6e 61 6d 69 63 20 74   uses [dynamic t
6e10: 79 70 69 6e 67 5d 20 69 6e 73 74 65 61 64 20 6f  yping] instead o
6e20: 66 20 73 74 61 74 69 63 20 74 79 70 69 6e 67 2e  f static typing.
6e30: 20 20 5e 45 78 63 65 70 74 20 66 6f 72 20 74 68    ^Except for th
6e40: 65 0a 73 70 65 63 69 61 6c 20 63 61 73 65 20 6f  e.special case o
6e50: 66 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  f [INTEGER PRIMA
6e60: 52 59 20 4b 45 59 5d 2c 20 53 51 4c 69 74 65 20  RY KEY], SQLite 
6e70: 77 69 6c 6c 20 61 6c 6c 6f 77 20 76 61 6c 75 65  will allow value
6e80: 73 20 6f 66 20 61 6e 79 0a 74 79 70 65 20 74 6f  s of any.type to
6e90: 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 6e   be stored in an
6ea0: 79 20 63 6f 6c 75 6d 6e 20 72 65 67 61 72 64 6c  y column regardl
6eb0: 65 73 73 20 6f 66 20 74 68 65 20 64 65 63 6c 61  ess of the decla
6ec0: 72 65 64 20 64 61 74 61 74 79 70 65 20 6f 66 0a  red datatype of.
6ed0: 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 20 20 5e 54  that column.  ^T
6ee0: 68 65 20 64 65 63 6c 61 72 65 64 20 64 61 74 61  he declared data
6ef0: 74 79 70 65 20 69 73 20 61 20 5b 61 66 66 69 6e  type is a [affin
6f00: 69 74 79 20 7c 20 74 79 70 65 20 61 66 66 69 6e  ity | type affin
6f10: 69 74 79 5d 20 74 68 61 74 0a 53 51 4c 69 74 65  ity] that.SQLite
6f20: 20 61 74 74 65 6d 70 74 73 20 74 6f 20 63 6f 6d   attempts to com
6f30: 70 6c 79 20 77 69 74 68 2c 20 62 75 74 20 74 68  ply with, but th
6f40: 65 20 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c  e operation will
6f50: 20 70 72 6f 63 65 65 64 20 65 76 65 6e 20 69 66   proceed even if
6f60: 0a 63 6f 6d 70 6c 69 61 6e 63 65 20 69 73 20 6e  .compliance is n
6f70: 6f 74 20 70 6f 73 73 69 62 6c 65 2e 3c 2f 70 3e  ot possible.</p>
6f80: 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 22 54 45  ..<p>^If the "TE
6f90: 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41 52  MP" or "TEMPORAR
6fa0: 59 22 20 6b 65 79 77 6f 72 64 20 6f 63 63 75 72  Y" keyword occur
6fb0: 73 20 69 6e 20 62 65 74 77 65 65 6e 20 22 43 52  s in between "CR
6fc0: 45 41 54 45 22 0a 61 6e 64 20 22 54 41 42 4c 45  EATE".and "TABLE
6fd0: 22 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  " then the table
6fe0: 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64   that is created
6ff0: 20 69 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c 65   is only visible
7000: 0a 77 69 74 68 69 6e 20 74 68 61 74 20 73 61 6d  .within that sam
7010: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
7020: 63 74 69 6f 6e 0a 61 6e 64 20 69 73 20 61 75 74  ction.and is aut
7030: 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74  omatically delet
7040: 65 64 20 77 68 65 6e 0a 74 68 65 20 64 61 74 61  ed when.the data
7050: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
7060: 69 73 20 63 6c 6f 73 65 64 2e 20 20 5e 41 6e 79  is closed.  ^Any
7070: 20 69 6e 64 69 63 65 73 20 63 72 65 61 74 65 64   indices created
7080: 20 6f 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20   on a temporary 
7090: 74 61 62 6c 65 0a 61 72 65 20 61 6c 73 6f 20 74  table.are also t
70a0: 65 6d 70 6f 72 61 72 79 2e 20 20 5e 54 65 6d 70  emporary.  ^Temp
70b0: 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64  orary tables and
70c0: 20 69 6e 64 69 63 65 73 20 61 72 65 20 73 74 6f   indices are sto
70d0: 72 65 64 20 69 6e 20 61 0a 73 65 70 61 72 61 74  red in a.separat
70e0: 65 20 66 69 6c 65 20 64 69 73 74 69 6e 63 74 20  e file distinct 
70f0: 66 72 6f 6d 20 74 68 65 20 6d 61 69 6e 20 64 61  from the main da
7100: 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e  tabase file.</p>
7110: 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 26 6c 74 3b  ..<p> ^If a &lt;
7120: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74  database-name&gt
7130: 3b 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  ; is specified, 
7140: 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69  then the table i
7150: 73 20 63 72 65 61 74 65 64 20 69 6e 20 0a 74 68  s created in .th
7160: 65 20 6e 61 6d 65 64 20 64 61 74 61 62 61 73 65  e named database
7170: 2e 20 5e 49 74 20 69 73 20 61 6e 20 65 72 72 6f  . ^It is an erro
7180: 72 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f 74  r to specify bot
7190: 68 20 61 20 26 6c 74 3b 64 61 74 61 62 61 73 65  h a &lt;database
71a0: 2d 6e 61 6d 65 26 67 74 3b 0a 61 6e 64 20 74 68  -name&gt;.and th
71b0: 65 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 2c 20  e TEMP keyword, 
71c0: 75 6e 6c 65 73 73 20 74 68 65 20 26 6c 74 3b 64  unless the &lt;d
71d0: 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b  atabase-name&gt;
71e0: 20 69 73 20 22 74 65 6d 70 22 2e 20 5e 49 66 20   is "temp". ^If 
71f0: 6e 6f 0a 64 61 74 61 62 61 73 65 20 6e 61 6d 65  no.database name
7200: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 6e   is specified an
7210: 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f  d the TEMP keywo
7220: 72 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e  rd is not presen
7230: 74 20 74 68 65 6e 0a 74 68 65 20 74 61 62 6c 65  t then.the table
7240: 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20 74   is created in t
7250: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
7260: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f  .</p>..<p>^The o
7270: 70 74 69 6f 6e 61 6c 20 5b 63 6f 6e 66 6c 69 63  ptional [conflic
7280: 74 20 63 6c 61 75 73 65 5d 20 66 6f 6c 6c 6f 77  t clause] follow
7290: 69 6e 67 20 65 61 63 68 20 63 6f 6e 73 74 72 61  ing each constra
72a0: 69 6e 74 0a 61 6c 6c 6f 77 73 20 74 68 65 20 73  int.allows the s
72b0: 70 65 63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20  pecification of 
72c0: 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20 64  an alternative d
72d0: 65 66 61 75 6c 74 0a 63 6f 6e 73 74 72 61 69 6e  efault.constrain
72e0: 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  t conflict resol
72f0: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
7300: 66 6f 72 20 74 68 61 74 20 63 6f 6e 73 74 72 61  for that constra
7310: 69 6e 74 2e 0a 5e 49 66 20 6e 6f 20 63 6f 6e 66  int..^If no conf
7320: 6c 69 63 74 20 63 6c 61 75 73 65 20 69 73 20 73  lict clause is s
7330: 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 41 42  pecified, the AB
7340: 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ORT algorithm is
7350: 20 75 73 65 64 2e 0a 5e 44 69 66 66 65 72 65 6e   used..^Differen
7360: 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 69  t constraints wi
7370: 74 68 69 6e 20 74 68 65 20 73 61 6d 65 0a 74 61  thin the same.ta
7380: 62 6c 65 20 6d 61 79 20 68 61 76 65 20 64 69 66  ble may have dif
7390: 66 65 72 65 6e 74 20 63 6f 6e 66 6c 69 63 74 20  ferent conflict 
73a0: 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
73b0: 69 74 68 6d 73 2e 0a 5e 49 66 20 61 6e 20 5b 49  ithms..^If an [I
73c0: 4e 53 45 52 54 5d 20 6f 72 20 5b 55 50 44 41 54  NSERT] or [UPDAT
73d0: 45 5d 20 73 74 61 74 65 6d 65 6e 74 20 73 70 65  E] statement spe
73e0: 63 69 66 69 65 73 20 61 20 63 6f 6e 66 6c 69 63  cifies a conflic
73f0: 74 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t.resolution alg
7400: 6f 72 69 74 68 6d 2c 20 74 68 65 6e 20 74 68 65  orithm, then the
7410: 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69   algorithm speci
7420: 66 69 65 64 20 6f 6e 20 74 68 65 20 49 4e 53 45  fied on the INSE
7430: 52 54 20 6f 72 0a 55 50 44 41 54 45 20 73 74 61  RT or.UPDATE sta
7440: 74 65 6d 65 6e 74 20 6f 76 65 72 72 69 64 65 73  tement overrides
7450: 20 74 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 73   the algorithm s
7460: 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 20  pecified in the 
7470: 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74  .CREATE TABLE st
7480: 61 74 65 6d 65 6e 74 2e 0a 53 65 65 20 74 68 65  atement..See the
7490: 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 0a   section titled.
74a0: 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f  [ON CONFLICT] fo
74b0: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
74c0: 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c  ormation.</p>..<
74d0: 70 3e 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  p>CHECK constrai
74e0: 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65  nts are supporte
74f0: 64 20 61 73 20 6f 66 20 5b 76 65 72 73 69 6f 6e  d as of [version
7500: 20 33 2e 33 2e 30 5d 2e 20 20 50 72 69 6f 72 0a   3.3.0].  Prior.
7510: 74 6f 20 76 65 72 73 69 6f 6e 20 33 2e 33 2e 30  to version 3.3.0
7520: 2c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  , CHECK constrai
7530: 6e 74 73 20 77 65 72 65 20 70 61 72 73 65 64 20  nts were parsed 
7540: 62 75 74 20 6e 6f 74 20 65 6e 66 6f 72 63 65 64  but not enforced
7550: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6e  .</p>..<p>^The n
7560: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
7570: 20 69 6e 20 61 20 74 61 62 6c 65 20 69 73 20 6c   in a table is l
7580: 69 6d 69 74 65 64 20 62 79 20 74 68 65 0a 5b 53  imited by the.[S
7590: 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e  QLITE_MAX_COLUMN
75a0: 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 70  ] compile-time p
75b0: 61 72 61 6d 65 74 65 72 2e 0a 5e 41 20 73 69 6e  arameter..^A sin
75c0: 67 6c 65 20 72 6f 77 20 6f 66 20 61 20 74 61 62  gle row of a tab
75d0: 6c 65 20 63 61 6e 6e 6f 74 20 73 74 6f 72 65 20  le cannot store 
75e0: 6d 6f 72 65 20 74 68 61 6e 0a 5b 53 51 4c 49 54  more than.[SQLIT
75f0: 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 5d 20 62 79  E_MAX_LENGTH] by
7600: 74 65 73 20 6f 66 20 64 61 74 61 2e 0a 5e 42 6f  tes of data..^Bo
7610: 74 68 20 6f 66 20 74 68 65 73 65 20 6c 69 6d 69  th of these limi
7620: 74 73 20 63 61 6e 20 62 65 20 6c 6f 77 65 72 65  ts can be lowere
7630: 64 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73 69  d at runtime usi
7640: 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f  ng the.[sqlite3_
7650: 6c 69 6d 69 74 28 29 5d 20 43 2f 43 2b 2b 20 69  limit()] C/C++ i
7660: 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 0a  nterface.</p>...
7670: 3c 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 54  <p>^The CREATE T
7680: 41 42 4c 45 20 41 53 20 66 6f 72 6d 20 64 65 66  ABLE AS form def
7690: 69 6e 65 73 20 74 68 65 20 74 61 62 6c 65 20 74  ines the table t
76a0: 6f 20 62 65 0a 74 68 65 20 72 65 73 75 6c 74 20  o be.the result 
76b0: 73 65 74 20 6f 66 20 61 20 71 75 65 72 79 2e 20  set of a query. 
76c0: 20 5e 54 68 65 20 6e 61 6d 65 73 20 6f 66 20 74   ^The names of t
76d0: 68 65 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73  he table columns
76e0: 20 61 72 65 0a 74 68 65 20 6e 61 6d 65 73 20 6f   are.the names o
76f0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  f the columns in
7700: 20 74 68 65 20 72 65 73 75 6c 74 2e 3c 2f 70 3e   the result.</p>
7710: 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70 74  ..<p>^If the opt
7720: 69 6f 6e 61 6c 20 49 46 20 4e 4f 54 20 45 58 49  ional IF NOT EXI
7730: 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70 72  STS clause is pr
7740: 65 73 65 6e 74 20 61 6e 64 20 61 6e 6f 74 68 65  esent and anothe
7750: 72 20 74 61 62 6c 65 0a 77 69 74 68 20 74 68 65  r table.with the
7760: 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72 65 61   same name alrea
7770: 64 79 20 65 78 69 73 74 73 2c 20 74 68 65 6e 20  dy exists, then 
7780: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 62 65 63  this command bec
7790: 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 3c 2f 70  omes a no-op.</p
77a0: 3e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73 20 61 72  >..<p>^Tables ar
77b0: 65 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20  e removed using 
77c0: 74 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d  the [DROP TABLE]
77d0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 3c 2f 70   statement.  </p
77e0: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
77f0: 65 6e 74 20 72 6f 77 69 64 20 7b 49 4e 54 45 47  ent rowid {INTEG
7800: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 7d 20  ER PRIMARY KEY} 
7810: 52 4f 57 49 44 20 72 6f 77 69 64 3c 2f 74 63 6c  ROWID rowid</tcl
7820: 3e 0a 3c 68 33 3e 52 4f 57 49 44 73 20 61 6e 64  >.<h3>ROWIDs and
7830: 20 74 68 65 20 49 4e 54 45 47 45 52 20 50 52 49   the INTEGER PRI
7840: 4d 41 52 59 20 4b 45 59 3c 2f 68 33 3e 0a 0a 3c  MARY KEY</h3>..<
7850: 70 3e 5e 45 76 65 72 79 20 72 6f 77 20 6f 66 20  p>^Every row of 
7860: 65 76 65 72 79 20 53 51 4c 69 74 65 20 74 61 62  every SQLite tab
7870: 6c 65 20 68 61 73 20 61 20 36 34 2d 62 69 74 20  le has a 64-bit 
7880: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 6b  signed integer k
7890: 65 79 20 0a 74 68 61 74 20 69 73 20 75 6e 69 71  ey .that is uniq
78a0: 75 65 20 77 69 74 68 69 6e 20 74 68 65 20 73 61  ue within the sa
78b0: 6d 65 20 74 61 62 6c 65 2e 0a 54 68 69 73 20 69  me table..This i
78c0: 6e 74 65 67 65 72 20 69 73 20 75 73 75 61 6c 6c  nteger is usuall
78d0: 79 20 63 61 6c 6c 65 64 20 74 68 65 20 22 72 6f  y called the "ro
78e0: 77 69 64 22 2e 20 20 5e 54 68 65 20 72 6f 77 69  wid".  ^The rowi
78f0: 64 20 69 73 20 74 68 65 20 61 63 74 75 61 6c 20  d is the actual 
7900: 6b 65 79 20 75 73 65 64 0a 69 6e 20 74 68 65 20  key used.in the 
7910: 42 2d 54 72 65 65 20 74 68 61 74 20 69 6d 70 6c  B-Tree that impl
7920: 65 6d 65 6e 74 73 20 61 6e 20 53 51 4c 69 74 65  ements an SQLite
7930: 20 74 61 62 6c 65 2e 20 20 5e 52 6f 77 73 20 61   table.  ^Rows a
7940: 72 65 20 73 74 6f 72 65 64 20 69 6e 0a 72 6f 77  re stored in.row
7950: 69 64 20 6f 72 64 65 72 2e 20 5e 54 68 65 0a 72  id order. ^The.r
7960: 6f 77 69 64 20 76 61 6c 75 65 20 63 61 6e 20 62  owid value can b
7970: 65 20 61 63 63 65 73 73 65 64 20 75 73 69 6e 67  e accessed using
7980: 20 6f 6e 65 20 6f 66 20 74 68 65 20 73 70 65 63   one of the spec
7990: 69 61 6c 20 6e 61 6d 65 73 0a 22 3c 62 3e 52 4f  ial names."<b>RO
79a0: 57 49 44 3c 2f 62 3e 22 2c 20 22 3c 62 3e 4f 49  WID</b>", "<b>OI
79b0: 44 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c 62 3e 5f  D</b>", or "<b>_
79c0: 52 4f 57 49 44 5f 3c 2f 62 3e 22 20 61 73 73 75  ROWID_</b>" assu
79d0: 6d 69 6e 67 20 74 68 6f 73 65 20 6e 61 6d 65 73  ming those names
79e0: 0a 61 72 65 20 6e 6f 20 75 73 65 64 20 62 79 20  .are no used by 
79f0: 6f 74 68 65 72 20 63 6f 6e 76 65 6e 74 69 6f 6e  other convention
7a00: 61 6c 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73  al table columns
7a10: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 49 66 20 61  .</p>..<p>.^If a
7a20: 20 63 6f 6c 75 6d 6e 20 69 73 20 64 65 63 6c 61   column is decla
7a30: 72 65 64 20 74 6f 20 62 65 20 61 6e 20 49 4e 54  red to be an INT
7a40: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
7a50: 2c 20 74 68 65 6e 20 74 68 61 74 20 63 6f 6c 75  , then that colu
7a60: 6d 6e 20 69 73 20 6e 6f 74 0a 61 20 22 72 65 61  mn is not.a "rea
7a70: 6c 22 20 64 61 74 61 62 61 73 65 20 63 6f 6c 75  l" database colu
7a80: 6d 6e 20 62 75 74 20 69 6e 73 74 65 61 64 20 62  mn but instead b
7a90: 65 63 6f 6d 65 73 0a 61 6e 20 61 6c 69 61 73 20  ecomes.an alias 
7aa0: 66 6f 72 20 74 68 65 20 72 6f 77 69 64 2e 20 20  for the rowid.  
7ab0: 5e 55 6e 6c 69 6b 65 20 6e 6f 72 6d 61 6c 20 53  ^Unlike normal S
7ac0: 51 4c 69 74 65 20 63 6f 6c 75 6d 6e 73 2c 20 74  QLite columns, t
7ad0: 68 65 20 72 6f 77 69 64 0a 6d 75 73 74 20 62 65  he rowid.must be
7ae0: 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 74 65   a non-NULL inte
7af0: 67 65 72 20 76 61 6c 75 65 2e 20 20 5e 54 68 65  ger value.  ^The
7b00: 20 72 6f 77 69 64 20 69 73 20 6e 6f 74 20 61 62   rowid is not ab
7b10: 6c 65 20 74 6f 20 68 6f 6c 64 0a 66 6c 6f 61 74  le to hold.float
7b20: 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 73  ing point values
7b30: 2c 20 73 74 72 69 6e 67 73 2c 20 42 4c 4f 42 73  , strings, BLOBs
7b40: 2c 20 6f 72 20 4e 55 4c 4c 73 2e 3c 2f 70 3e 0a  , or NULLs.</p>.
7b50: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 69 3e  .<blockquote><i>
7b60: 0a 5e 41 6e 20 49 4e 54 45 47 45 52 20 50 52 49  .^An INTEGER PRI
7b70: 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 20  MARY KEY column 
7b80: 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  is an alias for 
7b90: 74 68 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65  the 64-bit signe
7ba0: 64 20 69 6e 74 65 67 65 72 20 72 6f 77 69 64 2e  d integer rowid.
7bb0: 0a 3c 2f 69 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  .</i></blockquot
7bc0: 65 3e 0a 0a 3c 70 3e 5e 41 6e 20 49 4e 54 45 47  e>..<p>^An INTEG
7bd0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  ER PRIMARY KEY c
7be0: 6f 6c 75 6d 6e 20 63 61 6e 20 61 6c 73 6f 20 69  olumn can also i
7bf0: 6e 63 6c 75 64 65 20 74 68 65 0a 6b 65 79 77 6f  nclude the.keywo
7c00: 72 64 20 5b 41 55 54 4f 49 4e 43 52 45 4d 45 4e  rd [AUTOINCREMEN
7c10: 54 5d 2e 20 20 5e 54 68 65 20 5b 41 55 54 4f 49  T].  ^The [AUTOI
7c20: 4e 43 52 45 4d 45 4e 54 5d 20 6b 65 79 77 6f 72  NCREMENT] keywor
7c30: 64 20 6d 6f 64 69 66 69 65 64 20 74 68 65 20 77  d modified the w
7c40: 61 79 0a 74 68 61 74 20 42 2d 54 72 65 65 20 6b  ay.that B-Tree k
7c50: 65 79 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69  eys are automati
7c60: 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 64 2e  cally generated.
7c70: 20 20 41 64 64 69 74 69 6f 6e 61 6c 20 64 65 74    Additional det
7c80: 61 69 6c 0a 6f 6e 20 61 75 74 6f 6d 61 74 69 63  ail.on automatic
7c90: 20 42 2d 54 72 65 65 20 6b 65 79 20 67 65 6e 65   B-Tree key gene
7ca0: 72 61 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61  ration is availa
7cb0: 62 6c 65 0a 3c 61 20 68 72 65 66 3d 22 61 75 74  ble.<a href="aut
7cc0: 6f 69 6e 63 2e 68 74 6d 6c 22 3e 73 65 70 61 72  oinc.html">separ
7cd0: 61 74 65 6c 79 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a  ately</a>.</p>..
7ce0: 3c 70 3e 5e 54 68 65 20 73 70 65 63 69 61 6c 20  <p>^The special 
7cf0: 62 65 68 61 76 69 6f 72 20 6f 66 20 49 4e 54 45  behavior of INTE
7d00: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 0a  GER PRIMARY KEY.
7d10: 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c  is only availabl
7d20: 65 20 69 66 20 74 68 65 20 74 79 70 65 20 6e 61  e if the type na
7d30: 6d 65 20 69 73 20 65 78 61 63 74 6c 79 20 22 49  me is exactly "I
7d40: 4e 54 45 47 45 52 22 20 69 6e 20 61 6e 79 20 6d  NTEGER" in any m
7d50: 69 78 74 75 72 65 0a 6f 66 20 75 70 70 65 72 20  ixture.of upper 
7d60: 61 6e 64 20 6c 6f 77 65 72 20 63 61 73 65 2e 20  and lower case. 
7d70: 20 5e 4f 74 68 65 72 20 69 6e 74 65 67 65 72 20   ^Other integer 
7d80: 74 79 70 65 20 6e 61 6d 65 73 0a 6c 69 6b 65 20  type names.like 
7d90: 22 49 4e 54 22 20 6f 72 20 22 42 49 47 49 4e 54  "INT" or "BIGINT
7da0: 22 20 6f 72 20 22 53 48 4f 52 54 20 49 4e 54 45  " or "SHORT INTE
7db0: 47 45 52 22 20 6f 72 20 22 55 4e 53 49 47 4e 45  GER" or "UNSIGNE
7dc0: 44 20 49 4e 54 45 47 45 52 22 0a 63 61 75 73 65  D INTEGER".cause
7dd0: 73 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  s the primary ke
7de0: 79 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 68 61  y column to beha
7df0: 76 65 20 61 73 20 61 6e 20 6f 72 64 69 6e 61 72  ve as an ordinar
7e00: 79 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 77  y table column w
7e10: 69 74 68 0a 69 6e 74 65 67 65 72 20 5b 61 66 66  ith.integer [aff
7e20: 69 6e 69 74 79 5d 20 61 6e 64 20 61 20 75 6e 69  inity] and a uni
7e30: 71 75 65 20 69 6e 64 65 78 2c 20 6e 6f 74 20 61  que index, not a
7e40: 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
7e50: 68 65 20 72 6f 77 69 64 2e 0a 5e 28 54 68 65 20  he rowid..^(The 
7e60: 73 70 65 63 69 61 6c 20 62 65 68 61 76 69 6f 72  special behavior
7e70: 20 6f 66 20 49 4e 54 45 47 45 52 20 50 52 49 4d   of INTEGER PRIM
7e80: 41 52 59 20 4b 45 59 20 69 73 20 6f 6e 6c 79 20  ARY KEY is only 
7e90: 61 76 61 69 6c 61 62 6c 65 20 69 66 20 74 68 65  available if the
7ea0: 0a 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20  .primary key is 
7eb0: 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
7ec0: 20 20 4d 75 6c 74 69 2d 63 6f 6c 75 6d 6e 20 70    Multi-column p
7ed0: 72 69 6d 61 72 79 20 6b 65 79 73 20 64 6f 20 6e  rimary keys do n
7ee0: 6f 74 20 62 65 63 6f 6d 65 0a 61 6c 69 61 73 65  ot become.aliase
7ef0: 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 2e  s for the rowid.
7f00: 29 5e 0a 5e 54 68 65 20 41 55 54 4f 49 4e 43 52  )^.^The AUTOINCR
7f10: 45 4d 45 4e 54 20 6b 65 79 77 6f 72 64 20 6f 6e  EMENT keyword on
7f20: 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 61 20 63 6f  ly works on a co
7f30: 6c 75 6d 6e 20 74 68 61 74 20 69 73 20 61 6e 20  lumn that is an 
7f40: 61 6c 69 61 73 0a 66 6f 72 20 74 68 65 20 72 6f  alias.for the ro
7f50: 77 69 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e 6f 74  wid.</p>..<p>Not
7f60: 65 20 74 68 61 74 20 73 65 61 72 63 68 65 73 20  e that searches 
7f70: 61 67 61 69 6e 73 74 20 61 20 72 6f 77 69 64 20  against a rowid 
7f80: 61 72 65 20 67 65 6e 65 72 61 6c 6c 79 20 61 62  are generally ab
7f90: 6f 75 74 20 74 77 69 63 65 20 61 73 0a 66 61 73  out twice as.fas
7fa0: 74 20 61 73 20 73 65 61 72 63 68 65 73 20 61 67  t as searches ag
7fb0: 61 69 6e 73 74 20 61 6e 79 20 6f 74 68 65 72 20  ainst any other 
7fc0: 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 69  PRIMARY KEY or i
7fd0: 6e 64 65 78 65 64 20 76 61 6c 75 65 2e 0a 3c 2f  ndexed value..</
7fe0: 70 3e 0a 0a 3c 70 3e 3c 62 3e 47 6f 6f 66 79 20  p>..<p><b>Goofy 
7ff0: 62 65 68 61 76 69 6f 72 20 61 6c 65 72 74 3a 3c  behavior alert:<
8000: 2f 62 3e 20 20 5e 28 54 68 65 20 66 6f 6c 6c 6f  /b>  ^(The follo
8010: 77 69 6e 67 20 74 68 72 65 65 20 64 65 63 6c 61  wing three decla
8020: 72 61 74 69 6f 6e 73 20 61 6c 6c 20 63 61 75 73  rations all caus
8030: 65 0a 74 68 65 20 63 6f 6c 75 6d 6e 20 22 78 22  e.the column "x"
8040: 20 62 65 20 61 6e 20 61 6c 69 61 73 20 66 6f 72   be an alias for
8050: 20 74 68 65 20 72 6f 77 69 64 3a 3c 2f 70 3e 0a   the rowid:</p>.
8060: 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52  .<ul>.<li><tt>CR
8070: 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49  EATE TABLE t(x I
8080: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
8090: 45 59 20 41 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f  EY ASC, y, z);</
80a0: 74 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41  tt>.<li><tt>CREA
80b0: 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54  TE TABLE t(x INT
80c0: 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d  EGER, y, z, PRIM
80d0: 41 52 59 20 4b 45 59 28 78 20 41 53 43 29 29 3b  ARY KEY(x ASC));
80e0: 3c 2f 74 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52  </tt>.<li><tt>CR
80f0: 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49  EATE TABLE t(x I
8100: 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52  NTEGER, y, z, PR
8110: 49 4d 41 52 59 20 4b 45 59 28 78 20 44 45 53 43  IMARY KEY(x DESC
8120: 29 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e  ));</tt>.</ul>)^
8130: 0a 0a 3c 70 3e 42 75 74 2c 20 69 6e 20 63 6f 6e  ..<p>But, in con
8140: 74 72 61 73 74 2c 20 5e 28 74 68 65 20 66 6f 6c  trast, ^(the fol
8150: 6c 6f 77 69 6e 67 20 64 65 63 6c 61 72 61 74 69  lowing declarati
8160: 6f 6e 20 64 6f 65 73 20 3c 75 3e 6e 6f 74 3c 2f  on does <u>not</
8170: 75 3e 20 72 65 73 75 6c 74 20 69 6e 0a 22 78 22  u> result in."x"
8180: 20 62 65 69 6e 67 20 61 6e 20 61 6c 69 61 73 20   being an alias 
8190: 66 6f 72 20 74 68 65 20 72 6f 77 69 64 3a 3c 2f  for the rowid:</
81a0: 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74  p>..<ul>.<li><tt
81b0: 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 28  >CREATE TABLE t(
81c0: 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  x INTEGER PRIMAR
81d0: 59 20 4b 45 59 20 44 45 53 43 2c 20 79 2c 20 7a  Y KEY DESC, y, z
81e0: 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a  );</tt>.</ul>)^.
81f0: 0a 3c 70 3e 54 68 69 73 20 61 73 79 6d 6d 65 74  .<p>This asymmet
8200: 72 69 63 61 6c 20 62 65 68 61 76 69 6f 72 20 69  rical behavior i
8210: 73 20 75 6e 66 6f 72 74 75 6e 61 74 65 20 61 6e  s unfortunate an
8220: 64 20 69 73 20 72 65 61 6c 6c 79 20 64 75 65 20  d is really due 
8230: 74 6f 20 61 20 62 75 67 0a 69 6e 20 74 68 65 20  to a bug.in the 
8240: 70 61 72 73 65 72 20 69 6e 20 65 61 72 6c 79 20  parser in early 
8250: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
8260: 74 65 2e 20 20 42 75 74 20 66 69 78 69 6e 67 20  te.  But fixing 
8270: 74 68 65 20 62 75 67 20 77 6f 75 6c 64 0a 72 65  the bug would.re
8280: 73 75 6c 74 20 69 6e 20 76 65 72 79 20 73 65 72  sult in very ser
8290: 69 6f 75 73 20 62 61 63 6b 77 61 72 64 73 20 69  ious backwards i
82a0: 6e 63 6f 6d 70 61 74 69 62 69 6c 69 74 69 65 73  ncompatibilities
82b0: 2e 20 20 54 68 65 20 53 51 4c 69 74 65 20 64 65  .  The SQLite de
82c0: 76 65 6c 6f 70 65 72 73 0a 66 65 65 6c 20 74 68  velopers.feel th
82d0: 61 74 20 67 6f 6f 66 79 20 62 65 68 61 76 69 6f  at goofy behavio
82e0: 72 20 69 6e 20 61 6e 20 63 6f 72 6e 65 72 20 63  r in an corner c
82f0: 61 73 65 20 69 73 20 66 61 72 20 62 65 74 74 65  ase is far bette
8300: 72 20 74 68 61 6e 0a 61 20 63 6f 6d 70 61 74 69  r than.a compati
8310: 62 69 6c 69 74 79 20 62 72 65 61 6b 2c 20 73 6f  bility break, so
8320: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 62 65   the original be
8330: 68 61 76 69 6f 72 20 69 73 20 72 65 74 61 69 6e  havior is retain
8340: 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  ed.</p>..<tcl>.#
8350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8370: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8380: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8390: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
83a0: 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 52  ction {CREATE TR
83b0: 49 47 47 45 52 7d 20 63 72 65 61 74 65 74 72 69  IGGER} createtri
83c0: 67 67 65 72 20 7b 7b 43 52 45 41 54 45 20 54 52  gger {{CREATE TR
83d0: 49 47 47 45 52 7d 7d 0a 0a 42 75 62 62 6c 65 44  IGGER}}..BubbleD
83e0: 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d 74 72  iagram create-tr
83f0: 69 67 67 65 72 2d 73 74 6d 74 20 31 0a 3c 2f 74  igger-stmt 1.</t
8400: 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45  cl>..<p>^The CRE
8410: 41 54 45 20 54 52 49 47 47 45 52 20 73 74 61 74  ATE TRIGGER stat
8420: 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f  ement is used to
8430: 20 61 64 64 20 74 72 69 67 67 65 72 73 20 74 6f   add triggers to
8440: 20 74 68 65 20 0a 64 61 74 61 62 61 73 65 20 73   the .database s
8450: 63 68 65 6d 61 2e 20 5e 54 72 69 67 67 65 72 73  chema. ^Triggers
8460: 20 61 72 65 20 64 61 74 61 62 61 73 65 20 6f 70   are database op
8470: 65 72 61 74 69 6f 6e 73 20 0a 74 68 61 74 20 61  erations .that a
8480: 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  re automatically
8490: 20 70 65 72 66 6f 72 6d 65 64 20 77 68 65 6e 20   performed when 
84a0: 61 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61  a specified data
84b0: 62 61 73 65 20 65 76 65 6e 74 0a 6f 63 63 75 72  base event.occur
84c0: 73 2e 20 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20  s.  </p>..<p>^A 
84d0: 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 73  trigger may be s
84e0: 70 65 63 69 66 69 65 64 20 74 6f 20 66 69 72 65  pecified to fire
84f0: 20 77 68 65 6e 65 76 65 72 20 61 20 5b 44 45 4c   whenever a [DEL
8500: 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 0a  ETE], [INSERT],.
8510: 6f 72 20 5b 55 50 44 41 54 45 5d 20 6f 66 20 61  or [UPDATE] of a
8520: 0a 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61  .particular data
8530: 62 61 73 65 20 74 61 62 6c 65 20 6f 63 63 75 72  base table occur
8540: 73 2c 20 6f 72 20 77 68 65 6e 65 76 65 72 20 61  s, or whenever a
8550: 6e 20 5b 55 50 44 41 54 45 5d 20 6f 63 63 75 72  n [UPDATE] occur
8560: 73 20 6f 6e 0a 6f 6e 20 6f 6e 65 20 6f 72 20 6d  s on.on one or m
8570: 6f 72 65 20 73 70 65 63 69 66 69 65 64 20 63 6f  ore specified co
8580: 6c 75 6d 6e 73 20 6f 66 20 61 20 74 61 62 6c 65  lumns of a table
8590: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 74 20 74 68  .</p>..<p>^At th
85a0: 69 73 20 74 69 6d 65 20 53 51 4c 69 74 65 20 73  is time SQLite s
85b0: 75 70 70 6f 72 74 73 20 6f 6e 6c 79 20 46 4f 52  upports only FOR
85c0: 20 45 41 43 48 20 52 4f 57 20 74 72 69 67 67 65   EACH ROW trigge
85d0: 72 73 2c 20 6e 6f 74 20 46 4f 52 20 45 41 43 48  rs, not FOR EACH
85e0: 0a 53 54 41 54 45 4d 45 4e 54 20 74 72 69 67 67  .STATEMENT trigg
85f0: 65 72 73 2e 20 5e 48 65 6e 63 65 20 65 78 70 6c  ers. ^Hence expl
8600: 69 63 69 74 6c 79 20 73 70 65 63 69 66 79 69 6e  icitly specifyin
8610: 67 20 46 4f 52 20 45 41 43 48 20 52 4f 57 20 69  g FOR EACH ROW i
8620: 73 20 6f 70 74 69 6f 6e 61 6c 2e 0a 5e 46 4f 52  s optional..^FOR
8630: 20 45 41 43 48 20 52 4f 57 20 69 6d 70 6c 69 65   EACH ROW implie
8640: 73 20 74 68 61 74 20 74 68 65 20 53 51 4c 20 73  s that the SQL s
8650: 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66  tatements specif
8660: 69 65 64 20 69 6e 20 74 68 65 20 74 72 69 67 67  ied in the trigg
8670: 65 72 0a 6d 61 79 20 62 65 20 65 78 65 63 75 74  er.may be execut
8680: 65 64 20 28 64 65 70 65 6e 64 69 6e 67 20 6f 6e  ed (depending on
8690: 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   the WHEN clause
86a0: 29 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62  ) for each datab
86b0: 61 73 65 20 72 6f 77 20 62 65 69 6e 67 0a 69 6e  ase row being.in
86c0: 73 65 72 74 65 64 2c 20 75 70 64 61 74 65 64 20  serted, updated 
86d0: 6f 72 20 64 65 6c 65 74 65 64 20 62 79 20 74 68  or deleted by th
86e0: 65 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73  e statement caus
86f0: 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
8700: 74 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70  to fire.</p>..<p
8710: 3e 5e 28 42 6f 74 68 20 74 68 65 20 57 48 45 4e  >^(Both the WHEN
8720: 20 63 6c 61 75 73 65 20 61 6e 64 20 74 68 65 20   clause and the 
8730: 74 72 69 67 67 65 72 20 61 63 74 69 6f 6e 73 20  trigger actions 
8740: 6d 61 79 20 61 63 63 65 73 73 20 65 6c 65 6d 65  may access eleme
8750: 6e 74 73 20 6f 66 20 0a 74 68 65 20 72 6f 77 20  nts of .the row 
8760: 62 65 69 6e 67 20 69 6e 73 65 72 74 65 64 2c 20  being inserted, 
8770: 64 65 6c 65 74 65 64 20 6f 72 20 75 70 64 61 74  deleted or updat
8780: 65 64 20 75 73 69 6e 67 20 72 65 66 65 72 65 6e  ed using referen
8790: 63 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ces of the form 
87a0: 0a 22 4e 45 57 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d  ."NEW.<i>column-
87b0: 6e 61 6d 65 3c 2f 69 3e 22 20 61 6e 64 20 22 4f  name</i>" and "O
87c0: 4c 44 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d  LD.<i>column-nam
87d0: 65 3c 2f 69 3e 22 2c 20 77 68 65 72 65 0a 3c 69  e</i>", where.<i
87e0: 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e  >column-name</i>
87f0: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
8800: 61 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68  a column from th
8810: 65 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  e table that the
8820: 20 74 72 69 67 67 65 72 0a 69 73 20 61 73 73 6f   trigger.is asso
8830: 63 69 61 74 65 64 20 77 69 74 68 2e 29 5e 20 5e  ciated with.)^ ^
8840: 28 4f 4c 44 20 61 6e 64 20 4e 45 57 20 72 65 66  (OLD and NEW ref
8850: 65 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79  erences may only
8860: 20 62 65 20 75 73 65 64 20 69 6e 20 74 72 69 67   be used in trig
8870: 67 65 72 73 20 6f 6e 0a 65 76 65 6e 74 73 20 66  gers on.events f
8880: 6f 72 20 77 68 69 63 68 20 74 68 65 79 20 61 72  or which they ar
8890: 65 20 72 65 6c 65 76 61 6e 74 2c 20 61 73 20 66  e relevant, as f
88a0: 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 61  ollows:</p>..<ta
88b0: 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c  ble border=0 cel
88c0: 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 72  lpadding=10>.<tr
88d0: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
88e0: 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
88f0: 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 49 4e   width=120><i>IN
8900: 53 45 52 54 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74  SERT</i></td>.<t
8910: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e  d valign="top">N
8920: 45 57 20 72 65 66 65 72 65 6e 63 65 73 20 61 72  EW references ar
8930: 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74  e valid</td>.</t
8940: 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69  r>.<tr>.<td vali
8950: 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
8960: 72 69 67 68 74 22 20 77 69 64 74 68 3d 31 32 30  right" width=120
8970: 3e 3c 69 3e 55 50 44 41 54 45 3c 2f 69 3e 3c 2f  ><i>UPDATE</i></
8980: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
8990: 74 6f 70 22 3e 4e 45 57 20 61 6e 64 20 4f 4c 44  top">NEW and OLD
89a0: 20 72 65 66 65 72 65 6e 63 65 73 20 61 72 65 20   references are 
89b0: 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  valid</td>.</tr>
89c0: 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
89d0: 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69  ="top" align="ri
89e0: 67 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c  ght" width=120><
89f0: 69 3e 44 45 4c 45 54 45 3c 2f 69 3e 3c 2f 74 64  i>DELETE</i></td
8a00: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
8a10: 70 22 3e 4f 4c 44 20 72 65 66 65 72 65 6e 63 65  p">OLD reference
8a20: 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e  s are valid</td>
8a30: 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a  .</tr>.</table>.
8a40: 3c 2f 70 3e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 61  </p>)^..<p>^If a
8a50: 20 57 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20   WHEN clause is 
8a60: 73 75 70 70 6c 69 65 64 2c 20 74 68 65 20 53 51  supplied, the SQ
8a70: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65  L statements spe
8a80: 63 69 66 69 65 64 0a 61 72 65 20 6f 6e 6c 79 20  cified.are only 
8a90: 65 78 65 63 75 74 65 64 20 66 6f 72 20 72 6f 77  executed for row
8aa0: 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20  s for which the 
8ab0: 57 48 45 4e 0a 63 6c 61 75 73 65 20 69 73 20 74  WHEN.clause is t
8ac0: 72 75 65 2e 20 5e 49 66 20 6e 6f 20 57 48 45 4e  rue. ^If no WHEN
8ad0: 20 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c   clause is suppl
8ae0: 69 65 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61  ied, the SQL sta
8af0: 74 65 6d 65 6e 74 73 0a 61 72 65 20 65 78 65 63  tements.are exec
8b00: 75 74 65 64 20 66 6f 72 20 61 6c 6c 20 72 6f 77  uted for all row
8b10: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  s.</p>..<p>^The 
8b20: 42 45 46 4f 52 45 20 6f 72 20 41 46 54 45 52 20  BEFORE or AFTER 
8b30: 6b 65 79 77 6f 72 64 20 64 65 74 65 72 6d 69 6e  keyword determin
8b40: 65 73 20 77 68 65 6e 20 74 68 65 20 74 72 69 67  es when the trig
8b50: 67 65 72 20 61 63 74 69 6f 6e 73 0a 77 69 6c 6c  ger actions.will
8b60: 20 62 65 20 65 78 65 63 75 74 65 64 20 72 65 6c   be executed rel
8b70: 61 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e 73  ative to the ins
8b80: 65 72 74 69 6f 6e 2c 20 6d 6f 64 69 66 69 63 61  ertion, modifica
8b90: 74 69 6f 6e 20 6f 72 20 72 65 6d 6f 76 61 6c 20  tion or removal 
8ba0: 6f 66 20 74 68 65 0a 61 73 73 6f 63 69 61 74 65  of the.associate
8bb0: 64 20 72 6f 77 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  d row.</p>..<p>^
8bc0: 41 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d  An [ON CONFLICT]
8bd0: 20 63 6c 61 75 73 65 20 6d 61 79 20 62 65 20 73   clause may be s
8be0: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
8bf0: 20 6f 66 20 61 6e 20 5b 55 50 44 41 54 45 5d 20   of an [UPDATE] 
8c00: 6f 72 20 5b 49 4e 53 45 52 54 5d 0a 61 63 74 69  or [INSERT].acti
8c10: 6f 6e 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f  on within the bo
8c20: 64 79 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  dy of the trigge
8c30: 72 2e 0a 5e 48 6f 77 65 76 65 72 20 69 66 20 61  r..^However if a
8c40: 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20  n [ON CONFLICT] 
8c50: 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66  clause is specif
8c60: 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 0a  ied as part of .
8c70: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 61  the statement ca
8c80: 75 73 69 6e 67 20 74 68 65 20 74 72 69 67 67 65  using the trigge
8c90: 72 20 74 6f 20 66 69 72 65 2c 20 74 68 65 6e 20  r to fire, then 
8ca0: 63 6f 6e 66 6c 69 63 74 20 68 61 6e 64 6c 69 6e  conflict handlin
8cb0: 67 0a 70 6f 6c 69 63 79 20 6f 66 20 74 68 65 20  g.policy of the 
8cc0: 6f 75 74 65 72 20 73 74 61 74 65 6d 65 6e 74 20  outer statement 
8cd0: 69 73 20 75 73 65 64 20 69 6e 73 74 65 61 64 2e  is used instead.
8ce0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65  </p>..<p>^Trigge
8cf0: 72 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  rs are automatic
8d00: 61 6c 6c 79 20 5b 44 52 4f 50 20 54 52 49 47 47  ally [DROP TRIGG
8d10: 45 52 20 7c 20 64 72 6f 70 70 65 64 5d 0a 77 68  ER | dropped].wh
8d20: 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  en the table tha
8d30: 74 20 74 68 65 79 20 61 72 65 20 0a 61 73 73 6f  t they are .asso
8d40: 63 69 61 74 65 64 20 77 69 74 68 20 28 74 68 65  ciated with (the
8d50: 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f   <i>table-name</
8d60: 69 3e 20 74 61 62 6c 65 29 20 69 73 20 0a 5b 44  i> table) is .[D
8d70: 52 4f 50 20 54 41 42 4c 45 20 7c 20 64 72 6f 70  ROP TABLE | drop
8d80: 70 65 64 5d 2e 20 20 5e 48 6f 77 65 76 65 72 20  ped].  ^However 
8d90: 69 66 20 74 68 65 20 74 72 69 67 67 65 72 20 61  if the trigger a
8da0: 63 74 69 6f 6e 73 20 72 65 66 65 72 65 6e 63 65  ctions reference
8db0: 0a 6f 74 68 65 72 20 74 61 62 6c 65 73 2c 20 74  .other tables, t
8dc0: 68 65 20 74 72 69 67 67 65 72 20 69 73 20 6e 6f  he trigger is no
8dd0: 74 20 64 72 6f 70 70 65 64 20 6f 72 20 6d 6f 64  t dropped or mod
8de0: 69 66 69 65 64 20 69 66 20 74 68 6f 73 65 20 6f  ified if those o
8df0: 74 68 65 72 0a 74 61 62 6c 65 73 20 61 72 65 20  ther.tables are 
8e00: 5b 44 52 4f 50 20 54 41 42 4c 45 20 7c 20 64 72  [DROP TABLE | dr
8e10: 6f 70 70 65 64 5d 20 6f 72 20 5b 41 4c 54 45 52  opped] or [ALTER
8e20: 20 54 41 42 4c 45 20 7c 20 6d 6f 64 69 66 69 65   TABLE | modifie
8e30: 64 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69  d].</p>..<p>^Tri
8e40: 67 67 65 72 73 20 61 72 65 20 72 65 6d 6f 76 65  ggers are remove
8e50: 64 20 75 73 69 6e 67 20 74 68 65 20 5b 44 52 4f  d using the [DRO
8e60: 50 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65  P TRIGGER] state
8e70: 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53  ment.</p>..<h3>S
8e80: 79 6e 74 61 78 20 52 65 73 74 72 69 63 74 69 6f  yntax Restrictio
8e90: 6e 73 20 4f 6e 20 55 50 44 41 54 45 2c 20 44 45  ns On UPDATE, DE
8ea0: 4c 45 54 45 2c 20 61 6e 64 20 49 4e 53 45 52 54  LETE, and INSERT
8eb0: 20 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68   Statements With
8ec0: 69 6e 0a 20 20 20 20 54 72 69 67 67 65 72 73 3c  in.    Triggers<
8ed0: 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 55  /h3>..<p>^The [U
8ee0: 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d  PDATE], [DELETE]
8ef0: 2c 20 61 6e 64 20 5b 49 4e 53 45 52 54 5d 0a 73  , and [INSERT].s
8f00: 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
8f10: 20 74 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74   triggers do not
8f20: 20 73 75 70 70 6f 72 74 0a 74 68 65 20 66 75 6c   support.the ful
8f30: 6c 20 73 79 6e 74 61 78 20 66 6f 72 20 5b 55 50  l syntax for [UP
8f40: 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c  DATE], [DELETE],
8f50: 20 61 6e 64 20 5b 49 4e 53 45 52 54 5d 20 73 74   and [INSERT] st
8f60: 61 74 65 6d 65 6e 74 73 2e 20 20 54 68 65 20 66  atements.  The f
8f70: 6f 6c 6c 6f 77 69 6e 67 0a 72 65 73 74 72 69 63  ollowing.restric
8f80: 74 69 6f 6e 73 20 61 70 70 6c 79 3a 3c 2f 70 3e  tions apply:</p>
8f90: 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20  ..<ul>.<li><p>. 
8fa0: 20 5e 28 54 68 65 20 6e 61 6d 65 20 6f 66 20 74   ^(The name of t
8fb0: 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 6d  he table to be m
8fc0: 6f 64 69 66 69 65 64 20 69 6e 20 61 6e 20 5b 55  odified in an [U
8fd0: 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d  PDATE], [DELETE]
8fe0: 2c 20 6f 72 20 5b 49 4e 53 45 52 54 5d 0a 20 20  , or [INSERT].  
8ff0: 73 74 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 62  statement must b
9000: 65 20 61 6e 20 75 6e 71 75 61 6c 69 66 69 65 64  e an unqualified
9010: 20 74 61 62 6c 65 20 6e 61 6d 65 2e 20 20 49 6e   table name.  In
9020: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 6f 6e   other words, on
9030: 65 20 6d 75 73 74 0a 20 20 75 73 65 20 6a 75 73  e must.  use jus
9040: 74 20 22 3c 69 3e 74 61 62 6c 65 6e 61 6d 65 3c  t "<i>tablename<
9050: 2f 69 3e 22 20 6e 6f 74 20 22 3c 69 3e 64 61 74  /i>" not "<i>dat
9060: 61 62 61 73 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62  abase</i><b>.</b
9070: 3e 3c 69 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f 69  ><i>tablename</i
9080: 3e 22 0a 20 20 77 68 65 6e 20 73 70 65 63 69 66  >".  when specif
9090: 79 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2e 29  ying the table.)
90a0: 5e 20 20 5e 54 68 65 20 74 61 62 6c 65 20 74 6f  ^  ^The table to
90b0: 20 62 65 20 6d 6f 64 69 66 69 65 64 20 6d 75 73   be modified mus
90c0: 74 20 65 78 69 73 74 20 69 6e 20 74 68 65 0a 20  t exist in the. 
90d0: 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61   same database a
90e0: 73 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76  s the table or v
90f0: 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65  iew to which the
9100: 20 74 72 69 67 67 65 72 20 69 73 20 61 74 74 61   trigger is atta
9110: 63 68 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69  ched..  </p></li
9120: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68  >..<li><p>.  ^Th
9130: 65 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 3c  e "INSERT INTO <
9140: 69 3e 74 61 62 6c 65 3c 2f 69 3e 20 44 45 46 41  i>table</i> DEFA
9150: 55 4c 54 20 56 41 4c 55 45 53 22 20 66 6f 72 6d  ULT VALUES" form
9160: 20 6f 66 20 74 68 65 20 5b 49 4e 53 45 52 54 5d   of the [INSERT]
9170: 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 69 73 20   statement.  is 
9180: 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 2e 0a 20  not supported.. 
9190: 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e   </p></li>..<li>
91a0: 3c 70 3e 0a 20 20 5e 54 68 65 20 49 4e 44 45 58  <p>.  ^The INDEX
91b0: 45 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e  ED BY and NOT IN
91c0: 44 45 58 45 44 20 63 6c 61 75 73 65 73 20 61 72  DEXED clauses ar
91d0: 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20  e not supported 
91e0: 66 6f 72 20 5b 55 50 44 41 54 45 5d 20 61 6e 64  for [UPDATE] and
91f0: 0a 20 20 5b 44 45 4c 45 54 45 5d 20 73 74 61 74  .  [DELETE] stat
9200: 65 6d 65 6e 74 73 2e 0a 20 20 3c 2f 70 3e 3c 2f  ements..  </p></
9210: 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e  li>..<li><p>.  ^
9220: 28 54 68 65 20 4f 52 44 45 52 20 42 59 20 61 6e  (The ORDER BY an
9230: 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 20  d LIMIT clauses 
9240: 6f 6e 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20  on [UPDATE] and 
9250: 5b 44 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65  [DELETE] stateme
9260: 6e 74 73 20 61 72 65 20 6e 6f 74 0a 20 20 73 75  nts are not.  su
9270: 70 70 6f 72 74 65 64 2e 20 20 4f 52 44 45 52 20  pported.  ORDER 
9280: 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 61 72 65  BY and LIMIT are
9290: 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 73 75   not normally su
92a0: 70 70 6f 72 74 65 64 20 66 6f 72 20 5b 55 50 44  pported for [UPD
92b0: 41 54 45 5d 20 6f 72 0a 20 20 5b 44 45 4c 45 54  ATE] or.  [DELET
92c0: 45 5d 20 69 6e 20 61 6e 79 20 63 6f 6e 74 65 78  E] in any contex
92d0: 74 20 62 75 74 20 63 61 6e 20 62 65 20 65 6e 61  t but can be ena
92e0: 62 6c 65 64 20 66 6f 72 20 74 6f 70 2d 6c 65 76  bled for top-lev
92f0: 65 6c 20 73 74 61 74 65 6d 65 6e 74 73 0a 20 20  el statements.  
9300: 75 73 69 6e 67 20 74 68 65 20 5b 53 51 4c 49 54  using the [SQLIT
9310: 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
9320: 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 20 63 6f  DELETE_LIMIT] co
9330: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
9340: 6e 2e 20 20 48 6f 77 65 76 65 72 2c 0a 20 20 74  n.  However,.  t
9350: 68 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  hat compile-time
9360: 20 6f 70 74 69 6f 6e 20 6f 6e 6c 79 20 61 70 70   option only app
9370: 6c 69 65 73 20 74 6f 20 74 6f 70 2d 6c 65 76 65  lies to top-leve
9380: 6c 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b  l [UPDATE] and [
9390: 44 45 4c 45 54 45 5d 0a 20 20 73 74 61 74 65 6d  DELETE].  statem
93a0: 65 6e 74 73 2c 20 6e 6f 74 20 5b 55 50 44 41 54  ents, not [UPDAT
93b0: 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20  E] and [DELETE] 
93c0: 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
93d0: 6e 20 74 72 69 67 67 65 72 73 2e 29 5e 0a 20 20  n triggers.)^.  
93e0: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a  </p></li>.</ul>.
93f0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
9400: 74 20 69 6e 73 74 65 61 64 5f 6f 66 5f 74 72 69  t instead_of_tri
9410: 67 67 65 72 20 7b 49 4e 53 54 45 41 44 20 4f 46  gger {INSTEAD OF
9420: 7d 20 7b 49 4e 53 54 45 41 44 20 4f 46 20 74 72  } {INSTEAD OF tr
9430: 69 67 67 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  igger}</tcl>.<h3
9440: 3e 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67  >INSTEAD OF trig
9450: 67 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 72  ger</h3>..<p>^Tr
9460: 69 67 67 65 72 73 20 6d 61 79 20 62 65 20 63 72  iggers may be cr
9470: 65 61 74 65 64 20 6f 6e 20 5b 76 69 65 77 73 5d  eated on [views]
9480: 2c 20 61 73 20 77 65 6c 6c 20 61 73 20 6f 72 64  , as well as ord
9490: 69 6e 61 72 79 20 74 61 62 6c 65 73 2c 20 62 79  inary tables, by
94a0: 0a 73 70 65 63 69 66 79 69 6e 67 20 49 4e 53 54  .specifying INST
94b0: 45 41 44 20 4f 46 20 69 6e 20 74 68 65 20 43 52  EAD OF in the CR
94c0: 45 41 54 45 20 54 52 49 47 47 45 52 20 73 74 61  EATE TRIGGER sta
94d0: 74 65 6d 65 6e 74 2e 20 0a 5e 49 66 20 6f 6e 65  tement. .^If one
94e0: 20 6f 72 20 6d 6f 72 65 20 4f 4e 20 49 4e 53 45   or more ON INSE
94f0: 52 54 2c 20 4f 4e 20 44 45 4c 45 54 45 0a 6f 72  RT, ON DELETE.or
9500: 20 4f 4e 20 55 50 44 41 54 45 20 74 72 69 67 67   ON UPDATE trigg
9510: 65 72 73 20 61 72 65 20 64 65 66 69 6e 65 64 20  ers are defined 
9520: 6f 6e 20 61 20 76 69 65 77 2c 20 74 68 65 6e 20  on a view, then 
9530: 69 74 20 69 73 20 6e 6f 74 20 61 6e 0a 65 72 72  it is not an.err
9540: 6f 72 20 74 6f 20 65 78 65 63 75 74 65 20 61 6e  or to execute an
9550: 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 20   INSERT, DELETE 
9560: 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  or UPDATE statem
9570: 65 6e 74 20 6f 6e 20 74 68 65 20 76 69 65 77 2c  ent on the view,
9580: 20 0a 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20   .respectively. 
9590: 20 5e 49 6e 73 74 65 61 64 2c 0a 65 78 65 63 75   ^Instead,.execu
95a0: 74 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20  ting an INSERT, 
95b0: 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
95c0: 20 6f 6e 20 74 68 65 20 76 69 65 77 20 63 61 75   on the view cau
95d0: 73 65 73 20 74 68 65 20 61 73 73 6f 63 69 61 74  ses the associat
95e0: 65 64 0a 74 72 69 67 67 65 72 73 20 74 6f 20 66  ed.triggers to f
95f0: 69 72 65 2e 20 5e 54 68 65 20 72 65 61 6c 20 74  ire. ^The real t
9600: 61 62 6c 65 73 20 75 6e 64 65 72 6c 79 69 6e 67  ables underlying
9610: 20 74 68 65 20 76 69 65 77 20 61 72 65 20 6e 6f   the view are no
9620: 74 20 6d 6f 64 69 66 69 65 64 0a 28 65 78 63 65  t modified.(exce
9630: 70 74 20 70 6f 73 73 69 62 6c 79 20 65 78 70 6c  pt possibly expl
9640: 69 63 69 74 6c 79 2c 20 62 79 20 61 20 74 72 69  icitly, by a tri
9650: 67 67 65 72 20 70 72 6f 67 72 61 6d 29 2e 3c 2f  gger program).</
9660: 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61  p>..<p>^Note tha
9670: 74 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63  t the [sqlite3_c
9680: 68 61 6e 67 65 73 28 29 5d 20 61 6e 64 20 5b 73  hanges()] and [s
9690: 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61  qlite3_total_cha
96a0: 6e 67 65 73 28 29 5d 20 69 6e 74 65 72 66 61 63  nges()] interfac
96b0: 65 73 0a 64 6f 20 6e 6f 74 20 63 6f 75 6e 74 20  es.do not count 
96c0: 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67  INSTEAD OF trigg
96d0: 65 72 20 66 69 72 69 6e 67 73 2c 20 62 75 74 20  er firings, but 
96e0: 74 68 65 0a 5b 63 6f 75 6e 74 5f 63 68 61 6e 67  the.[count_chang
96f0: 65 73 20 70 72 61 67 6d 61 5d 20 64 6f 65 73 20  es pragma] does 
9700: 63 6f 75 6e 74 20 49 4e 53 54 45 41 44 20 4f 46  count INSTEAD OF
9710: 20 74 72 69 67 67 65 72 20 66 69 72 69 6e 67 2e   trigger firing.
9720: 3c 2f 70 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c  </p>..<h3>Exampl
9730: 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 73  es</h3>..<p>^(As
9740: 73 75 6d 69 6e 67 20 74 68 61 74 20 63 75 73 74  suming that cust
9750: 6f 6d 65 72 20 72 65 63 6f 72 64 73 20 61 72 65  omer records are
9760: 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 22   stored in the "
9770: 63 75 73 74 6f 6d 65 72 73 22 20 74 61 62 6c 65  customers" table
9780: 2c 20 61 6e 64 0a 74 68 61 74 20 6f 72 64 65 72  , and.that order
9790: 20 72 65 63 6f 72 64 73 20 61 72 65 20 73 74 6f   records are sto
97a0: 72 65 64 20 69 6e 20 74 68 65 20 22 6f 72 64 65  red in the "orde
97b0: 72 73 22 20 74 61 62 6c 65 2c 20 74 68 65 20 66  rs" table, the f
97c0: 6f 6c 6c 6f 77 69 6e 67 20 74 72 69 67 67 65 72  ollowing trigger
97d0: 0a 65 6e 73 75 72 65 73 20 74 68 61 74 20 61 6c  .ensures that al
97e0: 6c 20 61 73 73 6f 63 69 61 74 65 64 20 6f 72 64  l associated ord
97f0: 65 72 73 20 61 72 65 20 72 65 64 69 72 65 63 74  ers are redirect
9800: 65 64 20 77 68 65 6e 20 61 20 63 75 73 74 6f 6d  ed when a custom
9810: 65 72 20 63 68 61 6e 67 65 73 0a 68 69 73 20 6f  er changes.his o
9820: 72 20 68 65 72 20 61 64 64 72 65 73 73 3a 3c 2f  r her address:</
9830: 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65  p>..<tcl>Example
9840: 20 7b 0a 43 52 45 41 54 45 20 54 52 49 47 47 45   {.CREATE TRIGGE
9850: 52 20 75 70 64 61 74 65 5f 63 75 73 74 6f 6d 65  R update_custome
9860: 72 5f 61 64 64 72 65 73 73 20 55 50 44 41 54 45  r_address UPDATE
9870: 20 4f 46 20 61 64 64 72 65 73 73 20 4f 4e 20 63   OF address ON c
9880: 75 73 74 6f 6d 65 72 73 20 0a 20 20 42 45 47 49  ustomers .  BEGI
9890: 4e 0a 20 20 20 20 55 50 44 41 54 45 20 6f 72 64  N.    UPDATE ord
98a0: 65 72 73 20 53 45 54 20 61 64 64 72 65 73 73 20  ers SET address 
98b0: 3d 20 6e 65 77 2e 61 64 64 72 65 73 73 20 57 48  = new.address WH
98c0: 45 52 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d  ERE customer_nam
98d0: 65 20 3d 20 6f 6c 64 2e 6e 61 6d 65 3b 0a 20 20  e = old.name;.  
98e0: 45 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  END;.}</tcl>..<p
98f0: 3e 57 69 74 68 20 74 68 69 73 20 74 72 69 67 67  >With this trigg
9900: 65 72 20 69 6e 73 74 61 6c 6c 65 64 2c 20 65 78  er installed, ex
9910: 65 63 75 74 69 6e 67 20 74 68 65 20 73 74 61 74  ecuting the stat
9920: 65 6d 65 6e 74 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c  ement:</p>..<tcl
9930: 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54  >Example {.UPDAT
9940: 45 20 63 75 73 74 6f 6d 65 72 73 20 53 45 54 20  E customers SET 
9950: 61 64 64 72 65 73 73 20 3d 20 27 31 20 4d 61 69  address = '1 Mai
9960: 6e 20 53 74 2e 27 20 57 48 45 52 45 20 6e 61 6d  n St.' WHERE nam
9970: 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27  e = 'Jack Jones'
9980: 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 63 61  ;.}</tcl>..<p>ca
9990: 75 73 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69  uses the followi
99a0: 6e 67 20 74 6f 20 62 65 20 61 75 74 6f 6d 61 74  ng to be automat
99b0: 69 63 61 6c 6c 79 20 65 78 65 63 75 74 65 64 3a  ically executed:
99c0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70  </p>..<tcl>Examp
99d0: 6c 65 20 7b 0a 55 50 44 41 54 45 20 6f 72 64 65  le {.UPDATE orde
99e0: 72 73 20 53 45 54 20 61 64 64 72 65 73 73 20 3d  rs SET address =
99f0: 20 27 31 20 4d 61 69 6e 20 53 74 2e 27 20 57 48   '1 Main St.' WH
9a00: 45 52 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d  ERE customer_nam
9a10: 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27  e = 'Jack Jones'
9a20: 3b 0a 7d 3c 2f 74 63 6c 3e 29 5e 0a 0a 3c 74 63  ;.}</tcl>)^..<tc
9a30: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e  l>hd_fragment un
9a40: 64 65 66 5f 62 65 66 6f 72 65 20 7b 75 6e 64 65  def_before {unde
9a50: 66 69 6e 65 64 20 42 45 46 4f 52 45 20 74 72 69  fined BEFORE tri
9a60: 67 67 65 72 20 62 65 68 61 76 69 6f 72 7d 3c 2f  gger behavior}</
9a70: 74 63 6c 3e 0a 3c 68 33 3e 43 61 75 74 69 6f 6e  tcl>.<h3>Caution
9a80: 73 20 4f 6e 20 54 68 65 20 55 73 65 20 4f 66 20  s On The Use Of 
9a90: 42 45 46 4f 52 45 20 74 72 69 67 67 65 72 73 3c  BEFORE triggers<
9aa0: 2f 68 33 3e 0a 0a 3c 70 3e 49 66 20 61 20 42 45  /h3>..<p>If a BE
9ab0: 46 4f 52 45 20 55 50 44 41 54 45 20 6f 72 20 42  FORE UPDATE or B
9ac0: 45 46 4f 52 45 20 44 45 4c 45 54 45 20 74 72 69  EFORE DELETE tri
9ad0: 67 67 65 72 20 6d 6f 64 69 66 69 65 73 20 6f 72  gger modifies or
9ae0: 20 64 65 6c 65 74 65 73 20 61 20 72 6f 77 0a 74   deletes a row.t
9af0: 68 61 74 20 77 61 73 20 74 6f 20 68 61 76 65 20  hat was to have 
9b00: 62 65 65 6e 20 75 70 64 61 74 65 64 20 6f 72 20  been updated or 
9b10: 64 65 6c 65 74 65 64 2c 20 74 68 65 6e 20 74 68  deleted, then th
9b20: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
9b30: 73 75 62 73 65 71 75 65 6e 74 0a 75 70 64 61 74  subsequent.updat
9b40: 65 20 6f 72 20 64 65 6c 65 74 65 20 6f 70 65 72  e or delete oper
9b50: 61 74 69 6f 6e 20 69 73 20 75 6e 64 65 66 69 6e  ation is undefin
9b60: 65 64 2e 20 20 46 75 72 74 68 65 72 6d 6f 72 65  ed.  Furthermore
9b70: 2c 20 69 66 20 61 20 42 45 46 4f 52 45 20 74 72  , if a BEFORE tr
9b80: 69 67 67 65 72 0a 6d 6f 64 69 66 69 65 73 20 6f  igger.modifies o
9b90: 72 20 64 65 6c 65 74 65 73 20 61 20 72 6f 77 2c  r deletes a row,
9ba0: 20 74 68 65 6e 20 69 74 20 69 73 20 75 6e 64 65   then it is unde
9bb0: 66 69 6e 65 64 20 77 68 65 74 68 65 72 20 6f 72  fined whether or
9bc0: 20 6e 6f 74 20 41 46 54 45 52 20 74 72 69 67 67   not AFTER trigg
9bd0: 65 72 73 0a 74 68 61 74 20 77 6f 75 6c 64 20 68  ers.that would h
9be0: 61 76 65 20 6f 74 68 65 72 77 69 73 65 20 72 75  ave otherwise ru
9bf0: 6e 20 6f 6e 20 74 68 6f 73 65 20 72 6f 77 73 20  n on those rows 
9c00: 77 69 6c 6c 20 69 6e 20 66 61 63 74 20 72 75 6e  will in fact run
9c10: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 76  ..</p>..<p>The v
9c20: 61 6c 75 65 20 6f 66 20 4e 45 57 2e 72 6f 77 69  alue of NEW.rowi
9c30: 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64 20 69  d is undefined i
9c40: 6e 20 61 20 42 45 46 4f 52 45 20 49 4e 53 45 52  n a BEFORE INSER
9c50: 54 20 74 72 69 67 67 65 72 20 69 6e 20 77 68 69  T trigger in whi
9c60: 63 68 0a 74 68 65 20 72 6f 77 69 64 20 69 73 20  ch.the rowid is 
9c70: 6e 6f 74 20 65 78 70 6c 69 63 69 74 6c 79 20 73  not explicitly s
9c80: 65 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  et to an integer
9c90: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 42 65 63 61 75 73  .</p>..<p>Becaus
9ca0: 65 20 6f 66 20 74 68 65 20 62 65 68 61 76 69 6f  e of the behavio
9cb0: 72 73 20 64 65 73 63 72 69 62 65 64 20 61 62 6f  rs described abo
9cc0: 76 65 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73 20  ve, programmers 
9cd0: 61 72 65 20 65 6e 63 6f 75 72 61 67 65 64 20 74  are encouraged t
9ce0: 6f 0a 70 72 65 66 65 72 20 41 46 54 45 52 20 74  o.prefer AFTER t
9cf0: 72 69 67 67 65 72 73 20 6f 76 65 72 20 42 45 46  riggers over BEF
9d00: 4f 52 45 20 74 72 69 67 67 65 72 73 2e 3c 2f 70  ORE triggers.</p
9d10: 3e 0a 0a 3c 68 33 3e 54 68 65 20 52 41 49 53 45  >..<h3>The RAISE
9d20: 28 29 20 66 75 6e 63 74 69 6f 6e 3c 2f 68 33 3e  () function</h3>
9d30: 0a 0a 3c 70 3e 5e 28 41 20 73 70 65 63 69 61 6c  ..<p>^(A special
9d40: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 52 41   SQL function RA
9d50: 49 53 45 28 29 20 6d 61 79 20 62 65 20 75 73 65  ISE() may be use
9d60: 64 20 77 69 74 68 69 6e 20 61 20 74 72 69 67 67  d within a trigg
9d70: 65 72 2d 70 72 6f 67 72 61 6d 2c 29 5e 0a 77 69  er-program,)^.wi
9d80: 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  th the following
9d90: 20 73 79 6e 74 61 78 3c 2f 70 3e 20 0a 0a 3c 74   syntax</p> ..<t
9da0: 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d  cl>BubbleDiagram
9db0: 20 72 61 69 73 65 2d 66 75 6e 63 74 69 6f 6e 3c   raise-function<
9dc0: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20  /tcl>..<p>^When 
9dd0: 6f 6e 65 20 6f 66 20 74 68 65 20 66 69 72 73 74  one of the first
9de0: 20 74 68 72 65 65 20 66 6f 72 6d 73 20 69 73 20   three forms is 
9df0: 63 61 6c 6c 65 64 20 64 75 72 69 6e 67 20 74 72  called during tr
9e00: 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 0a 65 78  igger-program.ex
9e10: 65 63 75 74 69 6f 6e 2c 20 74 68 65 20 73 70 65  ecution, the spe
9e20: 63 69 66 69 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c  cified [ON CONFL
9e30: 49 43 54 5d 20 70 72 6f 63 65 73 73 69 6e 67 20  ICT] processing 
9e40: 69 73 20 70 65 72 66 6f 72 6d 65 64 0a 28 65 69  is performed.(ei
9e50: 74 68 65 72 20 41 42 4f 52 54 2c 20 46 41 49 4c  ther ABORT, FAIL
9e60: 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 29 20 61 6e   or ROLLBACK) an
9e70: 64 20 74 68 65 20 63 75 72 72 65 6e 74 20 71 75  d the current qu
9e80: 65 72 79 20 74 65 72 6d 69 6e 61 74 65 73 2e 0a  ery terminates..
9e90: 41 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66  An error code of
9ea0: 20 5b 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41   [SQLITE_CONSTRA
9eb0: 49 4e 54 5d 20 69 73 20 72 65 74 75 72 6e 65 64  INT] is returned
9ec0: 20 74 6f 20 74 68 65 20 61 70 70 6c 69 63 61 74   to the applicat
9ed0: 69 6f 6e 2c 0a 61 6c 6f 6e 67 20 77 69 74 68 20  ion,.along with 
9ee0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65 72  the specified er
9ef0: 72 6f 72 20 6d 65 73 73 61 67 65 2e 3c 2f 70 3e  ror message.</p>
9f00: 0a 0a 3c 70 3e 5e 57 68 65 6e 20 52 41 49 53 45  ..<p>^When RAISE
9f10: 28 49 47 4e 4f 52 45 29 20 69 73 20 63 61 6c 6c  (IGNORE) is call
9f20: 65 64 2c 20 74 68 65 20 72 65 6d 61 69 6e 64 65  ed, the remainde
9f30: 72 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  r of the current
9f40: 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
9f50: 2c 0a 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  ,.the statement 
9f60: 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20  that caused the 
9f70: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
9f80: 74 6f 20 65 78 65 63 75 74 65 20 61 6e 64 20 61  to execute and a
9f90: 6e 79 20 73 75 62 73 65 71 75 65 6e 74 0a 74 72  ny subsequent.tr
9fa0: 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74  igger programs t
9fb0: 68 61 74 20 77 6f 75 6c 64 20 6f 66 20 62 65 65  hat would of bee
9fc0: 6e 20 65 78 65 63 75 74 65 64 20 61 72 65 20 61  n executed are a
9fd0: 62 61 6e 64 6f 6e 65 64 2e 20 5e 4e 6f 20 64 61  bandoned. ^No da
9fe0: 74 61 62 61 73 65 0a 63 68 61 6e 67 65 73 20 61  tabase.changes a
9ff0: 72 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  re rolled back. 
a000: 20 5e 49 66 20 74 68 65 20 73 74 61 74 65 6d 65   ^If the stateme
a010: 6e 74 20 74 68 61 74 20 63 61 75 73 65 64 20 74  nt that caused t
a020: 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
a030: 61 6d 0a 74 6f 20 65 78 65 63 75 74 65 20 69 73  am.to execute is
a040: 20 69 74 73 65 6c 66 20 70 61 72 74 20 6f 66 20   itself part of 
a050: 61 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  a trigger progra
a060: 6d 2c 20 74 68 65 6e 20 74 68 61 74 20 74 72 69  m, then that tri
a070: 67 67 65 72 20 70 72 6f 67 72 61 6d 0a 72 65 73  gger program.res
a080: 75 6d 65 73 20 65 78 65 63 75 74 69 6f 6e 20 61  umes execution a
a090: 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
a0a0: 6f 66 20 74 68 65 20 6e 65 78 74 20 73 74 65 70  of the next step
a0b0: 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23  ..</p>...<tcl>.#
a0c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a0d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a0e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a0f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
a110: 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 56  ection {CREATE V
a120: 49 45 57 7d 20 7b 63 72 65 61 74 65 76 69 65 77  IEW} {createview
a130: 7d 20 7b 7b 43 52 45 41 54 45 20 56 49 45 57 7d  } {{CREATE VIEW}
a140: 20 76 69 65 77 20 2a 76 69 65 77 73 7d 0a 0a 42   view *views}..B
a150: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65  ubbleDiagram cre
a160: 61 74 65 2d 76 69 65 77 2d 73 74 6d 74 20 31 0a  ate-view-stmt 1.
a170: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
a180: 43 52 45 41 54 45 20 56 49 45 57 20 63 6f 6d 6d  CREATE VIEW comm
a190: 61 6e 64 20 61 73 73 69 67 6e 73 20 61 20 6e 61  and assigns a na
a1a0: 6d 65 20 74 6f 20 61 20 70 72 65 2d 70 61 63 6b  me to a pre-pack
a1b0: 61 67 65 64 20 0a 5b 53 45 4c 45 43 54 5d 20 73  aged .[SELECT] s
a1c0: 74 61 74 65 6d 65 6e 74 2e 20 0a 5e 4f 6e 63 65  tatement. .^Once
a1d0: 20 74 68 65 20 76 69 65 77 20 69 73 20 63 72 65   the view is cre
a1e0: 61 74 65 64 2c 20 69 74 20 63 61 6e 20 62 65 20  ated, it can be 
a1f0: 75 73 65 64 20 69 6e 20 74 68 65 20 46 52 4f 4d  used in the FROM
a200: 20 63 6c 61 75 73 65 0a 6f 66 20 61 6e 6f 74 68   clause.of anoth
a210: 65 72 20 5b 53 45 4c 45 43 54 5d 20 69 6e 20 70  er [SELECT] in p
a220: 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20  lace of a table 
a230: 6e 61 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e  name..</p>..<p>^
a240: 49 66 20 74 68 65 20 22 54 45 4d 50 22 20 6f 72  If the "TEMP" or
a250: 20 22 54 45 4d 50 4f 52 41 52 59 22 20 6b 65 79   "TEMPORARY" key
a260: 77 6f 72 64 20 6f 63 63 75 72 73 20 69 6e 20 62  word occurs in b
a270: 65 74 77 65 65 6e 20 22 43 52 45 41 54 45 22 0a  etween "CREATE".
a280: 61 6e 64 20 22 56 49 45 57 22 20 74 68 65 6e 20  and "VIEW" then 
a290: 74 68 65 20 76 69 65 77 20 74 68 61 74 20 69 73  the view that is
a2a0: 20 63 72 65 61 74 65 64 20 69 73 20 6f 6e 6c 79   created is only
a2b0: 20 76 69 73 69 62 6c 65 20 74 6f 20 74 68 65 0a   visible to the.
a2c0: 70 72 6f 63 65 73 73 20 74 68 61 74 20 6f 70 65  process that ope
a2d0: 6e 65 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ned the database
a2e0: 20 61 6e 64 20 69 73 20 61 75 74 6f 6d 61 74 69   and is automati
a2f0: 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 20 77 68  cally deleted wh
a300: 65 6e 0a 74 68 65 20 64 61 74 61 62 61 73 65 20  en.the database 
a310: 69 73 20 63 6c 6f 73 65 64 2e 3c 2f 70 3e 0a 0a  is closed.</p>..
a320: 3c 70 3e 20 5e 49 66 20 61 20 26 6c 74 3b 64 61  <p> ^If a &lt;da
a330: 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20  tabase-name&gt; 
a340: 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  is specified, th
a350: 65 6e 20 74 68 65 20 76 69 65 77 20 69 73 20 63  en the view is c
a360: 72 65 61 74 65 64 20 69 6e 20 0a 74 68 65 20 6e  reated in .the n
a370: 61 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20 5e  amed database. ^
a380: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74  It is an error t
a390: 6f 20 73 70 65 63 69 66 79 20 62 6f 74 68 20 61  o specify both a
a3a0: 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61   &lt;database-na
a3b0: 6d 65 26 67 74 3b 0a 61 6e 64 20 74 68 65 20 54  me&gt;.and the T
a3c0: 45 4d 50 20 6b 65 79 77 6f 72 64 20 6f 6e 20 61  EMP keyword on a
a3d0: 20 56 49 45 57 2c 20 75 6e 6c 65 73 73 20 74 68   VIEW, unless th
a3e0: 65 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e  e &lt;database-n
a3f0: 61 6d 65 26 67 74 3b 20 69 73 20 22 74 65 6d 70  ame&gt; is "temp
a400: 22 2e 0a 5e 49 66 20 6e 6f 20 64 61 74 61 62 61  "..^If no databa
a410: 73 65 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69  se name is speci
a420: 66 69 65 64 2c 20 61 6e 64 20 74 68 65 20 54 45  fied, and the TE
a430: 4d 50 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f  MP keyword is no
a440: 74 20 70 72 65 73 65 6e 74 2c 0a 74 68 65 20 56  t present,.the V
a450: 49 45 57 20 69 73 20 63 72 65 61 74 65 64 20 69  IEW is created i
a460: 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
a470: 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 59 6f  ase.</p>..<p>^Yo
a480: 75 20 63 61 6e 6e 6f 74 20 5b 44 45 4c 45 54 45  u cannot [DELETE
a490: 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 20 6f 72 20  ], [INSERT], or 
a4a0: 5b 55 50 44 41 54 45 5d 20 61 20 76 69 65 77 2e  [UPDATE] a view.
a4b0: 20 20 5e 56 69 65 77 73 20 61 72 65 20 72 65 61    ^Views are rea
a4c0: 64 2d 6f 6e 6c 79 20 0a 69 6e 20 53 51 4c 69 74  d-only .in SQLit
a4d0: 65 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 69 6e  e.  ^However, in
a4e0: 20 6d 61 6e 79 20 63 61 73 65 73 20 79 6f 75 20   many cases you 
a4f0: 63 61 6e 20 75 73 65 20 61 6e 0a 5b 49 4e 53 54  can use an.[INST
a500: 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 5d 20  EAD OF trigger] 
a510: 6f 6e 20 74 68 65 20 76 69 65 77 20 74 6f 20 61  on the view to a
a520: 63 63 6f 6d 70 6c 69 73 68 20 0a 74 68 65 20 73  ccomplish .the s
a530: 61 6d 65 20 74 68 69 6e 67 2e 20 20 5e 56 69 65  ame thing.  ^Vie
a540: 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 0a  ws are removed .
a550: 77 69 74 68 20 74 68 65 20 5b 44 52 4f 50 20 56  with the [DROP V
a560: 49 45 57 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70  IEW] command.</p
a570: 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
a580: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a590: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a5a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a5b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a5c0: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
a5d0: 7b 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20  {CREATE VIRTUAL 
a5e0: 54 41 42 4c 45 7d 20 7b 63 72 65 61 74 65 76 74  TABLE} {createvt
a5f0: 61 62 7d 20 7b 7b 43 52 45 41 54 45 20 56 49 52  ab} {{CREATE VIR
a600: 54 55 41 4c 20 54 41 42 4c 45 7d 7d 0a 0a 42 75  TUAL TABLE}}..Bu
a610: 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61  bbleDiagram crea
a620: 74 65 2d 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  te-virtual-table
a630: 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a  -stmt 1.</tcl>..
a640: 3c 70 3e 41 20 5b 76 69 72 74 75 61 6c 20 74 61  <p>A [virtual ta
a650: 62 6c 65 5d 20 69 73 20 61 6e 20 69 6e 74 65 72  ble] is an inter
a660: 66 61 63 65 20 74 6f 20 61 6e 20 65 78 74 65 72  face to an exter
a670: 6e 61 6c 20 73 74 6f 72 61 67 65 20 6f 72 20 63  nal storage or c
a680: 6f 6d 70 75 74 61 74 69 6f 6e 0a 65 6e 67 69 6e  omputation.engin
a690: 65 20 74 68 61 74 20 61 70 70 65 61 72 73 20 74  e that appears t
a6a0: 6f 20 62 65 20 61 20 74 61 62 6c 65 20 62 75 74  o be a table but
a6b0: 20 64 6f 65 73 20 6e 6f 74 20 61 63 74 75 61 6c   does not actual
a6c0: 6c 79 20 73 74 6f 72 65 20 69 6e 66 6f 72 6d 61  ly store informa
a6d0: 74 69 6f 6e 0a 69 6e 20 74 68 65 20 64 61 74 61  tion.in the data
a6e0: 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a  base file.</p>..
a6f0: 3c 70 3e 49 6e 20 67 65 6e 65 72 61 6c 2c 20 79  <p>In general, y
a700: 6f 75 20 63 61 6e 20 64 6f 20 61 6e 79 74 68 69  ou can do anythi
a710: 6e 67 20 77 69 74 68 20 61 20 5b 76 69 72 74 75  ng with a [virtu
a720: 61 6c 20 74 61 62 6c 65 5d 20 74 68 61 74 20 63  al table] that c
a730: 61 6e 20 62 65 20 64 6f 6e 65 0a 77 69 74 68 20  an be done.with 
a740: 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c  an ordinary tabl
a750: 65 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 5e  e, except that ^
a760: 79 6f 75 20 63 61 6e 6e 6f 74 20 63 72 65 61 74  you cannot creat
a770: 65 20 69 6e 64 69 63 65 73 20 6f 72 20 74 72 69  e indices or tri
a780: 67 67 65 72 73 20 6f 6e 20 61 0a 76 69 72 74 75  ggers on a.virtu
a790: 61 6c 20 74 61 62 6c 65 2e 20 20 5e 53 6f 6d 65  al table.  ^Some
a7a0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
a7b0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d  mplementations m
a7c0: 69 67 68 74 20 69 6d 70 6f 73 65 20 61 64 64 69  ight impose addi
a7d0: 74 69 6f 6e 61 6c 0a 72 65 73 74 72 69 63 74 69  tional.restricti
a7e0: 6f 6e 73 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ons.  For exampl
a7f0: 65 2c 20 6d 61 6e 79 20 76 69 72 74 75 61 6c 20  e, many virtual 
a800: 74 61 62 6c 65 73 20 61 72 65 20 72 65 61 64 2d  tables are read-
a810: 6f 6e 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  only.</p>..<p>Th
a820: 65 20 26 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d  e &lt;module-nam
a830: 65 26 67 74 3b 20 69 73 20 74 68 65 20 6e 61 6d  e&gt; is the nam
a840: 65 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 74  e of an object t
a850: 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 0a 74  hat implements.t
a860: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
a870: 2e 20 20 5e 54 68 65 20 26 6c 74 3b 6d 6f 64 75  .  ^The &lt;modu
a880: 6c 65 2d 6e 61 6d 65 26 67 74 3b 20 6d 75 73 74  le-name&gt; must
a890: 20 62 65 20 72 65 67 69 73 74 65 72 65 64 20 77   be registered w
a8a0: 69 74 68 0a 74 68 65 20 53 51 4c 69 74 65 20 64  ith.the SQLite d
a8b0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
a8c0: 6f 6e 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65  on using.[sqlite
a8d0: 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  3_create_module(
a8e0: 29 5d 20 6f 72 20 5b 73 71 6c 69 74 65 33 5f 63  )] or [sqlite3_c
a8f0: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28  reate_module_v2(
a900: 29 5d 0a 70 72 69 6f 72 20 74 6f 20 69 73 73 75  )].prior to issu
a910: 69 6e 67 20 74 68 65 20 43 52 45 41 54 45 20 56  ing the CREATE V
a920: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61  IRTUAL TABLE sta
a930: 74 65 6d 65 6e 74 2e 0a 5e 54 68 65 20 6d 6f 64  tement..^The mod
a940: 75 6c 65 20 74 61 6b 65 73 20 7a 65 72 6f 20 6f  ule takes zero o
a950: 72 20 6d 6f 72 65 20 63 6f 6d 6d 61 2d 73 65 70  r more comma-sep
a960: 61 72 61 74 65 64 20 61 72 67 75 6d 65 6e 74 73  arated arguments
a970: 2e 0a 5e 54 68 65 20 61 72 67 75 6d 65 6e 74 73  ..^The arguments
a980: 20 63 61 6e 20 62 65 20 6a 75 73 74 20 61 62 6f   can be just abo
a990: 75 74 20 61 6e 79 20 74 65 78 74 20 61 73 20 6c  ut any text as l
a9a0: 6f 6e 67 20 61 73 20 69 74 20 68 61 73 20 62 61  ong as it has ba
a9b0: 6c 61 6e 63 65 64 0a 70 61 72 65 6e 74 68 65 73  lanced.parenthes
a9c0: 65 73 2e 20 20 54 68 65 20 61 72 67 75 6d 65 6e  es.  The argumen
a9d0: 74 20 73 79 6e 74 61 78 20 69 73 20 73 75 66 66  t syntax is suff
a9e0: 69 63 69 65 6e 74 6c 79 20 67 65 6e 65 72 61 6c  iciently general
a9f0: 20 74 68 61 74 20 74 68 65 0a 61 72 67 75 6d 65   that the.argume
aa00: 6e 74 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20  nts can be made 
aa10: 74 6f 20 61 70 70 65 61 72 20 61 73 20 5b 63 6f  to appear as [co
aa20: 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73  lumn definitions
aa30: 5d 20 69 6e 20 61 20 74 72 61 64 69 74 69 6f 6e  ] in a tradition
aa40: 61 6c 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45  al.[CREATE TABLE
aa50: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e  ] statement.  .^
aa60: 53 51 4c 69 74 65 20 70 61 73 73 65 73 20 74 68  SQLite passes th
aa70: 65 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e  e module argumen
aa80: 74 73 20 64 69 72 65 63 74 6c 79 0a 74 6f 20 74  ts directly.to t
aa90: 68 65 20 5b 78 43 72 65 61 74 65 5d 20 61 6e 64  he [xCreate] and
aaa0: 20 5b 78 43 6f 6e 6e 65 63 74 5d 20 6d 65 74 68   [xConnect] meth
aab0: 6f 64 73 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c  ods of the modul
aac0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
aad0: 0a 77 69 74 68 6f 75 74 20 61 6e 79 20 69 6e 74  .without any int
aae0: 65 72 70 72 65 74 61 74 69 6f 6e 2e 20 20 49 74  erpretation.  It
aaf0: 20 69 73 20 74 68 65 20 72 65 73 70 6f 6e 73 69   is the responsi
ab00: 62 69 6c 69 74 79 0a 6f 66 20 74 68 65 20 6d 6f  bility.of the mo
ab10: 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
ab20: 69 6f 6e 20 74 6f 20 70 61 72 73 65 20 61 6e 64  ion to parse and
ab30: 20 69 6e 74 65 72 70 72 65 74 20 69 74 73 20 6f   interpret its o
ab40: 77 6e 20 61 72 67 75 6d 65 6e 74 73 2e 3c 2f 70  wn arguments.</p
ab50: 3e 0a 0a 3c 70 3e 5e 41 20 76 69 72 74 75 61 6c  >..<p>^A virtual
ab60: 20 74 61 62 6c 65 20 69 73 20 64 65 73 74 72 6f   table is destro
ab70: 79 65 64 20 75 73 69 6e 67 20 74 68 65 20 6f 72  yed using the or
ab80: 64 69 6e 61 72 79 0a 5b 44 52 4f 50 20 54 41 42  dinary.[DROP TAB
ab90: 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  LE] statement.  
aba0: 54 68 65 72 65 20 69 73 20 6e 6f 0a 44 52 4f 50  There is no.DROP
abb0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73   VIRTUAL TABLE s
abc0: 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c  tatement.</p>..<
abd0: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
abe0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
abf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ac00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ac10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ac20: 23 23 23 0a 53 65 63 74 69 6f 6e 20 44 45 4c 45  ###.Section DELE
ac30: 54 45 20 64 65 6c 65 74 65 20 7b 44 45 4c 45 54  TE delete {DELET
ac40: 45 20 2a 44 45 4c 45 54 45 73 7d 0a 0a 42 75 62  E *DELETEs}..Bub
ac50: 62 6c 65 44 69 61 67 72 61 6d 20 64 65 6c 65 74  bleDiagram delet
ac60: 65 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44  e-stmt 1.BubbleD
ac70: 69 61 67 72 61 6d 20 71 75 61 6c 69 66 69 65 64  iagram qualified
ac80: 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63  -table-name.</tc
ac90: 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 45 4c 45  l>..<p>^The DELE
aca0: 54 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73  TE command is us
acb0: 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 72 65 63  ed to remove rec
acc0: 6f 72 64 73 20 66 72 6f 6d 20 61 20 74 61 62 6c  ords from a tabl
acd0: 65 2e 0a 5e 54 68 65 20 63 6f 6d 6d 61 6e 64 20  e..^The command 
ace0: 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20  consists of the 
acf0: 22 44 45 4c 45 54 45 20 46 52 4f 4d 22 20 6b 65  "DELETE FROM" ke
ad00: 79 77 6f 72 64 73 20 66 6f 6c 6c 6f 77 65 64 20  ywords followed 
ad10: 62 79 0a 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  by.the name of t
ad20: 68 65 20 74 61 62 6c 65 20 66 72 6f 6d 20 77 68  he table from wh
ad30: 69 63 68 20 72 65 63 6f 72 64 73 20 61 72 65 20  ich records are 
ad40: 74 6f 20 62 65 20 72 65 6d 6f 76 65 64 2e 0a 3c  to be removed..<
ad50: 2f 70 3e 0a 0a 3c 70 3e 5e 57 69 74 68 6f 75 74  /p>..<p>^Without
ad60: 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 2c   a WHERE clause,
ad70: 20 61 6c 6c 20 72 6f 77 73 20 6f 66 20 74 68 65   all rows of the
ad80: 20 74 61 62 6c 65 20 61 72 65 20 72 65 6d 6f 76   table are remov
ad90: 65 64 2e 0a 5e 49 66 20 61 20 57 48 45 52 45 20  ed..^If a WHERE 
ada0: 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c 69  clause is suppli
adb0: 65 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68  ed, then only th
adc0: 6f 73 65 20 72 6f 77 73 20 74 68 61 74 20 6d 61  ose rows that ma
add0: 74 63 68 0a 74 68 65 20 65 78 70 72 65 73 73 69  tch.the expressi
ade0: 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 2e 3c  on are removed.<
adf0: 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63  /p>..<h3>Restric
ae00: 74 69 6f 6e 73 20 6f 6e 20 44 45 4c 45 54 45 20  tions on DELETE 
ae10: 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69  Statements Withi
ae20: 6e 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  n CREATE TRIGGER
ae30: 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 72 65  </h3>..<p>^There
ae40: 20 61 72 65 20 61 64 64 69 74 69 6f 6e 61 6c 20   are additional 
ae50: 73 79 6e 74 61 78 20 72 65 73 74 72 69 63 74 69  syntax restricti
ae60: 6f 6e 73 20 6f 6e 20 44 45 4c 45 54 45 20 73 74  ons on DELETE st
ae70: 61 74 65 6d 65 6e 74 73 20 74 68 61 74 0a 6f 63  atements that.oc
ae80: 63 75 72 20 77 69 74 68 69 6e 20 74 68 65 20 62  cur within the b
ae90: 6f 64 79 20 6f 66 20 61 20 5b 43 52 45 41 54 45  ody of a [CREATE
aea0: 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d   TRIGGER] statem
aeb0: 65 6e 74 2e 20 20 5e 54 68 65 20 3c 69 3e 74 61  ent.  ^The <i>ta
aec0: 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 0a 6d 75 73  ble-name</i>.mus
aed0: 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69 65 64  t be unqualified
aee0: 2e 20 0a 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f  . .^(In other wo
aef0: 72 64 73 2c 20 74 68 65 20 3c 69 3e 64 61 74 61  rds, the <i>data
af00: 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e  base-name</i><b>
af10: 2e 3c 2f 62 3e 20 70 72 65 66 69 78 0a 6f 6e 20  .</b> prefix.on 
af20: 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 20 69  the table name i
af30: 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 77 69  s not allowed wi
af40: 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20 29  thin triggers. )
af50: 5e 0a 5e 54 68 65 20 74 61 62 6c 65 20 66 72 6f  ^.^The table fro
af60: 6d 20 77 68 69 63 68 20 74 6f 20 64 65 6c 65 74  m which to delet
af70: 65 20 6d 75 73 74 20 62 65 20 69 6e 20 74 68 65  e must be in the
af80: 20 73 61 6d 65 0a 64 61 74 61 62 61 73 65 20 61   same.database a
af90: 73 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77  s the table to w
afa0: 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
afb0: 20 69 73 20 61 74 74 61 63 68 65 64 2e 3c 2f 70   is attached.</p
afc0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58  >..<p>^The INDEX
afd0: 45 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e  ED BY and NOT IN
afe0: 44 45 58 45 44 20 63 6c 61 75 73 65 73 20 61 72  DEXED clauses ar
aff0: 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e  e not allowed on
b000: 20 44 45 4c 45 54 45 0a 73 74 61 74 65 6d 65 6e   DELETE.statemen
b010: 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ts within trigge
b020: 72 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  rs.</p>..<p>^The
b030: 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 28 64   LIMIT clause (d
b040: 65 73 63 72 69 62 65 64 20 62 65 6c 6f 77 29 20  escribed below) 
b050: 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64 20 77  is unsupported w
b060: 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 3c  ithin triggers.<
b070: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
b080: 67 6d 65 6e 74 20 74 72 75 6e 63 61 74 65 6f 70  gment truncateop
b090: 74 20 7b 74 72 75 6e 63 61 74 65 20 6f 70 74 69  t {truncate opti
b0a0: 6d 69 7a 61 74 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a  mization}</tcl>.
b0b0: 3c 68 33 3e 54 68 65 20 54 72 75 6e 63 61 74 65  <h3>The Truncate
b0c0: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 3c 2f 68   Optimization</h
b0d0: 33 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65  3>..<p>^When the
b0e0: 20 57 48 45 52 45 20 69 73 20 6f 6d 69 74 74 65   WHERE is omitte
b0f0: 64 20 66 72 6f 6d 20 61 20 44 45 4c 45 54 45 20  d from a DELETE 
b100: 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 74 68  statement and th
b110: 65 20 74 61 62 6c 65 0a 62 65 69 6e 67 20 64 65  e table.being de
b120: 6c 65 74 65 64 20 68 61 73 20 6e 6f 20 74 72 69  leted has no tri
b130: 67 67 65 72 73 2c 0a 53 51 4c 69 74 65 20 75 73  ggers,.SQLite us
b140: 65 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69  es an optimizati
b150: 6f 6e 20 74 6f 20 65 72 61 73 65 20 74 68 65 20  on to erase the 
b160: 65 6e 74 69 72 65 20 74 61 62 6c 65 20 63 6f 6e  entire table con
b170: 74 65 6e 74 0a 77 69 74 68 6f 75 74 20 68 61 76  tent.without hav
b180: 69 6e 67 20 74 6f 20 76 69 73 69 74 20 65 61 63  ing to visit eac
b190: 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74 61 62  h row of the tab
b1a0: 6c 65 20 69 6e 64 69 76 69 64 75 61 6c 6c 79 2e  le individually.
b1b0: 0a 54 68 69 73 20 22 74 72 75 6e 63 61 74 65 22  .This "truncate"
b1c0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 6d 61   optimization ma
b1d0: 6b 65 73 20 74 68 65 20 64 65 6c 65 74 65 20 72  kes the delete r
b1e0: 75 6e 20 6d 75 63 68 20 66 61 73 74 65 72 2e 0a  un much faster..
b1f0: 50 72 69 6f 72 20 74 6f 20 53 51 4c 69 74 65 20  Prior to SQLite 
b200: 5b 76 65 72 73 69 6f 6e 20 33 2e 36 2e 35 5d 2c  [version 3.6.5],
b210: 20 74 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70   the truncate op
b220: 74 69 6d 69 7a 61 74 69 6f 6e 0a 61 6c 73 6f 20  timization.also 
b230: 6d 65 61 6e 74 20 74 68 61 74 20 74 68 65 20 5b  meant that the [
b240: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
b250: 29 5d 20 61 6e 64 0a 5b 73 71 6c 69 74 65 33 5f  )] and.[sqlite3_
b260: 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d  total_changes()]
b270: 20 69 6e 74 65 72 66 61 63 65 73 0a 61 6e 64 20   interfaces.and 
b280: 74 68 65 20 5b 63 6f 75 6e 74 5f 63 68 61 6e 67  the [count_chang
b290: 65 73 20 70 72 61 67 6d 61 5d 0a 77 69 6c 6c 20  es pragma].will 
b2a0: 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 72 65 74  not actually ret
b2b0: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
b2c0: 66 20 64 65 6c 65 74 65 64 20 72 6f 77 73 2e 20  f deleted rows. 
b2d0: 20 0a 54 68 61 74 20 70 72 6f 62 6c 65 6d 20 68   .That problem h
b2e0: 61 73 20 62 65 65 6e 20 66 69 78 65 64 20 61 73  as been fixed as
b2f0: 20 6f 66 20 5b 76 65 72 73 69 6f 6e 20 33 2e 36   of [version 3.6
b300: 2e 35 5d 2e 0a 0a 3c 70 3e 5e 54 68 65 20 74 72  .5]...<p>^The tr
b310: 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74  uncate optimizat
b320: 69 6f 6e 20 63 61 6e 20 62 65 20 70 65 72 6d 61  ion can be perma
b330: 6e 65 6e 74 6c 79 20 64 69 73 61 62 6c 65 64 20  nently disabled 
b340: 66 6f 72 20 61 6c 6c 20 71 75 65 72 69 65 73 0a  for all queries.
b350: 62 79 20 72 65 63 6f 6d 70 69 6c 69 6e 67 0a 53  by recompiling.S
b360: 51 4c 69 74 65 20 77 69 74 68 20 74 68 65 20 5b  QLite with the [
b370: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 55 4e  SQLITE_OMIT_TRUN
b380: 43 41 54 45 5f 4f 50 54 49 4d 49 5a 41 54 49 4f  CATE_OPTIMIZATIO
b390: 4e 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  N] compile-time 
b3a0: 73 77 69 74 63 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e  switch.</p>..<p>
b3b0: 54 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74  The truncate opt
b3c0: 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20 61 6c  imization can al
b3d0: 73 6f 20 62 65 20 64 69 73 61 62 6c 65 64 20 61  so be disabled a
b3e0: 74 20 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 0a  t runtime using.
b3f0: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 65 74  the [sqlite3_set
b400: 5f 61 75 74 68 6f 72 69 7a 65 72 28 29 5d 20 69  _authorizer()] i
b410: 6e 74 65 72 66 61 63 65 2e 20 20 5e 49 66 20 61  nterface.  ^If a
b420: 6e 20 61 75 74 68 6f 72 69 7a 65 72 20 63 61 6c  n authorizer cal
b430: 6c 62 61 63 6b 0a 72 65 74 75 72 6e 73 20 5b 53  lback.returns [S
b440: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 5d 20 66 6f  QLITE_IGNORE] fo
b450: 72 20 61 6e 20 5b 53 51 4c 49 54 45 5f 44 45 4c  r an [SQLITE_DEL
b460: 45 54 45 5d 20 61 63 74 69 6f 6e 20 63 6f 64 65  ETE] action code
b470: 2c 20 74 68 65 6e 0a 74 68 65 20 44 45 4c 45 54  , then.the DELET
b480: 45 20 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c  E operation will
b490: 20 70 72 6f 63 65 65 64 20 62 75 74 20 74 68 65   proceed but the
b4a0: 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69   truncate optimi
b4b0: 7a 61 74 69 6f 6e 20 77 69 6c 6c 0a 62 65 20 62  zation will.be b
b4c0: 79 70 61 73 73 65 64 20 61 6e 64 20 72 6f 77 73  ypassed and rows
b4d0: 20 77 69 6c 6c 20 62 65 20 64 65 6c 65 74 65 64   will be deleted
b4e0: 20 6f 6e 65 20 62 79 20 6f 6e 65 2e 3c 2f 70 3e   one by one.</p>
b4f0: 0a 0a 3c 68 33 3e 55 73 65 20 4f 66 20 4c 49 4d  ..<h3>Use Of LIM
b500: 49 54 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66  IT</h3>..<p>^(If
b510: 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69   SQLite is compi
b520: 6c 65 64 20 77 69 74 68 20 74 68 65 20 5b 53 51  led with the [SQ
b530: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
b540: 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d  TE_DELETE_LIMIT]
b550: 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70  .compile-time op
b560: 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 73  tion, then the s
b570: 79 6e 74 61 78 20 6f 66 20 74 68 65 20 44 45 4c  yntax of the DEL
b580: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ETE statement is
b590: 0a 65 78 74 65 6e 64 65 64 20 62 79 20 74 68 65  .extended by the
b5a0: 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6f 70 74   addition of opt
b5b0: 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59 20 61  ional ORDER BY a
b5c0: 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73  nd LIMIT clauses
b5d0: 3a 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75  :)^</p>..<tcl>Bu
b5e0: 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65 6c 65  bbleDiagram dele
b5f0: 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65 64 3c  te-stmt-limited<
b600: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f  /tcl>..<p>^The o
b610: 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 63 6c  ptional LIMIT cl
b620: 61 75 73 65 20 63 61 6e 20 62 65 20 75 73 65 64  ause can be used
b630: 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75   to limit the nu
b640: 6d 62 65 72 20 6f 66 0a 72 6f 77 73 20 64 65 6c  mber of.rows del
b650: 65 74 65 64 2c 20 61 6e 64 20 74 68 65 72 65 62  eted, and thereb
b660: 79 20 6c 69 6d 69 74 20 74 68 65 20 73 69 7a 65  y limit the size
b670: 20 6f 66 20 74 68 65 20 74 72 61 6e 73 61 63 74   of the transact
b680: 69 6f 6e 2e 0a 5e 54 68 65 20 4f 52 44 45 52 20  ion..^The ORDER 
b690: 42 59 20 63 6c 61 75 73 65 20 6f 6e 20 61 20 44  BY clause on a D
b6a0: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 0a  ELETE statement.
b6b0: 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20  is used only to 
b6c0: 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 20  determine which 
b6d0: 72 6f 77 73 20 66 61 6c 6c 0a 77 69 74 68 69 6e  rows fall.within
b6e0: 20 74 68 65 20 4c 49 4d 49 54 2e 20 20 5e 54 68   the LIMIT.  ^Th
b6f0: 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68  e order in which
b700: 20 72 6f 77 73 20 61 72 65 20 64 65 6c 65 74 65   rows are delete
b710: 64 20 69 73 20 61 72 62 69 74 72 61 72 79 0a 61  d is arbitrary.a
b720: 6e 64 20 69 73 20 6e 6f 74 20 64 65 74 65 72 6d  nd is not determ
b730: 69 6e 65 64 20 62 79 20 74 68 65 20 4f 52 44 45  ined by the ORDE
b740: 52 20 42 59 20 63 6c 61 75 73 65 2e 3c 2f 70 3e  R BY clause.</p>
b750: 0a 0a 3c 70 3e 5e 54 68 65 20 70 72 65 73 65 6e  ..<p>^The presen
b760: 63 65 20 6f 66 20 61 20 4c 49 4d 49 54 20 63 6c  ce of a LIMIT cl
b770: 61 75 73 65 20 64 65 66 65 61 74 73 20 74 68 65  ause defeats the
b780: 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69   truncate optimi
b790: 7a 61 74 69 6f 6e 0a 63 61 75 73 69 6e 67 20 61  zation.causing a
b7a0: 6c 6c 20 72 6f 77 73 20 62 65 69 6e 67 20 64 65  ll rows being de
b7b0: 6c 65 74 65 64 20 74 6f 20 62 65 20 76 69 73 69  leted to be visi
b7c0: 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  ted.</p>..<tcl>.
b7d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b7e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b7f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
b820: 53 65 63 74 69 6f 6e 20 7b 44 45 54 41 43 48 20  Section {DETACH 
b830: 44 41 54 41 42 41 53 45 7d 20 64 65 74 61 63 68  DATABASE} detach
b840: 20 2a 44 45 54 41 43 48 0a 0a 42 75 62 62 6c 65   *DETACH..Bubble
b850: 44 69 61 67 72 61 6d 20 64 65 74 61 63 68 2d 73  Diagram detach-s
b860: 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  tmt 1.</tcl>..<p
b870: 3e 5e 54 68 69 73 20 73 74 61 74 65 6d 65 6e 74  >^This statement
b880: 20 64 65 74 61 63 68 65 73 20 61 6e 20 61 64 64   detaches an add
b890: 69 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65  itional database
b8a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76   connection prev
b8b0: 69 6f 75 73 6c 79 20 0a 61 74 74 61 63 68 65 64  iously .attached
b8c0: 20 75 73 69 6e 67 20 74 68 65 20 5b 41 54 54 41   using the [ATTA
b8d0: 43 48 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  CH] statement.  
b8e0: 0a 5e 49 74 20 69 73 20 70 6f 73 73 69 62 6c 65  .^It is possible
b8f0: 20 74 6f 20 68 61 76 65 20 74 68 65 20 73 61 6d   to have the sam
b900: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
b910: 61 74 74 61 63 68 65 64 20 6d 75 6c 74 69 70 6c  attached multipl
b920: 65 20 74 69 6d 65 73 20 75 73 69 6e 67 20 0a 64  e times using .d
b930: 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 73 2c 20  ifferent names, 
b940: 61 6e 64 20 64 65 74 61 63 68 69 6e 67 20 6f 6e  and detaching on
b950: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  e connection to 
b960: 61 20 66 69 6c 65 20 77 69 6c 6c 20 6c 65 61 76  a file will leav
b970: 65 20 74 68 65 20 0a 6f 74 68 65 72 73 20 69 6e  e the .others in
b980: 74 61 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  tact.</p>..<p>^T
b990: 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 77 69  his statement wi
b9a0: 6c 6c 20 66 61 69 6c 20 69 66 20 53 51 4c 69 74  ll fail if SQLit
b9b0: 65 20 69 73 20 69 6e 20 74 68 65 20 6d 69 64 64  e is in the midd
b9c0: 6c 65 20 6f 66 20 61 20 74 72 61 6e 73 61 63 74  le of a transact
b9d0: 69 6f 6e 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e  ion.</p>...<tcl>
b9e0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
b9f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ba00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ba10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ba20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
ba30: 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 49 4e  Section {DROP IN
ba40: 44 45 58 7d 20 64 72 6f 70 69 6e 64 65 78 20 7b  DEX} dropindex {
ba50: 7b 44 52 4f 50 20 49 4e 44 45 58 7d 7d 0a 0a 42  {DROP INDEX}}..B
ba60: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f  ubbleDiagram dro
ba70: 70 2d 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a 3c  p-index-stmt 1.<
ba80: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44  /tcl>..<p>^The D
ba90: 52 4f 50 20 49 4e 44 45 58 20 73 74 61 74 65 6d  ROP INDEX statem
baa0: 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 6e 20 69  ent removes an i
bab0: 6e 64 65 78 20 61 64 64 65 64 0a 77 69 74 68 20  ndex added.with 
bac0: 74 68 65 20 5b 43 52 45 41 54 45 20 49 4e 44 45  the [CREATE INDE
bad0: 58 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  X] statement.  T
bae0: 68 65 20 69 6e 64 65 78 20 69 73 20 63 6f 6d 70  he index is comp
baf0: 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66  letely removed f
bb00: 72 6f 6d 0a 74 68 65 20 64 69 73 6b 2e 20 20 54  rom.the disk.  T
bb10: 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 6f 20 72  he only way to r
bb20: 65 63 6f 76 65 72 20 74 68 65 20 69 6e 64 65 78  ecover the index
bb30: 20 69 73 20 74 6f 20 72 65 65 6e 74 65 72 20 74   is to reenter t
bb40: 68 65 0a 61 70 70 72 6f 70 72 69 61 74 65 20 5b  he.appropriate [
bb50: 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20 63 6f  CREATE INDEX] co
bb60: 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  mmand.</p>..<tcl
bb70: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
bb80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bb90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bba0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bbb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bbc0: 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54  .Section {DROP T
bbd0: 41 42 4c 45 7d 20 64 72 6f 70 74 61 62 6c 65 20  ABLE} droptable 
bbe0: 7b 7b 44 52 4f 50 20 54 41 42 4c 45 7d 7d 0a 0a  {{DROP TABLE}}..
bbf0: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72  BubbleDiagram dr
bc00: 6f 70 2d 74 61 62 6c 65 2d 73 74 6d 74 20 31 0a  op-table-stmt 1.
bc10: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
bc20: 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65  DROP TABLE state
bc30: 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74  ment removes a t
bc40: 61 62 6c 65 20 61 64 64 65 64 20 77 69 74 68 20  able added with 
bc50: 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c  the.[CREATE TABL
bc60: 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  E] statement.  T
bc70: 68 65 20 6e 61 6d 65 20 73 70 65 63 69 66 69 65  he name specifie
bc80: 64 20 69 73 20 74 68 65 0a 74 61 62 6c 65 20 6e  d is the.table n
bc90: 61 6d 65 2e 20 20 5e 54 68 65 20 64 72 6f 70 70  ame.  ^The dropp
bca0: 65 64 20 74 61 62 6c 65 20 69 73 20 63 6f 6d 70  ed table is comp
bcb0: 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66  letely removed f
bcc0: 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
bcd0: 20 0a 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65   .schema and the
bce0: 20 64 69 73 6b 20 66 69 6c 65 2e 20 20 54 68 65   disk file.  The
bcf0: 20 74 61 62 6c 65 20 63 61 6e 20 6e 6f 74 20 62   table can not b
bd00: 65 20 72 65 63 6f 76 65 72 65 64 2e 20 20 0a 5e  e recovered.  .^
bd10: 41 6c 6c 20 69 6e 64 69 63 65 73 20 61 6e 64 20  All indices and 
bd20: 74 72 69 67 67 65 72 73 0a 61 73 73 6f 63 69 61  triggers.associa
bd30: 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
bd40: 6c 65 20 61 72 65 20 61 6c 73 6f 20 64 65 6c 65  le are also dele
bd50: 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ted.</p>..<p>^Th
bd60: 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 45 58  e optional IF EX
bd70: 49 53 54 53 20 63 6c 61 75 73 65 20 73 75 70 70  ISTS clause supp
bd80: 72 65 73 73 65 73 20 74 68 65 20 65 72 72 6f 72  resses the error
bd90: 20 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d   that would norm
bda0: 61 6c 6c 79 0a 72 65 73 75 6c 74 20 69 66 20 74  ally.result if t
bdb0: 68 65 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f  he table does no
bdc0: 74 20 65 78 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 70  t exist.</p>..<p
bdd0: 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65  >^If [foreign ke
bde0: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61  y constraints] a
bdf0: 72 65 20 65 6e 61 62 6c 65 64 2c 20 61 20 44 52  re enabled, a DR
be00: 4f 50 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  OP TABLE command
be10: 20 70 65 72 66 6f 72 6d 73 20 61 6e 0a 69 6d 70   performs an.imp
be20: 6c 69 63 69 74 20 5b 44 45 4c 45 54 45 20 7c 20  licit [DELETE | 
be30: 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b  DELETE FROM &lt;
be40: 74 62 6c 26 67 74 3b 5d 20 63 6f 6d 6d 61 6e 64  tbl&gt;] command
be50: 20 62 65 66 6f 72 65 20 72 65 6d 6f 76 69 6e 67   before removing
be60: 20 74 68 65 0a 74 61 62 6c 65 20 66 72 6f 6d 20   the.table from 
be70: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
be80: 65 6d 61 2e 20 5e 41 6e 79 20 74 72 69 67 67 65  ema. ^Any trigge
be90: 72 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  rs attached to t
bea0: 68 65 20 74 61 62 6c 65 20 61 72 65 0a 64 72 6f  he table are.dro
beb0: 70 70 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61  pped from the da
bec0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 62 65  tabase schema be
bed0: 66 6f 72 65 20 74 68 65 20 69 6d 70 6c 69 63 69  fore the implici
bee0: 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c  t DELETE FROM &l
bef0: 74 3b 74 62 6c 26 67 74 3b 20 0a 69 73 20 65 78  t;tbl&gt; .is ex
bf00: 65 63 75 74 65 64 2c 20 73 6f 20 74 68 69 73 20  ecuted, so this 
bf10: 63 61 6e 6e 6f 74 20 63 61 75 73 65 20 61 6e 79  cannot cause any
bf20: 20 74 72 69 67 67 65 72 73 20 74 6f 20 66 69 72   triggers to fir
bf30: 65 2e 20 42 79 20 63 6f 6e 74 72 61 73 74 2c 20  e. By contrast, 
bf40: 5e 61 6e 0a 69 6d 70 6c 69 63 69 74 20 44 45 4c  ^an.implicit DEL
bf50: 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c  ETE FROM &lt;tbl
bf60: 26 67 74 3b 20 64 6f 65 73 20 63 61 75 73 65 20  &gt; does cause 
bf70: 61 6e 79 20 63 6f 6e 66 69 67 75 72 65 64 0a 5b  any configured.[
bf80: 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69  foreign key acti
bf90: 6f 6e 73 5d 20 74 6f 20 74 61 6b 65 20 70 6c 61  ons] to take pla
bfa0: 63 65 2e 20 0a 5e 49 66 20 74 68 65 20 69 6d 70  ce. .^If the imp
bfb0: 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f  licit DELETE FRO
bfc0: 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 65 78  M &lt;tbl&gt; ex
bfd0: 65 63 75 74 65 64 0a 61 73 20 70 61 72 74 20 6f  ecuted.as part o
bfe0: 66 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63  f a DROP TABLE c
bff0: 6f 6d 6d 61 6e 64 20 76 69 6f 6c 61 74 65 73 20  ommand violates 
c000: 61 6e 79 20 69 6d 6d 65 64 69 61 74 65 20 66 6f  any immediate fo
c010: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
c020: 61 69 6e 74 73 2c 0a 61 6e 20 65 72 72 6f 72 20  aints,.an error 
c030: 69 73 20 72 65 74 75 72 6e 65 64 20 61 6e 64 20  is returned and 
c040: 74 68 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74  the table is not
c050: 20 64 72 6f 70 70 65 64 2e 20 5e 49 66 20 0a 74   dropped. ^If .t
c060: 68 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45  he implicit DELE
c070: 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26  TE FROM &lt;tbl&
c080: 67 74 3b 20 63 61 75 73 65 73 20 61 6e 79 20 0a  gt; causes any .
c090: 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e  deferred foreign
c0a0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
c0b0: 20 74 6f 20 62 65 20 76 69 6f 6c 61 74 65 64 2c   to be violated,
c0c0: 20 61 6e 64 20 74 68 65 20 76 69 6f 6c 61 74 69   and the violati
c0d0: 6f 6e 73 20 73 74 69 6c 6c 0a 65 78 69 73 74 20  ons still.exist 
c0e0: 77 68 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63  when the transac
c0f0: 74 69 6f 6e 20 69 73 20 63 6f 6d 6d 69 74 74 65  tion is committe
c100: 64 2c 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72  d, an error is r
c110: 65 74 75 72 6e 65 64 20 61 74 20 74 68 65 20 74  eturned at the t
c120: 69 6d 65 0a 6f 66 20 63 6f 6d 6d 69 74 2e 0a 0a  ime.of commit...
c130: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
c140: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c150: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c160: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c170: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c180: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52  ####.Section {DR
c190: 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70  OP TRIGGER} drop
c1a0: 74 72 69 67 67 65 72 20 7b 7b 44 52 4f 50 20 54  trigger {{DROP T
c1b0: 52 49 47 47 45 52 7d 7d 0a 0a 42 75 62 62 6c 65  RIGGER}}..Bubble
c1c0: 44 69 61 67 72 61 6d 20 64 72 6f 70 2d 74 72 69  Diagram drop-tri
c1d0: 67 67 65 72 2d 73 74 6d 74 20 31 0a 3c 2f 74 63  gger-stmt 1.</tc
c1e0: 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50  l>..<p>^The DROP
c1f0: 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d 65   TRIGGER stateme
c200: 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74 72 69  nt removes a tri
c210: 67 67 65 72 20 63 72 65 61 74 65 64 20 62 79 20  gger created by 
c220: 74 68 65 20 0a 5b 43 52 45 41 54 45 20 54 52 49  the .[CREATE TRI
c230: 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e  GGER] statement.
c240: 20 20 5e 54 68 65 20 74 72 69 67 67 65 72 20 69    ^The trigger i
c250: 73 20 0a 64 65 6c 65 74 65 64 20 66 72 6f 6d 20  s .deleted from 
c260: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
c270: 65 6d 61 2e 20 5e 4e 6f 74 65 20 74 68 61 74 20  ema. ^Note that 
c280: 74 72 69 67 67 65 72 73 20 61 72 65 20 61 75 74  triggers are aut
c290: 6f 6d 61 74 69 63 61 6c 6c 79 20 0a 64 72 6f 70  omatically .drop
c2a0: 70 65 64 20 77 68 65 6e 20 74 68 65 20 61 73 73  ped when the ass
c2b0: 6f 63 69 61 74 65 64 20 74 61 62 6c 65 20 69 73  ociated table is
c2c0: 20 64 72 6f 70 70 65 64 2e 3c 2f 70 3e 0a 0a 3c   dropped.</p>..<
c2d0: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
c2e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c2f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c320: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f  ###.Section {DRO
c330: 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65 77  P VIEW} dropview
c340: 20 7b 7b 44 52 4f 50 20 56 49 45 57 7d 7d 0a 0a   {{DROP VIEW}}..
c350: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72  BubbleDiagram dr
c360: 6f 70 2d 76 69 65 77 2d 73 74 6d 74 20 31 0a 3c  op-view-stmt 1.<
c370: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44  /tcl>..<p>^The D
c380: 52 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d 65  ROP VIEW stateme
c390: 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 76 69 65  nt removes a vie
c3a0: 77 20 63 72 65 61 74 65 64 20 62 79 20 74 68 65  w created by the
c3b0: 0a 5b 43 52 45 41 54 45 20 56 49 45 57 5d 20 73  .[CREATE VIEW] s
c3c0: 74 61 74 65 6d 65 6e 74 2e 20 20 5e 54 68 65 20  tatement.  ^The 
c3d0: 6e 61 6d 65 20 73 70 65 63 69 66 69 65 64 20 69  name specified i
c3e0: 73 20 74 68 65 20 0a 76 69 65 77 20 6e 61 6d 65  s the .view name
c3f0: 2e 20 20 5e 49 74 20 69 73 20 72 65 6d 6f 76 65  .  ^It is remove
c400: 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  d from the datab
c410: 61 73 65 20 73 63 68 65 6d 61 2c 20 62 75 74 20  ase schema, but 
c420: 6e 6f 20 61 63 74 75 61 6c 20 64 61 74 61 20 0a  no actual data .
c430: 69 6e 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  in the underlyin
c440: 67 20 62 61 73 65 20 74 61 62 6c 65 73 20 69 73  g base tables is
c450: 20 6d 6f 64 69 66 69 65 64 2e 3c 2f 70 3e 0a 0a   modified.</p>..
c460: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
c470: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c4a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c4b0: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 45 58 50  ####.Section EXP
c4c0: 4c 41 49 4e 20 65 78 70 6c 61 69 6e 20 45 58 50  LAIN explain EXP
c4d0: 4c 41 49 4e 0a 0a 42 75 62 62 6c 65 44 69 61 67  LAIN..BubbleDiag
c4e0: 72 61 6d 20 73 71 6c 2d 73 74 6d 74 0a 3c 2f 74  ram sql-stmt.</t
c4f0: 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 53 51 4c 20  cl>..<p>^An SQL 
c500: 73 74 61 74 65 6d 65 6e 74 20 63 61 6e 20 62 65  statement can be
c510: 20 70 72 65 63 65 64 65 64 20 62 79 20 74 68 65   preceded by the
c520: 20 6b 65 79 77 6f 72 64 20 22 45 58 50 4c 41 49   keyword "EXPLAI
c530: 4e 22 20 6f 72 0a 62 79 20 74 68 65 20 70 68 72  N" or.by the phr
c540: 61 73 65 20 22 45 58 50 4c 41 49 4e 20 51 55 45  ase "EXPLAIN QUE
c550: 52 59 20 50 4c 41 4e 22 2e 20 20 5e 45 69 74 68  RY PLAN".  ^Eith
c560: 65 72 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20  er modification 
c570: 63 61 75 73 65 73 20 74 68 65 0a 53 51 4c 20 73  causes the.SQL s
c580: 74 61 74 65 6d 65 6e 74 20 74 6f 20 62 65 68 61  tatement to beha
c590: 76 65 20 61 73 20 61 20 71 75 65 72 79 20 61 6e  ve as a query an
c5a0: 64 20 74 6f 20 72 65 74 75 72 6e 20 69 6e 66 6f  d to return info
c5b0: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 0a 68 6f  rmation about.ho
c5c0: 77 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  w the SQL statem
c5d0: 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20 6f  ent would have o
c5e0: 70 65 72 61 74 65 64 20 69 66 20 74 68 65 20 45  perated if the E
c5f0: 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20 6f  XPLAIN keyword o
c600: 72 0a 70 68 72 61 73 65 20 68 61 64 20 62 65 65  r.phrase had bee
c610: 6e 20 6f 6d 69 74 74 65 64 2e 3c 2f 70 3e 0a 0a  n omitted.</p>..
c620: 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 45 58 50  <p>^When the EXP
c630: 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20 61 70 70  LAIN keyword app
c640: 65 61 72 73 20 62 79 20 69 74 73 65 6c 66 20 69  ears by itself i
c650: 74 20 63 61 75 73 65 73 20 74 68 65 20 73 74 61  t causes the sta
c660: 74 65 6d 65 6e 74 0a 74 6f 20 62 65 68 61 76 65  tement.to behave
c670: 20 61 73 20 61 20 71 75 65 72 79 20 74 68 61 74   as a query that
c680: 20 72 65 74 75 72 6e 73 20 74 68 65 20 73 65 71   returns the seq
c690: 75 65 6e 63 65 20 6f 66 20 0a 5b 76 69 72 74 75  uence of .[virtu
c6a0: 61 6c 20 6d 61 63 68 69 6e 65 20 69 6e 73 74 72  al machine instr
c6b0: 75 63 74 69 6f 6e 73 5d 20 69 74 20 77 6f 75 6c  uctions] it woul
c6c0: 64 20 68 61 76 65 0a 75 73 65 64 20 74 6f 20 65  d have.used to e
c6d0: 78 65 63 75 74 65 20 74 68 65 20 63 6f 6d 6d 61  xecute the comma
c6e0: 6e 64 20 68 61 64 20 74 68 65 20 45 58 50 4c 41  nd had the EXPLA
c6f0: 49 4e 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 62  IN keyword not b
c700: 65 65 6e 20 70 72 65 73 65 6e 74 2e 0a 5e 57 68  een present..^Wh
c710: 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51  en the EXPLAIN Q
c720: 55 45 52 59 20 50 4c 41 4e 20 70 68 72 61 73 65  UERY PLAN phrase
c730: 20 61 70 70 65 61 72 73 2c 20 74 68 65 20 73 74   appears, the st
c740: 61 74 65 6d 65 6e 74 20 72 65 74 75 72 6e 73 0a  atement returns.
c750: 68 69 67 68 2d 6c 65 76 65 6c 20 69 6e 66 6f 72  high-level infor
c760: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 77 68 61  mation about wha
c770: 74 20 69 6e 64 69 63 65 73 20 77 6f 75 6c 64 20  t indices would 
c780: 68 61 76 65 20 62 65 65 6e 20 75 73 65 64 2e 3c  have been used.<
c790: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70  /p>..<p>The outp
c7a0: 75 74 20 66 72 6f 6d 20 45 58 50 4c 41 49 4e 20  ut from EXPLAIN 
c7b0: 61 6e 64 20 45 58 50 4c 41 49 4e 20 51 55 45 52  and EXPLAIN QUER
c7c0: 59 20 50 4c 41 4e 20 69 73 20 69 6e 74 65 6e 64  Y PLAN is intend
c7d0: 65 64 20 66 6f 72 0a 69 6e 74 65 72 61 63 74 69  ed for.interacti
c7e0: 76 65 20 61 6e 61 6c 79 73 69 73 20 61 6e 64 20  ve analysis and 
c7f0: 74 72 6f 75 62 6c 65 73 68 6f 6f 74 69 6e 67 20  troubleshooting 
c800: 6f 6e 6c 79 2e 20 20 54 68 65 20 64 65 74 61 69  only.  The detai
c810: 6c 73 20 6f 66 20 74 68 65 20 0a 6f 75 74 70 75  ls of the .outpu
c820: 74 20 66 6f 72 6d 61 74 20 61 72 65 20 73 75 62  t format are sub
c830: 6a 65 63 74 20 74 6f 20 63 68 61 6e 67 65 20 66  ject to change f
c840: 72 6f 6d 20 6f 6e 65 20 72 65 6c 65 61 73 65 20  rom one release 
c850: 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 74 68 65  of SQLite to the
c860: 20 6e 65 78 74 2e 0a 41 70 70 6c 69 63 61 74 69   next..Applicati
c870: 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74 20 75  ons should not u
c880: 73 65 20 45 58 50 4c 41 49 4e 20 6f 72 20 45 58  se EXPLAIN or EX
c890: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
c8a0: 20 73 69 6e 63 65 0a 74 68 65 69 72 20 65 78 61   since.their exa
c8b0: 63 74 20 62 65 68 61 76 69 6f 72 20 69 73 20 75  ct behavior is u
c8c0: 6e 64 6f 63 75 6d 65 6e 74 65 64 2c 20 75 6e 73  ndocumented, uns
c8d0: 70 65 63 69 66 69 65 64 2c 20 61 6e 64 20 76 61  pecified, and va
c8e0: 72 69 61 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63  riable.</p>..<tc
c8f0: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
c900: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c910: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c920: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c930: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c940: 23 0a 53 65 63 74 69 6f 6e 20 65 78 70 72 65 73  #.Section expres
c950: 73 69 6f 6e 20 65 78 70 72 20 7b 2a 65 78 70 72  sion expr {*expr
c960: 65 73 73 69 6f 6e 20 7b 65 78 70 72 65 73 73 69  ession {expressi
c970: 6f 6e 20 73 79 6e 74 61 78 7d 7d 0a 0a 42 75 62  on syntax}}..Bub
c980: 62 6c 65 44 69 61 67 72 61 6d 20 65 78 70 72 20  bleDiagram expr 
c990: 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  1.BubbleDiagram 
c9a0: 6c 69 74 65 72 61 6c 2d 76 61 6c 75 65 0a 42 75  literal-value.Bu
c9b0: 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69 67 6e  bbleDiagram sign
c9c0: 65 64 2d 6e 75 6d 62 65 72 0a 42 75 62 62 6c 65  ed-number.Bubble
c9d0: 44 69 61 67 72 61 6d 20 72 61 69 73 65 2d 66 75  Diagram raise-fu
c9e0: 6e 63 74 69 6f 6e 0a 3c 2f 74 63 6c 3e 0a 0a 3c  nction.</tcl>..<
c9f0: 70 3e 54 68 69 73 20 73 65 63 74 69 6f 6e 20 69  p>This section i
ca00: 73 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  s different from
ca10: 20 74 68 65 20 6f 74 68 65 72 73 2e 20 20 4d 6f   the others.  Mo
ca20: 73 74 20 6f 74 68 65 72 20 73 65 63 74 69 6f 6e  st other section
ca30: 73 20 6f 66 0a 74 68 69 73 20 64 6f 63 75 6d 65  s of.this docume
ca40: 6e 74 20 74 61 6c 6b 73 20 61 62 6f 75 74 20 61  nt talks about a
ca50: 20 70 61 72 74 69 63 75 6c 61 72 20 53 51 4c 20   particular SQL 
ca60: 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20 73  command.  This s
ca70: 65 63 74 69 6f 6e 20 64 6f 65 73 0a 6e 6f 74 20  ection does.not 
ca80: 74 61 6c 6b 20 61 62 6f 75 74 20 61 20 73 74 61  talk about a sta
ca90: 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61 6e 64 20  ndalone command 
caa0: 62 75 74 20 61 62 6f 75 74 20 22 65 78 70 72 65  but about "expre
cab0: 73 73 69 6f 6e 73 22 20 77 68 69 63 68 20 61 72  ssions" which ar
cac0: 65 20 0a 73 75 62 63 6f 6d 70 6f 6e 65 6e 74 73  e .subcomponents
cad0: 20 6f 66 20 6d 6f 73 74 20 6f 74 68 65 72 20 63   of most other c
cae0: 6f 6d 6d 61 6e 64 73 2e 3c 2f 70 3e 0a 0a 3c 74  ommands.</p>..<t
caf0: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62  cl>hd_fragment b
cb00: 69 6e 61 72 79 6f 70 73 20 7b 62 69 6e 61 72 79  inaryops {binary
cb10: 20 6f 70 65 72 61 74 6f 72 73 7d 3c 2f 74 63 6c   operators}</tcl
cb20: 3e 0a 3c 68 33 3e 4f 70 65 72 61 74 6f 72 73 3c  >.<h3>Operators<
cb30: 2f 68 33 3e 0a 3c 70 3e 5e 28 53 51 4c 69 74 65  /h3>.<p>^(SQLite
cb40: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 74 68 65   understands the
cb50: 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 69 6e 61 72   following binar
cb60: 79 20 6f 70 65 72 61 74 6f 72 73 2c 20 69 6e 20  y operators, in 
cb70: 6f 72 64 65 72 20 66 72 6f 6d 0a 68 69 67 68 65  order from.highe
cb80: 73 74 20 74 6f 20 6c 6f 77 65 73 74 20 70 72 65  st to lowest pre
cb90: 63 65 64 65 6e 63 65 3a 3c 2f 70 3e 0a 0a 3c 62  cedence:</p>..<b
cba0: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
cbb0: 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32 63  <font color="#2c
cbc0: 32 63 66 30 22 3e 3c 62 69 67 3e 7c 7c 0a 2a 20  2cf0"><big>||.* 
cbd0: 20 20 20 2f 20 20 20 20 25 0a 2b 20 20 20 20 2d     /    %.+    -
cbe0: 0a 26 6c 74 3b 26 6c 74 3b 20 20 20 26 67 74 3b  .&lt;&lt;   &gt;
cbf0: 26 67 74 3b 20 20 20 26 61 6d 70 3b 20 20 20 20  &gt;   &amp;    
cc00: 7c 0a 26 6c 74 3b 20 20 20 20 26 6c 74 3b 3d 20  |.&lt;    &lt;= 
cc10: 20 20 26 67 74 3b 20 20 20 20 26 67 74 3b 3d 0a    &gt;    &gt;=.
cc20: 3d 20 20 20 20 3d 3d 20 20 20 21 3d 20 20 20 26  =    ==   !=   &
cc30: 6c 74 3b 26 67 74 3b 20 20 20 3c 2f 62 69 67 3e  lt;&gt;   </big>
cc40: 49 53 20 20 20 49 53 20 4e 4f 54 20 20 20 49 4e  IS   IS NOT   IN
cc50: 20 20 20 4c 49 4b 45 20 20 20 47 4c 4f 42 20 20     LIKE   GLOB  
cc60: 20 4d 41 54 43 48 20 20 20 52 45 47 45 58 50 0a   MATCH   REGEXP.
cc70: 41 4e 44 20 20 20 0a 4f 52 3c 2f 66 6f 6e 74 3e  AND   .OR</font>
cc80: 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
cc90: 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 28 53 75 70  ote>)^..<p>^(Sup
cca0: 70 6f 72 74 65 64 20 75 6e 61 72 79 20 70 72 65  ported unary pre
ccb0: 66 69 78 20 6f 70 65 72 61 74 6f 72 73 20 61 72  fix operators ar
ccc0: 65 20 74 68 65 73 65 3a 3c 2f 70 3e 0a 0a 3c 62  e these:</p>..<b
ccd0: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
cce0: 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32 63  <font color="#2c
ccf0: 32 63 66 30 22 3e 3c 62 69 67 3e 2d 20 20 20 20  2cf0"><big>-    
cd00: 2b 20 20 20 20 7e 20 20 20 20 4e 4f 54 3c 2f 62  +    ~    NOT</b
cd10: 69 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65  ig></font>.</pre
cd20: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  ></blockquote>)^
cd30: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
cd40: 6e 74 20 63 6f 6c 6c 61 74 65 6f 70 20 7b 43 4f  nt collateop {CO
cd50: 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 7d 3c  LLATE operator}<
cd60: 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 43 4f  /tcl>.<p>^The CO
cd70: 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 69  LLATE operator i
cd80: 73 20 61 20 75 6e 61 72 79 20 70 6f 73 74 66 69  s a unary postfi
cd90: 78 0a 6f 70 65 72 61 74 6f 72 20 74 68 61 74 20  x.operator that 
cda0: 61 73 73 69 67 6e 73 20 61 20 5b 63 6f 6c 6c 61  assigns a [colla
cdb0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 5d 20 74  ting sequence] t
cdc0: 6f 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e  o an expression.
cdd0: 0a 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70  .^The COLLATE op
cde0: 65 72 61 74 6f 72 20 68 61 73 20 61 20 68 69 67  erator has a hig
cdf0: 68 65 72 20 70 72 65 63 65 64 65 6e 63 65 20 28  her precedence (
ce00: 62 69 6e 64 73 20 6d 6f 72 65 20 74 69 67 68 74  binds more tight
ce10: 6c 79 29 20 74 68 61 6e 20 61 6e 79 0a 70 72 65  ly) than any.pre
ce20: 66 69 78 20 75 6e 61 72 79 20 6f 70 65 72 61 74  fix unary operat
ce30: 6f 72 20 6f 72 20 61 6e 79 20 62 69 6e 61 72 79  or or any binary
ce40: 20 6f 70 65 72 61 74 6f 72 2e 0a 5e 54 68 65 20   operator..^The 
ce50: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
ce60: 63 65 20 73 65 74 20 62 79 20 74 68 65 20 43 4f  ce set by the CO
ce70: 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 6f  LLATE operator o
ce80: 76 65 72 72 69 64 65 73 20 74 68 65 0a 63 6f 6c  verrides the.col
ce90: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
cea0: 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
ceb0: 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65  e COLLATE clause
cec0: 20 69 6e 20 61 20 74 61 62 6c 65 0a 5b 63 6f 6c   in a table.[col
ced0: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 5d 2e  umn definition].
cee0: 0a 53 65 65 20 74 68 65 20 5b 63 6f 6c 6c 61 74  .See the [collat
cef0: 69 6e 67 20 73 65 71 75 65 6e 63 65 7c 20 64 65  ing sequence| de
cf00: 74 61 69 6c 65 64 20 64 69 73 63 75 73 73 69 6f  tailed discussio
cf10: 6e 20 6f 6e 20 63 6f 6c 6c 61 74 69 6e 67 20 73  n on collating s
cf20: 65 71 75 65 6e 63 65 73 5d 0a 69 6e 20 74 68 65  equences].in the
cf30: 20 5b 64 61 74 61 74 79 70 65 20 7c 20 44 61 74   [datatype | Dat
cf40: 61 74 79 70 65 20 49 6e 20 53 51 4c 69 74 65 33  atype In SQLite3
cf50: 5d 20 64 6f 63 75 6d 65 6e 74 20 66 6f 72 20 61  ] document for a
cf60: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
cf70: 61 74 69 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63  ation..</p>..<tc
cf80: 6c 3e 68 64 5f 70 75 74 73 20 22 0a 3c 70 3e 5e  l>hd_puts ".<p>^
cf90: 54 68 65 20 75 6e 61 72 79 20 6f 70 65 72 61 74  The unary operat
cfa0: 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 2b 5d 20  or [Operator +] 
cfb0: 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 5e 49 74  is a no-op.  ^It
cfc0: 20 63 61 6e 20 62 65 20 61 70 70 6c 69 65 64 0a   can be applied.
cfd0: 74 6f 20 73 74 72 69 6e 67 73 2c 20 6e 75 6d 62  to strings, numb
cfe0: 65 72 73 2c 20 62 6c 6f 62 73 20 6f 72 20 4e 55  ers, blobs or NU
cff0: 4c 4c 20 61 6e 64 20 69 74 20 61 6c 77 61 79 73  LL and it always
d000: 20 72 65 74 75 72 6e 73 20 61 20 72 65 73 75 6c   returns a resul
d010: 74 0a 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  t.with the same 
d020: 76 61 6c 75 65 20 61 73 20 74 68 65 20 6f 70 65  value as the ope
d030: 72 61 6e 64 2e 3c 2f 70 3e 22 3c 2f 74 63 6c 3e  rand.</p>"</tcl>
d040: 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20 74  ..<p>Note that t
d050: 68 65 72 65 20 61 72 65 20 74 77 6f 20 76 61 72  here are two var
d060: 69 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 65  iations of the e
d070: 71 75 61 6c 73 20 61 6e 64 20 6e 6f 74 20 65 71  quals and not eq
d080: 75 61 6c 73 0a 6f 70 65 72 61 74 6f 72 73 2e 20  uals.operators. 
d090: 20 5e 45 71 75 61 6c 73 20 63 61 6e 20 62 65 20   ^Equals can be 
d0a0: 65 69 74 68 65 72 0a 0a 3c 74 63 6c 3e 0a 68 64  either..<tcl>.hd
d0b0: 5f 70 75 74 73 20 22 5b 4f 70 65 72 61 74 6f 72  _puts "[Operator
d0c0: 20 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72   =] or [Operator
d0d0: 20 3d 3d 5d 2e 0a 5e 54 68 65 20 6e 6f 6e 2d 65   ==]..^The non-e
d0e0: 71 75 61 6c 73 20 6f 70 65 72 61 74 6f 72 20 63  quals operator c
d0f0: 61 6e 20 62 65 20 65 69 74 68 65 72 0a 5b 4f 70  an be either.[Op
d100: 65 72 61 74 6f 72 20 21 3d 5d 20 6f 72 20 5b 4f  erator !=] or [O
d110: 70 65 72 61 74 6f 72 20 7b 26 6c 74 3b 26 67 74  perator {&lt;&gt
d120: 3b 7d 5d 2e 0a 5e 54 68 65 20 5b 4f 70 65 72 61  ;}]..^The [Opera
d130: 74 6f 72 20 7c 7c 5d 20 6f 70 65 72 61 74 6f 72  tor ||] operator
d140: 20 69 73 20 5c 22 63 6f 6e 63 61 74 65 6e 61 74   is \"concatenat
d150: 65 5c 22 20 2d 20 69 74 20 6a 6f 69 6e 73 20 74  e\" - it joins t
d160: 6f 67 65 74 68 65 72 0a 74 68 65 20 74 77 6f 20  ogether.the two 
d170: 73 74 72 69 6e 67 73 20 6f 66 20 69 74 73 20 6f  strings of its o
d180: 70 65 72 61 6e 64 73 2e 0a 5e 54 68 65 20 6f 70  perands..^The op
d190: 65 72 61 74 6f 72 20 5b 4f 70 65 72 61 74 6f 72  erator [Operator
d1a0: 20 25 5d 20 6f 75 74 70 75 74 73 20 74 68 65 20   %] outputs the 
d1b0: 76 61 6c 75 65 20 6f 66 20 69 74 73 20 6c 65 66  value of its lef
d1c0: 74 20 0a 6f 70 65 72 61 6e 64 20 6d 6f 64 75 6c  t .operand modul
d1d0: 6f 20 69 74 73 20 72 69 67 68 74 20 6f 70 65 72  o its right oper
d1e0: 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  and.</p>..<p>^Th
d1f0: 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 79 20  e result of any 
d200: 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20  binary operator 
d210: 69 73 20 65 69 74 68 65 72 20 61 20 6e 75 6d 65  is either a nume
d220: 72 69 63 20 76 61 6c 75 65 20 6f 72 20 0a 4e 55  ric value or .NU
d230: 4c 4c 2c 20 65 78 63 65 70 74 20 66 6f 72 20 74  LL, except for t
d240: 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d  he [Operator ||]
d250: 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f   concatenation o
d260: 70 65 72 61 74 6f 72 20 77 68 69 63 68 20 61 6c  perator which al
d270: 77 61 79 73 20 0a 65 76 61 6c 75 61 74 65 73 20  ways .evaluates 
d280: 74 6f 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f  to either NULL o
d290: 72 20 61 20 74 65 78 74 20 76 61 6c 75 65 2e 3c  r a text value.<
d2a0: 2f 70 3e 22 0a 0a 68 64 5f 66 72 61 67 6d 65 6e  /p>"..hd_fragmen
d2b0: 74 20 7b 69 73 69 73 6e 6f 74 7d 20 7b 49 53 20  t {isisnot} {IS 
d2c0: 6f 70 65 72 61 74 6f 72 7d 20 7b 49 53 20 4e 4f  operator} {IS NO
d2d0: 54 20 6f 70 65 72 61 74 6f 72 7d 0a 0a 68 64 5f  T operator}..hd_
d2e0: 70 75 74 73 20 22 3c 70 3e 5e 54 68 65 20 5b 4f  puts "<p>^The [O
d2f0: 70 65 72 61 74 6f 72 20 49 53 5d 20 61 6e 64 20  perator IS] and 
d300: 5b 4f 70 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f  [Operator {IS NO
d310: 54 7d 5d 20 6f 70 65 72 61 74 6f 72 73 20 77 6f  T}] operators wo
d320: 72 6b 0a 6c 69 6b 65 20 5b 4f 70 65 72 61 74 6f  rk.like [Operato
d330: 72 20 3d 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74  r =] and [Operat
d340: 6f 72 20 21 3d 5d 20 65 78 63 65 70 74 20 77 68  or !=] except wh
d350: 65 6e 20 6f 6e 65 20 6f 72 20 62 6f 74 68 20 6f  en one or both o
d360: 66 20 74 68 65 0a 6f 70 65 72 61 6e 64 73 20 61  f the.operands a
d370: 72 65 20 4e 55 4c 4c 2e 20 5e 49 6e 20 74 68 69  re NULL. ^In thi
d380: 73 20 63 61 73 65 2c 20 69 66 20 62 6f 74 68 20  s case, if both 
d390: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
d3a0: 4c 2c 20 74 68 65 6e 20 74 68 65 0a 49 53 20 6f  L, then the.IS o
d3b0: 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65  perator evaluate
d3c0: 73 20 74 6f 20 31 20 28 74 72 75 65 29 20 61 6e  s to 1 (true) an
d3d0: 64 20 74 68 65 20 49 53 20 4e 4f 54 20 6f 70 65  d the IS NOT ope
d3e0: 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73 0a  rator evaluates.
d3f0: 74 6f 20 30 20 28 66 61 6c 73 65 29 2e 20 5e 49  to 0 (false). ^I
d400: 66 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73  f one operand is
d410: 20 4e 55 4c 4c 20 61 6e 64 20 74 68 65 20 6f 74   NULL and the ot
d420: 68 65 72 20 69 73 20 6e 6f 74 2c 20 74 68 65 6e  her is not, then
d430: 20 74 68 65 0a 49 53 20 6f 70 65 72 61 74 6f 72   the.IS operator
d440: 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 30 20   evaluates to 0 
d450: 28 66 61 6c 73 65 29 20 61 6e 64 20 74 68 65 20  (false) and the 
d460: 49 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f 72 20  IS NOT operator 
d470: 69 73 20 31 20 28 74 72 75 65 29 2e 0a 5e 49 74  is 1 (true)..^It
d480: 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
d490: 20 66 6f 72 20 61 6e 20 49 53 20 6f 72 20 49 53   for an IS or IS
d4a0: 20 4e 4f 54 20 65 78 70 72 65 73 73 69 6f 6e 20   NOT expression 
d4b0: 74 6f 20 65 76 61 6c 75 61 74 65 20 74 6f 20 4e  to evaluate to N
d4c0: 55 4c 4c 2e 0a 5e 4f 70 65 72 61 74 6f 72 73 20  ULL..^Operators 
d4d0: 5b 4f 70 65 72 61 74 6f 72 20 49 53 5d 20 61 6e  [Operator IS] an
d4e0: 64 20 5b 4f 70 65 72 61 74 6f 72 20 7b 49 53 20  d [Operator {IS 
d4f0: 4e 4f 54 7d 5d 20 68 61 76 65 20 74 68 65 20 73  NOT}] have the s
d500: 61 6d 65 20 0a 70 72 65 63 65 64 65 6e 63 65 20  ame .precedence 
d510: 61 73 20 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 2e  as [Operator =].
d520: 22 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  "..<tcl>hd_fragm
d530: 65 6e 74 20 6c 69 74 76 61 6c 75 65 20 7b 6c 69  ent litvalue {li
d540: 74 65 72 61 6c 20 76 61 6c 75 65 7d 3c 2f 74 63  teral value}</tc
d550: 6c 3e 0a 3c 68 33 3e 4c 69 74 65 72 61 6c 20 56  l>.<h3>Literal V
d560: 61 6c 75 65 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 5e  alues</h3>.<p>.^
d570: 41 20 6c 69 74 65 72 61 6c 20 76 61 6c 75 65 20  A literal value 
d580: 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 66  is a constant of
d590: 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 5e 4c 69 74   some kind..^Lit
d5a0: 65 72 61 6c 20 76 61 6c 75 65 73 20 6d 61 79 20  eral values may 
d5b0: 62 65 20 69 6e 74 65 67 65 72 73 2c 20 66 6c 6f  be integers, flo
d5c0: 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62  ating point numb
d5d0: 65 72 73 2c 20 73 74 72 69 6e 67 73 2c 0a 42 4c  ers, strings,.BL
d5e0: 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e 0a 5e  OBs, or NULLs..^
d5f0: 53 63 69 65 6e 74 69 66 69 63 20 6e 6f 74 61 74  Scientific notat
d600: 69 6f 6e 20 69 73 20 73 75 70 70 6f 72 74 65 64  ion is supported
d610: 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 20 70 6f   for floating po
d620: 69 6e 74 20 6c 69 74 65 72 61 6c 20 76 61 6c 75  int literal valu
d630: 65 73 2e 0a 5e 28 54 68 65 20 22 2e 22 20 63 68  es..^(The "." ch
d640: 61 72 61 63 74 65 72 20 69 73 20 61 6c 77 61 79  aracter is alway
d650: 73 20 75 73 65 64 20 0a 61 73 20 74 68 65 20 64  s used .as the d
d660: 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 65 76 65  ecimal point eve
d670: 6e 20 69 66 20 74 68 65 20 6c 6f 63 61 6c 65 20  n if the locale 
d680: 73 65 74 74 69 6e 67 20 73 70 65 63 69 66 69 65  setting specifie
d690: 73 20 22 2c 22 20 66 6f 72 0a 74 68 69 73 20 72  s "," for.this r
d6a0: 6f 6c 65 20 2d 20 74 68 65 20 75 73 65 20 6f 66  ole - the use of
d6b0: 20 22 2c 22 20 66 6f 72 20 74 68 65 20 64 65 63   "," for the dec
d6c0: 69 6d 61 6c 20 70 6f 69 6e 74 20 77 6f 75 6c 64  imal point would
d6d0: 20 72 65 73 75 6c 74 20 69 6e 0a 73 79 6e 74 61   result in.synta
d6e0: 63 74 69 63 20 61 6d 62 69 67 75 69 74 79 2e 29  ctic ambiguity.)
d6f0: 5e 20 20 5e 41 20 73 74 72 69 6e 67 20 63 6f 6e  ^  ^A string con
d700: 73 74 61 6e 74 20 69 73 20 66 6f 72 6d 65 64 20  stant is formed 
d710: 62 79 20 65 6e 63 6c 6f 73 69 6e 67 20 74 68 65  by enclosing the
d720: 0a 73 74 72 69 6e 67 20 69 6e 20 73 69 6e 67 6c  .string in singl
d730: 65 20 71 75 6f 74 65 73 20 28 27 29 2e 20 20 5e  e quotes (').  ^
d740: 41 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 20 77  A single quote w
d750: 69 74 68 69 6e 20 74 68 65 20 73 74 72 69 6e 67  ithin the string
d760: 20 63 61 6e 0a 62 65 20 65 6e 63 6f 64 65 64 20   can.be encoded 
d770: 62 79 20 70 75 74 74 69 6e 67 20 74 77 6f 20 73  by putting two s
d780: 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 69 6e 20  ingle quotes in 
d790: 61 20 72 6f 77 20 2d 20 61 73 20 69 6e 20 50 61  a row - as in Pa
d7a0: 73 63 61 6c 2e 0a 43 2d 73 74 79 6c 65 20 65 73  scal..C-style es
d7b0: 63 61 70 65 73 20 75 73 69 6e 67 20 74 68 65 20  capes using the 
d7c0: 62 61 63 6b 73 6c 61 73 68 20 63 68 61 72 61 63  backslash charac
d7d0: 74 65 72 20 61 72 65 20 6e 6f 74 20 73 75 70 70  ter are not supp
d7e0: 6f 72 74 65 64 20 62 65 63 61 75 73 65 0a 74 68  orted because.th
d7f0: 65 79 20 61 72 65 20 6e 6f 74 20 73 74 61 6e 64  ey are not stand
d800: 61 72 64 20 53 51 4c 2e 0a 5e 42 4c 4f 42 20 6c  ard SQL..^BLOB l
d810: 69 74 65 72 61 6c 73 20 61 72 65 20 73 74 72 69  iterals are stri
d820: 6e 67 20 6c 69 74 65 72 61 6c 73 20 63 6f 6e 74  ng literals cont
d830: 61 69 6e 69 6e 67 20 68 65 78 61 64 65 63 69 6d  aining hexadecim
d840: 61 6c 20 64 61 74 61 20 61 6e 64 0a 70 72 65 63  al data and.prec
d850: 65 64 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65  eded by a single
d860: 20 22 78 22 20 6f 72 20 22 58 22 20 63 68 61 72   "x" or "X" char
d870: 61 63 74 65 72 2e 20 20 5e 28 46 6f 72 20 65 78  acter.  ^(For ex
d880: 61 6d 70 6c 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  ample:</p>..<blo
d890: 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 58 27  ckquote><pre>.X'
d8a0: 35 33 35 31 34 43 36 39 37 34 36 35 27 0a 3c 2f  53514C697465'.</
d8b0: 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
d8c0: 3e 29 5e 0a 0a 3c 70 3e 0a 5e 41 20 6c 69 74 65  >)^..<p>.^A lite
d8d0: 72 61 6c 20 76 61 6c 75 65 20 63 61 6e 20 61 6c  ral value can al
d8e0: 73 6f 20 62 65 20 74 68 65 20 74 6f 6b 65 6e 20  so be the token 
d8f0: 22 4e 55 4c 4c 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74  "NULL"..</p>..<t
d900: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76  cl>hd_fragment v
d910: 61 72 70 61 72 61 6d 20 70 61 72 61 6d 65 74 65  arparam paramete
d920: 72 20 70 61 72 61 6d 65 74 65 72 73 20 7b 62 6f  r parameters {bo
d930: 75 6e 64 20 70 61 72 61 6d 65 74 65 72 7d 20 7b  und parameter} {
d940: 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73  bound parameters
d950: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 50 61 72 61  }</tcl>.<h3>Para
d960: 6d 65 74 65 72 73 3c 2f 68 33 3e 0a 3c 70 3e 0a  meters</h3>.<p>.
d970: 41 20 22 76 61 72 69 61 62 6c 65 22 20 6f 72 20  A "variable" or 
d980: 22 70 61 72 61 6d 65 74 65 72 22 20 74 6f 6b 65  "parameter" toke
d990: 6e 0a 73 70 65 63 69 66 69 65 73 20 61 20 70 6c  n.specifies a pl
d9a0: 61 63 65 68 6f 6c 64 65 72 20 69 6e 20 74 68 65  aceholder in the
d9b0: 20 65 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20   expression for 
d9c0: 61 20 0a 76 61 6c 75 65 20 74 68 61 74 20 69 73  a .value that is
d9d0: 20 66 69 6c 6c 65 64 20 69 6e 20 61 74 20 72 75   filled in at ru
d9e0: 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65 0a  ntime using the.
d9f0: 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c  [sqlite3_bind_bl
da00: 6f 62 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62  ob() | sqlite3_b
da10: 69 6e 64 28 29 5d 20 66 61 6d 69 6c 79 20 6f 66  ind()] family of
da20: 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65   C/C++ interface
da30: 73 2e 0a 50 61 72 61 6d 65 74 65 72 73 20 63 61  s..Parameters ca
da40: 6e 20 74 61 6b 65 20 73 65 76 65 72 61 6c 20 66  n take several f
da50: 6f 72 6d 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  orms:.</p>..<blo
da60: 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e  ckquote>.<table>
da70: 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
da80: 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22  "right" valign="
da90: 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 69 3e  top"><b>?</b><i>
daa0: 4e 4e 4e 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20  NNN</i></td><td 
dab0: 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e  width="20"></td>
dac0: 0a 3c 74 64 3e 5e 28 41 20 71 75 65 73 74 69 6f  .<td>^(A questio
dad0: 6e 20 6d 61 72 6b 20 66 6f 6c 6c 6f 77 65 64 20  n mark followed 
dae0: 62 79 20 61 20 6e 75 6d 62 65 72 20 3c 69 3e 4e  by a number <i>N
daf0: 4e 4e 3c 2f 69 3e 20 68 6f 6c 64 73 20 61 20 73  NN</i> holds a s
db00: 70 6f 74 20 66 6f 72 20 74 68 65 0a 4e 4e 4e 2d  pot for the.NNN-
db10: 74 68 20 70 61 72 61 6d 65 74 65 72 2e 20 20 4e  th parameter.  N
db20: 4e 4e 20 6d 75 73 74 20 62 65 20 62 65 74 77 65  NN must be betwe
db30: 65 6e 20 31 20 61 6e 64 20 5b 53 51 4c 49 54 45  en 1 and [SQLITE
db40: 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
db50: 4d 42 45 52 5d 2e 29 5e 0a 3c 2f 74 64 3e 0a 3c  MBER].)^.</td>.<
db60: 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  /tr>.<tr>.<td al
db70: 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69  ign="right" vali
db80: 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62  gn="top"><b>?</b
db90: 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d  ></td><td width=
dba0: 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e  "20"></td>.<td>^
dbb0: 41 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20  A question mark 
dbc0: 74 68 61 74 20 69 73 20 6e 6f 74 20 66 6f 6c 6c  that is not foll
dbd0: 6f 77 65 64 20 62 79 20 61 20 6e 75 6d 62 65 72  owed by a number
dbe0: 20 63 72 65 61 74 65 73 20 61 20 70 61 72 61 6d   creates a param
dbf0: 65 74 65 72 0a 77 69 74 68 20 61 20 6e 75 6d 62  eter.with a numb
dc00: 65 72 20 6f 6e 65 20 67 72 65 61 74 65 72 20 74  er one greater t
dc10: 68 61 6e 20 74 68 65 20 6c 61 72 67 65 73 74 20  han the largest 
dc20: 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72  parameter number
dc30: 20 61 6c 72 65 61 64 79 20 61 73 73 69 67 6e 65   already assigne
dc40: 64 2e 0a 5e 49 66 20 74 68 69 73 20 6d 65 61 6e  d..^If this mean
dc50: 73 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20  s the parameter 
dc60: 6e 75 6d 62 65 72 20 69 73 20 67 72 65 61 74 65  number is greate
dc70: 72 20 74 68 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d  r than.[SQLITE_M
dc80: 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
dc90: 45 52 5d 2c 20 69 74 20 69 73 20 61 6e 20 65 72  ER], it is an er
dca0: 72 6f 72 2e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  ror..</td>.</tr>
dcb0: 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
dcc0: 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22  "right" valign="
dcd0: 74 6f 70 22 3e 3c 62 3e 3a 3c 2f 62 3e 3c 69 3e  top"><b>:</b><i>
dce0: 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64  AAAA</i></td><td
dcf0: 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64   width="20"></td
dd00: 3e 0a 3c 74 64 3e 5e 41 20 63 6f 6c 6f 6e 20 66  >.<td>^A colon f
dd10: 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 69 64  ollowed by an id
dd20: 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 68 6f  entifier name ho
dd30: 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20 61  lds a spot for a
dd40: 20 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   .[sqlite3_bind_
dd50: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 7c 6e  parameter_name|n
dd60: 61 6d 65 64 20 70 61 72 61 6d 65 74 65 72 5d 20  amed parameter] 
dd70: 77 69 74 68 20 74 68 65 20 6e 61 6d 65 20 3a 41  with the name :A
dd80: 41 41 41 2e 20 20 0a 5e 28 4e 61 6d 65 64 20 70  AAA.  .^(Named p
dd90: 61 72 61 6d 65 74 65 72 73 20 61 72 65 20 61 6c  arameters are al
dda0: 73 6f 20 6e 75 6d 62 65 72 65 64 2e 20 54 68 65  so numbered. The
ddb0: 20 6e 75 6d 62 65 72 20 61 73 73 69 67 6e 65 64   number assigned
ddc0: 20 69 73 20 6f 6e 65 20 67 72 65 61 74 65 72 20   is one greater 
ddd0: 74 68 61 6e 0a 74 68 65 20 6c 61 72 67 65 73 74  than.the largest
dde0: 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65   parameter numbe
ddf0: 72 20 61 6c 72 65 61 64 79 20 61 73 73 69 67 6e  r already assign
de00: 65 64 2e 29 5e 20 5e 49 66 20 74 68 69 73 20 6d  ed.)^ ^If this m
de10: 65 61 6e 73 20 74 68 65 20 70 61 72 61 6d 65 74  eans the paramet
de20: 65 72 0a 77 6f 75 6c 64 20 62 65 20 61 73 73 69  er.would be assi
de30: 67 6e 65 64 20 61 20 6e 75 6d 62 65 72 20 67 72  gned a number gr
de40: 65 61 74 65 72 20 74 68 61 6e 20 5b 53 51 4c 49  eater than [SQLI
de50: 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
de60: 4e 55 4d 42 45 52 5d 2c 20 69 74 20 69 73 0a 61  NUMBER], it is.a
de70: 6e 20 65 72 72 6f 72 2e 20 54 6f 20 61 76 6f 69  n error. To avoi
de80: 64 20 63 6f 6e 66 75 73 69 6f 6e 2c 20 69 74 20  d confusion, it 
de90: 69 73 20 62 65 73 74 20 74 6f 20 61 76 6f 69 64  is best to avoid
dea0: 20 6d 69 78 69 6e 67 20 6e 61 6d 65 64 20 61 6e   mixing named an
deb0: 64 20 6e 75 6d 62 65 72 65 64 0a 70 61 72 61 6d  d numbered.param
dec0: 65 74 65 72 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72  eters.</td>.</tr
ded0: 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  >.<tr>.<td align
dee0: 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d  ="right" valign=
def0: 22 74 6f 70 22 3e 3c 62 3e 40 3c 2f 62 3e 3c 69  "top"><b>@</b><i
df00: 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74  >AAAA</i></td><t
df10: 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74  d width="20"></t
df20: 64 3e 0a 3c 74 64 3e 5e 41 6e 20 22 61 74 22 20  d>.<td>^An "at" 
df30: 73 69 67 6e 20 77 6f 72 6b 73 20 65 78 61 63 74  sign works exact
df40: 6c 79 20 6c 69 6b 65 20 61 20 63 6f 6c 6f 6e 2c  ly like a colon,
df50: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
df60: 20 6e 61 6d 65 20 6f 66 0a 74 68 65 20 70 61 72   name of.the par
df70: 61 6d 65 74 65 72 20 63 72 65 61 74 65 64 20 69  ameter created i
df80: 73 20 40 41 41 41 41 2e 3c 2f 74 64 3e 0a 3c 2f  s @AAAA.</td>.</
df90: 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  tr>.<tr>.<td ali
dfa0: 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67  gn="right" valig
dfb0: 6e 3d 22 74 6f 70 22 3e 3c 62 3e 24 3c 2f 62 3e  n="top"><b>$</b>
dfc0: 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e  <i>AAAA</i></td>
dfd0: 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c  <td width="20"><
dfe0: 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 64 6f 6c 6c  /td>.<td>^A doll
dff0: 61 72 2d 73 69 67 6e 20 66 6f 6c 6c 6f 77 65 64  ar-sign followed
e000: 20 62 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65   by an identifie
e010: 72 20 6e 61 6d 65 20 61 6c 73 6f 20 68 6f 6c 64  r name also hold
e020: 73 20 61 20 73 70 6f 74 20 66 6f 72 20 61 20 6e  s a spot for a n
e030: 61 6d 65 64 0a 70 61 72 61 6d 65 74 65 72 20 77  amed.parameter w
e040: 69 74 68 20 74 68 65 20 6e 61 6d 65 20 24 41 41  ith the name $AA
e050: 41 41 2e 20 20 5e 28 54 68 65 20 69 64 65 6e 74  AA.  ^(The ident
e060: 69 66 69 65 72 20 6e 61 6d 65 20 69 6e 20 74 68  ifier name in th
e070: 69 73 20 63 61 73 65 20 63 61 6e 20 69 6e 63 6c  is case can incl
e080: 75 64 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ude.one or more 
e090: 6f 63 63 75 72 72 65 6e 63 65 73 20 6f 66 20 22  occurrences of "
e0a0: 3a 3a 22 20 61 6e 64 20 61 20 73 75 66 66 69 78  ::" and a suffix
e0b0: 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 22 28 2e   enclosed in "(.
e0c0: 2e 2e 29 22 20 63 6f 6e 74 61 69 6e 69 6e 67 0a  ..)" containing.
e0d0: 61 6e 79 20 74 65 78 74 20 61 74 20 61 6c 6c 2e  any text at all.
e0e0: 29 5e 20 20 54 68 69 73 20 73 79 6e 74 61 78 20  )^  This syntax 
e0f0: 69 73 20 74 68 65 20 66 6f 72 6d 20 6f 66 20 61  is the form of a
e100: 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 20 69   variable name i
e110: 6e 20 74 68 65 0a 5b 68 74 74 70 3a 2f 2f 77 77  n the.[http://ww
e120: 77 2e 74 63 6c 2e 74 6b 2f 20 7c 20 54 63 6c 20  w.tcl.tk/ | Tcl 
e130: 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e 67  programming lang
e140: 75 61 67 65 5d 2e 20 20 54 68 65 20 70 72 65 73  uage].  The pres
e150: 65 6e 63 65 0a 6f 66 20 74 68 69 73 20 73 79 6e  ence.of this syn
e160: 74 61 78 20 72 65 73 75 6c 74 73 20 66 72 6f 6d  tax results from
e170: 20 74 68 65 20 66 61 63 74 20 74 68 61 74 20 53   the fact that S
e180: 51 4c 69 74 65 20 69 73 20 72 65 61 6c 6c 79 20  QLite is really 
e190: 61 20 0a 5b 54 63 6c 20 65 78 74 65 6e 73 69 6f  a .[Tcl extensio
e1a0: 6e 5d 20 74 68 61 74 20 68 61 73 20 65 73 63 61  n] that has esca
e1b0: 70 65 64 20 69 6e 74 6f 20 74 68 65 20 77 69 6c  ped into the wil
e1c0: 64 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f  d.</td>.</tr>.</
e1d0: 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75  table>.</blockqu
e1e0: 6f 74 65 3e 0a 0a 3c 70 3e 5e 50 61 72 61 6d 65  ote>..<p>^Parame
e1f0: 74 65 72 73 20 74 68 61 74 20 61 72 65 20 6e 6f  ters that are no
e200: 74 20 61 73 73 69 67 6e 65 64 20 76 61 6c 75 65  t assigned value
e210: 73 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33  s using.[sqlite3
e220: 5f 62 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20 73  _bind_blob() | s
e230: 71 6c 69 74 65 33 5f 62 69 6e 64 28 29 5d 20 61  qlite3_bind()] a
e240: 72 65 20 74 72 65 61 74 65 64 0a 61 73 20 4e 55  re treated.as NU
e250: 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  LL.</p>..<p>^The
e260: 20 6d 61 78 69 6d 75 6d 20 70 61 72 61 6d 65 74   maximum paramet
e270: 65 72 20 6e 75 6d 62 65 72 20 69 73 20 73 65 74  er number is set
e280: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
e290: 20 62 79 0a 74 68 65 20 5b 53 51 4c 49 54 45 5f   by.the [SQLITE_
e2a0: 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
e2b0: 42 45 52 5d 20 6d 61 63 72 6f 2e 20 20 5e 28 41  BER] macro.  ^(A
e2c0: 6e 20 69 6e 64 69 76 69 64 75 61 6c 20 5b 64 61  n individual [da
e2d0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
e2e0: 6e 73 5d 0a 44 20 63 61 6e 20 72 65 64 75 63 65  ns].D can reduce
e2f0: 20 69 74 73 20 6d 61 78 69 6d 75 6d 20 70 61 72   its maximum par
e300: 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 62 65  ameter number be
e310: 6c 6f 77 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d  low the compile-
e320: 74 69 6d 65 20 6d 61 78 69 6d 75 6d 0a 75 73 69  time maximum.usi
e330: 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  ng the [sqlite3_
e340: 6c 69 6d 69 74 5d 28 44 2c 20 5b 53 51 4c 49 54  limit](D, [SQLIT
e350: 45 5f 4c 49 4d 49 54 5f 56 41 52 49 41 42 4c 45  E_LIMIT_VARIABLE
e360: 5f 4e 55 4d 42 45 52 5d 2c 2e 2e 2e 29 20 69 6e  _NUMBER],...) in
e370: 74 65 72 66 61 63 65 2e 29 5e 0a 3c 2f 70 3e 0a  terface.)^.</p>.
e380: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
e390: 74 20 6c 69 6b 65 20 4c 49 4b 45 20 45 53 43 41  t like LIKE ESCA
e3a0: 50 45 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65  PE</tcl>.<h3>The
e3b0: 20 4c 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20 6f   LIKE and GLOB o
e3c0: 70 65 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70  perators</h3>.<p
e3d0: 3e 5e 54 68 65 20 4c 49 4b 45 20 6f 70 65 72 61  >^The LIKE opera
e3e0: 74 6f 72 20 64 6f 65 73 20 61 20 70 61 74 74 65  tor does a patte
e3f0: 72 6e 20 6d 61 74 63 68 69 6e 67 20 63 6f 6d 70  rn matching comp
e400: 61 72 69 73 6f 6e 2e 20 5e 54 68 65 20 6f 70 65  arison. ^The ope
e410: 72 61 6e 64 0a 74 6f 20 74 68 65 20 72 69 67 68  rand.to the righ
e420: 74 20 6f 66 20 74 68 65 20 4c 49 4b 45 20 6f 70  t of the LIKE op
e430: 65 72 61 74 6f 72 20 63 6f 6e 74 61 69 6e 73 20  erator contains 
e440: 74 68 65 20 70 61 74 74 65 72 6e 20 61 6e 64 20  the pattern and 
e450: 74 68 65 20 6c 65 66 74 20 68 61 6e 64 0a 6f 70  the left hand.op
e460: 65 72 61 6e 64 20 63 6f 6e 74 61 69 6e 73 20 74  erand contains t
e470: 68 65 20 73 74 72 69 6e 67 20 74 6f 20 6d 61 74  he string to mat
e480: 63 68 20 61 67 61 69 6e 73 74 20 74 68 65 20 70  ch against the p
e490: 61 74 74 65 72 6e 2e 0a 0a 3c 74 63 6c 3e 68 64  attern...<tcl>hd
e4a0: 5f 70 75 74 73 20 22 5e 41 20 70 65 72 63 65 6e  _puts "^A percen
e4b0: 74 20 73 79 6d 62 6f 6c 20 28 5c 22 25 5c 22 29  t symbol (\"%\")
e4c0: 20 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74   in the LIKE pat
e4d0: 74 65 72 6e 20 6d 61 74 63 68 65 73 20 61 6e 79  tern matches any
e4e0: 0a 73 65 71 75 65 6e 63 65 20 6f 66 20 7a 65 72  .sequence of zer
e4f0: 6f 20 6f 72 20 6d 6f 72 65 20 63 68 61 72 61 63  o or more charac
e500: 74 65 72 73 20 69 6e 20 74 68 65 20 73 74 72 69  ters in the stri
e510: 6e 67 2e 20 20 5e 41 6e 20 75 6e 64 65 72 73 63  ng.  ^An undersc
e520: 6f 72 65 0a 28 5c 22 5f 5c 22 29 20 69 6e 20 74  ore.(\"_\") in t
e530: 68 65 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 20  he LIKE pattern 
e540: 6d 61 74 63 68 65 73 20 61 6e 79 20 73 69 6e 67  matches any sing
e550: 6c 65 20 63 68 61 72 61 63 74 65 72 20 69 6e 20  le character in 
e560: 74 68 65 0a 73 74 72 69 6e 67 2e 20 20 5e 28 41  the.string.  ^(A
e570: 6e 79 20 6f 74 68 65 72 20 63 68 61 72 61 63 74  ny other charact
e580: 65 72 20 6d 61 74 63 68 65 73 20 69 74 73 65 6c  er matches itsel
e590: 66 20 6f 72 20 69 74 73 20 6c 6f 77 65 72 2f 75  f or its lower/u
e5a0: 70 70 65 72 20 63 61 73 65 0a 65 71 75 69 76 61  pper case.equiva
e5b0: 6c 65 6e 74 20 28 69 2e 65 2e 20 63 61 73 65 2d  lent (i.e. case-
e5c0: 69 6e 73 65 6e 73 69 74 69 76 65 20 6d 61 74 63  insensitive matc
e5d0: 68 69 6e 67 29 2e 29 5e 20 20 28 41 20 62 75 67  hing).)^  (A bug
e5e0: 3a 20 5e 53 51 4c 69 74 65 20 6f 6e 6c 79 0a 75  : ^SQLite only.u
e5f0: 6e 64 65 72 73 74 61 6e 64 73 20 75 70 70 65 72  nderstands upper
e600: 2f 6c 6f 77 65 72 20 63 61 73 65 20 66 6f 72 20  /lower case for 
e610: 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73  ASCII characters
e620: 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 5e 54   by default.  ^T
e630: 68 65 0a 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72  he.LIKE operator
e640: 20 69 73 20 63 61 73 65 20 73 65 6e 73 69 74 69   is case sensiti
e650: 76 65 20 62 79 20 64 65 66 61 75 6c 74 20 66 6f  ve by default fo
e660: 72 20 75 6e 69 63 6f 64 65 20 63 68 61 72 61 63  r unicode charac
e670: 74 65 72 73 20 74 68 61 74 20 61 72 65 0a 62 65  ters that are.be
e680: 79 6f 6e 64 20 74 68 65 20 41 53 43 49 49 20 72  yond the ASCII r
e690: 61 6e 67 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  ange.  For examp
e6a0: 6c 65 2c 0a 5e 74 68 65 20 65 78 70 72 65 73 73  le,.^the express
e6b0: 69 6f 6e 20 3c 62 3e 27 61 27 26 6e 62 73 70 3b  ion <b>'a'&nbsp;
e6c0: 4c 49 4b 45 26 6e 62 73 70 3b 27 41 27 3c 2f 62  LIKE&nbsp;'A'</b
e6d0: 3e 0a 69 73 20 54 52 55 45 20 62 75 74 20 3c 62  >.is TRUE but <b
e6e0: 3e 27 26 61 65 6c 69 67 3b 27 26 6e 62 73 70 3b  >'&aelig;'&nbsp;
e6f0: 4c 49 4b 45 26 6e 62 73 70 3b 27 26 41 45 6c 69  LIKE&nbsp;'&AEli
e700: 67 3b 27 3c 2f 62 3e 20 69 73 20 46 41 4c 53 45  g;'</b> is FALSE
e710: 2e 29 3c 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70  .)<p>"</tcl>..<p
e720: 3e 5e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61  >^If the optiona
e730: 6c 20 45 53 43 41 50 45 20 63 6c 61 75 73 65 20  l ESCAPE clause 
e740: 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e  is present, then
e750: 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a   the expression.
e760: 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 45 53  following the ES
e770: 43 41 50 45 20 6b 65 79 77 6f 72 64 20 6d 75 73  CAPE keyword mus
e780: 74 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61 20  t evaluate to a 
e790: 73 74 72 69 6e 67 20 63 6f 6e 73 69 73 74 69 6e  string consistin
e7a0: 67 20 6f 66 0a 61 20 73 69 6e 67 6c 65 20 63 68  g of.a single ch
e7b0: 61 72 61 63 74 65 72 2e 20 5e 54 68 69 73 20 63  aracter. ^This c
e7c0: 68 61 72 61 63 74 65 72 20 6d 61 79 20 62 65 20  haracter may be 
e7d0: 75 73 65 64 20 69 6e 20 74 68 65 20 4c 49 4b 45  used in the LIKE
e7e0: 20 70 61 74 74 65 72 6e 0a 74 6f 20 69 6e 63 6c   pattern.to incl
e7f0: 75 64 65 20 6c 69 74 65 72 61 6c 20 70 65 72 63  ude literal perc
e800: 65 6e 74 20 6f 72 20 75 6e 64 65 72 73 63 6f 72  ent or underscor
e810: 65 20 63 68 61 72 61 63 74 65 72 73 2e 20 5e 54  e characters. ^T
e820: 68 65 20 65 73 63 61 70 65 0a 63 68 61 72 61 63  he escape.charac
e830: 74 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  ter followed by 
e840: 61 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c  a percent symbol
e850: 20 28 25 29 2c 20 75 6e 64 65 72 73 63 6f 72 65   (%), underscore
e860: 20 28 5f 29 2c 20 6f 72 20 61 20 73 65 63 6f 6e   (_), or a secon
e870: 64 0a 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  d.instance of th
e880: 65 20 65 73 63 61 70 65 20 63 68 61 72 61 63 74  e escape charact
e890: 65 72 20 69 74 73 65 6c 66 20 6d 61 74 63 68 65  er itself matche
e8a0: 73 20 61 0a 6c 69 74 65 72 61 6c 20 70 65 72 63  s a.literal perc
e8b0: 65 6e 74 20 73 79 6d 62 6f 6c 2c 20 75 6e 64 65  ent symbol, unde
e8c0: 72 73 63 6f 72 65 2c 20 6f 72 20 61 20 73 69 6e  rscore, or a sin
e8d0: 67 6c 65 20 65 73 63 61 70 65 20 63 68 61 72 61  gle escape chara
e8e0: 63 74 65 72 2c 0a 72 65 73 70 65 63 74 69 76 65  cter,.respective
e8f0: 6c 79 2e 0a 0a 3c 70 3e 5e 54 68 65 20 69 6e 66  ly...<p>^The inf
e900: 69 78 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72  ix LIKE operator
e910: 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20   is implemented 
e920: 62 79 20 63 61 6c 6c 69 6e 67 20 74 68 65 0a 61  by calling the.a
e930: 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e  pplication-defin
e940: 65 64 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73  ed SQL functions
e950: 20 5b 6c 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c   [like(<i>Y</i>,
e960: 3c 69 3e 58 3c 2f 69 3e 29 5d 20 6f 72 0a 5b 6c  <i>X</i>)] or.[l
e970: 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e  ike(<i>Y</i>,<i>
e980: 58 3c 2f 69 3e 2c 3c 69 3e 5a 3c 2f 69 3e 29 5d  X</i>,<i>Z</i>)]
e990: 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  </a>.</p>..<p>^T
e9a0: 68 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72  he LIKE operator
e9b0: 20 63 61 6e 20 62 65 20 6d 61 64 65 20 63 61 73   can be made cas
e9c0: 65 20 73 65 6e 73 69 74 69 76 65 20 75 73 69 6e  e sensitive usin
e9d0: 67 20 74 68 65 0a 5b 63 61 73 65 5f 73 65 6e 73  g the.[case_sens
e9e0: 69 74 69 76 65 5f 6c 69 6b 65 20 70 72 61 67 6d  itive_like pragm
e9f0: 61 5d 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  a].</p>..<tcl>hd
ea00: 5f 66 72 61 67 6d 65 6e 74 20 67 6c 6f 62 20 47  _fragment glob G
ea10: 4c 4f 42 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68  LOB</tcl>.<p>^Th
ea20: 65 20 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72 20  e GLOB operator 
ea30: 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4c 49  is similar to LI
ea40: 4b 45 20 62 75 74 20 75 73 65 73 20 74 68 65 20  KE but uses the 
ea50: 55 6e 69 78 0a 66 69 6c 65 20 67 6c 6f 62 62 69  Unix.file globbi
ea60: 6e 67 20 73 79 6e 74 61 78 20 66 6f 72 20 69 74  ng syntax for it
ea70: 73 20 77 69 6c 64 63 61 72 64 73 2e 20 20 5e 41  s wildcards.  ^A
ea80: 6c 73 6f 2c 20 47 4c 4f 42 20 69 73 20 63 61 73  lso, GLOB is cas
ea90: 65 0a 73 65 6e 73 69 74 69 76 65 2c 20 75 6e 6c  e.sensitive, unl
eaa0: 69 6b 65 20 4c 49 4b 45 2e 20 20 5e 42 6f 74 68  ike LIKE.  ^Both
eab0: 20 47 4c 4f 42 20 61 6e 64 20 4c 49 4b 45 20 6d   GLOB and LIKE m
eac0: 61 79 20 62 65 20 70 72 65 63 65 64 65 64 20 62  ay be preceded b
ead0: 79 0a 74 68 65 20 4e 4f 54 20 6b 65 79 77 6f 72  y.the NOT keywor
eae0: 64 20 74 6f 20 69 6e 76 65 72 74 20 74 68 65 20  d to invert the 
eaf0: 73 65 6e 73 65 20 6f 66 20 74 68 65 20 74 65 73  sense of the tes
eb00: 74 2e 20 20 5e 54 68 65 20 69 6e 66 69 78 20 47  t.  ^The infix G
eb10: 4c 4f 42 20 0a 6f 70 65 72 61 74 6f 72 20 69 73  LOB .operator is
eb20: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
eb30: 63 61 6c 6c 69 6e 67 20 74 68 65 20 66 75 6e 63  calling the func
eb40: 74 69 6f 6e 0a 5b 67 6c 6f 62 28 3c 69 3e 59 3c  tion.[glob(<i>Y<
eb50: 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20 61  /i>,<i>X</i>)] a
eb60: 6e 64 20 63 61 6e 20 62 65 20 6d 6f 64 69 66 69  nd can be modifi
eb70: 65 64 20 62 79 20 6f 76 65 72 72 69 64 69 6e 67  ed by overriding
eb80: 0a 74 68 61 74 20 66 75 6e 63 74 69 6f 6e 2e 3c  .that function.<
eb90: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
eba0: 67 6d 65 6e 74 20 72 65 67 65 78 70 20 52 45 47  gment regexp REG
ebb0: 45 58 50 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68  EXP</tcl>.<p>^Th
ebc0: 65 20 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f  e REGEXP operato
ebd0: 72 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 73  r is a special s
ebe0: 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 72 65  yntax for the re
ebf0: 67 65 78 70 28 29 0a 75 73 65 72 20 66 75 6e 63  gexp().user func
ec00: 74 69 6f 6e 2e 20 20 5e 4e 6f 20 72 65 67 65 78  tion.  ^No regex
ec10: 70 28 29 20 75 73 65 72 20 66 75 6e 63 74 69 6f  p() user functio
ec20: 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  n is defined by 
ec30: 64 65 66 61 75 6c 74 0a 61 6e 64 20 73 6f 20 75  default.and so u
ec40: 73 65 20 6f 66 20 74 68 65 20 52 45 47 45 58 50  se of the REGEXP
ec50: 20 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c 20 6e   operator will n
ec60: 6f 72 6d 61 6c 6c 79 20 72 65 73 75 6c 74 20 69  ormally result i
ec70: 6e 20 61 6e 0a 65 72 72 6f 72 20 6d 65 73 73 61  n an.error messa
ec80: 67 65 2e 20 20 5e 49 66 20 61 20 5b 61 70 70 6c  ge.  ^If a [appl
ec90: 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20  ication-defined 
eca0: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 5d 20 6e 61  SQL function] na
ecb0: 6d 65 64 20 22 72 65 67 65 78 70 22 0a 69 73 20  med "regexp".is 
ecc0: 61 64 64 65 64 20 61 74 20 72 75 6e 2d 74 69 6d  added at run-tim
ecd0: 65 2c 20 74 68 61 74 20 66 75 6e 63 74 69 6f 6e  e, that function
ece0: 20 77 69 6c 6c 20 62 65 20 63 61 6c 6c 65 64 20   will be called 
ecf0: 69 6e 20 6f 72 64 65 72 0a 74 6f 20 69 6d 70 6c  in order.to impl
ed00: 65 6d 65 6e 74 20 74 68 65 20 52 45 47 45 58 50  ement the REGEXP
ed10: 20 6f 70 65 72 61 74 6f 72 2e 3c 2f 70 3e 0a 0a   operator.</p>..
ed20: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
ed30: 20 6d 61 74 63 68 20 4d 41 54 43 48 3c 2f 74 63   match MATCH</tc
ed40: 6c 3e 0a 3c 70 3e 5e 54 68 65 20 4d 41 54 43 48  l>.<p>^The MATCH
ed50: 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73   operator is a s
ed60: 70 65 63 69 61 6c 20 73 79 6e 74 61 78 20 66 6f  pecial syntax fo
ed70: 72 20 74 68 65 20 6d 61 74 63 68 28 29 0a 61 70  r the match().ap
ed80: 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65  plication-define
ed90: 64 20 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 54 68  d function.  ^Th
eda0: 65 20 64 65 66 61 75 6c 74 20 6d 61 74 63 68 28  e default match(
edb0: 29 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65  ) function imple
edc0: 6d 65 6e 74 61 74 69 6f 6e 0a 72 61 69 73 65 73  mentation.raises
edd0: 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 61 6e   an exception an
ede0: 64 20 69 73 20 6e 6f 74 20 72 65 61 6c 6c 79 20  d is not really 
edf0: 75 73 65 66 75 6c 20 66 6f 72 20 61 6e 79 74 68  useful for anyth
ee00: 69 6e 67 2e 0a 5e 42 75 74 20 65 78 74 65 6e 73  ing..^But extens
ee10: 69 6f 6e 73 20 63 61 6e 20 6f 76 65 72 72 69 64  ions can overrid
ee20: 65 20 74 68 65 20 6d 61 74 63 68 28 29 20 66 75  e the match() fu
ee30: 6e 63 74 69 6f 6e 20 77 69 74 68 20 6d 6f 72 65  nction with more
ee40: 0a 68 65 6c 70 66 75 6c 20 6c 6f 67 69 63 2e 3c  .helpful logic.<
ee50: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
ee60: 67 6d 65 6e 74 20 62 65 74 77 65 65 6e 20 42 45  gment between BE
ee70: 54 57 45 45 4e 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  TWEEN</tcl>.<h3>
ee80: 54 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72  The BETWEEN oper
ee90: 61 74 6f 72 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 54  ator</h3>.<p>^(T
eea0: 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61  he BETWEEN opera
eeb0: 74 6f 72 20 69 73 20 6c 6f 67 69 63 61 6c 6c 79  tor is logically
eec0: 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 61   equivalent to a
eed0: 20 70 61 69 72 20 6f 66 20 63 6f 6d 70 61 72 69   pair of compari
eee0: 73 6f 6e 73 2e 0a 22 3c 69 3e 78 3c 2f 69 3e 20  sons.."<i>x</i> 
eef0: 3c 62 3e 42 45 54 57 45 45 4e 3c 2f 62 3e 20 3c  <b>BETWEEN</b> <
ef00: 69 3e 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f  i>y</i> <b>AND</
ef10: 62 3e 20 3c 69 3e 7a 3c 2f 69 3e 22 20 69 73 20  b> <i>z</i>" is 
ef20: 0a 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 0a  .equivalent to .
ef30: 22 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 67 74 3b  "<i>x</i><b>&gt;
ef40: 3d 3c 2f 62 3e 3c 69 3e 79 3c 2f 69 3e 20 3c 62  =</b><i>y</i> <b
ef50: 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e 78 3c 2f 69  >AND</b> <i>x</i
ef60: 3e 3c 62 3e 26 6c 74 3b 3d 3c 2f 62 3e 3c 69 3e  ><b>&lt;=</b><i>
ef70: 7a 3c 2f 69 3e 22 20 65 78 63 65 70 74 0a 74 68  z</i>" except.th
ef80: 61 74 20 77 69 74 68 20 42 45 54 57 45 45 4e 2c  at with BETWEEN,
ef90: 20 74 68 65 20 3c 69 3e 78 3c 2f 69 3e 20 65 78   the <i>x</i> ex
efa0: 70 72 65 73 73 69 6f 6e 20 69 73 20 6f 6e 6c 79  pression is only
efb0: 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 2e   evaluated once.
efc0: 29 5e 0a 5e 54 68 65 20 70 72 65 63 65 64 65 6e  )^.^The preceden
efd0: 63 65 20 6f 66 20 74 68 65 20 42 45 54 57 45 45  ce of the BETWEE
efe0: 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 74 68  N operator is th
eff0: 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 70 72  e same as the pr
f000: 65 63 65 64 65 6e 63 65 0a 61 73 20 6f 70 65 72  ecedence.as oper
f010: 61 74 6f 72 73 20 3c 62 3e 3d 3d 3c 2f 62 3e 20  ators <b>==</b> 
f020: 61 6e 64 20 3c 62 3e 21 3d 3c 2f 62 3e 20 61 6e  and <b>!=</b> an
f030: 64 20 3c 62 3e 4c 49 4b 45 3c 2f 62 3e 20 61 6e  d <b>LIKE</b> an
f040: 64 20 67 72 6f 75 70 73 20 6c 65 66 74 20 74 6f  d groups left to
f050: 20 72 69 67 68 74 2e 0a 0a 3c 74 63 6c 3e 68 64   right...<tcl>hd
f060: 5f 66 72 61 67 6d 65 6e 74 20 63 61 73 65 20 7b  _fragment case {
f070: 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 7d  CASE expression}
f080: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 43  </tcl>.<h3>The C
f090: 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 3c 2f  ASE expression</
f0a0: 68 33 3e 0a 3c 70 3e 41 20 43 41 53 45 20 65 78  h3>.<p>A CASE ex
f0b0: 70 72 65 73 73 69 6f 6e 20 73 65 72 76 65 73 20  pression serves 
f0c0: 61 20 72 6f 6c 65 20 73 69 6d 69 6c 61 72 20 74  a role similar t
f0d0: 6f 20 49 46 2d 54 48 45 4e 2d 45 4c 53 45 20 69  o IF-THEN-ELSE i
f0e0: 6e 20 6f 74 68 65 72 0a 70 72 6f 67 72 61 6d 6d  n other.programm
f0f0: 69 6e 67 20 6c 61 6e 67 75 61 67 65 73 2e 20 20  ing languages.  
f100: 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61  ..<p>The optiona
f110: 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  l expression tha
f120: 74 20 6f 63 63 75 72 73 20 69 6e 20 62 65 74 77  t occurs in betw
f130: 65 65 6e 20 74 68 65 20 43 41 53 45 20 6b 65 79  een the CASE key
f140: 77 6f 72 64 20 61 6e 64 20 74 68 65 0a 66 69 72  word and the.fir
f150: 73 74 20 57 48 45 4e 20 6b 65 79 77 6f 72 64 20  st WHEN keyword 
f160: 69 73 20 63 61 6c 6c 65 64 20 74 68 65 20 22 62  is called the "b
f170: 61 73 65 22 20 65 78 70 72 65 73 73 69 6f 6e 2e  ase" expression.
f180: 20 5e 54 68 65 72 65 20 61 72 65 20 74 77 6f 20   ^There are two 
f190: 62 61 73 69 63 20 66 6f 72 6d 73 0a 6f 66 20 74  basic forms.of t
f1a0: 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69  he CASE expressi
f1b0: 6f 6e 3a 20 74 68 6f 73 65 20 77 69 74 68 20 61  on: those with a
f1c0: 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e   base expression
f1d0: 20 61 6e 64 20 74 68 6f 73 65 20 77 69 74 68 6f   and those witho
f1e0: 75 74 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43 41  ut...<p>^In a CA
f1f0: 53 45 20 77 69 74 68 6f 75 74 20 61 20 62 61 73  SE without a bas
f200: 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 65 61  e expression, ea
f210: 63 68 20 57 48 45 4e 20 65 78 70 72 65 73 73 69  ch WHEN expressi
f220: 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 0a  on is evaluated.
f230: 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 74  and the result t
f240: 72 65 61 74 65 64 20 61 73 20 61 20 62 6f 6f 6c  reated as a bool
f250: 65 61 6e 2c 20 73 74 61 72 74 69 6e 67 20 77 69  ean, starting wi
f260: 74 68 20 74 68 65 20 6c 65 66 74 6d 6f 73 74 20  th the leftmost 
f270: 61 6e 64 20 63 6f 6e 74 69 6e 75 69 6e 67 0a 74  and continuing.t
f280: 6f 20 74 68 65 20 72 69 67 68 74 2e 20 5e 54 68  o the right. ^Th
f290: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
f2a0: 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  CASE expression 
f2b0: 69 73 20 74 68 65 20 65 76 61 6c 75 61 74 69 6f  is the evaluatio
f2c0: 6e 20 6f 66 20 74 68 65 20 54 48 45 4e 0a 65 78  n of the THEN.ex
f2d0: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 63 6f  pression that co
f2e0: 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
f2f0: 20 66 69 72 73 74 20 57 48 45 4e 20 65 78 70 72   first WHEN expr
f300: 65 73 73 69 6f 6e 20 74 68 61 74 20 65 76 61 6c  ession that eval
f310: 75 61 74 65 73 20 74 6f 0a 74 72 75 65 2e 20 5e  uates to.true. ^
f320: 4f 72 2c 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74  Or, if none of t
f330: 68 65 20 57 48 45 4e 20 65 78 70 72 65 73 73 69  he WHEN expressi
f340: 6f 6e 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20  ons evaluate to 
f350: 74 72 75 65 2c 20 74 68 65 20 72 65 73 75 6c 74  true, the result
f360: 20 6f 66 0a 65 76 61 6c 75 61 74 69 6e 67 20 74   of.evaluating t
f370: 68 65 20 45 4c 53 45 20 65 78 70 72 65 73 73 69  he ELSE expressi
f380: 6f 6e 2c 20 69 66 20 61 6e 79 2e 20 5e 49 66 20  on, if any. ^If 
f390: 74 68 65 72 65 20 69 73 20 6e 6f 20 45 4c 53 45  there is no ELSE
f3a0: 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 0a   expression and.
f3b0: 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e  none of the WHEN
f3c0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65   expressions are
f3d0: 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20   true, then the 
f3e0: 6f 76 65 72 61 6c 6c 20 72 65 73 75 6c 74 20 69  overall result i
f3f0: 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e 41 20 4e  s NULL...<p>^A N
f400: 55 4c 4c 20 72 65 73 75 6c 74 20 69 73 20 63 6f  ULL result is co
f410: 6e 73 69 64 65 72 65 64 20 75 6e 74 72 75 65 20  nsidered untrue 
f420: 77 68 65 6e 20 65 76 61 6c 75 61 74 69 6e 67 20  when evaluating 
f430: 57 48 45 4e 20 74 65 72 6d 73 2e 0a 0a 3c 70 3e  WHEN terms...<p>
f440: 5e 49 6e 20 61 20 43 41 53 45 20 77 69 74 68 20  ^In a CASE with 
f450: 61 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f  a base expressio
f460: 6e 2c 20 74 68 65 20 62 61 73 65 20 65 78 70 72  n, the base expr
f470: 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61  ession is evalua
f480: 74 65 64 20 6a 75 73 74 0a 6f 6e 63 65 20 61 6e  ted just.once an
f490: 64 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  d the result is 
f4a0: 63 6f 6d 70 61 72 65 64 20 61 67 61 69 6e 73 74  compared against
f4b0: 20 74 68 65 20 65 76 61 6c 75 61 74 69 6f 6e 20   the evaluation 
f4c0: 6f 66 20 65 61 63 68 20 57 48 45 4e 20 0a 65 78  of each WHEN .ex
f4d0: 70 72 65 73 73 69 6f 6e 20 66 72 6f 6d 20 6c 65  pression from le
f4e0: 66 74 20 74 6f 20 72 69 67 68 74 2e 20 5e 54 68  ft to right. ^Th
f4f0: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
f500: 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  CASE expression 
f510: 69 73 20 74 68 65 20 0a 65 76 61 6c 75 61 74 69  is the .evaluati
f520: 6f 6e 20 6f 66 20 74 68 65 20 54 48 45 4e 20 65  on of the THEN e
f530: 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 63  xpression that c
f540: 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
f550: 65 20 66 69 72 73 74 20 57 48 45 4e 0a 65 78 70  e first WHEN.exp
f560: 72 65 73 73 69 6f 6e 20 66 6f 72 20 77 68 69 63  ression for whic
f570: 68 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  h the comparison
f580: 20 69 73 20 74 72 75 65 2e 20 5e 4f 72 2c 20 69   is true. ^Or, i
f590: 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48  f none of the WH
f5a0: 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 65  EN.expressions e
f5b0: 76 61 6c 75 61 74 65 20 74 6f 20 61 20 76 61 6c  valuate to a val
f5c0: 75 65 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  ue equal to the 
f5d0: 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c  base expression,
f5e0: 20 74 68 65 20 72 65 73 75 6c 74 0a 6f 66 20 65   the result.of e
f5f0: 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 45 4c  valuating the EL
f600: 53 45 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69  SE expression, i
f610: 66 20 61 6e 79 2e 20 5e 49 66 20 74 68 65 72 65  f any. ^If there
f620: 20 69 73 20 6e 6f 20 45 4c 53 45 20 65 78 70 72   is no ELSE expr
f630: 65 73 73 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20  ession and.none 
f640: 6f 66 20 74 68 65 20 57 48 45 4e 20 65 78 70 72  of the WHEN expr
f650: 65 73 73 69 6f 6e 73 20 70 72 6f 64 75 63 65 20  essions produce 
f660: 61 20 72 65 73 75 6c 74 20 65 71 75 61 6c 20 74  a result equal t
f670: 6f 20 74 68 65 20 62 61 73 65 20 65 78 70 72 65  o the base expre
f680: 73 73 69 6f 6e 2c 0a 74 68 65 20 6f 76 65 72 61  ssion,.the overa
f690: 6c 6c 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  ll result is NUL
f6a0: 4c 2e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 63 6f 6d  L...<p>^When com
f6b0: 70 61 72 69 6e 67 20 61 20 62 61 73 65 20 65 78  paring a base ex
f6c0: 70 72 65 73 73 69 6f 6e 20 61 67 61 69 6e 73 74  pression against
f6d0: 20 61 20 57 48 45 4e 20 65 78 70 72 65 73 73 69   a WHEN expressi
f6e0: 6f 6e 2c 20 74 68 65 20 73 61 6d 65 0a 63 6f 6c  on, the same.col
f6f0: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c  lating sequence,
f700: 20 61 66 66 69 6e 69 74 79 2c 20 61 6e 64 20 4e   affinity, and N
f710: 55 4c 4c 2d 68 61 6e 64 6c 69 6e 67 20 72 75 6c  ULL-handling rul
f720: 65 73 20 61 70 70 6c 79 20 61 73 20 69 66 20 74  es apply as if t
f730: 68 65 0a 62 61 73 65 20 65 78 70 72 65 73 73 69  he.base expressi
f740: 6f 6e 20 61 6e 64 20 57 48 45 4e 20 65 78 70 72  on and WHEN expr
f750: 65 73 73 69 6f 6e 20 61 72 65 20 72 65 73 70 65  ession are respe
f760: 63 74 69 76 65 6c 79 20 74 68 65 20 6c 65 66 74  ctively the left
f770: 2d 20 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64  - and.right-hand
f780: 20 6f 70 65 72 61 6e 64 73 20 6f 66 20 61 6e 20   operands of an 
f790: 3c 62 69 67 3e 3c 62 3e 3d 3c 2f 62 3e 3c 2f 62  <big><b>=</b></b
f7a0: 69 67 3e 20 6f 70 65 72 61 74 6f 72 2e 3c 2f 70  ig> operator.</p
f7b0: 3e 20 5e 49 66 20 74 68 65 20 62 61 73 65 20 0a  > ^If the base .
f7c0: 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 4e 55  expression is NU
f7d0: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
f7e0: 6c 74 20 6f 66 20 74 68 65 20 43 41 53 45 20 69  lt of the CASE i
f7f0: 73 20 61 6c 77 61 79 73 20 74 68 65 20 72 65 73  s always the res
f800: 75 6c 74 20 0a 6f 66 20 65 76 61 6c 75 61 74 69  ult .of evaluati
f810: 6e 67 20 74 68 65 20 45 4c 53 45 20 65 78 70 72  ng the ELSE expr
f820: 65 73 73 69 6f 6e 20 69 66 20 69 74 20 65 78 69  ession if it exi
f830: 73 74 73 2c 20 6f 72 20 4e 55 4c 4c 20 69 66 20  sts, or NULL if 
f840: 69 74 20 64 6f 65 73 20 6e 6f 74 2e 0a 0a 3c 70  it does not...<p
f850: 3e 5e 42 6f 74 68 20 66 6f 72 6d 73 20 6f 66 20  >^Both forms of 
f860: 74 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73  the CASE express
f870: 69 6f 6e 20 75 73 65 20 6c 61 7a 79 2c 20 6f 72  ion use lazy, or
f880: 20 73 68 6f 72 74 2d 63 69 72 63 75 69 74 2c 20   short-circuit, 
f890: 0a 65 76 61 6c 75 61 74 69 6f 6e 2e 0a 0a 3c 70  .evaluation...<p
f8a0: 3e 5e 28 54 68 65 20 6f 6e 6c 79 20 64 69 66 66  >^(The only diff
f8b0: 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74  erence between t
f8c0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 77 6f  he following two
f8d0: 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
f8e0: 73 20 69 73 20 74 68 61 74 20 0a 74 68 65 20 3c  s is that .the <
f8f0: 69 3e 78 3c 2f 69 3e 20 65 78 70 72 65 73 73 69  i>x</i> expressi
f900: 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  on is evaluated 
f910: 65 78 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20  exactly once in 
f920: 74 68 65 20 66 69 72 73 74 20 65 78 61 6d 70 6c  the first exampl
f930: 65 20 62 75 74 20 0a 6d 69 67 68 74 20 62 65 20  e but .might be 
f940: 65 76 61 6c 75 61 74 65 64 20 6d 75 6c 74 69 70  evaluated multip
f950: 6c 65 20 74 69 6d 65 73 20 69 6e 20 74 68 65 20  le times in the 
f960: 73 65 63 6f 6e 64 3a 0a 0a 3c 75 6c 3e 3c 70 72  second:..<ul><pr
f970: 65 3e 0a 3c 6c 69 3e 43 41 53 45 20 78 20 57 48  e>.<li>CASE x WH
f980: 45 4e 20 77 31 20 54 48 45 4e 20 72 31 20 57 48  EN w1 THEN r1 WH
f990: 45 4e 20 77 32 20 54 48 45 4e 20 72 32 20 45 4c  EN w2 THEN r2 EL
f9a0: 53 45 20 72 33 20 45 4e 44 0a 3c 6c 69 3e 43 41  SE r3 END.<li>CA
f9b0: 53 45 20 57 48 45 4e 20 78 3d 77 31 20 54 48 45  SE WHEN x=w1 THE
f9c0: 4e 20 72 31 20 57 48 45 4e 20 78 3d 77 32 20 54  N r1 WHEN x=w2 T
f9d0: 48 45 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45  HEN r2 ELSE r3 E
f9e0: 4e 44 0a 3c 2f 70 72 65 3e 3c 2f 75 6c 3e 29 5e  ND.</pre></ul>)^
f9f0: 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
fa00: 65 6e 74 20 69 6e 5f 6f 70 20 7b 49 4e 20 6f 70  ent in_op {IN op
fa10: 65 72 61 74 6f 72 7d 20 7b 4e 4f 54 20 49 4e 20  erator} {NOT IN 
fa20: 6f 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a  operator}</tcl>.
fa30: 3c 68 33 3e 54 68 65 20 49 4e 20 61 6e 64 20 4e  <h3>The IN and N
fa40: 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 73 3c  OT IN operators<
fa50: 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 20  /h3>.<p>^The IN 
fa60: 61 6e 64 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61  and NOT IN opera
fa70: 74 6f 72 73 20 74 61 6b 65 20 61 20 73 69 6e 67  tors take a sing
fa80: 6c 65 20 73 63 61 6c 61 72 20 6f 70 65 72 61 6e  le scalar operan
fa90: 64 20 6f 6e 20 74 68 65 0a 6c 65 66 74 20 61 6e  d on the.left an
faa0: 64 20 61 20 76 65 63 74 6f 72 20 6f 70 65 72 61  d a vector opera
fab0: 6e 64 20 6f 6e 20 74 68 65 20 72 69 67 68 74 0a  nd on the right.
fac0: 66 6f 72 6d 65 64 20 62 79 20 61 6e 20 65 78 70  formed by an exp
fad0: 6c 69 63 69 74 20 6c 69 73 74 20 6f 66 20 7a 65  licit list of ze
fae0: 72 6f 20 6f 72 20 6d 6f 72 65 20 73 63 61 6c 61  ro or more scala
faf0: 72 73 20 6f 72 20 62 79 20 61 20 0a 73 69 6e 67  rs or by a .sing
fb00: 6c 65 20 73 75 62 71 75 65 72 79 2e 0a 5e 57 68  le subquery..^Wh
fb10: 65 6e 20 74 68 65 20 72 69 67 68 74 20 6f 70 65  en the right ope
fb20: 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e 20 6f 72  rand of an IN or
fb30: 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72   NOT IN operator
fb40: 20 69 73 20 61 20 73 75 62 71 75 65 72 79 2c 20   is a subquery, 
fb50: 74 68 65 0a 73 75 62 71 75 65 72 79 20 6d 75 73  the.subquery mus
fb60: 74 20 68 61 76 65 20 61 20 73 69 6e 67 6c 65 20  t have a single 
fb70: 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 2e 0a 5e  result column..^
fb80: 57 68 65 6e 20 74 68 65 20 72 69 67 68 74 20 6f  When the right o
fb90: 70 65 72 61 6e 64 20 69 73 20 61 6e 20 65 6d 70  perand is an emp
fba0: 74 79 20 73 65 74 2c 20 74 68 65 20 72 65 73 75  ty set, the resu
fbb0: 6c 74 20 6f 66 20 49 4e 20 69 73 20 66 61 6c 73  lt of IN is fals
fbc0: 65 20 61 6e 64 20 74 68 65 0a 72 65 73 75 6c 74  e and the.result
fbd0: 20 6f 66 20 4e 4f 54 20 49 4e 20 69 73 20 74 72   of NOT IN is tr
fbe0: 75 65 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ue, regardless o
fbf0: 66 20 74 68 65 20 6c 65 66 74 20 6f 70 65 72 61  f the left opera
fc00: 6e 64 20 61 6e 64 20 65 76 65 6e 20 69 66 20 74  nd and even if t
fc10: 68 65 0a 6c 65 66 74 20 6f 70 65 72 61 6e 64 20  he.left operand 
fc20: 69 73 20 4e 55 4c 4c 2e 0a 5e 28 54 68 65 20 72  is NULL..^(The r
fc30: 65 73 75 6c 74 20 6f 66 20 61 6e 20 49 4e 20 6f  esult of an IN o
fc40: 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f  r NOT IN operato
fc50: 72 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  r is determined 
fc60: 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  by the following
fc70: 0a 6d 61 74 72 69 78 3a 0a 0a 3c 63 65 6e 74 65  .matrix:..<cente
fc80: 72 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  r>.<table border
fc90: 3d 31 3e 0a 3c 74 72 3e 0a 3c 74 68 3e 4c 65 66  =1>.<tr>.<th>Lef
fca0: 74 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e 69 73  t operand <br>is
fcb0: 20 4e 55 4c 4c 0a 3c 74 68 3e 52 69 67 68 74 20   NULL.<th>Right 
fcc0: 6f 70 65 72 61 6e 64 20 3c 62 72 3e 63 6f 6e 74  operand <br>cont
fcd0: 61 69 6e 73 20 4e 55 4c 4c 0a 3c 74 68 3e 52 69  ains NULL.<th>Ri
fce0: 67 68 74 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e  ght operand <br>
fcf0: 69 73 20 61 6e 20 65 6d 70 74 79 20 73 65 74 0a  is an empty set.
fd00: 3c 74 68 3e 4c 65 66 74 20 6f 70 65 72 61 6e 64  <th>Left operand
fd10: 20 66 6f 75 6e 64 20 3c 62 72 3e 77 69 74 68 69   found <br>withi
fd20: 6e 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 0a  n right operand.
fd30: 3c 74 68 3e 52 65 73 75 6c 74 20 6f 66 20 3c 62  <th>Result of <b
fd40: 72 3e 49 4e 20 6f 70 65 72 61 74 6f 72 0a 3c 74  r>IN operator.<t
fd50: 68 3e 52 65 73 75 6c 74 20 6f 66 20 3c 62 72 3e  h>Result of <br>
fd60: 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 0a  NOT IN operator.
fd70: 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
fd80: 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
fd90: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f  lign="center">no
fda0: 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
fdb0: 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
fdc0: 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
fdd0: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
fde0: 66 61 6c 73 65 0a 3c 74 64 20 61 6c 69 67 6e 3d  false.<td align=
fdf0: 22 63 65 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74  "center">true.<t
fe00: 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  r>.<td align="ce
fe10: 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d  nter">does not m
fe20: 61 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d  atter.<td align=
fe30: 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
fe40: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79  align="center">y
fe50: 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  es.<td align="ce
fe60: 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
fe70: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61 6c 73  gn="center">fals
fe80: 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  e.<td align="cen
fe90: 74 65 72 22 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c  ter">true.<tr>.<
fea0: 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
feb0: 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
fec0: 63 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74  center">does not
fed0: 20 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c 69 67   matter.<td alig
fee0: 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74  n="center">no.<t
fef0: 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
ff00: 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  >yes.<td align="
ff10: 63 65 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74 64  center">true.<td
ff20: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
ff30: 66 61 6c 73 65 0a 3c 74 72 3e 0a 3c 74 64 20 61  false.<tr>.<td a
ff40: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f  lign="center">no
ff50: 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
ff60: 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67  er">yes.<td alig
ff70: 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74  n="center">no.<t
ff80: 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
ff90: 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
ffa0: 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64 20  enter">NULL.<td 
ffb0: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e  align="center">N
ffc0: 55 4c 4c 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  ULL.<tr>.<td ali
ffd0: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a  gn="center">yes.
ffe0: 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
fff0: 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74  r">does not matt
10000 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  er.<td align="ce
10010 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
10020 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73  gn="center">does
10030 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20   not matter.<td 
10040 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e  align="center">N
10050 55 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  ULL.<td align="c
10060 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 2f 74 61  enter">NULL.</ta
10070 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e  ble>.</center>)^
10080 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20  ..<p>^Note that 
10090 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74 68  SQLite allows th
100a0 65 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20  e parenthesized 
100b0 6c 69 73 74 20 6f 66 20 73 63 61 6c 61 72 20 76  list of scalar v
100c0 61 6c 75 65 73 20 6f 6e 0a 74 68 65 20 72 69 67  alues on.the rig
100d0 68 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20  ht-hand side of 
100e0 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20  an IN or NOT IN 
100f0 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20 61  operator to be a
10100 6e 20 65 6d 70 74 79 20 6c 69 73 74 20 62 75 74  n empty list but
10110 0a 6d 6f 73 74 20 6f 74 68 65 72 20 53 51 4c 20  .most other SQL 
10120 64 61 74 61 62 61 73 65 20 64 61 74 61 62 61 73  database databas
10130 65 20 65 6e 67 69 6e 65 73 20 61 6e 64 20 74 68  e engines and th
10140 65 20 53 51 4c 39 32 20 73 74 61 6e 64 61 72 64  e SQL92 standard
10150 20 72 65 71 75 69 72 65 0a 74 68 65 20 6c 69 73   require.the lis
10160 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 74 20  t to contain at 
10170 6c 65 61 73 74 20 6f 6e 65 20 65 6c 65 6d 65 6e  least one elemen
10180 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  t.</p>..<tcl>hd_
10190 66 72 61 67 6d 65 6e 74 20 69 6e 5f 6f 70 20 7b  fragment in_op {
101a0 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 7d  EXISTS operator}
101b0 20 7b 4e 4f 54 20 45 58 49 53 54 53 20 6f 70 65   {NOT EXISTS ope
101c0 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  rator}</tcl>.<h3
101d0 3e 54 68 65 20 45 58 49 53 54 53 20 6f 70 65 72  >The EXISTS oper
101e0 61 74 6f 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54  ator</h3>..<p>^T
101f0 68 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74  he EXISTS operat
10200 6f 72 20 61 6c 77 61 79 73 20 65 76 61 6c 75 61  or always evalua
10210 74 65 73 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68  tes to one of th
10220 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73  e integer values
10230 20 30 20 0a 61 6e 64 20 31 2e 20 5e 49 66 20 65   0 .and 1. ^If e
10240 78 65 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c  xecuting the SEL
10250 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 73 70  ECT statement sp
10260 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 72  ecified as the r
10270 69 67 68 74 2d 68 61 6e 64 20 0a 6f 70 65 72 61  ight-hand .opera
10280 6e 64 20 6f 66 20 74 68 65 20 45 58 49 53 54 53  nd of the EXISTS
10290 20 6f 70 65 72 61 74 6f 72 20 77 6f 75 6c 64 20   operator would 
102a0 72 65 74 75 72 6e 20 6f 6e 65 20 6f 72 20 6d 6f  return one or mo
102b0 72 65 20 72 6f 77 73 2c 20 74 68 65 6e 20 74 68  re rows, then th
102c0 65 0a 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f  e.EXISTS operato
102d0 72 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 31  r evaluates to 1
102e0 2e 20 5e 49 66 20 65 78 65 63 75 74 69 6e 67 20  . ^If executing 
102f0 74 68 65 20 53 45 4c 45 43 54 20 77 6f 75 6c 64  the SELECT would
10300 20 72 65 74 75 72 6e 0a 6e 6f 20 72 6f 77 73 20   return.no rows 
10310 61 74 20 61 6c 6c 2c 20 74 68 65 6e 20 74 68 65  at all, then the
10320 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72   EXISTS operator
10330 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 30 2e   evaluates to 0.
10340 20 0a 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d 62 65   ..<p>^The numbe
10350 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
10360 65 61 63 68 20 72 6f 77 20 72 65 74 75 72 6e 65  each row returne
10370 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 20  d by the SELECT 
10380 73 74 61 74 65 6d 65 6e 74 0a 28 69 66 20 61 6e  statement.(if an
10390 79 29 20 61 6e 64 20 74 68 65 20 73 70 65 63 69  y) and the speci
103a0 66 69 63 20 76 61 6c 75 65 73 20 72 65 74 75 72  fic values retur
103b0 6e 65 64 20 68 61 76 65 20 6e 6f 20 65 66 66 65  ned have no effe
103c0 63 74 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74  ct on the result
103d0 73 0a 6f 66 20 74 68 65 20 45 58 49 53 54 53 20  s.of the EXISTS 
103e0 6f 70 65 72 61 74 6f 72 2e 20 5e 49 6e 20 70 61  operator. ^In pa
103f0 72 74 69 63 75 6c 61 72 2c 20 72 6f 77 73 20 63  rticular, rows c
10400 6f 6e 74 61 69 6e 69 6e 67 20 4e 55 4c 4c 20 76  ontaining NULL v
10410 61 6c 75 65 73 20 61 72 65 0a 6e 6f 74 20 68 61  alues are.not ha
10420 6e 64 6c 65 64 20 61 6e 79 20 64 69 66 66 65 72  ndled any differ
10430 65 6e 74 6c 79 20 66 72 6f 6d 20 72 6f 77 73 20  ently from rows 
10440 77 69 74 68 6f 75 74 20 4e 55 4c 4c 20 76 61 6c  without NULL val
10450 75 65 73 2e 0a 0a 3c 68 33 3e 53 63 61 6c 61 72  ues...<h3>Scalar
10460 20 53 75 62 71 75 65 72 69 65 73 3c 2f 68 33 3e   Subqueries</h3>
10470 0a 0a 3c 70 3e 5e 41 20 5b 53 45 4c 45 43 54 5d  ..<p>^A [SELECT]
10480 20 73 74 61 74 65 6d 65 6e 74 20 65 6e 63 6c 6f   statement enclo
10490 73 65 64 20 69 6e 20 70 61 72 65 6e 74 68 65 73  sed in parenthes
104a0 65 73 20 6d 61 79 20 61 70 70 65 61 72 20 61 73  es may appear as
104b0 20 61 20 73 63 61 6c 61 72 0a 71 75 61 6e 74 69   a scalar.quanti
104c0 74 79 2e 20 5e 41 20 5b 53 45 4c 45 43 54 5d 20  ty. ^A [SELECT] 
104d0 75 73 65 64 20 61 73 20 61 20 73 63 61 6c 61 72  used as a scalar
104e0 20 71 75 61 6e 74 69 74 79 20 6d 75 73 74 20 72   quantity must r
104f0 65 74 75 72 6e 20 61 20 72 65 73 75 6c 74 20 73  eturn a result s
10500 65 74 0a 77 69 74 68 20 61 20 73 69 6e 67 6c 65  et.with a single
10510 20 63 6f 6c 75 6d 6e 2e 20 5e 54 68 65 20 72 65   column. ^The re
10520 73 75 6c 74 20 6f 66 20 74 68 65 20 65 78 70 72  sult of the expr
10530 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 76 61  ession is the va
10540 6c 75 65 20 6f 66 20 74 68 65 0a 6f 6e 6c 79 20  lue of the.only 
10550 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 69  column in the fi
10560 72 73 74 20 72 6f 77 20 72 65 74 75 72 6e 65 64  rst row returned
10570 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73   by the SELECT s
10580 74 61 74 65 6d 65 6e 74 2e 20 5e 49 66 20 74 68  tatement. ^If th
10590 65 20 53 45 4c 45 43 54 20 0a 79 69 65 6c 64 73  e SELECT .yields
105a0 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72   more than one r
105b0 65 73 75 6c 74 20 72 6f 77 2c 20 61 6c 6c 20 72  esult row, all r
105c0 6f 77 73 20 61 66 74 65 72 20 74 68 65 20 66 69  ows after the fi
105d0 72 73 74 20 61 72 65 20 69 67 6e 6f 72 65 64 2e  rst are ignored.
105e0 20 5e 49 66 0a 74 68 65 20 53 45 4c 45 43 54 20   ^If.the SELECT 
105f0 79 69 65 6c 64 73 20 6e 6f 20 72 6f 77 73 2c 20  yields no rows, 
10600 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 6f  then the value o
10610 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
10620 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e 41   is NULL...<p>^A
10630 6c 6c 20 74 79 70 65 73 20 6f 66 20 5b 53 45 4c  ll types of [SEL
10640 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c 20  ECT] statement, 
10650 69 6e 63 6c 75 64 69 6e 67 20 61 67 67 72 65 67  including aggreg
10660 61 74 65 20 61 6e 64 20 63 6f 6d 70 6f 75 6e 64  ate and compound
10670 20 53 45 4c 45 43 54 0a 71 75 65 72 69 65 73 20   SELECT.queries 
10680 28 71 75 65 72 69 65 73 20 77 69 74 68 20 6b 65  (queries with ke
10690 79 77 6f 72 64 73 20 6c 69 6b 65 20 55 4e 49 4f  ywords like UNIO
106a0 4e 20 6f 72 20 45 58 43 45 50 54 29 20 61 72 65  N or EXCEPT) are
106b0 20 61 6c 6c 6f 77 65 64 20 61 73 20 73 63 61 6c   allowed as scal
106c0 61 72 0a 73 75 62 71 75 65 72 69 65 73 2e 0a 0a  ar.subqueries...
106d0 3c 68 33 3e 54 61 62 6c 65 20 43 6f 6c 75 6d 6e  <h3>Table Column
106e0 20 4e 61 6d 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e   Names</h3>..<p>
106f0 5e 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63  ^A column name c
10700 61 6e 20 62 65 20 61 6e 79 20 6f 66 20 74 68 65  an be any of the
10710 20 6e 61 6d 65 73 20 64 65 66 69 6e 65 64 20 69   names defined i
10720 6e 20 74 68 65 20 5b 43 52 45 41 54 45 20 54 41  n the [CREATE TA
10730 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20 6f  BLE].statement o
10740 72 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  r one of the fol
10750 6c 6f 77 69 6e 67 20 73 70 65 63 69 61 6c 20 69  lowing special i
10760 64 65 6e 74 69 66 69 65 72 73 3a 20 22 3c 62 3e  dentifiers: "<b>
10770 52 4f 57 49 44 3c 2f 62 3e 22 2c 0a 22 3c 62 3e  ROWID</b>",."<b>
10780 4f 49 44 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c 62  OID</b>", or "<b
10790 3e 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22 2e 0a 5e  >_ROWID_</b>"..^
107a0 54 68 65 73 65 20 73 70 65 63 69 61 6c 20 69 64  These special id
107b0 65 6e 74 69 66 69 65 72 73 20 61 6c 6c 20 64 65  entifiers all de
107c0 73 63 72 69 62 65 20 74 68 65 0a 75 6e 69 71 75  scribe the.uniqu
107d0 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 28 74  e integer key (t
107e0 68 65 20 5b 72 6f 77 69 64 5d 29 20 61 73 73 6f  he [rowid]) asso
107f0 63 69 61 74 65 64 20 77 69 74 68 20 65 76 65 72  ciated with ever
10800 79 20 0a 72 6f 77 20 6f 66 20 65 76 65 72 79 20  y .row of every 
10810 74 61 62 6c 65 2e 0a 5e 54 68 65 20 73 70 65 63  table..^The spec
10820 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73 20  ial identifiers 
10830 6f 6e 6c 79 20 72 65 66 65 72 20 74 6f 20 74 68  only refer to th
10840 65 20 72 6f 77 20 6b 65 79 20 69 66 20 74 68 65  e row key if the
10850 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 0a   [CREATE TABLE].
10860 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e  statement does n
10870 6f 74 20 64 65 66 69 6e 65 20 61 20 72 65 61 6c  ot define a real
10880 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 74 68 65   column with the
10890 20 73 61 6d 65 20 6e 61 6d 65 2e 0a 5e 54 68 65   same name..^The
108a0 20 72 6f 77 69 64 20 63 61 6e 20 62 65 20 75 73   rowid can be us
108b0 65 64 20 61 6e 79 77 68 65 72 65 20 61 20 72 65  ed anywhere a re
108c0 67 75 6c 61 72 0a 63 6f 6c 75 6d 6e 20 63 61 6e  gular.column can
108d0 20 62 65 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c   be used.</p>..<
108e0 70 3e 5e 41 20 5b 53 45 4c 45 43 54 5d 20 73 74  p>^A [SELECT] st
108f0 61 74 65 6d 65 6e 74 20 75 73 65 64 20 61 73 20  atement used as 
10900 65 69 74 68 65 72 20 61 20 73 63 61 6c 61 72 20  either a scalar 
10910 73 75 62 71 75 65 72 79 20 6f 72 20 61 73 20 74  subquery or as t
10920 68 65 20 0a 72 69 67 68 74 2d 68 61 6e 64 20 6f  he .right-hand o
10930 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e 2c  perand of an IN,
10940 20 4e 4f 54 20 49 4e 20 6f 72 20 45 58 49 53 54   NOT IN or EXIST
10950 53 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79  S expression may
10960 20 63 6f 6e 74 61 69 6e 20 0a 72 65 66 65 72 65   contain .refere
10970 6e 63 65 73 20 74 6f 20 63 6f 6c 75 6d 6e 73 20  nces to columns 
10980 69 6e 20 74 68 65 20 6f 75 74 65 72 20 71 75 65  in the outer que
10990 72 79 2e 20 53 75 63 68 20 61 20 73 75 62 71 75  ry. Such a subqu
109a0 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 73 0a  ery is known as.
109b0 61 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62  a correlated sub
109c0 71 75 65 72 79 2e 20 5e 41 20 63 6f 72 72 65 6c  query. ^A correl
109d0 61 74 65 64 20 73 75 62 71 75 65 72 79 20 69 73  ated subquery is
109e0 20 72 65 65 76 61 6c 75 61 74 65 64 20 65 61 63   reevaluated eac
109f0 68 20 74 69 6d 65 0a 69 74 73 20 72 65 73 75 6c  h time.its resul
10a00 74 20 69 73 20 72 65 71 75 69 72 65 64 2e 20 5e  t is required. ^
10a10 41 6e 20 75 6e 63 6f 72 72 65 6c 61 74 65 64 20  An uncorrelated 
10a20 73 75 62 71 75 65 72 79 20 69 73 20 65 76 61 6c  subquery is eval
10a30 75 61 74 65 64 20 6f 6e 6c 79 20 6f 6e 63 65 0a  uated only once.
10a40 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 72  and the result r
10a50 65 75 73 65 64 20 61 73 20 6e 65 63 65 73 73 61  eused as necessa
10a60 72 79 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  ry...<tcl>hd_fra
10a70 67 6d 65 6e 74 20 63 61 73 74 65 78 70 72 20 7b  gment castexpr {
10a80 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 7d  CAST expression}
10a90 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 41 53 54 20  </tcl>.<h3>CAST 
10aa0 65 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e  expressions</h3>
10ab0 0a 0a 3c 70 3e 41 20 43 41 53 54 20 65 78 70 72  ..<p>A CAST expr
10ac0 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 74  ession is used t
10ad0 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 76 61  o convert the va
10ae0 6c 75 65 20 6f 66 20 26 6c 74 3b 65 78 70 72 26  lue of &lt;expr&
10af0 67 74 3b 20 74 6f 20 0a 61 20 64 69 66 66 65 72  gt; to .a differ
10b00 65 6e 74 20 5b 73 74 6f 72 61 67 65 20 63 6c 61  ent [storage cla
10b10 73 73 5d 20 69 6e 20 61 20 73 69 6d 69 6c 61 72  ss] in a similar
10b20 20 77 61 79 20 74 6f 20 74 68 65 20 63 6f 6e 76   way to the conv
10b30 65 72 73 69 6f 6e 20 74 68 61 74 20 74 61 6b 65  ersion that take
10b40 73 0a 70 6c 61 63 65 20 77 68 65 6e 20 61 20 5b  s.place when a [
10b50 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 5d  column affinity]
10b60 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20 61   is applied to a
10b70 20 76 61 6c 75 65 2e 20 5e 41 70 70 6c 69 63 61   value. ^Applica
10b80 74 69 6f 6e 20 6f 66 20 61 20 43 41 53 54 0a 65  tion of a CAST.e
10b90 78 70 72 65 73 73 69 6f 6e 20 69 73 20 64 69 66  xpression is dif
10ba0 66 65 72 65 6e 74 20 74 6f 20 61 70 70 6c 69 63  ferent to applic
10bb0 61 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 75 6d  ation of a colum
10bc0 6e 20 61 66 66 69 6e 69 74 79 2c 20 61 73 0a 77  n affinity, as.w
10bd0 69 74 68 20 61 20 43 41 53 54 20 65 78 70 72 65  ith a CAST expre
10be0 73 73 69 6f 6e 20 74 68 65 20 73 74 6f 72 61 67  ssion the storag
10bf0 65 20 63 6c 61 73 73 20 63 6f 6e 76 65 72 73 69  e class conversi
10c00 6f 6e 20 69 73 20 66 6f 72 63 65 64 20 65 76 65  on is forced eve
10c10 6e 20 0a 69 66 20 69 74 20 69 73 20 6c 6f 73 73  n .if it is loss
10c20 79 20 61 6e 64 20 69 72 72 72 65 76 65 72 73 69  y and irrreversi
10c30 62 6c 65 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  ble...<p>^If the
10c40 20 76 61 6c 75 65 20 6f 66 20 26 6c 74 3b 65 78   value of &lt;ex
10c50 70 72 26 67 74 3b 20 69 73 20 4e 55 4c 4c 2c 20  pr&gt; is NULL, 
10c60 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
10c70 6f 66 20 74 68 65 20 43 41 53 54 0a 65 78 70 72  of the CAST.expr
10c80 65 73 73 69 6f 6e 20 69 73 20 61 6c 73 6f 20 4e  ession is also N
10c90 55 4c 4c 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c  ULL. ^Otherwise,
10ca0 20 74 68 65 20 73 74 6f 72 61 67 65 20 63 6c 61   the storage cla
10cb0 73 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ss of the result
10cc0 20 76 61 6c 75 65 0a 69 73 20 64 65 74 65 72 6d   value.is determ
10cd0 69 6e 65 64 20 62 79 20 61 70 70 6c 79 69 6e 67  ined by applying
10ce0 20 74 68 65 20 5b 72 75 6c 65 73 20 66 6f 72 20   the [rules for 
10cf0 64 65 74 65 72 6d 69 6e 69 6e 67 20 63 6f 6c 75  determining colu
10d00 6d 6e 20 61 66 66 69 6e 69 74 79 5d 20 74 6f 0a  mn affinity] to.
10d10 74 68 65 20 26 6c 74 3b 74 79 70 65 2d 6e 61 6d  the &lt;type-nam
10d20 65 26 67 74 3b 20 73 70 65 63 69 66 69 65 64 20  e&gt; specified 
10d30 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 43  as part of the C
10d40 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a  AST expression..
10d50 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31  .<table border=1
10d60 3e 0a 3c 74 72 3e 0a 20 20 3c 74 68 3e 20 41 66  >.<tr>.  <th> Af
10d70 66 69 6e 69 74 79 20 6f 66 20 26 6c 74 3b 74 79  finity of &lt;ty
10d80 70 65 2d 6e 61 6d 65 26 67 74 3b 0a 20 20 3c 74  pe-name&gt;.  <t
10d90 68 3e 20 43 6f 6e 76 65 72 73 69 6f 6e 20 50 72  h> Conversion Pr
10da0 6f 63 65 73 73 69 6e 67 0a 3c 74 72 3e 0a 20 20  ocessing.<tr>.  
10db0 3c 74 64 3e 20 4e 4f 4e 45 20 0a 20 20 3c 74 64  <td> NONE .  <td
10dc0 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 76 61 6c  > ^Casting a val
10dd0 75 65 20 74 6f 20 61 20 26 6c 74 3b 74 79 70 65  ue to a &lt;type
10de0 2d 6e 61 6d 65 26 67 74 3b 20 77 69 74 68 20 6e  -name&gt; with n
10df0 6f 20 61 66 66 69 6e 69 74 79 20 63 61 75 73 65  o affinity cause
10e00 73 20 74 68 65 20 76 61 6c 75 65 20 74 6f 0a 20  s the value to. 
10e10 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
10e20 74 6f 20 61 20 42 4c 4f 42 2e 20 20 5e 43 61 73  to a BLOB.  ^Cas
10e30 74 69 6e 67 20 74 6f 20 61 20 42 4c 4f 42 20 63  ting to a BLOB c
10e40 6f 6e 73 69 73 74 73 20 6f 66 20 66 69 72 73 74  onsists of first
10e50 20 63 61 73 74 69 6e 67 0a 20 20 74 68 65 20 76   casting.  the v
10e60 61 6c 75 65 20 74 6f 20 54 45 58 54 20 69 6e 20  alue to TEXT in 
10e70 74 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 6f  the [encoding] o
10e80 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  f the database c
10e90 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65 6e 0a  onnection, then.
10ea0 20 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20 74    interpreting t
10eb0 68 65 20 72 65 73 75 6c 74 69 6e 67 20 62 79 74  he resulting byt
10ec0 65 20 73 65 71 75 65 6e 63 65 20 61 73 20 61 20  e sequence as a 
10ed0 42 4c 4f 42 20 69 6e 73 74 65 61 64 20 6f 66 20  BLOB instead of 
10ee0 61 73 20 54 45 58 54 2e 0a 0a 3c 74 72 3e 0a 20  as TEXT...<tr>. 
10ef0 20 3c 74 64 3e 20 54 45 58 54 0a 20 20 3c 74 64   <td> TEXT.  <td
10f00 3e 20 5e 54 6f 20 63 61 73 74 20 61 20 42 4c 4f  > ^To cast a BLO
10f10 42 20 76 61 6c 75 65 20 74 6f 20 54 45 58 54 2c  B value to TEXT,
10f20 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f 66   the sequence of
10f30 20 62 79 74 65 73 20 74 68 61 74 20 6d 61 6b 65   bytes that make
10f40 20 75 70 20 74 68 65 0a 20 20 42 4c 4f 42 20 69   up the.  BLOB i
10f50 73 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  s interpreted as
10f60 20 74 65 78 74 20 65 6e 63 6f 64 65 64 20 75 73   text encoded us
10f70 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65  ing the database
10f80 20 65 6e 63 6f 64 69 6e 67 2e 0a 20 20 3c 70 3e   encoding..  <p>
10f90 0a 20 20 20 5e 43 61 73 74 69 6e 67 20 61 6e 20  .   ^Casting an 
10fa0 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c 20  INTEGER or REAL 
10fb0 76 61 6c 75 65 20 69 6e 74 6f 20 54 45 58 54 20  value into TEXT 
10fc0 72 65 6e 64 65 72 73 20 74 68 65 20 76 61 6c 75  renders the valu
10fd0 65 20 61 73 20 69 66 20 76 69 61 20 0a 20 20 20  e as if via .   
10fe0 20 5b 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e   [sqlite3_snprin
10ff0 74 66 28 29 5d 20 65 78 63 65 70 74 20 74 68 61  tf()] except tha
11000 74 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20  t the resulting 
11010 54 45 58 54 20 75 73 65 73 20 74 68 65 20 5b 65  TEXT uses the [e
11020 6e 63 6f 64 69 6e 67 5d 20 6f 66 0a 20 20 20 20  ncoding] of.    
11030 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
11040 6e 65 63 74 69 6f 6e 2e 0a 0a 3c 74 72 3e 0a 20  nection...<tr>. 
11050 20 3c 74 64 3e 20 52 45 41 4c 0a 20 20 3c 74 64   <td> REAL.  <td
11060 3e 20 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20  > ^When casting 
11070 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f 20  a BLOB value to 
11080 61 20 52 45 41 4c 2c 20 74 68 65 20 76 61 6c 75  a REAL, the valu
11090 65 20 69 73 20 66 69 72 73 74 20 63 6f 6e 76 65  e is first conve
110a0 72 74 65 64 20 74 6f 0a 20 20 20 20 20 20 20 20  rted to.        
110b0 54 45 58 54 2e 0a 20 20 20 20 20 20 20 3c 70 3e  TEXT..       <p>
110c0 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20  ^When casting a 
110d0 54 45 58 54 20 76 61 6c 75 65 20 74 6f 20 52 45  TEXT value to RE
110e0 41 4c 2c 20 74 68 65 20 6c 6f 6e 67 65 73 74 20  AL, the longest 
110f0 70 6f 73 73 69 62 6c 65 20 70 72 65 66 69 78 20  possible prefix 
11100 6f 66 0a 20 20 20 20 20 20 20 20 74 68 65 20 76  of.        the v
11110 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65  alue that can be
11120 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
11130 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 20 69 73  a real number is
11140 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 0a   extracted from.
11150 20 20 20 20 20 20 20 20 74 68 65 20 54 45 58 54          the TEXT
11160 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 72   value and the r
11170 65 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72 65 64  emainder ignored
11180 2e 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67 20 73  . ^Any leading s
11190 70 61 63 65 73 20 69 6e 20 74 68 65 0a 20 20 20  paces in the.   
111a0 20 20 20 20 20 54 45 58 54 20 76 61 6c 75 65 20       TEXT value 
111b0 61 72 65 20 69 67 6e 6f 72 65 64 20 77 68 65 6e  are ignored when
111c0 20 63 6f 6e 76 65 72 67 69 6e 67 20 66 72 6f 6d   converging from
111d0 20 54 45 58 54 20 74 6f 20 52 45 41 4c 2e 20 5e   TEXT to REAL. ^
111e0 28 49 66 20 74 68 65 72 65 20 69 73 0a 20 20 20  (If there is.   
111f0 20 20 20 20 20 6e 6f 20 70 72 65 66 69 78 20 74       no prefix t
11200 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72  hat can be inter
11210 70 72 65 74 65 64 20 61 73 20 61 20 72 65 61 6c  preted as a real
11220 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65 73   number, the res
11230 75 6c 74 20 6f 66 20 74 68 65 0a 20 20 20 20 20  ult of the.     
11240 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73     conversion is
11250 20 30 2e 30 2e 29 5e 0a 0a 3c 74 72 3e 0a 20 20   0.0.)^..<tr>.  
11260 3c 74 64 3e 20 49 4e 54 45 47 45 52 0a 20 20 3c  <td> INTEGER.  <
11270 74 64 3e 20 5e 57 68 65 6e 20 63 61 73 74 69 6e  td> ^When castin
11280 67 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74  g a BLOB value t
11290 6f 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20 76  o INTEGER, the v
112a0 61 6c 75 65 20 69 73 20 66 69 72 73 74 20 63 6f  alue is first co
112b0 6e 76 65 72 74 65 64 20 74 6f 0a 20 20 20 20 20  nverted to.     
112c0 20 20 20 54 45 58 54 2e 0a 20 20 20 20 20 20 20     TEXT..       
112d0 3c 70 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e 67  <p>^When casting
112e0 20 61 20 54 45 58 54 20 76 61 6c 75 65 20 74 6f   a TEXT value to
112f0 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20 6c 6f   INTEGER, the lo
11300 6e 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 70  ngest possible p
11310 72 65 66 69 78 20 6f 66 0a 20 20 20 20 20 20 20  refix of.       
11320 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20   the value that 
11330 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74  can be interpret
11340 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  ed as an integer
11350 20 6e 75 6d 62 65 72 20 69 73 20 65 78 74 72 61   number is extra
11360 63 74 65 64 20 66 72 6f 6d 0a 20 20 20 20 20 20  cted from.      
11370 20 20 74 68 65 20 54 45 58 54 20 76 61 6c 75 65    the TEXT value
11380 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e 64   and the remaind
11390 65 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41 6e 79  er ignored. ^Any
113a0 20 6c 65 61 64 69 6e 67 20 73 70 61 63 65 73 20   leading spaces 
113b0 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20 54  in the.        T
113c0 45 58 54 20 76 61 6c 75 65 20 77 68 65 6e 20 63  EXT value when c
113d0 6f 6e 76 65 72 74 69 6e 67 20 66 72 6f 6d 20 54  onverting from T
113e0 45 58 54 20 74 6f 20 49 4e 54 45 47 45 52 20 61  EXT to INTEGER a
113f0 72 65 20 69 67 6e 6f 72 65 64 2e 20 5e 49 66 20  re ignored. ^If 
11400 74 68 65 72 65 0a 20 20 20 20 20 20 20 20 69 73  there.        is
11410 20 6e 6f 20 70 72 65 66 69 78 20 74 68 61 74 20   no prefix that 
11420 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74  can be interpret
11430 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  ed as an integer
11440 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65 73   number, the res
11450 75 6c 74 0a 20 20 20 20 20 20 20 20 6f 66 20 74  ult.        of t
11460 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73  he conversion is
11470 20 30 2e 0a 0a 20 20 20 20 20 20 3c 70 3e 5e 41   0...      <p>^A
11480 20 63 61 73 74 20 6f 66 20 61 20 52 45 41 4c 20   cast of a REAL 
11490 76 61 6c 75 65 20 69 6e 74 6f 20 61 6e 20 49 4e  value into an IN
114a0 54 45 47 45 52 20 77 69 6c 6c 20 74 72 75 6e 63  TEGER will trunc
114b0 61 74 65 20 74 68 65 20 66 72 61 63 74 69 6f 6e  ate the fraction
114c0 61 6c 0a 20 20 20 20 20 20 70 61 72 74 20 6f 66  al.      part of
114d0 20 74 68 65 20 52 45 41 4c 2e 20 20 5e 49 66 20   the REAL.  ^If 
114e0 61 6e 20 52 45 41 4c 20 69 73 20 74 6f 6f 20 6c  an REAL is too l
114f0 61 72 67 65 20 74 6f 20 62 65 20 72 65 70 72 65  arge to be repre
11500 73 65 6e 74 65 64 20 61 73 20 61 6e 20 0a 20 20  sented as an .  
11510 20 20 20 20 49 4e 54 45 47 45 52 20 74 68 65 6e      INTEGER then
11520 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
11530 68 65 20 63 61 73 74 20 69 73 20 74 68 65 20 6c  he cast is the l
11540 61 72 67 65 73 74 20 6e 65 67 61 74 69 76 65 20  argest negative 
11550 69 6e 74 65 67 65 72 3a 20 0a 20 20 20 20 20 20  integer: .      
11560 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  -922337203685477
11570 35 38 30 38 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74  5808...<tr>.  <t
11580 64 3e 20 4e 55 4d 45 52 49 43 0a 20 20 3c 74 64  d> NUMERIC.  <td
11590 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 54 45 58  > ^Casting a TEX
115a0 54 20 6f 72 20 42 4c 4f 42 20 76 61 6c 75 65 20  T or BLOB value 
115b0 69 6e 74 6f 20 4e 55 4d 45 52 49 43 20 66 69 72  into NUMERIC fir
115c0 73 74 20 64 6f 65 73 20 61 20 66 6f 72 63 65 64  st does a forced
115d0 0a 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  .   conversion i
115e0 6e 74 6f 20 52 45 41 4c 20 62 75 74 20 74 68 65  nto REAL but the
115f0 6e 20 66 75 72 74 68 65 72 20 63 6f 6e 76 65 72  n further conver
11600 74 73 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  ts the result in
11610 74 6f 20 49 4e 54 45 47 45 52 20 69 66 0a 20 20  to INTEGER if.  
11620 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65   and only if the
11630 20 63 6f 6e 76 65 72 73 69 6f 6e 20 66 72 6f 6d   conversion from
11640 20 52 45 41 4c 20 74 6f 20 49 4e 54 45 47 45 52   REAL to INTEGER
11650 20 69 73 20 6c 6f 73 73 6c 65 73 73 20 61 6e 64   is lossless and
11660 20 72 65 76 65 72 73 69 62 6c 65 2e 0a 20 20 20   reversible..   
11670 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79  This is the only
11680 20 63 6f 6e 74 65 78 74 20 69 6e 20 53 51 4c 69   context in SQLi
11690 74 65 20 77 68 65 72 65 20 74 68 65 20 4e 55 4d  te where the NUM
116a0 45 52 49 43 20 61 6e 64 20 49 4e 54 45 47 45 52  ERIC and INTEGER
116b0 20 5b 61 66 66 69 6e 69 74 69 65 73 5d 0a 20 20   [affinities].  
116c0 20 62 65 68 61 76 65 20 64 69 66 66 65 72 65 6e   behave differen
116d0 74 6c 79 2e 0a 20 20 20 3c 70 3e 20 5e 43 61 73  tly..   <p> ^Cas
116e0 74 69 6e 67 20 61 20 52 45 41 4c 20 6f 72 20 49  ting a REAL or I
116f0 4e 54 45 47 45 52 20 76 61 6c 75 65 20 74 6f 20  NTEGER value to 
11700 4e 55 4d 45 52 49 43 20 69 73 20 61 20 6e 6f 2d  NUMERIC is a no-
11710 6f 70 2c 20 65 76 65 6e 20 69 66 20 61 20 72 65  op, even if a re
11720 61 6c 0a 20 20 20 76 61 6c 75 65 20 63 6f 75 6c  al.   value coul
11730 64 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20  d be losslessly 
11740 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
11750 69 6e 74 65 67 65 72 2e 0a 0a 3c 2f 74 72 3e 0a  integer...</tr>.
11760 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e 5e 4e  .</table>..<p>^N
11770 6f 74 65 20 74 68 61 74 20 74 68 65 20 72 65 73  ote that the res
11780 75 6c 74 20 66 72 6f 6d 20 63 61 73 74 69 6e 67  ult from casting
11790 20 61 6e 79 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61   any non-BLOB va
117a0 6c 75 65 20 69 6e 74 6f 20 61 20 0a 42 4c 4f 42  lue into a .BLOB
117b0 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20   and the result 
117c0 66 72 6f 6d 20 63 61 73 74 69 6e 67 20 61 6e 79  from casting any
117d0 20 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f   BLOB value into
117e0 20 61 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75   a non-BLOB valu
117f0 65 0a 6d 61 79 20 62 65 20 64 69 66 66 65 72 65  e.may be differe
11800 6e 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  nt depending on 
11810 77 68 65 74 68 65 72 20 74 68 65 20 64 61 74 61  whether the data
11820 62 61 73 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20  base [encoding] 
11830 69 73 20 55 54 46 2d 38 2c 0a 55 54 46 2d 31 36  is UTF-8,.UTF-16
11840 62 65 2c 20 6f 72 20 55 54 46 2d 31 36 6c 65 2e  be, or UTF-16le.
11850 0a 0a 3c 68 33 3e 46 75 6e 63 74 69 6f 6e 73 3c  ..<h3>Functions<
11860 2f 68 33 3e 0a 3c 70 3e 5e 42 6f 74 68 20 5b 63  /h3>.<p>^Both [c
11870 6f 72 65 66 75 6e 63 7c 73 69 6d 70 6c 65 5d 20  orefunc|simple] 
11880 61 6e 64 20 5b 61 67 67 66 75 6e 63 7c 61 67 67  and [aggfunc|agg
11890 72 65 67 61 74 65 5d 20 66 75 6e 63 74 69 6f 6e  regate] function
118a0 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 2e  s are supported.
118b0 0a 28 46 6f 72 20 70 72 65 73 65 6e 74 61 74 69  .(For presentati
118c0 6f 6e 20 70 75 72 70 6f 73 65 73 2c 20 73 69 6d  on purposes, sim
118d0 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  ple functions ar
118e0 65 20 66 75 72 74 68 65 72 20 73 75 62 64 69 76  e further subdiv
118f0 69 64 65 64 20 69 6e 74 6f 0a 5b 63 6f 72 65 66  ided into.[coref
11900 75 6e 63 20 7c 20 63 6f 72 65 20 66 75 6e 63 74  unc | core funct
11910 69 6f 6e 73 5d 20 61 6e 64 20 5b 64 61 74 65 66  ions] and [datef
11920 75 6e 63 20 7c 20 64 61 74 65 2d 74 69 6d 65 20  unc | date-time 
11930 66 75 6e 63 74 69 6f 6e 73 5d 2e 29 0a 5e 41 20  functions].).^A 
11940 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20  simple function 
11950 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 61  can be used in a
11960 6e 79 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20  ny expression.  
11970 5e 53 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e  ^Simple function
11980 73 20 72 65 74 75 72 6e 0a 61 20 72 65 73 75 6c  s return.a resul
11990 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 62 61  t immediately ba
119a0 73 65 64 20 6f 6e 20 74 68 65 69 72 20 69 6e 70  sed on their inp
119b0 75 74 73 2e 20 20 5e 41 67 67 72 65 67 61 74 65  uts.  ^Aggregate
119c0 20 66 75 6e 63 74 69 6f 6e 73 0a 6d 61 79 20 6f   functions.may o
119d0 6e 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20 61  nly be used in a
119e0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
119f0 74 2e 20 20 5e 41 67 67 72 65 67 61 74 65 20 66  t.  ^Aggregate f
11a00 75 6e 63 74 69 6f 6e 73 20 63 6f 6d 70 75 74 65  unctions compute
11a10 0a 74 68 65 69 72 20 72 65 73 75 6c 74 20 61 63  .their result ac
11a20 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 6f 66  ross all rows of
11a30 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e   the result set.
11a40 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
11a50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a90 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
11aa0 6f 6e 20 7b 43 6f 72 65 20 46 75 6e 63 74 69 6f  on {Core Functio
11ab0 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 7b 2a 63  ns} corefunc {*c
11ac0 6f 72 65 66 75 6e 63 7d 0a 70 72 6f 63 20 66 75  orefunc}.proc fu
11ad0 6e 63 64 65 66 20 7b 73 79 6e 74 61 78 20 6b 65  ncdef {syntax ke
11ae0 79 77 6f 72 64 73 20 64 65 73 63 7d 20 7b 0a 20  ywords desc} {. 
11af0 20 68 64 5f 70 75 74 73 20 7b 3c 74 72 3e 7d 0a   hd_puts {<tr>}.
11b00 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c    regsub -all {\
11b10 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d  s+} [string trim
11b20 20 24 73 79 6e 74 61 78 5d 20 7b 3c 62 72 3e 3c   $syntax] {<br><
11b30 2f 62 72 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72  /br>} syntax.  r
11b40 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 28 28 5b  egsub -all {\(([
11b50 5e 2a 29 5d 2b 29 5c 29 7d 20 24 73 79 6e 74 61  ^*)]+)\)} $synta
11b60 78 20 7b 28 3c 69 3e 5c 31 3c 2f 69 3e 29 7d 20  x {(<i>\1</i>)} 
11b70 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20  syntax.  regsub 
11b80 2d 61 6c 6c 20 7b 2c 7d 20 24 73 79 6e 74 61 78  -all {,} $syntax
11b90 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20 73 79 6e 74   {</i>,<i>} synt
11ba0 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  ax.  regsub -all
11bb0 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d   {<i>\.\.\.</i>}
11bc0 20 24 73 79 6e 74 61 78 20 7b 2e 2e 2e 7d 20 73   $syntax {...} s
11bd0 79 6e 74 61 78 0a 20 20 68 64 5f 70 75 74 73 20  yntax.  hd_puts 
11be0 22 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f  "<td valign=\"to
11bf0 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 72 69 67 68  p\" align=\"righ
11c00 74 5c 22 20 77 69 64 74 68 3d 5c 22 31 32 30 5c  t\" width=\"120\
11c10 22 3e 22 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e 67  ">".  if {[lleng
11c20 74 68 20 24 6b 65 79 77 6f 72 64 73 5d 3d 3d 30  th $keywords]==0
11c30 7d 20 7b 0a 20 20 20 20 72 65 67 65 78 70 20 7b  } {.    regexp {
11c40 5b 61 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61 78  [a-z_]+} $syntax
11c50 20 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61   name.    hd_fra
11c60 67 6d 65 6e 74 20 24 6e 61 6d 65 20 2a 24 6e 61  gment $name *$na
11c70 6d 65 20 22 24 7b 6e 61 6d 65 7d 28 29 20 53 51  me "${name}() SQ
11c80 4c 20 66 75 6e 63 74 69 6f 6e 22 0a 20 20 7d 20  L function".  } 
11c90 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 66  else {.    set f
11ca0 72 61 67 6e 61 6d 65 20 5b 6c 69 6e 64 65 78 20  ragname [lindex 
11cb0 24 6b 65 79 77 6f 72 64 73 20 30 5d 0a 20 20 20  $keywords 0].   
11cc0 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e   regsub -all {[^
11cd0 61 2d 7a 5d 7d 20 24 66 72 61 67 6e 61 6d 65 20  a-z]} $fragname 
11ce0 7b 7d 20 66 72 61 67 6e 61 6d 65 0a 20 20 20 20  {} fragname.    
11cf0 68 64 5f 66 72 61 67 6d 65 6e 74 20 24 66 72 61  hd_fragment $fra
11d00 67 6e 61 6d 65 0a 20 20 20 20 65 76 61 6c 20 68  gname.    eval h
11d10 64 5f 6b 65 79 77 6f 72 64 73 20 5b 73 74 72 69  d_keywords [stri
11d20 6e 67 20 6d 61 70 20 7b 5c 6e 20 7b 20 7d 7d 20  ng map {\n { }} 
11d30 24 6b 65 79 77 6f 72 64 73 5d 0a 20 20 7d 0a 20  $keywords].  }. 
11d40 20 68 64 5f 70 75 74 73 20 22 24 73 79 6e 74 61   hd_puts "$synta
11d50 78 3c 2f 74 64 3e 22 0a 20 20 68 64 5f 70 75 74  x</td>".  hd_put
11d60 73 20 7b 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  s {<td valign="t
11d70 6f 70 22 3e 7d 0a 20 20 68 64 5f 72 65 73 6f 6c  op">}.  hd_resol
11d80 76 65 20 24 64 65 73 63 0a 20 20 68 64 5f 70 75  ve $desc.  hd_pu
11d90 74 73 20 7b 3c 2f 74 64 3e 3c 2f 74 72 3e 7d 0a  ts {</td></tr>}.
11da0 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  }.</tcl>..<p>The
11db0 20 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 20   core functions 
11dc0 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65 20  shown below are 
11dd0 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66  available by def
11de0 61 75 6c 74 2e 20 0a 5b 64 61 74 65 66 75 6e 63  ault. .[datefunc
11df0 20 7c 20 44 61 74 65 20 26 61 6d 70 3b 20 54 69   | Date &amp; Ti
11e00 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 6e  me functions] an
11e10 64 0a 5b 61 67 67 66 75 6e 63 20 7c 20 61 67 67  d.[aggfunc | agg
11e20 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
11e30 5d 20 61 72 65 20 64 6f 63 75 6d 65 6e 74 65 64  ] are documented
11e40 20 73 65 70 61 72 61 74 65 6c 79 2e 20 20 41 6e   separately.  An
11e50 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d 61 79  .application may
11e60 20 64 65 66 69 6e 65 20 61 64 64 69 74 69 6f 6e   define addition
11e70 61 6c 0a 66 75 6e 63 74 69 6f 6e 73 20 77 72 69  al.functions wri
11e80 74 74 65 6e 20 69 6e 20 43 20 61 6e 64 20 61 64  tten in C and ad
11e90 64 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62  ded to the datab
11ea0 61 73 65 20 65 6e 67 69 6e 65 20 75 73 69 6e 67  ase engine using
11eb0 0a 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72  .the [sqlite3_cr
11ec0 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d  eate_function()]
11ed0 20 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 74 61 62 6c   API.</p>..<tabl
11ee0 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70  e border=0 cellp
11ef0 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c 3e  adding=10>.<tcl>
11f00 0a 66 75 6e 63 64 65 66 20 7b 61 62 73 28 58 29  .funcdef {abs(X)
11f10 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 61 62  } {} {.  ^The ab
11f20 73 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  s(X) function re
11f30 74 75 72 6e 73 20 74 68 65 20 61 62 73 6f 6c 75  turns the absolu
11f40 74 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  te value of the 
11f50 6e 75 6d 65 72 69 63 0a 20 20 61 72 67 75 6d 65  numeric.  argume
11f60 6e 74 20 58 2e 20 20 5e 41 62 73 28 58 29 20 72  nt X.  ^Abs(X) r
11f70 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20 58  eturns NULL if X
11f80 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 28 41   is NULL. .  ^(A
11f90 62 73 28 58 29 20 72 65 74 75 72 6e 20 30 2e 30  bs(X) return 0.0
11fa0 20 69 66 20 58 20 69 73 20 61 20 73 74 72 69 6e   if X is a strin
11fb0 67 20 6f 72 20 62 6c 6f 62 0a 20 20 74 68 61 74  g or blob.  that
11fc0 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
11fd0 72 74 65 64 20 74 6f 20 61 20 6e 75 6d 65 72 69  rted to a numeri
11fe0 63 20 76 61 6c 75 65 2e 29 5e 20 20 5e 49 66 20  c value.)^  ^If 
11ff0 58 20 69 73 20 74 68 65 20 0a 20 20 69 6e 74 65  X is the .  inte
12000 67 65 72 20 2d 39 32 32 33 33 37 32 30 33 36 38  ger -92233720368
12010 35 34 37 37 35 38 30 37 20 74 68 65 6e 20 61 62  54775807 then ab
12020 73 28 58 29 20 74 68 72 6f 77 73 20 61 6e 20 69  s(X) throws an i
12030 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 0a  nteger overflow.
12040 20 20 65 72 72 6f 72 20 73 69 6e 63 65 20 74 68    error since th
12050 65 72 65 20 69 73 20 6e 6f 20 65 71 75 69 76 61  ere is no equiva
12060 6c 65 6e 74 20 70 6f 73 69 74 69 76 65 20 36 34  lent positive 64
12070 2d 62 69 74 20 74 77 6f 20 63 6f 6d 70 6c 65 6d  -bit two complem
12080 65 6e 74 20 76 61 6c 75 65 2e 0a 7d 0a 0a 66 75  ent value..}..fu
12090 6e 63 64 65 66 20 7b 63 68 61 6e 67 65 73 28 29  ncdef {changes()
120a0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 63 68  } {} {.  ^The ch
120b0 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f 6e  anges() function
120c0 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   returns the num
120d0 62 65 72 20 6f 66 20 64 61 74 61 62 61 73 65 20  ber of database 
120e0 72 6f 77 73 20 74 68 61 74 20 77 65 72 65 20 63  rows that were c
120f0 68 61 6e 67 65 64 0a 20 20 6f 72 20 69 6e 73 65  hanged.  or inse
12100 72 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64 20  rted or deleted 
12110 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  by the most rece
12120 6e 74 6c 79 20 63 6f 6d 70 6c 65 74 65 64 20 49  ntly completed I
12130 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 0a 20  NSERT, DELETE,. 
12140 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65   or UPDATE state
12150 6d 65 6e 74 2c 20 65 78 63 6c 75 73 69 76 65 20  ment, exclusive 
12160 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  of statements in
12170 20 6c 6f 77 65 72 2d 6c 65 76 65 6c 20 74 72 69   lower-level tri
12180 67 67 65 72 73 2e 0a 20 20 5e 54 68 65 20 63 68  ggers..  ^The ch
12190 61 6e 67 65 73 28 29 20 53 51 4c 20 66 75 6e 63  anges() SQL func
121a0 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65  tion is a wrappe
121b0 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71  r around the [sq
121c0 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d  lite3_changes()]
121d0 0a 20 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f  .  C/C++ functio
121e0 6e 20 61 6e 64 20 68 65 6e 63 65 20 66 6f 6c 6c  n and hence foll
121f0 6f 77 73 20 74 68 65 20 73 61 6d 65 20 72 75 6c  ows the same rul
12200 65 73 20 66 6f 72 20 63 6f 75 6e 74 69 6e 67 20  es for counting 
12210 63 68 61 6e 67 65 73 2e 0a 7d 0a 0a 66 75 6e 63  changes..}..func
12220 64 65 66 20 7b 63 6f 61 6c 65 73 63 65 28 58 2c  def {coalesce(X,
12230 59 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a 20 20 5e  Y,...)} {} {.  ^
12240 54 68 65 20 63 6f 61 6c 65 73 63 65 28 29 20 66  The coalesce() f
12250 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
12260 61 20 63 6f 70 79 20 6f 66 20 69 74 73 20 66 69  a copy of its fi
12270 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67  rst non-NULL arg
12280 75 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c  ument, or.  NULL
12290 20 69 66 20 61 6c 6c 20 61 72 67 75 6d 65 6e 74   if all argument
122a0 73 20 61 72 65 20 4e 55 4c 4c 2e 20 20 5e 43 6f  s are NULL.  ^Co
122b0 61 6c 65 73 63 65 28 29 20 6d 75 73 74 20 62 65  alesce() must be
122c0 20 61 74 20 6c 65 61 73 74 20 0a 20 20 32 20 61   at least .  2 a
122d0 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e  rguments..}..fun
122e0 63 64 65 66 20 7b 67 6c 6f 62 28 58 2c 59 29 7d  cdef {glob(X,Y)}
122f0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 67 6c 6f   {} {.  ^The glo
12300 62 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  b(X,Y) function 
12310 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f  is equivalent to
12320 20 74 68 65 0a 20 20 65 78 70 72 65 73 73 69 6f   the.  expressio
12330 6e 20 22 3c 62 3e 59 20 47 4c 4f 42 20 58 3c 2f  n "<b>Y GLOB X</
12340 62 3e 22 2e 0a 20 20 4e 6f 74 65 20 74 68 61 74  b>"..  Note that
12350 20 74 68 65 20 58 20 61 6e 64 20 59 20 61 72 67   the X and Y arg
12360 75 6d 65 6e 74 73 20 61 72 65 20 72 65 76 65 72  uments are rever
12370 73 65 64 20 69 6e 20 74 68 65 20 67 6c 6f 62 28  sed in the glob(
12380 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 6c  ) function.  rel
12390 61 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e 66  ative to the inf
123a0 69 78 20 5b 47 4c 4f 42 5d 20 6f 70 65 72 61 74  ix [GLOB] operat
123b0 6f 72 2e 0a 20 20 5e 49 66 20 74 68 65 20 5b 73  or..  ^If the [s
123c0 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
123d0 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66  nction()] interf
123e0 61 63 65 20 69 73 20 75 73 65 64 20 74 6f 0a 20  ace is used to. 
123f0 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 67 6c   override the gl
12400 6f 62 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  ob(X,Y) function
12410 20 77 69 74 68 20 61 6e 20 61 6c 74 65 72 6e 61   with an alterna
12420 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tive implementat
12430 69 6f 6e 20 74 68 65 6e 0a 20 20 74 68 65 20 5b  ion then.  the [
12440 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72 20 77  GLOB] operator w
12450 69 6c 6c 20 69 6e 76 6f 6b 65 20 74 68 65 20 61  ill invoke the a
12460 6c 74 65 72 6e 61 74 69 76 65 20 69 6d 70 6c 65  lternative imple
12470 6d 65 6e 74 61 74 69 6f 6e 2e 0a 7d 0a 0a 66 75  mentation..}..fu
12480 6e 63 64 65 66 20 7b 69 66 6e 75 6c 6c 28 58 2c  ncdef {ifnull(X,
12490 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
124a0 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69 6f  ifnull() functio
124b0 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79  n returns a copy
124c0 20 6f 66 20 69 74 73 20 66 69 72 73 74 20 6e 6f   of its first no
124d0 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2c  n-NULL argument,
124e0 20 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20 62 6f   or.  NULL if bo
124f0 74 68 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  th arguments are
12500 20 4e 55 4c 4c 2e 20 20 5e 49 66 6e 75 6c 6c 28   NULL.  ^Ifnull(
12510 29 20 6d 75 73 74 20 68 61 76 65 20 65 78 61 63  ) must have exac
12520 74 6c 79 20 32 20 61 72 67 75 6d 65 6e 74 73 2e  tly 2 arguments.
12530 0a 20 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28 29  .  ^The ifnull()
12540 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71 75   function is equ
12550 69 76 61 6c 65 6e 74 20 74 6f 20 5b 63 6f 61 6c  ivalent to [coal
12560 65 73 63 65 28 29 5d 20 77 69 74 68 20 74 77 6f  esce()] with two
12570 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66   arguments..}..f
12580 75 6e 63 64 65 66 20 7b 68 65 78 28 58 29 7d 20  uncdef {hex(X)} 
12590 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 68 65 78 28  {} {.  ^The hex(
125a0 29 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 65 72  ) function inter
125b0 70 72 65 74 73 20 69 74 73 20 61 72 67 75 6d 65  prets its argume
125c0 6e 74 20 61 73 20 61 20 42 4c 4f 42 20 61 6e 64  nt as a BLOB and
125d0 20 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74 72   returns.  a str
125e0 69 6e 67 20 77 68 69 63 68 20 69 73 20 74 68 65  ing which is the
125f0 20 75 70 70 65 72 2d 63 61 73 65 20 68 65 78 61   upper-case hexa
12600 64 65 63 69 6d 61 6c 20 72 65 6e 64 65 72 69 6e  decimal renderin
12610 67 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  g of the content
12620 20 6f 66 0a 20 20 74 68 61 74 20 62 6c 6f 62 2e   of.  that blob.
12630 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 61 73  .}..funcdef {las
12640 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
12650 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 61  } {} {.  ^The la
12660 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
12670 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
12680 6e 73 20 74 68 65 20 5b 52 4f 57 49 44 5d 0a 20  ns the [ROWID]. 
12690 20 6f 66 20 74 68 65 20 6c 61 73 74 20 72 6f 77   of the last row
126a0 20 69 6e 73 65 72 74 20 66 72 6f 6d 20 74 68 65   insert from the
126b0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
126c0 74 69 6f 6e 20 77 68 69 63 68 20 69 6e 76 6f 6b  tion which invok
126d0 65 64 20 74 68 65 0a 20 20 66 75 6e 63 74 69 6f  ed the.  functio
126e0 6e 2e 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f 69  n..  ^The last_i
126f0 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 53 51  nsert_rowid() SQ
12700 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20  L function is a 
12710 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
12720 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c 61  he.  [sqlite3_la
12730 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
12740 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61  )] C/C++ interfa
12750 63 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a  ce function..}..
12760 66 75 6e 63 64 65 66 20 7b 6c 65 6e 67 74 68 28  funcdef {length(
12770 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  X)} {} {.  ^The 
12780 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69  length(X) functi
12790 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6c  on returns the l
127a0 65 6e 67 74 68 20 6f 66 20 58 20 69 6e 20 0a 20  ength of X in . 
127b0 20 63 68 61 72 61 63 74 65 72 73 20 69 66 20 58   characters if X
127c0 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 6f 72   is a string, or
127d0 20 69 6e 20 62 79 74 65 73 20 69 66 20 58 20 69   in bytes if X i
127e0 73 20 61 20 62 6c 6f 62 2e 0a 20 20 5e 49 66 20  s a blob..  ^If 
127f0 58 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6c  X is NULL then l
12800 65 6e 67 74 68 28 58 29 20 69 73 20 4e 55 4c 4c  ength(X) is NULL
12810 2e 0a 20 20 5e 49 66 20 58 20 69 73 20 6e 75 6d  ..  ^If X is num
12820 65 72 69 63 20 74 68 65 6e 20 6c 65 6e 67 74 68  eric then length
12830 28 58 29 20 72 65 74 75 72 6e 73 20 74 68 65 20  (X) returns the 
12840 6c 65 6e 67 74 68 20 6f 66 20 61 20 73 74 72 69  length of a stri
12850 6e 67 0a 20 20 72 65 70 72 65 73 65 6e 74 61 74  ng.  representat
12860 69 6f 6e 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e  ion of X..}..fun
12870 63 64 65 66 20 7b 6c 69 6b 65 28 58 2c 59 29 20  cdef {like(X,Y) 
12880 6c 69 6b 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20  like(X,Y,Z)} {} 
12890 7b 0a 20 20 5e 54 68 65 20 6c 69 6b 65 28 29 20  {.  ^The like() 
128a0 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64  function is used
128b0 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
128c0 65 0a 20 20 22 3c 62 3e 59 20 4c 49 4b 45 20 58  e.  "<b>Y LIKE X
128d0 20 26 23 39 31 3b 45 53 43 41 50 45 20 5a 26 23   &#91;ESCAPE Z&#
128e0 39 33 3b 3c 2f 62 3e 22 20 65 78 70 72 65 73 73  93;</b>" express
128f0 69 6f 6e 2e 20 0a 20 20 5e 49 66 20 74 68 65 20  ion. .  ^If the 
12900 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41 50 45 20  optional ESCAPE 
12910 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e  clause is presen
12920 74 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 6c 69  t, then the.  li
12930 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 73  ke() function is
12940 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 68   invoked with th
12950 72 65 65 20 61 72 67 75 6d 65 6e 74 73 2e 20 20  ree arguments.  
12960 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 69  ^Otherwise, it i
12970 73 0a 20 20 69 6e 76 6f 6b 65 64 20 77 69 74 68  s.  invoked with
12980 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 20 6f   two arguments o
12990 6e 6c 79 2e 20 4e 6f 74 65 20 74 68 61 74 20 74  nly. Note that t
129a0 68 65 20 58 20 61 6e 64 20 59 20 70 61 72 61 6d  he X and Y param
129b0 65 74 65 72 73 20 61 72 65 0a 20 20 72 65 76 65  eters are.  reve
129c0 72 73 65 64 20 69 6e 20 74 68 65 20 6c 69 6b 65  rsed in the like
129d0 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 6c 61  () function rela
129e0 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e 66 69  tive to the infi
129f0 78 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f  x [LIKE] operato
12a00 72 2e 0a 20 20 5e 54 68 65 20 5b 73 71 6c 69 74  r..  ^The [sqlit
12a10 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
12a20 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20  on()] interface 
12a30 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6f  can be used to o
12a40 76 65 72 72 69 64 65 20 74 68 65 0a 20 20 6c 69  verride the.  li
12a50 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e  ke() function an
12a60 64 20 74 68 65 72 65 62 79 20 63 68 61 6e 67 65  d thereby change
12a70 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f   the operation o
12a80 66 20 74 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f  f the.  [LIKE] o
12a90 70 65 72 61 74 6f 72 2e 20 20 57 68 65 6e 20 6f  perator.  When o
12aa0 76 65 72 72 69 64 69 6e 67 20 74 68 65 20 6c 69  verriding the li
12ab0 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 69  ke() function, i
12ac0 74 20 6d 61 79 20 62 65 20 69 6d 70 6f 72 74 61  t may be importa
12ad0 6e 74 0a 20 20 74 6f 20 6f 76 65 72 72 69 64 65  nt.  to override
12ae0 20 62 6f 74 68 20 74 68 65 20 74 77 6f 20 61 6e   both the two an
12af0 64 20 74 68 72 65 65 20 61 72 67 75 6d 65 6e 74  d three argument
12b00 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65   versions of the
12b10 20 6c 69 6b 65 28 29 20 0a 20 20 66 75 6e 63 74   like() .  funct
12b20 69 6f 6e 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ion. Otherwise, 
12b30 64 69 66 66 65 72 65 6e 74 20 63 6f 64 65 20 6d  different code m
12b40 61 79 20 62 65 20 63 61 6c 6c 65 64 20 74 6f 20  ay be called to 
12b50 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20  implement the.  
12b60 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 20  [LIKE] operator 
12b70 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
12b80 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 45  ther or not an E
12b90 53 43 41 50 45 20 63 6c 61 75 73 65 20 77 61 73  SCAPE clause was
12ba0 20 0a 20 20 73 70 65 63 69 66 69 65 64 2e 0a 7d   .  specified..}
12bb0 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 61 64 5f  ..funcdef {load_
12bc0 65 78 74 65 6e 73 69 6f 6e 28 58 29 20 6c 6f 61  extension(X) loa
12bd0 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 2c 59 29  d_extension(X,Y)
12be0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 6f  } {} {.  ^The lo
12bf0 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 2c 59  ad_extension(X,Y
12c00 29 20 66 75 6e 63 74 69 6f 6e 20 6c 6f 61 64 73  ) function loads
12c10 20 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f   SQLite extensio
12c20 6e 73 20 6f 75 74 20 6f 66 20 74 68 65 20 73 68  ns out of the sh
12c30 61 72 65 64 0a 20 20 6c 69 62 72 61 72 79 20 66  ared.  library f
12c40 69 6c 65 20 6e 61 6d 65 64 20 58 20 75 73 69 6e  ile named X usin
12c50 67 20 74 68 65 20 65 6e 74 72 79 20 70 6f 69 6e  g the entry poin
12c60 74 20 59 2e 20 20 5e 54 68 65 20 72 65 73 75 6c  t Y.  ^The resul
12c70 74 20 6f 66 20 6c 6f 61 64 5f 65 78 74 65 6e 73  t of load_extens
12c80 69 6f 6e 28 29 0a 20 20 69 73 20 61 6c 77 61 79  ion().  is alway
12c90 73 20 61 20 4e 55 4c 4c 2e 20 20 5e 49 66 20 59  s a NULL.  ^If Y
12ca0 20 69 73 20 6f 6d 69 74 74 65 64 20 74 68 65 6e   is omitted then
12cb0 20 74 68 65 20 64 65 66 61 75 6c 74 20 65 6e 74   the default ent
12cc0 72 79 20 70 6f 69 6e 74 0a 20 20 6f 66 20 3c 62  ry point.  of <b
12cd0 3e 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 73 69  >sqlite3_extensi
12ce0 6f 6e 5f 69 6e 69 74 3c 2f 62 3e 20 69 73 20 75  on_init</b> is u
12cf0 73 65 64 2e 20 20 5e 54 68 65 20 6c 6f 61 64 5f  sed.  ^The load_
12d00 65 78 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63  extension() func
12d10 74 69 6f 6e 0a 20 20 72 61 69 73 65 73 20 61 6e  tion.  raises an
12d20 20 65 78 63 65 70 74 69 6f 6e 20 69 66 20 74 68   exception if th
12d30 65 20 65 78 74 65 6e 73 69 6f 6e 20 66 61 69 6c  e extension fail
12d40 73 20 74 6f 20 6c 6f 61 64 20 6f 72 20 69 6e 69  s to load or ini
12d50 74 69 61 6c 69 7a 65 20 63 6f 72 72 65 63 74 6c  tialize correctl
12d60 79 2e 0a 0a 20 20 3c 70 3e 5e 54 68 65 20 6c 6f  y...  <p>^The lo
12d70 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 66  ad_extension() f
12d80 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69  unction will fai
12d90 6c 20 69 66 20 74 68 65 20 65 78 74 65 6e 73 69  l if the extensi
12da0 6f 6e 20 61 74 74 65 6d 70 74 73 20 74 6f 20 0a  on attempts to .
12db0 20 20 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c 65    modify or dele
12dc0 74 65 20 61 20 53 51 4c 20 66 75 6e 63 74 69 6f  te a SQL functio
12dd0 6e 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73  n or collating s
12de0 65 71 75 65 6e 63 65 2e 20 20 5e 54 68 65 0a 20  equence.  ^The. 
12df0 20 65 78 74 65 6e 73 69 6f 6e 20 63 61 6e 20 61   extension can a
12e00 64 64 20 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73  dd new functions
12e10 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65   or collating se
12e20 71 75 65 6e 63 65 73 2c 20 62 75 74 20 63 61 6e  quences, but can
12e30 6e 6f 74 0a 20 20 6d 6f 64 69 66 79 20 6f 72 20  not.  modify or 
12e40 64 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20  delete existing 
12e50 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c  functions or col
12e60 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
12e70 20 62 65 63 61 75 73 65 0a 20 20 74 68 6f 73 65   because.  those
12e80 20 66 75 6e 63 74 69 6f 6e 73 20 61 6e 64 2f 6f   functions and/o
12e90 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  r collating sequ
12ea0 65 6e 63 65 73 20 6d 69 67 68 74 20 62 65 20 75  ences might be u
12eb0 73 65 64 20 65 6c 73 65 77 68 65 72 65 0a 20 20  sed elsewhere.  
12ec0 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79  in the currently
12ed0 20 72 75 6e 6e 69 6e 67 20 53 51 4c 20 73 74 61   running SQL sta
12ee0 74 65 6d 65 6e 74 2e 20 20 54 6f 20 6c 6f 61 64  tement.  To load
12ef0 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 74 68   an extension th
12f00 61 74 0a 20 20 63 68 61 6e 67 65 73 20 6f 72 20  at.  changes or 
12f10 64 65 6c 65 74 65 73 20 66 75 6e 63 74 69 6f 6e  deletes function
12f20 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73  s or collating s
12f30 65 71 75 65 6e 63 65 73 2c 20 75 73 65 20 74 68  equences, use th
12f40 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c 6f 61  e.  [sqlite3_loa
12f50 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 5d 20 43  d_extension()] C
12f60 2d 6c 61 6e 67 75 61 67 65 20 41 50 49 2e 3c 2f  -language API.</
12f70 70 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c  p>.}..funcdef {l
12f80 6f 77 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  ower(X)} {} {.  
12f90 5e 54 68 65 20 6c 6f 77 65 72 28 58 29 20 66 75  ^The lower(X) fu
12fa0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
12fb0 20 63 6f 70 79 20 6f 66 20 73 74 72 69 6e 67 20   copy of string 
12fc0 58 20 77 69 74 68 20 61 6c 6c 20 41 53 43 49 49  X with all ASCII
12fd0 20 63 68 61 72 61 63 74 65 72 73 0a 20 20 63 6f   characters.  co
12fe0 6e 76 65 72 74 65 64 20 74 6f 20 6c 6f 77 65 72  nverted to lower
12ff0 20 63 61 73 65 2e 20 20 5e 54 68 65 20 64 65 66   case.  ^The def
13000 61 75 6c 74 20 62 75 69 6c 74 2d 69 6e 20 6c 6f  ault built-in lo
13010 77 65 72 28 29 20 66 75 6e 63 74 69 6f 6e 20 77  wer() function w
13020 6f 72 6b 73 0a 20 20 66 6f 72 20 41 53 43 49 49  orks.  for ASCII
13030 20 63 68 61 72 61 63 74 65 72 73 20 6f 6e 6c 79   characters only
13040 2e 20 20 54 6f 20 64 6f 20 63 61 73 65 20 63 6f  .  To do case co
13050 6e 76 65 72 73 69 6f 6e 73 20 6f 6e 20 6e 6f 6e  nversions on non
13060 2d 41 53 43 49 49 0a 20 20 63 68 61 72 61 63 74  -ASCII.  charact
13070 65 72 73 2c 20 6c 6f 61 64 20 74 68 65 20 49 43  ers, load the IC
13080 55 20 65 78 74 65 6e 73 69 6f 6e 2e 0a 7d 0a 0a  U extension..}..
13090 66 75 6e 63 64 65 66 20 7b 6c 74 72 69 6d 28 58  funcdef {ltrim(X
130a0 29 20 6c 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d  ) ltrim(X,Y)} {}
130b0 20 7b 0a 20 20 5e 54 68 65 20 6c 74 72 69 6d 28   {.  ^The ltrim(
130c0 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  X,Y) function re
130d0 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66  turns a string f
130e0 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e  ormed by removin
130f0 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20  g any and all.  
13100 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20  characters that 
13110 61 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d  appear in Y from
13120 20 74 68 65 20 6c 65 66 74 20 73 69 64 65 20 6f   the left side o
13130 66 20 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59  f X..  ^If the Y
13140 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69   argument is omi
13150 74 74 65 64 2c 20 6c 74 72 69 6d 28 58 29 20 72  tted, ltrim(X) r
13160 65 6d 6f 76 65 73 20 73 70 61 63 65 73 20 66 72  emoves spaces fr
13170 6f 6d 20 74 68 65 20 6c 65 66 74 20 73 69 64 65  om the left side
13180 0a 20 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63  .  of X..}..func
13190 64 65 66 20 7b 6d 61 78 28 58 2c 59 2c 2e 2e 2e  def {max(X,Y,...
131a0 29 7d 20 7b 2a 6d 61 78 43 6f 72 65 46 75 6e 63  )} {*maxCoreFunc
131b0 20 2a 6d 61 78 20 7b 6d 61 78 28 29 20 53 51 4c   *max {max() SQL
131c0 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20   function}} {.  
131d0 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d  ^The multi-argum
131e0 65 6e 74 20 6d 61 78 28 29 20 66 75 6e 63 74 69  ent max() functi
131f0 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61  on returns the a
13200 72 67 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65  rgument with the
13210 20 0a 20 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75   .  maximum valu
13220 65 2c 20 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c  e, or return NUL
13230 4c 20 69 66 20 61 6e 79 20 61 72 67 75 6d 65 6e  L if any argumen
13240 74 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 54  t is NULL. .  ^T
13250 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e  he multi-argumen
13260 74 20 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e  t max() function
13270 20 73 65 61 72 63 68 65 73 20 69 74 73 20 61 72   searches its ar
13280 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66  guments from lef
13290 74 20 74 6f 20 72 69 67 68 74 0a 20 20 66 6f 72  t to right.  for
132a0 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61   an argument tha
132b0 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c  t defines a coll
132c0 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61  ating function a
132d0 6e 64 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c  nd uses that col
132e0 6c 61 74 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f  lating.  functio
132f0 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67  n for all string
13300 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e   comparisons.  ^
13310 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61  If none of the a
13320 72 67 75 6d 65 6e 74 73 20 74 6f 20 6d 61 78 28  rguments to max(
13330 29 0a 20 20 64 65 66 69 6e 65 20 61 20 63 6f 6c  ).  define a col
13340 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c  lating function,
13350 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59   then the BINARY
13360 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
13370 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 4e  ion is used..  N
13380 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 61 78 28  ote that <b>max(
13390 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c  )</b> is a simpl
133a0 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a  e function when.
133b0 20 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f    it has 2 or mo
133c0 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74  re arguments but
133d0 20 6f 70 65 72 61 74 65 73 20 61 73 20 61 6e 0a   operates as an.
133e0 20 20 5b 6d 69 6e 41 67 67 46 75 6e 63 20 7c 20    [minAggFunc | 
133f0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
13400 6f 6e 5d 20 69 66 20 67 69 76 65 6e 20 6f 6e 6c  on] if given onl
13410 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d  y a single argum
13420 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ent..}..funcdef 
13430 7b 6d 69 6e 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b  {min(X,Y,...)} {
13440 2a 6d 69 6e 43 6f 72 65 46 75 6e 63 20 2a 6d 69  *minCoreFunc *mi
13450 6e 20 7b 6d 69 6e 28 29 20 53 51 4c 20 66 75 6e  n {min() SQL fun
13460 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65  ction}} {.  ^The
13470 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20   multi-argument 
13480 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  min() function r
13490 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75 6d  eturns the argum
134a0 65 6e 74 20 77 69 74 68 20 74 68 65 0a 20 20 6d  ent with the.  m
134b0 69 6e 69 6d 75 6d 20 76 61 6c 75 65 2e 0a 20 20  inimum value..  
134c0 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d  ^The multi-argum
134d0 65 6e 74 20 6d 69 6e 28 29 20 66 75 6e 63 74 69  ent min() functi
134e0 6f 6e 20 73 65 61 72 63 68 65 73 20 69 74 73 20  on searches its 
134f0 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c  arguments from l
13500 65 66 74 20 74 6f 20 72 69 67 68 74 0a 20 20 66  eft to right.  f
13510 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74  or an argument t
13520 68 61 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f  hat defines a co
13530 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
13540 20 61 6e 64 20 75 73 65 73 20 74 68 61 74 20 63   and uses that c
13550 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75 6e 63 74  ollating.  funct
13560 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69  ion for all stri
13570 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20  ng comparisons. 
13580 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65   ^If none of the
13590 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 6d 69   arguments to mi
135a0 6e 28 29 0a 20 20 64 65 66 69 6e 65 20 61 20 63  n().  define a c
135b0 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
135c0 6e 2c 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41  n, then the BINA
135d0 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  RY collating fun
135e0 63 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20  ction is used.. 
135f0 20 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 69   Note that <b>mi
13600 6e 28 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d  n()</b> is a sim
13610 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65  ple function whe
13620 6e 0a 20 20 69 74 20 68 61 73 20 32 20 6f 72 20  n.  it has 2 or 
13630 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62  more arguments b
13640 75 74 20 6f 70 65 72 61 74 65 73 20 61 73 20 61  ut operates as a
13650 6e 20 0a 20 20 5b 6d 61 78 41 67 67 46 75 6e 63  n .  [maxAggFunc
13660 20 7c 20 61 67 67 72 65 67 61 74 65 20 66 75 6e   | aggregate fun
13670 63 74 69 6f 6e 5d 20 69 66 20 67 69 76 65 6e 0a  ction] if given.
13680 20 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20    only a single 
13690 61 72 67 75 6d 65 6e 74 2e 0a 7d 0a 0a 66 75 6e  argument..}..fun
136a0 63 64 65 66 20 7b 6e 75 6c 6c 69 66 28 58 2c 59  cdef {nullif(X,Y
136b0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6e  )} {} {.  ^The n
136c0 75 6c 6c 69 66 28 58 2c 59 29 20 66 75 6e 63 74  ullif(X,Y) funct
136d0 69 6f 6e 20 72 65 74 75 72 6e 73 20 69 74 73 20  ion returns its 
136e0 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 69  first argument i
136f0 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20  f the arguments 
13700 61 72 65 0a 20 20 64 69 66 66 65 72 65 6e 74 20  are.  different 
13710 61 6e 64 20 4e 55 4c 4c 20 69 66 20 74 68 65 20  and NULL if the 
13720 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 68  arguments are th
13730 65 20 73 61 6d 65 2e 20 20 5e 54 68 65 20 6e 75  e same.  ^The nu
13740 6c 6c 69 66 28 58 2c 59 29 20 66 75 6e 63 74 69  llif(X,Y) functi
13750 6f 6e 0a 20 20 73 65 61 72 63 68 65 73 20 69 74  on.  searches it
13760 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d  s arguments from
13770 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20 66   left to right f
13780 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74  or an argument t
13790 68 61 74 20 64 65 66 69 6e 65 73 20 61 0a 20 20  hat defines a.  
137a0 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
137b0 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61 74  on and uses that
137c0 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
137d0 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69  ion for all stri
137e0 6e 67 0a 20 20 63 6f 6d 70 61 72 69 73 6f 6e 73  ng.  comparisons
137f0 2e 20 20 5e 49 66 20 6e 65 69 74 68 65 72 20 61  .  ^If neither a
13800 72 67 75 6d 65 6e 74 20 74 6f 20 6e 75 6c 6c 69  rgument to nulli
13810 66 28 29 20 64 65 66 69 6e 65 73 20 61 20 63 6f  f() defines a co
13820 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
13830 0a 20 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41  .  then the BINA
13840 52 59 20 69 73 20 75 73 65 64 2e 0a 7d 0a 0a 66  RY is used..}..f
13850 75 6e 63 64 65 66 20 7b 71 75 6f 74 65 28 58 29  uncdef {quote(X)
13860 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 71 75  } {} {.  ^The qu
13870 6f 74 65 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  ote(X) function 
13880 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67  returns a string
13890 20 77 68 69 63 68 20 69 73 20 74 68 65 20 76 61   which is the va
138a0 6c 75 65 20 6f 66 0a 20 20 69 74 73 20 61 72 67  lue of.  its arg
138b0 75 6d 65 6e 74 20 73 75 69 74 61 62 6c 65 20 66  ument suitable f
138c0 6f 72 20 69 6e 63 6c 75 73 69 6f 6e 20 69 6e 74  or inclusion int
138d0 6f 20 61 6e 6f 74 68 65 72 20 53 51 4c 20 73 74  o another SQL st
138e0 61 74 65 6d 65 6e 74 2e 0a 20 20 5e 53 74 72 69  atement..  ^Stri
138f0 6e 67 73 20 61 72 65 20 73 75 72 72 6f 75 6e 64  ngs are surround
13900 65 64 20 62 79 20 73 69 6e 67 6c 65 2d 71 75 6f  ed by single-quo
13910 74 65 73 20 77 69 74 68 20 65 73 63 61 70 65 73  tes with escapes
13920 20 6f 6e 20 69 6e 74 65 72 69 6f 72 20 71 75 6f   on interior quo
13930 74 65 73 0a 20 20 61 73 20 6e 65 65 64 65 64 2e  tes.  as needed.
13940 20 20 5e 42 4c 4f 42 73 20 61 72 65 20 65 6e 63    ^BLOBs are enc
13950 6f 64 65 64 20 61 73 20 68 65 78 61 64 65 63 69  oded as hexadeci
13960 6d 61 6c 20 6c 69 74 65 72 61 6c 73 2e 0a 7d 0a  mal literals..}.
13970 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e 64 6f 6d  .funcdef {random
13980 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  ()} {} {.  ^The 
13990 72 61 6e 64 6f 6d 28 29 20 66 75 6e 63 74 69 6f  random() functio
139a0 6e 20 72 65 74 75 72 6e 73 20 61 20 70 73 65 75  n returns a pseu
139b0 64 6f 2d 72 61 6e 64 6f 6d 20 69 6e 74 65 67 65  do-random intege
139c0 72 0a 20 20 62 65 74 77 65 65 6e 20 2d 39 32 32  r.  between -922
139d0 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38  3372036854775808
139e0 20 61 6e 64 20 2b 39 32 32 33 33 37 32 30 33 36   and +9223372036
139f0 38 35 34 37 37 35 38 30 37 2e 0a 7d 0a 0a 66 75  854775807..}..fu
13a00 6e 63 64 65 66 20 7b 72 61 6e 64 6f 6d 62 6c 6f  ncdef {randomblo
13a10 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  b(N)} {} {.  ^Th
13a20 65 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29 20  e randomblob(N) 
13a30 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 20  function return 
13a40 61 6e 20 4e 2d 62 79 74 65 20 62 6c 6f 62 20 63  an N-byte blob c
13a50 6f 6e 74 61 69 6e 69 6e 67 20 70 73 65 75 64 6f  ontaining pseudo
13a60 2d 72 61 6e 64 6f 6d 0a 20 20 62 79 74 65 73 2e  -random.  bytes.
13a70 20 5e 49 66 20 4e 20 69 73 20 6c 65 73 73 20 74   ^If N is less t
13a80 68 61 6e 20 31 20 74 68 65 6e 20 61 20 31 2d 62  han 1 then a 1-b
13a90 79 74 65 20 72 61 6e 64 6f 6d 20 62 6c 6f 62 20  yte random blob 
13aa0 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a 20 20  is returned...  
13ab0 3c 70 3e 48 69 6e 74 3a 20 20 61 70 70 6c 69 63  <p>Hint:  applic
13ac0 61 74 69 6f 6e 73 20 63 61 6e 20 67 65 6e 65 72  ations can gener
13ad0 61 74 65 20 67 6c 6f 62 61 6c 6c 79 20 75 6e 69  ate globally uni
13ae0 71 75 65 20 69 64 65 6e 74 69 66 69 65 72 73 0a  que identifiers.
13af0 20 20 75 73 69 6e 67 20 74 68 69 73 20 66 75 6e    using this fun
13b00 63 74 69 6f 6e 20 74 6f 67 65 74 68 65 72 20 77  ction together w
13b10 69 74 68 20 5b 68 65 78 28 29 5d 20 61 6e 64 2f  ith [hex()] and/
13b20 6f 72 0a 20 20 5b 6c 6f 77 65 72 28 29 5d 20 6c  or.  [lower()] l
13b30 69 6b 65 20 74 68 69 73 3a 3c 2f 70 3e 0a 0a 20  ike this:</p>.. 
13b40 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20   <blockquote>.  
13b50 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 31  hex(randomblob(1
13b60 36 29 29 3c 62 72 3e 3c 2f 62 72 3e 0a 20 20 6c  6))<br></br>.  l
13b70 6f 77 65 72 28 68 65 78 28 72 61 6e 64 6f 6d 62  ower(hex(randomb
13b80 6c 6f 62 28 31 36 29 29 29 0a 20 20 3c 2f 62 6c  lob(16))).  </bl
13b90 6f 63 6b 71 75 6f 74 65 3e 0a 7d 0a 0a 66 75 6e  ockquote>.}..fun
13ba0 63 64 65 66 20 7b 72 65 70 6c 61 63 65 28 58 2c  cdef {replace(X,
13bb0 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  Y,Z)} {} {.  ^Th
13bc0 65 20 72 65 70 6c 61 63 65 28 58 2c 59 2c 5a 29  e replace(X,Y,Z)
13bd0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
13be0 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65  s a string forme
13bf0 64 20 62 79 20 73 75 62 73 74 69 74 75 74 69 6e  d by substitutin
13c00 67 0a 20 20 73 74 72 69 6e 67 20 5a 20 66 6f 72  g.  string Z for
13c10 20 65 76 65 72 79 20 6f 63 63 75 72 72 65 6e 63   every occurrenc
13c20 65 20 6f 66 20 73 74 72 69 6e 67 20 59 20 69 6e  e of string Y in
13c30 20 73 74 72 69 6e 67 20 58 2e 20 20 5e 54 68 65   string X.  ^The
13c40 20 5b 42 49 4e 41 52 59 5d 0a 20 20 63 6f 6c 6c   [BINARY].  coll
13c50 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69  ating sequence i
13c60 73 20 75 73 65 64 20 66 6f 72 20 63 6f 6d 70 61  s used for compa
13c70 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 59 20 69  risons.  ^If Y i
13c80 73 20 61 6e 20 65 6d 70 74 79 0a 20 20 73 74 72  s an empty.  str
13c90 69 6e 67 20 74 68 65 6e 20 72 65 74 75 72 6e 20  ing then return 
13ca0 58 20 75 6e 63 68 61 6e 67 65 64 2e 20 20 5e 49  X unchanged.  ^I
13cb0 66 20 5a 20 69 73 20 6e 6f 74 20 69 6e 69 74 69  f Z is not initi
13cc0 61 6c 6c 79 0a 20 20 61 20 73 74 72 69 6e 67 2c  ally.  a string,
13cd0 20 69 74 20 69 73 20 63 61 73 74 20 74 6f 20 61   it is cast to a
13ce0 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 70 72   UTF-8 string pr
13cf0 69 6f 72 20 74 6f 20 70 72 6f 63 65 73 73 69 6e  ior to processin
13d00 67 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72  g..}..funcdef {r
13d10 6f 75 6e 64 28 58 29 20 72 6f 75 6e 64 28 58 2c  ound(X) round(X,
13d20 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
13d30 72 6f 75 6e 64 28 58 2c 59 29 20 66 75 6e 63 74  round(X,Y) funct
13d40 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74  ion returns a st
13d50 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
13d60 69 6f 6e 20 6f 66 20 74 68 65 20 66 6c 6f 61 74  ion of the float
13d70 69 6e 67 2d 70 6f 69 6e 74 0a 20 20 76 61 6c 75  ing-point.  valu
13d80 65 20 58 20 72 6f 75 6e 64 65 64 20 74 6f 20 59  e X rounded to Y
13d90 20 64 69 67 69 74 73 20 74 6f 20 74 68 65 20 72   digits to the r
13da0 69 67 68 74 20 6f 66 20 74 68 65 20 64 65 63 69  ight of the deci
13db0 6d 61 6c 20 70 6f 69 6e 74 2e 0a 20 20 5e 49 66  mal point..  ^If
13dc0 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20   the Y argument 
13dd0 69 73 20 6f 6d 69 74 74 65 64 2c 20 74 68 65 20  is omitted, the 
13de0 58 20 76 61 6c 75 65 20 69 73 20 74 72 75 6e 63  X value is trunc
13df0 61 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67  ated to an integ
13e00 65 72 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  er..}..funcdef {
13e10 72 74 72 69 6d 28 58 29 20 72 74 72 69 6d 28 58  rtrim(X) rtrim(X
13e20 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
13e30 20 72 74 72 69 6d 28 58 2c 59 29 20 66 75 6e 63   rtrim(X,Y) func
13e40 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
13e50 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20  tring formed by 
13e60 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64  removing any and
13e70 20 61 6c 6c 0a 20 20 63 68 61 72 61 63 74 65 72   all.  character
13e80 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e  s that appear in
13e90 20 59 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68   Y from the righ
13ea0 74 20 73 69 64 65 20 6f 66 20 58 2e 0a 20 20 5e  t side of X..  ^
13eb0 49 66 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e  If the Y argumen
13ec0 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 72 74  t is omitted, rt
13ed0 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20 73  rim(X) removes s
13ee0 70 61 63 65 73 20 66 72 6f 6d 20 74 68 65 20 72  paces from the r
13ef0 69 67 68 74 0a 20 20 73 69 64 65 20 6f 66 20 58  ight.  side of X
13f00 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 6f  ..}..funcdef {so
13f10 75 6e 64 65 78 28 58 29 7d 20 7b 7d 20 7b 0a 20  undex(X)} {} {. 
13f20 20 5e 54 68 65 20 73 6f 75 6e 64 65 78 28 58 29   ^The soundex(X)
13f30 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
13f40 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  s a string that 
13f50 69 73 20 74 68 65 20 73 6f 75 6e 64 65 78 20 65  is the soundex e
13f60 6e 63 6f 64 69 6e 67 20 0a 20 20 6f 66 20 74 68  ncoding .  of th
13f70 65 20 73 74 72 69 6e 67 20 58 2e 0a 20 20 5e 54  e string X..  ^T
13f80 68 65 20 73 74 72 69 6e 67 20 22 3f 30 30 30 22  he string "?000"
13f90 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20   is returned if 
13fa0 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20  the argument is 
13fb0 4e 55 4c 4c 20 6f 72 20 63 6f 6e 74 61 69 6e 73  NULL or contains
13fc0 0a 20 20 6e 6f 20 41 53 43 49 49 20 61 6c 70 68  .  no ASCII alph
13fd0 61 62 65 74 69 63 20 63 68 61 72 61 63 74 65 72  abetic character
13fe0 73 2e 0a 20 20 5e 28 54 68 69 73 20 66 75 6e 63  s..  ^(This func
13ff0 74 69 6f 6e 20 69 73 20 6f 6d 69 74 74 65 64 20  tion is omitted 
14000 66 72 6f 6d 20 53 51 4c 69 74 65 20 62 79 20 64  from SQLite by d
14010 65 66 61 75 6c 74 2e 0a 20 20 49 74 20 69 73 20  efault..  It is 
14020 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 69  only available i
14030 66 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 53 4f  f the [SQLITE_SO
14040 55 4e 44 45 58 5d 20 63 6f 6d 70 69 6c 65 2d 74  UNDEX] compile-t
14050 69 6d 65 20 6f 70 74 69 6f 6e 0a 20 20 69 73 20  ime option.  is 
14060 75 73 65 64 20 77 68 65 6e 20 53 51 4c 69 74 65  used when SQLite
14070 20 69 73 20 62 75 69 6c 74 2e 29 5e 0a 7d 0a 0a   is built.)^.}..
14080 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f  funcdef {sqlite_
14090 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65  compileoption_ge
140a0 74 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  t(N)} {} {.  ^Th
140b0 65 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65  e sqlite_compile
140c0 6f 70 74 69 6f 6e 5f 67 65 74 28 29 20 53 51 4c  option_get() SQL
140d0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77   function is a w
140e0 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68  rapper around th
140f0 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d  e.  [sqlite3_com
14100 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 29  pileoption_get()
14110 5d 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e  ] C/C++ function
14120 2e 0a 20 20 5e 54 68 69 73 20 72 6f 75 74 69 6e  ..  ^This routin
14130 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 4e 2d  e returns the N-
14140 74 68 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  th compile-time 
14150 6f 70 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 62  option used to b
14160 75 69 6c 64 20 53 51 4c 69 74 65 0a 20 20 6f 72  uild SQLite.  or
14170 20 4e 55 4c 4c 20 69 66 20 4e 20 69 73 20 6f 75   NULL if N is ou
14180 74 20 6f 66 20 72 61 6e 67 65 2e 20 20 53 65 65  t of range.  See
14190 20 61 6c 73 6f 20 74 68 65 20 5b 63 6f 6d 70 69   also the [compi
141a0 6c 65 5f 6f 70 74 69 6f 6e 73 20 70 72 61 67 6d  le_options pragm
141b0 61 5d 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  a]..}..funcdef {
141c0 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70  sqlite_compileop
141d0 74 69 6f 6e 5f 75 73 65 64 28 58 29 7d 20 7b 7d  tion_used(X)} {}
141e0 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65   {.  ^The sqlite
141f0 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75  _compileoption_u
14200 73 65 64 28 29 20 53 51 4c 20 66 75 6e 63 74 69  sed() SQL functi
14210 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65 72 20  on is a wrapper 
14220 61 72 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73 71  around the.  [sq
14230 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74  lite3_compileopt
14240 69 6f 6e 5f 75 73 65 64 28 29 5d 20 43 2f 43 2b  ion_used()] C/C+
14250 2b 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 57  + function..  ^W
14260 68 65 6e 20 74 68 65 20 61 72 67 75 6d 65 6e 74  hen the argument
14270 20 58 20 74 6f 20 73 71 6c 69 74 65 5f 63 6f 6d   X to sqlite_com
14280 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28  pileoption_used(
14290 58 29 20 69 73 20 61 20 73 74 72 69 6e 67 20 77  X) is a string w
142a0 68 69 63 68 0a 20 20 69 73 20 74 68 65 20 6e 61  hich.  is the na
142b0 6d 65 20 6f 66 20 61 20 63 6f 6d 70 69 6c 65 2d  me of a compile-
142c0 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 74 68 69  time option, thi
142d0 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e  s routine return
142e0 73 20 74 72 75 65 20 28 31 29 20 6f 72 0a 20 20  s true (1) or.  
142f0 66 61 6c 73 65 20 28 30 29 20 64 65 70 65 6e 64  false (0) depend
14300 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f  ing on whether o
14310 72 20 6e 6f 74 20 74 68 61 74 20 6f 70 74 69 6f  r not that optio
14320 6e 20 77 61 73 20 75 73 65 64 20 64 75 72 69 6e  n was used durin
14330 67 20 74 68 65 0a 20 20 62 75 69 6c 64 2e 0a 7d  g the.  build..}
14340 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74  ..funcdef {sqlit
14350 65 5f 73 6f 75 72 63 65 5f 69 64 28 29 7d 20 7b  e_source_id()} {
14360 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74  } {.  ^The sqlit
14370 65 5f 73 6f 75 72 63 65 5f 69 64 28 29 20 66 75  e_source_id() fu
14380 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
14390 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 64 65   string that ide
143a0 6e 74 69 66 69 65 73 20 74 68 65 0a 20 20 73 70  ntifies the.  sp
143b0 65 63 69 66 69 63 20 76 65 72 73 69 6f 6e 20 6f  ecific version o
143c0 66 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64  f the source cod
143d0 65 20 74 68 61 74 20 77 61 73 20 75 73 65 64 20  e that was used 
143e0 74 6f 20 62 75 69 6c 64 20 74 68 65 20 53 51 4c  to build the SQL
143f0 69 74 65 0a 20 20 6c 69 62 72 61 72 79 2e 20 20  ite.  library.  
14400 5e 54 68 65 20 73 74 72 69 6e 67 20 72 65 74 75  ^The string retu
14410 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 5f 73  rned by sqlite_s
14420 6f 75 72 63 65 5f 69 64 28 29 20 62 65 67 69 6e  ource_id() begin
14430 73 20 77 69 74 68 0a 20 20 74 68 65 20 64 61 74  s with.  the dat
14440 65 20 61 6e 64 20 74 69 6d 65 20 74 68 61 74 20  e and time that 
14450 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20  the source code 
14460 77 61 73 20 63 68 65 63 6b 65 64 20 69 6e 20 61  was checked in a
14470 6e 64 20 69 73 20 66 6f 6c 6c 6f 77 73 20 62 79  nd is follows by
14480 0a 20 20 61 6e 20 53 48 41 31 20 68 61 73 68 20  .  an SHA1 hash 
14490 74 68 61 74 20 75 6e 69 71 75 65 6c 79 20 69 64  that uniquely id
144a0 65 6e 74 69 66 69 65 73 20 74 68 65 20 73 6f 75  entifies the sou
144b0 72 63 65 20 74 72 65 65 2e 20 20 5e 54 68 69 73  rce tree.  ^This
144c0 20 66 75 6e 63 74 69 6f 6e 20 69 73 0a 20 20 61   function is.  a
144d0 6e 20 53 51 4c 20 77 72 61 70 70 65 72 20 61 72  n SQL wrapper ar
144e0 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65  ound the [sqlite
144f0 33 5f 73 6f 75 72 63 65 69 64 28 29 5d 20 43 20  3_sourceid()] C 
14500 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75  interface..}..fu
14510 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 76 65  ncdef {sqlite_ve
14520 72 73 69 6f 6e 28 29 7d 20 7b 7d 20 7b 0a 20 20  rsion()} {} {.  
14530 5e 54 68 65 20 73 71 6c 69 74 65 5f 76 65 72 73  ^The sqlite_vers
14540 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ion() function r
14550 65 74 75 72 6e 73 20 74 68 65 20 76 65 72 73 69  eturns the versi
14560 6f 6e 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68  on string for th
14570 65 20 53 51 4c 69 74 65 0a 20 20 6c 69 62 72 61  e SQLite.  libra
14580 72 79 20 74 68 61 74 20 69 73 20 72 75 6e 6e 69  ry that is runni
14590 6e 67 2e 20 20 5e 54 68 69 73 20 66 75 6e 63 74  ng.  ^This funct
145a0 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 0a 20 20  ion is an SQL.  
145b0 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
145c0 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c 69 62 76  he [sqlite3_libv
145d0 65 72 73 69 6f 6e 28 29 5d 20 43 2d 69 6e 74 65  ersion()] C-inte
145e0 72 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65  rface..}..funcde
145f0 66 20 7b 73 75 62 73 74 72 28 58 2c 59 2c 5a 29  f {substr(X,Y,Z)
14600 20 73 75 62 73 74 72 28 58 2c 59 29 7d 20 7b 7d   substr(X,Y)} {}
14610 20 7b 0a 20 20 5e 54 68 65 20 73 75 62 73 74 72   {.  ^The substr
14620 28 58 2c 59 2c 5a 29 20 66 75 6e 63 74 69 6f 6e  (X,Y,Z) function
14630 20 72 65 74 75 72 6e 73 20 61 20 73 75 62 73 74   returns a subst
14640 72 69 6e 67 20 6f 66 20 69 6e 70 75 74 20 73 74  ring of input st
14650 72 69 6e 67 20 58 20 74 68 61 74 20 62 65 67 69  ring X that begi
14660 6e 73 0a 20 20 77 69 74 68 20 74 68 65 20 59 2d  ns.  with the Y-
14670 74 68 20 63 68 61 72 61 63 74 65 72 20 61 6e 64  th character and
14680 20 77 68 69 63 68 20 69 73 20 5a 20 63 68 61 72   which is Z char
14690 61 63 74 65 72 73 20 6c 6f 6e 67 2e 0a 20 20 5e  acters long..  ^
146a0 49 66 20 5a 20 69 73 20 6f 6d 69 74 74 65 64 20  If Z is omitted 
146b0 74 68 65 6e 20 73 75 62 73 74 72 28 58 2c 59 29  then substr(X,Y)
146c0 20 72 65 74 75 72 6e 73 20 61 6c 6c 20 63 68 61   returns all cha
146d0 72 61 63 74 65 72 73 20 74 68 72 6f 75 67 68 20  racters through 
146e0 74 68 65 20 65 6e 64 0a 20 20 6f 66 20 74 68 65  the end.  of the
146f0 20 73 74 72 69 6e 67 20 58 20 62 65 67 69 6e 6e   string X beginn
14700 69 6e 67 20 77 69 74 68 20 74 68 65 20 59 2d 74  ing with the Y-t
14710 68 2e 0a 20 20 5e 54 68 65 20 6c 65 66 74 2d 6d  h..  ^The left-m
14720 6f 73 74 20 63 68 61 72 61 63 74 65 72 20 6f 66  ost character of
14730 20 58 20 69 73 20 6e 75 6d 62 65 72 20 31 2e 20   X is number 1. 
14740 20 5e 49 66 20 59 20 69 73 20 6e 65 67 61 74 69   ^If Y is negati
14750 76 65 0a 20 20 74 68 65 6e 20 74 68 65 20 66 69  ve.  then the fi
14760 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6f 66  rst character of
14770 20 74 68 65 20 73 75 62 73 74 72 69 6e 67 20 69   the substring i
14780 73 20 66 6f 75 6e 64 20 62 79 20 63 6f 75 6e 74  s found by count
14790 69 6e 67 20 66 72 6f 6d 20 74 68 65 0a 20 20 72  ing from the.  r
147a0 69 67 68 74 20 72 61 74 68 65 72 20 74 68 61 6e  ight rather than
147b0 20 74 68 65 20 6c 65 66 74 2e 20 20 5e 49 66 20   the left.  ^If 
147c0 5a 20 69 73 20 6e 65 67 61 74 69 76 65 20 74 68  Z is negative th
147d0 65 6e 0a 20 20 74 68 65 20 61 62 73 28 5a 29 20  en.  the abs(Z) 
147e0 63 68 61 72 61 63 74 65 72 73 20 70 72 65 63 65  characters prece
147f0 64 69 6e 67 20 74 68 65 20 59 2d 74 68 20 63 68  ding the Y-th ch
14800 61 72 61 63 74 65 72 20 61 72 65 20 72 65 74 75  aracter are retu
14810 72 6e 65 64 2e 0a 20 20 5e 49 66 20 58 20 69 73  rned..  ^If X is
14820 20 61 20 73 74 72 69 6e 67 20 74 68 65 6e 20 63   a string then c
14830 68 61 72 61 63 74 65 72 73 20 69 6e 64 69 63 65  haracters indice
14840 73 20 72 65 66 65 72 20 74 6f 20 61 63 74 75 61  s refer to actua
14850 6c 20 55 54 46 2d 38 20 0a 20 20 63 68 61 72 61  l UTF-8 .  chara
14860 63 74 65 72 73 2e 20 20 5e 49 66 20 58 20 69 73  cters.  ^If X is
14870 20 61 20 42 4c 4f 42 20 74 68 65 6e 20 74 68 65   a BLOB then the
14880 20 69 6e 64 69 63 65 73 20 72 65 66 65 72 20 74   indices refer t
14890 6f 20 62 79 74 65 73 2e 0a 7d 0a 0a 66 75 6e 63  o bytes..}..func
148a0 64 65 66 20 7b 74 6f 74 61 6c 5f 63 68 61 6e 67  def {total_chang
148b0 65 73 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  es()} {} {.  ^Th
148c0 65 20 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28  e total_changes(
148d0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
148e0 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
148f0 20 72 6f 77 20 63 68 61 6e 67 65 73 0a 20 20 63   row changes.  c
14900 61 75 73 65 64 20 62 79 20 49 4e 53 45 52 54 2c  aused by INSERT,
14910 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54   UPDATE or DELET
14920 45 0a 20 20 73 74 61 74 65 6d 65 6e 74 73 20 73  E.  statements s
14930 69 6e 63 65 20 74 68 65 20 63 75 72 72 65 6e 74  ince the current
14940 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
14950 74 69 6f 6e 20 77 61 73 20 6f 70 65 6e 65 64 2e  tion was opened.
14960 0a 20 20 5e 54 68 69 73 20 66 75 6e 63 74 69 6f  .  ^This functio
14970 6e 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61  n is a wrapper a
14980 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74  round the [sqlit
14990 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73  e3_total_changes
149a0 28 29 5d 0a 20 20 43 2f 43 2b 2b 20 69 6e 74 65  ()].  C/C++ inte
149b0 72 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65  rface..}..funcde
149c0 66 20 7b 74 72 69 6d 28 58 29 20 74 72 69 6d 28  f {trim(X) trim(
149d0 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
149e0 65 20 74 72 69 6d 28 58 2c 59 29 20 66 75 6e 63  e trim(X,Y) func
149f0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
14a00 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20  tring formed by 
14a10 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64  removing any and
14a20 20 61 6c 6c 0a 20 20 63 68 61 72 61 63 74 65 72   all.  character
14a30 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e  s that appear in
14a40 20 59 20 66 72 6f 6d 20 62 6f 74 68 20 65 6e 64   Y from both end
14a50 73 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74 68  s of X..  ^If th
14a60 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20  e Y argument is 
14a70 6f 6d 69 74 74 65 64 2c 20 74 72 69 6d 28 58 29  omitted, trim(X)
14a80 20 72 65 6d 6f 76 65 73 20 73 70 61 63 65 73 20   removes spaces 
14a90 66 72 6f 6d 20 62 6f 74 68 20 65 6e 64 73 20 6f  from both ends o
14aa0 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  f X..}..funcdef 
14ab0 7b 74 79 70 65 6f 66 28 58 29 7d 20 7b 7d 20 7b  {typeof(X)} {} {
14ac0 0a 20 20 5e 54 68 65 20 74 79 70 65 6f 66 28 58  .  ^The typeof(X
14ad0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
14ae0 6e 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  ns a string that
14af0 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 5b   indicates the [
14b00 64 61 74 61 74 79 70 65 5d 20 6f 66 0a 20 20 74  datatype] of.  t
14b10 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 58 3a  he expression X:
14b20 20 22 6e 75 6c 6c 22 2c 20 22 69 6e 74 65 67 65   "null", "intege
14b30 72 22 2c 20 22 72 65 61 6c 22 2c 20 22 74 65 78  r", "real", "tex
14b40 74 22 2c 20 6f 72 20 22 62 6c 6f 62 22 2e 0a 7d  t", or "blob"..}
14b50 0a 0a 66 75 6e 63 64 65 66 20 7b 75 70 70 65 72  ..funcdef {upper
14b60 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
14b70 20 75 70 70 65 72 28 58 29 20 66 75 6e 63 74 69   upper(X) functi
14b80 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70  on returns a cop
14b90 79 20 6f 66 20 69 6e 70 75 74 20 73 74 72 69 6e  y of input strin
14ba0 67 20 58 20 69 6e 20 77 68 69 63 68 20 61 6c 6c  g X in which all
14bb0 20 0a 20 20 6c 6f 77 65 72 2d 63 61 73 65 20 41   .  lower-case A
14bc0 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20  SCII characters 
14bd0 61 72 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  are converted to
14be0 20 74 68 65 69 72 20 75 70 70 65 72 2d 63 61 73   their upper-cas
14bf0 65 20 65 71 75 69 76 61 6c 65 6e 74 2e 0a 7d 0a  e equivalent..}.
14c00 0a 66 75 6e 63 64 65 66 20 7b 7a 65 72 6f 62 6c  .funcdef {zerobl
14c10 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ob(N)} {} {.  ^T
14c20 68 65 20 7a 65 72 6f 62 6c 6f 62 28 4e 29 20 66  he zeroblob(N) f
14c30 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
14c40 61 20 42 4c 4f 42 20 63 6f 6e 73 69 73 74 69 6e  a BLOB consistin
14c50 67 20 6f 66 20 4e 20 62 79 74 65 73 20 6f 66 20  g of N bytes of 
14c60 30 78 30 30 2e 0a 20 20 53 51 4c 69 74 65 20 6d  0x00..  SQLite m
14c70 61 6e 61 67 65 73 20 74 68 65 73 65 20 7a 65 72  anages these zer
14c80 6f 62 6c 6f 62 73 20 76 65 72 79 20 65 66 66 69  oblobs very effi
14c90 63 69 65 6e 74 6c 79 2e 20 20 5a 65 72 6f 62 6c  ciently.  Zerobl
14ca0 6f 62 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  obs can be used 
14cb0 74 6f 0a 20 20 72 65 73 65 72 76 65 20 73 70 61  to.  reserve spa
14cc0 63 65 20 66 6f 72 20 61 20 42 4c 4f 42 20 74 68  ce for a BLOB th
14cd0 61 74 20 69 73 20 6c 61 74 65 72 20 77 72 69 74  at is later writ
14ce0 74 65 6e 20 75 73 69 6e 67 20 0a 20 20 5b 73 71  ten using .  [sq
14cf0 6c 69 74 65 33 5f 62 6c 6f 62 5f 6f 70 65 6e 28  lite3_blob_open(
14d00 29 20 7c 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20  ) | incremental 
14d10 42 4c 4f 42 20 49 2f 4f 5d 2e 0a 20 20 5e 54 68  BLOB I/O]..  ^Th
14d20 69 73 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  is SQL function 
14d30 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 75  is implemented u
14d40 73 69 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65  sing the [sqlite
14d50 33 5f 72 65 73 75 6c 74 5f 7a 65 72 6f 62 6c 6f  3_result_zeroblo
14d60 62 28 29 5d 0a 20 20 72 6f 75 74 69 6e 65 20 66  b()].  routine f
14d70 72 6f 6d 20 74 68 65 20 43 2f 43 2b 2b 20 69 6e  rom the C/C++ in
14d80 74 65 72 66 61 63 65 2e 0a 7d 0a 3c 2f 74 63 6c  terface..}.</tcl
14d90 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 74 63 6c  >.</table>..<tcl
14da0 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
14db0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14dc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14dd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14de0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14df0 0a 53 65 63 74 69 6f 6e 20 7b 44 61 74 65 20 41  .Section {Date A
14e00 6e 64 20 54 69 6d 65 20 46 75 6e 63 74 69 6f 6e  nd Time Function
14e10 73 7d 20 64 61 74 65 66 75 6e 63 20 7b 2a 64 61  s} datefunc {*da
14e20 74 65 66 75 6e 63 7d 0a 68 64 5f 6b 65 79 77 6f  tefunc}.hd_keywo
14e30 72 64 73 20 7b 64 61 74 65 28 29 20 53 51 4c 20  rds {date() SQL 
14e40 66 75 6e 63 74 69 6f 6e 7d 20 7b 74 69 6d 65 28  function} {time(
14e50 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a  ) SQL function}.
14e60 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 64 61 74  hd_keywords {dat
14e70 65 74 69 6d 65 28 29 20 53 51 4c 20 66 75 6e 63  etime() SQL func
14e80 74 69 6f 6e 7d 20 7b 6a 75 6c 69 61 6e 64 61 79  tion} {julianday
14e90 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d  () SQL function}
14ea0 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 73 74  .hd_keywords {st
14eb0 72 66 74 69 6d 65 28 29 20 53 51 4c 20 66 75 6e  rftime() SQL fun
14ec0 63 74 69 6f 6e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c  ction}.</tcl>..<
14ed0 70 3e 0a 53 51 4c 69 74 65 20 73 75 70 70 6f 72  p>.SQLite suppor
14ee0 74 73 20 66 69 76 65 20 64 61 74 65 20 61 6e 64  ts five date and
14ef0 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20   time functions 
14f00 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e  as follows:.</p>
14f10 0a 0a 3c 70 3e 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20  ..<p>.<ol>.<li> 
14f20 5e 28 3c 62 3e 64 61 74 65 28 3c 2f 62 3e 3c 69  ^(<b>date(</b><i
14f30 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64  >timestring, mod
14f40 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c  ifier, modifier,
14f50 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e   ...</i><b>)</b>
14f60 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28  )^ </li>.<li> ^(
14f70 3c 62 3e 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74  <b>time(</b><i>t
14f80 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66  imestring, modif
14f90 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e  ier, modifier, .
14fa0 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e  ..</i><b>)</b>)^
14fb0 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62   </li>.<li> ^(<b
14fc0 3e 64 61 74 65 74 69 6d 65 28 3c 2f 62 3e 3c 69  >datetime(</b><i
14fd0 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64  >timestring, mod
14fe0 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c  ifier, modifier,
14ff0 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e   ...</i><b>)</b>
15000 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28  )^ </li>.<li> ^(
15010 3c 62 3e 6a 75 6c 69 61 6e 64 61 79 28 3c 2f 62  <b>julianday(</b
15020 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20  ><i>timestring, 
15030 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69  modifier, modifi
15040 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c  er, ...</i><b>)<
15050 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e  /b>)^ </li>.<li>
15060 20 5e 28 3c 62 3e 73 74 72 66 74 69 6d 65 28 3c   ^(<b>strftime(<
15070 2f 62 3e 3c 69 3e 66 6f 72 6d 61 74 2c 20 74 69  /b><i>format, ti
15080 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69  mestring, modifi
15090 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e  er, modifier, ..
150a0 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20  .</i><b>)</b>)^ 
150b0 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  </li>.</ol>..<p>
150c0 0a 5e 41 6c 6c 20 66 69 76 65 20 64 61 74 65 20  .^All five date 
150d0 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f  and time functio
150e0 6e 73 20 74 61 6b 65 20 61 20 74 69 6d 65 20 73  ns take a time s
150f0 74 72 69 6e 67 20 61 73 20 61 6e 20 61 72 67 75  tring as an argu
15100 6d 65 6e 74 2e 20 0a 5e 54 68 65 20 74 69 6d 65  ment. .^The time
15110 20 73 74 72 69 6e 67 20 69 73 20 66 6f 6c 6c 6f   string is follo
15120 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d  wed by zero or m
15130 6f 72 65 20 6d 6f 64 69 66 69 65 72 73 2e 20 0a  ore modifiers. .
15140 5e 54 68 65 20 73 74 72 66 74 69 6d 65 28 29 20  ^The strftime() 
15150 66 75 6e 63 74 69 6f 6e 20 61 6c 73 6f 20 74 61  function also ta
15160 6b 65 73 20 61 20 66 6f 72 6d 61 74 20 73 74 72  kes a format str
15170 69 6e 67 20 61 73 20 69 74 73 20 66 69 72 73 74  ing as its first
15180 20 61 72 67 75 6d 65 6e 74 2e 0a 3c 2f 70 3e 0a   argument..</p>.
15190 0a 3c 70 3e 0a 54 68 65 20 64 61 74 65 20 61 6e  .<p>.The date an
151a0 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  d time functions
151b0 20 75 73 65 20 61 20 73 75 62 73 65 74 20 6f 66   use a subset of
151c0 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69  .[http://en.wiki
151d0 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 49  pedia.org/wiki/I
151e0 53 4f 5f 38 36 30 31 20 7c 20 49 53 30 2d 38 36  SO_8601 | IS0-86
151f0 30 31 5d 20 64 61 74 65 20 61 6e 64 20 74 69 6d  01] date and tim
15200 65 0a 66 6f 72 6d 61 74 73 2e 0a 5e 54 68 65 20  e.formats..^The 
15210 64 61 74 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  date() function 
15220 72 65 74 75 72 6e 73 20 74 68 65 20 64 61 74 65  returns the date
15230 20 69 6e 20 74 68 69 73 20 66 6f 72 6d 61 74 3a   in this format:
15240 20 59 59 59 59 2d 4d 4d 2d 44 44 2e 20 0a 5e 54   YYYY-MM-DD. .^T
15250 68 65 20 74 69 6d 65 28 29 20 66 75 6e 63 74 69  he time() functi
15260 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 74  on returns the t
15270 69 6d 65 20 61 73 20 48 48 3a 4d 4d 3a 53 53 2e  ime as HH:MM:SS.
15280 20 0a 5e 54 68 65 20 64 61 74 65 74 69 6d 65 28   .^The datetime(
15290 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
152a0 6e 73 20 22 59 59 59 59 2d 4d 4d 2d 44 44 20 48  ns "YYYY-MM-DD H
152b0 48 3a 4d 4d 3a 53 53 22 2e 20 0a 5e 28 54 68 65  H:MM:SS". .^(The
152c0 20 6a 75 6c 69 61 6e 64 61 79 28 29 20 66 75 6e   julianday() fun
152d0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
152e0 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69  e .[http://en.wi
152f0 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
15300 2f 4a 75 6c 69 61 6e 5f 64 61 79 20 7c 20 4a 75  /Julian_day | Ju
15310 6c 69 61 6e 20 64 61 79 5d 20 2d 20 74 68 65 0a  lian day] - the.
15320 6e 75 6d 62 65 72 20 6f 66 20 64 61 79 73 20 73  number of days s
15330 69 6e 63 65 20 6e 6f 6f 6e 20 69 6e 20 47 72 65  ince noon in Gre
15340 65 6e 77 69 63 68 20 6f 6e 20 4e 6f 76 65 6d 62  enwich on Novemb
15350 65 72 20 32 34 2c 20 34 37 31 34 20 42 2e 43 2e  er 24, 4714 B.C.
15360 20 0a 28 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69   .([http://en.wi
15370 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
15380 2f 50 72 6f 6c 65 70 74 69 63 5f 47 72 65 67 6f  /Proleptic_Grego
15390 72 69 61 6e 5f 63 61 6c 65 6e 64 61 72 20 7c 20  rian_calendar | 
153a0 50 72 6f 6c 65 70 74 69 63 20 47 72 65 67 6f 72  Proleptic Gregor
153b0 69 61 6e 20 63 61 6c 65 6e 64 61 72 5d 29 2e 29  ian calendar]).)
153c0 5e 0a 5e 54 68 65 20 73 74 72 66 74 69 6d 65 28  ^.^The strftime(
153d0 29 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e  ) routine return
153e0 73 20 74 68 65 20 64 61 74 65 20 66 6f 72 6d 61  s the date forma
153f0 74 74 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74  tted according t
15400 6f 20 0a 74 68 65 20 66 6f 72 6d 61 74 20 73 74  o .the format st
15410 72 69 6e 67 20 73 70 65 63 69 66 69 65 64 20 61  ring specified a
15420 73 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75  s the first argu
15430 6d 65 6e 74 2e 0a 5e 54 68 65 20 66 6f 72 6d 61  ment..^The forma
15440 74 20 73 74 72 69 6e 67 20 73 75 70 70 6f 72 74  t string support
15450 73 20 74 68 65 20 6d 6f 73 74 20 63 6f 6d 6d 6f  s the most commo
15460 6e 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73 20  n substitutions 
15470 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 0a 5b 68  found in the .[h
15480 74 74 70 3a 2f 2f 6f 70 65 6e 67 72 6f 75 70 2e  ttp://opengroup.
15490 6f 72 67 2f 6f 6e 6c 69 6e 65 70 75 62 73 2f 30  org/onlinepubs/0
154a0 30 37 39 30 38 37 39 39 2f 78 73 68 2f 73 74 72  07908799/xsh/str
154b0 66 74 69 6d 65 2e 68 74 6d 6c 20 7c 20 73 74 72  ftime.html | str
154c0 66 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e  ftime() function
154d0 5d 0a 66 72 6f 6d 20 74 68 65 20 73 74 61 6e 64  ].from the stand
154e0 61 72 64 20 43 20 6c 69 62 72 61 72 79 20 70 6c  ard C library pl
154f0 75 73 20 74 77 6f 20 6e 65 77 20 73 75 62 73 74  us two new subst
15500 69 74 75 74 69 6f 6e 73 2c 20 25 66 20 61 6e 64  itutions, %f and
15510 20 25 4a 2e 0a 5e 28 54 68 65 20 66 6f 6c 6c 6f   %J..^(The follo
15520 77 69 6e 67 20 69 73 20 61 20 63 6f 6d 70 6c 65  wing is a comple
15530 74 65 20 6c 69 73 74 20 6f 66 20 76 61 6c 69 64  te list of valid
15540 20 73 74 72 66 74 69 6d 65 28 29 20 73 75 62 73   strftime() subs
15550 74 69 74 75 74 69 6f 6e 73 3a 0a 3c 2f 70 3e 0a  titutions:.</p>.
15560 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74  .<blockquote>.<t
15570 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20  able border="0" 
15580 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22 20  cellpadding="0" 
15590 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e  cellspacing="0">
155a0 0a 3c 74 72 3e 3c 74 64 3e 3c 74 64 20 77 69 64  .<tr><td><td wid
155b0 74 68 3d 22 31 30 22 3e 3c 74 64 3e 3c 2f 74 72  th="10"><td></tr
155c0 3e 0a 0a 3c 74 72 3e 3c 74 64 3e 20 25 64 20 3c  >..<tr><td> %d <
155d0 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 6d  td><td> day of m
155e0 6f 6e 74 68 3a 20 30 30 0a 3c 74 72 3e 3c 74 64  onth: 00.<tr><td
155f0 3e 20 25 66 20 3c 74 64 3e 3c 74 64 3e 20 66 72  > %f <td><td> fr
15600 61 63 74 69 6f 6e 61 6c 20 73 65 63 6f 6e 64 73  actional seconds
15610 3a 20 53 53 2e 53 53 53 0a 3c 74 72 3e 3c 74 64  : SS.SSS.<tr><td
15620 3e 20 25 48 20 3c 74 64 3e 3c 74 64 3e 20 68 6f  > %H <td><td> ho
15630 75 72 3a 20 30 30 2d 32 34 20 0a 3c 74 72 3e 3c  ur: 00-24 .<tr><
15640 74 64 3e 20 25 6a 20 3c 74 64 3e 3c 74 64 3e 20  td> %j <td><td> 
15650 64 61 79 20 6f 66 20 79 65 61 72 3a 20 30 30 31  day of year: 001
15660 2d 33 36 36 0a 3c 74 72 3e 3c 74 64 3e 20 25 4a  -366.<tr><td> %J
15670 20 3c 74 64 3e 3c 74 64 3e 20 4a 75 6c 69 61 6e   <td><td> Julian
15680 20 64 61 79 20 6e 75 6d 62 65 72 0a 3c 74 72 3e   day number.<tr>
15690 3c 74 64 3e 20 25 6d 20 3c 74 64 3e 3c 74 64 3e  <td> %m <td><td>
156a0 20 6d 6f 6e 74 68 3a 20 30 31 2d 31 32 0a 3c 74   month: 01-12.<t
156b0 72 3e 3c 74 64 3e 20 25 4d 20 3c 74 64 3e 3c 74  r><td> %M <td><t
156c0 64 3e 20 6d 69 6e 75 74 65 3a 20 30 30 2d 35 39  d> minute: 00-59
156d0 0a 3c 74 72 3e 3c 74 64 3e 20 25 73 20 3c 74 64  .<tr><td> %s <td
156e0 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73 20 73 69  ><td> seconds si
156f0 6e 63 65 20 31 39 37 30 2d 30 31 2d 30 31 0a 3c  nce 1970-01-01.<
15700 74 72 3e 3c 74 64 3e 20 25 53 20 3c 74 64 3e 3c  tr><td> %S <td><
15710 74 64 3e 20 73 65 63 6f 6e 64 73 3a 20 30 30 2d  td> seconds: 00-
15720 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 77 20 3c  59.<tr><td> %w <
15730 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 77  td><td> day of w
15740 65 65 6b 20 30 2d 36 20 77 69 74 68 20 53 75 6e  eek 0-6 with Sun
15750 64 61 79 3d 3d 30 0a 3c 74 72 3e 3c 74 64 3e 20  day==0.<tr><td> 
15760 25 57 20 3c 74 64 3e 3c 74 64 3e 20 77 65 65 6b  %W <td><td> week
15770 20 6f 66 20 79 65 61 72 3a 20 30 30 2d 35 33 0a   of year: 00-53.
15780 3c 74 72 3e 3c 74 64 3e 20 25 59 20 3c 74 64 3e  <tr><td> %Y <td>
15790 3c 74 64 3e 20 79 65 61 72 3a 20 30 30 30 30 2d  <td> year: 0000-
157a0 39 39 39 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 25  9999.<tr><td> %%
157b0 20 3c 74 64 3e 3c 74 64 3e 20 25 0a 3c 2f 74 61   <td><td> %.</ta
157c0 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  ble>.</blockquot
157d0 65 3e 29 5e 0a 0a 3c 70 3e 0a 5e 28 4e 6f 74 69  e>)^..<p>.^(Noti
157e0 63 65 20 74 68 61 74 20 61 6c 6c 20 6f 74 68 65  ce that all othe
157f0 72 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  r date and time 
15800 66 75 6e 63 74 69 6f 6e 73 20 63 61 6e 20 62 65  functions can be
15810 20 65 78 70 72 65 73 73 65 64 0a 69 6e 20 74 65   expressed.in te
15820 72 6d 73 20 6f 66 20 73 74 72 66 74 69 6d 65 28  rms of strftime(
15830 29 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  ):.</p>..<blockq
15840 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72  uote>.<table bor
15850 64 65 72 3d 22 30 22 20 63 65 6c 6c 70 61 64 64  der="0" cellpadd
15860 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70 61 63  ing="0" cellspac
15870 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74 64  ing="0">.<tr><td
15880 3e 3c 62 3e 46 75 6e 63 74 69 6f 6e 3c 2f 62 3e  ><b>Function</b>
15890 3c 74 64 20 77 69 64 74 68 3d 22 33 30 22 3e 3c  <td width="30"><
158a0 74 64 3e 3c 62 3e 45 71 75 69 76 61 6c 65 6e 74  td><b>Equivalent
158b0 20 73 74 72 66 74 69 6d 65 28 29 3c 2f 62 3e 0a   strftime()</b>.
158c0 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61 74 65 28  <tr><td>   date(
158d0 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64 3e 3c 74  ...)      <td><t
158e0 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25 59  d>  strftime('%Y
158f0 2d 25 6d 2d 25 64 27 2c 20 2e 2e 2e 29 0a 3c 74  -%m-%d', ...).<t
15900 72 3e 3c 74 64 3e 20 20 20 74 69 6d 65 28 2e 2e  r><td>   time(..
15910 2e 29 20 20 20 20 20 20 3c 74 64 3e 3c 74 64 3e  .)      <td><td>
15920 20 20 73 74 72 66 74 69 6d 65 28 27 25 48 3a 25    strftime('%H:%
15930 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e  M:%S', ...).<tr>
15940 3c 74 64 3e 20 20 20 64 61 74 65 74 69 6d 65 28  <td>   datetime(
15950 2e 2e 2e 29 20 20 3c 74 64 3e 3c 74 64 3e 20 20  ...)  <td><td>  
15960 73 74 72 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d  strftime('%Y-%m-
15970 25 64 20 25 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e  %d %H:%M:%S', ..
15980 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 6a 75  .).<tr><td>   ju
15990 6c 69 61 6e 64 61 79 28 2e 2e 2e 29 20 3c 74 64  lianday(...) <td
159a0 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28  ><td>  strftime(
159b0 27 25 4a 27 2c 20 2e 2e 2e 29 0a 3c 2f 74 61 62  '%J', ...).</tab
159c0 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  le>.</blockquote
159d0 3e 29 5e 0a 0a 3c 70 3e 0a 54 68 65 20 6f 6e 6c  >)^..<p>.The onl
159e0 79 20 72 65 61 73 6f 6e 73 20 66 6f 72 20 70 72  y reasons for pr
159f0 6f 76 69 64 69 6e 67 20 66 75 6e 63 74 69 6f 6e  oviding function
15a00 73 20 6f 74 68 65 72 20 74 68 61 6e 20 73 74 72  s other than str
15a10 66 74 69 6d 65 28 29 20 69 73 0a 66 6f 72 20 63  ftime() is.for c
15a20 6f 6e 76 65 6e 69 65 6e 63 65 20 61 6e 64 20 66  onvenience and f
15a30 6f 72 20 65 66 66 69 63 69 65 6e 63 79 2e 0a 3c  or efficiency..<
15a40 2f 70 3e 0a 0a 3c 68 33 3e 54 69 6d 65 20 53 74  /p>..<h3>Time St
15a50 72 69 6e 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  rings</h3>..<p>^
15a60 28 41 20 74 69 6d 65 20 73 74 72 69 6e 67 20 63  (A time string c
15a70 61 6e 20 62 65 20 69 6e 20 61 6e 79 20 6f 66 20  an be in any of 
15a80 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f  the following fo
15a90 72 6d 61 74 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e  rmats:</p>..<ol>
15aa0 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
15ab0 2d 44 44 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  -DD</i>.<li> <i>
15ac0 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d  YYYY-MM-DD HH:MM
15ad0 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59  </i>.<li> <i>YYY
15ae0 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53  Y-MM-DD HH:MM:SS
15af0 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59  </i>.<li> <i>YYY
15b00 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53  Y-MM-DD HH:MM:SS
15b10 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  .SSS</i>.<li> <i
15b20 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c  >YYYY-MM-DD</i><
15b30 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3c  b>T</b><i>HH:MM<
15b40 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  /i>.<li> <i>YYYY
15b50 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f  -MM-DD</i><b>T</
15b60 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69  b><i>HH:MM:SS</i
15b70 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d  >.<li> <i>YYYY-M
15b80 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e  M-DD</i><b>T</b>
15b90 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c  <i>HH:MM:SS.SSS<
15ba0 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d  /i>.<li> <i>HH:M
15bb0 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48  M</i>.<li> <i>HH
15bc0 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  :MM:SS</i>.<li> 
15bd0 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c  <i>HH:MM:SS.SSS<
15be0 2f 69 3e 0a 3c 6c 69 3e 20 3c 62 3e 6e 6f 77 3c  /i>.<li> <b>now<
15bf0 2f 62 3e 0a 3c 6c 69 3e 20 3c 69 3e 44 44 44 44  /b>.<li> <i>DDDD
15c00 44 44 44 44 44 44 3c 2f 69 3e 0a 3c 2f 6f 6c 3e  DDDDDD</i>.</ol>
15c10 29 5e 0a 0a 3c 70 3e 0a 5e 49 6e 20 66 6f 72 6d  )^..<p>.^In form
15c20 61 74 73 20 35 20 74 68 72 6f 75 67 68 20 37 2c  ats 5 through 7,
15c30 20 74 68 65 20 22 54 22 20 69 73 20 61 20 6c 69   the "T" is a li
15c40 74 65 72 61 6c 20 63 68 61 72 61 63 74 65 72 20  teral character 
15c50 73 65 70 61 72 61 74 69 6e 67 20 0a 74 68 65 20  separating .the 
15c60 64 61 74 65 20 61 6e 64 20 74 68 65 20 74 69 6d  date and the tim
15c70 65 2c 20 61 73 20 72 65 71 75 69 72 65 64 20 62  e, as required b
15c80 79 20 0a 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 77  y .[http://www.w
15c90 33 63 2e 6f 72 67 2f 54 52 2f 4e 4f 54 45 2d 64  3c.org/TR/NOTE-d
15ca0 61 74 65 74 69 6d 65 20 7c 20 49 53 4f 2d 38 36  atetime | ISO-86
15cb0 30 31 5d 2e 20 0a 5e 46 6f 72 6d 61 74 73 20 38  01]. .^Formats 8
15cc0 20 74 68 72 6f 75 67 68 20 31 30 20 74 68 61 74   through 10 that
15cd0 20 73 70 65 63 69 66 79 20 6f 6e 6c 79 20 61 20   specify only a 
15ce0 74 69 6d 65 20 61 73 73 75 6d 65 20 61 20 64 61  time assume a da
15cf0 74 65 20 6f 66 20 0a 32 30 30 30 2d 30 31 2d 30  te of .2000-01-0
15d00 31 2e 20 46 6f 72 6d 61 74 20 31 31 2c 20 74 68  1. Format 11, th
15d10 65 20 73 74 72 69 6e 67 20 27 6e 6f 77 27 2c 20  e string 'now', 
15d20 69 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  is converted int
15d30 6f 20 74 68 65 20 0a 63 75 72 72 65 6e 74 20 64  o the .current d
15d40 61 74 65 20 61 6e 64 20 74 69 6d 65 20 61 73 20  ate and time as 
15d50 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68  obtained from th
15d60 65 20 78 43 75 72 72 65 6e 74 54 69 6d 65 20 6d  e xCurrentTime m
15d70 65 74 68 6f 64 0a 6f 66 20 74 68 65 20 5b 73 71  ethod.of the [sq
15d80 6c 69 74 65 33 5f 76 66 73 5d 20 6f 62 6a 65 63  lite3_vfs] objec
15d90 74 20 69 6e 20 75 73 65 2e 0a 5e 5b 68 74 74 70  t in use..^[http
15da0 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e  ://en.wikipedia.
15db0 6f 72 67 2f 77 69 6b 69 2f 43 6f 6f 72 64 69 6e  org/wiki/Coordin
15dc0 61 74 65 64 5f 55 6e 69 76 65 72 73 61 6c 5f 54  ated_Universal_T
15dd0 69 6d 65 20 7c 20 55 6e 69 76 65 72 73 61 6c 20  ime | Universal 
15de0 43 6f 6f 72 64 69 6e 61 74 65 64 20 54 69 6d 65  Coordinated Time
15df0 20 28 55 54 43 29 5d 20 69 73 20 75 73 65 64 2e   (UTC)] is used.
15e00 20 0a 5e 46 6f 72 6d 61 74 20 31 32 20 69 73 20   .^Format 12 is 
15e10 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e  the .[http://en.
15e20 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
15e30 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 20 7c 20  ki/Julian_day | 
15e40 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65  Julian day numbe
15e50 72 5d 0a 65 78 70 72 65 73 73 65 64 20 61 73 20  r].expressed as 
15e60 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  a floating point
15e70 20 76 61 6c 75 65 2e 0a 3c 2f 70 3e 0a 0a 3c 68   value..</p>..<h
15e80 33 3e 4d 6f 64 69 66 69 65 72 73 3c 2f 68 33 3e  3>Modifiers</h3>
15e90 0a 0a 3c 70 3e 5e 54 68 65 20 74 69 6d 65 20 73  ..<p>^The time s
15ea0 74 72 69 6e 67 20 63 61 6e 20 62 65 20 66 6f 6c  tring can be fol
15eb0 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72  lowed by zero or
15ec0 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72 73 20   more modifiers 
15ed0 74 68 61 74 20 0a 61 6c 74 65 72 20 74 68 65 20  that .alter the 
15ee0 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 73 74  date and time st
15ef0 72 69 6e 67 2e 20 5e 45 61 63 68 20 6d 6f 64 69  ring. ^Each modi
15f00 66 69 65 72 0a 69 73 20 61 20 74 72 61 6e 73 66  fier.is a transf
15f10 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73  ormation that is
15f20 20 61 70 70 6c 69 65 64 20 74 6f 20 74 68 65 20   applied to the 
15f30 74 69 6d 65 20 76 61 6c 75 65 20 74 6f 20 69 74  time value to it
15f40 73 20 6c 65 66 74 2e 0a 5e 4d 6f 64 69 66 69 65  s left..^Modifie
15f50 72 73 20 61 72 65 20 61 70 70 6c 69 65 64 20 66  rs are applied f
15f60 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
15f70 74 3b 20 6f 72 64 65 72 20 69 73 20 69 6d 70 6f  t; order is impo
15f80 72 74 61 6e 74 2e 0a 5e 28 54 68 65 20 61 76 61  rtant..^(The ava
15f90 69 6c 61 62 6c 65 20 6d 6f 64 69 66 69 65 72 73  ilable modifiers
15fa0 20 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73 2e   are as follows.
15fb0 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20  </p>..<ol>.<li> 
15fc0 4e 4e 4e 20 64 61 79 73 0a 3c 6c 69 3e 20 4e 4e  NNN days.<li> NN
15fd0 4e 20 68 6f 75 72 73 0a 3c 6c 69 3e 20 4e 4e 4e  N hours.<li> NNN
15fe0 20 6d 69 6e 75 74 65 73 0a 3c 6c 69 3e 20 4e 4e   minutes.<li> NN
15ff0 4e 2e 4e 4e 4e 4e 20 73 65 63 6f 6e 64 73 0a 3c  N.NNNN seconds.<
16000 6c 69 3e 20 4e 4e 4e 20 6d 6f 6e 74 68 73 0a 3c  li> NNN months.<
16010 6c 69 3e 20 4e 4e 4e 20 79 65 61 72 73 0a 3c 6c  li> NNN years.<l
16020 69 3e 20 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74  i> start of mont
16030 68 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20  h.<li> start of 
16040 79 65 61 72 0a 3c 6c 69 3e 20 73 74 61 72 74 20  year.<li> start 
16050 6f 66 20 64 61 79 0a 3c 6c 69 3e 20 77 65 65 6b  of day.<li> week
16060 64 61 79 20 4e 0a 3c 6c 69 3e 20 75 6e 69 78 65  day N.<li> unixe
16070 70 6f 63 68 0a 3c 6c 69 3e 20 6c 6f 63 61 6c 74  poch.<li> localt
16080 69 6d 65 0a 3c 6c 69 3e 20 75 74 63 20 0a 3c 2f  ime.<li> utc .</
16090 6f 6c 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 66  ol>)^..<p>^The f
160a0 69 72 73 74 20 73 69 78 20 6d 6f 64 69 66 69 65  irst six modifie
160b0 72 73 20 28 31 20 74 68 72 6f 75 67 68 20 36 29  rs (1 through 6)
160c0 20 0a 73 69 6d 70 6c 79 20 61 64 64 20 74 68 65   .simply add the
160d0 20 73 70 65 63 69 66 69 65 64 20 61 6d 6f 75 6e   specified amoun
160e0 74 20 6f 66 20 74 69 6d 65 20 74 6f 20 74 68 65  t of time to the
160f0 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 0a   date and time .
16100 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
16110 20 70 72 65 63 65 64 69 6e 67 20 74 69 6d 65 73   preceding times
16120 74 72 69 6e 67 20 61 6e 64 20 6d 6f 64 69 66 69  tring and modifi
16130 65 72 73 2e 0a 5e 4e 6f 74 65 20 74 68 61 74 20  ers..^Note that 
16140 22 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 6d 6f 6e  "&plusmn;NNN mon
16150 74 68 73 22 20 77 6f 72 6b 73 20 62 79 20 72 65  ths" works by re
16160 6e 64 65 72 69 6e 67 20 74 68 65 20 6f 72 69 67  ndering the orig
16170 69 6e 61 6c 20 64 61 74 65 20 69 6e 74 6f 0a 74  inal date into.t
16180 68 65 20 59 59 59 59 2d 4d 4d 2d 44 44 20 66 6f  he YYYY-MM-DD fo
16190 72 6d 61 74 2c 20 61 64 64 69 6e 67 20 74 68 65  rmat, adding the
161a0 20 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 74 6f 20   &plusmn;NNN to 
161b0 74 68 65 20 4d 4d 20 6d 6f 6e 74 68 20 76 61 6c  the MM month val
161c0 75 65 2c 20 74 68 65 6e 0a 6e 6f 72 6d 61 6c 69  ue, then.normali
161d0 7a 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 2e  zing the result.
161e0 20 20 5e 54 68 75 73 2c 20 66 6f 72 20 65 78 61    ^Thus, for exa
161f0 6d 70 6c 65 2c 20 74 68 65 20 64 61 74 61 20 32  mple, the data 2
16200 30 30 31 2d 30 33 2d 33 31 20 6d 6f 64 69 66 69  001-03-31 modifi
16210 65 64 0a 62 79 20 27 2b 31 20 6d 6f 6e 74 68 27  ed.by '+1 month'
16220 20 69 6e 69 74 69 61 6c 6c 79 20 79 69 65 6c 64   initially yield
16230 73 20 32 30 30 31 2d 30 34 2d 33 31 2c 20 62 75  s 2001-04-31, bu
16240 74 20 41 70 72 69 6c 20 6f 6e 6c 79 20 68 61 73  t April only has
16250 20 33 30 20 64 61 79 73 0a 73 6f 20 74 68 65 20   30 days.so the 
16260 64 61 74 65 20 69 73 20 6e 6f 72 6d 61 6c 69 7a  date is normaliz
16270 65 64 20 74 6f 20 32 30 30 31 2d 30 35 2d 30 31  ed to 2001-05-01
16280 2e 20 20 5e 41 20 73 69 6d 69 6c 61 72 20 65 66  .  ^A similar ef
16290 66 65 63 74 20 6f 63 63 75 72 73 20 77 68 65 6e  fect occurs when
162a0 0a 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61  .the original da
162b0 74 65 20 69 73 20 46 65 62 72 75 61 72 79 20 32  te is February 2
162c0 39 20 6f 66 20 61 20 6c 65 61 70 79 65 61 72 20  9 of a leapyear 
162d0 61 6e 64 20 74 68 65 20 6d 6f 64 69 66 69 65 72  and the modifier
162e0 20 69 73 0a 26 70 6c 75 73 6d 6e 3b 4e 20 79 65   is.&plusmn;N ye
162f0 61 72 73 20 77 68 65 72 65 20 4e 20 69 73 20 6e  ars where N is n
16300 6f 74 20 61 20 6d 75 6c 74 69 70 6c 65 20 6f 66  ot a multiple of
16310 20 66 6f 75 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   four.</p>..<p>^
16320 54 68 65 20 22 73 74 61 72 74 20 6f 66 22 20 6d  The "start of" m
16330 6f 64 69 66 69 65 72 73 20 28 37 20 74 68 72 6f  odifiers (7 thro
16340 75 67 68 20 39 29 20 73 68 69 66 74 20 74 68 65  ugh 9) shift the
16350 20 64 61 74 65 20 62 61 63 6b 77 61 72 64 73 20   date backwards 
16360 0a 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  .to the beginnin
16370 67 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  g of the current
16380 20 6d 6f 6e 74 68 2c 20 79 65 61 72 20 6f 72 20   month, year or 
16390 64 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  day.</p>..<p>^Th
163a0 65 20 22 77 65 65 6b 64 61 79 22 20 6d 6f 64 69  e "weekday" modi
163b0 66 69 65 72 20 61 64 76 61 6e 63 65 73 20 74 68  fier advances th
163c0 65 20 64 61 74 65 20 66 6f 72 77 61 72 64 20 74  e date forward t
163d0 6f 20 74 68 65 20 6e 65 78 74 20 64 61 74 65 20  o the next date 
163e0 0a 77 68 65 72 65 20 74 68 65 20 77 65 65 6b 64  .where the weekd
163f0 61 79 20 6e 75 6d 62 65 72 20 69 73 20 4e 2e 20  ay number is N. 
16400 53 75 6e 64 61 79 20 69 73 20 30 2c 20 4d 6f 6e  Sunday is 0, Mon
16410 64 61 79 20 69 73 20 31 2c 20 61 6e 64 20 73 6f  day is 1, and so
16420 20 66 6f 72 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e   forth.</p>..<p>
16430 5e 54 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22  ^The "unixepoch"
16440 20 6d 6f 64 69 66 69 65 72 20 28 31 31 29 20 6f   modifier (11) o
16450 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20 69 74 20  nly works if it 
16460 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  immediately foll
16470 6f 77 73 20 0a 61 20 74 69 6d 65 73 74 72 69 6e  ows .a timestrin
16480 67 20 69 6e 20 74 68 65 20 44 44 44 44 44 44 44  g in the DDDDDDD
16490 44 44 44 20 66 6f 72 6d 61 74 2e 20 0a 5e 54 68  DDD format. .^Th
164a0 69 73 20 6d 6f 64 69 66 69 65 72 20 63 61 75 73  is modifier caus
164b0 65 73 20 74 68 65 20 44 44 44 44 44 44 44 44 44  es the DDDDDDDDD
164c0 44 20 74 6f 20 62 65 20 69 6e 74 65 72 70 72 65  D to be interpre
164d0 74 65 64 20 6e 6f 74 20 0a 61 73 20 61 20 4a 75  ted not .as a Ju
164e0 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 20  lian day number 
164f0 61 73 20 69 74 20 6e 6f 72 6d 61 6c 6c 79 20 77  as it normally w
16500 6f 75 6c 64 20 62 65 2c 20 62 75 74 20 61 73 0a  ould be, but as.
16510 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70  [http://en.wikip
16520 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 55 6e  edia.org/wiki/Un
16530 69 78 5f 74 69 6d 65 20 7c 20 55 6e 69 78 20 54  ix_time | Unix T
16540 69 6d 65 5d 20 2d 20 74 68 65 20 0a 6e 75 6d 62  ime] - the .numb
16550 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69  er of seconds si
16560 6e 63 65 20 31 39 37 30 2e 20 20 49 66 20 74 68  nce 1970.  If th
16570 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f  e "unixepoch" mo
16580 64 69 66 69 65 72 20 64 6f 65 73 20 6e 6f 74 0a  difier does not.
16590 66 6f 6c 6c 6f 77 20 61 20 74 69 6d 65 73 74 72  follow a timestr
165a0 69 6e 67 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ing of the form 
165b0 44 44 44 44 44 44 44 44 44 44 20 77 68 69 63 68  DDDDDDDDDD which
165c0 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6e   expresses the n
165d0 75 6d 62 65 72 0a 6f 66 20 73 65 63 6f 6e 64 73  umber.of seconds
165e0 20 73 69 6e 63 65 20 31 39 37 30 20 6f 72 20 69   since 1970 or i
165f0 66 20 6f 74 68 65 72 20 6d 6f 64 69 66 69 65 72  f other modifier
16600 73 0a 73 65 70 61 72 61 74 65 20 74 68 65 20 22  s.separate the "
16610 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66  unixepoch" modif
16620 69 65 72 20 66 72 6f 6d 20 70 72 69 6f 72 20 44  ier from prior D
16630 44 44 44 44 44 44 44 44 44 20 74 68 65 6e 20 74  DDDDDDDDD then t
16640 68 65 0a 62 65 68 61 76 69 6f 72 20 69 73 20 75  he.behavior is u
16650 6e 64 65 66 69 6e 65 64 2e 0a 44 75 65 20 74 6f  ndefined..Due to
16660 20 70 72 65 63 69 73 69 6f 6e 20 6c 69 6d 69 74   precision limit
16670 61 74 69 6f 6e 73 20 69 6d 70 6f 73 65 64 20 62  ations imposed b
16680 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  y the implementa
16690 74 69 6f 6e 73 20 75 73 65 0a 6f 66 20 36 34 2d  tions use.of 64-
166a0 62 69 74 20 69 6e 74 65 67 65 72 73 2c 20 74 68  bit integers, th
166b0 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f  e "unixepoch" mo
166c0 64 69 66 69 65 72 20 6f 6e 6c 79 20 77 6f 72 6b  difier only work
166d0 73 20 66 6f 72 0a 64 61 74 65 73 20 62 65 74 77  s for.dates betw
166e0 65 65 6e 20 30 30 30 30 2d 30 31 2d 30 31 20 30  een 0000-01-01 0
166f0 30 3a 30 30 3a 30 30 20 61 6e 64 20 35 33 35 32  0:00:00 and 5352
16700 2d 31 31 2d 30 31 20 31 30 3a 35 32 3a 34 37 20  -11-01 10:52:47 
16710 28 75 6e 69 78 20 74 69 6d 65 73 0a 6f 66 20 2d  (unix times.of -
16720 36 32 31 36 37 32 31 39 32 30 30 20 74 68 72 6f  62167219200 thro
16730 75 67 68 20 31 30 36 37 35 31 39 39 31 36 37 29  ugh 10675199167)
16740 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22  .</p>..<p>^The "
16750 6c 6f 63 61 6c 74 69 6d 65 22 20 6d 6f 64 69 66  localtime" modif
16760 69 65 72 20 28 31 32 29 20 61 73 73 75 6d 65 73  ier (12) assumes
16770 20 74 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67   the time string
16780 20 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73 20   to its left is 
16790 69 6e 0a 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f  in.Universal Coo
167a0 72 64 69 6e 61 74 65 64 20 54 69 6d 65 20 28 55  rdinated Time (U
167b0 54 43 29 20 61 6e 64 20 61 64 6a 75 73 74 73 20  TC) and adjusts 
167c0 74 68 65 20 74 69 6d 65 0a 73 74 72 69 6e 67 20  the time.string 
167d0 73 6f 20 74 68 61 74 20 69 74 20 64 69 73 70 6c  so that it displ
167e0 61 79 73 20 6c 6f 63 61 6c 74 69 6d 65 2e 20 20  ays localtime.  
167f0 49 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22 0a 66  If "localtime".f
16800 6f 6c 6c 6f 77 73 20 61 20 74 69 6d 65 20 74 68  ollows a time th
16810 61 74 20 69 73 20 6e 6f 74 20 55 54 43 2c 20 74  at is not UTC, t
16820 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72  hen the behavior
16830 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 5e   is undefined..^
16840 28 54 68 65 20 22 75 74 63 22 20 69 73 20 74 68  (The "utc" is th
16850 65 20 6f 70 70 6f 73 69 74 65 20 6f 66 20 22 6c  e opposite of "l
16860 6f 63 61 6c 74 69 6d 65 22 2e 20 20 22 75 74 63  ocaltime".  "utc
16870 22 20 61 73 73 75 6d 65 73 20 74 68 61 74 20 74  " assumes that t
16880 68 65 20 73 74 72 69 6e 67 0a 74 6f 20 69 74 73  he string.to its
16890 20 6c 65 66 74 20 69 73 20 69 6e 20 74 68 65 20   left is in the 
168a0 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65 20 61  local timezone a
168b0 6e 64 20 61 64 6a 75 73 74 73 20 74 68 61 74 20  nd adjusts that 
168c0 73 74 72 69 6e 67 20 74 6f 20 62 65 20 69 6e 20  string to be in 
168d0 55 54 43 2e 29 5e 0a 49 66 20 74 68 65 20 70 72  UTC.)^.If the pr
168e0 69 6f 72 20 73 74 72 69 6e 67 20 69 73 20 6e 6f  ior string is no
168f0 74 20 69 6e 20 6c 6f 63 61 6c 74 69 6d 65 2c 20  t in localtime, 
16900 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
16910 6f 66 20 22 75 74 63 22 20 69 73 0a 75 6e 64 65  of "utc" is.unde
16920 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e  fined.</p>..<h3>
16930 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a 5e  Examples</h3>..^
16940 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
16950 63 75 72 72 65 6e 74 20 64 61 74 65 2e 3c 70 3e  current date.<p>
16960 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45  ..<blockquote>SE
16970 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 29  LECT date('now')
16980 3b 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  ;</blockquote>)^
16990 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
169a0 68 65 20 6c 61 73 74 20 64 61 79 20 6f 66 20 74  he last day of t
169b0 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68  he current month
169c0 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
169d0 74 65 3e 53 45 4c 45 43 54 20 64 61 74 65 28 27  te>SELECT date('
169e0 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20 6d  now','start of m
169f0 6f 6e 74 68 27 2c 27 2b 31 20 6d 6f 6e 74 68 27  onth','+1 month'
16a00 2c 27 2d 31 20 64 61 79 27 29 3b 0a 3c 2f 62 6c  ,'-1 day');.</bl
16a10 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
16a20 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61  p>Compute the da
16a30 74 65 20 61 6e 64 20 74 69 6d 65 20 67 69 76 65  te and time give
16a40 6e 20 61 20 75 6e 69 78 20 74 69 6d 65 73 74 61  n a unix timesta
16a50 6d 70 20 31 30 39 32 39 34 31 34 36 36 2e 3c 2f  mp 1092941466.</
16a60 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
16a70 0a 20 20 20 20 53 45 4c 45 43 54 20 64 61 74 65  .    SELECT date
16a80 74 69 6d 65 28 31 30 39 32 39 34 31 34 36 36 2c  time(1092941466,
16a90 20 27 75 6e 69 78 65 70 6f 63 68 27 29 3b 0a 3c   'unixepoch');.<
16aa0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
16ab0 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ^(<p>Compute the
16ac0 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 67   date and time g
16ad0 69 76 65 6e 20 61 20 75 6e 69 78 20 74 69 6d 65  iven a unix time
16ae0 73 74 61 6d 70 20 31 30 39 32 39 34 31 34 36 36  stamp 1092941466
16af0 2c 20 61 6e 64 20 0a 63 6f 6d 70 65 6e 73 61 74  , and .compensat
16b00 65 20 66 6f 72 20 79 6f 75 72 20 6c 6f 63 61 6c  e for your local
16b10 20 74 69 6d 65 7a 6f 6e 65 2e 3c 2f 70 3e 0a 0a   timezone.</p>..
16b20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
16b30 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28 31  ELECT datetime(1
16b40 30 39 32 39 34 31 34 36 36 2c 20 27 75 6e 69 78  092941466, 'unix
16b50 65 70 6f 63 68 27 2c 20 27 6c 6f 63 61 6c 74 69  epoch', 'localti
16b60 6d 65 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  me');.</blockquo
16b70 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70  te>)^..^(<p>Comp
16b80 75 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ute the current 
16b90 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 2e 3c  unix timestamp.<
16ba0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
16bb0 3e 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66 74  >.  SELECT strft
16bc0 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 3b  ime('%s','now');
16bd0 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
16be0 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
16bf0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61 79  he number of day
16c00 73 20 73 69 6e 63 65 20 74 68 65 20 73 69 67 6e  s since the sign
16c10 69 6e 67 20 6f 66 20 74 68 65 20 55 53 20 44 65  ing of the US De
16c20 63 6c 61 72 61 74 69 6f 6e 0a 6f 66 20 49 6e 64  claration.of Ind
16c30 65 70 65 6e 64 65 6e 63 65 2e 3c 2f 70 3e 0a 0a  ependence.</p>..
16c40 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
16c50 45 4c 45 43 54 20 6a 75 6c 69 61 6e 64 61 79 28  ELECT julianday(
16c60 27 6e 6f 77 27 29 20 2d 20 6a 75 6c 69 61 6e 64  'now') - juliand
16c70 61 79 28 27 31 37 37 36 2d 30 37 2d 30 34 27 29  ay('1776-07-04')
16c80 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
16c90 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20  ^..^(<p>Compute 
16ca0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65  the number of se
16cb0 63 6f 6e 64 73 20 73 69 6e 63 65 20 61 20 70 61  conds since a pa
16cc0 72 74 69 63 75 6c 61 72 20 6d 6f 6d 65 6e 74 20  rticular moment 
16cd0 69 6e 20 32 30 30 34 3a 3c 2f 70 3e 0a 0a 3c 62  in 2004:</p>..<b
16ce0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c  lockquote>.  SEL
16cf0 45 43 54 20 73 74 72 66 74 69 6d 65 28 27 25 73  ECT strftime('%s
16d00 27 2c 27 6e 6f 77 27 29 20 2d 20 73 74 72 66 74  ','now') - strft
16d10 69 6d 65 28 27 25 73 27 2c 27 32 30 30 34 2d 30  ime('%s','2004-0
16d20 31 2d 30 31 20 30 32 3a 33 34 3a 35 36 27 29 3b  1-01 02:34:56');
16d30 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
16d40 0a 0a 5e 28 3c 70 3e 0a 43 6f 6d 70 75 74 65 20  ..^(<p>.Compute 
16d50 74 68 65 20 64 61 74 65 20 6f 66 20 74 68 65 20  the date of the 
16d60 66 69 72 73 74 20 54 75 65 73 64 61 79 20 69 6e  first Tuesday in
16d70 20 4f 63 74 6f 62 65 72 0a 66 6f 72 20 74 68 65   October.for the
16d80 20 63 75 72 72 65 6e 74 20 79 65 61 72 2e 0a 3c   current year..<
16d90 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
16da0 3e 0a 20 20 53 45 4c 45 43 54 20 64 61 74 65 28  >.  SELECT date(
16db0 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20  'now','start of 
16dc0 79 65 61 72 27 2c 27 2b 39 20 6d 6f 6e 74 68 73  year','+9 months
16dd0 27 2c 27 77 65 65 6b 64 61 79 20 32 27 29 3b 0a  ','weekday 2');.
16de0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
16df0 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  .^(<p>Compute th
16e00 65 20 74 69 6d 65 20 73 69 6e 63 65 20 74 68 65  e time since the
16e10 20 75 6e 69 78 20 65 70 6f 63 68 20 69 6e 20 73   unix epoch in s
16e20 65 63 6f 6e 64 73 20 0a 28 6c 69 6b 65 20 73 74  econds .(like st
16e30 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77  rftime('%s','now
16e40 27 29 20 65 78 63 65 70 74 20 69 6e 63 6c 75 64  ') except includ
16e50 65 73 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61  es fractional pa
16e60 72 74 29 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  rt):</p>..<block
16e70 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20  quote>.  SELECT 
16e80 28 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27  (julianday('now'
16e90 29 20 2d 20 32 34 34 30 35 38 37 2e 35 29 2a 38  ) - 2440587.5)*8
16ea0 36 34 30 30 2e 30 3b 0a 3c 2f 62 6c 6f 63 6b 71  6400.0;.</blockq
16eb0 75 6f 74 65 3e 29 5e 0a 0a 3c 68 33 3e 43 61 76  uote>)^..<h3>Cav
16ec0 65 61 74 73 20 41 6e 64 20 42 75 67 73 3c 2f 68  eats And Bugs</h
16ed0 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 75  3>..<p>The compu
16ee0 74 61 74 69 6f 6e 20 6f 66 20 6c 6f 63 61 6c 20  tation of local 
16ef0 74 69 6d 65 20 64 65 70 65 6e 64 73 20 68 65 61  time depends hea
16f00 76 69 6c 79 20 6f 6e 20 74 68 65 20 77 68 69 6d  vily on the whim
16f10 20 0a 6f 66 20 70 6f 6c 69 74 69 63 69 61 6e 73   .of politicians
16f20 20 61 6e 64 20 69 73 20 74 68 75 73 20 64 69 66   and is thus dif
16f30 66 69 63 75 6c 74 20 74 6f 20 67 65 74 20 63 6f  ficult to get co
16f40 72 72 65 63 74 20 66 6f 72 20 0a 61 6c 6c 20 6c  rrect for .all l
16f50 6f 63 61 6c 65 73 2e 20 5e 49 6e 20 74 68 69 73  ocales. ^In this
16f60 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c   implementation,
16f70 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20   the standard C 
16f80 6c 69 62 72 61 72 79 20 0a 66 75 6e 63 74 69 6f  library .functio
16f90 6e 20 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20  n localtime_r() 
16fa0 69 73 20 75 73 65 64 20 74 6f 20 61 73 73 69 73  is used to assis
16fb0 74 20 69 6e 20 74 68 65 20 63 61 6c 63 75 6c 61  t in the calcula
16fc0 74 69 6f 6e 20 6f 66 20 0a 6c 6f 63 61 6c 20 74  tion of .local t
16fd0 69 6d 65 2e 20 20 5e 28 54 68 65 20 0a 6c 6f 63  ime.  ^(The .loc
16fe0 61 6c 74 69 6d 65 5f 72 28 29 20 43 20 66 75 6e  altime_r() C fun
16ff0 63 74 69 6f 6e 20 6e 6f 72 6d 61 6c 6c 79 20 6f  ction normally o
17000 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 79 65  nly works for ye
17010 61 72 73 0a 62 65 74 77 65 65 6e 20 31 39 37 30  ars.between 1970
17020 20 61 6e 64 20 32 30 33 37 2e 20 46 6f 72 20 64   and 2037. For d
17030 61 74 65 73 20 6f 75 74 73 69 64 65 20 74 68 69  ates outside thi
17040 73 20 72 61 6e 67 65 2c 20 53 51 4c 69 74 65 20  s range, SQLite 
17050 0a 61 74 74 65 6d 70 74 73 20 74 6f 20 6d 61 70  .attempts to map
17060 20 74 68 65 20 79 65 61 72 20 69 6e 74 6f 20 61   the year into a
17070 6e 20 65 71 75 69 76 61 6c 65 6e 74 20 79 65 61  n equivalent yea
17080 72 20 77 69 74 68 69 6e 20 0a 74 68 69 73 20 72  r within .this r
17090 61 6e 67 65 2c 20 64 6f 20 74 68 65 20 63 61 6c  ange, do the cal
170a0 63 75 6c 61 74 69 6f 6e 2c 20 74 68 65 6e 20 6d  culation, then m
170b0 61 70 20 74 68 65 20 79 65 61 72 20 62 61 63 6b  ap the year back
170c0 2e 29 5e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 5e 28 54  .)^</p>...<p>^(T
170d0 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f  hese functions o
170e0 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 64 61 74  nly work for dat
170f0 65 73 20 62 65 74 77 65 65 6e 20 30 30 30 30 2d  es between 0000-
17100 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 0a 61  01-01 00:00:00.a
17110 6e 64 20 39 39 39 39 2d 31 32 2d 33 31 20 32 33  nd 9999-12-31 23
17120 3a 35 39 3a 35 39 20 28 6a 75 6c 69 64 61 6e 20  :59:59 (julidan 
17130 64 61 79 20 6e 75 6d 62 65 72 73 20 31 37 32 31  day numbers 1721
17140 30 35 39 2e 35 20 74 68 72 6f 75 67 68 20 35 33  059.5 through 53
17150 37 33 34 38 34 2e 35 29 2e 29 5e 0a 46 6f 72 20  73484.5).)^.For 
17160 64 61 74 65 73 20 6f 75 74 73 69 64 65 20 74 68  dates outside th
17170 61 74 20 72 61 6e 67 65 2c 20 74 68 65 20 72 65  at range, the re
17180 73 75 6c 74 73 20 6f 66 20 74 68 65 73 65 0a 66  sults of these.f
17190 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 75 6e 64  unctions are und
171a0 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  efined.</p>..<p>
171b0 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f 77  Non-Vista Window
171c0 73 20 70 6c 61 74 66 6f 72 6d 73 20 6f 6e 6c 79  s platforms only
171d0 20 73 75 70 70 6f 72 74 20 6f 6e 65 20 73 65 74   support one set
171e0 20 6f 66 20 44 53 54 20 72 75 6c 65 73 2e 20 0a   of DST rules. .
171f0 56 69 73 74 61 20 6f 6e 6c 79 20 73 75 70 70 6f  Vista only suppo
17200 72 74 73 20 74 77 6f 2e 20 54 68 65 72 65 66 6f  rts two. Therefo
17210 72 65 2c 20 6f 6e 20 74 68 65 73 65 20 70 6c 61  re, on these pla
17220 74 66 6f 72 6d 73 2c 20 0a 68 69 73 74 6f 72 69  tforms, .histori
17230 63 61 6c 20 44 53 54 20 63 61 6c 63 75 6c 61 74  cal DST calculat
17240 69 6f 6e 73 20 77 69 6c 6c 20 62 65 20 69 6e 63  ions will be inc
17250 6f 72 72 65 63 74 2e 20 0a 46 6f 72 20 65 78 61  orrect. .For exa
17260 6d 70 6c 65 2c 20 69 6e 20 74 68 65 20 55 53 2c  mple, in the US,
17270 20 69 6e 20 32 30 30 37 20 74 68 65 20 44 53 54   in 2007 the DST
17280 20 72 75 6c 65 73 20 63 68 61 6e 67 65 64 2e 20   rules changed. 
17290 0a 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f  .Non-Vista Windo
172a0 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 61 70 70  ws platforms app
172b0 6c 79 20 74 68 65 20 6e 65 77 20 32 30 30 37 20  ly the new 2007 
172c0 44 53 54 20 72 75 6c 65 73 20 0a 74 6f 20 61 6c  DST rules .to al
172d0 6c 20 70 72 65 76 69 6f 75 73 20 79 65 61 72 73  l previous years
172e0 20 61 73 20 77 65 6c 6c 2e 20 56 69 73 74 61 20   as well. Vista 
172f0 64 6f 65 73 20 73 6f 6d 65 77 68 61 74 20 62 65  does somewhat be
17300 74 74 65 72 0a 67 65 74 74 69 6e 67 20 72 65 73  tter.getting res
17310 75 6c 74 73 20 63 6f 72 72 65 63 74 20 62 61 63  ults correct bac
17320 6b 20 74 6f 20 31 39 38 36 2c 20 77 68 65 6e 20  k to 1986, when 
17330 74 68 65 20 72 75 6c 65 73 20 77 65 72 65 20 61  the rules were a
17340 6c 73 6f 20 63 68 61 6e 67 65 64 2e 3c 2f 70 3e  lso changed.</p>
17350 0a 0a 3c 70 3e 41 6c 6c 20 69 6e 74 65 72 6e 61  ..<p>All interna
17360 6c 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20 61  l computations a
17370 73 73 75 6d 65 20 74 68 65 20 0a 5b 68 74 74 70  ssume the .[http
17380 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e  ://en.wikipedia.
17390 6f 72 67 2f 77 69 6b 69 2f 47 72 65 67 6f 72 69  org/wiki/Gregori
173a0 61 6e 5f 63 61 6c 65 6e 64 61 72 20 7c 20 47 72  an_calendar | Gr
173b0 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72  egorian calendar
173c0 5d 0a 73 79 73 74 65 6d 2e 20 20 49 74 20 69 73  ].system.  It is
173d0 20 61 6c 73 6f 20 61 73 73 75 6d 65 64 20 74 68   also assumed th
173e0 61 74 20 65 76 65 72 79 0a 64 61 79 20 69 73 20  at every.day is 
173f0 65 78 61 63 74 6c 79 20 38 36 34 30 30 20 73 65  exactly 86400 se
17400 63 6f 6e 64 73 20 69 6e 20 64 75 72 61 74 69 6f  conds in duratio
17410 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  n.</p>..<tcl>.##
17420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17430 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17440 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17450 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17460 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
17470 74 69 6f 6e 20 7b 41 67 67 72 65 67 61 74 65 20  tion {Aggregate 
17480 46 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67 66 75  Functions} aggfu
17490 6e 63 20 7b 2a 61 67 67 66 75 6e 63 7d 0a 3c 2f  nc {*aggfunc}.</
174a0 74 63 6c 3e 0a 0a 3c 70 3e 0a 54 68 65 20 61 67  tcl>..<p>.The ag
174b0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
174c0 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72  s shown below ar
174d0 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64  e available by d
174e0 65 66 61 75 6c 74 2e 20 20 41 64 64 69 74 69 6f  efault.  Additio
174f0 6e 61 6c 0a 61 67 67 72 65 67 61 74 65 20 66 75  nal.aggregate fu
17500 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e 20  nctions written 
17510 69 6e 20 43 20 6d 61 79 20 62 65 20 61 64 64 65  in C may be adde
17520 64 20 75 73 69 6e 67 20 74 68 65 20 0a 5b 73 71  d using the .[sq
17530 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
17540 63 74 69 6f 6e 28 29 5d 3c 2f 61 3e 0a 41 50 49  ction()]</a>.API
17550 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 49 6e 20 61  .</p>..<p>.^In a
17560 6e 79 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ny aggregate fun
17570 63 74 69 6f 6e 20 74 68 61 74 20 74 61 6b 65 73  ction that takes
17580 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65   a single argume
17590 6e 74 2c 20 74 68 61 74 20 61 72 67 75 6d 65 6e  nt, that argumen
175a0 74 0a 63 61 6e 20 62 65 20 70 72 65 63 65 64 65  t.can be precede
175b0 64 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64  d by the keyword
175c0 20 44 49 53 54 49 4e 43 54 2e 20 20 5e 49 6e 20   DISTINCT.  ^In 
175d0 73 75 63 68 20 63 61 73 65 73 2c 20 64 75 70 6c  such cases, dupl
175e0 69 63 61 74 65 0a 65 6c 65 6d 65 6e 74 73 20 61  icate.elements a
175f0 72 65 20 66 69 6c 74 65 72 65 64 20 62 65 66 6f  re filtered befo
17600 72 65 20 62 65 69 6e 67 20 70 61 73 73 65 64 20  re being passed 
17610 69 6e 74 6f 20 74 68 65 20 61 67 67 72 65 67 61  into the aggrega
17620 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 5e 46 6f  te function..^Fo
17630 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 66  r example, the f
17640 75 6e 63 74 69 6f 6e 20 22 63 6f 75 6e 74 28 64  unction "count(d
17650 69 73 74 69 6e 63 74 20 58 29 22 20 77 69 6c 6c  istinct X)" will
17660 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
17670 65 72 0a 6f 66 20 64 69 73 74 69 6e 63 74 20 76  er.of distinct v
17680 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 20  alues of column 
17690 58 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65  X instead of the
176a0 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
176b0 20 6e 6f 6e 2d 6e 75 6c 6c 0a 76 61 6c 75 65 73   non-null.values
176c0 20 69 6e 20 63 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f   in column X..</
176d0 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  p>..<table borde
176e0 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  r=0 cellpadding=
176f0 31 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64 65  10>.<tcl>.funcde
17700 66 20 7b 61 76 67 28 58 29 7d 20 7b 2a 61 76 67  f {avg(X)} {*avg
17710 20 7b 61 76 67 28 29 20 61 67 67 72 65 67 61 74   {avg() aggregat
17720 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20  e function}} {. 
17730 20 5e 54 68 65 20 61 76 67 28 29 20 66 75 6e 63   ^The avg() func
17740 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74  tion.  returns t
17750 68 65 20 61 76 65 72 61 67 65 20 76 61 6c 75 65  he average value
17760 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c   of all non-NULL
17770 20 3c 69 3e 58 3c 2f 69 3e 20 77 69 74 68 69 6e   <i>X</i> within
17780 20 61 0a 20 20 67 72 6f 75 70 2e 20 20 5e 53 74   a.  group.  ^St
17790 72 69 6e 67 20 61 6e 64 20 42 4c 4f 42 20 76 61  ring and BLOB va
177a0 6c 75 65 73 20 74 68 61 74 20 64 6f 20 6e 6f 74  lues that do not
177b0 20 6c 6f 6f 6b 20 6c 69 6b 65 20 6e 75 6d 62 65   look like numbe
177c0 72 73 20 61 72 65 0a 20 20 69 6e 74 65 72 70 72  rs are.  interpr
177d0 65 74 65 64 20 61 73 20 30 2e 0a 20 20 5e 54 68  eted as 0..  ^Th
177e0 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67 28  e result of avg(
177f0 29 20 69 73 20 61 6c 77 61 79 73 20 61 20 66 6c  ) is always a fl
17800 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
17810 75 65 20 61 73 20 6c 6f 6e 67 20 61 73 0a 20 20  ue as long as.  
17820 61 74 20 74 68 65 72 65 20 69 73 20 61 74 20 6c  at there is at l
17830 65 61 73 74 20 6f 6e 65 20 6e 6f 6e 2d 4e 55 4c  east one non-NUL
17840 4c 20 69 6e 70 75 74 20 65 76 65 6e 20 69 66 20  L input even if 
17850 61 6c 6c 0a 20 20 69 6e 70 75 74 73 20 61 72 65  all.  inputs are
17860 20 69 6e 74 65 67 65 72 73 2e 20 20 5e 54 68 65   integers.  ^The
17870 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67 28 29   result of avg()
17880 20 69 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64 20   is NULL if and 
17890 6f 6e 6c 79 20 69 66 0a 20 20 74 68 65 72 65 20  only if.  there 
178a0 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20  are no non-NULL 
178b0 69 6e 70 75 74 73 2e 20 20 0a 7d 0a 0a 66 75 6e  inputs.  .}..fun
178c0 63 64 65 66 20 7b 63 6f 75 6e 74 28 58 29 20 63  cdef {count(X) c
178d0 6f 75 6e 74 28 2a 29 7d 20 7b 2a 63 6f 75 6e 74  ount(*)} {*count
178e0 20 7b 63 6f 75 6e 74 28 29 20 61 67 67 72 65 67   {count() aggreg
178f0 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b  ate function}} {
17900 0a 20 20 5e 54 68 65 20 63 6f 75 6e 74 28 58 29  .  ^The count(X)
17910 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
17920 73 0a 20 20 61 20 63 6f 75 6e 74 20 6f 66 20 74  s.  a count of t
17930 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d  he number of tim
17940 65 73 0a 20 20 74 68 61 74 20 3c 69 3e 58 3c 2f  es.  that <i>X</
17950 69 3e 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 69  i> is not NULL i
17960 6e 20 61 20 67 72 6f 75 70 2e 20 20 5e 54 68 65  n a group.  ^The
17970 20 63 6f 75 6e 74 28 2a 29 20 66 75 6e 63 74 69   count(*) functi
17980 6f 6e 0a 20 20 28 77 69 74 68 20 6e 6f 20 61 72  on.  (with no ar
17990 67 75 6d 65 6e 74 73 29 20 72 65 74 75 72 6e 73  guments) returns
179a0 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
179b0 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
179c0 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64   group..}..funcd
179d0 65 66 20 7b 67 72 6f 75 70 5f 63 6f 6e 63 61 74  ef {group_concat
179e0 28 58 29 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74  (X) group_concat
179f0 28 58 2c 59 29 7d 20 7b 0a 20 20 2a 67 72 6f 75  (X,Y)} {.  *grou
17a00 70 5f 63 6f 6e 63 61 74 20 7b 67 72 6f 75 70 5f  p_concat {group_
17a10 63 6f 6e 63 61 74 28 29 20 61 67 67 72 65 67 61  concat() aggrega
17a20 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b  te function}.} {
17a30 0a 20 20 5e 54 68 65 20 67 72 6f 75 70 5f 63 6f  .  ^The group_co
17a40 6e 63 61 74 28 29 20 66 75 6e 63 74 69 6f 6e 20  ncat() function 
17a50 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74 72 69  returns.  a stri
17a60 6e 67 20 77 68 69 63 68 20 69 73 20 74 68 65 20  ng which is the 
17a70 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f 66  concatenation of
17a80 0a 20 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20  .  all non-NULL 
17a90 76 61 6c 75 65 73 20 6f 66 20 3c 69 3e 58 3c 2f  values of <i>X</
17aa0 69 3e 2e 20 20 5e 49 66 20 70 61 72 61 6d 65 74  i>.  ^If paramet
17ab0 65 72 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 70  er <i>Y</i> is p
17ac0 72 65 73 65 6e 74 20 74 68 65 6e 0a 20 20 69 74  resent then.  it
17ad0 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20   is used as the 
17ae0 73 65 70 61 72 61 74 6f 72 0a 20 20 62 65 74 77  separator.  betw
17af0 65 65 6e 20 69 6e 73 74 61 6e 63 65 73 20 6f 66  een instances of
17b00 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 41 20 63   <i>X</i>.  ^A c
17b10 6f 6d 6d 61 20 28 22 2c 22 29 20 69 73 20 75 73  omma (",") is us
17b20 65 64 20 61 73 20 74 68 65 20 73 65 70 61 72 61  ed as the separa
17b30 74 6f 72 0a 20 20 69 66 20 3c 69 3e 59 3c 2f 69  tor.  if <i>Y</i
17b40 3e 20 69 73 20 6f 6d 69 74 74 65 64 2e 20 20 54  > is omitted.  T
17b50 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65 20  he order of the 
17b60 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 65 6c 65  concatenated ele
17b70 6d 65 6e 74 73 20 69 73 0a 20 20 61 72 62 69 74  ments is.  arbit
17b80 72 61 72 79 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  rary..}..funcdef
17b90 20 7b 6d 61 78 28 58 29 7d 20 7b 2a 6d 61 78 41   {max(X)} {*maxA
17ba0 67 67 46 75 6e 63 20 2a 61 67 67 5f 6d 61 78 20  ggFunc *agg_max 
17bb0 7b 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65  {max() aggregate
17bc0 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20   function}} {.  
17bd0 5e 54 68 65 20 6d 61 78 28 29 20 61 67 67 72 65  ^The max() aggre
17be0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20  gate function.  
17bf0 72 65 74 75 72 6e 73 20 74 68 65 20 6d 61 78 69  returns the maxi
17c00 6d 75 6d 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c  mum value of all
17c10 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67   values in the g
17c20 72 6f 75 70 2e 0a 20 20 5e 54 68 65 20 6d 61 78  roup..  ^The max
17c30 69 6d 75 6d 20 76 61 6c 75 65 20 69 73 20 74 68  imum value is th
17c40 65 20 76 61 6c 75 65 20 74 68 61 74 20 77 6f 75  e value that wou
17c50 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64 20 6c  ld be returned l
17c60 61 73 74 20 69 6e 20 61 6e 0a 20 20 4f 52 44 45  ast in an.  ORDE
17c70 52 20 42 59 20 6f 6e 20 74 68 65 20 73 61 6d 65  R BY on the same
17c80 20 63 6f 6c 75 6d 6e 2e 20 20 5e 41 67 67 72 65   column.  ^Aggre
17c90 67 61 74 65 20 6d 61 78 28 29 20 72 65 74 75 72  gate max() retur
17ca0 6e 73 20 4e 55 4c 4c 20 0a 20 20 69 66 20 61 6e  ns NULL .  if an
17cb0 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 72 65 20  d only if there 
17cc0 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20  are no non-NULL 
17cd0 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72  values in the gr
17ce0 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  oup..}..funcdef 
17cf0 7b 6d 69 6e 28 58 29 7d 20 7b 2a 6d 69 6e 41 67  {min(X)} {*minAg
17d00 67 46 75 6e 63 20 2a 61 67 67 5f 6d 69 6e 20 7b  gFunc *agg_min {
17d10 6d 69 6e 28 29 20 61 67 67 72 65 67 61 74 65 20  min() aggregate 
17d20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e  function}} {.  ^
17d30 54 68 65 20 6d 69 6e 28 29 20 61 67 67 72 65 67  The min() aggreg
17d40 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72  ate function.  r
17d50 65 74 75 72 6e 73 20 74 68 65 20 6d 69 6e 69 6d  eturns the minim
17d60 75 6d 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75  um non-NULL valu
17d70 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20  e of all values 
17d80 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20  in the group..  
17d90 5e 54 68 65 20 6d 69 6e 69 6d 75 6d 20 76 61 6c  ^The minimum val
17da0 75 65 20 69 73 20 74 68 65 20 66 69 72 73 74 20  ue is the first 
17db0 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 74  non-NULL value t
17dc0 68 61 74 20 77 6f 75 6c 64 20 61 70 70 65 61 72  hat would appear
17dd0 0a 20 20 69 6e 20 61 6e 20 4f 52 44 45 52 20 42  .  in an ORDER B
17de0 59 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  Y of the column.
17df0 0a 20 20 5e 41 67 67 72 65 67 61 74 65 20 6d 69  .  ^Aggregate mi
17e00 6e 28 29 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c  n() returns NULL
17e10 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20   if and only if 
17e20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e  there are no non
17e30 2d 4e 55 4c 4c 0a 20 20 76 61 6c 75 65 73 20 69  -NULL.  values i
17e40 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a  n the group..}..
17e50 66 75 6e 63 64 65 66 20 7b 73 75 6d 28 58 29 20  funcdef {sum(X) 
17e60 74 6f 74 61 6c 28 58 29 7d 20 7b 0a 20 20 2a 73  total(X)} {.  *s
17e70 75 6d 46 75 6e 63 20 2a 73 75 6d 20 2a 74 6f 74  umFunc *sum *tot
17e80 61 6c 0a 20 20 7b 73 75 6d 28 29 20 61 67 67 72  al.  {sum() aggr
17e90 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a  egate function}.
17ea0 20 20 7b 74 6f 74 61 6c 28 29 20 61 67 67 72 65    {total() aggre
17eb0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d  gate function}.}
17ec0 20 7b 0a 20 20 5e 54 68 65 20 73 75 6d 28 29 20   {.  ^The sum() 
17ed0 61 6e 64 20 74 6f 74 61 6c 28 29 20 61 67 67 72  and total() aggr
17ee0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a  egate functions.
17ef0 20 20 72 65 74 75 72 6e 20 73 75 6d 20 6f 66 20    return sum of 
17f00 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c  all non-NULL val
17f10 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ues in the group
17f20 2e 0a 20 20 5e 49 66 20 74 68 65 72 65 20 61 72  ..  ^If there ar
17f30 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e  e no non-NULL in
17f40 70 75 74 20 72 6f 77 73 20 74 68 65 6e 20 73 75  put rows then su
17f50 6d 28 29 20 72 65 74 75 72 6e 73 0a 20 20 4e 55  m() returns.  NU
17f60 4c 4c 20 62 75 74 20 74 6f 74 61 6c 28 29 20 72  LL but total() r
17f70 65 74 75 72 6e 73 20 30 2e 30 2e 0a 20 20 4e 55  eturns 0.0..  NU
17f80 4c 4c 20 69 73 20 6e 6f 74 20 6e 6f 72 6d 61 6c  LL is not normal
17f90 6c 79 20 61 20 68 65 6c 70 66 75 6c 20 72 65 73  ly a helpful res
17fa0 75 6c 74 20 66 6f 72 20 74 68 65 20 73 75 6d 20  ult for the sum 
17fb0 6f 66 20 6e 6f 20 72 6f 77 73 0a 20 20 62 75 74  of no rows.  but
17fc0 20 74 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72   the SQL standar
17fd0 64 20 72 65 71 75 69 72 65 73 20 69 74 20 61 6e  d requires it an
17fe0 64 20 6d 6f 73 74 20 6f 74 68 65 72 0a 20 20 53  d most other.  S
17ff0 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  QL database engi
18000 6e 65 73 20 69 6d 70 6c 65 6d 65 6e 74 20 73 75  nes implement su
18010 6d 28 29 20 74 68 61 74 20 77 61 79 20 73 6f 20  m() that way so 
18020 53 51 4c 69 74 65 20 64 6f 65 73 20 69 74 20 69  SQLite does it i
18030 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 77 61 79  n the.  same way
18040 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 20   in order to be 
18050 63 6f 6d 70 61 74 69 62 6c 65 2e 20 20 20 54 68  compatible.   Th
18060 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 74  e non-standard t
18070 6f 74 61 6c 28 29 20 66 75 6e 63 74 69 6f 6e 0a  otal() function.
18080 20 20 69 73 20 70 72 6f 76 69 64 65 64 20 61 73    is provided as
18090 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 77 61   a convenient wa
180a0 79 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64  y to work around
180b0 20 74 68 69 73 20 64 65 73 69 67 6e 20 70 72 6f   this design pro
180c0 62 6c 65 6d 0a 20 20 69 6e 20 74 68 65 20 53 51  blem.  in the SQ
180d0 4c 20 6c 61 6e 67 75 61 67 65 2e 3c 2f 70 3e 0a  L language.</p>.
180e0 0a 20 20 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c  .  <p>^The resul
180f0 74 20 6f 66 20 74 6f 74 61 6c 28 29 20 69 73 20  t of total() is 
18100 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69 6e  always a floatin
18110 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 20  g point value.. 
18120 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20   ^The result of 
18130 73 75 6d 28 29 20 69 73 20 61 6e 20 69 6e 74 65  sum() is an inte
18140 67 65 72 20 76 61 6c 75 65 20 69 66 20 61 6c 6c  ger value if all
18150 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73   non-NULL inputs
18160 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e 0a 20   are integers.. 
18170 20 5e 49 66 20 61 6e 79 20 69 6e 70 75 74 20 74   ^If any input t
18180 6f 20 73 75 6d 28 29 20 69 73 20 6e 65 69 74 68  o sum() is neith
18190 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72  er an integer or
181a0 20 61 20 4e 55 4c 4c 0a 20 20 74 68 65 6e 20 73   a NULL.  then s
181b0 75 6d 28 29 20 72 65 74 75 72 6e 73 20 61 20 66  um() returns a f
181c0 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
181d0 6c 75 65 0a 20 20 77 68 69 63 68 20 6d 69 67 68  lue.  which migh
181e0 74 20 62 65 20 61 6e 20 61 70 70 72 6f 78 69 6d  t be an approxim
181f0 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 74 72 75  ation to the tru
18200 65 20 73 75 6d 2e 3c 2f 70 3e 0a 0a 20 20 3c 70  e sum.</p>..  <p
18210 3e 5e 53 75 6d 28 29 20 77 69 6c 6c 20 74 68 72  >^Sum() will thr
18220 6f 77 20 61 6e 20 22 69 6e 74 65 67 65 72 20 6f  ow an "integer o
18230 76 65 72 66 6c 6f 77 22 20 65 78 63 65 70 74 69  verflow" excepti
18240 6f 6e 20 69 66 20 61 6c 6c 20 69 6e 70 75 74 73  on if all inputs
18250 0a 20 20 61 72 65 20 69 6e 74 65 67 65 72 73 20  .  are integers 
18260 6f 72 20 4e 55 4c 4c 0a 20 20 61 6e 64 20 61 6e  or NULL.  and an
18270 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f   integer overflo
18280 77 20 6f 63 63 75 72 73 20 61 74 20 61 6e 79 20  w occurs at any 
18290 70 6f 69 6e 74 20 64 75 72 69 6e 67 20 74 68 65  point during the
182a0 20 63 6f 6d 70 75 74 61 74 69 6f 6e 2e 0a 20 20   computation..  
182b0 5e 54 6f 74 61 6c 28 29 20 6e 65 76 65 72 20 74  ^Total() never t
182c0 68 72 6f 77 73 20 61 6e 20 69 6e 74 65 67 65 72  hrows an integer
182d0 20 6f 76 65 72 66 6c 6f 77 2e 0a 7d 0a 3c 2f 74   overflow..}.</t
182e0 63 6c 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 74  cl>.</table>..<t
182f0 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
18300 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18310 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18320 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18330 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18340 23 23 0a 53 65 63 74 69 6f 6e 20 49 4e 53 45 52  ##.Section INSER
18350 54 20 69 6e 73 65 72 74 20 7b 49 4e 53 45 52 54  T insert {INSERT
18360 20 2a 49 4e 53 45 52 54 73 7d 0a 0a 42 75 62 62   *INSERTs}..Bubb
18370 6c 65 44 69 61 67 72 61 6d 20 69 6e 73 65 72 74  leDiagram insert
18380 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a  -stmt 1.</tcl>..
18390 3c 70 3e 54 68 65 20 49 4e 53 45 52 54 20 73 74  <p>The INSERT st
183a0 61 74 65 6d 65 6e 74 20 63 6f 6d 65 73 20 69 6e  atement comes in
183b0 20 74 68 72 65 65 20 62 61 73 69 63 20 66 6f 72   three basic for
183c0 6d 73 2e 20 20 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c  ms.  .<ul>.<li><
183d0 70 3e 5e 54 68 65 20 66 69 72 73 74 20 66 6f 72  p>^The first for
183e0 6d 20 28 77 69 74 68 20 74 68 65 20 22 56 41 4c  m (with the "VAL
183f0 55 45 53 22 20 6b 65 79 77 6f 72 64 29 20 63 72  UES" keyword) cr
18400 65 61 74 65 73 20 61 20 73 69 6e 67 6c 65 20 6e  eates a single n
18410 65 77 20 72 6f 77 20 69 6e 0a 61 6e 20 65 78 69  ew row in.an exi
18420 73 74 69 6e 67 20 74 61 62 6c 65 2e 20 5e 49 66  sting table. ^If
18430 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20   no column-list 
18440 69 73 20 73 70 65 63 69 66 69 65 64 20 74 68 65  is specified the
18450 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a  n the number of.
18460 76 61 6c 75 65 73 20 6d 75 73 74 20 62 65 20 74  values must be t
18470 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e  he same as the n
18480 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
18490 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 5e   in the table. ^
184a0 49 6e 20 74 68 69 73 20 63 61 73 65 0a 74 68 65  In this case.the
184b0 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c 75   result of evalu
184c0 74 69 6e 67 20 74 68 65 20 6c 65 66 74 2d 6d 6f  ting the left-mo
184d0 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  st expression in
184e0 20 74 68 65 20 56 41 4c 55 45 53 20 6c 69 73 74   the VALUES list
184f0 20 69 73 20 0a 69 6e 73 65 72 74 65 64 20 69 6e   is .inserted in
18500 74 6f 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  to the left-most
18510 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e   column of the n
18520 65 77 20 72 6f 77 2c 20 61 6e 64 20 73 6f 20 6f  ew row, and so o
18530 6e 2e 20 5e 49 66 20 61 0a 63 6f 6c 75 6d 6e 2d  n. ^If a.column-
18540 6c 69 73 74 20 69 73 20 73 70 65 63 69 66 69 65  list is specifie
18550 64 2c 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62  d, then the numb
18560 65 72 20 6f 66 20 76 61 6c 75 65 73 20 6d 75 73  er of values mus
18570 74 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d 62  t match the numb
18580 65 72 20 6f 66 0a 73 70 65 63 69 66 69 65 64 20  er of.specified 
18590 63 6f 6c 75 6d 6e 73 2e 20 5e 45 61 63 68 20 6f  columns. ^Each o
185a0 66 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 75  f the named colu
185b0 6d 6e 73 20 6f 66 20 74 68 65 20 6e 65 77 20 72  mns of the new r
185c0 6f 77 20 69 73 20 70 6f 70 75 6c 61 74 65 64 0a  ow is populated.
185d0 77 69 74 68 20 74 68 65 20 72 65 73 75 6c 74 73  with the results
185e0 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74   of evaluating t
185f0 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
18600 20 56 41 4c 55 45 53 20 65 78 70 72 65 73 73 69   VALUES expressi
18610 6f 6e 2e 20 5e 54 61 62 6c 65 0a 63 6f 6c 75 6d  on. ^Table.colum
18620 6e 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 61  ns that do not a
18630 70 70 65 61 72 20 69 6e 20 74 68 65 20 63 6f 6c  ppear in the col
18640 75 6d 6e 20 6c 69 73 74 20 61 72 65 20 70 6f 70  umn list are pop
18650 75 6c 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ulated with the 
18660 64 65 66 61 75 6c 74 0a 63 6f 6c 75 6d 6e 20 76  default.column v
18670 61 6c 75 65 20 28 73 70 65 63 69 66 69 65 64 20  alue (specified 
18680 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 43  as part of the C
18690 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74  REATE TABLE stat
186a0 65 6d 65 6e 74 29 2c 20 6f 72 20 77 69 74 68 20  ement), or with 
186b0 4e 55 4c 4c 20 69 66 0a 6e 6f 20 64 65 66 61 75  NULL if.no defau
186c0 6c 74 20 76 61 6c 75 65 20 69 73 20 73 70 65 63  lt value is spec
186d0 69 66 69 65 64 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54  ified...<li><p>T
186e0 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f  he second form o
186f0 66 20 74 68 65 20 49 4e 53 45 52 54 20 73 74 61  f the INSERT sta
18700 74 65 6d 65 6e 74 20 63 6f 6e 74 61 69 6e 73 20  tement contains 
18710 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
18720 6e 74 0a 69 6e 73 74 65 61 64 20 6f 66 20 61 20  nt.instead of a 
18730 56 41 4c 55 45 53 20 63 6c 61 75 73 65 2e 20 5e  VALUES clause. ^
18740 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20 69  A new entry is i
18750 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nserted into the
18760 20 74 61 62 6c 65 20 66 6f 72 20 65 61 63 68 0a   table for each.
18770 72 6f 77 20 6f 66 20 64 61 74 61 20 72 65 74 75  row of data retu
18780 72 6e 65 64 20 62 79 20 65 78 65 63 75 74 69 6e  rned by executin
18790 67 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  g the SELECT sta
187a0 74 65 6d 65 6e 74 2e 20 5e 49 66 20 61 20 63 6f  tement. ^If a co
187b0 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 0a 73 70 65  lumn-list is.spe
187c0 63 69 66 69 65 64 2c 20 74 68 65 20 6e 75 6d 62  cified, the numb
187d0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
187e0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
187f0 68 65 20 53 45 4c 45 43 54 20 6d 75 73 74 20 62  he SELECT must b
18800 65 20 74 68 65 20 73 61 6d 65 0a 61 73 20 74 68  e the same.as th
18810 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 6d  e number of item
18820 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2d  s in the column-
18830 6c 69 73 74 2e 20 5e 4f 74 68 65 72 77 69 73 65  list. ^Otherwise
18840 2c 20 69 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c  , if no column-l
18850 69 73 74 20 69 73 0a 73 70 65 63 69 66 69 65 64  ist is.specified
18860 2c 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  , the number of 
18870 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72  columns in the r
18880 65 73 75 6c 74 20 6f 66 20 74 68 65 20 53 45 4c  esult of the SEL
18890 45 43 54 20 6d 75 73 74 20 62 65 20 74 68 65 20  ECT must be the 
188a0 73 61 6d 65 0a 61 73 20 74 68 65 20 6e 75 6d 62  same.as the numb
188b0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
188c0 20 74 68 65 20 74 61 62 6c 65 2e 20 5e 41 6e 79   the table. ^Any
188d0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
188e0 74 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 63 6f 6d  t, including.com
188f0 70 6f 75 6e 64 20 53 45 4c 45 43 54 73 20 61 6e  pound SELECTs an
18900 64 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  d SELECT stateme
18910 6e 74 73 20 77 69 74 68 20 4f 52 44 45 52 20 42  nts with ORDER B
18920 59 20 61 6e 64 2f 6f 72 20 4c 49 4d 49 54 20 63  Y and/or LIMIT c
18930 6c 61 75 73 65 73 2c 20 0a 6d 61 79 20 62 65 20  lauses, .may be 
18940 75 73 65 64 20 69 6e 20 61 6e 20 49 4e 53 45 52  used in an INSER
18950 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 66 20 74  T statement of t
18960 68 69 73 20 66 6f 72 6d 2e 0a 0a 3c 6c 69 3e 3c  his form...<li><
18970 70 3e 54 68 65 20 74 68 69 72 64 20 66 6f 72 6d  p>The third form
18980 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74   of an INSERT st
18990 61 74 65 6d 65 6e 74 20 69 73 20 77 69 74 68 20  atement is with 
189a0 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 2e 0a  DEFAULT VALUES..
189b0 5e 28 54 68 65 20 49 4e 53 45 52 54 20 2e 2e 2e  ^(The INSERT ...
189c0 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 20   DEFAULT VALUES 
189d0 73 74 61 74 65 6d 65 6e 74 20 69 6e 73 65 72 74  statement insert
189e0 73 20 61 20 73 69 6e 67 6c 65 20 6e 65 77 20 72  s a single new r
189f0 6f 77 20 69 6e 74 6f 20 74 68 65 0a 6e 61 6d 65  ow into the.name
18a00 64 20 74 61 62 6c 65 2e 29 5e 20 5e 45 61 63 68  d table.)^ ^Each
18a10 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e   column of the n
18a20 65 77 20 72 6f 77 20 69 73 20 70 6f 70 75 6c 61  ew row is popula
18a30 74 65 64 20 77 69 74 68 20 69 74 73 20 64 65 66  ted with its def
18a40 61 75 6c 74 20 76 61 6c 75 65 2c 0a 6f 72 20 77  ault value,.or w
18a50 69 74 68 20 61 20 4e 55 4c 4c 20 69 66 20 6e 6f  ith a NULL if no
18a60 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69   default value i
18a70 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  s specified as p
18a80 61 72 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  art of the colum
18a90 6e 0a 64 65 66 69 6e 69 74 69 6f 6e 20 69 6e 20  n.definition in 
18aa0 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45  the CREATE TABLE
18ab0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 2f 75   statement...</u
18ac0 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69  l>..<p>^The opti
18ad0 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c  onal conflict-cl
18ae0 61 75 73 65 20 61 6c 6c 6f 77 73 20 74 68 65 20  ause allows the 
18af0 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 6f 66  specification of
18b00 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 0a   an alternative.
18b10 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c  constraint confl
18b20 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ict resolution a
18b30 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20  lgorithm to use 
18b40 64 75 72 69 6e 67 20 74 68 69 73 20 6f 6e 65 20  during this one 
18b50 49 4e 53 45 52 54 20 63 6f 6d 6d 61 6e 64 2e 0a  INSERT command..
18b60 53 65 65 20 74 68 65 20 73 65 63 74 69 6f 6e 20  See the section 
18b70 74 69 74 6c 65 64 0a 5b 4f 4e 20 43 4f 4e 46 4c  titled.[ON CONFL
18b80 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f  ICT] for additio
18b90 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
18ba0 0a 5e 46 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c  .^For compatibil
18bb0 69 74 79 20 77 69 74 68 20 4d 79 53 51 4c 2c 20  ity with MySQL, 
18bc0 74 68 65 20 70 61 72 73 65 72 20 61 6c 6c 6f 77  the parser allow
18bd0 73 20 74 68 65 20 75 73 65 20 6f 66 20 74 68 65  s the use of the
18be0 0a 73 69 6e 67 6c 65 20 6b 65 79 77 6f 72 64 20  .single keyword 
18bf0 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f 72 65  <a href="lang_re
18c00 70 6c 61 63 65 2e 68 74 6d 6c 22 3e 52 45 50 4c  place.html">REPL
18c10 41 43 45 3c 2f 61 3e 20 61 73 20 61 6e 20 0a 61  ACE</a> as an .a
18c20 6c 69 61 73 20 66 6f 72 20 22 49 4e 53 45 52 54  lias for "INSERT
18c30 20 4f 52 20 52 45 50 4c 41 43 45 22 2e 0a 0a 3c   OR REPLACE"...<
18c40 70 3e 5e 28 54 68 65 20 6f 70 74 69 6f 6e 61 6c  p>^(The optional
18c50 20 22 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61   "<i>database-na
18c60 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 22 20  me</i><b>.</b>" 
18c70 70 72 65 66 69 78 20 6f 6e 20 74 68 65 20 3c 69  prefix on the <i
18c80 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 0a  >table-name</i>.
18c90 69 73 20 73 75 70 70 6f 72 74 20 66 6f 72 20 74  is support for t
18ca0 6f 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54 20  op-level INSERT 
18cb0 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 2e  statements only.
18cc0 29 5e 20 20 5e 54 68 65 20 74 61 62 6c 65 20 6e  )^  ^The table n
18cd0 61 6d 65 20 6d 75 73 74 20 62 65 0a 75 6e 71 75  ame must be.unqu
18ce0 61 6c 69 66 69 65 64 20 66 6f 72 20 49 4e 53 45  alified for INSE
18cf0 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  RT statements th
18d00 61 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20  at occur within 
18d10 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d  [CREATE TRIGGER]
18d20 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e 53 69   statements..^Si
18d30 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 22 44 45  milarly, the "DE
18d40 46 41 55 4c 54 20 56 41 4c 55 45 53 22 20 66 6f  FAULT VALUES" fo
18d50 72 6d 20 6f 66 20 74 68 65 20 49 4e 53 45 52 54  rm of the INSERT
18d60 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 75   statement is su
18d70 70 70 6f 72 74 65 64 20 66 6f 72 0a 74 6f 70 2d  pported for.top-
18d80 6c 65 76 65 6c 20 49 4e 53 45 52 54 20 73 74 61  level INSERT sta
18d90 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 20 61 6e 64  tements only and
18da0 20 6e 6f 74 20 66 6f 72 20 49 4e 53 45 52 54 20   not for INSERT 
18db0 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
18dc0 6e 0a 74 72 69 67 67 65 72 73 2e 0a 3c 70 3e 0a  n.triggers..<p>.
18dd0 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
18de0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18df0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18e00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18e10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18e20 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 4f  #####.Section {O
18e30 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
18e40 65 7d 20 63 6f 6e 66 6c 69 63 74 20 7b 7b 63 6f  e} conflict {{co
18e50 6e 66 6c 69 63 74 20 63 6c 61 75 73 65 7d 20 7b  nflict clause} {
18e60 4f 4e 20 43 4f 4e 46 4c 49 43 54 7d 7d 0a 0a 42  ON CONFLICT}}..B
18e70 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6e  ubbleDiagram con
18e80 66 6c 69 63 74 2d 63 6c 61 75 73 65 0a 3c 2f 74  flict-clause.</t
18e90 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43  cl>..<p>The ON C
18ea0 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
18eb0 73 20 6e 6f 74 20 61 20 73 65 70 61 72 61 74 65  s not a separate
18ec0 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 49   SQL command.  I
18ed0 74 20 69 73 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64  t is a.non-stand
18ee0 61 72 64 20 63 6c 61 75 73 65 20 74 68 61 74 20  ard clause that 
18ef0 63 61 6e 20 61 70 70 65 61 72 20 69 6e 20 6d 61  can appear in ma
18f00 6e 79 20 6f 74 68 65 72 20 53 51 4c 20 63 6f 6d  ny other SQL com
18f10 6d 61 6e 64 73 2e 0a 49 74 20 69 73 20 67 69 76  mands..It is giv
18f20 65 6e 20 69 74 73 20 6f 77 6e 20 73 65 63 74 69  en its own secti
18f30 6f 6e 20 69 6e 20 74 68 69 73 20 64 6f 63 75 6d  on in this docum
18f40 65 6e 74 20 62 65 63 61 75 73 65 20 69 74 20 69  ent because it i
18f50 73 20 6e 6f 74 0a 70 61 72 74 20 6f 66 20 73 74  s not.part of st
18f60 61 6e 64 61 72 64 20 53 51 4c 20 61 6e 64 20 74  andard SQL and t
18f70 68 65 72 65 66 6f 72 65 20 6d 69 67 68 74 20 6e  herefore might n
18f80 6f 74 20 62 65 20 66 61 6d 69 6c 69 61 72 2e 3c  ot be familiar.<
18f90 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 79 6e  /p>..<p>^The syn
18fa0 74 61 78 20 66 6f 72 20 74 68 65 20 4f 4e 20 43  tax for the ON C
18fb0 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
18fc0 73 20 61 73 20 73 68 6f 77 6e 20 61 62 6f 76 65  s as shown above
18fd0 20 66 6f 72 0a 74 68 65 20 43 52 45 41 54 45 20   for.the CREATE 
18fe0 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 2e 20 20  TABLE command.  
18ff0 5e 46 6f 72 20 74 68 65 20 49 4e 53 45 52 54 20  ^For the INSERT 
19000 61 6e 64 0a 55 50 44 41 54 45 20 63 6f 6d 6d 61  and.UPDATE comma
19010 6e 64 73 2c 20 74 68 65 20 6b 65 79 77 6f 72 64  nds, the keyword
19020 73 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 22 20  s "ON CONFLICT" 
19030 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 20  are replaced by 
19040 22 4f 52 22 20 73 6f 20 74 68 61 74 0a 74 68 65  "OR" so that.the
19050 20 73 79 6e 74 61 78 20 72 65 61 64 73 20 6d 6f   syntax reads mo
19060 72 65 20 6e 61 74 75 72 61 6c 6c 79 2e 20 20 46  re naturally.  F
19070 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 73 74  or example, inst
19080 65 61 64 20 6f 66 0a 22 49 4e 53 45 52 54 20 4f  ead of."INSERT O
19090 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52  N CONFLICT IGNOR
190a0 45 22 20 77 65 20 68 61 76 65 20 22 49 4e 53 45  E" we have "INSE
190b0 52 54 20 4f 52 20 49 47 4e 4f 52 45 22 2e 0a 54  RT OR IGNORE"..T
190c0 68 65 20 6b 65 79 77 6f 72 64 73 20 63 68 61 6e  he keywords chan
190d0 67 65 20 62 75 74 20 74 68 65 20 6d 65 61 6e 69  ge but the meani
190e0 6e 67 20 6f 66 20 74 68 65 20 63 6c 61 75 73 65  ng of the clause
190f0 20 69 73 20 74 68 65 20 73 61 6d 65 0a 65 69 74   is the same.eit
19100 68 65 72 20 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70  her way.</p>..<p
19110 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  >The ON CONFLICT
19120 20 63 6c 61 75 73 65 20 61 70 70 6c 69 65 73 20   clause applies 
19130 74 6f 20 55 4e 49 51 55 45 2c 20 4e 4f 54 20 4e  to UNIQUE, NOT N
19140 55 4c 4c 2c 20 61 6e 64 20 43 48 45 43 4b 0a 63  ULL, and CHECK.c
19150 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6e 64 20  onstraints (and 
19160 74 6f 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  to PRIMARY KEY c
19170 6f 6e 73 74 72 61 69 6e 74 73 20 77 68 69 63 68  onstraints which
19180 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65   for the purpose
19190 73 20 0a 6f 66 20 74 68 69 73 20 73 65 63 74 69  s .of this secti
191a0 6f 6e 20 61 72 65 20 74 68 65 20 73 61 6d 65 20  on are the same 
191b0 74 68 69 6e 67 20 61 73 20 55 4e 49 51 55 45 20  thing as UNIQUE 
191c0 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 54 68  constraints)..Th
191d0 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  e ON CONFLICT al
191e0 67 6f 72 69 74 68 6d 20 64 6f 65 73 20 6e 6f 74  gorithm does not
191f0 0a 61 70 70 6c 79 20 74 6f 20 5b 46 4f 52 45 49  .apply to [FOREI
19200 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  GN KEY constrain
19210 74 73 5d 2e 0a 54 68 65 72 65 20 61 72 65 20 66  ts]..There are f
19220 69 76 65 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ive conflict res
19230 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
19240 6d 20 63 68 6f 69 63 65 73 3a 0a 52 4f 4c 4c 42  m choices:.ROLLB
19250 41 43 4b 2c 20 41 42 4f 52 54 2c 20 46 41 49 4c  ACK, ABORT, FAIL
19260 2c 20 49 47 4e 4f 52 45 2c 20 61 6e 64 20 52 45  , IGNORE, and RE
19270 50 4c 41 43 45 2e 0a 5e 54 68 65 20 64 65 66 61  PLACE..^The defa
19280 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ult conflict res
19290 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
192a0 6d 20 69 73 20 41 42 4f 52 54 2e 20 20 54 68 69  m is ABORT.  Thi
192b0 73 0a 69 73 20 77 68 61 74 20 74 68 65 79 20 6d  s.is what they m
192c0 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c  ean:</p>..<dl>.<
192d0 64 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43 4b 3c 2f  dt><b>ROLLBACK</
192e0 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20  b></dt>.<dd><p> 
192f0 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61  ^When an applica
19300 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  ble constraint v
19310 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
19320 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 72 65   the ROLLBACK.re
19330 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
19340 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63 75  hm aborts the cu
19350 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d  rrent SQL statem
19360 65 6e 74 20 77 69 74 68 0a 61 6e 20 53 51 4c 49  ent with.an SQLI
19370 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72  TE_CONSTRAINT er
19380 72 6f 72 20 61 6e 64 20 72 6f 6c 6c 73 20 62 61  ror and rolls ba
19390 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  ck the current t
193a0 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 49 66 20  ransaction..^If 
193b0 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
193c0 73 0a 61 63 74 69 76 65 20 28 6f 74 68 65 72 20  s.active (other 
193d0 74 68 61 6e 20 74 68 65 20 69 6d 70 6c 69 65 64  than the implied
193e0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 61   transaction tha
193f0 74 20 69 73 20 63 72 65 61 74 65 64 20 6f 6e 20  t is created on 
19400 65 76 65 72 79 0a 63 6f 6d 6d 61 6e 64 29 20 74  every.command) t
19410 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  hen the ROLLBACK
19420 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
19430 72 69 74 68 6d 20 77 6f 72 6b 73 20 74 68 65 20  rithm works the 
19440 73 61 6d 65 20 61 73 20 74 68 65 0a 41 42 4f 52  same as the.ABOR
19450 54 20 61 6c 67 6f 72 69 74 68 6d 2e 3c 2f 70 3e  T algorithm.</p>
19460 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 41 42  </dd>..<dt><b>AB
19470 4f 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  ORT</b></dt>.<dd
19480 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70  ><p> ^When an ap
19490 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61  plicable constra
194a0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
194b0 63 75 72 73 2c 20 74 68 65 20 41 42 4f 52 54 0a  curs, the ABORT.
194c0 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
194d0 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20  ithm aborts the 
194e0 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74  current SQL stat
194f0 65 6d 65 6e 74 0a 77 69 74 68 20 61 6e 20 53 51  ement.with an SQ
19500 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 54 20 65  LITE_CONSTRAIT e
19510 72 72 6f 72 20 61 6e 64 20 62 61 63 6b 73 20 6f  rror and backs o
19520 75 74 20 61 6e 79 20 63 68 61 6e 67 65 73 0a 6d  ut any changes.m
19530 61 64 65 20 62 79 20 74 68 65 20 63 75 72 72 65  ade by the curre
19540 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  nt SQL statement
19550 3b 20 62 75 74 20 63 68 61 6e 67 65 73 20 63 61  ; but changes ca
19560 75 73 65 64 0a 62 79 20 70 72 69 6f 72 20 53 51  used.by prior SQ
19570 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  L statements wit
19580 68 69 6e 20 74 68 65 20 73 61 6d 65 20 74 72 61  hin the same tra
19590 6e 73 61 63 74 69 6f 6e 20 61 72 65 20 70 72 65  nsaction are pre
195a0 73 65 72 76 65 64 20 61 6e 64 20 74 68 65 0a 74  served and the.t
195b0 72 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69  ransaction remai
195c0 6e 73 20 61 63 74 69 76 65 2e 0a 54 68 69 73 20  ns active..This 
195d0 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 62  is the default b
195e0 65 68 61 76 69 6f 72 20 61 6e 64 20 74 68 65 20  ehavior and the 
195f0 62 65 68 61 76 69 6f 72 20 70 72 6f 73 63 72 69  behavior proscri
19600 62 65 64 20 74 68 65 20 53 51 4c 0a 73 74 61 6e  bed the SQL.stan
19610 64 61 72 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a  dard.</p></dd>..
19620 3c 64 74 3e 3c 62 3e 46 41 49 4c 3c 2f 62 3e 3c  <dt><b>FAIL</b><
19630 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68  /dt>.<dd><p> ^Wh
19640 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65  en an applicable
19650 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
19660 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68  ation occurs, th
19670 65 20 46 41 49 4c 0a 72 65 73 6f 6c 75 74 69 6f  e FAIL.resolutio
19680 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72  n algorithm abor
19690 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 53  ts the current S
196a0 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74  QL statement wit
196b0 68 20 61 6e 0a 53 51 4c 49 54 45 5f 43 4f 4e 53  h an.SQLITE_CONS
196c0 54 52 41 49 4e 54 20 65 72 72 6f 72 2e 20 20 5e  TRAINT error.  ^
196d0 42 75 74 20 74 68 65 20 46 41 49 4c 20 72 65 73  But the FAIL res
196e0 6f 6c 75 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74  olution does not
196f0 0a 62 61 63 6b 20 6f 75 74 20 70 72 69 6f 72 20  .back out prior 
19700 63 68 61 6e 67 65 73 20 6f 66 20 74 68 65 20 53  changes of the S
19710 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  QL statement tha
19720 74 20 66 61 69 6c 65 64 20 6e 6f 72 20 64 6f 65  t failed nor doe
19730 73 0a 69 74 20 65 6e 64 20 74 68 65 20 74 72 61  s.it end the tra
19740 6e 73 61 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65  nsaction..^For e
19750 78 61 6d 70 6c 65 2c 20 69 66 20 61 6e 20 55 50  xample, if an UP
19760 44 41 54 45 0a 73 74 61 74 65 6d 65 6e 74 20 65  DATE.statement e
19770 6e 63 6f 75 6e 74 65 72 65 64 20 61 20 63 6f 6e  ncountered a con
19780 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
19790 6e 20 6f 6e 20 74 68 65 20 31 30 30 74 68 20 72  n on the 100th r
197a0 6f 77 20 74 68 61 74 0a 69 74 20 61 74 74 65 6d  ow that.it attem
197b0 70 74 73 20 74 6f 20 75 70 64 61 74 65 2c 20 74  pts to update, t
197c0 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 39 39  hen the first 99
197d0 20 72 6f 77 20 63 68 61 6e 67 65 73 20 61 72 65   row changes are
197e0 20 70 72 65 73 65 72 76 65 64 0a 62 75 74 20 63   preserved.but c
197f0 68 61 6e 67 65 73 20 74 6f 20 72 6f 77 73 20 31  hanges to rows 1
19800 30 30 20 61 6e 64 20 62 65 79 6f 6e 64 20 6e 65  00 and beyond ne
19810 76 65 72 20 6f 63 63 75 72 2e 3c 2f 70 3e 3c 2f  ver occur.</p></
19820 64 64 3e 0a 0a 28 3c 64 74 3e 3c 62 3e 49 47 4e  dd>..(<dt><b>IGN
19830 4f 52 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  ORE</b></dt>.<dd
19840 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70  ><p> ^When an ap
19850 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61  plicable constra
19860 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
19870 63 75 72 73 2c 20 0a 74 68 65 20 49 47 4e 4f 52  curs, .the IGNOR
19880 45 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  E resolution alg
19890 6f 72 69 74 68 6d 20 73 6b 69 70 73 20 74 68 65  orithm skips the
198a0 20 6f 6e 65 20 72 6f 77 20 74 68 61 74 20 63 6f   one row that co
198b0 6e 74 61 69 6e 73 0a 74 68 65 20 63 6f 6e 73 74  ntains.the const
198c0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
198d0 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20 70 72  and continues pr
198e0 6f 63 65 73 73 69 6e 67 20 73 75 62 73 65 71 75  ocessing subsequ
198f0 65 6e 74 20 72 6f 77 73 0a 6f 66 20 74 68 65 20  ent rows.of the 
19900 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61 73  SQL statement as
19910 20 69 66 20 6e 6f 74 68 69 6e 67 20 77 65 6e 74   if nothing went
19920 20 77 72 6f 6e 67 2e 0a 4f 74 68 65 72 20 72 6f   wrong..Other ro
19930 77 73 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66  ws before and af
19940 74 65 72 20 74 68 65 20 72 6f 77 20 74 68 61 74  ter the row that
19950 0a 63 6f 6e 74 61 69 6e 65 64 20 74 68 65 20 63  .contained the c
19960 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
19970 69 6f 6e 20 61 72 65 20 69 6e 73 65 72 74 65 64  ion are inserted
19980 20 6f 72 20 75 70 64 61 74 65 64 0a 6e 6f 72 6d   or updated.norm
19990 61 6c 6c 79 2e 20 5e 4e 6f 20 65 72 72 6f 72 20  ally. ^No error 
199a0 69 73 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e  is returned when
199b0 20 74 68 65 20 49 47 4e 4f 52 45 20 63 6f 6e 66   the IGNORE conf
199c0 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a  lict resolution.
199d0 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65  algorithm is use
199e0 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  d.</p></dd>..<dt
199f0 3e 3c 62 3e 52 45 50 4c 41 43 45 3c 2f 62 3e 3c  ><b>REPLACE</b><
19a00 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68  /dt>.<dd><p> ^Wh
19a10 65 6e 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73  en a UNIQUE cons
19a20 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
19a30 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52 45 50   occurs, the REP
19a40 4c 41 43 45 20 61 6c 67 6f 72 69 74 68 6d 0a 64  LACE algorithm.d
19a50 65 6c 65 74 65 73 20 70 72 65 2d 65 78 69 73 74  eletes pre-exist
19a60 69 6e 67 20 72 6f 77 73 20 74 68 61 74 20 61 72  ing rows that ar
19a70 65 20 63 61 75 73 69 6e 67 20 74 68 65 20 63 6f  e causing the co
19a80 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
19a90 6f 6e 0a 70 72 69 6f 72 20 74 6f 20 69 6e 73 65  on.prior to inse
19aa0 72 74 69 6e 67 20 6f 72 20 75 70 64 61 74 69 6e  rting or updatin
19ab0 67 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  g the current ro
19ac0 77 20 61 6e 64 20 74 68 65 20 63 6f 6d 6d 61 6e  w and the comman
19ad0 64 20 63 6f 6e 74 69 6e 75 65 73 20 0a 65 78 65  d continues .exe
19ae0 63 75 74 69 6e 67 20 6e 6f 72 6d 61 6c 6c 79 2e  cuting normally.
19af0 0a 5e 49 66 20 61 20 4e 4f 54 20 4e 55 4c 4c 20  .^If a NOT NULL 
19b00 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
19b10 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65  tion occurs, the
19b20 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63   REPLACE conflic
19b30 74 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 72 65 70  t.resolution rep
19b40 6c 61 63 65 73 20 74 68 65 20 4e 55 4c 4c 20 76  laces the NULL v
19b50 61 6c 75 65 20 77 69 74 68 0a 68 65 20 64 65 66  alue with.he def
19b60 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74  ault value for t
19b70 68 61 74 20 63 6f 6c 75 6d 6e 2c 20 6f 72 20 69  hat column, or i
19b80 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 61 73  f the column has
19b90 20 6e 6f 20 64 65 66 61 75 6c 74 0a 76 61 6c 75   no default.valu
19ba0 65 2c 20 74 68 65 6e 20 74 68 65 20 41 42 4f 52  e, then the ABOR
19bb0 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75  T algorithm is u
19bc0 73 65 64 2e 0a 5e 49 66 20 61 20 43 48 45 43 4b  sed..^If a CHECK
19bd0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
19be0 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68  ation occurs, th
19bf0 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69  e REPLACE confli
19c00 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c  ct resolution.al
19c10 67 6f 72 69 74 68 6d 20 61 6c 77 61 79 73 20 77  gorithm always w
19c20 6f 72 6b 73 20 6c 69 6b 65 20 41 42 4f 52 54 2e  orks like ABORT.
19c30 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74  </p>..<p>^When t
19c40 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c  he REPLACE confl
19c50 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73  ict resolution s
19c60 74 72 61 74 65 67 79 20 64 65 6c 65 74 65 73 20  trategy deletes 
19c70 72 6f 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f  rows in order to
19c80 0a 73 61 74 69 73 66 79 20 61 20 63 6f 6e 73 74  .satisfy a const
19c90 72 61 69 6e 74 2c 20 5b 43 52 45 41 54 45 20 54  raint, [CREATE T
19ca0 52 49 47 47 45 52 20 7c 20 64 65 6c 65 74 65 20  RIGGER | delete 
19cb0 74 72 69 67 67 65 72 73 5d 20 66 69 72 65 20 69  triggers] fire i
19cc0 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 5b 72  f and only if.[r
19cd0 65 63 75 72 73 69 76 65 5f 74 72 69 67 67 65 72  ecursive_trigger
19ce0 73 20 70 72 61 67 6d 61 20 7c 20 72 65 63 75 72  s pragma | recur
19cf0 73 69 76 65 20 74 72 69 67 67 65 72 73 5d 20 61  sive triggers] a
19d00 72 65 20 65 6e 61 62 6c 65 64 2e 3c 2f 70 3e 0a  re enabled.</p>.
19d10 0a 3c 70 3e 5e 54 68 65 20 5b 73 71 6c 69 74 65  .<p>^The [sqlite
19d20 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 20 7c 20  3_update_hook | 
19d30 75 70 64 61 74 65 20 68 6f 6f 6b 5d 20 69 73 20  update hook] is 
19d40 6e 6f 74 20 69 6e 76 6f 6b 65 64 20 66 6f 72 20  not invoked for 
19d50 72 6f 77 73 20 74 68 61 74 0a 61 72 65 20 64 65  rows that.are de
19d60 6c 65 74 65 64 20 62 79 20 74 68 65 20 52 45 50  leted by the REP
19d70 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65  LACE conflict re
19d80 73 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74 65 67  solution strateg
19d90 79 2e 20 20 5e 4e 6f 72 20 64 6f 65 73 0a 52 45  y.  ^Nor does.RE
19da0 50 4c 41 43 45 20 69 6e 63 72 65 6d 65 6e 74 20  PLACE increment 
19db0 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61  the [sqlite3_cha
19dc0 6e 67 65 73 20 7c 20 63 68 61 6e 67 65 20 63 6f  nges | change co
19dd0 75 6e 74 65 72 5d 2e 0a 54 68 65 20 65 78 63 65  unter]..The exce
19de0 70 74 69 6f 6e 61 6c 20 62 65 68 61 76 69 6f 72  ptional behavior
19df0 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68 69  s defined in thi
19e00 73 20 70 61 72 61 67 72 61 70 68 20 6d 69 67 68  s paragraph migh
19e10 74 20 63 68 61 6e 67 65 20 0a 69 6e 20 61 20 66  t change .in a f
19e20 75 74 75 72 65 20 72 65 6c 65 61 73 65 2e 3c 2f  uture release.</
19e30 70 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e 5e 54 68  p>.</dl>..<p>^Th
19e40 65 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63  e algorithm spec
19e50 69 66 69 65 64 20 69 6e 20 74 68 65 20 4f 52 20  ified in the OR 
19e60 63 6c 61 75 73 65 20 6f 66 20 61 20 49 4e 53 45  clause of a INSE
19e70 52 54 20 6f 72 20 55 50 44 41 54 45 0a 6f 76 65  RT or UPDATE.ove
19e80 72 72 69 64 65 73 20 61 6e 79 20 61 6c 67 6f 72  rrides any algor
19e90 69 74 68 6d 20 73 70 65 63 69 66 69 65 64 20 69  ithm specified i
19ea0 6e 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  n a CREATE TABLE
19eb0 2e 0a 5e 49 66 20 6e 6f 20 61 6c 67 6f 72 69 74  ..^If no algorit
19ec0 68 6d 20 69 73 20 73 70 65 63 69 66 69 65 64 20  hm is specified 
19ed0 61 6e 79 77 68 65 72 65 2c 20 74 68 65 20 41 42  anywhere, the AB
19ee0 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ORT algorithm is
19ef0 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c   used.</p>..<tcl
19f00 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
19f10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19f20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19f30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19f40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19f50 0a 53 65 63 74 69 6f 6e 20 52 45 49 4e 44 45 58  .Section REINDEX
19f60 20 72 65 69 6e 64 65 78 20 52 45 49 4e 44 45 58   reindex REINDEX
19f70 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
19f80 72 65 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a 3c  reindex-stmt 1.<
19f90 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52  /tcl>..<p>^The R
19fa0 45 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20 69  EINDEX command i
19fb0 73 20 75 73 65 64 20 74 6f 20 64 65 6c 65 74 65  s used to delete
19fc0 20 61 6e 64 20 72 65 63 72 65 61 74 65 20 69 6e   and recreate in
19fd0 64 69 63 65 73 20 66 72 6f 6d 20 73 63 72 61 74  dices from scrat
19fe0 63 68 2e 0a 54 68 69 73 20 69 73 20 75 73 65 66  ch..This is usef
19ff0 75 6c 20 77 68 65 6e 20 74 68 65 20 64 65 66 69  ul when the defi
1a000 6e 69 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 6c  nition of a coll
1a010 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 68  ation sequence h
1a020 61 73 20 63 68 61 6e 67 65 64 2e 0a 3c 2f 70 3e  as changed..</p>
1a030 0a 0a 3c 70 3e 5e 49 6e 20 74 68 65 20 66 69 72  ..<p>^In the fir
1a040 73 74 20 66 6f 72 6d 2c 20 61 6c 6c 20 69 6e 64  st form, all ind
1a050 69 63 65 73 20 69 6e 20 61 6c 6c 20 61 74 74 61  ices in all atta
1a060 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 74  ched databases t
1a070 68 61 74 20 75 73 65 20 74 68 65 0a 6e 61 6d 65  hat use the.name
1a080 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  d collation sequ
1a090 65 6e 63 65 20 61 72 65 20 72 65 63 72 65 61 74  ence are recreat
1a0a0 65 64 2e 20 5e 28 49 6e 20 74 68 65 20 73 65 63  ed. ^(In the sec
1a0b0 6f 6e 64 20 66 6f 72 6d 2c 20 69 66 20 0a 3c 69  ond form, if .<i
1a0c0 3e 26 23 39 31 3b 64 61 74 61 62 61 73 65 2d 6e  >&#91;database-n
1a0d0 61 6d 65 2e 26 23 39 33 3b 74 61 62 6c 65 2f 69  ame.&#93;table/i
1a0e0 6e 64 65 78 2d 6e 61 6d 65 3c 2f 69 3e 20 69 64  ndex-name</i> id
1a0f0 65 6e 74 69 66 69 65 73 20 61 20 74 61 62 6c 65  entifies a table
1a100 2c 0a 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69 63  ,.then all indic
1a110 65 73 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69  es.associated wi
1a120 74 68 20 74 68 65 20 74 61 62 6c 65 20 61 72 65  th the table are
1a130 20 72 65 62 75 69 6c 74 2e 29 5e 20 5e 49 66 20   rebuilt.)^ ^If 
1a140 61 6e 20 69 6e 64 65 78 20 69 73 20 69 64 65 6e  an index is iden
1a150 74 69 66 69 65 64 2c 20 74 68 65 6e 20 6f 6e 6c  tified, then onl
1a160 79 0a 74 68 69 73 20 73 70 65 63 69 66 69 63 20  y.this specific 
1a170 69 6e 64 65 78 20 69 73 20 64 65 6c 65 74 65 64  index is deleted
1a180 20 61 6e 64 20 72 65 63 72 65 61 74 65 64 2e 0a   and recreated..
1a190 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 6e 6f 20  </p>..<p>^If no 
1a1a0 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  <i>database-name
1a1b0 3c 2f 69 3e 20 69 73 20 73 70 65 63 69 66 69 65  </i> is specifie
1a1c0 64 20 61 6e 64 20 74 68 65 72 65 20 65 78 69 73  d and there exis
1a1d0 74 73 20 62 6f 74 68 20 61 20 74 61 62 6c 65 20  ts both a table 
1a1e0 6f 72 0a 69 6e 64 65 78 20 61 6e 64 20 61 20 63  or.index and a c
1a1f0 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
1a200 65 20 6f 66 20 74 68 65 20 73 70 65 63 69 66 69  e of the specifi
1a210 65 64 20 6e 61 6d 65 2c 20 74 68 65 6e 20 69 6e  ed name, then in
1a220 64 69 63 65 73 20 61 73 73 6f 63 69 61 74 65 64  dices associated
1a230 0a 77 69 74 68 20 74 68 65 20 63 6f 6c 6c 61 74  .with the collat
1a240 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6f 6e 6c  ion sequence onl
1a250 79 20 61 72 65 20 72 65 63 6f 6e 73 74 72 75 63  y are reconstruc
1a260 74 65 64 2e 20 54 68 69 73 20 61 6d 62 69 67 75  ted. This ambigu
1a270 69 74 79 20 6d 61 79 20 62 65 0a 64 69 73 70 65  ity may be.dispe
1a280 6c 6c 65 64 20 62 79 20 61 6c 77 61 79 73 20 73  lled by always s
1a290 70 65 63 69 66 79 69 6e 67 20 61 20 3c 69 3e 64  pecifying a <i>d
1a2a0 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e  atabase-name</i>
1a2b0 20 77 68 65 6e 20 72 65 69 6e 64 65 78 69 6e 67   when reindexing
1a2c0 20 61 0a 73 70 65 63 69 66 69 63 20 74 61 62 6c   a.specific tabl
1a2d0 65 20 6f 72 20 69 6e 64 65 78 2e 0a 0a 3c 74 63  e or index...<tc
1a2e0 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
1a2f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a300 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a310 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a320 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a330 23 23 0a 53 65 63 74 69 6f 6e 20 52 45 50 4c 41  ##.Section REPLA
1a340 43 45 20 72 65 70 6c 61 63 65 20 52 45 50 4c 41  CE replace REPLA
1a350 43 45 0a 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  CE..</tcl>..<p>^
1a360 54 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6d 6d  The REPLACE comm
1a370 61 6e 64 20 69 73 20 61 6e 20 61 6c 69 61 73 20  and is an alias 
1a380 66 6f 72 20 74 68 65 20 22 5b 4f 4e 20 43 4f 4e  for the "[ON CON
1a390 46 4c 49 43 54 20 7c 20 49 4e 53 45 52 54 20 4f  FLICT | INSERT O
1a3a0 52 20 52 45 50 4c 41 43 45 5d 22 0a 76 61 72 69  R REPLACE]".vari
1a3b0 61 6e 74 20 6f 66 20 74 68 65 20 5b 49 4e 53 45  ant of the [INSE
1a3c0 52 54 5d 20 63 6f 6d 6d 61 6e 64 2e 20 20 0a 54  RT] command.  .T
1a3d0 68 69 73 20 61 6c 69 61 73 20 69 73 20 70 72 6f  his alias is pro
1a3e0 76 69 64 65 64 20 66 6f 72 20 63 6f 6d 70 61 74  vided for compat
1a3f0 69 62 69 6c 69 74 79 20 6f 74 68 65 72 20 53 51  ibility other SQ
1a400 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  L database engin
1a410 65 73 2e 20 20 53 65 65 20 74 68 65 20 0a 5b 49  es.  See the .[I
1a420 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e 64 20 64  NSERT] command d
1a430 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72  ocumentation for
1a440 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
1a450 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 20 20 0a 0a  rmation.</p>  ..
1a460 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
1a470 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a480 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a490 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a4a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a4b0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 53 45  #####.Section SE
1a4c0 4c 45 43 54 20 73 65 6c 65 63 74 20 7b 53 45 4c  LECT select {SEL
1a4d0 45 43 54 20 71 75 65 72 79 7d 0a 0a 42 75 62 62  ECT query}..Bubb
1a4e0 6c 65 44 69 61 67 72 61 6d 20 73 65 6c 65 63 74  leDiagram select
1a4f0 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69  -stmt 1.BubbleDi
1a500 61 67 72 61 6d 20 73 65 6c 65 63 74 2d 63 6f 72  agram select-cor
1a510 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  e.BubbleDiagram 
1a520 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 0a 42 75  result-column.Bu
1a530 62 62 6c 65 44 69 61 67 72 61 6d 20 6a 6f 69 6e  bbleDiagram join
1a540 2d 73 6f 75 72 63 65 0a 42 75 62 62 6c 65 44 69  -source.BubbleDi
1a550 61 67 72 61 6d 20 73 69 6e 67 6c 65 2d 73 6f 75  agram single-sou
1a560 72 63 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61  rce.BubbleDiagra
1a570 6d 20 6a 6f 69 6e 2d 6f 70 0a 42 75 62 62 6c 65  m join-op.Bubble
1a580 44 69 61 67 72 61 6d 20 6a 6f 69 6e 2d 63 6f 6e  Diagram join-con
1a590 73 74 72 61 69 6e 74 0a 42 75 62 62 6c 65 44 69  straint.BubbleDi
1a5a0 61 67 72 61 6d 20 6f 72 64 65 72 69 6e 67 2d 74  agram ordering-t
1a5b0 65 72 6d 0a 42 75 62 62 6c 65 44 69 61 67 72 61  erm.BubbleDiagra
1a5c0 6d 20 63 6f 6d 70 6f 75 6e 64 2d 6f 70 65 72 61  m compound-opera
1a5d0 74 6f 72 0a 3c 2f 74 63 6c 3e 0a 0a 0a 3c 70 3e  tor.</tcl>...<p>
1a5e0 54 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  The SELECT state
1a5f0 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20  ment is used to 
1a600 71 75 65 72 79 20 74 68 65 20 64 61 74 61 62 61  query the databa
1a610 73 65 2e 20 20 54 68 65 0a 72 65 73 75 6c 74 20  se.  The.result 
1a620 6f 66 20 61 20 53 45 4c 45 43 54 20 69 73 20 7a  of a SELECT is z
1a630 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73  ero or more rows
1a640 20 6f 66 20 64 61 74 61 20 77 68 65 72 65 20 65   of data where e
1a650 61 63 68 20 72 6f 77 0a 68 61 73 20 61 20 66 69  ach row.has a fi
1a660 78 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  xed number of co
1a670 6c 75 6d 6e 73 2e 20 20 0a 0a 3c 70 3e 54 68 65  lumns.  ..<p>The
1a680 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1a690 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20 63 6f  t is the most co
1a6a0 6d 70 6c 69 63 61 74 65 64 20 63 6f 6d 6d 61 6e  mplicated comman
1a6b0 64 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e  d in the SQL lan
1a6c0 67 75 61 67 65 2e 0a 54 6f 20 6d 61 6b 65 20 74  guage..To make t
1a6d0 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 65  he description e
1a6e0 61 73 69 65 72 20 74 6f 20 66 6f 6c 6c 6f 77 2c  asier to follow,
1a6f0 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 70 61 73   some of the pas
1a700 73 61 67 65 73 20 62 65 6c 6f 77 20 64 65 73 63  sages below desc
1a710 72 69 62 65 0a 74 68 65 20 77 61 79 20 74 68 65  ribe.the way the
1a720 20 64 61 74 61 20 72 65 74 75 72 6e 65 64 20 62   data returned b
1a730 79 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  y a SELECT state
1a740 6d 65 6e 74 20 69 73 20 64 65 74 65 72 6d 69 6e  ment is determin
1a750 65 64 20 61 73 20 61 20 73 65 72 69 65 73 20 6f  ed as a series o
1a760 66 0a 73 74 65 70 73 2e 20 49 74 20 69 73 20 69  f.steps. It is i
1a770 6d 70 6f 72 74 61 6e 74 20 74 6f 20 6b 65 65 70  mportant to keep
1a780 20 69 6e 20 6d 69 6e 64 20 74 68 61 74 20 74 68   in mind that th
1a790 69 73 20 69 73 20 70 75 72 65 6c 79 20 69 6c 6c  is is purely ill
1a7a0 75 73 74 72 61 74 69 76 65 20 2d 0a 69 6e 20 70  ustrative -.in p
1a7b0 72 61 63 74 69 63 65 20 6e 65 69 74 68 65 72 20  ractice neither 
1a7c0 53 51 4c 69 74 65 20 6e 6f 72 20 61 6e 79 20 6f  SQLite nor any o
1a7d0 74 68 65 72 20 53 51 4c 20 65 6e 67 69 6e 65 20  ther SQL engine 
1a7e0 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 66  is required to f
1a7f0 6f 6c 6c 6f 77 20 0a 74 68 69 73 20 6f 72 20 61  ollow .this or a
1a800 6e 79 20 6f 74 68 65 72 20 73 70 65 63 69 66 69  ny other specifi
1a810 63 20 70 72 6f 63 65 73 73 2e 0a 0a 3c 68 33 3e  c process...<h3>
1a820 53 69 6d 70 6c 65 20 53 65 6c 65 63 74 20 50 72  Simple Select Pr
1a830 6f 63 65 73 73 69 6e 67 3c 2f 68 33 3e 0a 0a 3c  ocessing</h3>..<
1a840 70 3e 54 68 65 20 73 79 6e 74 61 78 20 66 6f 72  p>The syntax for
1a850 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54   a simple SELECT
1a860 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 64 65   statement is de
1a870 70 69 63 74 65 64 20 69 6e 20 74 68 65 20 0a 5b  picted in the .[
1a880 73 65 6c 65 63 74 2d 63 6f 72 65 20 73 79 6e 74  select-core synt
1a890 61 78 20 64 69 61 67 72 61 6d 5d 2e 20 47 65 6e  ax diagram]. Gen
1a8a0 65 72 61 74 69 6e 67 20 74 68 65 20 72 65 73 75  erating the resu
1a8b0 6c 74 73 20 6f 66 20 61 20 73 69 6d 70 6c 65 20  lts of a simple 
1a8c0 53 45 4c 45 43 54 0a 73 74 61 74 65 6d 65 6e 74  SELECT.statement
1a8d0 20 69 73 20 70 72 65 73 65 6e 74 65 64 20 61 73   is presented as
1a8e0 20 61 20 66 6f 75 72 20 73 74 65 70 20 70 72 6f   a four step pro
1a8f0 63 65 73 73 20 69 6e 20 74 68 65 20 64 65 73 63  cess in the desc
1a900 72 69 70 74 69 6f 6e 20 62 65 6c 6f 77 3a 0a 0a  ription below:..
1a910 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b  <ol>.  <li> <p>[
1a920 46 52 4f 4d 20 63 6c 61 75 73 65 5d 20 70 72 6f  FROM clause] pro
1a930 63 65 73 73 69 6e 67 3a 20 54 68 65 20 69 6e 70  cessing: The inp
1a940 75 74 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  ut data for the 
1a950 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73  simple SELECT is
1a960 0a 20 20 20 20 20 20 20 64 65 74 65 72 6d 69 6e  .       determin
1a970 65 64 2e 20 54 68 65 20 69 6e 70 75 74 20 64 61  ed. The input da
1a980 74 61 20 69 73 20 65 69 74 68 65 72 20 69 6d 70  ta is either imp
1a990 6c 69 63 69 74 6c 79 20 61 20 73 69 6e 67 6c 65  licitly a single
1a9a0 20 72 6f 77 20 77 69 74 68 20 30 0a 20 20 20 20   row with 0.    
1a9b0 20 20 20 63 6f 6c 75 6d 6e 73 20 28 69 66 20 74     columns (if t
1a9c0 68 65 72 65 20 69 73 20 6e 6f 20 46 52 4f 4d 20  here is no FROM 
1a9d0 63 6c 61 75 73 65 29 20 6f 72 20 69 73 20 64 65  clause) or is de
1a9e0 74 65 72 6d 69 6e 65 64 20 62 79 20 61 6e 61 6c  termined by anal
1a9f0 79 7a 69 6e 67 20 74 68 65 0a 20 20 20 20 20 20  yzing the.      
1aa00 20 5b 6a 6f 69 6e 2d 73 6f 75 72 63 65 20 73 79   [join-source sy
1aa10 6e 74 61 78 20 64 69 61 67 72 61 6d 7c 6a 6f 69  ntax diagram|joi
1aa20 6e 2d 73 6f 75 72 63 65 5d 20 73 70 65 63 69 66  n-source] specif
1aa30 69 63 61 74 69 6f 6e 20 74 68 61 74 20 66 6f 6c  ication that fol
1aa40 6c 6f 77 73 20 0a 20 20 20 20 20 20 20 61 6e 20  lows .       an 
1aa50 65 78 70 6c 69 63 69 74 20 46 52 4f 4d 20 63 6c  explicit FROM cl
1aa60 61 75 73 65 2e 0a 20 20 3c 6c 69 3e 20 3c 70 3e  ause..  <li> <p>
1aa70 5b 57 48 45 52 45 20 63 6c 61 75 73 65 5d 20 70  [WHERE clause] p
1aa80 72 6f 63 65 73 73 69 6e 67 3a 20 54 68 65 20 69  rocessing: The i
1aa90 6e 70 75 74 20 64 61 74 61 20 69 73 20 66 69 6c  nput data is fil
1aaa0 74 65 72 65 64 20 75 73 69 6e 67 20 74 68 65 20  tered using the 
1aab0 57 48 45 52 45 0a 20 20 20 20 20 20 20 63 6c 61  WHERE.       cla
1aac0 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  use expression. 
1aad0 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 47 52 4f   .  <li> <p>[GRO
1aae0 55 50 20 42 59 7c 47 52 4f 55 50 20 42 59 2c 20  UP BY|GROUP BY, 
1aaf0 48 41 56 49 4e 47 20 61 6e 64 20 72 65 73 75 6c  HAVING and resul
1ab00 74 2d 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73  t-column express
1ab10 69 6f 6e 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a  ion] processing:
1ab20 20 0a 20 20 20 20 20 20 20 54 68 65 20 73 65 74   .       The set
1ab30 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
1ab40 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20 61  is computed by a
1ab50 67 67 72 65 67 61 74 69 6e 67 20 74 68 65 20 64  ggregating the d
1ab60 61 74 61 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  ata according to
1ab70 0a 20 20 20 20 20 20 20 61 6e 79 20 47 52 4f 55  .       any GROU
1ab80 50 20 42 59 20 63 6c 61 75 73 65 20 61 6e 64 20  P BY clause and 
1ab90 63 61 6c 63 75 6c 61 74 69 6e 67 20 74 68 65 20  calculating the 
1aba0 72 65 73 75 6c 74 2d 73 65 74 20 65 78 70 72 65  result-set expre
1abb0 73 73 69 6f 6e 73 20 66 6f 72 20 74 68 65 0a 20  ssions for the. 
1abc0 20 20 20 20 20 20 72 6f 77 73 20 6f 66 20 74 68        rows of th
1abd0 65 20 66 69 6c 74 65 72 65 64 20 69 6e 70 75 74  e filtered input
1abe0 20 64 61 74 61 73 65 74 2e 20 20 0a 20 20 3c 6c   dataset.  .  <l
1abf0 69 3e 20 3c 70 3e 5b 44 49 53 54 49 4e 43 54 7c  i> <p>[DISTINCT|
1ac00 44 49 53 54 49 4e 43 54 2f 41 4c 4c 20 6b 65 79  DISTINCT/ALL key
1ac10 77 6f 72 64 5d 20 70 72 6f 63 65 73 73 69 6e 67  word] processing
1ac20 3a 20 49 66 20 74 68 65 20 71 75 65 72 79 20 69  : If the query i
1ac30 73 20 61 20 22 53 45 4c 45 43 54 0a 20 20 20 20  s a "SELECT.    
1ac40 20 20 20 44 49 53 54 49 4e 43 54 22 20 71 75 65     DISTINCT" que
1ac50 72 79 2c 20 64 75 70 6c 69 63 61 74 65 20 72 6f  ry, duplicate ro
1ac60 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66  ws are removed f
1ac70 72 6f 6d 20 74 68 65 20 73 65 74 20 6f 66 20 72  rom the set of r
1ac80 65 73 75 6c 74 20 72 6f 77 73 2e 0a 3c 2f 6f 6c  esult rows..</ol
1ac90 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20  >..<p>There are 
1aca0 74 77 6f 20 74 79 70 65 73 20 6f 66 20 73 69 6d  two types of sim
1acb0 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
1acc0 6d 65 6e 74 20 2d 20 61 67 67 72 65 67 61 74 65  ment - aggregate
1acd0 20 61 6e 64 20 0a 6e 6f 6e 2d 61 67 67 72 65 67   and .non-aggreg
1ace0 61 74 65 20 71 75 65 72 69 65 73 2e 20 5e 41 20  ate queries. ^A 
1acf0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
1ad00 61 74 65 6d 65 6e 74 20 69 73 20 61 6e 20 61 67  atement is an ag
1ad10 67 72 65 67 61 74 65 20 71 75 65 72 79 20 69 66  gregate query if
1ad20 0a 69 74 20 63 6f 6e 74 61 69 6e 73 20 65 69 74  .it contains eit
1ad30 68 65 72 20 61 20 47 52 4f 55 50 20 42 59 20 63  her a GROUP BY c
1ad40 6c 61 75 73 65 20 6f 72 20 6f 6e 65 20 6f 72 20  lause or one or 
1ad50 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
1ad60 75 6e 63 74 69 6f 6e 73 0a 69 6e 20 74 68 65 20  unctions.in the 
1ad70 72 65 73 75 6c 74 2d 73 65 74 2e 20 5e 4f 74 68  result-set. ^Oth
1ad80 65 72 77 69 73 65 2c 20 69 66 20 61 20 73 69 6d  erwise, if a sim
1ad90 70 6c 65 20 53 45 4c 45 43 54 20 63 6f 6e 74 61  ple SELECT conta
1ada0 69 6e 73 20 6e 6f 20 61 67 67 72 65 67 61 74 65  ins no aggregate
1adb0 0a 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20  .functions or a 
1adc0 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2c  GROUP BY clause,
1add0 20 69 74 20 69 73 20 61 20 6e 6f 6e 2d 61 67 67   it is a non-agg
1ade0 72 65 67 61 74 65 20 71 75 65 72 79 2e 0a 0a 3c  regate query...<
1adf0 70 3e 3c 62 3e 31 2e 20 44 65 74 65 72 6d 69 6e  p><b>1. Determin
1ae00 61 74 69 6f 6e 20 6f 66 20 69 6e 70 75 74 20 64  ation of input d
1ae10 61 74 61 20 28 46 52 4f 4d 20 63 6c 61 75 73 65  ata (FROM clause
1ae20 20 70 72 6f 63 65 73 73 69 6e 67 29 2e 3c 2f 62   processing).</b
1ae30 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  >.<tcl>hd_fragme
1ae40 6e 74 20 66 72 6f 6d 63 6c 61 75 73 65 3c 2f 74  nt fromclause</t
1ae50 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77  cl>.<tcl>hd_keyw
1ae60 6f 72 64 73 20 7b 46 52 4f 4d 20 63 6c 61 75 73  ords {FROM claus
1ae70 65 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  e}</tcl>..<p>The
1ae80 20 69 6e 70 75 74 20 64 61 74 61 20 75 73 65 64   input data used
1ae90 20 62 79 20 61 20 73 69 6d 70 6c 65 20 53 45 4c   by a simple SEL
1aea0 45 43 54 20 71 75 65 72 79 20 69 73 20 61 20 73  ECT query is a s
1aeb0 65 74 20 6f 66 20 3c 69 3e 4e 3c 2f 69 3e 20 72  et of <i>N</i> r
1aec0 6f 77 73 20 0a 65 61 63 68 20 3c 69 3e 4d 3c 2f  ows .each <i>M</
1aed0 69 3e 20 63 6f 6c 75 6d 6e 73 20 77 69 64 65 2e  i> columns wide.
1aee0 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 46 52  ..<p>^(If the FR
1aef0 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69  OM clause is omi
1af00 74 74 65 64 20 66 72 6f 6d 20 61 20 73 69 6d 70  tted from a simp
1af10 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
1af20 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 0a 69  ent, then the .i
1af30 6e 70 75 74 20 64 61 74 61 20 69 73 20 69 6d 70  nput data is imp
1af40 6c 69 63 69 74 6c 79 20 61 20 73 69 6e 67 6c 65  licitly a single
1af50 20 72 6f 77 20 7a 65 72 6f 20 63 6f 6c 75 6d 6e   row zero column
1af60 73 20 77 69 64 65 29 5e 20 28 69 2e 65 2e 20 3c  s wide)^ (i.e. <
1af70 69 3e 4e 3c 2f 69 3e 3d 31 20 61 6e 64 0a 3c 69  i>N</i>=1 and.<i
1af80 3e 4d 3c 2f 69 3e 3d 30 29 2e 0a 0a 3c 70 3e 49  >M</i>=0)...<p>I
1af90 66 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  f a FROM clause 
1afa0 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  is specified, th
1afb0 65 20 64 61 74 61 20 6f 6e 20 77 68 69 63 68 20  e data on which 
1afc0 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  a simple SELECT 
1afd0 71 75 65 72 79 0a 6f 70 65 72 61 74 65 73 20 63  query.operates c
1afe0 6f 6d 65 73 20 66 72 6f 6d 20 74 68 65 20 6f 6e  omes from the on
1aff0 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73  e or more tables
1b000 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 28   or subqueries (
1b010 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1b020 73 0a 69 6e 20 70 61 72 65 6e 74 68 65 73 69 73  s.in parenthesis
1b030 29 20 73 70 65 63 69 66 69 65 64 20 66 6f 6c 6c  ) specified foll
1b040 6f 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 6b  owing the FROM k
1b050 65 79 77 6f 72 64 2e 20 5e 41 20 73 75 62 2d 73  eyword. ^A sub-s
1b060 65 6c 65 63 74 20 73 70 65 63 69 66 69 65 64 0a  elect specified.
1b070 69 6e 20 74 68 65 20 6a 6f 69 6e 2d 73 6f 75 72  in the join-sour
1b080 63 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  ce following the
1b090 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 6e 20   FROM clause in 
1b0a0 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  a simple SELECT 
1b0b0 73 74 61 74 65 6d 65 6e 74 20 69 73 0a 68 61 6e  statement is.han
1b0c0 64 6c 65 64 20 61 73 20 69 66 20 69 74 20 77 61  dled as if it wa
1b0d0 73 20 61 20 74 61 62 6c 65 20 63 6f 6e 74 61 69  s a table contai
1b0e0 6e 69 6e 67 20 74 68 65 20 64 61 74 61 20 72 65  ning the data re
1b0f0 74 75 72 6e 65 64 20 62 79 20 65 78 65 63 75 74  turned by execut
1b100 69 6e 67 20 74 68 65 0a 73 75 62 2d 73 65 6c 65  ing the.sub-sele
1b110 63 74 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 45  ct statement. ^E
1b120 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  ach column of th
1b130 65 20 73 75 62 2d 73 65 6c 65 63 74 20 64 61 74  e sub-select dat
1b140 61 73 65 74 20 69 6e 68 65 72 69 74 73 20 74 68  aset inherits th
1b150 65 0a 5b 63 6f 6c 6c 61 74 69 6f 6e 7c 63 6f 6c  e.[collation|col
1b160 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 5d  lation sequence]
1b170 20 61 6e 64 20 5b 61 66 66 69 6e 69 74 79 5d 20   and [affinity] 
1b180 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
1b190 64 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 0a  ding expression.
1b1a0 69 6e 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63  in the sub-selec
1b1b0 74 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70  t statement...<p
1b1c0 3e 5e 49 66 20 74 68 65 72 65 20 69 73 20 6f 6e  >^If there is on
1b1d0 6c 79 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  ly a single tabl
1b1e0 65 20 69 6e 20 74 68 65 20 6a 6f 69 6e 2d 73 6f  e in the join-so
1b1f0 75 72 63 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  urce following t
1b200 68 65 20 46 52 4f 4d 0a 63 6c 61 75 73 65 2c 20  he FROM.clause, 
1b210 74 68 65 6e 20 74 68 65 20 69 6e 70 75 74 20 64  then the input d
1b220 61 74 61 20 75 73 65 64 20 62 79 20 74 68 65 20  ata used by the 
1b230 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1b240 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 73   is the contents
1b250 20 6f 66 20 74 68 65 0a 6e 61 6d 65 64 20 74 61   of the.named ta
1b260 62 6c 65 2e 20 5e 49 66 20 74 68 65 72 65 20 69  ble. ^If there i
1b270 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  s more than one 
1b280 74 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 20  table specified 
1b290 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 0a 6a  as part of the.j
1b2a0 6f 69 6e 2d 73 6f 75 72 63 65 20 66 6f 6c 6c 6f  oin-source follo
1b2b0 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 6b 65  wing the FROM ke
1b2c0 79 77 6f 72 64 2c 20 74 68 65 6e 20 74 68 65 20  yword, then the 
1b2d0 63 6f 6e 74 65 6e 74 73 20 6f 66 20 65 61 63 68  contents of each
1b2e0 20 6e 61 6d 65 64 20 74 61 62 6c 65 0a 61 72 65   named table.are
1b2f0 20 6a 6f 69 6e 65 64 20 69 6e 74 6f 20 61 20 73   joined into a s
1b300 69 6e 67 6c 65 20 64 61 74 61 73 65 74 20 66 6f  ingle dataset fo
1b310 72 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c  r the simple SEL
1b320 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 74 6f  ECT statement to
1b330 20 6f 70 65 72 61 74 65 20 6f 6e 2e 0a 45 78 61   operate on..Exa
1b340 63 74 6c 79 20 68 6f 77 20 74 68 65 20 64 61 74  ctly how the dat
1b350 61 20 69 73 20 63 6f 6d 62 69 6e 65 64 20 64 65  a is combined de
1b360 70 65 6e 64 73 20 6f 6e 20 74 68 65 20 73 70 65  pends on the spe
1b370 63 69 66 69 63 20 5b 6a 6f 69 6e 2d 6f 70 5d 20  cific [join-op] 
1b380 61 6e 64 0a 5b 6a 6f 69 6e 2d 63 6f 6e 73 74 72  and.[join-constr
1b390 61 69 6e 74 5d 20 75 73 65 64 20 74 6f 20 63 6f  aint] used to co
1b3a0 6e 6e 65 63 74 20 74 68 65 20 74 61 62 6c 65 73  nnect the tables
1b3b0 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 74   or subqueries t
1b3c0 6f 67 65 74 68 65 72 2e 0a 0a 3c 70 3e 41 6c 6c  ogether...<p>All
1b3d0 20 6a 6f 69 6e 73 20 69 6e 20 53 51 4c 69 74 65   joins in SQLite
1b3e0 20 61 72 65 20 62 61 73 65 64 20 6f 6e 20 74 68   are based on th
1b3f0 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
1b400 75 63 74 20 6f 66 20 74 68 65 20 6c 65 66 74 20  uct of the left 
1b410 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64 20 64  and.right-hand d
1b420 61 74 61 73 65 74 73 2e 20 5e 54 68 65 20 63 6f  atasets. ^The co
1b430 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 63 61 72  lumns of the car
1b440 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 64  tesian product d
1b450 61 74 61 73 65 74 20 61 72 65 2c 20 69 6e 20 0a  ataset are, in .
1b460 6f 72 64 65 72 2c 20 61 6c 6c 20 74 68 65 20 63  order, all the c
1b470 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65  olumns of the le
1b480 66 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20  ft-hand dataset 
1b490 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6c 6c 20  followed by all 
1b4a0 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74  the columns.of t
1b4b0 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61  he right-hand da
1b4c0 74 61 73 65 74 2e 20 5e 54 68 65 72 65 20 69 73  taset. ^There is
1b4d0 20 61 20 72 6f 77 20 69 6e 20 74 68 65 20 63 61   a row in the ca
1b4e0 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20  rtesian product 
1b4f0 64 61 74 61 73 65 74 0a 66 6f 72 6d 65 64 20 62  dataset.formed b
1b500 79 20 63 6f 6d 62 69 6e 69 6e 67 20 65 61 63 68  y combining each
1b510 20 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61 74   unique combinat
1b520 69 6f 6e 20 6f 66 20 61 20 72 6f 77 20 66 72 6f  ion of a row fro
1b530 6d 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20  m the left-hand 
1b540 0a 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20  .and right-hand 
1b550 64 61 74 61 73 65 74 73 2e 20 5e 28 49 6e 20 6f  datasets. ^(In o
1b560 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74  ther words, if t
1b570 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 64 61 74  he left-hand dat
1b580 61 73 65 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  aset consists of
1b590 0a 3c 69 3e 4e 6c 68 73 3c 2f 69 3e 20 72 6f 77  .<i>Nlhs</i> row
1b5a0 73 20 6f 66 20 3c 69 3e 4d 6c 68 73 3c 2f 69 3e  s of <i>Mlhs</i>
1b5b0 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 64 20 74 68   columns, and th
1b5c0 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74  e right-hand dat
1b5d0 61 73 65 74 20 6f 66 0a 3c 69 3e 4e 72 68 73 3c  aset of.<i>Nrhs<
1b5e0 2f 69 3e 20 72 6f 77 73 20 6f 66 20 3c 69 3e 4d  /i> rows of <i>M
1b5f0 72 68 73 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c  rhs</i> columns,
1b600 20 74 68 65 6e 20 74 68 65 20 63 61 72 74 65 73   then the cartes
1b610 69 61 6e 20 70 72 6f 64 75 63 74 20 69 73 20 61  ian product is a
1b620 0a 64 61 74 61 73 65 74 20 6f 66 20 3c 69 3e 4e  .dataset of <i>N
1b630 6c 68 73 2e 4e 72 68 73 3c 2f 69 3e 20 72 6f 77  lhs.Nrhs</i> row
1b640 73 2c 20 65 61 63 68 20 63 6f 6e 74 61 69 6e 69  s, each containi
1b650 6e 67 20 3c 69 3e 4d 6c 68 73 2b 4d 72 68 73 3c  ng <i>Mlhs+Mrhs<
1b660 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2e 29 5e 0a 0a  /i> columns.)^..
1b670 3c 70 3e 5e 49 66 20 74 68 65 20 6a 6f 69 6e 2d  <p>^If the join-
1b680 6f 70 20 69 73 20 22 43 52 4f 53 53 20 4a 4f 49  op is "CROSS JOI
1b690 4e 22 2c 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22  N", "INNER JOIN"
1b6a0 2c 20 22 4a 4f 49 4e 22 20 6f 72 20 61 20 63 6f  , "JOIN" or a co
1b6b0 6d 6d 61 0a 28 22 2c 22 29 20 61 6e 64 20 74 68  mma.(",") and th
1b6c0 65 72 65 20 69 73 20 6e 6f 20 4f 4e 20 6f 72 20  ere is no ON or 
1b6d0 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68  USING clause, th
1b6e0 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
1b6f0 20 74 68 65 20 6a 6f 69 6e 20 69 73 0a 73 69 6d   the join is.sim
1b700 70 6c 79 20 74 68 65 20 63 61 72 74 65 73 69 61  ply the cartesia
1b710 6e 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65  n product of the
1b720 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d   left and right-
1b730 68 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20 0a  hand datasets. .
1b740 5e 54 68 65 72 65 20 69 73 20 6e 6f 20 64 69 66  ^There is no dif
1b750 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
1b760 74 68 65 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22  the "INNER JOIN"
1b770 2c 20 22 4a 4f 49 4e 22 20 61 6e 64 20 22 2c 22  , "JOIN" and ","
1b780 20 6a 6f 69 6e 0a 6f 70 65 72 61 74 6f 72 73 2e   join.operators.
1b790 20 5e 28 54 68 65 20 22 43 52 4f 53 53 20 4a 4f   ^(The "CROSS JO
1b7a0 49 4e 22 20 6a 6f 69 6e 20 6f 70 65 72 61 74 6f  IN" join operato
1b7b0 72 20 70 72 6f 64 75 63 65 73 20 74 68 65 20 73  r produces the s
1b7c0 61 6d 65 20 64 61 74 61 20 61 73 20 74 68 65 20  ame data as the 
1b7d0 0a 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22  ."INNER JOIN", "
1b7e0 4a 4f 49 4e 22 20 61 6e 64 20 22 2c 22 20 6f 70  JOIN" and "," op
1b7f0 65 72 61 74 6f 72 73 29 5e 2c 20 62 75 74 20 69  erators)^, but i
1b800 73 20 0a 3c 61 20 68 72 65 66 3d 6f 70 74 6f 76  s .<a href=optov
1b810 65 72 76 69 65 77 2e 68 74 6d 6c 23 6d 61 6e 63  erview.html#manc
1b820 74 72 6c 3e 68 61 6e 64 6c 65 64 20 73 6c 69 67  trl>handled slig
1b830 68 74 6c 79 20 64 69 66 66 65 72 65 6e 74 6c 79  htly differently
1b840 20 62 79 20 74 68 65 20 71 75 65 72 79 0a 6f 70   by the query.op
1b850 74 69 6d 69 7a 65 72 3c 2f 61 3e 2e 20 4f 74 68  timizer</a>. Oth
1b860 65 72 77 69 73 65 2c 20 69 74 20 69 73 20 74 68  erwise, it is th
1b870 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
1b880 75 63 74 20 6d 6f 64 69 66 69 65 64 20 0a 61 63  uct modified .ac
1b890 63 6f 72 64 69 6e 67 20 74 6f 20 6f 6e 65 20 6f  cording to one o
1b8a0 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
1b8b0 6c 6c 6f 77 69 6e 67 20 62 75 6c 6c 65 74 20 70  llowing bullet p
1b8c0 6f 69 6e 74 73 3a 20 0a 0a 3c 75 6c 3e 0a 20 20  oints: ..<ul>.  
1b8d0 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65  <li> <p>^(If the
1b8e0 72 65 20 69 73 20 61 6e 20 4f 4e 20 63 6c 61 75  re is an ON clau
1b8f0 73 65 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  se specified, th
1b900 65 6e 20 74 68 65 20 4f 4e 20 65 78 70 72 65 73  en the ON expres
1b910 73 69 6f 6e 20 69 73 0a 20 20 20 20 20 20 20 65  sion is.       e
1b920 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63  valuated for eac
1b930 68 20 72 6f 77 20 6f 66 20 74 68 65 20 63 61 72  h row of the car
1b940 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 61  tesian product a
1b950 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 63 61  nd the result ca
1b960 73 74 20 74 6f 20 0a 20 20 20 20 20 20 20 61 20  st to .       a 
1b970 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20 61 73  numeric value as
1b980 20 69 66 20 62 79 20 61 20 5b 43 41 53 54 20 65   if by a [CAST e
1b990 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41 6c 6c 20  xpression]. All 
1b9a0 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74  rows for which t
1b9b0 68 65 0a 20 20 20 20 20 20 20 65 78 70 72 65 73  he.       expres
1b9c0 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74  sion evaluates t
1b9d0 6f 20 4e 55 4c 4c 20 6f 72 20 7a 65 72 6f 20 28  o NULL or zero (
1b9e0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 30 20  integer value 0 
1b9f0 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20 30 2e  or real value 0.
1ba00 30 29 0a 20 20 20 20 20 20 20 61 72 65 20 65 78  0).       are ex
1ba10 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65 20  cluded from the 
1ba20 64 61 74 61 73 65 74 2e 29 5e 0a 0a 20 20 3c 6c  dataset.)^..  <l
1ba30 69 3e 20 3c 70 3e 5e 49 66 20 74 68 65 72 65 20  i> <p>^If there 
1ba40 69 73 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73  is a USING claus
1ba50 65 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  e specified as p
1ba60 61 72 74 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2d  art of the join-
1ba70 63 6f 6e 73 74 72 61 69 6e 74 2c 0a 20 20 20 20  constraint,.    
1ba80 20 20 20 74 68 65 6e 20 65 61 63 68 20 6f 66 20     then each of 
1ba90 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  the column names
1baa0 20 73 70 65 63 69 66 69 65 64 20 6d 75 73 74 20   specified must 
1bab0 65 78 69 73 74 20 69 6e 20 74 68 65 20 64 61 74  exist in the dat
1bac0 61 73 65 74 73 20 74 6f 20 0a 20 20 20 20 20 20  asets to .      
1bad0 20 62 6f 74 68 20 74 68 65 20 6c 65 66 74 20 61   both the left a
1bae0 6e 64 20 72 69 67 68 74 20 6f 66 20 74 68 65 20  nd right of the 
1baf0 6a 6f 69 6e 2d 6f 70 2e 20 5e 28 46 6f 72 20 65  join-op. ^(For e
1bb00 61 63 68 20 70 61 69 72 20 6f 66 20 6e 61 6d 65  ach pair of name
1bb10 73 61 6b 65 0a 20 20 20 20 20 20 20 63 6f 6c 75  sake.       colu
1bb20 6d 6e 73 2c 20 74 68 65 20 65 78 70 72 65 73 73  mns, the express
1bb30 69 6f 6e 20 22 6c 68 73 2e 58 20 3d 20 72 68 73  ion "lhs.X = rhs
1bb40 2e 58 22 20 69 73 20 65 76 61 6c 75 61 74 65 64  .X" is evaluated
1bb50 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66   for each row of
1bb60 0a 20 20 20 20 20 20 20 74 68 65 20 63 61 72 74  .       the cart
1bb70 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 61 6e  esian product an
1bb80 64 20 74 68 65 20 72 65 73 75 6c 74 20 63 61 73  d the result cas
1bb90 74 20 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 76  t to a numeric v
1bba0 61 6c 75 65 2e 20 41 6c 6c 20 72 6f 77 73 0a 20  alue. All rows. 
1bbb0 20 20 20 20 20 20 66 6f 72 20 77 68 69 63 68 20        for which 
1bbc0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74  one or more of t
1bbd0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65  he expressions e
1bbe0 76 61 6c 75 61 74 65 73 20 74 6f 20 4e 55 4c 4c  valuates to NULL
1bbf0 20 6f 72 20 7a 65 72 6f 20 61 72 65 0a 20 20 20   or zero are.   
1bc00 20 20 20 20 65 78 63 6c 75 64 65 64 20 66 72 6f      excluded fro
1bc10 6d 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  m the result set
1bc20 2e 29 5e 20 5e 57 68 65 6e 20 63 6f 6d 70 61 72  .)^ ^When compar
1bc30 69 6e 67 20 76 61 6c 75 65 73 20 61 73 20 61 20  ing values as a 
1bc40 72 65 73 75 6c 74 20 6f 66 20 61 0a 20 20 20 20  result of a.    
1bc50 20 20 20 55 53 49 4e 47 20 63 6c 61 75 73 65 2c     USING clause,
1bc60 20 74 68 65 20 6e 6f 72 6d 61 6c 20 72 75 6c 65   the normal rule
1bc70 73 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61  s for handling a
1bc80 66 66 69 6e 69 74 69 65 73 2c 20 63 6f 6c 6c 61  ffinities, colla
1bc90 74 69 6f 6e 0a 20 20 20 20 20 20 20 73 65 71 75  tion.       sequ
1bca0 65 6e 63 65 73 20 61 6e 64 20 4e 55 4c 4c 20 76  ences and NULL v
1bcb0 61 6c 75 65 73 20 69 6e 20 63 6f 6d 70 61 72 69  alues in compari
1bcc0 73 6f 6e 73 20 61 70 70 6c 79 2e 20 5e 54 68 65  sons apply. ^The
1bcd0 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68 65   column from the
1bce0 0a 20 20 20 20 20 20 20 64 61 74 61 73 65 74 20  .       dataset 
1bcf0 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64  on the left-hand
1bd00 20 73 69 64 65 20 6f 66 20 74 68 65 20 6a 6f 69   side of the joi
1bd10 6e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 63 6f  n operator is co
1bd20 6e 73 69 64 65 72 65 64 20 74 6f 0a 20 20 20 20  nsidered to.    
1bd30 20 20 20 62 65 20 6f 6e 20 74 68 65 20 6c 65 66     be on the lef
1bd40 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 74  t-hand side of t
1bd50 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70  he comparison op
1bd60 65 72 61 74 6f 72 20 28 3d 29 20 66 6f 72 20 74  erator (=) for t
1bd70 68 65 20 70 75 72 70 6f 73 65 73 0a 20 20 20 20  he purposes.    
1bd80 20 20 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20     of collation 
1bd90 73 65 71 75 65 6e 63 65 20 61 6e 64 20 61 66 66  sequence and aff
1bda0 69 6e 69 74 79 20 70 72 65 63 65 64 65 6e 63 65  inity precedence
1bdb0 2e 0a 0a 20 20 20 20 20 20 20 3c 70 3e 5e 46 6f  ...       <p>^Fo
1bdc0 72 20 65 61 63 68 20 70 61 69 72 20 6f 66 20 63  r each pair of c
1bdd0 6f 6c 75 6d 6e 73 20 69 64 65 6e 74 69 66 69 65  olumns identifie
1bde0 64 20 62 79 20 61 20 55 53 49 4e 47 20 63 6c 61  d by a USING cla
1bdf0 75 73 65 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 0a  use, the column.
1be00 20 20 20 20 20 20 20 66 72 6f 6d 20 74 68 65 20         from the 
1be10 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73  right-hand datas
1be20 65 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  et is omitted fr
1be30 6f 6d 20 74 68 65 20 6a 6f 69 6e 65 64 20 64 61  om the joined da
1be40 74 61 73 65 74 2e 20 5e 54 68 69 73 20 0a 20 20  taset. ^This .  
1be50 20 20 20 20 20 69 73 20 74 68 65 20 6f 6e 6c 79       is the only
1be60 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77   difference betw
1be70 65 65 6e 20 61 20 55 53 49 4e 47 20 63 6c 61 75  een a USING clau
1be80 73 65 20 61 6e 64 20 69 74 73 20 65 71 75 69 76  se and its equiv
1be90 61 6c 65 6e 74 20 4f 4e 0a 20 20 20 20 20 20 20  alent ON.       
1bea0 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 0a 20 20 3c  constraint...  <
1beb0 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65 20  li> <p>^(If the 
1bec0 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f 72 64 20  NATURAL keyword 
1bed0 69 73 20 61 64 64 65 64 20 74 6f 20 61 6e 79 20  is added to any 
1bee0 6f 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 73 2c  of the join-ops,
1bef0 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 20 20 20   then an.       
1bf00 69 6d 70 6c 69 63 69 74 20 55 53 49 4e 47 20 63  implicit USING c
1bf10 6c 61 75 73 65 20 69 73 20 61 64 64 65 64 20 74  lause is added t
1bf20 6f 20 74 68 65 20 6a 6f 69 6e 2d 63 6f 6e 73 74  o the join-const
1bf30 72 61 69 6e 74 73 2e 20 54 68 65 20 69 6d 70 6c  raints. The impl
1bf40 69 63 69 74 0a 20 20 20 20 20 20 20 55 53 49 4e  icit.       USIN
1bf50 47 20 63 6c 61 75 73 65 20 63 6f 6e 74 61 69 6e  G clause contain
1bf60 73 20 65 61 63 68 20 6f 66 20 74 68 65 20 63 6f  s each of the co
1bf70 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 20  lumn names that 
1bf80 61 70 70 65 61 72 20 69 6e 20 62 6f 74 68 0a 20  appear in both. 
1bf90 20 20 20 20 20 20 74 68 65 20 6c 65 66 74 20 61        the left a
1bfa0 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20 69 6e  nd right-hand in
1bfb0 70 75 74 20 64 61 74 61 73 65 74 73 2e 29 5e 20  put datasets.)^ 
1bfc0 5e 49 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64  ^If the left and
1bfd0 20 72 69 67 68 74 2d 68 61 6e 64 0a 20 20 20 20   right-hand.    
1bfe0 20 20 20 69 6e 70 75 74 20 64 61 74 61 73 65 74     input dataset
1bff0 73 20 66 65 61 74 75 72 65 20 6e 6f 20 63 6f 6d  s feature no com
1c000 6d 6f 6e 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  mon column names
1c010 2c 20 74 68 65 6e 20 74 68 65 20 4e 41 54 55 52  , then the NATUR
1c020 41 4c 20 6b 65 79 77 6f 72 64 0a 20 20 20 20 20  AL keyword.     
1c030 20 20 68 61 73 20 6e 6f 20 65 66 66 65 63 74 20    has no effect 
1c040 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  on the results o
1c050 66 20 74 68 65 20 6a 6f 69 6e 2e 20 5e 41 20 55  f the join. ^A U
1c060 53 49 4e 47 20 6f 72 20 4f 4e 20 63 6c 61 75 73  SING or ON claus
1c070 65 20 6d 61 79 0a 20 20 20 20 20 20 20 6e 6f 74  e may.       not
1c080 20 62 65 20 61 64 64 65 64 20 74 6f 20 61 20 6a   be added to a j
1c090 6f 69 6e 20 74 68 61 74 20 73 70 65 63 69 66 69  oin that specifi
1c0a0 65 73 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b  es the NATURAL k
1c0b0 65 79 77 6f 72 64 2e 0a 0a 20 20 3c 6c 69 3e 20  eyword...  <li> 
1c0c0 3c 70 3e 5e 28 49 66 20 74 68 65 20 6a 6f 69 6e  <p>^(If the join
1c0d0 2d 6f 70 20 69 73 20 61 20 22 4c 45 46 54 20 4a  -op is a "LEFT J
1c0e0 4f 49 4e 22 20 6f 72 20 22 4c 45 46 54 20 4f 55  OIN" or "LEFT OU
1c0f0 54 45 52 20 4a 4f 49 4e 22 2c 20 74 68 65 6e 20  TER JOIN", then 
1c100 61 66 74 65 72 0a 20 20 20 20 20 20 20 74 68 65  after.       the
1c110 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 66 69 6c   ON or USING fil
1c120 74 65 72 69 6e 67 20 63 6c 61 75 73 65 73 20 68  tering clauses h
1c130 61 76 65 20 62 65 65 6e 20 61 70 70 6c 69 65 64  ave been applied
1c140 2c 20 61 6e 20 65 78 74 72 61 20 72 6f 77 20 69  , an extra row i
1c150 73 20 0a 20 20 20 20 20 20 20 61 64 64 65 64 20  s .       added 
1c160 74 6f 20 74 68 65 20 6f 75 74 70 75 74 20 66 6f  to the output fo
1c170 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68  r each row in th
1c180 65 20 6f 72 69 67 69 6e 61 6c 20 6c 65 66 74 2d  e original left-
1c190 68 61 6e 64 20 69 6e 70 75 74 20 0a 20 20 20 20  hand input .    
1c1a0 20 20 20 64 61 74 61 73 65 74 20 74 68 61 74 20     dataset that 
1c1b0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6e  corresponds to n
1c1c0 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c 20 69 6e  o rows at all in
1c1d0 20 74 68 65 20 63 6f 6d 70 6f 73 69 74 65 0a 20   the composite. 
1c1e0 20 20 20 20 20 20 64 61 74 61 73 65 74 20 28 69        dataset (i
1c1f0 66 20 61 6e 79 29 2e 29 5e 20 5e 54 68 65 20 61  f any).)^ ^The a
1c200 64 64 65 64 20 72 6f 77 73 20 63 6f 6e 74 61 69  dded rows contai
1c210 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e  n NULL values in
1c220 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 20 20 20   the columns.   
1c230 20 20 20 20 74 68 61 74 20 77 6f 75 6c 64 20 6e      that would n
1c240 6f 72 6d 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20  ormally contain 
1c250 76 61 6c 75 65 73 20 63 6f 70 69 65 64 20 66 72  values copied fr
1c260 6f 6d 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e  om the right-han
1c270 64 20 69 6e 70 75 74 0a 20 20 20 20 20 20 20 64  d input.       d
1c280 61 74 61 73 65 74 2e 20 20 0a 3c 2f 75 6c 3e 0a  ataset.  .</ul>.
1c290 0a 3c 70 3e 5e 28 57 68 65 6e 20 6d 6f 72 65 20  .<p>^(When more 
1c2a0 74 68 61 6e 20 74 77 6f 20 74 61 62 6c 65 73 20  than two tables 
1c2b0 61 72 65 20 6a 6f 69 6e 65 64 20 74 6f 67 65 74  are joined toget
1c2c0 68 65 72 20 61 73 20 70 61 72 74 20 6f 66 20 61  her as part of a
1c2d0 20 46 52 4f 4d 20 63 6c 61 75 73 65 2c 0a 74 68   FROM clause,.th
1c2e0 65 20 6a 6f 69 6e 20 6f 70 65 72 61 74 69 6f 6e  e join operation
1c2f0 73 20 61 72 65 20 70 72 6f 63 65 73 73 65 64 20  s are processed 
1c300 69 6e 20 6f 72 64 65 72 20 66 72 6f 6d 20 6c 65  in order from le
1c310 66 74 20 74 6f 20 72 69 67 68 74 2e 20 49 6e 20  ft to right. In 
1c320 6f 74 68 65 72 20 0a 77 6f 72 64 73 2c 20 74 68  other .words, th
1c330 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 28 41  e FROM clause (A
1c340 20 6a 6f 69 6e 2d 6f 70 2d 31 20 42 20 6a 6f 69   join-op-1 B joi
1c350 6e 2d 6f 70 2d 32 20 43 29 20 69 73 20 63 6f 6d  n-op-2 C) is com
1c360 70 75 74 65 64 20 61 73 20 0a 28 28 41 20 6a 6f  puted as .((A jo
1c370 69 6e 2d 6f 70 2d 31 20 42 29 20 6a 6f 69 6e 2d  in-op-1 B) join-
1c380 6f 70 2d 32 20 43 29 2e 29 5e 0a 20 20 20 20 20  op-2 C).)^.     
1c390 20 20 0a 0a 3c 70 3e 3c 62 3e 32 2e 20 57 48 45    ..<p><b>2. WHE
1c3a0 52 45 20 63 6c 61 75 73 65 20 66 69 6c 74 65 72  RE clause filter
1c3b0 69 6e 67 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64  ing.</b>.<tcl>hd
1c3c0 5f 66 72 61 67 6d 65 6e 74 20 77 68 65 72 65 63  _fragment wherec
1c3d0 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63 6c  lause</tcl>.<tcl
1c3e0 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 57 48  >hd_keywords {WH
1c3f0 45 52 45 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c  ERE clause}</tcl
1c400 3e 0a 0a 3c 70 3e 5e 28 49 66 20 61 20 57 48 45  >..<p>^(If a WHE
1c410 52 45 20 63 6c 61 75 73 65 20 69 73 20 73 70 65  RE clause is spe
1c420 63 69 66 69 65 64 2c 20 74 68 65 20 57 48 45 52  cified, the WHER
1c430 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  E expression is 
1c440 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 0a 65  evaluated for .e
1c450 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 69  ach row in the i
1c460 6e 70 75 74 20 64 61 74 61 20 61 6e 64 20 74 68  nput data and th
1c470 65 20 72 65 73 75 6c 74 20 63 61 73 74 20 74 6f  e result cast to
1c480 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65   a numeric value
1c490 2e 20 41 6c 6c 20 72 6f 77 73 0a 66 6f 72 20 77  . All rows.for w
1c4a0 68 69 63 68 20 74 68 65 20 57 48 45 52 45 20 63  hich the WHERE c
1c4b0 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e  lause expression
1c4c0 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20   evaluates to a 
1c4d0 4e 55 4c 4c 20 76 61 6c 75 65 20 6f 72 20 74 6f  NULL value or to
1c4e0 20 7a 65 72 6f 0a 28 69 6e 74 65 67 65 72 20 76   zero.(integer v
1c4f0 61 6c 75 65 20 30 20 6f 72 20 72 65 61 6c 20 76  alue 0 or real v
1c500 61 6c 75 65 20 30 2e 30 29 20 61 72 65 20 65 78  alue 0.0) are ex
1c510 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65 20  cluded from the 
1c520 64 61 74 61 73 65 74 20 62 65 66 6f 72 65 0a 63  dataset before.c
1c530 6f 6e 74 69 6e 75 69 6e 67 2e 29 5e 0a 0a 3c 70  ontinuing.)^..<p
1c540 3e 3c 62 3e 33 2e 20 47 65 6e 65 72 61 74 69 6f  ><b>3. Generatio
1c550 6e 20 6f 66 20 74 68 65 20 73 65 74 20 6f 66 20  n of the set of 
1c560 72 65 73 75 6c 74 20 72 6f 77 73 2e 3c 2f 62 3e  result rows.</b>
1c570 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
1c580 74 20 72 65 73 75 6c 74 73 65 74 3c 2f 74 63 6c  t resultset</tcl
1c590 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72  >.<tcl>hd_keywor
1c5a0 64 73 20 7b 72 65 73 75 6c 74 2d 73 65 74 20 65  ds {result-set e
1c5b0 78 70 72 65 73 73 69 6f 6e 73 7d 20 7b 47 52 4f  xpressions} {GRO
1c5c0 55 50 20 42 59 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  UP BY}</tcl>..<p
1c5d0 3e 4f 6e 63 65 20 74 68 65 20 69 6e 70 75 74 20  >Once the input 
1c5e0 64 61 74 61 20 66 72 6f 6d 20 74 68 65 20 46 52  data from the FR
1c5f0 4f 4d 20 63 6c 61 75 73 65 20 68 61 73 20 62 65  OM clause has be
1c600 65 6e 20 66 69 6c 74 65 72 65 64 20 62 79 20 74  en filtered by t
1c610 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20  he.WHERE clause 
1c620 65 78 70 72 65 73 73 69 6f 6e 20 28 69 66 20 61  expression (if a
1c630 6e 79 29 2c 20 74 68 65 20 73 65 74 20 6f 66 20  ny), the set of 
1c640 72 65 73 75 6c 74 20 72 6f 77 73 20 66 6f 72 20  result rows for 
1c650 74 68 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c 45  the simple .SELE
1c660 43 54 20 61 72 65 20 63 61 6c 63 75 6c 61 74 65  CT are calculate
1c670 64 2e 20 45 78 61 63 74 6c 79 20 68 6f 77 20 74  d. Exactly how t
1c680 68 69 73 20 69 73 20 64 6f 6e 65 20 64 65 70 65  his is done depe
1c690 6e 64 73 20 6f 6e 20 77 68 65 74 68 65 72 20 74  nds on whether t
1c6a0 68 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c 45 43  he simple .SELEC
1c6b0 54 20 69 73 20 61 6e 20 61 67 67 72 65 67 61 74  T is an aggregat
1c6c0 65 20 6f 72 20 6e 6f 6e 2d 61 67 67 72 65 67 61  e or non-aggrega
1c6d0 74 65 20 71 75 65 72 79 2c 20 61 6e 64 20 77 68  te query, and wh
1c6e0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 47  ether or not a G
1c6f0 52 4f 55 50 0a 42 59 20 63 6c 61 75 73 65 20 77  ROUP.BY clause w
1c700 61 73 20 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c  as specified...<
1c710 70 3e 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65  p> The list of e
1c720 78 70 72 65 73 73 69 6f 6e 73 20 62 65 74 77 65  xpressions betwe
1c730 65 6e 20 74 68 65 20 53 45 4c 45 43 54 20 61 6e  en the SELECT an
1c740 64 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 73 20  d FROM keywords 
1c750 69 73 20 6b 6e 6f 77 6e 20 61 73 0a 74 68 65 20  is known as.the 
1c760 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f  result expressio
1c770 6e 20 6c 69 73 74 2e 20 20 5e 49 66 20 61 20 72  n list.  ^If a r
1c780 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e  esult expression
1c790 20 69 73 20 74 68 65 20 73 70 65 63 69 61 6c 20   is the special 
1c7a0 65 78 70 72 65 73 73 69 6f 6e 0a 22 2a 22 20 74  expression."*" t
1c7b0 68 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20  hen all columns 
1c7c0 69 6e 20 74 68 65 20 69 6e 70 75 74 20 64 61 74  in the input dat
1c7d0 61 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65  a are substitute
1c7e0 64 20 66 6f 72 20 74 68 61 74 20 6f 6e 65 20 65  d for that one e
1c7f0 78 70 72 65 73 73 69 6f 6e 2e 0a 5e 28 49 66 20  xpression..^(If 
1c800 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
1c810 73 20 74 68 65 20 61 6c 69 61 73 20 6f 66 20 61  s the alias of a
1c820 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65   table or subque
1c830 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  ry in the FROM c
1c840 6c 61 75 73 65 0a 66 6f 6c 6c 6f 77 65 64 20 62  lause.followed b
1c850 79 20 22 2e 2a 22 20 74 68 65 6e 20 61 6c 6c 20  y ".*" then all 
1c860 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d 20 74 68 65  columns from the
1c870 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 6f 72 20   named table or 
1c880 73 75 62 71 75 65 72 79 20 61 72 65 0a 73 75 62  subquery are.sub
1c890 73 74 69 74 75 74 65 64 20 66 6f 72 20 74 68 65  stituted for the
1c8a0 20 73 69 6e 67 6c 65 20 65 78 70 72 65 73 73 69   single expressi
1c8b0 6f 6e 2e 29 5e 20 5e 28 49 74 20 69 73 20 61 6e  on.)^ ^(It is an
1c8c0 20 65 72 72 6f 72 20 74 6f 20 75 73 65 20 61 20   error to use a 
1c8d0 22 2a 22 20 6f 72 0a 22 61 6c 69 61 73 2e 2a 22  "*" or."alias.*"
1c8e0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 61   expression in a
1c8f0 6e 79 20 63 6f 6e 74 65 78 74 20 6f 74 68 65 72  ny context other
1c900 20 74 68 61 6e 20 74 68 61 6e 20 61 20 72 65 73   than than a res
1c910 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  ult expression l
1c920 69 73 74 2e 29 5e 0a 5e 28 49 74 20 69 73 20 61  ist.)^.^(It is a
1c930 6c 73 6f 20 61 6e 20 65 72 72 6f 72 20 74 6f 20  lso an error to 
1c940 75 73 65 20 61 20 22 2a 22 20 6f 72 20 22 61 6c  use a "*" or "al
1c950 69 61 73 2e 2a 22 20 65 78 70 72 65 73 73 69 6f  ias.*" expressio
1c960 6e 20 69 6e 20 61 20 73 69 6d 70 6c 65 20 53 45  n in a simple SE
1c970 4c 45 43 54 0a 71 75 65 72 79 20 74 68 61 74 20  LECT.query that 
1c980 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61 20  does not have a 
1c990 46 52 4f 4d 20 63 6c 61 75 73 65 2e 29 5e 0a 0a  FROM clause.)^..
1c9a0 3c 70 3e 20 5e 28 54 68 65 20 6e 75 6d 62 65 72  <p> ^(The number
1c9b0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
1c9c0 68 65 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64  he rows returned
1c9d0 20 62 79 20 61 20 73 69 6d 70 6c 65 20 53 45 4c   by a simple SEL
1c9e0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a 69 73  ECT statement.is
1c9f0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6e 75   equal to the nu
1ca00 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69  mber of expressi
1ca10 6f 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ons in the resul
1ca20 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73  t expression lis
1ca30 74 20 61 66 74 65 72 0a 73 75 62 73 74 69 74 75  t after.substitu
1ca40 74 69 6f 6e 20 6f 66 20 2a 20 61 6e 64 20 61 6c  tion of * and al
1ca50 69 61 73 2e 2a 20 65 78 70 72 65 73 73 69 6f 6e  ias.* expression
1ca60 73 2e 29 5e 20 45 61 63 68 20 72 65 73 75 6c 74  s.)^ Each result
1ca70 20 72 6f 77 20 69 73 20 63 61 6c 63 75 6c 61 74   row is calculat
1ca80 65 64 20 62 79 0a 65 76 61 6c 75 61 74 69 6e 67  ed by.evaluating
1ca90 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73   the expressions
1caa0 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65   in the result e
1cab0 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 77  xpression list w
1cac0 69 74 68 20 72 65 73 70 65 63 74 20 74 6f 20 61  ith respect to a
1cad0 0a 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 69  .single row of i
1cae0 6e 70 75 74 20 64 61 74 61 20 6f 72 2c 20 66 6f  nput data or, fo
1caf0 72 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72  r aggregate quer
1cb00 69 65 73 2c 20 77 69 74 68 20 72 65 73 70 65 63  ies, with respec
1cb10 74 20 74 6f 20 61 20 67 72 6f 75 70 0a 6f 66 20  t to a group.of 
1cb20 72 6f 77 73 2e 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c  rows...<ul>.  <l
1cb30 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 53 45 4c  i><p>^If the SEL
1cb40 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ECT statement is
1cb50 20 3c 62 3e 61 20 6e 6f 6e 2d 61 67 67 72 65 67   <b>a non-aggreg
1cb60 61 74 65 20 71 75 65 72 79 3c 2f 62 3e 2c 20 74  ate query</b>, t
1cb70 68 65 6e 20 0a 20 20 20 20 65 61 63 68 20 65 78  hen .    each ex
1cb80 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
1cb90 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f  result expressio
1cba0 6e 20 6c 69 73 74 20 69 73 20 65 76 61 6c 75 61  n list is evalua
1cbb0 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77  ted for each row
1cbc0 20 69 6e 0a 20 20 20 20 74 68 65 20 64 61 74 61   in.    the data
1cbd0 73 65 74 20 66 69 6c 74 65 72 65 64 20 62 79 20  set filtered by 
1cbe0 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
1cbf0 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20  ...  <li><p>^If 
1cc00 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
1cc10 6d 65 6e 74 20 69 73 20 3c 62 3e 61 6e 20 61 67  ment is <b>an ag
1cc20 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69  gregate query wi
1cc30 74 68 6f 75 74 20 61 20 47 52 4f 55 50 0a 20 20  thout a GROUP.  
1cc40 20 20 42 59 3c 2f 62 3e 20 63 6c 61 75 73 65 2c    BY</b> clause,
1cc50 20 74 68 65 6e 20 65 61 63 68 20 61 67 67 72 65   then each aggre
1cc60 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 20  gate expression 
1cc70 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65  in the result-se
1cc80 74 20 69 73 20 0a 20 20 20 20 65 76 61 6c 75 61  t is .    evalua
1cc90 74 65 64 20 6f 6e 63 65 20 61 63 72 6f 73 73 20  ted once across 
1cca0 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 73  the entire datas
1ccb0 65 74 2e 20 5e 45 61 63 68 20 6e 6f 6e 2d 61 67  et. ^Each non-ag
1ccc0 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
1ccd0 6f 6e 0a 20 20 20 20 69 6e 20 74 68 65 20 72 65  on.    in the re
1cce0 73 75 6c 74 2d 73 65 74 20 69 73 20 65 76 61 6c  sult-set is eval
1ccf0 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 61  uated once for a
1cd00 6e 20 61 72 62 69 74 72 61 72 69 6c 79 20 73 65  n arbitrarily se
1cd10 6c 65 63 74 65 64 20 72 6f 77 20 6f 66 0a 20 20  lected row of.  
1cd20 20 20 74 68 65 20 64 61 74 61 73 65 74 2e 20 5e    the dataset. ^
1cd30 54 68 65 20 73 61 6d 65 20 61 72 62 69 74 72 61  The same arbitra
1cd40 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f  rily selected ro
1cd50 77 20 69 73 20 75 73 65 64 20 66 6f 72 20 65 61  w is used for ea
1cd60 63 68 0a 20 20 20 20 6e 6f 6e 2d 61 67 67 72 65  ch.    non-aggre
1cd70 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2e  gate expression.
1cd80 20 5e 4f 72 2c 20 69 66 20 74 68 65 20 64 61 74   ^Or, if the dat
1cd90 61 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 7a 65  aset contains ze
1cda0 72 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20 0a 20  ro rows, then . 
1cdb0 20 20 20 65 61 63 68 20 6e 6f 6e 2d 61 67 67 72     each non-aggr
1cdc0 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
1cdd0 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 67   is evaluated ag
1cde0 61 69 6e 73 74 20 61 20 72 6f 77 20 63 6f 6e 73  ainst a row cons
1cdf0 69 73 74 69 6e 67 0a 20 20 20 20 65 6e 74 69 72  isting.    entir
1ce00 65 6c 79 20 6f 66 20 4e 55 4c 4c 20 76 61 6c 75  ely of NULL valu
1ce10 65 73 2e 0a 0a 20 20 20 3c 70 3e 5e 54 68 65 20  es...   <p>^The 
1ce20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65  single row of re
1ce30 73 75 6c 74 2d 73 65 74 20 64 61 74 61 20 63 72  sult-set data cr
1ce40 65 61 74 65 64 20 62 79 20 65 76 61 6c 75 61 74  eated by evaluat
1ce50 69 6e 67 20 74 68 65 20 61 67 67 72 65 67 61 74  ing the aggregat
1ce60 65 0a 20 20 20 20 61 6e 64 20 6e 6f 6e 2d 61 67  e.    and non-ag
1ce70 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
1ce80 6f 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ons in the resul
1ce90 74 2d 73 65 74 20 66 6f 72 6d 73 20 74 68 65 20  t-set forms the 
1cea0 72 65 73 75 6c 74 20 6f 66 20 61 6e 0a 20 20 20  result of an.   
1ceb0 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79   aggregate query
1cec0 20 77 69 74 68 6f 75 74 20 61 20 47 52 4f 55 50   without a GROUP
1ced0 20 42 59 20 63 6c 61 75 73 65 2e 20 5e 41 6e 20   BY clause. ^An 
1cee0 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20  aggregate query 
1cef0 77 69 74 68 6f 75 74 20 61 0a 20 20 20 20 47 52  without a.    GR
1cf00 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 61 6c  OUP BY clause al
1cf10 77 61 79 73 20 72 65 74 75 72 6e 73 20 65 78 61  ways returns exa
1cf20 63 74 6c 79 20 6f 6e 65 20 72 6f 77 20 6f 66 20  ctly one row of 
1cf30 64 61 74 61 2c 20 65 76 65 6e 20 69 66 20 74 68  data, even if th
1cf40 65 72 65 20 61 72 65 0a 20 20 20 20 7a 65 72 6f  ere are.    zero
1cf50 20 72 6f 77 73 20 6f 66 20 69 6e 70 75 74 20 64   rows of input d
1cf60 61 74 61 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  ata...  <li><p>^
1cf70 28 49 66 20 74 68 65 20 53 45 4c 45 43 54 20 73  (If the SELECT s
1cf80 74 61 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61  tatement is <b>a
1cf90 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72  n aggregate quer
1cfa0 79 20 77 69 74 68 20 61 20 47 52 4f 55 50 0a 20  y with a GROUP. 
1cfb0 20 20 20 42 59 3c 2f 62 3e 20 63 6c 61 75 73 65     BY</b> clause
1cfc0 2c 20 74 68 65 6e 20 65 61 63 68 20 6f 66 20 74  , then each of t
1cfd0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 73  he expressions s
1cfe0 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
1cff0 20 6f 66 20 74 68 65 0a 20 20 20 20 47 52 4f 55   of the.    GROU
1d000 50 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 65  P BY clause is e
1d010 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63  valuated for eac
1d020 68 20 72 6f 77 20 6f 66 20 74 68 65 20 64 61 74  h row of the dat
1d030 61 73 65 74 2e 20 45 61 63 68 20 72 6f 77 0a 20  aset. Each row. 
1d040 20 20 20 69 73 20 74 68 65 6e 20 61 73 73 69 67     is then assig
1d050 6e 65 64 20 74 6f 20 61 20 22 67 72 6f 75 70 22  ned to a "group"
1d060 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 72 65   based on the re
1d070 73 75 6c 74 73 3b 20 72 6f 77 73 20 66 6f 72 20  sults; rows for 
1d080 77 68 69 63 68 0a 20 20 20 20 74 68 65 20 72 65  which.    the re
1d090 73 75 6c 74 73 20 6f 66 20 65 76 61 6c 75 61 74  sults of evaluat
1d0a0 69 6e 67 20 74 68 65 20 47 52 4f 55 50 20 42 59  ing the GROUP BY
1d0b0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65   expressions are
1d0c0 20 74 68 65 20 73 61 6d 65 20 61 72 65 0a 20 20   the same are.  
1d0d0 20 20 61 73 73 69 67 6e 65 64 20 74 6f 20 74 68    assigned to th
1d0e0 65 20 73 61 6d 65 20 67 72 6f 75 70 2e 29 5e 20  e same group.)^ 
1d0f0 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65  ^For the purpose
1d100 73 20 6f 66 20 67 72 6f 75 70 69 6e 67 20 72 6f  s of grouping ro
1d110 77 73 2c 20 4e 55 4c 4c 20 0a 20 20 20 20 76 61  ws, NULL .    va
1d120 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65  lues are conside
1d130 72 65 64 20 65 71 75 61 6c 2e 20 5e 54 68 65 20  red equal. ^The 
1d140 75 73 75 61 6c 20 72 75 6c 65 73 20 66 6f 72 20  usual rules for 
1d150 5b 63 6f 6c 6c 61 74 69 6f 6e 7c 73 65 6c 65 63  [collation|selec
1d160 74 69 6e 67 20 61 0a 20 20 20 20 63 6f 6c 6c 61  ting a.    colla
1d170 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 5d 20 77  tion sequence] w
1d180 69 74 68 20 77 68 69 63 68 20 74 6f 20 63 6f 6d  ith which to com
1d190 70 61 72 65 20 74 65 78 74 20 76 61 6c 75 65 73  pare text values
1d1a0 20 61 70 70 6c 79 20 77 68 65 6e 20 65 76 61 6c   apply when eval
1d1b0 75 61 74 69 6e 67 0a 20 20 20 20 65 78 70 72 65  uating.    expre
1d1c0 73 73 69 6f 6e 73 20 69 6e 20 61 20 47 52 4f 55  ssions in a GROU
1d1d0 50 20 42 59 20 63 6c 61 75 73 65 2e 20 20 5e 54  P BY clause.  ^T
1d1e0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  he expressions i
1d1f0 6e 20 74 68 65 20 47 52 4f 55 50 20 42 59 20 63  n the GROUP BY c
1d200 6c 61 75 73 65 0a 20 20 20 20 64 6f 20 3c 65 6d  lause.    do <em
1d210 3e 6e 6f 74 3c 2f 65 6d 3e 20 68 61 76 65 20 74  >not</em> have t
1d220 6f 20 62 65 20 65 78 70 72 65 73 73 69 6f 6e 73  o be expressions
1d230 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e 20   that appear in 
1d240 74 68 65 20 72 65 73 75 6c 74 2e 20 5e 54 68 65  the result. ^The
1d250 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f 6e 73  .    expressions
1d260 20 69 6e 20 61 20 47 52 4f 55 50 20 42 59 20 63   in a GROUP BY c
1d270 6c 61 75 73 65 20 6d 61 79 20 6e 6f 74 20 62 65  lause may not be
1d280 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65   aggregate expre
1d290 73 73 69 6f 6e 73 2e 0a 0a 20 20 20 20 3c 70 3e  ssions...    <p>
1d2a0 5e 28 49 66 20 61 20 48 41 56 49 4e 47 20 63 6c  ^(If a HAVING cl
1d2b0 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65  ause is specifie
1d2c0 64 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74  d, it is evaluat
1d2d0 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68  ed once for each
1d2e0 20 67 72 6f 75 70 20 0a 20 20 20 20 6f 66 20 72   group .    of r
1d2f0 6f 77 73 20 61 6e 64 20 63 61 73 74 20 74 6f 20  ows and cast to 
1d300 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
1d310 2e 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 20  . If the result 
1d320 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of evaluating th
1d330 65 0a 20 20 20 20 48 41 56 49 4e 47 20 63 6c 61  e.    HAVING cla
1d340 75 73 65 20 69 73 20 4e 55 4c 4c 20 6f 72 20 7a  use is NULL or z
1d350 65 72 6f 20 28 69 6e 74 65 67 65 72 20 76 61 6c  ero (integer val
1d360 75 65 20 30 29 2c 20 74 68 65 20 67 72 6f 75 70  ue 0), the group
1d370 20 69 73 20 64 69 73 63 61 72 64 65 64 2e 29 5e   is discarded.)^
1d380 0a 20 20 20 20 5e 49 66 20 74 68 65 20 48 41 56  .    ^If the HAV
1d390 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 61 6e  ING clause is an
1d3a0 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65   aggregate expre
1d3b0 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 65 76 61  ssion, it is eva
1d3c0 6c 75 61 74 65 64 20 61 63 72 6f 73 73 0a 20 20  luated across.  
1d3d0 20 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68    all rows in th
1d3e0 65 20 67 72 6f 75 70 2e 20 5e 49 66 20 61 20 48  e group. ^If a H
1d3f0 41 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20  AVING clause is 
1d400 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20  a non-aggregate 
1d410 65 78 70 72 65 73 73 69 6f 6e 2c 0a 20 20 20 20  expression,.    
1d420 69 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  it is evaluated 
1d430 77 69 74 68 20 72 65 73 70 65 63 74 20 74 6f 20  with respect to 
1d440 61 6e 20 61 72 62 69 74 72 61 72 69 6c 79 20 73  an arbitrarily s
1d450 65 6c 65 63 74 65 64 20 72 6f 77 20 66 72 6f 6d  elected row from
1d460 20 74 68 65 20 67 72 6f 75 70 2e 20 0a 20 20 20   the group. .   
1d470 20 5e 54 68 65 20 48 41 56 49 4e 47 20 65 78 70   ^The HAVING exp
1d480 72 65 73 73 69 6f 6e 20 6d 61 79 20 72 65 66 65  ression may refe
1d490 72 20 74 6f 20 76 61 6c 75 65 73 2c 20 65 76 65  r to values, eve
1d4a0 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  n aggregate func
1d4b0 74 69 6f 6e 73 2c 20 74 68 61 74 0a 20 20 20 20  tions, that.    
1d4c0 61 72 65 20 6e 6f 74 20 69 6e 20 74 68 65 20 72  are not in the r
1d4d0 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 20 20 20 20  esult.</p>..    
1d4e0 3c 70 3e 5e 45 61 63 68 20 65 78 70 72 65 73 73  <p>^Each express
1d4f0 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ion in the resul
1d500 74 2d 73 65 74 20 69 73 20 74 68 65 6e 20 65 76  t-set is then ev
1d510 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72  aluated once for
1d520 20 65 61 63 68 0a 20 20 20 20 67 72 6f 75 70 20   each.    group 
1d530 6f 66 20 72 6f 77 73 2e 20 5e 49 66 20 74 68 65  of rows. ^If the
1d540 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
1d550 6e 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72  n aggregate expr
1d560 65 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 0a 20  ession, it is . 
1d570 20 20 20 65 76 61 6c 75 61 74 65 64 20 61 63 72     evaluated acr
1d580 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20  oss all rows in 
1d590 74 68 65 20 67 72 6f 75 70 2e 20 5e 4f 74 68 65  the group. ^Othe
1d5a0 72 77 69 73 65 2c 20 69 74 20 69 73 20 65 76 61  rwise, it is eva
1d5b0 6c 75 61 74 65 64 20 61 67 61 69 6e 73 74 0a 20  luated against. 
1d5c0 20 20 20 61 20 73 69 6e 67 6c 65 20 61 72 62 69     a single arbi
1d5d0 74 72 61 72 69 6c 79 20 63 68 6f 73 65 6e 20 72  trarily chosen r
1d5e0 6f 77 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 74  ow from within t
1d5f0 68 65 20 67 72 6f 75 70 2e 20 5e 49 66 20 74 68  he group. ^If th
1d600 65 72 65 20 69 73 20 6d 6f 72 65 0a 20 20 20 20  ere is more.    
1d610 74 68 61 6e 20 6f 6e 65 20 6e 6f 6e 2d 61 67 67  than one non-agg
1d620 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
1d630 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d  n in the result-
1d640 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 20 73 75  set, then all su
1d650 63 68 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f  ch.    expressio
1d660 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  ns are evaluated
1d670 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20 72 6f   for the same ro
1d680 77 2e 0a 0a 20 20 20 20 3c 70 3e 5e 45 61 63 68  w...    <p>^Each
1d690 20 67 72 6f 75 70 20 6f 66 20 69 6e 70 75 74 20   group of input 
1d6a0 64 61 74 61 73 65 74 20 72 6f 77 73 20 63 6f 6e  dataset rows con
1d6b0 74 72 69 62 75 74 65 73 20 61 20 73 69 6e 67 6c  tributes a singl
1d6c0 65 20 72 6f 77 20 74 6f 20 74 68 65 20 0a 20 20  e row to the .  
1d6d0 20 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20    set of result 
1d6e0 72 6f 77 73 2e 20 5e 53 75 62 6a 65 63 74 20 74  rows. ^Subject t
1d6f0 6f 20 66 69 6c 74 65 72 69 6e 67 20 61 73 73 6f  o filtering asso
1d700 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
1d710 44 49 53 54 49 4e 43 54 0a 20 20 20 20 6b 65 79  DISTINCT.    key
1d720 77 6f 72 64 2c 20 74 68 65 20 6e 75 6d 62 65 72  word, the number
1d730 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65   of rows returne
1d740 64 20 62 79 20 61 6e 20 61 67 67 72 65 67 61 74  d by an aggregat
1d750 65 20 71 75 65 72 79 20 77 69 74 68 20 61 20 47  e query with a G
1d760 52 4f 55 50 0a 20 20 20 20 42 59 20 63 6c 61 75  ROUP.    BY clau
1d770 73 65 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  se is the same a
1d780 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1d790 67 72 6f 75 70 73 20 6f 66 20 72 6f 77 73 20 70  groups of rows p
1d7a0 72 6f 64 75 63 65 64 20 62 79 20 61 70 70 6c 79  roduced by apply
1d7b0 69 6e 67 0a 20 20 20 20 74 68 65 20 47 52 4f 55  ing.    the GROU
1d7c0 50 20 42 59 20 61 6e 64 20 48 41 56 49 4e 47 20  P BY and HAVING 
1d7d0 63 6c 61 75 73 65 73 20 74 6f 20 74 68 65 20 66  clauses to the f
1d7e0 69 6c 74 65 72 65 64 20 69 6e 70 75 74 20 64 61  iltered input da
1d7f0 74 61 73 65 74 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  taset..</ul>..<p
1d800 3e 3c 62 3e 34 2e 20 52 65 6d 6f 76 61 6c 20 6f  ><b>4. Removal o
1d810 66 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73  f duplicate rows
1d820 20 28 44 49 53 54 49 4e 43 54 20 70 72 6f 63 65   (DISTINCT proce
1d830 73 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c  ssing).</b>.<tcl
1d840 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 64 69 73  >hd_fragment dis
1d850 74 69 6e 63 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c  tinct</tcl>.<tcl
1d860 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 44 49  >hd_keywords {DI
1d870 53 54 49 4e 43 54 7d 3c 2f 74 63 6c 3e 0a 0a 3c  STINCT}</tcl>..<
1d880 70 3e 5e 4f 6e 65 20 6f 66 20 74 68 65 20 41 4c  p>^One of the AL
1d890 4c 20 6f 72 20 44 49 53 54 49 4e 43 54 20 6b 65  L or DISTINCT ke
1d8a0 79 77 6f 72 64 73 20 6d 61 79 20 66 6f 6c 6c 6f  ywords may follo
1d8b0 77 20 74 68 65 20 53 45 4c 45 43 54 20 6b 65 79  w the SELECT key
1d8c0 77 6f 72 64 20 69 6e 20 61 20 0a 73 69 6d 70 6c  word in a .simpl
1d8d0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
1d8e0 6e 74 2e 20 5e 49 66 20 74 68 65 20 73 69 6d 70  nt. ^If the simp
1d8f0 6c 65 20 53 45 4c 45 43 54 20 69 73 20 61 20 53  le SELECT is a S
1d900 45 4c 45 43 54 20 41 4c 4c 2c 20 74 68 65 6e 20  ELECT ALL, then 
1d910 74 68 65 0a 65 6e 74 69 72 65 20 73 65 74 20 6f  the.entire set o
1d920 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 61 72  f result rows ar
1d930 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  e returned by th
1d940 65 20 53 45 4c 45 43 54 2e 20 5e 49 66 20 6e 65  e SELECT. ^If ne
1d950 69 74 68 65 72 20 41 4c 4c 20 6f 72 0a 44 49 53  ither ALL or.DIS
1d960 54 49 4e 43 54 20 61 72 65 20 70 72 65 73 65 6e  TINCT are presen
1d970 74 2c 20 74 68 65 6e 20 74 68 65 20 62 65 68 61  t, then the beha
1d980 76 69 6f 75 72 20 69 73 20 61 73 20 69 66 20 41  viour is as if A
1d990 4c 4c 20 77 65 72 65 20 73 70 65 63 69 66 69 65  LL were specifie
1d9a0 64 2e 20 0a 5e 49 66 20 74 68 65 20 73 69 6d 70  d. .^If the simp
1d9b0 6c 65 20 53 45 4c 45 43 54 20 69 73 20 61 20 53  le SELECT is a S
1d9c0 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 2c 20  ELECT DISTINCT, 
1d9d0 74 68 65 6e 20 64 75 70 6c 69 63 61 74 65 20 72  then duplicate r
1d9e0 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 0a  ows are removed.
1d9f0 66 72 6f 6d 20 74 68 65 20 73 65 74 20 6f 66 20  from the set of 
1da00 72 65 73 75 6c 74 20 72 6f 77 73 20 62 65 66 6f  result rows befo
1da10 72 65 20 69 74 20 69 73 20 72 65 74 75 72 6e 65  re it is returne
1da20 64 2e 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70  d. ^For the purp
1da30 6f 73 65 73 20 6f 66 0a 64 65 74 65 63 74 69 6e  oses of.detectin
1da40 67 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73  g duplicate rows
1da50 2c 20 74 77 6f 20 4e 55 4c 4c 20 76 61 6c 75 65  , two NULL value
1da60 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
1da70 20 74 6f 20 62 65 20 65 71 75 61 6c 2e 20 5e 54   to be equal. ^T
1da80 68 65 0a 6e 6f 72 6d 61 6c 20 72 75 6c 65 73 20  he.normal rules 
1da90 66 6f 72 20 73 65 6c 65 63 74 69 6e 67 20 61 20  for selecting a 
1daa0 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
1dab0 63 65 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65  ce to compare te
1dac0 78 74 20 76 61 6c 75 65 73 20 77 69 74 68 0a 61  xt values with.a
1dad0 70 70 6c 79 2e 0a 0a 3c 68 33 3e 43 6f 6d 70 6f  pply...<h3>Compo
1dae0 75 6e 64 20 53 65 6c 65 63 74 20 53 74 61 74 65  und Select State
1daf0 6d 65 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54  ments</h3>..<p>T
1db00 77 6f 20 6f 72 20 6d 6f 72 65 20 73 69 6d 70 6c  wo or more simpl
1db10 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
1db20 6e 74 73 20 6d 61 79 20 62 65 20 63 6f 6e 6e 65  nts may be conne
1db30 63 74 65 64 20 74 6f 67 65 74 68 65 72 20 74 6f  cted together to
1db40 20 66 6f 72 6d 0a 61 20 63 6f 6d 70 6f 75 6e 64   form.a compound
1db50 20 53 45 4c 45 43 54 20 75 73 69 6e 67 20 74 68   SELECT using th
1db60 65 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41  e UNION, UNION A
1db70 4c 4c 2c 20 49 4e 54 45 52 53 45 43 54 20 6f 72  LL, INTERSECT or
1db80 20 45 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72   EXCEPT operator
1db90 2e 0a 5e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ..^In a compound
1dba0 20 53 45 4c 45 43 54 2c 20 61 6c 6c 20 74 68 65   SELECT, all the
1dbb0 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 53 45 4c   constituent SEL
1dbc0 45 43 54 73 20 6d 75 73 74 20 72 65 74 75 72 6e  ECTs must return
1dbd0 20 74 68 65 20 73 61 6d 65 20 0a 6e 75 6d 62 65   the same .numbe
1dbe0 72 20 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c 75  r of result colu
1dbf0 6d 6e 73 2e 20 5e 41 73 20 74 68 65 20 63 6f 6d  mns. ^As the com
1dc00 70 6f 6e 65 6e 74 73 20 6f 66 20 61 20 63 6f 6d  ponents of a com
1dc10 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 6d 75 73  pound SELECT mus
1dc20 74 0a 62 65 20 73 69 6d 70 6c 65 20 53 45 4c 45  t.be simple SELE
1dc30 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 74  CT statements, t
1dc40 68 65 79 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74  hey may not cont
1dc50 61 69 6e 20 4f 52 44 45 52 20 42 59 20 6f 72 20  ain ORDER BY or 
1dc60 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 2e 0a 5e  LIMIT clauses..^
1dc70 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d  ORDER BY and LIM
1dc80 49 54 20 63 6c 61 75 73 65 73 20 6d 61 79 20 6f  IT clauses may o
1dc90 6e 6c 79 20 6f 63 63 75 72 20 61 74 20 74 68 65  nly occur at the
1dca0 20 65 6e 64 20 6f 66 20 74 68 65 20 65 6e 74 69   end of the enti
1dcb0 72 65 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c 45  re compound.SELE
1dcc0 43 54 2e 20 20 0a 0a 3c 70 3e 5e 41 20 63 6f 6d  CT.  ..<p>^A com
1dcd0 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 63 72 65  pound SELECT cre
1dce0 61 74 65 64 20 75 73 69 6e 67 20 55 4e 49 4f 4e  ated using UNION
1dcf0 20 41 4c 4c 20 6f 70 65 72 61 74 6f 72 20 72 65   ALL operator re
1dd00 74 75 72 6e 73 20 61 6c 6c 20 74 68 65 20 72 6f  turns all the ro
1dd10 77 73 0a 66 72 6f 6d 20 74 68 65 20 53 45 4c 45  ws.from the SELE
1dd20 43 54 20 74 6f 20 74 68 65 20 6c 65 66 74 20 6f  CT to the left o
1dd30 66 20 74 68 65 20 55 4e 49 4f 4e 20 41 4c 4c 20  f the UNION ALL 
1dd40 6f 70 65 72 61 74 6f 72 2c 20 61 6e 64 20 61 6c  operator, and al
1dd50 6c 20 74 68 65 20 72 6f 77 73 0a 66 72 6f 6d 20  l the rows.from 
1dd60 74 68 65 20 53 45 4c 45 43 54 20 74 6f 20 74 68  the SELECT to th
1dd70 65 20 72 69 67 68 74 20 6f 66 20 69 74 2e 20 5e  e right of it. ^
1dd80 54 68 65 20 55 4e 49 4f 4e 20 6f 70 65 72 61 74  The UNION operat
1dd90 6f 72 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d  or works the sam
1dda0 65 20 77 61 79 20 61 73 0a 55 4e 49 4f 4e 20 41  e way as.UNION A
1ddb0 4c 4c 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  LL, except that 
1ddc0 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 61  duplicate rows a
1ddd0 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20  re removed from 
1dde0 74 68 65 20 66 69 6e 61 6c 20 72 65 73 75 6c 74  the final result
1ddf0 20 73 65 74 2e 0a 5e 54 68 65 20 49 4e 54 45 52   set..^The INTER
1de00 53 45 43 54 20 6f 70 65 72 61 74 6f 72 20 72 65  SECT operator re
1de10 74 75 72 6e 73 20 74 68 65 20 69 6e 74 65 72 73  turns the inters
1de20 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 72 65  ection of the re
1de30 73 75 6c 74 73 20 6f 66 20 74 68 65 20 6c 65 66  sults of the lef
1de40 74 20 61 6e 64 0a 72 69 67 68 74 20 53 45 4c 45  t and.right SELE
1de50 43 54 73 2e 20 20 5e 54 68 65 20 45 58 43 45 50  CTs.  ^The EXCEP
1de60 54 20 6f 70 65 72 61 74 6f 72 20 72 65 74 75 72  T operator retur
1de70 6e 73 20 74 68 65 20 73 75 62 73 65 74 20 6f 66  ns the subset of
1de80 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62   rows returned b
1de90 79 20 74 68 65 0a 6c 65 66 74 20 53 45 4c 45 43  y the.left SELEC
1dea0 54 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 61  T that are not a
1deb0 6c 73 6f 20 72 65 74 75 72 6e 65 64 20 62 79 20  lso returned by 
1dec0 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 53  the right-hand S
1ded0 45 4c 45 43 54 2e 20 5e 44 75 70 6c 69 63 61 74  ELECT. ^Duplicat
1dee0 65 0a 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76  e.rows are remov
1def0 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65 73 75  ed from the resu
1df00 6c 74 73 20 6f 66 20 49 4e 54 45 52 53 45 43 54  lts of INTERSECT
1df10 20 61 6e 64 20 45 58 43 45 50 54 20 6f 70 65 72   and EXCEPT oper
1df20 61 74 6f 72 73 20 62 65 66 6f 72 65 20 74 68 65  ators before the
1df30 0a 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 72  .result set is r
1df40 65 74 75 72 6e 65 64 2e 0a 0a 3c 70 3e 5e 46 6f  eturned...<p>^Fo
1df50 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
1df60 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 64 75  f determining du
1df70 70 6c 69 63 61 74 65 20 72 6f 77 73 20 66 6f 72  plicate rows for
1df80 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
1df90 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c 45 43 54 20  compound.SELECT 
1dfa0 6f 70 65 72 61 74 6f 72 73 2c 20 4e 55 4c 4c 20  operators, NULL 
1dfb0 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69  values are consi
1dfc0 64 65 72 65 64 20 65 71 75 61 6c 20 74 6f 20 6f  dered equal to o
1dfd0 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75 65 73  ther NULL values
1dfe0 20 61 6e 64 0a 64 69 73 74 69 6e 63 74 20 66 72   and.distinct fr
1dff0 6f 6d 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20  om all non-NULL 
1e000 76 61 6c 75 65 73 2e 20 5e 54 68 65 20 63 6f 6c  values. ^The col
1e010 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
1e020 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20  used to compare 
1e030 0a 74 77 6f 20 74 65 78 74 20 76 61 6c 75 65 73  .two text values
1e040 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61   is determined a
1e050 73 20 69 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  s if the columns
1e060 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64   of the left and
1e070 20 72 69 67 68 74 2d 68 61 6e 64 0a 53 45 4c 45   right-hand.SELE
1e080 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77 65  CT statements we
1e090 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20  re the left and 
1e0a0 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61  right-hand opera
1e0b0 6e 64 73 20 6f 66 20 74 68 65 20 65 71 75 61 6c  nds of the equal
1e0c0 73 20 28 3d 29 0a 6f 70 65 72 61 74 6f 72 2c 20  s (=).operator, 
1e0d0 65 78 63 65 70 74 20 74 68 61 74 20 67 72 65 61  except that grea
1e0e0 74 65 72 20 70 72 65 63 65 64 65 6e 63 65 20 69  ter precedence i
1e0f0 73 20 6e 6f 74 20 61 73 73 69 67 6e 65 64 20 74  s not assigned t
1e100 6f 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a 73  o a collation .s
1e110 65 71 75 65 6e 63 65 20 73 70 65 63 69 66 69 65  equence specifie
1e120 64 20 77 69 74 68 20 74 68 65 20 70 6f 73 74 66  d with the postf
1e130 69 78 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61  ix COLLATE opera
1e140 74 6f 72 2e 20 5e 4e 6f 20 61 66 66 69 6e 69 74  tor. ^No affinit
1e150 79 0a 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  y.transformation
1e160 73 20 61 72 65 20 61 70 70 6c 69 65 64 20 74 6f  s are applied to
1e170 20 61 6e 79 20 76 61 6c 75 65 73 20 77 68 65 6e   any values when
1e180 20 63 6f 6d 70 61 72 69 6e 67 20 72 6f 77 73 20   comparing rows 
1e190 61 73 20 70 61 72 74 20 6f 66 20 61 0a 63 6f 6d  as part of a.com
1e1a0 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 20 0a 0a  pound SELECT. ..
1e1b0 3c 70 3e 5e 28 57 68 65 6e 20 74 68 72 65 65 20  <p>^(When three 
1e1c0 6f 72 20 6d 6f 72 65 20 73 69 6d 70 6c 65 20 53  or more simple S
1e1d0 45 4c 45 43 54 73 20 61 72 65 20 63 6f 6e 6e 65  ELECTs are conne
1e1e0 63 74 65 64 20 69 6e 74 6f 20 61 20 63 6f 6d 70  cted into a comp
1e1f0 6f 75 6e 64 20 53 45 4c 45 43 54 2c 0a 74 68 65  ound SELECT,.the
1e200 79 20 67 72 6f 75 70 20 66 72 6f 6d 20 6c 65 66  y group from lef
1e210 74 20 74 6f 20 72 69 67 68 74 2e 20 49 6e 20 6f  t to right. In o
1e220 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 22  ther words, if "
1e230 41 22 2c 20 22 42 22 20 61 6e 64 20 22 43 22 20  A", "B" and "C" 
1e240 61 72 65 20 61 6c 6c 0a 73 69 6d 70 6c 65 20 53  are all.simple S
1e250 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
1e260 2c 20 28 41 20 6f 70 20 42 20 6f 70 20 43 29 20  , (A op B op C) 
1e270 69 73 20 70 72 6f 63 65 73 73 65 64 20 61 73 20  is processed as 
1e280 28 28 41 20 6f 70 20 42 29 20 6f 70 20 43 29 2e  ((A op B) op C).
1e290 29 5e 0a 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 4f 52  )^..</p>..<h3>OR
1e2a0 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54  DER BY and LIMIT
1e2b0 2f 4f 46 46 53 45 54 20 43 6c 61 75 73 65 73 3c  /OFFSET Clauses<
1e2c0 2f 68 33 3e 0a 0a 3c 70 3e 49 66 20 61 20 53 45  /h3>..<p>If a SE
1e2d0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 74  LECT statement t
1e2e0 68 61 74 20 72 65 74 75 72 6e 73 20 6d 6f 72 65  hat returns more
1e2f0 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 64 6f   than one row do
1e300 65 73 20 6e 6f 74 20 68 61 76 65 20 61 6e 0a 4f  es not have an.O
1e310 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20  RDER BY clause, 
1e320 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69  the order in whi
1e330 63 68 20 74 68 65 20 72 6f 77 73 20 61 72 65 20  ch the rows are 
1e340 72 65 74 75 72 6e 65 64 20 69 73 20 75 6e 64 65  returned is unde
1e350 66 69 6e 65 64 2e 0a 4f 72 2c 20 69 66 20 61 20  fined..Or, if a 
1e360 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1e370 20 64 6f 65 73 20 68 61 76 65 20 61 6e 20 4f 52   does have an OR
1e380 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74  DER BY clause, t
1e390 68 65 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 0a  hen the list of.
1e3a0 65 78 70 72 65 73 73 69 6f 6e 73 20 61 74 74 61  expressions atta
1e3b0 63 68 65 64 20 74 6f 20 74 68 65 20 4f 52 44 45  ched to the ORDE
1e3c0 52 20 42 59 20 64 65 74 65 72 6d 69 6e 65 20 74  R BY determine t
1e3d0 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63  he order in whic
1e3e0 68 20 72 6f 77 73 0a 61 72 65 20 72 65 74 75 72  h rows.are retur
1e3f0 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e  ned to the user.
1e400 20 5e 52 6f 77 73 20 61 72 65 20 66 69 72 73 74   ^Rows are first
1e410 20 73 6f 72 74 65 64 20 62 61 73 65 64 20 6f 6e   sorted based on
1e420 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a   the results of.
1e430 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 6c  evaluating the l
1e440 65 66 74 2d 6d 6f 73 74 20 65 78 70 72 65 73 73  eft-most express
1e450 69 6f 6e 20 69 6e 20 74 68 65 20 4f 52 44 45 52  ion in the ORDER
1e460 20 42 59 20 6c 69 73 74 2c 20 74 68 65 6e 20 74   BY list, then t
1e470 69 65 73 20 61 72 65 20 62 72 6f 6b 65 6e 0a 62  ies are broken.b
1e480 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  y evaluating the
1e490 20 73 65 63 6f 6e 64 20 6c 65 66 74 2d 6d 6f 73   second left-mos
1e4a0 74 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  t expression and
1e4b0 20 73 6f 20 6f 6e 2e 20 54 68 65 20 6f 72 64 65   so on. The orde
1e4c0 72 20 69 6e 20 77 68 69 63 68 0a 74 77 6f 20 72  r in which.two r
1e4d0 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 61 6c  ows for which al
1e4e0 6c 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  l ORDER BY expre
1e4f0 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 20  ssions evaluate 
1e500 74 6f 20 65 71 75 61 6c 20 76 61 6c 75 65 73 20  to equal values 
1e510 61 72 65 0a 72 65 74 75 72 6e 65 64 20 69 73 20  are.returned is 
1e520 75 6e 64 65 66 69 6e 65 64 2e 20 5e 45 61 63 68  undefined. ^Each
1e530 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
1e540 73 69 6f 6e 20 6d 61 79 20 62 65 20 6f 70 74 69  sion may be opti
1e550 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a  onally followed.
1e560 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 6b 65  by one of the ke
1e570 79 77 6f 72 64 73 20 41 53 43 20 28 73 6d 61 6c  ywords ASC (smal
1e580 6c 65 72 20 76 61 6c 75 65 73 20 61 72 65 20 72  ler values are r
1e590 65 74 75 72 6e 65 64 20 66 69 72 73 74 29 20 6f  eturned first) o
1e5a0 72 20 44 45 53 43 20 28 6c 61 72 67 65 72 0a 76  r DESC (larger.v
1e5b0 61 6c 75 65 73 20 61 72 65 20 72 65 74 75 72 6e  alues are return
1e5c0 65 64 20 66 69 72 73 74 29 2e 20 5e 49 66 20 6e  ed first). ^If n
1e5d0 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45  either ASC or DE
1e5e0 53 43 20 61 72 65 20 73 70 65 63 69 66 69 65 64  SC are specified
1e5f0 2c 20 72 6f 77 73 0a 61 72 65 20 73 6f 72 74 65  , rows.are sorte
1e600 64 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 28  d in ascending (
1e610 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73 20 66  smaller values f
1e620 69 72 73 74 29 20 6f 72 64 65 72 20 62 79 20 64  irst) order by d
1e630 65 66 61 75 6c 74 2e 0a 0a 3c 70 3e 45 61 63 68  efault...<p>Each
1e640 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
1e650 73 69 6f 6e 20 69 73 20 70 72 6f 63 65 73 73 65  sion is processe
1e660 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70  d as follows:</p
1e670 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e  >..<ol>.<li><p>^
1e680 49 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  If the ORDER BY 
1e690 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
1e6a0 63 6f 6e 73 74 61 6e 74 20 69 6e 74 65 67 65 72  constant integer
1e6b0 20 4b 20 74 68 65 6e 20 74 68 65 0a 65 78 70 72   K then the.expr
1e6c0 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64  ession is consid
1e6d0 65 72 65 64 20 61 6e 20 61 6c 69 61 73 20 66 6f  ered an alias fo
1e6e0 72 20 74 68 65 20 4b 2d 74 68 20 63 6f 6c 75 6d  r the K-th colum
1e6f0 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  n of the result 
1e700 73 65 74 0a 28 63 6f 6c 75 6d 6e 73 20 61 72 65  set.(columns are
1e710 20 6e 75 6d 62 65 72 65 64 20 66 72 6f 6d 20 6c   numbered from l
1e720 65 66 74 20 74 6f 20 72 69 67 68 74 20 73 74 61  eft to right sta
1e730 72 74 69 6e 67 20 77 69 74 68 20 31 29 2e 0a 0a  rting with 1)...
1e740 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f  <li><p>^If the O
1e750 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
1e760 6f 6e 20 69 73 20 61 6e 20 69 64 65 6e 74 69 66  on is an identif
1e770 69 65 72 20 74 68 61 74 20 63 6f 72 72 65 73 70  ier that corresp
1e780 6f 6e 64 73 20 74 6f 0a 74 68 65 20 61 6c 69 61  onds to.the alia
1e790 73 20 6f 66 20 6f 6e 65 20 6f 66 20 74 68 65 20  s of one of the 
1e7a0 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73 2c 20  output columns, 
1e7b0 74 68 65 6e 20 74 68 65 20 65 78 70 72 65 73 73  then the express
1e7c0 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65 72 65  ion is considere
1e7d0 64 0a 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  d.an alias for t
1e7e0 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 0a 3c 6c 69  hat column...<li
1e7f0 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20  ><p>^Otherwise, 
1e800 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  if the ORDER BY 
1e810 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
1e820 79 20 6f 74 68 65 72 20 65 78 70 72 65 73 73 69  y other expressi
1e830 6f 6e 2c 20 69 74 20 0a 69 73 20 65 76 61 6c 75  on, it .is evalu
1e840 61 74 65 64 20 61 6e 64 20 74 68 65 20 74 68 65  ated and the the
1e850 20 72 65 74 75 72 6e 65 64 20 76 61 6c 75 65 20   returned value 
1e860 75 73 65 64 20 74 6f 20 6f 72 64 65 72 20 74 68  used to order th
1e870 65 20 6f 75 74 70 75 74 20 72 6f 77 73 2e 20 5e  e output rows. ^
1e880 49 66 0a 74 68 65 20 53 45 4c 45 43 54 20 73 74  If.the SELECT st
1e890 61 74 65 6d 65 6e 74 20 69 73 20 61 20 73 69 6d  atement is a sim
1e8a0 70 6c 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e  ple SELECT, then
1e8b0 20 61 6e 20 4f 52 44 45 52 20 42 59 20 6d 61 79   an ORDER BY may
1e8c0 20 63 6f 6e 74 61 69 6e 20 61 6e 79 0a 61 72 62   contain any.arb
1e8d0 69 74 72 61 72 79 20 65 78 70 72 65 73 73 69 6f  itrary expressio
1e8e0 6e 73 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69 66  ns. ^However, if
1e8f0 20 74 68 65 20 53 45 4c 45 43 54 20 69 73 20 61   the SELECT is a
1e900 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54   compound SELECT
1e910 2c 20 74 68 65 6e 0a 4f 52 44 45 52 20 42 59 20  , then.ORDER BY 
1e920 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74  expressions that
1e930 20 61 72 65 20 6e 6f 74 20 61 6c 69 61 73 65 73   are not aliases
1e940 20 74 6f 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d   to output colum
1e950 6e 73 20 6d 75 73 74 20 62 65 20 65 78 61 63 74  ns must be exact
1e960 6c 79 0a 74 68 65 20 73 61 6d 65 20 61 73 20 61  ly.the same as a
1e970 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65  n expression use
1e980 64 20 61 73 20 61 6e 20 6f 75 74 70 75 74 20 63  d as an output c
1e990 6f 6c 75 6d 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70  olumn..</ol>..<p
1e9a0 3e 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73  >^For the purpos
1e9b0 65 73 20 6f 66 20 73 6f 72 74 69 6e 67 20 72 6f  es of sorting ro
1e9c0 77 73 2c 20 76 61 6c 75 65 73 20 61 72 65 20 63  ws, values are c
1e9d0 6f 6d 70 61 72 65 64 20 69 6e 20 74 68 65 20 73  ompared in the s
1e9e0 61 6d 65 20 77 61 79 0a 61 73 20 66 6f 72 20 5b  ame way.as for [
1e9f0 63 6f 6d 70 61 72 69 73 6f 6e 20 65 78 70 72 65  comparison expre
1ea00 73 73 69 6f 6e 73 5d 2e 20 54 68 65 20 63 6f 6c  ssions]. The col
1ea10 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
1ea20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 0a  used to compare.
1ea30 74 77 6f 20 74 65 78 74 20 76 61 6c 75 65 73 20  two text values 
1ea40 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61 73  is determined as
1ea50 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a   follows:..<ol>.
1ea60 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
1ea70 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
1ea80 73 69 6f 6e 20 69 73 20 61 73 73 69 67 6e 65 64  sion is assigned
1ea90 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71   a collation seq
1eaa0 75 65 6e 63 65 20 75 73 69 6e 67 0a 20 20 74 68  uence using.  th
1eab0 65 20 70 6f 73 74 66 69 78 20 5b 43 4f 4c 4c 41  e postfix [COLLA
1eac0 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74 68  TE operator], th
1ead0 65 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64  en the specified
1eae0 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
1eaf0 6e 63 65 20 69 73 0a 20 20 75 73 65 64 2e 0a 20  nce is.  used.. 
1eb00 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69   <li><p>^Otherwi
1eb10 73 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52  se, if the ORDER
1eb20 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
1eb30 73 20 61 6e 20 61 6c 69 61 73 20 74 6f 20 61 6e  s an alias to an
1eb40 20 65 78 70 72 65 73 73 69 6f 6e 0a 20 20 74 68   expression.  th
1eb50 61 74 20 68 61 73 20 62 65 65 6e 20 61 73 73 69  at has been assi
1eb60 67 6e 65 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e  gned a collation
1eb70 20 73 65 71 75 65 6e 63 65 20 75 73 69 6e 67 20   sequence using 
1eb80 74 68 65 20 70 6f 73 74 66 69 78 20 0a 20 20 5b  the postfix .  [
1eb90 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
1eba0 5d 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 6c  ], then the coll
1ebb0 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 61  ation sequence a
1ebc0 73 73 69 67 6e 65 64 20 74 6f 20 74 68 65 20 61  ssigned to the a
1ebd0 6c 69 61 73 65 64 0a 20 20 65 78 70 72 65 73 73  liased.  express
1ebe0 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 3c  ion is used..  <
1ebf0 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65  li><p>^Otherwise
1ec00 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42  , if the ORDER B
1ec10 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
1ec20 61 20 63 6f 6c 75 6d 6e 20 6f 72 20 61 6e 20 61  a column or an a
1ec30 6c 69 61 73 20 6f 66 0a 20 20 61 6e 20 65 78 70  lias of.  an exp
1ec40 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
1ec50 61 20 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20 74  a column, then t
1ec60 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
1ec70 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 6f  tion sequence fo
1ec80 72 0a 20 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69  r.  the column i
1ec90 73 20 75 73 65 64 2e 20 0a 20 20 3c 6c 69 3e 3c  s used. .  <li><
1eca0 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68  p>^Otherwise, th
1ecb0 65 20 5b 42 49 4e 41 52 59 5d 20 63 6f 6c 6c 61  e [BINARY] colla
1ecc0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73  tion sequence is
1ecd0 20 75 73 65 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70   used..</ol>..<p
1ece0 3e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53  >In a compound S
1ecf0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c  ELECT statement,
1ed00 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65 78   all ORDER BY ex
1ed10 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 68 61  pressions are ha
1ed20 6e 64 6c 65 64 0a 61 73 20 61 6c 69 61 73 65 73  ndled.as aliases
1ed30 20 66 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20   for one of the 
1ed40 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f  result columns o
1ed50 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 53  f the compound S
1ed60 45 4c 45 43 54 2e 0a 5e 28 49 66 20 61 6e 20 4f  ELECT..^(If an O
1ed70 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
1ed80 6f 6e 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74  on is not an int
1ed90 65 67 65 72 20 61 6c 69 61 73 2c 20 74 68 65 6e  eger alias, then
1eda0 20 53 51 4c 69 74 65 20 73 65 61 72 63 68 65 73   SQLite searches
1edb0 0a 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 53  .the left-most S
1edc0 45 4c 45 43 54 20 69 6e 20 74 68 65 20 63 6f 6d  ELECT in the com
1edd0 70 6f 75 6e 64 20 66 6f 72 20 61 20 72 65 73 75  pound for a resu
1ede0 6c 74 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 6d  lt column that m
1edf0 61 74 63 68 65 73 20 65 69 74 68 65 72 0a 74 68  atches either.th
1ee00 65 20 73 65 63 6f 6e 64 20 6f 72 20 74 68 69 72  e second or thir
1ee10 64 20 72 75 6c 65 73 20 61 62 6f 76 65 2e 20 49  d rules above. I
1ee20 66 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  f a match is fou
1ee30 6e 64 2c 20 74 68 65 20 73 65 61 72 63 68 20 73  nd, the search s
1ee40 74 6f 70 73 20 61 6e 64 0a 74 68 65 20 65 78 70  tops and.the exp
1ee50 72 65 73 73 69 6f 6e 20 69 73 20 68 61 6e 64 6c  ression is handl
1ee60 65 64 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66  ed as an alias f
1ee70 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  or the result co
1ee80 6c 75 6d 6e 20 74 68 61 74 20 69 74 20 68 61 73  lumn that it has
1ee90 20 62 65 65 6e 0a 6d 61 74 63 68 65 64 20 61 67   been.matched ag
1eea0 61 69 6e 73 74 2e 20 4f 74 68 65 72 77 69 73 65  ainst. Otherwise
1eeb0 2c 20 74 68 65 20 6e 65 78 74 20 53 45 4c 45 43  , the next SELEC
1eec0 54 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 69  T to the right i
1eed0 73 20 74 72 69 65 64 2c 20 61 6e 64 20 73 6f 20  s tried, and so 
1eee0 6f 6e 2e 29 5e 0a 5e 49 66 20 6e 6f 20 6d 61 74  on.)^.^If no mat
1eef0 63 68 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  ching expression
1ef00 20 63 61 6e 20 62 65 20 66 6f 75 6e 64 20 69 6e   can be found in
1ef10 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75   the result colu
1ef20 6d 6e 73 20 6f 66 20 61 6e 79 0a 63 6f 6e 73 74  mns of any.const
1ef30 69 74 75 65 6e 74 20 53 45 4c 45 43 54 2c 20 69  ituent SELECT, i
1ef40 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e  t is an error. ^
1ef50 45 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65  Each term of the
1ef60 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1ef70 20 69 73 0a 70 72 6f 63 65 73 73 65 64 20 73 65   is.processed se
1ef80 70 61 72 61 74 65 6c 79 20 61 6e 64 20 6d 61 79  parately and may
1ef90 20 62 65 20 6d 61 74 63 68 65 64 20 61 67 61 69   be matched agai
1efa0 6e 73 74 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  nst result colum
1efb0 6e 73 20 66 72 6f 6d 20 64 69 66 66 65 72 65 6e  ns from differen
1efc0 74 0a 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  t.SELECT stateme
1efd0 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f  nts in the compo
1efe0 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  und.</p>..<p>The
1eff0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 69 73   LIMIT clause is
1f000 20 75 73 65 64 20 74 6f 20 70 6c 61 63 65 20 61   used to place a
1f010 6e 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e  n upper bound on
1f020 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
1f030 6f 77 73 0a 72 65 74 75 72 6e 65 64 20 62 79 20  ows.returned by 
1f040 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
1f050 6e 74 2e 20 5e 41 6e 79 20 73 63 61 6c 61 72 20  nt. ^Any scalar 
1f060 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 62  expression may b
1f070 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 0a 4c  e used in the .L
1f080 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 73 6f 20  IMIT clause, so 
1f090 6c 6f 6e 67 20 61 73 20 69 74 20 65 76 61 6c 75  long as it evalu
1f0a0 61 74 65 73 20 74 6f 20 61 6e 20 69 6e 74 65 67  ates to an integ
1f0b0 65 72 20 6f 72 20 61 20 76 61 6c 75 65 20 74 68  er or a value th
1f0c0 61 74 20 63 61 6e 20 62 65 0a 6c 6f 73 73 6c 65  at can be.lossle
1f0d0 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
1f0e0 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 5e 49  o an integer. ^I
1f0f0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
1f100 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20   evaluates to a 
1f110 4e 55 4c 4c 20 0a 76 61 6c 75 65 20 6f 72 20 61  NULL .value or a
1f120 6e 79 20 6f 74 68 65 72 20 76 61 6c 75 65 20 74  ny other value t
1f130 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f  hat cannot be lo
1f140 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74  sslessly convert
1f150 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  ed to an integer
1f160 2c 20 61 6e 0a 65 72 72 6f 72 20 69 73 20 72 65  , an.error is re
1f170 74 75 72 6e 65 64 2e 20 5e 49 66 20 74 68 65 20  turned. ^If the 
1f180 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e  LIMIT expression
1f190 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20   evaluates to a 
1f1a0 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 2c 0a  negative value,.
1f1b0 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6e 6f  then there is no
1f1c0 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20   upper bound on 
1f1d0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
1f1e0 77 73 20 72 65 74 75 72 6e 65 64 2e 20 5e 4f 74  ws returned. ^Ot
1f1f0 68 65 72 77 69 73 65 2c 20 74 68 65 0a 53 45 4c  herwise, the.SEL
1f200 45 43 54 20 72 65 74 75 72 6e 73 20 74 68 65 20  ECT returns the 
1f210 66 69 72 73 74 20 4e 20 72 6f 77 73 20 6f 66 20  first N rows of 
1f220 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 20 6f  its result set o
1f230 6e 6c 79 2c 20 77 68 65 72 65 20 4e 20 69 73 20  nly, where N is 
1f240 74 68 65 20 76 61 6c 75 65 0a 74 68 61 74 20 74  the value.that t
1f250 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  he LIMIT express
1f260 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f  ion evaluates to
1f270 2e 20 5e 4f 72 2c 20 69 66 20 74 68 65 20 53 45  . ^Or, if the SE
1f280 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 77  LECT statement w
1f290 6f 75 6c 64 0a 72 65 74 75 72 6e 20 6c 65 73 73  ould.return less
1f2a0 20 74 68 61 6e 20 4e 20 72 6f 77 73 20 77 69 74   than N rows wit
1f2b0 68 6f 75 74 20 61 20 4c 49 4d 49 54 20 63 6c 61  hout a LIMIT cla
1f2c0 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 65 6e  use, then the en
1f2d0 74 69 72 65 20 72 65 73 75 6c 74 20 73 65 74 20  tire result set 
1f2e0 69 73 0a 72 65 74 75 72 6e 65 64 2e 20 0a 0a 3c  is.returned. ..<
1f2f0 70 3e 5e 54 68 65 20 65 78 70 72 65 73 73 69 6f  p>^The expressio
1f300 6e 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  n attached to th
1f310 65 20 6f 70 74 69 6f 6e 61 6c 20 4f 46 46 53 45  e optional OFFSE
1f320 54 20 63 6c 61 75 73 65 20 74 68 61 74 20 6d 61  T clause that ma
1f330 79 20 66 6f 6c 6c 6f 77 20 61 0a 4c 49 4d 49 54  y follow a.LIMIT
1f340 20 63 6c 61 75 73 65 20 6d 75 73 74 20 61 6c 73   clause must als
1f350 6f 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61 6e  o evaluate to an
1f360 20 69 6e 74 65 67 65 72 2c 20 6f 72 20 61 20 76   integer, or a v
1f370 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65  alue that can be
1f380 0a 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76  .losslessly conv
1f390 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65  erted to an inte
1f3a0 67 65 72 2e 20 5e 49 66 20 61 6e 20 65 78 70 72  ger. ^If an expr
1f3b0 65 73 73 69 6f 6e 20 68 61 73 20 61 6e 20 4f 46  ession has an OF
1f3c0 46 53 45 54 20 63 6c 61 75 73 65 2c 0a 74 68 65  FSET clause,.the
1f3d0 6e 20 74 68 65 20 66 69 72 73 74 20 4d 20 72 6f  n the first M ro
1f3e0 77 73 20 61 72 65 20 6f 6d 69 74 74 65 64 20 66  ws are omitted f
1f3f0 72 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 20 73  rom the result s
1f400 65 74 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  et returned by t
1f410 68 65 20 53 45 4c 45 43 54 0a 73 74 61 74 65 6d  he SELECT.statem
1f420 65 6e 74 20 61 6e 64 20 74 68 65 20 6e 65 78 74  ent and the next
1f430 20 4e 20 72 6f 77 73 20 61 72 65 20 72 65 74 75   N rows are retu
1f440 72 6e 65 64 2c 20 77 68 65 72 65 20 4d 20 61 6e  rned, where M an
1f450 64 20 4e 20 61 72 65 20 74 68 65 20 76 61 6c 75  d N are the valu
1f460 65 73 20 74 68 61 74 0a 74 68 65 20 4f 46 46 53  es that.the OFFS
1f470 45 54 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61  ET and LIMIT cla
1f480 75 73 65 73 20 65 76 61 6c 75 61 74 65 20 74 6f  uses evaluate to
1f490 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
1f4a0 5e 4f 72 2c 20 69 66 20 74 68 65 20 53 45 4c 45  ^Or, if the SELE
1f4b0 43 54 0a 77 6f 75 6c 64 20 72 65 74 75 72 6e 20  CT.would return 
1f4c0 6c 65 73 73 20 74 68 61 6e 20 4d 2b 4e 20 72 6f  less than M+N ro
1f4d0 77 73 20 69 66 20 69 74 20 64 69 64 20 6e 6f 74  ws if it did not
1f4e0 20 68 61 76 65 20 61 20 4c 49 4d 49 54 20 63 6c   have a LIMIT cl
1f4f0 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 66  ause, then the.f
1f500 69 72 73 74 20 4d 20 72 6f 77 73 20 61 72 65 20  irst M rows are 
1f510 73 6b 69 70 70 65 64 20 61 6e 64 20 74 68 65 20  skipped and the 
1f520 72 65 6d 61 69 6e 69 6e 67 20 72 6f 77 73 20 28  remaining rows (
1f530 69 66 20 61 6e 79 29 20 61 72 65 20 72 65 74 75  if any) are retu
1f540 72 6e 65 64 2e 20 5e 49 66 20 74 68 65 0a 4f 46  rned. ^If the.OF
1f550 46 53 45 54 20 63 6c 61 75 73 65 20 65 76 61 6c  FSET clause eval
1f560 75 61 74 65 73 20 74 6f 20 61 20 6e 65 67 61 74  uates to a negat
1f570 69 76 65 20 76 61 6c 75 65 2c 20 74 68 65 20 72  ive value, the r
1f580 65 73 75 6c 74 73 20 61 72 65 20 74 68 65 20 73  esults are the s
1f590 61 6d 65 20 61 73 20 69 66 20 69 74 0a 68 61 64  ame as if it.had
1f5a0 20 65 76 61 6c 75 61 74 65 64 20 74 6f 20 7a 65   evaluated to ze
1f5b0 72 6f 2e 0a 0a 3c 70 3e 5e 49 6e 73 74 65 61 64  ro...<p>^Instead
1f5c0 20 6f 66 20 61 20 73 65 70 61 72 61 74 65 20 4f   of a separate O
1f5d0 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20 74 68  FFSET clause, th
1f5e0 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 6d  e LIMIT clause m
1f5f0 61 79 20 73 70 65 63 69 66 79 20 74 77 6f 0a 73  ay specify two.s
1f600 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e  calar expression
1f610 73 20 73 65 70 61 72 61 74 65 64 20 62 79 20 61  s separated by a
1f620 20 63 6f 6d 6d 61 2e 20 5e 49 6e 20 74 68 69 73   comma. ^In this
1f630 20 63 61 73 65 2c 20 74 68 65 20 66 69 72 73 74   case, the first
1f640 20 65 78 70 72 65 73 73 69 6f 6e 0a 69 73 20 75   expression.is u
1f650 73 65 64 20 61 73 20 74 68 65 20 4f 46 46 53 45  sed as the OFFSE
1f660 54 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  T expression and
1f670 20 74 68 65 20 73 65 63 6f 6e 64 20 61 73 20 74   the second as t
1f680 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  he LIMIT express
1f690 69 6f 6e 2e 0a 54 68 69 73 20 69 73 20 63 6f 75  ion..This is cou
1f6a0 6e 74 65 72 2d 69 6e 74 75 69 74 69 76 65 2c 20  nter-intuitive, 
1f6b0 61 73 20 77 68 65 6e 20 75 73 69 6e 67 20 74 68  as when using th
1f6c0 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20  e OFFSET clause 
1f6d0 74 68 65 20 73 65 63 6f 6e 64 20 6f 66 0a 74 68  the second of.th
1f6e0 65 20 74 77 6f 20 65 78 70 72 65 73 73 69 6f 6e  e two expression
1f6f0 73 20 69 73 20 74 68 65 20 4f 46 46 53 45 54 20  s is the OFFSET 
1f700 61 6e 64 20 74 68 65 20 66 69 72 73 74 20 74 68  and the first th
1f710 65 20 4c 49 4d 49 54 2e 20 54 68 69 73 20 69 73  e LIMIT. This is
1f720 20 69 6e 74 65 6e 74 69 6f 6e 61 6c 0a 2d 20 69   intentional.- i
1f730 74 20 6d 61 78 69 6d 69 7a 65 73 20 63 6f 6d 70  t maximizes comp
1f740 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 6f  atibility with o
1f750 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73  ther SQL databas
1f760 65 20 73 79 73 74 65 6d 73 2e 0a 0a 3c 74 63 6c  e systems...<tcl
1f770 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
1f780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f7a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f7b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f7c0 0a 53 65 63 74 69 6f 6e 20 55 50 44 41 54 45 20  .Section UPDATE 
1f7d0 75 70 64 61 74 65 20 7b 55 50 44 41 54 45 20 2a  update {UPDATE *
1f7e0 55 50 44 41 54 45 73 7d 0a 0a 42 75 62 62 6c 65  UPDATEs}..Bubble
1f7f0 44 69 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73  Diagram update-s
1f800 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61 67  tmt 1.BubbleDiag
1f810 72 61 6d 20 71 75 61 6c 69 66 69 65 64 2d 74 61  ram qualified-ta
1f820 62 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e 0a  ble-name.</tcl>.
1f830 0a 3c 70 3e 5e 54 68 65 20 55 50 44 41 54 45 20  .<p>^The UPDATE 
1f840 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65  statement is use
1f850 64 20 74 6f 20 63 68 61 6e 67 65 20 74 68 65 20  d to change the 
1f860 76 61 6c 75 65 20 6f 66 20 63 6f 6c 75 6d 6e 73  value of columns
1f870 20 69 6e 20 0a 73 65 6c 65 63 74 65 64 20 72 6f   in .selected ro
1f880 77 73 20 6f 66 20 61 20 74 61 62 6c 65 2e 20 20  ws of a table.  
1f890 5e 45 61 63 68 20 61 73 73 69 67 6e 6d 65 6e 74  ^Each assignment
1f8a0 20 69 6e 20 61 6e 20 55 50 44 41 54 45 20 73 70   in an UPDATE sp
1f8b0 65 63 69 66 69 65 73 0a 61 20 63 6f 6c 75 6d 6e  ecifies.a column
1f8c0 20 6e 61 6d 65 20 74 6f 20 74 68 65 20 6c 65 66   name to the lef
1f8d0 74 20 6f 66 20 74 68 65 20 65 71 75 61 6c 73 20  t of the equals 
1f8e0 73 69 67 6e 20 61 6e 64 20 61 6e 20 61 72 62 69  sign and an arbi
1f8f0 74 72 61 72 79 20 65 78 70 72 65 73 73 69 6f 6e  trary expression
1f900 0a 74 6f 20 74 68 65 20 72 69 67 68 74 2e 20 20  .to the right.  
1f910 5e 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73  ^The expressions
1f920 20 6d 61 79 20 75 73 65 20 74 68 65 20 76 61 6c   may use the val
1f930 75 65 73 20 6f 66 20 6f 74 68 65 72 20 63 6f 6c  ues of other col
1f940 75 6d 6e 73 2e 0a 5e 41 6c 6c 20 65 78 70 72 65  umns..^All expre
1f950 73 73 69 6f 6e 73 20 61 72 65 20 65 76 61 6c 75  ssions are evalu
1f960 61 74 65 64 20 62 65 66 6f 72 65 20 61 6e 79 20  ated before any 
1f970 61 73 73 69 67 6e 6d 65 6e 74 73 20 61 72 65 20  assignments are 
1f980 6d 61 64 65 2e 0a 5e 41 20 57 48 45 52 45 20 63  made..^A WHERE c
1f990 6c 61 75 73 65 20 63 61 6e 20 62 65 20 75 73 65  lause can be use
1f9a0 64 20 74 6f 20 72 65 73 74 72 69 63 74 20 77 68  d to restrict wh
1f9b0 69 63 68 20 72 6f 77 73 20 61 72 65 20 75 70 64  ich rows are upd
1f9c0 61 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  ated.</p>..<p>^T
1f9d0 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66  he optional conf
1f9e0 6c 69 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f  lict-clause allo
1f9f0 77 73 20 74 68 65 20 73 70 65 63 69 66 69 63 61  ws the specifica
1fa00 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c 74 65 72  tion of an alter
1fa10 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e  native.constrain
1fa20 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  t conflict resol
1fa30 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
1fa40 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20 74 68  to use during th
1fa50 69 73 20 6f 6e 65 20 55 50 44 41 54 45 20 63 6f  is one UPDATE co
1fa60 6d 6d 61 6e 64 2e 0a 53 65 65 20 74 68 65 20 73  mmand..See the s
1fa70 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 0a 5b 4f  ection titled.[O
1fa80 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20  N CONFLICT] for 
1fa90 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
1faa0 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33  mation.</p>..<h3
1fab0 3e 52 65 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e  >Restrictions on
1fac0 20 55 50 44 41 54 45 20 53 74 61 74 65 6d 65 6e   UPDATE Statemen
1fad0 74 73 20 57 69 74 68 69 6e 20 43 52 45 41 54 45  ts Within CREATE
1fae0 20 54 52 49 47 47 45 52 3c 2f 68 33 3e 0a 0a 3c   TRIGGER</h3>..<
1faf0 70 3e 5e 54 68 65 72 65 20 61 72 65 20 61 64 64  p>^There are add
1fb00 69 74 69 6f 6e 61 6c 20 73 79 6e 74 61 78 20 72  itional syntax r
1fb10 65 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20 55  estrictions on U
1fb20 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 73  PDATE statements
1fb30 20 74 68 61 74 0a 6f 63 63 75 72 20 77 69 74 68   that.occur with
1fb40 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61  in the body of a
1fb50 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   [CREATE TRIGGER
1fb60 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 5e 54  ] statement.  ^T
1fb70 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65  he <i>table-name
1fb80 3c 2f 69 3e 0a 6f 66 20 74 68 65 20 55 50 44 41  </i>.of the UPDA
1fb90 54 45 20 6d 75 73 74 20 62 65 20 75 6e 71 75 61  TE must be unqua
1fba0 6c 69 66 69 65 64 2e 20 0a 5e 28 49 6e 20 6f 74  lified. .^(In ot
1fbb0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 3c  her words, the <
1fbc0 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c  i>database-name<
1fbd0 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66  /i><b>.</b> pref
1fbe0 69 78 20 0a 6f 6e 20 74 68 65 20 74 61 62 6c 65  ix .on the table
1fbf0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 55 50 44   name of the UPD
1fc00 41 54 45 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  ATE is not allow
1fc10 65 64 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ed within trigge
1fc20 72 73 2e 29 5e 0a 5e 54 68 65 20 74 61 62 6c 65  rs.)^.^The table
1fc30 20 74 6f 20 62 65 20 75 70 64 61 74 65 64 20 6d   to be updated m
1fc40 75 73 74 20 62 65 20 69 6e 20 74 68 65 20 73 61  ust be in the sa
1fc50 6d 65 0a 64 61 74 61 62 61 73 65 20 61 73 20 74  me.database as t
1fc60 68 65 20 74 61 62 6c 65 20 74 6f 20 77 68 69 63  he table to whic
1fc70 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73  h the trigger is
1fc80 20 61 74 74 61 63 68 65 64 2e 3c 2f 70 3e 0a 0a   attached.</p>..
1fc90 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20  <p>^The INDEXED 
1fca0 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58  BY and NOT INDEX
1fcb0 45 44 20 63 6c 61 75 73 65 73 20 61 72 65 20 6e  ED clauses are n
1fcc0 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 55 50  ot allowed on UP
1fcd0 44 41 54 45 0a 73 74 61 74 65 6d 65 6e 74 73 20  DATE.statements 
1fce0 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
1fcf0 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49  </p>..<p>^The LI
1fd00 4d 49 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55  MIT clause for U
1fd10 50 44 41 54 45 20 69 73 20 75 6e 73 75 70 70 6f  PDATE is unsuppo
1fd20 72 74 65 64 20 77 69 74 68 69 6e 20 74 72 69 67  rted within trig
1fd30 67 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 4f  gers.</p>..<h3>O
1fd40 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 61 6e  ptional LIMIT an
1fd50 64 20 4f 52 44 45 52 20 42 59 20 43 6c 61 75 73  d ORDER BY Claus
1fd60 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66  es</h3>..<p>^(If
1fd70 20 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74   SQLite is built
1fd80 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49 54   with the [SQLIT
1fd90 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
1fda0 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f  DELETE_LIMIT].co
1fdb0 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
1fdc0 6e 20 74 68 65 6e 20 74 68 65 20 73 79 6e 74 61  n then the synta
1fdd0 78 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  x of the UPDATE 
1fde0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78 74  statement is ext
1fdf0 65 6e 64 65 64 0a 77 69 74 68 20 6f 70 74 69 6f  ended.with optio
1fe00 6e 61 6c 20 4f 52 44 45 52 20 42 59 20 61 6e 64  nal ORDER BY and
1fe10 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 29 5e   LIMIT clauses)^
1fe20 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e   as follows:</p>
1fe30 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61  ..<tcl>BubbleDia
1fe40 67 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d 74  gram update-stmt
1fe50 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a  -limited</tcl>..
1fe60 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c  <p>^The optional
1fe70 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 63 61   LIMIT clause ca
1fe80 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6c 69 6d  n be used to lim
1fe90 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  it the number of
1fea0 0a 72 6f 77 73 20 6d 6f 64 69 66 69 65 64 2c 20  .rows modified, 
1feb0 61 6e 64 20 74 68 65 72 65 62 79 20 6c 69 6d 69  and thereby limi
1fec0 74 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  t the size of th
1fed0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e  e transaction..^
1fee0 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
1fef0 75 73 65 20 6f 6e 20 61 6e 20 55 50 44 41 54 45  use on an UPDATE
1ff00 20 73 74 61 74 65 6d 65 6e 74 0a 69 73 20 75 73   statement.is us
1ff10 65 64 20 6f 6e 6c 79 20 74 6f 20 64 65 74 65 72  ed only to deter
1ff20 6d 69 6e 65 20 77 68 69 63 68 20 72 6f 77 73 20  mine which rows 
1ff30 66 61 6c 6c 0a 77 69 74 68 69 6e 20 74 68 65 20  fall.within the 
1ff40 4c 49 4d 49 54 2e 20 20 5e 54 68 65 20 6f 72 64  LIMIT.  ^The ord
1ff50 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73  er in which rows
1ff60 20 61 72 65 20 6d 6f 64 69 66 69 65 64 20 69 73   are modified is
1ff70 20 61 72 62 69 74 72 61 72 79 0a 61 6e 64 20 69   arbitrary.and i
1ff80 73 20 6e 6f 74 20 64 65 74 65 72 6d 69 6e 65 64  s not determined
1ff90 20 62 79 20 74 68 65 20 4f 52 44 45 52 20 42 59   by the ORDER BY
1ffa0 20 63 6c 61 75 73 65 2e 3c 2f 70 3e 0a 0a 3c 74   clause.</p>..<t
1ffb0 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
1ffc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ffd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ffe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fff0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20000 23 23 0a 53 65 63 74 69 6f 6e 20 56 41 43 55 55  ##.Section VACUU
20010 4d 20 76 61 63 75 75 6d 20 56 41 43 55 55 4d 0a  M vacuum VACUUM.
20020 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 76  .BubbleDiagram v
20030 61 63 75 75 6d 2d 73 74 6d 74 20 31 0a 3c 2f 74  acuum-stmt 1.</t
20040 63 6c 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 61 6e  cl>..<p>^When an
20050 20 6f 62 6a 65 63 74 20 28 74 61 62 6c 65 2c 20   object (table, 
20060 69 6e 64 65 78 2c 20 74 72 69 67 67 65 72 2c 20  index, trigger, 
20070 6f 72 20 76 69 65 77 29 20 69 73 20 64 72 6f 70  or view) is drop
20080 70 65 64 20 66 72 6f 6d 20 74 68 65 20 0a 64 61  ped from the .da
20090 74 61 62 61 73 65 2c 20 69 74 20 6c 65 61 76 65  tabase, it leave
200a0 73 20 62 65 68 69 6e 64 20 65 6d 70 74 79 20 73  s behind empty s
200b0 70 61 63 65 2e 20 0a 5e 54 68 69 73 20 65 6d 70  pace. .^This emp
200c0 74 79 20 73 70 61 63 65 20 77 69 6c 6c 20 62 65  ty space will be
200d0 20 72 65 75 73 65 64 20 74 68 65 20 6e 65 78 74   reused the next
200e0 20 74 69 6d 65 20 6e 65 77 20 69 6e 66 6f 72 6d   time new inform
200f0 61 74 69 6f 6e 20 69 73 0a 61 64 64 65 64 20 74  ation is.added t
20100 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  o the database. 
20110 20 42 75 74 20 69 6e 20 74 68 65 20 6d 65 61 6e   But in the mean
20120 74 69 6d 65 2c 20 74 68 65 20 64 61 74 61 62 61  time, the databa
20130 73 65 20 66 69 6c 65 20 6d 69 67 68 74 0a 62 65  se file might.be
20140 20 6c 61 72 67 65 72 20 74 68 61 6e 20 73 74 72   larger than str
20150 69 63 74 6c 79 20 6e 65 63 65 73 73 61 72 79 2e  ictly necessary.
20160 20 20 41 6c 73 6f 2c 20 66 72 65 71 75 65 6e 74    Also, frequent
20170 20 69 6e 73 65 72 74 73 2c 20 75 70 64 61 74 65   inserts, update
20180 73 2c 0a 61 6e 64 20 64 65 6c 65 74 65 73 20 63  s,.and deletes c
20190 61 6e 20 63 61 75 73 65 20 74 68 65 20 69 6e 66  an cause the inf
201a0 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 74 68 65 20  ormation in the 
201b0 64 61 74 61 62 61 73 65 20 74 6f 20 62 65 63 6f  database to beco
201c0 6d 65 0a 66 72 61 67 6d 65 6e 74 65 64 20 2d 20  me.fragmented - 
201d0 73 63 61 74 74 65 72 65 64 20 6f 75 74 20 61 6c  scattered out al
201e0 6c 20 61 63 72 6f 73 73 20 74 68 65 20 64 61 74  l across the dat
201f0 61 62 61 73 65 20 66 69 6c 65 20 72 61 74 68 65  abase file rathe
20200 72 0a 74 68 61 6e 20 63 6c 75 73 74 65 72 65 64  r.than clustered
20210 20 74 6f 67 65 74 68 65 72 20 69 6e 20 6f 6e 65   together in one
20220 20 70 6c 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e   place.</p>..<p>
20230 5e 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d  ^The VACUUM comm
20240 61 6e 64 20 63 6c 65 61 6e 73 0a 74 68 65 20 6d  and cleans.the m
20250 61 69 6e 20 64 61 74 61 62 61 73 65 20 62 79 20  ain database by 
20260 63 6f 70 79 69 6e 67 20 69 74 73 20 63 6f 6e 74  copying its cont
20270 65 6e 74 73 20 74 6f 20 61 20 74 65 6d 70 6f 72  ents to a tempor
20280 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
20290 65 20 61 6e 64 20 0a 72 65 6c 6f 61 64 69 6e 67  e and .reloading
202a0 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61   the original da
202b0 74 61 62 61 73 65 20 66 69 6c 65 20 66 72 6f 6d  tabase file from
202c0 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69 73   the copy.  This
202d0 20 65 6c 69 6d 69 6e 61 74 65 73 20 0a 66 72 65   eliminates .fre
202e0 65 20 70 61 67 65 73 2c 20 20 61 6c 69 67 6e 73  e pages,  aligns
202f0 20 74 61 62 6c 65 20 64 61 74 61 20 74 6f 20 62   table data to b
20300 65 20 63 6f 6e 74 69 67 75 6f 75 73 2c 20 61 6e  e contiguous, an
20310 64 20 6f 74 68 65 72 77 69 73 65 20 63 6c 65 61  d otherwise clea
20320 6e 73 20 0a 75 70 20 74 68 65 20 64 61 74 61 62  ns .up the datab
20330 61 73 65 20 66 69 6c 65 20 73 74 72 75 63 74 75  ase file structu
20340 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  re.</p>..<p>^The
20350 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20   VACUUM command 
20360 6d 61 79 20 63 68 61 6e 67 65 20 74 68 65 20 0a  may change the .
20370 5b 52 4f 57 49 44 20 7c 20 52 4f 57 49 44 73 5d  [ROWID | ROWIDs]
20380 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 74   of entries in t
20390 61 62 6c 65 73 20 74 68 61 74 20 64 6f 0a 6e 6f  ables that do.no
203a0 74 20 68 61 76 65 20 61 6e 20 65 78 70 6c 69 63  t have an explic
203b0 69 74 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d  it [INTEGER PRIM
203c0 41 52 59 20 4b 45 59 5d 2e 3c 2f 70 3e 0a 0a 3c  ARY KEY].</p>..<
203d0 70 3e 5e 56 41 43 55 55 4d 20 6f 6e 6c 79 20 77  p>^VACUUM only w
203e0 6f 72 6b 73 20 6f 6e 20 74 68 65 20 6d 61 69 6e  orks on the main
203f0 20 64 61 74 61 62 61 73 65 2e 0a 49 74 20 69 73   database..It is
20400 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f   not possible to
20410 20 56 41 43 55 55 4d 20 61 6e 20 61 74 74 61 63   VACUUM an attac
20420 68 65 64 20 64 61 74 61 62 61 73 65 20 66 69 6c  hed database fil
20430 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  e.</p>..<p>^The 
20440 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 77  VACUUM command w
20450 69 6c 6c 20 66 61 69 6c 20 69 66 20 74 68 65 72  ill fail if ther
20460 65 20 69 73 20 61 6e 20 61 63 74 69 76 65 20 74  e is an active t
20470 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 54 68 65  ransaction..^The
20480 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20   VACUUM command 
20490 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 69  is a no-op for i
204a0 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73  n-memory databas
204b0 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 41 73  es.</p>..<p>^(As
204c0 20 6f 66 20 53 51 4c 69 74 65 20 76 65 72 73 69   of SQLite versi
204d0 6f 6e 20 33 2e 31 2c 20 61 6e 20 61 6c 74 65 72  on 3.1, an alter
204e0 6e 61 74 69 76 65 20 74 6f 20 75 73 69 6e 67 20  native to using 
204f0 74 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61  the VACUUM comma
20500 6e 64 0a 69 73 20 61 75 74 6f 2d 76 61 63 75 75  nd.is auto-vacuu
20510 6d 20 6d 6f 64 65 2c 20 65 6e 61 62 6c 65 64 20  m mode, enabled 
20520 75 73 69 6e 67 20 74 68 65 20 0a 5b 61 75 74 6f  using the .[auto
20530 5f 76 61 63 75 75 6d 5d 20 70 72 61 67 6d 61 2e  _vacuum] pragma.
20540 29 5e 20 20 5e 57 68 65 6e 20 5b 61 75 74 6f 5f  )^  ^When [auto_
20550 76 61 63 75 75 6d 5d 20 69 73 20 65 6e 61 62 6c  vacuum] is enabl
20560 65 64 20 66 6f 72 20 61 20 64 61 74 61 62 61 73  ed for a databas
20570 65 2c 20 0a 6c 61 72 67 65 20 64 65 6c 65 74 65  e, .large delete
20580 73 20 63 61 75 73 65 0a 74 68 65 20 73 69 7a 65  s cause.the size
20590 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
205a0 20 66 69 6c 65 20 74 6f 20 73 68 72 69 6e 6b 2e   file to shrink.
205b0 20 20 48 6f 77 65 76 65 72 2c 20 5b 61 75 74 6f    However, [auto
205c0 5f 76 61 63 75 75 6d 5d 0a 61 6c 73 6f 20 63 61  _vacuum].also ca
205d0 75 73 65 73 20 65 78 63 65 73 73 20 66 72 61 67  uses excess frag
205e0 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  mentation of the
205f0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
20600 20 5e 41 6e 64 20 5b 61 75 74 6f 5f 76 61 63 75   ^And [auto_vacu
20610 75 6d 5d 0a 64 6f 65 73 20 6e 6f 74 20 63 6f 6d  um].does not com
20620 70 61 63 74 20 70 61 72 74 69 61 6c 6c 79 20 66  pact partially f
20630 69 6c 6c 65 64 20 70 61 67 65 73 20 6f 66 20 74  illed pages of t
20640 68 65 20 64 61 74 61 62 61 73 65 20 61 73 20 56  he database as V
20650 41 43 55 55 4d 0a 64 6f 65 73 2e 3c 2f 70 3e 0a  ACUUM.does.</p>.
20660 0a 3c 70 3e 5e 54 68 65 20 5b 70 61 67 65 5f 73  .<p>^The [page_s
20670 69 7a 65 5d 20 61 6e 64 2f 6f 72 20 5b 61 75 74  ize] and/or [aut
20680 6f 5f 76 61 63 75 75 6d 5d 20 6d 6f 64 65 20 6f  o_vacuum] mode o
20690 66 20 61 20 64 61 74 61 62 61 73 65 20 63 61 6e  f a database can
206a0 20 62 65 20 63 68 61 6e 67 65 64 0a 62 79 20 69   be changed.by i
206b0 6e 76 6f 6b 69 6e 67 20 74 68 65 20 5b 70 61 67  nvoking the [pag
206c0 65 5f 73 69 7a 65 20 70 72 61 67 6d 61 5d 20 61  e_size pragma] a
206d0 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f 76 61 63 75  nd/or [auto_vacu
206e0 75 6d 20 70 72 61 67 6d 61 5d 20 61 6e 64 20 74  um pragma] and t
206f0 68 65 6e 0a 69 6d 6d 65 64 69 61 74 65 6c 79 20  hen.immediately 
20700 56 41 43 55 55 4d 69 6e 67 20 74 68 65 20 64 61  VACUUMing the da
20710 74 61 62 61 73 65 2e 20 5e 45 78 63 65 70 74 2c  tabase. ^Except,
20720 20 74 68 65 20 70 61 67 65 20 73 69 7a 65 20 63   the page size c
20730 61 6e 6e 6f 74 20 62 65 0a 63 68 61 6e 67 65 64  annot be.changed
20740 20 77 68 65 6e 20 5b 77 72 69 74 65 2d 61 68 65   when [write-ahe
20750 61 64 20 6c 6f 67 5d 20 6d 6f 64 65 20 69 73 20  ad log] mode is 
20760 69 6e 20 75 73 65 2e 3c 2f 70 3e 0a 0a 3c 74 63  in use.</p>..<tc
20770 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
20780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
207a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
207b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
207c0 23 0a 53 65 63 74 69 6f 6e 20 7b 49 4e 44 45 58  #.Section {INDEX
207d0 45 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79  ED BY} indexedby
207e0 20 7b 7b 49 4e 44 45 58 45 44 20 42 59 7d 20 7b   {{INDEXED BY} {
207f0 4e 4f 54 20 49 4e 44 45 58 45 44 7d 7d 0a 0a 3c  NOT INDEXED}}..<
20800 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e  /tcl>.<p>^The IN
20810 44 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20  DEXED BY phrase 
20820 69 73 20 61 20 53 51 4c 20 65 78 74 65 6e 73 69  is a SQL extensi
20830 6f 6e 20 66 6f 75 6e 64 20 6f 6e 6c 79 20 69 6e  on found only in
20840 20 53 51 4c 69 74 65 20 77 68 69 63 68 20 63 61   SQLite which ca
20850 6e 0a 62 65 20 75 73 65 64 20 74 6f 20 76 65 72  n.be used to ver
20860 69 66 79 20 74 68 61 74 20 74 68 65 20 63 6f 72  ify that the cor
20870 72 65 63 74 20 69 6e 64 69 63 65 73 20 61 72 65  rect indices are
20880 20 62 65 69 6e 67 20 75 73 65 64 20 6f 6e 20 61   being used on a
20890 20 5b 44 45 4c 45 54 45 5d 2c 0a 5b 53 45 4c 45   [DELETE],.[SELE
208a0 43 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d  CT], or [UPDATE]
208b0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 5e 54 68 65   statement..^The
208c0 20 49 4e 44 45 58 45 44 20 42 59 20 70 68 72 61   INDEXED BY phra
208d0 73 65 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77  se always follow
208e0 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
208f0 74 61 62 6c 65 20 74 68 61 74 20 53 51 4c 69 74  table that SQLit
20900 65 20 77 69 6c 6c 0a 62 65 20 72 65 61 64 69 6e  e will.be readin
20910 67 2e 20 20 54 68 65 20 49 4e 44 45 58 45 44 20  g.  The INDEXED 
20920 42 59 20 70 68 72 61 73 65 20 63 61 6e 20 62 65  BY phrase can be
20930 20 73 65 65 6e 20 69 6e 20 74 68 65 20 66 6f 6c   seen in the fol
20940 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78 0a 64 69  lowing syntax.di
20950 61 67 72 61 6d 73 3a 3c 2f 70 3e 0a 0a 3c 74 63  agrams:</p>..<tc
20960 6c 3e 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  l>.BubbleDiagram
20970 20 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65   qualified-table
20980 2d 6e 61 6d 65 0a 42 75 62 62 6c 65 44 69 61 67  -name.BubbleDiag
20990 72 61 6d 20 73 69 6e 67 6c 65 2d 73 6f 75 72 63  ram single-sourc
209a0 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  e.</tcl>..<p>^Th
209b0 65 20 22 49 4e 44 45 58 45 44 20 42 59 20 69 6e  e "INDEXED BY in
209c0 64 65 78 2d 6e 61 6d 65 22 20 63 6c 61 75 73 65  dex-name" clause
209d0 20 73 70 65 63 69 66 69 65 73 20 74 68 61 74 20   specifies that 
209e0 74 68 65 20 6e 61 6d 65 64 20 69 6e 64 65 78 0a  the named index.
209f0 6d 75 73 74 20 62 65 20 75 73 65 64 20 69 6e 20  must be used in 
20a00 6f 72 64 65 72 20 74 6f 20 6c 6f 6f 6b 20 75 70  order to look up
20a10 20 76 61 6c 75 65 73 20 6f 6e 20 74 68 65 20 70   values on the p
20a20 72 65 63 65 64 69 6e 67 20 74 61 62 6c 65 2e 0a  receding table..
20a30 5e 49 66 20 69 6e 64 65 78 2d 6e 61 6d 65 20 64  ^If index-name d
20a40 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 6f 72  oes not exist or
20a50 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20   cannot be used 
20a60 66 6f 72 20 74 68 65 20 71 75 65 72 79 2c 20 74  for the query, t
20a70 68 65 6e 0a 74 68 65 20 70 72 65 70 61 72 61 74  hen.the preparat
20a80 69 6f 6e 20 6f 66 20 74 68 65 20 53 51 4c 20 73  ion of the SQL s
20a90 74 61 74 65 6d 65 6e 74 20 66 61 69 6c 73 2e 0a  tatement fails..
20aa0 5e 28 54 68 65 20 22 4e 4f 54 20 49 4e 44 45 58  ^(The "NOT INDEX
20ab0 45 44 22 20 63 6c 61 75 73 65 20 73 70 65 63 69  ED" clause speci
20ac0 66 69 65 73 20 74 68 61 74 20 6e 6f 20 69 6e 64  fies that no ind
20ad0 65 78 20 73 68 61 6c 6c 20 62 65 20 75 73 65 64  ex shall be used
20ae0 20 77 68 65 6e 0a 61 63 63 65 73 73 69 6e 67 20   when.accessing 
20af0 74 68 65 20 70 72 65 63 65 64 69 6e 67 20 74 61  the preceding ta
20b00 62 6c 65 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69  ble, including i
20b10 6d 70 6c 69 65 64 20 69 6e 64 69 63 65 73 20 63  mplied indices c
20b20 72 65 61 74 65 20 62 79 0a 55 4e 49 51 55 45 20  reate by.UNIQUE 
20b30 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45 59 20  and PRIMARY KEY 
20b40 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20 48 6f  constraints.  Ho
20b50 77 65 76 65 72 2c 20 74 68 65 20 49 4e 54 45 47  wever, the INTEG
20b60 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 0a 63  ER PRIMARY KEY.c
20b70 61 6e 20 73 74 69 6c 6c 20 62 65 20 75 73 65 64  an still be used
20b80 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 65 6e 74 72   to look up entr
20b90 69 65 73 20 65 76 65 6e 20 77 68 65 6e 20 22 4e  ies even when "N
20ba0 4f 54 20 49 4e 44 45 58 45 44 22 20 69 73 20 73  OT INDEXED" is s
20bb0 70 65 63 69 66 69 65 64 2e 29 5e 3c 2f 70 3e 0a  pecified.)^</p>.
20bc0 0a 3c 70 3e 53 6f 6d 65 20 53 51 4c 20 64 61 74  .<p>Some SQL dat
20bd0 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20 70 72  abase engines pr
20be0 6f 76 69 64 65 20 6e 6f 6e 2d 73 74 61 6e 64 61  ovide non-standa
20bf0 72 64 20 22 68 69 6e 74 22 20 6d 65 63 68 61 6e  rd "hint" mechan
20c00 69 73 6d 73 20 77 68 69 63 68 0a 63 61 6e 20 62  isms which.can b
20c10 65 20 75 73 65 64 20 74 6f 20 67 69 76 65 20 74  e used to give t
20c20 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a  he query optimiz
20c30 65 72 20 63 6c 75 65 73 20 61 62 6f 75 74 20 77  er clues about w
20c40 68 61 74 20 69 6e 64 69 63 65 73 20 69 74 20 73  hat indices it s
20c50 68 6f 75 6c 64 0a 75 73 65 20 66 6f 72 20 61 20  hould.use for a 
20c60 70 61 72 74 69 63 75 6c 61 72 20 73 74 61 74 65  particular state
20c70 6d 65 6e 74 2e 20 20 54 68 65 20 49 4e 44 45 58  ment.  The INDEX
20c80 20 42 59 20 63 6c 61 75 73 65 20 6f 66 20 53 51   BY clause of SQ
20c90 4c 69 74 65 20 69 73 20 0a 3c 65 6d 3e 6e 6f 74  Lite is .<em>not
20ca0 3c 2f 65 6d 3e 20 61 20 68 69 6e 74 69 6e 67 20  </em> a hinting 
20cb0 6d 65 63 68 61 6e 69 73 6d 20 61 6e 64 20 69 74  mechanism and it
20cc0 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75   should not be u
20cd0 73 65 64 20 61 73 20 73 75 63 68 2e 0a 5e 54 68  sed as such..^Th
20ce0 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61  e INDEXED BY cla
20cf0 75 73 65 20 64 6f 65 73 20 6e 6f 74 20 67 69 76  use does not giv
20d00 65 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20  e the optimizer 
20d10 68 69 6e 74 73 20 61 62 6f 75 74 20 77 68 69 63  hints about whic
20d20 68 20 69 6e 64 65 78 0a 74 6f 20 75 73 65 3b 20  h index.to use; 
20d30 69 74 20 67 69 76 65 73 20 74 68 65 20 6f 70 74  it gives the opt
20d40 69 6d 69 7a 65 72 20 61 20 72 65 71 75 69 72 65  imizer a require
20d50 6d 65 6e 74 20 6f 66 20 77 68 69 63 68 20 69 6e  ment of which in
20d60 64 65 78 20 74 6f 20 75 73 65 2e 0a 5e 49 66 20  dex to use..^If 
20d70 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69  the query optimi
20d80 7a 65 72 20 69 73 20 75 6e 61 62 6c 65 20 74 6f  zer is unable to
20d90 20 75 73 65 20 74 68 65 20 69 6e 64 65 78 20 73   use the index s
20da0 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 0a  pecified by the.
20db0 49 4e 44 45 58 20 42 59 20 63 6c 61 75 73 65 2c  INDEX BY clause,
20dc0 20 74 68 65 6e 20 74 68 65 20 71 75 65 72 79 20   then the query 
20dd0 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61  will fail with a
20de0 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70  n error.</p>..<p
20df0 3e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  >The INDEXED BY 
20e00 63 6c 61 75 73 65 20 69 73 20 3c 65 6d 3e 6e 6f  clause is <em>no
20e10 74 3c 2f 65 6d 3e 20 69 6e 74 65 6e 64 65 64 20  t</em> intended 
20e20 66 6f 72 20 75 73 65 20 69 6e 20 74 75 6e 69 6e  for use in tunin
20e30 67 0a 74 68 65 20 70 65 72 66 6f 72 6d 61 6e 63  g.the performanc
20e40 65 20 6f 66 20 61 20 71 75 65 72 79 2e 20 20 54  e of a query.  T
20e50 68 65 20 69 6e 74 65 6e 74 20 6f 66 20 74 68 65  he intent of the
20e60 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75   INDEXED BY clau
20e70 73 65 20 69 73 0a 74 6f 20 72 61 69 73 65 20 61  se is.to raise a
20e80 20 72 75 6e 2d 74 69 6d 65 20 65 72 72 6f 72 20   run-time error 
20e90 69 66 20 61 20 73 63 68 65 6d 61 20 63 68 61 6e  if a schema chan
20ea0 67 65 2c 20 73 75 63 68 20 61 73 20 64 72 6f 70  ge, such as drop
20eb0 70 69 6e 67 20 6f 72 0a 63 72 65 61 74 69 6e 67  ping or.creating
20ec0 20 61 6e 20 69 6e 64 65 78 2c 20 63 61 75 73 65   an index, cause
20ed0 73 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e  s the query plan
20ee0 20 66 6f 72 20 61 20 74 69 6d 65 2d 73 65 6e 73   for a time-sens
20ef0 69 74 69 76 65 20 71 75 65 72 79 0a 74 6f 20 63  itive query.to c
20f00 68 61 6e 67 65 2e 20 20 54 68 65 20 49 4e 44 45  hange.  The INDE
20f10 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 69 73  XED BY clause is
20f20 20 64 65 73 69 67 6e 65 64 20 74 6f 20 68 65 6c   designed to hel
20f30 70 20 64 65 74 65 63 74 0a 75 6e 64 65 73 69 72  p detect.undesir
20f40 61 62 6c 65 20 71 75 65 72 79 20 70 6c 61 6e 20  able query plan 
20f50 63 68 61 6e 67 65 73 20 64 75 72 69 6e 67 20 72  changes during r
20f60 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 69 6e  egression testin
20f70 67 2e 0a 44 65 76 65 6c 6f 70 65 72 73 20 61 72  g..Developers ar
20f80 65 20 61 64 6d 6f 6e 69 73 68 65 64 20 74 6f 20  e admonished to 
20f90 6f 6d 69 74 20 61 6c 6c 20 75 73 65 20 6f 66 20  omit all use of 
20fa0 49 4e 44 45 58 45 44 20 42 59 20 64 75 72 69 6e  INDEXED BY durin
20fb0 67 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 65  g.application de
20fc0 73 69 67 6e 2c 20 69 6d 70 6c 65 6d 65 6e 74 61  sign, implementa
20fd0 74 69 6f 6e 2c 20 74 65 73 74 69 6e 67 2c 20 61  tion, testing, a
20fe0 6e 64 20 74 75 6e 69 6e 67 2e 20 20 49 66 0a 49  nd tuning.  If.I
20ff0 4e 44 45 58 45 44 20 42 59 20 69 73 20 74 6f 20  NDEXED BY is to 
21000 62 65 20 75 73 65 64 20 61 74 20 61 6c 6c 2c 20  be used at all, 
21010 69 74 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 73  it should be ins
21020 65 72 74 65 64 20 61 74 20 74 68 65 20 76 65 72  erted at the ver
21030 79 0a 65 6e 64 20 6f 66 20 74 68 65 20 64 65 76  y.end of the dev
21040 65 6c 6f 70 6d 65 6e 74 20 70 72 6f 63 65 73 73  elopment process
21050 20 77 68 65 6e 20 22 6c 6f 63 6b 69 6e 67 20 64   when "locking d
21060 6f 77 6e 22 20 61 20 64 65 73 69 67 6e 2e 3c 2f  own" a design.</
21070 70 3e 0a 0a 3c 68 33 3e 53 65 65 20 41 6c 73 6f  p>..<h3>See Also
21080 3a 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 5b  :</h3>..<p>The [
21090 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61  sqlite3_stmt_sta
210a0 74 75 73 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74  tus()] C/C++ int
210b0 65 72 66 61 63 65 20 74 6f 67 65 74 68 65 72 20  erface together 
210c0 77 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45  with the.[SQLITE
210d0 5f 53 54 4d 54 53 54 41 54 55 53 5f 46 55 4c 4c  _STMTSTATUS_FULL
210e0 53 43 41 4e 5f 53 54 45 50 5d 20 61 6e 64 20 5b  SCAN_STEP] and [
210f0 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
21100 53 5f 53 4f 52 54 5d 20 76 65 72 62 73 0a 63 61  S_SORT] verbs.ca
21110 6e 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 74  n be used to det
21120 65 63 74 20 61 74 20 72 75 6e 2d 74 69 6d 65 20  ect at run-time 
21130 77 68 65 6e 20 61 6e 20 53 51 4c 20 73 74 61 74  when an SQL stat
21140 65 6d 65 6e 74 20 69 73 20 6e 6f 74 0a 6d 61 6b  ement is not.mak
21150 69 6e 67 20 65 66 66 65 63 74 69 76 65 20 75 73  ing effective us
21160 65 20 6f 66 20 69 6e 64 69 63 65 73 2e 20 20 4d  e of indices.  M
21170 61 6e 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  any applications
21180 20 6d 61 79 20 70 72 65 66 65 72 20 74 6f 0a 75   may prefer to.u
21190 73 65 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  se the [sqlite3_
211a0 73 74 6d 74 5f 73 74 61 74 75 73 28 29 5d 20 69  stmt_status()] i
211b0 6e 74 65 72 66 61 63 65 20 74 6f 20 64 65 74 65  nterface to dete
211c0 63 74 20 69 6e 64 65 78 20 6d 69 73 75 73 65 0a  ct index misuse.
211d0 72 61 74 68 65 72 20 74 68 61 6e 20 74 68 65 20  rather than the 
211e0 49 4e 44 45 58 45 44 20 42 59 20 70 68 72 61 73  INDEXED BY phras
211f0 65 20 64 65 73 63 72 69 62 65 64 20 68 65 72 65  e described here
21200 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
21210 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21220 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21230 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21250 23 23 23 23 23 23 23 23 23 23 0a 23 20 41 20 6c  ##########.# A l
21260 69 73 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 2e  ist of keywords.
21270 20 20 41 20 61 73 74 65 72 69 73 6b 20 6f 63 63    A asterisk occ
21280 75 72 73 20 61 66 74 65 72 20 74 68 65 20 6b 65  urs after the ke
21290 79 77 6f 72 64 20 69 66 20 69 74 20 69 73 20 6f  yword if it is o
212a0 6e 0a 23 20 74 68 65 20 66 61 6c 6c 62 61 63 6b  n.# the fallback
212b0 20 6c 69 73 74 2e 0a 23 0a 73 65 74 20 6b 65 79   list..#.set key
212c0 77 6f 72 64 5f 6c 69 73 74 20 5b 6c 73 6f 72 74  word_list [lsort
212d0 20 7b 0a 20 20 20 41 42 4f 52 54 0a 20 20 20 41   {.   ABORT.   A
212e0 43 54 49 4f 4e 0a 20 20 20 41 44 44 0a 20 20 20  CTION.   ADD.   
212f0 41 46 54 45 52 0a 20 20 20 41 4c 4c 0a 20 20 20  AFTER.   ALL.   
21300 41 4c 54 45 52 0a 20 20 20 41 4e 41 4c 59 5a 45  ALTER.   ANALYZE
21310 0a 20 20 20 41 4e 44 0a 20 20 20 41 53 0a 20 20  .   AND.   AS.  
21320 20 41 53 43 0a 20 20 20 41 54 54 41 43 48 0a 20   ASC.   ATTACH. 
21330 20 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a    AUTOINCREMENT.
21340 20 20 20 42 45 46 4f 52 45 0a 20 20 20 42 45 47     BEFORE.   BEG
21350 49 4e 0a 20 20 20 42 45 54 57 45 45 4e 0a 20 20  IN.   BETWEEN.  
21360 20 42 59 0a 20 20 20 43 41 53 43 41 44 45 0a 20   BY.   CASCADE. 
21370 20 20 43 41 53 45 0a 20 20 20 43 41 53 54 0a 20    CASE.   CAST. 
21380 20 20 43 48 45 43 4b 0a 20 20 20 43 4f 4c 4c 41    CHECK.   COLLA
21390 54 45 0a 20 20 20 43 4f 4c 55 4d 4e 0a 20 20 20  TE.   COLUMN.   
213a0 43 4f 4d 4d 49 54 0a 20 20 20 43 4f 4e 46 4c 49  COMMIT.   CONFLI
213b0 43 54 0a 20 20 20 43 4f 4e 53 54 52 41 49 4e 54  CT.   CONSTRAINT
213c0 0a 20 20 20 43 52 45 41 54 45 0a 20 20 20 43 52  .   CREATE.   CR
213d0 4f 53 53 0a 20 20 20 43 55 52 52 45 4e 54 5f 44  OSS.   CURRENT_D
213e0 41 54 45 0a 20 20 20 43 55 52 52 45 4e 54 5f 54  ATE.   CURRENT_T
213f0 49 4d 45 0a 20 20 20 43 55 52 52 45 4e 54 5f 54  IME.   CURRENT_T
21400 49 4d 45 53 54 41 4d 50 0a 20 20 20 44 41 54 41  IMESTAMP.   DATA
21410 42 41 53 45 0a 20 20 20 44 45 46 41 55 4c 54 0a  BASE.   DEFAULT.
21420 20 20 20 44 45 46 45 52 52 45 44 0a 20 20 20 44     DEFERRED.   D
21430 45 46 45 52 52 41 42 4c 45 0a 20 20 20 44 45 4c  EFERRABLE.   DEL
21440 45 54 45 0a 20 20 20 44 45 53 43 0a 20 20 20 44  ETE.   DESC.   D
21450 45 54 41 43 48 0a 20 20 20 44 49 53 54 49 4e 43  ETACH.   DISTINC
21460 54 0a 20 20 20 44 52 4f 50 0a 20 20 20 45 4e 44  T.   DROP.   END
21470 0a 20 20 20 45 41 43 48 0a 20 20 20 45 4c 53 45  .   EACH.   ELSE
21480 0a 20 20 20 45 53 43 41 50 45 0a 20 20 20 45 58  .   ESCAPE.   EX
21490 43 45 50 54 0a 20 20 20 45 58 43 4c 55 53 49 56  CEPT.   EXCLUSIV
214a0 45 0a 20 20 20 45 58 49 53 54 53 0a 20 20 20 45  E.   EXISTS.   E
214b0 58 50 4c 41 49 4e 0a 20 20 20 46 41 49 4c 0a 20  XPLAIN.   FAIL. 
214c0 20 20 46 4f 52 0a 20 20 20 46 4f 52 45 49 47 4e    FOR.   FOREIGN
214d0 0a 20 20 20 46 52 4f 4d 0a 20 20 20 46 55 4c 4c  .   FROM.   FULL
214e0 0a 20 20 20 47 4c 4f 42 0a 20 20 20 47 52 4f 55  .   GLOB.   GROU
214f0 50 0a 20 20 20 48 41 56 49 4e 47 0a 20 20 20 49  P.   HAVING.   I
21500 46 0a 20 20 20 49 47 4e 4f 52 45 0a 20 20 20 49  F.   IGNORE.   I
21510 4d 4d 45 44 49 41 54 45 0a 20 20 20 49 4e 0a 20  MMEDIATE.   IN. 
21520 20 20 49 4e 44 45 58 0a 20 20 20 49 4e 44 45 58    INDEX.   INDEX
21530 45 44 0a 20 20 20 49 4e 49 54 49 41 4c 4c 59 0a  ED.   INITIALLY.
21540 20 20 20 49 4e 4e 45 52 0a 20 20 20 49 4e 53 45     INNER.   INSE
21550 52 54 0a 20 20 20 49 4e 53 54 45 41 44 0a 20 20  RT.   INSTEAD.  
21560 20 49 4e 54 45 52 53 45 43 54 0a 20 20 20 49 4e   INTERSECT.   IN
21570 54 4f 0a 20 20 20 49 53 0a 20 20 20 49 53 4e 55  TO.   IS.   ISNU
21580 4c 4c 0a 20 20 20 4a 4f 49 4e 0a 20 20 20 4b 45  LL.   JOIN.   KE
21590 59 0a 20 20 20 4c 45 46 54 0a 20 20 20 4c 49 4b  Y.   LEFT.   LIK
215a0 45 0a 20 20 20 4c 49 4d 49 54 0a 20 20 20 4d 41  E.   LIMIT.   MA
215b0 54 43 48 0a 20 20 20 4e 41 54 55 52 41 4c 0a 20  TCH.   NATURAL. 
215c0 20 20 4e 4f 0a 20 20 20 4e 4f 54 0a 20 20 20 4e    NO.   NOT.   N
215d0 4f 54 4e 55 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20  OTNULL.   NULL. 
215e0 20 20 4f 46 0a 20 20 20 4f 46 46 53 45 54 0a 20    OF.   OFFSET. 
215f0 20 20 4f 4e 0a 20 20 20 4f 52 0a 20 20 20 4f 52    ON.   OR.   OR
21600 44 45 52 0a 20 20 20 4f 55 54 45 52 0a 20 20 20  DER.   OUTER.   
21610 50 4c 41 4e 0a 20 20 20 50 52 41 47 4d 41 0a 20  PLAN.   PRAGMA. 
21620 20 20 50 52 49 4d 41 52 59 0a 20 20 20 51 55 45    PRIMARY.   QUE
21630 52 59 0a 20 20 20 52 41 49 53 45 0a 20 20 20 52  RY.   RAISE.   R
21640 45 46 45 52 45 4e 43 45 53 0a 20 20 20 52 45 47  EFERENCES.   REG
21650 45 58 50 0a 20 20 20 52 45 49 4e 44 45 58 0a 20  EXP.   REINDEX. 
21660 20 20 52 45 4c 45 41 53 45 0a 20 20 20 52 45 4e    RELEASE.   REN
21670 41 4d 45 0a 20 20 20 52 45 50 4c 41 43 45 0a 20  AME.   REPLACE. 
21680 20 20 52 45 53 54 52 49 43 54 0a 20 20 20 52 49    RESTRICT.   RI
21690 47 48 54 0a 20 20 20 52 4f 4c 4c 42 41 43 4b 0a  GHT.   ROLLBACK.
216a0 20 20 20 52 4f 57 0a 20 20 20 53 41 56 45 50 4f     ROW.   SAVEPO
216b0 49 4e 54 0a 20 20 20 53 45 4c 45 43 54 0a 20 20  INT.   SELECT.  
216c0 20 53 45 54 0a 20 20 20 54 41 42 4c 45 0a 20 20   SET.   TABLE.  
216d0 20 54 45 4d 50 0a 20 20 20 54 45 4d 50 4f 52 41   TEMP.   TEMPORA
216e0 52 59 0a 20 20 20 54 48 45 4e 0a 20 20 20 54 4f  RY.   THEN.   TO
216f0 0a 20 20 20 54 52 41 4e 53 41 43 54 49 4f 4e 0a  .   TRANSACTION.
21700 20 20 20 54 52 49 47 47 45 52 0a 20 20 20 55 4e     TRIGGER.   UN
21710 49 4f 4e 0a 20 20 20 55 4e 49 51 55 45 0a 20 20  ION.   UNIQUE.  
21720 20 55 50 44 41 54 45 0a 20 20 20 55 53 49 4e 47   UPDATE.   USING
21730 0a 20 20 20 56 41 43 55 55 4d 0a 20 20 20 56 41  .   VACUUM.   VA
21740 4c 55 45 53 0a 20 20 20 56 49 45 57 0a 20 20 20  LUES.   VIEW.   
21750 56 49 52 54 55 41 4c 0a 20 20 20 57 48 45 4e 0a  VIRTUAL.   WHEN.
21760 20 20 20 57 48 45 52 45 0a 7d 5d 0a 0a 68 64 5f     WHERE.}]..hd_
21770 70 75 74 73 20 7b 3c 44 49 56 20 63 6c 61 73 73  puts {<DIV class
21780 3d 22 70 64 66 5f 73 65 63 74 69 6f 6e 22 3e 7d  ="pdf_section">}
21790 0a 53 65 63 74 69 6f 6e 20 7b 53 51 4c 69 74 65  .Section {SQLite
217a0 20 4b 65 79 77 6f 72 64 73 7d 20 6b 65 79 77 6f   Keywords} keywo
217b0 72 64 73 20 7b 7b 2a 53 51 4c 20 6b 65 79 77 6f  rds {{*SQL keywo
217c0 72 64 7d 20 7b 53 51 4c 20 6b 65 79 77 6f 72 64  rd} {SQL keyword
217d0 73 7d 7d 0a 68 64 5f 70 75 74 73 20 7b 3c 2f 44  s}}.hd_puts {</D
217e0 49 56 3e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  IV>}.</tcl>..<p>
217f0 54 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64  The SQL standard
21800 20 73 70 65 63 69 66 69 65 73 20 61 20 68 75 67   specifies a hug
21810 65 20 6e 75 6d 62 65 72 20 6f 66 20 6b 65 79 77  e number of keyw
21820 6f 72 64 73 20 77 68 69 63 68 20 6d 61 79 20 6e  ords which may n
21830 6f 74 0a 62 65 20 75 73 65 64 20 61 73 20 74 68  ot.be used as th
21840 65 20 6e 61 6d 65 73 20 6f 66 20 74 61 62 6c 65  e names of table
21850 73 2c 20 69 6e 64 69 63 65 73 2c 20 63 6f 6c 75  s, indices, colu
21860 6d 6e 73 2c 20 64 61 74 61 62 61 73 65 73 2c 20  mns, databases, 
21870 75 73 65 72 2d 64 65 66 69 6e 65 64 0a 66 75 6e  user-defined.fun
21880 63 74 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69 6f  ctions, collatio
21890 6e 73 2c 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ns, virtual tabl
218a0 65 20 6d 6f 64 75 6c 65 73 2c 20 6f 72 20 61 6e  e modules, or an
218b0 79 20 6f 74 68 65 72 20 6e 61 6d 65 64 20 6f 62  y other named ob
218c0 6a 65 63 74 2e 0a 54 68 65 20 6c 69 73 74 20 6f  ject..The list o
218d0 66 20 6b 65 79 77 6f 72 64 73 20 69 73 20 73 6f  f keywords is so
218e0 20 6c 6f 6e 67 20 74 68 61 74 20 66 65 77 20 70   long that few p
218f0 65 6f 70 6c 65 20 63 61 6e 20 72 65 6d 65 6d 62  eople can rememb
21900 65 72 20 74 68 65 6d 20 61 6c 6c 2e 0a 46 6f 72  er them all..For
21910 20 6d 6f 73 74 20 53 51 4c 20 63 6f 64 65 2c 20   most SQL code, 
21920 79 6f 75 72 20 73 61 66 65 73 74 20 62 65 74 20  your safest bet 
21930 69 73 20 74 6f 20 6e 65 76 65 72 20 75 73 65 20  is to never use 
21940 61 6e 79 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67  any English lang
21950 75 61 67 65 0a 77 6f 72 64 20 61 73 20 74 68 65  uage.word as the
21960 20 6e 61 6d 65 20 6f 66 20 61 20 75 73 65 72 2d   name of a user-
21970 64 65 66 69 6e 65 64 20 6f 62 6a 65 63 74 2e 3c  defined object.<
21980 2f 70 3e 0a 0a 3c 70 3e 49 66 20 79 6f 75 20 77  /p>..<p>If you w
21990 61 6e 74 20 74 6f 20 75 73 65 20 61 20 6b 65 79  ant to use a key
219a0 77 6f 72 64 20 61 73 20 61 20 6e 61 6d 65 2c 20  word as a name, 
219b0 79 6f 75 20 6e 65 65 64 20 74 6f 20 71 75 6f 74  you need to quot
219c0 65 20 69 74 2e 20 20 54 68 65 72 65 0a 61 72 65  e it.  There.are
219d0 20 74 68 72 65 65 20 77 61 79 73 20 6f 66 20 71   three ways of q
219e0 75 6f 74 69 6e 67 20 6b 65 79 77 6f 72 64 73 20  uoting keywords 
219f0 69 6e 20 53 51 4c 69 74 65 3a 3c 2f 70 3e 0a 0a  in SQLite:</p>..
21a00 3c 70 3e 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  <p>.<blockquote>
21a10 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 09 3c 74  .<table>.<tr>.<t
21a20 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  d valign="top"><
21a30 62 3e 27 6b 65 79 77 6f 72 64 27 3c 2f 62 3e 3c  b>'keyword'</b><
21a40 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32  /td><td width="2
21a50 30 22 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41  0"></td>..<td>^A
21a60 20 6b 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67   keyword in sing
21a70 6c 65 20 71 75 6f 74 65 73 20 69 73 20 61 20 73  le quotes is a s
21a80 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 2e 3c 2f  tring literal.</
21a90 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c  td></tr>..<tr>.<
21aa0 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
21ab0 3c 62 3e 22 6b 65 79 77 6f 72 64 22 3c 2f 62 3e  <b>"keyword"</b>
21ac0 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09  </td><td></td>..
21ad0 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 69  <td>^A keyword i
21ae0 6e 20 64 6f 75 62 6c 65 2d 71 75 6f 74 65 73 20  n double-quotes 
21af0 69 73 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  is an identifier
21b00 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72  .</td></tr>..<tr
21b10 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
21b20 70 22 3e 3c 62 3e 26 23 39 31 3b 6b 65 79 77 6f  p"><b>&#91;keywo
21b30 72 64 26 23 39 33 3b 3c 2f 62 3e 3c 2f 74 64 3e  rd&#93;</b></td>
21b40 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e  <td></td>..<td>^
21b50 41 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73  A keyword enclos
21b60 65 64 20 69 6e 20 73 71 75 61 72 65 20 62 72 61  ed in square bra
21b70 63 6b 65 74 73 20 69 73 20 0a 20 20 20 20 20 20  ckets is .      
21b80 20 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e    an identifier.
21b90 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20 73 74    This is not st
21ba0 61 6e 64 61 72 64 20 53 51 4c 2e 20 20 54 68 69  andard SQL.  Thi
21bb0 73 20 71 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e  s quoting mechan
21bc0 69 73 6d 0a 20 20 20 20 20 20 20 20 69 73 20 75  ism.        is u
21bd0 73 65 64 20 62 79 20 4d 53 20 41 63 63 65 73 73  sed by MS Access
21be0 20 61 6e 64 20 53 51 4c 20 53 65 72 76 65 72 20   and SQL Server 
21bf0 61 6e 64 20 69 73 20 69 6e 63 6c 75 64 65 64 20  and is included 
21c00 69 6e 20 53 51 4c 69 74 65 20 66 6f 72 0a 20 20  in SQLite for.  
21c10 20 20 20 20 20 20 63 6f 6d 70 61 74 69 62 69 6c        compatibil
21c20 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a  ity.</td></tr>..
21c30 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
21c40 22 74 6f 70 22 3e 3c 62 3e 26 23 39 36 3b 6b 65  "top"><b>&#96;ke
21c50 79 77 6f 72 64 26 23 39 36 3b 3c 2f 62 3e 3c 2f  yword&#96;</b></
21c60 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74  td><td></td>..<t
21c70 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 65 6e 63  d>^A keyword enc
21c80 6c 6f 73 65 64 20 69 6e 20 67 72 61 76 65 20 61  losed in grave a
21c90 63 63 65 6e 74 73 20 28 41 53 43 49 49 20 63 6f  ccents (ASCII co
21ca0 64 65 20 39 36 29 20 69 73 20 0a 20 20 20 20 20  de 96) is .     
21cb0 20 20 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72     an identifier
21cc0 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20 73  .  This is not s
21cd0 74 61 6e 64 61 72 64 20 53 51 4c 2e 20 20 54 68  tandard SQL.  Th
21ce0 69 73 20 71 75 6f 74 69 6e 67 20 6d 65 63 68 61  is quoting mecha
21cf0 6e 69 73 6d 0a 20 20 20 20 20 20 20 20 69 73 20  nism.        is 
21d00 75 73 65 64 20 62 79 20 4d 79 53 51 4c 20 61 6e  used by MySQL an
21d10 64 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e  d is included in
21d20 20 53 51 4c 69 74 65 20 66 6f 72 0a 20 20 20 20   SQLite for.    
21d30 20 20 20 20 63 6f 6d 70 61 74 69 62 69 6c 69 74      compatibilit
21d40 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 2f 74  y.</td></tr>.</t
21d50 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  able>.</blockquo
21d60 74 65 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 46 6f 72  te>.</p>..<p>For
21d70 20 72 65 73 69 6c 69 65 6e 63 65 20 77 68 65 6e   resilience when
21d80 20 63 6f 6e 66 72 6f 6e 74 65 64 20 77 69 74 68   confronted with
21d90 20 68 69 73 74 6f 72 69 63 61 6c 20 53 51 4c 20   historical SQL 
21da0 73 74 61 74 65 6d 65 6e 74 73 2c 20 53 51 4c 69  statements, SQLi
21db0 74 65 0a 77 69 6c 6c 20 73 6f 6d 65 74 69 6d 65  te.will sometime
21dc0 73 20 62 65 6e 64 20 74 68 65 20 71 75 6f 74 69  s bend the quoti
21dd0 6e 67 20 72 75 6c 65 73 20 61 62 6f 76 65 3a 3c  ng rules above:<
21de0 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  /p>..<ul>.<li><p
21df0 3e 5e 49 66 20 61 20 6b 65 79 77 6f 72 64 20 69  >^If a keyword i
21e00 6e 20 73 69 6e 67 6c 65 0a 71 75 6f 74 65 73 20  n single.quotes 
21e10 28 65 78 3a 20 3c 62 3e 27 6b 65 79 27 3c 2f 62  (ex: <b>'key'</b
21e20 3e 20 6f 72 20 3c 62 3e 27 67 6c 6f 62 27 3c 2f  > or <b>'glob'</
21e30 62 3e 29 20 69 73 20 75 73 65 64 20 69 6e 20 61  b>) is used in a
21e40 20 63 6f 6e 74 65 78 74 20 77 68 65 72 65 0a 61   context where.a
21e50 6e 20 69 64 65 6e 74 69 66 69 65 72 20 69 73 20  n identifier is 
21e60 61 6c 6c 6f 77 65 64 20 62 75 74 20 77 68 65 72  allowed but wher
21e70 65 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72  e a string liter
21e80 61 6c 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  al is not allowe
21e90 64 2c 20 74 68 65 6e 0a 74 68 65 20 74 6f 6b 65  d, then.the toke
21ea0 6e 20 69 73 20 75 6e 64 65 72 73 74 6f 6f 64 20  n is understood 
21eb0 74 6f 20 62 65 20 61 6e 20 69 64 65 6e 74 69 66  to be an identif
21ec0 69 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61  ier instead of a
21ed0 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 2e   string literal.
21ee0 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e  .</p></li>..<li>
21ef0 3c 70 3e 5e 49 66 20 61 20 6b 65 79 77 6f 72 64  <p>^If a keyword
21f00 20 69 6e 20 64 6f 75 62 6c 65 0a 71 75 6f 74 65   in double.quote
21f10 73 20 28 65 78 3a 20 3c 62 3e 22 6b 65 79 22 3c  s (ex: <b>"key"<
21f20 2f 62 3e 20 6f 72 20 3c 62 3e 22 67 6c 6f 62 22  /b> or <b>"glob"
21f30 3c 2f 62 3e 29 20 69 73 20 75 73 65 64 20 69 6e  </b>) is used in
21f40 20 61 20 63 6f 6e 74 65 78 74 20 77 68 65 72 65   a context where
21f50 0a 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 72 65  .it cannot be re
21f60 73 6f 6c 76 65 64 20 74 6f 20 61 6e 20 69 64 65  solved to an ide
21f70 6e 74 69 66 69 65 72 20 62 75 74 20 77 68 65 72  ntifier but wher
21f80 65 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72  e a string liter
21f90 61 6c 0a 69 73 20 61 6c 6c 6f 77 65 64 2c 20 74  al.is allowed, t
21fa0 68 65 6e 20 74 68 65 20 74 6f 6b 65 6e 20 69 73  hen the token is
21fb0 20 75 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20 62   understood to b
21fc0 65 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72  e a string liter
21fd0 61 6c 20 69 6e 73 74 65 61 64 0a 6f 66 20 61 6e  al instead.of an
21fe0 20 69 64 65 6e 74 69 66 69 65 72 2e 3c 2f 70 3e   identifier.</p>
21ff0 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e  </li>.</ul>..<p>
22000 50 72 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20  Programmers are 
22010 63 61 75 74 69 6f 6e 65 64 20 6e 6f 74 20 74 6f  cautioned not to
22020 20 75 73 65 20 74 68 65 20 74 77 6f 20 65 78 63   use the two exc
22030 65 70 74 69 6f 6e 73 20 64 65 73 63 72 69 62 65  eptions describe
22040 64 20 69 6e 0a 74 68 65 20 70 72 65 76 69 6f 75  d in.the previou
22050 73 20 62 75 6c 6c 65 74 73 2e 20 20 57 65 20 65  s bullets.  We e
22060 6d 70 68 61 73 69 7a 65 20 74 68 61 74 20 74 68  mphasize that th
22070 65 79 20 65 78 69 73 74 20 6f 6e 6c 79 20 73 6f  ey exist only so
22080 20 74 68 61 74 20 6f 6c 64 0a 61 6e 64 20 69 6c   that old.and il
22090 6c 2d 66 6f 72 6d 65 64 20 53 51 4c 20 73 74 61  l-formed SQL sta
220a0 74 65 6d 65 6e 74 73 20 77 69 6c 6c 20 72 75 6e  tements will run
220b0 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 46 75 74   correctly.  Fut
220c0 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a  ure versions of.
220d0 53 51 4c 69 74 65 20 6d 69 67 68 74 20 63 68 61  SQLite might cha
220e0 6e 67 65 20 74 6f 20 72 61 69 73 65 20 65 72 72  nge to raise err
220f0 6f 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61  ors instead of a
22100 63 63 65 70 74 69 6e 67 20 74 68 65 20 6d 61 6c  ccepting the mal
22110 66 6f 72 6d 65 64 0a 73 74 61 74 65 6d 65 6e 74  formed.statement
22120 73 20 63 6f 76 65 72 65 64 20 62 79 20 74 68 65  s covered by the
22130 20 65 78 63 65 70 74 69 6f 6e 73 20 61 62 6f 76   exceptions abov
22140 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69  e.</p>..<p>.SQLi
22150 74 65 20 61 64 64 73 20 6e 65 77 20 6b 65 79 77  te adds new keyw
22160 6f 72 64 73 20 66 72 6f 6d 20 74 69 6d 65 20 74  ords from time t
22170 6f 20 74 69 6d 65 20 77 68 65 6e 20 69 74 20 74  o time when it t
22180 61 6b 65 73 20 6f 6e 20 6e 65 77 20 66 65 61 74  akes on new feat
22190 75 72 65 73 2e 0a 53 6f 20 74 6f 20 70 72 65 76  ures..So to prev
221a0 65 6e 74 20 79 6f 75 72 20 63 6f 64 65 20 66 72  ent your code fr
221b0 6f 6d 20 62 65 69 6e 67 20 62 72 6f 6b 65 6e 20  om being broken 
221c0 62 79 20 66 75 74 75 72 65 20 65 6e 68 61 6e 63  by future enhanc
221d0 65 6d 65 6e 74 73 2c 20 79 6f 75 20 73 68 6f 75  ements, you shou
221e0 6c 64 0a 6e 6f 72 6d 61 6c 6c 79 20 71 75 6f 74  ld.normally quot
221f0 65 20 61 6e 79 20 69 64 65 6e 74 69 66 69 65 72  e any identifier
22200 20 74 68 61 74 20 69 73 20 61 6e 20 45 6e 67 6c   that is an Engl
22210 69 73 68 20 6c 61 6e 67 75 61 67 65 20 77 6f 72  ish language wor
22220 64 2c 20 65 76 65 6e 20 69 66 0a 79 6f 75 20 64  d, even if.you d
22230 6f 20 6e 6f 74 20 68 61 76 65 20 74 6f 2e 0a 3c  o not have to..<
22240 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 6c 69 73  /p>..<p>.The lis
22250 74 20 62 65 6c 6f 77 20 73 68 6f 77 73 20 61 6c  t below shows al
22260 6c 20 70 6f 73 73 69 62 6c 65 20 6b 65 79 77 6f  l possible keywo
22270 72 64 73 20 75 73 65 64 20 62 79 20 61 6e 79 20  rds used by any 
22280 62 75 69 6c 64 20 6f 66 0a 53 51 4c 69 74 65 20  build of.SQLite 
22290 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 5b 63  regardless of [c
222a0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
222b0 6f 6e 73 5d 2e 20 20 0a 4d 6f 73 74 20 72 65 61  ons].  .Most rea
222c0 73 6f 6e 61 62 6c 65 20 63 6f 6e 66 69 67 75 72  sonable configur
222d0 61 74 69 6f 6e 73 20 75 73 65 20 6d 6f 72 65 20  ations use more 
222e0 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20  or all of these 
222f0 6b 65 79 77 6f 72 64 73 2c 0a 62 75 74 20 73 6f  keywords,.but so
22300 6d 65 20 6b 65 79 77 6f 72 64 73 20 6d 61 79 20  me keywords may 
22310 62 65 20 6f 6d 69 74 74 65 64 20 77 68 65 6e 20  be omitted when 
22320 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 66 65 61  SQL language fea
22330 74 75 72 65 73 20 61 72 65 0a 64 69 73 61 62 6c  tures are.disabl
22340 65 64 2e 0a 5e 28 52 65 67 61 72 64 6c 65 73 73  ed..^(Regardless
22350 20 6f 66 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d   of the compile-
22360 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
22370 6f 6e 2c 20 61 6e 79 20 69 64 65 6e 74 69 66 69  on, any identifi
22380 65 72 20 74 68 61 74 20 69 73 20 6e 6f 74 20 6f  er that is not o
22390 6e 0a 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n.the following 
223a0 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20 5b 6c 6c  <tcl>hd_puts [ll
223b0 65 6e 67 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c  ength $keyword_l
223c0 69 73 74 5d 3c 2f 74 63 6c 3e 20 65 6c 65 6d 65  ist]</tcl> eleme
223d0 6e 74 0a 6c 69 73 74 20 69 73 20 6e 6f 74 20 61  nt.list is not a
223e0 20 6b 65 79 77 6f 72 64 20 74 6f 20 74 68 65 20   keyword to the 
223f0 53 51 4c 20 70 61 72 73 65 72 20 69 6e 20 53 51  SQL parser in SQ
22400 4c 69 74 65 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  Lite:.</p>..<blo
22410 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20  ckquote>.<table 
22420 77 69 64 74 68 3d 22 31 30 30 25 22 3e 3c 74 72  width="100%"><tr
22430 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 6c 65 66  >.<td align="lef
22440 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20  t" valign="top" 
22450 77 69 64 74 68 3d 22 32 30 25 22 3e 0a 3c 74 63  width="20%">.<tc
22460 6c 3e 0a 73 65 74 20 6e 20 5b 6c 6c 65 6e 67 74  l>.set n [llengt
22470 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74 5d  h $keyword_list]
22480 0a 73 65 74 20 6e 43 6f 6c 20 35 0a 73 65 74 20  .set nCol 5.set 
22490 6e 52 6f 77 20 5b 65 78 70 72 20 7b 28 24 6e 2b  nRow [expr {($n+
224a0 24 6e 43 6f 6c 2d 31 29 2f 24 6e 43 6f 6c 7d 5d  $nCol-1)/$nCol}]
224b0 0a 73 65 74 20 69 20 30 0a 66 6f 72 65 61 63 68  .set i 0.foreach
224c0 20 77 6f 72 64 20 24 6b 65 79 77 6f 72 64 5f 6c   word $keyword_l
224d0 69 73 74 20 7b 0a 20 20 69 66 20 7b 24 69 3d 3d  ist {.  if {$i==
224e0 24 6e 52 6f 77 7d 20 7b 0a 20 20 20 20 68 64 5f  $nRow} {.    hd_
224f0 70 75 74 73 20 22 3c 2f 74 64 3e 3c 74 64 20 76  puts "</td><td v
22500 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c  align=\"top\" al
22510 69 67 6e 3d 5c 22 6c 65 66 74 5c 22 20 77 69 64  ign=\"left\" wid
22520 74 68 3d 5c 22 32 30 25 5c 22 3e 22 0a 20 20 20  th=\"20%\">".   
22530 20 73 65 74 20 69 20 31 0a 20 20 7d 20 65 6c 73   set i 1.  } els
22540 65 20 7b 0a 20 20 20 20 69 6e 63 72 20 69 0a 20  e {.    incr i. 
22550 20 7d 0a 20 20 68 64 5f 70 75 74 73 20 22 24 77   }.  hd_puts "$w
22560 6f 72 64 3c 62 72 3e 5c 6e 22 0a 7d 0a 3c 2f 74  ord<br>\n".}.</t
22570 63 6c 3e 0a 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f  cl>.</td></tr></
22580 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  table></blockquo
22590 74 65 3e 29 5e 0a                                te>)^.