Documentation Source Text

Hex Artifact Content
Login

Artifact d0ac11ddcddb51aa0ab5880c6e5fa1fb932da586:


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 5e 54 68 65 20 66 69 72 73 74 20  ms.  ^The first 
183d0 66 6f 72 6d 0a 28 77 69 74 68 20 74 68 65 20 22  form.(with the "
183e0 56 41 4c 55 45 53 22 20 6b 65 79 77 6f 72 64 29  VALUES" keyword)
183f0 20 63 72 65 61 74 65 73 20 61 20 73 69 6e 67 6c   creates a singl
18400 65 20 6e 65 77 20 72 6f 77 20 69 6e 20 61 6e 20  e new row in an 
18410 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65 2e 0a  existing table..
18420 5e 49 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69  ^If no column-li
18430 73 74 20 69 73 20 73 70 65 63 69 66 69 65 64 20  st is specified 
18440 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  then the number 
18450 6f 66 20 76 61 6c 75 65 73 20 6d 75 73 74 0a 62  of values must.b
18460 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68  e the same as th
18470 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
18480 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
18490 2e 20 20 5e 49 66 20 61 20 63 6f 6c 75 6d 6e 2d  .  ^If a column-
184a0 6c 69 73 74 0a 69 73 20 73 70 65 63 69 66 69 65  list.is specifie
184b0 64 2c 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62  d, then the numb
184c0 65 72 20 6f 66 20 76 61 6c 75 65 73 20 6d 75 73  er of values mus
184d0 74 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d 62  t match the numb
184e0 65 72 20 6f 66 0a 73 70 65 63 69 66 69 65 64 20  er of.specified 
184f0 63 6f 6c 75 6d 6e 73 2e 20 20 5e 43 6f 6c 75 6d  columns.  ^Colum
18500 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ns of the table 
18510 74 68 61 74 20 64 6f 20 6e 6f 74 20 61 70 70 65  that do not appe
18520 61 72 20 69 6e 20 74 68 65 0a 63 6f 6c 75 6d 6e  ar in the.column
18530 20 6c 69 73 74 20 61 72 65 20 66 69 6c 6c 65 64   list are filled
18540 20 77 69 74 68 20 74 68 65 20 64 65 66 61 75 6c   with the defaul
18550 74 20 76 61 6c 75 65 2c 20 6f 72 20 77 69 74 68  t value, or with
18560 20 4e 55 4c 4c 20 69 66 20 6e 6f 0a 64 65 66 61   NULL if no.defa
18570 75 6c 74 20 76 61 6c 75 65 20 69 73 20 73 70 65  ult value is spe
18580 63 69 66 69 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70  cified..</p>..<p
18590 3e 5e 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72  >^The second for
185a0 6d 20 6f 66 20 74 68 65 20 49 4e 53 45 52 54 20  m of the INSERT 
185b0 73 74 61 74 65 6d 65 6e 74 20 74 61 6b 65 73 20  statement takes 
185c0 69 74 73 20 64 61 74 61 20 66 72 6f 6d 20 61 0a  its data from a.
185d0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
185e0 2e 20 20 5e 54 68 65 20 6e 75 6d 62 65 72 20 6f  .  ^The number o
185f0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
18600 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 0a 53   result of the.S
18610 45 4c 45 43 54 20 6d 75 73 74 20 65 78 61 63 74  ELECT must exact
18620 6c 79 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d  ly match the num
18630 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
18640 6e 20 74 68 65 20 74 61 62 6c 65 20 69 66 0a 6e  n the table if.n
18650 6f 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 69 73  o column list is
18660 20 73 70 65 63 69 66 69 65 64 2c 20 6f 72 20 69   specified, or i
18670 74 20 6d 75 73 74 20 6d 61 74 63 68 20 74 68 65  t must match the
18680 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
18690 6e 73 0a 6e 61 6d 65 64 20 69 6e 20 74 68 65 20  ns.named in the 
186a0 63 6f 6c 75 6d 6e 20 6c 69 73 74 2e 20 20 5e 41  column list.  ^A
186b0 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20 6d 61   new entry is ma
186c0 64 65 20 69 6e 20 74 68 65 20 74 61 62 6c 65 0a  de in the table.
186d0 66 6f 72 20 65 76 65 72 79 20 72 6f 77 20 6f 66  for every row of
186e0 20 74 68 65 20 53 45 4c 45 43 54 20 72 65 73 75   the SELECT resu
186f0 6c 74 2e 20 20 5e 54 68 65 20 53 45 4c 45 43 54  lt.  ^The SELECT
18700 20 6d 61 79 20 62 65 20 73 69 6d 70 6c 65 0a 6f   may be simple.o
18710 72 20 63 6f 6d 70 6f 75 6e 64 2e 3c 2f 70 3e 0a  r compound.</p>.
18720 0a 3c 70 3e 5e 54 68 65 20 74 68 69 72 64 20 66  .<p>^The third f
18730 6f 72 6d 20 6f 66 20 61 6e 20 49 4e 53 45 52 54  orm of an INSERT
18740 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 77 69   statement is wi
18750 74 68 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45  th DEFAULT VALUE
18760 53 2e 0a 5e 28 54 68 65 20 49 4e 53 45 52 54 20  S..^(The INSERT 
18770 2e 2e 2e 20 44 45 46 41 55 4c 54 20 56 41 4c 55  ... DEFAULT VALU
18780 45 53 20 73 74 61 74 65 6d 65 6e 74 20 73 69 6d  ES statement sim
18790 70 6c 79 20 63 72 65 61 74 65 73 20 61 20 73 69  ply creates a si
187a0 6e 67 6c 65 20 6e 65 77 0a 72 6f 77 20 69 6e 20  ngle new.row in 
187b0 74 68 65 20 74 61 62 6c 65 20 69 6e 20 77 68 69  the table in whi
187c0 63 68 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  ch each column i
187d0 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20 69 74  s filled with it
187e0 73 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2e  s default value.
187f0 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  )^</p>..<p>^The 
18800 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63  optional conflic
18810 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20  t-clause allows 
18820 74 68 65 20 73 70 65 63 69 66 69 63 61 74 69 6f  the specificatio
18830 6e 20 6f 66 20 61 6e 20 61 6c 74 65 72 6e 61 74  n of an alternat
18840 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63  ive.constraint c
18850 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
18860 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20  on algorithm to 
18870 75 73 65 20 64 75 72 69 6e 67 20 74 68 69 73 20  use during this 
18880 6f 6e 65 20 49 4e 53 45 52 54 20 63 6f 6d 6d 61  one INSERT comma
18890 6e 64 2e 0a 53 65 65 20 74 68 65 20 73 65 63 74  nd..See the sect
188a0 69 6f 6e 20 74 69 74 6c 65 64 0a 5b 4f 4e 20 43  ion titled.[ON C
188b0 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64  ONFLICT] for add
188c0 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
188d0 69 6f 6e 2e 0a 5e 46 6f 72 20 63 6f 6d 70 61 74  ion..^For compat
188e0 69 62 69 6c 69 74 79 20 77 69 74 68 20 4d 79 53  ibility with MyS
188f0 51 4c 2c 20 74 68 65 20 70 61 72 73 65 72 20 61  QL, the parser a
18900 6c 6c 6f 77 73 20 74 68 65 20 75 73 65 20 6f 66  llows the use of
18910 20 74 68 65 0a 73 69 6e 67 6c 65 20 6b 65 79 77   the.single keyw
18920 6f 72 64 20 3c 61 20 68 72 65 66 3d 22 6c 61 6e  ord <a href="lan
18930 67 5f 72 65 70 6c 61 63 65 2e 68 74 6d 6c 22 3e  g_replace.html">
18940 52 45 50 4c 41 43 45 3c 2f 61 3e 20 61 73 20 61  REPLACE</a> as a
18950 6e 20 0a 61 6c 69 61 73 20 66 6f 72 20 22 49 4e  n .alias for "IN
18960 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43 45 22  SERT OR REPLACE"
18970 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65  ..</p>..<p>^(The
18980 20 6f 70 74 69 6f 6e 61 6c 20 22 3c 69 3e 64 61   optional "<i>da
18990 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c  tabase-name</i><
189a0 62 3e 2e 3c 2f 62 3e 22 20 70 72 65 66 69 78 20  b>.</b>" prefix 
189b0 6f 6e 20 74 68 65 20 3c 69 3e 74 61 62 6c 65 2d  on the <i>table-
189c0 6e 61 6d 65 3c 2f 69 3e 0a 69 73 20 73 75 70 70  name</i>.is supp
189d0 6f 72 74 20 66 6f 72 20 74 6f 70 2d 6c 65 76 65  ort for top-leve
189e0 6c 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  l INSERT stateme
189f0 6e 74 73 20 6f 6e 6c 79 2e 29 5e 20 20 5e 54 68  nts only.)^  ^Th
18a00 65 20 74 61 62 6c 65 20 6e 61 6d 65 20 6d 75 73  e table name mus
18a10 74 20 62 65 0a 75 6e 71 75 61 6c 69 66 69 65 64  t be.unqualified
18a20 20 66 6f 72 20 49 4e 53 45 52 54 20 73 74 61 74   for INSERT stat
18a30 65 6d 65 6e 74 73 20 74 68 61 74 20 6f 63 63 75  ements that occu
18a40 72 20 77 69 74 68 69 6e 20 5b 43 52 45 41 54 45  r within [CREATE
18a50 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d   TRIGGER] statem
18a60 65 6e 74 73 2e 0a 5e 53 69 6d 69 6c 61 72 6c 79  ents..^Similarly
18a70 2c 20 74 68 65 20 22 44 45 46 41 55 4c 54 20 56  , the "DEFAULT V
18a80 41 4c 55 45 53 22 20 66 6f 72 6d 20 6f 66 20 74  ALUES" form of t
18a90 68 65 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  he INSERT statem
18aa0 65 6e 74 20 69 73 20 73 75 70 70 6f 72 74 65 64  ent is supported
18ab0 20 66 6f 72 0a 74 6f 70 2d 6c 65 76 65 6c 20 49   for.top-level I
18ac0 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73  NSERT statements
18ad0 20 6f 6e 6c 79 20 61 6e 64 20 6e 6f 74 20 66 6f   only and not fo
18ae0 72 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  r INSERT stateme
18af0 6e 74 73 20 77 69 74 68 69 6e 0a 74 72 69 67 67  nts within.trigg
18b00 65 72 73 2e 0a 3c 70 3e 0a 0a 3c 74 63 6c 3e 0a  ers..<p>..<tcl>.
18b10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18b20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18b30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18b40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18b50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
18b60 65 63 74 69 6f 6e 20 7b 4f 4e 20 43 4f 4e 46 4c  ection {ON CONFL
18b70 49 43 54 20 63 6c 61 75 73 65 7d 20 63 6f 6e 66  ICT clause} conf
18b80 6c 69 63 74 20 7b 7b 63 6f 6e 66 6c 69 63 74 20  lict {{conflict 
18b90 63 6c 61 75 73 65 7d 20 7b 4f 4e 20 43 4f 4e 46  clause} {ON CONF
18ba0 4c 49 43 54 7d 7d 0a 0a 42 75 62 62 6c 65 44 69  LICT}}..BubbleDi
18bb0 61 67 72 61 6d 20 63 6f 6e 66 6c 69 63 74 2d 63  agram conflict-c
18bc0 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  lause.</tcl>..<p
18bd0 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  >The ON CONFLICT
18be0 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 61   clause is not a
18bf0 20 73 65 70 61 72 61 74 65 20 53 51 4c 20 63 6f   separate SQL co
18c00 6d 6d 61 6e 64 2e 20 20 49 74 20 69 73 20 61 0a  mmand.  It is a.
18c10 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 63 6c 61  non-standard cla
18c20 75 73 65 20 74 68 61 74 20 63 61 6e 20 61 70 70  use that can app
18c30 65 61 72 20 69 6e 20 6d 61 6e 79 20 6f 74 68 65  ear in many othe
18c40 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2e 0a  r SQL commands..
18c50 49 74 20 69 73 20 67 69 76 65 6e 20 69 74 73 20  It is given its 
18c60 6f 77 6e 20 73 65 63 74 69 6f 6e 20 69 6e 20 74  own section in t
18c70 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 62 65 63  his document bec
18c80 61 75 73 65 20 69 74 20 69 73 20 6e 6f 74 0a 70  ause it is not.p
18c90 61 72 74 20 6f 66 20 73 74 61 6e 64 61 72 64 20  art of standard 
18ca0 53 51 4c 20 61 6e 64 20 74 68 65 72 65 66 6f 72  SQL and therefor
18cb0 65 20 6d 69 67 68 74 20 6e 6f 74 20 62 65 20 66  e might not be f
18cc0 61 6d 69 6c 69 61 72 2e 3c 2f 70 3e 0a 0a 3c 70  amiliar.</p>..<p
18cd0 3e 5e 54 68 65 20 73 79 6e 74 61 78 20 66 6f 72  >^The syntax for
18ce0 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   the ON CONFLICT
18cf0 20 63 6c 61 75 73 65 20 69 73 20 61 73 20 73 68   clause is as sh
18d00 6f 77 6e 20 61 62 6f 76 65 20 66 6f 72 0a 74 68  own above for.th
18d10 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63  e CREATE TABLE c
18d20 6f 6d 6d 61 6e 64 2e 20 20 5e 46 6f 72 20 74 68  ommand.  ^For th
18d30 65 20 49 4e 53 45 52 54 20 61 6e 64 0a 55 50 44  e INSERT and.UPD
18d40 41 54 45 20 63 6f 6d 6d 61 6e 64 73 2c 20 74 68  ATE commands, th
18d50 65 20 6b 65 79 77 6f 72 64 73 20 22 4f 4e 20 43  e keywords "ON C
18d60 4f 4e 46 4c 49 43 54 22 20 61 72 65 20 72 65 70  ONFLICT" are rep
18d70 6c 61 63 65 64 20 62 79 20 22 4f 52 22 20 73 6f  laced by "OR" so
18d80 20 74 68 61 74 0a 74 68 65 20 73 79 6e 74 61 78   that.the syntax
18d90 20 72 65 61 64 73 20 6d 6f 72 65 20 6e 61 74 75   reads more natu
18da0 72 61 6c 6c 79 2e 20 20 46 6f 72 20 65 78 61 6d  rally.  For exam
18db0 70 6c 65 2c 20 69 6e 73 74 65 61 64 20 6f 66 0a  ple, instead of.
18dc0 22 49 4e 53 45 52 54 20 4f 4e 20 43 4f 4e 46 4c  "INSERT ON CONFL
18dd0 49 43 54 20 49 47 4e 4f 52 45 22 20 77 65 20 68  ICT IGNORE" we h
18de0 61 76 65 20 22 49 4e 53 45 52 54 20 4f 52 20 49  ave "INSERT OR I
18df0 47 4e 4f 52 45 22 2e 0a 54 68 65 20 6b 65 79 77  GNORE"..The keyw
18e00 6f 72 64 73 20 63 68 61 6e 67 65 20 62 75 74 20  ords change but 
18e10 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20 74  the meaning of t
18e20 68 65 20 63 6c 61 75 73 65 20 69 73 20 74 68 65  he clause is the
18e30 20 73 61 6d 65 0a 65 69 74 68 65 72 20 77 61 79   same.either way
18e40 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e  .</p>..<p>The ON
18e50 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
18e60 20 61 70 70 6c 69 65 73 20 74 6f 20 55 4e 49 51   applies to UNIQ
18e70 55 45 2c 20 4e 4f 54 20 4e 55 4c 4c 2c 20 61 6e  UE, NOT NULL, an
18e80 64 20 43 48 45 43 4b 0a 63 6f 6e 73 74 72 61 69  d CHECK.constrai
18e90 6e 74 73 20 28 61 6e 64 20 74 6f 20 50 52 49 4d  nts (and to PRIM
18ea0 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69  ARY KEY constrai
18eb0 6e 74 73 20 77 68 69 63 68 20 66 6f 72 20 74 68  nts which for th
18ec0 65 20 70 75 72 70 6f 73 65 73 20 0a 6f 66 20 74  e purposes .of t
18ed0 68 69 73 20 73 65 63 74 69 6f 6e 20 61 72 65 20  his section are 
18ee0 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61  the same thing a
18ef0 73 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  s UNIQUE constra
18f00 69 6e 74 73 29 2e 0a 54 68 65 20 4f 4e 20 43 4f  ints)..The ON CO
18f10 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d  NFLICT algorithm
18f20 20 64 6f 65 73 20 6e 6f 74 0a 61 70 70 6c 79 20   does not.apply 
18f30 74 6f 20 5b 46 4f 52 45 49 47 4e 20 4b 45 59 20  to [FOREIGN KEY 
18f40 63 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 0a 54 68  constraints]..Th
18f50 65 72 65 20 61 72 65 20 66 69 76 65 20 63 6f 6e  ere are five con
18f60 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
18f70 20 61 6c 67 6f 72 69 74 68 6d 20 63 68 6f 69 63   algorithm choic
18f80 65 73 3a 0a 52 4f 4c 4c 42 41 43 4b 2c 20 41 42  es:.ROLLBACK, AB
18f90 4f 52 54 2c 20 46 41 49 4c 2c 20 49 47 4e 4f 52  ORT, FAIL, IGNOR
18fa0 45 2c 20 61 6e 64 20 52 45 50 4c 41 43 45 2e 0a  E, and REPLACE..
18fb0 5e 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6e  ^The default con
18fc0 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
18fd0 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 41 42   algorithm is AB
18fe0 4f 52 54 2e 20 20 54 68 69 73 0a 69 73 20 77 68  ORT.  This.is wh
18ff0 61 74 20 74 68 65 79 20 6d 65 61 6e 3a 3c 2f 70  at they mean:</p
19000 3e 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c 62 3e 52  >..<dl>.<dt><b>R
19010 4f 4c 4c 42 41 43 4b 3c 2f 62 3e 3c 2f 64 74 3e  OLLBACK</b></dt>
19020 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61  .<dd><p> ^When a
19030 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e  n applicable con
19040 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
19050 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52 4f  n occurs, the RO
19060 4c 4c 42 41 43 4b 0a 72 65 73 6f 6c 75 74 69 6f  LLBACK.resolutio
19070 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72  n algorithm abor
19080 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 53  ts the current S
19090 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74  QL statement wit
190a0 68 0a 61 6e 20 53 51 4c 49 54 45 5f 43 4f 4e 53  h.an SQLITE_CONS
190b0 54 52 41 49 4e 54 20 65 72 72 6f 72 20 61 6e 64  TRAINT error and
190c0 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74 68 65 20   rolls back the 
190d0 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
190e0 69 6f 6e 2e 0a 5e 49 66 20 6e 6f 20 74 72 61 6e  ion..^If no tran
190f0 73 61 63 74 69 6f 6e 20 69 73 0a 61 63 74 69 76  saction is.activ
19100 65 20 28 6f 74 68 65 72 20 74 68 61 6e 20 74 68  e (other than th
19110 65 20 69 6d 70 6c 69 65 64 20 74 72 61 6e 73 61  e implied transa
19120 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20 63 72  ction that is cr
19130 65 61 74 65 64 20 6f 6e 20 65 76 65 72 79 0a 63  eated on every.c
19140 6f 6d 6d 61 6e 64 29 20 74 68 65 6e 20 74 68 65  ommand) then the
19150 20 52 4f 4c 4c 42 41 43 4b 20 72 65 73 6f 6c 75   ROLLBACK resolu
19160 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 77  tion algorithm w
19170 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73  orks the same as
19180 20 74 68 65 0a 41 42 4f 52 54 20 61 6c 67 6f 72   the.ABORT algor
19190 69 74 68 6d 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a  ithm.</p></dd>..
191a0 3c 64 74 3e 3c 62 3e 41 42 4f 52 54 3c 2f 62 3e  <dt><b>ABORT</b>
191b0 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57  </dt>.<dd><p> ^W
191c0 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c  hen an applicabl
191d0 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  e constraint vio
191e0 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74  lation occurs, t
191f0 68 65 20 41 42 4f 52 54 0a 72 65 73 6f 6c 75 74  he ABORT.resolut
19200 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61 62  ion algorithm ab
19210 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74  orts the current
19220 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 77   SQL statement.w
19230 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 43 4f  ith an SQLITE_CO
19240 4e 53 54 52 41 49 54 20 65 72 72 6f 72 20 61 6e  NSTRAIT error an
19250 64 20 62 61 63 6b 73 20 6f 75 74 20 61 6e 79 20  d backs out any 
19260 63 68 61 6e 67 65 73 0a 6d 61 64 65 20 62 79 20  changes.made by 
19270 74 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20  the current SQL 
19280 73 74 61 74 65 6d 65 6e 74 3b 20 62 75 74 20 63  statement; but c
19290 68 61 6e 67 65 73 20 63 61 75 73 65 64 0a 62 79  hanges caused.by
192a0 20 70 72 69 6f 72 20 53 51 4c 20 73 74 61 74 65   prior SQL state
192b0 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65  ments within the
192c0 20 73 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f   same transactio
192d0 6e 20 61 72 65 20 70 72 65 73 65 72 76 65 64 20  n are preserved 
192e0 61 6e 64 20 74 68 65 0a 74 72 61 6e 73 61 63 74  and the.transact
192f0 69 6f 6e 20 72 65 6d 61 69 6e 73 20 61 63 74 69  ion remains acti
19300 76 65 2e 0a 54 68 69 73 20 69 73 20 74 68 65 20  ve..This is the 
19310 64 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f 72  default behavior
19320 20 61 6e 64 20 74 68 65 20 62 65 68 61 76 69 6f   and the behavio
19330 72 20 70 72 6f 73 63 72 69 62 65 64 20 74 68 65  r proscribed the
19340 20 53 51 4c 0a 73 74 61 6e 64 61 72 64 2e 3c 2f   SQL.standard.</
19350 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e  p></dd>..<dt><b>
19360 46 41 49 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64  FAIL</b></dt>.<d
19370 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61  d><p> ^When an a
19380 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72  pplicable constr
19390 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
193a0 63 63 75 72 73 2c 20 74 68 65 20 46 41 49 4c 0a  ccurs, the FAIL.
193b0 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
193c0 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20  ithm aborts the 
193d0 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74  current SQL stat
193e0 65 6d 65 6e 74 20 77 69 74 68 20 61 6e 0a 53 51  ement with an.SQ
193f0 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
19400 65 72 72 6f 72 2e 20 20 5e 42 75 74 20 74 68 65  error.  ^But the
19410 20 46 41 49 4c 20 72 65 73 6f 6c 75 74 69 6f 6e   FAIL resolution
19420 20 64 6f 65 73 20 6e 6f 74 0a 62 61 63 6b 20 6f   does not.back o
19430 75 74 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ut prior changes
19440 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61 74   of the SQL stat
19450 65 6d 65 6e 74 20 74 68 61 74 20 66 61 69 6c 65  ement that faile
19460 64 20 6e 6f 72 20 64 6f 65 73 0a 69 74 20 65 6e  d nor does.it en
19470 64 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  d the transactio
19480 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c  n..^For example,
19490 20 69 66 20 61 6e 20 55 50 44 41 54 45 0a 73 74   if an UPDATE.st
194a0 61 74 65 6d 65 6e 74 20 65 6e 63 6f 75 6e 74 65  atement encounte
194b0 72 65 64 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  red a constraint
194c0 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 6e 20 74 68   violation on th
194d0 65 20 31 30 30 74 68 20 72 6f 77 20 74 68 61 74  e 100th row that
194e0 0a 69 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20  .it attempts to 
194f0 75 70 64 61 74 65 2c 20 74 68 65 6e 20 74 68 65  update, then the
19500 20 66 69 72 73 74 20 39 39 20 72 6f 77 20 63 68   first 99 row ch
19510 61 6e 67 65 73 20 61 72 65 20 70 72 65 73 65 72  anges are preser
19520 76 65 64 0a 62 75 74 20 63 68 61 6e 67 65 73 20  ved.but changes 
19530 74 6f 20 72 6f 77 73 20 31 30 30 20 61 6e 64 20  to rows 100 and 
19540 62 65 79 6f 6e 64 20 6e 65 76 65 72 20 6f 63 63  beyond never occ
19550 75 72 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 28 3c  ur.</p></dd>..(<
19560 64 74 3e 3c 62 3e 49 47 4e 4f 52 45 3c 2f 62 3e  dt><b>IGNORE</b>
19570 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57  </dt>.<dd><p> ^W
19580 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c  hen an applicabl
19590 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  e constraint vio
195a0 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 0a  lation occurs, .
195b0 74 68 65 20 49 47 4e 4f 52 45 20 72 65 73 6f 6c  the IGNORE resol
195c0 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
195d0 73 6b 69 70 73 20 74 68 65 20 6f 6e 65 20 72 6f  skips the one ro
195e0 77 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 0a  w that contains.
195f0 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  the constraint v
19600 69 6f 6c 61 74 69 6f 6e 20 61 6e 64 20 63 6f 6e  iolation and con
19610 74 69 6e 75 65 73 20 70 72 6f 63 65 73 73 69 6e  tinues processin
19620 67 20 73 75 62 73 65 71 75 65 6e 74 20 72 6f 77  g subsequent row
19630 73 0a 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61  s.of the SQL sta
19640 74 65 6d 65 6e 74 20 61 73 20 69 66 20 6e 6f 74  tement as if not
19650 68 69 6e 67 20 77 65 6e 74 20 77 72 6f 6e 67 2e  hing went wrong.
19660 0a 4f 74 68 65 72 20 72 6f 77 73 20 62 65 66 6f  .Other rows befo
19670 72 65 20 61 6e 64 20 61 66 74 65 72 20 74 68 65  re and after the
19680 20 72 6f 77 20 74 68 61 74 0a 63 6f 6e 74 61 69   row that.contai
19690 6e 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69  ned the constrai
196a0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65  nt violation are
196b0 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64   inserted or upd
196c0 61 74 65 64 0a 6e 6f 72 6d 61 6c 6c 79 2e 20 5e  ated.normally. ^
196d0 4e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 74 75  No error is retu
196e0 72 6e 65 64 20 77 68 65 6e 20 74 68 65 20 49 47  rned when the IG
196f0 4e 4f 52 45 20 63 6f 6e 66 6c 69 63 74 20 72 65  NORE conflict re
19700 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69 74  solution.algorit
19710 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 3c  hm is used.</p><
19720 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 52 45 50  /dd>..<dt><b>REP
19730 4c 41 43 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64  LACE</b></dt>.<d
19740 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 20 55 4e  d><p> ^When a UN
19750 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
19760 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73  violation occurs
19770 2c 20 74 68 65 20 52 45 50 4c 41 43 45 20 61 6c  , the REPLACE al
19780 67 6f 72 69 74 68 6d 0a 64 65 6c 65 74 65 73 20  gorithm.deletes 
19790 70 72 65 2d 65 78 69 73 74 69 6e 67 20 72 6f 77  pre-existing row
197a0 73 20 74 68 61 74 20 61 72 65 20 63 61 75 73 69  s that are causi
197b0 6e 67 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ng the constrain
197c0 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 70 72 69 6f  t violation.prio
197d0 72 20 74 6f 20 69 6e 73 65 72 74 69 6e 67 20 6f  r to inserting o
197e0 72 20 75 70 64 61 74 69 6e 67 20 74 68 65 20 63  r updating the c
197f0 75 72 72 65 6e 74 20 72 6f 77 20 61 6e 64 20 74  urrent row and t
19800 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 74 69  he command conti
19810 6e 75 65 73 20 0a 65 78 65 63 75 74 69 6e 67 20  nues .executing 
19820 6e 6f 72 6d 61 6c 6c 79 2e 0a 5e 49 66 20 61 20  normally..^If a 
19830 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
19840 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
19850 63 75 72 73 2c 20 74 68 65 20 52 45 50 4c 41 43  curs, the REPLAC
19860 45 20 63 6f 6e 66 6c 69 63 74 0a 72 65 73 6f 6c  E conflict.resol
19870 75 74 69 6f 6e 20 72 65 70 6c 61 63 65 73 20 74  ution replaces t
19880 68 65 20 4e 55 4c 4c 20 76 61 6c 75 65 20 77 69  he NULL value wi
19890 74 68 0a 68 65 20 64 65 66 61 75 6c 74 20 76 61  th.he default va
198a0 6c 75 65 20 66 6f 72 20 74 68 61 74 20 63 6f 6c  lue for that col
198b0 75 6d 6e 2c 20 6f 72 20 69 66 20 74 68 65 20 63  umn, or if the c
198c0 6f 6c 75 6d 6e 20 68 61 73 20 6e 6f 20 64 65 66  olumn has no def
198d0 61 75 6c 74 0a 76 61 6c 75 65 2c 20 74 68 65 6e  ault.value, then
198e0 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72   the ABORT algor
198f0 69 74 68 6d 20 69 73 20 75 73 65 64 2e 0a 5e 49  ithm is used..^I
19900 66 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  f a CHECK constr
19910 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
19920 63 63 75 72 73 2c 20 74 68 65 20 52 45 50 4c 41  ccurs, the REPLA
19930 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  CE conflict reso
19940 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d  lution.algorithm
19950 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 6c 69   always works li
19960 6b 65 20 41 42 4f 52 54 2e 3c 2f 70 3e 0a 0a 3c  ke ABORT.</p>..<
19970 70 3e 5e 57 68 65 6e 20 74 68 65 20 52 45 50 4c  p>^When the REPL
19980 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ACE conflict res
19990 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74 65 67 79  olution strategy
199a0 20 64 65 6c 65 74 65 73 20 72 6f 77 73 20 69 6e   deletes rows in
199b0 20 6f 72 64 65 72 20 74 6f 0a 73 61 74 69 73 66   order to.satisf
199c0 79 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20  y a constraint, 
199d0 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20  [CREATE TRIGGER 
199e0 7c 20 64 65 6c 65 74 65 20 74 72 69 67 67 65 72  | delete trigger
199f0 73 5d 20 66 69 72 65 20 69 66 20 61 6e 64 20 6f  s] fire if and o
19a00 6e 6c 79 20 69 66 0a 5b 72 65 63 75 72 73 69 76  nly if.[recursiv
19a10 65 5f 74 72 69 67 67 65 72 73 20 70 72 61 67 6d  e_triggers pragm
19a20 61 20 7c 20 72 65 63 75 72 73 69 76 65 20 74 72  a | recursive tr
19a30 69 67 67 65 72 73 5d 20 61 72 65 20 65 6e 61 62  iggers] are enab
19a40 6c 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  led.</p>..<p>^Th
19a50 65 20 5b 73 71 6c 69 74 65 33 5f 75 70 64 61 74  e [sqlite3_updat
19a60 65 5f 68 6f 6f 6b 20 7c 20 75 70 64 61 74 65 20  e_hook | update 
19a70 68 6f 6f 6b 5d 20 69 73 20 6e 6f 74 20 69 6e 76  hook] is not inv
19a80 6f 6b 65 64 20 66 6f 72 20 72 6f 77 73 20 74 68  oked for rows th
19a90 61 74 0a 61 72 65 20 64 65 6c 65 74 65 64 20 62  at.are deleted b
19aa0 79 20 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f  y the REPLACE co
19ab0 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
19ac0 6e 20 73 74 72 61 74 65 67 79 2e 20 20 5e 4e 6f  n strategy.  ^No
19ad0 72 20 64 6f 65 73 0a 52 45 50 4c 41 43 45 20 69  r does.REPLACE i
19ae0 6e 63 72 65 6d 65 6e 74 20 74 68 65 20 5b 73 71  ncrement the [sq
19af0 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 20 7c 20  lite3_changes | 
19b00 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 5d 2e  change counter].
19b10 0a 54 68 65 20 65 78 63 65 70 74 69 6f 6e 61 6c  .The exceptional
19b20 20 62 65 68 61 76 69 6f 72 73 20 64 65 66 69 6e   behaviors defin
19b30 65 64 20 69 6e 20 74 68 69 73 20 70 61 72 61 67  ed in this parag
19b40 72 61 70 68 20 6d 69 67 68 74 20 63 68 61 6e 67  raph might chang
19b50 65 20 0a 69 6e 20 61 20 66 75 74 75 72 65 20 72  e .in a future r
19b60 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a 3c 2f 64 6c  elease.</p>.</dl
19b70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 61 6c 67 6f 72  >..<p>^The algor
19b80 69 74 68 6d 20 73 70 65 63 69 66 69 65 64 20 69  ithm specified i
19b90 6e 20 74 68 65 20 4f 52 20 63 6c 61 75 73 65 20  n the OR clause 
19ba0 6f 66 20 61 20 49 4e 53 45 52 54 20 6f 72 20 55  of a INSERT or U
19bb0 50 44 41 54 45 0a 6f 76 65 72 72 69 64 65 73 20  PDATE.overrides 
19bc0 61 6e 79 20 61 6c 67 6f 72 69 74 68 6d 20 73 70  any algorithm sp
19bd0 65 63 69 66 69 65 64 20 69 6e 20 61 20 43 52 45  ecified in a CRE
19be0 41 54 45 20 54 41 42 4c 45 2e 0a 5e 49 66 20 6e  ATE TABLE..^If n
19bf0 6f 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73  o algorithm is s
19c00 70 65 63 69 66 69 65 64 20 61 6e 79 77 68 65 72  pecified anywher
19c10 65 2c 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67  e, the ABORT alg
19c20 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c  orithm is used.<
19c30 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
19c40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19c50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19c60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19c70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19c80 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
19c90 6e 20 52 45 49 4e 44 45 58 20 72 65 69 6e 64 65  n REINDEX reinde
19ca0 78 20 52 45 49 4e 44 45 58 0a 0a 42 75 62 62 6c  x REINDEX..Bubbl
19cb0 65 44 69 61 67 72 61 6d 20 72 65 69 6e 64 65 78  eDiagram reindex
19cc0 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a  -stmt 1.</tcl>..
19cd0 3c 70 3e 5e 54 68 65 20 52 45 49 4e 44 45 58 20  <p>^The REINDEX 
19ce0 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20  command is used 
19cf0 74 6f 20 64 65 6c 65 74 65 20 61 6e 64 20 72 65  to delete and re
19d00 63 72 65 61 74 65 20 69 6e 64 69 63 65 73 20 66  create indices f
19d10 72 6f 6d 20 73 63 72 61 74 63 68 2e 0a 54 68 69  rom scratch..Thi
19d20 73 20 69 73 20 75 73 65 66 75 6c 20 77 68 65 6e  s is useful when
19d30 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20   the definition 
19d40 6f 66 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  of a collation s
19d50 65 71 75 65 6e 63 65 20 68 61 73 20 63 68 61 6e  equence has chan
19d60 67 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  ged..</p>..<p>^I
19d70 6e 20 74 68 65 20 66 69 72 73 74 20 66 6f 72 6d  n the first form
19d80 2c 20 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e  , all indices in
19d90 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
19da0 74 61 62 61 73 65 73 20 74 68 61 74 20 75 73 65  tabases that use
19db0 20 74 68 65 0a 6e 61 6d 65 64 20 63 6f 6c 6c 61   the.named colla
19dc0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 61 72  tion sequence ar
19dd0 65 20 72 65 63 72 65 61 74 65 64 2e 20 5e 28 49  e recreated. ^(I
19de0 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 66 6f 72  n the second for
19df0 6d 2c 20 69 66 20 0a 3c 69 3e 26 23 39 31 3b 64  m, if .<i>&#91;d
19e00 61 74 61 62 61 73 65 2d 6e 61 6d 65 2e 26 23 39  atabase-name.&#9
19e10 33 3b 74 61 62 6c 65 2f 69 6e 64 65 78 2d 6e 61  3;table/index-na
19e20 6d 65 3c 2f 69 3e 20 69 64 65 6e 74 69 66 69 65  me</i> identifie
19e30 73 20 61 20 74 61 62 6c 65 2c 0a 74 68 65 6e 20  s a table,.then 
19e40 61 6c 6c 20 69 6e 64 69 63 65 73 0a 61 73 73 6f  all indices.asso
19e50 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
19e60 74 61 62 6c 65 20 61 72 65 20 72 65 62 75 69 6c  table are rebuil
19e70 74 2e 29 5e 20 5e 49 66 20 61 6e 20 69 6e 64 65  t.)^ ^If an inde
19e80 78 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 2c  x is identified,
19e90 20 74 68 65 6e 20 6f 6e 6c 79 0a 74 68 69 73 20   then only.this 
19ea0 73 70 65 63 69 66 69 63 20 69 6e 64 65 78 20 69  specific index i
19eb0 73 20 64 65 6c 65 74 65 64 20 61 6e 64 20 72 65  s deleted and re
19ec0 63 72 65 61 74 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c  created..</p>..<
19ed0 70 3e 5e 49 66 20 6e 6f 20 3c 69 3e 64 61 74 61  p>^If no <i>data
19ee0 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73  base-name</i> is
19ef0 20 73 70 65 63 69 66 69 65 64 20 61 6e 64 20 74   specified and t
19f00 68 65 72 65 20 65 78 69 73 74 73 20 62 6f 74 68  here exists both
19f10 20 61 20 74 61 62 6c 65 20 6f 72 0a 69 6e 64 65   a table or.inde
19f20 78 20 61 6e 64 20 61 20 63 6f 6c 6c 61 74 69 6f  x and a collatio
19f30 6e 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68  n sequence of th
19f40 65 20 73 70 65 63 69 66 69 65 64 20 6e 61 6d 65  e specified name
19f50 2c 20 74 68 65 6e 20 69 6e 64 69 63 65 73 20 61  , then indices a
19f60 73 73 6f 63 69 61 74 65 64 0a 77 69 74 68 20 74  ssociated.with t
19f70 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
19f80 75 65 6e 63 65 20 6f 6e 6c 79 20 61 72 65 20 72  uence only are r
19f90 65 63 6f 6e 73 74 72 75 63 74 65 64 2e 20 54 68  econstructed. Th
19fa0 69 73 20 61 6d 62 69 67 75 69 74 79 20 6d 61 79  is ambiguity may
19fb0 20 62 65 0a 64 69 73 70 65 6c 6c 65 64 20 62 79   be.dispelled by
19fc0 20 61 6c 77 61 79 73 20 73 70 65 63 69 66 79 69   always specifyi
19fd0 6e 67 20 61 20 3c 69 3e 64 61 74 61 62 61 73 65  ng a <i>database
19fe0 2d 6e 61 6d 65 3c 2f 69 3e 20 77 68 65 6e 20 72  -name</i> when r
19ff0 65 69 6e 64 65 78 69 6e 67 20 61 0a 73 70 65 63  eindexing a.spec
1a000 69 66 69 63 20 74 61 62 6c 65 20 6f 72 20 69 6e  ific table or in
1a010 64 65 78 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  dex...<tcl>.####
1a020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a030 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a060 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
1a070 69 6f 6e 20 52 45 50 4c 41 43 45 20 72 65 70 6c  ion REPLACE repl
1a080 61 63 65 20 52 45 50 4c 41 43 45 0a 0a 3c 2f 74  ace REPLACE..</t
1a090 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 50  cl>..<p>^The REP
1a0a0 4c 41 43 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20  LACE command is 
1a0b0 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
1a0c0 20 22 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 7c   "[ON CONFLICT |
1a0d0 20 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41   INSERT OR REPLA
1a0e0 43 45 5d 22 0a 76 61 72 69 61 6e 74 20 6f 66 20  CE]".variant of 
1a0f0 74 68 65 20 5b 49 4e 53 45 52 54 5d 20 63 6f 6d  the [INSERT] com
1a100 6d 61 6e 64 2e 20 20 0a 54 68 69 73 20 61 6c 69  mand.  .This ali
1a110 61 73 20 69 73 20 70 72 6f 76 69 64 65 64 20 66  as is provided f
1a120 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  or compatibility
1a130 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61 62   other SQL datab
1a140 61 73 65 20 65 6e 67 69 6e 65 73 2e 20 20 53 65  ase engines.  Se
1a150 65 20 74 68 65 20 0a 5b 49 4e 53 45 52 54 5d 20  e the .[INSERT] 
1a160 63 6f 6d 6d 61 6e 64 20 64 6f 63 75 6d 65 6e 74  command document
1a170 61 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69  ation for additi
1a180 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
1a190 2e 3c 2f 70 3e 20 20 0a 0a 3c 74 63 6c 3e 0a 23  .</p>  ..<tcl>.#
1a1a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a1b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a1c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a1d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a1e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
1a1f0 65 63 74 69 6f 6e 20 53 45 4c 45 43 54 20 73 65  ection SELECT se
1a200 6c 65 63 74 20 7b 53 45 4c 45 43 54 20 71 75 65  lect {SELECT que
1a210 72 79 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  ry}..BubbleDiagr
1a220 61 6d 20 73 65 6c 65 63 74 2d 73 74 6d 74 20 31  am select-stmt 1
1a230 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73  .BubbleDiagram s
1a240 65 6c 65 63 74 2d 63 6f 72 65 0a 42 75 62 62 6c  elect-core.Bubbl
1a250 65 44 69 61 67 72 61 6d 20 72 65 73 75 6c 74 2d  eDiagram result-
1a260 63 6f 6c 75 6d 6e 0a 42 75 62 62 6c 65 44 69 61  column.BubbleDia
1a270 67 72 61 6d 20 6a 6f 69 6e 2d 73 6f 75 72 63 65  gram join-source
1a280 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73  .BubbleDiagram s
1a290 69 6e 67 6c 65 2d 73 6f 75 72 63 65 0a 42 75 62  ingle-source.Bub
1a2a0 62 6c 65 44 69 61 67 72 61 6d 20 6a 6f 69 6e 2d  bleDiagram join-
1a2b0 6f 70 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  op.BubbleDiagram
1a2c0 20 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74   join-constraint
1a2d0 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 6f  .BubbleDiagram o
1a2e0 72 64 65 72 69 6e 67 2d 74 65 72 6d 0a 42 75 62  rdering-term.Bub
1a2f0 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d 70 6f  bleDiagram compo
1a300 75 6e 64 2d 6f 70 65 72 61 74 6f 72 0a 3c 2f 74  und-operator.</t
1a310 63 6c 3e 0a 0a 0a 3c 70 3e 54 68 65 20 53 45 4c  cl>...<p>The SEL
1a320 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ECT statement is
1a330 20 75 73 65 64 20 74 6f 20 71 75 65 72 79 20 74   used to query t
1a340 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 5e 54  he database.  ^T
1a350 68 65 0a 72 65 73 75 6c 74 20 6f 66 20 61 20 53  he.result of a S
1a360 45 4c 45 43 54 20 69 73 20 7a 65 72 6f 20 6f 72  ELECT is zero or
1a370 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20 64 61   more rows of da
1a380 74 61 20 77 68 65 72 65 20 65 61 63 68 20 72 6f  ta where each ro
1a390 77 0a 68 61 73 20 61 20 66 69 78 65 64 20 6e 75  w.has a fixed nu
1a3a0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 2e  mber of columns.
1a3b0 20 20 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43    ..<p>The SELEC
1a3c0 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 74  T statement is t
1a3d0 68 65 20 6d 6f 73 74 20 63 6f 6d 70 6c 69 63 61  he most complica
1a3e0 74 65 64 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 74  ted command in t
1a3f0 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e  he SQL language.
1a400 0a 54 6f 20 6d 61 6b 65 20 74 68 65 20 64 65 73  .To make the des
1a410 63 72 69 70 74 69 6f 6e 20 65 61 73 69 65 72 20  cription easier 
1a420 74 6f 20 66 6f 6c 6c 6f 77 2c 20 73 6f 6d 65 20  to follow, some 
1a430 6f 66 20 74 68 65 20 70 61 73 73 61 67 65 73 20  of the passages 
1a440 62 65 6c 6f 77 20 64 65 73 63 72 69 62 65 0a 74  below describe.t
1a450 68 65 20 77 61 79 20 74 68 65 20 64 61 74 61 20  he way the data 
1a460 72 65 74 75 72 6e 65 64 20 62 79 20 61 20 53 45  returned by a SE
1a470 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
1a480 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61 73 20  s determined as 
1a490 61 20 73 65 72 69 65 73 20 6f 66 0a 73 74 65 70  a series of.step
1a4a0 73 2e 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61  s. It is importa
1a4b0 6e 74 20 74 6f 20 6b 65 65 70 20 69 6e 20 6d 69  nt to keep in mi
1a4c0 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 73 20  nd that this is 
1a4d0 70 75 72 65 6c 79 20 69 6c 6c 75 73 74 72 61 74  purely illustrat
1a4e0 69 76 65 20 2d 0a 69 6e 20 70 72 61 63 74 69 63  ive -.in practic
1a4f0 65 20 6e 65 69 74 68 65 72 20 53 51 4c 69 74 65  e neither SQLite
1a500 20 6e 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 53   nor any other S
1a510 51 4c 20 65 6e 67 69 6e 65 20 69 73 20 72 65 71  QL engine is req
1a520 75 69 72 65 64 20 74 6f 20 66 6f 6c 6c 6f 77 20  uired to follow 
1a530 0a 74 68 69 73 20 6f 72 20 61 6e 79 20 6f 74 68  .this or any oth
1a540 65 72 20 73 70 65 63 69 66 69 63 20 70 72 6f 63  er specific proc
1a550 65 73 73 2e 0a 0a 3c 68 33 3e 53 69 6d 70 6c 65  ess...<h3>Simple
1a560 20 53 65 6c 65 63 74 20 50 72 6f 63 65 73 73 69   Select Processi
1a570 6e 67 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20  ng</h3>..<p>The 
1a580 73 79 6e 74 61 78 20 66 6f 72 20 61 20 73 69 6d  syntax for a sim
1a590 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
1a5a0 6d 65 6e 74 20 69 73 20 64 65 70 69 63 74 65 64  ment is depicted
1a5b0 20 69 6e 20 74 68 65 20 0a 5b 73 65 6c 65 63 74   in the .[select
1a5c0 2d 63 6f 72 65 20 73 79 6e 74 61 78 20 64 69 61  -core syntax dia
1a5d0 67 72 61 6d 5d 2e 20 47 65 6e 65 72 61 74 69 6e  gram]. Generatin
1a5e0 67 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  g the results of
1a5f0 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54   a simple SELECT
1a600 0a 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72  .statement is pr
1a610 65 73 65 6e 74 65 64 20 61 73 20 61 20 66 6f 75  esented as a fou
1a620 72 20 73 74 65 70 20 70 72 6f 63 65 73 73 20 69  r step process i
1a630 6e 20 74 68 65 20 64 65 73 63 72 69 70 74 69 6f  n the descriptio
1a640 6e 20 62 65 6c 6f 77 3a 0a 0a 3c 6f 6c 3e 0a 20  n below:..<ol>. 
1a650 20 3c 6c 69 3e 20 3c 70 3e 5b 46 52 4f 4d 20 63   <li> <p>[FROM c
1a660 6c 61 75 73 65 5d 20 70 72 6f 63 65 73 73 69 6e  lause] processin
1a670 67 3a 20 54 68 65 20 69 6e 70 75 74 20 64 61 74  g: The input dat
1a680 61 20 66 6f 72 20 74 68 65 20 73 69 6d 70 6c 65  a for the simple
1a690 20 53 45 4c 45 43 54 20 69 73 0a 20 20 20 20 20   SELECT is.     
1a6a0 20 20 64 65 74 65 72 6d 69 6e 65 64 2e 20 54 68    determined. Th
1a6b0 65 20 69 6e 70 75 74 20 64 61 74 61 20 69 73 20  e input data is 
1a6c0 65 69 74 68 65 72 20 69 6d 70 6c 69 63 69 74 6c  either implicitl
1a6d0 79 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 77  y a single row w
1a6e0 69 74 68 20 30 0a 20 20 20 20 20 20 20 63 6f 6c  ith 0.       col
1a6f0 75 6d 6e 73 20 28 69 66 20 74 68 65 72 65 20 69  umns (if there i
1a700 73 20 6e 6f 20 46 52 4f 4d 20 63 6c 61 75 73 65  s no FROM clause
1a710 29 20 6f 72 20 69 73 20 64 65 74 65 72 6d 69 6e  ) or is determin
1a720 65 64 20 62 79 20 61 6e 61 6c 79 7a 69 6e 67 20  ed by analyzing 
1a730 74 68 65 0a 20 20 20 20 20 20 20 5b 6a 6f 69 6e  the.       [join
1a740 2d 73 6f 75 72 63 65 20 73 79 6e 74 61 78 20 64  -source syntax d
1a750 69 61 67 72 61 6d 7c 6a 6f 69 6e 2d 73 6f 75 72  iagram|join-sour
1a760 63 65 5d 20 73 70 65 63 69 66 69 63 61 74 69 6f  ce] specificatio
1a770 6e 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 0a  n that follows .
1a780 20 20 20 20 20 20 20 61 6e 20 65 78 70 6c 69 63         an explic
1a790 69 74 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e 0a  it FROM clause..
1a7a0 20 20 3c 6c 69 3e 20 3c 70 3e 5b 57 48 45 52 45    <li> <p>[WHERE
1a7b0 20 63 6c 61 75 73 65 5d 20 70 72 6f 63 65 73 73   clause] process
1a7c0 69 6e 67 3a 20 54 68 65 20 69 6e 70 75 74 20 64  ing: The input d
1a7d0 61 74 61 20 69 73 20 66 69 6c 74 65 72 65 64 20  ata is filtered 
1a7e0 75 73 69 6e 67 20 74 68 65 20 57 48 45 52 45 0a  using the WHERE.
1a7f0 20 20 20 20 20 20 20 63 6c 61 75 73 65 20 65 78         clause ex
1a800 70 72 65 73 73 69 6f 6e 2e 20 20 0a 20 20 3c 6c  pression.  .  <l
1a810 69 3e 20 3c 70 3e 5b 47 52 4f 55 50 20 42 59 7c  i> <p>[GROUP BY|
1a820 47 52 4f 55 50 20 42 59 2c 20 48 41 56 49 4e 47  GROUP BY, HAVING
1a830 20 61 6e 64 20 72 65 73 75 6c 74 2d 63 6f 6c 75   and result-colu
1a840 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 20 70  mn expression] p
1a850 72 6f 63 65 73 73 69 6e 67 3a 20 0a 20 20 20 20  rocessing: .    
1a860 20 20 20 54 68 65 20 73 65 74 20 6f 66 20 72 65     The set of re
1a870 73 75 6c 74 20 72 6f 77 73 20 69 73 20 63 6f 6d  sult rows is com
1a880 70 75 74 65 64 20 62 79 20 61 67 67 72 65 67 61  puted by aggrega
1a890 74 69 6e 67 20 74 68 65 20 64 61 74 61 20 61 63  ting the data ac
1a8a0 63 6f 72 64 69 6e 67 20 74 6f 0a 20 20 20 20 20  cording to.     
1a8b0 20 20 61 6e 79 20 47 52 4f 55 50 20 42 59 20 63    any GROUP BY c
1a8c0 6c 61 75 73 65 20 61 6e 64 20 63 61 6c 63 75 6c  lause and calcul
1a8d0 61 74 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74  ating the result
1a8e0 2d 73 65 74 20 65 78 70 72 65 73 73 69 6f 6e 73  -set expressions
1a8f0 20 66 6f 72 20 74 68 65 0a 20 20 20 20 20 20 20   for the.       
1a900 72 6f 77 73 20 6f 66 20 74 68 65 20 66 69 6c 74  rows of the filt
1a910 65 72 65 64 20 69 6e 70 75 74 20 64 61 74 61 73  ered input datas
1a920 65 74 2e 20 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e  et.  .  <li> <p>
1a930 5b 44 49 53 54 49 4e 43 54 7c 44 49 53 54 49 4e  [DISTINCT|DISTIN
1a940 43 54 2f 41 4c 4c 20 6b 65 79 77 6f 72 64 5d 20  CT/ALL keyword] 
1a950 70 72 6f 63 65 73 73 69 6e 67 3a 20 49 66 20 74  processing: If t
1a960 68 65 20 71 75 65 72 79 20 69 73 20 61 20 22 53  he query is a "S
1a970 45 4c 45 43 54 0a 20 20 20 20 20 20 20 44 49 53  ELECT.       DIS
1a980 54 49 4e 43 54 22 20 71 75 65 72 79 2c 20 64 75  TINCT" query, du
1a990 70 6c 69 63 61 74 65 20 72 6f 77 73 20 61 72 65  plicate rows are
1a9a0 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68   removed from th
1a9b0 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20  e set of result 
1a9c0 72 6f 77 73 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  rows..</ol>..<p>
1a9d0 5e 54 68 65 72 65 20 61 72 65 20 74 77 6f 20 74  ^There are two t
1a9e0 79 70 65 73 20 6f 66 20 73 69 6d 70 6c 65 20 53  ypes of simple S
1a9f0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
1aa00 2d 20 61 67 67 72 65 67 61 74 65 20 61 6e 64 20  - aggregate and 
1aa10 0a 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71  .non-aggregate q
1aa20 75 65 72 69 65 73 2e 20 5e 41 20 73 69 6d 70 6c  ueries. ^A simpl
1aa30 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
1aa40 6e 74 20 69 73 20 61 6e 20 61 67 67 72 65 67 61  nt is an aggrega
1aa50 74 65 20 71 75 65 72 79 20 69 66 0a 69 74 20 63  te query if.it c
1aa60 6f 6e 74 61 69 6e 73 20 65 69 74 68 65 72 20 61  ontains either a
1aa70 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
1aa80 20 6f 72 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20   or one or more 
1aa90 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1aaa0 6f 6e 73 0a 69 6e 20 74 68 65 20 72 65 73 75 6c  ons.in the resul
1aab0 74 2d 73 65 74 2e 20 5e 4f 74 68 65 72 77 69 73  t-set. ^Otherwis
1aac0 65 2c 20 69 66 20 61 20 73 69 6d 70 6c 65 20 53  e, if a simple S
1aad0 45 4c 45 43 54 20 63 6f 6e 74 61 69 6e 73 20 6e  ELECT contains n
1aae0 6f 20 61 67 67 72 65 67 61 74 65 0a 66 75 6e 63  o aggregate.func
1aaf0 74 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55 50  tions or a GROUP
1ab00 20 42 59 20 63 6c 61 75 73 65 2c 20 69 74 20 69   BY clause, it i
1ab10 73 20 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74  s a non-aggregat
1ab20 65 20 71 75 65 72 79 2e 0a 0a 3c 70 3e 3c 62 3e  e query...<p><b>
1ab30 31 2e 20 44 65 74 65 72 6d 69 6e 61 74 69 6f 6e  1. Determination
1ab40 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61 20 28   of input data (
1ab50 46 52 4f 4d 20 63 6c 61 75 73 65 20 70 72 6f 63  FROM clause proc
1ab60 65 73 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63  essing).</b>.<tc
1ab70 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 66 72  l>hd_fragment fr
1ab80 6f 6d 63 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c  omclause</tcl>.<
1ab90 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20  tcl>hd_keywords 
1aba0 7b 46 52 4f 4d 20 63 6c 61 75 73 65 7d 3c 2f 74  {FROM clause}</t
1abb0 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e 70 75  cl>..<p>The inpu
1abc0 74 20 64 61 74 61 20 75 73 65 64 20 62 79 20 61  t data used by a
1abd0 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 71   simple SELECT q
1abe0 75 65 72 79 20 69 73 20 61 20 73 65 74 20 6f 66  uery is a set of
1abf0 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 0a   <i>N</i> rows .
1ac00 65 61 63 68 20 3c 69 3e 4d 3c 2f 69 3e 20 63 6f  each <i>M</i> co
1ac10 6c 75 6d 6e 73 20 77 69 64 65 2e 0a 0a 3c 70 3e  lumns wide...<p>
1ac20 5e 28 49 66 20 74 68 65 20 46 52 4f 4d 20 63 6c  ^(If the FROM cl
1ac30 61 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64 20  ause is omitted 
1ac40 66 72 6f 6d 20 61 20 73 69 6d 70 6c 65 20 53 45  from a simple SE
1ac50 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20  LECT statement, 
1ac60 74 68 65 6e 20 74 68 65 20 0a 69 6e 70 75 74 20  then the .input 
1ac70 64 61 74 61 20 69 73 20 69 6d 70 6c 69 63 69 74  data is implicit
1ac80 6c 79 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  ly a single row 
1ac90 7a 65 72 6f 20 63 6f 6c 75 6d 6e 73 20 77 69 64  zero columns wid
1aca0 65 29 5e 20 28 69 2e 65 2e 20 3c 69 3e 4e 3c 2f  e)^ (i.e. <i>N</
1acb0 69 3e 3d 31 20 61 6e 64 0a 3c 69 3e 4d 3c 2f 69  i>=1 and.<i>M</i
1acc0 3e 3d 30 29 2e 0a 0a 3c 70 3e 49 66 20 61 20 46  >=0)...<p>If a F
1acd0 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 73 70  ROM clause is sp
1ace0 65 63 69 66 69 65 64 2c 20 74 68 65 20 64 61 74  ecified, the dat
1acf0 61 20 6f 6e 20 77 68 69 63 68 20 61 20 73 69 6d  a on which a sim
1ad00 70 6c 65 20 53 45 4c 45 43 54 20 71 75 65 72 79  ple SELECT query
1ad10 0a 6f 70 65 72 61 74 65 73 20 63 6f 6d 65 73 20  .operates comes 
1ad20 66 72 6f 6d 20 74 68 65 20 6f 6e 65 20 6f 72 20  from the one or 
1ad30 6d 6f 72 65 20 74 61 62 6c 65 73 20 6f 72 20 73  more tables or s
1ad40 75 62 71 75 65 72 69 65 73 20 28 53 45 4c 45 43  ubqueries (SELEC
1ad50 54 20 73 74 61 74 65 6d 65 6e 74 73 0a 69 6e 20  T statements.in 
1ad60 70 61 72 65 6e 74 68 65 73 69 73 29 20 73 70 65  parenthesis) spe
1ad70 63 69 66 69 65 64 20 66 6f 6c 6c 6f 77 69 6e 67  cified following
1ad80 20 74 68 65 20 46 52 4f 4d 20 6b 65 79 77 6f 72   the FROM keywor
1ad90 64 2e 20 5e 41 20 73 75 62 2d 73 65 6c 65 63 74  d. ^A sub-select
1ada0 20 73 70 65 63 69 66 69 65 64 0a 69 6e 20 74 68   specified.in th
1adb0 65 20 6a 6f 69 6e 2d 73 6f 75 72 63 65 20 66 6f  e join-source fo
1adc0 6c 6c 6f 77 69 6e 67 20 74 68 65 20 46 52 4f 4d  llowing the FROM
1add0 20 63 6c 61 75 73 65 20 69 6e 20 61 20 73 69 6d   clause in a sim
1ade0 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
1adf0 6d 65 6e 74 20 69 73 0a 68 61 6e 64 6c 65 64 20  ment is.handled 
1ae00 61 73 20 69 66 20 69 74 20 77 61 73 20 61 20 74  as if it was a t
1ae10 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  able containing 
1ae20 74 68 65 20 64 61 74 61 20 72 65 74 75 72 6e 65  the data returne
1ae30 64 20 62 79 20 65 78 65 63 75 74 69 6e 67 20 74  d by executing t
1ae40 68 65 0a 73 75 62 2d 73 65 6c 65 63 74 20 73 74  he.sub-select st
1ae50 61 74 65 6d 65 6e 74 2e 20 5e 45 61 63 68 20 63  atement. ^Each c
1ae60 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 73 75 62  olumn of the sub
1ae70 2d 73 65 6c 65 63 74 20 64 61 74 61 73 65 74 20  -select dataset 
1ae80 69 6e 68 65 72 69 74 73 20 74 68 65 0a 5b 63 6f  inherits the.[co
1ae90 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
1aea0 5d 20 61 6e 64 20 5b 61 66 66 69 6e 69 74 79 5d  ] and [affinity]
1aeb0 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f   of the correspo
1aec0 6e 64 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  nding expression
1aed0 20 69 6e 20 74 68 65 0a 73 75 62 2d 73 65 6c 65   in the.sub-sele
1aee0 63 74 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c  ct statement...<
1aef0 70 3e 5e 49 66 20 74 68 65 72 65 20 69 73 20 6f  p>^If there is o
1af00 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 74 61 62  nly a single tab
1af10 6c 65 20 69 6e 20 74 68 65 20 6a 6f 69 6e 2d 73  le in the join-s
1af20 6f 75 72 63 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  ource following 
1af30 74 68 65 20 46 52 4f 4d 0a 63 6c 61 75 73 65 2c  the FROM.clause,
1af40 20 74 68 65 6e 20 74 68 65 20 69 6e 70 75 74 20   then the input 
1af50 64 61 74 61 20 75 73 65 64 20 62 79 20 74 68 65  data used by the
1af60 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1af70 74 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74  t is the content
1af80 73 20 6f 66 20 74 68 65 0a 6e 61 6d 65 64 20 74  s of the.named t
1af90 61 62 6c 65 2e 20 5e 49 66 20 74 68 65 72 65 20  able. ^If there 
1afa0 69 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  is more than one
1afb0 20 74 61 62 6c 65 20 73 70 65 63 69 66 69 65 64   table specified
1afc0 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 0a   as part of the.
1afd0 6a 6f 69 6e 2d 73 6f 75 72 63 65 20 66 6f 6c 6c  join-source foll
1afe0 6f 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 6b  owing the FROM k
1aff0 65 79 77 6f 72 64 2c 20 74 68 65 6e 20 74 68 65  eyword, then the
1b000 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 65 61 63   contents of eac
1b010 68 20 6e 61 6d 65 64 20 74 61 62 6c 65 0a 61 72  h named table.ar
1b020 65 20 6a 6f 69 6e 65 64 20 69 6e 74 6f 20 61 20  e joined into a 
1b030 73 69 6e 67 6c 65 20 64 61 74 61 73 65 74 20 66  single dataset f
1b040 6f 72 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45  or the simple SE
1b050 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 74  LECT statement t
1b060 6f 20 6f 70 65 72 61 74 65 20 6f 6e 2e 0a 45 78  o operate on..Ex
1b070 61 63 74 6c 79 20 68 6f 77 20 74 68 65 20 64 61  actly how the da
1b080 74 61 20 69 73 20 63 6f 6d 62 69 6e 65 64 20 64  ta is combined d
1b090 65 70 65 6e 64 73 20 6f 6e 20 74 68 65 20 73 70  epends on the sp
1b0a0 65 63 69 66 69 63 20 5b 6a 6f 69 6e 2d 6f 70 5d  ecific [join-op]
1b0b0 20 61 6e 64 0a 5b 6a 6f 69 6e 2d 63 6f 6e 73 74   and.[join-const
1b0c0 72 61 69 6e 74 5d 20 75 73 65 64 20 74 6f 20 63  raint] used to c
1b0d0 6f 6e 6e 65 63 74 20 74 68 65 20 74 61 62 6c 65  onnect the table
1b0e0 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20  s or subqueries 
1b0f0 74 6f 67 65 74 68 65 72 2e 0a 0a 3c 70 3e 41 6c  together...<p>Al
1b100 6c 20 6a 6f 69 6e 73 20 69 6e 20 53 51 4c 69 74  l joins in SQLit
1b110 65 20 61 72 65 20 62 61 73 65 64 20 6f 6e 20 74  e are based on t
1b120 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f  he cartesian pro
1b130 64 75 63 74 20 6f 66 20 74 68 65 20 6c 65 66 74  duct of the left
1b140 20 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64 20   and.right-hand 
1b150 64 61 74 61 73 65 74 73 2e 20 5e 54 68 65 20 63  datasets. ^The c
1b160 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 63 61  olumns of the ca
1b170 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20  rtesian product 
1b180 64 61 74 61 73 65 74 20 61 72 65 2c 20 69 6e 20  dataset are, in 
1b190 0a 6f 72 64 65 72 2c 20 61 6c 6c 20 74 68 65 20  .order, all the 
1b1a0 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6c  columns of the l
1b1b0 65 66 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74  eft-hand dataset
1b1c0 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6c 6c   followed by all
1b1d0 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20   the columns.of 
1b1e0 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64  the right-hand d
1b1f0 61 74 61 73 65 74 2e 20 5e 54 68 65 72 65 20 69  ataset. ^There i
1b200 73 20 61 20 72 6f 77 20 69 6e 20 74 68 65 20 63  s a row in the c
1b210 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74  artesian product
1b220 20 64 61 74 61 73 65 74 0a 66 6f 72 6d 65 64 20   dataset.formed 
1b230 62 79 20 63 6f 6d 62 69 6e 69 6e 67 20 65 61 63  by combining eac
1b240 68 20 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61  h unique combina
1b250 74 69 6f 6e 20 6f 66 20 61 20 72 6f 77 20 66 72  tion of a row fr
1b260 6f 6d 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64  om the left-hand
1b270 20 0a 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64   .and right-hand
1b280 20 64 61 74 61 73 65 74 73 2e 20 5e 28 49 6e 20   datasets. ^(In 
1b290 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20  other words, if 
1b2a0 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 64 61  the left-hand da
1b2b0 74 61 73 65 74 20 63 6f 6e 73 69 73 74 73 20 6f  taset consists o
1b2c0 66 0a 3c 69 3e 4e 6c 68 73 3c 2f 69 3e 20 72 6f  f.<i>Nlhs</i> ro
1b2d0 77 73 20 6f 66 20 3c 69 3e 4d 6c 68 73 3c 2f 69  ws of <i>Mlhs</i
1b2e0 3e 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 64 20 74  > columns, and t
1b2f0 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61  he right-hand da
1b300 74 61 73 65 74 20 6f 66 0a 3c 69 3e 4e 72 68 73  taset of.<i>Nrhs
1b310 3c 2f 69 3e 20 72 6f 77 73 20 6f 66 20 3c 69 3e  </i> rows of <i>
1b320 4d 72 68 73 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73  Mrhs</i> columns
1b330 2c 20 74 68 65 6e 20 74 68 65 20 63 61 72 74 65  , then the carte
1b340 73 69 61 6e 20 70 72 6f 64 75 63 74 20 69 73 20  sian product is 
1b350 61 0a 64 61 74 61 73 65 74 20 6f 66 20 3c 69 3e  a.dataset of <i>
1b360 4e 6c 68 73 2e 4e 72 68 73 3c 2f 69 3e 20 72 6f  Nlhs.Nrhs</i> ro
1b370 77 73 2c 20 65 61 63 68 20 63 6f 6e 74 61 69 6e  ws, each contain
1b380 69 6e 67 20 3c 69 3e 4d 6c 68 73 2b 4d 72 68 73  ing <i>Mlhs+Mrhs
1b390 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2e 29 5e 0a  </i> columns.)^.
1b3a0 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6a 6f 69 6e  .<p>^If the join
1b3b0 2d 6f 70 20 69 73 20 22 43 52 4f 53 53 20 4a 4f  -op is "CROSS JO
1b3c0 49 4e 22 2c 20 22 49 4e 4e 45 52 20 4a 4f 49 4e  IN", "INNER JOIN
1b3d0 22 2c 20 22 4a 4f 49 4e 22 20 6f 72 20 61 20 63  ", "JOIN" or a c
1b3e0 6f 6d 6d 61 0a 28 22 2c 22 29 20 61 6e 64 20 74  omma.(",") and t
1b3f0 68 65 72 65 20 69 73 20 6e 6f 20 4f 4e 20 6f 72  here is no ON or
1b400 20 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74   USING clause, t
1b410 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
1b420 66 20 74 68 65 20 6a 6f 69 6e 20 69 73 0a 73 69  f the join is.si
1b430 6d 70 6c 79 20 74 68 65 20 63 61 72 74 65 73 69  mply the cartesi
1b440 61 6e 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68  an product of th
1b450 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
1b460 2d 68 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20  -hand datasets. 
1b470 0a 5e 54 68 65 72 65 20 69 73 20 6e 6f 20 64 69  .^There is no di
1b480 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
1b490 20 74 68 65 20 22 49 4e 4e 45 52 20 4a 4f 49 4e   the "INNER JOIN
1b4a0 22 2c 20 22 4a 4f 49 4e 22 20 61 6e 64 20 22 2c  ", "JOIN" and ",
1b4b0 22 20 6a 6f 69 6e 0a 6f 70 65 72 61 74 6f 72 73  " join.operators
1b4c0 2e 20 5e 28 54 68 65 20 22 43 52 4f 53 53 20 4a  . ^(The "CROSS J
1b4d0 4f 49 4e 22 20 6a 6f 69 6e 20 6f 70 65 72 61 74  OIN" join operat
1b4e0 6f 72 20 70 72 6f 64 75 63 65 73 20 74 68 65 20  or produces the 
1b4f0 73 61 6d 65 20 64 61 74 61 20 61 73 20 74 68 65  same data as the
1b500 20 0a 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20   ."INNER JOIN", 
1b510 22 4a 4f 49 4e 22 20 61 6e 64 20 22 2c 22 20 6f  "JOIN" and "," o
1b520 70 65 72 61 74 6f 72 73 29 5e 2c 20 62 75 74 20  perators)^, but 
1b530 69 73 20 0a 3c 61 20 68 72 65 66 3d 6f 70 74 6f  is .<a href=opto
1b540 76 65 72 76 69 65 77 2e 68 74 6d 6c 23 6d 61 6e  verview.html#man
1b550 63 74 72 6c 3e 68 61 6e 64 6c 65 64 20 73 6c 69  ctrl>handled sli
1b560 67 68 74 6c 79 20 64 69 66 66 65 72 65 6e 74 6c  ghtly differentl
1b570 79 20 62 79 20 74 68 65 20 71 75 65 72 79 0a 6f  y by the query.o
1b580 70 74 69 6d 69 7a 65 72 3c 2f 61 3e 2e 20 4f 74  ptimizer</a>. Ot
1b590 68 65 72 77 69 73 65 2c 20 69 74 20 69 73 20 74  herwise, it is t
1b5a0 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f  he cartesian pro
1b5b0 64 75 63 74 20 6d 6f 64 69 66 69 65 64 20 0a 61  duct modified .a
1b5c0 63 63 6f 72 64 69 6e 67 20 74 6f 20 6f 6e 65 20  ccording to one 
1b5d0 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66  or more of the f
1b5e0 6f 6c 6c 6f 77 69 6e 67 20 62 75 6c 6c 65 74 20  ollowing bullet 
1b5f0 70 6f 69 6e 74 73 3a 20 0a 0a 3c 75 6c 3e 0a 20  points: ..<ul>. 
1b600 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68   <li> <p>^(If th
1b610 65 72 65 20 69 73 20 61 6e 20 4f 4e 20 63 6c 61  ere is an ON cla
1b620 75 73 65 20 73 70 65 63 69 66 69 65 64 2c 20 74  use specified, t
1b630 68 65 6e 20 74 68 65 20 4f 4e 20 65 78 70 72 65  hen the ON expre
1b640 73 73 69 6f 6e 20 69 73 0a 20 20 20 20 20 20 20  ssion is.       
1b650 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61  evaluated for ea
1b660 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 63 61  ch row of the ca
1b670 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20  rtesian product 
1b680 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 63  and the result c
1b690 61 73 74 20 74 6f 20 0a 20 20 20 20 20 20 20 61  ast to .       a
1b6a0 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20 61   numeric value a
1b6b0 73 20 69 66 20 62 79 20 61 20 5b 43 41 53 54 20  s if by a [CAST 
1b6c0 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41 6c 6c  expression]. All
1b6d0 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20   rows for which 
1b6e0 74 68 65 0a 20 20 20 20 20 20 20 65 78 70 72 65  the.       expre
1b6f0 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20  ssion evaluates 
1b700 74 6f 20 4e 55 4c 4c 20 6f 72 20 7a 65 72 6f 20  to NULL or zero 
1b710 28 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 30  (integer value 0
1b720 20 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20 30   or real value 0
1b730 2e 30 29 0a 20 20 20 20 20 20 20 61 72 65 20 65  .0).       are e
1b740 78 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65  xcluded from the
1b750 20 64 61 74 61 73 65 74 2e 29 5e 0a 0a 20 20 3c   dataset.)^..  <
1b760 6c 69 3e 20 3c 70 3e 5e 49 66 20 74 68 65 72 65  li> <p>^If there
1b770 20 69 73 20 61 20 55 53 49 4e 47 20 63 6c 61 75   is a USING clau
1b780 73 65 20 73 70 65 63 69 66 69 65 64 20 61 73 20  se specified as 
1b790 70 61 72 74 20 6f 66 20 74 68 65 20 6a 6f 69 6e  part of the join
1b7a0 2d 63 6f 6e 73 74 72 61 69 6e 74 2c 0a 20 20 20  -constraint,.   
1b7b0 20 20 20 20 74 68 65 6e 20 65 61 63 68 20 6f 66      then each of
1b7c0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65   the column name
1b7d0 73 20 73 70 65 63 69 66 69 65 64 20 6d 75 73 74  s specified must
1b7e0 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 64 61   exist in the da
1b7f0 74 61 73 65 74 73 20 74 6f 20 0a 20 20 20 20 20  tasets to .     
1b800 20 20 62 6f 74 68 20 74 68 65 20 6c 65 66 74 20    both the left 
1b810 61 6e 64 20 72 69 67 68 74 20 6f 66 20 74 68 65  and right of the
1b820 20 6a 6f 69 6e 2d 6f 70 2e 20 5e 28 46 6f 72 20   join-op. ^(For 
1b830 65 61 63 68 20 70 61 69 72 20 6f 66 20 6e 61 6d  each pair of nam
1b840 65 73 61 6b 65 0a 20 20 20 20 20 20 20 63 6f 6c  esake.       col
1b850 75 6d 6e 73 2c 20 74 68 65 20 65 78 70 72 65 73  umns, the expres
1b860 73 69 6f 6e 20 22 6c 68 73 2e 58 20 3d 20 72 68  sion "lhs.X = rh
1b870 73 2e 58 22 20 69 73 20 65 76 61 6c 75 61 74 65  s.X" is evaluate
1b880 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f  d for each row o
1b890 66 0a 20 20 20 20 20 20 20 74 68 65 20 63 61 72  f.       the car
1b8a0 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 61  tesian product a
1b8b0 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 63 61  nd the result ca
1b8c0 73 74 20 74 6f 20 61 20 6e 75 6d 65 72 69 63 20  st to a numeric 
1b8d0 76 61 6c 75 65 2e 20 41 6c 6c 20 72 6f 77 73 0a  value. All rows.
1b8e0 20 20 20 20 20 20 20 66 6f 72 20 77 68 69 63 68         for which
1b8f0 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66 20   one or more of 
1b900 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  the expressions 
1b910 65 76 61 6c 75 61 74 65 73 20 74 6f 20 4e 55 4c  evaluates to NUL
1b920 4c 20 6f 72 20 7a 65 72 6f 20 61 72 65 0a 20 20  L or zero are.  
1b930 20 20 20 20 20 65 78 63 6c 75 64 65 64 20 66 72       excluded fr
1b940 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  om the result se
1b950 74 2e 29 5e 20 5e 57 68 65 6e 20 63 6f 6d 70 61  t.)^ ^When compa
1b960 72 69 6e 67 20 76 61 6c 75 65 73 20 61 73 20 61  ring values as a
1b970 20 72 65 73 75 6c 74 20 6f 66 20 61 0a 20 20 20   result of a.   
1b980 20 20 20 20 55 53 49 4e 47 20 63 6c 61 75 73 65      USING clause
1b990 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 72 75 6c  , the normal rul
1b9a0 65 73 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20  es for handling 
1b9b0 61 66 66 69 6e 69 74 69 65 73 2c 20 63 6f 6c 6c  affinities, coll
1b9c0 61 74 69 6f 6e 0a 20 20 20 20 20 20 20 73 65 71  ation.       seq
1b9d0 75 65 6e 63 65 73 20 61 6e 64 20 4e 55 4c 4c 20  uences and NULL 
1b9e0 76 61 6c 75 65 73 20 69 6e 20 63 6f 6d 70 61 72  values in compar
1b9f0 69 73 6f 6e 73 20 61 70 70 6c 79 2e 20 5e 54 68  isons apply. ^Th
1ba00 65 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68  e column from th
1ba10 65 0a 20 20 20 20 20 20 20 64 61 74 61 73 65 74  e.       dataset
1ba20 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e   on the left-han
1ba30 64 20 73 69 64 65 20 6f 66 20 74 68 65 20 6a 6f  d side of the jo
1ba40 69 6e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 63  in operator is c
1ba50 6f 6e 73 69 64 65 72 65 64 20 74 6f 0a 20 20 20  onsidered to.   
1ba60 20 20 20 20 62 65 20 6f 6e 20 74 68 65 20 6c 65      be on the le
1ba70 66 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20  ft-hand side of 
1ba80 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  the comparison o
1ba90 70 65 72 61 74 6f 72 20 28 3d 29 20 66 6f 72 20  perator (=) for 
1baa0 74 68 65 20 70 75 72 70 6f 73 65 73 0a 20 20 20  the purposes.   
1bab0 20 20 20 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e      of collation
1bac0 20 73 65 71 75 65 6e 63 65 20 61 6e 64 20 61 66   sequence and af
1bad0 66 69 6e 69 74 79 20 70 72 65 63 65 64 65 6e 63  finity precedenc
1bae0 65 2e 0a 0a 20 20 20 20 20 20 20 3c 70 3e 5e 46  e...       <p>^F
1baf0 6f 72 20 65 61 63 68 20 70 61 69 72 20 6f 66 20  or each pair of 
1bb00 63 6f 6c 75 6d 6e 73 20 69 64 65 6e 74 69 66 69  columns identifi
1bb10 65 64 20 62 79 20 61 20 55 53 49 4e 47 20 63 6c  ed by a USING cl
1bb20 61 75 73 65 2c 20 74 68 65 20 63 6f 6c 75 6d 6e  ause, the column
1bb30 0a 20 20 20 20 20 20 20 66 72 6f 6d 20 74 68 65  .       from the
1bb40 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61   right-hand data
1bb50 73 65 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66  set is omitted f
1bb60 72 6f 6d 20 74 68 65 20 6a 6f 69 6e 65 64 20 64  rom the joined d
1bb70 61 74 61 73 65 74 2e 20 5e 54 68 69 73 20 0a 20  ataset. ^This . 
1bb80 20 20 20 20 20 20 69 73 20 74 68 65 20 6f 6e 6c        is the onl
1bb90 79 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  y difference bet
1bba0 77 65 65 6e 20 61 20 55 53 49 4e 47 20 63 6c 61  ween a USING cla
1bbb0 75 73 65 20 61 6e 64 20 69 74 73 20 65 71 75 69  use and its equi
1bbc0 76 61 6c 65 6e 74 20 4f 4e 0a 20 20 20 20 20 20  valent ON.      
1bbd0 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 0a 20 20   constraint...  
1bbe0 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65  <li> <p>^(If the
1bbf0 20 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f 72 64   NATURAL keyword
1bc00 20 69 73 20 61 64 64 65 64 20 74 6f 20 61 6e 79   is added to any
1bc10 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 73   of the join-ops
1bc20 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 20 20  , then an.      
1bc30 20 69 6d 70 6c 69 63 69 74 20 55 53 49 4e 47 20   implicit USING 
1bc40 63 6c 61 75 73 65 20 69 73 20 61 64 64 65 64 20  clause is added 
1bc50 74 6f 20 74 68 65 20 6a 6f 69 6e 2d 63 6f 6e 73  to the join-cons
1bc60 74 72 61 69 6e 74 73 2e 20 54 68 65 20 69 6d 70  traints. The imp
1bc70 6c 69 63 69 74 0a 20 20 20 20 20 20 20 55 53 49  licit.       USI
1bc80 4e 47 20 63 6c 61 75 73 65 20 63 6f 6e 74 61 69  NG clause contai
1bc90 6e 73 20 65 61 63 68 20 6f 66 20 74 68 65 20 63  ns each of the c
1bca0 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74  olumn names that
1bcb0 20 61 70 70 65 61 72 20 69 6e 20 62 6f 74 68 0a   appear in both.
1bcc0 20 20 20 20 20 20 20 74 68 65 20 6c 65 66 74 20         the left 
1bcd0 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20 69  and right-hand i
1bce0 6e 70 75 74 20 64 61 74 61 73 65 74 73 2e 29 5e  nput datasets.)^
1bcf0 20 5e 49 66 20 74 68 65 20 6c 65 66 74 20 61 6e   ^If the left an
1bd00 64 20 72 69 67 68 74 2d 68 61 6e 64 0a 20 20 20  d right-hand.   
1bd10 20 20 20 20 69 6e 70 75 74 20 64 61 74 61 73 65      input datase
1bd20 74 73 20 66 65 61 74 75 72 65 20 6e 6f 20 63 6f  ts feature no co
1bd30 6d 6d 6f 6e 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  mmon column name
1bd40 73 2c 20 74 68 65 6e 20 74 68 65 20 4e 41 54 55  s, then the NATU
1bd50 52 41 4c 20 6b 65 79 77 6f 72 64 0a 20 20 20 20  RAL keyword.    
1bd60 20 20 20 68 61 73 20 6e 6f 20 65 66 66 65 63 74     has no effect
1bd70 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20   on the results 
1bd80 6f 66 20 74 68 65 20 6a 6f 69 6e 2e 20 5e 41 20  of the join. ^A 
1bd90 55 53 49 4e 47 20 6f 72 20 4f 4e 20 63 6c 61 75  USING or ON clau
1bda0 73 65 20 6d 61 79 0a 20 20 20 20 20 20 20 6e 6f  se may.       no
1bdb0 74 20 62 65 20 61 64 64 65 64 20 74 6f 20 61 20  t be added to a 
1bdc0 6a 6f 69 6e 20 74 68 61 74 20 73 70 65 63 69 66  join that specif
1bdd0 69 65 73 20 74 68 65 20 4e 41 54 55 52 41 4c 20  ies the NATURAL 
1bde0 6b 65 79 77 6f 72 64 2e 0a 0a 20 20 3c 6c 69 3e  keyword...  <li>
1bdf0 20 3c 70 3e 5e 28 49 66 20 74 68 65 20 6a 6f 69   <p>^(If the joi
1be00 6e 2d 6f 70 20 69 73 20 61 20 22 4c 45 46 54 20  n-op is a "LEFT 
1be10 4a 4f 49 4e 22 20 6f 72 20 22 4c 45 46 54 20 4f  JOIN" or "LEFT O
1be20 55 54 45 52 20 4a 4f 49 4e 22 2c 20 74 68 65 6e  UTER JOIN", then
1be30 20 61 66 74 65 72 0a 20 20 20 20 20 20 20 74 68   after.       th
1be40 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 66 69  e ON or USING fi
1be50 6c 74 65 72 69 6e 67 20 63 6c 61 75 73 65 73 20  ltering clauses 
1be60 68 61 76 65 20 62 65 65 6e 20 61 70 70 6c 69 65  have been applie
1be70 64 2c 20 61 6e 20 65 78 74 72 61 20 72 6f 77 20  d, an extra row 
1be80 69 73 20 0a 20 20 20 20 20 20 20 61 64 64 65 64  is .       added
1be90 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 20 66   to the output f
1bea0 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74  or each row in t
1beb0 68 65 20 6f 72 69 67 69 6e 61 6c 20 6c 65 66 74  he original left
1bec0 2d 68 61 6e 64 20 69 6e 70 75 74 20 0a 20 20 20  -hand input .   
1bed0 20 20 20 20 64 61 74 61 73 65 74 20 74 68 61 74      dataset that
1bee0 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
1bef0 6e 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c 20 69  no rows at all i
1bf00 6e 20 74 68 65 20 63 6f 6d 70 6f 73 69 74 65 0a  n the composite.
1bf10 20 20 20 20 20 20 20 64 61 74 61 73 65 74 20 28         dataset (
1bf20 69 66 20 61 6e 79 29 2e 29 5e 20 5e 54 68 65 20  if any).)^ ^The 
1bf30 61 64 64 65 64 20 72 6f 77 73 20 63 6f 6e 74 61  added rows conta
1bf40 69 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69  in NULL values i
1bf50 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 20 20  n the columns.  
1bf60 20 20 20 20 20 74 68 61 74 20 77 6f 75 6c 64 20       that would 
1bf70 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6e 74 61 69 6e  normally contain
1bf80 20 76 61 6c 75 65 73 20 63 6f 70 69 65 64 20 66   values copied f
1bf90 72 6f 6d 20 74 68 65 20 72 69 67 68 74 2d 68 61  rom the right-ha
1bfa0 6e 64 20 69 6e 70 75 74 0a 20 20 20 20 20 20 20  nd input.       
1bfb0 64 61 74 61 73 65 74 2e 20 20 0a 3c 2f 75 6c 3e  dataset.  .</ul>
1bfc0 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 6d 6f 72 65  ..<p>^(When more
1bfd0 20 74 68 61 6e 20 74 77 6f 20 74 61 62 6c 65 73   than two tables
1bfe0 20 61 72 65 20 6a 6f 69 6e 65 64 20 74 6f 67 65   are joined toge
1bff0 74 68 65 72 20 61 73 20 70 61 72 74 20 6f 66 20  ther as part of 
1c000 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 2c 0a 74  a FROM clause,.t
1c010 68 65 20 6a 6f 69 6e 20 6f 70 65 72 61 74 69 6f  he join operatio
1c020 6e 73 20 61 72 65 20 70 72 6f 63 65 73 73 65 64  ns are processed
1c030 20 69 6e 20 6f 72 64 65 72 20 66 72 6f 6d 20 6c   in order from l
1c040 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 49 6e  eft to right. In
1c050 20 6f 74 68 65 72 20 0a 77 6f 72 64 73 2c 20 74   other .words, t
1c060 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 28  he FROM clause (
1c070 41 20 6a 6f 69 6e 2d 6f 70 2d 31 20 42 20 6a 6f  A join-op-1 B jo
1c080 69 6e 2d 6f 70 2d 32 20 43 29 20 69 73 20 63 6f  in-op-2 C) is co
1c090 6d 70 75 74 65 64 20 61 73 20 0a 28 28 41 20 6a  mputed as .((A j
1c0a0 6f 69 6e 2d 6f 70 2d 31 20 42 29 20 6a 6f 69 6e  oin-op-1 B) join
1c0b0 2d 6f 70 2d 32 20 43 29 2e 29 5e 0a 20 20 20 20  -op-2 C).)^.    
1c0c0 20 20 20 0a 0a 3c 70 3e 3c 62 3e 32 2e 20 57 48     ..<p><b>2. WH
1c0d0 45 52 45 20 63 6c 61 75 73 65 20 66 69 6c 74 65  ERE clause filte
1c0e0 72 69 6e 67 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68  ring.</b>.<tcl>h
1c0f0 64 5f 66 72 61 67 6d 65 6e 74 20 77 68 65 72 65  d_fragment where
1c100 63 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63  clause</tcl>.<tc
1c110 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 57  l>hd_keywords {W
1c120 48 45 52 45 20 63 6c 61 75 73 65 7d 3c 2f 74 63  HERE clause}</tc
1c130 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20 57 48 45  l>..<p>^If a WHE
1c140 52 45 20 63 6c 61 75 73 65 20 69 73 20 73 70 65  RE clause is spe
1c150 63 69 66 69 65 64 2c 20 74 68 65 20 57 48 45 52  cified, the WHER
1c160 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  E expression is 
1c170 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 0a 65  evaluated for .e
1c180 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 64  ach row in the d
1c190 61 74 61 73 65 74 20 63 6f 6d 70 75 74 65 64 20  ataset computed 
1c1a0 62 79 20 74 68 65 20 65 78 70 6c 69 63 69 74 20  by the explicit 
1c1b0 6f 72 20 69 6d 70 6c 69 63 69 74 20 46 52 4f 4d  or implicit FROM
1c1c0 20 63 6c 61 75 73 65 20 61 6e 64 0a 74 68 65 20   clause and.the 
1c1d0 72 65 73 75 6c 74 20 63 61 73 74 20 74 6f 20 61  result cast to a
1c1e0 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 2e 20   numeric value. 
1c1f0 5e 41 6c 6c 20 72 6f 77 73 20 66 6f 72 20 77 68  ^All rows for wh
1c200 69 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c  ich the WHERE cl
1c210 61 75 73 65 0a 65 78 70 72 65 73 73 69 6f 6e 20  ause.expression 
1c220 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20 4e  evaluates to a N
1c230 55 4c 4c 20 76 61 6c 75 65 20 6f 72 20 74 6f 20  ULL value or to 
1c240 7a 65 72 6f 20 28 69 6e 74 65 67 65 72 20 76 61  zero (integer va
1c250 6c 75 65 20 30 20 6f 72 20 72 65 61 6c 20 76 61  lue 0 or real va
1c260 6c 75 65 0a 30 2e 30 29 20 61 72 65 20 65 78 63  lue.0.0) are exc
1c270 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65 20 64  luded from the d
1c280 61 74 61 73 65 74 20 62 65 66 6f 72 65 20 63 6f  ataset before co
1c290 6e 74 69 6e 75 69 6e 67 2e 0a 0a 3c 70 3e 3c 62  ntinuing...<p><b
1c2a0 3e 33 2e 20 47 65 6e 65 72 61 74 69 6f 6e 20 6f  >3. Generation o
1c2b0 66 20 74 68 65 20 73 65 74 20 6f 66 20 72 65 73  f the set of res
1c2c0 75 6c 74 20 72 6f 77 73 2e 3c 2f 62 3e 0a 3c 74  ult rows.</b>.<t
1c2d0 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72  cl>hd_fragment r
1c2e0 65 73 75 6c 74 73 65 74 3c 2f 74 63 6c 3e 0a 3c  esultset</tcl>.<
1c2f0 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20  tcl>hd_keywords 
1c300 7b 72 65 73 75 6c 74 2d 73 65 74 20 65 78 70 72  {result-set expr
1c310 65 73 73 69 6f 6e 73 7d 20 7b 47 52 4f 55 50 20  essions} {GROUP 
1c320 42 59 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4f 6e  BY}</tcl>..<p>On
1c330 63 65 20 74 68 65 20 69 6e 70 75 74 20 64 61 74  ce the input dat
1c340 61 73 65 74 20 66 72 6f 6d 20 74 68 65 20 46 52  aset from the FR
1c350 4f 4d 20 63 6c 61 75 73 65 20 68 61 73 20 62 65  OM clause has be
1c360 65 6e 20 66 69 6c 74 65 72 65 64 20 62 79 20 74  en filtered by t
1c370 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20  he.WHERE clause 
1c380 65 78 70 72 65 73 73 69 6f 6e 20 28 69 66 20 61  expression (if a
1c390 6e 79 29 2c 20 74 68 65 20 73 65 74 20 6f 66 20  ny), the set of 
1c3a0 72 65 73 75 6c 74 20 72 6f 77 73 20 66 6f 72 20  result rows for 
1c3b0 74 68 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c 45  the simple .SELE
1c3c0 43 54 20 61 72 65 20 63 61 6c 63 75 6c 61 74 65  CT are calculate
1c3d0 64 2e 20 45 78 61 63 74 6c 79 20 68 6f 77 20 74  d. Exactly how t
1c3e0 68 69 73 20 69 73 20 64 6f 6e 65 20 64 65 70 65  his is done depe
1c3f0 6e 64 73 20 6f 6e 20 77 68 65 74 68 65 72 20 74  nds on whether t
1c400 68 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c 45 43  he simple .SELEC
1c410 54 20 69 73 20 61 6e 20 61 67 67 72 65 67 61 74  T is an aggregat
1c420 65 20 6f 72 20 6e 6f 6e 2d 61 67 67 72 65 67 61  e or non-aggrega
1c430 74 65 20 71 75 65 72 79 2c 20 61 6e 64 20 77 68  te query, and wh
1c440 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 47  ether or not a G
1c450 52 4f 55 50 0a 42 59 20 63 6c 61 75 73 65 20 77  ROUP.BY clause w
1c460 61 73 20 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c  as specified...<
1c470 70 3e 20 5e 54 68 65 20 6e 75 6d 62 65 72 20 6f  p> ^The number o
1c480 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
1c490 20 72 65 73 75 6c 74 20 72 6f 77 73 20 69 73 20   result rows is 
1c4a0 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
1c4b0 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 6c 69 73  e expression.lis
1c4c0 74 20 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65  t in between the
1c4d0 20 53 45 4c 45 43 54 20 61 6e 64 20 46 52 4f 4d   SELECT and FROM
1c4e0 20 6b 65 79 77 6f 72 64 73 2e 20 5e 41 6e 79 20   keywords. ^Any 
1c4f0 61 72 62 69 74 72 61 72 79 20 65 78 70 72 65 73  arbitrary expres
1c500 73 69 6f 6e 20 63 61 6e 20 62 65 0a 75 73 65 64  sion can be.used
1c510 20 61 73 20 61 20 72 65 73 75 6c 74 20 72 6f 77   as a result row
1c520 20 63 6f 6c 75 6d 6e 2e 20 20 5e 49 66 20 61 20   column.  ^If a 
1c530 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f  result expressio
1c540 6e 20 69 73 20 0a 7d 20 0a 68 64 5f 70 75 74 73  n is .} .hd_puts
1c550 20 22 5b 4f 70 65 72 61 74 6f 72 20 2a 5d 22 20   "[Operator *]" 
1c560 0a 68 64 5f 70 75 74 73 20 7b 20 74 68 65 6e 20  .hd_puts { then 
1c570 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  all columns of t
1c580 68 65 20 69 6e 70 75 74 20 64 61 74 61 73 65 74  he input dataset
1c590 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65 64   are substituted
1c5a0 20 66 6f 72 20 74 68 61 74 20 6f 6e 65 0a 65 78   for that one.ex
1c5b0 70 72 65 73 73 69 6f 6e 2e 20 20 5e 28 49 66 20  pression.  ^(If 
1c5c0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
1c5d0 73 20 74 68 65 20 61 6c 69 61 73 20 6f 66 20 61  s the alias of a
1c5e0 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65   table or subque
1c5f0 72 79 20 69 6e 20 74 68 65 0a 46 52 4f 4d 20 63  ry in the.FROM c
1c600 6c 61 75 73 65 20 66 6f 6c 6c 6f 77 65 64 20 62  lause followed b
1c610 79 20 7d 20 0a 68 64 5f 70 75 74 73 20 22 5b 4f  y } .hd_puts "[O
1c620 70 65 72 61 74 6f 72 20 2e 2a 5d 22 20 0a 68 64  perator .*]" .hd
1c630 5f 70 75 74 73 20 7b 20 74 68 65 6e 20 61 6c 6c  _puts { then all
1c640 20 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d 20 74 68   columns from th
1c650 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 6f 72  e named table or
1c660 20 73 75 62 71 75 65 72 79 20 61 72 65 20 73 75   subquery are su
1c670 62 73 74 69 74 75 74 65 64 20 66 6f 72 0a 74 68  bstituted for.th
1c680 65 20 73 69 6e 67 6c 65 20 65 78 70 72 65 73 73  e single express
1c690 69 6f 6e 2e 29 5e 0a 0a 3c 75 6c 3e 0a 20 20 3c  ion.)^..<ul>.  <
1c6a0 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 53 45  li><p>^If the SE
1c6b0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
1c6c0 73 20 3c 62 3e 61 20 6e 6f 6e 2d 61 67 67 72 65  s <b>a non-aggre
1c6d0 67 61 74 65 20 71 75 65 72 79 3c 2f 62 3e 2c 20  gate query</b>, 
1c6e0 74 68 65 6e 20 0a 20 20 20 20 65 61 63 68 20 65  then .    each e
1c6f0 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
1c700 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73 20 65   result-set is e
1c710 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63  valuated for eac
1c720 68 20 72 6f 77 20 69 6e 20 74 68 65 20 64 61 74  h row in the dat
1c730 61 73 65 74 0a 20 20 20 20 66 69 6c 74 65 72 65  aset.    filtere
1c740 64 20 62 79 20 74 68 65 20 57 48 45 52 45 20 63  d by the WHERE c
1c750 6c 61 75 73 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  lause...  <li><p
1c760 3e 5e 49 66 20 74 68 65 20 53 45 4c 45 43 54 20  >^If the SELECT 
1c770 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e  statement is <b>
1c780 61 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65  an aggregate que
1c790 72 79 20 77 69 74 68 6f 75 74 20 61 20 47 52 4f  ry without a GRO
1c7a0 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e 20 63 6c  UP.    BY</b> cl
1c7b0 61 75 73 65 2c 20 74 68 65 6e 20 65 61 63 68 20  ause, then each 
1c7c0 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
1c7d0 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75  sion in the resu
1c7e0 6c 74 2d 73 65 74 20 69 73 20 0a 20 20 20 20 65  lt-set is .    e
1c7f0 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 61 63  valuated once ac
1c800 72 6f 73 73 20 74 68 65 20 65 6e 74 69 72 65 20  ross the entire 
1c810 64 61 74 61 73 65 74 2e 20 5e 45 61 63 68 20 6e  dataset. ^Each n
1c820 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70  on-aggregate exp
1c830 72 65 73 73 69 6f 6e 0a 20 20 20 20 69 6e 20 74  ression.    in t
1c840 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73  he result-set is
1c850 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20   evaluated once 
1c860 66 6f 72 20 61 6e 20 61 72 62 69 74 72 61 72 69  for an arbitrari
1c870 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f 77 20  ly selected row 
1c880 6f 66 0a 20 20 20 20 74 68 65 20 64 61 74 61 73  of.    the datas
1c890 65 74 2e 20 5e 54 68 65 20 73 61 6d 65 20 61 72  et. ^The same ar
1c8a0 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74  bitrarily select
1c8b0 65 64 20 72 6f 77 20 69 73 20 75 73 65 64 20 66  ed row is used f
1c8c0 6f 72 20 65 61 63 68 0a 20 20 20 20 6e 6f 6e 2d  or each.    non-
1c8d0 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
1c8e0 73 69 6f 6e 2e 20 4f 72 2c 20 69 66 20 74 68 65  sion. Or, if the
1c8f0 20 64 61 74 61 73 65 74 20 69 73 20 65 6d 70 74   dataset is empt
1c900 79 2c 20 74 68 65 6e 20 65 61 63 68 0a 20 20 20  y, then each.   
1c910 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65   non-aggregate e
1c920 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61  xpression is eva
1c930 6c 75 61 74 65 64 20 61 67 61 69 6e 73 74 20 61  luated against a
1c940 20 72 6f 77 20 63 6f 6e 73 69 73 74 69 6e 67 20   row consisting 
1c950 65 6e 74 69 72 65 6c 79 0a 20 20 20 20 6f 66 20  entirely.    of 
1c960 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 20 20  NULL values...  
1c970 20 3c 70 3e 5e 54 68 65 20 73 69 6e 67 6c 65 20   <p>^The single 
1c980 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 2d 73 65  row of result-se
1c990 74 20 64 61 74 61 20 63 72 65 61 74 65 64 20 62  t data created b
1c9a0 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  y evaluating the
1c9b0 20 61 67 67 72 65 67 61 74 65 0a 20 20 20 20 61   aggregate.    a
1c9c0 6e 64 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65  nd non-aggregate
1c9d0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20   expressions in 
1c9e0 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 66  the result-set f
1c9f0 6f 72 6d 73 20 74 68 65 20 72 65 73 75 6c 74 20  orms the result 
1ca00 6f 66 20 61 6e 0a 20 20 20 20 61 67 67 72 65 67  of an.    aggreg
1ca10 61 74 65 20 71 75 65 72 79 20 77 69 74 68 6f 75  ate query withou
1ca20 74 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61  t a GROUP BY cla
1ca30 75 73 65 2e 20 5e 41 6e 20 61 67 67 72 65 67 61  use. ^An aggrega
1ca40 74 65 20 71 75 65 72 79 20 77 69 74 68 6f 75 74  te query without
1ca50 20 61 0a 20 20 20 20 47 52 4f 55 50 20 42 59 20   a.    GROUP BY 
1ca60 63 6c 61 75 73 65 20 61 6c 77 61 79 73 20 72 65  clause always re
1ca70 74 75 72 6e 73 20 65 78 61 63 74 6c 79 20 6f 6e  turns exactly on
1ca80 65 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 0a 0a  e row of data...
1ca90 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
1caa0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1cab0 74 20 69 73 20 3c 62 3e 61 6e 20 61 67 67 72 65  t is <b>an aggre
1cac0 67 61 74 65 20 71 75 65 72 79 20 77 69 74 68 20  gate query with 
1cad0 61 20 47 52 4f 55 50 0a 20 20 20 20 42 59 3c 2f  a GROUP.    BY</
1cae0 62 3e 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  b> clause, then 
1caf0 65 61 63 68 20 6f 66 20 74 68 65 20 65 78 70 72  each of the expr
1cb00 65 73 73 69 6f 6e 73 20 73 70 65 63 69 66 69 65  essions specifie
1cb10 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  d as part of the
1cb20 0a 20 20 20 20 47 52 4f 55 50 20 42 59 20 63 6c  .    GROUP BY cl
1cb30 61 75 73 65 20 69 73 20 65 76 61 6c 75 61 74 65  ause is evaluate
1cb40 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f  d for each row o
1cb50 66 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 69  f the filtered i
1cb60 6e 70 75 74 20 64 61 74 61 73 65 74 2e 0a 20 20  nput dataset..  
1cb70 20 20 5e 45 61 63 68 20 72 6f 77 20 69 73 20 67    ^Each row is g
1cb80 72 6f 75 70 65 64 20 77 69 74 68 20 61 6c 6c 20  rouped with all 
1cb90 6f 74 68 65 72 20 72 6f 77 73 20 66 6f 72 20 77  other rows for w
1cba0 68 69 63 68 20 61 6c 6c 20 47 52 4f 55 50 20 42  hich all GROUP B
1cbb0 59 20 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f  Y .    expressio
1cbc0 6e 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20 74  ns evaluate to t
1cbd0 68 65 20 73 61 6d 65 20 76 61 6c 75 65 73 2e 20  he same values. 
1cbe0 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65  ^For the purpose
1cbf0 73 20 6f 66 20 67 72 6f 75 70 69 6e 67 20 0a 20  s of grouping . 
1cc00 20 20 20 72 6f 77 73 2c 20 4e 55 4c 4c 20 76 61     rows, NULL va
1cc10 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65  lues are conside
1cc20 72 65 64 20 65 71 75 61 6c 2e 20 5e 54 68 65 20  red equal. ^The 
1cc30 75 73 75 61 6c 20 72 75 6c 65 73 20 66 6f 72 20  usual rules for 
1cc40 73 65 6c 65 63 74 69 6e 67 0a 20 20 20 20 61 20  selecting.    a 
1cc50 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
1cc60 63 65 20 77 69 74 68 20 77 68 69 63 68 20 74 6f  ce with which to
1cc70 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 76 61   compare text va
1cc80 6c 75 65 73 20 61 70 70 6c 79 20 77 68 65 6e 20  lues apply when 
1cc90 65 76 61 6c 75 61 74 69 6e 67 0a 20 20 20 20 65  evaluating.    e
1cca0 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 20  xpressions in a 
1ccb0 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2e  GROUP BY clause.
1ccc0 20 20 5e 54 68 65 20 65 78 70 72 65 73 73 69 6f    ^The expressio
1ccd0 6e 73 20 69 6e 20 74 68 65 20 47 52 4f 55 50 20  ns in the GROUP 
1cce0 42 59 20 63 6c 61 75 73 65 0a 20 20 20 20 64 6f  BY clause.    do
1ccf0 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 68 61   <em>not</em> ha
1cd00 76 65 20 74 6f 20 62 65 20 65 78 70 72 65 73 73  ve to be express
1cd10 69 6f 6e 73 20 74 68 61 74 20 61 70 70 65 61 72  ions that appear
1cd20 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 20   in the result. 
1cd30 5e 54 68 65 0a 20 20 20 20 65 78 70 72 65 73 73  ^The.    express
1cd40 69 6f 6e 73 20 69 6e 20 61 20 47 52 4f 55 50 20  ions in a GROUP 
1cd50 42 59 20 63 6c 61 75 73 65 20 6d 61 79 20 6e 6f  BY clause may no
1cd60 74 20 62 65 20 61 67 67 72 65 67 61 74 65 20 65  t be aggregate e
1cd70 78 70 72 65 73 73 69 6f 6e 73 2e 0a 0a 20 20 20  xpressions...   
1cd80 20 3c 70 3e 5e 49 66 20 61 20 48 41 56 49 4e 47   <p>^If a HAVING
1cd90 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69   clause is speci
1cda0 66 69 65 64 2c 20 69 74 20 69 73 20 65 76 61 6c  fied, it is eval
1cdb0 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 65  uated once for e
1cdc0 61 63 68 20 67 72 6f 75 70 20 0a 20 20 20 20 6f  ach group .    o
1cdd0 66 20 72 6f 77 73 20 61 6e 64 20 63 61 73 74 20  f rows and cast 
1cde0 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61  to an integer va
1cdf0 6c 75 65 2e 20 5e 49 66 20 74 68 65 20 48 41 56  lue. ^If the HAV
1ce00 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 61 6e  ING clause is an
1ce10 20 61 67 67 72 65 67 61 74 65 0a 20 20 20 20 65   aggregate.    e
1ce20 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 69 73  xpression, it is
1ce30 20 65 76 61 6c 75 61 74 65 64 20 61 63 72 6f 73   evaluated acros
1ce40 73 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68  s all rows in th
1ce50 65 20 67 72 6f 75 70 2e 20 5e 49 66 20 61 20 48  e group. ^If a H
1ce60 41 56 49 4e 47 20 0a 20 20 20 20 63 6c 61 75 73  AVING .    claus
1ce70 65 20 69 73 20 61 20 6e 6f 6e 2d 61 67 67 72 65  e is a non-aggre
1ce80 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c  gate expression,
1ce90 20 69 74 20 69 73 20 65 76 61 6c 75 61 74 65 64   it is evaluated
1cea0 20 77 69 74 68 20 72 65 73 70 65 63 74 20 74 6f   with respect to
1ceb0 20 61 6e 0a 20 20 20 20 61 72 62 69 74 72 61 72   an.    arbitrar
1cec0 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f 77  ily selected row
1ced0 20 66 72 6f 6d 20 74 68 65 20 67 72 6f 75 70 2e   from the group.
1cee0 20 5e 49 66 20 74 68 65 20 72 65 73 75 6c 74 20   ^If the result 
1cef0 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of evaluating th
1cf00 65 0a 20 20 20 20 48 41 56 49 4e 47 20 63 6c 61  e.    HAVING cla
1cf10 75 73 65 20 69 73 20 4e 55 4c 4c 20 6f 72 20 7a  use is NULL or z
1cf20 65 72 6f 20 28 69 6e 74 65 67 65 72 20 76 61 6c  ero (integer val
1cf30 75 65 20 30 29 2c 20 74 68 65 20 67 72 6f 75 70  ue 0), the group
1cf40 20 69 73 20 64 69 73 63 61 72 64 65 64 2e 0a 20   is discarded.. 
1cf50 20 20 20 5e 54 68 65 20 48 41 56 49 4e 47 20 65     ^The HAVING e
1cf60 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 72 65  xpression may re
1cf70 66 65 72 20 74 6f 20 76 61 6c 75 65 73 2c 20 65  fer to values, e
1cf80 76 65 6e 20 61 67 67 72 65 67 61 74 65 20 66 75  ven aggregate fu
1cf90 6e 63 74 69 6f 6e 73 2c 20 74 68 61 74 0a 20 20  nctions, that.  
1cfa0 20 20 61 72 65 20 6e 6f 74 20 69 6e 20 74 68 65    are not in the
1cfb0 20 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 20 20   result.</p>..  
1cfc0 20 20 3c 70 3e 5e 45 61 63 68 20 65 78 70 72 65    <p>^Each expre
1cfd0 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73  ssion in the res
1cfe0 75 6c 74 2d 73 65 74 20 69 73 20 74 68 65 6e 20  ult-set is then 
1cff0 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66  evaluated once f
1d000 6f 72 20 65 61 63 68 0a 20 20 20 20 67 72 6f 75  or each.    grou
1d010 70 20 6f 66 20 72 6f 77 73 2e 20 5e 49 66 20 74  p of rows. ^If t
1d020 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
1d030 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 65 78   an aggregate ex
1d040 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 69 73 20  pression, it is 
1d050 0a 20 20 20 20 65 76 61 6c 75 61 74 65 64 20 61  .    evaluated a
1d060 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 69  cross all rows i
1d070 6e 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 4f 74  n the group. ^Ot
1d080 68 65 72 77 69 73 65 2c 20 69 74 20 69 73 20 65  herwise, it is e
1d090 76 61 6c 75 61 74 65 64 20 61 67 61 69 6e 73 74  valuated against
1d0a0 0a 20 20 20 20 61 20 73 69 6e 67 6c 65 20 61 72  .    a single ar
1d0b0 62 69 74 72 61 72 69 6c 79 20 63 68 6f 73 65 6e  bitrarily chosen
1d0c0 20 72 6f 77 20 66 72 6f 6d 20 77 69 74 68 69 6e   row from within
1d0d0 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 49 66 20   the group. ^If 
1d0e0 74 68 65 72 65 20 69 73 20 6d 6f 72 65 0a 20 20  there is more.  
1d0f0 20 20 74 68 61 6e 20 6f 6e 65 20 6e 6f 6e 2d 61    than one non-a
1d100 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73  ggregate express
1d110 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ion in the resul
1d120 74 2d 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 20  t-set, then all 
1d130 73 75 63 68 0a 20 20 20 20 65 78 70 72 65 73 73  such.    express
1d140 69 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74  ions are evaluat
1d150 65 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20  ed for the same 
1d160 72 6f 77 2e 0a 0a 20 20 20 20 3c 70 3e 5e 45 61  row...    <p>^Ea
1d170 63 68 20 67 72 6f 75 70 20 6f 66 20 69 6e 70 75  ch group of inpu
1d180 74 20 64 61 74 61 73 65 74 20 72 6f 77 73 20 63  t dataset rows c
1d190 6f 6e 74 72 69 62 75 74 65 73 20 61 20 73 69 6e  ontributes a sin
1d1a0 67 6c 65 20 72 6f 77 20 74 6f 20 74 68 65 20 0a  gle row to the .
1d1b0 20 20 20 20 73 65 74 20 6f 66 20 72 65 73 75 6c      set of resul
1d1c0 74 20 72 6f 77 73 2e 20 5e 53 75 62 6a 65 63 74  t rows. ^Subject
1d1d0 20 74 6f 20 66 69 6c 74 65 72 69 6e 67 20 61 73   to filtering as
1d1e0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
1d1f0 65 20 44 49 53 54 49 4e 43 54 0a 20 20 20 20 6b  e DISTINCT.    k
1d200 65 79 77 6f 72 64 2c 20 74 68 65 20 6e 75 6d 62  eyword, the numb
1d210 65 72 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72  er of rows retur
1d220 6e 65 64 20 62 79 20 61 6e 20 61 67 67 72 65 67  ned by an aggreg
1d230 61 74 65 20 71 75 65 72 79 20 77 69 74 68 20 61  ate query with a
1d240 20 47 52 4f 55 50 0a 20 20 20 20 42 59 20 63 6c   GROUP.    BY cl
1d250 61 75 73 65 20 69 73 20 74 68 65 20 73 61 6d 65  ause is the same
1d260 20 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   as the number o
1d270 66 20 67 72 6f 75 70 73 20 6f 66 20 72 6f 77 73  f groups of rows
1d280 20 70 72 6f 64 75 63 65 64 20 62 79 20 61 70 70   produced by app
1d290 6c 79 69 6e 67 0a 20 20 20 20 74 68 65 20 47 52  lying.    the GR
1d2a0 4f 55 50 20 42 59 20 61 6e 64 20 48 41 56 49 4e  OUP BY and HAVIN
1d2b0 47 20 63 6c 61 75 73 65 73 20 74 6f 20 74 68 65  G clauses to the
1d2c0 20 66 69 6c 74 65 72 65 64 20 69 6e 70 75 74 20   filtered input 
1d2d0 64 61 74 61 73 65 74 2e 0a 3c 2f 75 6c 3e 0a 0a  dataset..</ul>..
1d2e0 3c 70 3e 3c 62 3e 34 2e 20 52 65 6d 6f 76 61 6c  <p><b>4. Removal
1d2f0 20 6f 66 20 64 75 70 6c 69 63 61 74 65 20 72 6f   of duplicate ro
1d300 77 73 20 28 44 49 53 54 49 4e 43 54 20 70 72 6f  ws (DISTINCT pro
1d310 63 65 73 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74  cessing).</b>.<t
1d320 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 64  cl>hd_fragment d
1d330 69 73 74 69 6e 63 74 3c 2f 74 63 6c 3e 0a 3c 74  istinct</tcl>.<t
1d340 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  cl>hd_keywords {
1d350 44 49 53 54 49 4e 43 54 7d 3c 2f 74 63 6c 3e 0a  DISTINCT}</tcl>.
1d360 0a 3c 70 3e 5e 28 4f 6e 65 20 6f 66 20 74 68 65  .<p>^(One of the
1d370 20 41 4c 4c 20 6f 72 20 44 49 53 54 49 4e 43 54   ALL or DISTINCT
1d380 20 6b 65 79 77 6f 72 64 73 20 6d 61 79 20 66 6f   keywords may fo
1d390 6c 6c 6f 77 20 74 68 65 20 53 45 4c 45 43 54 20  llow the SELECT 
1d3a0 6b 65 79 77 6f 72 64 20 69 6e 20 61 20 0a 73 69  keyword in a .si
1d3b0 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
1d3c0 65 6d 65 6e 74 2e 20 49 66 20 6e 65 69 74 68 65  ement. If neithe
1d3d0 72 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 70  r of these are p
1d3e0 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65  resent, then the
1d3f0 20 62 65 68 61 76 69 6f 75 72 0a 69 73 20 61 73   behaviour.is as
1d400 20 69 66 20 41 4c 4c 20 77 65 72 65 20 73 70 65   if ALL were spe
1d410 63 69 66 69 65 64 2e 29 5e 20 5e 49 66 20 74 68  cified.)^ ^If th
1d420 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  e simple SELECT 
1d430 69 73 20 61 20 53 45 4c 45 43 54 20 41 4c 4c 2c  is a SELECT ALL,
1d440 20 74 68 65 6e 20 74 68 65 0a 65 6e 74 69 72 65   then the.entire
1d450 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72   set of result r
1d460 6f 77 73 20 61 72 65 20 72 65 74 75 72 6e 65 64  ows are returned
1d470 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 2e 20   by the SELECT. 
1d480 5e 49 66 20 74 68 65 20 73 69 6d 70 6c 65 20 53  ^If the simple S
1d490 45 4c 45 43 54 0a 69 73 20 61 20 53 45 4c 45 43  ELECT.is a SELEC
1d4a0 54 20 44 49 53 54 49 4e 43 54 2c 20 74 68 65 6e  T DISTINCT, then
1d4b0 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20   duplicate rows 
1d4c0 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d  are removed from
1d4d0 20 74 68 65 20 73 65 74 20 6f 66 20 72 65 73 75   the set of resu
1d4e0 6c 74 0a 72 6f 77 73 20 62 65 66 6f 72 65 20 69  lt.rows before i
1d4f0 74 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 5e  t is returned. ^
1d500 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
1d510 20 6f 66 20 64 65 74 65 63 74 69 6e 67 20 64 75   of detecting du
1d520 70 6c 69 63 61 74 65 20 72 6f 77 73 2c 0a 74 77  plicate rows,.tw
1d530 6f 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72  o NULL values ar
1d540 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20  e considered to 
1d550 62 65 20 65 71 75 61 6c 2e 20 5e 54 68 65 20 6e  be equal. ^The n
1d560 6f 72 6d 61 6c 20 72 75 6c 65 73 20 66 6f 72 20  ormal rules for 
1d570 73 65 6c 65 63 74 69 6e 67 0a 61 20 63 6f 6c 6c  selecting.a coll
1d580 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 74  ation sequence t
1d590 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 76  o compare text v
1d5a0 61 6c 75 65 73 20 77 69 74 68 20 61 70 70 6c 79  alues with apply
1d5b0 2e 0a 0a 3c 68 33 3e 43 6f 6d 70 6f 75 6e 64 20  ...<h3>Compound 
1d5c0 53 65 6c 65 63 74 20 53 74 61 74 65 6d 65 6e 74  Select Statement
1d5d0 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 41 20 63 6f  s</h3>..<p>^A co
1d5e0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 69 73  mpound SELECT is
1d5f0 20 66 6f 72 6d 65 64 20 66 72 6f 6d 20 74 77 6f   formed from two
1d600 20 6f 72 20 6d 6f 72 65 20 73 69 6d 70 6c 65 20   or more simple 
1d610 53 45 4c 45 43 54 73 20 63 6f 6e 6e 65 63 74 65  SELECTs connecte
1d620 64 0a 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20  d.by one of the 
1d630 6f 70 65 72 61 74 6f 72 73 20 55 4e 49 4f 4e 2c  operators UNION,
1d640 20 55 4e 49 4f 4e 20 41 4c 4c 2c 20 49 4e 54 45   UNION ALL, INTE
1d650 52 53 45 43 54 2c 20 6f 72 20 45 58 43 45 50 54  RSECT, or EXCEPT
1d660 2e 20 20 5e 49 6e 0a 61 20 63 6f 6d 70 6f 75 6e  .  ^In.a compoun
1d670 64 20 53 45 4c 45 43 54 2c 20 61 6c 6c 20 74 68  d SELECT, all th
1d680 65 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 53 45  e constituent SE
1d690 4c 45 43 54 73 20 6d 75 73 74 20 73 70 65 63 69  LECTs must speci
1d6a0 66 79 20 74 68 65 0a 73 61 6d 65 20 6e 75 6d 62  fy the.same numb
1d6b0 65 72 20 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c  er of result col
1d6c0 75 6d 6e 73 2e 20 20 5e 54 68 65 72 65 20 6d 61  umns.  ^There ma
1d6d0 79 20 62 65 20 6f 6e 6c 79 20 61 20 73 69 6e 67  y be only a sing
1d6e0 6c 65 20 4f 52 44 45 52 20 42 59 0a 63 6c 61 75  le ORDER BY.clau
1d6f0 73 65 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  se at the end of
1d700 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 53 45   the compound SE
1d710 4c 45 43 54 2e 20 20 5e 54 68 65 20 55 4e 49 4f  LECT.  ^The UNIO
1d720 4e 20 61 6e 64 20 55 4e 49 4f 4e 20 41 4c 4c 0a  N and UNION ALL.
1d730 6f 70 65 72 61 74 6f 72 73 20 63 6f 6d 62 69 6e  operators combin
1d740 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
1d750 20 74 68 65 20 53 45 4c 45 43 54 73 20 74 6f 20   the SELECTs to 
1d760 74 68 65 20 72 69 67 68 74 20 61 6e 64 20 6c 65  the right and le
1d770 66 74 20 69 6e 74 6f 0a 61 20 73 69 6e 67 6c 65  ft into.a single
1d780 20 62 69 67 20 74 61 62 6c 65 2e 20 20 5e 54 68   big table.  ^Th
1d790 65 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20  e difference is 
1d7a0 74 68 61 74 20 69 6e 20 55 4e 49 4f 4e 20 61 6c  that in UNION al
1d7b0 6c 20 72 65 73 75 6c 74 20 72 6f 77 73 0a 61 72  l result rows.ar
1d7c0 65 20 64 69 73 74 69 6e 63 74 20 77 68 65 72 65  e distinct where
1d7d0 20 69 6e 20 55 4e 49 4f 4e 20 41 4c 4c 20 74 68   in UNION ALL th
1d7e0 65 72 65 20 6d 61 79 20 62 65 20 64 75 70 6c 69  ere may be dupli
1d7f0 63 61 74 65 73 2e 0a 5e 54 68 65 20 49 4e 54 45  cates..^The INTE
1d800 52 53 45 43 54 20 6f 70 65 72 61 74 6f 72 20 74  RSECT operator t
1d810 61 6b 65 73 20 74 68 65 20 69 6e 74 65 72 73 65  akes the interse
1d820 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 72 65 73  ction of the res
1d830 75 6c 74 73 20 6f 66 20 74 68 65 0a 6c 65 66 74  ults of the.left
1d840 20 61 6e 64 20 72 69 67 68 74 20 53 45 4c 45 43   and right SELEC
1d850 54 73 2e 20 20 5e 45 58 43 45 50 54 20 74 61 6b  Ts.  ^EXCEPT tak
1d860 65 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  es the result of
1d870 20 6c 65 66 74 20 53 45 4c 45 43 54 20 61 66 74   left SELECT aft
1d880 65 72 0a 72 65 6d 6f 76 69 6e 67 20 74 68 65 20  er.removing the 
1d890 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 72  results of the r
1d8a0 69 67 68 74 20 53 45 4c 45 43 54 2e 20 20 5e 57  ight SELECT.  ^W
1d8b0 68 65 6e 20 74 68 72 65 65 20 6f 72 20 6d 6f 72  hen three or mor
1d8c0 65 20 53 45 4c 45 43 54 73 0a 61 72 65 20 63 6f  e SELECTs.are co
1d8d0 6e 6e 65 63 74 65 64 20 69 6e 74 6f 20 61 20 63  nnected into a c
1d8e0 6f 6d 70 6f 75 6e 64 2c 20 74 68 65 79 20 67 72  ompound, they gr
1d8f0 6f 75 70 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  oup from left to
1d900 20 72 69 67 68 74 2e 3c 2f 70 3e 0a 0a 3c 68 33   right.</p>..<h3
1d910 3e 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49  >ORDER BY and LI
1d920 4d 49 54 2f 4f 46 46 53 45 54 20 43 6c 61 75 73  MIT/OFFSET Claus
1d930 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65  es</h3>..<p>^The
1d940 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1d950 20 63 61 75 73 65 73 20 74 68 65 20 6f 75 74 70   causes the outp
1d960 75 74 20 72 6f 77 73 20 74 6f 20 62 65 20 73 6f  ut rows to be so
1d970 72 74 65 64 2e 20 20 0a 5e 54 68 65 20 61 72 67  rted.  .^The arg
1d980 75 6d 65 6e 74 20 74 6f 20 4f 52 44 45 52 20 42  ument to ORDER B
1d990 59 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 65  Y is a list of e
1d9a0 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20  xpressions that 
1d9b0 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65 0a  are used as the.
1d9c0 6b 65 79 20 66 6f 72 20 74 68 65 20 73 6f 72 74  key for the sort
1d9d0 2e 20 20 5e 54 68 65 20 65 78 70 72 65 73 73 69  .  ^The expressi
1d9e0 6f 6e 73 20 64 6f 20 6e 6f 74 20 68 61 76 65 20  ons do not have 
1d9f0 74 6f 20 62 65 20 70 61 72 74 20 6f 66 20 74 68  to be part of th
1da00 65 0a 72 65 73 75 6c 74 20 66 6f 72 20 61 20 73  e.result for a s
1da10 69 6d 70 6c 65 20 53 45 4c 45 43 54 2c 20 62 75  imple SELECT, bu
1da20 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t in a compound 
1da30 53 45 4c 45 43 54 20 65 61 63 68 20 73 6f 72 74  SELECT each sort
1da40 0a 65 78 70 72 65 73 73 69 6f 6e 20 6d 75 73 74  .expression must
1da50 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20 6f   exactly match o
1da60 6e 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ne of the result
1da70 20 63 6f 6c 75 6d 6e 73 2e 20 20 5e 45 61 63 68   columns.  ^Each
1da80 0a 73 6f 72 74 20 65 78 70 72 65 73 73 69 6f 6e  .sort expression
1da90 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c   may be optional
1daa0 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  ly followed by a
1dab0 20 43 4f 4c 4c 41 54 45 20 6b 65 79 77 6f 72 64   COLLATE keyword
1dac0 20 61 6e 64 0a 74 68 65 20 6e 61 6d 65 20 6f 66   and.the name of
1dad0 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e   a collating fun
1dae0 63 74 69 6f 6e 20 75 73 65 64 20 66 6f 72 20 6f  ction used for o
1daf0 72 64 65 72 69 6e 67 20 74 65 78 74 20 61 6e 64  rdering text and
1db00 2f 6f 72 0a 6b 65 79 77 6f 72 64 73 20 41 53 43  /or.keywords ASC
1db10 20 6f 72 20 44 45 53 43 20 74 6f 20 73 70 65 63   or DESC to spec
1db20 69 66 79 20 74 68 65 20 73 6f 72 74 20 6f 72 64  ify the sort ord
1db30 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68  er.</p>..<p>Each
1db40 20 74 65 72 6d 20 6f 66 20 61 6e 20 4f 52 44 45   term of an ORDE
1db50 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
1db60 69 73 20 70 72 6f 63 65 73 73 65 64 20 61 73 20  is processed as 
1db70 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f  follows:</p>..<o
1db80 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68  l>.<li><p>^If th
1db90 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  e ORDER BY expre
1dba0 73 73 69 6f 6e 20 69 73 20 61 20 63 6f 6e 73 74  ssion is a const
1dbb0 61 6e 74 20 69 6e 74 65 67 65 72 20 4b 20 74 68  ant integer K th
1dbc0 65 6e 20 74 68 65 0a 6f 75 74 70 75 74 20 69 73  en the.output is
1dbd0 20 6f 72 64 65 72 65 64 20 62 79 20 74 68 65 20   ordered by the 
1dbe0 4b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  K-th column of t
1dbf0 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 3c 2f  he result set.</
1dc00 70 3e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 3c 70 3e 5e  p></li>.<li><p>^
1dc10 49 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  If the ORDER BY 
1dc20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
1dc30 20 69 64 65 6e 74 69 66 69 65 72 20 61 6e 64 20   identifier and 
1dc40 6f 6e 65 20 6f 66 20 74 68 65 0a 6f 75 74 70 75  one of the.outpu
1dc50 74 20 63 6f 6c 75 6d 6e 73 20 68 61 73 20 61 6e  t columns has an
1dc60 20 61 6c 69 61 73 20 62 79 20 74 68 65 20 73 61   alias by the sa
1dc70 6d 65 20 6e 61 6d 65 2c 20 74 68 65 6e 20 74 68  me name, then th
1dc80 65 20 6f 75 74 70 75 74 20 69 73 0a 6f 72 64 65  e output is.orde
1dc90 72 65 64 20 62 79 20 74 68 65 20 69 64 65 6e 74  red by the ident
1dca0 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 3c 2f 70  ified column.</p
1dcb0 3e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 3c 70 3e 5e 4f  ></li>.<li><p>^O
1dcc0 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 4f 52  therwise, the OR
1dcd0 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
1dce0 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61  n is evaluated a
1dcf0 6e 64 20 74 68 65 20 6f 75 74 70 75 74 20 0a 69  nd the output .i
1dd00 73 20 6f 72 64 65 72 65 64 20 62 79 20 74 68 65  s ordered by the
1dd10 20 76 61 6c 75 65 20 6f 66 20 74 68 61 74 20 65   value of that e
1dd20 78 70 72 65 73 73 69 6f 6e 2e 3c 2f 70 3e 3c 2f  xpression.</p></
1dd30 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 49  li>.</ol>..<p>^I
1dd40 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c  n a compound SEL
1dd50 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ECT statement, t
1dd60 68 65 20 74 68 69 72 64 20 4f 52 44 45 52 20 42  he third ORDER B
1dd70 59 20 6d 61 74 63 68 69 6e 67 20 72 75 6c 65 0a  Y matching rule.
1dd80 72 65 71 75 69 72 65 73 20 74 68 61 74 20 74 68  requires that th
1dd90 65 20 65 78 70 72 65 73 73 69 6f 6e 20 62 65 20  e expression be 
1dda0 69 64 65 6e 74 69 63 61 6c 20 74 6f 20 6f 6e 65  identical to one
1ddb0 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   of the columns 
1ddc0 69 6e 0a 74 68 65 20 72 65 73 75 6c 74 20 73 65  in.the result se
1ddd0 74 2e 20 20 5e 28 54 68 65 20 74 68 72 65 65 20  t.  ^(The three 
1dde0 72 75 6c 65 73 20 61 72 65 20 66 69 72 73 74 20  rules are first 
1ddf0 61 70 70 6c 69 65 64 20 74 6f 20 74 68 65 20 6c  applied to the l
1de00 65 66 74 2d 6d 6f 73 74 0a 53 45 4c 45 43 54 20  eft-most.SELECT 
1de10 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e  in the compound.
1de20 20 20 49 66 20 61 20 6d 61 74 63 68 20 69 73 20    If a match is 
1de30 66 6f 75 6e 64 2c 20 74 68 65 20 73 65 61 72 63  found, the searc
1de40 68 20 73 74 6f 70 73 2e 20 20 4f 74 68 65 72 77  h stops.  Otherw
1de50 69 73 65 2c 0a 74 68 65 20 6e 65 78 74 20 53 45  ise,.the next SE
1de60 4c 45 43 54 20 74 6f 20 74 68 65 20 72 69 67 68  LECT to the righ
1de70 74 20 69 73 20 74 72 69 65 64 2e 20 20 54 68 69  t is tried.  Thi
1de80 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69  s continues unti
1de90 6c 20 61 20 6d 61 74 63 68 0a 69 73 20 66 6f 75  l a match.is fou
1dea0 6e 64 2e 29 5e 20 20 5e 45 61 63 68 20 74 65 72  nd.)^  ^Each ter
1deb0 6d 20 6f 66 20 74 68 65 20 4f 52 44 45 52 20 42  m of the ORDER B
1dec0 59 20 63 6c 61 75 73 65 20 69 73 20 70 72 6f 63  Y clause is proc
1ded0 65 73 73 65 64 20 73 65 70 61 72 61 74 65 6c 79  essed separately
1dee0 20 0a 61 6e 64 20 6d 61 79 20 63 6f 6d 65 20 66   .and may come f
1def0 72 6f 6d 20 64 69 66 66 65 72 65 6e 74 20 53 45  rom different SE
1df00 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
1df10 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e  in the compound.
1df20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49  </p>..<p>^The LI
1df30 4d 49 54 20 63 6c 61 75 73 65 20 70 6c 61 63 65  MIT clause place
1df40 73 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e 64  s an upper bound
1df50 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   on the number o
1df60 66 20 72 6f 77 73 0a 72 65 74 75 72 6e 65 64 20  f rows.returned 
1df70 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20  in the result.  
1df80 5e 41 20 6e 65 67 61 74 69 76 65 20 4c 49 4d 49  ^A negative LIMI
1df90 54 20 69 6e 64 69 63 61 74 65 73 20 6e 6f 20 75  T indicates no u
1dfa0 70 70 65 72 20 62 6f 75 6e 64 2e 0a 5e 54 68 65  pper bound..^The
1dfb0 20 6f 70 74 69 6f 6e 61 6c 20 4f 46 46 53 45 54   optional OFFSET
1dfc0 20 66 6f 6c 6c 6f 77 69 6e 67 20 4c 49 4d 49 54   following LIMIT
1dfd0 20 73 70 65 63 69 66 69 65 73 20 68 6f 77 20 6d   specifies how m
1dfe0 61 6e 79 0a 72 6f 77 73 20 74 6f 20 73 6b 69 70  any.rows to skip
1dff0 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
1e000 67 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  g of the result 
1e010 73 65 74 2e 0a 5e 49 6e 20 61 20 63 6f 6d 70 6f  set..^In a compo
1e020 75 6e 64 20 71 75 65 72 79 2c 20 74 68 65 20 4c  und query, the L
1e030 49 4d 49 54 20 63 6c 61 75 73 65 20 6d 61 79 20  IMIT clause may 
1e040 6f 6e 6c 79 20 61 70 70 65 61 72 20 6f 6e 20 74  only appear on t
1e050 68 65 0a 66 69 6e 61 6c 20 53 45 4c 45 43 54 20  he.final SELECT 
1e060 73 74 61 74 65 6d 65 6e 74 2e 0a 5e 54 68 65 20  statement..^The 
1e070 6c 69 6d 69 74 20 69 73 20 61 70 70 6c 69 65 64  limit is applied
1e080 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 71   to the entire q
1e090 75 65 72 79 20 6e 6f 74 0a 74 6f 20 74 68 65 20  uery not.to the 
1e0a0 69 6e 64 69 76 69 64 75 61 6c 20 53 45 4c 45 43  individual SELEC
1e0b0 54 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 77  T statement to w
1e0c0 68 69 63 68 20 69 74 20 69 73 20 61 74 74 61 63  hich it is attac
1e0d0 68 65 64 2e 0a 5e 4e 6f 74 65 20 74 68 61 74 20  hed..^Note that 
1e0e0 69 66 20 74 68 65 20 4f 46 46 53 45 54 20 6b 65  if the OFFSET ke
1e0f0 79 77 6f 72 64 20 69 73 20 75 73 65 64 20 69 6e  yword is used in
1e100 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73   the LIMIT claus
1e110 65 2c 20 74 68 65 6e 20 74 68 65 0a 6c 69 6d 69  e, then the.limi
1e120 74 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6e  t is the first n
1e130 75 6d 62 65 72 20 61 6e 64 20 74 68 65 20 6f 66  umber and the of
1e140 66 73 65 74 20 69 73 20 74 68 65 20 73 65 63 6f  fset is the seco
1e150 6e 64 20 6e 75 6d 62 65 72 2e 20 20 5e 49 66 20  nd number.  ^If 
1e160 61 0a 63 6f 6d 6d 61 20 69 73 20 75 73 65 64 20  a.comma is used 
1e170 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 4f  instead of the O
1e180 46 46 53 45 54 20 6b 65 79 77 6f 72 64 2c 20 74  FFSET keyword, t
1e190 68 65 6e 20 74 68 65 20 6f 66 66 73 65 74 20 69  hen the offset i
1e1a0 73 20 74 68 65 0a 66 69 72 73 74 20 6e 75 6d 62  s the.first numb
1e1b0 65 72 20 61 6e 64 20 74 68 65 20 6c 69 6d 69 74  er and the limit
1e1c0 20 69 73 20 74 68 65 20 73 65 63 6f 6e 64 20 6e   is the second n
1e1d0 75 6d 62 65 72 2e 20 20 54 68 69 73 20 73 65 65  umber.  This see
1e1e0 6d 69 6e 67 0a 63 6f 6e 74 72 61 64 69 63 74 69  ming.contradicti
1e1f0 6f 6e 20 69 73 20 69 6e 74 65 6e 74 69 6f 6e 61  on is intentiona
1e200 6c 20 2d 20 69 74 20 6d 61 78 69 6d 69 7a 65 73  l - it maximizes
1e210 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77   compatibility w
1e220 69 74 68 20 6c 65 67 61 63 79 0a 53 51 4c 20 64  ith legacy.SQL d
1e230 61 74 61 62 61 73 65 20 73 79 73 74 65 6d 73 2e  atabase systems.
1e240 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23  .</p>...<tcl>.##
1e250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e290 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
1e2a0 74 69 6f 6e 20 55 50 44 41 54 45 20 75 70 64 61  tion UPDATE upda
1e2b0 74 65 20 7b 55 50 44 41 54 45 20 2a 55 50 44 41  te {UPDATE *UPDA
1e2c0 54 45 73 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67  TEs}..BubbleDiag
1e2d0 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d 74 20  ram update-stmt 
1e2e0 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  1.BubbleDiagram 
1e2f0 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d  qualified-table-
1e300 6e 61 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  name.</tcl>..<p>
1e310 5e 54 68 65 20 55 50 44 41 54 45 20 73 74 61 74  ^The UPDATE stat
1e320 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f  ement is used to
1e330 20 63 68 61 6e 67 65 20 74 68 65 20 76 61 6c 75   change the valu
1e340 65 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  e of columns in 
1e350 0a 73 65 6c 65 63 74 65 64 20 72 6f 77 73 20 6f  .selected rows o
1e360 66 20 61 20 74 61 62 6c 65 2e 20 20 5e 45 61 63  f a table.  ^Eac
1e370 68 20 61 73 73 69 67 6e 6d 65 6e 74 20 69 6e 20  h assignment in 
1e380 61 6e 20 55 50 44 41 54 45 20 73 70 65 63 69 66  an UPDATE specif
1e390 69 65 73 0a 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d  ies.a column nam
1e3a0 65 20 74 6f 20 74 68 65 20 6c 65 66 74 20 6f 66  e to the left of
1e3b0 20 74 68 65 20 65 71 75 61 6c 73 20 73 69 67 6e   the equals sign
1e3c0 20 61 6e 64 20 61 6e 20 61 72 62 69 74 72 61 72   and an arbitrar
1e3d0 79 20 65 78 70 72 65 73 73 69 6f 6e 0a 74 6f 20  y expression.to 
1e3e0 74 68 65 20 72 69 67 68 74 2e 20 20 5e 54 68 65  the right.  ^The
1e3f0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6d 61 79   expressions may
1e400 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 73 20   use the values 
1e410 6f 66 20 6f 74 68 65 72 20 63 6f 6c 75 6d 6e 73  of other columns
1e420 2e 0a 5e 41 6c 6c 20 65 78 70 72 65 73 73 69 6f  ..^All expressio
1e430 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  ns are evaluated
1e440 20 62 65 66 6f 72 65 20 61 6e 79 20 61 73 73 69   before any assi
1e450 67 6e 6d 65 6e 74 73 20 61 72 65 20 6d 61 64 65  gnments are made
1e460 2e 0a 5e 41 20 57 48 45 52 45 20 63 6c 61 75 73  ..^A WHERE claus
1e470 65 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  e can be used to
1e480 20 72 65 73 74 72 69 63 74 20 77 68 69 63 68 20   restrict which 
1e490 72 6f 77 73 20 61 72 65 20 75 70 64 61 74 65 64  rows are updated
1e4a0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f  .</p>..<p>^The o
1e4b0 70 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74  ptional conflict
1e4c0 2d 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20 74  -clause allows t
1e4d0 68 65 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e  he specification
1e4e0 20 6f 66 20 61 6e 20 61 6c 74 65 72 6e 61 74 69   of an alternati
1e4f0 76 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f  ve.constraint co
1e500 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
1e510 6e 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75  n algorithm to u
1e520 73 65 20 64 75 72 69 6e 67 20 74 68 69 73 20 6f  se during this o
1e530 6e 65 20 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e  ne UPDATE comman
1e540 64 2e 0a 53 65 65 20 74 68 65 20 73 65 63 74 69  d..See the secti
1e550 6f 6e 20 74 69 74 6c 65 64 0a 5b 4f 4e 20 43 4f  on titled.[ON CO
1e560 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69  NFLICT] for addi
1e570 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
1e580 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73  on.</p>..<h3>Res
1e590 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20 55 50 44  trictions on UPD
1e5a0 41 54 45 20 53 74 61 74 65 6d 65 6e 74 73 20 57  ATE Statements W
1e5b0 69 74 68 69 6e 20 43 52 45 41 54 45 20 54 52 49  ithin CREATE TRI
1e5c0 47 47 45 52 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54  GGER</h3>..<p>^T
1e5d0 68 65 72 65 20 61 72 65 20 61 64 64 69 74 69 6f  here are additio
1e5e0 6e 61 6c 20 73 79 6e 74 61 78 20 72 65 73 74 72  nal syntax restr
1e5f0 69 63 74 69 6f 6e 73 20 6f 6e 20 55 50 44 41 54  ictions on UPDAT
1e600 45 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  E statements tha
1e610 74 0a 6f 63 63 75 72 20 77 69 74 68 69 6e 20 74  t.occur within t
1e620 68 65 20 62 6f 64 79 20 6f 66 20 61 20 5b 43 52  he body of a [CR
1e630 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74  EATE TRIGGER] st
1e640 61 74 65 6d 65 6e 74 2e 20 20 5e 54 68 65 20 3c  atement.  ^The <
1e650 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e  i>table-name</i>
1e660 0a 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 6d  .of the UPDATE m
1e670 75 73 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69  ust be unqualifi
1e680 65 64 2e 20 0a 5e 28 49 6e 20 6f 74 68 65 72 20  ed. .^(In other 
1e690 77 6f 72 64 73 2c 20 74 68 65 20 3c 69 3e 64 61  words, the <i>da
1e6a0 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c  tabase-name</i><
1e6b0 62 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78 20 0a  b>.</b> prefix .
1e6c0 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  on the table nam
1e6d0 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  e of the UPDATE 
1e6e0 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 77  is not allowed w
1e6f0 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 29  ithin triggers.)
1e700 5e 0a 5e 54 68 65 20 74 61 62 6c 65 20 74 6f 20  ^.^The table to 
1e710 62 65 20 75 70 64 61 74 65 64 20 6d 75 73 74 20  be updated must 
1e720 62 65 20 69 6e 20 74 68 65 20 73 61 6d 65 0a 64  be in the same.d
1e730 61 74 61 62 61 73 65 20 61 73 20 74 68 65 20 74  atabase as the t
1e740 61 62 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68  able to which th
1e750 65 20 74 72 69 67 67 65 72 20 69 73 20 61 74 74  e trigger is att
1e760 61 63 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ached.</p>..<p>^
1e770 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 61  The INDEXED BY a
1e780 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63  nd NOT INDEXED c
1e790 6c 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20 61  lauses are not a
1e7a0 6c 6c 6f 77 65 64 20 6f 6e 20 55 50 44 41 54 45  llowed on UPDATE
1e7b0 0a 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68  .statements with
1e7c0 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e  in triggers.</p>
1e7d0 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20  ..<p>^The LIMIT 
1e7e0 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41 54  clause for UPDAT
1e7f0 45 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64  E is unsupported
1e800 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
1e810 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f  .</p>..<h3>Optio
1e820 6e 61 6c 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52  nal LIMIT and OR
1e830 44 45 52 20 42 59 20 43 6c 61 75 73 65 73 3c 2f  DER BY Clauses</
1e840 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53 51 4c  h3>..<p>^(If SQL
1e850 69 74 65 20 69 73 20 62 75 69 6c 74 20 77 69 74  ite is built wit
1e860 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e  h the [SQLITE_EN
1e870 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
1e880 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c  TE_LIMIT].compil
1e890 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 74 68  e-time option th
1e8a0 65 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6f 66  en the syntax of
1e8b0 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74   the UPDATE stat
1e8c0 65 6d 65 6e 74 20 69 73 20 65 78 74 65 6e 64 65  ement is extende
1e8d0 64 0a 77 69 74 68 20 6f 70 74 69 6f 6e 61 6c 20  d.with optional 
1e8e0 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d  ORDER BY and LIM
1e8f0 49 54 20 63 6c 61 75 73 65 73 29 5e 20 61 73 20  IT clauses)^ as 
1e900 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74  follows:</p>..<t
1e910 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d  cl>BubbleDiagram
1e920 20 75 70 64 61 74 65 2d 73 74 6d 74 2d 6c 69 6d   update-stmt-lim
1e930 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  ited</tcl>..<p>^
1e940 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 4c 49 4d  The optional LIM
1e950 49 54 20 63 6c 61 75 73 65 20 63 61 6e 20 62 65  IT clause can be
1e960 20 75 73 65 64 20 74 6f 20 6c 69 6d 69 74 20 74   used to limit t
1e970 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 72 6f 77  he number of.row
1e980 73 20 6d 6f 64 69 66 69 65 64 2c 20 61 6e 64 20  s modified, and 
1e990 74 68 65 72 65 62 79 20 6c 69 6d 69 74 20 74 68  thereby limit th
1e9a0 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 74 72  e size of the tr
1e9b0 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 54 68 65 20  ansaction..^The 
1e9c0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
1e9d0 6f 6e 20 61 6e 20 55 50 44 41 54 45 20 73 74 61  on an UPDATE sta
1e9e0 74 65 6d 65 6e 74 0a 69 73 20 75 73 65 64 20 6f  tement.is used o
1e9f0 6e 6c 79 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  nly to determine
1ea00 20 77 68 69 63 68 20 72 6f 77 73 20 66 61 6c 6c   which rows fall
1ea10 0a 77 69 74 68 69 6e 20 74 68 65 20 4c 49 4d 49  .within the LIMI
1ea20 54 2e 20 20 5e 54 68 65 20 6f 72 64 65 72 20 69  T.  ^The order i
1ea30 6e 20 77 68 69 63 68 20 72 6f 77 73 20 61 72 65  n which rows are
1ea40 20 6d 6f 64 69 66 69 65 64 20 69 73 20 61 72 62   modified is arb
1ea50 69 74 72 61 72 79 0a 61 6e 64 20 69 73 20 6e 6f  itrary.and is no
1ea60 74 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  t determined by 
1ea70 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
1ea80 75 73 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  use.</p>..<tcl>.
1ea90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1eaa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1eab0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1eac0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ead0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
1eae0 65 63 74 69 6f 6e 20 56 41 43 55 55 4d 20 76 61  ection VACUUM va
1eaf0 63 75 75 6d 20 56 41 43 55 55 4d 0a 0a 42 75 62  cuum VACUUM..Bub
1eb00 62 6c 65 44 69 61 67 72 61 6d 20 76 61 63 75 75  bleDiagram vacuu
1eb10 6d 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a  m-stmt 1.</tcl>.
1eb20 0a 3c 70 3e 5e 57 68 65 6e 20 61 6e 20 6f 62 6a  .<p>^When an obj
1eb30 65 63 74 20 28 74 61 62 6c 65 2c 20 69 6e 64 65  ect (table, inde
1eb40 78 2c 20 74 72 69 67 67 65 72 2c 20 6f 72 20 76  x, trigger, or v
1eb50 69 65 77 29 20 69 73 20 64 72 6f 70 70 65 64 20  iew) is dropped 
1eb60 66 72 6f 6d 20 74 68 65 20 0a 64 61 74 61 62 61  from the .databa
1eb70 73 65 2c 20 69 74 20 6c 65 61 76 65 73 20 62 65  se, it leaves be
1eb80 68 69 6e 64 20 65 6d 70 74 79 20 73 70 61 63 65  hind empty space
1eb90 2e 20 0a 5e 54 68 69 73 20 65 6d 70 74 79 20 73  . .^This empty s
1eba0 70 61 63 65 20 77 69 6c 6c 20 62 65 20 72 65 75  pace will be reu
1ebb0 73 65 64 20 74 68 65 20 6e 65 78 74 20 74 69 6d  sed the next tim
1ebc0 65 20 6e 65 77 20 69 6e 66 6f 72 6d 61 74 69 6f  e new informatio
1ebd0 6e 20 69 73 0a 61 64 64 65 64 20 74 6f 20 74 68  n is.added to th
1ebe0 65 20 64 61 74 61 62 61 73 65 2e 20 20 42 75 74  e database.  But
1ebf0 20 69 6e 20 74 68 65 20 6d 65 61 6e 74 69 6d 65   in the meantime
1ec00 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  , the database f
1ec10 69 6c 65 20 6d 69 67 68 74 0a 62 65 20 6c 61 72  ile might.be lar
1ec20 67 65 72 20 74 68 61 6e 20 73 74 72 69 63 74 6c  ger than strictl
1ec30 79 20 6e 65 63 65 73 73 61 72 79 2e 20 20 41 6c  y necessary.  Al
1ec40 73 6f 2c 20 66 72 65 71 75 65 6e 74 20 69 6e 73  so, frequent ins
1ec50 65 72 74 73 2c 20 75 70 64 61 74 65 73 2c 0a 61  erts, updates,.a
1ec60 6e 64 20 64 65 6c 65 74 65 73 20 63 61 6e 20 63  nd deletes can c
1ec70 61 75 73 65 20 74 68 65 20 69 6e 66 6f 72 6d 61  ause the informa
1ec80 74 69 6f 6e 20 69 6e 20 74 68 65 20 64 61 74 61  tion in the data
1ec90 62 61 73 65 20 74 6f 20 62 65 63 6f 6d 65 0a 66  base to become.f
1eca0 72 61 67 6d 65 6e 74 65 64 20 2d 20 73 63 61 74  ragmented - scat
1ecb0 74 65 72 65 64 20 6f 75 74 20 61 6c 6c 20 61 63  tered out all ac
1ecc0 72 6f 73 73 20 74 68 65 20 64 61 74 61 62 61 73  ross the databas
1ecd0 65 20 66 69 6c 65 20 72 61 74 68 65 72 0a 74 68  e file rather.th
1ece0 61 6e 20 63 6c 75 73 74 65 72 65 64 20 74 6f 67  an clustered tog
1ecf0 65 74 68 65 72 20 69 6e 20 6f 6e 65 20 70 6c 61  ether in one pla
1ed00 63 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ce.</p>..<p>^The
1ed10 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20   VACUUM command 
1ed20 63 6c 65 61 6e 73 0a 74 68 65 20 6d 61 69 6e 20  cleans.the main 
1ed30 64 61 74 61 62 61 73 65 20 62 79 20 63 6f 70 79  database by copy
1ed40 69 6e 67 20 69 74 73 20 63 6f 6e 74 65 6e 74 73  ing its contents
1ed50 20 74 6f 20 61 20 74 65 6d 70 6f 72 61 72 79 20   to a temporary 
1ed60 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
1ed70 64 20 0a 72 65 6c 6f 61 64 69 6e 67 20 74 68 65  d .reloading the
1ed80 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 61 62 61   original databa
1ed90 73 65 20 66 69 6c 65 20 66 72 6f 6d 20 74 68 65  se file from the
1eda0 20 63 6f 70 79 2e 20 20 54 68 69 73 20 65 6c 69   copy.  This eli
1edb0 6d 69 6e 61 74 65 73 20 0a 66 72 65 65 20 70 61  minates .free pa
1edc0 67 65 73 2c 20 20 61 6c 69 67 6e 73 20 74 61 62  ges,  aligns tab
1edd0 6c 65 20 64 61 74 61 20 74 6f 20 62 65 20 63 6f  le data to be co
1ede0 6e 74 69 67 75 6f 75 73 2c 20 61 6e 64 20 6f 74  ntiguous, and ot
1edf0 68 65 72 77 69 73 65 20 63 6c 65 61 6e 73 20 0a  herwise cleans .
1ee00 75 70 20 74 68 65 20 64 61 74 61 62 61 73 65 20  up the database 
1ee10 66 69 6c 65 20 73 74 72 75 63 74 75 72 65 2e 3c  file structure.<
1ee20 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43  /p>..<p>^The VAC
1ee30 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20  UUM command may 
1ee40 63 68 61 6e 67 65 20 74 68 65 20 0a 5b 52 4f 57  change the .[ROW
1ee50 49 44 20 7c 20 52 4f 57 49 44 73 5d 20 6f 66 20  ID | ROWIDs] of 
1ee60 65 6e 74 72 69 65 73 20 69 6e 20 74 61 62 6c 65  entries in table
1ee70 73 20 74 68 61 74 20 64 6f 0a 6e 6f 74 20 68 61  s that do.not ha
1ee80 76 65 20 61 6e 20 65 78 70 6c 69 63 69 74 20 5b  ve an explicit [
1ee90 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
1eea0 4b 45 59 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 56  KEY].</p>..<p>^V
1eeb0 41 43 55 55 4d 20 6f 6e 6c 79 20 77 6f 72 6b 73  ACUUM only works
1eec0 20 6f 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   on the main dat
1eed0 61 62 61 73 65 2e 0a 49 74 20 69 73 20 6e 6f 74  abase..It is not
1eee0 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 56 41 43   possible to VAC
1eef0 55 55 4d 20 61 6e 20 61 74 74 61 63 68 65 64 20  UUM an attached 
1ef00 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f  database file.</
1ef10 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55  p>..<p>^The VACU
1ef20 55 4d 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20  UM command will 
1ef30 66 61 69 6c 20 69 66 20 74 68 65 72 65 20 69 73  fail if there is
1ef40 20 61 6e 20 61 63 74 69 76 65 20 74 72 61 6e 73   an active trans
1ef50 61 63 74 69 6f 6e 2e 0a 5e 54 68 65 20 56 41 43  action..^The VAC
1ef60 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61  UUM command is a
1ef70 20 6e 6f 2d 6f 70 20 66 6f 72 20 69 6e 2d 6d 65   no-op for in-me
1ef80 6d 6f 72 79 20 64 61 74 61 62 61 73 65 73 2e 3c  mory databases.<
1ef90 2f 70 3e 0a 0a 3c 70 3e 5e 28 41 73 20 6f 66 20  /p>..<p>^(As of 
1efa0 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33  SQLite version 3
1efb0 2e 31 2c 20 61 6e 20 61 6c 74 65 72 6e 61 74 69  .1, an alternati
1efc0 76 65 20 74 6f 20 75 73 69 6e 67 20 74 68 65 20  ve to using the 
1efd0 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 0a 69  VACUUM command.i
1efe0 73 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 6d 6f  s auto-vacuum mo
1eff0 64 65 2c 20 65 6e 61 62 6c 65 64 20 75 73 69 6e  de, enabled usin
1f000 67 20 74 68 65 20 0a 5b 61 75 74 6f 5f 76 61 63  g the .[auto_vac
1f010 75 75 6d 5d 20 70 72 61 67 6d 61 2e 29 5e 20 20  uum] pragma.)^  
1f020 5e 57 68 65 6e 20 5b 61 75 74 6f 5f 76 61 63 75  ^When [auto_vacu
1f030 75 6d 5d 20 69 73 20 65 6e 61 62 6c 65 64 20 66  um] is enabled f
1f040 6f 72 20 61 20 64 61 74 61 62 61 73 65 2c 20 0a  or a database, .
1f050 6c 61 72 67 65 20 64 65 6c 65 74 65 73 20 63 61  large deletes ca
1f060 75 73 65 0a 74 68 65 20 73 69 7a 65 20 6f 66 20  use.the size of 
1f070 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
1f080 65 20 74 6f 20 73 68 72 69 6e 6b 2e 20 20 48 6f  e to shrink.  Ho
1f090 77 65 76 65 72 2c 20 5b 61 75 74 6f 5f 76 61 63  wever, [auto_vac
1f0a0 75 75 6d 5d 0a 61 6c 73 6f 20 63 61 75 73 65 73  uum].also causes
1f0b0 20 65 78 63 65 73 73 20 66 72 61 67 6d 65 6e 74   excess fragment
1f0c0 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
1f0d0 61 62 61 73 65 20 66 69 6c 65 2e 20 20 5e 41 6e  abase file.  ^An
1f0e0 64 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 0a  d [auto_vacuum].
1f0f0 64 6f 65 73 20 6e 6f 74 20 63 6f 6d 70 61 63 74  does not compact
1f100 20 70 61 72 74 69 61 6c 6c 79 20 66 69 6c 6c 65   partially fille
1f110 64 20 70 61 67 65 73 20 6f 66 20 74 68 65 20 64  d pages of the d
1f120 61 74 61 62 61 73 65 20 61 73 20 56 41 43 55 55  atabase as VACUU
1f130 4d 0a 64 6f 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  M.does.</p>..<p>
1f140 5e 54 68 65 20 5b 70 61 67 65 5f 73 69 7a 65 5d  ^The [page_size]
1f150 20 61 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f 76 61   and/or [auto_va
1f160 63 75 75 6d 5d 20 6d 6f 64 65 20 6f 66 20 61 20  cuum] mode of a 
1f170 64 61 74 61 62 61 73 65 20 63 61 6e 20 62 65 20  database can be 
1f180 63 68 61 6e 67 65 64 0a 62 79 20 69 6e 76 6f 6b  changed.by invok
1f190 69 6e 67 20 74 68 65 20 5b 70 61 67 65 5f 73 69  ing the [page_si
1f1a0 7a 65 20 70 72 61 67 6d 61 5d 20 61 6e 64 2f 6f  ze pragma] and/o
1f1b0 72 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 20 70  r [auto_vacuum p
1f1c0 72 61 67 6d 61 5d 20 61 6e 64 20 74 68 65 6e 0a  ragma] and then.
1f1d0 69 6d 6d 65 64 69 61 74 65 6c 79 20 56 41 43 55  immediately VACU
1f1e0 55 4d 69 6e 67 20 74 68 65 20 64 61 74 61 62 61  UMing the databa
1f1f0 73 65 2e 20 5e 45 78 63 65 70 74 2c 20 74 68 65  se. ^Except, the
1f200 20 70 61 67 65 20 73 69 7a 65 20 63 61 6e 6e 6f   page size canno
1f210 74 20 62 65 0a 63 68 61 6e 67 65 64 20 77 68 65  t be.changed whe
1f220 6e 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c  n [write-ahead l
1f230 6f 67 5d 20 6d 6f 64 65 20 69 73 20 69 6e 20 75  og] mode is in u
1f240 73 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  se.</p>..<tcl>.#
1f250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f290 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
1f2a0 63 74 69 6f 6e 20 7b 49 4e 44 45 58 45 44 20 42  ction {INDEXED B
1f2b0 59 7d 20 69 6e 64 65 78 65 64 62 79 20 7b 7b 49  Y} indexedby {{I
1f2c0 4e 44 45 58 45 44 20 42 59 7d 20 7b 4e 4f 54 20  NDEXED BY} {NOT 
1f2d0 49 4e 44 45 58 45 44 7d 7d 0a 0a 3c 2f 74 63 6c  INDEXED}}..</tcl
1f2e0 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45  >.<p>^The INDEXE
1f2f0 44 20 42 59 20 70 68 72 61 73 65 20 69 73 20 61  D BY phrase is a
1f300 20 53 51 4c 20 65 78 74 65 6e 73 69 6f 6e 20 66   SQL extension f
1f310 6f 75 6e 64 20 6f 6e 6c 79 20 69 6e 20 53 51 4c  ound only in SQL
1f320 69 74 65 20 77 68 69 63 68 20 63 61 6e 0a 62 65  ite which can.be
1f330 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20   used to verify 
1f340 74 68 61 74 20 74 68 65 20 63 6f 72 72 65 63 74  that the correct
1f350 20 69 6e 64 69 63 65 73 20 61 72 65 20 62 65 69   indices are bei
1f360 6e 67 20 75 73 65 64 20 6f 6e 20 61 20 5b 44 45  ng used on a [DE
1f370 4c 45 54 45 5d 2c 0a 5b 53 45 4c 45 43 54 5d 2c  LETE],.[SELECT],
1f380 20 6f 72 20 5b 55 50 44 41 54 45 5d 20 73 74 61   or [UPDATE] sta
1f390 74 65 6d 65 6e 74 2e 0a 5e 54 68 65 20 49 4e 44  tement..^The IND
1f3a0 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20 61  EXED BY phrase a
1f3b0 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73 20 74 68  lways follows th
1f3c0 65 20 6e 61 6d 65 20 6f 66 20 61 20 74 61 62 6c  e name of a tabl
1f3d0 65 20 74 68 61 74 20 53 51 4c 69 74 65 20 77 69  e that SQLite wi
1f3e0 6c 6c 0a 62 65 20 72 65 61 64 69 6e 67 2e 20 20  ll.be reading.  
1f3f0 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70  The INDEXED BY p
1f400 68 72 61 73 65 20 63 61 6e 20 62 65 20 73 65 65  hrase can be see
1f410 6e 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  n in the followi
1f420 6e 67 20 73 79 6e 74 61 78 0a 64 69 61 67 72 61  ng syntax.diagra
1f430 6d 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 42  ms:</p>..<tcl>.B
1f440 75 62 62 6c 65 44 69 61 67 72 61 6d 20 71 75 61  ubbleDiagram qua
1f450 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d  lified-table-nam
1f460 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  e.BubbleDiagram 
1f470 73 69 6e 67 6c 65 2d 73 6f 75 72 63 65 0a 3c 2f  single-source.</
1f480 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 49  tcl>..<p>^The "I
1f490 4e 44 45 58 45 44 20 42 59 20 69 6e 64 65 78 2d  NDEXED BY index-
1f4a0 6e 61 6d 65 22 20 63 6c 61 75 73 65 20 73 70 65  name" clause spe
1f4b0 63 69 66 69 65 73 20 74 68 61 74 20 74 68 65 20  cifies that the 
1f4c0 6e 61 6d 65 64 20 69 6e 64 65 78 0a 6d 75 73 74  named index.must
1f4d0 20 62 65 20 75 73 65 64 20 69 6e 20 6f 72 64 65   be used in orde
1f4e0 72 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 76 61 6c  r to look up val
1f4f0 75 65 73 20 6f 6e 20 74 68 65 20 70 72 65 63 65  ues on the prece
1f500 64 69 6e 67 20 74 61 62 6c 65 2e 0a 5e 49 66 20  ding table..^If 
1f510 69 6e 64 65 78 2d 6e 61 6d 65 20 64 6f 65 73 20  index-name does 
1f520 6e 6f 74 20 65 78 69 73 74 20 6f 72 20 63 61 6e  not exist or can
1f530 6e 6f 74 20 62 65 20 75 73 65 64 20 66 6f 72 20  not be used for 
1f540 74 68 65 20 71 75 65 72 79 2c 20 74 68 65 6e 0a  the query, then.
1f550 74 68 65 20 70 72 65 70 61 72 61 74 69 6f 6e 20  the preparation 
1f560 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  of the SQL state
1f570 6d 65 6e 74 20 66 61 69 6c 73 2e 0a 5e 28 54 68  ment fails..^(Th
1f580 65 20 22 4e 4f 54 20 49 4e 44 45 58 45 44 22 20  e "NOT INDEXED" 
1f590 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 73  clause specifies
1f5a0 20 74 68 61 74 20 6e 6f 20 69 6e 64 65 78 20 73   that no index s
1f5b0 68 61 6c 6c 20 62 65 20 75 73 65 64 20 77 68 65  hall be used whe
1f5c0 6e 0a 61 63 63 65 73 73 69 6e 67 20 74 68 65 20  n.accessing the 
1f5d0 70 72 65 63 65 64 69 6e 67 20 74 61 62 6c 65 2c  preceding table,
1f5e0 20 69 6e 63 6c 75 64 69 6e 67 20 69 6d 70 6c 69   including impli
1f5f0 65 64 20 69 6e 64 69 63 65 73 20 63 72 65 61 74  ed indices creat
1f600 65 20 62 79 0a 55 4e 49 51 55 45 20 61 6e 64 20  e by.UNIQUE and 
1f610 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73  PRIMARY KEY cons
1f620 74 72 61 69 6e 74 73 2e 20 20 48 6f 77 65 76 65  traints.  Howeve
1f630 72 2c 20 74 68 65 20 49 4e 54 45 47 45 52 20 50  r, the INTEGER P
1f640 52 49 4d 41 52 59 20 4b 45 59 0a 63 61 6e 20 73  RIMARY KEY.can s
1f650 74 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20  till be used to 
1f660 6c 6f 6f 6b 20 75 70 20 65 6e 74 72 69 65 73 20  look up entries 
1f670 65 76 65 6e 20 77 68 65 6e 20 22 4e 4f 54 20 49  even when "NOT I
1f680 4e 44 45 58 45 44 22 20 69 73 20 73 70 65 63 69  NDEXED" is speci
1f690 66 69 65 64 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e  fied.)^</p>..<p>
1f6a0 53 6f 6d 65 20 53 51 4c 20 64 61 74 61 62 61 73  Some SQL databas
1f6b0 65 20 65 6e 67 69 6e 65 73 20 70 72 6f 76 69 64  e engines provid
1f6c0 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 22  e non-standard "
1f6d0 68 69 6e 74 22 20 6d 65 63 68 61 6e 69 73 6d 73  hint" mechanisms
1f6e0 20 77 68 69 63 68 0a 63 61 6e 20 62 65 20 75 73   which.can be us
1f6f0 65 64 20 74 6f 20 67 69 76 65 20 74 68 65 20 71  ed to give the q
1f700 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 63  uery optimizer c
1f710 6c 75 65 73 20 61 62 6f 75 74 20 77 68 61 74 20  lues about what 
1f720 69 6e 64 69 63 65 73 20 69 74 20 73 68 6f 75 6c  indices it shoul
1f730 64 0a 75 73 65 20 66 6f 72 20 61 20 70 61 72 74  d.use for a part
1f740 69 63 75 6c 61 72 20 73 74 61 74 65 6d 65 6e 74  icular statement
1f750 2e 20 20 54 68 65 20 49 4e 44 45 58 20 42 59 20  .  The INDEX BY 
1f760 63 6c 61 75 73 65 20 6f 66 20 53 51 4c 69 74 65  clause of SQLite
1f770 20 69 73 20 0a 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d   is .<em>not</em
1f780 3e 20 61 20 68 69 6e 74 69 6e 67 20 6d 65 63 68  > a hinting mech
1f790 61 6e 69 73 6d 20 61 6e 64 20 69 74 20 73 68 6f  anism and it sho
1f7a0 75 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20  uld not be used 
1f7b0 61 73 20 73 75 63 68 2e 0a 5e 54 68 65 20 49 4e  as such..^The IN
1f7c0 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20  DEXED BY clause 
1f7d0 64 6f 65 73 20 6e 6f 74 20 67 69 76 65 20 74 68  does not give th
1f7e0 65 20 6f 70 74 69 6d 69 7a 65 72 20 68 69 6e 74  e optimizer hint
1f7f0 73 20 61 62 6f 75 74 20 77 68 69 63 68 20 69 6e  s about which in
1f800 64 65 78 0a 74 6f 20 75 73 65 3b 20 69 74 20 67  dex.to use; it g
1f810 69 76 65 73 20 74 68 65 20 6f 70 74 69 6d 69 7a  ives the optimiz
1f820 65 72 20 61 20 72 65 71 75 69 72 65 6d 65 6e 74  er a requirement
1f830 20 6f 66 20 77 68 69 63 68 20 69 6e 64 65 78 20   of which index 
1f840 74 6f 20 75 73 65 2e 0a 5e 49 66 20 74 68 65 20  to use..^If the 
1f850 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20  query optimizer 
1f860 69 73 20 75 6e 61 62 6c 65 20 74 6f 20 75 73 65  is unable to use
1f870 20 74 68 65 20 69 6e 64 65 78 20 73 70 65 63 69   the index speci
1f880 66 69 65 64 20 62 79 20 74 68 65 0a 49 4e 44 45  fied by the.INDE
1f890 58 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65  X BY clause, the
1f8a0 6e 20 74 68 65 20 71 75 65 72 79 20 77 69 6c 6c  n the query will
1f8b0 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72   fail with an er
1f8c0 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ror.</p>..<p>The
1f8d0 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75   INDEXED BY clau
1f8e0 73 65 20 69 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65  se is <em>not</e
1f8f0 6d 3e 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20  m> intended for 
1f900 75 73 65 20 69 6e 20 74 75 6e 69 6e 67 0a 74 68  use in tuning.th
1f910 65 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 6f 66  e performance of
1f920 20 61 20 71 75 65 72 79 2e 20 20 54 68 65 20 69   a query.  The i
1f930 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 49 4e 44  ntent of the IND
1f940 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 69  EXED BY clause i
1f950 73 0a 74 6f 20 72 61 69 73 65 20 61 20 72 75 6e  s.to raise a run
1f960 2d 74 69 6d 65 20 65 72 72 6f 72 20 69 66 20 61  -time error if a
1f970 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 2c 20   schema change, 
1f980 73 75 63 68 20 61 73 20 64 72 6f 70 70 69 6e 67  such as dropping
1f990 20 6f 72 0a 63 72 65 61 74 69 6e 67 20 61 6e 20   or.creating an 
1f9a0 69 6e 64 65 78 2c 20 63 61 75 73 65 73 20 74 68  index, causes th
1f9b0 65 20 71 75 65 72 79 20 70 6c 61 6e 20 66 6f 72  e query plan for
1f9c0 20 61 20 74 69 6d 65 2d 73 65 6e 73 69 74 69 76   a time-sensitiv
1f9d0 65 20 71 75 65 72 79 0a 74 6f 20 63 68 61 6e 67  e query.to chang
1f9e0 65 2e 20 20 54 68 65 20 49 4e 44 45 58 45 44 20  e.  The INDEXED 
1f9f0 42 59 20 63 6c 61 75 73 65 20 69 73 20 64 65 73  BY clause is des
1fa00 69 67 6e 65 64 20 74 6f 20 68 65 6c 70 20 64 65  igned to help de
1fa10 74 65 63 74 0a 75 6e 64 65 73 69 72 61 62 6c 65  tect.undesirable
1fa20 20 71 75 65 72 79 20 70 6c 61 6e 20 63 68 61 6e   query plan chan
1fa30 67 65 73 20 64 75 72 69 6e 67 20 72 65 67 72 65  ges during regre
1fa40 73 73 69 6f 6e 20 74 65 73 74 69 6e 67 2e 0a 44  ssion testing..D
1fa50 65 76 65 6c 6f 70 65 72 73 20 61 72 65 20 61 64  evelopers are ad
1fa60 6d 6f 6e 69 73 68 65 64 20 74 6f 20 6f 6d 69 74  monished to omit
1fa70 20 61 6c 6c 20 75 73 65 20 6f 66 20 49 4e 44 45   all use of INDE
1fa80 58 45 44 20 42 59 20 64 75 72 69 6e 67 0a 61 70  XED BY during.ap
1fa90 70 6c 69 63 61 74 69 6f 6e 20 64 65 73 69 67 6e  plication design
1faa0 2c 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  , implementation
1fab0 2c 20 74 65 73 74 69 6e 67 2c 20 61 6e 64 20 74  , testing, and t
1fac0 75 6e 69 6e 67 2e 20 20 49 66 0a 49 4e 44 45 58  uning.  If.INDEX
1fad0 45 44 20 42 59 20 69 73 20 74 6f 20 62 65 20 75  ED BY is to be u
1fae0 73 65 64 20 61 74 20 61 6c 6c 2c 20 69 74 20 73  sed at all, it s
1faf0 68 6f 75 6c 64 20 62 65 20 69 6e 73 65 72 74 65  hould be inserte
1fb00 64 20 61 74 20 74 68 65 20 76 65 72 79 0a 65 6e  d at the very.en
1fb10 64 20 6f 66 20 74 68 65 20 64 65 76 65 6c 6f 70  d of the develop
1fb20 6d 65 6e 74 20 70 72 6f 63 65 73 73 20 77 68 65  ment process whe
1fb30 6e 20 22 6c 6f 63 6b 69 6e 67 20 64 6f 77 6e 22  n "locking down"
1fb40 20 61 20 64 65 73 69 67 6e 2e 3c 2f 70 3e 0a 0a   a design.</p>..
1fb50 3c 68 33 3e 53 65 65 20 41 6c 73 6f 3a 3c 2f 68  <h3>See Also:</h
1fb60 33 3e 0a 0a 3c 70 3e 54 68 65 20 5b 73 71 6c 69  3>..<p>The [sqli
1fb70 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28  te3_stmt_status(
1fb80 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61  )] C/C++ interfa
1fb90 63 65 20 74 6f 67 65 74 68 65 72 20 77 69 74 68  ce together with
1fba0 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f 53 54 4d   the.[SQLITE_STM
1fbb0 54 53 54 41 54 55 53 5f 46 55 4c 4c 53 43 41 4e  TSTATUS_FULLSCAN
1fbc0 5f 53 54 45 50 5d 20 61 6e 64 20 5b 53 51 4c 49  _STEP] and [SQLI
1fbd0 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f  TE_STMTSTATUS_SO
1fbe0 52 54 5d 20 76 65 72 62 73 0a 63 61 6e 20 62 65  RT] verbs.can be
1fbf0 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20   used to detect 
1fc00 61 74 20 72 75 6e 2d 74 69 6d 65 20 77 68 65 6e  at run-time when
1fc10 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e   an SQL statemen
1fc20 74 20 69 73 20 6e 6f 74 0a 6d 61 6b 69 6e 67 20  t is not.making 
1fc30 65 66 66 65 63 74 69 76 65 20 75 73 65 20 6f 66  effective use of
1fc40 20 69 6e 64 69 63 65 73 2e 20 20 4d 61 6e 79 20   indices.  Many 
1fc50 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 6d 61 79  applications may
1fc60 20 70 72 65 66 65 72 20 74 6f 0a 75 73 65 20 74   prefer to.use t
1fc70 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74  he [sqlite3_stmt
1fc80 5f 73 74 61 74 75 73 28 29 5d 20 69 6e 74 65 72  _status()] inter
1fc90 66 61 63 65 20 74 6f 20 64 65 74 65 63 74 20 69  face to detect i
1fca0 6e 64 65 78 20 6d 69 73 75 73 65 0a 72 61 74 68  ndex misuse.rath
1fcb0 65 72 20 74 68 61 6e 20 74 68 65 20 49 4e 44 45  er than the INDE
1fcc0 58 45 44 20 42 59 20 70 68 72 61 73 65 20 64 65  XED BY phrase de
1fcd0 73 63 72 69 62 65 64 20 68 65 72 65 2e 3c 2f 70  scribed here.</p
1fce0 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
1fcf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fd00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fd10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fd20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fd30 23 23 23 23 23 23 0a 23 20 41 20 6c 69 73 74 20  ######.# A list 
1fd40 6f 66 20 6b 65 79 77 6f 72 64 73 2e 20 20 41 20  of keywords.  A 
1fd50 61 73 74 65 72 69 73 6b 20 6f 63 63 75 72 73 20  asterisk occurs 
1fd60 61 66 74 65 72 20 74 68 65 20 6b 65 79 77 6f 72  after the keywor
1fd70 64 20 69 66 20 69 74 20 69 73 20 6f 6e 0a 23 20  d if it is on.# 
1fd80 74 68 65 20 66 61 6c 6c 62 61 63 6b 20 6c 69 73  the fallback lis
1fd90 74 2e 0a 23 0a 73 65 74 20 6b 65 79 77 6f 72 64  t..#.set keyword
1fda0 5f 6c 69 73 74 20 5b 6c 73 6f 72 74 20 7b 0a 20  _list [lsort {. 
1fdb0 20 20 41 42 4f 52 54 0a 20 20 20 41 43 54 49 4f    ABORT.   ACTIO
1fdc0 4e 0a 20 20 20 41 44 44 0a 20 20 20 41 46 54 45  N.   ADD.   AFTE
1fdd0 52 0a 20 20 20 41 4c 4c 0a 20 20 20 41 4c 54 45  R.   ALL.   ALTE
1fde0 52 0a 20 20 20 41 4e 41 4c 59 5a 45 0a 20 20 20  R.   ANALYZE.   
1fdf0 41 4e 44 0a 20 20 20 41 53 0a 20 20 20 41 53 43  AND.   AS.   ASC
1fe00 0a 20 20 20 41 54 54 41 43 48 0a 20 20 20 41 55  .   ATTACH.   AU
1fe10 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 42  TOINCREMENT.   B
1fe20 45 46 4f 52 45 0a 20 20 20 42 45 47 49 4e 0a 20  EFORE.   BEGIN. 
1fe30 20 20 42 45 54 57 45 45 4e 0a 20 20 20 42 59 0a    BETWEEN.   BY.
1fe40 20 20 20 43 41 53 43 41 44 45 0a 20 20 20 43 41     CASCADE.   CA
1fe50 53 45 0a 20 20 20 43 41 53 54 0a 20 20 20 43 48  SE.   CAST.   CH
1fe60 45 43 4b 0a 20 20 20 43 4f 4c 4c 41 54 45 0a 20  ECK.   COLLATE. 
1fe70 20 20 43 4f 4c 55 4d 4e 0a 20 20 20 43 4f 4d 4d    COLUMN.   COMM
1fe80 49 54 0a 20 20 20 43 4f 4e 46 4c 49 43 54 0a 20  IT.   CONFLICT. 
1fe90 20 20 43 4f 4e 53 54 52 41 49 4e 54 0a 20 20 20    CONSTRAINT.   
1fea0 43 52 45 41 54 45 0a 20 20 20 43 52 4f 53 53 0a  CREATE.   CROSS.
1feb0 20 20 20 43 55 52 52 45 4e 54 5f 44 41 54 45 0a     CURRENT_DATE.
1fec0 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 0a     CURRENT_TIME.
1fed0 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53     CURRENT_TIMES
1fee0 54 41 4d 50 0a 20 20 20 44 41 54 41 42 41 53 45  TAMP.   DATABASE
1fef0 0a 20 20 20 44 45 46 41 55 4c 54 0a 20 20 20 44  .   DEFAULT.   D
1ff00 45 46 45 52 52 45 44 0a 20 20 20 44 45 46 45 52  EFERRED.   DEFER
1ff10 52 41 42 4c 45 0a 20 20 20 44 45 4c 45 54 45 0a  RABLE.   DELETE.
1ff20 20 20 20 44 45 53 43 0a 20 20 20 44 45 54 41 43     DESC.   DETAC
1ff30 48 0a 20 20 20 44 49 53 54 49 4e 43 54 0a 20 20  H.   DISTINCT.  
1ff40 20 44 52 4f 50 0a 20 20 20 45 4e 44 0a 20 20 20   DROP.   END.   
1ff50 45 41 43 48 0a 20 20 20 45 4c 53 45 0a 20 20 20  EACH.   ELSE.   
1ff60 45 53 43 41 50 45 0a 20 20 20 45 58 43 45 50 54  ESCAPE.   EXCEPT
1ff70 0a 20 20 20 45 58 43 4c 55 53 49 56 45 0a 20 20  .   EXCLUSIVE.  
1ff80 20 45 58 49 53 54 53 0a 20 20 20 45 58 50 4c 41   EXISTS.   EXPLA
1ff90 49 4e 0a 20 20 20 46 41 49 4c 0a 20 20 20 46 4f  IN.   FAIL.   FO
1ffa0 52 0a 20 20 20 46 4f 52 45 49 47 4e 0a 20 20 20  R.   FOREIGN.   
1ffb0 46 52 4f 4d 0a 20 20 20 46 55 4c 4c 0a 20 20 20  FROM.   FULL.   
1ffc0 47 4c 4f 42 0a 20 20 20 47 52 4f 55 50 0a 20 20  GLOB.   GROUP.  
1ffd0 20 48 41 56 49 4e 47 0a 20 20 20 49 46 0a 20 20   HAVING.   IF.  
1ffe0 20 49 47 4e 4f 52 45 0a 20 20 20 49 4d 4d 45 44   IGNORE.   IMMED
1fff0 49 41 54 45 0a 20 20 20 49 4e 0a 20 20 20 49 4e  IATE.   IN.   IN
20000 44 45 58 0a 20 20 20 49 4e 44 45 58 45 44 0a 20  DEX.   INDEXED. 
20010 20 20 49 4e 49 54 49 41 4c 4c 59 0a 20 20 20 49    INITIALLY.   I
20020 4e 4e 45 52 0a 20 20 20 49 4e 53 45 52 54 0a 20  NNER.   INSERT. 
20030 20 20 49 4e 53 54 45 41 44 0a 20 20 20 49 4e 54    INSTEAD.   INT
20040 45 52 53 45 43 54 0a 20 20 20 49 4e 54 4f 0a 20  ERSECT.   INTO. 
20050 20 20 49 53 0a 20 20 20 49 53 4e 55 4c 4c 0a 20    IS.   ISNULL. 
20060 20 20 4a 4f 49 4e 0a 20 20 20 4b 45 59 0a 20 20    JOIN.   KEY.  
20070 20 4c 45 46 54 0a 20 20 20 4c 49 4b 45 0a 20 20   LEFT.   LIKE.  
20080 20 4c 49 4d 49 54 0a 20 20 20 4d 41 54 43 48 0a   LIMIT.   MATCH.
20090 20 20 20 4e 41 54 55 52 41 4c 0a 20 20 20 4e 4f     NATURAL.   NO
200a0 0a 20 20 20 4e 4f 54 0a 20 20 20 4e 4f 54 4e 55  .   NOT.   NOTNU
200b0 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20 20 4f 46  LL.   NULL.   OF
200c0 0a 20 20 20 4f 46 46 53 45 54 0a 20 20 20 4f 4e  .   OFFSET.   ON
200d0 0a 20 20 20 4f 52 0a 20 20 20 4f 52 44 45 52 0a  .   OR.   ORDER.
200e0 20 20 20 4f 55 54 45 52 0a 20 20 20 50 4c 41 4e     OUTER.   PLAN
200f0 0a 20 20 20 50 52 41 47 4d 41 0a 20 20 20 50 52  .   PRAGMA.   PR
20100 49 4d 41 52 59 0a 20 20 20 51 55 45 52 59 0a 20  IMARY.   QUERY. 
20110 20 20 52 41 49 53 45 0a 20 20 20 52 45 46 45 52    RAISE.   REFER
20120 45 4e 43 45 53 0a 20 20 20 52 45 47 45 58 50 0a  ENCES.   REGEXP.
20130 20 20 20 52 45 49 4e 44 45 58 0a 20 20 20 52 45     REINDEX.   RE
20140 4c 45 41 53 45 0a 20 20 20 52 45 4e 41 4d 45 0a  LEASE.   RENAME.
20150 20 20 20 52 45 50 4c 41 43 45 0a 20 20 20 52 45     REPLACE.   RE
20160 53 54 52 49 43 54 0a 20 20 20 52 49 47 48 54 0a  STRICT.   RIGHT.
20170 20 20 20 52 4f 4c 4c 42 41 43 4b 0a 20 20 20 52     ROLLBACK.   R
20180 4f 57 0a 20 20 20 53 41 56 45 50 4f 49 4e 54 0a  OW.   SAVEPOINT.
20190 20 20 20 53 45 4c 45 43 54 0a 20 20 20 53 45 54     SELECT.   SET
201a0 0a 20 20 20 54 41 42 4c 45 0a 20 20 20 54 45 4d  .   TABLE.   TEM
201b0 50 0a 20 20 20 54 45 4d 50 4f 52 41 52 59 0a 20  P.   TEMPORARY. 
201c0 20 20 54 48 45 4e 0a 20 20 20 54 4f 0a 20 20 20    THEN.   TO.   
201d0 54 52 41 4e 53 41 43 54 49 4f 4e 0a 20 20 20 54  TRANSACTION.   T
201e0 52 49 47 47 45 52 0a 20 20 20 55 4e 49 4f 4e 0a  RIGGER.   UNION.
201f0 20 20 20 55 4e 49 51 55 45 0a 20 20 20 55 50 44     UNIQUE.   UPD
20200 41 54 45 0a 20 20 20 55 53 49 4e 47 0a 20 20 20  ATE.   USING.   
20210 56 41 43 55 55 4d 0a 20 20 20 56 41 4c 55 45 53  VACUUM.   VALUES
20220 0a 20 20 20 56 49 45 57 0a 20 20 20 56 49 52 54  .   VIEW.   VIRT
20230 55 41 4c 0a 20 20 20 57 48 45 4e 0a 20 20 20 57  UAL.   WHEN.   W
20240 48 45 52 45 0a 7d 5d 0a 0a 68 64 5f 70 75 74 73  HERE.}]..hd_puts
20250 20 7b 3c 44 49 56 20 63 6c 61 73 73 3d 22 70 64   {<DIV class="pd
20260 66 5f 73 65 63 74 69 6f 6e 22 3e 7d 0a 53 65 63  f_section">}.Sec
20270 74 69 6f 6e 20 7b 53 51 4c 69 74 65 20 4b 65 79  tion {SQLite Key
20280 77 6f 72 64 73 7d 20 6b 65 79 77 6f 72 64 73 20  words} keywords 
20290 7b 7b 2a 53 51 4c 20 6b 65 79 77 6f 72 64 7d 20  {{*SQL keyword} 
202a0 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a  {SQL keywords}}.
202b0 68 64 5f 70 75 74 73 20 7b 3c 2f 44 49 56 3e 7d  hd_puts {</DIV>}
202c0 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  .</tcl>..<p>The 
202d0 53 51 4c 20 73 74 61 6e 64 61 72 64 20 73 70 65  SQL standard spe
202e0 63 69 66 69 65 73 20 61 20 68 75 67 65 20 6e 75  cifies a huge nu
202f0 6d 62 65 72 20 6f 66 20 6b 65 79 77 6f 72 64 73  mber of keywords
20300 20 77 68 69 63 68 20 6d 61 79 20 6e 6f 74 0a 62   which may not.b
20310 65 20 75 73 65 64 20 61 73 20 74 68 65 20 6e 61  e used as the na
20320 6d 65 73 20 6f 66 20 74 61 62 6c 65 73 2c 20 69  mes of tables, i
20330 6e 64 69 63 65 73 2c 20 63 6f 6c 75 6d 6e 73 2c  ndices, columns,
20340 20 64 61 74 61 62 61 73 65 73 2c 20 75 73 65 72   databases, user
20350 2d 64 65 66 69 6e 65 64 0a 66 75 6e 63 74 69 6f  -defined.functio
20360 6e 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20  ns, collations, 
20370 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f  virtual table mo
20380 64 75 6c 65 73 2c 20 6f 72 20 61 6e 79 20 6f 74  dules, or any ot
20390 68 65 72 20 6e 61 6d 65 64 20 6f 62 6a 65 63 74  her named object
203a0 2e 0a 54 68 65 20 6c 69 73 74 20 6f 66 20 6b 65  ..The list of ke
203b0 79 77 6f 72 64 73 20 69 73 20 73 6f 20 6c 6f 6e  ywords is so lon
203c0 67 20 74 68 61 74 20 66 65 77 20 70 65 6f 70 6c  g that few peopl
203d0 65 20 63 61 6e 20 72 65 6d 65 6d 62 65 72 20 74  e can remember t
203e0 68 65 6d 20 61 6c 6c 2e 0a 46 6f 72 20 6d 6f 73  hem all..For mos
203f0 74 20 53 51 4c 20 63 6f 64 65 2c 20 79 6f 75 72  t SQL code, your
20400 20 73 61 66 65 73 74 20 62 65 74 20 69 73 20 74   safest bet is t
20410 6f 20 6e 65 76 65 72 20 75 73 65 20 61 6e 79 20  o never use any 
20420 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65  English language
20430 0a 77 6f 72 64 20 61 73 20 74 68 65 20 6e 61 6d  .word as the nam
20440 65 20 6f 66 20 61 20 75 73 65 72 2d 64 65 66 69  e of a user-defi
20450 6e 65 64 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a  ned object.</p>.
20460 0a 3c 70 3e 49 66 20 79 6f 75 20 77 61 6e 74 20  .<p>If you want 
20470 74 6f 20 75 73 65 20 61 20 6b 65 79 77 6f 72 64  to use a keyword
20480 20 61 73 20 61 20 6e 61 6d 65 2c 20 79 6f 75 20   as a name, you 
20490 6e 65 65 64 20 74 6f 20 71 75 6f 74 65 20 69 74  need to quote it
204a0 2e 20 20 54 68 65 72 65 0a 61 72 65 20 74 68 72  .  There.are thr
204b0 65 65 20 77 61 79 73 20 6f 66 20 71 75 6f 74 69  ee ways of quoti
204c0 6e 67 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 53  ng keywords in S
204d0 51 4c 69 74 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  QLite:</p>..<p>.
204e0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61  <blockquote>.<ta
204f0 62 6c 65 3e 0a 3c 74 72 3e 09 3c 74 64 20 76 61  ble>.<tr>.<td va
20500 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 27 6b  lign="top"><b>'k
20510 65 79 77 6f 72 64 27 3c 2f 62 3e 3c 2f 74 64 3e  eyword'</b></td>
20520 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c  <td width="20"><
20530 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79  /td>..<td>^A key
20540 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65 20 71  word in single q
20550 75 6f 74 65 73 20 69 73 20 61 20 73 74 72 69 6e  uotes is a strin
20560 67 20 6c 69 74 65 72 61 6c 2e 3c 2f 74 64 3e 3c  g literal.</td><
20570 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76  /tr>..<tr>.<td v
20580 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 22  align="top"><b>"
20590 6b 65 79 77 6f 72 64 22 3c 2f 62 3e 3c 2f 74 64  keyword"</b></td
205a0 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e  ><td></td>..<td>
205b0 5e 41 20 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f  ^A keyword in do
205c0 75 62 6c 65 2d 71 75 6f 74 65 73 20 69 73 20 61  uble-quotes is a
205d0 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 3c 2f 74  n identifier.</t
205e0 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74  d></tr>..<tr>.<t
205f0 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  d valign="top"><
20600 62 3e 26 23 39 31 3b 6b 65 79 77 6f 72 64 26 23  b>&#91;keyword&#
20610 39 33 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e  93;</b></td><td>
20620 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65  </td>..<td>^A ke
20630 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20 69  yword enclosed i
20640 6e 20 73 71 75 61 72 65 20 62 72 61 63 6b 65 74  n square bracket
20650 73 20 69 73 20 0a 20 20 20 20 20 20 20 20 61 6e  s is .        an
20660 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20 54 68   identifier.  Th
20670 69 73 20 69 73 20 6e 6f 74 20 73 74 61 6e 64 61  is is not standa
20680 72 64 20 53 51 4c 2e 20 20 54 68 69 73 20 71 75  rd SQL.  This qu
20690 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a  oting mechanism.
206a0 20 20 20 20 20 20 20 20 69 73 20 75 73 65 64 20          is used 
206b0 62 79 20 4d 53 20 41 63 63 65 73 73 20 61 6e 64  by MS Access and
206c0 20 53 51 4c 20 53 65 72 76 65 72 20 61 6e 64 20   SQL Server and 
206d0 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 53  is included in S
206e0 51 4c 69 74 65 20 66 6f 72 0a 20 20 20 20 20 20  QLite for.      
206f0 20 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e    compatibility.
20700 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e  </td></tr>..<tr>
20710 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
20720 22 3e 3c 62 3e 26 23 39 36 3b 6b 65 79 77 6f 72  "><b>&#96;keywor
20730 64 26 23 39 36 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c  d&#96;</b></td><
20740 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41  td></td>..<td>^A
20750 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65   keyword enclose
20760 64 20 69 6e 20 67 72 61 76 65 20 61 63 63 65 6e  d in grave accen
20770 74 73 20 28 41 53 43 49 49 20 63 6f 64 65 20 39  ts (ASCII code 9
20780 36 29 20 69 73 20 0a 20 20 20 20 20 20 20 20 61  6) is .        a
20790 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20 54  n identifier.  T
207a0 68 69 73 20 69 73 20 6e 6f 74 20 73 74 61 6e 64  his is not stand
207b0 61 72 64 20 53 51 4c 2e 20 20 54 68 69 73 20 71  ard SQL.  This q
207c0 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d  uoting mechanism
207d0 0a 20 20 20 20 20 20 20 20 69 73 20 75 73 65 64  .        is used
207e0 20 62 79 20 4d 79 53 51 4c 20 61 6e 64 20 69 73   by MySQL and is
207f0 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 53 51 4c   included in SQL
20800 69 74 65 20 66 6f 72 0a 20 20 20 20 20 20 20 20  ite for.        
20810 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f  compatibility.</
20820 74 64 3e 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65  td></tr>.</table
20830 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >.</blockquote>.
20840 3c 2f 70 3e 0a 0a 3c 70 3e 46 6f 72 20 72 65 73  </p>..<p>For res
20850 69 6c 69 65 6e 63 65 20 77 68 65 6e 20 63 6f 6e  ilience when con
20860 66 72 6f 6e 74 65 64 20 77 69 74 68 20 68 69 73  fronted with his
20870 74 6f 72 69 63 61 6c 20 53 51 4c 20 73 74 61 74  torical SQL stat
20880 65 6d 65 6e 74 73 2c 20 53 51 4c 69 74 65 0a 77  ements, SQLite.w
20890 69 6c 6c 20 73 6f 6d 65 74 69 6d 65 73 20 62 65  ill sometimes be
208a0 6e 64 20 74 68 65 20 71 75 6f 74 69 6e 67 20 72  nd the quoting r
208b0 75 6c 65 73 20 61 62 6f 76 65 3a 3c 2f 70 3e 0a  ules above:</p>.
208c0 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66  .<ul>.<li><p>^If
208d0 20 61 20 6b 65 79 77 6f 72 64 20 69 6e 20 73 69   a keyword in si
208e0 6e 67 6c 65 0a 71 75 6f 74 65 73 20 28 65 78 3a  ngle.quotes (ex:
208f0 20 3c 62 3e 27 6b 65 79 27 3c 2f 62 3e 20 6f 72   <b>'key'</b> or
20900 20 3c 62 3e 27 67 6c 6f 62 27 3c 2f 62 3e 29 20   <b>'glob'</b>) 
20910 69 73 20 75 73 65 64 20 69 6e 20 61 20 63 6f 6e  is used in a con
20920 74 65 78 74 20 77 68 65 72 65 0a 61 6e 20 69 64  text where.an id
20930 65 6e 74 69 66 69 65 72 20 69 73 20 61 6c 6c 6f  entifier is allo
20940 77 65 64 20 62 75 74 20 77 68 65 72 65 20 61 20  wed but where a 
20950 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 69  string literal i
20960 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 2c 20 74  s not allowed, t
20970 68 65 6e 0a 74 68 65 20 74 6f 6b 65 6e 20 69 73  hen.the token is
20980 20 75 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20 62   understood to b
20990 65 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  e an identifier 
209a0 69 6e 73 74 65 61 64 20 6f 66 20 61 20 73 74 72  instead of a str
209b0 69 6e 67 20 6c 69 74 65 72 61 6c 2e 0a 3c 2f 70  ing literal..</p
209c0 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5e  ></li>..<li><p>^
209d0 49 66 20 61 20 6b 65 79 77 6f 72 64 20 69 6e 20  If a keyword in 
209e0 64 6f 75 62 6c 65 0a 71 75 6f 74 65 73 20 28 65  double.quotes (e
209f0 78 3a 20 3c 62 3e 22 6b 65 79 22 3c 2f 62 3e 20  x: <b>"key"</b> 
20a00 6f 72 20 3c 62 3e 22 67 6c 6f 62 22 3c 2f 62 3e  or <b>"glob"</b>
20a10 29 20 69 73 20 75 73 65 64 20 69 6e 20 61 20 63  ) is used in a c
20a20 6f 6e 74 65 78 74 20 77 68 65 72 65 0a 69 74 20  ontext where.it 
20a30 63 61 6e 6e 6f 74 20 62 65 20 72 65 73 6f 6c 76  cannot be resolv
20a40 65 64 20 74 6f 20 61 6e 20 69 64 65 6e 74 69 66  ed to an identif
20a50 69 65 72 20 62 75 74 20 77 68 65 72 65 20 61 20  ier but where a 
20a60 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 0a 69  string literal.i
20a70 73 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e 20  s allowed, then 
20a80 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e 64  the token is und
20a90 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20 61 20  erstood to be a 
20aa0 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 69  string literal i
20ab0 6e 73 74 65 61 64 0a 6f 66 20 61 6e 20 69 64 65  nstead.of an ide
20ac0 6e 74 69 66 69 65 72 2e 3c 2f 70 3e 3c 2f 6c 69  ntifier.</p></li
20ad0 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 50 72 6f 67  >.</ul>..<p>Prog
20ae0 72 61 6d 6d 65 72 73 20 61 72 65 20 63 61 75 74  rammers are caut
20af0 69 6f 6e 65 64 20 6e 6f 74 20 74 6f 20 75 73 65  ioned not to use
20b00 20 74 68 65 20 74 77 6f 20 65 78 63 65 70 74 69   the two excepti
20b10 6f 6e 73 20 64 65 73 63 72 69 62 65 64 20 69 6e  ons described in
20b20 0a 74 68 65 20 70 72 65 76 69 6f 75 73 20 62 75  .the previous bu
20b30 6c 6c 65 74 73 2e 20 20 57 65 20 65 6d 70 68 61  llets.  We empha
20b40 73 69 7a 65 20 74 68 61 74 20 74 68 65 79 20 65  size that they e
20b50 78 69 73 74 20 6f 6e 6c 79 20 73 6f 20 74 68 61  xist only so tha
20b60 74 20 6f 6c 64 0a 61 6e 64 20 69 6c 6c 2d 66 6f  t old.and ill-fo
20b70 72 6d 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65  rmed SQL stateme
20b80 6e 74 73 20 77 69 6c 6c 20 72 75 6e 20 63 6f 72  nts will run cor
20b90 72 65 63 74 6c 79 2e 20 20 46 75 74 75 72 65 20  rectly.  Future 
20ba0 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69  versions of.SQLi
20bb0 74 65 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  te might change 
20bc0 74 6f 20 72 61 69 73 65 20 65 72 72 6f 72 73 20  to raise errors 
20bd0 69 6e 73 74 65 61 64 20 6f 66 20 61 63 63 65 70  instead of accep
20be0 74 69 6e 67 20 74 68 65 20 6d 61 6c 66 6f 72 6d  ting the malform
20bf0 65 64 0a 73 74 61 74 65 6d 65 6e 74 73 20 63 6f  ed.statements co
20c00 76 65 72 65 64 20 62 79 20 74 68 65 20 65 78 63  vered by the exc
20c10 65 70 74 69 6f 6e 73 20 61 62 6f 76 65 2e 3c 2f  eptions above.</
20c20 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 61  p>..<p>.SQLite a
20c30 64 64 73 20 6e 65 77 20 6b 65 79 77 6f 72 64 73  dds new keywords
20c40 20 66 72 6f 6d 20 74 69 6d 65 20 74 6f 20 74 69   from time to ti
20c50 6d 65 20 77 68 65 6e 20 69 74 20 74 61 6b 65 73  me when it takes
20c60 20 6f 6e 20 6e 65 77 20 66 65 61 74 75 72 65 73   on new features
20c70 2e 0a 53 6f 20 74 6f 20 70 72 65 76 65 6e 74 20  ..So to prevent 
20c80 79 6f 75 72 20 63 6f 64 65 20 66 72 6f 6d 20 62  your code from b
20c90 65 69 6e 67 20 62 72 6f 6b 65 6e 20 62 79 20 66  eing broken by f
20ca0 75 74 75 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e  uture enhancemen
20cb0 74 73 2c 20 79 6f 75 20 73 68 6f 75 6c 64 0a 6e  ts, you should.n
20cc0 6f 72 6d 61 6c 6c 79 20 71 75 6f 74 65 20 61 6e  ormally quote an
20cd0 79 20 69 64 65 6e 74 69 66 69 65 72 20 74 68 61  y identifier tha
20ce0 74 20 69 73 20 61 6e 20 45 6e 67 6c 69 73 68 20  t is an English 
20cf0 6c 61 6e 67 75 61 67 65 20 77 6f 72 64 2c 20 65  language word, e
20d00 76 65 6e 20 69 66 0a 79 6f 75 20 64 6f 20 6e 6f  ven if.you do no
20d10 74 20 68 61 76 65 20 74 6f 2e 0a 3c 2f 70 3e 0a  t have to..</p>.
20d20 0a 3c 70 3e 0a 54 68 65 20 6c 69 73 74 20 62 65  .<p>.The list be
20d30 6c 6f 77 20 73 68 6f 77 73 20 61 6c 6c 20 70 6f  low shows all po
20d40 73 73 69 62 6c 65 20 6b 65 79 77 6f 72 64 73 20  ssible keywords 
20d50 75 73 65 64 20 62 79 20 61 6e 79 20 62 75 69 6c  used by any buil
20d60 64 20 6f 66 0a 53 51 4c 69 74 65 20 72 65 67 61  d of.SQLite rega
20d70 72 64 6c 65 73 73 20 6f 66 20 5b 63 6f 6d 70 69  rdless of [compi
20d80 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 5d  le-time options]
20d90 2e 20 20 0a 4d 6f 73 74 20 72 65 61 73 6f 6e 61  .  .Most reasona
20da0 62 6c 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ble configuratio
20db0 6e 73 20 75 73 65 20 6d 6f 72 65 20 6f 72 20 61  ns use more or a
20dc0 6c 6c 20 6f 66 20 74 68 65 73 65 20 6b 65 79 77  ll of these keyw
20dd0 6f 72 64 73 2c 0a 62 75 74 20 73 6f 6d 65 20 6b  ords,.but some k
20de0 65 79 77 6f 72 64 73 20 6d 61 79 20 62 65 20 6f  eywords may be o
20df0 6d 69 74 74 65 64 20 77 68 65 6e 20 53 51 4c 20  mitted when SQL 
20e00 6c 61 6e 67 75 61 67 65 20 66 65 61 74 75 72 65  language feature
20e10 73 20 61 72 65 0a 64 69 73 61 62 6c 65 64 2e 0a  s are.disabled..
20e20 5e 28 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20  ^(Regardless of 
20e30 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  the compile-time
20e40 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20   configuration, 
20e50 61 6e 79 20 69 64 65 6e 74 69 66 69 65 72 20 74  any identifier t
20e60 68 61 74 20 69 73 20 6e 6f 74 20 6f 6e 0a 74 68  hat is not on.th
20e70 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c 74 63 6c  e following <tcl
20e80 3e 68 64 5f 70 75 74 73 20 5b 6c 6c 65 6e 67 74  >hd_puts [llengt
20e90 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74 5d  h $keyword_list]
20ea0 3c 2f 74 63 6c 3e 20 65 6c 65 6d 65 6e 74 0a 6c  </tcl> element.l
20eb0 69 73 74 20 69 73 20 6e 6f 74 20 61 20 6b 65 79  ist is not a key
20ec0 77 6f 72 64 20 74 6f 20 74 68 65 20 53 51 4c 20  word to the SQL 
20ed0 70 61 72 73 65 72 20 69 6e 20 53 51 4c 69 74 65  parser in SQLite
20ee0 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  :.</p>..<blockqu
20ef0 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74  ote>.<table widt
20f00 68 3d 22 31 30 30 25 22 3e 3c 74 72 3e 0a 3c 74  h="100%"><tr>.<t
20f10 64 20 61 6c 69 67 6e 3d 22 6c 65 66 74 22 20 76  d align="left" v
20f20 61 6c 69 67 6e 3d 22 74 6f 70 22 20 77 69 64 74  align="top" widt
20f30 68 3d 22 32 30 25 22 3e 0a 3c 74 63 6c 3e 0a 73  h="20%">.<tcl>.s
20f40 65 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 6b  et n [llength $k
20f50 65 79 77 6f 72 64 5f 6c 69 73 74 5d 0a 73 65 74  eyword_list].set
20f60 20 6e 43 6f 6c 20 35 0a 73 65 74 20 6e 52 6f 77   nCol 5.set nRow
20f70 20 5b 65 78 70 72 20 7b 28 24 6e 2b 24 6e 43 6f   [expr {($n+$nCo
20f80 6c 2d 31 29 2f 24 6e 43 6f 6c 7d 5d 0a 73 65 74  l-1)/$nCol}].set
20f90 20 69 20 30 0a 66 6f 72 65 61 63 68 20 77 6f 72   i 0.foreach wor
20fa0 64 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20  d $keyword_list 
20fb0 7b 0a 20 20 69 66 20 7b 24 69 3d 3d 24 6e 52 6f  {.  if {$i==$nRo
20fc0 77 7d 20 7b 0a 20 20 20 20 68 64 5f 70 75 74 73  w} {.    hd_puts
20fd0 20 22 3c 2f 74 64 3e 3c 74 64 20 76 61 6c 69 67   "</td><td valig
20fe0 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c 69 67 6e 3d  n=\"top\" align=
20ff0 5c 22 6c 65 66 74 5c 22 20 77 69 64 74 68 3d 5c  \"left\" width=\
21000 22 32 30 25 5c 22 3e 22 0a 20 20 20 20 73 65 74  "20%\">".    set
21010 20 69 20 31 0a 20 20 7d 20 65 6c 73 65 20 7b 0a   i 1.  } else {.
21020 20 20 20 20 69 6e 63 72 20 69 0a 20 20 7d 0a 20      incr i.  }. 
21030 20 68 64 5f 70 75 74 73 20 22 24 77 6f 72 64 3c   hd_puts "$word<
21040 62 72 3e 5c 6e 22 0a 7d 0a 3c 2f 74 63 6c 3e 0a  br>\n".}.</tcl>.
21050 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c  </td></tr></tabl
21060 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  e></blockquote>)
21070 5e 0a                                            ^.