Documentation Source Text

Hex Artifact Content
Login

Artifact 3bedadbccaf71af7515543612f11d22e86139a31:


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 24 73 79 6e 74 61 78 3c 2f 74 64 3e 22 0a  ">$syntax</td>".
10850 20 20 68 64 5f 70 75 74 73 20 7b 3c 74 64 20 76    hd_puts {<td v
10860 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 7d 0a 20 20  align="top">}.  
10870 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6b 65  if {[llength $ke
10880 79 77 6f 72 64 73 5d 3d 3d 30 7d 20 7b 0a 20 20  ywords]==0} {.  
10890 20 20 72 65 67 65 78 70 20 7b 5b 61 2d 7a 5f 5d    regexp {[a-z_]
108a0 2b 7d 20 24 73 79 6e 74 61 78 20 6e 61 6d 65 0a  +} $syntax name.
108b0 20 20 20 20 68 64 5f 66 72 61 67 6d 65 6e 74 20      hd_fragment 
108c0 24 6e 61 6d 65 20 2a 24 6e 61 6d 65 20 22 24 7b  $name *$name "${
108d0 6e 61 6d 65 7d 28 29 20 53 51 4c 20 66 75 6e 63  name}() SQL func
108e0 74 69 6f 6e 22 0a 20 20 7d 20 65 6c 73 65 20 7b  tion".  } else {
108f0 0a 20 20 20 20 73 65 74 20 66 72 61 67 6e 61 6d  .    set fragnam
10900 65 20 5b 6c 69 6e 64 65 78 20 24 6b 65 79 77 6f  e [lindex $keywo
10910 72 64 73 20 30 5d 0a 20 20 20 20 72 65 67 73 75  rds 0].    regsu
10920 62 20 2d 61 6c 6c 20 7b 5b 5e 61 2d 7a 5d 7d 20  b -all {[^a-z]} 
10930 24 66 72 61 67 6e 61 6d 65 20 7b 7d 20 66 72 61  $fragname {} fra
10940 67 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61  gname.    hd_fra
10950 67 6d 65 6e 74 20 24 66 72 61 67 6e 61 6d 65 0a  gment $fragname.
10960 20 20 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77      eval hd_keyw
10970 6f 72 64 73 20 5b 73 74 72 69 6e 67 20 6d 61 70  ords [string map
10980 20 7b 5c 6e 20 7b 20 7d 7d 20 24 6b 65 79 77 6f   {\n { }} $keywo
10990 72 64 73 5d 0a 20 20 7d 0a 20 20 68 64 5f 72 65  rds].  }.  hd_re
109a0 73 6f 6c 76 65 20 24 64 65 73 63 0a 20 20 68 64  solve $desc.  hd
109b0 5f 70 75 74 73 20 7b 3c 2f 74 64 3e 3c 2f 74 72  _puts {</td></tr
109c0 3e 7d 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  >}.}.</tcl>..<p>
109d0 54 68 65 20 63 6f 72 65 20 66 75 6e 63 74 69 6f  The core functio
109e0 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61  ns shown below a
109f0 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20  re available by 
10a00 64 65 66 61 75 6c 74 2e 20 0a 5b 64 61 74 65 66  default. .[datef
10a10 75 6e 63 20 7c 20 44 61 74 65 20 26 61 6d 70 3b  unc | Date &amp;
10a20 20 54 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d   Time functions]
10a30 20 61 6e 64 0a 5b 61 67 67 66 75 6e 63 20 7c 20   and.[aggfunc | 
10a40 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
10a50 6f 6e 73 5d 20 61 72 65 20 64 6f 63 75 6d 65 6e  ons] are documen
10a60 74 65 64 20 73 65 70 61 72 61 74 65 6c 79 2e 20  ted separately. 
10a70 20 41 6e 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20   An.application 
10a80 6d 61 79 20 64 65 66 69 6e 65 20 61 64 64 69 74  may define addit
10a90 69 6f 6e 61 6c 0a 66 75 6e 63 74 69 6f 6e 73 20  ional.functions 
10aa0 77 72 69 74 74 65 6e 20 69 6e 20 43 20 61 6e 64  written in C and
10ab0 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 64 61   added to the da
10ac0 74 61 62 61 73 65 20 65 6e 67 69 6e 65 20 75 73  tabase engine us
10ad0 69 6e 67 0a 74 68 65 20 5b 73 71 6c 69 74 65 33  ing.the [sqlite3
10ae0 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
10af0 28 29 5d 20 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 74  ()] API.</p>..<t
10b00 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65  able border=0 ce
10b10 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74  llpadding=10>.<t
10b20 63 6c 3e 0a 66 75 6e 63 64 65 66 20 7b 61 62 73  cl>.funcdef {abs
10b30 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
10b40 20 61 62 73 28 58 29 20 66 75 6e 63 74 69 6f 6e   abs(X) function
10b50 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 62 73   returns the abs
10b60 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20 74  olute value of t
10b70 68 65 20 6e 75 6d 65 72 69 63 0a 20 20 61 72 67  he numeric.  arg
10b80 75 6d 65 6e 74 20 58 2e 20 20 5e 41 62 73 28 58  ument X.  ^Abs(X
10b90 29 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69  ) returns NULL i
10ba0 66 20 58 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20  f X is NULL. .  
10bb0 5e 28 41 62 73 28 58 29 20 72 65 74 75 72 6e 20  ^(Abs(X) return 
10bc0 30 2e 30 20 69 66 20 58 20 69 73 20 61 20 73 74  0.0 if X is a st
10bd0 72 69 6e 67 20 6f 72 20 62 6c 6f 62 0a 20 20 74  ring or blob.  t
10be0 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f  hat cannot be co
10bf0 6e 76 65 72 74 65 64 20 74 6f 20 61 20 6e 75 6d  nverted to a num
10c00 65 72 69 63 20 76 61 6c 75 65 2e 29 5e 20 20 5e  eric value.)^  ^
10c10 49 66 20 58 20 69 73 20 74 68 65 20 0a 20 20 69  If X is the .  i
10c20 6e 74 65 67 65 72 20 2d 39 32 32 33 33 37 32 30  nteger -92233720
10c30 33 36 38 35 34 37 37 35 38 30 37 20 74 68 65 6e  36854775807 then
10c40 20 61 62 73 28 58 29 20 74 68 72 6f 77 73 20 61   abs(X) throws a
10c50 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c  n integer overfl
10c60 6f 77 0a 20 20 65 72 72 6f 72 20 73 69 6e 63 65  ow.  error since
10c70 20 74 68 65 72 65 20 69 73 20 6e 6f 20 65 71 75   there is no equ
10c80 69 76 61 6c 65 6e 74 20 70 6f 73 69 74 69 76 65  ivalent positive
10c90 20 36 34 2d 62 69 74 20 74 77 6f 20 63 6f 6d 70   64-bit two comp
10ca0 6c 65 6d 65 6e 74 20 76 61 6c 75 65 2e 0a 7d 0a  lement value..}.
10cb0 0a 66 75 6e 63 64 65 66 20 7b 63 68 61 6e 67 65  .funcdef {change
10cc0 73 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  s()} {} {.  ^The
10cd0 20 63 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74   changes() funct
10ce0 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
10cf0 6e 75 6d 62 65 72 20 6f 66 20 64 61 74 61 62 61  number of databa
10d00 73 65 20 72 6f 77 73 20 74 68 61 74 20 77 65 72  se rows that wer
10d10 65 20 63 68 61 6e 67 65 64 0a 20 20 6f 72 20 69  e changed.  or i
10d20 6e 73 65 72 74 65 64 20 6f 72 20 64 65 6c 65 74  nserted or delet
10d30 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72  ed by the most r
10d40 65 63 65 6e 74 6c 79 20 63 6f 6d 70 6c 65 74 65  ecently complete
10d50 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  d SQL statement.
10d60 20 20 0a 20 20 5e 54 68 65 20 63 68 61 6e 67 65    .  ^The change
10d70 73 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  s() SQL function
10d80 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72   is a wrapper ar
10d90 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65  ound the [sqlite
10da0 33 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43  3_changes()].  C
10db0 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 20 61 6e  /C++ function an
10dc0 64 20 68 65 6e 63 65 20 66 6f 6c 6c 6f 77 73 20  d hence follows 
10dd0 74 68 65 20 73 61 6d 65 20 72 75 6c 65 73 20 66  the same rules f
10de0 6f 72 20 63 6f 75 6e 74 69 6e 67 20 63 68 61 6e  or counting chan
10df0 67 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ges..}..funcdef 
10e00 7b 63 6f 61 6c 65 73 63 65 28 58 2c 59 2c 2e 2e  {coalesce(X,Y,..
10e10 2e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  .)} {} {.  ^The 
10e20 63 6f 61 6c 65 73 63 65 28 29 20 66 75 6e 63 74  coalesce() funct
10e30 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f  ion returns a co
10e40 70 79 20 6f 66 20 69 74 73 20 66 69 72 73 74 20  py of its first 
10e50 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e  non-NULL argumen
10e60 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20  t, or.  NULL if 
10e70 61 6c 6c 20 61 72 67 75 6d 65 6e 74 73 20 61 72  all arguments ar
10e80 65 20 4e 55 4c 4c 2e 20 20 5e 43 6f 61 6c 65 73  e NULL.  ^Coales
10e90 63 65 28 29 20 6d 75 73 74 20 62 65 20 61 74 20  ce() must be at 
10ea0 6c 65 61 73 74 20 0a 20 20 32 20 61 72 67 75 6d  least .  2 argum
10eb0 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  ents..}..funcdef
10ec0 20 7b 67 6c 6f 62 28 58 2c 59 29 7d 20 7b 7d 20   {glob(X,Y)} {} 
10ed0 7b 0a 20 20 5e 54 68 65 20 67 6c 6f 62 28 58 2c  {.  ^The glob(X,
10ee0 59 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65  Y) function is e
10ef0 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 74 68 65  quivalent to the
10f00 0a 20 20 65 78 70 72 65 73 73 69 6f 6e 20 22 3c  .  expression "<
10f10 62 3e 59 20 47 4c 4f 42 20 58 3c 2f 62 3e 22 2e  b>Y GLOB X</b>".
10f20 0a 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
10f30 20 58 20 61 6e 64 20 59 20 61 72 67 75 6d 65 6e   X and Y argumen
10f40 74 73 20 61 72 65 20 72 65 76 65 72 73 65 64 20  ts are reversed 
10f50 69 6e 20 74 68 65 20 67 6c 6f 62 28 29 20 66 75  in the glob() fu
10f60 6e 63 74 69 6f 6e 0a 20 20 72 65 6c 61 74 69 76  nction.  relativ
10f70 65 20 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b  e to the infix [
10f80 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72 2e 0a  GLOB] operator..
10f90 20 20 5e 49 66 20 74 68 65 20 5b 73 71 6c 69 74    ^If the [sqlit
10fa0 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
10fb0 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20  on()] interface 
10fc0 69 73 20 75 73 65 64 20 74 6f 0a 20 20 6f 76 65  is used to.  ove
10fd0 72 72 69 64 65 20 74 68 65 20 67 6c 6f 62 28 58  rride the glob(X
10fe0 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ,Y) function wit
10ff0 68 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65  h an alternative
11000 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
11010 74 68 65 6e 0a 20 20 74 68 65 20 5b 47 4c 4f 42  then.  the [GLOB
11020 5d 20 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c 20  ] operator will 
11030 69 6e 76 6f 6b 65 20 74 68 65 20 61 6c 74 65 72  invoke the alter
11040 6e 61 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74  native implement
11050 61 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65  ation..}..funcde
11060 66 20 7b 69 66 6e 75 6c 6c 28 58 2c 59 29 7d 20  f {ifnull(X,Y)} 
11070 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 69 66 6e 75  {} {.  ^The ifnu
11080 6c 6c 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  ll() function re
11090 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20  turns a copy of 
110a0 69 74 73 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55  its first non-NU
110b0 4c 4c 20 61 72 67 75 6d 65 6e 74 2c 20 6f 72 0a  LL argument, or.
110c0 20 20 4e 55 4c 4c 20 69 66 20 62 6f 74 68 20 61    NULL if both a
110d0 72 67 75 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c  rguments are NUL
110e0 4c 2e 20 20 5e 49 66 6e 75 6c 6c 28 29 20 6d 75  L.  ^Ifnull() mu
110f0 73 74 20 68 61 76 65 20 65 78 61 63 74 6c 79 20  st have exactly 
11100 32 20 61 72 67 75 6d 65 6e 74 73 2e 0a 20 20 5e  2 arguments..  ^
11110 54 68 65 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e  The ifnull() fun
11120 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c  ction is equival
11130 65 6e 74 20 74 6f 20 5b 63 6f 61 6c 65 73 63 65  ent to [coalesce
11140 28 29 5d 20 77 69 74 68 20 74 77 6f 20 61 72 67  ()] with two arg
11150 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e 63 64  uments..}..funcd
11160 65 66 20 7b 68 65 78 28 58 29 7d 20 7b 7d 20 7b  ef {hex(X)} {} {
11170 0a 20 20 5e 54 68 65 20 68 65 78 28 29 20 66 75  .  ^The hex() fu
11180 6e 63 74 69 6f 6e 20 69 6e 74 65 72 70 72 65 74  nction interpret
11190 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74 20 61  s its argument a
111a0 73 20 61 20 42 4c 4f 42 20 61 6e 64 20 72 65 74  s a BLOB and ret
111b0 75 72 6e 73 0a 20 20 61 20 73 74 72 69 6e 67 20  urns.  a string 
111c0 77 68 69 63 68 20 69 73 20 74 68 65 20 75 70 70  which is the upp
111d0 65 72 2d 63 61 73 65 20 68 65 78 61 64 65 63 69  er-case hexadeci
111e0 6d 61 6c 20 72 65 6e 64 65 72 69 6e 67 20 6f 66  mal rendering of
111f0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
11200 20 20 74 68 61 74 20 62 6c 6f 62 2e 0a 7d 0a 0a    that blob..}..
11210 66 75 6e 63 64 65 66 20 7b 6c 61 73 74 5f 69 6e  funcdef {last_in
11220 73 65 72 74 5f 72 6f 77 69 64 28 29 7d 20 7b 7d  sert_rowid()} {}
11230 20 7b 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f 69   {.  ^The last_i
11240 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75  nsert_rowid() fu
11250 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
11260 68 65 20 5b 52 4f 57 49 44 5d 0a 20 20 6f 66 20  he [ROWID].  of 
11270 74 68 65 20 6c 61 73 74 20 72 6f 77 20 69 6e 73  the last row ins
11280 65 72 74 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ert from the dat
11290 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
112a0 20 77 68 69 63 68 20 69 6e 76 6f 6b 65 64 20 74   which invoked t
112b0 68 65 0a 20 20 66 75 6e 63 74 69 6f 6e 2e 0a 20  he.  function.. 
112c0 20 5e 54 68 65 20 6c 61 73 74 5f 69 6e 73 65 72   ^The last_inser
112d0 74 5f 72 6f 77 69 64 28 29 20 53 51 4c 20 66 75  t_rowid() SQL fu
112e0 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70  nction is a wrap
112f0 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a 20  per around the. 
11300 20 5b 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69   [sqlite3_last_i
11310 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 5d 20 43  nsert_rowid()] C
11320 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 20 66  /C++ interface f
11330 75 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63  unction..}..func
11340 64 65 66 20 7b 6c 65 6e 67 74 68 28 58 29 7d 20  def {length(X)} 
11350 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 65 6e 67  {} {.  ^The leng
11360 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  th(X) function r
11370 65 74 75 72 6e 73 20 74 68 65 20 6c 65 6e 67 74  eturns the lengt
11380 68 20 6f 66 20 58 20 69 6e 20 0a 20 20 63 68 61  h of X in .  cha
11390 72 61 63 74 65 72 73 20 69 66 20 58 20 69 73 20  racters if X is 
113a0 61 20 73 74 72 69 6e 67 2c 20 6f 72 20 69 6e 20  a string, or in 
113b0 62 79 74 65 73 20 69 66 20 58 20 69 73 20 61 20  bytes if X is a 
113c0 62 6c 6f 62 2e 0a 20 20 5e 49 66 20 58 20 69 73  blob..  ^If X is
113d0 20 4e 55 4c 4c 20 74 68 65 6e 20 6c 65 6e 67 74   NULL then lengt
113e0 68 28 58 29 20 69 73 20 4e 55 4c 4c 2e 0a 20 20  h(X) is NULL..  
113f0 5e 49 66 20 58 20 69 73 20 6e 75 6d 65 72 69 63  ^If X is numeric
11400 20 74 68 65 6e 20 6c 65 6e 67 74 68 28 58 29 20   then length(X) 
11410 72 65 74 75 72 6e 73 20 74 68 65 20 6c 65 6e 67  returns the leng
11420 74 68 20 6f 66 20 61 20 73 74 72 69 6e 67 0a 20  th of a string. 
11430 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
11440 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  of X..}..funcdef
11450 20 7b 6c 69 6b 65 28 58 2c 59 29 20 6c 69 6b 65   {like(X,Y) like
11460 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20  (X,Y,Z)} {} {.  
11470 5e 54 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63  ^The like() func
11480 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
11490 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20  implement the.  
114a0 22 3c 62 3e 59 20 4c 49 4b 45 20 58 20 26 23 39  "<b>Y LIKE X &#9
114b0 31 3b 45 53 43 41 50 45 20 5a 26 23 39 33 3b 3c  1;ESCAPE Z&#93;<
114c0 2f 62 3e 22 20 65 78 70 72 65 73 73 69 6f 6e 2e  /b>" expression.
114d0 20 0a 20 20 5e 49 66 20 74 68 65 20 6f 70 74 69   .  ^If the opti
114e0 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61 75  onal ESCAPE clau
114f0 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74  se is present, t
11500 68 65 6e 20 74 68 65 0a 20 20 6c 69 6b 65 28 29  hen the.  like()
11510 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 76   function is inv
11520 6f 6b 65 64 20 77 69 74 68 20 74 68 72 65 65 20  oked with three 
11530 61 72 67 75 6d 65 6e 74 73 2e 20 20 5e 4f 74 68  arguments.  ^Oth
11540 65 72 77 69 73 65 2c 20 69 74 20 69 73 0a 20 20  erwise, it is.  
11550 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 77 6f  invoked with two
11560 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e 6c 79 2e   arguments only.
11570 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 58   Note that the X
11580 20 61 6e 64 20 59 20 70 61 72 61 6d 65 74 65 72   and Y parameter
11590 73 20 61 72 65 0a 20 20 72 65 76 65 72 73 65 64  s are.  reversed
115a0 20 69 6e 20 74 68 65 20 6c 69 6b 65 28 29 20 66   in the like() f
115b0 75 6e 63 74 69 6f 6e 20 72 65 6c 61 74 69 76 65  unction relative
115c0 20 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b 4c   to the infix [L
115d0 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20  IKE] operator.. 
115e0 20 5e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 63   ^The [sqlite3_c
115f0 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29  reate_function()
11600 5d 20 69 6e 74 65 72 66 61 63 65 20 63 61 6e 20  ] interface can 
11610 62 65 20 75 73 65 64 20 74 6f 20 6f 76 65 72 72  be used to overr
11620 69 64 65 20 74 68 65 0a 20 20 6c 69 6b 65 28 29  ide the.  like()
11630 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68   function and th
11640 65 72 65 62 79 20 63 68 61 6e 67 65 20 74 68 65  ereby change the
11650 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68   operation of th
11660 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61  e.  [LIKE] opera
11670 74 6f 72 2e 20 20 57 68 65 6e 20 6f 76 65 72 72  tor.  When overr
11680 69 64 69 6e 67 20 74 68 65 20 6c 69 6b 65 28 29  iding the like()
11690 20 66 75 6e 63 74 69 6f 6e 2c 20 69 74 20 6d 61   function, it ma
116a0 79 20 62 65 20 69 6d 70 6f 72 74 61 6e 74 0a 20  y be important. 
116b0 20 74 6f 20 6f 76 65 72 72 69 64 65 20 62 6f 74   to override bot
116c0 68 20 74 68 65 20 74 77 6f 20 61 6e 64 20 74 68  h the two and th
116d0 72 65 65 20 61 72 67 75 6d 65 6e 74 20 76 65 72  ree argument ver
116e0 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 6c 69 6b  sions of the lik
116f0 65 28 29 20 0a 20 20 66 75 6e 63 74 69 6f 6e 2e  e() .  function.
11700 20 4f 74 68 65 72 77 69 73 65 2c 20 64 69 66 66   Otherwise, diff
11710 65 72 65 6e 74 20 63 6f 64 65 20 6d 61 79 20 62  erent code may b
11720 65 20 63 61 6c 6c 65 64 20 74 6f 20 69 6d 70 6c  e called to impl
11730 65 6d 65 6e 74 20 74 68 65 0a 20 20 5b 4c 49 4b  ement the.  [LIK
11740 45 5d 20 6f 70 65 72 61 74 6f 72 20 64 65 70 65  E] operator depe
11750 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
11760 20 6f 72 20 6e 6f 74 20 61 6e 20 45 53 43 41 50   or not an ESCAP
11770 45 20 63 6c 61 75 73 65 20 77 61 73 20 0a 20 20  E clause was .  
11780 73 70 65 63 69 66 69 65 64 2e 0a 7d 0a 0a 66 75  specified..}..fu
11790 6e 63 64 65 66 20 7b 6c 6f 61 64 5f 65 78 74 65  ncdef {load_exte
117a0 6e 73 69 6f 6e 28 58 29 20 6c 6f 61 64 5f 65 78  nsion(X) load_ex
117b0 74 65 6e 73 69 6f 6e 28 58 2c 59 29 7d 20 7b 7d  tension(X,Y)} {}
117c0 20 7b 0a 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65   {.  ^The load_e
117d0 78 74 65 6e 73 69 6f 6e 28 58 2c 59 29 20 66 75  xtension(X,Y) fu
117e0 6e 63 74 69 6f 6e 20 6c 6f 61 64 73 20 53 51 4c  nction loads SQL
117f0 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 73 20 6f  ite extensions o
11800 75 74 20 6f 66 20 74 68 65 20 73 68 61 72 65 64  ut of the shared
11810 0a 20 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20  .  library file 
11820 6e 61 6d 65 64 20 58 20 75 73 69 6e 67 20 74 68  named X using th
11830 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 59 2e  e entry point Y.
11840 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66    ^The result of
11850 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28   load_extension(
11860 29 0a 20 20 69 73 20 61 6c 77 61 79 73 20 61 20  ).  is always a 
11870 4e 55 4c 4c 2e 20 20 5e 49 66 20 59 20 69 73 20  NULL.  ^If Y is 
11880 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 74 68 65  omitted then the
11890 20 64 65 66 61 75 6c 74 20 65 6e 74 72 79 20 70   default entry p
118a0 6f 69 6e 74 0a 20 20 6f 66 20 3c 62 3e 73 71 6c  oint.  of <b>sql
118b0 69 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e 5f 69  ite3_extension_i
118c0 6e 69 74 3c 2f 62 3e 20 69 73 20 75 73 65 64 2e  nit</b> is used.
118d0 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65    ^The load_exte
118e0 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e  nsion() function
118f0 0a 20 20 72 61 69 73 65 73 20 61 6e 20 65 78 63  .  raises an exc
11900 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 65 78  eption if the ex
11910 74 65 6e 73 69 6f 6e 20 66 61 69 6c 73 20 74 6f  tension fails to
11920 20 6c 6f 61 64 20 6f 72 20 69 6e 69 74 69 61 6c   load or initial
11930 69 7a 65 20 63 6f 72 72 65 63 74 6c 79 2e 0a 0a  ize correctly...
11940 20 20 3c 70 3e 5e 54 68 65 20 6c 6f 61 64 5f 65    <p>^The load_e
11950 78 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74  xtension() funct
11960 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 69 66  ion will fail if
11970 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 20 61   the extension a
11980 74 74 65 6d 70 74 73 20 74 6f 20 0a 20 20 6d 6f  ttempts to .  mo
11990 64 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20 61  dify or delete a
119a0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 6f 72   SQL function or
119b0 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
119c0 6e 63 65 2e 20 20 5e 54 68 65 0a 20 20 65 78 74  nce.  ^The.  ext
119d0 65 6e 73 69 6f 6e 20 63 61 6e 20 61 64 64 20 6e  ension can add n
119e0 65 77 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20  ew functions or 
119f0 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
11a00 63 65 73 2c 20 62 75 74 20 63 61 6e 6e 6f 74 0a  ces, but cannot.
11a10 20 20 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c 65    modify or dele
11a20 74 65 20 65 78 69 73 74 69 6e 67 20 66 75 6e 63  te existing func
11a30 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69  tions or collati
11a40 6e 67 20 73 65 71 75 65 6e 63 65 73 20 62 65 63  ng sequences bec
11a50 61 75 73 65 0a 20 20 74 68 6f 73 65 20 66 75 6e  ause.  those fun
11a60 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 63 6f  ctions and/or co
11a70 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
11a80 73 20 6d 69 67 68 74 20 62 65 20 75 73 65 64 20  s might be used 
11a90 65 6c 73 65 77 68 65 72 65 0a 20 20 69 6e 20 74  elsewhere.  in t
11aa0 68 65 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e  he currently run
11ab0 6e 69 6e 67 20 53 51 4c 20 73 74 61 74 65 6d 65  ning SQL stateme
11ac0 6e 74 2e 20 20 54 6f 20 6c 6f 61 64 20 61 6e 20  nt.  To load an 
11ad0 65 78 74 65 6e 73 69 6f 6e 20 74 68 61 74 0a 20  extension that. 
11ae0 20 63 68 61 6e 67 65 73 20 6f 72 20 64 65 6c 65   changes or dele
11af0 74 65 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72  tes functions or
11b00 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
11b10 6e 63 65 73 2c 20 75 73 65 20 74 68 65 0a 20 20  nces, use the.  
11b20 5b 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78  [sqlite3_load_ex
11b30 74 65 6e 73 69 6f 6e 28 29 5d 20 43 2d 6c 61 6e  tension()] C-lan
11b40 67 75 61 67 65 20 41 50 49 2e 3c 2f 70 3e 0a 7d  guage API.</p>.}
11b50 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 77 65 72  ..funcdef {lower
11b60 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
11b70 20 6c 6f 77 65 72 28 58 29 20 66 75 6e 63 74 69   lower(X) functi
11b80 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70  on returns a cop
11b90 79 20 6f 66 20 73 74 72 69 6e 67 20 58 20 77 69  y of string X wi
11ba0 74 68 20 61 6c 6c 20 41 53 43 49 49 20 63 68 61  th all ASCII cha
11bb0 72 61 63 74 65 72 73 0a 20 20 63 6f 6e 76 65 72  racters.  conver
11bc0 74 65 64 20 74 6f 20 6c 6f 77 65 72 20 63 61 73  ted to lower cas
11bd0 65 2e 20 20 5e 54 68 65 20 64 65 66 61 75 6c 74  e.  ^The default
11be0 20 62 75 69 6c 74 2d 69 6e 20 6c 6f 77 65 72 28   built-in lower(
11bf0 29 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72 6b 73  ) function works
11c00 0a 20 20 66 6f 72 20 41 53 43 49 49 20 63 68 61  .  for ASCII cha
11c10 72 61 63 74 65 72 73 20 6f 6e 6c 79 2e 20 20 54  racters only.  T
11c20 6f 20 64 6f 20 63 61 73 65 20 63 6f 6e 76 65 72  o do case conver
11c30 73 69 6f 6e 73 20 6f 6e 20 6e 6f 6e 2d 41 53 43  sions on non-ASC
11c40 49 49 0a 20 20 63 68 61 72 61 63 74 65 72 73 2c  II.  characters,
11c50 20 6c 6f 61 64 20 74 68 65 20 49 43 55 20 65 78   load the ICU ex
11c60 74 65 6e 73 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63  tension..}..func
11c70 64 65 66 20 7b 6c 74 72 69 6d 28 58 29 20 6c 74  def {ltrim(X) lt
11c80 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  rim(X,Y)} {} {. 
11c90 20 5e 54 68 65 20 6c 74 72 69 6d 28 58 2c 59 29   ^The ltrim(X,Y)
11ca0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
11cb0 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65  s a string forme
11cc0 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e  d by removing an
11cd0 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72  y and all.  char
11ce0 61 63 74 65 72 73 20 74 68 61 74 20 61 70 70 65  acters that appe
11cf0 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74 68 65  ar in Y from the
11d00 20 6c 65 66 74 20 73 69 64 65 20 6f 66 20 58 2e   left side of X.
11d10 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67  .  ^If the Y arg
11d20 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64  ument is omitted
11d30 2c 20 6c 74 72 69 6d 28 58 29 20 72 65 6d 6f 76  , ltrim(X) remov
11d40 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20 74  es spaces from t
11d50 68 65 20 6c 65 66 74 20 73 69 64 65 0a 20 20 6f  he left side.  o
11d60 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  f X..}..funcdef 
11d70 7b 6d 61 78 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b  {max(X,Y,...)} {
11d80 2a 6d 61 78 43 6f 72 65 46 75 6e 63 20 2a 6d 61  *maxCoreFunc *ma
11d90 78 20 7b 6d 61 78 28 29 20 53 51 4c 20 66 75 6e  x {max() SQL fun
11da0 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65  ction}} {.  ^The
11db0 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20   multi-argument 
11dc0 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  max() function r
11dd0 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75 6d  eturns the argum
11de0 65 6e 74 20 77 69 74 68 20 74 68 65 20 0a 20 20  ent with the .  
11df0 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 2c 20 6f  maximum value, o
11e00 72 20 72 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66  r return NULL if
11e10 20 61 6e 79 20 61 72 67 75 6d 65 6e 74 20 69 73   any argument is
11e20 20 4e 55 4c 4c 2e 20 0a 20 20 5e 54 68 65 20 6d   NULL. .  ^The m
11e30 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 61  ulti-argument ma
11e40 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 73 65 61  x() function sea
11e50 72 63 68 65 73 20 69 74 73 20 61 72 67 75 6d 65  rches its argume
11e60 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  nts from left to
11e70 20 72 69 67 68 74 0a 20 20 66 6f 72 20 61 6e 20   right.  for an 
11e80 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20 64 65  argument that de
11e90 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e  fines a collatin
11ea0 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75  g function and u
11eb0 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61 74 69  ses that collati
11ec0 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20 66 6f  ng.  function fo
11ed0 72 20 61 6c 6c 20 73 74 72 69 6e 67 20 63 6f 6d  r all string com
11ee0 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e  parisons.  ^If n
11ef0 6f 6e 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d  one of the argum
11f00 65 6e 74 73 20 74 6f 20 6d 61 78 28 29 0a 20 20  ents to max().  
11f10 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61 74 69  define a collati
11f20 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74 68 65  ng function, the
11f30 6e 20 74 68 65 20 42 49 4e 41 52 59 20 63 6f 6c  n the BINARY col
11f40 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
11f50 69 73 20 75 73 65 64 2e 0a 20 20 4e 6f 74 65 20  is used..  Note 
11f60 74 68 61 74 20 3c 62 3e 6d 61 78 28 29 3c 2f 62  that <b>max()</b
11f70 3e 20 69 73 20 61 20 73 69 6d 70 6c 65 20 66 75  > is a simple fu
11f80 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20 20 69 74  nction when.  it
11f90 20 68 61 73 20 32 20 6f 72 20 6d 6f 72 65 20 61   has 2 or more a
11fa0 72 67 75 6d 65 6e 74 73 20 62 75 74 20 6f 70 65  rguments but ope
11fb0 72 61 74 65 73 20 61 73 20 61 6e 0a 20 20 5b 6d  rates as an.  [m
11fc0 69 6e 41 67 67 46 75 6e 63 20 7c 20 61 67 67 72  inAggFunc | aggr
11fd0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 5d 20  egate function] 
11fe0 69 66 20 67 69 76 65 6e 20 6f 6e 6c 79 20 61 20  if given only a 
11ff0 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2e  single argument.
12000 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69 6e  .}..funcdef {min
12010 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 69 6e  (X,Y,...)} {*min
12020 43 6f 72 65 46 75 6e 63 20 2a 6d 69 6e 20 7b 6d  CoreFunc *min {m
12030 69 6e 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  in() SQL functio
12040 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 75 6c  n}} {.  ^The mul
12050 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 69 6e 28  ti-argument min(
12060 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
12070 6e 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  ns the argument 
12080 77 69 74 68 20 74 68 65 0a 20 20 6d 69 6e 69 6d  with the.  minim
12090 75 6d 20 76 61 6c 75 65 2e 0a 20 20 5e 54 68 65  um value..  ^The
120a0 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20   multi-argument 
120b0 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 73  min() function s
120c0 65 61 72 63 68 65 73 20 69 74 73 20 61 72 67 75  earches its argu
120d0 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20  ments from left 
120e0 74 6f 20 72 69 67 68 74 0a 20 20 66 6f 72 20 61  to right.  for a
120f0 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20  n argument that 
12100 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74  defines a collat
12110 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  ing function and
12120 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61   uses that colla
12130 74 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20  ting.  function 
12140 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 20 63  for all string c
12150 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66  omparisons.  ^If
12160 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 72 67   none of the arg
12170 75 6d 65 6e 74 73 20 74 6f 20 6d 69 6e 28 29 0a  uments to min().
12180 20 20 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61    define a colla
12190 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74  ting function, t
121a0 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20 63  hen the BINARY c
121b0 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
121c0 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 4e 6f 74  n is used..  Not
121d0 65 20 74 68 61 74 20 3c 62 3e 6d 69 6e 28 29 3c  e that <b>min()<
121e0 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c 65 20  /b> is a simple 
121f0 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20 20  function when.  
12200 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72 65  it has 2 or more
12210 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20 6f   arguments but o
12220 70 65 72 61 74 65 73 20 61 73 20 61 6e 20 0a 20  perates as an . 
12230 20 5b 6d 61 78 41 67 67 46 75 6e 63 20 7c 20 61   [maxAggFunc | a
12240 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
12250 6e 5d 20 69 66 20 67 69 76 65 6e 0a 20 20 6f 6e  n] if given.  on
12260 6c 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75  ly a single argu
12270 6d 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  ment..}..funcdef
12280 20 7b 6e 75 6c 6c 69 66 28 58 2c 59 29 7d 20 7b   {nullif(X,Y)} {
12290 7d 20 7b 0a 20 20 5e 54 68 65 20 6e 75 6c 6c 69  } {.  ^The nulli
122a0 66 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  f(X,Y) function 
122b0 72 65 74 75 72 6e 73 20 69 74 73 20 66 69 72 73  returns its firs
122c0 74 20 61 72 67 75 6d 65 6e 74 20 69 66 20 74 68  t argument if th
122d0 65 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 0a  e arguments are.
122e0 20 20 64 69 66 66 65 72 65 6e 74 20 61 6e 64 20    different and 
122f0 4e 55 4c 4c 20 69 66 20 74 68 65 20 61 72 67 75  NULL if the argu
12300 6d 65 6e 74 73 20 61 72 65 20 74 68 65 20 73 61  ments are the sa
12310 6d 65 2e 20 20 5e 54 68 65 20 6e 75 6c 6c 69 66  me.  ^The nullif
12320 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 0a 20  (X,Y) function. 
12330 20 73 65 61 72 63 68 65 73 20 69 74 73 20 61 72   searches its ar
12340 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66  guments from lef
12350 74 20 74 6f 20 72 69 67 68 74 20 66 6f 72 20 61  t to right for a
12360 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20  n argument that 
12370 64 65 66 69 6e 65 73 20 61 0a 20 20 63 6f 6c 6c  defines a.  coll
12380 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61  ating function a
12390 6e 64 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c  nd uses that col
123a0 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
123b0 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 0a 20  for all string. 
123c0 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e   comparisons.  ^
123d0 49 66 20 6e 65 69 74 68 65 72 20 61 72 67 75 6d  If neither argum
123e0 65 6e 74 20 74 6f 20 6e 75 6c 6c 69 66 28 29 20  ent to nullif() 
123f0 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74  defines a collat
12400 69 6e 67 20 66 75 6e 63 74 69 6f 6e 0a 20 20 74  ing function.  t
12410 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20 69  hen the BINARY i
12420 73 20 75 73 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64  s used..}..funcd
12430 65 66 20 7b 71 75 6f 74 65 28 58 29 7d 20 7b 7d  ef {quote(X)} {}
12440 20 7b 0a 20 20 5e 54 68 65 20 71 75 6f 74 65 28   {.  ^The quote(
12450 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
12460 72 6e 73 20 61 20 73 74 72 69 6e 67 20 77 68 69  rns a string whi
12470 63 68 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  ch is the value 
12480 6f 66 0a 20 20 69 74 73 20 61 72 67 75 6d 65 6e  of.  its argumen
12490 74 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 69  t suitable for i
124a0 6e 63 6c 75 73 69 6f 6e 20 69 6e 74 6f 20 61 6e  nclusion into an
124b0 6f 74 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d  other SQL statem
124c0 65 6e 74 2e 0a 20 20 5e 53 74 72 69 6e 67 73 20  ent..  ^Strings 
124d0 61 72 65 20 73 75 72 72 6f 75 6e 64 65 64 20 62  are surrounded b
124e0 79 20 73 69 6e 67 6c 65 2d 71 75 6f 74 65 73 20  y single-quotes 
124f0 77 69 74 68 20 65 73 63 61 70 65 73 20 6f 6e 20  with escapes on 
12500 69 6e 74 65 72 69 6f 72 20 71 75 6f 74 65 73 0a  interior quotes.
12510 20 20 61 73 20 6e 65 65 64 65 64 2e 20 20 5e 42    as needed.  ^B
12520 4c 4f 42 73 20 61 72 65 20 65 6e 63 6f 64 65 64  LOBs are encoded
12530 20 61 73 20 68 65 78 61 64 65 63 69 6d 61 6c 20   as hexadecimal 
12540 6c 69 74 65 72 61 6c 73 2e 0a 7d 0a 0a 66 75 6e  literals..}..fun
12550 63 64 65 66 20 7b 72 61 6e 64 6f 6d 28 29 7d 20  cdef {random()} 
12560 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 61 6e 64  {} {.  ^The rand
12570 6f 6d 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  om() function re
12580 74 75 72 6e 73 20 61 20 70 73 65 75 64 6f 2d 72  turns a pseudo-r
12590 61 6e 64 6f 6d 20 69 6e 74 65 67 65 72 0a 20 20  andom integer.  
125a0 62 65 74 77 65 65 6e 20 2d 39 32 32 33 33 37 32  between -9223372
125b0 30 33 36 38 35 34 37 37 35 38 30 38 20 61 6e 64  036854775808 and
125c0 20 2b 39 32 32 33 33 37 32 30 33 36 38 35 34 37   +92233720368547
125d0 37 35 38 30 37 2e 0a 7d 0a 0a 66 75 6e 63 64 65  75807..}..funcde
125e0 66 20 7b 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29  f {randomblob(N)
125f0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 61  } {} {.  ^The ra
12600 6e 64 6f 6d 62 6c 6f 62 28 4e 29 20 66 75 6e 63  ndomblob(N) func
12610 74 69 6f 6e 20 72 65 74 75 72 6e 20 61 6e 20 4e  tion return an N
12620 2d 62 79 74 65 20 62 6c 6f 62 20 63 6f 6e 74 61  -byte blob conta
12630 69 6e 69 6e 67 20 70 73 65 75 64 6f 2d 72 61 6e  ining pseudo-ran
12640 64 6f 6d 0a 20 20 62 79 74 65 73 2e 20 5e 49 66  dom.  bytes. ^If
12650 20 4e 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20   N is less than 
12660 31 20 74 68 65 6e 20 61 20 31 2d 62 79 74 65 20  1 then a 1-byte 
12670 72 61 6e 64 6f 6d 20 62 6c 6f 62 20 69 73 20 72  random blob is r
12680 65 74 75 72 6e 65 64 2e 0a 0a 20 20 3c 70 3e 48  eturned...  <p>H
12690 69 6e 74 3a 20 20 61 70 70 6c 69 63 61 74 69 6f  int:  applicatio
126a0 6e 73 20 63 61 6e 20 67 65 6e 65 72 61 74 65 20  ns can generate 
126b0 67 6c 6f 62 61 6c 6c 79 20 75 6e 69 71 75 65 20  globally unique 
126c0 69 64 65 6e 74 69 66 69 65 72 73 0a 20 20 75 73  identifiers.  us
126d0 69 6e 67 20 74 68 69 73 20 66 75 6e 63 74 69 6f  ing this functio
126e0 6e 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  n together with 
126f0 5b 68 65 78 28 29 5d 20 61 6e 64 2f 6f 72 0a 20  [hex()] and/or. 
12700 20 5b 6c 6f 77 65 72 28 29 5d 20 6c 69 6b 65 20   [lower()] like 
12710 74 68 69 73 3a 3c 2f 70 3e 0a 0a 20 20 3c 62 6c  this:</p>..  <bl
12720 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 68 65 78 28  ockquote>.  hex(
12730 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29 3c  randomblob(16))<
12740 62 72 3e 3c 2f 62 72 3e 0a 20 20 6c 6f 77 65 72  br></br>.  lower
12750 28 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28  (hex(randomblob(
12760 31 36 29 29 29 0a 20 20 3c 2f 62 6c 6f 63 6b 71  16))).  </blockq
12770 75 6f 74 65 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66  uote>.}..funcdef
12780 20 7b 72 65 70 6c 61 63 65 28 58 2c 59 2c 5a 29   {replace(X,Y,Z)
12790 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 65  } {} {.  ^The re
127a0 70 6c 61 63 65 28 58 2c 59 2c 5a 29 20 66 75 6e  place(X,Y,Z) fun
127b0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
127c0 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79  string formed by
127d0 20 73 75 62 73 74 69 74 75 74 69 6e 67 0a 20 20   substituting.  
127e0 73 74 72 69 6e 67 20 5a 20 66 6f 72 20 65 76 65  string Z for eve
127f0 72 79 20 6f 63 63 75 72 72 61 6e 63 65 20 6f 66  ry occurrance of
12800 20 73 74 72 69 6e 67 20 59 20 69 6e 20 73 74 72   string Y in str
12810 69 6e 67 20 58 2e 20 20 5e 54 68 65 20 5b 42 49  ing X.  ^The [BI
12820 4e 41 52 59 5d 0a 20 20 63 6f 6c 6c 61 74 69 6e  NARY].  collatin
12830 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 73  g sequence is us
12840 65 64 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f  ed for compariso
12850 6e 73 2e 20 20 5e 49 66 20 59 20 69 73 20 61 6e  ns.  ^If Y is an
12860 20 65 6d 70 74 79 0a 20 20 73 74 72 69 6e 67 20   empty.  string 
12870 74 68 65 6e 20 72 65 74 75 72 6e 20 58 20 75 6e  then return X un
12880 63 68 61 6e 67 65 64 2e 20 20 5e 49 66 20 5a 20  changed.  ^If Z 
12890 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79  is not initially
128a0 0a 20 20 61 20 73 74 72 69 6e 67 2c 20 69 74 20  .  a string, it 
128b0 69 73 20 63 61 73 74 20 74 6f 20 61 20 55 54 46  is cast to a UTF
128c0 2d 38 20 73 74 72 69 6e 67 20 70 72 69 6f 72 20  -8 string prior 
128d0 74 6f 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 7d  to processing..}
128e0 0a 0a 66 75 6e 63 64 65 66 20 7b 72 6f 75 6e 64  ..funcdef {round
128f0 28 58 29 20 72 6f 75 6e 64 28 58 2c 59 29 7d 20  (X) round(X,Y)} 
12900 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 6f 75 6e  {} {.  ^The roun
12910 64 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  d(X,Y) function 
12920 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67  returns a string
12930 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
12940 6f 66 20 74 68 65 20 66 6c 6f 61 74 69 6e 67 2d  of the floating-
12950 70 6f 69 6e 74 0a 20 20 76 61 6c 75 65 20 58 20  point.  value X 
12960 72 6f 75 6e 64 65 64 20 74 6f 20 59 20 64 69 67  rounded to Y dig
12970 69 74 73 20 74 6f 20 74 68 65 20 72 69 67 68 74  its to the right
12980 20 6f 66 20 74 68 65 20 64 65 63 69 6d 61 6c 20   of the decimal 
12990 70 6f 69 6e 74 2e 0a 20 20 5e 49 66 20 74 68 65  point..  ^If the
129a0 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f   Y argument is o
129b0 6d 69 74 74 65 64 2c 20 74 68 65 20 58 20 76 61  mitted, the X va
129c0 6c 75 65 20 69 73 20 74 72 75 6e 63 61 74 65 64  lue is truncated
129d0 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a   to an integer..
129e0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 74 72 69  }..funcdef {rtri
129f0 6d 28 58 29 20 72 74 72 69 6d 28 58 2c 59 29 7d  m(X) rtrim(X,Y)}
12a00 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 74 72   {} {.  ^The rtr
12a10 69 6d 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  im(X,Y) function
12a20 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
12a30 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f  g formed by remo
12a40 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c  ving any and all
12a50 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 74 68  .  characters th
12a60 61 74 20 61 70 70 65 61 72 20 69 6e 20 59 20 66  at appear in Y f
12a70 72 6f 6d 20 74 68 65 20 72 69 67 68 74 20 73 69  rom the right si
12a80 64 65 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74  de of X..  ^If t
12a90 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73  he Y argument is
12aa0 20 6f 6d 69 74 74 65 64 2c 20 72 74 72 69 6d 28   omitted, rtrim(
12ab0 58 29 20 72 65 6d 6f 76 65 73 20 73 70 61 63 65  X) removes space
12ac0 73 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74  s from the right
12ad0 0a 20 20 73 69 64 65 20 6f 66 20 58 2e 0a 7d 0a  .  side of X..}.
12ae0 0a 66 75 6e 63 64 65 66 20 7b 73 6f 75 6e 64 65  .funcdef {sounde
12af0 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  x(X)} {} {.  ^Th
12b00 65 20 73 6f 75 6e 64 65 78 28 58 29 20 66 75 6e  e soundex(X) fun
12b10 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
12b20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 74  string that is t
12b30 68 65 20 73 6f 75 6e 64 65 78 20 65 6e 63 6f 64  he soundex encod
12b40 69 6e 67 20 0a 20 20 6f 66 20 74 68 65 20 73 74  ing .  of the st
12b50 72 69 6e 67 20 58 2e 0a 20 20 5e 54 68 65 20 73  ring X..  ^The s
12b60 74 72 69 6e 67 20 22 3f 30 30 30 22 20 69 73 20  tring "?000" is 
12b70 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65 20  returned if the 
12b80 61 72 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c  argument is NULL
12b90 20 6f 72 20 63 6f 6e 74 61 69 6e 73 0a 20 20 6e   or contains.  n
12ba0 6f 20 41 53 43 49 49 20 61 6c 70 68 61 62 65 74  o ASCII alphabet
12bb0 69 63 20 63 68 61 72 61 63 74 65 72 73 2e 0a 20  ic characters.. 
12bc0 20 5e 28 54 68 69 73 20 66 75 6e 63 74 69 6f 6e   ^(This function
12bd0 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
12be0 20 53 51 4c 69 74 65 20 62 79 20 64 65 66 61 75   SQLite by defau
12bf0 6c 74 2e 0a 20 20 49 74 20 69 73 20 6f 6e 6c 79  lt..  It is only
12c00 20 61 76 61 69 6c 61 62 6c 65 20 69 66 20 74 68   available if th
12c10 65 20 5b 53 51 4c 49 54 45 5f 53 4f 55 4e 44 45  e [SQLITE_SOUNDE
12c20 58 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  X] compile-time 
12c30 6f 70 74 69 6f 6e 0a 20 20 69 73 20 75 73 65 64  option.  is used
12c40 20 77 68 65 6e 20 53 51 4c 69 74 65 20 69 73 20   when SQLite is 
12c50 62 75 69 6c 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63  built.)^.}..func
12c60 64 65 66 20 7b 73 71 6c 69 74 65 5f 73 6f 75 72  def {sqlite_sour
12c70 63 65 5f 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20  ce_id()} {} {.  
12c80 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 6f 75 72  ^The sqlite_sour
12c90 63 65 5f 69 64 28 29 20 66 75 6e 63 74 69 6f 6e  ce_id() function
12ca0 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
12cb0 67 20 74 68 61 74 20 69 64 65 6e 74 69 66 69 65  g that identifie
12cc0 73 20 74 68 65 0a 20 20 73 70 65 63 69 66 69 63  s the.  specific
12cd0 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20   version of the 
12ce0 73 6f 75 72 63 65 20 63 6f 64 65 20 74 68 61 74  source code that
12cf0 20 77 61 73 20 75 73 65 64 20 74 6f 20 62 75 69   was used to bui
12d00 6c 64 20 74 68 65 20 53 51 4c 69 74 65 0a 20 20  ld the SQLite.  
12d10 6c 69 62 72 61 72 79 2e 20 20 5e 54 68 65 20 73  library.  ^The s
12d20 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62  tring returned b
12d30 79 20 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f  y sqlite_source_
12d40 69 64 28 29 20 62 65 67 69 6e 73 20 77 69 74 68  id() begins with
12d50 0a 20 20 74 68 65 20 64 61 74 65 20 61 6e 64 20  .  the date and 
12d60 74 69 6d 65 20 74 68 61 74 20 74 68 65 20 73 6f  time that the so
12d70 75 72 63 65 20 63 6f 64 65 20 77 61 73 20 63 68  urce code was ch
12d80 65 63 6b 65 64 20 69 6e 20 61 6e 64 20 69 73 20  ecked in and is 
12d90 66 6f 6c 6c 6f 77 73 20 62 79 0a 20 20 61 6e 20  follows by.  an 
12da0 53 48 41 31 20 68 61 73 68 20 74 68 61 74 20 75  SHA1 hash that u
12db0 6e 69 71 75 65 6c 79 20 69 64 65 6e 74 69 66 69  niquely identifi
12dc0 65 73 20 74 68 65 20 73 6f 75 72 63 65 20 74 72  es the source tr
12dd0 65 65 2e 20 20 5e 54 68 69 73 20 66 75 6e 63 74  ee.  ^This funct
12de0 69 6f 6e 20 69 73 0a 20 20 61 6e 20 53 51 4c 20  ion is.  an SQL 
12df0 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
12e00 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 6f 75 72  he [sqlite3_sour
12e10 63 65 69 64 28 29 5d 20 43 20 69 6e 74 65 72 66  ceid()] C interf
12e20 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ace..}..funcdef 
12e30 7b 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28  {sqlite_version(
12e40 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73  )} {} {.  ^The s
12e50 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 20  qlite_version() 
12e60 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
12e70 20 74 68 65 20 76 65 72 73 69 6f 6e 20 73 74 72   the version str
12e80 69 6e 67 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ing for the SQLi
12e90 74 65 0a 20 20 6c 69 62 72 61 72 79 20 74 68 61  te.  library tha
12ea0 74 20 69 73 20 72 75 6e 6e 69 6e 67 2e 20 20 5e  t is running.  ^
12eb0 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
12ec0 20 61 6e 20 53 51 4c 0a 20 20 77 72 61 70 70 65   an SQL.  wrappe
12ed0 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71  r around the [sq
12ee0 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e  lite3_libversion
12ef0 28 29 5d 20 43 2d 69 6e 74 65 72 66 61 63 65 2e  ()] C-interface.
12f00 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 75 62  .}..funcdef {sub
12f10 73 74 72 28 58 2c 59 2c 5a 29 20 73 75 62 73 74  str(X,Y,Z) subst
12f20 72 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  r(X,Y)} {} {.  ^
12f30 54 68 65 20 73 75 62 73 74 72 28 58 2c 59 2c 5a  The substr(X,Y,Z
12f40 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
12f50 6e 73 20 61 20 73 75 62 73 74 72 69 6e 67 20 6f  ns a substring o
12f60 66 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 58  f input string X
12f70 20 74 68 61 74 20 62 65 67 69 6e 73 0a 20 20 77   that begins.  w
12f80 69 74 68 20 74 68 65 20 59 2d 74 68 20 63 68 61  ith the Y-th cha
12f90 72 61 63 74 65 72 20 61 6e 64 20 77 68 69 63 68  racter and which
12fa0 20 69 73 20 5a 20 63 68 61 72 61 63 74 65 72 73   is Z characters
12fb0 20 6c 6f 6e 67 2e 0a 20 20 5e 49 66 20 5a 20 69   long..  ^If Z i
12fc0 73 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 73  s omitted then s
12fd0 75 62 73 74 72 28 58 2c 59 29 20 72 65 74 75 72  ubstr(X,Y) retur
12fe0 6e 73 20 61 6c 6c 20 63 68 61 72 61 63 74 65 72  ns all character
12ff0 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6e 64   through the end
13000 0a 20 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  .  of the string
13010 20 58 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74   X beginning wit
13020 68 20 74 68 65 20 59 2d 74 68 2e 0a 20 20 5e 54  h the Y-th..  ^T
13030 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 68 61  he left-most cha
13040 72 61 63 74 65 72 20 6f 66 20 58 20 69 73 20 6e  racter of X is n
13050 75 6d 62 65 72 20 31 2e 20 20 5e 49 66 20 59 20  umber 1.  ^If Y 
13060 69 73 20 6e 65 67 61 74 69 76 65 0a 20 20 74 68  is negative.  th
13070 65 20 74 68 65 20 66 69 72 73 74 20 63 68 61 72  e the first char
13080 61 63 74 65 72 20 6f 66 20 74 68 65 20 73 75 62  acter of the sub
13090 73 74 72 69 6e 67 20 69 73 20 66 6f 75 6e 64 20  string is found 
130a0 62 79 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f 6d  by counting from
130b0 20 74 68 65 0a 20 20 72 69 67 68 74 20 72 61 74   the.  right rat
130c0 68 65 72 20 74 68 61 6e 20 74 68 65 20 6c 65 66  her than the lef
130d0 74 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 65 67  t.  ^If Z is neg
130e0 61 74 69 76 65 20 74 68 65 6e 0a 20 20 74 68 65  ative then.  the
130f0 20 61 62 73 28 5a 29 20 63 68 61 72 61 63 74 65   abs(Z) characte
13100 72 73 20 70 72 65 63 65 65 64 69 6e 67 20 74 68  rs preceeding th
13110 65 20 59 2d 74 68 20 63 68 61 72 61 63 74 65 72  e Y-th character
13120 20 61 72 65 20 72 65 74 75 72 6e 65 64 2e 0a 20   are returned.. 
13130 20 5e 49 66 20 58 20 69 73 20 73 74 72 69 6e 67   ^If X is string
13140 20 74 68 65 6e 20 63 68 61 72 61 63 74 65 72 73   then characters
13150 20 69 6e 64 69 63 65 73 20 72 65 66 65 72 20 74   indices refer t
13160 6f 20 61 63 74 75 61 6c 20 55 54 46 2d 38 20 0a  o actual UTF-8 .
13170 20 20 63 68 61 72 61 63 74 65 72 73 2e 20 20 5e    characters.  ^
13180 49 66 20 58 20 69 73 20 61 20 42 4c 4f 42 20 74  If X is a BLOB t
13190 68 65 6e 20 74 68 65 20 69 6e 64 69 63 65 73 20  hen the indices 
131a0 72 65 66 65 72 20 74 6f 20 62 79 74 65 73 2e 0a  refer to bytes..
131b0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 6f 74 61  }..funcdef {tota
131c0 6c 5f 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20  l_changes()} {} 
131d0 7b 0a 20 20 5e 54 68 65 20 74 6f 74 61 6c 5f 63  {.  ^The total_c
131e0 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f  hanges() functio
131f0 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  n returns the nu
13200 6d 62 65 72 20 6f 66 20 72 6f 77 20 63 68 61 6e  mber of row chan
13210 67 65 73 0a 20 20 63 61 75 73 65 64 20 62 79 20  ges.  caused by 
13220 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f  INSERT, UPDATE o
13230 72 20 44 45 4c 45 54 45 0a 20 20 73 74 61 74 65  r DELETE.  state
13240 6d 65 6e 74 73 20 73 69 6e 63 65 20 74 68 65 20  ments since the 
13250 63 75 72 72 65 6e 74 20 64 61 74 61 62 61 73 65  current database
13260 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20   connection was 
13270 6f 70 65 6e 65 64 2e 0a 20 20 5e 54 68 69 73 20  opened..  ^This 
13280 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72  function is a wr
13290 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65  apper around the
132a0 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f   [sqlite3_total_
132b0 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43  changes()].  C/C
132c0 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a  ++ interface..}.
132d0 0a 66 75 6e 63 64 65 66 20 7b 74 72 69 6d 28 58  .funcdef {trim(X
132e0 29 20 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20  ) trim(X,Y)} {} 
132f0 7b 0a 20 20 5e 54 68 65 20 74 72 69 6d 28 58 2c  {.  ^The trim(X,
13300 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
13310 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72  rns a string for
13320 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20  med by removing 
13330 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68  any and all.  ch
13340 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70  aracters that ap
13350 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 62  pear in Y from b
13360 6f 74 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 20  oth ends of X.. 
13370 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75 6d   ^If the Y argum
13380 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20  ent is omitted, 
13390 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20  trim(X) removes 
133a0 73 70 61 63 65 73 20 66 72 6f 6d 20 62 6f 74 68  spaces from both
133b0 20 65 6e 64 73 20 6f 66 20 58 2e 0a 7d 0a 0a 66   ends of X..}..f
133c0 75 6e 63 64 65 66 20 7b 74 79 70 65 6f 66 28 58  uncdef {typeof(X
133d0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74  )} {} {.  ^The t
133e0 79 70 65 6f 66 28 58 29 20 66 75 6e 63 74 69 6f  ypeof(X) functio
133f0 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69  n returns a stri
13400 6e 67 20 74 68 61 74 20 69 6e 64 69 63 61 74 65  ng that indicate
13410 73 20 74 68 65 20 5b 64 61 74 61 74 79 70 65 5d  s the [datatype]
13420 20 6f 66 0a 20 20 74 68 65 20 65 78 70 72 65 73   of.  the expres
13430 73 69 6f 6e 20 58 3a 20 22 6e 75 6c 6c 22 2c 20  sion X: "null", 
13440 22 69 6e 74 65 67 65 72 22 2c 20 22 72 65 61 6c  "integer", "real
13450 22 2c 20 22 74 65 78 74 22 2c 20 6f 72 20 22 62  ", "text", or "b
13460 6c 6f 62 22 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  lob"..}..funcdef
13470 20 7b 75 70 70 65 72 28 58 29 7d 20 7b 7d 20 7b   {upper(X)} {} {
13480 0a 20 20 5e 54 68 65 20 75 70 70 65 72 28 58 29  .  ^The upper(X)
13490 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
134a0 73 20 61 20 63 6f 70 79 20 6f 66 20 69 6e 70 75  s a copy of inpu
134b0 74 20 73 74 72 69 6e 67 20 58 20 69 6e 20 77 68  t string X in wh
134c0 69 63 68 20 61 6c 6c 20 0a 20 20 6c 6f 77 65 72  ich all .  lower
134d0 2d 63 61 73 65 20 41 53 43 49 49 20 63 68 61 72  -case ASCII char
134e0 61 63 74 65 72 73 20 61 72 65 20 63 6f 6e 76 65  acters are conve
134f0 72 74 65 64 20 74 6f 20 74 68 65 69 72 20 75 70  rted to their up
13500 70 65 72 2d 63 61 73 65 20 65 71 75 69 76 61 6c  per-case equival
13510 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ent..}..funcdef 
13520 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29 7d 20 7b 7d  {zeroblob(N)} {}
13530 20 7b 0a 20 20 5e 54 68 65 20 7a 65 72 6f 62 6c   {.  ^The zerobl
13540 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72  ob(N) function r
13550 65 74 75 72 6e 73 20 61 20 42 4c 4f 42 20 63 6f  eturns a BLOB co
13560 6e 73 69 73 74 69 6e 67 20 6f 66 20 4e 20 62 79  nsisting of N by
13570 74 65 73 20 6f 66 20 30 78 30 30 2e 0a 20 20 53  tes of 0x00..  S
13580 51 4c 69 74 65 20 6d 61 6e 61 67 65 73 20 74 68  QLite manages th
13590 65 73 65 20 7a 65 72 6f 62 6c 6f 62 73 20 76 65  ese zeroblobs ve
135a0 72 79 20 65 66 66 69 63 69 65 6e 74 6c 79 2e 20  ry efficiently. 
135b0 20 5a 65 72 6f 62 6c 6f 62 73 20 63 61 6e 20 62   Zeroblobs can b
135c0 65 20 75 73 65 64 20 74 6f 0a 20 20 72 65 73 65  e used to.  rese
135d0 72 76 65 20 73 70 61 63 65 20 66 6f 72 20 61 20  rve space for a 
135e0 42 4c 4f 42 20 74 68 61 74 20 69 73 20 6c 61 74  BLOB that is lat
135f0 65 72 20 77 72 69 74 74 65 6e 20 75 73 69 6e 67  er written using
13600 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f   .  [sqlite3_blo
13610 62 5f 6f 70 65 6e 28 29 20 7c 20 69 6e 63 72 65  b_open() | incre
13620 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 5d  mental BLOB I/O]
13630 2e 0a 20 20 5e 54 68 69 73 20 53 51 4c 20 66 75  ..  ^This SQL fu
13640 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65 6d  nction is implem
13650 65 6e 74 65 64 20 75 73 69 6e 67 20 74 68 65 20  ented using the 
13660 5b 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  [sqlite3_result_
13670 7a 65 72 6f 62 6c 6f 62 28 29 5d 0a 20 20 72 6f  zeroblob()].  ro
13680 75 74 69 6e 65 20 66 72 6f 6d 20 74 68 65 20 43  utine from the C
13690 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a  /C++ interface..
136a0 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c 65  }.</tcl>.</table
136b0 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
136c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65 63 74 69 6f 6e 20  #######.Section 
13710 7b 44 61 74 65 20 41 6e 64 20 54 69 6d 65 20 46  {Date And Time F
13720 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65 66 75  unctions} datefu
13730 6e 63 20 7b 2a 64 61 74 65 66 75 6e 63 7d 0a 68  nc {*datefunc}.h
13740 64 5f 6b 65 79 77 6f 72 64 73 20 7b 64 61 74 65  d_keywords {date
13750 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d  () SQL function}
13760 20 7b 74 69 6d 65 28 29 20 53 51 4c 20 66 75 6e   {time() SQL fun
13770 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72  ction}.hd_keywor
13780 64 73 20 7b 64 61 74 65 74 69 6d 65 28 29 20 53  ds {datetime() S
13790 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b 6a 75  QL function} {ju
137a0 6c 69 61 6e 64 61 79 28 29 20 53 51 4c 20 66 75  lianday() SQL fu
137b0 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f  nction}.hd_keywo
137c0 72 64 73 20 7b 73 74 72 66 74 69 6d 65 28 29 20  rds {strftime() 
137d0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 3c 2f  SQL function}.</
137e0 74 63 6c 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65  tcl>..<p>.SQLite
137f0 20 73 75 70 70 6f 72 74 73 20 66 69 76 65 20 64   supports five d
13800 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e  ate and time fun
13810 63 74 69 6f 6e 73 20 61 73 20 66 6f 6c 6c 6f 77  ctions as follow
13820 73 3a 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 6f 6c  s:.</p>..<p>.<ol
13830 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65  >.<li> ^(<b>date
13840 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69  (</b><i>timestri
13850 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f  ng, modifier, mo
13860 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c  difier, ...</i><
13870 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a  b>)</b>)^ </li>.
13880 3c 6c 69 3e 20 5e 28 3c 62 3e 74 69 6d 65 28 3c  <li> ^(<b>time(<
13890 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67  /b><i>timestring
138a0 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69  , modifier, modi
138b0 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e  fier, ...</i><b>
138c0 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c  )</b>)^ </li>.<l
138d0 69 3e 20 5e 28 3c 62 3e 64 61 74 65 74 69 6d 65  i> ^(<b>datetime
138e0 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69  (</b><i>timestri
138f0 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f  ng, modifier, mo
13900 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c  difier, ...</i><
13910 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a  b>)</b>)^ </li>.
13920 3c 6c 69 3e 20 5e 28 3c 62 3e 6a 75 6c 69 61 6e  <li> ^(<b>julian
13930 64 61 79 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73  day(</b><i>times
13940 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c  tring, modifier,
13950 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f   modifier, ...</
13960 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c  i><b>)</b>)^ </l
13970 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 73 74 72  i>.<li> ^(<b>str
13980 66 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 66 6f 72  ftime(</b><i>for
13990 6d 61 74 2c 20 74 69 6d 65 73 74 72 69 6e 67 2c  mat, timestring,
139a0 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66   modifier, modif
139b0 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29  ier, ...</i><b>)
139c0 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 2f 6f  </b>)^ </li>.</o
139d0 6c 3e 0a 0a 3c 70 3e 0a 5e 41 6c 6c 20 66 69 76  l>..<p>.^All fiv
139e0 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  e date and time 
139f0 66 75 6e 63 74 69 6f 6e 73 20 74 61 6b 65 20 61  functions take a
13a00 20 74 69 6d 65 20 73 74 72 69 6e 67 20 61 73 20   time string as 
13a10 61 6e 20 61 72 67 75 6d 65 6e 74 2e 20 0a 5e 54  an argument. .^T
13a20 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20 69  he time string i
13a30 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65  s followed by ze
13a40 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64 69 66  ro or more modif
13a50 69 65 72 73 2e 20 0a 5e 54 68 65 20 73 74 72 66  iers. .^The strf
13a60 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  time() function 
13a70 61 6c 73 6f 20 74 61 6b 65 73 20 61 20 66 6f 72  also takes a for
13a80 6d 61 74 20 73 74 72 69 6e 67 20 61 73 20 69 74  mat string as it
13a90 73 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  s first argument
13aa0 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20  ..</p>..<p>.The 
13ab0 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75  date and time fu
13ac0 6e 63 74 69 6f 6e 73 20 75 73 65 20 61 20 73 75  nctions use a su
13ad0 62 73 65 74 20 6f 66 0a 5b 68 74 74 70 3a 2f 2f  bset of.[http://
13ae0 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67  en.wikipedia.org
13af0 2f 77 69 6b 69 2f 49 53 4f 5f 38 36 30 31 20 7c  /wiki/ISO_8601 |
13b00 20 49 53 30 2d 38 36 30 31 5d 20 64 61 74 65 20   IS0-8601] date 
13b10 61 6e 64 20 74 69 6d 65 0a 66 6f 72 6d 61 74 73  and time.formats
13b20 2e 0a 5e 54 68 65 20 64 61 74 65 28 29 20 66 75  ..^The date() fu
13b30 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
13b40 68 65 20 64 61 74 65 20 69 6e 20 74 68 69 73 20  he date in this 
13b50 66 6f 72 6d 61 74 3a 20 59 59 59 59 2d 4d 4d 2d  format: YYYY-MM-
13b60 44 44 2e 20 0a 5e 54 68 65 20 74 69 6d 65 28 29  DD. .^The time()
13b70 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
13b80 73 20 74 68 65 20 74 69 6d 65 20 61 73 20 48 48  s the time as HH
13b90 3a 4d 4d 3a 53 53 2e 20 0a 5e 54 68 65 20 64 61  :MM:SS. .^The da
13ba0 74 65 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f  tetime() functio
13bb0 6e 20 72 65 74 75 72 6e 73 20 22 59 59 59 59 2d  n returns "YYYY-
13bc0 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e  MM-DD HH:MM:SS".
13bd0 20 0a 5e 28 54 68 65 20 6a 75 6c 69 61 6e 64 61   .^(The julianda
13be0 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  y() function ret
13bf0 75 72 6e 73 20 74 68 65 20 0a 5b 68 74 74 70 3a  urns the .[http:
13c00 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
13c10 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64  rg/wiki/Julian_d
13c20 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61 79 5d  ay | Julian day]
13c30 20 2d 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66   - the.number of
13c40 20 64 61 79 73 20 73 69 6e 63 65 20 6e 6f 6f 6e   days since noon
13c50 20 69 6e 20 47 72 65 65 6e 77 69 63 68 20 6f 6e   in Greenwich on
13c60 20 4e 6f 76 65 6d 62 65 72 20 32 34 2c 20 34 37   November 24, 47
13c70 31 34 20 42 2e 43 2e 20 0a 28 5b 68 74 74 70 3a  14 B.C. .([http:
13c80 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
13c90 72 67 2f 77 69 6b 69 2f 50 72 6f 6c 65 70 74 69  rg/wiki/Prolepti
13ca0 63 5f 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65  c_Gregorian_cale
13cb0 6e 64 61 72 20 7c 20 50 72 6f 6c 65 70 74 69 63  ndar | Proleptic
13cc0 20 47 72 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e   Gregorian calen
13cd0 64 61 72 5d 29 2e 29 5e 0a 5e 54 68 65 20 73 74  dar]).)^.^The st
13ce0 72 66 74 69 6d 65 28 29 20 72 6f 75 74 69 6e 65  rftime() routine
13cf0 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 61 74   returns the dat
13d00 65 20 66 6f 72 6d 61 74 74 65 64 20 61 63 63 6f  e formatted acco
13d10 72 64 69 6e 67 20 74 6f 20 0a 74 68 65 20 66 6f  rding to .the fo
13d20 72 6d 61 74 20 73 74 72 69 6e 67 20 73 70 65 63  rmat string spec
13d30 69 66 69 65 64 20 61 73 20 74 68 65 20 66 69 72  ified as the fir
13d40 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 5e 54 68  st argument..^Th
13d50 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  e format string 
13d60 73 75 70 70 6f 72 74 73 20 74 68 65 20 6d 6f 73  supports the mos
13d70 74 20 63 6f 6d 6d 6f 6e 20 73 75 62 73 74 69 74  t common substit
13d80 75 74 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20  utions found in 
13d90 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 6f 70 65  the .[http://ope
13da0 6e 67 72 6f 75 70 2e 6f 72 67 2f 6f 6e 6c 69 6e  ngroup.org/onlin
13db0 65 70 75 62 73 2f 30 30 37 39 30 38 37 39 39 2f  epubs/007908799/
13dc0 78 73 68 2f 73 74 72 66 74 69 6d 65 2e 68 74 6d  xsh/strftime.htm
13dd0 6c 20 7c 20 73 74 72 66 74 69 6d 65 28 29 20 66  l | strftime() f
13de0 75 6e 63 74 69 6f 6e 5d 0a 66 72 6f 6d 20 74 68  unction].from th
13df0 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62  e standard C lib
13e00 72 61 72 79 20 70 6c 75 73 20 74 77 6f 20 6e 65  rary plus two ne
13e10 77 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73 2c  w substitutions,
13e20 20 25 66 20 61 6e 64 20 25 4a 2e 0a 5e 28 54 68   %f and %J..^(Th
13e30 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 61  e following is a
13e40 20 63 6f 6d 70 6c 65 74 65 20 6c 69 73 74 20 6f   complete list o
13e50 66 20 76 61 6c 69 64 20 73 74 72 66 74 69 6d 65  f valid strftime
13e60 28 29 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73  () substitutions
13e70 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  :.</p>..<blockqu
13e80 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64  ote>.<table bord
13e90 65 72 3d 22 30 22 20 63 65 6c 6c 70 61 64 64 69  er="0" cellpaddi
13ea0 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70 61 63 69  ng="0" cellspaci
13eb0 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e  ng="0">.<tr><td>
13ec0 3c 74 64 20 77 69 64 74 68 3d 22 31 30 22 3e 3c  <td width="10"><
13ed0 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 3c 74  td></tr>..<tr><t
13ee0 64 3e 20 25 64 20 3c 74 64 3e 3c 74 64 3e 20 64  d> %d <td><td> d
13ef0 61 79 20 6f 66 20 6d 6f 6e 74 68 3a 20 30 30 0a  ay of month: 00.
13f00 3c 74 72 3e 3c 74 64 3e 20 25 66 20 3c 74 64 3e  <tr><td> %f <td>
13f10 3c 74 64 3e 20 66 72 61 63 74 69 6f 6e 61 6c 20  <td> fractional 
13f20 73 65 63 6f 6e 64 73 3a 20 53 53 2e 53 53 53 0a  seconds: SS.SSS.
13f30 3c 74 72 3e 3c 74 64 3e 20 25 48 20 3c 74 64 3e  <tr><td> %H <td>
13f40 3c 74 64 3e 20 68 6f 75 72 3a 20 30 30 2d 32 34  <td> hour: 00-24
13f50 20 0a 3c 74 72 3e 3c 74 64 3e 20 25 6a 20 3c 74   .<tr><td> %j <t
13f60 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 79 65  d><td> day of ye
13f70 61 72 3a 20 30 30 31 2d 33 36 36 0a 3c 74 72 3e  ar: 001-366.<tr>
13f80 3c 74 64 3e 20 25 4a 20 3c 74 64 3e 3c 74 64 3e  <td> %J <td><td>
13f90 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62   Julian day numb
13fa0 65 72 0a 3c 74 72 3e 3c 74 64 3e 20 25 6d 20 3c  er.<tr><td> %m <
13fb0 74 64 3e 3c 74 64 3e 20 6d 6f 6e 74 68 3a 20 30  td><td> month: 0
13fc0 31 2d 31 32 0a 3c 74 72 3e 3c 74 64 3e 20 25 4d  1-12.<tr><td> %M
13fd0 20 3c 74 64 3e 3c 74 64 3e 20 6d 69 6e 75 74 65   <td><td> minute
13fe0 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e  : 00-59.<tr><td>
13ff0 20 25 73 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63   %s <td><td> sec
14000 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30 2d  onds since 1970-
14010 30 31 2d 30 31 0a 3c 74 72 3e 3c 74 64 3e 20 25  01-01.<tr><td> %
14020 53 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e  S <td><td> secon
14030 64 73 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74  ds: 00-59.<tr><t
14040 64 3e 20 25 77 20 3c 74 64 3e 3c 74 64 3e 20 64  d> %w <td><td> d
14050 61 79 20 6f 66 20 77 65 65 6b 20 30 2d 36 20 77  ay of week 0-6 w
14060 69 74 68 20 73 75 6e 64 61 79 3d 3d 30 0a 3c 74  ith sunday==0.<t
14070 72 3e 3c 74 64 3e 20 25 57 20 3c 74 64 3e 3c 74  r><td> %W <td><t
14080 64 3e 20 77 65 65 6b 20 6f 66 20 79 65 61 72 3a  d> week of year:
14090 20 30 30 2d 35 33 0a 3c 74 72 3e 3c 74 64 3e 20   00-53.<tr><td> 
140a0 25 59 20 3c 74 64 3e 3c 74 64 3e 20 79 65 61 72  %Y <td><td> year
140b0 3a 20 30 30 30 30 2d 39 39 39 39 0a 3c 74 72 3e  : 0000-9999.<tr>
140c0 3c 74 64 3e 20 25 25 20 3c 74 64 3e 3c 74 64 3e  <td> %% <td><td>
140d0 20 25 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c   %.</table>.</bl
140e0 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e  ockquote>)^..<p>
140f0 0a 5e 28 4e 6f 74 69 63 65 20 74 68 61 74 20 61  .^(Notice that a
14100 6c 6c 20 6f 74 68 65 72 20 64 61 74 65 20 61 6e  ll other date an
14110 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  d time functions
14120 20 63 61 6e 20 62 65 20 65 78 70 72 65 73 73 65   can be expresse
14130 64 0a 69 6e 20 74 65 72 6d 73 20 6f 66 20 73 74  d.in terms of st
14140 72 66 74 69 6d 65 28 29 3a 0a 3c 2f 70 3e 0a 0a  rftime():.</p>..
14150 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61  <blockquote>.<ta
14160 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20 63  ble border="0" c
14170 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22 20 63  ellpadding="0" c
14180 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a  ellspacing="0">.
14190 3c 74 72 3e 3c 74 64 3e 3c 62 3e 46 75 6e 63 74  <tr><td><b>Funct
141a0 69 6f 6e 3c 2f 62 3e 3c 74 64 20 77 69 64 74 68  ion</b><td width
141b0 3d 22 33 30 22 3e 3c 74 64 3e 3c 62 3e 45 71 75  ="30"><td><b>Equ
141c0 69 76 61 6c 65 6e 74 20 73 74 72 66 74 69 6d 65  ivalent strftime
141d0 28 29 3c 2f 62 3e 0a 3c 74 72 3e 3c 74 64 3e 20  ()</b>.<tr><td> 
141e0 20 20 64 61 74 65 28 2e 2e 2e 29 20 20 20 20 20    date(...)     
141f0 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74   <td><td>  strft
14200 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 27 2c 20  ime('%Y-%m-%d', 
14210 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20  ...).<tr><td>   
14220 74 69 6d 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c  time(...)      <
14230 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d  td><td>  strftim
14240 65 28 27 25 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e  e('%H:%M:%S', ..
14250 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61  .).<tr><td>   da
14260 74 65 74 69 6d 65 28 2e 2e 2e 29 20 20 3c 74 64  tetime(...)  <td
14270 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28  ><td>  strftime(
14280 27 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a  '%Y-%m-%d %H:%M:
14290 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74  %S', ...).<tr><t
142a0 64 3e 20 20 20 6a 75 6c 69 61 6e 64 61 79 28 2e  d>   julianday(.
142b0 2e 2e 29 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74  ..) <td><td>  st
142c0 72 66 74 69 6d 65 28 27 25 4a 27 2c 20 2e 2e 2e  rftime('%J', ...
142d0 29 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f  ).</table>.</blo
142e0 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a  ckquote>)^..<p>.
142f0 54 68 65 20 6f 6e 6c 79 20 72 65 61 73 6f 6e 73  The only reasons
14300 20 66 6f 72 20 70 72 6f 76 69 64 69 6e 67 20 66   for providing f
14310 75 6e 63 74 69 6f 6e 73 20 6f 74 68 65 72 20 74  unctions other t
14320 68 61 6e 20 73 74 72 66 74 69 6d 65 28 29 20 69  han strftime() i
14330 73 0a 66 6f 72 20 63 6f 6e 76 65 6e 69 65 6e 63  s.for convenienc
14340 65 20 61 6e 64 20 66 6f 72 20 65 66 66 69 63 69  e and for effici
14350 65 6e 63 79 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e  ency..</p>..<h3>
14360 54 69 6d 65 20 53 74 72 69 6e 67 73 3c 2f 68 33  Time Strings</h3
14370 3e 0a 0a 3c 70 3e 5e 28 41 20 74 69 6d 65 20 73  >..<p>^(A time s
14380 74 72 69 6e 67 20 63 61 6e 20 62 65 20 69 6e 20  tring can be in 
14390 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  any of the follo
143a0 77 69 6e 67 20 66 6f 72 6d 61 74 73 3a 3c 2f 70  wing formats:</p
143b0 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c 69 3e  >..<ol>.<li> <i>
143c0 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 0a 3c  YYYY-MM-DD</i>.<
143d0 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44  li> <i>YYYY-MM-D
143e0 44 20 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e  D HH:MM</i>.<li>
143f0 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48   <i>YYYY-MM-DD H
14400 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e  H:MM:SS</i>.<li>
14410 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48   <i>YYYY-MM-DD H
14420 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a  H:MM:SS.SSS</i>.
14430 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
14440 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69  DD</i><b>T</b><i
14450 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20  >HH:MM</i>.<li> 
14460 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69  <i>YYYY-MM-DD</i
14470 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d  ><b>T</b><i>HH:M
14480 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  M:SS</i>.<li> <i
14490 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c  >YYYY-MM-DD</i><
144a0 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a  b>T</b><i>HH:MM:
144b0 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  SS.SSS</i>.<li> 
144c0 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69  <i>HH:MM</i>.<li
144d0 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69  > <i>HH:MM:SS</i
144e0 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a  >.<li> <i>HH:MM:
144f0 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  SS.SSS</i>.<li> 
14500 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69 3e 20  <b>now</b>.<li> 
14510 3c 69 3e 44 44 44 44 44 44 44 44 44 44 3c 2f 69  <i>DDDDDDDDDD</i
14520 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e  >.</ol>)^..<p>.^
14530 49 6e 20 66 6f 72 6d 61 74 73 20 35 20 74 68 72  In formats 5 thr
14540 6f 75 67 68 20 37 2c 20 74 68 65 20 22 54 22 20  ough 7, the "T" 
14550 69 73 20 61 20 6c 69 74 65 72 61 6c 20 63 68 61  is a literal cha
14560 72 61 63 74 65 72 20 73 65 70 61 72 61 74 69 6e  racter separatin
14570 67 20 0a 74 68 65 20 64 61 74 65 20 61 6e 64 20  g .the date and 
14580 74 68 65 20 74 69 6d 65 2c 20 61 73 20 72 65 71  the time, as req
14590 75 69 72 65 64 20 62 79 20 0a 5b 68 74 74 70 3a  uired by .[http:
145a0 2f 2f 77 77 77 2e 77 33 63 2e 6f 72 67 2f 54 52  //www.w3c.org/TR
145b0 2f 4e 4f 54 45 2d 64 61 74 65 74 69 6d 65 20 7c  /NOTE-datetime |
145c0 20 49 53 4f 2d 38 36 30 31 5d 2e 20 0a 5e 46 6f   ISO-8601]. .^Fo
145d0 72 6d 61 74 73 20 38 20 74 68 72 6f 75 67 68 20  rmats 8 through 
145e0 31 30 20 74 68 61 74 20 73 70 65 63 69 66 79 20  10 that specify 
145f0 6f 6e 6c 79 20 61 20 74 69 6d 65 20 61 73 73 75  only a time assu
14600 6d 65 20 61 20 64 61 74 65 20 6f 66 20 0a 32 30  me a date of .20
14610 30 30 2d 30 31 2d 30 31 2e 20 46 6f 72 6d 61 74  00-01-01. Format
14620 20 31 31 2c 20 74 68 65 20 73 74 72 69 6e 67 20   11, the string 
14630 27 6e 6f 77 27 2c 20 69 73 20 63 6f 6e 76 65 72  'now', is conver
14640 74 65 64 20 69 6e 74 6f 20 74 68 65 20 0a 63 75  ted into the .cu
14650 72 72 65 6e 74 20 64 61 74 65 20 61 6e 64 20 74  rrent date and t
14660 69 6d 65 20 61 73 20 6f 62 74 61 69 6e 65 64 20  ime as obtained 
14670 66 72 6f 6d 20 74 68 65 20 78 43 75 72 72 65 6e  from the xCurren
14680 74 54 69 6d 65 20 6d 65 74 68 6f 64 0a 6f 66 20  tTime method.of 
14690 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 76 66 73  the [sqlite3_vfs
146a0 5d 20 6f 62 6a 65 63 74 20 69 6e 20 75 73 65 2e  ] object in use.
146b0 0a 5e 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b  .^[http://en.wik
146c0 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f  ipedia.org/wiki/
146d0 43 6f 6f 72 64 69 6e 61 74 65 64 5f 55 6e 69 76  Coordinated_Univ
146e0 65 72 73 61 6c 5f 54 69 6d 65 20 7c 20 55 6e 69  ersal_Time | Uni
146f0 76 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74  versal Coordinat
14700 65 64 20 54 69 6d 65 20 28 55 54 43 29 5d 20 69  ed Time (UTC)] i
14710 73 20 75 73 65 64 2e 20 0a 5e 46 6f 72 6d 61 74  s used. .^Format
14720 20 31 32 20 69 73 20 74 68 65 20 0a 5b 68 74 74   12 is the .[htt
14730 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
14740 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e  .org/wiki/Julian
14750 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61  _day | Julian da
14760 79 20 6e 75 6d 62 65 72 5d 0a 65 78 70 72 65 73  y number].expres
14770 73 65 64 20 61 73 20 61 20 66 6c 6f 61 74 69 6e  sed as a floatin
14780 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 3c  g point value..<
14790 2f 70 3e 0a 0a 3c 68 33 3e 4d 6f 64 69 66 69 65  /p>..<h3>Modifie
147a0 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65  rs</h3>..<p>^The
147b0 20 74 69 6d 65 20 73 74 72 69 6e 67 20 63 61 6e   time string can
147c0 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   be followed by 
147d0 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64  zero or more mod
147e0 69 66 69 65 72 73 20 74 68 61 74 20 0a 61 6c 74  ifiers that .alt
147f0 65 72 20 74 68 65 20 64 61 74 65 20 61 6e 64 20  er the date and 
14800 74 69 6d 65 20 73 74 72 69 6e 67 2e 20 5e 45 61  time string. ^Ea
14810 63 68 20 6d 6f 64 69 66 69 65 72 0a 69 73 20 61  ch modifier.is a
14820 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 20   transformation 
14830 74 68 61 74 20 69 73 20 61 70 70 6c 69 65 64 20  that is applied 
14840 74 6f 20 74 68 65 20 74 69 6d 65 20 76 61 6c 75  to the time valu
14850 65 20 74 6f 20 69 74 73 20 6c 65 66 74 2e 0a 5e  e to its left..^
14860 4d 6f 64 69 66 69 65 72 73 20 61 72 65 20 61 70  Modifiers are ap
14870 70 6c 69 65 64 20 66 72 6f 6d 20 6c 65 66 74 20  plied from left 
14880 74 6f 20 72 69 67 68 74 3b 20 6f 72 64 65 72 20  to right; order 
14890 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 0a 5e 28  is important..^(
148a0 54 68 65 20 61 76 61 69 6c 61 62 6c 65 20 6d 6f  The available mo
148b0 64 69 66 69 65 72 73 20 61 72 65 20 61 73 20 66  difiers are as f
148c0 6f 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 6f 6c  ollows.</p>..<ol
148d0 3e 0a 3c 6c 69 3e 20 4e 4e 4e 20 64 61 79 73 0a  >.<li> NNN days.
148e0 3c 6c 69 3e 20 4e 4e 4e 20 68 6f 75 72 73 0a 3c  <li> NNN hours.<
148f0 6c 69 3e 20 4e 4e 4e 20 6d 69 6e 75 74 65 73 0a  li> NNN minutes.
14900 3c 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e 4e 20 73 65  <li> NNN.NNNN se
14910 63 6f 6e 64 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d  conds.<li> NNN m
14920 6f 6e 74 68 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 79  onths.<li> NNN y
14930 65 61 72 73 0a 3c 6c 69 3e 20 73 74 61 72 74 20  ears.<li> start 
14940 6f 66 20 6d 6f 6e 74 68 0a 3c 6c 69 3e 20 73 74  of month.<li> st
14950 61 72 74 20 6f 66 20 79 65 61 72 0a 3c 6c 69 3e  art of year.<li>
14960 20 73 74 61 72 74 20 6f 66 20 64 61 79 0a 3c 6c   start of day.<l
14970 69 3e 20 77 65 65 6b 64 61 79 20 4e 0a 3c 6c 69  i> weekday N.<li
14980 3e 20 75 6e 69 78 65 70 6f 63 68 0a 3c 6c 69 3e  > unixepoch.<li>
14990 20 6c 6f 63 61 6c 74 69 6d 65 0a 3c 6c 69 3e 20   localtime.<li> 
149a0 75 74 63 20 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70  utc .</ol>)^..<p
149b0 3e 5e 54 68 65 20 66 69 72 73 74 20 73 69 78 20  >^The first six 
149c0 6d 6f 64 69 66 69 65 72 73 20 28 31 20 74 68 72  modifiers (1 thr
149d0 6f 75 67 68 20 36 29 20 0a 73 69 6d 70 6c 79 20  ough 6) .simply 
149e0 61 64 64 20 74 68 65 20 73 70 65 63 69 66 69 65  add the specifie
149f0 64 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65  d amount of time
14a00 20 74 6f 20 74 68 65 20 64 61 74 65 20 61 6e 64   to the date and
14a10 20 74 69 6d 65 20 0a 73 70 65 63 69 66 69 65 64   time .specified
14a20 20 62 79 20 74 68 65 20 70 72 65 63 65 64 69 6e   by the precedin
14a30 67 20 74 69 6d 65 73 74 72 69 6e 67 20 61 6e 64  g timestring and
14a40 20 6d 6f 64 69 66 69 65 72 73 2e 0a 5e 4e 6f 74   modifiers..^Not
14a50 65 20 74 68 61 74 20 22 26 70 6c 75 73 6d 6e 3b  e that "&plusmn;
14a60 4e 4e 4e 20 6d 6f 6e 74 68 73 22 20 77 6f 72 6b  NNN months" work
14a70 73 20 62 79 20 72 65 6e 64 65 72 69 6e 67 20 74  s by rendering t
14a80 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 65  he original date
14a90 20 69 6e 74 6f 0a 74 68 65 20 59 59 59 59 2d 4d   into.the YYYY-M
14aa0 4d 2d 44 44 20 66 6f 72 6d 61 74 2c 20 61 64 64  M-DD format, add
14ab0 69 6e 67 20 74 68 65 20 26 70 6c 75 73 6d 6e 3b  ing the &plusmn;
14ac0 4e 4e 4e 20 74 6f 20 74 68 65 20 4d 4d 20 6d 6f  NNN to the MM mo
14ad0 6e 74 68 20 76 61 6c 75 65 2c 20 74 68 65 6e 0a  nth value, then.
14ae0 6e 6f 72 6d 61 6c 69 7a 69 6e 67 20 74 68 65 20  normalizing the 
14af0 72 65 73 75 6c 74 2e 20 20 5e 54 68 75 73 2c 20  result.  ^Thus, 
14b00 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  for example, the
14b10 20 64 61 74 61 20 32 30 30 31 2d 30 33 2d 33 31   data 2001-03-31
14b20 20 6d 6f 64 69 66 69 65 64 0a 62 79 20 27 2b 31   modified.by '+1
14b30 20 6d 6f 6e 74 68 27 20 69 6e 69 74 69 61 6c 6c   month' initiall
14b40 79 20 79 69 65 6c 64 73 20 32 30 30 31 2d 30 34  y yields 2001-04
14b50 2d 33 31 2c 20 62 75 74 20 41 70 72 69 6c 20 6f  -31, but April o
14b60 6e 6c 79 20 68 61 73 20 33 30 20 64 61 79 73 0a  nly has 30 days.
14b70 73 6f 20 74 68 65 20 64 61 74 65 20 69 73 20 6e  so the date is n
14b80 6f 72 6d 61 6c 69 7a 65 64 20 74 6f 20 32 30 30  ormalized to 200
14b90 31 2d 30 35 2d 30 31 2e 20 20 5e 41 20 73 69 6d  1-05-01.  ^A sim
14ba0 69 6c 61 72 20 65 66 66 65 63 74 20 6f 63 63 75  ilar effect occu
14bb0 72 73 20 77 68 65 6e 0a 74 68 65 20 6f 72 69 67  rs when.the orig
14bc0 69 6e 61 6c 20 64 61 74 65 20 69 73 20 46 65 62  inal date is Feb
14bd0 72 75 61 72 79 20 32 39 20 6f 66 20 61 20 6c 65  ruary 29 of a le
14be0 61 70 79 65 61 72 20 61 6e 64 20 74 68 65 20 6d  apyear and the m
14bf0 6f 64 69 66 69 65 72 20 69 73 0a 26 70 6c 75 73  odifier is.&plus
14c00 6d 6e 3b 4e 20 79 65 61 72 73 20 77 68 65 72 65  mn;N years where
14c10 20 4e 20 69 73 20 6e 6f 74 20 61 20 6d 75 6c 74   N is not a mult
14c20 69 70 6c 65 20 6f 66 20 66 6f 75 72 2e 3c 2f 70  iple of four.</p
14c30 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 73 74 61 72  >..<p>^The "star
14c40 74 20 6f 66 22 20 6d 6f 64 69 66 69 65 72 73 20  t of" modifiers 
14c50 28 37 20 74 68 72 6f 75 67 68 20 39 29 20 73 68  (7 through 9) sh
14c60 69 66 74 20 74 68 65 20 64 61 74 65 20 62 61 63  ift the date bac
14c70 6b 77 61 72 64 73 20 0a 74 6f 20 74 68 65 20 62  kwards .to the b
14c80 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
14c90 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2c 20 79  current month, y
14ca0 65 61 72 20 6f 72 20 64 61 79 2e 3c 2f 70 3e 0a  ear or day.</p>.
14cb0 0a 3c 70 3e 5e 54 68 65 20 22 77 65 65 6b 64 61  .<p>^The "weekda
14cc0 79 22 20 6d 6f 64 69 66 69 65 72 20 61 64 76 61  y" modifier adva
14cd0 6e 63 65 73 20 74 68 65 20 64 61 74 65 20 66 6f  nces the date fo
14ce0 72 77 61 72 64 20 74 6f 20 74 68 65 20 6e 65 78  rward to the nex
14cf0 74 20 64 61 74 65 20 0a 77 68 65 72 65 20 74 68  t date .where th
14d00 65 20 77 65 65 6b 64 61 79 20 6e 75 6d 62 65 72  e weekday number
14d10 20 69 73 20 4e 2e 20 53 75 6e 64 61 79 20 69 73   is N. Sunday is
14d20 20 30 2c 20 4d 6f 6e 64 61 79 20 69 73 20 31 2c   0, Monday is 1,
14d30 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 3c 2f   and so forth.</
14d40 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 75 6e 69  p>..<p>^The "uni
14d50 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72  xepoch" modifier
14d60 20 28 31 31 29 20 6f 6e 6c 79 20 77 6f 72 6b 73   (11) only works
14d70 20 69 66 20 69 74 20 69 6d 6d 65 64 69 61 74 65   if it immediate
14d80 6c 79 20 66 6f 6c 6c 6f 77 73 20 0a 61 20 74 69  ly follows .a ti
14d90 6d 65 73 74 72 69 6e 67 20 69 6e 20 74 68 65 20  mestring in the 
14da0 44 44 44 44 44 44 44 44 44 44 20 66 6f 72 6d 61  DDDDDDDDDD forma
14db0 74 2e 20 0a 5e 54 68 69 73 20 6d 6f 64 69 66 69  t. .^This modifi
14dc0 65 72 20 63 61 75 73 65 73 20 74 68 65 20 44 44  er causes the DD
14dd0 44 44 44 44 44 44 44 44 20 74 6f 20 62 65 20 69  DDDDDDDD to be i
14de0 6e 74 65 72 70 72 65 74 65 64 20 6e 6f 74 20 0a  nterpreted not .
14df0 61 73 20 61 20 4a 75 6c 69 61 6e 20 64 61 79 20  as a Julian day 
14e00 6e 75 6d 62 65 72 20 61 73 20 69 74 20 6e 6f 72  number as it nor
14e10 6d 61 6c 6c 79 20 77 6f 75 6c 64 20 62 65 2c 20  mally would be, 
14e20 62 75 74 20 61 73 0a 5b 68 74 74 70 3a 2f 2f 65  but as.[http://e
14e30 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
14e40 77 69 6b 69 2f 55 6e 69 78 5f 74 69 6d 65 20 7c  wiki/Unix_time |
14e50 20 55 6e 69 78 20 54 69 6d 65 5d 20 2d 20 74 68   Unix Time] - th
14e60 65 20 0a 6e 75 6d 62 65 72 20 6f 66 20 73 65 63  e .number of sec
14e70 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30 2e  onds since 1970.
14e80 20 20 49 66 20 74 68 65 20 22 75 6e 69 78 65 70    If the "unixep
14e90 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 64 6f  och" modifier do
14ea0 65 73 20 6e 6f 74 0a 66 6f 6c 6c 6f 77 20 61 20  es not.follow a 
14eb0 74 69 6d 65 73 74 72 69 6e 67 20 6f 66 20 74 68  timestring of th
14ec0 65 20 66 6f 72 6d 20 44 44 44 44 44 44 44 44 44  e form DDDDDDDDD
14ed0 44 20 77 68 69 63 68 20 65 78 70 72 65 73 73 65  D which expresse
14ee0 73 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20  s the number.of 
14ef0 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39  seconds since 19
14f00 37 30 20 6f 72 20 69 66 20 6f 74 68 65 72 20 6d  70 or if other m
14f10 6f 64 69 66 69 65 72 73 0a 73 65 70 61 72 61 74  odifiers.separat
14f20 65 20 74 68 65 20 22 75 6e 69 78 65 70 6f 63 68  e the "unixepoch
14f30 22 20 6d 6f 64 69 66 69 65 72 20 66 72 6f 6d 20  " modifier from 
14f40 70 72 69 6f 72 20 44 44 44 44 44 44 44 44 44 44  prior DDDDDDDDDD
14f50 20 74 68 65 6e 20 74 68 65 0a 62 65 68 61 76 69   then the.behavi
14f60 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  or is undefined.
14f70 0a 44 75 65 20 74 6f 20 70 72 65 63 69 73 69 6f  .Due to precisio
14f80 6e 20 6c 69 6d 69 74 61 74 69 6f 6e 73 20 69 6d  n limitations im
14f90 70 6f 73 65 64 20 62 79 20 74 68 65 20 69 6d 70  posed by the imp
14fa0 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 75 73 65  lementations use
14fb0 0a 6f 66 20 36 34 2d 62 69 74 20 69 6e 74 65 67  .of 64-bit integ
14fc0 65 72 73 2c 20 74 68 65 20 22 75 6e 69 78 65 70  ers, the "unixep
14fd0 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 6f 6e  och" modifier on
14fe0 6c 79 20 77 6f 72 6b 73 20 66 6f 72 0a 64 61 74  ly works for.dat
14ff0 65 73 20 62 65 74 77 65 65 6e 20 30 30 30 30 2d  es between 0000-
15000 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 20 61  01-01 00:00:00 a
15010 6e 64 20 35 33 35 32 2d 31 31 2d 30 31 20 31 30  nd 5352-11-01 10
15020 3a 35 32 3a 34 37 20 28 75 6e 69 78 20 74 69 6d  :52:47 (unix tim
15030 65 73 0a 6f 66 20 2d 36 32 31 36 37 32 31 39 32  es.of -621672192
15040 30 30 20 74 68 72 6f 75 67 68 20 31 30 36 37 35  00 through 10675
15050 31 39 39 31 36 37 29 2e 3c 2f 70 3e 0a 0a 3c 70  199167).</p>..<p
15060 3e 5e 54 68 65 20 22 6c 6f 63 61 6c 74 69 6d 65  >^The "localtime
15070 22 20 6d 6f 64 69 66 69 65 72 20 28 31 32 29 20  " modifier (12) 
15080 61 73 73 75 6d 65 73 20 74 68 65 20 74 69 6d 65  assumes the time
15090 20 73 74 72 69 6e 67 20 74 6f 20 69 74 73 20 6c   string to its l
150a0 65 66 74 20 69 73 20 69 6e 0a 55 6e 69 76 65 72  eft is in.Univer
150b0 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64 20  sal Coordinated 
150c0 54 69 6d 65 20 28 55 54 43 29 20 61 6e 64 20 61  Time (UTC) and a
150d0 64 6a 75 73 74 73 20 74 68 65 20 74 69 6d 65 0a  djusts the time.
150e0 73 74 72 69 6e 67 20 73 6f 20 74 68 61 74 20 69  string so that i
150f0 74 20 64 69 73 70 6c 61 79 73 20 6c 6f 63 61 6c  t displays local
15100 74 69 6d 65 2e 20 20 49 66 20 22 6c 6f 63 61 6c  time.  If "local
15110 74 69 6d 65 22 0a 66 6f 6c 6c 6f 77 73 20 61 20  time".follows a 
15120 74 69 6d 65 20 74 68 61 74 20 69 73 20 6e 6f 74  time that is not
15130 20 55 54 43 2c 20 74 68 65 6e 20 74 68 65 20 62   UTC, then the b
15140 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66  ehavior is undef
15150 69 6e 65 64 2e 0a 5e 28 54 68 65 20 22 75 74 63  ined..^(The "utc
15160 22 20 69 73 20 74 68 65 20 6f 70 70 6f 73 69 74  " is the opposit
15170 65 20 6f 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22  e of "localtime"
15180 2e 20 20 22 75 74 63 22 20 61 73 73 75 6d 65 73  .  "utc" assumes
15190 20 74 68 61 74 20 74 68 65 20 73 74 72 69 6e 67   that the string
151a0 0a 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73 20  .to its left is 
151b0 69 6e 20 74 68 65 20 6c 6f 63 61 6c 20 74 69 6d  in the local tim
151c0 65 7a 6f 6e 65 20 61 6e 64 20 61 64 6a 75 73 74  ezone and adjust
151d0 73 20 74 68 61 74 20 73 74 72 69 6e 67 20 74 6f  s that string to
151e0 20 62 65 20 69 6e 20 55 54 43 2e 29 5e 0a 49 66   be in UTC.)^.If
151f0 20 74 68 65 20 70 72 69 6f 72 20 73 74 72 69 6e   the prior strin
15200 67 20 69 73 20 6e 6f 74 20 69 6e 20 6c 6f 63 61  g is not in loca
15210 6c 74 69 6d 65 2c 20 74 68 65 6e 20 74 68 65 20  ltime, then the 
15220 72 65 73 75 6c 74 20 6f 66 20 22 75 74 63 22 20  result of "utc" 
15230 69 73 0a 75 6e 64 65 66 69 6e 65 64 2e 3c 2f 70  is.undefined.</p
15240 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c 65 73 3c  >..<h3>Examples<
15250 2f 68 33 3e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75  /h3>..^(<p>Compu
15260 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 64  te the current d
15270 61 74 65 2e 3c 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  ate.<p>..<blockq
15280 75 6f 74 65 3e 53 45 4c 45 43 54 20 64 61 74 65  uote>SELECT date
15290 28 27 6e 6f 77 27 29 3b 3c 2f 62 6c 6f 63 6b 71  ('now');</blockq
152a0 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
152b0 6d 70 75 74 65 20 74 68 65 20 6c 61 73 74 20 64  mpute the last d
152c0 61 79 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  ay of the curren
152d0 74 20 6d 6f 6e 74 68 2e 3c 2f 70 3e 0a 0a 3c 62  t month.</p>..<b
152e0 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45 43 54  lockquote>SELECT
152f0 20 64 61 74 65 28 27 6e 6f 77 27 2c 27 73 74 61   date('now','sta
15300 72 74 20 6f 66 20 6d 6f 6e 74 68 27 2c 27 2b 31  rt of month','+1
15310 20 6d 6f 6e 74 68 27 2c 27 2d 31 20 64 61 79 27   month','-1 day'
15320 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  );.</blockquote>
15330 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65  )^..^(<p>Compute
15340 20 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 69   the date and ti
15350 6d 65 20 67 69 76 65 6e 20 61 20 75 6e 69 78 20  me given a unix 
15360 74 69 6d 65 73 74 61 6d 70 20 31 30 39 32 39 34  timestamp 109294
15370 31 34 36 36 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  1466.</p>..<bloc
15380 6b 71 75 6f 74 65 3e 0a 20 20 20 20 53 45 4c 45  kquote>.    SELE
15390 43 54 20 64 61 74 65 74 69 6d 65 28 31 30 39 32  CT datetime(1092
153a0 39 34 31 34 36 36 2c 20 27 75 6e 69 78 65 70 6f  941466, 'unixepo
153b0 63 68 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  ch');.</blockquo
153c0 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70  te>)^..^(<p>Comp
153d0 75 74 65 20 74 68 65 20 64 61 74 65 20 61 6e 64  ute the date and
153e0 20 74 69 6d 65 20 67 69 76 65 6e 20 61 20 75 6e   time given a un
153f0 69 78 20 74 69 6d 65 73 74 61 6d 70 20 31 30 39  ix timestamp 109
15400 32 39 34 31 34 36 36 2c 20 61 6e 64 20 0a 63 6f  2941466, and .co
15410 6d 70 65 6e 73 61 74 65 20 66 6f 72 20 79 6f 75  mpensate for you
15420 72 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65  r local timezone
15430 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
15440 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 64 61 74  te>.  SELECT dat
15450 65 74 69 6d 65 28 31 30 39 32 39 34 31 34 36 36  etime(1092941466
15460 2c 20 27 75 6e 69 78 65 70 6f 63 68 27 2c 20 27  , 'unixepoch', '
15470 6c 6f 63 61 6c 74 69 6d 65 27 29 3b 0a 3c 2f 62  localtime');.</b
15480 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28  lockquote>)^..^(
15490 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 63  <p>Compute the c
154a0 75 72 72 65 6e 74 20 75 6e 69 78 20 74 69 6d 65  urrent unix time
154b0 73 74 61 6d 70 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f  stamp.</p>..<blo
154c0 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43  ckquote>.  SELEC
154d0 54 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c  T strftime('%s',
154e0 27 6e 6f 77 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  'now');.</blockq
154f0 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
15500 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72  mpute the number
15510 20 6f 66 20 64 61 79 73 20 73 69 6e 63 65 20 74   of days since t
15520 68 65 20 73 69 67 6e 69 6e 67 20 6f 66 20 74 68  he signing of th
15530 65 20 55 53 20 44 65 63 6c 61 72 61 74 69 6f 6e  e US Declaration
15540 0a 6f 66 20 49 6e 64 65 70 65 6e 64 65 6e 74 2e  .of Independent.
15550 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
15560 65 3e 0a 20 20 53 45 4c 45 43 54 20 6a 75 6c 69  e>.  SELECT juli
15570 61 6e 64 61 79 28 27 6e 6f 77 27 29 20 2d 20 6a  anday('now') - j
15580 75 6c 69 61 6e 64 61 79 28 27 31 37 37 36 2d 30  ulianday('1776-0
15590 37 2d 30 34 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  7-04');.</blockq
155a0 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
155b0 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72  mpute the number
155c0 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63   of seconds sinc
155d0 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 6d  e a particular m
155e0 6f 6d 65 6e 74 20 69 6e 20 32 30 30 34 3a 3c 2f  oment in 2004:</
155f0 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
15600 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66 74 69  .  SELECT strfti
15610 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 20 2d  me('%s','now') -
15620 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27   strftime('%s','
15630 32 30 30 34 2d 30 31 2d 30 31 20 30 32 3a 33 34  2004-01-01 02:34
15640 3a 35 36 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  :56');.</blockqu
15650 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 0a 43 6f  ote>)^..^(<p>.Co
15660 6d 70 75 74 65 20 74 68 65 20 64 61 74 65 20 6f  mpute the date o
15670 66 20 74 68 65 20 66 69 72 73 74 20 54 75 65 73  f the first Tues
15680 64 61 79 20 69 6e 20 4f 63 74 6f 62 65 72 0a 66  day in October.f
15690 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 79  or the current y
156a0 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  ear..</p>..<bloc
156b0 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54  kquote>.  SELECT
156c0 20 64 61 74 65 28 27 6e 6f 77 27 2c 27 73 74 61   date('now','sta
156d0 72 74 20 6f 66 20 79 65 61 72 27 2c 27 2b 39 20  rt of year','+9 
156e0 6d 6f 6e 74 68 73 27 2c 27 77 65 65 6b 64 61 79  months','weekday
156f0 20 32 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f   2');.</blockquo
15700 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70  te>)^..^(<p>Comp
15710 75 74 65 20 74 68 65 20 74 69 6d 65 20 73 69 6e  ute the time sin
15720 63 65 20 74 68 65 20 75 6e 69 78 20 65 70 6f 63  ce the unix epoc
15730 68 20 69 6e 20 73 65 63 6f 6e 64 73 20 0a 28 6c  h in seconds .(l
15740 69 6b 65 20 73 74 72 66 74 69 6d 65 28 27 25 73  ike strftime('%s
15750 27 2c 27 6e 6f 77 27 29 20 65 78 63 65 70 74 20  ','now') except 
15760 69 6e 63 6c 75 64 65 73 20 66 72 61 63 74 69 6f  includes fractio
15770 6e 61 6c 20 70 61 72 74 29 3a 3c 2f 70 3e 0a 0a  nal part):</p>..
15780 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
15790 45 4c 45 43 54 20 28 6a 75 6c 69 61 6e 64 61 79  ELECT (julianday
157a0 28 27 6e 6f 77 27 29 20 2d 20 32 34 34 30 35 38  ('now') - 244058
157b0 37 2e 35 29 2a 38 36 34 30 30 2e 30 3b 0a 3c 2f  7.5)*86400.0;.</
157c0 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
157d0 68 33 3e 43 61 76 65 61 74 73 20 41 6e 64 20 42  h3>Caveats And B
157e0 75 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  ugs</h3>..<p>The
157f0 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20   computation of 
15800 6c 6f 63 61 6c 20 74 69 6d 65 20 64 65 70 65 6e  local time depen
15810 64 73 20 68 65 61 76 69 6c 79 20 6f 6e 20 74 68  ds heavily on th
15820 65 20 77 68 69 6d 20 0a 6f 66 20 70 6f 6c 69 74  e whim .of polit
15830 69 63 69 61 6e 73 20 61 6e 64 20 69 73 20 74 68  icians and is th
15840 75 73 20 64 69 66 66 69 63 75 6c 74 20 74 6f 20  us difficult to 
15850 67 65 74 20 63 6f 72 72 65 63 74 20 66 6f 72 20  get correct for 
15860 0a 61 6c 6c 20 6c 6f 63 61 6c 65 73 2e 20 5e 49  .all locales. ^I
15870 6e 20 74 68 69 73 20 69 6d 70 6c 65 6d 65 6e 74  n this implement
15880 61 74 69 6f 6e 2c 20 74 68 65 20 73 74 61 6e 64  ation, the stand
15890 61 72 64 20 43 20 6c 69 62 72 61 72 79 20 0a 66  ard C library .f
158a0 75 6e 63 74 69 6f 6e 20 6c 6f 63 61 6c 74 69 6d  unction localtim
158b0 65 5f 72 28 29 20 69 73 20 75 73 65 64 20 74 6f  e_r() is used to
158c0 20 61 73 73 69 73 74 20 69 6e 20 74 68 65 20 63   assist in the c
158d0 61 6c 63 75 6c 61 74 69 6f 6e 20 6f 66 20 0a 6c  alculation of .l
158e0 6f 63 61 6c 20 74 69 6d 65 2e 20 20 5e 28 54 68  ocal time.  ^(Th
158f0 65 20 0a 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29  e .localtime_r()
15900 20 43 20 66 75 6e 63 74 69 6f 6e 20 6e 6f 72 6d   C function norm
15910 61 6c 6c 79 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  ally only works 
15920 66 6f 72 20 79 65 61 72 73 0a 62 65 74 77 65 65  for years.betwee
15930 6e 20 31 39 37 30 20 61 6e 64 20 32 30 33 37 2e  n 1970 and 2037.
15940 20 46 6f 72 20 64 61 74 65 73 20 6f 75 74 73 69   For dates outsi
15950 64 65 20 74 68 69 73 20 72 61 6e 67 65 2c 20 53  de this range, S
15960 51 4c 69 74 65 20 0a 61 74 74 65 6d 70 74 73 20  QLite .attempts 
15970 74 6f 20 6d 61 70 20 74 68 65 20 79 65 61 72 20  to map the year 
15980 69 6e 74 6f 20 61 6e 20 65 71 75 69 76 61 6c 65  into an equivale
15990 6e 74 20 79 65 61 72 20 77 69 74 68 69 6e 20 0a  nt year within .
159a0 74 68 69 73 20 72 61 6e 67 65 2c 20 64 6f 20 74  this range, do t
159b0 68 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e 2c 20  he calculation, 
159c0 74 68 65 6e 20 6d 61 70 20 74 68 65 20 79 65 61  then map the yea
159d0 72 20 62 61 63 6b 2e 29 5e 3c 2f 70 3e 0a 0a 0a  r back.)^</p>...
159e0 3c 70 3e 5e 28 54 68 65 73 65 20 66 75 6e 63 74  <p>^(These funct
159f0 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66  ions only work f
15a00 6f 72 20 64 61 74 65 73 20 62 65 74 77 65 65 6e  or dates between
15a10 20 30 30 30 30 2d 30 31 2d 30 31 20 30 30 3a 30   0000-01-01 00:0
15a20 30 3a 30 30 0a 61 6e 64 20 39 39 39 39 2d 31 32  0:00.and 9999-12
15a30 2d 33 31 20 32 33 3a 35 39 3a 35 39 20 28 6a 75  -31 23:59:59 (ju
15a40 6c 69 64 61 6e 20 64 61 79 20 6e 75 6d 62 65 72  lidan day number
15a50 73 20 31 37 32 31 30 35 39 2e 35 20 74 68 72 6f  s 1721059.5 thro
15a60 75 67 68 20 35 33 37 33 34 38 34 2e 35 29 2e 29  ugh 5373484.5).)
15a70 5e 0a 46 6f 72 20 64 61 74 65 73 20 6f 75 74 73  ^.For dates outs
15a80 69 64 65 20 74 68 61 74 20 72 61 6e 67 65 2c 20  ide that range, 
15a90 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
15aa0 68 65 73 65 0a 66 75 6e 63 74 69 6f 6e 73 20 61  hese.functions a
15ab0 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 3c 2f 70  re undefined.</p
15ac0 3e 0a 0a 3c 70 3e 4e 6f 6e 2d 56 69 73 74 61 20  >..<p>Non-Vista 
15ad0 57 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f 72 6d  Windows platform
15ae0 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 20 6f  s only support o
15af0 6e 65 20 73 65 74 20 6f 66 20 44 53 54 20 72 75  ne set of DST ru
15b00 6c 65 73 2e 20 0a 56 69 73 74 61 20 6f 6e 6c 79  les. .Vista only
15b10 20 73 75 70 70 6f 72 74 73 20 74 77 6f 2e 20 54   supports two. T
15b20 68 65 72 65 66 6f 72 65 2c 20 6f 6e 20 74 68 65  herefore, on the
15b30 73 65 20 70 6c 61 74 66 6f 72 6d 73 2c 20 0a 68  se platforms, .h
15b40 69 73 74 6f 72 69 63 61 6c 20 44 53 54 20 63 61  istorical DST ca
15b50 6c 63 75 6c 61 74 69 6f 6e 73 20 77 69 6c 6c 20  lculations will 
15b60 62 65 20 69 6e 63 6f 72 72 65 63 74 2e 20 0a 46  be incorrect. .F
15b70 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 20 74  or example, in t
15b80 68 65 20 55 53 2c 20 69 6e 20 32 30 30 37 20 74  he US, in 2007 t
15b90 68 65 20 44 53 54 20 72 75 6c 65 73 20 63 68 61  he DST rules cha
15ba0 6e 67 65 64 2e 20 0a 4e 6f 6e 2d 56 69 73 74 61  nged. .Non-Vista
15bb0 20 57 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f 72   Windows platfor
15bc0 6d 73 20 61 70 70 6c 79 20 74 68 65 20 6e 65 77  ms apply the new
15bd0 20 32 30 30 37 20 44 53 54 20 72 75 6c 65 73 20   2007 DST rules 
15be0 0a 74 6f 20 61 6c 6c 20 70 72 65 76 69 6f 75 73  .to all previous
15bf0 20 79 65 61 72 73 20 61 73 20 77 65 6c 6c 2e 20   years as well. 
15c00 56 69 73 74 61 20 64 6f 65 73 20 73 6f 6d 65 77  Vista does somew
15c10 68 61 74 20 62 65 74 74 65 72 0a 67 65 74 74 69  hat better.getti
15c20 6e 67 20 72 65 73 75 6c 74 73 20 63 6f 72 72 65  ng results corre
15c30 63 74 20 62 61 63 6b 20 74 6f 20 31 39 38 36 2c  ct back to 1986,
15c40 20 77 68 65 6e 20 74 68 65 20 72 75 6c 65 73 20   when the rules 
15c50 77 65 72 65 20 61 6c 73 6f 20 63 68 61 6e 67 65  were also change
15c60 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6c 6c 20 69  d.</p>..<p>All i
15c70 6e 74 65 72 6e 61 6c 20 63 6f 6d 70 75 74 61 74  nternal computat
15c80 69 6f 6e 73 20 61 73 73 75 6d 65 20 74 68 65 20  ions assume the 
15c90 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69  .[http://en.wiki
15ca0 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 47  pedia.org/wiki/G
15cb0 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e 64 61  regorian_calenda
15cc0 72 20 7c 20 47 72 65 67 6f 72 69 61 6e 20 63 61  r | Gregorian ca
15cd0 6c 65 6e 64 61 72 5d 0a 73 79 73 74 65 6d 2e 20  lendar].system. 
15ce0 20 49 74 20 69 73 20 61 6c 73 6f 20 61 73 73 75   It is also assu
15cf0 6d 65 64 20 74 68 61 74 20 65 76 65 72 79 0a 64  med that every.d
15d00 61 79 20 69 73 20 65 78 61 63 74 6c 79 20 38 36  ay is exactly 86
15d10 34 30 30 20 73 65 63 6f 6e 64 73 20 69 6e 20 64  400 seconds in d
15d20 75 72 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74  uration.</p>..<t
15d30 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
15d40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65 63 74 69 6f 6e 20 7b 41 67 67 72  ##.Section {Aggr
15d90 65 67 61 74 65 20 46 75 6e 63 74 69 6f 6e 73 7d  egate Functions}
15da0 20 61 67 67 66 75 6e 63 20 7b 2a 61 67 67 66 75   aggfunc {*aggfu
15db0 6e 63 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a  nc}.</tcl>..<p>.
15dc0 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75  The aggregate fu
15dd0 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e 20 62 65  nctions shown be
15de0 6c 6f 77 20 61 72 65 20 61 76 61 69 6c 61 62 6c  low are availabl
15df0 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 41  e by default.  A
15e00 64 64 69 74 69 6f 6e 61 6c 0a 61 67 67 72 65 67  dditional.aggreg
15e10 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 77 72  ate functions wr
15e20 69 74 74 65 6e 20 69 6e 20 43 20 6d 61 79 20 62  itten in C may b
15e30 65 20 61 64 64 65 64 20 75 73 69 6e 67 20 74 68  e added using th
15e40 65 20 0a 5b 73 71 6c 69 74 65 33 5f 63 72 65 61  e .[sqlite3_crea
15e50 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 3c 2f  te_function()]</
15e60 61 3e 0a 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 70 3e  a>.API.</p>..<p>
15e70 0a 5e 49 6e 20 61 6e 79 20 61 67 67 72 65 67 61  .^In any aggrega
15e80 74 65 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74  te function that
15e90 20 74 61 6b 65 73 20 61 20 73 69 6e 67 6c 65 20   takes a single 
15ea0 61 72 67 75 6d 65 6e 74 2c 20 74 68 61 74 20 61  argument, that a
15eb0 72 67 75 6d 65 6e 74 0a 63 61 6e 20 62 65 20 70  rgument.can be p
15ec0 72 65 63 65 64 65 64 20 62 79 20 74 68 65 20 6b  receded by the k
15ed0 65 79 77 6f 72 64 20 44 49 53 54 49 4e 43 54 2e  eyword DISTINCT.
15ee0 20 20 5e 49 6e 20 73 75 63 68 20 63 61 73 65 73    ^In such cases
15ef0 2c 20 64 75 70 6c 69 63 61 74 65 0a 65 6c 65 6d  , duplicate.elem
15f00 65 6e 74 73 20 61 72 65 20 66 69 6c 74 65 72 65  ents are filtere
15f10 64 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20 70  d before being p
15f20 61 73 73 65 64 20 69 6e 74 6f 20 74 68 65 20 61  assed into the a
15f30 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
15f40 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c  n..^For example,
15f50 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 22 63   the function "c
15f60 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 58 29  ount(distinct X)
15f70 22 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 74 68  " will return th
15f80 65 20 6e 75 6d 62 65 72 0a 6f 66 20 64 69 73 74  e number.of dist
15f90 69 6e 63 74 20 76 61 6c 75 65 73 20 6f 66 20 63  inct values of c
15fa0 6f 6c 75 6d 6e 20 58 20 69 6e 73 74 65 61 64 20  olumn X instead 
15fb0 6f 66 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  of the total num
15fc0 62 65 72 20 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c 0a  ber of non-null.
15fd0 76 61 6c 75 65 73 20 69 6e 20 63 6f 6c 75 6d 6e  values in column
15fe0 20 58 2e 0a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65   X..</p>..<table
15ff0 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61   border=0 cellpa
16000 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c 3e 0a  dding=10>.<tcl>.
16010 66 75 6e 63 64 65 66 20 7b 61 76 67 28 58 29 7d  funcdef {avg(X)}
16020 20 7b 2a 61 76 67 20 7b 61 76 67 28 29 20 61 67   {*avg {avg() ag
16030 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
16040 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 61 76 67 28  }} {.  ^The avg(
16050 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74  ) function.  ret
16060 75 72 6e 73 20 74 68 65 20 61 76 65 72 61 67 65  urns the average
16070 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 6e 6f   value of all no
16080 6e 2d 4e 55 4c 4c 20 3c 69 3e 58 3c 2f 69 3e 20  n-NULL <i>X</i> 
16090 77 69 74 68 69 6e 20 61 0a 20 20 67 72 6f 75 70  within a.  group
160a0 2e 20 20 5e 53 74 72 69 6e 67 20 61 6e 64 20 42  .  ^String and B
160b0 4c 4f 42 20 76 61 6c 75 65 73 20 74 68 61 74 20  LOB values that 
160c0 64 6f 20 6e 6f 74 20 6c 6f 6f 6b 20 6c 69 6b 65  do not look like
160d0 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 20 20 69   numbers are.  i
160e0 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 30 2e  nterpreted as 0.
160f0 0a 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  .  ^The result o
16100 66 20 61 76 67 28 29 20 69 73 20 61 6c 77 61 79  f avg() is alway
16110 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  s a floating poi
16120 6e 74 20 76 61 6c 75 65 20 61 73 20 6c 6f 6e 67  nt value as long
16130 20 61 73 0a 20 20 61 74 20 74 68 65 72 65 20 69   as.  at there i
16140 73 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6e  s at least one n
16150 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 65 76  on-NULL input ev
16160 65 6e 20 69 66 20 61 6c 6c 0a 20 20 69 6e 70 75  en if all.  inpu
16170 74 73 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e  ts are integers.
16180 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66    ^The result of
16190 20 61 76 67 28 29 20 69 73 20 4e 55 4c 4c 20 69   avg() is NULL i
161a0 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 20 20  f and only if.  
161b0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e  there are no non
161c0 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 2e 20 20 0a  -NULL inputs.  .
161d0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 6f 75 6e  }..funcdef {coun
161e0 74 28 58 29 20 63 6f 75 6e 74 28 2a 29 7d 20 7b  t(X) count(*)} {
161f0 2a 63 6f 75 6e 74 20 7b 63 6f 75 6e 74 28 29 20  *count {count() 
16200 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
16210 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 63 6f  on}} {.  ^The co
16220 75 6e 74 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  unt(X) function 
16230 72 65 74 75 72 6e 73 0a 20 20 61 20 63 6f 75 6e  returns.  a coun
16240 74 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20  t of the number 
16250 6f 66 20 74 69 6d 65 73 0a 20 20 74 68 61 74 20  of times.  that 
16260 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 6e 6f 74 20  <i>X</i> is not 
16270 4e 55 4c 4c 20 69 6e 20 61 20 67 72 6f 75 70 2e  NULL in a group.
16280 20 20 5e 54 68 65 20 63 6f 75 6e 74 28 2a 29 20    ^The count(*) 
16290 66 75 6e 63 74 69 6f 6e 0a 20 20 28 77 69 74 68  function.  (with
162a0 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 29 20 72   no arguments) r
162b0 65 74 75 72 6e 73 20 74 68 65 20 74 6f 74 61 6c  eturns the total
162c0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
162d0 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a  in the group..}.
162e0 0a 66 75 6e 63 64 65 66 20 7b 67 72 6f 75 70 5f  .funcdef {group_
162f0 63 6f 6e 63 61 74 28 58 29 20 67 72 6f 75 70 5f  concat(X) group_
16300 63 6f 6e 63 61 74 28 58 2c 59 29 7d 20 7b 0a 20  concat(X,Y)} {. 
16310 20 2a 67 72 6f 75 70 5f 63 6f 6e 63 61 74 20 7b   *group_concat {
16320 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 29 20 61  group_concat() a
16330 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
16340 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68 65 20 67 72  n}.} {.  ^The gr
16350 6f 75 70 5f 63 6f 6e 63 61 74 28 29 20 66 75 6e  oup_concat() fun
16360 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 0a 20 20  ction returns.  
16370 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 20 69  a string which i
16380 73 20 74 68 65 20 63 6f 6e 63 61 74 65 6e 61 74  s the concatenat
16390 69 6f 6e 20 6f 66 0a 20 20 61 6c 6c 20 6e 6f 6e  ion of.  all non
163a0 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 6f 66 20  -NULL values of 
163b0 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 49 66 20 70  <i>X</i>.  ^If p
163c0 61 72 61 6d 65 74 65 72 20 3c 69 3e 59 3c 2f 69  arameter <i>Y</i
163d0 3e 20 69 73 20 70 72 65 73 65 6e 74 20 74 68 65  > is present the
163e0 6e 0a 20 20 69 73 20 69 73 20 75 73 65 64 20 61  n.  is is used a
163f0 73 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 0a  s the separator.
16400 20 20 62 65 74 77 65 65 6e 20 69 6e 73 74 61 6e    between instan
16410 63 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e  ces of <i>X</i>.
16420 20 20 5e 41 20 63 6f 6d 6d 61 20 28 22 2c 22 29    ^A comma (",")
16430 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20   is used as the 
16440 73 65 70 61 72 61 74 6f 72 0a 20 20 69 66 20 3c  separator.  if <
16450 69 3e 59 3c 2f 69 3e 20 69 73 20 6f 6d 69 74 74  i>Y</i> is omitt
16460 65 64 2e 20 20 54 68 65 20 6f 72 64 65 72 20 6f  ed.  The order o
16470 66 20 74 68 65 20 63 6f 6e 63 61 74 65 6e 61 74  f the concatenat
16480 65 64 20 65 6c 65 6d 65 6e 74 73 20 69 73 0a 20  ed elements is. 
16490 20 61 72 62 69 74 72 61 72 79 2e 0a 7d 0a 0a 66   arbitrary..}..f
164a0 75 6e 63 64 65 66 20 7b 6d 61 78 28 58 29 7d 20  uncdef {max(X)} 
164b0 7b 2a 6d 61 78 41 67 67 46 75 6e 63 20 2a 61 67  {*maxAggFunc *ag
164c0 67 5f 6d 61 78 20 7b 6d 61 78 28 29 20 61 67 67  g_max {max() agg
164d0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d  regate function}
164e0 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 61 78 28 29  } {.  ^The max()
164f0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
16500 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68  ion.  returns th
16510 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20  e maximum value 
16520 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e  of all values in
16530 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e 54   the group..  ^T
16540 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65  he maximum value
16550 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 74 68   is the value th
16560 61 74 20 77 6f 75 6c 64 20 62 65 20 72 65 74 75  at would be retu
16570 72 6e 65 64 20 6c 61 73 74 20 69 6e 20 61 6e 0a  rned last in an.
16580 20 20 4f 52 44 45 52 20 42 59 20 6f 6e 20 74 68    ORDER BY on th
16590 65 20 73 61 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20  e same column.  
165a0 5e 41 67 67 72 65 67 61 74 65 20 6d 61 78 28 29  ^Aggregate max()
165b0 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 0a 20   returns NULL . 
165c0 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20   if and only if 
165d0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e  there are no non
165e0 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20  -NULL values in 
165f0 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75  the group..}..fu
16600 6e 63 64 65 66 20 7b 6d 69 6e 28 58 29 7d 20 7b  ncdef {min(X)} {
16610 2a 6d 69 6e 41 67 67 46 75 6e 63 20 2a 61 67 67  *minAggFunc *agg
16620 5f 6d 69 6e 20 7b 6d 69 6e 28 29 20 61 67 67 72  _min {min() aggr
16630 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d  egate function}}
16640 20 7b 0a 20 20 5e 54 68 65 20 6d 69 6e 28 29 20   {.  ^The min() 
16650 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
16660 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68 65  on.  returns the
16670 20 6d 69 6e 69 6d 75 6d 20 6e 6f 6e 2d 4e 55 4c   minimum non-NUL
16680 4c 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76  L value of all v
16690 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f  alues in the gro
166a0 75 70 2e 0a 20 20 5e 54 68 65 20 6d 69 6e 69 6d  up..  ^The minim
166b0 75 6d 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  um value is the 
166c0 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 76  first non-NULL v
166d0 61 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20  alue that would 
166e0 61 70 70 65 61 72 0a 20 20 69 6e 20 61 6e 20 4f  appear.  in an O
166f0 52 44 45 52 20 42 59 20 6f 66 20 74 68 65 20 63  RDER BY of the c
16700 6f 6c 75 6d 6e 2e 0a 20 20 5e 41 67 67 72 65 67  olumn..  ^Aggreg
16710 61 74 65 20 6d 69 6e 28 29 20 72 65 74 75 72 6e  ate min() return
16720 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64 20 6f 6e  s NULL if and on
16730 6c 79 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ly if there are 
16740 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 0a 20 20 76 61  no non-NULL.  va
16750 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75  lues in the grou
16760 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73  p..}..funcdef {s
16770 75 6d 28 58 29 20 74 6f 74 61 6c 28 58 29 7d 20  um(X) total(X)} 
16780 7b 0a 20 20 2a 73 75 6d 46 75 6e 63 20 2a 73 75  {.  *sumFunc *su
16790 6d 20 2a 74 6f 74 61 6c 0a 20 20 7b 73 75 6d 28  m *total.  {sum(
167a0 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
167b0 74 69 6f 6e 7d 0a 20 20 7b 74 6f 74 61 6c 28 29  tion}.  {total()
167c0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
167d0 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68 65 20  ion}.} {.  ^The 
167e0 73 75 6d 28 29 20 61 6e 64 20 74 6f 74 61 6c 28  sum() and total(
167f0 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
16800 74 69 6f 6e 73 0a 20 20 72 65 74 75 72 6e 20 73  tions.  return s
16810 75 6d 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55  um of all non-NU
16820 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  LL values in the
16830 20 67 72 6f 75 70 2e 0a 20 20 5e 49 66 20 74 68   group..  ^If th
16840 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e  ere are no non-N
16850 55 4c 4c 20 69 6e 70 75 74 20 72 6f 77 73 20 74  ULL input rows t
16860 68 65 6e 20 73 75 6d 28 29 20 72 65 74 75 72 6e  hen sum() return
16870 73 0a 20 20 4e 55 4c 4c 20 62 75 74 20 74 6f 74  s.  NULL but tot
16880 61 6c 28 29 20 72 65 74 75 72 6e 73 20 30 2e 30  al() returns 0.0
16890 2e 0a 20 20 4e 55 4c 4c 20 69 73 20 6e 6f 74 20  ..  NULL is not 
168a0 6e 6f 72 6d 61 6c 6c 79 20 61 20 68 65 6c 70 66  normally a helpf
168b0 75 6c 20 72 65 73 75 6c 74 20 66 6f 72 20 74 68  ul result for th
168c0 65 20 73 75 6d 20 6f 66 20 6e 6f 20 72 6f 77 73  e sum of no rows
168d0 0a 20 20 62 75 74 20 74 68 65 20 53 51 4c 20 73  .  but the SQL s
168e0 74 61 6e 64 61 72 64 20 72 65 71 75 69 72 65 73  tandard requires
168f0 20 69 74 20 61 6e 64 20 6d 6f 73 74 20 6f 74 68   it and most oth
16900 65 72 0a 20 20 53 51 4c 20 64 61 74 61 62 61 73  er.  SQL databas
16910 65 20 65 6e 67 69 6e 65 73 20 69 6d 70 6c 65 6d  e engines implem
16920 65 6e 74 20 73 75 6d 28 29 20 74 68 61 74 20 77  ent sum() that w
16930 61 79 20 73 6f 20 53 51 4c 69 74 65 20 64 6f 65  ay so SQLite doe
16940 73 20 69 74 20 69 6e 20 74 68 65 0a 20 20 73 61  s it in the.  sa
16950 6d 65 20 77 61 79 20 69 6e 20 6f 72 64 65 72 20  me way in order 
16960 74 6f 20 62 65 20 63 6f 6d 70 61 74 69 62 6c 65  to be compatible
16970 2e 20 20 20 54 68 65 20 6e 6f 6e 2d 73 74 61 6e  .   The non-stan
16980 64 61 72 64 20 74 6f 74 61 6c 28 29 20 66 75 6e  dard total() fun
16990 63 74 69 6f 6e 0a 20 20 69 73 20 70 72 6f 76 69  ction.  is provi
169a0 64 65 64 20 61 73 20 61 20 63 6f 6e 76 65 6e 69  ded as a conveni
169b0 65 6e 74 20 77 61 79 20 74 6f 20 77 6f 72 6b 20  ent way to work 
169c0 61 72 6f 75 6e 64 20 74 68 69 73 20 64 65 73 69  around this desi
169d0 67 6e 20 70 72 6f 62 6c 65 6d 0a 20 20 69 6e 20  gn problem.  in 
169e0 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
169f0 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 54 68 65  .</p>..  <p>^The
16a00 20 72 65 73 75 6c 74 20 6f 66 20 74 6f 74 61 6c   result of total
16a10 28 29 20 69 73 20 61 6c 77 61 79 73 20 61 20 66  () is always a f
16a20 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
16a30 6c 75 65 2e 0a 20 20 5e 54 68 65 20 72 65 73 75  lue..  ^The resu
16a40 6c 74 20 6f 66 20 73 75 6d 28 29 20 69 73 20 61  lt of sum() is a
16a50 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  n integer value 
16a60 69 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20  if all non-NULL 
16a70 69 6e 70 75 74 73 20 61 72 65 20 69 6e 74 65 67  inputs are integ
16a80 65 72 73 2e 0a 20 20 5e 49 66 20 61 6e 79 20 69  ers..  ^If any i
16a90 6e 70 75 74 20 74 6f 20 73 75 6d 28 29 20 69 73  nput to sum() is
16aa0 20 6e 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65   neither an inte
16ab0 67 65 72 20 6f 72 20 61 20 4e 55 4c 4c 0a 20 20  ger or a NULL.  
16ac0 74 68 65 6e 20 73 75 6d 28 29 20 72 65 74 75 72  then sum() retur
16ad0 6e 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f  ns a floating po
16ae0 69 6e 74 20 76 61 6c 75 65 0a 20 20 77 68 69 63  int value.  whic
16af0 68 20 6d 69 67 68 74 20 62 65 20 61 6e 20 61 70  h might be an ap
16b00 70 72 6f 78 69 6d 61 74 69 6f 6e 20 74 6f 20 74  proximation to t
16b10 68 65 20 74 72 75 65 20 73 75 6d 2e 3c 2f 70 3e  he true sum.</p>
16b20 0a 0a 20 20 3c 70 3e 5e 53 75 6d 28 29 20 77 69  ..  <p>^Sum() wi
16b30 6c 6c 20 74 68 72 6f 77 20 61 6e 20 22 69 6e 74  ll throw an "int
16b40 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 22 20 65  eger overflow" e
16b50 78 63 65 70 74 69 6f 6e 20 69 66 20 61 6c 6c 20  xception if all 
16b60 69 6e 70 75 74 73 0a 20 20 61 72 65 20 69 6e 74  inputs.  are int
16b70 65 67 65 72 73 20 6f 72 20 4e 55 4c 4c 0a 20 20  egers or NULL.  
16b80 61 6e 64 20 61 6e 20 69 6e 74 65 67 65 72 20 6f  and an integer o
16b90 76 65 72 66 6c 6f 77 20 6f 63 63 75 72 73 20 61  verflow occurs a
16ba0 74 20 61 6e 79 20 70 6f 69 6e 74 20 64 75 72 69  t any point duri
16bb0 6e 67 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69  ng the computati
16bc0 6f 6e 2e 0a 20 20 5e 54 6f 74 61 6c 28 29 20 6e  on..  ^Total() n
16bd0 65 76 65 72 20 74 68 72 6f 77 73 20 61 6e 20 69  ever throws an i
16be0 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 2e  nteger overflow.
16bf0 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c  .}.</tcl>.</tabl
16c00 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  e>..<tcl>.######
16c10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65 63 74 69 6f 6e  ########.Section
16c60 20 49 4e 53 45 52 54 20 69 6e 73 65 72 74 20 7b   INSERT insert {
16c70 49 4e 53 45 52 54 20 2a 49 4e 53 45 52 54 73 7d  INSERT *INSERTs}
16c80 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
16c90 69 6e 73 65 72 74 2d 73 74 6d 74 20 31 0a 3c 2f  insert-stmt 1.</
16ca0 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e 53  tcl>..<p>The INS
16cb0 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  ERT statement co
16cc0 6d 65 73 20 69 6e 20 74 68 72 65 65 20 62 61 73  mes in three bas
16cd0 69 63 20 66 6f 72 6d 73 2e 20 20 5e 54 68 65 20  ic forms.  ^The 
16ce0 66 69 72 73 74 20 66 6f 72 6d 0a 28 77 69 74 68  first form.(with
16cf0 20 74 68 65 20 22 56 41 4c 55 45 53 22 20 6b 65   the "VALUES" ke
16d00 79 77 6f 72 64 29 20 63 72 65 61 74 65 73 20 61  yword) creates a
16d10 20 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77 20   single new row 
16d20 69 6e 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74  in an existing t
16d30 61 62 6c 65 2e 0a 5e 49 66 20 6e 6f 20 63 6f 6c  able..^If no col
16d40 75 6d 6e 2d 6c 69 73 74 20 69 73 20 73 70 65 63  umn-list is spec
16d50 69 66 69 65 64 20 74 68 65 6e 20 74 68 65 20 6e  ified then the n
16d60 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20  umber of values 
16d70 6d 75 73 74 0a 62 65 20 74 68 65 20 73 61 6d 65  must.be the same
16d80 20 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   as the number o
16d90 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
16da0 20 74 61 62 6c 65 2e 20 20 5e 49 66 20 61 20 63   table.  ^If a c
16db0 6f 6c 75 6d 6e 2d 6c 69 73 74 0a 69 73 20 73 70  olumn-list.is sp
16dc0 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68  ecified, then th
16dd0 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75  e number of valu
16de0 65 73 20 6d 75 73 74 20 6d 61 74 63 68 20 74 68  es must match th
16df0 65 20 6e 75 6d 62 65 72 20 6f 66 0a 73 70 65 63  e number of.spec
16e00 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73 2e 20 20  ified columns.  
16e10 5e 43 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20  ^Columns of the 
16e20 74 61 62 6c 65 20 74 68 61 74 20 64 6f 20 6e 6f  table that do no
16e30 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 0a  t appear in the.
16e40 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 61 72 65 20  column list are 
16e50 66 69 6c 6c 65 64 20 77 69 74 68 20 74 68 65 20  filled with the 
16e60 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2c 20 6f  default value, o
16e70 72 20 77 69 74 68 20 4e 55 4c 4c 20 69 66 20 6e  r with NULL if n
16e80 6f 0a 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  o.default value 
16e90 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 3c 2f  is specified..</
16ea0 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 65 63 6f  p>..<p>^The seco
16eb0 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 49  nd form of the I
16ec0 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
16ed0 74 61 6b 65 73 20 69 74 73 20 64 61 74 61 20 66  takes its data f
16ee0 72 6f 6d 20 61 0a 53 45 4c 45 43 54 20 73 74 61  rom a.SELECT sta
16ef0 74 65 6d 65 6e 74 2e 20 20 5e 54 68 65 20 6e 75  tement.  ^The nu
16f00 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
16f10 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  in the result of
16f20 20 74 68 65 0a 53 45 4c 45 43 54 20 6d 75 73 74   the.SELECT must
16f30 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20 74   exactly match t
16f40 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
16f50 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
16f60 65 20 69 66 0a 6e 6f 20 63 6f 6c 75 6d 6e 20 6c  e if.no column l
16f70 69 73 74 20 69 73 20 73 70 65 63 69 66 69 65 64  ist is specified
16f80 2c 20 6f 72 20 69 74 20 6d 75 73 74 20 6d 61 74  , or it must mat
16f90 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ch the number of
16fa0 20 63 6f 6c 75 6d 6e 73 0a 6e 61 6d 65 64 20 69   columns.named i
16fb0 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6c 69 73  n the column lis
16fc0 74 2e 20 20 5e 41 20 6e 65 77 20 65 6e 74 72 79  t.  ^A new entry
16fd0 20 69 73 20 6d 61 64 65 20 69 6e 20 74 68 65 20   is made in the 
16fe0 74 61 62 6c 65 0a 66 6f 72 20 65 76 65 72 79 20  table.for every 
16ff0 72 6f 77 20 6f 66 20 74 68 65 20 53 45 4c 45 43  row of the SELEC
17000 54 20 72 65 73 75 6c 74 2e 20 20 5e 54 68 65 20  T result.  ^The 
17010 53 45 4c 45 43 54 20 6d 61 79 20 62 65 20 73 69  SELECT may be si
17020 6d 70 6c 65 0a 6f 72 20 63 6f 6d 70 6f 75 6e 64  mple.or compound
17030 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 74  .</p>..<p>^The t
17040 68 69 72 64 20 66 6f 72 6d 20 6f 66 20 61 6e 20  hird form of an 
17050 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
17060 20 69 73 20 77 69 74 68 20 44 45 46 41 55 4c 54   is with DEFAULT
17070 20 56 41 4c 55 45 53 2e 0a 5e 28 54 68 65 20 49   VALUES..^(The I
17080 4e 53 45 52 54 20 2e 2e 2e 20 44 45 46 41 55 4c  NSERT ... DEFAUL
17090 54 20 56 41 4c 55 45 53 20 73 74 61 74 65 6d 65  T VALUES stateme
170a0 6e 74 20 73 69 6d 70 6c 79 20 63 72 65 61 74 65  nt simply create
170b0 73 20 61 20 73 69 6e 67 6c 65 20 6e 65 77 0a 72  s a single new.r
170c0 6f 77 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ow in the table 
170d0 69 6e 20 77 68 69 63 68 20 65 61 63 68 20 63 6f  in which each co
170e0 6c 75 6d 6e 20 69 73 20 66 69 6c 6c 65 64 20 77  lumn is filled w
170f0 69 74 68 20 69 74 73 20 64 65 66 61 75 6c 74 20  ith its default 
17100 76 61 6c 75 65 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70  value.)^</p>..<p
17110 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63  >^The optional c
17120 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 20 61  onflict-clause a
17130 6c 6c 6f 77 73 20 74 68 65 20 73 70 65 63 69 66  llows the specif
17140 69 63 61 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c  ication of an al
17150 74 65 72 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72  ternative.constr
17160 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65  aint conflict re
17170 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
17180 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69 6e 67  hm to use during
17190 20 74 68 69 73 20 6f 6e 65 20 49 4e 53 45 52 54   this one INSERT
171a0 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65 65 20 74 68   command..See th
171b0 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64  e section titled
171c0 0a 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66  .[ON CONFLICT] f
171d0 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
171e0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 5e 46 6f 72 20  formation..^For 
171f0 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69  compatibility wi
17200 74 68 20 4d 79 53 51 4c 2c 20 74 68 65 20 70 61  th MySQL, the pa
17210 72 73 65 72 20 61 6c 6c 6f 77 73 20 74 68 65 20  rser allows the 
17220 75 73 65 20 6f 66 20 74 68 65 0a 73 69 6e 67 6c  use of the.singl
17230 65 20 6b 65 79 77 6f 72 64 20 3c 61 20 68 72 65  e keyword <a hre
17240 66 3d 22 6c 61 6e 67 5f 72 65 70 6c 61 63 65 2e  f="lang_replace.
17250 68 74 6d 6c 22 3e 52 45 50 4c 41 43 45 3c 2f 61  html">REPLACE</a
17260 3e 20 61 73 20 61 6e 20 0a 61 6c 69 61 73 20 66  > as an .alias f
17270 6f 72 20 22 49 4e 53 45 52 54 20 4f 52 20 52 45  or "INSERT OR RE
17280 50 4c 41 43 45 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70  PLACE"..</p>..<p
17290 3e 5e 28 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  >^(The optional 
172a0 22 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d  "<i>database-nam
172b0 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 22 20 70  e</i><b>.</b>" p
172c0 72 65 66 69 78 20 6f 6e 20 74 68 65 20 3c 69 3e  refix on the <i>
172d0 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 0a 69  table-name</i>.i
172e0 73 20 73 75 70 70 6f 72 74 20 66 6f 72 20 74 6f  s support for to
172f0 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54 20 73  p-level INSERT s
17300 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 2e 29  tatements only.)
17310 5e 20 20 5e 54 68 65 20 74 61 62 6c 65 20 6e 61  ^  ^The table na
17320 6d 65 20 6d 75 73 74 20 62 65 0a 75 6e 71 75 61  me must be.unqua
17330 6c 69 66 69 65 64 20 66 6f 72 20 49 4e 53 45 52  lified for INSER
17340 54 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  T statements tha
17350 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20 5b  t occur within [
17360 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20  CREATE TRIGGER] 
17370 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e 53 69 6d  statements..^Sim
17380 69 6c 61 72 6c 79 2c 20 74 68 65 20 22 44 45 46  ilarly, the "DEF
17390 41 55 4c 54 20 56 41 4c 55 45 53 22 20 66 6f 72  AULT VALUES" for
173a0 6d 20 6f 66 20 74 68 65 20 49 4e 53 45 52 54 20  m of the INSERT 
173b0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 75 70  statement is sup
173c0 70 6f 72 74 65 64 20 66 6f 72 0a 74 6f 70 2d 6c  ported for.top-l
173d0 65 76 65 6c 20 49 4e 53 45 52 54 20 73 74 61 74  evel INSERT stat
173e0 65 6d 65 6e 74 73 20 6f 6e 6c 79 20 61 6e 64 20  ements only and 
173f0 6e 6f 74 20 66 6f 72 20 49 4e 53 45 52 54 20 73  not for INSERT s
17400 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
17410 0a 74 72 69 67 67 65 72 73 2e 0a 3c 70 3e 0a 0a  .triggers..<p>..
17420 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
17430 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17440 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17450 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17460 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17470 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 4f 4e  ####.Section {ON
17480 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
17490 7d 20 63 6f 6e 66 6c 69 63 74 20 7b 7b 63 6f 6e  } conflict {{con
174a0 66 6c 69 63 74 20 63 6c 61 75 73 65 7d 20 7b 4f  flict clause} {O
174b0 4e 20 43 4f 4e 46 4c 49 43 54 7d 7d 0a 0a 42 75  N CONFLICT}}..Bu
174c0 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6e 66  bbleDiagram conf
174d0 6c 69 63 74 2d 63 6c 61 75 73 65 0a 3c 2f 74 63  lict-clause.</tc
174e0 6c 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f  l>..<p>The ON CO
174f0 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 73  NFLICT clause is
17500 20 6e 6f 74 20 61 20 73 65 70 61 72 61 74 65 20   not a separate 
17510 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 49 74  SQL command.  It
17520 20 69 73 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64 61   is a.non-standa
17530 72 64 20 63 6c 61 75 73 65 20 74 68 61 74 20 63  rd clause that c
17540 61 6e 20 61 70 70 65 61 72 20 69 6e 20 6d 61 6e  an appear in man
17550 79 20 6f 74 68 65 72 20 53 51 4c 20 63 6f 6d 6d  y other SQL comm
17560 61 6e 64 73 2e 0a 49 74 20 69 73 20 67 69 76 65  ands..It is give
17570 6e 20 69 74 73 20 6f 77 6e 20 73 65 63 74 69 6f  n its own sectio
17580 6e 20 69 6e 20 74 68 69 73 20 64 6f 63 75 6d 65  n in this docume
17590 6e 74 20 62 65 63 61 75 73 65 20 69 74 20 69 73  nt because it is
175a0 20 6e 6f 74 0a 70 61 72 74 20 6f 66 20 73 74 61   not.part of sta
175b0 6e 64 61 72 64 20 53 51 4c 20 61 6e 64 20 74 68  ndard SQL and th
175c0 65 72 65 66 6f 72 65 20 6d 69 67 68 74 20 6e 6f  erefore might no
175d0 74 20 62 65 20 66 61 6d 69 6c 69 61 72 2e 3c 2f  t be familiar.</
175e0 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 79 6e 74  p>..<p>^The synt
175f0 61 78 20 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f  ax for the ON CO
17600 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 73  NFLICT clause is
17610 20 61 73 20 73 68 6f 77 6e 20 61 62 6f 76 65 20   as shown above 
17620 66 6f 72 0a 74 68 65 20 43 52 45 41 54 45 20 54  for.the CREATE T
17630 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e  ABLE command.  ^
17640 46 6f 72 20 74 68 65 20 49 4e 53 45 52 54 20 61  For the INSERT a
17650 6e 64 0a 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e  nd.UPDATE comman
17660 64 73 2c 20 74 68 65 20 6b 65 79 77 6f 72 64 73  ds, the keywords
17670 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 22 20 61   "ON CONFLICT" a
17680 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 20 22  re replaced by "
17690 4f 52 22 2c 20 74 6f 20 6d 61 6b 65 0a 74 68 65  OR", to make.the
176a0 20 73 79 6e 74 61 78 20 73 65 65 6d 20 6d 6f 72   syntax seem mor
176b0 65 20 6e 61 74 75 72 61 6c 2e 20 20 5e 46 6f 72  e natural.  ^For
176c0 20 65 78 61 6d 70 6c 65 2c 20 69 6e 73 74 65 61   example, instea
176d0 64 20 6f 66 0a 22 49 4e 53 45 52 54 20 4f 4e 20  d of."INSERT ON 
176e0 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45 22  CONFLICT IGNORE"
176f0 20 77 65 20 68 61 76 65 20 22 49 4e 53 45 52 54   we have "INSERT
17700 20 4f 52 20 49 47 4e 4f 52 45 22 2e 0a 54 68 65   OR IGNORE"..The
17710 20 6b 65 79 77 6f 72 64 73 20 63 68 61 6e 67 65   keywords change
17720 20 62 75 74 20 74 68 65 20 6d 65 61 6e 69 6e 67   but the meaning
17730 20 6f 66 20 74 68 65 20 63 6c 61 75 73 65 20 69   of the clause i
17740 73 20 74 68 65 20 73 61 6d 65 0a 65 69 74 68 65  s the same.eithe
17750 72 20 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  r way.</p>..<p>^
17760 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  The ON CONFLICT 
17770 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 73  clause specifies
17780 20 61 6e 20 61 6c 67 6f 72 69 74 68 6d 20 75 73   an algorithm us
17790 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 0a 63 6f  ed to resolve.co
177a0 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63  nstraint conflic
177b0 74 73 2e 20 20 5e 54 68 65 72 65 20 61 72 65 20  ts.  ^There are 
177c0 66 69 76 65 20 63 6f 6e 66 6c 69 63 74 20 72 65  five conflict re
177d0 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
177e0 68 6d 20 63 68 6f 69 63 65 73 3a 0a 52 4f 4c 4c  hm choices:.ROLL
177f0 42 41 43 4b 2c 20 41 42 4f 52 54 2c 20 46 41 49  BACK, ABORT, FAI
17800 4c 2c 20 49 47 4e 4f 52 45 2c 20 61 6e 64 20 52  L, IGNORE, and R
17810 45 50 4c 41 43 45 2e 0a 5e 54 68 65 20 64 65 66  EPLACE..^The def
17820 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65  ault conflict re
17830 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
17840 68 6d 20 69 73 20 41 42 4f 52 54 2e 20 20 54 68  hm is ABORT.  Th
17850 69 73 0a 69 73 20 77 68 61 74 20 74 68 65 79 20  is.is what they 
17860 6d 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c 3e 0a  mean:</p>..<dl>.
17870 3c 64 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43 4b 3c  <dt><b>ROLLBACK<
17880 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  /b></dt>.<dd><p>
17890 5e 57 68 65 6e 20 61 20 63 6f 6e 73 74 72 61 69  ^When a constrai
178a0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
178b0 75 72 73 2c 20 61 6e 20 69 6d 6d 65 64 69 61 74  urs, an immediat
178c0 65 20 52 4f 4c 4c 42 41 43 4b 0a 6f 63 63 75 72  e ROLLBACK.occur
178d0 73 2c 20 74 68 75 73 20 65 6e 64 69 6e 67 20 74  s, thus ending t
178e0 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
178f0 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20  action, and the 
17900 63 6f 6d 6d 61 6e 64 20 61 62 6f 72 74 73 0a 77  command aborts.w
17910 69 74 68 20 61 20 72 65 74 75 72 6e 20 63 6f 64  ith a return cod
17920 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 4f 4e 53  e of SQLITE_CONS
17930 54 52 41 49 4e 54 2e 20 20 5e 49 66 20 6e 6f 20  TRAINT.  ^If no 
17940 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 61  transaction is.a
17950 63 74 69 76 65 20 28 6f 74 68 65 72 20 74 68 61  ctive (other tha
17960 6e 20 74 68 65 20 69 6d 70 6c 69 65 64 20 74 72  n the implied tr
17970 61 6e 73 61 63 74 69 6f 6e 20 74 68 61 74 20 69  ansaction that i
17980 73 20 63 72 65 61 74 65 64 20 6f 6e 20 65 76 65  s created on eve
17990 72 79 0a 63 6f 6d 6d 61 6e 64 29 20 74 68 65 6e  ry.command) then
179a0 20 74 68 69 73 20 61 6c 67 6f 72 69 74 68 6d 20   this algorithm 
179b0 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61  works the same a
179c0 73 20 41 42 4f 52 54 2e 3c 2f 70 3e 3c 2f 64 64  s ABORT.</p></dd
179d0 3e 0a 0a 3c 64 74 3e 3c 62 3e 41 42 4f 52 54 3c  >..<dt><b>ABORT<
179e0 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  /b></dt>.<dd><p>
179f0 5e 57 68 65 6e 20 61 20 63 6f 6e 73 74 72 61 69  ^When a constrai
17a00 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
17a10 75 72 73 2c 20 74 68 65 20 63 6f 6d 6d 61 6e 64  urs, the command
17a20 20 62 61 63 6b 73 20 6f 75 74 0a 61 6e 79 20 70   backs out.any p
17a30 72 69 6f 72 20 63 68 61 6e 67 65 73 20 69 74 20  rior changes it 
17a40 6d 69 67 68 74 20 68 61 76 65 20 6d 61 64 65 20  might have made 
17a50 61 6e 64 20 61 62 6f 72 74 73 20 77 69 74 68 20  and aborts with 
17a60 61 20 72 65 74 75 72 6e 20 63 6f 64 65 0a 6f 66  a return code.of
17a70 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49   SQLITE_CONSTRAI
17a80 4e 54 2e 20 20 5e 42 75 74 20 6e 6f 20 52 4f 4c  NT.  ^But no ROL
17a90 4c 42 41 43 4b 20 69 73 20 65 78 65 63 75 74 65  LBACK is execute
17aa0 64 20 73 6f 20 63 68 61 6e 67 65 73 0a 66 72 6f  d so changes.fro
17ab0 6d 20 70 72 69 6f 72 20 63 6f 6d 6d 61 6e 64 73  m prior commands
17ac0 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
17ad0 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 61 72 65   transaction.are
17ae0 20 70 72 65 73 65 72 76 65 64 2e 20 20 54 68 69   preserved.  Thi
17af0 73 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74  s is the default
17b00 20 62 65 68 61 76 69 6f 72 2e 3c 2f 70 3e 3c 2f   behavior.</p></
17b10 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 46 41 49 4c  dd>..<dt><b>FAIL
17b20 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </b></dt>.<dd><p
17b30 3e 5e 57 68 65 6e 20 61 20 63 6f 6e 73 74 72 61  >^When a constra
17b40 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
17b50 63 75 72 73 2c 20 74 68 65 20 63 6f 6d 6d 61 6e  curs, the comman
17b60 64 20 61 62 6f 72 74 73 20 77 69 74 68 20 61 0a  d aborts with a.
17b70 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c 49  return code SQLI
17b80 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 2e 20 20  TE_CONSTRAINT.  
17b90 5e 42 75 74 20 61 6e 79 20 63 68 61 6e 67 65 73  ^But any changes
17ba0 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
17bb0 20 74 68 61 74 0a 74 68 65 20 63 6f 6d 6d 61 6e   that.the comman
17bc0 64 20 6d 61 64 65 20 70 72 69 6f 72 20 74 6f 20  d made prior to 
17bd0 65 6e 63 6f 75 6e 74 65 72 69 6e 67 20 74 68 65  encountering the
17be0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
17bf0 61 74 69 6f 6e 0a 61 72 65 20 70 72 65 73 65 72  ation.are preser
17c00 76 65 64 20 61 6e 64 20 61 72 65 20 6e 6f 74 20  ved and are not 
17c10 62 61 63 6b 65 64 20 6f 75 74 2e 20 20 5e 46 6f  backed out.  ^Fo
17c20 72 20 65 78 61 6d 70 6c 65 2c 20 69 66 20 61 6e  r example, if an
17c30 20 55 50 44 41 54 45 0a 73 74 61 74 65 6d 65 6e   UPDATE.statemen
17c40 74 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 61 20  t encountered a 
17c50 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
17c60 74 69 6f 6e 20 6f 6e 20 74 68 65 20 31 30 30 74  tion on the 100t
17c70 68 20 72 6f 77 20 74 68 61 74 0a 69 74 20 61 74  h row that.it at
17c80 74 65 6d 70 74 73 20 74 6f 20 75 70 64 61 74 65  tempts to update
17c90 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72 73 74  , then the first
17ca0 20 39 39 20 72 6f 77 20 63 68 61 6e 67 65 73 20   99 row changes 
17cb0 61 72 65 20 70 72 65 73 65 72 76 65 64 0a 62 75  are preserved.bu
17cc0 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 6f 77  t changes to row
17cd0 73 20 31 30 30 20 61 6e 64 20 62 65 79 6f 6e 64  s 100 and beyond
17ce0 20 6e 65 76 65 72 20 6f 63 63 75 72 2e 3c 2f 70   never occur.</p
17cf0 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 49  ></dd>..<dt><b>I
17d00 47 4e 4f 52 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c  GNORE</b></dt>.<
17d10 64 64 3e 3c 70 3e 5e 57 68 65 6e 20 61 20 63 6f  dd><p>^When a co
17d20 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
17d30 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 6f  on occurs, the o
17d40 6e 65 20 72 6f 77 20 74 68 61 74 20 63 6f 6e 74  ne row that cont
17d50 61 69 6e 73 0a 74 68 65 20 63 6f 6e 73 74 72 61  ains.the constra
17d60 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 69 73  int violation is
17d70 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72   not inserted or
17d80 20 63 68 61 6e 67 65 64 2e 20 20 5e 42 75 74 20   changed.  ^But 
17d90 74 68 65 20 63 6f 6d 6d 61 6e 64 0a 63 6f 6e 74  the command.cont
17da0 69 6e 75 65 73 20 65 78 65 63 75 74 69 6e 67 20  inues executing 
17db0 6e 6f 72 6d 61 6c 6c 79 2e 20 20 5e 4f 74 68 65  normally.  ^Othe
17dc0 72 20 72 6f 77 73 20 62 65 66 6f 72 65 20 61 6e  r rows before an
17dd0 64 20 61 66 74 65 72 20 74 68 65 20 72 6f 77 20  d after the row 
17de0 74 68 61 74 0a 63 6f 6e 74 61 69 6e 65 64 20 74  that.contained t
17df0 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  he constraint vi
17e00 6f 6c 61 74 69 6f 6e 20 63 6f 6e 74 69 6e 75 65  olation continue
17e10 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20   to be inserted 
17e20 6f 72 20 75 70 64 61 74 65 64 0a 6e 6f 72 6d 61  or updated.norma
17e30 6c 6c 79 2e 20 20 5e 4e 6f 20 65 72 72 6f 72 20  lly.  ^No error 
17e40 69 73 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e  is returned when
17e50 20 74 68 65 20 49 47 4e 4f 52 45 20 63 6f 6e 66   the IGNORE conf
17e60 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a  lict resolution.
17e70 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65  algorithm is use
17e80 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  d.</p></dd>..<dt
17e90 3e 3c 62 3e 52 45 50 4c 41 43 45 3c 2f 62 3e 3c  ><b>REPLACE</b><
17ea0 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 5e 57 68 65  /dt>.<dd><p>^Whe
17eb0 6e 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  n a UNIQUE const
17ec0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
17ed0 6f 63 63 75 72 73 2c 20 74 68 65 20 70 72 65 2d  occurs, the pre-
17ee0 65 78 69 73 74 69 6e 67 20 72 6f 77 73 0a 74 68  existing rows.th
17ef0 61 74 20 61 72 65 20 63 61 75 73 69 6e 67 20 74  at are causing t
17f00 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  he constraint vi
17f10 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f  olation are remo
17f20 76 65 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 73  ved prior to ins
17f30 65 72 74 69 6e 67 0a 6f 72 20 75 70 64 61 74 69  erting.or updati
17f40 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  ng the current r
17f50 6f 77 2e 20 20 5e 54 68 75 73 20 74 68 65 20 69  ow.  ^Thus the i
17f60 6e 73 65 72 74 20 6f 72 20 75 70 64 61 74 65 20  nsert or update 
17f70 61 6c 77 61 79 73 20 6f 63 63 75 72 73 2e 0a 5e  always occurs..^
17f80 54 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 74  The command cont
17f90 69 6e 75 65 73 20 65 78 65 63 75 74 69 6e 67 20  inues executing 
17fa0 6e 6f 72 6d 61 6c 6c 79 20 66 6f 6c 6c 6f 77 69  normally followi
17fb0 6e 67 20 52 45 50 4c 41 43 45 2e 20 20 0a 5e 4e  ng REPLACE.  .^N
17fc0 6f 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72  o error is retur
17fd0 6e 65 64 20 62 79 20 74 68 65 20 52 45 50 4c 41  ned by the REPLA
17fe0 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  CE conflict reso
17ff0 6c 75 74 69 6f 6e 2e 0a 5e 49 66 20 61 20 4e 4f  lution..^If a NO
18000 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
18010 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
18020 72 73 2c 20 74 68 65 20 4e 55 4c 4c 20 76 61 6c  rs, the NULL val
18030 75 65 20 69 73 20 72 65 70 6c 61 63 65 64 0a 62  ue is replaced.b
18040 79 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  y the default va
18050 6c 75 65 20 66 6f 72 20 74 68 61 74 20 63 6f 6c  lue for that col
18060 75 6d 6e 2e 20 20 5e 49 66 20 74 68 65 20 63 6f  umn.  ^If the co
18070 6c 75 6d 6e 20 68 61 73 20 6e 6f 20 64 65 66 61  lumn has no defa
18080 75 6c 74 0a 76 61 6c 75 65 2c 20 74 68 65 6e 20  ult.value, then 
18090 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72 69  the ABORT algori
180a0 74 68 6d 20 69 73 20 75 73 65 64 2e 20 20 5e 49  thm is used.  ^I
180b0 66 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  f a CHECK constr
180c0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 6f  aint violation.o
180d0 63 63 75 72 73 20 74 68 65 6e 20 74 68 65 20 49  ccurs then the I
180e0 47 4e 4f 52 45 20 61 6c 67 6f 72 69 74 68 6d 20  GNORE algorithm 
180f0 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  is used.</p>..<p
18100 3e 5e 57 68 65 6e 20 74 68 69 73 20 63 6f 6e 66  >^When this conf
18110 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
18120 73 74 72 61 74 65 67 79 20 64 65 6c 65 74 65 73  strategy deletes
18130 20 72 6f 77 73 20 69 6e 20 6f 72 64 65 72 20 74   rows in order t
18140 6f 0a 73 61 74 69 73 66 79 20 61 20 63 6f 6e 73  o.satisfy a cons
18150 74 72 61 69 6e 74 2c 20 5b 43 52 45 41 54 45 20  traint, [CREATE 
18160 54 52 49 47 47 45 52 20 7c 20 64 65 6c 65 74 65  TRIGGER | delete
18170 20 74 72 69 67 67 65 72 73 5d 20 6f 6e 6c 79 20   triggers] only 
18180 66 69 72 65 20 69 66 0a 5b 72 65 63 75 72 73 69  fire if.[recursi
18190 76 65 5f 74 72 69 67 67 65 72 73 20 70 72 61 67  ve_triggers prag
181a0 6d 61 20 7c 20 72 65 63 75 72 73 69 76 65 20 74  ma | recursive t
181b0 72 69 67 67 65 72 73 5d 20 61 72 65 20 65 6e 61  riggers] are ena
181c0 62 6c 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  bled.</p>..<p>^T
181d0 68 65 20 5b 73 71 6c 69 74 65 33 5f 75 70 64 61  he [sqlite3_upda
181e0 74 65 5f 68 6f 6f 6b 20 7c 20 75 70 64 61 74 65  te_hook | update
181f0 20 68 6f 6f 6b 5d 20 69 73 20 6e 6f 74 20 69 6e   hook] is not in
18200 76 6f 6b 65 64 20 66 6f 72 20 72 6f 77 73 20 74  voked for rows t
18210 68 61 74 0a 61 72 65 20 64 65 6c 65 74 65 64 20  hat.are deleted 
18220 62 79 20 61 6e 20 4f 52 20 52 45 50 4c 41 43 45  by an OR REPLACE
18230 20 72 65 73 6f 6c 75 74 69 6f 6e 2e 20 20 5e 4e   resolution.  ^N
18240 6f 72 20 69 73 20 74 68 65 20 0a 5b 73 71 6c 69  or is the .[sqli
18250 74 65 33 5f 63 68 61 6e 67 65 73 20 7c 20 63 68  te3_changes | ch
18260 61 6e 67 65 20 63 6f 75 6e 74 65 72 5d 20 69 6e  ange counter] in
18270 63 72 65 6d 65 6e 74 65 64 2e 0a 54 68 65 20 65  cremented..The e
18280 78 63 65 70 74 69 6f 6e 61 6c 20 62 65 68 61 76  xceptional behav
18290 69 6f 72 73 20 64 65 66 69 6e 65 64 20 69 6e 20  iors defined in 
182a0 74 68 69 73 20 70 61 72 61 67 72 61 70 68 20 6d  this paragraph m
182b0 69 67 68 74 20 63 68 61 6e 67 65 20 0a 69 6e 20  ight change .in 
182c0 61 20 66 75 74 75 72 65 20 72 65 6c 65 61 73 65  a future release
182d0 2e 3c 2f 70 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e  .</p>.</dl>..<p>
182e0 5e 54 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 73  ^The algorithm s
182f0 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 20  pecified in the 
18300 4f 52 20 63 6c 61 75 73 65 20 6f 66 20 61 20 49  OR clause of a I
18310 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 0a  NSERT or UPDATE.
18320 6f 76 65 72 72 69 64 65 73 20 61 6e 79 20 61 6c  overrides any al
18330 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66 69 65  gorithm specifie
18340 64 20 69 6e 20 61 20 43 52 45 41 54 45 20 54 41  d in a CREATE TA
18350 42 4c 45 2e 0a 5e 49 66 20 6e 6f 20 61 6c 67 6f  BLE..^If no algo
18360 72 69 74 68 6d 20 69 73 20 73 70 65 63 69 66 69  rithm is specifi
18370 65 64 20 61 6e 79 77 68 65 72 65 2c 20 74 68 65  ed anywhere, the
18380 20 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d   ABORT algorithm
18390 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c   is used.</p>..<
183a0 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
183b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65 63 74 69 6f 6e 20 52 45 49 4e  ###.Section REIN
18400 44 45 58 20 72 65 69 6e 64 65 78 20 52 45 49 4e  DEX reindex REIN
18410 44 45 58 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  DEX..BubbleDiagr
18420 61 6d 20 72 65 69 6e 64 65 78 2d 73 74 6d 74 20  am reindex-stmt 
18430 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  1.</tcl>..<p>^Th
18440 65 20 52 45 49 4e 44 45 58 20 63 6f 6d 6d 61 6e  e REINDEX comman
18450 64 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 6c  d is used to del
18460 65 74 65 20 61 6e 64 20 72 65 63 72 65 61 74 65  ete and recreate
18470 20 69 6e 64 69 63 65 73 20 66 72 6f 6d 20 73 63   indices from sc
18480 72 61 74 63 68 2e 0a 54 68 69 73 20 69 73 20 75  ratch..This is u
18490 73 65 66 75 6c 20 77 68 65 6e 20 74 68 65 20 64  seful when the d
184a0 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 63  efinition of a c
184b0 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
184c0 65 20 68 61 73 20 63 68 61 6e 67 65 64 2e 0a 3c  e has changed..<
184d0 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 20 74 68 65 20  /p>..<p>^In the 
184e0 66 69 72 73 74 20 66 6f 72 6d 2c 20 61 6c 6c 20  first form, all 
184f0 69 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c 20 61  indices in all a
18500 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
18510 73 20 74 68 61 74 20 75 73 65 20 74 68 65 0a 6e  s that use the.n
18520 61 6d 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  amed collation s
18530 65 71 75 65 6e 63 65 20 61 72 65 20 72 65 63 72  equence are recr
18540 65 61 74 65 64 2e 20 5e 28 49 6e 20 74 68 65 20  eated. ^(In the 
18550 73 65 63 6f 6e 64 20 66 6f 72 6d 2c 20 69 66 20  second form, if 
18560 0a 3c 69 3e 26 23 39 31 3b 64 61 74 61 62 61 73  .<i>&#91;databas
18570 65 2d 6e 61 6d 65 2e 26 23 39 33 3b 74 61 62 6c  e-name.&#93;tabl
18580 65 2f 69 6e 64 65 78 2d 6e 61 6d 65 3c 2f 69 3e  e/index-name</i>
18590 20 69 64 65 6e 74 69 66 69 65 73 20 61 20 74 61   identifies a ta
185a0 62 6c 65 2c 0a 74 68 65 6e 20 61 6c 6c 20 69 6e  ble,.then all in
185b0 64 69 63 65 73 0a 61 73 73 6f 63 69 61 74 65 64  dices.associated
185c0 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65 20   with the table 
185d0 61 72 65 20 72 65 62 75 69 6c 74 2e 29 5e 20 5e  are rebuilt.)^ ^
185e0 49 66 20 61 6e 20 69 6e 64 65 78 20 69 73 20 69  If an index is i
185f0 64 65 6e 74 69 66 69 65 64 2c 20 74 68 65 6e 20  dentified, then 
18600 6f 6e 6c 79 0a 74 68 69 73 20 73 70 65 63 69 66  only.this specif
18610 69 63 20 69 6e 64 65 78 20 69 73 20 64 65 6c 65  ic index is dele
18620 74 65 64 20 61 6e 64 20 72 65 63 72 65 61 74 65  ted and recreate
18630 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20  d..</p>..<p>^If 
18640 6e 6f 20 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e  no <i>database-n
18650 61 6d 65 3c 2f 69 3e 20 69 73 20 73 70 65 63 69  ame</i> is speci
18660 66 69 65 64 20 61 6e 64 20 74 68 65 72 65 20 65  fied and there e
18670 78 69 73 74 73 20 62 6f 74 68 20 61 20 74 61 62  xists both a tab
18680 6c 65 20 6f 72 0a 69 6e 64 65 78 20 61 6e 64 20  le or.index and 
18690 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  a collation sequ
186a0 65 6e 63 65 20 6f 66 20 74 68 65 20 73 70 65 63  ence of the spec
186b0 69 66 69 65 64 20 6e 61 6d 65 2c 20 74 68 65 6e  ified name, then
186c0 20 69 6e 64 69 63 65 73 20 61 73 73 6f 63 69 61   indices associa
186d0 74 65 64 0a 77 69 74 68 20 74 68 65 20 63 6f 6c  ted.with the col
186e0 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
186f0 6f 6e 6c 79 20 61 72 65 20 72 65 63 6f 6e 73 74  only are reconst
18700 72 75 63 74 65 64 2e 20 54 68 69 73 20 61 6d 62  ructed. This amb
18710 69 67 75 69 74 79 20 6d 61 79 20 62 65 0a 64 69  iguity may be.di
18720 73 70 65 6c 6c 65 64 20 62 79 20 61 6c 77 61 79  spelled by alway
18730 73 20 73 70 65 63 69 66 79 69 6e 67 20 61 20 3c  s specifying a <
18740 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c  i>database-name<
18750 2f 69 3e 20 77 68 65 6e 20 72 65 69 6e 64 65 78  /i> when reindex
18760 69 6e 67 20 61 0a 73 70 65 63 69 66 69 63 20 74  ing a.specific t
18770 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 0a  able or index...
18780 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
18790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
187a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
187b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
187c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
187d0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 52 45  #####.Section RE
187e0 50 4c 41 43 45 20 72 65 70 6c 61 63 65 20 52 45  PLACE replace RE
187f0 50 4c 41 43 45 0a 0a 3c 2f 74 63 6c 3e 0a 0a 3c  PLACE..</tcl>..<
18800 70 3e 5e 54 68 65 20 52 45 50 4c 41 43 45 20 63  p>^The REPLACE c
18810 6f 6d 6d 61 6e 64 20 69 73 20 61 6e 20 61 6c 69  ommand is an ali
18820 61 73 20 66 6f 72 20 74 68 65 20 22 5b 4f 4e 20  as for the "[ON 
18830 43 4f 4e 46 4c 49 43 54 20 7c 20 49 4e 53 45 52  CONFLICT | INSER
18840 54 20 4f 52 20 52 45 50 4c 41 43 45 5d 22 0a 76  T OR REPLACE]".v
18850 61 72 69 61 6e 74 20 6f 66 20 74 68 65 20 5b 49  ariant of the [I
18860 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e 64 2e 20  NSERT] command. 
18870 20 0a 54 68 69 73 20 61 6c 69 61 73 20 69 73 20   .This alias is 
18880 70 72 6f 76 69 64 65 64 20 66 6f 72 20 63 6f 6d  provided for com
18890 70 61 74 69 62 69 6c 69 74 79 20 6f 74 68 65 72  patibility other
188a0 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e   SQL database en
188b0 67 69 6e 65 73 2e 20 20 53 65 65 20 74 68 65 20  gines.  See the 
188c0 0a 5b 49 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e  .[INSERT] comman
188d0 64 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  d documentation 
188e0 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
188f0 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 20  nformation.</p> 
18900 20 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23   ..<tcl>.#######
18910 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65 63 74 69 6f 6e  ########.Section
18960 20 53 45 4c 45 43 54 20 73 65 6c 65 63 74 20 7b   SELECT select {
18970 53 45 4c 45 43 54 20 71 75 65 72 79 7d 0a 0a 42  SELECT query}..B
18980 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 65 6c  ubbleDiagram sel
18990 65 63 74 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c  ect-stmt 1.Bubbl
189a0 65 44 69 61 67 72 61 6d 20 73 65 6c 65 63 74 2d  eDiagram select-
189b0 63 6f 72 65 0a 42 75 62 62 6c 65 44 69 61 67 72  core.BubbleDiagr
189c0 61 6d 20 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e  am result-column
189d0 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 6a  .BubbleDiagram j
189e0 6f 69 6e 2d 73 6f 75 72 63 65 0a 42 75 62 62 6c  oin-source.Bubbl
189f0 65 44 69 61 67 72 61 6d 20 73 69 6e 67 6c 65 2d  eDiagram single-
18a00 73 6f 75 72 63 65 0a 42 75 62 62 6c 65 44 69 61  source.BubbleDia
18a10 67 72 61 6d 20 6a 6f 69 6e 2d 6f 70 0a 42 75 62  gram join-op.Bub
18a20 62 6c 65 44 69 61 67 72 61 6d 20 6a 6f 69 6e 2d  bleDiagram join-
18a30 63 6f 6e 73 74 72 61 69 6e 74 0a 42 75 62 62 6c  constraint.Bubbl
18a40 65 44 69 61 67 72 61 6d 20 6f 72 64 65 72 69 6e  eDiagram orderin
18a50 67 2d 74 65 72 6d 0a 42 75 62 62 6c 65 44 69 61  g-term.BubbleDia
18a60 67 72 61 6d 20 63 6f 6d 70 6f 75 6e 64 2d 6f 70  gram compound-op
18a70 65 72 61 74 6f 72 0a 3c 2f 74 63 6c 3e 0a 0a 3c  erator.</tcl>..<
18a80 70 3e 54 68 65 20 53 45 4c 45 43 54 20 73 74 61  p>The SELECT sta
18a90 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74  tement is used t
18aa0 6f 20 71 75 65 72 79 20 74 68 65 20 64 61 74 61  o query the data
18ab0 62 61 73 65 2e 20 20 5e 54 68 65 0a 72 65 73 75  base.  ^The.resu
18ac0 6c 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 69  lt of a SELECT i
18ad0 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72  s zero or more r
18ae0 6f 77 73 20 6f 66 20 64 61 74 61 20 77 68 65 72  ows of data wher
18af0 65 20 65 61 63 68 20 72 6f 77 0a 68 61 73 20 61  e each row.has a
18b00 20 66 69 78 65 64 20 6e 75 6d 62 65 72 20 6f 66   fixed number of
18b10 20 63 6f 6c 75 6d 6e 73 2e 20 20 5e 54 68 65 20   columns.  ^The 
18b20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
18b30 73 20 69 6e 20 74 68 65 0a 72 65 73 75 6c 74 20  s in the.result 
18b40 69 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  is specified by 
18b50 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  the expression l
18b60 69 73 74 20 69 6e 20 62 65 74 77 65 65 6e 20 74  ist in between t
18b70 68 65 0a 53 45 4c 45 43 54 20 61 6e 64 20 46 52  he.SELECT and FR
18b80 4f 4d 20 6b 65 79 77 6f 72 64 73 2e 20 20 5e 41  OM keywords.  ^A
18b90 6e 79 20 61 72 62 69 74 72 61 72 79 20 65 78 70  ny arbitrary exp
18ba0 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65 20 75  ression can be u
18bb0 73 65 64 0a 61 73 20 61 20 72 65 73 75 6c 74 2e  sed.as a result.
18bc0 20 20 5e 49 66 20 61 20 72 65 73 75 6c 74 20 65    ^If a result e
18bd0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 7d 0a 68  xpression is }.h
18be0 64 5f 70 75 74 73 20 22 5b 4f 70 65 72 61 74 6f  d_puts "[Operato
18bf0 72 20 2a 5d 20 74 68 65 6e 20 61 6c 6c 20 63 6f  r *] then all co
18c00 6c 75 6d 6e 73 20 6f 66 20 61 6c 6c 20 74 61 62  lumns of all tab
18c10 6c 65 73 20 61 72 65 20 73 75 62 73 74 69 74 75  les are substitu
18c20 74 65 64 5c 6e 22 0a 68 64 5f 70 75 74 73 20 22  ted\n".hd_puts "
18c30 66 6f 72 20 74 68 61 74 20 6f 6e 65 20 65 78 70  for that one exp
18c40 72 65 73 73 69 6f 6e 2e 20 20 5e 28 49 66 20 74  ression.  ^(If t
18c50 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
18c60 20 74 68 65 20 6e 61 6d 65 20 6f 66 5c 6e 22 0a   the name of\n".
18c70 68 64 5f 70 75 74 73 20 22 61 20 74 61 62 6c 65  hd_puts "a table
18c80 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 5b 4f 70   followed by [Op
18c90 65 72 61 74 6f 72 20 2e 2a 5d 20 74 68 65 6e 20  erator .*] then 
18ca0 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  the result is al
18cb0 6c 20 63 6f 6c 75 6d 6e 73 5c 6e 22 0a 68 64 5f  l columns\n".hd_
18cc0 70 75 74 73 20 7b 69 6e 20 74 68 61 74 20 6f 6e  puts {in that on
18cd0 65 20 74 61 62 6c 65 2e 3c 2f 70 3e 29 5e 0a 0a  e table.</p>)^..
18ce0 3c 70 3e 5e 54 68 65 20 44 49 53 54 49 4e 43 54  <p>^The DISTINCT
18cf0 20 6b 65 79 77 6f 72 64 20 63 61 75 73 65 73 20   keyword causes 
18d00 61 20 73 75 62 73 65 74 20 6f 66 20 72 65 73 75  a subset of resu
18d10 6c 74 20 72 6f 77 73 20 74 6f 20 62 65 20 72 65  lt rows to be re
18d20 74 75 72 6e 65 64 2c 20 0a 69 6e 20 77 68 69 63  turned, .in whic
18d30 68 20 65 61 63 68 20 72 65 73 75 6c 74 20 72 6f  h each result ro
18d40 77 20 69 73 20 64 69 66 66 65 72 65 6e 74 2e 20  w is different. 
18d50 20 5e 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72   ^NULL values ar
18d60 65 20 6e 6f 74 20 74 72 65 61 74 65 64 20 61 73  e not treated as
18d70 20 0a 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20   .distinct from 
18d80 65 61 63 68 20 6f 74 68 65 72 2e 20 20 5e 54 68  each other.  ^Th
18d90 65 20 64 65 66 61 75 6c 74 20 62 65 68 61 76 69  e default behavi
18da0 6f 72 20 69 73 20 74 68 61 74 20 61 6c 6c 20 72  or is that all r
18db0 65 73 75 6c 74 20 72 6f 77 73 20 0a 62 65 20 72  esult rows .be r
18dc0 65 74 75 72 6e 65 64 2c 20 77 68 69 63 68 20 63  eturned, which c
18dd0 61 6e 20 62 65 20 6d 61 64 65 20 65 78 70 6c 69  an be made expli
18de0 63 69 74 20 77 69 74 68 20 74 68 65 20 6b 65 79  cit with the key
18df0 77 6f 72 64 20 41 4c 4c 2e 3c 2f 70 3e 0a 0a 3c  word ALL.</p>..<
18e00 70 3e 5e 54 68 65 20 71 75 65 72 79 20 69 73 20  p>^The query is 
18e10 65 78 65 63 75 74 65 64 20 61 67 61 69 6e 73 74  executed against
18e20 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62   one or more tab
18e30 6c 65 73 20 73 70 65 63 69 66 69 65 64 20 61 66  les specified af
18e40 74 65 72 0a 74 68 65 20 46 52 4f 4d 20 6b 65 79  ter.the FROM key
18e50 77 6f 72 64 2e 20 20 5e 49 66 20 6d 75 6c 74 69  word.  ^If multi
18e60 70 6c 65 20 74 61 62 6c 65 73 20 6e 61 6d 65 73  ple tables names
18e70 20 61 72 65 20 73 65 70 61 72 61 74 65 64 20 62   are separated b
18e80 79 20 63 6f 6d 6d 61 73 2c 0a 74 68 65 6e 20 74  y commas,.then t
18e90 68 65 20 71 75 65 72 79 20 69 73 20 61 67 61 69  he query is agai
18ea0 6e 73 74 20 74 68 65 20 63 72 6f 73 73 20 6a 6f  nst the cross jo
18eb0 69 6e 20 6f 66 20 74 68 65 20 76 61 72 69 6f 75  in of the variou
18ec0 73 20 74 61 62 6c 65 73 2e 0a 5e 54 68 65 20 66  s tables..^The f
18ed0 75 6c 6c 20 53 51 4c 2d 39 32 20 6a 6f 69 6e 20  ull SQL-92 join 
18ee0 73 79 6e 74 61 78 20 63 61 6e 20 61 6c 73 6f 20  syntax can also 
18ef0 62 65 20 75 73 65 64 20 74 6f 20 73 70 65 63 69  be used to speci
18f00 66 79 20 6a 6f 69 6e 73 2e 0a 5e 41 20 73 75 62  fy joins..^A sub
18f10 2d 71 75 65 72 79 0a 69 6e 20 70 61 72 65 6e 74  -query.in parent
18f20 68 65 73 65 73 20 6d 61 79 20 62 65 20 73 75 62  heses may be sub
18f30 73 74 69 74 75 74 65 64 20 66 6f 72 20 61 6e 79  stituted for any
18f40 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74   table name in t
18f50 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e 0a  he FROM clause..
18f60 5e 54 68 65 20 65 6e 74 69 72 65 20 46 52 4f 4d  ^The entire FROM
18f70 20 63 6c 61 75 73 65 20 6d 61 79 20 62 65 20 6f   clause may be o
18f80 6d 69 74 74 65 64 2c 20 69 6e 20 77 68 69 63 68  mitted, in which
18f90 20 63 61 73 65 20 74 68 65 20 72 65 73 75 6c 74   case the result
18fa0 20 69 73 20 61 0a 73 69 6e 67 6c 65 20 72 6f 77   is a.single row
18fb0 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 74   consisting of t
18fc0 68 65 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65  he values of the
18fd0 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
18fe0 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  ..</p>..<p>^The 
18ff0 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 61 6e  WHERE clause can
19000 20 62 65 20 75 73 65 64 20 74 6f 20 6c 69 6d 69   be used to limi
19010 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
19020 72 6f 77 73 20 6f 76 65 72 0a 77 68 69 63 68 20  rows over.which 
19030 74 68 65 20 71 75 65 72 79 20 6f 70 65 72 61 74  the query operat
19040 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  es.</p>..<p>^The
19050 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
19060 20 63 61 75 73 65 73 20 6f 6e 65 20 6f 72 20 6d   causes one or m
19070 6f 72 65 20 72 6f 77 73 20 6f 66 20 74 68 65 20  ore rows of the 
19080 72 65 73 75 6c 74 20 74 6f 0a 62 65 20 63 6f 6d  result to.be com
19090 62 69 6e 65 64 20 69 6e 74 6f 20 61 20 73 69 6e  bined into a sin
190a0 67 6c 65 20 72 6f 77 20 6f 66 20 6f 75 74 70 75  gle row of outpu
190b0 74 2e 20 20 54 68 69 73 20 69 73 20 65 73 70 65  t.  This is espe
190c0 63 69 61 6c 6c 79 20 75 73 65 66 75 6c 0a 77 68  cially useful.wh
190d0 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  en the result co
190e0 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65  ntains aggregate
190f0 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 5e 54 68   functions.  ^Th
19100 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e  e expressions in
19110 0a 74 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c  .the GROUP BY cl
19120 61 75 73 65 20 64 6f 20 3c 65 6d 3e 6e 6f 74 3c  ause do <em>not<
19130 2f 65 6d 3e 20 68 61 76 65 20 74 6f 20 62 65 20  /em> have to be 
19140 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74  expressions that
19150 0a 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 72  .appear in the r
19160 65 73 75 6c 74 2e 20 20 5e 54 68 65 20 48 41 56  esult.  ^The HAV
19170 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 73 69  ING clause is si
19180 6d 69 6c 61 72 20 74 6f 20 57 48 45 52 45 20 65  milar to WHERE e
19190 78 63 65 70 74 0a 74 68 61 74 20 48 41 56 49 4e  xcept.that HAVIN
191a0 47 20 61 70 70 6c 69 65 73 20 61 66 74 65 72 20  G applies after 
191b0 67 72 6f 75 70 69 6e 67 20 68 61 73 20 6f 63 63  grouping has occ
191c0 75 72 72 65 64 2e 20 20 5e 54 68 65 20 48 41 56  urred.  ^The HAV
191d0 49 4e 47 20 65 78 70 72 65 73 73 69 6f 6e 0a 6d  ING expression.m
191e0 61 79 20 72 65 66 65 72 20 74 6f 20 76 61 6c 75  ay refer to valu
191f0 65 73 2c 20 65 76 65 6e 20 61 67 67 72 65 67 61  es, even aggrega
19200 74 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68  te functions, th
19210 61 74 20 61 72 65 20 6e 6f 74 20 69 6e 20 74 68  at are not in th
19220 65 20 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c  e result.</p>..<
19230 70 3e 5e 54 68 65 20 4f 52 44 45 52 20 42 59 20  p>^The ORDER BY 
19240 63 6c 61 75 73 65 20 63 61 75 73 65 73 20 74 68  clause causes th
19250 65 20 6f 75 74 70 75 74 20 72 6f 77 73 20 74 6f  e output rows to
19260 20 62 65 20 73 6f 72 74 65 64 2e 20 20 0a 5e 54   be sorted.  .^T
19270 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 4f  he argument to O
19280 52 44 45 52 20 42 59 20 69 73 20 61 20 6c 69 73  RDER BY is a lis
19290 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
192a0 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
192b0 73 20 74 68 65 0a 6b 65 79 20 66 6f 72 20 74 68  s the.key for th
192c0 65 20 73 6f 72 74 2e 20 20 5e 54 68 65 20 65 78  e sort.  ^The ex
192d0 70 72 65 73 73 69 6f 6e 73 20 64 6f 20 6e 6f 74  pressions do not
192e0 20 68 61 76 65 20 74 6f 20 62 65 20 70 61 72 74   have to be part
192f0 20 6f 66 20 74 68 65 0a 72 65 73 75 6c 74 20 66   of the.result f
19300 6f 72 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45  or a simple SELE
19310 43 54 2c 20 62 75 74 20 69 6e 20 61 20 63 6f 6d  CT, but in a com
19320 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 65 61 63  pound SELECT eac
19330 68 20 73 6f 72 74 0a 65 78 70 72 65 73 73 69 6f  h sort.expressio
19340 6e 20 6d 75 73 74 20 65 78 61 63 74 6c 79 20 6d  n must exactly m
19350 61 74 63 68 20 6f 6e 65 20 6f 66 20 74 68 65 20  atch one of the 
19360 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20  result columns. 
19370 20 5e 45 61 63 68 0a 73 6f 72 74 20 65 78 70 72   ^Each.sort expr
19380 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 6f 70  ession may be op
19390 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65  tionally followe
193a0 64 20 62 79 20 61 20 43 4f 4c 4c 41 54 45 20 6b  d by a COLLATE k
193b0 65 79 77 6f 72 64 20 61 6e 64 0a 74 68 65 20 6e  eyword and.the n
193c0 61 6d 65 20 6f 66 20 61 20 63 6f 6c 6c 61 74 69  ame of a collati
193d0 6e 67 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 64  ng function used
193e0 20 66 6f 72 20 6f 72 64 65 72 69 6e 67 20 74 65   for ordering te
193f0 78 74 20 61 6e 64 2f 6f 72 0a 6b 65 79 77 6f 72  xt and/or.keywor
19400 64 73 20 41 53 43 20 6f 72 20 44 45 53 43 20 74  ds ASC or DESC t
19410 6f 20 73 70 65 63 69 66 79 20 74 68 65 20 73 6f  o specify the so
19420 72 74 20 6f 72 64 65 72 2e 3c 2f 70 3e 0a 0a 3c  rt order.</p>..<
19430 70 3e 45 61 63 68 20 74 65 72 6d 20 6f 66 20 61  p>Each term of a
19440 6e 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  n ORDER BY expre
19450 73 73 69 6f 6e 20 69 73 20 70 72 6f 63 65 73 73  ssion is process
19460 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f  ed as follows:</
19470 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e  p>..<ol>.<li><p>
19480 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20 42 59  ^If the ORDER BY
19490 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
194a0 20 63 6f 6e 73 74 61 6e 74 20 69 6e 74 65 67 65   constant intege
194b0 72 20 4b 20 74 68 65 6e 20 74 68 65 0a 6f 75 74  r K then the.out
194c0 70 75 74 20 69 73 20 6f 72 64 65 72 65 64 20 62  put is ordered b
194d0 79 20 74 68 65 20 4b 2d 74 68 20 63 6f 6c 75 6d  y the K-th colum
194e0 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  n of the result 
194f0 73 65 74 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 6c  set.</p></li>.<l
19500 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44  i><p>^If the ORD
19510 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
19520 20 69 73 20 61 6e 20 69 64 65 6e 74 69 66 69 65   is an identifie
19530 72 20 61 6e 64 20 6f 6e 65 20 6f 66 20 74 68 65  r and one of the
19540 0a 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73 20  .output columns 
19550 68 61 73 20 61 6e 20 61 6c 69 61 73 20 62 79 20  has an alias by 
19560 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2c 20 74  the same name, t
19570 68 65 6e 20 74 68 65 20 6f 75 74 70 75 74 20 69  hen the output i
19580 73 0a 6f 72 64 65 72 65 64 20 62 79 20 74 68 65  s.ordered by the
19590 20 69 64 65 6e 74 69 66 69 65 64 20 63 6f 6c 75   identified colu
195a0 6d 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 6c 69  mn.</p></li>.<li
195b0 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20  ><p>^Otherwise, 
195c0 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70  the ORDER BY exp
195d0 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75  ression is evalu
195e0 61 74 65 64 20 61 6e 64 20 74 68 65 20 6f 75 74  ated and the out
195f0 70 75 74 20 0a 69 73 20 6f 72 64 65 72 65 64 20  put .is ordered 
19600 62 79 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  by the value of 
19610 74 68 61 74 20 65 78 70 72 65 73 73 69 6f 6e 2e  that expression.
19620 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a  </p></li>.</ol>.
19630 0a 3c 70 3e 5e 49 6e 20 61 20 63 6f 6d 70 6f 75  .<p>^In a compou
19640 6e 64 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  nd SELECT statem
19650 65 6e 74 2c 20 74 68 65 20 74 68 69 72 64 20 4f  ent, the third O
19660 52 44 45 52 20 42 59 20 6d 61 74 63 68 69 6e 67  RDER BY matching
19670 20 72 75 6c 65 0a 72 65 71 75 69 72 65 73 20 74   rule.requires t
19680 68 61 74 20 74 68 65 20 65 78 70 72 65 73 73 69  hat the expressi
19690 6f 6e 20 62 65 20 69 64 65 6e 74 69 63 61 6c 20  on be identical 
196a0 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 63 6f  to one of the co
196b0 6c 75 6d 6e 73 20 69 6e 0a 74 68 65 20 72 65 73  lumns in.the res
196c0 75 6c 74 20 73 65 74 2e 20 20 5e 28 54 68 65 20  ult set.  ^(The 
196d0 74 68 72 65 65 20 72 75 6c 65 73 20 61 72 65 20  three rules are 
196e0 66 69 72 73 74 20 61 70 70 6c 69 65 64 20 74 6f  first applied to
196f0 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 0a 53   the left-most.S
19700 45 4c 45 43 54 20 69 6e 20 74 68 65 20 63 6f 6d  ELECT in the com
19710 70 6f 75 6e 64 2e 20 20 49 66 20 61 20 6d 61 74  pound.  If a mat
19720 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
19730 20 73 65 61 72 63 68 20 73 74 6f 70 73 2e 20 20   search stops.  
19740 4f 74 68 65 72 77 69 73 65 2c 0a 74 68 65 20 6e  Otherwise,.the n
19750 65 78 74 20 53 45 4c 45 43 54 20 74 6f 20 74 68  ext SELECT to th
19760 65 20 72 69 67 68 74 20 69 73 20 74 72 69 65 64  e right is tried
19770 2e 20 20 54 68 69 73 20 63 6f 6e 74 69 6e 75 65  .  This continue
19780 73 20 75 6e 74 69 6c 20 61 20 6d 61 74 63 68 0a  s until a match.
19790 69 73 20 66 6f 75 6e 64 2e 29 5e 20 20 5e 45 61  is found.)^  ^Ea
197a0 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20 4f  ch term of the O
197b0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
197c0 73 20 70 72 6f 63 65 73 73 65 64 20 73 65 70 61  s processed sepa
197d0 72 61 74 65 6c 79 20 0a 61 6e 64 20 6d 61 79 20  rately .and may 
197e0 63 6f 6d 65 20 66 72 6f 6d 20 64 69 66 66 65 72  come from differ
197f0 65 6e 74 20 53 45 4c 45 43 54 20 73 74 61 74 65  ent SELECT state
19800 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 6d  ments in the com
19810 70 6f 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  pound.</p>..<p>^
19820 54 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  The LIMIT clause
19830 20 70 6c 61 63 65 73 20 61 6e 20 75 70 70 65 72   places an upper
19840 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75   bound on the nu
19850 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a 72 65 74  mber of rows.ret
19860 75 72 6e 65 64 20 69 6e 20 74 68 65 20 72 65 73  urned in the res
19870 75 6c 74 2e 20 20 5e 41 20 6e 65 67 61 74 69 76  ult.  ^A negativ
19880 65 20 4c 49 4d 49 54 20 69 6e 64 69 63 61 74 65  e LIMIT indicate
19890 73 20 6e 6f 20 75 70 70 65 72 20 62 6f 75 6e 64  s no upper bound
198a0 2e 0a 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  ..^The optional 
198b0 4f 46 46 53 45 54 20 66 6f 6c 6c 6f 77 69 6e 67  OFFSET following
198c0 20 4c 49 4d 49 54 20 73 70 65 63 69 66 69 65 73   LIMIT specifies
198d0 20 68 6f 77 20 6d 61 6e 79 0a 72 6f 77 73 20 74   how many.rows t
198e0 6f 20 73 6b 69 70 20 61 74 20 74 68 65 20 62 65  o skip at the be
198f0 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 72  ginning of the r
19900 65 73 75 6c 74 20 73 65 74 2e 0a 5e 49 6e 20 61  esult set..^In a
19910 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 2c   compound query,
19920 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73   the LIMIT claus
19930 65 20 6d 61 79 20 6f 6e 6c 79 20 61 70 70 65 61  e may only appea
19940 72 20 6f 6e 20 74 68 65 0a 66 69 6e 61 6c 20 53  r on the.final S
19950 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
19960 0a 5e 54 68 65 20 6c 69 6d 69 74 20 69 73 20 61  .^The limit is a
19970 70 70 6c 69 65 64 20 74 6f 20 74 68 65 20 65 6e  pplied to the en
19980 74 69 72 65 20 71 75 65 72 79 20 6e 6f 74 0a 74  tire query not.t
19990 6f 20 74 68 65 20 69 6e 64 69 76 69 64 75 61 6c  o the individual
199a0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
199b0 74 20 74 6f 20 77 68 69 63 68 20 69 74 20 69 73  t to which it is
199c0 20 61 74 74 61 63 68 65 64 2e 0a 5e 4e 6f 74 65   attached..^Note
199d0 20 74 68 61 74 20 69 66 20 74 68 65 20 4f 46 46   that if the OFF
199e0 53 45 54 20 6b 65 79 77 6f 72 64 20 69 73 20 75  SET keyword is u
199f0 73 65 64 20 69 6e 20 74 68 65 20 4c 49 4d 49 54  sed in the LIMIT
19a00 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68   clause, then th
19a10 65 0a 6c 69 6d 69 74 20 69 73 20 74 68 65 20 66  e.limit is the f
19a20 69 72 73 74 20 6e 75 6d 62 65 72 20 61 6e 64 20  irst number and 
19a30 74 68 65 20 6f 66 66 73 65 74 20 69 73 20 74 68  the offset is th
19a40 65 20 73 65 63 6f 6e 64 20 6e 75 6d 62 65 72 2e  e second number.
19a50 20 20 5e 49 66 20 61 0a 63 6f 6d 6d 61 20 69 73    ^If a.comma is
19a60 20 75 73 65 64 20 69 6e 73 74 65 61 64 20 6f 66   used instead of
19a70 20 74 68 65 20 4f 46 46 53 45 54 20 6b 65 79 77   the OFFSET keyw
19a80 6f 72 64 2c 20 74 68 65 6e 20 74 68 65 20 6f 66  ord, then the of
19a90 66 73 65 74 20 69 73 20 74 68 65 0a 66 69 72 73  fset is the.firs
19aa0 74 20 6e 75 6d 62 65 72 20 61 6e 64 20 74 68 65  t number and the
19ab0 20 6c 69 6d 69 74 20 69 73 20 74 68 65 20 73 65   limit is the se
19ac0 63 6f 6e 64 20 6e 75 6d 62 65 72 2e 20 20 54 68  cond number.  Th
19ad0 69 73 20 73 65 65 6d 69 6e 67 0a 63 6f 6e 74 72  is seeming.contr
19ae0 61 64 69 74 69 6f 6e 20 69 73 20 69 6e 74 65 6e  adition is inten
19af0 74 69 6f 6e 61 6c 20 2d 20 69 74 20 6d 61 78 69  tional - it maxi
19b00 6d 69 7a 65 73 20 63 6f 6d 70 61 74 69 62 69 6c  mizes compatibil
19b10 69 74 79 20 77 69 74 68 20 6c 65 67 61 63 79 0a  ity with legacy.
19b20 53 51 4c 20 64 61 74 61 62 61 73 65 20 73 79 73  SQL database sys
19b30 74 65 6d 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e  tems..</p>..<p>^
19b40 41 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  A compound SELEC
19b50 54 20 69 73 20 66 6f 72 6d 65 64 20 66 72 6f 6d  T is formed from
19b60 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 73 69 6d   two or more sim
19b70 70 6c 65 20 53 45 4c 45 43 54 73 20 63 6f 6e 6e  ple SELECTs conn
19b80 65 63 74 65 64 0a 62 79 20 6f 6e 65 20 6f 66 20  ected.by one of 
19b90 74 68 65 20 6f 70 65 72 61 74 6f 72 73 20 55 4e  the operators UN
19ba0 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c 2c 20  ION, UNION ALL, 
19bb0 49 4e 54 45 52 53 45 43 54 2c 20 6f 72 20 45 58  INTERSECT, or EX
19bc0 43 45 50 54 2e 20 20 5e 49 6e 0a 61 20 63 6f 6d  CEPT.  ^In.a com
19bd0 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20 61 6c  pound SELECT, al
19be0 6c 20 74 68 65 20 63 6f 6e 73 74 69 74 75 65 6e  l the constituen
19bf0 74 20 53 45 4c 45 43 54 73 20 6d 75 73 74 20 73  t SELECTs must s
19c00 70 65 63 69 66 79 20 74 68 65 0a 73 61 6d 65 20  pecify the.same 
19c10 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74  number of result
19c20 20 63 6f 6c 75 6d 6e 73 2e 20 20 5e 54 68 65 72   columns.  ^Ther
19c30 65 20 6d 61 79 20 62 65 20 6f 6e 6c 79 20 61 20  e may be only a 
19c40 73 69 6e 67 6c 65 20 4f 52 44 45 52 20 42 59 0a  single ORDER BY.
19c50 63 6c 61 75 73 65 20 61 74 20 74 68 65 20 65 6e  clause at the en
19c60 64 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e  d of the compoun
19c70 64 20 53 45 4c 45 43 54 2e 20 20 5e 54 68 65 20  d SELECT.  ^The 
19c80 55 4e 49 4f 4e 20 61 6e 64 20 55 4e 49 4f 4e 20  UNION and UNION 
19c90 41 4c 4c 0a 6f 70 65 72 61 74 6f 72 73 20 63 6f  ALL.operators co
19ca0 6d 62 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74  mbine the result
19cb0 73 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 73  s of the SELECTs
19cc0 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 61 6e   to the right an
19cd0 64 20 6c 65 66 74 20 69 6e 74 6f 0a 61 20 73 69  d left into.a si
19ce0 6e 67 6c 65 20 62 69 67 20 74 61 62 6c 65 2e 20  ngle big table. 
19cf0 20 5e 54 68 65 20 64 69 66 66 65 72 65 6e 63 65   ^The difference
19d00 20 69 73 20 74 68 61 74 20 69 6e 20 55 4e 49 4f   is that in UNIO
19d10 4e 20 61 6c 6c 20 72 65 73 75 6c 74 20 72 6f 77  N all result row
19d20 73 0a 61 72 65 20 64 69 73 74 69 6e 63 74 20 77  s.are distinct w
19d30 68 65 72 65 20 69 6e 20 55 4e 49 4f 4e 20 41 4c  here in UNION AL
19d40 4c 20 74 68 65 72 65 20 6d 61 79 20 62 65 20 64  L there may be d
19d50 75 70 6c 69 63 61 74 65 73 2e 0a 5e 54 68 65 20  uplicates..^The 
19d60 49 4e 54 45 52 53 45 43 54 20 6f 70 65 72 61 74  INTERSECT operat
19d70 6f 72 20 74 61 6b 65 73 20 74 68 65 20 69 6e 74  or takes the int
19d80 65 72 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65  ersection of the
19d90 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 0a   results of the.
19da0 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 53  left and right S
19db0 45 4c 45 43 54 73 2e 20 20 5e 45 58 43 45 50 54  ELECTs.  ^EXCEPT
19dc0 20 74 61 6b 65 73 20 74 68 65 20 72 65 73 75 6c   takes the resul
19dd0 74 20 6f 66 20 6c 65 66 74 20 53 45 4c 45 43 54  t of left SELECT
19de0 20 61 66 74 65 72 0a 72 65 6d 6f 76 69 6e 67 20   after.removing 
19df0 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
19e00 68 65 20 72 69 67 68 74 20 53 45 4c 45 43 54 2e  he right SELECT.
19e10 20 20 5e 57 68 65 6e 20 74 68 72 65 65 20 6f 72    ^When three or
19e20 20 6d 6f 72 65 20 53 45 4c 45 43 54 73 0a 61 72   more SELECTs.ar
19e30 65 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e 74 6f  e connected into
19e40 20 61 20 63 6f 6d 70 6f 75 6e 64 2c 20 74 68 65   a compound, the
19e50 79 20 67 72 6f 75 70 20 66 72 6f 6d 20 6c 65 66  y group from lef
19e60 74 20 74 6f 20 72 69 67 68 74 2e 3c 2f 70 3e 0a  t to right.</p>.
19e70 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
19e80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65 63 74 69 6f 6e 20 55  ######.Section U
19ed0 50 44 41 54 45 20 75 70 64 61 74 65 20 7b 55 50  PDATE update {UP
19ee0 44 41 54 45 20 2a 55 50 44 41 54 45 73 7d 0a 0a  DATE *UPDATEs}..
19ef0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 75 70  BubbleDiagram up
19f00 64 61 74 65 2d 73 74 6d 74 20 31 0a 42 75 62 62  date-stmt 1.Bubb
19f10 6c 65 44 69 61 67 72 61 6d 20 71 75 61 6c 69 66  leDiagram qualif
19f20 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a 3c  ied-table-name.<
19f30 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 55  /tcl>..<p>^The U
19f40 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
19f50 69 73 20 75 73 65 64 20 74 6f 20 63 68 61 6e 67  is used to chang
19f60 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 63  e the value of c
19f70 6f 6c 75 6d 6e 73 20 69 6e 20 0a 73 65 6c 65 63  olumns in .selec
19f80 74 65 64 20 72 6f 77 73 20 6f 66 20 61 20 74 61  ted rows of a ta
19f90 62 6c 65 2e 20 20 5e 45 61 63 68 20 61 73 73 69  ble.  ^Each assi
19fa0 67 6e 6d 65 6e 74 20 69 6e 20 61 6e 20 55 50 44  gnment in an UPD
19fb0 41 54 45 20 73 70 65 63 69 66 69 65 73 0a 61 20  ATE specifies.a 
19fc0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74 6f 20 74  column name to t
19fd0 68 65 20 6c 65 66 74 20 6f 66 20 74 68 65 20 65  he left of the e
19fe0 71 75 61 6c 73 20 73 69 67 6e 20 61 6e 64 20 61  quals sign and a
19ff0 6e 20 61 72 62 69 74 72 61 72 79 20 65 78 70 72  n arbitrary expr
1a000 65 73 73 69 6f 6e 0a 74 6f 20 74 68 65 20 72 69  ession.to the ri
1a010 67 68 74 2e 20 20 5e 54 68 65 20 65 78 70 72 65  ght.  ^The expre
1a020 73 73 69 6f 6e 73 20 6d 61 79 20 75 73 65 20 74  ssions may use t
1a030 68 65 20 76 61 6c 75 65 73 20 6f 66 20 6f 74 68  he values of oth
1a040 65 72 20 63 6f 6c 75 6d 6e 73 2e 0a 5e 41 6c 6c  er columns..^All
1a050 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65   expressions are
1a060 20 65 76 61 6c 75 61 74 65 64 20 62 65 66 6f 72   evaluated befor
1a070 65 20 61 6e 79 20 61 73 73 69 67 6e 6d 65 6e 74  e any assignment
1a080 73 20 61 72 65 20 6d 61 64 65 2e 0a 5e 41 20 57  s are made..^A W
1a090 48 45 52 45 20 63 6c 61 75 73 65 20 63 61 6e 20  HERE clause can 
1a0a0 62 65 20 75 73 65 64 20 74 6f 20 72 65 73 74 72  be used to restr
1a0b0 69 63 74 20 77 68 69 63 68 20 72 6f 77 73 20 61  ict which rows a
1a0c0 72 65 20 75 70 64 61 74 65 64 2e 3c 2f 70 3e 0a  re updated.</p>.
1a0d0 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61  .<p>^The optiona
1a0e0 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73  l conflict-claus
1a0f0 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 73 70 65  e allows the spe
1a100 63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20 61 6e  cification of an
1a110 20 61 6c 74 65 72 6e 61 74 69 76 65 0a 63 6f 6e   alternative.con
1a120 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74  straint conflict
1a130 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
1a140 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72  rithm to use dur
1a150 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 55 50 44  ing this one UPD
1a160 41 54 45 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65 65  ATE command..See
1a170 20 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74   the section tit
1a180 6c 65 64 0a 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54  led.[ON CONFLICT
1a190 5d 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  ] for additional
1a1a0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70   information.</p
1a1b0 3e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63 74 69  >..<h3>Restricti
1a1c0 6f 6e 73 20 6f 6e 20 55 50 44 41 54 45 20 53 74  ons on UPDATE St
1a1d0 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e 20  atements Within 
1a1e0 43 52 45 41 54 45 20 54 52 49 47 47 45 52 3c 2f  CREATE TRIGGER</
1a1f0 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 72 65 20 61  h3>..<p>^There a
1a200 72 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 73 79  re additional sy
1a210 6e 74 61 78 20 72 65 73 74 72 69 63 74 69 6f 6e  ntax restriction
1a220 73 20 6f 6e 20 55 50 44 41 54 45 20 73 74 61 74  s on UPDATE stat
1a230 65 6d 65 6e 74 73 20 74 68 61 74 0a 6f 63 63 75  ements that.occu
1a240 72 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  r within the bod
1a250 79 20 6f 66 20 61 20 5b 43 52 45 41 54 45 20 54  y of a [CREATE T
1a260 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e  RIGGER] statemen
1a270 74 2e 20 20 5e 54 68 65 20 3c 69 3e 74 61 62 6c  t.  ^The <i>tabl
1a280 65 2d 6e 61 6d 65 3c 2f 69 3e 0a 6f 66 20 74 68  e-name</i>.of th
1a290 65 20 55 50 44 41 54 45 20 6d 75 73 74 20 62 65  e UPDATE must be
1a2a0 20 75 6e 71 75 61 6c 69 66 69 65 64 2e 20 0a 5e   unqualified. .^
1a2b0 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c  (In other words,
1a2c0 20 74 68 65 20 3c 69 3e 64 61 74 61 62 61 73 65   the <i>database
1a2d0 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62  -name</i><b>.</b
1a2e0 3e 20 70 72 65 66 69 78 20 0a 6f 6e 20 74 68 65  > prefix .on the
1a2f0 20 74 61 62 6c 65 20 6e 61 6d 65 20 6f 66 20 74   table name of t
1a300 68 65 20 55 50 44 41 54 45 20 69 73 20 6e 6f 74  he UPDATE is not
1a310 20 61 6c 6c 6f 77 65 64 20 77 69 74 68 69 6e 20   allowed within 
1a320 74 72 69 67 67 65 72 73 2e 29 5e 0a 5e 54 68 65  triggers.)^.^The
1a330 20 74 61 62 6c 65 20 74 6f 20 62 65 20 75 70 64   table to be upd
1a340 61 74 65 64 20 6d 75 73 74 20 62 65 20 69 6e 20  ated must be in 
1a350 74 68 65 20 73 61 6d 65 0a 64 61 74 61 62 61 73  the same.databas
1a360 65 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74  e as the table t
1a370 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67  o which the trig
1a380 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64 2e  ger is attached.
1a390 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 49 4e  </p>..<p>^The IN
1a3a0 44 45 58 45 44 20 42 59 20 61 6e 64 20 4e 4f 54  DEXED BY and NOT
1a3b0 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 73   INDEXED clauses
1a3c0 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64   are not allowed
1a3d0 20 6f 6e 20 55 50 44 41 54 45 0a 73 74 61 74 65   on UPDATE.state
1a3e0 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69  ments within tri
1a3f0 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ggers.</p>..<p>^
1a400 54 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  The LIMIT clause
1a410 20 66 6f 72 20 55 50 44 41 54 45 20 69 73 20 75   for UPDATE is u
1a420 6e 73 75 70 70 6f 72 74 65 64 20 77 69 74 68 69  nsupported withi
1a430 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a  n triggers.</p>.
1a440 0a 3c 68 33 3e 4f 70 74 69 6f 6e 61 6c 20 4c 49  .<h3>Optional LI
1a450 4d 49 54 20 61 6e 64 20 4f 52 44 45 52 20 42 59  MIT and ORDER BY
1a460 20 43 6c 61 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c   Clauses</h3>..<
1a470 70 3e 5e 28 49 66 20 53 51 4c 69 74 65 20 69 73  p>^(If SQLite is
1a480 20 62 75 69 6c 74 20 77 69 74 68 20 74 68 65 20   built with the 
1a490 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55  [SQLITE_ENABLE_U
1a4a0 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d  PDATE_DELETE_LIM
1a4b0 49 54 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  IT].compile-time
1a4c0 20 6f 70 74 69 6f 6e 20 74 68 65 6e 20 74 68 65   option then the
1a4d0 20 73 79 6e 74 61 78 20 6f 66 20 74 68 65 20 55   syntax of the U
1a4e0 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
1a4f0 69 73 20 65 78 74 65 6e 64 65 64 0a 77 69 74 68  is extended.with
1a500 20 6f 70 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20   optional ORDER 
1a510 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61  BY and LIMIT cla
1a520 75 73 65 73 29 5e 20 61 73 20 66 6f 6c 6c 6f 77  uses)^ as follow
1a530 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62  s:</p>..<tcl>Bub
1a540 62 6c 65 44 69 61 67 72 61 6d 20 75 70 64 61 74  bleDiagram updat
1a550 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f  e-stmt-limited</
1a560 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70  tcl>..<p>^The op
1a570 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 63 6c 61  tional LIMIT cla
1a580 75 73 65 20 63 61 6e 20 62 65 20 75 73 65 64 20  use can be used 
1a590 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d  to limit the num
1a5a0 62 65 72 20 6f 66 0a 72 6f 77 73 20 6d 6f 64 69  ber of.rows modi
1a5b0 66 65 64 2c 20 61 6e 64 20 74 68 65 72 65 62 79  fed, and thereby
1a5c0 20 6c 69 6d 69 74 20 74 68 65 20 73 69 7a 65 20   limit the size 
1a5d0 6f 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  of the transacti
1a5e0 6f 6e 2e 0a 5e 54 68 65 20 4f 52 44 45 52 20 42  on..^The ORDER B
1a5f0 59 20 63 6c 61 75 73 65 20 6f 6e 20 61 6e 20 55  Y clause on an U
1a600 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 0a  PDATE statement.
1a610 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20  is used only to 
1a620 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 20  determine which 
1a630 72 6f 77 73 20 66 61 6c 6c 0a 77 69 74 68 69 6e  rows fall.within
1a640 20 74 68 65 20 4c 49 4d 49 54 2e 20 20 5e 54 68   the LIMIT.  ^Th
1a650 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68  e order in which
1a660 20 72 6f 77 73 20 61 72 65 20 6d 6f 64 69 66 69   rows are modifi
1a670 65 64 20 69 73 20 61 72 62 69 74 72 61 72 79 0a  ed is arbitrary.
1a680 61 6e 64 20 69 73 20 6e 6f 74 20 64 65 74 65 72  and is not deter
1a690 6d 69 6e 65 64 20 62 79 20 74 68 65 20 4f 52 44  mined by the ORD
1a6a0 45 52 20 42 59 20 63 6c 61 75 73 65 2e 3c 2f 70  ER BY clause.</p
1a6b0 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
1a6c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65 63 74 69 6f 6e 20  #######.Section 
1a710 56 41 43 55 55 4d 20 76 61 63 75 75 6d 20 56 41  VACUUM vacuum VA
1a720 43 55 55 4d 0a 0a 42 75 62 62 6c 65 44 69 61 67  CUUM..BubbleDiag
1a730 72 61 6d 20 76 61 63 75 75 6d 2d 73 74 6d 74 20  ram vacuum-stmt 
1a740 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 57 68  1.</tcl>..<p>^Wh
1a750 65 6e 20 61 6e 20 6f 62 6a 65 63 74 20 28 74 61  en an object (ta
1a760 62 6c 65 2c 20 69 6e 64 65 78 2c 20 74 72 69 67  ble, index, trig
1a770 67 65 72 2c 20 6f 72 20 76 69 65 77 29 20 69 73  ger, or view) is
1a780 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 74 68   dropped from th
1a790 65 20 0a 64 61 74 61 62 61 73 65 2c 20 69 74 20  e .database, it 
1a7a0 6c 65 61 76 65 73 20 62 65 68 69 6e 64 20 65 6d  leaves behind em
1a7b0 70 74 79 20 73 70 61 63 65 2e 20 0a 5e 54 68 69  pty space. .^Thi
1a7c0 73 20 65 6d 70 74 79 20 73 70 61 63 65 20 77 69  s empty space wi
1a7d0 6c 6c 20 62 65 20 72 65 75 73 65 64 20 74 68 65  ll be reused the
1a7e0 20 6e 65 78 74 20 74 69 6d 65 20 6e 65 77 20 69   next time new i
1a7f0 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 0a 61 64  nformation is.ad
1a800 64 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62  ded to the datab
1a810 61 73 65 2e 20 20 42 75 74 20 69 6e 20 74 68 65  ase.  But in the
1a820 20 6d 65 61 6e 74 69 6d 65 2c 20 74 68 65 20 64   meantime, the d
1a830 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 69 67  atabase file mig
1a840 68 74 0a 62 65 20 6c 61 72 67 65 72 20 74 68 61  ht.be larger tha
1a850 6e 20 73 74 72 69 63 74 6c 79 20 6e 65 63 65 73  n strictly neces
1a860 73 61 72 79 2e 20 20 41 6c 73 6f 2c 20 66 72 65  sary.  Also, fre
1a870 71 75 65 6e 74 20 69 6e 73 65 72 74 73 2c 20 75  quent inserts, u
1a880 70 64 61 74 65 73 2c 0a 61 6e 64 20 64 65 6c 65  pdates,.and dele
1a890 74 65 73 20 63 61 6e 20 63 61 75 73 65 20 74 68  tes can cause th
1a8a0 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e  e information in
1a8b0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f   the database to
1a8c0 20 62 65 63 6f 6d 65 0a 66 72 61 67 6d 65 6e 74   become.fragment
1a8d0 65 64 20 2d 20 73 63 72 61 74 74 65 72 65 64 20  ed - scrattered 
1a8e0 6f 75 74 20 61 6c 6c 20 61 63 72 6f 73 73 20 74  out all across t
1a8f0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1a900 20 72 61 74 68 65 72 0a 74 68 61 6e 20 63 6c 75   rather.than clu
1a910 73 74 65 72 65 64 20 74 6f 67 65 74 68 65 72 20  stered together 
1a920 69 6e 20 6f 6e 65 20 70 6c 61 63 65 2e 3c 2f 70  in one place.</p
1a930 3e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55 55  >..<p>^The VACUU
1a940 4d 20 63 6f 6d 6d 61 6e 64 20 63 6c 65 61 6e 73  M command cleans
1a950 0a 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61  .the main databa
1a960 73 65 20 62 79 20 63 6f 70 79 69 6e 67 20 69 74  se by copying it
1a970 73 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 61 20  s contents to a 
1a980 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61  temporary databa
1a990 73 65 20 66 69 6c 65 20 61 6e 64 20 0a 72 65 6c  se file and .rel
1a9a0 6f 61 64 69 6e 67 20 74 68 65 20 6f 72 69 67 69  oading the origi
1a9b0 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 69 6c  nal database fil
1a9c0 65 20 66 72 6f 6d 20 74 68 65 20 63 6f 70 79 2e  e from the copy.
1a9d0 20 20 54 68 69 73 20 65 6c 69 6d 69 6e 61 74 65    This eliminate
1a9e0 73 20 0a 66 72 65 65 20 70 61 67 65 73 2c 20 20  s .free pages,  
1a9f0 61 6c 69 67 6e 73 20 74 61 62 6c 65 20 64 61 74  aligns table dat
1aa00 61 20 74 6f 20 62 65 20 63 6f 6e 74 69 67 75 6f  a to be contiguo
1aa10 75 73 2c 20 61 6e 64 20 6f 74 68 65 72 77 69 73  us, and otherwis
1aa20 65 20 63 6c 65 61 6e 73 20 0a 75 70 20 74 68 65  e cleans .up the
1aa30 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 73   database file s
1aa40 74 72 75 63 74 75 72 65 2e 3c 2f 70 3e 0a 0a 3c  tructure.</p>..<
1aa50 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20 63 6f  p>^The VACUUM co
1aa60 6d 6d 61 6e 64 20 6d 61 79 20 63 68 61 6e 67 65  mmand may change
1aa70 20 74 68 65 20 0a 5b 52 4f 57 49 44 20 7c 20 52   the .[ROWID | R
1aa80 4f 57 49 44 73 5d 20 6f 66 20 65 6e 74 72 69 65  OWIDs] of entrie
1aa90 73 20 69 6e 20 74 61 62 6c 65 73 20 74 68 61 74  s in tables that
1aaa0 20 64 6f 0a 6e 6f 74 20 68 61 76 65 20 61 6e 20   do.not have an 
1aab0 65 78 70 6c 69 63 69 74 20 5b 49 4e 54 45 47 45  explicit [INTEGE
1aac0 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e 3c  R PRIMARY KEY].<
1aad0 2f 70 3e 0a 0a 3c 70 3e 5e 56 41 43 55 55 4d 20  /p>..<p>^VACUUM 
1aae0 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 68  only works on th
1aaf0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e  e main database.
1ab00 0a 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69  .It is not possi
1ab10 62 6c 65 20 74 6f 20 56 41 43 55 55 4d 20 61 6e  ble to VACUUM an
1ab20 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
1ab30 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70  se file.</p>..<p
1ab40 3e 5e 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d  >^The VACUUM com
1ab50 6d 61 6e 64 20 77 69 6c 6c 20 66 61 69 6c 20 69  mand will fail i
1ab60 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 61 63  f there is an ac
1ab70 74 69 76 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  tive transaction
1ab80 2e 0a 5e 54 68 65 20 56 41 43 55 55 4d 20 63 6f  ..^The VACUUM co
1ab90 6d 6d 61 6e 64 20 69 73 20 61 20 6e 6f 2d 6f 70  mmand is a no-op
1aba0 20 66 6f 72 20 69 6e 2d 6d 65 6d 6f 72 79 20 64   for in-memory d
1abb0 61 74 61 62 61 73 65 73 2e 3c 2f 70 3e 0a 0a 3c  atabases.</p>..<
1abc0 70 3e 5e 28 41 73 20 6f 66 20 53 51 4c 69 74 65  p>^(As of SQLite
1abd0 20 76 65 72 73 69 6f 6e 20 33 2e 31 2c 20 61 6e   version 3.1, an
1abe0 20 61 6c 74 65 72 6e 61 74 69 76 65 20 74 6f 20   alternative to 
1abf0 75 73 69 6e 67 20 74 68 65 20 56 41 43 55 55 4d  using the VACUUM
1ac00 20 63 6f 6d 6d 61 6e 64 0a 69 73 20 61 75 74 6f   command.is auto
1ac10 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2c 20 65 6e  -vacuum mode, en
1ac20 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 20  abled using the 
1ac30 0a 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70  .[auto_vacuum] p
1ac40 72 61 67 6d 61 2e 29 5e 20 20 5e 57 68 65 6e 20  ragma.)^  ^When 
1ac50 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 69 73  [auto_vacuum] is
1ac60 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 61 20 64   enabled for a d
1ac70 61 74 61 62 61 73 65 2c 20 0a 6c 61 72 67 65 20  atabase, .large 
1ac80 64 65 6c 65 74 65 73 20 63 61 75 73 65 0a 74 68  deletes cause.th
1ac90 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61  e size of the da
1aca0 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 73  tabase file to s
1acb0 68 72 69 6e 6b 2e 20 20 48 6f 77 65 76 65 72 2c  hrink.  However,
1acc0 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 0a 61   [auto_vacuum].a
1acd0 6c 73 6f 20 63 61 75 73 65 73 20 65 78 63 65 73  lso causes exces
1ace0 73 20 66 72 61 67 6d 65 6e 74 61 74 69 6f 6e 20  s fragmentation 
1acf0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
1ad00 66 69 6c 65 2e 20 20 5e 41 6e 64 20 5b 61 75 74  file.  ^And [aut
1ad10 6f 5f 76 61 63 75 75 6d 5d 0a 64 6f 65 73 20 6e  o_vacuum].does n
1ad20 6f 74 20 63 6f 6d 70 61 63 74 20 70 61 72 74 69  ot compact parti
1ad30 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61 67 65  ally filled page
1ad40 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  s of the databas
1ad50 65 20 61 73 20 56 41 43 55 55 4d 0a 64 6f 65 73  e as VACUUM.does
1ad60 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b  .</p>..<p>^The [
1ad70 70 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64 2f 6f  page_size] and/o
1ad80 72 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20  r [auto_vacuum] 
1ad90 6d 6f 64 65 20 6f 66 20 61 20 64 61 74 61 62 61  mode of a databa
1ada0 73 65 20 63 61 6e 20 62 65 20 63 68 61 6e 67 65  se can be change
1adb0 64 0a 62 79 20 69 6e 76 6f 6b 69 6e 67 20 74 68  d.by invoking th
1adc0 65 20 5b 70 61 67 65 5f 73 69 7a 65 20 70 72 61  e [page_size pra
1add0 67 6d 61 5d 20 61 6e 64 2f 6f 72 20 5b 61 75 74  gma] and/or [aut
1ade0 6f 5f 76 61 63 75 75 6d 20 70 72 61 67 6d 61 5d  o_vacuum pragma]
1adf0 20 61 6e 64 20 74 68 65 6e 0a 69 6d 6d 65 64 69   and then.immedi
1ae00 61 74 65 6c 79 20 56 41 43 55 55 4d 69 6e 67 20  ately VACUUMing 
1ae10 74 68 65 20 64 61 74 61 62 61 73 65 2e 3c 2f 70  the database.</p
1ae20 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
1ae30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65 63 74 69 6f 6e 20  #######.Section 
1ae80 7b 49 4e 44 45 58 45 44 20 42 59 7d 20 69 6e 64  {INDEXED BY} ind
1ae90 65 78 65 64 62 79 20 7b 7b 49 4e 44 45 58 45 44  exedby {{INDEXED
1aea0 20 42 59 7d 20 7b 4e 4f 54 20 49 4e 44 45 58 45   BY} {NOT INDEXE
1aeb0 44 7d 7d 0a 0a 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  D}}..</tcl>.<p>^
1aec0 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70  The INDEXED BY p
1aed0 68 72 61 73 65 20 69 73 20 61 20 53 51 4c 20 65  hrase is a SQL e
1aee0 78 74 65 6e 73 69 6f 6e 20 66 6f 75 6e 64 20 6f  xtension found o
1aef0 6e 6c 79 20 69 6e 20 53 51 4c 69 74 65 20 77 68  nly in SQLite wh
1af00 69 63 68 20 63 61 6e 0a 62 65 20 75 73 65 64 20  ich can.be used 
1af10 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
1af20 68 65 20 63 6f 72 72 65 63 74 20 69 6e 64 69 63  he correct indic
1af30 65 73 20 61 72 65 20 62 65 69 6e 67 20 75 73 65  es are being use
1af40 64 20 6f 6e 20 61 20 5b 44 45 4c 45 54 45 5d 2c  d on a [DELETE],
1af50 0a 5b 53 45 4c 45 43 54 5d 2c 20 6f 72 20 5b 55  .[SELECT], or [U
1af60 50 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74  PDATE] statement
1af70 2e 0a 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42  ..^The INDEXED B
1af80 59 20 70 68 72 61 73 65 20 61 6c 77 61 79 73 20  Y phrase always 
1af90 66 6f 6c 6c 6f 77 73 20 74 68 65 20 6e 61 6d 65  follows the name
1afa0 20 6f 66 20 61 20 74 61 62 6c 65 20 74 68 61 74   of a table that
1afb0 20 53 51 4c 69 74 65 20 77 69 6c 6c 0a 62 65 20   SQLite will.be 
1afc0 72 65 61 64 69 6e 67 2e 20 20 54 68 65 20 49 4e  reading.  The IN
1afd0 44 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20  DEXED BY phrase 
1afe0 63 61 6e 20 62 65 20 73 65 65 6e 20 69 6e 20 74  can be seen in t
1aff0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e  he following syn
1b000 74 61 78 0a 64 69 61 67 72 61 6d 73 3a 3c 2f 70  tax.diagrams:</p
1b010 3e 0a 0a 3c 74 63 6c 3e 0a 42 75 62 62 6c 65 44  >..<tcl>.BubbleD
1b020 69 61 67 72 61 6d 20 71 75 61 6c 69 66 69 65 64  iagram qualified
1b030 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a 42 75 62 62  -table-name.Bubb
1b040 6c 65 44 69 61 67 72 61 6d 20 73 69 6e 67 6c 65  leDiagram single
1b050 2d 73 6f 75 72 63 65 0a 3c 2f 74 63 6c 3e 0a 0a  -source.</tcl>..
1b060 3c 70 3e 5e 54 68 65 20 22 49 4e 44 45 58 45 44  <p>^The "INDEXED
1b070 20 42 59 20 69 6e 64 65 78 2d 6e 61 6d 65 22 20   BY index-name" 
1b080 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 73  clause specifies
1b090 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65 64 20   that the named 
1b0a0 69 6e 64 65 78 0a 6d 75 73 74 20 62 65 20 75 73  index.must be us
1b0b0 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c  ed in order to l
1b0c0 6f 6f 6b 20 75 70 20 76 61 6c 75 65 73 20 6f 6e  ook up values on
1b0d0 20 74 68 65 20 70 72 65 63 65 64 69 6e 67 20 74   the preceding t
1b0e0 61 62 6c 65 2e 0a 5e 49 66 20 69 6e 64 65 78 2d  able..^If index-
1b0f0 6e 61 6d 65 20 64 6f 65 73 20 6e 6f 74 20 65 78  name does not ex
1b100 69 73 74 20 6f 72 20 63 61 6e 6e 6f 74 20 62 65  ist or cannot be
1b110 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 71 75   used for the qu
1b120 65 72 79 2c 20 74 68 65 6e 0a 74 68 65 20 70 72  ery, then.the pr
1b130 65 70 61 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  eparation of the
1b140 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 66   SQL statement f
1b150 61 69 6c 73 2e 0a 5e 28 54 68 65 20 22 4e 4f 54  ails..^(The "NOT
1b160 20 49 4e 44 45 58 45 44 22 20 63 6c 61 75 73 65   INDEXED" clause
1b170 20 73 70 65 63 69 66 69 65 73 20 74 68 61 74 20   specifies that 
1b180 6e 6f 20 69 6e 64 65 78 20 73 68 61 6c 6c 20 62  no index shall b
1b190 65 20 75 73 65 64 20 77 68 65 6e 0a 61 63 63 65  e used when.acce
1b1a0 73 73 69 6e 67 20 74 68 65 20 70 72 65 63 65 64  ssing the preced
1b1b0 69 6e 67 20 74 61 62 6c 65 2c 20 69 6e 63 6c 75  ing table, inclu
1b1c0 64 69 6e 67 20 69 6d 70 6c 69 65 64 20 69 6e 64  ding implied ind
1b1d0 69 63 65 73 20 63 72 65 61 74 65 20 62 79 0a 55  ices create by.U
1b1e0 4e 49 51 55 45 20 61 6e 64 20 50 52 49 4d 41 52  NIQUE and PRIMAR
1b1f0 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  Y KEY constraint
1b200 73 2e 20 20 48 6f 77 65 76 65 72 2c 20 74 68 65  s.  However, the
1b210 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
1b220 20 4b 45 59 0a 63 61 6e 20 73 74 69 6c 6c 20 62   KEY.can still b
1b230 65 20 75 73 65 64 20 74 6f 20 6c 6f 6f 6b 20 75  e used to look u
1b240 70 20 65 6e 74 72 69 65 73 20 65 76 65 6e 20 77  p entries even w
1b250 68 65 6e 20 22 4e 4f 54 20 49 4e 44 45 58 45 44  hen "NOT INDEXED
1b260 22 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 29  " is specified.)
1b270 5e 3c 2f 70 3e 0a 0a 3c 70 3e 53 6f 6d 65 20 53  ^</p>..<p>Some S
1b280 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  QL database engi
1b290 6e 65 73 20 70 72 6f 76 69 64 65 20 6e 6f 6e 2d  nes provide non-
1b2a0 73 74 61 6e 64 61 72 64 20 22 68 69 6e 74 22 20  standard "hint" 
1b2b0 6d 65 63 68 61 6e 69 73 6d 73 20 77 68 69 63 68  mechanisms which
1b2c0 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20  .can be used to 
1b2d0 67 69 76 65 20 74 68 65 20 71 75 65 72 79 20 6f  give the query o
1b2e0 70 74 69 6d 69 7a 65 72 20 63 6c 75 65 73 20 61  ptimizer clues a
1b2f0 62 6f 75 74 20 77 68 61 74 20 69 6e 64 69 63 65  bout what indice
1b300 73 20 69 74 20 73 68 6f 75 6c 64 0a 75 73 65 20  s it should.use 
1b310 66 6f 72 20 61 20 70 61 72 74 69 63 75 6c 61 72  for a particular
1b320 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
1b330 20 49 4e 44 45 58 20 42 59 20 63 6c 61 75 73 65   INDEX BY clause
1b340 20 6f 66 20 53 51 4c 69 74 65 20 69 73 20 0a 3c   of SQLite is .<
1b350 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 20 68 69  em>not</em> a hi
1b360 6e 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 20  nting mechanism 
1b370 61 6e 64 20 69 74 20 73 68 6f 75 6c 64 20 6e 6f  and it should no
1b380 74 20 62 65 20 75 73 65 64 20 61 73 20 73 75 63  t be used as suc
1b390 68 2e 0a 5e 54 68 65 20 49 4e 44 45 58 45 44 20  h..^The INDEXED 
1b3a0 42 59 20 63 6c 61 75 73 65 20 64 6f 65 73 20 6e  BY clause does n
1b3b0 6f 74 20 67 69 76 65 20 74 68 65 20 6f 70 74 69  ot give the opti
1b3c0 6d 69 7a 65 72 20 68 69 6e 74 73 20 61 62 6f 75  mizer hints abou
1b3d0 74 20 77 68 69 63 68 20 69 6e 64 65 78 0a 74 6f  t which index.to
1b3e0 20 75 73 65 3b 20 69 74 20 67 69 76 65 73 20 74   use; it gives t
1b3f0 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 61 20 72  he optimizer a r
1b400 65 71 75 69 72 65 6d 65 6e 74 20 6f 66 20 77 68  equirement of wh
1b410 69 63 68 20 69 6e 64 65 78 20 74 6f 20 75 73 65  ich index to use
1b420 2e 0a 5e 49 66 20 74 68 65 20 71 75 65 72 79 20  ..^If the query 
1b430 6f 70 74 69 6d 69 7a 65 72 20 69 73 20 75 6e 61  optimizer is una
1b440 62 6c 65 20 74 6f 20 75 73 65 20 74 68 65 20 69  ble to use the i
1b450 6e 64 65 78 20 73 70 65 63 69 66 69 65 64 20 62  ndex specified b
1b460 79 20 74 68 65 0a 49 4e 44 45 58 20 42 59 20 63  y the.INDEX BY c
1b470 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20  lause, then the 
1b480 71 75 65 72 79 20 77 69 6c 6c 20 66 61 69 6c 20  query will fail 
1b490 77 69 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c 2f  with an error.</
1b4a0 70 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e 44 45 58  p>..<p>The INDEX
1b4b0 45 44 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ED BY clause is 
1b4c0 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 69 6e 74  <em>not</em> int
1b4d0 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e  ended for use in
1b4e0 20 74 75 6e 69 6e 67 0a 74 68 65 20 70 72 65 66   tuning.the pref
1b4f0 6f 72 6d 61 6e 63 65 20 6f 66 20 61 20 71 75 65  ormance of a que
1b500 72 79 2e 20 20 54 68 65 20 69 6e 74 65 6e 74 20  ry.  The intent 
1b510 6f 66 20 74 68 65 20 49 4e 44 45 58 45 44 20 42  of the INDEXED B
1b520 59 20 63 6c 61 75 73 65 20 69 73 0a 74 6f 20 72  Y clause is.to r
1b530 61 69 73 65 20 61 20 72 75 6e 2d 74 69 6d 65 20  aise a run-time 
1b540 65 72 72 6f 72 20 69 66 20 61 20 73 63 68 65 6d  error if a schem
1b550 61 20 63 68 61 6e 67 65 2c 20 73 75 63 68 20 61  a change, such a
1b560 73 20 64 72 6f 70 70 69 6e 67 20 6f 72 0a 63 72  s dropping or.cr
1b570 65 61 74 69 6e 67 20 61 6e 20 69 6e 64 65 78 2c  eating an index,
1b580 20 63 61 75 73 65 73 20 74 68 65 20 71 75 65 72   causes the quer
1b590 79 20 70 6c 61 6e 20 66 6f 72 20 61 20 74 69 6d  y plan for a tim
1b5a0 65 2d 73 65 6e 73 69 74 69 76 65 20 71 75 65 72  e-sensitive quer
1b5b0 79 0a 74 6f 20 63 68 61 6e 67 65 2e 20 20 54 68  y.to change.  Th
1b5c0 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61  e INDEXED BY cla
1b5d0 75 73 65 20 69 73 20 64 65 73 69 67 6e 65 64 20  use is designed 
1b5e0 74 6f 20 68 65 6c 70 20 64 65 74 65 63 74 0a 75  to help detect.u
1b5f0 6e 64 65 73 69 72 61 62 6c 65 20 71 75 65 72 79  ndesirable query
1b600 20 70 6c 61 6e 20 63 68 61 6e 67 65 73 20 64 75   plan changes du
1b610 72 69 6e 67 20 72 65 67 72 65 73 73 69 6f 6e 20  ring regression 
1b620 74 65 73 74 69 6e 67 2e 0a 44 65 76 65 6c 6f 70  testing..Develop
1b630 65 72 73 20 61 72 65 20 61 64 6d 6f 6e 69 73 68  ers are admonish
1b640 65 64 20 74 6f 20 6f 6d 69 74 20 61 6c 6c 20 75  ed to omit all u
1b650 73 65 20 6f 66 20 49 4e 44 45 58 45 44 20 42 59  se of INDEXED BY
1b660 20 64 75 72 69 6e 67 0a 61 70 70 6c 69 63 61 74   during.applicat
1b670 69 6f 6e 20 64 65 73 69 67 6e 2c 20 69 6d 70 6c  ion design, impl
1b680 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 65 73 74  ementation, test
1b690 69 6e 67 2c 20 61 6e 64 20 74 75 6e 69 6e 67 2e  ing, and tuning.
1b6a0 20 20 49 66 0a 49 4e 44 45 58 45 44 20 42 59 20    If.INDEXED BY 
1b6b0 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 61 74  is to be used at
1b6c0 20 61 6c 6c 2c 20 69 74 20 73 68 6f 75 6c 64 20   all, it should 
1b6d0 62 65 20 69 6e 73 65 72 74 65 64 20 61 74 20 74  be inserted at t
1b6e0 68 65 20 76 65 72 79 0a 65 6e 64 20 6f 66 20 74  he very.end of t
1b6f0 68 65 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 70  he development p
1b700 72 6f 63 65 73 73 20 77 68 65 6e 20 22 6c 6f 63  rocess when "loc
1b710 6b 69 6e 67 20 64 6f 77 6e 22 20 61 20 64 65 73  king down" a des
1b720 69 67 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 65  ign.</p>..<h3>Se
1b730 65 20 41 6c 73 6f 3a 3c 2f 68 33 3e 0a 0a 3c 70  e Also:</h3>..<p
1b740 3e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 74  >The [sqlite3_st
1b750 6d 74 5f 73 74 61 74 75 73 28 29 5d 20 43 2f 43  mt_status()] C/C
1b760 2b 2b 20 69 6e 74 65 72 66 61 63 65 20 74 6f 67  ++ interface tog
1b770 65 74 68 65 72 20 77 69 74 68 20 74 68 65 0a 5b  ether with the.[
1b780 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
1b790 53 5f 46 55 4c 4c 53 43 41 4e 5f 53 54 45 50 5d  S_FULLSCAN_STEP]
1b7a0 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f 53 54 4d   and [SQLITE_STM
1b7b0 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 20 76 65  TSTATUS_SORT] ve
1b7c0 72 62 73 0a 63 61 6e 20 62 65 20 75 73 65 64 20  rbs.can be used 
1b7d0 74 6f 20 64 65 74 65 63 74 20 61 74 20 72 75 6e  to detect at run
1b7e0 2d 74 69 6d 65 20 77 68 65 6e 20 61 6e 20 53 51  -time when an SQ
1b7f0 4c 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6e  L statement is n
1b800 6f 74 0a 6d 61 6b 69 6e 67 20 65 66 66 65 63 74  ot.making effect
1b810 69 76 65 20 75 73 65 20 6f 66 20 69 6e 64 69 63  ive use of indic
1b820 65 73 2e 20 20 4d 61 6e 79 20 61 70 70 6c 69 63  es.  Many applic
1b830 61 74 69 6f 6e 73 20 6d 61 79 20 70 72 65 66 65  ations may prefe
1b840 72 20 74 6f 0a 75 73 65 20 74 68 65 20 5b 73 71  r to.use the [sq
1b850 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75  lite3_stmt_statu
1b860 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20 74  s()] interface t
1b870 6f 20 64 65 74 65 63 74 20 69 6e 64 65 78 20 6d  o detect index m
1b880 69 73 75 73 65 0a 72 61 74 68 65 72 20 74 68 61  isuse.rather tha
1b890 6e 20 74 68 65 20 49 4e 44 45 58 45 44 20 42 59  n the INDEXED BY
1b8a0 20 70 68 72 61 73 65 20 64 65 73 63 72 69 62 65   phrase describe
1b8b0 64 20 68 65 72 65 2e 3c 2f 70 3e 0a 0a 3c 74 63  d here.</p>..<tc
1b8c0 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
1b8d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 23 20 41 20 6c 69 73 74 20 6f 66 20 6b 65 79  .# A list of key
1b920 77 6f 72 64 73 2e 20 20 41 20 61 73 74 65 72 69  words.  A asteri
1b930 73 6b 20 6f 63 63 75 72 73 20 61 66 74 65 72 20  sk occurs after 
1b940 74 68 65 20 6b 65 79 77 6f 72 64 20 69 66 20 69  the keyword if i
1b950 74 20 69 73 20 6f 6e 0a 23 20 74 68 65 20 66 61  t is on.# the fa
1b960 6c 6c 62 61 63 6b 20 6c 69 73 74 2e 0a 23 0a 73  llback list..#.s
1b970 65 74 20 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20  et keyword_list 
1b980 5b 6c 73 6f 72 74 20 7b 0a 20 20 20 41 42 4f 52  [lsort {.   ABOR
1b990 54 0a 20 20 20 41 43 54 49 4f 4e 0a 20 20 20 41  T.   ACTION.   A
1b9a0 44 44 0a 20 20 20 41 46 54 45 52 0a 20 20 20 41  DD.   AFTER.   A
1b9b0 4c 4c 0a 20 20 20 41 4c 54 45 52 0a 20 20 20 41  LL.   ALTER.   A
1b9c0 4e 41 4c 59 5a 45 0a 20 20 20 41 4e 44 0a 20 20  NALYZE.   AND.  
1b9d0 20 41 53 0a 20 20 20 41 53 43 0a 20 20 20 41 54   AS.   ASC.   AT
1b9e0 54 41 43 48 0a 20 20 20 41 55 54 4f 49 4e 43 52  TACH.   AUTOINCR
1b9f0 45 4d 45 4e 54 0a 20 20 20 42 45 46 4f 52 45 0a  EMENT.   BEFORE.
1ba00 20 20 20 42 45 47 49 4e 0a 20 20 20 42 45 54 57     BEGIN.   BETW
1ba10 45 45 4e 0a 20 20 20 42 59 0a 20 20 20 43 41 53  EEN.   BY.   CAS
1ba20 43 41 44 45 0a 20 20 20 43 41 53 45 0a 20 20 20  CADE.   CASE.   
1ba30 43 41 53 54 0a 20 20 20 43 48 45 43 4b 0a 20 20  CAST.   CHECK.  
1ba40 20 43 4f 4c 4c 41 54 45 0a 20 20 20 43 4f 4c 55   COLLATE.   COLU
1ba50 4d 4e 0a 20 20 20 43 4f 4d 4d 49 54 0a 20 20 20  MN.   COMMIT.   
1ba60 43 4f 4e 46 4c 49 43 54 0a 20 20 20 43 4f 4e 53  CONFLICT.   CONS
1ba70 54 52 41 49 4e 54 0a 20 20 20 43 52 45 41 54 45  TRAINT.   CREATE
1ba80 0a 20 20 20 43 52 4f 53 53 0a 20 20 20 43 55 52  .   CROSS.   CUR
1ba90 52 45 4e 54 5f 44 41 54 45 0a 20 20 20 43 55 52  RENT_DATE.   CUR
1baa0 52 45 4e 54 5f 54 49 4d 45 0a 20 20 20 43 55 52  RENT_TIME.   CUR
1bab0 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 0a 20  RENT_TIMESTAMP. 
1bac0 20 20 44 41 54 41 42 41 53 45 0a 20 20 20 44 45    DATABASE.   DE
1bad0 46 41 55 4c 54 0a 20 20 20 44 45 46 45 52 52 45  FAULT.   DEFERRE
1bae0 44 0a 20 20 20 44 45 46 45 52 52 41 42 4c 45 0a  D.   DEFERRABLE.
1baf0 20 20 20 44 45 4c 45 54 45 0a 20 20 20 44 45 53     DELETE.   DES
1bb00 43 0a 20 20 20 44 45 54 41 43 48 0a 20 20 20 44  C.   DETACH.   D
1bb10 49 53 54 49 4e 43 54 0a 20 20 20 44 52 4f 50 0a  ISTINCT.   DROP.
1bb20 20 20 20 45 4e 44 0a 20 20 20 45 41 43 48 0a 20     END.   EACH. 
1bb30 20 20 45 4c 53 45 0a 20 20 20 45 53 43 41 50 45    ELSE.   ESCAPE
1bb40 0a 20 20 20 45 58 43 45 50 54 0a 20 20 20 45 58  .   EXCEPT.   EX
1bb50 43 4c 55 53 49 56 45 0a 20 20 20 45 58 49 53 54  CLUSIVE.   EXIST
1bb60 53 0a 20 20 20 45 58 50 4c 41 49 4e 0a 20 20 20  S.   EXPLAIN.   
1bb70 46 41 49 4c 0a 20 20 20 46 4f 52 0a 20 20 20 46  FAIL.   FOR.   F
1bb80 4f 52 45 49 47 4e 0a 20 20 20 46 52 4f 4d 0a 20  OREIGN.   FROM. 
1bb90 20 20 46 55 4c 4c 0a 20 20 20 47 4c 4f 42 0a 20    FULL.   GLOB. 
1bba0 20 20 47 52 4f 55 50 0a 20 20 20 48 41 56 49 4e    GROUP.   HAVIN
1bbb0 47 0a 20 20 20 49 46 0a 20 20 20 49 47 4e 4f 52  G.   IF.   IGNOR
1bbc0 45 0a 20 20 20 49 4d 4d 45 44 49 41 54 45 0a 20  E.   IMMEDIATE. 
1bbd0 20 20 49 4e 0a 20 20 20 49 4e 44 45 58 0a 20 20    IN.   INDEX.  
1bbe0 20 49 4e 44 45 58 45 44 0a 20 20 20 49 4e 49 54   INDEXED.   INIT
1bbf0 49 41 4c 4c 59 0a 20 20 20 49 4e 4e 45 52 0a 20  IALLY.   INNER. 
1bc00 20 20 49 4e 53 45 52 54 0a 20 20 20 49 4e 53 54    INSERT.   INST
1bc10 45 41 44 0a 20 20 20 49 4e 54 45 52 53 45 43 54  EAD.   INTERSECT
1bc20 0a 20 20 20 49 4e 54 4f 0a 20 20 20 49 53 0a 20  .   INTO.   IS. 
1bc30 20 20 49 53 4e 55 4c 4c 0a 20 20 20 4a 4f 49 4e    ISNULL.   JOIN
1bc40 0a 20 20 20 4b 45 59 0a 20 20 20 4c 45 46 54 0a  .   KEY.   LEFT.
1bc50 20 20 20 4c 49 4b 45 0a 20 20 20 4c 49 4d 49 54     LIKE.   LIMIT
1bc60 0a 20 20 20 4d 41 54 43 48 0a 20 20 20 4e 41 54  .   MATCH.   NAT
1bc70 55 52 41 4c 0a 20 20 20 4e 4f 0a 20 20 20 4e 4f  URAL.   NO.   NO
1bc80 54 0a 20 20 20 4e 4f 54 4e 55 4c 4c 0a 20 20 20  T.   NOTNULL.   
1bc90 4e 55 4c 4c 0a 20 20 20 4f 46 0a 20 20 20 4f 46  NULL.   OF.   OF
1bca0 46 53 45 54 0a 20 20 20 4f 4e 0a 20 20 20 4f 52  FSET.   ON.   OR
1bcb0 0a 20 20 20 4f 52 44 45 52 0a 20 20 20 4f 55 54  .   ORDER.   OUT
1bcc0 45 52 0a 20 20 20 50 4c 41 4e 0a 20 20 20 50 52  ER.   PLAN.   PR
1bcd0 41 47 4d 41 0a 20 20 20 50 52 49 4d 41 52 59 0a  AGMA.   PRIMARY.
1bce0 20 20 20 51 55 45 52 59 0a 20 20 20 52 41 49 53     QUERY.   RAIS
1bcf0 45 0a 20 20 20 52 45 46 45 52 45 4e 43 45 53 0a  E.   REFERENCES.
1bd00 20 20 20 52 45 47 45 58 50 0a 20 20 20 52 45 49     REGEXP.   REI
1bd10 4e 44 45 58 0a 20 20 20 52 45 4c 45 41 53 45 0a  NDEX.   RELEASE.
1bd20 20 20 20 52 45 4e 41 4d 45 0a 20 20 20 52 45 50     RENAME.   REP
1bd30 4c 41 43 45 0a 20 20 20 52 45 53 54 52 49 43 54  LACE.   RESTRICT
1bd40 0a 20 20 20 52 49 47 48 54 0a 20 20 20 52 4f 4c  .   RIGHT.   ROL
1bd50 4c 42 41 43 4b 0a 20 20 20 52 4f 57 0a 20 20 20  LBACK.   ROW.   
1bd60 53 41 56 45 50 4f 49 4e 54 0a 20 20 20 53 45 4c  SAVEPOINT.   SEL
1bd70 45 43 54 0a 20 20 20 53 45 54 0a 20 20 20 54 41  ECT.   SET.   TA
1bd80 42 4c 45 0a 20 20 20 54 45 4d 50 0a 20 20 20 54  BLE.   TEMP.   T
1bd90 45 4d 50 4f 52 41 52 59 0a 20 20 20 54 48 45 4e  EMPORARY.   THEN
1bda0 0a 20 20 20 54 4f 0a 20 20 20 54 52 41 4e 53 41  .   TO.   TRANSA
1bdb0 43 54 49 4f 4e 0a 20 20 20 54 52 49 47 47 45 52  CTION.   TRIGGER
1bdc0 0a 20 20 20 55 4e 49 4f 4e 0a 20 20 20 55 4e 49  .   UNION.   UNI
1bdd0 51 55 45 0a 20 20 20 55 50 44 41 54 45 0a 20 20  QUE.   UPDATE.  
1bde0 20 55 53 49 4e 47 0a 20 20 20 56 41 43 55 55 4d   USING.   VACUUM
1bdf0 0a 20 20 20 56 41 4c 55 45 53 0a 20 20 20 56 49  .   VALUES.   VI
1be00 45 57 0a 20 20 20 56 49 52 54 55 41 4c 0a 20 20  EW.   VIRTUAL.  
1be10 20 57 48 45 4e 0a 20 20 20 57 48 45 52 45 0a 7d   WHEN.   WHERE.}
1be20 5d 0a 0a 68 64 5f 70 75 74 73 20 7b 3c 44 49 56  ]..hd_puts {<DIV
1be30 20 63 6c 61 73 73 3d 22 70 64 66 5f 73 65 63 74   class="pdf_sect
1be40 69 6f 6e 22 3e 7d 0a 53 65 63 74 69 6f 6e 20 7b  ion">}.Section {
1be50 53 51 4c 69 74 65 20 4b 65 79 77 6f 72 64 73 7d  SQLite Keywords}
1be60 20 6b 65 79 77 6f 72 64 73 20 7b 7b 2a 53 51 4c   keywords {{*SQL
1be70 20 6b 65 79 77 6f 72 64 7d 20 7b 53 51 4c 20 6b   keyword} {SQL k
1be80 65 79 77 6f 72 64 73 7d 7d 0a 68 64 5f 70 75 74  eywords}}.hd_put
1be90 73 20 7b 3c 2f 44 49 56 3e 7d 0a 3c 2f 74 63 6c  s {</DIV>}.</tcl
1bea0 3e 0a 0a 3c 70 3e 54 68 65 20 53 51 4c 20 73 74  >..<p>The SQL st
1beb0 61 6e 64 61 72 64 20 73 70 65 63 69 66 69 65 73  andard specifies
1bec0 20 61 20 68 75 67 65 20 6e 75 6d 62 65 72 20 6f   a huge number o
1bed0 66 20 6b 65 79 77 6f 72 64 73 20 77 68 69 63 68  f keywords which
1bee0 20 6d 61 79 20 6e 6f 74 0a 62 65 20 75 73 65 64   may not.be used
1bef0 20 61 73 20 74 68 65 20 6e 61 6d 65 73 20 6f 66   as the names of
1bf00 20 74 61 62 6c 65 73 2c 20 69 6e 64 69 63 65 73   tables, indices
1bf10 2c 20 63 6f 6c 75 6d 6e 73 2c 20 64 61 74 61 62  , columns, datab
1bf20 61 73 65 73 2c 20 75 73 65 72 2d 64 65 66 69 6e  ases, user-defin
1bf30 65 64 0a 66 75 6e 63 74 69 6f 6e 73 2c 20 63 6f  ed.functions, co
1bf40 6c 6c 61 74 69 6f 6e 73 2c 20 76 69 72 74 75 61  llations, virtua
1bf50 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 73 2c  l table modules,
1bf60 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6e 61   or any other na
1bf70 6d 65 64 20 6f 62 6a 65 63 74 2e 0a 54 68 65 20  med object..The 
1bf80 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f 72 64 73  list of keywords
1bf90 20 69 73 20 73 6f 20 6c 6f 6e 67 20 74 68 61 74   is so long that
1bfa0 20 66 65 77 20 70 65 6f 70 6c 65 20 63 61 6e 20   few people can 
1bfb0 72 65 6d 65 6d 62 65 72 20 74 68 65 6d 20 61 6c  remember them al
1bfc0 6c 2e 0a 46 6f 72 20 6d 6f 73 74 20 53 51 4c 20  l..For most SQL 
1bfd0 63 6f 64 65 2c 20 79 6f 75 72 20 73 61 66 65 73  code, your safes
1bfe0 74 20 62 65 74 20 69 73 20 74 6f 20 6e 65 76 65  t bet is to neve
1bff0 72 20 75 73 65 20 61 6e 79 20 45 6e 67 6c 69 73  r use any Englis
1c000 68 20 6c 61 6e 67 75 61 67 65 0a 77 6f 72 64 20  h language.word 
1c010 61 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  as the name of a
1c020 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 6f 62   user-defined ob
1c030 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66  ject.</p>..<p>If
1c040 20 79 6f 75 20 77 61 6e 74 20 74 6f 20 75 73 65   you want to use
1c050 20 61 20 6b 65 79 77 6f 72 64 20 61 73 20 61 20   a keyword as a 
1c060 6e 61 6d 65 2c 20 79 6f 75 20 6e 65 65 64 20 74  name, you need t
1c070 6f 20 71 75 6f 74 65 20 69 74 2e 20 20 54 68 65  o quote it.  The
1c080 72 65 0a 61 72 65 20 74 68 72 65 65 20 77 61 79  re.are three way
1c090 73 20 6f 66 20 71 75 6f 74 69 6e 67 20 6b 65 79  s of quoting key
1c0a0 77 6f 72 64 73 20 69 6e 20 53 51 4c 69 74 65 3a  words in SQLite:
1c0b0 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62 6c 6f 63 6b  </p>..<p>.<block
1c0c0 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c  quote>.<table>.<
1c0d0 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
1c0e0 74 6f 70 22 3e 3c 62 3e 27 6b 65 79 77 6f 72 64  top"><b>'keyword
1c0f0 27 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69  '</b></td><td wi
1c100 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 09  dth="20"></td>..
1c110 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 69  <td>^A keyword i
1c120 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20  n single quotes 
1c130 69 73 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65  is a string lite
1c140 72 61 6c 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a  ral.</td></tr>..
1c150 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
1c160 22 74 6f 70 22 3e 3c 62 3e 22 6b 65 79 77 6f 72  "top"><b>"keywor
1c170 64 22 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c  d"</b></td><td><
1c180 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79  /td>..<td>^A key
1c190 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65 2d 71  word in double-q
1c1a0 75 6f 74 65 73 20 69 73 20 61 6e 20 69 64 65 6e  uotes is an iden
1c1b0 74 69 66 69 65 72 2e 3c 2f 74 64 3e 3c 2f 74 72  tifier.</td></tr
1c1c0 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69  >..<tr>.<td vali
1c1d0 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26 23 39 31  gn="top"><b>&#91
1c1e0 3b 6b 65 79 77 6f 72 64 26 23 39 33 3b 3c 2f 62  ;keyword&#93;</b
1c1f0 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a  ></td><td></td>.
1c200 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20  .<td>^A keyword 
1c210 65 6e 63 6c 6f 73 65 64 20 69 6e 20 73 71 75 61  enclosed in squa
1c220 72 65 20 62 72 61 63 6b 65 74 73 20 69 73 20 0a  re brackets is .
1c230 20 20 20 20 20 20 20 20 61 6e 20 69 64 65 6e 74          an ident
1c240 69 66 69 65 72 2e 20 20 54 68 69 73 20 69 73 20  ifier.  This is 
1c250 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c  not standard SQL
1c260 2e 20 20 54 68 69 73 20 71 75 6f 74 69 6e 67 20  .  This quoting 
1c270 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20 20 20 20  mechanism.      
1c280 20 20 69 73 20 75 73 65 64 20 62 79 20 4d 53 20    is used by MS 
1c290 41 63 63 65 73 73 20 61 6e 64 20 53 51 4c 20 53  Access and SQL S
1c2a0 65 72 76 65 72 20 61 6e 64 20 69 73 20 69 6e 63  erver and is inc
1c2b0 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20  luded in SQLite 
1c2c0 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f 6d 70  for.        comp
1c2d0 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c  atibility.</td><
1c2e0 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76  /tr>..<tr>.<td v
1c2f0 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26  align="top"><b>&
1c300 23 39 36 3b 6b 65 79 77 6f 72 64 26 23 39 36 3b  #96;keyword&#96;
1c310 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74  </b></td><td></t
1c320 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f  d>..<td>^A keywo
1c330 72 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 67  rd enclosed in g
1c340 72 61 76 65 20 61 63 63 65 6e 74 73 20 28 41 53  rave accents (AS
1c350 43 49 49 20 63 6f 64 65 20 39 36 29 20 69 73 20  CII code 96) is 
1c360 0a 20 20 20 20 20 20 20 20 61 6e 20 69 64 65 6e  .        an iden
1c370 74 69 66 69 65 72 2e 20 20 54 68 69 73 20 69 73  tifier.  This is
1c380 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51   not standard SQ
1c390 4c 2e 20 20 54 68 69 73 20 71 75 6f 74 69 6e 67  L.  This quoting
1c3a0 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20 20 20   mechanism.     
1c3b0 20 20 20 69 73 20 75 73 65 64 20 62 79 20 4d 79     is used by My
1c3c0 53 51 4c 20 61 6e 64 20 69 73 20 69 6e 63 6c 75  SQL and is inclu
1c3d0 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20 66 6f  ded in SQLite fo
1c3e0 72 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 61 74  r.        compat
1c3f0 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74  ibility.</td></t
1c400 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c  r>.</table>.</bl
1c410 6f 63 6b 71 75 6f 74 65 3e 0a 3c 2f 70 3e 0a 0a  ockquote>.</p>..
1c420 3c 70 3e 46 6f 72 20 72 65 73 69 6c 69 65 6e 63  <p>For resilienc
1c430 65 20 77 68 65 6e 20 63 6f 6e 66 72 6f 6e 74 65  e when confronte
1c440 64 20 77 69 74 68 20 68 69 73 74 6f 72 69 63 61  d with historica
1c450 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  l SQL statements
1c460 2c 20 53 51 4c 69 74 65 0a 77 69 6c 6c 20 73 6f  , SQLite.will so
1c470 6d 65 74 69 6d 65 73 20 62 65 6e 64 20 74 68 65  metimes bend the
1c480 20 71 75 6f 74 69 6e 67 20 72 75 6c 65 73 20 61   quoting rules a
1c490 62 6f 76 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a  bove:</p>..<ul>.
1c4a0 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61 20 6b 65 79  <li><p>^If a key
1c4b0 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65 0a 71  word in single.q
1c4c0 75 6f 74 65 73 20 28 65 78 3a 20 3c 62 3e 27 6b  uotes (ex: <b>'k
1c4d0 65 79 27 3c 2f 62 3e 20 6f 72 20 3c 62 3e 27 67  ey'</b> or <b>'g
1c4e0 6c 6f 62 27 3c 2f 62 3e 29 20 69 73 20 75 73 65  lob'</b>) is use
1c4f0 64 20 69 6e 20 61 20 63 6f 6e 74 65 78 74 20 77  d in a context w
1c500 68 65 72 65 0a 61 6e 20 69 64 65 6e 74 69 66 69  here.an identifi
1c510 65 72 20 69 73 20 61 6c 6c 6f 77 65 64 20 62 75  er is allowed bu
1c520 74 20 77 68 65 72 65 20 61 20 73 74 72 69 6e 67  t where a string
1c530 20 6c 69 74 65 72 61 6c 20 69 73 20 6e 6f 74 20   literal is not 
1c540 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e 0a 74 68  allowed, then.th
1c550 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72  e token is under
1c560 73 74 6f 6f 64 20 74 6f 20 62 65 20 61 6e 20 69  stood to be an i
1c570 64 65 6e 74 69 66 69 65 72 20 69 6e 73 74 65 61  dentifier instea
1c580 64 20 6f 66 20 61 20 73 74 72 69 6e 67 20 6c 69  d of a string li
1c590 74 65 72 61 6c 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e  teral..</p></li>
1c5a0 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61 20 6b  ..<li><p>^If a k
1c5b0 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65  eyword in double
1c5c0 0a 71 75 6f 74 65 73 20 28 65 78 3a 20 3c 62 3e  .quotes (ex: <b>
1c5d0 22 6b 65 79 22 3c 2f 62 3e 20 6f 72 20 3c 62 3e  "key"</b> or <b>
1c5e0 22 67 6c 6f 62 22 3c 2f 62 3e 29 20 69 73 20 75  "glob"</b>) is u
1c5f0 73 65 64 20 69 6e 20 61 20 63 6f 6e 74 65 78 74  sed in a context
1c600 20 77 68 65 72 65 0a 69 74 20 63 61 6e 6e 6f 74   where.it cannot
1c610 20 62 65 20 72 65 73 6f 6c 76 65 64 20 74 6f 20   be resolved to 
1c620 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 62 75  an identifier bu
1c630 74 20 77 68 65 72 65 20 61 20 73 74 72 69 6e 67  t where a string
1c640 20 6c 69 74 65 72 61 6c 0a 69 73 20 61 6c 6c 6f   literal.is allo
1c650 77 65 64 2c 20 74 68 65 6e 20 74 68 65 20 74 6f  wed, then the to
1c660 6b 65 6e 20 69 73 20 75 6e 64 65 72 73 74 6f 6f  ken is understoo
1c670 64 20 74 6f 20 62 65 20 61 20 73 74 72 69 6e 67  d to be a string
1c680 20 6c 69 74 65 72 61 6c 20 69 6e 73 74 65 61 64   literal instead
1c690 0a 6f 66 20 61 6e 20 69 64 65 6e 74 69 66 65 72  .of an identifer
1c6a0 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e  .</p></li>.</ul>
1c6b0 0a 0a 3c 70 3e 50 72 6f 67 72 61 6d 6d 65 72 73  ..<p>Programmers
1c6c0 20 61 72 65 20 63 61 75 74 69 6f 6e 65 64 20 6e   are cautioned n
1c6d0 6f 74 20 74 6f 20 75 73 65 20 74 68 65 20 74 77  ot to use the tw
1c6e0 6f 20 65 78 63 65 70 74 69 6f 6e 73 20 64 65 73  o exceptions des
1c6f0 63 72 69 62 65 64 20 69 6e 0a 74 68 65 20 70 72  cribed in.the pr
1c700 65 76 69 6f 75 73 20 62 75 6c 6c 65 74 73 2e 20  evious bullets. 
1c710 20 57 65 20 65 6d 70 68 61 73 69 7a 65 20 74 68   We emphasize th
1c720 61 74 20 74 68 65 79 20 65 78 69 73 74 20 6f 6e  at they exist on
1c730 6c 79 20 73 6f 20 74 68 61 74 20 6f 6c 64 0a 61  ly so that old.a
1c740 6e 64 20 69 6c 6c 2d 66 6f 72 6d 65 64 20 53 51  nd ill-formed SQ
1c750 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 6c  L statements wil
1c760 6c 20 72 75 6e 20 63 6f 72 72 65 63 74 6c 79 2e  l run correctly.
1c770 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e    Future version
1c780 73 20 6f 66 0a 53 51 4c 69 74 65 20 6d 69 67 68  s of.SQLite migh
1c790 74 20 63 68 61 6e 67 65 20 74 6f 20 72 61 69 73  t change to rais
1c7a0 65 20 65 72 72 6f 72 73 20 69 6e 73 74 65 61 64  e errors instead
1c7b0 20 6f 66 20 61 63 63 65 70 74 69 6e 67 20 74 68   of accepting th
1c7c0 65 20 6d 61 6c 66 6f 72 6d 65 64 0a 73 74 61 74  e malformed.stat
1c7d0 65 6d 65 6e 74 73 20 63 6f 76 65 72 65 64 20 62  ements covered b
1c7e0 79 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73  y the exceptions
1c7f0 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e   above.</p>..<p>
1c800 0a 53 51 4c 69 74 65 20 61 64 64 73 20 6e 65 77  .SQLite adds new
1c810 20 6b 65 79 77 6f 72 64 73 20 66 72 6f 6d 20 74   keywords from t
1c820 69 6d 65 20 74 6f 20 74 69 6d 65 20 77 68 65 6e  ime to time when
1c830 20 69 74 20 74 61 6b 65 73 20 6f 6e 20 6e 65 77   it takes on new
1c840 20 66 65 61 74 75 72 65 73 2e 0a 53 6f 20 74 6f   features..So to
1c850 20 70 72 65 76 65 6e 74 20 79 6f 75 72 20 63 6f   prevent your co
1c860 64 65 20 66 72 6f 6d 20 62 65 69 6e 67 20 62 72  de from being br
1c870 6f 6b 65 6e 20 62 79 20 66 75 74 75 72 65 20 65  oken by future e
1c880 6e 68 61 6e 63 65 6d 65 6e 74 73 2c 20 79 6f 75  nhancements, you
1c890 20 73 68 6f 75 6c 64 0a 6e 6f 72 6d 61 6c 6c 79   should.normally
1c8a0 20 71 75 6f 74 65 20 61 6e 79 20 69 64 65 6e 74   quote any ident
1c8b0 69 66 69 65 72 20 74 68 61 74 20 69 73 20 61 6e  ifier that is an
1c8c0 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67   English languag
1c8d0 65 20 77 6f 72 64 2c 20 65 76 65 6e 20 69 66 0a  e word, even if.
1c8e0 79 6f 75 20 64 6f 20 6e 6f 74 20 68 61 76 65 20  you do not have 
1c8f0 74 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68  to..</p>..<p>.Th
1c900 65 20 6c 69 73 74 20 62 65 6c 6f 77 20 73 68 6f  e list below sho
1c910 77 73 20 61 6c 6c 20 70 6f 73 73 69 62 6c 65 20  ws all possible 
1c920 6b 65 79 77 6f 72 64 73 20 75 73 65 64 20 62 79  keywords used by
1c930 20 61 6e 79 20 62 75 69 6c 64 20 6f 66 0a 53 51   any build of.SQ
1c940 4c 69 74 65 20 72 65 67 61 72 64 6c 65 73 73 20  Lite regardless 
1c950 6f 66 20 5b 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  of [compile-time
1c960 20 6f 70 74 69 6f 6e 73 5d 2e 20 20 0a 4d 6f 73   options].  .Mos
1c970 74 20 72 65 61 73 6f 6e 61 62 6c 65 20 63 6f 6e  t reasonable con
1c980 66 69 67 75 72 61 74 69 6f 6e 73 20 75 73 65 20  figurations use 
1c990 6d 6f 72 65 20 6f 72 20 61 6c 6c 20 6f 66 20 74  more or all of t
1c9a0 68 65 73 65 20 6b 65 79 77 6f 72 64 73 2c 0a 62  hese keywords,.b
1c9b0 75 74 20 73 6f 6d 65 20 6b 65 79 77 6f 72 64 73  ut some keywords
1c9c0 20 6d 61 79 20 62 65 20 6f 6d 69 74 74 65 64 20   may be omitted 
1c9d0 77 68 65 6e 20 53 51 4c 20 6c 61 6e 67 75 61 67  when SQL languag
1c9e0 65 20 66 65 61 74 75 72 65 73 20 61 72 65 0a 64  e features are.d
1c9f0 69 73 61 62 6c 65 64 2e 0a 5e 28 52 65 67 61 72  isabled..^(Regar
1ca00 64 6c 65 73 73 20 6f 66 20 74 68 65 20 63 6f 6d  dless of the com
1ca10 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67  pile-time config
1ca20 75 72 61 74 69 6f 6e 2c 20 61 6e 79 20 69 64 65  uration, any ide
1ca30 6e 74 69 66 69 65 72 20 74 68 61 74 20 69 73 20  ntifier that is 
1ca40 6e 6f 74 20 6f 6e 0a 74 68 65 20 66 6f 6c 6c 6f  not on.the follo
1ca50 77 69 6e 67 20 3c 74 63 6c 3e 68 64 5f 70 75 74  wing <tcl>hd_put
1ca60 73 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77  s [llength $keyw
1ca70 6f 72 64 5f 6c 69 73 74 5d 3c 2f 74 63 6c 3e 20  ord_list]</tcl> 
1ca80 65 6c 65 6d 65 6e 74 0a 6c 69 73 74 20 69 73 20  element.list is 
1ca90 6e 6f 74 20 61 20 6b 65 79 77 6f 72 64 20 74 6f  not a keyword to
1caa0 20 74 68 65 20 53 51 4c 20 70 61 72 73 65 72 20   the SQL parser 
1cab0 69 6e 20 53 51 4c 69 74 65 3a 0a 3c 2f 70 3e 0a  in SQLite:.</p>.
1cac0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74  .<blockquote>.<t
1cad0 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25  able width="100%
1cae0 22 3e 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  "><tr>.<td align
1caf0 3d 22 6c 65 66 74 22 20 76 61 6c 69 67 6e 3d 22  ="left" valign="
1cb00 74 6f 70 22 20 77 69 64 74 68 3d 22 32 30 25 22  top" width="20%"
1cb10 3e 0a 3c 74 63 6c 3e 0a 73 65 74 20 6e 20 5b 6c  >.<tcl>.set n [l
1cb20 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72 64 5f  length $keyword_
1cb30 6c 69 73 74 5d 0a 73 65 74 20 6e 43 6f 6c 20 35  list].set nCol 5
1cb40 0a 73 65 74 20 6e 52 6f 77 20 5b 65 78 70 72 20  .set nRow [expr 
1cb50 7b 28 24 6e 2b 24 6e 43 6f 6c 2d 31 29 2f 24 6e  {($n+$nCol-1)/$n
1cb60 43 6f 6c 7d 5d 0a 73 65 74 20 69 20 30 0a 66 6f  Col}].set i 0.fo
1cb70 72 65 61 63 68 20 77 6f 72 64 20 24 6b 65 79 77  reach word $keyw
1cb80 6f 72 64 5f 6c 69 73 74 20 7b 0a 20 20 69 66 20  ord_list {.  if 
1cb90 7b 24 69 3d 3d 24 6e 52 6f 77 7d 20 7b 0a 20 20  {$i==$nRow} {.  
1cba0 20 20 68 64 5f 70 75 74 73 20 22 3c 2f 74 64 3e    hd_puts "</td>
1cbb0 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70  <td valign=\"top
1cbc0 5c 22 20 61 6c 69 67 6e 3d 5c 22 6c 65 66 74 5c  \" align=\"left\
1cbd0 22 20 77 69 64 74 68 3d 5c 22 32 30 25 5c 22 3e  " width=\"20%\">
1cbe0 22 0a 20 20 20 20 73 65 74 20 69 20 31 0a 20 20  ".    set i 1.  
1cbf0 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 69 6e 63  } else {.    inc
1cc00 72 20 69 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74  r i.  }.  hd_put
1cc10 73 20 22 24 77 6f 72 64 3c 62 72 3e 5c 6e 22 0a  s "$word<br>\n".
1cc20 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 64 3e 3c 2f  }.</tcl>.</td></
1cc30 74 72 3e 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f  tr></table></blo
1cc40 63 6b 71 75 6f 74 65 3e 29 5e 0a                 ckquote>)^.