Documentation Source Text

Hex Artifact Content
Login

Artifact 19ba7f687dea9245abf0cb3cd12a9290b139ce6e:


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 65 78 65 63  ], [sqlite3_exec
0980: 28 29 5d 2c 20 61 6e 64 20 5b 73 71 6c 69 74 65  ()], and [sqlite
0990: 33 5f 67 65 74 5f 74 61 62 6c 65 28 29 5d 20 61  3_get_table()] a
09a0: 63 63 65 70 74 0a 61 6e 20 53 51 4c 20 73 74 61  ccept.an SQL sta
09b0: 74 65 6d 65 6e 74 20 6c 69 73 74 20 28 73 71 6c  tement list (sql
09c0: 2d 73 74 6d 74 2d 6c 69 73 74 29 20 77 68 69 63  -stmt-list) whic
09d0: 68 20 69 73 20 61 20 73 65 6d 69 63 6f 6c 6f 6e  h is a semicolon
09e0: 2d 73 65 70 61 72 61 74 65 64 0a 6c 69 73 74 20  -separated.list 
09f0: 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 3c 2f  of statements.</
0a00: 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44  p>..<tcl>BubbleD
0a10: 69 61 67 72 61 6d 20 73 71 6c 2d 73 74 6d 74 2d  iagram sql-stmt-
0a20: 6c 69 73 74 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 45  list</tcl>..<p>E
0a30: 61 63 68 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ach SQL statemen
0a40: 74 20 69 6e 20 74 68 65 20 73 74 61 74 65 6d 65  t in the stateme
0a50: 6e 74 20 6c 69 73 74 20 69 73 20 61 6e 20 69 6e  nt list is an in
0a60: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 0a 66 6f  stance of the.fo
0a70: 6c 6c 6f 77 69 6e 67 3a 3c 2f 70 3e 0a 0a 3c 74  llowing:</p>..<t
0a80: 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d  cl>BubbleDiagram
0a90: 20 73 71 6c 2d 73 74 6d 74 3c 2f 74 63 6c 3e 0a   sql-stmt</tcl>.
0aa0: 0a 3c 74 63 6c 3e 0a 70 72 6f 63 20 4f 70 65 72  .<tcl>.proc Oper
0ab0: 61 74 6f 72 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20  ator {name} {.  
0ac0: 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74 20 63 6f  return "<font co
0ad0: 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30 5c 22 3e  lor=\"#2c2cf0\">
0ae0: 3c 62 69 67 3e 24 6e 61 6d 65 3c 2f 62 69 67 3e  <big>$name</big>
0af0: 3c 2f 66 6f 6e 74 3e 22 0a 7d 0a 70 72 6f 63 20  </font>".}.proc 
0b00: 4e 6f 6e 74 65 72 6d 69 6e 61 6c 20 7b 6e 61 6d  Nonterminal {nam
0b10: 65 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20 22 3c  e} {.  return "<
0b20: 69 3e 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22  i><font color=\"
0b30: 23 66 66 33 34 33 34 5c 22 3e 24 6e 61 6d 65 3c  #ff3434\">$name<
0b40: 2f 66 6f 6e 74 3e 3c 2f 69 3e 22 0a 7d 0a 70 72  /font></i>".}.pr
0b50: 6f 63 20 4b 65 79 77 6f 72 64 20 7b 6e 61 6d 65  oc Keyword {name
0b60: 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20 22 3c 66  } {.  return "<f
0b70: 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 32 63 32  ont color=\"#2c2
0b80: 63 66 30 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e  cf0\">$name</fon
0b90: 74 3e 22 0a 7d 0a 70 72 6f 63 20 45 78 61 6d 70  t>".}.proc Examp
0ba0: 6c 65 20 7b 74 65 78 74 7d 20 7b 0a 20 20 68 64  le {text} {.  hd
0bb0: 5f 70 75 74 73 20 22 3c 62 6c 6f 63 6b 71 75 6f  _puts "<blockquo
0bc0: 74 65 3e 3c 70 72 65 3e 24 74 65 78 74 3c 2f 70  te><pre>$text</p
0bd0: 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
0be0: 22 0a 7d 0a 0a 70 72 6f 63 20 53 65 63 74 69 6f  ".}..proc Sectio
0bf0: 6e 20 7b 6e 61 6d 65 20 6c 61 62 65 6c 20 6b 65  n {name label ke
0c00: 79 77 6f 72 64 73 7d 20 7b 0a 20 20 67 6c 6f 62  ywords} {.  glob
0c10: 61 6c 20 44 4f 43 0a 20 20 68 64 5f 63 6c 6f 73  al DOC.  hd_clos
0c20: 65 5f 6d 61 69 6e 0a 20 20 68 64 5f 6f 70 65 6e  e_main.  hd_open
0c30: 5f 6d 61 69 6e 20 6c 61 6e 67 5f 24 6c 61 62 65  _main lang_$labe
0c40: 6c 2e 68 74 6d 6c 0a 20 20 68 64 5f 68 65 61 64  l.html.  hd_head
0c50: 65 72 20 22 53 51 4c 69 74 65 20 51 75 65 72 79  er "SQLite Query
0c60: 20 4c 61 6e 67 75 61 67 65 3a 20 24 6e 61 6d 65   Language: $name
0c70: 22 20 24 44 4f 43 2f 70 61 67 65 73 2f 6c 61 6e  " $DOC/pages/lan
0c80: 67 2e 69 6e 0a 20 20 65 76 61 6c 20 68 64 5f 6b  g.in.  eval hd_k
0c90: 65 79 77 6f 72 64 73 20 24 6b 65 79 77 6f 72 64  eywords $keyword
0ca0: 73 0a 20 20 69 66 20 7b 5b 6c 73 65 61 72 63 68  s.  if {[lsearch
0cb0: 20 24 6b 65 79 77 6f 72 64 73 20 24 6e 61 6d 65   $keywords $name
0cc0: 5d 20 3d 3d 20 2d 31 20 26 26 20 5b 6c 73 65 61  ] == -1 && [lsea
0cd0: 72 63 68 20 24 6b 65 79 77 6f 72 64 73 20 2a 24  rch $keywords *$
0ce0: 6e 61 6d 65 5d 20 3d 3d 20 2d 31 7d 20 7b 0a 20  name] == -1} {. 
0cf0: 20 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f     eval hd_keywo
0d00: 72 64 73 20 7b 20 24 6e 61 6d 65 20 7d 0a 20 20  rds { $name }.  
0d10: 7d 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 68 31  }.  hd_puts {<h1
0d20: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
0d30: 53 51 4c 20 41 73 20 55 6e 64 65 72 73 74 6f 6f  SQL As Understoo
0d40: 64 20 42 79 20 53 51 4c 69 74 65 3c 2f 68 31 3e  d By SQLite</h1>
0d50: 7d 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 70 3e  }.  hd_puts {<p>
0d60: 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67 2e 68 74  <a href="lang.ht
0d70: 6d 6c 22 3e 5b 54 6f 70 5d 3c 2f 61 3e 3c 2f 70  ml">[Top]</a></p
0d80: 3e 7d 0a 20 20 68 64 5f 70 75 74 73 20 22 3c 68  >}.  hd_puts "<h
0d90: 32 3e 24 6e 61 6d 65 3c 2f 68 32 3e 22 0a 7d 0a  2>$name</h2>".}.
0da0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
0db0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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: 0a 53 65 63 74 69 6f 6e 20 7b 41 4c 54 45 52 20  .Section {ALTER 
0e00: 54 41 42 4c 45 7d 20 61 6c 74 65 72 74 61 62 6c  TABLE} altertabl
0e10: 65 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d  e {{ALTER TABLE}
0e20: 20 7b 2a 41 4c 54 45 52 7d 7d 0a 0a 42 75 62 62   {*ALTER}}..Bubb
0e30: 6c 65 44 69 61 67 72 61 6d 20 61 6c 74 65 72 2d  leDiagram alter-
0e40: 74 61 62 6c 65 2d 73 74 6d 74 20 31 0a 3c 2f 74  table-stmt 1.</t
0e50: 63 6c 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 73  cl>..<p>SQLite s
0e60: 75 70 70 6f 72 74 73 20 61 20 6c 69 6d 69 74 65  upports a limite
0e70: 64 20 73 75 62 73 65 74 20 6f 66 20 41 4c 54 45  d subset of ALTE
0e80: 52 20 54 41 42 4c 45 2e 0a 54 68 65 20 41 4c 54  R TABLE..The ALT
0e90: 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  ER TABLE command
0ea0: 20 69 6e 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77   in SQLite allow
0eb0: 73 20 74 68 65 20 75 73 65 72 20 74 6f 20 72 65  s the user to re
0ec0: 6e 61 6d 65 20 61 20 74 61 62 6c 65 0a 6f 72 20  name a table.or 
0ed0: 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c  to add a new col
0ee0: 75 6d 6e 20 74 6f 20 61 6e 20 65 78 69 73 74 69  umn to an existi
0ef0: 6e 67 20 74 61 62 6c 65 2e 20 49 74 20 69 73 20  ng table. It is 
0f00: 6e 6f 74 20 70 6f 73 73 69 62 6c 65 0a 74 6f 20  not possible.to 
0f10: 72 65 6e 61 6d 65 20 61 20 63 6f 6c 75 6d 6e 2c  rename a column,
0f20: 20 72 65 6d 6f 76 65 20 61 20 63 6f 6c 75 6d 6e   remove a column
0f30: 2c 20 6f 72 20 61 64 64 20 6f 72 20 72 65 6d 6f  , or add or remo
0f40: 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66  ve constraints f
0f50: 72 6f 6d 20 61 20 74 61 62 6c 65 2e 0a 3c 2f 70  rom a table..</p
0f60: 3e 0a 0a 3c 70 3e 20 5e 28 54 68 65 20 52 45 4e  >..<p> ^(The REN
0f70: 41 4d 45 20 54 4f 20 73 79 6e 74 61 78 20 69 73  AME TO syntax is
0f80: 20 75 73 65 64 20 74 6f 20 72 65 6e 61 6d 65 20   used to rename 
0f90: 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e 74 69  the table identi
0fa0: 66 69 65 64 20 62 79 20 0a 3c 69 3e 26 23 39 31  fied by .<i>&#91
0fb0: 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 2e 26  ;database-name.&
0fc0: 23 39 33 3b 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  #93;table-name</
0fd0: 69 3e 20 74 6f 20 3c 69 3e 6e 65 77 2d 74 61 62  i> to <i>new-tab
0fe0: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 0a 54  le-name</i>.)^.T
0ff0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 0a 63 61 6e  his command .can
1000: 6e 6f 74 20 62 65 20 75 73 65 64 20 74 6f 20 6d  not be used to m
1010: 6f 76 65 20 61 20 74 61 62 6c 65 20 62 65 74 77  ove a table betw
1020: 65 65 6e 20 61 74 74 61 63 68 65 64 20 64 61 74  een attached dat
1030: 61 62 61 73 65 73 2c 20 6f 6e 6c 79 20 74 6f 20  abases, only to 
1040: 72 65 6e 61 6d 65 20 0a 61 20 74 61 62 6c 65 20  rename .a table 
1050: 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
1060: 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c  database.</p>..<
1070: 70 3e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65  p> ^If the table
1080: 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 20 68   being renamed h
1090: 61 73 20 74 72 69 67 67 65 72 73 20 6f 72 20 69  as triggers or i
10a0: 6e 64 69 63 65 73 2c 20 74 68 65 6e 20 74 68 65  ndices, then the
10b0: 73 65 20 72 65 6d 61 69 6e 0a 61 74 74 61 63 68  se remain.attach
10c0: 65 64 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  ed to the table 
10d0: 61 66 74 65 72 20 69 74 20 68 61 73 20 62 65 65  after it has bee
10e0: 6e 20 72 65 6e 61 6d 65 64 2e 20 20 5e 48 6f 77  n renamed.  ^How
10f0: 65 76 65 72 2c 20 69 66 20 74 68 65 72 65 20 61  ever, if there a
1100: 72 65 0a 61 6e 79 20 76 69 65 77 20 64 65 66 69  re.any view defi
1110: 6e 69 74 69 6f 6e 73 2c 20 6f 72 20 73 74 61 74  nitions, or stat
1120: 65 6d 65 6e 74 73 20 65 78 65 63 75 74 65 64 20  ements executed 
1130: 62 79 20 74 72 69 67 67 65 72 73 20 74 68 61 74  by triggers that
1140: 20 72 65 66 65 72 20 74 6f 0a 74 68 65 20 74 61   refer to.the ta
1150: 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d 65  ble being rename
1160: 64 2c 20 74 68 65 73 65 20 61 72 65 20 6e 6f 74  d, these are not
1170: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 6d   automatically m
1180: 6f 64 69 66 69 65 64 20 74 6f 20 75 73 65 20 74  odified to use t
1190: 68 65 20 6e 65 77 0a 74 61 62 6c 65 20 6e 61 6d  he new.table nam
11a0: 65 2e 20 49 66 20 74 68 69 73 20 69 73 20 72 65  e. If this is re
11b0: 71 75 69 72 65 64 2c 20 74 68 65 20 74 72 69 67  quired, the trig
11c0: 67 65 72 73 20 6f 72 20 76 69 65 77 20 64 65 66  gers or view def
11d0: 69 6e 69 74 69 6f 6e 73 20 6d 75 73 74 20 62 65  initions must be
11e0: 0a 64 72 6f 70 70 65 64 20 61 6e 64 20 72 65 63  .dropped and rec
11f0: 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74 68  reated to use th
1200: 65 20 6e 65 77 20 74 61 62 6c 65 20 6e 61 6d 65  e new table name
1210: 20 62 79 20 68 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a   by hand..</p>..
1220: 3c 70 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20  <p>^If [foreign 
1230: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d  key constraints]
1240: 20 61 72 65 20 0a 5b 66 6f 72 65 69 67 6e 5f 6b   are .[foreign_k
1250: 65 79 73 20 70 72 61 67 6d 61 20 7c 20 65 6e 61  eys pragma | ena
1260: 62 6c 65 64 5d 20 77 68 65 6e 20 61 20 74 61 62  bled] when a tab
1270: 6c 65 20 69 73 20 72 65 6e 61 6d 65 64 2c 20 74  le is renamed, t
1280: 68 65 6e 20 61 6e 79 0a 5b 66 6f 72 65 69 67 6e  hen any.[foreign
1290: 2d 6b 65 79 2d 63 6c 61 75 73 65 20 7c 20 52 45  -key-clause | RE
12a0: 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 73  FERENCES clauses
12b0: 5d 20 69 6e 20 61 6e 79 20 74 61 62 6c 65 20 28  ] in any table (
12c0: 65 69 74 68 65 72 20 74 68 65 0a 74 61 62 6c 65  either the.table
12d0: 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 20 6f   being renamed o
12e0: 72 20 73 6f 6d 65 20 6f 74 68 65 72 20 74 61 62  r some other tab
12f0: 6c 65 29 0a 74 68 61 74 20 72 65 66 65 72 20 74  le).that refer t
1300: 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  o the table bein
1310: 67 20 72 65 6e 61 6d 65 64 20 61 72 65 20 6d 6f  g renamed are mo
1320: 64 69 66 69 65 64 20 74 6f 20 72 65 66 65 72 20  dified to refer 
1330: 0a 74 6f 20 74 68 65 20 72 65 6e 61 6d 65 64 20  .to the renamed 
1340: 74 61 62 6c 65 20 62 79 20 69 74 73 20 6e 65 77  table by its new
1350: 20 6e 61 6d 65 2e 0a 0a 3c 70 3e 20 5e 54 68 65   name...<p> ^The
1360: 20 41 44 44 20 43 4f 4c 55 4d 4e 20 73 79 6e 74   ADD COLUMN synt
1370: 61 78 0a 69 73 20 75 73 65 64 20 74 6f 20 61 64  ax.is used to ad
1380: 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 74  d a new column t
1390: 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61  o an existing ta
13a0: 62 6c 65 2e 0a 5e 54 68 65 20 6e 65 77 20 63 6f  ble..^The new co
13b0: 6c 75 6d 6e 20 69 73 20 61 6c 77 61 79 73 20 61  lumn is always a
13c0: 70 70 65 6e 64 65 64 20 74 6f 20 74 68 65 20 65  ppended to the e
13d0: 6e 64 20 6f 66 20 74 68 65 20 6c 69 73 74 20 6f  nd of the list o
13e0: 66 20 65 78 69 73 74 69 6e 67 20 63 6f 6c 75 6d  f existing colum
13f0: 6e 73 2e 0a 54 68 65 20 5b 63 6f 6c 75 6d 6e 2d  ns..The [column-
1400: 64 65 66 5d 20 72 75 6c 65 20 64 65 66 69 6e 65  def] rule define
1410: 73 20 74 68 65 20 63 68 61 72 61 63 74 65 72 69  s the characteri
1420: 73 74 69 63 73 20 6f 66 20 74 68 65 20 6e 65 77  stics of the new
1430: 20 63 6f 6c 75 6d 6e 2e 0a 5e 28 54 68 65 20 6e   column..^(The n
1440: 65 77 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 74 61  ew column may ta
1450: 6b 65 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f  ke any of the fo
1460: 72 6d 73 20 70 65 72 6d 69 73 73 61 62 6c 65 20  rms permissable 
1470: 69 6e 20 61 20 5b 43 52 45 41 54 45 20 54 41 42  in a [CREATE TAB
1480: 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 2c 20 77  LE].statement, w
1490: 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ith the followin
14a0: 67 20 72 65 73 74 72 69 63 74 69 6f 6e 73 3a 29  g restrictions:)
14b0: 5e 0a 3c 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65 20  ^.<ul>.<li>^The 
14c0: 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 68  column may not h
14d0: 61 76 65 20 61 20 50 52 49 4d 41 52 59 20 4b 45  ave a PRIMARY KE
14e0: 59 20 6f 72 20 55 4e 49 51 55 45 20 63 6f 6e 73  Y or UNIQUE cons
14f0: 74 72 61 69 6e 74 2e 3c 2f 6c 69 3e 0a 3c 6c 69  traint.</li>.<li
1500: 3e 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79  >^The column may
1510: 20 6e 6f 74 20 68 61 76 65 20 61 20 64 65 66 61   not have a defa
1520: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 43 55 52  ult value of CUR
1530: 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45  RENT_TIME, CURRE
1540: 4e 54 5f 44 41 54 45 20 0a 20 20 20 20 6f 72 20  NT_DATE .    or 
1550: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
1560: 50 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 5e 49 66 20  P.</li>.<li>^If 
1570: 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  a NOT NULL const
1580: 72 61 69 6e 74 20 69 73 20 73 70 65 63 69 66 69  raint is specifi
1590: 65 64 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c  ed, then the col
15a0: 75 6d 6e 20 6d 75 73 74 20 68 61 76 65 20 61 0a  umn must have a.
15b0: 20 20 20 20 64 65 66 61 75 6c 74 20 76 61 6c 75      default valu
15c0: 65 20 6f 74 68 65 72 20 74 68 61 6e 20 4e 55 4c  e other than NUL
15d0: 4c 2e 0a 3c 6c 69 3e 5e 49 66 20 5b 66 6f 72 65  L..<li>^If [fore
15e0: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
15f0: 6e 74 73 5d 20 61 72 65 20 5b 66 6f 72 65 69 67  nts] are [foreig
1600: 6e 5f 6b 65 79 73 20 70 72 61 67 6d 61 20 7c 20  n_keys pragma | 
1610: 65 6e 61 62 6c 65 64 5d 20 61 6e 64 0a 20 20 20  enabled] and.   
1620: 20 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 61   a column with a
1630: 20 5b 66 6f 72 65 69 67 6e 2d 6b 65 79 2d 63 6c   [foreign-key-cl
1640: 61 75 73 65 20 7c 20 52 45 46 45 52 45 4e 43 45  ause | REFERENCE
1650: 53 20 63 6c 61 75 73 65 5d 0a 20 20 20 20 69 73  S clause].    is
1660: 20 61 64 64 65 64 2c 20 74 68 65 20 63 6f 6c 75   added, the colu
1670: 6d 6e 20 6d 75 73 74 20 68 61 76 65 20 61 20 64  mn must have a d
1680: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
1690: 4e 55 4c 4c 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e  NULL..</ul>..<p>
16a0: 5e 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20  ^Note also that 
16b0: 77 68 65 6e 20 61 64 64 69 6e 67 20 61 20 43 48  when adding a CH
16c0: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20  ECK constraint, 
16d0: 74 68 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  the CHECK constr
16e0: 61 69 6e 74 0a 69 73 20 6e 6f 74 20 74 65 73 74  aint.is not test
16f0: 65 64 20 61 67 61 69 6e 73 74 20 70 72 65 65 78  ed against preex
1700: 69 73 74 69 6e 67 20 72 6f 77 73 20 6f 66 20 74  isting rows of t
1710: 68 65 20 74 61 62 6c 65 2e 0a 5e 54 68 69 73 20  he table..^This 
1720: 63 61 6e 20 72 65 73 75 6c 74 20 69 6e 20 61 20  can result in a 
1730: 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61  table that conta
1740: 69 6e 73 20 64 61 74 61 20 74 68 61 74 0a 69 73  ins data that.is
1750: 20 69 6e 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 66   in violation of
1760: 20 74 68 65 20 43 48 45 43 4b 20 63 6f 6e 73 74   the CHECK const
1770: 72 61 69 6e 74 2e 20 20 46 75 74 75 72 65 20 76  raint.  Future v
1780: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
1790: 65 20 6d 69 67 68 74 0a 63 68 61 6e 67 65 20 74  e might.change t
17a0: 6f 20 76 61 6c 69 64 61 74 65 20 43 48 45 43 4b  o validate CHECK
17b0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 73 20   constraints as 
17c0: 74 68 65 79 20 61 72 65 20 61 64 64 65 64 2e 3c  they are added.<
17d0: 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 65 78  /p>..<p> ^The ex
17e0: 65 63 75 74 69 6f 6e 20 74 69 6d 65 20 6f 66 20  ecution time of 
17f0: 74 68 65 20 41 4c 54 45 52 20 54 41 42 4c 45 20  the ALTER TABLE 
1800: 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e 64 65 70  command is indep
1810: 65 6e 64 65 6e 74 20 6f 66 0a 74 68 65 20 61 6d  endent of.the am
1820: 6f 75 6e 74 20 6f 66 20 64 61 74 61 20 69 6e 20  ount of data in 
1830: 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20  the table.  The 
1840: 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d  ALTER TABLE comm
1850: 61 6e 64 20 72 75 6e 73 20 61 73 20 71 75 69 63  and runs as quic
1860: 6b 6c 79 0a 6f 6e 20 61 20 74 61 62 6c 65 20 77  kly.on a table w
1870: 69 74 68 20 31 30 20 6d 69 6c 6c 69 6f 6e 20 72  ith 10 million r
1880: 6f 77 73 20 61 73 20 69 74 20 64 6f 65 73 20 6f  ows as it does o
1890: 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 31  n a table with 1
18a0: 20 72 6f 77 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 41   row..</p>..<p>A
18b0: 66 74 65 72 20 41 44 44 20 43 4f 4c 55 4d 4e 20  fter ADD COLUMN 
18c0: 68 61 73 20 62 65 65 6e 20 72 75 6e 20 6f 6e 20  has been run on 
18d0: 61 20 64 61 74 61 62 61 73 65 2c 20 74 68 61 74  a database, that
18e0: 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c 20 6e   database will n
18f0: 6f 74 0a 62 65 20 72 65 61 64 61 62 6c 65 20 62  ot.be readable b
1900: 79 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  y SQLite version
1910: 20 33 2e 31 2e 33 20 61 6e 64 20 65 61 72 6c 69   3.1.3 and earli
1920: 65 72 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  er.</p>..<tcl>.#
1930: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1940: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1950: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1960: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1970: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
1980: 63 74 69 6f 6e 20 7b 41 4e 41 4c 59 5a 45 7d 20  ction {ANALYZE} 
1990: 61 6e 61 6c 79 7a 65 20 41 4e 41 4c 59 5a 45 0a  analyze ANALYZE.
19a0: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61  .BubbleDiagram a
19b0: 6e 61 6c 79 7a 65 2d 73 74 6d 74 20 31 0a 3c 2f  nalyze-stmt 1.</
19c0: 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41  tcl>..<p> ^The A
19d0: 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 67  NALYZE command g
19e0: 61 74 68 65 72 73 20 73 74 61 74 69 73 74 69 63  athers statistic
19f0: 73 20 61 62 6f 75 74 20 69 6e 64 69 63 65 73 20  s about indices 
1a00: 61 6e 64 20 73 74 6f 72 65 73 20 74 68 65 6d 0a  and stores them.
1a10: 69 6e 20 61 20 73 70 65 63 69 61 6c 20 74 61 62  in a special tab
1a20: 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  les in the datab
1a30: 61 73 65 20 77 68 65 72 65 20 74 68 65 20 71 75  ase where the qu
1a40: 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 63 61  ery optimizer ca
1a50: 6e 20 75 73 65 0a 74 68 65 6d 20 74 6f 20 68 65  n use.them to he
1a60: 6c 70 20 6d 61 6b 65 20 62 65 74 74 65 72 20 69  lp make better i
1a70: 6e 64 65 78 20 63 68 6f 69 63 65 73 2e 0a 5e 49  ndex choices..^I
1a80: 66 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 20 61  f no arguments a
1a90: 72 65 20 67 69 76 65 6e 2c 20 61 6c 6c 20 69 6e  re given, all in
1aa0: 64 69 63 65 73 20 69 6e 20 61 6c 6c 20 61 74 74  dices in all att
1ab0: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20  ached databases 
1ac0: 61 72 65 0a 61 6e 61 6c 79 7a 65 64 2e 20 20 5e  are.analyzed.  ^
1ad0: 49 66 20 61 20 64 61 74 61 62 61 73 65 20 6e 61  If a database na
1ae0: 6d 65 20 69 73 20 67 69 76 65 6e 20 61 73 20 74  me is given as t
1af0: 68 65 20 61 72 67 75 6d 65 6e 74 2c 20 61 6c 6c  he argument, all
1b00: 20 69 6e 64 69 63 65 73 0a 69 6e 20 74 68 61 74   indices.in that
1b10: 20 6f 6e 65 20 64 61 74 61 62 61 73 65 20 61 72   one database ar
1b20: 65 20 61 6e 61 6c 79 7a 65 64 2e 20 20 5e 49 66  e analyzed.  ^If
1b30: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73   the argument is
1b40: 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 2c 0a 74   a table name,.t
1b50: 68 65 6e 20 6f 6e 6c 79 20 69 6e 64 69 63 65 73  hen only indices
1b60: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
1b70: 20 74 68 61 74 20 6f 6e 65 20 74 61 62 6c 65 20   that one table 
1b80: 61 72 65 20 61 6e 61 6c 79 7a 65 64 2e 3c 2f 70  are analyzed.</p
1b90: 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 64 65 66 61  >..<p> ^The defa
1ba0: 75 6c 74 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ult implementati
1bb0: 6f 6e 20 73 74 6f 72 65 73 20 61 6c 6c 20 73 74  on stores all st
1bc0: 61 74 69 73 74 69 63 73 20 69 6e 20 61 20 73 69  atistics in a si
1bd0: 6e 67 6c 65 0a 74 61 62 6c 65 20 6e 61 6d 65 64  ngle.table named
1be0: 20 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61 74 31   <b>sqlite_stat1
1bf0: 3c 2f 62 3e 2e 20 20 5e 49 66 20 53 51 4c 69 74  </b>.  ^If SQLit
1c00: 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69  e is compiled wi
1c10: 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f 45  th the.[SQLITE_E
1c20: 4e 41 42 4c 45 5f 53 54 41 54 32 5d 20 6f 70 74  NABLE_STAT2] opt
1c30: 69 6f 6e 2c 20 74 68 65 6e 20 61 64 64 69 74 69  ion, then additi
1c40: 6f 6e 61 6c 20 68 69 73 74 6f 67 72 61 6d 20 64  onal histogram d
1c50: 61 74 61 20 69 73 0a 63 6f 6c 6c 65 63 74 65 64  ata is.collected
1c60: 20 61 6e 64 20 73 74 6f 72 65 64 20 69 6e 20 3c   and stored in <
1c70: 62 3e 73 71 6c 69 74 65 5f 73 74 61 74 32 3c 2f  b>sqlite_stat2</
1c80: 62 3e 2e 0a 46 75 74 75 72 65 20 65 6e 68 61 6e  b>..Future enhan
1c90: 63 65 6d 65 6e 74 73 20 6d 61 79 20 63 72 65 61  cements may crea
1ca0: 74 65 0a 61 64 64 69 74 69 6f 6e 61 6c 20 74 61  te.additional ta
1cb0: 62 6c 65 73 20 77 69 74 68 20 74 68 65 20 73 61  bles with the sa
1cc0: 6d 65 20 6e 61 6d 65 20 70 61 74 74 65 72 6e 20  me name pattern 
1cd0: 65 78 63 65 70 74 20 77 69 74 68 20 74 68 65 20  except with the 
1ce0: 22 31 22 0a 6f 72 20 22 32 22 20 63 68 61 6e 67  "1".or "2" chang
1cf0: 65 64 20 74 6f 20 61 20 64 69 66 66 65 72 65 6e  ed to a differen
1d00: 74 20 64 69 67 69 74 2e 3c 2f 70 3e 0a 0a 3c 70  t digit.</p>..<p
1d10: 3e 20 5e 54 68 65 20 5b 44 52 4f 50 20 54 41 42  > ^The [DROP TAB
1d20: 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73  LE] command does
1d30: 0a 6e 6f 74 20 77 6f 72 6b 20 6f 6e 20 74 68 65  .not work on the
1d40: 20 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61 74 31   <b>sqlite_stat1
1d50: 3c 2f 62 3e 20 6f 72 20 3c 62 3e 73 71 6c 69 74  </b> or <b>sqlit
1d60: 65 5f 73 74 61 74 32 3c 2f 62 3e 20 74 61 62 6c  e_stat2</b> tabl
1d70: 65 73 2c 0a 62 75 74 20 61 6c 6c 20 74 68 65 20  es,.but all the 
1d80: 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 6f 73 65  content of those
1d90: 20 74 61 62 6c 65 73 20 63 61 6e 20 62 65 20 71   tables can be q
1da0: 75 65 72 69 65 64 20 75 73 69 6e 67 20 5b 53 45  ueried using [SE
1db0: 4c 45 43 54 5d 0a 61 6e 64 20 63 61 6e 20 62 65  LECT].and can be
1dc0: 20 64 65 6c 65 74 65 64 2c 20 61 75 67 6d 65 6e   deleted, augmen
1dd0: 74 65 64 2c 20 6f 72 20 6d 6f 64 69 66 69 65 64  ted, or modified
1de0: 20 75 73 69 6e 67 20 74 68 65 20 5b 44 45 4c 45   using the [DELE
1df0: 54 45 5d 2c 0a 5b 49 4e 53 45 52 54 5d 2c 20 61  TE],.[INSERT], a
1e00: 6e 64 20 5b 55 50 44 41 54 45 5d 20 63 6f 6d 6d  nd [UPDATE] comm
1e10: 61 6e 64 73 2e 0a 41 70 70 72 6f 70 72 69 61 74  ands..Appropriat
1e20: 65 20 63 61 72 65 20 73 68 6f 75 6c 64 20 62 65  e care should be
1e30: 20 75 73 65 64 20 77 68 65 6e 20 63 68 61 6e 67   used when chang
1e40: 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ing the content 
1e50: 6f 66 20 74 68 65 20 73 74 61 74 69 73 74 69 63  of the statistic
1e60: 73 0a 74 61 62 6c 65 73 20 61 73 20 69 6e 76 61  s.tables as inva
1e70: 6c 69 64 20 63 6f 6e 74 65 6e 74 20 63 61 6e 20  lid content can 
1e80: 63 61 75 73 65 20 53 51 4c 69 74 65 20 74 6f 20  cause SQLite to 
1e90: 73 65 6c 65 63 74 20 69 6e 65 66 66 69 63 69 65  select inefficie
1ea0: 6e 74 0a 71 75 65 72 79 20 70 6c 61 6e 73 2e 20  nt.query plans. 
1eb0: 20 47 65 6e 65 72 61 6c 6c 79 20 73 70 65 61 6b   Generally speak
1ec0: 69 6e 67 2c 20 6f 6e 65 20 73 68 6f 75 6c 64 20  ing, one should 
1ed0: 6e 6f 74 20 6d 6f 64 69 66 79 20 74 68 65 20 63  not modify the c
1ee0: 6f 6e 74 65 6e 74 20 6f 66 0a 74 68 65 20 73 74  ontent of.the st
1ef0: 61 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 20  atistics tables 
1f00: 62 79 20 61 6e 79 20 6d 65 63 68 61 6e 69 73 6d  by any mechanism
1f10: 20 6f 74 68 65 72 20 74 68 61 6e 20 69 6e 76 6f   other than invo
1f20: 6b 69 6e 67 20 74 68 65 0a 41 4e 41 4c 59 5a 45  king the.ANALYZE
1f30: 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c   command.</p>..<
1f40: 70 3e 20 5e 53 74 61 74 69 73 74 69 63 73 20 67  p> ^Statistics g
1f50: 61 74 68 65 72 65 64 20 62 79 20 41 4e 41 4c 59  athered by ANALY
1f60: 5a 45 20 61 72 65 20 3c 75 3e 6e 6f 74 3c 2f 75  ZE are <u>not</u
1f70: 3e 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  > automatically 
1f80: 75 70 64 61 74 65 64 20 61 73 0a 74 68 65 20 63  updated as.the c
1f90: 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 64 61  ontent of the da
1fa0: 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 2e 20  tabase changes. 
1fb0: 20 49 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   If the content 
1fc0: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  of the database.
1fd0: 63 68 61 6e 67 65 73 20 73 69 67 6e 69 66 69 63  changes signific
1fe0: 61 6e 74 6c 79 2c 20 6f 72 20 69 66 20 74 68 65  antly, or if the
1ff0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
2000: 20 63 68 61 6e 67 65 73 2c 20 74 68 65 6e 20 6f   changes, then o
2010: 6e 65 20 73 68 6f 75 6c 64 0a 63 6f 6e 73 69 64  ne should.consid
2020: 65 72 20 72 65 72 75 6e 6e 69 6e 67 20 74 68 65  er rerunning the
2030: 20 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64   ANALYZE command
2040: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 75 70 64   in order to upd
2050: 61 74 65 20 74 68 65 20 73 74 61 74 69 73 74 69  ate the statisti
2060: 63 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  cs.</p>..<tcl>.#
2070: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2080: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2090: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
20c0: 63 74 69 6f 6e 20 7b 41 54 54 41 43 48 20 44 41  ction {ATTACH DA
20d0: 54 41 42 41 53 45 7d 20 61 74 74 61 63 68 20 2a  TABASE} attach *
20e0: 41 54 54 41 43 48 0a 0a 42 75 62 62 6c 65 44 69  ATTACH..BubbleDi
20f0: 61 67 72 61 6d 20 61 74 74 61 63 68 2d 73 74 6d  agram attach-stm
2100: 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20  t 1.</tcl>..<p> 
2110: 5e 54 68 65 20 41 54 54 41 43 48 20 44 41 54 41  ^The ATTACH DATA
2120: 42 41 53 45 20 73 74 61 74 65 6d 65 6e 74 20 61  BASE statement a
2130: 64 64 73 20 61 6e 6f 74 68 65 72 20 64 61 74 61  dds another data
2140: 62 61 73 65 20 0a 66 69 6c 65 20 74 6f 20 74 68  base .file to th
2150: 65 20 63 75 72 72 65 6e 74 20 5b 64 61 74 61 62  e current [datab
2160: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 2e  ase connection].
2170: 20 0a 5e 54 68 65 20 64 61 74 61 62 61 73 65 2d   .^The database-
2180: 6e 61 6d 65 73 20 27 6d 61 69 6e 27 20 61 6e 64  names 'main' and
2190: 20 0a 27 74 65 6d 70 27 20 72 65 66 65 72 20 74   .'temp' refer t
21a0: 6f 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  o the main datab
21b0: 61 73 65 20 61 6e 64 20 74 68 65 20 64 61 74 61  ase and the data
21c0: 62 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a 74  base used for .t
21d0: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
21e0: 20 20 5e 54 68 65 20 6d 61 69 6e 20 61 6e 64 20    ^The main and 
21f0: 74 65 6d 70 20 64 61 74 61 62 61 73 65 73 20 63  temp databases c
2200: 61 6e 6e 6f 74 20 62 65 20 61 74 74 61 63 68 65  annot be attache
2210: 64 20 6f 72 0a 64 65 74 61 63 68 65 64 2e 3c 2f  d or.detached.</
2220: 70 3e 0a 0a 3c 70 3e 20 5e 59 6f 75 20 63 61 6e  p>..<p> ^You can
2230: 6e 6f 74 20 63 72 65 61 74 65 20 61 20 6e 65 77  not create a new
2240: 20 74 61 62 6c 65 20 77 69 74 68 20 74 68 65 20   table with the 
2250: 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61 20 74  same name as a t
2260: 61 62 6c 65 20 69 6e 20 0a 61 6e 20 61 74 74 61  able in .an atta
2270: 63 68 65 64 20 64 61 74 61 62 61 73 65 2c 20 62  ched database, b
2280: 75 74 20 79 6f 75 20 63 61 6e 20 61 74 74 61 63  ut you can attac
2290: 68 20 61 20 64 61 74 61 62 61 73 65 20 77 68 69  h a database whi
22a0: 63 68 20 63 6f 6e 74 61 69 6e 73 0a 74 61 62 6c  ch contains.tabl
22b0: 65 73 20 77 68 6f 73 65 20 6e 61 6d 65 73 20 61  es whose names a
22c0: 72 65 20 64 75 70 6c 69 63 61 74 65 73 20 6f 66  re duplicates of
22d0: 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 6d   tables in the m
22e0: 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 5e  ain database.  ^
22f0: 49 66 0a 74 68 65 20 73 79 73 74 65 6d 20 69 73  If.the system is
2300: 20 6e 6f 74 20 72 75 6e 6e 69 6e 67 20 69 6e 20   not running in 
2310: 5b 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f  [shared cache mo
2320: 64 65 5d 2c 20 69 74 20 69 73 20 61 6c 73 6f 20  de], it is also 
2330: 70 65 72 6d 69 73 73 69 62 6c 65 20 0a 74 6f 20  permissible .to 
2340: 61 74 74 61 63 68 20 74 68 65 20 73 61 6d 65 20  attach the same 
2350: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 75  database file mu
2360: 6c 74 69 70 6c 65 20 74 69 6d 65 73 2e 3c 2f 70  ltiple times.</p
2370: 3e 0a 0a 3c 70 3e 20 5e 28 54 61 62 6c 65 73 20  >..<p> ^(Tables 
2380: 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  in an attached d
2390: 61 74 61 62 61 73 65 20 63 61 6e 20 62 65 20 72  atabase can be r
23a0: 65 66 65 72 72 65 64 20 74 6f 20 75 73 69 6e 67  eferred to using
23b0: 20 74 68 65 20 73 79 6e 74 61 78 20 0a 3c 69 3e   the syntax .<i>
23c0: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 2e 74 61  database-name.ta
23d0: 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 20  ble-name</i>.)^ 
23e0: 20 5e 49 66 20 74 68 65 20 6e 61 6d 65 20 6f 66   ^If the name of
23f0: 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 75 6e   the table is un
2400: 69 71 75 65 0a 61 63 72 6f 73 73 20 61 6c 6c 20  ique.across all 
2410: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
2420: 65 73 20 61 6e 64 20 74 68 65 20 6d 61 69 6e 20  es and the main 
2430: 61 6e 64 20 74 65 6d 70 20 64 61 74 61 62 61 73  and temp databas
2440: 65 73 2c 20 74 68 65 6e 20 74 68 65 0a 3c 69 3e  es, then the.<i>
2450: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69  database-name</i
2460: 3e 20 70 72 65 66 69 78 20 69 73 20 6e 6f 74 20  > prefix is not 
2470: 72 65 71 75 69 72 65 64 2e 20 20 5e 57 68 65 6e  required.  ^When
2480: 20 61 20 64 61 74 61 62 61 73 65 20 69 73 20 61   a database is a
2490: 74 74 61 63 68 65 64 2c 20 0a 61 6c 6c 20 74 61  ttached, .all ta
24a0: 62 6c 65 73 20 77 68 69 63 68 20 64 6f 6e 27 74  bles which don't
24b0: 20 68 61 76 65 20 64 75 70 6c 69 63 61 74 65 20   have duplicate 
24c0: 6e 61 6d 65 73 20 62 65 63 6f 6d 65 20 74 68 65  names become the
24d0: 20 64 65 66 61 75 6c 74 20 74 61 62 6c 65 0a 6f   default table.o
24e0: 66 20 74 68 61 74 20 6e 61 6d 65 2e 20 20 5e 41  f that name.  ^A
24f0: 6e 79 20 74 61 62 6c 65 73 20 6f 66 20 74 68 61  ny tables of tha
2500: 74 20 6e 61 6d 65 20 61 74 74 61 63 68 65 64 20  t name attached 
2510: 61 66 74 65 72 77 61 72 64 73 20 72 65 71 75 69  afterwards requi
2520: 72 65 20 74 68 65 0a 64 61 74 61 62 61 73 65 20  re the.database 
2530: 70 72 65 66 69 78 2e 20 5e 49 66 20 74 68 65 20  prefix. ^If the 
2540: 64 65 66 61 75 6c 74 20 74 61 62 6c 65 20 6f 66  default table of
2550: 20 61 20 67 69 76 65 6e 20 6e 61 6d 65 20 69 73   a given name is
2560: 20 64 65 74 61 63 68 65 64 2c 20 74 68 65 6e 0a   detached, then.
2570: 74 68 65 20 6c 61 73 74 20 74 61 62 6c 65 20 6f  the last table o
2580: 66 20 74 68 61 74 20 6e 61 6d 65 20 61 74 74 61  f that name atta
2590: 63 68 65 64 20 62 65 63 6f 6d 65 73 20 74 68 65  ched becomes the
25a0: 20 6e 65 77 20 64 65 66 61 75 6c 74 2e 3c 2f 70   new default.</p
25b0: 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74  >..<p>.^Transact
25c0: 69 6f 6e 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d  ions involving m
25d0: 75 6c 74 69 70 6c 65 20 61 74 74 61 63 68 65 64  ultiple attached
25e0: 20 64 61 74 61 62 61 73 65 73 20 61 72 65 20 61   databases are a
25f0: 74 6f 6d 69 63 2c 0a 61 73 73 75 6d 69 6e 67 20  tomic,.assuming 
2600: 74 68 61 74 20 74 68 65 20 6d 61 69 6e 20 64 61  that the main da
2610: 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20 22 5b  tabase is not "[
2620: 3a 6d 65 6d 6f 72 79 3a 5d 22 2e 20 20 5e 28 49  :memory:]".  ^(I
2630: 66 20 74 68 65 20 6d 61 69 6e 0a 64 61 74 61 62  f the main.datab
2640: 61 73 65 20 69 73 20 22 3a 6d 65 6d 6f 72 79 3a  ase is ":memory:
2650: 22 20 74 68 65 6e 20 0a 74 72 61 6e 73 61 63 74  " then .transact
2660: 69 6f 6e 73 20 63 6f 6e 74 69 6e 75 65 20 74 6f  ions continue to
2670: 20 62 65 20 61 74 6f 6d 69 63 20 77 69 74 68 69   be atomic withi
2680: 6e 20 65 61 63 68 20 69 6e 64 69 76 69 64 75 61  n each individua
2690: 6c 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  l.database file.
26a0: 20 42 75 74 20 69 66 20 74 68 65 20 68 6f 73 74   But if the host
26b0: 20 63 6f 6d 70 75 74 65 72 20 63 72 61 73 68 65   computer crashe
26c0: 73 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 0a  s in the middle.
26d0: 6f 66 20 61 20 5b 43 4f 4d 4d 49 54 5d 20 77 68  of a [COMMIT] wh
26e0: 65 72 65 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  ere two or more 
26f0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 61  database files a
2700: 72 65 20 75 70 64 61 74 65 64 2c 0a 73 6f 6d 65  re updated,.some
2710: 20 6f 66 20 74 68 6f 73 65 20 66 69 6c 65 73 20   of those files 
2720: 6d 69 67 68 74 20 67 65 74 20 74 68 65 20 63 68  might get the ch
2730: 61 6e 67 65 73 20 77 68 65 72 65 20 6f 74 68 65  anges where othe
2740: 72 73 0a 6d 69 67 68 74 20 6e 6f 74 2e 29 5e 0a  rs.might not.)^.
2750: 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 72 65  </p>..<p> ^There
2760: 20 69 73 20 61 20 63 6f 6d 70 69 6c 65 2d 74 69   is a compile-ti
2770: 6d 65 20 6c 69 6d 69 74 20 6f 66 20 5b 53 51 4c  me limit of [SQL
2780: 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
2790: 5d 0a 61 74 74 61 63 68 65 64 20 64 61 74 61 62  ].attached datab
27a0: 61 73 65 20 66 69 6c 65 73 2e 3c 2f 70 3e 0a 0a  ase files.</p>..
27b0: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
27c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2800: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 42  #####.Section {B
2810: 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e  EGIN TRANSACTION
2820: 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 7b 2a  } transaction {*
2830: 42 45 47 49 4e 20 43 4f 4d 4d 49 54 20 52 4f 4c  BEGIN COMMIT ROL
2840: 4c 42 41 43 4b 7d 0a 0a 42 75 62 62 6c 65 44 69  LBACK}..BubbleDi
2850: 61 67 72 61 6d 20 62 65 67 69 6e 2d 73 74 6d 74  agram begin-stmt
2860: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63  .BubbleDiagram c
2870: 6f 6d 6d 69 74 2d 73 74 6d 74 0a 42 75 62 62 6c  ommit-stmt.Bubbl
2880: 65 44 69 61 67 72 61 6d 20 72 6f 6c 6c 62 61 63  eDiagram rollbac
2890: 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  k-stmt.</tcl>..<
28a0: 70 3e 0a 5e 4e 6f 20 63 68 61 6e 67 65 73 20 63  p>.^No changes c
28b0: 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68  an be made to th
28c0: 65 20 64 61 74 61 62 61 73 65 20 65 78 63 65 70  e database excep
28d0: 74 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  t within a trans
28e0: 61 63 74 69 6f 6e 2e 0a 5e 41 6e 79 20 63 6f 6d  action..^Any com
28f0: 6d 61 6e 64 20 74 68 61 74 20 63 68 61 6e 67 65  mand that change
2900: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28  s the database (
2910: 62 61 73 69 63 61 6c 6c 79 2c 20 61 6e 79 20 53  basically, any S
2920: 51 4c 20 63 6f 6d 6d 61 6e 64 0a 6f 74 68 65 72  QL command.other
2930: 20 74 68 61 6e 20 5b 53 45 4c 45 43 54 5d 29 20   than [SELECT]) 
2940: 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c  will automatical
2950: 6c 79 20 73 74 61 72 74 20 61 20 74 72 61 6e 73  ly start a trans
2960: 61 63 74 69 6f 6e 20 69 66 0a 6f 6e 65 20 69 73  action if.one is
2970: 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 69 6e 20   not already in 
2980: 65 66 66 65 63 74 2e 20 20 5e 41 75 74 6f 6d 61  effect.  ^Automa
2990: 74 69 63 61 6c 6c 79 20 73 74 61 72 74 65 64 20  tically started 
29a0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61 72 65  transactions.are
29b0: 20 63 6f 6d 6d 69 74 74 65 64 20 77 68 65 6e 20   committed when 
29c0: 74 68 65 20 6c 61 73 74 20 71 75 65 72 79 20 66  the last query f
29d0: 69 6e 69 73 68 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c  inishes..</p>..<
29e0: 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e 73  p>.^Transactions
29f0: 20 63 61 6e 20 62 65 20 73 74 61 72 74 65 64 20   can be started 
2a00: 6d 61 6e 75 61 6c 6c 79 20 75 73 69 6e 67 20 74  manually using t
2a10: 68 65 20 42 45 47 49 4e 0a 63 6f 6d 6d 61 6e 64  he BEGIN.command
2a20: 2e 20 20 5e 28 53 75 63 68 20 74 72 61 6e 73 61  .  ^(Such transa
2a30: 63 74 69 6f 6e 73 20 75 73 75 61 6c 6c 79 20 70  ctions usually p
2a40: 65 72 73 69 73 74 20 75 6e 74 69 6c 20 74 68 65  ersist until the
2a50: 20 6e 65 78 74 0a 43 4f 4d 4d 49 54 20 6f 72 20   next.COMMIT or 
2a60: 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64  ROLLBACK command
2a70: 2e 20 20 42 75 74 20 61 20 74 72 61 6e 73 61 63  .  But a transac
2a80: 74 69 6f 6e 20 77 69 6c 6c 20 61 6c 73 6f 20 0a  tion will also .
2a90: 52 4f 4c 4c 42 41 43 4b 20 69 66 20 74 68 65 20  ROLLBACK if the 
2aa0: 64 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73  database is clos
2ab0: 65 64 20 6f 72 20 69 66 20 61 6e 20 65 72 72 6f  ed or if an erro
2ac0: 72 20 6f 63 63 75 72 73 0a 61 6e 64 20 74 68 65  r occurs.and the
2ad0: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6e 66 6c 69   ROLLBACK confli
2ae0: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
2af0: 67 6f 72 69 74 68 6d 20 69 73 20 73 70 65 63 69  gorithm is speci
2b00: 66 69 65 64 2e 29 5e 0a 53 65 65 20 74 68 65 20  fied.)^.See the 
2b10: 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e  documentation on
2b20: 20 74 68 65 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43   the [ON CONFLIC
2b30: 54 5d 0a 63 6c 61 75 73 65 20 66 6f 72 20 61 64  T].clause for ad
2b40: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
2b50: 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 52  tion about the R
2b60: 4f 4c 4c 42 41 43 4b 0a 63 6f 6e 66 6c 69 63 74  OLLBACK.conflict
2b70: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
2b80: 72 69 74 68 6d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  rithm..</p>..<p>
2b90: 0a 5e 45 4e 44 20 54 52 41 4e 53 41 43 54 49 4f  .^END TRANSACTIO
2ba0: 4e 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  N is an alias fo
2bb0: 72 20 43 4f 4d 4d 49 54 2e 0a 3c 2f 70 3e 0a 0a  r COMMIT..</p>..
2bc0: 3c 70 3e 20 5e 28 54 72 61 6e 73 61 63 74 69 6f  <p> ^(Transactio
2bd0: 6e 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  ns created using
2be0: 20 42 45 47 49 4e 2e 2e 2e 43 4f 4d 4d 49 54 20   BEGIN...COMMIT 
2bf0: 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 29 5e 0a 5e  do not nest.)^.^
2c00: 46 6f 72 20 6e 65 73 74 65 64 20 74 72 61 6e 73  For nested trans
2c10: 61 63 74 69 6f 6e 73 2c 20 75 73 65 20 74 68 65  actions, use the
2c20: 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 61 6e 64   [SAVEPOINT] and
2c30: 20 5b 52 45 4c 45 41 53 45 5d 20 63 6f 6d 6d 61   [RELEASE] comma
2c40: 6e 64 73 2e 0a 54 68 65 20 22 54 4f 20 53 41 56  nds..The "TO SAV
2c50: 45 50 4f 49 4e 54 20 3c 69 3e 6e 61 6d 65 3c 2f  EPOINT <i>name</
2c60: 69 3e 22 20 63 6c 61 75 73 65 20 6f 66 20 74 68  i>" clause of th
2c70: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  e ROLLBACK comma
2c80: 6e 64 20 73 68 6f 77 6e 0a 69 6e 20 74 68 65 20  nd shown.in the 
2c90: 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 20 61  syntax diagram a
2ca0: 62 6f 76 65 20 69 73 20 6f 6e 6c 79 20 61 70 70  bove is only app
2cb0: 6c 69 63 61 62 6c 65 20 74 6f 20 5b 53 41 56 45  licable to [SAVE
2cc0: 50 4f 49 4e 54 5d 0a 74 72 61 6e 73 61 63 74 69  POINT].transacti
2cd0: 6f 6e 73 2e 20 20 5e 41 6e 20 61 74 74 65 6d 70  ons.  ^An attemp
2ce0: 74 20 74 6f 20 69 6e 76 6f 6b 65 20 74 68 65 20  t to invoke the 
2cf0: 42 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 77 69  BEGIN command wi
2d00: 74 68 69 6e 0a 61 20 74 72 61 6e 73 61 63 74 69  thin.a transacti
2d10: 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74  on will fail wit
2d20: 68 20 61 6e 20 65 72 72 6f 72 2c 20 72 65 67 61  h an error, rega
2d30: 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
2d40: 72 0a 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  r.the transactio
2d50: 6e 20 77 61 73 20 73 74 61 72 74 65 64 20 62 79  n was started by
2d60: 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 6f 72 20   [SAVEPOINT] or 
2d70: 61 20 70 72 69 6f 72 20 42 45 47 49 4e 2e 0a 5e  a prior BEGIN..^
2d80: 54 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61  The COMMIT comma
2d90: 6e 64 20 61 6e 64 20 74 68 65 20 52 4f 4c 4c 42  nd and the ROLLB
2da0: 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68  ACK command with
2db0: 6f 75 74 20 74 68 65 20 54 4f 20 63 6c 61 75 73  out the TO claus
2dc0: 65 0a 77 6f 72 6b 20 74 68 65 20 73 61 6d 65 20  e.work the same 
2dd0: 6f 6e 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 74  on [SAVEPOINT] t
2de0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 73 20 74  ransactions as t
2df0: 68 65 79 20 64 6f 20 77 69 74 68 20 74 72 61 6e  hey do with tran
2e00: 73 61 63 74 69 6f 6e 73 0a 73 74 61 72 74 65 64  sactions.started
2e10: 20 62 79 20 42 45 47 49 4e 2e 3c 2f 70 3e 0a 0a   by BEGIN.</p>..
2e20: 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e  <p>.^Transaction
2e30: 73 20 63 61 6e 20 62 65 20 64 65 66 65 72 72 65  s can be deferre
2e40: 64 2c 20 69 6d 6d 65 64 69 61 74 65 2c 20 6f 72  d, immediate, or
2e50: 20 65 78 63 6c 75 73 69 76 65 2e 20 20 0a 5e 54   exclusive.  .^T
2e60: 68 65 20 64 65 66 61 75 6c 74 20 74 72 61 6e 73  he default trans
2e70: 61 63 74 69 6f 6e 20 62 65 68 61 76 69 6f 72 20  action behavior 
2e80: 69 73 20 64 65 66 65 72 72 65 64 2e 0a 5e 44 65  is deferred..^De
2e90: 66 65 72 72 65 64 20 6d 65 61 6e 73 20 74 68 61  ferred means tha
2ea0: 74 20 6e 6f 20 6c 6f 63 6b 73 20 61 72 65 20 61  t no locks are a
2eb0: 63 71 75 69 72 65 64 0a 6f 6e 20 74 68 65 20 64  cquired.on the d
2ec0: 61 74 61 62 61 73 65 20 75 6e 74 69 6c 20 74 68  atabase until th
2ed0: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 66 69  e database is fi
2ee0: 72 73 74 20 61 63 63 65 73 73 65 64 2e 20 20 5e  rst accessed.  ^
2ef0: 54 68 75 73 20 77 69 74 68 20 61 0a 64 65 66 65  Thus with a.defe
2f00: 72 72 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  rred transaction
2f10: 2c 20 74 68 65 20 42 45 47 49 4e 20 73 74 61 74  , the BEGIN stat
2f20: 65 6d 65 6e 74 20 69 74 73 65 6c 66 20 64 6f 65  ement itself doe
2f30: 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65  s nothing to the
2f40: 0a 66 69 6c 65 73 79 73 74 65 6d 2e 20 20 5e 4c  .filesystem.  ^L
2f50: 6f 63 6b 73 0a 61 72 65 20 6e 6f 74 20 61 63 71  ocks.are not acq
2f60: 75 69 72 65 64 20 75 6e 74 69 6c 20 74 68 65 20  uired until the 
2f70: 66 69 72 73 74 20 72 65 61 64 20 6f 72 20 77 72  first read or wr
2f80: 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  ite operation.  
2f90: 5e 54 68 65 20 66 69 72 73 74 20 72 65 61 64 0a  ^The first read.
2fa0: 6f 70 65 72 61 74 69 6f 6e 20 61 67 61 69 6e 73  operation agains
2fb0: 74 20 61 20 64 61 74 61 62 61 73 65 20 63 72 65  t a database cre
2fc0: 61 74 65 73 20 61 20 5b 53 48 41 52 45 44 5d 20  ates a [SHARED] 
2fd0: 6c 6f 63 6b 20 61 6e 64 20 74 68 65 20 66 69 72  lock and the fir
2fe0: 73 74 0a 77 72 69 74 65 20 6f 70 65 72 61 74 69  st.write operati
2ff0: 6f 6e 20 63 72 65 61 74 65 73 20 61 20 5b 52 45  on creates a [RE
3000: 53 45 52 56 45 44 5d 20 6c 6f 63 6b 2e 20 20 20  SERVED] lock.   
3010: 5e 42 65 63 61 75 73 65 20 74 68 65 20 61 63 71  ^Because the acq
3020: 75 69 73 69 74 69 6f 6e 20 6f 66 0a 6c 6f 63 6b  uisition of.lock
3030: 73 20 69 73 20 64 65 66 65 72 72 65 64 20 75 6e  s is deferred un
3040: 74 69 6c 20 74 68 65 79 20 61 72 65 20 6e 65 65  til they are nee
3050: 64 65 64 2c 20 69 74 20 69 73 20 70 6f 73 73 69  ded, it is possi
3060: 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72  ble that another
3070: 0a 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65  .thread or proce
3080: 73 73 20 63 6f 75 6c 64 20 63 72 65 61 74 65 20  ss could create 
3090: 61 20 73 65 70 61 72 61 74 65 20 74 72 61 6e 73  a separate trans
30a0: 61 63 74 69 6f 6e 20 61 6e 64 20 77 72 69 74 65  action and write
30b0: 20 74 6f 0a 74 68 65 20 64 61 74 61 62 61 73 65   to.the database
30c0: 20 61 66 74 65 72 20 74 68 65 20 42 45 47 49 4e   after the BEGIN
30d0: 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20   on the current 
30e0: 74 68 72 65 61 64 20 68 61 73 20 65 78 65 63 75  thread has execu
30f0: 74 65 64 2e 0a 5e 49 66 20 74 68 65 20 74 72 61  ted..^If the tra
3100: 6e 73 61 63 74 69 6f 6e 20 69 73 20 69 6d 6d 65  nsaction is imme
3110: 64 69 61 74 65 2c 20 74 68 65 6e 20 5b 52 45 53  diate, then [RES
3120: 45 52 56 45 44 5d 20 6c 6f 63 6b 73 0a 61 72 65  ERVED] locks.are
3130: 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c   acquired on all
3140: 20 64 61 74 61 62 61 73 65 73 20 61 73 20 73 6f   databases as so
3150: 6f 6e 20 61 73 20 74 68 65 20 42 45 47 49 4e 20  on as the BEGIN 
3160: 63 6f 6d 6d 61 6e 64 20 69 73 0a 65 78 65 63 75  command is.execu
3170: 74 65 64 2c 20 77 69 74 68 6f 75 74 20 77 61 69  ted, without wai
3180: 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 64 61 74  ting for the.dat
3190: 61 62 61 73 65 20 74 6f 20 62 65 20 75 73 65 64  abase to be used
31a0: 2e 20 20 5e 41 66 74 65 72 20 61 20 42 45 47 49  .  ^After a BEGI
31b0: 4e 20 49 4d 4d 45 44 49 41 54 45 2c 20 0a 6e 6f  N IMMEDIATE, .no
31c0: 20 6f 74 68 65 72 20 5b 64 61 74 61 62 61 73 65   other [database
31d0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 77 69 6c   connection] wil
31e0: 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 77 72 69  l be able to wri
31f0: 74 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  te to the databa
3200: 73 65 20 6f 72 0a 64 6f 20 61 20 42 45 47 49 4e  se or.do a BEGIN
3210: 20 49 4d 4d 45 44 49 41 54 45 20 6f 72 20 42 45   IMMEDIATE or BE
3220: 47 49 4e 20 45 58 43 4c 55 53 49 56 45 2e 20 20  GIN EXCLUSIVE.  
3230: 5e 4f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73  ^Other processes
3240: 20 63 61 6e 20 63 6f 6e 74 69 6e 75 65 0a 74 6f   can continue.to
3250: 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20 64   read from the d
3260: 61 74 61 62 61 73 65 2c 20 68 6f 77 65 76 65 72  atabase, however
3270: 2e 20 20 5e 41 6e 20 65 78 63 6c 75 73 69 76 65  .  ^An exclusive
3280: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 61 75   transaction cau
3290: 73 65 73 0a 5b 45 58 43 4c 55 53 49 56 45 5d 20  ses.[EXCLUSIVE] 
32a0: 6c 6f 63 6b 73 20 74 6f 20 62 65 20 61 63 71 75  locks to be acqu
32b0: 69 72 65 64 20 6f 6e 20 61 6c 6c 20 64 61 74 61  ired on all data
32c0: 62 61 73 65 73 2e 20 20 5e 41 66 74 65 72 20 61  bases.  ^After a
32d0: 20 42 45 47 49 4e 0a 45 58 43 4c 55 53 49 56 45   BEGIN.EXCLUSIVE
32e0: 2c 20 6e 6f 20 6f 74 68 65 72 20 5b 64 61 74 61  , no other [data
32f0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d  base connection]
3300: 20 65 78 63 65 70 74 20 66 6f 72 20 5b 72 65 61   except for [rea
3310: 64 5f 75 6e 63 6f 6d 6d 69 74 74 65 64 5d 0a 63  d_uncommitted].c
3320: 6f 6e 6e 65 63 74 69 6f 6e 73 20 77 69 6c 6c 20  onnections will 
3330: 62 65 20 61 62 6c 65 20 74 6f 20 72 65 61 64 20  be able to read 
3340: 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64  the database and
3350: 20 6e 6f 20 6f 74 68 65 72 20 63 6f 6e 6e 65 63   no other connec
3360: 74 69 6f 6e 20 77 69 74 68 6f 75 74 0a 65 78 63  tion without.exc
3370: 65 70 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61  eption will be a
3380: 62 6c 65 20 74 6f 20 77 72 69 74 65 20 74 68 65  ble to write the
3390: 20 64 61 74 61 62 61 73 65 20 75 6e 74 69 6c 20   database until 
33a0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
33b0: 69 73 0a 63 6f 6d 70 6c 65 74 65 2e 0a 3c 2f 70  is.complete..</p
33c0: 3e 0a 0a 3c 70 3e 0a 5e 28 41 6e 20 69 6d 70 6c  >..<p>.^(An impl
33d0: 69 63 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  icit transaction
33e0: 20 28 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   (a transaction 
33f0: 74 68 61 74 20 69 73 20 73 74 61 72 74 65 64 20  that is started 
3400: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2c 0a 6e  automatically,.n
3410: 6f 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ot a transaction
3420: 20 73 74 61 72 74 65 64 20 62 79 20 42 45 47 49   started by BEGI
3430: 4e 29 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 20  N) is committed 
3440: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68  automatically wh
3450: 65 6e 0a 74 68 65 20 6c 61 73 74 20 61 63 74 69  en.the last acti
3460: 76 65 20 73 74 61 74 65 6d 65 6e 74 20 66 69 6e  ve statement fin
3470: 69 73 68 65 73 2e 20 20 41 20 73 74 61 74 65 6d  ishes.  A statem
3480: 65 6e 74 20 66 69 6e 69 73 68 65 73 20 77 68 65  ent finishes whe
3490: 6e 20 69 74 73 0a 70 72 65 70 61 72 65 64 20 73  n its.prepared s
34a0: 74 61 74 65 6d 65 6e 74 20 69 73 20 5b 73 71 6c  tatement is [sql
34b0: 69 74 65 33 5f 72 65 73 65 74 28 29 20 7c 20 72  ite3_reset() | r
34c0: 65 73 65 74 5d 20 6f 72 0a 5b 73 71 6c 69 74 65  eset] or.[sqlite
34d0: 33 5f 66 69 6e 61 6c 69 7a 65 28 29 20 7c 20 66  3_finalize() | f
34e0: 69 6e 61 6c 69 7a 65 64 5d 2e 20 20 41 6e 20 6f  inalized].  An o
34f0: 70 65 6e 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f  pen [sqlite3_blo
3500: 62 5d 20 75 73 65 64 20 66 6f 72 0a 69 6e 63 72  b] used for.incr
3510: 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f  emental BLOB I/O
3520: 20 63 6f 75 6e 74 73 20 61 73 20 61 6e 20 75 6e   counts as an un
3530: 66 69 6e 69 73 68 65 64 20 73 74 61 74 65 6d 65  finished stateme
3540: 6e 74 2e 20 20 54 68 65 20 5b 73 71 6c 69 74 65  nt.  The [sqlite
3550: 33 5f 62 6c 6f 62 5d 0a 66 69 6e 69 73 68 65 73  3_blob].finishes
3560: 20 77 68 65 6e 20 69 74 20 69 73 20 5b 73 71 6c   when it is [sql
3570: 69 74 65 33 5f 62 6c 6f 62 5f 63 6c 6f 73 65 28  ite3_blob_close(
3580: 29 20 7c 20 63 6c 6f 73 65 64 5d 2e 29 5e 0a 3c  ) | closed].)^.<
3590: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 68 65 20 65 78  /p>..<p>.^The ex
35a0: 70 6c 69 63 69 74 20 43 4f 4d 4d 49 54 20 63 6f  plicit COMMIT co
35b0: 6d 6d 61 6e 64 20 72 75 6e 73 20 69 6d 6d 65 64  mmand runs immed
35c0: 69 61 74 65 6c 79 2c 20 65 76 65 6e 20 69 66 20  iately, even if 
35d0: 74 68 65 72 65 20 61 72 65 0a 70 65 6e 64 69 6e  there are.pendin
35e0: 67 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65  g [SELECT] state
35f0: 6d 65 6e 74 73 2e 20 20 5e 48 6f 77 65 76 65 72  ments.  ^However
3600: 2c 20 69 66 20 74 68 65 72 65 20 61 72 65 20 70  , if there are p
3610: 65 6e 64 69 6e 67 0a 77 72 69 74 65 20 6f 70 65  ending.write ope
3620: 72 61 74 69 6f 6e 73 2c 20 74 68 65 20 43 4f 4d  rations, the COM
3630: 4d 49 54 20 63 6f 6d 6d 61 6e 64 0a 77 69 6c 6c  MIT command.will
3640: 20 66 61 69 6c 20 77 69 74 68 20 61 20 65 72 72   fail with a err
3650: 6f 72 20 63 6f 64 65 20 5b 53 51 4c 49 54 45 5f  or code [SQLITE_
3660: 42 55 53 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  BUSY]..</p>..<p>
3670: 0a 5e 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 20  .^An attempt to 
3680: 65 78 65 63 75 74 65 20 43 4f 4d 4d 49 54 20 6d  execute COMMIT m
3690: 69 67 68 74 20 61 6c 73 6f 20 72 65 73 75 6c 74  ight also result
36a0: 20 69 6e 20 61 6e 20 5b 53 51 4c 49 54 45 5f 42   in an [SQLITE_B
36b0: 55 53 59 5d 20 72 65 74 75 72 6e 20 63 6f 64 65  USY] return code
36c0: 0a 69 66 20 61 6e 20 61 6e 6f 74 68 65 72 20 74  .if an another t
36d0: 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65 73 73  hread or process
36e0: 20 68 61 73 20 61 20 5b 73 68 61 72 65 64 20 6c   has a [shared l
36f0: 6f 63 6b 5d 20 6f 6e 20 74 68 65 20 64 61 74 61  ock] on the data
3700: 62 61 73 65 0a 74 68 61 74 20 70 72 65 76 65 6e  base.that preven
3710: 74 65 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ted the database
3720: 20 66 72 6f 6d 20 62 65 69 6e 67 20 75 70 64 61   from being upda
3730: 74 65 64 2e 20 20 5e 57 68 65 6e 20 43 4f 4d 4d  ted.  ^When COMM
3740: 49 54 20 66 61 69 6c 73 20 69 6e 20 74 68 69 73  IT fails in this
3750: 0a 77 61 79 2c 20 74 68 65 20 74 72 61 6e 73 61  .way, the transa
3760: 63 74 69 6f 6e 20 72 65 6d 61 69 6e 73 20 61 63  ction remains ac
3770: 74 69 76 65 20 61 6e 64 20 74 68 65 20 43 4f 4d  tive and the COM
3780: 4d 49 54 20 63 61 6e 20 62 65 20 72 65 74 72 69  MIT can be retri
3790: 65 64 20 6c 61 74 65 72 0a 61 66 74 65 72 20 74  ed later.after t
37a0: 68 65 20 72 65 61 64 65 72 20 68 61 73 20 68 61  he reader has ha
37b0: 64 20 61 20 63 68 61 6e 63 65 20 74 6f 20 63 6c  d a chance to cl
37c0: 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e  ear..</p>..<p>.^
37d0: 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20 77 69 6c  The ROLLBACK wil
37e0: 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65  l fail with an e
37f0: 72 72 6f 72 20 63 6f 64 65 20 5b 53 51 4c 49 54  rror code [SQLIT
3800: 45 5f 42 55 53 59 5d 20 69 66 20 74 68 65 72 65  E_BUSY] if there
3810: 0a 61 72 65 20 61 6e 79 20 70 65 6e 64 69 6e 67  .are any pending
3820: 20 71 75 65 72 69 65 73 2e 20 20 5e 42 6f 74 68   queries.  ^Both
3830: 20 72 65 61 64 2d 6f 6e 6c 79 20 61 6e 64 20 72   read-only and r
3840: 65 61 64 2f 77 72 69 74 65 20 71 75 65 72 69 65  ead/write querie
3850: 73 20 77 69 6c 6c 0a 63 61 75 73 65 20 61 20 52  s will.cause a R
3860: 4f 4c 4c 42 41 43 4b 20 74 6f 20 66 61 69 6c 2e  OLLBACK to fail.
3870: 20 20 41 20 52 4f 4c 4c 42 41 43 4b 20 6d 75 73    A ROLLBACK mus
3880: 74 20 66 61 69 6c 20 69 66 20 74 68 65 72 65 20  t fail if there 
3890: 61 72 65 20 70 65 6e 64 69 6e 67 0a 72 65 61 64  are pending.read
38a0: 20 6f 70 65 72 61 74 69 6f 6e 73 20 28 75 6e 6c   operations (unl
38b0: 69 6b 65 20 43 4f 4d 4d 49 54 20 77 68 69 63 68  ike COMMIT which
38c0: 20 63 61 6e 20 73 75 63 63 65 65 64 29 20 62 65   can succeed) be
38d0: 63 61 75 73 65 20 62 61 64 20 74 68 69 6e 67 73  cause bad things
38e0: 0a 77 69 6c 6c 20 68 61 70 70 65 6e 20 69 66 20  .will happen if 
38f0: 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 69 6d  the in-memory im
3900: 61 67 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  age of the datab
3910: 61 73 65 20 69 73 20 63 68 61 6e 67 65 64 20 6f  ase is changed o
3920: 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 0a 61 6e  ut from under.an
3930: 20 61 63 74 69 76 65 20 71 75 65 72 79 2e 0a 3c   active query..<
3940: 2f 70 3e 0a 0a 3c 70 3e 0a 49 66 20 5b 50 52 41  /p>..<p>.If [PRA
3950: 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  GMA journal_mode
3960: 5d 20 69 73 20 73 65 74 20 74 6f 20 4f 46 46 20  ] is set to OFF 
3970: 28 74 68 75 73 20 64 69 73 61 62 6c 69 6e 67 20  (thus disabling 
3980: 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  the rollback jou
3990: 72 6e 61 6c 0a 66 69 6c 65 29 20 74 68 65 6e 20  rnal.file) then 
39a0: 74 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20  the behavior of 
39b0: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d  the ROLLBACK com
39c0: 6d 61 6e 64 20 69 73 20 75 6e 64 65 66 69 6e 65  mand is undefine
39d0: 64 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73  d..</p>..<h3>Res
39e0: 70 6f 6e 73 65 20 54 6f 20 45 72 72 6f 72 73 20  ponse To Errors 
39f0: 57 69 74 68 69 6e 20 41 20 54 72 61 6e 73 61 63  Within A Transac
3a00: 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 5e  tion</h3>..<p> ^
3a10: 28 49 66 20 63 65 72 74 61 69 6e 20 6b 69 6e 64  (If certain kind
3a20: 73 20 6f 66 20 65 72 72 6f 72 73 20 6f 63 63 75  s of errors occu
3a30: 72 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  r within a trans
3a40: 61 63 74 69 6f 6e 2c 20 74 68 65 0a 74 72 61 6e  action, the.tran
3a50: 73 61 63 74 69 6f 6e 20 6d 61 79 20 6f 72 20 6d  saction may or m
3a60: 61 79 20 6e 6f 74 20 62 65 20 72 6f 6c 6c 65 64  ay not be rolled
3a70: 20 62 61 63 6b 20 61 75 74 6f 6d 61 74 69 63 61   back automatica
3a80: 6c 6c 79 2e 20 20 54 68 65 0a 65 72 72 6f 72 73  lly.  The.errors
3a90: 20 74 68 61 74 20 63 61 75 73 65 20 74 68 65 20   that cause the 
3aa0: 62 65 68 61 76 69 6f 72 20 69 6e 63 6c 75 64 65  behavior include
3ab0: 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  :</p>..<ul>.<li>
3ac0: 20 5b 53 51 4c 49 54 45 5f 46 55 4c 4c 5d 3a 20   [SQLITE_FULL]: 
3ad0: 64 61 74 61 62 61 73 65 20 6f 72 20 64 69 73 6b  database or disk
3ae0: 20 66 75 6c 6c 0a 3c 6c 69 3e 20 5b 53 51 4c 49   full.<li> [SQLI
3af0: 54 45 5f 49 4f 45 52 52 5d 3a 20 64 69 73 6b 20  TE_IOERR]: disk 
3b00: 49 2f 4f 20 65 72 72 6f 72 0a 3c 6c 69 3e 20 5b  I/O error.<li> [
3b10: 53 51 4c 49 54 45 5f 42 55 53 59 5d 3a 20 64 61  SQLITE_BUSY]: da
3b20: 74 61 62 61 73 65 20 69 6e 20 75 73 65 20 62 79  tabase in use by
3b30: 20 61 6e 6f 74 68 65 72 20 70 72 6f 63 65 73 73   another process
3b40: 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 4e 4f  .<li> [SQLITE_NO
3b50: 4d 45 4d 5d 3a 20 6f 75 74 20 6f 72 20 6d 65 6d  MEM]: out or mem
3b60: 6f 72 79 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45  ory.<li> [SQLITE
3b70: 5f 49 4e 54 45 52 52 55 50 54 5d 3a 20 70 72 6f  _INTERRUPT]: pro
3b80: 63 65 73 73 69 6e 67 20 5b 73 71 6c 69 74 65 33  cessing [sqlite3
3b90: 5f 69 6e 74 65 72 72 75 70 74 7c 69 6e 74 65 72  _interrupt|inter
3ba0: 72 75 70 74 65 64 5d 0a 20 20 20 20 20 62 79 20  rupted].     by 
3bb0: 61 70 70 6c 69 63 61 74 69 6f 6e 20 72 65 71 75  application requ
3bc0: 65 73 74 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e  est.</ul>)^..<p>
3bd0: 0a 5e 46 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65  .^For all of the
3be0: 73 65 20 65 72 72 6f 72 73 2c 20 53 51 4c 69 74  se errors, SQLit
3bf0: 65 20 61 74 74 65 6d 70 74 73 20 74 6f 20 75 6e  e attempts to un
3c00: 64 6f 20 6a 75 73 74 20 74 68 65 20 6f 6e 65 20  do just the one 
3c10: 73 74 61 74 65 6d 65 6e 74 0a 69 74 20 77 61 73  statement.it was
3c20: 20 77 6f 72 6b 69 6e 67 20 6f 6e 20 61 6e 64 20   working on and 
3c30: 6c 65 61 76 65 20 63 68 61 6e 67 65 73 20 66 72  leave changes fr
3c40: 6f 6d 20 70 72 69 6f 72 20 73 74 61 74 65 6d 65  om prior stateme
3c50: 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65 0a 73  nts within the.s
3c60: 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ame transaction 
3c70: 69 6e 74 61 63 74 20 61 6e 64 20 63 6f 6e 74 69  intact and conti
3c80: 6e 75 65 20 77 69 74 68 20 74 68 65 20 74 72 61  nue with the tra
3c90: 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 48 6f 77 65  nsaction.  ^Howe
3ca0: 76 65 72 2c 20 0a 64 65 70 65 6e 64 69 6e 67 20  ver, .depending 
3cb0: 6f 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  on the statement
3cc0: 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65 64   being evaluated
3cd0: 20 61 6e 64 20 74 68 65 20 70 6f 69 6e 74 20 61   and the point a
3ce0: 74 20 77 68 69 63 68 20 74 68 65 0a 65 72 72 6f  t which the.erro
3cf0: 72 20 6f 63 63 75 72 73 2c 20 69 74 20 6d 69 67  r occurs, it mig
3d00: 68 74 20 62 65 20 6e 65 63 65 73 73 61 72 79 20  ht be necessary 
3d10: 66 6f 72 20 53 51 4c 69 74 65 20 74 6f 20 72 6f  for SQLite to ro
3d20: 6c 6c 62 61 63 6b 20 61 6e 64 0a 63 61 6e 63 65  llback and.cance
3d30: 6c 20 74 68 65 20 65 6e 74 69 72 65 20 74 72 61  l the entire tra
3d40: 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 41 6e 20 61  nsaction.  ^An a
3d50: 70 70 6c 69 63 61 74 69 6f 6e 20 63 61 6e 20 74  pplication can t
3d60: 65 6c 6c 20 77 68 69 63 68 0a 63 6f 75 72 73 65  ell which.course
3d70: 20 6f 66 20 61 63 74 69 6f 6e 20 53 51 4c 69 74   of action SQLit
3d80: 65 20 74 6f 6f 6b 20 62 79 20 75 73 69 6e 67 20  e took by using 
3d90: 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f 67 65 74  the.[sqlite3_get
3da0: 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 29 5d 20 43  _autocommit()] C
3db0: 2d 6c 61 6e 67 75 61 67 65 20 69 6e 74 65 72 66  -language interf
3dc0: 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 74 20  ace.</p>..<p>It 
3dd0: 69 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 74  is recommended t
3de0: 68 61 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  hat applications
3df0: 20 72 65 73 70 6f 6e 64 20 74 6f 20 74 68 65 20   respond to the 
3e00: 65 72 72 6f 72 73 0a 6c 69 73 74 65 64 20 61 62  errors.listed ab
3e10: 6f 76 65 20 62 79 20 65 78 70 6c 69 63 69 74 6c  ove by explicitl
3e20: 79 20 69 73 73 75 69 6e 67 20 61 20 52 4f 4c 4c  y issuing a ROLL
3e30: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e  BACK command.  ^
3e40: 49 66 20 74 68 65 20 0a 74 72 61 6e 73 61 63 74  If the .transact
3e50: 69 6f 6e 20 68 61 73 20 61 6c 72 65 61 64 79 20  ion has already 
3e60: 62 65 65 6e 20 72 6f 6c 6c 65 64 20 62 61 63 6b  been rolled back
3e70: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 62   automatically.b
3e80: 79 20 74 68 65 20 65 72 72 6f 72 20 72 65 73 70  y the error resp
3e90: 6f 6e 73 65 2c 20 74 68 65 6e 20 74 68 65 20 52  onse, then the R
3ea0: 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20  OLLBACK command 
3eb0: 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61  will fail with a
3ec0: 6e 0a 65 72 72 6f 72 2c 20 62 75 74 20 6e 6f 20  n.error, but no 
3ed0: 68 61 72 6d 20 69 73 20 63 61 75 73 65 64 20 62  harm is caused b
3ee0: 79 20 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  y this.</p>..<p>
3ef0: 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20  Future versions 
3f00: 6f 66 20 53 51 4c 69 74 65 20 6d 61 79 20 65 78  of SQLite may ex
3f10: 74 65 6e 64 20 74 68 65 20 6c 69 73 74 20 6f 66  tend the list of
3f20: 20 65 72 72 6f 72 73 20 77 68 69 63 68 0a 6d 69   errors which.mi
3f30: 67 68 74 20 63 61 75 73 65 20 61 75 74 6f 6d 61  ght cause automa
3f40: 74 69 63 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  tic transaction 
3f50: 72 6f 6c 6c 62 61 63 6b 2e 20 20 46 75 74 75 72  rollback.  Futur
3f60: 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51  e versions of.SQ
3f70: 4c 69 74 65 20 6d 69 67 68 74 20 63 68 61 6e 67  Lite might chang
3f80: 65 20 74 68 65 20 65 72 72 6f 72 20 72 65 73 70  e the error resp
3f90: 6f 6e 73 65 2e 20 20 49 6e 20 70 61 72 74 69 63  onse.  In partic
3fa0: 75 6c 61 72 2c 20 77 65 20 6d 61 79 0a 63 68 6f  ular, we may.cho
3fb0: 6f 73 65 20 74 6f 20 73 69 6d 70 6c 69 66 79 20  ose to simplify 
3fc0: 74 68 65 20 69 6e 74 65 72 66 61 63 65 20 69 6e  the interface in
3fd0: 20 66 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73   future versions
3fe0: 20 6f 66 20 53 51 4c 69 74 65 20 62 79 0a 63 61   of SQLite by.ca
3ff0: 75 73 69 6e 67 20 74 68 65 20 65 72 72 6f 72 73  using the errors
4000: 20 61 62 6f 76 65 20 74 6f 20 66 6f 72 63 65 20   above to force 
4010: 61 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c  an unconditional
4020: 20 72 6f 6c 6c 62 61 63 6b 2e 3c 2f 70 3e 0a 0a   rollback.</p>..
4030: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
4040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4050: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4060: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4070: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4080: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 53  #####.Section {S
4090: 41 56 45 50 4f 49 4e 54 7d 20 73 61 76 65 70 6f  AVEPOINT} savepo
40a0: 69 6e 74 20 7b 53 41 56 45 50 4f 49 4e 54 20 52  int {SAVEPOINT R
40b0: 45 4c 45 41 53 45 7d 0a 0a 42 75 62 62 6c 65 44  ELEASE}..BubbleD
40c0: 69 61 67 72 61 6d 20 73 61 76 65 70 6f 69 6e 74  iagram savepoint
40d0: 2d 73 74 6d 74 0a 42 75 62 62 6c 65 44 69 61 67  -stmt.BubbleDiag
40e0: 72 61 6d 20 72 65 6c 65 61 73 65 2d 73 74 6d 74  ram release-stmt
40f0: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72  .BubbleDiagram r
4100: 6f 6c 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74  ollback-stmt.</t
4110: 63 6c 3e 0a 0a 3c 70 3e 20 5e 53 41 56 45 50 4f  cl>..<p> ^SAVEPO
4120: 49 4e 54 73 20 61 72 65 20 61 20 6d 65 74 68 6f  INTs are a metho
4130: 64 20 6f 66 20 63 72 65 61 74 69 6e 67 20 74 72  d of creating tr
4140: 61 6e 73 61 63 74 69 6f 6e 73 2c 20 73 69 6d 69  ansactions, simi
4150: 6c 61 72 20 74 6f 0a 5b 42 45 47 49 4e 5d 20 61  lar to.[BEGIN] a
4160: 6e 64 20 5b 43 4f 4d 4d 49 54 5d 2c 20 65 78 63  nd [COMMIT], exc
4170: 65 70 74 20 74 68 61 74 20 74 68 65 20 53 41 56  ept that the SAV
4180: 45 50 4f 49 4e 54 20 61 6e 64 20 52 45 4c 45 41  EPOINT and RELEA
4190: 53 45 20 63 6f 6d 6d 61 6e 64 73 0a 61 72 65 20  SE commands.are 
41a0: 6e 61 6d 65 64 20 61 6e 64 20 6d 61 79 20 62 65  named and may be
41b0: 20 6e 65 73 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70   nested.</p>..<p
41c0: 3e 20 5e 54 68 65 20 53 41 56 45 50 4f 49 4e 54  > ^The SAVEPOINT
41d0: 20 63 6f 6d 6d 61 6e 64 20 73 74 61 72 74 73 20   command starts 
41e0: 61 20 6e 65 77 20 74 72 61 6e 73 61 63 74 69 6f  a new transactio
41f0: 6e 20 77 69 74 68 20 61 20 6e 61 6d 65 2e 0a 5e  n with a name..^
4200: 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  The transaction 
4210: 6e 61 6d 65 73 20 6e 65 65 64 20 6e 6f 74 20 62  names need not b
4220: 65 20 75 6e 69 71 75 65 2e 0a 5e 28 41 20 53 41  e unique..^(A SA
4230: 56 45 50 4f 49 4e 54 20 63 61 6e 20 62 65 20 73  VEPOINT can be s
4240: 74 61 72 74 65 64 20 65 69 74 68 65 72 20 77 69  tarted either wi
4250: 74 68 69 6e 20 6f 72 20 6f 75 74 73 69 64 65 20  thin or outside 
4260: 6f 66 0a 61 20 5b 42 45 47 49 4e 5d 2e 2e 2e 5b  of.a [BEGIN]...[
4270: 43 4f 4d 4d 49 54 5d 2e 29 5e 20 20 5e 28 57 68  COMMIT].)^  ^(Wh
4280: 65 6e 20 61 20 53 41 56 45 50 4f 49 4e 54 20 69  en a SAVEPOINT i
4290: 73 20 74 68 65 20 6f 75 74 65 72 2d 6d 6f 73 74  s the outer-most
42a0: 20 73 61 76 65 70 6f 69 6e 74 0a 61 6e 64 20 69   savepoint.and i
42b0: 74 20 69 73 20 6e 6f 74 20 77 69 74 68 69 6e 20  t is not within 
42c0: 61 20 5b 42 45 47 49 4e 5d 2e 2e 2e 5b 43 4f 4d  a [BEGIN]...[COM
42d0: 4d 49 54 5d 20 74 68 65 6e 20 74 68 65 20 62 65  MIT] then the be
42e0: 68 61 76 69 6f 72 20 69 73 20 74 68 65 0a 73 61  havior is the.sa
42f0: 6d 65 20 61 73 20 42 45 47 49 4e 20 44 45 46 45  me as BEGIN DEFE
4300: 52 52 45 44 20 54 52 41 4e 53 41 43 54 49 4f 4e  RRED TRANSACTION
4310: 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  .)^</p>..<p>^The
4320: 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d   ROLLBACK TO com
4330: 6d 61 6e 64 20 72 65 76 65 72 74 73 20 74 68 65  mand reverts the
4340: 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 64 61   state of the da
4350: 74 61 62 61 73 65 20 62 61 63 6b 20 74 6f 20 77  tabase back to w
4360: 68 61 74 0a 69 74 20 77 61 73 20 6a 75 73 74 20  hat.it was just 
4370: 61 66 74 65 72 20 74 68 65 20 63 6f 72 72 65 73  after the corres
4380: 70 6f 6e 64 69 6e 67 20 53 41 56 45 50 4f 49 4e  ponding SAVEPOIN
4390: 54 2e 20 20 5e 4e 6f 74 65 20 74 68 61 74 20 75  T.  ^Note that u
43a0: 6e 6c 69 6b 65 20 74 68 61 74 0a 70 6c 61 69 6e  nlike that.plain
43b0: 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20 63 6f 6d 6d   [ROLLBACK] comm
43c0: 61 6e 64 20 28 77 69 74 68 6f 75 74 20 74 68 65  and (without the
43d0: 20 54 4f 20 6b 65 79 77 6f 72 64 29 20 74 68 65   TO keyword) the
43e0: 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d   ROLLBACK TO com
43f0: 6d 61 6e 64 0a 64 6f 65 73 20 6e 6f 74 20 63 61  mand.does not ca
4400: 6e 63 65 6c 20 74 68 65 20 74 72 61 6e 73 61 63  ncel the transac
4410: 74 69 6f 6e 2e 20 20 5e 49 6e 73 74 65 61 64 20  tion.  ^Instead 
4420: 6f 66 20 63 61 6e 63 65 6c 6c 69 6e 67 20 74 68  of cancelling th
4430: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 0a 74  e transaction,.t
4440: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63  he ROLLBACK TO c
4450: 6f 6d 6d 61 6e 64 20 72 65 73 74 61 72 74 73 20  ommand restarts 
4460: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
4470: 61 67 61 69 6e 20 61 74 20 74 68 65 20 62 65 67  again at the beg
4480: 69 6e 6e 69 6e 67 2e 0a 5e 41 6c 6c 20 69 6e 74  inning..^All int
4490: 65 72 76 65 6e 69 6e 67 20 53 41 56 45 50 4f 49  ervening SAVEPOI
44a0: 4e 54 73 20 61 72 65 20 63 61 6e 63 65 6c 6c 65  NTs are cancelle
44b0: 64 2c 20 68 6f 77 65 76 65 72 2e 3c 2f 70 3e 0a  d, however.</p>.
44c0: 0a 3c 70 3e 5e 54 68 65 20 52 45 4c 45 41 53 45  .<p>^The RELEASE
44d0: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6c 69 6b 65   command is like
44e0: 20 61 20 5b 43 4f 4d 4d 49 54 5d 20 66 6f 72 20   a [COMMIT] for 
44f0: 61 20 53 41 56 45 50 4f 49 4e 54 2e 0a 5e 54 68  a SAVEPOINT..^Th
4500: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
4510: 64 20 63 61 75 73 65 73 20 61 6c 6c 20 73 61 76  d causes all sav
4520: 65 70 6f 69 6e 74 73 20 62 61 63 6b 20 74 6f 20  epoints back to 
4530: 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68  and including th
4540: 65 20 0a 6d 6f 73 74 20 72 65 63 65 6e 74 20 73  e .most recent s
4550: 61 76 65 70 6f 69 6e 74 20 77 69 74 68 20 61 20  avepoint with a 
4560: 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 20 74 6f  matching name to
4570: 20 62 65 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d   be removed from
4580: 20 74 68 65 20 0a 74 72 61 6e 73 61 63 74 69 6f   the .transactio
4590: 6e 20 73 74 61 63 6b 2e 20 20 5e 54 68 65 20 52  n stack.  ^The R
45a0: 45 4c 45 41 53 45 20 6f 66 20 61 6e 20 69 6e 6e  ELEASE of an inn
45b0: 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 64  er transaction.d
45c0: 6f 65 73 20 6e 6f 74 20 63 61 75 73 65 20 61 6e  oes not cause an
45d0: 79 20 63 68 61 6e 67 65 73 20 74 6f 20 62 65 20  y changes to be 
45e0: 77 72 69 74 74 65 6e 20 74 6f 20 74 68 65 20 64  written to the d
45f0: 61 74 61 62 61 73 65 20 66 69 6c 65 3b 20 69 74  atabase file; it
4600: 20 6d 65 72 65 6c 79 0a 72 65 6d 6f 76 65 73 20   merely.removes 
4610: 73 61 76 65 70 6f 69 6e 74 73 20 66 72 6f 6d 20  savepoints from 
4620: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
4630: 73 74 61 63 6b 20 73 75 63 68 20 74 68 61 74 20  stack such that 
4640: 69 74 20 69 73 0a 6e 6f 20 6c 6f 6e 67 65 72 20  it is.no longer 
4650: 70 6f 73 73 69 62 6c 65 20 74 6f 20 52 4f 4c 4c  possible to ROLL
4660: 42 41 43 4b 20 54 4f 20 74 68 6f 73 65 20 73 61  BACK TO those sa
4670: 76 65 70 6f 69 6e 74 73 2e 0a 5e 49 66 20 61 20  vepoints..^If a 
4680: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
4690: 72 65 6c 65 61 73 65 73 20 74 68 65 20 6f 75 74  releases the out
46a0: 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74  ermost savepoint
46b0: 2c 20 73 6f 0a 74 68 61 74 20 74 68 65 20 74 72  , so.that the tr
46c0: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20  ansaction stack 
46d0: 62 65 63 6f 6d 65 73 20 65 6d 70 74 79 2c 20 74  becomes empty, t
46e0: 68 65 6e 20 52 45 4c 45 41 53 45 20 69 73 20 74  hen RELEASE is t
46f0: 68 65 20 73 61 6d 65 0a 61 73 20 5b 43 4f 4d 4d  he same.as [COMM
4700: 49 54 5d 2e 0a 5e 54 68 65 20 5b 43 4f 4d 4d 49  IT]..^The [COMMI
4710: 54 5d 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 62  T] command may b
4720: 65 20 75 73 65 64 20 74 6f 20 72 65 6c 65 61 73  e used to releas
4730: 65 20 61 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73  e all savepoints
4740: 20 61 6e 64 0a 63 6f 6d 6d 69 74 20 74 68 65 20   and.commit the 
4750: 74 72 61 6e 73 61 63 74 69 6f 6e 20 65 76 65 6e  transaction even
4760: 20 69 66 20 74 68 65 20 74 72 61 6e 73 61 63 74   if the transact
4770: 69 6f 6e 20 77 61 73 20 6f 72 69 67 69 6e 61 6c  ion was original
4780: 6c 79 20 73 74 61 72 74 65 64 0a 62 79 20 61 20  ly started.by a 
4790: 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e  SAVEPOINT comman
47a0: 64 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 5b  d instead of a [
47b0: 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64 2e 3c  BEGIN] command.<
47c0: 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  /p>..<p>^If the 
47d0: 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 20 69  savepoint-name i
47e0: 6e 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  n a RELEASE comm
47f0: 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74  and does not mat
4800: 63 68 20 61 6e 79 0a 73 61 76 65 70 6f 69 6e 74  ch any.savepoint
4810: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68   currently in th
4820: 65 20 74 72 61 6e 61 63 74 69 6f 6e 20 73 74 61  e tranaction sta
4830: 63 6b 2c 20 74 68 65 6e 20 6e 6f 20 73 61 76 65  ck, then no save
4840: 70 6f 69 6e 74 73 20 61 72 65 0a 72 65 6c 65 61  points are.relea
4850: 73 65 64 2c 20 74 68 65 20 64 61 74 61 62 61 73  sed, the databas
4860: 65 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2c 20  e is unchanged, 
4870: 61 6e 64 20 74 68 65 20 52 45 4c 45 41 53 45 20  and the RELEASE 
4880: 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72 6e 73 0a  command returns.
4890: 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c  an error.</p>..<
48a0: 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 61 6e 20  p>^Note that an 
48b0: 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74 69 6f  inner transactio
48c0: 6e 20 6d 69 67 68 74 20 63 6f 6d 6d 69 74 20 28  n might commit (
48d0: 75 73 69 6e 67 20 74 68 65 20 52 45 4c 45 41 53  using the RELEAS
48e0: 45 20 63 6f 6d 6d 61 6e 64 29 0a 62 75 74 20 74  E command).but t
48f0: 68 65 6e 20 6c 61 74 65 72 20 68 61 76 65 20 69  hen later have i
4900: 74 73 20 77 6f 72 6b 20 75 6e 64 6f 6e 65 20 62  ts work undone b
4910: 79 20 61 20 52 4f 4c 4c 42 41 43 4b 20 69 6e 20  y a ROLLBACK in 
4920: 61 6e 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63  an outer transac
4930: 74 69 6f 6e 2e 0a 5e 41 20 70 6f 77 65 72 20 66  tion..^A power f
4940: 61 69 6c 75 72 65 20 6f 72 20 70 72 6f 67 72 61  ailure or progra
4950: 6d 20 63 72 61 73 68 20 6f 72 20 4f 53 20 63 72  m crash or OS cr
4960: 61 73 68 20 77 69 6c 6c 20 63 61 75 73 65 20 74  ash will cause t
4970: 68 65 20 6f 75 74 65 72 2d 6d 6f 73 74 0a 74 72  he outer-most.tr
4980: 61 6e 73 61 63 74 69 6f 6e 20 74 6f 20 72 6f 6c  ansaction to rol
4990: 6c 62 61 63 6b 2c 20 75 6e 64 6f 69 6e 67 20 61  lback, undoing a
49a0: 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74 20  ll changes that 
49b0: 68 61 76 65 20 6f 63 63 75 72 72 65 64 20 77 69  have occurred wi
49c0: 74 68 69 6e 0a 74 68 61 74 20 6f 75 74 65 72 20  thin.that outer 
49d0: 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 65 76 65  transaction, eve
49e0: 6e 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 68  n changes that h
49f0: 61 76 65 20 73 75 70 70 6f 73 65 64 6c 79 20 62  ave supposedly b
4a00: 65 65 6e 20 22 63 6f 6d 6d 69 74 74 65 64 22 0a  een "committed".
4a10: 62 79 20 74 68 65 20 52 45 4c 45 41 53 45 20 63  by the RELEASE c
4a20: 6f 6d 6d 61 6e 64 2e 20 20 5e 43 6f 6e 74 65 6e  ommand.  ^Conten
4a30: 74 20 69 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c  t is not actuall
4a40: 79 20 63 6f 6d 6d 69 74 74 65 64 20 6f 6e 20 74  y committed on t
4a50: 68 65 20 64 69 73 6b 20 0a 75 6e 74 69 6c 20 74  he disk .until t
4a60: 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 74 72 61  he outermost tra
4a70: 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 73  nsaction commits
4a80: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 72 65 20  .</p>..<p>There 
4a90: 61 72 65 20 73 65 76 65 72 61 6c 20 77 61 79 73  are several ways
4aa0: 20 6f 66 20 74 68 69 6e 6b 69 6e 67 20 61 62 6f   of thinking abo
4ab0: 75 74 20 74 68 65 20 52 45 4c 45 41 53 45 20 63  ut the RELEASE c
4ac0: 6f 6d 6d 61 6e 64 3a 3c 2f 70 3e 0a 0a 3c 75 6c  ommand:</p>..<ul
4ad0: 3e 0a 3c 6c 69 3e 3c 70 3e 0a 53 6f 6d 65 20 70  >.<li><p>.Some p
4ae0: 65 6f 70 6c 65 20 76 69 65 77 20 52 45 4c 45 41  eople view RELEA
4af0: 53 45 20 61 73 20 74 68 65 20 65 71 75 69 76 61  SE as the equiva
4b00: 6c 65 6e 74 20 6f 66 20 43 4f 4d 4d 49 54 20 66  lent of COMMIT f
4b10: 6f 72 20 61 20 53 41 56 45 50 4f 49 4e 54 2e 0a  or a SAVEPOINT..
4b20: 54 68 69 73 20 69 73 20 61 6e 20 61 63 63 65 70  This is an accep
4b30: 74 61 62 6c 65 20 70 6f 69 6e 74 20 6f 66 20 76  table point of v
4b40: 69 65 77 20 61 73 20 6c 6f 6e 67 20 61 73 20 6f  iew as long as o
4b50: 6e 65 20 72 65 6d 65 6d 62 65 72 73 20 74 68 61  ne remembers tha
4b60: 74 20 74 68 65 0a 63 68 61 6e 67 65 73 20 63 6f  t the.changes co
4b70: 6d 6d 69 74 74 65 64 20 62 79 20 61 6e 20 69 6e  mmitted by an in
4b80: 6e 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ner transaction 
4b90: 6d 69 67 68 74 20 6c 61 74 65 72 20 62 65 20 75  might later be u
4ba0: 6e 64 6f 6e 65 20 62 79 20 61 0a 72 6f 6c 6c 62  ndone by a.rollb
4bb0: 61 63 6b 20 69 6e 20 61 6e 20 6f 75 74 65 72 20  ack in an outer 
4bc0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e  transaction.</p>
4bd0: 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 41  </li>..<li><p>.A
4be0: 6e 6f 74 68 65 72 20 76 69 65 77 20 6f 66 20 52  nother view of R
4bf0: 45 4c 45 41 53 45 20 69 73 20 74 68 61 74 20 69  ELEASE is that i
4c00: 74 20 6d 65 72 67 65 73 20 61 20 6e 61 6d 65 64  t merges a named
4c10: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e 74   transaction int
4c20: 6f 20 69 74 73 0a 70 61 72 65 6e 74 20 74 72 61  o its.parent tra
4c30: 6e 73 61 63 74 69 6f 6e 2c 20 73 6f 20 74 68 61  nsaction, so tha
4c40: 74 20 74 68 65 20 6e 61 6d 65 64 20 74 72 61 6e  t the named tran
4c50: 73 61 63 74 69 6f 6e 20 61 6e 64 20 69 74 73 20  saction and its 
4c60: 70 61 72 65 6e 74 20 62 65 63 6f 6d 65 0a 74 68  parent become.th
4c70: 65 20 73 61 6d 65 20 74 72 61 6e 73 61 63 74 69  e same transacti
4c80: 6f 6e 2e 20 20 41 66 74 65 72 20 52 45 4c 45 41  on.  After RELEA
4c90: 53 45 2c 20 74 68 65 20 6e 61 6d 65 64 20 74 72  SE, the named tr
4ca0: 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 69 74  ansaction and it
4cb0: 73 20 70 61 72 65 6e 74 0a 77 69 6c 6c 20 63 6f  s parent.will co
4cc0: 6d 6d 69 74 20 6f 72 20 72 6f 6c 6c 62 61 63 6b  mmit or rollback
4cd0: 20 74 6f 67 65 74 68 65 72 2c 20 77 68 61 74 65   together, whate
4ce0: 76 65 72 20 74 68 65 69 72 20 66 61 74 65 20 6d  ver their fate m
4cf0: 61 79 20 62 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e  ay be..</p></li>
4d00: 0a 0a 3c 6c 69 3e 3c 70 3e 0a 4f 6e 65 20 63 61  ..<li><p>.One ca
4d10: 6e 20 61 6c 73 6f 20 74 68 69 6e 6b 20 6f 66 20  n also think of 
4d20: 73 61 76 65 70 6f 69 6e 74 73 20 61 73 0a 22 6d  savepoints as."m
4d30: 61 72 6b 73 22 20 69 6e 20 74 68 65 20 74 72 61  arks" in the tra
4d40: 6e 73 61 63 74 69 6f 6e 20 74 69 6d 65 6c 69 6e  nsaction timelin
4d50: 65 2e 20 20 49 6e 20 74 68 69 73 20 76 69 65 77  e.  In this view
4d60: 2c 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20  , the SAVEPOINT 
4d70: 63 6f 6d 6d 61 6e 64 0a 63 72 65 61 74 65 73 20  command.creates 
4d80: 61 20 6e 65 77 20 6d 61 72 6b 2c 20 74 68 65 20  a new mark, the 
4d90: 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d  ROLLBACK TO comm
4da0: 61 6e 64 20 72 65 77 69 6e 64 73 20 74 68 65 20  and rewinds the 
4db0: 74 69 6d 65 6c 69 6e 65 20 62 61 63 6b 0a 74 6f  timeline back.to
4dc0: 20 61 20 70 6f 69 6e 74 20 6a 75 73 74 20 61 66   a point just af
4dd0: 74 65 72 20 74 68 65 20 6e 61 6d 65 64 20 6d 61  ter the named ma
4de0: 72 6b 2c 20 61 6e 64 20 74 68 65 20 52 45 4c 45  rk, and the RELE
4df0: 41 53 45 20 63 6f 6d 6d 61 6e 64 0a 65 72 61 73  ASE command.eras
4e00: 65 73 20 6d 61 72 6b 73 20 66 72 6f 6d 20 74 68  es marks from th
4e10: 65 20 74 69 6d 65 6c 69 6e 65 20 77 69 74 68 6f  e timeline witho
4e20: 75 74 20 61 63 74 75 61 6c 6c 79 20 6d 61 6b 69  ut actually maki
4e30: 6e 67 20 61 6e 79 0a 63 68 61 6e 67 65 73 20 74  ng any.changes t
4e40: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a  o the database..
4e50: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a  </p></li>.</ul>.
4e60: 0a 0a 0a 3c 68 33 3e 54 72 61 6e 73 61 63 74 69  ...<h3>Transacti
4e70: 6f 6e 20 4e 65 73 74 69 6e 67 20 52 75 6c 65 73  on Nesting Rules
4e80: 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6c  </h3>..<p>^The l
4e90: 61 73 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ast transaction 
4ea0: 73 74 61 72 74 65 64 20 77 69 6c 6c 20 62 65 20  started will be 
4eb0: 74 68 65 20 66 69 72 73 74 0a 74 72 61 6e 73 61  the first.transa
4ec0: 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 74 65 64 20  ction committed 
4ed0: 6f 72 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 3c  or rolled back.<
4ee0: 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 42 45  /p>..<p>^The [BE
4ef0: 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64 20 6f 6e 6c  GIN] command onl
4f00: 79 20 77 6f 72 6b 73 20 69 66 20 74 68 65 20 74  y works if the t
4f10: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b  ransaction stack
4f20: 20 69 73 20 65 6d 70 74 79 2c 20 6f 72 0a 69 6e   is empty, or.in
4f30: 20 6f 74 68 65 72 20 77 6f 72 64 73 20 69 66 20   other words if 
4f40: 74 68 65 72 65 20 61 72 65 20 6e 6f 20 70 65 6e  there are no pen
4f50: 64 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e  ding transaction
4f60: 73 2e 20 20 5e 49 66 20 74 68 65 20 74 72 61 6e  s.  ^If the tran
4f70: 73 61 63 74 69 6f 6e 0a 73 74 61 63 6b 20 69 73  saction.stack is
4f80: 20 6e 6f 74 20 65 6d 70 74 79 20 77 68 65 6e 20   not empty when 
4f90: 74 68 65 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d  the [BEGIN] comm
4fa0: 61 6e 64 20 69 73 20 69 6e 76 6f 6b 65 64 2c 20  and is invoked, 
4fb0: 74 68 65 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64  then the command
4fc0: 0a 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65  .fails with an e
4fd0: 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  rror.</p>..<p>^T
4fe0: 68 65 20 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d  he [COMMIT] comm
4ff0: 61 6e 64 20 63 6f 6d 6d 69 74 73 20 61 6c 6c 20  and commits all 
5000: 6f 75 74 73 74 61 6e 64 69 6e 67 20 74 72 61 6e  outstanding tran
5010: 73 61 63 74 69 6f 6e 73 20 61 6e 64 20 6c 65 61  sactions and lea
5020: 76 65 73 0a 74 68 65 20 74 72 61 6e 73 61 63 74  ves.the transact
5030: 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70 74 79 2e  ion stack empty.
5040: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45  </p>..<p>^The RE
5050: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 73 74  LEASE command st
5060: 61 72 74 73 20 77 69 74 68 20 74 68 65 20 6d 6f  arts with the mo
5070: 73 74 20 72 65 63 65 6e 74 20 61 64 64 69 74 69  st recent additi
5080: 6f 6e 20 74 6f 20 74 68 65 0a 74 72 61 6e 73 61  on to the.transa
5090: 63 74 69 6f 6e 20 73 74 61 63 6b 20 61 6e 64 20  ction stack and 
50a0: 72 65 6c 65 61 73 65 73 20 73 61 76 65 70 6f 69  releases savepoi
50b0: 6e 74 73 20 62 61 63 6b 77 61 72 64 73 20 0a 69  nts backwards .i
50c0: 6e 20 74 69 6d 65 20 75 6e 74 69 6c 20 69 74 20  n time until it 
50d0: 72 65 6c 65 61 73 65 73 20 61 20 73 61 76 65 70  releases a savep
50e0: 6f 69 6e 74 20 77 69 74 68 20 61 20 6d 61 74 63  oint with a matc
50f0: 68 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 2d 6e  hing savepoint-n
5100: 61 6d 65 2e 0a 5e 50 72 69 6f 72 20 73 61 76 65  ame..^Prior save
5110: 70 6f 69 6e 74 73 2c 20 65 76 65 6e 20 73 61 76  points, even sav
5120: 65 70 6f 69 6e 74 73 20 77 69 74 68 20 6d 61 74  epoints with mat
5130: 63 68 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 2d  ching savepoint-
5140: 6e 61 6d 65 73 2c 20 61 72 65 0a 75 6e 63 68 61  names, are.uncha
5150: 6e 67 65 64 2e 0a 5e 49 66 20 74 68 65 20 52 45  nged..^If the RE
5160: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 63 61  LEASE command ca
5170: 75 73 65 73 20 74 68 65 0a 74 72 61 6e 73 61 63  uses the.transac
5180: 74 69 6f 6e 20 73 74 61 63 6b 20 74 6f 20 62 65  tion stack to be
5190: 63 6f 6d 65 20 65 6d 70 74 79 20 28 69 66 20 74  come empty (if t
51a0: 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  he RELEASE comma
51b0: 6e 64 20 72 65 6c 65 61 73 65 73 20 74 68 65 0a  nd releases the.
51c0: 6f 75 74 65 72 6d 6f 73 74 20 74 72 61 6e 73 61  outermost transa
51d0: 63 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 73  ction from the s
51e0: 74 61 63 6b 29 20 74 68 65 6e 20 74 68 65 20 74  tack) then the t
51f0: 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69  ransaction commi
5200: 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ts.</p>..<p>^The
5210: 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20 63 6f 6d 6d   [ROLLBACK] comm
5220: 61 6e 64 20 77 69 74 68 6f 75 74 20 61 20 54 4f  and without a TO
5230: 20 63 6c 61 75 73 65 20 72 6f 6c 6c 73 20 62 61   clause rolls ba
5240: 63 6b 73 20 61 6c 6c 20 74 72 61 6e 73 61 63 74  cks all transact
5250: 69 6f 6e 73 0a 61 6e 64 20 6c 65 61 76 65 73 20  ions.and leaves 
5260: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
5270: 73 74 61 63 6b 20 65 6d 70 74 79 2e 3c 2f 70 3e  stack empty.</p>
5280: 0a 0a 3c 70 3e 5e 54 68 65 20 52 4f 4c 4c 42 41  ..<p>^The ROLLBA
5290: 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 20  CK command with 
52a0: 61 20 54 4f 20 63 6c 61 75 73 65 20 72 6f 6c 6c  a TO clause roll
52b0: 73 20 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69  s back transacti
52c0: 6f 6e 73 20 67 6f 69 6e 67 0a 62 61 63 6b 77 61  ons going.backwa
52d0: 72 64 73 20 69 6e 20 74 69 6d 65 20 62 61 63 6b  rds in time back
52e0: 20 74 6f 20 74 68 65 20 6d 6f 73 74 20 72 65 63   to the most rec
52f0: 65 6e 74 20 53 41 56 45 50 4f 49 4e 54 20 77 69  ent SAVEPOINT wi
5300: 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e 61  th a matching na
5310: 6d 65 2e 0a 5e 54 68 65 20 53 41 56 45 50 4f 49  me..^The SAVEPOI
5320: 4e 54 20 77 69 74 68 20 74 68 65 20 6d 61 74 63  NT with the matc
5330: 68 69 6e 67 20 6e 61 6d 65 20 72 65 6d 61 69 6e  hing name remain
5340: 73 20 6f 6e 20 74 68 65 20 74 72 61 6e 73 61 63  s on the transac
5350: 74 69 6f 6e 20 73 74 61 63 6b 2c 0a 62 75 74 20  tion stack,.but 
5360: 61 6c 6c 20 64 61 74 61 62 61 73 65 20 63 68 61  all database cha
5370: 6e 67 65 73 20 74 68 61 74 20 6f 63 63 75 72 72  nges that occurr
5380: 65 64 20 61 66 74 65 72 20 74 68 61 74 20 53 41  ed after that SA
5390: 56 45 50 4f 49 4e 54 20 77 61 73 20 63 72 65 61  VEPOINT was crea
53a0: 74 65 64 0a 61 72 65 20 72 6f 6c 6c 65 64 20 62  ted.are rolled b
53b0: 61 63 6b 2e 20 20 5e 49 66 20 74 68 65 20 73 61  ack.  ^If the sa
53c0: 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 20 69 6e 20  vepoint-name in 
53d0: 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f  a ROLLBACK TO co
53e0: 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74 0a 6d  mmand does not.m
53f0: 61 74 63 68 20 61 6e 79 20 53 41 56 45 50 4f 49  atch any SAVEPOI
5400: 4e 54 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 2c  NT on the stack,
5410: 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41   then the ROLLBA
5420: 43 4b 20 63 6f 6d 6d 61 6e 64 20 66 61 69 6c 73  CK command fails
5430: 20 77 69 74 68 20 61 6e 0a 65 72 72 6f 72 20 61   with an.error a
5440: 6e 64 20 6c 65 61 76 65 73 20 74 68 65 20 73 74  nd leaves the st
5450: 61 74 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ate of the datab
5460: 61 73 65 20 75 6e 63 68 61 6e 67 65 64 2e 3c 2f  ase unchanged.</
5470: 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
5480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
54a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
54b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
54c0: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
54d0: 6e 20 63 6f 6d 6d 65 6e 74 20 63 6f 6d 6d 65 6e  n comment commen
54e0: 74 20 7b 63 6f 6d 6d 65 6e 74 20 2a 63 6f 6d 6d  t {comment *comm
54f0: 65 6e 74 73 7d 0a 0a 42 75 62 62 6c 65 44 69 61  ents}..BubbleDia
5500: 67 72 61 6d 20 63 6f 6d 6d 65 6e 74 2d 73 79 6e  gram comment-syn
5510: 74 61 78 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tax.</tcl>..<p>^
5520: 43 6f 6d 6d 65 6e 74 73 20 61 72 65 20 6e 6f 74  Comments are not
5530: 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2c 20 62   SQL commands, b
5540: 75 74 20 63 61 6e 20 6f 63 63 75 72 20 77 69 74  ut can occur wit
5550: 68 69 6e 20 74 68 65 20 74 65 78 74 20 6f 66 0a  hin the text of.
5560: 53 51 4c 20 71 75 65 72 69 65 73 20 70 61 73 73  SQL queries pass
5570: 65 64 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 70  ed to [sqlite3_p
5580: 72 65 70 61 72 65 5f 76 32 28 29 5d 20 61 6e 64  repare_v2()] and
5590: 20 72 65 6c 61 74 65 64 20 69 6e 74 65 72 66 61   related interfa
55a0: 63 65 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 61  ces..^Comments a
55b0: 72 65 20 74 72 65 61 74 65 64 20 61 73 20 77 68  re treated as wh
55c0: 69 74 65 73 70 61 63 65 20 62 79 20 74 68 65 20  itespace by the 
55d0: 70 61 72 73 65 72 2e 0a 5e 43 6f 6d 6d 65 6e 74  parser..^Comment
55e0: 73 20 63 61 6e 20 62 65 67 69 6e 20 61 6e 79 77  s can begin anyw
55f0: 68 65 72 65 20 77 68 69 74 65 73 70 61 63 65 20  here whitespace 
5600: 0a 63 61 6e 20 62 65 20 66 6f 75 6e 64 2c 20 69  .can be found, i
5610: 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20  ncluding inside 
5620: 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74  expressions that
5630: 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c   span multiple l
5640: 69 6e 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ines..</p>..<p>^
5650: 53 51 4c 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67  SQL comments beg
5660: 69 6e 20 77 69 74 68 20 74 77 6f 20 63 6f 6e 73  in with two cons
5670: 65 63 75 74 69 76 65 20 22 2d 22 20 63 68 61 72  ecutive "-" char
5680: 61 63 74 65 72 73 20 28 41 53 43 49 49 20 30 78  acters (ASCII 0x
5690: 32 64 29 0a 61 6e 64 20 65 78 74 65 6e 64 20 75  2d).and extend u
56a0: 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69  p to and includi
56b0: 6e 67 20 74 68 65 20 6e 65 78 74 20 6e 65 77 6c  ng the next newl
56c0: 69 6e 65 20 63 68 61 72 61 63 74 65 72 20 28 41  ine character (A
56d0: 53 43 49 49 20 30 78 30 61 29 0a 6f 72 20 75 6e  SCII 0x0a).or un
56e0: 74 69 6c 20 74 68 65 20 65 6e 64 20 6f 66 20 69  til the end of i
56f0: 6e 70 75 74 2c 20 77 68 69 63 68 65 76 65 72 20  nput, whichever 
5700: 63 6f 6d 65 73 20 66 69 72 73 74 2e 3c 2f 70 3e  comes first.</p>
5710: 0a 0a 3c 70 3e 5e 43 2d 73 74 79 6c 65 20 63 6f  ..<p>^C-style co
5720: 6d 6d 65 6e 74 73 20 62 65 67 69 6e 0a 77 69 74  mments begin.wit
5730: 68 20 22 2f 2a 22 20 61 6e 64 20 65 78 74 65 6e  h "/*" and exten
5740: 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c  d up to and incl
5750: 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20 22  uding the next "
5760: 2a 2f 22 20 63 68 61 72 61 63 74 65 72 20 70 61  */" character pa
5770: 69 72 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65 20  ir.or until the 
5780: 65 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20 77 68  end of input, wh
5790: 69 63 68 65 76 65 72 20 63 6f 6d 65 73 20 66 69  ichever comes fi
57a0: 72 73 74 2e 20 20 5e 43 2d 73 74 79 6c 65 20 63  rst.  ^C-style c
57b0: 6f 6d 6d 65 6e 74 73 0a 63 61 6e 20 73 70 61 6e  omments.can span
57c0: 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73 2e   multiple lines.
57d0: 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65   </p>..<p>^Comme
57e0: 6e 74 73 20 63 61 6e 20 61 70 70 65 61 72 20 61  nts can appear a
57f0: 6e 79 77 68 65 72 65 20 77 68 69 74 65 73 70 61  nywhere whitespa
5800: 63 65 20 63 61 6e 20 6f 63 63 75 72 2c 0a 69 6e  ce can occur,.in
5810: 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20 65  cluding inside e
5820: 78 70 72 65 73 73 69 6f 6e 73 20 61 6e 64 20 69  xpressions and i
5830: 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20  n the middle of 
5840: 6f 74 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d  other SQL statem
5850: 65 6e 74 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20  ents..^Comments 
5860: 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 0a 3c 2f 70  do not nest..</p
5870: 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  >...<tcl>.######
5880: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5890: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
58a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
58b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
58c0: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
58d0: 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20   {CREATE INDEX} 
58e0: 63 72 65 61 74 65 69 6e 64 65 78 20 7b 7b 43 52  createindex {{CR
58f0: 45 41 54 45 20 49 4e 44 45 58 7d 7d 0a 0a 42 75  EATE INDEX}}..Bu
5900: 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61  bbleDiagram crea
5910: 74 65 2d 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a  te-index-stmt 1.
5920: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 69 6e  BubbleDiagram in
5930: 64 65 78 65 64 2d 63 6f 6c 75 6d 6e 0a 3c 2f 74  dexed-column.</t
5940: 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45  cl>..<p>^The CRE
5950: 41 54 45 20 49 4e 44 45 58 20 63 6f 6d 6d 61 6e  ATE INDEX comman
5960: 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68  d consists of th
5970: 65 20 6b 65 79 77 6f 72 64 73 20 22 43 52 45 41  e keywords "CREA
5980: 54 45 20 49 4e 44 45 58 22 20 66 6f 6c 6c 6f 77  TE INDEX" follow
5990: 65 64 0a 62 79 20 74 68 65 20 6e 61 6d 65 20 6f  ed.by the name o
59a0: 66 20 74 68 65 20 6e 65 77 20 69 6e 64 65 78 2c  f the new index,
59b0: 20 74 68 65 20 6b 65 79 77 6f 72 64 20 22 4f 4e   the keyword "ON
59c0: 22 2c 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  ", the name of a
59d0: 20 70 72 65 76 69 6f 75 73 6c 79 0a 63 72 65 61   previously.crea
59e0: 74 65 64 20 74 61 62 6c 65 20 74 68 61 74 20 69  ted table that i
59f0: 73 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 2c  s to be indexed,
5a00: 20 61 6e 64 20 61 20 70 61 72 65 6e 74 68 65 73   and a parenthes
5a10: 69 7a 65 64 20 6c 69 73 74 20 6f 66 20 6e 61 6d  ized list of nam
5a20: 65 73 20 6f 66 0a 63 6f 6c 75 6d 6e 73 20 69 6e  es of.columns in
5a30: 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
5a40: 61 72 65 20 75 73 65 64 20 66 6f 72 20 74 68 65  are used for the
5a50: 20 69 6e 64 65 78 20 6b 65 79 2e 3c 2f 70 3e 0a   index key.</p>.
5a60: 0a 3c 70 3e 5e 45 61 63 68 20 63 6f 6c 75 6d 6e  .<p>^Each column
5a70: 20 6e 61 6d 65 20 63 61 6e 20 62 65 20 66 6f 6c   name can be fol
5a80: 6c 6f 77 65 64 20 62 79 20 6f 6e 65 20 6f 66 20  lowed by one of 
5a90: 74 68 65 20 22 41 53 43 22 20 6f 72 20 22 44 45  the "ASC" or "DE
5aa0: 53 43 22 20 6b 65 79 77 6f 72 64 73 0a 74 6f 20  SC" keywords.to 
5ab0: 69 6e 64 69 63 61 74 65 20 73 6f 72 74 20 6f 72  indicate sort or
5ac0: 64 65 72 2e 20 20 5e 54 68 65 20 73 6f 72 74 20  der.  ^The sort 
5ad0: 6f 72 64 65 72 20 6d 61 79 20 6f 72 20 6d 61 79  order may or may
5ae0: 20 6e 6f 74 20 62 65 20 69 67 6e 6f 72 65 64 20   not be ignored 
5af0: 64 65 70 65 6e 64 69 6e 67 0a 6f 6e 20 74 68 65  depending.on the
5b00: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66   database file f
5b10: 6f 72 6d 61 74 2e 20 20 5e 54 68 65 20 22 6c 65  ormat.  ^The "le
5b20: 67 61 63 79 22 20 66 69 6c 65 20 66 6f 72 6d 61  gacy" file forma
5b30: 74 20 69 67 6e 6f 72 65 73 20 69 6e 64 65 78 0a  t ignores index.
5b40: 73 6f 72 74 20 6f 72 64 65 72 2e 20 20 5e 54 68  sort order.  ^Th
5b50: 65 20 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64  e descending ind
5b60: 65 78 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 74  ex file format t
5b70: 61 6b 65 73 20 69 6e 64 65 78 20 73 6f 72 74 20  akes index sort 
5b80: 6f 72 64 65 72 0a 69 6e 74 6f 20 61 63 63 6f 75  order.into accou
5b90: 6e 74 2e 20 20 5e 28 4f 6e 6c 79 20 63 6f 70 69  nt.  ^(Only copi
5ba0: 65 73 20 6f 66 20 53 51 4c 69 74 65 20 6e 65 77  es of SQLite new
5bb0: 65 72 20 74 68 61 6e 20 5b 76 65 72 73 69 6f 6e  er than [version
5bc0: 20 33 2e 33 2e 30 5d 20 0a 28 72 65 6c 65 61 73   3.3.0] .(releas
5bd0: 65 64 20 6f 6e 20 32 30 30 36 2d 30 31 2d 31 30  ed on 2006-01-10
5be0: 29 20 61 72 65 20 61 62 6c 65 20 74 6f 20 75 6e  ) are able to un
5bf0: 64 65 72 73 74 61 6e 64 20 74 68 65 20 6e 65 77  derstand the new
5c00: 65 72 20 64 65 73 63 65 6e 64 69 6e 67 0a 69 6e  er descending.in
5c10: 64 65 78 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  dex file format 
5c20: 61 6e 64 20 73 6f 20 66 6f 72 20 63 6f 6d 70 61  and so for compa
5c30: 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 6f 6c  tibility with ol
5c40: 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a  der versions of.
5c50: 53 51 4c 69 74 65 2c 20 74 68 65 20 6c 65 67 61  SQLite, the lega
5c60: 63 79 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 69  cy file format i
5c70: 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 64  s generated by d
5c80: 65 66 61 75 6c 74 2e 29 5e 20 20 5e 55 73 65 20  efault.)^  ^Use 
5c90: 74 68 65 0a 5b 6c 65 67 61 63 79 5f 66 69 6c 65  the.[legacy_file
5ca0: 5f 66 6f 72 6d 61 74 5d 20 70 72 61 67 6d 61 20  _format] pragma 
5cb0: 74 6f 20 6d 6f 64 69 66 79 20 74 68 69 73 20 62  to modify this b
5cc0: 65 68 61 76 69 6f 72 20 61 6e 64 20 67 65 6e 65  ehavior and gene
5cd0: 72 61 74 65 0a 64 61 74 61 62 61 73 65 73 20 74  rate.databases t
5ce0: 68 61 74 20 75 73 65 20 74 68 65 20 6e 65 77 65  hat use the newe
5cf0: 72 20 66 69 6c 65 20 66 6f 72 6d 61 74 2e 20 20  r file format.  
5d00: 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20  Future versions 
5d10: 6f 66 20 53 51 4c 69 74 65 0a 6d 61 79 20 62 65  of SQLite.may be
5d20: 67 69 6e 20 74 6f 20 67 65 6e 65 72 61 74 65 20  gin to generate 
5d30: 74 68 65 20 6e 65 77 65 72 20 66 69 6c 65 20 66  the newer file f
5d40: 6f 72 6d 61 74 20 62 79 20 64 65 66 61 75 6c 74  ormat by default
5d50: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43  .</p>..<p>^The C
5d60: 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 6f 70  OLLATE clause op
5d70: 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 69  tionally followi
5d80: 6e 67 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6e  ng each column n
5d90: 61 6d 65 20 64 65 66 69 6e 65 73 20 61 0a 63 6f  ame defines a.co
5da0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
5db0: 20 75 73 65 64 20 66 6f 72 20 74 65 78 74 20 65   used for text e
5dc0: 6e 74 72 69 65 73 20 69 6e 20 74 68 61 74 20 63  ntries in that c
5dd0: 6f 6c 75 6d 6e 2e 0a 5e 54 68 65 20 64 65 66 61  olumn..^The defa
5de0: 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 73 65  ult collating.se
5df0: 71 75 65 6e 63 65 20 69 73 20 74 68 65 20 63 6f  quence is the co
5e00: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
5e10: 20 64 65 66 69 6e 65 64 20 66 6f 72 20 74 68 61   defined for tha
5e20: 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 0a  t column in the.
5e30: 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73  [CREATE TABLE] s
5e40: 74 61 74 65 6d 65 6e 74 2e 20 20 5e 4f 72 20 69  tatement.  ^Or i
5e50: 66 20 6e 6f 20 63 6f 6c 6c 61 74 69 6e 67 20 73  f no collating s
5e60: 65 71 75 65 6e 63 65 20 69 73 20 6f 74 68 65 72  equence is other
5e70: 77 69 73 65 20 64 65 66 69 6e 65 64 2c 0a 74 68  wise defined,.th
5e80: 65 20 62 75 69 6c 74 2d 69 6e 20 42 49 4e 41 52  e built-in BINAR
5e90: 59 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  Y collating sequ
5ea0: 65 6e 63 65 20 69 73 20 75 73 65 64 2e 3c 2f 70  ence is used.</p
5eb0: 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20  >..<p>There are 
5ec0: 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c 69 6d  no arbitrary lim
5ed0: 69 74 73 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65  its on the numbe
5ee0: 72 20 6f 66 20 69 6e 64 69 63 65 73 20 74 68 61  r of indices tha
5ef0: 74 20 63 61 6e 20 62 65 0a 61 74 74 61 63 68 65  t can be.attache
5f00: 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61  d to a single ta
5f10: 62 6c 65 2e 20 20 5e 28 54 68 65 20 6e 75 6d 62  ble.  ^(The numb
5f20: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
5f30: 20 61 6e 20 69 6e 64 65 78 20 69 73 20 0a 6c 69   an index is .li
5f40: 6d 69 74 65 64 20 74 6f 20 74 68 65 20 76 61 6c  mited to the val
5f50: 75 65 20 73 65 74 20 62 79 0a 5b 73 71 6c 69 74  ue set by.[sqlit
5f60: 65 33 5f 6c 69 6d 69 74 5d 28 5b 53 51 4c 49 54  e3_limit]([SQLIT
5f70: 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 5d 2c  E_LIMIT_COLUMN],
5f80: 2e 2e 2e 29 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e  ...).)^</p>..<p>
5f90: 5e 49 66 20 74 68 65 20 55 4e 49 51 55 45 20 6b  ^If the UNIQUE k
5fa0: 65 79 77 6f 72 64 20 61 70 70 65 61 72 73 20 62  eyword appears b
5fb0: 65 74 77 65 65 6e 20 43 52 45 41 54 45 20 61 6e  etween CREATE an
5fc0: 64 20 49 4e 44 45 58 20 74 68 65 6e 20 64 75 70  d INDEX then dup
5fd0: 6c 69 63 61 74 65 0a 69 6e 64 65 78 20 65 6e 74  licate.index ent
5fe0: 72 69 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c  ries are not all
5ff0: 6f 77 65 64 2e 20 20 5e 41 6e 79 20 61 74 74 65  owed.  ^Any atte
6000: 6d 70 74 20 74 6f 20 69 6e 73 65 72 74 20 61 20  mpt to insert a 
6010: 64 75 70 6c 69 63 61 74 65 20 65 6e 74 72 79 0a  duplicate entry.
6020: 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61  will result in a
6030: 6e 20 65 72 72 6f 72 2e 20 20 5e 46 6f 72 20 74  n error.  ^For t
6040: 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 75  he purposes of u
6050: 6e 69 71 75 65 20 69 6e 64 69 63 65 73 2c 20 61  nique indices, a
6060: 6c 6c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 0a 61  ll NULL values.a
6070: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f  re considered to
6080: 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20   different from 
6090: 61 6c 6c 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76  all other NULL v
60a0: 61 6c 75 65 73 20 61 6e 64 20 61 72 65 20 74 68  alues and are th
60b0: 75 73 20 75 6e 69 71 75 65 2e 0a 54 68 69 73 20  us unique..This 
60c0: 69 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 77  is one of the tw
60d0: 6f 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 72  o possible inter
60e0: 70 72 65 74 61 74 69 6f 6e 73 20 6f 66 20 74 68  pretations of th
60f0: 65 20 53 51 4c 2d 39 32 20 73 74 61 6e 64 61 72  e SQL-92 standar
6100: 64 0a 28 74 68 65 20 6c 61 6e 67 75 61 67 65 20  d.(the language 
6110: 69 6e 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  in the standard 
6120: 69 73 20 61 6d 62 69 67 75 69 6f 75 73 29 20 61  is ambiguious) a
6130: 6e 64 20 69 73 20 74 68 65 20 69 6e 74 65 72 70  nd is the interp
6140: 72 65 74 61 74 69 6f 6e 0a 66 6f 6c 6c 6f 77 65  retation.followe
6150: 64 20 62 79 20 50 6f 73 74 67 72 65 53 51 4c 2c  d by PostgreSQL,
6160: 20 4d 79 53 51 4c 2c 20 46 69 72 65 62 69 72 64   MySQL, Firebird
6170: 2c 20 61 6e 64 20 4f 72 61 63 6c 65 2e 20 20 49  , and Oracle.  I
6180: 6e 66 6f 72 6d 69 78 20 61 6e 64 0a 4d 69 63 72  nformix and.Micr
6190: 6f 73 6f 66 74 20 53 51 4c 20 53 65 72 76 65 72  osoft SQL Server
61a0: 20 66 6f 6c 6c 6f 77 20 74 68 65 20 6f 74 68 65   follow the othe
61b0: 72 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  r interpretation
61c0: 20 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72 64   of the standard
61d0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68  .</p>..<p>^If th
61e0: 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 4e 4f  e optional IF NO
61f0: 54 20 45 58 49 53 54 53 20 63 6c 61 75 73 65 20  T EXISTS clause 
6200: 69 73 20 70 72 65 73 65 6e 74 20 61 6e 64 20 61  is present and a
6210: 6e 6f 74 68 65 72 20 69 6e 64 65 78 0a 77 69 74  nother index.wit
6220: 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  h the same name 
6230: 61 6c 65 61 64 79 20 65 78 69 73 74 73 2c 20 74  aleady exists, t
6240: 68 65 6e 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  hen this command
6250: 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70   becomes a no-op
6260: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 64 65 78  .</p>..<p>^Index
6270: 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 77  es are removed w
6280: 69 74 68 20 74 68 65 20 5b 44 52 4f 50 20 49 4e  ith the [DROP IN
6290: 44 45 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70  DEX] command.</p
62a0: 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  >...<tcl>.######
62b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
62c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
62d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
62e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
62f0: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
6300: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 7d 20   {CREATE TABLE} 
6310: 7b 63 72 65 61 74 65 74 61 62 6c 65 7d 20 7b 7b  {createtable} {{
6320: 43 52 45 41 54 45 20 54 41 42 4c 45 7d 7d 0a 0a  CREATE TABLE}}..
6330: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72  BubbleDiagram cr
6340: 65 61 74 65 2d 74 61 62 6c 65 2d 73 74 6d 74 20  eate-table-stmt 
6350: 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  1.BubbleDiagram 
6360: 63 6f 6c 75 6d 6e 2d 64 65 66 0a 42 75 62 62 6c  column-def.Bubbl
6370: 65 44 69 61 67 72 61 6d 20 74 79 70 65 2d 6e 61  eDiagram type-na
6380: 6d 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  me.BubbleDiagram
6390: 20 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74 72 61 69   column-constrai
63a0: 6e 74 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  nt.BubbleDiagram
63b0: 20 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e   table-constrain
63c0: 74 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  t.BubbleDiagram 
63d0: 66 6f 72 65 69 67 6e 2d 6b 65 79 2d 63 6c 61 75  foreign-key-clau
63e0: 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41  se.</tcl>..<p>^A
63f0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
6400: 61 74 65 6d 65 6e 74 20 69 73 20 62 61 73 69 63  atement is basic
6410: 61 6c 6c 79 20 74 68 65 20 6b 65 79 77 6f 72 64  ally the keyword
6420: 73 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 22  s "CREATE TABLE"
6430: 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65  .followed by the
6440: 20 6e 61 6d 65 20 6f 66 20 61 20 6e 65 77 20 74   name of a new t
6450: 61 62 6c 65 20 61 6e 64 20 61 20 70 61 72 65 6e  able and a paren
6460: 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66  thesized list of
6470: 20 63 6f 6c 75 6d 6e 0a 64 65 66 69 6e 69 74 69   column.definiti
6480: 6f 6e 73 20 61 6e 64 20 63 6f 6e 73 74 72 61 69  ons and constrai
6490: 6e 74 73 2e 20 20 0a 5e 54 61 62 6c 65 73 20 6e  nts.  .^Tables n
64a0: 61 6d 65 73 20 74 68 61 74 20 62 65 67 69 6e 20  ames that begin 
64b0: 77 69 74 68 20 22 3c 62 3e 73 71 6c 69 74 65 5f  with "<b>sqlite_
64c0: 3c 2f 62 3e 22 20 61 72 65 20 72 65 73 65 72 76  </b>" are reserv
64d0: 65 64 0a 66 6f 72 20 75 73 65 20 62 79 20 53 51  ed.for use by SQ
64e0: 4c 69 74 65 20 69 74 73 65 6c 66 20 61 6e 64 20  Lite itself and 
64f0: 63 61 6e 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 0a  cannot normally.
6500: 61 70 70 65 61 72 20 69 6e 20 61 20 43 52 45 41  appear in a CREA
6510: 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  TE TABLE stateme
6520: 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 45 61 63  nt.</p>..<p>^Eac
6530: 68 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74  h column definit
6540: 69 6f 6e 20 69 73 20 74 68 65 20 6e 61 6d 65 20  ion is the name 
6550: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 70  of the column op
6560: 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65  tionally followe
6570: 64 20 62 79 20 74 68 65 0a 5b 64 61 74 61 74 79  d by the.[dataty
6580: 70 65 5d 20 66 6f 72 20 74 68 61 74 20 63 6f 6c  pe] for that col
6590: 75 6d 6e 2c 20 74 68 65 6e 20 6f 6e 65 20 6f 72  umn, then one or
65a0: 20 6d 6f 72 65 20 6f 70 74 69 6f 6e 61 6c 20 63   more optional c
65b0: 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72 61 69 6e 74  olumn constraint
65c0: 73 2e 0a 5e 53 51 4c 69 74 65 20 75 73 65 73 20  s..^SQLite uses 
65d0: 5b 64 79 6e 61 6d 69 63 20 74 79 70 69 6e 67 5d  [dynamic typing]
65e0: 3b 20 0a 74 68 65 20 64 61 74 61 74 79 70 65 20  ; .the datatype 
65f0: 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 64  for the column d
6600: 6f 65 73 20 6e 6f 74 20 72 65 73 74 72 69 63 74  oes not restrict
6610: 20 77 68 61 74 20 64 61 74 61 20 6d 61 79 20 62   what data may b
6620: 65 20 70 75 74 0a 69 6e 20 74 68 61 74 20 63 6f  e put.in that co
6630: 6c 75 6d 6e 2e 0a 5e 54 68 65 20 55 4e 49 51 55  lumn..^The UNIQU
6640: 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 61 75  E constraint cau
6650: 73 65 73 20 61 6e 20 75 6e 69 71 75 65 20 69 6e  ses an unique in
6660: 64 65 78 20 74 6f 20 62 65 20 63 72 65 61 74 65  dex to be create
6670: 64 20 6f 6e 20 74 68 65 20 73 70 65 63 69 66 69  d on the specifi
6680: 65 64 0a 63 6f 6c 75 6d 6e 73 2e 20 20 5e 41 6c  ed.columns.  ^Al
6690: 6c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72  l NULL values ar
66a0: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 64 69 66  e considered dif
66b0: 66 65 72 65 6e 74 20 66 72 6f 6d 20 65 61 63 68  ferent from each
66c0: 20 6f 74 68 65 72 20 61 6e 64 20 66 72 6f 6d 0a   other and from.
66d0: 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73  all other values
66e0: 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65   for the purpose
66f0: 20 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 20   of determining 
6700: 75 6e 69 71 75 65 6e 65 73 73 2c 20 68 65 6e 63  uniqueness, henc
6710: 65 20 61 20 55 4e 49 51 55 45 0a 63 6f 6c 75 6d  e a UNIQUE.colum
6720: 6e 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 6d 75  n may contain mu
6730: 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73 20 77  ltiple entries w
6740: 69 74 68 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ith the value of
6750: 20 4e 55 4c 4c 2e 0a 5e 54 68 65 20 43 4f 4c 4c   NULL..^The COLL
6760: 41 54 45 20 63 6c 61 75 73 65 20 73 70 65 63 69  ATE clause speci
6770: 66 69 65 73 20 77 68 61 74 20 74 65 78 74 20 0a  fies what text .
6780: 5b 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74  [collating funct
6790: 69 6f 6e 5d 20 74 6f 20 75 73 65 20 77 68 65 6e  ion] to use when
67a0: 20 63 6f 6d 70 61 72 69 6e 67 20 74 65 78 74 20   comparing text 
67b0: 65 6e 74 72 69 65 73 20 66 6f 72 20 74 68 65 20  entries for the 
67c0: 63 6f 6c 75 6d 6e 2e 20 20 0a 5e 54 68 65 20 62  column.  .^The b
67d0: 75 69 6c 74 2d 69 6e 20 5b 42 49 4e 41 52 59 5d  uilt-in [BINARY]
67e0: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
67f0: 69 6f 6e 20 69 73 20 75 73 65 64 20 62 79 20 64  ion is used by d
6800: 65 66 61 75 6c 74 2e 0a 3c 70 3e 0a 5e 54 68 65  efault..<p>.^The
6810: 20 44 45 46 41 55 4c 54 20 63 6f 6e 73 74 72 61   DEFAULT constra
6820: 69 6e 74 20 73 70 65 63 69 66 69 65 73 20 61 20  int specifies a 
6830: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 74 6f  default value to
6840: 20 75 73 65 20 77 68 65 6e 20 64 6f 69 6e 67 20   use when doing 
6850: 61 6e 20 5b 49 4e 53 45 52 54 5d 2e 0a 5e 54 68  an [INSERT]..^Th
6860: 65 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 4e  e value may be N
6870: 55 4c 4c 2c 20 61 20 73 74 72 69 6e 67 20 63 6f  ULL, a string co
6880: 6e 73 74 61 6e 74 2c 20 61 20 6e 75 6d 62 65 72  nstant, a number
6890: 2c 20 6f 72 20 61 20 63 6f 6e 73 74 61 6e 74 20  , or a constant 
68a0: 65 78 70 72 65 73 73 69 6f 6e 0a 65 6e 63 6c 6f  expression.enclo
68b0: 73 65 64 20 69 6e 20 70 61 72 65 6e 74 68 65 73  sed in parenthes
68c0: 65 73 2e 0a 5e 54 68 65 20 64 65 66 61 75 6c 74  es..^The default
68d0: 20 76 61 6c 75 65 20 6d 61 79 20 61 6c 73 6f 20   value may also 
68e0: 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 73 70  be one of the sp
68f0: 65 63 69 61 6c 20 63 61 73 65 2d 69 6e 64 65 70  ecial case-indep
6900: 65 6e 64 61 6e 74 0a 6b 65 79 77 6f 72 64 73 20  endant.keywords 
6910: 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55  CURRENT_TIME, CU
6920: 52 52 45 4e 54 5f 44 41 54 45 20 6f 72 20 43 55  RRENT_DATE or CU
6930: 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2e  RRENT_TIMESTAMP.
6940: 20 20 5e 49 66 20 74 68 65 20 76 61 6c 75 65 20    ^If the value 
6950: 69 73 0a 4e 55 4c 4c 2c 20 61 20 73 74 72 69 6e  is.NULL, a strin
6960: 67 20 63 6f 6e 73 74 61 6e 74 20 6f 72 20 6e 75  g constant or nu
6970: 6d 62 65 72 2c 20 69 74 20 69 73 20 69 6e 73 65  mber, it is inse
6980: 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 63 6f  rted into the co
6990: 6c 75 6d 6e 0a 77 68 65 6e 65 76 65 72 20 61 6e  lumn.whenever an
69a0: 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
69b0: 74 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20  t that does not 
69c0: 73 70 65 63 69 66 79 20 61 20 76 61 6c 75 65 20  specify a value 
69d0: 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69  for the column i
69e0: 73 0a 65 78 65 63 75 74 65 64 2e 20 5e 49 66 20  s.executed. ^If 
69f0: 74 68 65 20 76 61 6c 75 65 20 69 73 20 43 55 52  the value is CUR
6a00: 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45  RENT_TIME, CURRE
6a10: 4e 54 5f 44 41 54 45 20 6f 72 20 43 55 52 52 45  NT_DATE or CURRE
6a20: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 74 68  NT_TIMESTAMP, th
6a30: 65 6e 0a 74 68 65 20 63 75 72 72 65 6e 74 20 55  en.the current U
6a40: 54 43 20 64 61 74 65 20 61 6e 64 2f 6f 72 20 74  TC date and/or t
6a50: 69 6d 65 20 69 73 20 69 6e 73 65 72 74 65 64 20  ime is inserted 
6a60: 69 6e 74 6f 20 74 68 65 20 63 6f 6c 75 6d 6e 73  into the columns
6a70: 2e 20 5e 46 6f 72 0a 43 55 52 52 45 4e 54 5f 54  . ^For.CURRENT_T
6a80: 49 4d 45 2c 20 74 68 65 20 66 6f 72 6d 61 74 20  IME, the format 
6a90: 69 73 20 48 48 3a 4d 4d 3a 53 53 2e 20 5e 46 6f  is HH:MM:SS. ^Fo
6aa0: 72 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2c 20  r CURRENT_DATE, 
6ab0: 59 59 59 59 2d 4d 4d 2d 44 44 2e 0a 5e 54 68 65  YYYY-MM-DD..^The
6ac0: 20 66 6f 72 6d 61 74 20 66 6f 72 20 43 55 52 52   format for CURR
6ad0: 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20 69 73  ENT_TIMESTAMP is
6ae0: 20 22 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a   "YYYY-MM-DD HH:
6af0: 4d 4d 3a 53 53 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70  MM:SS"..</p>..<p
6b00: 3e 5e 28 54 68 65 20 50 52 49 4d 41 52 59 20 4b  >^(The PRIMARY K
6b10: 45 59 20 61 74 74 72 69 62 75 74 65 20 6e 6f 72  EY attribute nor
6b20: 6d 61 6c 6c 79 20 63 72 65 61 74 65 73 20 61 20  mally creates a 
6b30: 55 4e 49 51 55 45 20 69 6e 64 65 78 20 6f 6e 0a  UNIQUE index on.
6b40: 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 63 6f  the column or co
6b50: 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65 20 73  lumns that are s
6b60: 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20  pecified as the 
6b70: 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 54 68  PRIMARY KEY.  Th
6b80: 65 20 6f 6e 6c 79 0a 65 78 63 65 70 74 69 6f 6e  e only.exception
6b90: 20 74 6f 20 74 68 69 73 20 62 65 68 61 76 69 6f   to this behavio
6ba0: 72 20 69 73 20 73 70 65 63 69 61 6c 20 5b 49 4e  r is special [IN
6bb0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
6bc0: 59 5d 20 63 6f 6c 75 6d 6e 2c 0a 64 65 73 63 72  Y] column,.descr
6bd0: 69 62 65 64 20 62 65 6c 6f 77 2e 29 5e 0a 5e 28  ibed below.)^.^(
6be0: 41 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65  According to the
6bf0: 20 53 51 4c 20 73 74 61 6e 64 61 72 64 2c 20 50   SQL standard, P
6c00: 52 49 4d 41 52 59 20 4b 45 59 20 73 68 6f 75 6c  RIMARY KEY shoul
6c10: 64 20 69 6d 70 6c 79 20 4e 4f 54 20 4e 55 4c 4c  d imply NOT NULL
6c20: 2e 0a 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c  ..Unfortunately,
6c30: 20 64 75 65 20 74 6f 20 61 20 6c 6f 6e 67 2d 73   due to a long-s
6c40: 74 61 6e 64 69 6e 67 20 63 6f 64 69 6e 67 20 6f  tanding coding o
6c50: 76 65 72 73 69 67 68 74 2c 20 74 68 69 73 20 69  versight, this i
6c60: 73 20 6e 6f 74 20 0a 74 68 65 20 63 61 73 65 20  s not .the case 
6c70: 69 6e 20 53 51 4c 69 74 65 2e 20 20 53 51 4c 69  in SQLite.  SQLi
6c80: 74 65 20 61 6c 6c 6f 77 73 20 4e 55 4c 4c 20 76  te allows NULL v
6c90: 61 6c 75 65 73 0a 69 6e 20 61 20 50 52 49 4d 41  alues.in a PRIMA
6ca0: 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 2e 29 5e  RY KEY column.)^
6cb0: 20 20 57 65 20 63 6f 75 6c 64 20 63 68 61 6e 67    We could chang
6cc0: 65 20 53 51 4c 69 74 65 20 74 6f 20 63 6f 6e 66  e SQLite to conf
6cd0: 6f 72 6d 20 74 6f 20 74 68 65 0a 73 74 61 6e 64  orm to the.stand
6ce0: 61 72 64 20 28 61 6e 64 20 77 65 20 6d 69 67 68  ard (and we migh
6cf0: 74 20 64 6f 20 73 6f 20 69 6e 20 74 68 65 20 66  t do so in the f
6d00: 75 74 75 72 65 29 2c 20 62 75 74 20 62 79 20 74  uture), but by t
6d10: 68 65 20 74 69 6d 65 20 74 68 65 0a 6f 76 65 72  he time the.over
6d20: 73 69 67 68 74 20 77 61 73 20 64 69 73 63 6f 76  sight was discov
6d30: 65 72 65 64 2c 20 53 51 4c 69 74 65 20 77 61 73  ered, SQLite was
6d40: 20 69 6e 20 73 75 63 68 20 77 69 64 65 20 75 73   in such wide us
6d50: 65 20 74 68 61 74 20 77 65 20 66 65 61 72 65 64  e that we feared
6d60: 0a 62 72 65 61 6b 69 6e 67 20 6c 65 67 61 63 79  .breaking legacy
6d70: 20 63 6f 64 65 20 69 66 20 77 65 20 66 69 78 65   code if we fixe
6d80: 64 20 74 68 65 20 70 72 6f 62 6c 65 6d 2e 20 20  d the problem.  
6d90: 53 6f 20 66 6f 72 20 6e 6f 77 20 77 65 20 68 61  So for now we ha
6da0: 76 65 0a 63 68 6f 73 65 6e 20 74 6f 20 63 6f 6e  ve.chosen to con
6db0: 74 69 6e 75 65 20 61 6c 6c 6f 77 69 6e 67 20 4e  tinue allowing N
6dc0: 55 4c 4c 73 20 69 6e 20 50 52 49 4d 41 52 59 20  ULLs in PRIMARY 
6dd0: 4b 45 59 20 63 6f 6c 75 6d 6e 73 2e 0a 44 65 76  KEY columns..Dev
6de0: 65 6c 6f 70 65 72 73 20 73 68 6f 75 6c 64 20 62  elopers should b
6df0: 65 20 61 77 61 72 65 2c 20 68 6f 77 65 76 65 72  e aware, however
6e00: 2c 20 74 68 61 74 20 77 65 20 6d 61 79 20 63 68  , that we may ch
6e10: 61 6e 67 65 20 53 51 4c 69 74 65 20 74 6f 0a 63  ange SQLite to.c
6e20: 6f 6e 66 6f 72 6d 20 74 6f 20 74 68 65 20 53 51  onform to the SQ
6e30: 4c 20 73 74 61 6e 64 61 72 64 20 69 6e 20 66 75  L standard in fu
6e40: 74 75 72 65 20 61 6e 64 20 73 68 6f 75 6c 64 20  ture and should 
6e50: 64 65 73 69 67 6e 20 6e 65 77 20 70 72 6f 67 72  design new progr
6e60: 61 6d 73 0a 61 63 63 6f 72 64 69 6e 67 6c 79 2e  ams.accordingly.
6e70: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 53 51 4c 69 74 65  </p>..<p>^SQLite
6e80: 20 75 73 65 73 20 5b 64 79 6e 61 6d 69 63 20 74   uses [dynamic t
6e90: 79 70 69 6e 67 5d 20 69 6e 73 74 65 61 64 20 6f  yping] instead o
6ea0: 66 20 73 74 61 74 69 63 20 74 79 70 69 6e 67 2e  f static typing.
6eb0: 20 20 5e 45 78 63 65 70 74 20 66 6f 72 20 74 68    ^Except for th
6ec0: 65 0a 73 70 65 63 69 61 6c 20 63 61 73 65 20 6f  e.special case o
6ed0: 66 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  f [INTEGER PRIMA
6ee0: 52 59 20 4b 45 59 5d 2c 20 53 51 4c 69 74 65 20  RY KEY], SQLite 
6ef0: 77 69 6c 6c 20 61 6c 6c 6f 77 20 76 61 6c 75 65  will allow value
6f00: 73 20 6f 66 20 61 6e 79 0a 74 79 70 65 20 74 6f  s of any.type to
6f10: 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 6e   be stored in an
6f20: 79 20 63 6f 6c 75 6d 6e 20 72 65 67 61 72 64 6c  y column regardl
6f30: 65 73 73 20 6f 66 20 74 68 65 20 64 65 63 6c 61  ess of the decla
6f40: 72 65 64 20 64 61 74 61 74 79 70 65 20 6f 66 0a  red datatype of.
6f50: 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 20 20 5e 54  that column.  ^T
6f60: 68 65 20 64 65 63 6c 61 72 65 64 20 64 61 74 61  he declared data
6f70: 74 79 70 65 20 69 73 20 61 20 5b 61 66 66 69 6e  type is a [affin
6f80: 69 74 79 20 7c 20 74 79 70 65 20 61 66 66 69 6e  ity | type affin
6f90: 69 74 79 5d 20 74 68 61 74 0a 53 51 4c 69 74 65  ity] that.SQLite
6fa0: 20 61 74 74 65 6d 70 74 73 20 74 6f 20 63 6f 6d   attempts to com
6fb0: 70 6c 79 20 77 69 74 68 2c 20 62 75 74 20 74 68  ply with, but th
6fc0: 65 20 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c  e operation will
6fd0: 20 70 72 6f 63 65 65 64 20 65 76 65 6e 20 69 66   proceed even if
6fe0: 0a 63 6f 6d 70 6c 69 61 6e 63 65 20 69 73 20 6e  .compliance is n
6ff0: 6f 74 20 70 6f 73 73 69 62 6c 65 2e 3c 2f 70 3e  ot possible.</p>
7000: 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 22 54 45  ..<p>^If the "TE
7010: 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41 52  MP" or "TEMPORAR
7020: 59 22 20 6b 65 79 77 6f 72 64 20 6f 63 63 75 72  Y" keyword occur
7030: 73 20 69 6e 20 62 65 74 77 65 65 6e 20 22 43 52  s in between "CR
7040: 45 41 54 45 22 0a 61 6e 64 20 22 54 41 42 4c 45  EATE".and "TABLE
7050: 22 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  " then the table
7060: 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64   that is created
7070: 20 69 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c 65   is only visible
7080: 0a 77 69 74 68 69 6e 20 74 68 61 74 20 73 61 6d  .within that sam
7090: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
70a0: 63 74 69 6f 6e 0a 61 6e 64 20 69 73 20 61 75 74  ction.and is aut
70b0: 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74  omatically delet
70c0: 65 64 20 77 68 65 6e 0a 74 68 65 20 64 61 74 61  ed when.the data
70d0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
70e0: 69 73 20 63 6c 6f 73 65 64 2e 20 20 5e 41 6e 79  is closed.  ^Any
70f0: 20 69 6e 64 69 63 65 73 20 63 72 65 61 74 65 64   indices created
7100: 20 6f 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20   on a temporary 
7110: 74 61 62 6c 65 0a 61 72 65 20 61 6c 73 6f 20 74  table.are also t
7120: 65 6d 70 6f 72 61 72 79 2e 20 20 5e 54 65 6d 70  emporary.  ^Temp
7130: 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64  orary tables and
7140: 20 69 6e 64 69 63 65 73 20 61 72 65 20 73 74 6f   indices are sto
7150: 72 65 64 20 69 6e 20 61 0a 73 65 70 61 72 61 74  red in a.separat
7160: 65 20 66 69 6c 65 20 64 69 73 74 69 6e 63 74 20  e file distinct 
7170: 66 72 6f 6d 20 74 68 65 20 6d 61 69 6e 20 64 61  from the main da
7180: 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e  tabase file.</p>
7190: 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 26 6c 74 3b  ..<p> ^If a &lt;
71a0: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74  database-name&gt
71b0: 3b 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  ; is specified, 
71c0: 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69  then the table i
71d0: 73 20 63 72 65 61 74 65 64 20 69 6e 20 0a 74 68  s created in .th
71e0: 65 20 6e 61 6d 65 64 20 64 61 74 61 62 61 73 65  e named database
71f0: 2e 20 5e 49 74 20 69 73 20 61 6e 20 65 72 72 6f  . ^It is an erro
7200: 72 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f 74  r to specify bot
7210: 68 20 61 20 26 6c 74 3b 64 61 74 61 62 61 73 65  h a &lt;database
7220: 2d 6e 61 6d 65 26 67 74 3b 0a 61 6e 64 20 74 68  -name&gt;.and th
7230: 65 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 2c 20  e TEMP keyword, 
7240: 75 6e 6c 65 73 73 20 74 68 65 20 26 6c 74 3b 64  unless the &lt;d
7250: 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b  atabase-name&gt;
7260: 20 69 73 20 22 74 65 6d 70 22 2e 20 5e 49 66 20   is "temp". ^If 
7270: 6e 6f 0a 64 61 74 61 62 61 73 65 20 6e 61 6d 65  no.database name
7280: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 6e   is specified an
7290: 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f  d the TEMP keywo
72a0: 72 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e  rd is not presen
72b0: 74 20 74 68 65 6e 0a 74 68 65 20 74 61 62 6c 65  t then.the table
72c0: 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20 74   is created in t
72d0: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
72e0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f  .</p>..<p>^The o
72f0: 70 74 69 6f 6e 61 6c 20 5b 63 6f 6e 66 6c 69 63  ptional [conflic
7300: 74 20 63 6c 61 75 73 65 5d 20 66 6f 6c 6c 6f 77  t clause] follow
7310: 69 6e 67 20 65 61 63 68 20 63 6f 6e 73 74 72 61  ing each constra
7320: 69 6e 74 0a 61 6c 6c 6f 77 73 20 74 68 65 20 73  int.allows the s
7330: 70 65 63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20  pecification of 
7340: 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20 64  an alternative d
7350: 65 66 61 75 6c 74 0a 63 6f 6e 73 74 72 61 69 6e  efault.constrain
7360: 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  t conflict resol
7370: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
7380: 66 6f 72 20 74 68 61 74 20 63 6f 6e 73 74 72 61  for that constra
7390: 69 6e 74 2e 0a 5e 49 66 20 6e 6f 20 63 6f 6e 66  int..^If no conf
73a0: 6c 69 63 74 20 63 6c 61 75 73 65 20 69 73 20 73  lict clause is s
73b0: 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 41 42  pecified, the AB
73c0: 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ORT algorithm is
73d0: 20 75 73 65 64 2e 0a 5e 44 69 66 66 65 72 65 6e   used..^Differen
73e0: 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 69  t constraints wi
73f0: 74 68 69 6e 20 74 68 65 20 73 61 6d 65 0a 74 61  thin the same.ta
7400: 62 6c 65 20 6d 61 79 20 68 61 76 65 20 64 69 66  ble may have dif
7410: 66 65 72 65 6e 74 20 63 6f 6e 66 6c 69 63 74 20  ferent conflict 
7420: 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
7430: 69 74 68 6d 73 2e 0a 5e 49 66 20 61 6e 20 5b 49  ithms..^If an [I
7440: 4e 53 45 52 54 5d 20 6f 72 20 5b 55 50 44 41 54  NSERT] or [UPDAT
7450: 45 5d 20 73 74 61 74 65 6d 65 6e 74 20 73 70 65  E] statement spe
7460: 63 69 66 69 65 73 20 61 20 63 6f 6e 66 6c 69 63  cifies a conflic
7470: 74 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t.resolution alg
7480: 6f 72 69 74 68 6d 2c 20 74 68 65 6e 20 74 68 65  orithm, then the
7490: 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69   algorithm speci
74a0: 66 69 65 64 20 6f 6e 20 74 68 65 20 49 4e 53 45  fied on the INSE
74b0: 52 54 20 6f 72 0a 55 50 44 41 54 45 20 73 74 61  RT or.UPDATE sta
74c0: 74 65 6d 65 6e 74 20 6f 76 65 72 72 69 64 65 73  tement overrides
74d0: 20 74 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 73   the algorithm s
74e0: 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 20  pecified in the 
74f0: 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74  .CREATE TABLE st
7500: 61 74 65 6d 65 6e 74 2e 0a 53 65 65 20 74 68 65  atement..See the
7510: 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 0a   section titled.
7520: 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f  [ON CONFLICT] fo
7530: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
7540: 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c  ormation.</p>..<
7550: 70 3e 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  p>CHECK constrai
7560: 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65  nts are supporte
7570: 64 20 61 73 20 6f 66 20 5b 76 65 72 73 69 6f 6e  d as of [version
7580: 20 33 2e 33 2e 30 5d 2e 20 20 50 72 69 6f 72 0a   3.3.0].  Prior.
7590: 74 6f 20 76 65 72 73 69 6f 6e 20 33 2e 33 2e 30  to version 3.3.0
75a0: 2c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  , CHECK constrai
75b0: 6e 74 73 20 77 65 72 65 20 70 61 72 73 65 64 20  nts were parsed 
75c0: 62 75 74 20 6e 6f 74 20 65 6e 66 6f 72 63 65 64  but not enforced
75d0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6e  .</p>..<p>^The n
75e0: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
75f0: 20 69 6e 20 61 20 74 61 62 6c 65 20 69 73 20 6c   in a table is l
7600: 69 6d 69 74 65 64 20 62 79 20 74 68 65 0a 5b 53  imited by the.[S
7610: 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e  QLITE_MAX_COLUMN
7620: 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 70  ] compile-time p
7630: 61 72 61 6d 65 74 65 72 2e 0a 5e 41 20 73 69 6e  arameter..^A sin
7640: 67 6c 65 20 72 6f 77 20 6f 66 20 61 20 74 61 62  gle row of a tab
7650: 6c 65 20 63 61 6e 6e 6f 74 20 73 74 6f 72 65 20  le cannot store 
7660: 6d 6f 72 65 20 74 68 61 6e 0a 5b 53 51 4c 49 54  more than.[SQLIT
7670: 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 5d 20 62 79  E_MAX_LENGTH] by
7680: 74 65 73 20 6f 66 20 64 61 74 61 2e 0a 5e 42 6f  tes of data..^Bo
7690: 74 68 20 6f 66 20 74 68 65 73 65 20 6c 69 6d 69  th of these limi
76a0: 74 73 20 63 61 6e 20 62 65 20 6c 6f 77 65 72 65  ts can be lowere
76b0: 64 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73 69  d at runtime usi
76c0: 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f  ng the.[sqlite3_
76d0: 6c 69 6d 69 74 28 29 5d 20 43 2f 43 2b 2b 20 69  limit()] C/C++ i
76e0: 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 0a  nterface.</p>...
76f0: 3c 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 54  <p>^The CREATE T
7700: 41 42 4c 45 20 41 53 20 66 6f 72 6d 20 64 65 66  ABLE AS form def
7710: 69 6e 65 73 20 74 68 65 20 74 61 62 6c 65 20 74  ines the table t
7720: 6f 20 62 65 0a 74 68 65 20 72 65 73 75 6c 74 20  o be.the result 
7730: 73 65 74 20 6f 66 20 61 20 71 75 65 72 79 2e 20  set of a query. 
7740: 20 5e 54 68 65 20 6e 61 6d 65 73 20 6f 66 20 74   ^The names of t
7750: 68 65 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73  he table columns
7760: 20 61 72 65 0a 74 68 65 20 6e 61 6d 65 73 20 6f   are.the names o
7770: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  f the columns in
7780: 20 74 68 65 20 72 65 73 75 6c 74 2e 3c 2f 70 3e   the result.</p>
7790: 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70 74  ..<p>^If the opt
77a0: 69 6f 6e 61 6c 20 49 46 20 4e 4f 54 20 45 58 49  ional IF NOT EXI
77b0: 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70 72  STS clause is pr
77c0: 65 73 65 6e 74 20 61 6e 64 20 61 6e 6f 74 68 65  esent and anothe
77d0: 72 20 74 61 62 6c 65 0a 77 69 74 68 20 74 68 65  r table.with the
77e0: 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 65 61 64   same name alead
77f0: 79 20 65 78 69 73 74 73 2c 20 74 68 65 6e 20 74  y exists, then t
7800: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 62 65 63 6f  his command beco
7810: 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 3c 2f 70 3e  mes a no-op.</p>
7820: 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73 20 61 72 65  ..<p>^Tables are
7830: 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 74   removed using t
7840: 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20  he [DROP TABLE] 
7850: 73 74 61 74 65 6d 65 6e 74 2e 20 20 3c 2f 70 3e  statement.  </p>
7860: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
7870: 6e 74 20 72 6f 77 69 64 20 7b 49 4e 54 45 47 45  nt rowid {INTEGE
7880: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 7d 20 52  R PRIMARY KEY} R
7890: 4f 57 49 44 20 72 6f 77 69 64 3c 2f 74 63 6c 3e  OWID rowid</tcl>
78a0: 0a 3c 68 33 3e 52 4f 57 49 44 73 20 61 6e 64 20  .<h3>ROWIDs and 
78b0: 74 68 65 20 49 4e 54 45 47 45 52 20 50 52 49 4d  the INTEGER PRIM
78c0: 41 52 59 20 4b 45 59 3c 2f 68 33 3e 0a 0a 3c 70  ARY KEY</h3>..<p
78d0: 3e 5e 45 76 65 72 79 20 72 6f 77 20 6f 66 20 65  >^Every row of e
78e0: 76 65 72 79 20 53 51 4c 69 74 65 20 74 61 62 6c  very SQLite tabl
78f0: 65 20 68 61 73 20 61 20 36 34 2d 62 69 74 20 73  e has a 64-bit s
7900: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 6b 65  igned integer ke
7910: 79 20 0a 74 68 61 74 20 69 73 20 75 6e 69 71 75  y .that is uniqu
7920: 65 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  e within the sam
7930: 65 20 74 61 62 6c 65 2e 0a 54 68 69 73 20 69 6e  e table..This in
7940: 74 65 67 65 72 20 69 73 20 75 73 75 61 6c 6c 79  teger is usually
7950: 20 63 61 6c 6c 65 64 20 74 68 65 20 22 72 6f 77   called the "row
7960: 69 64 22 2e 20 20 5e 54 68 65 20 72 6f 77 69 64  id".  ^The rowid
7970: 20 69 73 20 74 68 65 20 61 63 74 75 61 6c 20 6b   is the actual k
7980: 65 79 20 75 73 65 64 0a 69 6e 20 74 68 65 20 42  ey used.in the B
7990: 2d 54 72 65 65 20 74 68 61 74 20 69 6d 70 6c 65  -Tree that imple
79a0: 6d 65 6e 74 73 20 61 6e 20 53 51 4c 69 74 65 20  ments an SQLite 
79b0: 74 61 62 6c 65 2e 20 20 5e 52 6f 77 73 20 61 72  table.  ^Rows ar
79c0: 65 20 73 74 6f 72 65 64 20 69 6e 0a 72 6f 77 69  e stored in.rowi
79d0: 64 20 6f 72 64 65 72 2e 20 5e 54 68 65 0a 72 6f  d order. ^The.ro
79e0: 77 69 64 20 76 61 6c 75 65 20 63 61 6e 20 62 65  wid value can be
79f0: 20 61 63 63 65 73 73 65 64 20 75 73 69 6e 67 20   accessed using 
7a00: 6f 6e 65 20 6f 66 20 74 68 65 20 73 70 65 63 69  one of the speci
7a10: 61 6c 20 6e 61 6d 65 73 0a 22 3c 62 3e 52 4f 57  al names."<b>ROW
7a20: 49 44 3c 2f 62 3e 22 2c 20 22 3c 62 3e 4f 49 44  ID</b>", "<b>OID
7a30: 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c 62 3e 5f 52  </b>", or "<b>_R
7a40: 4f 57 49 44 5f 3c 2f 62 3e 22 20 61 73 73 75 6d  OWID_</b>" assum
7a50: 69 6e 67 20 74 68 6f 73 65 20 6e 61 6d 65 73 0a  ing those names.
7a60: 61 72 65 20 6e 6f 20 75 73 65 64 20 62 79 20 6f  are no used by o
7a70: 74 68 65 72 20 63 6f 6e 76 65 6e 74 69 6f 6e 61  ther conventiona
7a80: 6c 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73 2e  l table columns.
7a90: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 49 66 20 61 20  </p>..<p>.^If a 
7aa0: 63 6f 6c 75 6d 6e 20 69 73 20 64 65 63 6c 61 72  column is declar
7ab0: 65 64 20 74 6f 20 62 65 20 61 6e 20 49 4e 54 45  ed to be an INTE
7ac0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
7ad0: 20 74 68 65 6e 20 74 68 61 74 20 63 6f 6c 75 6d   then that colum
7ae0: 6e 20 69 73 20 6e 6f 74 0a 61 20 22 72 65 61 6c  n is not.a "real
7af0: 22 20 64 61 74 61 62 61 73 65 20 63 6f 6c 75 6d  " database colum
7b00: 6e 20 62 75 74 20 69 6e 73 74 65 61 64 20 62 65  n but instead be
7b10: 63 6f 6d 65 73 0a 61 6e 20 61 6c 69 61 73 20 66  comes.an alias f
7b20: 6f 72 20 74 68 65 20 72 6f 77 69 64 2e 20 20 5e  or the rowid.  ^
7b30: 55 6e 6c 69 6b 65 20 6e 6f 72 6d 61 6c 20 53 51  Unlike normal SQ
7b40: 4c 69 74 65 20 63 6f 6c 75 6d 6e 73 2c 20 74 68  Lite columns, th
7b50: 65 20 72 6f 77 69 64 0a 6d 75 73 74 20 62 65 20  e rowid.must be 
7b60: 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 74 65 67  a non-NULL integ
7b70: 65 72 20 76 61 6c 75 65 2e 20 20 5e 54 68 65 20  er value.  ^The 
7b80: 72 6f 77 69 64 20 69 73 20 6e 6f 74 20 61 62 6c  rowid is not abl
7b90: 65 20 74 6f 20 68 6f 6c 64 0a 66 6c 6f 61 74 69  e to hold.floati
7ba0: 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 2c  ng point values,
7bb0: 20 73 74 72 69 6e 67 73 2c 20 42 4c 4f 42 73 2c   strings, BLOBs,
7bc0: 20 6f 72 20 4e 55 4c 4c 73 2e 3c 2f 70 3e 0a 0a   or NULLs.</p>..
7bd0: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 69 3e 0a  <blockquote><i>.
7be0: 5e 41 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d  ^An INTEGER PRIM
7bf0: 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 20 69  ARY KEY column i
7c00: 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
7c10: 68 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64  he 64-bit signed
7c20: 20 69 6e 74 65 67 65 72 20 72 6f 77 69 64 2e 0a   integer rowid..
7c30: 3c 2f 69 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  </i></blockquote
7c40: 3e 0a 0a 3c 70 3e 5e 41 6e 20 49 4e 54 45 47 45  >..<p>^An INTEGE
7c50: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f  R PRIMARY KEY co
7c60: 6c 75 6d 6e 20 63 61 6e 20 61 6c 73 6f 20 69 6e  lumn can also in
7c70: 63 6c 75 64 65 20 74 68 65 0a 6b 65 79 77 6f 72  clude the.keywor
7c80: 64 20 5b 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  d [AUTOINCREMENT
7c90: 5d 2e 20 20 5e 54 68 65 20 5b 41 55 54 4f 49 4e  ].  ^The [AUTOIN
7ca0: 43 52 45 4d 45 4e 54 5d 20 6b 65 79 77 6f 72 64  CREMENT] keyword
7cb0: 20 6d 6f 64 69 66 69 65 64 20 74 68 65 20 77 61   modified the wa
7cc0: 79 0a 74 68 61 74 20 42 2d 54 72 65 65 20 6b 65  y.that B-Tree ke
7cd0: 79 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  ys are automatic
7ce0: 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 64 2e 20  ally generated. 
7cf0: 20 41 64 64 69 74 69 6f 6e 61 6c 20 64 65 74 61   Additional deta
7d00: 69 6c 0a 6f 6e 20 61 75 74 6f 6d 61 74 69 63 20  il.on automatic 
7d10: 42 2d 54 72 65 65 20 6b 65 79 20 67 65 6e 65 72  B-Tree key gener
7d20: 61 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62  ation is availab
7d30: 6c 65 0a 3c 61 20 68 72 65 66 3d 22 61 75 74 6f  le.<a href="auto
7d40: 69 6e 63 2e 68 74 6d 6c 22 3e 73 65 70 61 72 61  inc.html">separa
7d50: 74 65 6c 79 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c  tely</a>.</p>..<
7d60: 70 3e 5e 54 68 65 20 73 70 65 63 69 61 6c 20 62  p>^The special b
7d70: 65 68 61 76 69 6f 72 20 6f 66 20 49 4e 54 45 47  ehavior of INTEG
7d80: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 0a 69  ER PRIMARY KEY.i
7d90: 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65  s only available
7da0: 20 69 66 20 74 68 65 20 74 79 70 65 20 6e 61 6d   if the type nam
7db0: 65 20 69 73 20 65 78 61 63 74 6c 79 20 22 49 4e  e is exactly "IN
7dc0: 54 45 47 45 52 22 20 69 6e 20 61 6e 79 20 6d 69  TEGER" in any mi
7dd0: 78 74 75 72 65 0a 6f 66 20 75 70 70 65 72 20 61  xture.of upper a
7de0: 6e 64 20 6c 6f 77 65 72 20 63 61 73 65 2e 20 20  nd lower case.  
7df0: 5e 4f 74 68 65 72 20 69 6e 74 65 67 65 72 20 74  ^Other integer t
7e00: 79 70 65 20 6e 61 6d 65 73 0a 6c 69 6b 65 20 22  ype names.like "
7e10: 49 4e 54 22 20 6f 72 20 22 42 49 47 49 4e 54 22  INT" or "BIGINT"
7e20: 20 6f 72 20 22 53 48 4f 52 54 20 49 4e 54 45 47   or "SHORT INTEG
7e30: 45 52 22 20 6f 72 20 22 55 4e 53 49 47 4e 45 44  ER" or "UNSIGNED
7e40: 20 49 4e 54 45 47 45 52 22 0a 63 61 75 73 65 73   INTEGER".causes
7e50: 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
7e60: 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 68 61 76   column to behav
7e70: 65 20 61 73 20 61 6e 20 6f 72 64 69 6e 61 72 79  e as an ordinary
7e80: 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 77 69   table column wi
7e90: 74 68 0a 69 6e 74 65 67 65 72 20 5b 61 66 66 69  th.integer [affi
7ea0: 6e 69 74 79 5d 20 61 6e 64 20 61 20 75 6e 69 71  nity] and a uniq
7eb0: 75 65 20 69 6e 64 65 78 2c 20 6e 6f 74 20 61 73  ue index, not as
7ec0: 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68   an alias for th
7ed0: 65 20 72 6f 77 69 64 2e 0a 5e 28 54 68 65 20 73  e rowid..^(The s
7ee0: 70 65 63 69 61 6c 20 62 65 68 61 76 69 6f 72 20  pecial behavior 
7ef0: 6f 66 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  of INTEGER PRIMA
7f00: 52 59 20 4b 45 59 20 69 73 20 6f 6e 6c 79 20 61  RY KEY is only a
7f10: 76 61 69 6c 61 62 6c 65 20 69 66 20 74 68 65 0a  vailable if the.
7f20: 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61  primary key is a
7f30: 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20   single column. 
7f40: 20 4d 75 6c 74 69 2d 63 6f 6c 75 6d 6e 20 70 72   Multi-column pr
7f50: 69 6d 61 72 79 20 6b 65 79 73 20 64 6f 20 6e 6f  imary keys do no
7f60: 74 20 62 65 63 6f 6d 65 0a 61 6c 69 61 73 65 73  t become.aliases
7f70: 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 2e 29   for the rowid.)
7f80: 5e 0a 5e 54 68 65 20 41 55 54 4f 49 4e 43 52 45  ^.^The AUTOINCRE
7f90: 4d 45 4e 54 20 6b 65 79 77 6f 72 64 20 6f 6e 6c  MENT keyword onl
7fa0: 79 20 77 6f 72 6b 73 20 6f 6e 20 61 20 63 6f 6c  y works on a col
7fb0: 75 6d 6e 20 74 68 61 74 20 69 73 20 61 6e 20 61  umn that is an a
7fc0: 6c 69 61 73 0a 66 6f 72 20 74 68 65 20 72 6f 77  lias.for the row
7fd0: 69 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e 6f 74 65  id.</p>..<p>Note
7fe0: 20 74 68 61 74 20 73 65 61 72 63 68 65 73 20 61   that searches a
7ff0: 67 61 69 6e 73 74 20 61 20 72 6f 77 69 64 20 61  gainst a rowid a
8000: 72 65 20 67 65 6e 65 72 61 6c 6c 79 20 61 62 6f  re generally abo
8010: 75 74 20 74 77 69 63 65 20 61 73 0a 66 61 73 74  ut twice as.fast
8020: 20 61 73 20 73 65 61 72 63 68 65 73 20 61 67 61   as searches aga
8030: 69 6e 73 74 20 61 6e 79 20 6f 74 68 65 72 20 50  inst any other P
8040: 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 69 6e  RIMARY KEY or in
8050: 64 65 78 65 64 20 76 61 6c 75 65 2e 0a 3c 2f 70  dexed value..</p
8060: 3e 0a 0a 3c 70 3e 3c 62 3e 47 6f 6f 66 79 20 62  >..<p><b>Goofy b
8070: 65 68 61 76 69 6f 72 20 61 6c 65 72 74 3a 3c 2f  ehavior alert:</
8080: 62 3e 20 20 5e 28 54 68 65 20 66 6f 6c 6c 6f 77  b>  ^(The follow
8090: 69 6e 67 20 74 68 72 65 65 20 64 65 63 6c 61 72  ing three declar
80a0: 61 74 69 6f 6e 73 20 61 6c 6c 20 63 61 75 73 65  ations all cause
80b0: 0a 74 68 65 20 63 6f 6c 75 6d 6e 20 22 78 22 20  .the column "x" 
80c0: 62 65 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  be an alias for 
80d0: 74 68 65 20 72 6f 77 69 64 3a 3c 2f 70 3e 0a 0a  the rowid:</p>..
80e0: 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45  <ul>.<li><tt>CRE
80f0: 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e  ATE TABLE t(x IN
8100: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
8110: 59 20 41 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74  Y ASC, y, z);</t
8120: 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54  t>.<li><tt>CREAT
8130: 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45  E TABLE t(x INTE
8140: 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41  GER, y, z, PRIMA
8150: 52 59 20 4b 45 59 28 78 20 41 53 43 29 29 3b 3c  RY KEY(x ASC));<
8160: 2f 74 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45  /tt>.<li><tt>CRE
8170: 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e  ATE TABLE t(x IN
8180: 54 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49  TEGER, y, z, PRI
8190: 4d 41 52 59 20 4b 45 59 28 78 20 44 45 53 43 29  MARY KEY(x DESC)
81a0: 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a  );</tt>.</ul>)^.
81b0: 0a 3c 70 3e 42 75 74 2c 20 69 6e 20 63 6f 6e 74  .<p>But, in cont
81c0: 72 61 73 74 2c 20 5e 28 74 68 65 20 66 6f 6c 6c  rast, ^(the foll
81d0: 6f 77 69 6e 67 20 64 65 63 6c 61 72 61 74 69 6f  owing declaratio
81e0: 6e 20 64 6f 65 73 20 3c 75 3e 6e 6f 74 3c 2f 75  n does <u>not</u
81f0: 3e 20 72 65 73 75 6c 74 20 69 6e 0a 22 78 22 20  > result in."x" 
8200: 62 65 69 6e 67 20 61 6e 20 61 6c 69 61 73 20 66  being an alias f
8210: 6f 72 20 74 68 65 20 72 6f 77 69 64 3a 3c 2f 70  or the rowid:</p
8220: 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e  >..<ul>.<li><tt>
8230: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 28 78  CREATE TABLE t(x
8240: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
8250: 20 4b 45 59 20 44 45 53 43 2c 20 79 2c 20 7a 29   KEY DESC, y, z)
8260: 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a  ;</tt>.</ul>)^..
8270: 3c 70 3e 54 68 69 73 20 61 73 79 6d 6d 65 74 72  <p>This asymmetr
8280: 69 63 61 6c 20 62 65 68 61 76 69 6f 72 20 69 73  ical behavior is
8290: 20 75 6e 66 6f 72 74 75 6e 61 74 65 20 61 6e 64   unfortunate and
82a0: 20 69 73 20 72 65 61 6c 6c 79 20 64 75 65 20 74   is really due t
82b0: 6f 20 61 20 62 75 67 0a 69 6e 20 74 68 65 20 70  o a bug.in the p
82c0: 61 72 73 65 72 20 69 6e 20 65 61 72 6c 79 20 76  arser in early v
82d0: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
82e0: 65 2e 20 20 42 75 74 20 66 69 78 69 6e 67 20 74  e.  But fixing t
82f0: 68 65 20 62 75 67 20 77 6f 75 6c 64 0a 72 65 73  he bug would.res
8300: 75 6c 74 20 69 6e 20 76 65 72 79 20 73 65 72 69  ult in very seri
8310: 6f 75 73 20 62 61 63 6b 77 61 72 64 73 20 69 6e  ous backwards in
8320: 63 6f 6d 70 61 74 69 62 69 6c 69 74 69 65 73 2e  compatibilities.
8330: 20 20 54 68 65 20 53 51 4c 69 74 65 20 64 65 76    The SQLite dev
8340: 65 6c 6f 70 65 72 73 0a 66 65 65 6c 20 74 68 61  elopers.feel tha
8350: 74 20 67 6f 6f 66 79 20 62 65 68 61 76 69 6f 72  t goofy behavior
8360: 20 69 6e 20 61 6e 20 63 6f 72 6e 65 72 20 63 61   in an corner ca
8370: 73 65 20 69 73 20 66 61 72 20 62 65 74 74 65 72  se is far better
8380: 20 74 68 61 6e 0a 61 20 63 6f 6d 70 61 74 69 62   than.a compatib
8390: 69 6c 69 74 79 20 62 72 65 61 6b 2c 20 73 6f 20  ility break, so 
83a0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 62 65 68  the original beh
83b0: 61 76 69 6f 72 20 69 73 20 72 65 74 61 69 6e 65  avior is retaine
83c0: 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  d.</p>..<tcl>.##
83d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
83e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
83f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8400: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8410: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
8420: 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 52 49  tion {CREATE TRI
8430: 47 47 45 52 7d 20 63 72 65 61 74 65 74 72 69 67  GGER} createtrig
8440: 67 65 72 20 7b 7b 43 52 45 41 54 45 20 54 52 49  ger {{CREATE TRI
8450: 47 47 45 52 7d 7d 0a 0a 42 75 62 62 6c 65 44 69  GGER}}..BubbleDi
8460: 61 67 72 61 6d 20 63 72 65 61 74 65 2d 74 72 69  agram create-tri
8470: 67 67 65 72 2d 73 74 6d 74 20 31 0a 3c 2f 74 63  gger-stmt 1.</tc
8480: 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41  l>..<p>^The CREA
8490: 54 45 20 54 52 49 47 47 45 52 20 73 74 61 74 65  TE TRIGGER state
84a0: 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20  ment is used to 
84b0: 61 64 64 20 74 72 69 67 67 65 72 73 20 74 6f 20  add triggers to 
84c0: 74 68 65 20 0a 64 61 74 61 62 61 73 65 20 73 63  the .database sc
84d0: 68 65 6d 61 2e 20 5e 54 72 69 67 67 65 72 73 20  hema. ^Triggers 
84e0: 61 72 65 20 64 61 74 61 62 61 73 65 20 6f 70 65  are database ope
84f0: 72 61 74 69 6f 6e 73 20 0a 74 68 61 74 20 61 72  rations .that ar
8500: 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  e automatically 
8510: 70 65 72 66 6f 72 6d 65 64 20 77 68 65 6e 20 61  performed when a
8520: 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61 62   specified datab
8530: 61 73 65 20 65 76 65 6e 74 0a 6f 63 63 75 72 73  ase event.occurs
8540: 2e 20 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 74  .  </p>..<p>^A t
8550: 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 73 70  rigger may be sp
8560: 65 63 69 66 69 65 64 20 74 6f 20 66 69 72 65 20  ecified to fire 
8570: 77 68 65 6e 65 76 65 72 20 61 20 5b 44 45 4c 45  whenever a [DELE
8580: 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 0a 6f  TE], [INSERT],.o
8590: 72 20 5b 55 50 44 41 54 45 5d 20 6f 66 20 61 0a  r [UPDATE] of a.
85a0: 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62  particular datab
85b0: 61 73 65 20 74 61 62 6c 65 20 6f 63 63 75 72 73  ase table occurs
85c0: 2c 20 6f 72 20 77 68 65 6e 65 76 65 72 20 61 6e  , or whenever an
85d0: 20 5b 55 50 44 41 54 45 5d 20 6f 63 63 75 72 73   [UPDATE] occurs
85e0: 20 6f 6e 0a 6f 6e 20 6f 6e 65 20 6f 72 20 6d 6f   on.on one or mo
85f0: 72 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c  re specified col
8600: 75 6d 6e 73 20 6f 66 20 61 20 74 61 62 6c 65 2e  umns of a table.
8610: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 74 20 74 68 69  </p>..<p>^At thi
8620: 73 20 74 69 6d 65 20 53 51 4c 69 74 65 20 73 75  s time SQLite su
8630: 70 70 6f 72 74 73 20 6f 6e 6c 79 20 46 4f 52 20  pports only FOR 
8640: 45 41 43 48 20 52 4f 57 20 74 72 69 67 67 65 72  EACH ROW trigger
8650: 73 2c 20 6e 6f 74 20 46 4f 52 20 45 41 43 48 0a  s, not FOR EACH.
8660: 53 54 41 54 45 4d 45 4e 54 20 74 72 69 67 67 65  STATEMENT trigge
8670: 72 73 2e 20 5e 48 65 6e 63 65 20 65 78 70 6c 69  rs. ^Hence expli
8680: 63 69 74 6c 79 20 73 70 65 63 69 66 79 69 6e 67  citly specifying
8690: 20 46 4f 52 20 45 41 43 48 20 52 4f 57 20 69 73   FOR EACH ROW is
86a0: 20 6f 70 74 69 6f 6e 61 6c 2e 0a 5e 46 4f 52 20   optional..^FOR 
86b0: 45 41 43 48 20 52 4f 57 20 69 6d 70 6c 69 65 73  EACH ROW implies
86c0: 20 74 68 61 74 20 74 68 65 20 53 51 4c 20 73 74   that the SQL st
86d0: 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69  atements specifi
86e0: 65 64 20 69 6e 20 74 68 65 20 74 72 69 67 67 65  ed in the trigge
86f0: 72 0a 6d 61 79 20 62 65 20 65 78 65 63 75 74 65  r.may be execute
8700: 64 20 28 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  d (depending on 
8710: 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 29  the WHEN clause)
8720: 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61   for each databa
8730: 73 65 20 72 6f 77 20 62 65 69 6e 67 0a 69 6e 73  se row being.ins
8740: 65 72 74 65 64 2c 20 75 70 64 61 74 65 64 20 6f  erted, updated o
8750: 72 20 64 65 6c 65 74 65 64 20 62 79 20 74 68 65  r deleted by the
8760: 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73 69   statement causi
8770: 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 74  ng the trigger t
8780: 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  o fire.</p>..<p>
8790: 5e 28 42 6f 74 68 20 74 68 65 20 57 48 45 4e 20  ^(Both the WHEN 
87a0: 63 6c 61 75 73 65 20 61 6e 64 20 74 68 65 20 74  clause and the t
87b0: 72 69 67 67 65 72 20 61 63 74 69 6f 6e 73 20 6d  rigger actions m
87c0: 61 79 20 61 63 63 65 73 73 20 65 6c 65 6d 65 6e  ay access elemen
87d0: 74 73 20 6f 66 20 0a 74 68 65 20 72 6f 77 20 62  ts of .the row b
87e0: 65 69 6e 67 20 69 6e 73 65 72 74 65 64 2c 20 64  eing inserted, d
87f0: 65 6c 65 74 65 64 20 6f 72 20 75 70 64 61 74 65  eleted or update
8800: 64 20 75 73 69 6e 67 20 72 65 66 65 72 65 6e 63  d using referenc
8810: 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 0a  es of the form .
8820: 22 4e 45 57 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e  "NEW.<i>column-n
8830: 61 6d 65 3c 2f 69 3e 22 20 61 6e 64 20 22 4f 4c  ame</i>" and "OL
8840: 44 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  D.<i>column-name
8850: 3c 2f 69 3e 22 2c 20 77 68 65 72 65 0a 3c 69 3e  </i>", where.<i>
8860: 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 20  column-name</i> 
8870: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
8880: 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68 65   column from the
8890: 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20   table that the 
88a0: 74 72 69 67 67 65 72 0a 69 73 20 61 73 73 6f 63  trigger.is assoc
88b0: 69 61 74 65 64 20 77 69 74 68 2e 29 5e 20 5e 28  iated with.)^ ^(
88c0: 4f 4c 44 20 61 6e 64 20 4e 45 57 20 72 65 66 65  OLD and NEW refe
88d0: 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20  rences may only 
88e0: 62 65 20 75 73 65 64 20 69 6e 20 74 72 69 67 67  be used in trigg
88f0: 65 72 73 20 6f 6e 0a 65 76 65 6e 74 73 20 66 6f  ers on.events fo
8900: 72 20 77 68 69 63 68 20 74 68 65 79 20 61 72 65  r which they are
8910: 20 72 65 6c 65 76 61 6e 74 2c 20 61 73 20 66 6f   relevant, as fo
8920: 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 61 62  llows:</p>..<tab
8930: 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c  le border=0 cell
8940: 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e  padding=10>.<tr>
8950: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
8960: 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20  " align="right" 
8970: 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 49 4e 53  width=120><i>INS
8980: 45 52 54 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64  ERT</i></td>.<td
8990: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45   valign="top">NE
89a0: 57 20 72 65 66 65 72 65 6e 63 65 73 20 61 72 65  W references are
89b0: 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72   valid</td>.</tr
89c0: 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67  >.<tr>.<td valig
89d0: 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72  n="top" align="r
89e0: 69 67 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e  ight" width=120>
89f0: 3c 69 3e 55 50 44 41 54 45 3c 2f 69 3e 3c 2f 74  <i>UPDATE</i></t
8a00: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  d>.<td valign="t
8a10: 6f 70 22 3e 4e 45 57 20 61 6e 64 20 4f 4c 44 20  op">NEW and OLD 
8a20: 72 65 66 65 72 65 6e 63 65 73 20 61 72 65 20 76  references are v
8a30: 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  alid</td>.</tr>.
8a40: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
8a50: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
8a60: 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69  ht" width=120><i
8a70: 3e 44 45 4c 45 54 45 3c 2f 69 3e 3c 2f 74 64 3e  >DELETE</i></td>
8a80: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
8a90: 22 3e 4f 4c 44 20 72 65 66 65 72 65 6e 63 65 73  ">OLD references
8aa0: 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a   are valid</td>.
8ab0: 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  </tr>.</table>.<
8ac0: 2f 70 3e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 61 20  /p>)^..<p>^If a 
8ad0: 57 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20 73  WHEN clause is s
8ae0: 75 70 70 6c 69 65 64 2c 20 74 68 65 20 53 51 4c  upplied, the SQL
8af0: 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63   statements spec
8b00: 69 66 69 65 64 0a 61 72 65 20 6f 6e 6c 79 20 65  ified.are only e
8b10: 78 65 63 75 74 65 64 20 66 6f 72 20 72 6f 77 73  xecuted for rows
8b20: 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 57   for which the W
8b30: 48 45 4e 0a 63 6c 61 75 73 65 20 69 73 20 74 72  HEN.clause is tr
8b40: 75 65 2e 20 5e 49 66 20 6e 6f 20 57 48 45 4e 20  ue. ^If no WHEN 
8b50: 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c 69  clause is suppli
8b60: 65 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61 74  ed, the SQL stat
8b70: 65 6d 65 6e 74 73 0a 61 72 65 20 65 78 65 63 75  ements.are execu
8b80: 74 65 64 20 66 6f 72 20 61 6c 6c 20 72 6f 77 73  ted for all rows
8b90: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 42  .</p>..<p>^The B
8ba0: 45 46 4f 52 45 20 6f 72 20 41 46 54 45 52 20 6b  EFORE or AFTER k
8bb0: 65 79 77 6f 72 64 20 64 65 74 65 72 6d 69 6e 65  eyword determine
8bc0: 73 20 77 68 65 6e 20 74 68 65 20 74 72 69 67 67  s when the trigg
8bd0: 65 72 20 61 63 74 69 6f 6e 73 0a 77 69 6c 6c 20  er actions.will 
8be0: 62 65 20 65 78 65 63 75 74 65 64 20 72 65 6c 61  be executed rela
8bf0: 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e 73 65  tive to the inse
8c00: 72 74 69 6f 6e 2c 20 6d 6f 64 69 66 69 63 61 74  rtion, modificat
8c10: 69 6f 6e 20 6f 72 20 72 65 6d 6f 76 61 6c 20 6f  ion or removal o
8c20: 66 20 74 68 65 0a 61 73 73 6f 63 69 61 74 65 64  f the.associated
8c30: 20 72 6f 77 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41   row.</p>..<p>^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 6d 61 79 20 62 65 20 73 70  clause may be sp
8c60: 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
8c70: 6f 66 20 61 6e 20 5b 55 50 44 41 54 45 5d 20 6f  of an [UPDATE] o
8c80: 72 20 5b 49 4e 53 45 52 54 5d 0a 61 63 74 69 6f  r [INSERT].actio
8c90: 6e 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  n within the bod
8ca0: 79 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72  y of the trigger
8cb0: 2e 0a 5e 48 6f 77 65 76 65 72 20 69 66 20 61 6e  ..^However if an
8cc0: 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 63   [ON CONFLICT] c
8cd0: 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69  lause is specifi
8ce0: 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 0a 74  ed as part of .t
8cf0: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75  he statement cau
8d00: 73 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72  sing the trigger
8d10: 20 74 6f 20 66 69 72 65 2c 20 74 68 65 6e 20 63   to fire, then c
8d20: 6f 6e 66 6c 69 63 74 20 68 61 6e 64 6c 69 6e 67  onflict handling
8d30: 0a 70 6f 6c 69 63 79 20 6f 66 20 74 68 65 20 6f  .policy of the o
8d40: 75 74 65 72 20 73 74 61 74 65 6d 65 6e 74 20 69  uter statement i
8d50: 73 20 75 73 65 64 20 69 6e 73 74 65 61 64 2e 3c  s used instead.<
8d60: 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72  /p>..<p>^Trigger
8d70: 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  s are automatica
8d80: 6c 6c 79 20 5b 44 52 4f 50 20 54 52 49 47 47 45  lly [DROP TRIGGE
8d90: 52 20 7c 20 64 72 6f 70 70 65 64 5d 0a 77 68 65  R | dropped].whe
8da0: 6e 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  n the table that
8db0: 20 74 68 65 79 20 61 72 65 20 0a 61 73 73 6f 63   they are .assoc
8dc0: 69 61 74 65 64 20 77 69 74 68 20 28 74 68 65 20  iated with (the 
8dd0: 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69  <i>table-name</i
8de0: 3e 20 74 61 62 6c 65 29 20 69 73 20 0a 5b 44 52  > table) is .[DR
8df0: 4f 50 20 54 41 42 4c 45 20 7c 20 64 72 6f 70 70  OP TABLE | dropp
8e00: 65 64 5d 2e 20 20 5e 48 6f 77 65 76 65 72 20 69  ed].  ^However i
8e10: 66 20 74 68 65 20 74 68 65 20 74 72 69 67 67 65  f the the trigge
8e20: 72 20 61 63 74 69 6f 6e 73 20 72 65 66 65 72 65  r actions refere
8e30: 6e 63 65 0a 6f 74 68 65 72 20 74 61 62 6c 65 73  nce.other tables
8e40: 2c 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73  , the trigger is
8e50: 20 6e 6f 74 20 64 72 6f 70 70 65 64 20 6f 72 20   not dropped or 
8e60: 6d 6f 64 69 66 69 65 64 20 69 66 20 74 68 6f 73  modified if thos
8e70: 65 20 6f 74 68 65 72 0a 74 61 62 6c 65 73 20 61  e other.tables a
8e80: 72 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 20 7c  re [DROP TABLE |
8e90: 20 64 72 6f 70 70 65 64 5d 20 6f 72 20 5b 41 4c   dropped] or [AL
8ea0: 54 45 52 20 54 41 42 4c 45 20 7c 20 6d 6f 64 69  TER TABLE | modi
8eb0: 66 69 65 64 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  fied].</p>..<p>^
8ec0: 54 72 69 67 67 65 72 73 20 61 72 65 20 72 65 6d  Triggers are rem
8ed0: 6f 76 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b  oved using the [
8ee0: 44 52 4f 50 20 54 52 49 47 47 45 52 5d 20 73 74  DROP TRIGGER] st
8ef0: 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68  atement.</p>..<h
8f00: 33 3e 53 79 6e 74 61 78 20 52 65 73 74 72 69 63  3>Syntax Restric
8f10: 74 69 6f 6e 73 20 4f 6e 20 55 50 44 41 54 45 2c  tions On UPDATE,
8f20: 20 44 45 4c 45 54 45 2c 20 61 6e 64 20 49 4e 53   DELETE, and INS
8f30: 45 52 54 20 53 74 61 74 65 6d 65 6e 74 73 20 57  ERT Statements W
8f40: 69 74 68 69 6e 0a 20 20 20 20 54 72 69 67 67 65  ithin.    Trigge
8f50: 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65  rs</h3>..<p>^The
8f60: 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45   [UPDATE], [DELE
8f70: 54 45 5d 2c 20 61 6e 64 20 5b 49 4e 53 45 52 54  TE], and [INSERT
8f80: 5d 0a 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  ].statements wit
8f90: 68 69 6e 20 74 72 69 67 67 65 72 73 20 64 6f 20  hin triggers do 
8fa0: 6e 6f 74 20 73 75 70 70 6f 72 74 0a 74 68 65 20  not support.the 
8fb0: 66 75 6c 6c 20 73 79 6e 74 61 78 20 66 6f 72 20  full syntax for 
8fc0: 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54  [UPDATE], [DELET
8fd0: 45 5d 2c 20 61 6e 64 20 5b 49 4e 53 45 52 54 5d  E], and [INSERT]
8fe0: 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 54 68   statements.  Th
8ff0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 72 65 73 74  e following.rest
9000: 72 69 63 74 69 6f 6e 73 20 61 70 70 6c 79 3a 3c  rictions apply:<
9010: 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  /p>..<ul>.<li><p
9020: 3e 0a 20 20 5e 28 54 68 65 20 6e 61 6d 65 20 6f  >.  ^(The name o
9030: 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62  f the table to b
9040: 65 20 6d 6f 64 69 66 69 65 64 20 69 6e 20 61 6e  e modified in an
9050: 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45   [UPDATE], [DELE
9060: 54 45 5d 2c 20 6f 72 20 5b 49 4e 53 45 52 54 5d  TE], or [INSERT]
9070: 0a 20 20 73 74 61 74 65 6d 65 6e 74 20 6d 75 73  .  statement mus
9080: 74 20 62 65 20 61 6e 20 75 6e 71 75 61 6c 69 66  t be an unqualif
9090: 69 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 2e 20  ied table name. 
90a0: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
90b0: 20 6f 6e 65 20 6d 75 73 74 0a 20 20 75 73 65 20   one must.  use 
90c0: 6a 75 73 74 20 22 3c 69 3e 74 61 62 6c 65 6e 61  just "<i>tablena
90d0: 6d 65 3c 2f 69 3e 22 20 6e 6f 74 20 22 3c 69 3e  me</i>" not "<i>
90e0: 64 61 74 61 62 61 73 65 3c 2f 69 3e 3c 62 3e 2e  database</i><b>.
90f0: 3c 2f 62 3e 3c 69 3e 74 61 62 6c 65 6e 61 6d 65  </b><i>tablename
9100: 3c 2f 69 3e 22 0a 20 20 77 68 65 6e 20 73 70 65  </i>".  when spe
9110: 63 69 66 79 69 6e 67 20 74 68 65 20 74 61 62 6c  cifying the tabl
9120: 65 2e 29 5e 20 20 5e 54 68 65 20 74 61 62 6c 65  e.)^  ^The table
9130: 20 74 6f 20 62 65 20 6d 6f 64 69 66 69 65 64 20   to be modified 
9140: 6d 75 73 74 20 65 78 69 73 74 20 69 6e 20 74 68  must exist in th
9150: 65 0a 20 20 73 61 6d 65 20 64 61 74 61 62 61 73  e.  same databas
9160: 65 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 6f  e as the table o
9170: 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20  r view to which 
9180: 74 68 65 20 74 72 69 67 67 65 72 20 69 73 20 61  the trigger is a
9190: 74 74 61 63 68 65 64 2e 0a 20 20 3c 2f 70 3e 3c  ttached..  </p><
91a0: 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20  /li>..<li><p>.  
91b0: 5e 54 68 65 20 22 49 4e 53 45 52 54 20 49 4e 54  ^The "INSERT INT
91c0: 4f 20 3c 69 3e 74 61 62 6c 65 3c 2f 69 3e 20 44  O <i>table</i> D
91d0: 45 46 41 55 4c 54 20 56 41 4c 55 45 53 22 20 66  EFAULT VALUES" f
91e0: 6f 72 6d 20 6f 66 20 74 68 65 20 5b 49 4e 53 45  orm of the [INSE
91f0: 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 0a 20 20  RT] statement.  
9200: 69 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64  is not supported
9210: 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c  ..  </p></li>..<
9220: 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68 65 20 49 4e  li><p>.  ^The IN
9230: 44 45 58 45 44 20 42 59 20 61 6e 64 20 4e 4f 54  DEXED BY and NOT
9240: 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 73   INDEXED clauses
9250: 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72 74   are not support
9260: 65 64 20 66 6f 72 20 5b 55 50 44 41 54 45 5d 20  ed for [UPDATE] 
9270: 61 6e 64 0a 20 20 5b 44 45 4c 45 54 45 5d 20 73  and.  [DELETE] s
9280: 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 3c 2f 70  tatements..  </p
9290: 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ></li>..<li><p>.
92a0: 20 20 5e 28 54 68 65 20 4f 52 44 45 52 20 42 59    ^(The ORDER BY
92b0: 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73   and LIMIT claus
92c0: 65 73 20 6f 6e 20 5b 55 50 44 41 54 45 5d 20 61  es on [UPDATE] a
92d0: 6e 64 20 5b 44 45 4c 45 54 45 5d 20 73 74 61 74  nd [DELETE] stat
92e0: 65 6d 65 6e 74 73 20 61 72 65 20 6e 6f 74 0a 20  ements are not. 
92f0: 20 73 75 70 70 6f 72 74 65 64 2e 20 20 4f 52 44   supported.  ORD
9300: 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20  ER BY and LIMIT 
9310: 61 72 65 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79  are not normally
9320: 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72 20 5b   supported for [
9330: 55 50 44 41 54 45 5d 20 6f 72 0a 20 20 5b 44 45  UPDATE] or.  [DE
9340: 4c 45 54 45 5d 20 69 6e 20 61 6e 79 20 63 6f 6e  LETE] in any con
9350: 74 65 78 74 20 62 75 74 20 63 61 6e 20 62 65 20  text but can be 
9360: 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 6f 70 2d  enabled for top-
9370: 6c 65 76 65 6c 20 73 74 61 74 65 6d 65 6e 74 73  level statements
9380: 0a 20 20 75 73 69 6e 67 20 74 68 65 20 5b 53 51  .  using the [SQ
9390: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
93a0: 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d  TE_DELETE_LIMIT]
93b0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
93c0: 74 69 6f 6e 2e 20 20 48 6f 77 65 76 65 72 2c 0a  tion.  However,.
93d0: 20 20 74 68 61 74 20 63 6f 6d 70 69 6c 65 2d 74    that compile-t
93e0: 69 6d 65 20 6f 70 74 69 6f 6e 20 6f 6e 6c 79 20  ime option only 
93f0: 61 70 70 6c 69 65 73 20 74 6f 20 74 6f 70 2d 6c  applies to top-l
9400: 65 76 65 6c 20 5b 55 50 44 41 54 45 5d 20 61 6e  evel [UPDATE] an
9410: 64 20 5b 44 45 4c 45 54 45 5d 0a 20 20 73 74 61  d [DELETE].  sta
9420: 74 65 6d 65 6e 74 73 2c 20 6e 6f 74 20 5b 55 50  tements, not [UP
9430: 44 41 54 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54  DATE] and [DELET
9440: 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  E] statements wi
9450: 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 29 5e  thin triggers.)^
9460: 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75  .  </p></li>.</u
9470: 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  l>..<tcl>hd_frag
9480: 6d 65 6e 74 20 69 6e 73 74 65 61 64 5f 6f 66 5f  ment instead_of_
9490: 74 72 69 67 67 65 72 20 7b 49 4e 53 54 45 41 44  trigger {INSTEAD
94a0: 20 4f 46 7d 20 7b 49 4e 53 54 45 41 44 20 4f 46   OF} {INSTEAD OF
94b0: 20 74 72 69 67 67 65 72 7d 3c 2f 74 63 6c 3e 0a   trigger}</tcl>.
94c0: 3c 68 33 3e 49 4e 53 54 45 41 44 20 4f 46 20 74  <h3>INSTEAD OF t
94d0: 72 69 67 67 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e  rigger</h3>..<p>
94e0: 5e 54 72 69 67 67 65 72 73 20 6d 61 79 20 62 65  ^Triggers may be
94f0: 20 63 72 65 61 74 65 64 20 6f 6e 20 5b 76 69 65   created on [vie
9500: 77 73 5d 2c 20 61 73 20 77 65 6c 6c 20 61 73 20  ws], as well as 
9510: 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73 2c  ordinary tables,
9520: 20 62 79 0a 73 70 65 63 69 66 79 69 6e 67 20 49   by.specifying I
9530: 4e 53 54 45 41 44 20 4f 46 20 69 6e 20 74 68 65  NSTEAD OF in the
9540: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
9550: 73 74 61 74 65 6d 65 6e 74 2e 20 0a 5e 49 66 20  statement. .^If 
9560: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 4f 4e 20 49  one or more ON I
9570: 4e 53 45 52 54 2c 20 4f 4e 20 44 45 4c 45 54 45  NSERT, ON DELETE
9580: 0a 6f 72 20 4f 4e 20 55 50 44 41 54 45 20 74 72  .or ON UPDATE tr
9590: 69 67 67 65 72 73 20 61 72 65 20 64 65 66 69 6e  iggers are defin
95a0: 65 64 20 6f 6e 20 61 20 76 69 65 77 2c 20 74 68  ed on a view, th
95b0: 65 6e 20 69 74 20 69 73 20 6e 6f 74 20 61 6e 0a  en it is not an.
95c0: 65 72 72 6f 72 20 74 6f 20 65 78 65 63 75 74 65  error to execute
95d0: 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45   an INSERT, DELE
95e0: 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 61  TE or UPDATE sta
95f0: 74 65 6d 65 6e 74 20 6f 6e 20 74 68 65 20 76 69  tement on the vi
9600: 65 77 2c 20 0a 72 65 73 70 65 63 74 69 76 65 6c  ew, .respectivel
9610: 79 2e 20 20 5e 49 6e 73 74 65 61 64 2c 0a 65 78  y.  ^Instead,.ex
9620: 65 63 75 74 69 6e 67 20 61 6e 20 49 4e 53 45 52  ecuting an INSER
9630: 54 2c 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  T, DELETE or UPD
9640: 41 54 45 20 6f 6e 20 74 68 65 20 76 69 65 77 20  ATE on the view 
9650: 63 61 75 73 65 73 20 74 68 65 20 61 73 73 6f 63  causes the assoc
9660: 69 61 74 65 64 0a 74 72 69 67 67 65 72 73 20 74  iated.triggers t
9670: 6f 20 66 69 72 65 2e 20 5e 54 68 65 20 72 65 61  o fire. ^The rea
9680: 6c 20 74 61 62 6c 65 73 20 75 6e 64 65 72 6c 79  l tables underly
9690: 69 6e 67 20 74 68 65 20 76 69 65 77 20 61 72 65  ing the view are
96a0: 20 6e 6f 74 20 6d 6f 64 69 66 69 65 64 0a 28 65   not modified.(e
96b0: 78 63 65 70 74 20 70 6f 73 73 69 62 6c 79 20 65  xcept possibly e
96c0: 78 70 6c 69 63 69 74 6c 79 2c 20 62 79 20 61 20  xplicitly, by a 
96d0: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 29  trigger program)
96e0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20  .</p>..<p>^Note 
96f0: 74 68 61 74 20 74 68 65 20 5b 73 71 6c 69 74 65  that the [sqlite
9700: 33 5f 63 68 61 6e 67 65 73 28 29 5d 20 61 6e 64  3_changes()] and
9710: 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f   [sqlite3_total_
9720: 63 68 61 6e 67 65 73 28 29 5d 20 69 6e 74 65 72  changes()] inter
9730: 66 61 63 65 73 0a 64 6f 20 6e 6f 74 20 63 6f 75  faces.do not cou
9740: 6e 74 20 49 4e 53 54 45 41 44 20 4f 46 20 74 72  nt INSTEAD OF tr
9750: 69 67 67 65 72 20 66 69 72 69 6e 67 73 2c 20 62  igger firings, b
9760: 75 74 20 74 68 65 0a 5b 63 6f 75 6e 74 5f 63 68  ut the.[count_ch
9770: 61 6e 67 65 73 20 70 72 61 67 6d 61 5d 20 64 6f  anges pragma] do
9780: 65 73 20 63 6f 75 6e 74 20 49 4e 53 54 45 41 44  es count INSTEAD
9790: 20 4f 46 20 74 72 69 67 67 65 72 20 66 69 72 69   OF trigger firi
97a0: 6e 67 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 45 78 61  ng.</p>..<h3>Exa
97b0: 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  mples</h3>..<p>^
97c0: 28 41 73 73 75 6d 69 6e 67 20 74 68 61 74 20 63  (Assuming that c
97d0: 75 73 74 6f 6d 65 72 20 72 65 63 6f 72 64 73 20  ustomer records 
97e0: 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  are stored in th
97f0: 65 20 22 63 75 73 74 6f 6d 65 72 73 22 20 74 61  e "customers" ta
9800: 62 6c 65 2c 20 61 6e 64 0a 74 68 61 74 20 6f 72  ble, and.that or
9810: 64 65 72 20 72 65 63 6f 72 64 73 20 61 72 65 20  der records are 
9820: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 22 6f  stored in the "o
9830: 72 64 65 72 73 22 20 74 61 62 6c 65 2c 20 74 68  rders" table, th
9840: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 72 69 67  e following trig
9850: 67 65 72 0a 65 6e 73 75 72 65 73 20 74 68 61 74  ger.ensures that
9860: 20 61 6c 6c 20 61 73 73 6f 63 69 61 74 65 64 20   all associated 
9870: 6f 72 64 65 72 73 20 61 72 65 20 72 65 64 69 72  orders are redir
9880: 65 63 74 65 64 20 77 68 65 6e 20 61 20 63 75 73  ected when a cus
9890: 74 6f 6d 65 72 20 63 68 61 6e 67 65 73 0a 68 69  tomer changes.hi
98a0: 73 20 6f 72 20 68 65 72 20 61 64 64 72 65 73 73  s or her address
98b0: 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d  :</p>..<tcl>Exam
98c0: 70 6c 65 20 7b 0a 43 52 45 41 54 45 20 54 52 49  ple {.CREATE TRI
98d0: 47 47 45 52 20 75 70 64 61 74 65 5f 63 75 73 74  GGER update_cust
98e0: 6f 6d 65 72 5f 61 64 64 72 65 73 73 20 55 50 44  omer_address UPD
98f0: 41 54 45 20 4f 46 20 61 64 64 72 65 73 73 20 4f  ATE OF address O
9900: 4e 20 63 75 73 74 6f 6d 65 72 73 20 0a 20 20 42  N customers .  B
9910: 45 47 49 4e 0a 20 20 20 20 55 50 44 41 54 45 20  EGIN.    UPDATE 
9920: 6f 72 64 65 72 73 20 53 45 54 20 61 64 64 72 65  orders SET addre
9930: 73 73 20 3d 20 6e 65 77 2e 61 64 64 72 65 73 73  ss = new.address
9940: 20 57 48 45 52 45 20 63 75 73 74 6f 6d 65 72 5f   WHERE customer_
9950: 6e 61 6d 65 20 3d 20 6f 6c 64 2e 6e 61 6d 65 3b  name = old.name;
9960: 0a 20 20 45 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a  .  END;.}</tcl>.
9970: 0a 3c 70 3e 57 69 74 68 20 74 68 69 73 20 74 72  .<p>With this tr
9980: 69 67 67 65 72 20 69 6e 73 74 61 6c 6c 65 64 2c  igger installed,
9990: 20 65 78 65 63 75 74 69 6e 67 20 74 68 65 20 73   executing the s
99a0: 74 61 74 65 6d 65 6e 74 3a 3c 2f 70 3e 0a 0a 3c  tatement:</p>..<
99b0: 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50  tcl>Example {.UP
99c0: 44 41 54 45 20 63 75 73 74 6f 6d 65 72 73 20 53  DATE customers S
99d0: 45 54 20 61 64 64 72 65 73 73 20 3d 20 27 31 20  ET address = '1 
99e0: 4d 61 69 6e 20 53 74 2e 27 20 57 48 45 52 45 20  Main St.' WHERE 
99f0: 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e  name = 'Jack Jon
9a00: 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  es';.}</tcl>..<p
9a10: 3e 63 61 75 73 65 73 20 74 68 65 20 66 6f 6c 6c  >causes the foll
9a20: 6f 77 69 6e 67 20 74 6f 20 62 65 20 61 75 74 6f  owing to be auto
9a30: 6d 61 74 69 63 61 6c 6c 79 20 65 78 65 63 75 74  matically execut
9a40: 65 64 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78  ed:</p>..<tcl>Ex
9a50: 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 6f  ample {.UPDATE o
9a60: 72 64 65 72 73 20 53 45 54 20 61 64 64 72 65 73  rders SET addres
9a70: 73 20 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e 27  s = '1 Main St.'
9a80: 20 57 48 45 52 45 20 63 75 73 74 6f 6d 65 72 5f   WHERE customer_
9a90: 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e  name = 'Jack Jon
9aa0: 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 29 5e 0a 0a  es';.}</tcl>)^..
9ab0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
9ac0: 20 75 6e 64 65 66 5f 62 65 66 6f 72 65 20 7b 75   undef_before {u
9ad0: 6e 64 65 66 69 6e 65 64 20 42 45 46 4f 52 45 20  ndefined BEFORE 
9ae0: 74 72 69 67 67 65 72 20 62 65 68 61 76 69 6f 72  trigger behavior
9af0: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 61 75 74  }</tcl>.<h3>Caut
9b00: 69 6f 6e 73 20 4f 6e 20 54 68 65 20 55 73 65 20  ions On The Use 
9b10: 4f 66 20 42 45 46 4f 52 45 20 74 72 69 67 67 65  Of BEFORE trigge
9b20: 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 49 66 20 61  rs</h3>..<p>If a
9b30: 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 6f   BEFORE UPDATE o
9b40: 72 20 42 45 46 4f 52 45 20 44 45 4c 45 54 45 20  r BEFORE DELETE 
9b50: 74 72 69 67 67 65 72 20 6d 6f 64 69 66 69 65 73  trigger modifies
9b60: 20 6f 72 20 64 65 6c 65 74 65 73 20 61 20 72 6f   or deletes a ro
9b70: 77 0a 74 68 61 74 20 77 61 73 20 74 6f 20 68 61  w.that was to ha
9b80: 76 65 20 62 65 65 6e 20 75 70 64 61 74 65 64 20  ve been updated 
9b90: 6f 72 20 64 65 6c 65 74 65 64 2c 20 74 68 65 6e  or deleted, then
9ba0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
9bb0: 68 65 20 73 75 62 73 65 71 75 65 6e 74 0a 75 70  he subsequent.up
9bc0: 64 61 74 65 20 6f 72 20 64 65 6c 65 74 65 20 6f  date or delete o
9bd0: 70 65 72 61 74 69 6f 6e 20 69 73 20 75 6e 64 65  peration is unde
9be0: 66 69 6e 65 64 2e 20 20 46 75 72 74 68 65 72 6d  fined.  Furtherm
9bf0: 6f 72 65 2c 20 69 66 20 61 20 42 45 46 4f 52 45  ore, if a BEFORE
9c00: 20 74 72 69 67 67 65 72 0a 6d 6f 64 69 66 69 65   trigger.modifie
9c10: 73 20 6f 72 20 64 65 6c 65 74 65 73 20 61 20 72  s or deletes a r
9c20: 6f 77 2c 20 74 68 65 6e 20 69 74 20 69 73 20 75  ow, then it is u
9c30: 6e 64 65 66 69 6e 65 64 20 77 68 65 74 68 65 72  ndefined whether
9c40: 20 6f 72 20 6e 6f 74 20 41 46 54 45 52 20 74 72   or not AFTER tr
9c50: 69 67 67 65 72 73 0a 74 68 61 74 20 77 6f 75 6c  iggers.that woul
9c60: 64 20 68 61 76 65 20 6f 74 68 65 72 77 69 73 65  d have otherwise
9c70: 20 72 75 6e 20 6f 6e 20 74 68 6f 73 65 20 72 6f   run on those ro
9c80: 77 73 20 77 69 6c 6c 20 69 6e 20 66 61 63 74 20  ws will in fact 
9c90: 72 75 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  run..</p>..<p>Th
9ca0: 65 20 76 61 6c 75 65 20 6f 66 20 4e 45 57 2e 72  e value of NEW.r
9cb0: 6f 77 69 64 20 69 73 20 75 6e 64 65 66 69 6e 65  owid is undefine
9cc0: 64 20 69 6e 20 61 20 42 45 46 4f 52 45 20 49 4e  d in a BEFORE IN
9cd0: 53 45 52 54 20 74 72 69 67 67 65 72 20 69 6e 20  SERT trigger in 
9ce0: 77 68 69 63 68 0a 74 68 65 20 72 6f 77 69 64 20  which.the rowid 
9cf0: 69 73 20 6e 6f 74 20 65 78 70 6c 69 63 69 74 6c  is not explicitl
9d00: 79 20 73 65 74 20 74 6f 20 61 6e 20 69 6e 74 65  y set to an inte
9d10: 67 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 42 65 63  ger.</p>..<p>Bec
9d20: 61 75 73 65 20 6f 66 20 74 68 65 20 62 65 68 61  ause of the beha
9d30: 76 69 6f 72 73 20 64 65 73 63 72 69 62 65 64 20  viors described 
9d40: 61 62 6f 76 65 2c 20 70 72 6f 67 72 61 6d 6d 65  above, programme
9d50: 72 73 20 61 72 65 20 65 6e 63 6f 75 72 61 67 65  rs are encourage
9d60: 64 20 74 6f 0a 70 72 65 66 65 72 20 41 46 54 45  d to.prefer AFTE
9d70: 52 20 74 72 69 67 67 65 72 73 20 6f 76 65 72 20  R triggers over 
9d80: 42 45 46 4f 52 45 20 74 72 69 67 67 65 72 73 2e  BEFORE triggers.
9d90: 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 68 65 20 52 41  </p>..<h3>The RA
9da0: 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 3c 2f  ISE() function</
9db0: 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 73 70 65 63  h3>..<p>^(A spec
9dc0: 69 61 6c 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ial SQL function
9dd0: 20 52 41 49 53 45 28 29 20 6d 61 79 20 62 65 20   RAISE() may be 
9de0: 75 73 65 64 20 77 69 74 68 69 6e 20 61 20 74 72  used within a tr
9df0: 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2c 29 5e  igger-program,)^
9e00: 0a 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77  .with the follow
9e10: 69 6e 67 20 73 79 6e 74 61 78 3c 2f 70 3e 20 0a  ing syntax</p> .
9e20: 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67  .<tcl>BubbleDiag
9e30: 72 61 6d 20 72 61 69 73 65 2d 66 75 6e 63 74 69  ram raise-functi
9e40: 6f 6e 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 57 68  on</tcl>..<p>^Wh
9e50: 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 69  en one of the fi
9e60: 72 73 74 20 74 68 72 65 65 20 66 6f 72 6d 73 20  rst three forms 
9e70: 69 73 20 63 61 6c 6c 65 64 20 64 75 72 69 6e 67  is called during
9e80: 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
9e90: 0a 65 78 65 63 75 74 69 6f 6e 2c 20 74 68 65 20  .execution, the 
9ea0: 73 70 65 63 69 66 69 65 64 20 5b 4f 4e 20 43 4f  specified [ON CO
9eb0: 4e 46 4c 49 43 54 5d 20 70 72 6f 63 65 73 73 69  NFLICT] processi
9ec0: 6e 67 20 69 73 20 70 65 72 66 6f 72 6d 65 64 0a  ng is performed.
9ed0: 28 65 69 74 68 65 72 20 41 42 4f 52 54 2c 20 46  (either ABORT, F
9ee0: 41 49 4c 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 29  AIL or ROLLBACK)
9ef0: 20 61 6e 64 20 74 68 65 20 63 75 72 72 65 6e 74   and the current
9f00: 20 71 75 65 72 79 20 74 65 72 6d 69 6e 61 74 65   query terminate
9f10: 73 2e 0a 41 6e 20 65 72 72 6f 72 20 63 6f 64 65  s..An error code
9f20: 20 6f 66 20 5b 53 51 4c 49 54 45 5f 43 4f 4e 53   of [SQLITE_CONS
9f30: 54 52 41 49 4e 54 5d 20 69 73 20 72 65 74 75 72  TRAINT] is retur
9f40: 6e 65 64 20 74 6f 20 74 68 65 20 61 70 70 6c 69  ned to the appli
9f50: 63 61 74 69 6f 6e 2c 0a 61 6c 6f 6e 67 20 77 69  cation,.along wi
9f60: 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64  th the specified
9f70: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 3c   error message.<
9f80: 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 52 41  /p>..<p>^When RA
9f90: 49 53 45 28 49 47 4e 4f 52 45 29 20 69 73 20 63  ISE(IGNORE) is c
9fa0: 61 6c 6c 65 64 2c 20 74 68 65 20 72 65 6d 61 69  alled, the remai
9fb0: 6e 64 65 72 20 6f 66 20 74 68 65 20 63 75 72 72  nder of the curr
9fc0: 65 6e 74 20 74 72 69 67 67 65 72 20 70 72 6f 67  ent trigger prog
9fd0: 72 61 6d 2c 0a 74 68 65 20 73 74 61 74 65 6d 65  ram,.the stateme
9fe0: 6e 74 20 74 68 61 74 20 63 61 75 73 65 64 20 74  nt that caused t
9ff0: 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
a000: 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 61 6e  am to execute an
a010: 64 20 61 6e 79 20 73 75 62 73 65 71 75 65 6e 74  d any subsequent
a020: 0a 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d  .trigger program
a030: 73 20 74 68 61 74 20 77 6f 75 6c 64 20 6f 66 20  s that would of 
a040: 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 61 72  been executed ar
a050: 65 20 61 62 61 6e 64 6f 6e 65 64 2e 20 5e 4e 6f  e abandoned. ^No
a060: 20 64 61 74 61 62 61 73 65 0a 63 68 61 6e 67 65   database.change
a070: 73 20 61 72 65 20 72 6f 6c 6c 65 64 20 62 61 63  s are rolled bac
a080: 6b 2e 20 20 5e 49 66 20 74 68 65 20 73 74 61 74  k.  ^If the stat
a090: 65 6d 65 6e 74 20 74 68 61 74 20 63 61 75 73 65  ement that cause
a0a0: 64 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  d the trigger pr
a0b0: 6f 67 72 61 6d 0a 74 6f 20 65 78 65 63 75 74 65  ogram.to execute
a0c0: 20 69 73 20 69 74 73 65 6c 66 20 70 61 72 74 20   is itself part 
a0d0: 6f 66 20 61 20 74 72 69 67 67 65 72 20 70 72 6f  of a trigger pro
a0e0: 67 72 61 6d 2c 20 74 68 65 6e 20 74 68 61 74 20  gram, then that 
a0f0: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 0a  trigger program.
a100: 72 65 73 75 6d 65 73 20 65 78 65 63 75 74 69 6f  resumes executio
a110: 6e 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  n at the beginni
a120: 6e 67 20 6f 66 20 74 68 65 20 6e 65 78 74 20 73  ng of the next s
a130: 74 65 70 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c  tep..</p>...<tcl
a140: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
a150: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a160: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a170: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a180: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a190: 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54  #.Section {CREAT
a1a0: 45 20 56 49 45 57 7d 20 7b 63 72 65 61 74 65 76  E VIEW} {createv
a1b0: 69 65 77 7d 20 7b 7b 43 52 45 41 54 45 20 56 49  iew} {{CREATE VI
a1c0: 45 57 7d 20 76 69 65 77 20 2a 76 69 65 77 73 7d  EW} view *views}
a1d0: 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
a1e0: 63 72 65 61 74 65 2d 76 69 65 77 2d 73 74 6d 74  create-view-stmt
a1f0: 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54   1.</tcl>..<p>^T
a200: 68 65 20 43 52 45 41 54 45 20 56 49 45 57 20 63  he CREATE VIEW c
a210: 6f 6d 6d 61 6e 64 20 61 73 73 69 67 6e 73 20 61  ommand assigns a
a220: 20 6e 61 6d 65 20 74 6f 20 61 20 70 72 65 2d 70   name to a pre-p
a230: 61 63 6b 61 67 65 64 20 0a 5b 53 45 4c 45 43 54  ackaged .[SELECT
a240: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a 5e 4f  ] statement. .^O
a250: 6e 63 65 20 74 68 65 20 76 69 65 77 20 69 73 20  nce the view is 
a260: 63 72 65 61 74 65 64 2c 20 69 74 20 63 61 6e 20  created, it can 
a270: 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 46  be used in the F
a280: 52 4f 4d 20 63 6c 61 75 73 65 0a 6f 66 20 61 6e  ROM clause.of an
a290: 6f 74 68 65 72 20 5b 53 45 4c 45 43 54 5d 20 69  other [SELECT] i
a2a0: 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62  n place of a tab
a2b0: 6c 65 20 6e 61 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c  le name..</p>..<
a2c0: 70 3e 5e 49 66 20 74 68 65 20 22 54 45 4d 50 22  p>^If the "TEMP"
a2d0: 20 6f 72 20 22 54 45 4d 50 4f 52 41 52 59 22 20   or "TEMPORARY" 
a2e0: 6b 65 79 77 6f 72 64 20 6f 63 63 75 72 73 20 69  keyword occurs i
a2f0: 6e 20 62 65 74 77 65 65 6e 20 22 43 52 45 41 54  n between "CREAT
a300: 45 22 0a 61 6e 64 20 22 56 49 45 57 22 20 74 68  E".and "VIEW" th
a310: 65 6e 20 74 68 65 20 76 69 65 77 20 74 68 61 74  en the view that
a320: 20 69 73 20 63 72 65 61 74 65 64 20 69 73 20 6f   is created is o
a330: 6e 6c 79 20 76 69 73 69 62 6c 65 20 74 6f 20 74  nly visible to t
a340: 68 65 0a 70 72 6f 63 65 73 73 20 74 68 61 74 20  he.process that 
a350: 6f 70 65 6e 65 64 20 74 68 65 20 64 61 74 61 62  opened the datab
a360: 61 73 65 20 61 6e 64 20 69 73 20 61 75 74 6f 6d  ase and is autom
a370: 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64  atically deleted
a380: 20 77 68 65 6e 0a 74 68 65 20 64 61 74 61 62 61   when.the databa
a390: 73 65 20 69 73 20 63 6c 6f 73 65 64 2e 3c 2f 70  se is closed.</p
a3a0: 3e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 26 6c 74  >..<p> ^If a &lt
a3b0: 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67  ;database-name&g
a3c0: 74 3b 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  t; is specified,
a3d0: 20 74 68 65 6e 20 74 68 65 20 76 69 65 77 20 69   then the view i
a3e0: 73 20 63 72 65 61 74 65 64 20 69 6e 20 0a 74 68  s created in .th
a3f0: 65 20 6e 61 6d 65 64 20 64 61 74 61 62 61 73 65  e named database
a400: 2e 20 5e 49 74 20 69 73 20 61 6e 20 65 72 72 6f  . ^It is an erro
a410: 72 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f 74  r to specify bot
a420: 68 20 61 20 26 6c 74 3b 64 61 74 61 62 61 73 65  h a &lt;database
a430: 2d 6e 61 6d 65 26 67 74 3b 0a 61 6e 64 20 74 68  -name&gt;.and th
a440: 65 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 20 6f  e TEMP keyword o
a450: 6e 20 61 20 56 49 45 57 2c 20 75 6e 6c 65 73 73  n a VIEW, unless
a460: 20 74 68 65 20 26 6c 74 3b 64 61 74 61 62 61 73   the &lt;databas
a470: 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20 22 74  e-name&gt; is "t
a480: 65 6d 70 22 2e 0a 5e 49 66 20 6e 6f 20 64 61 74  emp"..^If no dat
a490: 61 62 61 73 65 20 6e 61 6d 65 20 69 73 20 73 70  abase name is sp
a4a0: 65 63 69 66 69 65 64 2c 20 61 6e 64 20 74 68 65  ecified, and the
a4b0: 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 20 69 73   TEMP keyword is
a4c0: 20 6e 6f 74 20 70 72 65 73 65 6e 74 2c 0a 74 68   not present,.th
a4d0: 65 20 56 49 45 57 20 69 73 20 63 72 65 61 74 65  e VIEW is create
a4e0: 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  d in the main da
a4f0: 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  tabase.</p>..<p>
a500: 5e 59 6f 75 20 63 61 6e 6e 6f 74 20 5b 44 45 4c  ^You cannot [DEL
a510: 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 20  ETE], [INSERT], 
a520: 6f 72 20 5b 55 50 44 41 54 45 5d 20 61 20 76 69  or [UPDATE] a vi
a530: 65 77 2e 20 20 5e 56 69 65 77 73 20 61 72 65 20  ew.  ^Views are 
a540: 72 65 61 64 2d 6f 6e 6c 79 20 0a 69 6e 20 53 51  read-only .in SQ
a550: 4c 69 74 65 2e 20 20 5e 48 6f 77 65 76 65 72 2c  Lite.  ^However,
a560: 20 69 6e 20 6d 61 6e 79 20 63 61 73 65 73 20 79   in many cases y
a570: 6f 75 20 63 61 6e 20 75 73 65 20 61 6e 0a 5b 49  ou can use an.[I
a580: 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65  NSTEAD OF trigge
a590: 72 5d 20 6f 6e 20 74 68 65 20 76 69 65 77 20 74  r] on the view t
a5a0: 6f 20 61 63 63 6f 6d 70 6c 69 73 68 20 0a 74 68  o accomplish .th
a5b0: 65 20 73 61 6d 65 20 74 68 69 6e 67 2e 20 20 5e  e same thing.  ^
a5c0: 56 69 65 77 73 20 61 72 65 20 72 65 6d 6f 76 65  Views are remove
a5d0: 64 20 0a 77 69 74 68 20 74 68 65 20 5b 44 52 4f  d .with the [DRO
a5e0: 50 20 56 49 45 57 5d 20 63 6f 6d 6d 61 6e 64 2e  P VIEW] command.
a5f0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
a600: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a610: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a620: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a630: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a640: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
a650: 6f 6e 20 7b 43 52 45 41 54 45 20 56 49 52 54 55  on {CREATE VIRTU
a660: 41 4c 20 54 41 42 4c 45 7d 20 7b 63 72 65 61 74  AL TABLE} {creat
a670: 65 76 74 61 62 7d 20 7b 7b 43 52 45 41 54 45 20  evtab} {{CREATE 
a680: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 7d 0a  VIRTUAL TABLE}}.
a690: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63  .BubbleDiagram c
a6a0: 72 65 61 74 65 2d 76 69 72 74 75 61 6c 2d 74 61  reate-virtual-ta
a6b0: 62 6c 65 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c  ble-stmt 1.</tcl
a6c0: 3e 0a 0a 3c 70 3e 41 20 5b 76 69 72 74 75 61 6c  >..<p>A [virtual
a6d0: 20 74 61 62 6c 65 5d 20 69 73 20 61 6e 20 69 6e   table] is an in
a6e0: 74 65 72 66 61 63 65 20 74 6f 20 61 6e 20 65 78  terface to an ex
a6f0: 74 65 72 6e 61 6c 20 73 74 6f 72 61 67 65 20 6f  ternal storage o
a700: 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 65 6e  r computation.en
a710: 67 69 6e 65 20 74 68 61 74 20 61 70 70 65 61 72  gine that appear
a720: 73 20 74 6f 20 62 65 20 61 20 74 61 62 6c 65 20  s to be a table 
a730: 62 75 74 20 64 6f 65 73 20 6e 6f 74 20 61 63 74  but does not act
a740: 75 61 6c 6c 79 20 73 74 6f 72 65 20 69 6e 66 6f  ually store info
a750: 72 6d 61 74 69 6f 6e 0a 69 6e 20 74 68 65 20 64  rmation.in the d
a760: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70  atabase file.</p
a770: 3e 0a 0a 3c 70 3e 49 6e 20 67 65 6e 65 72 61 6c  >..<p>In general
a780: 2c 20 79 6f 75 20 63 61 6e 20 64 6f 20 61 6e 79  , you can do any
a790: 74 68 69 6e 67 20 77 69 74 68 20 61 20 5b 76 69  thing with a [vi
a7a0: 72 74 75 61 6c 20 74 61 62 6c 65 5d 20 74 68 61  rtual table] tha
a7b0: 74 20 63 61 6e 20 62 65 20 64 6f 6e 65 0a 77 69  t can be done.wi
a7c0: 74 68 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74  th an ordinary t
a7d0: 61 62 6c 65 2c 20 65 78 63 65 70 74 20 74 68 61  able, except tha
a7e0: 74 20 5e 79 6f 75 20 63 61 6e 6e 6f 74 20 63 72  t ^you cannot cr
a7f0: 65 61 74 65 20 69 6e 64 69 63 65 73 20 6f 72 20  eate indices or 
a800: 74 72 69 67 67 65 72 73 20 6f 6e 20 61 0a 76 69  triggers on a.vi
a810: 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 5e 53  rtual table.  ^S
a820: 6f 6d 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ome virtual tabl
a830: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
a840: 73 20 6d 69 67 68 74 20 69 6d 70 6f 73 65 20 61  s might impose a
a850: 64 64 69 74 69 6f 6e 61 6c 0a 72 65 73 74 72 69  dditional.restri
a860: 63 74 69 6f 6e 73 2e 20 20 46 6f 72 20 65 78 61  ctions.  For exa
a870: 6d 70 6c 65 2c 20 6d 61 6e 79 20 76 69 72 74 75  mple, many virtu
a880: 61 6c 20 74 61 62 6c 65 73 20 61 72 65 20 72 65  al tables are re
a890: 61 64 2d 6f 6e 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70  ad-only.</p>..<p
a8a0: 3e 54 68 65 20 26 6c 74 3b 6d 6f 64 75 6c 65 2d  >The &lt;module-
a8b0: 6e 61 6d 65 26 67 74 3b 20 69 73 20 74 68 65 20  name&gt; is the 
a8c0: 6e 61 6d 65 20 6f 66 20 61 6e 20 6f 62 6a 65 63  name of an objec
a8d0: 74 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74  t that implement
a8e0: 73 0a 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  s.the virtual ta
a8f0: 62 6c 65 2e 20 20 5e 54 68 65 20 26 6c 74 3b 6d  ble.  ^The &lt;m
a900: 6f 64 75 6c 65 2d 6e 61 6d 65 26 67 74 3b 20 6d  odule-name&gt; m
a910: 75 73 74 20 62 65 20 72 65 67 69 73 74 65 72 65  ust be registere
a920: 64 20 77 69 74 68 0a 74 68 65 20 53 51 4c 69 74  d with.the SQLit
a930: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
a940: 63 74 69 6f 6e 20 75 73 69 6e 67 0a 5b 73 71 6c  ction using.[sql
a950: 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75  ite3_create_modu
a960: 6c 65 28 29 5d 20 6f 72 20 5b 73 71 6c 69 74 65  le()] or [sqlite
a970: 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 5f  3_create_module_
a980: 76 32 28 29 5d 0a 70 72 69 6f 72 20 74 6f 20 69  v2()].prior to i
a990: 73 73 75 69 6e 67 20 74 68 65 20 43 52 45 41 54  ssuing the CREAT
a9a0: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
a9b0: 73 74 61 74 65 6d 65 6e 74 2e 0a 5e 54 68 65 20  statement..^The 
a9c0: 6d 6f 64 75 6c 65 20 74 61 6b 65 73 20 7a 65 72  module takes zer
a9d0: 6f 20 6f 72 20 6d 6f 72 65 20 63 6f 6d 6d 61 2d  o or more comma-
a9e0: 73 65 70 61 72 61 74 65 64 20 61 72 67 75 6d 65  separated argume
a9f0: 6e 74 73 2e 0a 5e 54 68 65 20 61 72 67 75 6d 65  nts..^The argume
aa00: 6e 74 73 20 63 61 6e 20 62 65 20 6a 75 73 74 20  nts can be just 
aa10: 61 62 6f 75 74 20 61 6e 79 20 74 65 78 74 20 61  about any text a
aa20: 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 68 61 73  s long as it has
aa30: 20 62 61 6c 61 6e 63 65 64 0a 70 61 72 65 6e 74   balanced.parent
aa40: 68 65 73 65 73 2e 20 20 54 68 65 20 61 72 67 75  heses.  The argu
aa50: 6d 65 6e 74 20 73 79 6e 74 61 78 20 69 73 20 73  ment syntax is s
aa60: 75 66 66 69 63 69 65 6e 74 6c 79 20 67 65 6e 65  ufficiently gene
aa70: 72 61 6c 20 74 68 61 74 20 74 68 65 0a 61 72 67  ral that the.arg
aa80: 75 6d 65 6e 74 73 20 63 61 6e 20 62 65 20 6d 61  uments can be ma
aa90: 64 65 20 74 6f 20 61 70 70 65 61 72 20 61 73 20  de to appear as 
aaa0: 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f  column definitio
aab0: 6e 73 20 69 6e 20 61 20 74 72 61 64 69 74 69 6f  ns in a traditio
aac0: 6e 61 6c 0a 5b 43 52 45 41 54 45 20 54 41 42 4c  nal.[CREATE TABL
aad0: 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a  E] statement.  .
aae0: 5e 53 51 4c 69 74 65 20 70 61 73 73 65 73 20 74  ^SQLite passes t
aaf0: 68 65 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65  he module argume
ab00: 6e 74 73 20 64 69 72 65 63 74 6c 79 0a 74 6f 20  nts directly.to 
ab10: 74 68 65 20 5b 78 43 72 65 61 74 65 5d 20 61 6e  the [xCreate] an
ab20: 64 20 5b 78 43 6f 6e 6e 65 63 74 5d 20 6d 65 74  d [xConnect] met
ab30: 68 6f 64 73 20 6f 66 20 74 68 65 20 6d 6f 64 75  hods of the modu
ab40: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
ab50: 6e 0a 77 69 74 68 6f 75 74 20 61 6e 79 20 69 6e  n.without any in
ab60: 74 65 72 70 72 65 74 61 74 69 6f 6e 2e 20 20 49  terpretation.  I
ab70: 74 20 69 73 20 74 68 65 20 72 65 73 70 6f 6e 73  t is the respons
ab80: 69 62 69 6c 69 74 79 0a 6f 66 20 74 68 65 20 6d  ibility.of the m
ab90: 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
aba0: 74 69 6f 6e 20 74 6f 20 70 61 72 73 65 20 61 6e  tion to parse an
abb0: 64 20 69 6e 74 65 72 70 72 65 74 20 69 74 73 20  d interpret its 
abc0: 6f 77 6e 20 61 72 67 75 6d 65 6e 74 73 2e 3c 2f  own arguments.</
abd0: 70 3e 0a 0a 3c 70 3e 5e 41 20 76 69 72 74 75 61  p>..<p>^A virtua
abe0: 6c 20 74 61 62 6c 65 20 69 73 20 64 65 73 74 72  l table is destr
abf0: 6f 79 65 64 20 75 73 69 6e 67 20 74 68 65 20 6f  oyed using the o
ac00: 72 64 69 6e 61 72 79 0a 5b 44 52 4f 50 20 54 41  rdinary.[DROP TA
ac10: 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  BLE] statement. 
ac20: 20 54 68 65 72 65 20 69 73 20 6e 6f 0a 44 52 4f   There is no.DRO
ac30: 50 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  P VIRTUAL TABLE 
ac40: 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a  statement.</p>..
ac50: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
ac60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ac70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ac80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ac90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aca0: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 44 45 4c  ####.Section DEL
acb0: 45 54 45 20 64 65 6c 65 74 65 20 7b 44 45 4c 45  ETE delete {DELE
acc0: 54 45 20 2a 44 45 4c 45 54 45 73 7d 0a 0a 42 75  TE *DELETEs}..Bu
acd0: 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65 6c 65  bbleDiagram dele
ace0: 74 65 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c 65  te-stmt 1.Bubble
acf0: 44 69 61 67 72 61 6d 20 71 75 61 6c 69 66 69 65  Diagram qualifie
ad00: 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a 3c 2f 74  d-table-name.</t
ad10: 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 45 4c  cl>..<p>^The DEL
ad20: 45 54 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75  ETE command is u
ad30: 73 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 72 65  sed to remove re
ad40: 63 6f 72 64 73 20 66 72 6f 6d 20 61 20 74 61 62  cords from a tab
ad50: 6c 65 2e 0a 5e 54 68 65 20 63 6f 6d 6d 61 6e 64  le..^The command
ad60: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65   consists of the
ad70: 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 22 20 6b   "DELETE FROM" k
ad80: 65 79 77 6f 72 64 73 20 66 6f 6c 6c 6f 77 65 64  eywords followed
ad90: 20 62 79 0a 74 68 65 20 6e 61 6d 65 20 6f 66 20   by.the name of 
ada0: 74 68 65 20 74 61 62 6c 65 20 66 72 6f 6d 20 77  the table from w
adb0: 68 69 63 68 20 72 65 63 6f 72 64 73 20 61 72 65  hich records are
adc0: 20 74 6f 20 62 65 20 72 65 6d 6f 76 65 64 2e 0a   to be removed..
add0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 69 74 68 6f 75  </p>..<p>^Withou
ade0: 74 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65  t a WHERE clause
adf0: 2c 20 61 6c 6c 20 72 6f 77 73 20 6f 66 20 74 68  , all rows of th
ae00: 65 20 74 61 62 6c 65 20 61 72 65 20 72 65 6d 6f  e table are remo
ae10: 76 65 64 2e 0a 5e 49 66 20 61 20 57 48 45 52 45  ved..^If a WHERE
ae20: 20 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c   clause is suppl
ae30: 69 65 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74  ied, then only t
ae40: 68 6f 73 65 20 72 6f 77 73 20 74 68 61 74 20 6d  hose rows that m
ae50: 61 74 63 68 0a 74 68 65 20 65 78 70 72 65 73 73  atch.the express
ae60: 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 2e  ion are removed.
ae70: 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73 74 72 69  </p>..<h3>Restri
ae80: 63 74 69 6f 6e 73 20 6f 6e 20 44 45 4c 45 54 45  ctions on DELETE
ae90: 20 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68   Statements With
aea0: 69 6e 20 43 52 45 41 54 45 20 54 52 49 47 47 45  in CREATE TRIGGE
aeb0: 52 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 72  R</h3>..<p>^Ther
aec0: 65 20 61 72 65 20 61 64 64 69 74 69 6f 6e 61 6c  e are additional
aed0: 20 73 79 6e 74 61 78 20 72 65 73 74 72 69 63 74   syntax restrict
aee0: 69 6f 6e 73 20 6f 6e 20 44 45 4c 45 54 45 20 73  ions on DELETE s
aef0: 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 0a 6f  tatements that.o
af00: 63 63 75 72 20 77 69 74 68 69 6e 20 74 68 65 20  ccur within the 
af10: 62 6f 64 79 20 6f 66 20 61 20 5b 43 52 45 41 54  body of a [CREAT
af20: 45 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65  E TRIGGER] state
af30: 6d 65 6e 74 2e 20 20 5e 54 68 65 20 3c 69 3e 74  ment.  ^The <i>t
af40: 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 0a 6d 75  able-name</i>.mu
af50: 73 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69 65  st be unqualifie
af60: 64 2e 20 0a 5e 28 49 6e 20 6f 74 68 65 72 20 77  d. .^(In other w
af70: 6f 72 64 73 2c 20 74 68 65 20 3c 69 3e 64 61 74  ords, the <i>dat
af80: 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62  abase-name</i><b
af90: 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78 0a 6f 6e  >.</b> prefix.on
afa0: 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 20   the table name 
afb0: 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 77  is not allowed w
afc0: 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20  ithin triggers. 
afd0: 29 5e 0a 5e 54 68 65 20 74 61 62 6c 65 20 66 72  )^.^The table fr
afe0: 6f 6d 20 77 68 69 63 68 20 74 6f 20 64 65 6c 65  om which to dele
aff0: 74 65 20 6d 75 73 74 20 62 65 20 69 6e 20 74 68  te must be in th
b000: 65 20 73 61 6d 65 0a 64 61 74 61 62 61 73 65 20  e same.database 
b010: 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  as the table to 
b020: 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65  which the trigge
b030: 72 20 69 73 20 61 74 74 61 63 68 65 64 2e 3c 2f  r is attached.</
b040: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 49 4e 44 45  p>..<p>^The INDE
b050: 58 45 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49  XED BY and NOT I
b060: 4e 44 45 58 45 44 20 63 6c 61 75 73 65 73 20 61  NDEXED clauses a
b070: 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f  re not allowed o
b080: 6e 20 44 45 4c 45 54 45 0a 73 74 61 74 65 6d 65  n DELETE.stateme
b090: 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67  nts within trigg
b0a0: 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ers.</p>..<p>^Th
b0b0: 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 28  e LIMIT clause (
b0c0: 64 65 73 63 72 69 62 65 64 20 62 65 6c 6f 77 29  described below)
b0d0: 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64 20   is unsupported 
b0e0: 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
b0f0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
b100: 61 67 6d 65 6e 74 20 74 72 75 63 61 74 65 6f 70  agment trucateop
b110: 74 20 7b 74 72 75 6e 63 61 74 65 20 6f 70 74 69  t {truncate opti
b120: 6d 69 7a 61 74 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a  mization}</tcl>.
b130: 3c 68 33 3e 54 68 65 20 54 72 75 6e 63 61 74 65  <h3>The Truncate
b140: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 3c 2f 68   Optimization</h
b150: 33 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65  3>..<p>^When the
b160: 20 57 48 45 52 45 20 69 73 20 6f 6d 69 74 74 65   WHERE is omitte
b170: 64 20 66 72 6f 6d 20 61 20 44 45 4c 45 54 45 20  d from a DELETE 
b180: 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 74 68  statement and th
b190: 65 20 74 61 62 6c 65 0a 62 65 69 6e 67 20 64 65  e table.being de
b1a0: 6c 65 74 65 64 20 68 61 73 20 6e 6f 20 74 72 69  leted has no tri
b1b0: 67 67 65 72 73 2c 0a 53 51 4c 69 74 65 20 75 73  ggers,.SQLite us
b1c0: 65 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69  es an optimizati
b1d0: 6f 6e 20 74 6f 20 65 72 61 73 65 20 74 68 65 20  on to erase the 
b1e0: 65 6e 74 69 72 65 20 74 61 62 6c 65 20 63 6f 6e  entire table con
b1f0: 74 65 6e 74 0a 77 69 74 68 6f 75 74 20 68 61 76  tent.without hav
b200: 69 6e 67 20 74 6f 20 76 69 73 69 74 20 65 61 63  ing to visit eac
b210: 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74 61 62  h row of the tab
b220: 6c 65 20 69 6e 64 69 76 69 64 75 61 6c 6c 79 2e  le individually.
b230: 0a 54 68 69 73 20 22 74 72 75 6e 63 61 74 65 22  .This "truncate"
b240: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 6d 61   optimization ma
b250: 6b 65 73 20 74 68 65 20 64 65 6c 65 74 65 20 72  kes the delete r
b260: 75 6e 20 6d 75 63 68 20 66 61 73 74 65 72 2e 0a  un much faster..
b270: 50 72 69 6f 72 20 74 6f 20 53 51 4c 69 74 65 20  Prior to SQLite 
b280: 5b 76 65 72 73 69 6f 6e 20 33 2e 36 2e 35 5d 2c  [version 3.6.5],
b290: 20 74 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70   the truncate op
b2a0: 74 69 6d 69 7a 61 74 69 6f 6e 0a 61 6c 73 6f 20  timization.also 
b2b0: 6d 65 61 6e 74 20 74 68 61 74 20 74 68 65 20 5b  meant that the [
b2c0: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
b2d0: 29 5d 20 61 6e 64 0a 5b 73 71 6c 69 74 65 33 5f  )] and.[sqlite3_
b2e0: 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d  total_changes()]
b2f0: 20 69 6e 74 65 72 66 61 63 65 73 0a 61 6e 64 20   interfaces.and 
b300: 74 68 65 20 5b 63 6f 75 6e 74 5f 63 68 61 6e 67  the [count_chang
b310: 65 73 20 70 72 61 67 6d 61 5d 0a 77 69 6c 6c 20  es pragma].will 
b320: 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 72 65 74  not actually ret
b330: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
b340: 66 20 64 65 6c 65 74 65 64 20 72 6f 77 73 2e 20  f deleted rows. 
b350: 20 0a 54 68 61 74 20 70 72 6f 62 6c 65 6d 20 68   .That problem h
b360: 61 73 20 62 65 65 6e 20 66 69 78 65 64 20 61 73  as been fixed as
b370: 20 6f 66 20 5b 76 65 72 73 69 6f 6e 20 33 2e 36   of [version 3.6
b380: 2e 35 5d 2e 0a 0a 3c 70 3e 5e 54 68 65 20 74 72  .5]...<p>^The tr
b390: 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74  uncate optimizat
b3a0: 69 6f 6e 20 63 61 6e 20 62 65 20 70 65 72 6d 61  ion can be perma
b3b0: 6e 65 6e 74 6c 79 20 64 69 73 61 62 6c 65 64 20  nently disabled 
b3c0: 66 6f 72 20 61 6c 6c 20 71 75 65 72 69 65 73 0a  for all queries.
b3d0: 62 79 20 72 65 63 6f 6d 70 69 6c 69 6e 67 0a 53  by recompiling.S
b3e0: 51 4c 69 74 65 20 77 69 74 68 20 74 68 65 20 5b  QLite with the [
b3f0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 55 4e  SQLITE_OMIT_TRUN
b400: 43 41 54 45 5f 4f 50 54 49 4d 49 5a 41 54 49 4f  CATE_OPTIMIZATIO
b410: 4e 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  N] compile-time 
b420: 73 77 69 74 63 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e  switch.</p>..<p>
b430: 54 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74  The truncate opt
b440: 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20 61 6c  imization can al
b450: 73 6f 20 62 65 20 64 69 73 61 62 6c 65 64 20 61  so be disabled a
b460: 74 20 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 0a  t runtime using.
b470: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 65 74  the [sqlite3_set
b480: 5f 61 75 74 68 6f 72 69 7a 65 72 28 29 5d 20 69  _authorizer()] i
b490: 6e 74 65 72 66 61 63 65 2e 20 20 5e 49 66 20 61  nterface.  ^If a
b4a0: 6e 20 61 75 74 68 6f 72 69 7a 65 72 20 63 61 6c  n authorizer cal
b4b0: 6c 62 61 63 6b 0a 72 65 74 75 72 6e 73 20 5b 53  lback.returns [S
b4c0: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 5d 20 66 6f  QLITE_IGNORE] fo
b4d0: 72 20 61 6e 20 5b 53 51 4c 49 54 45 5f 44 45 4c  r an [SQLITE_DEL
b4e0: 45 54 45 5d 20 61 63 74 69 6f 6e 20 63 6f 64 65  ETE] action code
b4f0: 2c 20 74 68 65 6e 0a 74 68 65 20 44 45 4c 45 54  , then.the DELET
b500: 45 20 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c  E operation will
b510: 20 70 72 6f 63 65 65 64 20 62 75 74 20 74 68 65   proceed but the
b520: 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69   truncate optimi
b530: 7a 61 74 69 6f 6e 20 77 69 6c 6c 0a 62 65 20 62  zation will.be b
b540: 79 70 61 73 73 65 64 20 61 6e 64 20 72 6f 77 73  ypassed and rows
b550: 20 77 69 6c 6c 20 62 65 20 64 65 6c 65 74 65 64   will be deleted
b560: 20 6f 6e 65 20 62 79 20 6f 6e 65 2e 3c 2f 70 3e   one by one.</p>
b570: 0a 0a 3c 68 33 3e 55 73 65 20 4f 66 20 4c 49 4d  ..<h3>Use Of LIM
b580: 49 54 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66  IT</h3>..<p>^(If
b590: 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69   SQLite is compi
b5a0: 6c 65 64 20 77 69 74 68 20 74 68 65 20 5b 53 51  led with the [SQ
b5b0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
b5c0: 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d  TE_DELETE_LIMIT]
b5d0: 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70  .compile-time op
b5e0: 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 73  tion, then the s
b5f0: 79 6e 74 61 78 20 6f 66 20 74 68 65 20 44 45 4c  yntax of the DEL
b600: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ETE statement is
b610: 0a 65 78 74 65 6e 64 65 64 20 62 79 20 74 68 65  .extended by the
b620: 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6f 70 74   addition of opt
b630: 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59 20 61  ional ORDER BY a
b640: 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73  nd LIMIT clauses
b650: 3a 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75  :)^</p>..<tcl>Bu
b660: 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65 6c 65  bbleDiagram dele
b670: 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65 64 3c  te-stmt-limited<
b680: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f  /tcl>..<p>^The o
b690: 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 63 6c  ptional LIMIT cl
b6a0: 61 75 73 65 20 63 61 6e 20 62 65 20 75 73 65 64  ause can be used
b6b0: 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75   to limit the nu
b6c0: 6d 62 65 72 20 6f 66 0a 72 6f 77 73 20 64 65 6c  mber of.rows del
b6d0: 65 74 65 64 2c 20 61 6e 64 20 74 68 65 72 65 62  eted, and thereb
b6e0: 79 20 6c 69 6d 69 74 20 74 68 65 20 73 69 7a 65  y limit the size
b6f0: 20 6f 66 20 74 68 65 20 74 72 61 6e 73 61 63 74   of the transact
b700: 69 6f 6e 2e 0a 5e 54 68 65 20 4f 52 44 45 52 20  ion..^The ORDER 
b710: 42 59 20 63 6c 61 75 73 65 20 6f 6e 20 61 20 44  BY clause on a D
b720: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 0a  ELETE statement.
b730: 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20  is used only to 
b740: 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 20  determine which 
b750: 72 6f 77 73 20 66 61 6c 6c 0a 77 69 74 68 69 6e  rows fall.within
b760: 20 74 68 65 20 4c 49 4d 49 54 2e 20 20 5e 54 68   the LIMIT.  ^Th
b770: 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68  e order in which
b780: 20 72 6f 77 73 20 61 72 65 20 64 65 6c 65 74 65   rows are delete
b790: 64 20 69 73 20 61 72 62 69 74 72 61 72 79 0a 61  d is arbitrary.a
b7a0: 6e 64 20 69 73 20 6e 6f 74 20 64 65 74 65 72 6d  nd is not determ
b7b0: 69 6e 65 64 20 62 79 20 74 68 65 20 4f 52 44 45  ined by the ORDE
b7c0: 52 20 42 59 20 63 6c 61 75 73 65 2e 3c 2f 70 3e  R BY clause.</p>
b7d0: 0a 0a 3c 70 3e 5e 54 68 65 20 70 72 65 73 65 6e  ..<p>^The presen
b7e0: 63 65 20 6f 66 20 61 20 4c 49 4d 49 54 20 63 6c  ce of a LIMIT cl
b7f0: 61 75 73 65 20 64 65 66 65 61 74 73 20 74 68 65  ause defeats the
b800: 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69   truncate optimi
b810: 7a 61 74 69 6f 6e 0a 63 61 75 73 69 6e 67 20 61  zation.causing a
b820: 6c 6c 20 72 6f 77 73 20 62 65 69 6e 67 20 64 65  ll rows being de
b830: 6c 65 74 65 64 20 74 6f 20 62 65 20 76 69 73 69  leted to be visi
b840: 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  ted.</p>..<tcl>.
b850: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b860: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b870: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b880: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b890: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
b8a0: 53 65 63 74 69 6f 6e 20 7b 44 45 54 41 43 48 20  Section {DETACH 
b8b0: 44 41 54 41 42 41 53 45 7d 20 64 65 74 61 63 68  DATABASE} detach
b8c0: 20 2a 44 45 54 41 43 48 0a 0a 42 75 62 62 6c 65   *DETACH..Bubble
b8d0: 44 69 61 67 72 61 6d 20 64 65 74 61 63 68 2d 73  Diagram detach-s
b8e0: 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  tmt 1.</tcl>..<p
b8f0: 3e 5e 54 68 69 73 20 73 74 61 74 65 6d 65 6e 74  >^This statement
b900: 20 64 65 74 61 63 68 65 73 20 61 6e 20 61 64 64   detaches an add
b910: 69 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65  itional database
b920: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76   connection prev
b930: 69 6f 75 73 6c 79 20 0a 61 74 74 61 63 68 65 64  iously .attached
b940: 20 75 73 69 6e 67 20 74 68 65 20 5b 41 54 54 41   using the [ATTA
b950: 43 48 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  CH] statement.  
b960: 0a 5e 49 74 20 69 73 20 70 6f 73 73 69 62 6c 65  .^It is possible
b970: 20 74 6f 20 68 61 76 65 20 74 68 65 20 73 61 6d   to have the sam
b980: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
b990: 61 74 74 61 63 68 65 64 20 6d 75 6c 74 69 70 6c  attached multipl
b9a0: 65 20 74 69 6d 65 73 20 75 73 69 6e 67 20 0a 64  e times using .d
b9b0: 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 73 2c 20  ifferent names, 
b9c0: 61 6e 64 20 64 65 74 61 63 68 69 6e 67 20 6f 6e  and detaching on
b9d0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  e connection to 
b9e0: 61 20 66 69 6c 65 20 77 69 6c 6c 20 6c 65 61 76  a file will leav
b9f0: 65 20 74 68 65 20 0a 6f 74 68 65 72 73 20 69 6e  e the .others in
ba00: 74 61 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  tact.</p>..<p>^T
ba10: 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 77 69  his statement wi
ba20: 6c 6c 20 66 61 69 6c 20 69 66 20 53 51 4c 69 74  ll fail if SQLit
ba30: 65 20 69 73 20 69 6e 20 74 68 65 20 6d 69 64 64  e is in the midd
ba40: 6c 65 20 6f 66 20 61 20 74 72 61 6e 73 61 63 74  le of a transact
ba50: 69 6f 6e 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e  ion.</p>...<tcl>
ba60: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
ba70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ba80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ba90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
baa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
bab0: 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 49 4e  Section {DROP IN
bac0: 44 45 58 7d 20 64 72 6f 70 69 6e 64 65 78 20 7b  DEX} dropindex {
bad0: 7b 44 52 4f 50 20 49 4e 44 45 58 7d 7d 0a 0a 42  {DROP INDEX}}..B
bae0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f  ubbleDiagram dro
baf0: 70 2d 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a 3c  p-index-stmt 1.<
bb00: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44  /tcl>..<p>^The D
bb10: 52 4f 50 20 49 4e 44 45 58 20 73 74 61 74 65 6d  ROP INDEX statem
bb20: 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 6e 20 69  ent removes an i
bb30: 6e 64 65 78 20 61 64 64 65 64 0a 77 69 74 68 20  ndex added.with 
bb40: 74 68 65 20 5b 43 52 45 41 54 45 20 49 4e 44 45  the [CREATE INDE
bb50: 58 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  X] statement.  T
bb60: 68 65 20 69 6e 64 65 78 20 69 73 20 63 6f 6d 70  he index is comp
bb70: 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66  letely removed f
bb80: 72 6f 6d 0a 74 68 65 20 64 69 73 6b 2e 20 20 54  rom.the disk.  T
bb90: 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 6f 20 72  he only way to r
bba0: 65 63 6f 76 65 72 20 74 68 65 20 69 6e 64 65 78  ecover the index
bbb0: 20 69 73 20 74 6f 20 72 65 65 6e 74 65 72 20 74   is to reenter t
bbc0: 68 65 0a 61 70 70 72 6f 70 72 69 61 74 65 20 5b  he.appropriate [
bbd0: 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20 63 6f  CREATE INDEX] co
bbe0: 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  mmand.</p>..<tcl
bbf0: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
bc00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bc10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bc20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bc30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bc40: 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54  .Section {DROP T
bc50: 41 42 4c 45 7d 20 64 72 6f 70 74 61 62 6c 65 20  ABLE} droptable 
bc60: 7b 7b 44 52 4f 50 20 54 41 42 4c 45 7d 7d 0a 0a  {{DROP TABLE}}..
bc70: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72  BubbleDiagram dr
bc80: 6f 70 2d 74 61 62 6c 65 2d 73 74 6d 74 20 31 0a  op-table-stmt 1.
bc90: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
bca0: 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65  DROP TABLE state
bcb0: 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74  ment removes a t
bcc0: 61 62 6c 65 20 61 64 64 65 64 20 77 69 74 68 20  able added with 
bcd0: 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c  the.[CREATE TABL
bce0: 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  E] statement.  T
bcf0: 68 65 20 6e 61 6d 65 20 73 70 65 63 69 66 69 65  he name specifie
bd00: 64 20 69 73 20 74 68 65 0a 74 61 62 6c 65 20 6e  d is the.table n
bd10: 61 6d 65 2e 20 20 5e 54 68 65 20 64 72 6f 70 70  ame.  ^The dropp
bd20: 65 64 20 74 61 62 6c 65 20 69 73 20 63 6f 6d 70  ed table is comp
bd30: 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66  letely removed f
bd40: 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
bd50: 20 0a 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65   .schema and the
bd60: 20 64 69 73 6b 20 66 69 6c 65 2e 20 20 54 68 65   disk file.  The
bd70: 20 74 61 62 6c 65 20 63 61 6e 20 6e 6f 74 20 62   table can not b
bd80: 65 20 72 65 63 6f 76 65 72 65 64 2e 20 20 0a 5e  e recovered.  .^
bd90: 41 6c 6c 20 69 6e 64 69 63 65 73 20 61 6e 64 20  All indices and 
bda0: 74 72 69 67 67 65 72 73 0a 61 73 73 6f 63 69 61  triggers.associa
bdb0: 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
bdc0: 6c 65 20 61 72 65 20 61 6c 73 6f 20 64 65 6c 65  le are also dele
bdd0: 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ted.</p>..<p>^Th
bde0: 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 45 58  e optional IF EX
bdf0: 49 53 54 53 20 63 6c 61 75 73 65 20 73 75 70 70  ISTS clause supp
be00: 72 65 73 73 65 73 20 74 68 65 20 65 72 72 6f 72  resses the error
be10: 20 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d   that would norm
be20: 61 6c 6c 79 0a 72 65 73 75 6c 74 20 69 66 20 74  ally.result if t
be30: 68 65 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f  he table does no
be40: 74 20 65 78 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 70  t exist.</p>..<p
be50: 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65  >^If [foreign ke
be60: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61  y constraints] a
be70: 72 65 20 65 6e 61 62 6c 65 64 2c 20 61 20 44 52  re enabled, a DR
be80: 4f 50 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  OP TABLE command
be90: 20 70 65 72 66 6f 72 6d 73 20 61 6e 0a 69 6d 70   performs an.imp
bea0: 6c 69 63 69 74 20 5b 44 45 4c 45 54 45 20 7c 20  licit [DELETE | 
beb0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b  DELETE FROM &lt;
bec0: 74 62 6c 26 67 74 3b 5d 20 63 6f 6d 6d 61 6e 64  tbl&gt;] command
bed0: 20 62 65 66 6f 72 65 20 72 65 6d 6f 76 69 6e 67   before removing
bee0: 20 74 68 65 0a 74 61 62 6c 65 20 66 72 6f 6d 20   the.table from 
bef0: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
bf00: 65 6d 61 2e 20 5e 41 6e 79 20 74 72 69 67 67 65  ema. ^Any trigge
bf10: 72 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  rs attached to t
bf20: 68 65 20 74 61 62 6c 65 20 61 72 65 0a 64 72 6f  he table are.dro
bf30: 70 70 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61  pped from the da
bf40: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 62 65  tabase schema be
bf50: 66 6f 72 65 20 74 68 65 20 69 6d 70 6c 69 63 69  fore the implici
bf60: 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c  t DELETE FROM &l
bf70: 74 3b 74 62 6c 26 67 74 3b 20 0a 69 73 20 65 78  t;tbl&gt; .is ex
bf80: 65 63 75 74 65 64 2c 20 73 6f 20 74 68 69 73 20  ecuted, so this 
bf90: 63 61 6e 6e 6f 74 20 63 61 75 73 65 20 61 6e 79  cannot cause any
bfa0: 20 74 72 69 67 67 65 72 73 20 74 6f 20 66 69 72   triggers to fir
bfb0: 65 2e 20 42 79 20 63 6f 6e 74 72 61 73 74 2c 20  e. By contrast, 
bfc0: 5e 61 6e 0a 69 6d 70 6c 69 63 69 74 20 44 45 4c  ^an.implicit DEL
bfd0: 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c  ETE FROM &lt;tbl
bfe0: 26 67 74 3b 20 64 6f 65 73 20 63 61 75 73 65 20  &gt; does cause 
bff0: 61 6e 79 20 63 6f 6e 66 69 67 75 72 65 64 0a 5b  any configured.[
c000: 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69  foreign key acti
c010: 6f 6e 73 5d 20 74 6f 20 74 61 6b 65 20 70 6c 61  ons] to take pla
c020: 63 65 2e 20 0a 5e 49 66 20 74 68 65 20 69 6d 70  ce. .^If the imp
c030: 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f  licit DELETE FRO
c040: 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 65 78  M &lt;tbl&gt; ex
c050: 65 63 75 74 65 64 0a 61 73 20 70 61 72 74 20 6f  ecuted.as part o
c060: 66 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63  f a DROP TABLE c
c070: 6f 6d 6d 61 6e 64 20 76 69 6f 6c 61 74 65 73 20  ommand violates 
c080: 61 6e 79 20 69 6d 6d 65 64 69 61 74 65 20 66 6f  any immediate fo
c090: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
c0a0: 61 69 6e 74 73 2c 0a 61 6e 20 65 72 72 6f 72 20  aints,.an error 
c0b0: 69 73 20 72 65 74 75 72 6e 65 64 20 61 6e 64 20  is returned and 
c0c0: 74 68 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74  the table is not
c0d0: 20 64 72 6f 70 70 65 64 2e 20 5e 49 66 20 0a 74   dropped. ^If .t
c0e0: 68 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45  he implicit DELE
c0f0: 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26  TE FROM &lt;tbl&
c100: 67 74 3b 20 63 61 75 73 65 73 20 61 6e 79 20 0a  gt; causes any .
c110: 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e  deferred foreign
c120: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
c130: 20 74 6f 20 62 65 20 76 69 6f 6c 61 74 65 64 2c   to be violated,
c140: 20 61 6e 64 20 74 68 65 20 76 69 6f 6c 61 74 69   and the violati
c150: 6f 6e 73 20 73 74 69 6c 6c 0a 65 78 69 73 74 20  ons still.exist 
c160: 77 68 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63  when the transac
c170: 74 69 6f 6e 20 69 73 20 63 6f 6d 6d 69 74 74 65  tion is committe
c180: 64 2c 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72  d, an error is r
c190: 65 74 75 72 6e 65 64 20 61 74 20 74 68 65 20 74  eturned at the t
c1a0: 69 6d 65 0a 6f 66 20 63 6f 6d 6d 69 74 2e 0a 0a  ime.of commit...
c1b0: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
c1c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c1d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c1e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c1f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c200: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52  ####.Section {DR
c210: 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70  OP TRIGGER} drop
c220: 74 72 69 67 67 65 72 20 7b 7b 44 52 4f 50 20 54  trigger {{DROP T
c230: 52 49 47 47 45 52 7d 7d 0a 0a 42 75 62 62 6c 65  RIGGER}}..Bubble
c240: 44 69 61 67 72 61 6d 20 64 72 6f 70 2d 74 72 69  Diagram drop-tri
c250: 67 67 65 72 2d 73 74 6d 74 20 31 0a 3c 2f 74 63  gger-stmt 1.</tc
c260: 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50  l>..<p>^The DROP
c270: 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d 65   TRIGGER stateme
c280: 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74 72 69  nt removes a tri
c290: 67 67 65 72 20 63 72 65 61 74 65 64 20 62 79 20  gger created by 
c2a0: 74 68 65 20 0a 5b 43 52 45 41 54 45 20 54 52 49  the .[CREATE TRI
c2b0: 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e  GGER] statement.
c2c0: 20 20 5e 54 68 65 20 74 72 69 67 67 65 72 20 69    ^The trigger i
c2d0: 73 20 0a 64 65 6c 65 74 65 64 20 66 72 6f 6d 20  s .deleted from 
c2e0: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
c2f0: 65 6d 61 2e 20 5e 4e 6f 74 65 20 74 68 61 74 20  ema. ^Note that 
c300: 74 72 69 67 67 65 72 73 20 61 72 65 20 61 75 74  triggers are aut
c310: 6f 6d 61 74 69 63 61 6c 6c 79 20 0a 64 72 6f 70  omatically .drop
c320: 70 65 64 20 77 68 65 6e 20 74 68 65 20 61 73 73  ped when the ass
c330: 6f 63 69 61 74 65 64 20 74 61 62 6c 65 20 69 73  ociated table is
c340: 20 64 72 6f 70 70 65 64 2e 3c 2f 70 3e 0a 0a 3c   dropped.</p>..<
c350: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
c360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c370: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c380: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c390: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c3a0: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f  ###.Section {DRO
c3b0: 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65 77  P VIEW} dropview
c3c0: 20 7b 7b 44 52 4f 50 20 56 49 45 57 7d 7d 0a 0a   {{DROP VIEW}}..
c3d0: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72  BubbleDiagram dr
c3e0: 6f 70 2d 76 69 65 77 2d 73 74 6d 74 20 31 0a 3c  op-view-stmt 1.<
c3f0: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44  /tcl>..<p>^The D
c400: 52 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d 65  ROP VIEW stateme
c410: 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 76 69 65  nt removes a vie
c420: 77 20 63 72 65 61 74 65 64 20 62 79 20 74 68 65  w created by the
c430: 0a 5b 43 52 45 41 54 45 20 56 49 45 57 5d 20 73  .[CREATE VIEW] s
c440: 74 61 74 65 6d 65 6e 74 2e 20 20 5e 54 68 65 20  tatement.  ^The 
c450: 6e 61 6d 65 20 73 70 65 63 69 66 69 65 64 20 69  name specified i
c460: 73 20 74 68 65 20 0a 76 69 65 77 20 6e 61 6d 65  s the .view name
c470: 2e 20 20 5e 49 74 20 69 73 20 72 65 6d 6f 76 65  .  ^It is remove
c480: 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  d from the datab
c490: 61 73 65 20 73 63 68 65 6d 61 2c 20 62 75 74 20  ase schema, but 
c4a0: 6e 6f 20 61 63 74 75 61 6c 20 64 61 74 61 20 0a  no actual data .
c4b0: 69 6e 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  in the underlyin
c4c0: 67 20 62 61 73 65 20 74 61 62 6c 65 73 20 69 73  g base tables is
c4d0: 20 6d 6f 64 69 66 69 65 64 2e 3c 2f 70 3e 0a 0a   modified.</p>..
c4e0: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
c4f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c500: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c510: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c520: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c530: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 45 58 50  ####.Section EXP
c540: 4c 41 49 4e 20 65 78 70 6c 61 69 6e 20 45 58 50  LAIN explain EXP
c550: 4c 41 49 4e 0a 0a 42 75 62 62 6c 65 44 69 61 67  LAIN..BubbleDiag
c560: 72 61 6d 20 73 71 6c 2d 73 74 6d 74 0a 3c 2f 74  ram sql-stmt.</t
c570: 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 53 51 4c 20  cl>..<p>^An SQL 
c580: 73 74 61 74 65 6d 65 6e 74 20 63 61 6e 20 62 65  statement can be
c590: 20 70 72 65 63 65 64 65 64 20 62 79 20 74 68 65   preceded by the
c5a0: 20 6b 65 79 77 6f 72 64 20 22 45 58 50 4c 41 49   keyword "EXPLAI
c5b0: 4e 22 20 6f 72 0a 62 79 20 74 68 65 20 70 68 72  N" or.by the phr
c5c0: 61 73 65 20 22 45 58 50 4c 41 49 4e 20 51 55 45  ase "EXPLAIN QUE
c5d0: 52 59 20 50 4c 41 4e 22 2e 20 20 5e 45 69 74 68  RY PLAN".  ^Eith
c5e0: 65 72 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20  er modification 
c5f0: 63 61 75 73 65 73 20 74 68 65 0a 53 51 4c 20 73  causes the.SQL s
c600: 74 61 74 65 6d 65 6e 74 20 74 6f 20 62 65 68 61  tatement to beha
c610: 76 65 20 61 73 20 61 20 71 75 65 72 79 20 61 6e  ve as a query an
c620: 64 20 74 6f 20 72 65 74 75 72 6e 20 69 6e 66 6f  d to return info
c630: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 0a 68 6f  rmation about.ho
c640: 77 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  w the SQL statem
c650: 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20 6f  ent would have o
c660: 70 65 72 61 74 65 64 20 69 66 20 74 68 65 20 45  perated if the E
c670: 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20 6f  XPLAIN keyword o
c680: 72 0a 70 68 72 61 73 65 20 68 61 64 20 62 65 65  r.phrase had bee
c690: 6e 20 6f 6d 69 74 74 65 64 2e 3c 2f 70 3e 0a 0a  n omitted.</p>..
c6a0: 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 45 58 50  <p>^When the EXP
c6b0: 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20 61 70 70  LAIN keyword app
c6c0: 65 61 72 73 20 62 79 20 69 74 73 65 6c 66 20 69  ears by itself i
c6d0: 74 20 63 61 75 73 65 73 20 74 68 65 20 73 74 61  t causes the sta
c6e0: 74 65 6d 65 6e 74 0a 74 6f 20 62 65 68 61 76 65  tement.to behave
c6f0: 20 61 73 20 61 20 71 75 65 72 79 20 74 68 61 74   as a query that
c700: 20 72 65 74 75 72 6e 73 20 74 68 65 20 73 65 71   returns the seq
c710: 75 65 6e 63 65 20 6f 66 20 0a 5b 76 69 72 74 75  uence of .[virtu
c720: 61 6c 20 6d 61 63 68 69 6e 65 20 69 6e 73 74 72  al machine instr
c730: 75 63 74 69 6f 6e 73 5d 20 69 74 20 77 6f 75 6c  uctions] it woul
c740: 64 20 68 61 76 65 0a 75 73 65 64 20 74 6f 20 65  d have.used to e
c750: 78 65 63 75 74 65 20 74 68 65 20 63 6f 6d 6d 61  xecute the comma
c760: 6e 64 20 68 61 64 20 74 68 65 20 45 58 50 4c 41  nd had the EXPLA
c770: 49 4e 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 62  IN keyword not b
c780: 65 65 6e 20 70 72 65 73 65 6e 74 2e 0a 5e 57 68  een present..^Wh
c790: 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51  en the EXPLAIN Q
c7a0: 55 45 52 59 20 50 4c 41 4e 20 70 68 72 61 73 65  UERY PLAN phrase
c7b0: 20 61 70 70 65 61 72 73 2c 20 74 68 65 20 73 74   appears, the st
c7c0: 61 74 65 6d 65 6e 74 20 72 65 74 75 72 6e 73 0a  atement returns.
c7d0: 68 69 67 68 2d 6c 65 76 65 6c 20 69 6e 66 6f 72  high-level infor
c7e0: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 77 68 61  mation about wha
c7f0: 74 20 69 6e 64 69 63 65 73 20 77 6f 75 6c 64 20  t indices would 
c800: 68 61 76 65 20 62 65 65 6e 20 75 73 65 64 2e 3c  have been used.<
c810: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70  /p>..<p>The outp
c820: 75 74 20 66 72 6f 6d 20 45 58 50 4c 41 49 4e 20  ut from EXPLAIN 
c830: 61 6e 64 20 45 58 50 4c 41 49 4e 20 51 55 45 52  and EXPLAIN QUER
c840: 59 20 50 4c 41 4e 20 69 73 20 69 6e 74 65 6e 64  Y PLAN is intend
c850: 65 64 20 66 6f 72 0a 69 6e 74 65 72 61 63 74 69  ed for.interacti
c860: 76 65 20 61 6e 61 6c 79 73 69 73 20 61 6e 64 20  ve analysis and 
c870: 74 72 6f 75 62 6c 65 73 68 6f 6f 74 69 6e 67 20  troubleshooting 
c880: 6f 6e 6c 79 2e 20 20 54 68 65 20 64 65 74 61 69  only.  The detai
c890: 6c 73 20 6f 66 20 74 68 65 20 0a 6f 75 74 70 75  ls of the .outpu
c8a0: 74 20 66 6f 72 6d 61 74 20 61 72 65 20 73 75 62  t format are sub
c8b0: 6a 65 63 74 20 74 6f 20 63 68 61 6e 67 65 20 66  ject to change f
c8c0: 72 6f 6d 20 6f 6e 65 20 72 65 6c 65 61 73 65 20  rom one release 
c8d0: 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 74 68 65  of SQLite to the
c8e0: 20 6e 65 78 74 2e 0a 41 70 70 6c 69 63 61 74 69   next..Applicati
c8f0: 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74 20 75  ons should not u
c900: 73 65 20 45 58 50 4c 41 49 4e 20 6f 72 20 45 58  se EXPLAIN or EX
c910: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
c920: 20 73 69 6e 63 65 0a 74 68 65 69 72 20 65 78 61   since.their exa
c930: 63 74 20 62 65 68 61 76 69 6f 72 20 69 73 20 75  ct behavior is u
c940: 6e 64 6f 63 75 6d 65 6e 74 65 64 2c 20 75 6e 73  ndocumented, uns
c950: 70 65 63 69 66 69 65 64 2c 20 61 6e 64 20 76 61  pecified, and va
c960: 72 69 61 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63  riable.</p>..<tc
c970: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
c980: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c9a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c9b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c9c0: 23 0a 53 65 63 74 69 6f 6e 20 65 78 70 72 65 73  #.Section expres
c9d0: 73 69 6f 6e 20 65 78 70 72 20 7b 2a 65 78 70 72  sion expr {*expr
c9e0: 65 73 73 69 6f 6e 20 7b 65 78 70 72 65 73 73 69  ession {expressi
c9f0: 6f 6e 20 73 79 6e 74 61 78 7d 7d 0a 0a 42 75 62  on syntax}}..Bub
ca00: 62 6c 65 44 69 61 67 72 61 6d 20 65 78 70 72 20  bleDiagram expr 
ca10: 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  1.BubbleDiagram 
ca20: 6c 69 74 65 72 61 6c 2d 76 61 6c 75 65 0a 42 75  literal-value.Bu
ca30: 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69 67 6e  bbleDiagram sign
ca40: 65 64 2d 6e 75 6d 62 65 72 0a 42 75 62 62 6c 65  ed-number.Bubble
ca50: 44 69 61 67 72 61 6d 20 72 61 69 73 65 2d 66 75  Diagram raise-fu
ca60: 6e 63 74 69 6f 6e 0a 3c 2f 74 63 6c 3e 0a 0a 3c  nction.</tcl>..<
ca70: 70 3e 54 68 69 73 20 73 65 63 74 69 6f 6e 20 69  p>This section i
ca80: 73 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  s different from
ca90: 20 74 68 65 20 6f 74 68 65 72 73 2e 20 20 4d 6f   the others.  Mo
caa0: 73 74 20 6f 74 68 65 72 20 73 65 63 74 69 6f 6e  st other section
cab0: 73 20 6f 66 0a 74 68 69 73 20 64 6f 63 75 6d 65  s of.this docume
cac0: 6e 74 20 74 61 6c 6b 73 20 61 62 6f 75 74 20 61  nt talks about a
cad0: 20 70 61 72 74 69 63 75 6c 61 72 20 53 51 4c 20   particular SQL 
cae0: 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20 73  command.  This s
caf0: 65 63 74 69 6f 6e 20 64 6f 65 73 0a 6e 6f 74 20  ection does.not 
cb00: 74 61 6c 6b 20 61 62 6f 75 74 20 61 20 73 74 61  talk about a sta
cb10: 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61 6e 64 20  ndalone command 
cb20: 62 75 74 20 61 62 6f 75 74 20 22 65 78 70 72 65  but about "expre
cb30: 73 73 69 6f 6e 73 22 20 77 68 69 63 68 20 61 72  ssions" which ar
cb40: 65 20 0a 73 75 62 63 6f 6d 70 6f 6e 65 6e 74 73  e .subcomponents
cb50: 20 6f 66 20 6d 6f 73 74 20 6f 74 68 65 72 20 63   of most other c
cb60: 6f 6d 6d 61 6e 64 73 2e 3c 2f 70 3e 0a 0a 3c 74  ommands.</p>..<t
cb70: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62  cl>hd_fragment b
cb80: 69 6e 61 72 79 6f 70 73 20 7b 62 69 6e 61 72 79  inaryops {binary
cb90: 20 6f 70 65 72 61 74 6f 72 73 7d 3c 2f 74 63 6c   operators}</tcl
cba0: 3e 0a 3c 68 33 3e 4f 70 65 72 61 74 6f 72 73 3c  >.<h3>Operators<
cbb0: 2f 68 33 3e 0a 3c 70 3e 5e 28 53 51 4c 69 74 65  /h3>.<p>^(SQLite
cbc0: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 74 68 65   understands the
cbd0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 69 6e 61 72   following binar
cbe0: 79 20 6f 70 65 72 61 74 6f 72 73 2c 20 69 6e 20  y operators, in 
cbf0: 6f 72 64 65 72 20 66 72 6f 6d 0a 68 69 67 68 65  order from.highe
cc00: 73 74 20 74 6f 20 6c 6f 77 65 73 74 20 70 72 65  st to lowest pre
cc10: 63 65 64 65 6e 63 65 3a 3c 2f 70 3e 0a 0a 3c 62  cedence:</p>..<b
cc20: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
cc30: 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32 63  <font color="#2c
cc40: 32 63 66 30 22 3e 3c 62 69 67 3e 7c 7c 0a 2a 20  2cf0"><big>||.* 
cc50: 20 20 20 2f 20 20 20 20 25 0a 2b 20 20 20 20 2d     /    %.+    -
cc60: 0a 26 6c 74 3b 26 6c 74 3b 20 20 20 26 67 74 3b  .&lt;&lt;   &gt;
cc70: 26 67 74 3b 20 20 20 26 61 6d 70 3b 20 20 20 20  &gt;   &amp;    
cc80: 7c 0a 26 6c 74 3b 20 20 20 20 26 6c 74 3b 3d 20  |.&lt;    &lt;= 
cc90: 20 20 26 67 74 3b 20 20 20 20 26 67 74 3b 3d 0a    &gt;    &gt;=.
cca0: 3d 20 20 20 20 3d 3d 20 20 20 21 3d 20 20 20 26  =    ==   !=   &
ccb0: 6c 74 3b 26 67 74 3b 20 20 20 3c 2f 62 69 67 3e  lt;&gt;   </big>
ccc0: 49 53 20 20 49 4e 20 20 4c 49 4b 45 20 20 47 4c  IS  IN  LIKE  GL
ccd0: 4f 42 20 20 4d 41 54 43 48 20 20 52 45 47 45 58  OB  MATCH  REGEX
cce0: 50 0a 41 4e 44 20 20 20 0a 4f 52 3c 2f 66 6f 6e  P.AND   .OR</fon
ccf0: 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  t>.</pre></block
cd00: 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 28 53  quote>)^..<p>^(S
cd10: 75 70 70 6f 72 74 65 64 20 75 6e 61 72 79 20 70  upported unary p
cd20: 72 65 66 69 78 20 6f 70 65 72 61 74 6f 72 73 20  refix operators 
cd30: 61 72 65 20 74 68 65 73 65 3a 3c 2f 70 3e 0a 0a  are these:</p>..
cd40: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
cd50: 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23  >.<font color="#
cd60: 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 2d 20 20  2c2cf0"><big>-  
cd70: 20 20 2b 20 20 20 20 7e 20 20 20 20 4e 4f 54 3c    +    ~    NOT<
cd80: 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70  /big></font>.</p
cd90: 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
cda0: 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  )^..<tcl>hd_frag
cdb0: 6d 65 6e 74 20 63 6f 6c 6c 61 74 65 6f 70 20 7b  ment collateop {
cdc0: 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
cdd0: 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20  }</tcl>.<p>^The 
cde0: 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
cdf0: 20 63 61 6e 20 62 65 20 74 68 6f 75 67 68 74 20   can be thought 
ce00: 6f 66 20 61 73 20 61 20 75 6e 61 72 79 20 70 6f  of as a unary po
ce10: 73 74 66 69 78 0a 6f 70 65 72 61 74 6f 72 2e 20  stfix.operator. 
ce20: 20 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70   ^The COLLATE op
ce30: 65 72 61 74 6f 72 20 68 61 73 20 74 68 65 20 68  erator has the h
ce40: 69 67 68 65 73 74 20 70 72 65 63 65 64 65 6e 63  ighest precedenc
ce50: 65 2e 0a 5e 49 74 20 61 6c 77 61 79 73 20 62 69  e..^It always bi
ce60: 6e 64 73 20 6d 6f 72 65 20 74 69 67 68 74 6c 79  nds more tightly
ce70: 20 74 68 61 6e 20 61 6e 79 20 70 72 65 66 69 78   than any prefix
ce80: 20 75 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20   unary operator 
ce90: 6f 72 0a 61 6e 79 20 62 69 6e 61 72 79 20 6f 70  or.any binary op
cea0: 65 72 61 74 6f 72 2e 3c 2f 70 3e 0a 0a 3c 74 63  erator.</p>..<tc
ceb0: 6c 3e 68 64 5f 70 75 74 73 20 22 0a 3c 70 3e 5e  l>hd_puts ".<p>^
cec0: 54 68 65 20 75 6e 61 72 79 20 6f 70 65 72 61 74  The unary operat
ced0: 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 2b 5d 20  or [Operator +] 
cee0: 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 5e 49 74  is a no-op.  ^It
cef0: 20 63 61 6e 20 62 65 20 61 70 70 6c 69 65 64 0a   can be applied.
cf00: 74 6f 20 73 74 72 69 6e 67 73 2c 20 6e 75 6d 62  to strings, numb
cf10: 65 72 73 2c 20 6f 72 20 62 6c 6f 62 73 20 61 6e  ers, or blobs an
cf20: 64 20 69 74 20 61 6c 77 61 79 73 20 67 69 76 65  d it always give
cf30: 73 20 61 73 20 69 74 73 20 72 65 73 75 6c 74 20  s as its result 
cf40: 74 68 65 0a 76 61 6c 75 65 20 6f 66 20 74 68 65  the.value of the
cf50: 20 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e 22 3c 2f   operand.</p>"</
cf60: 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68  tcl>..<p>Note th
cf70: 61 74 20 74 68 65 72 65 20 61 72 65 20 74 77 6f  at there are two
cf80: 20 76 61 72 69 61 74 69 6f 6e 73 20 6f 66 20 74   variations of t
cf90: 68 65 20 65 71 75 61 6c 73 20 61 6e 64 20 6e 6f  he equals and no
cfa0: 74 20 65 71 75 61 6c 73 0a 6f 70 65 72 61 74 6f  t equals.operato
cfb0: 72 73 2e 20 20 5e 45 71 75 61 6c 73 20 63 61 6e  rs.  ^Equals can
cfc0: 20 62 65 20 65 69 74 68 65 72 0a 0a 3c 74 63 6c   be either..<tcl
cfd0: 3e 0a 68 64 5f 70 75 74 73 20 22 5b 4f 70 65 72  >.hd_puts "[Oper
cfe0: 61 74 6f 72 20 3d 5d 20 6f 72 20 5b 4f 70 65 72  ator =] or [Oper
cff0: 61 74 6f 72 20 3d 3d 5d 2e 0a 5e 54 68 65 20 6e  ator ==]..^The n
d000: 6f 6e 2d 65 71 75 61 6c 73 20 6f 70 65 72 61 74  on-equals operat
d010: 6f 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  or can be either
d020: 0a 5b 4f 70 65 72 61 74 6f 72 20 21 3d 5d 20 6f  .[Operator !=] o
d030: 72 20 5b 4f 70 65 72 61 74 6f 72 20 7b 26 6c 74  r [Operator {&lt
d040: 3b 26 67 74 3b 7d 5d 2e 0a 5e 54 68 65 20 5b 4f  ;&gt;}]..^The [O
d050: 70 65 72 61 74 6f 72 20 7c 7c 5d 20 6f 70 65 72  perator ||] oper
d060: 61 74 6f 72 20 69 73 20 5c 22 63 6f 6e 63 61 74  ator is \"concat
d070: 65 6e 61 74 65 5c 22 20 2d 20 69 74 20 6a 6f 69  enate\" - it joi
d080: 6e 73 20 74 6f 67 65 74 68 65 72 0a 74 68 65 20  ns together.the 
d090: 74 77 6f 20 73 74 72 69 6e 67 73 20 6f 66 20 69  two strings of i
d0a0: 74 73 20 6f 70 65 72 61 6e 64 73 2e 0a 5e 54 68  ts operands..^Th
d0b0: 65 20 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65 72  e operator [Oper
d0c0: 61 74 6f 72 20 25 5d 20 6f 75 74 70 75 74 73 20  ator %] outputs 
d0d0: 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 6f 66  the remainder of
d0e0: 20 69 74 73 20 6c 65 66 74 20 0a 6f 70 65 72 61   its left .opera
d0f0: 6e 64 20 6d 6f 64 75 6c 6f 20 69 74 73 20 72 69  nd modulo its ri
d100: 67 68 74 20 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e  ght operand.</p>
d110: 0a 0a 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c 74  ..<p>^The result
d120: 20 6f 66 20 61 6e 79 20 62 69 6e 61 72 79 20 6f   of any binary o
d130: 70 65 72 61 74 6f 72 20 69 73 20 61 20 6e 75 6d  perator is a num
d140: 65 72 69 63 20 76 61 6c 75 65 2c 20 65 78 63 65  eric value, exce
d150: 70 74 0a 66 6f 72 20 74 68 65 20 5b 4f 70 65 72  pt.for the [Oper
d160: 61 74 6f 72 20 7c 7c 5d 20 63 6f 6e 63 61 74 65  ator ||] concate
d170: 6e 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 20  nation operator 
d180: 77 68 69 63 68 20 67 69 76 65 73 20 61 20 73 74  which gives a st
d190: 72 69 6e 67 0a 72 65 73 75 6c 74 2e 3c 2f 70 3e  ring.result.</p>
d1a0: 22 0a 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b  "..hd_fragment {
d1b0: 69 73 69 73 6e 6f 74 7d 20 7b 49 53 20 6f 70 65  isisnot} {IS ope
d1c0: 72 61 74 6f 72 7d 20 7b 49 53 20 4e 4f 54 20 6f  rator} {IS NOT o
d1d0: 70 65 72 61 74 6f 72 7d 0a 0a 68 64 5f 70 75 74  perator}..hd_put
d1e0: 73 20 22 3c 70 3e 5e 54 68 65 20 5b 4f 70 65 72  s "<p>^The [Oper
d1f0: 61 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f 70  ator IS] and [Op
d200: 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d  erator {IS NOT}]
d210: 20 6f 70 65 72 61 74 6f 72 73 20 77 6f 72 6b 0a   operators work.
d220: 6c 69 6b 65 20 5b 4f 70 65 72 61 74 6f 72 20 3d  like [Operator =
d230: 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20  ] and [Operator 
d240: 21 3d 5d 20 65 78 63 65 70 74 20 74 68 61 74 20  !=] except that 
d250: 4e 55 4c 4c 20 76 61 6c 75 65 73 20 63 6f 6d 70  NULL values comp
d260: 61 72 65 0a 65 71 75 61 6c 20 74 6f 20 6f 6e 65  are.equal to one
d270: 20 61 6e 6f 74 68 65 72 2e 20 20 5e 5b 4f 70 65   another.  ^[Ope
d280: 72 61 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f  rator IS] and [O
d290: 70 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d  perator {IS NOT}
d2a0: 5d 0a 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  ].have the same 
d2b0: 70 72 65 63 65 64 65 6e 63 65 20 61 73 20 5b 4f  precedence as [O
d2c0: 70 65 72 61 74 6f 72 20 3d 5d 2e 22 0a 0a 3c 74  perator =]."..<t
d2d0: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c  cl>hd_fragment l
d2e0: 69 74 76 61 6c 75 65 20 7b 6c 69 74 65 72 61 6c  itvalue {literal
d2f0: 20 76 61 6c 75 65 7d 3c 2f 74 63 6c 3e 0a 3c 68   value}</tcl>.<h
d300: 33 3e 4c 69 74 65 72 61 6c 20 56 61 6c 75 65 73  3>Literal Values
d310: 3c 2f 68 33 3e 0a 3c 70 3e 0a 5e 41 20 6c 69 74  </h3>.<p>.^A lit
d320: 65 72 61 6c 20 76 61 6c 75 65 20 69 73 20 61 20  eral value is a 
d330: 63 6f 6e 73 74 61 6e 74 20 6f 66 20 73 6f 6d 65  constant of some
d340: 20 6b 69 6e 64 2e 0a 5e 4c 69 74 65 72 61 6c 20   kind..^Literal 
d350: 76 61 6c 75 65 73 20 6d 61 79 20 62 65 20 69 6e  values may be in
d360: 74 65 67 65 72 73 2c 20 66 6c 6f 61 74 69 6e 67  tegers, floating
d370: 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 73 2c 20   point numbers, 
d380: 73 74 72 69 6e 67 73 2c 0a 42 4c 4f 42 73 2c 20  strings,.BLOBs, 
d390: 6f 72 20 4e 55 4c 4c 73 2e 0a 5e 53 63 69 65 6e  or NULLs..^Scien
d3a0: 74 69 66 69 63 20 6e 6f 74 61 74 69 6f 6e 20 69  tific notation i
d3b0: 73 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72 20  s supported for 
d3c0: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c  floating point l
d3d0: 69 74 65 72 61 6c 20 76 61 6c 75 65 73 2e 0a 5e  iteral values..^
d3e0: 28 54 68 65 20 22 2e 22 20 63 68 61 72 61 63 74  (The "." charact
d3f0: 65 72 20 69 73 20 61 6c 77 61 79 73 20 75 73 65  er is always use
d400: 64 20 0a 61 73 20 74 68 65 20 64 65 63 69 6d 61  d .as the decima
d410: 6c 20 70 6f 69 6e 74 20 65 76 65 6e 20 69 66 20  l point even if 
d420: 74 68 65 20 6c 6f 63 61 6c 65 20 73 65 74 74 69  the locale setti
d430: 6e 67 20 73 70 65 63 69 66 69 65 73 20 22 2c 22  ng specifies ","
d440: 20 66 6f 72 0a 74 68 69 73 20 72 6f 6c 65 20 2d   for.this role -
d450: 20 74 68 65 20 75 73 65 20 6f 66 20 22 2c 22 20   the use of "," 
d460: 66 6f 72 20 74 68 65 20 64 65 63 69 6d 61 6c 20  for the decimal 
d470: 70 6f 69 6e 74 20 77 6f 75 6c 64 20 72 65 73 75  point would resu
d480: 6c 74 20 69 6e 0a 73 79 6e 74 61 63 74 69 63 20  lt in.syntactic 
d490: 61 6d 62 69 67 75 69 74 79 2e 29 5e 20 20 5e 41  ambiguity.)^  ^A
d4a0: 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74   string constant
d4b0: 20 69 73 20 66 6f 72 6d 65 64 20 62 79 20 65 6e   is formed by en
d4c0: 63 6c 6f 73 69 6e 67 20 74 68 65 0a 73 74 72 69  closing the.stri
d4d0: 6e 67 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f  ng in single quo
d4e0: 74 65 73 20 28 27 29 2e 20 20 5e 41 20 73 69 6e  tes (').  ^A sin
d4f0: 67 6c 65 20 71 75 6f 74 65 20 77 69 74 68 69 6e  gle quote within
d500: 20 74 68 65 20 73 74 72 69 6e 67 20 63 61 6e 0a   the string can.
d510: 62 65 20 65 6e 63 6f 64 65 64 20 62 79 20 70 75  be encoded by pu
d520: 74 74 69 6e 67 20 74 77 6f 20 73 69 6e 67 6c 65  tting two single
d530: 20 71 75 6f 74 65 73 20 69 6e 20 61 20 72 6f 77   quotes in a row
d540: 20 2d 20 61 73 20 69 6e 20 50 61 73 63 61 6c 2e   - as in Pascal.
d550: 0a 43 2d 73 74 79 6c 65 20 65 73 63 61 70 65 73  .C-style escapes
d560: 20 75 73 69 6e 67 20 74 68 65 20 62 61 63 6b 73   using the backs
d570: 6c 61 73 68 20 63 68 61 72 61 63 74 65 72 20 61  lash character a
d580: 72 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64  re not supported
d590: 20 62 65 63 61 75 73 65 0a 74 68 65 79 20 61 72   because.they ar
d5a0: 65 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53  e not standard S
d5b0: 51 4c 2e 0a 5e 42 4c 4f 42 20 6c 69 74 65 72 61  QL..^BLOB litera
d5c0: 6c 73 20 61 72 65 20 73 74 72 69 6e 67 20 6c 69  ls are string li
d5d0: 74 65 72 61 6c 73 20 63 6f 6e 74 61 69 6e 69 6e  terals containin
d5e0: 67 20 68 65 78 61 64 65 63 69 6d 61 6c 20 64 61  g hexadecimal da
d5f0: 74 61 20 61 6e 64 0a 70 72 65 63 65 64 65 64 20  ta and.preceded 
d600: 62 79 20 61 20 73 69 6e 67 6c 65 20 22 78 22 20  by a single "x" 
d610: 6f 72 20 22 58 22 20 63 68 61 72 61 63 74 65 72  or "X" character
d620: 2e 20 20 5e 28 46 6f 72 20 65 78 61 6d 70 6c 65  .  ^(For example
d630: 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  :</p>..<blockquo
d640: 74 65 3e 3c 70 72 65 3e 0a 58 27 35 33 35 31 34  te><pre>.X'53514
d650: 43 36 39 37 34 36 35 27 0a 3c 2f 70 72 65 3e 3c  C697465'.</pre><
d660: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
d670: 3c 70 3e 0a 5e 41 20 6c 69 74 65 72 61 6c 20 76  <p>.^A literal v
d680: 61 6c 75 65 20 63 61 6e 20 61 6c 73 6f 20 62 65  alue can also be
d690: 20 74 68 65 20 74 6f 6b 65 6e 20 22 4e 55 4c 4c   the token "NULL
d6a0: 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  "..</p>..<tcl>hd
d6b0: 5f 66 72 61 67 6d 65 6e 74 20 76 61 72 70 61 72  _fragment varpar
d6c0: 61 6d 20 70 61 72 61 6d 65 74 65 72 20 70 61 72  am parameter par
d6d0: 61 6d 65 74 65 72 73 20 7b 62 6f 75 6e 64 20 70  ameters {bound p
d6e0: 61 72 61 6d 65 74 65 72 7d 20 7b 62 6f 75 6e 64  arameter} {bound
d6f0: 20 70 61 72 61 6d 65 74 65 72 73 7d 3c 2f 74 63   parameters}</tc
d700: 6c 3e 0a 3c 68 33 3e 50 61 72 61 6d 65 74 65 72  l>.<h3>Parameter
d710: 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 41 20 22 76 61  s</h3>.<p>.A "va
d720: 72 69 61 62 6c 65 22 20 6f 72 20 22 70 61 72 61  riable" or "para
d730: 6d 65 74 65 72 22 20 74 6f 6b 65 6e 0a 73 70 65  meter" token.spe
d740: 63 69 66 69 65 73 20 61 20 70 6c 61 63 65 68 6f  cifies a placeho
d750: 6c 64 65 72 20 69 6e 20 74 68 65 20 65 78 70 72  lder in the expr
d760: 65 73 73 69 6f 6e 20 66 6f 72 20 61 20 6c 69 74  ession for a lit
d770: 65 72 61 6c 0a 76 61 6c 75 65 20 74 68 61 74 20  eral.value that 
d780: 69 73 20 66 69 6c 6c 65 64 20 69 6e 20 61 74 20  is filled in at 
d790: 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68  runtime using th
d7a0: 65 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  e.[sqlite3_bind_
d7b0: 62 6c 6f 62 28 29 20 7c 20 73 71 6c 69 74 65 33  blob() | sqlite3
d7c0: 5f 62 69 6e 64 28 29 5d 20 66 61 6d 69 6c 79 20  _bind()] family 
d7d0: 6f 66 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61  of C/C++ interfa
d7e0: 63 65 73 2e 0a 5e 28 50 61 72 61 6d 65 74 65 72  ces..^(Parameter
d7f0: 73 20 63 61 6e 20 74 61 6b 65 20 73 65 76 65 72  s can take sever
d800: 61 6c 20 66 6f 72 6d 73 3a 0a 3c 2f 70 3e 0a 0a  al forms:.</p>..
d810: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61  <blockquote>.<ta
d820: 62 6c 65 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  ble>.<tr>.<td al
d830: 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69  ign="right" vali
d840: 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62  gn="top"><b>?</b
d850: 3e 3c 69 3e 4e 4e 4e 3c 2f 69 3e 3c 2f 74 64 3e  ><i>NNN</i></td>
d860: 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c  <td width="20"><
d870: 2f 74 64 3e 0a 3c 74 64 3e 41 20 71 75 65 73 74  /td>.<td>A quest
d880: 69 6f 6e 20 6d 61 72 6b 20 66 6f 6c 6c 6f 77 65  ion mark followe
d890: 64 20 62 79 20 61 20 6e 75 6d 62 65 72 20 3c 69  d by a number <i
d8a0: 3e 4e 4e 4e 3c 2f 69 3e 20 68 6f 6c 64 73 20 61  >NNN</i> holds a
d8b0: 20 73 70 6f 74 20 66 6f 72 20 74 68 65 0a 4e 4e   spot for the.NN
d8c0: 4e 2d 74 68 20 70 61 72 61 6d 65 74 65 72 2e 20  N-th parameter. 
d8d0: 20 4e 4e 4e 20 6d 75 73 74 20 62 65 20 62 65 74   NNN must be bet
d8e0: 77 65 65 6e 20 31 20 61 6e 64 20 5b 53 51 4c 49  ween 1 and [SQLI
d8f0: 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
d900: 4e 55 4d 42 45 52 5d 2e 3c 2f 74 64 3e 0a 3c 2f  NUMBER].</td>.</
d910: 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  tr>.<tr>.<td ali
d920: 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67  gn="right" valig
d930: 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e  n="top"><b>?</b>
d940: 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22  </td><td width="
d950: 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 41 20  20"></td>.<td>A 
d960: 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 74 68  question mark th
d970: 61 74 20 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77  at is not follow
d980: 65 64 20 62 79 20 61 20 6e 75 6d 62 65 72 20 68  ed by a number h
d990: 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72 0a  olds a spot for.
d9a0: 74 68 65 20 6e 65 78 74 20 75 6e 75 73 65 64 20  the next unused 
d9b0: 70 61 72 61 6d 65 74 65 72 2e 3c 2f 74 64 3e 0a  parameter.</td>.
d9c0: 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61  </tr>.<tr>.<td a
d9d0: 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c  lign="right" val
d9e0: 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3a 3c 2f  ign="top"><b>:</
d9f0: 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74  b><i>AAAA</i></t
da00: 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22  d><td width="20"
da10: 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 41 20 63 6f 6c  ></td>.<td>A col
da20: 6f 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  on followed by a
da30: 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d  n identifier nam
da40: 65 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66  e holds a spot f
da50: 6f 72 20 61 20 6e 61 6d 65 64 0a 70 61 72 61 6d  or a named.param
da60: 65 74 65 72 20 77 69 74 68 20 74 68 65 20 6e 61  eter with the na
da70: 6d 65 20 41 41 41 41 2e 20 20 4e 61 6d 65 64 20  me AAAA.  Named 
da80: 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20 61  parameters are a
da90: 6c 73 6f 20 6e 75 6d 62 65 72 65 64 2e 0a 54 68  lso numbered..Th
daa0: 65 20 6e 75 6d 62 65 72 20 61 73 73 69 67 6e 65  e number assigne
dab0: 64 20 69 73 20 74 68 65 20 6e 65 78 74 20 75 6e  d is the next un
dac0: 75 73 65 64 20 6e 75 6d 62 65 72 2e 20 20 54 6f  used number.  To
dad0: 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e   avoid confusion
dae0: 2c 0a 69 74 20 69 73 20 62 65 73 74 20 74 6f 20  ,.it is best to 
daf0: 61 76 6f 69 64 20 6d 69 78 69 6e 67 20 6e 61 6d  avoid mixing nam
db00: 65 64 20 61 6e 64 20 6e 75 6d 62 65 72 65 64 20  ed and numbered 
db10: 70 61 72 61 6d 65 74 65 72 73 2e 3c 2f 74 64 3e  parameters.</td>
db20: 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20  .</tr>.<tr>.<td 
db30: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61  align="right" va
db40: 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 40 3c  lign="top"><b>@<
db50: 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f  /b><i>AAAA</i></
db60: 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30  td><td width="20
db70: 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 41 6e 20 22  "></td>.<td>An "
db80: 61 74 22 20 73 69 67 6e 20 77 6f 72 6b 73 20 65  at" sign works e
db90: 78 61 63 74 6c 79 20 6c 69 6b 65 20 61 20 63 6f  xactly like a co
dba0: 6c 6f 6e 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  lon.</td>.</tr>.
dbb0: 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
dbc0: 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74  right" valign="t
dbd0: 6f 70 22 3e 3c 62 3e 24 3c 2f 62 3e 3c 69 3e 41  op"><b>$</b><i>A
dbe0: 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20  AAA</i></td><td 
dbf0: 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e  width="20"></td>
dc00: 0a 3c 74 64 3e 41 20 64 6f 6c 6c 61 72 2d 73 69  .<td>A dollar-si
dc10: 67 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  gn followed by a
dc20: 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d  n identifier nam
dc30: 65 20 61 6c 73 6f 20 68 6f 6c 64 73 20 61 20 73  e also holds a s
dc40: 70 6f 74 20 66 6f 72 20 61 20 6e 61 6d 65 64 0a  pot for a named.
dc50: 70 61 72 61 6d 65 74 65 72 20 77 69 74 68 20 74  parameter with t
dc60: 68 65 20 6e 61 6d 65 20 41 41 41 41 2e 20 20 54  he name AAAA.  T
dc70: 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61  he identifier na
dc80: 6d 65 20 69 6e 20 74 68 69 73 20 63 61 73 65 20  me in this case 
dc90: 63 61 6e 20 69 6e 63 6c 75 64 65 0a 6f 6e 65 20  can include.one 
dca0: 6f 72 20 6d 6f 72 65 20 6f 63 63 75 72 61 6e 63  or more occuranc
dcb0: 65 73 20 6f 66 20 22 3a 3a 22 20 61 6e 64 20 61  es of "::" and a
dcc0: 20 73 75 66 66 69 78 20 65 6e 63 6c 6f 73 65 64   suffix enclosed
dcd0: 20 69 6e 20 22 28 2e 2e 2e 29 22 20 63 6f 6e 74   in "(...)" cont
dce0: 61 69 6e 69 6e 67 0a 61 6e 79 20 74 65 78 74 20  aining.any text 
dcf0: 61 74 20 61 6c 6c 2e 20 20 54 68 69 73 20 73 79  at all.  This sy
dd00: 6e 74 61 78 20 69 73 20 74 68 65 20 66 6f 72 6d  ntax is the form
dd10: 20 6f 66 20 61 20 76 61 72 69 61 62 6c 65 20 6e   of a variable n
dd20: 61 6d 65 20 69 6e 20 74 68 65 0a 5b 68 74 74 70  ame in the.[http
dd30: 3a 2f 2f 77 77 77 2e 74 63 6c 2e 74 6b 2f 20 7c  ://www.tcl.tk/ |
dd40: 20 54 63 6c 20 70 72 6f 67 72 61 6d 6d 69 6e 67   Tcl programming
dd50: 20 6c 61 6e 67 75 61 67 65 5d 2e 20 20 54 68 65   language].  The
dd60: 20 70 72 65 73 65 6e 63 65 0a 6f 66 20 74 68 69   presence.of thi
dd70: 73 20 73 79 6e 74 61 78 20 72 65 73 75 6c 74 73  s syntax results
dd80: 20 66 72 6f 6d 20 74 68 65 20 66 61 63 74 20 74   from the fact t
dd90: 68 61 74 20 53 51 4c 69 74 65 20 69 73 20 72 65  hat SQLite is re
dda0: 61 6c 6c 79 20 61 20 0a 5b 54 63 6c 20 65 78 74  ally a .[Tcl ext
ddb0: 65 6e 73 69 6f 6e 5d 20 74 68 61 74 20 68 61 73  ension] that has
ddc0: 20 65 73 63 61 70 65 64 20 69 6e 74 6f 20 74 68   escaped into th
ddd0: 65 20 77 69 6c 64 2e 3c 2f 74 64 3e 0a 3c 2f 74  e wild.</td>.</t
dde0: 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c  r>.</table>.</bl
ddf0: 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e  ockquote>)^..<p>
de00: 5e 50 61 72 61 6d 65 74 65 72 73 20 74 68 61 74  ^Parameters that
de10: 20 61 72 65 20 6e 6f 74 20 61 73 73 69 67 6e 65   are not assigne
de20: 64 20 76 61 6c 75 65 73 20 75 73 69 6e 67 0a 5b  d values using.[
de30: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f  sqlite3_bind_blo
de40: 62 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69  b() | sqlite3_bi
de50: 6e 64 28 29 5d 20 61 72 65 20 74 72 65 61 74 65  nd()] are treate
de60: 64 0a 61 73 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a  d.as NULL.</p>..
de70: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
de80: 20 6c 69 6b 65 20 4c 49 4b 45 20 45 53 43 41 50   like LIKE ESCAP
de90: 45 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  E</tcl>.<h3>The 
dea0: 4c 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20 6f 70  LIKE and GLOB op
deb0: 65 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e  erators</h3>.<p>
dec0: 5e 54 68 65 20 4c 49 4b 45 20 6f 70 65 72 61 74  ^The LIKE operat
ded0: 6f 72 20 64 6f 65 73 20 61 20 70 61 74 74 65 72  or does a patter
dee0: 6e 20 6d 61 74 63 68 69 6e 67 20 63 6f 6d 70 61  n matching compa
def0: 72 69 73 6f 6e 2e 20 5e 54 68 65 20 6f 70 65 72  rison. ^The oper
df00: 61 6e 64 0a 74 6f 20 74 68 65 20 72 69 67 68 74  and.to the right
df10: 20 6f 66 20 74 68 65 20 4c 49 4b 45 20 6f 70 65   of the LIKE ope
df20: 72 61 74 6f 72 20 63 6f 6e 74 61 69 6e 73 20 74  rator contains t
df30: 68 65 20 70 61 74 74 65 72 6e 20 61 6e 64 20 74  he pattern and t
df40: 68 65 20 6c 65 66 74 20 68 61 6e 64 0a 6f 70 65  he left hand.ope
df50: 72 61 6e 64 20 63 6f 6e 74 61 69 6e 73 20 74 68  rand contains th
df60: 65 20 73 74 72 69 6e 67 20 74 6f 20 6d 61 74 63  e string to matc
df70: 68 20 61 67 61 69 6e 73 74 20 74 68 65 20 70 61  h against the pa
df80: 74 74 65 72 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  ttern...<tcl>hd_
df90: 70 75 74 73 20 22 5e 41 20 70 65 72 63 65 6e 74  puts "^A percent
dfa0: 20 73 79 6d 62 6f 6c 20 28 5c 22 25 5c 22 29 20   symbol (\"%\") 
dfb0: 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74  in the LIKE patt
dfc0: 65 72 6e 20 6d 61 74 63 68 65 73 20 61 6e 79 0a  ern matches any.
dfd0: 73 65 71 75 65 6e 63 65 20 6f 66 20 7a 65 72 6f  sequence of zero
dfe0: 20 6f 72 20 6d 6f 72 65 20 63 68 61 72 61 63 74   or more charact
dff0: 65 72 73 20 69 6e 20 74 68 65 20 73 74 72 69 6e  ers in the strin
e000: 67 2e 20 20 5e 41 6e 20 75 6e 64 65 72 73 63 6f  g.  ^An undersco
e010: 72 65 0a 28 5c 22 5f 5c 22 29 20 69 6e 20 74 68  re.(\"_\") in th
e020: 65 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 6d  e LIKE pattern m
e030: 61 74 63 68 65 73 20 61 6e 79 20 73 69 6e 67 6c  atches any singl
e040: 65 20 63 68 61 72 61 63 74 65 72 20 69 6e 20 74  e character in t
e050: 68 65 0a 73 74 72 69 6e 67 2e 20 20 5e 28 41 6e  he.string.  ^(An
e060: 79 20 6f 74 68 65 72 20 63 68 61 72 61 63 74 65  y other characte
e070: 72 20 6d 61 74 63 68 65 73 20 69 74 73 65 6c 66  r matches itself
e080: 20 6f 72 20 69 74 73 20 6c 6f 77 65 72 2f 75 70   or its lower/up
e090: 70 65 72 20 63 61 73 65 0a 65 71 75 69 76 61 6c  per case.equival
e0a0: 65 6e 74 20 28 69 2e 65 2e 20 63 61 73 65 2d 69  ent (i.e. case-i
e0b0: 6e 73 65 6e 73 69 74 69 76 65 20 6d 61 74 63 68  nsensitive match
e0c0: 69 6e 67 29 2e 29 5e 20 20 28 41 20 62 75 67 3a  ing).)^  (A bug:
e0d0: 20 5e 53 51 4c 69 74 65 20 6f 6e 6c 79 0a 75 6e   ^SQLite only.un
e0e0: 64 65 72 73 74 61 6e 64 73 20 75 70 70 65 72 2f  derstands upper/
e0f0: 6c 6f 77 65 72 20 63 61 73 65 20 66 6f 72 20 41  lower case for A
e100: 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20  SCII characters 
e110: 62 79 20 64 65 66 61 75 6c 74 2e 20 20 5e 54 68  by default.  ^Th
e120: 65 0a 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20  e.LIKE operator 
e130: 69 73 20 63 61 73 65 20 73 65 6e 73 69 74 69 76  is case sensitiv
e140: 65 20 62 79 20 64 65 66 61 75 6c 74 20 66 6f 72  e by default for
e150: 20 75 6e 69 63 6f 64 65 20 63 68 61 72 61 63 74   unicode charact
e160: 65 72 73 20 74 68 61 74 20 61 72 65 0a 62 65 79  ers that are.bey
e170: 6f 6e 64 20 74 68 65 20 41 53 43 49 49 20 72 61  ond the ASCII ra
e180: 6e 67 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  nge.  For exampl
e190: 65 2c 0a 5e 74 68 65 20 65 78 70 72 65 73 73 69  e,.^the expressi
e1a0: 6f 6e 20 3c 62 3e 27 61 27 26 6e 62 73 70 3b 4c  on <b>'a'&nbsp;L
e1b0: 49 4b 45 26 6e 62 73 70 3b 27 41 27 3c 2f 62 3e  IKE&nbsp;'A'</b>
e1c0: 0a 69 73 20 54 52 55 45 20 62 75 74 20 3c 62 3e  .is TRUE but <b>
e1d0: 27 26 61 65 6c 69 67 3b 27 26 6e 62 73 70 3b 4c  '&aelig;'&nbsp;L
e1e0: 49 4b 45 26 6e 62 73 70 3b 27 26 41 45 6c 69 67  IKE&nbsp;'&AElig
e1f0: 3b 27 3c 2f 62 3e 20 69 73 20 46 41 4c 53 45 2e  ;'</b> is FALSE.
e200: 29 3c 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  )<p>"</tcl>..<p>
e210: 5e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c  ^If the optional
e220: 20 45 53 43 41 50 45 20 63 6c 61 75 73 65 20 69   ESCAPE clause i
e230: 73 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20  s present, then 
e240: 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 66  the expression.f
e250: 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 45 53 43  ollowing the ESC
e260: 41 50 45 20 6b 65 79 77 6f 72 64 20 6d 75 73 74  APE keyword must
e270: 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61 20 73   evaluate to a s
e280: 74 72 69 6e 67 20 63 6f 6e 73 69 73 74 69 6e 67  tring consisting
e290: 20 6f 66 0a 61 20 73 69 6e 67 6c 65 20 63 68 61   of.a single cha
e2a0: 72 61 63 74 65 72 2e 20 5e 54 68 69 73 20 63 68  racter. ^This ch
e2b0: 61 72 61 63 74 65 72 20 6d 61 79 20 62 65 20 75  aracter may be u
e2c0: 73 65 64 20 69 6e 20 74 68 65 20 4c 49 4b 45 20  sed in the LIKE 
e2d0: 70 61 74 74 65 72 6e 0a 74 6f 20 69 6e 63 6c 75  pattern.to inclu
e2e0: 64 65 20 6c 69 74 65 72 61 6c 20 70 65 72 63 65  de literal perce
e2f0: 6e 74 20 6f 72 20 75 6e 64 65 72 73 63 6f 72 65  nt or underscore
e300: 20 63 68 61 72 61 63 74 65 72 73 2e 20 5e 54 68   characters. ^Th
e310: 65 20 65 73 63 61 70 65 0a 63 68 61 72 61 63 74  e escape.charact
e320: 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  er followed by a
e330: 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 20   percent symbol 
e340: 28 25 29 2c 20 75 6e 64 65 72 73 63 6f 72 65 20  (%), underscore 
e350: 28 5f 29 2c 20 6f 72 20 61 20 73 65 63 6f 6e 64  (_), or a second
e360: 0a 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65  .instance of the
e370: 20 65 73 63 61 70 65 20 63 68 61 72 61 63 74 65   escape characte
e380: 72 20 69 74 73 65 6c 66 20 6d 61 74 63 68 65 73  r itself matches
e390: 20 61 0a 6c 69 74 65 72 61 6c 20 70 65 72 63 65   a.literal perce
e3a0: 6e 74 20 73 79 6d 62 6f 6c 2c 20 75 6e 64 65 72  nt symbol, under
e3b0: 73 63 6f 72 65 2c 20 6f 72 20 61 20 73 69 6e 67  score, or a sing
e3c0: 6c 65 20 65 73 63 61 70 65 20 63 68 61 72 61 63  le escape charac
e3d0: 74 65 72 2c 0a 72 65 73 70 65 63 74 69 76 65 6c  ter,.respectivel
e3e0: 79 2e 0a 0a 3c 70 3e 5e 54 68 65 20 69 6e 66 69  y...<p>^The infi
e3f0: 78 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20  x LIKE operator 
e400: 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  is implemented b
e410: 79 20 63 61 6c 6c 69 6e 67 20 74 68 65 0a 61 70  y calling the.ap
e420: 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65  plication-define
e430: 64 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20  d SQL functions 
e440: 5b 6c 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c  [like(<i>Y</i>,<
e450: 69 3e 58 3c 2f 69 3e 29 5d 20 6f 72 0a 5b 6c 69  i>X</i>)] or.[li
e460: 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58  ke(<i>Y</i>,<i>X
e470: 3c 2f 69 3e 2c 3c 69 3e 5a 3c 2f 69 3e 29 5d 3c  </i>,<i>Z</i>)]<
e480: 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  /a>.</p>..<p>^Th
e490: 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20  e LIKE operator 
e4a0: 63 61 6e 20 62 65 20 6d 61 64 65 20 63 61 73 65  can be made case
e4b0: 20 73 65 6e 73 69 74 69 76 65 20 75 73 69 6e 67   sensitive using
e4c0: 20 74 68 65 0a 5b 63 61 73 65 5f 73 65 6e 73 69   the.[case_sensi
e4d0: 74 69 76 65 5f 6c 69 6b 65 20 70 72 61 67 6d 61  tive_like pragma
e4e0: 5d 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  ].</p>..<tcl>hd_
e4f0: 66 72 61 67 6d 65 6e 74 20 67 6c 6f 62 20 47 4c  fragment glob GL
e500: 4f 42 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65  OB</tcl>.<p>^The
e510: 20 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72 20 69   GLOB operator i
e520: 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4c 49 4b  s similar to LIK
e530: 45 20 62 75 74 20 75 73 65 73 20 74 68 65 20 55  E but uses the U
e540: 6e 69 78 0a 66 69 6c 65 20 67 6c 6f 62 62 69 6e  nix.file globbin
e550: 67 20 73 79 6e 74 61 78 20 66 6f 72 20 69 74 73  g syntax for its
e560: 20 77 69 6c 64 63 61 72 64 73 2e 20 20 5e 41 6c   wildcards.  ^Al
e570: 73 6f 2c 20 47 4c 4f 42 20 69 73 20 63 61 73 65  so, GLOB is case
e580: 0a 73 65 6e 73 69 74 69 76 65 2c 20 75 6e 6c 69  .sensitive, unli
e590: 6b 65 20 4c 49 4b 45 2e 20 20 5e 42 6f 74 68 20  ke LIKE.  ^Both 
e5a0: 47 4c 4f 42 20 61 6e 64 20 4c 49 4b 45 20 6d 61  GLOB and LIKE ma
e5b0: 79 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79  y be preceded by
e5c0: 0a 74 68 65 20 4e 4f 54 20 6b 65 79 77 6f 72 64  .the NOT keyword
e5d0: 20 74 6f 20 69 6e 76 65 72 74 20 74 68 65 20 73   to invert the s
e5e0: 65 6e 73 65 20 6f 66 20 74 68 65 20 74 65 73 74  ense of the test
e5f0: 2e 20 20 5e 54 68 65 20 69 6e 66 69 78 20 47 4c  .  ^The infix GL
e600: 4f 42 20 0a 6f 70 65 72 61 74 6f 72 20 69 73 20  OB .operator is 
e610: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63  implemented by c
e620: 61 6c 6c 69 6e 67 20 74 68 65 20 66 75 6e 63 74  alling the funct
e630: 69 6f 6e 0a 5b 67 6c 6f 62 28 3c 69 3e 59 3c 2f  ion.[glob(<i>Y</
e640: 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20 61 6e  i>,<i>X</i>)] an
e650: 64 20 63 61 6e 20 62 65 20 6d 6f 64 69 66 69 65  d can be modifie
e660: 64 20 62 79 20 6f 76 65 72 72 69 64 69 6e 67 0a  d by overriding.
e670: 74 68 61 74 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f  that function.</
e680: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
e690: 6d 65 6e 74 20 72 65 67 65 78 70 20 52 45 47 45  ment regexp REGE
e6a0: 58 50 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65  XP</tcl>.<p>^The
e6b0: 20 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72   REGEXP operator
e6c0: 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 73 79   is a special sy
e6d0: 6e 74 61 78 20 66 6f 72 20 74 68 65 20 72 65 67  ntax for the reg
e6e0: 65 78 70 28 29 0a 75 73 65 72 20 66 75 6e 63 74  exp().user funct
e6f0: 69 6f 6e 2e 20 20 5e 4e 6f 20 72 65 67 65 78 70  ion.  ^No regexp
e700: 28 29 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  () user function
e710: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 64   is defined by d
e720: 65 66 61 75 6c 74 0a 61 6e 64 20 73 6f 20 75 73  efault.and so us
e730: 65 20 6f 66 20 74 68 65 20 52 45 47 45 58 50 20  e of the REGEXP 
e740: 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c 20 6e 6f  operator will no
e750: 72 6d 61 6c 6c 79 20 72 65 73 75 6c 74 20 69 6e  rmally result in
e760: 20 61 6e 0a 65 72 72 6f 72 20 6d 65 73 73 61 67   an.error messag
e770: 65 2e 20 20 5e 49 66 20 61 20 5b 61 70 70 6c 69  e.  ^If a [appli
e780: 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53  cation-defined S
e790: 51 4c 20 66 75 6e 63 74 69 6f 6e 5d 20 6e 61 6d  QL function] nam
e7a0: 65 64 20 22 72 65 67 65 78 70 22 0a 69 73 20 61  ed "regexp".is a
e7b0: 64 64 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65  dded at run-time
e7c0: 2c 20 74 68 61 74 20 66 75 6e 63 74 69 6f 6e 20  , that function 
e7d0: 77 69 6c 6c 20 62 65 20 63 61 6c 6c 65 64 20 69  will be called i
e7e0: 6e 20 6f 72 64 65 72 0a 74 6f 20 69 6d 70 6c 65  n order.to imple
e7f0: 6d 65 6e 74 20 74 68 65 20 52 45 47 45 58 50 20  ment the REGEXP 
e800: 6f 70 65 72 61 74 6f 72 2e 3c 2f 70 3e 0a 0a 3c  operator.</p>..<
e810: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
e820: 6d 61 74 63 68 20 4d 41 54 43 48 3c 2f 74 63 6c  match MATCH</tcl
e830: 3e 0a 3c 70 3e 5e 54 68 65 20 4d 41 54 43 48 20  >.<p>^The MATCH 
e840: 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 70  operator is a sp
e850: 65 63 69 61 6c 20 73 79 6e 74 61 78 20 66 6f 72  ecial syntax for
e860: 20 74 68 65 20 6d 61 74 63 68 28 29 0a 61 70 70   the match().app
e870: 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
e880: 20 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 54 68 65   function.  ^The
e890: 20 64 65 66 61 75 6c 74 20 6d 61 74 63 68 28 29   default match()
e8a0: 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d   function implem
e8b0: 65 6e 74 61 74 69 6f 6e 0a 72 61 69 73 65 73 20  entation.raises 
e8c0: 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 61 6e 64  an exception and
e8d0: 20 69 73 20 6e 6f 74 20 72 65 61 6c 6c 79 20 75   is not really u
e8e0: 73 65 66 75 6c 20 66 6f 72 20 61 6e 79 74 68 69  seful for anythi
e8f0: 6e 67 2e 0a 5e 42 75 74 20 65 78 74 65 6e 73 69  ng..^But extensi
e900: 6f 6e 73 20 63 61 6e 20 6f 76 65 72 72 69 64 65  ons can override
e910: 20 74 68 65 20 6d 61 74 63 68 28 29 20 66 75 6e   the match() fun
e920: 63 74 69 6f 6e 20 77 69 74 68 20 6d 6f 72 65 0a  ction with more.
e930: 68 65 6c 70 66 75 6c 20 6c 6f 67 69 63 2e 3c 2f  helpful logic.</
e940: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
e950: 6d 65 6e 74 20 62 65 74 77 65 65 6e 20 42 45 54  ment between BET
e960: 57 45 45 4e 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54  WEEN</tcl>.<h3>T
e970: 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61  he BETWEEN opera
e980: 74 6f 72 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 54 68  tor</h3>.<p>^(Th
e990: 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74  e BETWEEN operat
e9a0: 6f 72 20 69 73 20 6c 6f 67 69 63 61 6c 6c 79 20  or is logically 
e9b0: 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 61 20  equivalent to a 
e9c0: 70 61 69 72 20 6f 66 20 63 6f 6d 70 61 72 69 73  pair of comparis
e9d0: 6f 6e 73 2e 0a 22 3c 69 3e 78 3c 2f 69 3e 20 3c  ons.."<i>x</i> <
e9e0: 62 3e 42 45 54 57 45 45 4e 3c 2f 62 3e 20 3c 69  b>BETWEEN</b> <i
e9f0: 3e 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62  >y</i> <b>AND</b
ea00: 3e 20 3c 69 3e 7a 3c 2f 69 3e 22 20 69 73 20 0a  > <i>z</i>" is .
ea10: 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 0a 22  equivalent to ."
ea20: 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 67 74 3b 3d  <i>x</i><b>&gt;=
ea30: 3c 2f 62 3e 3c 69 3e 79 3c 2f 69 3e 20 3c 62 3e  </b><i>y</i> <b>
ea40: 41 4e 44 3c 2f 62 3e 20 3c 69 3e 78 3c 2f 69 3e  AND</b> <i>x</i>
ea50: 3c 62 3e 26 6c 74 3b 3d 3c 2f 62 3e 3c 69 3e 7a  <b>&lt;=</b><i>z
ea60: 3c 2f 69 3e 22 20 65 78 63 65 70 74 0a 74 68 61  </i>" except.tha
ea70: 74 20 77 69 74 68 20 42 45 54 57 45 45 4e 2c 20  t with BETWEEN, 
ea80: 74 68 65 20 3c 69 3e 78 3c 2f 69 3e 20 65 78 70  the <i>x</i> exp
ea90: 72 65 73 73 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  ression is only 
eaa0: 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 2e 29  evaluated once.)
eab0: 5e 0a 5e 54 68 65 20 70 72 65 63 65 64 65 6e 63  ^.^The precedenc
eac0: 65 20 6f 66 20 74 68 65 20 42 45 54 57 45 45 4e  e of the BETWEEN
ead0: 20 6f 70 65 72 61 74 6f 72 20 69 73 20 74 68 65   operator is the
eae0: 20 73 61 6d 65 20 61 73 20 74 68 65 20 70 72 65   same as the pre
eaf0: 63 65 64 65 6e 63 65 0a 61 73 20 6f 70 65 72 61  cedence.as opera
eb00: 74 6f 72 73 20 3c 62 3e 3d 3d 3c 2f 62 3e 20 61  tors <b>==</b> a
eb10: 6e 64 20 3c 62 3e 21 3d 3c 2f 62 3e 20 61 6e 64  nd <b>!=</b> and
eb20: 20 3c 62 3e 4c 49 4b 45 3c 2f 62 3e 20 61 6e 64   <b>LIKE</b> and
eb30: 20 67 72 6f 75 70 73 20 6c 65 66 74 20 74 6f 20   groups left to 
eb40: 72 69 67 68 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  right...<tcl>hd_
eb50: 66 72 61 67 6d 65 6e 74 20 63 61 73 65 20 7b 43  fragment case {C
eb60: 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 7d 3c  ASE expression}<
eb70: 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 43 41  /tcl>.<h3>The CA
eb80: 53 45 20 65 78 70 72 65 73 73 69 6f 6e 3c 2f 68  SE expression</h
eb90: 33 3e 0a 3c 70 3e 41 20 43 41 53 45 20 65 78 70  3>.<p>A CASE exp
eba0: 72 65 73 73 69 6f 6e 20 73 65 72 76 65 73 20 61  ression serves a
ebb0: 20 72 6f 6c 65 20 73 69 6d 69 6c 61 72 20 74 6f   role similar to
ebc0: 20 49 46 2d 54 48 45 4e 2d 45 4c 53 45 20 69 6e   IF-THEN-ELSE in
ebd0: 20 6f 74 68 65 72 0a 70 72 6f 67 72 61 6d 6d 69   other.programmi
ebe0: 6e 67 20 6c 61 6e 67 75 61 67 65 73 2e 20 20 5e  ng languages.  ^
ebf0: 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 73  WHEN expressions
ec00: 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 20 66   are evaluated f
ec10: 72 6f 6d 20 6c 65 66 74 20 74 6f 0a 72 69 67 68  rom left to.righ
ec20: 74 20 75 6e 74 69 6c 20 6f 6e 65 20 69 73 20 66  t until one is f
ec30: 6f 75 6e 64 20 74 68 61 74 20 69 73 20 74 72 75  ound that is tru
ec40: 65 2c 20 61 74 20 77 68 69 63 68 20 70 6f 69 6e  e, at which poin
ec50: 74 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  t the correspond
ec60: 69 6e 67 0a 54 48 45 4e 20 74 65 72 6d 20 62 65  ing.THEN term be
ec70: 63 6f 6d 65 73 20 74 68 65 20 72 65 73 75 6c 74  comes the result
ec80: 2e 20 20 5e 49 66 20 6e 6f 20 57 48 45 4e 20 65  .  ^If no WHEN e
ec90: 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 72 75  xpression is tru
eca0: 65 20 74 68 65 6e 20 74 68 65 20 45 4c 53 45 20  e then the ELSE 
ecb0: 0a 63 6c 61 75 73 65 20 64 65 74 65 72 6d 69 6e  .clause determin
ecc0: 65 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f 72  es the result or
ecd0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
ece0: 55 4c 4c 20 69 66 20 74 68 65 72 65 20 69 73 20  ULL if there is 
ecf0: 6e 6f 20 45 4c 53 45 20 63 6c 61 73 65 2e 0a 3c  no ELSE clase..<
ed00: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69  /p>..<p>The opti
ed10: 6f 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20  onal expression 
ed20: 74 68 61 74 20 6f 63 63 75 72 73 20 69 6e 20 62  that occurs in b
ed30: 65 74 77 65 65 6e 20 74 68 65 20 43 41 53 45 20  etween the CASE 
ed40: 6b 65 79 77 6f 72 64 20 61 6e 64 20 74 68 65 0a  keyword and the.
ed50: 66 69 72 73 74 20 57 48 45 4e 20 6b 65 79 77 6f  first WHEN keywo
ed60: 72 64 20 69 73 20 74 68 65 20 22 62 61 73 65 22  rd is the "base"
ed70: 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20 5e 54   expression.  ^T
ed80: 68 65 72 65 20 61 72 65 20 74 77 6f 20 62 61 73  here are two bas
ed90: 69 63 20 66 6f 72 6d 73 0a 6f 66 20 61 20 43 41  ic forms.of a CA
eda0: 53 45 20 65 78 70 72 65 73 73 69 6f 6e 3a 20 74  SE expression: t
edb0: 68 6f 73 65 20 77 69 74 68 20 61 6e 64 20 77 69  hose with and wi
edc0: 74 68 6f 75 74 20 61 20 62 61 73 65 20 65 78 70  thout a base exp
edd0: 72 65 73 73 69 6f 6e 2e 0a 5e 49 6e 20 61 20 43  ression..^In a C
ede0: 41 53 45 20 77 69 74 68 6f 75 74 20 61 20 62 61  ASE without a ba
edf0: 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 65  se expression, e
ee00: 61 63 68 20 57 48 45 4e 20 65 78 70 72 65 73 73  ach WHEN express
ee10: 69 6f 6e 20 69 73 20 65 76 61 6c 75 74 65 64 0a  ion is evaluted.
ee20: 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 61 6e 64  as a boolean and
ee30: 20 74 68 65 20 6f 76 65 72 61 6c 6c 20 72 65 73   the overall res
ee40: 75 6c 74 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ult is determine
ee50: 64 20 62 79 20 66 69 72 73 74 20 57 48 45 4e 20  d by first WHEN 
ee60: 65 78 70 72 65 73 73 69 6f 6e 0a 74 68 61 74 20  expression.that 
ee70: 69 73 20 74 72 75 65 2e 0a 5e 49 6e 20 61 20 43  is true..^In a C
ee80: 41 53 45 20 77 69 74 68 20 61 20 62 61 73 65 20  ASE with a base 
ee90: 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20  expression, the 
eea0: 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20  base expression 
eeb0: 69 73 20 65 76 61 6c 75 74 65 64 20 6a 75 73 74  is evaluted just
eec0: 0a 6f 6e 63 65 20 61 6e 64 20 74 68 65 20 72 65  .once and the re
eed0: 73 75 6c 74 20 69 73 20 63 6f 6d 70 61 72 65 64  sult is compared
eee0: 20 61 67 61 69 6e 73 74 20 65 61 63 68 20 57 48   against each WH
eef0: 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 75 6e  EN expression un
ef00: 74 69 6c 20 61 20 0a 6d 61 74 63 68 20 69 73 20  til a .match is 
ef10: 66 6f 75 6e 64 2e 0a 5e 57 68 65 6e 20 63 6f 6d  found..^When com
ef20: 70 61 72 69 6e 67 20 61 20 62 61 73 65 20 65 78  paring a base ex
ef30: 70 72 65 73 73 69 6f 6e 20 61 67 61 69 6e 73 74  pression against
ef40: 20 61 20 57 48 45 4e 20 65 78 70 72 65 73 73 69   a WHEN expressi
ef50: 6f 6e 2c 20 74 68 65 20 73 61 6d 65 0a 63 6f 6c  on, the same.col
ef60: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c  lating sequence,
ef70: 20 61 66 66 69 6e 69 74 79 2c 20 61 6e 64 20 4e   affinity, and N
ef80: 55 4c 4c 2d 68 61 6e 64 6c 69 6e 67 20 72 75 6c  ULL-handling rul
ef90: 65 73 20 61 70 70 6c 79 20 61 73 20 69 66 20 74  es apply as if t
efa0: 68 65 0a 62 61 73 65 20 65 78 70 72 65 73 73 69  he.base expressi
efb0: 6f 6e 20 61 6e 64 20 57 48 45 4e 20 65 78 70 72  on and WHEN expr
efc0: 65 73 73 69 6f 6e 20 61 72 65 20 72 65 73 70 65  ession are respe
efd0: 63 74 69 76 65 6c 79 20 74 68 65 20 6c 65 66 74  ctively the left
efe0: 2d 20 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64  - and.right-hand
eff0: 20 6f 70 65 72 61 6e 64 73 20 6f 66 20 61 6e 20   operands of an 
f000: 3c 62 69 67 3e 3c 62 3e 3d 3c 2f 62 3e 3c 2f 62  <big><b>=</b></b
f010: 69 67 3e 20 6f 70 65 72 61 74 6f 72 2e 3c 2f 70  ig> operator.</p
f020: 3e 0a 0a 3c 70 3e 5e 28 41 73 73 75 6d 69 6e 67  >..<p>^(Assuming
f030: 20 74 68 65 20 73 75 62 65 78 70 72 65 73 73 69   the subexpressi
f040: 6f 6e 73 20 68 61 76 65 20 6e 6f 20 73 69 64 65  ons have no side
f050: 2d 65 66 66 65 63 74 73 2c 20 74 68 65 20 66 6f  -effects, the fo
f060: 6c 6c 6f 77 69 6e 67 0a 74 77 6f 20 65 78 70 72  llowing.two expr
f070: 65 73 73 69 6f 6e 73 20 61 72 65 20 65 71 75 69  essions are equi
f080: 76 61 6c 65 6e 74 3a 3c 2f 70 3e 0a 0a 3c 75 6c  valent:</p>..<ul
f090: 3e 0a 3c 6c 69 3e 43 41 53 45 20 78 20 57 48 45  >.<li>CASE x WHE
f0a0: 4e 20 77 31 20 54 48 45 4e 20 72 31 20 57 48 45  N w1 THEN r1 WHE
f0b0: 4e 20 77 32 20 54 48 45 4e 20 72 32 20 45 4c 53  N w2 THEN r2 ELS
f0c0: 45 20 72 33 20 45 4e 44 0a 3c 6c 69 3e 43 41 53  E r3 END.<li>CAS
f0d0: 45 20 57 48 45 4e 20 78 3d 77 31 20 54 48 45 4e  E WHEN x=w1 THEN
f0e0: 20 72 31 20 57 48 45 4e 20 78 3d 77 32 20 54 48   r1 WHEN x=w2 TH
f0f0: 45 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45 4e  EN r2 ELSE r3 EN
f100: 44 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 5e 54  D.</ul>)^..<p>^T
f110: 68 65 20 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e  he only differen
f120: 63 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 74  ce between the t
f130: 77 6f 20 43 41 53 45 20 65 78 70 72 65 73 73 69  wo CASE expressi
f140: 6f 6e 73 20 73 68 6f 77 6e 20 61 62 6f 76 65 0a  ons shown above.
f150: 69 73 20 74 68 61 74 20 74 68 65 20 3c 69 3e 78  is that the <i>x
f160: 3c 2f 69 3e 20 65 78 70 72 65 73 73 69 6f 6e 20  </i> expression 
f170: 69 73 20 65 76 61 6c 75 61 74 65 64 0a 65 78 61  is evaluated.exa
f180: 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74 68 65  ctly once in the
f190: 20 66 69 72 73 74 20 65 78 61 6d 70 6c 65 20 62   first example b
f1a0: 75 74 20 6d 69 67 68 74 20 62 65 20 65 76 61 6c  ut might be eval
f1b0: 75 61 74 65 64 20 6d 75 6c 74 69 70 6c 65 20 74  uated multiple t
f1c0: 69 6d 65 73 0a 69 6e 20 74 68 65 20 73 65 63 6f  imes.in the seco
f1d0: 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 4e  nd.</p>..<p>^A N
f1e0: 55 4c 4c 20 72 65 73 75 6c 74 20 69 73 20 63 6f  ULL result is co
f1f0: 6e 73 69 64 65 72 65 64 20 66 61 6c 73 65 20 77  nsidered false w
f200: 68 65 6e 20 65 76 61 6c 75 61 74 69 6e 67 20 57  hen evaluating W
f210: 48 45 4e 20 74 65 72 6d 73 2e 0a 5e 49 66 20 74  HEN terms..^If t
f220: 68 65 20 62 61 73 65 20 65 78 70 72 65 73 73 69  he base expressi
f230: 6f 6e 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  on is NULL then 
f240: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
f250: 65 20 43 41 53 45 20 69 73 20 74 68 65 0a 72 65  e CASE is the.re
f260: 73 75 6c 74 20 6f 66 20 74 68 65 20 45 4c 53 45  sult of the ELSE
f270: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 66 20 69   expression if i
f280: 74 20 65 78 69 73 74 73 2c 20 6f 72 20 4e 55 4c  t exists, or NUL
f290: 4c 20 69 66 20 74 68 65 20 45 4c 53 45 20 63 6c  L if the ELSE cl
f2a0: 61 75 73 65 0a 69 73 20 6f 6d 69 74 74 65 64 2e  ause.is omitted.
f2b0: 3c 2f 70 3e 0a 0a 0a 3c 68 33 3e 54 61 62 6c 65  </p>...<h3>Table
f2c0: 20 43 6f 6c 75 6d 6e 20 4e 61 6d 65 73 3c 2f 68   Column Names</h
f2d0: 33 3e 0a 3c 70 3e 5e 41 20 63 6f 6c 75 6d 6e 20  3>.<p>^A column 
f2e0: 6e 61 6d 65 20 63 61 6e 20 62 65 20 61 6e 79 20  name can be any 
f2f0: 6f 66 20 74 68 65 20 6e 61 6d 65 73 20 64 65 66  of the names def
f300: 69 6e 65 64 20 69 6e 20 74 68 65 20 5b 43 52 45  ined in the [CRE
f310: 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74 65  ATE TABLE].state
f320: 6d 65 6e 74 20 6f 72 20 6f 6e 65 20 6f 66 20 74  ment or one of t
f330: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 70 65  he following spe
f340: 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73  cial identifiers
f350: 3a 20 22 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e 22  : "<b>ROWID</b>"
f360: 2c 0a 22 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c 20  ,."<b>OID</b>", 
f370: 6f 72 20 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c 2f  or "<b>_ROWID_</
f380: 62 3e 22 2e 0a 5e 54 68 65 73 65 20 73 70 65 63  b>"..^These spec
f390: 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73 20  ial identifiers 
f3a0: 61 6c 6c 20 64 65 73 63 72 69 62 65 20 74 68 65  all describe the
f3b0: 0a 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20  .unique integer 
f3c0: 6b 65 79 20 28 74 68 65 20 5b 72 6f 77 69 64 5d  key (the [rowid]
f3d0: 29 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  ) associated wit
f3e0: 68 20 65 76 65 72 79 20 0a 72 6f 77 20 6f 66 20  h every .row of 
f3f0: 65 76 65 72 79 20 74 61 62 6c 65 2e 0a 5e 54 68  every table..^Th
f400: 65 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69  e special identi
f410: 66 69 65 72 73 20 6f 6e 6c 79 20 72 65 66 65 72  fiers only refer
f420: 20 74 6f 20 74 68 65 20 72 6f 77 20 6b 65 79 20   to the row key 
f430: 69 66 20 74 68 65 20 5b 43 52 45 41 54 45 20 54  if the [CREATE T
f440: 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20  ABLE].statement 
f450: 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20  does not define 
f460: 61 20 72 65 61 6c 20 63 6f 6c 75 6d 6e 20 77 69  a real column wi
f470: 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  th the same name
f480: 2e 0a 5e 54 68 65 20 72 6f 77 69 64 20 63 61 6e  ..^The rowid can
f490: 20 62 65 20 75 73 65 64 20 61 6e 79 77 68 65 72   be used anywher
f4a0: 65 20 61 20 72 65 67 75 6c 61 72 0a 63 6f 6c 75  e a regular.colu
f4b0: 6d 6e 20 63 61 6e 20 62 65 20 75 73 65 64 2e 3c  mn can be used.<
f4c0: 2f 70 3e 0a 0a 3c 68 33 3e 53 75 62 71 75 65 72  /p>..<h3>Subquer
f4d0: 69 65 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 5b 53 45  ies</h3>.<p>^[SE
f4e0: 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 73  LECT] statements
f4f0: 20 63 61 6e 20 61 70 70 65 61 72 20 69 6e 20 65   can appear in e
f500: 78 70 72 65 73 73 69 6f 6e 73 20 61 73 20 65 69  xpressions as ei
f510: 74 68 65 72 20 74 68 65 0a 72 69 67 68 74 2d 68  ther the.right-h
f520: 61 6e 64 20 6f 70 65 72 61 6e 64 20 6f 66 20 74  and operand of t
f530: 68 65 20 49 4e 20 6f 70 65 72 61 74 6f 72 2c 20  he IN operator, 
f540: 61 73 20 61 20 73 63 61 6c 61 72 20 71 75 61 6e  as a scalar quan
f550: 74 69 74 79 2c 20 6f 72 0a 61 73 20 74 68 65 20  tity, or.as the 
f560: 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 45 58  operand of an EX
f570: 49 53 54 53 20 6f 70 65 72 61 74 6f 72 2e 0a 5e  ISTS operator..^
f580: 41 73 20 61 20 73 63 61 6c 61 72 20 71 75 61 6e  As a scalar quan
f590: 74 69 74 79 20 6f 72 20 74 68 65 20 6f 70 65 72  tity or the oper
f5a0: 61 6e 64 20 6f 66 20 61 6e 20 49 4e 20 6f 70 65  and of an IN ope
f5b0: 72 61 74 6f 72 2c 0a 74 68 65 20 53 45 4c 45 43  rator,.the SELEC
f5c0: 54 20 73 68 6f 75 6c 64 20 68 61 76 65 20 6f 6e  T should have on
f5d0: 6c 79 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  ly a single colu
f5e0: 6d 6e 20 69 6e 20 69 74 73 0a 72 65 73 75 6c 74  mn in its.result
f5f0: 2e 20 20 5e 43 6f 6d 70 6f 75 6e 64 20 53 45 4c  .  ^Compound SEL
f600: 45 43 54 73 20 28 63 6f 6e 6e 65 63 74 65 64 20  ECTs (connected 
f610: 77 69 74 68 20 6b 65 79 77 6f 72 64 73 20 6c 69  with keywords li
f620: 6b 65 20 55 4e 49 4f 4e 20 6f 72 0a 45 58 43 45  ke UNION or.EXCE
f630: 50 54 29 20 61 72 65 20 61 6c 6c 6f 77 65 64 2e  PT) are allowed.
f640: 0a 5e 57 69 74 68 20 74 68 65 20 45 58 49 53 54  .^With the EXIST
f650: 53 20 6f 70 65 72 61 74 6f 72 2c 20 74 68 65 20  S operator, the 
f660: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72  columns in the r
f670: 65 73 75 6c 74 20 73 65 74 20 6f 66 20 74 68 65  esult set of the
f680: 20 5b 53 45 4c 45 43 54 5d 20 61 72 65 0a 69 67   [SELECT] are.ig
f690: 6e 6f 72 65 64 20 61 6e 64 20 74 68 65 20 65 78  nored and the ex
f6a0: 70 72 65 73 73 69 6f 6e 20 72 65 74 75 72 6e 73  pression returns
f6b0: 20 54 52 55 45 20 69 66 20 6f 6e 65 20 6f 72 20   TRUE if one or 
f6c0: 6d 6f 72 65 20 72 6f 77 73 20 65 78 69 73 74 0a  more rows exist.
f6d0: 61 6e 64 20 46 41 4c 53 45 20 69 66 20 74 68 65  and FALSE if the
f6e0: 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
f6f0: 6d 70 74 79 2e 0a 5e 49 66 20 6e 6f 20 74 65 72  mpty..^If no ter
f700: 6d 73 20 69 6e 20 74 68 65 20 5b 53 45 4c 45 43  ms in the [SELEC
f710: 54 5d 20 65 78 70 72 65 73 73 69 6f 6e 20 72 65  T] expression re
f720: 66 65 72 20 74 6f 20 76 61 6c 75 65 73 20 69 6e  fer to values in
f730: 20 74 68 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0a   the containing.
f740: 71 75 65 72 79 2c 20 74 68 65 6e 20 74 68 65 20  query, then the 
f750: 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76  expression is ev
f760: 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 70 72 69  aluated once pri
f770: 6f 72 20 74 6f 20 61 6e 79 20 6f 74 68 65 72 0a  or to any other.
f780: 70 72 6f 63 65 73 73 69 6e 67 20 61 6e 64 20 74  processing and t
f790: 68 65 20 72 65 73 75 6c 74 20 69 73 20 72 65 75  he result is reu
f7a0: 73 65 64 20 61 73 20 6e 65 63 65 73 73 61 72 79  sed as necessary
f7b0: 2e 20 20 5e 49 66 20 74 68 65 20 5b 53 45 4c 45  .  ^If the [SELE
f7c0: 43 54 5d 20 65 78 70 72 65 73 73 69 6f 6e 0a 64  CT] expression.d
f7d0: 6f 65 73 20 63 6f 6e 74 61 69 6e 20 76 61 72 69  oes contain vari
f7e0: 61 62 6c 65 73 20 66 72 6f 6d 20 74 68 65 20 6f  ables from the o
f7f0: 75 74 65 72 20 71 75 65 72 79 2c 20 74 68 65 6e  uter query, then
f800: 20 74 68 65 20 5b 53 45 4c 45 43 54 5d 20 69 73   the [SELECT] is
f810: 20 72 65 65 76 61 6c 75 61 74 65 64 0a 65 76 65   reevaluated.eve
f820: 72 79 20 74 69 6d 65 20 69 74 20 69 73 20 6e 65  ry time it is ne
f830: 65 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57  eded.</p>..<p>^W
f840: 68 65 6e 20 61 20 53 45 4c 45 43 54 20 69 73 20  hen a SELECT is 
f850: 74 68 65 20 72 69 67 68 74 20 6f 70 65 72 61 6e  the right operan
f860: 64 20 6f 66 20 74 68 65 20 49 4e 20 6f 70 65 72  d of the IN oper
f870: 61 74 6f 72 2c 20 74 68 65 20 49 4e 0a 6f 70 65  ator, the IN.ope
f880: 72 61 74 6f 72 20 72 65 74 75 72 6e 73 20 54 52  rator returns TR
f890: 55 45 20 69 66 20 74 68 65 20 53 45 4c 45 43 54  UE if the SELECT
f8a0: 20 72 65 73 75 6c 74 20 63 6f 6e 74 61 69 6e 73   result contains
f8b0: 20 6e 6f 20 4e 55 4c 4c 73 20 61 6e 64 20 69 66   no NULLs and if
f8c0: 0a 74 68 65 20 6c 65 66 74 20 6f 70 65 72 61 6e  .the left operan
f8d0: 64 20 6d 61 74 63 68 65 73 20 61 6e 79 20 6f 66  d matches any of
f8e0: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 74   the values in t
f8f0: 68 65 20 53 45 4c 45 43 54 20 72 65 73 75 6c 74  he SELECT result
f900: 2e 0a 5e 54 68 65 20 49 4e 20 6f 70 65 72 61 74  ..^The IN operat
f910: 6f 72 20 6d 61 79 20 62 65 20 70 72 65 63 65 64  or may be preced
f920: 65 64 0a 62 79 20 74 68 65 20 4e 4f 54 20 6b 65  ed.by the NOT ke
f930: 79 77 6f 72 64 20 74 6f 20 69 6e 76 65 72 74 20  yword to invert 
f940: 74 68 65 20 73 65 6e 73 65 20 6f 66 20 74 68 65  the sense of the
f950: 20 74 65 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   test.</p>..<p>^
f960: 57 68 65 6e 20 61 20 53 45 4c 45 43 54 20 61 70  When a SELECT ap
f970: 70 65 61 72 73 20 77 69 74 68 69 6e 20 61 6e 20  pears within an 
f980: 65 78 70 72 65 73 73 69 6f 6e 20 62 75 74 20 69  expression but i
f990: 73 20 6e 6f 74 20 74 68 65 20 72 69 67 68 74 0a  s not the right.
f9a0: 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e  operand of an IN
f9b0: 20 6f 70 65 72 61 74 6f 72 2c 20 74 68 65 6e 20   operator, then 
f9c0: 74 68 65 20 66 69 72 73 74 20 72 6f 77 20 6f 66  the first row of
f9d0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
f9e0: 68 65 0a 53 45 4c 45 43 54 20 62 65 63 6f 6d 65  he.SELECT become
f9f0: 73 20 74 68 65 20 76 61 6c 75 65 20 75 73 65 64  s the value used
fa00: 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69   in the expressi
fa10: 6f 6e 2e 20 20 5e 49 66 20 74 68 65 20 53 45 4c  on.  ^If the SEL
fa20: 45 43 54 20 79 69 65 6c 64 73 0a 6d 6f 72 65 20  ECT yields.more 
fa30: 74 68 61 6e 20 6f 6e 65 20 72 65 73 75 6c 74 20  than one result 
fa40: 72 6f 77 2c 20 61 6c 6c 20 72 6f 77 73 20 61 66  row, all rows af
fa50: 74 65 72 20 74 68 65 20 66 69 72 73 74 20 61 72  ter the first ar
fa60: 65 20 69 67 6e 6f 72 65 64 2e 20 20 5e 49 66 0a  e ignored.  ^If.
fa70: 74 68 65 20 53 45 4c 45 43 54 20 79 69 65 6c 64  the SELECT yield
fa80: 73 20 6e 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20  s no rows, then 
fa90: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
faa0: 20 53 45 4c 45 43 54 20 69 73 20 4e 55 4c 4c 2e   SELECT is NULL.
fab0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
fac0: 61 67 6d 65 6e 74 20 63 61 73 74 65 78 70 72 20  agment castexpr 
fad0: 7b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e  {CAST expression
fae0: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 41 53 54  }</tcl>.<h3>CAST
faf0: 20 65 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33   expressions</h3
fb00: 3e 0a 0a 3c 70 3e 5e 41 20 43 41 53 54 20 65 78  >..<p>^A CAST ex
fb10: 70 72 65 73 73 69 6f 6e 20 63 68 61 6e 67 65 73  pression changes
fb20: 20 74 68 65 20 5b 64 61 74 61 74 79 70 65 5d 20   the [datatype] 
fb30: 6f 66 20 74 68 65 20 3c 65 78 70 72 3e 20 69 6e  of the <expr> in
fb40: 74 6f 20 74 68 65 0a 74 79 70 65 20 73 70 65 63  to the.type spec
fb50: 69 66 69 65 64 20 62 79 20 26 6c 74 3b 74 79 70  ified by &lt;typ
fb60: 65 26 67 74 3b 2e 20 0a 5e 28 26 6c 74 3b 74 79  e&gt;. .^(&lt;ty
fb70: 70 65 26 67 74 3b 20 63 61 6e 20 62 65 20 61 6e  pe&gt; can be an
fb80: 79 20 6e 6f 6e 2d 65 6d 70 74 79 20 74 79 70 65  y non-empty type
fb90: 20 6e 61 6d 65 20 74 68 61 74 20 69 73 20 76 61   name that is va
fba0: 6c 69 64 0a 66 6f 72 20 74 68 65 20 74 79 70 65  lid.for the type
fbb0: 20 69 6e 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66   in a column def
fbc0: 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 5b 43 52  inition of a [CR
fbd0: 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74  EATE TABLE] stat
fbe0: 65 6d 65 6e 74 2e 29 5e 0a 5e 54 68 65 20 26 6c  ement.)^.^The &l
fbf0: 74 3b 74 79 70 65 26 67 74 3b 20 6e 61 6d 65 20  t;type&gt; name 
fc00: 69 73 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  is interpreted a
fc10: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20  ccording to the 
fc20: 0a 5b 72 75 6c 65 73 20 66 6f 72 20 64 65 74 65  .[rules for dete
fc30: 72 6d 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 20 61  rmining column a
fc40: 66 66 69 6e 69 74 79 5d 2e 0a 0a 3c 70 3e 5e 41  ffinity]...<p>^A
fc50: 6e 20 65 78 70 6c 69 63 69 74 20 63 61 73 74 20  n explicit cast 
fc60: 69 73 20 73 74 72 6f 6e 67 20 74 68 61 6e 20 61  is strong than a
fc70: 66 66 69 6e 69 74 79 3b 20 77 69 74 68 20 74 68  ffinity; with th
fc80: 65 20 43 41 53 54 20 65 78 70 72 65 73 73 69 6f  e CAST expressio
fc90: 6e 0a 74 68 65 20 64 61 74 61 74 79 70 65 20 63  n.the datatype c
fca0: 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 66 6f 72  onversion is for
fcb0: 63 65 64 20 65 76 65 6e 20 69 66 20 69 74 20 69  ced even if it i
fcc0: 73 20 6c 6f 73 73 79 20 61 6e 64 20 69 72 72 72  s lossy and irrr
fcd0: 65 76 65 72 73 69 62 6c 65 2e 0a 3c 75 6c 3e 0a  eversible..<ul>.
fce0: 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 41 20 63 61 73  <li><p>.  ^A cas
fcf0: 74 20 6f 66 20 61 20 52 45 41 4c 20 76 61 6c 75  t of a REAL valu
fd00: 65 20 69 6e 74 6f 20 61 6e 20 49 4e 54 45 47 45  e into an INTEGE
fd10: 52 20 77 69 6c 6c 20 74 72 75 6e 63 61 74 65 20  R will truncate 
fd20: 74 68 65 0a 20 20 66 72 61 63 74 69 6f 6e 61 6c  the.  fractional
fd30: 20 70 61 72 74 20 6f 66 20 74 68 65 20 52 45 41   part of the REA
fd40: 4c 2e 20 20 5e 49 66 20 61 6e 20 52 45 41 4c 20  L.  ^If an REAL 
fd50: 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20  is too large to 
fd60: 62 65 0a 20 20 72 65 70 72 65 73 65 6e 74 65 64  be.  represented
fd70: 20 61 73 20 61 6e 20 49 4e 54 45 47 45 52 20 74   as an INTEGER t
fd80: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
fd90: 66 20 74 68 65 20 63 61 73 74 20 69 73 0a 20 20  f the cast is.  
fda0: 74 68 65 20 6c 61 72 67 65 73 74 20 6e 65 67 61  the largest nega
fdb0: 74 69 76 65 20 69 6e 74 65 67 65 72 3a 20 2d 39  tive integer: -9
fdc0: 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
fdd0: 30 38 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 5e 41  08...<li><p>. ^A
fde0: 20 63 61 73 74 20 6f 66 20 61 20 54 45 58 54 20   cast of a TEXT 
fdf0: 76 61 6c 75 65 20 69 6e 74 6f 20 61 6e 20 49 4e  value into an IN
fe00: 54 45 47 45 52 20 6f 72 20 52 45 41 4c 20 77 69  TEGER or REAL wi
fe10: 6c 6c 20 72 65 61 64 20 61 20 70 72 65 66 69 78  ll read a prefix
fe20: 0a 20 6f 66 20 74 68 65 20 54 45 58 54 20 76 61  . of the TEXT va
fe30: 6c 75 65 20 74 68 61 74 20 6c 6f 6f 6b 73 20 6c  lue that looks l
fe40: 69 6b 65 20 61 6e 20 69 6e 74 65 67 65 72 20 6f  ike an integer o
fe50: 72 20 72 65 61 6c 20 76 61 6c 75 65 2c 20 72 65  r real value, re
fe60: 73 70 65 63 74 69 76 65 6c 79 2c 0a 20 61 6e 64  spectively,. and
fe70: 20 69 67 6e 6f 72 65 20 74 68 65 20 72 65 73 74   ignore the rest
fe80: 2e 20 20 5e 57 68 65 6e 20 63 61 73 74 69 6e 67  .  ^When casting
fe90: 20 66 72 6f 6d 20 54 45 58 54 20 69 6e 74 6f 20   from TEXT into 
fea0: 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c 2c  INTEGER or REAL,
feb0: 0a 20 6c 65 61 64 69 6e 67 20 73 70 61 63 65 73  . leading spaces
fec0: 20 69 6e 20 74 68 65 20 54 45 58 54 20 76 61 6c   in the TEXT val
fed0: 75 65 20 61 72 65 20 69 67 6e 6f 72 65 64 2e 20  ue are ignored. 
fee0: 20 5e 28 41 20 63 61 73 74 20 6f 66 20 61 20 54   ^(A cast of a T
fef0: 45 58 54 20 76 61 6c 75 65 0a 20 74 68 61 74 20  EXT value. that 
ff00: 6c 6f 6f 6b 73 20 6e 6f 74 68 69 6e 67 20 6c 69  looks nothing li
ff10: 6b 65 20 61 20 6e 75 6d 62 65 72 20 69 6e 74 6f  ke a number into
ff20: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
ff30: 20 72 65 73 75 6c 74 73 20 69 6e 20 30 20 6f 72   results in 0 or
ff40: 20 30 2e 30 2c 0a 20 72 65 73 70 65 63 74 69 76   0.0,. respectiv
ff50: 65 6c 79 2e 29 5e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ely.)^..<li><p>.
ff60: 20 5e 43 61 73 74 69 6e 67 20 61 20 76 61 6c 75   ^Casting a valu
ff70: 65 20 69 6e 74 6f 20 4e 55 4d 45 52 49 43 20 66  e into NUMERIC f
ff80: 69 72 73 74 20 64 6f 65 73 20 61 20 66 6f 72 63  irst does a forc
ff90: 65 64 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 6e  ed conversion in
ffa0: 74 6f 20 52 45 41 4c 0a 20 20 62 75 74 20 77 69  to REAL.  but wi
ffb0: 6c 6c 20 74 68 65 6e 20 66 75 72 74 68 65 72 20  ll then further 
ffc0: 63 6f 6e 76 65 72 74 73 20 74 68 65 20 72 65 73  converts the res
ffd0: 75 6c 74 20 69 6e 74 6f 20 49 4e 54 45 47 45 52  ult into INTEGER
ffe0: 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a   if and only if.
fff0: 20 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e    the conversion
10000 20 66 72 6f 6d 20 52 45 41 4c 20 74 6f 20 49 4e   from REAL to IN
10010 54 45 47 45 52 20 69 73 20 6c 6f 73 73 6c 65 73  TEGER is lossles
10020 73 20 61 6e 64 20 72 65 76 65 72 73 69 62 6c 65  s and reversible
10030 2e 0a 20 20 54 68 69 73 20 69 73 20 74 68 65 20  ..  This is the 
10040 6f 6e 6c 79 20 63 6f 6e 74 65 78 74 20 69 6e 20  only context in 
10050 53 51 4c 69 74 65 20 77 68 65 72 65 20 74 68 65  SQLite where the
10060 20 4e 55 4d 45 52 49 43 20 61 6e 64 20 49 4e 54   NUMERIC and INT
10070 45 47 45 52 0a 20 20 5b 61 66 66 69 6e 69 74 69  EGER.  [affiniti
10080 65 73 5d 20 62 65 68 61 76 65 20 64 69 66 66 65  es] behave diffe
10090 72 65 6e 74 6c 79 2e 0a 0a 3c 6c 69 3e 3c 70 3e  rently...<li><p>
100a0 0a 20 5e 43 61 73 74 69 6e 67 20 61 20 76 61 6c  . ^Casting a val
100b0 75 65 20 69 6e 74 6f 20 54 45 58 54 20 72 65 6e  ue into TEXT ren
100c0 64 65 72 73 20 74 68 65 20 76 61 6c 75 65 20 61  ders the value a
100d0 73 20 69 66 20 76 69 61 20 5b 73 71 6c 69 74 65  s if via [sqlite
100e0 33 5f 73 6e 70 72 69 6e 74 66 28 29 5d 0a 20 20  3_snprintf()].  
100f0 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
10100 72 65 73 75 6c 74 69 6e 67 20 54 45 58 54 20 75  resulting TEXT u
10110 73 65 73 20 74 68 65 20 5b 65 6e 63 6f 64 69 6e  ses the [encodin
10120 67 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  g] of the databa
10130 73 65 0a 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  se.  connection.
10140 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 5e 43 61 73 74  ..<li><p>. ^Cast
10150 69 6e 67 20 61 20 76 61 6c 75 65 20 74 6f 20 61  ing a value to a
10160 20 26 6c 74 3b 74 79 70 65 26 67 74 3b 20 77 69   &lt;type&gt; wi
10170 74 68 20 6e 6f 20 61 66 66 69 6e 69 74 79 20 63  th no affinity c
10180 61 75 73 65 73 20 74 68 65 20 76 61 6c 75 65 20  auses the value 
10190 74 6f 0a 20 20 62 65 20 63 6f 6e 76 65 72 74 65  to.  be converte
101a0 64 20 69 6e 74 6f 20 61 20 42 4c 4f 42 2e 20 20  d into a BLOB.  
101b0 5e 43 61 73 74 69 6e 67 20 74 6f 20 61 20 42 4c  ^Casting to a BL
101c0 4f 42 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 66  OB consists of f
101d0 69 72 73 74 20 63 61 73 74 69 6e 67 0a 20 20 74  irst casting.  t
101e0 68 65 20 76 61 6c 75 65 20 74 6f 20 54 45 58 54  he value to TEXT
101f0 20 69 6e 20 74 68 65 20 5b 65 6e 63 6f 64 69 6e   in the [encodin
10200 67 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  g] of the databa
10210 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74  se connection, t
10220 68 65 6e 0a 20 20 69 6e 74 65 72 70 72 65 74 69  hen.  interpreti
10230 6e 67 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67  ng the resulting
10240 20 62 79 74 65 20 73 65 71 75 65 6e 63 65 20 61   byte sequence a
10250 73 20 61 20 42 4c 4f 42 20 69 6e 73 74 65 61 64  s a BLOB instead
10260 20 6f 66 20 61 73 20 54 45 58 54 2e 0a 0a 3c 6c   of as TEXT...<l
10270 69 3e 3c 70 3e 0a 20 5e 43 61 73 74 69 6e 67 20  i><p>. ^Casting 
10280 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74  a BLOB value int
10290 6f 20 61 6e 79 20 74 79 70 65 20 6f 74 68 65 72  o any type other
102a0 20 74 68 61 6e 20 61 20 42 4c 4f 42 20 63 6f 6e   than a BLOB con
102b0 73 69 73 74 73 20 6f 66 20 66 69 72 73 74 0a 20  sists of first. 
102c0 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20 74 68   interpreting th
102d0 65 20 62 79 74 65 20 73 65 71 75 65 6e 63 65 20  e byte sequence 
102e0 6f 66 20 74 68 65 20 42 4c 4f 42 20 61 73 20 61  of the BLOB as a
102f0 20 54 45 58 54 20 73 74 72 69 6e 67 20 69 6e 20   TEXT string in 
10300 74 68 65 0a 20 20 64 61 74 61 62 61 73 65 20 65  the.  database e
10310 6e 63 6f 64 69 6e 67 20 74 68 65 6e 20 63 6f 6e  ncoding then con
10320 74 69 6e 75 69 6e 67 20 61 73 20 69 66 20 74 68  tinuing as if th
10330 65 20 76 61 6c 75 65 20 77 68 65 72 65 20 6f 72  e value where or
10340 69 67 69 6e 61 6c 6c 79 20 6f 66 0a 20 20 74 79  iginally of.  ty
10350 70 65 20 54 45 58 54 2e 0a 0a 3c 6c 69 3e 3c 70  pe TEXT...<li><p
10360 3e 0a 20 5e 41 6e 79 20 63 61 73 74 20 6f 66 20  >. ^Any cast of 
10370 61 20 4e 55 4c 4c 20 76 61 6c 75 65 20 79 69 65  a NULL value yie
10380 6c 64 73 20 61 20 4e 55 4c 4c 20 72 65 73 75 6c  lds a NULL resul
10390 74 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 4e 6f  t..</ul>..<p>^No
103a0 74 65 20 74 68 61 74 20 74 68 65 20 72 65 73 75  te that the resu
103b0 6c 74 20 66 72 6f 6d 20 63 61 73 74 69 6e 67 20  lt from casting 
103c0 61 6e 79 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c  any non-BLOB val
103d0 75 65 20 69 6e 74 6f 20 61 20 0a 42 4c 4f 42 20  ue into a .BLOB 
103e0 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 66  and the result f
103f0 72 6f 6d 20 63 61 73 74 69 6e 67 20 61 6e 79 20  rom casting any 
10400 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f 20  BLOB value into 
10410 61 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75 65  a non-BLOB value
10420 0a 77 69 6c 6c 20 62 65 20 64 69 66 66 65 72 65  .will be differe
10430 6e 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  nt depending on 
10440 77 68 65 74 68 65 72 20 74 68 65 20 64 61 74 61  whether the data
10450 62 61 73 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20  base [encoding] 
10460 69 73 20 55 54 46 2d 38 2c 0a 55 54 46 2d 31 36  is UTF-8,.UTF-16
10470 62 65 2c 20 6f 72 20 55 54 46 2d 31 36 6c 65 2e  be, or UTF-16le.
10480 0a 0a 3c 68 33 3e 46 75 6e 63 74 69 6f 6e 73 3c  ..<h3>Functions<
10490 2f 68 33 3e 0a 3c 70 3e 5e 42 6f 74 68 20 5b 63  /h3>.<p>^Both [c
104a0 6f 72 65 66 75 6e 63 7c 73 69 6d 70 6c 65 5d 20  orefunc|simple] 
104b0 61 6e 64 20 5b 61 67 67 66 75 6e 63 7c 61 67 67  and [aggfunc|agg
104c0 72 65 67 61 74 65 5d 20 66 75 6e 63 74 69 6f 6e  regate] function
104d0 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 2e  s are supported.
104e0 0a 28 46 6f 72 20 70 72 65 73 65 6e 74 61 74 69  .(For presentati
104f0 6f 6e 20 70 75 72 70 6f 73 65 73 2c 20 73 69 6d  on purposes, sim
10500 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  ple functions ar
10510 65 20 66 75 72 74 68 65 72 20 73 75 62 64 69 76  e further subdiv
10520 69 64 65 64 20 69 6e 74 6f 0a 5b 63 6f 72 65 66  ided into.[coref
10530 75 6e 63 20 7c 20 63 6f 72 65 20 66 75 6e 63 74  unc | core funct
10540 69 6f 6e 73 5d 20 61 6e 64 20 5b 64 61 74 65 66  ions] and [datef
10550 75 6e 63 20 7c 20 64 61 74 65 2d 74 69 6d 65 20  unc | date-time 
10560 66 75 6e 63 74 69 6f 6e 73 5d 2e 29 0a 5e 41 20  functions].).^A 
10570 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20  simple function 
10580 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 61  can be used in a
10590 6e 79 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20  ny expression.  
105a0 5e 53 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e  ^Simple function
105b0 73 20 72 65 74 75 72 6e 0a 61 20 72 65 73 75 6c  s return.a resul
105c0 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 62 61  t immediately ba
105d0 73 65 64 20 6f 6e 20 74 68 65 69 72 20 69 6e 70  sed on their inp
105e0 75 74 73 2e 20 20 5e 41 67 67 72 65 67 61 74 65  uts.  ^Aggregate
105f0 20 66 75 6e 63 74 69 6f 6e 73 0a 6d 61 79 20 6f   functions.may o
10600 6e 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20 61  nly be used in a
10610 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
10620 74 2e 20 20 5e 41 67 67 72 65 67 61 74 65 20 66  t.  ^Aggregate f
10630 75 6e 63 74 69 6f 6e 73 20 63 6f 6d 70 75 74 65  unctions compute
10640 0a 74 68 65 69 72 20 72 65 73 75 6c 74 20 61 63  .their result ac
10650 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 6f 66  ross all rows of
10660 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e   the result set.
10670 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
10680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10690 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
106a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
106b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
106c0 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
106d0 6f 6e 20 7b 43 6f 72 65 20 46 75 6e 63 74 69 6f  on {Core Functio
106e0 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 7b 2a 63  ns} corefunc {*c
106f0 6f 72 65 66 75 6e 63 7d 0a 70 72 6f 63 20 66 75  orefunc}.proc fu
10700 6e 63 64 65 66 20 7b 73 79 6e 74 61 78 20 6b 65  ncdef {syntax ke
10710 79 77 6f 72 64 73 20 64 65 73 63 7d 20 7b 0a 20  ywords desc} {. 
10720 20 68 64 5f 70 75 74 73 20 7b 3c 74 72 3e 7d 0a   hd_puts {<tr>}.
10730 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c    regsub -all {\
10740 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d  s+} [string trim
10750 20 24 73 79 6e 74 61 78 5d 20 7b 3c 62 72 3e 3c   $syntax] {<br><
10760 2f 62 72 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72  /br>} syntax.  r
10770 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 28 28 5b  egsub -all {\(([
10780 5e 2a 29 5d 2b 29 5c 29 7d 20 24 73 79 6e 74 61  ^*)]+)\)} $synta
10790 78 20 7b 28 3c 69 3e 5c 31 3c 2f 69 3e 29 7d 20  x {(<i>\1</i>)} 
107a0 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20  syntax.  regsub 
107b0 2d 61 6c 6c 20 7b 2c 7d 20 24 73 79 6e 74 61 78  -all {,} $syntax
107c0 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20 73 79 6e 74   {</i>,<i>} synt
107d0 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  ax.  regsub -all
107e0 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d   {<i>\.\.\.</i>}
107f0 20 24 73 79 6e 74 61 78 20 7b 2e 2e 2e 7d 20 73   $syntax {...} s
10800 79 6e 74 61 78 0a 20 20 68 64 5f 70 75 74 73 20  yntax.  hd_puts 
10810 22 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f  "<td valign=\"to
10820 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 72 69 67 68  p\" align=\"righ
10830 74 5c 22 20 77 69 64 74 68 3d 5c 22 31 32 30 5c  t\" width=\"120\
10840 22 3e 22 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e 67  ">".  if {[lleng
10850 74 68 20 24 6b 65 79 77 6f 72 64 73 5d 3d 3d 30  th $keywords]==0
10860 7d 20 7b 0a 20 20 20 20 72 65 67 65 78 70 20 7b  } {.    regexp {
10870 5b 61 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61 78  [a-z_]+} $syntax
10880 20 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61   name.    hd_fra
10890 67 6d 65 6e 74 20 24 6e 61 6d 65 20 2a 24 6e 61  gment $name *$na
108a0 6d 65 20 22 24 7b 6e 61 6d 65 7d 28 29 20 53 51  me "${name}() SQ
108b0 4c 20 66 75 6e 63 74 69 6f 6e 22 0a 20 20 7d 20  L function".  } 
108c0 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 66  else {.    set f
108d0 72 61 67 6e 61 6d 65 20 5b 6c 69 6e 64 65 78 20  ragname [lindex 
108e0 24 6b 65 79 77 6f 72 64 73 20 30 5d 0a 20 20 20  $keywords 0].   
108f0 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e   regsub -all {[^
10900 61 2d 7a 5d 7d 20 24 66 72 61 67 6e 61 6d 65 20  a-z]} $fragname 
10910 7b 7d 20 66 72 61 67 6e 61 6d 65 0a 20 20 20 20  {} fragname.    
10920 68 64 5f 66 72 61 67 6d 65 6e 74 20 24 66 72 61  hd_fragment $fra
10930 67 6e 61 6d 65 0a 20 20 20 20 65 76 61 6c 20 68  gname.    eval h
10940 64 5f 6b 65 79 77 6f 72 64 73 20 5b 73 74 72 69  d_keywords [stri
10950 6e 67 20 6d 61 70 20 7b 5c 6e 20 7b 20 7d 7d 20  ng map {\n { }} 
10960 24 6b 65 79 77 6f 72 64 73 5d 0a 20 20 7d 0a 20  $keywords].  }. 
10970 20 68 64 5f 70 75 74 73 20 22 24 73 79 6e 74 61   hd_puts "$synta
10980 78 3c 2f 74 64 3e 22 0a 20 20 68 64 5f 70 75 74  x</td>".  hd_put
10990 73 20 7b 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  s {<td valign="t
109a0 6f 70 22 3e 7d 0a 20 20 68 64 5f 72 65 73 6f 6c  op">}.  hd_resol
109b0 76 65 20 24 64 65 73 63 0a 20 20 68 64 5f 70 75  ve $desc.  hd_pu
109c0 74 73 20 7b 3c 2f 74 64 3e 3c 2f 74 72 3e 7d 0a  ts {</td></tr>}.
109d0 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  }.</tcl>..<p>The
109e0 20 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 20   core functions 
109f0 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65 20  shown below are 
10a00 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66  available by def
10a10 61 75 6c 74 2e 20 0a 5b 64 61 74 65 66 75 6e 63  ault. .[datefunc
10a20 20 7c 20 44 61 74 65 20 26 61 6d 70 3b 20 54 69   | Date &amp; Ti
10a30 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 6e  me functions] an
10a40 64 0a 5b 61 67 67 66 75 6e 63 20 7c 20 61 67 67  d.[aggfunc | agg
10a50 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
10a60 5d 20 61 72 65 20 64 6f 63 75 6d 65 6e 74 65 64  ] are documented
10a70 20 73 65 70 61 72 61 74 65 6c 79 2e 20 20 41 6e   separately.  An
10a80 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d 61 79  .application may
10a90 20 64 65 66 69 6e 65 20 61 64 64 69 74 69 6f 6e   define addition
10aa0 61 6c 0a 66 75 6e 63 74 69 6f 6e 73 20 77 72 69  al.functions wri
10ab0 74 74 65 6e 20 69 6e 20 43 20 61 6e 64 20 61 64  tten in C and ad
10ac0 64 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62  ded to the datab
10ad0 61 73 65 20 65 6e 67 69 6e 65 20 75 73 69 6e 67  ase engine using
10ae0 0a 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72  .the [sqlite3_cr
10af0 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d  eate_function()]
10b00 20 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 74 61 62 6c   API.</p>..<tabl
10b10 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70  e border=0 cellp
10b20 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c 3e  adding=10>.<tcl>
10b30 0a 66 75 6e 63 64 65 66 20 7b 61 62 73 28 58 29  .funcdef {abs(X)
10b40 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 61 62  } {} {.  ^The ab
10b50 73 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  s(X) function re
10b60 74 75 72 6e 73 20 74 68 65 20 61 62 73 6f 6c 75  turns the absolu
10b70 74 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  te value of the 
10b80 6e 75 6d 65 72 69 63 0a 20 20 61 72 67 75 6d 65  numeric.  argume
10b90 6e 74 20 58 2e 20 20 5e 41 62 73 28 58 29 20 72  nt X.  ^Abs(X) r
10ba0 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20 58  eturns NULL if X
10bb0 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 28 41   is NULL. .  ^(A
10bc0 62 73 28 58 29 20 72 65 74 75 72 6e 20 30 2e 30  bs(X) return 0.0
10bd0 20 69 66 20 58 20 69 73 20 61 20 73 74 72 69 6e   if X is a strin
10be0 67 20 6f 72 20 62 6c 6f 62 0a 20 20 74 68 61 74  g or blob.  that
10bf0 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
10c00 72 74 65 64 20 74 6f 20 61 20 6e 75 6d 65 72 69  rted to a numeri
10c10 63 20 76 61 6c 75 65 2e 29 5e 20 20 5e 49 66 20  c value.)^  ^If 
10c20 58 20 69 73 20 74 68 65 20 0a 20 20 69 6e 74 65  X is the .  inte
10c30 67 65 72 20 2d 39 32 32 33 33 37 32 30 33 36 38  ger -92233720368
10c40 35 34 37 37 35 38 30 37 20 74 68 65 6e 20 61 62  54775807 then ab
10c50 73 28 58 29 20 74 68 72 6f 77 73 20 61 6e 20 69  s(X) throws an i
10c60 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 0a  nteger overflow.
10c70 20 20 65 72 72 6f 72 20 73 69 6e 63 65 20 74 68    error since th
10c80 65 72 65 20 69 73 20 6e 6f 20 65 71 75 69 76 61  ere is no equiva
10c90 6c 65 6e 74 20 70 6f 73 69 74 69 76 65 20 36 34  lent positive 64
10ca0 2d 62 69 74 20 74 77 6f 20 63 6f 6d 70 6c 65 6d  -bit two complem
10cb0 65 6e 74 20 76 61 6c 75 65 2e 0a 7d 0a 0a 66 75  ent value..}..fu
10cc0 6e 63 64 65 66 20 7b 63 68 61 6e 67 65 73 28 29  ncdef {changes()
10cd0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 63 68  } {} {.  ^The ch
10ce0 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f 6e  anges() function
10cf0 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   returns the num
10d00 62 65 72 20 6f 66 20 64 61 74 61 62 61 73 65 20  ber of database 
10d10 72 6f 77 73 20 74 68 61 74 20 77 65 72 65 20 63  rows that were c
10d20 68 61 6e 67 65 64 0a 20 20 6f 72 20 69 6e 73 65  hanged.  or inse
10d30 72 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64 20  rted or deleted 
10d40 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  by the most rece
10d50 6e 74 6c 79 20 63 6f 6d 70 6c 65 74 65 64 20 53  ntly completed S
10d60 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a  QL statement.  .
10d70 20 20 5e 54 68 65 20 63 68 61 6e 67 65 73 28 29    ^The changes()
10d80 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73   SQL function is
10d90 20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e   a wrapper aroun
10da0 64 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63  d the [sqlite3_c
10db0 68 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43 2b  hanges()].  C/C+
10dc0 2b 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 68  + function and h
10dd0 65 6e 63 65 20 66 6f 6c 6c 6f 77 73 20 74 68 65  ence follows the
10de0 20 73 61 6d 65 20 72 75 6c 65 73 20 66 6f 72 20   same rules for 
10df0 63 6f 75 6e 74 69 6e 67 20 63 68 61 6e 67 65 73  counting changes
10e00 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 6f  ..}..funcdef {co
10e10 61 6c 65 73 63 65 28 58 2c 59 2c 2e 2e 2e 29 7d  alesce(X,Y,...)}
10e20 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 63 6f 61   {} {.  ^The coa
10e30 6c 65 73 63 65 28 29 20 66 75 6e 63 74 69 6f 6e  lesce() function
10e40 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20   returns a copy 
10e50 6f 66 20 69 74 73 20 66 69 72 73 74 20 6e 6f 6e  of its first non
10e60 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2c 20  -NULL argument, 
10e70 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20 61 6c 6c  or.  NULL if all
10e80 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 4e   arguments are N
10e90 55 4c 4c 2e 20 20 5e 43 6f 61 6c 65 73 63 65 28  ULL.  ^Coalesce(
10ea0 29 20 6d 75 73 74 20 62 65 20 61 74 20 6c 65 61  ) must be at lea
10eb0 73 74 20 0a 20 20 32 20 61 72 67 75 6d 65 6e 74  st .  2 argument
10ec0 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67  s..}..funcdef {g
10ed0 6c 6f 62 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  lob(X,Y)} {} {. 
10ee0 20 5e 54 68 65 20 67 6c 6f 62 28 58 2c 59 29 20   ^The glob(X,Y) 
10ef0 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71 75 69  function is equi
10f00 76 61 6c 65 6e 74 20 74 6f 20 74 68 65 0a 20 20  valent to the.  
10f10 65 78 70 72 65 73 73 69 6f 6e 20 22 3c 62 3e 59  expression "<b>Y
10f20 20 47 4c 4f 42 20 58 3c 2f 62 3e 22 2e 0a 20 20   GLOB X</b>"..  
10f30 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 58 20  Note that the X 
10f40 61 6e 64 20 59 20 61 72 67 75 6d 65 6e 74 73 20  and Y arguments 
10f50 61 72 65 20 72 65 76 65 72 73 65 64 20 69 6e 20  are reversed in 
10f60 74 68 65 20 67 6c 6f 62 28 29 20 66 75 6e 63 74  the glob() funct
10f70 69 6f 6e 0a 20 20 72 65 6c 61 74 69 76 65 20 74  ion.  relative t
10f80 6f 20 74 68 65 20 69 6e 66 69 78 20 5b 47 4c 4f  o the infix [GLO
10f90 42 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20 20 5e  B] operator..  ^
10fa0 49 66 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  If the [sqlite3_
10fb0 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
10fc0 29 5d 20 69 6e 74 65 72 66 61 63 65 20 69 73 20  )] interface is 
10fd0 75 73 65 64 20 74 6f 0a 20 20 6f 76 65 72 72 69  used to.  overri
10fe0 64 65 20 74 68 65 20 67 6c 6f 62 28 58 2c 59 29  de the glob(X,Y)
10ff0 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61   function with a
11000 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20 69 6d  n alternative im
11010 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 68 65  plementation the
11020 6e 0a 20 20 74 68 65 20 5b 47 4c 4f 42 5d 20 6f  n.  the [GLOB] o
11030 70 65 72 61 74 6f 72 20 77 69 6c 6c 20 69 6e 76  perator will inv
11040 6f 6b 65 20 74 68 65 20 61 6c 74 65 72 6e 61 74  oke the alternat
11050 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ive implementati
11060 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  on..}..funcdef {
11070 69 66 6e 75 6c 6c 28 58 2c 59 29 7d 20 7b 7d 20  ifnull(X,Y)} {} 
11080 7b 0a 20 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28  {.  ^The ifnull(
11090 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
110a0 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69 74 73  ns a copy of its
110b0 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20   first non-NULL 
110c0 61 72 67 75 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e  argument, or.  N
110d0 55 4c 4c 20 69 66 20 62 6f 74 68 20 61 72 67 75  ULL if both argu
110e0 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c 4c 2e 20  ments are NULL. 
110f0 20 5e 49 66 6e 75 6c 6c 28 29 20 6d 75 73 74 20   ^Ifnull() must 
11100 68 61 76 65 20 65 78 61 63 74 6c 79 20 32 20 61  have exactly 2 a
11110 72 67 75 6d 65 6e 74 73 2e 0a 20 20 5e 54 68 65  rguments..  ^The
11120 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69   ifnull() functi
11130 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74  on is equivalent
11140 20 74 6f 20 5b 63 6f 61 6c 65 73 63 65 28 29 5d   to [coalesce()]
11150 20 77 69 74 68 20 74 77 6f 20 61 72 67 75 6d 65   with two argume
11160 6e 74 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  nts..}..funcdef 
11170 7b 68 65 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  {hex(X)} {} {.  
11180 5e 54 68 65 20 68 65 78 28 29 20 66 75 6e 63 74  ^The hex() funct
11190 69 6f 6e 20 69 6e 74 65 72 70 72 65 74 73 20 69  ion interprets i
111a0 74 73 20 61 72 67 75 6d 65 6e 74 20 61 73 20 61  ts argument as a
111b0 20 42 4c 4f 42 20 61 6e 64 20 72 65 74 75 72 6e   BLOB and return
111c0 73 0a 20 20 61 20 73 74 72 69 6e 67 20 77 68 69  s.  a string whi
111d0 63 68 20 69 73 20 74 68 65 20 75 70 70 65 72 2d  ch is the upper-
111e0 63 61 73 65 20 68 65 78 61 64 65 63 69 6d 61 6c  case hexadecimal
111f0 20 72 65 6e 64 65 72 69 6e 67 20 6f 66 20 74 68   rendering of th
11200 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 20 20 74  e content of.  t
11210 68 61 74 20 62 6c 6f 62 2e 0a 7d 0a 0a 66 75 6e  hat blob..}..fun
11220 63 64 65 66 20 7b 6c 61 73 74 5f 69 6e 73 65 72  cdef {last_inser
11230 74 5f 72 6f 77 69 64 28 29 7d 20 7b 7d 20 7b 0a  t_rowid()} {} {.
11240 20 20 5e 54 68 65 20 6c 61 73 74 5f 69 6e 73 65    ^The last_inse
11250 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74  rt_rowid() funct
11260 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
11270 5b 52 4f 57 49 44 5d 0a 20 20 6f 66 20 74 68 65  [ROWID].  of the
11280 20 6c 61 73 74 20 72 6f 77 20 69 6e 73 65 72 74   last row insert
11290 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
112a0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 68  se connection wh
112b0 69 63 68 20 69 6e 76 6f 6b 65 64 20 74 68 65 0a  ich invoked the.
112c0 20 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54    function..  ^T
112d0 68 65 20 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  he last_insert_r
112e0 6f 77 69 64 28 29 20 53 51 4c 20 66 75 6e 63 74  owid() SQL funct
112f0 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65 72  ion is a wrapper
11300 20 61 72 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73   around the.  [s
11310 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
11320 72 74 5f 72 6f 77 69 64 28 29 5d 20 43 2f 43 2b  rt_rowid()] C/C+
11330 2b 20 69 6e 74 65 72 66 61 63 65 20 66 75 6e 63  + interface func
11340 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  tion..}..funcdef
11350 20 7b 6c 65 6e 67 74 68 28 58 29 7d 20 7b 7d 20   {length(X)} {} 
11360 7b 0a 20 20 5e 54 68 65 20 6c 65 6e 67 74 68 28  {.  ^The length(
11370 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
11380 72 6e 73 20 74 68 65 20 6c 65 6e 67 74 68 20 6f  rns the length o
11390 66 20 58 20 69 6e 20 0a 20 20 63 68 61 72 61 63  f X in .  charac
113a0 74 65 72 73 20 69 66 20 58 20 69 73 20 61 20 73  ters if X is a s
113b0 74 72 69 6e 67 2c 20 6f 72 20 69 6e 20 62 79 74  tring, or in byt
113c0 65 73 20 69 66 20 58 20 69 73 20 61 20 62 6c 6f  es if X is a blo
113d0 62 2e 0a 20 20 5e 49 66 20 58 20 69 73 20 4e 55  b..  ^If X is NU
113e0 4c 4c 20 74 68 65 6e 20 6c 65 6e 67 74 68 28 58  LL then length(X
113f0 29 20 69 73 20 4e 55 4c 4c 2e 0a 20 20 5e 49 66  ) is NULL..  ^If
11400 20 58 20 69 73 20 6e 75 6d 65 72 69 63 20 74 68   X is numeric th
11410 65 6e 20 6c 65 6e 67 74 68 28 58 29 20 72 65 74  en length(X) ret
11420 75 72 6e 73 20 74 68 65 20 6c 65 6e 67 74 68 20  urns the length 
11430 6f 66 20 61 20 73 74 72 69 6e 67 0a 20 20 72 65  of a string.  re
11440 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
11450 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c  X..}..funcdef {l
11460 69 6b 65 28 58 2c 59 29 20 6c 69 6b 65 28 58 2c  ike(X,Y) like(X,
11470 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  Y,Z)} {} {.  ^Th
11480 65 20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f  e like() functio
11490 6e 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70  n is used to imp
114a0 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 22 3c 62  lement the.  "<b
114b0 3e 59 20 4c 49 4b 45 20 58 20 26 23 39 31 3b 45  >Y LIKE X &#91;E
114c0 53 43 41 50 45 20 5a 26 23 39 33 3b 3c 2f 62 3e  SCAPE Z&#93;</b>
114d0 22 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 0a 20  " expression. . 
114e0 20 5e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61   ^If the optiona
114f0 6c 20 45 53 43 41 50 45 20 63 6c 61 75 73 65 20  l ESCAPE clause 
11500 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e  is present, then
11510 20 74 68 65 0a 20 20 6c 69 6b 65 28 29 20 66 75   the.  like() fu
11520 6e 63 74 69 6f 6e 20 69 73 20 69 6e 76 6f 6b 65  nction is invoke
11530 64 20 77 69 74 68 20 74 68 72 65 65 20 61 72 67  d with three arg
11540 75 6d 65 6e 74 73 2e 20 20 5e 4f 74 68 65 72 77  uments.  ^Otherw
11550 69 73 65 2c 20 69 74 20 69 73 0a 20 20 69 6e 76  ise, it is.  inv
11560 6f 6b 65 64 20 77 69 74 68 20 74 77 6f 20 61 72  oked with two ar
11570 67 75 6d 65 6e 74 73 20 6f 6e 6c 79 2e 20 4e 6f  guments only. No
11580 74 65 20 74 68 61 74 20 74 68 65 20 58 20 61 6e  te that the X an
11590 64 20 59 20 70 61 72 61 6d 65 74 65 72 73 20 61  d Y parameters a
115a0 72 65 0a 20 20 72 65 76 65 72 73 65 64 20 69 6e  re.  reversed in
115b0 20 74 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63   the like() func
115c0 74 69 6f 6e 20 72 65 6c 61 74 69 76 65 20 74 6f  tion relative to
115d0 20 74 68 65 20 69 6e 66 69 78 20 5b 4c 49 4b 45   the infix [LIKE
115e0 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20 20 5e 54  ] operator..  ^T
115f0 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61  he [sqlite3_crea
11600 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20 69  te_function()] i
11610 6e 74 65 72 66 61 63 65 20 63 61 6e 20 62 65 20  nterface can be 
11620 75 73 65 64 20 74 6f 20 6f 76 65 72 72 69 64 65  used to override
11630 20 74 68 65 0a 20 20 6c 69 6b 65 28 29 20 66 75   the.  like() fu
11640 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68 65 72 65  nction and there
11650 62 79 20 63 68 61 6e 67 65 20 74 68 65 20 6f 70  by change the op
11660 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 20  eration of the. 
11670 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72   [LIKE] operator
11680 2e 20 20 57 68 65 6e 20 6f 76 65 72 72 69 64 69  .  When overridi
11690 6e 67 20 74 68 65 20 6c 69 6b 65 28 29 20 66 75  ng the like() fu
116a0 6e 63 74 69 6f 6e 2c 20 69 74 20 6d 61 79 20 62  nction, it may b
116b0 65 20 69 6d 70 6f 72 74 61 6e 74 0a 20 20 74 6f  e important.  to
116c0 20 6f 76 65 72 72 69 64 65 20 62 6f 74 68 20 74   override both t
116d0 68 65 20 74 77 6f 20 61 6e 64 20 74 68 72 65 65  he two and three
116e0 20 61 72 67 75 6d 65 6e 74 20 76 65 72 73 69 6f   argument versio
116f0 6e 73 20 6f 66 20 74 68 65 20 6c 69 6b 65 28 29  ns of the like()
11700 20 0a 20 20 66 75 6e 63 74 69 6f 6e 2e 20 4f 74   .  function. Ot
11710 68 65 72 77 69 73 65 2c 20 64 69 66 66 65 72 65  herwise, differe
11720 6e 74 20 63 6f 64 65 20 6d 61 79 20 62 65 20 63  nt code may be c
11730 61 6c 6c 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65  alled to impleme
11740 6e 74 20 74 68 65 0a 20 20 5b 4c 49 4b 45 5d 20  nt the.  [LIKE] 
11750 6f 70 65 72 61 74 6f 72 20 64 65 70 65 6e 64 69  operator dependi
11760 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72  ng on whether or
11770 20 6e 6f 74 20 61 6e 20 45 53 43 41 50 45 20 63   not an ESCAPE c
11780 6c 61 75 73 65 20 77 61 73 20 0a 20 20 73 70 65  lause was .  spe
11790 63 69 66 69 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64  cified..}..funcd
117a0 65 66 20 7b 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ef {load_extensi
117b0 6f 6e 28 58 29 20 6c 6f 61 64 5f 65 78 74 65 6e  on(X) load_exten
117c0 73 69 6f 6e 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  sion(X,Y)} {} {.
117d0 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65    ^The load_exte
117e0 6e 73 69 6f 6e 28 58 2c 59 29 20 66 75 6e 63 74  nsion(X,Y) funct
117f0 69 6f 6e 20 6c 6f 61 64 73 20 53 51 4c 69 74 65  ion loads SQLite
11800 20 65 78 74 65 6e 73 69 6f 6e 73 20 6f 75 74 20   extensions out 
11810 6f 66 20 74 68 65 20 73 68 61 72 65 64 0a 20 20  of the shared.  
11820 6c 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d  library file nam
11830 65 64 20 58 20 75 73 69 6e 67 20 74 68 65 20 65  ed X using the e
11840 6e 74 72 79 20 70 6f 69 6e 74 20 59 2e 20 20 5e  ntry point Y.  ^
11850 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 6c 6f  The result of lo
11860 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 0a 20  ad_extension(). 
11870 20 69 73 20 61 6c 77 61 79 73 20 61 20 4e 55 4c   is always a NUL
11880 4c 2e 20 20 5e 49 66 20 59 20 69 73 20 6f 6d 69  L.  ^If Y is omi
11890 74 74 65 64 20 74 68 65 6e 20 74 68 65 20 64 65  tted then the de
118a0 66 61 75 6c 74 20 65 6e 74 72 79 20 70 6f 69 6e  fault entry poin
118b0 74 0a 20 20 6f 66 20 3c 62 3e 73 71 6c 69 74 65  t.  of <b>sqlite
118c0 33 5f 65 78 74 65 6e 73 69 6f 6e 5f 69 6e 69 74  3_extension_init
118d0 3c 2f 62 3e 20 69 73 20 75 73 65 64 2e 20 20 5e  </b> is used.  ^
118e0 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  The load_extensi
118f0 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  on() function.  
11900 72 61 69 73 65 73 20 61 6e 20 65 78 63 65 70 74  raises an except
11910 69 6f 6e 20 69 66 20 74 68 65 20 65 78 74 65 6e  ion if the exten
11920 73 69 6f 6e 20 66 61 69 6c 73 20 74 6f 20 6c 6f  sion fails to lo
11930 61 64 20 6f 72 20 69 6e 69 74 69 61 6c 69 7a 65  ad or initialize
11940 20 63 6f 72 72 65 63 74 6c 79 2e 0a 0a 20 20 3c   correctly...  <
11950 70 3e 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65  p>^The load_exte
11960 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e  nsion() function
11970 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20 74 68   will fail if th
11980 65 20 65 78 74 65 6e 73 69 6f 6e 20 61 74 74 65  e extension atte
11990 6d 70 74 73 20 74 6f 20 0a 20 20 6d 6f 64 69 66  mpts to .  modif
119a0 79 20 6f 72 20 64 65 6c 65 74 65 20 61 20 53 51  y or delete a SQ
119b0 4c 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 63 6f  L function or co
119c0 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
119d0 2e 20 20 5e 54 68 65 0a 20 20 65 78 74 65 6e 73  .  ^The.  extens
119e0 69 6f 6e 20 63 61 6e 20 61 64 64 20 6e 65 77 20  ion can add new 
119f0 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c  functions or col
11a00 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
11a10 2c 20 62 75 74 20 63 61 6e 6e 6f 74 0a 20 20 6d  , but cannot.  m
11a20 6f 64 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20  odify or delete 
11a30 65 78 69 73 74 69 6e 67 20 66 75 6e 63 74 69 6f  existing functio
11a40 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20  ns or collating 
11a50 73 65 71 75 65 6e 63 65 73 20 62 65 63 61 75 73  sequences becaus
11a60 65 0a 20 20 74 68 6f 73 65 20 66 75 6e 63 74 69  e.  those functi
11a70 6f 6e 73 20 61 6e 64 2f 6f 72 20 63 6f 6c 6c 61  ons and/or colla
11a80 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 6d  ting sequences m
11a90 69 67 68 74 20 62 65 20 75 73 65 64 20 65 6c 73  ight be used els
11aa0 65 77 68 65 72 65 0a 20 20 69 6e 20 74 68 65 20  ewhere.  in the 
11ab0 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e  currently runnin
11ac0 67 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  g SQL statement.
11ad0 20 20 54 6f 20 6c 6f 61 64 20 61 6e 20 65 78 74    To load an ext
11ae0 65 6e 73 69 6f 6e 20 74 68 61 74 0a 20 20 63 68  ension that.  ch
11af0 61 6e 67 65 73 20 6f 72 20 64 65 6c 65 74 65 73  anges or deletes
11b00 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f   functions or co
11b10 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
11b20 73 2c 20 75 73 65 20 74 68 65 0a 20 20 5b 73 71  s, use the.  [sq
11b30 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e  lite3_load_exten
11b40 73 69 6f 6e 28 29 5d 20 43 2d 6c 61 6e 67 75 61  sion()] C-langua
11b50 67 65 20 41 50 49 2e 3c 2f 70 3e 0a 7d 0a 0a 66  ge API.</p>.}..f
11b60 75 6e 63 64 65 66 20 7b 6c 6f 77 65 72 28 58 29  uncdef {lower(X)
11b70 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 6f  } {} {.  ^The lo
11b80 77 65 72 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  wer(X) function 
11b90 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f  returns a copy o
11ba0 66 20 73 74 72 69 6e 67 20 58 20 77 69 74 68 20  f string X with 
11bb0 61 6c 6c 20 41 53 43 49 49 20 63 68 61 72 61 63  all ASCII charac
11bc0 74 65 72 73 0a 20 20 63 6f 6e 76 65 72 74 65 64  ters.  converted
11bd0 20 74 6f 20 6c 6f 77 65 72 20 63 61 73 65 2e 20   to lower case. 
11be0 20 5e 54 68 65 20 64 65 66 61 75 6c 74 20 62 75   ^The default bu
11bf0 69 6c 74 2d 69 6e 20 6c 6f 77 65 72 28 29 20 66  ilt-in lower() f
11c00 75 6e 63 74 69 6f 6e 20 77 6f 72 6b 73 0a 20 20  unction works.  
11c10 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63  for ASCII charac
11c20 74 65 72 73 20 6f 6e 6c 79 2e 20 20 54 6f 20 64  ters only.  To d
11c30 6f 20 63 61 73 65 20 63 6f 6e 76 65 72 73 69 6f  o case conversio
11c40 6e 73 20 6f 6e 20 6e 6f 6e 2d 41 53 43 49 49 0a  ns on non-ASCII.
11c50 20 20 63 68 61 72 61 63 74 65 72 73 2c 20 6c 6f    characters, lo
11c60 61 64 20 74 68 65 20 49 43 55 20 65 78 74 65 6e  ad the ICU exten
11c70 73 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  sion..}..funcdef
11c80 20 7b 6c 74 72 69 6d 28 58 29 20 6c 74 72 69 6d   {ltrim(X) ltrim
11c90 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  (X,Y)} {} {.  ^T
11ca0 68 65 20 6c 74 72 69 6d 28 58 2c 59 29 20 66 75  he ltrim(X,Y) fu
11cb0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
11cc0 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62   string formed b
11cd0 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61  y removing any a
11ce0 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72 61 63 74  nd all.  charact
11cf0 65 72 73 20 74 68 61 74 20 61 70 70 65 61 72 20  ers that appear 
11d00 69 6e 20 59 20 66 72 6f 6d 20 74 68 65 20 6c 65  in Y from the le
11d10 66 74 20 73 69 64 65 20 6f 66 20 58 2e 0a 20 20  ft side of X..  
11d20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75 6d 65  ^If the Y argume
11d30 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 6c  nt is omitted, l
11d40 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20  trim(X) removes 
11d50 73 70 61 63 65 73 20 66 72 6f 6d 20 74 68 65 20  spaces from the 
11d60 6c 65 66 74 20 73 69 64 65 0a 20 20 6f 66 20 58  left side.  of X
11d70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61  ..}..funcdef {ma
11d80 78 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 61  x(X,Y,...)} {*ma
11d90 78 43 6f 72 65 46 75 6e 63 20 2a 6d 61 78 20 7b  xCoreFunc *max {
11da0 6d 61 78 28 29 20 53 51 4c 20 66 75 6e 63 74 69  max() SQL functi
11db0 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 75  on}} {.  ^The mu
11dc0 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 61 78  lti-argument max
11dd0 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
11de0 72 6e 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74  rns the argument
11df0 20 77 69 74 68 20 74 68 65 20 0a 20 20 6d 61 78   with the .  max
11e00 69 6d 75 6d 20 76 61 6c 75 65 2c 20 6f 72 20 72  imum value, or r
11e10 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66 20 61 6e  eturn NULL if an
11e20 79 20 61 72 67 75 6d 65 6e 74 20 69 73 20 4e 55  y argument is NU
11e30 4c 4c 2e 20 0a 20 20 5e 54 68 65 20 6d 75 6c 74  LL. .  ^The mult
11e40 69 2d 61 72 67 75 6d 65 6e 74 20 6d 61 78 28 29  i-argument max()
11e50 20 66 75 6e 63 74 69 6f 6e 20 73 65 61 72 63 68   function search
11e60 65 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74 73  es its arguments
11e70 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
11e80 67 68 74 0a 20 20 66 6f 72 20 61 6e 20 61 72 67  ght.  for an arg
11e90 75 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69 6e  ument that defin
11ea0 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66  es a collating f
11eb0 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73 65 73  unction and uses
11ec0 20 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67 0a   that collating.
11ed0 20 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61    function for a
11ee0 6c 6c 20 73 74 72 69 6e 67 20 63 6f 6d 70 61 72  ll string compar
11ef0 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 6f 6e 65  isons.  ^If none
11f00 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   of the argument
11f10 73 20 74 6f 20 6d 61 78 28 29 0a 20 20 64 65 66  s to max().  def
11f20 69 6e 65 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20  ine a collating 
11f30 66 75 6e 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74  function, then t
11f40 68 65 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74  he BINARY collat
11f50 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  ing function is 
11f60 75 73 65 64 2e 0a 20 20 4e 6f 74 65 20 74 68 61  used..  Note tha
11f70 74 20 3c 62 3e 6d 61 78 28 29 3c 2f 62 3e 20 69  t <b>max()</b> i
11f80 73 20 61 20 73 69 6d 70 6c 65 20 66 75 6e 63 74  s a simple funct
11f90 69 6f 6e 20 77 68 65 6e 0a 20 20 69 74 20 68 61  ion when.  it ha
11fa0 73 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 67 75  s 2 or more argu
11fb0 6d 65 6e 74 73 20 62 75 74 20 6f 70 65 72 61 74  ments but operat
11fc0 65 73 20 61 73 20 61 6e 0a 20 20 5b 6d 69 6e 41  es as an.  [minA
11fd0 67 67 46 75 6e 63 20 7c 20 61 67 67 72 65 67 61  ggFunc | aggrega
11fe0 74 65 20 66 75 6e 63 74 69 6f 6e 5d 20 69 66 20  te function] if 
11ff0 67 69 76 65 6e 20 6f 6e 6c 79 20 61 20 73 69 6e  given only a sin
12000 67 6c 65 20 61 72 67 75 6d 65 6e 74 2e 0a 7d 0a  gle argument..}.
12010 0a 66 75 6e 63 64 65 66 20 7b 6d 69 6e 28 58 2c  .funcdef {min(X,
12020 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 69 6e 43 6f 72  Y,...)} {*minCor
12030 65 46 75 6e 63 20 2a 6d 69 6e 20 7b 6d 69 6e 28  eFunc *min {min(
12040 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 7d  ) SQL function}}
12050 20 7b 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d   {.  ^The multi-
12060 61 72 67 75 6d 65 6e 74 20 6d 69 6e 28 29 20 66  argument min() f
12070 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
12080 74 68 65 20 61 72 67 75 6d 65 6e 74 20 77 69 74  the argument wit
12090 68 20 74 68 65 0a 20 20 6d 69 6e 69 6d 75 6d 20  h the.  minimum 
120a0 76 61 6c 75 65 2e 0a 20 20 5e 54 68 65 20 6d 75  value..  ^The mu
120b0 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 69 6e  lti-argument min
120c0 28 29 20 66 75 6e 63 74 69 6f 6e 20 73 65 61 72  () function sear
120d0 63 68 65 73 20 69 74 73 20 61 72 67 75 6d 65 6e  ches its argumen
120e0 74 73 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  ts from left to 
120f0 72 69 67 68 74 0a 20 20 66 6f 72 20 61 6e 20 61  right.  for an a
12100 72 67 75 6d 65 6e 74 20 74 68 61 74 20 64 65 66  rgument that def
12110 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67  ines a collating
12120 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73   function and us
12130 65 73 20 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e  es that collatin
12140 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  g.  function for
12150 20 61 6c 6c 20 73 74 72 69 6e 67 20 63 6f 6d 70   all string comp
12160 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 6f  arisons.  ^If no
12170 6e 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65  ne of the argume
12180 6e 74 73 20 74 6f 20 6d 69 6e 28 29 0a 20 20 64  nts to min().  d
12190 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61 74 69 6e  efine a collatin
121a0 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74 68 65 6e  g function, then
121b0 20 74 68 65 20 42 49 4e 41 52 59 20 63 6f 6c 6c   the BINARY coll
121c0 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 69  ating function i
121d0 73 20 75 73 65 64 2e 0a 20 20 4e 6f 74 65 20 74  s used..  Note t
121e0 68 61 74 20 3c 62 3e 6d 69 6e 28 29 3c 2f 62 3e  hat <b>min()</b>
121f0 20 69 73 20 61 20 73 69 6d 70 6c 65 20 66 75 6e   is a simple fun
12200 63 74 69 6f 6e 20 77 68 65 6e 0a 20 20 69 74 20  ction when.  it 
12210 68 61 73 20 32 20 6f 72 20 6d 6f 72 65 20 61 72  has 2 or more ar
12220 67 75 6d 65 6e 74 73 20 62 75 74 20 6f 70 65 72  guments but oper
12230 61 74 65 73 20 61 73 20 61 6e 20 0a 20 20 5b 6d  ates as an .  [m
12240 61 78 41 67 67 46 75 6e 63 20 7c 20 61 67 67 72  axAggFunc | aggr
12250 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 5d 20  egate function] 
12260 69 66 20 67 69 76 65 6e 0a 20 20 6f 6e 6c 79 20  if given.  only 
12270 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e  a single argumen
12280 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6e  t..}..funcdef {n
12290 75 6c 6c 69 66 28 58 2c 59 29 7d 20 7b 7d 20 7b  ullif(X,Y)} {} {
122a0 0a 20 20 5e 54 68 65 20 6e 75 6c 6c 69 66 28 58  .  ^The nullif(X
122b0 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  ,Y) function ret
122c0 75 72 6e 73 20 69 74 73 20 66 69 72 73 74 20 61  urns its first a
122d0 72 67 75 6d 65 6e 74 20 69 66 20 74 68 65 20 61  rgument if the a
122e0 72 67 75 6d 65 6e 74 73 20 61 72 65 0a 20 20 64  rguments are.  d
122f0 69 66 66 65 72 65 6e 74 20 61 6e 64 20 4e 55 4c  ifferent and NUL
12300 4c 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e  L if the argumen
12310 74 73 20 61 72 65 20 74 68 65 20 73 61 6d 65 2e  ts are the same.
12320 20 20 5e 54 68 65 20 6e 75 6c 6c 69 66 28 58 2c    ^The nullif(X,
12330 59 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 73 65  Y) function.  se
12340 61 72 63 68 65 73 20 69 74 73 20 61 72 67 75 6d  arches its argum
12350 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20 74  ents from left t
12360 6f 20 72 69 67 68 74 20 66 6f 72 20 61 6e 20 61  o right for an a
12370 72 67 75 6d 65 6e 74 20 74 68 61 74 20 64 65 66  rgument that def
12380 69 6e 65 73 20 61 0a 20 20 63 6f 6c 6c 61 74 69  ines a.  collati
12390 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20  ng function and 
123a0 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61 74  uses that collat
123b0 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  ing function for
123c0 20 61 6c 6c 20 73 74 72 69 6e 67 0a 20 20 63 6f   all string.  co
123d0 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20  mparisons.  ^If 
123e0 6e 65 69 74 68 65 72 20 61 72 67 75 6d 65 6e 74  neither argument
123f0 20 74 6f 20 6e 75 6c 6c 69 66 28 29 20 64 65 66   to nullif() def
12400 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67  ines a collating
12410 20 66 75 6e 63 74 69 6f 6e 0a 20 20 74 68 65 6e   function.  then
12420 20 74 68 65 20 42 49 4e 41 52 59 20 69 73 20 75   the BINARY is u
12430 73 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  sed..}..funcdef 
12440 7b 71 75 6f 74 65 28 58 29 7d 20 7b 7d 20 7b 0a  {quote(X)} {} {.
12450 20 20 5e 54 68 65 20 71 75 6f 74 65 28 58 29 20    ^The quote(X) 
12460 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
12470 20 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 20   a string which 
12480 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 0a  is the value of.
12490 20 20 69 74 73 20 61 72 67 75 6d 65 6e 74 20 73    its argument s
124a0 75 69 74 61 62 6c 65 20 66 6f 72 20 69 6e 63 6c  uitable for incl
124b0 75 73 69 6f 6e 20 69 6e 74 6f 20 61 6e 6f 74 68  usion into anoth
124c0 65 72 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  er SQL statement
124d0 2e 0a 20 20 5e 53 74 72 69 6e 67 73 20 61 72 65  ..  ^Strings are
124e0 20 73 75 72 72 6f 75 6e 64 65 64 20 62 79 20 73   surrounded by s
124f0 69 6e 67 6c 65 2d 71 75 6f 74 65 73 20 77 69 74  ingle-quotes wit
12500 68 20 65 73 63 61 70 65 73 20 6f 6e 20 69 6e 74  h escapes on int
12510 65 72 69 6f 72 20 71 75 6f 74 65 73 0a 20 20 61  erior quotes.  a
12520 73 20 6e 65 65 64 65 64 2e 20 20 5e 42 4c 4f 42  s needed.  ^BLOB
12530 73 20 61 72 65 20 65 6e 63 6f 64 65 64 20 61 73  s are encoded as
12540 20 68 65 78 61 64 65 63 69 6d 61 6c 20 6c 69 74   hexadecimal lit
12550 65 72 61 6c 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65  erals..}..funcde
12560 66 20 7b 72 61 6e 64 6f 6d 28 29 7d 20 7b 7d 20  f {random()} {} 
12570 7b 0a 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d 28  {.  ^The random(
12580 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
12590 6e 73 20 61 20 70 73 65 75 64 6f 2d 72 61 6e 64  ns a pseudo-rand
125a0 6f 6d 20 69 6e 74 65 67 65 72 0a 20 20 62 65 74  om integer.  bet
125b0 77 65 65 6e 20 2d 39 32 32 33 33 37 32 30 33 36  ween -9223372036
125c0 38 35 34 37 37 35 38 30 38 20 61 6e 64 20 2b 39  854775808 and +9
125d0 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
125e0 30 37 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  07..}..funcdef {
125f0 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29 7d 20 7b  randomblob(N)} {
12600 7d 20 7b 0a 20 20 5e 54 68 65 20 72 61 6e 64 6f  } {.  ^The rando
12610 6d 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f  mblob(N) functio
12620 6e 20 72 65 74 75 72 6e 20 61 6e 20 4e 2d 62 79  n return an N-by
12630 74 65 20 62 6c 6f 62 20 63 6f 6e 74 61 69 6e 69  te blob containi
12640 6e 67 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d  ng pseudo-random
12650 0a 20 20 62 79 74 65 73 2e 20 5e 49 66 20 4e 20  .  bytes. ^If N 
12660 69 73 20 6c 65 73 73 20 74 68 61 6e 20 31 20 74  is less than 1 t
12670 68 65 6e 20 61 20 31 2d 62 79 74 65 20 72 61 6e  hen a 1-byte ran
12680 64 6f 6d 20 62 6c 6f 62 20 69 73 20 72 65 74 75  dom blob is retu
12690 72 6e 65 64 2e 0a 0a 20 20 3c 70 3e 48 69 6e 74  rned...  <p>Hint
126a0 3a 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20  :  applications 
126b0 63 61 6e 20 67 65 6e 65 72 61 74 65 20 67 6c 6f  can generate glo
126c0 62 61 6c 6c 79 20 75 6e 69 71 75 65 20 69 64 65  bally unique ide
126d0 6e 74 69 66 69 65 72 73 0a 20 20 75 73 69 6e 67  ntifiers.  using
126e0 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 74   this function t
126f0 6f 67 65 74 68 65 72 20 77 69 74 68 20 5b 68 65  ogether with [he
12700 78 28 29 5d 20 61 6e 64 2f 6f 72 0a 20 20 5b 6c  x()] and/or.  [l
12710 6f 77 65 72 28 29 5d 20 6c 69 6b 65 20 74 68 69  ower()] like thi
12720 73 3a 3c 2f 70 3e 0a 0a 20 20 3c 62 6c 6f 63 6b  s:</p>..  <block
12730 71 75 6f 74 65 3e 0a 20 20 68 65 78 28 72 61 6e  quote>.  hex(ran
12740 64 6f 6d 62 6c 6f 62 28 31 36 29 29 3c 62 72 3e  domblob(16))<br>
12750 3c 2f 62 72 3e 0a 20 20 6c 6f 77 65 72 28 68 65  </br>.  lower(he
12760 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36 29  x(randomblob(16)
12770 29 29 0a 20 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74  )).  </blockquot
12780 65 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72  e>.}..funcdef {r
12790 65 70 6c 61 63 65 28 58 2c 59 2c 5a 29 7d 20 7b  eplace(X,Y,Z)} {
127a0 7d 20 7b 0a 20 20 5e 54 68 65 20 72 65 70 6c 61  } {.  ^The repla
127b0 63 65 28 58 2c 59 2c 5a 29 20 66 75 6e 63 74 69  ce(X,Y,Z) functi
127c0 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72  on returns a str
127d0 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 73 75  ing formed by su
127e0 62 73 74 69 74 75 74 69 6e 67 0a 20 20 73 74 72  bstituting.  str
127f0 69 6e 67 20 5a 20 66 6f 72 20 65 76 65 72 79 20  ing Z for every 
12800 6f 63 63 75 72 72 61 6e 63 65 20 6f 66 20 73 74  occurrance of st
12810 72 69 6e 67 20 59 20 69 6e 20 73 74 72 69 6e 67  ring Y in string
12820 20 58 2e 20 20 5e 54 68 65 20 5b 42 49 4e 41 52   X.  ^The [BINAR
12830 59 5d 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20 73  Y].  collating s
12840 65 71 75 65 6e 63 65 20 69 73 20 75 73 65 64 20  equence is used 
12850 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e  for comparisons.
12860 20 20 5e 49 66 20 59 20 69 73 20 61 6e 20 65 6d    ^If Y is an em
12870 70 74 79 0a 20 20 73 74 72 69 6e 67 20 74 68 65  pty.  string the
12880 6e 20 72 65 74 75 72 6e 20 58 20 75 6e 63 68 61  n return X uncha
12890 6e 67 65 64 2e 20 20 5e 49 66 20 5a 20 69 73 20  nged.  ^If Z is 
128a0 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 20 20  not initially.  
128b0 61 20 73 74 72 69 6e 67 2c 20 69 74 20 69 73 20  a string, it is 
128c0 63 61 73 74 20 74 6f 20 61 20 55 54 46 2d 38 20  cast to a UTF-8 
128d0 73 74 72 69 6e 67 20 70 72 69 6f 72 20 74 6f 20  string prior to 
128e0 70 72 6f 63 65 73 73 69 6e 67 2e 0a 7d 0a 0a 66  processing..}..f
128f0 75 6e 63 64 65 66 20 7b 72 6f 75 6e 64 28 58 29  uncdef {round(X)
12900 20 72 6f 75 6e 64 28 58 2c 59 29 7d 20 7b 7d 20   round(X,Y)} {} 
12910 7b 0a 20 20 5e 54 68 65 20 72 6f 75 6e 64 28 58  {.  ^The round(X
12920 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  ,Y) function ret
12930 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 72 65  urns a string re
12940 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
12950 74 68 65 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69  the floating-poi
12960 6e 74 0a 20 20 76 61 6c 75 65 20 58 20 72 6f 75  nt.  value X rou
12970 6e 64 65 64 20 74 6f 20 59 20 64 69 67 69 74 73  nded to Y digits
12980 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66   to the right of
12990 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69   the decimal poi
129a0 6e 74 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20  nt..  ^If the Y 
129b0 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74  argument is omit
129c0 74 65 64 2c 20 74 68 65 20 58 20 76 61 6c 75 65  ted, the X value
129d0 20 69 73 20 74 72 75 6e 63 61 74 65 64 20 74 6f   is truncated to
129e0 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 7d 0a 0a   an integer..}..
129f0 66 75 6e 63 64 65 66 20 7b 72 74 72 69 6d 28 58  funcdef {rtrim(X
12a00 29 20 72 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d  ) rtrim(X,Y)} {}
12a10 20 7b 0a 20 20 5e 54 68 65 20 72 74 72 69 6d 28   {.  ^The rtrim(
12a20 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  X,Y) function re
12a30 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66  turns a string f
12a40 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e  ormed by removin
12a50 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20  g any and all.  
12a60 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20  characters that 
12a70 61 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d  appear in Y from
12a80 20 74 68 65 20 72 69 67 68 74 20 73 69 64 65 20   the right side 
12a90 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74 68 65 20  of X..  ^If the 
12aa0 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d  Y argument is om
12ab0 69 74 74 65 64 2c 20 72 74 72 69 6d 28 58 29 20  itted, rtrim(X) 
12ac0 72 65 6d 6f 76 65 73 20 73 70 61 63 65 73 20 66  removes spaces f
12ad0 72 6f 6d 20 74 68 65 20 72 69 67 68 74 0a 20 20  rom the right.  
12ae0 73 69 64 65 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75  side of X..}..fu
12af0 6e 63 64 65 66 20 7b 73 6f 75 6e 64 65 78 28 58  ncdef {soundex(X
12b00 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73  )} {} {.  ^The s
12b10 6f 75 6e 64 65 78 28 58 29 20 66 75 6e 63 74 69  oundex(X) functi
12b20 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72  on returns a str
12b30 69 6e 67 20 74 68 61 74 20 69 73 20 74 68 65 20  ing that is the 
12b40 73 6f 75 6e 64 65 78 20 65 6e 63 6f 64 69 6e 67  soundex encoding
12b50 20 0a 20 20 6f 66 20 74 68 65 20 73 74 72 69 6e   .  of the strin
12b60 67 20 58 2e 0a 20 20 5e 54 68 65 20 73 74 72 69  g X..  ^The stri
12b70 6e 67 20 22 3f 30 30 30 22 20 69 73 20 72 65 74  ng "?000" is ret
12b80 75 72 6e 65 64 20 69 66 20 74 68 65 20 61 72 67  urned if the arg
12b90 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c 20 6f 72  ument is NULL or
12ba0 20 63 6f 6e 74 61 69 6e 73 0a 20 20 6e 6f 20 41   contains.  no A
12bb0 53 43 49 49 20 61 6c 70 68 61 62 65 74 69 63 20  SCII alphabetic 
12bc0 63 68 61 72 61 63 74 65 72 73 2e 0a 20 20 5e 28  characters..  ^(
12bd0 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
12be0 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 53 51   omitted from SQ
12bf0 4c 69 74 65 20 62 79 20 64 65 66 61 75 6c 74 2e  Lite by default.
12c00 0a 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 61 76  .  It is only av
12c10 61 69 6c 61 62 6c 65 20 69 66 20 74 68 65 20 5b  ailable if the [
12c20 53 51 4c 49 54 45 5f 53 4f 55 4e 44 45 58 5d 20  SQLITE_SOUNDEX] 
12c30 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
12c40 69 6f 6e 0a 20 20 69 73 20 75 73 65 64 20 77 68  ion.  is used wh
12c50 65 6e 20 53 51 4c 69 74 65 20 69 73 20 62 75 69  en SQLite is bui
12c60 6c 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66  lt.)^.}..funcdef
12c70 20 7b 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f   {sqlite_source_
12c80 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  id()} {} {.  ^Th
12c90 65 20 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f  e sqlite_source_
12ca0 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  id() function re
12cb0 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 74  turns a string t
12cc0 68 61 74 20 69 64 65 6e 74 69 66 69 65 73 20 74  hat identifies t
12cd0 68 65 0a 20 20 73 70 65 63 69 66 69 63 20 76 65  he.  specific ve
12ce0 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 73 6f 75  rsion of the sou
12cf0 72 63 65 20 63 6f 64 65 20 74 68 61 74 20 77 61  rce code that wa
12d00 73 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20  s used to build 
12d10 74 68 65 20 53 51 4c 69 74 65 0a 20 20 6c 69 62  the SQLite.  lib
12d20 72 61 72 79 2e 20 20 5e 54 68 65 20 73 74 72 69  rary.  ^The stri
12d30 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ng returned by s
12d40 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 28  qlite_source_id(
12d50 29 20 62 65 67 69 6e 73 20 77 69 74 68 0a 20 20  ) begins with.  
12d60 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  the date and tim
12d70 65 20 74 68 61 74 20 74 68 65 20 73 6f 75 72 63  e that the sourc
12d80 65 20 63 6f 64 65 20 77 61 73 20 63 68 65 63 6b  e code was check
12d90 65 64 20 69 6e 20 61 6e 64 20 69 73 20 66 6f 6c  ed in and is fol
12da0 6c 6f 77 73 20 62 79 0a 20 20 61 6e 20 53 48 41  lows by.  an SHA
12db0 31 20 68 61 73 68 20 74 68 61 74 20 75 6e 69 71  1 hash that uniq
12dc0 75 65 6c 79 20 69 64 65 6e 74 69 66 69 65 73 20  uely identifies 
12dd0 74 68 65 20 73 6f 75 72 63 65 20 74 72 65 65 2e  the source tree.
12de0 20 20 5e 54 68 69 73 20 66 75 6e 63 74 69 6f 6e    ^This function
12df0 20 69 73 0a 20 20 61 6e 20 53 51 4c 20 77 72 61   is.  an SQL wra
12e00 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20  pper around the 
12e10 5b 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69  [sqlite3_sourcei
12e20 64 28 29 5d 20 43 20 69 6e 74 65 72 66 61 63 65  d()] C interface
12e30 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71  ..}..funcdef {sq
12e40 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 7d 20  lite_version()} 
12e50 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69  {} {.  ^The sqli
12e60 74 65 5f 76 65 72 73 69 6f 6e 28 29 20 66 75 6e  te_version() fun
12e70 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
12e80 65 20 76 65 72 73 69 6f 6e 20 73 74 72 69 6e 67  e version string
12e90 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0a   for the SQLite.
12ea0 20 20 6c 69 62 72 61 72 79 20 74 68 61 74 20 69    library that i
12eb0 73 20 72 75 6e 6e 69 6e 67 2e 20 20 5e 54 68 69  s running.  ^Thi
12ec0 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 6e  s function is an
12ed0 20 53 51 4c 0a 20 20 77 72 61 70 70 65 72 20 61   SQL.  wrapper a
12ee0 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74  round the [sqlit
12ef0 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 5d  e3_libversion()]
12f00 20 43 2d 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a   C-interface..}.
12f10 0a 66 75 6e 63 64 65 66 20 7b 73 75 62 73 74 72  .funcdef {substr
12f20 28 58 2c 59 2c 5a 29 20 73 75 62 73 74 72 28 58  (X,Y,Z) substr(X
12f30 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
12f40 20 73 75 62 73 74 72 28 58 2c 59 2c 5a 29 20 66   substr(X,Y,Z) f
12f50 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
12f60 61 20 73 75 62 73 74 72 69 6e 67 20 6f 66 20 69  a substring of i
12f70 6e 70 75 74 20 73 74 72 69 6e 67 20 58 20 74 68  nput string X th
12f80 61 74 20 62 65 67 69 6e 73 0a 20 20 77 69 74 68  at begins.  with
12f90 20 74 68 65 20 59 2d 74 68 20 63 68 61 72 61 63   the Y-th charac
12fa0 74 65 72 20 61 6e 64 20 77 68 69 63 68 20 69 73  ter and which is
12fb0 20 5a 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f   Z characters lo
12fc0 6e 67 2e 0a 20 20 5e 49 66 20 5a 20 69 73 20 6f  ng..  ^If Z is o
12fd0 6d 69 74 74 65 64 20 74 68 65 6e 20 73 75 62 73  mitted then subs
12fe0 74 72 28 58 2c 59 29 20 72 65 74 75 72 6e 73 20  tr(X,Y) returns 
12ff0 61 6c 6c 20 63 68 61 72 61 63 74 65 72 73 20 74  all characters t
13000 68 72 6f 75 67 68 20 74 68 65 20 65 6e 64 0a 20  hrough the end. 
13010 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 58   of the string X
13020 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
13030 74 68 65 20 59 2d 74 68 2e 0a 20 20 5e 54 68 65  the Y-th..  ^The
13040 20 6c 65 66 74 2d 6d 6f 73 74 20 63 68 61 72 61   left-most chara
13050 63 74 65 72 20 6f 66 20 58 20 69 73 20 6e 75 6d  cter of X is num
13060 62 65 72 20 31 2e 20 20 5e 49 66 20 59 20 69 73  ber 1.  ^If Y is
13070 20 6e 65 67 61 74 69 76 65 0a 20 20 74 68 65 6e   negative.  then
13080 20 74 68 65 20 66 69 72 73 74 20 63 68 61 72 61   the first chara
13090 63 74 65 72 20 6f 66 20 74 68 65 20 73 75 62 73  cter of the subs
130a0 74 72 69 6e 67 20 69 73 20 66 6f 75 6e 64 20 62  tring is found b
130b0 79 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f 6d 20  y counting from 
130c0 74 68 65 0a 20 20 72 69 67 68 74 20 72 61 74 68  the.  right rath
130d0 65 72 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74  er than the left
130e0 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 65 67 61  .  ^If Z is nega
130f0 74 69 76 65 20 74 68 65 6e 0a 20 20 74 68 65 20  tive then.  the 
13100 61 62 73 28 5a 29 20 63 68 61 72 61 63 74 65 72  abs(Z) character
13110 73 20 70 72 65 63 65 65 64 69 6e 67 20 74 68 65  s preceeding the
13120 20 59 2d 74 68 20 63 68 61 72 61 63 74 65 72 20   Y-th character 
13130 61 72 65 20 72 65 74 75 72 6e 65 64 2e 0a 20 20  are returned..  
13140 5e 49 66 20 58 20 69 73 20 61 20 73 74 72 69 6e  ^If X is a strin
13150 67 20 74 68 65 6e 20 63 68 61 72 61 63 74 65 72  g then character
13160 73 20 69 6e 64 69 63 65 73 20 72 65 66 65 72 20  s indices refer 
13170 74 6f 20 61 63 74 75 61 6c 20 55 54 46 2d 38 20  to actual UTF-8 
13180 0a 20 20 63 68 61 72 61 63 74 65 72 73 2e 20 20  .  characters.  
13190 5e 49 66 20 58 20 69 73 20 61 20 42 4c 4f 42 20  ^If X is a BLOB 
131a0 74 68 65 6e 20 74 68 65 20 69 6e 64 69 63 65 73  then the indices
131b0 20 72 65 66 65 72 20 74 6f 20 62 79 74 65 73 2e   refer to bytes.
131c0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 6f 74  .}..funcdef {tot
131d0 61 6c 5f 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d  al_changes()} {}
131e0 20 7b 0a 20 20 5e 54 68 65 20 74 6f 74 61 6c 5f   {.  ^The total_
131f0 63 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69  changes() functi
13200 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e  on returns the n
13210 75 6d 62 65 72 20 6f 66 20 72 6f 77 20 63 68 61  umber of row cha
13220 6e 67 65 73 0a 20 20 63 61 75 73 65 64 20 62 79  nges.  caused by
13230 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20   INSERT, UPDATE 
13240 6f 72 20 44 45 4c 45 54 45 0a 20 20 73 74 61 74  or DELETE.  stat
13250 65 6d 65 6e 74 73 20 73 69 6e 63 65 20 74 68 65  ements since the
13260 20 63 75 72 72 65 6e 74 20 64 61 74 61 62 61 73   current databas
13270 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73  e connection was
13280 20 6f 70 65 6e 65 64 2e 0a 20 20 5e 54 68 69 73   opened..  ^This
13290 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77   function is a w
132a0 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68  rapper around th
132b0 65 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c  e [sqlite3_total
132c0 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f  _changes()].  C/
132d0 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d  C++ interface..}
132e0 0a 0a 66 75 6e 63 64 65 66 20 7b 74 72 69 6d 28  ..funcdef {trim(
132f0 58 29 20 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d  X) trim(X,Y)} {}
13300 20 7b 0a 20 20 5e 54 68 65 20 74 72 69 6d 28 58   {.  ^The trim(X
13310 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  ,Y) function ret
13320 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f  urns a string fo
13330 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67  rmed by removing
13340 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63   any and all.  c
13350 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61  haracters that a
13360 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20  ppear in Y from 
13370 62 6f 74 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a  both ends of X..
13380 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75    ^If the Y argu
13390 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c  ment is omitted,
133a0 20 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73   trim(X) removes
133b0 20 73 70 61 63 65 73 20 66 72 6f 6d 20 62 6f 74   spaces from bot
133c0 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 7d 0a 0a  h ends of X..}..
133d0 66 75 6e 63 64 65 66 20 7b 74 79 70 65 6f 66 28  funcdef {typeof(
133e0 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  X)} {} {.  ^The 
133f0 74 79 70 65 6f 66 28 58 29 20 66 75 6e 63 74 69  typeof(X) functi
13400 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72  on returns a str
13410 69 6e 67 20 74 68 61 74 20 69 6e 64 69 63 61 74  ing that indicat
13420 65 73 20 74 68 65 20 5b 64 61 74 61 74 79 70 65  es the [datatype
13430 5d 20 6f 66 0a 20 20 74 68 65 20 65 78 70 72 65  ] of.  the expre
13440 73 73 69 6f 6e 20 58 3a 20 22 6e 75 6c 6c 22 2c  ssion X: "null",
13450 20 22 69 6e 74 65 67 65 72 22 2c 20 22 72 65 61   "integer", "rea
13460 6c 22 2c 20 22 74 65 78 74 22 2c 20 6f 72 20 22  l", "text", or "
13470 62 6c 6f 62 22 2e 0a 7d 0a 0a 66 75 6e 63 64 65  blob"..}..funcde
13480 66 20 7b 75 70 70 65 72 28 58 29 7d 20 7b 7d 20  f {upper(X)} {} 
13490 7b 0a 20 20 5e 54 68 65 20 75 70 70 65 72 28 58  {.  ^The upper(X
134a0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
134b0 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69 6e 70  ns a copy of inp
134c0 75 74 20 73 74 72 69 6e 67 20 58 20 69 6e 20 77  ut string X in w
134d0 68 69 63 68 20 61 6c 6c 20 0a 20 20 6c 6f 77 65  hich all .  lowe
134e0 72 2d 63 61 73 65 20 41 53 43 49 49 20 63 68 61  r-case ASCII cha
134f0 72 61 63 74 65 72 73 20 61 72 65 20 63 6f 6e 76  racters are conv
13500 65 72 74 65 64 20 74 6f 20 74 68 65 69 72 20 75  erted to their u
13510 70 70 65 72 2d 63 61 73 65 20 65 71 75 69 76 61  pper-case equiva
13520 6c 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  lent..}..funcdef
13530 20 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29 7d 20 7b   {zeroblob(N)} {
13540 7d 20 7b 0a 20 20 5e 54 68 65 20 7a 65 72 6f 62  } {.  ^The zerob
13550 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20  lob(N) function 
13560 72 65 74 75 72 6e 73 20 61 20 42 4c 4f 42 20 63  returns a BLOB c
13570 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 4e 20 62  onsisting of N b
13580 79 74 65 73 20 6f 66 20 30 78 30 30 2e 0a 20 20  ytes of 0x00..  
13590 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 73 20 74  SQLite manages t
135a0 68 65 73 65 20 7a 65 72 6f 62 6c 6f 62 73 20 76  hese zeroblobs v
135b0 65 72 79 20 65 66 66 69 63 69 65 6e 74 6c 79 2e  ery efficiently.
135c0 20 20 5a 65 72 6f 62 6c 6f 62 73 20 63 61 6e 20    Zeroblobs can 
135d0 62 65 20 75 73 65 64 20 74 6f 0a 20 20 72 65 73  be used to.  res
135e0 65 72 76 65 20 73 70 61 63 65 20 66 6f 72 20 61  erve space for a
135f0 20 42 4c 4f 42 20 74 68 61 74 20 69 73 20 6c 61   BLOB that is la
13600 74 65 72 20 77 72 69 74 74 65 6e 20 75 73 69 6e  ter written usin
13610 67 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62 6c  g .  [sqlite3_bl
13620 6f 62 5f 6f 70 65 6e 28 29 20 7c 20 69 6e 63 72  ob_open() | incr
13630 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f  emental BLOB I/O
13640 5d 2e 0a 20 20 5e 54 68 69 73 20 53 51 4c 20 66  ]..  ^This SQL f
13650 75 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65  unction is imple
13660 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 74 68 65  mented using the
13670 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74   [sqlite3_result
13680 5f 7a 65 72 6f 62 6c 6f 62 28 29 5d 0a 20 20 72  _zeroblob()].  r
13690 6f 75 74 69 6e 65 20 66 72 6f 6d 20 74 68 65 20  outine from the 
136a0 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e  C/C++ interface.
136b0 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c  .}.</tcl>.</tabl
136c0 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  e>..<tcl>.######
136d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
136e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
136f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13710 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
13720 20 7b 44 61 74 65 20 41 6e 64 20 54 69 6d 65 20   {Date And Time 
13730 46 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65 66  Functions} datef
13740 75 6e 63 20 7b 2a 64 61 74 65 66 75 6e 63 7d 0a  unc {*datefunc}.
13750 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 64 61 74  hd_keywords {dat
13760 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  e() SQL function
13770 7d 20 7b 74 69 6d 65 28 29 20 53 51 4c 20 66 75  } {time() SQL fu
13780 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f  nction}.hd_keywo
13790 72 64 73 20 7b 64 61 74 65 74 69 6d 65 28 29 20  rds {datetime() 
137a0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b 6a  SQL function} {j
137b0 75 6c 69 61 6e 64 61 79 28 29 20 53 51 4c 20 66  ulianday() SQL f
137c0 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77  unction}.hd_keyw
137d0 6f 72 64 73 20 7b 73 74 72 66 74 69 6d 65 28 29  ords {strftime()
137e0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 3c   SQL function}.<
137f0 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74  /tcl>..<p>.SQLit
13800 65 20 73 75 70 70 6f 72 74 73 20 66 69 76 65 20  e supports five 
13810 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75  date and time fu
13820 6e 63 74 69 6f 6e 73 20 61 73 20 66 6f 6c 6c 6f  nctions as follo
13830 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 6f  ws:.</p>..<p>.<o
13840 6c 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74  l>.<li> ^(<b>dat
13850 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72  e(</b><i>timestr
13860 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d  ing, modifier, m
13870 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e  odifier, ...</i>
13880 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e  <b>)</b>)^ </li>
13890 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 74 69 6d 65 28  .<li> ^(<b>time(
138a0 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e  </b><i>timestrin
138b0 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64  g, modifier, mod
138c0 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62  ifier, ...</i><b
138d0 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c  >)</b>)^ </li>.<
138e0 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65 74 69 6d  li> ^(<b>datetim
138f0 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72  e(</b><i>timestr
13900 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d  ing, modifier, m
13910 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e  odifier, ...</i>
13920 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e  <b>)</b>)^ </li>
13930 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 6a 75 6c 69 61  .<li> ^(<b>julia
13940 6e 64 61 79 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65  nday(</b><i>time
13950 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72  string, modifier
13960 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c  , modifier, ...<
13970 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f  /i><b>)</b>)^ </
13980 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 73 74  li>.<li> ^(<b>st
13990 72 66 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 66 6f  rftime(</b><i>fo
139a0 72 6d 61 74 2c 20 74 69 6d 65 73 74 72 69 6e 67  rmat, timestring
139b0 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69  , modifier, modi
139c0 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e  fier, ...</i><b>
139d0 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 2f  )</b>)^ </li>.</
139e0 6f 6c 3e 0a 0a 3c 70 3e 0a 5e 41 6c 6c 20 66 69  ol>..<p>.^All fi
139f0 76 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  ve date and time
13a00 20 66 75 6e 63 74 69 6f 6e 73 20 74 61 6b 65 20   functions take 
13a10 61 20 74 69 6d 65 20 73 74 72 69 6e 67 20 61 73  a time string as
13a20 20 61 6e 20 61 72 67 75 6d 65 6e 74 2e 20 0a 5e   an argument. .^
13a30 54 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20  The time string 
13a40 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a  is followed by z
13a50 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64 69  ero or more modi
13a60 66 69 65 72 73 2e 20 0a 5e 54 68 65 20 73 74 72  fiers. .^The str
13a70 66 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e  ftime() function
13a80 20 61 6c 73 6f 20 74 61 6b 65 73 20 61 20 66 6f   also takes a fo
13a90 72 6d 61 74 20 73 74 72 69 6e 67 20 61 73 20 69  rmat string as i
13aa0 74 73 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  ts first argumen
13ab0 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65  t..</p>..<p>.The
13ac0 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66   date and time f
13ad0 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 61 20 73  unctions use a s
13ae0 75 62 73 65 74 20 6f 66 0a 5b 68 74 74 70 3a 2f  ubset of.[http:/
13af0 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72  /en.wikipedia.or
13b00 67 2f 77 69 6b 69 2f 49 53 4f 5f 38 36 30 31 20  g/wiki/ISO_8601 
13b10 7c 20 49 53 30 2d 38 36 30 31 5d 20 64 61 74 65  | IS0-8601] date
13b20 20 61 6e 64 20 74 69 6d 65 0a 66 6f 72 6d 61 74   and time.format
13b30 73 2e 0a 5e 54 68 65 20 64 61 74 65 28 29 20 66  s..^The date() f
13b40 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
13b50 74 68 65 20 64 61 74 65 20 69 6e 20 74 68 69 73  the date in this
13b60 20 66 6f 72 6d 61 74 3a 20 59 59 59 59 2d 4d 4d   format: YYYY-MM
13b70 2d 44 44 2e 20 0a 5e 54 68 65 20 74 69 6d 65 28  -DD. .^The time(
13b80 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
13b90 6e 73 20 74 68 65 20 74 69 6d 65 20 61 73 20 48  ns the time as H
13ba0 48 3a 4d 4d 3a 53 53 2e 20 0a 5e 54 68 65 20 64  H:MM:SS. .^The d
13bb0 61 74 65 74 69 6d 65 28 29 20 66 75 6e 63 74 69  atetime() functi
13bc0 6f 6e 20 72 65 74 75 72 6e 73 20 22 59 59 59 59  on returns "YYYY
13bd0 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22  -MM-DD HH:MM:SS"
13be0 2e 20 0a 5e 28 54 68 65 20 6a 75 6c 69 61 6e 64  . .^(The juliand
13bf0 61 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  ay() function re
13c00 74 75 72 6e 73 20 74 68 65 20 0a 5b 68 74 74 70  turns the .[http
13c10 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e  ://en.wikipedia.
13c20 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f  org/wiki/Julian_
13c30 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61 79  day | Julian day
13c40 5d 20 2d 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f  ] - the.number o
13c50 66 20 64 61 79 73 20 73 69 6e 63 65 20 6e 6f 6f  f days since noo
13c60 6e 20 69 6e 20 47 72 65 65 6e 77 69 63 68 20 6f  n in Greenwich o
13c70 6e 20 4e 6f 76 65 6d 62 65 72 20 32 34 2c 20 34  n November 24, 4
13c80 37 31 34 20 42 2e 43 2e 20 0a 28 5b 68 74 74 70  714 B.C. .([http
13c90 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e  ://en.wikipedia.
13ca0 6f 72 67 2f 77 69 6b 69 2f 50 72 6f 6c 65 70 74  org/wiki/Prolept
13cb0 69 63 5f 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c  ic_Gregorian_cal
13cc0 65 6e 64 61 72 20 7c 20 50 72 6f 6c 65 70 74 69  endar | Prolepti
13cd0 63 20 47 72 65 67 6f 72 69 61 6e 20 63 61 6c 65  c Gregorian cale
13ce0 6e 64 61 72 5d 29 2e 29 5e 0a 5e 54 68 65 20 73  ndar]).)^.^The s
13cf0 74 72 66 74 69 6d 65 28 29 20 72 6f 75 74 69 6e  trftime() routin
13d00 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 61  e returns the da
13d10 74 65 20 66 6f 72 6d 61 74 74 65 64 20 61 63 63  te formatted acc
13d20 6f 72 64 69 6e 67 20 74 6f 20 0a 74 68 65 20 66  ording to .the f
13d30 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73 70 65  ormat string spe
13d40 63 69 66 69 65 64 20 61 73 20 74 68 65 20 66 69  cified as the fi
13d50 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 5e 54  rst argument..^T
13d60 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67  he format string
13d70 20 73 75 70 70 6f 72 74 73 20 74 68 65 20 6d 6f   supports the mo
13d80 73 74 20 63 6f 6d 6d 6f 6e 20 73 75 62 73 74 69  st common substi
13d90 74 75 74 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e  tutions found in
13da0 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 6f 70   the .[http://op
13db0 65 6e 67 72 6f 75 70 2e 6f 72 67 2f 6f 6e 6c 69  engroup.org/onli
13dc0 6e 65 70 75 62 73 2f 30 30 37 39 30 38 37 39 39  nepubs/007908799
13dd0 2f 78 73 68 2f 73 74 72 66 74 69 6d 65 2e 68 74  /xsh/strftime.ht
13de0 6d 6c 20 7c 20 73 74 72 66 74 69 6d 65 28 29 20  ml | strftime() 
13df0 66 75 6e 63 74 69 6f 6e 5d 0a 66 72 6f 6d 20 74  function].from t
13e00 68 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c 69  he standard C li
13e10 62 72 61 72 79 20 70 6c 75 73 20 74 77 6f 20 6e  brary plus two n
13e20 65 77 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73  ew substitutions
13e30 2c 20 25 66 20 61 6e 64 20 25 4a 2e 0a 5e 28 54  , %f and %J..^(T
13e40 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 20  he following is 
13e50 61 20 63 6f 6d 70 6c 65 74 65 20 6c 69 73 74 20  a complete list 
13e60 6f 66 20 76 61 6c 69 64 20 73 74 72 66 74 69 6d  of valid strftim
13e70 65 28 29 20 73 75 62 73 74 69 74 75 74 69 6f 6e  e() substitution
13e80 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  s:.</p>..<blockq
13e90 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72  uote>.<table bor
13ea0 64 65 72 3d 22 30 22 20 63 65 6c 6c 70 61 64 64  der="0" cellpadd
13eb0 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70 61 63  ing="0" cellspac
13ec0 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74 64  ing="0">.<tr><td
13ed0 3e 3c 74 64 20 77 69 64 74 68 3d 22 31 30 22 3e  ><td width="10">
13ee0 3c 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 3c  <td></tr>..<tr><
13ef0 74 64 3e 20 25 64 20 3c 74 64 3e 3c 74 64 3e 20  td> %d <td><td> 
13f00 64 61 79 20 6f 66 20 6d 6f 6e 74 68 3a 20 30 30  day of month: 00
13f10 0a 3c 74 72 3e 3c 74 64 3e 20 25 66 20 3c 74 64  .<tr><td> %f <td
13f20 3e 3c 74 64 3e 20 66 72 61 63 74 69 6f 6e 61 6c  ><td> fractional
13f30 20 73 65 63 6f 6e 64 73 3a 20 53 53 2e 53 53 53   seconds: SS.SSS
13f40 0a 3c 74 72 3e 3c 74 64 3e 20 25 48 20 3c 74 64  .<tr><td> %H <td
13f50 3e 3c 74 64 3e 20 68 6f 75 72 3a 20 30 30 2d 32  ><td> hour: 00-2
13f60 34 20 0a 3c 74 72 3e 3c 74 64 3e 20 25 6a 20 3c  4 .<tr><td> %j <
13f70 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 79  td><td> day of y
13f80 65 61 72 3a 20 30 30 31 2d 33 36 36 0a 3c 74 72  ear: 001-366.<tr
13f90 3e 3c 74 64 3e 20 25 4a 20 3c 74 64 3e 3c 74 64  ><td> %J <td><td
13fa0 3e 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d  > Julian day num
13fb0 62 65 72 0a 3c 74 72 3e 3c 74 64 3e 20 25 6d 20  ber.<tr><td> %m 
13fc0 3c 74 64 3e 3c 74 64 3e 20 6d 6f 6e 74 68 3a 20  <td><td> month: 
13fd0 30 31 2d 31 32 0a 3c 74 72 3e 3c 74 64 3e 20 25  01-12.<tr><td> %
13fe0 4d 20 3c 74 64 3e 3c 74 64 3e 20 6d 69 6e 75 74  M <td><td> minut
13ff0 65 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64  e: 00-59.<tr><td
14000 3e 20 25 73 20 3c 74 64 3e 3c 74 64 3e 20 73 65  > %s <td><td> se
14010 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30  conds since 1970
14020 2d 30 31 2d 30 31 0a 3c 74 72 3e 3c 74 64 3e 20  -01-01.<tr><td> 
14030 25 53 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f  %S <td><td> seco
14040 6e 64 73 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c  nds: 00-59.<tr><
14050 74 64 3e 20 25 77 20 3c 74 64 3e 3c 74 64 3e 20  td> %w <td><td> 
14060 64 61 79 20 6f 66 20 77 65 65 6b 20 30 2d 36 20  day of week 0-6 
14070 77 69 74 68 20 73 75 6e 64 61 79 3d 3d 30 0a 3c  with sunday==0.<
14080 74 72 3e 3c 74 64 3e 20 25 57 20 3c 74 64 3e 3c  tr><td> %W <td><
14090 74 64 3e 20 77 65 65 6b 20 6f 66 20 79 65 61 72  td> week of year
140a0 3a 20 30 30 2d 35 33 0a 3c 74 72 3e 3c 74 64 3e  : 00-53.<tr><td>
140b0 20 25 59 20 3c 74 64 3e 3c 74 64 3e 20 79 65 61   %Y <td><td> yea
140c0 72 3a 20 30 30 30 30 2d 39 39 39 39 0a 3c 74 72  r: 0000-9999.<tr
140d0 3e 3c 74 64 3e 20 25 25 20 3c 74 64 3e 3c 74 64  ><td> %% <td><td
140e0 3e 20 25 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62  > %.</table>.</b
140f0 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70  lockquote>)^..<p
14100 3e 0a 5e 28 4e 6f 74 69 63 65 20 74 68 61 74 20  >.^(Notice that 
14110 61 6c 6c 20 6f 74 68 65 72 20 64 61 74 65 20 61  all other date a
14120 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  nd time function
14130 73 20 63 61 6e 20 62 65 20 65 78 70 72 65 73 73  s can be express
14140 65 64 0a 69 6e 20 74 65 72 6d 73 20 6f 66 20 73  ed.in terms of s
14150 74 72 66 74 69 6d 65 28 29 3a 0a 3c 2f 70 3e 0a  trftime():.</p>.
14160 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74  .<blockquote>.<t
14170 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20  able border="0" 
14180 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22 20  cellpadding="0" 
14190 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e  cellspacing="0">
141a0 0a 3c 74 72 3e 3c 74 64 3e 3c 62 3e 46 75 6e 63  .<tr><td><b>Func
141b0 74 69 6f 6e 3c 2f 62 3e 3c 74 64 20 77 69 64 74  tion</b><td widt
141c0 68 3d 22 33 30 22 3e 3c 74 64 3e 3c 62 3e 45 71  h="30"><td><b>Eq
141d0 75 69 76 61 6c 65 6e 74 20 73 74 72 66 74 69 6d  uivalent strftim
141e0 65 28 29 3c 2f 62 3e 0a 3c 74 72 3e 3c 74 64 3e  e()</b>.<tr><td>
141f0 20 20 20 64 61 74 65 28 2e 2e 2e 29 20 20 20 20     date(...)    
14200 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66    <td><td>  strf
14210 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 27 2c  time('%Y-%m-%d',
14220 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20   ...).<tr><td>  
14230 20 74 69 6d 65 28 2e 2e 2e 29 20 20 20 20 20 20   time(...)      
14240 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69  <td><td>  strfti
14250 6d 65 28 27 25 48 3a 25 4d 3a 25 53 27 2c 20 2e  me('%H:%M:%S', .
14260 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64  ..).<tr><td>   d
14270 61 74 65 74 69 6d 65 28 2e 2e 2e 29 20 20 3c 74  atetime(...)  <t
14280 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65  d><td>  strftime
14290 28 27 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d  ('%Y-%m-%d %H:%M
142a0 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c  :%S', ...).<tr><
142b0 74 64 3e 20 20 20 6a 75 6c 69 61 6e 64 61 79 28  td>   julianday(
142c0 2e 2e 2e 29 20 3c 74 64 3e 3c 74 64 3e 20 20 73  ...) <td><td>  s
142d0 74 72 66 74 69 6d 65 28 27 25 4a 27 2c 20 2e 2e  trftime('%J', ..
142e0 2e 29 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c  .).</table>.</bl
142f0 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e  ockquote>)^..<p>
14300 0a 54 68 65 20 6f 6e 6c 79 20 72 65 61 73 6f 6e  .The only reason
14310 73 20 66 6f 72 20 70 72 6f 76 69 64 69 6e 67 20  s for providing 
14320 66 75 6e 63 74 69 6f 6e 73 20 6f 74 68 65 72 20  functions other 
14330 74 68 61 6e 20 73 74 72 66 74 69 6d 65 28 29 20  than strftime() 
14340 69 73 0a 66 6f 72 20 63 6f 6e 76 65 6e 69 65 6e  is.for convenien
14350 63 65 20 61 6e 64 20 66 6f 72 20 65 66 66 69 63  ce and for effic
14360 69 65 6e 63 79 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33  iency..</p>..<h3
14370 3e 54 69 6d 65 20 53 74 72 69 6e 67 73 3c 2f 68  >Time Strings</h
14380 33 3e 0a 0a 3c 70 3e 5e 28 41 20 74 69 6d 65 20  3>..<p>^(A time 
14390 73 74 72 69 6e 67 20 63 61 6e 20 62 65 20 69 6e  string can be in
143a0 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c   any of the foll
143b0 6f 77 69 6e 67 20 66 6f 72 6d 61 74 73 3a 3c 2f  owing formats:</
143c0 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c 69  p>..<ol>.<li> <i
143d0 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 0a  >YYYY-MM-DD</i>.
143e0 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
143f0 44 44 20 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69  DD HH:MM</i>.<li
14400 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20  > <i>YYYY-MM-DD 
14410 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69  HH:MM:SS</i>.<li
14420 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20  > <i>YYYY-MM-DD 
14430 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e  HH:MM:SS.SSS</i>
14440 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
14450 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c  -DD</i><b>T</b><
14460 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e  i>HH:MM</i>.<li>
14470 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f   <i>YYYY-MM-DD</
14480 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a  i><b>T</b><i>HH:
14490 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  MM:SS</i>.<li> <
144a0 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e  i>YYYY-MM-DD</i>
144b0 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d  <b>T</b><i>HH:MM
144c0 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e  :SS.SSS</i>.<li>
144d0 20 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c   <i>HH:MM</i>.<l
144e0 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f  i> <i>HH:MM:SS</
144f0 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d  i>.<li> <i>HH:MM
14500 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e  :SS.SSS</i>.<li>
14510 20 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69 3e   <b>now</b>.<li>
14520 20 3c 69 3e 44 44 44 44 44 44 44 44 44 44 3c 2f   <i>DDDDDDDDDD</
14530 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 0a  i>.</ol>)^..<p>.
14540 5e 49 6e 20 66 6f 72 6d 61 74 73 20 35 20 74 68  ^In formats 5 th
14550 72 6f 75 67 68 20 37 2c 20 74 68 65 20 22 54 22  rough 7, the "T"
14560 20 69 73 20 61 20 6c 69 74 65 72 61 6c 20 63 68   is a literal ch
14570 61 72 61 63 74 65 72 20 73 65 70 61 72 61 74 69  aracter separati
14580 6e 67 20 0a 74 68 65 20 64 61 74 65 20 61 6e 64  ng .the date and
14590 20 74 68 65 20 74 69 6d 65 2c 20 61 73 20 72 65   the time, as re
145a0 71 75 69 72 65 64 20 62 79 20 0a 5b 68 74 74 70  quired by .[http
145b0 3a 2f 2f 77 77 77 2e 77 33 63 2e 6f 72 67 2f 54  ://www.w3c.org/T
145c0 52 2f 4e 4f 54 45 2d 64 61 74 65 74 69 6d 65 20  R/NOTE-datetime 
145d0 7c 20 49 53 4f 2d 38 36 30 31 5d 2e 20 0a 5e 46  | ISO-8601]. .^F
145e0 6f 72 6d 61 74 73 20 38 20 74 68 72 6f 75 67 68  ormats 8 through
145f0 20 31 30 20 74 68 61 74 20 73 70 65 63 69 66 79   10 that specify
14600 20 6f 6e 6c 79 20 61 20 74 69 6d 65 20 61 73 73   only a time ass
14610 75 6d 65 20 61 20 64 61 74 65 20 6f 66 20 0a 32  ume a date of .2
14620 30 30 30 2d 30 31 2d 30 31 2e 20 46 6f 72 6d 61  000-01-01. Forma
14630 74 20 31 31 2c 20 74 68 65 20 73 74 72 69 6e 67  t 11, the string
14640 20 27 6e 6f 77 27 2c 20 69 73 20 63 6f 6e 76 65   'now', is conve
14650 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 0a 63  rted into the .c
14660 75 72 72 65 6e 74 20 64 61 74 65 20 61 6e 64 20  urrent date and 
14670 74 69 6d 65 20 61 73 20 6f 62 74 61 69 6e 65 64  time as obtained
14680 20 66 72 6f 6d 20 74 68 65 20 78 43 75 72 72 65   from the xCurre
14690 6e 74 54 69 6d 65 20 6d 65 74 68 6f 64 0a 6f 66  ntTime method.of
146a0 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 76 66   the [sqlite3_vf
146b0 73 5d 20 6f 62 6a 65 63 74 20 69 6e 20 75 73 65  s] object in use
146c0 2e 0a 5e 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69  ..^[http://en.wi
146d0 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
146e0 2f 43 6f 6f 72 64 69 6e 61 74 65 64 5f 55 6e 69  /Coordinated_Uni
146f0 76 65 72 73 61 6c 5f 54 69 6d 65 20 7c 20 55 6e  versal_Time | Un
14700 69 76 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61  iversal Coordina
14710 74 65 64 20 54 69 6d 65 20 28 55 54 43 29 5d 20  ted Time (UTC)] 
14720 69 73 20 75 73 65 64 2e 20 0a 5e 46 6f 72 6d 61  is used. .^Forma
14730 74 20 31 32 20 69 73 20 74 68 65 20 0a 5b 68 74  t 12 is the .[ht
14740 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69  tp://en.wikipedi
14750 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61  a.org/wiki/Julia
14760 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64  n_day | Julian d
14770 61 79 20 6e 75 6d 62 65 72 5d 0a 65 78 70 72 65  ay number].expre
14780 73 73 65 64 20 61 73 20 61 20 66 6c 6f 61 74 69  ssed as a floati
14790 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a  ng point value..
147a0 3c 2f 70 3e 0a 0a 3c 68 33 3e 4d 6f 64 69 66 69  </p>..<h3>Modifi
147b0 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68  ers</h3>..<p>^Th
147c0 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20 63 61  e time string ca
147d0 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79  n be followed by
147e0 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f   zero or more mo
147f0 64 69 66 69 65 72 73 20 74 68 61 74 20 0a 61 6c  difiers that .al
14800 74 65 72 20 74 68 65 20 64 61 74 65 20 61 6e 64  ter the date and
14810 20 74 69 6d 65 20 73 74 72 69 6e 67 2e 20 5e 45   time string. ^E
14820 61 63 68 20 6d 6f 64 69 66 69 65 72 0a 69 73 20  ach modifier.is 
14830 61 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  a transformation
14840 20 74 68 61 74 20 69 73 20 61 70 70 6c 69 65 64   that is applied
14850 20 74 6f 20 74 68 65 20 74 69 6d 65 20 76 61 6c   to the time val
14860 75 65 20 74 6f 20 69 74 73 20 6c 65 66 74 2e 0a  ue to its left..
14870 5e 4d 6f 64 69 66 69 65 72 73 20 61 72 65 20 61  ^Modifiers are a
14880 70 70 6c 69 65 64 20 66 72 6f 6d 20 6c 65 66 74  pplied from left
14890 20 74 6f 20 72 69 67 68 74 3b 20 6f 72 64 65 72   to right; order
148a0 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 0a 5e   is important..^
148b0 28 54 68 65 20 61 76 61 69 6c 61 62 6c 65 20 6d  (The available m
148c0 6f 64 69 66 69 65 72 73 20 61 72 65 20 61 73 20  odifiers are as 
148d0 66 6f 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 6f  follows.</p>..<o
148e0 6c 3e 0a 3c 6c 69 3e 20 4e 4e 4e 20 64 61 79 73  l>.<li> NNN days
148f0 0a 3c 6c 69 3e 20 4e 4e 4e 20 68 6f 75 72 73 0a  .<li> NNN hours.
14900 3c 6c 69 3e 20 4e 4e 4e 20 6d 69 6e 75 74 65 73  <li> NNN minutes
14910 0a 3c 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e 4e 20 73  .<li> NNN.NNNN s
14920 65 63 6f 6e 64 73 0a 3c 6c 69 3e 20 4e 4e 4e 20  econds.<li> NNN 
14930 6d 6f 6e 74 68 73 0a 3c 6c 69 3e 20 4e 4e 4e 20  months.<li> NNN 
14940 79 65 61 72 73 0a 3c 6c 69 3e 20 73 74 61 72 74  years.<li> start
14950 20 6f 66 20 6d 6f 6e 74 68 0a 3c 6c 69 3e 20 73   of month.<li> s
14960 74 61 72 74 20 6f 66 20 79 65 61 72 0a 3c 6c 69  tart of year.<li
14970 3e 20 73 74 61 72 74 20 6f 66 20 64 61 79 0a 3c  > start of day.<
14980 6c 69 3e 20 77 65 65 6b 64 61 79 20 4e 0a 3c 6c  li> weekday N.<l
14990 69 3e 20 75 6e 69 78 65 70 6f 63 68 0a 3c 6c 69  i> unixepoch.<li
149a0 3e 20 6c 6f 63 61 6c 74 69 6d 65 0a 3c 6c 69 3e  > localtime.<li>
149b0 20 75 74 63 20 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c   utc .</ol>)^..<
149c0 70 3e 5e 54 68 65 20 66 69 72 73 74 20 73 69 78  p>^The first six
149d0 20 6d 6f 64 69 66 69 65 72 73 20 28 31 20 74 68   modifiers (1 th
149e0 72 6f 75 67 68 20 36 29 20 0a 73 69 6d 70 6c 79  rough 6) .simply
149f0 20 61 64 64 20 74 68 65 20 73 70 65 63 69 66 69   add the specifi
14a00 65 64 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d  ed amount of tim
14a10 65 20 74 6f 20 74 68 65 20 64 61 74 65 20 61 6e  e to the date an
14a20 64 20 74 69 6d 65 20 0a 73 70 65 63 69 66 69 65  d time .specifie
14a30 64 20 62 79 20 74 68 65 20 70 72 65 63 65 64 69  d by the precedi
14a40 6e 67 20 74 69 6d 65 73 74 72 69 6e 67 20 61 6e  ng timestring an
14a50 64 20 6d 6f 64 69 66 69 65 72 73 2e 0a 5e 4e 6f  d modifiers..^No
14a60 74 65 20 74 68 61 74 20 22 26 70 6c 75 73 6d 6e  te that "&plusmn
14a70 3b 4e 4e 4e 20 6d 6f 6e 74 68 73 22 20 77 6f 72  ;NNN months" wor
14a80 6b 73 20 62 79 20 72 65 6e 64 65 72 69 6e 67 20  ks by rendering 
14a90 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74  the original dat
14aa0 65 20 69 6e 74 6f 0a 74 68 65 20 59 59 59 59 2d  e into.the YYYY-
14ab0 4d 4d 2d 44 44 20 66 6f 72 6d 61 74 2c 20 61 64  MM-DD format, ad
14ac0 64 69 6e 67 20 74 68 65 20 26 70 6c 75 73 6d 6e  ding the &plusmn
14ad0 3b 4e 4e 4e 20 74 6f 20 74 68 65 20 4d 4d 20 6d  ;NNN to the MM m
14ae0 6f 6e 74 68 20 76 61 6c 75 65 2c 20 74 68 65 6e  onth value, then
14af0 0a 6e 6f 72 6d 61 6c 69 7a 69 6e 67 20 74 68 65  .normalizing the
14b00 20 72 65 73 75 6c 74 2e 20 20 5e 54 68 75 73 2c   result.  ^Thus,
14b10 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68   for example, th
14b20 65 20 64 61 74 61 20 32 30 30 31 2d 30 33 2d 33  e data 2001-03-3
14b30 31 20 6d 6f 64 69 66 69 65 64 0a 62 79 20 27 2b  1 modified.by '+
14b40 31 20 6d 6f 6e 74 68 27 20 69 6e 69 74 69 61 6c  1 month' initial
14b50 6c 79 20 79 69 65 6c 64 73 20 32 30 30 31 2d 30  ly yields 2001-0
14b60 34 2d 33 31 2c 20 62 75 74 20 41 70 72 69 6c 20  4-31, but April 
14b70 6f 6e 6c 79 20 68 61 73 20 33 30 20 64 61 79 73  only has 30 days
14b80 0a 73 6f 20 74 68 65 20 64 61 74 65 20 69 73 20  .so the date is 
14b90 6e 6f 72 6d 61 6c 69 7a 65 64 20 74 6f 20 32 30  normalized to 20
14ba0 30 31 2d 30 35 2d 30 31 2e 20 20 5e 41 20 73 69  01-05-01.  ^A si
14bb0 6d 69 6c 61 72 20 65 66 66 65 63 74 20 6f 63 63  milar effect occ
14bc0 75 72 73 20 77 68 65 6e 0a 74 68 65 20 6f 72 69  urs when.the ori
14bd0 67 69 6e 61 6c 20 64 61 74 65 20 69 73 20 46 65  ginal date is Fe
14be0 62 72 75 61 72 79 20 32 39 20 6f 66 20 61 20 6c  bruary 29 of a l
14bf0 65 61 70 79 65 61 72 20 61 6e 64 20 74 68 65 20  eapyear and the 
14c00 6d 6f 64 69 66 69 65 72 20 69 73 0a 26 70 6c 75  modifier is.&plu
14c10 73 6d 6e 3b 4e 20 79 65 61 72 73 20 77 68 65 72  smn;N years wher
14c20 65 20 4e 20 69 73 20 6e 6f 74 20 61 20 6d 75 6c  e N is not a mul
14c30 74 69 70 6c 65 20 6f 66 20 66 6f 75 72 2e 3c 2f  tiple of four.</
14c40 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 73 74 61  p>..<p>^The "sta
14c50 72 74 20 6f 66 22 20 6d 6f 64 69 66 69 65 72 73  rt of" modifiers
14c60 20 28 37 20 74 68 72 6f 75 67 68 20 39 29 20 73   (7 through 9) s
14c70 68 69 66 74 20 74 68 65 20 64 61 74 65 20 62 61  hift the date ba
14c80 63 6b 77 61 72 64 73 20 0a 74 6f 20 74 68 65 20  ckwards .to the 
14c90 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
14ca0 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2c 20   current month, 
14cb0 79 65 61 72 20 6f 72 20 64 61 79 2e 3c 2f 70 3e  year or day.</p>
14cc0 0a 0a 3c 70 3e 5e 54 68 65 20 22 77 65 65 6b 64  ..<p>^The "weekd
14cd0 61 79 22 20 6d 6f 64 69 66 69 65 72 20 61 64 76  ay" modifier adv
14ce0 61 6e 63 65 73 20 74 68 65 20 64 61 74 65 20 66  ances the date f
14cf0 6f 72 77 61 72 64 20 74 6f 20 74 68 65 20 6e 65  orward to the ne
14d00 78 74 20 64 61 74 65 20 0a 77 68 65 72 65 20 74  xt date .where t
14d10 68 65 20 77 65 65 6b 64 61 79 20 6e 75 6d 62 65  he weekday numbe
14d20 72 20 69 73 20 4e 2e 20 53 75 6e 64 61 79 20 69  r is N. Sunday i
14d30 73 20 30 2c 20 4d 6f 6e 64 61 79 20 69 73 20 31  s 0, Monday is 1
14d40 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 3c  , and so forth.<
14d50 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 75 6e  /p>..<p>^The "un
14d60 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65  ixepoch" modifie
14d70 72 20 28 31 31 29 20 6f 6e 6c 79 20 77 6f 72 6b  r (11) only work
14d80 73 20 69 66 20 69 74 20 69 6d 6d 65 64 69 61 74  s if it immediat
14d90 65 6c 79 20 66 6f 6c 6c 6f 77 73 20 0a 61 20 74  ely follows .a t
14da0 69 6d 65 73 74 72 69 6e 67 20 69 6e 20 74 68 65  imestring in the
14db0 20 44 44 44 44 44 44 44 44 44 44 20 66 6f 72 6d   DDDDDDDDDD form
14dc0 61 74 2e 20 0a 5e 54 68 69 73 20 6d 6f 64 69 66  at. .^This modif
14dd0 69 65 72 20 63 61 75 73 65 73 20 74 68 65 20 44  ier causes the D
14de0 44 44 44 44 44 44 44 44 44 20 74 6f 20 62 65 20  DDDDDDDDD to be 
14df0 69 6e 74 65 72 70 72 65 74 65 64 20 6e 6f 74 20  interpreted not 
14e00 0a 61 73 20 61 20 4a 75 6c 69 61 6e 20 64 61 79  .as a Julian day
14e10 20 6e 75 6d 62 65 72 20 61 73 20 69 74 20 6e 6f   number as it no
14e20 72 6d 61 6c 6c 79 20 77 6f 75 6c 64 20 62 65 2c  rmally would be,
14e30 20 62 75 74 20 61 73 0a 5b 68 74 74 70 3a 2f 2f   but as.[http://
14e40 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67  en.wikipedia.org
14e50 2f 77 69 6b 69 2f 55 6e 69 78 5f 74 69 6d 65 20  /wiki/Unix_time 
14e60 7c 20 55 6e 69 78 20 54 69 6d 65 5d 20 2d 20 74  | Unix Time] - t
14e70 68 65 20 0a 6e 75 6d 62 65 72 20 6f 66 20 73 65  he .number of se
14e80 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30  conds since 1970
14e90 2e 20 20 49 66 20 74 68 65 20 22 75 6e 69 78 65  .  If the "unixe
14ea0 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 64  poch" modifier d
14eb0 6f 65 73 20 6e 6f 74 0a 66 6f 6c 6c 6f 77 20 61  oes not.follow a
14ec0 20 74 69 6d 65 73 74 72 69 6e 67 20 6f 66 20 74   timestring of t
14ed0 68 65 20 66 6f 72 6d 20 44 44 44 44 44 44 44 44  he form DDDDDDDD
14ee0 44 44 20 77 68 69 63 68 20 65 78 70 72 65 73 73  DD which express
14ef0 65 73 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66  es the number.of
14f00 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31   seconds since 1
14f10 39 37 30 20 6f 72 20 69 66 20 6f 74 68 65 72 20  970 or if other 
14f20 6d 6f 64 69 66 69 65 72 73 0a 73 65 70 61 72 61  modifiers.separa
14f30 74 65 20 74 68 65 20 22 75 6e 69 78 65 70 6f 63  te the "unixepoc
14f40 68 22 20 6d 6f 64 69 66 69 65 72 20 66 72 6f 6d  h" modifier from
14f50 20 70 72 69 6f 72 20 44 44 44 44 44 44 44 44 44   prior DDDDDDDDD
14f60 44 20 74 68 65 6e 20 74 68 65 0a 62 65 68 61 76  D then the.behav
14f70 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ior is undefined
14f80 2e 0a 44 75 65 20 74 6f 20 70 72 65 63 69 73 69  ..Due to precisi
14f90 6f 6e 20 6c 69 6d 69 74 61 74 69 6f 6e 73 20 69  on limitations i
14fa0 6d 70 6f 73 65 64 20 62 79 20 74 68 65 20 69 6d  mposed by the im
14fb0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 75 73  plementations us
14fc0 65 0a 6f 66 20 36 34 2d 62 69 74 20 69 6e 74 65  e.of 64-bit inte
14fd0 67 65 72 73 2c 20 74 68 65 20 22 75 6e 69 78 65  gers, the "unixe
14fe0 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 6f  poch" modifier o
14ff0 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 0a 64 61  nly works for.da
15000 74 65 73 20 62 65 74 77 65 65 6e 20 30 30 30 30  tes between 0000
15010 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 20  -01-01 00:00:00 
15020 61 6e 64 20 35 33 35 32 2d 31 31 2d 30 31 20 31  and 5352-11-01 1
15030 30 3a 35 32 3a 34 37 20 28 75 6e 69 78 20 74 69  0:52:47 (unix ti
15040 6d 65 73 0a 6f 66 20 2d 36 32 31 36 37 32 31 39  mes.of -62167219
15050 32 30 30 20 74 68 72 6f 75 67 68 20 31 30 36 37  200 through 1067
15060 35 31 39 39 31 36 37 29 2e 3c 2f 70 3e 0a 0a 3c  5199167).</p>..<
15070 70 3e 5e 54 68 65 20 22 6c 6f 63 61 6c 74 69 6d  p>^The "localtim
15080 65 22 20 6d 6f 64 69 66 69 65 72 20 28 31 32 29  e" modifier (12)
15090 20 61 73 73 75 6d 65 73 20 74 68 65 20 74 69 6d   assumes the tim
150a0 65 20 73 74 72 69 6e 67 20 74 6f 20 69 74 73 20  e string to its 
150b0 6c 65 66 74 20 69 73 20 69 6e 0a 55 6e 69 76 65  left is in.Unive
150c0 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64  rsal Coordinated
150d0 20 54 69 6d 65 20 28 55 54 43 29 20 61 6e 64 20   Time (UTC) and 
150e0 61 64 6a 75 73 74 73 20 74 68 65 20 74 69 6d 65  adjusts the time
150f0 0a 73 74 72 69 6e 67 20 73 6f 20 74 68 61 74 20  .string so that 
15100 69 74 20 64 69 73 70 6c 61 79 73 20 6c 6f 63 61  it displays loca
15110 6c 74 69 6d 65 2e 20 20 49 66 20 22 6c 6f 63 61  ltime.  If "loca
15120 6c 74 69 6d 65 22 0a 66 6f 6c 6c 6f 77 73 20 61  ltime".follows a
15130 20 74 69 6d 65 20 74 68 61 74 20 69 73 20 6e 6f   time that is no
15140 74 20 55 54 43 2c 20 74 68 65 6e 20 74 68 65 20  t UTC, then the 
15150 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65  behavior is unde
15160 66 69 6e 65 64 2e 0a 5e 28 54 68 65 20 22 75 74  fined..^(The "ut
15170 63 22 20 69 73 20 74 68 65 20 6f 70 70 6f 73 69  c" is the opposi
15180 74 65 20 6f 66 20 22 6c 6f 63 61 6c 74 69 6d 65  te of "localtime
15190 22 2e 20 20 22 75 74 63 22 20 61 73 73 75 6d 65  ".  "utc" assume
151a0 73 20 74 68 61 74 20 74 68 65 20 73 74 72 69 6e  s that the strin
151b0 67 0a 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73  g.to its left is
151c0 20 69 6e 20 74 68 65 20 6c 6f 63 61 6c 20 74 69   in the local ti
151d0 6d 65 7a 6f 6e 65 20 61 6e 64 20 61 64 6a 75 73  mezone and adjus
151e0 74 73 20 74 68 61 74 20 73 74 72 69 6e 67 20 74  ts that string t
151f0 6f 20 62 65 20 69 6e 20 55 54 43 2e 29 5e 0a 49  o be in UTC.)^.I
15200 66 20 74 68 65 20 70 72 69 6f 72 20 73 74 72 69  f the prior stri
15210 6e 67 20 69 73 20 6e 6f 74 20 69 6e 20 6c 6f 63  ng is not in loc
15220 61 6c 74 69 6d 65 2c 20 74 68 65 6e 20 74 68 65  altime, then the
15230 20 72 65 73 75 6c 74 20 6f 66 20 22 75 74 63 22   result of "utc"
15240 20 69 73 0a 75 6e 64 65 66 69 6e 65 64 2e 3c 2f   is.undefined.</
15250 70 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c 65 73  p>..<h3>Examples
15260 3c 2f 68 33 3e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70  </h3>..^(<p>Comp
15270 75 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ute the current 
15280 64 61 74 65 2e 3c 70 3e 0a 0a 3c 62 6c 6f 63 6b  date.<p>..<block
15290 71 75 6f 74 65 3e 53 45 4c 45 43 54 20 64 61 74  quote>SELECT dat
152a0 65 28 27 6e 6f 77 27 29 3b 3c 2f 62 6c 6f 63 6b  e('now');</block
152b0 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43  quote>)^..^(<p>C
152c0 6f 6d 70 75 74 65 20 74 68 65 20 6c 61 73 74 20  ompute the last 
152d0 64 61 79 20 6f 66 20 74 68 65 20 63 75 72 72 65  day of the curre
152e0 6e 74 20 6d 6f 6e 74 68 2e 3c 2f 70 3e 0a 0a 3c  nt month.</p>..<
152f0 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45 43  blockquote>SELEC
15300 54 20 64 61 74 65 28 27 6e 6f 77 27 2c 27 73 74  T date('now','st
15310 61 72 74 20 6f 66 20 6d 6f 6e 74 68 27 2c 27 2b  art of month','+
15320 31 20 6d 6f 6e 74 68 27 2c 27 2d 31 20 64 61 79  1 month','-1 day
15330 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ');.</blockquote
15340 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74  >)^..^(<p>Comput
15350 65 20 74 68 65 20 64 61 74 65 20 61 6e 64 20 74  e the date and t
15360 69 6d 65 20 67 69 76 65 6e 20 61 20 75 6e 69 78  ime given a unix
15370 20 74 69 6d 65 73 74 61 6d 70 20 31 30 39 32 39   timestamp 10929
15380 34 31 34 36 36 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f  41466.</p>..<blo
15390 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20 53 45 4c  ckquote>.    SEL
153a0 45 43 54 20 64 61 74 65 74 69 6d 65 28 31 30 39  ECT datetime(109
153b0 32 39 34 31 34 36 36 2c 20 27 75 6e 69 78 65 70  2941466, 'unixep
153c0 6f 63 68 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  och');.</blockqu
153d0 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d  ote>)^..^(<p>Com
153e0 70 75 74 65 20 74 68 65 20 64 61 74 65 20 61 6e  pute the date an
153f0 64 20 74 69 6d 65 20 67 69 76 65 6e 20 61 20 75  d time given a u
15400 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 20 31 30  nix timestamp 10
15410 39 32 39 34 31 34 36 36 2c 20 61 6e 64 20 0a 63  92941466, and .c
15420 6f 6d 70 65 6e 73 61 74 65 20 66 6f 72 20 79 6f  ompensate for yo
15430 75 72 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e  ur local timezon
15440 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  e.</p>..<blockqu
15450 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 64 61  ote>.  SELECT da
15460 74 65 74 69 6d 65 28 31 30 39 32 39 34 31 34 36  tetime(109294146
15470 36 2c 20 27 75 6e 69 78 65 70 6f 63 68 27 2c 20  6, 'unixepoch', 
15480 27 6c 6f 63 61 6c 74 69 6d 65 27 29 3b 0a 3c 2f  'localtime');.</
15490 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e  blockquote>)^..^
154a0 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
154b0 63 75 72 72 65 6e 74 20 75 6e 69 78 20 74 69 6d  current unix tim
154c0 65 73 74 61 6d 70 2e 3c 2f 70 3e 0a 0a 3c 62 6c  estamp.</p>..<bl
154d0 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45  ockquote>.  SELE
154e0 43 54 20 73 74 72 66 74 69 6d 65 28 27 25 73 27  CT strftime('%s'
154f0 2c 27 6e 6f 77 27 29 3b 0a 3c 2f 62 6c 6f 63 6b  ,'now');.</block
15500 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43  quote>)^..^(<p>C
15510 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65  ompute the numbe
15520 72 20 6f 66 20 64 61 79 73 20 73 69 6e 63 65 20  r of days since 
15530 74 68 65 20 73 69 67 6e 69 6e 67 20 6f 66 20 74  the signing of t
15540 68 65 20 55 53 20 44 65 63 6c 61 72 61 74 69 6f  he US Declaratio
15550 6e 0a 6f 66 20 49 6e 64 65 70 65 6e 64 65 6e 74  n.of Independent
15560 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
15570 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 6a 75 6c  te>.  SELECT jul
15580 69 61 6e 64 61 79 28 27 6e 6f 77 27 29 20 2d 20  ianday('now') - 
15590 6a 75 6c 69 61 6e 64 61 79 28 27 31 37 37 36 2d  julianday('1776-
155a0 30 37 2d 30 34 27 29 3b 0a 3c 2f 62 6c 6f 63 6b  07-04');.</block
155b0 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43  quote>)^..^(<p>C
155c0 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65  ompute the numbe
155d0 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e  r of seconds sin
155e0 63 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  ce a particular 
155f0 6d 6f 6d 65 6e 74 20 69 6e 20 32 30 30 34 3a 3c  moment in 2004:<
15600 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
15610 3e 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66 74  >.  SELECT strft
15620 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 20  ime('%s','now') 
15630 2d 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c  - strftime('%s',
15640 27 32 30 30 34 2d 30 31 2d 30 31 20 30 32 3a 33  '2004-01-01 02:3
15650 34 3a 35 36 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  4:56');.</blockq
15660 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 0a 43  uote>)^..^(<p>.C
15670 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74 65 20  ompute the date 
15680 6f 66 20 74 68 65 20 66 69 72 73 74 20 54 75 65  of the first Tue
15690 73 64 61 79 20 69 6e 20 4f 63 74 6f 62 65 72 0a  sday in October.
156a0 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
156b0 79 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  year..</p>..<blo
156c0 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43  ckquote>.  SELEC
156d0 54 20 64 61 74 65 28 27 6e 6f 77 27 2c 27 73 74  T date('now','st
156e0 61 72 74 20 6f 66 20 79 65 61 72 27 2c 27 2b 39  art of year','+9
156f0 20 6d 6f 6e 74 68 73 27 2c 27 77 65 65 6b 64 61   months','weekda
15700 79 20 32 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  y 2');.</blockqu
15710 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d  ote>)^..^(<p>Com
15720 70 75 74 65 20 74 68 65 20 74 69 6d 65 20 73 69  pute the time si
15730 6e 63 65 20 74 68 65 20 75 6e 69 78 20 65 70 6f  nce the unix epo
15740 63 68 20 69 6e 20 73 65 63 6f 6e 64 73 20 0a 28  ch in seconds .(
15750 6c 69 6b 65 20 73 74 72 66 74 69 6d 65 28 27 25  like strftime('%
15760 73 27 2c 27 6e 6f 77 27 29 20 65 78 63 65 70 74  s','now') except
15770 20 69 6e 63 6c 75 64 65 73 20 66 72 61 63 74 69   includes fracti
15780 6f 6e 61 6c 20 70 61 72 74 29 3a 3c 2f 70 3e 0a  onal part):</p>.
15790 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20  .<blockquote>.  
157a0 53 45 4c 45 43 54 20 28 6a 75 6c 69 61 6e 64 61  SELECT (julianda
157b0 79 28 27 6e 6f 77 27 29 20 2d 20 32 34 34 30 35  y('now') - 24405
157c0 38 37 2e 35 29 2a 38 36 34 30 30 2e 30 3b 0a 3c  87.5)*86400.0;.<
157d0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
157e0 3c 68 33 3e 43 61 76 65 61 74 73 20 41 6e 64 20  <h3>Caveats And 
157f0 42 75 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  Bugs</h3>..<p>Th
15800 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66  e computation of
15810 20 6c 6f 63 61 6c 20 74 69 6d 65 20 64 65 70 65   local time depe
15820 6e 64 73 20 68 65 61 76 69 6c 79 20 6f 6e 20 74  nds heavily on t
15830 68 65 20 77 68 69 6d 20 0a 6f 66 20 70 6f 6c 69  he whim .of poli
15840 74 69 63 69 61 6e 73 20 61 6e 64 20 69 73 20 74  ticians and is t
15850 68 75 73 20 64 69 66 66 69 63 75 6c 74 20 74 6f  hus difficult to
15860 20 67 65 74 20 63 6f 72 72 65 63 74 20 66 6f 72   get correct for
15870 20 0a 61 6c 6c 20 6c 6f 63 61 6c 65 73 2e 20 5e   .all locales. ^
15880 49 6e 20 74 68 69 73 20 69 6d 70 6c 65 6d 65 6e  In this implemen
15890 74 61 74 69 6f 6e 2c 20 74 68 65 20 73 74 61 6e  tation, the stan
158a0 64 61 72 64 20 43 20 6c 69 62 72 61 72 79 20 0a  dard C library .
158b0 66 75 6e 63 74 69 6f 6e 20 6c 6f 63 61 6c 74 69  function localti
158c0 6d 65 5f 72 28 29 20 69 73 20 75 73 65 64 20 74  me_r() is used t
158d0 6f 20 61 73 73 69 73 74 20 69 6e 20 74 68 65 20  o assist in the 
158e0 63 61 6c 63 75 6c 61 74 69 6f 6e 20 6f 66 20 0a  calculation of .
158f0 6c 6f 63 61 6c 20 74 69 6d 65 2e 20 20 5e 28 54  local time.  ^(T
15900 68 65 20 0a 6c 6f 63 61 6c 74 69 6d 65 5f 72 28  he .localtime_r(
15910 29 20 43 20 66 75 6e 63 74 69 6f 6e 20 6e 6f 72  ) C function nor
15920 6d 61 6c 6c 79 20 6f 6e 6c 79 20 77 6f 72 6b 73  mally only works
15930 20 66 6f 72 20 79 65 61 72 73 0a 62 65 74 77 65   for years.betwe
15940 65 6e 20 31 39 37 30 20 61 6e 64 20 32 30 33 37  en 1970 and 2037
15950 2e 20 46 6f 72 20 64 61 74 65 73 20 6f 75 74 73  . For dates outs
15960 69 64 65 20 74 68 69 73 20 72 61 6e 67 65 2c 20  ide this range, 
15970 53 51 4c 69 74 65 20 0a 61 74 74 65 6d 70 74 73  SQLite .attempts
15980 20 74 6f 20 6d 61 70 20 74 68 65 20 79 65 61 72   to map the year
15990 20 69 6e 74 6f 20 61 6e 20 65 71 75 69 76 61 6c   into an equival
159a0 65 6e 74 20 79 65 61 72 20 77 69 74 68 69 6e 20  ent year within 
159b0 0a 74 68 69 73 20 72 61 6e 67 65 2c 20 64 6f 20  .this range, do 
159c0 74 68 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e 2c  the calculation,
159d0 20 74 68 65 6e 20 6d 61 70 20 74 68 65 20 79 65   then map the ye
159e0 61 72 20 62 61 63 6b 2e 29 5e 3c 2f 70 3e 0a 0a  ar back.)^</p>..
159f0 0a 3c 70 3e 5e 28 54 68 65 73 65 20 66 75 6e 63  .<p>^(These func
15a00 74 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20  tions only work 
15a10 66 6f 72 20 64 61 74 65 73 20 62 65 74 77 65 65  for dates betwee
15a20 6e 20 30 30 30 30 2d 30 31 2d 30 31 20 30 30 3a  n 0000-01-01 00:
15a30 30 30 3a 30 30 0a 61 6e 64 20 39 39 39 39 2d 31  00:00.and 9999-1
15a40 32 2d 33 31 20 32 33 3a 35 39 3a 35 39 20 28 6a  2-31 23:59:59 (j
15a50 75 6c 69 64 61 6e 20 64 61 79 20 6e 75 6d 62 65  ulidan day numbe
15a60 72 73 20 31 37 32 31 30 35 39 2e 35 20 74 68 72  rs 1721059.5 thr
15a70 6f 75 67 68 20 35 33 37 33 34 38 34 2e 35 29 2e  ough 5373484.5).
15a80 29 5e 0a 46 6f 72 20 64 61 74 65 73 20 6f 75 74  )^.For dates out
15a90 73 69 64 65 20 74 68 61 74 20 72 61 6e 67 65 2c  side that range,
15aa0 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
15ab0 74 68 65 73 65 0a 66 75 6e 63 74 69 6f 6e 73 20  these.functions 
15ac0 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 3c 2f  are undefined.</
15ad0 70 3e 0a 0a 3c 70 3e 4e 6f 6e 2d 56 69 73 74 61  p>..<p>Non-Vista
15ae0 20 57 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f 72   Windows platfor
15af0 6d 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 20  ms only support 
15b00 6f 6e 65 20 73 65 74 20 6f 66 20 44 53 54 20 72  one set of DST r
15b10 75 6c 65 73 2e 20 0a 56 69 73 74 61 20 6f 6e 6c  ules. .Vista onl
15b20 79 20 73 75 70 70 6f 72 74 73 20 74 77 6f 2e 20  y supports two. 
15b30 54 68 65 72 65 66 6f 72 65 2c 20 6f 6e 20 74 68  Therefore, on th
15b40 65 73 65 20 70 6c 61 74 66 6f 72 6d 73 2c 20 0a  ese platforms, .
15b50 68 69 73 74 6f 72 69 63 61 6c 20 44 53 54 20 63  historical DST c
15b60 61 6c 63 75 6c 61 74 69 6f 6e 73 20 77 69 6c 6c  alculations will
15b70 20 62 65 20 69 6e 63 6f 72 72 65 63 74 2e 20 0a   be incorrect. .
15b80 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 20  For example, in 
15b90 74 68 65 20 55 53 2c 20 69 6e 20 32 30 30 37 20  the US, in 2007 
15ba0 74 68 65 20 44 53 54 20 72 75 6c 65 73 20 63 68  the DST rules ch
15bb0 61 6e 67 65 64 2e 20 0a 4e 6f 6e 2d 56 69 73 74  anged. .Non-Vist
15bc0 61 20 57 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f  a Windows platfo
15bd0 72 6d 73 20 61 70 70 6c 79 20 74 68 65 20 6e 65  rms apply the ne
15be0 77 20 32 30 30 37 20 44 53 54 20 72 75 6c 65 73  w 2007 DST rules
15bf0 20 0a 74 6f 20 61 6c 6c 20 70 72 65 76 69 6f 75   .to all previou
15c00 73 20 79 65 61 72 73 20 61 73 20 77 65 6c 6c 2e  s years as well.
15c10 20 56 69 73 74 61 20 64 6f 65 73 20 73 6f 6d 65   Vista does some
15c20 77 68 61 74 20 62 65 74 74 65 72 0a 67 65 74 74  what better.gett
15c30 69 6e 67 20 72 65 73 75 6c 74 73 20 63 6f 72 72  ing results corr
15c40 65 63 74 20 62 61 63 6b 20 74 6f 20 31 39 38 36  ect back to 1986
15c50 2c 20 77 68 65 6e 20 74 68 65 20 72 75 6c 65 73  , when the rules
15c60 20 77 65 72 65 20 61 6c 73 6f 20 63 68 61 6e 67   were also chang
15c70 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6c 6c 20  ed.</p>..<p>All 
15c80 69 6e 74 65 72 6e 61 6c 20 63 6f 6d 70 75 74 61  internal computa
15c90 74 69 6f 6e 73 20 61 73 73 75 6d 65 20 74 68 65  tions assume the
15ca0 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b   .[http://en.wik
15cb0 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f  ipedia.org/wiki/
15cc0 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e 64  Gregorian_calend
15cd0 61 72 20 7c 20 47 72 65 67 6f 72 69 61 6e 20 63  ar | Gregorian c
15ce0 61 6c 65 6e 64 61 72 5d 0a 73 79 73 74 65 6d 2e  alendar].system.
15cf0 20 20 49 74 20 69 73 20 61 6c 73 6f 20 61 73 73    It is also ass
15d00 75 6d 65 64 20 74 68 61 74 20 65 76 65 72 79 0a  umed that every.
15d10 64 61 79 20 69 73 20 65 78 61 63 74 6c 79 20 38  day is exactly 8
15d20 36 34 30 30 20 73 65 63 6f 6e 64 73 20 69 6e 20  6400 seconds in 
15d30 64 75 72 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c  duration.</p>..<
15d40 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
15d50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15d60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15d70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15d80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15d90 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41 67 67  ###.Section {Agg
15da0 72 65 67 61 74 65 20 46 75 6e 63 74 69 6f 6e 73  regate Functions
15db0 7d 20 61 67 67 66 75 6e 63 20 7b 2a 61 67 67 66  } aggfunc {*aggf
15dc0 75 6e 63 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  unc}.</tcl>..<p>
15dd0 0a 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66  .The aggregate f
15de0 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e 20 62  unctions shown b
15df0 65 6c 6f 77 20 61 72 65 20 61 76 61 69 6c 61 62  elow are availab
15e00 6c 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  le by default.  
15e10 41 64 64 69 74 69 6f 6e 61 6c 0a 61 67 67 72 65  Additional.aggre
15e20 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 77  gate functions w
15e30 72 69 74 74 65 6e 20 69 6e 20 43 20 6d 61 79 20  ritten in C may 
15e40 62 65 20 61 64 64 65 64 20 75 73 69 6e 67 20 74  be added using t
15e50 68 65 20 0a 5b 73 71 6c 69 74 65 33 5f 63 72 65  he .[sqlite3_cre
15e60 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 3c  ate_function()]<
15e70 2f 61 3e 0a 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 70  /a>.API.</p>..<p
15e80 3e 0a 5e 49 6e 20 61 6e 79 20 61 67 67 72 65 67  >.^In any aggreg
15e90 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 74 68 61  ate function tha
15ea0 74 20 74 61 6b 65 73 20 61 20 73 69 6e 67 6c 65  t takes a single
15eb0 20 61 72 67 75 6d 65 6e 74 2c 20 74 68 61 74 20   argument, that 
15ec0 61 72 67 75 6d 65 6e 74 0a 63 61 6e 20 62 65 20  argument.can be 
15ed0 70 72 65 63 65 64 65 64 20 62 79 20 74 68 65 20  preceded by the 
15ee0 6b 65 79 77 6f 72 64 20 44 49 53 54 49 4e 43 54  keyword DISTINCT
15ef0 2e 20 20 5e 49 6e 20 73 75 63 68 20 63 61 73 65  .  ^In such case
15f00 73 2c 20 64 75 70 6c 69 63 61 74 65 0a 65 6c 65  s, duplicate.ele
15f10 6d 65 6e 74 73 20 61 72 65 20 66 69 6c 74 65 72  ments are filter
15f20 65 64 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20  ed before being 
15f30 70 61 73 73 65 64 20 69 6e 74 6f 20 74 68 65 20  passed into the 
15f40 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
15f50 6f 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c 65  on..^For example
15f60 2c 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 22  , the function "
15f70 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 58  count(distinct X
15f80 29 22 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 74  )" will return t
15f90 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 64 69 73  he number.of dis
15fa0 74 69 6e 63 74 20 76 61 6c 75 65 73 20 6f 66 20  tinct values of 
15fb0 63 6f 6c 75 6d 6e 20 58 20 69 6e 73 74 65 61 64  column X instead
15fc0 20 6f 66 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   of the total nu
15fd0 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c  mber of non-null
15fe0 0a 76 61 6c 75 65 73 20 69 6e 20 63 6f 6c 75 6d  .values in colum
15ff0 6e 20 58 2e 0a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c  n X..</p>..<tabl
16000 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70  e border=0 cellp
16010 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c 3e  adding=10>.<tcl>
16020 0a 66 75 6e 63 64 65 66 20 7b 61 76 67 28 58 29  .funcdef {avg(X)
16030 7d 20 7b 2a 61 76 67 20 7b 61 76 67 28 29 20 61  } {*avg {avg() a
16040 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
16050 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 61 76 67  n}} {.  ^The avg
16060 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65  () function.  re
16070 74 75 72 6e 73 20 74 68 65 20 61 76 65 72 61 67  turns the averag
16080 65 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 6e  e value of all n
16090 6f 6e 2d 4e 55 4c 4c 20 3c 69 3e 58 3c 2f 69 3e  on-NULL <i>X</i>
160a0 20 77 69 74 68 69 6e 20 61 0a 20 20 67 72 6f 75   within a.  grou
160b0 70 2e 20 20 5e 53 74 72 69 6e 67 20 61 6e 64 20  p.  ^String and 
160c0 42 4c 4f 42 20 76 61 6c 75 65 73 20 74 68 61 74  BLOB values that
160d0 20 64 6f 20 6e 6f 74 20 6c 6f 6f 6b 20 6c 69 6b   do not look lik
160e0 65 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 20 20  e numbers are.  
160f0 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 30  interpreted as 0
16100 2e 0a 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20  ..  ^The result 
16110 6f 66 20 61 76 67 28 29 20 69 73 20 61 6c 77 61  of avg() is alwa
16120 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f  ys a floating po
16130 69 6e 74 20 76 61 6c 75 65 20 61 73 20 6c 6f 6e  int value as lon
16140 67 20 61 73 0a 20 20 61 74 20 74 68 65 72 65 20  g as.  at there 
16150 69 73 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20  is at least one 
16160 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 65  non-NULL input e
16170 76 65 6e 20 69 66 20 61 6c 6c 0a 20 20 69 6e 70  ven if all.  inp
16180 75 74 73 20 61 72 65 20 69 6e 74 65 67 65 72 73  uts are integers
16190 2e 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  .  ^The result o
161a0 66 20 61 76 67 28 29 20 69 73 20 4e 55 4c 4c 20  f avg() is NULL 
161b0 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 20  if and only if. 
161c0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f   there are no no
161d0 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 2e 20 20  n-NULL inputs.  
161e0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 6f 75  .}..funcdef {cou
161f0 6e 74 28 58 29 20 63 6f 75 6e 74 28 2a 29 7d 20  nt(X) count(*)} 
16200 7b 2a 63 6f 75 6e 74 20 7b 63 6f 75 6e 74 28 29  {*count {count()
16210 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
16220 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 63  ion}} {.  ^The c
16230 6f 75 6e 74 28 58 29 20 66 75 6e 63 74 69 6f 6e  ount(X) function
16240 20 72 65 74 75 72 6e 73 0a 20 20 61 20 63 6f 75   returns.  a cou
16250 6e 74 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72  nt of the number
16260 20 6f 66 20 74 69 6d 65 73 0a 20 20 74 68 61 74   of times.  that
16270 20 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 6e 6f 74   <i>X</i> is not
16280 20 4e 55 4c 4c 20 69 6e 20 61 20 67 72 6f 75 70   NULL in a group
16290 2e 20 20 5e 54 68 65 20 63 6f 75 6e 74 28 2a 29  .  ^The count(*)
162a0 20 66 75 6e 63 74 69 6f 6e 0a 20 20 28 77 69 74   function.  (wit
162b0 68 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 29 20  h no arguments) 
162c0 72 65 74 75 72 6e 73 20 74 68 65 20 74 6f 74 61  returns the tota
162d0 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  l number of rows
162e0 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d   in the group..}
162f0 0a 0a 66 75 6e 63 64 65 66 20 7b 67 72 6f 75 70  ..funcdef {group
16300 5f 63 6f 6e 63 61 74 28 58 29 20 67 72 6f 75 70  _concat(X) group
16310 5f 63 6f 6e 63 61 74 28 58 2c 59 29 7d 20 7b 0a  _concat(X,Y)} {.
16320 20 20 2a 67 72 6f 75 70 5f 63 6f 6e 63 61 74 20    *group_concat 
16330 7b 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 29 20  {group_concat() 
16340 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
16350 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68 65 20 67  on}.} {.  ^The g
16360 72 6f 75 70 5f 63 6f 6e 63 61 74 28 29 20 66 75  roup_concat() fu
16370 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 0a 20  nction returns. 
16380 20 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 20   a string which 
16390 69 73 20 74 68 65 20 63 6f 6e 63 61 74 65 6e 61  is the concatena
163a0 74 69 6f 6e 20 6f 66 0a 20 20 61 6c 6c 20 6e 6f  tion of.  all no
163b0 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 6f 66  n-NULL values of
163c0 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 49 66 20   <i>X</i>.  ^If 
163d0 70 61 72 61 6d 65 74 65 72 20 3c 69 3e 59 3c 2f  parameter <i>Y</
163e0 69 3e 20 69 73 20 70 72 65 73 65 6e 74 20 74 68  i> is present th
163f0 65 6e 0a 20 20 69 73 20 69 73 20 75 73 65 64 20  en.  is is used 
16400 61 73 20 74 68 65 20 73 65 70 61 72 61 74 6f 72  as the separator
16410 0a 20 20 62 65 74 77 65 65 6e 20 69 6e 73 74 61  .  between insta
16420 6e 63 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e  nces of <i>X</i>
16430 2e 20 20 5e 41 20 63 6f 6d 6d 61 20 28 22 2c 22  .  ^A comma (","
16440 29 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65  ) is used as the
16450 20 73 65 70 61 72 61 74 6f 72 0a 20 20 69 66 20   separator.  if 
16460 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 6f 6d 69 74  <i>Y</i> is omit
16470 74 65 64 2e 20 20 54 68 65 20 6f 72 64 65 72 20  ted.  The order 
16480 6f 66 20 74 68 65 20 63 6f 6e 63 61 74 65 6e 61  of the concatena
16490 74 65 64 20 65 6c 65 6d 65 6e 74 73 20 69 73 0a  ted elements is.
164a0 20 20 61 72 62 69 74 72 61 72 79 2e 0a 7d 0a 0a    arbitrary..}..
164b0 66 75 6e 63 64 65 66 20 7b 6d 61 78 28 58 29 7d  funcdef {max(X)}
164c0 20 7b 2a 6d 61 78 41 67 67 46 75 6e 63 20 2a 61   {*maxAggFunc *a
164d0 67 67 5f 6d 61 78 20 7b 6d 61 78 28 29 20 61 67  gg_max {max() ag
164e0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
164f0 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 61 78 28  }} {.  ^The max(
16500 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
16510 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74  tion.  returns t
16520 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65  he maximum value
16530 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69   of all values i
16540 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e  n the group..  ^
16550 54 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75  The maximum valu
16560 65 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 74  e is the value t
16570 68 61 74 20 77 6f 75 6c 64 20 62 65 20 72 65 74  hat would be ret
16580 75 72 6e 65 64 20 6c 61 73 74 20 69 6e 20 61 6e  urned last in an
16590 0a 20 20 4f 52 44 45 52 20 42 59 20 6f 6e 20 74  .  ORDER BY on t
165a0 68 65 20 73 61 6d 65 20 63 6f 6c 75 6d 6e 2e 20  he same column. 
165b0 20 5e 41 67 67 72 65 67 61 74 65 20 6d 61 78 28   ^Aggregate max(
165c0 29 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 0a  ) returns NULL .
165d0 20 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66    if and only if
165e0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f   there are no no
165f0 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e  n-NULL values in
16600 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66   the group..}..f
16610 75 6e 63 64 65 66 20 7b 6d 69 6e 28 58 29 7d 20  uncdef {min(X)} 
16620 7b 2a 6d 69 6e 41 67 67 46 75 6e 63 20 2a 61 67  {*minAggFunc *ag
16630 67 5f 6d 69 6e 20 7b 6d 69 6e 28 29 20 61 67 67  g_min {min() agg
16640 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d  regate function}
16650 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 69 6e 28 29  } {.  ^The min()
16660 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
16670 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68  ion.  returns th
16680 65 20 6d 69 6e 69 6d 75 6d 20 6e 6f 6e 2d 4e 55  e minimum non-NU
16690 4c 4c 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20  LL value of all 
166a0 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72  values in the gr
166b0 6f 75 70 2e 0a 20 20 5e 54 68 65 20 6d 69 6e 69  oup..  ^The mini
166c0 6d 75 6d 20 76 61 6c 75 65 20 69 73 20 74 68 65  mum value is the
166d0 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20   first non-NULL 
166e0 76 61 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64  value that would
166f0 20 61 70 70 65 61 72 0a 20 20 69 6e 20 61 6e 20   appear.  in an 
16700 4f 52 44 45 52 20 42 59 20 6f 66 20 74 68 65 20  ORDER BY of the 
16710 63 6f 6c 75 6d 6e 2e 0a 20 20 5e 41 67 67 72 65  column..  ^Aggre
16720 67 61 74 65 20 6d 69 6e 28 29 20 72 65 74 75 72  gate min() retur
16730 6e 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64 20 6f  ns NULL if and o
16740 6e 6c 79 20 69 66 20 74 68 65 72 65 20 61 72 65  nly if there are
16750 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 0a 20 20 76   no non-NULL.  v
16760 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f  alues in the gro
16770 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  up..}..funcdef {
16780 73 75 6d 28 58 29 20 74 6f 74 61 6c 28 58 29 7d  sum(X) total(X)}
16790 20 7b 0a 20 20 2a 73 75 6d 46 75 6e 63 20 2a 73   {.  *sumFunc *s
167a0 75 6d 20 2a 74 6f 74 61 6c 0a 20 20 7b 73 75 6d  um *total.  {sum
167b0 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
167c0 63 74 69 6f 6e 7d 0a 20 20 7b 74 6f 74 61 6c 28  ction}.  {total(
167d0 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
167e0 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68 65  tion}.} {.  ^The
167f0 20 73 75 6d 28 29 20 61 6e 64 20 74 6f 74 61 6c   sum() and total
16800 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
16810 63 74 69 6f 6e 73 0a 20 20 72 65 74 75 72 6e 20  ctions.  return 
16820 73 75 6d 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e  sum of all non-N
16830 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68  ULL values in th
16840 65 20 67 72 6f 75 70 2e 0a 20 20 5e 49 66 20 74  e group..  ^If t
16850 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d  here are no non-
16860 4e 55 4c 4c 20 69 6e 70 75 74 20 72 6f 77 73 20  NULL input rows 
16870 74 68 65 6e 20 73 75 6d 28 29 20 72 65 74 75 72  then sum() retur
16880 6e 73 0a 20 20 4e 55 4c 4c 20 62 75 74 20 74 6f  ns.  NULL but to
16890 74 61 6c 28 29 20 72 65 74 75 72 6e 73 20 30 2e  tal() returns 0.
168a0 30 2e 0a 20 20 4e 55 4c 4c 20 69 73 20 6e 6f 74  0..  NULL is not
168b0 20 6e 6f 72 6d 61 6c 6c 79 20 61 20 68 65 6c 70   normally a help
168c0 66 75 6c 20 72 65 73 75 6c 74 20 66 6f 72 20 74  ful result for t
168d0 68 65 20 73 75 6d 20 6f 66 20 6e 6f 20 72 6f 77  he sum of no row
168e0 73 0a 20 20 62 75 74 20 74 68 65 20 53 51 4c 20  s.  but the SQL 
168f0 73 74 61 6e 64 61 72 64 20 72 65 71 75 69 72 65  standard require
16900 73 20 69 74 20 61 6e 64 20 6d 6f 73 74 20 6f 74  s it and most ot
16910 68 65 72 0a 20 20 53 51 4c 20 64 61 74 61 62 61  her.  SQL databa
16920 73 65 20 65 6e 67 69 6e 65 73 20 69 6d 70 6c 65  se engines imple
16930 6d 65 6e 74 20 73 75 6d 28 29 20 74 68 61 74 20  ment sum() that 
16940 77 61 79 20 73 6f 20 53 51 4c 69 74 65 20 64 6f  way so SQLite do
16950 65 73 20 69 74 20 69 6e 20 74 68 65 0a 20 20 73  es it in the.  s
16960 61 6d 65 20 77 61 79 20 69 6e 20 6f 72 64 65 72  ame way in order
16970 20 74 6f 20 62 65 20 63 6f 6d 70 61 74 69 62 6c   to be compatibl
16980 65 2e 20 20 20 54 68 65 20 6e 6f 6e 2d 73 74 61  e.   The non-sta
16990 6e 64 61 72 64 20 74 6f 74 61 6c 28 29 20 66 75  ndard total() fu
169a0 6e 63 74 69 6f 6e 0a 20 20 69 73 20 70 72 6f 76  nction.  is prov
169b0 69 64 65 64 20 61 73 20 61 20 63 6f 6e 76 65 6e  ided as a conven
169c0 69 65 6e 74 20 77 61 79 20 74 6f 20 77 6f 72 6b  ient way to work
169d0 20 61 72 6f 75 6e 64 20 74 68 69 73 20 64 65 73   around this des
169e0 69 67 6e 20 70 72 6f 62 6c 65 6d 0a 20 20 69 6e  ign problem.  in
169f0 20 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   the SQL languag
16a00 65 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 54 68  e.</p>..  <p>^Th
16a10 65 20 72 65 73 75 6c 74 20 6f 66 20 74 6f 74 61  e result of tota
16a20 6c 28 29 20 69 73 20 61 6c 77 61 79 73 20 61 20  l() is always a 
16a30 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
16a40 61 6c 75 65 2e 0a 20 20 5e 54 68 65 20 72 65 73  alue..  ^The res
16a50 75 6c 74 20 6f 66 20 73 75 6d 28 29 20 69 73 20  ult of sum() is 
16a60 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
16a70 20 69 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c   if all non-NULL
16a80 20 69 6e 70 75 74 73 20 61 72 65 20 69 6e 74 65   inputs are inte
16a90 67 65 72 73 2e 0a 20 20 5e 49 66 20 61 6e 79 20  gers..  ^If any 
16aa0 69 6e 70 75 74 20 74 6f 20 73 75 6d 28 29 20 69  input to sum() i
16ab0 73 20 6e 65 69 74 68 65 72 20 61 6e 20 69 6e 74  s neither an int
16ac0 65 67 65 72 20 6f 72 20 61 20 4e 55 4c 4c 0a 20  eger or a NULL. 
16ad0 20 74 68 65 6e 20 73 75 6d 28 29 20 72 65 74 75   then sum() retu
16ae0 72 6e 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70  rns a floating p
16af0 6f 69 6e 74 20 76 61 6c 75 65 0a 20 20 77 68 69  oint value.  whi
16b00 63 68 20 6d 69 67 68 74 20 62 65 20 61 6e 20 61  ch might be an a
16b10 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 74 6f 20  pproximation to 
16b20 74 68 65 20 74 72 75 65 20 73 75 6d 2e 3c 2f 70  the true sum.</p
16b30 3e 0a 0a 20 20 3c 70 3e 5e 53 75 6d 28 29 20 77  >..  <p>^Sum() w
16b40 69 6c 6c 20 74 68 72 6f 77 20 61 6e 20 22 69 6e  ill throw an "in
16b50 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 22 20  teger overflow" 
16b60 65 78 63 65 70 74 69 6f 6e 20 69 66 20 61 6c 6c  exception if all
16b70 20 69 6e 70 75 74 73 0a 20 20 61 72 65 20 69 6e   inputs.  are in
16b80 74 65 67 65 72 73 20 6f 72 20 4e 55 4c 4c 0a 20  tegers or NULL. 
16b90 20 61 6e 64 20 61 6e 20 69 6e 74 65 67 65 72 20   and an integer 
16ba0 6f 76 65 72 66 6c 6f 77 20 6f 63 63 75 72 73 20  overflow occurs 
16bb0 61 74 20 61 6e 79 20 70 6f 69 6e 74 20 64 75 72  at any point dur
16bc0 69 6e 67 20 74 68 65 20 63 6f 6d 70 75 74 61 74  ing the computat
16bd0 69 6f 6e 2e 0a 20 20 5e 54 6f 74 61 6c 28 29 20  ion..  ^Total() 
16be0 6e 65 76 65 72 20 74 68 72 6f 77 73 20 61 6e 20  never throws an 
16bf0 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77  integer overflow
16c00 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62  ..}.</tcl>.</tab
16c10 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  le>..<tcl>.#####
16c20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16c30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16c40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16c50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16c60 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
16c70 6e 20 49 4e 53 45 52 54 20 69 6e 73 65 72 74 20  n INSERT insert 
16c80 7b 49 4e 53 45 52 54 20 2a 49 4e 53 45 52 54 73  {INSERT *INSERTs
16c90 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  }..BubbleDiagram
16ca0 20 69 6e 73 65 72 74 2d 73 74 6d 74 20 31 0a 3c   insert-stmt 1.<
16cb0 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e  /tcl>..<p>The IN
16cc0 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 63  SERT statement c
16cd0 6f 6d 65 73 20 69 6e 20 74 68 72 65 65 20 62 61  omes in three ba
16ce0 73 69 63 20 66 6f 72 6d 73 2e 20 20 5e 54 68 65  sic forms.  ^The
16cf0 20 66 69 72 73 74 20 66 6f 72 6d 0a 28 77 69 74   first form.(wit
16d00 68 20 74 68 65 20 22 56 41 4c 55 45 53 22 20 6b  h the "VALUES" k
16d10 65 79 77 6f 72 64 29 20 63 72 65 61 74 65 73 20  eyword) creates 
16d20 61 20 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77  a single new row
16d30 20 69 6e 20 61 6e 20 65 78 69 73 74 69 6e 67 20   in an existing 
16d40 74 61 62 6c 65 2e 0a 5e 49 66 20 6e 6f 20 63 6f  table..^If no co
16d50 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 20 73 70 65  lumn-list is spe
16d60 63 69 66 69 65 64 20 74 68 65 6e 20 74 68 65 20  cified then the 
16d70 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73  number of values
16d80 20 6d 75 73 74 0a 62 65 20 74 68 65 20 73 61 6d   must.be the sam
16d90 65 20 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20  e as the number 
16da0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
16db0 65 20 74 61 62 6c 65 2e 20 20 5e 49 66 20 61 20  e table.  ^If a 
16dc0 63 6f 6c 75 6d 6e 2d 6c 69 73 74 0a 69 73 20 73  column-list.is s
16dd0 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74  pecified, then t
16de0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c  he number of val
16df0 75 65 73 20 6d 75 73 74 20 6d 61 74 63 68 20 74  ues must match t
16e00 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 73 70 65  he number of.spe
16e10 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73 2e 20  cified columns. 
16e20 20 5e 43 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65   ^Columns of the
16e30 20 74 61 62 6c 65 20 74 68 61 74 20 64 6f 20 6e   table that do n
16e40 6f 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65  ot appear in the
16e50 0a 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 61 72 65  .column list are
16e60 20 66 69 6c 6c 65 64 20 77 69 74 68 20 74 68 65   filled with the
16e70 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2c 20   default value, 
16e80 6f 72 20 77 69 74 68 20 4e 55 4c 4c 20 69 66 20  or with NULL if 
16e90 6e 6f 0a 64 65 66 61 75 6c 74 20 76 61 6c 75 65  no.default value
16ea0 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 3c   is specified..<
16eb0 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 65 63  /p>..<p>^The sec
16ec0 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68 65 20  ond form of the 
16ed0 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
16ee0 20 74 61 6b 65 73 20 69 74 73 20 64 61 74 61 20   takes its data 
16ef0 66 72 6f 6d 20 61 0a 53 45 4c 45 43 54 20 73 74  from a.SELECT st
16f00 61 74 65 6d 65 6e 74 2e 20 20 5e 54 68 65 20 6e  atement.  ^The n
16f10 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
16f20 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f   in the result o
16f30 66 20 74 68 65 0a 53 45 4c 45 43 54 20 6d 75 73  f the.SELECT mus
16f40 74 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20  t exactly match 
16f50 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
16f60 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
16f70 6c 65 20 69 66 0a 6e 6f 20 63 6f 6c 75 6d 6e 20  le if.no column 
16f80 6c 69 73 74 20 69 73 20 73 70 65 63 69 66 69 65  list is specifie
16f90 64 2c 20 6f 72 20 69 74 20 6d 75 73 74 20 6d 61  d, or it must ma
16fa0 74 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  tch the number o
16fb0 66 20 63 6f 6c 75 6d 6e 73 0a 6e 61 6d 65 64 20  f columns.named 
16fc0 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6c 69  in the column li
16fd0 73 74 2e 20 20 5e 41 20 6e 65 77 20 65 6e 74 72  st.  ^A new entr
16fe0 79 20 69 73 20 6d 61 64 65 20 69 6e 20 74 68 65  y is made in the
16ff0 20 74 61 62 6c 65 0a 66 6f 72 20 65 76 65 72 79   table.for every
17000 20 72 6f 77 20 6f 66 20 74 68 65 20 53 45 4c 45   row of the SELE
17010 43 54 20 72 65 73 75 6c 74 2e 20 20 5e 54 68 65  CT result.  ^The
17020 20 53 45 4c 45 43 54 20 6d 61 79 20 62 65 20 73   SELECT may be s
17030 69 6d 70 6c 65 0a 6f 72 20 63 6f 6d 70 6f 75 6e  imple.or compoun
17040 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  d.</p>..<p>^The 
17050 74 68 69 72 64 20 66 6f 72 6d 20 6f 66 20 61 6e  third form of an
17060 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
17070 74 20 69 73 20 77 69 74 68 20 44 45 46 41 55 4c  t is with DEFAUL
17080 54 20 56 41 4c 55 45 53 2e 0a 5e 28 54 68 65 20  T VALUES..^(The 
17090 49 4e 53 45 52 54 20 2e 2e 2e 20 44 45 46 41 55  INSERT ... DEFAU
170a0 4c 54 20 56 41 4c 55 45 53 20 73 74 61 74 65 6d  LT VALUES statem
170b0 65 6e 74 20 73 69 6d 70 6c 79 20 63 72 65 61 74  ent simply creat
170c0 65 73 20 61 20 73 69 6e 67 6c 65 20 6e 65 77 0a  es a single new.
170d0 72 6f 77 20 69 6e 20 74 68 65 20 74 61 62 6c 65  row in the table
170e0 20 69 6e 20 77 68 69 63 68 20 65 61 63 68 20 63   in which each c
170f0 6f 6c 75 6d 6e 20 69 73 20 66 69 6c 6c 65 64 20  olumn is filled 
17100 77 69 74 68 20 69 74 73 20 64 65 66 61 75 6c 74  with its default
17110 20 76 61 6c 75 65 2e 29 5e 3c 2f 70 3e 0a 0a 3c   value.)^</p>..<
17120 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  p>^The optional 
17130 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 20  conflict-clause 
17140 61 6c 6c 6f 77 73 20 74 68 65 20 73 70 65 63 69  allows the speci
17150 66 69 63 61 74 69 6f 6e 20 6f 66 20 61 6e 20 61  fication of an a
17160 6c 74 65 72 6e 61 74 69 76 65 0a 63 6f 6e 73 74  lternative.const
17170 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72  raint conflict r
17180 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
17190 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69 6e  thm to use durin
171a0 67 20 74 68 69 73 20 6f 6e 65 20 49 4e 53 45 52  g this one INSER
171b0 54 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65 65 20 74  T command..See t
171c0 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65  he section title
171d0 64 0a 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20  d.[ON CONFLICT] 
171e0 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
171f0 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 5e 46 6f 72  nformation..^For
17200 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77   compatibility w
17210 69 74 68 20 4d 79 53 51 4c 2c 20 74 68 65 20 70  ith MySQL, the p
17220 61 72 73 65 72 20 61 6c 6c 6f 77 73 20 74 68 65  arser allows the
17230 20 75 73 65 20 6f 66 20 74 68 65 0a 73 69 6e 67   use of the.sing
17240 6c 65 20 6b 65 79 77 6f 72 64 20 3c 61 20 68 72  le keyword <a hr
17250 65 66 3d 22 6c 61 6e 67 5f 72 65 70 6c 61 63 65  ef="lang_replace
17260 2e 68 74 6d 6c 22 3e 52 45 50 4c 41 43 45 3c 2f  .html">REPLACE</
17270 61 3e 20 61 73 20 61 6e 20 0a 61 6c 69 61 73 20  a> as an .alias 
17280 66 6f 72 20 22 49 4e 53 45 52 54 20 4f 52 20 52  for "INSERT OR R
17290 45 50 4c 41 43 45 22 2e 0a 3c 2f 70 3e 0a 0a 3c  EPLACE"..</p>..<
172a0 70 3e 5e 28 54 68 65 20 6f 70 74 69 6f 6e 61 6c  p>^(The optional
172b0 20 22 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61   "<i>database-na
172c0 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 22 20  me</i><b>.</b>" 
172d0 70 72 65 66 69 78 20 6f 6e 20 74 68 65 20 3c 69  prefix on the <i
172e0 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 0a  >table-name</i>.
172f0 69 73 20 73 75 70 70 6f 72 74 20 66 6f 72 20 74  is support for t
17300 6f 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54 20  op-level INSERT 
17310 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 2e  statements only.
17320 29 5e 20 20 5e 54 68 65 20 74 61 62 6c 65 20 6e  )^  ^The table n
17330 61 6d 65 20 6d 75 73 74 20 62 65 0a 75 6e 71 75  ame must be.unqu
17340 61 6c 69 66 69 65 64 20 66 6f 72 20 49 4e 53 45  alified for INSE
17350 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  RT statements th
17360 61 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20  at occur within 
17370 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d  [CREATE TRIGGER]
17380 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e 53 69   statements..^Si
17390 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 22 44 45  milarly, the "DE
173a0 46 41 55 4c 54 20 56 41 4c 55 45 53 22 20 66 6f  FAULT VALUES" fo
173b0 72 6d 20 6f 66 20 74 68 65 20 49 4e 53 45 52 54  rm of the INSERT
173c0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 75   statement is su
173d0 70 70 6f 72 74 65 64 20 66 6f 72 0a 74 6f 70 2d  pported for.top-
173e0 6c 65 76 65 6c 20 49 4e 53 45 52 54 20 73 74 61  level INSERT sta
173f0 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 20 61 6e 64  tements only and
17400 20 6e 6f 74 20 66 6f 72 20 49 4e 53 45 52 54 20   not for INSERT 
17410 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
17420 6e 0a 74 72 69 67 67 65 72 73 2e 0a 3c 70 3e 0a  n.triggers..<p>.
17430 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
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 23 23 23 23  ################
17470 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17480 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 4f  #####.Section {O
17490 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
174a0 65 7d 20 63 6f 6e 66 6c 69 63 74 20 7b 7b 63 6f  e} conflict {{co
174b0 6e 66 6c 69 63 74 20 63 6c 61 75 73 65 7d 20 7b  nflict clause} {
174c0 4f 4e 20 43 4f 4e 46 4c 49 43 54 7d 7d 0a 0a 42  ON CONFLICT}}..B
174d0 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6e  ubbleDiagram con
174e0 66 6c 69 63 74 2d 63 6c 61 75 73 65 0a 3c 2f 74  flict-clause.</t
174f0 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43  cl>..<p>The ON C
17500 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
17510 73 20 6e 6f 74 20 61 20 73 65 70 61 72 61 74 65  s not a separate
17520 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 49   SQL command.  I
17530 74 20 69 73 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64  t is a.non-stand
17540 61 72 64 20 63 6c 61 75 73 65 20 74 68 61 74 20  ard clause that 
17550 63 61 6e 20 61 70 70 65 61 72 20 69 6e 20 6d 61  can appear in ma
17560 6e 79 20 6f 74 68 65 72 20 53 51 4c 20 63 6f 6d  ny other SQL com
17570 6d 61 6e 64 73 2e 0a 49 74 20 69 73 20 67 69 76  mands..It is giv
17580 65 6e 20 69 74 73 20 6f 77 6e 20 73 65 63 74 69  en its own secti
17590 6f 6e 20 69 6e 20 74 68 69 73 20 64 6f 63 75 6d  on in this docum
175a0 65 6e 74 20 62 65 63 61 75 73 65 20 69 74 20 69  ent because it i
175b0 73 20 6e 6f 74 0a 70 61 72 74 20 6f 66 20 73 74  s not.part of st
175c0 61 6e 64 61 72 64 20 53 51 4c 20 61 6e 64 20 74  andard SQL and t
175d0 68 65 72 65 66 6f 72 65 20 6d 69 67 68 74 20 6e  herefore might n
175e0 6f 74 20 62 65 20 66 61 6d 69 6c 69 61 72 2e 3c  ot be familiar.<
175f0 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 79 6e  /p>..<p>^The syn
17600 74 61 78 20 66 6f 72 20 74 68 65 20 4f 4e 20 43  tax for the ON C
17610 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
17620 73 20 61 73 20 73 68 6f 77 6e 20 61 62 6f 76 65  s as shown above
17630 20 66 6f 72 0a 74 68 65 20 43 52 45 41 54 45 20   for.the CREATE 
17640 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 2e 20 20  TABLE command.  
17650 5e 46 6f 72 20 74 68 65 20 49 4e 53 45 52 54 20  ^For the INSERT 
17660 61 6e 64 0a 55 50 44 41 54 45 20 63 6f 6d 6d 61  and.UPDATE comma
17670 6e 64 73 2c 20 74 68 65 20 6b 65 79 77 6f 72 64  nds, the keyword
17680 73 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 22 20  s "ON CONFLICT" 
17690 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 20  are replaced by 
176a0 22 4f 52 22 2c 20 74 6f 20 6d 61 6b 65 0a 74 68  "OR", to make.th
176b0 65 20 73 79 6e 74 61 78 20 73 65 65 6d 20 6d 6f  e syntax seem mo
176c0 72 65 20 6e 61 74 75 72 61 6c 2e 20 20 5e 46 6f  re natural.  ^Fo
176d0 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 73 74 65  r example, inste
176e0 61 64 20 6f 66 0a 22 49 4e 53 45 52 54 20 4f 4e  ad of."INSERT ON
176f0 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45   CONFLICT IGNORE
17700 22 20 77 65 20 68 61 76 65 20 22 49 4e 53 45 52  " we have "INSER
17710 54 20 4f 52 20 49 47 4e 4f 52 45 22 2e 0a 54 68  T OR IGNORE"..Th
17720 65 20 6b 65 79 77 6f 72 64 73 20 63 68 61 6e 67  e keywords chang
17730 65 20 62 75 74 20 74 68 65 20 6d 65 61 6e 69 6e  e but the meanin
17740 67 20 6f 66 20 74 68 65 20 63 6c 61 75 73 65 20  g of the clause 
17750 69 73 20 74 68 65 20 73 61 6d 65 0a 65 69 74 68  is the same.eith
17760 65 72 20 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e  er way.</p>..<p>
17770 5e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ^The ON CONFLICT
17780 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65   clause specifie
17790 73 20 61 6e 20 61 6c 67 6f 72 69 74 68 6d 20 75  s an algorithm u
177a0 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 0a 63  sed to resolve.c
177b0 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69  onstraint confli
177c0 63 74 73 2e 20 20 5e 54 68 65 72 65 20 61 72 65  cts.  ^There are
177d0 20 66 69 76 65 20 63 6f 6e 66 6c 69 63 74 20 72   five conflict r
177e0 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
177f0 74 68 6d 20 63 68 6f 69 63 65 73 3a 0a 52 4f 4c  thm choices:.ROL
17800 4c 42 41 43 4b 2c 20 41 42 4f 52 54 2c 20 46 41  LBACK, ABORT, FA
17810 49 4c 2c 20 49 47 4e 4f 52 45 2c 20 61 6e 64 20  IL, IGNORE, and 
17820 52 45 50 4c 41 43 45 2e 0a 5e 54 68 65 20 64 65  REPLACE..^The de
17830 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72  fault conflict r
17840 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
17850 74 68 6d 20 69 73 20 41 42 4f 52 54 2e 20 20 54  thm is ABORT.  T
17860 68 69 73 0a 69 73 20 77 68 61 74 20 74 68 65 79  his.is what they
17870 20 6d 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c 3e   mean:</p>..<dl>
17880 0a 3c 64 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43 4b  .<dt><b>ROLLBACK
17890 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </b></dt>.<dd><p
178a0 3e 5e 57 68 65 6e 20 61 20 63 6f 6e 73 74 72 61  >^When a constra
178b0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
178c0 63 75 72 73 2c 20 61 6e 20 69 6d 6d 65 64 69 61  curs, an immedia
178d0 74 65 20 52 4f 4c 4c 42 41 43 4b 0a 6f 63 63 75  te ROLLBACK.occu
178e0 72 73 2c 20 74 68 75 73 20 65 6e 64 69 6e 67 20  rs, thus ending 
178f0 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
17900 73 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65  saction, and the
17910 20 63 6f 6d 6d 61 6e 64 20 61 62 6f 72 74 73 0a   command aborts.
17920 77 69 74 68 20 61 20 72 65 74 75 72 6e 20 63 6f  with a return co
17930 64 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 4f 4e  de of SQLITE_CON
17940 53 54 52 41 49 4e 54 2e 20 20 5e 49 66 20 6e 6f  STRAINT.  ^If no
17950 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a   transaction is.
17960 61 63 74 69 76 65 20 28 6f 74 68 65 72 20 74 68  active (other th
17970 61 6e 20 74 68 65 20 69 6d 70 6c 69 65 64 20 74  an the implied t
17980 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 61 74 20  ransaction that 
17990 69 73 20 63 72 65 61 74 65 64 20 6f 6e 20 65 76  is created on ev
179a0 65 72 79 0a 63 6f 6d 6d 61 6e 64 29 20 74 68 65  ery.command) the
179b0 6e 20 74 68 69 73 20 61 6c 67 6f 72 69 74 68 6d  n this algorithm
179c0 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20   works the same 
179d0 61 73 20 41 42 4f 52 54 2e 3c 2f 70 3e 3c 2f 64  as ABORT.</p></d
179e0 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 41 42 4f 52 54  d>..<dt><b>ABORT
179f0 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </b></dt>.<dd><p
17a00 3e 5e 57 68 65 6e 20 61 20 63 6f 6e 73 74 72 61  >^When a constra
17a10 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
17a20 63 75 72 73 2c 20 74 68 65 20 63 6f 6d 6d 61 6e  curs, the comman
17a30 64 20 62 61 63 6b 73 20 6f 75 74 0a 61 6e 79 20  d backs out.any 
17a40 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 69 74  prior changes it
17a50 20 6d 69 67 68 74 20 68 61 76 65 20 6d 61 64 65   might have made
17a60 20 61 6e 64 20 61 62 6f 72 74 73 20 77 69 74 68   and aborts with
17a70 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65 0a 6f   a return code.o
17a80 66 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  f SQLITE_CONSTRA
17a90 49 4e 54 2e 20 20 5e 42 75 74 20 6e 6f 20 52 4f  INT.  ^But no RO
17aa0 4c 4c 42 41 43 4b 20 69 73 20 65 78 65 63 75 74  LLBACK is execut
17ab0 65 64 20 73 6f 20 63 68 61 6e 67 65 73 0a 66 72  ed so changes.fr
17ac0 6f 6d 20 70 72 69 6f 72 20 63 6f 6d 6d 61 6e 64  om prior command
17ad0 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  s within the sam
17ae0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 61 72  e transaction.ar
17af0 65 20 70 72 65 73 65 72 76 65 64 2e 20 20 54 68  e preserved.  Th
17b00 69 73 20 69 73 20 74 68 65 20 64 65 66 61 75 6c  is is the defaul
17b10 74 20 62 65 68 61 76 69 6f 72 2e 3c 2f 70 3e 3c  t behavior.</p><
17b20 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 46 41 49  /dd>..<dt><b>FAI
17b30 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  L</b></dt>.<dd><
17b40 70 3e 5e 57 68 65 6e 20 61 20 63 6f 6e 73 74 72  p>^When a constr
17b50 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
17b60 63 63 75 72 73 2c 20 74 68 65 20 63 6f 6d 6d 61  ccurs, the comma
17b70 6e 64 20 61 62 6f 72 74 73 20 77 69 74 68 20 61  nd aborts with a
17b80 0a 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c  .return code SQL
17b90 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 2e 20  ITE_CONSTRAINT. 
17ba0 20 5e 42 75 74 20 61 6e 79 20 63 68 61 6e 67 65   ^But any change
17bb0 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  s to the databas
17bc0 65 20 74 68 61 74 0a 74 68 65 20 63 6f 6d 6d 61  e that.the comma
17bd0 6e 64 20 6d 61 64 65 20 70 72 69 6f 72 20 74 6f  nd made prior to
17be0 20 65 6e 63 6f 75 6e 74 65 72 69 6e 67 20 74 68   encountering th
17bf0 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  e constraint vio
17c00 6c 61 74 69 6f 6e 0a 61 72 65 20 70 72 65 73 65  lation.are prese
17c10 72 76 65 64 20 61 6e 64 20 61 72 65 20 6e 6f 74  rved and are not
17c20 20 62 61 63 6b 65 64 20 6f 75 74 2e 20 20 5e 46   backed out.  ^F
17c30 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 66 20 61  or example, if a
17c40 6e 20 55 50 44 41 54 45 0a 73 74 61 74 65 6d 65  n UPDATE.stateme
17c50 6e 74 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 61  nt encountered a
17c60 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
17c70 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 31 30 30  ation on the 100
17c80 74 68 20 72 6f 77 20 74 68 61 74 0a 69 74 20 61  th row that.it a
17c90 74 74 65 6d 70 74 73 20 74 6f 20 75 70 64 61 74  ttempts to updat
17ca0 65 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72 73  e, then the firs
17cb0 74 20 39 39 20 72 6f 77 20 63 68 61 6e 67 65 73  t 99 row changes
17cc0 20 61 72 65 20 70 72 65 73 65 72 76 65 64 0a 62   are preserved.b
17cd0 75 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 6f  ut changes to ro
17ce0 77 73 20 31 30 30 20 61 6e 64 20 62 65 79 6f 6e  ws 100 and beyon
17cf0 64 20 6e 65 76 65 72 20 6f 63 63 75 72 2e 3c 2f  d never occur.</
17d00 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e  p></dd>..<dt><b>
17d10 49 47 4e 4f 52 45 3c 2f 62 3e 3c 2f 64 74 3e 0a  IGNORE</b></dt>.
17d20 3c 64 64 3e 3c 70 3e 5e 57 68 65 6e 20 61 20 63  <dd><p>^When a c
17d30 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
17d40 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20  ion occurs, the 
17d50 6f 6e 65 20 72 6f 77 20 74 68 61 74 20 63 6f 6e  one row that con
17d60 74 61 69 6e 73 0a 74 68 65 20 63 6f 6e 73 74 72  tains.the constr
17d70 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 69  aint violation i
17d80 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f  s not inserted o
17d90 72 20 63 68 61 6e 67 65 64 2e 20 20 5e 42 75 74  r changed.  ^But
17da0 20 74 68 65 20 63 6f 6d 6d 61 6e 64 0a 63 6f 6e   the command.con
17db0 74 69 6e 75 65 73 20 65 78 65 63 75 74 69 6e 67  tinues executing
17dc0 20 6e 6f 72 6d 61 6c 6c 79 2e 20 20 5e 4f 74 68   normally.  ^Oth
17dd0 65 72 20 72 6f 77 73 20 62 65 66 6f 72 65 20 61  er rows before a
17de0 6e 64 20 61 66 74 65 72 20 74 68 65 20 72 6f 77  nd after the row
17df0 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 65 64 20   that.contained 
17e00 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  the constraint v
17e10 69 6f 6c 61 74 69 6f 6e 20 63 6f 6e 74 69 6e 75  iolation continu
17e20 65 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  e to be inserted
17e30 20 6f 72 20 75 70 64 61 74 65 64 0a 6e 6f 72 6d   or updated.norm
17e40 61 6c 6c 79 2e 20 20 5e 4e 6f 20 65 72 72 6f 72  ally.  ^No error
17e50 20 69 73 20 72 65 74 75 72 6e 65 64 20 77 68 65   is returned whe
17e60 6e 20 74 68 65 20 49 47 4e 4f 52 45 20 63 6f 6e  n the IGNORE con
17e70 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
17e80 0a 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73  .algorithm is us
17e90 65 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  ed.</p></dd>..<d
17ea0 74 3e 3c 62 3e 52 45 50 4c 41 43 45 3c 2f 62 3e  t><b>REPLACE</b>
17eb0 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 5e 57 68  </dt>.<dd><p>^Wh
17ec0 65 6e 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73  en a UNIQUE cons
17ed0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
17ee0 20 6f 63 63 75 72 73 2c 20 74 68 65 20 70 72 65   occurs, the pre
17ef0 2d 65 78 69 73 74 69 6e 67 20 72 6f 77 73 0a 74  -existing rows.t
17f00 68 61 74 20 61 72 65 20 63 61 75 73 69 6e 67 20  hat are causing 
17f10 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  the constraint v
17f20 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d  iolation are rem
17f30 6f 76 65 64 20 70 72 69 6f 72 20 74 6f 20 69 6e  oved prior to in
17f40 73 65 72 74 69 6e 67 0a 6f 72 20 75 70 64 61 74  serting.or updat
17f50 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74 20  ing the current 
17f60 72 6f 77 2e 20 20 5e 54 68 75 73 20 74 68 65 20  row.  ^Thus the 
17f70 69 6e 73 65 72 74 20 6f 72 20 75 70 64 61 74 65  insert or update
17f80 20 61 6c 77 61 79 73 20 6f 63 63 75 72 73 2e 0a   always occurs..
17f90 5e 54 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e  ^The command con
17fa0 74 69 6e 75 65 73 20 65 78 65 63 75 74 69 6e 67  tinues executing
17fb0 20 6e 6f 72 6d 61 6c 6c 79 20 66 6f 6c 6c 6f 77   normally follow
17fc0 69 6e 67 20 52 45 50 4c 41 43 45 2e 20 20 0a 5e  ing REPLACE.  .^
17fd0 4e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 74 75  No error is retu
17fe0 72 6e 65 64 20 62 79 20 74 68 65 20 52 45 50 4c  rned by the REPL
17ff0 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ACE conflict res
18000 6f 6c 75 74 69 6f 6e 2e 0a 5e 49 66 20 61 20 4e  olution..^If a N
18010 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
18020 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
18030 75 72 73 2c 20 74 68 65 20 4e 55 4c 4c 20 76 61  urs, the NULL va
18040 6c 75 65 20 69 73 20 72 65 70 6c 61 63 65 64 0a  lue is replaced.
18050 62 79 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  by the default v
18060 61 6c 75 65 20 66 6f 72 20 74 68 61 74 20 63 6f  alue for that co
18070 6c 75 6d 6e 2e 20 20 5e 49 66 20 74 68 65 20 63  lumn.  ^If the c
18080 6f 6c 75 6d 6e 20 68 61 73 20 6e 6f 20 64 65 66  olumn has no def
18090 61 75 6c 74 0a 76 61 6c 75 65 2c 20 74 68 65 6e  ault.value, then
180a0 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72   the ABORT algor
180b0 69 74 68 6d 20 69 73 20 75 73 65 64 2e 20 20 5e  ithm is used.  ^
180c0 49 66 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74  If a CHECK const
180d0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a  raint violation.
180e0 6f 63 63 75 72 73 20 74 68 65 6e 20 74 68 65 20  occurs then the 
180f0 49 47 4e 4f 52 45 20 61 6c 67 6f 72 69 74 68 6d  IGNORE algorithm
18100 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c   is used.</p>..<
18110 70 3e 5e 57 68 65 6e 20 74 68 69 73 20 63 6f 6e  p>^When this con
18120 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
18130 20 73 74 72 61 74 65 67 79 20 64 65 6c 65 74 65   strategy delete
18140 73 20 72 6f 77 73 20 69 6e 20 6f 72 64 65 72 20  s rows in order 
18150 74 6f 0a 73 61 74 69 73 66 79 20 61 20 63 6f 6e  to.satisfy a con
18160 73 74 72 61 69 6e 74 2c 20 5b 43 52 45 41 54 45  straint, [CREATE
18170 20 54 52 49 47 47 45 52 20 7c 20 64 65 6c 65 74   TRIGGER | delet
18180 65 20 74 72 69 67 67 65 72 73 5d 20 6f 6e 6c 79  e triggers] only
18190 20 66 69 72 65 20 69 66 0a 5b 72 65 63 75 72 73   fire if.[recurs
181a0 69 76 65 5f 74 72 69 67 67 65 72 73 20 70 72 61  ive_triggers pra
181b0 67 6d 61 20 7c 20 72 65 63 75 72 73 69 76 65 20  gma | recursive 
181c0 74 72 69 67 67 65 72 73 5d 20 61 72 65 20 65 6e  triggers] are en
181d0 61 62 6c 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  abled.</p>..<p>^
181e0 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 75 70 64  The [sqlite3_upd
181f0 61 74 65 5f 68 6f 6f 6b 20 7c 20 75 70 64 61 74  ate_hook | updat
18200 65 20 68 6f 6f 6b 5d 20 69 73 20 6e 6f 74 20 69  e hook] is not i
18210 6e 76 6f 6b 65 64 20 66 6f 72 20 72 6f 77 73 20  nvoked for rows 
18220 74 68 61 74 0a 61 72 65 20 64 65 6c 65 74 65 64  that.are deleted
18230 20 62 79 20 61 6e 20 4f 52 20 52 45 50 4c 41 43   by an OR REPLAC
18240 45 20 72 65 73 6f 6c 75 74 69 6f 6e 2e 20 20 5e  E resolution.  ^
18250 4e 6f 72 20 69 73 20 74 68 65 20 0a 5b 73 71 6c  Nor is the .[sql
18260 69 74 65 33 5f 63 68 61 6e 67 65 73 20 7c 20 63  ite3_changes | c
18270 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 5d 20 69  hange counter] i
18280 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 54 68 65 20  ncremented..The 
18290 65 78 63 65 70 74 69 6f 6e 61 6c 20 62 65 68 61  exceptional beha
182a0 76 69 6f 72 73 20 64 65 66 69 6e 65 64 20 69 6e  viors defined in
182b0 20 74 68 69 73 20 70 61 72 61 67 72 61 70 68 20   this paragraph 
182c0 6d 69 67 68 74 20 63 68 61 6e 67 65 20 0a 69 6e  might change .in
182d0 20 61 20 66 75 74 75 72 65 20 72 65 6c 65 61 73   a future releas
182e0 65 2e 3c 2f 70 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70  e.</p>.</dl>..<p
182f0 3e 5e 54 68 65 20 61 6c 67 6f 72 69 74 68 6d 20  >^The algorithm 
18300 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65  specified in the
18310 20 4f 52 20 63 6c 61 75 73 65 20 6f 66 20 61 20   OR clause of a 
18320 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
18330 0a 6f 76 65 72 72 69 64 65 73 20 61 6e 79 20 61  .overrides any a
18340 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66 69  lgorithm specifi
18350 65 64 20 69 6e 20 61 20 43 52 45 41 54 45 20 54  ed in a CREATE T
18360 41 42 4c 45 2e 0a 5e 49 66 20 6e 6f 20 61 6c 67  ABLE..^If no alg
18370 6f 72 69 74 68 6d 20 69 73 20 73 70 65 63 69 66  orithm is specif
18380 69 65 64 20 61 6e 79 77 68 65 72 65 2c 20 74 68  ied anywhere, th
18390 65 20 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68  e ABORT algorith
183a0 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a  m is used.</p>..
183b0 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
183c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
183d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
183e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
183f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18400 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 52 45 49  ####.Section REI
18410 4e 44 45 58 20 72 65 69 6e 64 65 78 20 52 45 49  NDEX reindex REI
18420 4e 44 45 58 0a 0a 42 75 62 62 6c 65 44 69 61 67  NDEX..BubbleDiag
18430 72 61 6d 20 72 65 69 6e 64 65 78 2d 73 74 6d 74  ram reindex-stmt
18440 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54   1.</tcl>..<p>^T
18450 68 65 20 52 45 49 4e 44 45 58 20 63 6f 6d 6d 61  he REINDEX comma
18460 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  nd is used to de
18470 6c 65 74 65 20 61 6e 64 20 72 65 63 72 65 61 74  lete and recreat
18480 65 20 69 6e 64 69 63 65 73 20 66 72 6f 6d 20 73  e indices from s
18490 63 72 61 74 63 68 2e 0a 54 68 69 73 20 69 73 20  cratch..This is 
184a0 75 73 65 66 75 6c 20 77 68 65 6e 20 74 68 65 20  useful when the 
184b0 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
184c0 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
184d0 63 65 20 68 61 73 20 63 68 61 6e 67 65 64 2e 0a  ce has changed..
184e0 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 20 74 68 65  </p>..<p>^In the
184f0 20 66 69 72 73 74 20 66 6f 72 6d 2c 20 61 6c 6c   first form, all
18500 20 69 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c 20   indices in all 
18510 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
18520 65 73 20 74 68 61 74 20 75 73 65 20 74 68 65 0a  es that use the.
18530 6e 61 6d 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20  named collation 
18540 73 65 71 75 65 6e 63 65 20 61 72 65 20 72 65 63  sequence are rec
18550 72 65 61 74 65 64 2e 20 5e 28 49 6e 20 74 68 65  reated. ^(In the
18560 20 73 65 63 6f 6e 64 20 66 6f 72 6d 2c 20 69 66   second form, if
18570 20 0a 3c 69 3e 26 23 39 31 3b 64 61 74 61 62 61   .<i>&#91;databa
18580 73 65 2d 6e 61 6d 65 2e 26 23 39 33 3b 74 61 62  se-name.&#93;tab
18590 6c 65 2f 69 6e 64 65 78 2d 6e 61 6d 65 3c 2f 69  le/index-name</i
185a0 3e 20 69 64 65 6e 74 69 66 69 65 73 20 61 20 74  > identifies a t
185b0 61 62 6c 65 2c 0a 74 68 65 6e 20 61 6c 6c 20 69  able,.then all i
185c0 6e 64 69 63 65 73 0a 61 73 73 6f 63 69 61 74 65  ndices.associate
185d0 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65  d with the table
185e0 20 61 72 65 20 72 65 62 75 69 6c 74 2e 29 5e 20   are rebuilt.)^ 
185f0 5e 49 66 20 61 6e 20 69 6e 64 65 78 20 69 73 20  ^If an index is 
18600 69 64 65 6e 74 69 66 69 65 64 2c 20 74 68 65 6e  identified, then
18610 20 6f 6e 6c 79 0a 74 68 69 73 20 73 70 65 63 69   only.this speci
18620 66 69 63 20 69 6e 64 65 78 20 69 73 20 64 65 6c  fic index is del
18630 65 74 65 64 20 61 6e 64 20 72 65 63 72 65 61 74  eted and recreat
18640 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66  ed..</p>..<p>^If
18650 20 6e 6f 20 3c 69 3e 64 61 74 61 62 61 73 65 2d   no <i>database-
18660 6e 61 6d 65 3c 2f 69 3e 20 69 73 20 73 70 65 63  name</i> is spec
18670 69 66 69 65 64 20 61 6e 64 20 74 68 65 72 65 20  ified and there 
18680 65 78 69 73 74 73 20 62 6f 74 68 20 61 20 74 61  exists both a ta
18690 62 6c 65 20 6f 72 0a 69 6e 64 65 78 20 61 6e 64  ble or.index and
186a0 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71   a collation seq
186b0 75 65 6e 63 65 20 6f 66 20 74 68 65 20 73 70 65  uence of the spe
186c0 63 69 66 69 65 64 20 6e 61 6d 65 2c 20 74 68 65  cified name, the
186d0 6e 20 69 6e 64 69 63 65 73 20 61 73 73 6f 63 69  n indices associ
186e0 61 74 65 64 0a 77 69 74 68 20 74 68 65 20 63 6f  ated.with the co
186f0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
18700 20 6f 6e 6c 79 20 61 72 65 20 72 65 63 6f 6e 73   only are recons
18710 74 72 75 63 74 65 64 2e 20 54 68 69 73 20 61 6d  tructed. This am
18720 62 69 67 75 69 74 79 20 6d 61 79 20 62 65 0a 64  biguity may be.d
18730 69 73 70 65 6c 6c 65 64 20 62 79 20 61 6c 77 61  ispelled by alwa
18740 79 73 20 73 70 65 63 69 66 79 69 6e 67 20 61 20  ys specifying a 
18750 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  <i>database-name
18760 3c 2f 69 3e 20 77 68 65 6e 20 72 65 69 6e 64 65  </i> when reinde
18770 78 69 6e 67 20 61 0a 73 70 65 63 69 66 69 63 20  xing a.specific 
18780 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a  table or index..
18790 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
187a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
187b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
187c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
187d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
187e0 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 52  ######.Section R
187f0 45 50 4c 41 43 45 20 72 65 70 6c 61 63 65 20 52  EPLACE replace R
18800 45 50 4c 41 43 45 0a 0a 3c 2f 74 63 6c 3e 0a 0a  EPLACE..</tcl>..
18810 3c 70 3e 5e 54 68 65 20 52 45 50 4c 41 43 45 20  <p>^The REPLACE 
18820 63 6f 6d 6d 61 6e 64 20 69 73 20 61 6e 20 61 6c  command is an al
18830 69 61 73 20 66 6f 72 20 74 68 65 20 22 5b 4f 4e  ias for the "[ON
18840 20 43 4f 4e 46 4c 49 43 54 20 7c 20 49 4e 53 45   CONFLICT | INSE
18850 52 54 20 4f 52 20 52 45 50 4c 41 43 45 5d 22 0a  RT OR REPLACE]".
18860 76 61 72 69 61 6e 74 20 6f 66 20 74 68 65 20 5b  variant of the [
18870 49 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e 64 2e  INSERT] command.
18880 20 20 0a 54 68 69 73 20 61 6c 69 61 73 20 69 73    .This alias is
18890 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 63 6f   provided for co
188a0 6d 70 61 74 69 62 69 6c 69 74 79 20 6f 74 68 65  mpatibility othe
188b0 72 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65  r SQL database e
188c0 6e 67 69 6e 65 73 2e 20 20 53 65 65 20 74 68 65  ngines.  See the
188d0 20 0a 5b 49 4e 53 45 52 54 5d 20 63 6f 6d 6d 61   .[INSERT] comma
188e0 6e 64 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  nd documentation
188f0 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
18900 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e  information.</p>
18910 20 20 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23    ..<tcl>.######
18920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18960 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
18970 6e 20 53 45 4c 45 43 54 20 73 65 6c 65 63 74 20  n SELECT select 
18980 7b 53 45 4c 45 43 54 20 71 75 65 72 79 7d 0a 0a  {SELECT query}..
18990 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 65  BubbleDiagram se
189a0 6c 65 63 74 2d 73 74 6d 74 20 31 0a 42 75 62 62  lect-stmt 1.Bubb
189b0 6c 65 44 69 61 67 72 61 6d 20 73 65 6c 65 63 74  leDiagram select
189c0 2d 63 6f 72 65 0a 42 75 62 62 6c 65 44 69 61 67  -core.BubbleDiag
189d0 72 61 6d 20 72 65 73 75 6c 74 2d 63 6f 6c 75 6d  ram result-colum
189e0 6e 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  n.BubbleDiagram 
189f0 6a 6f 69 6e 2d 73 6f 75 72 63 65 0a 42 75 62 62  join-source.Bubb
18a00 6c 65 44 69 61 67 72 61 6d 20 73 69 6e 67 6c 65  leDiagram single
18a10 2d 73 6f 75 72 63 65 0a 42 75 62 62 6c 65 44 69  -source.BubbleDi
18a20 61 67 72 61 6d 20 6a 6f 69 6e 2d 6f 70 0a 42 75  agram join-op.Bu
18a30 62 62 6c 65 44 69 61 67 72 61 6d 20 6a 6f 69 6e  bbleDiagram join
18a40 2d 63 6f 6e 73 74 72 61 69 6e 74 0a 42 75 62 62  -constraint.Bubb
18a50 6c 65 44 69 61 67 72 61 6d 20 6f 72 64 65 72 69  leDiagram orderi
18a60 6e 67 2d 74 65 72 6d 0a 42 75 62 62 6c 65 44 69  ng-term.BubbleDi
18a70 61 67 72 61 6d 20 63 6f 6d 70 6f 75 6e 64 2d 6f  agram compound-o
18a80 70 65 72 61 74 6f 72 0a 3c 2f 74 63 6c 3e 0a 0a  perator.</tcl>..
18a90 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20 73 74  <p>The SELECT st
18aa0 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20  atement is used 
18ab0 74 6f 20 71 75 65 72 79 20 74 68 65 20 64 61 74  to query the dat
18ac0 61 62 61 73 65 2e 20 20 5e 54 68 65 0a 72 65 73  abase.  ^The.res
18ad0 75 6c 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20  ult of a SELECT 
18ae0 69 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  is zero or more 
18af0 72 6f 77 73 20 6f 66 20 64 61 74 61 20 77 68 65  rows of data whe
18b00 72 65 20 65 61 63 68 20 72 6f 77 0a 68 61 73 20  re each row.has 
18b10 61 20 66 69 78 65 64 20 6e 75 6d 62 65 72 20 6f  a fixed number o
18b20 66 20 63 6f 6c 75 6d 6e 73 2e 20 20 5e 54 68 65  f columns.  ^The
18b30 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
18b40 6e 73 20 69 6e 20 74 68 65 0a 72 65 73 75 6c 74  ns in the.result
18b50 20 69 73 20 73 70 65 63 69 66 69 65 64 20 62 79   is specified by
18b60 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
18b70 6c 69 73 74 20 69 6e 20 62 65 74 77 65 65 6e 20  list in between 
18b80 74 68 65 0a 53 45 4c 45 43 54 20 61 6e 64 20 46  the.SELECT and F
18b90 52 4f 4d 20 6b 65 79 77 6f 72 64 73 2e 20 20 5e  ROM keywords.  ^
18ba0 41 6e 79 20 61 72 62 69 74 72 61 72 79 20 65 78  Any arbitrary ex
18bb0 70 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65 20  pression can be 
18bc0 75 73 65 64 0a 61 73 20 61 20 72 65 73 75 6c 74  used.as a result
18bd0 2e 20 20 5e 49 66 20 61 20 72 65 73 75 6c 74 20  .  ^If a result 
18be0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 7d 0a  expression is }.
18bf0 68 64 5f 70 75 74 73 20 22 5b 4f 70 65 72 61 74  hd_puts "[Operat
18c00 6f 72 20 2a 5d 20 74 68 65 6e 20 61 6c 6c 20 63  or *] then all c
18c10 6f 6c 75 6d 6e 73 20 6f 66 20 61 6c 6c 20 74 61  olumns of all ta
18c20 62 6c 65 73 20 61 72 65 20 73 75 62 73 74 69 74  bles are substit
18c30 75 74 65 64 5c 6e 22 0a 68 64 5f 70 75 74 73 20  uted\n".hd_puts 
18c40 22 66 6f 72 20 74 68 61 74 20 6f 6e 65 20 65 78  "for that one ex
18c50 70 72 65 73 73 69 6f 6e 2e 20 20 5e 28 49 66 20  pression.  ^(If 
18c60 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
18c70 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 5c 6e 22  s the name of\n"
18c80 0a 68 64 5f 70 75 74 73 20 22 61 20 74 61 62 6c  .hd_puts "a tabl
18c90 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 5b 4f  e followed by [O
18ca0 70 65 72 61 74 6f 72 20 2e 2a 5d 20 74 68 65 6e  perator .*] then
18cb0 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   the result is a
18cc0 6c 6c 20 63 6f 6c 75 6d 6e 73 5c 6e 22 0a 68 64  ll columns\n".hd
18cd0 5f 70 75 74 73 20 7b 69 6e 20 74 68 61 74 20 6f  _puts {in that o
18ce0 6e 65 20 74 61 62 6c 65 2e 3c 2f 70 3e 29 5e 0a  ne table.</p>)^.
18cf0 0a 3c 70 3e 5e 54 68 65 20 44 49 53 54 49 4e 43  .<p>^The DISTINC
18d00 54 20 6b 65 79 77 6f 72 64 20 63 61 75 73 65 73  T keyword causes
18d10 20 61 20 73 75 62 73 65 74 20 6f 66 20 72 65 73   a subset of res
18d20 75 6c 74 20 72 6f 77 73 20 74 6f 20 62 65 20 72  ult rows to be r
18d30 65 74 75 72 6e 65 64 2c 20 0a 69 6e 20 77 68 69  eturned, .in whi
18d40 63 68 20 65 61 63 68 20 72 65 73 75 6c 74 20 72  ch each result r
18d50 6f 77 20 69 73 20 64 69 66 66 65 72 65 6e 74 2e  ow is different.
18d60 20 20 5e 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61    ^NULL values a
18d70 72 65 20 6e 6f 74 20 74 72 65 61 74 65 64 20 61  re not treated a
18d80 73 20 0a 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  s .distinct from
18d90 20 65 61 63 68 20 6f 74 68 65 72 2e 20 20 5e 54   each other.  ^T
18da0 68 65 20 64 65 66 61 75 6c 74 20 62 65 68 61 76  he default behav
18db0 69 6f 72 20 69 73 20 74 68 61 74 20 61 6c 6c 20  ior is that all 
18dc0 72 65 73 75 6c 74 20 72 6f 77 73 20 0a 62 65 20  result rows .be 
18dd0 72 65 74 75 72 6e 65 64 2c 20 77 68 69 63 68 20  returned, which 
18de0 63 61 6e 20 62 65 20 6d 61 64 65 20 65 78 70 6c  can be made expl
18df0 69 63 69 74 20 77 69 74 68 20 74 68 65 20 6b 65  icit with the ke
18e00 79 77 6f 72 64 20 41 4c 4c 2e 3c 2f 70 3e 0a 0a  yword ALL.</p>..
18e10 3c 70 3e 5e 54 68 65 20 71 75 65 72 79 20 69 73  <p>^The query is
18e20 20 65 78 65 63 75 74 65 64 20 61 67 61 69 6e 73   executed agains
18e30 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61  t one or more ta
18e40 62 6c 65 73 20 73 70 65 63 69 66 69 65 64 20 61  bles specified a
18e50 66 74 65 72 0a 74 68 65 20 46 52 4f 4d 20 6b 65  fter.the FROM ke
18e60 79 77 6f 72 64 2e 20 20 5e 49 66 20 6d 75 6c 74  yword.  ^If mult
18e70 69 70 6c 65 20 74 61 62 6c 65 73 20 6e 61 6d 65  iple tables name
18e80 73 20 61 72 65 20 73 65 70 61 72 61 74 65 64 20  s are separated 
18e90 62 79 20 63 6f 6d 6d 61 73 2c 0a 74 68 65 6e 20  by commas,.then 
18ea0 74 68 65 20 71 75 65 72 79 20 69 73 20 61 67 61  the query is aga
18eb0 69 6e 73 74 20 74 68 65 20 63 72 6f 73 73 20 6a  inst the cross j
18ec0 6f 69 6e 20 6f 66 20 74 68 65 20 76 61 72 69 6f  oin of the vario
18ed0 75 73 20 74 61 62 6c 65 73 2e 0a 5e 54 68 65 20  us tables..^The 
18ee0 66 75 6c 6c 20 53 51 4c 2d 39 32 20 6a 6f 69 6e  full SQL-92 join
18ef0 20 73 79 6e 74 61 78 20 63 61 6e 20 61 6c 73 6f   syntax can also
18f00 20 62 65 20 75 73 65 64 20 74 6f 20 73 70 65 63   be used to spec
18f10 69 66 79 20 6a 6f 69 6e 73 2e 0a 5e 41 20 73 75  ify joins..^A su
18f20 62 2d 71 75 65 72 79 0a 69 6e 20 70 61 72 65 6e  b-query.in paren
18f30 74 68 65 73 65 73 20 6d 61 79 20 62 65 20 73 75  theses may be su
18f40 62 73 74 69 74 75 74 65 64 20 66 6f 72 20 61 6e  bstituted for an
18f50 79 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20  y table name in 
18f60 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e  the FROM clause.
18f70 0a 5e 54 68 65 20 65 6e 74 69 72 65 20 46 52 4f  .^The entire FRO
18f80 4d 20 63 6c 61 75 73 65 20 6d 61 79 20 62 65 20  M clause may be 
18f90 6f 6d 69 74 74 65 64 2c 20 69 6e 20 77 68 69 63  omitted, in whic
18fa0 68 20 63 61 73 65 20 74 68 65 20 72 65 73 75 6c  h case the resul
18fb0 74 20 69 73 20 61 0a 73 69 6e 67 6c 65 20 72 6f  t is a.single ro
18fc0 77 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20  w consisting of 
18fd0 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 74 68  the values of th
18fe0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73  e expression lis
18ff0 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  t..</p>..<p>^The
19000 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 61   WHERE clause ca
19010 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6c 69 6d  n be used to lim
19020 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  it the number of
19030 20 72 6f 77 73 20 6f 76 65 72 0a 77 68 69 63 68   rows over.which
19040 20 74 68 65 20 71 75 65 72 79 20 6f 70 65 72 61   the query opera
19050 74 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  tes.</p>..<p>^Th
19060 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  e GROUP BY claus
19070 65 20 63 61 75 73 65 73 20 6f 6e 65 20 6f 72 20  e causes one or 
19080 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20 74 68 65  more rows of the
19090 20 72 65 73 75 6c 74 20 74 6f 0a 62 65 20 63 6f   result to.be co
190a0 6d 62 69 6e 65 64 20 69 6e 74 6f 20 61 20 73 69  mbined into a si
190b0 6e 67 6c 65 20 72 6f 77 20 6f 66 20 6f 75 74 70  ngle row of outp
190c0 75 74 2e 20 20 54 68 69 73 20 69 73 20 65 73 70  ut.  This is esp
190d0 65 63 69 61 6c 6c 79 20 75 73 65 66 75 6c 0a 77  ecially useful.w
190e0 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 63  hen the result c
190f0 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74  ontains aggregat
19100 65 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 5e 54  e functions.  ^T
19110 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  he expressions i
19120 6e 0a 74 68 65 20 47 52 4f 55 50 20 42 59 20 63  n.the GROUP BY c
19130 6c 61 75 73 65 20 64 6f 20 3c 65 6d 3e 6e 6f 74  lause do <em>not
19140 3c 2f 65 6d 3e 20 68 61 76 65 20 74 6f 20 62 65  </em> have to be
19150 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61   expressions tha
19160 74 0a 61 70 70 65 61 72 20 69 6e 20 74 68 65 20  t.appear in the 
19170 72 65 73 75 6c 74 2e 20 20 5e 54 68 65 20 48 41  result.  ^The HA
19180 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 73  VING clause is s
19190 69 6d 69 6c 61 72 20 74 6f 20 57 48 45 52 45 20  imilar to WHERE 
191a0 65 78 63 65 70 74 0a 74 68 61 74 20 48 41 56 49  except.that HAVI
191b0 4e 47 20 61 70 70 6c 69 65 73 20 61 66 74 65 72  NG applies after
191c0 20 67 72 6f 75 70 69 6e 67 20 68 61 73 20 6f 63   grouping has oc
191d0 63 75 72 72 65 64 2e 20 20 5e 54 68 65 20 48 41  curred.  ^The HA
191e0 56 49 4e 47 20 65 78 70 72 65 73 73 69 6f 6e 0a  VING expression.
191f0 6d 61 79 20 72 65 66 65 72 20 74 6f 20 76 61 6c  may refer to val
19200 75 65 73 2c 20 65 76 65 6e 20 61 67 67 72 65 67  ues, even aggreg
19210 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74  ate functions, t
19220 68 61 74 20 61 72 65 20 6e 6f 74 20 69 6e 20 74  hat are not in t
19230 68 65 20 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a  he result.</p>..
19240 3c 70 3e 5e 54 68 65 20 4f 52 44 45 52 20 42 59  <p>^The ORDER BY
19250 20 63 6c 61 75 73 65 20 63 61 75 73 65 73 20 74   clause causes t
19260 68 65 20 6f 75 74 70 75 74 20 72 6f 77 73 20 74  he output rows t
19270 6f 20 62 65 20 73 6f 72 74 65 64 2e 20 20 0a 5e  o be sorted.  .^
19280 54 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  The argument to 
19290 4f 52 44 45 52 20 42 59 20 69 73 20 61 20 6c 69  ORDER BY is a li
192a0 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
192b0 73 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  s that are used 
192c0 61 73 20 74 68 65 0a 6b 65 79 20 66 6f 72 20 74  as the.key for t
192d0 68 65 20 73 6f 72 74 2e 20 20 5e 54 68 65 20 65  he sort.  ^The e
192e0 78 70 72 65 73 73 69 6f 6e 73 20 64 6f 20 6e 6f  xpressions do no
192f0 74 20 68 61 76 65 20 74 6f 20 62 65 20 70 61 72  t have to be par
19300 74 20 6f 66 20 74 68 65 0a 72 65 73 75 6c 74 20  t of the.result 
19310 66 6f 72 20 61 20 73 69 6d 70 6c 65 20 53 45 4c  for a simple SEL
19320 45 43 54 2c 20 62 75 74 20 69 6e 20 61 20 63 6f  ECT, but in a co
19330 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 65 61  mpound SELECT ea
19340 63 68 20 73 6f 72 74 0a 65 78 70 72 65 73 73 69  ch sort.expressi
19350 6f 6e 20 6d 75 73 74 20 65 78 61 63 74 6c 79 20  on must exactly 
19360 6d 61 74 63 68 20 6f 6e 65 20 6f 66 20 74 68 65  match one of the
19370 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 2e   result columns.
19380 20 20 5e 45 61 63 68 0a 73 6f 72 74 20 65 78 70    ^Each.sort exp
19390 72 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 6f  ression may be o
193a0 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77  ptionally follow
193b0 65 64 20 62 79 20 61 20 43 4f 4c 4c 41 54 45 20  ed by a COLLATE 
193c0 6b 65 79 77 6f 72 64 20 61 6e 64 0a 74 68 65 20  keyword and.the 
193d0 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6c 6c 61 74  name of a collat
193e0 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 75 73 65  ing function use
193f0 64 20 66 6f 72 20 6f 72 64 65 72 69 6e 67 20 74  d for ordering t
19400 65 78 74 20 61 6e 64 2f 6f 72 0a 6b 65 79 77 6f  ext and/or.keywo
19410 72 64 73 20 41 53 43 20 6f 72 20 44 45 53 43 20  rds ASC or DESC 
19420 74 6f 20 73 70 65 63 69 66 79 20 74 68 65 20 73  to specify the s
19430 6f 72 74 20 6f 72 64 65 72 2e 3c 2f 70 3e 0a 0a  ort order.</p>..
19440 3c 70 3e 45 61 63 68 20 74 65 72 6d 20 6f 66 20  <p>Each term of 
19450 61 6e 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  an ORDER BY expr
19460 65 73 73 69 6f 6e 20 69 73 20 70 72 6f 63 65 73  ession is proces
19470 73 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c  sed as follows:<
19480 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70  /p>..<ol>.<li><p
19490 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20 42  >^If the ORDER B
194a0 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
194b0 61 20 63 6f 6e 73 74 61 6e 74 20 69 6e 74 65 67  a constant integ
194c0 65 72 20 4b 20 74 68 65 6e 20 74 68 65 0a 6f 75  er K then the.ou
194d0 74 70 75 74 20 69 73 20 6f 72 64 65 72 65 64 20  tput is ordered 
194e0 62 79 20 74 68 65 20 4b 2d 74 68 20 63 6f 6c 75  by the K-th colu
194f0 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  mn of the result
19500 20 73 65 74 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c   set.</p></li>.<
19510 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52  li><p>^If the OR
19520 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
19530 6e 20 69 73 20 61 6e 20 69 64 65 6e 74 69 66 69  n is an identifi
19540 65 72 20 61 6e 64 20 6f 6e 65 20 6f 66 20 74 68  er and one of th
19550 65 0a 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73  e.output columns
19560 20 68 61 73 20 61 6e 20 61 6c 69 61 73 20 62 79   has an alias by
19570 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2c 20   the same name, 
19580 74 68 65 6e 20 74 68 65 20 6f 75 74 70 75 74 20  then the output 
19590 69 73 0a 6f 72 64 65 72 65 64 20 62 79 20 74 68  is.ordered by th
195a0 65 20 69 64 65 6e 74 69 66 69 65 64 20 63 6f 6c  e identified col
195b0 75 6d 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 6c  umn.</p></li>.<l
195c0 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c  i><p>^Otherwise,
195d0 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78   the ORDER BY ex
195e0 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c  pression is eval
195f0 75 61 74 65 64 20 61 6e 64 20 74 68 65 20 6f 75  uated and the ou
19600 74 70 75 74 20 0a 69 73 20 6f 72 64 65 72 65 64  tput .is ordered
19610 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 6f 66   by the value of
19620 20 74 68 61 74 20 65 78 70 72 65 73 73 69 6f 6e   that expression
19630 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e  .</p></li>.</ol>
19640 0a 0a 3c 70 3e 5e 49 6e 20 61 20 63 6f 6d 70 6f  ..<p>^In a compo
19650 75 6e 64 20 53 45 4c 45 43 54 20 73 74 61 74 65  und SELECT state
19660 6d 65 6e 74 2c 20 74 68 65 20 74 68 69 72 64 20  ment, the third 
19670 4f 52 44 45 52 20 42 59 20 6d 61 74 63 68 69 6e  ORDER BY matchin
19680 67 20 72 75 6c 65 0a 72 65 71 75 69 72 65 73 20  g rule.requires 
19690 74 68 61 74 20 74 68 65 20 65 78 70 72 65 73 73  that the express
196a0 69 6f 6e 20 62 65 20 69 64 65 6e 74 69 63 61 6c  ion be identical
196b0 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 63   to one of the c
196c0 6f 6c 75 6d 6e 73 20 69 6e 0a 74 68 65 20 72 65  olumns in.the re
196d0 73 75 6c 74 20 73 65 74 2e 20 20 5e 28 54 68 65  sult set.  ^(The
196e0 20 74 68 72 65 65 20 72 75 6c 65 73 20 61 72 65   three rules are
196f0 20 66 69 72 73 74 20 61 70 70 6c 69 65 64 20 74   first applied t
19700 6f 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 0a  o the left-most.
19710 53 45 4c 45 43 54 20 69 6e 20 74 68 65 20 63 6f  SELECT in the co
19720 6d 70 6f 75 6e 64 2e 20 20 49 66 20 61 20 6d 61  mpound.  If a ma
19730 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
19740 65 20 73 65 61 72 63 68 20 73 74 6f 70 73 2e 20  e search stops. 
19750 20 4f 74 68 65 72 77 69 73 65 2c 0a 74 68 65 20   Otherwise,.the 
19760 6e 65 78 74 20 53 45 4c 45 43 54 20 74 6f 20 74  next SELECT to t
19770 68 65 20 72 69 67 68 74 20 69 73 20 74 72 69 65  he right is trie
19780 64 2e 20 20 54 68 69 73 20 63 6f 6e 74 69 6e 75  d.  This continu
19790 65 73 20 75 6e 74 69 6c 20 61 20 6d 61 74 63 68  es until a match
197a0 0a 69 73 20 66 6f 75 6e 64 2e 29 5e 20 20 5e 45  .is found.)^  ^E
197b0 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20  ach term of the 
197c0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
197d0 69 73 20 70 72 6f 63 65 73 73 65 64 20 73 65 70  is processed sep
197e0 61 72 61 74 65 6c 79 20 0a 61 6e 64 20 6d 61 79  arately .and may
197f0 20 63 6f 6d 65 20 66 72 6f 6d 20 64 69 66 66 65   come from diffe
19800 72 65 6e 74 20 53 45 4c 45 43 54 20 73 74 61 74  rent SELECT stat
19810 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f  ements in the co
19820 6d 70 6f 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  mpound.</p>..<p>
19830 5e 54 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73  ^The LIMIT claus
19840 65 20 70 6c 61 63 65 73 20 61 6e 20 75 70 70 65  e places an uppe
19850 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e  r bound on the n
19860 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a 72 65  umber of rows.re
19870 74 75 72 6e 65 64 20 69 6e 20 74 68 65 20 72 65  turned in the re
19880 73 75 6c 74 2e 20 20 5e 41 20 6e 65 67 61 74 69  sult.  ^A negati
19890 76 65 20 4c 49 4d 49 54 20 69 6e 64 69 63 61 74  ve LIMIT indicat
198a0 65 73 20 6e 6f 20 75 70 70 65 72 20 62 6f 75 6e  es no upper boun
198b0 64 2e 0a 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c  d..^The optional
198c0 20 4f 46 46 53 45 54 20 66 6f 6c 6c 6f 77 69 6e   OFFSET followin
198d0 67 20 4c 49 4d 49 54 20 73 70 65 63 69 66 69 65  g LIMIT specifie
198e0 73 20 68 6f 77 20 6d 61 6e 79 0a 72 6f 77 73 20  s how many.rows 
198f0 74 6f 20 73 6b 69 70 20 61 74 20 74 68 65 20 62  to skip at the b
19900 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
19910 72 65 73 75 6c 74 20 73 65 74 2e 0a 5e 49 6e 20  result set..^In 
19920 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79  a compound query
19930 2c 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75  , the LIMIT clau
19940 73 65 20 6d 61 79 20 6f 6e 6c 79 20 61 70 70 65  se may only appe
19950 61 72 20 6f 6e 20 74 68 65 0a 66 69 6e 61 6c 20  ar on the.final 
19960 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
19970 2e 0a 5e 54 68 65 20 6c 69 6d 69 74 20 69 73 20  ..^The limit is 
19980 61 70 70 6c 69 65 64 20 74 6f 20 74 68 65 20 65  applied to the e
19990 6e 74 69 72 65 20 71 75 65 72 79 20 6e 6f 74 0a  ntire query not.
199a0 74 6f 20 74 68 65 20 69 6e 64 69 76 69 64 75 61  to the individua
199b0 6c 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  l SELECT stateme
199c0 6e 74 20 74 6f 20 77 68 69 63 68 20 69 74 20 69  nt to which it i
199d0 73 20 61 74 74 61 63 68 65 64 2e 0a 5e 4e 6f 74  s attached..^Not
199e0 65 20 74 68 61 74 20 69 66 20 74 68 65 20 4f 46  e that if the OF
199f0 46 53 45 54 20 6b 65 79 77 6f 72 64 20 69 73 20  FSET keyword is 
19a00 75 73 65 64 20 69 6e 20 74 68 65 20 4c 49 4d 49  used in the LIMI
19a10 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74  T clause, then t
19a20 68 65 0a 6c 69 6d 69 74 20 69 73 20 74 68 65 20  he.limit is the 
19a30 66 69 72 73 74 20 6e 75 6d 62 65 72 20 61 6e 64  first number and
19a40 20 74 68 65 20 6f 66 66 73 65 74 20 69 73 20 74   the offset is t
19a50 68 65 20 73 65 63 6f 6e 64 20 6e 75 6d 62 65 72  he second number
19a60 2e 20 20 5e 49 66 20 61 0a 63 6f 6d 6d 61 20 69  .  ^If a.comma i
19a70 73 20 75 73 65 64 20 69 6e 73 74 65 61 64 20 6f  s used instead o
19a80 66 20 74 68 65 20 4f 46 46 53 45 54 20 6b 65 79  f the OFFSET key
19a90 77 6f 72 64 2c 20 74 68 65 6e 20 74 68 65 20 6f  word, then the o
19aa0 66 66 73 65 74 20 69 73 20 74 68 65 0a 66 69 72  ffset is the.fir
19ab0 73 74 20 6e 75 6d 62 65 72 20 61 6e 64 20 74 68  st number and th
19ac0 65 20 6c 69 6d 69 74 20 69 73 20 74 68 65 20 73  e limit is the s
19ad0 65 63 6f 6e 64 20 6e 75 6d 62 65 72 2e 20 20 54  econd number.  T
19ae0 68 69 73 20 73 65 65 6d 69 6e 67 0a 63 6f 6e 74  his seeming.cont
19af0 72 61 64 69 74 69 6f 6e 20 69 73 20 69 6e 74 65  radition is inte
19b00 6e 74 69 6f 6e 61 6c 20 2d 20 69 74 20 6d 61 78  ntional - it max
19b10 69 6d 69 7a 65 73 20 63 6f 6d 70 61 74 69 62 69  imizes compatibi
19b20 6c 69 74 79 20 77 69 74 68 20 6c 65 67 61 63 79  lity with legacy
19b30 0a 53 51 4c 20 64 61 74 61 62 61 73 65 20 73 79  .SQL database sy
19b40 73 74 65 6d 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  stems..</p>..<p>
19b50 5e 41 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  ^A compound SELE
19b60 43 54 20 69 73 20 66 6f 72 6d 65 64 20 66 72 6f  CT is formed fro
19b70 6d 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 73 69  m two or more si
19b80 6d 70 6c 65 20 53 45 4c 45 43 54 73 20 63 6f 6e  mple SELECTs con
19b90 6e 65 63 74 65 64 0a 62 79 20 6f 6e 65 20 6f 66  nected.by one of
19ba0 20 74 68 65 20 6f 70 65 72 61 74 6f 72 73 20 55   the operators U
19bb0 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c 2c  NION, UNION ALL,
19bc0 20 49 4e 54 45 52 53 45 43 54 2c 20 6f 72 20 45   INTERSECT, or E
19bd0 58 43 45 50 54 2e 20 20 5e 49 6e 0a 61 20 63 6f  XCEPT.  ^In.a co
19be0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20 61  mpound SELECT, a
19bf0 6c 6c 20 74 68 65 20 63 6f 6e 73 74 69 74 75 65  ll the constitue
19c00 6e 74 20 53 45 4c 45 43 54 73 20 6d 75 73 74 20  nt SELECTs must 
19c10 73 70 65 63 69 66 79 20 74 68 65 0a 73 61 6d 65  specify the.same
19c20 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c   number of resul
19c30 74 20 63 6f 6c 75 6d 6e 73 2e 20 20 5e 54 68 65  t columns.  ^The
19c40 72 65 20 6d 61 79 20 62 65 20 6f 6e 6c 79 20 61  re may be only a
19c50 20 73 69 6e 67 6c 65 20 4f 52 44 45 52 20 42 59   single ORDER BY
19c60 0a 63 6c 61 75 73 65 20 61 74 20 74 68 65 20 65  .clause at the e
19c70 6e 64 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75  nd of the compou
19c80 6e 64 20 53 45 4c 45 43 54 2e 20 20 5e 54 68 65  nd SELECT.  ^The
19c90 20 55 4e 49 4f 4e 20 61 6e 64 20 55 4e 49 4f 4e   UNION and UNION
19ca0 20 41 4c 4c 0a 6f 70 65 72 61 74 6f 72 73 20 63   ALL.operators c
19cb0 6f 6d 62 69 6e 65 20 74 68 65 20 72 65 73 75 6c  ombine the resul
19cc0 74 73 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54  ts of the SELECT
19cd0 73 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 61  s to the right a
19ce0 6e 64 20 6c 65 66 74 20 69 6e 74 6f 0a 61 20 73  nd left into.a s
19cf0 69 6e 67 6c 65 20 62 69 67 20 74 61 62 6c 65 2e  ingle big table.
19d00 20 20 5e 54 68 65 20 64 69 66 66 65 72 65 6e 63    ^The differenc
19d10 65 20 69 73 20 74 68 61 74 20 69 6e 20 55 4e 49  e is that in UNI
19d20 4f 4e 20 61 6c 6c 20 72 65 73 75 6c 74 20 72 6f  ON all result ro
19d30 77 73 0a 61 72 65 20 64 69 73 74 69 6e 63 74 20  ws.are distinct 
19d40 77 68 65 72 65 20 69 6e 20 55 4e 49 4f 4e 20 41  where in UNION A
19d50 4c 4c 20 74 68 65 72 65 20 6d 61 79 20 62 65 20  LL there may be 
19d60 64 75 70 6c 69 63 61 74 65 73 2e 0a 5e 54 68 65  duplicates..^The
19d70 20 49 4e 54 45 52 53 45 43 54 20 6f 70 65 72 61   INTERSECT opera
19d80 74 6f 72 20 74 61 6b 65 73 20 74 68 65 20 69 6e  tor takes the in
19d90 74 65 72 73 65 63 74 69 6f 6e 20 6f 66 20 74 68  tersection of th
19da0 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
19db0 0a 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20  .left and right 
19dc0 53 45 4c 45 43 54 73 2e 20 20 5e 45 58 43 45 50  SELECTs.  ^EXCEP
19dd0 54 20 74 61 6b 65 73 20 74 68 65 20 72 65 73 75  T takes the resu
19de0 6c 74 20 6f 66 20 6c 65 66 74 20 53 45 4c 45 43  lt of left SELEC
19df0 54 20 61 66 74 65 72 0a 72 65 6d 6f 76 69 6e 67  T after.removing
19e00 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
19e10 74 68 65 20 72 69 67 68 74 20 53 45 4c 45 43 54  the right SELECT
19e20 2e 20 20 5e 57 68 65 6e 20 74 68 72 65 65 20 6f  .  ^When three o
19e30 72 20 6d 6f 72 65 20 53 45 4c 45 43 54 73 0a 61  r more SELECTs.a
19e40 72 65 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e 74  re connected int
19e50 6f 20 61 20 63 6f 6d 70 6f 75 6e 64 2c 20 74 68  o a compound, th
19e60 65 79 20 67 72 6f 75 70 20 66 72 6f 6d 20 6c 65  ey group from le
19e70 66 74 20 74 6f 20 72 69 67 68 74 2e 3c 2f 70 3e  ft to right.</p>
19e80 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
19e90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19ea0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19eb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19ec0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19ed0 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
19ee0 55 50 44 41 54 45 20 75 70 64 61 74 65 20 7b 55  UPDATE update {U
19ef0 50 44 41 54 45 20 2a 55 50 44 41 54 45 73 7d 0a  PDATE *UPDATEs}.
19f00 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 75  .BubbleDiagram u
19f10 70 64 61 74 65 2d 73 74 6d 74 20 31 0a 42 75 62  pdate-stmt 1.Bub
19f20 62 6c 65 44 69 61 67 72 61 6d 20 71 75 61 6c 69  bleDiagram quali
19f30 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a  fied-table-name.
19f40 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
19f50 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
19f60 20 69 73 20 75 73 65 64 20 74 6f 20 63 68 61 6e   is used to chan
19f70 67 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ge the value of 
19f80 63 6f 6c 75 6d 6e 73 20 69 6e 20 0a 73 65 6c 65  columns in .sele
19f90 63 74 65 64 20 72 6f 77 73 20 6f 66 20 61 20 74  cted rows of a t
19fa0 61 62 6c 65 2e 20 20 5e 45 61 63 68 20 61 73 73  able.  ^Each ass
19fb0 69 67 6e 6d 65 6e 74 20 69 6e 20 61 6e 20 55 50  ignment in an UP
19fc0 44 41 54 45 20 73 70 65 63 69 66 69 65 73 0a 61  DATE specifies.a
19fd0 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74 6f 20   column name to 
19fe0 74 68 65 20 6c 65 66 74 20 6f 66 20 74 68 65 20  the left of the 
19ff0 65 71 75 61 6c 73 20 73 69 67 6e 20 61 6e 64 20  equals sign and 
1a000 61 6e 20 61 72 62 69 74 72 61 72 79 20 65 78 70  an arbitrary exp
1a010 72 65 73 73 69 6f 6e 0a 74 6f 20 74 68 65 20 72  ression.to the r
1a020 69 67 68 74 2e 20 20 5e 54 68 65 20 65 78 70 72  ight.  ^The expr
1a030 65 73 73 69 6f 6e 73 20 6d 61 79 20 75 73 65 20  essions may use 
1a040 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 6f 74  the values of ot
1a050 68 65 72 20 63 6f 6c 75 6d 6e 73 2e 0a 5e 41 6c  her columns..^Al
1a060 6c 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72  l expressions ar
1a070 65 20 65 76 61 6c 75 61 74 65 64 20 62 65 66 6f  e evaluated befo
1a080 72 65 20 61 6e 79 20 61 73 73 69 67 6e 6d 65 6e  re any assignmen
1a090 74 73 20 61 72 65 20 6d 61 64 65 2e 0a 5e 41 20  ts are made..^A 
1a0a0 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 61 6e  WHERE clause can
1a0b0 20 62 65 20 75 73 65 64 20 74 6f 20 72 65 73 74   be used to rest
1a0c0 72 69 63 74 20 77 68 69 63 68 20 72 6f 77 73 20  rict which rows 
1a0d0 61 72 65 20 75 70 64 61 74 65 64 2e 3c 2f 70 3e  are updated.</p>
1a0e0 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e  ..<p>^The option
1a0f0 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75  al conflict-clau
1a100 73 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 73 70  se allows the sp
1a110 65 63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20 61  ecification of a
1a120 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 0a 63 6f  n alternative.co
1a130 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63  nstraint conflic
1a140 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
1a150 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64 75  orithm to use du
1a160 72 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 55 50  ring this one UP
1a170 44 41 54 45 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65  DATE command..Se
1a180 65 20 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69  e the section ti
1a190 74 6c 65 64 0a 5b 4f 4e 20 43 4f 4e 46 4c 49 43  tled.[ON CONFLIC
1a1a0 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  T] for additiona
1a1b0 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f  l information.</
1a1c0 70 3e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63 74  p>..<h3>Restrict
1a1d0 69 6f 6e 73 20 6f 6e 20 55 50 44 41 54 45 20 53  ions on UPDATE S
1a1e0 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e  tatements Within
1a1f0 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 3c   CREATE TRIGGER<
1a200 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 72 65 20  /h3>..<p>^There 
1a210 61 72 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 73  are additional s
1a220 79 6e 74 61 78 20 72 65 73 74 72 69 63 74 69 6f  yntax restrictio
1a230 6e 73 20 6f 6e 20 55 50 44 41 54 45 20 73 74 61  ns on UPDATE sta
1a240 74 65 6d 65 6e 74 73 20 74 68 61 74 0a 6f 63 63  tements that.occ
1a250 75 72 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f  ur within the bo
1a260 64 79 20 6f 66 20 61 20 5b 43 52 45 41 54 45 20  dy of a [CREATE 
1a270 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65  TRIGGER] stateme
1a280 6e 74 2e 20 20 5e 54 68 65 20 3c 69 3e 74 61 62  nt.  ^The <i>tab
1a290 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 0a 6f 66 20 74  le-name</i>.of t
1a2a0 68 65 20 55 50 44 41 54 45 20 6d 75 73 74 20 62  he UPDATE must b
1a2b0 65 20 75 6e 71 75 61 6c 69 66 69 65 64 2e 20 0a  e unqualified. .
1a2c0 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  ^(In other words
1a2d0 2c 20 74 68 65 20 3c 69 3e 64 61 74 61 62 61 73  , the <i>databas
1a2e0 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f  e-name</i><b>.</
1a2f0 62 3e 20 70 72 65 66 69 78 20 0a 6f 6e 20 74 68  b> prefix .on th
1a300 65 20 74 61 62 6c 65 20 6e 61 6d 65 20 6f 66 20  e table name of 
1a310 74 68 65 20 55 50 44 41 54 45 20 69 73 20 6e 6f  the UPDATE is no
1a320 74 20 61 6c 6c 6f 77 65 64 20 77 69 74 68 69 6e  t allowed within
1a330 20 74 72 69 67 67 65 72 73 2e 29 5e 0a 5e 54 68   triggers.)^.^Th
1a340 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 75 70  e table to be up
1a350 64 61 74 65 64 20 6d 75 73 74 20 62 65 20 69 6e  dated must be in
1a360 20 74 68 65 20 73 61 6d 65 0a 64 61 74 61 62 61   the same.databa
1a370 73 65 20 61 73 20 74 68 65 20 74 61 62 6c 65 20  se as the table 
1a380 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69  to which the tri
1a390 67 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64  gger is attached
1a3a0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 49  .</p>..<p>^The I
1a3b0 4e 44 45 58 45 44 20 42 59 20 61 6e 64 20 4e 4f  NDEXED BY and NO
1a3c0 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65  T INDEXED clause
1a3d0 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65  s are not allowe
1a3e0 64 20 6f 6e 20 55 50 44 41 54 45 0a 73 74 61 74  d on UPDATE.stat
1a3f0 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72  ements within tr
1a400 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  iggers.</p>..<p>
1a410 5e 54 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73  ^The LIMIT claus
1a420 65 20 66 6f 72 20 55 50 44 41 54 45 20 69 73 20  e for UPDATE is 
1a430 75 6e 73 75 70 70 6f 72 74 65 64 20 77 69 74 68  unsupported with
1a440 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e  in triggers.</p>
1a450 0a 0a 3c 68 33 3e 4f 70 74 69 6f 6e 61 6c 20 4c  ..<h3>Optional L
1a460 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52 20 42  IMIT and ORDER B
1a470 59 20 43 6c 61 75 73 65 73 3c 2f 68 33 3e 0a 0a  Y Clauses</h3>..
1a480 3c 70 3e 5e 28 49 66 20 53 51 4c 69 74 65 20 69  <p>^(If SQLite i
1a490 73 20 62 75 69 6c 74 20 77 69 74 68 20 74 68 65  s built with the
1a4a0 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   [SQLITE_ENABLE_
1a4b0 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49  UPDATE_DELETE_LI
1a4c0 4d 49 54 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d  MIT].compile-tim
1a4d0 65 20 6f 70 74 69 6f 6e 20 74 68 65 6e 20 74 68  e option then th
1a4e0 65 20 73 79 6e 74 61 78 20 6f 66 20 74 68 65 20  e syntax of the 
1a4f0 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
1a500 20 69 73 20 65 78 74 65 6e 64 65 64 0a 77 69 74   is extended.wit
1a510 68 20 6f 70 74 69 6f 6e 61 6c 20 4f 52 44 45 52  h optional ORDER
1a520 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c   BY and LIMIT cl
1a530 61 75 73 65 73 29 5e 20 61 73 20 66 6f 6c 6c 6f  auses)^ as follo
1a540 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75  ws:</p>..<tcl>Bu
1a550 62 62 6c 65 44 69 61 67 72 61 6d 20 75 70 64 61  bbleDiagram upda
1a560 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65 64 3c  te-stmt-limited<
1a570 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f  /tcl>..<p>^The o
1a580 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 63 6c  ptional LIMIT cl
1a590 61 75 73 65 20 63 61 6e 20 62 65 20 75 73 65 64  ause can be used
1a5a0 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75   to limit the nu
1a5b0 6d 62 65 72 20 6f 66 0a 72 6f 77 73 20 6d 6f 64  mber of.rows mod
1a5c0 69 66 65 64 2c 20 61 6e 64 20 74 68 65 72 65 62  ifed, and thereb
1a5d0 79 20 6c 69 6d 69 74 20 74 68 65 20 73 69 7a 65  y limit the size
1a5e0 20 6f 66 20 74 68 65 20 74 72 61 6e 73 61 63 74   of the transact
1a5f0 69 6f 6e 2e 0a 5e 54 68 65 20 4f 52 44 45 52 20  ion..^The ORDER 
1a600 42 59 20 63 6c 61 75 73 65 20 6f 6e 20 61 6e 20  BY clause on an 
1a610 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
1a620 0a 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f  .is used only to
1a630 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68   determine which
1a640 20 72 6f 77 73 20 66 61 6c 6c 0a 77 69 74 68 69   rows fall.withi
1a650 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20 20 5e 54  n the LIMIT.  ^T
1a660 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63  he order in whic
1a670 68 20 72 6f 77 73 20 61 72 65 20 6d 6f 64 69 66  h rows are modif
1a680 69 65 64 20 69 73 20 61 72 62 69 74 72 61 72 79  ied is arbitrary
1a690 0a 61 6e 64 20 69 73 20 6e 6f 74 20 64 65 74 65  .and is not dete
1a6a0 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 4f 52  rmined by the OR
1a6b0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 3c 2f  DER BY clause.</
1a6c0 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
1a6d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a6e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a6f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a710 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
1a720 20 56 41 43 55 55 4d 20 76 61 63 75 75 6d 20 56   VACUUM vacuum V
1a730 41 43 55 55 4d 0a 0a 42 75 62 62 6c 65 44 69 61  ACUUM..BubbleDia
1a740 67 72 61 6d 20 76 61 63 75 75 6d 2d 73 74 6d 74  gram vacuum-stmt
1a750 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 57   1.</tcl>..<p>^W
1a760 68 65 6e 20 61 6e 20 6f 62 6a 65 63 74 20 28 74  hen an object (t
1a770 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 74 72 69  able, index, tri
1a780 67 67 65 72 2c 20 6f 72 20 76 69 65 77 29 20 69  gger, or view) i
1a790 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 74  s dropped from t
1a7a0 68 65 20 0a 64 61 74 61 62 61 73 65 2c 20 69 74  he .database, it
1a7b0 20 6c 65 61 76 65 73 20 62 65 68 69 6e 64 20 65   leaves behind e
1a7c0 6d 70 74 79 20 73 70 61 63 65 2e 20 0a 5e 54 68  mpty space. .^Th
1a7d0 69 73 20 65 6d 70 74 79 20 73 70 61 63 65 20 77  is empty space w
1a7e0 69 6c 6c 20 62 65 20 72 65 75 73 65 64 20 74 68  ill be reused th
1a7f0 65 20 6e 65 78 74 20 74 69 6d 65 20 6e 65 77 20  e next time new 
1a800 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 0a 61  information is.a
1a810 64 64 65 64 20 74 6f 20 74 68 65 20 64 61 74 61  dded to the data
1a820 62 61 73 65 2e 20 20 42 75 74 20 69 6e 20 74 68  base.  But in th
1a830 65 20 6d 65 61 6e 74 69 6d 65 2c 20 74 68 65 20  e meantime, the 
1a840 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 69  database file mi
1a850 67 68 74 0a 62 65 20 6c 61 72 67 65 72 20 74 68  ght.be larger th
1a860 61 6e 20 73 74 72 69 63 74 6c 79 20 6e 65 63 65  an strictly nece
1a870 73 73 61 72 79 2e 20 20 41 6c 73 6f 2c 20 66 72  ssary.  Also, fr
1a880 65 71 75 65 6e 74 20 69 6e 73 65 72 74 73 2c 20  equent inserts, 
1a890 75 70 64 61 74 65 73 2c 0a 61 6e 64 20 64 65 6c  updates,.and del
1a8a0 65 74 65 73 20 63 61 6e 20 63 61 75 73 65 20 74  etes can cause t
1a8b0 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  he information i
1a8c0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
1a8d0 6f 20 62 65 63 6f 6d 65 0a 66 72 61 67 6d 65 6e  o become.fragmen
1a8e0 74 65 64 20 2d 20 73 63 72 61 74 74 65 72 65 64  ted - scrattered
1a8f0 20 6f 75 74 20 61 6c 6c 20 61 63 72 6f 73 73 20   out all across 
1a900 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
1a910 65 20 72 61 74 68 65 72 0a 74 68 61 6e 20 63 6c  e rather.than cl
1a920 75 73 74 65 72 65 64 20 74 6f 67 65 74 68 65 72  ustered together
1a930 20 69 6e 20 6f 6e 65 20 70 6c 61 63 65 2e 3c 2f   in one place.</
1a940 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55  p>..<p>^The VACU
1a950 55 4d 20 63 6f 6d 6d 61 6e 64 20 63 6c 65 61 6e  UM command clean
1a960 73 0a 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s.the main datab
1a970 61 73 65 20 62 79 20 63 6f 70 79 69 6e 67 20 69  ase by copying i
1a980 74 73 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 61  ts contents to a
1a990 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62   temporary datab
1a9a0 61 73 65 20 66 69 6c 65 20 61 6e 64 20 0a 72 65  ase file and .re
1a9b0 6c 6f 61 64 69 6e 67 20 74 68 65 20 6f 72 69 67  loading the orig
1a9c0 69 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 69  inal database fi
1a9d0 6c 65 20 66 72 6f 6d 20 74 68 65 20 63 6f 70 79  le from the copy
1a9e0 2e 20 20 54 68 69 73 20 65 6c 69 6d 69 6e 61 74  .  This eliminat
1a9f0 65 73 20 0a 66 72 65 65 20 70 61 67 65 73 2c 20  es .free pages, 
1aa00 20 61 6c 69 67 6e 73 20 74 61 62 6c 65 20 64 61   aligns table da
1aa10 74 61 20 74 6f 20 62 65 20 63 6f 6e 74 69 67 75  ta to be contigu
1aa20 6f 75 73 2c 20 61 6e 64 20 6f 74 68 65 72 77 69  ous, and otherwi
1aa30 73 65 20 63 6c 65 61 6e 73 20 0a 75 70 20 74 68  se cleans .up th
1aa40 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
1aa50 73 74 72 75 63 74 75 72 65 2e 3c 2f 70 3e 0a 0a  structure.</p>..
1aa60 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20 63  <p>^The VACUUM c
1aa70 6f 6d 6d 61 6e 64 20 6d 61 79 20 63 68 61 6e 67  ommand may chang
1aa80 65 20 74 68 65 20 0a 5b 52 4f 57 49 44 20 7c 20  e the .[ROWID | 
1aa90 52 4f 57 49 44 73 5d 20 6f 66 20 65 6e 74 72 69  ROWIDs] of entri
1aaa0 65 73 20 69 6e 20 74 61 62 6c 65 73 20 74 68 61  es in tables tha
1aab0 74 20 64 6f 0a 6e 6f 74 20 68 61 76 65 20 61 6e  t do.not have an
1aac0 20 65 78 70 6c 69 63 69 74 20 5b 49 4e 54 45 47   explicit [INTEG
1aad0 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e  ER PRIMARY KEY].
1aae0 3c 2f 70 3e 0a 0a 3c 70 3e 5e 56 41 43 55 55 4d  </p>..<p>^VACUUM
1aaf0 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74   only works on t
1ab00 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1ab10 2e 0a 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73  ..It is not poss
1ab20 69 62 6c 65 20 74 6f 20 56 41 43 55 55 4d 20 61  ible to VACUUM a
1ab30 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
1ab40 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c  ase file.</p>..<
1ab50 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20 63 6f  p>^The VACUUM co
1ab60 6d 6d 61 6e 64 20 77 69 6c 6c 20 66 61 69 6c 20  mmand will fail 
1ab70 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 61  if there is an a
1ab80 63 74 69 76 65 20 74 72 61 6e 73 61 63 74 69 6f  ctive transactio
1ab90 6e 2e 0a 5e 54 68 65 20 56 41 43 55 55 4d 20 63  n..^The VACUUM c
1aba0 6f 6d 6d 61 6e 64 20 69 73 20 61 20 6e 6f 2d 6f  ommand is a no-o
1abb0 70 20 66 6f 72 20 69 6e 2d 6d 65 6d 6f 72 79 20  p for in-memory 
1abc0 64 61 74 61 62 61 73 65 73 2e 3c 2f 70 3e 0a 0a  databases.</p>..
1abd0 3c 70 3e 5e 28 41 73 20 6f 66 20 53 51 4c 69 74  <p>^(As of SQLit
1abe0 65 20 76 65 72 73 69 6f 6e 20 33 2e 31 2c 20 61  e version 3.1, a
1abf0 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20 74 6f  n alternative to
1ac00 20 75 73 69 6e 67 20 74 68 65 20 56 41 43 55 55   using the VACUU
1ac10 4d 20 63 6f 6d 6d 61 6e 64 0a 69 73 20 61 75 74  M command.is aut
1ac20 6f 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2c 20 65  o-vacuum mode, e
1ac30 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  nabled using the
1ac40 20 0a 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20   .[auto_vacuum] 
1ac50 70 72 61 67 6d 61 2e 29 5e 20 20 5e 57 68 65 6e  pragma.)^  ^When
1ac60 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 69   [auto_vacuum] i
1ac70 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 61 20  s enabled for a 
1ac80 64 61 74 61 62 61 73 65 2c 20 0a 6c 61 72 67 65  database, .large
1ac90 20 64 65 6c 65 74 65 73 20 63 61 75 73 65 0a 74   deletes cause.t
1aca0 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64  he size of the d
1acb0 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20  atabase file to 
1acc0 73 68 72 69 6e 6b 2e 20 20 48 6f 77 65 76 65 72  shrink.  However
1acd0 2c 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 0a  , [auto_vacuum].
1ace0 61 6c 73 6f 20 63 61 75 73 65 73 20 65 78 63 65  also causes exce
1acf0 73 73 20 66 72 61 67 6d 65 6e 74 61 74 69 6f 6e  ss fragmentation
1ad00 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
1ad10 20 66 69 6c 65 2e 20 20 5e 41 6e 64 20 5b 61 75   file.  ^And [au
1ad20 74 6f 5f 76 61 63 75 75 6d 5d 0a 64 6f 65 73 20  to_vacuum].does 
1ad30 6e 6f 74 20 63 6f 6d 70 61 63 74 20 70 61 72 74  not compact part
1ad40 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61 67  ially filled pag
1ad50 65 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  es of the databa
1ad60 73 65 20 61 73 20 56 41 43 55 55 4d 0a 64 6f 65  se as VACUUM.doe
1ad70 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  s.</p>..<p>^The 
1ad80 5b 70 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64 2f  [page_size] and/
1ad90 6f 72 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  or [auto_vacuum]
1ada0 20 6d 6f 64 65 20 6f 66 20 61 20 64 61 74 61 62   mode of a datab
1adb0 61 73 65 20 63 61 6e 20 62 65 20 63 68 61 6e 67  ase can be chang
1adc0 65 64 0a 62 79 20 69 6e 76 6f 6b 69 6e 67 20 74  ed.by invoking t
1add0 68 65 20 5b 70 61 67 65 5f 73 69 7a 65 20 70 72  he [page_size pr
1ade0 61 67 6d 61 5d 20 61 6e 64 2f 6f 72 20 5b 61 75  agma] and/or [au
1adf0 74 6f 5f 76 61 63 75 75 6d 20 70 72 61 67 6d 61  to_vacuum pragma
1ae00 5d 20 61 6e 64 20 74 68 65 6e 0a 69 6d 6d 65 64  ] and then.immed
1ae10 69 61 74 65 6c 79 20 56 41 43 55 55 4d 69 6e 67  iately VACUUMing
1ae20 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 3c 2f   the database.</
1ae30 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
1ae40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ae50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ae60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ae70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ae80 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
1ae90 20 7b 49 4e 44 45 58 45 44 20 42 59 7d 20 69 6e   {INDEXED BY} in
1aea0 64 65 78 65 64 62 79 20 7b 7b 49 4e 44 45 58 45  dexedby {{INDEXE
1aeb0 44 20 42 59 7d 20 7b 4e 4f 54 20 49 4e 44 45 58  D BY} {NOT INDEX
1aec0 45 44 7d 7d 0a 0a 3c 2f 74 63 6c 3e 0a 3c 70 3e  ED}}..</tcl>.<p>
1aed0 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  ^The INDEXED BY 
1aee0 70 68 72 61 73 65 20 69 73 20 61 20 53 51 4c 20  phrase is a SQL 
1aef0 65 78 74 65 6e 73 69 6f 6e 20 66 6f 75 6e 64 20  extension found 
1af00 6f 6e 6c 79 20 69 6e 20 53 51 4c 69 74 65 20 77  only in SQLite w
1af10 68 69 63 68 20 63 61 6e 0a 62 65 20 75 73 65 64  hich can.be used
1af20 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
1af30 74 68 65 20 63 6f 72 72 65 63 74 20 69 6e 64 69  the correct indi
1af40 63 65 73 20 61 72 65 20 62 65 69 6e 67 20 75 73  ces are being us
1af50 65 64 20 6f 6e 20 61 20 5b 44 45 4c 45 54 45 5d  ed on a [DELETE]
1af60 2c 0a 5b 53 45 4c 45 43 54 5d 2c 20 6f 72 20 5b  ,.[SELECT], or [
1af70 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e  UPDATE] statemen
1af80 74 2e 0a 5e 54 68 65 20 49 4e 44 45 58 45 44 20  t..^The INDEXED 
1af90 42 59 20 70 68 72 61 73 65 20 61 6c 77 61 79 73  BY phrase always
1afa0 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 6e 61 6d   follows the nam
1afb0 65 20 6f 66 20 61 20 74 61 62 6c 65 20 74 68 61  e of a table tha
1afc0 74 20 53 51 4c 69 74 65 20 77 69 6c 6c 0a 62 65  t SQLite will.be
1afd0 20 72 65 61 64 69 6e 67 2e 20 20 54 68 65 20 49   reading.  The I
1afe0 4e 44 45 58 45 44 20 42 59 20 70 68 72 61 73 65  NDEXED BY phrase
1aff0 20 63 61 6e 20 62 65 20 73 65 65 6e 20 69 6e 20   can be seen in 
1b000 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  the following sy
1b010 6e 74 61 78 0a 64 69 61 67 72 61 6d 73 3a 3c 2f  ntax.diagrams:</
1b020 70 3e 0a 0a 3c 74 63 6c 3e 0a 42 75 62 62 6c 65  p>..<tcl>.Bubble
1b030 44 69 61 67 72 61 6d 20 71 75 61 6c 69 66 69 65  Diagram qualifie
1b040 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a 42 75 62  d-table-name.Bub
1b050 62 6c 65 44 69 61 67 72 61 6d 20 73 69 6e 67 6c  bleDiagram singl
1b060 65 2d 73 6f 75 72 63 65 0a 3c 2f 74 63 6c 3e 0a  e-source.</tcl>.
1b070 0a 3c 70 3e 5e 54 68 65 20 22 49 4e 44 45 58 45  .<p>^The "INDEXE
1b080 44 20 42 59 20 69 6e 64 65 78 2d 6e 61 6d 65 22  D BY index-name"
1b090 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65   clause specifie
1b0a0 73 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65 64  s that the named
1b0b0 20 69 6e 64 65 78 0a 6d 75 73 74 20 62 65 20 75   index.must be u
1b0c0 73 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  sed in order to 
1b0d0 6c 6f 6f 6b 20 75 70 20 76 61 6c 75 65 73 20 6f  look up values o
1b0e0 6e 20 74 68 65 20 70 72 65 63 65 64 69 6e 67 20  n the preceding 
1b0f0 74 61 62 6c 65 2e 0a 5e 49 66 20 69 6e 64 65 78  table..^If index
1b100 2d 6e 61 6d 65 20 64 6f 65 73 20 6e 6f 74 20 65  -name does not e
1b110 78 69 73 74 20 6f 72 20 63 61 6e 6e 6f 74 20 62  xist or cannot b
1b120 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 71  e used for the q
1b130 75 65 72 79 2c 20 74 68 65 6e 0a 74 68 65 20 70  uery, then.the p
1b140 72 65 70 61 72 61 74 69 6f 6e 20 6f 66 20 74 68  reparation of th
1b150 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
1b160 66 61 69 6c 73 2e 0a 5e 28 54 68 65 20 22 4e 4f  fails..^(The "NO
1b170 54 20 49 4e 44 45 58 45 44 22 20 63 6c 61 75 73  T INDEXED" claus
1b180 65 20 73 70 65 63 69 66 69 65 73 20 74 68 61 74  e specifies that
1b190 20 6e 6f 20 69 6e 64 65 78 20 73 68 61 6c 6c 20   no index shall 
1b1a0 62 65 20 75 73 65 64 20 77 68 65 6e 0a 61 63 63  be used when.acc
1b1b0 65 73 73 69 6e 67 20 74 68 65 20 70 72 65 63 65  essing the prece
1b1c0 64 69 6e 67 20 74 61 62 6c 65 2c 20 69 6e 63 6c  ding table, incl
1b1d0 75 64 69 6e 67 20 69 6d 70 6c 69 65 64 20 69 6e  uding implied in
1b1e0 64 69 63 65 73 20 63 72 65 61 74 65 20 62 79 0a  dices create by.
1b1f0 55 4e 49 51 55 45 20 61 6e 64 20 50 52 49 4d 41  UNIQUE and PRIMA
1b200 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  RY KEY constrain
1b210 74 73 2e 20 20 48 6f 77 65 76 65 72 2c 20 74 68  ts.  However, th
1b220 65 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  e INTEGER PRIMAR
1b230 59 20 4b 45 59 0a 63 61 6e 20 73 74 69 6c 6c 20  Y KEY.can still 
1b240 62 65 20 75 73 65 64 20 74 6f 20 6c 6f 6f 6b 20  be used to look 
1b250 75 70 20 65 6e 74 72 69 65 73 20 65 76 65 6e 20  up entries even 
1b260 77 68 65 6e 20 22 4e 4f 54 20 49 4e 44 45 58 45  when "NOT INDEXE
1b270 44 22 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  D" is specified.
1b280 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 53 6f 6d 65 20  )^</p>..<p>Some 
1b290 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67  SQL database eng
1b2a0 69 6e 65 73 20 70 72 6f 76 69 64 65 20 6e 6f 6e  ines provide non
1b2b0 2d 73 74 61 6e 64 61 72 64 20 22 68 69 6e 74 22  -standard "hint"
1b2c0 20 6d 65 63 68 61 6e 69 73 6d 73 20 77 68 69 63   mechanisms whic
1b2d0 68 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  h.can be used to
1b2e0 20 67 69 76 65 20 74 68 65 20 71 75 65 72 79 20   give the query 
1b2f0 6f 70 74 69 6d 69 7a 65 72 20 63 6c 75 65 73 20  optimizer clues 
1b300 61 62 6f 75 74 20 77 68 61 74 20 69 6e 64 69 63  about what indic
1b310 65 73 20 69 74 20 73 68 6f 75 6c 64 0a 75 73 65  es it should.use
1b320 20 66 6f 72 20 61 20 70 61 72 74 69 63 75 6c 61   for a particula
1b330 72 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  r statement.  Th
1b340 65 20 49 4e 44 45 58 20 42 59 20 63 6c 61 75 73  e INDEX BY claus
1b350 65 20 6f 66 20 53 51 4c 69 74 65 20 69 73 20 0a  e of SQLite is .
1b360 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 20 68  <em>not</em> a h
1b370 69 6e 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d  inting mechanism
1b380 20 61 6e 64 20 69 74 20 73 68 6f 75 6c 64 20 6e   and it should n
1b390 6f 74 20 62 65 20 75 73 65 64 20 61 73 20 73 75  ot be used as su
1b3a0 63 68 2e 0a 5e 54 68 65 20 49 4e 44 45 58 45 44  ch..^The INDEXED
1b3b0 20 42 59 20 63 6c 61 75 73 65 20 64 6f 65 73 20   BY clause does 
1b3c0 6e 6f 74 20 67 69 76 65 20 74 68 65 20 6f 70 74  not give the opt
1b3d0 69 6d 69 7a 65 72 20 68 69 6e 74 73 20 61 62 6f  imizer hints abo
1b3e0 75 74 20 77 68 69 63 68 20 69 6e 64 65 78 0a 74  ut which index.t
1b3f0 6f 20 75 73 65 3b 20 69 74 20 67 69 76 65 73 20  o use; it gives 
1b400 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 61 20  the optimizer a 
1b410 72 65 71 75 69 72 65 6d 65 6e 74 20 6f 66 20 77  requirement of w
1b420 68 69 63 68 20 69 6e 64 65 78 20 74 6f 20 75 73  hich index to us
1b430 65 2e 0a 5e 49 66 20 74 68 65 20 71 75 65 72 79  e..^If the query
1b440 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 20 75 6e   optimizer is un
1b450 61 62 6c 65 20 74 6f 20 75 73 65 20 74 68 65 20  able to use the 
1b460 69 6e 64 65 78 20 73 70 65 63 69 66 69 65 64 20  index specified 
1b470 62 79 20 74 68 65 0a 49 4e 44 45 58 20 42 59 20  by the.INDEX BY 
1b480 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65  clause, then the
1b490 20 71 75 65 72 79 20 77 69 6c 6c 20 66 61 69 6c   query will fail
1b4a0 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c   with an error.<
1b4b0 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e 44 45  /p>..<p>The INDE
1b4c0 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 69 73  XED BY clause is
1b4d0 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 69 6e   <em>not</em> in
1b4e0 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69  tended for use i
1b4f0 6e 20 74 75 6e 69 6e 67 0a 74 68 65 20 70 72 65  n tuning.the pre
1b500 66 6f 72 6d 61 6e 63 65 20 6f 66 20 61 20 71 75  formance of a qu
1b510 65 72 79 2e 20 20 54 68 65 20 69 6e 74 65 6e 74  ery.  The intent
1b520 20 6f 66 20 74 68 65 20 49 4e 44 45 58 45 44 20   of the INDEXED 
1b530 42 59 20 63 6c 61 75 73 65 20 69 73 0a 74 6f 20  BY clause is.to 
1b540 72 61 69 73 65 20 61 20 72 75 6e 2d 74 69 6d 65  raise a run-time
1b550 20 65 72 72 6f 72 20 69 66 20 61 20 73 63 68 65   error if a sche
1b560 6d 61 20 63 68 61 6e 67 65 2c 20 73 75 63 68 20  ma change, such 
1b570 61 73 20 64 72 6f 70 70 69 6e 67 20 6f 72 0a 63  as dropping or.c
1b580 72 65 61 74 69 6e 67 20 61 6e 20 69 6e 64 65 78  reating an index
1b590 2c 20 63 61 75 73 65 73 20 74 68 65 20 71 75 65  , causes the que
1b5a0 72 79 20 70 6c 61 6e 20 66 6f 72 20 61 20 74 69  ry plan for a ti
1b5b0 6d 65 2d 73 65 6e 73 69 74 69 76 65 20 71 75 65  me-sensitive que
1b5c0 72 79 0a 74 6f 20 63 68 61 6e 67 65 2e 20 20 54  ry.to change.  T
1b5d0 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c  he INDEXED BY cl
1b5e0 61 75 73 65 20 69 73 20 64 65 73 69 67 6e 65 64  ause is designed
1b5f0 20 74 6f 20 68 65 6c 70 20 64 65 74 65 63 74 0a   to help detect.
1b600 75 6e 64 65 73 69 72 61 62 6c 65 20 71 75 65 72  undesirable quer
1b610 79 20 70 6c 61 6e 20 63 68 61 6e 67 65 73 20 64  y plan changes d
1b620 75 72 69 6e 67 20 72 65 67 72 65 73 73 69 6f 6e  uring regression
1b630 20 74 65 73 74 69 6e 67 2e 0a 44 65 76 65 6c 6f   testing..Develo
1b640 70 65 72 73 20 61 72 65 20 61 64 6d 6f 6e 69 73  pers are admonis
1b650 68 65 64 20 74 6f 20 6f 6d 69 74 20 61 6c 6c 20  hed to omit all 
1b660 75 73 65 20 6f 66 20 49 4e 44 45 58 45 44 20 42  use of INDEXED B
1b670 59 20 64 75 72 69 6e 67 0a 61 70 70 6c 69 63 61  Y during.applica
1b680 74 69 6f 6e 20 64 65 73 69 67 6e 2c 20 69 6d 70  tion design, imp
1b690 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 65 73  lementation, tes
1b6a0 74 69 6e 67 2c 20 61 6e 64 20 74 75 6e 69 6e 67  ting, and tuning
1b6b0 2e 20 20 49 66 0a 49 4e 44 45 58 45 44 20 42 59  .  If.INDEXED BY
1b6c0 20 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 61   is to be used a
1b6d0 74 20 61 6c 6c 2c 20 69 74 20 73 68 6f 75 6c 64  t all, it should
1b6e0 20 62 65 20 69 6e 73 65 72 74 65 64 20 61 74 20   be inserted at 
1b6f0 74 68 65 20 76 65 72 79 0a 65 6e 64 20 6f 66 20  the very.end of 
1b700 74 68 65 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20  the development 
1b710 70 72 6f 63 65 73 73 20 77 68 65 6e 20 22 6c 6f  process when "lo
1b720 63 6b 69 6e 67 20 64 6f 77 6e 22 20 61 20 64 65  cking down" a de
1b730 73 69 67 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53  sign.</p>..<h3>S
1b740 65 65 20 41 6c 73 6f 3a 3c 2f 68 33 3e 0a 0a 3c  ee Also:</h3>..<
1b750 70 3e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 73  p>The [sqlite3_s
1b760 74 6d 74 5f 73 74 61 74 75 73 28 29 5d 20 43 2f  tmt_status()] C/
1b770 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 20 74 6f  C++ interface to
1b780 67 65 74 68 65 72 20 77 69 74 68 20 74 68 65 0a  gether with the.
1b790 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
1b7a0 55 53 5f 46 55 4c 4c 53 43 41 4e 5f 53 54 45 50  US_FULLSCAN_STEP
1b7b0 5d 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f 53 54  ] and [SQLITE_ST
1b7c0 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 20 76  MTSTATUS_SORT] v
1b7d0 65 72 62 73 0a 63 61 6e 20 62 65 20 75 73 65 64  erbs.can be used
1b7e0 20 74 6f 20 64 65 74 65 63 74 20 61 74 20 72 75   to detect at ru
1b7f0 6e 2d 74 69 6d 65 20 77 68 65 6e 20 61 6e 20 53  n-time when an S
1b800 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  QL statement is 
1b810 6e 6f 74 0a 6d 61 6b 69 6e 67 20 65 66 66 65 63  not.making effec
1b820 74 69 76 65 20 75 73 65 20 6f 66 20 69 6e 64 69  tive use of indi
1b830 63 65 73 2e 20 20 4d 61 6e 79 20 61 70 70 6c 69  ces.  Many appli
1b840 63 61 74 69 6f 6e 73 20 6d 61 79 20 70 72 65 66  cations may pref
1b850 65 72 20 74 6f 0a 75 73 65 20 74 68 65 20 5b 73  er to.use the [s
1b860 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74  qlite3_stmt_stat
1b870 75 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20  us()] interface 
1b880 74 6f 20 64 65 74 65 63 74 20 69 6e 64 65 78 20  to detect index 
1b890 6d 69 73 75 73 65 0a 72 61 74 68 65 72 20 74 68  misuse.rather th
1b8a0 61 6e 20 74 68 65 20 49 4e 44 45 58 45 44 20 42  an the INDEXED B
1b8b0 59 20 70 68 72 61 73 65 20 64 65 73 63 72 69 62  Y phrase describ
1b8c0 65 64 20 68 65 72 65 2e 3c 2f 70 3e 0a 0a 3c 74  ed here.</p>..<t
1b8d0 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
1b8e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b8f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b900 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b910 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b920 23 0a 23 20 41 20 6c 69 73 74 20 6f 66 20 6b 65  #.# A list of ke
1b930 79 77 6f 72 64 73 2e 20 20 41 20 61 73 74 65 72  ywords.  A aster
1b940 69 73 6b 20 6f 63 63 75 72 73 20 61 66 74 65 72  isk occurs after
1b950 20 74 68 65 20 6b 65 79 77 6f 72 64 20 69 66 20   the keyword if 
1b960 69 74 20 69 73 20 6f 6e 0a 23 20 74 68 65 20 66  it is on.# the f
1b970 61 6c 6c 62 61 63 6b 20 6c 69 73 74 2e 0a 23 0a  allback list..#.
1b980 73 65 74 20 6b 65 79 77 6f 72 64 5f 6c 69 73 74  set keyword_list
1b990 20 5b 6c 73 6f 72 74 20 7b 0a 20 20 20 41 42 4f   [lsort {.   ABO
1b9a0 52 54 0a 20 20 20 41 43 54 49 4f 4e 0a 20 20 20  RT.   ACTION.   
1b9b0 41 44 44 0a 20 20 20 41 46 54 45 52 0a 20 20 20  ADD.   AFTER.   
1b9c0 41 4c 4c 0a 20 20 20 41 4c 54 45 52 0a 20 20 20  ALL.   ALTER.   
1b9d0 41 4e 41 4c 59 5a 45 0a 20 20 20 41 4e 44 0a 20  ANALYZE.   AND. 
1b9e0 20 20 41 53 0a 20 20 20 41 53 43 0a 20 20 20 41    AS.   ASC.   A
1b9f0 54 54 41 43 48 0a 20 20 20 41 55 54 4f 49 4e 43  TTACH.   AUTOINC
1ba00 52 45 4d 45 4e 54 0a 20 20 20 42 45 46 4f 52 45  REMENT.   BEFORE
1ba10 0a 20 20 20 42 45 47 49 4e 0a 20 20 20 42 45 54  .   BEGIN.   BET
1ba20 57 45 45 4e 0a 20 20 20 42 59 0a 20 20 20 43 41  WEEN.   BY.   CA
1ba30 53 43 41 44 45 0a 20 20 20 43 41 53 45 0a 20 20  SCADE.   CASE.  
1ba40 20 43 41 53 54 0a 20 20 20 43 48 45 43 4b 0a 20   CAST.   CHECK. 
1ba50 20 20 43 4f 4c 4c 41 54 45 0a 20 20 20 43 4f 4c    COLLATE.   COL
1ba60 55 4d 4e 0a 20 20 20 43 4f 4d 4d 49 54 0a 20 20  UMN.   COMMIT.  
1ba70 20 43 4f 4e 46 4c 49 43 54 0a 20 20 20 43 4f 4e   CONFLICT.   CON
1ba80 53 54 52 41 49 4e 54 0a 20 20 20 43 52 45 41 54  STRAINT.   CREAT
1ba90 45 0a 20 20 20 43 52 4f 53 53 0a 20 20 20 43 55  E.   CROSS.   CU
1baa0 52 52 45 4e 54 5f 44 41 54 45 0a 20 20 20 43 55  RRENT_DATE.   CU
1bab0 52 52 45 4e 54 5f 54 49 4d 45 0a 20 20 20 43 55  RRENT_TIME.   CU
1bac0 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 0a  RRENT_TIMESTAMP.
1bad0 20 20 20 44 41 54 41 42 41 53 45 0a 20 20 20 44     DATABASE.   D
1bae0 45 46 41 55 4c 54 0a 20 20 20 44 45 46 45 52 52  EFAULT.   DEFERR
1baf0 45 44 0a 20 20 20 44 45 46 45 52 52 41 42 4c 45  ED.   DEFERRABLE
1bb00 0a 20 20 20 44 45 4c 45 54 45 0a 20 20 20 44 45  .   DELETE.   DE
1bb10 53 43 0a 20 20 20 44 45 54 41 43 48 0a 20 20 20  SC.   DETACH.   
1bb20 44 49 53 54 49 4e 43 54 0a 20 20 20 44 52 4f 50  DISTINCT.   DROP
1bb30 0a 20 20 20 45 4e 44 0a 20 20 20 45 41 43 48 0a  .   END.   EACH.
1bb40 20 20 20 45 4c 53 45 0a 20 20 20 45 53 43 41 50     ELSE.   ESCAP
1bb50 45 0a 20 20 20 45 58 43 45 50 54 0a 20 20 20 45  E.   EXCEPT.   E
1bb60 58 43 4c 55 53 49 56 45 0a 20 20 20 45 58 49 53  XCLUSIVE.   EXIS
1bb70 54 53 0a 20 20 20 45 58 50 4c 41 49 4e 0a 20 20  TS.   EXPLAIN.  
1bb80 20 46 41 49 4c 0a 20 20 20 46 4f 52 0a 20 20 20   FAIL.   FOR.   
1bb90 46 4f 52 45 49 47 4e 0a 20 20 20 46 52 4f 4d 0a  FOREIGN.   FROM.
1bba0 20 20 20 46 55 4c 4c 0a 20 20 20 47 4c 4f 42 0a     FULL.   GLOB.
1bbb0 20 20 20 47 52 4f 55 50 0a 20 20 20 48 41 56 49     GROUP.   HAVI
1bbc0 4e 47 0a 20 20 20 49 46 0a 20 20 20 49 47 4e 4f  NG.   IF.   IGNO
1bbd0 52 45 0a 20 20 20 49 4d 4d 45 44 49 41 54 45 0a  RE.   IMMEDIATE.
1bbe0 20 20 20 49 4e 0a 20 20 20 49 4e 44 45 58 0a 20     IN.   INDEX. 
1bbf0 20 20 49 4e 44 45 58 45 44 0a 20 20 20 49 4e 49    INDEXED.   INI
1bc00 54 49 41 4c 4c 59 0a 20 20 20 49 4e 4e 45 52 0a  TIALLY.   INNER.
1bc10 20 20 20 49 4e 53 45 52 54 0a 20 20 20 49 4e 53     INSERT.   INS
1bc20 54 45 41 44 0a 20 20 20 49 4e 54 45 52 53 45 43  TEAD.   INTERSEC
1bc30 54 0a 20 20 20 49 4e 54 4f 0a 20 20 20 49 53 0a  T.   INTO.   IS.
1bc40 20 20 20 49 53 4e 55 4c 4c 0a 20 20 20 4a 4f 49     ISNULL.   JOI
1bc50 4e 0a 20 20 20 4b 45 59 0a 20 20 20 4c 45 46 54  N.   KEY.   LEFT
1bc60 0a 20 20 20 4c 49 4b 45 0a 20 20 20 4c 49 4d 49  .   LIKE.   LIMI
1bc70 54 0a 20 20 20 4d 41 54 43 48 0a 20 20 20 4e 41  T.   MATCH.   NA
1bc80 54 55 52 41 4c 0a 20 20 20 4e 4f 0a 20 20 20 4e  TURAL.   NO.   N
1bc90 4f 54 0a 20 20 20 4e 4f 54 4e 55 4c 4c 0a 20 20  OT.   NOTNULL.  
1bca0 20 4e 55 4c 4c 0a 20 20 20 4f 46 0a 20 20 20 4f   NULL.   OF.   O
1bcb0 46 46 53 45 54 0a 20 20 20 4f 4e 0a 20 20 20 4f  FFSET.   ON.   O
1bcc0 52 0a 20 20 20 4f 52 44 45 52 0a 20 20 20 4f 55  R.   ORDER.   OU
1bcd0 54 45 52 0a 20 20 20 50 4c 41 4e 0a 20 20 20 50  TER.   PLAN.   P
1bce0 52 41 47 4d 41 0a 20 20 20 50 52 49 4d 41 52 59  RAGMA.   PRIMARY
1bcf0 0a 20 20 20 51 55 45 52 59 0a 20 20 20 52 41 49  .   QUERY.   RAI
1bd00 53 45 0a 20 20 20 52 45 46 45 52 45 4e 43 45 53  SE.   REFERENCES
1bd10 0a 20 20 20 52 45 47 45 58 50 0a 20 20 20 52 45  .   REGEXP.   RE
1bd20 49 4e 44 45 58 0a 20 20 20 52 45 4c 45 41 53 45  INDEX.   RELEASE
1bd30 0a 20 20 20 52 45 4e 41 4d 45 0a 20 20 20 52 45  .   RENAME.   RE
1bd40 50 4c 41 43 45 0a 20 20 20 52 45 53 54 52 49 43  PLACE.   RESTRIC
1bd50 54 0a 20 20 20 52 49 47 48 54 0a 20 20 20 52 4f  T.   RIGHT.   RO
1bd60 4c 4c 42 41 43 4b 0a 20 20 20 52 4f 57 0a 20 20  LLBACK.   ROW.  
1bd70 20 53 41 56 45 50 4f 49 4e 54 0a 20 20 20 53 45   SAVEPOINT.   SE
1bd80 4c 45 43 54 0a 20 20 20 53 45 54 0a 20 20 20 54  LECT.   SET.   T
1bd90 41 42 4c 45 0a 20 20 20 54 45 4d 50 0a 20 20 20  ABLE.   TEMP.   
1bda0 54 45 4d 50 4f 52 41 52 59 0a 20 20 20 54 48 45  TEMPORARY.   THE
1bdb0 4e 0a 20 20 20 54 4f 0a 20 20 20 54 52 41 4e 53  N.   TO.   TRANS
1bdc0 41 43 54 49 4f 4e 0a 20 20 20 54 52 49 47 47 45  ACTION.   TRIGGE
1bdd0 52 0a 20 20 20 55 4e 49 4f 4e 0a 20 20 20 55 4e  R.   UNION.   UN
1bde0 49 51 55 45 0a 20 20 20 55 50 44 41 54 45 0a 20  IQUE.   UPDATE. 
1bdf0 20 20 55 53 49 4e 47 0a 20 20 20 56 41 43 55 55    USING.   VACUU
1be00 4d 0a 20 20 20 56 41 4c 55 45 53 0a 20 20 20 56  M.   VALUES.   V
1be10 49 45 57 0a 20 20 20 56 49 52 54 55 41 4c 0a 20  IEW.   VIRTUAL. 
1be20 20 20 57 48 45 4e 0a 20 20 20 57 48 45 52 45 0a    WHEN.   WHERE.
1be30 7d 5d 0a 0a 68 64 5f 70 75 74 73 20 7b 3c 44 49  }]..hd_puts {<DI
1be40 56 20 63 6c 61 73 73 3d 22 70 64 66 5f 73 65 63  V class="pdf_sec
1be50 74 69 6f 6e 22 3e 7d 0a 53 65 63 74 69 6f 6e 20  tion">}.Section 
1be60 7b 53 51 4c 69 74 65 20 4b 65 79 77 6f 72 64 73  {SQLite Keywords
1be70 7d 20 6b 65 79 77 6f 72 64 73 20 7b 7b 2a 53 51  } keywords {{*SQ
1be80 4c 20 6b 65 79 77 6f 72 64 7d 20 7b 53 51 4c 20  L keyword} {SQL 
1be90 6b 65 79 77 6f 72 64 73 7d 7d 0a 68 64 5f 70 75  keywords}}.hd_pu
1bea0 74 73 20 7b 3c 2f 44 49 56 3e 7d 0a 3c 2f 74 63  ts {</DIV>}.</tc
1beb0 6c 3e 0a 0a 3c 70 3e 54 68 65 20 53 51 4c 20 73  l>..<p>The SQL s
1bec0 74 61 6e 64 61 72 64 20 73 70 65 63 69 66 69 65  tandard specifie
1bed0 73 20 61 20 68 75 67 65 20 6e 75 6d 62 65 72 20  s a huge number 
1bee0 6f 66 20 6b 65 79 77 6f 72 64 73 20 77 68 69 63  of keywords whic
1bef0 68 20 6d 61 79 20 6e 6f 74 0a 62 65 20 75 73 65  h may not.be use
1bf00 64 20 61 73 20 74 68 65 20 6e 61 6d 65 73 20 6f  d as the names o
1bf10 66 20 74 61 62 6c 65 73 2c 20 69 6e 64 69 63 65  f tables, indice
1bf20 73 2c 20 63 6f 6c 75 6d 6e 73 2c 20 64 61 74 61  s, columns, data
1bf30 62 61 73 65 73 2c 20 75 73 65 72 2d 64 65 66 69  bases, user-defi
1bf40 6e 65 64 0a 66 75 6e 63 74 69 6f 6e 73 2c 20 63  ned.functions, c
1bf50 6f 6c 6c 61 74 69 6f 6e 73 2c 20 76 69 72 74 75  ollations, virtu
1bf60 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 73  al table modules
1bf70 2c 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6e  , or any other n
1bf80 61 6d 65 64 20 6f 62 6a 65 63 74 2e 0a 54 68 65  amed object..The
1bf90 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f 72 64   list of keyword
1bfa0 73 20 69 73 20 73 6f 20 6c 6f 6e 67 20 74 68 61  s is so long tha
1bfb0 74 20 66 65 77 20 70 65 6f 70 6c 65 20 63 61 6e  t few people can
1bfc0 20 72 65 6d 65 6d 62 65 72 20 74 68 65 6d 20 61   remember them a
1bfd0 6c 6c 2e 0a 46 6f 72 20 6d 6f 73 74 20 53 51 4c  ll..For most SQL
1bfe0 20 63 6f 64 65 2c 20 79 6f 75 72 20 73 61 66 65   code, your safe
1bff0 73 74 20 62 65 74 20 69 73 20 74 6f 20 6e 65 76  st bet is to nev
1c000 65 72 20 75 73 65 20 61 6e 79 20 45 6e 67 6c 69  er use any Engli
1c010 73 68 20 6c 61 6e 67 75 61 67 65 0a 77 6f 72 64  sh language.word
1c020 20 61 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   as the name of 
1c030 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 6f  a user-defined o
1c040 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49  bject.</p>..<p>I
1c050 66 20 79 6f 75 20 77 61 6e 74 20 74 6f 20 75 73  f you want to us
1c060 65 20 61 20 6b 65 79 77 6f 72 64 20 61 73 20 61  e a keyword as a
1c070 20 6e 61 6d 65 2c 20 79 6f 75 20 6e 65 65 64 20   name, you need 
1c080 74 6f 20 71 75 6f 74 65 20 69 74 2e 20 20 54 68  to quote it.  Th
1c090 65 72 65 0a 61 72 65 20 74 68 72 65 65 20 77 61  ere.are three wa
1c0a0 79 73 20 6f 66 20 71 75 6f 74 69 6e 67 20 6b 65  ys of quoting ke
1c0b0 79 77 6f 72 64 73 20 69 6e 20 53 51 4c 69 74 65  ywords in SQLite
1c0c0 3a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62 6c 6f 63  :</p>..<p>.<bloc
1c0d0 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a  kquote>.<table>.
1c0e0 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
1c0f0 22 74 6f 70 22 3e 3c 62 3e 27 6b 65 79 77 6f 72  "top"><b>'keywor
1c100 64 27 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20 77  d'</b></td><td w
1c110 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a  idth="20"></td>.
1c120 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20  .<td>^A keyword 
1c130 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73  in single quotes
1c140 20 69 73 20 61 20 73 74 72 69 6e 67 20 6c 69 74   is a string lit
1c150 65 72 61 6c 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a  eral.</td></tr>.
1c160 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
1c170 3d 22 74 6f 70 22 3e 3c 62 3e 22 6b 65 79 77 6f  ="top"><b>"keywo
1c180 72 64 22 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e  rd"</b></td><td>
1c190 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65  </td>..<td>^A ke
1c1a0 79 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65 2d  yword in double-
1c1b0 71 75 6f 74 65 73 20 69 73 20 61 6e 20 69 64 65  quotes is an ide
1c1c0 6e 74 69 66 69 65 72 2e 3c 2f 74 64 3e 3c 2f 74  ntifier.</td></t
1c1d0 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c  r>..<tr>.<td val
1c1e0 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26 23 39  ign="top"><b>&#9
1c1f0 31 3b 6b 65 79 77 6f 72 64 26 23 39 33 3b 3c 2f  1;keyword&#93;</
1c200 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e  b></td><td></td>
1c210 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64  ..<td>^A keyword
1c220 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 73 71 75   enclosed in squ
1c230 61 72 65 20 62 72 61 63 6b 65 74 73 20 69 73 20  are brackets is 
1c240 0a 20 20 20 20 20 20 20 20 61 6e 20 69 64 65 6e  .        an iden
1c250 74 69 66 69 65 72 2e 20 20 54 68 69 73 20 69 73  tifier.  This is
1c260 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51   not standard SQ
1c270 4c 2e 20 20 54 68 69 73 20 71 75 6f 74 69 6e 67  L.  This quoting
1c280 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20 20 20   mechanism.     
1c290 20 20 20 69 73 20 75 73 65 64 20 62 79 20 4d 53     is used by MS
1c2a0 20 41 63 63 65 73 73 20 61 6e 64 20 53 51 4c 20   Access and SQL 
1c2b0 53 65 72 76 65 72 20 61 6e 64 20 69 73 20 69 6e  Server and is in
1c2c0 63 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74 65  cluded in SQLite
1c2d0 20 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f 6d   for.        com
1c2e0 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e  patibility.</td>
1c2f0 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20  </tr>..<tr>.<td 
1c300 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
1c310 26 23 39 36 3b 6b 65 79 77 6f 72 64 26 23 39 36  &#96;keyword&#96
1c320 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f  ;</b></td><td></
1c330 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77  td>..<td>^A keyw
1c340 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20  ord enclosed in 
1c350 67 72 61 76 65 20 61 63 63 65 6e 74 73 20 28 41  grave accents (A
1c360 53 43 49 49 20 63 6f 64 65 20 39 36 29 20 69 73  SCII code 96) is
1c370 20 0a 20 20 20 20 20 20 20 20 61 6e 20 69 64 65   .        an ide
1c380 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73 20 69  ntifier.  This i
1c390 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53  s not standard S
1c3a0 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74 69 6e  QL.  This quotin
1c3b0 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20 20  g mechanism.    
1c3c0 20 20 20 20 69 73 20 75 73 65 64 20 62 79 20 4d      is used by M
1c3d0 79 53 51 4c 20 61 6e 64 20 69 73 20 69 6e 63 6c  ySQL and is incl
1c3e0 75 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20 66  uded in SQLite f
1c3f0 6f 72 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 61  or.        compa
1c400 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f  tibility.</td></
1c410 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62  tr>.</table>.</b
1c420 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 2f 70 3e 0a  lockquote>.</p>.
1c430 0a 3c 70 3e 46 6f 72 20 72 65 73 69 6c 69 65 6e  .<p>For resilien
1c440 63 65 20 77 68 65 6e 20 63 6f 6e 66 72 6f 6e 74  ce when confront
1c450 65 64 20 77 69 74 68 20 68 69 73 74 6f 72 69 63  ed with historic
1c460 61 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  al SQL statement
1c470 73 2c 20 53 51 4c 69 74 65 0a 77 69 6c 6c 20 73  s, SQLite.will s
1c480 6f 6d 65 74 69 6d 65 73 20 62 65 6e 64 20 74 68  ometimes bend th
1c490 65 20 71 75 6f 74 69 6e 67 20 72 75 6c 65 73 20  e quoting rules 
1c4a0 61 62 6f 76 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e  above:</p>..<ul>
1c4b0 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61 20 6b 65  .<li><p>^If a ke
1c4c0 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65 0a  yword in single.
1c4d0 71 75 6f 74 65 73 20 28 65 78 3a 20 3c 62 3e 27  quotes (ex: <b>'
1c4e0 6b 65 79 27 3c 2f 62 3e 20 6f 72 20 3c 62 3e 27  key'</b> or <b>'
1c4f0 67 6c 6f 62 27 3c 2f 62 3e 29 20 69 73 20 75 73  glob'</b>) is us
1c500 65 64 20 69 6e 20 61 20 63 6f 6e 74 65 78 74 20  ed in a context 
1c510 77 68 65 72 65 0a 61 6e 20 69 64 65 6e 74 69 66  where.an identif
1c520 69 65 72 20 69 73 20 61 6c 6c 6f 77 65 64 20 62  ier is allowed b
1c530 75 74 20 77 68 65 72 65 20 61 20 73 74 72 69 6e  ut where a strin
1c540 67 20 6c 69 74 65 72 61 6c 20 69 73 20 6e 6f 74  g literal is not
1c550 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e 0a 74   allowed, then.t
1c560 68 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e 64 65  he token is unde
1c570 72 73 74 6f 6f 64 20 74 6f 20 62 65 20 61 6e 20  rstood to be an 
1c580 69 64 65 6e 74 69 66 69 65 72 20 69 6e 73 74 65  identifier inste
1c590 61 64 20 6f 66 20 61 20 73 74 72 69 6e 67 20 6c  ad of a string l
1c5a0 69 74 65 72 61 6c 2e 0a 3c 2f 70 3e 3c 2f 6c 69  iteral..</p></li
1c5b0 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61 20  >..<li><p>^If a 
1c5c0 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c  keyword in doubl
1c5d0 65 0a 71 75 6f 74 65 73 20 28 65 78 3a 20 3c 62  e.quotes (ex: <b
1c5e0 3e 22 6b 65 79 22 3c 2f 62 3e 20 6f 72 20 3c 62  >"key"</b> or <b
1c5f0 3e 22 67 6c 6f 62 22 3c 2f 62 3e 29 20 69 73 20  >"glob"</b>) is 
1c600 75 73 65 64 20 69 6e 20 61 20 63 6f 6e 74 65 78  used in a contex
1c610 74 20 77 68 65 72 65 0a 69 74 20 63 61 6e 6e 6f  t where.it canno
1c620 74 20 62 65 20 72 65 73 6f 6c 76 65 64 20 74 6f  t be resolved to
1c630 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 62   an identifier b
1c640 75 74 20 77 68 65 72 65 20 61 20 73 74 72 69 6e  ut where a strin
1c650 67 20 6c 69 74 65 72 61 6c 0a 69 73 20 61 6c 6c  g literal.is all
1c660 6f 77 65 64 2c 20 74 68 65 6e 20 74 68 65 20 74  owed, then the t
1c670 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72 73 74 6f  oken is understo
1c680 6f 64 20 74 6f 20 62 65 20 61 20 73 74 72 69 6e  od to be a strin
1c690 67 20 6c 69 74 65 72 61 6c 20 69 6e 73 74 65 61  g literal instea
1c6a0 64 0a 6f 66 20 61 6e 20 69 64 65 6e 74 69 66 65  d.of an identife
1c6b0 72 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c  r.</p></li>.</ul
1c6c0 3e 0a 0a 3c 70 3e 50 72 6f 67 72 61 6d 6d 65 72  >..<p>Programmer
1c6d0 73 20 61 72 65 20 63 61 75 74 69 6f 6e 65 64 20  s are cautioned 
1c6e0 6e 6f 74 20 74 6f 20 75 73 65 20 74 68 65 20 74  not to use the t
1c6f0 77 6f 20 65 78 63 65 70 74 69 6f 6e 73 20 64 65  wo exceptions de
1c700 73 63 72 69 62 65 64 20 69 6e 0a 74 68 65 20 70  scribed in.the p
1c710 72 65 76 69 6f 75 73 20 62 75 6c 6c 65 74 73 2e  revious bullets.
1c720 20 20 57 65 20 65 6d 70 68 61 73 69 7a 65 20 74    We emphasize t
1c730 68 61 74 20 74 68 65 79 20 65 78 69 73 74 20 6f  hat they exist o
1c740 6e 6c 79 20 73 6f 20 74 68 61 74 20 6f 6c 64 0a  nly so that old.
1c750 61 6e 64 20 69 6c 6c 2d 66 6f 72 6d 65 64 20 53  and ill-formed S
1c760 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  QL statements wi
1c770 6c 6c 20 72 75 6e 20 63 6f 72 72 65 63 74 6c 79  ll run correctly
1c780 2e 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f  .  Future versio
1c790 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 6d 69 67  ns of.SQLite mig
1c7a0 68 74 20 63 68 61 6e 67 65 20 74 6f 20 72 61 69  ht change to rai
1c7b0 73 65 20 65 72 72 6f 72 73 20 69 6e 73 74 65 61  se errors instea
1c7c0 64 20 6f 66 20 61 63 63 65 70 74 69 6e 67 20 74  d of accepting t
1c7d0 68 65 20 6d 61 6c 66 6f 72 6d 65 64 0a 73 74 61  he malformed.sta
1c7e0 74 65 6d 65 6e 74 73 20 63 6f 76 65 72 65 64 20  tements covered 
1c7f0 62 79 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e  by the exception
1c800 73 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 70  s above.</p>..<p
1c810 3e 0a 53 51 4c 69 74 65 20 61 64 64 73 20 6e 65  >.SQLite adds ne
1c820 77 20 6b 65 79 77 6f 72 64 73 20 66 72 6f 6d 20  w keywords from 
1c830 74 69 6d 65 20 74 6f 20 74 69 6d 65 20 77 68 65  time to time whe
1c840 6e 20 69 74 20 74 61 6b 65 73 20 6f 6e 20 6e 65  n it takes on ne
1c850 77 20 66 65 61 74 75 72 65 73 2e 0a 53 6f 20 74  w features..So t
1c860 6f 20 70 72 65 76 65 6e 74 20 79 6f 75 72 20 63  o prevent your c
1c870 6f 64 65 20 66 72 6f 6d 20 62 65 69 6e 67 20 62  ode from being b
1c880 72 6f 6b 65 6e 20 62 79 20 66 75 74 75 72 65 20  roken by future 
1c890 65 6e 68 61 6e 63 65 6d 65 6e 74 73 2c 20 79 6f  enhancements, yo
1c8a0 75 20 73 68 6f 75 6c 64 0a 6e 6f 72 6d 61 6c 6c  u should.normall
1c8b0 79 20 71 75 6f 74 65 20 61 6e 79 20 69 64 65 6e  y quote any iden
1c8c0 74 69 66 69 65 72 20 74 68 61 74 20 69 73 20 61  tifier that is a
1c8d0 6e 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61  n English langua
1c8e0 67 65 20 77 6f 72 64 2c 20 65 76 65 6e 20 69 66  ge word, even if
1c8f0 0a 79 6f 75 20 64 6f 20 6e 6f 74 20 68 61 76 65  .you do not have
1c900 20 74 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54   to..</p>..<p>.T
1c910 68 65 20 6c 69 73 74 20 62 65 6c 6f 77 20 73 68  he list below sh
1c920 6f 77 73 20 61 6c 6c 20 70 6f 73 73 69 62 6c 65  ows all possible
1c930 20 6b 65 79 77 6f 72 64 73 20 75 73 65 64 20 62   keywords used b
1c940 79 20 61 6e 79 20 62 75 69 6c 64 20 6f 66 0a 53  y any build of.S
1c950 51 4c 69 74 65 20 72 65 67 61 72 64 6c 65 73 73  QLite regardless
1c960 20 6f 66 20 5b 63 6f 6d 70 69 6c 65 2d 74 69 6d   of [compile-tim
1c970 65 20 6f 70 74 69 6f 6e 73 5d 2e 20 20 0a 4d 6f  e options].  .Mo
1c980 73 74 20 72 65 61 73 6f 6e 61 62 6c 65 20 63 6f  st reasonable co
1c990 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 75 73 65  nfigurations use
1c9a0 20 6d 6f 72 65 20 6f 72 20 61 6c 6c 20 6f 66 20   more or all of 
1c9b0 74 68 65 73 65 20 6b 65 79 77 6f 72 64 73 2c 0a  these keywords,.
1c9c0 62 75 74 20 73 6f 6d 65 20 6b 65 79 77 6f 72 64  but some keyword
1c9d0 73 20 6d 61 79 20 62 65 20 6f 6d 69 74 74 65 64  s may be omitted
1c9e0 20 77 68 65 6e 20 53 51 4c 20 6c 61 6e 67 75 61   when SQL langua
1c9f0 67 65 20 66 65 61 74 75 72 65 73 20 61 72 65 0a  ge features are.
1ca00 64 69 73 61 62 6c 65 64 2e 0a 5e 28 52 65 67 61  disabled..^(Rega
1ca10 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 63 6f  rdless of the co
1ca20 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69  mpile-time confi
1ca30 67 75 72 61 74 69 6f 6e 2c 20 61 6e 79 20 69 64  guration, any id
1ca40 65 6e 74 69 66 69 65 72 20 74 68 61 74 20 69 73  entifier that is
1ca50 20 6e 6f 74 20 6f 6e 0a 74 68 65 20 66 6f 6c 6c   not on.the foll
1ca60 6f 77 69 6e 67 20 3c 74 63 6c 3e 68 64 5f 70 75  owing <tcl>hd_pu
1ca70 74 73 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79  ts [llength $key
1ca80 77 6f 72 64 5f 6c 69 73 74 5d 3c 2f 74 63 6c 3e  word_list]</tcl>
1ca90 20 65 6c 65 6d 65 6e 74 0a 6c 69 73 74 20 69 73   element.list is
1caa0 20 6e 6f 74 20 61 20 6b 65 79 77 6f 72 64 20 74   not a keyword t
1cab0 6f 20 74 68 65 20 53 51 4c 20 70 61 72 73 65 72  o the SQL parser
1cac0 20 69 6e 20 53 51 4c 69 74 65 3a 0a 3c 2f 70 3e   in SQLite:.</p>
1cad0 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c  ..<blockquote>.<
1cae0 74 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30  table width="100
1caf0 25 22 3e 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  %"><tr>.<td alig
1cb00 6e 3d 22 6c 65 66 74 22 20 76 61 6c 69 67 6e 3d  n="left" valign=
1cb10 22 74 6f 70 22 20 77 69 64 74 68 3d 22 32 30 25  "top" width="20%
1cb20 22 3e 0a 3c 74 63 6c 3e 0a 73 65 74 20 6e 20 5b  ">.<tcl>.set n [
1cb30 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72 64  llength $keyword
1cb40 5f 6c 69 73 74 5d 0a 73 65 74 20 6e 43 6f 6c 20  _list].set nCol 
1cb50 35 0a 73 65 74 20 6e 52 6f 77 20 5b 65 78 70 72  5.set nRow [expr
1cb60 20 7b 28 24 6e 2b 24 6e 43 6f 6c 2d 31 29 2f 24   {($n+$nCol-1)/$
1cb70 6e 43 6f 6c 7d 5d 0a 73 65 74 20 69 20 30 0a 66  nCol}].set i 0.f
1cb80 6f 72 65 61 63 68 20 77 6f 72 64 20 24 6b 65 79  oreach word $key
1cb90 77 6f 72 64 5f 6c 69 73 74 20 7b 0a 20 20 69 66  word_list {.  if
1cba0 20 7b 24 69 3d 3d 24 6e 52 6f 77 7d 20 7b 0a 20   {$i==$nRow} {. 
1cbb0 20 20 20 68 64 5f 70 75 74 73 20 22 3c 2f 74 64     hd_puts "</td
1cbc0 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f  ><td valign=\"to
1cbd0 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 6c 65 66 74  p\" align=\"left
1cbe0 5c 22 20 77 69 64 74 68 3d 5c 22 32 30 25 5c 22  \" width=\"20%\"
1cbf0 3e 22 0a 20 20 20 20 73 65 74 20 69 20 31 0a 20  >".    set i 1. 
1cc00 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 69 6e   } else {.    in
1cc10 63 72 20 69 0a 20 20 7d 0a 20 20 68 64 5f 70 75  cr i.  }.  hd_pu
1cc20 74 73 20 22 24 77 6f 72 64 3c 62 72 3e 5c 6e 22  ts "$word<br>\n"
1cc30 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 64 3e 3c  .}.</tcl>.</td><
1cc40 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c  /tr></table></bl
1cc50 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a              ockquote>)^.