Documentation Source Text

Hex Artifact Content
Login

Artifact 68617da1d1994408ab10b02aa0f9bec6abed1a39:


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 0a  g restrictions:.
14b0: 3c 75 6c 3e 0a 3c 6c 69 3e 54 68 65 20 63 6f 6c  <ul>.<li>The col
14c0: 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 68 61 76 65  umn may not have
14d0: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f   a PRIMARY KEY o
14e0: 72 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  r UNIQUE constra
14f0: 69 6e 74 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 54 68  int.</li>.<li>Th
1500: 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74  e column may not
1510: 20 68 61 76 65 20 61 20 64 65 66 61 75 6c 74 20   have a default 
1520: 76 61 6c 75 65 20 6f 66 20 43 55 52 52 45 4e 54  value of CURRENT
1530: 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44  _TIME, CURRENT_D
1540: 41 54 45 20 0a 20 20 20 20 6f 72 20 43 55 52 52  ATE .    or CURR
1550: 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2e 3c 2f  ENT_TIMESTAMP.</
1560: 6c 69 3e 0a 3c 6c 69 3e 49 66 20 61 20 4e 4f 54  li>.<li>If a NOT
1570: 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
1580: 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74   is specified, t
1590: 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d  hen the column m
15a0: 75 73 74 20 68 61 76 65 20 61 0a 20 20 20 20 64  ust have a.    d
15b0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 74 68  efault value oth
15c0: 65 72 20 74 68 61 6e 20 4e 55 4c 4c 2e 0a 3c 6c  er than NULL..<l
15d0: 69 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b  i>^If [foreign k
15e0: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20  ey constraints] 
15f0: 61 72 65 20 5b 66 6f 72 65 69 67 6e 5f 6b 65 79  are [foreign_key
1600: 73 20 70 72 61 67 6d 61 20 7c 20 65 6e 61 62 6c  s pragma | enabl
1610: 65 64 5d 20 61 6e 64 0a 20 20 20 20 61 20 63 6f  ed] and.    a co
1620: 6c 75 6d 6e 20 77 69 74 68 20 61 20 5b 66 6f 72  lumn with a [for
1630: 65 69 67 6e 2d 6b 65 79 2d 63 6c 61 75 73 65 20  eign-key-clause 
1640: 7c 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  | REFERENCES cla
1650: 75 73 65 5d 0a 20 20 20 20 69 73 20 61 64 64 65  use].    is adde
1660: 64 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 75  d, the column mu
1670: 73 74 20 68 61 76 65 20 61 20 64 65 66 61 75 6c  st have a defaul
1680: 74 20 76 61 6c 75 65 20 6f 66 20 4e 55 4c 4c 2e  t value of NULL.
1690: 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 5e 4e 6f  .</ul>)^..<p>^No
16a0: 74 65 20 61 6c 73 6f 20 74 68 61 74 20 77 68 65  te also that whe
16b0: 6e 20 61 64 64 69 6e 67 20 61 20 43 48 45 43 4b  n adding a CHECK
16c0: 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 74 68 65   constraint, the
16d0: 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
16e0: 74 0a 69 73 20 6e 6f 74 20 74 65 73 74 65 64 20  t.is not tested 
16f0: 61 67 61 69 6e 73 74 20 70 72 65 65 78 69 73 74  against preexist
1700: 69 6e 67 20 72 6f 77 73 20 6f 66 20 74 68 65 20  ing rows of the 
1710: 74 61 62 6c 65 2e 0a 5e 54 68 69 73 20 63 61 6e  table..^This can
1720: 20 72 65 73 75 6c 74 20 69 6e 20 61 20 74 61 62   result in a tab
1730: 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  le that contains
1740: 20 64 61 74 61 20 74 68 61 74 0a 69 73 20 69 6e   data that.is in
1750: 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 66 20 74 68   violation of th
1760: 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  e CHECK constrai
1770: 6e 74 2e 20 20 46 75 74 75 72 65 20 76 65 72 73  nt.  Future vers
1780: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 6d  ions of SQLite m
1790: 69 67 68 74 0a 63 68 61 6e 67 65 20 74 6f 20 76  ight.change to v
17a0: 61 6c 69 64 61 74 65 20 43 48 45 43 4b 20 63 6f  alidate CHECK co
17b0: 6e 73 74 72 61 69 6e 74 73 20 61 73 20 74 68 65  nstraints as the
17c0: 79 20 61 72 65 20 61 64 64 65 64 2e 3c 2f 70 3e  y are added.</p>
17d0: 0a 0a 3c 70 3e 20 5e 54 68 65 20 65 78 65 63 75  ..<p> ^The execu
17e0: 74 69 6f 6e 20 74 69 6d 65 20 6f 66 20 74 68 65  tion time of the
17f0: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d   ALTER TABLE com
1800: 6d 61 6e 64 20 69 73 20 69 6e 64 65 70 65 6e 64  mand is independ
1810: 65 6e 74 20 6f 66 0a 74 68 65 20 61 6d 6f 75 6e  ent of.the amoun
1820: 74 20 6f 66 20 64 61 74 61 20 69 6e 20 74 68 65  t of data in the
1830: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 41 4c 54   table.  The ALT
1840: 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  ER TABLE command
1850: 20 72 75 6e 73 20 61 73 20 71 75 69 63 6b 6c 79   runs as quickly
1860: 0a 6f 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68  .on a table with
1870: 20 31 30 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73   10 million rows
1880: 20 61 73 20 69 74 20 64 6f 65 73 20 6f 6e 20 61   as it does on a
1890: 20 74 61 62 6c 65 20 77 69 74 68 20 31 20 72 6f   table with 1 ro
18a0: 77 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 41 66 74 65  w..</p>..<p>Afte
18b0: 72 20 41 44 44 20 43 4f 4c 55 4d 4e 20 68 61 73  r ADD COLUMN has
18c0: 20 62 65 65 6e 20 72 75 6e 20 6f 6e 20 61 20 64   been run on a d
18d0: 61 74 61 62 61 73 65 2c 20 74 68 61 74 20 64 61  atabase, that da
18e0: 74 61 62 61 73 65 20 77 69 6c 6c 20 6e 6f 74 0a  tabase will not.
18f0: 62 65 20 72 65 61 64 61 62 6c 65 20 62 79 20 53  be readable by S
1900: 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e  QLite version 3.
1910: 31 2e 33 20 61 6e 64 20 65 61 72 6c 69 65 72 2e  1.3 and earlier.
1920: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </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 0a 53 65 63 74 69  ##########.Secti
1980: 6f 6e 20 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61  on {ANALYZE} ana
1990: 6c 79 7a 65 20 41 4e 41 4c 59 5a 45 0a 0a 42 75  lyze ANALYZE..Bu
19a0: 62 62 6c 65 44 69 61 67 72 61 6d 20 61 6e 61 6c  bbleDiagram anal
19b0: 79 7a 65 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c  yze-stmt 1.</tcl
19c0: 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 4e 41 4c  >..<p> ^The ANAL
19d0: 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 67 61 74 68  YZE command gath
19e0: 65 72 73 20 73 74 61 74 69 73 74 69 63 73 20 61  ers statistics a
19f0: 62 6f 75 74 20 69 6e 64 69 63 65 73 20 61 6e 64  bout indices and
1a00: 20 73 74 6f 72 65 73 20 74 68 65 6d 0a 69 6e 20   stores them.in 
1a10: 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 73  a special tables
1a20: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
1a30: 20 77 68 65 72 65 20 74 68 65 20 71 75 65 72 79   where the query
1a40: 20 6f 70 74 69 6d 69 7a 65 72 20 63 61 6e 20 75   optimizer can u
1a50: 73 65 0a 74 68 65 6d 20 74 6f 20 68 65 6c 70 20  se.them to help 
1a60: 6d 61 6b 65 20 62 65 74 74 65 72 20 69 6e 64 65  make better inde
1a70: 78 20 63 68 6f 69 63 65 73 2e 0a 5e 49 66 20 6e  x choices..^If n
1a80: 6f 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  o arguments are 
1a90: 67 69 76 65 6e 2c 20 61 6c 6c 20 69 6e 64 69 63  given, all indic
1aa0: 65 73 20 69 6e 20 61 6c 6c 20 61 74 74 61 63 68  es in all attach
1ab0: 65 64 20 64 61 74 61 62 61 73 65 73 20 61 72 65  ed databases are
1ac0: 0a 61 6e 61 6c 79 7a 65 64 2e 20 20 5e 49 66 20  .analyzed.  ^If 
1ad0: 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20  a database name 
1ae0: 69 73 20 67 69 76 65 6e 20 61 73 20 74 68 65 20  is given as the 
1af0: 61 72 67 75 6d 65 6e 74 2c 20 61 6c 6c 20 69 6e  argument, all in
1b00: 64 69 63 65 73 0a 69 6e 20 74 68 61 74 20 6f 6e  dices.in that on
1b10: 65 20 64 61 74 61 62 61 73 65 20 61 72 65 20 61  e database are a
1b20: 6e 61 6c 79 7a 65 64 2e 20 20 5e 49 66 20 74 68  nalyzed.  ^If th
1b30: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
1b40: 74 61 62 6c 65 20 6e 61 6d 65 2c 0a 74 68 65 6e  table name,.then
1b50: 20 6f 6e 6c 79 20 69 6e 64 69 63 65 73 20 61 73   only indices as
1b60: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
1b70: 61 74 20 6f 6e 65 20 74 61 62 6c 65 20 61 72 65  at one table are
1b80: 20 61 6e 61 6c 79 7a 65 64 2e 3c 2f 70 3e 0a 0a   analyzed.</p>..
1b90: 3c 70 3e 20 5e 54 68 65 20 64 65 66 61 75 6c 74  <p> ^The default
1ba0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
1bb0: 73 74 6f 72 65 73 20 61 6c 6c 20 73 74 61 74 69  stores all stati
1bc0: 73 74 69 63 73 20 69 6e 20 61 20 73 69 6e 67 6c  stics in a singl
1bd0: 65 0a 74 61 62 6c 65 20 6e 61 6d 65 64 20 3c 62  e.table named <b
1be0: 3e 73 71 6c 69 74 65 5f 73 74 61 74 31 3c 2f 62  >sqlite_stat1</b
1bf0: 3e 2e 20 20 5e 49 66 20 53 51 4c 69 74 65 20 69  >.  ^If SQLite i
1c00: 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  s compiled with 
1c10: 74 68 65 0a 5b 53 51 4c 49 54 45 5f 45 4e 41 42  the.[SQLITE_ENAB
1c20: 4c 45 5f 53 54 41 54 32 5d 20 6f 70 74 69 6f 6e  LE_STAT2] option
1c30: 2c 20 74 68 65 6e 20 61 64 64 69 74 69 6f 6e 61  , then additiona
1c40: 6c 20 68 69 73 74 6f 67 72 61 6d 20 64 61 74 61  l histogram data
1c50: 20 69 73 0a 63 6f 6c 6c 65 63 74 65 64 20 61 6e   is.collected an
1c60: 64 20 73 74 6f 72 65 64 20 69 6e 20 3c 62 3e 73  d stored in <b>s
1c70: 71 6c 69 74 65 5f 73 74 61 74 32 3c 2f 62 3e 2e  qlite_stat2</b>.
1c80: 0a 46 75 74 75 72 65 20 65 6e 68 61 6e 63 65 6d  .Future enhancem
1c90: 65 6e 74 73 20 6d 61 79 20 63 72 65 61 74 65 0a  ents may create.
1ca0: 61 64 64 69 74 69 6f 6e 61 6c 20 74 61 62 6c 65  additional table
1cb0: 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  s with the same 
1cc0: 6e 61 6d 65 20 70 61 74 74 65 72 6e 20 65 78 63  name pattern exc
1cd0: 65 70 74 20 77 69 74 68 20 74 68 65 20 22 31 22  ept with the "1"
1ce0: 0a 6f 72 20 22 32 22 20 63 68 61 6e 67 65 64 20  .or "2" changed 
1cf0: 74 6f 20 61 20 64 69 66 66 65 72 65 6e 74 20 64  to a different d
1d00: 69 67 69 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e  igit.</p>..<p> ^
1d10: 54 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d  The [DROP TABLE]
1d20: 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 0a 6e 6f   command does.no
1d30: 74 20 77 6f 72 6b 20 6f 6e 20 74 68 65 20 3c 62  t work on the <b
1d40: 3e 73 71 6c 69 74 65 5f 73 74 61 74 31 3c 2f 62  >sqlite_stat1</b
1d50: 3e 20 6f 72 20 3c 62 3e 73 71 6c 69 74 65 5f 73  > or <b>sqlite_s
1d60: 74 61 74 32 3c 2f 62 3e 20 74 61 62 6c 65 73 2c  tat2</b> tables,
1d70: 0a 62 75 74 20 61 6c 6c 20 74 68 65 20 63 6f 6e  .but all the con
1d80: 74 65 6e 74 20 6f 66 20 74 68 6f 73 65 20 74 61  tent of those ta
1d90: 62 6c 65 73 20 63 61 6e 20 62 65 20 71 75 65 72  bles can be quer
1da0: 69 65 64 20 75 73 69 6e 67 20 5b 53 45 4c 45 43  ied using [SELEC
1db0: 54 5d 0a 61 6e 64 20 63 61 6e 20 62 65 20 64 65  T].and can be de
1dc0: 6c 65 74 65 64 2c 20 61 75 67 6d 65 6e 74 65 64  leted, augmented
1dd0: 2c 20 6f 72 20 6d 6f 64 69 66 69 65 64 20 75 73  , or modified us
1de0: 69 6e 67 20 74 68 65 20 5b 44 45 4c 45 54 45 5d  ing the [DELETE]
1df0: 2c 0a 5b 49 4e 53 45 52 54 5d 2c 20 61 6e 64 20  ,.[INSERT], and 
1e00: 5b 55 50 44 41 54 45 5d 20 63 6f 6d 6d 61 6e 64  [UPDATE] command
1e10: 73 2e 0a 41 70 70 72 6f 70 72 69 61 74 65 20 63  s..Appropriate c
1e20: 61 72 65 20 73 68 6f 75 6c 64 20 62 65 20 75 73  are should be us
1e30: 65 64 20 77 68 65 6e 20 63 68 61 6e 67 69 6e 67  ed when changing
1e40: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
1e50: 74 68 65 20 73 74 61 74 69 73 74 69 63 73 0a 74  the statistics.t
1e60: 61 62 6c 65 73 20 61 73 20 69 6e 76 61 6c 69 64  ables as invalid
1e70: 20 63 6f 6e 74 65 6e 74 20 63 61 6e 20 63 61 75   content can cau
1e80: 73 65 20 53 51 4c 69 74 65 20 74 6f 20 73 65 6c  se SQLite to sel
1e90: 65 63 74 20 69 6e 65 66 66 69 63 69 65 6e 74 0a  ect inefficient.
1ea0: 71 75 65 72 79 20 70 6c 61 6e 73 2e 20 20 47 65  query plans.  Ge
1eb0: 6e 65 72 61 6c 6c 79 20 73 70 65 61 6b 69 6e 67  nerally speaking
1ec0: 2c 20 6f 6e 65 20 73 68 6f 75 6c 64 20 6e 6f 74  , one should not
1ed0: 20 6d 6f 64 69 66 79 20 74 68 65 20 63 6f 6e 74   modify the cont
1ee0: 65 6e 74 20 6f 66 0a 74 68 65 20 73 74 61 74 69  ent of.the stati
1ef0: 73 74 69 63 73 20 74 61 62 6c 65 73 20 62 79 20  stics tables by 
1f00: 61 6e 79 20 6d 65 63 68 61 6e 69 73 6d 20 6f 74  any mechanism ot
1f10: 68 65 72 20 74 68 61 6e 20 69 6e 76 6f 6b 69 6e  her than invokin
1f20: 67 20 74 68 65 0a 41 4e 41 4c 59 5a 45 20 63 6f  g the.ANALYZE co
1f30: 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20  mmand.</p>..<p> 
1f40: 5e 53 74 61 74 69 73 74 69 63 73 20 67 61 74 68  ^Statistics gath
1f50: 65 72 65 64 20 62 79 20 41 4e 41 4c 59 5a 45 20  ered by ANALYZE 
1f60: 61 72 65 20 3c 75 3e 6e 6f 74 3c 2f 75 3e 20 61  are <u>not</u> a
1f70: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75 70 64  utomatically upd
1f80: 61 74 65 64 20 61 73 0a 74 68 65 20 63 6f 6e 74  ated as.the cont
1f90: 65 6e 74 20 6f 66 20 74 68 65 20 64 61 74 61 62  ent of the datab
1fa0: 61 73 65 20 63 68 61 6e 67 65 73 2e 20 20 49 66  ase changes.  If
1fb0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
1fc0: 74 68 65 20 64 61 74 61 62 61 73 65 0a 63 68 61  the database.cha
1fd0: 6e 67 65 73 20 73 69 67 6e 69 66 69 63 61 6e 74  nges significant
1fe0: 6c 79 2c 20 6f 72 20 69 66 20 74 68 65 20 64 61  ly, or if the da
1ff0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68  tabase schema ch
2000: 61 6e 67 65 73 2c 20 74 68 65 6e 20 6f 6e 65 20  anges, then one 
2010: 73 68 6f 75 6c 64 0a 63 6f 6e 73 69 64 65 72 20  should.consider 
2020: 72 65 72 75 6e 6e 69 6e 67 20 74 68 65 20 41 4e  rerunning the AN
2030: 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 69 6e  ALYZE command in
2040: 20 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74 65   order to update
2050: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 2e   the statistics.
2060: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </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 0a 53 65 63 74 69  ##########.Secti
20c0: 6f 6e 20 7b 41 54 54 41 43 48 20 44 41 54 41 42  on {ATTACH DATAB
20d0: 41 53 45 7d 20 61 74 74 61 63 68 20 2a 41 54 54  ASE} attach *ATT
20e0: 41 43 48 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  ACH..BubbleDiagr
20f0: 61 6d 20 61 74 74 61 63 68 2d 73 74 6d 74 20 31  am attach-stmt 1
2100: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 54 68  .</tcl>..<p> ^Th
2110: 65 20 41 54 54 41 43 48 20 44 41 54 41 42 41 53  e ATTACH DATABAS
2120: 45 20 73 74 61 74 65 6d 65 6e 74 20 61 64 64 73  E statement adds
2130: 20 61 6e 6f 74 68 65 72 20 64 61 74 61 62 61 73   another databas
2140: 65 20 0a 66 69 6c 65 20 74 6f 20 74 68 65 20 63  e .file to the c
2150: 75 72 72 65 6e 74 20 5b 64 61 74 61 62 61 73 65  urrent [database
2160: 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 2e 20 0a 5e   connection]. .^
2170: 54 68 65 20 64 61 74 61 62 61 73 65 2d 6e 61 6d  The database-nam
2180: 65 73 20 27 6d 61 69 6e 27 20 61 6e 64 20 0a 27  es 'main' and .'
2190: 74 65 6d 70 27 20 72 65 66 65 72 20 74 6f 20 74  temp' refer to t
21a0: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
21b0: 20 61 6e 64 20 74 68 65 20 64 61 74 61 62 61 73   and the databas
21c0: 65 20 75 73 65 64 20 66 6f 72 20 0a 74 65 6d 70  e used for .temp
21d0: 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 5e  orary tables.  ^
21e0: 54 68 65 20 6d 61 69 6e 20 61 6e 64 20 74 65 6d  The main and tem
21f0: 70 20 64 61 74 61 62 61 73 65 73 20 63 61 6e 6e  p databases cann
2200: 6f 74 20 62 65 20 61 74 74 61 63 68 65 64 20 6f  ot be attached o
2210: 72 0a 64 65 74 61 63 68 65 64 2e 3c 2f 70 3e 0a  r.detached.</p>.
2220: 0a 3c 70 3e 20 5e 59 6f 75 20 63 61 6e 6e 6f 74  .<p> ^You cannot
2230: 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 74 61   create a new ta
2240: 62 6c 65 20 77 69 74 68 20 74 68 65 20 73 61 6d  ble with the sam
2250: 65 20 6e 61 6d 65 20 61 73 20 61 20 74 61 62 6c  e name as a tabl
2260: 65 20 69 6e 20 0a 61 6e 20 61 74 74 61 63 68 65  e in .an attache
2270: 64 20 64 61 74 61 62 61 73 65 2c 20 62 75 74 20  d database, but 
2280: 79 6f 75 20 63 61 6e 20 61 74 74 61 63 68 20 61  you can attach a
2290: 20 64 61 74 61 62 61 73 65 20 77 68 69 63 68 20   database which 
22a0: 63 6f 6e 74 61 69 6e 73 0a 74 61 62 6c 65 73 20  contains.tables 
22b0: 77 68 6f 73 65 20 6e 61 6d 65 73 20 61 72 65 20  whose names are 
22c0: 64 75 70 6c 69 63 61 74 65 73 20 6f 66 20 74 61  duplicates of ta
22d0: 62 6c 65 73 20 69 6e 20 74 68 65 20 6d 61 69 6e  bles in the main
22e0: 20 64 61 74 61 62 61 73 65 2e 20 20 5e 49 66 0a   database.  ^If.
22f0: 74 68 65 20 73 79 73 74 65 6d 20 69 73 20 6e 6f  the system is no
2300: 74 20 72 75 6e 6e 69 6e 67 20 69 6e 20 5b 73 68  t running in [sh
2310: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 5d  ared cache mode]
2320: 2c 20 69 74 20 69 73 20 61 6c 73 6f 20 70 65 72  , it is also per
2330: 6d 69 73 73 69 62 6c 65 20 0a 74 6f 20 61 74 74  missible .to att
2340: 61 63 68 20 74 68 65 20 73 61 6d 65 20 64 61 74  ach the same dat
2350: 61 62 61 73 65 20 66 69 6c 65 20 6d 75 6c 74 69  abase file multi
2360: 70 6c 65 20 74 69 6d 65 73 2e 3c 2f 70 3e 0a 0a  ple times.</p>..
2370: 3c 70 3e 20 5e 28 54 61 62 6c 65 73 20 69 6e 20  <p> ^(Tables in 
2380: 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
2390: 62 61 73 65 20 63 61 6e 20 62 65 20 72 65 66 65  base can be refe
23a0: 72 72 65 64 20 74 6f 20 75 73 69 6e 67 20 74 68  rred to using th
23b0: 65 20 73 79 6e 74 61 78 20 0a 3c 69 3e 64 61 74  e syntax .<i>dat
23c0: 61 62 61 73 65 2d 6e 61 6d 65 2e 74 61 62 6c 65  abase-name.table
23d0: 2d 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 20 20 5e 49  -name</i>.)^  ^I
23e0: 66 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  f the name of th
23f0: 65 20 74 61 62 6c 65 20 69 73 20 75 6e 69 71 75  e table is uniqu
2400: 65 0a 61 63 72 6f 73 73 20 61 6c 6c 20 61 74 74  e.across all att
2410: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20  ached databases 
2420: 61 6e 64 20 74 68 65 20 6d 61 69 6e 20 61 6e 64  and the main and
2430: 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 73 2c   temp databases,
2440: 20 74 68 65 6e 20 74 68 65 0a 3c 69 3e 64 61 74   then the.<i>dat
2450: 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 70  abase-name</i> p
2460: 72 65 66 69 78 20 69 73 20 6e 6f 74 20 72 65 71  refix is not req
2470: 75 69 72 65 64 2e 20 20 5e 57 68 65 6e 20 61 20  uired.  ^When a 
2480: 64 61 74 61 62 61 73 65 20 69 73 20 61 74 74 61  database is atta
2490: 63 68 65 64 2c 20 0a 61 6c 6c 20 74 61 62 6c 65  ched, .all table
24a0: 73 20 77 68 69 63 68 20 64 6f 6e 27 74 20 68 61  s which don't ha
24b0: 76 65 20 64 75 70 6c 69 63 61 74 65 20 6e 61 6d  ve duplicate nam
24c0: 65 73 20 62 65 63 6f 6d 65 20 74 68 65 20 64 65  es become the de
24d0: 66 61 75 6c 74 20 74 61 62 6c 65 0a 6f 66 20 74  fault table.of t
24e0: 68 61 74 20 6e 61 6d 65 2e 20 20 5e 41 6e 79 20  hat name.  ^Any 
24f0: 74 61 62 6c 65 73 20 6f 66 20 74 68 61 74 20 6e  tables of that n
2500: 61 6d 65 20 61 74 74 61 63 68 65 64 20 61 66 74  ame attached aft
2510: 65 72 77 61 72 64 73 20 72 65 71 75 69 72 65 20  erwards require 
2520: 74 68 65 0a 64 61 74 61 62 61 73 65 20 70 72 65  the.database pre
2530: 66 69 78 2e 20 5e 49 66 20 74 68 65 20 64 65 66  fix. ^If the def
2540: 61 75 6c 74 20 74 61 62 6c 65 20 6f 66 20 61 20  ault table of a 
2550: 67 69 76 65 6e 20 6e 61 6d 65 20 69 73 20 64 65  given name is de
2560: 74 61 63 68 65 64 2c 20 74 68 65 6e 0a 74 68 65  tached, then.the
2570: 20 6c 61 73 74 20 74 61 62 6c 65 20 6f 66 20 74   last table of t
2580: 68 61 74 20 6e 61 6d 65 20 61 74 74 61 63 68 65  hat name attache
2590: 64 20 62 65 63 6f 6d 65 73 20 74 68 65 20 6e 65  d becomes the ne
25a0: 77 20 64 65 66 61 75 6c 74 2e 3c 2f 70 3e 0a 0a  w default.</p>..
25b0: 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e  <p>.^Transaction
25c0: 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74  s involving mult
25d0: 69 70 6c 65 20 61 74 74 61 63 68 65 64 20 64 61  iple attached da
25e0: 74 61 62 61 73 65 73 20 61 72 65 20 61 74 6f 6d  tabases are atom
25f0: 69 63 2c 0a 61 73 73 75 6d 69 6e 67 20 74 68 61  ic,.assuming tha
2600: 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  t the main datab
2610: 61 73 65 20 69 73 20 6e 6f 74 20 22 5b 3a 6d 65  ase is not "[:me
2620: 6d 6f 72 79 3a 5d 22 2e 20 20 5e 28 49 66 20 74  mory:]".  ^(If t
2630: 68 65 20 6d 61 69 6e 0a 64 61 74 61 62 61 73 65  he main.database
2640: 20 69 73 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 74   is ":memory:" t
2650: 68 65 6e 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e  hen .transaction
2660: 73 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65  s continue to be
2670: 20 61 74 6f 6d 69 63 20 77 69 74 68 69 6e 20 65   atomic within e
2680: 61 63 68 20 69 6e 64 69 76 69 64 75 61 6c 0a 64  ach individual.d
2690: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 42 75  atabase file. Bu
26a0: 74 20 69 66 20 74 68 65 20 68 6f 73 74 20 63 6f  t if the host co
26b0: 6d 70 75 74 65 72 20 63 72 61 73 68 65 73 20 69  mputer crashes i
26c0: 6e 20 74 68 65 20 6d 69 64 64 6c 65 0a 6f 66 20  n the middle.of 
26d0: 61 20 5b 43 4f 4d 4d 49 54 5d 20 77 68 65 72 65  a [COMMIT] where
26e0: 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 64 61 74   two or more dat
26f0: 61 62 61 73 65 20 66 69 6c 65 73 20 61 72 65 20  abase files are 
2700: 75 70 64 61 74 65 64 2c 0a 73 6f 6d 65 20 6f 66  updated,.some of
2710: 20 74 68 6f 73 65 20 66 69 6c 65 73 20 6d 69 67   those files mig
2720: 68 74 20 67 65 74 20 74 68 65 20 63 68 61 6e 67  ht get the chang
2730: 65 73 20 77 68 65 72 65 20 6f 74 68 65 72 73 0a  es where others.
2740: 6d 69 67 68 74 20 6e 6f 74 2e 29 5e 0a 3c 2f 70  might not.)^.</p
2750: 3e 0a 0a 3c 70 3e 20 5e 54 68 65 72 65 20 69 73  >..<p> ^There is
2760: 20 61 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20   a compile-time 
2770: 6c 69 6d 69 74 20 6f 66 20 5b 53 51 4c 49 54 45  limit of [SQLITE
2780: 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 5d 0a 61  _MAX_ATTACHED].a
2790: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
27a0: 20 66 69 6c 65 73 2e 3c 2f 70 3e 0a 0a 3c 74 63   files.</p>..<tc
27b0: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
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 0a 53 65 63 74 69 6f 6e 20 7b 42 45 47 49  ##.Section {BEGI
2810: 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74  N TRANSACTION} t
2820: 72 61 6e 73 61 63 74 69 6f 6e 20 7b 2a 42 45 47  ransaction {*BEG
2830: 49 4e 20 43 4f 4d 4d 49 54 20 52 4f 4c 4c 42 41  IN COMMIT ROLLBA
2840: 43 4b 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  CK}..BubbleDiagr
2850: 61 6d 20 62 65 67 69 6e 2d 73 74 6d 74 0a 42 75  am begin-stmt.Bu
2860: 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d 6d  bbleDiagram comm
2870: 69 74 2d 73 74 6d 74 0a 42 75 62 62 6c 65 44 69  it-stmt.BubbleDi
2880: 61 67 72 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d 73  agram rollback-s
2890: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a  tmt.</tcl>..<p>.
28a0: 5e 4e 6f 20 63 68 61 6e 67 65 73 20 63 61 6e 20  ^No changes can 
28b0: 62 65 20 6d 61 64 65 20 74 6f 20 74 68 65 20 64  be made to the d
28c0: 61 74 61 62 61 73 65 20 65 78 63 65 70 74 20 77  atabase except w
28d0: 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
28e0: 69 6f 6e 2e 0a 5e 41 6e 79 20 63 6f 6d 6d 61 6e  ion..^Any comman
28f0: 64 20 74 68 61 74 20 63 68 61 6e 67 65 73 20 74  d that changes t
2900: 68 65 20 64 61 74 61 62 61 73 65 20 28 62 61 73  he database (bas
2910: 69 63 61 6c 6c 79 2c 20 61 6e 79 20 53 51 4c 20  ically, any SQL 
2920: 63 6f 6d 6d 61 6e 64 0a 6f 74 68 65 72 20 74 68  command.other th
2930: 61 6e 20 5b 53 45 4c 45 43 54 5d 29 20 77 69 6c  an [SELECT]) wil
2940: 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  l automatically 
2950: 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74  start a transact
2960: 69 6f 6e 20 69 66 0a 6f 6e 65 20 69 73 20 6e 6f  ion if.one is no
2970: 74 20 61 6c 72 65 61 64 79 20 69 6e 20 65 66 66  t already in eff
2980: 65 63 74 2e 20 20 5e 41 75 74 6f 6d 61 74 69 63  ect.  ^Automatic
2990: 61 6c 6c 79 20 73 74 61 72 74 65 64 20 74 72 61  ally started tra
29a0: 6e 73 61 63 74 69 6f 6e 73 0a 61 72 65 20 63 6f  nsactions.are co
29b0: 6d 6d 69 74 74 65 64 20 77 68 65 6e 20 74 68 65  mmitted when the
29c0: 20 6c 61 73 74 20 71 75 65 72 79 20 66 69 6e 69   last query fini
29d0: 73 68 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  shes..</p>..<p>.
29e0: 5e 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 61  ^Transactions ca
29f0: 6e 20 62 65 20 73 74 61 72 74 65 64 20 6d 61 6e  n be started man
2a00: 75 61 6c 6c 79 20 75 73 69 6e 67 20 74 68 65 20  ually using the 
2a10: 42 45 47 49 4e 0a 63 6f 6d 6d 61 6e 64 2e 20 20  BEGIN.command.  
2a20: 5e 28 53 75 63 68 20 74 72 61 6e 73 61 63 74 69  ^(Such transacti
2a30: 6f 6e 73 20 75 73 75 61 6c 6c 79 20 70 65 72 73  ons usually pers
2a40: 69 73 74 20 75 6e 74 69 6c 20 74 68 65 20 6e 65  ist until the ne
2a50: 78 74 0a 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c  xt.COMMIT or ROL
2a60: 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20 20  LBACK command.  
2a70: 42 75 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f  But a transactio
2a80: 6e 20 77 69 6c 6c 20 61 6c 73 6f 20 0a 52 4f 4c  n will also .ROL
2a90: 4c 42 41 43 4b 20 69 66 20 74 68 65 20 64 61 74  LBACK if the dat
2aa0: 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20  abase is closed 
2ab0: 6f 72 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f  or if an error o
2ac0: 63 63 75 72 73 0a 61 6e 64 20 74 68 65 20 52 4f  ccurs.and the RO
2ad0: 4c 4c 42 41 43 4b 20 63 6f 6e 66 6c 69 63 74 20  LLBACK conflict 
2ae0: 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
2af0: 69 74 68 6d 20 69 73 20 73 70 65 63 69 66 69 65  ithm is specifie
2b00: 64 2e 29 5e 0a 53 65 65 20 74 68 65 20 64 6f 63  d.)^.See the doc
2b10: 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 74 68  umentation on th
2b20: 65 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 0a  e [ON CONFLICT].
2b30: 63 6c 61 75 73 65 20 66 6f 72 20 61 64 64 69 74  clause for addit
2b40: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
2b50: 6e 20 61 62 6f 75 74 20 74 68 65 20 52 4f 4c 4c  n about the ROLL
2b60: 42 41 43 4b 0a 63 6f 6e 66 6c 69 63 74 20 72 65  BACK.conflict re
2b70: 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
2b80: 68 6d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 45  hm..</p>..<p>.^E
2b90: 4e 44 20 54 52 41 4e 53 41 43 54 49 4f 4e 20 69  ND TRANSACTION i
2ba0: 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 43  s an alias for C
2bb0: 4f 4d 4d 49 54 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  OMMIT..</p>..<p>
2bc0: 20 5e 28 54 72 61 6e 73 61 63 74 69 6f 6e 73 20   ^(Transactions 
2bd0: 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 42 45  created using BE
2be0: 47 49 4e 2e 2e 2e 43 4f 4d 4d 49 54 20 64 6f 20  GIN...COMMIT do 
2bf0: 6e 6f 74 20 6e 65 73 74 2e 29 5e 0a 5e 46 6f 72  not nest.)^.^For
2c00: 20 6e 65 73 74 65 64 20 74 72 61 6e 73 61 63 74   nested transact
2c10: 69 6f 6e 73 2c 20 75 73 65 20 74 68 65 20 5b 53  ions, use the [S
2c20: 41 56 45 50 4f 49 4e 54 5d 20 61 6e 64 20 5b 52  AVEPOINT] and [R
2c30: 45 4c 45 41 53 45 5d 20 63 6f 6d 6d 61 6e 64 73  ELEASE] commands
2c40: 2e 0a 54 68 65 20 22 54 4f 20 53 41 56 45 50 4f  ..The "TO SAVEPO
2c50: 49 4e 54 20 3c 69 3e 6e 61 6d 65 3c 2f 69 3e 22  INT <i>name</i>"
2c60: 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 52   clause of the R
2c70: 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20  OLLBACK command 
2c80: 73 68 6f 77 6e 0a 69 6e 20 74 68 65 20 73 79 6e  shown.in the syn
2c90: 74 61 78 20 64 69 61 67 72 61 6d 20 61 62 6f 76  tax diagram abov
2ca0: 65 20 69 73 20 6f 6e 6c 79 20 61 70 70 6c 69 63  e is only applic
2cb0: 61 62 6c 65 20 74 6f 20 5b 53 41 56 45 50 4f 49  able to [SAVEPOI
2cc0: 4e 54 5d 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73  NT].transactions
2cd0: 2e 20 20 5e 41 6e 20 61 74 74 65 6d 70 74 20 74  .  ^An attempt t
2ce0: 6f 20 69 6e 76 6f 6b 65 20 74 68 65 20 42 45 47  o invoke the BEG
2cf0: 49 4e 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 69  IN command withi
2d00: 6e 0a 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  n.a transaction 
2d10: 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61  will fail with a
2d20: 6e 20 65 72 72 6f 72 2c 20 72 65 67 61 72 64 6c  n error, regardl
2d30: 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 0a 74  ess of whether.t
2d40: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77  he transaction w
2d50: 61 73 20 73 74 61 72 74 65 64 20 62 79 20 5b 53  as started by [S
2d60: 41 56 45 50 4f 49 4e 54 5d 20 6f 72 20 61 20 70  AVEPOINT] or a p
2d70: 72 69 6f 72 20 42 45 47 49 4e 2e 0a 5e 54 68 65  rior BEGIN..^The
2d80: 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 20   COMMIT command 
2d90: 61 6e 64 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  and the ROLLBACK
2da0: 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74   command without
2db0: 20 74 68 65 20 54 4f 20 63 6c 61 75 73 65 0a 77   the TO clause.w
2dc0: 6f 72 6b 20 74 68 65 20 73 61 6d 65 20 6f 6e 20  ork the same on 
2dd0: 5b 53 41 56 45 50 4f 49 4e 54 5d 20 74 72 61 6e  [SAVEPOINT] tran
2de0: 73 61 63 74 69 6f 6e 73 20 61 73 20 74 68 65 79  sactions as they
2df0: 20 64 6f 20 77 69 74 68 20 74 72 61 6e 73 61 63   do with transac
2e00: 74 69 6f 6e 73 0a 73 74 61 72 74 65 64 20 62 79  tions.started by
2e10: 20 42 45 47 49 4e 2e 3c 2f 70 3e 0a 0a 3c 70 3e   BEGIN.</p>..<p>
2e20: 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63  .^Transactions c
2e30: 61 6e 20 62 65 20 64 65 66 65 72 72 65 64 2c 20  an be deferred, 
2e40: 69 6d 6d 65 64 69 61 74 65 2c 20 6f 72 20 65 78  immediate, or ex
2e50: 63 6c 75 73 69 76 65 2e 20 20 0a 5e 54 68 65 20  clusive.  .^The 
2e60: 64 65 66 61 75 6c 74 20 74 72 61 6e 73 61 63 74  default transact
2e70: 69 6f 6e 20 62 65 68 61 76 69 6f 72 20 69 73 20  ion behavior is 
2e80: 64 65 66 65 72 72 65 64 2e 0a 5e 44 65 66 65 72  deferred..^Defer
2e90: 72 65 64 20 6d 65 61 6e 73 20 74 68 61 74 20 6e  red means that n
2ea0: 6f 20 6c 6f 63 6b 73 20 61 72 65 20 61 63 71 75  o locks are acqu
2eb0: 69 72 65 64 0a 6f 6e 20 74 68 65 20 64 61 74 61  ired.on the data
2ec0: 62 61 73 65 20 75 6e 74 69 6c 20 74 68 65 20 64  base until the d
2ed0: 61 74 61 62 61 73 65 20 69 73 20 66 69 72 73 74  atabase is first
2ee0: 20 61 63 63 65 73 73 65 64 2e 20 20 5e 54 68 75   accessed.  ^Thu
2ef0: 73 20 77 69 74 68 20 61 0a 64 65 66 65 72 72 65  s with a.deferre
2f00: 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  d transaction, t
2f10: 68 65 20 42 45 47 49 4e 20 73 74 61 74 65 6d 65  he BEGIN stateme
2f20: 6e 74 20 69 74 73 65 6c 66 20 64 6f 65 73 20 6e  nt itself does n
2f30: 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 0a 66 69  othing to the.fi
2f40: 6c 65 73 79 73 74 65 6d 2e 20 20 5e 4c 6f 63 6b  lesystem.  ^Lock
2f50: 73 0a 61 72 65 20 6e 6f 74 20 61 63 71 75 69 72  s.are not acquir
2f60: 65 64 20 75 6e 74 69 6c 20 74 68 65 20 66 69 72  ed until the fir
2f70: 73 74 20 72 65 61 64 20 6f 72 20 77 72 69 74 65  st read or write
2f80: 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 5e 54 68   operation.  ^Th
2f90: 65 20 66 69 72 73 74 20 72 65 61 64 0a 6f 70 65  e first read.ope
2fa0: 72 61 74 69 6f 6e 20 61 67 61 69 6e 73 74 20 61  ration against a
2fb0: 20 64 61 74 61 62 61 73 65 20 63 72 65 61 74 65   database create
2fc0: 73 20 61 20 5b 53 48 41 52 45 44 5d 20 6c 6f 63  s a [SHARED] loc
2fd0: 6b 20 61 6e 64 20 74 68 65 20 66 69 72 73 74 0a  k and the first.
2fe0: 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 20  write operation 
2ff0: 63 72 65 61 74 65 73 20 61 20 5b 52 45 53 45 52  creates a [RESER
3000: 56 45 44 5d 20 6c 6f 63 6b 2e 20 20 20 5e 42 65  VED] lock.   ^Be
3010: 63 61 75 73 65 20 74 68 65 20 61 63 71 75 69 73  cause the acquis
3020: 69 74 69 6f 6e 20 6f 66 0a 6c 6f 63 6b 73 20 69  ition of.locks i
3030: 73 20 64 65 66 65 72 72 65 64 20 75 6e 74 69 6c  s deferred until
3040: 20 74 68 65 79 20 61 72 65 20 6e 65 65 64 65 64   they are needed
3050: 2c 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  , it is possible
3060: 20 74 68 61 74 20 61 6e 6f 74 68 65 72 0a 74 68   that another.th
3070: 72 65 61 64 20 6f 72 20 70 72 6f 63 65 73 73 20  read or process 
3080: 63 6f 75 6c 64 20 63 72 65 61 74 65 20 61 20 73  could create a s
3090: 65 70 61 72 61 74 65 20 74 72 61 6e 73 61 63 74  eparate transact
30a0: 69 6f 6e 20 61 6e 64 20 77 72 69 74 65 20 74 6f  ion and write to
30b0: 0a 74 68 65 20 64 61 74 61 62 61 73 65 20 61 66  .the database af
30c0: 74 65 72 20 74 68 65 20 42 45 47 49 4e 20 6f 6e  ter the BEGIN on
30d0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 68 72   the current thr
30e0: 65 61 64 20 68 61 73 20 65 78 65 63 75 74 65 64  ead has executed
30f0: 2e 0a 5e 49 66 20 74 68 65 20 74 72 61 6e 73 61  ..^If the transa
3100: 63 74 69 6f 6e 20 69 73 20 69 6d 6d 65 64 69 61  ction is immedia
3110: 74 65 2c 20 74 68 65 6e 20 5b 52 45 53 45 52 56  te, then [RESERV
3120: 45 44 5d 20 6c 6f 63 6b 73 0a 61 72 65 20 61 63  ED] locks.are ac
3130: 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20 64 61  quired on all da
3140: 74 61 62 61 73 65 73 20 61 73 20 73 6f 6f 6e 20  tabases as soon 
3150: 61 73 20 74 68 65 20 42 45 47 49 4e 20 63 6f 6d  as the BEGIN com
3160: 6d 61 6e 64 20 69 73 0a 65 78 65 63 75 74 65 64  mand is.executed
3170: 2c 20 77 69 74 68 6f 75 74 20 77 61 69 74 69 6e  , without waitin
3180: 67 20 66 6f 72 20 74 68 65 0a 64 61 74 61 62 61  g for the.databa
3190: 73 65 20 74 6f 20 62 65 20 75 73 65 64 2e 20 20  se to be used.  
31a0: 5e 41 66 74 65 72 20 61 20 42 45 47 49 4e 20 49  ^After a BEGIN I
31b0: 4d 4d 45 44 49 41 54 45 2c 20 79 6f 75 20 61 72  MMEDIATE, you ar
31c0: 65 20 67 75 61 72 61 6e 74 65 65 64 20 74 68 61  e guaranteed tha
31d0: 74 0a 6e 6f 20 6f 74 68 65 72 20 74 68 72 65 61  t.no other threa
31e0: 64 20 6f 72 20 70 72 6f 63 65 73 73 20 77 69 6c  d or process wil
31f0: 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 77 72 69  l be able to wri
3200: 74 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  te to the databa
3210: 73 65 20 6f 72 0a 64 6f 20 61 20 42 45 47 49 4e  se or.do a BEGIN
3220: 20 49 4d 4d 45 44 49 41 54 45 20 6f 72 20 42 45   IMMEDIATE or BE
3230: 47 49 4e 20 45 58 43 4c 55 53 49 56 45 2e 20 20  GIN EXCLUSIVE.  
3240: 5e 4f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73  ^Other processes
3250: 20 63 61 6e 20 63 6f 6e 74 69 6e 75 65 0a 74 6f   can continue.to
3260: 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20 64   read from the d
3270: 61 74 61 62 61 73 65 2c 20 68 6f 77 65 76 65 72  atabase, however
3280: 2e 20 20 5e 41 6e 20 65 78 63 6c 75 73 69 76 65  .  ^An exclusive
3290: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 61 75   transaction cau
32a0: 73 65 73 0a 5b 45 58 43 4c 55 53 49 56 45 5d 20  ses.[EXCLUSIVE] 
32b0: 6c 6f 63 6b 73 20 74 6f 20 62 65 20 61 63 71 75  locks to be acqu
32c0: 69 72 65 64 20 6f 6e 20 61 6c 6c 20 64 61 74 61  ired on all data
32d0: 62 61 73 65 73 2e 20 20 5e 41 66 74 65 72 20 61  bases.  ^After a
32e0: 20 42 45 47 49 4e 0a 45 58 43 4c 55 53 49 56 45   BEGIN.EXCLUSIVE
32f0: 2c 20 79 6f 75 20 61 72 65 20 67 75 61 72 61 6e  , you are guaran
3300: 74 65 65 64 20 74 68 61 74 20 6e 6f 20 6f 74 68  teed that no oth
3310: 65 72 20 74 68 72 65 61 64 20 6f 72 20 70 72 6f  er thread or pro
3320: 63 65 73 73 20 77 69 6c 6c 0a 62 65 20 61 62 6c  cess will.be abl
3330: 65 20 74 6f 20 72 65 61 64 20 6f 72 20 77 72 69  e to read or wri
3340: 74 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  te the database 
3350: 75 6e 74 69 6c 20 74 68 65 20 74 72 61 6e 73 61  until the transa
3360: 63 74 69 6f 6e 20 69 73 0a 63 6f 6d 70 6c 65 74  ction is.complet
3370: 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28 41  e..</p>..<p>.^(A
3380: 6e 20 69 6d 70 6c 69 63 69 74 20 74 72 61 6e 73  n implicit trans
3390: 61 63 74 69 6f 6e 20 28 61 20 74 72 61 6e 73 61  action (a transa
33a0: 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20 73 74  ction that is st
33b0: 61 72 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  arted automatica
33c0: 6c 6c 79 2c 0a 6e 6f 74 20 61 20 74 72 61 6e 73  lly,.not a trans
33d0: 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20 62  action started b
33e0: 79 20 42 45 47 49 4e 29 20 69 73 20 63 6f 6d 6d  y BEGIN) is comm
33f0: 69 74 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  itted automatica
3400: 6c 6c 79 20 77 68 65 6e 0a 74 68 65 20 6c 61 73  lly when.the las
3410: 74 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  t active stateme
3420: 6e 74 20 66 69 6e 69 73 68 65 73 2e 20 20 41 20  nt finishes.  A 
3430: 73 74 61 74 65 6d 65 6e 74 20 66 69 6e 69 73 68  statement finish
3440: 65 73 20 77 68 65 6e 20 69 74 73 0a 70 72 65 70  es when its.prep
3450: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69  ared statement i
3460: 73 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 65 74  s [sqlite3_reset
3470: 28 29 20 7c 20 72 65 73 65 74 5d 20 6f 72 0a 5b  () | reset] or.[
3480: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
3490: 28 29 20 7c 20 66 69 6e 61 6c 69 7a 65 64 5d 2e  () | finalized].
34a0: 20 20 41 6e 20 6f 70 65 6e 20 5b 73 71 6c 69 74    An open [sqlit
34b0: 65 33 5f 62 6c 6f 62 5d 20 75 73 65 64 20 66 6f  e3_blob] used fo
34c0: 72 0a 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c  r.incremental BL
34d0: 4f 42 20 49 2f 4f 20 63 6f 75 6e 74 73 20 61 73  OB I/O counts as
34e0: 20 61 6e 20 75 6e 66 69 6e 69 73 68 65 64 20 73   an unfinished s
34f0: 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 5b  tatement.  The [
3500: 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5d 0a 66 69  sqlite3_blob].fi
3510: 6e 69 73 68 65 73 20 77 68 65 6e 20 69 74 20 69  nishes when it i
3520: 73 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f  s [sqlite3_blob_
3530: 63 6c 6f 73 65 28 29 20 7c 20 63 6c 6f 73 65 64  close() | closed
3540: 5d 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e  ].)^.</p>..<p>.^
3550: 54 68 65 20 65 78 70 6c 69 63 69 74 20 43 4f 4d  The explicit COM
3560: 4d 49 54 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73  MIT command runs
3570: 20 69 6d 6d 65 64 69 61 74 65 6c 79 2c 20 65 76   immediately, ev
3580: 65 6e 20 69 66 20 74 68 65 72 65 20 61 72 65 0a  en if there are.
3590: 70 65 6e 64 69 6e 67 20 5b 53 45 4c 45 43 54 5d  pending [SELECT]
35a0: 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 5e 48   statements.  ^H
35b0: 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 72 65  owever, if there
35c0: 20 61 72 65 20 70 65 6e 64 69 6e 67 0a 77 72 69   are pending.wri
35d0: 74 65 20 6f 70 65 72 61 74 69 6f 6e 73 2c 20 74  te operations, t
35e0: 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e  he COMMIT comman
35f0: 64 0a 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68  d.will fail with
3600: 20 61 20 65 72 72 6f 72 20 63 6f 64 65 20 5b 53   a error code [S
3610: 51 4c 49 54 45 5f 42 55 53 59 5d 2e 0a 3c 2f 70  QLITE_BUSY]..</p
3620: 3e 0a 0a 3c 70 3e 0a 5e 41 6e 20 61 74 74 65 6d  >..<p>.^An attem
3630: 70 74 20 74 6f 20 65 78 65 63 75 74 65 20 43 4f  pt to execute CO
3640: 4d 4d 49 54 20 6d 69 67 68 74 20 61 6c 73 6f 20  MMIT might also 
3650: 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 5b 53 51  result in an [SQ
3660: 4c 49 54 45 5f 42 55 53 59 5d 20 72 65 74 75 72  LITE_BUSY] retur
3670: 6e 20 63 6f 64 65 0a 69 66 20 61 6e 20 61 6e 6f  n code.if an ano
3680: 74 68 65 72 20 74 68 72 65 61 64 20 6f 72 20 70  ther thread or p
3690: 72 6f 63 65 73 73 20 68 61 73 20 61 20 5b 73 68  rocess has a [sh
36a0: 61 72 65 64 20 6c 6f 63 6b 5d 20 6f 6e 20 74 68  ared lock] on th
36b0: 65 20 64 61 74 61 62 61 73 65 0a 74 68 61 74 20  e database.that 
36c0: 70 72 65 76 65 6e 74 65 64 20 74 68 65 20 64 61  prevented the da
36d0: 74 61 62 61 73 65 20 66 72 6f 6d 20 62 65 69 6e  tabase from bein
36e0: 67 20 75 70 64 61 74 65 64 2e 20 20 5e 57 68 65  g updated.  ^Whe
36f0: 6e 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69  n COMMIT fails i
3700: 6e 20 74 68 69 73 0a 77 61 79 2c 20 74 68 65 20  n this.way, the 
3710: 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61  transaction rema
3720: 69 6e 73 20 61 63 74 69 76 65 20 61 6e 64 20 74  ins active and t
3730: 68 65 20 43 4f 4d 4d 49 54 20 63 61 6e 20 62 65  he COMMIT can be
3740: 20 72 65 74 72 69 65 64 20 6c 61 74 65 72 0a 61   retried later.a
3750: 66 74 65 72 20 74 68 65 20 72 65 61 64 65 72 20  fter the reader 
3760: 68 61 73 20 68 61 64 20 61 20 63 68 61 6e 63 65  has had a chance
3770: 20 74 6f 20 63 6c 65 61 72 2e 0a 3c 2f 70 3e 0a   to clear..</p>.
3780: 0a 3c 70 3e 0a 5e 54 68 65 20 52 4f 4c 4c 42 41  .<p>.^The ROLLBA
3790: 43 4b 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74  CK will fail wit
37a0: 68 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20  h an error code 
37b0: 5b 53 51 4c 49 54 45 5f 42 55 53 59 5d 20 69 66  [SQLITE_BUSY] if
37c0: 20 74 68 65 72 65 0a 61 72 65 20 61 6e 79 20 70   there.are any p
37d0: 65 6e 64 69 6e 67 20 71 75 65 72 69 65 73 2e 20  ending queries. 
37e0: 20 5e 42 6f 74 68 20 72 65 61 64 2d 6f 6e 6c 79   ^Both read-only
37f0: 20 61 6e 64 20 72 65 61 64 2f 77 72 69 74 65 20   and read/write 
3800: 71 75 65 72 69 65 73 20 77 69 6c 6c 0a 63 61 75  queries will.cau
3810: 73 65 20 61 20 52 4f 4c 4c 42 41 43 4b 20 74 6f  se a ROLLBACK to
3820: 20 66 61 69 6c 2e 20 20 41 20 52 4f 4c 4c 42 41   fail.  A ROLLBA
3830: 43 4b 20 6d 75 73 74 20 66 61 69 6c 20 69 66 20  CK must fail if 
3840: 74 68 65 72 65 20 61 72 65 20 70 65 6e 64 69 6e  there are pendin
3850: 67 0a 72 65 61 64 20 6f 70 65 72 61 74 69 6f 6e  g.read operation
3860: 73 20 28 75 6e 6c 69 6b 65 20 43 4f 4d 4d 49 54  s (unlike COMMIT
3870: 20 77 68 69 63 68 20 63 61 6e 20 73 75 63 63 65   which can succe
3880: 65 64 29 20 62 65 63 61 75 73 65 20 62 61 64 20  ed) because bad 
3890: 74 68 69 6e 67 73 0a 77 69 6c 6c 20 68 61 70 70  things.will happ
38a0: 65 6e 20 69 66 20 74 68 65 20 69 6e 2d 6d 65 6d  en if the in-mem
38b0: 6f 72 79 20 69 6d 61 67 65 20 6f 66 20 74 68 65  ory image of the
38c0: 20 64 61 74 61 62 61 73 65 20 69 73 20 63 68 61   database is cha
38d0: 6e 67 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e  nged out from un
38e0: 64 65 72 0a 61 6e 20 61 63 74 69 76 65 20 71 75  der.an active qu
38f0: 65 72 79 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49  ery..</p>..<p>.I
3900: 66 20 5b 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61  f [PRAGMA journa
3910: 6c 5f 6d 6f 64 65 5d 20 69 73 20 73 65 74 20 74  l_mode] is set t
3920: 6f 20 4f 46 46 20 28 74 68 75 73 20 64 69 73 61  o OFF (thus disa
3930: 62 6c 69 6e 67 20 74 68 65 20 72 6f 6c 6c 62 61  bling the rollba
3940: 63 6b 20 6a 6f 75 72 6e 61 6c 0a 66 69 6c 65 29  ck journal.file)
3950: 20 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69   then the behavi
3960: 6f 72 20 6f 66 20 74 68 65 20 52 4f 4c 4c 42 41  or of the ROLLBA
3970: 43 4b 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 6e  CK command is un
3980: 64 65 66 69 6e 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c  defined..</p>..<
3990: 68 33 3e 52 65 73 70 6f 6e 73 65 20 54 6f 20 45  h3>Response To E
39a0: 72 72 6f 72 73 20 57 69 74 68 69 6e 20 41 20 54  rrors Within A T
39b0: 72 61 6e 73 61 63 74 69 6f 6e 3c 2f 68 33 3e 0a  ransaction</h3>.
39c0: 0a 3c 70 3e 20 5e 28 49 66 20 63 65 72 74 61 69  .<p> ^(If certai
39d0: 6e 20 6b 69 6e 64 73 20 6f 66 20 65 72 72 6f 72  n kinds of error
39e0: 73 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20 61  s occur within a
39f0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
3a00: 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61  e.transaction ma
3a10: 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20  y or may not be 
3a20: 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 75 74 6f  rolled back auto
3a30: 6d 61 74 69 63 61 6c 6c 79 2e 20 20 54 68 65 0a  matically.  The.
3a40: 65 72 72 6f 72 73 20 74 68 61 74 20 63 61 75 73  errors that caus
3a50: 65 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69  e the behavior i
3a60: 6e 63 6c 75 64 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c  nclude:</p>..<ul
3a70: 3e 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 46  >.<li> [SQLITE_F
3a80: 55 4c 4c 5d 3a 20 64 61 74 61 62 61 73 65 20 6f  ULL]: database o
3a90: 72 20 64 69 73 6b 20 66 75 6c 6c 0a 3c 6c 69 3e  r disk full.<li>
3aa0: 20 5b 53 51 4c 49 54 45 5f 49 4f 45 52 52 5d 3a   [SQLITE_IOERR]:
3ab0: 20 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f 72 0a   disk I/O error.
3ac0: 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 42 55 53  <li> [SQLITE_BUS
3ad0: 59 5d 3a 20 64 61 74 61 62 61 73 65 20 69 6e 20  Y]: database in 
3ae0: 75 73 65 20 62 79 20 61 6e 6f 74 68 65 72 20 70  use by another p
3af0: 72 6f 63 65 73 73 0a 3c 6c 69 3e 20 5b 53 51 4c  rocess.<li> [SQL
3b00: 49 54 45 5f 4e 4f 4d 45 4d 5d 3a 20 6f 75 74 20  ITE_NOMEM]: out 
3b10: 6f 72 20 6d 65 6d 6f 72 79 0a 3c 6c 69 3e 20 5b  or memory.<li> [
3b20: 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
3b30: 5d 3a 20 70 72 6f 63 65 73 73 69 6e 67 20 5b 73  ]: processing [s
3b40: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
3b50: 7c 69 6e 74 65 72 72 75 70 74 65 64 5d 0a 20 20  |interrupted].  
3b60: 20 20 20 62 79 20 61 70 70 6c 69 63 61 74 69 6f     by applicatio
3b70: 6e 20 72 65 71 75 65 73 74 0a 3c 2f 75 6c 3e 29  n request.</ul>)
3b80: 5e 0a 0a 3c 70 3e 0a 5e 46 6f 72 20 61 6c 6c 20  ^..<p>.^For all 
3b90: 6f 66 20 74 68 65 73 65 20 65 72 72 6f 72 73 2c  of these errors,
3ba0: 20 53 51 4c 69 74 65 20 61 74 74 65 6d 70 74 73   SQLite attempts
3bb0: 20 74 6f 20 75 6e 64 6f 20 6a 75 73 74 20 74 68   to undo just th
3bc0: 65 20 6f 6e 65 20 73 74 61 74 65 6d 65 6e 74 0a  e one statement.
3bd0: 69 74 20 77 61 73 20 77 6f 72 6b 69 6e 67 20 6f  it was working o
3be0: 6e 20 61 6e 64 20 6c 65 61 76 65 20 63 68 61 6e  n and leave chan
3bf0: 67 65 73 20 66 72 6f 6d 20 70 72 69 6f 72 20 73  ges from prior s
3c00: 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
3c10: 20 74 68 65 0a 73 61 6d 65 20 74 72 61 6e 73 61   the.same transa
3c20: 63 74 69 6f 6e 20 69 6e 74 61 63 74 20 61 6e 64  ction intact and
3c30: 20 63 6f 6e 74 69 6e 75 65 20 77 69 74 68 20 74   continue with t
3c40: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  he transaction. 
3c50: 20 5e 48 6f 77 65 76 65 72 2c 20 0a 64 65 70 65   ^However, .depe
3c60: 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 73 74 61  nding on the sta
3c70: 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 65 76 61  tement being eva
3c80: 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65 20 70  luated and the p
3c90: 6f 69 6e 74 20 61 74 20 77 68 69 63 68 20 74 68  oint at which th
3ca0: 65 0a 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20  e.error occurs, 
3cb0: 69 74 20 6d 69 67 68 74 20 62 65 20 6e 65 63 65  it might be nece
3cc0: 73 73 61 72 79 20 66 6f 72 20 53 51 4c 69 74 65  ssary for SQLite
3cd0: 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 64   to rollback and
3ce0: 0a 63 61 6e 63 65 6c 20 74 68 65 20 65 6e 74 69  .cancel the enti
3cf0: 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  re transaction. 
3d00: 20 5e 41 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e   ^An application
3d10: 20 63 61 6e 20 74 65 6c 6c 20 77 68 69 63 68 0a   can tell which.
3d20: 63 6f 75 72 73 65 20 6f 66 20 61 63 74 69 6f 6e  course of action
3d30: 20 53 51 4c 69 74 65 20 74 6f 6f 6b 20 62 79 20   SQLite took by 
3d40: 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74  using the.[sqlit
3d50: 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
3d60: 74 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67 65 20  t()] C-language 
3d70: 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a  interface.</p>..
3d80: 3c 70 3e 49 74 20 69 73 20 72 65 63 6f 6d 6d 65  <p>It is recomme
3d90: 6e 64 65 64 20 74 68 61 74 20 61 70 70 6c 69 63  nded that applic
3da0: 61 74 69 6f 6e 73 20 72 65 73 70 6f 6e 64 20 74  ations respond t
3db0: 6f 20 74 68 65 20 65 72 72 6f 72 73 0a 6c 69 73  o the errors.lis
3dc0: 74 65 64 20 61 62 6f 76 65 20 62 79 20 65 78 70  ted above by exp
3dd0: 6c 69 63 69 74 6c 79 20 69 73 73 75 69 6e 67 20  licitly issuing 
3de0: 61 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  a ROLLBACK comma
3df0: 6e 64 2e 20 20 5e 49 66 20 74 68 65 20 0a 74 72  nd.  ^If the .tr
3e00: 61 6e 73 61 63 74 69 6f 6e 20 68 61 73 20 61 6c  ansaction has al
3e10: 72 65 61 64 79 20 62 65 65 6e 20 72 6f 6c 6c 65  ready been rolle
3e20: 64 20 62 61 63 6b 20 61 75 74 6f 6d 61 74 69 63  d back automatic
3e30: 61 6c 6c 79 0a 62 79 20 74 68 65 20 65 72 72 6f  ally.by the erro
3e40: 72 20 72 65 73 70 6f 6e 73 65 2c 20 74 68 65 6e  r response, then
3e50: 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f   the ROLLBACK co
3e60: 6d 6d 61 6e 64 20 77 69 6c 6c 20 66 61 69 6c 20  mmand will fail 
3e70: 77 69 74 68 20 61 6e 0a 65 72 72 6f 72 2c 20 62  with an.error, b
3e80: 75 74 20 6e 6f 20 68 61 72 6d 20 69 73 20 63 61  ut no harm is ca
3e90: 75 73 65 64 20 62 79 20 74 68 69 73 2e 3c 2f 70  used by this.</p
3ea0: 3e 0a 0a 3c 70 3e 46 75 74 75 72 65 20 76 65 72  >..<p>Future ver
3eb0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
3ec0: 6d 61 79 20 65 78 74 65 6e 64 20 74 68 65 20 6c  may extend the l
3ed0: 69 73 74 20 6f 66 20 65 72 72 6f 72 73 20 77 68  ist of errors wh
3ee0: 69 63 68 0a 6d 69 67 68 74 20 63 61 75 73 65 20  ich.might cause 
3ef0: 61 75 74 6f 6d 61 74 69 63 20 74 72 61 6e 73 61  automatic transa
3f00: 63 74 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b 2e 20  ction rollback. 
3f10: 20 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73   Future versions
3f20: 20 6f 66 0a 53 51 4c 69 74 65 20 6d 69 67 68 74   of.SQLite might
3f30: 20 63 68 61 6e 67 65 20 74 68 65 20 65 72 72 6f   change the erro
3f40: 72 20 72 65 73 70 6f 6e 73 65 2e 20 20 49 6e 20  r response.  In 
3f50: 70 61 72 74 69 63 75 6c 61 72 2c 20 77 65 20 6d  particular, we m
3f60: 61 79 0a 63 68 6f 6f 73 65 20 74 6f 20 73 69 6d  ay.choose to sim
3f70: 70 6c 69 66 79 20 74 68 65 20 69 6e 74 65 72 66  plify the interf
3f80: 61 63 65 20 69 6e 20 66 75 74 75 72 65 20 76 65  ace in future ve
3f90: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
3fa0: 20 62 79 0a 63 61 75 73 69 6e 67 20 74 68 65 20   by.causing the 
3fb0: 65 72 72 6f 72 73 20 61 62 6f 76 65 20 74 6f 20  errors above to 
3fc0: 66 6f 72 63 65 20 61 6e 20 75 6e 63 6f 6e 64 69  force an uncondi
3fd0: 74 69 6f 6e 61 6c 20 72 6f 6c 6c 62 61 63 6b 2e  tional rollback.
3fe0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
3ff0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4030: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
4040: 69 6f 6e 20 7b 53 41 56 45 50 4f 49 4e 54 7d 20  ion {SAVEPOINT} 
4050: 73 61 76 65 70 6f 69 6e 74 20 7b 53 41 56 45 50  savepoint {SAVEP
4060: 4f 49 4e 54 20 52 45 4c 45 41 53 45 7d 0a 0a 42  OINT RELEASE}..B
4070: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 61 76  ubbleDiagram sav
4080: 65 70 6f 69 6e 74 2d 73 74 6d 74 0a 42 75 62 62  epoint-stmt.Bubb
4090: 6c 65 44 69 61 67 72 61 6d 20 72 65 6c 65 61 73  leDiagram releas
40a0: 65 2d 73 74 6d 74 0a 42 75 62 62 6c 65 44 69 61  e-stmt.BubbleDia
40b0: 67 72 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d 73 74  gram rollback-st
40c0: 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e  mt.</tcl>..<p> ^
40d0: 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20 61  SAVEPOINTs are a
40e0: 20 6d 65 74 68 6f 64 20 6f 66 20 63 72 65 61 74   method of creat
40f0: 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ing transactions
4100: 2c 20 73 69 6d 69 6c 61 72 20 74 6f 0a 5b 42 45  , similar to.[BE
4110: 47 49 4e 5d 20 61 6e 64 20 5b 43 4f 4d 4d 49 54  GIN] and [COMMIT
4120: 5d 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 74  ], except that t
4130: 68 65 20 53 41 56 45 50 4f 49 4e 54 20 61 6e 64  he SAVEPOINT and
4140: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
4150: 73 0a 61 72 65 20 6e 61 6d 65 64 20 61 6e 64 20  s.are named and 
4160: 6d 61 79 20 62 65 20 6e 65 73 74 65 64 2e 3c 2f  may be nested.</
4170: 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 53 41 56  p>..<p> ^The SAV
4180: 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 20 73  EPOINT command s
4190: 74 61 72 74 73 20 61 20 6e 65 77 20 74 72 61 6e  tarts a new tran
41a0: 73 61 63 74 69 6f 6e 20 77 69 74 68 20 61 20 6e  saction with a n
41b0: 61 6d 65 2e 0a 5e 54 68 65 20 74 72 61 6e 73 61  ame..^The transa
41c0: 63 74 69 6f 6e 20 6e 61 6d 65 73 20 6e 65 65 64  ction names need
41d0: 20 6e 6f 74 20 62 65 20 75 6e 69 71 75 65 2e 0a   not be unique..
41e0: 5e 28 41 20 53 41 56 45 50 4f 49 4e 54 20 63 61  ^(A SAVEPOINT ca
41f0: 6e 20 62 65 20 73 74 61 72 74 65 64 20 65 69 74  n be started eit
4200: 68 65 72 20 77 69 74 68 69 6e 20 6f 72 20 6f 75  her within or ou
4210: 74 73 69 64 65 20 6f 66 0a 61 20 5b 42 45 47 49  tside of.a [BEGI
4220: 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e 29 5e  N]...[COMMIT].)^
4230: 20 20 5e 28 57 68 65 6e 20 61 20 53 41 56 45 50    ^(When a SAVEP
4240: 4f 49 4e 54 20 69 73 20 74 68 65 20 6f 75 74 65  OINT is the oute
4250: 72 2d 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74  r-most savepoint
4260: 0a 61 6e 64 20 69 74 20 69 73 20 6e 6f 74 20 77  .and it is not w
4270: 69 74 68 69 6e 20 61 20 5b 42 45 47 49 4e 5d 2e  ithin a [BEGIN].
4280: 2e 2e 5b 43 4f 4d 4d 49 54 5d 20 74 68 65 6e 20  ..[COMMIT] then 
4290: 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20  the behavior is 
42a0: 74 68 65 0a 73 61 6d 65 20 61 73 20 42 45 47 49  the.same as BEGI
42b0: 4e 20 44 45 46 45 52 52 45 44 20 54 52 41 4e 53  N DEFERRED TRANS
42c0: 41 43 54 49 4f 4e 2e 29 5e 3c 2f 70 3e 0a 0a 3c  ACTION.)^</p>..<
42d0: 70 3e 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20  p>^The ROLLBACK 
42e0: 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 76 65 72  TO command rever
42f0: 74 73 20 74 68 65 20 73 74 61 74 65 20 6f 66 20  ts the state of 
4300: 74 68 65 20 64 61 74 61 62 61 73 65 20 62 61 63  the database bac
4310: 6b 20 74 6f 20 77 68 61 74 0a 69 74 20 77 61 73  k to what.it was
4320: 20 6a 75 73 74 20 61 66 74 65 72 20 74 68 65 20   just after the 
4330: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 53 41  corresponding SA
4340: 56 45 50 4f 49 4e 54 2e 20 20 5e 4e 6f 74 65 20  VEPOINT.  ^Note 
4350: 74 68 61 74 20 75 6e 6c 69 6b 65 20 74 68 61 74  that unlike that
4360: 0a 70 6c 61 69 6e 20 5b 52 4f 4c 4c 42 41 43 4b  .plain [ROLLBACK
4370: 5d 20 63 6f 6d 6d 61 6e 64 20 28 77 69 74 68 6f  ] command (witho
4380: 75 74 20 74 68 65 20 54 4f 20 6b 65 79 77 6f 72  ut the TO keywor
4390: 64 29 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  d) the ROLLBACK 
43a0: 54 4f 20 63 6f 6d 6d 61 6e 64 0a 64 6f 65 73 20  TO command.does 
43b0: 6e 6f 74 20 63 61 6e 63 65 6c 20 74 68 65 20 74  not cancel the t
43c0: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 49 6e  ransaction.  ^In
43d0: 73 74 65 61 64 20 6f 66 20 63 61 6e 63 65 6c 6c  stead of cancell
43e0: 69 6e 67 20 74 68 65 20 74 72 61 6e 73 61 63 74  ing the transact
43f0: 69 6f 6e 2c 0a 74 68 65 20 52 4f 4c 4c 42 41 43  ion,.the ROLLBAC
4400: 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 73  K TO command res
4410: 74 61 72 74 73 20 74 68 65 20 74 72 61 6e 73 61  tarts the transa
4420: 63 74 69 6f 6e 20 61 67 61 69 6e 20 61 74 20 74  ction again at t
4430: 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 5e 41  he beginning..^A
4440: 6c 6c 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 53  ll intervening S
4450: 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20 63 61  AVEPOINTs are ca
4460: 6e 63 65 6c 6c 65 64 2c 20 68 6f 77 65 76 65 72  ncelled, however
4470: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52  .</p>..<p>^The R
4480: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 69  ELEASE command i
4490: 73 20 6c 69 6b 65 20 61 20 5b 43 4f 4d 4d 49 54  s like a [COMMIT
44a0: 5d 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49 4e  ] for a SAVEPOIN
44b0: 54 2e 0a 5e 54 68 65 20 52 45 4c 45 41 53 45 20  T..^The RELEASE 
44c0: 63 6f 6d 6d 61 6e 64 20 63 61 75 73 65 73 20 61  command causes a
44d0: 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73 20 62 61  ll savepoints ba
44e0: 63 6b 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64  ck to and includ
44f0: 69 6e 67 20 74 68 65 20 0a 6d 6f 73 74 20 72 65  ing the .most re
4500: 63 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 77  cent savepoint w
4510: 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e  ith a matching n
4520: 61 6d 65 20 74 6f 20 62 65 20 72 65 6d 6f 76 65  ame to be remove
4530: 64 20 66 72 6f 6d 20 74 68 65 20 0a 74 72 61 6e  d from the .tran
4540: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2e 20 20  saction stack.  
4550: 5e 54 68 65 20 52 45 4c 45 41 53 45 20 6f 66 20  ^The RELEASE of 
4560: 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63  an inner transac
4570: 74 69 6f 6e 0a 64 6f 65 73 20 6e 6f 74 20 63 61  tion.does not ca
4580: 75 73 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20  use any changes 
4590: 74 6f 20 62 65 20 77 72 69 74 74 65 6e 20 74 6f  to be written to
45a0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
45b0: 6c 65 3b 20 69 74 20 6d 65 72 65 6c 79 0a 72 65  le; it merely.re
45c0: 6d 6f 76 65 73 20 73 61 76 65 70 6f 69 6e 74 73  moves savepoints
45d0: 20 66 72 6f 6d 20 74 68 65 20 74 72 61 6e 73 61   from the transa
45e0: 63 74 69 6f 6e 20 73 74 61 63 6b 20 73 75 63 68  ction stack such
45f0: 20 74 68 61 74 20 69 74 20 69 73 0a 6e 6f 20 6c   that it is.no l
4600: 6f 6e 67 65 72 20 70 6f 73 73 69 62 6c 65 20 74  onger possible t
4610: 6f 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 74 68  o ROLLBACK TO th
4620: 6f 73 65 20 73 61 76 65 70 6f 69 6e 74 73 2e 0a  ose savepoints..
4630: 5e 49 66 20 61 20 52 45 4c 45 41 53 45 20 63 6f  ^If a RELEASE co
4640: 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20 74  mmand releases t
4650: 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76  he outermost sav
4660: 65 70 6f 69 6e 74 2c 20 73 6f 0a 74 68 61 74 20  epoint, so.that 
4670: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
4680: 73 74 61 63 6b 20 62 65 63 6f 6d 65 73 20 65 6d  stack becomes em
4690: 70 74 79 2c 20 74 68 65 6e 20 52 45 4c 45 41 53  pty, then RELEAS
46a0: 45 20 69 73 20 74 68 65 20 73 61 6d 65 0a 61 73  E is the same.as
46b0: 20 5b 43 4f 4d 4d 49 54 5d 2e 0a 5e 54 68 65 20   [COMMIT]..^The 
46c0: 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64  [COMMIT] command
46d0: 20 6d 61 79 20 62 65 20 75 73 65 64 20 74 6f 20   may be used to 
46e0: 72 65 6c 65 61 73 65 20 61 6c 6c 20 73 61 76 65  release all save
46f0: 70 6f 69 6e 74 73 20 61 6e 64 0a 63 6f 6d 6d 69  points and.commi
4700: 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  t the transactio
4710: 6e 20 65 76 65 6e 20 69 66 20 74 68 65 20 74 72  n even if the tr
4720: 61 6e 73 61 63 74 69 6f 6e 20 77 61 73 20 6f 72  ansaction was or
4730: 69 67 69 6e 61 6c 6c 79 20 73 74 61 72 74 65 64  iginally started
4740: 0a 62 79 20 61 20 53 41 56 45 50 4f 49 4e 54 20  .by a SAVEPOINT 
4750: 63 6f 6d 6d 61 6e 64 20 69 6e 73 74 65 61 64 20  command instead 
4760: 6f 66 20 61 20 5b 42 45 47 49 4e 5d 20 63 6f 6d  of a [BEGIN] com
4770: 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  mand.</p>..<p>^I
4780: 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d  f the savepoint-
4790: 6e 61 6d 65 20 69 6e 20 61 20 52 45 4c 45 41 53  name in a RELEAS
47a0: 45 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e  E command does n
47b0: 6f 74 20 6d 61 74 63 68 20 61 6e 79 0a 73 61 76  ot match any.sav
47c0: 65 70 6f 69 6e 74 20 63 75 72 72 65 6e 74 6c 79  epoint currently
47d0: 20 69 6e 20 74 68 65 20 74 72 61 6e 61 63 74 69   in the tranacti
47e0: 6f 6e 20 73 74 61 63 6b 2c 20 74 68 65 6e 20 6e  on stack, then n
47f0: 6f 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65  o savepoints are
4800: 0a 72 65 6c 65 61 73 65 64 2c 20 74 68 65 20 64  .released, the d
4810: 61 74 61 62 61 73 65 20 69 73 20 75 6e 63 68 61  atabase is uncha
4820: 6e 67 65 64 2c 20 61 6e 64 20 74 68 65 20 52 45  nged, and the RE
4830: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65  LEASE command re
4840: 74 75 72 6e 73 0a 61 6e 20 65 72 72 6f 72 2e 3c  turns.an error.<
4850: 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68  /p>..<p>^Note th
4860: 61 74 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e  at an inner tran
4870: 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 63 6f  saction might co
4880: 6d 6d 69 74 20 28 75 73 69 6e 67 20 74 68 65 20  mmit (using the 
4890: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 29  RELEASE command)
48a0: 0a 62 75 74 20 74 68 65 6e 20 6c 61 74 65 72 20  .but then later 
48b0: 68 61 76 65 20 69 74 73 20 77 6f 72 6b 20 75 6e  have its work un
48c0: 64 6f 6e 65 20 62 79 20 61 20 52 4f 4c 4c 42 41  done by a ROLLBA
48d0: 43 4b 20 69 6e 20 61 6e 20 6f 75 74 65 72 20 74  CK in an outer t
48e0: 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 20 70  ransaction..^A p
48f0: 6f 77 65 72 20 66 61 69 6c 75 72 65 20 6f 72 20  ower failure or 
4900: 70 72 6f 67 72 61 6d 20 63 72 61 73 68 20 6f 72  program crash or
4910: 20 4f 53 20 63 72 61 73 68 20 77 69 6c 6c 20 63   OS crash will c
4920: 61 75 73 65 20 74 68 65 20 6f 75 74 65 72 2d 6d  ause the outer-m
4930: 6f 73 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20  ost.transaction 
4940: 74 6f 20 72 6f 6c 6c 62 61 63 6b 2c 20 75 6e 64  to rollback, und
4950: 6f 69 6e 67 20 61 6c 6c 20 63 68 61 6e 67 65 73  oing all changes
4960: 20 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72   that have occur
4970: 72 65 64 20 77 69 74 68 69 6e 0a 74 68 61 74 20  red within.that 
4980: 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74 69 6f  outer transactio
4990: 6e 2c 20 65 76 65 6e 20 63 68 61 6e 67 65 73 20  n, even changes 
49a0: 74 68 61 74 20 68 61 76 65 20 73 75 70 70 6f 73  that have suppos
49b0: 65 64 6c 79 20 62 65 65 6e 20 22 63 6f 6d 6d 69  edly been "commi
49c0: 74 74 65 64 22 0a 62 79 20 74 68 65 20 52 45 4c  tted".by the REL
49d0: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e  EASE command.  ^
49e0: 43 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 61  Content is not a
49f0: 63 74 75 61 6c 6c 79 20 63 6f 6d 6d 69 74 74 65  ctually committe
4a00: 64 20 6f 6e 20 74 68 65 20 64 69 73 6b 20 0a 75  d on the disk .u
4a10: 6e 74 69 6c 20 74 68 65 20 6f 75 74 65 72 6d 6f  ntil the outermo
4a20: 73 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63  st transaction c
4a30: 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ommits.</p>..<p>
4a40: 54 68 65 72 65 20 61 72 65 20 73 65 76 65 72 61  There are severa
4a50: 6c 20 77 61 79 73 20 6f 66 20 74 68 69 6e 6b 69  l ways of thinki
4a60: 6e 67 20 61 62 6f 75 74 20 74 68 65 20 52 45 4c  ng about the REL
4a70: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 3a 3c 2f 70  EASE command:</p
4a80: 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a  >..<ul>.<li><p>.
4a90: 53 6f 6d 65 20 70 65 6f 70 6c 65 20 76 69 65 77  Some people view
4aa0: 20 52 45 4c 45 41 53 45 20 61 73 20 74 68 65 20   RELEASE as the 
4ab0: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 43 4f  equivalent of CO
4ac0: 4d 4d 49 54 20 66 6f 72 20 61 20 53 41 56 45 50  MMIT for a SAVEP
4ad0: 4f 49 4e 54 2e 0a 54 68 69 73 20 69 73 20 61 6e  OINT..This is an
4ae0: 20 61 63 63 65 70 74 61 62 6c 65 20 70 6f 69 6e   acceptable poin
4af0: 74 20 6f 66 20 76 69 65 77 20 61 73 20 6c 6f 6e  t of view as lon
4b00: 67 20 61 73 20 6f 6e 65 20 72 65 6d 65 6d 62 65  g as one remembe
4b10: 72 73 20 74 68 61 74 20 74 68 65 0a 63 68 61 6e  rs that the.chan
4b20: 67 65 73 20 63 6f 6d 6d 69 74 74 65 64 20 62 79  ges committed by
4b30: 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61   an inner transa
4b40: 63 74 69 6f 6e 20 6d 69 67 68 74 20 6c 61 74 65  ction might late
4b50: 72 20 62 65 20 75 6e 64 6f 6e 65 20 62 79 20 61  r be undone by a
4b60: 0a 72 6f 6c 6c 62 61 63 6b 20 69 6e 20 61 6e 20  .rollback in an 
4b70: 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74 69 6f  outer transactio
4b80: 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69  n.</p></li>..<li
4b90: 3e 3c 70 3e 0a 41 6e 6f 74 68 65 72 20 76 69 65  ><p>.Another vie
4ba0: 77 20 6f 66 20 52 45 4c 45 41 53 45 20 69 73 20  w of RELEASE is 
4bb0: 74 68 61 74 20 69 74 20 6d 65 72 67 65 73 20 61  that it merges a
4bc0: 20 6e 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69   named transacti
4bd0: 6f 6e 20 69 6e 74 6f 20 69 74 73 0a 70 61 72 65  on into its.pare
4be0: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  nt transaction, 
4bf0: 73 6f 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65  so that the name
4c00: 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e  d transaction an
4c10: 64 20 69 74 73 20 70 61 72 65 6e 74 20 62 65 63  d its parent bec
4c20: 6f 6d 65 0a 74 68 65 20 73 61 6d 65 20 74 72 61  ome.the same tra
4c30: 6e 73 61 63 74 69 6f 6e 2e 20 20 41 66 74 65 72  nsaction.  After
4c40: 20 52 45 4c 45 41 53 45 2c 20 74 68 65 20 6e 61   RELEASE, the na
4c50: 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  med transaction 
4c60: 61 6e 64 20 69 74 73 20 70 61 72 65 6e 74 0a 77  and its parent.w
4c70: 69 6c 6c 20 63 6f 6d 6d 69 74 20 6f 72 20 72 6f  ill commit or ro
4c80: 6c 6c 62 61 63 6b 20 74 6f 67 65 74 68 65 72 2c  llback together,
4c90: 20 77 68 61 74 65 76 65 72 20 74 68 65 69 72 20   whatever their 
4ca0: 66 61 74 65 20 6d 61 79 20 62 65 2e 0a 3c 2f 70  fate may be..</p
4cb0: 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ></li>..<li><p>.
4cc0: 4f 6e 65 20 63 61 6e 20 61 6c 73 6f 20 74 68 69  One can also thi
4cd0: 6e 6b 20 6f 66 20 73 61 76 65 70 6f 69 6e 74 73  nk of savepoints
4ce0: 20 61 73 0a 22 6d 61 72 6b 73 22 20 69 6e 20 74   as."marks" in t
4cf0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74  he transaction t
4d00: 69 6d 65 6c 69 6e 65 2e 20 20 49 6e 20 74 68 69  imeline.  In thi
4d10: 73 20 76 69 65 77 2c 20 74 68 65 20 53 41 56 45  s view, the SAVE
4d20: 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 0a 63 72  POINT command.cr
4d30: 65 61 74 65 73 20 61 20 6e 65 77 20 6d 61 72 6b  eates a new mark
4d40: 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54  , the ROLLBACK T
4d50: 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 77 69 6e 64  O command rewind
4d60: 73 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 20 62  s the timeline b
4d70: 61 63 6b 0a 74 6f 20 61 20 70 6f 69 6e 74 20 6a  ack.to a point j
4d80: 75 73 74 20 61 66 74 65 72 20 74 68 65 20 6e 61  ust after the na
4d90: 6d 65 64 20 6d 61 72 6b 2c 20 61 6e 64 20 74 68  med mark, and th
4da0: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
4db0: 64 0a 65 72 61 73 65 73 20 6d 61 72 6b 73 20 66  d.erases marks f
4dc0: 72 6f 6d 20 74 68 65 20 74 69 6d 65 6c 69 6e 65  rom the timeline
4dd0: 20 77 69 74 68 6f 75 74 20 61 63 74 75 61 6c 6c   without actuall
4de0: 79 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 63 68 61  y making any.cha
4df0: 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61 74 61  nges to the data
4e00: 62 61 73 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a  base..</p></li>.
4e10: 3c 2f 75 6c 3e 0a 0a 0a 0a 3c 68 33 3e 54 72 61  </ul>....<h3>Tra
4e20: 6e 73 61 63 74 69 6f 6e 20 4e 65 73 74 69 6e 67  nsaction Nesting
4e30: 20 52 75 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e   Rules</h3>..<p>
4e40: 5e 54 68 65 20 6c 61 73 74 20 74 72 61 6e 73 61  ^The last transa
4e50: 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20 77 69  ction started wi
4e60: 6c 6c 20 62 65 20 74 68 65 20 66 69 72 73 74 0a  ll be the first.
4e70: 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d  transaction comm
4e80: 69 74 74 65 64 20 6f 72 20 72 6f 6c 6c 65 64 20  itted or rolled 
4e90: 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  back.</p>..<p>^T
4ea0: 68 65 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61  he [BEGIN] comma
4eb0: 6e 64 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69 66  nd only works if
4ec0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
4ed0: 20 73 74 61 63 6b 20 69 73 20 65 6d 70 74 79 2c   stack is empty,
4ee0: 20 6f 72 0a 69 6e 20 6f 74 68 65 72 20 77 6f 72   or.in other wor
4ef0: 64 73 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ds if there are 
4f00: 6e 6f 20 70 65 6e 64 69 6e 67 20 74 72 61 6e 73  no pending trans
4f10: 61 63 74 69 6f 6e 73 2e 20 20 5e 49 66 20 74 68  actions.  ^If th
4f20: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 73 74  e transaction.st
4f30: 61 63 6b 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  ack is not empty
4f40: 20 77 68 65 6e 20 74 68 65 20 5b 42 45 47 49 4e   when the [BEGIN
4f50: 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e 76  ] command is inv
4f60: 6f 6b 65 64 2c 20 74 68 65 6e 20 74 68 65 20 63  oked, then the c
4f70: 6f 6d 6d 61 6e 64 0a 66 61 69 6c 73 20 77 69 74  ommand.fails wit
4f80: 68 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a  h an error.</p>.
4f90: 0a 3c 70 3e 5e 54 68 65 20 5b 43 4f 4d 4d 49 54  .<p>^The [COMMIT
4fa0: 5d 20 63 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 69 74  ] command commit
4fb0: 73 20 61 6c 6c 20 6f 75 74 73 74 61 6e 64 69 6e  s all outstandin
4fc0: 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61  g transactions a
4fd0: 6e 64 20 6c 65 61 76 65 73 0a 74 68 65 20 74 72  nd leaves.the tr
4fe0: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20  ansaction stack 
4ff0: 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  empty.</p>..<p>^
5000: 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  The RELEASE comm
5010: 61 6e 64 20 73 74 61 72 74 73 20 77 69 74 68 20  and starts with 
5020: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
5030: 61 64 64 69 74 69 6f 6e 20 74 6f 20 74 68 65 0a  addition to the.
5040: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
5050: 6b 20 61 6e 64 20 72 65 6c 65 61 73 65 73 20 73  k and releases s
5060: 61 76 65 70 6f 69 6e 74 73 20 62 61 63 6b 77 61  avepoints backwa
5070: 72 64 73 20 0a 69 6e 20 74 69 6d 65 20 75 6e 74  rds .in time unt
5080: 69 6c 20 69 74 20 72 65 6c 65 61 73 65 73 20 61  il it releases a
5090: 20 73 61 76 65 70 6f 69 6e 74 20 77 69 74 68 20   savepoint with 
50a0: 61 20 6d 61 74 63 68 69 6e 67 20 73 61 76 65 70  a matching savep
50b0: 6f 69 6e 74 2d 6e 61 6d 65 2e 0a 5e 50 72 69 6f  oint-name..^Prio
50c0: 72 20 73 61 76 65 70 6f 69 6e 74 73 2c 20 65 76  r savepoints, ev
50d0: 65 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 77 69  en savepoints wi
50e0: 74 68 20 6d 61 74 63 68 69 6e 67 20 73 61 76 65  th matching save
50f0: 70 6f 69 6e 74 2d 6e 61 6d 65 73 2c 20 61 72 65  point-names, are
5100: 0a 75 6e 63 68 61 6e 67 65 64 2e 0a 5e 49 66 20  .unchanged..^If 
5110: 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  the RELEASE comm
5120: 61 6e 64 20 63 61 75 73 65 73 20 74 68 65 0a 74  and causes the.t
5130: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b  ransaction stack
5140: 20 74 6f 20 62 65 63 6f 6d 65 20 65 6d 70 74 79   to become empty
5150: 20 28 69 66 20 74 68 65 20 52 45 4c 45 41 53 45   (if the RELEASE
5160: 20 63 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65   command release
5170: 73 20 74 68 65 0a 6f 75 74 65 72 6d 6f 73 74 20  s the.outermost 
5180: 74 72 61 6e 73 61 63 74 69 6f 6e 20 66 72 6f 6d  transaction from
5190: 20 74 68 65 20 73 74 61 63 6b 29 20 74 68 65 6e   the stack) then
51a0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
51b0: 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c   commits.</p>..<
51c0: 70 3e 5e 54 68 65 20 5b 52 4f 4c 4c 42 41 43 4b  p>^The [ROLLBACK
51d0: 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f 75  ] command withou
51e0: 74 20 61 20 54 4f 20 63 6c 61 75 73 65 20 72 6f  t a TO clause ro
51f0: 6c 6c 73 20 62 61 63 6b 73 20 61 6c 6c 20 74 72  lls backs all tr
5200: 61 6e 73 61 63 74 69 6f 6e 73 0a 61 6e 64 20 6c  ansactions.and l
5210: 65 61 76 65 73 20 74 68 65 20 74 72 61 6e 73 61  eaves the transa
5220: 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70 74  ction stack empt
5230: 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  y.</p>..<p>^The 
5240: 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64  ROLLBACK command
5250: 20 77 69 74 68 20 61 20 54 4f 20 63 6c 61 75 73   with a TO claus
5260: 65 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74 72 61  e rolls back tra
5270: 6e 73 61 63 74 69 6f 6e 73 20 67 6f 69 6e 67 0a  nsactions going.
5280: 62 61 63 6b 77 61 72 64 73 20 69 6e 20 74 69 6d  backwards in tim
5290: 65 20 62 61 63 6b 20 74 6f 20 74 68 65 20 6d 6f  e back to the mo
52a0: 73 74 20 72 65 63 65 6e 74 20 53 41 56 45 50 4f  st recent SAVEPO
52b0: 49 4e 54 20 77 69 74 68 20 61 20 6d 61 74 63 68  INT with a match
52c0: 69 6e 67 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 53  ing name..^The S
52d0: 41 56 45 50 4f 49 4e 54 20 77 69 74 68 20 74 68  AVEPOINT with th
52e0: 65 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 20  e matching name 
52f0: 72 65 6d 61 69 6e 73 20 6f 6e 20 74 68 65 20 74  remains on the t
5300: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b  ransaction stack
5310: 2c 0a 62 75 74 20 61 6c 6c 20 64 61 74 61 62 61  ,.but all databa
5320: 73 65 20 63 68 61 6e 67 65 73 20 74 68 61 74 20  se changes that 
5330: 6f 63 63 75 72 72 65 64 20 61 66 74 65 72 20 74  occurred after t
5340: 68 61 74 20 53 41 56 45 50 4f 49 4e 54 20 77 61  hat SAVEPOINT wa
5350: 73 20 63 72 65 61 74 65 64 0a 61 72 65 20 72 6f  s created.are ro
5360: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49 66 20  lled back.  ^If 
5370: 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61  the savepoint-na
5380: 6d 65 20 69 6e 20 61 20 52 4f 4c 4c 42 41 43 4b  me in a ROLLBACK
5390: 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73   TO command does
53a0: 20 6e 6f 74 0a 6d 61 74 63 68 20 61 6e 79 20 53   not.match any S
53b0: 41 56 45 50 4f 49 4e 54 20 6f 6e 20 74 68 65 20  AVEPOINT on the 
53c0: 73 74 61 63 6b 2c 20 74 68 65 6e 20 74 68 65 20  stack, then the 
53d0: 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64  ROLLBACK command
53e0: 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 0a 65   fails with an.e
53f0: 72 72 6f 72 20 61 6e 64 20 6c 65 61 76 65 73 20  rror and leaves 
5400: 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65  the state of the
5410: 20 64 61 74 61 62 61 73 65 20 75 6e 63 68 61 6e   database unchan
5420: 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  ged.</p>..<tcl>.
5430: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5440: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5450: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5460: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5470: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
5480: 53 65 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74 20  Section comment 
5490: 63 6f 6d 6d 65 6e 74 20 7b 63 6f 6d 6d 65 6e 74  comment {comment
54a0: 20 2a 63 6f 6d 6d 65 6e 74 73 7d 0a 0a 42 75 62   *comments}..Bub
54b0: 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d 6d 65  bleDiagram comme
54c0: 6e 74 2d 73 79 6e 74 61 78 0a 3c 2f 74 63 6c 3e  nt-syntax.</tcl>
54d0: 0a 0a 3c 70 3e 43 6f 6d 6d 65 6e 74 73 20 61 72  ..<p>Comments ar
54e0: 65 20 6e 6f 74 20 53 51 4c 20 63 6f 6d 6d 61 6e  e not SQL comman
54f0: 64 73 2c 20 62 75 74 20 63 61 6e 20 6f 63 63 75  ds, but can occu
5500: 72 20 77 69 74 68 69 6e 20 74 68 65 20 74 65 78  r within the tex
5510: 74 20 6f 66 0a 53 51 4c 20 71 75 65 72 69 65 73  t of.SQL queries
5520: 20 70 61 73 73 65 64 20 74 6f 20 5b 73 71 6c 69   passed to [sqli
5530: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29  te3_prepare_v2()
5540: 5d 20 61 6e 64 20 72 65 6c 61 74 65 64 20 69 6e  ] and related in
5550: 74 65 72 66 61 63 65 73 2e 2e 0a 5e 43 6f 6d 6d  terfaces...^Comm
5560: 65 6e 74 73 20 61 72 65 20 74 72 65 61 74 65 64  ents are treated
5570: 20 61 73 20 77 68 69 74 65 73 70 61 63 65 20 62   as whitespace b
5580: 79 20 74 68 65 20 70 61 72 73 65 72 2e 0a 5e 43  y the parser..^C
5590: 6f 6d 6d 65 6e 74 73 20 63 61 6e 20 62 65 67 69  omments can begi
55a0: 6e 20 61 6e 79 77 68 65 72 65 20 77 68 69 74 65  n anywhere white
55b0: 73 70 61 63 65 20 0a 63 61 6e 20 62 65 20 66 6f  space .can be fo
55c0: 75 6e 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69  und, including i
55d0: 6e 73 69 64 65 20 65 78 70 72 65 73 73 69 6f 6e  nside expression
55e0: 73 20 74 68 61 74 20 73 70 61 6e 20 6d 75 6c 74  s that span mult
55f0: 69 70 6c 65 20 6c 69 6e 65 73 2e 0a 3c 2f 70 3e  iple lines..</p>
5600: 0a 0a 3c 70 3e 5e 53 51 4c 20 63 6f 6d 6d 65 6e  ..<p>^SQL commen
5610: 74 73 20 62 65 67 69 6e 20 77 69 74 68 20 74 77  ts begin with tw
5620: 6f 20 63 6f 6e 73 65 63 75 74 69 76 65 20 22 2d  o consecutive "-
5630: 22 20 63 68 61 72 61 63 74 65 72 73 20 28 41 53  " characters (AS
5640: 43 49 49 20 30 78 32 64 29 0a 61 6e 64 20 65 78  CII 0x2d).and ex
5650: 74 65 6e 64 20 75 70 20 74 6f 20 61 6e 64 20 69  tend up to and i
5660: 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 65 78  ncluding the nex
5670: 74 20 6e 65 77 6c 69 6e 65 20 63 68 61 72 61 63  t newline charac
5680: 74 65 72 20 28 41 53 43 49 49 20 30 78 30 61 29  ter (ASCII 0x0a)
5690: 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65 20 65 6e  .or until the en
56a0: 64 20 6f 66 20 69 6e 70 75 74 2c 20 77 68 69 63  d of input, whic
56b0: 68 65 76 65 72 20 63 6f 6d 65 73 20 66 69 72 73  hever comes firs
56c0: 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 20 63 6f  t.</p>..<p>^C co
56d0: 6d 6d 65 6e 74 73 20 63 61 6e 20 73 70 61 6e 20  mments can span 
56e0: 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66 20 6c 69  any number of li
56f0: 6e 65 73 2e 20 20 43 2d 73 74 79 6c 65 20 63 6f  nes.  C-style co
5700: 6d 6d 65 6e 74 73 20 62 65 67 69 6e 0a 77 69 74  mments begin.wit
5710: 68 20 22 2f 2a 22 20 61 6e 64 20 65 78 74 65 6e  h "/*" and exten
5720: 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c  d up to and incl
5730: 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20 22  uding the next "
5740: 2a 2f 22 20 63 68 61 72 61 63 74 65 72 20 70 61  */" character pa
5750: 69 72 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65 20  ir.or until the 
5760: 65 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20 77 68  end of input, wh
5770: 69 63 68 65 76 65 72 20 63 6f 6d 65 73 20 66 69  ichever comes fi
5780: 72 73 74 2e 20 20 5e 43 2d 73 74 79 6c 65 20 63  rst.  ^C-style c
5790: 6f 6d 6d 65 6e 74 73 0a 63 61 6e 20 73 70 61 6e  omments.can span
57a0: 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73 2e   multiple lines.
57b0: 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65   </p>..<p>^Comme
57c0: 6e 74 73 20 63 61 6e 20 61 70 70 65 61 72 20 61  nts can appear a
57d0: 6e 79 77 68 65 72 65 20 77 68 69 74 65 73 70 61  nywhere whitespa
57e0: 63 65 20 63 61 6e 20 6f 63 63 75 72 2c 0a 69 6e  ce can occur,.in
57f0: 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20 65  cluding inside e
5800: 78 70 72 65 73 73 69 6f 6e 73 20 61 6e 64 20 69  xpressions and i
5810: 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20  n the middle of 
5820: 6f 74 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d  other SQL statem
5830: 65 6e 74 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20  ents..^Comments 
5840: 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 0a 3c 2f 70  do not nest..</p
5850: 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  >...<tcl>.######
5860: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5870: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65 63 74 69 6f 6e  ########.Section
58b0: 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20   {CREATE INDEX} 
58c0: 63 72 65 61 74 65 69 6e 64 65 78 20 7b 7b 43 52  createindex {{CR
58d0: 45 41 54 45 20 49 4e 44 45 58 7d 7d 0a 0a 42 75  EATE INDEX}}..Bu
58e0: 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61  bbleDiagram crea
58f0: 74 65 2d 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a  te-index-stmt 1.
5900: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 69 6e  BubbleDiagram in
5910: 64 65 78 65 64 2d 63 6f 6c 75 6d 6e 0a 3c 2f 74  dexed-column.</t
5920: 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45  cl>..<p>^The CRE
5930: 41 54 45 20 49 4e 44 45 58 20 63 6f 6d 6d 61 6e  ATE INDEX comman
5940: 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68  d consists of th
5950: 65 20 6b 65 79 77 6f 72 64 73 20 22 43 52 45 41  e keywords "CREA
5960: 54 45 20 49 4e 44 45 58 22 20 66 6f 6c 6c 6f 77  TE INDEX" follow
5970: 65 64 0a 62 79 20 74 68 65 20 6e 61 6d 65 20 6f  ed.by the name o
5980: 66 20 74 68 65 20 6e 65 77 20 69 6e 64 65 78 2c  f the new index,
5990: 20 74 68 65 20 6b 65 79 77 6f 72 64 20 22 4f 4e   the keyword "ON
59a0: 22 2c 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  ", the name of a
59b0: 20 70 72 65 76 69 6f 75 73 6c 79 0a 63 72 65 61   previously.crea
59c0: 74 65 64 20 74 61 62 6c 65 20 74 68 61 74 20 69  ted table that i
59d0: 73 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 2c  s to be indexed,
59e0: 20 61 6e 64 20 61 20 70 61 72 65 6e 74 68 65 73   and a parenthes
59f0: 69 7a 65 64 20 6c 69 73 74 20 6f 66 20 6e 61 6d  ized list of nam
5a00: 65 73 20 6f 66 0a 63 6f 6c 75 6d 6e 73 20 69 6e  es of.columns in
5a10: 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
5a20: 61 72 65 20 75 73 65 64 20 66 6f 72 20 74 68 65  are used for the
5a30: 20 69 6e 64 65 78 20 6b 65 79 2e 3c 2f 70 3e 0a   index key.</p>.
5a40: 0a 3c 70 3e 5e 45 61 63 68 20 63 6f 6c 75 6d 6e  .<p>^Each column
5a50: 20 6e 61 6d 65 20 63 61 6e 20 62 65 20 66 6f 6c   name can be fol
5a60: 6c 6f 77 65 64 20 62 79 20 6f 6e 65 20 6f 66 20  lowed by one of 
5a70: 74 68 65 20 22 41 53 43 22 20 6f 72 20 22 44 45  the "ASC" or "DE
5a80: 53 43 22 20 6b 65 79 77 6f 72 64 73 0a 74 6f 20  SC" keywords.to 
5a90: 69 6e 64 69 63 61 74 65 20 73 6f 72 74 20 6f 72  indicate sort or
5aa0: 64 65 72 2e 20 20 5e 54 68 65 20 73 6f 72 74 20  der.  ^The sort 
5ab0: 6f 72 64 65 72 20 6d 61 79 20 6f 72 20 6d 61 79  order may or may
5ac0: 20 6e 6f 74 20 62 65 20 69 67 6e 6f 72 65 64 20   not be ignored 
5ad0: 64 65 70 65 6e 64 69 6e 67 0a 6f 6e 20 74 68 65  depending.on the
5ae0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66   database file f
5af0: 6f 72 6d 61 74 2e 20 20 5e 54 68 65 20 22 6c 65  ormat.  ^The "le
5b00: 67 61 63 79 22 20 66 69 6c 65 20 66 6f 72 6d 61  gacy" file forma
5b10: 74 20 69 67 6e 6f 72 65 73 20 69 6e 64 65 78 0a  t ignores index.
5b20: 73 6f 72 74 20 6f 72 64 65 72 2e 20 20 5e 54 68  sort order.  ^Th
5b30: 65 20 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64  e descending ind
5b40: 65 78 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 74  ex file format t
5b50: 61 6b 65 73 20 69 6e 64 65 78 20 73 6f 72 74 20  akes index sort 
5b60: 6f 72 64 65 72 0a 69 6e 74 6f 20 61 63 63 6f 75  order.into accou
5b70: 6e 74 2e 20 20 5e 28 4f 6e 6c 79 20 63 6f 70 69  nt.  ^(Only copi
5b80: 65 73 20 6f 66 20 53 51 4c 69 74 65 20 6e 65 77  es of SQLite new
5b90: 65 72 20 74 68 61 6e 20 5b 76 65 72 73 69 6f 6e  er than [version
5ba0: 20 33 2e 33 2e 30 5d 20 0a 28 72 65 6c 65 61 73   3.3.0] .(releas
5bb0: 65 64 20 6f 6e 20 32 30 30 36 2d 30 31 2d 31 30  ed on 2006-01-10
5bc0: 29 20 61 72 65 20 61 62 6c 65 20 74 6f 20 75 6e  ) are able to un
5bd0: 64 65 72 73 74 61 6e 64 20 74 68 65 20 6e 65 77  derstand the new
5be0: 65 72 20 64 65 73 63 65 6e 64 69 6e 67 0a 69 6e  er descending.in
5bf0: 64 65 78 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  dex file format 
5c00: 61 6e 64 20 73 6f 20 66 6f 72 20 63 6f 6d 70 61  and so for compa
5c10: 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 6f 6c  tibility with ol
5c20: 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a  der versions of.
5c30: 53 51 4c 69 74 65 2c 20 74 68 65 20 6c 65 67 61  SQLite, the lega
5c40: 63 79 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 69  cy file format i
5c50: 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 64  s generated by d
5c60: 65 66 61 75 6c 74 2e 29 5e 20 20 5e 55 73 65 20  efault.)^  ^Use 
5c70: 74 68 65 0a 5b 6c 65 67 61 63 79 5f 66 69 6c 65  the.[legacy_file
5c80: 5f 66 6f 72 6d 61 74 5d 20 70 72 61 67 6d 61 20  _format] pragma 
5c90: 74 6f 20 6d 6f 64 69 66 79 20 74 68 69 73 20 62  to modify this b
5ca0: 65 68 61 76 69 6f 72 20 61 6e 64 20 67 65 6e 65  ehavior and gene
5cb0: 72 61 74 65 0a 64 61 74 61 62 61 73 65 73 20 74  rate.databases t
5cc0: 68 61 74 20 75 73 65 20 74 68 65 20 6e 65 77 65  hat use the newe
5cd0: 72 20 66 69 6c 65 20 66 6f 72 6d 61 74 2e 20 20  r file format.  
5ce0: 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20  Future versions 
5cf0: 6f 66 20 53 51 4c 69 74 65 0a 6d 61 79 20 62 65  of SQLite.may be
5d00: 67 69 6e 20 74 6f 20 67 65 6e 65 72 61 74 65 20  gin to generate 
5d10: 74 68 65 20 6e 65 77 65 72 20 66 69 6c 65 20 66  the newer file f
5d20: 6f 72 6d 61 74 20 62 79 20 64 65 66 61 75 6c 74  ormat by default
5d30: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43  .</p>..<p>^The C
5d40: 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 6f 70  OLLATE clause op
5d50: 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 69  tionally followi
5d60: 6e 67 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6e  ng each column n
5d70: 61 6d 65 20 64 65 66 69 6e 65 73 20 61 0a 63 6f  ame defines a.co
5d80: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
5d90: 20 75 73 65 64 20 66 6f 72 20 74 65 78 74 20 65   used for text e
5da0: 6e 74 72 69 65 73 20 69 6e 20 74 68 61 74 20 63  ntries in that c
5db0: 6f 6c 75 6d 6e 2e 0a 5e 54 68 65 20 64 65 66 61  olumn..^The defa
5dc0: 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 73 65  ult collating.se
5dd0: 71 75 65 6e 63 65 20 69 73 20 74 68 65 20 63 6f  quence is the co
5de0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
5df0: 20 64 65 66 69 6e 65 64 20 66 6f 72 20 74 68 61   defined for tha
5e00: 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 0a  t column in the.
5e10: 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73  [CREATE TABLE] s
5e20: 74 61 74 65 6d 65 6e 74 2e 20 20 5e 4f 72 20 69  tatement.  ^Or i
5e30: 66 20 6e 6f 20 63 6f 6c 6c 61 74 69 6e 67 20 73  f no collating s
5e40: 65 71 75 65 6e 63 65 20 69 73 20 6f 74 68 65 72  equence is other
5e50: 77 69 73 65 20 64 65 66 69 6e 65 64 2c 0a 74 68  wise defined,.th
5e60: 65 20 62 75 69 6c 74 2d 69 6e 20 42 49 4e 41 52  e built-in BINAR
5e70: 59 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  Y collating sequ
5e80: 65 6e 63 65 20 69 73 20 75 73 65 64 2e 3c 2f 70  ence is used.</p
5e90: 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20  >..<p>There are 
5ea0: 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c 69 6d  no arbitrary lim
5eb0: 69 74 73 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65  its on the numbe
5ec0: 72 20 6f 66 20 69 6e 64 69 63 65 73 20 74 68 61  r of indices tha
5ed0: 74 20 63 61 6e 20 62 65 0a 61 74 74 61 63 68 65  t can be.attache
5ee0: 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61  d to a single ta
5ef0: 62 6c 65 2e 20 20 5e 54 68 65 20 6e 75 6d 62 65  ble.  ^The numbe
5f00: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
5f10: 61 6e 20 69 6e 64 65 78 20 69 73 20 0a 6c 69 6d  an index is .lim
5f20: 69 74 65 64 20 74 6f 20 74 68 65 20 76 61 6c 75  ited to the valu
5f30: 65 20 73 65 74 20 62 79 0a 5b 73 71 6c 69 74 65  e set by.[sqlite
5f40: 33 5f 6c 69 6d 69 74 5d 28 5b 53 51 4c 49 54 45  3_limit]([SQLITE
5f50: 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 5d 2c 2e  _LIMIT_COLUMN],.
5f60: 2e 2e 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66  ..).</p>..<p>^If
5f70: 20 74 68 65 20 55 4e 49 51 55 45 20 6b 65 79 77   the UNIQUE keyw
5f80: 6f 72 64 20 61 70 70 65 61 72 73 20 62 65 74 77  ord appears betw
5f90: 65 65 6e 20 43 52 45 41 54 45 20 61 6e 64 20 49  een CREATE and I
5fa0: 4e 44 45 58 20 74 68 65 6e 20 64 75 70 6c 69 63  NDEX then duplic
5fb0: 61 74 65 0a 69 6e 64 65 78 20 65 6e 74 72 69 65  ate.index entrie
5fc0: 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65  s are not allowe
5fd0: 64 2e 20 20 5e 41 6e 79 20 61 74 74 65 6d 70 74  d.  ^Any attempt
5fe0: 20 74 6f 20 69 6e 73 65 72 74 20 61 20 64 75 70   to insert a dup
5ff0: 6c 69 63 61 74 65 20 65 6e 74 72 79 0a 77 69 6c  licate entry.wil
6000: 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 65  l result in an e
6010: 72 72 6f 72 2e 20 20 5e 46 6f 72 20 74 68 65 20  rror.  ^For the 
6020: 70 75 72 70 6f 73 65 73 20 6f 66 20 75 6e 69 71  purposes of uniq
6030: 75 65 20 69 6e 64 69 63 65 73 2c 20 61 6c 6c 20  ue indices, all 
6040: 4e 55 4c 4c 20 76 61 6c 75 65 73 0a 61 72 65 20  NULL values.are 
6050: 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 64 69  considered to di
6060: 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 61 6c 6c  fferent from all
6070: 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75   other NULL valu
6080: 65 73 20 61 6e 64 20 61 72 65 20 74 68 75 73 20  es and are thus 
6090: 75 6e 69 71 75 65 2e 0a 54 68 69 73 20 69 73 20  unique..This is 
60a0: 6f 6e 65 20 6f 66 20 74 68 65 20 74 77 6f 20 70  one of the two p
60b0: 6f 73 73 69 62 6c 65 20 69 6e 74 65 72 70 72 65  ossible interpre
60c0: 74 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 53  tations of the S
60d0: 51 4c 2d 39 32 20 73 74 61 6e 64 61 72 64 0a 28  QL-92 standard.(
60e0: 74 68 65 20 6c 61 6e 67 75 61 67 65 20 69 6e 20  the language in 
60f0: 74 68 65 20 73 74 61 6e 64 61 72 64 20 69 73 20  the standard is 
6100: 61 6d 62 69 67 75 69 6f 75 73 29 20 61 6e 64 20  ambiguious) and 
6110: 69 73 20 74 68 65 20 69 6e 74 65 72 70 72 65 74  is the interpret
6120: 61 74 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62  ation.followed b
6130: 79 20 50 6f 73 74 67 72 65 53 51 4c 2c 20 4d 79  y PostgreSQL, My
6140: 53 51 4c 2c 20 46 69 72 65 62 69 72 64 2c 20 61  SQL, Firebird, a
6150: 6e 64 20 4f 72 61 63 6c 65 2e 20 20 49 6e 66 6f  nd Oracle.  Info
6160: 72 6d 69 78 20 61 6e 64 0a 4d 69 63 72 6f 73 6f  rmix and.Microso
6170: 66 74 20 53 51 4c 20 53 65 72 76 65 72 20 66 6f  ft SQL Server fo
6180: 6c 6c 6f 77 20 74 68 65 20 6f 74 68 65 72 20 69  llow the other i
6190: 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
61a0: 20 74 68 65 20 73 74 61 6e 64 61 72 64 2e 3c 2f   the standard.</
61b0: 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f  p>..<p>^If the o
61c0: 70 74 69 6f 6e 61 6c 20 49 46 20 4e 4f 54 20 45  ptional IF NOT E
61d0: 58 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20  XISTS clause is 
61e0: 70 72 65 73 65 6e 74 20 61 6e 64 20 61 6e 6f 74  present and anot
61f0: 68 65 72 20 69 6e 64 65 78 0a 77 69 74 68 20 74  her index.with t
6200: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 65  he same name ale
6210: 61 64 79 20 65 78 69 73 74 73 2c 20 74 68 65 6e  ady exists, then
6220: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 62 65   this command be
6230: 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 3c 2f  comes a no-op.</
6240: 70 3e 0a 0a 3c 70 3e 5e 49 6e 64 65 78 65 73 20  p>..<p>^Indexes 
6250: 61 72 65 20 72 65 6d 6f 76 65 64 20 77 69 74 68  are removed with
6260: 20 74 68 65 20 5b 44 52 4f 50 20 49 4e 44 45 58   the [DROP INDEX
6270: 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a  ] command.</p>..
6280: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
6290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
62a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65 63 74 69 6f 6e 20 7b 43  #####.Section {C
62e0: 52 45 41 54 45 20 54 41 42 4c 45 7d 20 7b 63 72  REATE TABLE} {cr
62f0: 65 61 74 65 74 61 62 6c 65 7d 20 7b 7b 43 52 45  eatetable} {{CRE
6300: 41 54 45 20 54 41 42 4c 45 7d 7d 0a 0a 42 75 62  ATE TABLE}}..Bub
6310: 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74  bleDiagram creat
6320: 65 2d 74 61 62 6c 65 2d 73 74 6d 74 20 31 0a 42  e-table-stmt 1.B
6330: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6c  ubbleDiagram col
6340: 75 6d 6e 2d 64 65 66 0a 42 75 62 62 6c 65 44 69  umn-def.BubbleDi
6350: 61 67 72 61 6d 20 74 79 70 65 2d 6e 61 6d 65 0a  agram type-name.
6360: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f  BubbleDiagram co
6370: 6c 75 6d 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 0a  lumn-constraint.
6380: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 74 61  BubbleDiagram ta
6390: 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74 0a 42  ble-constraint.B
63a0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 66 6f 72  ubbleDiagram for
63b0: 65 69 67 6e 2d 6b 65 79 2d 63 6c 61 75 73 65 0a  eign-key-clause.
63c0: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 20 43 52  </tcl>..<p>^A CR
63d0: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
63e0: 6d 65 6e 74 20 69 73 20 62 61 73 69 63 61 6c 6c  ment is basicall
63f0: 79 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22  y the keywords "
6400: 43 52 45 41 54 45 20 54 41 42 4c 45 22 0a 66 6f  CREATE TABLE".fo
6410: 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 20 6e 61  llowed by the na
6420: 6d 65 20 6f 66 20 61 20 6e 65 77 20 74 61 62 6c  me of a new tabl
6430: 65 20 61 6e 64 20 61 20 70 61 72 65 6e 74 68 65  e and a parenthe
6440: 73 69 7a 65 64 20 6c 69 73 74 20 6f 66 20 63 6f  sized list of co
6450: 6c 75 6d 6e 0a 64 65 66 69 6e 69 74 69 6f 6e 73  lumn.definitions
6460: 20 61 6e 64 20 63 6f 6e 73 74 72 61 69 6e 74 73   and constraints
6470: 2e 20 20 0a 5e 54 61 62 6c 65 73 20 6e 61 6d 65  .  .^Tables name
6480: 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74  s that begin wit
6490: 68 20 22 3c 62 3e 73 71 6c 69 74 65 5f 3c 2f 62  h "<b>sqlite_</b
64a0: 3e 22 20 61 72 65 20 72 65 73 65 72 76 65 64 0a  >" are reserved.
64b0: 66 6f 72 20 75 73 65 20 62 79 20 53 51 4c 69 74  for use by SQLit
64c0: 65 20 69 74 73 65 6c 66 20 61 6e 64 20 63 61 6e  e itself and can
64d0: 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 0a 61 70 70  not normally.app
64e0: 65 61 72 20 69 6e 20 61 20 43 52 45 41 54 45 20  ear in a CREATE 
64f0: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e  TABLE statement.
6500: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 45 61 63 68 20 63  </p>..<p>^Each c
6510: 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e  olumn definition
6520: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
6530: 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 70 74 69 6f  the column optio
6540: 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62  nally followed b
6550: 79 20 74 68 65 0a 5b 64 61 74 61 74 79 70 65 5d  y the.[datatype]
6560: 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e   for that column
6570: 2c 20 74 68 65 6e 20 6f 6e 65 20 6f 72 20 6d 6f  , then one or mo
6580: 72 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6c 75  re optional colu
6590: 6d 6e 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0a  mn constraints..
65a0: 5e 53 51 4c 69 74 65 20 75 73 65 73 20 5b 64 79  ^SQLite uses [dy
65b0: 6e 61 6d 69 63 20 74 79 70 69 6e 67 5d 3b 20 0a  namic typing]; .
65c0: 74 68 65 20 64 61 74 61 74 79 70 65 20 66 6f 72  the datatype for
65d0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 64 6f 65 73   the column does
65e0: 20 6e 6f 74 20 72 65 73 74 72 69 63 74 20 77 68   not restrict wh
65f0: 61 74 20 64 61 74 61 20 6d 61 79 20 62 65 20 70  at data may be p
6600: 75 74 0a 69 6e 20 74 68 61 74 20 63 6f 6c 75 6d  ut.in that colum
6610: 6e 2e 0a 5e 54 68 65 20 55 4e 49 51 55 45 20 63  n..^The UNIQUE c
6620: 6f 6e 73 74 72 61 69 6e 74 20 63 61 75 73 65 73  onstraint causes
6630: 20 61 6e 20 75 6e 69 71 75 65 20 69 6e 64 65 78   an unique index
6640: 20 74 6f 20 62 65 20 63 72 65 61 74 65 64 20 6f   to be created o
6650: 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64 0a  n the specified.
6660: 63 6f 6c 75 6d 6e 73 2e 20 20 5e 41 6c 6c 20 4e  columns.  ^All N
6670: 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63  ULL values are c
6680: 6f 6e 73 69 64 65 72 65 64 20 64 69 66 66 65 72  onsidered differ
6690: 65 6e 74 20 66 72 6f 6d 20 65 61 63 68 20 6f 74  ent from each ot
66a0: 68 65 72 20 61 6e 64 20 66 72 6f 6d 0a 61 6c 6c  her and from.all
66b0: 20 6f 74 68 65 72 20 76 61 6c 75 65 73 20 66 6f   other values fo
66c0: 72 20 74 68 65 20 70 75 72 70 6f 73 65 20 6f 66  r the purpose of
66d0: 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 75 6e 69   determining uni
66e0: 71 75 65 6e 65 73 73 2c 20 68 65 6e 63 65 20 61  queness, hence a
66f0: 20 55 4e 49 51 55 45 0a 63 6f 6c 75 6d 6e 20 6d   UNIQUE.column m
6700: 61 79 20 63 6f 6e 74 61 69 6e 20 6d 75 6c 74 69  ay contain multi
6710: 70 6c 65 20 65 6e 74 72 69 65 73 20 77 69 74 68  ple entries with
6720: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 4e 55   the value of NU
6730: 4c 4c 2e 0a 5e 54 68 65 20 43 4f 4c 4c 41 54 45  LL..^The COLLATE
6740: 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65   clause specifie
6750: 73 20 77 68 61 74 20 74 65 78 74 20 0a 5b 63 6f  s what text .[co
6760: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
6770: 5d 20 74 6f 20 75 73 65 20 77 68 65 6e 20 63 6f  ] to use when co
6780: 6d 70 61 72 69 6e 67 20 74 65 78 74 20 65 6e 74  mparing text ent
6790: 72 69 65 73 20 66 6f 72 20 74 68 65 20 63 6f 6c  ries for the col
67a0: 75 6d 6e 2e 20 20 0a 5e 54 68 65 20 62 75 69 6c  umn.  .^The buil
67b0: 74 2d 69 6e 20 5b 42 49 4e 41 52 59 5d 20 63 6f  t-in [BINARY] co
67c0: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
67d0: 20 69 73 20 75 73 65 64 20 62 79 20 64 65 66 61   is used by defa
67e0: 75 6c 74 2e 0a 3c 70 3e 0a 5e 54 68 65 20 44 45  ult..<p>.^The DE
67f0: 46 41 55 4c 54 20 63 6f 6e 73 74 72 61 69 6e 74  FAULT constraint
6800: 20 73 70 65 63 69 66 69 65 73 20 61 20 64 65 66   specifies a def
6810: 61 75 6c 74 20 76 61 6c 75 65 20 74 6f 20 75 73  ault value to us
6820: 65 20 77 68 65 6e 20 64 6f 69 6e 67 20 61 6e 20  e when doing an 
6830: 5b 49 4e 53 45 52 54 5d 2e 0a 5e 54 68 65 20 76  [INSERT]..^The v
6840: 61 6c 75 65 20 6d 61 79 20 62 65 20 4e 55 4c 4c  alue may be NULL
6850: 2c 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 74  , a string const
6860: 61 6e 74 2c 20 61 20 6e 75 6d 62 65 72 2c 20 6f  ant, a number, o
6870: 72 20 61 20 63 6f 6e 73 74 61 6e 74 20 65 78 70  r a constant exp
6880: 72 65 73 73 69 6f 6e 0a 65 6e 63 6c 6f 73 65 64  ression.enclosed
6890: 20 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73 2e   in parentheses.
68a0: 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20 76 61  .^The default va
68b0: 6c 75 65 20 6d 61 79 20 61 6c 73 6f 20 62 65 20  lue may also be 
68c0: 6f 6e 65 20 6f 66 20 74 68 65 20 73 70 65 63 69  one of the speci
68d0: 61 6c 20 63 61 73 65 2d 69 6e 64 65 70 65 6e 64  al case-independ
68e0: 61 6e 74 0a 6b 65 79 77 6f 72 64 73 20 43 55 52  ant.keywords CUR
68f0: 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45  RENT_TIME, CURRE
6900: 4e 54 5f 44 41 54 45 20 6f 72 20 43 55 52 52 45  NT_DATE or CURRE
6910: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2e 20 20 5e  NT_TIMESTAMP.  ^
6920: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 0a  If the value is.
6930: 4e 55 4c 4c 2c 20 61 20 73 74 72 69 6e 67 20 63  NULL, a string c
6940: 6f 6e 73 74 61 6e 74 20 6f 72 20 6e 75 6d 62 65  onstant or numbe
6950: 72 2c 20 69 74 20 69 73 20 69 6e 73 65 72 74 65  r, it is inserte
6960: 64 20 69 6e 74 6f 20 74 68 65 20 63 6f 6c 75 6d  d into the colum
6970: 6e 0a 77 68 65 6e 65 76 65 72 20 61 6e 20 49 4e  n.whenever an IN
6980: 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 74  SERT statement t
6990: 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 73 70 65  hat does not spe
69a0: 63 69 66 79 20 61 20 76 61 6c 75 65 20 66 6f 72  cify a value for
69b0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 0a 65   the column is.e
69c0: 78 65 63 75 74 65 64 2e 20 5e 49 66 20 74 68 65  xecuted. ^If the
69d0: 20 76 61 6c 75 65 20 69 73 20 43 55 52 52 45 4e   value is CURREN
69e0: 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f  T_TIME, CURRENT_
69f0: 44 41 54 45 20 6f 72 20 43 55 52 52 45 4e 54 5f  DATE or CURRENT_
6a00: 54 49 4d 45 53 54 41 4d 50 2c 20 74 68 65 6e 0a  TIMESTAMP, then.
6a10: 74 68 65 20 63 75 72 72 65 6e 74 20 55 54 43 20  the current UTC 
6a20: 64 61 74 65 20 61 6e 64 2f 6f 72 20 74 69 6d 65  date and/or time
6a30: 20 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74   is inserted int
6a40: 6f 20 74 68 65 20 63 6f 6c 75 6d 6e 73 2e 20 5e  o the columns. ^
6a50: 46 6f 72 0a 43 55 52 52 45 4e 54 5f 54 49 4d 45  For.CURRENT_TIME
6a60: 2c 20 74 68 65 20 66 6f 72 6d 61 74 20 69 73 20  , the format is 
6a70: 48 48 3a 4d 4d 3a 53 53 2e 20 5e 46 6f 72 20 43  HH:MM:SS. ^For C
6a80: 55 52 52 45 4e 54 5f 44 41 54 45 2c 20 59 59 59  URRENT_DATE, YYY
6a90: 59 2d 4d 4d 2d 44 44 2e 0a 5e 54 68 65 20 66 6f  Y-MM-DD..^The fo
6aa0: 72 6d 61 74 20 66 6f 72 20 43 55 52 52 45 4e 54  rmat for CURRENT
6ab0: 5f 54 49 4d 45 53 54 41 4d 50 20 69 73 20 22 59  _TIMESTAMP is "Y
6ac0: 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a  YYY-MM-DD HH:MM:
6ad0: 53 53 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28  SS"..</p>..<p>^(
6ae0: 54 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  The PRIMARY KEY 
6af0: 61 74 74 72 69 62 75 74 65 20 6e 6f 72 6d 61 6c  attribute normal
6b00: 6c 79 20 63 72 65 61 74 65 73 20 61 20 55 4e 49  ly creates a UNI
6b10: 51 55 45 20 69 6e 64 65 78 20 6f 6e 0a 74 68 65  QUE index on.the
6b20: 20 63 6f 6c 75 6d 6e 20 6f 72 20 63 6f 6c 75 6d   column or colum
6b30: 6e 73 20 74 68 61 74 20 61 72 65 20 73 70 65 63  ns that are spec
6b40: 69 66 69 65 64 20 61 73 20 74 68 65 20 50 52 49  ified as the PRI
6b50: 4d 41 52 59 20 4b 45 59 2e 20 20 54 68 65 20 6f  MARY KEY.  The o
6b60: 6e 6c 79 0a 65 78 63 65 70 74 69 6f 6e 20 74 6f  nly.exception to
6b70: 20 74 68 69 73 20 62 65 68 61 76 69 6f 72 20 69   this behavior i
6b80: 73 20 73 70 65 63 69 61 6c 20 5b 49 4e 54 45 47  s special [INTEG
6b90: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20  ER PRIMARY KEY] 
6ba0: 63 6f 6c 75 6d 6e 2c 0a 64 65 73 63 72 69 62 65  column,.describe
6bb0: 64 20 62 65 6c 6f 77 2e 29 5e 0a 5e 28 41 63 63  d below.)^.^(Acc
6bc0: 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 53 51  ording to the SQ
6bd0: 4c 20 73 74 61 6e 64 61 72 64 2c 20 50 52 49 4d  L standard, PRIM
6be0: 41 52 59 20 4b 45 59 20 73 68 6f 75 6c 64 20 69  ARY KEY should i
6bf0: 6d 70 6c 79 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 55  mply NOT NULL..U
6c00: 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20 64 75  nfortunately, du
6c10: 65 20 74 6f 20 61 20 6c 6f 6e 67 2d 73 74 61 6e  e to a long-stan
6c20: 64 69 6e 67 20 63 6f 64 69 6e 67 20 6f 76 65 72  ding coding over
6c30: 73 69 67 68 74 2c 20 74 68 69 73 20 69 73 20 6e  sight, this is n
6c40: 6f 74 20 0a 74 68 65 20 63 61 73 65 20 69 6e 20  ot .the case in 
6c50: 53 51 4c 69 74 65 2e 20 20 53 51 4c 69 74 65 20  SQLite.  SQLite 
6c60: 61 6c 6c 6f 77 73 20 4e 55 4c 4c 20 76 61 6c 75  allows NULL valu
6c70: 65 73 0a 69 6e 20 61 20 50 52 49 4d 41 52 59 20  es.in a PRIMARY 
6c80: 4b 45 59 20 63 6f 6c 75 6d 6e 2e 29 5e 20 20 57  KEY column.)^  W
6c90: 65 20 63 6f 75 6c 64 20 63 68 61 6e 67 65 20 53  e could change S
6ca0: 51 4c 69 74 65 20 74 6f 20 63 6f 6e 66 6f 72 6d  QLite to conform
6cb0: 20 74 6f 20 74 68 65 0a 73 74 61 6e 64 61 72 64   to the.standard
6cc0: 20 28 61 6e 64 20 77 65 20 6d 69 67 68 74 20 64   (and we might d
6cd0: 6f 20 73 6f 20 69 6e 20 74 68 65 20 66 75 74 75  o so in the futu
6ce0: 72 65 29 2c 20 62 75 74 20 62 79 20 74 68 65 20  re), but by the 
6cf0: 74 69 6d 65 20 74 68 65 0a 6f 76 65 72 73 69 67  time the.oversig
6d00: 68 74 20 77 61 73 20 64 69 73 63 6f 76 65 72 65  ht was discovere
6d10: 64 2c 20 53 51 4c 69 74 65 20 77 61 73 20 69 6e  d, SQLite was in
6d20: 20 73 75 63 68 20 77 69 64 65 20 75 73 65 20 74   such wide use t
6d30: 68 61 74 20 77 65 20 66 65 61 72 65 64 0a 62 72  hat we feared.br
6d40: 65 61 6b 69 6e 67 20 6c 65 67 61 63 79 20 63 6f  eaking legacy co
6d50: 64 65 20 69 66 20 77 65 20 66 69 78 65 64 20 74  de if we fixed t
6d60: 68 65 20 70 72 6f 62 6c 65 6d 2e 20 20 53 6f 20  he problem.  So 
6d70: 66 6f 72 20 6e 6f 77 20 77 65 20 68 61 76 65 0a  for now we have.
6d80: 63 68 6f 73 65 6e 20 74 6f 20 63 6f 6e 74 69 6e  chosen to contin
6d90: 75 65 20 61 6c 6c 6f 77 69 6e 67 20 4e 55 4c 4c  ue allowing NULL
6da0: 73 20 69 6e 20 50 52 49 4d 41 52 59 20 4b 45 59  s in PRIMARY KEY
6db0: 20 63 6f 6c 75 6d 6e 73 2e 0a 44 65 76 65 6c 6f   columns..Develo
6dc0: 70 65 72 73 20 73 68 6f 75 6c 64 20 62 65 20 61  pers should be a
6dd0: 77 61 72 65 2c 20 68 6f 77 65 76 65 72 2c 20 74  ware, however, t
6de0: 68 61 74 20 77 65 20 6d 61 79 20 63 68 61 6e 67  hat we may chang
6df0: 65 20 53 51 4c 69 74 65 20 74 6f 0a 63 6f 6e 66  e SQLite to.conf
6e00: 6f 72 6d 20 74 6f 20 74 68 65 20 53 51 4c 20 73  orm to the SQL s
6e10: 74 61 6e 64 61 72 64 20 69 6e 20 66 75 74 75 72  tandard in futur
6e20: 65 20 61 6e 64 20 73 68 6f 75 6c 64 20 64 65 73  e and should des
6e30: 69 67 6e 20 6e 65 77 20 70 72 6f 67 72 61 6d 73  ign new programs
6e40: 0a 61 63 63 6f 72 64 69 6e 67 6c 79 2e 3c 2f 70  .accordingly.</p
6e50: 3e 0a 0a 3c 70 3e 5e 53 51 4c 69 74 65 20 75 73  >..<p>^SQLite us
6e60: 65 73 20 5b 64 79 6e 61 6d 69 63 20 74 79 70 69  es [dynamic typi
6e70: 6e 67 5d 20 69 6e 73 74 65 61 64 20 6f 66 20 73  ng] instead of s
6e80: 74 61 74 69 63 20 74 79 70 69 6e 67 2e 20 20 5e  tatic typing.  ^
6e90: 45 78 63 65 70 74 20 66 6f 72 20 74 68 65 0a 73  Except for the.s
6ea0: 70 65 63 69 61 6c 20 63 61 73 65 20 6f 66 20 5b  pecial case of [
6eb0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
6ec0: 4b 45 59 5d 2c 20 53 51 4c 69 74 65 20 77 69 6c  KEY], SQLite wil
6ed0: 6c 20 61 6c 6c 6f 77 20 76 61 6c 75 65 73 20 6f  l allow values o
6ee0: 66 20 61 6e 79 0a 74 79 70 65 20 74 6f 20 62 65  f any.type to be
6ef0: 20 73 74 6f 72 65 64 20 69 6e 20 61 6e 79 20 63   stored in any c
6f00: 6f 6c 75 6d 6e 20 72 65 67 61 72 64 6c 65 73 73  olumn regardless
6f10: 20 6f 66 20 74 68 65 20 64 65 63 6c 61 72 65 64   of the declared
6f20: 20 64 61 74 61 74 79 70 65 20 6f 66 0a 74 68 61   datatype of.tha
6f30: 74 20 63 6f 6c 75 6d 6e 2e 20 20 5e 54 68 65 20  t column.  ^The 
6f40: 64 65 63 6c 61 72 65 64 20 64 61 74 61 74 79 70  declared datatyp
6f50: 65 20 69 73 20 61 20 5b 61 66 66 69 6e 69 74 79  e is a [affinity
6f60: 20 7c 20 74 79 70 65 20 61 66 66 69 6e 69 74 79   | type affinity
6f70: 5d 20 74 68 61 74 0a 53 51 4c 69 74 65 20 61 74  ] that.SQLite at
6f80: 74 65 6d 70 74 73 20 74 6f 20 63 6f 6d 70 6c 79  tempts to comply
6f90: 20 77 69 74 68 2c 20 62 75 74 20 74 68 65 20 6f   with, but the o
6fa0: 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 70 72  peration will pr
6fb0: 6f 63 65 65 64 20 65 76 65 6e 20 69 66 0a 63 6f  oceed even if.co
6fc0: 6d 70 6c 69 61 6e 63 65 20 69 73 20 6e 6f 74 20  mpliance is not 
6fd0: 70 6f 73 73 69 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c  possible.</p>..<
6fe0: 70 3e 5e 49 66 20 74 68 65 20 22 54 45 4d 50 22  p>^If the "TEMP"
6ff0: 20 6f 72 20 22 54 45 4d 50 4f 52 41 52 59 22 20   or "TEMPORARY" 
7000: 6b 65 79 77 6f 72 64 20 6f 63 63 75 72 73 20 69  keyword occurs i
7010: 6e 20 62 65 74 77 65 65 6e 20 22 43 52 45 41 54  n between "CREAT
7020: 45 22 0a 61 6e 64 20 22 54 41 42 4c 45 22 20 74  E".and "TABLE" t
7030: 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 68  hen the table th
7040: 61 74 20 69 73 20 63 72 65 61 74 65 64 20 69 73  at is created is
7050: 20 6f 6e 6c 79 20 76 69 73 69 62 6c 65 0a 77 69   only visible.wi
7060: 74 68 69 6e 20 74 68 61 74 20 73 61 6d 65 20 64  thin that same d
7070: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
7080: 6f 6e 0a 61 6e 64 20 69 73 20 61 75 74 6f 6d 61  on.and is automa
7090: 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 20  tically deleted 
70a0: 77 68 65 6e 0a 74 68 65 20 64 61 74 61 62 61 73  when.the databas
70b0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
70c0: 63 6c 6f 73 65 64 2e 20 20 5e 41 6e 79 20 69 6e  closed.  ^Any in
70d0: 64 69 63 65 73 20 63 72 65 61 74 65 64 20 6f 6e  dices created on
70e0: 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62   a temporary tab
70f0: 6c 65 0a 61 72 65 20 61 6c 73 6f 20 74 65 6d 70  le.are also temp
7100: 6f 72 61 72 79 2e 20 20 5e 54 65 6d 70 6f 72 61  orary.  ^Tempora
7110: 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  ry tables and in
7120: 64 69 63 65 73 20 61 72 65 20 73 74 6f 72 65 64  dices are stored
7130: 20 69 6e 20 61 0a 73 65 70 61 72 61 74 65 20 66   in a.separate f
7140: 69 6c 65 20 64 69 73 74 69 6e 63 74 20 66 72 6f  ile distinct fro
7150: 6d 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  m the main datab
7160: 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c  ase file.</p>..<
7170: 70 3e 20 5e 49 66 20 61 20 26 6c 74 3b 64 61 74  p> ^If a &lt;dat
7180: 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69  abase-name&gt; i
7190: 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65  s specified, the
71a0: 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 63  n the table is c
71b0: 72 65 61 74 65 64 20 69 6e 20 0a 74 68 65 20 6e  reated in .the n
71c0: 61 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20 5e  amed database. ^
71d0: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74  It is an error t
71e0: 6f 20 73 70 65 63 69 66 79 20 62 6f 74 68 20 61  o specify both a
71f0: 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61   &lt;database-na
7200: 6d 65 26 67 74 3b 0a 61 6e 64 20 74 68 65 20 54  me&gt;.and the T
7210: 45 4d 50 20 6b 65 79 77 6f 72 64 2c 20 75 6e 6c  EMP keyword, unl
7220: 65 73 73 20 74 68 65 20 26 6c 74 3b 64 61 74 61  ess the &lt;data
7230: 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73  base-name&gt; is
7240: 20 22 74 65 6d 70 22 2e 20 5e 49 66 20 6e 6f 0a   "temp". ^If no.
7250: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73  database name is
7260: 20 73 70 65 63 69 66 69 65 64 2c 20 61 6e 64 20   specified, and 
7270: 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f 72 64  the TEMP keyword
7280: 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 2c   is not present,
7290: 0a 74 68 65 20 74 61 62 6c 65 20 69 73 20 63 72  .the table is cr
72a0: 65 61 74 65 64 20 69 6e 20 74 68 65 20 6d 61 69  eated in the mai
72b0: 6e 20 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a  n database.</p>.
72c0: 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61  .<p>^The optiona
72d0: 6c 20 5b 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75  l [conflict clau
72e0: 73 65 5d 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 61  se] following ea
72f0: 63 68 20 63 6f 6e 73 74 72 61 69 6e 74 0a 61 6c  ch constraint.al
7300: 6c 6f 77 73 20 74 68 65 20 73 70 65 63 69 66 69  lows the specifi
7310: 63 61 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c 74  cation of an alt
7320: 65 72 6e 61 74 69 76 65 20 64 65 66 61 75 6c 74  ernative default
7330: 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66  .constraint conf
7340: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
7350: 61 6c 67 6f 72 69 74 68 6d 20 66 6f 72 20 74 68  algorithm for th
7360: 61 74 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 5e  at constraint..^
7370: 49 66 20 6e 6f 20 63 6f 6e 66 6c 69 63 74 20 63  If no conflict c
7380: 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69  lause is specifi
7390: 65 64 2c 20 74 68 65 20 41 42 4f 52 54 20 61 6c  ed, the ABORT al
73a0: 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e  gorithm is used.
73b0: 0a 5e 44 69 66 66 65 72 65 6e 74 20 63 6f 6e 73  .^Different cons
73c0: 74 72 61 69 6e 74 73 20 77 69 74 68 69 6e 20 74  traints within t
73d0: 68 65 20 73 61 6d 65 0a 74 61 62 6c 65 20 6d 61  he same.table ma
73e0: 79 20 68 61 76 65 20 64 69 66 66 65 72 65 6e 74  y have different
73f0: 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
7400: 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 73 2e  tion algorithms.
7410: 0a 5e 49 66 20 61 6e 20 5b 49 4e 53 45 52 54 5d  .^If an [INSERT]
7420: 20 6f 72 20 5b 55 50 44 41 54 45 5d 20 73 74 61   or [UPDATE] sta
7430: 74 65 6d 65 6e 74 20 73 70 65 63 69 66 69 65 73  tement specifies
7440: 20 61 20 63 6f 6e 66 6c 69 63 74 0a 72 65 73 6f   a conflict.reso
7450: 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
7460: 2c 20 74 68 65 6e 20 74 68 65 20 61 6c 67 6f 72  , then the algor
7470: 69 74 68 6d 20 73 70 65 63 69 66 69 65 64 20 6f  ithm specified o
7480: 6e 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 0a  n the INSERT or.
7490: 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
74a0: 20 6f 76 65 72 72 69 64 65 73 20 74 68 65 20 61   overrides the a
74b0: 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66 69  lgorithm specifi
74c0: 65 64 20 69 6e 20 74 68 65 20 0a 43 52 45 41 54  ed in the .CREAT
74d0: 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
74e0: 74 2e 0a 53 65 65 20 74 68 65 20 73 65 63 74 69  t..See the secti
74f0: 6f 6e 20 74 69 74 6c 65 64 0a 5b 4f 4e 20 43 4f  on titled.[ON CO
7500: 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69  NFLICT] for addi
7510: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
7520: 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 43 48 45 43  on.</p>..<p>CHEC
7530: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72  K constraints ar
7540: 65 20 73 75 70 70 6f 72 74 65 64 20 61 73 20 6f  e supported as o
7550: 66 20 5b 76 65 72 73 69 6f 6e 20 33 2e 33 2e 30  f [version 3.3.0
7560: 5d 2e 20 20 50 72 69 6f 72 0a 74 6f 20 76 65 72  ].  Prior.to ver
7570: 73 69 6f 6e 20 33 2e 33 2e 30 2c 20 43 48 45 43  sion 3.3.0, CHEC
7580: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 65  K constraints we
7590: 72 65 20 70 61 72 73 65 64 20 62 75 74 20 6e 6f  re parsed but no
75a0: 74 20 65 6e 66 6f 72 63 65 64 2e 3c 2f 70 3e 0a  t enforced.</p>.
75b0: 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d 62 65 72 20  .<p>^The number 
75c0: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 20  of columns in a 
75d0: 74 61 62 6c 65 20 69 73 20 6c 69 6d 69 74 65 64  table is limited
75e0: 20 62 79 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f   by the.[SQLITE_
75f0: 4d 41 58 5f 43 4f 4c 55 4d 4e 5d 20 63 6f 6d 70  MAX_COLUMN] comp
7600: 69 6c 65 2d 74 69 6d 65 20 70 61 72 61 6d 65 74  ile-time paramet
7610: 65 72 2e 0a 5e 41 20 73 69 6e 67 6c 65 20 72 6f  er..^A single ro
7620: 77 20 6f 66 20 61 20 74 61 62 6c 65 20 63 61 6e  w of a table can
7630: 6e 6f 74 20 73 74 6f 72 65 20 6d 6f 72 65 20 74  not store more t
7640: 68 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d 41 58 5f  han.[SQLITE_MAX_
7650: 4c 45 4e 47 54 48 5d 20 62 79 74 65 73 20 6f 66  LENGTH] bytes of
7660: 20 64 61 74 61 2e 0a 5e 42 6f 74 68 20 6f 66 20   data..^Both of 
7670: 74 68 65 73 65 20 6c 69 6d 69 74 73 20 63 61 6e  these limits can
7680: 20 62 65 20 6c 6f 77 65 72 65 64 20 61 74 20 72   be lowered at r
7690: 75 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65  untime using the
76a0: 0a 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28  .[sqlite3_limit(
76b0: 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61  )] C/C++ interfa
76c0: 63 65 2e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 5e 54 68  ce.</p>...<p>^Th
76d0: 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 41  e CREATE TABLE A
76e0: 53 20 66 6f 72 6d 20 64 65 66 69 6e 65 73 20 74  S form defines t
76f0: 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 0a 74  he table to be.t
7700: 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66  he result set of
7710: 20 61 20 71 75 65 72 79 2e 20 20 5e 54 68 65 20   a query.  ^The 
7720: 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 74 61 62  names of the tab
7730: 6c 65 20 63 6f 6c 75 6d 6e 73 20 61 72 65 0a 74  le columns are.t
7740: 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20  he names of the 
7750: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72  columns in the r
7760: 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  esult.</p>..<p>^
7770: 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20  If the optional 
7780: 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 63 6c  IF NOT EXISTS cl
7790: 61 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 20  ause is present 
77a0: 61 6e 64 20 61 6e 6f 74 68 65 72 20 74 61 62 6c  and another tabl
77b0: 65 0a 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  e.with the same 
77c0: 6e 61 6d 65 20 61 6c 65 61 64 79 20 65 78 69 73  name aleady exis
77d0: 74 73 2c 20 74 68 65 6e 20 74 68 69 73 20 63 6f  ts, then this co
77e0: 6d 6d 61 6e 64 20 62 65 63 6f 6d 65 73 20 61 20  mmand becomes a 
77f0: 6e 6f 2d 6f 70 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  no-op.</p>..<p>^
7800: 54 61 62 6c 65 73 20 61 72 65 20 72 65 6d 6f 76  Tables are remov
7810: 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b 44 52  ed using the [DR
7820: 4f 50 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d  OP TABLE] statem
7830: 65 6e 74 2e 20 20 3c 2f 70 3e 0a 0a 3c 74 63 6c  ent.  </p>..<tcl
7840: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 6f 77  >hd_fragment row
7850: 69 64 20 7b 49 4e 54 45 47 45 52 20 50 52 49 4d  id {INTEGER PRIM
7860: 41 52 59 20 4b 45 59 7d 20 52 4f 57 49 44 20 72  ARY KEY} ROWID r
7870: 6f 77 69 64 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 52  owid</tcl>.<h3>R
7880: 4f 57 49 44 73 20 61 6e 64 20 74 68 65 20 49 4e  OWIDs and the IN
7890: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
78a0: 59 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 45 76 65 72  Y</h3>..<p>^Ever
78b0: 79 20 72 6f 77 20 6f 66 20 65 76 65 72 79 20 53  y row of every S
78c0: 51 4c 69 74 65 20 74 61 62 6c 65 20 68 61 73 20  QLite table has 
78d0: 61 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20  a 64-bit signed 
78e0: 69 6e 74 65 67 65 72 20 6b 65 79 20 0a 74 68 61  integer key .tha
78f0: 74 20 69 73 20 75 6e 69 71 75 65 20 77 69 74 68  t is unique with
7900: 69 6e 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c  in the same tabl
7910: 65 2e 0a 54 68 69 73 20 69 6e 74 65 67 65 72 20  e..This integer 
7920: 69 73 20 75 73 75 61 6c 6c 79 20 63 61 6c 6c 65  is usually calle
7930: 64 20 74 68 65 20 22 72 6f 77 69 64 22 2e 20 20  d the "rowid".  
7940: 5e 54 68 65 20 72 6f 77 69 64 20 69 73 20 74 68  ^The rowid is th
7950: 65 20 61 63 74 75 61 6c 20 6b 65 79 20 75 73 65  e actual key use
7960: 64 0a 69 6e 20 74 68 65 20 42 2d 54 72 65 65 20  d.in the B-Tree 
7970: 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20  that implements 
7980: 61 6e 20 53 51 4c 69 74 65 20 74 61 62 6c 65 2e  an SQLite table.
7990: 20 20 5e 52 6f 77 73 20 61 72 65 20 73 74 6f 72    ^Rows are stor
79a0: 65 64 20 69 6e 0a 72 6f 77 69 64 20 6f 72 64 65  ed in.rowid orde
79b0: 72 2e 20 5e 54 68 65 0a 72 6f 77 69 64 20 76 61  r. ^The.rowid va
79c0: 6c 75 65 20 63 61 6e 20 62 65 20 61 63 63 65 73  lue can be acces
79d0: 73 65 64 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66  sed using one of
79e0: 20 74 68 65 20 73 70 65 63 69 61 6c 20 6e 61 6d   the special nam
79f0: 65 73 0a 22 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e  es."<b>ROWID</b>
7a00: 22 2c 20 22 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c  ", "<b>OID</b>",
7a10: 20 6f 72 20 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c   or "<b>_ROWID_<
7a20: 2f 62 3e 22 20 61 73 73 75 6d 69 6e 67 20 74 68  /b>" assuming th
7a30: 6f 73 65 20 6e 61 6d 65 73 0a 61 72 65 20 6e 6f  ose names.are no
7a40: 20 75 73 65 64 20 62 79 20 6f 74 68 65 72 20 63   used by other c
7a50: 6f 6e 76 65 6e 74 69 6f 6e 61 6c 20 74 61 62 6c  onventional tabl
7a60: 65 20 63 6f 6c 75 6d 6e 73 2e 3c 2f 70 3e 0a 0a  e columns.</p>..
7a70: 3c 70 3e 0a 5e 49 66 20 61 20 63 6f 6c 75 6d 6e  <p>.^If a column
7a80: 20 69 73 20 64 65 63 6c 61 72 65 64 20 74 6f 20   is declared to 
7a90: 62 65 20 61 6e 20 49 4e 54 45 47 45 52 20 50 52  be an INTEGER PR
7aa0: 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20  IMARY KEY, then 
7ab0: 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69 73 20 6e  that column is n
7ac0: 6f 74 0a 61 20 22 72 65 61 6c 22 20 64 61 74 61  ot.a "real" data
7ad0: 62 61 73 65 20 63 6f 6c 75 6d 6e 20 62 75 74 20  base column but 
7ae0: 69 6e 73 74 65 61 64 20 62 65 63 6f 6d 65 73 0a  instead becomes.
7af0: 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
7b00: 20 72 6f 77 69 64 2e 20 20 5e 55 6e 6c 69 6b 65   rowid.  ^Unlike
7b10: 20 6e 6f 72 6d 61 6c 20 53 51 4c 69 74 65 20 63   normal SQLite c
7b20: 6f 6c 75 6d 6e 73 2c 20 74 68 65 20 72 6f 77 69  olumns, the rowi
7b30: 64 0a 6d 75 73 74 20 62 65 20 61 20 6e 6f 6e 2d  d.must be a non-
7b40: 4e 55 4c 4c 20 69 6e 74 65 67 65 72 20 76 61 6c  NULL integer val
7b50: 75 65 2e 20 20 5e 54 68 65 20 72 6f 77 69 64 20  ue.  ^The rowid 
7b60: 69 73 20 6e 6f 74 20 61 62 6c 65 20 74 6f 20 68  is not able to h
7b70: 6f 6c 64 0a 66 6c 6f 61 74 69 6e 67 20 70 6f 69  old.floating poi
7b80: 6e 74 20 76 61 6c 75 65 73 2c 20 73 74 72 69 6e  nt values, strin
7b90: 67 73 2c 20 42 4c 4f 42 73 2c 20 6f 72 20 4e 55  gs, BLOBs, or NU
7ba0: 4c 4c 73 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  LLs.</p>..<block
7bb0: 71 75 6f 74 65 3e 3c 69 3e 0a 5e 41 6e 20 49 4e  quote><i>.^An IN
7bc0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
7bd0: 59 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 61  Y column is an a
7be0: 6c 69 61 73 20 66 6f 72 20 74 68 65 20 36 34 2d  lias for the 64-
7bf0: 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67  bit signed integ
7c00: 65 72 20 72 6f 77 69 64 2e 0a 3c 2f 69 3e 3c 2f  er rowid..</i></
7c10: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
7c20: 5e 41 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d  ^An INTEGER PRIM
7c30: 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 20 63  ARY KEY column c
7c40: 61 6e 20 61 6c 73 6f 20 69 6e 63 6c 75 64 65 20  an also include 
7c50: 74 68 65 0a 6b 65 79 77 6f 72 64 20 5b 41 55 54  the.keyword [AUT
7c60: 4f 49 4e 43 52 45 4d 45 4e 54 5d 2e 20 20 5e 54  OINCREMENT].  ^T
7c70: 68 65 20 5b 41 55 54 4f 49 4e 43 52 45 4d 45 4e  he [AUTOINCREMEN
7c80: 54 5d 20 6b 65 79 77 6f 72 64 20 6d 6f 64 69 66  T] keyword modif
7c90: 69 65 64 20 74 68 65 20 77 61 79 0a 74 68 61 74  ied the way.that
7ca0: 20 42 2d 54 72 65 65 20 6b 65 79 73 20 61 72 65   B-Tree keys are
7cb0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67   automatically g
7cc0: 65 6e 65 72 61 74 65 64 2e 20 20 41 64 64 69 74  enerated.  Addit
7cd0: 69 6f 6e 61 6c 20 64 65 74 61 69 6c 0a 6f 6e 20  ional detail.on 
7ce0: 61 75 74 6f 6d 61 74 69 63 20 42 2d 54 72 65 65  automatic B-Tree
7cf0: 20 6b 65 79 20 67 65 6e 65 72 61 74 69 6f 6e 20   key generation 
7d00: 69 73 20 61 76 61 69 6c 61 62 6c 65 0a 3c 61 20  is available.<a 
7d10: 68 72 65 66 3d 22 61 75 74 6f 69 6e 63 2e 68 74  href="autoinc.ht
7d20: 6d 6c 22 3e 73 65 70 61 72 61 74 65 6c 79 3c 2f  ml">separately</
7d30: 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  a>.</p>..<p>^The
7d40: 20 73 70 65 63 69 61 6c 20 62 65 68 61 76 69 6f   special behavio
7d50: 72 20 6f 66 20 49 4e 54 45 47 45 52 20 50 52 49  r of INTEGER PRI
7d60: 4d 41 52 59 20 4b 45 59 0a 69 73 20 6f 6e 6c 79  MARY KEY.is only
7d70: 20 61 76 61 69 6c 61 62 6c 65 20 69 66 20 74 68   available if th
7d80: 65 20 74 79 70 65 20 6e 61 6d 65 20 69 73 20 65  e type name is e
7d90: 78 61 63 74 6c 79 20 22 49 4e 54 45 47 45 52 22  xactly "INTEGER"
7da0: 20 28 69 6e 20 61 6e 79 20 6d 69 78 74 75 72 65   (in any mixture
7db0: 0a 6f 66 20 75 70 70 65 72 20 61 6e 64 20 6c 6f  .of upper and lo
7dc0: 77 65 72 20 63 61 73 65 2e 29 20 20 5e 4f 74 68  wer case.)  ^Oth
7dd0: 65 72 20 69 6e 74 65 67 65 72 20 74 79 70 65 20  er integer type 
7de0: 6e 61 6d 65 73 0a 6c 69 6b 65 20 22 49 4e 54 22  names.like "INT"
7df0: 20 6f 72 20 22 42 49 47 49 4e 54 22 20 6f 72 20   or "BIGINT" or 
7e00: 22 53 48 4f 52 54 20 49 4e 54 45 47 45 52 22 20  "SHORT INTEGER" 
7e10: 6f 72 20 22 55 4e 53 49 47 4e 45 44 20 49 4e 54  or "UNSIGNED INT
7e20: 45 47 45 52 22 0a 63 61 75 73 65 73 20 74 68 65  EGER".causes the
7e30: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c   primary key col
7e40: 75 6d 6e 20 74 6f 20 62 65 68 61 76 65 20 61 73  umn to behave as
7e50: 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62   an ordinary tab
7e60: 6c 65 20 63 6f 6c 75 6d 6e 20 77 69 74 68 0a 69  le column with.i
7e70: 6e 74 65 67 65 72 20 5b 61 66 66 69 6e 69 74 79  nteger [affinity
7e80: 5d 20 61 6e 64 20 61 20 75 6e 69 71 75 65 20 69  ] and a unique i
7e90: 6e 64 65 78 2c 20 6e 6f 74 20 61 73 20 61 6e 20  ndex, not as an 
7ea0: 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72 6f  alias for the ro
7eb0: 77 69 64 2e 0a 5e 28 54 68 65 20 73 70 65 63 69  wid..^(The speci
7ec0: 61 6c 20 62 65 68 61 76 69 6f 72 20 6f 66 20 49  al behavior of I
7ed0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
7ee0: 45 59 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c  EY is only avail
7ef0: 61 62 6c 65 20 69 66 20 74 68 65 0a 70 72 69 6d  able if the.prim
7f00: 61 72 79 20 6b 65 79 20 69 73 20 61 20 73 69 6e  ary key is a sin
7f10: 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 4d 75 6c  gle column.  Mul
7f20: 74 69 2d 63 6f 6c 75 6d 6e 20 70 72 69 6d 61 72  ti-column primar
7f30: 79 20 6b 65 79 73 20 64 6f 20 6e 6f 74 20 62 65  y keys do not be
7f40: 63 6f 6d 65 0a 61 6c 69 61 73 65 73 20 66 6f 72  come.aliases for
7f50: 20 74 68 65 20 72 6f 77 69 64 2e 29 5e 0a 5e 54   the rowid.)^.^T
7f60: 68 65 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  he AUTOINCREMENT
7f70: 20 6b 65 79 77 6f 72 64 20 6f 6e 6c 79 20 77 6f   keyword only wo
7f80: 72 6b 73 20 6f 6e 20 61 20 63 6f 6c 75 6d 6e 20  rks on a column 
7f90: 74 68 61 74 20 69 73 20 61 6e 20 61 6c 69 61 73  that is an alias
7fa0: 0a 66 6f 72 20 74 68 65 20 72 6f 77 69 64 2e 3c  .for the rowid.<
7fb0: 2f 70 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61  /p>..<p>Note tha
7fc0: 74 20 73 65 61 72 63 68 65 73 20 61 67 61 69 6e  t searches again
7fd0: 73 74 20 61 20 72 6f 77 69 64 20 61 72 65 20 67  st a rowid are g
7fe0: 65 6e 65 72 61 6c 6c 79 20 61 62 6f 75 74 20 74  enerally about t
7ff0: 77 69 63 65 20 61 73 0a 66 61 73 74 20 61 73 20  wice as.fast as 
8000: 73 65 61 72 63 68 65 73 20 61 67 61 69 6e 73 74  searches against
8010: 20 61 6e 79 20 6f 74 68 65 72 20 50 52 49 4d 41   any other PRIMA
8020: 52 59 20 4b 45 59 20 6f 72 20 69 6e 64 65 78 65  RY KEY or indexe
8030: 64 20 76 61 6c 75 65 2e 0a 3c 2f 70 3e 0a 0a 3c  d value..</p>..<
8040: 70 3e 3c 62 3e 47 6f 6f 66 79 20 62 65 68 61 76  p><b>Goofy behav
8050: 69 6f 72 20 61 6c 65 72 74 3a 3c 2f 62 3e 20 20  ior alert:</b>  
8060: 5e 28 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  ^(The following 
8070: 74 68 72 65 65 20 64 65 63 6c 61 72 61 74 69 6f  three declaratio
8080: 6e 73 20 61 6c 6c 20 63 61 75 73 65 0a 74 68 65  ns all cause.the
8090: 20 63 6f 6c 75 6d 6e 20 22 78 22 20 62 65 20 61   column "x" be a
80a0: 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
80b0: 72 6f 77 69 64 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e  rowid:</p>..<ul>
80c0: 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20  .<li><tt>CREATE 
80d0: 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45  TABLE t(x INTEGE
80e0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 53  R PRIMARY KEY AS
80f0: 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c  C, y, z);</tt>.<
8100: 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54 41  li><tt>CREATE TA
8110: 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52 2c  BLE t(x INTEGER,
8120: 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59 20 4b   y, z, PRIMARY K
8130: 45 59 28 78 20 41 53 43 29 29 3b 3c 2f 74 74 3e  EY(x ASC));</tt>
8140: 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20  .<li><tt>CREATE 
8150: 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45  TABLE t(x INTEGE
8160: 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59  R, y, z, PRIMARY
8170: 20 4b 45 59 28 78 20 44 45 53 43 29 29 3b 3c 2f   KEY(x DESC));</
8180: 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e  tt>.</ul>)^..<p>
8190: 42 75 74 2c 20 69 6e 20 63 6f 6e 74 72 61 73 74  But, in contrast
81a0: 2c 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  , ^(the followin
81b0: 67 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 64 6f  g declaration do
81c0: 65 73 20 3c 75 3e 6e 6f 74 3c 2f 75 3e 20 72 65  es <u>not</u> re
81d0: 73 75 6c 74 20 69 6e 0a 22 78 22 20 62 65 69 6e  sult in."x" bein
81e0: 67 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  g an alias for t
81f0: 68 65 20 72 6f 77 69 64 3a 3c 2f 70 3e 0a 0a 3c  he rowid:</p>..<
8200: 75 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41  ul>.<li><tt>CREA
8210: 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54  TE TABLE t(x INT
8220: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
8230: 20 44 45 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74   DESC, y, z);</t
8240: 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 54  t>.</ul>)^..<p>T
8250: 68 69 73 20 61 73 79 6d 6d 65 74 72 69 63 61 6c  his asymmetrical
8260: 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 66   behavior is unf
8270: 6f 72 74 75 6e 61 74 65 20 61 6e 64 20 69 73 20  ortunate and is 
8280: 72 65 61 6c 6c 79 20 64 75 65 20 74 6f 20 61 20  really due to a 
8290: 62 75 67 0a 69 6e 20 74 68 65 20 70 61 72 73 65  bug.in the parse
82a0: 72 20 69 6e 20 65 61 72 6c 79 20 76 65 72 73 69  r in early versi
82b0: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2e 20 20  ons of SQLite.  
82c0: 42 75 74 20 66 69 78 69 6e 67 20 74 68 65 20 62  But fixing the b
82d0: 75 67 20 77 6f 75 6c 64 0a 72 65 73 75 6c 74 20  ug would.result 
82e0: 69 6e 20 76 65 72 79 20 73 65 72 69 6f 75 73 20  in very serious 
82f0: 62 61 63 6b 77 61 72 64 73 20 69 6e 63 6f 6d 70  backwards incomp
8300: 61 74 69 62 69 6c 69 74 69 65 73 2e 20 20 54 68  atibilities.  Th
8310: 65 20 53 51 4c 69 74 65 20 64 65 76 65 6c 6f 70  e SQLite develop
8320: 65 72 73 0a 66 65 65 6c 20 74 68 61 74 20 67 6f  ers.feel that go
8330: 6f 66 79 20 62 65 68 61 76 69 6f 72 20 69 6e 20  ofy behavior in 
8340: 61 6e 20 63 6f 72 6e 65 72 20 63 61 73 65 20 69  an corner case i
8350: 73 20 66 61 72 20 62 65 74 74 65 72 20 74 68 61  s far better tha
8360: 6e 0a 61 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  n.a compatibilit
8370: 79 20 62 72 65 61 6b 2c 20 73 6f 20 74 68 65 20  y break, so the 
8380: 6f 72 69 67 69 6e 61 6c 20 62 65 68 61 76 69 6f  original behavio
8390: 72 20 69 73 20 72 65 74 61 69 6e 65 64 2e 3c 2f  r is retained.</
83a0: 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
83b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
83c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65 63 74 69 6f 6e  ########.Section
8400: 20 7b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   {CREATE TRIGGER
8410: 7d 20 63 72 65 61 74 65 74 72 69 67 67 65 72 20  } createtrigger 
8420: 7b 7b 43 52 45 41 54 45 20 54 52 49 47 47 45 52  {{CREATE TRIGGER
8430: 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  }}..BubbleDiagra
8440: 6d 20 63 72 65 61 74 65 2d 74 72 69 67 67 65 72  m create-trigger
8450: 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a  -stmt 1.</tcl>..
8460: 3c 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 54  <p>^The CREATE T
8470: 52 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74  RIGGER statement
8480: 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20   is used to add 
8490: 74 72 69 67 67 65 72 73 20 74 6f 20 74 68 65 20  triggers to the 
84a0: 0a 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61  .database schema
84b0: 2e 20 5e 54 72 69 67 67 65 72 73 20 61 72 65 20  . ^Triggers are 
84c0: 64 61 74 61 62 61 73 65 20 6f 70 65 72 61 74 69  database operati
84d0: 6f 6e 73 20 0a 74 68 61 74 20 61 72 65 20 61 75  ons .that are au
84e0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70 65 72 66  tomatically perf
84f0: 6f 72 6d 65 64 20 77 68 65 6e 20 61 20 73 70 65  ormed when a spe
8500: 63 69 66 69 65 64 20 64 61 74 61 62 61 73 65 20  cified database 
8510: 65 76 65 6e 74 0a 6f 63 63 75 72 73 2e 20 20 3c  event.occurs.  <
8520: 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 74 72 69 67 67  /p>..<p>^A trigg
8530: 65 72 20 6d 61 79 20 62 65 20 73 70 65 63 69 66  er may be specif
8540: 69 65 64 20 74 6f 20 66 69 72 65 20 77 68 65 6e  ied to fire when
8550: 65 76 65 72 20 61 20 5b 44 45 4c 45 54 45 5d 2c  ever a [DELETE],
8560: 20 5b 49 4e 53 45 52 54 5d 2c 0a 6f 72 20 5b 55   [INSERT],.or [U
8570: 50 44 41 54 45 5d 20 6f 66 20 61 0a 70 61 72 74  PDATE] of a.part
8580: 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20  icular database 
8590: 74 61 62 6c 65 20 6f 63 63 75 72 73 2c 20 6f 72  table occurs, or
85a0: 20 77 68 65 6e 65 76 65 72 20 61 6e 20 5b 55 50   whenever an [UP
85b0: 44 41 54 45 5d 20 6f 63 63 75 72 73 20 6f 6e 0a  DATE] occurs on.
85c0: 6f 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73  on one or more s
85d0: 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73  pecified columns
85e0: 20 6f 66 20 61 20 74 61 62 6c 65 2e 3c 2f 70 3e   of a table.</p>
85f0: 0a 0a 3c 70 3e 5e 41 74 20 74 68 69 73 20 74 69  ..<p>^At this ti
8600: 6d 65 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72  me SQLite suppor
8610: 74 73 20 6f 6e 6c 79 20 46 4f 52 20 45 41 43 48  ts only FOR EACH
8620: 20 52 4f 57 20 74 72 69 67 67 65 72 73 2c 20 6e   ROW triggers, n
8630: 6f 74 20 46 4f 52 20 45 41 43 48 0a 53 54 41 54  ot FOR EACH.STAT
8640: 45 4d 45 4e 54 20 74 72 69 67 67 65 72 73 2e 20  EMENT triggers. 
8650: 5e 48 65 6e 63 65 20 65 78 70 6c 69 63 69 74 6c  ^Hence explicitl
8660: 79 20 73 70 65 63 69 66 79 69 6e 67 20 46 4f 52  y specifying FOR
8670: 20 45 41 43 48 20 52 4f 57 20 69 73 20 6f 70 74   EACH ROW is opt
8680: 69 6f 6e 61 6c 2e 0a 5e 46 4f 52 20 45 41 43 48  ional..^FOR EACH
8690: 20 52 4f 57 20 69 6d 70 6c 69 65 73 20 74 68 61   ROW implies tha
86a0: 74 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  t the SQL statem
86b0: 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 69  ents specified i
86c0: 6e 20 74 68 65 20 74 72 69 67 67 65 72 0a 6d 61  n the trigger.ma
86d0: 79 20 62 65 20 65 78 65 63 75 74 65 64 20 28 64  y be executed (d
86e0: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20  epending on the 
86f0: 57 48 45 4e 20 63 6c 61 75 73 65 29 20 66 6f 72  WHEN clause) for
8700: 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 72   each database r
8710: 6f 77 20 62 65 69 6e 67 0a 69 6e 73 65 72 74 65  ow being.inserte
8720: 64 2c 20 75 70 64 61 74 65 64 20 6f 72 20 64 65  d, updated or de
8730: 6c 65 74 65 64 20 62 79 20 74 68 65 20 73 74 61  leted by the sta
8740: 74 65 6d 65 6e 74 20 63 61 75 73 69 6e 67 20 74  tement causing t
8750: 68 65 20 74 72 69 67 67 65 72 20 74 6f 20 66 69  he trigger to fi
8760: 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 42 6f  re.</p>..<p>^(Bo
8770: 74 68 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75  th the WHEN clau
8780: 73 65 20 61 6e 64 20 74 68 65 20 74 72 69 67 67  se and the trigg
8790: 65 72 20 61 63 74 69 6f 6e 73 20 6d 61 79 20 61  er actions may a
87a0: 63 63 65 73 73 20 65 6c 65 6d 65 6e 74 73 20 6f  ccess elements o
87b0: 66 20 0a 74 68 65 20 72 6f 77 20 62 65 69 6e 67  f .the row being
87c0: 20 69 6e 73 65 72 74 65 64 2c 20 64 65 6c 65 74   inserted, delet
87d0: 65 64 20 6f 72 20 75 70 64 61 74 65 64 20 75 73  ed or updated us
87e0: 69 6e 67 20 72 65 66 65 72 65 6e 63 65 73 20 6f  ing references o
87f0: 66 20 74 68 65 20 66 6f 72 6d 20 0a 22 4e 45 57  f the form ."NEW
8800: 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c  .<i>column-name<
8810: 2f 69 3e 22 20 61 6e 64 20 22 4f 4c 44 2e 3c 69  /i>" and "OLD.<i
8820: 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e  >column-name</i>
8830: 22 2c 20 77 68 65 72 65 0a 3c 69 3e 63 6f 6c 75  ", where.<i>colu
8840: 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73 20 74  mn-name</i> is t
8850: 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6c  he name of a col
8860: 75 6d 6e 20 66 72 6f 6d 20 74 68 65 20 74 61 62  umn from the tab
8870: 6c 65 20 74 68 61 74 20 74 68 65 20 74 72 69 67  le that the trig
8880: 67 65 72 0a 69 73 20 61 73 73 6f 63 69 61 74 65  ger.is associate
8890: 64 20 77 69 74 68 2e 29 5e 20 5e 28 4f 4c 44 20  d with.)^ ^(OLD 
88a0: 61 6e 64 20 4e 45 57 20 72 65 66 65 72 65 6e 63  and NEW referenc
88b0: 65 73 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75  es may only be u
88c0: 73 65 64 20 69 6e 20 74 72 69 67 67 65 72 73 20  sed in triggers 
88d0: 6f 6e 0a 65 76 65 6e 74 73 20 66 6f 72 20 77 68  on.events for wh
88e0: 69 63 68 20 74 68 65 79 20 61 72 65 20 72 65 6c  ich they are rel
88f0: 65 76 61 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f 77  evant, as follow
8900: 73 3a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62  s:</p>..<table b
8910: 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64  order=0 cellpadd
8920: 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 0a 3c 74 64  ing=10>.<tr>.<td
8930: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
8940: 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74  ign="right" widt
8950: 68 3d 31 32 30 3e 3c 69 3e 49 4e 53 45 52 54 3c  h=120><i>INSERT<
8960: 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  /i></td>.<td val
8970: 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57 20 72 65  ign="top">NEW re
8980: 66 65 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c  ferences are val
8990: 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74  id</td>.</tr>.<t
89a0: 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
89b0: 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
89c0: 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 55  " width=120><i>U
89d0: 50 44 41 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c  PDATE</i></td>.<
89e0: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
89f0: 4e 45 57 20 61 6e 64 20 4f 4c 44 20 72 65 66 65  NEW and OLD refe
8a00: 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c 69 64  rences are valid
8a10: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e  </td>.</tr>.<tr>
8a20: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
8a30: 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20  " align="right" 
8a40: 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 44 45 4c  width=120><i>DEL
8a50: 45 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64  ETE</i></td>.<td
8a60: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4f 4c   valign="top">OL
8a70: 44 20 72 65 66 65 72 65 6e 63 65 73 20 61 72 65  D references are
8a80: 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72   valid</td>.</tr
8a90: 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 70 3e 29  >.</table>.</p>)
8aa0: 5e 0a 0a 3c 70 3e 5e 49 66 20 61 20 57 48 45 4e  ^..<p>^If a WHEN
8ab0: 20 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c   clause is suppl
8ac0: 69 65 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61  ied, the SQL sta
8ad0: 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65  tements specifie
8ae0: 64 0a 61 72 65 20 6f 6e 6c 79 20 65 78 65 63 75  d.are only execu
8af0: 74 65 64 20 66 6f 72 20 72 6f 77 73 20 66 6f 72  ted for rows for
8b00: 20 77 68 69 63 68 20 74 68 65 20 57 48 45 4e 0a   which the WHEN.
8b10: 63 6c 61 75 73 65 20 69 73 20 74 72 75 65 2e 20  clause is true. 
8b20: 5e 49 66 20 6e 6f 20 57 48 45 4e 20 63 6c 61 75  ^If no WHEN clau
8b30: 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20  se is supplied, 
8b40: 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
8b50: 74 73 0a 61 72 65 20 65 78 65 63 75 74 65 64 20  ts.are executed 
8b60: 66 6f 72 20 61 6c 6c 20 72 6f 77 73 2e 3c 2f 70  for all rows.</p
8b70: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 42 45 46 4f 52  >..<p>^The BEFOR
8b80: 45 20 6f 72 20 41 46 54 45 52 20 6b 65 79 77 6f  E or AFTER keywo
8b90: 72 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68  rd determines wh
8ba0: 65 6e 20 74 68 65 20 74 72 69 67 67 65 72 20 61  en the trigger a
8bb0: 63 74 69 6f 6e 73 0a 77 69 6c 6c 20 62 65 20 65  ctions.will be e
8bc0: 78 65 63 75 74 65 64 20 72 65 6c 61 74 69 76 65  xecuted relative
8bd0: 20 74 6f 20 74 68 65 20 69 6e 73 65 72 74 69 6f   to the insertio
8be0: 6e 2c 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20  n, modification 
8bf0: 6f 72 20 72 65 6d 6f 76 61 6c 20 6f 66 20 74 68  or removal of th
8c00: 65 0a 61 73 73 6f 63 69 61 74 65 64 20 72 6f 77  e.associated row
8c10: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 6e 20 5b 4f  .</p>..<p>^An [O
8c20: 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 63 6c 61 75  N CONFLICT] clau
8c30: 73 65 20 6d 61 79 20 62 65 20 73 70 65 63 69 66  se may be specif
8c40: 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  ied as part of a
8c50: 6e 20 5b 55 50 44 41 54 45 5d 20 6f 72 20 5b 49  n [UPDATE] or [I
8c60: 4e 53 45 52 54 5d 0a 61 63 74 69 6f 6e 20 77 69  NSERT].action wi
8c70: 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66  thin the body of
8c80: 20 74 68 65 20 74 72 69 67 67 65 72 2e 0a 5e 48   the trigger..^H
8c90: 6f 77 65 76 65 72 20 69 66 20 61 6e 20 5b 4f 4e  owever if an [ON
8ca0: 20 43 4f 4e 46 4c 49 43 54 5d 20 63 6c 61 75 73   CONFLICT] claus
8cb0: 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61  e is specified a
8cc0: 73 20 70 61 72 74 20 6f 66 20 0a 74 68 65 20 73  s part of .the s
8cd0: 74 61 74 65 6d 65 6e 74 20 63 61 75 73 69 6e 67  tatement causing
8ce0: 20 74 68 65 20 74 72 69 67 67 65 72 20 74 6f 20   the trigger to 
8cf0: 66 69 72 65 2c 20 74 68 65 6e 20 63 6f 6e 66 6c  fire, then confl
8d00: 69 63 74 20 68 61 6e 64 6c 69 6e 67 0a 70 6f 6c  ict handling.pol
8d10: 69 63 79 20 6f 66 20 74 68 65 20 6f 75 74 65 72  icy of the outer
8d20: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73   statement is us
8d30: 65 64 20 69 6e 73 74 65 61 64 2e 3c 2f 70 3e 0a  ed instead.</p>.
8d40: 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 61 72  .<p>^Triggers ar
8d50: 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  e automatically 
8d60: 5b 44 52 4f 50 20 54 52 49 47 47 45 52 20 7c 20  [DROP TRIGGER | 
8d70: 64 72 6f 70 70 65 64 5d 0a 77 68 65 6e 20 74 68  dropped].when th
8d80: 65 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  e table that the
8d90: 79 20 61 72 65 20 0a 61 73 73 6f 63 69 61 74 65  y are .associate
8da0: 64 20 77 69 74 68 20 28 74 68 65 20 3c 69 3e 74  d with (the <i>t
8db0: 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 74 61  able-name</i> ta
8dc0: 62 6c 65 29 20 69 73 20 0a 5b 44 52 4f 50 20 54  ble) is .[DROP T
8dd0: 41 42 4c 45 20 7c 20 64 72 6f 70 70 65 64 5d 2e  ABLE | dropped].
8de0: 20 20 5e 48 6f 77 65 76 65 72 20 69 66 20 74 68    ^However if th
8df0: 65 20 74 68 65 20 74 72 69 67 67 65 72 20 61 63  e the trigger ac
8e00: 74 69 6f 6e 73 20 72 65 66 65 72 65 6e 63 65 0a  tions reference.
8e10: 6f 74 68 65 72 20 74 61 62 6c 65 73 2c 20 74 68  other tables, th
8e20: 65 20 74 72 69 67 67 65 72 20 69 73 20 6e 6f 74  e trigger is not
8e30: 20 64 72 6f 70 70 65 64 20 6f 72 20 6d 6f 64 69   dropped or modi
8e40: 66 69 65 64 20 69 66 20 74 68 6f 73 65 20 6f 74  fied if those ot
8e50: 68 65 72 0a 74 61 62 6c 65 73 20 61 72 65 20 5b  her.tables are [
8e60: 44 52 4f 50 20 54 41 42 4c 45 20 7c 20 64 72 6f  DROP TABLE | dro
8e70: 70 70 65 64 5d 20 6f 72 20 5b 41 4c 54 45 52 20  pped] or [ALTER 
8e80: 54 41 42 4c 45 20 7c 20 6d 6f 64 69 66 69 65 64  TABLE | modified
8e90: 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67  ].</p>..<p>^Trig
8ea0: 67 65 72 73 20 61 72 65 20 72 65 6d 6f 76 65 64  gers are removed
8eb0: 20 75 73 69 6e 67 20 74 68 65 20 5b 44 52 4f 50   using the [DROP
8ec0: 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d   TRIGGER] statem
8ed0: 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 79  ent.</p>..<h3>Sy
8ee0: 6e 74 61 78 20 52 65 73 74 72 69 63 74 69 6f 6e  ntax Restriction
8ef0: 73 20 4f 6e 20 55 50 44 41 54 45 2c 20 44 45 4c  s On UPDATE, DEL
8f00: 45 54 45 2c 20 61 6e 64 20 49 4e 53 45 52 54 20  ETE, and INSERT 
8f10: 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69  Statements Withi
8f20: 6e 0a 20 20 20 20 54 72 69 67 67 65 72 73 3c 2f  n.    Triggers</
8f30: 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 55 50  h3>..<p>^The [UP
8f40: 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c  DATE], [DELETE],
8f50: 20 61 6e 64 20 5b 49 4e 53 45 52 54 5d 0a 73 74   and [INSERT].st
8f60: 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
8f70: 74 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 20  triggers do not 
8f80: 73 75 70 70 6f 72 74 0a 74 68 65 20 66 75 6c 6c  support.the full
8f90: 20 73 79 6e 74 61 78 20 66 6f 72 20 5b 55 50 44   syntax for [UPD
8fa0: 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20  ATE], [DELETE], 
8fb0: 61 6e 64 20 5b 49 4e 53 45 52 54 5d 20 73 74 61  and [INSERT] sta
8fc0: 74 65 6d 65 6e 74 73 2e 20 20 54 68 65 20 66 6f  tements.  The fo
8fd0: 6c 6c 6f 77 69 6e 67 0a 72 65 73 74 72 69 63 74  llowing.restrict
8fe0: 69 6f 6e 73 20 61 70 70 6c 79 3a 3c 2f 70 3e 0a  ions apply:</p>.
8ff0: 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20  .<ul>.<li><p>.  
9000: 5e 28 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  ^(The name of th
9010: 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 6d 6f  e table to be mo
9020: 64 69 66 69 65 64 20 69 6e 20 61 6e 20 5b 55 50  dified in an [UP
9030: 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c  DATE], [DELETE],
9040: 20 6f 72 20 5b 49 4e 53 45 52 54 5d 0a 20 20 73   or [INSERT].  s
9050: 74 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 62 65  tatement must be
9060: 20 61 6e 20 75 6e 71 75 61 6c 69 66 69 65 64 20   an unqualified 
9070: 74 61 62 6c 65 20 6e 61 6d 65 2e 20 20 49 6e 20  table name.  In 
9080: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 6f 6e 65  other words, one
9090: 20 6d 75 73 74 0a 20 20 75 73 65 20 6a 75 73 74   must.  use just
90a0: 20 22 3c 69 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f   "<i>tablename</
90b0: 69 3e 22 20 6e 6f 74 20 22 3c 69 3e 64 61 74 61  i>" not "<i>data
90c0: 62 61 73 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e  base</i><b>.</b>
90d0: 3c 69 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f 69 3e  <i>tablename</i>
90e0: 22 0a 20 20 77 68 65 6e 20 73 70 65 63 69 66 79  ".  when specify
90f0: 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2e 29 5e  ing the table.)^
9100: 20 20 5e 54 68 65 20 74 61 62 6c 65 20 74 6f 20    ^The table to 
9110: 62 65 20 6d 6f 64 69 66 69 65 64 20 6d 75 73 74  be modified must
9120: 20 65 78 69 73 74 20 69 6e 20 74 68 65 0a 20 20   exist in the.  
9130: 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61 73  same database as
9140: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   the table or vi
9150: 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  ew to which the 
9160: 74 72 69 67 67 65 72 20 69 73 20 61 74 74 61 63  trigger is attac
9170: 68 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e  hed..  </p></li>
9180: 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68 65  ..<li><p>.  ^The
9190: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 3c 69   "INSERT INTO <i
91a0: 3e 74 61 62 6c 65 3c 2f 69 3e 20 44 45 46 41 55  >table</i> DEFAU
91b0: 4c 54 20 56 41 4c 55 45 53 22 20 66 6f 72 6d 20  LT VALUES" form 
91c0: 6f 66 20 74 68 65 20 5b 49 4e 53 45 52 54 5d 20  of the [INSERT] 
91d0: 73 74 61 74 65 6d 65 6e 74 0a 20 20 69 73 20 6e  statement.  is n
91e0: 6f 74 20 73 75 70 70 6f 72 74 65 64 2e 0a 20 20  ot supported..  
91f0: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c  </p></li>..<li><
9200: 70 3e 0a 20 20 5e 54 68 65 20 49 4e 44 45 58 45  p>.  ^The INDEXE
9210: 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44  D BY and NOT IND
9220: 45 58 45 44 20 63 6c 61 75 73 65 73 20 61 72 65  EXED clauses are
9230: 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 66   not supported f
9240: 6f 72 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 0a  or [UPDATE] and.
9250: 20 20 5b 44 45 4c 45 54 45 5d 20 73 74 61 74 65    [DELETE] state
9260: 6d 65 6e 74 73 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c  ments..  </p></l
9270: 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 28  i>..<li><p>.  ^(
9280: 54 68 65 20 4f 52 44 45 52 20 42 59 20 61 6e 64  The ORDER BY and
9290: 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 20 6f   LIMIT clauses o
92a0: 6e 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b  n [UPDATE] and [
92b0: 44 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e  DELETE] statemen
92c0: 74 73 20 61 72 65 20 6e 6f 74 0a 20 20 73 75 70  ts are not.  sup
92d0: 70 6f 72 74 65 64 2e 20 20 4f 52 44 45 52 20 42  ported.  ORDER B
92e0: 59 20 61 6e 64 20 4c 49 4d 49 54 20 61 72 65 20  Y and LIMIT are 
92f0: 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 73 75 70  not normally sup
9300: 70 6f 72 74 65 64 20 66 6f 72 20 5b 55 50 44 41  ported for [UPDA
9310: 54 45 5d 20 6f 72 0a 20 20 5b 44 45 4c 45 54 45  TE] or.  [DELETE
9320: 5d 20 69 6e 20 61 6e 79 20 63 6f 6e 74 65 78 74  ] in any context
9330: 20 62 75 74 20 63 61 6e 20 62 65 20 65 6e 61 62   but can be enab
9340: 6c 65 64 20 66 6f 72 20 74 6f 70 2d 6c 65 76 65  led for top-leve
9350: 6c 20 73 74 61 74 65 6d 65 6e 74 73 0a 20 20 75  l statements.  u
9360: 73 69 6e 67 20 74 68 65 20 5b 53 51 4c 49 54 45  sing the [SQLITE
9370: 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44  _ENABLE_UPDATE_D
9380: 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 20 63 6f 6d  ELETE_LIMIT] com
9390: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
93a0: 2e 20 20 48 6f 77 65 76 65 72 2c 0a 20 20 74 68  .  However,.  th
93b0: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  at compile-time 
93c0: 6f 70 74 69 6f 6e 20 6f 6e 6c 79 20 61 70 70 6c  option only appl
93d0: 69 65 73 20 74 6f 20 74 6f 70 2d 6c 65 76 65 6c  ies to top-level
93e0: 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44   [UPDATE] and [D
93f0: 45 4c 45 54 45 5d 0a 20 20 73 74 61 74 65 6d 65  ELETE].  stateme
9400: 6e 74 73 2c 20 6e 6f 74 20 5b 55 50 44 41 54 45  nts, not [UPDATE
9410: 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20 73  ] and [DELETE] s
9420: 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
9430: 20 74 72 69 67 67 65 72 73 2e 29 5e 0a 20 20 3c   triggers.)^.  <
9440: 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a  /p></li>.</ul>..
9450: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
9460: 20 69 6e 73 74 65 61 64 5f 6f 66 5f 74 72 69 67   instead_of_trig
9470: 67 65 72 20 7b 49 4e 53 54 45 41 44 20 4f 46 7d  ger {INSTEAD OF}
9480: 20 7b 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69   {INSTEAD OF tri
9490: 67 67 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  gger}</tcl>.<h3>
94a0: 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67  INSTEAD OF trigg
94b0: 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 72 69  er</h3>..<p>^Tri
94c0: 67 67 65 72 73 20 6d 61 79 20 62 65 20 63 72 65  ggers may be cre
94d0: 61 74 65 64 20 6f 6e 20 5b 76 69 65 77 73 5d 2c  ated on [views],
94e0: 20 61 73 20 77 65 6c 6c 20 61 73 20 6f 72 64 69   as well as ordi
94f0: 6e 61 72 79 20 74 61 62 6c 65 73 2c 20 62 79 0a  nary tables, by.
9500: 73 70 65 63 69 66 79 69 6e 67 20 49 4e 53 54 45  specifying INSTE
9510: 41 44 20 4f 46 20 69 6e 20 74 68 65 20 43 52 45  AD OF in the CRE
9520: 41 54 45 20 54 52 49 47 47 45 52 20 73 74 61 74  ATE TRIGGER stat
9530: 65 6d 65 6e 74 2e 20 0a 5e 49 66 20 6f 6e 65 20  ement. .^If one 
9540: 6f 72 20 6d 6f 72 65 20 4f 4e 20 49 4e 53 45 52  or more ON INSER
9550: 54 2c 20 4f 4e 20 44 45 4c 45 54 45 0a 6f 72 20  T, ON DELETE.or 
9560: 4f 4e 20 55 50 44 41 54 45 20 74 72 69 67 67 65  ON UPDATE trigge
9570: 72 73 20 61 72 65 20 64 65 66 69 6e 65 64 20 6f  rs are defined o
9580: 6e 20 61 20 76 69 65 77 2c 20 74 68 65 6e 20 69  n a view, then i
9590: 74 20 69 73 20 6e 6f 74 20 61 6e 0a 65 72 72 6f  t is not an.erro
95a0: 72 20 74 6f 20 65 78 65 63 75 74 65 20 61 6e 20  r to execute an 
95b0: 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f  INSERT, DELETE o
95c0: 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  r UPDATE stateme
95d0: 6e 74 20 6f 6e 20 74 68 65 20 76 69 65 77 2c 20  nt on the view, 
95e0: 0a 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20  .respectively.  
95f0: 5e 49 6e 73 74 65 61 64 2c 0a 65 78 65 63 75 74  ^Instead,.execut
9600: 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 44  ing an INSERT, D
9610: 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
9620: 6f 6e 20 74 68 65 20 76 69 65 77 20 63 61 75 73  on the view caus
9630: 65 73 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  es the associate
9640: 64 0a 74 72 69 67 67 65 72 73 20 74 6f 20 66 69  d.triggers to fi
9650: 72 65 2e 20 5e 54 68 65 20 72 65 61 6c 20 74 61  re. ^The real ta
9660: 62 6c 65 73 20 75 6e 64 65 72 6c 79 69 6e 67 20  bles underlying 
9670: 74 68 65 20 76 69 65 77 20 61 72 65 20 6e 6f 74  the view are not
9680: 20 6d 6f 64 69 66 69 65 64 0a 28 65 78 63 65 70   modified.(excep
9690: 74 20 70 6f 73 73 69 62 6c 79 20 65 78 70 6c 69  t possibly expli
96a0: 63 69 74 6c 79 2c 20 62 79 20 61 20 74 72 69 67  citly, by a trig
96b0: 67 65 72 20 70 72 6f 67 72 61 6d 29 2e 3c 2f 70  ger program).</p
96c0: 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74  >..<p>^Note that
96d0: 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68   the [sqlite3_ch
96e0: 61 6e 67 65 73 28 29 5d 20 61 6e 64 20 5b 73 71  anges()] and [sq
96f0: 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e  lite3_total_chan
9700: 67 65 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65  ges()] interface
9710: 73 0a 64 6f 20 6e 6f 74 20 63 6f 75 6e 74 20 49  s.do not count I
9720: 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65  NSTEAD OF trigge
9730: 72 20 66 69 72 69 6e 67 73 2c 20 62 75 74 20 74  r firings, but t
9740: 68 65 0a 5b 63 6f 75 6e 74 5f 63 68 61 6e 67 65  he.[count_change
9750: 73 20 70 72 61 67 6d 61 5d 20 64 6f 65 73 20 63  s pragma] does c
9760: 6f 75 6e 74 20 49 4e 53 54 45 41 44 20 4f 46 20  ount INSTEAD OF 
9770: 74 72 69 67 67 65 72 20 66 69 72 69 6e 67 2e 3c  trigger firing.<
9780: 2f 70 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c 65  /p>..<h3>Example
9790: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 73 73  s</h3>..<p>^(Ass
97a0: 75 6d 69 6e 67 20 74 68 61 74 20 63 75 73 74 6f  uming that custo
97b0: 6d 65 72 20 72 65 63 6f 72 64 73 20 61 72 65 20  mer records are 
97c0: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 22 63  stored in the "c
97d0: 75 73 74 6f 6d 65 72 73 22 20 74 61 62 6c 65 2c  ustomers" table,
97e0: 20 61 6e 64 0a 74 68 61 74 20 6f 72 64 65 72 20   and.that order 
97f0: 72 65 63 6f 72 64 73 20 61 72 65 20 73 74 6f 72  records are stor
9800: 65 64 20 69 6e 20 74 68 65 20 22 6f 72 64 65 72  ed in the "order
9810: 73 22 20 74 61 62 6c 65 2c 20 74 68 65 20 66 6f  s" table, the fo
9820: 6c 6c 6f 77 69 6e 67 20 74 72 69 67 67 65 72 0a  llowing trigger.
9830: 65 6e 73 75 72 65 73 20 74 68 61 74 20 61 6c 6c  ensures that all
9840: 20 61 73 73 6f 63 69 61 74 65 64 20 6f 72 64 65   associated orde
9850: 72 73 20 61 72 65 20 72 65 64 69 72 65 63 74 65  rs are redirecte
9860: 64 20 77 68 65 6e 20 61 20 63 75 73 74 6f 6d 65  d when a custome
9870: 72 20 63 68 61 6e 67 65 73 0a 68 69 73 20 6f 72  r changes.his or
9880: 20 68 65 72 20 61 64 64 72 65 73 73 3a 3c 2f 70   her address:</p
9890: 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20  >..<tcl>Example 
98a0: 7b 0a 43 52 45 41 54 45 20 54 52 49 47 47 45 52  {.CREATE TRIGGER
98b0: 20 75 70 64 61 74 65 5f 63 75 73 74 6f 6d 65 72   update_customer
98c0: 5f 61 64 64 72 65 73 73 20 55 50 44 41 54 45 20  _address UPDATE 
98d0: 4f 46 20 61 64 64 72 65 73 73 20 4f 4e 20 63 75  OF address ON cu
98e0: 73 74 6f 6d 65 72 73 20 0a 20 20 42 45 47 49 4e  stomers .  BEGIN
98f0: 0a 20 20 20 20 55 50 44 41 54 45 20 6f 72 64 65  .    UPDATE orde
9900: 72 73 20 53 45 54 20 61 64 64 72 65 73 73 20 3d  rs SET address =
9910: 20 6e 65 77 2e 61 64 64 72 65 73 73 20 57 48 45   new.address WHE
9920: 52 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65  RE customer_name
9930: 20 3d 20 6f 6c 64 2e 6e 61 6d 65 3b 0a 20 20 45   = old.name;.  E
9940: 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ND;.}</tcl>..<p>
9950: 57 69 74 68 20 74 68 69 73 20 74 72 69 67 67 65  With this trigge
9960: 72 20 69 6e 73 74 61 6c 6c 65 64 2c 20 65 78 65  r installed, exe
9970: 63 75 74 69 6e 67 20 74 68 65 20 73 74 61 74 65  cuting the state
9980: 6d 65 6e 74 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  ment:</p>..<tcl>
9990: 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45  Example {.UPDATE
99a0: 20 63 75 73 74 6f 6d 65 72 73 20 53 45 54 20 61   customers SET a
99b0: 64 64 72 65 73 73 20 3d 20 27 31 20 4d 61 69 6e  ddress = '1 Main
99c0: 20 53 74 2e 27 20 57 48 45 52 45 20 6e 61 6d 65   St.' WHERE name
99d0: 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b   = 'Jack Jones';
99e0: 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 63 61 75  .}</tcl>..<p>cau
99f0: 73 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ses the followin
9a00: 67 20 74 6f 20 62 65 20 61 75 74 6f 6d 61 74 69  g to be automati
9a10: 63 61 6c 6c 79 20 65 78 65 63 75 74 65 64 3a 3c  cally executed:<
9a20: 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c  /p>..<tcl>Exampl
9a30: 65 20 7b 0a 55 50 44 41 54 45 20 6f 72 64 65 72  e {.UPDATE order
9a40: 73 20 53 45 54 20 61 64 64 72 65 73 73 20 3d 20  s SET address = 
9a50: 27 31 20 4d 61 69 6e 20 53 74 2e 27 20 57 48 45  '1 Main St.' WHE
9a60: 52 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65  RE customer_name
9a70: 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b   = 'Jack Jones';
9a80: 0a 7d 3c 2f 74 63 6c 3e 29 5e 0a 0a 3c 74 63 6c  .}</tcl>)^..<tcl
9a90: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e 64  >hd_fragment und
9aa0: 65 66 5f 62 65 66 6f 72 65 20 7b 75 6e 64 65 66  ef_before {undef
9ab0: 69 6e 65 64 20 42 45 46 4f 52 45 20 74 72 69 67  ined BEFORE trig
9ac0: 67 65 72 20 62 65 68 61 76 69 6f 72 7d 3c 2f 74  ger behavior}</t
9ad0: 63 6c 3e 0a 3c 68 33 3e 43 61 75 74 69 6f 6e 73  cl>.<h3>Cautions
9ae0: 20 4f 6e 20 54 68 65 20 55 73 65 20 4f 66 20 42   On The Use Of B
9af0: 45 46 4f 52 45 20 74 72 69 67 67 65 72 73 3c 2f  EFORE triggers</
9b00: 68 33 3e 0a 0a 3c 70 3e 49 66 20 61 20 42 45 46  h3>..<p>If a BEF
9b10: 4f 52 45 20 55 50 44 41 54 45 20 6f 72 20 42 45  ORE UPDATE or BE
9b20: 46 4f 52 45 20 44 45 4c 45 54 45 20 74 72 69 67  FORE DELETE trig
9b30: 67 65 72 20 6d 6f 64 69 66 69 65 73 20 6f 72 20  ger modifies or 
9b40: 64 65 6c 65 74 65 73 20 61 20 72 6f 77 0a 74 68  deletes a row.th
9b50: 61 74 20 77 61 73 20 74 6f 20 68 61 76 65 20 62  at was to have b
9b60: 65 65 6e 20 75 70 64 61 74 65 64 20 6f 72 20 64  een updated or d
9b70: 65 6c 65 74 65 64 2c 20 74 68 65 6e 20 74 68 65  eleted, then the
9b80: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73   result of the s
9b90: 75 62 73 65 71 75 65 6e 74 0a 75 70 64 61 74 65  ubsequent.update
9ba0: 20 6f 72 20 64 65 6c 65 74 65 20 6f 70 65 72 61   or delete opera
9bb0: 74 69 6f 6e 20 69 73 20 75 6e 64 65 66 69 6e 65  tion is undefine
9bc0: 64 2e 20 20 46 75 72 74 68 65 72 6d 6f 72 65 2c  d.  Furthermore,
9bd0: 20 69 66 20 61 20 42 45 46 4f 52 45 20 74 72 69   if a BEFORE tri
9be0: 67 67 65 72 0a 6d 6f 64 69 66 69 65 73 20 6f 72  gger.modifies or
9bf0: 20 64 65 6c 65 74 65 73 20 61 20 72 6f 77 2c 20   deletes a row, 
9c00: 74 68 65 6e 20 69 74 20 69 73 20 75 6e 64 65 66  then it is undef
9c10: 69 6e 65 64 20 77 68 65 74 68 65 72 20 6f 72 20  ined whether or 
9c20: 6e 6f 74 20 41 46 54 45 52 20 74 72 69 67 67 65  not AFTER trigge
9c30: 72 73 0a 74 68 61 74 20 77 6f 75 6c 64 20 68 61  rs.that would ha
9c40: 76 65 20 6f 74 68 65 72 77 69 73 65 20 72 75 6e  ve otherwise run
9c50: 20 6f 6e 20 74 68 6f 73 65 20 72 6f 77 73 20 77   on those rows w
9c60: 69 6c 6c 20 69 6e 20 66 61 63 74 20 72 75 6e 2e  ill in fact run.
9c70: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 76 61  .</p>..<p>The va
9c80: 6c 75 65 20 6f 66 20 4e 45 57 2e 72 6f 77 69 64  lue of NEW.rowid
9c90: 20 69 73 20 75 6e 64 65 66 69 6e 65 64 20 69 6e   is undefined in
9ca0: 20 61 20 42 45 46 4f 52 45 20 49 4e 53 45 52 54   a BEFORE INSERT
9cb0: 20 74 72 69 67 67 65 72 20 69 6e 20 77 68 69 63   trigger in whic
9cc0: 68 0a 74 68 65 20 72 6f 77 69 64 20 69 73 20 6e  h.the rowid is n
9cd0: 6f 74 20 65 78 70 6c 69 63 69 74 6c 79 20 73 65  ot explicitly se
9ce0: 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e  t to an integer.
9cf0: 3c 2f 70 3e 0a 0a 3c 70 3e 42 65 63 61 75 73 65  </p>..<p>Because
9d00: 20 6f 66 20 74 68 65 20 62 65 68 61 76 69 6f 72   of the behavior
9d10: 73 20 64 65 73 63 72 69 62 65 64 20 61 62 6f 76  s described abov
9d20: 65 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73 20 61  e, programmers a
9d30: 72 65 20 65 6e 63 6f 75 72 61 67 65 64 20 74 6f  re encouraged to
9d40: 0a 70 72 65 66 65 72 20 41 46 54 45 52 20 74 72  .prefer AFTER tr
9d50: 69 67 67 65 72 73 20 6f 76 65 72 20 42 45 46 4f  iggers over BEFO
9d60: 52 45 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e  RE triggers.</p>
9d70: 0a 0a 3c 68 33 3e 54 68 65 20 52 41 49 53 45 28  ..<h3>The RAISE(
9d80: 29 20 66 75 6e 63 74 69 6f 6e 3c 2f 68 33 3e 0a  ) function</h3>.
9d90: 0a 3c 70 3e 5e 28 41 20 73 70 65 63 69 61 6c 20  .<p>^(A special 
9da0: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 52 41 49  SQL function RAI
9db0: 53 45 28 29 20 6d 61 79 20 62 65 20 75 73 65 64  SE() may be used
9dc0: 20 77 69 74 68 69 6e 20 61 20 74 72 69 67 67 65   within a trigge
9dd0: 72 2d 70 72 6f 67 72 61 6d 2c 29 5e 0a 77 69 74  r-program,)^.wit
9de0: 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  h the following 
9df0: 73 79 6e 74 61 78 3c 2f 70 3e 20 0a 0a 3c 74 63  syntax</p> ..<tc
9e00: 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  l>BubbleDiagram 
9e10: 72 61 69 73 65 2d 66 75 6e 63 74 69 6f 6e 3c 2f  raise-function</
9e20: 74 63 6c 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 6f  tcl>..<p>^When o
9e30: 6e 65 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  ne of the first 
9e40: 74 68 72 65 65 20 66 6f 72 6d 73 20 69 73 20 63  three forms is c
9e50: 61 6c 6c 65 64 20 64 75 72 69 6e 67 20 74 72 69  alled during tri
9e60: 67 67 65 72 2d 70 72 6f 67 72 61 6d 0a 65 78 65  gger-program.exe
9e70: 63 75 74 69 6f 6e 2c 20 74 68 65 20 73 70 65 63  cution, the spec
9e80: 69 66 69 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49  ified [ON CONFLI
9e90: 43 54 5d 20 70 72 6f 63 65 73 73 69 6e 67 20 69  CT] processing i
9ea0: 73 20 70 65 72 66 6f 72 6d 65 64 0a 28 65 69 74  s performed.(eit
9eb0: 68 65 72 20 41 42 4f 52 54 2c 20 46 41 49 4c 20  her ABORT, FAIL 
9ec0: 6f 72 20 52 4f 4c 4c 42 41 43 4b 29 20 61 6e 64  or ROLLBACK) and
9ed0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 71 75 65   the current que
9ee0: 72 79 20 74 65 72 6d 69 6e 61 74 65 73 2e 0a 41  ry terminates..A
9ef0: 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20  n error code of 
9f00: 5b 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49  [SQLITE_CONSTRAI
9f10: 4e 54 5d 20 69 73 20 72 65 74 75 72 6e 65 64 20  NT] is returned 
9f20: 74 6f 20 74 68 65 20 61 70 70 6c 69 63 61 74 69  to the applicati
9f30: 6f 6e 2c 0a 61 6c 6f 6e 67 20 77 69 74 68 20 74  on,.along with t
9f40: 68 65 20 73 70 65 63 69 66 69 65 64 20 65 72 72  he specified err
9f50: 6f 72 20 6d 65 73 73 61 67 65 2e 3c 2f 70 3e 0a  or message.</p>.
9f60: 0a 3c 70 3e 5e 57 68 65 6e 20 52 41 49 53 45 28  .<p>^When RAISE(
9f70: 49 47 4e 4f 52 45 29 20 69 73 20 63 61 6c 6c 65  IGNORE) is calle
9f80: 64 2c 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72  d, the remainder
9f90: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
9fa0: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2c  trigger program,
9fb0: 0a 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74  .the statement t
9fc0: 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20 74  hat caused the t
9fd0: 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 74  rigger program t
9fe0: 6f 20 65 78 65 63 75 74 65 20 61 6e 64 20 61 6e  o execute and an
9ff0: 79 20 73 75 62 73 65 71 75 65 6e 74 0a 74 72 69  y subsequent.tri
a000: 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74 68  gger programs th
a010: 61 74 20 77 6f 75 6c 64 20 6f 66 20 62 65 65 6e  at would of been
a020: 20 65 78 65 63 75 74 65 64 20 61 72 65 20 61 62   executed are ab
a030: 61 6e 64 6f 6e 65 64 2e 20 5e 4e 6f 20 64 61 74  andoned. ^No dat
a040: 61 62 61 73 65 0a 63 68 61 6e 67 65 73 20 61 72  abase.changes ar
a050: 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  e rolled back.  
a060: 5e 49 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ^If the statemen
a070: 74 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68  t that caused th
a080: 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
a090: 6d 0a 74 6f 20 65 78 65 63 75 74 65 20 69 73 20  m.to execute is 
a0a0: 69 74 73 65 6c 66 20 70 61 72 74 20 6f 66 20 61  itself part of a
a0b0: 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
a0c0: 2c 20 74 68 65 6e 20 74 68 61 74 20 74 72 69 67  , then that trig
a0d0: 67 65 72 20 70 72 6f 67 72 61 6d 0a 72 65 73 75  ger program.resu
a0e0: 6d 65 73 20 65 78 65 63 75 74 69 6f 6e 20 61 74  mes execution at
a0f0: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
a100: 66 20 74 68 65 20 6e 65 78 74 20 73 74 65 70 2e  f the next step.
a110: 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23  .</p>...<tcl>.##
a120: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a130: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a140: 23 23 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 0a 53 65  #############.Se
a170: 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 56 49  ction {CREATE VI
a180: 45 57 7d 20 7b 63 72 65 61 74 65 76 69 65 77 7d  EW} {createview}
a190: 20 7b 7b 43 52 45 41 54 45 20 56 49 45 57 7d 20   {{CREATE VIEW} 
a1a0: 76 69 65 77 20 2a 76 69 65 77 73 7d 0a 0a 42 75  view *views}..Bu
a1b0: 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61  bbleDiagram crea
a1c0: 74 65 2d 76 69 65 77 2d 73 74 6d 74 20 31 0a 3c  te-view-stmt 1.<
a1d0: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43  /tcl>..<p>^The C
a1e0: 52 45 41 54 45 20 56 49 45 57 20 63 6f 6d 6d 61  REATE VIEW comma
a1f0: 6e 64 20 61 73 73 69 67 6e 73 20 61 20 6e 61 6d  nd assigns a nam
a200: 65 20 74 6f 20 61 20 70 72 65 2d 70 61 63 6b 61  e to a pre-packa
a210: 67 65 64 20 0a 5b 53 45 4c 45 43 54 5d 20 73 74  ged .[SELECT] st
a220: 61 74 65 6d 65 6e 74 2e 20 0a 5e 4f 6e 63 65 20  atement. .^Once 
a230: 74 68 65 20 76 69 65 77 20 69 73 20 63 72 65 61  the view is crea
a240: 74 65 64 2c 20 69 74 20 63 61 6e 20 62 65 20 75  ted, it can be u
a250: 73 65 64 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  sed in the FROM 
a260: 63 6c 61 75 73 65 0a 6f 66 20 61 6e 6f 74 68 65  clause.of anothe
a270: 72 20 5b 53 45 4c 45 43 54 5d 20 69 6e 20 70 6c  r [SELECT] in pl
a280: 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e  ace of a table n
a290: 61 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  ame..</p>..<p>^I
a2a0: 66 20 74 68 65 20 22 54 45 4d 50 22 20 6f 72 20  f the "TEMP" or 
a2b0: 22 54 45 4d 50 4f 52 41 52 59 22 20 6b 65 79 77  "TEMPORARY" keyw
a2c0: 6f 72 64 20 6f 63 63 75 72 73 20 69 6e 20 62 65  ord occurs in be
a2d0: 74 77 65 65 6e 20 22 43 52 45 41 54 45 22 0a 61  tween "CREATE".a
a2e0: 6e 64 20 22 56 49 45 57 22 20 74 68 65 6e 20 74  nd "VIEW" then t
a2f0: 68 65 20 76 69 65 77 20 74 68 61 74 20 69 73 20  he view that is 
a300: 63 72 65 61 74 65 64 20 69 73 20 6f 6e 6c 79 20  created is only 
a310: 76 69 73 69 62 6c 65 20 74 6f 20 74 68 65 0a 70  visible to the.p
a320: 72 6f 63 65 73 73 20 74 68 61 74 20 6f 70 65 6e  rocess that open
a330: 65 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ed the database 
a340: 61 6e 64 20 69 73 20 61 75 74 6f 6d 61 74 69 63  and is automatic
a350: 61 6c 6c 79 20 64 65 6c 65 74 65 64 20 77 68 65  ally deleted whe
a360: 6e 0a 74 68 65 20 64 61 74 61 62 61 73 65 20 69  n.the database i
a370: 73 20 63 6c 6f 73 65 64 2e 3c 2f 70 3e 0a 0a 3c  s closed.</p>..<
a380: 70 3e 20 5e 49 66 20 61 20 26 6c 74 3b 64 61 74  p> ^If a &lt;dat
a390: 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69  abase-name&gt; i
a3a0: 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65  s specified, the
a3b0: 6e 20 74 68 65 20 76 69 65 77 20 69 73 20 63 72  n the view is cr
a3c0: 65 61 74 65 64 20 69 6e 20 0a 74 68 65 20 6e 61  eated in .the na
a3d0: 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20 5e 49  med database. ^I
a3e0: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f  t is an error to
a3f0: 20 73 70 65 63 69 66 79 20 62 6f 74 68 20 61 20   specify both a 
a400: 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d  &lt;database-nam
a410: 65 26 67 74 3b 0a 61 6e 64 20 74 68 65 20 54 45  e&gt;.and the TE
a420: 4d 50 20 6b 65 79 77 6f 72 64 20 6f 6e 20 61 20  MP keyword on a 
a430: 56 49 45 57 2c 20 75 6e 6c 65 73 73 20 74 68 65  VIEW, unless the
a440: 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61   &lt;database-na
a450: 6d 65 26 67 74 3b 20 69 73 20 22 74 65 6d 70 22  me&gt; is "temp"
a460: 2e 0a 5e 49 66 20 6e 6f 20 64 61 74 61 62 61 73  ..^If no databas
a470: 65 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66  e name is specif
a480: 69 65 64 2c 20 61 6e 64 20 74 68 65 20 54 45 4d  ied, and the TEM
a490: 50 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74  P keyword is not
a4a0: 20 70 72 65 73 65 6e 74 2c 0a 74 68 65 20 56 49   present,.the VI
a4b0: 45 57 20 69 73 20 63 72 65 61 74 65 64 20 69 6e  EW is created in
a4c0: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
a4d0: 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 59 6f 75  se.</p>..<p>^You
a4e0: 20 63 61 6e 6e 6f 74 20 5b 44 45 4c 45 54 45 5d   cannot [DELETE]
a4f0: 2c 20 5b 49 4e 53 45 52 54 5d 2c 20 6f 72 20 5b  , [INSERT], or [
a500: 55 50 44 41 54 45 5d 20 61 20 76 69 65 77 2e 20  UPDATE] a view. 
a510: 20 5e 56 69 65 77 73 20 61 72 65 20 72 65 61 64   ^Views are read
a520: 2d 6f 6e 6c 79 20 0a 69 6e 20 53 51 4c 69 74 65  -only .in SQLite
a530: 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 69 6e 20  .  ^However, in 
a540: 6d 61 6e 79 20 63 61 73 65 73 20 79 6f 75 20 63  many cases you c
a550: 61 6e 20 75 73 65 20 61 6e 0a 5b 49 4e 53 54 45  an use an.[INSTE
a560: 41 44 20 4f 46 20 74 72 69 67 67 65 72 5d 20 6f  AD OF trigger] o
a570: 6e 20 74 68 65 20 76 69 65 77 20 74 6f 20 61 63  n the view to ac
a580: 63 6f 6d 70 6c 69 73 68 20 0a 74 68 65 20 73 61  complish .the sa
a590: 6d 65 20 74 68 69 6e 67 2e 20 20 5e 56 69 65 77  me thing.  ^View
a5a0: 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 0a 77  s are removed .w
a5b0: 69 74 68 20 74 68 65 20 5b 44 52 4f 50 20 56 49  ith the [DROP VI
a5c0: 45 57 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e  EW] command.</p>
a5d0: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
a5e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a5f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
a630: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
a640: 41 42 4c 45 7d 20 7b 63 72 65 61 74 65 76 74 61  ABLE} {createvta
a650: 62 7d 20 7b 7b 43 52 45 41 54 45 20 56 49 52 54  b} {{CREATE VIRT
a660: 55 41 4c 20 54 41 42 4c 45 7d 7d 0a 0a 42 75 62  UAL TABLE}}..Bub
a670: 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74  bleDiagram creat
a680: 65 2d 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 2d  e-virtual-table-
a690: 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c  stmt 1.</tcl>..<
a6a0: 70 3e 41 20 5b 76 69 72 74 75 61 6c 20 74 61 62  p>A [virtual tab
a6b0: 6c 65 5d 20 69 73 20 61 6e 20 69 6e 74 65 72 66  le] is an interf
a6c0: 61 63 65 20 74 6f 20 61 6e 20 65 78 74 65 72 6e  ace to an extern
a6d0: 61 6c 20 73 74 6f 72 61 67 65 20 6f 72 20 63 6f  al storage or co
a6e0: 6d 70 75 74 61 74 69 6f 6e 0a 65 6e 67 69 6e 65  mputation.engine
a6f0: 20 74 68 61 74 20 61 70 70 65 61 72 73 20 74 6f   that appears to
a700: 20 62 65 20 61 20 74 61 62 6c 65 20 62 75 74 20   be a table but 
a710: 64 6f 65 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c  does not actuall
a720: 79 20 73 74 6f 72 65 20 69 6e 66 6f 72 6d 61 74  y store informat
a730: 69 6f 6e 0a 69 6e 20 74 68 65 20 64 61 74 61 62  ion.in the datab
a740: 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c  ase file.</p>..<
a750: 70 3e 49 6e 20 67 65 6e 65 72 61 6c 2c 20 79 6f  p>In general, yo
a760: 75 20 63 61 6e 20 64 6f 20 61 6e 79 74 68 69 6e  u can do anythin
a770: 67 20 77 69 74 68 20 61 20 5b 76 69 72 74 75 61  g with a [virtua
a780: 6c 20 74 61 62 6c 65 5d 20 74 68 61 74 20 63 61  l table] that ca
a790: 6e 20 62 65 20 64 6f 6e 65 0a 77 69 74 68 20 61  n be done.with a
a7a0: 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65  n ordinary table
a7b0: 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 5e 79  , except that ^y
a7c0: 6f 75 20 63 61 6e 6e 6f 74 20 63 72 65 61 74 65  ou cannot create
a7d0: 20 69 6e 64 69 63 65 73 20 6f 72 20 74 72 69 67   indices or trig
a7e0: 67 65 72 73 20 6f 6e 20 61 0a 76 69 72 74 75 61  gers on a.virtua
a7f0: 6c 20 74 61 62 6c 65 2e 20 20 5e 53 6f 6d 65 20  l table.  ^Some 
a800: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d  virtual table im
a810: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 69  plementations mi
a820: 67 68 74 20 69 6d 70 6f 73 65 20 61 64 64 69 74  ght impose addit
a830: 69 6f 6e 61 6c 0a 72 65 73 74 72 69 63 74 69 6f  ional.restrictio
a840: 6e 73 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ns.  For example
a850: 2c 20 6d 61 6e 79 20 76 69 72 74 75 61 6c 20 74  , many virtual t
a860: 61 62 6c 65 73 20 61 72 65 20 72 65 61 64 2d 6f  ables are read-o
a870: 6e 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  nly.</p>..<p>The
a880: 20 26 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d 65   &lt;module-name
a890: 26 67 74 3b 20 69 73 20 74 68 65 20 6e 61 6d 65  &gt; is the name
a8a0: 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 74 68   of an object th
a8b0: 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 0a 74 68  at implements.th
a8c0: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
a8d0: 20 20 5e 54 68 65 20 26 6c 74 3b 6d 6f 64 75 6c    ^The &lt;modul
a8e0: 65 2d 6e 61 6d 65 26 67 74 3b 20 6d 75 73 74 20  e-name&gt; must 
a8f0: 62 65 20 72 65 67 69 73 74 65 72 65 64 20 77 69  be registered wi
a900: 74 68 0a 74 68 65 20 53 51 4c 69 74 65 20 64 61  th.the SQLite da
a910: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
a920: 6e 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33  n using.[sqlite3
a930: 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29  _create_module()
a940: 5d 20 6f 72 20 5b 73 71 6c 69 74 65 33 5f 63 72  ] or [sqlite3_cr
a950: 65 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29  eate_module_v2()
a960: 5d 0a 70 72 69 6f 72 20 74 6f 20 69 73 73 75 69  ].prior to issui
a970: 6e 67 20 74 68 65 20 43 52 45 41 54 45 20 56 49  ng the CREATE VI
a980: 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74  RTUAL TABLE stat
a990: 65 6d 65 6e 74 2e 0a 5e 54 68 65 20 6d 6f 64 75  ement..^The modu
a9a0: 6c 65 20 74 61 6b 65 73 20 7a 65 72 6f 20 6f 72  le takes zero or
a9b0: 20 6d 6f 72 65 20 63 6f 6d 6d 61 2d 73 65 70 61   more comma-sepa
a9c0: 72 61 74 65 64 20 61 72 67 75 6d 65 6e 74 73 2e  rated arguments.
a9d0: 0a 5e 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20  .^The arguments 
a9e0: 63 61 6e 20 62 65 20 6a 75 73 74 20 61 62 6f 75  can be just abou
a9f0: 74 20 61 6e 79 20 74 65 78 74 20 61 73 20 6c 6f  t any text as lo
aa00: 6e 67 20 61 73 20 69 74 20 68 61 73 20 62 61 6c  ng as it has bal
aa10: 61 6e 63 65 64 0a 70 61 72 65 6e 74 68 65 73 65  anced.parenthese
aa20: 73 2e 20 20 54 68 65 20 61 72 67 75 6d 65 6e 74  s.  The argument
aa30: 20 73 79 6e 74 61 78 20 69 73 20 73 75 66 66 69   syntax is suffi
aa40: 63 69 65 6e 74 6c 79 20 67 65 6e 65 72 61 6c 20  ciently general 
aa50: 74 68 61 74 20 74 68 65 0a 61 72 67 75 6d 65 6e  that the.argumen
aa60: 74 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74  ts can be made t
aa70: 6f 20 61 70 70 65 61 72 20 61 73 20 63 6f 6c 75  o appear as colu
aa80: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 20 69  mn definitions i
aa90: 6e 20 61 20 74 72 61 64 69 74 69 6f 6e 61 6c 0a  n a traditional.
aaa0: 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73  [CREATE TABLE] s
aab0: 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 53 51 4c  tatement.  .^SQL
aac0: 69 74 65 20 70 61 73 73 65 73 20 74 68 65 20 6d  ite passes the m
aad0: 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 73 20  odule arguments 
aae0: 64 69 72 65 63 74 6c 79 0a 74 6f 20 74 68 65 20  directly.to the 
aaf0: 5b 78 43 72 65 61 74 65 5d 20 61 6e 64 20 5b 78  [xCreate] and [x
ab00: 43 6f 6e 6e 65 63 74 5d 20 6d 65 74 68 6f 64 73  Connect] methods
ab10: 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20 69   of the module i
ab20: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 77 69  mplementation.wi
ab30: 74 68 6f 75 74 20 61 6e 79 20 69 6e 74 65 72 70  thout any interp
ab40: 72 65 74 61 74 69 6f 6e 2e 20 20 49 74 20 69 73  retation.  It is
ab50: 20 74 68 65 20 72 65 73 70 6f 6e 73 69 62 69 6c   the responsibil
ab60: 69 74 79 0a 6f 66 20 74 68 65 20 6d 6f 64 75 6c  ity.of the modul
ab70: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
ab80: 20 74 6f 20 70 61 72 73 65 20 61 6e 64 20 69 6e   to parse and in
ab90: 74 65 72 70 72 65 74 20 69 74 73 20 6f 77 6e 20  terpret its own 
aba0: 61 72 67 75 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a  arguments.</p>..
abb0: 3c 70 3e 5e 41 20 76 69 72 74 75 61 6c 20 74 61  <p>^A virtual ta
abc0: 62 6c 65 20 69 73 20 64 65 73 74 72 6f 79 65 64  ble is destroyed
abd0: 20 75 73 69 6e 67 20 74 68 65 20 6f 72 64 69 6e   using the ordin
abe0: 61 72 79 0a 5b 44 52 4f 50 20 54 41 42 4c 45 5d  ary.[DROP TABLE]
abf0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
ac00: 72 65 20 69 73 20 6e 6f 0a 44 52 4f 50 20 56 49  re is no.DROP VI
ac10: 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74  RTUAL TABLE stat
ac20: 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  ement.</p>..<tcl
ac30: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
ac40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ac50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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: 0a 53 65 63 74 69 6f 6e 20 44 45 4c 45 54 45 20  .Section DELETE 
ac90: 64 65 6c 65 74 65 20 7b 44 45 4c 45 54 45 20 2a  delete {DELETE *
aca0: 44 45 4c 45 54 45 73 7d 0a 0a 42 75 62 62 6c 65  DELETEs}..Bubble
acb0: 44 69 61 67 72 61 6d 20 64 65 6c 65 74 65 2d 73  Diagram delete-s
acc0: 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61 67  tmt 1.BubbleDiag
acd0: 72 61 6d 20 71 75 61 6c 69 66 69 65 64 2d 74 61  ram qualified-ta
ace0: 62 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e 0a  ble-name.</tcl>.
acf0: 0a 3c 70 3e 5e 54 68 65 20 44 45 4c 45 54 45 20  .<p>^The DELETE 
ad00: 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20  command is used 
ad10: 74 6f 20 72 65 6d 6f 76 65 20 72 65 63 6f 72 64  to remove record
ad20: 73 20 66 72 6f 6d 20 61 20 74 61 62 6c 65 2e 0a  s from a table..
ad30: 5e 54 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e  ^The command con
ad40: 73 69 73 74 73 20 6f 66 20 74 68 65 20 22 44 45  sists of the "DE
ad50: 4c 45 54 45 20 46 52 4f 4d 22 20 6b 65 79 77 6f  LETE FROM" keywo
ad60: 72 64 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 0a  rds followed by.
ad70: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
ad80: 74 61 62 6c 65 20 66 72 6f 6d 20 77 68 69 63 68  table from which
ad90: 20 72 65 63 6f 72 64 73 20 61 72 65 20 74 6f 20   records are to 
ada0: 62 65 20 72 65 6d 6f 76 65 64 2e 0a 3c 2f 70 3e  be removed..</p>
adb0: 0a 0a 3c 70 3e 5e 57 69 74 68 6f 75 74 20 61 20  ..<p>^Without a 
adc0: 57 48 45 52 45 20 63 6c 61 75 73 65 2c 20 61 6c  WHERE clause, al
add0: 6c 20 72 6f 77 73 20 6f 66 20 74 68 65 20 74 61  l rows of the ta
ade0: 62 6c 65 20 61 72 65 20 72 65 6d 6f 76 65 64 2e  ble are removed.
adf0: 0a 5e 49 66 20 61 20 57 48 45 52 45 20 63 6c 61  .^If a WHERE cla
ae00: 75 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c  use is supplied,
ae10: 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 6f 73 65   then only those
ae20: 20 72 6f 77 73 20 74 68 61 74 20 6d 61 74 63 68   rows that match
ae30: 0a 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20  .the expression 
ae40: 61 72 65 20 72 65 6d 6f 76 65 64 2e 3c 2f 70 3e  are removed.</p>
ae50: 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63 74 69 6f  ..<h3>Restrictio
ae60: 6e 73 20 6f 6e 20 44 45 4c 45 54 45 20 53 74 61  ns on DELETE Sta
ae70: 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e 20 43  tements Within C
ae80: 52 45 41 54 45 20 54 52 49 47 47 45 52 3c 2f 68  REATE TRIGGER</h
ae90: 33 3e 0a 0a 3c 70 3e 5e 54 68 65 72 65 20 61 72  3>..<p>^There ar
aea0: 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 73 79 6e  e additional syn
aeb0: 74 61 78 20 72 65 73 74 72 69 63 74 69 6f 6e 73  tax restrictions
aec0: 20 6f 6e 20 44 45 4c 45 54 45 20 73 74 61 74 65   on DELETE state
aed0: 6d 65 6e 74 73 20 74 68 61 74 0a 6f 63 63 75 72  ments that.occur
aee0: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
aef0: 20 6f 66 20 61 20 5b 43 52 45 41 54 45 20 54 52   of a [CREATE TR
af00: 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74  IGGER] statement
af10: 2e 20 20 5e 54 68 65 20 3c 69 3e 74 61 62 6c 65  .  ^The <i>table
af20: 2d 6e 61 6d 65 3c 2f 69 3e 0a 6d 75 73 74 20 62  -name</i>.must b
af30: 65 20 75 6e 71 75 61 6c 69 66 69 65 64 2e 20 0a  e unqualified. .
af40: 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  ^(In other words
af50: 2c 20 74 68 65 20 3c 69 3e 64 61 74 61 62 61 73  , the <i>databas
af60: 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f  e-name</i><b>.</
af70: 62 3e 20 70 72 65 66 69 78 0a 6f 6e 20 74 68 65  b> prefix.on the
af80: 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 73 20 6e   table name is n
af90: 6f 74 20 61 6c 6c 6f 77 65 64 20 77 69 74 68 69  ot allowed withi
afa0: 6e 20 74 72 69 67 67 65 72 73 2e 20 29 5e 0a 5e  n triggers. )^.^
afb0: 54 68 65 20 74 61 62 6c 65 20 66 72 6f 6d 20 77  The table from w
afc0: 68 69 63 68 20 74 6f 20 64 65 6c 65 74 65 20 6d  hich to delete m
afd0: 75 73 74 20 62 65 20 69 6e 20 74 68 65 20 73 61  ust be in the sa
afe0: 6d 65 0a 64 61 74 61 62 61 73 65 20 61 73 20 74  me.database as t
aff0: 68 65 20 74 61 62 6c 65 20 74 6f 20 77 68 69 63  he table to whic
b000: 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73  h the trigger is
b010: 20 61 74 74 61 63 68 65 64 2e 3c 2f 70 3e 0a 0a   attached.</p>..
b020: 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20  <p>^The INDEXED 
b030: 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58  BY and NOT INDEX
b040: 45 44 20 63 6c 61 75 73 65 73 20 61 72 65 20 6e  ED clauses are n
b050: 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 44 45  ot allowed on DE
b060: 4c 45 54 45 0a 73 74 61 74 65 6d 65 6e 74 73 20  LETE.statements 
b070: 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
b080: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49  </p>..<p>^The LI
b090: 4d 49 54 20 63 6c 61 75 73 65 20 28 64 65 73 63  MIT clause (desc
b0a0: 72 69 62 65 64 20 62 65 6c 6f 77 29 20 69 73 20  ribed below) is 
b0b0: 75 6e 73 75 70 70 6f 72 74 65 64 20 77 69 74 68  unsupported with
b0c0: 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e  in triggers.</p>
b0d0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
b0e0: 6e 74 20 74 72 75 63 61 74 65 6f 70 74 20 7b 74  nt trucateopt {t
b0f0: 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61  runcate optimiza
b100: 74 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  tion}</tcl>.<h3>
b110: 54 68 65 20 54 72 75 6e 63 61 74 65 20 4f 70 74  The Truncate Opt
b120: 69 6d 69 7a 61 74 69 6f 6e 3c 2f 68 33 3e 0a 0a  imization</h3>..
b130: 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 57 48 45  <p>^When the WHE
b140: 52 45 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  RE is omitted fr
b150: 6f 6d 20 61 20 44 45 4c 45 54 45 20 73 74 61 74  om a DELETE stat
b160: 65 6d 65 6e 74 20 61 6e 64 20 74 68 65 20 74 61  ement and the ta
b170: 62 6c 65 0a 62 65 69 6e 67 20 64 65 6c 65 74 65  ble.being delete
b180: 64 20 68 61 73 20 6e 6f 20 74 72 69 67 67 65 72  d has no trigger
b190: 73 2c 0a 53 51 4c 69 74 65 20 75 73 65 73 20 61  s,.SQLite uses a
b1a0: 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 74  n optimization t
b1b0: 6f 20 65 72 61 73 65 20 74 68 65 20 65 6e 74 69  o erase the enti
b1c0: 72 65 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74  re table content
b1d0: 0a 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20  .without having 
b1e0: 74 6f 20 76 69 73 69 74 20 65 61 63 68 20 72 6f  to visit each ro
b1f0: 77 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69  w of the table i
b200: 6e 64 69 76 69 64 75 61 6c 6c 79 2e 0a 54 68 69  ndividually..Thi
b210: 73 20 22 74 72 75 6e 63 61 74 65 22 20 6f 70 74  s "truncate" opt
b220: 69 6d 69 7a 61 74 69 6f 6e 20 6d 61 6b 65 73 20  imization makes 
b230: 74 68 65 20 64 65 6c 65 74 65 20 72 75 6e 20 6d  the delete run m
b240: 75 63 68 20 66 61 73 74 65 72 2e 0a 50 72 69 6f  uch faster..Prio
b250: 72 20 74 6f 20 53 51 4c 69 74 65 20 5b 76 65 72  r to SQLite [ver
b260: 73 69 6f 6e 20 33 2e 36 2e 35 5d 2c 20 74 68 65  sion 3.6.5], the
b270: 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69   truncate optimi
b280: 7a 61 74 69 6f 6e 0a 61 6c 73 6f 20 6d 65 61 6e  zation.also mean
b290: 74 20 74 68 61 74 20 74 68 65 20 5b 73 71 6c 69  t that the [sqli
b2a0: 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 20 61  te3_changes()] a
b2b0: 6e 64 0a 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61  nd.[sqlite3_tota
b2c0: 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20 69 6e 74  l_changes()] int
b2d0: 65 72 66 61 63 65 73 0a 61 6e 64 20 74 68 65 20  erfaces.and the 
b2e0: 5b 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20 70  [count_changes p
b2f0: 72 61 67 6d 61 5d 0a 77 69 6c 6c 20 6e 6f 74 20  ragma].will not 
b300: 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20  actually return 
b310: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65  the number of de
b320: 6c 65 74 65 64 20 72 6f 77 73 2e 20 20 0a 54 68  leted rows.  .Th
b330: 61 74 20 70 72 6f 62 6c 65 6d 20 68 61 73 20 62  at problem has b
b340: 65 65 6e 20 66 69 78 65 64 20 61 73 20 6f 66 20  een fixed as of 
b350: 5b 76 65 72 73 69 6f 6e 20 33 2e 36 2e 35 5d 2e  [version 3.6.5].
b360: 0a 0a 3c 70 3e 5e 54 68 65 20 74 72 75 6e 63 61  ..<p>^The trunca
b370: 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  te optimization 
b380: 63 61 6e 20 62 65 20 70 65 72 6d 61 6e 65 6e 74  can be permanent
b390: 6c 79 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20  ly disabled for 
b3a0: 61 6c 6c 20 71 75 65 72 69 65 73 0a 62 79 20 72  all queries.by r
b3b0: 65 63 6f 6d 70 69 6c 69 6e 67 0a 53 51 4c 69 74  ecompiling.SQLit
b3c0: 65 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49  e with the [SQLI
b3d0: 54 45 5f 4f 4d 49 54 5f 54 52 55 4e 43 41 54 45  TE_OMIT_TRUNCATE
b3e0: 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 5d 20 63  _OPTIMIZATION] c
b3f0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 73 77 69 74  ompile-time swit
b400: 63 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ch.</p>..<p>The 
b410: 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a  truncate optimiz
b420: 61 74 69 6f 6e 20 63 61 6e 20 61 6c 73 6f 20 62  ation can also b
b430: 65 20 64 69 73 61 62 6c 65 64 20 61 74 20 72 75  e disabled at ru
b440: 6e 74 69 6d 65 20 75 73 69 6e 67 0a 74 68 65 20  ntime using.the 
b450: 5b 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 74  [sqlite3_set_aut
b460: 68 6f 72 69 7a 65 72 28 29 5d 20 69 6e 74 65 72  horizer()] inter
b470: 66 61 63 65 2e 20 20 5e 49 66 20 61 6e 20 61 75  face.  ^If an au
b480: 74 68 6f 72 69 7a 65 72 20 63 61 6c 6c 62 61 63  thorizer callbac
b490: 6b 0a 72 65 74 75 72 6e 73 20 5b 53 51 4c 49 54  k.returns [SQLIT
b4a0: 45 5f 49 47 4e 4f 52 45 5d 20 66 6f 72 20 61 6e  E_IGNORE] for an
b4b0: 20 5b 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 5d   [SQLITE_DELETE]
b4c0: 20 61 63 74 69 6f 6e 20 63 6f 64 65 2c 20 74 68   action code, th
b4d0: 65 6e 0a 74 68 65 20 44 45 4c 45 54 45 20 6f 70  en.the DELETE op
b4e0: 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 70 72 6f  eration will pro
b4f0: 63 65 65 64 20 62 75 74 20 74 68 65 20 74 72 75  ceed but the tru
b500: 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69  ncate optimizati
b510: 6f 6e 20 77 69 6c 6c 0a 62 65 20 62 79 70 61 73  on will.be bypas
b520: 73 65 64 20 61 6e 64 20 72 6f 77 73 20 77 69 6c  sed and rows wil
b530: 6c 20 62 65 20 64 65 6c 65 74 65 64 20 6f 6e 65  l be deleted one
b540: 20 62 79 20 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 68   by one.</p>..<h
b550: 33 3e 55 73 65 20 4f 66 20 4c 49 4d 49 54 3c 2f  3>Use Of LIMIT</
b560: 68 33 3e 0a 0a 3c 70 3e 5e 49 66 20 53 51 4c 69  h3>..<p>^If SQLi
b570: 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77  te is compiled w
b580: 69 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f  ith the [SQLITE_
b590: 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45  ENABLE_UPDATE_DE
b5a0: 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70  LETE_LIMIT].comp
b5b0: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2c  ile-time option,
b5c0: 20 74 68 65 6e 20 74 68 65 20 73 79 6e 74 61 78   then the syntax
b5d0: 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73   of the DELETE s
b5e0: 74 61 74 65 6d 65 6e 74 20 69 73 0a 65 78 74 65  tatement is.exte
b5f0: 6e 64 65 64 20 62 79 20 74 68 65 20 61 64 64 69  nded by the addi
b600: 74 69 6f 6e 20 6f 66 20 6f 70 74 69 6f 6e 61 6c  tion of optional
b610: 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49   ORDER BY and LI
b620: 4d 49 54 20 63 6c 61 75 73 65 73 3a 3c 2f 70 3e  MIT clauses:</p>
b630: 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61  ..<tcl>BubbleDia
b640: 67 72 61 6d 20 64 65 6c 65 74 65 2d 73 74 6d 74  gram delete-stmt
b650: 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a  -limited</tcl>..
b660: 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c  <p>^The optional
b670: 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 63 61   LIMIT clause ca
b680: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6c 69 6d  n be used to lim
b690: 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  it the number of
b6a0: 0a 72 6f 77 73 20 64 65 6c 65 74 65 64 2c 20 61  .rows deleted, a
b6b0: 6e 64 20 74 68 65 72 65 62 79 20 6c 69 6d 69 74  nd thereby limit
b6c0: 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
b6d0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 54   transaction..^T
b6e0: 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
b6f0: 73 65 20 6f 6e 20 61 20 44 45 4c 45 54 45 20 73  se on a DELETE s
b700: 74 61 74 65 6d 65 6e 74 0a 69 73 20 75 73 65 64  tatement.is used
b710: 20 6f 6e 6c 79 20 74 6f 20 64 65 74 65 72 6d 69   only to determi
b720: 6e 65 20 77 68 69 63 68 20 72 6f 77 73 20 66 61  ne which rows fa
b730: 6c 6c 0a 77 69 74 68 69 6e 20 74 68 65 20 4c 49  ll.within the LI
b740: 4d 49 54 2e 20 20 5e 54 68 65 20 6f 72 64 65 72  MIT.  ^The order
b750: 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73 20 61   in which rows a
b760: 72 65 20 64 65 6c 65 74 65 64 20 69 73 20 61 72  re deleted is ar
b770: 62 69 74 72 61 72 79 0a 61 6e 64 20 69 73 20 6e  bitrary.and is n
b780: 6f 74 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  ot determined by
b790: 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
b7a0: 61 75 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  ause.</p>..<p>^T
b7b0: 68 65 20 70 72 65 73 65 6e 63 65 20 6f 66 20 61  he presence of a
b7c0: 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 64 65   LIMIT clause de
b7d0: 66 65 61 74 73 20 74 68 65 20 74 72 75 6e 63 61  feats the trunca
b7e0: 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a  te optimization.
b7f0: 63 61 75 73 69 6e 67 20 61 6c 6c 20 72 6f 77 73  causing all rows
b800: 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64 20 74   being deleted t
b810: 6f 20 62 65 20 76 69 73 69 74 65 64 2e 3c 2f 70  o be visited.</p
b820: 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
b830: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b840: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65 63 74 69 6f 6e  ########.Section
b880: 20 7b 44 45 54 41 43 48 20 44 41 54 41 42 41 53   {DETACH DATABAS
b890: 45 7d 20 64 65 74 61 63 68 20 2a 44 45 54 41 43  E} detach *DETAC
b8a0: 48 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  H..BubbleDiagram
b8b0: 20 64 65 74 61 63 68 2d 73 74 6d 74 20 31 0a 3c   detach-stmt 1.<
b8c0: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 69 73 20  /tcl>..<p>^This 
b8d0: 73 74 61 74 65 6d 65 6e 74 20 64 65 74 61 63 68  statement detach
b8e0: 65 73 20 61 6e 20 61 64 64 69 74 69 6f 6e 61 6c  es an additional
b8f0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
b900: 74 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79 20  tion previously 
b910: 0a 61 74 74 61 63 68 65 64 20 75 73 69 6e 67 20  .attached using 
b920: 74 68 65 20 5b 41 54 54 41 43 48 5d 20 73 74 61  the [ATTACH] sta
b930: 74 65 6d 65 6e 74 2e 20 20 0a 5e 49 74 20 69 73  tement.  .^It is
b940: 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 68 61 76   possible to hav
b950: 65 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  e the same datab
b960: 61 73 65 20 66 69 6c 65 20 61 74 74 61 63 68 65  ase file attache
b970: 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73  d multiple times
b980: 20 75 73 69 6e 67 20 0a 64 69 66 66 65 72 65 6e   using .differen
b990: 74 20 6e 61 6d 65 73 2c 20 61 6e 64 20 64 65 74  t names, and det
b9a0: 61 63 68 69 6e 67 20 6f 6e 65 20 63 6f 6e 6e 65  aching one conne
b9b0: 63 74 69 6f 6e 20 74 6f 20 61 20 66 69 6c 65 20  ction to a file 
b9c0: 77 69 6c 6c 20 6c 65 61 76 65 20 74 68 65 20 0a  will leave the .
b9d0: 6f 74 68 65 72 73 20 69 6e 74 61 63 74 2e 3c 2f  others intact.</
b9e0: 70 3e 0a 0a 3c 70 3e 5e 54 68 69 73 20 73 74 61  p>..<p>^This sta
b9f0: 74 65 6d 65 6e 74 20 77 69 6c 6c 20 66 61 69 6c  tement will fail
ba00: 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 69 6e   if SQLite is in
ba10: 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 61   the middle of a
ba20: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70   transaction.</p
ba30: 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  >...<tcl>.######
ba40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ba50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ba60: 23 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 0a 53 65 63 74 69 6f 6e  ########.Section
ba90: 20 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20 64 72   {DROP INDEX} dr
baa0: 6f 70 69 6e 64 65 78 20 7b 7b 44 52 4f 50 20 49  opindex {{DROP I
bab0: 4e 44 45 58 7d 7d 0a 0a 42 75 62 62 6c 65 44 69  NDEX}}..BubbleDi
bac0: 61 67 72 61 6d 20 64 72 6f 70 2d 69 6e 64 65 78  agram drop-index
bad0: 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a  -stmt 1.</tcl>..
bae0: 3c 70 3e 5e 54 68 65 20 44 52 4f 50 20 49 4e 44  <p>^The DROP IND
baf0: 45 58 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d  EX statement rem
bb00: 6f 76 65 73 20 61 6e 20 69 6e 64 65 78 20 61 64  oves an index ad
bb10: 64 65 64 0a 77 69 74 68 20 74 68 65 20 5b 43 52  ded.with the [CR
bb20: 45 41 54 45 20 49 4e 44 45 58 5d 20 73 74 61 74  EATE INDEX] stat
bb30: 65 6d 65 6e 74 2e 20 20 54 68 65 20 69 6e 64 65  ement.  The inde
bb40: 78 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20  x is completely 
bb50: 72 65 6d 6f 76 65 64 20 66 72 6f 6d 0a 74 68 65  removed from.the
bb60: 20 64 69 73 6b 2e 20 20 54 68 65 20 6f 6e 6c 79   disk.  The only
bb70: 20 77 61 79 20 74 6f 20 72 65 63 6f 76 65 72 20   way to recover 
bb80: 74 68 65 20 69 6e 64 65 78 20 69 73 20 74 6f 20  the index is to 
bb90: 72 65 65 6e 74 65 72 20 74 68 65 0a 61 70 70 72  reenter the.appr
bba0: 6f 70 72 69 61 74 65 20 5b 43 52 45 41 54 45 20  opriate [CREATE 
bbb0: 49 4e 44 45 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c  INDEX] command.<
bbc0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
bbd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bbe0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bbf0: 23 23 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 0a 53 65 63 74 69 6f  #########.Sectio
bc20: 6e 20 7b 44 52 4f 50 20 54 41 42 4c 45 7d 20 64  n {DROP TABLE} d
bc30: 72 6f 70 74 61 62 6c 65 20 7b 7b 44 52 4f 50 20  roptable {{DROP 
bc40: 54 41 42 4c 45 7d 7d 0a 0a 42 75 62 62 6c 65 44  TABLE}}..BubbleD
bc50: 69 61 67 72 61 6d 20 64 72 6f 70 2d 74 61 62 6c  iagram drop-tabl
bc60: 65 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a  e-stmt 1.</tcl>.
bc70: 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50 20 54 41  .<p>^The DROP TA
bc80: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 72 65  BLE statement re
bc90: 6d 6f 76 65 73 20 61 20 74 61 62 6c 65 20 61 64  moves a table ad
bca0: 64 65 64 20 77 69 74 68 20 74 68 65 0a 5b 43 52  ded with the.[CR
bcb0: 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74  EATE TABLE] stat
bcc0: 65 6d 65 6e 74 2e 20 20 54 68 65 20 6e 61 6d 65  ement.  The name
bcd0: 20 73 70 65 63 69 66 69 65 64 20 69 73 20 74 68   specified is th
bce0: 65 0a 74 61 62 6c 65 20 6e 61 6d 65 2e 20 20 5e  e.table name.  ^
bcf0: 54 68 65 20 64 72 6f 70 70 65 64 20 74 61 62 6c  The dropped tabl
bd00: 65 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20  e is completely 
bd10: 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65  removed from the
bd20: 20 64 61 74 61 62 61 73 65 20 0a 73 63 68 65 6d   database .schem
bd30: 61 20 61 6e 64 20 74 68 65 20 64 69 73 6b 20 66  a and the disk f
bd40: 69 6c 65 2e 20 20 54 68 65 20 74 61 62 6c 65 20  ile.  The table 
bd50: 63 61 6e 20 6e 6f 74 20 62 65 20 72 65 63 6f 76  can not be recov
bd60: 65 72 65 64 2e 20 20 0a 5e 41 6c 6c 20 69 6e 64  ered.  .^All ind
bd70: 69 63 65 73 20 61 6e 64 20 74 72 69 67 67 65 72  ices and trigger
bd80: 73 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s.associated wit
bd90: 68 20 74 68 65 20 74 61 62 6c 65 20 61 72 65 20  h the table are 
bda0: 61 6c 73 6f 20 64 65 6c 65 74 65 64 2e 3c 2f 70  also deleted.</p
bdb0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f  >..<p>^The optio
bdc0: 6e 61 6c 20 49 46 20 45 58 49 53 54 53 20 63 6c  nal IF EXISTS cl
bdd0: 61 75 73 65 20 73 75 70 70 72 65 73 73 65 73 20  ause suppresses 
bde0: 74 68 65 20 65 72 72 6f 72 20 74 68 61 74 20 77  the error that w
bdf0: 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0a 72 65  ould normally.re
be00: 73 75 6c 74 20 69 66 20 74 68 65 20 74 61 62 6c  sult if the tabl
be10: 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  e does not exist
be20: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 5b 66  .</p>..<p>^If [f
be30: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
be40: 72 61 69 6e 74 73 5d 20 61 72 65 20 65 6e 61 62  raints] are enab
be50: 6c 65 64 2c 20 61 20 44 52 4f 50 20 54 41 42 4c  led, a DROP TABL
be60: 45 20 63 6f 6d 6d 61 6e 64 20 70 65 72 66 6f 72  E command perfor
be70: 6d 73 20 61 6e 0a 69 6d 70 6c 69 63 69 74 20 5b  ms an.implicit [
be80: 44 45 4c 45 54 45 20 7c 20 44 45 4c 45 54 45 20  DELETE | DELETE 
be90: 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b  FROM &lt;tbl&gt;
bea0: 5d 20 63 6f 6d 6d 61 6e 64 20 62 65 66 6f 72 65  ] command before
beb0: 20 72 65 6d 6f 76 69 6e 67 20 74 68 65 0a 74 61   removing the.ta
bec0: 62 6c 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ble from the dat
bed0: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 5e 41  abase schema. ^A
bee0: 6e 79 20 74 72 69 67 67 65 72 73 20 61 74 74 61  ny triggers atta
bef0: 63 68 65 64 20 74 6f 20 74 68 65 20 74 61 62 6c  ched to the tabl
bf00: 65 20 61 72 65 0a 64 72 6f 70 70 65 64 20 66 72  e are.dropped fr
bf10: 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
bf20: 73 63 68 65 6d 61 20 62 65 66 6f 72 65 20 74 68  schema before th
bf30: 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45 54  e implicit DELET
bf40: 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26 67  E FROM &lt;tbl&g
bf50: 74 3b 20 0a 69 73 20 65 78 65 63 75 74 65 64 2c  t; .is executed,
bf60: 20 73 6f 20 74 68 69 73 20 63 61 6e 6e 6f 74 20   so this cannot 
bf70: 63 61 75 73 65 20 61 6e 79 20 74 72 69 67 67 65  cause any trigge
bf80: 72 73 20 74 6f 20 66 69 72 65 2e 20 42 79 20 63  rs to fire. By c
bf90: 6f 6e 74 72 61 73 74 2c 20 5e 61 6e 0a 69 6d 70  ontrast, ^an.imp
bfa0: 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f  licit DELETE FRO
bfb0: 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 64 6f  M &lt;tbl&gt; do
bfc0: 65 73 20 63 61 75 73 65 20 61 6e 79 20 63 6f 6e  es cause any con
bfd0: 66 69 67 75 72 65 64 0a 5b 66 6f 72 65 69 67 6e  figured.[foreign
bfe0: 20 6b 65 79 20 61 63 74 69 6f 6e 73 5d 20 74 6f   key actions] to
bff0: 20 74 61 6b 65 20 70 6c 61 63 65 2e 20 0a 5e 49   take place. .^I
c000: 66 20 74 68 65 20 69 6d 70 6c 69 63 69 74 20 44  f the implicit D
c010: 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74  ELETE FROM &lt;t
c020: 62 6c 26 67 74 3b 20 65 78 65 63 75 74 65 64 0a  bl&gt; executed.
c030: 61 73 20 70 61 72 74 20 6f 66 20 61 20 44 52 4f  as part of a DRO
c040: 50 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20  P TABLE command 
c050: 76 69 6f 6c 61 74 65 73 20 61 6e 79 20 69 6d 6d  violates any imm
c060: 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b  ediate foreign k
c070: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 0a  ey constraints,.
c080: 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74 75  an error is retu
c090: 72 6e 65 64 20 61 6e 64 20 74 68 65 20 74 61 62  rned and the tab
c0a0: 6c 65 20 69 73 20 6e 6f 74 20 64 72 6f 70 70 65  le is not droppe
c0b0: 64 2e 20 5e 49 66 20 0a 74 68 65 20 69 6d 70 6c  d. ^If .the impl
c0c0: 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f 4d  icit DELETE FROM
c0d0: 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 63 61 75   &lt;tbl&gt; cau
c0e0: 73 65 73 20 61 6e 79 20 0a 64 65 66 65 72 72 65  ses any .deferre
c0f0: 64 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  d foreign key co
c100: 6e 73 74 72 61 69 6e 74 73 20 74 6f 20 62 65 20  nstraints to be 
c110: 76 69 6f 6c 61 74 65 64 2c 20 61 6e 64 20 74 68  violated, and th
c120: 65 20 76 69 6f 6c 61 74 69 6f 6e 73 20 73 74 69  e violations sti
c130: 6c 6c 0a 65 78 69 73 74 20 77 68 65 6e 20 74 68  ll.exist when th
c140: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
c150: 20 63 6f 6d 6d 69 74 74 65 64 2c 20 61 6e 20 65   committed, an e
c160: 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
c170: 20 61 74 20 74 68 65 20 74 69 6d 65 0a 6f 66 20   at the time.of 
c180: 63 6f 6d 6d 69 74 2e 0a 0a 3c 74 63 6c 3e 0a 23  commit...<tcl>.#
c190: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c1a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c1b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65  #############.Se
c1e0: 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54 52 49 47  ction {DROP TRIG
c1f0: 47 45 52 7d 20 64 72 6f 70 74 72 69 67 67 65 72  GER} droptrigger
c200: 20 7b 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d   {{DROP TRIGGER}
c210: 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  }..BubbleDiagram
c220: 20 64 72 6f 70 2d 74 72 69 67 67 65 72 2d 73 74   drop-trigger-st
c230: 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mt 1.</tcl>..<p>
c240: 5e 54 68 65 20 44 52 4f 50 20 54 52 49 47 47 45  ^The DROP TRIGGE
c250: 52 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f  R statement remo
c260: 76 65 73 20 61 20 74 72 69 67 67 65 72 20 63 72  ves a trigger cr
c270: 65 61 74 65 64 20 62 79 20 74 68 65 20 0a 5b 43  eated by the .[C
c280: 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73  REATE TRIGGER] s
c290: 74 61 74 65 6d 65 6e 74 2e 20 20 5e 54 68 65 20  tatement.  ^The 
c2a0: 74 72 69 67 67 65 72 20 69 73 20 0a 64 65 6c 65  trigger is .dele
c2b0: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ted from the dat
c2c0: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 5e 4e  abase schema. ^N
c2d0: 6f 74 65 20 74 68 61 74 20 74 72 69 67 67 65 72  ote that trigger
c2e0: 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  s are automatica
c2f0: 6c 6c 79 20 0a 64 72 6f 70 70 65 64 20 77 68 65  lly .dropped whe
c300: 6e 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  n the associated
c310: 20 74 61 62 6c 65 20 69 73 20 64 72 6f 70 70 65   table is droppe
c320: 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  d.</p>..<tcl>.##
c330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65 63  ############.Sec
c380: 74 69 6f 6e 20 7b 44 52 4f 50 20 56 49 45 57 7d  tion {DROP VIEW}
c390: 20 64 72 6f 70 76 69 65 77 20 7b 7b 44 52 4f 50   dropview {{DROP
c3a0: 20 56 49 45 57 7d 7d 0a 0a 42 75 62 62 6c 65 44   VIEW}}..BubbleD
c3b0: 69 61 67 72 61 6d 20 64 72 6f 70 2d 76 69 65 77  iagram drop-view
c3c0: 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a  -stmt 1.</tcl>..
c3d0: 3c 70 3e 5e 54 68 65 20 44 52 4f 50 20 56 49 45  <p>^The DROP VIE
c3e0: 57 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f  W statement remo
c3f0: 76 65 73 20 61 20 76 69 65 77 20 63 72 65 61 74  ves a view creat
c400: 65 64 20 62 79 20 74 68 65 0a 5b 43 52 45 41 54  ed by the.[CREAT
c410: 45 20 56 49 45 57 5d 20 73 74 61 74 65 6d 65 6e  E VIEW] statemen
c420: 74 2e 20 20 5e 54 68 65 20 6e 61 6d 65 20 73 70  t.  ^The name sp
c430: 65 63 69 66 69 65 64 20 69 73 20 74 68 65 20 0a  ecified is the .
c440: 76 69 65 77 20 6e 61 6d 65 2e 20 20 5e 49 74 20  view name.  ^It 
c450: 69 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20  is removed from 
c460: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
c470: 65 6d 61 2c 20 62 75 74 20 6e 6f 20 61 63 74 75  ema, but no actu
c480: 61 6c 20 64 61 74 61 20 0a 69 6e 20 74 68 65 20  al data .in the 
c490: 75 6e 64 65 72 6c 79 69 6e 67 20 62 61 73 65 20  underlying base 
c4a0: 74 61 62 6c 65 73 20 69 73 20 6d 6f 64 69 66 69  tables is modifi
c4b0: 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  ed.</p>..<tcl>.#
c4c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c4d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c4e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65  #############.Se
c510: 63 74 69 6f 6e 20 45 58 50 4c 41 49 4e 20 65 78  ction EXPLAIN ex
c520: 70 6c 61 69 6e 20 45 58 50 4c 41 49 4e 0a 0a 42  plain EXPLAIN..B
c530: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 71 6c  ubbleDiagram sql
c540: 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
c550: 3e 5e 41 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  >^An SQL stateme
c560: 6e 74 20 63 61 6e 20 62 65 20 70 72 65 63 65 64  nt can be preced
c570: 65 64 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72  ed by the keywor
c580: 64 20 22 45 58 50 4c 41 49 4e 22 20 6f 72 0a 62  d "EXPLAIN" or.b
c590: 79 20 74 68 65 20 70 68 72 61 73 65 20 22 45 58  y the phrase "EX
c5a0: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
c5b0: 22 2e 20 20 5e 45 69 74 68 65 72 20 6d 6f 64 69  ".  ^Either modi
c5c0: 66 69 63 61 74 69 6f 6e 20 63 61 75 73 65 73 20  fication causes 
c5d0: 74 68 65 0a 53 51 4c 20 73 74 61 74 65 6d 65 6e  the.SQL statemen
c5e0: 74 20 74 6f 20 62 65 68 61 76 65 20 61 73 20 61  t to behave as a
c5f0: 20 71 75 65 72 79 20 61 6e 64 20 74 6f 20 72 65   query and to re
c600: 74 75 72 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  turn information
c610: 20 61 62 6f 75 74 0a 68 6f 77 20 74 68 65 20 53   about.how the S
c620: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75  QL statement wou
c630: 6c 64 20 68 61 76 65 20 6f 70 65 72 61 74 65 64  ld have operated
c640: 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20   if the EXPLAIN 
c650: 6b 65 79 77 6f 72 64 20 6f 72 0a 70 68 72 61 73  keyword or.phras
c660: 65 20 68 61 64 20 62 65 65 6e 20 6f 6d 69 74 74  e had been omitt
c670: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65  ed.</p>..<p>^Whe
c680: 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65  n the EXPLAIN ke
c690: 79 77 6f 72 64 20 61 70 70 65 61 72 73 20 62 79  yword appears by
c6a0: 20 69 74 73 65 6c 66 20 69 74 20 63 61 75 73 65   itself it cause
c6b0: 73 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  s the statement.
c6c0: 74 6f 20 62 65 68 61 76 65 20 61 73 20 61 20 71  to behave as a q
c6d0: 75 65 72 79 20 74 68 61 74 20 72 65 74 75 72 6e  uery that return
c6e0: 73 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f  s the sequence o
c6f0: 66 20 0a 5b 76 69 72 74 75 61 6c 20 6d 61 63 68  f .[virtual mach
c700: 69 6e 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ine instructions
c710: 5d 20 69 74 20 77 6f 75 6c 64 20 68 61 76 65 0a  ] it would have.
c720: 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20  used to execute 
c730: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 68 61 64 20  the command had 
c740: 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77  the EXPLAIN keyw
c750: 6f 72 64 20 6e 6f 74 20 62 65 65 6e 20 70 72 65  ord not been pre
c760: 73 65 6e 74 2e 0a 5e 57 68 65 6e 20 74 68 65 20  sent..^When the 
c770: 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
c780: 41 4e 20 70 68 72 61 73 65 20 61 70 70 65 61 72  AN phrase appear
c790: 73 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  s, the statement
c7a0: 20 72 65 74 75 72 6e 73 0a 68 69 67 68 2d 6c 65   returns.high-le
c7b0: 76 65 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  vel information 
c7c0: 61 62 6f 75 74 20 77 68 61 74 20 69 6e 64 69 63  about what indic
c7d0: 65 73 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65  es would have be
c7e0: 65 6e 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  en used.</p>..<p
c7f0: 3e 54 68 65 20 6f 75 74 70 75 74 20 66 72 6f 6d  >The output from
c800: 20 45 58 50 4c 41 49 4e 20 61 6e 64 20 45 58 50   EXPLAIN and EXP
c810: 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
c820: 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 0a  is intended for.
c830: 69 6e 74 65 72 61 63 74 69 76 65 20 61 6e 61 6c  interactive anal
c840: 79 73 69 73 20 61 6e 64 20 74 72 6f 75 62 6c 65  ysis and trouble
c850: 73 68 6f 6f 74 69 6e 67 20 6f 6e 6c 79 2e 20 20  shooting only.  
c860: 54 68 65 20 64 65 74 61 69 6c 73 20 6f 66 20 74  The details of t
c870: 68 65 20 0a 6f 75 74 70 75 74 20 66 6f 72 6d 61  he .output forma
c880: 74 20 61 72 65 20 73 75 62 6a 65 63 74 20 74 6f  t are subject to
c890: 20 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65   change from one
c8a0: 20 72 65 6c 65 61 73 65 20 6f 66 20 53 51 4c 69   release of SQLi
c8b0: 74 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 0a  te to the next..
c8c0: 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 73 68 6f  Applications sho
c8d0: 75 6c 64 20 6e 6f 74 20 75 73 65 20 45 58 50 4c  uld not use EXPL
c8e0: 41 49 4e 20 6f 72 20 45 58 50 4c 41 49 4e 20 51  AIN or EXPLAIN Q
c8f0: 55 45 52 59 20 50 4c 41 4e 20 73 69 6e 63 65 0a  UERY PLAN since.
c900: 74 68 65 69 72 20 65 78 61 63 74 20 62 65 68 61  their exact beha
c910: 76 69 6f 72 20 69 73 20 75 6e 64 6f 63 75 6d 65  vior is undocume
c920: 6e 74 65 64 2c 20 75 6e 73 70 65 63 69 66 69 65  nted, unspecifie
c930: 64 2c 20 61 6e 64 20 76 61 72 69 61 62 6c 65 2e  d, and variable.
c940: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
c950: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c960: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c970: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65 63 74 69  ##########.Secti
c9a0: 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 65 78  on expression ex
c9b0: 70 72 20 7b 2a 65 78 70 72 65 73 73 69 6f 6e 20  pr {*expression 
c9c0: 7b 65 78 70 72 65 73 73 69 6f 6e 20 73 79 6e 74  {expression synt
c9d0: 61 78 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67  ax}}..BubbleDiag
c9e0: 72 61 6d 20 65 78 70 72 20 31 0a 42 75 62 62 6c  ram expr 1.Bubbl
c9f0: 65 44 69 61 67 72 61 6d 20 6c 69 74 65 72 61 6c  eDiagram literal
ca00: 2d 76 61 6c 75 65 0a 42 75 62 62 6c 65 44 69 61  -value.BubbleDia
ca10: 67 72 61 6d 20 73 69 67 6e 65 64 2d 6e 75 6d 62  gram signed-numb
ca20: 65 72 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  er.BubbleDiagram
ca30: 20 72 61 69 73 65 2d 66 75 6e 63 74 69 6f 6e 0a   raise-function.
ca40: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 69 73 20  </tcl>..<p>This 
ca50: 73 65 63 74 69 6f 6e 20 69 73 20 64 69 66 66 65  section is diffe
ca60: 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 6f 74  rent from the ot
ca70: 68 65 72 73 2e 20 20 4d 6f 73 74 20 6f 74 68 65  hers.  Most othe
ca80: 72 20 73 65 63 74 69 6f 6e 73 20 6f 66 0a 74 68  r sections of.th
ca90: 69 73 20 64 6f 63 75 6d 65 6e 74 20 74 61 6c 6b  is document talk
caa0: 73 20 61 62 6f 75 74 20 61 20 70 61 72 74 69 63  s about a partic
cab0: 75 6c 61 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64  ular SQL command
cac0: 2e 20 20 54 68 69 73 20 73 65 63 74 69 6f 6e 20  .  This section 
cad0: 64 6f 65 73 0a 6e 6f 74 20 74 61 6c 6b 20 61 62  does.not talk ab
cae0: 6f 75 74 20 61 20 73 74 61 6e 64 61 6c 6f 6e 65  out a standalone
caf0: 20 63 6f 6d 6d 61 6e 64 20 62 75 74 20 61 62 6f   command but abo
cb00: 75 74 20 22 65 78 70 72 65 73 73 69 6f 6e 73 22  ut "expressions"
cb10: 20 77 68 69 63 68 20 61 72 65 20 0a 73 75 62 63   which are .subc
cb20: 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 6d 6f 73  omponents of mos
cb30: 74 20 6f 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73  t other commands
cb40: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
cb50: 72 61 67 6d 65 6e 74 20 62 69 6e 61 72 79 6f 70  ragment binaryop
cb60: 73 20 7b 62 69 6e 61 72 79 20 6f 70 65 72 61 74  s {binary operat
cb70: 6f 72 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f  ors}</tcl>.<h3>O
cb80: 70 65 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70  perators</h3>.<p
cb90: 3e 5e 28 53 51 4c 69 74 65 20 75 6e 64 65 72 73  >^(SQLite unders
cba0: 74 61 6e 64 73 20 74 68 65 20 66 6f 6c 6c 6f 77  tands the follow
cbb0: 69 6e 67 20 62 69 6e 61 72 79 20 6f 70 65 72 61  ing binary opera
cbc0: 74 6f 72 73 2c 20 69 6e 20 6f 72 64 65 72 20 66  tors, in order f
cbd0: 72 6f 6d 0a 68 69 67 68 65 73 74 20 74 6f 20 6c  rom.highest to l
cbe0: 6f 77 65 73 74 20 70 72 65 63 65 64 65 6e 63 65  owest precedence
cbf0: 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  :</p>..<blockquo
cc00: 74 65 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63  te><pre>.<font c
cc10: 6f 6c 6f 72 3d 22 23 32 63 32 63 66 30 22 3e 3c  olor="#2c2cf0"><
cc20: 62 69 67 3e 7c 7c 0a 2a 20 20 20 20 2f 20 20 20  big>||.*    /   
cc30: 20 25 0a 2b 20 20 20 20 2d 0a 26 6c 74 3b 26 6c   %.+    -.&lt;&l
cc40: 74 3b 20 20 20 26 67 74 3b 26 67 74 3b 20 20 20  t;   &gt;&gt;   
cc50: 26 61 6d 70 3b 20 20 20 20 7c 0a 26 6c 74 3b 20  &amp;    |.&lt; 
cc60: 20 20 20 26 6c 74 3b 3d 20 20 20 26 67 74 3b 20     &lt;=   &gt; 
cc70: 20 20 20 26 67 74 3b 3d 0a 3d 20 20 20 20 3d 3d     &gt;=.=    ==
cc80: 20 20 20 21 3d 20 20 20 26 6c 74 3b 26 67 74 3b     !=   &lt;&gt;
cc90: 20 20 20 3c 2f 62 69 67 3e 49 53 20 20 49 4e 20     </big>IS  IN 
cca0: 20 4c 49 4b 45 20 20 47 4c 4f 42 20 20 4d 41 54   LIKE  GLOB  MAT
ccb0: 43 48 20 20 52 45 47 45 58 50 0a 41 4e 44 20 20  CH  REGEXP.AND  
ccc0: 20 0a 4f 52 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72   .OR</font>.</pr
ccd0: 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  e></blockquote>)
cce0: 5e 0a 0a 3c 70 3e 5e 28 53 75 70 70 6f 72 74 65  ^..<p>^(Supporte
ccf0: 64 20 75 6e 61 72 79 20 70 72 65 66 69 78 20 6f  d unary prefix o
cd00: 70 65 72 61 74 6f 72 73 20 61 72 65 20 74 68 65  perators are the
cd10: 73 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  se:</p>..<blockq
cd20: 75 6f 74 65 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74  uote><pre>.<font
cd30: 20 63 6f 6c 6f 72 3d 22 23 32 63 32 63 66 30 22   color="#2c2cf0"
cd40: 3e 3c 62 69 67 3e 2d 20 20 20 20 2b 20 20 20 20  ><big>-    +    
cd50: 7e 20 20 20 20 4e 4f 54 3c 2f 62 69 67 3e 3c 2f  ~    NOT</big></
cd60: 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  font>.</pre></bl
cd70: 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e  ockquote>)^..<p>
cd80: 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65  ^The COLLATE ope
cd90: 72 61 74 6f 72 20 63 61 6e 20 62 65 20 74 68 6f  rator can be tho
cda0: 75 67 68 74 20 6f 66 20 61 73 20 61 20 75 6e 61  ught of as a una
cdb0: 72 79 20 70 6f 73 74 66 69 78 0a 6f 70 65 72 61  ry postfix.opera
cdc0: 74 6f 72 2e 20 20 5e 54 68 65 20 43 4f 4c 4c 41  tor.  ^The COLLA
cdd0: 54 45 20 6f 70 65 72 61 74 6f 72 20 68 61 73 20  TE operator has 
cde0: 74 68 65 20 68 69 67 68 65 73 74 20 70 72 65 63  the highest prec
cdf0: 65 64 65 6e 63 65 2e 0a 49 74 20 61 6c 77 61 79  edence..It alway
ce00: 73 20 62 69 6e 64 73 20 6d 6f 72 65 20 74 69 67  s binds more tig
ce10: 68 74 6c 79 20 74 68 61 6e 20 61 6e 79 20 70 72  htly than any pr
ce20: 65 66 69 78 20 75 6e 61 72 79 20 6f 70 65 72 61  efix unary opera
ce30: 74 6f 72 20 6f 72 0a 61 6e 79 20 62 69 6e 61 72  tor or.any binar
ce40: 79 20 6f 70 65 72 61 74 6f 72 2e 3c 2f 70 3e 0a  y operator.</p>.
ce50: 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20 22 0a  .<tcl>hd_puts ".
ce60: 3c 70 3e 5e 54 68 65 20 75 6e 61 72 79 20 6f 70  <p>^The unary op
ce70: 65 72 61 74 6f 72 20 5b 4f 70 65 72 61 74 6f 72  erator [Operator
ce80: 20 2b 5d 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20   +] is a no-op. 
ce90: 20 5e 49 74 20 63 61 6e 20 62 65 20 61 70 70 6c   ^It can be appl
cea0: 69 65 64 0a 74 6f 20 73 74 72 69 6e 67 73 2c 20  ied.to strings, 
ceb0: 6e 75 6d 62 65 72 73 2c 20 6f 72 20 62 6c 6f 62  numbers, or blob
cec0: 73 20 61 6e 64 20 69 74 20 61 6c 77 61 79 73 20  s and it always 
ced0: 67 69 76 65 73 20 61 73 20 69 74 73 20 72 65 73  gives as its res
cee0: 75 6c 74 20 74 68 65 0a 76 61 6c 75 65 20 6f 66  ult the.value of
cef0: 20 74 68 65 20 6f 70 65 72 61 6e 64 2e 3c 2f 70   the operand.</p
cf00: 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74  >"</tcl>..<p>Not
cf10: 65 20 74 68 61 74 20 74 68 65 72 65 20 61 72 65  e that there are
cf20: 20 74 77 6f 20 76 61 72 69 61 74 69 6f 6e 73 20   two variations 
cf30: 6f 66 20 74 68 65 20 65 71 75 61 6c 73 20 61 6e  of the equals an
cf40: 64 20 6e 6f 74 20 65 71 75 61 6c 73 0a 6f 70 65  d not equals.ope
cf50: 72 61 74 6f 72 73 2e 20 20 5e 45 71 75 61 6c 73  rators.  ^Equals
cf60: 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 0a 0a   can be either..
cf70: 3c 74 63 6c 3e 0a 68 64 5f 70 75 74 73 20 22 5b  <tcl>.hd_puts "[
cf80: 4f 70 65 72 61 74 6f 72 20 3d 5d 20 6f 72 20 5b  Operator =] or [
cf90: 4f 70 65 72 61 74 6f 72 20 3d 3d 5d 2e 0a 5e 54  Operator ==]..^T
cfa0: 68 65 20 6e 6f 6e 2d 65 71 75 61 6c 73 20 6f 70  he non-equals op
cfb0: 65 72 61 74 6f 72 20 63 61 6e 20 62 65 20 65 69  erator can be ei
cfc0: 74 68 65 72 0a 5b 4f 70 65 72 61 74 6f 72 20 21  ther.[Operator !
cfd0: 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20  =] or [Operator 
cfe0: 7b 26 6c 74 3b 26 67 74 3b 7d 5d 2e 0a 5e 54 68  {&lt;&gt;}]..^Th
cff0: 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20  e [Operator ||] 
d000: 6f 70 65 72 61 74 6f 72 20 69 73 20 5c 22 63 6f  operator is \"co
d010: 6e 63 61 74 65 6e 61 74 65 5c 22 20 2d 20 69 74  ncatenate\" - it
d020: 20 6a 6f 69 6e 73 20 74 6f 67 65 74 68 65 72 0a   joins together.
d030: 74 68 65 20 74 77 6f 20 73 74 72 69 6e 67 73 20  the two strings 
d040: 6f 66 20 69 74 73 20 6f 70 65 72 61 6e 64 73 2e  of its operands.
d050: 0a 5e 54 68 65 20 6f 70 65 72 61 74 6f 72 20 5b  .^The operator [
d060: 4f 70 65 72 61 74 6f 72 20 25 5d 20 6f 75 74 70  Operator %] outp
d070: 75 74 73 20 74 68 65 20 72 65 6d 61 69 6e 64 65  uts the remainde
d080: 72 20 6f 66 20 69 74 73 20 6c 65 66 74 20 0a 6f  r of its left .o
d090: 70 65 72 61 6e 64 20 6d 6f 64 75 6c 6f 20 69 74  perand modulo it
d0a0: 73 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 2e  s right operand.
d0b0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 72 65  </p>..<p>^The re
d0c0: 73 75 6c 74 20 6f 66 20 61 6e 79 20 62 69 6e 61  sult of any bina
d0d0: 72 79 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61  ry operator is a
d0e0: 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 2c 20   numeric value, 
d0f0: 65 78 63 65 70 74 0a 66 6f 72 20 74 68 65 20 5b  except.for the [
d100: 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20 63 6f 6e  Operator ||] con
d110: 63 61 74 65 6e 61 74 69 6f 6e 20 6f 70 65 72 61  catenation opera
d120: 74 6f 72 20 77 68 69 63 68 20 67 69 76 65 73 20  tor which gives 
d130: 61 20 73 74 72 69 6e 67 0a 72 65 73 75 6c 74 2e  a string.result.
d140: 3c 2f 70 3e 22 0a 0a 68 64 5f 66 72 61 67 6d 65  </p>"..hd_fragme
d150: 6e 74 20 7b 69 73 69 73 6e 6f 74 7d 20 7b 49 53  nt {isisnot} {IS
d160: 20 6f 70 65 72 61 74 6f 72 7d 20 7b 49 53 20 4e   operator} {IS N
d170: 4f 54 20 6f 70 65 72 61 74 6f 72 7d 0a 0a 68 64  OT operator}..hd
d180: 5f 70 75 74 73 20 22 3c 70 3e 5e 54 68 65 20 5b  _puts "<p>^The [
d190: 4f 70 65 72 61 74 6f 72 20 49 53 5d 20 61 6e 64  Operator IS] and
d1a0: 20 5b 4f 70 65 72 61 74 6f 72 20 7b 49 53 20 4e   [Operator {IS N
d1b0: 4f 54 7d 5d 20 6f 70 65 72 61 74 6f 72 73 20 77  OT}] operators w
d1c0: 6f 72 6b 0a 6c 69 6b 65 20 5b 4f 70 65 72 61 74  ork.like [Operat
d1d0: 6f 72 20 3d 5d 20 61 6e 64 20 5b 4f 70 65 72 61  or =] and [Opera
d1e0: 74 6f 72 20 21 3d 5d 20 65 78 63 65 70 74 20 74  tor !=] except t
d1f0: 68 61 74 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  hat NULL values 
d200: 63 6f 6d 70 61 72 65 0a 65 71 75 61 6c 20 74 6f  compare.equal to
d210: 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 20 20 5e   one another.  ^
d220: 5b 4f 70 65 72 61 74 6f 72 20 49 53 5d 20 61 6e  [Operator IS] an
d230: 64 20 5b 4f 70 65 72 61 74 6f 72 20 7b 49 53 20  d [Operator {IS 
d240: 4e 4f 54 7d 5d 0a 68 61 76 65 20 74 68 65 20 73  NOT}].have the s
d250: 61 6d 65 20 70 72 65 63 65 64 65 6e 63 65 20 61  ame precedence a
d260: 73 20 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 2e 22  s [Operator =]."
d270: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
d280: 6e 74 20 6c 69 74 76 61 6c 75 65 20 7b 6c 69 74  nt litvalue {lit
d290: 65 72 61 6c 20 76 61 6c 75 65 7d 3c 2f 74 63 6c  eral value}</tcl
d2a0: 3e 0a 3c 68 33 3e 4c 69 74 65 72 61 6c 20 56 61  >.<h3>Literal Va
d2b0: 6c 75 65 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 5e 41  lues</h3>.<p>.^A
d2c0: 20 6c 69 74 65 72 61 6c 20 76 61 6c 75 65 20 69   literal value i
d2d0: 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 66 20  s a constant of 
d2e0: 73 6f 6d 65 20 6b 69 6e 64 2e 0a 5e 4c 69 74 65  some kind..^Lite
d2f0: 72 61 6c 20 76 61 6c 75 65 73 20 6d 61 79 20 62  ral values may b
d300: 65 20 69 6e 74 65 67 65 72 73 2c 20 66 6c 6f 61  e integers, floa
d310: 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65  ting point numbe
d320: 72 73 2c 20 73 74 72 69 6e 67 73 2c 0a 42 4c 4f  rs, strings,.BLO
d330: 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e 0a 5e 53  Bs, or NULLs..^S
d340: 63 69 65 6e 74 69 66 69 63 20 6e 6f 74 61 74 69  cientific notati
d350: 6f 6e 20 69 73 20 73 75 70 70 6f 72 74 65 64 20  on is supported 
d360: 66 6f 72 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  for floating poi
d370: 6e 74 20 6c 69 74 65 72 61 6c 20 76 61 6c 75 65  nt literal value
d380: 73 2e 0a 5e 28 54 68 65 20 22 2e 22 20 63 68 61  s..^(The "." cha
d390: 72 61 63 74 65 72 20 69 73 20 61 6c 77 61 79 73  racter is always
d3a0: 20 75 73 65 64 20 0a 61 73 20 74 68 65 20 64 65   used .as the de
d3b0: 63 69 6d 61 6c 20 70 6f 69 6e 74 20 65 76 65 6e  cimal point even
d3c0: 20 69 66 20 74 68 65 20 6c 6f 63 61 6c 65 20 73   if the locale s
d3d0: 65 74 74 69 6e 67 20 73 70 65 63 69 66 69 65 73  etting specifies
d3e0: 20 22 2c 22 20 66 6f 72 0a 74 68 69 73 20 72 6f   "," for.this ro
d3f0: 6c 65 20 2d 20 74 68 65 20 75 73 65 20 6f 66 20  le - the use of 
d400: 22 2c 22 20 66 6f 72 20 74 68 65 20 64 65 63 69  "," for the deci
d410: 6d 61 6c 20 70 6f 69 6e 74 20 77 6f 75 6c 64 20  mal point would 
d420: 72 65 73 75 6c 74 20 69 6e 0a 73 79 6e 74 61 63  result in.syntac
d430: 74 69 63 20 61 6d 62 69 67 75 69 74 79 2e 29 5e  tic ambiguity.)^
d440: 20 20 5e 41 20 73 74 72 69 6e 67 20 63 6f 6e 73    ^A string cons
d450: 74 61 6e 74 20 69 73 20 66 6f 72 6d 65 64 20 62  tant is formed b
d460: 79 20 65 6e 63 6c 6f 73 69 6e 67 20 74 68 65 0a  y enclosing the.
d470: 73 74 72 69 6e 67 20 69 6e 20 73 69 6e 67 6c 65  string in single
d480: 20 71 75 6f 74 65 73 20 28 27 29 2e 20 20 5e 41   quotes (').  ^A
d490: 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 20 77 69   single quote wi
d4a0: 74 68 69 6e 20 74 68 65 20 73 74 72 69 6e 67 20  thin the string 
d4b0: 63 61 6e 0a 62 65 20 65 6e 63 6f 64 65 64 20 62  can.be encoded b
d4c0: 79 20 70 75 74 74 69 6e 67 20 74 77 6f 20 73 69  y putting two si
d4d0: 6e 67 6c 65 20 71 75 6f 74 65 73 20 69 6e 20 61  ngle quotes in a
d4e0: 20 72 6f 77 20 2d 20 61 73 20 69 6e 20 50 61 73   row - as in Pas
d4f0: 63 61 6c 2e 0a 43 2d 73 74 79 6c 65 20 65 73 63  cal..C-style esc
d500: 61 70 65 73 20 75 73 69 6e 67 20 74 68 65 20 62  apes using the b
d510: 61 63 6b 73 6c 61 73 68 20 63 68 61 72 61 63 74  ackslash charact
d520: 65 72 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f  er are not suppo
d530: 72 74 65 64 20 62 65 63 61 75 73 65 0a 74 68 65  rted because.the
d540: 79 20 61 72 65 20 6e 6f 74 20 73 74 61 6e 64 61  y are not standa
d550: 72 64 20 53 51 4c 2e 0a 5e 42 4c 4f 42 20 6c 69  rd SQL..^BLOB li
d560: 74 65 72 61 6c 73 20 61 72 65 20 73 74 72 69 6e  terals are strin
d570: 67 20 6c 69 74 65 72 61 6c 73 20 63 6f 6e 74 61  g literals conta
d580: 69 6e 69 6e 67 20 68 65 78 61 64 65 63 69 6d 61  ining hexadecima
d590: 6c 20 64 61 74 61 20 61 6e 64 0a 70 72 65 63 65  l data and.prece
d5a0: 64 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20  ded by a single 
d5b0: 22 78 22 20 6f 72 20 22 58 22 20 63 68 61 72 61  "x" or "X" chara
d5c0: 63 74 65 72 2e 20 20 5e 28 46 6f 72 20 65 78 61  cter.  ^(For exa
d5d0: 6d 70 6c 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  mple:</p>..<bloc
d5e0: 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 58 27 35  kquote><pre>.X'5
d5f0: 33 35 31 34 43 36 39 37 34 36 35 27 0a 3c 2f 70  3514C697465'.</p
d600: 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
d610: 29 5e 0a 0a 3c 70 3e 0a 5e 41 20 6c 69 74 65 72  )^..<p>.^A liter
d620: 61 6c 20 76 61 6c 75 65 20 63 61 6e 20 61 6c 73  al value can als
d630: 6f 20 62 65 20 74 68 65 20 74 6f 6b 65 6e 20 22  o be the token "
d640: 4e 55 4c 4c 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63  NULL"..</p>..<tc
d650: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61  l>hd_fragment va
d660: 72 70 61 72 61 6d 20 70 61 72 61 6d 65 74 65 72  rparam parameter
d670: 20 70 61 72 61 6d 65 74 65 72 73 20 7b 62 6f 75   parameters {bou
d680: 6e 64 20 70 61 72 61 6d 65 74 65 72 7d 20 7b 62  nd parameter} {b
d690: 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73 7d  ound parameters}
d6a0: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 50 61 72 61 6d  </tcl>.<h3>Param
d6b0: 65 74 65 72 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 41  eters</h3>.<p>.A
d6c0: 20 22 76 61 72 69 61 62 6c 65 22 20 6f 72 20 22   "variable" or "
d6d0: 70 61 72 61 6d 65 74 65 72 22 20 74 6f 6b 65 6e  parameter" token
d6e0: 0a 73 70 65 63 69 66 69 65 73 20 61 20 70 6c 61  .specifies a pla
d6f0: 63 65 68 6f 6c 64 65 72 20 69 6e 20 74 68 65 20  ceholder in the 
d700: 65 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 61  expression for a
d710: 20 6c 69 74 65 72 61 6c 0a 76 61 6c 75 65 20 74   literal.value t
d720: 68 61 74 20 69 73 20 66 69 6c 6c 65 64 20 69 6e  hat is filled in
d730: 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73 69 6e   at runtime usin
d740: 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f 62  g the.[sqlite3_b
d750: 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20 73 71 6c  ind_blob() | sql
d760: 69 74 65 33 5f 62 69 6e 64 28 29 5d 20 66 61 6d  ite3_bind()] fam
d770: 69 6c 79 20 6f 66 20 43 2f 43 2b 2b 20 69 6e 74  ily of C/C++ int
d780: 65 72 66 61 63 65 73 2e 0a 5e 28 50 61 72 61 6d  erfaces..^(Param
d790: 65 74 65 72 73 20 63 61 6e 20 74 61 6b 65 20 73  eters can take s
d7a0: 65 76 65 72 61 6c 20 66 6f 72 6d 73 3a 0a 3c 2f  everal forms:.</
d7b0: 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
d7c0: 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 0a 3c 74  .<table>.<tr>.<t
d7d0: 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20  d align="right" 
d7e0: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
d7f0: 3f 3c 2f 62 3e 3c 69 3e 4e 4e 4e 3c 2f 69 3e 3c  ?</b><i>NNN</i><
d800: 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32  /td><td width="2
d810: 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 41 20 71  0"></td>.<td>A q
d820: 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 66 6f 6c  uestion mark fol
d830: 6c 6f 77 65 64 20 62 79 20 61 20 6e 75 6d 62 65  lowed by a numbe
d840: 72 20 3c 69 3e 4e 4e 4e 3c 2f 69 3e 20 68 6f 6c  r <i>NNN</i> hol
d850: 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20 74 68  ds a spot for th
d860: 65 0a 4e 4e 4e 2d 74 68 20 70 61 72 61 6d 65 74  e.NNN-th paramet
d870: 65 72 2e 20 20 4e 4e 4e 20 6d 75 73 74 20 62 65  er.  NNN must be
d880: 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 5b   between 1 and [
d890: 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
d8a0: 42 4c 45 5f 4e 55 4d 42 45 52 5d 2e 3c 2f 74 64  BLE_NUMBER].</td
d8b0: 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64  >.</tr>.<tr>.<td
d8c0: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76   align="right" v
d8d0: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f  align="top"><b>?
d8e0: 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64  </b></td><td wid
d8f0: 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74  th="20"></td>.<t
d900: 64 3e 41 20 71 75 65 73 74 69 6f 6e 20 6d 61 72  d>A question mar
d910: 6b 20 74 68 61 74 20 69 73 20 6e 6f 74 20 66 6f  k that is not fo
d920: 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e 75 6d 62  llowed by a numb
d930: 65 72 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20  er holds a spot 
d940: 66 6f 72 0a 74 68 65 20 6e 65 78 74 20 75 6e 75  for.the next unu
d950: 73 65 64 20 70 61 72 61 6d 65 74 65 72 2e 3c 2f  sed parameter.</
d960: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c  td>.</tr>.<tr>.<
d970: 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  td align="right"
d980: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
d990: 3e 3a 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69  >:</b><i>AAAA</i
d9a0: 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d  ></td><td width=
d9b0: 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 41  "20"></td>.<td>A
d9c0: 20 63 6f 6c 6f 6e 20 66 6f 6c 6c 6f 77 65 64 20   colon followed 
d9d0: 62 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  by an identifier
d9e0: 20 6e 61 6d 65 20 68 6f 6c 64 73 20 61 20 73 70   name holds a sp
d9f0: 6f 74 20 66 6f 72 20 61 20 6e 61 6d 65 64 0a 70  ot for a named.p
da00: 61 72 61 6d 65 74 65 72 20 77 69 74 68 20 74 68  arameter with th
da10: 65 20 6e 61 6d 65 20 41 41 41 41 2e 20 20 4e 61  e name AAAA.  Na
da20: 6d 65 64 20 70 61 72 61 6d 65 74 65 72 73 20 61  med parameters a
da30: 72 65 20 61 6c 73 6f 20 6e 75 6d 62 65 72 65 64  re also numbered
da40: 2e 0a 54 68 65 20 6e 75 6d 62 65 72 20 61 73 73  ..The number ass
da50: 69 67 6e 65 64 20 69 73 20 74 68 65 20 6e 65 78  igned is the nex
da60: 74 20 75 6e 75 73 65 64 20 6e 75 6d 62 65 72 2e  t unused number.
da70: 20 20 54 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75    To avoid confu
da80: 73 69 6f 6e 2c 0a 69 74 20 69 73 20 62 65 73 74  sion,.it is best
da90: 20 74 6f 20 61 76 6f 69 64 20 6d 69 78 69 6e 67   to avoid mixing
daa0: 20 6e 61 6d 65 64 20 61 6e 64 20 6e 75 6d 62 65   named and numbe
dab0: 72 65 64 20 70 61 72 61 6d 65 74 65 72 73 2e 3c  red parameters.<
dac0: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a  /td>.</tr>.<tr>.
dad0: 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  <td align="right
dae0: 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  " valign="top"><
daf0: 62 3e 40 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f  b>@</b><i>AAAA</
db00: 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68  i></td><td width
db10: 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e  ="20"></td>.<td>
db20: 41 6e 20 22 61 74 22 20 73 69 67 6e 20 77 6f 72  An "at" sign wor
db30: 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20  ks exactly like 
db40: 61 20 63 6f 6c 6f 6e 2e 3c 2f 74 64 3e 0a 3c 2f  a colon.</td>.</
db50: 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  tr>.<tr>.<td ali
db60: 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67  gn="right" valig
db70: 6e 3d 22 74 6f 70 22 3e 3c 62 3e 24 3c 2f 62 3e  n="top"><b>$</b>
db80: 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e  <i>AAAA</i></td>
db90: 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c  <td width="20"><
dba0: 2f 74 64 3e 0a 3c 74 64 3e 41 20 64 6f 6c 6c 61  /td>.<td>A dolla
dbb0: 72 2d 73 69 67 6e 20 66 6f 6c 6c 6f 77 65 64 20  r-sign followed 
dbc0: 62 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  by an identifier
dbd0: 20 6e 61 6d 65 20 61 6c 73 6f 20 68 6f 6c 64 73   name also holds
dbe0: 20 61 20 73 70 6f 74 20 66 6f 72 20 61 20 6e 61   a spot for a na
dbf0: 6d 65 64 0a 70 61 72 61 6d 65 74 65 72 20 77 69  med.parameter wi
dc00: 74 68 20 74 68 65 20 6e 61 6d 65 20 41 41 41 41  th the name AAAA
dc10: 2e 20 20 54 68 65 20 69 64 65 6e 74 69 66 69 65  .  The identifie
dc20: 72 20 6e 61 6d 65 20 69 6e 20 74 68 69 73 20 63  r name in this c
dc30: 61 73 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 0a  ase can include.
dc40: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 63 63 75  one or more occu
dc50: 72 61 6e 63 65 73 20 6f 66 20 22 3a 3a 22 20 61  rances of "::" a
dc60: 6e 64 20 61 20 73 75 66 66 69 78 20 65 6e 63 6c  nd a suffix encl
dc70: 6f 73 65 64 20 69 6e 20 22 28 2e 2e 2e 29 22 20  osed in "(...)" 
dc80: 63 6f 6e 74 61 69 6e 69 6e 67 0a 61 6e 79 20 74  containing.any t
dc90: 65 78 74 20 61 74 20 61 6c 6c 2e 20 20 54 68 69  ext at all.  Thi
dca0: 73 20 73 79 6e 74 61 78 20 69 73 20 74 68 65 20  s syntax is the 
dcb0: 66 6f 72 6d 20 6f 66 20 61 20 76 61 72 69 61 62  form of a variab
dcc0: 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65 0a 5b  le name in the.[
dcd0: 68 74 74 70 3a 2f 2f 77 77 77 2e 74 63 6c 2e 74  http://www.tcl.t
dce0: 6b 2f 20 7c 20 54 63 6c 20 70 72 6f 67 72 61 6d  k/ | Tcl program
dcf0: 6d 69 6e 67 20 6c 61 6e 67 75 61 67 65 5d 2e 20  ming language]. 
dd00: 20 54 68 65 20 70 72 65 73 65 6e 63 65 0a 6f 66   The presence.of
dd10: 20 74 68 69 73 20 73 79 6e 74 61 78 20 72 65 73   this syntax res
dd20: 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 66 61  ults from the fa
dd30: 63 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 69  ct that SQLite i
dd40: 73 20 72 65 61 6c 6c 79 20 61 20 0a 5b 54 63 6c  s really a .[Tcl
dd50: 20 65 78 74 65 6e 73 69 6f 6e 5d 20 74 68 61 74   extension] that
dd60: 20 68 61 73 20 65 73 63 61 70 65 64 20 69 6e 74   has escaped int
dd70: 6f 20 74 68 65 20 77 69 6c 64 2e 3c 2f 74 64 3e  o the wild.</td>
dd80: 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a  .</tr>.</table>.
dd90: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
dda0: 0a 3c 70 3e 5e 50 61 72 61 6d 65 74 65 72 73 20  .<p>^Parameters 
ddb0: 74 68 61 74 20 61 72 65 20 6e 6f 74 20 61 73 73  that are not ass
ddc0: 69 67 6e 65 64 20 76 61 6c 75 65 73 20 75 73 69  igned values usi
ddd0: 6e 67 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64  ng.[sqlite3_bind
dde0: 5f 62 6c 6f 62 28 29 20 7c 20 73 71 6c 69 74 65  _blob() | sqlite
ddf0: 33 5f 62 69 6e 64 28 29 5d 20 61 72 65 20 74 72  3_bind()] are tr
de00: 65 61 74 65 64 0a 61 73 20 4e 55 4c 4c 2e 3c 2f  eated.as NULL.</
de10: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
de20: 6d 65 6e 74 20 6c 69 6b 65 20 4c 49 4b 45 20 45  ment like LIKE E
de30: 53 43 41 50 45 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  SCAPE</tcl>.<h3>
de40: 54 68 65 20 4c 49 4b 45 20 61 6e 64 20 47 4c 4f  The LIKE and GLO
de50: 42 20 6f 70 65 72 61 74 6f 72 73 3c 2f 68 33 3e  B operators</h3>
de60: 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b 45 20 6f 70  .<p>^The LIKE op
de70: 65 72 61 74 6f 72 20 64 6f 65 73 20 61 20 70 61  erator does a pa
de80: 74 74 65 72 6e 20 6d 61 74 63 68 69 6e 67 20 63  ttern matching c
de90: 6f 6d 70 61 72 69 73 6f 6e 2e 20 5e 54 68 65 20  omparison. ^The 
dea0: 6f 70 65 72 61 6e 64 0a 74 6f 20 74 68 65 20 72  operand.to the r
deb0: 69 67 68 74 20 6f 66 20 74 68 65 20 4c 49 4b 45  ight of the LIKE
dec0: 20 6f 70 65 72 61 74 6f 72 20 63 6f 6e 74 61 69   operator contai
ded0: 6e 73 20 74 68 65 20 70 61 74 74 65 72 6e 20 61  ns the pattern a
dee0: 6e 64 20 74 68 65 20 6c 65 66 74 20 68 61 6e 64  nd the left hand
def0: 0a 6f 70 65 72 61 6e 64 20 63 6f 6e 74 61 69 6e  .operand contain
df00: 73 20 74 68 65 20 73 74 72 69 6e 67 20 74 6f 20  s the string to 
df10: 6d 61 74 63 68 20 61 67 61 69 6e 73 74 20 74 68  match against th
df20: 65 20 70 61 74 74 65 72 6e 2e 0a 0a 3c 74 63 6c  e pattern...<tcl
df30: 3e 68 64 5f 70 75 74 73 20 22 5e 41 20 70 65 72  >hd_puts "^A per
df40: 63 65 6e 74 20 73 79 6d 62 6f 6c 20 28 5c 22 25  cent symbol (\"%
df50: 5c 22 29 20 69 6e 20 74 68 65 20 4c 49 4b 45 20  \") in the LIKE 
df60: 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73 20  pattern matches 
df70: 61 6e 79 0a 73 65 71 75 65 6e 63 65 20 6f 66 20  any.sequence of 
df80: 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 63 68 61  zero or more cha
df90: 72 61 63 74 65 72 73 20 69 6e 20 74 68 65 20 73  racters in the s
dfa0: 74 72 69 6e 67 2e 20 20 5e 41 6e 20 75 6e 64 65  tring.  ^An unde
dfb0: 72 73 63 6f 72 65 0a 28 5c 22 5f 5c 22 29 20 69  rscore.(\"_\") i
dfc0: 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74 65  n the LIKE patte
dfd0: 72 6e 20 6d 61 74 63 68 65 73 20 61 6e 79 20 73  rn matches any s
dfe0: 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 20  ingle character 
dff0: 69 6e 20 74 68 65 0a 73 74 72 69 6e 67 2e 20 20  in the.string.  
e000: 5e 28 41 6e 79 20 6f 74 68 65 72 20 63 68 61 72  ^(Any other char
e010: 61 63 74 65 72 20 6d 61 74 63 68 65 73 20 69 74  acter matches it
e020: 73 65 6c 66 20 6f 72 20 69 74 27 73 20 6c 6f 77  self or it's low
e030: 65 72 2f 75 70 70 65 72 20 63 61 73 65 0a 65 71  er/upper case.eq
e040: 75 69 76 61 6c 65 6e 74 20 28 69 2e 65 2e 20 63  uivalent (i.e. c
e050: 61 73 65 2d 69 6e 73 65 6e 73 69 74 69 76 65 20  ase-insensitive 
e060: 6d 61 74 63 68 69 6e 67 29 2e 29 5e 20 20 28 41  matching).)^  (A
e070: 20 62 75 67 3a 20 5e 53 51 4c 69 74 65 20 6f 6e   bug: ^SQLite on
e080: 6c 79 0a 75 6e 64 65 72 73 74 61 6e 64 73 20 75  ly.understands u
e090: 70 70 65 72 2f 6c 6f 77 65 72 20 63 61 73 65 20  pper/lower case 
e0a0: 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63  for ASCII charac
e0b0: 74 65 72 73 20 62 79 20 64 65 66 61 75 6c 74 2e  ters by default.
e0c0: 20 20 5e 54 68 65 0a 4c 49 4b 45 20 6f 70 65 72    ^The.LIKE oper
e0d0: 61 74 6f 72 20 69 73 20 62 79 20 64 65 66 61 75  ator is by defau
e0e0: 6c 74 20 63 61 73 65 20 73 65 6e 73 69 74 69 76  lt case sensitiv
e0f0: 65 20 66 6f 72 20 75 6e 69 63 6f 64 65 20 63 68  e for unicode ch
e100: 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 72  aracters that ar
e110: 65 0a 62 65 79 6f 6e 64 20 74 68 65 20 41 53 43  e.beyond the ASC
e120: 49 49 20 72 61 6e 67 65 2e 20 20 46 6f 72 20 65  II range.  For e
e130: 78 61 6d 70 6c 65 2c 0a 5e 74 68 65 20 65 78 70  xample,.^the exp
e140: 72 65 73 73 69 6f 6e 20 3c 62 3e 27 61 27 26 6e  ression <b>'a'&n
e150: 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 41  bsp;LIKE&nbsp;'A
e160: 27 3c 2f 62 3e 0a 69 73 20 54 52 55 45 20 62 75  '</b>.is TRUE bu
e170: 74 20 3c 62 3e 27 26 61 65 6c 69 67 3b 27 26 6e  t <b>'&aelig;'&n
e180: 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 26  bsp;LIKE&nbsp;'&
e190: 41 45 6c 69 67 3b 27 3c 2f 62 3e 20 69 73 20 46  AElig;'</b> is F
e1a0: 41 4c 53 45 2e 29 3c 2f 70 3e 22 3c 2f 74 63 6c  ALSE.)</p>"</tcl
e1b0: 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70  >..<p>^If the op
e1c0: 74 69 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c  tional ESCAPE cl
e1d0: 61 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c  ause is present,
e1e0: 20 74 68 65 6e 20 74 68 65 20 65 78 70 72 65 73   then the expres
e1f0: 73 69 6f 6e 0a 66 6f 6c 6c 6f 77 69 6e 67 20 74  sion.following t
e200: 68 65 20 45 53 43 41 50 45 20 6b 65 79 77 6f 72  he ESCAPE keywor
e210: 64 20 6d 75 73 74 20 65 76 61 6c 75 61 74 65 20  d must evaluate 
e220: 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 73  to a string cons
e230: 69 73 74 69 6e 67 20 6f 66 0a 61 20 73 69 6e 67  isting of.a sing
e240: 6c 65 20 63 68 61 72 61 63 74 65 72 2e 20 5e 54  le character. ^T
e250: 68 69 73 20 63 68 61 72 61 63 74 65 72 20 6d 61  his character ma
e260: 79 20 62 65 20 75 73 65 64 20 69 6e 20 74 68 65  y be used in the
e270: 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 0a 74 6f   LIKE pattern.to
e280: 20 69 6e 63 6c 75 64 65 20 6c 69 74 65 72 61 6c   include literal
e290: 20 70 65 72 63 65 6e 74 20 6f 72 20 75 6e 64 65   percent or unde
e2a0: 72 73 63 6f 72 65 20 63 68 61 72 61 63 74 65 72  rscore character
e2b0: 73 2e 20 5e 54 68 65 20 65 73 63 61 70 65 0a 63  s. ^The escape.c
e2c0: 68 61 72 61 63 74 65 72 20 66 6f 6c 6c 6f 77 65  haracter followe
e2d0: 64 20 62 79 20 61 20 70 65 72 63 65 6e 74 20 73  d by a percent s
e2e0: 79 6d 62 6f 6c 2c 20 75 6e 64 65 72 73 63 6f 72  ymbol, underscor
e2f0: 65 20 6f 72 20 69 74 73 65 6c 66 20 6d 61 74 63  e or itself matc
e300: 68 65 73 20 61 0a 6c 69 74 65 72 61 6c 20 70 65  hes a.literal pe
e310: 72 63 65 6e 74 20 73 79 6d 62 6f 6c 2c 20 75 6e  rcent symbol, un
e320: 64 65 72 73 63 6f 72 65 20 6f 72 20 65 73 63 61  derscore or esca
e330: 70 65 20 63 68 61 72 61 63 74 65 72 20 69 6e 20  pe character in 
e340: 74 68 65 20 73 74 72 69 6e 67 2c 0a 72 65 73 70  the string,.resp
e350: 65 63 74 69 76 65 6c 79 2e 0a 0a 3c 70 3e 5e 54  ectively...<p>^T
e360: 68 65 20 69 6e 66 69 78 20 4c 49 4b 45 20 6f 70  he infix LIKE op
e370: 65 72 61 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d  erator is implem
e380: 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67  ented by calling
e390: 20 74 68 65 0a 61 70 70 6c 69 63 61 74 69 6f 6e   the.application
e3a0: 2d 64 65 66 69 6e 65 64 20 53 51 4c 20 66 75 6e  -defined SQL fun
e3b0: 63 74 69 6f 6e 73 20 5b 6c 69 6b 65 28 3c 69 3e  ctions [like(<i>
e3c0: 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 5d  Y</i>,<i>X</i>)]
e3d0: 20 6f 72 0a 5b 6c 69 6b 65 28 3c 69 3e 59 3c 2f   or.[like(<i>Y</
e3e0: 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 5a  i>,<i>X</i>,<i>Z
e3f0: 3c 2f 69 3e 29 5d 3c 2f 61 3e 2e 3c 2f 70 3e 0a  </i>)]</a>.</p>.
e400: 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b 45 20 6f 70  .<p>^The LIKE op
e410: 65 72 61 74 6f 72 20 63 61 6e 20 62 65 20 6d 61  erator can be ma
e420: 64 65 20 63 61 73 65 20 73 65 6e 73 69 74 69 76  de case sensitiv
e430: 65 20 75 73 69 6e 67 20 74 68 65 0a 5b 63 61 73  e using the.[cas
e440: 65 5f 73 65 6e 73 69 74 69 76 65 5f 6c 69 6b 65  e_sensitive_like
e450: 20 70 72 61 67 6d 61 5d 2e 3c 2f 70 3e 0a 0a 3c   pragma].</p>..<
e460: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
e470: 67 6c 6f 62 20 47 4c 4f 42 3c 2f 74 63 6c 3e 0a  glob GLOB</tcl>.
e480: 3c 70 3e 5e 54 68 65 20 47 4c 4f 42 20 6f 70 65  <p>^The GLOB ope
e490: 72 61 74 6f 72 20 69 73 20 73 69 6d 69 6c 61 72  rator is similar
e4a0: 20 74 6f 20 4c 49 4b 45 20 62 75 74 20 75 73 65   to LIKE but use
e4b0: 73 20 74 68 65 20 55 6e 69 78 0a 66 69 6c 65 20  s the Unix.file 
e4c0: 67 6c 6f 62 62 69 6e 67 20 73 79 6e 74 61 78 20  globbing syntax 
e4d0: 66 6f 72 20 69 74 73 20 77 69 6c 64 63 61 72 64  for its wildcard
e4e0: 73 2e 20 20 5e 41 6c 73 6f 2c 20 47 4c 4f 42 20  s.  ^Also, GLOB 
e4f0: 69 73 20 63 61 73 65 0a 73 65 6e 73 69 74 69 76  is case.sensitiv
e500: 65 2c 20 75 6e 6c 69 6b 65 20 4c 49 4b 45 2e 20  e, unlike LIKE. 
e510: 20 5e 42 6f 74 68 20 47 4c 4f 42 20 61 6e 64 20   ^Both GLOB and 
e520: 4c 49 4b 45 20 6d 61 79 20 62 65 20 70 72 65 63  LIKE may be prec
e530: 65 64 65 64 20 62 79 0a 74 68 65 20 4e 4f 54 20  eded by.the NOT 
e540: 6b 65 79 77 6f 72 64 20 74 6f 20 69 6e 76 65 72  keyword to inver
e550: 74 20 74 68 65 20 73 65 6e 73 65 20 6f 66 20 74  t the sense of t
e560: 68 65 20 74 65 73 74 2e 20 20 5e 54 68 65 20 69  he test.  ^The i
e570: 6e 66 69 78 20 47 4c 4f 42 20 0a 6f 70 65 72 61  nfix GLOB .opera
e580: 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74  tor is implement
e590: 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68  ed by calling th
e5a0: 65 20 66 75 6e 63 74 69 6f 6e 0a 5b 67 6c 6f 62  e function.[glob
e5b0: 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f  (<i>Y</i>,<i>X</
e5c0: 69 3e 29 5d 20 61 6e 64 20 63 61 6e 20 62 65 20  i>)] and can be 
e5d0: 6d 6f 64 69 66 69 65 64 20 62 79 20 6f 76 65 72  modified by over
e5e0: 72 69 64 69 6e 67 0a 74 68 61 74 20 66 75 6e 63  riding.that func
e5f0: 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  tion.</p>..<tcl>
e600: 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65 67 65  hd_fragment rege
e610: 78 70 20 52 45 47 45 58 50 3c 2f 74 63 6c 3e 0a  xp REGEXP</tcl>.
e620: 3c 70 3e 5e 54 68 65 20 52 45 47 45 58 50 20 6f  <p>^The REGEXP o
e630: 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 70 65  perator is a spe
e640: 63 69 61 6c 20 73 79 6e 74 61 78 20 66 6f 72 20  cial syntax for 
e650: 74 68 65 20 72 65 67 65 78 70 28 29 0a 75 73 65  the regexp().use
e660: 72 20 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 4e 6f  r function.  ^No
e670: 20 72 65 67 65 78 70 28 29 20 75 73 65 72 20 66   regexp() user f
e680: 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e  unction is defin
e690: 65 64 20 62 79 20 64 65 66 61 75 6c 74 0a 61 6e  ed by default.an
e6a0: 64 20 73 6f 20 75 73 65 20 6f 66 20 74 68 65 20  d so use of the 
e6b0: 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72 20  REGEXP operator 
e6c0: 77 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20 72 65  will normally re
e6d0: 73 75 6c 74 20 69 6e 20 61 6e 0a 65 72 72 6f 72  sult in an.error
e6e0: 20 6d 65 73 73 61 67 65 2e 20 20 5e 49 66 20 61   message.  ^If a
e6f0: 20 5b 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65   [application-de
e700: 66 69 6e 65 64 20 53 51 4c 20 66 75 6e 63 74 69  fined SQL functi
e710: 6f 6e 5d 20 6e 61 6d 65 64 20 22 72 65 67 65 78  on] named "regex
e720: 70 22 0a 69 73 20 61 64 64 65 64 20 61 74 20 72  p".is added at r
e730: 75 6e 2d 74 69 6d 65 2c 20 74 68 61 74 20 66 75  un-time, that fu
e740: 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 63  nction will be c
e750: 61 6c 6c 65 64 20 69 6e 20 6f 72 64 65 72 0a 74  alled in order.t
e760: 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20  o implement the 
e770: 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72 2e  REGEXP operator.
e780: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
e790: 61 67 6d 65 6e 74 20 6d 61 74 63 68 20 4d 41 54  agment match MAT
e7a0: 43 48 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65  CH</tcl>.<p>^The
e7b0: 20 4d 41 54 43 48 20 6f 70 65 72 61 74 6f 72 20   MATCH operator 
e7c0: 69 73 20 61 20 73 70 65 63 69 61 6c 20 73 79 6e  is a special syn
e7d0: 74 61 78 20 66 6f 72 20 74 68 65 20 6d 61 74 63  tax for the matc
e7e0: 68 28 29 0a 61 70 70 6c 69 63 61 74 69 6f 6e 2d  h().application-
e7f0: 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e  defined function
e800: 2e 20 20 5e 54 68 65 20 64 65 66 61 75 6c 74 20  .  ^The default 
e810: 6d 61 74 63 68 28 29 20 66 75 6e 63 74 69 6f 6e  match() function
e820: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a   implementation.
e830: 72 61 69 73 65 73 20 61 6e 20 65 78 63 65 70 74  raises an except
e840: 69 6f 6e 20 61 6e 64 20 69 73 20 6e 6f 74 20 72  ion and is not r
e850: 65 61 6c 6c 79 20 75 73 65 66 75 6c 20 66 6f 72  eally useful for
e860: 20 61 6e 79 74 68 69 6e 67 2e 0a 5e 42 75 74 20   anything..^But 
e870: 65 78 74 65 6e 73 69 6f 6e 73 20 63 61 6e 20 6f  extensions can o
e880: 76 65 72 72 69 64 65 20 74 68 65 20 6d 61 74 63  verride the matc
e890: 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  h() function wit
e8a0: 68 20 6d 6f 72 65 0a 68 65 6c 70 66 75 6c 20 6c  h more.helpful l
e8b0: 6f 67 69 63 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  ogic.</p>..<tcl>
e8c0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 62 65 74 77  hd_fragment betw
e8d0: 65 65 6e 20 42 45 54 57 45 45 4e 3c 2f 74 63 6c  een BETWEEN</tcl
e8e0: 3e 0a 3c 68 33 3e 54 68 65 20 42 45 54 57 45 45  >.<h3>The BETWEE
e8f0: 4e 20 6f 70 65 72 61 74 6f 72 3c 2f 68 33 3e 0a  N operator</h3>.
e900: 3c 70 3e 5e 28 54 68 65 20 42 45 54 57 45 45 4e  <p>^(The BETWEEN
e910: 20 6f 70 65 72 61 74 6f 72 20 69 73 20 65 71 75   operator is equ
e920: 69 76 61 6c 65 6e 74 20 74 6f 20 61 20 70 61 69  ivalent to a pai
e930: 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 73  r of comparisons
e940: 2e 0a 22 3c 69 3e 61 3c 2f 69 3e 20 3c 62 3e 42  .."<i>a</i> <b>B
e950: 45 54 57 45 45 4e 3c 2f 62 3e 20 3c 69 3e 62 3c  ETWEEN</b> <i>b<
e960: 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62 3e 20 3c  /i> <b>AND</b> <
e970: 69 3e 63 3c 2f 69 3e 22 20 69 73 20 0a 65 71 75  i>c</i>" is .equ
e980: 69 76 61 6c 65 6e 74 20 74 6f 20 0a 22 3c 69 3e  ivalent to ."<i>
e990: 61 3c 2f 69 3e 3c 62 3e 26 67 74 3b 3d 3c 2f 62  a</i><b>&gt;=</b
e9a0: 3e 3c 69 3e 62 3c 2f 69 3e 20 3c 62 3e 41 4e 44  ><i>b</i> <b>AND
e9b0: 3c 2f 62 3e 20 3c 69 3e 61 3c 2f 69 3e 3c 62 3e  </b> <i>a</i><b>
e9c0: 26 6c 74 3b 3d 3c 2f 62 3e 3c 69 3e 63 3c 2f 69  &lt;=</b><i>c</i
e9d0: 3e 22 2e 29 5e 0a 5e 54 68 65 20 70 72 65 63 65  >".)^.^The prece
e9e0: 64 65 6e 63 65 20 6f 66 20 74 68 65 20 42 45 54  dence of the BET
e9f0: 57 45 45 4e 20 6f 70 65 72 61 74 6f 72 20 69 73  WEEN operator is
ea00: 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65   the same as the
ea10: 20 70 72 65 63 65 64 65 6e 63 65 0a 61 73 20 6f   precedence.as o
ea20: 70 65 72 61 74 6f 72 73 20 3c 62 3e 3d 3d 3c 2f  perators <b>==</
ea30: 62 3e 20 61 6e 64 20 3c 62 3e 21 3d 3c 2f 62 3e  b> and <b>!=</b>
ea40: 20 61 6e 64 20 3c 62 3e 4c 49 4b 45 3c 2f 62 3e   and <b>LIKE</b>
ea50: 20 61 6e 64 20 67 72 6f 75 70 73 20 6c 65 66 74   and groups left
ea60: 20 74 6f 20 72 69 67 68 74 2e 0a 0a 3c 74 63 6c   to right...<tcl
ea70: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 61 73  >hd_fragment cas
ea80: 65 20 7b 43 41 53 45 20 65 78 70 72 65 73 73 69  e {CASE expressi
ea90: 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  on}</tcl>.<h3>Th
eaa0: 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  e CASE expressio
eab0: 6e 3c 2f 68 33 3e 0a 3c 70 3e 41 20 43 41 53 45  n</h3>.<p>A CASE
eac0: 20 65 78 70 72 65 73 73 69 6f 6e 20 73 65 72 76   expression serv
ead0: 65 73 20 61 20 72 6f 6c 65 20 73 69 6d 69 6c 61  es a role simila
eae0: 72 20 74 6f 20 49 46 2d 54 48 45 4e 2d 45 4c 53  r to IF-THEN-ELS
eaf0: 45 20 69 6e 20 6f 74 68 65 72 0a 70 72 6f 67 72  E in other.progr
eb00: 61 6d 6d 69 6e 67 20 6c 61 6e 67 75 61 67 65 73  amming languages
eb10: 2e 20 20 5e 57 48 45 4e 20 65 78 70 72 65 73 73  .  ^WHEN express
eb20: 69 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74  ions are evaluat
eb30: 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 0a  ed from left to.
eb40: 72 69 67 68 74 20 75 6e 74 69 6c 20 6f 6e 65 20  right until one 
eb50: 69 73 20 66 6f 75 6e 64 20 74 68 61 74 20 69 73  is found that is
eb60: 20 74 72 75 65 20 61 6e 64 20 74 68 65 20 63 6f   true and the co
eb70: 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 48 45 4e  rresponding THEN
eb80: 20 74 65 72 6d 0a 62 65 63 6f 6d 65 73 20 74 68   term.becomes th
eb90: 65 20 72 65 73 75 6c 74 2e 20 20 5e 49 66 20 6e  e result.  ^If n
eba0: 6f 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f  o WHEN expressio
ebb0: 6e 20 69 73 20 74 72 75 65 20 74 68 65 6e 20 74  n is true then t
ebc0: 68 65 20 45 4c 53 45 20 0a 63 6c 61 75 73 65 20  he ELSE .clause 
ebd0: 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 72  determines the r
ebe0: 65 73 75 6c 74 20 6f 72 20 74 68 65 20 72 65 73  esult or the res
ebf0: 75 6c 74 20 69 73 20 4e 55 4c 4c 20 69 66 20 74  ult is NULL if t
ec00: 68 65 72 65 20 69 73 20 6e 6f 20 45 4c 53 45 20  here is no ELSE 
ec10: 63 6c 61 73 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  clase..</p>..<p>
ec20: 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 65 78 70  The optional exp
ec30: 72 65 73 73 69 6f 6e 20 74 68 61 74 20 6f 63 63  ression that occ
ec40: 75 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20 74  urs in between t
ec50: 68 65 20 43 41 53 45 20 6b 65 79 77 6f 72 64 20  he CASE keyword 
ec60: 61 6e 64 20 74 68 65 0a 66 69 72 73 74 20 57 48  and the.first WH
ec70: 45 4e 20 6b 65 79 77 6f 72 64 20 69 73 20 74 68  EN keyword is th
ec80: 65 20 22 62 61 73 65 22 20 65 78 70 72 65 73 73  e "base" express
ec90: 69 6f 6e 2e 20 20 5e 54 68 65 72 65 20 61 72 65  ion.  ^There are
eca0: 20 74 77 6f 20 62 61 73 69 63 20 66 6f 72 6d 73   two basic forms
ecb0: 0a 6f 66 20 61 20 43 41 53 45 20 65 78 70 72 65  .of a CASE expre
ecc0: 73 73 69 6f 6e 3a 20 74 68 6f 73 65 20 77 69 74  ssion: those wit
ecd0: 68 20 61 6e 64 20 77 69 74 68 6f 75 74 20 61 20  h and without a 
ece0: 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2e  base expression.
ecf0: 0a 5e 49 6e 20 61 20 43 41 53 45 20 77 69 74 68  .^In a CASE with
ed00: 6f 75 74 20 61 20 62 61 73 65 20 65 78 70 72 65  out a base expre
ed10: 73 73 69 6f 6e 2c 20 65 61 63 68 20 57 48 45 4e  ssion, each WHEN
ed20: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65   expression is e
ed30: 76 61 6c 75 74 65 64 0a 61 73 20 61 20 62 6f 6f  valuted.as a boo
ed40: 6c 65 61 6e 20 61 6e 64 20 74 68 65 20 6f 76 65  lean and the ove
ed50: 72 61 6c 6c 20 72 65 73 75 6c 74 20 69 73 20 64  rall result is d
ed60: 65 74 65 72 6d 69 6e 65 64 20 62 79 20 66 69 72  etermined by fir
ed70: 73 74 20 57 48 45 4e 20 65 78 70 72 65 73 73 69  st WHEN expressi
ed80: 6f 6e 0a 74 68 61 74 20 69 73 20 74 72 75 65 2e  on.that is true.
ed90: 0a 5e 49 6e 20 61 20 43 41 53 45 20 77 69 74 68  .^In a CASE with
eda0: 20 61 20 62 61 73 65 20 65 78 70 72 65 73 73 69   a base expressi
edb0: 6f 6e 2c 20 74 68 65 20 62 61 73 65 20 65 78 70  on, the base exp
edc0: 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75  ression is evalu
edd0: 74 65 64 20 6a 75 73 74 0a 6f 6e 63 65 20 61 6e  ted just.once an
ede0: 64 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  d the result is 
edf0: 63 6f 6d 70 61 72 65 64 20 61 67 61 69 6e 73 74  compared against
ee00: 20 65 61 63 68 20 57 48 45 4e 20 65 78 70 72 65   each WHEN expre
ee10: 73 73 69 6f 6e 20 75 6e 74 69 6c 20 61 20 0a 6d  ssion until a .m
ee20: 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2e 0a 5e  atch is found..^
ee30: 57 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 61  When comparing a
ee40: 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e   base expression
ee50: 20 61 67 61 69 6e 73 74 20 61 20 57 48 45 4e 20   against a WHEN 
ee60: 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20  expression, the 
ee70: 73 61 6d 65 0a 63 6f 6c 6c 61 74 69 6e 67 20 73  same.collating s
ee80: 65 71 75 65 6e 63 65 2c 20 61 66 66 69 6e 69 74  equence, affinit
ee90: 79 2c 20 61 6e 64 20 4e 55 4c 4c 2d 68 61 6e 64  y, and NULL-hand
eea0: 6c 69 6e 67 20 72 75 6c 65 73 20 61 70 70 6c 79  ling rules apply
eeb0: 20 61 73 20 69 66 20 74 68 65 0a 62 61 73 65 20   as if the.base 
eec0: 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 57  expression and W
eed0: 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 61  HEN expression a
eee0: 72 65 20 72 65 73 70 65 63 74 69 76 65 6c 79 20  re respectively 
eef0: 74 68 65 20 6c 65 66 74 2d 20 61 6e 64 0a 72 69  the left- and.ri
ef00: 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64  ght-hand operand
ef10: 73 20 6f 66 20 61 6e 20 3c 62 69 67 3e 3c 62 3e  s of an <big><b>
ef20: 3d 3c 2f 62 3e 3c 2f 62 69 67 3e 20 6f 70 65 72  =</b></big> oper
ef30: 61 74 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28  ator.</p>..<p>^(
ef40: 41 73 73 75 6d 69 6e 67 20 74 68 65 20 73 75 62  Assuming the sub
ef50: 65 78 70 72 65 73 73 69 6f 6e 73 20 68 61 76 65  expressions have
ef60: 20 6e 6f 20 73 69 64 65 2d 65 66 66 65 63 74 73   no side-effects
ef70: 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  , the following.
ef80: 74 77 6f 20 65 78 70 72 65 73 73 69 6f 6e 73 20  two expressions 
ef90: 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74 3a 3c  are equivalent:<
efa0: 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 43 41  /p>..<ul>.<li>CA
efb0: 53 45 20 78 20 57 48 45 4e 20 77 31 20 54 48 45  SE x WHEN w1 THE
efc0: 4e 20 72 31 20 57 48 45 4e 20 77 32 20 54 48 45  N r1 WHEN w2 THE
efd0: 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45 4e 44  N r2 ELSE r3 END
efe0: 0a 3c 6c 69 3e 43 41 53 45 20 57 48 45 4e 20 78  .<li>CASE WHEN x
eff0: 3d 77 31 20 54 48 45 4e 20 72 31 20 57 48 45 4e  =w1 THEN r1 WHEN
f000: 20 78 3d 77 32 20 54 48 45 4e 20 72 32 20 45 4c   x=w2 THEN r2 EL
f010: 53 45 20 72 33 20 45 4e 44 0a 3c 2f 75 6c 3e 29  SE r3 END.</ul>)
f020: 5e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 6e 6c 79 20  ^..<p>^The only 
f030: 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
f040: 65 6e 20 74 68 65 20 74 77 6f 20 43 41 53 45 20  en the two CASE 
f050: 65 78 70 72 65 73 73 69 6f 6e 73 20 73 68 6f 77  expressions show
f060: 6e 20 61 62 6f 76 65 0a 69 73 20 74 68 61 74 20  n above.is that 
f070: 74 68 65 20 3c 69 3e 78 3c 2f 69 3e 20 65 78 70  the <i>x</i> exp
f080: 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75  ression is evalu
f090: 61 74 65 64 0a 65 78 61 63 74 6c 79 20 6f 6e 63  ated.exactly onc
f0a0: 65 20 69 6e 20 74 68 65 20 66 69 72 73 74 20 65  e in the first e
f0b0: 78 61 6d 70 6c 65 20 62 75 74 20 6d 69 67 68 74  xample but might
f0c0: 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 6d 75   be evaluated mu
f0d0: 6c 74 69 70 6c 65 20 74 69 6d 65 73 0a 69 6e 20  ltiple times.in 
f0e0: 74 68 65 20 73 65 63 6f 6e 64 2e 3c 2f 70 3e 0a  the second.</p>.
f0f0: 0a 3c 70 3e 5e 41 20 4e 55 4c 4c 20 72 65 73 75  .<p>^A NULL resu
f100: 6c 74 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  lt is considered
f110: 20 66 61 6c 73 65 20 77 68 65 6e 20 65 76 61 6c   false when eval
f120: 75 61 74 69 6e 67 20 57 48 45 4e 20 74 65 72 6d  uating WHEN term
f130: 73 2e 0a 5e 49 66 20 74 68 65 20 62 61 73 65 20  s..^If the base 
f140: 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 4e 55  expression is NU
f150: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
f160: 6c 74 20 6f 66 20 74 68 65 20 43 41 53 45 20 69  lt of the CASE i
f170: 73 20 74 68 65 0a 72 65 73 75 6c 74 20 6f 66 20  s the.result of 
f180: 74 68 65 20 45 4c 53 45 20 65 78 70 72 65 73 73  the ELSE express
f190: 69 6f 6e 20 69 66 20 69 74 20 65 78 69 73 74 73  ion if it exists
f1a0: 2c 20 6f 72 20 4e 55 4c 4c 20 69 66 20 74 68 65  , or NULL if the
f1b0: 20 45 4c 53 45 20 63 6c 61 75 73 65 0a 69 73 20   ELSE clause.is 
f1c0: 6f 6d 69 74 74 65 64 2e 3c 2f 70 3e 0a 0a 0a 3c  omitted.</p>...<
f1d0: 68 33 3e 54 61 62 6c 65 20 43 6f 6c 75 6d 6e 20  h3>Table Column 
f1e0: 4e 61 6d 65 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 41  Names</h3>.<p>^A
f1f0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 6e   column name can
f200: 20 62 65 20 61 6e 79 20 6f 66 20 74 68 65 20 6e   be any of the n
f210: 61 6d 65 73 20 64 65 66 69 6e 65 64 20 69 6e 20  ames defined in 
f220: 74 68 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c  the [CREATE TABL
f230: 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20 6f 72 20  E].statement or 
f240: 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  one of the follo
f250: 77 69 6e 67 20 73 70 65 63 69 61 6c 20 69 64 65  wing special ide
f260: 6e 74 69 66 69 65 72 73 3a 20 22 3c 62 3e 52 4f  ntifiers: "<b>RO
f270: 57 49 44 3c 2f 62 3e 22 2c 0a 22 3c 62 3e 4f 49  WID</b>",."<b>OI
f280: 44 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c 62 3e 5f  D</b>", or "<b>_
f290: 52 4f 57 49 44 5f 3c 2f 62 3e 22 2e 0a 5e 54 68  ROWID_</b>"..^Th
f2a0: 65 73 65 20 73 70 65 63 69 61 6c 20 69 64 65 6e  ese special iden
f2b0: 74 69 66 69 65 72 73 20 61 6c 6c 20 64 65 73 63  tifiers all desc
f2c0: 72 69 62 65 20 74 68 65 0a 75 6e 69 71 75 65 20  ribe the.unique 
f2d0: 69 6e 74 65 67 65 72 20 6b 65 79 20 28 74 68 65  integer key (the
f2e0: 20 5b 72 6f 77 69 64 5d 29 20 61 73 73 6f 63 69   [rowid]) associ
f2f0: 61 74 65 64 20 77 69 74 68 20 65 76 65 72 79 20  ated with every 
f300: 0a 72 6f 77 20 6f 66 20 65 76 65 72 79 20 74 61  .row of every ta
f310: 62 6c 65 2e 0a 5e 54 68 65 20 73 70 65 63 69 61  ble..^The specia
f320: 6c 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e  l identifiers on
f330: 6c 79 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ly refer to the 
f340: 72 6f 77 20 6b 65 79 20 69 66 20 74 68 65 20 5b  row key if the [
f350: 43 52 45 41 54 45 20 54 41 42 4c 45 5d 0a 73 74  CREATE TABLE].st
f360: 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74  atement does not
f370: 20 64 65 66 69 6e 65 20 61 20 72 65 61 6c 20 63   define a real c
f380: 6f 6c 75 6d 6e 20 77 69 74 68 20 74 68 65 20 73  olumn with the s
f390: 61 6d 65 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 72  ame name..^The r
f3a0: 6f 77 69 64 20 63 61 6e 20 62 65 20 75 73 65 64  owid can be used
f3b0: 20 61 6e 79 77 68 65 72 65 20 61 20 72 65 67 75   anywhere a regu
f3c0: 6c 61 72 0a 63 6f 6c 75 6d 6e 20 63 61 6e 20 62  lar.column can b
f3d0: 65 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33  e used.</p>..<h3
f3e0: 3e 53 75 62 71 75 65 72 69 65 73 3c 2f 68 33 3e  >Subqueries</h3>
f3f0: 0a 3c 70 3e 5e 5b 53 45 4c 45 43 54 5d 20 73 74  .<p>^[SELECT] st
f400: 61 74 65 6d 65 6e 74 73 20 63 61 6e 20 61 70 70  atements can app
f410: 65 61 72 20 69 6e 20 65 78 70 72 65 73 73 69 6f  ear in expressio
f420: 6e 73 20 61 73 20 65 69 74 68 65 72 20 74 68 65  ns as either the
f430: 0a 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72  .right-hand oper
f440: 61 6e 64 20 6f 66 20 74 68 65 20 49 4e 20 6f 70  and of the IN op
f450: 65 72 61 74 6f 72 2c 20 61 73 20 61 20 73 63 61  erator, as a sca
f460: 6c 61 72 20 71 75 61 6e 74 69 74 79 2c 20 6f 72  lar quantity, or
f470: 0a 61 73 20 74 68 65 20 6f 70 65 72 61 6e 64 20  .as the operand 
f480: 6f 66 20 61 6e 20 45 58 49 53 54 53 20 6f 70 65  of an EXISTS ope
f490: 72 61 74 6f 72 2e 0a 5e 41 73 20 61 20 73 63 61  rator..^As a sca
f4a0: 6c 61 72 20 71 75 61 6e 74 69 74 79 20 6f 72 20  lar quantity or 
f4b0: 74 68 65 20 6f 70 65 72 61 6e 64 20 6f 66 20 61  the operand of a
f4c0: 6e 20 49 4e 20 6f 70 65 72 61 74 6f 72 2c 0a 74  n IN operator,.t
f4d0: 68 65 20 53 45 4c 45 43 54 20 73 68 6f 75 6c 64  he SELECT should
f4e0: 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 73 69 6e   have only a sin
f4f0: 67 6c 65 20 63 6f 6c 75 6d 6e 20 69 6e 20 69 74  gle column in it
f500: 73 0a 72 65 73 75 6c 74 2e 20 20 5e 43 6f 6d 70  s.result.  ^Comp
f510: 6f 75 6e 64 20 53 45 4c 45 43 54 73 20 28 63 6f  ound SELECTs (co
f520: 6e 6e 65 63 74 65 64 20 77 69 74 68 20 6b 65 79  nnected with key
f530: 77 6f 72 64 73 20 6c 69 6b 65 20 55 4e 49 4f 4e  words like UNION
f540: 20 6f 72 0a 45 58 43 45 50 54 29 20 61 72 65 20   or.EXCEPT) are 
f550: 61 6c 6c 6f 77 65 64 2e 0a 5e 57 69 74 68 20 74  allowed..^With t
f560: 68 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74  he EXISTS operat
f570: 6f 72 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20  or, the columns 
f580: 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  in the result se
f590: 74 20 6f 66 20 74 68 65 20 5b 53 45 4c 45 43 54  t of the [SELECT
f5a0: 5d 20 61 72 65 0a 69 67 6e 6f 72 65 64 20 61 6e  ] are.ignored an
f5b0: 64 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  d the expression
f5c0: 20 72 65 74 75 72 6e 73 20 54 52 55 45 20 69 66   returns TRUE if
f5d0: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 6f 77   one or more row
f5e0: 73 20 65 78 69 73 74 0a 61 6e 64 20 46 41 4c 53  s exist.and FALS
f5f0: 45 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  E if the result 
f600: 73 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 5e 49  set is empty..^I
f610: 66 20 6e 6f 20 74 65 72 6d 73 20 69 6e 20 74 68  f no terms in th
f620: 65 20 5b 53 45 4c 45 43 54 5d 20 65 78 70 72 65  e [SELECT] expre
f630: 73 73 69 6f 6e 20 72 65 66 65 72 20 74 6f 20 76  ssion refer to v
f640: 61 6c 75 65 73 20 69 6e 20 74 68 65 20 63 6f 6e  alues in the con
f650: 74 61 69 6e 69 6e 67 0a 71 75 65 72 79 2c 20 74  taining.query, t
f660: 68 65 6e 20 74 68 65 20 65 78 70 72 65 73 73 69  hen the expressi
f670: 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  on is evaluated 
f680: 6f 6e 63 65 20 70 72 69 6f 72 20 74 6f 20 61 6e  once prior to an
f690: 79 20 6f 74 68 65 72 0a 70 72 6f 63 65 73 73 69  y other.processi
f6a0: 6e 67 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c  ng and the resul
f6b0: 74 20 69 73 20 72 65 75 73 65 64 20 61 73 20 6e  t is reused as n
f6c0: 65 63 65 73 73 61 72 79 2e 20 20 5e 49 66 20 74  ecessary.  ^If t
f6d0: 68 65 20 5b 53 45 4c 45 43 54 5d 20 65 78 70 72  he [SELECT] expr
f6e0: 65 73 73 69 6f 6e 0a 64 6f 65 73 20 63 6f 6e 74  ession.does cont
f6f0: 61 69 6e 20 76 61 72 69 61 62 6c 65 73 20 66 72  ain variables fr
f700: 6f 6d 20 74 68 65 20 6f 75 74 65 72 20 71 75 65  om the outer que
f710: 72 79 2c 20 74 68 65 6e 20 74 68 65 20 5b 53 45  ry, then the [SE
f720: 4c 45 43 54 5d 20 69 73 20 72 65 65 76 61 6c 75  LECT] is reevalu
f730: 61 74 65 64 0a 65 76 65 72 79 20 74 69 6d 65 20  ated.every time 
f740: 69 74 20 69 73 20 6e 65 65 64 65 64 2e 3c 2f 70  it is needed.</p
f750: 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 61 20 53 45  >..<p>^When a SE
f760: 4c 45 43 54 20 69 73 20 74 68 65 20 72 69 67 68  LECT is the righ
f770: 74 20 6f 70 65 72 61 6e 64 20 6f 66 20 74 68 65  t operand of the
f780: 20 49 4e 20 6f 70 65 72 61 74 6f 72 2c 20 74 68   IN operator, th
f790: 65 20 49 4e 0a 6f 70 65 72 61 74 6f 72 20 72 65  e IN.operator re
f7a0: 74 75 72 6e 73 20 54 52 55 45 20 69 66 20 74 68  turns TRUE if th
f7b0: 65 20 53 45 4c 45 43 54 20 72 65 73 75 6c 74 20  e SELECT result 
f7c0: 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 4e 55 4c 4c  contains no NULL
f7d0: 73 20 61 6e 64 20 69 66 0a 74 68 65 20 6c 65 66  s and if.the lef
f7e0: 74 20 6f 70 65 72 61 6e 64 20 6d 61 74 63 68 65  t operand matche
f7f0: 73 20 61 6e 79 20 6f 66 20 74 68 65 20 76 61 6c  s any of the val
f800: 75 65 73 20 69 6e 20 74 68 65 20 53 45 4c 45 43  ues in the SELEC
f810: 54 20 72 65 73 75 6c 74 2e 0a 5e 54 68 65 20 49  T result..^The I
f820: 4e 20 6f 70 65 72 61 74 6f 72 20 6d 61 79 20 62  N operator may b
f830: 65 20 70 72 65 63 65 64 65 64 0a 62 79 20 74 68  e preceded.by th
f840: 65 20 4e 4f 54 20 6b 65 79 77 6f 72 64 20 74 6f  e NOT keyword to
f850: 20 69 6e 76 65 72 74 20 74 68 65 20 73 65 6e 73   invert the sens
f860: 65 20 6f 66 20 74 68 65 20 74 65 73 74 2e 3c 2f  e of the test.</
f870: 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 61 20 53  p>..<p>^When a S
f880: 45 4c 45 43 54 20 61 70 70 65 61 72 73 20 77 69  ELECT appears wi
f890: 74 68 69 6e 20 61 6e 20 65 78 70 72 65 73 73 69  thin an expressi
f8a0: 6f 6e 20 62 75 74 20 69 73 20 6e 6f 74 20 74 68  on but is not th
f8b0: 65 20 72 69 67 68 74 0a 6f 70 65 72 61 6e 64 20  e right.operand 
f8c0: 6f 66 20 61 6e 20 49 4e 20 6f 70 65 72 61 74 6f  of an IN operato
f8d0: 72 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72 73  r, then the firs
f8e0: 74 20 72 6f 77 20 6f 66 20 74 68 65 20 72 65 73  t row of the res
f8f0: 75 6c 74 20 6f 66 20 74 68 65 0a 53 45 4c 45 43  ult of the.SELEC
f900: 54 20 62 65 63 6f 6d 65 73 20 74 68 65 20 76 61  T becomes the va
f910: 6c 75 65 20 75 73 65 64 20 69 6e 20 74 68 65 20  lue used in the 
f920: 65 78 70 72 65 73 73 69 6f 6e 2e 20 20 5e 49 66  expression.  ^If
f930: 20 74 68 65 20 53 45 4c 45 43 54 20 79 69 65 6c   the SELECT yiel
f940: 64 73 0a 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  ds.more than one
f950: 20 72 65 73 75 6c 74 20 72 6f 77 2c 20 61 6c 6c   result row, all
f960: 20 72 6f 77 73 20 61 66 74 65 72 20 74 68 65 20   rows after the 
f970: 66 69 72 73 74 20 61 72 65 20 69 67 6e 6f 72 65  first are ignore
f980: 64 2e 20 20 5e 49 66 0a 74 68 65 20 53 45 4c 45  d.  ^If.the SELE
f990: 43 54 20 79 69 65 6c 64 73 20 6e 6f 20 72 6f 77  CT yields no row
f9a0: 73 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  s, then the valu
f9b0: 65 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20  e of the SELECT 
f9c0: 69 73 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 68  is NULL.</p>..<h
f9d0: 33 3e 43 41 53 54 20 65 78 70 72 65 73 73 69 6f  3>CAST expressio
f9e0: 6e 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 41 20 43 41  ns</h3>.<p>^A CA
f9f0: 53 54 20 65 78 70 72 65 73 73 69 6f 6e 20 63 68  ST expression ch
fa00: 61 6e 67 65 73 20 74 68 65 20 5b 64 61 74 61 74  anges the [datat
fa10: 79 70 65 5d 20 6f 66 20 74 68 65 20 3c 65 78 70  ype] of the <exp
fa20: 72 3e 20 69 6e 74 6f 20 74 68 65 0a 74 79 70 65  r> into the.type
fa30: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 26 6c   specified by &l
fa40: 74 3b 74 79 70 65 26 67 74 3b 2e 20 0a 5e 28 26  t;type&gt;. .^(&
fa50: 6c 74 3b 74 79 70 65 26 67 74 3b 20 63 61 6e 20  lt;type&gt; can 
fa60: 62 65 20 61 6e 79 20 6e 6f 6e 2d 65 6d 70 74 79  be any non-empty
fa70: 20 74 79 70 65 20 6e 61 6d 65 20 74 68 61 74 20   type name that 
fa80: 69 73 20 76 61 6c 69 64 0a 66 6f 72 20 74 68 65  is valid.for the
fa90: 20 74 79 70 65 20 69 6e 20 61 20 63 6f 6c 75 6d   type in a colum
faa0: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
fab0: 61 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  a [CREATE TABLE]
fac0: 20 73 74 61 74 65 6d 65 6e 74 2e 29 5e 3c 2f 70   statement.)^</p
fad0: 3e 0a 0a 3c 68 33 3e 46 75 6e 63 74 69 6f 6e 73  >..<h3>Functions
fae0: 3c 2f 68 33 3e 0a 3c 70 3e 5e 42 6f 74 68 20 5b  </h3>.<p>^Both [
faf0: 63 6f 72 65 66 75 6e 63 7c 73 69 6d 70 6c 65 5d  corefunc|simple]
fb00: 20 61 6e 64 20 5b 61 67 67 66 75 6e 63 7c 61 67   and [aggfunc|ag
fb10: 67 72 65 67 61 74 65 5d 20 66 75 6e 63 74 69 6f  gregate] functio
fb20: 6e 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64  ns are supported
fb30: 2e 0a 28 46 6f 72 20 70 72 65 73 65 6e 74 61 74  ..(For presentat
fb40: 69 6f 6e 20 70 75 72 70 6f 73 65 73 2c 20 73 69  ion purposes, si
fb50: 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  mple functions a
fb60: 72 65 20 66 75 72 74 68 65 72 20 73 75 62 64 69  re further subdi
fb70: 76 69 64 65 64 20 69 6e 74 6f 0a 5b 63 6f 72 65  vided into.[core
fb80: 66 75 6e 63 20 7c 20 63 6f 72 65 20 66 75 6e 63  func | core func
fb90: 74 69 6f 6e 73 5d 20 61 6e 64 20 5b 64 61 74 65  tions] and [date
fba0: 66 75 6e 63 20 7c 20 64 61 74 65 2d 74 69 6d 65  func | date-time
fbb0: 20 66 75 6e 63 74 69 6f 6e 73 5d 2e 29 0a 5e 41   functions].).^A
fbc0: 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e   simple function
fbd0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
fbe0: 61 6e 79 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  any expression. 
fbf0: 20 5e 53 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f   ^Simple functio
fc00: 6e 73 20 72 65 74 75 72 6e 0a 61 20 72 65 73 75  ns return.a resu
fc10: 6c 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 62  lt immediately b
fc20: 61 73 65 64 20 6f 6e 20 74 68 65 69 72 20 69 6e  ased on their in
fc30: 70 75 74 73 2e 20 20 5e 41 67 67 72 65 67 61 74  puts.  ^Aggregat
fc40: 65 20 66 75 6e 63 74 69 6f 6e 73 0a 6d 61 79 20  e functions.may 
fc50: 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20  only be used in 
fc60: 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
fc70: 6e 74 2e 20 20 5e 41 67 67 72 65 67 61 74 65 20  nt.  ^Aggregate 
fc80: 66 75 6e 63 74 69 6f 6e 73 20 63 6f 6d 70 75 74  functions comput
fc90: 65 0a 74 68 65 69 72 20 72 65 73 75 6c 74 20 61  e.their result a
fca0: 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 6f  cross all rows o
fcb0: 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  f the result set
fcc0: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
fcd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fce0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fcf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fd00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fd10: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
fd20: 69 6f 6e 20 7b 43 6f 72 65 20 46 75 6e 63 74 69  ion {Core Functi
fd30: 6f 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 7b 2a  ons} corefunc {*
fd40: 63 6f 72 65 66 75 6e 63 7d 0a 70 72 6f 63 20 66  corefunc}.proc f
fd50: 75 6e 63 64 65 66 20 7b 73 79 6e 74 61 78 20 6b  uncdef {syntax k
fd60: 65 79 77 6f 72 64 73 20 64 65 73 63 7d 20 7b 0a  eywords desc} {.
fd70: 20 20 68 64 5f 70 75 74 73 20 7b 3c 74 72 3e 7d    hd_puts {<tr>}
fd80: 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  .  regsub -all {
fd90: 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69  \s+} [string tri
fda0: 6d 20 24 73 79 6e 74 61 78 5d 20 7b 3c 62 72 3e  m $syntax] {<br>
fdb0: 3c 2f 62 72 3e 7d 20 73 79 6e 74 61 78 0a 20 20  </br>} syntax.  
fdc0: 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 28 28  regsub -all {\((
fdd0: 5b 5e 2a 29 5d 2b 29 5c 29 7d 20 24 73 79 6e 74  [^*)]+)\)} $synt
fde0: 61 78 20 7b 28 3c 69 3e 5c 31 3c 2f 69 3e 29 7d  ax {(<i>\1</i>)}
fdf0: 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62   syntax.  regsub
fe00: 20 2d 61 6c 6c 20 7b 2c 7d 20 24 73 79 6e 74 61   -all {,} $synta
fe10: 78 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20 73 79 6e  x {</i>,<i>} syn
fe20: 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c  tax.  regsub -al
fe30: 6c 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e  l {<i>\.\.\.</i>
fe40: 7d 20 24 73 79 6e 74 61 78 20 7b 2e 2e 2e 7d 20  } $syntax {...} 
fe50: 73 79 6e 74 61 78 0a 20 20 68 64 5f 70 75 74 73  syntax.  hd_puts
fe60: 20 22 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74   "<td valign=\"t
fe70: 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 72 69 67  op\" align=\"rig
fe80: 68 74 5c 22 20 77 69 64 74 68 3d 5c 22 31 32 30  ht\" width=\"120
fe90: 5c 22 3e 24 73 79 6e 74 61 78 3c 2f 74 64 3e 22  \">$syntax</td>"
fea0: 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 74 64 20  .  hd_puts {<td 
feb0: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 7d 0a 20  valign="top">}. 
fec0: 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6b   if {[llength $k
fed0: 65 79 77 6f 72 64 73 5d 3d 3d 30 7d 20 7b 0a 20  eywords]==0} {. 
fee0: 20 20 20 72 65 67 65 78 70 20 7b 5b 61 2d 7a 5f     regexp {[a-z_
fef0: 5d 2b 7d 20 24 73 79 6e 74 61 78 20 6e 61 6d 65  ]+} $syntax name
ff00: 0a 20 20 20 20 68 64 5f 66 72 61 67 6d 65 6e 74  .    hd_fragment
ff10: 20 24 6e 61 6d 65 20 2a 24 6e 61 6d 65 20 22 24   $name *$name "$
ff20: 7b 6e 61 6d 65 7d 28 29 20 53 51 4c 20 66 75 6e  {name}() SQL fun
ff30: 63 74 69 6f 6e 22 0a 20 20 7d 20 65 6c 73 65 20  ction".  } else 
ff40: 7b 0a 20 20 20 20 73 65 74 20 66 72 61 67 6e 61  {.    set fragna
ff50: 6d 65 20 5b 6c 69 6e 64 65 78 20 24 6b 65 79 77  me [lindex $keyw
ff60: 6f 72 64 73 20 30 5d 0a 20 20 20 20 72 65 67 73  ords 0].    regs
ff70: 75 62 20 2d 61 6c 6c 20 7b 5b 5e 61 2d 7a 5d 7d  ub -all {[^a-z]}
ff80: 20 24 66 72 61 67 6e 61 6d 65 20 7b 7d 20 66 72   $fragname {} fr
ff90: 61 67 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72  agname.    hd_fr
ffa0: 61 67 6d 65 6e 74 20 24 66 72 61 67 6e 61 6d 65  agment $fragname
ffb0: 0a 20 20 20 20 65 76 61 6c 20 68 64 5f 6b 65 79  .    eval hd_key
ffc0: 77 6f 72 64 73 20 5b 73 74 72 69 6e 67 20 6d 61  words [string ma
ffd0: 70 20 7b 5c 6e 20 7b 20 7d 7d 20 24 6b 65 79 77  p {\n { }} $keyw
ffe0: 6f 72 64 73 5d 0a 20 20 7d 0a 20 20 68 64 5f 72  ords].  }.  hd_r
fff0: 65 73 6f 6c 76 65 20 24 64 65 73 63 0a 20 20 68  esolve $desc.  h
10000 64 5f 70 75 74 73 20 7b 3c 2f 74 64 3e 3c 2f 74  d_puts {</td></t
10010 72 3e 7d 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  r>}.}.</tcl>..<p
10020 3e 54 68 65 20 63 6f 72 65 20 66 75 6e 63 74 69  >The core functi
10030 6f 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20  ons shown below 
10040 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79  are available by
10050 20 64 65 66 61 75 6c 74 2e 20 0a 5b 64 61 74 65   default. .[date
10060 66 75 6e 63 20 7c 20 44 61 74 65 20 26 61 6d 70  func | Date &amp
10070 3b 20 54 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  ; Time functions
10080 5d 20 61 6e 64 0a 5b 61 67 67 66 75 6e 63 20 7c  ] and.[aggfunc |
10090 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
100a0 69 6f 6e 73 5d 20 61 72 65 20 64 6f 63 75 6d 65  ions] are docume
100b0 6e 74 65 64 20 73 65 70 61 72 61 74 65 6c 79 2e  nted separately.
100c0 20 20 41 6e 0a 61 70 70 6c 69 63 61 74 69 6f 6e    An.application
100d0 20 6d 61 79 20 64 65 66 69 6e 65 20 61 64 64 69   may define addi
100e0 74 69 6f 6e 61 6c 0a 66 75 6e 63 74 69 6f 6e 73  tional.functions
100f0 20 77 72 69 74 74 65 6e 20 69 6e 20 43 20 61 6e   written in C an
10100 64 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 64  d added to the d
10110 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 20 75  atabase engine u
10120 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c 69 74 65  sing.the [sqlite
10130 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
10140 6e 28 29 5d 20 41 50 49 2e 3c 2f 70 3e 0a 0a 3c  n()] API.</p>..<
10150 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63  table border=0 c
10160 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c  ellpadding=10>.<
10170 74 63 6c 3e 0a 66 75 6e 63 64 65 66 20 7b 61 62  tcl>.funcdef {ab
10180 73 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  s(X)} {} {.  ^Th
10190 65 20 61 62 73 28 58 29 20 66 75 6e 63 74 69 6f  e abs(X) functio
101a0 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 62  n returns the ab
101b0 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20  solute value of 
101c0 74 68 65 20 6e 75 6d 65 72 69 63 0a 20 20 61 72  the numeric.  ar
101d0 67 75 6d 65 6e 74 20 58 2e 20 20 5e 41 62 73 28  gument X.  ^Abs(
101e0 58 29 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20  X) returns NULL 
101f0 69 66 20 58 20 69 73 20 4e 55 4c 4c 2e 20 0a 20  if X is NULL. . 
10200 20 5e 28 41 62 73 28 58 29 20 72 65 74 75 72 6e   ^(Abs(X) return
10210 20 30 2e 30 20 69 66 20 58 20 69 73 20 61 20 73   0.0 if X is a s
10220 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 0a 20 20  tring or blob.  
10230 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 63  that cannot be c
10240 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 20 6e 75  onverted to a nu
10250 6d 65 72 69 63 20 76 61 6c 75 65 2e 29 5e 20 20  meric value.)^  
10260 5e 49 66 20 58 20 69 73 20 74 68 65 20 0a 20 20  ^If X is the .  
10270 69 6e 74 65 67 65 72 20 2d 39 32 32 33 33 37 32  integer -9223372
10280 30 33 36 38 35 34 37 37 35 38 30 37 20 74 68 65  036854775807 the
10290 6e 20 61 62 73 28 58 29 20 74 68 72 6f 77 73 20  n abs(X) throws 
102a0 61 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66  an integer overf
102b0 6c 6f 77 0a 20 20 65 72 72 6f 72 20 73 69 6e 63  low.  error sinc
102c0 65 20 74 68 65 72 65 20 69 73 20 6e 6f 20 65 71  e there is no eq
102d0 75 69 76 61 6c 65 6e 74 20 70 6f 73 69 74 69 76  uivalent positiv
102e0 65 20 36 34 2d 62 69 74 20 74 77 6f 20 63 6f 6d  e 64-bit two com
102f0 70 6c 65 6d 65 6e 74 20 76 61 6c 75 65 2e 0a 7d  plement value..}
10300 0a 0a 66 75 6e 63 64 65 66 20 7b 63 68 61 6e 67  ..funcdef {chang
10310 65 73 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  es()} {} {.  ^Th
10320 65 20 63 68 61 6e 67 65 73 28 29 20 66 75 6e 63  e changes() func
10330 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
10340 20 6e 75 6d 62 65 72 20 6f 66 20 64 61 74 61 62   number of datab
10350 61 73 65 20 72 6f 77 73 20 74 68 61 74 20 77 65  ase rows that we
10360 72 65 20 63 68 61 6e 67 65 64 0a 20 20 6f 72 20  re changed.  or 
10370 69 6e 73 65 72 74 65 64 20 6f 72 20 64 65 6c 65  inserted or dele
10380 74 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20  ted by the most 
10390 72 65 63 65 6e 74 6c 79 20 63 6f 6d 70 6c 65 74  recently complet
103a0 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ed SQL statement
103b0 2e 20 20 0a 20 20 5e 54 68 65 20 63 68 61 6e 67  .  .  ^The chang
103c0 65 73 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  es() SQL functio
103d0 6e 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61  n is a wrapper a
103e0 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74  round the [sqlit
103f0 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20 20  e3_changes()].  
10400 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 20 61  C/C++ function a
10410 6e 64 20 68 65 6e 63 65 20 66 6f 6c 6c 6f 77 73  nd hence follows
10420 20 74 68 65 20 73 61 6d 65 20 72 75 6c 65 73 20   the same rules 
10430 66 6f 72 20 63 6f 75 6e 74 69 6e 67 20 63 68 61  for counting cha
10440 6e 67 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  nges..}..funcdef
10450 20 7b 63 6f 61 6c 65 73 63 65 28 58 2c 59 2c 2e   {coalesce(X,Y,.
10460 2e 2e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ..)} {} {.  ^The
10470 20 63 6f 61 6c 65 73 63 65 28 29 20 66 75 6e 63   coalesce() func
10480 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63  tion returns a c
10490 6f 70 79 20 6f 66 20 69 74 73 20 66 69 72 73 74  opy of its first
104a0 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65   non-NULL argume
104b0 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c 20 69 66  nt, or.  NULL if
104c0 20 61 6c 6c 20 61 72 67 75 6d 65 6e 74 73 20 61   all arguments a
104d0 72 65 20 4e 55 4c 4c 2e 20 20 5e 43 6f 61 6c 65  re NULL.  ^Coale
104e0 73 63 65 28 29 20 6d 75 73 74 20 62 65 20 61 74  sce() must be at
104f0 20 6c 65 61 73 74 20 0a 20 20 32 20 61 72 67 75   least .  2 argu
10500 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65  ments..}..funcde
10510 66 20 7b 67 6c 6f 62 28 58 2c 59 29 7d 20 7b 7d  f {glob(X,Y)} {}
10520 20 7b 0a 20 20 5e 54 68 65 20 67 6c 6f 62 28 58   {.  ^The glob(X
10530 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  ,Y) function is 
10540 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 74 68  equivalent to th
10550 65 0a 20 20 65 78 70 72 65 73 73 69 6f 6e 20 22  e.  expression "
10560 3c 62 3e 59 20 47 4c 4f 42 20 58 3c 2f 62 3e 22  <b>Y GLOB X</b>"
10570 2e 0a 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68  ..  Note that th
10580 65 20 58 20 61 6e 64 20 59 20 61 72 67 75 6d 65  e X and Y argume
10590 6e 74 73 20 61 72 65 20 72 65 76 65 72 73 65 64  nts are reversed
105a0 20 69 6e 20 74 68 65 20 67 6c 6f 62 28 29 20 66   in the glob() f
105b0 75 6e 63 74 69 6f 6e 0a 20 20 72 65 6c 61 74 69  unction.  relati
105c0 76 65 20 74 6f 20 74 68 65 20 69 6e 66 69 78 20  ve to the infix 
105d0 5b 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72 2e  [GLOB] operator.
105e0 0a 20 20 5e 49 66 20 74 68 65 20 5b 73 71 6c 69  .  ^If the [sqli
105f0 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
10600 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65  ion()] interface
10610 20 69 73 20 75 73 65 64 20 74 6f 0a 20 20 6f 76   is used to.  ov
10620 65 72 72 69 64 65 20 74 68 65 20 67 6c 6f 62 28  erride the glob(
10630 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 77 69  X,Y) function wi
10640 74 68 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76  th an alternativ
10650 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
10660 20 74 68 65 6e 0a 20 20 74 68 65 20 5b 47 4c 4f   then.  the [GLO
10670 42 5d 20 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c  B] operator will
10680 20 69 6e 76 6f 6b 65 20 74 68 65 20 61 6c 74 65   invoke the alte
10690 72 6e 61 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e  rnative implemen
106a0 74 61 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64  tation..}..funcd
106b0 65 66 20 7b 69 66 6e 75 6c 6c 28 58 2c 59 29 7d  ef {ifnull(X,Y)}
106c0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 69 66 6e   {} {.  ^The ifn
106d0 75 6c 6c 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ull() function r
106e0 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66  eturns a copy of
106f0 20 69 74 73 20 66 69 72 73 74 20 6e 6f 6e 2d 4e   its first non-N
10700 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2c 20 6f 72  ULL argument, or
10710 0a 20 20 4e 55 4c 4c 20 69 66 20 62 6f 74 68 20  .  NULL if both 
10720 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 4e 55  arguments are NU
10730 4c 4c 2e 20 20 5e 49 66 6e 75 6c 6c 28 29 20 6d  LL.  ^Ifnull() m
10740 75 73 74 20 68 61 76 65 20 65 78 61 63 74 6c 79  ust have exactly
10750 20 32 20 61 72 67 75 6d 65 6e 74 73 2e 0a 20 20   2 arguments..  
10760 5e 54 68 65 20 69 66 6e 75 6c 6c 28 29 20 66 75  ^The ifnull() fu
10770 6e 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61  nction is equiva
10780 6c 65 6e 74 20 74 6f 20 5b 63 6f 61 6c 65 73 63  lent to [coalesc
10790 65 28 29 5d 20 77 69 74 68 20 74 77 6f 20 61 72  e()] with two ar
107a0 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e 63  guments..}..func
107b0 64 65 66 20 7b 68 65 78 28 58 29 7d 20 7b 7d 20  def {hex(X)} {} 
107c0 7b 0a 20 20 5e 54 68 65 20 68 65 78 28 29 20 66  {.  ^The hex() f
107d0 75 6e 63 74 69 6f 6e 20 69 6e 74 65 72 70 72 65  unction interpre
107e0 74 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74 20  ts its argument 
107f0 61 73 20 61 20 42 4c 4f 42 20 61 6e 64 20 72 65  as a BLOB and re
10800 74 75 72 6e 73 0a 20 20 61 20 73 74 72 69 6e 67  turns.  a string
10810 20 77 68 69 63 68 20 69 73 20 74 68 65 20 75 70   which is the up
10820 70 65 72 2d 63 61 73 65 20 68 65 78 61 64 65 63  per-case hexadec
10830 69 6d 61 6c 20 72 65 6e 64 65 72 69 6e 67 20 6f  imal rendering o
10840 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  f the content of
10850 0a 20 20 74 68 61 74 20 62 6c 6f 62 2e 0a 7d 0a  .  that blob..}.
10860 0a 66 75 6e 63 64 65 66 20 7b 6c 61 73 74 5f 69  .funcdef {last_i
10870 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 7d 20 7b  nsert_rowid()} {
10880 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f  } {.  ^The last_
10890 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66  insert_rowid() f
108a0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
108b0 74 68 65 20 5b 52 4f 57 49 44 5d 0a 20 20 6f 66  the [ROWID].  of
108c0 20 74 68 65 20 6c 61 73 74 20 72 6f 77 20 69 6e   the last row in
108d0 73 65 72 74 20 66 72 6f 6d 20 74 68 65 20 64 61  sert from the da
108e0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
108f0 6e 20 77 68 69 63 68 20 69 6e 76 6f 6b 65 64 20  n which invoked 
10900 74 68 65 0a 20 20 66 75 6e 63 74 69 6f 6e 2e 0a  the.  function..
10910 20 20 5e 54 68 65 20 6c 61 73 74 5f 69 6e 73 65    ^The last_inse
10920 72 74 5f 72 6f 77 69 64 28 29 20 53 51 4c 20 66  rt_rowid() SQL f
10930 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61  unction is a wra
10940 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a  pper around the.
10950 20 20 5b 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f    [sqlite3_last_
10960 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 5d 20  insert_rowid()] 
10970 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 20  C/C++ interface 
10980 66 75 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e  function..}..fun
10990 63 64 65 66 20 7b 6c 65 6e 67 74 68 28 58 29 7d  cdef {length(X)}
109a0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 65 6e   {} {.  ^The len
109b0 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  gth(X) function 
109c0 72 65 74 75 72 6e 73 20 74 68 65 20 6c 65 6e 67  returns the leng
109d0 74 68 20 6f 66 20 58 20 69 6e 20 0a 20 20 63 68  th of X in .  ch
109e0 61 72 61 63 74 65 72 73 20 69 66 20 58 20 69 73  aracters if X is
109f0 20 61 20 73 74 72 69 6e 67 2c 20 6f 72 20 69 6e   a string, or in
10a00 20 62 79 74 65 73 20 69 66 20 58 20 69 73 20 61   bytes if X is a
10a10 20 62 6c 6f 62 2e 0a 20 20 5e 49 66 20 58 20 69   blob..  ^If X i
10a20 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6c 65 6e 67  s NULL then leng
10a30 74 68 28 58 29 20 69 73 20 4e 55 4c 4c 2e 0a 20  th(X) is NULL.. 
10a40 20 5e 49 66 20 58 20 69 73 20 6e 75 6d 65 72 69   ^If X is numeri
10a50 63 20 74 68 65 6e 20 6c 65 6e 67 74 68 28 58 29  c then length(X)
10a60 20 72 65 74 75 72 6e 73 20 74 68 65 20 6c 65 6e   returns the len
10a70 67 74 68 20 6f 66 20 61 20 73 74 72 69 6e 67 0a  gth of a string.
10a80 20 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e    representation
10a90 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65   of X..}..funcde
10aa0 66 20 7b 6c 69 6b 65 28 58 2c 59 29 20 6c 69 6b  f {like(X,Y) lik
10ab0 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20  e(X,Y,Z)} {} {. 
10ac0 20 5e 54 68 65 20 6c 69 6b 65 28 29 20 66 75 6e   ^The like() fun
10ad0 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ction is used to
10ae0 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20   implement the. 
10af0 20 22 3c 62 3e 59 20 4c 49 4b 45 20 58 20 26 23   "<b>Y LIKE X &#
10b00 39 31 3b 45 53 43 41 50 45 20 5a 26 23 39 33 3b  91;ESCAPE Z&#93;
10b10 3c 2f 62 3e 22 20 65 78 70 72 65 73 73 69 6f 6e  </b>" expression
10b20 2e 20 0a 20 20 5e 49 66 20 74 68 65 20 6f 70 74  . .  ^If the opt
10b30 69 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61  ional ESCAPE cla
10b40 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20  use is present, 
10b50 74 68 65 6e 20 74 68 65 0a 20 20 6c 69 6b 65 28  then the.  like(
10b60 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e  ) function is in
10b70 76 6f 6b 65 64 20 77 69 74 68 20 74 68 72 65 65  voked with three
10b80 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 5e 4f 74   arguments.  ^Ot
10b90 68 65 72 77 69 73 65 2c 20 69 74 20 69 73 0a 20  herwise, it is. 
10ba0 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 77   invoked with tw
10bb0 6f 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e 6c 79  o arguments only
10bc0 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  . Note that the 
10bd0 58 20 61 6e 64 20 59 20 70 61 72 61 6d 65 74 65  X and Y paramete
10be0 72 73 20 61 72 65 0a 20 20 72 65 76 65 72 73 65  rs are.  reverse
10bf0 64 20 69 6e 20 74 68 65 20 6c 69 6b 65 28 29 20  d in the like() 
10c00 66 75 6e 63 74 69 6f 6e 20 72 65 6c 61 74 69 76  function relativ
10c10 65 20 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b  e to the infix [
10c20 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 0a  LIKE] operator..
10c30 20 20 5e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f    ^The [sqlite3_
10c40 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
10c50 29 5d 20 69 6e 74 65 72 66 61 63 65 20 63 61 6e  )] interface can
10c60 20 62 65 20 75 73 65 64 20 74 6f 20 6f 76 65 72   be used to over
10c70 72 69 64 65 20 74 68 65 0a 20 20 6c 69 6b 65 28  ride the.  like(
10c80 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74  ) function and t
10c90 68 65 72 65 62 79 20 63 68 61 6e 67 65 20 74 68  hereby change th
10ca0 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74  e operation of t
10cb0 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72  he.  [LIKE] oper
10cc0 61 74 6f 72 2e 20 20 57 68 65 6e 20 6f 76 65 72  ator.  When over
10cd0 72 69 64 69 6e 67 20 74 68 65 20 6c 69 6b 65 28  riding the like(
10ce0 29 20 66 75 6e 63 74 69 6f 6e 2c 20 69 74 20 6d  ) function, it m
10cf0 61 79 20 62 65 20 69 6d 70 6f 72 74 61 6e 74 0a  ay be important.
10d00 20 20 74 6f 20 6f 76 65 72 72 69 64 65 20 62 6f    to override bo
10d10 74 68 20 74 68 65 20 74 77 6f 20 61 6e 64 20 74  th the two and t
10d20 68 72 65 65 20 61 72 67 75 6d 65 6e 74 20 76 65  hree argument ve
10d30 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 6c 69  rsions of the li
10d40 6b 65 28 29 20 0a 20 20 66 75 6e 63 74 69 6f 6e  ke() .  function
10d50 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 64 69 66  . Otherwise, dif
10d60 66 65 72 65 6e 74 20 63 6f 64 65 20 6d 61 79 20  ferent code may 
10d70 62 65 20 63 61 6c 6c 65 64 20 74 6f 20 69 6d 70  be called to imp
10d80 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 5b 4c 49  lement the.  [LI
10d90 4b 45 5d 20 6f 70 65 72 61 74 6f 72 20 64 65 70  KE] operator dep
10da0 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
10db0 72 20 6f 72 20 6e 6f 74 20 61 6e 20 45 53 43 41  r or not an ESCA
10dc0 50 45 20 63 6c 61 75 73 65 20 77 61 73 20 0a 20  PE clause was . 
10dd0 20 73 70 65 63 69 66 69 65 64 2e 0a 7d 0a 0a 66   specified..}..f
10de0 75 6e 63 64 65 66 20 7b 6c 6f 61 64 5f 65 78 74  uncdef {load_ext
10df0 65 6e 73 69 6f 6e 28 58 29 20 6c 6f 61 64 5f 65  ension(X) load_e
10e00 78 74 65 6e 73 69 6f 6e 28 58 2c 59 29 7d 20 7b  xtension(X,Y)} {
10e10 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 6f 61 64 5f  } {.  ^The load_
10e20 65 78 74 65 6e 73 69 6f 6e 28 58 2c 59 29 20 66  extension(X,Y) f
10e30 75 6e 63 74 69 6f 6e 20 6c 6f 61 64 73 20 53 51  unction loads SQ
10e40 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 73 20  Lite extensions 
10e50 6f 75 74 20 6f 66 20 74 68 65 20 73 68 61 72 65  out of the share
10e60 64 0a 20 20 6c 69 62 72 61 72 79 20 66 69 6c 65  d.  library file
10e70 20 6e 61 6d 65 64 20 58 20 75 73 69 6e 67 20 74   named X using t
10e80 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 59  he entry point Y
10e90 2e 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  .  ^The result o
10ea0 66 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  f load_extension
10eb0 28 29 0a 20 20 69 73 20 61 6c 77 61 79 73 20 61  ().  is always a
10ec0 20 4e 55 4c 4c 2e 20 20 5e 49 66 20 59 20 69 73   NULL.  ^If Y is
10ed0 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 74 68   omitted then th
10ee0 65 20 64 65 66 61 75 6c 74 20 65 6e 74 72 79 20  e default entry 
10ef0 70 6f 69 6e 74 0a 20 20 6f 66 20 3c 62 3e 73 71  point.  of <b>sq
10f00 6c 69 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e 5f  lite3_extension_
10f10 69 6e 69 74 3c 2f 62 3e 20 69 73 20 75 73 65 64  init</b> is used
10f20 2e 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74  .  ^The load_ext
10f30 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f  ension() functio
10f40 6e 0a 20 20 72 61 69 73 65 73 20 61 6e 20 65 78  n.  raises an ex
10f50 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 65  ception if the e
10f60 78 74 65 6e 73 69 6f 6e 20 66 61 69 6c 73 20 74  xtension fails t
10f70 6f 20 6c 6f 61 64 20 6f 72 20 69 6e 69 74 69 61  o load or initia
10f80 6c 69 7a 65 20 63 6f 72 72 65 63 74 6c 79 2e 0a  lize correctly..
10f90 0a 20 20 3c 70 3e 5e 54 68 65 20 6c 6f 61 64 5f  .  <p>^The load_
10fa0 65 78 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63  extension() func
10fb0 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 69  tion will fail i
10fc0 66 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 20  f the extension 
10fd0 61 74 74 65 6d 70 74 73 20 74 6f 20 0a 20 20 6d  attempts to .  m
10fe0 6f 64 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20  odify or delete 
10ff0 61 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 6f  a SQL function o
11000 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  r collating sequ
11010 65 6e 63 65 2e 20 20 5e 54 68 65 0a 20 20 65 78  ence.  ^The.  ex
11020 74 65 6e 73 69 6f 6e 20 63 61 6e 20 61 64 64 20  tension can add 
11030 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72  new functions or
11040 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
11050 6e 63 65 73 2c 20 62 75 74 20 63 61 6e 6e 6f 74  nces, but cannot
11060 0a 20 20 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c  .  modify or del
11070 65 74 65 20 65 78 69 73 74 69 6e 67 20 66 75 6e  ete existing fun
11080 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74  ctions or collat
11090 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 62 65  ing sequences be
110a0 63 61 75 73 65 0a 20 20 74 68 6f 73 65 20 66 75  cause.  those fu
110b0 6e 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 63  nctions and/or c
110c0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
110d0 65 73 20 6d 69 67 68 74 20 62 65 20 75 73 65 64  es might be used
110e0 20 65 6c 73 65 77 68 65 72 65 0a 20 20 69 6e 20   elsewhere.  in 
110f0 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 72 75  the currently ru
11100 6e 6e 69 6e 67 20 53 51 4c 20 73 74 61 74 65 6d  nning SQL statem
11110 65 6e 74 2e 20 20 54 6f 20 6c 6f 61 64 20 61 6e  ent.  To load an
11120 20 65 78 74 65 6e 73 69 6f 6e 20 74 68 61 74 0a   extension that.
11130 20 20 63 68 61 6e 67 65 73 20 6f 72 20 64 65 6c    changes or del
11140 65 74 65 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f  etes functions o
11150 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  r collating sequ
11160 65 6e 63 65 73 2c 20 75 73 65 20 74 68 65 0a 20  ences, use the. 
11170 20 5b 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65   [sqlite3_load_e
11180 78 74 65 6e 73 69 6f 6e 28 29 5d 20 43 2d 6c 61  xtension()] C-la
11190 6e 67 75 61 67 65 20 41 50 49 2e 3c 2f 70 3e 0a  nguage API.</p>.
111a0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 77 65  }..funcdef {lowe
111b0 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  r(X)} {} {.  ^Th
111c0 65 20 6c 6f 77 65 72 28 58 29 20 66 75 6e 63 74  e lower(X) funct
111d0 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f  ion returns a co
111e0 70 79 20 6f 66 20 73 74 72 69 6e 67 20 58 20 77  py of string X w
111f0 69 74 68 20 61 6c 6c 20 41 53 43 49 49 20 63 68  ith all ASCII ch
11200 61 72 61 63 74 65 72 73 0a 20 20 63 6f 6e 76 65  aracters.  conve
11210 72 74 65 64 20 74 6f 20 6c 6f 77 65 72 20 63 61  rted to lower ca
11220 73 65 2e 20 20 5e 54 68 65 20 64 65 66 61 75 6c  se.  ^The defaul
11230 74 20 62 75 69 6c 74 2d 69 6e 20 6c 6f 77 65 72  t built-in lower
11240 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72 6b  () function work
11250 73 0a 20 20 66 6f 72 20 41 53 43 49 49 20 63 68  s.  for ASCII ch
11260 61 72 61 63 74 65 72 73 20 6f 6e 6c 79 2e 20 20  aracters only.  
11270 54 6f 20 64 6f 20 63 61 73 65 20 63 6f 6e 76 65  To do case conve
11280 72 73 69 6f 6e 73 20 6f 6e 20 6e 6f 6e 2d 41 53  rsions on non-AS
11290 43 49 49 0a 20 20 63 68 61 72 61 63 74 65 72 73  CII.  characters
112a0 2c 20 6c 6f 61 64 20 74 68 65 20 49 43 55 20 65  , load the ICU e
112b0 78 74 65 6e 73 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e  xtension..}..fun
112c0 63 64 65 66 20 7b 6c 74 72 69 6d 28 58 29 20 6c  cdef {ltrim(X) l
112d0 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  trim(X,Y)} {} {.
112e0 20 20 5e 54 68 65 20 6c 74 72 69 6d 28 58 2c 59    ^The ltrim(X,Y
112f0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
11300 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d  ns a string form
11310 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61  ed by removing a
11320 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61  ny and all.  cha
11330 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70 70  racters that app
11340 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74 68  ear in Y from th
11350 65 20 6c 65 66 74 20 73 69 64 65 20 6f 66 20 58  e left side of X
11360 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72  ..  ^If the Y ar
11370 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65  gument is omitte
11380 64 2c 20 6c 74 72 69 6d 28 58 29 20 72 65 6d 6f  d, ltrim(X) remo
11390 76 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20  ves spaces from 
113a0 74 68 65 20 6c 65 66 74 20 73 69 64 65 0a 20 20  the left side.  
113b0 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  of X..}..funcdef
113c0 20 7b 6d 61 78 28 58 2c 59 2c 2e 2e 2e 29 7d 20   {max(X,Y,...)} 
113d0 7b 2a 6d 61 78 43 6f 72 65 46 75 6e 63 20 2a 6d  {*maxCoreFunc *m
113e0 61 78 20 7b 6d 61 78 28 29 20 53 51 4c 20 66 75  ax {max() SQL fu
113f0 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68  nction}} {.  ^Th
11400 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74  e multi-argument
11410 20 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e 20   max() function 
11420 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75  returns the argu
11430 6d 65 6e 74 20 77 69 74 68 20 74 68 65 20 0a 20  ment with the . 
11440 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 2c 20   maximum value, 
11450 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c 4c 20 69  or return NULL i
11460 66 20 61 6e 79 20 61 72 67 75 6d 65 6e 74 20 69  f any argument i
11470 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 54 68 65 20  s NULL. .  ^The 
11480 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d  multi-argument m
11490 61 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 73 65  ax() function se
114a0 61 72 63 68 65 73 20 69 74 73 20 61 72 67 75 6d  arches its argum
114b0 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20 74  ents from left t
114c0 6f 20 72 69 67 68 74 0a 20 20 66 6f 72 20 61 6e  o right.  for an
114d0 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20 64   argument that d
114e0 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69  efines a collati
114f0 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20  ng function and 
11500 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61 74  uses that collat
11510 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20 66  ing.  function f
11520 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 20 63 6f  or all string co
11530 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20  mparisons.  ^If 
11540 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 72 67 75  none of the argu
11550 6d 65 6e 74 73 20 74 6f 20 6d 61 78 28 29 0a 20  ments to max(). 
11560 20 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61 74   define a collat
11570 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74 68  ing function, th
11580 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20 63 6f  en the BINARY co
11590 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
115a0 20 69 73 20 75 73 65 64 2e 0a 20 20 4e 6f 74 65   is used..  Note
115b0 20 74 68 61 74 20 3c 62 3e 6d 61 78 28 29 3c 2f   that <b>max()</
115c0 62 3e 20 69 73 20 61 20 73 69 6d 70 6c 65 20 66  b> is a simple f
115d0 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20 20 69  unction when.  i
115e0 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72 65 20  t has 2 or more 
115f0 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20 6f 70  arguments but op
11600 65 72 61 74 65 73 20 61 73 20 61 6e 0a 20 20 5b  erates as an.  [
11610 6d 69 6e 41 67 67 46 75 6e 63 20 7c 20 61 67 67  minAggFunc | agg
11620 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 5d  regate function]
11630 20 69 66 20 67 69 76 65 6e 20 6f 6e 6c 79 20 61   if given only a
11640 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74   single argument
11650 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69  ..}..funcdef {mi
11660 6e 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 69  n(X,Y,...)} {*mi
11670 6e 43 6f 72 65 46 75 6e 63 20 2a 6d 69 6e 20 7b  nCoreFunc *min {
11680 6d 69 6e 28 29 20 53 51 4c 20 66 75 6e 63 74 69  min() SQL functi
11690 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 75  on}} {.  ^The mu
116a0 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 69 6e  lti-argument min
116b0 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
116c0 72 6e 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74  rns the argument
116d0 20 77 69 74 68 20 74 68 65 0a 20 20 6d 69 6e 69   with the.  mini
116e0 6d 75 6d 20 76 61 6c 75 65 2e 0a 20 20 5e 54 68  mum value..  ^Th
116f0 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74  e multi-argument
11700 20 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20   min() function 
11710 73 65 61 72 63 68 65 73 20 69 74 73 20 61 72 67  searches its arg
11720 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74  uments from left
11730 20 74 6f 20 72 69 67 68 74 0a 20 20 66 6f 72 20   to right.  for 
11740 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74  an argument that
11750 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61   defines a colla
11760 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e  ting function an
11770 64 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c  d uses that coll
11780 61 74 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e  ating.  function
11790 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 20   for all string 
117a0 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49  comparisons.  ^I
117b0 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 72  f none of the ar
117c0 67 75 6d 65 6e 74 73 20 74 6f 20 6d 69 6e 28 29  guments to min()
117d0 0a 20 20 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c  .  define a coll
117e0 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20  ating function, 
117f0 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20  then the BINARY 
11800 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
11810 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 4e 6f  on is used..  No
11820 74 65 20 74 68 61 74 20 3c 62 3e 6d 69 6e 28 29  te that <b>min()
11830 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c 65  </b> is a simple
11840 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20   function when. 
11850 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72   it has 2 or mor
11860 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20  e arguments but 
11870 6f 70 65 72 61 74 65 73 20 61 73 20 61 6e 20 0a  operates as an .
11880 20 20 5b 6d 61 78 41 67 67 46 75 6e 63 20 7c 20    [maxAggFunc | 
11890 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
118a0 6f 6e 5d 20 69 66 20 67 69 76 65 6e 0a 20 20 6f  on] if given.  o
118b0 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67  nly a single arg
118c0 75 6d 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65  ument..}..funcde
118d0 66 20 7b 6e 75 6c 6c 69 66 28 58 2c 59 29 7d 20  f {nullif(X,Y)} 
118e0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6e 75 6c 6c  {} {.  ^The null
118f0 69 66 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  if(X,Y) function
11900 20 72 65 74 75 72 6e 73 20 69 74 73 20 66 69 72   returns its fir
11910 73 74 20 61 72 67 75 6d 65 6e 74 20 69 66 20 74  st argument if t
11920 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  he arguments are
11930 0a 20 20 64 69 66 66 65 72 65 6e 74 20 61 6e 64  .  different and
11940 20 4e 55 4c 4c 20 69 66 20 74 68 65 20 61 72 67   NULL if the arg
11950 75 6d 65 6e 74 73 20 61 72 65 20 74 68 65 20 73  uments are the s
11960 61 6d 65 2e 20 20 5e 54 68 65 20 6e 75 6c 6c 69  ame.  ^The nulli
11970 66 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 0a  f(X,Y) function.
11980 20 20 73 65 61 72 63 68 65 73 20 69 74 73 20 61    searches its a
11990 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65  rguments from le
119a0 66 74 20 74 6f 20 72 69 67 68 74 20 66 6f 72 20  ft to right for 
119b0 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74  an argument that
119c0 20 64 65 66 69 6e 65 73 20 61 0a 20 20 63 6f 6c   defines a.  col
119d0 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
119e0 61 6e 64 20 75 73 65 73 20 74 68 61 74 20 63 6f  and uses that co
119f0 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
11a00 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 0a   for all string.
11a10 20 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20    comparisons.  
11a20 5e 49 66 20 6e 65 69 74 68 65 72 20 61 72 67 75  ^If neither argu
11a30 6d 65 6e 74 20 74 6f 20 6e 75 6c 6c 69 66 28 29  ment to nullif()
11a40 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61   defines a colla
11a50 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 0a 20 20  ting function.  
11a60 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20  then the BINARY 
11a70 69 73 20 75 73 65 64 2e 0a 7d 0a 0a 66 75 6e 63  is used..}..func
11a80 64 65 66 20 7b 71 75 6f 74 65 28 58 29 7d 20 7b  def {quote(X)} {
11a90 7d 20 7b 0a 20 20 5e 54 68 65 20 71 75 6f 74 65  } {.  ^The quote
11aa0 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  (X) function ret
11ab0 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 77 68  urns a string wh
11ac0 69 63 68 20 69 73 20 74 68 65 20 76 61 6c 75 65  ich is the value
11ad0 20 6f 66 0a 20 20 69 74 73 20 61 72 67 75 6d 65   of.  its argume
11ae0 6e 74 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20  nt suitable for 
11af0 69 6e 63 6c 75 73 69 6f 6e 20 69 6e 74 6f 20 61  inclusion into a
11b00 6e 6f 74 68 65 72 20 53 51 4c 20 73 74 61 74 65  nother SQL state
11b10 6d 65 6e 74 2e 0a 20 20 5e 53 74 72 69 6e 67 73  ment..  ^Strings
11b20 20 61 72 65 20 73 75 72 72 6f 75 6e 64 65 64 20   are surrounded 
11b30 62 79 20 73 69 6e 67 6c 65 2d 71 75 6f 74 65 73  by single-quotes
11b40 20 77 69 74 68 20 65 73 63 61 70 65 73 20 6f 6e   with escapes on
11b50 20 69 6e 74 65 72 69 6f 72 20 71 75 6f 74 65 73   interior quotes
11b60 0a 20 20 61 73 20 6e 65 65 64 65 64 2e 20 20 5e  .  as needed.  ^
11b70 42 4c 4f 42 73 20 61 72 65 20 65 6e 63 6f 64 65  BLOBs are encode
11b80 64 20 61 73 20 68 65 78 61 64 65 63 69 6d 61 6c  d as hexadecimal
11b90 20 6c 69 74 65 72 61 6c 73 2e 0a 7d 0a 0a 66 75   literals..}..fu
11ba0 6e 63 64 65 66 20 7b 72 61 6e 64 6f 6d 28 29 7d  ncdef {random()}
11bb0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 61 6e   {} {.  ^The ran
11bc0 64 6f 6d 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  dom() function r
11bd0 65 74 75 72 6e 73 20 61 20 70 73 65 75 64 6f 2d  eturns a pseudo-
11be0 72 61 6e 64 6f 6d 20 69 6e 74 65 67 65 72 0a 20  random integer. 
11bf0 20 62 65 74 77 65 65 6e 20 2d 39 32 32 33 33 37   between -922337
11c00 32 30 33 36 38 35 34 37 37 35 38 30 38 20 61 6e  2036854775808 an
11c10 64 20 2b 39 32 32 33 33 37 32 30 33 36 38 35 34  d +9223372036854
11c20 37 37 35 38 30 37 2e 0a 7d 0a 0a 66 75 6e 63 64  775807..}..funcd
11c30 65 66 20 7b 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e  ef {randomblob(N
11c40 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72  )} {} {.  ^The r
11c50 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29 20 66 75 6e  andomblob(N) fun
11c60 63 74 69 6f 6e 20 72 65 74 75 72 6e 20 61 6e 20  ction return an 
11c70 4e 2d 62 79 74 65 20 62 6c 6f 62 20 63 6f 6e 74  N-byte blob cont
11c80 61 69 6e 69 6e 67 20 70 73 65 75 64 6f 2d 72 61  aining pseudo-ra
11c90 6e 64 6f 6d 0a 20 20 62 79 74 65 73 2e 20 5e 49  ndom.  bytes. ^I
11ca0 66 20 4e 20 69 73 20 6c 65 73 73 20 74 68 61 6e  f N is less than
11cb0 20 31 20 74 68 65 6e 20 61 20 31 2d 62 79 74 65   1 then a 1-byte
11cc0 20 72 61 6e 64 6f 6d 20 62 6c 6f 62 20 69 73 20   random blob is 
11cd0 72 65 74 75 72 6e 65 64 2e 0a 0a 20 20 3c 70 3e  returned...  <p>
11ce0 48 69 6e 74 3a 20 20 61 70 70 6c 69 63 61 74 69  Hint:  applicati
11cf0 6f 6e 73 20 63 61 6e 20 67 65 6e 65 72 61 74 65  ons can generate
11d00 20 67 6c 6f 62 61 6c 6c 79 20 75 6e 69 71 75 65   globally unique
11d10 20 69 64 65 6e 74 69 66 69 65 72 73 0a 20 20 75   identifiers.  u
11d20 73 69 6e 67 20 74 68 69 73 20 66 75 6e 63 74 69  sing this functi
11d30 6f 6e 20 74 6f 67 65 74 68 65 72 20 77 69 74 68  on together with
11d40 20 5b 68 65 78 28 29 5d 20 61 6e 64 2f 6f 72 0a   [hex()] and/or.
11d50 20 20 5b 6c 6f 77 65 72 28 29 5d 20 6c 69 6b 65    [lower()] like
11d60 20 74 68 69 73 3a 3c 2f 70 3e 0a 0a 20 20 3c 62   this:</p>..  <b
11d70 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 68 65 78  lockquote>.  hex
11d80 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29  (randomblob(16))
11d90 3c 62 72 3e 3c 2f 62 72 3e 0a 20 20 6c 6f 77 65  <br></br>.  lowe
11da0 72 28 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62  r(hex(randomblob
11db0 28 31 36 29 29 29 0a 20 20 3c 2f 62 6c 6f 63 6b  (16))).  </block
11dc0 71 75 6f 74 65 3e 0a 7d 0a 0a 66 75 6e 63 64 65  quote>.}..funcde
11dd0 66 20 7b 72 65 70 6c 61 63 65 28 58 2c 59 2c 5a  f {replace(X,Y,Z
11de0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72  )} {} {.  ^The r
11df0 65 70 6c 61 63 65 28 58 2c 59 2c 5a 29 20 66 75  eplace(X,Y,Z) fu
11e00 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
11e10 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62   string formed b
11e20 79 20 73 75 62 73 74 69 74 75 74 69 6e 67 0a 20  y substituting. 
11e30 20 73 74 72 69 6e 67 20 5a 20 66 6f 72 20 65 76   string Z for ev
11e40 65 72 79 20 6f 63 63 75 72 72 61 6e 63 65 20 6f  ery occurrance o
11e50 66 20 73 74 72 69 6e 67 20 59 20 69 6e 20 73 74  f string Y in st
11e60 72 69 6e 67 20 58 2e 20 20 5e 54 68 65 20 5b 42  ring X.  ^The [B
11e70 49 4e 41 52 59 5d 0a 20 20 63 6f 6c 6c 61 74 69  INARY].  collati
11e80 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
11e90 73 65 64 20 66 6f 72 20 63 6f 6d 70 61 72 69 73  sed for comparis
11ea0 6f 6e 73 2e 20 20 5e 49 66 20 59 20 69 73 20 61  ons.  ^If Y is a
11eb0 6e 20 65 6d 70 74 79 0a 20 20 73 74 72 69 6e 67  n empty.  string
11ec0 20 74 68 65 6e 20 72 65 74 75 72 6e 20 58 20 75   then return X u
11ed0 6e 63 68 61 6e 67 65 64 2e 20 20 5e 49 66 20 5a  nchanged.  ^If Z
11ee0 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c   is not initiall
11ef0 79 0a 20 20 61 20 73 74 72 69 6e 67 2c 20 69 74  y.  a string, it
11f00 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 55 54   is cast to a UT
11f10 46 2d 38 20 73 74 72 69 6e 67 20 70 72 69 6f 72  F-8 string prior
11f20 20 74 6f 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a   to processing..
11f30 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 6f 75 6e  }..funcdef {roun
11f40 64 28 58 29 20 72 6f 75 6e 64 28 58 2c 59 29 7d  d(X) round(X,Y)}
11f50 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 6f 75   {} {.  ^The rou
11f60 6e 64 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  nd(X,Y) function
11f70 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
11f80 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  g representation
11f90 20 6f 66 20 74 68 65 20 66 6c 6f 61 74 69 6e 67   of the floating
11fa0 2d 70 6f 69 6e 74 0a 20 20 76 61 6c 75 65 20 58  -point.  value X
11fb0 20 72 6f 75 6e 64 65 64 20 74 6f 20 59 20 64 69   rounded to Y di
11fc0 67 69 74 73 20 74 6f 20 74 68 65 20 72 69 67 68  gits to the righ
11fd0 74 20 6f 66 20 74 68 65 20 64 65 63 69 6d 61 6c  t of the decimal
11fe0 20 70 6f 69 6e 74 2e 0a 20 20 5e 49 66 20 74 68   point..  ^If th
11ff0 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20  e Y argument is 
12000 6f 6d 69 74 74 65 64 2c 20 74 68 65 20 58 20 76  omitted, the X v
12010 61 6c 75 65 20 69 73 20 74 72 75 6e 63 61 74 65  alue is truncate
12020 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e  d to an integer.
12030 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 74 72  .}..funcdef {rtr
12040 69 6d 28 58 29 20 72 74 72 69 6d 28 58 2c 59 29  im(X) rtrim(X,Y)
12050 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 74  } {} {.  ^The rt
12060 72 69 6d 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  rim(X,Y) functio
12070 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69  n returns a stri
12080 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d  ng formed by rem
12090 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c  oving any and al
120a0 6c 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 74  l.  characters t
120b0 68 61 74 20 61 70 70 65 61 72 20 69 6e 20 59 20  hat appear in Y 
120c0 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 20 73  from the right s
120d0 69 64 65 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20  ide of X..  ^If 
120e0 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69  the Y argument i
120f0 73 20 6f 6d 69 74 74 65 64 2c 20 72 74 72 69 6d  s omitted, rtrim
12100 28 58 29 20 72 65 6d 6f 76 65 73 20 73 70 61 63  (X) removes spac
12110 65 73 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68  es from the righ
12120 74 0a 20 20 73 69 64 65 20 6f 66 20 58 2e 0a 7d  t.  side of X..}
12130 0a 0a 66 75 6e 63 64 65 66 20 7b 73 6f 75 6e 64  ..funcdef {sound
12140 65 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ex(X)} {} {.  ^T
12150 68 65 20 73 6f 75 6e 64 65 78 28 58 29 20 66 75  he soundex(X) fu
12160 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
12170 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
12180 74 68 65 20 73 6f 75 6e 64 65 78 20 65 6e 63 6f  the soundex enco
12190 64 69 6e 67 20 0a 20 20 6f 66 20 74 68 65 20 73  ding .  of the s
121a0 74 72 69 6e 67 20 58 2e 0a 20 20 5e 54 68 65 20  tring X..  ^The 
121b0 73 74 72 69 6e 67 20 22 3f 30 30 30 22 20 69 73  string "?000" is
121c0 20 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65   returned if the
121d0 20 61 72 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c   argument is NUL
121e0 4c 20 6f 72 20 63 6f 6e 74 61 69 6e 73 0a 20 20  L or contains.  
121f0 6e 6f 20 41 53 43 49 49 20 61 6c 70 68 61 62 65  no ASCII alphabe
12200 74 69 63 20 63 68 61 72 61 63 74 65 72 73 2e 0a  tic characters..
12210 20 20 5e 28 54 68 69 73 20 66 75 6e 63 74 69 6f    ^(This functio
12220 6e 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  n is omitted fro
12230 6d 20 53 51 4c 69 74 65 20 62 79 20 64 65 66 61  m SQLite by defa
12240 75 6c 74 2e 0a 20 20 49 74 20 69 73 20 6f 6e 6c  ult..  It is onl
12250 79 20 61 76 61 69 6c 61 62 6c 65 20 69 66 20 74  y available if t
12260 68 65 20 5b 53 51 4c 49 54 45 5f 53 4f 55 4e 44  he [SQLITE_SOUND
12270 45 58 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  EX] compile-time
12280 20 6f 70 74 69 6f 6e 0a 20 20 69 73 20 75 73 65   option.  is use
12290 64 20 77 68 65 6e 20 53 51 4c 69 74 65 20 69 73  d when SQLite is
122a0 20 62 75 69 6c 74 2e 29 5e 0a 7d 0a 0a 66 75 6e   built.)^.}..fun
122b0 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 73 6f 75  cdef {sqlite_sou
122c0 72 63 65 5f 69 64 28 29 7d 20 7b 7d 20 7b 0a 20  rce_id()} {} {. 
122d0 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 6f 75   ^The sqlite_sou
122e0 72 63 65 5f 69 64 28 29 20 66 75 6e 63 74 69 6f  rce_id() functio
122f0 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69  n returns a stri
12300 6e 67 20 74 68 61 74 20 69 64 65 6e 74 69 66 69  ng that identifi
12310 65 73 20 74 68 65 0a 20 20 73 70 65 63 69 66 69  es the.  specifi
12320 63 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65  c version of the
12330 20 73 6f 75 72 63 65 20 63 6f 64 65 20 74 68 61   source code tha
12340 74 20 77 61 73 20 75 73 65 64 20 74 6f 20 62 75  t was used to bu
12350 69 6c 64 20 74 68 65 20 53 51 4c 69 74 65 0a 20  ild the SQLite. 
12360 20 6c 69 62 72 61 72 79 2e 20 20 5e 54 68 65 20   library.  ^The 
12370 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20  string returned 
12380 62 79 20 73 71 6c 69 74 65 5f 73 6f 75 72 63 65  by sqlite_source
12390 5f 69 64 28 29 20 62 65 67 69 6e 73 20 77 69 74  _id() begins wit
123a0 68 0a 20 20 74 68 65 20 64 61 74 65 20 61 6e 64  h.  the date and
123b0 20 74 69 6d 65 20 74 68 61 74 20 74 68 65 20 73   time that the s
123c0 6f 75 72 63 65 20 63 6f 64 65 20 77 61 73 20 63  ource code was c
123d0 68 65 63 6b 65 64 20 69 6e 20 61 6e 64 20 69 73  hecked in and is
123e0 20 66 6f 6c 6c 6f 77 73 20 62 79 0a 20 20 61 6e   follows by.  an
123f0 20 53 48 41 31 20 68 61 73 68 20 74 68 61 74 20   SHA1 hash that 
12400 75 6e 69 71 75 65 6c 79 20 69 64 65 6e 74 69 66  uniquely identif
12410 69 65 73 20 74 68 65 20 73 6f 75 72 63 65 20 74  ies the source t
12420 72 65 65 2e 20 20 5e 54 68 69 73 20 66 75 6e 63  ree.  ^This func
12430 74 69 6f 6e 20 69 73 0a 20 20 61 6e 20 53 51 4c  tion is.  an SQL
12440 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20   wrapper around 
12450 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 6f 75  the [sqlite3_sou
12460 72 63 65 69 64 28 29 5d 20 43 20 69 6e 74 65 72  rceid()] C inter
12470 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  face..}..funcdef
12480 20 7b 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e   {sqlite_version
12490 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  ()} {} {.  ^The 
124a0 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29  sqlite_version()
124b0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
124c0 73 20 74 68 65 20 76 65 72 73 69 6f 6e 20 73 74  s the version st
124d0 72 69 6e 67 20 66 6f 72 20 74 68 65 20 53 51 4c  ring for the SQL
124e0 69 74 65 0a 20 20 6c 69 62 72 61 72 79 20 74 68  ite.  library th
124f0 61 74 20 69 73 20 72 75 6e 6e 69 6e 67 2e 20 20  at is running.  
12500 5e 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69  ^This function i
12510 73 20 61 6e 20 53 51 4c 0a 20 20 77 72 61 70 70  s an SQL.  wrapp
12520 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73  er around the [s
12530 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f  qlite3_libversio
12540 6e 28 29 5d 20 43 2d 69 6e 74 65 72 66 61 63 65  n()] C-interface
12550 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 75  ..}..funcdef {su
12560 62 73 74 72 28 58 2c 59 2c 5a 29 20 73 75 62 73  bstr(X,Y,Z) subs
12570 74 72 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  tr(X,Y)} {} {.  
12580 5e 54 68 65 20 73 75 62 73 74 72 28 58 2c 59 2c  ^The substr(X,Y,
12590 5a 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Z) function retu
125a0 72 6e 73 20 61 20 73 75 62 73 74 72 69 6e 67 20  rns a substring 
125b0 6f 66 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20  of input string 
125c0 58 20 74 68 61 74 20 62 65 67 69 6e 73 0a 20 20  X that begins.  
125d0 77 69 74 68 20 74 68 65 20 59 2d 74 68 20 63 68  with the Y-th ch
125e0 61 72 61 63 74 65 72 20 61 6e 64 20 77 68 69 63  aracter and whic
125f0 68 20 69 73 20 5a 20 63 68 61 72 61 63 74 65 72  h is Z character
12600 73 20 6c 6f 6e 67 2e 0a 20 20 5e 49 66 20 5a 20  s long..  ^If Z 
12610 69 73 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20  is omitted then 
12620 73 75 62 73 74 72 28 58 2c 59 29 20 72 65 74 75  substr(X,Y) retu
12630 72 6e 73 20 61 6c 6c 20 63 68 61 72 61 63 74 65  rns all characte
12640 72 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6e  r through the en
12650 64 0a 20 20 6f 66 20 74 68 65 20 73 74 72 69 6e  d.  of the strin
12660 67 20 58 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  g X beginning wi
12670 74 68 20 74 68 65 20 59 2d 74 68 2e 0a 20 20 5e  th the Y-th..  ^
12680 54 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 68  The left-most ch
12690 61 72 61 63 74 65 72 20 6f 66 20 58 20 69 73 20  aracter of X is 
126a0 6e 75 6d 62 65 72 20 31 2e 20 20 5e 49 66 20 59  number 1.  ^If Y
126b0 20 69 73 20 6e 65 67 61 74 69 76 65 0a 20 20 74   is negative.  t
126c0 68 65 20 74 68 65 20 66 69 72 73 74 20 63 68 61  he the first cha
126d0 72 61 63 74 65 72 20 6f 66 20 74 68 65 20 73 75  racter of the su
126e0 62 73 74 72 69 6e 67 20 69 73 20 66 6f 75 6e 64  bstring is found
126f0 20 62 79 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f   by counting fro
12700 6d 20 74 68 65 0a 20 20 72 69 67 68 74 20 72 61  m the.  right ra
12710 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 6c 65  ther than the le
12720 66 74 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 65  ft.  ^If Z is ne
12730 67 61 74 69 76 65 20 74 68 65 6e 0a 20 20 74 68  gative then.  th
12740 65 20 61 62 73 28 5a 29 20 63 68 61 72 61 63 74  e abs(Z) charact
12750 65 72 73 20 70 72 65 63 65 65 64 69 6e 67 20 74  ers preceeding t
12760 68 65 20 59 2d 74 68 20 63 68 61 72 61 63 74 65  he Y-th characte
12770 72 20 61 72 65 20 72 65 74 75 72 6e 65 64 2e 0a  r are returned..
12780 20 20 5e 49 66 20 58 20 69 73 20 73 74 72 69 6e    ^If X is strin
12790 67 20 74 68 65 6e 20 63 68 61 72 61 63 74 65 72  g then character
127a0 73 20 69 6e 64 69 63 65 73 20 72 65 66 65 72 20  s indices refer 
127b0 74 6f 20 61 63 74 75 61 6c 20 55 54 46 2d 38 20  to actual UTF-8 
127c0 0a 20 20 63 68 61 72 61 63 74 65 72 73 2e 20 20  .  characters.  
127d0 5e 49 66 20 58 20 69 73 20 61 20 42 4c 4f 42 20  ^If X is a BLOB 
127e0 74 68 65 6e 20 74 68 65 20 69 6e 64 69 63 65 73  then the indices
127f0 20 72 65 66 65 72 20 74 6f 20 62 79 74 65 73 2e   refer to bytes.
12800 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 6f 74  .}..funcdef {tot
12810 61 6c 5f 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d  al_changes()} {}
12820 20 7b 0a 20 20 5e 54 68 65 20 74 6f 74 61 6c 5f   {.  ^The total_
12830 63 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69  changes() functi
12840 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e  on returns the n
12850 75 6d 62 65 72 20 6f 66 20 72 6f 77 20 63 68 61  umber of row cha
12860 6e 67 65 73 0a 20 20 63 61 75 73 65 64 20 62 79  nges.  caused by
12870 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20   INSERT, UPDATE 
12880 6f 72 20 44 45 4c 45 54 45 0a 20 20 73 74 61 74  or DELETE.  stat
12890 65 6d 65 6e 74 73 20 73 69 6e 63 65 20 74 68 65  ements since the
128a0 20 63 75 72 72 65 6e 74 20 64 61 74 61 62 61 73   current databas
128b0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73  e connection was
128c0 20 6f 70 65 6e 65 64 2e 0a 20 20 5e 54 68 69 73   opened..  ^This
128d0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77   function is a w
128e0 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68  rapper around th
128f0 65 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c  e [sqlite3_total
12900 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f  _changes()].  C/
12910 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d  C++ interface..}
12920 0a 0a 66 75 6e 63 64 65 66 20 7b 74 72 69 6d 28  ..funcdef {trim(
12930 58 29 20 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d  X) trim(X,Y)} {}
12940 20 7b 0a 20 20 5e 54 68 65 20 74 72 69 6d 28 58   {.  ^The trim(X
12950 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  ,Y) function ret
12960 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f  urns a string fo
12970 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67  rmed by removing
12980 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63   any and all.  c
12990 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61  haracters that a
129a0 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20  ppear in Y from 
129b0 62 6f 74 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a  both ends of X..
129c0 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75    ^If the Y argu
129d0 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c  ment is omitted,
129e0 20 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73   trim(X) removes
129f0 20 73 70 61 63 65 73 20 66 72 6f 6d 20 62 6f 74   spaces from bot
12a00 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 7d 0a 0a  h ends of X..}..
12a10 66 75 6e 63 64 65 66 20 7b 74 79 70 65 6f 66 28  funcdef {typeof(
12a20 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  X)} {} {.  ^The 
12a30 74 79 70 65 6f 66 28 58 29 20 66 75 6e 63 74 69  typeof(X) functi
12a40 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72  on returns a str
12a50 69 6e 67 20 74 68 61 74 20 69 6e 64 69 63 61 74  ing that indicat
12a60 65 73 20 74 68 65 20 5b 64 61 74 61 74 79 70 65  es the [datatype
12a70 5d 20 6f 66 0a 20 20 74 68 65 20 65 78 70 72 65  ] of.  the expre
12a80 73 73 69 6f 6e 20 58 3a 20 22 6e 75 6c 6c 22 2c  ssion X: "null",
12a90 20 22 69 6e 74 65 67 65 72 22 2c 20 22 72 65 61   "integer", "rea
12aa0 6c 22 2c 20 22 74 65 78 74 22 2c 20 6f 72 20 22  l", "text", or "
12ab0 62 6c 6f 62 22 2e 0a 7d 0a 0a 66 75 6e 63 64 65  blob"..}..funcde
12ac0 66 20 7b 75 70 70 65 72 28 58 29 7d 20 7b 7d 20  f {upper(X)} {} 
12ad0 7b 0a 20 20 5e 54 68 65 20 75 70 70 65 72 28 58  {.  ^The upper(X
12ae0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
12af0 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69 6e 70  ns a copy of inp
12b00 75 74 20 73 74 72 69 6e 67 20 58 20 69 6e 20 77  ut string X in w
12b10 68 69 63 68 20 61 6c 6c 20 0a 20 20 6c 6f 77 65  hich all .  lowe
12b20 72 2d 63 61 73 65 20 41 53 43 49 49 20 63 68 61  r-case ASCII cha
12b30 72 61 63 74 65 72 73 20 61 72 65 20 63 6f 6e 76  racters are conv
12b40 65 72 74 65 64 20 74 6f 20 74 68 65 69 72 20 75  erted to their u
12b50 70 70 65 72 2d 63 61 73 65 20 65 71 75 69 76 61  pper-case equiva
12b60 6c 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  lent..}..funcdef
12b70 20 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29 7d 20 7b   {zeroblob(N)} {
12b80 7d 20 7b 0a 20 20 5e 54 68 65 20 7a 65 72 6f 62  } {.  ^The zerob
12b90 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20  lob(N) function 
12ba0 72 65 74 75 72 6e 73 20 61 20 42 4c 4f 42 20 63  returns a BLOB c
12bb0 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 4e 20 62  onsisting of N b
12bc0 79 74 65 73 20 6f 66 20 30 78 30 30 2e 0a 20 20  ytes of 0x00..  
12bd0 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 73 20 74  SQLite manages t
12be0 68 65 73 65 20 7a 65 72 6f 62 6c 6f 62 73 20 76  hese zeroblobs v
12bf0 65 72 79 20 65 66 66 69 63 69 65 6e 74 6c 79 2e  ery efficiently.
12c00 20 20 5a 65 72 6f 62 6c 6f 62 73 20 63 61 6e 20    Zeroblobs can 
12c10 62 65 20 75 73 65 64 20 74 6f 0a 20 20 72 65 73  be used to.  res
12c20 65 72 76 65 20 73 70 61 63 65 20 66 6f 72 20 61  erve space for a
12c30 20 42 4c 4f 42 20 74 68 61 74 20 69 73 20 6c 61   BLOB that is la
12c40 74 65 72 20 77 72 69 74 74 65 6e 20 75 73 69 6e  ter written usin
12c50 67 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62 6c  g .  [sqlite3_bl
12c60 6f 62 5f 6f 70 65 6e 28 29 20 7c 20 69 6e 63 72  ob_open() | incr
12c70 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f  emental BLOB I/O
12c80 5d 2e 0a 20 20 5e 54 68 69 73 20 53 51 4c 20 66  ]..  ^This SQL f
12c90 75 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65  unction is imple
12ca0 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 74 68 65  mented using the
12cb0 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74   [sqlite3_result
12cc0 5f 7a 65 72 6f 62 6c 6f 62 28 29 5d 0a 20 20 72  _zeroblob()].  r
12cd0 6f 75 74 69 6e 65 20 66 72 6f 6d 20 74 68 65 20  outine from the 
12ce0 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e  C/C++ interface.
12cf0 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c  .}.</tcl>.</tabl
12d00 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  e>..<tcl>.######
12d10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12d20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12d30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12d40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12d50 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
12d60 20 7b 44 61 74 65 20 41 6e 64 20 54 69 6d 65 20   {Date And Time 
12d70 46 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65 66  Functions} datef
12d80 75 6e 63 20 7b 2a 64 61 74 65 66 75 6e 63 7d 0a  unc {*datefunc}.
12d90 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 64 61 74  hd_keywords {dat
12da0 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  e() SQL function
12db0 7d 20 7b 74 69 6d 65 28 29 20 53 51 4c 20 66 75  } {time() SQL fu
12dc0 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f  nction}.hd_keywo
12dd0 72 64 73 20 7b 64 61 74 65 74 69 6d 65 28 29 20  rds {datetime() 
12de0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b 6a  SQL function} {j
12df0 75 6c 69 61 6e 64 61 79 28 29 20 53 51 4c 20 66  ulianday() SQL f
12e00 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77  unction}.hd_keyw
12e10 6f 72 64 73 20 7b 73 74 72 66 74 69 6d 65 28 29  ords {strftime()
12e20 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 3c   SQL function}.<
12e30 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74  /tcl>..<p>.SQLit
12e40 65 20 73 75 70 70 6f 72 74 73 20 66 69 76 65 20  e supports five 
12e50 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75  date and time fu
12e60 6e 63 74 69 6f 6e 73 20 61 73 20 66 6f 6c 6c 6f  nctions as follo
12e70 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 6f  ws:.</p>..<p>.<o
12e80 6c 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74  l>.<li> ^(<b>dat
12e90 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72  e(</b><i>timestr
12ea0 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d  ing, modifier, m
12eb0 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e  odifier, ...</i>
12ec0 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e  <b>)</b>)^ </li>
12ed0 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 74 69 6d 65 28  .<li> ^(<b>time(
12ee0 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e  </b><i>timestrin
12ef0 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64  g, modifier, mod
12f00 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62  ifier, ...</i><b
12f10 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c  >)</b>)^ </li>.<
12f20 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65 74 69 6d  li> ^(<b>datetim
12f30 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72  e(</b><i>timestr
12f40 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d  ing, modifier, m
12f50 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e  odifier, ...</i>
12f60 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e  <b>)</b>)^ </li>
12f70 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 6a 75 6c 69 61  .<li> ^(<b>julia
12f80 6e 64 61 79 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65  nday(</b><i>time
12f90 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72  string, modifier
12fa0 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c  , modifier, ...<
12fb0 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f  /i><b>)</b>)^ </
12fc0 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 73 74  li>.<li> ^(<b>st
12fd0 72 66 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 66 6f  rftime(</b><i>fo
12fe0 72 6d 61 74 2c 20 74 69 6d 65 73 74 72 69 6e 67  rmat, timestring
12ff0 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69  , modifier, modi
13000 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e  fier, ...</i><b>
13010 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 2f  )</b>)^ </li>.</
13020 6f 6c 3e 0a 0a 3c 70 3e 0a 5e 41 6c 6c 20 66 69  ol>..<p>.^All fi
13030 76 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  ve date and time
13040 20 66 75 6e 63 74 69 6f 6e 73 20 74 61 6b 65 20   functions take 
13050 61 20 74 69 6d 65 20 73 74 72 69 6e 67 20 61 73  a time string as
13060 20 61 6e 20 61 72 67 75 6d 65 6e 74 2e 20 0a 5e   an argument. .^
13070 54 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20  The time string 
13080 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a  is followed by z
13090 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64 69  ero or more modi
130a0 66 69 65 72 73 2e 20 0a 5e 54 68 65 20 73 74 72  fiers. .^The str
130b0 66 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e  ftime() function
130c0 20 61 6c 73 6f 20 74 61 6b 65 73 20 61 20 66 6f   also takes a fo
130d0 72 6d 61 74 20 73 74 72 69 6e 67 20 61 73 20 69  rmat string as i
130e0 74 73 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  ts first argumen
130f0 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65  t..</p>..<p>.The
13100 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66   date and time f
13110 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 61 20 73  unctions use a s
13120 75 62 73 65 74 20 6f 66 0a 5b 68 74 74 70 3a 2f  ubset of.[http:/
13130 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72  /en.wikipedia.or
13140 67 2f 77 69 6b 69 2f 49 53 4f 5f 38 36 30 31 20  g/wiki/ISO_8601 
13150 7c 20 49 53 30 2d 38 36 30 31 5d 20 64 61 74 65  | IS0-8601] date
13160 20 61 6e 64 20 74 69 6d 65 0a 66 6f 72 6d 61 74   and time.format
13170 73 2e 0a 5e 54 68 65 20 64 61 74 65 28 29 20 66  s..^The date() f
13180 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
13190 74 68 65 20 64 61 74 65 20 69 6e 20 74 68 69 73  the date in this
131a0 20 66 6f 72 6d 61 74 3a 20 59 59 59 59 2d 4d 4d   format: YYYY-MM
131b0 2d 44 44 2e 20 0a 5e 54 68 65 20 74 69 6d 65 28  -DD. .^The time(
131c0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
131d0 6e 73 20 74 68 65 20 74 69 6d 65 20 61 73 20 48  ns the time as H
131e0 48 3a 4d 4d 3a 53 53 2e 20 0a 5e 54 68 65 20 64  H:MM:SS. .^The d
131f0 61 74 65 74 69 6d 65 28 29 20 66 75 6e 63 74 69  atetime() functi
13200 6f 6e 20 72 65 74 75 72 6e 73 20 22 59 59 59 59  on returns "YYYY
13210 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22  -MM-DD HH:MM:SS"
13220 2e 20 0a 5e 28 54 68 65 20 6a 75 6c 69 61 6e 64  . .^(The juliand
13230 61 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  ay() function re
13240 74 75 72 6e 73 20 74 68 65 20 0a 5b 68 74 74 70  turns the .[http
13250 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e  ://en.wikipedia.
13260 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f  org/wiki/Julian_
13270 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61 79  day | Julian day
13280 5d 20 2d 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f  ] - the.number o
13290 66 20 64 61 79 73 20 73 69 6e 63 65 20 6e 6f 6f  f days since noo
132a0 6e 20 69 6e 20 47 72 65 65 6e 77 69 63 68 20 6f  n in Greenwich o
132b0 6e 20 4e 6f 76 65 6d 62 65 72 20 32 34 2c 20 34  n November 24, 4
132c0 37 31 34 20 42 2e 43 2e 20 0a 28 5b 68 74 74 70  714 B.C. .([http
132d0 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e  ://en.wikipedia.
132e0 6f 72 67 2f 77 69 6b 69 2f 50 72 6f 6c 65 70 74  org/wiki/Prolept
132f0 69 63 5f 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c  ic_Gregorian_cal
13300 65 6e 64 61 72 20 7c 20 50 72 6f 6c 65 70 74 69  endar | Prolepti
13310 63 20 47 72 65 67 6f 72 69 61 6e 20 63 61 6c 65  c Gregorian cale
13320 6e 64 61 72 5d 29 2e 29 5e 0a 5e 54 68 65 20 73  ndar]).)^.^The s
13330 74 72 66 74 69 6d 65 28 29 20 72 6f 75 74 69 6e  trftime() routin
13340 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 61  e returns the da
13350 74 65 20 66 6f 72 6d 61 74 74 65 64 20 61 63 63  te formatted acc
13360 6f 72 64 69 6e 67 20 74 6f 20 0a 74 68 65 20 66  ording to .the f
13370 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73 70 65  ormat string spe
13380 63 69 66 69 65 64 20 61 73 20 74 68 65 20 66 69  cified as the fi
13390 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 5e 54  rst argument..^T
133a0 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67  he format string
133b0 20 73 75 70 70 6f 72 74 73 20 74 68 65 20 6d 6f   supports the mo
133c0 73 74 20 63 6f 6d 6d 6f 6e 20 73 75 62 73 74 69  st common substi
133d0 74 75 74 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e  tutions found in
133e0 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 6f 70   the .[http://op
133f0 65 6e 67 72 6f 75 70 2e 6f 72 67 2f 6f 6e 6c 69  engroup.org/onli
13400 6e 65 70 75 62 73 2f 30 30 37 39 30 38 37 39 39  nepubs/007908799
13410 2f 78 73 68 2f 73 74 72 66 74 69 6d 65 2e 68 74  /xsh/strftime.ht
13420 6d 6c 20 7c 20 73 74 72 66 74 69 6d 65 28 29 20  ml | strftime() 
13430 66 75 6e 63 74 69 6f 6e 5d 0a 66 72 6f 6d 20 74  function].from t
13440 68 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c 69  he standard C li
13450 62 72 61 72 79 20 70 6c 75 73 20 74 77 6f 20 6e  brary plus two n
13460 65 77 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73  ew substitutions
13470 2c 20 25 66 20 61 6e 64 20 25 4a 2e 0a 5e 28 54  , %f and %J..^(T
13480 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 20  he following is 
13490 61 20 63 6f 6d 70 6c 65 74 65 20 6c 69 73 74 20  a complete list 
134a0 6f 66 20 76 61 6c 69 64 20 73 74 72 66 74 69 6d  of valid strftim
134b0 65 28 29 20 73 75 62 73 74 69 74 75 74 69 6f 6e  e() substitution
134c0 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  s:.</p>..<blockq
134d0 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72  uote>.<table bor
134e0 64 65 72 3d 22 30 22 20 63 65 6c 6c 70 61 64 64  der="0" cellpadd
134f0 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70 61 63  ing="0" cellspac
13500 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74 64  ing="0">.<tr><td
13510 3e 3c 74 64 20 77 69 64 74 68 3d 22 31 30 22 3e  ><td width="10">
13520 3c 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 3c  <td></tr>..<tr><
13530 74 64 3e 20 25 64 20 3c 74 64 3e 3c 74 64 3e 20  td> %d <td><td> 
13540 64 61 79 20 6f 66 20 6d 6f 6e 74 68 3a 20 30 30  day of month: 00
13550 0a 3c 74 72 3e 3c 74 64 3e 20 25 66 20 3c 74 64  .<tr><td> %f <td
13560 3e 3c 74 64 3e 20 66 72 61 63 74 69 6f 6e 61 6c  ><td> fractional
13570 20 73 65 63 6f 6e 64 73 3a 20 53 53 2e 53 53 53   seconds: SS.SSS
13580 0a 3c 74 72 3e 3c 74 64 3e 20 25 48 20 3c 74 64  .<tr><td> %H <td
13590 3e 3c 74 64 3e 20 68 6f 75 72 3a 20 30 30 2d 32  ><td> hour: 00-2
135a0 34 20 0a 3c 74 72 3e 3c 74 64 3e 20 25 6a 20 3c  4 .<tr><td> %j <
135b0 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 79  td><td> day of y
135c0 65 61 72 3a 20 30 30 31 2d 33 36 36 0a 3c 74 72  ear: 001-366.<tr
135d0 3e 3c 74 64 3e 20 25 4a 20 3c 74 64 3e 3c 74 64  ><td> %J <td><td
135e0 3e 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d  > Julian day num
135f0 62 65 72 0a 3c 74 72 3e 3c 74 64 3e 20 25 6d 20  ber.<tr><td> %m 
13600 3c 74 64 3e 3c 74 64 3e 20 6d 6f 6e 74 68 3a 20  <td><td> month: 
13610 30 31 2d 31 32 0a 3c 74 72 3e 3c 74 64 3e 20 25  01-12.<tr><td> %
13620 4d 20 3c 74 64 3e 3c 74 64 3e 20 6d 69 6e 75 74  M <td><td> minut
13630 65 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64  e: 00-59.<tr><td
13640 3e 20 25 73 20 3c 74 64 3e 3c 74 64 3e 20 73 65  > %s <td><td> se
13650 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30  conds since 1970
13660 2d 30 31 2d 30 31 0a 3c 74 72 3e 3c 74 64 3e 20  -01-01.<tr><td> 
13670 25 53 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f  %S <td><td> seco
13680 6e 64 73 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c  nds: 00-59.<tr><
13690 74 64 3e 20 25 77 20 3c 74 64 3e 3c 74 64 3e 20  td> %w <td><td> 
136a0 64 61 79 20 6f 66 20 77 65 65 6b 20 30 2d 36 20  day of week 0-6 
136b0 77 69 74 68 20 73 75 6e 64 61 79 3d 3d 30 0a 3c  with sunday==0.<
136c0 74 72 3e 3c 74 64 3e 20 25 57 20 3c 74 64 3e 3c  tr><td> %W <td><
136d0 74 64 3e 20 77 65 65 6b 20 6f 66 20 79 65 61 72  td> week of year
136e0 3a 20 30 30 2d 35 33 0a 3c 74 72 3e 3c 74 64 3e  : 00-53.<tr><td>
136f0 20 25 59 20 3c 74 64 3e 3c 74 64 3e 20 79 65 61   %Y <td><td> yea
13700 72 3a 20 30 30 30 30 2d 39 39 39 39 0a 3c 74 72  r: 0000-9999.<tr
13710 3e 3c 74 64 3e 20 25 25 20 3c 74 64 3e 3c 74 64  ><td> %% <td><td
13720 3e 20 25 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62  > %.</table>.</b
13730 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70  lockquote>)^..<p
13740 3e 0a 5e 28 4e 6f 74 69 63 65 20 74 68 61 74 20  >.^(Notice that 
13750 61 6c 6c 20 6f 74 68 65 72 20 64 61 74 65 20 61  all other date a
13760 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  nd time function
13770 73 20 63 61 6e 20 62 65 20 65 78 70 72 65 73 73  s can be express
13780 65 64 0a 69 6e 20 74 65 72 6d 73 20 6f 66 20 73  ed.in terms of s
13790 74 72 66 74 69 6d 65 28 29 3a 0a 3c 2f 70 3e 0a  trftime():.</p>.
137a0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74  .<blockquote>.<t
137b0 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20  able border="0" 
137c0 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22 20  cellpadding="0" 
137d0 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e  cellspacing="0">
137e0 0a 3c 74 72 3e 3c 74 64 3e 3c 62 3e 46 75 6e 63  .<tr><td><b>Func
137f0 74 69 6f 6e 3c 2f 62 3e 3c 74 64 20 77 69 64 74  tion</b><td widt
13800 68 3d 22 33 30 22 3e 3c 74 64 3e 3c 62 3e 45 71  h="30"><td><b>Eq
13810 75 69 76 61 6c 65 6e 74 20 73 74 72 66 74 69 6d  uivalent strftim
13820 65 28 29 3c 2f 62 3e 0a 3c 74 72 3e 3c 74 64 3e  e()</b>.<tr><td>
13830 20 20 20 64 61 74 65 28 2e 2e 2e 29 20 20 20 20     date(...)    
13840 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66    <td><td>  strf
13850 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 27 2c  time('%Y-%m-%d',
13860 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20   ...).<tr><td>  
13870 20 74 69 6d 65 28 2e 2e 2e 29 20 20 20 20 20 20   time(...)      
13880 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69  <td><td>  strfti
13890 6d 65 28 27 25 48 3a 25 4d 3a 25 53 27 2c 20 2e  me('%H:%M:%S', .
138a0 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64  ..).<tr><td>   d
138b0 61 74 65 74 69 6d 65 28 2e 2e 2e 29 20 20 3c 74  atetime(...)  <t
138c0 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65  d><td>  strftime
138d0 28 27 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d  ('%Y-%m-%d %H:%M
138e0 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c  :%S', ...).<tr><
138f0 74 64 3e 20 20 20 6a 75 6c 69 61 6e 64 61 79 28  td>   julianday(
13900 2e 2e 2e 29 20 3c 74 64 3e 3c 74 64 3e 20 20 73  ...) <td><td>  s
13910 74 72 66 74 69 6d 65 28 27 25 4a 27 2c 20 2e 2e  trftime('%J', ..
13920 2e 29 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c  .).</table>.</bl
13930 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e  ockquote>)^..<p>
13940 0a 54 68 65 20 6f 6e 6c 79 20 72 65 61 73 6f 6e  .The only reason
13950 73 20 66 6f 72 20 70 72 6f 76 69 64 69 6e 67 20  s for providing 
13960 66 75 6e 63 74 69 6f 6e 73 20 6f 74 68 65 72 20  functions other 
13970 74 68 61 6e 20 73 74 72 66 74 69 6d 65 28 29 20  than strftime() 
13980 69 73 0a 66 6f 72 20 63 6f 6e 76 65 6e 69 65 6e  is.for convenien
13990 63 65 20 61 6e 64 20 66 6f 72 20 65 66 66 69 63  ce and for effic
139a0 69 65 6e 63 79 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33  iency..</p>..<h3
139b0 3e 54 69 6d 65 20 53 74 72 69 6e 67 73 3c 2f 68  >Time Strings</h
139c0 33 3e 0a 0a 3c 70 3e 5e 28 41 20 74 69 6d 65 20  3>..<p>^(A time 
139d0 73 74 72 69 6e 67 20 63 61 6e 20 62 65 20 69 6e  string can be in
139e0 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c   any of the foll
139f0 6f 77 69 6e 67 20 66 6f 72 6d 61 74 73 3a 3c 2f  owing formats:</
13a00 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c 69  p>..<ol>.<li> <i
13a10 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 0a  >YYYY-MM-DD</i>.
13a20 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
13a30 44 44 20 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69  DD HH:MM</i>.<li
13a40 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20  > <i>YYYY-MM-DD 
13a50 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69  HH:MM:SS</i>.<li
13a60 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20  > <i>YYYY-MM-DD 
13a70 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e  HH:MM:SS.SSS</i>
13a80 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
13a90 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c  -DD</i><b>T</b><
13aa0 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e  i>HH:MM</i>.<li>
13ab0 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f   <i>YYYY-MM-DD</
13ac0 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a  i><b>T</b><i>HH:
13ad0 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  MM:SS</i>.<li> <
13ae0 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e  i>YYYY-MM-DD</i>
13af0 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d  <b>T</b><i>HH:MM
13b00 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e  :SS.SSS</i>.<li>
13b10 20 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c   <i>HH:MM</i>.<l
13b20 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f  i> <i>HH:MM:SS</
13b30 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d  i>.<li> <i>HH:MM
13b40 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e  :SS.SSS</i>.<li>
13b50 20 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69 3e   <b>now</b>.<li>
13b60 20 3c 69 3e 44 44 44 44 44 44 44 44 44 44 3c 2f   <i>DDDDDDDDDD</
13b70 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 0a  i>.</ol>)^..<p>.
13b80 5e 49 6e 20 66 6f 72 6d 61 74 73 20 35 20 74 68  ^In formats 5 th
13b90 72 6f 75 67 68 20 37 2c 20 74 68 65 20 22 54 22  rough 7, the "T"
13ba0 20 69 73 20 61 20 6c 69 74 65 72 61 6c 20 63 68   is a literal ch
13bb0 61 72 61 63 74 65 72 20 73 65 70 61 72 61 74 69  aracter separati
13bc0 6e 67 20 0a 74 68 65 20 64 61 74 65 20 61 6e 64  ng .the date and
13bd0 20 74 68 65 20 74 69 6d 65 2c 20 61 73 20 72 65   the time, as re
13be0 71 75 69 72 65 64 20 62 79 20 0a 5b 68 74 74 70  quired by .[http
13bf0 3a 2f 2f 77 77 77 2e 77 33 63 2e 6f 72 67 2f 54  ://www.w3c.org/T
13c00 52 2f 4e 4f 54 45 2d 64 61 74 65 74 69 6d 65 20  R/NOTE-datetime 
13c10 7c 20 49 53 4f 2d 38 36 30 31 5d 2e 20 0a 5e 46  | ISO-8601]. .^F
13c20 6f 72 6d 61 74 73 20 38 20 74 68 72 6f 75 67 68  ormats 8 through
13c30 20 31 30 20 74 68 61 74 20 73 70 65 63 69 66 79   10 that specify
13c40 20 6f 6e 6c 79 20 61 20 74 69 6d 65 20 61 73 73   only a time ass
13c50 75 6d 65 20 61 20 64 61 74 65 20 6f 66 20 0a 32  ume a date of .2
13c60 30 30 30 2d 30 31 2d 30 31 2e 20 46 6f 72 6d 61  000-01-01. Forma
13c70 74 20 31 31 2c 20 74 68 65 20 73 74 72 69 6e 67  t 11, the string
13c80 20 27 6e 6f 77 27 2c 20 69 73 20 63 6f 6e 76 65   'now', is conve
13c90 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 0a 63  rted into the .c
13ca0 75 72 72 65 6e 74 20 64 61 74 65 20 61 6e 64 20  urrent date and 
13cb0 74 69 6d 65 20 61 73 20 6f 62 74 61 69 6e 65 64  time as obtained
13cc0 20 66 72 6f 6d 20 74 68 65 20 78 43 75 72 72 65   from the xCurre
13cd0 6e 74 54 69 6d 65 20 6d 65 74 68 6f 64 0a 6f 66  ntTime method.of
13ce0 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 76 66   the [sqlite3_vf
13cf0 73 5d 20 6f 62 6a 65 63 74 20 69 6e 20 75 73 65  s] object in use
13d00 2e 0a 5e 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69  ..^[http://en.wi
13d10 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
13d20 2f 43 6f 6f 72 64 69 6e 61 74 65 64 5f 55 6e 69  /Coordinated_Uni
13d30 76 65 72 73 61 6c 5f 54 69 6d 65 20 7c 20 55 6e  versal_Time | Un
13d40 69 76 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61  iversal Coordina
13d50 74 65 64 20 54 69 6d 65 20 28 55 54 43 29 5d 20  ted Time (UTC)] 
13d60 69 73 20 75 73 65 64 2e 20 0a 5e 46 6f 72 6d 61  is used. .^Forma
13d70 74 20 31 32 20 69 73 20 74 68 65 20 0a 5b 68 74  t 12 is the .[ht
13d80 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69  tp://en.wikipedi
13d90 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61  a.org/wiki/Julia
13da0 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64  n_day | Julian d
13db0 61 79 20 6e 75 6d 62 65 72 5d 0a 65 78 70 72 65  ay number].expre
13dc0 73 73 65 64 20 61 73 20 61 20 66 6c 6f 61 74 69  ssed as a floati
13dd0 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a  ng point value..
13de0 3c 2f 70 3e 0a 0a 3c 68 33 3e 4d 6f 64 69 66 69  </p>..<h3>Modifi
13df0 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68  ers</h3>..<p>^Th
13e00 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20 63 61  e time string ca
13e10 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79  n be followed by
13e20 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f   zero or more mo
13e30 64 69 66 69 65 72 73 20 74 68 61 74 20 0a 61 6c  difiers that .al
13e40 74 65 72 20 74 68 65 20 64 61 74 65 20 61 6e 64  ter the date and
13e50 20 74 69 6d 65 20 73 74 72 69 6e 67 2e 20 5e 20   time string. ^ 
13e60 45 61 63 68 20 6d 6f 64 69 66 69 65 72 0a 69 73  Each modifier.is
13e70 20 61 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f   a transformatio
13e80 6e 20 74 68 61 74 20 69 73 20 61 70 70 6c 69 65  n that is applie
13e90 64 20 74 6f 20 74 68 65 20 74 69 6d 65 20 73 74  d to the time st
13ea0 72 69 6e 67 20 74 6f 20 69 74 73 20 6c 65 66 74  ring to its left
13eb0 2e 0a 5e 4d 6f 64 69 66 69 65 72 73 20 61 72 65  ..^Modifiers are
13ec0 20 61 70 70 6c 69 65 64 20 66 72 6f 6d 20 6c 65   applied from le
13ed0 66 74 20 74 6f 20 72 69 67 68 74 3b 20 6f 72 64  ft to right; ord
13ee0 65 72 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e  er is important.
13ef0 0a 5e 28 54 68 65 20 61 76 61 69 6c 61 62 6c 65  .^(The available
13f00 20 6d 6f 64 69 66 69 65 72 73 20 61 72 65 20 61   modifiers are a
13f10 73 20 66 6f 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a 0a  s follows.</p>..
13f20 3c 6f 6c 3e 0a 3c 6c 69 3e 20 4e 4e 4e 20 64 61  <ol>.<li> NNN da
13f30 79 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 68 6f 75 72  ys.<li> NNN hour
13f40 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 69 6e 75 74  s.<li> NNN minut
13f50 65 73 0a 3c 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e 4e  es.<li> NNN.NNNN
13f60 20 73 65 63 6f 6e 64 73 0a 3c 6c 69 3e 20 4e 4e   seconds.<li> NN
13f70 4e 20 6d 6f 6e 74 68 73 0a 3c 6c 69 3e 20 4e 4e  N months.<li> NN
13f80 4e 20 79 65 61 72 73 0a 3c 6c 69 3e 20 73 74 61  N years.<li> sta
13f90 72 74 20 6f 66 20 6d 6f 6e 74 68 0a 3c 6c 69 3e  rt of month.<li>
13fa0 20 73 74 61 72 74 20 6f 66 20 79 65 61 72 0a 3c   start of year.<
13fb0 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 64 61 79  li> start of day
13fc0 0a 3c 6c 69 3e 20 77 65 65 6b 64 61 79 20 4e 0a  .<li> weekday N.
13fd0 3c 6c 69 3e 20 75 6e 69 78 65 70 6f 63 68 0a 3c  <li> unixepoch.<
13fe0 6c 69 3e 20 6c 6f 63 61 6c 74 69 6d 65 0a 3c 6c  li> localtime.<l
13ff0 69 3e 20 75 74 63 20 0a 3c 2f 6f 6c 3e 29 5e 0a  i> utc .</ol>)^.
14000 0a 3c 70 3e 5e 54 68 65 20 66 69 72 73 74 20 73  .<p>^The first s
14010 69 78 20 6d 6f 64 69 66 69 65 72 73 20 28 31 20  ix modifiers (1 
14020 74 68 72 6f 75 67 68 20 36 29 20 0a 73 69 6d 70  through 6) .simp
14030 6c 79 20 61 64 64 20 74 68 65 20 73 70 65 63 69  ly add the speci
14040 66 69 65 64 20 61 6d 6f 75 6e 74 20 6f 66 20 74  fied amount of t
14050 69 6d 65 20 74 6f 20 74 68 65 20 64 61 74 65 20  ime to the date 
14060 0a 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68  .specified by th
14070 65 20 70 72 65 63 65 64 69 6e 67 20 74 69 6d 65  e preceding time
14080 73 74 72 69 6e 67 2e 0a 5e 4e 6f 74 65 20 74 68  string..^Note th
14090 61 74 20 22 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20  at "&plusmn;NNN 
140a0 6d 6f 6e 74 68 73 22 20 77 6f 72 6b 73 20 62 79  months" works by
140b0 20 72 65 6e 64 65 72 69 6e 67 20 74 68 65 20 6f   rendering the o
140c0 72 69 67 69 6e 61 6c 20 64 61 74 65 20 69 6e 74  riginal date int
140d0 6f 0a 74 68 65 20 59 59 59 59 2d 4d 4d 2d 44 44  o.the YYYY-MM-DD
140e0 20 66 6f 72 6d 61 74 2c 20 61 64 64 69 6e 67 20   format, adding 
140f0 74 68 65 20 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20  the &plusmn;NNN 
14100 74 6f 20 74 68 65 20 4d 4d 20 6d 6f 6e 74 68 20  to the MM month 
14110 76 61 6c 75 65 2c 20 74 68 65 6e 0a 6e 6f 72 6d  value, then.norm
14120 61 6c 69 7a 69 6e 67 20 74 68 65 20 72 65 73 75  alizing the resu
14130 6c 74 2e 20 20 5e 54 68 75 73 2c 20 66 6f 72 20  lt.  ^Thus, for 
14140 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 64 61 74  example, the dat
14150 61 20 32 30 30 31 2d 30 33 2d 33 31 20 6d 6f 64  a 2001-03-31 mod
14160 69 66 69 65 64 0a 62 79 20 27 2b 31 20 6d 6f 6e  ified.by '+1 mon
14170 74 68 27 20 69 6e 69 74 69 61 6c 6c 79 20 79 69  th' initially yi
14180 65 6c 64 73 20 32 30 30 31 2d 30 34 2d 33 31 2c  elds 2001-04-31,
14190 20 62 75 74 20 41 70 72 69 6c 20 6f 6e 6c 79 20   but April only 
141a0 68 61 73 20 33 30 20 64 61 79 73 0a 73 6f 20 74  has 30 days.so t
141b0 68 65 20 64 61 74 65 20 69 73 20 6e 6f 72 6d 61  he date is norma
141c0 6c 69 7a 65 64 20 74 6f 20 32 30 30 31 2d 30 35  lized to 2001-05
141d0 2d 30 31 2e 20 20 5e 41 20 73 69 6d 69 6c 61 72  -01.  ^A similar
141e0 20 65 66 66 65 63 74 20 6f 63 63 75 72 73 20 77   effect occurs w
141f0 68 65 6e 0a 74 68 65 20 6f 72 69 67 69 6e 61 6c  hen.the original
14200 20 64 61 74 65 20 69 73 20 46 65 62 72 75 61 72   date is Februar
14210 79 20 32 39 20 6f 66 20 61 20 6c 65 61 70 79 65  y 29 of a leapye
14220 61 72 20 61 6e 64 20 74 68 65 20 6d 6f 64 69 66  ar and the modif
14230 69 65 72 20 69 73 0a 26 70 6c 75 73 6d 6e 3b 4e  ier is.&plusmn;N
14240 20 79 65 61 72 73 20 77 68 65 72 65 20 4e 20 69   years where N i
14250 73 20 6e 6f 74 20 61 20 6d 75 6c 74 69 70 6c 65  s not a multiple
14260 20 6f 66 20 66 6f 75 72 2e 3c 2f 70 3e 0a 0a 3c   of four.</p>..<
14270 70 3e 5e 54 68 65 20 22 73 74 61 72 74 20 6f 66  p>^The "start of
14280 22 20 6d 6f 64 69 66 69 65 72 73 20 28 37 20 74  " modifiers (7 t
14290 68 72 6f 75 67 68 20 39 29 20 73 68 69 66 74 20  hrough 9) shift 
142a0 74 68 65 20 64 61 74 65 20 62 61 63 6b 77 61 72  the date backwar
142b0 64 73 20 0a 74 6f 20 74 68 65 20 62 65 67 69 6e  ds .to the begin
142c0 6e 69 6e 67 20 6f 66 20 74 68 65 20 63 75 72 72  ning of the curr
142d0 65 6e 74 20 6d 6f 6e 74 68 2c 20 79 65 61 72 20  ent month, year 
142e0 6f 72 20 64 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e  or day.</p>..<p>
142f0 5e 54 68 65 20 22 77 65 65 6b 64 61 79 22 20 6d  ^The "weekday" m
14300 6f 64 69 66 69 65 72 20 61 64 76 61 6e 63 65 73  odifier advances
14310 20 74 68 65 20 64 61 74 65 20 66 6f 72 77 61 72   the date forwar
14320 64 20 74 6f 20 74 68 65 20 6e 65 78 74 20 64 61  d to the next da
14330 74 65 20 0a 77 68 65 72 65 20 74 68 65 20 77 65  te .where the we
14340 65 6b 64 61 79 20 6e 75 6d 62 65 72 20 69 73 20  ekday number is 
14350 4e 2e 20 53 75 6e 64 61 79 20 69 73 20 30 2c 20  N. Sunday is 0, 
14360 4d 6f 6e 64 61 79 20 69 73 20 31 2c 20 61 6e 64  Monday is 1, and
14370 20 73 6f 20 66 6f 72 74 68 2e 3c 2f 70 3e 0a 0a   so forth.</p>..
14380 3c 70 3e 5e 54 68 65 20 22 75 6e 69 78 65 70 6f  <p>^The "unixepo
14390 63 68 22 20 6d 6f 64 69 66 69 65 72 20 28 31 31  ch" modifier (11
143a0 29 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20  ) only works if 
143b0 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66  it immediately f
143c0 6f 6c 6c 6f 77 73 20 0a 61 20 74 69 6d 65 73 74  ollows .a timest
143d0 72 69 6e 67 20 69 6e 20 74 68 65 20 44 44 44 44  ring in the DDDD
143e0 44 44 44 44 44 44 20 66 6f 72 6d 61 74 2e 20 0a  DDDDDD format. .
143f0 5e 54 68 69 73 20 6d 6f 64 69 66 69 65 72 20 63  ^This modifier c
14400 61 75 73 65 73 20 74 68 65 20 44 44 44 44 44 44  auses the DDDDDD
14410 44 44 44 44 20 74 6f 20 62 65 20 69 6e 74 65 72  DDDD to be inter
14420 70 72 65 74 65 64 20 6e 6f 74 20 0a 61 73 20 61  preted not .as a
14430 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62   Julian day numb
14440 65 72 20 61 73 20 69 74 20 6e 6f 72 6d 61 6c 6c  er as it normall
14450 79 20 77 6f 75 6c 64 20 62 65 2c 20 62 75 74 20  y would be, but 
14460 61 73 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69  as.[http://en.wi
14470 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
14480 2f 55 6e 69 78 5f 74 69 6d 65 20 7c 20 55 6e 69  /Unix_time | Uni
14490 78 20 54 69 6d 65 5d 20 2d 20 74 68 65 20 0a 6e  x Time] - the .n
144a0 75 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e 64 73  umber of seconds
144b0 20 73 69 6e 63 65 20 31 39 37 30 2e 20 20 49 66   since 1970.  If
144c0 20 74 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22   the "unixepoch"
144d0 20 6d 6f 64 69 66 69 65 72 20 64 6f 65 73 20 6e   modifier does n
144e0 6f 74 0a 66 6f 6c 6c 6f 77 20 61 20 74 69 6d 65  ot.follow a time
144f0 73 74 72 69 6e 67 20 6f 66 20 74 68 65 20 66 6f  string of the fo
14500 72 6d 20 44 44 44 44 44 44 44 44 44 44 20 77 68  rm DDDDDDDDDD wh
14510 69 63 68 20 65 78 70 72 65 73 73 65 73 20 74 68  ich expresses th
14520 65 20 6e 75 6d 62 65 72 0a 6f 66 20 73 65 63 6f  e number.of seco
14530 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30 20 6f  nds since 1970 o
14540 72 20 69 66 20 6f 74 68 65 72 20 6d 6f 64 69 66  r if other modif
14550 69 65 72 73 0a 73 65 70 61 72 61 74 65 20 74 68  iers.separate th
14560 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f  e "unixepoch" mo
14570 64 69 66 69 65 72 20 66 72 6f 6d 20 70 72 69 6f  difier from prio
14580 72 20 44 44 44 44 44 44 44 44 44 44 20 74 68 65  r DDDDDDDDDD the
14590 6e 20 74 68 65 0a 62 65 68 61 76 69 6f 72 20 69  n the.behavior i
145a0 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 44 75 65  s undefined..Due
145b0 20 74 6f 20 70 72 65 63 69 73 69 6f 6e 20 6c 69   to precision li
145c0 6d 69 74 61 74 69 6f 6e 73 20 69 6d 70 6f 73 65  mitations impose
145d0 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65  d by the impleme
145e0 6e 74 61 74 69 6f 6e 73 20 75 73 65 0a 6f 66 20  ntations use.of 
145f0 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 73 2c  64-bit integers,
14600 20 74 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22   the "unixepoch"
14610 20 6d 6f 64 69 66 69 65 72 20 6f 6e 6c 79 20 77   modifier only w
14620 6f 72 6b 73 20 66 6f 72 0a 64 61 74 65 73 20 62  orks for.dates b
14630 65 74 77 65 65 6e 20 30 30 30 30 2d 30 31 2d 30  etween 0000-01-0
14640 31 20 30 30 3a 30 30 3a 30 30 20 61 6e 64 20 35  1 00:00:00 and 5
14650 33 35 32 2d 31 31 2d 30 31 20 31 30 3a 35 32 3a  352-11-01 10:52:
14660 34 37 20 28 75 6e 69 78 20 74 69 6d 65 73 0a 6f  47 (unix times.o
14670 66 20 2d 36 32 31 36 37 32 31 39 32 30 30 20 74  f -62167219200 t
14680 68 72 6f 75 67 68 20 31 30 36 37 35 31 39 39 31  hrough 106751991
14690 36 37 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  67).</p>..<p>^Th
146a0 65 20 22 6c 6f 63 61 6c 74 69 6d 65 22 20 6d 6f  e "localtime" mo
146b0 64 69 66 69 65 72 20 28 31 32 29 20 61 73 73 75  difier (12) assu
146c0 6d 65 73 20 74 68 65 20 74 69 6d 65 20 73 74 72  mes the time str
146d0 69 6e 67 20 74 6f 20 69 74 73 20 6c 65 66 74 20  ing to its left 
146e0 69 73 20 69 6e 0a 55 6e 69 76 65 72 73 61 6c 20  is in.Universal 
146f0 43 6f 6f 72 64 69 6e 61 74 65 64 20 54 69 6d 65  Coordinated Time
14700 20 28 55 54 43 29 20 61 6e 64 20 61 64 6a 75 73   (UTC) and adjus
14710 74 73 20 74 68 65 20 74 69 6d 65 0a 73 74 72 69  ts the time.stri
14720 6e 67 20 73 6f 20 74 68 61 74 20 69 74 20 64 69  ng so that it di
14730 73 70 6c 61 79 73 20 6c 6f 63 61 6c 74 69 6d 65  splays localtime
14740 2e 20 20 49 66 20 22 6c 6f 63 61 6c 74 69 6d 65  .  If "localtime
14750 22 0a 66 6f 6c 6c 6f 77 73 20 61 20 74 69 6d 65  ".follows a time
14760 20 74 68 61 74 20 69 73 20 6e 6f 74 20 55 54 43   that is not UTC
14770 2c 20 74 68 65 6e 20 74 68 65 20 62 65 68 61 76  , then the behav
14780 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ior is undefined
14790 2e 0a 5e 28 54 68 65 20 22 75 74 63 22 20 69 73  ..^(The "utc" is
147a0 20 74 68 65 20 6f 70 70 6f 73 69 74 65 20 6f 66   the opposite of
147b0 20 22 6c 6f 63 61 6c 74 69 6d 65 22 2e 20 20 22   "localtime".  "
147c0 75 74 63 22 20 61 73 73 75 6d 65 73 20 74 68 61  utc" assumes tha
147d0 74 20 74 68 65 20 73 74 72 69 6e 67 0a 74 6f 20  t the string.to 
147e0 69 74 73 20 6c 65 66 74 20 69 73 20 69 6e 20 74  its left is in t
147f0 68 65 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e  he local timezon
14800 65 20 61 6e 64 20 61 64 6a 75 73 74 73 20 74 68  e and adjusts th
14810 61 74 20 73 74 72 69 6e 67 20 74 6f 20 62 65 20  at string to be 
14820 69 6e 20 55 54 43 2e 29 5e 0a 49 66 20 74 68 65  in UTC.)^.If the
14830 20 70 72 69 6f 72 20 73 74 72 69 6e 67 20 69 73   prior string is
14840 20 6e 6f 74 20 69 6e 20 6c 6f 63 61 6c 74 69 6d   not in localtim
14850 65 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e, then the resu
14860 6c 74 20 6f 66 20 22 75 74 63 22 20 69 73 0a 75  lt of "utc" is.u
14870 6e 64 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c  ndefined.</p>..<
14880 68 33 3e 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e  h3>Examples</h3>
14890 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
148a0 68 65 20 63 75 72 72 65 6e 74 20 64 61 74 65 2e  he current date.
148b0 3c 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  <p>..<blockquote
148c0 3e 53 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f  >SELECT date('no
148d0 77 27 29 3b 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  w');</blockquote
148e0 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74  >)^..^(<p>Comput
148f0 65 20 74 68 65 20 6c 61 73 74 20 64 61 79 20 6f  e the last day o
14900 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f  f the current mo
14910 6e 74 68 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  nth.</p>..<block
14920 71 75 6f 74 65 3e 53 45 4c 45 43 54 20 64 61 74  quote>SELECT dat
14930 65 28 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f  e('now','start o
14940 66 20 6d 6f 6e 74 68 27 2c 27 2b 31 20 6d 6f 6e  f month','+1 mon
14950 74 68 27 2c 27 2d 31 20 64 61 79 27 29 3b 0a 3c  th','-1 day');.<
14960 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
14970 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ^(<p>Compute the
14980 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 67   date and time g
14990 69 76 65 6e 20 61 20 75 6e 69 78 20 74 69 6d 65  iven a unix time
149a0 73 74 61 6d 70 20 31 30 39 32 39 34 31 34 36 36  stamp 1092941466
149b0 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
149c0 74 65 3e 0a 20 20 20 20 53 45 4c 45 43 54 20 64  te>.    SELECT d
149d0 61 74 65 74 69 6d 65 28 31 30 39 32 39 34 31 34  atetime(10929414
149e0 36 36 2c 20 27 75 6e 69 78 65 70 6f 63 68 27 29  66, 'unixepoch')
149f0 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
14a00 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20  ^..^(<p>Compute 
14a10 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  the date and tim
14a20 65 20 67 69 76 65 6e 20 61 20 75 6e 69 78 20 74  e given a unix t
14a30 69 6d 65 73 74 61 6d 70 20 31 30 39 32 39 34 31  imestamp 1092941
14a40 34 36 36 2c 20 61 6e 64 20 0a 63 6f 6d 70 65 6e  466, and .compen
14a50 73 61 74 65 20 66 6f 72 20 79 6f 75 72 20 6c 6f  sate for your lo
14a60 63 61 6c 20 74 69 6d 65 7a 6f 6e 65 2e 3c 2f 70  cal timezone.</p
14a70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
14a80 20 20 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d    SELECT datetim
14a90 65 28 31 30 39 32 39 34 31 34 36 36 2c 20 27 75  e(1092941466, 'u
14aa0 6e 69 78 65 70 6f 63 68 27 2c 20 27 6c 6f 63 61  nixepoch', 'loca
14ab0 6c 74 69 6d 65 27 29 3b 0a 3c 2f 62 6c 6f 63 6b  ltime');.</block
14ac0 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43  quote>)^..^(<p>C
14ad0 6f 6d 70 75 74 65 20 74 68 65 20 63 75 72 72 65  ompute the curre
14ae0 6e 74 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d  nt unix timestam
14af0 70 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  p.</p>..<blockqu
14b00 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 73 74  ote>.  SELECT st
14b10 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77  rftime('%s','now
14b20 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ');.</blockquote
14b30 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74  >)^..^(<p>Comput
14b40 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
14b50 64 61 79 73 20 73 69 6e 63 65 20 74 68 65 20 73  days since the s
14b60 69 67 6e 69 6e 67 20 6f 66 20 74 68 65 20 55 53  igning of the US
14b70 20 44 65 63 6c 61 72 61 74 69 6f 6e 0a 6f 66 20   Declaration.of 
14b80 49 6e 64 65 70 65 6e 64 65 6e 74 2e 3c 2f 70 3e  Independent.</p>
14b90 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
14ba0 20 53 45 4c 45 43 54 20 6a 75 6c 69 61 6e 64 61   SELECT julianda
14bb0 79 28 27 6e 6f 77 27 29 20 2d 20 6a 75 6c 69 61  y('now') - julia
14bc0 6e 64 61 79 28 27 31 37 37 36 2d 30 37 2d 30 34  nday('1776-07-04
14bd0 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ');.</blockquote
14be0 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74  >)^..^(<p>Comput
14bf0 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
14c00 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 61 20  seconds since a 
14c10 70 61 72 74 69 63 75 6c 61 72 20 6d 6f 6d 65 6e  particular momen
14c20 74 20 69 6e 20 32 30 30 34 3a 3c 2f 70 3e 0a 0a  t in 2004:</p>..
14c30 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
14c40 45 4c 45 43 54 20 73 74 72 66 74 69 6d 65 28 27  ELECT strftime('
14c50 25 73 27 2c 27 6e 6f 77 27 29 20 2d 20 73 74 72  %s','now') - str
14c60 66 74 69 6d 65 28 27 25 73 27 2c 27 32 30 30 34  ftime('%s','2004
14c70 2d 30 31 2d 30 31 20 30 32 3a 33 34 3a 35 36 27  -01-01 02:34:56'
14c80 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  );.</blockquote>
14c90 29 5e 0a 0a 5e 28 3c 70 3e 0a 43 6f 6d 70 75 74  )^..^(<p>.Comput
14ca0 65 20 74 68 65 20 64 61 74 65 20 6f 66 20 74 68  e the date of th
14cb0 65 20 66 69 72 73 74 20 54 75 65 73 64 61 79 20  e first Tuesday 
14cc0 69 6e 20 4f 63 74 6f 62 65 72 0a 66 6f 72 20 74  in October.for t
14cd0 68 65 20 63 75 72 72 65 6e 74 20 79 65 61 72 2e  he current year.
14ce0 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
14cf0 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 64 61 74  te>.  SELECT dat
14d00 65 28 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f  e('now','start o
14d10 66 20 79 65 61 72 27 2c 27 2b 39 20 6d 6f 6e 74  f year','+9 mont
14d20 68 73 27 2c 27 77 65 65 6b 64 61 79 20 32 27 29  hs','weekday 2')
14d30 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
14d40 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20  ^..^(<p>Compute 
14d50 74 68 65 20 74 69 6d 65 20 73 69 6e 63 65 20 74  the time since t
14d60 68 65 20 75 6e 69 78 20 65 70 6f 63 68 20 69 6e  he unix epoch in
14d70 20 73 65 63 6f 6e 64 73 20 0a 28 6c 69 6b 65 20   seconds .(like 
14d80 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e  strftime('%s','n
14d90 6f 77 27 29 20 65 78 63 65 70 74 20 69 6e 63 6c  ow') except incl
14da0 75 64 65 73 20 66 72 61 63 74 69 6f 6e 61 6c 20  udes fractional 
14db0 70 61 72 74 29 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  part):</p>..<blo
14dc0 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43  ckquote>.  SELEC
14dd0 54 20 28 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f  T (julianday('no
14de0 77 27 29 20 2d 20 32 34 34 30 35 38 37 2e 35 29  w') - 2440587.5)
14df0 2a 38 36 34 30 30 2e 30 3b 0a 3c 2f 62 6c 6f 63  *86400.0;.</bloc
14e00 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 68 33 3e 43  kquote>)^..<h3>C
14e10 61 76 65 61 74 73 20 41 6e 64 20 42 75 67 73 3c  aveats And Bugs<
14e20 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d  /h3>..<p>The com
14e30 70 75 74 61 74 69 6f 6e 20 6f 66 20 6c 6f 63 61  putation of loca
14e40 6c 20 74 69 6d 65 20 64 65 70 65 6e 64 73 20 68  l time depends h
14e50 65 61 76 69 6c 79 20 6f 6e 20 74 68 65 20 77 68  eavily on the wh
14e60 69 6d 20 0a 6f 66 20 70 6f 6c 69 74 69 63 69 61  im .of politicia
14e70 6e 73 20 61 6e 64 20 69 73 20 74 68 75 73 20 64  ns and is thus d
14e80 69 66 66 69 63 75 6c 74 20 74 6f 20 67 65 74 20  ifficult to get 
14e90 63 6f 72 72 65 63 74 20 66 6f 72 20 0a 61 6c 6c  correct for .all
14ea0 20 6c 6f 63 61 6c 65 73 2e 20 5e 49 6e 20 74 68   locales. ^In th
14eb0 69 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  is implementatio
14ec0 6e 2c 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  n, the standard 
14ed0 43 20 6c 69 62 72 61 72 79 20 0a 66 75 6e 63 74  C library .funct
14ee0 69 6f 6e 20 6c 6f 63 61 6c 74 69 6d 65 5f 72 28  ion localtime_r(
14ef0 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 73 73  ) is used to ass
14f00 69 73 74 20 69 6e 20 74 68 65 20 63 61 6c 63 75  ist in the calcu
14f10 6c 61 74 69 6f 6e 20 6f 66 20 0a 6c 6f 63 61 6c  lation of .local
14f20 20 74 69 6d 65 2e 20 20 5e 28 54 68 65 20 0a 6c   time.  ^(The .l
14f30 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20 43 20 66  ocaltime_r() C f
14f40 75 6e 63 74 69 6f 6e 20 6e 6f 72 6d 61 6c 6c 79  unction normally
14f50 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20   only works for 
14f60 79 65 61 72 73 0a 62 65 74 77 65 65 6e 20 31 39  years.between 19
14f70 37 30 20 61 6e 64 20 32 30 33 37 2e 20 46 6f 72  70 and 2037. For
14f80 20 64 61 74 65 73 20 6f 75 74 73 69 64 65 20 74   dates outside t
14f90 68 69 73 20 72 61 6e 67 65 2c 20 53 51 4c 69 74  his range, SQLit
14fa0 65 20 0a 61 74 74 65 6d 70 74 73 20 74 6f 20 6d  e .attempts to m
14fb0 61 70 20 74 68 65 20 79 65 61 72 20 69 6e 74 6f  ap the year into
14fc0 20 61 6e 20 65 71 75 69 76 61 6c 65 6e 74 20 79   an equivalent y
14fd0 65 61 72 20 77 69 74 68 69 6e 20 0a 74 68 69 73  ear within .this
14fe0 20 72 61 6e 67 65 2c 20 64 6f 20 74 68 65 20 63   range, do the c
14ff0 61 6c 63 75 6c 61 74 69 6f 6e 2c 20 74 68 65 6e  alculation, then
15000 20 6d 61 70 20 74 68 65 20 79 65 61 72 20 62 61   map the year ba
15010 63 6b 2e 29 5e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 5e  ck.)^</p>...<p>^
15020 28 54 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73  (These functions
15030 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 64   only work for d
15040 61 74 65 73 20 62 65 74 77 65 65 6e 20 30 30 30  ates between 000
15050 30 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30  0-01-01 00:00:00
15060 0a 61 6e 64 20 39 39 39 39 2d 31 32 2d 33 31 20  .and 9999-12-31 
15070 32 33 3a 35 39 3a 35 39 20 28 6a 75 6c 69 64 61  23:59:59 (julida
15080 6e 20 64 61 79 20 6e 75 6d 62 65 72 73 20 31 37  n day numbers 17
15090 32 31 30 35 39 2e 35 20 74 68 72 6f 75 67 68 20  21059.5 through 
150a0 35 33 37 33 34 38 34 2e 35 29 2e 29 5e 0a 46 6f  5373484.5).)^.Fo
150b0 72 20 64 61 74 65 73 20 6f 75 74 73 69 64 65 20  r dates outside 
150c0 74 68 61 74 20 72 61 6e 67 65 2c 20 74 68 65 20  that range, the 
150d0 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 73 65  results of these
150e0 0a 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 75  .functions are u
150f0 6e 64 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c  ndefined.</p>..<
15100 70 3e 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64  p>Non-Vista Wind
15110 6f 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 6f 6e  ows platforms on
15120 6c 79 20 73 75 70 70 6f 72 74 20 6f 6e 65 20 73  ly support one s
15130 65 74 20 6f 66 20 44 53 54 20 72 75 6c 65 73 2e  et of DST rules.
15140 20 0a 56 69 73 74 61 20 6f 6e 6c 79 20 73 75 70   .Vista only sup
15150 70 6f 72 74 73 20 74 77 6f 2e 20 54 68 65 72 65  ports two. There
15160 66 6f 72 65 2c 20 6f 6e 20 74 68 65 73 65 20 70  fore, on these p
15170 6c 61 74 66 6f 72 6d 73 2c 20 0a 68 69 73 74 6f  latforms, .histo
15180 72 69 63 61 6c 20 44 53 54 20 63 61 6c 63 75 6c  rical DST calcul
15190 61 74 69 6f 6e 73 20 77 69 6c 6c 20 62 65 20 69  ations will be i
151a0 6e 63 6f 72 72 65 63 74 2e 20 0a 46 6f 72 20 65  ncorrect. .For e
151b0 78 61 6d 70 6c 65 2c 20 69 6e 20 74 68 65 20 55  xample, in the U
151c0 53 2c 20 69 6e 20 32 30 30 37 20 74 68 65 20 44  S, in 2007 the D
151d0 53 54 20 72 75 6c 65 73 20 63 68 61 6e 67 65 64  ST rules changed
151e0 2e 20 0a 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e  . .Non-Vista Win
151f0 64 6f 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 61  dows platforms a
15200 70 70 6c 79 20 74 68 65 20 6e 65 77 20 32 30 30  pply the new 200
15210 37 20 44 53 54 20 72 75 6c 65 73 20 0a 74 6f 20  7 DST rules .to 
15220 61 6c 6c 20 70 72 65 76 69 6f 75 73 20 79 65 61  all previous yea
15230 72 73 20 61 73 20 77 65 6c 6c 2e 20 56 69 73 74  rs as well. Vist
15240 61 20 64 6f 65 73 20 73 6f 6d 65 77 68 61 74 20  a does somewhat 
15250 62 65 74 74 65 72 0a 67 65 74 74 69 6e 67 20 72  better.getting r
15260 65 73 75 6c 74 73 20 63 6f 72 72 65 63 74 20 62  esults correct b
15270 61 63 6b 20 74 6f 20 31 39 38 36 2c 20 77 68 65  ack to 1986, whe
15280 6e 20 74 68 65 20 72 75 6c 65 73 20 77 65 72 65  n the rules were
15290 20 61 6c 73 6f 20 63 68 61 6e 67 65 64 2e 3c 2f   also changed.</
152a0 70 3e 0a 0a 3c 70 3e 41 6c 6c 20 69 6e 74 65 72  p>..<p>All inter
152b0 6e 61 6c 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73  nal computations
152c0 20 61 73 73 75 6d 65 20 74 68 65 20 0a 5b 68 74   assume the .[ht
152d0 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69  tp://en.wikipedi
152e0 61 2e 6f 72 67 2f 77 69 6b 69 2f 47 72 65 67 6f  a.org/wiki/Grego
152f0 72 69 61 6e 5f 63 61 6c 65 6e 64 61 72 20 7c 20  rian_calendar | 
15300 47 72 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64  Gregorian calend
15310 61 72 5d 0a 73 79 73 74 65 6d 2e 20 20 49 74 20  ar].system.  It 
15320 69 73 20 61 6c 73 6f 20 61 73 73 75 6d 65 64 20  is also assumed 
15330 74 68 61 74 20 65 76 65 72 79 0a 64 61 79 20 69  that every.day i
15340 73 20 65 78 61 63 74 6c 79 20 38 36 34 30 30 20  s exactly 86400 
15350 73 65 63 6f 6e 64 73 20 69 6e 20 64 75 72 61 74  seconds in durat
15360 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  ion.</p>..<tcl>.
15370 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15380 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
153a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
153b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
153c0 65 63 74 69 6f 6e 20 7b 41 67 67 72 65 67 61 74  ection {Aggregat
153d0 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67  e Functions} agg
153e0 66 75 6e 63 20 7b 2a 61 67 67 66 75 6e 63 7d 0a  func {*aggfunc}.
153f0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 54 68 65 20  </tcl>..<p>.The 
15400 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
15410 6f 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20  ons shown below 
15420 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79  are available by
15430 20 64 65 66 61 75 6c 74 2e 20 20 41 64 64 69 74   default.  Addit
15440 69 6f 6e 61 6c 0a 61 67 67 72 65 67 61 74 65 20  ional.aggregate 
15450 66 75 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65  functions writte
15460 6e 20 69 6e 20 43 20 6d 61 79 20 62 65 20 61 64  n in C may be ad
15470 64 65 64 20 75 73 69 6e 67 20 74 68 65 20 0a 5b  ded using the .[
15480 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
15490 75 6e 63 74 69 6f 6e 28 29 5d 3c 2f 61 3e 0a 41  unction()]</a>.A
154a0 50 49 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 49 6e  PI.</p>..<p>.^In
154b0 20 61 6e 79 20 61 67 67 72 65 67 61 74 65 20 66   any aggregate f
154c0 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 74 61 6b  unction that tak
154d0 65 73 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75  es a single argu
154e0 6d 65 6e 74 2c 20 74 68 61 74 20 61 72 67 75 6d  ment, that argum
154f0 65 6e 74 0a 63 61 6e 20 62 65 20 70 72 65 63 65  ent.can be prece
15500 64 65 64 20 62 79 20 74 68 65 20 6b 65 79 77 6f  ded by the keywo
15510 72 64 20 44 49 53 54 49 4e 43 54 2e 20 20 5e 49  rd DISTINCT.  ^I
15520 6e 20 73 75 63 68 20 63 61 73 65 73 2c 20 64 75  n such cases, du
15530 70 6c 69 63 61 74 65 0a 65 6c 65 6d 65 6e 74 73  plicate.elements
15540 20 61 72 65 20 66 69 6c 74 65 72 65 64 20 62 65   are filtered be
15550 66 6f 72 65 20 62 65 69 6e 67 20 70 61 73 73 65  fore being passe
15560 64 20 69 6e 74 6f 20 74 68 65 20 61 67 67 72 65  d into the aggre
15570 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 5e  gate function..^
15580 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
15590 20 66 75 6e 63 74 69 6f 6e 20 22 63 6f 75 6e 74   function "count
155a0 28 64 69 73 74 69 6e 63 74 20 58 29 22 20 77 69  (distinct X)" wi
155b0 6c 6c 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75  ll return the nu
155c0 6d 62 65 72 0a 6f 66 20 64 69 73 74 69 6e 63 74  mber.of distinct
155d0 20 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d   values of colum
155e0 6e 20 58 20 69 6e 73 74 65 61 64 20 6f 66 20 74  n X instead of t
155f0 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
15600 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c 0a 76 61 6c 75  of non-null.valu
15610 65 73 20 69 6e 20 63 6f 6c 75 6d 6e 20 58 2e 0a  es in column X..
15620 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72  </p>..<table bor
15630 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e  der=0 cellpaddin
15640 67 3d 31 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63  g=10>.<tcl>.func
15650 64 65 66 20 7b 61 76 67 28 58 29 7d 20 7b 2a 61  def {avg(X)} {*a
15660 76 67 20 7b 61 76 67 28 29 20 61 67 67 72 65 67  vg {avg() aggreg
15670 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b  ate function}} {
15680 0a 20 20 5e 54 68 65 20 61 76 67 28 29 20 66 75  .  ^The avg() fu
15690 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73  nction.  returns
156a0 20 74 68 65 20 61 76 65 72 61 67 65 20 76 61 6c   the average val
156b0 75 65 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55  ue of all non-NU
156c0 4c 4c 20 3c 69 3e 58 3c 2f 69 3e 20 77 69 74 68  LL <i>X</i> with
156d0 69 6e 20 61 0a 20 20 67 72 6f 75 70 2e 20 20 5e  in a.  group.  ^
156e0 53 74 72 69 6e 67 20 61 6e 64 20 42 4c 4f 42 20  String and BLOB 
156f0 76 61 6c 75 65 73 20 74 68 61 74 20 64 6f 20 6e  values that do n
15700 6f 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 6e 75 6d  ot look like num
15710 62 65 72 73 20 61 72 65 0a 20 20 69 6e 74 65 72  bers are.  inter
15720 70 72 65 74 65 64 20 61 73 20 30 2e 0a 20 20 5e  preted as 0..  ^
15730 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76  The result of av
15740 67 28 29 20 69 73 20 61 6c 77 61 79 73 20 61 20  g() is always a 
15750 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
15760 61 6c 75 65 20 61 73 20 6c 6f 6e 67 20 61 73 0a  alue as long as.
15770 20 20 61 74 20 74 68 65 72 65 20 69 73 20 61 74    at there is at
15780 20 6c 65 61 73 74 20 6f 6e 65 20 6e 6f 6e 2d 4e   least one non-N
15790 55 4c 4c 20 69 6e 70 75 74 20 65 76 65 6e 20 69  ULL input even i
157a0 66 20 61 6c 6c 0a 20 20 69 6e 70 75 74 73 20 61  f all.  inputs a
157b0 72 65 20 69 6e 74 65 67 65 72 73 2e 20 20 5e 54  re integers.  ^T
157c0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67  he result of avg
157d0 28 29 20 69 73 20 4e 55 4c 4c 20 69 66 20 61 6e  () is NULL if an
157e0 64 20 6f 6e 6c 79 20 69 66 0a 20 20 74 68 65 72  d only if.  ther
157f0 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c  e are no non-NUL
15800 4c 20 69 6e 70 75 74 73 2e 20 20 0a 7d 0a 0a 66  L inputs.  .}..f
15810 75 6e 63 64 65 66 20 7b 63 6f 75 6e 74 28 58 29  uncdef {count(X)
15820 20 63 6f 75 6e 74 28 2a 29 7d 20 7b 2a 63 6f 75   count(*)} {*cou
15830 6e 74 20 7b 63 6f 75 6e 74 28 29 20 61 67 67 72  nt {count() aggr
15840 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d  egate function}}
15850 20 7b 0a 20 20 5e 54 68 65 20 63 6f 75 6e 74 28   {.  ^The count(
15860 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
15870 72 6e 73 0a 20 20 61 20 63 6f 75 6e 74 20 6f 66  rns.  a count of
15880 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74   the number of t
15890 69 6d 65 73 0a 20 20 74 68 61 74 20 3c 69 3e 58  imes.  that <i>X
158a0 3c 2f 69 3e 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  </i> is not NULL
158b0 20 69 6e 20 61 20 67 72 6f 75 70 2e 20 20 5e 54   in a group.  ^T
158c0 68 65 20 63 6f 75 6e 74 28 2a 29 20 66 75 6e 63  he count(*) func
158d0 74 69 6f 6e 0a 20 20 28 77 69 74 68 20 6e 6f 20  tion.  (with no 
158e0 61 72 67 75 6d 65 6e 74 73 29 20 72 65 74 75 72  arguments) retur
158f0 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  ns the total num
15900 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
15910 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e  he group..}..fun
15920 63 64 65 66 20 7b 67 72 6f 75 70 5f 63 6f 6e 63  cdef {group_conc
15930 61 74 28 58 29 20 67 72 6f 75 70 5f 63 6f 6e 63  at(X) group_conc
15940 61 74 28 58 2c 59 29 7d 20 7b 0a 20 20 2a 67 72  at(X,Y)} {.  *gr
15950 6f 75 70 5f 63 6f 6e 63 61 74 20 7b 67 72 6f 75  oup_concat {grou
15960 70 5f 63 6f 6e 63 61 74 28 29 20 61 67 67 72 65  p_concat() aggre
15970 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d  gate function}.}
15980 20 7b 0a 20 20 5e 54 68 65 20 67 72 6f 75 70 5f   {.  ^The group_
15990 63 6f 6e 63 61 74 28 29 20 66 75 6e 63 74 69 6f  concat() functio
159a0 6e 20 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74  n returns.  a st
159b0 72 69 6e 67 20 77 68 69 63 68 20 69 73 20 74 68  ring which is th
159c0 65 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20  e concatenation 
159d0 6f 66 0a 20 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c  of.  all non-NUL
159e0 4c 20 76 61 6c 75 65 73 20 6f 66 20 3c 69 3e 58  L values of <i>X
159f0 3c 2f 69 3e 2e 20 20 5e 49 66 20 70 61 72 61 6d  </i>.  ^If param
15a00 65 74 65 72 20 3c 69 3e 59 3c 2f 69 3e 20 69 73  eter <i>Y</i> is
15a10 20 70 72 65 73 65 6e 74 20 74 68 65 6e 0a 20 20   present then.  
15a20 69 73 20 69 73 20 75 73 65 64 20 61 73 20 74 68  is is used as th
15a30 65 20 73 65 70 61 72 61 74 6f 72 0a 20 20 62 65  e separator.  be
15a40 74 77 65 65 6e 20 69 6e 73 74 61 6e 63 65 73 20  tween instances 
15a50 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 41  of <i>X</i>.  ^A
15a60 20 63 6f 6d 6d 61 20 28 22 2c 22 29 20 69 73 20   comma (",") is 
15a70 75 73 65 64 20 61 73 20 74 68 65 20 73 65 70 61  used as the sepa
15a80 72 61 74 6f 72 0a 20 20 69 66 20 3c 69 3e 59 3c  rator.  if <i>Y<
15a90 2f 69 3e 20 69 73 20 6f 6d 69 74 74 65 64 2e 20  /i> is omitted. 
15aa0 20 54 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68   The order of th
15ab0 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 65  e concatenated e
15ac0 6c 65 6d 65 6e 74 73 20 69 73 0a 20 20 61 72 62  lements is.  arb
15ad0 69 74 72 61 72 79 2e 0a 7d 0a 0a 66 75 6e 63 64  itrary..}..funcd
15ae0 65 66 20 7b 6d 61 78 28 58 29 7d 20 7b 2a 6d 61  ef {max(X)} {*ma
15af0 78 41 67 67 46 75 6e 63 20 2a 61 67 67 5f 6d 61  xAggFunc *agg_ma
15b00 78 20 7b 6d 61 78 28 29 20 61 67 67 72 65 67 61  x {max() aggrega
15b10 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a  te function}} {.
15b20 20 20 5e 54 68 65 20 6d 61 78 28 29 20 61 67 67    ^The max() agg
15b30 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a  regate function.
15b40 20 20 72 65 74 75 72 6e 73 20 74 68 65 20 6d 61    returns the ma
15b50 78 69 6d 75 6d 20 76 61 6c 75 65 20 6f 66 20 61  ximum value of a
15b60 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  ll values in the
15b70 20 67 72 6f 75 70 2e 0a 20 20 5e 54 68 65 20 6d   group..  ^The m
15b80 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 69 73 20  aximum value is 
15b90 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 77  the value that w
15ba0 6f 75 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64  ould be returned
15bb0 20 6c 61 73 74 20 69 6e 20 61 6e 0a 20 20 4f 52   last in an.  OR
15bc0 44 45 52 20 42 59 20 6f 6e 20 74 68 65 20 73 61  DER BY on the sa
15bd0 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20 5e 4e 55 4c  me column.  ^NUL
15be0 4c 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 66  L is returned if
15bf0 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65   and only if the
15c00 72 65 20 61 72 65 0a 20 20 6e 6f 20 6e 6f 6e 2d  re are.  no non-
15c10 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 74  NULL values in t
15c20 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e  he group..}..fun
15c30 63 64 65 66 20 7b 6d 69 6e 28 58 29 7d 20 7b 2a  cdef {min(X)} {*
15c40 6d 69 6e 41 67 67 46 75 6e 63 20 2a 61 67 67 5f  minAggFunc *agg_
15c50 6d 69 6e 20 7b 6d 69 6e 28 29 20 61 67 67 72 65  min {min() aggre
15c60 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20  gate function}} 
15c70 7b 0a 20 20 5e 54 68 65 20 6d 69 6e 28 29 20 61  {.  ^The min() a
15c80 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
15c90 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68 65 20  n.  returns the 
15ca0 6d 69 6e 69 6d 75 6d 20 6e 6f 6e 2d 4e 55 4c 4c  minimum non-NULL
15cb0 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61   value of all va
15cc0 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75  lues in the grou
15cd0 70 2e 0a 20 20 5e 54 68 65 20 6d 69 6e 69 6d 75  p..  ^The minimu
15ce0 6d 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 66  m value is the f
15cf0 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61  irst non-NULL va
15d00 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20 61  lue that would a
15d10 70 70 65 61 72 0a 20 20 69 6e 20 61 6e 20 4f 52  ppear.  in an OR
15d20 44 45 52 20 42 59 20 6f 66 20 74 68 65 20 63 6f  DER BY of the co
15d30 6c 75 6d 6e 2e 0a 20 20 5e 4e 55 4c 4c 20 69 73  lumn..  ^NULL is
15d40 20 6f 6e 6c 79 20 72 65 74 75 72 6e 65 64 20 69   only returned i
15d50 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68  f and only if th
15d60 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e  ere are no non-N
15d70 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68  ULL values in th
15d80 65 20 0a 20 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66  e .  group..}..f
15d90 75 6e 63 64 65 66 20 7b 73 75 6d 28 58 29 20 74  uncdef {sum(X) t
15da0 6f 74 61 6c 28 58 29 7d 20 7b 0a 20 20 2a 73 75  otal(X)} {.  *su
15db0 6d 46 75 6e 63 20 2a 73 75 6d 20 2a 74 6f 74 61  mFunc *sum *tota
15dc0 6c 0a 20 20 7b 73 75 6d 28 29 20 61 67 67 72 65  l.  {sum() aggre
15dd0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 20  gate function}. 
15de0 20 7b 74 6f 74 61 6c 28 29 20 61 67 67 72 65 67   {total() aggreg
15df0 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20  ate function}.} 
15e00 7b 0a 20 20 54 68 65 20 73 75 6d 28 29 20 61 67  {.  The sum() ag
15e10 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
15e20 0a 20 20 72 65 74 75 72 6e 73 20 73 75 6d 20 6f  .  returns sum o
15e30 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76  f all non-NULL v
15e40 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f  alues in the gro
15e50 75 70 2e 0a 20 20 5e 49 66 20 74 68 65 72 65 20  up..  ^If there 
15e60 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20  are no non-NULL 
15e70 69 6e 70 75 74 20 72 6f 77 73 20 74 68 65 6e 20  input rows then 
15e80 73 75 6d 28 29 20 72 65 74 75 72 6e 73 0a 20 20  sum() returns.  
15e90 4e 55 4c 4c 20 62 75 74 20 74 6f 74 61 6c 28 29  NULL but total()
15ea0 20 72 65 74 75 72 6e 73 20 30 2e 30 2e 0a 20 20   returns 0.0..  
15eb0 5e 4e 55 4c 4c 20 69 73 20 6e 6f 74 20 6e 6f 72  ^NULL is not nor
15ec0 6d 61 6c 6c 79 20 61 20 68 65 6c 70 66 75 6c 20  mally a helpful 
15ed0 72 65 73 75 6c 74 20 66 6f 72 20 74 68 65 20 73  result for the s
15ee0 75 6d 20 6f 66 20 6e 6f 20 72 6f 77 73 0a 20 20  um of no rows.  
15ef0 62 75 74 20 74 68 65 20 53 51 4c 20 73 74 61 6e  but the SQL stan
15f00 64 61 72 64 20 72 65 71 75 69 72 65 73 20 69 74  dard requires it
15f10 20 61 6e 64 20 6d 6f 73 74 20 6f 74 68 65 72 0a   and most other.
15f20 20 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65    SQL database e
15f30 6e 67 69 6e 65 73 20 69 6d 70 6c 65 6d 65 6e 74  ngines implement
15f40 20 73 75 6d 28 29 20 74 68 61 74 20 77 61 79 20   sum() that way 
15f50 73 6f 20 53 51 4c 69 74 65 20 64 6f 65 73 20 69  so SQLite does i
15f60 74 20 69 6e 20 74 68 65 0a 20 20 73 61 6d 65 20  t in the.  same 
15f70 77 61 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  way in order to 
15f80 62 65 20 63 6f 6d 70 61 74 69 62 6c 65 2e 20 20  be compatible.  
15f90 20 5e 54 68 65 20 6e 6f 6e 2d 73 74 61 6e 64 61   ^The non-standa
15fa0 72 64 20 74 6f 74 61 6c 28 29 20 66 75 6e 63 74  rd total() funct
15fb0 69 6f 6e 0a 20 20 69 73 20 70 72 6f 76 69 64 65  ion.  is provide
15fc0 64 20 61 73 20 61 20 63 6f 6e 76 65 6e 69 65 6e  d as a convenien
15fd0 74 20 77 61 79 20 74 6f 20 77 6f 72 6b 20 61 72  t way to work ar
15fe0 6f 75 6e 64 20 74 68 69 73 20 64 65 73 69 67 6e  ound this design
15ff0 20 70 72 6f 62 6c 65 6d 0a 20 20 69 6e 20 74 68   problem.  in th
16000 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e 3c  e SQL language.<
16010 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 54 68 65 20 72  /p>..  <p>^The r
16020 65 73 75 6c 74 20 6f 66 20 74 6f 74 61 6c 28 29  esult of total()
16030 20 69 73 20 61 6c 77 61 79 73 20 61 20 66 6c 6f   is always a flo
16040 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75  ating point valu
16050 65 2e 0a 20 20 5e 54 68 65 20 72 65 73 75 6c 74  e..  ^The result
16060 20 6f 66 20 73 75 6d 28 29 20 69 73 20 61 6e 20   of sum() is an 
16070 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 66  integer value if
16080 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e   all non-NULL in
16090 70 75 74 73 20 61 72 65 20 69 6e 74 65 67 65 72  puts are integer
160a0 73 2e 0a 20 20 5e 49 66 20 61 6e 79 20 69 6e 70  s..  ^If any inp
160b0 75 74 20 74 6f 20 73 75 6d 28 29 20 69 73 20 6e  ut to sum() is n
160c0 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65  either an intege
160d0 72 20 6f 72 20 61 20 4e 55 4c 4c 0a 20 20 74 68  r or a NULL.  th
160e0 65 6e 20 73 75 6d 28 29 20 72 65 74 75 72 6e 73  en sum() returns
160f0 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e   a floating poin
16100 74 20 76 61 6c 75 65 0a 20 20 77 68 69 63 68 20  t value.  which 
16110 6d 69 67 68 74 20 62 65 20 61 6e 20 61 70 70 72  might be an appr
16120 6f 78 69 6d 61 74 69 6f 6e 20 74 6f 20 74 68 65  oximation to the
16130 20 74 72 75 65 20 73 75 6d 2e 3c 2f 70 3e 0a 0a   true sum.</p>..
16140 20 20 3c 70 3e 5e 53 75 6d 28 29 20 77 69 6c 6c    <p>^Sum() will
16150 20 74 68 72 6f 77 20 61 6e 20 22 69 6e 74 65 67   throw an "integ
16160 65 72 20 6f 76 65 72 66 6c 6f 77 22 20 65 78 63  er overflow" exc
16170 65 70 74 69 6f 6e 20 69 66 20 61 6c 6c 20 69 6e  eption if all in
16180 70 75 74 73 0a 20 20 61 72 65 20 69 6e 74 65 67  puts.  are integ
16190 65 72 73 20 6f 72 20 4e 55 4c 4c 0a 20 20 61 6e  ers or NULL.  an
161a0 64 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76 65  d an integer ove
161b0 72 66 6c 6f 77 20 6f 63 63 75 72 73 20 61 74 20  rflow occurs at 
161c0 61 6e 79 20 70 6f 69 6e 74 20 64 75 72 69 6e 67  any point during
161d0 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e   the computation
161e0 2e 0a 20 20 5e 54 6f 74 61 6c 28 29 20 6e 65 76  ..  ^Total() nev
161f0 65 72 20 74 68 72 6f 77 73 20 61 6e 20 69 6e 74  er throws an int
16200 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 2e 0a 7d  eger overflow..}
16210 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c 65 3e  .</tcl>.</table>
16220 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
16230 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16270 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 49  ######.Section I
16280 4e 53 45 52 54 20 69 6e 73 65 72 74 20 7b 49 4e  NSERT insert {IN
16290 53 45 52 54 20 2a 49 4e 53 45 52 54 73 7d 0a 0a  SERT *INSERTs}..
162a0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 69 6e  BubbleDiagram in
162b0 73 65 72 74 2d 73 74 6d 74 20 31 0a 3c 2f 74 63  sert-stmt 1.</tc
162c0 6c 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e 53 45 52  l>..<p>The INSER
162d0 54 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 65  T statement come
162e0 73 20 69 6e 20 74 68 72 65 65 20 62 61 73 69 63  s in three basic
162f0 20 66 6f 72 6d 73 2e 20 20 5e 54 68 65 20 66 69   forms.  ^The fi
16300 72 73 74 20 66 6f 72 6d 0a 28 77 69 74 68 20 74  rst form.(with t
16310 68 65 20 22 56 41 4c 55 45 53 22 20 6b 65 79 77  he "VALUES" keyw
16320 6f 72 64 29 20 63 72 65 61 74 65 73 20 61 20 73  ord) creates a s
16330 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77 20 69 6e  ingle new row in
16340 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62   an existing tab
16350 6c 65 2e 0a 5e 49 66 20 6e 6f 20 63 6f 6c 75 6d  le..^If no colum
16360 6e 2d 6c 69 73 74 20 69 73 20 73 70 65 63 69 66  n-list is specif
16370 69 65 64 20 74 68 65 6e 20 74 68 65 20 6e 75 6d  ied then the num
16380 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20 6d 75  ber of values mu
16390 73 74 0a 62 65 20 74 68 65 20 73 61 6d 65 20 61  st.be the same a
163a0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
163b0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
163c0 61 62 6c 65 2e 20 20 5e 49 66 20 61 20 63 6f 6c  able.  ^If a col
163d0 75 6d 6e 2d 6c 69 73 74 0a 69 73 20 73 70 65 63  umn-list.is spec
163e0 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20  ified, then the 
163f0 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73  number of values
16400 20 6d 75 73 74 20 6d 61 74 63 68 20 74 68 65 20   must match the 
16410 6e 75 6d 62 65 72 20 6f 66 0a 73 70 65 63 69 66  number of.specif
16420 69 65 64 20 63 6f 6c 75 6d 6e 73 2e 20 20 5e 43  ied columns.  ^C
16430 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61  olumns of the ta
16440 62 6c 65 20 74 68 61 74 20 64 6f 20 6e 6f 74 20  ble that do not 
16450 61 70 70 65 61 72 20 69 6e 20 74 68 65 0a 63 6f  appear in the.co
16460 6c 75 6d 6e 20 6c 69 73 74 20 61 72 65 20 66 69  lumn list are fi
16470 6c 6c 65 64 20 77 69 74 68 20 74 68 65 20 64 65  lled with the de
16480 66 61 75 6c 74 20 76 61 6c 75 65 2c 20 6f 72 20  fault value, or 
16490 77 69 74 68 20 4e 55 4c 4c 20 69 66 20 6e 6f 0a  with NULL if no.
164a0 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69 73  default value is
164b0 20 73 70 65 63 69 66 69 65 64 2e 0a 3c 2f 70 3e   specified..</p>
164c0 0a 0a 3c 70 3e 5e 54 68 65 20 73 65 63 6f 6e 64  ..<p>^The second
164d0 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 49 4e 53   form of the INS
164e0 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 74 61  ERT statement ta
164f0 6b 65 73 20 69 74 73 20 64 61 74 61 20 66 72 6f  kes its data fro
16500 6d 20 61 0a 53 45 4c 45 43 54 20 73 74 61 74 65  m a.SELECT state
16510 6d 65 6e 74 2e 20 20 5e 54 68 65 20 6e 75 6d 62  ment.  ^The numb
16520 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
16530 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
16540 68 65 0a 53 45 4c 45 43 54 20 6d 75 73 74 20 65  he.SELECT must e
16550 78 61 63 74 6c 79 20 6d 61 74 63 68 20 74 68 65  xactly match the
16560 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
16570 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ns in the table 
16580 69 66 0a 6e 6f 20 63 6f 6c 75 6d 6e 20 6c 69 73  if.no column lis
16590 74 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  t is specified, 
165a0 6f 72 20 69 74 20 6d 75 73 74 20 6d 61 74 63 68  or it must match
165b0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
165c0 6f 6c 75 6d 6e 73 0a 6e 61 6d 65 20 69 6e 20 74  olumns.name in t
165d0 68 65 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 2e 20  he column list. 
165e0 20 5e 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73   ^A new entry is
165f0 20 6d 61 64 65 20 69 6e 20 74 68 65 20 74 61 62   made in the tab
16600 6c 65 0a 66 6f 72 20 65 76 65 72 79 20 72 6f 77  le.for every row
16610 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 72   of the SELECT r
16620 65 73 75 6c 74 2e 20 20 5e 54 68 65 20 53 45 4c  esult.  ^The SEL
16630 45 43 54 20 6d 61 79 20 62 65 20 73 69 6d 70 6c  ECT may be simpl
16640 65 0a 6f 72 20 63 6f 6d 70 6f 75 6e 64 2e 3c 2f  e.or compound.</
16650 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 74 68 69 72  p>..<p>^The thir
16660 64 20 66 6f 72 6d 20 6f 66 20 61 6e 20 49 4e 53  d form of an INS
16670 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ERT statement is
16680 20 77 69 74 68 20 44 45 46 41 55 4c 54 20 56 41   with DEFAULT VA
16690 4c 55 45 53 2e 0a 5e 54 68 65 20 49 4e 53 45 52  LUES..^The INSER
166a0 54 20 2e 2e 2e 20 44 45 46 41 55 4c 54 20 56 41  T ... DEFAULT VA
166b0 4c 55 45 53 20 73 74 61 74 65 6d 65 6e 74 20 73  LUES statement s
166c0 69 6d 70 6c 79 20 63 72 65 61 74 65 73 20 61 20  imply creates a 
166d0 73 69 6e 67 6c 65 20 6e 65 77 0a 72 6f 77 20 69  single new.row i
166e0 6e 20 74 68 65 20 74 61 62 6c 65 20 69 6e 20 77  n the table in w
166f0 68 69 63 68 20 65 61 63 68 20 63 6f 6c 75 6d 6e  hich each column
16700 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20   is filled with 
16710 69 74 73 20 64 65 66 61 75 6c 74 20 76 61 6c 75  its default valu
16720 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  e.</p>..<p>^The 
16730 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63  optional conflic
16740 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20  t-clause allows 
16750 74 68 65 20 73 70 65 63 69 66 69 63 61 74 69 6f  the specificatio
16760 6e 20 6f 66 20 61 6e 20 61 6c 74 65 72 6e 61 74  n of an alternat
16770 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63  ive.constraint c
16780 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
16790 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20  on algorithm to 
167a0 75 73 65 20 64 75 72 69 6e 67 20 74 68 69 73 20  use during this 
167b0 6f 6e 65 20 49 4e 53 45 52 54 20 63 6f 6d 6d 61  one INSERT comma
167c0 6e 64 2e 0a 53 65 65 20 74 68 65 20 73 65 63 74  nd..See the sect
167d0 69 6f 6e 20 74 69 74 6c 65 64 0a 5b 4f 4e 20 43  ion titled.[ON C
167e0 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64  ONFLICT] for add
167f0 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
16800 69 6f 6e 2e 0a 5e 46 6f 72 20 63 6f 6d 70 61 74  ion..^For compat
16810 69 62 69 6c 69 74 79 20 77 69 74 68 20 4d 79 53  ibility with MyS
16820 51 4c 2c 20 74 68 65 20 70 61 72 73 65 72 20 61  QL, the parser a
16830 6c 6c 6f 77 73 20 74 68 65 20 75 73 65 20 6f 66  llows the use of
16840 20 74 68 65 0a 73 69 6e 67 6c 65 20 6b 65 79 77   the.single keyw
16850 6f 72 64 20 3c 61 20 68 72 65 66 3d 22 6c 61 6e  ord <a href="lan
16860 67 5f 72 65 70 6c 61 63 65 2e 68 74 6d 6c 22 3e  g_replace.html">
16870 52 45 50 4c 41 43 45 3c 2f 61 3e 20 61 73 20 61  REPLACE</a> as a
16880 6e 20 0a 61 6c 69 61 73 20 66 6f 72 20 22 49 4e  n .alias for "IN
16890 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43 45 22  SERT OR REPLACE"
168a0 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65  ..</p>..<p>^(The
168b0 20 6f 70 74 69 6f 6e 61 6c 20 22 3c 69 3e 64 61   optional "<i>da
168c0 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c  tabase-name</i><
168d0 62 3e 2e 3c 2f 62 3e 22 20 70 72 65 66 69 78 20  b>.</b>" prefix 
168e0 6f 6e 20 74 68 65 20 3c 69 3e 74 61 62 6c 65 2d  on the <i>table-
168f0 6e 61 6d 65 3c 2f 69 3e 0a 69 73 20 73 75 70 70  name</i>.is supp
16900 6f 72 74 20 66 6f 72 20 74 6f 70 2d 6c 65 76 65  ort for top-leve
16910 6c 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  l INSERT stateme
16920 6e 74 73 20 6f 6e 6c 79 2e 29 5e 20 20 5e 54 68  nts only.)^  ^Th
16930 65 20 74 61 62 6c 65 20 6e 61 6d 65 20 6d 75 73  e table name mus
16940 74 20 62 65 0a 75 6e 71 75 61 6c 69 66 69 65 64  t be.unqualified
16950 20 66 6f 72 20 49 4e 53 45 52 54 20 73 74 61 74   for INSERT stat
16960 65 6d 65 6e 74 73 20 74 68 61 74 20 6f 63 63 75  ements that occu
16970 72 20 77 69 74 68 69 6e 20 5b 43 52 45 41 54 45  r within [CREATE
16980 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d   TRIGGER] statem
16990 65 6e 74 73 2e 0a 5e 53 69 6d 69 6c 61 72 6c 79  ents..^Similarly
169a0 2c 20 74 68 65 20 22 44 45 46 41 55 4c 54 20 56  , the "DEFAULT V
169b0 41 4c 55 45 53 22 20 66 6f 72 6d 20 6f 66 20 74  ALUES" form of t
169c0 68 65 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  he INSERT statem
169d0 65 6e 74 20 69 73 20 73 75 70 70 6f 72 74 65 64  ent is supported
169e0 20 66 6f 72 0a 74 6f 70 2d 6c 65 76 65 6c 20 49   for.top-level I
169f0 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73  NSERT statements
16a00 20 6f 6e 6c 79 20 61 6e 64 20 6e 6f 74 20 66 6f   only and not fo
16a10 72 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  r INSERT stateme
16a20 6e 74 73 20 77 69 74 68 69 6e 0a 74 72 69 67 67  nts within.trigg
16a30 65 72 73 2e 0a 3c 70 3e 0a 0a 3c 74 63 6c 3e 0a  ers..<p>..<tcl>.
16a40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16a50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16a60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16a70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16a80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
16a90 65 63 74 69 6f 6e 20 7b 4f 4e 20 43 4f 4e 46 4c  ection {ON CONFL
16aa0 49 43 54 20 63 6c 61 75 73 65 7d 20 63 6f 6e 66  ICT clause} conf
16ab0 6c 69 63 74 20 7b 7b 63 6f 6e 66 6c 69 63 74 20  lict {{conflict 
16ac0 63 6c 61 75 73 65 7d 20 7b 4f 4e 20 43 4f 4e 46  clause} {ON CONF
16ad0 4c 49 43 54 7d 7d 0a 0a 42 75 62 62 6c 65 44 69  LICT}}..BubbleDi
16ae0 61 67 72 61 6d 20 63 6f 6e 66 6c 69 63 74 2d 63  agram conflict-c
16af0 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  lause.</tcl>..<p
16b00 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  >The ON CONFLICT
16b10 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 61   clause is not a
16b20 20 73 65 70 61 72 61 74 65 20 53 51 4c 20 63 6f   separate SQL co
16b30 6d 6d 61 6e 64 2e 20 20 49 74 20 69 73 20 61 0a  mmand.  It is a.
16b40 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 63 6c 61  non-standard cla
16b50 75 73 65 20 74 68 61 74 20 63 61 6e 20 61 70 70  use that can app
16b60 65 61 72 20 69 6e 20 6d 61 6e 79 20 6f 74 68 65  ear in many othe
16b70 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2e 0a  r SQL commands..
16b80 49 74 20 69 73 20 67 69 76 65 6e 20 69 74 73 20  It is given its 
16b90 6f 77 6e 20 73 65 63 74 69 6f 6e 20 69 6e 20 74  own section in t
16ba0 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 62 65 63  his document bec
16bb0 61 75 73 65 20 69 74 20 69 73 20 6e 6f 74 0a 70  ause it is not.p
16bc0 61 72 74 20 6f 66 20 73 74 61 6e 64 61 72 64 20  art of standard 
16bd0 53 51 4c 20 61 6e 64 20 74 68 65 72 65 66 6f 72  SQL and therefor
16be0 65 20 6d 69 67 68 74 20 6e 6f 74 20 62 65 20 66  e might not be f
16bf0 61 6d 69 6c 69 61 72 2e 3c 2f 70 3e 0a 0a 3c 70  amiliar.</p>..<p
16c00 3e 5e 54 68 65 20 73 79 6e 74 61 78 20 66 6f 72  >^The syntax for
16c10 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   the ON CONFLICT
16c20 20 63 6c 61 75 73 65 20 69 73 20 61 73 20 73 68   clause is as sh
16c30 6f 77 6e 20 61 62 6f 76 65 20 66 6f 72 0a 74 68  own above for.th
16c40 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63  e CREATE TABLE c
16c50 6f 6d 6d 61 6e 64 2e 20 20 5e 46 6f 72 20 74 68  ommand.  ^For th
16c60 65 20 49 4e 53 45 52 54 20 61 6e 64 0a 55 50 44  e INSERT and.UPD
16c70 41 54 45 20 63 6f 6d 6d 61 6e 64 73 2c 20 74 68  ATE commands, th
16c80 65 20 6b 65 79 77 6f 72 64 73 20 22 4f 4e 20 43  e keywords "ON C
16c90 4f 4e 46 4c 49 43 54 22 20 61 72 65 20 72 65 70  ONFLICT" are rep
16ca0 6c 61 63 65 64 20 62 79 20 22 4f 52 22 2c 20 74  laced by "OR", t
16cb0 6f 20 6d 61 6b 65 0a 74 68 65 20 73 79 6e 74 61  o make.the synta
16cc0 78 20 73 65 65 6d 20 6d 6f 72 65 20 6e 61 74 75  x seem more natu
16cd0 72 61 6c 2e 20 20 5e 46 6f 72 20 65 78 61 6d 70  ral.  ^For examp
16ce0 6c 65 2c 20 69 6e 73 74 65 61 64 20 6f 66 0a 22  le, instead of."
16cf0 49 4e 53 45 52 54 20 4f 4e 20 43 4f 4e 46 4c 49  INSERT ON CONFLI
16d00 43 54 20 49 47 4e 4f 52 45 22 20 77 65 20 68 61  CT IGNORE" we ha
16d10 76 65 20 22 49 4e 53 45 52 54 20 4f 52 20 49 47  ve "INSERT OR IG
16d20 4e 4f 52 45 22 2e 0a 54 68 65 20 6b 65 79 77 6f  NORE"..The keywo
16d30 72 64 73 20 63 68 61 6e 67 65 20 62 75 74 20 74  rds change but t
16d40 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68  he meaning of th
16d50 65 20 63 6c 61 75 73 65 20 69 73 20 74 68 65 20  e clause is the 
16d60 73 61 6d 65 0a 65 69 74 68 65 72 20 77 61 79 2e  same.either way.
16d70 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4f 4e  </p>..<p>^The ON
16d80 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
16d90 20 73 70 65 63 69 66 69 65 73 20 61 6e 20 61 6c   specifies an al
16da0 67 6f 72 69 74 68 6d 20 75 73 65 64 20 74 6f 20  gorithm used to 
16db0 72 65 73 6f 6c 76 65 0a 63 6f 6e 73 74 72 61 69  resolve.constrai
16dc0 6e 74 20 63 6f 6e 66 6c 69 63 74 73 2e 20 20 5e  nt conflicts.  ^
16dd0 54 68 65 72 65 20 61 72 65 20 66 69 76 65 20 63  There are five c
16de0 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
16df0 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 63 68 6f  on algorithm cho
16e00 69 63 65 73 3a 0a 52 4f 4c 4c 42 41 43 4b 2c 20  ices:.ROLLBACK, 
16e10 41 42 4f 52 54 2c 20 46 41 49 4c 2c 20 49 47 4e  ABORT, FAIL, IGN
16e20 4f 52 45 2c 20 61 6e 64 20 52 45 50 4c 41 43 45  ORE, and REPLACE
16e30 2e 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20 63  ..^The default c
16e40 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
16e50 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  on algorithm is 
16e60 41 42 4f 52 54 2e 20 20 54 68 69 73 0a 69 73 20  ABORT.  This.is 
16e70 77 68 61 74 20 74 68 65 79 20 6d 65 61 6e 3a 3c  what they mean:<
16e80 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c 62  /p>..<dl>.<dt><b
16e90 3e 52 4f 4c 4c 42 41 43 4b 3c 2f 62 3e 3c 2f 64  >ROLLBACK</b></d
16ea0 74 3e 0a 3c 64 64 3e 3c 70 3e 5e 57 68 65 6e 20  t>.<dd><p>^When 
16eb0 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
16ec0 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 61  lation occurs, a
16ed0 6e 20 69 6d 6d 65 64 69 61 74 65 20 52 4f 4c 4c  n immediate ROLL
16ee0 42 41 43 4b 0a 6f 63 63 75 72 73 2c 20 74 68 75  BACK.occurs, thu
16ef0 73 20 65 6e 64 69 6e 67 20 74 68 65 20 63 75 72  s ending the cur
16f00 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
16f10 2c 20 61 6e 64 20 74 68 65 20 63 6f 6d 6d 61 6e  , and the comman
16f20 64 20 61 62 6f 72 74 73 0a 77 69 74 68 20 61 20  d aborts.with a 
16f30 72 65 74 75 72 6e 20 63 6f 64 65 20 6f 66 20 53  return code of S
16f40 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
16f50 2e 20 20 5e 49 66 20 6e 6f 20 74 72 61 6e 73 61  .  ^If no transa
16f60 63 74 69 6f 6e 20 69 73 0a 61 63 74 69 76 65 20  ction is.active 
16f70 28 6f 74 68 65 72 20 74 68 61 6e 20 74 68 65 20  (other than the 
16f80 69 6d 70 6c 69 65 64 20 74 72 61 6e 73 61 63 74  implied transact
16f90 69 6f 6e 20 74 68 61 74 20 69 73 20 63 72 65 61  ion that is crea
16fa0 74 65 64 20 6f 6e 20 65 76 65 72 79 0a 63 6f 6d  ted on every.com
16fb0 6d 61 6e 64 29 20 74 68 65 6e 20 74 68 69 73 20  mand) then this 
16fc0 61 6c 67 6f 72 69 74 68 6d 20 77 6f 72 6b 73 20  algorithm works 
16fd0 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52  the same as ABOR
16fe0 54 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  T.</p></dd>..<dt
16ff0 3e 3c 62 3e 41 42 4f 52 54 3c 2f 62 3e 3c 2f 64  ><b>ABORT</b></d
17000 74 3e 0a 3c 64 64 3e 3c 70 3e 5e 57 68 65 6e 20  t>.<dd><p>^When 
17010 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
17020 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74  lation occurs, t
17030 68 65 20 63 6f 6d 6d 61 6e 64 20 62 61 63 6b 73  he command backs
17040 20 6f 75 74 0a 61 6e 79 20 70 72 69 6f 72 20 63   out.any prior c
17050 68 61 6e 67 65 73 20 69 74 20 6d 69 67 68 74 20  hanges it might 
17060 68 61 76 65 20 6d 61 64 65 20 61 6e 64 20 61 62  have made and ab
17070 6f 72 74 73 20 77 69 74 68 20 61 20 72 65 74 75  orts with a retu
17080 72 6e 20 63 6f 64 65 0a 6f 66 20 53 51 4c 49 54  rn code.of SQLIT
17090 45 5f 43 4f 4e 53 54 52 41 49 4e 54 2e 20 20 5e  E_CONSTRAINT.  ^
170a0 42 75 74 20 6e 6f 20 52 4f 4c 4c 42 41 43 4b 20  But no ROLLBACK 
170b0 69 73 20 65 78 65 63 75 74 65 64 20 73 6f 20 63  is executed so c
170c0 68 61 6e 67 65 73 0a 66 72 6f 6d 20 70 72 69 6f  hanges.from prio
170d0 72 20 63 6f 6d 6d 61 6e 64 73 20 77 69 74 68 69  r commands withi
170e0 6e 20 74 68 65 20 73 61 6d 65 20 74 72 61 6e 73  n the same trans
170f0 61 63 74 69 6f 6e 0a 61 72 65 20 70 72 65 73 65  action.are prese
17100 72 76 65 64 2e 20 20 54 68 69 73 20 69 73 20 74  rved.  This is t
17110 68 65 20 64 65 66 61 75 6c 74 20 62 65 68 61 76  he default behav
17120 69 6f 72 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c  ior.</p></dd>..<
17130 64 74 3e 3c 62 3e 46 41 49 4c 3c 2f 62 3e 3c 2f  dt><b>FAIL</b></
17140 64 74 3e 0a 3c 64 64 3e 3c 70 3e 5e 57 68 65 6e  dt>.<dd><p>^When
17150 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
17160 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
17170 74 68 65 20 63 6f 6d 6d 61 6e 64 20 61 62 6f 72  the command abor
17180 74 73 20 77 69 74 68 20 61 0a 72 65 74 75 72 6e  ts with a.return
17190 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 43 4f 4e   code SQLITE_CON
171a0 53 54 52 41 49 4e 54 2e 20 20 5e 42 75 74 20 61  STRAINT.  ^But a
171b0 6e 79 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68  ny changes to th
171c0 65 20 64 61 74 61 62 61 73 65 20 74 68 61 74 0a  e database that.
171d0 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6d 61 64 65  the command made
171e0 20 70 72 69 6f 72 20 74 6f 20 65 6e 63 6f 75 6e   prior to encoun
171f0 74 65 72 69 6e 67 20 74 68 65 20 63 6f 6e 73 74  tering the const
17200 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a  raint violation.
17210 61 72 65 20 70 72 65 73 65 72 76 65 64 20 61 6e  are preserved an
17220 64 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64  d are not backed
17230 20 6f 75 74 2e 20 20 5e 46 6f 72 20 65 78 61 6d   out.  ^For exam
17240 70 6c 65 2c 20 69 66 20 61 6e 20 55 50 44 41 54  ple, if an UPDAT
17250 45 0a 73 74 61 74 65 6d 65 6e 74 20 65 6e 63 6f  E.statement enco
17260 75 6e 74 65 72 65 64 20 61 20 63 6f 6e 73 74 72  untered a constr
17270 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
17280 6e 20 74 68 65 20 31 30 30 74 68 20 72 6f 77 20  n the 100th row 
17290 74 68 61 74 0a 69 74 20 61 74 74 65 6d 70 74 73  that.it attempts
172a0 20 74 6f 20 75 70 64 61 74 65 2c 20 74 68 65 6e   to update, then
172b0 20 74 68 65 20 66 69 72 73 74 20 39 39 20 72 6f   the first 99 ro
172c0 77 20 63 68 61 6e 67 65 73 20 61 72 65 20 70 72  w changes are pr
172d0 65 73 65 72 76 65 64 0a 62 75 74 20 63 68 61 6e  eserved.but chan
172e0 67 65 73 20 74 6f 20 72 6f 77 73 20 31 30 30 20  ges to rows 100 
172f0 61 6e 64 20 62 65 79 6f 6e 64 20 6e 65 76 65 72  and beyond never
17300 20 6f 63 63 75 72 2e 3c 2f 70 3e 3c 2f 64 64 3e   occur.</p></dd>
17310 0a 0a 3c 64 74 3e 3c 62 3e 49 47 4e 4f 52 45 3c  ..<dt><b>IGNORE<
17320 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  /b></dt>.<dd><p>
17330 5e 57 68 65 6e 20 61 20 63 6f 6e 73 74 72 61 69  ^When a constrai
17340 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
17350 75 72 73 2c 20 74 68 65 20 6f 6e 65 20 72 6f 77  urs, the one row
17360 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 0a 74   that contains.t
17370 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  he constraint vi
17380 6f 6c 61 74 69 6f 6e 20 69 73 20 6e 6f 74 20 69  olation is not i
17390 6e 73 65 72 74 65 64 20 6f 72 20 63 68 61 6e 67  nserted or chang
173a0 65 64 2e 20 20 5e 42 75 74 20 74 68 65 20 63 6f  ed.  ^But the co
173b0 6d 6d 61 6e 64 0a 63 6f 6e 74 69 6e 75 65 73 20  mmand.continues 
173c0 65 78 65 63 75 74 69 6e 67 20 6e 6f 72 6d 61 6c  executing normal
173d0 6c 79 2e 20 20 5e 4f 74 68 65 72 20 72 6f 77 73  ly.  ^Other rows
173e0 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65   before and afte
173f0 72 20 74 68 65 20 72 6f 77 20 74 68 61 74 0a 63  r the row that.c
17400 6f 6e 74 61 69 6e 65 64 20 74 68 65 20 63 6f 6e  ontained the con
17410 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
17420 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65  n continue to be
17430 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64   inserted or upd
17440 61 74 65 64 0a 6e 6f 72 6d 61 6c 6c 79 2e 20 20  ated.normally.  
17450 5e 4e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 74  ^No error is ret
17460 75 72 6e 65 64 20 77 68 65 6e 20 74 68 65 20 49  urned when the I
17470 47 4e 4f 52 45 20 63 6f 6e 66 6c 69 63 74 20 72  GNORE conflict r
17480 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69  esolution.algori
17490 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e  thm is used.</p>
174a0 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 52 45  </dd>..<dt><b>RE
174b0 50 4c 41 43 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c  PLACE</b></dt>.<
174c0 64 64 3e 3c 70 3e 5e 57 68 65 6e 20 61 20 55 4e  dd><p>^When a UN
174d0 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
174e0 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73  violation occurs
174f0 2c 20 74 68 65 20 70 72 65 2d 65 78 69 73 74 69  , the pre-existi
17500 6e 67 20 72 6f 77 73 0a 74 68 61 74 20 61 72 65  ng rows.that are
17510 20 63 61 75 73 69 6e 67 20 74 68 65 20 63 6f 6e   causing the con
17520 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
17530 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20 70 72  n are removed pr
17540 69 6f 72 20 74 6f 20 69 6e 73 65 72 74 69 6e 67  ior to inserting
17550 0a 6f 72 20 75 70 64 61 74 69 6e 67 20 74 68 65  .or updating the
17560 20 63 75 72 72 65 6e 74 20 72 6f 77 2e 20 20 5e   current row.  ^
17570 54 68 75 73 20 74 68 65 20 69 6e 73 65 72 74 20  Thus the insert 
17580 6f 72 20 75 70 64 61 74 65 20 61 6c 77 61 79 73  or update always
17590 20 6f 63 63 75 72 73 2e 0a 5e 54 68 65 20 63 6f   occurs..^The co
175a0 6d 6d 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20  mmand continues 
175b0 65 78 65 63 75 74 69 6e 67 20 6e 6f 72 6d 61 6c  executing normal
175c0 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 52 45 50  ly following REP
175d0 4c 41 43 45 2e 20 20 0a 5e 4e 6f 20 65 72 72 6f  LACE.  .^No erro
175e0 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 62 79  r is returned by
175f0 20 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e   the REPLACE con
17600 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
17610 2e 0a 5e 49 66 20 61 20 4e 4f 54 20 4e 55 4c 4c  ..^If a NOT NULL
17620 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
17630 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68  ation occurs, th
17640 65 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20  e NULL value is 
17650 72 65 70 6c 61 63 65 64 0a 62 79 20 74 68 65 20  replaced.by the 
17660 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f  default value fo
17670 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 20 20  r that column.  
17680 5e 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68  ^If the column h
17690 61 73 20 6e 6f 20 64 65 66 61 75 6c 74 0a 76 61  as no default.va
176a0 6c 75 65 2c 20 74 68 65 6e 20 74 68 65 20 41 42  lue, then the AB
176b0 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ORT algorithm is
176c0 20 75 73 65 64 2e 20 20 5e 49 66 20 61 20 43 48   used.  ^If a CH
176d0 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  ECK constraint v
176e0 69 6f 6c 61 74 69 6f 6e 0a 6f 63 63 75 72 73 20  iolation.occurs 
176f0 74 68 65 6e 20 74 68 65 20 49 47 4e 4f 52 45 20  then the IGNORE 
17700 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65  algorithm is use
17710 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e  d.</p>..<p>^When
17720 20 74 68 69 73 20 63 6f 6e 66 6c 69 63 74 20 72   this conflict r
17730 65 73 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74 65  esolution strate
17740 67 79 20 64 65 6c 65 74 65 73 20 72 6f 77 73 20  gy deletes rows 
17750 69 6e 20 6f 72 64 65 72 20 74 6f 0a 73 61 74 69  in order to.sati
17760 73 66 79 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  sfy a constraint
17770 2c 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  , [CREATE TRIGGE
17780 52 20 7c 20 64 65 6c 65 74 65 20 74 72 69 67 67  R | delete trigg
17790 65 72 73 5d 20 6f 6e 6c 79 20 66 69 72 65 20 69  ers] only fire i
177a0 66 0a 5b 72 65 63 75 72 73 69 76 65 5f 74 72 69  f.[recursive_tri
177b0 67 67 65 72 73 20 70 72 61 67 6d 61 20 7c 20 72  ggers pragma | r
177c0 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72  ecursive trigger
177d0 73 5d 20 61 72 65 20 65 6e 61 62 6c 65 64 2e 3c  s] are enabled.<
177e0 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 73 71  /p>..<p>^The [sq
177f0 6c 69 74 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f  lite3_update_hoo
17800 6b 20 7c 20 75 70 64 61 74 65 20 68 6f 6f 6b 5d  k | update hook]
17810 20 69 73 20 6e 6f 74 20 69 6e 76 6f 6b 65 64 20   is not invoked 
17820 66 6f 72 20 72 6f 77 73 20 74 68 61 74 0a 61 72  for rows that.ar
17830 65 20 64 65 6c 65 74 65 64 20 62 79 20 61 6e 20  e deleted by an 
17840 4f 52 20 52 45 50 4c 41 43 45 20 72 65 73 6f 6c  OR REPLACE resol
17850 75 74 69 6f 6e 2e 20 20 5e 4e 6f 72 20 69 73 20  ution.  ^Nor is 
17860 74 68 65 20 0a 5b 73 71 6c 69 74 65 33 5f 63 68  the .[sqlite3_ch
17870 61 6e 67 65 73 20 7c 20 63 68 61 6e 67 65 20 63  anges | change c
17880 6f 75 6e 74 65 72 5d 20 69 6e 63 72 65 6d 65 6e  ounter] incremen
17890 74 65 64 2e 0a 54 68 65 20 65 78 63 65 70 74 69  ted..The excepti
178a0 6f 6e 61 6c 20 62 65 68 61 76 69 6f 72 73 20 64  onal behaviors d
178b0 65 66 69 6e 65 64 20 69 6e 20 74 68 69 73 20 70  efined in this p
178c0 61 72 61 67 72 61 70 68 20 6d 69 67 68 74 20 63  aragraph might c
178d0 68 61 6e 67 65 20 0a 69 6e 20 61 20 66 75 74 75  hange .in a futu
178e0 72 65 20 72 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a  re release.</p>.
178f0 3c 2f 64 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 61  </dl>..<p>^The a
17900 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66 69  lgorithm specifi
17910 65 64 20 69 6e 20 74 68 65 20 4f 52 20 63 6c 61  ed in the OR cla
17920 75 73 65 20 6f 66 20 61 20 49 4e 53 45 52 54 20  use of a INSERT 
17930 6f 72 20 55 50 44 41 54 45 0a 6f 76 65 72 72 69  or UPDATE.overri
17940 64 65 73 20 61 6e 79 20 61 6c 67 6f 72 69 74 68  des any algorith
17950 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 61  m specified in a
17960 20 43 52 45 41 54 45 20 54 41 42 4c 45 2e 0a 5e   CREATE TABLE..^
17970 49 66 20 6e 6f 20 61 6c 67 6f 72 69 74 68 6d 20  If no algorithm 
17980 69 73 20 73 70 65 63 69 66 69 65 64 20 61 6e 79  is specified any
17990 77 68 65 72 65 2c 20 74 68 65 20 41 42 4f 52 54  where, the ABORT
179a0 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73   algorithm is us
179b0 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  ed.</p>..<tcl>.#
179c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
179d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
179e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
179f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17a00 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
17a10 63 74 69 6f 6e 20 52 45 49 4e 44 45 58 20 72 65  ction REINDEX re
17a20 69 6e 64 65 78 20 52 45 49 4e 44 45 58 0a 0a 42  index REINDEX..B
17a30 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 65 69  ubbleDiagram rei
17a40 6e 64 65 78 2d 73 74 6d 74 20 31 0a 3c 2f 74 63  ndex-stmt 1.</tc
17a50 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 49 4e  l>..<p>^The REIN
17a60 44 45 58 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75  DEX command is u
17a70 73 65 64 20 74 6f 20 64 65 6c 65 74 65 20 61 6e  sed to delete an
17a80 64 20 72 65 63 72 65 61 74 65 20 69 6e 64 69 63  d recreate indic
17a90 65 73 20 66 72 6f 6d 20 73 63 72 61 74 63 68 2e  es from scratch.
17aa0 0a 54 68 69 73 20 69 73 20 75 73 65 66 75 6c 20  .This is useful 
17ab0 77 68 65 6e 20 74 68 65 20 64 65 66 69 6e 69 74  when the definit
17ac0 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 6c 61 74 69  ion of a collati
17ad0 6f 6e 20 73 65 71 75 65 6e 63 65 20 68 61 73 20  on sequence has 
17ae0 63 68 61 6e 67 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c  changed..</p>..<
17af0 70 3e 5e 49 6e 20 74 68 65 20 66 69 72 73 74 20  p>^In the first 
17b00 66 6f 72 6d 2c 20 61 6c 6c 20 69 6e 64 69 63 65  form, all indice
17b10 73 20 69 6e 20 61 6c 6c 20 61 74 74 61 63 68 65  s in all attache
17b20 64 20 64 61 74 61 62 61 73 65 73 20 74 68 61 74  d databases that
17b30 20 75 73 65 20 74 68 65 0a 6e 61 6d 65 64 20 63   use the.named c
17b40 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
17b50 65 20 61 72 65 20 72 65 63 72 65 61 74 65 64 2e  e are recreated.
17b60 20 5e 28 49 6e 20 74 68 65 20 73 65 63 6f 6e 64   ^(In the second
17b70 20 66 6f 72 6d 2c 20 69 66 20 0a 3c 69 3e 26 23   form, if .<i>&#
17b80 39 31 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  91;database-name
17b90 2e 26 23 39 33 3b 74 61 62 6c 65 2f 69 6e 64 65  .&#93;table/inde
17ba0 78 2d 6e 61 6d 65 3c 2f 69 3e 20 69 64 65 6e 74  x-name</i> ident
17bb0 69 66 69 65 73 20 61 20 74 61 62 6c 65 2c 0a 74  ifies a table,.t
17bc0 68 65 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73 0a  hen all indices.
17bd0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
17be0 74 68 65 20 74 61 62 6c 65 20 61 72 65 20 72 65  the table are re
17bf0 62 75 69 6c 74 2e 29 5e 20 5e 49 66 20 61 6e 20  built.)^ ^If an 
17c00 69 6e 64 65 78 20 69 73 20 69 64 65 6e 74 69 66  index is identif
17c10 69 65 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 0a 74  ied, then only.t
17c20 68 69 73 20 73 70 65 63 69 66 69 63 20 69 6e 64  his specific ind
17c30 65 78 20 69 73 20 64 65 6c 65 74 65 64 20 61 6e  ex is deleted an
17c40 64 20 72 65 63 72 65 61 74 65 64 2e 0a 3c 2f 70  d recreated..</p
17c50 3e 0a 0a 3c 70 3e 5e 49 66 20 6e 6f 20 3c 69 3e  >..<p>^If no <i>
17c60 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69  database-name</i
17c70 3e 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61  > is specified a
17c80 6e 64 20 74 68 65 72 65 20 65 78 69 73 74 73 20  nd there exists 
17c90 62 6f 74 68 20 61 20 74 61 62 6c 65 20 6f 72 0a  both a table or.
17ca0 69 6e 64 65 78 20 61 6e 64 20 61 20 63 6f 6c 6c  index and a coll
17cb0 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6f  ation sequence o
17cc0 66 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  f the specified 
17cd0 6e 61 6d 65 2c 20 74 68 65 6e 20 69 6e 64 69 63  name, then indic
17ce0 65 73 20 61 73 73 6f 63 69 61 74 65 64 0a 77 69  es associated.wi
17cf0 74 68 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e  th the collation
17d00 20 73 65 71 75 65 6e 63 65 20 6f 6e 6c 79 20 61   sequence only a
17d10 72 65 20 72 65 63 6f 6e 73 74 72 75 63 74 65 64  re reconstructed
17d20 2e 20 54 68 69 73 20 61 6d 62 69 67 75 69 74 79  . This ambiguity
17d30 20 6d 61 79 20 62 65 0a 64 69 73 70 65 6c 6c 65   may be.dispelle
17d40 64 20 62 79 20 61 6c 77 61 79 73 20 73 70 65 63  d by always spec
17d50 69 66 79 69 6e 67 20 61 20 3c 69 3e 64 61 74 61  ifying a <i>data
17d60 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 77 68  base-name</i> wh
17d70 65 6e 20 72 65 69 6e 64 65 78 69 6e 67 20 61 0a  en reindexing a.
17d80 73 70 65 63 69 66 69 63 20 74 61 62 6c 65 20 6f  specific table o
17d90 72 20 69 6e 64 65 78 2e 0a 0a 3c 74 63 6c 3e 0a  r index...<tcl>.
17da0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17db0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17dc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17dd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17de0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
17df0 53 65 63 74 69 6f 6e 20 52 45 50 4c 41 43 45 20  Section REPLACE 
17e00 72 65 70 6c 61 63 65 20 52 45 50 4c 41 43 45 0a  replace REPLACE.
17e10 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
17e20 20 52 45 50 4c 41 43 45 20 63 6f 6d 6d 61 6e 64   REPLACE command
17e30 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72   is an alias for
17e40 20 74 68 65 20 22 5b 4f 4e 20 43 4f 4e 46 4c 49   the "[ON CONFLI
17e50 43 54 20 7c 20 49 4e 53 45 52 54 20 4f 52 20 52  CT | INSERT OR R
17e60 45 50 4c 41 43 45 5d 22 0a 76 61 72 69 61 6e 74  EPLACE]".variant
17e70 20 6f 66 20 74 68 65 20 5b 49 4e 53 45 52 54 5d   of the [INSERT]
17e80 20 63 6f 6d 6d 61 6e 64 2e 20 20 0a 54 68 69 73   command.  .This
17e90 20 61 6c 69 61 73 20 69 73 20 70 72 6f 76 69 64   alias is provid
17ea0 65 64 20 66 6f 72 20 63 6f 6d 70 61 74 69 62 69  ed for compatibi
17eb0 6c 69 74 79 20 6f 74 68 65 72 20 53 51 4c 20 64  lity other SQL d
17ec0 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 2e  atabase engines.
17ed0 20 20 53 65 65 20 74 68 65 20 0a 5b 49 4e 53 45    See the .[INSE
17ee0 52 54 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f 63 75  RT] command docu
17ef0 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61 64  mentation for ad
17f00 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
17f10 74 69 6f 6e 2e 3c 2f 70 3e 20 20 0a 0a 3c 74 63  tion.</p>  ..<tc
17f20 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
17f30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17f40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17f50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17f60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17f70 23 23 0a 53 65 63 74 69 6f 6e 20 53 45 4c 45 43  ##.Section SELEC
17f80 54 20 73 65 6c 65 63 74 20 7b 53 45 4c 45 43 54  T select {SELECT
17f90 20 71 75 65 72 79 7d 0a 0a 42 75 62 62 6c 65 44   query}..BubbleD
17fa0 69 61 67 72 61 6d 20 73 65 6c 65 63 74 2d 73 74  iagram select-st
17fb0 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61 67 72  mt 1.BubbleDiagr
17fc0 61 6d 20 73 65 6c 65 63 74 2d 63 6f 72 65 0a 42  am select-core.B
17fd0 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 65 73  ubbleDiagram res
17fe0 75 6c 74 2d 63 6f 6c 75 6d 6e 0a 42 75 62 62 6c  ult-column.Bubbl
17ff0 65 44 69 61 67 72 61 6d 20 6a 6f 69 6e 2d 73 6f  eDiagram join-so
18000 75 72 63 65 0a 42 75 62 62 6c 65 44 69 61 67 72  urce.BubbleDiagr
18010 61 6d 20 73 69 6e 67 6c 65 2d 73 6f 75 72 63 65  am single-source
18020 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 6a  .BubbleDiagram j
18030 6f 69 6e 2d 6f 70 0a 42 75 62 62 6c 65 44 69 61  oin-op.BubbleDia
18040 67 72 61 6d 20 6a 6f 69 6e 2d 63 6f 6e 73 74 72  gram join-constr
18050 61 69 6e 74 0a 42 75 62 62 6c 65 44 69 61 67 72  aint.BubbleDiagr
18060 61 6d 20 6f 72 64 65 72 69 6e 67 2d 74 65 72 6d  am ordering-term
18070 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63  .BubbleDiagram c
18080 6f 6d 70 6f 75 6e 64 2d 6f 70 65 72 61 74 6f 72  ompound-operator
18090 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  .</tcl>..<p>The 
180a0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
180b0 20 69 73 20 75 73 65 64 20 74 6f 20 71 75 65 72   is used to quer
180c0 79 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  y the database. 
180d0 20 5e 54 68 65 0a 72 65 73 75 6c 74 20 6f 66 20   ^The.result of 
180e0 61 20 53 45 4c 45 43 54 20 69 73 20 7a 65 72 6f  a SELECT is zero
180f0 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66   or more rows of
18100 20 64 61 74 61 20 77 68 65 72 65 20 65 61 63 68   data where each
18110 20 72 6f 77 0a 68 61 73 20 61 20 66 69 78 65 64   row.has a fixed
18120 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
18130 6e 73 2e 20 20 5e 54 68 65 20 6e 75 6d 62 65 72  ns.  ^The number
18140 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
18150 68 65 0a 72 65 73 75 6c 74 20 69 73 20 73 70 65  he.result is spe
18160 63 69 66 69 65 64 20 62 79 20 74 68 65 20 65 78  cified by the ex
18170 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 69 6e  pression list in
18180 20 62 65 74 77 65 65 6e 20 74 68 65 0a 53 45 4c   between the.SEL
18190 45 43 54 20 61 6e 64 20 46 52 4f 4d 20 6b 65 79  ECT and FROM key
181a0 77 6f 72 64 73 2e 20 20 5e 41 6e 79 20 61 72 62  words.  ^Any arb
181b0 69 74 72 61 72 79 20 65 78 70 72 65 73 73 69 6f  itrary expressio
181c0 6e 20 63 61 6e 20 62 65 20 75 73 65 64 0a 61 73  n can be used.as
181d0 20 61 20 72 65 73 75 6c 74 2e 20 20 5e 49 66 20   a result.  ^If 
181e0 61 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73  a result express
181f0 69 6f 6e 20 69 73 20 7d 0a 68 64 5f 70 75 74 73  ion is }.hd_puts
18200 20 22 5b 4f 70 65 72 61 74 6f 72 20 2a 5d 20 74   "[Operator *] t
18210 68 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20  hen all columns 
18220 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 61 72  of all tables ar
18230 65 20 73 75 62 73 74 69 74 75 74 65 64 5c 6e 22  e substituted\n"
18240 0a 68 64 5f 70 75 74 73 20 22 66 6f 72 20 74 68  .hd_puts "for th
18250 61 74 20 6f 6e 65 20 65 78 70 72 65 73 73 69 6f  at one expressio
18260 6e 2e 20 20 5e 28 49 66 20 74 68 65 20 65 78 70  n.  ^(If the exp
18270 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 6e  ression is the n
18280 61 6d 65 20 6f 66 5c 6e 22 0a 68 64 5f 70 75 74  ame of\n".hd_put
18290 73 20 22 61 20 74 61 62 6c 65 20 66 6f 6c 6c 6f  s "a table follo
182a0 77 65 64 20 62 79 20 5b 4f 70 65 72 61 74 6f 72  wed by [Operator
182b0 20 2e 2a 5d 20 74 68 65 6e 20 74 68 65 20 72 65   .*] then the re
182c0 73 75 6c 74 20 69 73 20 61 6c 6c 20 63 6f 6c 75  sult is all colu
182d0 6d 6e 73 5c 6e 22 0a 68 64 5f 70 75 74 73 20 7b  mns\n".hd_puts {
182e0 69 6e 20 74 68 61 74 20 6f 6e 65 20 74 61 62 6c  in that one tabl
182f0 65 2e 3c 2f 70 3e 29 5e 0a 0a 3c 70 3e 5e 54 68  e.</p>)^..<p>^Th
18300 65 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  e DISTINCT keywo
18310 72 64 20 63 61 75 73 65 73 20 61 20 73 75 62 73  rd causes a subs
18320 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
18330 73 20 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64  s to be returned
18340 2c 20 0a 69 6e 20 77 68 69 63 68 20 65 61 63 68  , .in which each
18350 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 64   result row is d
18360 69 66 66 65 72 65 6e 74 2e 20 20 5e 4e 55 4c 4c  ifferent.  ^NULL
18370 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f 74 20   values are not 
18380 74 72 65 61 74 65 64 20 61 73 20 0a 64 69 73 74  treated as .dist
18390 69 6e 63 74 20 66 72 6f 6d 20 65 61 63 68 20 6f  inct from each o
183a0 74 68 65 72 2e 20 20 5e 54 68 65 20 64 65 66 61  ther.  ^The defa
183b0 75 6c 74 20 62 65 68 61 76 69 6f 72 20 69 73 20  ult behavior is 
183c0 74 68 61 74 20 61 6c 6c 20 72 65 73 75 6c 74 20  that all result 
183d0 72 6f 77 73 20 0a 62 65 20 72 65 74 75 72 6e 65  rows .be returne
183e0 64 2c 20 77 68 69 63 68 20 63 61 6e 20 62 65 20  d, which can be 
183f0 6d 61 64 65 20 65 78 70 6c 69 63 69 74 20 77 69  made explicit wi
18400 74 68 20 74 68 65 20 6b 65 79 77 6f 72 64 20 41  th the keyword A
18410 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  LL.</p>..<p>^The
18420 20 71 75 65 72 79 20 69 73 20 65 78 65 63 75 74   query is execut
18430 65 64 20 61 67 61 69 6e 73 74 20 6f 6e 65 20 6f  ed against one o
18440 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 73 70  r more tables sp
18450 65 63 69 66 69 65 64 20 61 66 74 65 72 0a 74 68  ecified after.th
18460 65 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 2e 20  e FROM keyword. 
18470 20 5e 49 66 20 6d 75 6c 74 69 70 6c 65 20 74 61   ^If multiple ta
18480 62 6c 65 73 20 6e 61 6d 65 73 20 61 72 65 20 73  bles names are s
18490 65 70 61 72 61 74 65 64 20 62 79 20 63 6f 6d 6d  eparated by comm
184a0 61 73 2c 0a 74 68 65 6e 20 74 68 65 20 71 75 65  as,.then the que
184b0 72 79 20 69 73 20 61 67 61 69 6e 73 74 20 74 68  ry is against th
184c0 65 20 63 72 6f 73 73 20 6a 6f 69 6e 20 6f 66 20  e cross join of 
184d0 74 68 65 20 76 61 72 69 6f 75 73 20 74 61 62 6c  the various tabl
184e0 65 73 2e 0a 5e 54 68 65 20 66 75 6c 6c 20 53 51  es..^The full SQ
184f0 4c 2d 39 32 20 6a 6f 69 6e 20 73 79 6e 74 61 78  L-92 join syntax
18500 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65   can also be use
18510 64 20 74 6f 20 73 70 65 63 69 66 79 20 6a 6f 69  d to specify joi
18520 6e 73 2e 0a 5e 41 20 73 75 62 2d 71 75 65 72 79  ns..^A sub-query
18530 0a 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73 20  .in parentheses 
18540 6d 61 79 20 62 65 20 73 75 62 73 74 69 74 75 74  may be substitut
18550 65 64 20 66 6f 72 20 61 6e 79 20 74 61 62 6c 65  ed for any table
18560 20 6e 61 6d 65 20 69 6e 20 74 68 65 20 46 52 4f   name in the FRO
18570 4d 20 63 6c 61 75 73 65 2e 0a 5e 54 68 65 20 65  M clause..^The e
18580 6e 74 69 72 65 20 46 52 4f 4d 20 63 6c 61 75 73  ntire FROM claus
18590 65 20 6d 61 79 20 62 65 20 6f 6d 69 74 74 65 64  e may be omitted
185a0 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20  , in which case 
185b0 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 0a  the result is a.
185c0 73 69 6e 67 6c 65 20 72 6f 77 20 63 6f 6e 73 69  single row consi
185d0 73 74 69 6e 67 20 6f 66 20 74 68 65 20 76 61 6c  sting of the val
185e0 75 65 73 20 6f 66 20 74 68 65 20 65 78 70 72 65  ues of the expre
185f0 73 73 69 6f 6e 20 6c 69 73 74 2e 0a 3c 2f 70 3e  ssion list..</p>
18600 0a 0a 3c 70 3e 5e 54 68 65 20 57 48 45 52 45 20  ..<p>^The WHERE 
18610 63 6c 61 75 73 65 20 63 61 6e 20 62 65 20 75 73  clause can be us
18620 65 64 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20  ed to limit the 
18630 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 6f  number of rows o
18640 76 65 72 0a 77 68 69 63 68 20 74 68 65 20 71 75  ver.which the qu
18650 65 72 79 20 6f 70 65 72 61 74 65 73 2e 3c 2f 70  ery operates.</p
18660 3e 0a 0a 3c 70 3e 5e 54 68 65 20 47 52 4f 55 50  >..<p>^The GROUP
18670 20 42 59 20 63 6c 61 75 73 65 20 63 61 75 73 65   BY clause cause
18680 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 6f  s one or more ro
18690 77 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ws of the result
186a0 20 74 6f 0a 62 65 20 63 6f 6d 62 69 6e 65 64 20   to.be combined 
186b0 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20 72 6f  into a single ro
186c0 77 20 6f 66 20 6f 75 74 70 75 74 2e 20 20 54 68  w of output.  Th
186d0 69 73 20 69 73 20 65 73 70 65 63 69 61 6c 6c 79  is is especially
186e0 20 75 73 65 66 75 6c 0a 77 68 65 6e 20 74 68 65   useful.when the
186f0 20 72 65 73 75 6c 74 20 63 6f 6e 74 61 69 6e 73   result contains
18700 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
18710 69 6f 6e 73 2e 20 20 5e 54 68 65 20 65 78 70 72  ions.  ^The expr
18720 65 73 73 69 6f 6e 73 20 69 6e 0a 74 68 65 20 47  essions in.the G
18730 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 64  ROUP BY clause d
18740 6f 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 68  o <em>not</em> h
18750 61 76 65 20 74 6f 20 62 65 20 65 78 70 72 65 73  ave to be expres
18760 73 69 6f 6e 73 20 74 68 61 74 0a 61 70 70 65 61  sions that.appea
18770 72 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e  r in the result.
18780 20 20 5e 54 68 65 20 48 41 56 49 4e 47 20 63 6c    ^The HAVING cl
18790 61 75 73 65 20 69 73 20 73 69 6d 69 6c 61 72 20  ause is similar 
187a0 74 6f 20 57 48 45 52 45 20 65 78 63 65 70 74 0a  to WHERE except.
187b0 74 68 61 74 20 48 41 56 49 4e 47 20 61 70 70 6c  that HAVING appl
187c0 69 65 73 20 61 66 74 65 72 20 67 72 6f 75 70 69  ies after groupi
187d0 6e 67 20 68 61 73 20 6f 63 63 75 72 72 65 64 2e  ng has occurred.
187e0 20 20 5e 54 68 65 20 48 41 56 49 4e 47 20 65 78    ^The HAVING ex
187f0 70 72 65 73 73 69 6f 6e 0a 6d 61 79 20 72 65 66  pression.may ref
18800 65 72 20 74 6f 20 76 61 6c 75 65 73 2c 20 65 76  er to values, ev
18810 65 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  en aggregate fun
18820 63 74 69 6f 6e 73 2c 20 74 68 61 74 20 61 72 65  ctions, that are
18830 20 6e 6f 74 20 69 6e 20 74 68 65 20 72 65 73 75   not in the resu
18840 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  lt.</p>..<p>^The
18850 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
18860 20 63 61 75 73 65 73 20 74 68 65 20 6f 75 74 70   causes the outp
18870 75 74 20 72 6f 77 73 20 74 6f 20 62 65 20 73 6f  ut rows to be so
18880 72 74 65 64 2e 20 20 0a 5e 54 68 65 20 61 72 67  rted.  .^The arg
18890 75 6d 65 6e 74 20 74 6f 20 4f 52 44 45 52 20 42  ument to ORDER B
188a0 59 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 65  Y is a list of e
188b0 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20  xpressions that 
188c0 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65 0a  are used as the.
188d0 6b 65 79 20 66 6f 72 20 74 68 65 20 73 6f 72 74  key for the sort
188e0 2e 20 20 5e 54 68 65 20 65 78 70 72 65 73 73 69  .  ^The expressi
188f0 6f 6e 73 20 64 6f 20 6e 6f 74 20 68 61 76 65 20  ons do not have 
18900 74 6f 20 62 65 20 70 61 72 74 20 6f 66 20 74 68  to be part of th
18910 65 0a 72 65 73 75 6c 74 20 66 6f 72 20 61 20 73  e.result for a s
18920 69 6d 70 6c 65 20 53 45 4c 45 43 54 2c 20 62 75  imple SELECT, bu
18930 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t in a compound 
18940 53 45 4c 45 43 54 20 65 61 63 68 20 73 6f 72 74  SELECT each sort
18950 0a 65 78 70 72 65 73 73 69 6f 6e 20 6d 75 73 74  .expression must
18960 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20 6f   exactly match o
18970 6e 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ne of the result
18980 20 63 6f 6c 75 6d 6e 73 2e 20 20 5e 45 61 63 68   columns.  ^Each
18990 0a 73 6f 72 74 20 65 78 70 72 65 73 73 69 6f 6e  .sort expression
189a0 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c   may be optional
189b0 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  ly followed by a
189c0 20 43 4f 4c 4c 41 54 45 20 6b 65 79 77 6f 72 64   COLLATE keyword
189d0 20 61 6e 64 0a 74 68 65 20 6e 61 6d 65 20 6f 66   and.the name of
189e0 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e   a collating fun
189f0 63 74 69 6f 6e 20 75 73 65 64 20 66 6f 72 20 6f  ction used for o
18a00 72 64 65 72 69 6e 67 20 74 65 78 74 20 61 6e 64  rdering text and
18a10 2f 6f 72 0a 6b 65 79 77 6f 72 64 73 20 41 53 43  /or.keywords ASC
18a20 20 6f 72 20 44 45 53 43 20 74 6f 20 73 70 65 63   or DESC to spec
18a30 69 66 79 20 74 68 65 20 73 6f 72 74 20 6f 72 64  ify the sort ord
18a40 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68  er.</p>..<p>Each
18a50 20 74 65 72 6d 20 6f 66 20 61 6e 20 4f 52 44 45   term of an ORDE
18a60 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
18a70 69 73 20 70 72 6f 63 65 73 73 65 64 20 61 73 20  is processed as 
18a80 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f  follows:</p>..<o
18a90 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68  l>.<li><p>^If th
18aa0 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  e ORDER BY expre
18ab0 73 73 69 6f 6e 20 69 73 20 61 20 63 6f 6e 73 74  ssion is a const
18ac0 61 6e 74 20 69 6e 74 65 67 65 72 20 4b 20 74 68  ant integer K th
18ad0 65 6e 20 74 68 65 0a 6f 75 74 70 75 74 20 69 73  en the.output is
18ae0 20 6f 72 64 65 72 65 64 20 62 79 20 74 68 65 20   ordered by the 
18af0 4b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  K-th column of t
18b00 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 3c 2f  he result set.</
18b10 70 3e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 3c 70 3e 5e  p></li>.<li><p>^
18b20 49 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  If the ORDER BY 
18b30 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
18b40 20 69 64 65 6e 74 69 66 69 65 72 20 61 6e 64 20   identifier and 
18b50 6f 6e 65 20 6f 66 20 74 68 65 0a 6f 75 74 70 75  one of the.outpu
18b60 74 20 63 6f 6c 75 6d 6e 73 20 68 61 73 20 61 6e  t columns has an
18b70 20 61 6c 69 61 73 20 62 79 20 74 68 65 20 73 61   alias by the sa
18b80 6d 65 20 6e 61 6d 65 2c 20 74 68 65 6e 20 74 68  me name, then th
18b90 65 20 6f 75 74 70 75 74 20 69 73 0a 6f 72 64 65  e output is.orde
18ba0 72 65 64 20 62 79 20 74 68 65 20 69 64 65 6e 74  red by the ident
18bb0 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 3c 2f 70  ified column.</p
18bc0 3e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 3c 70 3e 5e 4f  ></li>.<li><p>^O
18bd0 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 4f 52  therwise, the OR
18be0 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
18bf0 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61  n is evaluated a
18c00 6e 64 20 74 68 65 20 6f 75 74 70 75 74 20 0a 69  nd the output .i
18c10 73 20 6f 72 64 65 72 65 64 20 62 79 20 74 68 65  s ordered by the
18c20 20 76 61 6c 75 65 20 6f 66 20 74 68 61 74 20 65   value of that e
18c30 78 70 72 65 73 73 69 6f 6e 2e 3c 2f 70 3e 3c 2f  xpression.</p></
18c40 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 49  li>.</ol>..<p>^I
18c50 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c  n a compound SEL
18c60 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ECT statement, t
18c70 68 65 20 74 68 69 72 64 20 4f 52 44 45 52 20 42  he third ORDER B
18c80 59 20 6d 61 74 63 68 69 6e 67 20 72 75 6c 65 0a  Y matching rule.
18c90 72 65 71 75 69 72 65 73 20 74 68 61 74 20 74 68  requires that th
18ca0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 62 65 20  e expression be 
18cb0 69 64 65 6e 74 69 63 61 6c 20 74 6f 20 6f 6e 65  identical to one
18cc0 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   of the columns 
18cd0 69 6e 0a 74 68 65 20 72 65 73 75 6c 74 20 73 65  in.the result se
18ce0 74 2e 20 20 5e 28 54 68 65 20 74 68 72 65 65 20  t.  ^(The three 
18cf0 72 75 6c 65 73 20 61 72 65 20 66 69 72 73 74 20  rules are first 
18d00 61 70 70 6c 69 65 64 20 74 6f 20 74 68 65 20 6c  applied to the l
18d10 65 66 74 2d 6d 6f 73 74 0a 53 45 4c 45 43 54 20  eft-most.SELECT 
18d20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e  in the compound.
18d30 20 20 49 66 20 61 20 6d 61 74 63 68 20 69 73 20    If a match is 
18d40 66 6f 75 6e 64 2c 20 74 68 65 20 73 65 61 72 63  found, the searc
18d50 68 20 73 74 6f 70 73 2e 20 20 4f 74 68 65 72 77  h stops.  Otherw
18d60 69 73 65 2c 0a 74 68 65 20 6e 65 78 74 20 53 45  ise,.the next SE
18d70 4c 45 43 54 20 74 6f 20 74 68 65 20 72 69 67 68  LECT to the righ
18d80 74 20 69 73 20 74 72 69 65 64 2e 20 20 54 68 69  t is tried.  Thi
18d90 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69  s continues unti
18da0 6c 20 61 20 6d 61 74 63 68 0a 69 73 20 66 6f 75  l a match.is fou
18db0 6e 64 2e 29 5e 20 20 5e 45 61 63 68 20 74 65 72  nd.)^  ^Each ter
18dc0 6d 20 6f 66 20 74 68 65 20 4f 52 44 45 52 20 42  m of the ORDER B
18dd0 59 20 63 6c 61 75 73 65 20 69 73 20 70 72 6f 63  Y clause is proc
18de0 65 73 73 65 64 20 73 65 70 61 72 61 74 65 6c 79  essed separately
18df0 20 0a 61 6e 64 20 6d 61 79 20 63 6f 6d 65 20 66   .and may come f
18e00 72 6f 6d 20 64 69 66 66 65 72 65 6e 74 20 53 45  rom different SE
18e10 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
18e20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e  in the compound.
18e30 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49  </p>..<p>^The LI
18e40 4d 49 54 20 63 6c 61 75 73 65 20 70 6c 61 63 65  MIT clause place
18e50 73 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e 64  s an upper bound
18e60 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   on the number o
18e70 66 20 72 6f 77 73 0a 72 65 74 75 72 6e 65 64 20  f rows.returned 
18e80 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20  in the result.  
18e90 5e 41 20 6e 65 67 61 74 69 76 65 20 4c 49 4d 49  ^A negative LIMI
18ea0 54 20 69 6e 64 69 63 61 74 65 73 20 6e 6f 20 75  T indicates no u
18eb0 70 70 65 72 20 62 6f 75 6e 64 2e 0a 5e 54 68 65  pper bound..^The
18ec0 20 6f 70 74 69 6f 6e 61 6c 20 4f 46 46 53 45 54   optional OFFSET
18ed0 20 66 6f 6c 6c 6f 77 69 6e 67 20 4c 49 4d 49 54   following LIMIT
18ee0 20 73 70 65 63 69 66 69 65 73 20 68 6f 77 20 6d   specifies how m
18ef0 61 6e 79 0a 72 6f 77 73 20 74 6f 20 73 6b 69 70  any.rows to skip
18f00 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
18f10 67 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  g of the result 
18f20 73 65 74 2e 0a 5e 49 6e 20 61 20 63 6f 6d 70 6f  set..^In a compo
18f30 75 6e 64 20 71 75 65 72 79 2c 20 74 68 65 20 4c  und query, the L
18f40 49 4d 49 54 20 63 6c 61 75 73 65 20 6d 61 79 20  IMIT clause may 
18f50 6f 6e 6c 79 20 61 70 70 65 61 72 20 6f 6e 20 74  only appear on t
18f60 68 65 0a 66 69 6e 61 6c 20 53 45 4c 45 43 54 20  he.final SELECT 
18f70 73 74 61 74 65 6d 65 6e 74 2e 0a 5e 54 68 65 20  statement..^The 
18f80 6c 69 6d 69 74 20 69 73 20 61 70 70 6c 69 65 64  limit is applied
18f90 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 71   to the entire q
18fa0 75 65 72 79 20 6e 6f 74 0a 74 6f 20 74 68 65 20  uery not.to the 
18fb0 69 6e 64 69 76 69 64 75 61 6c 20 53 45 4c 45 43  individual SELEC
18fc0 54 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 77  T statement to w
18fd0 68 69 63 68 20 69 74 20 69 73 20 61 74 74 61 63  hich it is attac
18fe0 68 65 64 2e 0a 5e 4e 6f 74 65 20 74 68 61 74 20  hed..^Note that 
18ff0 69 66 20 74 68 65 20 4f 46 46 53 45 54 20 6b 65  if the OFFSET ke
19000 79 77 6f 72 64 20 69 73 20 75 73 65 64 20 69 6e  yword is used in
19010 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73   the LIMIT claus
19020 65 2c 20 74 68 65 6e 20 74 68 65 0a 6c 69 6d 69  e, then the.limi
19030 74 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6e  t is the first n
19040 75 6d 62 65 72 20 61 6e 64 20 74 68 65 20 6f 66  umber and the of
19050 66 73 65 74 20 69 73 20 74 68 65 20 73 65 63 6f  fset is the seco
19060 6e 64 20 6e 75 6d 62 65 72 2e 20 20 5e 49 66 20  nd number.  ^If 
19070 61 0a 63 6f 6d 6d 61 20 69 73 20 75 73 65 64 20  a.comma is used 
19080 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 4f  instead of the O
19090 46 46 53 45 54 20 6b 65 79 77 6f 72 64 2c 20 74  FFSET keyword, t
190a0 68 65 6e 20 74 68 65 20 6f 66 66 73 65 74 20 69  hen the offset i
190b0 73 20 74 68 65 0a 66 69 72 73 74 20 6e 75 6d 62  s the.first numb
190c0 65 72 20 61 6e 64 20 74 68 65 20 6c 69 6d 69 74  er and the limit
190d0 20 69 73 20 74 68 65 20 73 65 63 6f 6e 64 20 6e   is the second n
190e0 75 6d 62 65 72 2e 20 20 54 68 69 73 20 73 65 65  umber.  This see
190f0 6d 69 6e 67 0a 63 6f 6e 74 72 61 64 69 74 69 6f  ming.contraditio
19100 6e 20 69 73 20 69 6e 74 65 6e 74 69 6f 6e 61 6c  n is intentional
19110 20 2d 20 69 74 20 6d 61 78 69 6d 69 7a 65 73 20   - it maximizes 
19120 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69  compatibility wi
19130 74 68 20 6c 65 67 61 63 79 0a 53 51 4c 20 64 61  th legacy.SQL da
19140 74 61 62 61 73 65 20 73 79 73 74 65 6d 73 2e 0a  tabase systems..
19150 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 63 6f 6d 70  </p>..<p>^A comp
19160 6f 75 6e 64 20 53 45 4c 45 43 54 20 69 73 20 66  ound SELECT is f
19170 6f 72 6d 65 64 20 66 72 6f 6d 20 74 77 6f 20 6f  ormed from two o
19180 72 20 6d 6f 72 65 20 73 69 6d 70 6c 65 20 53 45  r more simple SE
19190 4c 45 43 54 73 20 63 6f 6e 6e 65 63 74 65 64 0a  LECTs connected.
191a0 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 6f 70  by one of the op
191b0 65 72 61 74 6f 72 73 20 55 4e 49 4f 4e 2c 20 55  erators UNION, U
191c0 4e 49 4f 4e 20 41 4c 4c 2c 20 49 4e 54 45 52 53  NION ALL, INTERS
191d0 45 43 54 2c 20 6f 72 20 45 58 43 45 50 54 2e 20  ECT, or EXCEPT. 
191e0 20 5e 49 6e 0a 61 20 63 6f 6d 70 6f 75 6e 64 20   ^In.a compound 
191f0 53 45 4c 45 43 54 2c 20 61 6c 6c 20 74 68 65 20  SELECT, all the 
19200 63 6f 6e 73 74 69 74 75 65 6e 74 20 53 45 4c 45  constituent SELE
19210 43 54 73 20 6d 75 73 74 20 73 70 65 63 69 66 79  CTs must specify
19220 20 74 68 65 0a 73 61 6d 65 20 6e 75 6d 62 65 72   the.same number
19230 20 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d   of result colum
19240 6e 73 2e 20 20 5e 54 68 65 72 65 20 6d 61 79 20  ns.  ^There may 
19250 62 65 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65  be only a single
19260 20 4f 52 44 45 52 20 42 59 0a 63 6c 61 75 73 65   ORDER BY.clause
19270 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
19280 68 65 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  he compound SELE
19290 43 54 2e 20 20 5e 54 68 65 20 55 4e 49 4f 4e 20  CT.  ^The UNION 
192a0 61 6e 64 20 55 4e 49 4f 4e 20 41 4c 4c 0a 6f 70  and UNION ALL.op
192b0 65 72 61 74 6f 72 73 20 63 6f 6d 62 69 6e 65 20  erators combine 
192c0 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
192d0 68 65 20 53 45 4c 45 43 54 73 20 74 6f 20 74 68  he SELECTs to th
192e0 65 20 72 69 67 68 74 20 61 6e 64 20 6c 65 66 74  e right and left
192f0 20 69 6e 74 6f 0a 61 20 73 69 6e 67 6c 65 20 62   into.a single b
19300 69 67 20 74 61 62 6c 65 2e 20 20 5e 54 68 65 20  ig table.  ^The 
19310 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 74 68  difference is th
19320 61 74 20 69 6e 20 55 4e 49 4f 4e 20 61 6c 6c 20  at in UNION all 
19330 72 65 73 75 6c 74 20 72 6f 77 73 0a 61 72 65 20  result rows.are 
19340 64 69 73 74 69 6e 63 74 20 77 68 65 72 65 20 69  distinct where i
19350 6e 20 55 4e 49 4f 4e 20 41 4c 4c 20 74 68 65 72  n UNION ALL ther
19360 65 20 6d 61 79 20 62 65 20 64 75 70 6c 69 63 61  e may be duplica
19370 74 65 73 2e 0a 5e 54 68 65 20 49 4e 54 45 52 53  tes..^The INTERS
19380 45 43 54 20 6f 70 65 72 61 74 6f 72 20 74 61 6b  ECT operator tak
19390 65 73 20 74 68 65 20 69 6e 74 65 72 73 65 63 74  es the intersect
193a0 69 6f 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ion of the resul
193b0 74 73 20 6f 66 20 74 68 65 0a 6c 65 66 74 20 61  ts of the.left a
193c0 6e 64 20 72 69 67 68 74 20 53 45 4c 45 43 54 73  nd right SELECTs
193d0 2e 20 20 5e 45 58 43 45 50 54 20 74 61 6b 65 73  .  ^EXCEPT takes
193e0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 6c   the result of l
193f0 65 66 74 20 53 45 4c 45 43 54 20 61 66 74 65 72  eft SELECT after
19400 0a 72 65 6d 6f 76 69 6e 67 20 74 68 65 20 72 65  .removing the re
19410 73 75 6c 74 73 20 6f 66 20 74 68 65 20 72 69 67  sults of the rig
19420 68 74 20 53 45 4c 45 43 54 2e 20 20 5e 57 68 65  ht SELECT.  ^Whe
19430 6e 20 74 68 72 65 65 20 6f 72 20 6d 6f 72 65 20  n three or more 
19440 53 45 4c 45 43 54 73 0a 61 72 65 20 63 6f 6e 6e  SELECTs.are conn
19450 65 63 74 65 64 20 69 6e 74 6f 20 61 20 63 6f 6d  ected into a com
19460 70 6f 75 6e 64 2c 20 74 68 65 79 20 67 72 6f 75  pound, they grou
19470 70 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  p from left to r
19480 69 67 68 74 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c  ight.</p>...<tcl
19490 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
194a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
194b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
194c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
194d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
194e0 0a 53 65 63 74 69 6f 6e 20 55 50 44 41 54 45 20  .Section UPDATE 
194f0 75 70 64 61 74 65 20 7b 55 50 44 41 54 45 20 2a  update {UPDATE *
19500 55 50 44 41 54 45 73 7d 0a 0a 42 75 62 62 6c 65  UPDATEs}..Bubble
19510 44 69 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73  Diagram update-s
19520 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61 67  tmt 1.BubbleDiag
19530 72 61 6d 20 71 75 61 6c 69 66 69 65 64 2d 74 61  ram qualified-ta
19540 62 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e 0a  ble-name.</tcl>.
19550 0a 3c 70 3e 5e 54 68 65 20 55 50 44 41 54 45 20  .<p>^The UPDATE 
19560 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65  statement is use
19570 64 20 74 6f 20 63 68 61 6e 67 65 20 74 68 65 20  d to change the 
19580 76 61 6c 75 65 20 6f 66 20 63 6f 6c 75 6d 6e 73  value of columns
19590 20 69 6e 20 0a 73 65 6c 65 63 74 65 64 20 72 6f   in .selected ro
195a0 77 73 20 6f 66 20 61 20 74 61 62 6c 65 2e 20 20  ws of a table.  
195b0 5e 45 61 63 68 20 61 73 73 69 67 6e 6d 65 6e 74  ^Each assignment
195c0 20 69 6e 20 61 6e 20 55 50 44 41 54 45 20 73 70   in an UPDATE sp
195d0 65 63 69 66 69 65 73 0a 61 20 63 6f 6c 75 6d 6e  ecifies.a column
195e0 20 6e 61 6d 65 20 74 6f 20 74 68 65 20 6c 65 66   name to the lef
195f0 74 20 6f 66 20 74 68 65 20 65 71 75 61 6c 73 20  t of the equals 
19600 73 69 67 6e 20 61 6e 64 20 61 6e 20 61 72 62 69  sign and an arbi
19610 74 72 61 72 79 20 65 78 70 72 65 73 73 69 6f 6e  trary expression
19620 0a 74 6f 20 74 68 65 20 72 69 67 68 74 2e 20 20  .to the right.  
19630 5e 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73  ^The expressions
19640 20 6d 61 79 20 75 73 65 20 74 68 65 20 76 61 6c   may use the val
19650 75 65 73 20 6f 66 20 6f 74 68 65 72 20 63 6f 6c  ues of other col
19660 75 6d 6e 73 2e 0a 5e 41 6c 6c 20 65 78 70 72 65  umns..^All expre
19670 73 73 69 6f 6e 73 20 61 72 65 20 65 76 61 6c 75  ssions are evalu
19680 61 74 65 64 20 62 65 66 6f 72 65 20 61 6e 79 20  ated before any 
19690 61 73 73 69 67 6e 6d 65 6e 74 73 20 61 72 65 20  assignments are 
196a0 6d 61 64 65 2e 0a 5e 41 20 57 48 45 52 45 20 63  made..^A WHERE c
196b0 6c 61 75 73 65 20 63 61 6e 20 62 65 20 75 73 65  lause can be use
196c0 64 20 74 6f 20 72 65 73 74 72 69 63 74 20 77 68  d to restrict wh
196d0 69 63 68 20 72 6f 77 73 20 61 72 65 20 75 70 64  ich rows are upd
196e0 61 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  ated.</p>..<p>^T
196f0 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66  he optional conf
19700 6c 69 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f  lict-clause allo
19710 77 73 20 74 68 65 20 73 70 65 63 69 66 69 63 61  ws the specifica
19720 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c 74 65 72  tion of an alter
19730 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e  native.constrain
19740 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  t conflict resol
19750 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
19760 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20 74 68  to use during th
19770 69 73 20 6f 6e 65 20 55 50 44 41 54 45 20 63 6f  is one UPDATE co
19780 6d 6d 61 6e 64 2e 0a 53 65 65 20 74 68 65 20 73  mmand..See the s
19790 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 0a 5b 4f  ection titled.[O
197a0 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20  N CONFLICT] for 
197b0 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
197c0 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33  mation.</p>..<h3
197d0 3e 52 65 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e  >Restrictions on
197e0 20 55 50 44 41 54 45 20 53 74 61 74 65 6d 65 6e   UPDATE Statemen
197f0 74 73 20 57 69 74 68 69 6e 20 43 52 45 41 54 45  ts Within CREATE
19800 20 54 52 49 47 47 45 52 3c 2f 68 33 3e 0a 0a 3c   TRIGGER</h3>..<
19810 70 3e 5e 54 68 65 72 65 20 61 72 65 20 61 64 64  p>^There are add
19820 69 74 69 6f 6e 61 6c 20 73 79 6e 74 61 78 20 72  itional syntax r
19830 65 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20 55  estrictions on U
19840 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 73  PDATE statements
19850 20 74 68 61 74 0a 6f 63 63 75 72 20 77 69 74 68   that.occur with
19860 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61  in the body of a
19870 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   [CREATE TRIGGER
19880 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 5e 54  ] statement.  ^T
19890 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65  he <i>table-name
198a0 3c 2f 69 3e 0a 6f 66 20 74 68 65 20 55 50 44 41  </i>.of the UPDA
198b0 54 45 20 6d 75 73 74 20 62 65 20 75 6e 71 75 61  TE must be unqua
198c0 6c 69 66 69 65 64 2e 20 0a 5e 28 49 6e 20 6f 74  lified. .^(In ot
198d0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 3c  her words, the <
198e0 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c  i>database-name<
198f0 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66  /i><b>.</b> pref
19900 69 78 20 0a 6f 6e 20 74 68 65 20 74 61 62 6c 65  ix .on the table
19910 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 55 50 44   name of the UPD
19920 41 54 45 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  ATE is not allow
19930 65 64 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ed within trigge
19940 72 73 2e 20 0a 5e 54 68 65 20 74 61 62 6c 65 20  rs. .^The table 
19950 74 6f 20 62 65 20 75 70 64 61 74 65 64 20 6d 75  to be updated mu
19960 73 74 20 62 65 20 69 6e 20 74 68 65 20 73 61 6d  st be in the sam
19970 65 0a 64 61 74 61 62 61 73 65 20 61 73 20 74 68  e.database as th
19980 65 20 74 61 62 6c 65 20 74 6f 20 77 68 69 63 68  e table to which
19990 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73 20   the trigger is 
199a0 61 74 74 61 63 68 65 64 2e 3c 2f 70 3e 0a 0a 3c  attached.</p>..<
199b0 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42  p>^The INDEXED B
199c0 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45  Y and NOT INDEXE
199d0 44 20 63 6c 61 75 73 65 73 20 61 72 65 20 6e 6f  D clauses are no
199e0 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 55 50 44  t allowed on UPD
199f0 41 54 45 0a 73 74 61 74 65 6d 65 6e 74 73 20 77  ATE.statements w
19a00 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 3c  ithin triggers.<
19a10 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49 4d  /p>..<p>^The LIM
19a20 49 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50  IT clause for UP
19a30 44 41 54 45 20 69 73 20 75 6e 73 75 70 70 6f 72  DATE is unsuppor
19a40 74 65 64 20 77 69 74 68 69 6e 20 74 72 69 67 67  ted within trigg
19a50 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 4f 70  ers.</p>..<h3>Op
19a60 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 61 6e 64  tional LIMIT and
19a70 20 4f 52 44 45 52 20 42 59 20 43 6c 61 75 73 65   ORDER BY Clause
19a80 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20  s</h3>..<p>^(If 
19a90 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74 20  SQLite is built 
19aa0 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45  with the [SQLITE
19ab0 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44  _ENABLE_UPDATE_D
19ac0 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d  ELETE_LIMIT].com
19ad0 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
19ae0 20 74 68 65 6e 20 74 68 65 20 73 79 6e 74 61 78   then the syntax
19af0 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73   of the UPDATE s
19b00 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78 74 65  tatement is exte
19b10 6e 64 65 64 0a 77 69 74 68 20 6f 70 74 69 6f 6e  nded.with option
19b20 61 6c 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20  al ORDER BY and 
19b30 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 29 5e 20  LIMIT clauses)^ 
19b40 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a  as follows:</p>.
19b50 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67  .<tcl>BubbleDiag
19b60 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d 74 2d  ram update-stmt-
19b70 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c  limited</tcl>..<
19b80 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  p>^The optional 
19b90 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 63 61 6e  LIMIT clause can
19ba0 20 62 65 20 75 73 65 64 20 74 6f 20 6c 69 6d 69   be used to limi
19bb0 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a  t the number of.
19bc0 72 6f 77 73 20 6d 6f 64 69 66 65 64 2c 20 61 6e  rows modifed, an
19bd0 64 20 74 68 65 72 65 62 79 20 6c 69 6d 69 74 20  d thereby limit 
19be0 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
19bf0 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 54 68  transaction..^Th
19c00 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
19c10 65 20 6f 6e 20 61 6e 20 55 50 44 41 54 45 20 73  e on an UPDATE s
19c20 74 61 74 65 6d 65 6e 74 0a 69 73 20 75 73 65 64  tatement.is used
19c30 20 6f 6e 6c 79 20 74 6f 20 64 65 74 65 72 6d 69   only to determi
19c40 6e 65 20 77 68 69 63 68 20 72 6f 77 73 20 66 61  ne which rows fa
19c50 6c 6c 0a 77 69 74 68 69 6e 20 74 68 65 20 4c 49  ll.within the LI
19c60 4d 49 54 2e 20 20 5e 54 68 65 20 6f 72 64 65 72  MIT.  ^The order
19c70 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73 20 61   in which rows a
19c80 72 65 20 6d 6f 64 69 66 69 65 64 20 69 73 20 61  re modified is a
19c90 72 62 69 74 72 61 72 79 0a 61 6e 64 20 69 73 20  rbitrary.and is 
19ca0 6e 6f 74 20 64 65 74 65 72 6d 69 6e 65 64 20 62  not determined b
19cb0 79 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  y the ORDER BY c
19cc0 6c 61 75 73 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  lause.</p>..<tcl
19cd0 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
19ce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19cf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19d00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19d10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19d20 0a 53 65 63 74 69 6f 6e 20 56 41 43 55 55 4d 20  .Section VACUUM 
19d30 76 61 63 75 75 6d 20 56 41 43 55 55 4d 0a 0a 42  vacuum VACUUM..B
19d40 75 62 62 6c 65 44 69 61 67 72 61 6d 20 76 61 63  ubbleDiagram vac
19d50 75 75 6d 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c  uum-stmt 1.</tcl
19d60 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 61 6e 20 6f  >..<p>^When an o
19d70 62 6a 65 63 74 20 28 74 61 62 6c 65 2c 20 69 6e  bject (table, in
19d80 64 65 78 2c 20 74 72 69 67 67 65 72 2c 20 6f 72  dex, trigger, or
19d90 20 76 69 65 77 29 20 69 73 20 64 72 6f 70 70 65   view) is droppe
19da0 64 20 66 72 6f 6d 20 74 68 65 20 0a 64 61 74 61  d from the .data
19db0 62 61 73 65 2c 20 69 74 20 6c 65 61 76 65 73 20  base, it leaves 
19dc0 62 65 68 69 6e 64 20 65 6d 70 74 79 20 73 70 61  behind empty spa
19dd0 63 65 2e 20 0a 5e 54 68 69 73 20 65 6d 70 74 79  ce. .^This empty
19de0 20 73 70 61 63 65 20 77 69 6c 6c 20 62 65 20 72   space will be r
19df0 65 75 73 65 64 20 74 68 65 20 6e 65 78 74 20 74  eused the next t
19e00 69 6d 65 20 6e 65 77 20 69 6e 66 6f 72 6d 61 74  ime new informat
19e10 69 6f 6e 20 69 73 0a 61 64 64 65 64 20 74 6f 20  ion is.added to 
19e20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 42  the database.  B
19e30 75 74 20 69 6e 20 74 68 65 20 6d 65 61 6e 74 69  ut in the meanti
19e40 6d 65 2c 20 74 68 65 20 64 61 74 61 62 61 73 65  me, the database
19e50 20 66 69 6c 65 20 6d 69 67 68 74 0a 62 65 20 6c   file might.be l
19e60 61 72 67 65 72 20 74 68 61 6e 20 73 74 72 69 63  arger than stric
19e70 74 6c 79 20 6e 65 63 65 73 73 61 72 79 2e 20 20  tly necessary.  
19e80 41 6c 73 6f 2c 20 66 72 65 71 75 65 6e 74 20 69  Also, frequent i
19e90 6e 73 65 72 74 73 2c 20 75 70 64 61 74 65 73 2c  nserts, updates,
19ea0 0a 61 6e 64 20 64 65 6c 65 74 65 73 20 63 61 6e  .and deletes can
19eb0 20 63 61 75 73 65 20 74 68 65 20 69 6e 66 6f 72   cause the infor
19ec0 6d 61 74 69 6f 6e 20 69 6e 20 74 68 65 20 64 61  mation in the da
19ed0 74 61 62 61 73 65 20 74 6f 20 62 65 63 6f 6d 65  tabase to become
19ee0 0a 66 72 61 67 6d 65 6e 74 65 64 20 2d 20 73 63  .fragmented - sc
19ef0 72 61 74 74 65 72 65 64 20 6f 75 74 20 61 6c 6c  rattered out all
19f00 20 61 63 72 6f 73 73 20 74 68 65 20 64 61 74 61   across the data
19f10 62 61 73 65 20 66 69 6c 65 20 72 61 74 68 65 72  base file rather
19f20 0a 74 68 61 6e 20 63 6c 75 73 74 65 72 65 64 20  .than clustered 
19f30 74 6f 67 65 74 68 65 72 20 69 6e 20 6f 6e 65 20  together in one 
19f40 70 6c 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  place.</p>..<p>^
19f50 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61  The VACUUM comma
19f60 6e 64 20 63 6c 65 61 6e 73 0a 74 68 65 20 6d 61  nd cleans.the ma
19f70 69 6e 20 64 61 74 61 62 61 73 65 20 62 79 20 63  in database by c
19f80 6f 70 79 69 6e 67 20 69 74 73 20 63 6f 6e 74 65  opying its conte
19f90 6e 74 73 20 74 6f 20 61 20 74 65 6d 70 6f 72 61  nts to a tempora
19fa0 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
19fb0 20 61 6e 64 20 0a 72 65 6c 6f 61 64 69 6e 67 20   and .reloading 
19fc0 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74  the original dat
19fd0 61 62 61 73 65 20 66 69 6c 65 20 66 72 6f 6d 20  abase file from 
19fe0 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69 73 20  the copy.  This 
19ff0 65 6c 69 6d 69 6e 61 74 65 73 20 0a 66 72 65 65  eliminates .free
1a000 20 70 61 67 65 73 2c 20 20 61 6c 69 67 6e 73 20   pages,  aligns 
1a010 74 61 62 6c 65 20 64 61 74 61 20 74 6f 20 62 65  table data to be
1a020 20 63 6f 6e 74 69 67 75 6f 75 73 2c 20 61 6e 64   contiguous, and
1a030 20 6f 74 68 65 72 77 69 73 65 20 63 6c 65 61 6e   otherwise clean
1a040 73 20 0a 75 70 20 74 68 65 20 64 61 74 61 62 61  s .up the databa
1a050 73 65 20 66 69 6c 65 20 73 74 72 75 63 74 75 72  se file structur
1a060 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  e.</p>..<p>^The 
1a070 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 6d  VACUUM command m
1a080 61 79 20 63 68 61 6e 67 65 20 74 68 65 20 0a 5b  ay change the .[
1a090 52 4f 57 49 44 20 7c 20 52 4f 57 49 44 73 5d 20  ROWID | ROWIDs] 
1a0a0 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 74 61  of entries in ta
1a0b0 62 6c 65 73 20 74 68 61 74 20 64 6f 0a 6e 6f 74  bles that do.not
1a0c0 20 68 61 76 65 20 61 6e 20 65 78 70 6c 69 63 69   have an explici
1a0d0 74 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  t [INTEGER PRIMA
1a0e0 52 59 20 4b 45 59 5d 2e 3c 2f 70 3e 0a 0a 3c 70  RY KEY].</p>..<p
1a0f0 3e 5e 56 41 43 55 55 4d 20 6f 6e 6c 79 20 77 6f  >^VACUUM only wo
1a100 72 6b 73 20 6f 6e 20 74 68 65 20 6d 61 69 6e 20  rks on the main 
1a110 64 61 74 61 62 61 73 65 2e 0a 49 74 20 69 73 20  database..It is 
1a120 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20  not possible to 
1a130 56 41 43 55 55 4d 20 61 6e 20 61 74 74 61 63 68  VACUUM an attach
1a140 65 64 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ed database file
1a150 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 56  .</p>..<p>^The V
1a160 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 77 69  ACUUM command wi
1a170 6c 6c 20 66 61 69 6c 20 69 66 20 74 68 65 72 65  ll fail if there
1a180 20 69 73 20 61 6e 20 61 63 74 69 76 65 20 74 72   is an active tr
1a190 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 54 68 65 20  ansaction..^The 
1a1a0 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 69  VACUUM command i
1a1b0 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 69 6e  s a no-op for in
1a1c0 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
1a1d0 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 73 20 6f  s.</p>..<p>^As o
1a1e0 66 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  f SQLite version
1a1f0 20 33 2e 31 2c 20 61 6e 20 61 6c 74 65 72 6e 61   3.1, an alterna
1a200 74 69 76 65 20 74 6f 20 75 73 69 6e 67 20 74 68  tive to using th
1a210 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64  e VACUUM command
1a220 0a 69 73 20 61 75 74 6f 2d 76 61 63 75 75 6d 20  .is auto-vacuum 
1a230 6d 6f 64 65 2c 20 65 6e 61 62 6c 65 64 20 75 73  mode, enabled us
1a240 69 6e 67 20 74 68 65 20 0a 5b 61 75 74 6f 5f 76  ing the .[auto_v
1a250 61 63 75 75 6d 5d 20 70 72 61 67 6d 61 2e 20 20  acuum] pragma.  
1a260 5e 57 68 65 6e 20 5b 61 75 74 6f 5f 76 61 63 75  ^When [auto_vacu
1a270 75 6d 5d 20 69 73 20 65 6e 61 62 6c 65 64 20 66  um] is enabled f
1a280 6f 72 20 61 20 64 61 74 61 62 61 73 65 2c 20 0a  or a database, .
1a290 6c 61 72 67 65 20 64 65 6c 65 74 65 73 20 63 61  large deletes ca
1a2a0 75 73 65 0a 74 68 65 20 73 69 7a 65 20 6f 66 20  use.the size of 
1a2b0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
1a2c0 65 20 74 6f 20 73 68 72 69 6e 6b 2e 20 20 48 6f  e to shrink.  Ho
1a2d0 77 65 76 65 72 2c 20 5b 61 75 74 6f 5f 76 61 63  wever, [auto_vac
1a2e0 75 75 6d 5d 0a 61 6c 73 6f 20 63 61 75 73 65 73  uum].also causes
1a2f0 20 65 78 63 65 73 73 20 66 72 61 67 6d 65 6e 74   excess fragment
1a300 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
1a310 61 62 61 73 65 20 66 69 6c 65 2e 20 20 5e 41 6e  abase file.  ^An
1a320 64 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 0a  d [auto_vacuum].
1a330 64 6f 65 73 20 6e 6f 74 20 63 6f 6d 70 61 63 74  does not compact
1a340 20 70 61 72 74 69 61 6c 6c 79 20 66 69 6c 6c 65   partially fille
1a350 64 20 70 61 67 65 73 20 6f 66 20 74 68 65 20 64  d pages of the d
1a360 61 74 61 62 61 73 65 20 61 73 20 56 41 43 55 55  atabase as VACUU
1a370 4d 0a 64 6f 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  M.does.</p>..<p>
1a380 5e 54 68 65 20 5b 70 61 67 65 5f 73 69 7a 65 5d  ^The [page_size]
1a390 20 61 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f 76 61   and/or [auto_va
1a3a0 63 75 75 6d 5d 20 6d 6f 64 65 20 6f 66 20 61 20  cuum] mode of a 
1a3b0 64 61 74 61 62 61 73 65 20 63 61 6e 20 62 65 20  database can be 
1a3c0 63 68 61 6e 67 65 64 0a 62 79 20 69 6e 76 6f 6b  changed.by invok
1a3d0 69 6e 67 20 74 68 65 20 5b 70 61 67 65 5f 73 69  ing the [page_si
1a3e0 7a 65 20 70 72 61 67 6d 61 5d 20 61 6e 64 2f 6f  ze pragma] and/o
1a3f0 72 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 20 70  r [auto_vacuum p
1a400 72 61 67 6d 61 5d 20 61 6e 64 20 74 68 65 6e 0a  ragma] and then.
1a410 69 6d 6d 65 64 69 61 74 65 6c 79 20 56 41 43 55  immediately VACU
1a420 55 4d 69 6e 67 20 74 68 65 20 64 61 74 61 62 61  UMing the databa
1a430 73 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  se.</p>..<tcl>.#
1a440 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a450 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a460 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a470 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a480 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
1a490 63 74 69 6f 6e 20 7b 49 4e 44 45 58 45 44 20 42  ction {INDEXED B
1a4a0 59 7d 20 69 6e 64 65 78 65 64 62 79 20 7b 7b 49  Y} indexedby {{I
1a4b0 4e 44 45 58 45 44 20 42 59 7d 20 7b 4e 4f 54 20  NDEXED BY} {NOT 
1a4c0 49 4e 44 45 58 45 44 7d 7d 0a 0a 3c 2f 74 63 6c  INDEXED}}..</tcl
1a4d0 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45  >.<p>^The INDEXE
1a4e0 44 20 42 59 20 70 68 72 61 73 65 20 69 73 20 61  D BY phrase is a
1a4f0 20 53 51 4c 20 65 78 74 65 6e 73 69 6f 6e 20 66   SQL extension f
1a500 6f 75 6e 64 20 6f 6e 6c 79 20 69 6e 20 53 51 4c  ound only in SQL
1a510 69 74 65 20 77 68 69 63 68 20 63 61 6e 0a 62 65  ite which can.be
1a520 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20   used to verify 
1a530 74 68 61 74 20 74 68 65 20 63 6f 72 72 65 63 74  that the correct
1a540 20 69 6e 64 69 63 65 73 20 61 72 65 20 62 65 69   indices are bei
1a550 6e 67 20 75 73 65 64 20 6f 6e 20 61 20 5b 44 45  ng used on a [DE
1a560 4c 45 54 45 5d 2c 0a 5b 53 45 4c 45 43 54 5d 2c  LETE],.[SELECT],
1a570 20 6f 72 20 5b 55 50 44 41 54 45 5d 20 73 74 61   or [UPDATE] sta
1a580 74 65 6d 65 6e 74 2e 0a 5e 54 68 65 20 49 4e 44  tement..^The IND
1a590 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20 61  EXED BY phrase a
1a5a0 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73 20 74 68  lways follows th
1a5b0 65 20 6e 61 6d 65 20 6f 66 20 61 20 74 61 62 6c  e name of a tabl
1a5c0 65 20 74 68 61 74 20 53 51 4c 69 74 65 20 77 69  e that SQLite wi
1a5d0 6c 6c 0a 62 65 20 72 65 61 64 69 6e 67 2e 20 20  ll.be reading.  
1a5e0 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70  The INDEXED BY p
1a5f0 68 72 61 73 65 20 63 61 6e 20 62 65 20 73 65 65  hrase can be see
1a600 6e 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  n in the followi
1a610 6e 67 20 73 79 6e 74 61 78 0a 64 69 61 67 72 61  ng syntax.diagra
1a620 6d 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 42  ms:</p>..<tcl>.B
1a630 75 62 62 6c 65 44 69 61 67 72 61 6d 20 71 75 61  ubbleDiagram qua
1a640 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d  lified-table-nam
1a650 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  e.BubbleDiagram 
1a660 73 69 6e 67 6c 65 2d 73 6f 75 72 63 65 0a 3c 2f  single-source.</
1a670 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 49  tcl>..<p>^The "I
1a680 4e 44 45 58 45 44 20 42 59 20 69 6e 64 65 78 2d  NDEXED BY index-
1a690 6e 61 6d 65 22 20 63 6c 61 75 73 65 20 73 70 65  name" clause spe
1a6a0 63 69 66 69 65 73 20 74 68 61 74 20 74 68 65 20  cifies that the 
1a6b0 6e 61 6d 65 64 20 69 6e 64 65 78 0a 6d 75 73 74  named index.must
1a6c0 20 62 65 20 75 73 65 64 20 69 6e 20 6f 72 64 65   be used in orde
1a6d0 72 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 76 61 6c  r to look up val
1a6e0 75 65 73 20 6f 6e 20 74 68 65 20 70 72 65 63 65  ues on the prece
1a6f0 64 69 6e 67 20 74 61 62 6c 65 2e 0a 5e 49 66 20  ding table..^If 
1a700 69 6e 64 65 78 2d 6e 61 6d 65 20 64 6f 65 73 20  index-name does 
1a710 6e 6f 74 20 65 78 69 73 74 20 6f 72 20 63 61 6e  not exist or can
1a720 6e 6f 74 20 62 65 20 75 73 65 64 20 66 6f 72 20  not be used for 
1a730 74 68 65 20 71 75 65 72 79 2c 20 74 68 65 6e 0a  the query, then.
1a740 74 68 65 20 70 72 65 70 61 72 61 74 69 6f 6e 20  the preparation 
1a750 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  of the SQL state
1a760 6d 65 6e 74 20 66 61 69 6c 73 2e 0a 5e 28 54 68  ment fails..^(Th
1a770 65 20 22 4e 4f 54 20 49 4e 44 45 58 45 44 22 20  e "NOT INDEXED" 
1a780 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 73  clause specifies
1a790 20 74 68 61 74 20 6e 6f 20 69 6e 64 65 78 20 73   that no index s
1a7a0 68 61 6c 6c 20 62 65 20 75 73 65 64 20 77 68 65  hall be used whe
1a7b0 6e 0a 61 63 63 65 73 73 69 6e 67 20 74 68 65 20  n.accessing the 
1a7c0 70 72 65 63 65 64 69 6e 67 20 74 61 62 6c 65 2c  preceding table,
1a7d0 20 69 6e 63 6c 75 64 69 6e 67 20 69 6d 70 6c 69   including impli
1a7e0 65 64 20 69 6e 64 69 63 65 73 20 63 72 65 61 74  ed indices creat
1a7f0 65 20 62 79 0a 55 4e 49 51 55 45 20 61 6e 64 20  e by.UNIQUE and 
1a800 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73  PRIMARY KEY cons
1a810 74 72 61 69 6e 74 73 2e 20 20 48 6f 77 65 76 65  traints.  Howeve
1a820 72 2c 20 74 68 65 20 49 4e 54 45 47 45 52 20 50  r, the INTEGER P
1a830 52 49 4d 41 52 59 20 4b 45 59 0a 63 61 6e 20 73  RIMARY KEY.can s
1a840 74 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20  till be used to 
1a850 6c 6f 6f 6b 20 75 70 20 65 6e 74 72 69 65 73 20  look up entries 
1a860 65 76 65 6e 20 77 68 65 6e 20 22 4e 4f 54 20 49  even when "NOT I
1a870 4e 44 45 58 45 44 22 20 69 73 20 73 70 65 63 69  NDEXED" is speci
1a880 66 69 65 64 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e  fied.)^</p>..<p>
1a890 53 6f 6d 65 20 53 51 4c 20 64 61 74 61 62 61 73  Some SQL databas
1a8a0 65 20 65 6e 67 69 6e 65 73 20 70 72 6f 76 69 64  e engines provid
1a8b0 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 22  e non-standard "
1a8c0 68 69 6e 74 22 20 6d 65 63 68 61 6e 69 73 6d 73  hint" mechanisms
1a8d0 20 77 68 69 63 68 0a 63 61 6e 20 62 65 20 75 73   which.can be us
1a8e0 65 64 20 74 6f 20 67 69 76 65 20 74 68 65 20 71  ed to give the q
1a8f0 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 63  uery optimizer c
1a900 6c 75 65 73 20 61 62 6f 75 74 20 77 68 61 74 20  lues about what 
1a910 69 6e 64 69 63 65 73 20 69 74 20 73 68 6f 75 6c  indices it shoul
1a920 64 0a 75 73 65 20 66 6f 72 20 61 20 70 61 72 74  d.use for a part
1a930 69 63 75 6c 61 72 20 73 74 61 74 65 6d 65 6e 74  icular statement
1a940 2e 20 20 54 68 65 20 49 4e 44 45 58 20 42 59 20  .  The INDEX BY 
1a950 63 6c 61 75 73 65 20 6f 66 20 53 51 4c 69 74 65  clause of SQLite
1a960 20 69 73 20 0a 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d   is .<em>not</em
1a970 3e 20 61 20 68 69 6e 74 69 6e 67 20 6d 65 63 68  > a hinting mech
1a980 61 6e 69 73 6d 20 61 6e 64 20 69 74 20 73 68 6f  anism and it sho
1a990 75 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20  uld not be used 
1a9a0 61 73 20 73 75 63 68 2e 0a 5e 54 68 65 20 49 4e  as such..^The IN
1a9b0 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20  DEXED BY clause 
1a9c0 64 6f 65 73 20 6e 6f 74 20 67 69 76 65 20 74 68  does not give th
1a9d0 65 20 6f 70 74 69 6d 69 7a 65 72 20 68 69 6e 74  e optimizer hint
1a9e0 73 20 61 62 6f 75 74 20 77 68 69 63 68 20 69 6e  s about which in
1a9f0 64 65 78 0a 74 6f 20 75 73 65 3b 20 69 74 20 67  dex.to use; it g
1aa00 69 76 65 73 20 74 68 65 20 6f 70 74 69 6d 69 7a  ives the optimiz
1aa10 65 72 20 61 20 72 65 71 75 69 72 65 6d 65 6e 74  er a requirement
1aa20 20 6f 66 20 77 68 69 63 68 20 69 6e 64 65 78 20   of which index 
1aa30 74 6f 20 75 73 65 2e 0a 5e 49 66 20 74 68 65 20  to use..^If the 
1aa40 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20  query optimizer 
1aa50 69 73 20 75 6e 61 62 6c 65 20 74 6f 20 75 73 65  is unable to use
1aa60 20 74 68 65 20 69 6e 64 65 78 20 73 70 65 63 69   the index speci
1aa70 66 69 65 64 20 62 79 20 74 68 65 0a 49 4e 44 45  fied by the.INDE
1aa80 58 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65  X BY clause, the
1aa90 6e 20 74 68 65 20 71 75 65 72 79 20 77 69 6c 6c  n the query will
1aaa0 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72   fail with an er
1aab0 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ror.</p>..<p>The
1aac0 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75   INDEXED BY clau
1aad0 73 65 20 69 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65  se is <em>not</e
1aae0 6d 3e 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20  m> intended for 
1aaf0 75 73 65 20 69 6e 20 74 75 6e 69 6e 67 0a 74 68  use in tuning.th
1ab00 65 20 70 72 65 66 6f 72 6d 61 6e 63 65 20 6f 66  e preformance of
1ab10 20 61 20 71 75 65 72 79 2e 20 20 54 68 65 20 69   a query.  The i
1ab20 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 49 4e 44  ntent of the IND
1ab30 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 69  EXED BY clause i
1ab40 73 0a 74 6f 20 72 61 69 73 65 20 61 20 72 75 6e  s.to raise a run
1ab50 2d 74 69 6d 65 20 65 72 72 6f 72 20 69 66 20 61  -time error if a
1ab60 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 2c 20   schema change, 
1ab70 73 75 63 68 20 61 73 20 64 72 6f 70 70 69 6e 67  such as dropping
1ab80 20 6f 72 0a 63 72 65 61 74 69 6e 67 20 61 6e 20   or.creating an 
1ab90 69 6e 64 65 78 2c 20 63 61 75 73 65 73 20 74 68  index, causes th
1aba0 65 20 71 75 65 72 79 20 70 6c 61 6e 20 66 6f 72  e query plan for
1abb0 20 61 20 74 69 6d 65 2d 73 65 6e 73 69 74 69 76   a time-sensitiv
1abc0 65 20 71 75 65 72 79 0a 74 6f 20 63 68 61 6e 67  e query.to chang
1abd0 65 2e 20 20 54 68 65 20 49 4e 44 45 58 45 44 20  e.  The INDEXED 
1abe0 42 59 20 63 6c 61 75 73 65 20 69 73 20 64 65 73  BY clause is des
1abf0 69 67 6e 65 64 20 74 6f 20 68 65 6c 70 20 64 65  igned to help de
1ac00 74 65 63 74 0a 75 6e 64 65 73 69 72 61 62 6c 65  tect.undesirable
1ac10 20 71 75 65 72 79 20 70 6c 61 6e 20 63 68 61 6e   query plan chan
1ac20 67 65 73 20 64 75 72 69 6e 67 20 72 65 67 72 65  ges during regre
1ac30 73 73 69 6f 6e 20 74 65 73 74 69 6e 67 2e 0a 44  ssion testing..D
1ac40 65 76 65 6c 6f 70 65 72 73 20 61 72 65 20 61 64  evelopers are ad
1ac50 6d 6f 6e 69 73 68 65 64 20 74 6f 20 6f 6d 69 74  monished to omit
1ac60 20 61 6c 6c 20 75 73 65 20 6f 66 20 49 4e 44 45   all use of INDE
1ac70 58 45 44 20 42 59 20 64 75 72 69 6e 67 0a 61 70  XED BY during.ap
1ac80 70 6c 69 63 61 74 69 6f 6e 20 64 65 73 69 67 6e  plication design
1ac90 2c 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  , implementation
1aca0 2c 20 74 65 73 74 69 6e 67 2c 20 61 6e 64 20 74  , testing, and t
1acb0 75 6e 69 6e 67 2e 20 20 49 66 0a 49 4e 44 45 58  uning.  If.INDEX
1acc0 45 44 20 42 59 20 69 73 20 74 6f 20 62 65 20 75  ED BY is to be u
1acd0 73 65 64 20 61 74 20 61 6c 6c 2c 20 69 74 20 73  sed at all, it s
1ace0 68 6f 75 6c 64 20 62 65 20 69 6e 73 65 72 74 65  hould be inserte
1acf0 64 20 61 74 20 74 68 65 20 76 65 72 79 0a 65 6e  d at the very.en
1ad00 64 20 6f 66 20 74 68 65 20 64 65 76 65 6c 6f 70  d of the develop
1ad10 6d 65 6e 74 20 70 72 6f 63 65 73 73 20 77 68 65  ment process whe
1ad20 6e 20 22 6c 6f 63 6b 69 6e 67 20 64 6f 77 6e 22  n "locking down"
1ad30 20 61 20 64 65 73 69 67 6e 2e 3c 2f 70 3e 0a 0a   a design.</p>..
1ad40 3c 68 33 3e 53 65 65 20 41 6c 73 6f 3a 3c 2f 68  <h3>See Also:</h
1ad50 33 3e 0a 0a 3c 70 3e 54 68 65 20 5b 73 71 6c 69  3>..<p>The [sqli
1ad60 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28  te3_stmt_status(
1ad70 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61  )] C/C++ interfa
1ad80 63 65 20 74 6f 67 65 74 68 65 72 20 77 69 74 68  ce together with
1ad90 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f 53 54 4d   the.[SQLITE_STM
1ada0 54 53 54 41 54 55 53 5f 46 55 4c 4c 53 43 41 4e  TSTATUS_FULLSCAN
1adb0 5f 53 54 45 50 5d 20 61 6e 64 20 5b 53 51 4c 49  _STEP] and [SQLI
1adc0 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f  TE_STMTSTATUS_SO
1add0 52 54 5d 20 76 65 72 62 73 0a 63 61 6e 20 62 65  RT] verbs.can be
1ade0 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20   used to detect 
1adf0 61 74 20 72 75 6e 2d 74 69 6d 65 20 77 68 65 6e  at run-time when
1ae00 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e   an SQL statemen
1ae10 74 20 69 73 20 6e 6f 74 0a 6d 61 6b 69 6e 67 20  t is not.making 
1ae20 65 66 66 65 63 74 69 76 65 20 75 73 65 20 6f 66  effective use of
1ae30 20 69 6e 64 69 63 65 73 2e 20 20 4d 61 6e 79 20   indices.  Many 
1ae40 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 6d 61 79  applications may
1ae50 20 70 72 65 66 65 72 20 74 6f 0a 75 73 65 20 74   prefer to.use t
1ae60 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74  he [sqlite3_stmt
1ae70 5f 73 74 61 74 75 73 28 29 5d 20 69 6e 74 65 72  _status()] inter
1ae80 66 61 63 65 20 74 6f 20 64 65 74 65 63 74 20 69  face to detect i
1ae90 6e 64 65 78 20 6d 69 73 75 73 65 0a 72 61 74 68  ndex misuse.rath
1aea0 65 72 20 74 68 61 6e 20 74 68 65 20 49 4e 44 45  er than the INDE
1aeb0 58 45 44 20 42 59 20 70 68 72 61 73 65 20 64 65  XED BY phrase de
1aec0 73 63 72 69 62 65 64 20 68 65 72 65 2e 3c 2f 70  scribed here.</p
1aed0 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
1aee0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1aef0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1af00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1af10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1af20 23 23 23 23 23 23 0a 23 20 41 20 6c 69 73 74 20  ######.# A list 
1af30 6f 66 20 6b 65 79 77 6f 72 64 73 2e 20 20 41 20  of keywords.  A 
1af40 61 73 74 65 72 69 73 6b 20 6f 63 63 75 72 73 20  asterisk occurs 
1af50 61 66 74 65 72 20 74 68 65 20 6b 65 79 77 6f 72  after the keywor
1af60 64 20 69 66 20 69 74 20 69 73 20 6f 6e 0a 23 20  d if it is on.# 
1af70 74 68 65 20 66 61 6c 6c 62 61 63 6b 20 6c 69 73  the fallback lis
1af80 74 2e 0a 23 0a 73 65 74 20 6b 65 79 77 6f 72 64  t..#.set keyword
1af90 5f 6c 69 73 74 20 5b 6c 73 6f 72 74 20 7b 0a 20  _list [lsort {. 
1afa0 20 20 41 42 4f 52 54 2a 0a 20 20 20 41 44 44 0a    ABORT*.   ADD.
1afb0 20 20 20 41 46 54 45 52 2a 0a 20 20 20 41 4c 4c     AFTER*.   ALL
1afc0 0a 20 20 20 41 4c 54 45 52 0a 20 20 20 41 4e 41  .   ALTER.   ANA
1afd0 4c 59 5a 45 2a 0a 20 20 20 41 4e 44 0a 20 20 20  LYZE*.   AND.   
1afe0 41 53 0a 20 20 20 41 53 43 2a 0a 20 20 20 41 54  AS.   ASC*.   AT
1aff0 54 41 43 48 2a 0a 20 20 20 41 55 54 4f 49 4e 43  TACH*.   AUTOINC
1b000 52 45 4d 45 4e 54 0a 20 20 20 42 45 46 4f 52 45  REMENT.   BEFORE
1b010 2a 0a 20 20 20 42 45 47 49 4e 2a 0a 20 20 20 42  *.   BEGIN*.   B
1b020 45 54 57 45 45 4e 0a 20 20 20 42 59 2a 0a 20 20  ETWEEN.   BY*.  
1b030 20 43 41 53 43 41 44 45 2a 0a 20 20 20 43 41 53   CASCADE*.   CAS
1b040 45 0a 20 20 20 43 41 53 54 2a 0a 20 20 20 43 48  E.   CAST*.   CH
1b050 45 43 4b 0a 20 20 20 43 4f 4c 4c 41 54 45 0a 20  ECK.   COLLATE. 
1b060 20 20 43 4f 4c 55 4d 4e 2a 0a 20 20 20 43 4f 4d    COLUMN*.   COM
1b070 4d 49 54 0a 20 20 20 43 4f 4e 46 4c 49 43 54 2a  MIT.   CONFLICT*
1b080 0a 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 0a 20  .   CONSTRAINT. 
1b090 20 20 43 52 45 41 54 45 0a 20 20 20 43 52 4f 53    CREATE.   CROS
1b0a0 53 0a 20 20 20 43 55 52 52 45 4e 54 5f 44 41 54  S.   CURRENT_DAT
1b0b0 45 2a 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49  E*.   CURRENT_TI
1b0c0 4d 45 2a 0a 20 20 20 43 55 52 52 45 4e 54 5f 54  ME*.   CURRENT_T
1b0d0 49 4d 45 53 54 41 4d 50 2a 0a 20 20 20 44 41 54  IMESTAMP*.   DAT
1b0e0 41 42 41 53 45 2a 0a 20 20 20 44 45 46 41 55 4c  ABASE*.   DEFAUL
1b0f0 54 0a 20 20 20 44 45 46 45 52 52 45 44 2a 0a 20  T.   DEFERRED*. 
1b100 20 20 44 45 46 45 52 52 41 42 4c 45 0a 20 20 20    DEFERRABLE.   
1b110 44 45 4c 45 54 45 0a 20 20 20 44 45 53 43 2a 0a  DELETE.   DESC*.
1b120 20 20 20 44 45 54 41 43 48 2a 0a 20 20 20 44 49     DETACH*.   DI
1b130 53 54 49 4e 43 54 0a 20 20 20 44 52 4f 50 0a 20  STINCT.   DROP. 
1b140 20 20 45 4e 44 2a 0a 20 20 20 45 41 43 48 2a 0a    END*.   EACH*.
1b150 20 20 20 45 4c 53 45 0a 20 20 20 45 53 43 41 50     ELSE.   ESCAP
1b160 45 0a 20 20 20 45 58 43 45 50 54 0a 20 20 20 45  E.   EXCEPT.   E
1b170 58 43 4c 55 53 49 56 45 2a 0a 20 20 20 45 58 49  XCLUSIVE*.   EXI
1b180 53 54 53 0a 20 20 20 45 58 50 4c 41 49 4e 2a 0a  STS.   EXPLAIN*.
1b190 20 20 20 46 41 49 4c 2a 0a 20 20 20 46 4f 52 2a     FAIL*.   FOR*
1b1a0 0a 20 20 20 46 4f 52 45 49 47 4e 0a 20 20 20 46  .   FOREIGN.   F
1b1b0 52 4f 4d 0a 20 20 20 46 55 4c 4c 0a 20 20 20 47  ROM.   FULL.   G
1b1c0 4c 4f 42 2a 0a 20 20 20 47 52 4f 55 50 0a 20 20  LOB*.   GROUP.  
1b1d0 20 48 41 56 49 4e 47 0a 20 20 20 49 46 2a 0a 20   HAVING.   IF*. 
1b1e0 20 20 49 47 4e 4f 52 45 2a 0a 20 20 20 49 4d 4d    IGNORE*.   IMM
1b1f0 45 44 49 41 54 45 2a 0a 20 20 20 49 4e 0a 20 20  EDIATE*.   IN.  
1b200 20 49 4e 44 45 58 0a 20 20 20 49 4e 44 45 58 45   INDEX.   INDEXE
1b210 44 2a 0a 20 20 20 49 4e 49 54 49 41 4c 4c 59 2a  D*.   INITIALLY*
1b220 0a 20 20 20 49 4e 4e 45 52 0a 20 20 20 49 4e 53  .   INNER.   INS
1b230 45 52 54 0a 20 20 20 49 4e 53 54 45 41 44 2a 0a  ERT.   INSTEAD*.
1b240 20 20 20 49 4e 54 45 52 53 45 43 54 0a 20 20 20     INTERSECT.   
1b250 49 4e 54 4f 0a 20 20 20 49 53 0a 20 20 20 49 53  INTO.   IS.   IS
1b260 4e 55 4c 4c 0a 20 20 20 4a 4f 49 4e 0a 20 20 20  NULL.   JOIN.   
1b270 4b 45 59 2a 0a 20 20 20 4c 45 46 54 0a 20 20 20  KEY*.   LEFT.   
1b280 4c 49 4b 45 2a 0a 20 20 20 4c 49 4d 49 54 0a 20  LIKE*.   LIMIT. 
1b290 20 20 4d 41 54 43 48 2a 0a 20 20 20 4e 41 54 55    MATCH*.   NATU
1b2a0 52 41 4c 0a 20 20 20 4e 4f 54 0a 20 20 20 4e 4f  RAL.   NOT.   NO
1b2b0 54 4e 55 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20  TNULL.   NULL.  
1b2c0 20 4f 46 2a 0a 20 20 20 4f 46 46 53 45 54 2a 0a   OF*.   OFFSET*.
1b2d0 20 20 20 4f 4e 0a 20 20 20 4f 52 0a 20 20 20 4f     ON.   OR.   O
1b2e0 52 44 45 52 0a 20 20 20 4f 55 54 45 52 0a 20 20  RDER.   OUTER.  
1b2f0 20 50 4c 41 4e 2a 0a 20 20 20 50 52 41 47 4d 41   PLAN*.   PRAGMA
1b300 2a 0a 20 20 20 50 52 49 4d 41 52 59 0a 20 20 20  *.   PRIMARY.   
1b310 51 55 45 52 59 2a 0a 20 20 20 52 41 49 53 45 2a  QUERY*.   RAISE*
1b320 0a 20 20 20 52 45 46 45 52 45 4e 43 45 53 0a 20  .   REFERENCES. 
1b330 20 20 52 45 47 45 58 50 2a 0a 20 20 20 52 45 49    REGEXP*.   REI
1b340 4e 44 45 58 2a 0a 20 20 20 52 45 4c 45 41 53 45  NDEX*.   RELEASE
1b350 2a 0a 20 20 20 52 45 4e 41 4d 45 2a 0a 20 20 20  *.   RENAME*.   
1b360 52 45 50 4c 41 43 45 2a 0a 20 20 20 52 45 53 54  REPLACE*.   REST
1b370 52 49 43 54 2a 0a 20 20 20 52 49 47 48 54 0a 20  RICT*.   RIGHT. 
1b380 20 20 52 4f 4c 4c 42 41 43 4b 0a 20 20 20 52 4f    ROLLBACK.   RO
1b390 57 2a 0a 20 20 20 53 41 56 45 50 4f 49 4e 54 2a  W*.   SAVEPOINT*
1b3a0 0a 20 20 20 53 45 4c 45 43 54 0a 20 20 20 53 45  .   SELECT.   SE
1b3b0 54 0a 20 20 20 54 41 42 4c 45 0a 20 20 20 54 45  T.   TABLE.   TE
1b3c0 4d 50 2a 0a 20 20 20 54 45 4d 50 4f 52 41 52 59  MP*.   TEMPORARY
1b3d0 2a 0a 20 20 20 54 48 45 4e 0a 20 20 20 54 4f 0a  *.   THEN.   TO.
1b3e0 20 20 20 54 52 41 4e 53 41 43 54 49 4f 4e 0a 20     TRANSACTION. 
1b3f0 20 20 54 52 49 47 47 45 52 2a 0a 20 20 20 55 4e    TRIGGER*.   UN
1b400 49 4f 4e 0a 20 20 20 55 4e 49 51 55 45 0a 20 20  ION.   UNIQUE.  
1b410 20 55 50 44 41 54 45 0a 20 20 20 55 53 49 4e 47   UPDATE.   USING
1b420 0a 20 20 20 56 41 43 55 55 4d 2a 0a 20 20 20 56  .   VACUUM*.   V
1b430 41 4c 55 45 53 0a 20 20 20 56 49 45 57 2a 0a 20  ALUES.   VIEW*. 
1b440 20 20 56 49 52 54 55 41 4c 2a 0a 20 20 20 57 48    VIRTUAL*.   WH
1b450 45 4e 0a 20 20 20 57 48 45 52 45 0a 7d 5d 0a 0a  EN.   WHERE.}]..
1b460 68 64 5f 70 75 74 73 20 7b 3c 44 49 56 20 63 6c  hd_puts {<DIV cl
1b470 61 73 73 3d 22 70 64 66 5f 73 65 63 74 69 6f 6e  ass="pdf_section
1b480 22 3e 7d 0a 53 65 63 74 69 6f 6e 20 7b 53 51 4c  ">}.Section {SQL
1b490 69 74 65 20 4b 65 79 77 6f 72 64 73 7d 20 6b 65  ite Keywords} ke
1b4a0 79 77 6f 72 64 73 20 7b 7b 2a 53 51 4c 20 6b 65  ywords {{*SQL ke
1b4b0 79 77 6f 72 64 7d 20 7b 53 51 4c 20 6b 65 79 77  yword} {SQL keyw
1b4c0 6f 72 64 73 7d 7d 0a 68 64 5f 70 75 74 73 20 7b  ords}}.hd_puts {
1b4d0 3c 2f 44 49 56 3e 7d 0a 3c 2f 74 63 6c 3e 0a 0a  </DIV>}.</tcl>..
1b4e0 3c 70 3e 54 68 65 20 53 51 4c 20 73 74 61 6e 64  <p>The SQL stand
1b4f0 61 72 64 20 73 70 65 63 69 66 69 65 73 20 61 20  ard specifies a 
1b500 68 75 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 6b  huge number of k
1b510 65 79 77 6f 72 64 73 20 77 68 69 63 68 20 6d 61  eywords which ma
1b520 79 20 6e 6f 74 0a 62 65 20 75 73 65 64 20 61 73  y not.be used as
1b530 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 61   the names of ta
1b540 62 6c 65 73 2c 20 69 6e 64 69 63 65 73 2c 20 63  bles, indices, c
1b550 6f 6c 75 6d 6e 73 2c 20 64 61 74 61 62 61 73 65  olumns, database
1b560 73 2c 20 75 73 65 72 2d 64 65 66 69 6e 65 64 0a  s, user-defined.
1b570 66 75 6e 63 74 69 6f 6e 73 2c 20 63 6f 6c 6c 61  functions, colla
1b580 74 69 6f 6e 73 2c 20 76 69 72 74 75 61 6c 20 74  tions, virtual t
1b590 61 62 6c 65 20 6d 6f 64 75 6c 65 73 2c 20 6f 72  able modules, or
1b5a0 20 61 6e 79 20 6f 74 68 65 72 20 6e 61 6d 65 64   any other named
1b5b0 20 6f 62 6a 65 63 74 2e 0a 54 68 65 20 6c 69 73   object..The lis
1b5c0 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 69 73  t of keywords is
1b5d0 20 73 6f 20 6c 6f 6e 67 20 74 68 61 74 20 66 65   so long that fe
1b5e0 77 20 70 65 6f 70 6c 65 20 63 61 6e 20 72 65 6d  w people can rem
1b5f0 65 6d 62 65 72 20 74 68 65 6d 20 61 6c 6c 2e 0a  ember them all..
1b600 46 6f 72 20 6d 6f 73 74 20 53 51 4c 20 63 6f 64  For most SQL cod
1b610 65 2c 20 79 6f 75 72 20 73 61 66 65 73 74 20 62  e, your safest b
1b620 65 74 20 69 73 20 74 6f 20 6e 65 76 65 72 20 75  et is to never u
1b630 73 65 20 61 6e 79 20 45 6e 67 6c 69 73 68 20 6c  se any English l
1b640 61 6e 67 75 61 67 65 0a 77 6f 72 64 20 61 73 20  anguage.word as 
1b650 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 75 73  the name of a us
1b660 65 72 2d 64 65 66 69 6e 65 64 20 6f 62 6a 65 63  er-defined objec
1b670 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 79 6f  t.</p>..<p>If yo
1b680 75 20 77 61 6e 74 20 74 6f 20 75 73 65 20 61 20  u want to use a 
1b690 6b 65 79 77 6f 72 64 20 61 73 20 61 20 6e 61 6d  keyword as a nam
1b6a0 65 2c 20 79 6f 75 20 6e 65 65 64 20 74 6f 20 71  e, you need to q
1b6b0 75 6f 74 65 20 69 74 2e 20 20 54 68 65 72 65 0a  uote it.  There.
1b6c0 61 72 65 20 74 68 72 65 65 20 77 61 79 73 20 6f  are three ways o
1b6d0 66 20 71 75 6f 74 69 6e 67 20 6b 65 79 77 6f 72  f quoting keywor
1b6e0 64 73 20 69 6e 20 53 51 4c 69 74 65 3a 3c 2f 70  ds in SQLite:</p
1b6f0 3e 0a 0a 3c 70 3e 0a 3c 62 6c 6f 63 6b 71 75 6f  >..<p>.<blockquo
1b700 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e  te>.<table>.<tr>
1b710 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
1b720 22 3e 3c 62 3e 27 6b 65 79 77 6f 72 64 27 3c 2f  "><b>'keyword'</
1b730 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68  b></td><td width
1b740 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 09 3c 74 64  ="20"></td>..<td
1b750 3e 5e 41 20 6b 65 79 77 6f 72 64 20 69 6e 20 73  >^A keyword in s
1b760 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 69 73 20  ingle quotes is 
1b770 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  a string literal
1b780 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72  .</td></tr>..<tr
1b790 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
1b7a0 70 22 3e 3c 62 3e 22 6b 65 79 77 6f 72 64 22 3c  p"><b>"keyword"<
1b7b0 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64  /b></td><td></td
1b7c0 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72  >..<td>^A keywor
1b7d0 64 20 69 6e 20 64 6f 75 62 6c 65 2d 71 75 6f 74  d in double-quot
1b7e0 65 73 20 69 73 20 61 6e 20 69 64 65 6e 74 69 66  es is an identif
1b7f0 69 65 72 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c  ier</td></tr>..<
1b800 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
1b810 74 6f 70 22 3e 3c 62 3e 26 23 39 31 3b 6b 65 79  top"><b>&#91;key
1b820 77 6f 72 64 26 23 39 33 3b 3c 2f 62 3e 3c 2f 74  word&#93;</b></t
1b830 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64  d><td></td>..<td
1b840 3e 5e 41 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c  >^A keyword encl
1b850 6f 73 65 64 20 69 6e 20 73 71 75 61 72 65 20 62  osed in square b
1b860 72 61 63 6b 65 74 73 20 69 73 20 0a 20 20 20 20  rackets is .    
1b870 20 20 20 20 61 6e 20 69 64 65 6e 74 69 66 69 65      an identifie
1b880 72 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20  r.  This is not 
1b890 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 20 20 54  standard SQL.  T
1b8a0 68 69 73 20 71 75 6f 74 69 6e 67 20 6d 65 63 68  his quoting mech
1b8b0 61 6e 69 73 6d 0a 20 20 20 20 20 20 20 20 69 73  anism.        is
1b8c0 20 75 73 65 64 20 62 79 20 4d 53 20 41 63 63 65   used by MS Acce
1b8d0 73 73 20 61 6e 64 20 53 51 4c 20 53 65 72 76 65  ss and SQL Serve
1b8e0 72 20 61 6e 64 20 69 73 20 69 6e 63 6c 75 64 65  r and is include
1b8f0 64 20 69 6e 20 53 51 4c 69 74 65 20 66 6f 72 0a  d in SQLite for.
1b900 20 20 20 20 20 20 20 20 63 6f 6d 70 61 74 69 62          compatib
1b910 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e  ility.</td></tr>
1b920 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67  ..<tr>.<td valig
1b930 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26 23 39 36 3b  n="top"><b>&#96;
1b940 6b 65 79 77 6f 72 64 26 23 39 36 3b 3c 2f 62 3e  keyword&#96;</b>
1b950 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09  </td><td></td>..
1b960 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 65  <td>^A keyword e
1b970 6e 63 6c 6f 73 65 64 20 69 6e 20 67 72 61 76 65  nclosed in grave
1b980 20 61 63 63 65 6e 74 73 20 28 41 53 43 49 49 20   accents (ASCII 
1b990 63 6f 64 65 20 39 36 29 20 69 73 20 0a 20 20 20  code 96) is .   
1b9a0 20 20 20 20 20 61 6e 20 69 64 65 6e 74 69 66 69       an identifi
1b9b0 65 72 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74  er.  This is not
1b9c0 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 20 20   standard SQL.  
1b9d0 54 68 69 73 20 71 75 6f 74 69 6e 67 20 6d 65 63  This quoting mec
1b9e0 68 61 6e 69 73 6d 0a 20 20 20 20 20 20 20 20 69  hanism.        i
1b9f0 73 20 75 73 65 64 20 62 79 20 4d 79 53 51 4c 20  s used by MySQL 
1ba00 61 6e 64 20 69 73 20 69 6e 63 6c 75 64 65 64 20  and is included 
1ba10 69 6e 20 53 51 4c 69 74 65 20 66 6f 72 0a 20 20  in SQLite for.  
1ba20 20 20 20 20 20 20 63 6f 6d 70 61 74 69 62 69 6c        compatibil
1ba30 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c  ity.</td></tr>.<
1ba40 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71  /table>.</blockq
1ba50 75 6f 74 65 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 46  uote>.</p>..<p>F
1ba60 6f 72 20 72 65 73 69 6c 69 65 6e 63 65 20 77 68  or resilience wh
1ba70 65 6e 20 63 6f 6e 66 72 6f 6e 74 65 64 20 77 69  en confronted wi
1ba80 74 68 20 68 69 73 74 6f 72 69 63 61 6c 20 53 51  th historical SQ
1ba90 4c 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 53 51  L statements, SQ
1baa0 4c 69 74 65 0a 77 69 6c 6c 20 73 6f 6d 65 74 69  Lite.will someti
1bab0 6d 65 73 20 62 65 6e 64 20 74 68 65 20 71 75 6f  mes bend the quo
1bac0 74 69 6e 67 20 72 75 6c 65 73 20 61 62 6f 76 65  ting rules above
1bad0 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  :</p>..<ul>.<li>
1bae0 3c 70 3e 5e 49 66 20 61 20 6b 65 79 77 6f 72 64  <p>^If a keyword
1baf0 20 69 6e 20 73 69 6e 67 6c 65 0a 71 75 6f 74 65   in single.quote
1bb00 73 20 28 65 78 3a 20 3c 62 3e 27 6b 65 79 27 3c  s (ex: <b>'key'<
1bb10 2f 62 3e 20 6f 72 20 3c 62 3e 27 67 6c 6f 62 27  /b> or <b>'glob'
1bb20 3c 2f 62 3e 29 20 69 73 20 75 73 65 64 20 69 6e  </b>) is used in
1bb30 20 61 20 63 6f 6e 74 65 78 74 20 77 68 65 72 65   a context where
1bb40 0a 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 69  .an identifier i
1bb50 73 20 61 6c 6c 6f 77 65 64 20 62 75 74 20 77 68  s allowed but wh
1bb60 65 72 65 20 61 20 73 74 72 69 6e 67 20 6c 69 74  ere a string lit
1bb70 65 72 61 6c 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  eral is not allo
1bb80 77 65 64 2c 20 74 68 65 6e 0a 74 68 65 20 74 6f  wed, then.the to
1bb90 6b 65 6e 20 69 73 20 75 6e 64 65 72 73 74 6f 6f  ken is understoo
1bba0 64 20 74 6f 20 62 65 20 61 6e 20 69 64 65 6e 74  d to be an ident
1bbb0 69 66 69 65 72 20 69 6e 73 74 65 61 64 20 6f 66  ifier instead of
1bbc0 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61   a string litera
1bbd0 6c 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c  l..</p></li>..<l
1bbe0 69 3e 3c 70 3e 5e 49 66 20 61 20 6b 65 79 77 6f  i><p>^If a keywo
1bbf0 72 64 20 69 6e 20 64 6f 75 62 6c 65 0a 71 75 6f  rd in double.quo
1bc00 74 65 73 20 28 65 78 3a 20 3c 62 3e 22 6b 65 79  tes (ex: <b>"key
1bc10 22 3c 2f 62 3e 20 6f 72 20 3c 62 3e 22 67 6c 6f  "</b> or <b>"glo
1bc20 62 22 3c 2f 62 3e 29 20 69 73 20 75 73 65 64 20  b"</b>) is used 
1bc30 69 6e 20 61 20 63 6f 6e 74 65 78 74 20 77 68 65  in a context whe
1bc40 72 65 0a 69 74 20 63 61 6e 6e 6f 74 20 62 65 20  re.it cannot be 
1bc50 72 65 73 6f 6c 76 65 64 20 74 6f 20 61 6e 20 69  resolved to an i
1bc60 64 65 6e 74 69 66 69 65 72 20 62 75 74 20 77 68  dentifier but wh
1bc70 65 72 65 20 61 20 73 74 72 69 6e 67 20 6c 69 74  ere a string lit
1bc80 65 72 61 6c 0a 69 73 20 61 6c 6c 6f 77 65 64 2c  eral.is allowed,
1bc90 20 74 68 65 6e 20 74 68 65 20 74 6f 6b 65 6e 20   then the token 
1bca0 69 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 74 6f  is understood to
1bcb0 20 62 65 20 61 20 73 74 72 69 6e 67 20 6c 69 74   be a string lit
1bcc0 65 72 61 6c 20 69 6e 73 74 65 61 64 0a 6f 66 20  eral instead.of 
1bcd0 61 6e 20 69 64 65 6e 74 69 66 65 72 2e 3c 2f 70  an identifer.</p
1bce0 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  ></li>.</ul>..<p
1bcf0 3e 50 72 6f 67 72 61 6d 6d 65 72 73 20 61 72 65  >Programmers are
1bd00 20 63 61 75 74 69 6f 6e 65 64 20 6e 6f 74 20 74   cautioned not t
1bd10 6f 20 75 73 65 20 74 68 65 20 74 77 6f 20 65 78  o use the two ex
1bd20 63 65 70 74 69 6f 6e 73 20 64 65 73 63 72 69 62  ceptions describ
1bd30 65 64 20 69 6e 0a 74 68 65 20 70 72 65 76 69 6f  ed in.the previo
1bd40 75 73 20 62 75 6c 6c 65 74 73 2e 20 20 57 65 20  us bullets.  We 
1bd50 65 6d 70 68 61 73 69 7a 65 20 74 68 61 74 20 74  emphasize that t
1bd60 68 65 79 20 65 78 69 73 74 20 6f 6e 6c 79 20 73  hey exist only s
1bd70 6f 20 74 68 61 74 20 6f 6c 64 0a 61 6e 64 20 69  o that old.and i
1bd80 6c 6c 2d 66 6f 72 6d 65 64 20 53 51 4c 20 73 74  ll-formed SQL st
1bd90 61 74 65 6d 65 6e 74 73 20 77 69 6c 6c 20 72 75  atements will ru
1bda0 6e 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 46 75  n correctly.  Fu
1bdb0 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66  ture versions of
1bdc0 0a 53 51 4c 69 74 65 20 6d 69 67 68 74 20 63 68  .SQLite might ch
1bdd0 61 6e 67 65 20 74 6f 20 72 61 69 73 65 20 65 72  ange to raise er
1bde0 72 6f 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20  rors instead of 
1bdf0 61 63 63 65 70 74 69 6e 67 20 74 68 65 20 6d 61  accepting the ma
1be00 6c 66 6f 72 6d 65 64 0a 73 74 61 74 65 6d 65 6e  lformed.statemen
1be10 74 73 20 63 6f 76 65 72 65 64 20 62 79 20 74 68  ts covered by th
1be20 65 20 65 78 63 65 70 74 69 6f 6e 73 20 61 62 6f  e exceptions abo
1be30 76 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 53 51 4c 69  ve.</p>..<p>SQLi
1be40 74 65 20 69 73 20 65 78 74 65 6e 64 65 64 20 74  te is extended t
1be50 6f 20 61 6c 6c 6f 77 20 6d 61 6e 79 20 6b 65 79  o allow many key
1be60 77 6f 72 64 73 20 74 6f 20 62 65 20 75 73 65 64  words to be used
1be70 20 75 6e 71 75 6f 74 65 64 0a 61 73 20 74 68 65   unquoted.as the
1be80 20 6e 61 6d 65 73 20 6f 66 20 64 61 74 61 62 61   names of databa
1be90 73 65 73 2c 20 74 61 62 6c 65 73 2c 20 69 6e 64  ses, tables, ind
1bea0 69 63 65 73 2c 20 74 72 69 67 67 65 72 73 2c 20  ices, triggers, 
1beb0 76 69 65 77 73 2c 20 63 6f 6c 75 6d 6e 73 2c 0a  views, columns,.
1bec0 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e  user-defined fun
1bed0 63 74 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69 6f  ctions, collatio
1bee0 6e 73 2c 20 61 74 74 61 63 68 65 64 20 64 61 74  ns, attached dat
1bef0 61 62 61 73 65 73 2c 20 61 6e 64 20 76 69 72 74  abases, and virt
1bf00 75 61 6c 0a 66 75 6e 63 74 69 6f 6e 20 6d 6f 64  ual.function mod
1bf10 75 6c 65 73 2e 0a 49 6e 20 74 68 65 20 6c 69 73  ules..In the lis
1bf20 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 74 68  t of keywords th
1bf30 61 74 20 66 6f 6c 6c 6f 77 73 2c 20 74 68 6f 73  at follows, thos
1bf40 65 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73  e that can be us
1bf50 65 64 20 61 73 20 69 64 65 6e 74 69 66 69 65 72  ed as identifier
1bf60 73 0a 61 72 65 20 73 68 6f 77 6e 20 69 6e 20 61  s.are shown in a
1bf70 6e 20 69 74 61 6c 69 63 20 66 6f 6e 74 2e 20 20  n italic font.  
1bf80 4b 65 79 77 6f 72 64 73 20 74 68 61 74 20 6d 75  Keywords that mu
1bf90 73 74 20 62 65 20 71 75 6f 74 65 64 20 69 6e 20  st be quoted in 
1bfa0 6f 72 64 65 72 20 74 6f 20 62 65 0a 75 73 65 64  order to be.used
1bfb0 20 61 73 20 69 64 65 6e 74 69 66 69 65 72 73 20   as identifiers 
1bfc0 61 72 65 20 73 68 6f 77 6e 20 69 6e 20 62 6f 6c  are shown in bol
1bfd0 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69  d.</p>..<p>.SQLi
1bfe0 74 65 20 61 64 64 73 20 6e 65 77 20 6b 65 79 77  te adds new keyw
1bff0 6f 72 64 73 20 66 72 6f 6d 20 74 69 6d 65 20 74  ords from time t
1c000 6f 20 74 69 6d 65 20 77 68 65 6e 20 69 74 20 74  o time when it t
1c010 61 6b 65 73 20 6f 6e 20 6e 65 77 20 66 65 61 74  akes on new feat
1c020 75 72 65 73 2e 0a 53 6f 20 74 6f 20 70 72 65 76  ures..So to prev
1c030 65 6e 74 20 79 6f 75 72 20 63 6f 64 65 20 66 72  ent your code fr
1c040 6f 6d 20 62 65 69 6e 67 20 62 72 6f 6b 65 6e 20  om being broken 
1c050 62 79 20 66 75 74 75 72 65 20 65 6e 68 61 6e 63  by future enhanc
1c060 65 6d 65 6e 74 73 2c 20 79 6f 75 20 73 68 6f 75  ements, you shou
1c070 6c 64 0a 6e 6f 72 6d 61 6c 6c 79 20 71 75 6f 74  ld.normally quot
1c080 65 20 61 6e 79 20 69 64 65 6e 74 69 66 69 65 72  e any identifier
1c090 20 74 68 61 74 20 69 73 20 61 6e 20 45 6e 67 6c   that is an Engl
1c0a0 69 73 68 20 6c 61 6e 67 75 61 67 65 20 77 6f 72  ish language wor
1c0b0 64 2c 20 65 76 65 6e 20 69 66 0a 79 6f 75 20 64  d, even if.you d
1c0c0 6f 20 6e 6f 74 20 68 61 76 65 20 74 6f 2e 0a 3c  o not have to..<
1c0d0 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 66 6f 6c  /p>..<p>.The fol
1c0e0 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6b  lowing are the k
1c0f0 65 79 77 6f 72 64 73 20 63 75 72 72 65 6e 74 6c  eywords currentl
1c100 79 20 72 65 63 6f 67 6e 69 7a 65 64 20 62 79 20  y recognized by 
1c110 53 51 4c 69 74 65 3a 0a 3c 2f 70 3e 0a 0a 3c 62  SQLite:.</p>..<b
1c120 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c  lockquote>.<tabl
1c130 65 20 77 69 64 74 68 3d 22 31 30 30 25 22 20 63  e width="100%" c
1c140 6c 61 73 73 3d 22 70 64 66 5f 6b 65 79 77 6f 72  lass="pdf_keywor
1c150 64 73 22 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  ds">.<tr>.<td al
1c160 69 67 6e 3d 22 6c 65 66 74 22 20 76 61 6c 69 67  ign="left" valig
1c170 6e 3d 22 74 6f 70 22 20 77 69 64 74 68 3d 22 32  n="top" width="2
1c180 30 25 22 3e 0a 0a 3c 74 63 6c 3e 0a 73 65 74 20  0%">..<tcl>.set 
1c190 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77  n [llength $keyw
1c1a0 6f 72 64 5f 6c 69 73 74 5d 0a 73 65 74 20 6e 43  ord_list].set nC
1c1b0 6f 6c 20 35 0a 73 65 74 20 6e 52 6f 77 20 5b 65  ol 5.set nRow [e
1c1c0 78 70 72 20 7b 28 24 6e 2b 24 6e 43 6f 6c 2d 31  xpr {($n+$nCol-1
1c1d0 29 2f 24 6e 43 6f 6c 7d 5d 0a 73 65 74 20 69 20  )/$nCol}].set i 
1c1e0 30 0a 66 6f 72 65 61 63 68 20 77 6f 72 64 20 24  0.foreach word $
1c1f0 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20 7b 0a 20  keyword_list {. 
1c200 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 69 6e 64   if {[string ind
1c210 65 78 20 24 77 6f 72 64 20 65 6e 64 5d 3d 3d 22  ex $word end]=="
1c220 2a 22 7d 20 7b 0a 20 20 20 20 73 65 74 20 77 6f  *"} {.    set wo
1c230 72 64 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65  rd [string range
1c240 20 24 77 6f 72 64 20 30 20 65 6e 64 2d 31 5d 0a   $word 0 end-1].
1c250 20 20 20 20 73 65 74 20 66 6f 6e 74 20 69 0a 20      set font i. 
1c260 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 73 65   } else {.    se
1c270 74 20 66 6f 6e 74 20 62 0a 20 20 7d 0a 20 20 69  t font b.  }.  i
1c280 66 20 7b 24 69 3d 3d 24 6e 52 6f 77 7d 20 7b 0a  f {$i==$nRow} {.
1c290 20 20 20 20 68 64 5f 70 75 74 73 20 22 3c 2f 74      hd_puts "</t
1c2a0 64 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74  d><td valign=\"t
1c2b0 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 6c 65 66  op\" align=\"lef
1c2c0 74 5c 22 20 77 69 64 74 68 3d 5c 22 32 30 25 5c  t\" width=\"20%\
1c2d0 22 3e 22 0a 20 20 20 20 73 65 74 20 69 20 31 0a  ">".    set i 1.
1c2e0 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 69    } else {.    i
1c2f0 6e 63 72 20 69 0a 20 20 7d 0a 20 20 68 64 5f 70  ncr i.  }.  hd_p
1c300 75 74 73 20 22 3c 24 66 6f 6e 74 3e 24 77 6f 72  uts "<$font>$wor
1c310 64 3c 2f 24 66 6f 6e 74 3e 3c 62 72 3e 22 0a 7d  d</$font><br>".}
1c320 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 64 3e 3c 2f 74  .</tcl>.</td></t
1c330 72 3e 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63  r></table></bloc
1c340 6b 71 75 6f 74 65 3e 0a 0a 3c 68 32 3e 53 70 65  kquote>..<h2>Spe
1c350 63 69 61 6c 20 6e 61 6d 65 73 3c 2f 68 32 3e 0a  cial names</h2>.
1c360 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .<p>The followin
1c370 67 20 61 72 65 20 6e 6f 74 20 6b 65 79 77 6f 72  g are not keywor
1c380 64 73 20 69 6e 20 53 51 4c 69 74 65 2c 20 62 75  ds in SQLite, bu
1c390 74 20 61 72 65 20 75 73 65 64 20 61 73 20 6e 61  t are used as na
1c3a0 6d 65 73 20 6f 66 20 0a 73 79 73 74 65 6d 20 6f  mes of .system o
1c3b0 62 6a 65 63 74 73 2e 20 20 54 68 65 79 20 63 61  bjects.  They ca
1c3c0 6e 20 62 65 20 75 73 65 64 20 61 73 20 61 6e 20  n be used as an 
1c3d0 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72 20 61  identifier for a
1c3e0 20 64 69 66 66 65 72 65 6e 74 20 0a 74 79 70 65   different .type
1c3f0 20 6f 66 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a   of object.</p>.
1c400 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 20 63 6c 61  .<blockquote cla
1c410 73 73 3d 22 70 64 66 5f 6b 65 79 77 6f 72 64 73  ss="pdf_keywords
1c420 22 3e 3c 62 3e 0a 20 20 5f 52 4f 57 49 44 5f 3c  "><b>.  _ROWID_<
1c430 62 72 3e 0a 20 20 4d 41 49 4e 3c 62 72 3e 0a 20  br>.  MAIN<br>. 
1c440 20 4f 49 44 3c 62 72 3e 0a 20 20 52 4f 57 49 44   OID<br>.  ROWID
1c450 3c 62 72 3e 0a 20 20 53 51 4c 49 54 45 5f 4d 41  <br>.  SQLITE_MA
1c460 53 54 45 52 3c 62 72 3e 0a 20 20 53 51 4c 49 54  STER<br>.  SQLIT
1c470 45 5f 53 45 51 55 45 4e 43 45 3c 62 72 3e 0a 20  E_SEQUENCE<br>. 
1c480 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 4d 41 53   SQLITE_TEMP_MAS
1c490 54 45 52 3c 62 72 3e 0a 20 20 54 45 4d 50 3c 62  TER<br>.  TEMP<b
1c4a0 72 3e 0a 3c 2f 62 3e 3c 2f 62 6c 6f 63 6b 71 75  r>.</b></blockqu
1c4b0 6f 74 65 3e 0a                                   ote>.