Documentation Source Text

Hex Artifact Content
Login

Artifact 46442578c6ac0fc00df0460f178301ab804d4820:


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 7c 63 6f 6c 6c 61 74 69 6f  llation|collatio
1aea0 6e 20 73 65 71 75 65 6e 63 65 5d 20 61 6e 64 20  n sequence] and 
1aeb0 5b 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 74 68  [affinity] of th
1aec0 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
1aed0 65 78 70 72 65 73 73 69 6f 6e 0a 69 6e 20 74 68  expression.in th
1aee0 65 20 73 75 62 2d 73 65 6c 65 63 74 20 73 74 61  e sub-select sta
1aef0 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20  tement...<p>^If 
1af00 74 68 65 72 65 20 69 73 20 6f 6e 6c 79 20 61 20  there is only a 
1af10 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20  single table in 
1af20 74 68 65 20 6a 6f 69 6e 2d 73 6f 75 72 63 65 20  the join-source 
1af30 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 46 52  following the FR
1af40 4f 4d 0a 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  OM.clause, then 
1af50 74 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 75  the input data u
1af60 73 65 64 20 62 79 20 74 68 65 20 53 45 4c 45 43  sed by the SELEC
1af70 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 74  T statement is t
1af80 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74  he contents of t
1af90 68 65 0a 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20  he.named table. 
1afa0 5e 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72  ^If there is mor
1afb0 65 20 74 68 61 6e 20 6f 6e 65 20 74 61 62 6c 65  e than one table
1afc0 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
1afd0 72 74 20 6f 66 20 74 68 65 0a 6a 6f 69 6e 2d 73  rt of the.join-s
1afe0 6f 75 72 63 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  ource following 
1aff0 74 68 65 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64  the FROM keyword
1b000 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6e 74 65  , then the conte
1b010 6e 74 73 20 6f 66 20 65 61 63 68 20 6e 61 6d 65  nts of each name
1b020 64 20 74 61 62 6c 65 0a 61 72 65 20 6a 6f 69 6e  d table.are join
1b030 65 64 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65  ed into a single
1b040 20 64 61 74 61 73 65 74 20 66 6f 72 20 74 68 65   dataset for the
1b050 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73   simple SELECT s
1b060 74 61 74 65 6d 65 6e 74 20 74 6f 20 6f 70 65 72  tatement to oper
1b070 61 74 65 20 6f 6e 2e 0a 45 78 61 63 74 6c 79 20  ate on..Exactly 
1b080 68 6f 77 20 74 68 65 20 64 61 74 61 20 69 73 20  how the data is 
1b090 63 6f 6d 62 69 6e 65 64 20 64 65 70 65 6e 64 73  combined depends
1b0a0 20 6f 6e 20 74 68 65 20 73 70 65 63 69 66 69 63   on the specific
1b0b0 20 5b 6a 6f 69 6e 2d 6f 70 5d 20 61 6e 64 0a 5b   [join-op] and.[
1b0c0 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 5d  join-constraint]
1b0d0 20 75 73 65 64 20 74 6f 20 63 6f 6e 6e 65 63 74   used to connect
1b0e0 20 74 68 65 20 74 61 62 6c 65 73 20 6f 72 20 73   the tables or s
1b0f0 75 62 71 75 65 72 69 65 73 20 74 6f 67 65 74 68  ubqueries togeth
1b100 65 72 2e 0a 0a 3c 70 3e 41 6c 6c 20 6a 6f 69 6e  er...<p>All join
1b110 73 20 69 6e 20 53 51 4c 69 74 65 20 61 72 65 20  s in SQLite are 
1b120 62 61 73 65 64 20 6f 6e 20 74 68 65 20 63 61 72  based on the car
1b130 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 6f  tesian product o
1b140 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64 0a 72  f the left and.r
1b150 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65  ight-hand datase
1b160 74 73 2e 20 5e 54 68 65 20 63 6f 6c 75 6d 6e 73  ts. ^The columns
1b170 20 6f 66 20 74 68 65 20 63 61 72 74 65 73 69 61   of the cartesia
1b180 6e 20 70 72 6f 64 75 63 74 20 64 61 74 61 73 65  n product datase
1b190 74 20 61 72 65 2c 20 69 6e 20 0a 6f 72 64 65 72  t are, in .order
1b1a0 2c 20 61 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e  , all the column
1b1b0 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 68 61  s of the left-ha
1b1c0 6e 64 20 64 61 74 61 73 65 74 20 66 6f 6c 6c 6f  nd dataset follo
1b1d0 77 65 64 20 62 79 20 61 6c 6c 20 74 68 65 20 63  wed by all the c
1b1e0 6f 6c 75 6d 6e 73 0a 6f 66 20 74 68 65 20 72 69  olumns.of the ri
1b1f0 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74  ght-hand dataset
1b200 2e 20 5e 54 68 65 72 65 20 69 73 20 61 20 72 6f  . ^There is a ro
1b210 77 20 69 6e 20 74 68 65 20 63 61 72 74 65 73 69  w in the cartesi
1b220 61 6e 20 70 72 6f 64 75 63 74 20 64 61 74 61 73  an product datas
1b230 65 74 0a 66 6f 72 6d 65 64 20 62 79 20 63 6f 6d  et.formed by com
1b240 62 69 6e 69 6e 67 20 65 61 63 68 20 75 6e 69 71  bining each uniq
1b250 75 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f  ue combination o
1b260 66 20 61 20 72 6f 77 20 66 72 6f 6d 20 74 68 65  f a row from the
1b270 20 6c 65 66 74 2d 68 61 6e 64 20 0a 61 6e 64 20   left-hand .and 
1b280 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73  right-hand datas
1b290 65 74 73 2e 20 5e 28 49 6e 20 6f 74 68 65 72 20  ets. ^(In other 
1b2a0 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 6c 65  words, if the le
1b2b0 66 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20  ft-hand dataset 
1b2c0 63 6f 6e 73 69 73 74 73 20 6f 66 0a 3c 69 3e 4e  consists of.<i>N
1b2d0 6c 68 73 3c 2f 69 3e 20 72 6f 77 73 20 6f 66 20  lhs</i> rows of 
1b2e0 3c 69 3e 4d 6c 68 73 3c 2f 69 3e 20 63 6f 6c 75  <i>Mlhs</i> colu
1b2f0 6d 6e 73 2c 20 61 6e 64 20 74 68 65 20 72 69 67  mns, and the rig
1b300 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20  ht-hand dataset 
1b310 6f 66 0a 3c 69 3e 4e 72 68 73 3c 2f 69 3e 20 72  of.<i>Nrhs</i> r
1b320 6f 77 73 20 6f 66 20 3c 69 3e 4d 72 68 73 3c 2f  ows of <i>Mrhs</
1b330 69 3e 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 6e  i> columns, then
1b340 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70   the cartesian p
1b350 72 6f 64 75 63 74 20 69 73 20 61 0a 64 61 74 61  roduct is a.data
1b360 73 65 74 20 6f 66 20 3c 69 3e 4e 6c 68 73 2e 4e  set of <i>Nlhs.N
1b370 72 68 73 3c 2f 69 3e 20 72 6f 77 73 2c 20 65 61  rhs</i> rows, ea
1b380 63 68 20 63 6f 6e 74 61 69 6e 69 6e 67 20 3c 69  ch containing <i
1b390 3e 4d 6c 68 73 2b 4d 72 68 73 3c 2f 69 3e 20 63  >Mlhs+Mrhs</i> c
1b3a0 6f 6c 75 6d 6e 73 2e 29 5e 0a 0a 3c 70 3e 5e 49  olumns.)^..<p>^I
1b3b0 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 20 69 73  f the join-op is
1b3c0 20 22 43 52 4f 53 53 20 4a 4f 49 4e 22 2c 20 22   "CROSS JOIN", "
1b3d0 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f  INNER JOIN", "JO
1b3e0 49 4e 22 20 6f 72 20 61 20 63 6f 6d 6d 61 0a 28  IN" or a comma.(
1b3f0 22 2c 22 29 20 61 6e 64 20 74 68 65 72 65 20 69  ",") and there i
1b400 73 20 6e 6f 20 4f 4e 20 6f 72 20 55 53 49 4e 47  s no ON or USING
1b410 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68   clause, then th
1b420 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
1b430 6a 6f 69 6e 20 69 73 0a 73 69 6d 70 6c 79 20 74  join is.simply t
1b440 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f  he cartesian pro
1b450 64 75 63 74 20 6f 66 20 74 68 65 20 6c 65 66 74  duct of the left
1b460 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20   and right-hand 
1b470 64 61 74 61 73 65 74 73 2e 20 0a 5e 54 68 65 72  datasets. .^Ther
1b480 65 20 69 73 20 6e 6f 20 64 69 66 66 65 72 65 6e  e is no differen
1b490 63 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 22  ce between the "
1b4a0 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f  INNER JOIN", "JO
1b4b0 49 4e 22 20 61 6e 64 20 22 2c 22 20 6a 6f 69 6e  IN" and "," join
1b4c0 0a 6f 70 65 72 61 74 6f 72 73 2e 20 5e 28 54 68  .operators. ^(Th
1b4d0 65 20 22 43 52 4f 53 53 20 4a 4f 49 4e 22 20 6a  e "CROSS JOIN" j
1b4e0 6f 69 6e 20 6f 70 65 72 61 74 6f 72 20 70 72 6f  oin operator pro
1b4f0 64 75 63 65 73 20 74 68 65 20 73 61 6d 65 20 64  duces the same d
1b500 61 74 61 20 61 73 20 74 68 65 20 0a 22 49 4e 4e  ata as the ."INN
1b510 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22  ER JOIN", "JOIN"
1b520 20 61 6e 64 20 22 2c 22 20 6f 70 65 72 61 74 6f   and "," operato
1b530 72 73 29 5e 2c 20 62 75 74 20 69 73 20 0a 3c 61  rs)^, but is .<a
1b540 20 68 72 65 66 3d 6f 70 74 6f 76 65 72 76 69 65   href=optovervie
1b550 77 2e 68 74 6d 6c 23 6d 61 6e 63 74 72 6c 3e 68  w.html#manctrl>h
1b560 61 6e 64 6c 65 64 20 73 6c 69 67 68 74 6c 79 20  andled slightly 
1b570 64 69 66 66 65 72 65 6e 74 6c 79 20 62 79 20 74  differently by t
1b580 68 65 20 71 75 65 72 79 0a 6f 70 74 69 6d 69 7a  he query.optimiz
1b590 65 72 3c 2f 61 3e 2e 20 4f 74 68 65 72 77 69 73  er</a>. Otherwis
1b5a0 65 2c 20 69 74 20 69 73 20 74 68 65 20 63 61 72  e, it is the car
1b5b0 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 6d  tesian product m
1b5c0 6f 64 69 66 69 65 64 20 0a 61 63 63 6f 72 64 69  odified .accordi
1b5d0 6e 67 20 74 6f 20 6f 6e 65 20 6f 72 20 6d 6f 72  ng to one or mor
1b5e0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1b5f0 6e 67 20 62 75 6c 6c 65 74 20 70 6f 69 6e 74 73  ng bullet points
1b600 3a 20 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20  : ..<ul>.  <li> 
1b610 3c 70 3e 5e 28 49 66 20 74 68 65 72 65 20 69 73  <p>^(If there is
1b620 20 61 6e 20 4f 4e 20 63 6c 61 75 73 65 20 73 70   an ON clause sp
1b630 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68  ecified, then th
1b640 65 20 4f 4e 20 65 78 70 72 65 73 73 69 6f 6e 20  e ON expression 
1b650 69 73 0a 20 20 20 20 20 20 20 65 76 61 6c 75 61  is.       evalua
1b660 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77  ted for each row
1b670 20 6f 66 20 74 68 65 20 63 61 72 74 65 73 69 61   of the cartesia
1b680 6e 20 70 72 6f 64 75 63 74 20 61 6e 64 20 74 68  n product and th
1b690 65 20 72 65 73 75 6c 74 20 63 61 73 74 20 74 6f  e result cast to
1b6a0 20 0a 20 20 20 20 20 20 20 61 20 6e 75 6d 65 72   .       a numer
1b6b0 69 63 20 76 61 6c 75 65 20 61 73 20 69 66 20 62  ic value as if b
1b6c0 79 20 61 20 5b 43 41 53 54 20 65 78 70 72 65 73  y a [CAST expres
1b6d0 73 69 6f 6e 5d 2e 20 41 6c 6c 20 72 6f 77 73 20  sion]. All rows 
1b6e0 66 6f 72 20 77 68 69 63 68 20 74 68 65 0a 20 20  for which the.  
1b6f0 20 20 20 20 20 65 78 70 72 65 73 73 69 6f 6e 20       expression 
1b700 65 76 61 6c 75 61 74 65 73 20 74 6f 20 4e 55 4c  evaluates to NUL
1b710 4c 20 6f 72 20 7a 65 72 6f 20 28 69 6e 74 65 67  L or zero (integ
1b720 65 72 20 76 61 6c 75 65 20 30 20 6f 72 20 72 65  er value 0 or re
1b730 61 6c 20 76 61 6c 75 65 20 30 2e 30 29 0a 20 20  al value 0.0).  
1b740 20 20 20 20 20 61 72 65 20 65 78 63 6c 75 64 65       are exclude
1b750 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73  d from the datas
1b760 65 74 2e 29 5e 0a 0a 20 20 3c 6c 69 3e 20 3c 70  et.)^..  <li> <p
1b770 3e 5e 49 66 20 74 68 65 72 65 20 69 73 20 61 20  >^If there is a 
1b780 55 53 49 4e 47 20 63 6c 61 75 73 65 20 73 70 65  USING clause spe
1b790 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
1b7a0 66 20 74 68 65 20 6a 6f 69 6e 2d 63 6f 6e 73 74  f the join-const
1b7b0 72 61 69 6e 74 2c 0a 20 20 20 20 20 20 20 74 68  raint,.       th
1b7c0 65 6e 20 65 61 63 68 20 6f 66 20 74 68 65 20 63  en each of the c
1b7d0 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 73 70 65 63  olumn names spec
1b7e0 69 66 69 65 64 20 6d 75 73 74 20 65 78 69 73 74  ified must exist
1b7f0 20 69 6e 20 74 68 65 20 64 61 74 61 73 65 74 73   in the datasets
1b800 20 74 6f 20 0a 20 20 20 20 20 20 20 62 6f 74 68   to .       both
1b810 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69   the left and ri
1b820 67 68 74 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2d  ght of the join-
1b830 6f 70 2e 20 5e 28 46 6f 72 20 65 61 63 68 20 70  op. ^(For each p
1b840 61 69 72 20 6f 66 20 6e 61 6d 65 73 61 6b 65 0a  air of namesake.
1b850 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 73 2c 20         columns, 
1b860 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 22  the expression "
1b870 6c 68 73 2e 58 20 3d 20 72 68 73 2e 58 22 20 69  lhs.X = rhs.X" i
1b880 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20  s evaluated for 
1b890 65 61 63 68 20 72 6f 77 20 6f 66 0a 20 20 20 20  each row of.    
1b8a0 20 20 20 74 68 65 20 63 61 72 74 65 73 69 61 6e     the cartesian
1b8b0 20 70 72 6f 64 75 63 74 20 61 6e 64 20 74 68 65   product and the
1b8c0 20 72 65 73 75 6c 74 20 63 61 73 74 20 74 6f 20   result cast to 
1b8d0 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 2e  a numeric value.
1b8e0 20 41 6c 6c 20 72 6f 77 73 0a 20 20 20 20 20 20   All rows.      
1b8f0 20 66 6f 72 20 77 68 69 63 68 20 6f 6e 65 20 6f   for which one o
1b900 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 65 78  r more of the ex
1b910 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61  pressions evalua
1b920 74 65 73 20 74 6f 20 4e 55 4c 4c 20 6f 72 20 7a  tes to NULL or z
1b930 65 72 6f 20 61 72 65 0a 20 20 20 20 20 20 20 65  ero are.       e
1b940 78 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65  xcluded from the
1b950 20 72 65 73 75 6c 74 20 73 65 74 2e 29 5e 20 5e   result set.)^ ^
1b960 57 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 76  When comparing v
1b970 61 6c 75 65 73 20 61 73 20 61 20 72 65 73 75 6c  alues as a resul
1b980 74 20 6f 66 20 61 0a 20 20 20 20 20 20 20 55 53  t of a.       US
1b990 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68 65 20  ING clause, the 
1b9a0 6e 6f 72 6d 61 6c 20 72 75 6c 65 73 20 66 6f 72  normal rules for
1b9b0 20 68 61 6e 64 6c 69 6e 67 20 61 66 66 69 6e 69   handling affini
1b9c0 74 69 65 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e 0a  ties, collation.
1b9d0 20 20 20 20 20 20 20 73 65 71 75 65 6e 63 65 73         sequences
1b9e0 20 61 6e 64 20 4e 55 4c 4c 20 76 61 6c 75 65 73   and NULL values
1b9f0 20 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20   in comparisons 
1ba00 61 70 70 6c 79 2e 20 5e 54 68 65 20 63 6f 6c 75  apply. ^The colu
1ba10 6d 6e 20 66 72 6f 6d 20 74 68 65 0a 20 20 20 20  mn from the.    
1ba20 20 20 20 64 61 74 61 73 65 74 20 6f 6e 20 74 68     dataset on th
1ba30 65 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64 65  e left-hand side
1ba40 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 6f 70 65   of the join ope
1ba50 72 61 74 6f 72 20 69 73 20 63 6f 6e 73 69 64 65  rator is conside
1ba60 72 65 64 20 74 6f 0a 20 20 20 20 20 20 20 62 65  red to.       be
1ba70 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e   on the left-han
1ba80 64 20 73 69 64 65 20 6f 66 20 74 68 65 20 63 6f  d side of the co
1ba90 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f  mparison operato
1baa0 72 20 28 3d 29 20 66 6f 72 20 74 68 65 20 70 75  r (=) for the pu
1bab0 72 70 6f 73 65 73 0a 20 20 20 20 20 20 20 6f 66  rposes.       of
1bac0 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
1bad0 6e 63 65 20 61 6e 64 20 61 66 66 69 6e 69 74 79  nce and affinity
1bae0 20 70 72 65 63 65 64 65 6e 63 65 2e 0a 0a 20 20   precedence...  
1baf0 20 20 20 20 20 3c 70 3e 5e 46 6f 72 20 65 61 63       <p>^For eac
1bb00 68 20 70 61 69 72 20 6f 66 20 63 6f 6c 75 6d 6e  h pair of column
1bb10 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  s identified by 
1bb20 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20  a USING clause, 
1bb30 74 68 65 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20  the column.     
1bb40 20 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74    from the right
1bb50 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20 69 73  -hand dataset is
1bb60 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68   omitted from th
1bb70 65 20 6a 6f 69 6e 65 64 20 64 61 74 61 73 65 74  e joined dataset
1bb80 2e 20 5e 54 68 69 73 20 0a 20 20 20 20 20 20 20  . ^This .       
1bb90 69 73 20 74 68 65 20 6f 6e 6c 79 20 64 69 66 66  is the only diff
1bba0 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61  erence between a
1bbb0 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 61 6e   USING clause an
1bbc0 64 20 69 74 73 20 65 71 75 69 76 61 6c 65 6e 74  d its equivalent
1bbd0 20 4f 4e 0a 20 20 20 20 20 20 20 63 6f 6e 73 74   ON.       const
1bbe0 72 61 69 6e 74 2e 0a 0a 20 20 3c 6c 69 3e 20 3c  raint...  <li> <
1bbf0 70 3e 5e 28 49 66 20 74 68 65 20 4e 41 54 55 52  p>^(If the NATUR
1bc00 41 4c 20 6b 65 79 77 6f 72 64 20 69 73 20 61 64  AL keyword is ad
1bc10 64 65 64 20 74 6f 20 61 6e 79 20 6f 66 20 74 68  ded to any of th
1bc20 65 20 6a 6f 69 6e 2d 6f 70 73 2c 20 74 68 65 6e  e join-ops, then
1bc30 20 61 6e 0a 20 20 20 20 20 20 20 69 6d 70 6c 69   an.       impli
1bc40 63 69 74 20 55 53 49 4e 47 20 63 6c 61 75 73 65  cit USING clause
1bc50 20 69 73 20 61 64 64 65 64 20 74 6f 20 74 68 65   is added to the
1bc60 20 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74   join-constraint
1bc70 73 2e 20 54 68 65 20 69 6d 70 6c 69 63 69 74 0a  s. The implicit.
1bc80 20 20 20 20 20 20 20 55 53 49 4e 47 20 63 6c 61         USING cla
1bc90 75 73 65 20 63 6f 6e 74 61 69 6e 73 20 65 61 63  use contains eac
1bca0 68 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  h of the column 
1bcb0 6e 61 6d 65 73 20 74 68 61 74 20 61 70 70 65 61  names that appea
1bcc0 72 20 69 6e 20 62 6f 74 68 0a 20 20 20 20 20 20  r in both.      
1bcd0 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69   the left and ri
1bce0 67 68 74 2d 68 61 6e 64 20 69 6e 70 75 74 20 64  ght-hand input d
1bcf0 61 74 61 73 65 74 73 2e 29 5e 20 5e 49 66 20 74  atasets.)^ ^If t
1bd00 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
1bd10 74 2d 68 61 6e 64 0a 20 20 20 20 20 20 20 69 6e  t-hand.       in
1bd20 70 75 74 20 64 61 74 61 73 65 74 73 20 66 65 61  put datasets fea
1bd30 74 75 72 65 20 6e 6f 20 63 6f 6d 6d 6f 6e 20 63  ture no common c
1bd40 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 74 68 65  olumn names, the
1bd50 6e 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65  n the NATURAL ke
1bd60 79 77 6f 72 64 0a 20 20 20 20 20 20 20 68 61 73  yword.       has
1bd70 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74 68   no effect on th
1bd80 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
1bd90 20 6a 6f 69 6e 2e 20 5e 41 20 55 53 49 4e 47 20   join. ^A USING 
1bda0 6f 72 20 4f 4e 20 63 6c 61 75 73 65 20 6d 61 79  or ON clause may
1bdb0 0a 20 20 20 20 20 20 20 6e 6f 74 20 62 65 20 61  .       not be a
1bdc0 64 64 65 64 20 74 6f 20 61 20 6a 6f 69 6e 20 74  dded to a join t
1bdd0 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68  hat specifies th
1bde0 65 20 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f 72  e NATURAL keywor
1bdf0 64 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28  d...  <li> <p>^(
1be00 49 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 20 69  If the join-op i
1be10 73 20 61 20 22 4c 45 46 54 20 4a 4f 49 4e 22 20  s a "LEFT JOIN" 
1be20 6f 72 20 22 4c 45 46 54 20 4f 55 54 45 52 20 4a  or "LEFT OUTER J
1be30 4f 49 4e 22 2c 20 74 68 65 6e 20 61 66 74 65 72  OIN", then after
1be40 0a 20 20 20 20 20 20 20 74 68 65 20 4f 4e 20 6f  .       the ON o
1be50 72 20 55 53 49 4e 47 20 66 69 6c 74 65 72 69 6e  r USING filterin
1be60 67 20 63 6c 61 75 73 65 73 20 68 61 76 65 20 62  g clauses have b
1be70 65 65 6e 20 61 70 70 6c 69 65 64 2c 20 61 6e 20  een applied, an 
1be80 65 78 74 72 61 20 72 6f 77 20 69 73 20 0a 20 20  extra row is .  
1be90 20 20 20 20 20 61 64 64 65 64 20 74 6f 20 74 68       added to th
1bea0 65 20 6f 75 74 70 75 74 20 66 6f 72 20 65 61 63  e output for eac
1beb0 68 20 72 6f 77 20 69 6e 20 74 68 65 20 6f 72 69  h row in the ori
1bec0 67 69 6e 61 6c 20 6c 65 66 74 2d 68 61 6e 64 20  ginal left-hand 
1bed0 69 6e 70 75 74 20 0a 20 20 20 20 20 20 20 64 61  input .       da
1bee0 74 61 73 65 74 20 74 68 61 74 20 63 6f 72 72 65  taset that corre
1bef0 73 70 6f 6e 64 73 20 74 6f 20 6e 6f 20 72 6f 77  sponds to no row
1bf00 73 20 61 74 20 61 6c 6c 20 69 6e 20 74 68 65 20  s at all in the 
1bf10 63 6f 6d 70 6f 73 69 74 65 0a 20 20 20 20 20 20  composite.      
1bf20 20 64 61 74 61 73 65 74 20 28 69 66 20 61 6e 79   dataset (if any
1bf30 29 2e 29 5e 20 5e 54 68 65 20 61 64 64 65 64 20  ).)^ ^The added 
1bf40 72 6f 77 73 20 63 6f 6e 74 61 69 6e 20 4e 55 4c  rows contain NUL
1bf50 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  L values in the 
1bf60 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 20 20 20 74  columns.       t
1bf70 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c  hat would normal
1bf80 6c 79 20 63 6f 6e 74 61 69 6e 20 76 61 6c 75 65  ly contain value
1bf90 73 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68  s copied from th
1bfa0 65 20 72 69 67 68 74 2d 68 61 6e 64 20 69 6e 70  e right-hand inp
1bfb0 75 74 0a 20 20 20 20 20 20 20 64 61 74 61 73 65  ut.       datase
1bfc0 74 2e 20 20 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e  t.  .</ul>..<p>^
1bfd0 28 57 68 65 6e 20 6d 6f 72 65 20 74 68 61 6e 20  (When more than 
1bfe0 74 77 6f 20 74 61 62 6c 65 73 20 61 72 65 20 6a  two tables are j
1bff0 6f 69 6e 65 64 20 74 6f 67 65 74 68 65 72 20 61  oined together a
1c000 73 20 70 61 72 74 20 6f 66 20 61 20 46 52 4f 4d  s part of a FROM
1c010 20 63 6c 61 75 73 65 2c 0a 74 68 65 20 6a 6f 69   clause,.the joi
1c020 6e 20 6f 70 65 72 61 74 69 6f 6e 73 20 61 72 65  n operations are
1c030 20 70 72 6f 63 65 73 73 65 64 20 69 6e 20 6f 72   processed in or
1c040 64 65 72 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  der from left to
1c050 20 72 69 67 68 74 2e 20 49 6e 20 6f 74 68 65 72   right. In other
1c060 20 0a 77 6f 72 64 73 2c 20 74 68 65 20 46 52 4f   .words, the FRO
1c070 4d 20 63 6c 61 75 73 65 20 28 41 20 6a 6f 69 6e  M clause (A join
1c080 2d 6f 70 2d 31 20 42 20 6a 6f 69 6e 2d 6f 70 2d  -op-1 B join-op-
1c090 32 20 43 29 20 69 73 20 63 6f 6d 70 75 74 65 64  2 C) is computed
1c0a0 20 61 73 20 0a 28 28 41 20 6a 6f 69 6e 2d 6f 70   as .((A join-op
1c0b0 2d 31 20 42 29 20 6a 6f 69 6e 2d 6f 70 2d 32 20  -1 B) join-op-2 
1c0c0 43 29 2e 29 5e 0a 20 20 20 20 20 20 20 0a 0a 3c  C).)^.       ..<
1c0d0 70 3e 3c 62 3e 32 2e 20 57 48 45 52 45 20 63 6c  p><b>2. WHERE cl
1c0e0 61 75 73 65 20 66 69 6c 74 65 72 69 6e 67 2e 3c  ause filtering.<
1c0f0 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  /b>.<tcl>hd_frag
1c100 6d 65 6e 74 20 77 68 65 72 65 63 6c 61 75 73 65  ment whereclause
1c110 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b  </tcl>.<tcl>hd_k
1c120 65 79 77 6f 72 64 73 20 7b 57 48 45 52 45 20 63  eywords {WHERE c
1c130 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  lause}</tcl>..<p
1c140 3e 5e 28 49 66 20 61 20 57 48 45 52 45 20 63 6c  >^(If a WHERE cl
1c150 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65  ause is specifie
1c160 64 2c 20 74 68 65 20 57 48 45 52 45 20 65 78 70  d, the WHERE exp
1c170 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75  ression is evalu
1c180 61 74 65 64 20 66 6f 72 20 0a 65 61 63 68 20 72  ated for .each r
1c190 6f 77 20 69 6e 20 74 68 65 20 69 6e 70 75 74 20  ow in the input 
1c1a0 64 61 74 61 20 61 6e 64 20 74 68 65 20 72 65 73  data and the res
1c1b0 75 6c 74 20 63 61 73 74 20 74 6f 20 61 20 6e 75  ult cast to a nu
1c1c0 6d 65 72 69 63 20 76 61 6c 75 65 2e 20 41 6c 6c  meric value. All
1c1d0 20 72 6f 77 73 0a 66 6f 72 20 77 68 69 63 68 20   rows.for which 
1c1e0 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
1c1f0 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c   expression eval
1c200 75 61 74 65 73 20 74 6f 20 61 20 4e 55 4c 4c 20  uates to a NULL 
1c210 76 61 6c 75 65 20 6f 72 20 74 6f 20 7a 65 72 6f  value or to zero
1c220 0a 28 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  .(integer value 
1c230 30 20 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20  0 or real value 
1c240 30 2e 30 29 20 61 72 65 20 65 78 63 6c 75 64 65  0.0) are exclude
1c250 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73  d from the datas
1c260 65 74 20 62 65 66 6f 72 65 0a 63 6f 6e 74 69 6e  et before.contin
1c270 75 69 6e 67 2e 29 5e 0a 0a 3c 70 3e 3c 62 3e 33  uing.)^..<p><b>3
1c280 2e 20 47 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20  . Generation of 
1c290 74 68 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c  the set of resul
1c2a0 74 20 72 6f 77 73 2e 3c 2f 62 3e 0a 3c 74 63 6c  t rows.</b>.<tcl
1c2b0 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65 73  >hd_fragment res
1c2c0 75 6c 74 73 65 74 3c 2f 74 63 6c 3e 0a 3c 74 63  ultset</tcl>.<tc
1c2d0 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 72  l>hd_keywords {r
1c2e0 65 73 75 6c 74 2d 73 65 74 20 65 78 70 72 65 73  esult-set expres
1c2f0 73 69 6f 6e 73 7d 20 7b 47 52 4f 55 50 20 42 59  sions} {GROUP BY
1c300 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4f 6e 63 65  }</tcl>..<p>Once
1c310 20 74 68 65 20 69 6e 70 75 74 20 64 61 74 61 73   the input datas
1c320 65 74 20 66 72 6f 6d 20 74 68 65 20 46 52 4f 4d  et from the FROM
1c330 20 63 6c 61 75 73 65 20 68 61 73 20 62 65 65 6e   clause has been
1c340 20 66 69 6c 74 65 72 65 64 20 62 79 20 74 68 65   filtered by the
1c350 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20 65 78  .WHERE clause ex
1c360 70 72 65 73 73 69 6f 6e 20 28 69 66 20 61 6e 79  pression (if any
1c370 29 2c 20 74 68 65 20 73 65 74 20 6f 66 20 72 65  ), the set of re
1c380 73 75 6c 74 20 72 6f 77 73 20 66 6f 72 20 74 68  sult rows for th
1c390 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c 45 43 54  e simple .SELECT
1c3a0 20 61 72 65 20 63 61 6c 63 75 6c 61 74 65 64 2e   are calculated.
1c3b0 20 45 78 61 63 74 6c 79 20 68 6f 77 20 74 68 69   Exactly how thi
1c3c0 73 20 69 73 20 64 6f 6e 65 20 64 65 70 65 6e 64  s is done depend
1c3d0 73 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65  s on whether the
1c3e0 20 73 69 6d 70 6c 65 20 0a 53 45 4c 45 43 54 20   simple .SELECT 
1c3f0 69 73 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  is an aggregate 
1c400 6f 72 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65  or non-aggregate
1c410 20 71 75 65 72 79 2c 20 61 6e 64 20 77 68 65 74   query, and whet
1c420 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 47 52 4f  her or not a GRO
1c430 55 50 0a 42 59 20 63 6c 61 75 73 65 20 77 61 73  UP.BY clause was
1c440 20 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c 70 3e   specified...<p>
1c450 20 5e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20   ^The number of 
1c460 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72  columns in the r
1c470 65 73 75 6c 74 20 72 6f 77 73 20 69 73 20 64 65  esult rows is de
1c480 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
1c490 65 78 70 72 65 73 73 69 6f 6e 0a 6c 69 73 74 20  expression.list 
1c4a0 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 53  in between the S
1c4b0 45 4c 45 43 54 20 61 6e 64 20 46 52 4f 4d 20 6b  ELECT and FROM k
1c4c0 65 79 77 6f 72 64 73 2e 20 5e 41 6e 79 20 61 72  eywords. ^Any ar
1c4d0 62 69 74 72 61 72 79 20 65 78 70 72 65 73 73 69  bitrary expressi
1c4e0 6f 6e 20 63 61 6e 20 62 65 0a 75 73 65 64 20 61  on can be.used a
1c4f0 73 20 61 20 72 65 73 75 6c 74 20 72 6f 77 20 63  s a result row c
1c500 6f 6c 75 6d 6e 2e 20 20 5e 49 66 20 61 20 72 65  olumn.  ^If a re
1c510 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20  sult expression 
1c520 69 73 20 0a 7d 20 0a 68 64 5f 70 75 74 73 20 22  is .} .hd_puts "
1c530 5b 4f 70 65 72 61 74 6f 72 20 2a 5d 22 20 0a 68  [Operator *]" .h
1c540 64 5f 70 75 74 73 20 7b 20 74 68 65 6e 20 61 6c  d_puts { then al
1c550 6c 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  l columns of the
1c560 20 69 6e 70 75 74 20 64 61 74 61 73 65 74 20 61   input dataset a
1c570 72 65 20 73 75 62 73 74 69 74 75 74 65 64 20 66  re substituted f
1c580 6f 72 20 74 68 61 74 20 6f 6e 65 0a 65 78 70 72  or that one.expr
1c590 65 73 73 69 6f 6e 2e 20 20 5e 28 49 66 20 74 68  ession.  ^(If th
1c5a0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
1c5b0 74 68 65 20 61 6c 69 61 73 20 6f 66 20 61 20 74  the alias of a t
1c5c0 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79  able or subquery
1c5d0 20 69 6e 20 74 68 65 0a 46 52 4f 4d 20 63 6c 61   in the.FROM cla
1c5e0 75 73 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  use followed by 
1c5f0 7d 20 0a 68 64 5f 70 75 74 73 20 22 5b 4f 70 65  } .hd_puts "[Ope
1c600 72 61 74 6f 72 20 2e 2a 5d 22 20 0a 68 64 5f 70  rator .*]" .hd_p
1c610 75 74 73 20 7b 20 74 68 65 6e 20 61 6c 6c 20 63  uts { then all c
1c620 6f 6c 75 6d 6e 73 20 66 72 6f 6d 20 74 68 65 20  olumns from the 
1c630 6e 61 6d 65 64 20 74 61 62 6c 65 20 6f 72 20 73  named table or s
1c640 75 62 71 75 65 72 79 20 61 72 65 20 73 75 62 73  ubquery are subs
1c650 74 69 74 75 74 65 64 20 66 6f 72 0a 74 68 65 20  tituted for.the 
1c660 73 69 6e 67 6c 65 20 65 78 70 72 65 73 73 69 6f  single expressio
1c670 6e 2e 29 5e 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69  n.)^..<ul>.  <li
1c680 3e 3c 70 3e 5e 49 66 20 74 68 65 20 53 45 4c 45  ><p>^If the SELE
1c690 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  CT statement is 
1c6a0 3c 62 3e 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61  <b>a non-aggrega
1c6b0 74 65 20 71 75 65 72 79 3c 2f 62 3e 2c 20 74 68  te query</b>, th
1c6c0 65 6e 20 0a 20 20 20 20 65 61 63 68 20 65 78 70  en .    each exp
1c6d0 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72  ression in the r
1c6e0 65 73 75 6c 74 2d 73 65 74 20 69 73 20 65 76 61  esult-set is eva
1c6f0 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  luated for each 
1c700 72 6f 77 20 69 6e 20 74 68 65 20 64 61 74 61 73  row in the datas
1c710 65 74 0a 20 20 20 20 66 69 6c 74 65 72 65 64 20  et.    filtered 
1c720 62 79 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  by the WHERE cla
1c730 75 73 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  use...  <li><p>^
1c740 49 66 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  If the SELECT st
1c750 61 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61 6e  atement is <b>an
1c760 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79   aggregate query
1c770 20 77 69 74 68 6f 75 74 20 61 20 47 52 4f 55 50   without a GROUP
1c780 0a 20 20 20 20 42 59 3c 2f 62 3e 20 63 6c 61 75  .    BY</b> clau
1c790 73 65 2c 20 74 68 65 6e 20 65 61 63 68 20 61 67  se, then each ag
1c7a0 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
1c7b0 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  on in the result
1c7c0 2d 73 65 74 20 69 73 20 0a 20 20 20 20 65 76 61  -set is .    eva
1c7d0 6c 75 61 74 65 64 20 6f 6e 63 65 20 61 63 72 6f  luated once acro
1c7e0 73 73 20 74 68 65 20 65 6e 74 69 72 65 20 64 61  ss the entire da
1c7f0 74 61 73 65 74 2e 20 5e 45 61 63 68 20 6e 6f 6e  taset. ^Each non
1c800 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65  -aggregate expre
1c810 73 73 69 6f 6e 0a 20 20 20 20 69 6e 20 74 68 65  ssion.    in the
1c820 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73 20 65   result-set is e
1c830 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f  valuated once fo
1c840 72 20 61 6e 20 61 72 62 69 74 72 61 72 69 6c 79  r an arbitrarily
1c850 20 73 65 6c 65 63 74 65 64 20 72 6f 77 20 6f 66   selected row of
1c860 0a 20 20 20 20 74 68 65 20 64 61 74 61 73 65 74  .    the dataset
1c870 2e 20 5e 54 68 65 20 73 61 6d 65 20 61 72 62 69  . ^The same arbi
1c880 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74 65 64  trarily selected
1c890 20 72 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72   row is used for
1c8a0 20 65 61 63 68 0a 20 20 20 20 6e 6f 6e 2d 61 67   each.    non-ag
1c8b0 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
1c8c0 6f 6e 2e 20 4f 72 2c 20 69 66 20 74 68 65 20 64  on. Or, if the d
1c8d0 61 74 61 73 65 74 20 69 73 20 65 6d 70 74 79 2c  ataset is empty,
1c8e0 20 74 68 65 6e 20 65 61 63 68 0a 20 20 20 20 6e   then each.    n
1c8f0 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70  on-aggregate exp
1c900 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75  ression is evalu
1c910 61 74 65 64 20 61 67 61 69 6e 73 74 20 61 20 72  ated against a r
1c920 6f 77 20 63 6f 6e 73 69 73 74 69 6e 67 20 65 6e  ow consisting en
1c930 74 69 72 65 6c 79 0a 20 20 20 20 6f 66 20 4e 55  tirely.    of NU
1c940 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 20 20 20 3c  LL values...   <
1c950 70 3e 5e 54 68 65 20 73 69 6e 67 6c 65 20 72 6f  p>^The single ro
1c960 77 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20  w of result-set 
1c970 64 61 74 61 20 63 72 65 61 74 65 64 20 62 79 20  data created by 
1c980 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61  evaluating the a
1c990 67 67 72 65 67 61 74 65 0a 20 20 20 20 61 6e 64  ggregate.    and
1c9a0 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65   non-aggregate e
1c9b0 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68  xpressions in th
1c9c0 65 20 72 65 73 75 6c 74 2d 73 65 74 20 66 6f 72  e result-set for
1c9d0 6d 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ms the result of
1c9e0 20 61 6e 0a 20 20 20 20 61 67 67 72 65 67 61 74   an.    aggregat
1c9f0 65 20 71 75 65 72 79 20 77 69 74 68 6f 75 74 20  e query without 
1ca00 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  a GROUP BY claus
1ca10 65 2e 20 5e 41 6e 20 61 67 67 72 65 67 61 74 65  e. ^An aggregate
1ca20 20 71 75 65 72 79 20 77 69 74 68 6f 75 74 20 61   query without a
1ca30 0a 20 20 20 20 47 52 4f 55 50 20 42 59 20 63 6c  .    GROUP BY cl
1ca40 61 75 73 65 20 61 6c 77 61 79 73 20 72 65 74 75  ause always retu
1ca50 72 6e 73 20 65 78 61 63 74 6c 79 20 6f 6e 65 20  rns exactly one 
1ca60 72 6f 77 20 6f 66 20 64 61 74 61 2e 0a 0a 20 20  row of data...  
1ca70 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 53  <li><p>^If the S
1ca80 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
1ca90 69 73 20 3c 62 3e 61 6e 20 61 67 67 72 65 67 61  is <b>an aggrega
1caa0 74 65 20 71 75 65 72 79 20 77 69 74 68 20 61 20  te query with a 
1cab0 47 52 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e  GROUP.    BY</b>
1cac0 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 65 61   clause, then ea
1cad0 63 68 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  ch of the expres
1cae0 73 69 6f 6e 73 20 73 70 65 63 69 66 69 65 64 20  sions specified 
1caf0 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 0a 20  as part of the. 
1cb00 20 20 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75     GROUP BY clau
1cb10 73 65 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  se is evaluated 
1cb20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20  for each row of 
1cb30 74 68 65 20 66 69 6c 74 65 72 65 64 20 69 6e 70  the filtered inp
1cb40 75 74 20 64 61 74 61 73 65 74 2e 0a 20 20 20 20  ut dataset..    
1cb50 5e 45 61 63 68 20 72 6f 77 20 69 73 20 67 72 6f  ^Each row is gro
1cb60 75 70 65 64 20 77 69 74 68 20 61 6c 6c 20 6f 74  uped with all ot
1cb70 68 65 72 20 72 6f 77 73 20 66 6f 72 20 77 68 69  her rows for whi
1cb80 63 68 20 61 6c 6c 20 47 52 4f 55 50 20 42 59 20  ch all GROUP BY 
1cb90 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f 6e 73  .    expressions
1cba0 20 65 76 61 6c 75 61 74 65 20 74 6f 20 74 68 65   evaluate to the
1cbb0 20 73 61 6d 65 20 76 61 6c 75 65 73 2e 20 5e 46   same values. ^F
1cbc0 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
1cbd0 6f 66 20 67 72 6f 75 70 69 6e 67 20 0a 20 20 20  of grouping .   
1cbe0 20 72 6f 77 73 2c 20 4e 55 4c 4c 20 76 61 6c 75   rows, NULL valu
1cbf0 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
1cc00 64 20 65 71 75 61 6c 2e 20 5e 54 68 65 20 75 73  d equal. ^The us
1cc10 75 61 6c 20 72 75 6c 65 73 20 66 6f 72 20 73 65  ual rules for se
1cc20 6c 65 63 74 69 6e 67 0a 20 20 20 20 61 20 63 6f  lecting.    a co
1cc30 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
1cc40 20 77 69 74 68 20 77 68 69 63 68 20 74 6f 20 63   with which to c
1cc50 6f 6d 70 61 72 65 20 74 65 78 74 20 76 61 6c 75  ompare text valu
1cc60 65 73 20 61 70 70 6c 79 20 77 68 65 6e 20 65 76  es apply when ev
1cc70 61 6c 75 61 74 69 6e 67 0a 20 20 20 20 65 78 70  aluating.    exp
1cc80 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 20 47 52  ressions in a GR
1cc90 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2e 20 20  OUP BY clause.  
1cca0 5e 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73  ^The expressions
1ccb0 20 69 6e 20 74 68 65 20 47 52 4f 55 50 20 42 59   in the GROUP BY
1ccc0 20 63 6c 61 75 73 65 0a 20 20 20 20 64 6f 20 3c   clause.    do <
1ccd0 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 68 61 76 65  em>not</em> have
1cce0 20 74 6f 20 62 65 20 65 78 70 72 65 73 73 69 6f   to be expressio
1ccf0 6e 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69  ns that appear i
1cd00 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 20 5e 54  n the result. ^T
1cd10 68 65 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f  he.    expressio
1cd20 6e 73 20 69 6e 20 61 20 47 52 4f 55 50 20 42 59  ns in a GROUP BY
1cd30 20 63 6c 61 75 73 65 20 6d 61 79 20 6e 6f 74 20   clause may not 
1cd40 62 65 20 61 67 67 72 65 67 61 74 65 20 65 78 70  be aggregate exp
1cd50 72 65 73 73 69 6f 6e 73 2e 0a 0a 20 20 20 20 3c  ressions...    <
1cd60 70 3e 5e 49 66 20 61 20 48 41 56 49 4e 47 20 63  p>^If a HAVING c
1cd70 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69  lause is specifi
1cd80 65 64 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61  ed, it is evalua
1cd90 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61 63  ted once for eac
1cda0 68 20 67 72 6f 75 70 20 0a 20 20 20 20 6f 66 20  h group .    of 
1cdb0 72 6f 77 73 20 61 6e 64 20 63 61 73 74 20 74 6f  rows and cast to
1cdc0 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75   an integer valu
1cdd0 65 2e 20 5e 49 66 20 74 68 65 20 48 41 56 49 4e  e. ^If the HAVIN
1cde0 47 20 63 6c 61 75 73 65 20 69 73 20 61 6e 20 61  G clause is an a
1cdf0 67 67 72 65 67 61 74 65 0a 20 20 20 20 65 78 70  ggregate.    exp
1ce00 72 65 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 65  ression, it is e
1ce10 76 61 6c 75 61 74 65 64 20 61 63 72 6f 73 73 20  valuated across 
1ce20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68 65 20  all rows in the 
1ce30 67 72 6f 75 70 2e 20 5e 49 66 20 61 20 48 41 56  group. ^If a HAV
1ce40 49 4e 47 20 0a 20 20 20 20 63 6c 61 75 73 65 20  ING .    clause 
1ce50 69 73 20 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61  is a non-aggrega
1ce60 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69  te expression, i
1ce70 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 77  t is evaluated w
1ce80 69 74 68 20 72 65 73 70 65 63 74 20 74 6f 20 61  ith respect to a
1ce90 6e 0a 20 20 20 20 61 72 62 69 74 72 61 72 69 6c  n.    arbitraril
1cea0 79 20 73 65 6c 65 63 74 65 64 20 72 6f 77 20 66  y selected row f
1ceb0 72 6f 6d 20 74 68 65 20 67 72 6f 75 70 2e 20 5e  rom the group. ^
1cec0 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  If the result of
1ced0 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 0a   evaluating the.
1cee0 20 20 20 20 48 41 56 49 4e 47 20 63 6c 61 75 73      HAVING claus
1cef0 65 20 69 73 20 4e 55 4c 4c 20 6f 72 20 7a 65 72  e is NULL or zer
1cf00 6f 20 28 69 6e 74 65 67 65 72 20 76 61 6c 75 65  o (integer value
1cf10 20 30 29 2c 20 74 68 65 20 67 72 6f 75 70 20 69   0), the group i
1cf20 73 20 64 69 73 63 61 72 64 65 64 2e 0a 20 20 20  s discarded..   
1cf30 20 5e 54 68 65 20 48 41 56 49 4e 47 20 65 78 70   ^The HAVING exp
1cf40 72 65 73 73 69 6f 6e 20 6d 61 79 20 72 65 66 65  ression may refe
1cf50 72 20 74 6f 20 76 61 6c 75 65 73 2c 20 65 76 65  r to values, eve
1cf60 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  n aggregate func
1cf70 74 69 6f 6e 73 2c 20 74 68 61 74 0a 20 20 20 20  tions, that.    
1cf80 61 72 65 20 6e 6f 74 20 69 6e 20 74 68 65 20 72  are not in the r
1cf90 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 20 20 20 20  esult.</p>..    
1cfa0 3c 70 3e 5e 45 61 63 68 20 65 78 70 72 65 73 73  <p>^Each express
1cfb0 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ion in the resul
1cfc0 74 2d 73 65 74 20 69 73 20 74 68 65 6e 20 65 76  t-set is then ev
1cfd0 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72  aluated once for
1cfe0 20 65 61 63 68 0a 20 20 20 20 67 72 6f 75 70 20   each.    group 
1cff0 6f 66 20 72 6f 77 73 2e 20 5e 49 66 20 74 68 65  of rows. ^If the
1d000 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
1d010 6e 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72  n aggregate expr
1d020 65 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 0a 20  ession, it is . 
1d030 20 20 20 65 76 61 6c 75 61 74 65 64 20 61 63 72     evaluated acr
1d040 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20  oss all rows in 
1d050 74 68 65 20 67 72 6f 75 70 2e 20 5e 4f 74 68 65  the group. ^Othe
1d060 72 77 69 73 65 2c 20 69 74 20 69 73 20 65 76 61  rwise, it is eva
1d070 6c 75 61 74 65 64 20 61 67 61 69 6e 73 74 0a 20  luated against. 
1d080 20 20 20 61 20 73 69 6e 67 6c 65 20 61 72 62 69     a single arbi
1d090 74 72 61 72 69 6c 79 20 63 68 6f 73 65 6e 20 72  trarily chosen r
1d0a0 6f 77 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 74  ow from within t
1d0b0 68 65 20 67 72 6f 75 70 2e 20 5e 49 66 20 74 68  he group. ^If th
1d0c0 65 72 65 20 69 73 20 6d 6f 72 65 0a 20 20 20 20  ere is more.    
1d0d0 74 68 61 6e 20 6f 6e 65 20 6e 6f 6e 2d 61 67 67  than one non-agg
1d0e0 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
1d0f0 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d  n in the result-
1d100 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 20 73 75  set, then all su
1d110 63 68 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f  ch.    expressio
1d120 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  ns are evaluated
1d130 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20 72 6f   for the same ro
1d140 77 2e 0a 0a 20 20 20 20 3c 70 3e 5e 45 61 63 68  w...    <p>^Each
1d150 20 67 72 6f 75 70 20 6f 66 20 69 6e 70 75 74 20   group of input 
1d160 64 61 74 61 73 65 74 20 72 6f 77 73 20 63 6f 6e  dataset rows con
1d170 74 72 69 62 75 74 65 73 20 61 20 73 69 6e 67 6c  tributes a singl
1d180 65 20 72 6f 77 20 74 6f 20 74 68 65 20 0a 20 20  e row to the .  
1d190 20 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20    set of result 
1d1a0 72 6f 77 73 2e 20 5e 53 75 62 6a 65 63 74 20 74  rows. ^Subject t
1d1b0 6f 20 66 69 6c 74 65 72 69 6e 67 20 61 73 73 6f  o filtering asso
1d1c0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
1d1d0 44 49 53 54 49 4e 43 54 0a 20 20 20 20 6b 65 79  DISTINCT.    key
1d1e0 77 6f 72 64 2c 20 74 68 65 20 6e 75 6d 62 65 72  word, the number
1d1f0 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65   of rows returne
1d200 64 20 62 79 20 61 6e 20 61 67 67 72 65 67 61 74  d by an aggregat
1d210 65 20 71 75 65 72 79 20 77 69 74 68 20 61 20 47  e query with a G
1d220 52 4f 55 50 0a 20 20 20 20 42 59 20 63 6c 61 75  ROUP.    BY clau
1d230 73 65 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  se is the same a
1d240 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1d250 67 72 6f 75 70 73 20 6f 66 20 72 6f 77 73 20 70  groups of rows p
1d260 72 6f 64 75 63 65 64 20 62 79 20 61 70 70 6c 79  roduced by apply
1d270 69 6e 67 0a 20 20 20 20 74 68 65 20 47 52 4f 55  ing.    the GROU
1d280 50 20 42 59 20 61 6e 64 20 48 41 56 49 4e 47 20  P BY and HAVING 
1d290 63 6c 61 75 73 65 73 20 74 6f 20 74 68 65 20 66  clauses to the f
1d2a0 69 6c 74 65 72 65 64 20 69 6e 70 75 74 20 64 61  iltered input da
1d2b0 74 61 73 65 74 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  taset..</ul>..<p
1d2c0 3e 3c 62 3e 34 2e 20 52 65 6d 6f 76 61 6c 20 6f  ><b>4. Removal o
1d2d0 66 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73  f duplicate rows
1d2e0 20 28 44 49 53 54 49 4e 43 54 20 70 72 6f 63 65   (DISTINCT proce
1d2f0 73 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c  ssing).</b>.<tcl
1d300 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 64 69 73  >hd_fragment dis
1d310 74 69 6e 63 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c  tinct</tcl>.<tcl
1d320 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 44 49  >hd_keywords {DI
1d330 53 54 49 4e 43 54 7d 3c 2f 74 63 6c 3e 0a 0a 3c  STINCT}</tcl>..<
1d340 70 3e 5e 28 4f 6e 65 20 6f 66 20 74 68 65 20 41  p>^(One of the A
1d350 4c 4c 20 6f 72 20 44 49 53 54 49 4e 43 54 20 6b  LL or DISTINCT k
1d360 65 79 77 6f 72 64 73 20 6d 61 79 20 66 6f 6c 6c  eywords may foll
1d370 6f 77 20 74 68 65 20 53 45 4c 45 43 54 20 6b 65  ow the SELECT ke
1d380 79 77 6f 72 64 20 69 6e 20 61 20 0a 73 69 6d 70  yword in a .simp
1d390 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
1d3a0 65 6e 74 2e 20 49 66 20 6e 65 69 74 68 65 72 20  ent. If neither 
1d3b0 6f 66 20 74 68 65 73 65 20 61 72 65 20 70 72 65  of these are pre
1d3c0 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 62  sent, then the b
1d3d0 65 68 61 76 69 6f 75 72 0a 69 73 20 61 73 20 69  ehaviour.is as i
1d3e0 66 20 41 4c 4c 20 77 65 72 65 20 73 70 65 63 69  f ALL were speci
1d3f0 66 69 65 64 2e 29 5e 20 5e 49 66 20 74 68 65 20  fied.)^ ^If the 
1d400 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73  simple SELECT is
1d410 20 61 20 53 45 4c 45 43 54 20 41 4c 4c 2c 20 74   a SELECT ALL, t
1d420 68 65 6e 20 74 68 65 0a 65 6e 74 69 72 65 20 73  hen the.entire s
1d430 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
1d440 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 62  s are returned b
1d450 79 20 74 68 65 20 53 45 4c 45 43 54 2e 20 5e 49  y the SELECT. ^I
1d460 66 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c  f the simple SEL
1d470 45 43 54 0a 69 73 20 61 20 53 45 4c 45 43 54 20  ECT.is a SELECT 
1d480 44 49 53 54 49 4e 43 54 2c 20 74 68 65 6e 20 64  DISTINCT, then d
1d490 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 61 72  uplicate rows ar
1d4a0 65 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74  e removed from t
1d4b0 68 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74  he set of result
1d4c0 0a 72 6f 77 73 20 62 65 66 6f 72 65 20 69 74 20  .rows before it 
1d4d0 69 73 20 72 65 74 75 72 6e 65 64 2e 20 5e 46 6f  is returned. ^Fo
1d4e0 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
1d4f0 66 20 64 65 74 65 63 74 69 6e 67 20 64 75 70 6c  f detecting dupl
1d500 69 63 61 74 65 20 72 6f 77 73 2c 0a 74 77 6f 20  icate rows,.two 
1d510 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20  NULL values are 
1d520 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65  considered to be
1d530 20 65 71 75 61 6c 2e 20 5e 54 68 65 20 6e 6f 72   equal. ^The nor
1d540 6d 61 6c 20 72 75 6c 65 73 20 66 6f 72 20 73 65  mal rules for se
1d550 6c 65 63 74 69 6e 67 0a 61 20 63 6f 6c 6c 61 74  lecting.a collat
1d560 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 74 6f 20  ion sequence to 
1d570 63 6f 6d 70 61 72 65 20 74 65 78 74 20 76 61 6c  compare text val
1d580 75 65 73 20 77 69 74 68 20 61 70 70 6c 79 2e 0a  ues with apply..
1d590 0a 3c 68 33 3e 43 6f 6d 70 6f 75 6e 64 20 53 65  .<h3>Compound Se
1d5a0 6c 65 63 74 20 53 74 61 74 65 6d 65 6e 74 73 3c  lect Statements<
1d5b0 2f 68 33 3e 0a 0a 3c 70 3e 5e 41 20 63 6f 6d 70  /h3>..<p>^A comp
1d5c0 6f 75 6e 64 20 53 45 4c 45 43 54 20 69 73 20 66  ound SELECT is f
1d5d0 6f 72 6d 65 64 20 66 72 6f 6d 20 74 77 6f 20 6f  ormed from two o
1d5e0 72 20 6d 6f 72 65 20 73 69 6d 70 6c 65 20 53 45  r more simple SE
1d5f0 4c 45 43 54 73 20 63 6f 6e 6e 65 63 74 65 64 0a  LECTs connected.
1d600 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 6f 70  by one of the op
1d610 65 72 61 74 6f 72 73 20 55 4e 49 4f 4e 2c 20 55  erators UNION, U
1d620 4e 49 4f 4e 20 41 4c 4c 2c 20 49 4e 54 45 52 53  NION ALL, INTERS
1d630 45 43 54 2c 20 6f 72 20 45 58 43 45 50 54 2e 20  ECT, or EXCEPT. 
1d640 20 5e 49 6e 0a 61 20 63 6f 6d 70 6f 75 6e 64 20   ^In.a compound 
1d650 53 45 4c 45 43 54 2c 20 61 6c 6c 20 74 68 65 20  SELECT, all the 
1d660 63 6f 6e 73 74 69 74 75 65 6e 74 20 53 45 4c 45  constituent SELE
1d670 43 54 73 20 6d 75 73 74 20 73 70 65 63 69 66 79  CTs must specify
1d680 20 74 68 65 0a 73 61 6d 65 20 6e 75 6d 62 65 72   the.same number
1d690 20 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d   of result colum
1d6a0 6e 73 2e 20 20 5e 54 68 65 72 65 20 6d 61 79 20  ns.  ^There may 
1d6b0 62 65 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65  be only a single
1d6c0 20 4f 52 44 45 52 20 42 59 0a 63 6c 61 75 73 65   ORDER BY.clause
1d6d0 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
1d6e0 68 65 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  he compound SELE
1d6f0 43 54 2e 20 20 5e 54 68 65 20 55 4e 49 4f 4e 20  CT.  ^The UNION 
1d700 61 6e 64 20 55 4e 49 4f 4e 20 41 4c 4c 0a 6f 70  and UNION ALL.op
1d710 65 72 61 74 6f 72 73 20 63 6f 6d 62 69 6e 65 20  erators combine 
1d720 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
1d730 68 65 20 53 45 4c 45 43 54 73 20 74 6f 20 74 68  he SELECTs to th
1d740 65 20 72 69 67 68 74 20 61 6e 64 20 6c 65 66 74  e right and left
1d750 20 69 6e 74 6f 0a 61 20 73 69 6e 67 6c 65 20 62   into.a single b
1d760 69 67 20 74 61 62 6c 65 2e 20 20 5e 54 68 65 20  ig table.  ^The 
1d770 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 74 68  difference is th
1d780 61 74 20 69 6e 20 55 4e 49 4f 4e 20 61 6c 6c 20  at in UNION all 
1d790 72 65 73 75 6c 74 20 72 6f 77 73 0a 61 72 65 20  result rows.are 
1d7a0 64 69 73 74 69 6e 63 74 20 77 68 65 72 65 20 69  distinct where i
1d7b0 6e 20 55 4e 49 4f 4e 20 41 4c 4c 20 74 68 65 72  n UNION ALL ther
1d7c0 65 20 6d 61 79 20 62 65 20 64 75 70 6c 69 63 61  e may be duplica
1d7d0 74 65 73 2e 0a 5e 54 68 65 20 49 4e 54 45 52 53  tes..^The INTERS
1d7e0 45 43 54 20 6f 70 65 72 61 74 6f 72 20 74 61 6b  ECT operator tak
1d7f0 65 73 20 74 68 65 20 69 6e 74 65 72 73 65 63 74  es the intersect
1d800 69 6f 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ion of the resul
1d810 74 73 20 6f 66 20 74 68 65 0a 6c 65 66 74 20 61  ts of the.left a
1d820 6e 64 20 72 69 67 68 74 20 53 45 4c 45 43 54 73  nd right SELECTs
1d830 2e 20 20 5e 45 58 43 45 50 54 20 74 61 6b 65 73  .  ^EXCEPT takes
1d840 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 6c   the result of l
1d850 65 66 74 20 53 45 4c 45 43 54 20 61 66 74 65 72  eft SELECT after
1d860 0a 72 65 6d 6f 76 69 6e 67 20 74 68 65 20 72 65  .removing the re
1d870 73 75 6c 74 73 20 6f 66 20 74 68 65 20 72 69 67  sults of the rig
1d880 68 74 20 53 45 4c 45 43 54 2e 20 20 5e 57 68 65  ht SELECT.  ^Whe
1d890 6e 20 74 68 72 65 65 20 6f 72 20 6d 6f 72 65 20  n three or more 
1d8a0 53 45 4c 45 43 54 73 0a 61 72 65 20 63 6f 6e 6e  SELECTs.are conn
1d8b0 65 63 74 65 64 20 69 6e 74 6f 20 61 20 63 6f 6d  ected into a com
1d8c0 70 6f 75 6e 64 2c 20 74 68 65 79 20 67 72 6f 75  pound, they grou
1d8d0 70 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  p from left to r
1d8e0 69 67 68 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 4f  ight.</p>..<h3>O
1d8f0 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49  RDER BY and LIMI
1d900 54 2f 4f 46 46 53 45 54 20 43 6c 61 75 73 65 73  T/OFFSET Clauses
1d910 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4f  </h3>..<p>^The O
1d920 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 63  RDER BY clause c
1d930 61 75 73 65 73 20 74 68 65 20 6f 75 74 70 75 74  auses the output
1d940 20 72 6f 77 73 20 74 6f 20 62 65 20 73 6f 72 74   rows to be sort
1d950 65 64 2e 20 20 0a 5e 54 68 65 20 61 72 67 75 6d  ed.  .^The argum
1d960 65 6e 74 20 74 6f 20 4f 52 44 45 52 20 42 59 20  ent to ORDER BY 
1d970 69 73 20 61 20 6c 69 73 74 20 6f 66 20 65 78 70  is a list of exp
1d980 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61 72  ressions that ar
1d990 65 20 75 73 65 64 20 61 73 20 74 68 65 0a 6b 65  e used as the.ke
1d9a0 79 20 66 6f 72 20 74 68 65 20 73 6f 72 74 2e 20  y for the sort. 
1d9b0 20 5e 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e   ^The expression
1d9c0 73 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 6f  s do not have to
1d9d0 20 62 65 20 70 61 72 74 20 6f 66 20 74 68 65 0a   be part of the.
1d9e0 72 65 73 75 6c 74 20 66 6f 72 20 61 20 73 69 6d  result for a sim
1d9f0 70 6c 65 20 53 45 4c 45 43 54 2c 20 62 75 74 20  ple SELECT, but 
1da00 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45  in a compound SE
1da10 4c 45 43 54 20 65 61 63 68 20 73 6f 72 74 0a 65  LECT each sort.e
1da20 78 70 72 65 73 73 69 6f 6e 20 6d 75 73 74 20 65  xpression must e
1da30 78 61 63 74 6c 79 20 6d 61 74 63 68 20 6f 6e 65  xactly match one
1da40 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63   of the result c
1da50 6f 6c 75 6d 6e 73 2e 20 20 5e 45 61 63 68 0a 73  olumns.  ^Each.s
1da60 6f 72 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  ort expression m
1da70 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79  ay be optionally
1da80 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 43   followed by a C
1da90 4f 4c 4c 41 54 45 20 6b 65 79 77 6f 72 64 20 61  OLLATE keyword a
1daa0 6e 64 0a 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  nd.the name of a
1dab0 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
1dac0 69 6f 6e 20 75 73 65 64 20 66 6f 72 20 6f 72 64  ion used for ord
1dad0 65 72 69 6e 67 20 74 65 78 74 20 61 6e 64 2f 6f  ering text and/o
1dae0 72 0a 6b 65 79 77 6f 72 64 73 20 41 53 43 20 6f  r.keywords ASC o
1daf0 72 20 44 45 53 43 20 74 6f 20 73 70 65 63 69 66  r DESC to specif
1db00 79 20 74 68 65 20 73 6f 72 74 20 6f 72 64 65 72  y the sort order
1db10 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 74  .</p>..<p>Each t
1db20 65 72 6d 20 6f 66 20 61 6e 20 4f 52 44 45 52 20  erm of an ORDER 
1db30 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
1db40 20 70 72 6f 63 65 73 73 65 64 20 61 73 20 66 6f   processed as fo
1db50 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e  llows:</p>..<ol>
1db60 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20  .<li><p>^If the 
1db70 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73  ORDER BY express
1db80 69 6f 6e 20 69 73 20 61 20 63 6f 6e 73 74 61 6e  ion is a constan
1db90 74 20 69 6e 74 65 67 65 72 20 4b 20 74 68 65 6e  t integer K then
1dba0 20 74 68 65 0a 6f 75 74 70 75 74 20 69 73 20 6f   the.output is o
1dbb0 72 64 65 72 65 64 20 62 79 20 74 68 65 20 4b 2d  rdered by the K-
1dbc0 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  th column of the
1dbd0 20 72 65 73 75 6c 74 20 73 65 74 2e 3c 2f 70 3e   result set.</p>
1dbe0 3c 2f 6c 69 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66  </li>.<li><p>^If
1dbf0 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78   the ORDER BY ex
1dc00 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 69  pression is an i
1dc10 64 65 6e 74 69 66 69 65 72 20 61 6e 64 20 6f 6e  dentifier and on
1dc20 65 20 6f 66 20 74 68 65 0a 6f 75 74 70 75 74 20  e of the.output 
1dc30 63 6f 6c 75 6d 6e 73 20 68 61 73 20 61 6e 20 61  columns has an a
1dc40 6c 69 61 73 20 62 79 20 74 68 65 20 73 61 6d 65  lias by the same
1dc50 20 6e 61 6d 65 2c 20 74 68 65 6e 20 74 68 65 20   name, then the 
1dc60 6f 75 74 70 75 74 20 69 73 0a 6f 72 64 65 72 65  output is.ordere
1dc70 64 20 62 79 20 74 68 65 20 69 64 65 6e 74 69 66  d by the identif
1dc80 69 65 64 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 3c  ied column.</p><
1dc90 2f 6c 69 3e 0a 3c 6c 69 3e 3c 70 3e 5e 4f 74 68  /li>.<li><p>^Oth
1dca0 65 72 77 69 73 65 2c 20 74 68 65 20 4f 52 44 45  erwise, the ORDE
1dcb0 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
1dcc0 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64  is evaluated and
1dcd0 20 74 68 65 20 6f 75 74 70 75 74 20 0a 69 73 20   the output .is 
1dce0 6f 72 64 65 72 65 64 20 62 79 20 74 68 65 20 76  ordered by the v
1dcf0 61 6c 75 65 20 6f 66 20 74 68 61 74 20 65 78 70  alue of that exp
1dd00 72 65 73 73 69 6f 6e 2e 3c 2f 70 3e 3c 2f 6c 69  ression.</p></li
1dd10 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 49 6e 20  >.</ol>..<p>^In 
1dd20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
1dd30 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  T statement, the
1dd40 20 74 68 69 72 64 20 4f 52 44 45 52 20 42 59 20   third ORDER BY 
1dd50 6d 61 74 63 68 69 6e 67 20 72 75 6c 65 0a 72 65  matching rule.re
1dd60 71 75 69 72 65 73 20 74 68 61 74 20 74 68 65 20  quires that the 
1dd70 65 78 70 72 65 73 73 69 6f 6e 20 62 65 20 69 64  expression be id
1dd80 65 6e 74 69 63 61 6c 20 74 6f 20 6f 6e 65 20 6f  entical to one o
1dd90 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  f the columns in
1dda0 0a 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e  .the result set.
1ddb0 20 20 5e 28 54 68 65 20 74 68 72 65 65 20 72 75    ^(The three ru
1ddc0 6c 65 73 20 61 72 65 20 66 69 72 73 74 20 61 70  les are first ap
1ddd0 70 6c 69 65 64 20 74 6f 20 74 68 65 20 6c 65 66  plied to the lef
1dde0 74 2d 6d 6f 73 74 0a 53 45 4c 45 43 54 20 69 6e  t-most.SELECT in
1ddf0 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 20 20   the compound.  
1de00 49 66 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f  If a match is fo
1de10 75 6e 64 2c 20 74 68 65 20 73 65 61 72 63 68 20  und, the search 
1de20 73 74 6f 70 73 2e 20 20 4f 74 68 65 72 77 69 73  stops.  Otherwis
1de30 65 2c 0a 74 68 65 20 6e 65 78 74 20 53 45 4c 45  e,.the next SELE
1de40 43 54 20 74 6f 20 74 68 65 20 72 69 67 68 74 20  CT to the right 
1de50 69 73 20 74 72 69 65 64 2e 20 20 54 68 69 73 20  is tried.  This 
1de60 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20  continues until 
1de70 61 20 6d 61 74 63 68 0a 69 73 20 66 6f 75 6e 64  a match.is found
1de80 2e 29 5e 20 20 5e 45 61 63 68 20 74 65 72 6d 20  .)^  ^Each term 
1de90 6f 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  of the ORDER BY 
1dea0 63 6c 61 75 73 65 20 69 73 20 70 72 6f 63 65 73  clause is proces
1deb0 73 65 64 20 73 65 70 61 72 61 74 65 6c 79 20 0a  sed separately .
1dec0 61 6e 64 20 6d 61 79 20 63 6f 6d 65 20 66 72 6f  and may come fro
1ded0 6d 20 64 69 66 66 65 72 65 6e 74 20 53 45 4c 45  m different SELE
1dee0 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  CT statements in
1def0 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 3c 2f   the compound.</
1df00 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49 4d 49  p>..<p>^The LIMI
1df10 54 20 63 6c 61 75 73 65 20 70 6c 61 63 65 73 20  T clause places 
1df20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f  an upper bound o
1df30 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
1df40 72 6f 77 73 0a 72 65 74 75 72 6e 65 64 20 69 6e  rows.returned in
1df50 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20 5e 41   the result.  ^A
1df60 20 6e 65 67 61 74 69 76 65 20 4c 49 4d 49 54 20   negative LIMIT 
1df70 69 6e 64 69 63 61 74 65 73 20 6e 6f 20 75 70 70  indicates no upp
1df80 65 72 20 62 6f 75 6e 64 2e 0a 5e 54 68 65 20 6f  er bound..^The o
1df90 70 74 69 6f 6e 61 6c 20 4f 46 46 53 45 54 20 66  ptional OFFSET f
1dfa0 6f 6c 6c 6f 77 69 6e 67 20 4c 49 4d 49 54 20 73  ollowing LIMIT s
1dfb0 70 65 63 69 66 69 65 73 20 68 6f 77 20 6d 61 6e  pecifies how man
1dfc0 79 0a 72 6f 77 73 20 74 6f 20 73 6b 69 70 20 61  y.rows to skip a
1dfd0 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
1dfe0 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  of the result se
1dff0 74 2e 0a 5e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e  t..^In a compoun
1e000 64 20 71 75 65 72 79 2c 20 74 68 65 20 4c 49 4d  d query, the LIM
1e010 49 54 20 63 6c 61 75 73 65 20 6d 61 79 20 6f 6e  IT clause may on
1e020 6c 79 20 61 70 70 65 61 72 20 6f 6e 20 74 68 65  ly appear on the
1e030 0a 66 69 6e 61 6c 20 53 45 4c 45 43 54 20 73 74  .final SELECT st
1e040 61 74 65 6d 65 6e 74 2e 0a 5e 54 68 65 20 6c 69  atement..^The li
1e050 6d 69 74 20 69 73 20 61 70 70 6c 69 65 64 20 74  mit is applied t
1e060 6f 20 74 68 65 20 65 6e 74 69 72 65 20 71 75 65  o the entire que
1e070 72 79 20 6e 6f 74 0a 74 6f 20 74 68 65 20 69 6e  ry not.to the in
1e080 64 69 76 69 64 75 61 6c 20 53 45 4c 45 43 54 20  dividual SELECT 
1e090 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 77 68 69  statement to whi
1e0a0 63 68 20 69 74 20 69 73 20 61 74 74 61 63 68 65  ch it is attache
1e0b0 64 2e 0a 5e 4e 6f 74 65 20 74 68 61 74 20 69 66  d..^Note that if
1e0c0 20 74 68 65 20 4f 46 46 53 45 54 20 6b 65 79 77   the OFFSET keyw
1e0d0 6f 72 64 20 69 73 20 75 73 65 64 20 69 6e 20 74  ord is used in t
1e0e0 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c  he LIMIT clause,
1e0f0 20 74 68 65 6e 20 74 68 65 0a 6c 69 6d 69 74 20   then the.limit 
1e100 69 73 20 74 68 65 20 66 69 72 73 74 20 6e 75 6d  is the first num
1e110 62 65 72 20 61 6e 64 20 74 68 65 20 6f 66 66 73  ber and the offs
1e120 65 74 20 69 73 20 74 68 65 20 73 65 63 6f 6e 64  et is the second
1e130 20 6e 75 6d 62 65 72 2e 20 20 5e 49 66 20 61 0a   number.  ^If a.
1e140 63 6f 6d 6d 61 20 69 73 20 75 73 65 64 20 69 6e  comma is used in
1e150 73 74 65 61 64 20 6f 66 20 74 68 65 20 4f 46 46  stead of the OFF
1e160 53 45 54 20 6b 65 79 77 6f 72 64 2c 20 74 68 65  SET keyword, the
1e170 6e 20 74 68 65 20 6f 66 66 73 65 74 20 69 73 20  n the offset is 
1e180 74 68 65 0a 66 69 72 73 74 20 6e 75 6d 62 65 72  the.first number
1e190 20 61 6e 64 20 74 68 65 20 6c 69 6d 69 74 20 69   and the limit i
1e1a0 73 20 74 68 65 20 73 65 63 6f 6e 64 20 6e 75 6d  s the second num
1e1b0 62 65 72 2e 20 20 54 68 69 73 20 73 65 65 6d 69  ber.  This seemi
1e1c0 6e 67 0a 63 6f 6e 74 72 61 64 69 63 74 69 6f 6e  ng.contradiction
1e1d0 20 69 73 20 69 6e 74 65 6e 74 69 6f 6e 61 6c 20   is intentional 
1e1e0 2d 20 69 74 20 6d 61 78 69 6d 69 7a 65 73 20 63  - it maximizes c
1e1f0 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74  ompatibility wit
1e200 68 20 6c 65 67 61 63 79 0a 53 51 4c 20 64 61 74  h legacy.SQL dat
1e210 61 62 61 73 65 20 73 79 73 74 65 6d 73 2e 0a 3c  abase systems..<
1e220 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  /p>...<tcl>.####
1e230 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65 63 74 69  ##########.Secti
1e280 6f 6e 20 55 50 44 41 54 45 20 75 70 64 61 74 65  on UPDATE update
1e290 20 7b 55 50 44 41 54 45 20 2a 55 50 44 41 54 45   {UPDATE *UPDATE
1e2a0 73 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  s}..BubbleDiagra
1e2b0 6d 20 75 70 64 61 74 65 2d 73 74 6d 74 20 31 0a  m update-stmt 1.
1e2c0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 71 75  BubbleDiagram qu
1e2d0 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61  alified-table-na
1e2e0 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  me.</tcl>..<p>^T
1e2f0 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
1e300 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 63  ent is used to c
1e310 68 61 6e 67 65 20 74 68 65 20 76 61 6c 75 65 20  hange the value 
1e320 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 0a 73  of columns in .s
1e330 65 6c 65 63 74 65 64 20 72 6f 77 73 20 6f 66 20  elected rows of 
1e340 61 20 74 61 62 6c 65 2e 20 20 5e 45 61 63 68 20  a table.  ^Each 
1e350 61 73 73 69 67 6e 6d 65 6e 74 20 69 6e 20 61 6e  assignment in an
1e360 20 55 50 44 41 54 45 20 73 70 65 63 69 66 69 65   UPDATE specifie
1e370 73 0a 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  s.a column name 
1e380 74 6f 20 74 68 65 20 6c 65 66 74 20 6f 66 20 74  to the left of t
1e390 68 65 20 65 71 75 61 6c 73 20 73 69 67 6e 20 61  he equals sign a
1e3a0 6e 64 20 61 6e 20 61 72 62 69 74 72 61 72 79 20  nd an arbitrary 
1e3b0 65 78 70 72 65 73 73 69 6f 6e 0a 74 6f 20 74 68  expression.to th
1e3c0 65 20 72 69 67 68 74 2e 20 20 5e 54 68 65 20 65  e right.  ^The e
1e3d0 78 70 72 65 73 73 69 6f 6e 73 20 6d 61 79 20 75  xpressions may u
1e3e0 73 65 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  se the values of
1e3f0 20 6f 74 68 65 72 20 63 6f 6c 75 6d 6e 73 2e 0a   other columns..
1e400 5e 41 6c 6c 20 65 78 70 72 65 73 73 69 6f 6e 73  ^All expressions
1e410 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 20 62   are evaluated b
1e420 65 66 6f 72 65 20 61 6e 79 20 61 73 73 69 67 6e  efore any assign
1e430 6d 65 6e 74 73 20 61 72 65 20 6d 61 64 65 2e 0a  ments are made..
1e440 5e 41 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  ^A WHERE clause 
1e450 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 72  can be used to r
1e460 65 73 74 72 69 63 74 20 77 68 69 63 68 20 72 6f  estrict which ro
1e470 77 73 20 61 72 65 20 75 70 64 61 74 65 64 2e 3c  ws are updated.<
1e480 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74  /p>..<p>^The opt
1e490 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63  ional conflict-c
1e4a0 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20 74 68 65  lause allows the
1e4b0 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 6f   specification o
1e4c0 66 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65  f an alternative
1e4d0 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66  .constraint conf
1e4e0 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
1e4f0 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65  algorithm to use
1e500 20 64 75 72 69 6e 67 20 74 68 69 73 20 6f 6e 65   during this one
1e510 20 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64 2e   UPDATE command.
1e520 0a 53 65 65 20 74 68 65 20 73 65 63 74 69 6f 6e  .See the section
1e530 20 74 69 74 6c 65 64 0a 5b 4f 4e 20 43 4f 4e 46   titled.[ON CONF
1e540 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69  LICT] for additi
1e550 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
1e560 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73 74 72  .</p>..<h3>Restr
1e570 69 63 74 69 6f 6e 73 20 6f 6e 20 55 50 44 41 54  ictions on UPDAT
1e580 45 20 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74  E Statements Wit
1e590 68 69 6e 20 43 52 45 41 54 45 20 54 52 49 47 47  hin CREATE TRIGG
1e5a0 45 52 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65  ER</h3>..<p>^The
1e5b0 72 65 20 61 72 65 20 61 64 64 69 74 69 6f 6e 61  re are additiona
1e5c0 6c 20 73 79 6e 74 61 78 20 72 65 73 74 72 69 63  l syntax restric
1e5d0 74 69 6f 6e 73 20 6f 6e 20 55 50 44 41 54 45 20  tions on UPDATE 
1e5e0 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 0a  statements that.
1e5f0 6f 63 63 75 72 20 77 69 74 68 69 6e 20 74 68 65  occur within the
1e600 20 62 6f 64 79 20 6f 66 20 61 20 5b 43 52 45 41   body of a [CREA
1e610 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61 74  TE TRIGGER] stat
1e620 65 6d 65 6e 74 2e 20 20 5e 54 68 65 20 3c 69 3e  ement.  ^The <i>
1e630 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 0a 6f  table-name</i>.o
1e640 66 20 74 68 65 20 55 50 44 41 54 45 20 6d 75 73  f the UPDATE mus
1e650 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69 65 64  t be unqualified
1e660 2e 20 0a 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f  . .^(In other wo
1e670 72 64 73 2c 20 74 68 65 20 3c 69 3e 64 61 74 61  rds, the <i>data
1e680 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e  base-name</i><b>
1e690 2e 3c 2f 62 3e 20 70 72 65 66 69 78 20 0a 6f 6e  .</b> prefix .on
1e6a0 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 20   the table name 
1e6b0 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 69 73  of the UPDATE is
1e6c0 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 77 69 74   not allowed wit
1e6d0 68 69 6e 20 74 72 69 67 67 65 72 73 2e 29 5e 0a  hin triggers.)^.
1e6e0 5e 54 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65  ^The table to be
1e6f0 20 75 70 64 61 74 65 64 20 6d 75 73 74 20 62 65   updated must be
1e700 20 69 6e 20 74 68 65 20 73 61 6d 65 0a 64 61 74   in the same.dat
1e710 61 62 61 73 65 20 61 73 20 74 68 65 20 74 61 62  abase as the tab
1e720 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  le to which the 
1e730 74 72 69 67 67 65 72 20 69 73 20 61 74 74 61 63  trigger is attac
1e740 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  hed.</p>..<p>^Th
1e750 65 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64  e INDEXED BY and
1e760 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61   NOT INDEXED cla
1e770 75 73 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c  uses are not all
1e780 6f 77 65 64 20 6f 6e 20 55 50 44 41 54 45 0a 73  owed on UPDATE.s
1e790 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
1e7a0 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a   triggers.</p>..
1e7b0 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20 63 6c  <p>^The LIMIT cl
1e7c0 61 75 73 65 20 66 6f 72 20 55 50 44 41 54 45 20  ause for UPDATE 
1e7d0 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64 20 77  is unsupported w
1e7e0 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 3c  ithin triggers.<
1e7f0 2f 70 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f 6e 61  /p>..<h3>Optiona
1e800 6c 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45  l LIMIT and ORDE
1e810 52 20 42 59 20 43 6c 61 75 73 65 73 3c 2f 68 33  R BY Clauses</h3
1e820 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53 51 4c 69 74  >..<p>^(If SQLit
1e830 65 20 69 73 20 62 75 69 6c 74 20 77 69 74 68 20  e is built with 
1e840 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42  the [SQLITE_ENAB
1e850 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45  LE_UPDATE_DELETE
1e860 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c 65 2d  _LIMIT].compile-
1e870 74 69 6d 65 20 6f 70 74 69 6f 6e 20 74 68 65 6e  time option then
1e880 20 74 68 65 20 73 79 6e 74 61 78 20 6f 66 20 74   the syntax of t
1e890 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
1e8a0 65 6e 74 20 69 73 20 65 78 74 65 6e 64 65 64 0a  ent is extended.
1e8b0 77 69 74 68 20 6f 70 74 69 6f 6e 61 6c 20 4f 52  with optional OR
1e8c0 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54  DER BY and LIMIT
1e8d0 20 63 6c 61 75 73 65 73 29 5e 20 61 73 20 66 6f   clauses)^ as fo
1e8e0 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c  llows:</p>..<tcl
1e8f0 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 75  >BubbleDiagram u
1e900 70 64 61 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74  pdate-stmt-limit
1e910 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  ed</tcl>..<p>^Th
1e920 65 20 6f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54  e optional LIMIT
1e930 20 63 6c 61 75 73 65 20 63 61 6e 20 62 65 20 75   clause can be u
1e940 73 65 64 20 74 6f 20 6c 69 6d 69 74 20 74 68 65  sed to limit the
1e950 20 6e 75 6d 62 65 72 20 6f 66 0a 72 6f 77 73 20   number of.rows 
1e960 6d 6f 64 69 66 69 65 64 2c 20 61 6e 64 20 74 68  modified, and th
1e970 65 72 65 62 79 20 6c 69 6d 69 74 20 74 68 65 20  ereby limit the 
1e980 73 69 7a 65 20 6f 66 20 74 68 65 20 74 72 61 6e  size of the tran
1e990 73 61 63 74 69 6f 6e 2e 0a 5e 54 68 65 20 4f 52  saction..^The OR
1e9a0 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e  DER BY clause on
1e9b0 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65   an UPDATE state
1e9c0 6d 65 6e 74 0a 69 73 20 75 73 65 64 20 6f 6e 6c  ment.is used onl
1e9d0 79 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77  y to determine w
1e9e0 68 69 63 68 20 72 6f 77 73 20 66 61 6c 6c 0a 77  hich rows fall.w
1e9f0 69 74 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e  ithin the LIMIT.
1ea00 20 20 5e 54 68 65 20 6f 72 64 65 72 20 69 6e 20    ^The order in 
1ea10 77 68 69 63 68 20 72 6f 77 73 20 61 72 65 20 6d  which rows are m
1ea20 6f 64 69 66 69 65 64 20 69 73 20 61 72 62 69 74  odified is arbit
1ea30 72 61 72 79 0a 61 6e 64 20 69 73 20 6e 6f 74 20  rary.and is not 
1ea40 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
1ea50 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1ea60 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  e.</p>..<tcl>.##
1ea70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ea80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65 63  ############.Sec
1eac0 74 69 6f 6e 20 56 41 43 55 55 4d 20 76 61 63 75  tion VACUUM vacu
1ead0 75 6d 20 56 41 43 55 55 4d 0a 0a 42 75 62 62 6c  um VACUUM..Bubbl
1eae0 65 44 69 61 67 72 61 6d 20 76 61 63 75 75 6d 2d  eDiagram vacuum-
1eaf0 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c  stmt 1.</tcl>..<
1eb00 70 3e 5e 57 68 65 6e 20 61 6e 20 6f 62 6a 65 63  p>^When an objec
1eb10 74 20 28 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c  t (table, index,
1eb20 20 74 72 69 67 67 65 72 2c 20 6f 72 20 76 69 65   trigger, or vie
1eb30 77 29 20 69 73 20 64 72 6f 70 70 65 64 20 66 72  w) is dropped fr
1eb40 6f 6d 20 74 68 65 20 0a 64 61 74 61 62 61 73 65  om the .database
1eb50 2c 20 69 74 20 6c 65 61 76 65 73 20 62 65 68 69  , it leaves behi
1eb60 6e 64 20 65 6d 70 74 79 20 73 70 61 63 65 2e 20  nd empty space. 
1eb70 0a 5e 54 68 69 73 20 65 6d 70 74 79 20 73 70 61  .^This empty spa
1eb80 63 65 20 77 69 6c 6c 20 62 65 20 72 65 75 73 65  ce will be reuse
1eb90 64 20 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20  d the next time 
1eba0 6e 65 77 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  new information 
1ebb0 69 73 0a 61 64 64 65 64 20 74 6f 20 74 68 65 20  is.added to the 
1ebc0 64 61 74 61 62 61 73 65 2e 20 20 42 75 74 20 69  database.  But i
1ebd0 6e 20 74 68 65 20 6d 65 61 6e 74 69 6d 65 2c 20  n the meantime, 
1ebe0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
1ebf0 65 20 6d 69 67 68 74 0a 62 65 20 6c 61 72 67 65  e might.be large
1ec00 72 20 74 68 61 6e 20 73 74 72 69 63 74 6c 79 20  r than strictly 
1ec10 6e 65 63 65 73 73 61 72 79 2e 20 20 41 6c 73 6f  necessary.  Also
1ec20 2c 20 66 72 65 71 75 65 6e 74 20 69 6e 73 65 72  , frequent inser
1ec30 74 73 2c 20 75 70 64 61 74 65 73 2c 0a 61 6e 64  ts, updates,.and
1ec40 20 64 65 6c 65 74 65 73 20 63 61 6e 20 63 61 75   deletes can cau
1ec50 73 65 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69  se the informati
1ec60 6f 6e 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  on in the databa
1ec70 73 65 20 74 6f 20 62 65 63 6f 6d 65 0a 66 72 61  se to become.fra
1ec80 67 6d 65 6e 74 65 64 20 2d 20 73 63 61 74 74 65  gmented - scatte
1ec90 72 65 64 20 6f 75 74 20 61 6c 6c 20 61 63 72 6f  red out all acro
1eca0 73 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ss the database 
1ecb0 66 69 6c 65 20 72 61 74 68 65 72 0a 74 68 61 6e  file rather.than
1ecc0 20 63 6c 75 73 74 65 72 65 64 20 74 6f 67 65 74   clustered toget
1ecd0 68 65 72 20 69 6e 20 6f 6e 65 20 70 6c 61 63 65  her in one place
1ece0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 56  .</p>..<p>^The V
1ecf0 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 63 6c  ACUUM command cl
1ed00 65 61 6e 73 0a 74 68 65 20 6d 61 69 6e 20 64 61  eans.the main da
1ed10 74 61 62 61 73 65 20 62 79 20 63 6f 70 79 69 6e  tabase by copyin
1ed20 67 20 69 74 73 20 63 6f 6e 74 65 6e 74 73 20 74  g its contents t
1ed30 6f 20 61 20 74 65 6d 70 6f 72 61 72 79 20 64 61  o a temporary da
1ed40 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
1ed50 0a 72 65 6c 6f 61 64 69 6e 67 20 74 68 65 20 6f  .reloading the o
1ed60 72 69 67 69 6e 61 6c 20 64 61 74 61 62 61 73 65  riginal database
1ed70 20 66 69 6c 65 20 66 72 6f 6d 20 74 68 65 20 63   file from the c
1ed80 6f 70 79 2e 20 20 54 68 69 73 20 65 6c 69 6d 69  opy.  This elimi
1ed90 6e 61 74 65 73 20 0a 66 72 65 65 20 70 61 67 65  nates .free page
1eda0 73 2c 20 20 61 6c 69 67 6e 73 20 74 61 62 6c 65  s,  aligns table
1edb0 20 64 61 74 61 20 74 6f 20 62 65 20 63 6f 6e 74   data to be cont
1edc0 69 67 75 6f 75 73 2c 20 61 6e 64 20 6f 74 68 65  iguous, and othe
1edd0 72 77 69 73 65 20 63 6c 65 61 6e 73 20 0a 75 70  rwise cleans .up
1ede0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
1edf0 6c 65 20 73 74 72 75 63 74 75 72 65 2e 3c 2f 70  le structure.</p
1ee00 3e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55 55  >..<p>^The VACUU
1ee10 4d 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 63 68  M command may ch
1ee20 61 6e 67 65 20 74 68 65 20 0a 5b 52 4f 57 49 44  ange the .[ROWID
1ee30 20 7c 20 52 4f 57 49 44 73 5d 20 6f 66 20 65 6e   | ROWIDs] of en
1ee40 74 72 69 65 73 20 69 6e 20 74 61 62 6c 65 73 20  tries in tables 
1ee50 74 68 61 74 20 64 6f 0a 6e 6f 74 20 68 61 76 65  that do.not have
1ee60 20 61 6e 20 65 78 70 6c 69 63 69 74 20 5b 49 4e   an explicit [IN
1ee70 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
1ee80 59 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 56 41 43  Y].</p>..<p>^VAC
1ee90 55 55 4d 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f  UUM only works o
1eea0 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
1eeb0 61 73 65 2e 0a 49 74 20 69 73 20 6e 6f 74 20 70  ase..It is not p
1eec0 6f 73 73 69 62 6c 65 20 74 6f 20 56 41 43 55 55  ossible to VACUU
1eed0 4d 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  M an attached da
1eee0 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e  tabase file.</p>
1eef0 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d  ..<p>^The VACUUM
1ef00 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 66 61   command will fa
1ef10 69 6c 20 69 66 20 74 68 65 72 65 20 69 73 20 61  il if there is a
1ef20 6e 20 61 63 74 69 76 65 20 74 72 61 6e 73 61 63  n active transac
1ef30 74 69 6f 6e 2e 0a 5e 54 68 65 20 56 41 43 55 55  tion..^The VACUU
1ef40 4d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 20 6e  M command is a n
1ef50 6f 2d 6f 70 20 66 6f 72 20 69 6e 2d 6d 65 6d 6f  o-op for in-memo
1ef60 72 79 20 64 61 74 61 62 61 73 65 73 2e 3c 2f 70  ry databases.</p
1ef70 3e 0a 0a 3c 70 3e 5e 28 41 73 20 6f 66 20 53 51  >..<p>^(As of SQ
1ef80 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 31  Lite version 3.1
1ef90 2c 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65  , an alternative
1efa0 20 74 6f 20 75 73 69 6e 67 20 74 68 65 20 56 41   to using the VA
1efb0 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 0a 69 73 20  CUUM command.is 
1efc0 61 75 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64 65  auto-vacuum mode
1efd0 2c 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20  , enabled using 
1efe0 74 68 65 20 0a 5b 61 75 74 6f 5f 76 61 63 75 75  the .[auto_vacuu
1eff0 6d 5d 20 70 72 61 67 6d 61 2e 29 5e 20 20 5e 57  m] pragma.)^  ^W
1f000 68 65 6e 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d  hen [auto_vacuum
1f010 5d 20 69 73 20 65 6e 61 62 6c 65 64 20 66 6f 72  ] is enabled for
1f020 20 61 20 64 61 74 61 62 61 73 65 2c 20 0a 6c 61   a database, .la
1f030 72 67 65 20 64 65 6c 65 74 65 73 20 63 61 75 73  rge deletes caus
1f040 65 0a 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  e.the size of th
1f050 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
1f060 74 6f 20 73 68 72 69 6e 6b 2e 20 20 48 6f 77 65  to shrink.  Howe
1f070 76 65 72 2c 20 5b 61 75 74 6f 5f 76 61 63 75 75  ver, [auto_vacuu
1f080 6d 5d 0a 61 6c 73 6f 20 63 61 75 73 65 73 20 65  m].also causes e
1f090 78 63 65 73 73 20 66 72 61 67 6d 65 6e 74 61 74  xcess fragmentat
1f0a0 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 62  ion of the datab
1f0b0 61 73 65 20 66 69 6c 65 2e 20 20 5e 41 6e 64 20  ase file.  ^And 
1f0c0 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 0a 64 6f  [auto_vacuum].do
1f0d0 65 73 20 6e 6f 74 20 63 6f 6d 70 61 63 74 20 70  es not compact p
1f0e0 61 72 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20  artially filled 
1f0f0 70 61 67 65 73 20 6f 66 20 74 68 65 20 64 61 74  pages of the dat
1f100 61 62 61 73 65 20 61 73 20 56 41 43 55 55 4d 0a  abase as VACUUM.
1f110 64 6f 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  does.</p>..<p>^T
1f120 68 65 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20 61  he [page_size] a
1f130 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f 76 61 63 75  nd/or [auto_vacu
1f140 75 6d 5d 20 6d 6f 64 65 20 6f 66 20 61 20 64 61  um] mode of a da
1f150 74 61 62 61 73 65 20 63 61 6e 20 62 65 20 63 68  tabase can be ch
1f160 61 6e 67 65 64 0a 62 79 20 69 6e 76 6f 6b 69 6e  anged.by invokin
1f170 67 20 74 68 65 20 5b 70 61 67 65 5f 73 69 7a 65  g the [page_size
1f180 20 70 72 61 67 6d 61 5d 20 61 6e 64 2f 6f 72 20   pragma] and/or 
1f190 5b 61 75 74 6f 5f 76 61 63 75 75 6d 20 70 72 61  [auto_vacuum pra
1f1a0 67 6d 61 5d 20 61 6e 64 20 74 68 65 6e 0a 69 6d  gma] and then.im
1f1b0 6d 65 64 69 61 74 65 6c 79 20 56 41 43 55 55 4d  mediately VACUUM
1f1c0 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65  ing the database
1f1d0 2e 20 5e 45 78 63 65 70 74 2c 20 74 68 65 20 70  . ^Except, the p
1f1e0 61 67 65 20 73 69 7a 65 20 63 61 6e 6e 6f 74 20  age size cannot 
1f1f0 62 65 0a 63 68 61 6e 67 65 64 20 77 68 65 6e 20  be.changed when 
1f200 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67  [write-ahead log
1f210 5d 20 6d 6f 64 65 20 69 73 20 69 6e 20 75 73 65  ] mode is in use
1f220 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
1f230 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65 63 74  ###########.Sect
1f280 69 6f 6e 20 7b 49 4e 44 45 58 45 44 20 42 59 7d  ion {INDEXED BY}
1f290 20 69 6e 64 65 78 65 64 62 79 20 7b 7b 49 4e 44   indexedby {{IND
1f2a0 45 58 45 44 20 42 59 7d 20 7b 4e 4f 54 20 49 4e  EXED BY} {NOT IN
1f2b0 44 45 58 45 44 7d 7d 0a 0a 3c 2f 74 63 6c 3e 0a  DEXED}}..</tcl>.
1f2c0 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20  <p>^The INDEXED 
1f2d0 42 59 20 70 68 72 61 73 65 20 69 73 20 61 20 53  BY phrase is a S
1f2e0 51 4c 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 75  QL extension fou
1f2f0 6e 64 20 6f 6e 6c 79 20 69 6e 20 53 51 4c 69 74  nd only in SQLit
1f300 65 20 77 68 69 63 68 20 63 61 6e 0a 62 65 20 75  e which can.be u
1f310 73 65 64 20 74 6f 20 76 65 72 69 66 79 20 74 68  sed to verify th
1f320 61 74 20 74 68 65 20 63 6f 72 72 65 63 74 20 69  at the correct i
1f330 6e 64 69 63 65 73 20 61 72 65 20 62 65 69 6e 67  ndices are being
1f340 20 75 73 65 64 20 6f 6e 20 61 20 5b 44 45 4c 45   used on a [DELE
1f350 54 45 5d 2c 0a 5b 53 45 4c 45 43 54 5d 2c 20 6f  TE],.[SELECT], o
1f360 72 20 5b 55 50 44 41 54 45 5d 20 73 74 61 74 65  r [UPDATE] state
1f370 6d 65 6e 74 2e 0a 5e 54 68 65 20 49 4e 44 45 58  ment..^The INDEX
1f380 45 44 20 42 59 20 70 68 72 61 73 65 20 61 6c 77  ED BY phrase alw
1f390 61 79 73 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20  ays follows the 
1f3a0 6e 61 6d 65 20 6f 66 20 61 20 74 61 62 6c 65 20  name of a table 
1f3b0 74 68 61 74 20 53 51 4c 69 74 65 20 77 69 6c 6c  that SQLite will
1f3c0 0a 62 65 20 72 65 61 64 69 6e 67 2e 20 20 54 68  .be reading.  Th
1f3d0 65 20 49 4e 44 45 58 45 44 20 42 59 20 70 68 72  e INDEXED BY phr
1f3e0 61 73 65 20 63 61 6e 20 62 65 20 73 65 65 6e 20  ase can be seen 
1f3f0 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  in the following
1f400 20 73 79 6e 74 61 78 0a 64 69 61 67 72 61 6d 73   syntax.diagrams
1f410 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 42 75 62  :</p>..<tcl>.Bub
1f420 62 6c 65 44 69 61 67 72 61 6d 20 71 75 61 6c 69  bleDiagram quali
1f430 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a  fied-table-name.
1f440 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69  BubbleDiagram si
1f450 6e 67 6c 65 2d 73 6f 75 72 63 65 0a 3c 2f 74 63  ngle-source.</tc
1f460 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 49 4e 44  l>..<p>^The "IND
1f470 45 58 45 44 20 42 59 20 69 6e 64 65 78 2d 6e 61  EXED BY index-na
1f480 6d 65 22 20 63 6c 61 75 73 65 20 73 70 65 63 69  me" clause speci
1f490 66 69 65 73 20 74 68 61 74 20 74 68 65 20 6e 61  fies that the na
1f4a0 6d 65 64 20 69 6e 64 65 78 0a 6d 75 73 74 20 62  med index.must b
1f4b0 65 20 75 73 65 64 20 69 6e 20 6f 72 64 65 72 20  e used in order 
1f4c0 74 6f 20 6c 6f 6f 6b 20 75 70 20 76 61 6c 75 65  to look up value
1f4d0 73 20 6f 6e 20 74 68 65 20 70 72 65 63 65 64 69  s on the precedi
1f4e0 6e 67 20 74 61 62 6c 65 2e 0a 5e 49 66 20 69 6e  ng table..^If in
1f4f0 64 65 78 2d 6e 61 6d 65 20 64 6f 65 73 20 6e 6f  dex-name does no
1f500 74 20 65 78 69 73 74 20 6f 72 20 63 61 6e 6e 6f  t exist or canno
1f510 74 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68  t be used for th
1f520 65 20 71 75 65 72 79 2c 20 74 68 65 6e 0a 74 68  e query, then.th
1f530 65 20 70 72 65 70 61 72 61 74 69 6f 6e 20 6f 66  e preparation of
1f540 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
1f550 6e 74 20 66 61 69 6c 73 2e 0a 5e 28 54 68 65 20  nt fails..^(The 
1f560 22 4e 4f 54 20 49 4e 44 45 58 45 44 22 20 63 6c  "NOT INDEXED" cl
1f570 61 75 73 65 20 73 70 65 63 69 66 69 65 73 20 74  ause specifies t
1f580 68 61 74 20 6e 6f 20 69 6e 64 65 78 20 73 68 61  hat no index sha
1f590 6c 6c 20 62 65 20 75 73 65 64 20 77 68 65 6e 0a  ll be used when.
1f5a0 61 63 63 65 73 73 69 6e 67 20 74 68 65 20 70 72  accessing the pr
1f5b0 65 63 65 64 69 6e 67 20 74 61 62 6c 65 2c 20 69  eceding table, i
1f5c0 6e 63 6c 75 64 69 6e 67 20 69 6d 70 6c 69 65 64  ncluding implied
1f5d0 20 69 6e 64 69 63 65 73 20 63 72 65 61 74 65 20   indices create 
1f5e0 62 79 0a 55 4e 49 51 55 45 20 61 6e 64 20 50 52  by.UNIQUE and PR
1f5f0 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72  IMARY KEY constr
1f600 61 69 6e 74 73 2e 20 20 48 6f 77 65 76 65 72 2c  aints.  However,
1f610 20 74 68 65 20 49 4e 54 45 47 45 52 20 50 52 49   the INTEGER PRI
1f620 4d 41 52 59 20 4b 45 59 0a 63 61 6e 20 73 74 69  MARY KEY.can sti
1f630 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20 6c 6f  ll be used to lo
1f640 6f 6b 20 75 70 20 65 6e 74 72 69 65 73 20 65 76  ok up entries ev
1f650 65 6e 20 77 68 65 6e 20 22 4e 4f 54 20 49 4e 44  en when "NOT IND
1f660 45 58 45 44 22 20 69 73 20 73 70 65 63 69 66 69  EXED" is specifi
1f670 65 64 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 53 6f  ed.)^</p>..<p>So
1f680 6d 65 20 53 51 4c 20 64 61 74 61 62 61 73 65 20  me SQL database 
1f690 65 6e 67 69 6e 65 73 20 70 72 6f 76 69 64 65 20  engines provide 
1f6a0 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 22 68 69  non-standard "hi
1f6b0 6e 74 22 20 6d 65 63 68 61 6e 69 73 6d 73 20 77  nt" mechanisms w
1f6c0 68 69 63 68 0a 63 61 6e 20 62 65 20 75 73 65 64  hich.can be used
1f6d0 20 74 6f 20 67 69 76 65 20 74 68 65 20 71 75 65   to give the que
1f6e0 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 63 6c 75  ry optimizer clu
1f6f0 65 73 20 61 62 6f 75 74 20 77 68 61 74 20 69 6e  es about what in
1f700 64 69 63 65 73 20 69 74 20 73 68 6f 75 6c 64 0a  dices it should.
1f710 75 73 65 20 66 6f 72 20 61 20 70 61 72 74 69 63  use for a partic
1f720 75 6c 61 72 20 73 74 61 74 65 6d 65 6e 74 2e 20  ular statement. 
1f730 20 54 68 65 20 49 4e 44 45 58 20 42 59 20 63 6c   The INDEX BY cl
1f740 61 75 73 65 20 6f 66 20 53 51 4c 69 74 65 20 69  ause of SQLite i
1f750 73 20 0a 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20  s .<em>not</em> 
1f760 61 20 68 69 6e 74 69 6e 67 20 6d 65 63 68 61 6e  a hinting mechan
1f770 69 73 6d 20 61 6e 64 20 69 74 20 73 68 6f 75 6c  ism and it shoul
1f780 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 61 73  d not be used as
1f790 20 73 75 63 68 2e 0a 5e 54 68 65 20 49 4e 44 45   such..^The INDE
1f7a0 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 64 6f  XED BY clause do
1f7b0 65 73 20 6e 6f 74 20 67 69 76 65 20 74 68 65 20  es not give the 
1f7c0 6f 70 74 69 6d 69 7a 65 72 20 68 69 6e 74 73 20  optimizer hints 
1f7d0 61 62 6f 75 74 20 77 68 69 63 68 20 69 6e 64 65  about which inde
1f7e0 78 0a 74 6f 20 75 73 65 3b 20 69 74 20 67 69 76  x.to use; it giv
1f7f0 65 73 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  es the optimizer
1f800 20 61 20 72 65 71 75 69 72 65 6d 65 6e 74 20 6f   a requirement o
1f810 66 20 77 68 69 63 68 20 69 6e 64 65 78 20 74 6f  f which index to
1f820 20 75 73 65 2e 0a 5e 49 66 20 74 68 65 20 71 75   use..^If the qu
1f830 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 69 73  ery optimizer is
1f840 20 75 6e 61 62 6c 65 20 74 6f 20 75 73 65 20 74   unable to use t
1f850 68 65 20 69 6e 64 65 78 20 73 70 65 63 69 66 69  he index specifi
1f860 65 64 20 62 79 20 74 68 65 0a 49 4e 44 45 58 20  ed by the.INDEX 
1f870 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  BY clause, then 
1f880 74 68 65 20 71 75 65 72 79 20 77 69 6c 6c 20 66  the query will f
1f890 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f  ail with an erro
1f8a0 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 49  r.</p>..<p>The I
1f8b0 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65  NDEXED BY clause
1f8c0 20 69 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e   is <em>not</em>
1f8d0 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73   intended for us
1f8e0 65 20 69 6e 20 74 75 6e 69 6e 67 0a 74 68 65 20  e in tuning.the 
1f8f0 70 65 72 66 6f 72 6d 61 6e 63 65 20 6f 66 20 61  performance of a
1f900 20 71 75 65 72 79 2e 20 20 54 68 65 20 69 6e 74   query.  The int
1f910 65 6e 74 20 6f 66 20 74 68 65 20 49 4e 44 45 58  ent of the INDEX
1f920 45 44 20 42 59 20 63 6c 61 75 73 65 20 69 73 0a  ED BY clause is.
1f930 74 6f 20 72 61 69 73 65 20 61 20 72 75 6e 2d 74  to raise a run-t
1f940 69 6d 65 20 65 72 72 6f 72 20 69 66 20 61 20 73  ime error if a s
1f950 63 68 65 6d 61 20 63 68 61 6e 67 65 2c 20 73 75  chema change, su
1f960 63 68 20 61 73 20 64 72 6f 70 70 69 6e 67 20 6f  ch as dropping o
1f970 72 0a 63 72 65 61 74 69 6e 67 20 61 6e 20 69 6e  r.creating an in
1f980 64 65 78 2c 20 63 61 75 73 65 73 20 74 68 65 20  dex, causes the 
1f990 71 75 65 72 79 20 70 6c 61 6e 20 66 6f 72 20 61  query plan for a
1f9a0 20 74 69 6d 65 2d 73 65 6e 73 69 74 69 76 65 20   time-sensitive 
1f9b0 71 75 65 72 79 0a 74 6f 20 63 68 61 6e 67 65 2e  query.to change.
1f9c0 20 20 54 68 65 20 49 4e 44 45 58 45 44 20 42 59    The INDEXED BY
1f9d0 20 63 6c 61 75 73 65 20 69 73 20 64 65 73 69 67   clause is desig
1f9e0 6e 65 64 20 74 6f 20 68 65 6c 70 20 64 65 74 65  ned to help dete
1f9f0 63 74 0a 75 6e 64 65 73 69 72 61 62 6c 65 20 71  ct.undesirable q
1fa00 75 65 72 79 20 70 6c 61 6e 20 63 68 61 6e 67 65  uery plan change
1fa10 73 20 64 75 72 69 6e 67 20 72 65 67 72 65 73 73  s during regress
1fa20 69 6f 6e 20 74 65 73 74 69 6e 67 2e 0a 44 65 76  ion testing..Dev
1fa30 65 6c 6f 70 65 72 73 20 61 72 65 20 61 64 6d 6f  elopers are admo
1fa40 6e 69 73 68 65 64 20 74 6f 20 6f 6d 69 74 20 61  nished to omit a
1fa50 6c 6c 20 75 73 65 20 6f 66 20 49 4e 44 45 58 45  ll use of INDEXE
1fa60 44 20 42 59 20 64 75 72 69 6e 67 0a 61 70 70 6c  D BY during.appl
1fa70 69 63 61 74 69 6f 6e 20 64 65 73 69 67 6e 2c 20  ication design, 
1fa80 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20  implementation, 
1fa90 74 65 73 74 69 6e 67 2c 20 61 6e 64 20 74 75 6e  testing, and tun
1faa0 69 6e 67 2e 20 20 49 66 0a 49 4e 44 45 58 45 44  ing.  If.INDEXED
1fab0 20 42 59 20 69 73 20 74 6f 20 62 65 20 75 73 65   BY is to be use
1fac0 64 20 61 74 20 61 6c 6c 2c 20 69 74 20 73 68 6f  d at all, it sho
1fad0 75 6c 64 20 62 65 20 69 6e 73 65 72 74 65 64 20  uld be inserted 
1fae0 61 74 20 74 68 65 20 76 65 72 79 0a 65 6e 64 20  at the very.end 
1faf0 6f 66 20 74 68 65 20 64 65 76 65 6c 6f 70 6d 65  of the developme
1fb00 6e 74 20 70 72 6f 63 65 73 73 20 77 68 65 6e 20  nt process when 
1fb10 22 6c 6f 63 6b 69 6e 67 20 64 6f 77 6e 22 20 61  "locking down" a
1fb20 20 64 65 73 69 67 6e 2e 3c 2f 70 3e 0a 0a 3c 68   design.</p>..<h
1fb30 33 3e 53 65 65 20 41 6c 73 6f 3a 3c 2f 68 33 3e  3>See Also:</h3>
1fb40 0a 0a 3c 70 3e 54 68 65 20 5b 73 71 6c 69 74 65  ..<p>The [sqlite
1fb50 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 29 5d  3_stmt_status()]
1fb60 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65   C/C++ interface
1fb70 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 74   together with t
1fb80 68 65 0a 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  he.[SQLITE_STMTS
1fb90 54 41 54 55 53 5f 46 55 4c 4c 53 43 41 4e 5f 53  TATUS_FULLSCAN_S
1fba0 54 45 50 5d 20 61 6e 64 20 5b 53 51 4c 49 54 45  TEP] and [SQLITE
1fbb0 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54  _STMTSTATUS_SORT
1fbc0 5d 20 76 65 72 62 73 0a 63 61 6e 20 62 65 20 75  ] verbs.can be u
1fbd0 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 61 74  sed to detect at
1fbe0 20 72 75 6e 2d 74 69 6d 65 20 77 68 65 6e 20 61   run-time when a
1fbf0 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  n SQL statement 
1fc00 69 73 20 6e 6f 74 0a 6d 61 6b 69 6e 67 20 65 66  is not.making ef
1fc10 66 65 63 74 69 76 65 20 75 73 65 20 6f 66 20 69  fective use of i
1fc20 6e 64 69 63 65 73 2e 20 20 4d 61 6e 79 20 61 70  ndices.  Many ap
1fc30 70 6c 69 63 61 74 69 6f 6e 73 20 6d 61 79 20 70  plications may p
1fc40 72 65 66 65 72 20 74 6f 0a 75 73 65 20 74 68 65  refer to.use the
1fc50 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73   [sqlite3_stmt_s
1fc60 74 61 74 75 73 28 29 5d 20 69 6e 74 65 72 66 61  tatus()] interfa
1fc70 63 65 20 74 6f 20 64 65 74 65 63 74 20 69 6e 64  ce to detect ind
1fc80 65 78 20 6d 69 73 75 73 65 0a 72 61 74 68 65 72  ex misuse.rather
1fc90 20 74 68 61 6e 20 74 68 65 20 49 4e 44 45 58 45   than the INDEXE
1fca0 44 20 42 59 20 70 68 72 61 73 65 20 64 65 73 63  D BY phrase desc
1fcb0 72 69 62 65 64 20 68 65 72 65 2e 3c 2f 70 3e 0a  ribed here.</p>.
1fcc0 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
1fcd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 23 20 41 20 6c 69 73 74 20 6f 66  ####.# A list of
1fd20 20 6b 65 79 77 6f 72 64 73 2e 20 20 41 20 61 73   keywords.  A as
1fd30 74 65 72 69 73 6b 20 6f 63 63 75 72 73 20 61 66  terisk occurs af
1fd40 74 65 72 20 74 68 65 20 6b 65 79 77 6f 72 64 20  ter the keyword 
1fd50 69 66 20 69 74 20 69 73 20 6f 6e 0a 23 20 74 68  if it is on.# th
1fd60 65 20 66 61 6c 6c 62 61 63 6b 20 6c 69 73 74 2e  e fallback list.
1fd70 0a 23 0a 73 65 74 20 6b 65 79 77 6f 72 64 5f 6c  .#.set keyword_l
1fd80 69 73 74 20 5b 6c 73 6f 72 74 20 7b 0a 20 20 20  ist [lsort {.   
1fd90 41 42 4f 52 54 0a 20 20 20 41 43 54 49 4f 4e 0a  ABORT.   ACTION.
1fda0 20 20 20 41 44 44 0a 20 20 20 41 46 54 45 52 0a     ADD.   AFTER.
1fdb0 20 20 20 41 4c 4c 0a 20 20 20 41 4c 54 45 52 0a     ALL.   ALTER.
1fdc0 20 20 20 41 4e 41 4c 59 5a 45 0a 20 20 20 41 4e     ANALYZE.   AN
1fdd0 44 0a 20 20 20 41 53 0a 20 20 20 41 53 43 0a 20  D.   AS.   ASC. 
1fde0 20 20 41 54 54 41 43 48 0a 20 20 20 41 55 54 4f    ATTACH.   AUTO
1fdf0 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 42 45 46  INCREMENT.   BEF
1fe00 4f 52 45 0a 20 20 20 42 45 47 49 4e 0a 20 20 20  ORE.   BEGIN.   
1fe10 42 45 54 57 45 45 4e 0a 20 20 20 42 59 0a 20 20  BETWEEN.   BY.  
1fe20 20 43 41 53 43 41 44 45 0a 20 20 20 43 41 53 45   CASCADE.   CASE
1fe30 0a 20 20 20 43 41 53 54 0a 20 20 20 43 48 45 43  .   CAST.   CHEC
1fe40 4b 0a 20 20 20 43 4f 4c 4c 41 54 45 0a 20 20 20  K.   COLLATE.   
1fe50 43 4f 4c 55 4d 4e 0a 20 20 20 43 4f 4d 4d 49 54  COLUMN.   COMMIT
1fe60 0a 20 20 20 43 4f 4e 46 4c 49 43 54 0a 20 20 20  .   CONFLICT.   
1fe70 43 4f 4e 53 54 52 41 49 4e 54 0a 20 20 20 43 52  CONSTRAINT.   CR
1fe80 45 41 54 45 0a 20 20 20 43 52 4f 53 53 0a 20 20  EATE.   CROSS.  
1fe90 20 43 55 52 52 45 4e 54 5f 44 41 54 45 0a 20 20   CURRENT_DATE.  
1fea0 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 0a 20 20   CURRENT_TIME.  
1feb0 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
1fec0 4d 50 0a 20 20 20 44 41 54 41 42 41 53 45 0a 20  MP.   DATABASE. 
1fed0 20 20 44 45 46 41 55 4c 54 0a 20 20 20 44 45 46    DEFAULT.   DEF
1fee0 45 52 52 45 44 0a 20 20 20 44 45 46 45 52 52 41  ERRED.   DEFERRA
1fef0 42 4c 45 0a 20 20 20 44 45 4c 45 54 45 0a 20 20  BLE.   DELETE.  
1ff00 20 44 45 53 43 0a 20 20 20 44 45 54 41 43 48 0a   DESC.   DETACH.
1ff10 20 20 20 44 49 53 54 49 4e 43 54 0a 20 20 20 44     DISTINCT.   D
1ff20 52 4f 50 0a 20 20 20 45 4e 44 0a 20 20 20 45 41  ROP.   END.   EA
1ff30 43 48 0a 20 20 20 45 4c 53 45 0a 20 20 20 45 53  CH.   ELSE.   ES
1ff40 43 41 50 45 0a 20 20 20 45 58 43 45 50 54 0a 20  CAPE.   EXCEPT. 
1ff50 20 20 45 58 43 4c 55 53 49 56 45 0a 20 20 20 45    EXCLUSIVE.   E
1ff60 58 49 53 54 53 0a 20 20 20 45 58 50 4c 41 49 4e  XISTS.   EXPLAIN
1ff70 0a 20 20 20 46 41 49 4c 0a 20 20 20 46 4f 52 0a  .   FAIL.   FOR.
1ff80 20 20 20 46 4f 52 45 49 47 4e 0a 20 20 20 46 52     FOREIGN.   FR
1ff90 4f 4d 0a 20 20 20 46 55 4c 4c 0a 20 20 20 47 4c  OM.   FULL.   GL
1ffa0 4f 42 0a 20 20 20 47 52 4f 55 50 0a 20 20 20 48  OB.   GROUP.   H
1ffb0 41 56 49 4e 47 0a 20 20 20 49 46 0a 20 20 20 49  AVING.   IF.   I
1ffc0 47 4e 4f 52 45 0a 20 20 20 49 4d 4d 45 44 49 41  GNORE.   IMMEDIA
1ffd0 54 45 0a 20 20 20 49 4e 0a 20 20 20 49 4e 44 45  TE.   IN.   INDE
1ffe0 58 0a 20 20 20 49 4e 44 45 58 45 44 0a 20 20 20  X.   INDEXED.   
1fff0 49 4e 49 54 49 41 4c 4c 59 0a 20 20 20 49 4e 4e  INITIALLY.   INN
20000 45 52 0a 20 20 20 49 4e 53 45 52 54 0a 20 20 20  ER.   INSERT.   
20010 49 4e 53 54 45 41 44 0a 20 20 20 49 4e 54 45 52  INSTEAD.   INTER
20020 53 45 43 54 0a 20 20 20 49 4e 54 4f 0a 20 20 20  SECT.   INTO.   
20030 49 53 0a 20 20 20 49 53 4e 55 4c 4c 0a 20 20 20  IS.   ISNULL.   
20040 4a 4f 49 4e 0a 20 20 20 4b 45 59 0a 20 20 20 4c  JOIN.   KEY.   L
20050 45 46 54 0a 20 20 20 4c 49 4b 45 0a 20 20 20 4c  EFT.   LIKE.   L
20060 49 4d 49 54 0a 20 20 20 4d 41 54 43 48 0a 20 20  IMIT.   MATCH.  
20070 20 4e 41 54 55 52 41 4c 0a 20 20 20 4e 4f 0a 20   NATURAL.   NO. 
20080 20 20 4e 4f 54 0a 20 20 20 4e 4f 54 4e 55 4c 4c    NOT.   NOTNULL
20090 0a 20 20 20 4e 55 4c 4c 0a 20 20 20 4f 46 0a 20  .   NULL.   OF. 
200a0 20 20 4f 46 46 53 45 54 0a 20 20 20 4f 4e 0a 20    OFFSET.   ON. 
200b0 20 20 4f 52 0a 20 20 20 4f 52 44 45 52 0a 20 20    OR.   ORDER.  
200c0 20 4f 55 54 45 52 0a 20 20 20 50 4c 41 4e 0a 20   OUTER.   PLAN. 
200d0 20 20 50 52 41 47 4d 41 0a 20 20 20 50 52 49 4d    PRAGMA.   PRIM
200e0 41 52 59 0a 20 20 20 51 55 45 52 59 0a 20 20 20  ARY.   QUERY.   
200f0 52 41 49 53 45 0a 20 20 20 52 45 46 45 52 45 4e  RAISE.   REFEREN
20100 43 45 53 0a 20 20 20 52 45 47 45 58 50 0a 20 20  CES.   REGEXP.  
20110 20 52 45 49 4e 44 45 58 0a 20 20 20 52 45 4c 45   REINDEX.   RELE
20120 41 53 45 0a 20 20 20 52 45 4e 41 4d 45 0a 20 20  ASE.   RENAME.  
20130 20 52 45 50 4c 41 43 45 0a 20 20 20 52 45 53 54   REPLACE.   REST
20140 52 49 43 54 0a 20 20 20 52 49 47 48 54 0a 20 20  RICT.   RIGHT.  
20150 20 52 4f 4c 4c 42 41 43 4b 0a 20 20 20 52 4f 57   ROLLBACK.   ROW
20160 0a 20 20 20 53 41 56 45 50 4f 49 4e 54 0a 20 20  .   SAVEPOINT.  
20170 20 53 45 4c 45 43 54 0a 20 20 20 53 45 54 0a 20   SELECT.   SET. 
20180 20 20 54 41 42 4c 45 0a 20 20 20 54 45 4d 50 0a    TABLE.   TEMP.
20190 20 20 20 54 45 4d 50 4f 52 41 52 59 0a 20 20 20     TEMPORARY.   
201a0 54 48 45 4e 0a 20 20 20 54 4f 0a 20 20 20 54 52  THEN.   TO.   TR
201b0 41 4e 53 41 43 54 49 4f 4e 0a 20 20 20 54 52 49  ANSACTION.   TRI
201c0 47 47 45 52 0a 20 20 20 55 4e 49 4f 4e 0a 20 20  GGER.   UNION.  
201d0 20 55 4e 49 51 55 45 0a 20 20 20 55 50 44 41 54   UNIQUE.   UPDAT
201e0 45 0a 20 20 20 55 53 49 4e 47 0a 20 20 20 56 41  E.   USING.   VA
201f0 43 55 55 4d 0a 20 20 20 56 41 4c 55 45 53 0a 20  CUUM.   VALUES. 
20200 20 20 56 49 45 57 0a 20 20 20 56 49 52 54 55 41    VIEW.   VIRTUA
20210 4c 0a 20 20 20 57 48 45 4e 0a 20 20 20 57 48 45  L.   WHEN.   WHE
20220 52 45 0a 7d 5d 0a 0a 68 64 5f 70 75 74 73 20 7b  RE.}]..hd_puts {
20230 3c 44 49 56 20 63 6c 61 73 73 3d 22 70 64 66 5f  <DIV class="pdf_
20240 73 65 63 74 69 6f 6e 22 3e 7d 0a 53 65 63 74 69  section">}.Secti
20250 6f 6e 20 7b 53 51 4c 69 74 65 20 4b 65 79 77 6f  on {SQLite Keywo
20260 72 64 73 7d 20 6b 65 79 77 6f 72 64 73 20 7b 7b  rds} keywords {{
20270 2a 53 51 4c 20 6b 65 79 77 6f 72 64 7d 20 7b 53  *SQL keyword} {S
20280 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a 68 64  QL keywords}}.hd
20290 5f 70 75 74 73 20 7b 3c 2f 44 49 56 3e 7d 0a 3c  _puts {</DIV>}.<
202a0 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 53 51  /tcl>..<p>The SQ
202b0 4c 20 73 74 61 6e 64 61 72 64 20 73 70 65 63 69  L standard speci
202c0 66 69 65 73 20 61 20 68 75 67 65 20 6e 75 6d 62  fies a huge numb
202d0 65 72 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 77  er of keywords w
202e0 68 69 63 68 20 6d 61 79 20 6e 6f 74 0a 62 65 20  hich may not.be 
202f0 75 73 65 64 20 61 73 20 74 68 65 20 6e 61 6d 65  used as the name
20300 73 20 6f 66 20 74 61 62 6c 65 73 2c 20 69 6e 64  s of tables, ind
20310 69 63 65 73 2c 20 63 6f 6c 75 6d 6e 73 2c 20 64  ices, columns, d
20320 61 74 61 62 61 73 65 73 2c 20 75 73 65 72 2d 64  atabases, user-d
20330 65 66 69 6e 65 64 0a 66 75 6e 63 74 69 6f 6e 73  efined.functions
20340 2c 20 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20 76 69  , collations, vi
20350 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75  rtual table modu
20360 6c 65 73 2c 20 6f 72 20 61 6e 79 20 6f 74 68 65  les, or any othe
20370 72 20 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2e 0a  r named object..
20380 54 68 65 20 6c 69 73 74 20 6f 66 20 6b 65 79 77  The list of keyw
20390 6f 72 64 73 20 69 73 20 73 6f 20 6c 6f 6e 67 20  ords is so long 
203a0 74 68 61 74 20 66 65 77 20 70 65 6f 70 6c 65 20  that few people 
203b0 63 61 6e 20 72 65 6d 65 6d 62 65 72 20 74 68 65  can remember the
203c0 6d 20 61 6c 6c 2e 0a 46 6f 72 20 6d 6f 73 74 20  m all..For most 
203d0 53 51 4c 20 63 6f 64 65 2c 20 79 6f 75 72 20 73  SQL code, your s
203e0 61 66 65 73 74 20 62 65 74 20 69 73 20 74 6f 20  afest bet is to 
203f0 6e 65 76 65 72 20 75 73 65 20 61 6e 79 20 45 6e  never use any En
20400 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 0a 77  glish language.w
20410 6f 72 64 20 61 73 20 74 68 65 20 6e 61 6d 65 20  ord as the name 
20420 6f 66 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65  of a user-define
20430 64 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c  d object.</p>..<
20440 70 3e 49 66 20 79 6f 75 20 77 61 6e 74 20 74 6f  p>If you want to
20450 20 75 73 65 20 61 20 6b 65 79 77 6f 72 64 20 61   use a keyword a
20460 73 20 61 20 6e 61 6d 65 2c 20 79 6f 75 20 6e 65  s a name, you ne
20470 65 64 20 74 6f 20 71 75 6f 74 65 20 69 74 2e 20  ed to quote it. 
20480 20 54 68 65 72 65 0a 61 72 65 20 74 68 72 65 65   There.are three
20490 20 77 61 79 73 20 6f 66 20 71 75 6f 74 69 6e 67   ways of quoting
204a0 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 53 51 4c   keywords in SQL
204b0 69 74 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62  ite:</p>..<p>.<b
204c0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c  lockquote>.<tabl
204d0 65 3e 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69  e>.<tr>.<td vali
204e0 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 27 6b 65 79  gn="top"><b>'key
204f0 77 6f 72 64 27 3c 2f 62 3e 3c 2f 74 64 3e 3c 74  word'</b></td><t
20500 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74  d width="20"></t
20510 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f  d>..<td>^A keywo
20520 72 64 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f  rd in single quo
20530 74 65 73 20 69 73 20 61 20 73 74 72 69 6e 67 20  tes is a string 
20540 6c 69 74 65 72 61 6c 2e 3c 2f 74 64 3e 3c 2f 74  literal.</td></t
20550 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c  r>..<tr>.<td val
20560 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 22 6b 65  ign="top"><b>"ke
20570 79 77 6f 72 64 22 3c 2f 62 3e 3c 2f 74 64 3e 3c  yword"</b></td><
20580 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41  td></td>..<td>^A
20590 20 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62   keyword in doub
205a0 6c 65 2d 71 75 6f 74 65 73 20 69 73 20 61 6e 20  le-quotes is an 
205b0 69 64 65 6e 74 69 66 69 65 72 2e 3c 2f 74 64 3e  identifier.</td>
205c0 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20  </tr>..<tr>.<td 
205d0 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
205e0 26 23 39 31 3b 6b 65 79 77 6f 72 64 26 23 39 33  &#91;keyword&#93
205f0 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f  ;</b></td><td></
20600 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77  td>..<td>^A keyw
20610 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20  ord enclosed in 
20620 73 71 75 61 72 65 20 62 72 61 63 6b 65 74 73 20  square brackets 
20630 69 73 20 0a 20 20 20 20 20 20 20 20 61 6e 20 69  is .        an i
20640 64 65 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73  dentifier.  This
20650 20 69 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64   is not standard
20660 20 53 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74   SQL.  This quot
20670 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20  ing mechanism.  
20680 20 20 20 20 20 20 69 73 20 75 73 65 64 20 62 79        is used by
20690 20 4d 53 20 41 63 63 65 73 73 20 61 6e 64 20 53   MS Access and S
206a0 51 4c 20 53 65 72 76 65 72 20 61 6e 64 20 69 73  QL Server and is
206b0 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 53 51 4c   included in SQL
206c0 69 74 65 20 66 6f 72 0a 20 20 20 20 20 20 20 20  ite for.        
206d0 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f  compatibility.</
206e0 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c  td></tr>..<tr>.<
206f0 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
20700 3c 62 3e 26 23 39 36 3b 6b 65 79 77 6f 72 64 26  <b>&#96;keyword&
20710 23 39 36 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  #96;</b></td><td
20720 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b  ></td>..<td>^A k
20730 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20  eyword enclosed 
20740 69 6e 20 67 72 61 76 65 20 61 63 63 65 6e 74 73  in grave accents
20750 20 28 41 53 43 49 49 20 63 6f 64 65 20 39 36 29   (ASCII code 96)
20760 20 69 73 20 0a 20 20 20 20 20 20 20 20 61 6e 20   is .        an 
20770 69 64 65 6e 74 69 66 69 65 72 2e 20 20 54 68 69  identifier.  Thi
20780 73 20 69 73 20 6e 6f 74 20 73 74 61 6e 64 61 72  s is not standar
20790 64 20 53 51 4c 2e 20 20 54 68 69 73 20 71 75 6f  d SQL.  This quo
207a0 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20  ting mechanism. 
207b0 20 20 20 20 20 20 20 69 73 20 75 73 65 64 20 62         is used b
207c0 79 20 4d 79 53 51 4c 20 61 6e 64 20 69 73 20 69  y MySQL and is i
207d0 6e 63 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74  ncluded in SQLit
207e0 65 20 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f  e for.        co
207f0 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64  mpatibility.</td
20800 3e 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a  ></tr>.</table>.
20810 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 2f  </blockquote>.</
20820 70 3e 0a 0a 3c 70 3e 46 6f 72 20 72 65 73 69 6c  p>..<p>For resil
20830 69 65 6e 63 65 20 77 68 65 6e 20 63 6f 6e 66 72  ience when confr
20840 6f 6e 74 65 64 20 77 69 74 68 20 68 69 73 74 6f  onted with histo
20850 72 69 63 61 6c 20 53 51 4c 20 73 74 61 74 65 6d  rical SQL statem
20860 65 6e 74 73 2c 20 53 51 4c 69 74 65 0a 77 69 6c  ents, SQLite.wil
20870 6c 20 73 6f 6d 65 74 69 6d 65 73 20 62 65 6e 64  l sometimes bend
20880 20 74 68 65 20 71 75 6f 74 69 6e 67 20 72 75 6c   the quoting rul
20890 65 73 20 61 62 6f 76 65 3a 3c 2f 70 3e 0a 0a 3c  es above:</p>..<
208a0 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61  ul>.<li><p>^If a
208b0 20 6b 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67   keyword in sing
208c0 6c 65 0a 71 75 6f 74 65 73 20 28 65 78 3a 20 3c  le.quotes (ex: <
208d0 62 3e 27 6b 65 79 27 3c 2f 62 3e 20 6f 72 20 3c  b>'key'</b> or <
208e0 62 3e 27 67 6c 6f 62 27 3c 2f 62 3e 29 20 69 73  b>'glob'</b>) is
208f0 20 75 73 65 64 20 69 6e 20 61 20 63 6f 6e 74 65   used in a conte
20900 78 74 20 77 68 65 72 65 0a 61 6e 20 69 64 65 6e  xt where.an iden
20910 74 69 66 69 65 72 20 69 73 20 61 6c 6c 6f 77 65  tifier is allowe
20920 64 20 62 75 74 20 77 68 65 72 65 20 61 20 73 74  d but where a st
20930 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 73 20  ring literal is 
20940 6e 6f 74 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65  not allowed, the
20950 6e 0a 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 75  n.the token is u
20960 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20  nderstood to be 
20970 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 69 6e  an identifier in
20980 73 74 65 61 64 20 6f 66 20 61 20 73 74 72 69 6e  stead of a strin
20990 67 20 6c 69 74 65 72 61 6c 2e 0a 3c 2f 70 3e 3c  g literal..</p><
209a0 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66  /li>..<li><p>^If
209b0 20 61 20 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f   a keyword in do
209c0 75 62 6c 65 0a 71 75 6f 74 65 73 20 28 65 78 3a  uble.quotes (ex:
209d0 20 3c 62 3e 22 6b 65 79 22 3c 2f 62 3e 20 6f 72   <b>"key"</b> or
209e0 20 3c 62 3e 22 67 6c 6f 62 22 3c 2f 62 3e 29 20   <b>"glob"</b>) 
209f0 69 73 20 75 73 65 64 20 69 6e 20 61 20 63 6f 6e  is used in a con
20a00 74 65 78 74 20 77 68 65 72 65 0a 69 74 20 63 61  text where.it ca
20a10 6e 6e 6f 74 20 62 65 20 72 65 73 6f 6c 76 65 64  nnot be resolved
20a20 20 74 6f 20 61 6e 20 69 64 65 6e 74 69 66 69 65   to an identifie
20a30 72 20 62 75 74 20 77 68 65 72 65 20 61 20 73 74  r but where a st
20a40 72 69 6e 67 20 6c 69 74 65 72 61 6c 0a 69 73 20  ring literal.is 
20a50 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e 20 74 68  allowed, then th
20a60 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72  e token is under
20a70 73 74 6f 6f 64 20 74 6f 20 62 65 20 61 20 73 74  stood to be a st
20a80 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 6e 73  ring literal ins
20a90 74 65 61 64 0a 6f 66 20 61 6e 20 69 64 65 6e 74  tead.of an ident
20aa0 69 66 69 65 72 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a  ifier.</p></li>.
20ab0 3c 2f 75 6c 3e 0a 0a 3c 70 3e 50 72 6f 67 72 61  </ul>..<p>Progra
20ac0 6d 6d 65 72 73 20 61 72 65 20 63 61 75 74 69 6f  mmers are cautio
20ad0 6e 65 64 20 6e 6f 74 20 74 6f 20 75 73 65 20 74  ned not to use t
20ae0 68 65 20 74 77 6f 20 65 78 63 65 70 74 69 6f 6e  he two exception
20af0 73 20 64 65 73 63 72 69 62 65 64 20 69 6e 0a 74  s described in.t
20b00 68 65 20 70 72 65 76 69 6f 75 73 20 62 75 6c 6c  he previous bull
20b10 65 74 73 2e 20 20 57 65 20 65 6d 70 68 61 73 69  ets.  We emphasi
20b20 7a 65 20 74 68 61 74 20 74 68 65 79 20 65 78 69  ze that they exi
20b30 73 74 20 6f 6e 6c 79 20 73 6f 20 74 68 61 74 20  st only so that 
20b40 6f 6c 64 0a 61 6e 64 20 69 6c 6c 2d 66 6f 72 6d  old.and ill-form
20b50 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ed SQL statement
20b60 73 20 77 69 6c 6c 20 72 75 6e 20 63 6f 72 72 65  s will run corre
20b70 63 74 6c 79 2e 20 20 46 75 74 75 72 65 20 76 65  ctly.  Future ve
20b80 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65  rsions of.SQLite
20b90 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 74 6f   might change to
20ba0 20 72 61 69 73 65 20 65 72 72 6f 72 73 20 69 6e   raise errors in
20bb0 73 74 65 61 64 20 6f 66 20 61 63 63 65 70 74 69  stead of accepti
20bc0 6e 67 20 74 68 65 20 6d 61 6c 66 6f 72 6d 65 64  ng the malformed
20bd0 0a 73 74 61 74 65 6d 65 6e 74 73 20 63 6f 76 65  .statements cove
20be0 72 65 64 20 62 79 20 74 68 65 20 65 78 63 65 70  red by the excep
20bf0 74 69 6f 6e 73 20 61 62 6f 76 65 2e 3c 2f 70 3e  tions above.</p>
20c00 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 61 64 64  ..<p>.SQLite add
20c10 73 20 6e 65 77 20 6b 65 79 77 6f 72 64 73 20 66  s new keywords f
20c20 72 6f 6d 20 74 69 6d 65 20 74 6f 20 74 69 6d 65  rom time to time
20c30 20 77 68 65 6e 20 69 74 20 74 61 6b 65 73 20 6f   when it takes o
20c40 6e 20 6e 65 77 20 66 65 61 74 75 72 65 73 2e 0a  n new features..
20c50 53 6f 20 74 6f 20 70 72 65 76 65 6e 74 20 79 6f  So to prevent yo
20c60 75 72 20 63 6f 64 65 20 66 72 6f 6d 20 62 65 69  ur code from bei
20c70 6e 67 20 62 72 6f 6b 65 6e 20 62 79 20 66 75 74  ng broken by fut
20c80 75 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73  ure enhancements
20c90 2c 20 79 6f 75 20 73 68 6f 75 6c 64 0a 6e 6f 72  , you should.nor
20ca0 6d 61 6c 6c 79 20 71 75 6f 74 65 20 61 6e 79 20  mally quote any 
20cb0 69 64 65 6e 74 69 66 69 65 72 20 74 68 61 74 20  identifier that 
20cc0 69 73 20 61 6e 20 45 6e 67 6c 69 73 68 20 6c 61  is an English la
20cd0 6e 67 75 61 67 65 20 77 6f 72 64 2c 20 65 76 65  nguage word, eve
20ce0 6e 20 69 66 0a 79 6f 75 20 64 6f 20 6e 6f 74 20  n if.you do not 
20cf0 68 61 76 65 20 74 6f 2e 0a 3c 2f 70 3e 0a 0a 3c  have to..</p>..<
20d00 70 3e 0a 54 68 65 20 6c 69 73 74 20 62 65 6c 6f  p>.The list belo
20d10 77 20 73 68 6f 77 73 20 61 6c 6c 20 70 6f 73 73  w shows all poss
20d20 69 62 6c 65 20 6b 65 79 77 6f 72 64 73 20 75 73  ible keywords us
20d30 65 64 20 62 79 20 61 6e 79 20 62 75 69 6c 64 20  ed by any build 
20d40 6f 66 0a 53 51 4c 69 74 65 20 72 65 67 61 72 64  of.SQLite regard
20d50 6c 65 73 73 20 6f 66 20 5b 63 6f 6d 70 69 6c 65  less of [compile
20d60 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 5d 2e 20  -time options]. 
20d70 20 0a 4d 6f 73 74 20 72 65 61 73 6f 6e 61 62 6c   .Most reasonabl
20d80 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73  e configurations
20d90 20 75 73 65 20 6d 6f 72 65 20 6f 72 20 61 6c 6c   use more or all
20da0 20 6f 66 20 74 68 65 73 65 20 6b 65 79 77 6f 72   of these keywor
20db0 64 73 2c 0a 62 75 74 20 73 6f 6d 65 20 6b 65 79  ds,.but some key
20dc0 77 6f 72 64 73 20 6d 61 79 20 62 65 20 6f 6d 69  words may be omi
20dd0 74 74 65 64 20 77 68 65 6e 20 53 51 4c 20 6c 61  tted when SQL la
20de0 6e 67 75 61 67 65 20 66 65 61 74 75 72 65 73 20  nguage features 
20df0 61 72 65 0a 64 69 73 61 62 6c 65 64 2e 0a 5e 28  are.disabled..^(
20e00 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68  Regardless of th
20e10 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63  e compile-time c
20e20 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 61 6e  onfiguration, an
20e30 79 20 69 64 65 6e 74 69 66 69 65 72 20 74 68 61  y identifier tha
20e40 74 20 69 73 20 6e 6f 74 20 6f 6e 0a 74 68 65 20  t is not on.the 
20e50 66 6f 6c 6c 6f 77 69 6e 67 20 3c 74 63 6c 3e 68  following <tcl>h
20e60 64 5f 70 75 74 73 20 5b 6c 6c 65 6e 67 74 68 20  d_puts [llength 
20e70 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74 5d 3c 2f  $keyword_list]</
20e80 74 63 6c 3e 20 65 6c 65 6d 65 6e 74 0a 6c 69 73  tcl> element.lis
20e90 74 20 69 73 20 6e 6f 74 20 61 20 6b 65 79 77 6f  t is not a keywo
20ea0 72 64 20 74 6f 20 74 68 65 20 53 51 4c 20 70 61  rd to the SQL pa
20eb0 72 73 65 72 20 69 6e 20 53 51 4c 69 74 65 3a 0a  rser in SQLite:.
20ec0 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
20ed0 65 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d  e>.<table width=
20ee0 22 31 30 30 25 22 3e 3c 74 72 3e 0a 3c 74 64 20  "100%"><tr>.<td 
20ef0 61 6c 69 67 6e 3d 22 6c 65 66 74 22 20 76 61 6c  align="left" val
20f00 69 67 6e 3d 22 74 6f 70 22 20 77 69 64 74 68 3d  ign="top" width=
20f10 22 32 30 25 22 3e 0a 3c 74 63 6c 3e 0a 73 65 74  "20%">.<tcl>.set
20f20 20 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79   n [llength $key
20f30 77 6f 72 64 5f 6c 69 73 74 5d 0a 73 65 74 20 6e  word_list].set n
20f40 43 6f 6c 20 35 0a 73 65 74 20 6e 52 6f 77 20 5b  Col 5.set nRow [
20f50 65 78 70 72 20 7b 28 24 6e 2b 24 6e 43 6f 6c 2d  expr {($n+$nCol-
20f60 31 29 2f 24 6e 43 6f 6c 7d 5d 0a 73 65 74 20 69  1)/$nCol}].set i
20f70 20 30 0a 66 6f 72 65 61 63 68 20 77 6f 72 64 20   0.foreach word 
20f80 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20 7b 0a  $keyword_list {.
20f90 20 20 69 66 20 7b 24 69 3d 3d 24 6e 52 6f 77 7d    if {$i==$nRow}
20fa0 20 7b 0a 20 20 20 20 68 64 5f 70 75 74 73 20 22   {.    hd_puts "
20fb0 3c 2f 74 64 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  </td><td valign=
20fc0 5c 22 74 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22  \"top\" align=\"
20fd0 6c 65 66 74 5c 22 20 77 69 64 74 68 3d 5c 22 32  left\" width=\"2
20fe0 30 25 5c 22 3e 22 0a 20 20 20 20 73 65 74 20 69  0%\">".    set i
20ff0 20 31 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20   1.  } else {.  
21000 20 20 69 6e 63 72 20 69 0a 20 20 7d 0a 20 20 68    incr i.  }.  h
21010 64 5f 70 75 74 73 20 22 24 77 6f 72 64 3c 62 72  d_puts "$word<br
21020 3e 5c 6e 22 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f  >\n".}.</tcl>.</
21030 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e  td></tr></table>
21040 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.