Documentation Source Text

Hex Artifact Content
Login

Artifact f7252eed81f301039b337faa4e4da88d9d4cdbe8:


0000: 3c 74 69 74 6c 65 3e 51 75 65 72 79 20 4c 61 6e  <title>Query Lan
0010: 67 75 61 67 65 20 55 6e 64 65 72 73 74 6f 6f 64  guage Understood
0020: 20 62 79 20 53 51 4c 69 74 65 3c 2f 74 69 74 6c   by SQLite</titl
0030: 65 3e 0a 0a 3c 68 31 20 61 6c 69 67 6e 3d 63 65  e>..<h1 align=ce
0040: 6e 74 65 72 3e 53 51 4c 20 41 73 20 55 6e 64 65  nter>SQL As Unde
0050: 72 73 74 6f 6f 64 20 42 79 20 53 51 4c 69 74 65  rstood By SQLite
0060: 3c 2f 68 31 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65  </h1>..<p>SQLite
0070: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 6d 6f 73   understands mos
0080: 74 20 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72  t of the standar
0090: 64 20 53 51 4c 0a 6c 61 6e 67 75 61 67 65 2e 20  d SQL.language. 
00a0: 20 42 75 74 20 69 74 20 64 6f 65 73 20 3c 61 20   But it does <a 
00b0: 68 72 65 66 3d 22 6f 6d 69 74 74 65 64 2e 68 74  href="omitted.ht
00c0: 6d 6c 22 3e 6f 6d 69 74 20 73 6f 6d 65 20 66 65  ml">omit some fe
00d0: 61 74 75 72 65 73 3c 2f 61 3e 0a 77 68 69 6c 65  atures</a>.while
00e0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
00f0: 65 0a 61 64 64 69 6e 67 20 61 20 66 65 77 20 66  e.adding a few f
0100: 65 61 74 75 72 65 73 20 6f 66 20 69 74 73 20 6f  eatures of its o
0110: 77 6e 2e 20 20 54 68 69 73 20 64 6f 63 75 6d 65  wn.  This docume
0120: 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 0a 64  nt attempts to.d
0130: 65 73 63 72 69 62 65 20 70 72 65 63 69 73 65 6c  escribe precisel
0140: 79 20 77 68 61 74 20 70 61 72 74 73 20 6f 66 20  y what parts of 
0150: 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
0160: 20 53 51 4c 69 74 65 20 64 6f 65 73 0a 61 6e 64   SQLite does.and
0170: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
0180: 74 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 5b 53  t.  A list of [S
0190: 51 4c 20 6b 65 79 77 6f 72 64 73 5d 20 69 73 20  QL keywords] is 
01a0: 0a 61 6c 73 6f 20 70 72 6f 76 69 64 65 64 2e 20  .also provided. 
01b0: 20 54 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   The SQL languag
01c0: 65 20 73 79 6e 74 61 78 20 69 73 20 64 65 73 63  e syntax is desc
01d0: 72 69 62 65 64 20 62 79 0a 5b 73 79 6e 74 61 78  ribed by.[syntax
01e0: 20 64 69 61 67 72 61 6d 73 5d 2e 0a 0a 3c 70 3e   diagrams]...<p>
01f0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  The following sy
0200: 6e 74 61 78 20 64 6f 63 75 6d 65 6e 74 61 74 69  ntax documentati
0210: 6f 6e 20 74 6f 70 69 63 73 20 61 72 65 20 61 76  on topics are av
0220: 61 69 6c 61 62 6c 65 3a 3c 2f 70 3e 0a 0a 3c 74  ailable:</p>..<t
0230: 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25  able width="100%
0240: 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35  " cellpadding="5
0250: 22 20 62 6f 72 64 65 72 3d 22 30 22 3e 0a 3c 74  " border="0">.<t
0260: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
0270: 70 22 3e 3c 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 20  p"><ul>..<tcl>. 
0280: 20 73 65 74 20 69 20 30 0a 20 20 73 65 74 20 6c   set i 0.  set l
0290: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
02a0: 20 7b 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20   {.    {{CREATE 
02b0: 54 41 42 4c 45 7d 20 63 72 65 61 74 65 74 61 62  TABLE} createtab
02c0: 6c 65 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45  le}.    {{CREATE
02d0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20   VIRTUAL TABLE} 
02e0: 63 72 65 61 74 65 76 74 61 62 7d 0a 20 20 20 20  createvtab}.    
02f0: 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20  {{CREATE INDEX} 
0300: 63 72 65 61 74 65 69 6e 64 65 78 7d 0a 20 20 20  createindex}.   
0310: 20 7b 56 41 43 55 55 4d 20 76 61 63 75 75 6d 7d   {VACUUM vacuum}
0320: 0a 20 20 20 20 7b 7b 44 52 4f 50 20 54 41 42 4c  .    {{DROP TABL
0330: 45 7d 20 64 72 6f 70 74 61 62 6c 65 7d 0a 20 20  E} droptable}.  
0340: 20 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20    {{DROP INDEX} 
0350: 64 72 6f 70 69 6e 64 65 78 7d 0a 20 20 20 20 7b  dropindex}.    {
0360: 49 4e 53 45 52 54 20 69 6e 73 65 72 74 7d 0a 20  INSERT insert}. 
0370: 20 20 20 7b 52 45 50 4c 41 43 45 20 72 65 70 6c     {REPLACE repl
0380: 61 63 65 7d 0a 20 20 20 20 7b 44 45 4c 45 54 45  ace}.    {DELETE
0390: 20 64 65 6c 65 74 65 7d 0a 20 20 20 20 7b 55 50   delete}.    {UP
03a0: 44 41 54 45 20 75 70 64 61 74 65 7d 0a 20 20 20  DATE update}.   
03b0: 20 7b 53 45 4c 45 43 54 20 73 65 6c 65 63 74 7d   {SELECT select}
03c0: 0a 20 20 20 20 7b 63 6f 6d 6d 65 6e 74 20 63 6f  .    {comment co
03d0: 6d 6d 65 6e 74 7d 0a 20 20 20 20 7b 45 58 50 4c  mment}.    {EXPL
03e0: 41 49 4e 20 65 78 70 6c 61 69 6e 7d 0a 20 20 20  AIN explain}.   
03f0: 20 7b 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70   {expression exp
0400: 72 7d 0a 20 20 20 20 7b 7b 42 45 47 49 4e 20 54  r}.    {{BEGIN T
0410: 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e  RANSACTION} tran
0420: 73 61 63 74 69 6f 6e 7d 0a 20 20 20 20 7b 7b 43  saction}.    {{C
0430: 4f 4d 4d 49 54 20 54 52 41 4e 53 41 43 54 49 4f  OMMIT TRANSACTIO
0440: 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 43  N} transaction C
0450: 4f 4d 4d 49 54 7d 0a 20 20 20 20 7b 7b 45 4e 44  OMMIT}.    {{END
0460: 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72   TRANSACTION} tr
0470: 61 6e 73 61 63 74 69 6f 6e 20 43 4f 4d 4d 49 54  ansaction COMMIT
0480: 7d 0a 20 20 20 20 7b 7b 52 4f 4c 4c 42 41 43 4b  }.    {{ROLLBACK
0490: 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72   TRANSACTION} tr
04a0: 61 6e 73 61 63 74 69 6f 6e 20 52 4f 4c 4c 42 41  ansaction ROLLBA
04b0: 43 4b 7d 0a 20 20 20 20 7b 53 41 56 45 50 4f 49  CK}.    {SAVEPOI
04c0: 4e 54 20 73 61 76 65 70 6f 69 6e 74 7d 0a 20 20  NT savepoint}.  
04d0: 20 20 7b 7b 52 45 4c 45 41 53 45 20 53 41 56 45    {{RELEASE SAVE
04e0: 50 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74  POINT} savepoint
04f0: 20 53 41 56 45 50 4f 49 4e 54 7d 0a 20 20 20 20   SAVEPOINT}.    
0500: 7b 50 52 41 47 4d 41 20 70 72 61 67 6d 61 2e 68  {PRAGMA pragma.h
0510: 74 6d 6c 7d 0a 20 20 20 20 7b 7b 4f 4e 20 43 4f  tml}.    {{ON CO
0520: 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63  NFLICT clause} c
0530: 6f 6e 66 6c 69 63 74 7d 0a 20 20 20 20 7b 7b 43  onflict}.    {{C
0540: 52 45 41 54 45 20 56 49 45 57 7d 20 63 72 65 61  REATE VIEW} crea
0550: 74 65 76 69 65 77 7d 0a 20 20 20 20 7b 7b 44 52  teview}.    {{DR
0560: 4f 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65  OP VIEW} dropvie
0570: 77 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20  w}.    {{CREATE 
0580: 54 52 49 47 47 45 52 7d 20 63 72 65 61 74 65 74  TRIGGER} createt
0590: 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 44 52  rigger}.    {{DR
05a0: 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70  OP TRIGGER} drop
05b0: 74 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 41  trigger}.    {{A
05c0: 54 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20  TTACH DATABASE} 
05d0: 61 74 74 61 63 68 7d 0a 20 20 20 20 7b 7b 44 45  attach}.    {{DE
05e0: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64  TACH DATABASE} d
05f0: 65 74 61 63 68 7d 0a 20 20 20 20 7b 52 45 49 4e  etach}.    {REIN
0600: 44 45 58 20 72 65 69 6e 64 65 78 7d 0a 20 20 20  DEX reindex}.   
0610: 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d 20   {{ALTER TABLE} 
0620: 61 6c 74 65 72 74 61 62 6c 65 7d 0a 20 20 20 20  altertable}.    
0630: 7b 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c 79  {{ANALYZE} analy
0640: 7a 65 7d 0a 20 20 20 20 7b 7b 49 4e 44 45 58 45  ze}.    {{INDEXE
0650: 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79 7d  D BY} indexedby}
0660: 0a 20 20 20 20 7b 7b 61 67 67 72 65 67 61 74 65  .    {{aggregate
0670: 20 66 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67 66   functions} aggf
0680: 75 6e 63 20 61 67 67 66 75 6e 63 7d 0a 20 20 20  unc aggfunc}.   
0690: 20 7b 7b 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e   {{core function
06a0: 73 7d 20 63 6f 72 65 66 75 6e 63 20 63 6f 72 65  s} corefunc core
06b0: 66 75 6e 63 7d 0a 20 20 20 20 7b 7b 64 61 74 65  func}.    {{date
06c0: 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69   and time functi
06d0: 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20 64 61  ons} datefunc da
06e0: 74 65 66 75 6e 63 7d 0a 20 20 20 20 7b 6b 65 79  tefunc}.    {key
06f0: 77 6f 72 64 73 20 6b 65 79 77 6f 72 64 73 20 7b  words keywords {
0700: 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a 20  SQL keywords}}. 
0710: 20 7d 0a 20 20 73 65 74 20 6c 61 6e 67 5f 73 65   }.  set lang_se
0720: 63 74 69 6f 6e 5f 62 72 65 61 6b 20 5b 65 78 70  ction_break [exp
0730: 72 20 7b 28 5b 6c 6c 65 6e 67 74 68 20 24 6c 61  r {([llength $la
0740: 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74 5d  ng_section_list]
0750: 2b 32 29 2f 33 7d 5d 0a 20 20 66 6f 72 65 61 63  +2)/3}].  foreac
0760: 68 20 7b 73 65 63 74 69 6f 6e 7d 20 5b 6c 73 6f  h {section} [lso
0770: 72 74 20 2d 69 6e 64 65 78 20 30 20 2d 64 69 63  rt -index 0 -dic
0780: 74 69 6f 6e 61 72 79 20 24 6c 61 6e 67 5f 73 65  tionary $lang_se
0790: 63 74 69 6f 6e 5f 6c 69 73 74 5d 20 7b 0a 20 20  ction_list] {.  
07a0: 66 6f 72 65 61 63 68 20 7b 73 5f 74 69 74 6c 65  foreach {s_title
07b0: 20 73 5f 74 61 67 20 73 5f 6b 77 7d 20 24 73 65   s_tag s_kw} $se
07c0: 63 74 69 6f 6e 20 7b 7d 0a 20 20 69 66 20 7b 24  ction {}.  if {$
07d0: 73 5f 6b 77 20 3d 3d 20 22 22 7d 20 7b 0a 20 20  s_kw == ""} {.  
07e0: 20 20 73 65 74 20 73 5f 6b 77 20 24 73 5f 74 69    set s_kw $s_ti
07f0: 74 6c 65 0a 20 20 7d 0a 20 20 69 66 20 7b 24 73  tle.  }.  if {$s
0800: 5f 74 61 67 3d 3d 22 70 72 61 67 6d 61 2e 68 74  _tag=="pragma.ht
0810: 6d 6c 22 7d 20 7b 0a 20 20 20 20 73 65 74 20 75  ml"} {.    set u
0820: 72 6c 20 24 73 5f 74 61 67 0a 20 20 7d 20 65 6c  rl $s_tag.  } el
0830: 73 65 20 7b 0a 20 20 20 20 73 65 74 20 75 72 6c  se {.    set url
0840: 20 6c 61 6e 67 5f 24 73 5f 74 61 67 2e 68 74 6d   lang_$s_tag.htm
0850: 6c 0a 20 20 7d 0a 20 20 68 64 5f 72 65 73 6f 6c  l.  }.  hd_resol
0860: 76 65 20 22 3c 6c 69 3e 5c 5b 24 73 5f 6b 77 7c  ve "<li>\[$s_kw|
0870: 24 73 5f 74 69 74 6c 65 5c 5d 3c 2f 6c 69 3e 22  $s_title\]</li>"
0880: 0a 20 20 69 6e 63 72 20 69 0a 20 20 69 66 20 7b  .  incr i.  if {
0890: 24 69 3d 3d 24 6c 61 6e 67 5f 73 65 63 74 69 6f  $i==$lang_sectio
08a0: 6e 5f 62 72 65 61 6b 20 7c 7c 20 24 69 3d 3d 32  n_break || $i==2
08b0: 2a 24 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 62  *$lang_section_b
08c0: 72 65 61 6b 7d 20 7b 0a 20 20 20 20 68 64 5f 70  reak} {.    hd_p
08d0: 75 74 73 20 22 3c 2f 75 6c 3e 3c 2f 74 64 3e 3c  uts "</ul></td><
08e0: 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c  td valign=\"top\
08f0: 22 3e 3c 75 6c 3e 22 0a 20 20 7d 0a 7d 0a 3c 2f  "><ul>".  }.}.</
0900: 74 63 6c 3e 0a 3c 2f 75 6c 3e 3c 2f 74 64 3e 3c  tcl>.</ul></td><
0910: 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70  /tr></table>..<p
0920: 3e 5e 54 68 65 20 72 6f 75 74 69 6e 65 73 20 5b  >^The routines [
0930: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
0940: 76 32 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f  v2()], [sqlite3_
0950: 70 72 65 70 61 72 65 28 29 5d 2c 0a 5b 73 71 6c  prepare()],.[sql
0960: 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 28 29  ite3_prepare16()
0970: 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 65 78 65 63  ], [sqlite3_exec
0980: 28 29 5d 2c 20 61 6e 64 20 5b 73 71 6c 69 74 65  ()], and [sqlite
0990: 33 5f 67 65 74 5f 74 61 62 6c 65 28 29 5d 20 61  3_get_table()] a
09a0: 63 63 65 70 74 0a 61 6e 20 53 51 4c 20 73 74 61  ccept.an SQL sta
09b0: 74 65 6d 65 6e 74 20 6c 69 73 74 20 28 73 71 6c  tement list (sql
09c0: 2d 73 74 6d 74 2d 6c 69 73 74 29 20 77 68 69 63  -stmt-list) whic
09d0: 68 20 69 73 20 61 20 73 65 6d 69 63 6f 6c 6f 6e  h is a semicolon
09e0: 2d 73 65 70 61 72 61 74 65 64 0a 6c 69 73 74 20  -separated.list 
09f0: 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 3c 2f  of statements.</
0a00: 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44  p>..<tcl>BubbleD
0a10: 69 61 67 72 61 6d 20 73 71 6c 2d 73 74 6d 74 2d  iagram sql-stmt-
0a20: 6c 69 73 74 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 45  list</tcl>..<p>E
0a30: 61 63 68 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ach SQL statemen
0a40: 74 20 69 6e 20 74 68 65 20 73 74 61 74 65 6d 65  t in the stateme
0a50: 6e 74 20 6c 69 73 74 20 69 73 20 61 6e 20 69 6e  nt list is an in
0a60: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 0a 66 6f  stance of the.fo
0a70: 6c 6c 6f 77 69 6e 67 3a 3c 2f 70 3e 0a 0a 3c 74  llowing:</p>..<t
0a80: 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d  cl>BubbleDiagram
0a90: 20 73 71 6c 2d 73 74 6d 74 3c 2f 74 63 6c 3e 0a   sql-stmt</tcl>.
0aa0: 0a 3c 74 63 6c 3e 0a 70 72 6f 63 20 4f 70 65 72  .<tcl>.proc Oper
0ab0: 61 74 6f 72 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20  ator {name} {.  
0ac0: 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74 20 63 6f  return "<font co
0ad0: 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30 5c 22 3e  lor=\"#2c2cf0\">
0ae0: 3c 62 69 67 3e 24 6e 61 6d 65 3c 2f 62 69 67 3e  <big>$name</big>
0af0: 3c 2f 66 6f 6e 74 3e 22 0a 7d 0a 70 72 6f 63 20  </font>".}.proc 
0b00: 4e 6f 6e 74 65 72 6d 69 6e 61 6c 20 7b 6e 61 6d  Nonterminal {nam
0b10: 65 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20 22 3c  e} {.  return "<
0b20: 69 3e 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22  i><font color=\"
0b30: 23 66 66 33 34 33 34 5c 22 3e 24 6e 61 6d 65 3c  #ff3434\">$name<
0b40: 2f 66 6f 6e 74 3e 3c 2f 69 3e 22 0a 7d 0a 70 72  /font></i>".}.pr
0b50: 6f 63 20 4b 65 79 77 6f 72 64 20 7b 6e 61 6d 65  oc Keyword {name
0b60: 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20 22 3c 66  } {.  return "<f
0b70: 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 32 63 32  ont color=\"#2c2
0b80: 63 66 30 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e  cf0\">$name</fon
0b90: 74 3e 22 0a 7d 0a 70 72 6f 63 20 45 78 61 6d 70  t>".}.proc Examp
0ba0: 6c 65 20 7b 74 65 78 74 7d 20 7b 0a 20 20 68 64  le {text} {.  hd
0bb0: 5f 70 75 74 73 20 22 3c 62 6c 6f 63 6b 71 75 6f  _puts "<blockquo
0bc0: 74 65 3e 3c 70 72 65 3e 24 74 65 78 74 3c 2f 70  te><pre>$text</p
0bd0: 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
0be0: 22 0a 7d 0a 0a 70 72 6f 63 20 53 65 63 74 69 6f  ".}..proc Sectio
0bf0: 6e 20 7b 6e 61 6d 65 20 6c 61 62 65 6c 20 6b 65  n {name label ke
0c00: 79 77 6f 72 64 73 7d 20 7b 0a 20 20 67 6c 6f 62  ywords} {.  glob
0c10: 61 6c 20 44 4f 43 0a 20 20 68 64 5f 63 6c 6f 73  al DOC.  hd_clos
0c20: 65 5f 6d 61 69 6e 0a 20 20 68 64 5f 6f 70 65 6e  e_main.  hd_open
0c30: 5f 6d 61 69 6e 20 6c 61 6e 67 5f 24 6c 61 62 65  _main lang_$labe
0c40: 6c 2e 68 74 6d 6c 0a 20 20 68 64 5f 68 65 61 64  l.html.  hd_head
0c50: 65 72 20 22 53 51 4c 69 74 65 20 51 75 65 72 79  er "SQLite Query
0c60: 20 4c 61 6e 67 75 61 67 65 3a 20 24 6e 61 6d 65   Language: $name
0c70: 22 20 24 44 4f 43 2f 70 61 67 65 73 2f 6c 61 6e  " $DOC/pages/lan
0c80: 67 2e 69 6e 0a 20 20 65 76 61 6c 20 68 64 5f 6b  g.in.  eval hd_k
0c90: 65 79 77 6f 72 64 73 20 24 6b 65 79 77 6f 72 64  eywords $keyword
0ca0: 73 0a 20 20 69 66 20 7b 5b 6c 73 65 61 72 63 68  s.  if {[lsearch
0cb0: 20 24 6b 65 79 77 6f 72 64 73 20 24 6e 61 6d 65   $keywords $name
0cc0: 5d 20 3d 3d 20 2d 31 20 26 26 20 5b 6c 73 65 61  ] == -1 && [lsea
0cd0: 72 63 68 20 24 6b 65 79 77 6f 72 64 73 20 2a 24  rch $keywords *$
0ce0: 6e 61 6d 65 5d 20 3d 3d 20 2d 31 7d 20 7b 0a 20  name] == -1} {. 
0cf0: 20 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f     eval hd_keywo
0d00: 72 64 73 20 7b 20 24 6e 61 6d 65 20 7d 0a 20 20  rds { $name }.  
0d10: 7d 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 68 31  }.  hd_puts {<h1
0d20: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
0d30: 53 51 4c 20 41 73 20 55 6e 64 65 72 73 74 6f 6f  SQL As Understoo
0d40: 64 20 42 79 20 53 51 4c 69 74 65 3c 2f 68 31 3e  d By SQLite</h1>
0d50: 7d 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 70 3e  }.  hd_puts {<p>
0d60: 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67 2e 68 74  <a href="lang.ht
0d70: 6d 6c 22 3e 5b 54 6f 70 5d 3c 2f 61 3e 3c 2f 70  ml">[Top]</a></p
0d80: 3e 7d 0a 20 20 68 64 5f 70 75 74 73 20 22 3c 68  >}.  hd_puts "<h
0d90: 32 3e 24 6e 61 6d 65 3c 2f 68 32 3e 22 0a 7d 0a  2>$name</h2>".}.
0da0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
0db0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0dc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0df0: 0a 53 65 63 74 69 6f 6e 20 7b 41 4c 54 45 52 20  .Section {ALTER 
0e00: 54 41 42 4c 45 7d 20 61 6c 74 65 72 74 61 62 6c  TABLE} altertabl
0e10: 65 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d  e {{ALTER TABLE}
0e20: 20 7b 2a 41 4c 54 45 52 7d 7d 0a 0a 42 75 62 62   {*ALTER}}..Bubb
0e30: 6c 65 44 69 61 67 72 61 6d 20 61 6c 74 65 72 2d  leDiagram alter-
0e40: 74 61 62 6c 65 2d 73 74 6d 74 20 31 0a 3c 2f 74  table-stmt 1.</t
0e50: 63 6c 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 73  cl>..<p>SQLite s
0e60: 75 70 70 6f 72 74 73 20 61 20 6c 69 6d 69 74 65  upports a limite
0e70: 64 20 73 75 62 73 65 74 20 6f 66 20 41 4c 54 45  d subset of ALTE
0e80: 52 20 54 41 42 4c 45 2e 0a 54 68 65 20 41 4c 54  R TABLE..The ALT
0e90: 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  ER TABLE command
0ea0: 20 69 6e 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77   in SQLite allow
0eb0: 73 20 74 68 65 20 75 73 65 72 20 74 6f 20 72 65  s the user to re
0ec0: 6e 61 6d 65 20 61 20 74 61 62 6c 65 0a 6f 72 20  name a table.or 
0ed0: 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c  to add a new col
0ee0: 75 6d 6e 20 74 6f 20 61 6e 20 65 78 69 73 74 69  umn to an existi
0ef0: 6e 67 20 74 61 62 6c 65 2e 20 49 74 20 69 73 20  ng table. It is 
0f00: 6e 6f 74 20 70 6f 73 73 69 62 6c 65 0a 74 6f 20  not possible.to 
0f10: 72 65 6e 61 6d 65 20 61 20 63 6f 6c 75 6d 6e 2c  rename a column,
0f20: 20 72 65 6d 6f 76 65 20 61 20 63 6f 6c 75 6d 6e   remove a column
0f30: 2c 20 6f 72 20 61 64 64 20 6f 72 20 72 65 6d 6f  , or add or remo
0f40: 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66  ve constraints f
0f50: 72 6f 6d 20 61 20 74 61 62 6c 65 2e 0a 3c 2f 70  rom a table..</p
0f60: 3e 0a 0a 3c 70 3e 20 5e 28 54 68 65 20 52 45 4e  >..<p> ^(The REN
0f70: 41 4d 45 20 54 4f 20 73 79 6e 74 61 78 20 69 73  AME TO syntax is
0f80: 20 75 73 65 64 20 74 6f 20 72 65 6e 61 6d 65 20   used to rename 
0f90: 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e 74 69  the table identi
0fa0: 66 69 65 64 20 62 79 20 0a 3c 69 3e 26 23 39 31  fied by .<i>&#91
0fb0: 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 2e 26  ;database-name.&
0fc0: 23 39 33 3b 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  #93;table-name</
0fd0: 69 3e 20 74 6f 20 3c 69 3e 6e 65 77 2d 74 61 62  i> to <i>new-tab
0fe0: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 0a 54  le-name</i>.)^.T
0ff0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 0a 63 61 6e  his command .can
1000: 6e 6f 74 20 62 65 20 75 73 65 64 20 74 6f 20 6d  not be used to m
1010: 6f 76 65 20 61 20 74 61 62 6c 65 20 62 65 74 77  ove a table betw
1020: 65 65 6e 20 61 74 74 61 63 68 65 64 20 64 61 74  een attached dat
1030: 61 62 61 73 65 73 2c 20 6f 6e 6c 79 20 74 6f 20  abases, only to 
1040: 72 65 6e 61 6d 65 20 0a 61 20 74 61 62 6c 65 20  rename .a table 
1050: 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
1060: 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c  database.</p>..<
1070: 70 3e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65  p> ^If the table
1080: 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 20 68   being renamed h
1090: 61 73 20 74 72 69 67 67 65 72 73 20 6f 72 20 69  as triggers or i
10a0: 6e 64 69 63 65 73 2c 20 74 68 65 6e 20 74 68 65  ndices, then the
10b0: 73 65 20 72 65 6d 61 69 6e 0a 61 74 74 61 63 68  se remain.attach
10c0: 65 64 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  ed to the table 
10d0: 61 66 74 65 72 20 69 74 20 68 61 73 20 62 65 65  after it has bee
10e0: 6e 20 72 65 6e 61 6d 65 64 2e 20 20 5e 48 6f 77  n renamed.  ^How
10f0: 65 76 65 72 2c 20 69 66 20 74 68 65 72 65 20 61  ever, if there a
1100: 72 65 0a 61 6e 79 20 76 69 65 77 20 64 65 66 69  re.any view defi
1110: 6e 69 74 69 6f 6e 73 2c 20 6f 72 20 73 74 61 74  nitions, or stat
1120: 65 6d 65 6e 74 73 20 65 78 65 63 75 74 65 64 20  ements executed 
1130: 62 79 20 74 72 69 67 67 65 72 73 20 74 68 61 74  by triggers that
1140: 20 72 65 66 65 72 20 74 6f 0a 74 68 65 20 74 61   refer to.the ta
1150: 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d 65  ble being rename
1160: 64 2c 20 74 68 65 73 65 20 61 72 65 20 6e 6f 74  d, these are not
1170: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 6d   automatically m
1180: 6f 64 69 66 69 65 64 20 74 6f 20 75 73 65 20 74  odified to use t
1190: 68 65 20 6e 65 77 0a 74 61 62 6c 65 20 6e 61 6d  he new.table nam
11a0: 65 2e 20 49 66 20 74 68 69 73 20 69 73 20 72 65  e. If this is re
11b0: 71 75 69 72 65 64 2c 20 74 68 65 20 74 72 69 67  quired, the trig
11c0: 67 65 72 73 20 6f 72 20 76 69 65 77 20 64 65 66  gers or view def
11d0: 69 6e 69 74 69 6f 6e 73 20 6d 75 73 74 20 62 65  initions must be
11e0: 0a 64 72 6f 70 70 65 64 20 61 6e 64 20 72 65 63  .dropped and rec
11f0: 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74 68  reated to use th
1200: 65 20 6e 65 77 20 74 61 62 6c 65 20 6e 61 6d 65  e new table name
1210: 20 62 79 20 68 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a   by hand..</p>..
1220: 3c 70 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20  <p>^If [foreign 
1230: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d  key constraints]
1240: 20 61 72 65 20 0a 5b 66 6f 72 65 69 67 6e 5f 6b   are .[foreign_k
1250: 65 79 73 20 70 72 61 67 6d 61 20 7c 20 65 6e 61  eys pragma | ena
1260: 62 6c 65 64 5d 20 77 68 65 6e 20 61 20 74 61 62  bled] when a tab
1270: 6c 65 20 69 73 20 72 65 6e 61 6d 65 64 2c 20 74  le is renamed, t
1280: 68 65 6e 20 61 6e 79 0a 5b 66 6f 72 65 69 67 6e  hen any.[foreign
1290: 2d 6b 65 79 2d 63 6c 61 75 73 65 20 7c 20 52 45  -key-clause | RE
12a0: 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 73  FERENCES clauses
12b0: 5d 20 69 6e 20 61 6e 79 20 74 61 62 6c 65 20 28  ] in any table (
12c0: 65 69 74 68 65 72 20 74 68 65 0a 74 61 62 6c 65  either the.table
12d0: 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 20 6f   being renamed o
12e0: 72 20 73 6f 6d 65 20 6f 74 68 65 72 20 74 61 62  r some other tab
12f0: 6c 65 29 0a 74 68 61 74 20 72 65 66 65 72 20 74  le).that refer t
1300: 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  o the table bein
1310: 67 20 72 65 6e 61 6d 65 64 20 61 72 65 20 6d 6f  g renamed are mo
1320: 64 69 66 69 65 64 20 74 6f 20 72 65 66 65 72 20  dified to refer 
1330: 0a 74 6f 20 74 68 65 20 72 65 6e 61 6d 65 64 20  .to the renamed 
1340: 74 61 62 6c 65 20 62 79 20 69 74 73 20 6e 65 77  table by its new
1350: 20 6e 61 6d 65 2e 0a 0a 3c 70 3e 20 5e 54 68 65   name...<p> ^The
1360: 20 41 44 44 20 43 4f 4c 55 4d 4e 20 73 79 6e 74   ADD COLUMN synt
1370: 61 78 0a 69 73 20 75 73 65 64 20 74 6f 20 61 64  ax.is used to ad
1380: 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 74  d a new column t
1390: 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61  o an existing ta
13a0: 62 6c 65 2e 0a 5e 54 68 65 20 6e 65 77 20 63 6f  ble..^The new co
13b0: 6c 75 6d 6e 20 69 73 20 61 6c 77 61 79 73 20 61  lumn is always a
13c0: 70 70 65 6e 64 65 64 20 74 6f 20 74 68 65 20 65  ppended to the e
13d0: 6e 64 20 6f 66 20 74 68 65 20 6c 69 73 74 20 6f  nd of the list o
13e0: 66 20 65 78 69 73 74 69 6e 67 20 63 6f 6c 75 6d  f existing colum
13f0: 6e 73 2e 0a 54 68 65 20 5b 63 6f 6c 75 6d 6e 2d  ns..The [column-
1400: 64 65 66 5d 20 72 75 6c 65 20 64 65 66 69 6e 65  def] rule define
1410: 73 20 74 68 65 20 63 68 61 72 61 63 74 65 72 69  s the characteri
1420: 73 74 69 63 73 20 6f 66 20 74 68 65 20 6e 65 77  stics of the new
1430: 20 63 6f 6c 75 6d 6e 2e 0a 5e 28 54 68 65 20 6e   column..^(The n
1440: 65 77 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 74 61  ew column may ta
1450: 6b 65 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f  ke any of the fo
1460: 72 6d 73 20 70 65 72 6d 69 73 73 61 62 6c 65 20  rms permissable 
1470: 69 6e 20 61 20 5b 43 52 45 41 54 45 20 54 41 42  in a [CREATE TAB
1480: 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 2c 20 77  LE].statement, w
1490: 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ith the followin
14a0: 67 20 72 65 73 74 72 69 63 74 69 6f 6e 73 3a 29  g restrictions:)
14b0: 5e 0a 3c 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65 20  ^.<ul>.<li>^The 
14c0: 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 68  column may not h
14d0: 61 76 65 20 61 20 50 52 49 4d 41 52 59 20 4b 45  ave a PRIMARY KE
14e0: 59 20 6f 72 20 55 4e 49 51 55 45 20 63 6f 6e 73  Y or UNIQUE cons
14f0: 74 72 61 69 6e 74 2e 3c 2f 6c 69 3e 0a 3c 6c 69  traint.</li>.<li
1500: 3e 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79  >^The column may
1510: 20 6e 6f 74 20 68 61 76 65 20 61 20 64 65 66 61   not have a defa
1520: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 43 55 52  ult value of CUR
1530: 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45  RENT_TIME, CURRE
1540: 4e 54 5f 44 41 54 45 20 0a 20 20 20 20 6f 72 20  NT_DATE .    or 
1550: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
1560: 50 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 5e 49 66 20  P.</li>.<li>^If 
1570: 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  a NOT NULL const
1580: 72 61 69 6e 74 20 69 73 20 73 70 65 63 69 66 69  raint is specifi
1590: 65 64 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c  ed, then the col
15a0: 75 6d 6e 20 6d 75 73 74 20 68 61 76 65 20 61 0a  umn must have a.
15b0: 20 20 20 20 64 65 66 61 75 6c 74 20 76 61 6c 75      default valu
15c0: 65 20 6f 74 68 65 72 20 74 68 61 6e 20 4e 55 4c  e other than NUL
15d0: 4c 2e 0a 3c 6c 69 3e 5e 49 66 20 5b 66 6f 72 65  L..<li>^If [fore
15e0: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
15f0: 6e 74 73 5d 20 61 72 65 20 5b 66 6f 72 65 69 67  nts] are [foreig
1600: 6e 5f 6b 65 79 73 20 70 72 61 67 6d 61 20 7c 20  n_keys pragma | 
1610: 65 6e 61 62 6c 65 64 5d 20 61 6e 64 0a 20 20 20  enabled] and.   
1620: 20 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 61   a column with a
1630: 20 5b 66 6f 72 65 69 67 6e 2d 6b 65 79 2d 63 6c   [foreign-key-cl
1640: 61 75 73 65 20 7c 20 52 45 46 45 52 45 4e 43 45  ause | REFERENCE
1650: 53 20 63 6c 61 75 73 65 5d 0a 20 20 20 20 69 73  S clause].    is
1660: 20 61 64 64 65 64 2c 20 74 68 65 20 63 6f 6c 75   added, the colu
1670: 6d 6e 20 6d 75 73 74 20 68 61 76 65 20 61 20 64  mn must have a d
1680: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
1690: 4e 55 4c 4c 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e  NULL..</ul>..<p>
16a0: 5e 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20  ^Note also that 
16b0: 77 68 65 6e 20 61 64 64 69 6e 67 20 61 20 43 48  when adding a CH
16c0: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20  ECK constraint, 
16d0: 74 68 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  the CHECK constr
16e0: 61 69 6e 74 0a 69 73 20 6e 6f 74 20 74 65 73 74  aint.is not test
16f0: 65 64 20 61 67 61 69 6e 73 74 20 70 72 65 65 78  ed against preex
1700: 69 73 74 69 6e 67 20 72 6f 77 73 20 6f 66 20 74  isting rows of t
1710: 68 65 20 74 61 62 6c 65 2e 0a 5e 54 68 69 73 20  he table..^This 
1720: 63 61 6e 20 72 65 73 75 6c 74 20 69 6e 20 61 20  can result in a 
1730: 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61  table that conta
1740: 69 6e 73 20 64 61 74 61 20 74 68 61 74 0a 69 73  ins data that.is
1750: 20 69 6e 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 66   in violation of
1760: 20 74 68 65 20 43 48 45 43 4b 20 63 6f 6e 73 74   the CHECK const
1770: 72 61 69 6e 74 2e 20 20 46 75 74 75 72 65 20 76  raint.  Future v
1780: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
1790: 65 20 6d 69 67 68 74 0a 63 68 61 6e 67 65 20 74  e might.change t
17a0: 6f 20 76 61 6c 69 64 61 74 65 20 43 48 45 43 4b  o validate CHECK
17b0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 73 20   constraints as 
17c0: 74 68 65 79 20 61 72 65 20 61 64 64 65 64 2e 3c  they are added.<
17d0: 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 65 78  /p>..<p> ^The ex
17e0: 65 63 75 74 69 6f 6e 20 74 69 6d 65 20 6f 66 20  ecution time of 
17f0: 74 68 65 20 41 4c 54 45 52 20 54 41 42 4c 45 20  the ALTER TABLE 
1800: 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e 64 65 70  command is indep
1810: 65 6e 64 65 6e 74 20 6f 66 0a 74 68 65 20 61 6d  endent of.the am
1820: 6f 75 6e 74 20 6f 66 20 64 61 74 61 20 69 6e 20  ount of data in 
1830: 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20  the table.  The 
1840: 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d  ALTER TABLE comm
1850: 61 6e 64 20 72 75 6e 73 20 61 73 20 71 75 69 63  and runs as quic
1860: 6b 6c 79 0a 6f 6e 20 61 20 74 61 62 6c 65 20 77  kly.on a table w
1870: 69 74 68 20 31 30 20 6d 69 6c 6c 69 6f 6e 20 72  ith 10 million r
1880: 6f 77 73 20 61 73 20 69 74 20 64 6f 65 73 20 6f  ows as it does o
1890: 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 31  n a table with 1
18a0: 20 72 6f 77 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 41   row..</p>..<p>A
18b0: 66 74 65 72 20 41 44 44 20 43 4f 4c 55 4d 4e 20  fter ADD COLUMN 
18c0: 68 61 73 20 62 65 65 6e 20 72 75 6e 20 6f 6e 20  has been run on 
18d0: 61 20 64 61 74 61 62 61 73 65 2c 20 74 68 61 74  a database, that
18e0: 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c 20 6e   database will n
18f0: 6f 74 0a 62 65 20 72 65 61 64 61 62 6c 65 20 62  ot.be readable b
1900: 79 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  y SQLite version
1910: 20 33 2e 31 2e 33 20 61 6e 64 20 65 61 72 6c 69   3.1.3 and earli
1920: 65 72 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  er.</p>..<tcl>.#
1930: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1940: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1950: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1960: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1970: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
1980: 63 74 69 6f 6e 20 7b 41 4e 41 4c 59 5a 45 7d 20  ction {ANALYZE} 
1990: 61 6e 61 6c 79 7a 65 20 41 4e 41 4c 59 5a 45 0a  analyze ANALYZE.
19a0: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61  .BubbleDiagram a
19b0: 6e 61 6c 79 7a 65 2d 73 74 6d 74 20 31 0a 3c 2f  nalyze-stmt 1.</
19c0: 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41  tcl>..<p> ^The A
19d0: 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 67  NALYZE command g
19e0: 61 74 68 65 72 73 20 73 74 61 74 69 73 74 69 63  athers statistic
19f0: 73 20 61 62 6f 75 74 20 69 6e 64 69 63 65 73 20  s about indices 
1a00: 61 6e 64 20 73 74 6f 72 65 73 20 74 68 65 6d 0a  and stores them.
1a10: 69 6e 20 61 20 73 70 65 63 69 61 6c 20 74 61 62  in a special tab
1a20: 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  les in the datab
1a30: 61 73 65 20 77 68 65 72 65 20 74 68 65 20 71 75  ase where the qu
1a40: 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 63 61  ery optimizer ca
1a50: 6e 20 75 73 65 0a 74 68 65 6d 20 74 6f 20 68 65  n use.them to he
1a60: 6c 70 20 6d 61 6b 65 20 62 65 74 74 65 72 20 69  lp make better i
1a70: 6e 64 65 78 20 63 68 6f 69 63 65 73 2e 0a 5e 49  ndex choices..^I
1a80: 66 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 20 61  f no arguments a
1a90: 72 65 20 67 69 76 65 6e 2c 20 61 6c 6c 20 69 6e  re given, all in
1aa0: 64 69 63 65 73 20 69 6e 20 61 6c 6c 20 61 74 74  dices in all att
1ab0: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20  ached databases 
1ac0: 61 72 65 0a 61 6e 61 6c 79 7a 65 64 2e 20 20 5e  are.analyzed.  ^
1ad0: 49 66 20 61 20 64 61 74 61 62 61 73 65 20 6e 61  If a database na
1ae0: 6d 65 20 69 73 20 67 69 76 65 6e 20 61 73 20 74  me is given as t
1af0: 68 65 20 61 72 67 75 6d 65 6e 74 2c 20 61 6c 6c  he argument, all
1b00: 20 69 6e 64 69 63 65 73 0a 69 6e 20 74 68 61 74   indices.in that
1b10: 20 6f 6e 65 20 64 61 74 61 62 61 73 65 20 61 72   one database ar
1b20: 65 20 61 6e 61 6c 79 7a 65 64 2e 20 20 5e 49 66  e analyzed.  ^If
1b30: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73   the argument is
1b40: 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 2c 0a 74   a table name,.t
1b50: 68 65 6e 20 6f 6e 6c 79 20 69 6e 64 69 63 65 73  hen only indices
1b60: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
1b70: 20 74 68 61 74 20 6f 6e 65 20 74 61 62 6c 65 20   that one table 
1b80: 61 72 65 20 61 6e 61 6c 79 7a 65 64 2e 3c 2f 70  are analyzed.</p
1b90: 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 64 65 66 61  >..<p> ^The defa
1ba0: 75 6c 74 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ult implementati
1bb0: 6f 6e 20 73 74 6f 72 65 73 20 61 6c 6c 20 73 74  on stores all st
1bc0: 61 74 69 73 74 69 63 73 20 69 6e 20 61 20 73 69  atistics in a si
1bd0: 6e 67 6c 65 0a 74 61 62 6c 65 20 6e 61 6d 65 64  ngle.table named
1be0: 20 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61 74 31   <b>sqlite_stat1
1bf0: 3c 2f 62 3e 2e 20 20 5e 49 66 20 53 51 4c 69 74  </b>.  ^If SQLit
1c00: 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69  e is compiled wi
1c10: 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f 45  th the.[SQLITE_E
1c20: 4e 41 42 4c 45 5f 53 54 41 54 32 5d 20 6f 70 74  NABLE_STAT2] opt
1c30: 69 6f 6e 2c 20 74 68 65 6e 20 61 64 64 69 74 69  ion, then additi
1c40: 6f 6e 61 6c 20 68 69 73 74 6f 67 72 61 6d 20 64  onal histogram d
1c50: 61 74 61 20 69 73 0a 63 6f 6c 6c 65 63 74 65 64  ata is.collected
1c60: 20 61 6e 64 20 73 74 6f 72 65 64 20 69 6e 20 3c   and stored in <
1c70: 62 3e 73 71 6c 69 74 65 5f 73 74 61 74 32 3c 2f  b>sqlite_stat2</
1c80: 62 3e 2e 0a 46 75 74 75 72 65 20 65 6e 68 61 6e  b>..Future enhan
1c90: 63 65 6d 65 6e 74 73 20 6d 61 79 20 63 72 65 61  cements may crea
1ca0: 74 65 0a 61 64 64 69 74 69 6f 6e 61 6c 20 74 61  te.additional ta
1cb0: 62 6c 65 73 20 77 69 74 68 20 74 68 65 20 73 61  bles with the sa
1cc0: 6d 65 20 6e 61 6d 65 20 70 61 74 74 65 72 6e 20  me name pattern 
1cd0: 65 78 63 65 70 74 20 77 69 74 68 20 74 68 65 20  except with the 
1ce0: 22 31 22 0a 6f 72 20 22 32 22 20 63 68 61 6e 67  "1".or "2" chang
1cf0: 65 64 20 74 6f 20 61 20 64 69 66 66 65 72 65 6e  ed to a differen
1d00: 74 20 64 69 67 69 74 2e 3c 2f 70 3e 0a 0a 3c 70  t digit.</p>..<p
1d10: 3e 20 5e 54 68 65 20 5b 44 52 4f 50 20 54 41 42  > ^The [DROP TAB
1d20: 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73  LE] command does
1d30: 0a 6e 6f 74 20 77 6f 72 6b 20 6f 6e 20 74 68 65  .not work on the
1d40: 20 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61 74 31   <b>sqlite_stat1
1d50: 3c 2f 62 3e 20 6f 72 20 3c 62 3e 73 71 6c 69 74  </b> or <b>sqlit
1d60: 65 5f 73 74 61 74 32 3c 2f 62 3e 20 74 61 62 6c  e_stat2</b> tabl
1d70: 65 73 2c 0a 62 75 74 20 61 6c 6c 20 74 68 65 20  es,.but all the 
1d80: 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 6f 73 65  content of those
1d90: 20 74 61 62 6c 65 73 20 63 61 6e 20 62 65 20 71   tables can be q
1da0: 75 65 72 69 65 64 20 75 73 69 6e 67 20 5b 53 45  ueried using [SE
1db0: 4c 45 43 54 5d 0a 61 6e 64 20 63 61 6e 20 62 65  LECT].and can be
1dc0: 20 64 65 6c 65 74 65 64 2c 20 61 75 67 6d 65 6e   deleted, augmen
1dd0: 74 65 64 2c 20 6f 72 20 6d 6f 64 69 66 69 65 64  ted, or modified
1de0: 20 75 73 69 6e 67 20 74 68 65 20 5b 44 45 4c 45   using the [DELE
1df0: 54 45 5d 2c 0a 5b 49 4e 53 45 52 54 5d 2c 20 61  TE],.[INSERT], a
1e00: 6e 64 20 5b 55 50 44 41 54 45 5d 20 63 6f 6d 6d  nd [UPDATE] comm
1e10: 61 6e 64 73 2e 0a 41 70 70 72 6f 70 72 69 61 74  ands..Appropriat
1e20: 65 20 63 61 72 65 20 73 68 6f 75 6c 64 20 62 65  e care should be
1e30: 20 75 73 65 64 20 77 68 65 6e 20 63 68 61 6e 67   used when chang
1e40: 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ing the content 
1e50: 6f 66 20 74 68 65 20 73 74 61 74 69 73 74 69 63  of the statistic
1e60: 73 0a 74 61 62 6c 65 73 20 61 73 20 69 6e 76 61  s.tables as inva
1e70: 6c 69 64 20 63 6f 6e 74 65 6e 74 20 63 61 6e 20  lid content can 
1e80: 63 61 75 73 65 20 53 51 4c 69 74 65 20 74 6f 20  cause SQLite to 
1e90: 73 65 6c 65 63 74 20 69 6e 65 66 66 69 63 69 65  select inefficie
1ea0: 6e 74 0a 71 75 65 72 79 20 70 6c 61 6e 73 2e 20  nt.query plans. 
1eb0: 20 47 65 6e 65 72 61 6c 6c 79 20 73 70 65 61 6b   Generally speak
1ec0: 69 6e 67 2c 20 6f 6e 65 20 73 68 6f 75 6c 64 20  ing, one should 
1ed0: 6e 6f 74 20 6d 6f 64 69 66 79 20 74 68 65 20 63  not modify the c
1ee0: 6f 6e 74 65 6e 74 20 6f 66 0a 74 68 65 20 73 74  ontent of.the st
1ef0: 61 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 20  atistics tables 
1f00: 62 79 20 61 6e 79 20 6d 65 63 68 61 6e 69 73 6d  by any mechanism
1f10: 20 6f 74 68 65 72 20 74 68 61 6e 20 69 6e 76 6f   other than invo
1f20: 6b 69 6e 67 20 74 68 65 0a 41 4e 41 4c 59 5a 45  king the.ANALYZE
1f30: 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c   command.</p>..<
1f40: 70 3e 20 5e 53 74 61 74 69 73 74 69 63 73 20 67  p> ^Statistics g
1f50: 61 74 68 65 72 65 64 20 62 79 20 41 4e 41 4c 59  athered by ANALY
1f60: 5a 45 20 61 72 65 20 3c 75 3e 6e 6f 74 3c 2f 75  ZE are <u>not</u
1f70: 3e 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  > automatically 
1f80: 75 70 64 61 74 65 64 20 61 73 0a 74 68 65 20 63  updated as.the c
1f90: 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 64 61  ontent of the da
1fa0: 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 2e 20  tabase changes. 
1fb0: 20 49 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   If the content 
1fc0: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  of the database.
1fd0: 63 68 61 6e 67 65 73 20 73 69 67 6e 69 66 69 63  changes signific
1fe0: 61 6e 74 6c 79 2c 20 6f 72 20 69 66 20 74 68 65  antly, or if the
1ff0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
2000: 20 63 68 61 6e 67 65 73 2c 20 74 68 65 6e 20 6f   changes, then o
2010: 6e 65 20 73 68 6f 75 6c 64 0a 63 6f 6e 73 69 64  ne should.consid
2020: 65 72 20 72 65 72 75 6e 6e 69 6e 67 20 74 68 65  er rerunning the
2030: 20 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64   ANALYZE command
2040: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 75 70 64   in order to upd
2050: 61 74 65 20 74 68 65 20 73 74 61 74 69 73 74 69  ate the statisti
2060: 63 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  cs.</p>..<tcl>.#
2070: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2080: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2090: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
20c0: 63 74 69 6f 6e 20 7b 41 54 54 41 43 48 20 44 41  ction {ATTACH DA
20d0: 54 41 42 41 53 45 7d 20 61 74 74 61 63 68 20 2a  TABASE} attach *
20e0: 41 54 54 41 43 48 0a 0a 42 75 62 62 6c 65 44 69  ATTACH..BubbleDi
20f0: 61 67 72 61 6d 20 61 74 74 61 63 68 2d 73 74 6d  agram attach-stm
2100: 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20  t 1.</tcl>..<p> 
2110: 5e 54 68 65 20 41 54 54 41 43 48 20 44 41 54 41  ^The ATTACH DATA
2120: 42 41 53 45 20 73 74 61 74 65 6d 65 6e 74 20 61  BASE statement a
2130: 64 64 73 20 61 6e 6f 74 68 65 72 20 64 61 74 61  dds another data
2140: 62 61 73 65 20 0a 66 69 6c 65 20 74 6f 20 74 68  base .file to th
2150: 65 20 63 75 72 72 65 6e 74 20 5b 64 61 74 61 62  e current [datab
2160: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 2e  ase connection].
2170: 20 0a 5e 54 68 65 20 64 61 74 61 62 61 73 65 2d   .^The database-
2180: 6e 61 6d 65 73 20 27 6d 61 69 6e 27 20 61 6e 64  names 'main' and
2190: 20 0a 27 74 65 6d 70 27 20 72 65 66 65 72 20 74   .'temp' refer t
21a0: 6f 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  o the main datab
21b0: 61 73 65 20 61 6e 64 20 74 68 65 20 64 61 74 61  ase and the data
21c0: 62 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a 74  base used for .t
21d0: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
21e0: 20 20 5e 54 68 65 20 6d 61 69 6e 20 61 6e 64 20    ^The main and 
21f0: 74 65 6d 70 20 64 61 74 61 62 61 73 65 73 20 63  temp databases c
2200: 61 6e 6e 6f 74 20 62 65 20 61 74 74 61 63 68 65  annot be attache
2210: 64 20 6f 72 0a 64 65 74 61 63 68 65 64 2e 3c 2f  d or.detached.</
2220: 70 3e 0a 0a 3c 70 3e 20 5e 59 6f 75 20 63 61 6e  p>..<p> ^You can
2230: 6e 6f 74 20 63 72 65 61 74 65 20 61 20 6e 65 77  not create a new
2240: 20 74 61 62 6c 65 20 77 69 74 68 20 74 68 65 20   table with the 
2250: 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61 20 74  same name as a t
2260: 61 62 6c 65 20 69 6e 20 0a 61 6e 20 61 74 74 61  able in .an atta
2270: 63 68 65 64 20 64 61 74 61 62 61 73 65 2c 20 62  ched database, b
2280: 75 74 20 79 6f 75 20 63 61 6e 20 61 74 74 61 63  ut you can attac
2290: 68 20 61 20 64 61 74 61 62 61 73 65 20 77 68 69  h a database whi
22a0: 63 68 20 63 6f 6e 74 61 69 6e 73 0a 74 61 62 6c  ch contains.tabl
22b0: 65 73 20 77 68 6f 73 65 20 6e 61 6d 65 73 20 61  es whose names a
22c0: 72 65 20 64 75 70 6c 69 63 61 74 65 73 20 6f 66  re duplicates of
22d0: 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 6d   tables in the m
22e0: 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 5e  ain database.  ^
22f0: 49 66 0a 74 68 65 20 73 79 73 74 65 6d 20 69 73  If.the system is
2300: 20 6e 6f 74 20 72 75 6e 6e 69 6e 67 20 69 6e 20   not running in 
2310: 5b 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f  [shared cache mo
2320: 64 65 5d 2c 20 69 74 20 69 73 20 61 6c 73 6f 20  de], it is also 
2330: 70 65 72 6d 69 73 73 69 62 6c 65 20 0a 74 6f 20  permissible .to 
2340: 61 74 74 61 63 68 20 74 68 65 20 73 61 6d 65 20  attach the same 
2350: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 75  database file mu
2360: 6c 74 69 70 6c 65 20 74 69 6d 65 73 2e 3c 2f 70  ltiple times.</p
2370: 3e 0a 0a 3c 70 3e 20 5e 28 54 61 62 6c 65 73 20  >..<p> ^(Tables 
2380: 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  in an attached d
2390: 61 74 61 62 61 73 65 20 63 61 6e 20 62 65 20 72  atabase can be r
23a0: 65 66 65 72 72 65 64 20 74 6f 20 75 73 69 6e 67  eferred to using
23b0: 20 74 68 65 20 73 79 6e 74 61 78 20 0a 3c 69 3e   the syntax .<i>
23c0: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 2e 74 61  database-name.ta
23d0: 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 20  ble-name</i>.)^ 
23e0: 20 5e 49 66 20 74 68 65 20 6e 61 6d 65 20 6f 66   ^If the name of
23f0: 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 75 6e   the table is un
2400: 69 71 75 65 0a 61 63 72 6f 73 73 20 61 6c 6c 20  ique.across all 
2410: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
2420: 65 73 20 61 6e 64 20 74 68 65 20 6d 61 69 6e 20  es and the main 
2430: 61 6e 64 20 74 65 6d 70 20 64 61 74 61 62 61 73  and temp databas
2440: 65 73 2c 20 74 68 65 6e 20 74 68 65 0a 3c 69 3e  es, then the.<i>
2450: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69  database-name</i
2460: 3e 20 70 72 65 66 69 78 20 69 73 20 6e 6f 74 20  > prefix is not 
2470: 72 65 71 75 69 72 65 64 2e 20 20 5e 57 68 65 6e  required.  ^When
2480: 20 61 20 64 61 74 61 62 61 73 65 20 69 73 20 61   a database is a
2490: 74 74 61 63 68 65 64 2c 20 0a 61 6c 6c 20 74 61  ttached, .all ta
24a0: 62 6c 65 73 20 77 68 69 63 68 20 64 6f 6e 27 74  bles which don't
24b0: 20 68 61 76 65 20 64 75 70 6c 69 63 61 74 65 20   have duplicate 
24c0: 6e 61 6d 65 73 20 62 65 63 6f 6d 65 20 74 68 65  names become the
24d0: 20 64 65 66 61 75 6c 74 20 74 61 62 6c 65 0a 6f   default table.o
24e0: 66 20 74 68 61 74 20 6e 61 6d 65 2e 20 20 5e 41  f that name.  ^A
24f0: 6e 79 20 74 61 62 6c 65 73 20 6f 66 20 74 68 61  ny tables of tha
2500: 74 20 6e 61 6d 65 20 61 74 74 61 63 68 65 64 20  t name attached 
2510: 61 66 74 65 72 77 61 72 64 73 20 72 65 71 75 69  afterwards requi
2520: 72 65 20 74 68 65 0a 64 61 74 61 62 61 73 65 20  re the.database 
2530: 70 72 65 66 69 78 2e 20 5e 49 66 20 74 68 65 20  prefix. ^If the 
2540: 64 65 66 61 75 6c 74 20 74 61 62 6c 65 20 6f 66  default table of
2550: 20 61 20 67 69 76 65 6e 20 6e 61 6d 65 20 69 73   a given name is
2560: 20 64 65 74 61 63 68 65 64 2c 20 74 68 65 6e 0a   detached, then.
2570: 74 68 65 20 6c 61 73 74 20 74 61 62 6c 65 20 6f  the last table o
2580: 66 20 74 68 61 74 20 6e 61 6d 65 20 61 74 74 61  f that name atta
2590: 63 68 65 64 20 62 65 63 6f 6d 65 73 20 74 68 65  ched becomes the
25a0: 20 6e 65 77 20 64 65 66 61 75 6c 74 2e 3c 2f 70   new default.</p
25b0: 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74  >..<p>.^Transact
25c0: 69 6f 6e 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d  ions involving m
25d0: 75 6c 74 69 70 6c 65 20 61 74 74 61 63 68 65 64  ultiple attached
25e0: 20 64 61 74 61 62 61 73 65 73 20 61 72 65 20 61   databases are a
25f0: 74 6f 6d 69 63 2c 0a 61 73 73 75 6d 69 6e 67 20  tomic,.assuming 
2600: 74 68 61 74 20 74 68 65 20 6d 61 69 6e 20 64 61  that the main da
2610: 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20 22 5b  tabase is not "[
2620: 3a 6d 65 6d 6f 72 79 3a 5d 22 2e 20 20 5e 28 49  :memory:]".  ^(I
2630: 66 20 74 68 65 20 6d 61 69 6e 0a 64 61 74 61 62  f the main.datab
2640: 61 73 65 20 69 73 20 22 3a 6d 65 6d 6f 72 79 3a  ase is ":memory:
2650: 22 20 74 68 65 6e 20 0a 74 72 61 6e 73 61 63 74  " then .transact
2660: 69 6f 6e 73 20 63 6f 6e 74 69 6e 75 65 20 74 6f  ions continue to
2670: 20 62 65 20 61 74 6f 6d 69 63 20 77 69 74 68 69   be atomic withi
2680: 6e 20 65 61 63 68 20 69 6e 64 69 76 69 64 75 61  n each individua
2690: 6c 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  l.database file.
26a0: 20 42 75 74 20 69 66 20 74 68 65 20 68 6f 73 74   But if the host
26b0: 20 63 6f 6d 70 75 74 65 72 20 63 72 61 73 68 65   computer crashe
26c0: 73 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 0a  s in the middle.
26d0: 6f 66 20 61 20 5b 43 4f 4d 4d 49 54 5d 20 77 68  of a [COMMIT] wh
26e0: 65 72 65 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  ere two or more 
26f0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 61  database files a
2700: 72 65 20 75 70 64 61 74 65 64 2c 0a 73 6f 6d 65  re updated,.some
2710: 20 6f 66 20 74 68 6f 73 65 20 66 69 6c 65 73 20   of those files 
2720: 6d 69 67 68 74 20 67 65 74 20 74 68 65 20 63 68  might get the ch
2730: 61 6e 67 65 73 20 77 68 65 72 65 20 6f 74 68 65  anges where othe
2740: 72 73 0a 6d 69 67 68 74 20 6e 6f 74 2e 29 5e 0a  rs.might not.)^.
2750: 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 72 65  </p>..<p> ^There
2760: 20 69 73 20 61 20 63 6f 6d 70 69 6c 65 2d 74 69   is a compile-ti
2770: 6d 65 20 6c 69 6d 69 74 20 6f 66 20 5b 53 51 4c  me limit of [SQL
2780: 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
2790: 5d 0a 61 74 74 61 63 68 65 64 20 64 61 74 61 62  ].attached datab
27a0: 61 73 65 20 66 69 6c 65 73 2e 3c 2f 70 3e 0a 0a  ase files.</p>..
27b0: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
27c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2800: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 42  #####.Section {B
2810: 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e  EGIN TRANSACTION
2820: 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 7b 2a  } transaction {*
2830: 42 45 47 49 4e 20 43 4f 4d 4d 49 54 20 52 4f 4c  BEGIN COMMIT ROL
2840: 4c 42 41 43 4b 7d 0a 0a 42 75 62 62 6c 65 44 69  LBACK}..BubbleDi
2850: 61 67 72 61 6d 20 62 65 67 69 6e 2d 73 74 6d 74  agram begin-stmt
2860: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63  .BubbleDiagram c
2870: 6f 6d 6d 69 74 2d 73 74 6d 74 0a 42 75 62 62 6c  ommit-stmt.Bubbl
2880: 65 44 69 61 67 72 61 6d 20 72 6f 6c 6c 62 61 63  eDiagram rollbac
2890: 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  k-stmt.</tcl>..<
28a0: 70 3e 0a 5e 4e 6f 20 63 68 61 6e 67 65 73 20 63  p>.^No changes c
28b0: 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68  an be made to th
28c0: 65 20 64 61 74 61 62 61 73 65 20 65 78 63 65 70  e database excep
28d0: 74 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  t within a trans
28e0: 61 63 74 69 6f 6e 2e 0a 5e 41 6e 79 20 63 6f 6d  action..^Any com
28f0: 6d 61 6e 64 20 74 68 61 74 20 63 68 61 6e 67 65  mand that change
2900: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28  s the database (
2910: 62 61 73 69 63 61 6c 6c 79 2c 20 61 6e 79 20 53  basically, any S
2920: 51 4c 20 63 6f 6d 6d 61 6e 64 0a 6f 74 68 65 72  QL command.other
2930: 20 74 68 61 6e 20 5b 53 45 4c 45 43 54 5d 29 20   than [SELECT]) 
2940: 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c  will automatical
2950: 6c 79 20 73 74 61 72 74 20 61 20 74 72 61 6e 73  ly start a trans
2960: 61 63 74 69 6f 6e 20 69 66 0a 6f 6e 65 20 69 73  action if.one is
2970: 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 69 6e 20   not already in 
2980: 65 66 66 65 63 74 2e 20 20 5e 41 75 74 6f 6d 61  effect.  ^Automa
2990: 74 69 63 61 6c 6c 79 20 73 74 61 72 74 65 64 20  tically started 
29a0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61 72 65  transactions.are
29b0: 20 63 6f 6d 6d 69 74 74 65 64 20 77 68 65 6e 20   committed when 
29c0: 74 68 65 20 6c 61 73 74 20 71 75 65 72 79 20 66  the last query f
29d0: 69 6e 69 73 68 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c  inishes..</p>..<
29e0: 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e 73  p>.^Transactions
29f0: 20 63 61 6e 20 62 65 20 73 74 61 72 74 65 64 20   can be started 
2a00: 6d 61 6e 75 61 6c 6c 79 20 75 73 69 6e 67 20 74  manually using t
2a10: 68 65 20 42 45 47 49 4e 0a 63 6f 6d 6d 61 6e 64  he BEGIN.command
2a20: 2e 20 20 5e 28 53 75 63 68 20 74 72 61 6e 73 61  .  ^(Such transa
2a30: 63 74 69 6f 6e 73 20 75 73 75 61 6c 6c 79 20 70  ctions usually p
2a40: 65 72 73 69 73 74 20 75 6e 74 69 6c 20 74 68 65  ersist until the
2a50: 20 6e 65 78 74 0a 43 4f 4d 4d 49 54 20 6f 72 20   next.COMMIT or 
2a60: 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64  ROLLBACK command
2a70: 2e 20 20 42 75 74 20 61 20 74 72 61 6e 73 61 63  .  But a transac
2a80: 74 69 6f 6e 20 77 69 6c 6c 20 61 6c 73 6f 20 0a  tion will also .
2a90: 52 4f 4c 4c 42 41 43 4b 20 69 66 20 74 68 65 20  ROLLBACK if the 
2aa0: 64 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73  database is clos
2ab0: 65 64 20 6f 72 20 69 66 20 61 6e 20 65 72 72 6f  ed or if an erro
2ac0: 72 20 6f 63 63 75 72 73 0a 61 6e 64 20 74 68 65  r occurs.and the
2ad0: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6e 66 6c 69   ROLLBACK confli
2ae0: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
2af0: 67 6f 72 69 74 68 6d 20 69 73 20 73 70 65 63 69  gorithm is speci
2b00: 66 69 65 64 2e 29 5e 0a 53 65 65 20 74 68 65 20  fied.)^.See the 
2b10: 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e  documentation on
2b20: 20 74 68 65 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43   the [ON CONFLIC
2b30: 54 5d 0a 63 6c 61 75 73 65 20 66 6f 72 20 61 64  T].clause for ad
2b40: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
2b50: 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 52  tion about the R
2b60: 4f 4c 4c 42 41 43 4b 0a 63 6f 6e 66 6c 69 63 74  OLLBACK.conflict
2b70: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
2b80: 72 69 74 68 6d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  rithm..</p>..<p>
2b90: 0a 5e 45 4e 44 20 54 52 41 4e 53 41 43 54 49 4f  .^END TRANSACTIO
2ba0: 4e 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  N is an alias fo
2bb0: 72 20 43 4f 4d 4d 49 54 2e 0a 3c 2f 70 3e 0a 0a  r COMMIT..</p>..
2bc0: 3c 70 3e 20 5e 28 54 72 61 6e 73 61 63 74 69 6f  <p> ^(Transactio
2bd0: 6e 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  ns created using
2be0: 20 42 45 47 49 4e 2e 2e 2e 43 4f 4d 4d 49 54 20   BEGIN...COMMIT 
2bf0: 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 29 5e 0a 5e  do not nest.)^.^
2c00: 46 6f 72 20 6e 65 73 74 65 64 20 74 72 61 6e 73  For nested trans
2c10: 61 63 74 69 6f 6e 73 2c 20 75 73 65 20 74 68 65  actions, use the
2c20: 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 61 6e 64   [SAVEPOINT] and
2c30: 20 5b 52 45 4c 45 41 53 45 5d 20 63 6f 6d 6d 61   [RELEASE] comma
2c40: 6e 64 73 2e 0a 54 68 65 20 22 54 4f 20 53 41 56  nds..The "TO SAV
2c50: 45 50 4f 49 4e 54 20 3c 69 3e 6e 61 6d 65 3c 2f  EPOINT <i>name</
2c60: 69 3e 22 20 63 6c 61 75 73 65 20 6f 66 20 74 68  i>" clause of th
2c70: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  e ROLLBACK comma
2c80: 6e 64 20 73 68 6f 77 6e 0a 69 6e 20 74 68 65 20  nd shown.in the 
2c90: 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 20 61  syntax diagram a
2ca0: 62 6f 76 65 20 69 73 20 6f 6e 6c 79 20 61 70 70  bove is only app
2cb0: 6c 69 63 61 62 6c 65 20 74 6f 20 5b 53 41 56 45  licable to [SAVE
2cc0: 50 4f 49 4e 54 5d 0a 74 72 61 6e 73 61 63 74 69  POINT].transacti
2cd0: 6f 6e 73 2e 20 20 5e 41 6e 20 61 74 74 65 6d 70  ons.  ^An attemp
2ce0: 74 20 74 6f 20 69 6e 76 6f 6b 65 20 74 68 65 20  t to invoke the 
2cf0: 42 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 77 69  BEGIN command wi
2d00: 74 68 69 6e 0a 61 20 74 72 61 6e 73 61 63 74 69  thin.a transacti
2d10: 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74  on will fail wit
2d20: 68 20 61 6e 20 65 72 72 6f 72 2c 20 72 65 67 61  h an error, rega
2d30: 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
2d40: 72 0a 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  r.the transactio
2d50: 6e 20 77 61 73 20 73 74 61 72 74 65 64 20 62 79  n was started by
2d60: 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 6f 72 20   [SAVEPOINT] or 
2d70: 61 20 70 72 69 6f 72 20 42 45 47 49 4e 2e 0a 5e  a prior BEGIN..^
2d80: 54 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61  The COMMIT comma
2d90: 6e 64 20 61 6e 64 20 74 68 65 20 52 4f 4c 4c 42  nd and the ROLLB
2da0: 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68  ACK command with
2db0: 6f 75 74 20 74 68 65 20 54 4f 20 63 6c 61 75 73  out the TO claus
2dc0: 65 0a 77 6f 72 6b 20 74 68 65 20 73 61 6d 65 20  e.work the same 
2dd0: 6f 6e 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 74  on [SAVEPOINT] t
2de0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 73 20 74  ransactions as t
2df0: 68 65 79 20 64 6f 20 77 69 74 68 20 74 72 61 6e  hey do with tran
2e00: 73 61 63 74 69 6f 6e 73 0a 73 74 61 72 74 65 64  sactions.started
2e10: 20 62 79 20 42 45 47 49 4e 2e 3c 2f 70 3e 0a 0a   by BEGIN.</p>..
2e20: 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e  <p>.^Transaction
2e30: 73 20 63 61 6e 20 62 65 20 64 65 66 65 72 72 65  s can be deferre
2e40: 64 2c 20 69 6d 6d 65 64 69 61 74 65 2c 20 6f 72  d, immediate, or
2e50: 20 65 78 63 6c 75 73 69 76 65 2e 20 20 0a 5e 54   exclusive.  .^T
2e60: 68 65 20 64 65 66 61 75 6c 74 20 74 72 61 6e 73  he default trans
2e70: 61 63 74 69 6f 6e 20 62 65 68 61 76 69 6f 72 20  action behavior 
2e80: 69 73 20 64 65 66 65 72 72 65 64 2e 0a 5e 44 65  is deferred..^De
2e90: 66 65 72 72 65 64 20 6d 65 61 6e 73 20 74 68 61  ferred means tha
2ea0: 74 20 6e 6f 20 6c 6f 63 6b 73 20 61 72 65 20 61  t no locks are a
2eb0: 63 71 75 69 72 65 64 0a 6f 6e 20 74 68 65 20 64  cquired.on the d
2ec0: 61 74 61 62 61 73 65 20 75 6e 74 69 6c 20 74 68  atabase until th
2ed0: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 66 69  e database is fi
2ee0: 72 73 74 20 61 63 63 65 73 73 65 64 2e 20 20 5e  rst accessed.  ^
2ef0: 54 68 75 73 20 77 69 74 68 20 61 0a 64 65 66 65  Thus with a.defe
2f00: 72 72 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  rred transaction
2f10: 2c 20 74 68 65 20 42 45 47 49 4e 20 73 74 61 74  , the BEGIN stat
2f20: 65 6d 65 6e 74 20 69 74 73 65 6c 66 20 64 6f 65  ement itself doe
2f30: 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65  s nothing to the
2f40: 0a 66 69 6c 65 73 79 73 74 65 6d 2e 20 20 5e 4c  .filesystem.  ^L
2f50: 6f 63 6b 73 0a 61 72 65 20 6e 6f 74 20 61 63 71  ocks.are not acq
2f60: 75 69 72 65 64 20 75 6e 74 69 6c 20 74 68 65 20  uired until the 
2f70: 66 69 72 73 74 20 72 65 61 64 20 6f 72 20 77 72  first read or wr
2f80: 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  ite operation.  
2f90: 5e 54 68 65 20 66 69 72 73 74 20 72 65 61 64 0a  ^The first read.
2fa0: 6f 70 65 72 61 74 69 6f 6e 20 61 67 61 69 6e 73  operation agains
2fb0: 74 20 61 20 64 61 74 61 62 61 73 65 20 63 72 65  t a database cre
2fc0: 61 74 65 73 20 61 20 5b 53 48 41 52 45 44 5d 20  ates a [SHARED] 
2fd0: 6c 6f 63 6b 20 61 6e 64 20 74 68 65 20 66 69 72  lock and the fir
2fe0: 73 74 0a 77 72 69 74 65 20 6f 70 65 72 61 74 69  st.write operati
2ff0: 6f 6e 20 63 72 65 61 74 65 73 20 61 20 5b 52 45  on creates a [RE
3000: 53 45 52 56 45 44 5d 20 6c 6f 63 6b 2e 20 20 20  SERVED] lock.   
3010: 5e 42 65 63 61 75 73 65 20 74 68 65 20 61 63 71  ^Because the acq
3020: 75 69 73 69 74 69 6f 6e 20 6f 66 0a 6c 6f 63 6b  uisition of.lock
3030: 73 20 69 73 20 64 65 66 65 72 72 65 64 20 75 6e  s is deferred un
3040: 74 69 6c 20 74 68 65 79 20 61 72 65 20 6e 65 65  til they are nee
3050: 64 65 64 2c 20 69 74 20 69 73 20 70 6f 73 73 69  ded, it is possi
3060: 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72  ble that another
3070: 0a 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65  .thread or proce
3080: 73 73 20 63 6f 75 6c 64 20 63 72 65 61 74 65 20  ss could create 
3090: 61 20 73 65 70 61 72 61 74 65 20 74 72 61 6e 73  a separate trans
30a0: 61 63 74 69 6f 6e 20 61 6e 64 20 77 72 69 74 65  action and write
30b0: 20 74 6f 0a 74 68 65 20 64 61 74 61 62 61 73 65   to.the database
30c0: 20 61 66 74 65 72 20 74 68 65 20 42 45 47 49 4e   after the BEGIN
30d0: 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20   on the current 
30e0: 74 68 72 65 61 64 20 68 61 73 20 65 78 65 63 75  thread has execu
30f0: 74 65 64 2e 0a 5e 49 66 20 74 68 65 20 74 72 61  ted..^If the tra
3100: 6e 73 61 63 74 69 6f 6e 20 69 73 20 69 6d 6d 65  nsaction is imme
3110: 64 69 61 74 65 2c 20 74 68 65 6e 20 5b 52 45 53  diate, then [RES
3120: 45 52 56 45 44 5d 20 6c 6f 63 6b 73 0a 61 72 65  ERVED] locks.are
3130: 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c   acquired on all
3140: 20 64 61 74 61 62 61 73 65 73 20 61 73 20 73 6f   databases as so
3150: 6f 6e 20 61 73 20 74 68 65 20 42 45 47 49 4e 20  on as the BEGIN 
3160: 63 6f 6d 6d 61 6e 64 20 69 73 0a 65 78 65 63 75  command is.execu
3170: 74 65 64 2c 20 77 69 74 68 6f 75 74 20 77 61 69  ted, without wai
3180: 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 64 61 74  ting for the.dat
3190: 61 62 61 73 65 20 74 6f 20 62 65 20 75 73 65 64  abase to be used
31a0: 2e 20 20 5e 41 66 74 65 72 20 61 20 42 45 47 49  .  ^After a BEGI
31b0: 4e 20 49 4d 4d 45 44 49 41 54 45 2c 20 0a 6e 6f  N IMMEDIATE, .no
31c0: 20 6f 74 68 65 72 20 5b 64 61 74 61 62 61 73 65   other [database
31d0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 77 69 6c   connection] wil
31e0: 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 77 72 69  l be able to wri
31f0: 74 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  te to the databa
3200: 73 65 20 6f 72 0a 64 6f 20 61 20 42 45 47 49 4e  se or.do a BEGIN
3210: 20 49 4d 4d 45 44 49 41 54 45 20 6f 72 20 42 45   IMMEDIATE or BE
3220: 47 49 4e 20 45 58 43 4c 55 53 49 56 45 2e 20 20  GIN EXCLUSIVE.  
3230: 5e 4f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73  ^Other processes
3240: 20 63 61 6e 20 63 6f 6e 74 69 6e 75 65 0a 74 6f   can continue.to
3250: 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20 64   read from the d
3260: 61 74 61 62 61 73 65 2c 20 68 6f 77 65 76 65 72  atabase, however
3270: 2e 20 20 5e 41 6e 20 65 78 63 6c 75 73 69 76 65  .  ^An exclusive
3280: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 61 75   transaction cau
3290: 73 65 73 0a 5b 45 58 43 4c 55 53 49 56 45 5d 20  ses.[EXCLUSIVE] 
32a0: 6c 6f 63 6b 73 20 74 6f 20 62 65 20 61 63 71 75  locks to be acqu
32b0: 69 72 65 64 20 6f 6e 20 61 6c 6c 20 64 61 74 61  ired on all data
32c0: 62 61 73 65 73 2e 20 20 5e 41 66 74 65 72 20 61  bases.  ^After a
32d0: 20 42 45 47 49 4e 0a 45 58 43 4c 55 53 49 56 45   BEGIN.EXCLUSIVE
32e0: 2c 20 6e 6f 20 6f 74 68 65 72 20 5b 64 61 74 61  , no other [data
32f0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d  base connection]
3300: 20 65 78 63 65 70 74 20 66 6f 72 20 5b 72 65 61   except for [rea
3310: 64 5f 75 6e 63 6f 6d 6d 69 74 74 65 64 5d 0a 63  d_uncommitted].c
3320: 6f 6e 6e 65 63 74 69 6f 6e 73 20 77 69 6c 6c 20  onnections will 
3330: 62 65 20 61 62 6c 65 20 74 6f 20 72 65 61 64 20  be able to read 
3340: 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64  the database and
3350: 20 6e 6f 20 6f 74 68 65 72 20 63 6f 6e 6e 65 63   no other connec
3360: 74 69 6f 6e 20 77 69 74 68 6f 75 74 0a 65 78 63  tion without.exc
3370: 65 70 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61  eption will be a
3380: 62 6c 65 20 74 6f 20 77 72 69 74 65 20 74 68 65  ble to write the
3390: 20 64 61 74 61 62 61 73 65 20 75 6e 74 69 6c 20   database until 
33a0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
33b0: 69 73 0a 63 6f 6d 70 6c 65 74 65 2e 0a 3c 2f 70  is.complete..</p
33c0: 3e 0a 0a 3c 70 3e 0a 5e 28 41 6e 20 69 6d 70 6c  >..<p>.^(An impl
33d0: 69 63 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  icit transaction
33e0: 20 28 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   (a transaction 
33f0: 74 68 61 74 20 69 73 20 73 74 61 72 74 65 64 20  that is started 
3400: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2c 0a 6e  automatically,.n
3410: 6f 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ot a transaction
3420: 20 73 74 61 72 74 65 64 20 62 79 20 42 45 47 49   started by BEGI
3430: 4e 29 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 20  N) is committed 
3440: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68  automatically wh
3450: 65 6e 0a 74 68 65 20 6c 61 73 74 20 61 63 74 69  en.the last acti
3460: 76 65 20 73 74 61 74 65 6d 65 6e 74 20 66 69 6e  ve statement fin
3470: 69 73 68 65 73 2e 20 20 41 20 73 74 61 74 65 6d  ishes.  A statem
3480: 65 6e 74 20 66 69 6e 69 73 68 65 73 20 77 68 65  ent finishes whe
3490: 6e 20 69 74 73 0a 70 72 65 70 61 72 65 64 20 73  n its.prepared s
34a0: 74 61 74 65 6d 65 6e 74 20 69 73 20 5b 73 71 6c  tatement is [sql
34b0: 69 74 65 33 5f 72 65 73 65 74 28 29 20 7c 20 72  ite3_reset() | r
34c0: 65 73 65 74 5d 20 6f 72 0a 5b 73 71 6c 69 74 65  eset] or.[sqlite
34d0: 33 5f 66 69 6e 61 6c 69 7a 65 28 29 20 7c 20 66  3_finalize() | f
34e0: 69 6e 61 6c 69 7a 65 64 5d 2e 20 20 41 6e 20 6f  inalized].  An o
34f0: 70 65 6e 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f  pen [sqlite3_blo
3500: 62 5d 20 75 73 65 64 20 66 6f 72 0a 69 6e 63 72  b] used for.incr
3510: 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f  emental BLOB I/O
3520: 20 63 6f 75 6e 74 73 20 61 73 20 61 6e 20 75 6e   counts as an un
3530: 66 69 6e 69 73 68 65 64 20 73 74 61 74 65 6d 65  finished stateme
3540: 6e 74 2e 20 20 54 68 65 20 5b 73 71 6c 69 74 65  nt.  The [sqlite
3550: 33 5f 62 6c 6f 62 5d 0a 66 69 6e 69 73 68 65 73  3_blob].finishes
3560: 20 77 68 65 6e 20 69 74 20 69 73 20 5b 73 71 6c   when it is [sql
3570: 69 74 65 33 5f 62 6c 6f 62 5f 63 6c 6f 73 65 28  ite3_blob_close(
3580: 29 20 7c 20 63 6c 6f 73 65 64 5d 2e 29 5e 0a 3c  ) | closed].)^.<
3590: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 68 65 20 65 78  /p>..<p>.^The ex
35a0: 70 6c 69 63 69 74 20 43 4f 4d 4d 49 54 20 63 6f  plicit COMMIT co
35b0: 6d 6d 61 6e 64 20 72 75 6e 73 20 69 6d 6d 65 64  mmand runs immed
35c0: 69 61 74 65 6c 79 2c 20 65 76 65 6e 20 69 66 20  iately, even if 
35d0: 74 68 65 72 65 20 61 72 65 0a 70 65 6e 64 69 6e  there are.pendin
35e0: 67 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65  g [SELECT] state
35f0: 6d 65 6e 74 73 2e 20 20 5e 48 6f 77 65 76 65 72  ments.  ^However
3600: 2c 20 69 66 20 74 68 65 72 65 20 61 72 65 20 70  , if there are p
3610: 65 6e 64 69 6e 67 0a 77 72 69 74 65 20 6f 70 65  ending.write ope
3620: 72 61 74 69 6f 6e 73 2c 20 74 68 65 20 43 4f 4d  rations, the COM
3630: 4d 49 54 20 63 6f 6d 6d 61 6e 64 0a 77 69 6c 6c  MIT command.will
3640: 20 66 61 69 6c 20 77 69 74 68 20 61 20 65 72 72   fail with a err
3650: 6f 72 20 63 6f 64 65 20 5b 53 51 4c 49 54 45 5f  or code [SQLITE_
3660: 42 55 53 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  BUSY]..</p>..<p>
3670: 0a 5e 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 20  .^An attempt to 
3680: 65 78 65 63 75 74 65 20 43 4f 4d 4d 49 54 20 6d  execute COMMIT m
3690: 69 67 68 74 20 61 6c 73 6f 20 72 65 73 75 6c 74  ight also result
36a0: 20 69 6e 20 61 6e 20 5b 53 51 4c 49 54 45 5f 42   in an [SQLITE_B
36b0: 55 53 59 5d 20 72 65 74 75 72 6e 20 63 6f 64 65  USY] return code
36c0: 0a 69 66 20 61 6e 20 61 6e 6f 74 68 65 72 20 74  .if an another t
36d0: 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65 73 73  hread or process
36e0: 20 68 61 73 20 61 20 5b 73 68 61 72 65 64 20 6c   has a [shared l
36f0: 6f 63 6b 5d 20 6f 6e 20 74 68 65 20 64 61 74 61  ock] on the data
3700: 62 61 73 65 0a 74 68 61 74 20 70 72 65 76 65 6e  base.that preven
3710: 74 65 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ted the database
3720: 20 66 72 6f 6d 20 62 65 69 6e 67 20 75 70 64 61   from being upda
3730: 74 65 64 2e 20 20 5e 57 68 65 6e 20 43 4f 4d 4d  ted.  ^When COMM
3740: 49 54 20 66 61 69 6c 73 20 69 6e 20 74 68 69 73  IT fails in this
3750: 0a 77 61 79 2c 20 74 68 65 20 74 72 61 6e 73 61  .way, the transa
3760: 63 74 69 6f 6e 20 72 65 6d 61 69 6e 73 20 61 63  ction remains ac
3770: 74 69 76 65 20 61 6e 64 20 74 68 65 20 43 4f 4d  tive and the COM
3780: 4d 49 54 20 63 61 6e 20 62 65 20 72 65 74 72 69  MIT can be retri
3790: 65 64 20 6c 61 74 65 72 0a 61 66 74 65 72 20 74  ed later.after t
37a0: 68 65 20 72 65 61 64 65 72 20 68 61 73 20 68 61  he reader has ha
37b0: 64 20 61 20 63 68 61 6e 63 65 20 74 6f 20 63 6c  d a chance to cl
37c0: 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e  ear..</p>..<p>.^
37d0: 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20 77 69 6c  The ROLLBACK wil
37e0: 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65  l fail with an e
37f0: 72 72 6f 72 20 63 6f 64 65 20 5b 53 51 4c 49 54  rror code [SQLIT
3800: 45 5f 42 55 53 59 5d 20 69 66 20 74 68 65 72 65  E_BUSY] if there
3810: 0a 61 72 65 20 61 6e 79 20 70 65 6e 64 69 6e 67  .are any pending
3820: 20 71 75 65 72 69 65 73 2e 20 20 5e 42 6f 74 68   queries.  ^Both
3830: 20 72 65 61 64 2d 6f 6e 6c 79 20 61 6e 64 20 72   read-only and r
3840: 65 61 64 2f 77 72 69 74 65 20 71 75 65 72 69 65  ead/write querie
3850: 73 20 77 69 6c 6c 0a 63 61 75 73 65 20 61 20 52  s will.cause a R
3860: 4f 4c 4c 42 41 43 4b 20 74 6f 20 66 61 69 6c 2e  OLLBACK to fail.
3870: 20 20 41 20 52 4f 4c 4c 42 41 43 4b 20 6d 75 73    A ROLLBACK mus
3880: 74 20 66 61 69 6c 20 69 66 20 74 68 65 72 65 20  t fail if there 
3890: 61 72 65 20 70 65 6e 64 69 6e 67 0a 72 65 61 64  are pending.read
38a0: 20 6f 70 65 72 61 74 69 6f 6e 73 20 28 75 6e 6c   operations (unl
38b0: 69 6b 65 20 43 4f 4d 4d 49 54 20 77 68 69 63 68  ike COMMIT which
38c0: 20 63 61 6e 20 73 75 63 63 65 65 64 29 20 62 65   can succeed) be
38d0: 63 61 75 73 65 20 62 61 64 20 74 68 69 6e 67 73  cause bad things
38e0: 0a 77 69 6c 6c 20 68 61 70 70 65 6e 20 69 66 20  .will happen if 
38f0: 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 69 6d  the in-memory im
3900: 61 67 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  age of the datab
3910: 61 73 65 20 69 73 20 63 68 61 6e 67 65 64 20 6f  ase is changed o
3920: 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 0a 61 6e  ut from under.an
3930: 20 61 63 74 69 76 65 20 71 75 65 72 79 2e 0a 3c   active query..<
3940: 2f 70 3e 0a 0a 3c 70 3e 0a 49 66 20 5b 50 52 41  /p>..<p>.If [PRA
3950: 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  GMA journal_mode
3960: 5d 20 69 73 20 73 65 74 20 74 6f 20 4f 46 46 20  ] is set to OFF 
3970: 28 74 68 75 73 20 64 69 73 61 62 6c 69 6e 67 20  (thus disabling 
3980: 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  the rollback jou
3990: 72 6e 61 6c 0a 66 69 6c 65 29 20 74 68 65 6e 20  rnal.file) then 
39a0: 74 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20  the behavior of 
39b0: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d  the ROLLBACK com
39c0: 6d 61 6e 64 20 69 73 20 75 6e 64 65 66 69 6e 65  mand is undefine
39d0: 64 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73  d..</p>..<h3>Res
39e0: 70 6f 6e 73 65 20 54 6f 20 45 72 72 6f 72 73 20  ponse To Errors 
39f0: 57 69 74 68 69 6e 20 41 20 54 72 61 6e 73 61 63  Within A Transac
3a00: 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 5e  tion</h3>..<p> ^
3a10: 28 49 66 20 63 65 72 74 61 69 6e 20 6b 69 6e 64  (If certain kind
3a20: 73 20 6f 66 20 65 72 72 6f 72 73 20 6f 63 63 75  s of errors occu
3a30: 72 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  r within a trans
3a40: 61 63 74 69 6f 6e 2c 20 74 68 65 0a 74 72 61 6e  action, the.tran
3a50: 73 61 63 74 69 6f 6e 20 6d 61 79 20 6f 72 20 6d  saction may or m
3a60: 61 79 20 6e 6f 74 20 62 65 20 72 6f 6c 6c 65 64  ay not be rolled
3a70: 20 62 61 63 6b 20 61 75 74 6f 6d 61 74 69 63 61   back automatica
3a80: 6c 6c 79 2e 20 20 54 68 65 0a 65 72 72 6f 72 73  lly.  The.errors
3a90: 20 74 68 61 74 20 63 61 75 73 65 20 74 68 65 20   that cause the 
3aa0: 62 65 68 61 76 69 6f 72 20 69 6e 63 6c 75 64 65  behavior include
3ab0: 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  :</p>..<ul>.<li>
3ac0: 20 5b 53 51 4c 49 54 45 5f 46 55 4c 4c 5d 3a 20   [SQLITE_FULL]: 
3ad0: 64 61 74 61 62 61 73 65 20 6f 72 20 64 69 73 6b  database or disk
3ae0: 20 66 75 6c 6c 0a 3c 6c 69 3e 20 5b 53 51 4c 49   full.<li> [SQLI
3af0: 54 45 5f 49 4f 45 52 52 5d 3a 20 64 69 73 6b 20  TE_IOERR]: disk 
3b00: 49 2f 4f 20 65 72 72 6f 72 0a 3c 6c 69 3e 20 5b  I/O error.<li> [
3b10: 53 51 4c 49 54 45 5f 42 55 53 59 5d 3a 20 64 61  SQLITE_BUSY]: da
3b20: 74 61 62 61 73 65 20 69 6e 20 75 73 65 20 62 79  tabase in use by
3b30: 20 61 6e 6f 74 68 65 72 20 70 72 6f 63 65 73 73   another process
3b40: 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 4e 4f  .<li> [SQLITE_NO
3b50: 4d 45 4d 5d 3a 20 6f 75 74 20 6f 72 20 6d 65 6d  MEM]: out or mem
3b60: 6f 72 79 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45  ory.<li> [SQLITE
3b70: 5f 49 4e 54 45 52 52 55 50 54 5d 3a 20 70 72 6f  _INTERRUPT]: pro
3b80: 63 65 73 73 69 6e 67 20 5b 73 71 6c 69 74 65 33  cessing [sqlite3
3b90: 5f 69 6e 74 65 72 72 75 70 74 7c 69 6e 74 65 72  _interrupt|inter
3ba0: 72 75 70 74 65 64 5d 0a 20 20 20 20 20 62 79 20  rupted].     by 
3bb0: 61 70 70 6c 69 63 61 74 69 6f 6e 20 72 65 71 75  application requ
3bc0: 65 73 74 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e  est.</ul>)^..<p>
3bd0: 0a 5e 46 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65  .^For all of the
3be0: 73 65 20 65 72 72 6f 72 73 2c 20 53 51 4c 69 74  se errors, SQLit
3bf0: 65 20 61 74 74 65 6d 70 74 73 20 74 6f 20 75 6e  e attempts to un
3c00: 64 6f 20 6a 75 73 74 20 74 68 65 20 6f 6e 65 20  do just the one 
3c10: 73 74 61 74 65 6d 65 6e 74 0a 69 74 20 77 61 73  statement.it was
3c20: 20 77 6f 72 6b 69 6e 67 20 6f 6e 20 61 6e 64 20   working on and 
3c30: 6c 65 61 76 65 20 63 68 61 6e 67 65 73 20 66 72  leave changes fr
3c40: 6f 6d 20 70 72 69 6f 72 20 73 74 61 74 65 6d 65  om prior stateme
3c50: 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65 0a 73  nts within the.s
3c60: 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ame transaction 
3c70: 69 6e 74 61 63 74 20 61 6e 64 20 63 6f 6e 74 69  intact and conti
3c80: 6e 75 65 20 77 69 74 68 20 74 68 65 20 74 72 61  nue with the tra
3c90: 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 48 6f 77 65  nsaction.  ^Howe
3ca0: 76 65 72 2c 20 0a 64 65 70 65 6e 64 69 6e 67 20  ver, .depending 
3cb0: 6f 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  on the statement
3cc0: 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65 64   being evaluated
3cd0: 20 61 6e 64 20 74 68 65 20 70 6f 69 6e 74 20 61   and the point a
3ce0: 74 20 77 68 69 63 68 20 74 68 65 0a 65 72 72 6f  t which the.erro
3cf0: 72 20 6f 63 63 75 72 73 2c 20 69 74 20 6d 69 67  r occurs, it mig
3d00: 68 74 20 62 65 20 6e 65 63 65 73 73 61 72 79 20  ht be necessary 
3d10: 66 6f 72 20 53 51 4c 69 74 65 20 74 6f 20 72 6f  for SQLite to ro
3d20: 6c 6c 62 61 63 6b 20 61 6e 64 0a 63 61 6e 63 65  llback and.cance
3d30: 6c 20 74 68 65 20 65 6e 74 69 72 65 20 74 72 61  l the entire tra
3d40: 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 41 6e 20 61  nsaction.  ^An a
3d50: 70 70 6c 69 63 61 74 69 6f 6e 20 63 61 6e 20 74  pplication can t
3d60: 65 6c 6c 20 77 68 69 63 68 0a 63 6f 75 72 73 65  ell which.course
3d70: 20 6f 66 20 61 63 74 69 6f 6e 20 53 51 4c 69 74   of action SQLit
3d80: 65 20 74 6f 6f 6b 20 62 79 20 75 73 69 6e 67 20  e took by using 
3d90: 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f 67 65 74  the.[sqlite3_get
3da0: 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 29 5d 20 43  _autocommit()] C
3db0: 2d 6c 61 6e 67 75 61 67 65 20 69 6e 74 65 72 66  -language interf
3dc0: 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 74 20  ace.</p>..<p>It 
3dd0: 69 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 74  is recommended t
3de0: 68 61 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  hat applications
3df0: 20 72 65 73 70 6f 6e 64 20 74 6f 20 74 68 65 20   respond to the 
3e00: 65 72 72 6f 72 73 0a 6c 69 73 74 65 64 20 61 62  errors.listed ab
3e10: 6f 76 65 20 62 79 20 65 78 70 6c 69 63 69 74 6c  ove by explicitl
3e20: 79 20 69 73 73 75 69 6e 67 20 61 20 52 4f 4c 4c  y issuing a ROLL
3e30: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e  BACK command.  ^
3e40: 49 66 20 74 68 65 20 0a 74 72 61 6e 73 61 63 74  If the .transact
3e50: 69 6f 6e 20 68 61 73 20 61 6c 72 65 61 64 79 20  ion has already 
3e60: 62 65 65 6e 20 72 6f 6c 6c 65 64 20 62 61 63 6b  been rolled back
3e70: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 62   automatically.b
3e80: 79 20 74 68 65 20 65 72 72 6f 72 20 72 65 73 70  y the error resp
3e90: 6f 6e 73 65 2c 20 74 68 65 6e 20 74 68 65 20 52  onse, then the R
3ea0: 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20  OLLBACK command 
3eb0: 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61  will fail with a
3ec0: 6e 0a 65 72 72 6f 72 2c 20 62 75 74 20 6e 6f 20  n.error, but no 
3ed0: 68 61 72 6d 20 69 73 20 63 61 75 73 65 64 20 62  harm is caused b
3ee0: 79 20 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  y this.</p>..<p>
3ef0: 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20  Future versions 
3f00: 6f 66 20 53 51 4c 69 74 65 20 6d 61 79 20 65 78  of SQLite may ex
3f10: 74 65 6e 64 20 74 68 65 20 6c 69 73 74 20 6f 66  tend the list of
3f20: 20 65 72 72 6f 72 73 20 77 68 69 63 68 0a 6d 69   errors which.mi
3f30: 67 68 74 20 63 61 75 73 65 20 61 75 74 6f 6d 61  ght cause automa
3f40: 74 69 63 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  tic transaction 
3f50: 72 6f 6c 6c 62 61 63 6b 2e 20 20 46 75 74 75 72  rollback.  Futur
3f60: 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51  e versions of.SQ
3f70: 4c 69 74 65 20 6d 69 67 68 74 20 63 68 61 6e 67  Lite might chang
3f80: 65 20 74 68 65 20 65 72 72 6f 72 20 72 65 73 70  e the error resp
3f90: 6f 6e 73 65 2e 20 20 49 6e 20 70 61 72 74 69 63  onse.  In partic
3fa0: 75 6c 61 72 2c 20 77 65 20 6d 61 79 0a 63 68 6f  ular, we may.cho
3fb0: 6f 73 65 20 74 6f 20 73 69 6d 70 6c 69 66 79 20  ose to simplify 
3fc0: 74 68 65 20 69 6e 74 65 72 66 61 63 65 20 69 6e  the interface in
3fd0: 20 66 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73   future versions
3fe0: 20 6f 66 20 53 51 4c 69 74 65 20 62 79 0a 63 61   of SQLite by.ca
3ff0: 75 73 69 6e 67 20 74 68 65 20 65 72 72 6f 72 73  using the errors
4000: 20 61 62 6f 76 65 20 74 6f 20 66 6f 72 63 65 20   above to force 
4010: 61 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c  an unconditional
4020: 20 72 6f 6c 6c 62 61 63 6b 2e 3c 2f 70 3e 0a 0a   rollback.</p>..
4030: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
4040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4050: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4060: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4070: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4080: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 53  #####.Section {S
4090: 41 56 45 50 4f 49 4e 54 7d 20 73 61 76 65 70 6f  AVEPOINT} savepo
40a0: 69 6e 74 20 7b 53 41 56 45 50 4f 49 4e 54 20 52  int {SAVEPOINT R
40b0: 45 4c 45 41 53 45 7d 0a 0a 42 75 62 62 6c 65 44  ELEASE}..BubbleD
40c0: 69 61 67 72 61 6d 20 73 61 76 65 70 6f 69 6e 74  iagram savepoint
40d0: 2d 73 74 6d 74 0a 42 75 62 62 6c 65 44 69 61 67  -stmt.BubbleDiag
40e0: 72 61 6d 20 72 65 6c 65 61 73 65 2d 73 74 6d 74  ram release-stmt
40f0: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72  .BubbleDiagram r
4100: 6f 6c 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74  ollback-stmt.</t
4110: 63 6c 3e 0a 0a 3c 70 3e 20 5e 53 41 56 45 50 4f  cl>..<p> ^SAVEPO
4120: 49 4e 54 73 20 61 72 65 20 61 20 6d 65 74 68 6f  INTs are a metho
4130: 64 20 6f 66 20 63 72 65 61 74 69 6e 67 20 74 72  d of creating tr
4140: 61 6e 73 61 63 74 69 6f 6e 73 2c 20 73 69 6d 69  ansactions, simi
4150: 6c 61 72 20 74 6f 0a 5b 42 45 47 49 4e 5d 20 61  lar to.[BEGIN] a
4160: 6e 64 20 5b 43 4f 4d 4d 49 54 5d 2c 20 65 78 63  nd [COMMIT], exc
4170: 65 70 74 20 74 68 61 74 20 74 68 65 20 53 41 56  ept that the SAV
4180: 45 50 4f 49 4e 54 20 61 6e 64 20 52 45 4c 45 41  EPOINT and RELEA
4190: 53 45 20 63 6f 6d 6d 61 6e 64 73 0a 61 72 65 20  SE commands.are 
41a0: 6e 61 6d 65 64 20 61 6e 64 20 6d 61 79 20 62 65  named and may be
41b0: 20 6e 65 73 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70   nested.</p>..<p
41c0: 3e 20 5e 54 68 65 20 53 41 56 45 50 4f 49 4e 54  > ^The SAVEPOINT
41d0: 20 63 6f 6d 6d 61 6e 64 20 73 74 61 72 74 73 20   command starts 
41e0: 61 20 6e 65 77 20 74 72 61 6e 73 61 63 74 69 6f  a new transactio
41f0: 6e 20 77 69 74 68 20 61 20 6e 61 6d 65 2e 0a 5e  n with a name..^
4200: 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  The transaction 
4210: 6e 61 6d 65 73 20 6e 65 65 64 20 6e 6f 74 20 62  names need not b
4220: 65 20 75 6e 69 71 75 65 2e 0a 5e 28 41 20 53 41  e unique..^(A SA
4230: 56 45 50 4f 49 4e 54 20 63 61 6e 20 62 65 20 73  VEPOINT can be s
4240: 74 61 72 74 65 64 20 65 69 74 68 65 72 20 77 69  tarted either wi
4250: 74 68 69 6e 20 6f 72 20 6f 75 74 73 69 64 65 20  thin or outside 
4260: 6f 66 0a 61 20 5b 42 45 47 49 4e 5d 2e 2e 2e 5b  of.a [BEGIN]...[
4270: 43 4f 4d 4d 49 54 5d 2e 29 5e 20 20 5e 28 57 68  COMMIT].)^  ^(Wh
4280: 65 6e 20 61 20 53 41 56 45 50 4f 49 4e 54 20 69  en a SAVEPOINT i
4290: 73 20 74 68 65 20 6f 75 74 65 72 2d 6d 6f 73 74  s the outer-most
42a0: 20 73 61 76 65 70 6f 69 6e 74 0a 61 6e 64 20 69   savepoint.and i
42b0: 74 20 69 73 20 6e 6f 74 20 77 69 74 68 69 6e 20  t is not within 
42c0: 61 20 5b 42 45 47 49 4e 5d 2e 2e 2e 5b 43 4f 4d  a [BEGIN]...[COM
42d0: 4d 49 54 5d 20 74 68 65 6e 20 74 68 65 20 62 65  MIT] then the be
42e0: 68 61 76 69 6f 72 20 69 73 20 74 68 65 0a 73 61  havior is the.sa
42f0: 6d 65 20 61 73 20 42 45 47 49 4e 20 44 45 46 45  me as BEGIN DEFE
4300: 52 52 45 44 20 54 52 41 4e 53 41 43 54 49 4f 4e  RRED TRANSACTION
4310: 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  .)^</p>..<p>^The
4320: 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d   ROLLBACK TO com
4330: 6d 61 6e 64 20 72 65 76 65 72 74 73 20 74 68 65  mand reverts the
4340: 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 64 61   state of the da
4350: 74 61 62 61 73 65 20 62 61 63 6b 20 74 6f 20 77  tabase back to w
4360: 68 61 74 0a 69 74 20 77 61 73 20 6a 75 73 74 20  hat.it was just 
4370: 61 66 74 65 72 20 74 68 65 20 63 6f 72 72 65 73  after the corres
4380: 70 6f 6e 64 69 6e 67 20 53 41 56 45 50 4f 49 4e  ponding SAVEPOIN
4390: 54 2e 20 20 5e 4e 6f 74 65 20 74 68 61 74 20 75  T.  ^Note that u
43a0: 6e 6c 69 6b 65 20 74 68 61 74 0a 70 6c 61 69 6e  nlike that.plain
43b0: 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20 63 6f 6d 6d   [ROLLBACK] comm
43c0: 61 6e 64 20 28 77 69 74 68 6f 75 74 20 74 68 65  and (without the
43d0: 20 54 4f 20 6b 65 79 77 6f 72 64 29 20 74 68 65   TO keyword) the
43e0: 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d   ROLLBACK TO com
43f0: 6d 61 6e 64 0a 64 6f 65 73 20 6e 6f 74 20 63 61  mand.does not ca
4400: 6e 63 65 6c 20 74 68 65 20 74 72 61 6e 73 61 63  ncel the transac
4410: 74 69 6f 6e 2e 20 20 5e 49 6e 73 74 65 61 64 20  tion.  ^Instead 
4420: 6f 66 20 63 61 6e 63 65 6c 6c 69 6e 67 20 74 68  of cancelling th
4430: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 0a 74  e transaction,.t
4440: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63  he ROLLBACK TO c
4450: 6f 6d 6d 61 6e 64 20 72 65 73 74 61 72 74 73 20  ommand restarts 
4460: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
4470: 61 67 61 69 6e 20 61 74 20 74 68 65 20 62 65 67  again at the beg
4480: 69 6e 6e 69 6e 67 2e 0a 5e 41 6c 6c 20 69 6e 74  inning..^All int
4490: 65 72 76 65 6e 69 6e 67 20 53 41 56 45 50 4f 49  ervening SAVEPOI
44a0: 4e 54 73 20 61 72 65 20 63 61 6e 63 65 6c 6c 65  NTs are cancelle
44b0: 64 2c 20 68 6f 77 65 76 65 72 2e 3c 2f 70 3e 0a  d, however.</p>.
44c0: 0a 3c 70 3e 5e 54 68 65 20 52 45 4c 45 41 53 45  .<p>^The RELEASE
44d0: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6c 69 6b 65   command is like
44e0: 20 61 20 5b 43 4f 4d 4d 49 54 5d 20 66 6f 72 20   a [COMMIT] for 
44f0: 61 20 53 41 56 45 50 4f 49 4e 54 2e 0a 5e 54 68  a SAVEPOINT..^Th
4500: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
4510: 64 20 63 61 75 73 65 73 20 61 6c 6c 20 73 61 76  d causes all sav
4520: 65 70 6f 69 6e 74 73 20 62 61 63 6b 20 74 6f 20  epoints back to 
4530: 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68  and including th
4540: 65 20 0a 6d 6f 73 74 20 72 65 63 65 6e 74 20 73  e .most recent s
4550: 61 76 65 70 6f 69 6e 74 20 77 69 74 68 20 61 20  avepoint with a 
4560: 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 20 74 6f  matching name to
4570: 20 62 65 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d   be removed from
4580: 20 74 68 65 20 0a 74 72 61 6e 73 61 63 74 69 6f   the .transactio
4590: 6e 20 73 74 61 63 6b 2e 20 20 5e 54 68 65 20 52  n stack.  ^The R
45a0: 45 4c 45 41 53 45 20 6f 66 20 61 6e 20 69 6e 6e  ELEASE of an inn
45b0: 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 64  er transaction.d
45c0: 6f 65 73 20 6e 6f 74 20 63 61 75 73 65 20 61 6e  oes not cause an
45d0: 79 20 63 68 61 6e 67 65 73 20 74 6f 20 62 65 20  y changes to be 
45e0: 77 72 69 74 74 65 6e 20 74 6f 20 74 68 65 20 64  written to the d
45f0: 61 74 61 62 61 73 65 20 66 69 6c 65 3b 20 69 74  atabase file; it
4600: 20 6d 65 72 65 6c 79 0a 72 65 6d 6f 76 65 73 20   merely.removes 
4610: 73 61 76 65 70 6f 69 6e 74 73 20 66 72 6f 6d 20  savepoints from 
4620: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
4630: 73 74 61 63 6b 20 73 75 63 68 20 74 68 61 74 20  stack such that 
4640: 69 74 20 69 73 0a 6e 6f 20 6c 6f 6e 67 65 72 20  it is.no longer 
4650: 70 6f 73 73 69 62 6c 65 20 74 6f 20 52 4f 4c 4c  possible to ROLL
4660: 42 41 43 4b 20 54 4f 20 74 68 6f 73 65 20 73 61  BACK TO those sa
4670: 76 65 70 6f 69 6e 74 73 2e 0a 5e 49 66 20 61 20  vepoints..^If a 
4680: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
4690: 72 65 6c 65 61 73 65 73 20 74 68 65 20 6f 75 74  releases the out
46a0: 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74  ermost savepoint
46b0: 2c 20 73 6f 0a 74 68 61 74 20 74 68 65 20 74 72  , so.that the tr
46c0: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20  ansaction stack 
46d0: 62 65 63 6f 6d 65 73 20 65 6d 70 74 79 2c 20 74  becomes empty, t
46e0: 68 65 6e 20 52 45 4c 45 41 53 45 20 69 73 20 74  hen RELEASE is t
46f0: 68 65 20 73 61 6d 65 0a 61 73 20 5b 43 4f 4d 4d  he same.as [COMM
4700: 49 54 5d 2e 0a 5e 54 68 65 20 5b 43 4f 4d 4d 49  IT]..^The [COMMI
4710: 54 5d 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 62  T] command may b
4720: 65 20 75 73 65 64 20 74 6f 20 72 65 6c 65 61 73  e used to releas
4730: 65 20 61 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73  e all savepoints
4740: 20 61 6e 64 0a 63 6f 6d 6d 69 74 20 74 68 65 20   and.commit the 
4750: 74 72 61 6e 73 61 63 74 69 6f 6e 20 65 76 65 6e  transaction even
4760: 20 69 66 20 74 68 65 20 74 72 61 6e 73 61 63 74   if the transact
4770: 69 6f 6e 20 77 61 73 20 6f 72 69 67 69 6e 61 6c  ion was original
4780: 6c 79 20 73 74 61 72 74 65 64 0a 62 79 20 61 20  ly started.by a 
4790: 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e  SAVEPOINT comman
47a0: 64 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 5b  d instead of a [
47b0: 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64 2e 3c  BEGIN] command.<
47c0: 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  /p>..<p>^If the 
47d0: 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 20 69  savepoint-name i
47e0: 6e 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  n a RELEASE comm
47f0: 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74  and does not mat
4800: 63 68 20 61 6e 79 0a 73 61 76 65 70 6f 69 6e 74  ch any.savepoint
4810: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68   currently in th
4820: 65 20 74 72 61 6e 61 63 74 69 6f 6e 20 73 74 61  e tranaction sta
4830: 63 6b 2c 20 74 68 65 6e 20 6e 6f 20 73 61 76 65  ck, then no save
4840: 70 6f 69 6e 74 73 20 61 72 65 0a 72 65 6c 65 61  points are.relea
4850: 73 65 64 2c 20 74 68 65 20 64 61 74 61 62 61 73  sed, the databas
4860: 65 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2c 20  e is unchanged, 
4870: 61 6e 64 20 74 68 65 20 52 45 4c 45 41 53 45 20  and the RELEASE 
4880: 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72 6e 73 0a  command returns.
4890: 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c  an error.</p>..<
48a0: 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 61 6e 20  p>^Note that an 
48b0: 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74 69 6f  inner transactio
48c0: 6e 20 6d 69 67 68 74 20 63 6f 6d 6d 69 74 20 28  n might commit (
48d0: 75 73 69 6e 67 20 74 68 65 20 52 45 4c 45 41 53  using the RELEAS
48e0: 45 20 63 6f 6d 6d 61 6e 64 29 0a 62 75 74 20 74  E command).but t
48f0: 68 65 6e 20 6c 61 74 65 72 20 68 61 76 65 20 69  hen later have i
4900: 74 73 20 77 6f 72 6b 20 75 6e 64 6f 6e 65 20 62  ts work undone b
4910: 79 20 61 20 52 4f 4c 4c 42 41 43 4b 20 69 6e 20  y a ROLLBACK in 
4920: 61 6e 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63  an outer transac
4930: 74 69 6f 6e 2e 0a 5e 41 20 70 6f 77 65 72 20 66  tion..^A power f
4940: 61 69 6c 75 72 65 20 6f 72 20 70 72 6f 67 72 61  ailure or progra
4950: 6d 20 63 72 61 73 68 20 6f 72 20 4f 53 20 63 72  m crash or OS cr
4960: 61 73 68 20 77 69 6c 6c 20 63 61 75 73 65 20 74  ash will cause t
4970: 68 65 20 6f 75 74 65 72 2d 6d 6f 73 74 0a 74 72  he outer-most.tr
4980: 61 6e 73 61 63 74 69 6f 6e 20 74 6f 20 72 6f 6c  ansaction to rol
4990: 6c 62 61 63 6b 2c 20 75 6e 64 6f 69 6e 67 20 61  lback, undoing a
49a0: 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74 20  ll changes that 
49b0: 68 61 76 65 20 6f 63 63 75 72 72 65 64 20 77 69  have occurred wi
49c0: 74 68 69 6e 0a 74 68 61 74 20 6f 75 74 65 72 20  thin.that outer 
49d0: 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 65 76 65  transaction, eve
49e0: 6e 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 68  n changes that h
49f0: 61 76 65 20 73 75 70 70 6f 73 65 64 6c 79 20 62  ave supposedly b
4a00: 65 65 6e 20 22 63 6f 6d 6d 69 74 74 65 64 22 0a  een "committed".
4a10: 62 79 20 74 68 65 20 52 45 4c 45 41 53 45 20 63  by the RELEASE c
4a20: 6f 6d 6d 61 6e 64 2e 20 20 5e 43 6f 6e 74 65 6e  ommand.  ^Conten
4a30: 74 20 69 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c  t is not actuall
4a40: 79 20 63 6f 6d 6d 69 74 74 65 64 20 6f 6e 20 74  y committed on t
4a50: 68 65 20 64 69 73 6b 20 0a 75 6e 74 69 6c 20 74  he disk .until t
4a60: 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 74 72 61  he outermost tra
4a70: 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 73  nsaction commits
4a80: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 72 65 20  .</p>..<p>There 
4a90: 61 72 65 20 73 65 76 65 72 61 6c 20 77 61 79 73  are several ways
4aa0: 20 6f 66 20 74 68 69 6e 6b 69 6e 67 20 61 62 6f   of thinking abo
4ab0: 75 74 20 74 68 65 20 52 45 4c 45 41 53 45 20 63  ut the RELEASE c
4ac0: 6f 6d 6d 61 6e 64 3a 3c 2f 70 3e 0a 0a 3c 75 6c  ommand:</p>..<ul
4ad0: 3e 0a 3c 6c 69 3e 3c 70 3e 0a 53 6f 6d 65 20 70  >.<li><p>.Some p
4ae0: 65 6f 70 6c 65 20 76 69 65 77 20 52 45 4c 45 41  eople view RELEA
4af0: 53 45 20 61 73 20 74 68 65 20 65 71 75 69 76 61  SE as the equiva
4b00: 6c 65 6e 74 20 6f 66 20 43 4f 4d 4d 49 54 20 66  lent of COMMIT f
4b10: 6f 72 20 61 20 53 41 56 45 50 4f 49 4e 54 2e 0a  or a SAVEPOINT..
4b20: 54 68 69 73 20 69 73 20 61 6e 20 61 63 63 65 70  This is an accep
4b30: 74 61 62 6c 65 20 70 6f 69 6e 74 20 6f 66 20 76  table point of v
4b40: 69 65 77 20 61 73 20 6c 6f 6e 67 20 61 73 20 6f  iew as long as o
4b50: 6e 65 20 72 65 6d 65 6d 62 65 72 73 20 74 68 61  ne remembers tha
4b60: 74 20 74 68 65 0a 63 68 61 6e 67 65 73 20 63 6f  t the.changes co
4b70: 6d 6d 69 74 74 65 64 20 62 79 20 61 6e 20 69 6e  mmitted by an in
4b80: 6e 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ner transaction 
4b90: 6d 69 67 68 74 20 6c 61 74 65 72 20 62 65 20 75  might later be u
4ba0: 6e 64 6f 6e 65 20 62 79 20 61 0a 72 6f 6c 6c 62  ndone by a.rollb
4bb0: 61 63 6b 20 69 6e 20 61 6e 20 6f 75 74 65 72 20  ack in an outer 
4bc0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e  transaction.</p>
4bd0: 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 41  </li>..<li><p>.A
4be0: 6e 6f 74 68 65 72 20 76 69 65 77 20 6f 66 20 52  nother view of R
4bf0: 45 4c 45 41 53 45 20 69 73 20 74 68 61 74 20 69  ELEASE is that i
4c00: 74 20 6d 65 72 67 65 73 20 61 20 6e 61 6d 65 64  t merges a named
4c10: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e 74   transaction int
4c20: 6f 20 69 74 73 0a 70 61 72 65 6e 74 20 74 72 61  o its.parent tra
4c30: 6e 73 61 63 74 69 6f 6e 2c 20 73 6f 20 74 68 61  nsaction, so tha
4c40: 74 20 74 68 65 20 6e 61 6d 65 64 20 74 72 61 6e  t the named tran
4c50: 73 61 63 74 69 6f 6e 20 61 6e 64 20 69 74 73 20  saction and its 
4c60: 70 61 72 65 6e 74 20 62 65 63 6f 6d 65 0a 74 68  parent become.th
4c70: 65 20 73 61 6d 65 20 74 72 61 6e 73 61 63 74 69  e same transacti
4c80: 6f 6e 2e 20 20 41 66 74 65 72 20 52 45 4c 45 41  on.  After RELEA
4c90: 53 45 2c 20 74 68 65 20 6e 61 6d 65 64 20 74 72  SE, the named tr
4ca0: 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 69 74  ansaction and it
4cb0: 73 20 70 61 72 65 6e 74 0a 77 69 6c 6c 20 63 6f  s parent.will co
4cc0: 6d 6d 69 74 20 6f 72 20 72 6f 6c 6c 62 61 63 6b  mmit or rollback
4cd0: 20 74 6f 67 65 74 68 65 72 2c 20 77 68 61 74 65   together, whate
4ce0: 76 65 72 20 74 68 65 69 72 20 66 61 74 65 20 6d  ver their fate m
4cf0: 61 79 20 62 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e  ay be..</p></li>
4d00: 0a 0a 3c 6c 69 3e 3c 70 3e 0a 4f 6e 65 20 63 61  ..<li><p>.One ca
4d10: 6e 20 61 6c 73 6f 20 74 68 69 6e 6b 20 6f 66 20  n also think of 
4d20: 73 61 76 65 70 6f 69 6e 74 73 20 61 73 0a 22 6d  savepoints as."m
4d30: 61 72 6b 73 22 20 69 6e 20 74 68 65 20 74 72 61  arks" in the tra
4d40: 6e 73 61 63 74 69 6f 6e 20 74 69 6d 65 6c 69 6e  nsaction timelin
4d50: 65 2e 20 20 49 6e 20 74 68 69 73 20 76 69 65 77  e.  In this view
4d60: 2c 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20  , the SAVEPOINT 
4d70: 63 6f 6d 6d 61 6e 64 0a 63 72 65 61 74 65 73 20  command.creates 
4d80: 61 20 6e 65 77 20 6d 61 72 6b 2c 20 74 68 65 20  a new mark, the 
4d90: 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d  ROLLBACK TO comm
4da0: 61 6e 64 20 72 65 77 69 6e 64 73 20 74 68 65 20  and rewinds the 
4db0: 74 69 6d 65 6c 69 6e 65 20 62 61 63 6b 0a 74 6f  timeline back.to
4dc0: 20 61 20 70 6f 69 6e 74 20 6a 75 73 74 20 61 66   a point just af
4dd0: 74 65 72 20 74 68 65 20 6e 61 6d 65 64 20 6d 61  ter the named ma
4de0: 72 6b 2c 20 61 6e 64 20 74 68 65 20 52 45 4c 45  rk, and the RELE
4df0: 41 53 45 20 63 6f 6d 6d 61 6e 64 0a 65 72 61 73  ASE command.eras
4e00: 65 73 20 6d 61 72 6b 73 20 66 72 6f 6d 20 74 68  es marks from th
4e10: 65 20 74 69 6d 65 6c 69 6e 65 20 77 69 74 68 6f  e timeline witho
4e20: 75 74 20 61 63 74 75 61 6c 6c 79 20 6d 61 6b 69  ut actually maki
4e30: 6e 67 20 61 6e 79 0a 63 68 61 6e 67 65 73 20 74  ng any.changes t
4e40: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a  o the database..
4e50: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a  </p></li>.</ul>.
4e60: 0a 0a 0a 3c 68 33 3e 54 72 61 6e 73 61 63 74 69  ...<h3>Transacti
4e70: 6f 6e 20 4e 65 73 74 69 6e 67 20 52 75 6c 65 73  on Nesting Rules
4e80: 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6c  </h3>..<p>^The l
4e90: 61 73 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ast transaction 
4ea0: 73 74 61 72 74 65 64 20 77 69 6c 6c 20 62 65 20  started will be 
4eb0: 74 68 65 20 66 69 72 73 74 0a 74 72 61 6e 73 61  the first.transa
4ec0: 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 74 65 64 20  ction committed 
4ed0: 6f 72 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 3c  or rolled back.<
4ee0: 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 42 45  /p>..<p>^The [BE
4ef0: 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64 20 6f 6e 6c  GIN] command onl
4f00: 79 20 77 6f 72 6b 73 20 69 66 20 74 68 65 20 74  y works if the t
4f10: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b  ransaction stack
4f20: 20 69 73 20 65 6d 70 74 79 2c 20 6f 72 0a 69 6e   is empty, or.in
4f30: 20 6f 74 68 65 72 20 77 6f 72 64 73 20 69 66 20   other words if 
4f40: 74 68 65 72 65 20 61 72 65 20 6e 6f 20 70 65 6e  there are no pen
4f50: 64 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e  ding transaction
4f60: 73 2e 20 20 5e 49 66 20 74 68 65 20 74 72 61 6e  s.  ^If the tran
4f70: 73 61 63 74 69 6f 6e 0a 73 74 61 63 6b 20 69 73  saction.stack is
4f80: 20 6e 6f 74 20 65 6d 70 74 79 20 77 68 65 6e 20   not empty when 
4f90: 74 68 65 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d  the [BEGIN] comm
4fa0: 61 6e 64 20 69 73 20 69 6e 76 6f 6b 65 64 2c 20  and is invoked, 
4fb0: 74 68 65 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64  then the command
4fc0: 0a 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65  .fails with an e
4fd0: 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  rror.</p>..<p>^T
4fe0: 68 65 20 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d  he [COMMIT] comm
4ff0: 61 6e 64 20 63 6f 6d 6d 69 74 73 20 61 6c 6c 20  and commits all 
5000: 6f 75 74 73 74 61 6e 64 69 6e 67 20 74 72 61 6e  outstanding tran
5010: 73 61 63 74 69 6f 6e 73 20 61 6e 64 20 6c 65 61  sactions and lea
5020: 76 65 73 0a 74 68 65 20 74 72 61 6e 73 61 63 74  ves.the transact
5030: 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70 74 79 2e  ion stack empty.
5040: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45  </p>..<p>^The RE
5050: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 73 74  LEASE command st
5060: 61 72 74 73 20 77 69 74 68 20 74 68 65 20 6d 6f  arts with the mo
5070: 73 74 20 72 65 63 65 6e 74 20 61 64 64 69 74 69  st recent additi
5080: 6f 6e 20 74 6f 20 74 68 65 0a 74 72 61 6e 73 61  on to the.transa
5090: 63 74 69 6f 6e 20 73 74 61 63 6b 20 61 6e 64 20  ction stack and 
50a0: 72 65 6c 65 61 73 65 73 20 73 61 76 65 70 6f 69  releases savepoi
50b0: 6e 74 73 20 62 61 63 6b 77 61 72 64 73 20 0a 69  nts backwards .i
50c0: 6e 20 74 69 6d 65 20 75 6e 74 69 6c 20 69 74 20  n time until it 
50d0: 72 65 6c 65 61 73 65 73 20 61 20 73 61 76 65 70  releases a savep
50e0: 6f 69 6e 74 20 77 69 74 68 20 61 20 6d 61 74 63  oint with a matc
50f0: 68 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 2d 6e  hing savepoint-n
5100: 61 6d 65 2e 0a 5e 50 72 69 6f 72 20 73 61 76 65  ame..^Prior save
5110: 70 6f 69 6e 74 73 2c 20 65 76 65 6e 20 73 61 76  points, even sav
5120: 65 70 6f 69 6e 74 73 20 77 69 74 68 20 6d 61 74  epoints with mat
5130: 63 68 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 2d  ching savepoint-
5140: 6e 61 6d 65 73 2c 20 61 72 65 0a 75 6e 63 68 61  names, are.uncha
5150: 6e 67 65 64 2e 0a 5e 49 66 20 74 68 65 20 52 45  nged..^If the RE
5160: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 63 61  LEASE command ca
5170: 75 73 65 73 20 74 68 65 0a 74 72 61 6e 73 61 63  uses the.transac
5180: 74 69 6f 6e 20 73 74 61 63 6b 20 74 6f 20 62 65  tion stack to be
5190: 63 6f 6d 65 20 65 6d 70 74 79 20 28 69 66 20 74  come empty (if t
51a0: 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  he RELEASE comma
51b0: 6e 64 20 72 65 6c 65 61 73 65 73 20 74 68 65 0a  nd releases the.
51c0: 6f 75 74 65 72 6d 6f 73 74 20 74 72 61 6e 73 61  outermost transa
51d0: 63 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 73  ction from the s
51e0: 74 61 63 6b 29 20 74 68 65 6e 20 74 68 65 20 74  tack) then the t
51f0: 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69  ransaction commi
5200: 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ts.</p>..<p>^The
5210: 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20 63 6f 6d 6d   [ROLLBACK] comm
5220: 61 6e 64 20 77 69 74 68 6f 75 74 20 61 20 54 4f  and without a TO
5230: 20 63 6c 61 75 73 65 20 72 6f 6c 6c 73 20 62 61   clause rolls ba
5240: 63 6b 73 20 61 6c 6c 20 74 72 61 6e 73 61 63 74  cks all transact
5250: 69 6f 6e 73 0a 61 6e 64 20 6c 65 61 76 65 73 20  ions.and leaves 
5260: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
5270: 73 74 61 63 6b 20 65 6d 70 74 79 2e 3c 2f 70 3e  stack empty.</p>
5280: 0a 0a 3c 70 3e 5e 54 68 65 20 52 4f 4c 4c 42 41  ..<p>^The ROLLBA
5290: 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 20  CK command with 
52a0: 61 20 54 4f 20 63 6c 61 75 73 65 20 72 6f 6c 6c  a TO clause roll
52b0: 73 20 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69  s back transacti
52c0: 6f 6e 73 20 67 6f 69 6e 67 0a 62 61 63 6b 77 61  ons going.backwa
52d0: 72 64 73 20 69 6e 20 74 69 6d 65 20 62 61 63 6b  rds in time back
52e0: 20 74 6f 20 74 68 65 20 6d 6f 73 74 20 72 65 63   to the most rec
52f0: 65 6e 74 20 53 41 56 45 50 4f 49 4e 54 20 77 69  ent SAVEPOINT wi
5300: 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e 61  th a matching na
5310: 6d 65 2e 0a 5e 54 68 65 20 53 41 56 45 50 4f 49  me..^The SAVEPOI
5320: 4e 54 20 77 69 74 68 20 74 68 65 20 6d 61 74 63  NT with the matc
5330: 68 69 6e 67 20 6e 61 6d 65 20 72 65 6d 61 69 6e  hing name remain
5340: 73 20 6f 6e 20 74 68 65 20 74 72 61 6e 73 61 63  s on the transac
5350: 74 69 6f 6e 20 73 74 61 63 6b 2c 0a 62 75 74 20  tion stack,.but 
5360: 61 6c 6c 20 64 61 74 61 62 61 73 65 20 63 68 61  all database cha
5370: 6e 67 65 73 20 74 68 61 74 20 6f 63 63 75 72 72  nges that occurr
5380: 65 64 20 61 66 74 65 72 20 74 68 61 74 20 53 41  ed after that SA
5390: 56 45 50 4f 49 4e 54 20 77 61 73 20 63 72 65 61  VEPOINT was crea
53a0: 74 65 64 0a 61 72 65 20 72 6f 6c 6c 65 64 20 62  ted.are rolled b
53b0: 61 63 6b 2e 20 20 5e 49 66 20 74 68 65 20 73 61  ack.  ^If the sa
53c0: 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 20 69 6e 20  vepoint-name in 
53d0: 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f  a ROLLBACK TO co
53e0: 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74 0a 6d  mmand does not.m
53f0: 61 74 63 68 20 61 6e 79 20 53 41 56 45 50 4f 49  atch any SAVEPOI
5400: 4e 54 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 2c  NT on the stack,
5410: 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41   then the ROLLBA
5420: 43 4b 20 63 6f 6d 6d 61 6e 64 20 66 61 69 6c 73  CK command fails
5430: 20 77 69 74 68 20 61 6e 0a 65 72 72 6f 72 20 61   with an.error a
5440: 6e 64 20 6c 65 61 76 65 73 20 74 68 65 20 73 74  nd leaves the st
5450: 61 74 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ate of the datab
5460: 61 73 65 20 75 6e 63 68 61 6e 67 65 64 2e 3c 2f  ase unchanged.</
5470: 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
5480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
54a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
54b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
54c0: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
54d0: 6e 20 63 6f 6d 6d 65 6e 74 20 63 6f 6d 6d 65 6e  n comment commen
54e0: 74 20 7b 63 6f 6d 6d 65 6e 74 20 2a 63 6f 6d 6d  t {comment *comm
54f0: 65 6e 74 73 7d 0a 0a 42 75 62 62 6c 65 44 69 61  ents}..BubbleDia
5500: 67 72 61 6d 20 63 6f 6d 6d 65 6e 74 2d 73 79 6e  gram comment-syn
5510: 74 61 78 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tax.</tcl>..<p>^
5520: 43 6f 6d 6d 65 6e 74 73 20 61 72 65 20 6e 6f 74  Comments are not
5530: 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2c 20 62   SQL commands, b
5540: 75 74 20 63 61 6e 20 6f 63 63 75 72 20 77 69 74  ut can occur wit
5550: 68 69 6e 20 74 68 65 20 74 65 78 74 20 6f 66 0a  hin the text of.
5560: 53 51 4c 20 71 75 65 72 69 65 73 20 70 61 73 73  SQL queries pass
5570: 65 64 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 70  ed to [sqlite3_p
5580: 72 65 70 61 72 65 5f 76 32 28 29 5d 20 61 6e 64  repare_v2()] and
5590: 20 72 65 6c 61 74 65 64 20 69 6e 74 65 72 66 61   related interfa
55a0: 63 65 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 61  ces..^Comments a
55b0: 72 65 20 74 72 65 61 74 65 64 20 61 73 20 77 68  re treated as wh
55c0: 69 74 65 73 70 61 63 65 20 62 79 20 74 68 65 20  itespace by the 
55d0: 70 61 72 73 65 72 2e 0a 5e 43 6f 6d 6d 65 6e 74  parser..^Comment
55e0: 73 20 63 61 6e 20 62 65 67 69 6e 20 61 6e 79 77  s can begin anyw
55f0: 68 65 72 65 20 77 68 69 74 65 73 70 61 63 65 20  here whitespace 
5600: 0a 63 61 6e 20 62 65 20 66 6f 75 6e 64 2c 20 69  .can be found, i
5610: 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20  ncluding inside 
5620: 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74  expressions that
5630: 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c   span multiple l
5640: 69 6e 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ines..</p>..<p>^
5650: 53 51 4c 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67  SQL comments beg
5660: 69 6e 20 77 69 74 68 20 74 77 6f 20 63 6f 6e 73  in with two cons
5670: 65 63 75 74 69 76 65 20 22 2d 22 20 63 68 61 72  ecutive "-" char
5680: 61 63 74 65 72 73 20 28 41 53 43 49 49 20 30 78  acters (ASCII 0x
5690: 32 64 29 0a 61 6e 64 20 65 78 74 65 6e 64 20 75  2d).and extend u
56a0: 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69  p to and includi
56b0: 6e 67 20 74 68 65 20 6e 65 78 74 20 6e 65 77 6c  ng the next newl
56c0: 69 6e 65 20 63 68 61 72 61 63 74 65 72 20 28 41  ine character (A
56d0: 53 43 49 49 20 30 78 30 61 29 0a 6f 72 20 75 6e  SCII 0x0a).or un
56e0: 74 69 6c 20 74 68 65 20 65 6e 64 20 6f 66 20 69  til the end of i
56f0: 6e 70 75 74 2c 20 77 68 69 63 68 65 76 65 72 20  nput, whichever 
5700: 63 6f 6d 65 73 20 66 69 72 73 74 2e 3c 2f 70 3e  comes first.</p>
5710: 0a 0a 3c 70 3e 5e 43 2d 73 74 79 6c 65 20 63 6f  ..<p>^C-style co
5720: 6d 6d 65 6e 74 73 20 62 65 67 69 6e 0a 77 69 74  mments begin.wit
5730: 68 20 22 2f 2a 22 20 61 6e 64 20 65 78 74 65 6e  h "/*" and exten
5740: 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c  d up to and incl
5750: 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20 22  uding the next "
5760: 2a 2f 22 20 63 68 61 72 61 63 74 65 72 20 70 61  */" character pa
5770: 69 72 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65 20  ir.or until the 
5780: 65 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20 77 68  end of input, wh
5790: 69 63 68 65 76 65 72 20 63 6f 6d 65 73 20 66 69  ichever comes fi
57a0: 72 73 74 2e 20 20 5e 43 2d 73 74 79 6c 65 20 63  rst.  ^C-style c
57b0: 6f 6d 6d 65 6e 74 73 0a 63 61 6e 20 73 70 61 6e  omments.can span
57c0: 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73 2e   multiple lines.
57d0: 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65   </p>..<p>^Comme
57e0: 6e 74 73 20 63 61 6e 20 61 70 70 65 61 72 20 61  nts can appear a
57f0: 6e 79 77 68 65 72 65 20 77 68 69 74 65 73 70 61  nywhere whitespa
5800: 63 65 20 63 61 6e 20 6f 63 63 75 72 2c 0a 69 6e  ce can occur,.in
5810: 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20 65  cluding inside e
5820: 78 70 72 65 73 73 69 6f 6e 73 20 61 6e 64 20 69  xpressions and i
5830: 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20  n the middle of 
5840: 6f 74 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d  other SQL statem
5850: 65 6e 74 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20  ents..^Comments 
5860: 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 0a 3c 2f 70  do not nest..</p
5870: 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  >...<tcl>.######
5880: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5890: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
58a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
58b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
58c0: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
58d0: 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20   {CREATE INDEX} 
58e0: 63 72 65 61 74 65 69 6e 64 65 78 20 7b 7b 43 52  createindex {{CR
58f0: 45 41 54 45 20 49 4e 44 45 58 7d 7d 0a 0a 42 75  EATE INDEX}}..Bu
5900: 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61  bbleDiagram crea
5910: 74 65 2d 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a  te-index-stmt 1.
5920: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 69 6e  BubbleDiagram in
5930: 64 65 78 65 64 2d 63 6f 6c 75 6d 6e 0a 3c 2f 74  dexed-column.</t
5940: 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45  cl>..<p>^The CRE
5950: 41 54 45 20 49 4e 44 45 58 20 63 6f 6d 6d 61 6e  ATE INDEX comman
5960: 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68  d consists of th
5970: 65 20 6b 65 79 77 6f 72 64 73 20 22 43 52 45 41  e keywords "CREA
5980: 54 45 20 49 4e 44 45 58 22 20 66 6f 6c 6c 6f 77  TE INDEX" follow
5990: 65 64 0a 62 79 20 74 68 65 20 6e 61 6d 65 20 6f  ed.by the name o
59a0: 66 20 74 68 65 20 6e 65 77 20 69 6e 64 65 78 2c  f the new index,
59b0: 20 74 68 65 20 6b 65 79 77 6f 72 64 20 22 4f 4e   the keyword "ON
59c0: 22 2c 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  ", the name of a
59d0: 20 70 72 65 76 69 6f 75 73 6c 79 0a 63 72 65 61   previously.crea
59e0: 74 65 64 20 74 61 62 6c 65 20 74 68 61 74 20 69  ted table that i
59f0: 73 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 2c  s to be indexed,
5a00: 20 61 6e 64 20 61 20 70 61 72 65 6e 74 68 65 73   and a parenthes
5a10: 69 7a 65 64 20 6c 69 73 74 20 6f 66 20 6e 61 6d  ized list of nam
5a20: 65 73 20 6f 66 0a 63 6f 6c 75 6d 6e 73 20 69 6e  es of.columns in
5a30: 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
5a40: 61 72 65 20 75 73 65 64 20 66 6f 72 20 74 68 65  are used for the
5a50: 20 69 6e 64 65 78 20 6b 65 79 2e 3c 2f 70 3e 0a   index key.</p>.
5a60: 0a 3c 70 3e 5e 45 61 63 68 20 63 6f 6c 75 6d 6e  .<p>^Each column
5a70: 20 6e 61 6d 65 20 63 61 6e 20 62 65 20 66 6f 6c   name can be fol
5a80: 6c 6f 77 65 64 20 62 79 20 6f 6e 65 20 6f 66 20  lowed by one of 
5a90: 74 68 65 20 22 41 53 43 22 20 6f 72 20 22 44 45  the "ASC" or "DE
5aa0: 53 43 22 20 6b 65 79 77 6f 72 64 73 0a 74 6f 20  SC" keywords.to 
5ab0: 69 6e 64 69 63 61 74 65 20 73 6f 72 74 20 6f 72  indicate sort or
5ac0: 64 65 72 2e 20 20 5e 54 68 65 20 73 6f 72 74 20  der.  ^The sort 
5ad0: 6f 72 64 65 72 20 6d 61 79 20 6f 72 20 6d 61 79  order may or may
5ae0: 20 6e 6f 74 20 62 65 20 69 67 6e 6f 72 65 64 20   not be ignored 
5af0: 64 65 70 65 6e 64 69 6e 67 0a 6f 6e 20 74 68 65  depending.on the
5b00: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66   database file f
5b10: 6f 72 6d 61 74 2e 20 20 5e 54 68 65 20 22 6c 65  ormat.  ^The "le
5b20: 67 61 63 79 22 20 66 69 6c 65 20 66 6f 72 6d 61  gacy" file forma
5b30: 74 20 69 67 6e 6f 72 65 73 20 69 6e 64 65 78 0a  t ignores index.
5b40: 73 6f 72 74 20 6f 72 64 65 72 2e 20 20 5e 54 68  sort order.  ^Th
5b50: 65 20 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64  e descending ind
5b60: 65 78 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 74  ex file format t
5b70: 61 6b 65 73 20 69 6e 64 65 78 20 73 6f 72 74 20  akes index sort 
5b80: 6f 72 64 65 72 0a 69 6e 74 6f 20 61 63 63 6f 75  order.into accou
5b90: 6e 74 2e 20 20 5e 28 4f 6e 6c 79 20 63 6f 70 69  nt.  ^(Only copi
5ba0: 65 73 20 6f 66 20 53 51 4c 69 74 65 20 6e 65 77  es of SQLite new
5bb0: 65 72 20 74 68 61 6e 20 5b 76 65 72 73 69 6f 6e  er than [version
5bc0: 20 33 2e 33 2e 30 5d 20 0a 28 72 65 6c 65 61 73   3.3.0] .(releas
5bd0: 65 64 20 6f 6e 20 32 30 30 36 2d 30 31 2d 31 30  ed on 2006-01-10
5be0: 29 20 61 72 65 20 61 62 6c 65 20 74 6f 20 75 6e  ) are able to un
5bf0: 64 65 72 73 74 61 6e 64 20 74 68 65 20 6e 65 77  derstand the new
5c00: 65 72 20 64 65 73 63 65 6e 64 69 6e 67 0a 69 6e  er descending.in
5c10: 64 65 78 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  dex file format 
5c20: 61 6e 64 20 73 6f 20 66 6f 72 20 63 6f 6d 70 61  and so for compa
5c30: 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 6f 6c  tibility with ol
5c40: 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a  der versions of.
5c50: 53 51 4c 69 74 65 2c 20 74 68 65 20 6c 65 67 61  SQLite, the lega
5c60: 63 79 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 69  cy file format i
5c70: 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 64  s generated by d
5c80: 65 66 61 75 6c 74 2e 29 5e 20 20 5e 55 73 65 20  efault.)^  ^Use 
5c90: 74 68 65 0a 5b 6c 65 67 61 63 79 5f 66 69 6c 65  the.[legacy_file
5ca0: 5f 66 6f 72 6d 61 74 5d 20 70 72 61 67 6d 61 20  _format] pragma 
5cb0: 74 6f 20 6d 6f 64 69 66 79 20 74 68 69 73 20 62  to modify this b
5cc0: 65 68 61 76 69 6f 72 20 61 6e 64 20 67 65 6e 65  ehavior and gene
5cd0: 72 61 74 65 0a 64 61 74 61 62 61 73 65 73 20 74  rate.databases t
5ce0: 68 61 74 20 75 73 65 20 74 68 65 20 6e 65 77 65  hat use the newe
5cf0: 72 20 66 69 6c 65 20 66 6f 72 6d 61 74 2e 20 20  r file format.  
5d00: 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20  Future versions 
5d10: 6f 66 20 53 51 4c 69 74 65 0a 6d 61 79 20 62 65  of SQLite.may be
5d20: 67 69 6e 20 74 6f 20 67 65 6e 65 72 61 74 65 20  gin to generate 
5d30: 74 68 65 20 6e 65 77 65 72 20 66 69 6c 65 20 66  the newer file f
5d40: 6f 72 6d 61 74 20 62 79 20 64 65 66 61 75 6c 74  ormat by default
5d50: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43  .</p>..<p>^The C
5d60: 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 6f 70  OLLATE clause op
5d70: 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 69  tionally followi
5d80: 6e 67 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6e  ng each column n
5d90: 61 6d 65 20 64 65 66 69 6e 65 73 20 61 0a 63 6f  ame defines a.co
5da0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
5db0: 20 75 73 65 64 20 66 6f 72 20 74 65 78 74 20 65   used for text e
5dc0: 6e 74 72 69 65 73 20 69 6e 20 74 68 61 74 20 63  ntries in that c
5dd0: 6f 6c 75 6d 6e 2e 0a 5e 54 68 65 20 64 65 66 61  olumn..^The defa
5de0: 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 73 65  ult collating.se
5df0: 71 75 65 6e 63 65 20 69 73 20 74 68 65 20 63 6f  quence is the co
5e00: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
5e10: 20 64 65 66 69 6e 65 64 20 66 6f 72 20 74 68 61   defined for tha
5e20: 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 0a  t column in the.
5e30: 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73  [CREATE TABLE] s
5e40: 74 61 74 65 6d 65 6e 74 2e 20 20 5e 4f 72 20 69  tatement.  ^Or i
5e50: 66 20 6e 6f 20 63 6f 6c 6c 61 74 69 6e 67 20 73  f no collating s
5e60: 65 71 75 65 6e 63 65 20 69 73 20 6f 74 68 65 72  equence is other
5e70: 77 69 73 65 20 64 65 66 69 6e 65 64 2c 0a 74 68  wise defined,.th
5e80: 65 20 62 75 69 6c 74 2d 69 6e 20 42 49 4e 41 52  e built-in BINAR
5e90: 59 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  Y collating sequ
5ea0: 65 6e 63 65 20 69 73 20 75 73 65 64 2e 3c 2f 70  ence is used.</p
5eb0: 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20  >..<p>There are 
5ec0: 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c 69 6d  no arbitrary lim
5ed0: 69 74 73 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65  its on the numbe
5ee0: 72 20 6f 66 20 69 6e 64 69 63 65 73 20 74 68 61  r of indices tha
5ef0: 74 20 63 61 6e 20 62 65 0a 61 74 74 61 63 68 65  t can be.attache
5f00: 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61  d to a single ta
5f10: 62 6c 65 2e 20 20 5e 28 54 68 65 20 6e 75 6d 62  ble.  ^(The numb
5f20: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
5f30: 20 61 6e 20 69 6e 64 65 78 20 69 73 20 0a 6c 69   an index is .li
5f40: 6d 69 74 65 64 20 74 6f 20 74 68 65 20 76 61 6c  mited to the val
5f50: 75 65 20 73 65 74 20 62 79 0a 5b 73 71 6c 69 74  ue set by.[sqlit
5f60: 65 33 5f 6c 69 6d 69 74 5d 28 5b 53 51 4c 49 54  e3_limit]([SQLIT
5f70: 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 5d 2c  E_LIMIT_COLUMN],
5f80: 2e 2e 2e 29 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e  ...).)^</p>..<p>
5f90: 5e 49 66 20 74 68 65 20 55 4e 49 51 55 45 20 6b  ^If the UNIQUE k
5fa0: 65 79 77 6f 72 64 20 61 70 70 65 61 72 73 20 62  eyword appears b
5fb0: 65 74 77 65 65 6e 20 43 52 45 41 54 45 20 61 6e  etween CREATE an
5fc0: 64 20 49 4e 44 45 58 20 74 68 65 6e 20 64 75 70  d INDEX then dup
5fd0: 6c 69 63 61 74 65 0a 69 6e 64 65 78 20 65 6e 74  licate.index ent
5fe0: 72 69 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c  ries are not all
5ff0: 6f 77 65 64 2e 20 20 5e 41 6e 79 20 61 74 74 65  owed.  ^Any atte
6000: 6d 70 74 20 74 6f 20 69 6e 73 65 72 74 20 61 20  mpt to insert a 
6010: 64 75 70 6c 69 63 61 74 65 20 65 6e 74 72 79 0a  duplicate entry.
6020: 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61  will result in a
6030: 6e 20 65 72 72 6f 72 2e 20 20 5e 46 6f 72 20 74  n error.  ^For t
6040: 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 75  he purposes of u
6050: 6e 69 71 75 65 20 69 6e 64 69 63 65 73 2c 20 61  nique indices, a
6060: 6c 6c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 0a 61  ll NULL values.a
6070: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f  re considered to
6080: 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20   different from 
6090: 61 6c 6c 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76  all other NULL v
60a0: 61 6c 75 65 73 20 61 6e 64 20 61 72 65 20 74 68  alues and are th
60b0: 75 73 20 75 6e 69 71 75 65 2e 0a 54 68 69 73 20  us unique..This 
60c0: 69 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 77  is one of the tw
60d0: 6f 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 72  o possible inter
60e0: 70 72 65 74 61 74 69 6f 6e 73 20 6f 66 20 74 68  pretations of th
60f0: 65 20 53 51 4c 2d 39 32 20 73 74 61 6e 64 61 72  e SQL-92 standar
6100: 64 0a 28 74 68 65 20 6c 61 6e 67 75 61 67 65 20  d.(the language 
6110: 69 6e 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  in the standard 
6120: 69 73 20 61 6d 62 69 67 75 69 6f 75 73 29 20 61  is ambiguious) a
6130: 6e 64 20 69 73 20 74 68 65 20 69 6e 74 65 72 70  nd is the interp
6140: 72 65 74 61 74 69 6f 6e 0a 66 6f 6c 6c 6f 77 65  retation.followe
6150: 64 20 62 79 20 50 6f 73 74 67 72 65 53 51 4c 2c  d by PostgreSQL,
6160: 20 4d 79 53 51 4c 2c 20 46 69 72 65 62 69 72 64   MySQL, Firebird
6170: 2c 20 61 6e 64 20 4f 72 61 63 6c 65 2e 20 20 49  , and Oracle.  I
6180: 6e 66 6f 72 6d 69 78 20 61 6e 64 0a 4d 69 63 72  nformix and.Micr
6190: 6f 73 6f 66 74 20 53 51 4c 20 53 65 72 76 65 72  osoft SQL Server
61a0: 20 66 6f 6c 6c 6f 77 20 74 68 65 20 6f 74 68 65   follow the othe
61b0: 72 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  r interpretation
61c0: 20 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72 64   of the standard
61d0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68  .</p>..<p>^If th
61e0: 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 4e 4f  e optional IF NO
61f0: 54 20 45 58 49 53 54 53 20 63 6c 61 75 73 65 20  T EXISTS clause 
6200: 69 73 20 70 72 65 73 65 6e 74 20 61 6e 64 20 61  is present and a
6210: 6e 6f 74 68 65 72 20 69 6e 64 65 78 0a 77 69 74  nother index.wit
6220: 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  h the same name 
6230: 61 6c 65 61 64 79 20 65 78 69 73 74 73 2c 20 74  aleady exists, t
6240: 68 65 6e 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  hen this command
6250: 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70   becomes a no-op
6260: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 64 65 78  .</p>..<p>^Index
6270: 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 77  es are removed w
6280: 69 74 68 20 74 68 65 20 5b 44 52 4f 50 20 49 4e  ith the [DROP IN
6290: 44 45 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70  DEX] command.</p
62a0: 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  >...<tcl>.######
62b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
62c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
62d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
62e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
62f0: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
6300: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 7d 20   {CREATE TABLE} 
6310: 7b 63 72 65 61 74 65 74 61 62 6c 65 7d 20 7b 7b  {createtable} {{
6320: 43 52 45 41 54 45 20 54 41 42 4c 45 7d 7d 0a 0a  CREATE TABLE}}..
6330: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72  BubbleDiagram cr
6340: 65 61 74 65 2d 74 61 62 6c 65 2d 73 74 6d 74 20  eate-table-stmt 
6350: 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  1.BubbleDiagram 
6360: 63 6f 6c 75 6d 6e 2d 64 65 66 0a 42 75 62 62 6c  column-def.Bubbl
6370: 65 44 69 61 67 72 61 6d 20 74 79 70 65 2d 6e 61  eDiagram type-na
6380: 6d 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  me.BubbleDiagram
6390: 20 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74 72 61 69   column-constrai
63a0: 6e 74 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  nt.BubbleDiagram
63b0: 20 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e   table-constrain
63c0: 74 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  t.BubbleDiagram 
63d0: 66 6f 72 65 69 67 6e 2d 6b 65 79 2d 63 6c 61 75  foreign-key-clau
63e0: 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41  se.</tcl>..<p>^A
63f0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
6400: 61 74 65 6d 65 6e 74 20 69 73 20 62 61 73 69 63  atement is basic
6410: 61 6c 6c 79 20 74 68 65 20 6b 65 79 77 6f 72 64  ally the keyword
6420: 73 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 22  s "CREATE TABLE"
6430: 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65  .followed by the
6440: 20 6e 61 6d 65 20 6f 66 20 61 20 6e 65 77 20 74   name of a new t
6450: 61 62 6c 65 20 61 6e 64 20 61 20 70 61 72 65 6e  able and a paren
6460: 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66  thesized list of
6470: 20 63 6f 6c 75 6d 6e 0a 64 65 66 69 6e 69 74 69   column.definiti
6480: 6f 6e 73 20 61 6e 64 20 63 6f 6e 73 74 72 61 69  ons and constrai
6490: 6e 74 73 2e 20 20 0a 5e 54 61 62 6c 65 73 20 6e  nts.  .^Tables n
64a0: 61 6d 65 73 20 74 68 61 74 20 62 65 67 69 6e 20  ames that begin 
64b0: 77 69 74 68 20 22 3c 62 3e 73 71 6c 69 74 65 5f  with "<b>sqlite_
64c0: 3c 2f 62 3e 22 20 61 72 65 20 72 65 73 65 72 76  </b>" are reserv
64d0: 65 64 0a 66 6f 72 20 75 73 65 20 62 79 20 53 51  ed.for use by SQ
64e0: 4c 69 74 65 20 69 74 73 65 6c 66 20 61 6e 64 20  Lite itself and 
64f0: 63 61 6e 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 0a  cannot normally.
6500: 61 70 70 65 61 72 20 69 6e 20 61 20 43 52 45 41  appear in a CREA
6510: 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  TE TABLE stateme
6520: 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 45 61 63  nt.</p>..<p>^Eac
6530: 68 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74  h column definit
6540: 69 6f 6e 20 69 73 20 74 68 65 20 6e 61 6d 65 20  ion is the name 
6550: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 70  of the column op
6560: 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65  tionally followe
6570: 64 20 62 79 20 74 68 65 0a 5b 64 61 74 61 74 79  d by the.[dataty
6580: 70 65 5d 20 66 6f 72 20 74 68 61 74 20 63 6f 6c  pe] for that col
6590: 75 6d 6e 2c 20 74 68 65 6e 20 6f 6e 65 20 6f 72  umn, then one or
65a0: 20 6d 6f 72 65 20 6f 70 74 69 6f 6e 61 6c 20 63   more optional c
65b0: 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72 61 69 6e 74  olumn constraint
65c0: 73 2e 0a 5e 53 51 4c 69 74 65 20 75 73 65 73 20  s..^SQLite uses 
65d0: 5b 64 79 6e 61 6d 69 63 20 74 79 70 69 6e 67 5d  [dynamic typing]
65e0: 3b 20 0a 74 68 65 20 64 61 74 61 74 79 70 65 20  ; .the datatype 
65f0: 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 64  for the column d
6600: 6f 65 73 20 6e 6f 74 20 72 65 73 74 72 69 63 74  oes not restrict
6610: 20 77 68 61 74 20 64 61 74 61 20 6d 61 79 20 62   what data may b
6620: 65 20 70 75 74 0a 69 6e 20 74 68 61 74 20 63 6f  e put.in that co
6630: 6c 75 6d 6e 2e 0a 5e 54 68 65 20 55 4e 49 51 55  lumn..^The UNIQU
6640: 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 61 75  E constraint cau
6650: 73 65 73 20 61 6e 20 75 6e 69 71 75 65 20 69 6e  ses an unique in
6660: 64 65 78 20 74 6f 20 62 65 20 63 72 65 61 74 65  dex to be create
6670: 64 20 6f 6e 20 74 68 65 20 73 70 65 63 69 66 69  d on the specifi
6680: 65 64 0a 63 6f 6c 75 6d 6e 73 2e 20 20 5e 41 6c  ed.columns.  ^Al
6690: 6c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72  l NULL values ar
66a0: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 64 69 66  e considered dif
66b0: 66 65 72 65 6e 74 20 66 72 6f 6d 20 65 61 63 68  ferent from each
66c0: 20 6f 74 68 65 72 20 61 6e 64 20 66 72 6f 6d 0a   other and from.
66d0: 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73  all other values
66e0: 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65   for the purpose
66f0: 20 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 20   of determining 
6700: 75 6e 69 71 75 65 6e 65 73 73 2c 20 68 65 6e 63  uniqueness, henc
6710: 65 20 61 20 55 4e 49 51 55 45 0a 63 6f 6c 75 6d  e a UNIQUE.colum
6720: 6e 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 6d 75  n may contain mu
6730: 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73 20 77  ltiple entries w
6740: 69 74 68 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ith the value of
6750: 20 4e 55 4c 4c 2e 0a 5e 54 68 65 20 43 4f 4c 4c   NULL..^The COLL
6760: 41 54 45 20 63 6c 61 75 73 65 20 73 70 65 63 69  ATE clause speci
6770: 66 69 65 73 20 77 68 61 74 20 74 65 78 74 20 0a  fies what text .
6780: 5b 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74  [collating funct
6790: 69 6f 6e 5d 20 74 6f 20 75 73 65 20 77 68 65 6e  ion] to use when
67a0: 20 63 6f 6d 70 61 72 69 6e 67 20 74 65 78 74 20   comparing text 
67b0: 65 6e 74 72 69 65 73 20 66 6f 72 20 74 68 65 20  entries for the 
67c0: 63 6f 6c 75 6d 6e 2e 20 20 0a 5e 54 68 65 20 62  column.  .^The b
67d0: 75 69 6c 74 2d 69 6e 20 5b 42 49 4e 41 52 59 5d  uilt-in [BINARY]
67e0: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
67f0: 69 6f 6e 20 69 73 20 75 73 65 64 20 62 79 20 64  ion is used by d
6800: 65 66 61 75 6c 74 2e 0a 3c 70 3e 0a 5e 54 68 65  efault..<p>.^The
6810: 20 44 45 46 41 55 4c 54 20 63 6f 6e 73 74 72 61   DEFAULT constra
6820: 69 6e 74 20 73 70 65 63 69 66 69 65 73 20 61 20  int specifies a 
6830: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 74 6f  default value to
6840: 20 75 73 65 20 77 68 65 6e 20 64 6f 69 6e 67 20   use when doing 
6850: 61 6e 20 5b 49 4e 53 45 52 54 5d 2e 0a 5e 54 68  an [INSERT]..^Th
6860: 65 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 4e  e value may be N
6870: 55 4c 4c 2c 20 61 20 73 74 72 69 6e 67 20 63 6f  ULL, a string co
6880: 6e 73 74 61 6e 74 2c 20 61 20 6e 75 6d 62 65 72  nstant, a number
6890: 2c 20 6f 72 20 61 20 63 6f 6e 73 74 61 6e 74 20  , or a constant 
68a0: 65 78 70 72 65 73 73 69 6f 6e 0a 65 6e 63 6c 6f  expression.enclo
68b0: 73 65 64 20 69 6e 20 70 61 72 65 6e 74 68 65 73  sed in parenthes
68c0: 65 73 2e 0a 5e 54 68 65 20 64 65 66 61 75 6c 74  es..^The default
68d0: 20 76 61 6c 75 65 20 6d 61 79 20 61 6c 73 6f 20   value may also 
68e0: 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 73 70  be one of the sp
68f0: 65 63 69 61 6c 20 63 61 73 65 2d 69 6e 64 65 70  ecial case-indep
6900: 65 6e 64 61 6e 74 0a 6b 65 79 77 6f 72 64 73 20  endant.keywords 
6910: 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55  CURRENT_TIME, CU
6920: 52 52 45 4e 54 5f 44 41 54 45 20 6f 72 20 43 55  RRENT_DATE or CU
6930: 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2e  RRENT_TIMESTAMP.
6940: 20 20 5e 49 66 20 74 68 65 20 76 61 6c 75 65 20    ^If the value 
6950: 69 73 0a 4e 55 4c 4c 2c 20 61 20 73 74 72 69 6e  is.NULL, a strin
6960: 67 20 63 6f 6e 73 74 61 6e 74 20 6f 72 20 6e 75  g constant or nu
6970: 6d 62 65 72 2c 20 69 74 20 69 73 20 69 6e 73 65  mber, it is inse
6980: 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 63 6f  rted into the co
6990: 6c 75 6d 6e 0a 77 68 65 6e 65 76 65 72 20 61 6e  lumn.whenever an
69a0: 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
69b0: 74 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20  t that does not 
69c0: 73 70 65 63 69 66 79 20 61 20 76 61 6c 75 65 20  specify a value 
69d0: 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69  for the column i
69e0: 73 0a 65 78 65 63 75 74 65 64 2e 20 5e 49 66 20  s.executed. ^If 
69f0: 74 68 65 20 76 61 6c 75 65 20 69 73 20 43 55 52  the value is CUR
6a00: 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45  RENT_TIME, CURRE
6a10: 4e 54 5f 44 41 54 45 20 6f 72 20 43 55 52 52 45  NT_DATE or CURRE
6a20: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 74 68  NT_TIMESTAMP, th
6a30: 65 6e 0a 74 68 65 20 63 75 72 72 65 6e 74 20 55  en.the current U
6a40: 54 43 20 64 61 74 65 20 61 6e 64 2f 6f 72 20 74  TC date and/or t
6a50: 69 6d 65 20 69 73 20 69 6e 73 65 72 74 65 64 20  ime is inserted 
6a60: 69 6e 74 6f 20 74 68 65 20 63 6f 6c 75 6d 6e 73  into the columns
6a70: 2e 20 5e 46 6f 72 0a 43 55 52 52 45 4e 54 5f 54  . ^For.CURRENT_T
6a80: 49 4d 45 2c 20 74 68 65 20 66 6f 72 6d 61 74 20  IME, the format 
6a90: 69 73 20 48 48 3a 4d 4d 3a 53 53 2e 20 5e 46 6f  is HH:MM:SS. ^Fo
6aa0: 72 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2c 20  r CURRENT_DATE, 
6ab0: 59 59 59 59 2d 4d 4d 2d 44 44 2e 0a 5e 54 68 65  YYYY-MM-DD..^The
6ac0: 20 66 6f 72 6d 61 74 20 66 6f 72 20 43 55 52 52   format for CURR
6ad0: 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20 69 73  ENT_TIMESTAMP is
6ae0: 20 22 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a   "YYYY-MM-DD HH:
6af0: 4d 4d 3a 53 53 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70  MM:SS"..</p>..<p
6b00: 3e 5e 28 54 68 65 20 50 52 49 4d 41 52 59 20 4b  >^(The PRIMARY K
6b10: 45 59 20 61 74 74 72 69 62 75 74 65 20 6e 6f 72  EY attribute nor
6b20: 6d 61 6c 6c 79 20 63 72 65 61 74 65 73 20 61 20  mally creates a 
6b30: 55 4e 49 51 55 45 20 69 6e 64 65 78 20 6f 6e 0a  UNIQUE index on.
6b40: 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 63 6f  the column or co
6b50: 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65 20 73  lumns that are s
6b60: 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20  pecified as the 
6b70: 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 54 68  PRIMARY KEY.  Th
6b80: 65 20 6f 6e 6c 79 0a 65 78 63 65 70 74 69 6f 6e  e only.exception
6b90: 20 74 6f 20 74 68 69 73 20 62 65 68 61 76 69 6f   to this behavio
6ba0: 72 20 69 73 20 73 70 65 63 69 61 6c 20 5b 49 4e  r is special [IN
6bb0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
6bc0: 59 5d 20 63 6f 6c 75 6d 6e 2c 0a 64 65 73 63 72  Y] column,.descr
6bd0: 69 62 65 64 20 62 65 6c 6f 77 2e 29 5e 0a 5e 28  ibed below.)^.^(
6be0: 41 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65  According to the
6bf0: 20 53 51 4c 20 73 74 61 6e 64 61 72 64 2c 20 50   SQL standard, P
6c00: 52 49 4d 41 52 59 20 4b 45 59 20 73 68 6f 75 6c  RIMARY KEY shoul
6c10: 64 20 69 6d 70 6c 79 20 4e 4f 54 20 4e 55 4c 4c  d imply NOT NULL
6c20: 2e 0a 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c  ..Unfortunately,
6c30: 20 64 75 65 20 74 6f 20 61 20 6c 6f 6e 67 2d 73   due to a long-s
6c40: 74 61 6e 64 69 6e 67 20 63 6f 64 69 6e 67 20 6f  tanding coding o
6c50: 76 65 72 73 69 67 68 74 2c 20 74 68 69 73 20 69  versight, this i
6c60: 73 20 6e 6f 74 20 0a 74 68 65 20 63 61 73 65 20  s not .the case 
6c70: 69 6e 20 53 51 4c 69 74 65 2e 20 20 53 51 4c 69  in SQLite.  SQLi
6c80: 74 65 20 61 6c 6c 6f 77 73 20 4e 55 4c 4c 20 76  te allows NULL v
6c90: 61 6c 75 65 73 0a 69 6e 20 61 20 50 52 49 4d 41  alues.in a PRIMA
6ca0: 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 2e 29 5e  RY KEY column.)^
6cb0: 20 20 57 65 20 63 6f 75 6c 64 20 63 68 61 6e 67    We could chang
6cc0: 65 20 53 51 4c 69 74 65 20 74 6f 20 63 6f 6e 66  e SQLite to conf
6cd0: 6f 72 6d 20 74 6f 20 74 68 65 0a 73 74 61 6e 64  orm to the.stand
6ce0: 61 72 64 20 28 61 6e 64 20 77 65 20 6d 69 67 68  ard (and we migh
6cf0: 74 20 64 6f 20 73 6f 20 69 6e 20 74 68 65 20 66  t do so in the f
6d00: 75 74 75 72 65 29 2c 20 62 75 74 20 62 79 20 74  uture), but by t
6d10: 68 65 20 74 69 6d 65 20 74 68 65 0a 6f 76 65 72  he time the.over
6d20: 73 69 67 68 74 20 77 61 73 20 64 69 73 63 6f 76  sight was discov
6d30: 65 72 65 64 2c 20 53 51 4c 69 74 65 20 77 61 73  ered, SQLite was
6d40: 20 69 6e 20 73 75 63 68 20 77 69 64 65 20 75 73   in such wide us
6d50: 65 20 74 68 61 74 20 77 65 20 66 65 61 72 65 64  e that we feared
6d60: 0a 62 72 65 61 6b 69 6e 67 20 6c 65 67 61 63 79  .breaking legacy
6d70: 20 63 6f 64 65 20 69 66 20 77 65 20 66 69 78 65   code if we fixe
6d80: 64 20 74 68 65 20 70 72 6f 62 6c 65 6d 2e 20 20  d the problem.  
6d90: 53 6f 20 66 6f 72 20 6e 6f 77 20 77 65 20 68 61  So for now we ha
6da0: 76 65 0a 63 68 6f 73 65 6e 20 74 6f 20 63 6f 6e  ve.chosen to con
6db0: 74 69 6e 75 65 20 61 6c 6c 6f 77 69 6e 67 20 4e  tinue allowing N
6dc0: 55 4c 4c 73 20 69 6e 20 50 52 49 4d 41 52 59 20  ULLs in PRIMARY 
6dd0: 4b 45 59 20 63 6f 6c 75 6d 6e 73 2e 0a 44 65 76  KEY columns..Dev
6de0: 65 6c 6f 70 65 72 73 20 73 68 6f 75 6c 64 20 62  elopers should b
6df0: 65 20 61 77 61 72 65 2c 20 68 6f 77 65 76 65 72  e aware, however
6e00: 2c 20 74 68 61 74 20 77 65 20 6d 61 79 20 63 68  , that we may ch
6e10: 61 6e 67 65 20 53 51 4c 69 74 65 20 74 6f 0a 63  ange SQLite to.c
6e20: 6f 6e 66 6f 72 6d 20 74 6f 20 74 68 65 20 53 51  onform to the SQ
6e30: 4c 20 73 74 61 6e 64 61 72 64 20 69 6e 20 66 75  L standard in fu
6e40: 74 75 72 65 20 61 6e 64 20 73 68 6f 75 6c 64 20  ture and should 
6e50: 64 65 73 69 67 6e 20 6e 65 77 20 70 72 6f 67 72  design new progr
6e60: 61 6d 73 0a 61 63 63 6f 72 64 69 6e 67 6c 79 2e  ams.accordingly.
6e70: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 53 51 4c 69 74 65  </p>..<p>^SQLite
6e80: 20 75 73 65 73 20 5b 64 79 6e 61 6d 69 63 20 74   uses [dynamic t
6e90: 79 70 69 6e 67 5d 20 69 6e 73 74 65 61 64 20 6f  yping] instead o
6ea0: 66 20 73 74 61 74 69 63 20 74 79 70 69 6e 67 2e  f static typing.
6eb0: 20 20 5e 45 78 63 65 70 74 20 66 6f 72 20 74 68    ^Except for th
6ec0: 65 0a 73 70 65 63 69 61 6c 20 63 61 73 65 20 6f  e.special case o
6ed0: 66 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  f [INTEGER PRIMA
6ee0: 52 59 20 4b 45 59 5d 2c 20 53 51 4c 69 74 65 20  RY KEY], SQLite 
6ef0: 77 69 6c 6c 20 61 6c 6c 6f 77 20 76 61 6c 75 65  will allow value
6f00: 73 20 6f 66 20 61 6e 79 0a 74 79 70 65 20 74 6f  s of any.type to
6f10: 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 6e   be stored in an
6f20: 79 20 63 6f 6c 75 6d 6e 20 72 65 67 61 72 64 6c  y column regardl
6f30: 65 73 73 20 6f 66 20 74 68 65 20 64 65 63 6c 61  ess of the decla
6f40: 72 65 64 20 64 61 74 61 74 79 70 65 20 6f 66 0a  red datatype of.
6f50: 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 20 20 5e 54  that column.  ^T
6f60: 68 65 20 64 65 63 6c 61 72 65 64 20 64 61 74 61  he declared data
6f70: 74 79 70 65 20 69 73 20 61 20 5b 61 66 66 69 6e  type is a [affin
6f80: 69 74 79 20 7c 20 74 79 70 65 20 61 66 66 69 6e  ity | type affin
6f90: 69 74 79 5d 20 74 68 61 74 0a 53 51 4c 69 74 65  ity] that.SQLite
6fa0: 20 61 74 74 65 6d 70 74 73 20 74 6f 20 63 6f 6d   attempts to com
6fb0: 70 6c 79 20 77 69 74 68 2c 20 62 75 74 20 74 68  ply with, but th
6fc0: 65 20 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c  e operation will
6fd0: 20 70 72 6f 63 65 65 64 20 65 76 65 6e 20 69 66   proceed even if
6fe0: 0a 63 6f 6d 70 6c 69 61 6e 63 65 20 69 73 20 6e  .compliance is n
6ff0: 6f 74 20 70 6f 73 73 69 62 6c 65 2e 3c 2f 70 3e  ot possible.</p>
7000: 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 22 54 45  ..<p>^If the "TE
7010: 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41 52  MP" or "TEMPORAR
7020: 59 22 20 6b 65 79 77 6f 72 64 20 6f 63 63 75 72  Y" keyword occur
7030: 73 20 69 6e 20 62 65 74 77 65 65 6e 20 22 43 52  s in between "CR
7040: 45 41 54 45 22 0a 61 6e 64 20 22 54 41 42 4c 45  EATE".and "TABLE
7050: 22 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  " then the table
7060: 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64   that is created
7070: 20 69 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c 65   is only visible
7080: 0a 77 69 74 68 69 6e 20 74 68 61 74 20 73 61 6d  .within that sam
7090: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
70a0: 63 74 69 6f 6e 0a 61 6e 64 20 69 73 20 61 75 74  ction.and is aut
70b0: 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74  omatically delet
70c0: 65 64 20 77 68 65 6e 0a 74 68 65 20 64 61 74 61  ed when.the data
70d0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
70e0: 69 73 20 63 6c 6f 73 65 64 2e 20 20 5e 41 6e 79  is closed.  ^Any
70f0: 20 69 6e 64 69 63 65 73 20 63 72 65 61 74 65 64   indices created
7100: 20 6f 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20   on a temporary 
7110: 74 61 62 6c 65 0a 61 72 65 20 61 6c 73 6f 20 74  table.are also t
7120: 65 6d 70 6f 72 61 72 79 2e 20 20 5e 54 65 6d 70  emporary.  ^Temp
7130: 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64  orary tables and
7140: 20 69 6e 64 69 63 65 73 20 61 72 65 20 73 74 6f   indices are sto
7150: 72 65 64 20 69 6e 20 61 0a 73 65 70 61 72 61 74  red in a.separat
7160: 65 20 66 69 6c 65 20 64 69 73 74 69 6e 63 74 20  e file distinct 
7170: 66 72 6f 6d 20 74 68 65 20 6d 61 69 6e 20 64 61  from the main da
7180: 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e  tabase file.</p>
7190: 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 26 6c 74 3b  ..<p> ^If a &lt;
71a0: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74  database-name&gt
71b0: 3b 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  ; is specified, 
71c0: 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69  then the table i
71d0: 73 20 63 72 65 61 74 65 64 20 69 6e 20 0a 74 68  s created in .th
71e0: 65 20 6e 61 6d 65 64 20 64 61 74 61 62 61 73 65  e named database
71f0: 2e 20 5e 49 74 20 69 73 20 61 6e 20 65 72 72 6f  . ^It is an erro
7200: 72 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f 74  r to specify bot
7210: 68 20 61 20 26 6c 74 3b 64 61 74 61 62 61 73 65  h a &lt;database
7220: 2d 6e 61 6d 65 26 67 74 3b 0a 61 6e 64 20 74 68  -name&gt;.and th
7230: 65 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 2c 20  e TEMP keyword, 
7240: 75 6e 6c 65 73 73 20 74 68 65 20 26 6c 74 3b 64  unless the &lt;d
7250: 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b  atabase-name&gt;
7260: 20 69 73 20 22 74 65 6d 70 22 2e 20 5e 49 66 20   is "temp". ^If 
7270: 6e 6f 0a 64 61 74 61 62 61 73 65 20 6e 61 6d 65  no.database name
7280: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 6e   is specified an
7290: 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f  d the TEMP keywo
72a0: 72 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e  rd is not presen
72b0: 74 20 74 68 65 6e 0a 74 68 65 20 74 61 62 6c 65  t then.the table
72c0: 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20 74   is created in t
72d0: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
72e0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f  .</p>..<p>^The o
72f0: 70 74 69 6f 6e 61 6c 20 5b 63 6f 6e 66 6c 69 63  ptional [conflic
7300: 74 20 63 6c 61 75 73 65 5d 20 66 6f 6c 6c 6f 77  t clause] follow
7310: 69 6e 67 20 65 61 63 68 20 63 6f 6e 73 74 72 61  ing each constra
7320: 69 6e 74 0a 61 6c 6c 6f 77 73 20 74 68 65 20 73  int.allows the s
7330: 70 65 63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20  pecification of 
7340: 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20 64  an alternative d
7350: 65 66 61 75 6c 74 0a 63 6f 6e 73 74 72 61 69 6e  efault.constrain
7360: 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  t conflict resol
7370: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
7380: 66 6f 72 20 74 68 61 74 20 63 6f 6e 73 74 72 61  for that constra
7390: 69 6e 74 2e 0a 5e 49 66 20 6e 6f 20 63 6f 6e 66  int..^If no conf
73a0: 6c 69 63 74 20 63 6c 61 75 73 65 20 69 73 20 73  lict clause is s
73b0: 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 41 42  pecified, the AB
73c0: 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ORT algorithm is
73d0: 20 75 73 65 64 2e 0a 5e 44 69 66 66 65 72 65 6e   used..^Differen
73e0: 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 69  t constraints wi
73f0: 74 68 69 6e 20 74 68 65 20 73 61 6d 65 0a 74 61  thin the same.ta
7400: 62 6c 65 20 6d 61 79 20 68 61 76 65 20 64 69 66  ble may have dif
7410: 66 65 72 65 6e 74 20 63 6f 6e 66 6c 69 63 74 20  ferent conflict 
7420: 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
7430: 69 74 68 6d 73 2e 0a 5e 49 66 20 61 6e 20 5b 49  ithms..^If an [I
7440: 4e 53 45 52 54 5d 20 6f 72 20 5b 55 50 44 41 54  NSERT] or [UPDAT
7450: 45 5d 20 73 74 61 74 65 6d 65 6e 74 20 73 70 65  E] statement spe
7460: 63 69 66 69 65 73 20 61 20 63 6f 6e 66 6c 69 63  cifies a conflic
7470: 74 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t.resolution alg
7480: 6f 72 69 74 68 6d 2c 20 74 68 65 6e 20 74 68 65  orithm, then the
7490: 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69   algorithm speci
74a0: 66 69 65 64 20 6f 6e 20 74 68 65 20 49 4e 53 45  fied on the INSE
74b0: 52 54 20 6f 72 0a 55 50 44 41 54 45 20 73 74 61  RT or.UPDATE sta
74c0: 74 65 6d 65 6e 74 20 6f 76 65 72 72 69 64 65 73  tement overrides
74d0: 20 74 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 73   the algorithm s
74e0: 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 20  pecified in the 
74f0: 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74  .CREATE TABLE st
7500: 61 74 65 6d 65 6e 74 2e 0a 53 65 65 20 74 68 65  atement..See the
7510: 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 0a   section titled.
7520: 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f  [ON CONFLICT] fo
7530: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
7540: 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c  ormation.</p>..<
7550: 70 3e 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  p>CHECK constrai
7560: 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65  nts are supporte
7570: 64 20 61 73 20 6f 66 20 5b 76 65 72 73 69 6f 6e  d as of [version
7580: 20 33 2e 33 2e 30 5d 2e 20 20 50 72 69 6f 72 0a   3.3.0].  Prior.
7590: 74 6f 20 76 65 72 73 69 6f 6e 20 33 2e 33 2e 30  to version 3.3.0
75a0: 2c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  , CHECK constrai
75b0: 6e 74 73 20 77 65 72 65 20 70 61 72 73 65 64 20  nts were parsed 
75c0: 62 75 74 20 6e 6f 74 20 65 6e 66 6f 72 63 65 64  but not enforced
75d0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6e  .</p>..<p>^The n
75e0: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
75f0: 20 69 6e 20 61 20 74 61 62 6c 65 20 69 73 20 6c   in a table is l
7600: 69 6d 69 74 65 64 20 62 79 20 74 68 65 0a 5b 53  imited by the.[S
7610: 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e  QLITE_MAX_COLUMN
7620: 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 70  ] compile-time p
7630: 61 72 61 6d 65 74 65 72 2e 0a 5e 41 20 73 69 6e  arameter..^A sin
7640: 67 6c 65 20 72 6f 77 20 6f 66 20 61 20 74 61 62  gle row of a tab
7650: 6c 65 20 63 61 6e 6e 6f 74 20 73 74 6f 72 65 20  le cannot store 
7660: 6d 6f 72 65 20 74 68 61 6e 0a 5b 53 51 4c 49 54  more than.[SQLIT
7670: 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 5d 20 62 79  E_MAX_LENGTH] by
7680: 74 65 73 20 6f 66 20 64 61 74 61 2e 0a 5e 42 6f  tes of data..^Bo
7690: 74 68 20 6f 66 20 74 68 65 73 65 20 6c 69 6d 69  th of these limi
76a0: 74 73 20 63 61 6e 20 62 65 20 6c 6f 77 65 72 65  ts can be lowere
76b0: 64 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73 69  d at runtime usi
76c0: 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f  ng the.[sqlite3_
76d0: 6c 69 6d 69 74 28 29 5d 20 43 2f 43 2b 2b 20 69  limit()] C/C++ i
76e0: 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 0a  nterface.</p>...
76f0: 3c 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 54  <p>^The CREATE T
7700: 41 42 4c 45 20 41 53 20 66 6f 72 6d 20 64 65 66  ABLE AS form def
7710: 69 6e 65 73 20 74 68 65 20 74 61 62 6c 65 20 74  ines the table t
7720: 6f 20 62 65 0a 74 68 65 20 72 65 73 75 6c 74 20  o be.the result 
7730: 73 65 74 20 6f 66 20 61 20 71 75 65 72 79 2e 20  set of a query. 
7740: 20 5e 54 68 65 20 6e 61 6d 65 73 20 6f 66 20 74   ^The names of t
7750: 68 65 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73  he table columns
7760: 20 61 72 65 0a 74 68 65 20 6e 61 6d 65 73 20 6f   are.the names o
7770: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  f the columns in
7780: 20 74 68 65 20 72 65 73 75 6c 74 2e 3c 2f 70 3e   the result.</p>
7790: 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70 74  ..<p>^If the opt
77a0: 69 6f 6e 61 6c 20 49 46 20 4e 4f 54 20 45 58 49  ional IF NOT EXI
77b0: 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70 72  STS clause is pr
77c0: 65 73 65 6e 74 20 61 6e 64 20 61 6e 6f 74 68 65  esent and anothe
77d0: 72 20 74 61 62 6c 65 0a 77 69 74 68 20 74 68 65  r table.with the
77e0: 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 65 61 64   same name alead
77f0: 79 20 65 78 69 73 74 73 2c 20 74 68 65 6e 20 74  y exists, then t
7800: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 62 65 63 6f  his command beco
7810: 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 3c 2f 70 3e  mes a no-op.</p>
7820: 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73 20 61 72 65  ..<p>^Tables are
7830: 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 74   removed using t
7840: 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20  he [DROP TABLE] 
7850: 73 74 61 74 65 6d 65 6e 74 2e 20 20 3c 2f 70 3e  statement.  </p>
7860: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
7870: 6e 74 20 72 6f 77 69 64 20 7b 49 4e 54 45 47 45  nt rowid {INTEGE
7880: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 7d 20 52  R PRIMARY KEY} R
7890: 4f 57 49 44 20 72 6f 77 69 64 3c 2f 74 63 6c 3e  OWID rowid</tcl>
78a0: 0a 3c 68 33 3e 52 4f 57 49 44 73 20 61 6e 64 20  .<h3>ROWIDs and 
78b0: 74 68 65 20 49 4e 54 45 47 45 52 20 50 52 49 4d  the INTEGER PRIM
78c0: 41 52 59 20 4b 45 59 3c 2f 68 33 3e 0a 0a 3c 70  ARY KEY</h3>..<p
78d0: 3e 5e 45 76 65 72 79 20 72 6f 77 20 6f 66 20 65  >^Every row of e
78e0: 76 65 72 79 20 53 51 4c 69 74 65 20 74 61 62 6c  very SQLite tabl
78f0: 65 20 68 61 73 20 61 20 36 34 2d 62 69 74 20 73  e has a 64-bit s
7900: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 6b 65  igned integer ke
7910: 79 20 0a 74 68 61 74 20 69 73 20 75 6e 69 71 75  y .that is uniqu
7920: 65 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  e within the sam
7930: 65 20 74 61 62 6c 65 2e 0a 54 68 69 73 20 69 6e  e table..This in
7940: 74 65 67 65 72 20 69 73 20 75 73 75 61 6c 6c 79  teger is usually
7950: 20 63 61 6c 6c 65 64 20 74 68 65 20 22 72 6f 77   called the "row
7960: 69 64 22 2e 20 20 5e 54 68 65 20 72 6f 77 69 64  id".  ^The rowid
7970: 20 69 73 20 74 68 65 20 61 63 74 75 61 6c 20 6b   is the actual k
7980: 65 79 20 75 73 65 64 0a 69 6e 20 74 68 65 20 42  ey used.in the B
7990: 2d 54 72 65 65 20 74 68 61 74 20 69 6d 70 6c 65  -Tree that imple
79a0: 6d 65 6e 74 73 20 61 6e 20 53 51 4c 69 74 65 20  ments an SQLite 
79b0: 74 61 62 6c 65 2e 20 20 5e 52 6f 77 73 20 61 72  table.  ^Rows ar
79c0: 65 20 73 74 6f 72 65 64 20 69 6e 0a 72 6f 77 69  e stored in.rowi
79d0: 64 20 6f 72 64 65 72 2e 20 5e 54 68 65 0a 72 6f  d order. ^The.ro
79e0: 77 69 64 20 76 61 6c 75 65 20 63 61 6e 20 62 65  wid value can be
79f0: 20 61 63 63 65 73 73 65 64 20 75 73 69 6e 67 20   accessed using 
7a00: 6f 6e 65 20 6f 66 20 74 68 65 20 73 70 65 63 69  one of the speci
7a10: 61 6c 20 6e 61 6d 65 73 0a 22 3c 62 3e 52 4f 57  al names."<b>ROW
7a20: 49 44 3c 2f 62 3e 22 2c 20 22 3c 62 3e 4f 49 44  ID</b>", "<b>OID
7a30: 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c 62 3e 5f 52  </b>", or "<b>_R
7a40: 4f 57 49 44 5f 3c 2f 62 3e 22 20 61 73 73 75 6d  OWID_</b>" assum
7a50: 69 6e 67 20 74 68 6f 73 65 20 6e 61 6d 65 73 0a  ing those names.
7a60: 61 72 65 20 6e 6f 20 75 73 65 64 20 62 79 20 6f  are no used by o
7a70: 74 68 65 72 20 63 6f 6e 76 65 6e 74 69 6f 6e 61  ther conventiona
7a80: 6c 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73 2e  l table columns.
7a90: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 49 66 20 61 20  </p>..<p>.^If a 
7aa0: 63 6f 6c 75 6d 6e 20 69 73 20 64 65 63 6c 61 72  column is declar
7ab0: 65 64 20 74 6f 20 62 65 20 61 6e 20 49 4e 54 45  ed to be an INTE
7ac0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
7ad0: 20 74 68 65 6e 20 74 68 61 74 20 63 6f 6c 75 6d   then that colum
7ae0: 6e 20 69 73 20 6e 6f 74 0a 61 20 22 72 65 61 6c  n is not.a "real
7af0: 22 20 64 61 74 61 62 61 73 65 20 63 6f 6c 75 6d  " database colum
7b00: 6e 20 62 75 74 20 69 6e 73 74 65 61 64 20 62 65  n but instead be
7b10: 63 6f 6d 65 73 0a 61 6e 20 61 6c 69 61 73 20 66  comes.an alias f
7b20: 6f 72 20 74 68 65 20 72 6f 77 69 64 2e 20 20 5e  or the rowid.  ^
7b30: 55 6e 6c 69 6b 65 20 6e 6f 72 6d 61 6c 20 53 51  Unlike normal SQ
7b40: 4c 69 74 65 20 63 6f 6c 75 6d 6e 73 2c 20 74 68  Lite columns, th
7b50: 65 20 72 6f 77 69 64 0a 6d 75 73 74 20 62 65 20  e rowid.must be 
7b60: 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 74 65 67  a non-NULL integ
7b70: 65 72 20 76 61 6c 75 65 2e 20 20 5e 54 68 65 20  er value.  ^The 
7b80: 72 6f 77 69 64 20 69 73 20 6e 6f 74 20 61 62 6c  rowid is not abl
7b90: 65 20 74 6f 20 68 6f 6c 64 0a 66 6c 6f 61 74 69  e to hold.floati
7ba0: 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 2c  ng point values,
7bb0: 20 73 74 72 69 6e 67 73 2c 20 42 4c 4f 42 73 2c   strings, BLOBs,
7bc0: 20 6f 72 20 4e 55 4c 4c 73 2e 3c 2f 70 3e 0a 0a   or NULLs.</p>..
7bd0: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 69 3e 0a  <blockquote><i>.
7be0: 5e 41 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d  ^An INTEGER PRIM
7bf0: 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 20 69  ARY KEY column i
7c00: 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
7c10: 68 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64  he 64-bit signed
7c20: 20 69 6e 74 65 67 65 72 20 72 6f 77 69 64 2e 0a   integer rowid..
7c30: 3c 2f 69 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  </i></blockquote
7c40: 3e 0a 0a 3c 70 3e 5e 41 6e 20 49 4e 54 45 47 45  >..<p>^An INTEGE
7c50: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f  R PRIMARY KEY co
7c60: 6c 75 6d 6e 20 63 61 6e 20 61 6c 73 6f 20 69 6e  lumn can also in
7c70: 63 6c 75 64 65 20 74 68 65 0a 6b 65 79 77 6f 72  clude the.keywor
7c80: 64 20 5b 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  d [AUTOINCREMENT
7c90: 5d 2e 20 20 5e 54 68 65 20 5b 41 55 54 4f 49 4e  ].  ^The [AUTOIN
7ca0: 43 52 45 4d 45 4e 54 5d 20 6b 65 79 77 6f 72 64  CREMENT] keyword
7cb0: 20 6d 6f 64 69 66 69 65 64 20 74 68 65 20 77 61   modified the wa
7cc0: 79 0a 74 68 61 74 20 42 2d 54 72 65 65 20 6b 65  y.that B-Tree ke
7cd0: 79 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  ys are automatic
7ce0: 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 64 2e 20  ally generated. 
7cf0: 20 41 64 64 69 74 69 6f 6e 61 6c 20 64 65 74 61   Additional deta
7d00: 69 6c 0a 6f 6e 20 61 75 74 6f 6d 61 74 69 63 20  il.on automatic 
7d10: 42 2d 54 72 65 65 20 6b 65 79 20 67 65 6e 65 72  B-Tree key gener
7d20: 61 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62  ation is availab
7d30: 6c 65 0a 3c 61 20 68 72 65 66 3d 22 61 75 74 6f  le.<a href="auto
7d40: 69 6e 63 2e 68 74 6d 6c 22 3e 73 65 70 61 72 61  inc.html">separa
7d50: 74 65 6c 79 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c  tely</a>.</p>..<
7d60: 70 3e 5e 54 68 65 20 73 70 65 63 69 61 6c 20 62  p>^The special b
7d70: 65 68 61 76 69 6f 72 20 6f 66 20 49 4e 54 45 47  ehavior of INTEG
7d80: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 0a 69  ER PRIMARY KEY.i
7d90: 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65  s only available
7da0: 20 69 66 20 74 68 65 20 74 79 70 65 20 6e 61 6d   if the type nam
7db0: 65 20 69 73 20 65 78 61 63 74 6c 79 20 22 49 4e  e is exactly "IN
7dc0: 54 45 47 45 52 22 20 69 6e 20 61 6e 79 20 6d 69  TEGER" in any mi
7dd0: 78 74 75 72 65 0a 6f 66 20 75 70 70 65 72 20 61  xture.of upper a
7de0: 6e 64 20 6c 6f 77 65 72 20 63 61 73 65 2e 20 20  nd lower case.  
7df0: 5e 4f 74 68 65 72 20 69 6e 74 65 67 65 72 20 74  ^Other integer t
7e00: 79 70 65 20 6e 61 6d 65 73 0a 6c 69 6b 65 20 22  ype names.like "
7e10: 49 4e 54 22 20 6f 72 20 22 42 49 47 49 4e 54 22  INT" or "BIGINT"
7e20: 20 6f 72 20 22 53 48 4f 52 54 20 49 4e 54 45 47   or "SHORT INTEG
7e30: 45 52 22 20 6f 72 20 22 55 4e 53 49 47 4e 45 44  ER" or "UNSIGNED
7e40: 20 49 4e 54 45 47 45 52 22 0a 63 61 75 73 65 73   INTEGER".causes
7e50: 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
7e60: 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 68 61 76   column to behav
7e70: 65 20 61 73 20 61 6e 20 6f 72 64 69 6e 61 72 79  e as an ordinary
7e80: 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 77 69   table column wi
7e90: 74 68 0a 69 6e 74 65 67 65 72 20 5b 61 66 66 69  th.integer [affi
7ea0: 6e 69 74 79 5d 20 61 6e 64 20 61 20 75 6e 69 71  nity] and a uniq
7eb0: 75 65 20 69 6e 64 65 78 2c 20 6e 6f 74 20 61 73  ue index, not as
7ec0: 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68   an alias for th
7ed0: 65 20 72 6f 77 69 64 2e 0a 5e 28 54 68 65 20 73  e rowid..^(The s
7ee0: 70 65 63 69 61 6c 20 62 65 68 61 76 69 6f 72 20  pecial behavior 
7ef0: 6f 66 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  of INTEGER PRIMA
7f00: 52 59 20 4b 45 59 20 69 73 20 6f 6e 6c 79 20 61  RY KEY is only a
7f10: 76 61 69 6c 61 62 6c 65 20 69 66 20 74 68 65 0a  vailable if the.
7f20: 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61  primary key is a
7f30: 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20   single column. 
7f40: 20 4d 75 6c 74 69 2d 63 6f 6c 75 6d 6e 20 70 72   Multi-column pr
7f50: 69 6d 61 72 79 20 6b 65 79 73 20 64 6f 20 6e 6f  imary keys do no
7f60: 74 20 62 65 63 6f 6d 65 0a 61 6c 69 61 73 65 73  t become.aliases
7f70: 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 2e 29   for the rowid.)
7f80: 5e 0a 5e 54 68 65 20 41 55 54 4f 49 4e 43 52 45  ^.^The AUTOINCRE
7f90: 4d 45 4e 54 20 6b 65 79 77 6f 72 64 20 6f 6e 6c  MENT keyword onl
7fa0: 79 20 77 6f 72 6b 73 20 6f 6e 20 61 20 63 6f 6c  y works on a col
7fb0: 75 6d 6e 20 74 68 61 74 20 69 73 20 61 6e 20 61  umn that is an a
7fc0: 6c 69 61 73 0a 66 6f 72 20 74 68 65 20 72 6f 77  lias.for the row
7fd0: 69 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e 6f 74 65  id.</p>..<p>Note
7fe0: 20 74 68 61 74 20 73 65 61 72 63 68 65 73 20 61   that searches a
7ff0: 67 61 69 6e 73 74 20 61 20 72 6f 77 69 64 20 61  gainst a rowid a
8000: 72 65 20 67 65 6e 65 72 61 6c 6c 79 20 61 62 6f  re generally abo
8010: 75 74 20 74 77 69 63 65 20 61 73 0a 66 61 73 74  ut twice as.fast
8020: 20 61 73 20 73 65 61 72 63 68 65 73 20 61 67 61   as searches aga
8030: 69 6e 73 74 20 61 6e 79 20 6f 74 68 65 72 20 50  inst any other P
8040: 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 69 6e  RIMARY KEY or in
8050: 64 65 78 65 64 20 76 61 6c 75 65 2e 0a 3c 2f 70  dexed value..</p
8060: 3e 0a 0a 3c 70 3e 3c 62 3e 47 6f 6f 66 79 20 62  >..<p><b>Goofy b
8070: 65 68 61 76 69 6f 72 20 61 6c 65 72 74 3a 3c 2f  ehavior alert:</
8080: 62 3e 20 20 5e 28 54 68 65 20 66 6f 6c 6c 6f 77  b>  ^(The follow
8090: 69 6e 67 20 74 68 72 65 65 20 64 65 63 6c 61 72  ing three declar
80a0: 61 74 69 6f 6e 73 20 61 6c 6c 20 63 61 75 73 65  ations all cause
80b0: 0a 74 68 65 20 63 6f 6c 75 6d 6e 20 22 78 22 20  .the column "x" 
80c0: 62 65 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  be an alias for 
80d0: 74 68 65 20 72 6f 77 69 64 3a 3c 2f 70 3e 0a 0a  the rowid:</p>..
80e0: 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45  <ul>.<li><tt>CRE
80f0: 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e  ATE TABLE t(x IN
8100: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
8110: 59 20 41 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74  Y ASC, y, z);</t
8120: 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54  t>.<li><tt>CREAT
8130: 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45  E TABLE t(x INTE
8140: 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41  GER, y, z, PRIMA
8150: 52 59 20 4b 45 59 28 78 20 41 53 43 29 29 3b 3c  RY KEY(x ASC));<
8160: 2f 74 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45  /tt>.<li><tt>CRE
8170: 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e  ATE TABLE t(x IN
8180: 54 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49  TEGER, y, z, PRI
8190: 4d 41 52 59 20 4b 45 59 28 78 20 44 45 53 43 29  MARY KEY(x DESC)
81a0: 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a  );</tt>.</ul>)^.
81b0: 0a 3c 70 3e 42 75 74 2c 20 69 6e 20 63 6f 6e 74  .<p>But, in cont
81c0: 72 61 73 74 2c 20 5e 28 74 68 65 20 66 6f 6c 6c  rast, ^(the foll
81d0: 6f 77 69 6e 67 20 64 65 63 6c 61 72 61 74 69 6f  owing declaratio
81e0: 6e 20 64 6f 65 73 20 3c 75 3e 6e 6f 74 3c 2f 75  n does <u>not</u
81f0: 3e 20 72 65 73 75 6c 74 20 69 6e 0a 22 78 22 20  > result in."x" 
8200: 62 65 69 6e 67 20 61 6e 20 61 6c 69 61 73 20 66  being an alias f
8210: 6f 72 20 74 68 65 20 72 6f 77 69 64 3a 3c 2f 70  or the rowid:</p
8220: 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e  >..<ul>.<li><tt>
8230: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 28 78  CREATE TABLE t(x
8240: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
8250: 20 4b 45 59 20 44 45 53 43 2c 20 79 2c 20 7a 29   KEY DESC, y, z)
8260: 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a  ;</tt>.</ul>)^..
8270: 3c 70 3e 54 68 69 73 20 61 73 79 6d 6d 65 74 72  <p>This asymmetr
8280: 69 63 61 6c 20 62 65 68 61 76 69 6f 72 20 69 73  ical behavior is
8290: 20 75 6e 66 6f 72 74 75 6e 61 74 65 20 61 6e 64   unfortunate and
82a0: 20 69 73 20 72 65 61 6c 6c 79 20 64 75 65 20 74   is really due t
82b0: 6f 20 61 20 62 75 67 0a 69 6e 20 74 68 65 20 70  o a bug.in the p
82c0: 61 72 73 65 72 20 69 6e 20 65 61 72 6c 79 20 76  arser in early v
82d0: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
82e0: 65 2e 20 20 42 75 74 20 66 69 78 69 6e 67 20 74  e.  But fixing t
82f0: 68 65 20 62 75 67 20 77 6f 75 6c 64 0a 72 65 73  he bug would.res
8300: 75 6c 74 20 69 6e 20 76 65 72 79 20 73 65 72 69  ult in very seri
8310: 6f 75 73 20 62 61 63 6b 77 61 72 64 73 20 69 6e  ous backwards in
8320: 63 6f 6d 70 61 74 69 62 69 6c 69 74 69 65 73 2e  compatibilities.
8330: 20 20 54 68 65 20 53 51 4c 69 74 65 20 64 65 76    The SQLite dev
8340: 65 6c 6f 70 65 72 73 0a 66 65 65 6c 20 74 68 61  elopers.feel tha
8350: 74 20 67 6f 6f 66 79 20 62 65 68 61 76 69 6f 72  t goofy behavior
8360: 20 69 6e 20 61 6e 20 63 6f 72 6e 65 72 20 63 61   in an corner ca
8370: 73 65 20 69 73 20 66 61 72 20 62 65 74 74 65 72  se is far better
8380: 20 74 68 61 6e 0a 61 20 63 6f 6d 70 61 74 69 62   than.a compatib
8390: 69 6c 69 74 79 20 62 72 65 61 6b 2c 20 73 6f 20  ility break, so 
83a0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 62 65 68  the original beh
83b0: 61 76 69 6f 72 20 69 73 20 72 65 74 61 69 6e 65  avior is retaine
83c0: 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  d.</p>..<tcl>.##
83d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
83e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
83f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8400: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8410: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
8420: 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 52 49  tion {CREATE TRI
8430: 47 47 45 52 7d 20 63 72 65 61 74 65 74 72 69 67  GGER} createtrig
8440: 67 65 72 20 7b 7b 43 52 45 41 54 45 20 54 52 49  ger {{CREATE TRI
8450: 47 47 45 52 7d 7d 0a 0a 42 75 62 62 6c 65 44 69  GGER}}..BubbleDi
8460: 61 67 72 61 6d 20 63 72 65 61 74 65 2d 74 72 69  agram create-tri
8470: 67 67 65 72 2d 73 74 6d 74 20 31 0a 3c 2f 74 63  gger-stmt 1.</tc
8480: 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41  l>..<p>^The CREA
8490: 54 45 20 54 52 49 47 47 45 52 20 73 74 61 74 65  TE TRIGGER state
84a0: 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20  ment is used to 
84b0: 61 64 64 20 74 72 69 67 67 65 72 73 20 74 6f 20  add triggers to 
84c0: 74 68 65 20 0a 64 61 74 61 62 61 73 65 20 73 63  the .database sc
84d0: 68 65 6d 61 2e 20 5e 54 72 69 67 67 65 72 73 20  hema. ^Triggers 
84e0: 61 72 65 20 64 61 74 61 62 61 73 65 20 6f 70 65  are database ope
84f0: 72 61 74 69 6f 6e 73 20 0a 74 68 61 74 20 61 72  rations .that ar
8500: 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  e automatically 
8510: 70 65 72 66 6f 72 6d 65 64 20 77 68 65 6e 20 61  performed when a
8520: 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61 62   specified datab
8530: 61 73 65 20 65 76 65 6e 74 0a 6f 63 63 75 72 73  ase event.occurs
8540: 2e 20 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 74  .  </p>..<p>^A t
8550: 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 73 70  rigger may be sp
8560: 65 63 69 66 69 65 64 20 74 6f 20 66 69 72 65 20  ecified to fire 
8570: 77 68 65 6e 65 76 65 72 20 61 20 5b 44 45 4c 45  whenever a [DELE
8580: 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 0a 6f  TE], [INSERT],.o
8590: 72 20 5b 55 50 44 41 54 45 5d 20 6f 66 20 61 0a  r [UPDATE] of a.
85a0: 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62  particular datab
85b0: 61 73 65 20 74 61 62 6c 65 20 6f 63 63 75 72 73  ase table occurs
85c0: 2c 20 6f 72 20 77 68 65 6e 65 76 65 72 20 61 6e  , or whenever an
85d0: 20 5b 55 50 44 41 54 45 5d 20 6f 63 63 75 72 73   [UPDATE] occurs
85e0: 20 6f 6e 0a 6f 6e 20 6f 6e 65 20 6f 72 20 6d 6f   on.on one or mo
85f0: 72 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c  re specified col
8600: 75 6d 6e 73 20 6f 66 20 61 20 74 61 62 6c 65 2e  umns of a table.
8610: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 74 20 74 68 69  </p>..<p>^At thi
8620: 73 20 74 69 6d 65 20 53 51 4c 69 74 65 20 73 75  s time SQLite su
8630: 70 70 6f 72 74 73 20 6f 6e 6c 79 20 46 4f 52 20  pports only FOR 
8640: 45 41 43 48 20 52 4f 57 20 74 72 69 67 67 65 72  EACH ROW trigger
8650: 73 2c 20 6e 6f 74 20 46 4f 52 20 45 41 43 48 0a  s, not FOR EACH.
8660: 53 54 41 54 45 4d 45 4e 54 20 74 72 69 67 67 65  STATEMENT trigge
8670: 72 73 2e 20 5e 48 65 6e 63 65 20 65 78 70 6c 69  rs. ^Hence expli
8680: 63 69 74 6c 79 20 73 70 65 63 69 66 79 69 6e 67  citly specifying
8690: 20 46 4f 52 20 45 41 43 48 20 52 4f 57 20 69 73   FOR EACH ROW is
86a0: 20 6f 70 74 69 6f 6e 61 6c 2e 0a 5e 46 4f 52 20   optional..^FOR 
86b0: 45 41 43 48 20 52 4f 57 20 69 6d 70 6c 69 65 73  EACH ROW implies
86c0: 20 74 68 61 74 20 74 68 65 20 53 51 4c 20 73 74   that the SQL st
86d0: 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69  atements specifi
86e0: 65 64 20 69 6e 20 74 68 65 20 74 72 69 67 67 65  ed in the trigge
86f0: 72 0a 6d 61 79 20 62 65 20 65 78 65 63 75 74 65  r.may be execute
8700: 64 20 28 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  d (depending on 
8710: 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 29  the WHEN clause)
8720: 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61   for each databa
8730: 73 65 20 72 6f 77 20 62 65 69 6e 67 0a 69 6e 73  se row being.ins
8740: 65 72 74 65 64 2c 20 75 70 64 61 74 65 64 20 6f  erted, updated o
8750: 72 20 64 65 6c 65 74 65 64 20 62 79 20 74 68 65  r deleted by the
8760: 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73 69   statement causi
8770: 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 74  ng the trigger t
8780: 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  o fire.</p>..<p>
8790: 5e 28 42 6f 74 68 20 74 68 65 20 57 48 45 4e 20  ^(Both the WHEN 
87a0: 63 6c 61 75 73 65 20 61 6e 64 20 74 68 65 20 74  clause and the t
87b0: 72 69 67 67 65 72 20 61 63 74 69 6f 6e 73 20 6d  rigger actions m
87c0: 61 79 20 61 63 63 65 73 73 20 65 6c 65 6d 65 6e  ay access elemen
87d0: 74 73 20 6f 66 20 0a 74 68 65 20 72 6f 77 20 62  ts of .the row b
87e0: 65 69 6e 67 20 69 6e 73 65 72 74 65 64 2c 20 64  eing inserted, d
87f0: 65 6c 65 74 65 64 20 6f 72 20 75 70 64 61 74 65  eleted or update
8800: 64 20 75 73 69 6e 67 20 72 65 66 65 72 65 6e 63  d using referenc
8810: 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 0a  es of the form .
8820: 22 4e 45 57 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e  "NEW.<i>column-n
8830: 61 6d 65 3c 2f 69 3e 22 20 61 6e 64 20 22 4f 4c  ame</i>" and "OL
8840: 44 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  D.<i>column-name
8850: 3c 2f 69 3e 22 2c 20 77 68 65 72 65 0a 3c 69 3e  </i>", where.<i>
8860: 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 20  column-name</i> 
8870: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
8880: 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68 65   column from the
8890: 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20   table that the 
88a0: 74 72 69 67 67 65 72 0a 69 73 20 61 73 73 6f 63  trigger.is assoc
88b0: 69 61 74 65 64 20 77 69 74 68 2e 29 5e 20 5e 28  iated with.)^ ^(
88c0: 4f 4c 44 20 61 6e 64 20 4e 45 57 20 72 65 66 65  OLD and NEW refe
88d0: 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20  rences may only 
88e0: 62 65 20 75 73 65 64 20 69 6e 20 74 72 69 67 67  be used in trigg
88f0: 65 72 73 20 6f 6e 0a 65 76 65 6e 74 73 20 66 6f  ers on.events fo
8900: 72 20 77 68 69 63 68 20 74 68 65 79 20 61 72 65  r which they are
8910: 20 72 65 6c 65 76 61 6e 74 2c 20 61 73 20 66 6f   relevant, as fo
8920: 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 61 62  llows:</p>..<tab
8930: 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c  le border=0 cell
8940: 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e  padding=10>.<tr>
8950: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
8960: 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20  " align="right" 
8970: 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 49 4e 53  width=120><i>INS
8980: 45 52 54 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64  ERT</i></td>.<td
8990: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45   valign="top">NE
89a0: 57 20 72 65 66 65 72 65 6e 63 65 73 20 61 72 65  W references are
89b0: 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72   valid</td>.</tr
89c0: 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67  >.<tr>.<td valig
89d0: 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72  n="top" align="r
89e0: 69 67 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e  ight" width=120>
89f0: 3c 69 3e 55 50 44 41 54 45 3c 2f 69 3e 3c 2f 74  <i>UPDATE</i></t
8a00: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  d>.<td valign="t
8a10: 6f 70 22 3e 4e 45 57 20 61 6e 64 20 4f 4c 44 20  op">NEW and OLD 
8a20: 72 65 66 65 72 65 6e 63 65 73 20 61 72 65 20 76  references are v
8a30: 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  alid</td>.</tr>.
8a40: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
8a50: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
8a60: 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69  ht" width=120><i
8a70: 3e 44 45 4c 45 54 45 3c 2f 69 3e 3c 2f 74 64 3e  >DELETE</i></td>
8a80: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
8a90: 22 3e 4f 4c 44 20 72 65 66 65 72 65 6e 63 65 73  ">OLD references
8aa0: 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a   are valid</td>.
8ab0: 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  </tr>.</table>.<
8ac0: 2f 70 3e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 61 20  /p>)^..<p>^If a 
8ad0: 57 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20 73  WHEN clause is s
8ae0: 75 70 70 6c 69 65 64 2c 20 74 68 65 20 53 51 4c  upplied, the SQL
8af0: 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63   statements spec
8b00: 69 66 69 65 64 0a 61 72 65 20 6f 6e 6c 79 20 65  ified.are only e
8b10: 78 65 63 75 74 65 64 20 66 6f 72 20 72 6f 77 73  xecuted for rows
8b20: 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 57   for which the W
8b30: 48 45 4e 0a 63 6c 61 75 73 65 20 69 73 20 74 72  HEN.clause is tr
8b40: 75 65 2e 20 5e 49 66 20 6e 6f 20 57 48 45 4e 20  ue. ^If no WHEN 
8b50: 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c 69  clause is suppli
8b60: 65 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61 74  ed, the SQL stat
8b70: 65 6d 65 6e 74 73 0a 61 72 65 20 65 78 65 63 75  ements.are execu
8b80: 74 65 64 20 66 6f 72 20 61 6c 6c 20 72 6f 77 73  ted for all rows
8b90: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 42  .</p>..<p>^The B
8ba0: 45 46 4f 52 45 20 6f 72 20 41 46 54 45 52 20 6b  EFORE or AFTER k
8bb0: 65 79 77 6f 72 64 20 64 65 74 65 72 6d 69 6e 65  eyword determine
8bc0: 73 20 77 68 65 6e 20 74 68 65 20 74 72 69 67 67  s when the trigg
8bd0: 65 72 20 61 63 74 69 6f 6e 73 0a 77 69 6c 6c 20  er actions.will 
8be0: 62 65 20 65 78 65 63 75 74 65 64 20 72 65 6c 61  be executed rela
8bf0: 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e 73 65  tive to the inse
8c00: 72 74 69 6f 6e 2c 20 6d 6f 64 69 66 69 63 61 74  rtion, modificat
8c10: 69 6f 6e 20 6f 72 20 72 65 6d 6f 76 61 6c 20 6f  ion or removal o
8c20: 66 20 74 68 65 0a 61 73 73 6f 63 69 61 74 65 64  f the.associated
8c30: 20 72 6f 77 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41   row.</p>..<p>^A
8c40: 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20  n [ON CONFLICT] 
8c50: 63 6c 61 75 73 65 20 6d 61 79 20 62 65 20 73 70  clause may be sp
8c60: 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
8c70: 6f 66 20 61 6e 20 5b 55 50 44 41 54 45 5d 20 6f  of an [UPDATE] o
8c80: 72 20 5b 49 4e 53 45 52 54 5d 0a 61 63 74 69 6f  r [INSERT].actio
8c90: 6e 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  n within the bod
8ca0: 79 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72  y of the trigger
8cb0: 2e 0a 5e 48 6f 77 65 76 65 72 20 69 66 20 61 6e  ..^However if an
8cc0: 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 63   [ON CONFLICT] c
8cd0: 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69  lause is specifi
8ce0: 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 0a 74  ed as part of .t
8cf0: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75  he statement cau
8d00: 73 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72  sing the trigger
8d10: 20 74 6f 20 66 69 72 65 2c 20 74 68 65 6e 20 63   to fire, then c
8d20: 6f 6e 66 6c 69 63 74 20 68 61 6e 64 6c 69 6e 67  onflict handling
8d30: 0a 70 6f 6c 69 63 79 20 6f 66 20 74 68 65 20 6f  .policy of the o
8d40: 75 74 65 72 20 73 74 61 74 65 6d 65 6e 74 20 69  uter statement i
8d50: 73 20 75 73 65 64 20 69 6e 73 74 65 61 64 2e 3c  s used instead.<
8d60: 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72  /p>..<p>^Trigger
8d70: 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  s are automatica
8d80: 6c 6c 79 20 5b 44 52 4f 50 20 54 52 49 47 47 45  lly [DROP TRIGGE
8d90: 52 20 7c 20 64 72 6f 70 70 65 64 5d 0a 77 68 65  R | dropped].whe
8da0: 6e 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  n the table that
8db0: 20 74 68 65 79 20 61 72 65 20 0a 61 73 73 6f 63   they are .assoc
8dc0: 69 61 74 65 64 20 77 69 74 68 20 28 74 68 65 20  iated with (the 
8dd0: 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69  <i>table-name</i
8de0: 3e 20 74 61 62 6c 65 29 20 69 73 20 0a 5b 44 52  > table) is .[DR
8df0: 4f 50 20 54 41 42 4c 45 20 7c 20 64 72 6f 70 70  OP TABLE | dropp
8e00: 65 64 5d 2e 20 20 5e 48 6f 77 65 76 65 72 20 69  ed].  ^However i
8e10: 66 20 74 68 65 20 74 68 65 20 74 72 69 67 67 65  f the the trigge
8e20: 72 20 61 63 74 69 6f 6e 73 20 72 65 66 65 72 65  r actions refere
8e30: 6e 63 65 0a 6f 74 68 65 72 20 74 61 62 6c 65 73  nce.other tables
8e40: 2c 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73  , the trigger is
8e50: 20 6e 6f 74 20 64 72 6f 70 70 65 64 20 6f 72 20   not dropped or 
8e60: 6d 6f 64 69 66 69 65 64 20 69 66 20 74 68 6f 73  modified if thos
8e70: 65 20 6f 74 68 65 72 0a 74 61 62 6c 65 73 20 61  e other.tables a
8e80: 72 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 20 7c  re [DROP TABLE |
8e90: 20 64 72 6f 70 70 65 64 5d 20 6f 72 20 5b 41 4c   dropped] or [AL
8ea0: 54 45 52 20 54 41 42 4c 45 20 7c 20 6d 6f 64 69  TER TABLE | modi
8eb0: 66 69 65 64 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  fied].</p>..<p>^
8ec0: 54 72 69 67 67 65 72 73 20 61 72 65 20 72 65 6d  Triggers are rem
8ed0: 6f 76 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b  oved using the [
8ee0: 44 52 4f 50 20 54 52 49 47 47 45 52 5d 20 73 74  DROP TRIGGER] st
8ef0: 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68  atement.</p>..<h
8f00: 33 3e 53 79 6e 74 61 78 20 52 65 73 74 72 69 63  3>Syntax Restric
8f10: 74 69 6f 6e 73 20 4f 6e 20 55 50 44 41 54 45 2c  tions On UPDATE,
8f20: 20 44 45 4c 45 54 45 2c 20 61 6e 64 20 49 4e 53   DELETE, and INS
8f30: 45 52 54 20 53 74 61 74 65 6d 65 6e 74 73 20 57  ERT Statements W
8f40: 69 74 68 69 6e 0a 20 20 20 20 54 72 69 67 67 65  ithin.    Trigge
8f50: 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65  rs</h3>..<p>^The
8f60: 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45   [UPDATE], [DELE
8f70: 54 45 5d 2c 20 61 6e 64 20 5b 49 4e 53 45 52 54  TE], and [INSERT
8f80: 5d 0a 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  ].statements wit
8f90: 68 69 6e 20 74 72 69 67 67 65 72 73 20 64 6f 20  hin triggers do 
8fa0: 6e 6f 74 20 73 75 70 70 6f 72 74 0a 74 68 65 20  not support.the 
8fb0: 66 75 6c 6c 20 73 79 6e 74 61 78 20 66 6f 72 20  full syntax for 
8fc0: 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54  [UPDATE], [DELET
8fd0: 45 5d 2c 20 61 6e 64 20 5b 49 4e 53 45 52 54 5d  E], and [INSERT]
8fe0: 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 54 68   statements.  Th
8ff0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 72 65 73 74  e following.rest
9000: 72 69 63 74 69 6f 6e 73 20 61 70 70 6c 79 3a 3c  rictions apply:<
9010: 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  /p>..<ul>.<li><p
9020: 3e 0a 20 20 5e 28 54 68 65 20 6e 61 6d 65 20 6f  >.  ^(The name o
9030: 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62  f the table to b
9040: 65 20 6d 6f 64 69 66 69 65 64 20 69 6e 20 61 6e  e modified in an
9050: 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45   [UPDATE], [DELE
9060: 54 45 5d 2c 20 6f 72 20 5b 49 4e 53 45 52 54 5d  TE], or [INSERT]
9070: 0a 20 20 73 74 61 74 65 6d 65 6e 74 20 6d 75 73  .  statement mus
9080: 74 20 62 65 20 61 6e 20 75 6e 71 75 61 6c 69 66  t be an unqualif
9090: 69 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 2e 20  ied table name. 
90a0: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
90b0: 20 6f 6e 65 20 6d 75 73 74 0a 20 20 75 73 65 20   one must.  use 
90c0: 6a 75 73 74 20 22 3c 69 3e 74 61 62 6c 65 6e 61  just "<i>tablena
90d0: 6d 65 3c 2f 69 3e 22 20 6e 6f 74 20 22 3c 69 3e  me</i>" not "<i>
90e0: 64 61 74 61 62 61 73 65 3c 2f 69 3e 3c 62 3e 2e  database</i><b>.
90f0: 3c 2f 62 3e 3c 69 3e 74 61 62 6c 65 6e 61 6d 65  </b><i>tablename
9100: 3c 2f 69 3e 22 0a 20 20 77 68 65 6e 20 73 70 65  </i>".  when spe
9110: 63 69 66 79 69 6e 67 20 74 68 65 20 74 61 62 6c  cifying the tabl
9120: 65 2e 29 5e 20 20 5e 54 68 65 20 74 61 62 6c 65  e.)^  ^The table
9130: 20 74 6f 20 62 65 20 6d 6f 64 69 66 69 65 64 20   to be modified 
9140: 6d 75 73 74 20 65 78 69 73 74 20 69 6e 20 74 68  must exist in th
9150: 65 0a 20 20 73 61 6d 65 20 64 61 74 61 62 61 73  e.  same databas
9160: 65 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 6f  e as the table o
9170: 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20  r view to which 
9180: 74 68 65 20 74 72 69 67 67 65 72 20 69 73 20 61  the trigger is a
9190: 74 74 61 63 68 65 64 2e 0a 20 20 3c 2f 70 3e 3c  ttached..  </p><
91a0: 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20  /li>..<li><p>.  
91b0: 5e 54 68 65 20 22 49 4e 53 45 52 54 20 49 4e 54  ^The "INSERT INT
91c0: 4f 20 3c 69 3e 74 61 62 6c 65 3c 2f 69 3e 20 44  O <i>table</i> D
91d0: 45 46 41 55 4c 54 20 56 41 4c 55 45 53 22 20 66  EFAULT VALUES" f
91e0: 6f 72 6d 20 6f 66 20 74 68 65 20 5b 49 4e 53 45  orm of the [INSE
91f0: 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 0a 20 20  RT] statement.  
9200: 69 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64  is not supported
9210: 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c  ..  </p></li>..<
9220: 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68 65 20 49 4e  li><p>.  ^The IN
9230: 44 45 58 45 44 20 42 59 20 61 6e 64 20 4e 4f 54  DEXED BY and NOT
9240: 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 73   INDEXED clauses
9250: 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72 74   are not support
9260: 65 64 20 66 6f 72 20 5b 55 50 44 41 54 45 5d 20  ed for [UPDATE] 
9270: 61 6e 64 0a 20 20 5b 44 45 4c 45 54 45 5d 20 73  and.  [DELETE] s
9280: 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 3c 2f 70  tatements..  </p
9290: 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ></li>..<li><p>.
92a0: 20 20 5e 28 54 68 65 20 4f 52 44 45 52 20 42 59    ^(The ORDER BY
92b0: 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73   and LIMIT claus
92c0: 65 73 20 6f 6e 20 5b 55 50 44 41 54 45 5d 20 61  es on [UPDATE] a
92d0: 6e 64 20 5b 44 45 4c 45 54 45 5d 20 73 74 61 74  nd [DELETE] stat
92e0: 65 6d 65 6e 74 73 20 61 72 65 20 6e 6f 74 0a 20  ements are not. 
92f0: 20 73 75 70 70 6f 72 74 65 64 2e 20 20 4f 52 44   supported.  ORD
9300: 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20  ER BY and LIMIT 
9310: 61 72 65 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79  are not normally
9320: 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72 20 5b   supported for [
9330: 55 50 44 41 54 45 5d 20 6f 72 0a 20 20 5b 44 45  UPDATE] or.  [DE
9340: 4c 45 54 45 5d 20 69 6e 20 61 6e 79 20 63 6f 6e  LETE] in any con
9350: 74 65 78 74 20 62 75 74 20 63 61 6e 20 62 65 20  text but can be 
9360: 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 6f 70 2d  enabled for top-
9370: 6c 65 76 65 6c 20 73 74 61 74 65 6d 65 6e 74 73  level statements
9380: 0a 20 20 75 73 69 6e 67 20 74 68 65 20 5b 53 51  .  using the [SQ
9390: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
93a0: 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d  TE_DELETE_LIMIT]
93b0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
93c0: 74 69 6f 6e 2e 20 20 48 6f 77 65 76 65 72 2c 0a  tion.  However,.
93d0: 20 20 74 68 61 74 20 63 6f 6d 70 69 6c 65 2d 74    that compile-t
93e0: 69 6d 65 20 6f 70 74 69 6f 6e 20 6f 6e 6c 79 20  ime option only 
93f0: 61 70 70 6c 69 65 73 20 74 6f 20 74 6f 70 2d 6c  applies to top-l
9400: 65 76 65 6c 20 5b 55 50 44 41 54 45 5d 20 61 6e  evel [UPDATE] an
9410: 64 20 5b 44 45 4c 45 54 45 5d 0a 20 20 73 74 61  d [DELETE].  sta
9420: 74 65 6d 65 6e 74 73 2c 20 6e 6f 74 20 5b 55 50  tements, not [UP
9430: 44 41 54 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54  DATE] and [DELET
9440: 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  E] statements wi
9450: 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 29 5e  thin triggers.)^
9460: 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75  .  </p></li>.</u
9470: 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  l>..<tcl>hd_frag
9480: 6d 65 6e 74 20 69 6e 73 74 65 61 64 5f 6f 66 5f  ment instead_of_
9490: 74 72 69 67 67 65 72 20 7b 49 4e 53 54 45 41 44  trigger {INSTEAD
94a0: 20 4f 46 7d 20 7b 49 4e 53 54 45 41 44 20 4f 46   OF} {INSTEAD OF
94b0: 20 74 72 69 67 67 65 72 7d 3c 2f 74 63 6c 3e 0a   trigger}</tcl>.
94c0: 3c 68 33 3e 49 4e 53 54 45 41 44 20 4f 46 20 74  <h3>INSTEAD OF t
94d0: 72 69 67 67 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e  rigger</h3>..<p>
94e0: 5e 54 72 69 67 67 65 72 73 20 6d 61 79 20 62 65  ^Triggers may be
94f0: 20 63 72 65 61 74 65 64 20 6f 6e 20 5b 76 69 65   created on [vie
9500: 77 73 5d 2c 20 61 73 20 77 65 6c 6c 20 61 73 20  ws], as well as 
9510: 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73 2c  ordinary tables,
9520: 20 62 79 0a 73 70 65 63 69 66 79 69 6e 67 20 49   by.specifying I
9530: 4e 53 54 45 41 44 20 4f 46 20 69 6e 20 74 68 65  NSTEAD OF in the
9540: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
9550: 73 74 61 74 65 6d 65 6e 74 2e 20 0a 5e 49 66 20  statement. .^If 
9560: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 4f 4e 20 49  one or more ON I
9570: 4e 53 45 52 54 2c 20 4f 4e 20 44 45 4c 45 54 45  NSERT, ON DELETE
9580: 0a 6f 72 20 4f 4e 20 55 50 44 41 54 45 20 74 72  .or ON UPDATE tr
9590: 69 67 67 65 72 73 20 61 72 65 20 64 65 66 69 6e  iggers are defin
95a0: 65 64 20 6f 6e 20 61 20 76 69 65 77 2c 20 74 68  ed on a view, th
95b0: 65 6e 20 69 74 20 69 73 20 6e 6f 74 20 61 6e 0a  en it is not an.
95c0: 65 72 72 6f 72 20 74 6f 20 65 78 65 63 75 74 65  error to execute
95d0: 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45   an INSERT, DELE
95e0: 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 61  TE or UPDATE sta
95f0: 74 65 6d 65 6e 74 20 6f 6e 20 74 68 65 20 76 69  tement on the vi
9600: 65 77 2c 20 0a 72 65 73 70 65 63 74 69 76 65 6c  ew, .respectivel
9610: 79 2e 20 20 5e 49 6e 73 74 65 61 64 2c 0a 65 78  y.  ^Instead,.ex
9620: 65 63 75 74 69 6e 67 20 61 6e 20 49 4e 53 45 52  ecuting an INSER
9630: 54 2c 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  T, DELETE or UPD
9640: 41 54 45 20 6f 6e 20 74 68 65 20 76 69 65 77 20  ATE on the view 
9650: 63 61 75 73 65 73 20 74 68 65 20 61 73 73 6f 63  causes the assoc
9660: 69 61 74 65 64 0a 74 72 69 67 67 65 72 73 20 74  iated.triggers t
9670: 6f 20 66 69 72 65 2e 20 5e 54 68 65 20 72 65 61  o fire. ^The rea
9680: 6c 20 74 61 62 6c 65 73 20 75 6e 64 65 72 6c 79  l tables underly
9690: 69 6e 67 20 74 68 65 20 76 69 65 77 20 61 72 65  ing the view are
96a0: 20 6e 6f 74 20 6d 6f 64 69 66 69 65 64 0a 28 65   not modified.(e
96b0: 78 63 65 70 74 20 70 6f 73 73 69 62 6c 79 20 65  xcept possibly e
96c0: 78 70 6c 69 63 69 74 6c 79 2c 20 62 79 20 61 20  xplicitly, by a 
96d0: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 29  trigger program)
96e0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20  .</p>..<p>^Note 
96f0: 74 68 61 74 20 74 68 65 20 5b 73 71 6c 69 74 65  that the [sqlite
9700: 33 5f 63 68 61 6e 67 65 73 28 29 5d 20 61 6e 64  3_changes()] and
9710: 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f   [sqlite3_total_
9720: 63 68 61 6e 67 65 73 28 29 5d 20 69 6e 74 65 72  changes()] inter
9730: 66 61 63 65 73 0a 64 6f 20 6e 6f 74 20 63 6f 75  faces.do not cou
9740: 6e 74 20 49 4e 53 54 45 41 44 20 4f 46 20 74 72  nt INSTEAD OF tr
9750: 69 67 67 65 72 20 66 69 72 69 6e 67 73 2c 20 62  igger firings, b
9760: 75 74 20 74 68 65 0a 5b 63 6f 75 6e 74 5f 63 68  ut the.[count_ch
9770: 61 6e 67 65 73 20 70 72 61 67 6d 61 5d 20 64 6f  anges pragma] do
9780: 65 73 20 63 6f 75 6e 74 20 49 4e 53 54 45 41 44  es count INSTEAD
9790: 20 4f 46 20 74 72 69 67 67 65 72 20 66 69 72 69   OF trigger firi
97a0: 6e 67 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 45 78 61  ng.</p>..<h3>Exa
97b0: 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  mples</h3>..<p>^
97c0: 28 41 73 73 75 6d 69 6e 67 20 74 68 61 74 20 63  (Assuming that c
97d0: 75 73 74 6f 6d 65 72 20 72 65 63 6f 72 64 73 20  ustomer records 
97e0: 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  are stored in th
97f0: 65 20 22 63 75 73 74 6f 6d 65 72 73 22 20 74 61  e "customers" ta
9800: 62 6c 65 2c 20 61 6e 64 0a 74 68 61 74 20 6f 72  ble, and.that or
9810: 64 65 72 20 72 65 63 6f 72 64 73 20 61 72 65 20  der records are 
9820: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 22 6f  stored in the "o
9830: 72 64 65 72 73 22 20 74 61 62 6c 65 2c 20 74 68  rders" table, th
9840: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 72 69 67  e following trig
9850: 67 65 72 0a 65 6e 73 75 72 65 73 20 74 68 61 74  ger.ensures that
9860: 20 61 6c 6c 20 61 73 73 6f 63 69 61 74 65 64 20   all associated 
9870: 6f 72 64 65 72 73 20 61 72 65 20 72 65 64 69 72  orders are redir
9880: 65 63 74 65 64 20 77 68 65 6e 20 61 20 63 75 73  ected when a cus
9890: 74 6f 6d 65 72 20 63 68 61 6e 67 65 73 0a 68 69  tomer changes.hi
98a0: 73 20 6f 72 20 68 65 72 20 61 64 64 72 65 73 73  s or her address
98b0: 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d  :</p>..<tcl>Exam
98c0: 70 6c 65 20 7b 0a 43 52 45 41 54 45 20 54 52 49  ple {.CREATE TRI
98d0: 47 47 45 52 20 75 70 64 61 74 65 5f 63 75 73 74  GGER update_cust
98e0: 6f 6d 65 72 5f 61 64 64 72 65 73 73 20 55 50 44  omer_address UPD
98f0: 41 54 45 20 4f 46 20 61 64 64 72 65 73 73 20 4f  ATE OF address O
9900: 4e 20 63 75 73 74 6f 6d 65 72 73 20 0a 20 20 42  N customers .  B
9910: 45 47 49 4e 0a 20 20 20 20 55 50 44 41 54 45 20  EGIN.    UPDATE 
9920: 6f 72 64 65 72 73 20 53 45 54 20 61 64 64 72 65  orders SET addre
9930: 73 73 20 3d 20 6e 65 77 2e 61 64 64 72 65 73 73  ss = new.address
9940: 20 57 48 45 52 45 20 63 75 73 74 6f 6d 65 72 5f   WHERE customer_
9950: 6e 61 6d 65 20 3d 20 6f 6c 64 2e 6e 61 6d 65 3b  name = old.name;
9960: 0a 20 20 45 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a  .  END;.}</tcl>.
9970: 0a 3c 70 3e 57 69 74 68 20 74 68 69 73 20 74 72  .<p>With this tr
9980: 69 67 67 65 72 20 69 6e 73 74 61 6c 6c 65 64 2c  igger installed,
9990: 20 65 78 65 63 75 74 69 6e 67 20 74 68 65 20 73   executing the s
99a0: 74 61 74 65 6d 65 6e 74 3a 3c 2f 70 3e 0a 0a 3c  tatement:</p>..<
99b0: 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50  tcl>Example {.UP
99c0: 44 41 54 45 20 63 75 73 74 6f 6d 65 72 73 20 53  DATE customers S
99d0: 45 54 20 61 64 64 72 65 73 73 20 3d 20 27 31 20  ET address = '1 
99e0: 4d 61 69 6e 20 53 74 2e 27 20 57 48 45 52 45 20  Main St.' WHERE 
99f0: 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e  name = 'Jack Jon
9a00: 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  es';.}</tcl>..<p
9a10: 3e 63 61 75 73 65 73 20 74 68 65 20 66 6f 6c 6c  >causes the foll
9a20: 6f 77 69 6e 67 20 74 6f 20 62 65 20 61 75 74 6f  owing to be auto
9a30: 6d 61 74 69 63 61 6c 6c 79 20 65 78 65 63 75 74  matically execut
9a40: 65 64 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78  ed:</p>..<tcl>Ex
9a50: 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 6f  ample {.UPDATE o
9a60: 72 64 65 72 73 20 53 45 54 20 61 64 64 72 65 73  rders SET addres
9a70: 73 20 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e 27  s = '1 Main St.'
9a80: 20 57 48 45 52 45 20 63 75 73 74 6f 6d 65 72 5f   WHERE customer_
9a90: 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e  name = 'Jack Jon
9aa0: 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 29 5e 0a 0a  es';.}</tcl>)^..
9ab0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
9ac0: 20 75 6e 64 65 66 5f 62 65 66 6f 72 65 20 7b 75   undef_before {u
9ad0: 6e 64 65 66 69 6e 65 64 20 42 45 46 4f 52 45 20  ndefined BEFORE 
9ae0: 74 72 69 67 67 65 72 20 62 65 68 61 76 69 6f 72  trigger behavior
9af0: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 61 75 74  }</tcl>.<h3>Caut
9b00: 69 6f 6e 73 20 4f 6e 20 54 68 65 20 55 73 65 20  ions On The Use 
9b10: 4f 66 20 42 45 46 4f 52 45 20 74 72 69 67 67 65  Of BEFORE trigge
9b20: 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 49 66 20 61  rs</h3>..<p>If a
9b30: 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 6f   BEFORE UPDATE o
9b40: 72 20 42 45 46 4f 52 45 20 44 45 4c 45 54 45 20  r BEFORE DELETE 
9b50: 74 72 69 67 67 65 72 20 6d 6f 64 69 66 69 65 73  trigger modifies
9b60: 20 6f 72 20 64 65 6c 65 74 65 73 20 61 20 72 6f   or deletes a ro
9b70: 77 0a 74 68 61 74 20 77 61 73 20 74 6f 20 68 61  w.that was to ha
9b80: 76 65 20 62 65 65 6e 20 75 70 64 61 74 65 64 20  ve been updated 
9b90: 6f 72 20 64 65 6c 65 74 65 64 2c 20 74 68 65 6e  or deleted, then
9ba0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
9bb0: 68 65 20 73 75 62 73 65 71 75 65 6e 74 0a 75 70  he subsequent.up
9bc0: 64 61 74 65 20 6f 72 20 64 65 6c 65 74 65 20 6f  date or delete o
9bd0: 70 65 72 61 74 69 6f 6e 20 69 73 20 75 6e 64 65  peration is unde
9be0: 66 69 6e 65 64 2e 20 20 46 75 72 74 68 65 72 6d  fined.  Furtherm
9bf0: 6f 72 65 2c 20 69 66 20 61 20 42 45 46 4f 52 45  ore, if a BEFORE
9c00: 20 74 72 69 67 67 65 72 0a 6d 6f 64 69 66 69 65   trigger.modifie
9c10: 73 20 6f 72 20 64 65 6c 65 74 65 73 20 61 20 72  s or deletes a r
9c20: 6f 77 2c 20 74 68 65 6e 20 69 74 20 69 73 20 75  ow, then it is u
9c30: 6e 64 65 66 69 6e 65 64 20 77 68 65 74 68 65 72  ndefined whether
9c40: 20 6f 72 20 6e 6f 74 20 41 46 54 45 52 20 74 72   or not AFTER tr
9c50: 69 67 67 65 72 73 0a 74 68 61 74 20 77 6f 75 6c  iggers.that woul
9c60: 64 20 68 61 76 65 20 6f 74 68 65 72 77 69 73 65  d have otherwise
9c70: 20 72 75 6e 20 6f 6e 20 74 68 6f 73 65 20 72 6f   run on those ro
9c80: 77 73 20 77 69 6c 6c 20 69 6e 20 66 61 63 74 20  ws will in fact 
9c90: 72 75 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  run..</p>..<p>Th
9ca0: 65 20 76 61 6c 75 65 20 6f 66 20 4e 45 57 2e 72  e value of NEW.r
9cb0: 6f 77 69 64 20 69 73 20 75 6e 64 65 66 69 6e 65  owid is undefine
9cc0: 64 20 69 6e 20 61 20 42 45 46 4f 52 45 20 49 4e  d in a BEFORE IN
9cd0: 53 45 52 54 20 74 72 69 67 67 65 72 20 69 6e 20  SERT trigger in 
9ce0: 77 68 69 63 68 0a 74 68 65 20 72 6f 77 69 64 20  which.the rowid 
9cf0: 69 73 20 6e 6f 74 20 65 78 70 6c 69 63 69 74 6c  is not explicitl
9d00: 79 20 73 65 74 20 74 6f 20 61 6e 20 69 6e 74 65  y set to an inte
9d10: 67 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 42 65 63  ger.</p>..<p>Bec
9d20: 61 75 73 65 20 6f 66 20 74 68 65 20 62 65 68 61  ause of the beha
9d30: 76 69 6f 72 73 20 64 65 73 63 72 69 62 65 64 20  viors described 
9d40: 61 62 6f 76 65 2c 20 70 72 6f 67 72 61 6d 6d 65  above, programme
9d50: 72 73 20 61 72 65 20 65 6e 63 6f 75 72 61 67 65  rs are encourage
9d60: 64 20 74 6f 0a 70 72 65 66 65 72 20 41 46 54 45  d to.prefer AFTE
9d70: 52 20 74 72 69 67 67 65 72 73 20 6f 76 65 72 20  R triggers over 
9d80: 42 45 46 4f 52 45 20 74 72 69 67 67 65 72 73 2e  BEFORE triggers.
9d90: 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 68 65 20 52 41  </p>..<h3>The RA
9da0: 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 3c 2f  ISE() function</
9db0: 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 73 70 65 63  h3>..<p>^(A spec
9dc0: 69 61 6c 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ial SQL function
9dd0: 20 52 41 49 53 45 28 29 20 6d 61 79 20 62 65 20   RAISE() may be 
9de0: 75 73 65 64 20 77 69 74 68 69 6e 20 61 20 74 72  used within a tr
9df0: 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2c 29 5e  igger-program,)^
9e00: 0a 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77  .with the follow
9e10: 69 6e 67 20 73 79 6e 74 61 78 3c 2f 70 3e 20 0a  ing syntax</p> .
9e20: 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67  .<tcl>BubbleDiag
9e30: 72 61 6d 20 72 61 69 73 65 2d 66 75 6e 63 74 69  ram raise-functi
9e40: 6f 6e 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 57 68  on</tcl>..<p>^Wh
9e50: 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 69  en one of the fi
9e60: 72 73 74 20 74 68 72 65 65 20 66 6f 72 6d 73 20  rst three forms 
9e70: 69 73 20 63 61 6c 6c 65 64 20 64 75 72 69 6e 67  is called during
9e80: 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
9e90: 0a 65 78 65 63 75 74 69 6f 6e 2c 20 74 68 65 20  .execution, the 
9ea0: 73 70 65 63 69 66 69 65 64 20 5b 4f 4e 20 43 4f  specified [ON CO
9eb0: 4e 46 4c 49 43 54 5d 20 70 72 6f 63 65 73 73 69  NFLICT] processi
9ec0: 6e 67 20 69 73 20 70 65 72 66 6f 72 6d 65 64 0a  ng is performed.
9ed0: 28 65 69 74 68 65 72 20 41 42 4f 52 54 2c 20 46  (either ABORT, F
9ee0: 41 49 4c 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 29  AIL or ROLLBACK)
9ef0: 20 61 6e 64 20 74 68 65 20 63 75 72 72 65 6e 74   and the current
9f00: 20 71 75 65 72 79 20 74 65 72 6d 69 6e 61 74 65   query terminate
9f10: 73 2e 0a 41 6e 20 65 72 72 6f 72 20 63 6f 64 65  s..An error code
9f20: 20 6f 66 20 5b 53 51 4c 49 54 45 5f 43 4f 4e 53   of [SQLITE_CONS
9f30: 54 52 41 49 4e 54 5d 20 69 73 20 72 65 74 75 72  TRAINT] is retur
9f40: 6e 65 64 20 74 6f 20 74 68 65 20 61 70 70 6c 69  ned to the appli
9f50: 63 61 74 69 6f 6e 2c 0a 61 6c 6f 6e 67 20 77 69  cation,.along wi
9f60: 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64  th the specified
9f70: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 3c   error message.<
9f80: 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 52 41  /p>..<p>^When RA
9f90: 49 53 45 28 49 47 4e 4f 52 45 29 20 69 73 20 63  ISE(IGNORE) is c
9fa0: 61 6c 6c 65 64 2c 20 74 68 65 20 72 65 6d 61 69  alled, the remai
9fb0: 6e 64 65 72 20 6f 66 20 74 68 65 20 63 75 72 72  nder of the curr
9fc0: 65 6e 74 20 74 72 69 67 67 65 72 20 70 72 6f 67  ent trigger prog
9fd0: 72 61 6d 2c 0a 74 68 65 20 73 74 61 74 65 6d 65  ram,.the stateme
9fe0: 6e 74 20 74 68 61 74 20 63 61 75 73 65 64 20 74  nt that caused t
9ff0: 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
a000: 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 61 6e  am to execute an
a010: 64 20 61 6e 79 20 73 75 62 73 65 71 75 65 6e 74  d any subsequent
a020: 0a 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d  .trigger program
a030: 73 20 74 68 61 74 20 77 6f 75 6c 64 20 6f 66 20  s that would of 
a040: 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 61 72  been executed ar
a050: 65 20 61 62 61 6e 64 6f 6e 65 64 2e 20 5e 4e 6f  e abandoned. ^No
a060: 20 64 61 74 61 62 61 73 65 0a 63 68 61 6e 67 65   database.change
a070: 73 20 61 72 65 20 72 6f 6c 6c 65 64 20 62 61 63  s are rolled bac
a080: 6b 2e 20 20 5e 49 66 20 74 68 65 20 73 74 61 74  k.  ^If the stat
a090: 65 6d 65 6e 74 20 74 68 61 74 20 63 61 75 73 65  ement that cause
a0a0: 64 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  d the trigger pr
a0b0: 6f 67 72 61 6d 0a 74 6f 20 65 78 65 63 75 74 65  ogram.to execute
a0c0: 20 69 73 20 69 74 73 65 6c 66 20 70 61 72 74 20   is itself part 
a0d0: 6f 66 20 61 20 74 72 69 67 67 65 72 20 70 72 6f  of a trigger pro
a0e0: 67 72 61 6d 2c 20 74 68 65 6e 20 74 68 61 74 20  gram, then that 
a0f0: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 0a  trigger program.
a100: 72 65 73 75 6d 65 73 20 65 78 65 63 75 74 69 6f  resumes executio
a110: 6e 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  n at the beginni
a120: 6e 67 20 6f 66 20 74 68 65 20 6e 65 78 74 20 73  ng of the next s
a130: 74 65 70 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c  tep..</p>...<tcl
a140: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
a150: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a160: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a170: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a180: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a190: 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54  #.Section {CREAT
a1a0: 45 20 56 49 45 57 7d 20 7b 63 72 65 61 74 65 76  E VIEW} {createv
a1b0: 69 65 77 7d 20 7b 7b 43 52 45 41 54 45 20 56 49  iew} {{CREATE VI
a1c0: 45 57 7d 20 76 69 65 77 20 2a 76 69 65 77 73 7d  EW} view *views}
a1d0: 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
a1e0: 63 72 65 61 74 65 2d 76 69 65 77 2d 73 74 6d 74  create-view-stmt
a1f0: 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54   1.</tcl>..<p>^T
a200: 68 65 20 43 52 45 41 54 45 20 56 49 45 57 20 63  he CREATE VIEW c
a210: 6f 6d 6d 61 6e 64 20 61 73 73 69 67 6e 73 20 61  ommand assigns a
a220: 20 6e 61 6d 65 20 74 6f 20 61 20 70 72 65 2d 70   name to a pre-p
a230: 61 63 6b 61 67 65 64 20 0a 5b 53 45 4c 45 43 54  ackaged .[SELECT
a240: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a 5e 4f  ] statement. .^O
a250: 6e 63 65 20 74 68 65 20 76 69 65 77 20 69 73 20  nce the view is 
a260: 63 72 65 61 74 65 64 2c 20 69 74 20 63 61 6e 20  created, it can 
a270: 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 46  be used in the F
a280: 52 4f 4d 20 63 6c 61 75 73 65 0a 6f 66 20 61 6e  ROM clause.of an
a290: 6f 74 68 65 72 20 5b 53 45 4c 45 43 54 5d 20 69  other [SELECT] i
a2a0: 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62  n place of a tab
a2b0: 6c 65 20 6e 61 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c  le name..</p>..<
a2c0: 70 3e 5e 49 66 20 74 68 65 20 22 54 45 4d 50 22  p>^If the "TEMP"
a2d0: 20 6f 72 20 22 54 45 4d 50 4f 52 41 52 59 22 20   or "TEMPORARY" 
a2e0: 6b 65 79 77 6f 72 64 20 6f 63 63 75 72 73 20 69  keyword occurs i
a2f0: 6e 20 62 65 74 77 65 65 6e 20 22 43 52 45 41 54  n between "CREAT
a300: 45 22 0a 61 6e 64 20 22 56 49 45 57 22 20 74 68  E".and "VIEW" th
a310: 65 6e 20 74 68 65 20 76 69 65 77 20 74 68 61 74  en the view that
a320: 20 69 73 20 63 72 65 61 74 65 64 20 69 73 20 6f   is created is o
a330: 6e 6c 79 20 76 69 73 69 62 6c 65 20 74 6f 20 74  nly visible to t
a340: 68 65 0a 70 72 6f 63 65 73 73 20 74 68 61 74 20  he.process that 
a350: 6f 70 65 6e 65 64 20 74 68 65 20 64 61 74 61 62  opened the datab
a360: 61 73 65 20 61 6e 64 20 69 73 20 61 75 74 6f 6d  ase and is autom
a370: 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64  atically deleted
a380: 20 77 68 65 6e 0a 74 68 65 20 64 61 74 61 62 61   when.the databa
a390: 73 65 20 69 73 20 63 6c 6f 73 65 64 2e 3c 2f 70  se is closed.</p
a3a0: 3e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 26 6c 74  >..<p> ^If a &lt
a3b0: 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67  ;database-name&g
a3c0: 74 3b 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  t; is specified,
a3d0: 20 74 68 65 6e 20 74 68 65 20 76 69 65 77 20 69   then the view i
a3e0: 73 20 63 72 65 61 74 65 64 20 69 6e 20 0a 74 68  s created in .th
a3f0: 65 20 6e 61 6d 65 64 20 64 61 74 61 62 61 73 65  e named database
a400: 2e 20 5e 49 74 20 69 73 20 61 6e 20 65 72 72 6f  . ^It is an erro
a410: 72 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f 74  r to specify bot
a420: 68 20 61 20 26 6c 74 3b 64 61 74 61 62 61 73 65  h a &lt;database
a430: 2d 6e 61 6d 65 26 67 74 3b 0a 61 6e 64 20 74 68  -name&gt;.and th
a440: 65 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 20 6f  e TEMP keyword o
a450: 6e 20 61 20 56 49 45 57 2c 20 75 6e 6c 65 73 73  n a VIEW, unless
a460: 20 74 68 65 20 26 6c 74 3b 64 61 74 61 62 61 73   the &lt;databas
a470: 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20 22 74  e-name&gt; is "t
a480: 65 6d 70 22 2e 0a 5e 49 66 20 6e 6f 20 64 61 74  emp"..^If no dat
a490: 61 62 61 73 65 20 6e 61 6d 65 20 69 73 20 73 70  abase name is sp
a4a0: 65 63 69 66 69 65 64 2c 20 61 6e 64 20 74 68 65  ecified, and the
a4b0: 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 20 69 73   TEMP keyword is
a4c0: 20 6e 6f 74 20 70 72 65 73 65 6e 74 2c 0a 74 68   not present,.th
a4d0: 65 20 56 49 45 57 20 69 73 20 63 72 65 61 74 65  e VIEW is create
a4e0: 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  d in the main da
a4f0: 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  tabase.</p>..<p>
a500: 5e 59 6f 75 20 63 61 6e 6e 6f 74 20 5b 44 45 4c  ^You cannot [DEL
a510: 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 20  ETE], [INSERT], 
a520: 6f 72 20 5b 55 50 44 41 54 45 5d 20 61 20 76 69  or [UPDATE] a vi
a530: 65 77 2e 20 20 5e 56 69 65 77 73 20 61 72 65 20  ew.  ^Views are 
a540: 72 65 61 64 2d 6f 6e 6c 79 20 0a 69 6e 20 53 51  read-only .in SQ
a550: 4c 69 74 65 2e 20 20 5e 48 6f 77 65 76 65 72 2c  Lite.  ^However,
a560: 20 69 6e 20 6d 61 6e 79 20 63 61 73 65 73 20 79   in many cases y
a570: 6f 75 20 63 61 6e 20 75 73 65 20 61 6e 0a 5b 49  ou can use an.[I
a580: 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65  NSTEAD OF trigge
a590: 72 5d 20 6f 6e 20 74 68 65 20 76 69 65 77 20 74  r] on the view t
a5a0: 6f 20 61 63 63 6f 6d 70 6c 69 73 68 20 0a 74 68  o accomplish .th
a5b0: 65 20 73 61 6d 65 20 74 68 69 6e 67 2e 20 20 5e  e same thing.  ^
a5c0: 56 69 65 77 73 20 61 72 65 20 72 65 6d 6f 76 65  Views are remove
a5d0: 64 20 0a 77 69 74 68 20 74 68 65 20 5b 44 52 4f  d .with the [DRO
a5e0: 50 20 56 49 45 57 5d 20 63 6f 6d 6d 61 6e 64 2e  P VIEW] command.
a5f0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
a600: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a610: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a620: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a630: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a640: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
a650: 6f 6e 20 7b 43 52 45 41 54 45 20 56 49 52 54 55  on {CREATE VIRTU
a660: 41 4c 20 54 41 42 4c 45 7d 20 7b 63 72 65 61 74  AL TABLE} {creat
a670: 65 76 74 61 62 7d 20 7b 7b 43 52 45 41 54 45 20  evtab} {{CREATE 
a680: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 7d 0a  VIRTUAL TABLE}}.
a690: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63  .BubbleDiagram c
a6a0: 72 65 61 74 65 2d 76 69 72 74 75 61 6c 2d 74 61  reate-virtual-ta
a6b0: 62 6c 65 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c  ble-stmt 1.</tcl
a6c0: 3e 0a 0a 3c 70 3e 41 20 5b 76 69 72 74 75 61 6c  >..<p>A [virtual
a6d0: 20 74 61 62 6c 65 5d 20 69 73 20 61 6e 20 69 6e   table] is an in
a6e0: 74 65 72 66 61 63 65 20 74 6f 20 61 6e 20 65 78  terface to an ex
a6f0: 74 65 72 6e 61 6c 20 73 74 6f 72 61 67 65 20 6f  ternal storage o
a700: 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 65 6e  r computation.en
a710: 67 69 6e 65 20 74 68 61 74 20 61 70 70 65 61 72  gine that appear
a720: 73 20 74 6f 20 62 65 20 61 20 74 61 62 6c 65 20  s to be a table 
a730: 62 75 74 20 64 6f 65 73 20 6e 6f 74 20 61 63 74  but does not act
a740: 75 61 6c 6c 79 20 73 74 6f 72 65 20 69 6e 66 6f  ually store info
a750: 72 6d 61 74 69 6f 6e 0a 69 6e 20 74 68 65 20 64  rmation.in the d
a760: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70  atabase file.</p
a770: 3e 0a 0a 3c 70 3e 49 6e 20 67 65 6e 65 72 61 6c  >..<p>In general
a780: 2c 20 79 6f 75 20 63 61 6e 20 64 6f 20 61 6e 79  , you can do any
a790: 74 68 69 6e 67 20 77 69 74 68 20 61 20 5b 76 69  thing with a [vi
a7a0: 72 74 75 61 6c 20 74 61 62 6c 65 5d 20 74 68 61  rtual table] tha
a7b0: 74 20 63 61 6e 20 62 65 20 64 6f 6e 65 0a 77 69  t can be done.wi
a7c0: 74 68 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74  th an ordinary t
a7d0: 61 62 6c 65 2c 20 65 78 63 65 70 74 20 74 68 61  able, except tha
a7e0: 74 20 5e 79 6f 75 20 63 61 6e 6e 6f 74 20 63 72  t ^you cannot cr
a7f0: 65 61 74 65 20 69 6e 64 69 63 65 73 20 6f 72 20  eate indices or 
a800: 74 72 69 67 67 65 72 73 20 6f 6e 20 61 0a 76 69  triggers on a.vi
a810: 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 5e 53  rtual table.  ^S
a820: 6f 6d 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ome virtual tabl
a830: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
a840: 73 20 6d 69 67 68 74 20 69 6d 70 6f 73 65 20 61  s might impose a
a850: 64 64 69 74 69 6f 6e 61 6c 0a 72 65 73 74 72 69  dditional.restri
a860: 63 74 69 6f 6e 73 2e 20 20 46 6f 72 20 65 78 61  ctions.  For exa
a870: 6d 70 6c 65 2c 20 6d 61 6e 79 20 76 69 72 74 75  mple, many virtu
a880: 61 6c 20 74 61 62 6c 65 73 20 61 72 65 20 72 65  al tables are re
a890: 61 64 2d 6f 6e 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70  ad-only.</p>..<p
a8a0: 3e 54 68 65 20 26 6c 74 3b 6d 6f 64 75 6c 65 2d  >The &lt;module-
a8b0: 6e 61 6d 65 26 67 74 3b 20 69 73 20 74 68 65 20  name&gt; is the 
a8c0: 6e 61 6d 65 20 6f 66 20 61 6e 20 6f 62 6a 65 63  name of an objec
a8d0: 74 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74  t that implement
a8e0: 73 0a 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  s.the virtual ta
a8f0: 62 6c 65 2e 20 20 5e 54 68 65 20 26 6c 74 3b 6d  ble.  ^The &lt;m
a900: 6f 64 75 6c 65 2d 6e 61 6d 65 26 67 74 3b 20 6d  odule-name&gt; m
a910: 75 73 74 20 62 65 20 72 65 67 69 73 74 65 72 65  ust be registere
a920: 64 20 77 69 74 68 0a 74 68 65 20 53 51 4c 69 74  d with.the SQLit
a930: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
a940: 63 74 69 6f 6e 20 75 73 69 6e 67 0a 5b 73 71 6c  ction using.[sql
a950: 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75  ite3_create_modu
a960: 6c 65 28 29 5d 20 6f 72 20 5b 73 71 6c 69 74 65  le()] or [sqlite
a970: 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 5f  3_create_module_
a980: 76 32 28 29 5d 0a 70 72 69 6f 72 20 74 6f 20 69  v2()].prior to i
a990: 73 73 75 69 6e 67 20 74 68 65 20 43 52 45 41 54  ssuing the CREAT
a9a0: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
a9b0: 73 74 61 74 65 6d 65 6e 74 2e 0a 5e 54 68 65 20  statement..^The 
a9c0: 6d 6f 64 75 6c 65 20 74 61 6b 65 73 20 7a 65 72  module takes zer
a9d0: 6f 20 6f 72 20 6d 6f 72 65 20 63 6f 6d 6d 61 2d  o or more comma-
a9e0: 73 65 70 61 72 61 74 65 64 20 61 72 67 75 6d 65  separated argume
a9f0: 6e 74 73 2e 0a 5e 54 68 65 20 61 72 67 75 6d 65  nts..^The argume
aa00: 6e 74 73 20 63 61 6e 20 62 65 20 6a 75 73 74 20  nts can be just 
aa10: 61 62 6f 75 74 20 61 6e 79 20 74 65 78 74 20 61  about any text a
aa20: 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 68 61 73  s long as it has
aa30: 20 62 61 6c 61 6e 63 65 64 0a 70 61 72 65 6e 74   balanced.parent
aa40: 68 65 73 65 73 2e 20 20 54 68 65 20 61 72 67 75  heses.  The argu
aa50: 6d 65 6e 74 20 73 79 6e 74 61 78 20 69 73 20 73  ment syntax is s
aa60: 75 66 66 69 63 69 65 6e 74 6c 79 20 67 65 6e 65  ufficiently gene
aa70: 72 61 6c 20 74 68 61 74 20 74 68 65 0a 61 72 67  ral that the.arg
aa80: 75 6d 65 6e 74 73 20 63 61 6e 20 62 65 20 6d 61  uments can be ma
aa90: 64 65 20 74 6f 20 61 70 70 65 61 72 20 61 73 20  de to appear as 
aaa0: 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f  column definitio
aab0: 6e 73 20 69 6e 20 61 20 74 72 61 64 69 74 69 6f  ns in a traditio
aac0: 6e 61 6c 0a 5b 43 52 45 41 54 45 20 54 41 42 4c  nal.[CREATE TABL
aad0: 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a  E] statement.  .
aae0: 5e 53 51 4c 69 74 65 20 70 61 73 73 65 73 20 74  ^SQLite passes t
aaf0: 68 65 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65  he module argume
ab00: 6e 74 73 20 64 69 72 65 63 74 6c 79 0a 74 6f 20  nts directly.to 
ab10: 74 68 65 20 5b 78 43 72 65 61 74 65 5d 20 61 6e  the [xCreate] an
ab20: 64 20 5b 78 43 6f 6e 6e 65 63 74 5d 20 6d 65 74  d [xConnect] met
ab30: 68 6f 64 73 20 6f 66 20 74 68 65 20 6d 6f 64 75  hods of the modu
ab40: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
ab50: 6e 0a 77 69 74 68 6f 75 74 20 61 6e 79 20 69 6e  n.without any in
ab60: 74 65 72 70 72 65 74 61 74 69 6f 6e 2e 20 20 49  terpretation.  I
ab70: 74 20 69 73 20 74 68 65 20 72 65 73 70 6f 6e 73  t is the respons
ab80: 69 62 69 6c 69 74 79 0a 6f 66 20 74 68 65 20 6d  ibility.of the m
ab90: 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
aba0: 74 69 6f 6e 20 74 6f 20 70 61 72 73 65 20 61 6e  tion to parse an
abb0: 64 20 69 6e 74 65 72 70 72 65 74 20 69 74 73 20  d interpret its 
abc0: 6f 77 6e 20 61 72 67 75 6d 65 6e 74 73 2e 3c 2f  own arguments.</
abd0: 70 3e 0a 0a 3c 70 3e 5e 41 20 76 69 72 74 75 61  p>..<p>^A virtua
abe0: 6c 20 74 61 62 6c 65 20 69 73 20 64 65 73 74 72  l table is destr
abf0: 6f 79 65 64 20 75 73 69 6e 67 20 74 68 65 20 6f  oyed using the o
ac00: 72 64 69 6e 61 72 79 0a 5b 44 52 4f 50 20 54 41  rdinary.[DROP TA
ac10: 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  BLE] statement. 
ac20: 20 54 68 65 72 65 20 69 73 20 6e 6f 0a 44 52 4f   There is no.DRO
ac30: 50 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  P VIRTUAL TABLE 
ac40: 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a  statement.</p>..
ac50: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
ac60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ac70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ac80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ac90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aca0: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 44 45 4c  ####.Section DEL
acb0: 45 54 45 20 64 65 6c 65 74 65 20 7b 44 45 4c 45  ETE delete {DELE
acc0: 54 45 20 2a 44 45 4c 45 54 45 73 7d 0a 0a 42 75  TE *DELETEs}..Bu
acd0: 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65 6c 65  bbleDiagram dele
ace0: 74 65 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c 65  te-stmt 1.Bubble
acf0: 44 69 61 67 72 61 6d 20 71 75 61 6c 69 66 69 65  Diagram qualifie
ad00: 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a 3c 2f 74  d-table-name.</t
ad10: 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 45 4c  cl>..<p>^The DEL
ad20: 45 54 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75  ETE command is u
ad30: 73 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 72 65  sed to remove re
ad40: 63 6f 72 64 73 20 66 72 6f 6d 20 61 20 74 61 62  cords from a tab
ad50: 6c 65 2e 0a 5e 54 68 65 20 63 6f 6d 6d 61 6e 64  le..^The command
ad60: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65   consists of the
ad70: 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 22 20 6b   "DELETE FROM" k
ad80: 65 79 77 6f 72 64 73 20 66 6f 6c 6c 6f 77 65 64  eywords followed
ad90: 20 62 79 0a 74 68 65 20 6e 61 6d 65 20 6f 66 20   by.the name of 
ada0: 74 68 65 20 74 61 62 6c 65 20 66 72 6f 6d 20 77  the table from w
adb0: 68 69 63 68 20 72 65 63 6f 72 64 73 20 61 72 65  hich records are
adc0: 20 74 6f 20 62 65 20 72 65 6d 6f 76 65 64 2e 0a   to be removed..
add0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 69 74 68 6f 75  </p>..<p>^Withou
ade0: 74 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65  t a WHERE clause
adf0: 2c 20 61 6c 6c 20 72 6f 77 73 20 6f 66 20 74 68  , all rows of th
ae00: 65 20 74 61 62 6c 65 20 61 72 65 20 72 65 6d 6f  e table are remo
ae10: 76 65 64 2e 0a 5e 49 66 20 61 20 57 48 45 52 45  ved..^If a WHERE
ae20: 20 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c   clause is suppl
ae30: 69 65 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74  ied, then only t
ae40: 68 6f 73 65 20 72 6f 77 73 20 74 68 61 74 20 6d  hose rows that m
ae50: 61 74 63 68 0a 74 68 65 20 65 78 70 72 65 73 73  atch.the express
ae60: 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 2e  ion are removed.
ae70: 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73 74 72 69  </p>..<h3>Restri
ae80: 63 74 69 6f 6e 73 20 6f 6e 20 44 45 4c 45 54 45  ctions on DELETE
ae90: 20 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68   Statements With
aea0: 69 6e 20 43 52 45 41 54 45 20 54 52 49 47 47 45  in CREATE TRIGGE
aeb0: 52 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 72  R</h3>..<p>^Ther
aec0: 65 20 61 72 65 20 61 64 64 69 74 69 6f 6e 61 6c  e are additional
aed0: 20 73 79 6e 74 61 78 20 72 65 73 74 72 69 63 74   syntax restrict
aee0: 69 6f 6e 73 20 6f 6e 20 44 45 4c 45 54 45 20 73  ions on DELETE s
aef0: 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 0a 6f  tatements that.o
af00: 63 63 75 72 20 77 69 74 68 69 6e 20 74 68 65 20  ccur within the 
af10: 62 6f 64 79 20 6f 66 20 61 20 5b 43 52 45 41 54  body of a [CREAT
af20: 45 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65  E TRIGGER] state
af30: 6d 65 6e 74 2e 20 20 5e 54 68 65 20 3c 69 3e 74  ment.  ^The <i>t
af40: 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 0a 6d 75  able-name</i>.mu
af50: 73 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69 65  st be unqualifie
af60: 64 2e 20 0a 5e 28 49 6e 20 6f 74 68 65 72 20 77  d. .^(In other w
af70: 6f 72 64 73 2c 20 74 68 65 20 3c 69 3e 64 61 74  ords, the <i>dat
af80: 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62  abase-name</i><b
af90: 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78 0a 6f 6e  >.</b> prefix.on
afa0: 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 20   the table name 
afb0: 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 77  is not allowed w
afc0: 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20  ithin triggers. 
afd0: 29 5e 0a 5e 54 68 65 20 74 61 62 6c 65 20 66 72  )^.^The table fr
afe0: 6f 6d 20 77 68 69 63 68 20 74 6f 20 64 65 6c 65  om which to dele
aff0: 74 65 20 6d 75 73 74 20 62 65 20 69 6e 20 74 68  te must be in th
b000: 65 20 73 61 6d 65 0a 64 61 74 61 62 61 73 65 20  e same.database 
b010: 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  as the table to 
b020: 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65  which the trigge
b030: 72 20 69 73 20 61 74 74 61 63 68 65 64 2e 3c 2f  r is attached.</
b040: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 49 4e 44 45  p>..<p>^The INDE
b050: 58 45 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49  XED BY and NOT I
b060: 4e 44 45 58 45 44 20 63 6c 61 75 73 65 73 20 61  NDEXED clauses a
b070: 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f  re not allowed o
b080: 6e 20 44 45 4c 45 54 45 0a 73 74 61 74 65 6d 65  n DELETE.stateme
b090: 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67  nts within trigg
b0a0: 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ers.</p>..<p>^Th
b0b0: 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 28  e LIMIT clause (
b0c0: 64 65 73 63 72 69 62 65 64 20 62 65 6c 6f 77 29  described below)
b0d0: 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64 20   is unsupported 
b0e0: 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
b0f0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
b100: 61 67 6d 65 6e 74 20 74 72 75 63 61 74 65 6f 70  agment trucateop
b110: 74 20 7b 74 72 75 6e 63 61 74 65 20 6f 70 74 69  t {truncate opti
b120: 6d 69 7a 61 74 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a  mization}</tcl>.
b130: 3c 68 33 3e 54 68 65 20 54 72 75 6e 63 61 74 65  <h3>The Truncate
b140: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 3c 2f 68   Optimization</h
b150: 33 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65  3>..<p>^When the
b160: 20 57 48 45 52 45 20 69 73 20 6f 6d 69 74 74 65   WHERE is omitte
b170: 64 20 66 72 6f 6d 20 61 20 44 45 4c 45 54 45 20  d from a DELETE 
b180: 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 74 68  statement and th
b190: 65 20 74 61 62 6c 65 0a 62 65 69 6e 67 20 64 65  e table.being de
b1a0: 6c 65 74 65 64 20 68 61 73 20 6e 6f 20 74 72 69  leted has no tri
b1b0: 67 67 65 72 73 2c 0a 53 51 4c 69 74 65 20 75 73  ggers,.SQLite us
b1c0: 65 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69  es an optimizati
b1d0: 6f 6e 20 74 6f 20 65 72 61 73 65 20 74 68 65 20  on to erase the 
b1e0: 65 6e 74 69 72 65 20 74 61 62 6c 65 20 63 6f 6e  entire table con
b1f0: 74 65 6e 74 0a 77 69 74 68 6f 75 74 20 68 61 76  tent.without hav
b200: 69 6e 67 20 74 6f 20 76 69 73 69 74 20 65 61 63  ing to visit eac
b210: 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74 61 62  h row of the tab
b220: 6c 65 20 69 6e 64 69 76 69 64 75 61 6c 6c 79 2e  le individually.
b230: 0a 54 68 69 73 20 22 74 72 75 6e 63 61 74 65 22  .This "truncate"
b240: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 6d 61   optimization ma
b250: 6b 65 73 20 74 68 65 20 64 65 6c 65 74 65 20 72  kes the delete r
b260: 75 6e 20 6d 75 63 68 20 66 61 73 74 65 72 2e 0a  un much faster..
b270: 50 72 69 6f 72 20 74 6f 20 53 51 4c 69 74 65 20  Prior to SQLite 
b280: 5b 76 65 72 73 69 6f 6e 20 33 2e 36 2e 35 5d 2c  [version 3.6.5],
b290: 20 74 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70   the truncate op
b2a0: 74 69 6d 69 7a 61 74 69 6f 6e 0a 61 6c 73 6f 20  timization.also 
b2b0: 6d 65 61 6e 74 20 74 68 61 74 20 74 68 65 20 5b  meant that the [
b2c0: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
b2d0: 29 5d 20 61 6e 64 0a 5b 73 71 6c 69 74 65 33 5f  )] and.[sqlite3_
b2e0: 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d  total_changes()]
b2f0: 20 69 6e 74 65 72 66 61 63 65 73 0a 61 6e 64 20   interfaces.and 
b300: 74 68 65 20 5b 63 6f 75 6e 74 5f 63 68 61 6e 67  the [count_chang
b310: 65 73 20 70 72 61 67 6d 61 5d 0a 77 69 6c 6c 20  es pragma].will 
b320: 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 72 65 74  not actually ret
b330: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
b340: 66 20 64 65 6c 65 74 65 64 20 72 6f 77 73 2e 20  f deleted rows. 
b350: 20 0a 54 68 61 74 20 70 72 6f 62 6c 65 6d 20 68   .That problem h
b360: 61 73 20 62 65 65 6e 20 66 69 78 65 64 20 61 73  as been fixed as
b370: 20 6f 66 20 5b 76 65 72 73 69 6f 6e 20 33 2e 36   of [version 3.6
b380: 2e 35 5d 2e 0a 0a 3c 70 3e 5e 54 68 65 20 74 72  .5]...<p>^The tr
b390: 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74  uncate optimizat
b3a0: 69 6f 6e 20 63 61 6e 20 62 65 20 70 65 72 6d 61  ion can be perma
b3b0: 6e 65 6e 74 6c 79 20 64 69 73 61 62 6c 65 64 20  nently disabled 
b3c0: 66 6f 72 20 61 6c 6c 20 71 75 65 72 69 65 73 0a  for all queries.
b3d0: 62 79 20 72 65 63 6f 6d 70 69 6c 69 6e 67 0a 53  by recompiling.S
b3e0: 51 4c 69 74 65 20 77 69 74 68 20 74 68 65 20 5b  QLite with the [
b3f0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 55 4e  SQLITE_OMIT_TRUN
b400: 43 41 54 45 5f 4f 50 54 49 4d 49 5a 41 54 49 4f  CATE_OPTIMIZATIO
b410: 4e 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  N] compile-time 
b420: 73 77 69 74 63 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e  switch.</p>..<p>
b430: 54 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74  The truncate opt
b440: 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20 61 6c  imization can al
b450: 73 6f 20 62 65 20 64 69 73 61 62 6c 65 64 20 61  so be disabled a
b460: 74 20 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 0a  t runtime using.
b470: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 65 74  the [sqlite3_set
b480: 5f 61 75 74 68 6f 72 69 7a 65 72 28 29 5d 20 69  _authorizer()] i
b490: 6e 74 65 72 66 61 63 65 2e 20 20 5e 49 66 20 61  nterface.  ^If a
b4a0: 6e 20 61 75 74 68 6f 72 69 7a 65 72 20 63 61 6c  n authorizer cal
b4b0: 6c 62 61 63 6b 0a 72 65 74 75 72 6e 73 20 5b 53  lback.returns [S
b4c0: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 5d 20 66 6f  QLITE_IGNORE] fo
b4d0: 72 20 61 6e 20 5b 53 51 4c 49 54 45 5f 44 45 4c  r an [SQLITE_DEL
b4e0: 45 54 45 5d 20 61 63 74 69 6f 6e 20 63 6f 64 65  ETE] action code
b4f0: 2c 20 74 68 65 6e 0a 74 68 65 20 44 45 4c 45 54  , then.the DELET
b500: 45 20 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c  E operation will
b510: 20 70 72 6f 63 65 65 64 20 62 75 74 20 74 68 65   proceed but the
b520: 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69   truncate optimi
b530: 7a 61 74 69 6f 6e 20 77 69 6c 6c 0a 62 65 20 62  zation will.be b
b540: 79 70 61 73 73 65 64 20 61 6e 64 20 72 6f 77 73  ypassed and rows
b550: 20 77 69 6c 6c 20 62 65 20 64 65 6c 65 74 65 64   will be deleted
b560: 20 6f 6e 65 20 62 79 20 6f 6e 65 2e 3c 2f 70 3e   one by one.</p>
b570: 0a 0a 3c 68 33 3e 55 73 65 20 4f 66 20 4c 49 4d  ..<h3>Use Of LIM
b580: 49 54 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66  IT</h3>..<p>^(If
b590: 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69   SQLite is compi
b5a0: 6c 65 64 20 77 69 74 68 20 74 68 65 20 5b 53 51  led with the [SQ
b5b0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
b5c0: 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d  TE_DELETE_LIMIT]
b5d0: 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70  .compile-time op
b5e0: 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 73  tion, then the s
b5f0: 79 6e 74 61 78 20 6f 66 20 74 68 65 20 44 45 4c  yntax of the DEL
b600: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ETE statement is
b610: 0a 65 78 74 65 6e 64 65 64 20 62 79 20 74 68 65  .extended by the
b620: 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6f 70 74   addition of opt
b630: 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59 20 61  ional ORDER BY a
b640: 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73  nd LIMIT clauses
b650: 3a 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75  :)^</p>..<tcl>Bu
b660: 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65 6c 65  bbleDiagram dele
b670: 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65 64 3c  te-stmt-limited<
b680: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f  /tcl>..<p>^The o
b690: 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 63 6c  ptional LIMIT cl
b6a0: 61 75 73 65 20 63 61 6e 20 62 65 20 75 73 65 64  ause can be used
b6b0: 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75   to limit the nu
b6c0: 6d 62 65 72 20 6f 66 0a 72 6f 77 73 20 64 65 6c  mber of.rows del
b6d0: 65 74 65 64 2c 20 61 6e 64 20 74 68 65 72 65 62  eted, and thereb
b6e0: 79 20 6c 69 6d 69 74 20 74 68 65 20 73 69 7a 65  y limit the size
b6f0: 20 6f 66 20 74 68 65 20 74 72 61 6e 73 61 63 74   of the transact
b700: 69 6f 6e 2e 0a 5e 54 68 65 20 4f 52 44 45 52 20  ion..^The ORDER 
b710: 42 59 20 63 6c 61 75 73 65 20 6f 6e 20 61 20 44  BY clause on a D
b720: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 0a  ELETE statement.
b730: 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20  is used only to 
b740: 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 20  determine which 
b750: 72 6f 77 73 20 66 61 6c 6c 0a 77 69 74 68 69 6e  rows fall.within
b760: 20 74 68 65 20 4c 49 4d 49 54 2e 20 20 5e 54 68   the LIMIT.  ^Th
b770: 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68  e order in which
b780: 20 72 6f 77 73 20 61 72 65 20 64 65 6c 65 74 65   rows are delete
b790: 64 20 69 73 20 61 72 62 69 74 72 61 72 79 0a 61  d is arbitrary.a
b7a0: 6e 64 20 69 73 20 6e 6f 74 20 64 65 74 65 72 6d  nd is not determ
b7b0: 69 6e 65 64 20 62 79 20 74 68 65 20 4f 52 44 45  ined by the ORDE
b7c0: 52 20 42 59 20 63 6c 61 75 73 65 2e 3c 2f 70 3e  R BY clause.</p>
b7d0: 0a 0a 3c 70 3e 5e 54 68 65 20 70 72 65 73 65 6e  ..<p>^The presen
b7e0: 63 65 20 6f 66 20 61 20 4c 49 4d 49 54 20 63 6c  ce of a LIMIT cl
b7f0: 61 75 73 65 20 64 65 66 65 61 74 73 20 74 68 65  ause defeats the
b800: 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69   truncate optimi
b810: 7a 61 74 69 6f 6e 0a 63 61 75 73 69 6e 67 20 61  zation.causing a
b820: 6c 6c 20 72 6f 77 73 20 62 65 69 6e 67 20 64 65  ll rows being de
b830: 6c 65 74 65 64 20 74 6f 20 62 65 20 76 69 73 69  leted to be visi
b840: 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  ted.</p>..<tcl>.
b850: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b860: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b870: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b880: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b890: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
b8a0: 53 65 63 74 69 6f 6e 20 7b 44 45 54 41 43 48 20  Section {DETACH 
b8b0: 44 41 54 41 42 41 53 45 7d 20 64 65 74 61 63 68  DATABASE} detach
b8c0: 20 2a 44 45 54 41 43 48 0a 0a 42 75 62 62 6c 65   *DETACH..Bubble
b8d0: 44 69 61 67 72 61 6d 20 64 65 74 61 63 68 2d 73  Diagram detach-s
b8e0: 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  tmt 1.</tcl>..<p
b8f0: 3e 5e 54 68 69 73 20 73 74 61 74 65 6d 65 6e 74  >^This statement
b900: 20 64 65 74 61 63 68 65 73 20 61 6e 20 61 64 64   detaches an add
b910: 69 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65  itional database
b920: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76   connection prev
b930: 69 6f 75 73 6c 79 20 0a 61 74 74 61 63 68 65 64  iously .attached
b940: 20 75 73 69 6e 67 20 74 68 65 20 5b 41 54 54 41   using the [ATTA
b950: 43 48 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  CH] statement.  
b960: 0a 5e 49 74 20 69 73 20 70 6f 73 73 69 62 6c 65  .^It is possible
b970: 20 74 6f 20 68 61 76 65 20 74 68 65 20 73 61 6d   to have the sam
b980: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
b990: 61 74 74 61 63 68 65 64 20 6d 75 6c 74 69 70 6c  attached multipl
b9a0: 65 20 74 69 6d 65 73 20 75 73 69 6e 67 20 0a 64  e times using .d
b9b0: 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 73 2c 20  ifferent names, 
b9c0: 61 6e 64 20 64 65 74 61 63 68 69 6e 67 20 6f 6e  and detaching on
b9d0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  e connection to 
b9e0: 61 20 66 69 6c 65 20 77 69 6c 6c 20 6c 65 61 76  a file will leav
b9f0: 65 20 74 68 65 20 0a 6f 74 68 65 72 73 20 69 6e  e the .others in
ba00: 74 61 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  tact.</p>..<p>^T
ba10: 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 77 69  his statement wi
ba20: 6c 6c 20 66 61 69 6c 20 69 66 20 53 51 4c 69 74  ll fail if SQLit
ba30: 65 20 69 73 20 69 6e 20 74 68 65 20 6d 69 64 64  e is in the midd
ba40: 6c 65 20 6f 66 20 61 20 74 72 61 6e 73 61 63 74  le of a transact
ba50: 69 6f 6e 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e  ion.</p>...<tcl>
ba60: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
ba70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ba80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ba90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
baa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
bab0: 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 49 4e  Section {DROP IN
bac0: 44 45 58 7d 20 64 72 6f 70 69 6e 64 65 78 20 7b  DEX} dropindex {
bad0: 7b 44 52 4f 50 20 49 4e 44 45 58 7d 7d 0a 0a 42  {DROP INDEX}}..B
bae0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f  ubbleDiagram dro
baf0: 70 2d 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a 3c  p-index-stmt 1.<
bb00: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44  /tcl>..<p>^The D
bb10: 52 4f 50 20 49 4e 44 45 58 20 73 74 61 74 65 6d  ROP INDEX statem
bb20: 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 6e 20 69  ent removes an i
bb30: 6e 64 65 78 20 61 64 64 65 64 0a 77 69 74 68 20  ndex added.with 
bb40: 74 68 65 20 5b 43 52 45 41 54 45 20 49 4e 44 45  the [CREATE INDE
bb50: 58 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  X] statement.  T
bb60: 68 65 20 69 6e 64 65 78 20 69 73 20 63 6f 6d 70  he index is comp
bb70: 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66  letely removed f
bb80: 72 6f 6d 0a 74 68 65 20 64 69 73 6b 2e 20 20 54  rom.the disk.  T
bb90: 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 6f 20 72  he only way to r
bba0: 65 63 6f 76 65 72 20 74 68 65 20 69 6e 64 65 78  ecover the index
bbb0: 20 69 73 20 74 6f 20 72 65 65 6e 74 65 72 20 74   is to reenter t
bbc0: 68 65 0a 61 70 70 72 6f 70 72 69 61 74 65 20 5b  he.appropriate [
bbd0: 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20 63 6f  CREATE INDEX] co
bbe0: 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  mmand.</p>..<tcl
bbf0: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
bc00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bc10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bc20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bc30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bc40: 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54  .Section {DROP T
bc50: 41 42 4c 45 7d 20 64 72 6f 70 74 61 62 6c 65 20  ABLE} droptable 
bc60: 7b 7b 44 52 4f 50 20 54 41 42 4c 45 7d 7d 0a 0a  {{DROP TABLE}}..
bc70: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72  BubbleDiagram dr
bc80: 6f 70 2d 74 61 62 6c 65 2d 73 74 6d 74 20 31 0a  op-table-stmt 1.
bc90: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
bca0: 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65  DROP TABLE state
bcb0: 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74  ment removes a t
bcc0: 61 62 6c 65 20 61 64 64 65 64 20 77 69 74 68 20  able added with 
bcd0: 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c  the.[CREATE TABL
bce0: 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  E] statement.  T
bcf0: 68 65 20 6e 61 6d 65 20 73 70 65 63 69 66 69 65  he name specifie
bd00: 64 20 69 73 20 74 68 65 0a 74 61 62 6c 65 20 6e  d is the.table n
bd10: 61 6d 65 2e 20 20 5e 54 68 65 20 64 72 6f 70 70  ame.  ^The dropp
bd20: 65 64 20 74 61 62 6c 65 20 69 73 20 63 6f 6d 70  ed table is comp
bd30: 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66  letely removed f
bd40: 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
bd50: 20 0a 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65   .schema and the
bd60: 20 64 69 73 6b 20 66 69 6c 65 2e 20 20 54 68 65   disk file.  The
bd70: 20 74 61 62 6c 65 20 63 61 6e 20 6e 6f 74 20 62   table can not b
bd80: 65 20 72 65 63 6f 76 65 72 65 64 2e 20 20 0a 5e  e recovered.  .^
bd90: 41 6c 6c 20 69 6e 64 69 63 65 73 20 61 6e 64 20  All indices and 
bda0: 74 72 69 67 67 65 72 73 0a 61 73 73 6f 63 69 61  triggers.associa
bdb0: 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
bdc0: 6c 65 20 61 72 65 20 61 6c 73 6f 20 64 65 6c 65  le are also dele
bdd0: 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ted.</p>..<p>^Th
bde0: 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 45 58  e optional IF EX
bdf0: 49 53 54 53 20 63 6c 61 75 73 65 20 73 75 70 70  ISTS clause supp
be00: 72 65 73 73 65 73 20 74 68 65 20 65 72 72 6f 72  resses the error
be10: 20 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d   that would norm
be20: 61 6c 6c 79 0a 72 65 73 75 6c 74 20 69 66 20 74  ally.result if t
be30: 68 65 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f  he table does no
be40: 74 20 65 78 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 70  t exist.</p>..<p
be50: 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65  >^If [foreign ke
be60: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61  y constraints] a
be70: 72 65 20 65 6e 61 62 6c 65 64 2c 20 61 20 44 52  re enabled, a DR
be80: 4f 50 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  OP TABLE command
be90: 20 70 65 72 66 6f 72 6d 73 20 61 6e 0a 69 6d 70   performs an.imp
bea0: 6c 69 63 69 74 20 5b 44 45 4c 45 54 45 20 7c 20  licit [DELETE | 
beb0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b  DELETE FROM &lt;
bec0: 74 62 6c 26 67 74 3b 5d 20 63 6f 6d 6d 61 6e 64  tbl&gt;] command
bed0: 20 62 65 66 6f 72 65 20 72 65 6d 6f 76 69 6e 67   before removing
bee0: 20 74 68 65 0a 74 61 62 6c 65 20 66 72 6f 6d 20   the.table from 
bef0: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
bf00: 65 6d 61 2e 20 5e 41 6e 79 20 74 72 69 67 67 65  ema. ^Any trigge
bf10: 72 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  rs attached to t
bf20: 68 65 20 74 61 62 6c 65 20 61 72 65 0a 64 72 6f  he table are.dro
bf30: 70 70 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61  pped from the da
bf40: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 62 65  tabase schema be
bf50: 66 6f 72 65 20 74 68 65 20 69 6d 70 6c 69 63 69  fore the implici
bf60: 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c  t DELETE FROM &l
bf70: 74 3b 74 62 6c 26 67 74 3b 20 0a 69 73 20 65 78  t;tbl&gt; .is ex
bf80: 65 63 75 74 65 64 2c 20 73 6f 20 74 68 69 73 20  ecuted, so this 
bf90: 63 61 6e 6e 6f 74 20 63 61 75 73 65 20 61 6e 79  cannot cause any
bfa0: 20 74 72 69 67 67 65 72 73 20 74 6f 20 66 69 72   triggers to fir
bfb0: 65 2e 20 42 79 20 63 6f 6e 74 72 61 73 74 2c 20  e. By contrast, 
bfc0: 5e 61 6e 0a 69 6d 70 6c 69 63 69 74 20 44 45 4c  ^an.implicit DEL
bfd0: 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c  ETE FROM &lt;tbl
bfe0: 26 67 74 3b 20 64 6f 65 73 20 63 61 75 73 65 20  &gt; does cause 
bff0: 61 6e 79 20 63 6f 6e 66 69 67 75 72 65 64 0a 5b  any configured.[
c000: 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69  foreign key acti
c010: 6f 6e 73 5d 20 74 6f 20 74 61 6b 65 20 70 6c 61  ons] to take pla
c020: 63 65 2e 20 0a 5e 49 66 20 74 68 65 20 69 6d 70  ce. .^If the imp
c030: 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f  licit DELETE FRO
c040: 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 65 78  M &lt;tbl&gt; ex
c050: 65 63 75 74 65 64 0a 61 73 20 70 61 72 74 20 6f  ecuted.as part o
c060: 66 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63  f a DROP TABLE c
c070: 6f 6d 6d 61 6e 64 20 76 69 6f 6c 61 74 65 73 20  ommand violates 
c080: 61 6e 79 20 69 6d 6d 65 64 69 61 74 65 20 66 6f  any immediate fo
c090: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
c0a0: 61 69 6e 74 73 2c 0a 61 6e 20 65 72 72 6f 72 20  aints,.an error 
c0b0: 69 73 20 72 65 74 75 72 6e 65 64 20 61 6e 64 20  is returned and 
c0c0: 74 68 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74  the table is not
c0d0: 20 64 72 6f 70 70 65 64 2e 20 5e 49 66 20 0a 74   dropped. ^If .t
c0e0: 68 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45  he implicit DELE
c0f0: 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26  TE FROM &lt;tbl&
c100: 67 74 3b 20 63 61 75 73 65 73 20 61 6e 79 20 0a  gt; causes any .
c110: 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e  deferred foreign
c120: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
c130: 20 74 6f 20 62 65 20 76 69 6f 6c 61 74 65 64 2c   to be violated,
c140: 20 61 6e 64 20 74 68 65 20 76 69 6f 6c 61 74 69   and the violati
c150: 6f 6e 73 20 73 74 69 6c 6c 0a 65 78 69 73 74 20  ons still.exist 
c160: 77 68 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63  when the transac
c170: 74 69 6f 6e 20 69 73 20 63 6f 6d 6d 69 74 74 65  tion is committe
c180: 64 2c 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72  d, an error is r
c190: 65 74 75 72 6e 65 64 20 61 74 20 74 68 65 20 74  eturned at the t
c1a0: 69 6d 65 0a 6f 66 20 63 6f 6d 6d 69 74 2e 0a 0a  ime.of commit...
c1b0: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
c1c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c1d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c1e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c1f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c200: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52  ####.Section {DR
c210: 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70  OP TRIGGER} drop
c220: 74 72 69 67 67 65 72 20 7b 7b 44 52 4f 50 20 54  trigger {{DROP T
c230: 52 49 47 47 45 52 7d 7d 0a 0a 42 75 62 62 6c 65  RIGGER}}..Bubble
c240: 44 69 61 67 72 61 6d 20 64 72 6f 70 2d 74 72 69  Diagram drop-tri
c250: 67 67 65 72 2d 73 74 6d 74 20 31 0a 3c 2f 74 63  gger-stmt 1.</tc
c260: 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50  l>..<p>^The DROP
c270: 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d 65   TRIGGER stateme
c280: 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74 72 69  nt removes a tri
c290: 67 67 65 72 20 63 72 65 61 74 65 64 20 62 79 20  gger created by 
c2a0: 74 68 65 20 0a 5b 43 52 45 41 54 45 20 54 52 49  the .[CREATE TRI
c2b0: 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e  GGER] statement.
c2c0: 20 20 5e 54 68 65 20 74 72 69 67 67 65 72 20 69    ^The trigger i
c2d0: 73 20 0a 64 65 6c 65 74 65 64 20 66 72 6f 6d 20  s .deleted from 
c2e0: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
c2f0: 65 6d 61 2e 20 5e 4e 6f 74 65 20 74 68 61 74 20  ema. ^Note that 
c300: 74 72 69 67 67 65 72 73 20 61 72 65 20 61 75 74  triggers are aut
c310: 6f 6d 61 74 69 63 61 6c 6c 79 20 0a 64 72 6f 70  omatically .drop
c320: 70 65 64 20 77 68 65 6e 20 74 68 65 20 61 73 73  ped when the ass
c330: 6f 63 69 61 74 65 64 20 74 61 62 6c 65 20 69 73  ociated table is
c340: 20 64 72 6f 70 70 65 64 2e 3c 2f 70 3e 0a 0a 3c   dropped.</p>..<
c350: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
c360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c370: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c380: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c390: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c3a0: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f  ###.Section {DRO
c3b0: 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65 77  P VIEW} dropview
c3c0: 20 7b 7b 44 52 4f 50 20 56 49 45 57 7d 7d 0a 0a   {{DROP VIEW}}..
c3d0: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72  BubbleDiagram dr
c3e0: 6f 70 2d 76 69 65 77 2d 73 74 6d 74 20 31 0a 3c  op-view-stmt 1.<
c3f0: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44  /tcl>..<p>^The D
c400: 52 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d 65  ROP VIEW stateme
c410: 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 76 69 65  nt removes a vie
c420: 77 20 63 72 65 61 74 65 64 20 62 79 20 74 68 65  w created by the
c430: 0a 5b 43 52 45 41 54 45 20 56 49 45 57 5d 20 73  .[CREATE VIEW] s
c440: 74 61 74 65 6d 65 6e 74 2e 20 20 5e 54 68 65 20  tatement.  ^The 
c450: 6e 61 6d 65 20 73 70 65 63 69 66 69 65 64 20 69  name specified i
c460: 73 20 74 68 65 20 0a 76 69 65 77 20 6e 61 6d 65  s the .view name
c470: 2e 20 20 5e 49 74 20 69 73 20 72 65 6d 6f 76 65  .  ^It is remove
c480: 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  d from the datab
c490: 61 73 65 20 73 63 68 65 6d 61 2c 20 62 75 74 20  ase schema, but 
c4a0: 6e 6f 20 61 63 74 75 61 6c 20 64 61 74 61 20 0a  no actual data .
c4b0: 69 6e 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  in the underlyin
c4c0: 67 20 62 61 73 65 20 74 61 62 6c 65 73 20 69 73  g base tables is
c4d0: 20 6d 6f 64 69 66 69 65 64 2e 3c 2f 70 3e 0a 0a   modified.</p>..
c4e0: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
c4f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c500: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c510: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c520: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c530: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 45 58 50  ####.Section EXP
c540: 4c 41 49 4e 20 65 78 70 6c 61 69 6e 20 45 58 50  LAIN explain EXP
c550: 4c 41 49 4e 0a 0a 42 75 62 62 6c 65 44 69 61 67  LAIN..BubbleDiag
c560: 72 61 6d 20 73 71 6c 2d 73 74 6d 74 0a 3c 2f 74  ram sql-stmt.</t
c570: 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 53 51 4c 20  cl>..<p>^An SQL 
c580: 73 74 61 74 65 6d 65 6e 74 20 63 61 6e 20 62 65  statement can be
c590: 20 70 72 65 63 65 64 65 64 20 62 79 20 74 68 65   preceded by the
c5a0: 20 6b 65 79 77 6f 72 64 20 22 45 58 50 4c 41 49   keyword "EXPLAI
c5b0: 4e 22 20 6f 72 0a 62 79 20 74 68 65 20 70 68 72  N" or.by the phr
c5c0: 61 73 65 20 22 45 58 50 4c 41 49 4e 20 51 55 45  ase "EXPLAIN QUE
c5d0: 52 59 20 50 4c 41 4e 22 2e 20 20 5e 45 69 74 68  RY PLAN".  ^Eith
c5e0: 65 72 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20  er modification 
c5f0: 63 61 75 73 65 73 20 74 68 65 0a 53 51 4c 20 73  causes the.SQL s
c600: 74 61 74 65 6d 65 6e 74 20 74 6f 20 62 65 68 61  tatement to beha
c610: 76 65 20 61 73 20 61 20 71 75 65 72 79 20 61 6e  ve as a query an
c620: 64 20 74 6f 20 72 65 74 75 72 6e 20 69 6e 66 6f  d to return info
c630: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 0a 68 6f  rmation about.ho
c640: 77 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  w the SQL statem
c650: 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20 6f  ent would have o
c660: 70 65 72 61 74 65 64 20 69 66 20 74 68 65 20 45  perated if the E
c670: 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20 6f  XPLAIN keyword o
c680: 72 0a 70 68 72 61 73 65 20 68 61 64 20 62 65 65  r.phrase had bee
c690: 6e 20 6f 6d 69 74 74 65 64 2e 3c 2f 70 3e 0a 0a  n omitted.</p>..
c6a0: 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 45 58 50  <p>^When the EXP
c6b0: 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20 61 70 70  LAIN keyword app
c6c0: 65 61 72 73 20 62 79 20 69 74 73 65 6c 66 20 69  ears by itself i
c6d0: 74 20 63 61 75 73 65 73 20 74 68 65 20 73 74 61  t causes the sta
c6e0: 74 65 6d 65 6e 74 0a 74 6f 20 62 65 68 61 76 65  tement.to behave
c6f0: 20 61 73 20 61 20 71 75 65 72 79 20 74 68 61 74   as a query that
c700: 20 72 65 74 75 72 6e 73 20 74 68 65 20 73 65 71   returns the seq
c710: 75 65 6e 63 65 20 6f 66 20 0a 5b 76 69 72 74 75  uence of .[virtu
c720: 61 6c 20 6d 61 63 68 69 6e 65 20 69 6e 73 74 72  al machine instr
c730: 75 63 74 69 6f 6e 73 5d 20 69 74 20 77 6f 75 6c  uctions] it woul
c740: 64 20 68 61 76 65 0a 75 73 65 64 20 74 6f 20 65  d have.used to e
c750: 78 65 63 75 74 65 20 74 68 65 20 63 6f 6d 6d 61  xecute the comma
c760: 6e 64 20 68 61 64 20 74 68 65 20 45 58 50 4c 41  nd had the EXPLA
c770: 49 4e 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 62  IN keyword not b
c780: 65 65 6e 20 70 72 65 73 65 6e 74 2e 0a 5e 57 68  een present..^Wh
c790: 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51  en the EXPLAIN Q
c7a0: 55 45 52 59 20 50 4c 41 4e 20 70 68 72 61 73 65  UERY PLAN phrase
c7b0: 20 61 70 70 65 61 72 73 2c 20 74 68 65 20 73 74   appears, the st
c7c0: 61 74 65 6d 65 6e 74 20 72 65 74 75 72 6e 73 0a  atement returns.
c7d0: 68 69 67 68 2d 6c 65 76 65 6c 20 69 6e 66 6f 72  high-level infor
c7e0: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 77 68 61  mation about wha
c7f0: 74 20 69 6e 64 69 63 65 73 20 77 6f 75 6c 64 20  t indices would 
c800: 68 61 76 65 20 62 65 65 6e 20 75 73 65 64 2e 3c  have been used.<
c810: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70  /p>..<p>The outp
c820: 75 74 20 66 72 6f 6d 20 45 58 50 4c 41 49 4e 20  ut from EXPLAIN 
c830: 61 6e 64 20 45 58 50 4c 41 49 4e 20 51 55 45 52  and EXPLAIN QUER
c840: 59 20 50 4c 41 4e 20 69 73 20 69 6e 74 65 6e 64  Y PLAN is intend
c850: 65 64 20 66 6f 72 0a 69 6e 74 65 72 61 63 74 69  ed for.interacti
c860: 76 65 20 61 6e 61 6c 79 73 69 73 20 61 6e 64 20  ve analysis and 
c870: 74 72 6f 75 62 6c 65 73 68 6f 6f 74 69 6e 67 20  troubleshooting 
c880: 6f 6e 6c 79 2e 20 20 54 68 65 20 64 65 74 61 69  only.  The detai
c890: 6c 73 20 6f 66 20 74 68 65 20 0a 6f 75 74 70 75  ls of the .outpu
c8a0: 74 20 66 6f 72 6d 61 74 20 61 72 65 20 73 75 62  t format are sub
c8b0: 6a 65 63 74 20 74 6f 20 63 68 61 6e 67 65 20 66  ject to change f
c8c0: 72 6f 6d 20 6f 6e 65 20 72 65 6c 65 61 73 65 20  rom one release 
c8d0: 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 74 68 65  of SQLite to the
c8e0: 20 6e 65 78 74 2e 0a 41 70 70 6c 69 63 61 74 69   next..Applicati
c8f0: 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74 20 75  ons should not u
c900: 73 65 20 45 58 50 4c 41 49 4e 20 6f 72 20 45 58  se EXPLAIN or EX
c910: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
c920: 20 73 69 6e 63 65 0a 74 68 65 69 72 20 65 78 61   since.their exa
c930: 63 74 20 62 65 68 61 76 69 6f 72 20 69 73 20 75  ct behavior is u
c940: 6e 64 6f 63 75 6d 65 6e 74 65 64 2c 20 75 6e 73  ndocumented, uns
c950: 70 65 63 69 66 69 65 64 2c 20 61 6e 64 20 76 61  pecified, and va
c960: 72 69 61 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63  riable.</p>..<tc
c970: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
c980: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c9a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c9b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c9c0: 23 0a 53 65 63 74 69 6f 6e 20 65 78 70 72 65 73  #.Section expres
c9d0: 73 69 6f 6e 20 65 78 70 72 20 7b 2a 65 78 70 72  sion expr {*expr
c9e0: 65 73 73 69 6f 6e 20 7b 65 78 70 72 65 73 73 69  ession {expressi
c9f0: 6f 6e 20 73 79 6e 74 61 78 7d 7d 0a 0a 42 75 62  on syntax}}..Bub
ca00: 62 6c 65 44 69 61 67 72 61 6d 20 65 78 70 72 20  bleDiagram expr 
ca10: 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  1.BubbleDiagram 
ca20: 6c 69 74 65 72 61 6c 2d 76 61 6c 75 65 0a 42 75  literal-value.Bu
ca30: 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69 67 6e  bbleDiagram sign
ca40: 65 64 2d 6e 75 6d 62 65 72 0a 42 75 62 62 6c 65  ed-number.Bubble
ca50: 44 69 61 67 72 61 6d 20 72 61 69 73 65 2d 66 75  Diagram raise-fu
ca60: 6e 63 74 69 6f 6e 0a 3c 2f 74 63 6c 3e 0a 0a 3c  nction.</tcl>..<
ca70: 70 3e 54 68 69 73 20 73 65 63 74 69 6f 6e 20 69  p>This section i
ca80: 73 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  s different from
ca90: 20 74 68 65 20 6f 74 68 65 72 73 2e 20 20 4d 6f   the others.  Mo
caa0: 73 74 20 6f 74 68 65 72 20 73 65 63 74 69 6f 6e  st other section
cab0: 73 20 6f 66 0a 74 68 69 73 20 64 6f 63 75 6d 65  s of.this docume
cac0: 6e 74 20 74 61 6c 6b 73 20 61 62 6f 75 74 20 61  nt talks about a
cad0: 20 70 61 72 74 69 63 75 6c 61 72 20 53 51 4c 20   particular SQL 
cae0: 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20 73  command.  This s
caf0: 65 63 74 69 6f 6e 20 64 6f 65 73 0a 6e 6f 74 20  ection does.not 
cb00: 74 61 6c 6b 20 61 62 6f 75 74 20 61 20 73 74 61  talk about a sta
cb10: 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61 6e 64 20  ndalone command 
cb20: 62 75 74 20 61 62 6f 75 74 20 22 65 78 70 72 65  but about "expre
cb30: 73 73 69 6f 6e 73 22 20 77 68 69 63 68 20 61 72  ssions" which ar
cb40: 65 20 0a 73 75 62 63 6f 6d 70 6f 6e 65 6e 74 73  e .subcomponents
cb50: 20 6f 66 20 6d 6f 73 74 20 6f 74 68 65 72 20 63   of most other c
cb60: 6f 6d 6d 61 6e 64 73 2e 3c 2f 70 3e 0a 0a 3c 74  ommands.</p>..<t
cb70: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62  cl>hd_fragment b
cb80: 69 6e 61 72 79 6f 70 73 20 7b 62 69 6e 61 72 79  inaryops {binary
cb90: 20 6f 70 65 72 61 74 6f 72 73 7d 3c 2f 74 63 6c   operators}</tcl
cba0: 3e 0a 3c 68 33 3e 4f 70 65 72 61 74 6f 72 73 3c  >.<h3>Operators<
cbb0: 2f 68 33 3e 0a 3c 70 3e 5e 28 53 51 4c 69 74 65  /h3>.<p>^(SQLite
cbc0: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 74 68 65   understands the
cbd0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 69 6e 61 72   following binar
cbe0: 79 20 6f 70 65 72 61 74 6f 72 73 2c 20 69 6e 20  y operators, in 
cbf0: 6f 72 64 65 72 20 66 72 6f 6d 0a 68 69 67 68 65  order from.highe
cc00: 73 74 20 74 6f 20 6c 6f 77 65 73 74 20 70 72 65  st to lowest pre
cc10: 63 65 64 65 6e 63 65 3a 3c 2f 70 3e 0a 0a 3c 62  cedence:</p>..<b
cc20: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
cc30: 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32 63  <font color="#2c
cc40: 32 63 66 30 22 3e 3c 62 69 67 3e 7c 7c 0a 2a 20  2cf0"><big>||.* 
cc50: 20 20 20 2f 20 20 20 20 25 0a 2b 20 20 20 20 2d     /    %.+    -
cc60: 0a 26 6c 74 3b 26 6c 74 3b 20 20 20 26 67 74 3b  .&lt;&lt;   &gt;
cc70: 26 67 74 3b 20 20 20 26 61 6d 70 3b 20 20 20 20  &gt;   &amp;    
cc80: 7c 0a 26 6c 74 3b 20 20 20 20 26 6c 74 3b 3d 20  |.&lt;    &lt;= 
cc90: 20 20 26 67 74 3b 20 20 20 20 26 67 74 3b 3d 0a    &gt;    &gt;=.
cca0: 3d 20 20 20 20 3d 3d 20 20 20 21 3d 20 20 20 26  =    ==   !=   &
ccb0: 6c 74 3b 26 67 74 3b 20 20 20 3c 2f 62 69 67 3e  lt;&gt;   </big>
ccc0: 49 53 20 20 49 4e 20 20 4c 49 4b 45 20 20 47 4c  IS  IN  LIKE  GL
ccd0: 4f 42 20 20 4d 41 54 43 48 20 20 52 45 47 45 58  OB  MATCH  REGEX
cce0: 50 0a 41 4e 44 20 20 20 0a 4f 52 3c 2f 66 6f 6e  P.AND   .OR</fon
ccf0: 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  t>.</pre></block
cd00: 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 28 53  quote>)^..<p>^(S
cd10: 75 70 70 6f 72 74 65 64 20 75 6e 61 72 79 20 70  upported unary p
cd20: 72 65 66 69 78 20 6f 70 65 72 61 74 6f 72 73 20  refix operators 
cd30: 61 72 65 20 74 68 65 73 65 3a 3c 2f 70 3e 0a 0a  are these:</p>..
cd40: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
cd50: 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23  >.<font color="#
cd60: 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 2d 20 20  2c2cf0"><big>-  
cd70: 20 20 2b 20 20 20 20 7e 20 20 20 20 4e 4f 54 3c    +    ~    NOT<
cd80: 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70  /big></font>.</p
cd90: 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
cda0: 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  )^..<tcl>hd_frag
cdb0: 6d 65 6e 74 20 63 6f 6c 6c 61 74 65 6f 70 20 7b  ment collateop {
cdc0: 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
cdd0: 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20  }</tcl>.<p>^The 
cde0: 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
cdf0: 20 63 61 6e 20 62 65 20 74 68 6f 75 67 68 74 20   can be thought 
ce00: 6f 66 20 61 73 20 61 20 75 6e 61 72 79 20 70 6f  of as a unary po
ce10: 73 74 66 69 78 0a 6f 70 65 72 61 74 6f 72 2e 20  stfix.operator. 
ce20: 20 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70   ^The COLLATE op
ce30: 65 72 61 74 6f 72 20 68 61 73 20 74 68 65 20 68  erator has the h
ce40: 69 67 68 65 73 74 20 70 72 65 63 65 64 65 6e 63  ighest precedenc
ce50: 65 2e 0a 5e 49 74 20 61 6c 77 61 79 73 20 62 69  e..^It always bi
ce60: 6e 64 73 20 6d 6f 72 65 20 74 69 67 68 74 6c 79  nds more tightly
ce70: 20 74 68 61 6e 20 61 6e 79 20 70 72 65 66 69 78   than any prefix
ce80: 20 75 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20   unary operator 
ce90: 6f 72 0a 61 6e 79 20 62 69 6e 61 72 79 20 6f 70  or.any binary op
cea0: 65 72 61 74 6f 72 2e 3c 2f 70 3e 0a 0a 3c 74 63  erator.</p>..<tc
ceb0: 6c 3e 68 64 5f 70 75 74 73 20 22 0a 3c 70 3e 5e  l>hd_puts ".<p>^
cec0: 54 68 65 20 75 6e 61 72 79 20 6f 70 65 72 61 74  The unary operat
ced0: 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 2b 5d 20  or [Operator +] 
cee0: 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 5e 49 74  is a no-op.  ^It
cef0: 20 63 61 6e 20 62 65 20 61 70 70 6c 69 65 64 0a   can be applied.
cf00: 74 6f 20 73 74 72 69 6e 67 73 2c 20 6e 75 6d 62  to strings, numb
cf10: 65 72 73 2c 20 6f 72 20 62 6c 6f 62 73 20 61 6e  ers, or blobs an
cf20: 64 20 69 74 20 61 6c 77 61 79 73 20 67 69 76 65  d it always give
cf30: 73 20 61 73 20 69 74 73 20 72 65 73 75 6c 74 20  s as its result 
cf40: 74 68 65 0a 76 61 6c 75 65 20 6f 66 20 74 68 65  the.value of the
cf50: 20 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e 22 3c 2f   operand.</p>"</
cf60: 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68  tcl>..<p>Note th
cf70: 61 74 20 74 68 65 72 65 20 61 72 65 20 74 77 6f  at there are two
cf80: 20 76 61 72 69 61 74 69 6f 6e 73 20 6f 66 20 74   variations of t
cf90: 68 65 20 65 71 75 61 6c 73 20 61 6e 64 20 6e 6f  he equals and no
cfa0: 74 20 65 71 75 61 6c 73 0a 6f 70 65 72 61 74 6f  t equals.operato
cfb0: 72 73 2e 20 20 5e 45 71 75 61 6c 73 20 63 61 6e  rs.  ^Equals can
cfc0: 20 62 65 20 65 69 74 68 65 72 0a 0a 3c 74 63 6c   be either..<tcl
cfd0: 3e 0a 68 64 5f 70 75 74 73 20 22 5b 4f 70 65 72  >.hd_puts "[Oper
cfe0: 61 74 6f 72 20 3d 5d 20 6f 72 20 5b 4f 70 65 72  ator =] or [Oper
cff0: 61 74 6f 72 20 3d 3d 5d 2e 0a 5e 54 68 65 20 6e  ator ==]..^The n
d000: 6f 6e 2d 65 71 75 61 6c 73 20 6f 70 65 72 61 74  on-equals operat
d010: 6f 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  or can be either
d020: 0a 5b 4f 70 65 72 61 74 6f 72 20 21 3d 5d 20 6f  .[Operator !=] o
d030: 72 20 5b 4f 70 65 72 61 74 6f 72 20 7b 26 6c 74  r [Operator {&lt
d040: 3b 26 67 74 3b 7d 5d 2e 0a 5e 54 68 65 20 5b 4f  ;&gt;}]..^The [O
d050: 70 65 72 61 74 6f 72 20 7c 7c 5d 20 6f 70 65 72  perator ||] oper
d060: 61 74 6f 72 20 69 73 20 5c 22 63 6f 6e 63 61 74  ator is \"concat
d070: 65 6e 61 74 65 5c 22 20 2d 20 69 74 20 6a 6f 69  enate\" - it joi
d080: 6e 73 20 74 6f 67 65 74 68 65 72 0a 74 68 65 20  ns together.the 
d090: 74 77 6f 20 73 74 72 69 6e 67 73 20 6f 66 20 69  two strings of i
d0a0: 74 73 20 6f 70 65 72 61 6e 64 73 2e 0a 5e 54 68  ts operands..^Th
d0b0: 65 20 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65 72  e operator [Oper
d0c0: 61 74 6f 72 20 25 5d 20 6f 75 74 70 75 74 73 20  ator %] outputs 
d0d0: 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 6f 66  the remainder of
d0e0: 20 69 74 73 20 6c 65 66 74 20 0a 6f 70 65 72 61   its left .opera
d0f0: 6e 64 20 6d 6f 64 75 6c 6f 20 69 74 73 20 72 69  nd modulo its ri
d100: 67 68 74 20 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e  ght operand.</p>
d110: 0a 0a 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c 74  ..<p>^The result
d120: 20 6f 66 20 61 6e 79 20 62 69 6e 61 72 79 20 6f   of any binary o
d130: 70 65 72 61 74 6f 72 20 69 73 20 61 20 6e 75 6d  perator is a num
d140: 65 72 69 63 20 76 61 6c 75 65 2c 20 65 78 63 65  eric value, exce
d150: 70 74 0a 66 6f 72 20 74 68 65 20 5b 4f 70 65 72  pt.for the [Oper
d160: 61 74 6f 72 20 7c 7c 5d 20 63 6f 6e 63 61 74 65  ator ||] concate
d170: 6e 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 20  nation operator 
d180: 77 68 69 63 68 20 67 69 76 65 73 20 61 20 73 74  which gives a st
d190: 72 69 6e 67 0a 72 65 73 75 6c 74 2e 3c 2f 70 3e  ring.result.</p>
d1a0: 22 0a 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b  "..hd_fragment {
d1b0: 69 73 69 73 6e 6f 74 7d 20 7b 49 53 20 6f 70 65  isisnot} {IS ope
d1c0: 72 61 74 6f 72 7d 20 7b 49 53 20 4e 4f 54 20 6f  rator} {IS NOT o
d1d0: 70 65 72 61 74 6f 72 7d 0a 0a 68 64 5f 70 75 74  perator}..hd_put
d1e0: 73 20 22 3c 70 3e 5e 54 68 65 20 5b 4f 70 65 72  s "<p>^The [Oper
d1f0: 61 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f 70  ator IS] and [Op
d200: 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d  erator {IS NOT}]
d210: 20 6f 70 65 72 61 74 6f 72 73 20 77 6f 72 6b 0a   operators work.
d220: 6c 69 6b 65 20 5b 4f 70 65 72 61 74 6f 72 20 3d  like [Operator =
d230: 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20  ] and [Operator 
d240: 21 3d 5d 20 65 78 63 65 70 74 20 74 68 61 74 20  !=] except that 
d250: 4e 55 4c 4c 20 76 61 6c 75 65 73 20 63 6f 6d 70  NULL values comp
d260: 61 72 65 0a 65 71 75 61 6c 20 74 6f 20 6f 6e 65  are.equal to one
d270: 20 61 6e 6f 74 68 65 72 2e 20 20 5e 5b 4f 70 65   another.  ^[Ope
d280: 72 61 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f  rator IS] and [O
d290: 70 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d  perator {IS NOT}
d2a0: 5d 0a 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  ].have the same 
d2b0: 70 72 65 63 65 64 65 6e 63 65 20 61 73 20 5b 4f  precedence as [O
d2c0: 70 65 72 61 74 6f 72 20 3d 5d 2e 22 0a 0a 3c 74  perator =]."..<t
d2d0: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c  cl>hd_fragment l
d2e0: 69 74 76 61 6c 75 65 20 7b 6c 69 74 65 72 61 6c  itvalue {literal
d2f0: 20 76 61 6c 75 65 7d 3c 2f 74 63 6c 3e 0a 3c 68   value}</tcl>.<h
d300: 33 3e 4c 69 74 65 72 61 6c 20 56 61 6c 75 65 73  3>Literal Values
d310: 3c 2f 68 33 3e 0a 3c 70 3e 0a 5e 41 20 6c 69 74  </h3>.<p>.^A lit
d320: 65 72 61 6c 20 76 61 6c 75 65 20 69 73 20 61 20  eral value is a 
d330: 63 6f 6e 73 74 61 6e 74 20 6f 66 20 73 6f 6d 65  constant of some
d340: 20 6b 69 6e 64 2e 0a 5e 4c 69 74 65 72 61 6c 20   kind..^Literal 
d350: 76 61 6c 75 65 73 20 6d 61 79 20 62 65 20 69 6e  values may be in
d360: 74 65 67 65 72 73 2c 20 66 6c 6f 61 74 69 6e 67  tegers, floating
d370: 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 73 2c 20   point numbers, 
d380: 73 74 72 69 6e 67 73 2c 0a 42 4c 4f 42 73 2c 20  strings,.BLOBs, 
d390: 6f 72 20 4e 55 4c 4c 73 2e 0a 5e 53 63 69 65 6e  or NULLs..^Scien
d3a0: 74 69 66 69 63 20 6e 6f 74 61 74 69 6f 6e 20 69  tific notation i
d3b0: 73 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72 20  s supported for 
d3c0: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c  floating point l
d3d0: 69 74 65 72 61 6c 20 76 61 6c 75 65 73 2e 0a 5e  iteral values..^
d3e0: 28 54 68 65 20 22 2e 22 20 63 68 61 72 61 63 74  (The "." charact
d3f0: 65 72 20 69 73 20 61 6c 77 61 79 73 20 75 73 65  er is always use
d400: 64 20 0a 61 73 20 74 68 65 20 64 65 63 69 6d 61  d .as the decima
d410: 6c 20 70 6f 69 6e 74 20 65 76 65 6e 20 69 66 20  l point even if 
d420: 74 68 65 20 6c 6f 63 61 6c 65 20 73 65 74 74 69  the locale setti
d430: 6e 67 20 73 70 65 63 69 66 69 65 73 20 22 2c 22  ng specifies ","
d440: 20 66 6f 72 0a 74 68 69 73 20 72 6f 6c 65 20 2d   for.this role -
d450: 20 74 68 65 20 75 73 65 20 6f 66 20 22 2c 22 20   the use of "," 
d460: 66 6f 72 20 74 68 65 20 64 65 63 69 6d 61 6c 20  for the decimal 
d470: 70 6f 69 6e 74 20 77 6f 75 6c 64 20 72 65 73 75  point would resu
d480: 6c 74 20 69 6e 0a 73 79 6e 74 61 63 74 69 63 20  lt in.syntactic 
d490: 61 6d 62 69 67 75 69 74 79 2e 29 5e 20 20 5e 41  ambiguity.)^  ^A
d4a0: 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74   string constant
d4b0: 20 69 73 20 66 6f 72 6d 65 64 20 62 79 20 65 6e   is formed by en
d4c0: 63 6c 6f 73 69 6e 67 20 74 68 65 0a 73 74 72 69  closing the.stri
d4d0: 6e 67 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f  ng in single quo
d4e0: 74 65 73 20 28 27 29 2e 20 20 5e 41 20 73 69 6e  tes (').  ^A sin
d4f0: 67 6c 65 20 71 75 6f 74 65 20 77 69 74 68 69 6e  gle quote within
d500: 20 74 68 65 20 73 74 72 69 6e 67 20 63 61 6e 0a   the string can.
d510: 62 65 20 65 6e 63 6f 64 65 64 20 62 79 20 70 75  be encoded by pu
d520: 74 74 69 6e 67 20 74 77 6f 20 73 69 6e 67 6c 65  tting two single
d530: 20 71 75 6f 74 65 73 20 69 6e 20 61 20 72 6f 77   quotes in a row
d540: 20 2d 20 61 73 20 69 6e 20 50 61 73 63 61 6c 2e   - as in Pascal.
d550: 0a 43 2d 73 74 79 6c 65 20 65 73 63 61 70 65 73  .C-style escapes
d560: 20 75 73 69 6e 67 20 74 68 65 20 62 61 63 6b 73   using the backs
d570: 6c 61 73 68 20 63 68 61 72 61 63 74 65 72 20 61  lash character a
d580: 72 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64  re not supported
d590: 20 62 65 63 61 75 73 65 0a 74 68 65 79 20 61 72   because.they ar
d5a0: 65 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53  e not standard S
d5b0: 51 4c 2e 0a 5e 42 4c 4f 42 20 6c 69 74 65 72 61  QL..^BLOB litera
d5c0: 6c 73 20 61 72 65 20 73 74 72 69 6e 67 20 6c 69  ls are string li
d5d0: 74 65 72 61 6c 73 20 63 6f 6e 74 61 69 6e 69 6e  terals containin
d5e0: 67 20 68 65 78 61 64 65 63 69 6d 61 6c 20 64 61  g hexadecimal da
d5f0: 74 61 20 61 6e 64 0a 70 72 65 63 65 64 65 64 20  ta and.preceded 
d600: 62 79 20 61 20 73 69 6e 67 6c 65 20 22 78 22 20  by a single "x" 
d610: 6f 72 20 22 58 22 20 63 68 61 72 61 63 74 65 72  or "X" character
d620: 2e 20 20 5e 28 46 6f 72 20 65 78 61 6d 70 6c 65  .  ^(For example
d630: 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  :</p>..<blockquo
d640: 74 65 3e 3c 70 72 65 3e 0a 58 27 35 33 35 31 34  te><pre>.X'53514
d650: 43 36 39 37 34 36 35 27 0a 3c 2f 70 72 65 3e 3c  C697465'.</pre><
d660: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
d670: 3c 70 3e 0a 5e 41 20 6c 69 74 65 72 61 6c 20 76  <p>.^A literal v
d680: 61 6c 75 65 20 63 61 6e 20 61 6c 73 6f 20 62 65  alue can also be
d690: 20 74 68 65 20 74 6f 6b 65 6e 20 22 4e 55 4c 4c   the token "NULL
d6a0: 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  "..</p>..<tcl>hd
d6b0: 5f 66 72 61 67 6d 65 6e 74 20 76 61 72 70 61 72  _fragment varpar
d6c0: 61 6d 20 70 61 72 61 6d 65 74 65 72 20 70 61 72  am parameter par
d6d0: 61 6d 65 74 65 72 73 20 7b 62 6f 75 6e 64 20 70  ameters {bound p
d6e0: 61 72 61 6d 65 74 65 72 7d 20 7b 62 6f 75 6e 64  arameter} {bound
d6f0: 20 70 61 72 61 6d 65 74 65 72 73 7d 3c 2f 74 63   parameters}</tc
d700: 6c 3e 0a 3c 68 33 3e 50 61 72 61 6d 65 74 65 72  l>.<h3>Parameter
d710: 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 41 20 22 76 61  s</h3>.<p>.A "va
d720: 72 69 61 62 6c 65 22 20 6f 72 20 22 70 61 72 61  riable" or "para
d730: 6d 65 74 65 72 22 20 74 6f 6b 65 6e 0a 73 70 65  meter" token.spe
d740: 63 69 66 69 65 73 20 61 20 70 6c 61 63 65 68 6f  cifies a placeho
d750: 6c 64 65 72 20 69 6e 20 74 68 65 20 65 78 70 72  lder in the expr
d760: 65 73 73 69 6f 6e 20 66 6f 72 20 61 20 6c 69 74  ession for a lit
d770: 65 72 61 6c 0a 76 61 6c 75 65 20 74 68 61 74 20  eral.value that 
d780: 69 73 20 66 69 6c 6c 65 64 20 69 6e 20 61 74 20  is filled in at 
d790: 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68  runtime using th
d7a0: 65 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  e.[sqlite3_bind_
d7b0: 62 6c 6f 62 28 29 20 7c 20 73 71 6c 69 74 65 33  blob() | sqlite3
d7c0: 5f 62 69 6e 64 28 29 5d 20 66 61 6d 69 6c 79 20  _bind()] family 
d7d0: 6f 66 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61  of C/C++ interfa
d7e0: 63 65 73 2e 0a 5e 28 50 61 72 61 6d 65 74 65 72  ces..^(Parameter
d7f0: 73 20 63 61 6e 20 74 61 6b 65 20 73 65 76 65 72  s can take sever
d800: 61 6c 20 66 6f 72 6d 73 3a 0a 3c 2f 70 3e 0a 0a  al forms:.</p>..
d810: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61  <blockquote>.<ta
d820: 62 6c 65 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  ble>.<tr>.<td al
d830: 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69  ign="right" vali
d840: 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62  gn="top"><b>?</b
d850: 3e 3c 69 3e 4e 4e 4e 3c 2f 69 3e 3c 2f 74 64 3e  ><i>NNN</i></td>
d860: 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c  <td width="20"><
d870: 2f 74 64 3e 0a 3c 74 64 3e 41 20 71 75 65 73 74  /td>.<td>A quest
d880: 69 6f 6e 20 6d 61 72 6b 20 66 6f 6c 6c 6f 77 65  ion mark followe
d890: 64 20 62 79 20 61 20 6e 75 6d 62 65 72 20 3c 69  d by a number <i
d8a0: 3e 4e 4e 4e 3c 2f 69 3e 20 68 6f 6c 64 73 20 61  >NNN</i> holds a
d8b0: 20 73 70 6f 74 20 66 6f 72 20 74 68 65 0a 4e 4e   spot for the.NN
d8c0: 4e 2d 74 68 20 70 61 72 61 6d 65 74 65 72 2e 20  N-th parameter. 
d8d0: 20 4e 4e 4e 20 6d 75 73 74 20 62 65 20 62 65 74   NNN must be bet
d8e0: 77 65 65 6e 20 31 20 61 6e 64 20 5b 53 51 4c 49  ween 1 and [SQLI
d8f0: 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
d900: 4e 55 4d 42 45 52 5d 2e 3c 2f 74 64 3e 0a 3c 2f  NUMBER].</td>.</
d910: 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  tr>.<tr>.<td ali
d920: 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67  gn="right" valig
d930: 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e  n="top"><b>?</b>
d940: 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22  </td><td width="
d950: 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 41 20  20"></td>.<td>A 
d960: 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 74 68  question mark th
d970: 61 74 20 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77  at is not follow
d980: 65 64 20 62 79 20 61 20 6e 75 6d 62 65 72 20 68  ed by a number h
d990: 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72 0a  olds a spot for.
d9a0: 74 68 65 20 6e 65 78 74 20 75 6e 75 73 65 64 20  the next unused 
d9b0: 70 61 72 61 6d 65 74 65 72 2e 3c 2f 74 64 3e 0a  parameter.</td>.
d9c0: 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61  </tr>.<tr>.<td a
d9d0: 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c  lign="right" val
d9e0: 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3a 3c 2f  ign="top"><b>:</
d9f0: 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74  b><i>AAAA</i></t
da00: 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22  d><td width="20"
da10: 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 41 20 63 6f 6c  ></td>.<td>A col
da20: 6f 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  on followed by a
da30: 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d  n identifier nam
da40: 65 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66  e holds a spot f
da50: 6f 72 20 61 20 6e 61 6d 65 64 0a 70 61 72 61 6d  or a named.param
da60: 65 74 65 72 20 77 69 74 68 20 74 68 65 20 6e 61  eter with the na
da70: 6d 65 20 41 41 41 41 2e 20 20 4e 61 6d 65 64 20  me AAAA.  Named 
da80: 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20 61  parameters are a
da90: 6c 73 6f 20 6e 75 6d 62 65 72 65 64 2e 0a 54 68  lso numbered..Th
daa0: 65 20 6e 75 6d 62 65 72 20 61 73 73 69 67 6e 65  e number assigne
dab0: 64 20 69 73 20 74 68 65 20 6e 65 78 74 20 75 6e  d is the next un
dac0: 75 73 65 64 20 6e 75 6d 62 65 72 2e 20 20 54 6f  used number.  To
dad0: 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e   avoid confusion
dae0: 2c 0a 69 74 20 69 73 20 62 65 73 74 20 74 6f 20  ,.it is best to 
daf0: 61 76 6f 69 64 20 6d 69 78 69 6e 67 20 6e 61 6d  avoid mixing nam
db00: 65 64 20 61 6e 64 20 6e 75 6d 62 65 72 65 64 20  ed and numbered 
db10: 70 61 72 61 6d 65 74 65 72 73 2e 3c 2f 74 64 3e  parameters.</td>
db20: 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20  .</tr>.<tr>.<td 
db30: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61  align="right" va
db40: 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 40 3c  lign="top"><b>@<
db50: 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f  /b><i>AAAA</i></
db60: 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30  td><td width="20
db70: 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 41 6e 20 22  "></td>.<td>An "
db80: 61 74 22 20 73 69 67 6e 20 77 6f 72 6b 73 20 65  at" sign works e
db90: 78 61 63 74 6c 79 20 6c 69 6b 65 20 61 20 63 6f  xactly like a co
dba0: 6c 6f 6e 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  lon.</td>.</tr>.
dbb0: 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
dbc0: 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74  right" valign="t
dbd0: 6f 70 22 3e 3c 62 3e 24 3c 2f 62 3e 3c 69 3e 41  op"><b>$</b><i>A
dbe0: 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20  AAA</i></td><td 
dbf0: 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e  width="20"></td>
dc00: 0a 3c 74 64 3e 41 20 64 6f 6c 6c 61 72 2d 73 69  .<td>A dollar-si
dc10: 67 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  gn followed by a
dc20: 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d  n identifier nam
dc30: 65 20 61 6c 73 6f 20 68 6f 6c 64 73 20 61 20 73  e also holds a s
dc40: 70 6f 74 20 66 6f 72 20 61 20 6e 61 6d 65 64 0a  pot for a named.
dc50: 70 61 72 61 6d 65 74 65 72 20 77 69 74 68 20 74  parameter with t
dc60: 68 65 20 6e 61 6d 65 20 41 41 41 41 2e 20 20 54  he name AAAA.  T
dc70: 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61  he identifier na
dc80: 6d 65 20 69 6e 20 74 68 69 73 20 63 61 73 65 20  me in this case 
dc90: 63 61 6e 20 69 6e 63 6c 75 64 65 0a 6f 6e 65 20  can include.one 
dca0: 6f 72 20 6d 6f 72 65 20 6f 63 63 75 72 61 6e 63  or more occuranc
dcb0: 65 73 20 6f 66 20 22 3a 3a 22 20 61 6e 64 20 61  es of "::" and a
dcc0: 20 73 75 66 66 69 78 20 65 6e 63 6c 6f 73 65 64   suffix enclosed
dcd0: 20 69 6e 20 22 28 2e 2e 2e 29 22 20 63 6f 6e 74   in "(...)" cont
dce0: 61 69 6e 69 6e 67 0a 61 6e 79 20 74 65 78 74 20  aining.any text 
dcf0: 61 74 20 61 6c 6c 2e 20 20 54 68 69 73 20 73 79  at all.  This sy
dd00: 6e 74 61 78 20 69 73 20 74 68 65 20 66 6f 72 6d  ntax is the form
dd10: 20 6f 66 20 61 20 76 61 72 69 61 62 6c 65 20 6e   of a variable n
dd20: 61 6d 65 20 69 6e 20 74 68 65 0a 5b 68 74 74 70  ame in the.[http
dd30: 3a 2f 2f 77 77 77 2e 74 63 6c 2e 74 6b 2f 20 7c  ://www.tcl.tk/ |
dd40: 20 54 63 6c 20 70 72 6f 67 72 61 6d 6d 69 6e 67   Tcl programming
dd50: 20 6c 61 6e 67 75 61 67 65 5d 2e 20 20 54 68 65   language].  The
dd60: 20 70 72 65 73 65 6e 63 65 0a 6f 66 20 74 68 69   presence.of thi
dd70: 73 20 73 79 6e 74 61 78 20 72 65 73 75 6c 74 73  s syntax results
dd80: 20 66 72 6f 6d 20 74 68 65 20 66 61 63 74 20 74   from the fact t
dd90: 68 61 74 20 53 51 4c 69 74 65 20 69 73 20 72 65  hat SQLite is re
dda0: 61 6c 6c 79 20 61 20 0a 5b 54 63 6c 20 65 78 74  ally a .[Tcl ext
ddb0: 65 6e 73 69 6f 6e 5d 20 74 68 61 74 20 68 61 73  ension] that has
ddc0: 20 65 73 63 61 70 65 64 20 69 6e 74 6f 20 74 68   escaped into th
ddd0: 65 20 77 69 6c 64 2e 3c 2f 74 64 3e 0a 3c 2f 74  e wild.</td>.</t
dde0: 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c  r>.</table>.</bl
ddf0: 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e  ockquote>)^..<p>
de00: 5e 50 61 72 61 6d 65 74 65 72 73 20 74 68 61 74  ^Parameters that
de10: 20 61 72 65 20 6e 6f 74 20 61 73 73 69 67 6e 65   are not assigne
de20: 64 20 76 61 6c 75 65 73 20 75 73 69 6e 67 0a 5b  d values using.[
de30: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f  sqlite3_bind_blo
de40: 62 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69  b() | sqlite3_bi
de50: 6e 64 28 29 5d 20 61 72 65 20 74 72 65 61 74 65  nd()] are treate
de60: 64 0a 61 73 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a  d.as NULL.</p>..
de70: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
de80: 20 6c 69 6b 65 20 4c 49 4b 45 20 45 53 43 41 50   like LIKE ESCAP
de90: 45 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  E</tcl>.<h3>The 
dea0: 4c 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20 6f 70  LIKE and GLOB op
deb0: 65 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e  erators</h3>.<p>
dec0: 5e 54 68 65 20 4c 49 4b 45 20 6f 70 65 72 61 74  ^The LIKE operat
ded0: 6f 72 20 64 6f 65 73 20 61 20 70 61 74 74 65 72  or does a patter
dee0: 6e 20 6d 61 74 63 68 69 6e 67 20 63 6f 6d 70 61  n matching compa
def0: 72 69 73 6f 6e 2e 20 5e 54 68 65 20 6f 70 65 72  rison. ^The oper
df00: 61 6e 64 0a 74 6f 20 74 68 65 20 72 69 67 68 74  and.to the right
df10: 20 6f 66 20 74 68 65 20 4c 49 4b 45 20 6f 70 65   of the LIKE ope
df20: 72 61 74 6f 72 20 63 6f 6e 74 61 69 6e 73 20 74  rator contains t
df30: 68 65 20 70 61 74 74 65 72 6e 20 61 6e 64 20 74  he pattern and t
df40: 68 65 20 6c 65 66 74 20 68 61 6e 64 0a 6f 70 65  he left hand.ope
df50: 72 61 6e 64 20 63 6f 6e 74 61 69 6e 73 20 74 68  rand contains th
df60: 65 20 73 74 72 69 6e 67 20 74 6f 20 6d 61 74 63  e string to matc
df70: 68 20 61 67 61 69 6e 73 74 20 74 68 65 20 70 61  h against the pa
df80: 74 74 65 72 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  ttern...<tcl>hd_
df90: 70 75 74 73 20 22 5e 41 20 70 65 72 63 65 6e 74  puts "^A percent
dfa0: 20 73 79 6d 62 6f 6c 20 28 5c 22 25 5c 22 29 20   symbol (\"%\") 
dfb0: 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74  in the LIKE patt
dfc0: 65 72 6e 20 6d 61 74 63 68 65 73 20 61 6e 79 0a  ern matches any.
dfd0: 73 65 71 75 65 6e 63 65 20 6f 66 20 7a 65 72 6f  sequence of zero
dfe0: 20 6f 72 20 6d 6f 72 65 20 63 68 61 72 61 63 74   or more charact
dff0: 65 72 73 20 69 6e 20 74 68 65 20 73 74 72 69 6e  ers in the strin
e000: 67 2e 20 20 5e 41 6e 20 75 6e 64 65 72 73 63 6f  g.  ^An undersco
e010: 72 65 0a 28 5c 22 5f 5c 22 29 20 69 6e 20 74 68  re.(\"_\") in th
e020: 65 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 6d  e LIKE pattern m
e030: 61 74 63 68 65 73 20 61 6e 79 20 73 69 6e 67 6c  atches any singl
e040: 65 20 63 68 61 72 61 63 74 65 72 20 69 6e 20 74  e character in t
e050: 68 65 0a 73 74 72 69 6e 67 2e 20 20 5e 28 41 6e  he.string.  ^(An
e060: 79 20 6f 74 68 65 72 20 63 68 61 72 61 63 74 65  y other characte
e070: 72 20 6d 61 74 63 68 65 73 20 69 74 73 65 6c 66  r matches itself
e080: 20 6f 72 20 69 74 73 20 6c 6f 77 65 72 2f 75 70   or its lower/up
e090: 70 65 72 20 63 61 73 65 0a 65 71 75 69 76 61 6c  per case.equival
e0a0: 65 6e 74 20 28 69 2e 65 2e 20 63 61 73 65 2d 69  ent (i.e. case-i
e0b0: 6e 73 65 6e 73 69 74 69 76 65 20 6d 61 74 63 68  nsensitive match
e0c0: 69 6e 67 29 2e 29 5e 20 20 28 41 20 62 75 67 3a  ing).)^  (A bug:
e0d0: 20 5e 53 51 4c 69 74 65 20 6f 6e 6c 79 0a 75 6e   ^SQLite only.un
e0e0: 64 65 72 73 74 61 6e 64 73 20 75 70 70 65 72 2f  derstands upper/
e0f0: 6c 6f 77 65 72 20 63 61 73 65 20 66 6f 72 20 41  lower case for A
e100: 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20  SCII characters 
e110: 62 79 20 64 65 66 61 75 6c 74 2e 20 20 5e 54 68  by default.  ^Th
e120: 65 0a 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20  e.LIKE operator 
e130: 69 73 20 63 61 73 65 20 73 65 6e 73 69 74 69 76  is case sensitiv
e140: 65 20 62 79 20 64 65 66 61 75 6c 74 20 66 6f 72  e by default for
e150: 20 75 6e 69 63 6f 64 65 20 63 68 61 72 61 63 74   unicode charact
e160: 65 72 73 20 74 68 61 74 20 61 72 65 0a 62 65 79  ers that are.bey
e170: 6f 6e 64 20 74 68 65 20 41 53 43 49 49 20 72 61  ond the ASCII ra
e180: 6e 67 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  nge.  For exampl
e190: 65 2c 0a 5e 74 68 65 20 65 78 70 72 65 73 73 69  e,.^the expressi
e1a0: 6f 6e 20 3c 62 3e 27 61 27 26 6e 62 73 70 3b 4c  on <b>'a'&nbsp;L
e1b0: 49 4b 45 26 6e 62 73 70 3b 27 41 27 3c 2f 62 3e  IKE&nbsp;'A'</b>
e1c0: 0a 69 73 20 54 52 55 45 20 62 75 74 20 3c 62 3e  .is TRUE but <b>
e1d0: 27 26 61 65 6c 69 67 3b 27 26 6e 62 73 70 3b 4c  '&aelig;'&nbsp;L
e1e0: 49 4b 45 26 6e 62 73 70 3b 27 26 41 45 6c 69 67  IKE&nbsp;'&AElig
e1f0: 3b 27 3c 2f 62 3e 20 69 73 20 46 41 4c 53 45 2e  ;'</b> is FALSE.
e200: 29 3c 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  )<p>"</tcl>..<p>
e210: 5e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c  ^If the optional
e220: 20 45 53 43 41 50 45 20 63 6c 61 75 73 65 20 69   ESCAPE clause i
e230: 73 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20  s present, then 
e240: 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 66  the expression.f
e250: 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 45 53 43  ollowing the ESC
e260: 41 50 45 20 6b 65 79 77 6f 72 64 20 6d 75 73 74  APE keyword must
e270: 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61 20 73   evaluate to a s
e280: 74 72 69 6e 67 20 63 6f 6e 73 69 73 74 69 6e 67  tring consisting
e290: 20 6f 66 0a 61 20 73 69 6e 67 6c 65 20 63 68 61   of.a single cha
e2a0: 72 61 63 74 65 72 2e 20 5e 54 68 69 73 20 63 68  racter. ^This ch
e2b0: 61 72 61 63 74 65 72 20 6d 61 79 20 62 65 20 75  aracter may be u
e2c0: 73 65 64 20 69 6e 20 74 68 65 20 4c 49 4b 45 20  sed in the LIKE 
e2d0: 70 61 74 74 65 72 6e 0a 74 6f 20 69 6e 63 6c 75  pattern.to inclu
e2e0: 64 65 20 6c 69 74 65 72 61 6c 20 70 65 72 63 65  de literal perce
e2f0: 6e 74 20 6f 72 20 75 6e 64 65 72 73 63 6f 72 65  nt or underscore
e300: 20 63 68 61 72 61 63 74 65 72 73 2e 20 5e 54 68   characters. ^Th
e310: 65 20 65 73 63 61 70 65 0a 63 68 61 72 61 63 74  e escape.charact
e320: 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  er followed by a
e330: 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 20   percent symbol 
e340: 28 25 29 2c 20 75 6e 64 65 72 73 63 6f 72 65 20  (%), underscore 
e350: 28 5f 29 2c 20 6f 72 20 61 20 73 65 63 6f 6e 64  (_), or a second
e360: 0a 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65  .instance of the
e370: 20 65 73 63 61 70 65 20 63 68 61 72 61 63 74 65   escape characte
e380: 72 20 69 74 73 65 6c 66 20 6d 61 74 63 68 65 73  r itself matches
e390: 20 61 0a 6c 69 74 65 72 61 6c 20 70 65 72 63 65   a.literal perce
e3a0: 6e 74 20 73 79 6d 62 6f 6c 2c 20 75 6e 64 65 72  nt symbol, under
e3b0: 73 63 6f 72 65 2c 20 6f 72 20 61 20 73 69 6e 67  score, or a sing
e3c0: 6c 65 20 65 73 63 61 70 65 20 63 68 61 72 61 63  le escape charac
e3d0: 74 65 72 2c 0a 72 65 73 70 65 63 74 69 76 65 6c  ter,.respectivel
e3e0: 79 2e 0a 0a 3c 70 3e 5e 54 68 65 20 69 6e 66 69  y...<p>^The infi
e3f0: 78 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20  x LIKE operator 
e400: 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  is implemented b
e410: 79 20 63 61 6c 6c 69 6e 67 20 74 68 65 0a 61 70  y calling the.ap
e420: 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65  plication-define
e430: 64 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20  d SQL functions 
e440: 5b 6c 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c  [like(<i>Y</i>,<
e450: 69 3e 58 3c 2f 69 3e 29 5d 20 6f 72 0a 5b 6c 69  i>X</i>)] or.[li
e460: 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58  ke(<i>Y</i>,<i>X
e470: 3c 2f 69 3e 2c 3c 69 3e 5a 3c 2f 69 3e 29 5d 3c  </i>,<i>Z</i>)]<
e480: 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  /a>.</p>..<p>^Th
e490: 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20  e LIKE operator 
e4a0: 63 61 6e 20 62 65 20 6d 61 64 65 20 63 61 73 65  can be made case
e4b0: 20 73 65 6e 73 69 74 69 76 65 20 75 73 69 6e 67   sensitive using
e4c0: 20 74 68 65 0a 5b 63 61 73 65 5f 73 65 6e 73 69   the.[case_sensi
e4d0: 74 69 76 65 5f 6c 69 6b 65 20 70 72 61 67 6d 61  tive_like pragma
e4e0: 5d 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  ].</p>..<tcl>hd_
e4f0: 66 72 61 67 6d 65 6e 74 20 67 6c 6f 62 20 47 4c  fragment glob GL
e500: 4f 42 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65  OB</tcl>.<p>^The
e510: 20 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72 20 69   GLOB operator i
e520: 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4c 49 4b  s similar to LIK
e530: 45 20 62 75 74 20 75 73 65 73 20 74 68 65 20 55  E but uses the U
e540: 6e 69 78 0a 66 69 6c 65 20 67 6c 6f 62 62 69 6e  nix.file globbin
e550: 67 20 73 79 6e 74 61 78 20 66 6f 72 20 69 74 73  g syntax for its
e560: 20 77 69 6c 64 63 61 72 64 73 2e 20 20 5e 41 6c   wildcards.  ^Al
e570: 73 6f 2c 20 47 4c 4f 42 20 69 73 20 63 61 73 65  so, GLOB is case
e580: 0a 73 65 6e 73 69 74 69 76 65 2c 20 75 6e 6c 69  .sensitive, unli
e590: 6b 65 20 4c 49 4b 45 2e 20 20 5e 42 6f 74 68 20  ke LIKE.  ^Both 
e5a0: 47 4c 4f 42 20 61 6e 64 20 4c 49 4b 45 20 6d 61  GLOB and LIKE ma
e5b0: 79 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79  y be preceded by
e5c0: 0a 74 68 65 20 4e 4f 54 20 6b 65 79 77 6f 72 64  .the NOT keyword
e5d0: 20 74 6f 20 69 6e 76 65 72 74 20 74 68 65 20 73   to invert the s
e5e0: 65 6e 73 65 20 6f 66 20 74 68 65 20 74 65 73 74  ense of the test
e5f0: 2e 20 20 5e 54 68 65 20 69 6e 66 69 78 20 47 4c  .  ^The infix GL
e600: 4f 42 20 0a 6f 70 65 72 61 74 6f 72 20 69 73 20  OB .operator is 
e610: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63  implemented by c
e620: 61 6c 6c 69 6e 67 20 74 68 65 20 66 75 6e 63 74  alling the funct
e630: 69 6f 6e 0a 5b 67 6c 6f 62 28 3c 69 3e 59 3c 2f  ion.[glob(<i>Y</
e640: 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20 61 6e  i>,<i>X</i>)] an
e650: 64 20 63 61 6e 20 62 65 20 6d 6f 64 69 66 69 65  d can be modifie
e660: 64 20 62 79 20 6f 76 65 72 72 69 64 69 6e 67 0a  d by overriding.
e670: 74 68 61 74 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f  that function.</
e680: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
e690: 6d 65 6e 74 20 72 65 67 65 78 70 20 52 45 47 45  ment regexp REGE
e6a0: 58 50 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65  XP</tcl>.<p>^The
e6b0: 20 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72   REGEXP operator
e6c0: 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 73 79   is a special sy
e6d0: 6e 74 61 78 20 66 6f 72 20 74 68 65 20 72 65 67  ntax for the reg
e6e0: 65 78 70 28 29 0a 75 73 65 72 20 66 75 6e 63 74  exp().user funct
e6f0: 69 6f 6e 2e 20 20 5e 4e 6f 20 72 65 67 65 78 70  ion.  ^No regexp
e700: 28 29 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  () user function
e710: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 64   is defined by d
e720: 65 66 61 75 6c 74 0a 61 6e 64 20 73 6f 20 75 73  efault.and so us
e730: 65 20 6f 66 20 74 68 65 20 52 45 47 45 58 50 20  e of the REGEXP 
e740: 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c 20 6e 6f  operator will no
e750: 72 6d 61 6c 6c 79 20 72 65 73 75 6c 74 20 69 6e  rmally result in
e760: 20 61 6e 0a 65 72 72 6f 72 20 6d 65 73 73 61 67   an.error messag
e770: 65 2e 20 20 5e 49 66 20 61 20 5b 61 70 70 6c 69  e.  ^If a [appli
e780: 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53  cation-defined S
e790: 51 4c 20 66 75 6e 63 74 69 6f 6e 5d 20 6e 61 6d  QL function] nam
e7a0: 65 64 20 22 72 65 67 65 78 70 22 0a 69 73 20 61  ed "regexp".is a
e7b0: 64 64 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65  dded at run-time
e7c0: 2c 20 74 68 61 74 20 66 75 6e 63 74 69 6f 6e 20  , that function 
e7d0: 77 69 6c 6c 20 62 65 20 63 61 6c 6c 65 64 20 69  will be called i
e7e0: 6e 20 6f 72 64 65 72 0a 74 6f 20 69 6d 70 6c 65  n order.to imple
e7f0: 6d 65 6e 74 20 74 68 65 20 52 45 47 45 58 50 20  ment the REGEXP 
e800: 6f 70 65 72 61 74 6f 72 2e 3c 2f 70 3e 0a 0a 3c  operator.</p>..<
e810: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
e820: 6d 61 74 63 68 20 4d 41 54 43 48 3c 2f 74 63 6c  match MATCH</tcl
e830: 3e 0a 3c 70 3e 5e 54 68 65 20 4d 41 54 43 48 20  >.<p>^The MATCH 
e840: 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 70  operator is a sp
e850: 65 63 69 61 6c 20 73 79 6e 74 61 78 20 66 6f 72  ecial syntax for
e860: 20 74 68 65 20 6d 61 74 63 68 28 29 0a 61 70 70   the match().app
e870: 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
e880: 20 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 54 68 65   function.  ^The
e890: 20 64 65 66 61 75 6c 74 20 6d 61 74 63 68 28 29   default match()
e8a0: 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d   function implem
e8b0: 65 6e 74 61 74 69 6f 6e 0a 72 61 69 73 65 73 20  entation.raises 
e8c0: 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 61 6e 64  an exception and
e8d0: 20 69 73 20 6e 6f 74 20 72 65 61 6c 6c 79 20 75   is not really u
e8e0: 73 65 66 75 6c 20 66 6f 72 20 61 6e 79 74 68 69  seful for anythi
e8f0: 6e 67 2e 0a 5e 42 75 74 20 65 78 74 65 6e 73 69  ng..^But extensi
e900: 6f 6e 73 20 63 61 6e 20 6f 76 65 72 72 69 64 65  ons can override
e910: 20 74 68 65 20 6d 61 74 63 68 28 29 20 66 75 6e   the match() fun
e920: 63 74 69 6f 6e 20 77 69 74 68 20 6d 6f 72 65 0a  ction with more.
e930: 68 65 6c 70 66 75 6c 20 6c 6f 67 69 63 2e 3c 2f  helpful logic.</
e940: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
e950: 6d 65 6e 74 20 62 65 74 77 65 65 6e 20 42 45 54  ment between BET
e960: 57 45 45 4e 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54  WEEN</tcl>.<h3>T
e970: 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61  he BETWEEN opera
e980: 74 6f 72 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 54 68  tor</h3>.<p>^(Th
e990: 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74  e BETWEEN operat
e9a0: 6f 72 20 69 73 20 6c 6f 67 69 63 61 6c 6c 79 20  or is logically 
e9b0: 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 61 20  equivalent to a 
e9c0: 70 61 69 72 20 6f 66 20 63 6f 6d 70 61 72 69 73  pair of comparis
e9d0: 6f 6e 73 2e 0a 22 3c 69 3e 78 3c 2f 69 3e 20 3c  ons.."<i>x</i> <
e9e0: 62 3e 42 45 54 57 45 45 4e 3c 2f 62 3e 20 3c 69  b>BETWEEN</b> <i
e9f0: 3e 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62  >y</i> <b>AND</b
ea00: 3e 20 3c 69 3e 7a 3c 2f 69 3e 22 20 69 73 20 0a  > <i>z</i>" is .
ea10: 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 0a 22  equivalent to ."
ea20: 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 67 74 3b 3d  <i>x</i><b>&gt;=
ea30: 3c 2f 62 3e 3c 69 3e 79 3c 2f 69 3e 20 3c 62 3e  </b><i>y</i> <b>
ea40: 41 4e 44 3c 2f 62 3e 20 3c 69 3e 78 3c 2f 69 3e  AND</b> <i>x</i>
ea50: 3c 62 3e 26 6c 74 3b 3d 3c 2f 62 3e 3c 69 3e 7a  <b>&lt;=</b><i>z
ea60: 3c 2f 69 3e 22 20 65 78 63 65 70 74 0a 74 68 61  </i>" except.tha
ea70: 74 20 77 69 74 68 20 42 45 54 57 45 45 4e 2c 20  t with BETWEEN, 
ea80: 74 68 65 20 3c 69 3e 78 3c 2f 69 3e 20 65 78 70  the <i>x</i> exp
ea90: 72 65 73 73 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  ression is only 
eaa0: 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 2e 29  evaluated once.)
eab0: 5e 0a 5e 54 68 65 20 70 72 65 63 65 64 65 6e 63  ^.^The precedenc
eac0: 65 20 6f 66 20 74 68 65 20 42 45 54 57 45 45 4e  e of the BETWEEN
ead0: 20 6f 70 65 72 61 74 6f 72 20 69 73 20 74 68 65   operator is the
eae0: 20 73 61 6d 65 20 61 73 20 74 68 65 20 70 72 65   same as the pre
eaf0: 63 65 64 65 6e 63 65 0a 61 73 20 6f 70 65 72 61  cedence.as opera
eb00: 74 6f 72 73 20 3c 62 3e 3d 3d 3c 2f 62 3e 20 61  tors <b>==</b> a
eb10: 6e 64 20 3c 62 3e 21 3d 3c 2f 62 3e 20 61 6e 64  nd <b>!=</b> and
eb20: 20 3c 62 3e 4c 49 4b 45 3c 2f 62 3e 20 61 6e 64   <b>LIKE</b> and
eb30: 20 67 72 6f 75 70 73 20 6c 65 66 74 20 74 6f 20   groups left to 
eb40: 72 69 67 68 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  right...<tcl>hd_
eb50: 66 72 61 67 6d 65 6e 74 20 63 61 73 65 20 7b 43  fragment case {C
eb60: 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 7d 3c  ASE expression}<
eb70: 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 43 41  /tcl>.<h3>The CA
eb80: 53 45 20 65 78 70 72 65 73 73 69 6f 6e 3c 2f 68  SE expression</h
eb90: 33 3e 0a 3c 70 3e 41 20 43 41 53 45 20 65 78 70  3>.<p>A CASE exp
eba0: 72 65 73 73 69 6f 6e 20 73 65 72 76 65 73 20 61  ression serves a
ebb0: 20 72 6f 6c 65 20 73 69 6d 69 6c 61 72 20 74 6f   role similar to
ebc0: 20 49 46 2d 54 48 45 4e 2d 45 4c 53 45 20 69 6e   IF-THEN-ELSE in
ebd0: 20 6f 74 68 65 72 0a 70 72 6f 67 72 61 6d 6d 69   other.programmi
ebe0: 6e 67 20 6c 61 6e 67 75 61 67 65 73 2e 20 20 5e  ng languages.  ^
ebf0: 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 73  WHEN expressions
ec00: 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 20 66   are evaluated f
ec10: 72 6f 6d 20 6c 65 66 74 20 74 6f 0a 72 69 67 68  rom left to.righ
ec20: 74 20 75 6e 74 69 6c 20 6f 6e 65 20 69 73 20 66  t until one is f
ec30: 6f 75 6e 64 20 74 68 61 74 20 69 73 20 74 72 75  ound that is tru
ec40: 65 2c 20 61 74 20 77 68 69 63 68 20 70 6f 69 6e  e, at which poin
ec50: 74 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  t the correspond
ec60: 69 6e 67 0a 54 48 45 4e 20 74 65 72 6d 20 62 65  ing.THEN term be
ec70: 63 6f 6d 65 73 20 74 68 65 20 72 65 73 75 6c 74  comes the result
ec80: 2e 20 20 5e 49 66 20 6e 6f 20 57 48 45 4e 20 65  .  ^If no WHEN e
ec90: 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 72 75  xpression is tru
eca0: 65 20 74 68 65 6e 20 74 68 65 20 45 4c 53 45 20  e then the ELSE 
ecb0: 0a 63 6c 61 75 73 65 20 64 65 74 65 72 6d 69 6e  .clause determin
ecc0: 65 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f 72  es the result or
ecd0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
ece0: 55 4c 4c 20 69 66 20 74 68 65 72 65 20 69 73 20  ULL if there is 
ecf0: 6e 6f 20 45 4c 53 45 20 63 6c 61 73 65 2e 0a 3c  no ELSE clase..<
ed00: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69  /p>..<p>The opti
ed10: 6f 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20  onal expression 
ed20: 74 68 61 74 20 6f 63 63 75 72 73 20 69 6e 20 62  that occurs in b
ed30: 65 74 77 65 65 6e 20 74 68 65 20 43 41 53 45 20  etween the CASE 
ed40: 6b 65 79 77 6f 72 64 20 61 6e 64 20 74 68 65 0a  keyword and the.
ed50: 66 69 72 73 74 20 57 48 45 4e 20 6b 65 79 77 6f  first WHEN keywo
ed60: 72 64 20 69 73 20 74 68 65 20 22 62 61 73 65 22  rd is the "base"
ed70: 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20 5e 54   expression.  ^T
ed80: 68 65 72 65 20 61 72 65 20 74 77 6f 20 62 61 73  here are two bas
ed90: 69 63 20 66 6f 72 6d 73 0a 6f 66 20 61 20 43 41  ic forms.of a CA
eda0: 53 45 20 65 78 70 72 65 73 73 69 6f 6e 3a 20 74  SE expression: t
edb0: 68 6f 73 65 20 77 69 74 68 20 61 6e 64 20 77 69  hose with and wi
edc0: 74 68 6f 75 74 20 61 20 62 61 73 65 20 65 78 70  thout a base exp
edd0: 72 65 73 73 69 6f 6e 2e 0a 5e 49 6e 20 61 20 43  ression..^In a C
ede0: 41 53 45 20 77 69 74 68 6f 75 74 20 61 20 62 61  ASE without a ba
edf0: 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 65  se expression, e
ee00: 61 63 68 20 57 48 45 4e 20 65 78 70 72 65 73 73  ach WHEN express
ee10: 69 6f 6e 20 69 73 20 65 76 61 6c 75 74 65 64 0a  ion is evaluted.
ee20: 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 61 6e 64  as a boolean and
ee30: 20 74 68 65 20 6f 76 65 72 61 6c 6c 20 72 65 73   the overall res
ee40: 75 6c 74 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ult is determine
ee50: 64 20 62 79 20 66 69 72 73 74 20 57 48 45 4e 20  d by first WHEN 
ee60: 65 78 70 72 65 73 73 69 6f 6e 0a 74 68 61 74 20  expression.that 
ee70: 69 73 20 74 72 75 65 2e 0a 5e 49 6e 20 61 20 43  is true..^In a C
ee80: 41 53 45 20 77 69 74 68 20 61 20 62 61 73 65 20  ASE with a base 
ee90: 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20  expression, the 
eea0: 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20  base expression 
eeb0: 69 73 20 65 76 61 6c 75 74 65 64 20 6a 75 73 74  is evaluted just
eec0: 0a 6f 6e 63 65 20 61 6e 64 20 74 68 65 20 72 65  .once and the re
eed0: 73 75 6c 74 20 69 73 20 63 6f 6d 70 61 72 65 64  sult is compared
eee0: 20 61 67 61 69 6e 73 74 20 65 61 63 68 20 57 48   against each WH
eef0: 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 75 6e  EN expression un
ef00: 74 69 6c 20 61 20 0a 6d 61 74 63 68 20 69 73 20  til a .match is 
ef10: 66 6f 75 6e 64 2e 0a 5e 57 68 65 6e 20 63 6f 6d  found..^When com
ef20: 70 61 72 69 6e 67 20 61 20 62 61 73 65 20 65 78  paring a base ex
ef30: 70 72 65 73 73 69 6f 6e 20 61 67 61 69 6e 73 74  pression against
ef40: 20 61 20 57 48 45 4e 20 65 78 70 72 65 73 73 69   a WHEN expressi
ef50: 6f 6e 2c 20 74 68 65 20 73 61 6d 65 0a 63 6f 6c  on, the same.col
ef60: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c  lating sequence,
ef70: 20 61 66 66 69 6e 69 74 79 2c 20 61 6e 64 20 4e   affinity, and N
ef80: 55 4c 4c 2d 68 61 6e 64 6c 69 6e 67 20 72 75 6c  ULL-handling rul
ef90: 65 73 20 61 70 70 6c 79 20 61 73 20 69 66 20 74  es apply as if t
efa0: 68 65 0a 62 61 73 65 20 65 78 70 72 65 73 73 69  he.base expressi
efb0: 6f 6e 20 61 6e 64 20 57 48 45 4e 20 65 78 70 72  on and WHEN expr
efc0: 65 73 73 69 6f 6e 20 61 72 65 20 72 65 73 70 65  ession are respe
efd0: 63 74 69 76 65 6c 79 20 74 68 65 20 6c 65 66 74  ctively the left
efe0: 2d 20 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64  - and.right-hand
eff0: 20 6f 70 65 72 61 6e 64 73 20 6f 66 20 61 6e 20   operands of an 
f000: 3c 62 69 67 3e 3c 62 3e 3d 3c 2f 62 3e 3c 2f 62  <big><b>=</b></b
f010: 69 67 3e 20 6f 70 65 72 61 74 6f 72 2e 3c 2f 70  ig> operator.</p
f020: 3e 0a 0a 3c 70 3e 5e 28 41 73 73 75 6d 69 6e 67  >..<p>^(Assuming
f030: 20 74 68 65 20 73 75 62 65 78 70 72 65 73 73 69   the subexpressi
f040: 6f 6e 73 20 68 61 76 65 20 6e 6f 20 73 69 64 65  ons have no side
f050: 2d 65 66 66 65 63 74 73 2c 20 74 68 65 20 66 6f  -effects, the fo
f060: 6c 6c 6f 77 69 6e 67 0a 74 77 6f 20 65 78 70 72  llowing.two expr
f070: 65 73 73 69 6f 6e 73 20 61 72 65 20 65 71 75 69  essions are equi
f080: 76 61 6c 65 6e 74 3a 3c 2f 70 3e 0a 0a 3c 75 6c  valent:</p>..<ul
f090: 3e 0a 3c 6c 69 3e 43 41 53 45 20 78 20 57 48 45  >.<li>CASE x WHE
f0a0: 4e 20 77 31 20 54 48 45 4e 20 72 31 20 57 48 45  N w1 THEN r1 WHE
f0b0: 4e 20 77 32 20 54 48 45 4e 20 72 32 20 45 4c 53  N w2 THEN r2 ELS
f0c0: 45 20 72 33 20 45 4e 44 0a 3c 6c 69 3e 43 41 53  E r3 END.<li>CAS
f0d0: 45 20 57 48 45 4e 20 78 3d 77 31 20 54 48 45 4e  E WHEN x=w1 THEN
f0e0: 20 72 31 20 57 48 45 4e 20 78 3d 77 32 20 54 48   r1 WHEN x=w2 TH
f0f0: 45 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45 4e  EN r2 ELSE r3 EN
f100: 44 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 5e 54  D.</ul>)^..<p>^T
f110: 68 65 20 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e  he only differen
f120: 63 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 74  ce between the t
f130: 77 6f 20 43 41 53 45 20 65 78 70 72 65 73 73 69  wo CASE expressi
f140: 6f 6e 73 20 73 68 6f 77 6e 20 61 62 6f 76 65 0a  ons shown above.
f150: 69 73 20 74 68 61 74 20 74 68 65 20 3c 69 3e 78  is that the <i>x
f160: 3c 2f 69 3e 20 65 78 70 72 65 73 73 69 6f 6e 20  </i> expression 
f170: 69 73 20 65 76 61 6c 75 61 74 65 64 0a 65 78 61  is evaluated.exa
f180: 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74 68 65  ctly once in the
f190: 20 66 69 72 73 74 20 65 78 61 6d 70 6c 65 20 62   first example b
f1a0: 75 74 20 6d 69 67 68 74 20 62 65 20 65 76 61 6c  ut might be eval
f1b0: 75 61 74 65 64 20 6d 75 6c 74 69 70 6c 65 20 74  uated multiple t
f1c0: 69 6d 65 73 0a 69 6e 20 74 68 65 20 73 65 63 6f  imes.in the seco
f1d0: 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 4e  nd.</p>..<p>^A N
f1e0: 55 4c 4c 20 72 65 73 75 6c 74 20 69 73 20 63 6f  ULL result is co
f1f0: 6e 73 69 64 65 72 65 64 20 66 61 6c 73 65 20 77  nsidered false w
f200: 68 65 6e 20 65 76 61 6c 75 61 74 69 6e 67 20 57  hen evaluating W
f210: 48 45 4e 20 74 65 72 6d 73 2e 0a 5e 49 66 20 74  HEN terms..^If t
f220: 68 65 20 62 61 73 65 20 65 78 70 72 65 73 73 69  he base expressi
f230: 6f 6e 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  on is NULL then 
f240: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
f250: 65 20 43 41 53 45 20 69 73 20 74 68 65 0a 72 65  e CASE is the.re
f260: 73 75 6c 74 20 6f 66 20 74 68 65 20 45 4c 53 45  sult of the ELSE
f270: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 66 20 69   expression if i
f280: 74 20 65 78 69 73 74 73 2c 20 6f 72 20 4e 55 4c  t exists, or NUL
f290: 4c 20 69 66 20 74 68 65 20 45 4c 53 45 20 63 6c  L if the ELSE cl
f2a0: 61 75 73 65 0a 69 73 20 6f 6d 69 74 74 65 64 2e  ause.is omitted.
f2b0: 3c 2f 70 3e 0a 0a 0a 3c 68 33 3e 54 61 62 6c 65  </p>...<h3>Table
f2c0: 20 43 6f 6c 75 6d 6e 20 4e 61 6d 65 73 3c 2f 68   Column Names</h
f2d0: 33 3e 0a 3c 70 3e 5e 41 20 63 6f 6c 75 6d 6e 20  3>.<p>^A column 
f2e0: 6e 61 6d 65 20 63 61 6e 20 62 65 20 61 6e 79 20  name can be any 
f2f0: 6f 66 20 74 68 65 20 6e 61 6d 65 73 20 64 65 66  of the names def
f300: 69 6e 65 64 20 69 6e 20 74 68 65 20 5b 43 52 45  ined in the [CRE
f310: 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74 65  ATE TABLE].state
f320: 6d 65 6e 74 20 6f 72 20 6f 6e 65 20 6f 66 20 74  ment or one of t
f330: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 70 65  he following spe
f340: 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73  cial identifiers
f350: 3a 20 22 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e 22  : "<b>ROWID</b>"
f360: 2c 0a 22 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c 20  ,."<b>OID</b>", 
f370: 6f 72 20 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c 2f  or "<b>_ROWID_</
f380: 62 3e 22 2e 0a 5e 54 68 65 73 65 20 73 70 65 63  b>"..^These spec
f390: 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73 20  ial identifiers 
f3a0: 61 6c 6c 20 64 65 73 63 72 69 62 65 20 74 68 65  all describe the
f3b0: 0a 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20  .unique integer 
f3c0: 6b 65 79 20 28 74 68 65 20 5b 72 6f 77 69 64 5d  key (the [rowid]
f3d0: 29 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  ) associated wit
f3e0: 68 20 65 76 65 72 79 20 0a 72 6f 77 20 6f 66 20  h every .row of 
f3f0: 65 76 65 72 79 20 74 61 62 6c 65 2e 0a 5e 54 68  every table..^Th
f400: 65 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69  e special identi
f410: 66 69 65 72 73 20 6f 6e 6c 79 20 72 65 66 65 72  fiers only refer
f420: 20 74 6f 20 74 68 65 20 72 6f 77 20 6b 65 79 20   to the row key 
f430: 69 66 20 74 68 65 20 5b 43 52 45 41 54 45 20 54  if the [CREATE T
f440: 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20  ABLE].statement 
f450: 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20  does not define 
f460: 61 20 72 65 61 6c 20 63 6f 6c 75 6d 6e 20 77 69  a real column wi
f470: 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  th the same name
f480: 2e 0a 5e 54 68 65 20 72 6f 77 69 64 20 63 61 6e  ..^The rowid can
f490: 20 62 65 20 75 73 65 64 20 61 6e 79 77 68 65 72   be used anywher
f4a0: 65 20 61 20 72 65 67 75 6c 61 72 0a 63 6f 6c 75  e a regular.colu
f4b0: 6d 6e 20 63 61 6e 20 62 65 20 75 73 65 64 2e 3c  mn can be used.<
f4c0: 2f 70 3e 0a 0a 3c 68 33 3e 53 75 62 71 75 65 72  /p>..<h3>Subquer
f4d0: 69 65 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 5b 53 45  ies</h3>.<p>^[SE
f4e0: 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 73  LECT] statements
f4f0: 20 63 61 6e 20 61 70 70 65 61 72 20 69 6e 20 65   can appear in e
f500: 78 70 72 65 73 73 69 6f 6e 73 20 61 73 20 65 69  xpressions as ei
f510: 74 68 65 72 20 74 68 65 0a 72 69 67 68 74 2d 68  ther the.right-h
f520: 61 6e 64 20 6f 70 65 72 61 6e 64 20 6f 66 20 74  and operand of t
f530: 68 65 20 49 4e 20 6f 70 65 72 61 74 6f 72 2c 20  he IN operator, 
f540: 61 73 20 61 20 73 63 61 6c 61 72 20 71 75 61 6e  as a scalar quan
f550: 74 69 74 79 2c 20 6f 72 0a 61 73 20 74 68 65 20  tity, or.as the 
f560: 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 45 58  operand of an EX
f570: 49 53 54 53 20 6f 70 65 72 61 74 6f 72 2e 0a 5e  ISTS operator..^
f580: 41 73 20 61 20 73 63 61 6c 61 72 20 71 75 61 6e  As a scalar quan
f590: 74 69 74 79 20 6f 72 20 74 68 65 20 6f 70 65 72  tity or the oper
f5a0: 61 6e 64 20 6f 66 20 61 6e 20 49 4e 20 6f 70 65  and of an IN ope
f5b0: 72 61 74 6f 72 2c 0a 74 68 65 20 53 45 4c 45 43  rator,.the SELEC
f5c0: 54 20 73 68 6f 75 6c 64 20 68 61 76 65 20 6f 6e  T should have on
f5d0: 6c 79 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  ly a single colu
f5e0: 6d 6e 20 69 6e 20 69 74 73 0a 72 65 73 75 6c 74  mn in its.result
f5f0: 2e 20 20 5e 43 6f 6d 70 6f 75 6e 64 20 53 45 4c  .  ^Compound SEL
f600: 45 43 54 73 20 28 63 6f 6e 6e 65 63 74 65 64 20  ECTs (connected 
f610: 77 69 74 68 20 6b 65 79 77 6f 72 64 73 20 6c 69  with keywords li
f620: 6b 65 20 55 4e 49 4f 4e 20 6f 72 0a 45 58 43 45  ke UNION or.EXCE
f630: 50 54 29 20 61 72 65 20 61 6c 6c 6f 77 65 64 2e  PT) are allowed.
f640: 0a 5e 57 69 74 68 20 74 68 65 20 45 58 49 53 54  .^With the EXIST
f650: 53 20 6f 70 65 72 61 74 6f 72 2c 20 74 68 65 20  S operator, the 
f660: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72  columns in the r
f670: 65 73 75 6c 74 20 73 65 74 20 6f 66 20 74 68 65  esult set of the
f680: 20 5b 53 45 4c 45 43 54 5d 20 61 72 65 0a 69 67   [SELECT] are.ig
f690: 6e 6f 72 65 64 20 61 6e 64 20 74 68 65 20 65 78  nored and the ex
f6a0: 70 72 65 73 73 69 6f 6e 20 72 65 74 75 72 6e 73  pression returns
f6b0: 20 54 52 55 45 20 69 66 20 6f 6e 65 20 6f 72 20   TRUE if one or 
f6c0: 6d 6f 72 65 20 72 6f 77 73 20 65 78 69 73 74 0a  more rows exist.
f6d0: 61 6e 64 20 46 41 4c 53 45 20 69 66 20 74 68 65  and FALSE if the
f6e0: 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
f6f0: 6d 70 74 79 2e 0a 5e 49 66 20 6e 6f 20 74 65 72  mpty..^If no ter
f700: 6d 73 20 69 6e 20 74 68 65 20 5b 53 45 4c 45 43  ms in the [SELEC
f710: 54 5d 20 65 78 70 72 65 73 73 69 6f 6e 20 72 65  T] expression re
f720: 66 65 72 20 74 6f 20 76 61 6c 75 65 73 20 69 6e  fer to values in
f730: 20 74 68 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0a   the containing.
f740: 71 75 65 72 79 2c 20 74 68 65 6e 20 74 68 65 20  query, then the 
f750: 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76  expression is ev
f760: 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 70 72 69  aluated once pri
f770: 6f 72 20 74 6f 20 61 6e 79 20 6f 74 68 65 72 0a  or to any other.
f780: 70 72 6f 63 65 73 73 69 6e 67 20 61 6e 64 20 74  processing and t
f790: 68 65 20 72 65 73 75 6c 74 20 69 73 20 72 65 75  he result is reu
f7a0: 73 65 64 20 61 73 20 6e 65 63 65 73 73 61 72 79  sed as necessary
f7b0: 2e 20 20 5e 49 66 20 74 68 65 20 5b 53 45 4c 45  .  ^If the [SELE
f7c0: 43 54 5d 20 65 78 70 72 65 73 73 69 6f 6e 0a 64  CT] expression.d
f7d0: 6f 65 73 20 63 6f 6e 74 61 69 6e 20 76 61 72 69  oes contain vari
f7e0: 61 62 6c 65 73 20 66 72 6f 6d 20 74 68 65 20 6f  ables from the o
f7f0: 75 74 65 72 20 71 75 65 72 79 2c 20 74 68 65 6e  uter query, then
f800: 20 74 68 65 20 5b 53 45 4c 45 43 54 5d 20 69 73   the [SELECT] is
f810: 20 72 65 65 76 61 6c 75 61 74 65 64 0a 65 76 65   reevaluated.eve
f820: 72 79 20 74 69 6d 65 20 69 74 20 69 73 20 6e 65  ry time it is ne
f830: 65 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57  eded.</p>..<p>^W
f840: 68 65 6e 20 61 20 53 45 4c 45 43 54 20 69 73 20  hen a SELECT is 
f850: 74 68 65 20 72 69 67 68 74 20 6f 70 65 72 61 6e  the right operan
f860: 64 20 6f 66 20 74 68 65 20 49 4e 20 6f 70 65 72  d of the IN oper
f870: 61 74 6f 72 2c 20 74 68 65 20 49 4e 0a 6f 70 65  ator, the IN.ope
f880: 72 61 74 6f 72 20 72 65 74 75 72 6e 73 20 54 52  rator returns TR
f890: 55 45 20 69 66 20 74 68 65 20 53 45 4c 45 43 54  UE if the SELECT
f8a0: 20 72 65 73 75 6c 74 20 63 6f 6e 74 61 69 6e 73   result contains
f8b0: 20 6e 6f 20 4e 55 4c 4c 73 20 61 6e 64 20 69 66   no NULLs and if
f8c0: 0a 74 68 65 20 6c 65 66 74 20 6f 70 65 72 61 6e  .the left operan
f8d0: 64 20 6d 61 74 63 68 65 73 20 61 6e 79 20 6f 66  d matches any of
f8e0: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 74   the values in t
f8f0: 68 65 20 53 45 4c 45 43 54 20 72 65 73 75 6c 74  he SELECT result
f900: 2e 0a 5e 54 68 65 20 49 4e 20 6f 70 65 72 61 74  ..^The IN operat
f910: 6f 72 20 6d 61 79 20 62 65 20 70 72 65 63 65 64  or may be preced
f920: 65 64 0a 62 79 20 74 68 65 20 4e 4f 54 20 6b 65  ed.by the NOT ke
f930: 79 77 6f 72 64 20 74 6f 20 69 6e 76 65 72 74 20  yword to invert 
f940: 74 68 65 20 73 65 6e 73 65 20 6f 66 20 74 68 65  the sense of the
f950: 20 74 65 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   test.</p>..<p>^
f960: 57 68 65 6e 20 61 20 53 45 4c 45 43 54 20 61 70  When a SELECT ap
f970: 70 65 61 72 73 20 77 69 74 68 69 6e 20 61 6e 20  pears within an 
f980: 65 78 70 72 65 73 73 69 6f 6e 20 62 75 74 20 69  expression but i
f990: 73 20 6e 6f 74 20 74 68 65 20 72 69 67 68 74 0a  s not the right.
f9a0: 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e  operand of an IN
f9b0: 20 6f 70 65 72 61 74 6f 72 2c 20 74 68 65 6e 20   operator, then 
f9c0: 74 68 65 20 66 69 72 73 74 20 72 6f 77 20 6f 66  the first row of
f9d0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
f9e0: 68 65 0a 53 45 4c 45 43 54 20 62 65 63 6f 6d 65  he.SELECT become
f9f0: 73 20 74 68 65 20 76 61 6c 75 65 20 75 73 65 64  s the value used
fa00: 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69   in the expressi
fa10: 6f 6e 2e 20 20 5e 49 66 20 74 68 65 20 53 45 4c  on.  ^If the SEL
fa20: 45 43 54 20 79 69 65 6c 64 73 0a 6d 6f 72 65 20  ECT yields.more 
fa30: 74 68 61 6e 20 6f 6e 65 20 72 65 73 75 6c 74 20  than one result 
fa40: 72 6f 77 2c 20 61 6c 6c 20 72 6f 77 73 20 61 66  row, all rows af
fa50: 74 65 72 20 74 68 65 20 66 69 72 73 74 20 61 72  ter the first ar
fa60: 65 20 69 67 6e 6f 72 65 64 2e 20 20 5e 49 66 0a  e ignored.  ^If.
fa70: 74 68 65 20 53 45 4c 45 43 54 20 79 69 65 6c 64  the SELECT yield
fa80: 73 20 6e 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20  s no rows, then 
fa90: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
faa0: 20 53 45 4c 45 43 54 20 69 73 20 4e 55 4c 4c 2e   SELECT is NULL.
fab0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
fac0: 61 67 6d 65 6e 74 20 63 61 73 74 65 78 70 72 20  agment castexpr 
fad0: 7b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e  {CAST expression
fae0: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 41 53 54  }</tcl>.<h3>CAST
faf0: 20 65 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33   expressions</h3
fb00: 3e 0a 0a 3c 70 3e 5e 41 20 43 41 53 54 20 65 78  >..<p>^A CAST ex
fb10: 70 72 65 73 73 69 6f 6e 20 63 68 61 6e 67 65 73  pression changes
fb20: 20 74 68 65 20 5b 64 61 74 61 74 79 70 65 5d 20   the [datatype] 
fb30: 6f 66 20 74 68 65 20 3c 65 78 70 72 3e 20 69 6e  of the <expr> in
fb40: 74 6f 20 74 68 65 0a 74 79 70 65 20 73 70 65 63  to the.type spec
fb50: 69 66 69 65 64 20 62 79 20 26 6c 74 3b 74 79 70  ified by &lt;typ
fb60: 65 26 67 74 3b 2e 20 0a 5e 28 26 6c 74 3b 74 79  e&gt;. .^(&lt;ty
fb70: 70 65 26 67 74 3b 20 63 61 6e 20 62 65 20 61 6e  pe&gt; can be an
fb80: 79 20 6e 6f 6e 2d 65 6d 70 74 79 20 74 79 70 65  y non-empty type
fb90: 20 6e 61 6d 65 20 74 68 61 74 20 69 73 20 76 61   name that is va
fba0: 6c 69 64 0a 66 6f 72 20 74 68 65 20 74 79 70 65  lid.for the type
fbb0: 20 69 6e 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66   in a column def
fbc0: 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 5b 43 52  inition of a [CR
fbd0: 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74  EATE TABLE] stat
fbe0: 65 6d 65 6e 74 2e 29 5e 0a 5e 54 68 65 20 26 6c  ement.)^.^The &l
fbf0: 74 3b 74 79 70 65 26 67 74 3b 20 6e 61 6d 65 20  t;type&gt; name 
fc00: 69 73 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  is interpreted a
fc10: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20  ccording to the 
fc20: 0a 5b 72 75 6c 65 73 20 66 6f 72 20 64 65 74 65  .[rules for dete
fc30: 72 6d 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 20 61  rmining column a
fc40: 66 66 69 6e 69 74 79 5d 2e 0a 0a 3c 70 3e 5e 41  ffinity]...<p>^A
fc50: 6e 20 65 78 70 6c 69 63 69 74 20 63 61 73 74 20  n explicit cast 
fc60: 69 73 20 73 74 72 6f 6e 67 20 74 68 61 6e 20 61  is strong than a
fc70: 66 66 69 6e 69 74 79 3b 20 77 69 74 68 20 74 68  ffinity; with th
fc80: 65 20 43 41 53 54 20 65 78 70 72 65 73 73 69 6f  e CAST expressio
fc90: 6e 0a 74 68 65 20 64 61 74 61 74 79 70 65 20 63  n.the datatype c
fca0: 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 66 6f 72  onversion is for
fcb0: 63 65 64 20 65 76 65 6e 20 69 66 20 69 74 20 69  ced even if it i
fcc0: 73 20 6c 6f 73 73 79 20 61 6e 64 20 69 72 72 72  s lossy and irrr
fcd0: 65 76 65 72 73 69 62 6c 65 2e 0a 3c 75 6c 3e 0a  eversible..<ul>.
fce0: 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 41 20 63 61 73  <li><p>.  ^A cas
fcf0: 74 20 6f 66 20 61 20 52 45 41 4c 20 76 61 6c 75  t of a REAL valu
fd00: 65 20 69 6e 74 6f 20 61 6e 20 49 4e 54 45 47 45  e into an INTEGE
fd10: 52 20 77 69 6c 6c 20 74 72 75 6e 63 61 74 65 20  R will truncate 
fd20: 74 68 65 0a 20 20 66 72 61 63 74 69 6f 6e 61 6c  the.  fractional
fd30: 20 70 61 72 74 20 6f 66 20 74 68 65 20 52 45 41   part of the REA
fd40: 4c 2e 20 20 5e 49 66 20 61 6e 20 52 45 41 4c 20  L.  ^If an REAL 
fd50: 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20  is too large to 
fd60: 62 65 0a 20 20 72 65 70 72 65 73 65 6e 74 65 64  be.  represented
fd70: 20 61 73 20 61 6e 20 49 4e 54 45 47 45 52 20 74   as an INTEGER t
fd80: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
fd90: 66 20 74 68 65 20 63 61 73 74 20 69 73 0a 20 20  f the cast is.  
fda0: 74 68 65 20 6c 61 72 67 65 73 74 20 6e 65 67 61  the largest nega
fdb0: 74 69 76 65 20 69 6e 74 65 67 65 72 3a 20 2d 39  tive integer: -9
fdc0: 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
fdd0: 30 38 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 5e 41  08...<li><p>. ^A
fde0: 20 63 61 73 74 20 6f 66 20 61 20 54 45 58 54 20   cast of a TEXT 
fdf0: 76 61 6c 75 65 20 69 6e 74 6f 20 61 6e 20 49 4e  value into an IN
fe00: 54 45 47 45 52 20 6f 72 20 52 45 41 4c 20 77 69  TEGER or REAL wi
fe10: 6c 6c 20 72 65 61 64 20 61 20 70 72 65 66 69 78  ll read a prefix
fe20: 0a 20 6f 66 20 74 68 65 20 54 45 58 54 20 76 61  . of the TEXT va
fe30: 6c 75 65 20 74 68 61 74 20 6c 6f 6f 6b 73 20 6c  lue that looks l
fe40: 69 6b 65 20 61 6e 20 69 6e 74 65 67 65 72 20 6f  ike an integer o
fe50: 72 20 72 65 61 6c 20 76 61 6c 75 65 2c 20 72 65  r real value, re
fe60: 73 70 65 63 74 69 76 65 6c 79 2c 0a 20 61 6e 64  spectively,. and
fe70: 20 69 67 6e 6f 72 65 20 74 68 65 20 72 65 73 74   ignore the rest
fe80: 2e 20 20 5e 57 68 65 6e 20 63 61 73 74 69 6e 67  .  ^When casting
fe90: 20 66 72 6f 6d 20 54 45 58 54 20 69 6e 74 6f 20   from TEXT into 
fea0: 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c 2c  INTEGER or REAL,
feb0: 0a 20 6c 65 61 64 69 6e 67 20 73 70 61 63 65 73  . leading spaces
fec0: 20 69 6e 20 74 68 65 20 54 45 58 54 20 76 61 6c   in the TEXT val
fed0: 75 65 20 61 72 65 20 69 67 6e 6f 72 65 64 2e 20  ue are ignored. 
fee0: 20 5e 28 41 20 63 61 73 74 20 6f 66 20 61 20 54   ^(A cast of a T
fef0: 45 58 54 20 76 61 6c 75 65 0a 20 74 68 61 74 20  EXT value. that 
ff00: 6c 6f 6f 6b 73 20 6e 6f 74 68 69 6e 67 20 6c 69  looks nothing li
ff10: 6b 65 20 61 20 6e 75 6d 62 65 72 20 69 6e 74 6f  ke a number into
ff20: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
ff30: 20 72 65 73 75 6c 74 73 20 69 6e 20 30 20 6f 72   results in 0 or
ff40: 20 30 2e 30 2c 0a 20 72 65 73 70 65 63 74 69 76   0.0,. respectiv
ff50: 65 6c 79 2e 29 5e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ely.)^..<li><p>.
ff60: 20 5e 43 61 73 74 69 6e 67 20 61 20 76 61 6c 75   ^Casting a valu
ff70: 65 20 69 6e 74 6f 20 4e 55 4d 45 52 49 43 20 66  e into NUMERIC f
ff80: 69 72 73 74 20 64 6f 65 73 20 61 20 66 6f 72 63  irst does a forc
ff90: 65 64 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 6e  ed conversion in
ffa0: 74 6f 20 52 45 41 4c 0a 20 20 62 75 74 20 77 69  to REAL.  but wi
ffb0: 6c 6c 20 74 68 65 6e 20 66 75 72 74 68 65 72 20  ll then further 
ffc0: 63 6f 6e 76 65 72 74 73 20 74 68 65 20 72 65 73  converts the res
ffd0: 75 6c 74 20 69 6e 74 6f 20 49 4e 54 45 47 45 52  ult into INTEGER
ffe0: 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a   if and only if.
fff0: 20 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e    the conversion
10000 20 66 72 6f 6d 20 52 45 41 4c 20 74 6f 20 49 4e   from REAL to IN
10010 54 45 47 45 52 20 69 73 20 6c 6f 73 73 6c 65 73  TEGER is lossles
10020 73 20 61 6e 64 20 72 65 76 65 72 73 69 62 6c 65  s and reversible
10030 2e 0a 20 20 54 68 69 73 20 69 73 20 74 68 65 20  ..  This is the 
10040 6f 6e 6c 79 20 63 6f 6e 74 65 78 74 20 69 6e 20  only context in 
10050 53 51 4c 69 74 65 20 77 68 65 72 65 20 74 68 65  SQLite where the
10060 20 4e 55 4d 45 52 49 43 20 61 6e 64 20 49 4e 54   NUMERIC and INT
10070 45 47 45 52 0a 20 20 5b 61 66 66 69 6e 69 74 69  EGER.  [affiniti
10080 65 73 5d 20 62 65 68 61 76 65 20 64 69 66 66 65  es] behave diffe
10090 72 65 6e 74 6c 79 2e 0a 0a 3c 6c 69 3e 3c 70 3e  rently...<li><p>
100a0 0a 20 5e 43 61 73 74 69 6e 67 20 61 20 76 61 6c  . ^Casting a val
100b0 75 65 20 69 6e 74 6f 20 54 45 58 54 20 72 65 6e  ue into TEXT ren
100c0 64 65 72 73 20 74 68 65 20 76 61 6c 75 65 20 61  ders the value a
100d0 73 20 69 66 20 76 69 61 20 5b 73 71 6c 69 74 65  s if via [sqlite
100e0 33 5f 73 6e 70 72 69 6e 74 66 28 29 5d 0a 20 20  3_snprintf()].  
100f0 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
10100 72 65 73 75 6c 74 69 6e 67 20 54 45 58 54 20 75  resulting TEXT u
10110 73 65 73 20 74 68 65 20 5b 65 6e 63 6f 64 69 6e  ses the [encodin
10120 67 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  g] of the databa
10130 73 65 0a 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  se.  connection.
10140 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 5e 43 61 73 74  ..<li><p>. ^Cast
10150 69 6e 67 20 61 20 76 61 6c 75 65 20 74 6f 20 61  ing a value to a
10160 20 26 6c 74 3b 74 79 70 65 26 67 74 3b 20 77 69   &lt;type&gt; wi
10170 74 68 20 6e 6f 20 61 66 66 69 6e 69 74 79 20 63  th no affinity c
10180 61 75 73 65 73 20 74 68 65 20 76 61 6c 75 65 20  auses the value 
10190 74 6f 0a 20 20 62 65 20 63 6f 6e 76 65 72 74 65  to.  be converte
101a0 64 20 69 6e 74 6f 20 61 20 42 4c 4f 42 2e 20 20  d into a BLOB.  
101b0 5e 43 61 73 74 69 6e 67 20 74 6f 20 61 20 42 4c  ^Casting to a BL
101c0 4f 42 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 66  OB consists of f
101d0 69 72 73 74 20 63 61 73 74 69 6e 67 0a 20 20 74  irst casting.  t
101e0 68 65 20 76 61 6c 75 65 20 74 6f 20 54 45 58 54  he value to TEXT
101f0 20 69 6e 20 74 68 65 20 5b 65 6e 63 6f 64 69 6e   in the [encodin
10200 67 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  g] of the databa
10210 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74  se connection, t
10220 68 65 6e 0a 20 20 69 6e 74 65 72 70 72 65 74 69  hen.  interpreti
10230 6e 67 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67  ng the resulting
10240 20 62 79 74 65 20 73 65 71 75 65 6e 63 65 20 61   byte sequence a
10250 73 20 61 20 42 4c 4f 42 20 69 6e 73 74 65 61 64  s a BLOB instead
10260 20 6f 66 20 61 73 20 54 45 58 54 2e 0a 0a 3c 6c   of as TEXT...<l
10270 69 3e 3c 70 3e 0a 20 5e 43 61 73 74 69 6e 67 20  i><p>. ^Casting 
10280 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74  a BLOB value int
10290 6f 20 61 6e 79 20 74 79 70 65 20 6f 74 68 65 72  o any type other
102a0 20 74 68 61 6e 20 61 20 42 4c 4f 42 20 63 6f 6e   than a BLOB con
102b0 73 69 73 74 73 20 6f 66 20 66 69 72 73 74 0a 20  sists of first. 
102c0 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20 74 68   interpreting th
102d0 65 20 62 79 74 65 20 73 65 71 75 65 6e 63 65 20  e byte sequence 
102e0 6f 66 20 74 68 65 20 42 4c 4f 42 20 61 73 20 61  of the BLOB as a
102f0 20 54 45 58 54 20 73 74 72 69 6e 67 20 69 6e 20   TEXT string in 
10300 74 68 65 0a 20 20 64 61 74 61 62 61 73 65 20 65  the.  database e
10310 6e 63 6f 64 69 6e 67 20 74 68 65 6e 20 63 6f 6e  ncoding then con
10320 74 69 6e 75 69 6e 67 20 61 73 20 69 66 20 74 68  tinuing as if th
10330 65 20 76 61 6c 75 65 20 77 68 65 72 65 20 6f 72  e value where or
10340 69 67 69 6e 61 6c 6c 79 20 6f 66 0a 20 20 74 79  iginally of.  ty
10350 70 65 20 54 45 58 54 2e 0a 0a 3c 6c 69 3e 3c 70  pe TEXT...<li><p
10360 3e 0a 20 5e 41 6e 79 20 63 61 73 74 20 6f 66 20  >. ^Any cast of 
10370 61 20 4e 55 4c 4c 20 76 61 6c 75 65 20 79 69 65  a NULL value yie
10380 6c 64 73 20 61 20 4e 55 4c 4c 20 72 65 73 75 6c  lds a NULL resul
10390 74 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 4e 6f  t..</ul>..<p>^No
103a0 74 65 20 74 68 61 74 20 74 68 65 20 72 65 73 75  te that the resu
103b0 6c 74 20 66 72 6f 6d 20 63 61 73 74 69 6e 67 20  lt from casting 
103c0 61 6e 79 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c  any non-BLOB val
103d0 75 65 20 69 6e 74 6f 20 61 20 0a 42 4c 4f 42 20  ue into a .BLOB 
103e0 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 66  and the result f
103f0 72 6f 6d 20 63 61 73 74 69 6e 67 20 61 6e 79 20  rom casting any 
10400 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f 20  BLOB value into 
10410 61 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75 65  a non-BLOB value
10420 0a 77 69 6c 6c 20 62 65 20 64 69 66 66 65 72 65  .will be differe
10430 6e 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  nt depending on 
10440 77 68 65 74 68 65 72 20 74 68 65 20 64 61 74 61  whether the data
10450 62 61 73 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20  base [encoding] 
10460 69 73 20 55 54 46 2d 38 2c 0a 55 54 46 2d 31 36  is UTF-8,.UTF-16
10470 62 65 2c 20 6f 72 20 55 54 46 2d 31 36 6c 65 2e  be, or UTF-16le.
10480 0a 0a 3c 68 33 3e 46 75 6e 63 74 69 6f 6e 73 3c  ..<h3>Functions<
10490 2f 68 33 3e 0a 3c 70 3e 5e 42 6f 74 68 20 5b 63  /h3>.<p>^Both [c
104a0 6f 72 65 66 75 6e 63 7c 73 69 6d 70 6c 65 5d 20  orefunc|simple] 
104b0 61 6e 64 20 5b 61 67 67 66 75 6e 63 7c 61 67 67  and [aggfunc|agg
104c0 72 65 67 61 74 65 5d 20 66 75 6e 63 74 69 6f 6e  regate] function
104d0 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 2e  s are supported.
104e0 0a 28 46 6f 72 20 70 72 65 73 65 6e 74 61 74 69  .(For presentati
104f0 6f 6e 20 70 75 72 70 6f 73 65 73 2c 20 73 69 6d  on purposes, sim
10500 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  ple functions ar
10510 65 20 66 75 72 74 68 65 72 20 73 75 62 64 69 76  e further subdiv
10520 69 64 65 64 20 69 6e 74 6f 0a 5b 63 6f 72 65 66  ided into.[coref
10530 75 6e 63 20 7c 20 63 6f 72 65 20 66 75 6e 63 74  unc | core funct
10540 69 6f 6e 73 5d 20 61 6e 64 20 5b 64 61 74 65 66  ions] and [datef
10550 75 6e 63 20 7c 20 64 61 74 65 2d 74 69 6d 65 20  unc | date-time 
10560 66 75 6e 63 74 69 6f 6e 73 5d 2e 29 0a 5e 41 20  functions].).^A 
10570 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20  simple function 
10580 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 61  can be used in a
10590 6e 79 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20  ny expression.  
105a0 5e 53 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e  ^Simple function
105b0 73 20 72 65 74 75 72 6e 0a 61 20 72 65 73 75 6c  s return.a resul
105c0 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 62 61  t immediately ba
105d0 73 65 64 20 6f 6e 20 74 68 65 69 72 20 69 6e 70  sed on their inp
105e0 75 74 73 2e 20 20 5e 41 67 67 72 65 67 61 74 65  uts.  ^Aggregate
105f0 20 66 75 6e 63 74 69 6f 6e 73 0a 6d 61 79 20 6f   functions.may o
10600 6e 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20 61  nly be used in a
10610 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
10620 74 2e 20 20 5e 41 67 67 72 65 67 61 74 65 20 66  t.  ^Aggregate f
10630 75 6e 63 74 69 6f 6e 73 20 63 6f 6d 70 75 74 65  unctions compute
10640 0a 74 68 65 69 72 20 72 65 73 75 6c 74 20 61 63  .their result ac
10650 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 6f 66  ross all rows of
10660 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e   the result set.
10670 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
10680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10690 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
106a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
106b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
106c0 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
106d0 6f 6e 20 7b 43 6f 72 65 20 46 75 6e 63 74 69 6f  on {Core Functio
106e0 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 7b 2a 63  ns} corefunc {*c
106f0 6f 72 65 66 75 6e 63 7d 0a 70 72 6f 63 20 66 75  orefunc}.proc fu
10700 6e 63 64 65 66 20 7b 73 79 6e 74 61 78 20 6b 65  ncdef {syntax ke
10710 79 77 6f 72 64 73 20 64 65 73 63 7d 20 7b 0a 20  ywords desc} {. 
10720 20 68 64 5f 70 75 74 73 20 7b 3c 74 72 3e 7d 0a   hd_puts {<tr>}.
10730 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c    regsub -all {\
10740 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d  s+} [string trim
10750 20 24 73 79 6e 74 61 78 5d 20 7b 3c 62 72 3e 3c   $syntax] {<br><
10760 2f 62 72 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72  /br>} syntax.  r
10770 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 28 28 5b  egsub -all {\(([
10780 5e 2a 29 5d 2b 29 5c 29 7d 20 24 73 79 6e 74 61  ^*)]+)\)} $synta
10790 78 20 7b 28 3c 69 3e 5c 31 3c 2f 69 3e 29 7d 20  x {(<i>\1</i>)} 
107a0 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20  syntax.  regsub 
107b0 2d 61 6c 6c 20 7b 2c 7d 20 24 73 79 6e 74 61 78  -all {,} $syntax
107c0 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20 73 79 6e 74   {</i>,<i>} synt
107d0 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  ax.  regsub -all
107e0 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d   {<i>\.\.\.</i>}
107f0 20 24 73 79 6e 74 61 78 20 7b 2e 2e 2e 7d 20 73   $syntax {...} s
10800 79 6e 74 61 78 0a 20 20 68 64 5f 70 75 74 73 20  yntax.  hd_puts 
10810 22 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f  "<td valign=\"to
10820 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 72 69 67 68  p\" align=\"righ
10830 74 5c 22 20 77 69 64 74 68 3d 5c 22 31 32 30 5c  t\" width=\"120\
10840 22 3e 24 73 79 6e 74 61 78 3c 2f 74 64 3e 22 0a  ">$syntax</td>".
10850 20 20 68 64 5f 70 75 74 73 20 7b 3c 74 64 20 76    hd_puts {<td v
10860 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 7d 0a 20 20  align="top">}.  
10870 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6b 65  if {[llength $ke
10880 79 77 6f 72 64 73 5d 3d 3d 30 7d 20 7b 0a 20 20  ywords]==0} {.  
10890 20 20 72 65 67 65 78 70 20 7b 5b 61 2d 7a 5f 5d    regexp {[a-z_]
108a0 2b 7d 20 24 73 79 6e 74 61 78 20 6e 61 6d 65 0a  +} $syntax name.
108b0 20 20 20 20 68 64 5f 66 72 61 67 6d 65 6e 74 20      hd_fragment 
108c0 24 6e 61 6d 65 20 2a 24 6e 61 6d 65 20 22 24 7b  $name *$name "${
108d0 6e 61 6d 65 7d 28 29 20 53 51 4c 20 66 75 6e 63  name}() SQL func
108e0 74 69 6f 6e 22 0a 20 20 7d 20 65 6c 73 65 20 7b  tion".  } else {
108f0 0a 20 20 20 20 73 65 74 20 66 72 61 67 6e 61 6d  .    set fragnam
10900 65 20 5b 6c 69 6e 64 65 78 20 24 6b 65 79 77 6f  e [lindex $keywo
10910 72 64 73 20 30 5d 0a 20 20 20 20 72 65 67 73 75  rds 0].    regsu
10920 62 20 2d 61 6c 6c 20 7b 5b 5e 61 2d 7a 5d 7d 20  b -all {[^a-z]} 
10930 24 66 72 61 67 6e 61 6d 65 20 7b 7d 20 66 72 61  $fragname {} fra
10940 67 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61  gname.    hd_fra
10950 67 6d 65 6e 74 20 24 66 72 61 67 6e 61 6d 65 0a  gment $fragname.
10960 20 20 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77      eval hd_keyw
10970 6f 72 64 73 20 5b 73 74 72 69 6e 67 20 6d 61 70  ords [string map
10980 20 7b 5c 6e 20 7b 20 7d 7d 20 24 6b 65 79 77 6f   {\n { }} $keywo
10990 72 64 73 5d 0a 20 20 7d 0a 20 20 68 64 5f 72 65  rds].  }.  hd_re
109a0 73 6f 6c 76 65 20 24 64 65 73 63 0a 20 20 68 64  solve $desc.  hd
109b0 5f 70 75 74 73 20 7b 3c 2f 74 64 3e 3c 2f 74 72  _puts {</td></tr
109c0 3e 7d 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  >}.}.</tcl>..<p>
109d0 54 68 65 20 63 6f 72 65 20 66 75 6e 63 74 69 6f  The core functio
109e0 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61  ns shown below a
109f0 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20  re available by 
10a00 64 65 66 61 75 6c 74 2e 20 0a 5b 64 61 74 65 66  default. .[datef
10a10 75 6e 63 20 7c 20 44 61 74 65 20 26 61 6d 70 3b  unc | Date &amp;
10a20 20 54 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d   Time functions]
10a30 20 61 6e 64 0a 5b 61 67 67 66 75 6e 63 20 7c 20   and.[aggfunc | 
10a40 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
10a50 6f 6e 73 5d 20 61 72 65 20 64 6f 63 75 6d 65 6e  ons] are documen
10a60 74 65 64 20 73 65 70 61 72 61 74 65 6c 79 2e 20  ted separately. 
10a70 20 41 6e 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20   An.application 
10a80 6d 61 79 20 64 65 66 69 6e 65 20 61 64 64 69 74  may define addit
10a90 69 6f 6e 61 6c 0a 66 75 6e 63 74 69 6f 6e 73 20  ional.functions 
10aa0 77 72 69 74 74 65 6e 20 69 6e 20 43 20 61 6e 64  written in C and
10ab0 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 64 61   added to the da
10ac0 74 61 62 61 73 65 20 65 6e 67 69 6e 65 20 75 73  tabase engine us
10ad0 69 6e 67 0a 74 68 65 20 5b 73 71 6c 69 74 65 33  ing.the [sqlite3
10ae0 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
10af0 28 29 5d 20 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 74  ()] API.</p>..<t
10b00 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65  able border=0 ce
10b10 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74  llpadding=10>.<t
10b20 63 6c 3e 0a 66 75 6e 63 64 65 66 20 7b 61 62 73  cl>.funcdef {abs
10b30 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
10b40 20 61 62 73 28 58 29 20 66 75 6e 63 74 69 6f 6e   abs(X) function
10b50 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 62 73   returns the abs
10b60 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20 74  olute value of t
10b70 68 65 20 6e 75 6d 65 72 69 63 0a 20 20 61 72 67  he numeric.  arg
10b80 75 6d 65 6e 74 20 58 2e 20 20 5e 41 62 73 28 58  ument X.  ^Abs(X
10b90 29 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69  ) returns NULL i
10ba0 66 20 58 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20  f X is NULL. .  
10bb0 5e 28 41 62 73 28 58 29 20 72 65 74 75 72 6e 20  ^(Abs(X) return 
10bc0 30 2e 30 20 69 66 20 58 20 69 73 20 61 20 73 74  0.0 if X is a st
10bd0 72 69 6e 67 20 6f 72 20 62 6c 6f 62 0a 20 20 74  ring or blob.  t
10be0 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f  hat cannot be co
10bf0 6e 76 65 72 74 65 64 20 74 6f 20 61 20 6e 75 6d  nverted to a num
10c00 65 72 69 63 20 76 61 6c 75 65 2e 29 5e 20 20 5e  eric value.)^  ^
10c10 49 66 20 58 20 69 73 20 74 68 65 20 0a 20 20 69  If X is the .  i
10c20 6e 74 65 67 65 72 20 2d 39 32 32 33 33 37 32 30  nteger -92233720
10c30 33 36 38 35 34 37 37 35 38 30 37 20 74 68 65 6e  36854775807 then
10c40 20 61 62 73 28 58 29 20 74 68 72 6f 77 73 20 61   abs(X) throws a
10c50 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c  n integer overfl
10c60 6f 77 0a 20 20 65 72 72 6f 72 20 73 69 6e 63 65  ow.  error since
10c70 20 74 68 65 72 65 20 69 73 20 6e 6f 20 65 71 75   there is no equ
10c80 69 76 61 6c 65 6e 74 20 70 6f 73 69 74 69 76 65  ivalent positive
10c90 20 36 34 2d 62 69 74 20 74 77 6f 20 63 6f 6d 70   64-bit two comp
10ca0 6c 65 6d 65 6e 74 20 76 61 6c 75 65 2e 0a 7d 0a  lement value..}.
10cb0 0a 66 75 6e 63 64 65 66 20 7b 63 68 61 6e 67 65  .funcdef {change
10cc0 73 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  s()} {} {.  ^The
10cd0 20 63 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74   changes() funct
10ce0 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
10cf0 6e 75 6d 62 65 72 20 6f 66 20 64 61 74 61 62 61  number of databa
10d00 73 65 20 72 6f 77 73 20 74 68 61 74 20 77 65 72  se rows that wer
10d10 65 20 63 68 61 6e 67 65 64 0a 20 20 6f 72 20 69  e changed.  or i
10d20 6e 73 65 72 74 65 64 20 6f 72 20 64 65 6c 65 74  nserted or delet
10d30 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72  ed by the most r
10d40 65 63 65 6e 74 6c 79 20 63 6f 6d 70 6c 65 74 65  ecently complete
10d50 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  d SQL statement.
10d60 20 20 0a 20 20 5e 54 68 65 20 63 68 61 6e 67 65    .  ^The change
10d70 73 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  s() SQL function
10d80 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72   is a wrapper ar
10d90 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65  ound the [sqlite
10da0 33 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43  3_changes()].  C
10db0 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 20 61 6e  /C++ function an
10dc0 64 20 68 65 6e 63 65 20 66 6f 6c 6c 6f 77 73 20  d hence follows 
10dd0 74 68 65 20 73 61 6d 65 20 72 75 6c 65 73 20 66  the same rules f
10de0 6f 72 20 63 6f 75 6e 74 69 6e 67 20 63 68 61 6e  or counting chan
10df0 67 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ges..}..funcdef 
10e00 7b 63 6f 61 6c 65 73 63 65 28 58 2c 59 2c 2e 2e  {coalesce(X,Y,..
10e10 2e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  .)} {} {.  ^The 
10e20 63 6f 61 6c 65 73 63 65 28 29 20 66 75 6e 63 74  coalesce() funct
10e30 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f  ion returns a co
10e40 70 79 20 6f 66 20 69 74 73 20 66 69 72 73 74 20  py of its first 
10e50 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e  non-NULL argumen
10e60 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20  t, or.  NULL if 
10e70 61 6c 6c 20 61 72 67 75 6d 65 6e 74 73 20 61 72  all arguments ar
10e80 65 20 4e 55 4c 4c 2e 20 20 5e 43 6f 61 6c 65 73  e NULL.  ^Coales
10e90 63 65 28 29 20 6d 75 73 74 20 62 65 20 61 74 20  ce() must be at 
10ea0 6c 65 61 73 74 20 0a 20 20 32 20 61 72 67 75 6d  least .  2 argum
10eb0 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  ents..}..funcdef
10ec0 20 7b 67 6c 6f 62 28 58 2c 59 29 7d 20 7b 7d 20   {glob(X,Y)} {} 
10ed0 7b 0a 20 20 5e 54 68 65 20 67 6c 6f 62 28 58 2c  {.  ^The glob(X,
10ee0 59 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65  Y) function is e
10ef0 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 74 68 65  quivalent to the
10f00 0a 20 20 65 78 70 72 65 73 73 69 6f 6e 20 22 3c  .  expression "<
10f10 62 3e 59 20 47 4c 4f 42 20 58 3c 2f 62 3e 22 2e  b>Y GLOB X</b>".
10f20 0a 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
10f30 20 58 20 61 6e 64 20 59 20 61 72 67 75 6d 65 6e   X and Y argumen
10f40 74 73 20 61 72 65 20 72 65 76 65 72 73 65 64 20  ts are reversed 
10f50 69 6e 20 74 68 65 20 67 6c 6f 62 28 29 20 66 75  in the glob() fu
10f60 6e 63 74 69 6f 6e 0a 20 20 72 65 6c 61 74 69 76  nction.  relativ
10f70 65 20 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b  e to the infix [
10f80 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72 2e 0a  GLOB] operator..
10f90 20 20 5e 49 66 20 74 68 65 20 5b 73 71 6c 69 74    ^If the [sqlit
10fa0 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
10fb0 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20  on()] interface 
10fc0 69 73 20 75 73 65 64 20 74 6f 0a 20 20 6f 76 65  is used to.  ove
10fd0 72 72 69 64 65 20 74 68 65 20 67 6c 6f 62 28 58  rride the glob(X
10fe0 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ,Y) function wit
10ff0 68 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65  h an alternative
11000 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
11010 74 68 65 6e 0a 20 20 74 68 65 20 5b 47 4c 4f 42  then.  the [GLOB
11020 5d 20 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c 20  ] operator will 
11030 69 6e 76 6f 6b 65 20 74 68 65 20 61 6c 74 65 72  invoke the alter
11040 6e 61 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74  native implement
11050 61 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65  ation..}..funcde
11060 66 20 7b 69 66 6e 75 6c 6c 28 58 2c 59 29 7d 20  f {ifnull(X,Y)} 
11070 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 69 66 6e 75  {} {.  ^The ifnu
11080 6c 6c 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  ll() function re
11090 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20  turns a copy of 
110a0 69 74 73 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55  its first non-NU
110b0 4c 4c 20 61 72 67 75 6d 65 6e 74 2c 20 6f 72 0a  LL argument, or.
110c0 20 20 4e 55 4c 4c 20 69 66 20 62 6f 74 68 20 61    NULL if both a
110d0 72 67 75 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c  rguments are NUL
110e0 4c 2e 20 20 5e 49 66 6e 75 6c 6c 28 29 20 6d 75  L.  ^Ifnull() mu
110f0 73 74 20 68 61 76 65 20 65 78 61 63 74 6c 79 20  st have exactly 
11100 32 20 61 72 67 75 6d 65 6e 74 73 2e 0a 20 20 5e  2 arguments..  ^
11110 54 68 65 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e  The ifnull() fun
11120 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c  ction is equival
11130 65 6e 74 20 74 6f 20 5b 63 6f 61 6c 65 73 63 65  ent to [coalesce
11140 28 29 5d 20 77 69 74 68 20 74 77 6f 20 61 72 67  ()] with two arg
11150 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e 63 64  uments..}..funcd
11160 65 66 20 7b 68 65 78 28 58 29 7d 20 7b 7d 20 7b  ef {hex(X)} {} {
11170 0a 20 20 5e 54 68 65 20 68 65 78 28 29 20 66 75  .  ^The hex() fu
11180 6e 63 74 69 6f 6e 20 69 6e 74 65 72 70 72 65 74  nction interpret
11190 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74 20 61  s its argument a
111a0 73 20 61 20 42 4c 4f 42 20 61 6e 64 20 72 65 74  s a BLOB and ret
111b0 75 72 6e 73 0a 20 20 61 20 73 74 72 69 6e 67 20  urns.  a string 
111c0 77 68 69 63 68 20 69 73 20 74 68 65 20 75 70 70  which is the upp
111d0 65 72 2d 63 61 73 65 20 68 65 78 61 64 65 63 69  er-case hexadeci
111e0 6d 61 6c 20 72 65 6e 64 65 72 69 6e 67 20 6f 66  mal rendering of
111f0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
11200 20 20 74 68 61 74 20 62 6c 6f 62 2e 0a 7d 0a 0a    that blob..}..
11210 66 75 6e 63 64 65 66 20 7b 6c 61 73 74 5f 69 6e  funcdef {last_in
11220 73 65 72 74 5f 72 6f 77 69 64 28 29 7d 20 7b 7d  sert_rowid()} {}
11230 20 7b 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f 69   {.  ^The last_i
11240 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75  nsert_rowid() fu
11250 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
11260 68 65 20 5b 52 4f 57 49 44 5d 0a 20 20 6f 66 20  he [ROWID].  of 
11270 74 68 65 20 6c 61 73 74 20 72 6f 77 20 69 6e 73  the last row ins
11280 65 72 74 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ert from the dat
11290 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
112a0 20 77 68 69 63 68 20 69 6e 76 6f 6b 65 64 20 74   which invoked t
112b0 68 65 0a 20 20 66 75 6e 63 74 69 6f 6e 2e 0a 20  he.  function.. 
112c0 20 5e 54 68 65 20 6c 61 73 74 5f 69 6e 73 65 72   ^The last_inser
112d0 74 5f 72 6f 77 69 64 28 29 20 53 51 4c 20 66 75  t_rowid() SQL fu
112e0 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70  nction is a wrap
112f0 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a 20  per around the. 
11300 20 5b 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69   [sqlite3_last_i
11310 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 5d 20 43  nsert_rowid()] C
11320 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 20 66  /C++ interface f
11330 75 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63  unction..}..func
11340 64 65 66 20 7b 6c 65 6e 67 74 68 28 58 29 7d 20  def {length(X)} 
11350 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 65 6e 67  {} {.  ^The leng
11360 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  th(X) function r
11370 65 74 75 72 6e 73 20 74 68 65 20 6c 65 6e 67 74  eturns the lengt
11380 68 20 6f 66 20 58 20 69 6e 20 0a 20 20 63 68 61  h of X in .  cha
11390 72 61 63 74 65 72 73 20 69 66 20 58 20 69 73 20  racters if X is 
113a0 61 20 73 74 72 69 6e 67 2c 20 6f 72 20 69 6e 20  a string, or in 
113b0 62 79 74 65 73 20 69 66 20 58 20 69 73 20 61 20  bytes if X is a 
113c0 62 6c 6f 62 2e 0a 20 20 5e 49 66 20 58 20 69 73  blob..  ^If X is
113d0 20 4e 55 4c 4c 20 74 68 65 6e 20 6c 65 6e 67 74   NULL then lengt
113e0 68 28 58 29 20 69 73 20 4e 55 4c 4c 2e 0a 20 20  h(X) is NULL..  
113f0 5e 49 66 20 58 20 69 73 20 6e 75 6d 65 72 69 63  ^If X is numeric
11400 20 74 68 65 6e 20 6c 65 6e 67 74 68 28 58 29 20   then length(X) 
11410 72 65 74 75 72 6e 73 20 74 68 65 20 6c 65 6e 67  returns the leng
11420 74 68 20 6f 66 20 61 20 73 74 72 69 6e 67 0a 20  th of a string. 
11430 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
11440 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  of X..}..funcdef
11450 20 7b 6c 69 6b 65 28 58 2c 59 29 20 6c 69 6b 65   {like(X,Y) like
11460 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20  (X,Y,Z)} {} {.  
11470 5e 54 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63  ^The like() func
11480 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
11490 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20  implement the.  
114a0 22 3c 62 3e 59 20 4c 49 4b 45 20 58 20 26 23 39  "<b>Y LIKE X &#9
114b0 31 3b 45 53 43 41 50 45 20 5a 26 23 39 33 3b 3c  1;ESCAPE Z&#93;<
114c0 2f 62 3e 22 20 65 78 70 72 65 73 73 69 6f 6e 2e  /b>" expression.
114d0 20 0a 20 20 5e 49 66 20 74 68 65 20 6f 70 74 69   .  ^If the opti
114e0 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61 75  onal ESCAPE clau
114f0 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74  se is present, t
11500 68 65 6e 20 74 68 65 0a 20 20 6c 69 6b 65 28 29  hen the.  like()
11510 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 76   function is inv
11520 6f 6b 65 64 20 77 69 74 68 20 74 68 72 65 65 20  oked with three 
11530 61 72 67 75 6d 65 6e 74 73 2e 20 20 5e 4f 74 68  arguments.  ^Oth
11540 65 72 77 69 73 65 2c 20 69 74 20 69 73 0a 20 20  erwise, it is.  
11550 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 77 6f  invoked with two
11560 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e 6c 79 2e   arguments only.
11570 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 58   Note that the X
11580 20 61 6e 64 20 59 20 70 61 72 61 6d 65 74 65 72   and Y parameter
11590 73 20 61 72 65 0a 20 20 72 65 76 65 72 73 65 64  s are.  reversed
115a0 20 69 6e 20 74 68 65 20 6c 69 6b 65 28 29 20 66   in the like() f
115b0 75 6e 63 74 69 6f 6e 20 72 65 6c 61 74 69 76 65  unction relative
115c0 20 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b 4c   to the infix [L
115d0 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20  IKE] operator.. 
115e0 20 5e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 63   ^The [sqlite3_c
115f0 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29  reate_function()
11600 5d 20 69 6e 74 65 72 66 61 63 65 20 63 61 6e 20  ] interface can 
11610 62 65 20 75 73 65 64 20 74 6f 20 6f 76 65 72 72  be used to overr
11620 69 64 65 20 74 68 65 0a 20 20 6c 69 6b 65 28 29  ide the.  like()
11630 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68   function and th
11640 65 72 65 62 79 20 63 68 61 6e 67 65 20 74 68 65  ereby change the
11650 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68   operation of th
11660 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61  e.  [LIKE] opera
11670 74 6f 72 2e 20 20 57 68 65 6e 20 6f 76 65 72 72  tor.  When overr
11680 69 64 69 6e 67 20 74 68 65 20 6c 69 6b 65 28 29  iding the like()
11690 20 66 75 6e 63 74 69 6f 6e 2c 20 69 74 20 6d 61   function, it ma
116a0 79 20 62 65 20 69 6d 70 6f 72 74 61 6e 74 0a 20  y be important. 
116b0 20 74 6f 20 6f 76 65 72 72 69 64 65 20 62 6f 74   to override bot
116c0 68 20 74 68 65 20 74 77 6f 20 61 6e 64 20 74 68  h the two and th
116d0 72 65 65 20 61 72 67 75 6d 65 6e 74 20 76 65 72  ree argument ver
116e0 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 6c 69 6b  sions of the lik
116f0 65 28 29 20 0a 20 20 66 75 6e 63 74 69 6f 6e 2e  e() .  function.
11700 20 4f 74 68 65 72 77 69 73 65 2c 20 64 69 66 66   Otherwise, diff
11710 65 72 65 6e 74 20 63 6f 64 65 20 6d 61 79 20 62  erent code may b
11720 65 20 63 61 6c 6c 65 64 20 74 6f 20 69 6d 70 6c  e called to impl
11730 65 6d 65 6e 74 20 74 68 65 0a 20 20 5b 4c 49 4b  ement the.  [LIK
11740 45 5d 20 6f 70 65 72 61 74 6f 72 20 64 65 70 65  E] operator depe
11750 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
11760 20 6f 72 20 6e 6f 74 20 61 6e 20 45 53 43 41 50   or not an ESCAP
11770 45 20 63 6c 61 75 73 65 20 77 61 73 20 0a 20 20  E clause was .  
11780 73 70 65 63 69 66 69 65 64 2e 0a 7d 0a 0a 66 75  specified..}..fu
11790 6e 63 64 65 66 20 7b 6c 6f 61 64 5f 65 78 74 65  ncdef {load_exte
117a0 6e 73 69 6f 6e 28 58 29 20 6c 6f 61 64 5f 65 78  nsion(X) load_ex
117b0 74 65 6e 73 69 6f 6e 28 58 2c 59 29 7d 20 7b 7d  tension(X,Y)} {}
117c0 20 7b 0a 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65   {.  ^The load_e
117d0 78 74 65 6e 73 69 6f 6e 28 58 2c 59 29 20 66 75  xtension(X,Y) fu
117e0 6e 63 74 69 6f 6e 20 6c 6f 61 64 73 20 53 51 4c  nction loads SQL
117f0 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 73 20 6f  ite extensions o
11800 75 74 20 6f 66 20 74 68 65 20 73 68 61 72 65 64  ut of the shared
11810 0a 20 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20  .  library file 
11820 6e 61 6d 65 64 20 58 20 75 73 69 6e 67 20 74 68  named X using th
11830 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 59 2e  e entry point Y.
11840 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66    ^The result of
11850 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28   load_extension(
11860 29 0a 20 20 69 73 20 61 6c 77 61 79 73 20 61 20  ).  is always a 
11870 4e 55 4c 4c 2e 20 20 5e 49 66 20 59 20 69 73 20  NULL.  ^If Y is 
11880 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 74 68 65  omitted then the
11890 20 64 65 66 61 75 6c 74 20 65 6e 74 72 79 20 70   default entry p
118a0 6f 69 6e 74 0a 20 20 6f 66 20 3c 62 3e 73 71 6c  oint.  of <b>sql
118b0 69 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e 5f 69  ite3_extension_i
118c0 6e 69 74 3c 2f 62 3e 20 69 73 20 75 73 65 64 2e  nit</b> is used.
118d0 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65    ^The load_exte
118e0 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e  nsion() function
118f0 0a 20 20 72 61 69 73 65 73 20 61 6e 20 65 78 63  .  raises an exc
11900 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 65 78  eption if the ex
11910 74 65 6e 73 69 6f 6e 20 66 61 69 6c 73 20 74 6f  tension fails to
11920 20 6c 6f 61 64 20 6f 72 20 69 6e 69 74 69 61 6c   load or initial
11930 69 7a 65 20 63 6f 72 72 65 63 74 6c 79 2e 0a 0a  ize correctly...
11940 20 20 3c 70 3e 5e 54 68 65 20 6c 6f 61 64 5f 65    <p>^The load_e
11950 78 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74  xtension() funct
11960 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 69 66  ion will fail if
11970 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 20 61   the extension a
11980 74 74 65 6d 70 74 73 20 74 6f 20 0a 20 20 6d 6f  ttempts to .  mo
11990 64 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20 61  dify or delete a
119a0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 6f 72   SQL function or
119b0 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
119c0 6e 63 65 2e 20 20 5e 54 68 65 0a 20 20 65 78 74  nce.  ^The.  ext
119d0 65 6e 73 69 6f 6e 20 63 61 6e 20 61 64 64 20 6e  ension can add n
119e0 65 77 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20  ew functions or 
119f0 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
11a00 63 65 73 2c 20 62 75 74 20 63 61 6e 6e 6f 74 0a  ces, but cannot.
11a10 20 20 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c 65    modify or dele
11a20 74 65 20 65 78 69 73 74 69 6e 67 20 66 75 6e 63  te existing func
11a30 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69  tions or collati
11a40 6e 67 20 73 65 71 75 65 6e 63 65 73 20 62 65 63  ng sequences bec
11a50 61 75 73 65 0a 20 20 74 68 6f 73 65 20 66 75 6e  ause.  those fun
11a60 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 63 6f  ctions and/or co
11a70 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
11a80 73 20 6d 69 67 68 74 20 62 65 20 75 73 65 64 20  s might be used 
11a90 65 6c 73 65 77 68 65 72 65 0a 20 20 69 6e 20 74  elsewhere.  in t
11aa0 68 65 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e  he currently run
11ab0 6e 69 6e 67 20 53 51 4c 20 73 74 61 74 65 6d 65  ning SQL stateme
11ac0 6e 74 2e 20 20 54 6f 20 6c 6f 61 64 20 61 6e 20  nt.  To load an 
11ad0 65 78 74 65 6e 73 69 6f 6e 20 74 68 61 74 0a 20  extension that. 
11ae0 20 63 68 61 6e 67 65 73 20 6f 72 20 64 65 6c 65   changes or dele
11af0 74 65 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72  tes functions or
11b00 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
11b10 6e 63 65 73 2c 20 75 73 65 20 74 68 65 0a 20 20  nces, use the.  
11b20 5b 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78  [sqlite3_load_ex
11b30 74 65 6e 73 69 6f 6e 28 29 5d 20 43 2d 6c 61 6e  tension()] C-lan
11b40 67 75 61 67 65 20 41 50 49 2e 3c 2f 70 3e 0a 7d  guage API.</p>.}
11b50 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 77 65 72  ..funcdef {lower
11b60 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
11b70 20 6c 6f 77 65 72 28 58 29 20 66 75 6e 63 74 69   lower(X) functi
11b80 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70  on returns a cop
11b90 79 20 6f 66 20 73 74 72 69 6e 67 20 58 20 77 69  y of string X wi
11ba0 74 68 20 61 6c 6c 20 41 53 43 49 49 20 63 68 61  th all ASCII cha
11bb0 72 61 63 74 65 72 73 0a 20 20 63 6f 6e 76 65 72  racters.  conver
11bc0 74 65 64 20 74 6f 20 6c 6f 77 65 72 20 63 61 73  ted to lower cas
11bd0 65 2e 20 20 5e 54 68 65 20 64 65 66 61 75 6c 74  e.  ^The default
11be0 20 62 75 69 6c 74 2d 69 6e 20 6c 6f 77 65 72 28   built-in lower(
11bf0 29 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72 6b 73  ) function works
11c00 0a 20 20 66 6f 72 20 41 53 43 49 49 20 63 68 61  .  for ASCII cha
11c10 72 61 63 74 65 72 73 20 6f 6e 6c 79 2e 20 20 54  racters only.  T
11c20 6f 20 64 6f 20 63 61 73 65 20 63 6f 6e 76 65 72  o do case conver
11c30 73 69 6f 6e 73 20 6f 6e 20 6e 6f 6e 2d 41 53 43  sions on non-ASC
11c40 49 49 0a 20 20 63 68 61 72 61 63 74 65 72 73 2c  II.  characters,
11c50 20 6c 6f 61 64 20 74 68 65 20 49 43 55 20 65 78   load the ICU ex
11c60 74 65 6e 73 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63  tension..}..func
11c70 64 65 66 20 7b 6c 74 72 69 6d 28 58 29 20 6c 74  def {ltrim(X) lt
11c80 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  rim(X,Y)} {} {. 
11c90 20 5e 54 68 65 20 6c 74 72 69 6d 28 58 2c 59 29   ^The ltrim(X,Y)
11ca0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
11cb0 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65  s a string forme
11cc0 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e  d by removing an
11cd0 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72  y and all.  char
11ce0 61 63 74 65 72 73 20 74 68 61 74 20 61 70 70 65  acters that appe
11cf0 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74 68 65  ar in Y from the
11d00 20 6c 65 66 74 20 73 69 64 65 20 6f 66 20 58 2e   left side of X.
11d10 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67  .  ^If the Y arg
11d20 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64  ument is omitted
11d30 2c 20 6c 74 72 69 6d 28 58 29 20 72 65 6d 6f 76  , ltrim(X) remov
11d40 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20 74  es spaces from t
11d50 68 65 20 6c 65 66 74 20 73 69 64 65 0a 20 20 6f  he left side.  o
11d60 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  f X..}..funcdef 
11d70 7b 6d 61 78 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b  {max(X,Y,...)} {
11d80 2a 6d 61 78 43 6f 72 65 46 75 6e 63 20 2a 6d 61  *maxCoreFunc *ma
11d90 78 20 7b 6d 61 78 28 29 20 53 51 4c 20 66 75 6e  x {max() SQL fun
11da0 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65  ction}} {.  ^The
11db0 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20   multi-argument 
11dc0 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  max() function r
11dd0 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75 6d  eturns the argum
11de0 65 6e 74 20 77 69 74 68 20 74 68 65 20 0a 20 20  ent with the .  
11df0 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 2c 20 6f  maximum value, o
11e00 72 20 72 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66  r return NULL if
11e10 20 61 6e 79 20 61 72 67 75 6d 65 6e 74 20 69 73   any argument is
11e20 20 4e 55 4c 4c 2e 20 0a 20 20 5e 54 68 65 20 6d   NULL. .  ^The m
11e30 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 61  ulti-argument ma
11e40 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 73 65 61  x() function sea
11e50 72 63 68 65 73 20 69 74 73 20 61 72 67 75 6d 65  rches its argume
11e60 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  nts from left to
11e70 20 72 69 67 68 74 0a 20 20 66 6f 72 20 61 6e 20   right.  for an 
11e80 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20 64 65  argument that de
11e90 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e  fines a collatin
11ea0 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75  g function and u
11eb0 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61 74 69  ses that collati
11ec0 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20 66 6f  ng.  function fo
11ed0 72 20 61 6c 6c 20 73 74 72 69 6e 67 20 63 6f 6d  r all string com
11ee0 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e  parisons.  ^If n
11ef0 6f 6e 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d  one of the argum
11f00 65 6e 74 73 20 74 6f 20 6d 61 78 28 29 0a 20 20  ents to max().  
11f10 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61 74 69  define a collati
11f20 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74 68 65  ng function, the
11f30 6e 20 74 68 65 20 42 49 4e 41 52 59 20 63 6f 6c  n the BINARY col
11f40 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
11f50 69 73 20 75 73 65 64 2e 0a 20 20 4e 6f 74 65 20  is used..  Note 
11f60 74 68 61 74 20 3c 62 3e 6d 61 78 28 29 3c 2f 62  that <b>max()</b
11f70 3e 20 69 73 20 61 20 73 69 6d 70 6c 65 20 66 75  > is a simple fu
11f80 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20 20 69 74  nction when.  it
11f90 20 68 61 73 20 32 20 6f 72 20 6d 6f 72 65 20 61   has 2 or more a
11fa0 72 67 75 6d 65 6e 74 73 20 62 75 74 20 6f 70 65  rguments but ope
11fb0 72 61 74 65 73 20 61 73 20 61 6e 0a 20 20 5b 6d  rates as an.  [m
11fc0 69 6e 41 67 67 46 75 6e 63 20 7c 20 61 67 67 72  inAggFunc | aggr
11fd0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 5d 20  egate function] 
11fe0 69 66 20 67 69 76 65 6e 20 6f 6e 6c 79 20 61 20  if given only a 
11ff0 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2e  single argument.
12000 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69 6e  .}..funcdef {min
12010 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 69 6e  (X,Y,...)} {*min
12020 43 6f 72 65 46 75 6e 63 20 2a 6d 69 6e 20 7b 6d  CoreFunc *min {m
12030 69 6e 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  in() SQL functio
12040 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 75 6c  n}} {.  ^The mul
12050 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 69 6e 28  ti-argument min(
12060 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
12070 6e 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  ns the argument 
12080 77 69 74 68 20 74 68 65 0a 20 20 6d 69 6e 69 6d  with the.  minim
12090 75 6d 20 76 61 6c 75 65 2e 0a 20 20 5e 54 68 65  um value..  ^The
120a0 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20   multi-argument 
120b0 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 73  min() function s
120c0 65 61 72 63 68 65 73 20 69 74 73 20 61 72 67 75  earches its argu
120d0 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20  ments from left 
120e0 74 6f 20 72 69 67 68 74 0a 20 20 66 6f 72 20 61  to right.  for a
120f0 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20  n argument that 
12100 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74  defines a collat
12110 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  ing function and
12120 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61   uses that colla
12130 74 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20  ting.  function 
12140 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 20 63  for all string c
12150 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66  omparisons.  ^If
12160 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 72 67   none of the arg
12170 75 6d 65 6e 74 73 20 74 6f 20 6d 69 6e 28 29 0a  uments to min().
12180 20 20 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61    define a colla
12190 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74  ting function, t
121a0 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20 63  hen the BINARY c
121b0 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
121c0 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 4e 6f 74  n is used..  Not
121d0 65 20 74 68 61 74 20 3c 62 3e 6d 69 6e 28 29 3c  e that <b>min()<
121e0 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c 65 20  /b> is a simple 
121f0 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20 20  function when.  
12200 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72 65  it has 2 or more
12210 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20 6f   arguments but o
12220 70 65 72 61 74 65 73 20 61 73 20 61 6e 20 0a 20  perates as an . 
12230 20 5b 6d 61 78 41 67 67 46 75 6e 63 20 7c 20 61   [maxAggFunc | a
12240 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
12250 6e 5d 20 69 66 20 67 69 76 65 6e 0a 20 20 6f 6e  n] if given.  on
12260 6c 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75  ly a single argu
12270 6d 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  ment..}..funcdef
12280 20 7b 6e 75 6c 6c 69 66 28 58 2c 59 29 7d 20 7b   {nullif(X,Y)} {
12290 7d 20 7b 0a 20 20 5e 54 68 65 20 6e 75 6c 6c 69  } {.  ^The nulli
122a0 66 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  f(X,Y) function 
122b0 72 65 74 75 72 6e 73 20 69 74 73 20 66 69 72 73  returns its firs
122c0 74 20 61 72 67 75 6d 65 6e 74 20 69 66 20 74 68  t argument if th
122d0 65 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 0a  e arguments are.
122e0 20 20 64 69 66 66 65 72 65 6e 74 20 61 6e 64 20    different and 
122f0 4e 55 4c 4c 20 69 66 20 74 68 65 20 61 72 67 75  NULL if the argu
12300 6d 65 6e 74 73 20 61 72 65 20 74 68 65 20 73 61  ments are the sa
12310 6d 65 2e 20 20 5e 54 68 65 20 6e 75 6c 6c 69 66  me.  ^The nullif
12320 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 0a 20  (X,Y) function. 
12330 20 73 65 61 72 63 68 65 73 20 69 74 73 20 61 72   searches its ar
12340 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66  guments from lef
12350 74 20 74 6f 20 72 69 67 68 74 20 66 6f 72 20 61  t to right for a
12360 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20  n argument that 
12370 64 65 66 69 6e 65 73 20 61 0a 20 20 63 6f 6c 6c  defines a.  coll
12380 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61  ating function a
12390 6e 64 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c  nd uses that col
123a0 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
123b0 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 0a 20  for all string. 
123c0 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e   comparisons.  ^
123d0 49 66 20 6e 65 69 74 68 65 72 20 61 72 67 75 6d  If neither argum
123e0 65 6e 74 20 74 6f 20 6e 75 6c 6c 69 66 28 29 20  ent to nullif() 
123f0 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74  defines a collat
12400 69 6e 67 20 66 75 6e 63 74 69 6f 6e 0a 20 20 74  ing function.  t
12410 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20 69  hen the BINARY i
12420 73 20 75 73 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64  s used..}..funcd
12430 65 66 20 7b 71 75 6f 74 65 28 58 29 7d 20 7b 7d  ef {quote(X)} {}
12440 20 7b 0a 20 20 5e 54 68 65 20 71 75 6f 74 65 28   {.  ^The quote(
12450 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
12460 72 6e 73 20 61 20 73 74 72 69 6e 67 20 77 68 69  rns a string whi
12470 63 68 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  ch is the value 
12480 6f 66 0a 20 20 69 74 73 20 61 72 67 75 6d 65 6e  of.  its argumen
12490 74 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 69  t suitable for i
124a0 6e 63 6c 75 73 69 6f 6e 20 69 6e 74 6f 20 61 6e  nclusion into an
124b0 6f 74 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d  other SQL statem
124c0 65 6e 74 2e 0a 20 20 5e 53 74 72 69 6e 67 73 20  ent..  ^Strings 
124d0 61 72 65 20 73 75 72 72 6f 75 6e 64 65 64 20 62  are surrounded b
124e0 79 20 73 69 6e 67 6c 65 2d 71 75 6f 74 65 73 20  y single-quotes 
124f0 77 69 74 68 20 65 73 63 61 70 65 73 20 6f 6e 20  with escapes on 
12500 69 6e 74 65 72 69 6f 72 20 71 75 6f 74 65 73 0a  interior quotes.
12510 20 20 61 73 20 6e 65 65 64 65 64 2e 20 20 5e 42    as needed.  ^B
12520 4c 4f 42 73 20 61 72 65 20 65 6e 63 6f 64 65 64  LOBs are encoded
12530 20 61 73 20 68 65 78 61 64 65 63 69 6d 61 6c 20   as hexadecimal 
12540 6c 69 74 65 72 61 6c 73 2e 0a 7d 0a 0a 66 75 6e  literals..}..fun
12550 63 64 65 66 20 7b 72 61 6e 64 6f 6d 28 29 7d 20  cdef {random()} 
12560 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 61 6e 64  {} {.  ^The rand
12570 6f 6d 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  om() function re
12580 74 75 72 6e 73 20 61 20 70 73 65 75 64 6f 2d 72  turns a pseudo-r
12590 61 6e 64 6f 6d 20 69 6e 74 65 67 65 72 0a 20 20  andom integer.  
125a0 62 65 74 77 65 65 6e 20 2d 39 32 32 33 33 37 32  between -9223372
125b0 30 33 36 38 35 34 37 37 35 38 30 38 20 61 6e 64  036854775808 and
125c0 20 2b 39 32 32 33 33 37 32 30 33 36 38 35 34 37   +92233720368547
125d0 37 35 38 30 37 2e 0a 7d 0a 0a 66 75 6e 63 64 65  75807..}..funcde
125e0 66 20 7b 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29  f {randomblob(N)
125f0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 61  } {} {.  ^The ra
12600 6e 64 6f 6d 62 6c 6f 62 28 4e 29 20 66 75 6e 63  ndomblob(N) func
12610 74 69 6f 6e 20 72 65 74 75 72 6e 20 61 6e 20 4e  tion return an N
12620 2d 62 79 74 65 20 62 6c 6f 62 20 63 6f 6e 74 61  -byte blob conta
12630 69 6e 69 6e 67 20 70 73 65 75 64 6f 2d 72 61 6e  ining pseudo-ran
12640 64 6f 6d 0a 20 20 62 79 74 65 73 2e 20 5e 49 66  dom.  bytes. ^If
12650 20 4e 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20   N is less than 
12660 31 20 74 68 65 6e 20 61 20 31 2d 62 79 74 65 20  1 then a 1-byte 
12670 72 61 6e 64 6f 6d 20 62 6c 6f 62 20 69 73 20 72  random blob is r
12680 65 74 75 72 6e 65 64 2e 0a 0a 20 20 3c 70 3e 48  eturned...  <p>H
12690 69 6e 74 3a 20 20 61 70 70 6c 69 63 61 74 69 6f  int:  applicatio
126a0 6e 73 20 63 61 6e 20 67 65 6e 65 72 61 74 65 20  ns can generate 
126b0 67 6c 6f 62 61 6c 6c 79 20 75 6e 69 71 75 65 20  globally unique 
126c0 69 64 65 6e 74 69 66 69 65 72 73 0a 20 20 75 73  identifiers.  us
126d0 69 6e 67 20 74 68 69 73 20 66 75 6e 63 74 69 6f  ing this functio
126e0 6e 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  n together with 
126f0 5b 68 65 78 28 29 5d 20 61 6e 64 2f 6f 72 0a 20  [hex()] and/or. 
12700 20 5b 6c 6f 77 65 72 28 29 5d 20 6c 69 6b 65 20   [lower()] like 
12710 74 68 69 73 3a 3c 2f 70 3e 0a 0a 20 20 3c 62 6c  this:</p>..  <bl
12720 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 68 65 78 28  ockquote>.  hex(
12730 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29 3c  randomblob(16))<
12740 62 72 3e 3c 2f 62 72 3e 0a 20 20 6c 6f 77 65 72  br></br>.  lower
12750 28 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28  (hex(randomblob(
12760 31 36 29 29 29 0a 20 20 3c 2f 62 6c 6f 63 6b 71  16))).  </blockq
12770 75 6f 74 65 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66  uote>.}..funcdef
12780 20 7b 72 65 70 6c 61 63 65 28 58 2c 59 2c 5a 29   {replace(X,Y,Z)
12790 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 65  } {} {.  ^The re
127a0 70 6c 61 63 65 28 58 2c 59 2c 5a 29 20 66 75 6e  place(X,Y,Z) fun
127b0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
127c0 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79  string formed by
127d0 20 73 75 62 73 74 69 74 75 74 69 6e 67 0a 20 20   substituting.  
127e0 73 74 72 69 6e 67 20 5a 20 66 6f 72 20 65 76 65  string Z for eve
127f0 72 79 20 6f 63 63 75 72 72 61 6e 63 65 20 6f 66  ry occurrance of
12800 20 73 74 72 69 6e 67 20 59 20 69 6e 20 73 74 72   string Y in str
12810 69 6e 67 20 58 2e 20 20 5e 54 68 65 20 5b 42 49  ing X.  ^The [BI
12820 4e 41 52 59 5d 0a 20 20 63 6f 6c 6c 61 74 69 6e  NARY].  collatin
12830 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 73  g sequence is us
12840 65 64 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f  ed for compariso
12850 6e 73 2e 20 20 5e 49 66 20 59 20 69 73 20 61 6e  ns.  ^If Y is an
12860 20 65 6d 70 74 79 0a 20 20 73 74 72 69 6e 67 20   empty.  string 
12870 74 68 65 6e 20 72 65 74 75 72 6e 20 58 20 75 6e  then return X un
12880 63 68 61 6e 67 65 64 2e 20 20 5e 49 66 20 5a 20  changed.  ^If Z 
12890 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79  is not initially
128a0 0a 20 20 61 20 73 74 72 69 6e 67 2c 20 69 74 20  .  a string, it 
128b0 69 73 20 63 61 73 74 20 74 6f 20 61 20 55 54 46  is cast to a UTF
128c0 2d 38 20 73 74 72 69 6e 67 20 70 72 69 6f 72 20  -8 string prior 
128d0 74 6f 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 7d  to processing..}
128e0 0a 0a 66 75 6e 63 64 65 66 20 7b 72 6f 75 6e 64  ..funcdef {round
128f0 28 58 29 20 72 6f 75 6e 64 28 58 2c 59 29 7d 20  (X) round(X,Y)} 
12900 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 6f 75 6e  {} {.  ^The roun
12910 64 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  d(X,Y) function 
12920 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67  returns a string
12930 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
12940 6f 66 20 74 68 65 20 66 6c 6f 61 74 69 6e 67 2d  of the floating-
12950 70 6f 69 6e 74 0a 20 20 76 61 6c 75 65 20 58 20  point.  value X 
12960 72 6f 75 6e 64 65 64 20 74 6f 20 59 20 64 69 67  rounded to Y dig
12970 69 74 73 20 74 6f 20 74 68 65 20 72 69 67 68 74  its to the right
12980 20 6f 66 20 74 68 65 20 64 65 63 69 6d 61 6c 20   of the decimal 
12990 70 6f 69 6e 74 2e 0a 20 20 5e 49 66 20 74 68 65  point..  ^If the
129a0 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f   Y argument is o
129b0 6d 69 74 74 65 64 2c 20 74 68 65 20 58 20 76 61  mitted, the X va
129c0 6c 75 65 20 69 73 20 74 72 75 6e 63 61 74 65 64  lue is truncated
129d0 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a   to an integer..
129e0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 74 72 69  }..funcdef {rtri
129f0 6d 28 58 29 20 72 74 72 69 6d 28 58 2c 59 29 7d  m(X) rtrim(X,Y)}
12a00 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 74 72   {} {.  ^The rtr
12a10 69 6d 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  im(X,Y) function
12a20 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
12a30 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f  g formed by remo
12a40 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c  ving any and all
12a50 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 74 68  .  characters th
12a60 61 74 20 61 70 70 65 61 72 20 69 6e 20 59 20 66  at appear in Y f
12a70 72 6f 6d 20 74 68 65 20 72 69 67 68 74 20 73 69  rom the right si
12a80 64 65 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74  de of X..  ^If t
12a90 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73  he Y argument is
12aa0 20 6f 6d 69 74 74 65 64 2c 20 72 74 72 69 6d 28   omitted, rtrim(
12ab0 58 29 20 72 65 6d 6f 76 65 73 20 73 70 61 63 65  X) removes space
12ac0 73 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74  s from the right
12ad0 0a 20 20 73 69 64 65 20 6f 66 20 58 2e 0a 7d 0a  .  side of X..}.
12ae0 0a 66 75 6e 63 64 65 66 20 7b 73 6f 75 6e 64 65  .funcdef {sounde
12af0 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  x(X)} {} {.  ^Th
12b00 65 20 73 6f 75 6e 64 65 78 28 58 29 20 66 75 6e  e soundex(X) fun
12b10 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
12b20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 74  string that is t
12b30 68 65 20 73 6f 75 6e 64 65 78 20 65 6e 63 6f 64  he soundex encod
12b40 69 6e 67 20 0a 20 20 6f 66 20 74 68 65 20 73 74  ing .  of the st
12b50 72 69 6e 67 20 58 2e 0a 20 20 5e 54 68 65 20 73  ring X..  ^The s
12b60 74 72 69 6e 67 20 22 3f 30 30 30 22 20 69 73 20  tring "?000" is 
12b70 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65 20  returned if the 
12b80 61 72 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c  argument is NULL
12b90 20 6f 72 20 63 6f 6e 74 61 69 6e 73 0a 20 20 6e   or contains.  n
12ba0 6f 20 41 53 43 49 49 20 61 6c 70 68 61 62 65 74  o ASCII alphabet
12bb0 69 63 20 63 68 61 72 61 63 74 65 72 73 2e 0a 20  ic characters.. 
12bc0 20 5e 28 54 68 69 73 20 66 75 6e 63 74 69 6f 6e   ^(This function
12bd0 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
12be0 20 53 51 4c 69 74 65 20 62 79 20 64 65 66 61 75   SQLite by defau
12bf0 6c 74 2e 0a 20 20 49 74 20 69 73 20 6f 6e 6c 79  lt..  It is only
12c00 20 61 76 61 69 6c 61 62 6c 65 20 69 66 20 74 68   available if th
12c10 65 20 5b 53 51 4c 49 54 45 5f 53 4f 55 4e 44 45  e [SQLITE_SOUNDE
12c20 58 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  X] compile-time 
12c30 6f 70 74 69 6f 6e 0a 20 20 69 73 20 75 73 65 64  option.  is used
12c40 20 77 68 65 6e 20 53 51 4c 69 74 65 20 69 73 20   when SQLite is 
12c50 62 75 69 6c 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63  built.)^.}..func
12c60 64 65 66 20 7b 73 71 6c 69 74 65 5f 73 6f 75 72  def {sqlite_sour
12c70 63 65 5f 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20  ce_id()} {} {.  
12c80 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 6f 75 72  ^The sqlite_sour
12c90 63 65 5f 69 64 28 29 20 66 75 6e 63 74 69 6f 6e  ce_id() function
12ca0 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
12cb0 67 20 74 68 61 74 20 69 64 65 6e 74 69 66 69 65  g that identifie
12cc0 73 20 74 68 65 0a 20 20 73 70 65 63 69 66 69 63  s the.  specific
12cd0 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20   version of the 
12ce0 73 6f 75 72 63 65 20 63 6f 64 65 20 74 68 61 74  source code that
12cf0 20 77 61 73 20 75 73 65 64 20 74 6f 20 62 75 69   was used to bui
12d00 6c 64 20 74 68 65 20 53 51 4c 69 74 65 0a 20 20  ld the SQLite.  
12d10 6c 69 62 72 61 72 79 2e 20 20 5e 54 68 65 20 73  library.  ^The s
12d20 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62  tring returned b
12d30 79 20 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f  y sqlite_source_
12d40 69 64 28 29 20 62 65 67 69 6e 73 20 77 69 74 68  id() begins with
12d50 0a 20 20 74 68 65 20 64 61 74 65 20 61 6e 64 20  .  the date and 
12d60 74 69 6d 65 20 74 68 61 74 20 74 68 65 20 73 6f  time that the so
12d70 75 72 63 65 20 63 6f 64 65 20 77 61 73 20 63 68  urce code was ch
12d80 65 63 6b 65 64 20 69 6e 20 61 6e 64 20 69 73 20  ecked in and is 
12d90 66 6f 6c 6c 6f 77 73 20 62 79 0a 20 20 61 6e 20  follows by.  an 
12da0 53 48 41 31 20 68 61 73 68 20 74 68 61 74 20 75  SHA1 hash that u
12db0 6e 69 71 75 65 6c 79 20 69 64 65 6e 74 69 66 69  niquely identifi
12dc0 65 73 20 74 68 65 20 73 6f 75 72 63 65 20 74 72  es the source tr
12dd0 65 65 2e 20 20 5e 54 68 69 73 20 66 75 6e 63 74  ee.  ^This funct
12de0 69 6f 6e 20 69 73 0a 20 20 61 6e 20 53 51 4c 20  ion is.  an SQL 
12df0 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
12e00 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 6f 75 72  he [sqlite3_sour
12e10 63 65 69 64 28 29 5d 20 43 20 69 6e 74 65 72 66  ceid()] C interf
12e20 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ace..}..funcdef 
12e30 7b 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28  {sqlite_version(
12e40 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73  )} {} {.  ^The s
12e50 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 20  qlite_version() 
12e60 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
12e70 20 74 68 65 20 76 65 72 73 69 6f 6e 20 73 74 72   the version str
12e80 69 6e 67 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ing for the SQLi
12e90 74 65 0a 20 20 6c 69 62 72 61 72 79 20 74 68 61  te.  library tha
12ea0 74 20 69 73 20 72 75 6e 6e 69 6e 67 2e 20 20 5e  t is running.  ^
12eb0 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
12ec0 20 61 6e 20 53 51 4c 0a 20 20 77 72 61 70 70 65   an SQL.  wrappe
12ed0 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71  r around the [sq
12ee0 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e  lite3_libversion
12ef0 28 29 5d 20 43 2d 69 6e 74 65 72 66 61 63 65 2e  ()] C-interface.
12f00 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 75 62  .}..funcdef {sub
12f10 73 74 72 28 58 2c 59 2c 5a 29 20 73 75 62 73 74  str(X,Y,Z) subst
12f20 72 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  r(X,Y)} {} {.  ^
12f30 54 68 65 20 73 75 62 73 74 72 28 58 2c 59 2c 5a  The substr(X,Y,Z
12f40 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
12f50 6e 73 20 61 20 73 75 62 73 74 72 69 6e 67 20 6f  ns a substring o
12f60 66 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 58  f input string X
12f70 20 74 68 61 74 20 62 65 67 69 6e 73 0a 20 20 77   that begins.  w
12f80 69 74 68 20 74 68 65 20 59 2d 74 68 20 63 68 61  ith the Y-th cha
12f90 72 61 63 74 65 72 20 61 6e 64 20 77 68 69 63 68  racter and which
12fa0 20 69 73 20 5a 20 63 68 61 72 61 63 74 65 72 73   is Z characters
12fb0 20 6c 6f 6e 67 2e 0a 20 20 5e 49 66 20 5a 20 69   long..  ^If Z i
12fc0 73 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 73  s omitted then s
12fd0 75 62 73 74 72 28 58 2c 59 29 20 72 65 74 75 72  ubstr(X,Y) retur
12fe0 6e 73 20 61 6c 6c 20 63 68 61 72 61 63 74 65 72  ns all character
12ff0 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6e 64   through the end
13000 0a 20 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  .  of the string
13010 20 58 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74   X beginning wit
13020 68 20 74 68 65 20 59 2d 74 68 2e 0a 20 20 5e 54  h the Y-th..  ^T
13030 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 68 61  he left-most cha
13040 72 61 63 74 65 72 20 6f 66 20 58 20 69 73 20 6e  racter of X is n
13050 75 6d 62 65 72 20 31 2e 20 20 5e 49 66 20 59 20  umber 1.  ^If Y 
13060 69 73 20 6e 65 67 61 74 69 76 65 0a 20 20 74 68  is negative.  th
13070 65 20 74 68 65 20 66 69 72 73 74 20 63 68 61 72  e the first char
13080 61 63 74 65 72 20 6f 66 20 74 68 65 20 73 75 62  acter of the sub
13090 73 74 72 69 6e 67 20 69 73 20 66 6f 75 6e 64 20  string is found 
130a0 62 79 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f 6d  by counting from
130b0 20 74 68 65 0a 20 20 72 69 67 68 74 20 72 61 74   the.  right rat
130c0 68 65 72 20 74 68 61 6e 20 74 68 65 20 6c 65 66  her than the lef
130d0 74 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 65 67  t.  ^If Z is neg
130e0 61 74 69 76 65 20 74 68 65 6e 0a 20 20 74 68 65  ative then.  the
130f0 20 61 62 73 28 5a 29 20 63 68 61 72 61 63 74 65   abs(Z) characte
13100 72 73 20 70 72 65 63 65 65 64 69 6e 67 20 74 68  rs preceeding th
13110 65 20 59 2d 74 68 20 63 68 61 72 61 63 74 65 72  e Y-th character
13120 20 61 72 65 20 72 65 74 75 72 6e 65 64 2e 0a 20   are returned.. 
13130 20 5e 49 66 20 58 20 69 73 20 73 74 72 69 6e 67   ^If X is string
13140 20 74 68 65 6e 20 63 68 61 72 61 63 74 65 72 73   then characters
13150 20 69 6e 64 69 63 65 73 20 72 65 66 65 72 20 74   indices refer t
13160 6f 20 61 63 74 75 61 6c 20 55 54 46 2d 38 20 0a  o actual UTF-8 .
13170 20 20 63 68 61 72 61 63 74 65 72 73 2e 20 20 5e    characters.  ^
13180 49 66 20 58 20 69 73 20 61 20 42 4c 4f 42 20 74  If X is a BLOB t
13190 68 65 6e 20 74 68 65 20 69 6e 64 69 63 65 73 20  hen the indices 
131a0 72 65 66 65 72 20 74 6f 20 62 79 74 65 73 2e 0a  refer to bytes..
131b0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 6f 74 61  }..funcdef {tota
131c0 6c 5f 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20  l_changes()} {} 
131d0 7b 0a 20 20 5e 54 68 65 20 74 6f 74 61 6c 5f 63  {.  ^The total_c
131e0 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f  hanges() functio
131f0 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  n returns the nu
13200 6d 62 65 72 20 6f 66 20 72 6f 77 20 63 68 61 6e  mber of row chan
13210 67 65 73 0a 20 20 63 61 75 73 65 64 20 62 79 20  ges.  caused by 
13220 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f  INSERT, UPDATE o
13230 72 20 44 45 4c 45 54 45 0a 20 20 73 74 61 74 65  r DELETE.  state
13240 6d 65 6e 74 73 20 73 69 6e 63 65 20 74 68 65 20  ments since the 
13250 63 75 72 72 65 6e 74 20 64 61 74 61 62 61 73 65  current database
13260 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20   connection was 
13270 6f 70 65 6e 65 64 2e 0a 20 20 5e 54 68 69 73 20  opened..  ^This 
13280 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72  function is a wr
13290 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65  apper around the
132a0 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f   [sqlite3_total_
132b0 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43  changes()].  C/C
132c0 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a  ++ interface..}.
132d0 0a 66 75 6e 63 64 65 66 20 7b 74 72 69 6d 28 58  .funcdef {trim(X
132e0 29 20 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20  ) trim(X,Y)} {} 
132f0 7b 0a 20 20 5e 54 68 65 20 74 72 69 6d 28 58 2c  {.  ^The trim(X,
13300 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
13310 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72  rns a string for
13320 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20  med by removing 
13330 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68  any and all.  ch
13340 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70  aracters that ap
13350 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 62  pear in Y from b
13360 6f 74 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 20  oth ends of X.. 
13370 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75 6d   ^If the Y argum
13380 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20  ent is omitted, 
13390 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20  trim(X) removes 
133a0 73 70 61 63 65 73 20 66 72 6f 6d 20 62 6f 74 68  spaces from both
133b0 20 65 6e 64 73 20 6f 66 20 58 2e 0a 7d 0a 0a 66   ends of X..}..f
133c0 75 6e 63 64 65 66 20 7b 74 79 70 65 6f 66 28 58  uncdef {typeof(X
133d0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74  )} {} {.  ^The t
133e0 79 70 65 6f 66 28 58 29 20 66 75 6e 63 74 69 6f  ypeof(X) functio
133f0 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69  n returns a stri
13400 6e 67 20 74 68 61 74 20 69 6e 64 69 63 61 74 65  ng that indicate
13410 73 20 74 68 65 20 5b 64 61 74 61 74 79 70 65 5d  s the [datatype]
13420 20 6f 66 0a 20 20 74 68 65 20 65 78 70 72 65 73   of.  the expres
13430 73 69 6f 6e 20 58 3a 20 22 6e 75 6c 6c 22 2c 20  sion X: "null", 
13440 22 69 6e 74 65 67 65 72 22 2c 20 22 72 65 61 6c  "integer", "real
13450 22 2c 20 22 74 65 78 74 22 2c 20 6f 72 20 22 62  ", "text", or "b
13460 6c 6f 62 22 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  lob"..}..funcdef
13470 20 7b 75 70 70 65 72 28 58 29 7d 20 7b 7d 20 7b   {upper(X)} {} {
13480 0a 20 20 5e 54 68 65 20 75 70 70 65 72 28 58 29  .  ^The upper(X)
13490 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
134a0 73 20 61 20 63 6f 70 79 20 6f 66 20 69 6e 70 75  s a copy of inpu
134b0 74 20 73 74 72 69 6e 67 20 58 20 69 6e 20 77 68  t string X in wh
134c0 69 63 68 20 61 6c 6c 20 0a 20 20 6c 6f 77 65 72  ich all .  lower
134d0 2d 63 61 73 65 20 41 53 43 49 49 20 63 68 61 72  -case ASCII char
134e0 61 63 74 65 72 73 20 61 72 65 20 63 6f 6e 76 65  acters are conve
134f0 72 74 65 64 20 74 6f 20 74 68 65 69 72 20 75 70  rted to their up
13500 70 65 72 2d 63 61 73 65 20 65 71 75 69 76 61 6c  per-case equival
13510 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ent..}..funcdef 
13520 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29 7d 20 7b 7d  {zeroblob(N)} {}
13530 20 7b 0a 20 20 5e 54 68 65 20 7a 65 72 6f 62 6c   {.  ^The zerobl
13540 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72  ob(N) function r
13550 65 74 75 72 6e 73 20 61 20 42 4c 4f 42 20 63 6f  eturns a BLOB co
13560 6e 73 69 73 74 69 6e 67 20 6f 66 20 4e 20 62 79  nsisting of N by
13570 74 65 73 20 6f 66 20 30 78 30 30 2e 0a 20 20 53  tes of 0x00..  S
13580 51 4c 69 74 65 20 6d 61 6e 61 67 65 73 20 74 68  QLite manages th
13590 65 73 65 20 7a 65 72 6f 62 6c 6f 62 73 20 76 65  ese zeroblobs ve
135a0 72 79 20 65 66 66 69 63 69 65 6e 74 6c 79 2e 20  ry efficiently. 
135b0 20 5a 65 72 6f 62 6c 6f 62 73 20 63 61 6e 20 62   Zeroblobs can b
135c0 65 20 75 73 65 64 20 74 6f 0a 20 20 72 65 73 65  e used to.  rese
135d0 72 76 65 20 73 70 61 63 65 20 66 6f 72 20 61 20  rve space for a 
135e0 42 4c 4f 42 20 74 68 61 74 20 69 73 20 6c 61 74  BLOB that is lat
135f0 65 72 20 77 72 69 74 74 65 6e 20 75 73 69 6e 67  er written using
13600 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f   .  [sqlite3_blo
13610 62 5f 6f 70 65 6e 28 29 20 7c 20 69 6e 63 72 65  b_open() | incre
13620 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 5d  mental BLOB I/O]
13630 2e 0a 20 20 5e 54 68 69 73 20 53 51 4c 20 66 75  ..  ^This SQL fu
13640 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65 6d  nction is implem
13650 65 6e 74 65 64 20 75 73 69 6e 67 20 74 68 65 20  ented using the 
13660 5b 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  [sqlite3_result_
13670 7a 65 72 6f 62 6c 6f 62 28 29 5d 0a 20 20 72 6f  zeroblob()].  ro
13680 75 74 69 6e 65 20 66 72 6f 6d 20 74 68 65 20 43  utine from the C
13690 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a  /C++ interface..
136a0 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c 65  }.</tcl>.</table
136b0 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
136c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
136d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
136e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
136f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13700 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
13710 7b 44 61 74 65 20 41 6e 64 20 54 69 6d 65 20 46  {Date And Time F
13720 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65 66 75  unctions} datefu
13730 6e 63 20 7b 2a 64 61 74 65 66 75 6e 63 7d 0a 68  nc {*datefunc}.h
13740 64 5f 6b 65 79 77 6f 72 64 73 20 7b 64 61 74 65  d_keywords {date
13750 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d  () SQL function}
13760 20 7b 74 69 6d 65 28 29 20 53 51 4c 20 66 75 6e   {time() SQL fun
13770 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72  ction}.hd_keywor
13780 64 73 20 7b 64 61 74 65 74 69 6d 65 28 29 20 53  ds {datetime() S
13790 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b 6a 75  QL function} {ju
137a0 6c 69 61 6e 64 61 79 28 29 20 53 51 4c 20 66 75  lianday() SQL fu
137b0 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f  nction}.hd_keywo
137c0 72 64 73 20 7b 73 74 72 66 74 69 6d 65 28 29 20  rds {strftime() 
137d0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 3c 2f  SQL function}.</
137e0 74 63 6c 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65  tcl>..<p>.SQLite
137f0 20 73 75 70 70 6f 72 74 73 20 66 69 76 65 20 64   supports five d
13800 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e  ate and time fun
13810 63 74 69 6f 6e 73 20 61 73 20 66 6f 6c 6c 6f 77  ctions as follow
13820 73 3a 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 6f 6c  s:.</p>..<p>.<ol
13830 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65  >.<li> ^(<b>date
13840 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69  (</b><i>timestri
13850 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f  ng, modifier, mo
13860 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c  difier, ...</i><
13870 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a  b>)</b>)^ </li>.
13880 3c 6c 69 3e 20 5e 28 3c 62 3e 74 69 6d 65 28 3c  <li> ^(<b>time(<
13890 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67  /b><i>timestring
138a0 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69  , modifier, modi
138b0 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e  fier, ...</i><b>
138c0 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c  )</b>)^ </li>.<l
138d0 69 3e 20 5e 28 3c 62 3e 64 61 74 65 74 69 6d 65  i> ^(<b>datetime
138e0 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69  (</b><i>timestri
138f0 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f  ng, modifier, mo
13900 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c  difier, ...</i><
13910 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a  b>)</b>)^ </li>.
13920 3c 6c 69 3e 20 5e 28 3c 62 3e 6a 75 6c 69 61 6e  <li> ^(<b>julian
13930 64 61 79 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73  day(</b><i>times
13940 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c  tring, modifier,
13950 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f   modifier, ...</
13960 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c  i><b>)</b>)^ </l
13970 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 73 74 72  i>.<li> ^(<b>str
13980 66 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 66 6f 72  ftime(</b><i>for
13990 6d 61 74 2c 20 74 69 6d 65 73 74 72 69 6e 67 2c  mat, timestring,
139a0 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66   modifier, modif
139b0 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29  ier, ...</i><b>)
139c0 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 2f 6f  </b>)^ </li>.</o
139d0 6c 3e 0a 0a 3c 70 3e 0a 5e 41 6c 6c 20 66 69 76  l>..<p>.^All fiv
139e0 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  e date and time 
139f0 66 75 6e 63 74 69 6f 6e 73 20 74 61 6b 65 20 61  functions take a
13a00 20 74 69 6d 65 20 73 74 72 69 6e 67 20 61 73 20   time string as 
13a10 61 6e 20 61 72 67 75 6d 65 6e 74 2e 20 0a 5e 54  an argument. .^T
13a20 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20 69  he time string i
13a30 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65  s followed by ze
13a40 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64 69 66  ro or more modif
13a50 69 65 72 73 2e 20 0a 5e 54 68 65 20 73 74 72 66  iers. .^The strf
13a60 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  time() function 
13a70 61 6c 73 6f 20 74 61 6b 65 73 20 61 20 66 6f 72  also takes a for
13a80 6d 61 74 20 73 74 72 69 6e 67 20 61 73 20 69 74  mat string as it
13a90 73 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  s first argument
13aa0 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20  ..</p>..<p>.The 
13ab0 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75  date and time fu
13ac0 6e 63 74 69 6f 6e 73 20 75 73 65 20 61 20 73 75  nctions use a su
13ad0 62 73 65 74 20 6f 66 0a 5b 68 74 74 70 3a 2f 2f  bset of.[http://
13ae0 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67  en.wikipedia.org
13af0 2f 77 69 6b 69 2f 49 53 4f 5f 38 36 30 31 20 7c  /wiki/ISO_8601 |
13b00 20 49 53 30 2d 38 36 30 31 5d 20 64 61 74 65 20   IS0-8601] date 
13b10 61 6e 64 20 74 69 6d 65 0a 66 6f 72 6d 61 74 73  and time.formats
13b20 2e 0a 5e 54 68 65 20 64 61 74 65 28 29 20 66 75  ..^The date() fu
13b30 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
13b40 68 65 20 64 61 74 65 20 69 6e 20 74 68 69 73 20  he date in this 
13b50 66 6f 72 6d 61 74 3a 20 59 59 59 59 2d 4d 4d 2d  format: YYYY-MM-
13b60 44 44 2e 20 0a 5e 54 68 65 20 74 69 6d 65 28 29  DD. .^The time()
13b70 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
13b80 73 20 74 68 65 20 74 69 6d 65 20 61 73 20 48 48  s the time as HH
13b90 3a 4d 4d 3a 53 53 2e 20 0a 5e 54 68 65 20 64 61  :MM:SS. .^The da
13ba0 74 65 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f  tetime() functio
13bb0 6e 20 72 65 74 75 72 6e 73 20 22 59 59 59 59 2d  n returns "YYYY-
13bc0 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e  MM-DD HH:MM:SS".
13bd0 20 0a 5e 28 54 68 65 20 6a 75 6c 69 61 6e 64 61   .^(The julianda
13be0 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  y() function ret
13bf0 75 72 6e 73 20 74 68 65 20 0a 5b 68 74 74 70 3a  urns the .[http:
13c00 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
13c10 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64  rg/wiki/Julian_d
13c20 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61 79 5d  ay | Julian day]
13c30 20 2d 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66   - the.number of
13c40 20 64 61 79 73 20 73 69 6e 63 65 20 6e 6f 6f 6e   days since noon
13c50 20 69 6e 20 47 72 65 65 6e 77 69 63 68 20 6f 6e   in Greenwich on
13c60 20 4e 6f 76 65 6d 62 65 72 20 32 34 2c 20 34 37   November 24, 47
13c70 31 34 20 42 2e 43 2e 20 0a 28 5b 68 74 74 70 3a  14 B.C. .([http:
13c80 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
13c90 72 67 2f 77 69 6b 69 2f 50 72 6f 6c 65 70 74 69  rg/wiki/Prolepti
13ca0 63 5f 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65  c_Gregorian_cale
13cb0 6e 64 61 72 20 7c 20 50 72 6f 6c 65 70 74 69 63  ndar | Proleptic
13cc0 20 47 72 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e   Gregorian calen
13cd0 64 61 72 5d 29 2e 29 5e 0a 5e 54 68 65 20 73 74  dar]).)^.^The st
13ce0 72 66 74 69 6d 65 28 29 20 72 6f 75 74 69 6e 65  rftime() routine
13cf0 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 61 74   returns the dat
13d00 65 20 66 6f 72 6d 61 74 74 65 64 20 61 63 63 6f  e formatted acco
13d10 72 64 69 6e 67 20 74 6f 20 0a 74 68 65 20 66 6f  rding to .the fo
13d20 72 6d 61 74 20 73 74 72 69 6e 67 20 73 70 65 63  rmat string spec
13d30 69 66 69 65 64 20 61 73 20 74 68 65 20 66 69 72  ified as the fir
13d40 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 5e 54 68  st argument..^Th
13d50 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  e format string 
13d60 73 75 70 70 6f 72 74 73 20 74 68 65 20 6d 6f 73  supports the mos
13d70 74 20 63 6f 6d 6d 6f 6e 20 73 75 62 73 74 69 74  t common substit
13d80 75 74 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20  utions found in 
13d90 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 6f 70 65  the .[http://ope
13da0 6e 67 72 6f 75 70 2e 6f 72 67 2f 6f 6e 6c 69 6e  ngroup.org/onlin
13db0 65 70 75 62 73 2f 30 30 37 39 30 38 37 39 39 2f  epubs/007908799/
13dc0 78 73 68 2f 73 74 72 66 74 69 6d 65 2e 68 74 6d  xsh/strftime.htm
13dd0 6c 20 7c 20 73 74 72 66 74 69 6d 65 28 29 20 66  l | strftime() f
13de0 75 6e 63 74 69 6f 6e 5d 0a 66 72 6f 6d 20 74 68  unction].from th
13df0 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62  e standard C lib
13e00 72 61 72 79 20 70 6c 75 73 20 74 77 6f 20 6e 65  rary plus two ne
13e10 77 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73 2c  w substitutions,
13e20 20 25 66 20 61 6e 64 20 25 4a 2e 0a 5e 28 54 68   %f and %J..^(Th
13e30 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 61  e following is a
13e40 20 63 6f 6d 70 6c 65 74 65 20 6c 69 73 74 20 6f   complete list o
13e50 66 20 76 61 6c 69 64 20 73 74 72 66 74 69 6d 65  f valid strftime
13e60 28 29 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73  () substitutions
13e70 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  :.</p>..<blockqu
13e80 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64  ote>.<table bord
13e90 65 72 3d 22 30 22 20 63 65 6c 6c 70 61 64 64 69  er="0" cellpaddi
13ea0 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70 61 63 69  ng="0" cellspaci
13eb0 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e  ng="0">.<tr><td>
13ec0 3c 74 64 20 77 69 64 74 68 3d 22 31 30 22 3e 3c  <td width="10"><
13ed0 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 3c 74  td></tr>..<tr><t
13ee0 64 3e 20 25 64 20 3c 74 64 3e 3c 74 64 3e 20 64  d> %d <td><td> d
13ef0 61 79 20 6f 66 20 6d 6f 6e 74 68 3a 20 30 30 0a  ay of month: 00.
13f00 3c 74 72 3e 3c 74 64 3e 20 25 66 20 3c 74 64 3e  <tr><td> %f <td>
13f10 3c 74 64 3e 20 66 72 61 63 74 69 6f 6e 61 6c 20  <td> fractional 
13f20 73 65 63 6f 6e 64 73 3a 20 53 53 2e 53 53 53 0a  seconds: SS.SSS.
13f30 3c 74 72 3e 3c 74 64 3e 20 25 48 20 3c 74 64 3e  <tr><td> %H <td>
13f40 3c 74 64 3e 20 68 6f 75 72 3a 20 30 30 2d 32 34  <td> hour: 00-24
13f50 20 0a 3c 74 72 3e 3c 74 64 3e 20 25 6a 20 3c 74   .<tr><td> %j <t
13f60 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 79 65  d><td> day of ye
13f70 61 72 3a 20 30 30 31 2d 33 36 36 0a 3c 74 72 3e  ar: 001-366.<tr>
13f80 3c 74 64 3e 20 25 4a 20 3c 74 64 3e 3c 74 64 3e  <td> %J <td><td>
13f90 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62   Julian day numb
13fa0 65 72 0a 3c 74 72 3e 3c 74 64 3e 20 25 6d 20 3c  er.<tr><td> %m <
13fb0 74 64 3e 3c 74 64 3e 20 6d 6f 6e 74 68 3a 20 30  td><td> month: 0
13fc0 31 2d 31 32 0a 3c 74 72 3e 3c 74 64 3e 20 25 4d  1-12.<tr><td> %M
13fd0 20 3c 74 64 3e 3c 74 64 3e 20 6d 69 6e 75 74 65   <td><td> minute
13fe0 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e  : 00-59.<tr><td>
13ff0 20 25 73 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63   %s <td><td> sec
14000 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30 2d  onds since 1970-
14010 30 31 2d 30 31 0a 3c 74 72 3e 3c 74 64 3e 20 25  01-01.<tr><td> %
14020 53 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e  S <td><td> secon
14030 64 73 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74  ds: 00-59.<tr><t
14040 64 3e 20 25 77 20 3c 74 64 3e 3c 74 64 3e 20 64  d> %w <td><td> d
14050 61 79 20 6f 66 20 77 65 65 6b 20 30 2d 36 20 77  ay of week 0-6 w
14060 69 74 68 20 73 75 6e 64 61 79 3d 3d 30 0a 3c 74  ith sunday==0.<t
14070 72 3e 3c 74 64 3e 20 25 57 20 3c 74 64 3e 3c 74  r><td> %W <td><t
14080 64 3e 20 77 65 65 6b 20 6f 66 20 79 65 61 72 3a  d> week of year:
14090 20 30 30 2d 35 33 0a 3c 74 72 3e 3c 74 64 3e 20   00-53.<tr><td> 
140a0 25 59 20 3c 74 64 3e 3c 74 64 3e 20 79 65 61 72  %Y <td><td> year
140b0 3a 20 30 30 30 30 2d 39 39 39 39 0a 3c 74 72 3e  : 0000-9999.<tr>
140c0 3c 74 64 3e 20 25 25 20 3c 74 64 3e 3c 74 64 3e  <td> %% <td><td>
140d0 20 25 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c   %.</table>.</bl
140e0 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e  ockquote>)^..<p>
140f0 0a 5e 28 4e 6f 74 69 63 65 20 74 68 61 74 20 61  .^(Notice that a
14100 6c 6c 20 6f 74 68 65 72 20 64 61 74 65 20 61 6e  ll other date an
14110 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  d time functions
14120 20 63 61 6e 20 62 65 20 65 78 70 72 65 73 73 65   can be expresse
14130 64 0a 69 6e 20 74 65 72 6d 73 20 6f 66 20 73 74  d.in terms of st
14140 72 66 74 69 6d 65 28 29 3a 0a 3c 2f 70 3e 0a 0a  rftime():.</p>..
14150 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61  <blockquote>.<ta
14160 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20 63  ble border="0" c
14170 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22 20 63  ellpadding="0" c
14180 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a  ellspacing="0">.
14190 3c 74 72 3e 3c 74 64 3e 3c 62 3e 46 75 6e 63 74  <tr><td><b>Funct
141a0 69 6f 6e 3c 2f 62 3e 3c 74 64 20 77 69 64 74 68  ion</b><td width
141b0 3d 22 33 30 22 3e 3c 74 64 3e 3c 62 3e 45 71 75  ="30"><td><b>Equ
141c0 69 76 61 6c 65 6e 74 20 73 74 72 66 74 69 6d 65  ivalent strftime
141d0 28 29 3c 2f 62 3e 0a 3c 74 72 3e 3c 74 64 3e 20  ()</b>.<tr><td> 
141e0 20 20 64 61 74 65 28 2e 2e 2e 29 20 20 20 20 20    date(...)     
141f0 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74   <td><td>  strft
14200 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 27 2c 20  ime('%Y-%m-%d', 
14210 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20  ...).<tr><td>   
14220 74 69 6d 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c  time(...)      <
14230 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d  td><td>  strftim
14240 65 28 27 25 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e  e('%H:%M:%S', ..
14250 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61  .).<tr><td>   da
14260 74 65 74 69 6d 65 28 2e 2e 2e 29 20 20 3c 74 64  tetime(...)  <td
14270 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28  ><td>  strftime(
14280 27 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a  '%Y-%m-%d %H:%M:
14290 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74  %S', ...).<tr><t
142a0 64 3e 20 20 20 6a 75 6c 69 61 6e 64 61 79 28 2e  d>   julianday(.
142b0 2e 2e 29 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74  ..) <td><td>  st
142c0 72 66 74 69 6d 65 28 27 25 4a 27 2c 20 2e 2e 2e  rftime('%J', ...
142d0 29 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f  ).</table>.</blo
142e0 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a  ckquote>)^..<p>.
142f0 54 68 65 20 6f 6e 6c 79 20 72 65 61 73 6f 6e 73  The only reasons
14300 20 66 6f 72 20 70 72 6f 76 69 64 69 6e 67 20 66   for providing f
14310 75 6e 63 74 69 6f 6e 73 20 6f 74 68 65 72 20 74  unctions other t
14320 68 61 6e 20 73 74 72 66 74 69 6d 65 28 29 20 69  han strftime() i
14330 73 0a 66 6f 72 20 63 6f 6e 76 65 6e 69 65 6e 63  s.for convenienc
14340 65 20 61 6e 64 20 66 6f 72 20 65 66 66 69 63 69  e and for effici
14350 65 6e 63 79 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e  ency..</p>..<h3>
14360 54 69 6d 65 20 53 74 72 69 6e 67 73 3c 2f 68 33  Time Strings</h3
14370 3e 0a 0a 3c 70 3e 5e 28 41 20 74 69 6d 65 20 73  >..<p>^(A time s
14380 74 72 69 6e 67 20 63 61 6e 20 62 65 20 69 6e 20  tring can be in 
14390 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  any of the follo
143a0 77 69 6e 67 20 66 6f 72 6d 61 74 73 3a 3c 2f 70  wing formats:</p
143b0 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c 69 3e  >..<ol>.<li> <i>
143c0 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 0a 3c  YYYY-MM-DD</i>.<
143d0 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44  li> <i>YYYY-MM-D
143e0 44 20 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e  D HH:MM</i>.<li>
143f0 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48   <i>YYYY-MM-DD H
14400 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e  H:MM:SS</i>.<li>
14410 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48   <i>YYYY-MM-DD H
14420 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a  H:MM:SS.SSS</i>.
14430 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
14440 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69  DD</i><b>T</b><i
14450 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20  >HH:MM</i>.<li> 
14460 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69  <i>YYYY-MM-DD</i
14470 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d  ><b>T</b><i>HH:M
14480 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  M:SS</i>.<li> <i
14490 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c  >YYYY-MM-DD</i><
144a0 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a  b>T</b><i>HH:MM:
144b0 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  SS.SSS</i>.<li> 
144c0 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69  <i>HH:MM</i>.<li
144d0 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69  > <i>HH:MM:SS</i
144e0 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a  >.<li> <i>HH:MM:
144f0 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  SS.SSS</i>.<li> 
14500 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69 3e 20  <b>now</b>.<li> 
14510 3c 69 3e 44 44 44 44 44 44 44 44 44 44 3c 2f 69  <i>DDDDDDDDDD</i
14520 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e  >.</ol>)^..<p>.^
14530 49 6e 20 66 6f 72 6d 61 74 73 20 35 20 74 68 72  In formats 5 thr
14540 6f 75 67 68 20 37 2c 20 74 68 65 20 22 54 22 20  ough 7, the "T" 
14550 69 73 20 61 20 6c 69 74 65 72 61 6c 20 63 68 61  is a literal cha
14560 72 61 63 74 65 72 20 73 65 70 61 72 61 74 69 6e  racter separatin
14570 67 20 0a 74 68 65 20 64 61 74 65 20 61 6e 64 20  g .the date and 
14580 74 68 65 20 74 69 6d 65 2c 20 61 73 20 72 65 71  the time, as req
14590 75 69 72 65 64 20 62 79 20 0a 5b 68 74 74 70 3a  uired by .[http:
145a0 2f 2f 77 77 77 2e 77 33 63 2e 6f 72 67 2f 54 52  //www.w3c.org/TR
145b0 2f 4e 4f 54 45 2d 64 61 74 65 74 69 6d 65 20 7c  /NOTE-datetime |
145c0 20 49 53 4f 2d 38 36 30 31 5d 2e 20 0a 5e 46 6f   ISO-8601]. .^Fo
145d0 72 6d 61 74 73 20 38 20 74 68 72 6f 75 67 68 20  rmats 8 through 
145e0 31 30 20 74 68 61 74 20 73 70 65 63 69 66 79 20  10 that specify 
145f0 6f 6e 6c 79 20 61 20 74 69 6d 65 20 61 73 73 75  only a time assu
14600 6d 65 20 61 20 64 61 74 65 20 6f 66 20 0a 32 30  me a date of .20
14610 30 30 2d 30 31 2d 30 31 2e 20 46 6f 72 6d 61 74  00-01-01. Format
14620 20 31 31 2c 20 74 68 65 20 73 74 72 69 6e 67 20   11, the string 
14630 27 6e 6f 77 27 2c 20 69 73 20 63 6f 6e 76 65 72  'now', is conver
14640 74 65 64 20 69 6e 74 6f 20 74 68 65 20 0a 63 75  ted into the .cu
14650 72 72 65 6e 74 20 64 61 74 65 20 61 6e 64 20 74  rrent date and t
14660 69 6d 65 20 61 73 20 6f 62 74 61 69 6e 65 64 20  ime as obtained 
14670 66 72 6f 6d 20 74 68 65 20 78 43 75 72 72 65 6e  from the xCurren
14680 74 54 69 6d 65 20 6d 65 74 68 6f 64 0a 6f 66 20  tTime method.of 
14690 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 76 66 73  the [sqlite3_vfs
146a0 5d 20 6f 62 6a 65 63 74 20 69 6e 20 75 73 65 2e  ] object in use.
146b0 0a 5e 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b  .^[http://en.wik
146c0 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f  ipedia.org/wiki/
146d0 43 6f 6f 72 64 69 6e 61 74 65 64 5f 55 6e 69 76  Coordinated_Univ
146e0 65 72 73 61 6c 5f 54 69 6d 65 20 7c 20 55 6e 69  ersal_Time | Uni
146f0 76 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74  versal Coordinat
14700 65 64 20 54 69 6d 65 20 28 55 54 43 29 5d 20 69  ed Time (UTC)] i
14710 73 20 75 73 65 64 2e 20 0a 5e 46 6f 72 6d 61 74  s used. .^Format
14720 20 31 32 20 69 73 20 74 68 65 20 0a 5b 68 74 74   12 is the .[htt
14730 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
14740 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e  .org/wiki/Julian
14750 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61  _day | Julian da
14760 79 20 6e 75 6d 62 65 72 5d 0a 65 78 70 72 65 73  y number].expres
14770 73 65 64 20 61 73 20 61 20 66 6c 6f 61 74 69 6e  sed as a floatin
14780 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 3c  g point value..<
14790 2f 70 3e 0a 0a 3c 68 33 3e 4d 6f 64 69 66 69 65  /p>..<h3>Modifie
147a0 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65  rs</h3>..<p>^The
147b0 20 74 69 6d 65 20 73 74 72 69 6e 67 20 63 61 6e   time string can
147c0 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   be followed by 
147d0 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64  zero or more mod
147e0 69 66 69 65 72 73 20 74 68 61 74 20 0a 61 6c 74  ifiers that .alt
147f0 65 72 20 74 68 65 20 64 61 74 65 20 61 6e 64 20  er the date and 
14800 74 69 6d 65 20 73 74 72 69 6e 67 2e 20 5e 45 61  time string. ^Ea
14810 63 68 20 6d 6f 64 69 66 69 65 72 0a 69 73 20 61  ch modifier.is a
14820 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 20   transformation 
14830 74 68 61 74 20 69 73 20 61 70 70 6c 69 65 64 20  that is applied 
14840 74 6f 20 74 68 65 20 74 69 6d 65 20 76 61 6c 75  to the time valu
14850 65 20 74 6f 20 69 74 73 20 6c 65 66 74 2e 0a 5e  e to its left..^
14860 4d 6f 64 69 66 69 65 72 73 20 61 72 65 20 61 70  Modifiers are ap
14870 70 6c 69 65 64 20 66 72 6f 6d 20 6c 65 66 74 20  plied from left 
14880 74 6f 20 72 69 67 68 74 3b 20 6f 72 64 65 72 20  to right; order 
14890 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 0a 5e 28  is important..^(
148a0 54 68 65 20 61 76 61 69 6c 61 62 6c 65 20 6d 6f  The available mo
148b0 64 69 66 69 65 72 73 20 61 72 65 20 61 73 20 66  difiers are as f
148c0 6f 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 6f 6c  ollows.</p>..<ol
148d0 3e 0a 3c 6c 69 3e 20 4e 4e 4e 20 64 61 79 73 0a  >.<li> NNN days.
148e0 3c 6c 69 3e 20 4e 4e 4e 20 68 6f 75 72 73 0a 3c  <li> NNN hours.<
148f0 6c 69 3e 20 4e 4e 4e 20 6d 69 6e 75 74 65 73 0a  li> NNN minutes.
14900 3c 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e 4e 20 73 65  <li> NNN.NNNN se
14910 63 6f 6e 64 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d  conds.<li> NNN m
14920 6f 6e 74 68 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 79  onths.<li> NNN y
14930 65 61 72 73 0a 3c 6c 69 3e 20 73 74 61 72 74 20  ears.<li> start 
14940 6f 66 20 6d 6f 6e 74 68 0a 3c 6c 69 3e 20 73 74  of month.<li> st
14950 61 72 74 20 6f 66 20 79 65 61 72 0a 3c 6c 69 3e  art of year.<li>
14960 20 73 74 61 72 74 20 6f 66 20 64 61 79 0a 3c 6c   start of day.<l
14970 69 3e 20 77 65 65 6b 64 61 79 20 4e 0a 3c 6c 69  i> weekday N.<li
14980 3e 20 75 6e 69 78 65 70 6f 63 68 0a 3c 6c 69 3e  > unixepoch.<li>
14990 20 6c 6f 63 61 6c 74 69 6d 65 0a 3c 6c 69 3e 20   localtime.<li> 
149a0 75 74 63 20 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70  utc .</ol>)^..<p
149b0 3e 5e 54 68 65 20 66 69 72 73 74 20 73 69 78 20  >^The first six 
149c0 6d 6f 64 69 66 69 65 72 73 20 28 31 20 74 68 72  modifiers (1 thr
149d0 6f 75 67 68 20 36 29 20 0a 73 69 6d 70 6c 79 20  ough 6) .simply 
149e0 61 64 64 20 74 68 65 20 73 70 65 63 69 66 69 65  add the specifie
149f0 64 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65  d amount of time
14a00 20 74 6f 20 74 68 65 20 64 61 74 65 20 61 6e 64   to the date and
14a10 20 74 69 6d 65 20 0a 73 70 65 63 69 66 69 65 64   time .specified
14a20 20 62 79 20 74 68 65 20 70 72 65 63 65 64 69 6e   by the precedin
14a30 67 20 74 69 6d 65 73 74 72 69 6e 67 20 61 6e 64  g timestring and
14a40 20 6d 6f 64 69 66 69 65 72 73 2e 0a 5e 4e 6f 74   modifiers..^Not
14a50 65 20 74 68 61 74 20 22 26 70 6c 75 73 6d 6e 3b  e that "&plusmn;
14a60 4e 4e 4e 20 6d 6f 6e 74 68 73 22 20 77 6f 72 6b  NNN months" work
14a70 73 20 62 79 20 72 65 6e 64 65 72 69 6e 67 20 74  s by rendering t
14a80 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 65  he original date
14a90 20 69 6e 74 6f 0a 74 68 65 20 59 59 59 59 2d 4d   into.the YYYY-M
14aa0 4d 2d 44 44 20 66 6f 72 6d 61 74 2c 20 61 64 64  M-DD format, add
14ab0 69 6e 67 20 74 68 65 20 26 70 6c 75 73 6d 6e 3b  ing the &plusmn;
14ac0 4e 4e 4e 20 74 6f 20 74 68 65 20 4d 4d 20 6d 6f  NNN to the MM mo
14ad0 6e 74 68 20 76 61 6c 75 65 2c 20 74 68 65 6e 0a  nth value, then.
14ae0 6e 6f 72 6d 61 6c 69 7a 69 6e 67 20 74 68 65 20  normalizing the 
14af0 72 65 73 75 6c 74 2e 20 20 5e 54 68 75 73 2c 20  result.  ^Thus, 
14b00 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  for example, the
14b10 20 64 61 74 61 20 32 30 30 31 2d 30 33 2d 33 31   data 2001-03-31
14b20 20 6d 6f 64 69 66 69 65 64 0a 62 79 20 27 2b 31   modified.by '+1
14b30 20 6d 6f 6e 74 68 27 20 69 6e 69 74 69 61 6c 6c   month' initiall
14b40 79 20 79 69 65 6c 64 73 20 32 30 30 31 2d 30 34  y yields 2001-04
14b50 2d 33 31 2c 20 62 75 74 20 41 70 72 69 6c 20 6f  -31, but April o
14b60 6e 6c 79 20 68 61 73 20 33 30 20 64 61 79 73 0a  nly has 30 days.
14b70 73 6f 20 74 68 65 20 64 61 74 65 20 69 73 20 6e  so the date is n
14b80 6f 72 6d 61 6c 69 7a 65 64 20 74 6f 20 32 30 30  ormalized to 200
14b90 31 2d 30 35 2d 30 31 2e 20 20 5e 41 20 73 69 6d  1-05-01.  ^A sim
14ba0 69 6c 61 72 20 65 66 66 65 63 74 20 6f 63 63 75  ilar effect occu
14bb0 72 73 20 77 68 65 6e 0a 74 68 65 20 6f 72 69 67  rs when.the orig
14bc0 69 6e 61 6c 20 64 61 74 65 20 69 73 20 46 65 62  inal date is Feb
14bd0 72 75 61 72 79 20 32 39 20 6f 66 20 61 20 6c 65  ruary 29 of a le
14be0 61 70 79 65 61 72 20 61 6e 64 20 74 68 65 20 6d  apyear and the m
14bf0 6f 64 69 66 69 65 72 20 69 73 0a 26 70 6c 75 73  odifier is.&plus
14c00 6d 6e 3b 4e 20 79 65 61 72 73 20 77 68 65 72 65  mn;N years where
14c10 20 4e 20 69 73 20 6e 6f 74 20 61 20 6d 75 6c 74   N is not a mult
14c20 69 70 6c 65 20 6f 66 20 66 6f 75 72 2e 3c 2f 70  iple of four.</p
14c30 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 73 74 61 72  >..<p>^The "star
14c40 74 20 6f 66 22 20 6d 6f 64 69 66 69 65 72 73 20  t of" modifiers 
14c50 28 37 20 74 68 72 6f 75 67 68 20 39 29 20 73 68  (7 through 9) sh
14c60 69 66 74 20 74 68 65 20 64 61 74 65 20 62 61 63  ift the date bac
14c70 6b 77 61 72 64 73 20 0a 74 6f 20 74 68 65 20 62  kwards .to the b
14c80 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
14c90 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2c 20 79  current month, y
14ca0 65 61 72 20 6f 72 20 64 61 79 2e 3c 2f 70 3e 0a  ear or day.</p>.
14cb0 0a 3c 70 3e 5e 54 68 65 20 22 77 65 65 6b 64 61  .<p>^The "weekda
14cc0 79 22 20 6d 6f 64 69 66 69 65 72 20 61 64 76 61  y" modifier adva
14cd0 6e 63 65 73 20 74 68 65 20 64 61 74 65 20 66 6f  nces the date fo
14ce0 72 77 61 72 64 20 74 6f 20 74 68 65 20 6e 65 78  rward to the nex
14cf0 74 20 64 61 74 65 20 0a 77 68 65 72 65 20 74 68  t date .where th
14d00 65 20 77 65 65 6b 64 61 79 20 6e 75 6d 62 65 72  e weekday number
14d10 20 69 73 20 4e 2e 20 53 75 6e 64 61 79 20 69 73   is N. Sunday is
14d20 20 30 2c 20 4d 6f 6e 64 61 79 20 69 73 20 31 2c   0, Monday is 1,
14d30 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 3c 2f   and so forth.</
14d40 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 75 6e 69  p>..<p>^The "uni
14d50 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72  xepoch" modifier
14d60 20 28 31 31 29 20 6f 6e 6c 79 20 77 6f 72 6b 73   (11) only works
14d70 20 69 66 20 69 74 20 69 6d 6d 65 64 69 61 74 65   if it immediate
14d80 6c 79 20 66 6f 6c 6c 6f 77 73 20 0a 61 20 74 69  ly follows .a ti
14d90 6d 65 73 74 72 69 6e 67 20 69 6e 20 74 68 65 20  mestring in the 
14da0 44 44 44 44 44 44 44 44 44 44 20 66 6f 72 6d 61  DDDDDDDDDD forma
14db0 74 2e 20 0a 5e 54 68 69 73 20 6d 6f 64 69 66 69  t. .^This modifi
14dc0 65 72 20 63 61 75 73 65 73 20 74 68 65 20 44 44  er causes the DD
14dd0 44 44 44 44 44 44 44 44 20 74 6f 20 62 65 20 69  DDDDDDDD to be i
14de0 6e 74 65 72 70 72 65 74 65 64 20 6e 6f 74 20 0a  nterpreted not .
14df0 61 73 20 61 20 4a 75 6c 69 61 6e 20 64 61 79 20  as a Julian day 
14e00 6e 75 6d 62 65 72 20 61 73 20 69 74 20 6e 6f 72  number as it nor
14e10 6d 61 6c 6c 79 20 77 6f 75 6c 64 20 62 65 2c 20  mally would be, 
14e20 62 75 74 20 61 73 0a 5b 68 74 74 70 3a 2f 2f 65  but as.[http://e
14e30 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
14e40 77 69 6b 69 2f 55 6e 69 78 5f 74 69 6d 65 20 7c  wiki/Unix_time |
14e50 20 55 6e 69 78 20 54 69 6d 65 5d 20 2d 20 74 68   Unix Time] - th
14e60 65 20 0a 6e 75 6d 62 65 72 20 6f 66 20 73 65 63  e .number of sec
14e70 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30 2e  onds since 1970.
14e80 20 20 49 66 20 74 68 65 20 22 75 6e 69 78 65 70    If the "unixep
14e90 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 64 6f  och" modifier do
14ea0 65 73 20 6e 6f 74 0a 66 6f 6c 6c 6f 77 20 61 20  es not.follow a 
14eb0 74 69 6d 65 73 74 72 69 6e 67 20 6f 66 20 74 68  timestring of th
14ec0 65 20 66 6f 72 6d 20 44 44 44 44 44 44 44 44 44  e form DDDDDDDDD
14ed0 44 20 77 68 69 63 68 20 65 78 70 72 65 73 73 65  D which expresse
14ee0 73 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20  s the number.of 
14ef0 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39  seconds since 19
14f00 37 30 20 6f 72 20 69 66 20 6f 74 68 65 72 20 6d  70 or if other m
14f10 6f 64 69 66 69 65 72 73 0a 73 65 70 61 72 61 74  odifiers.separat
14f20 65 20 74 68 65 20 22 75 6e 69 78 65 70 6f 63 68  e the "unixepoch
14f30 22 20 6d 6f 64 69 66 69 65 72 20 66 72 6f 6d 20  " modifier from 
14f40 70 72 69 6f 72 20 44 44 44 44 44 44 44 44 44 44  prior DDDDDDDDDD
14f50 20 74 68 65 6e 20 74 68 65 0a 62 65 68 61 76 69   then the.behavi
14f60 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  or is undefined.
14f70 0a 44 75 65 20 74 6f 20 70 72 65 63 69 73 69 6f  .Due to precisio
14f80 6e 20 6c 69 6d 69 74 61 74 69 6f 6e 73 20 69 6d  n limitations im
14f90 70 6f 73 65 64 20 62 79 20 74 68 65 20 69 6d 70  posed by the imp
14fa0 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 75 73 65  lementations use
14fb0 0a 6f 66 20 36 34 2d 62 69 74 20 69 6e 74 65 67  .of 64-bit integ
14fc0 65 72 73 2c 20 74 68 65 20 22 75 6e 69 78 65 70  ers, the "unixep
14fd0 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 6f 6e  och" modifier on
14fe0 6c 79 20 77 6f 72 6b 73 20 66 6f 72 0a 64 61 74  ly works for.dat
14ff0 65 73 20 62 65 74 77 65 65 6e 20 30 30 30 30 2d  es between 0000-
15000 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 20 61  01-01 00:00:00 a
15010 6e 64 20 35 33 35 32 2d 31 31 2d 30 31 20 31 30  nd 5352-11-01 10
15020 3a 35 32 3a 34 37 20 28 75 6e 69 78 20 74 69 6d  :52:47 (unix tim
15030 65 73 0a 6f 66 20 2d 36 32 31 36 37 32 31 39 32  es.of -621672192
15040 30 30 20 74 68 72 6f 75 67 68 20 31 30 36 37 35  00 through 10675
15050 31 39 39 31 36 37 29 2e 3c 2f 70 3e 0a 0a 3c 70  199167).</p>..<p
15060 3e 5e 54 68 65 20 22 6c 6f 63 61 6c 74 69 6d 65  >^The "localtime
15070 22 20 6d 6f 64 69 66 69 65 72 20 28 31 32 29 20  " modifier (12) 
15080 61 73 73 75 6d 65 73 20 74 68 65 20 74 69 6d 65  assumes the time
15090 20 73 74 72 69 6e 67 20 74 6f 20 69 74 73 20 6c   string to its l
150a0 65 66 74 20 69 73 20 69 6e 0a 55 6e 69 76 65 72  eft is in.Univer
150b0 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64 20  sal Coordinated 
150c0 54 69 6d 65 20 28 55 54 43 29 20 61 6e 64 20 61  Time (UTC) and a
150d0 64 6a 75 73 74 73 20 74 68 65 20 74 69 6d 65 0a  djusts the time.
150e0 73 74 72 69 6e 67 20 73 6f 20 74 68 61 74 20 69  string so that i
150f0 74 20 64 69 73 70 6c 61 79 73 20 6c 6f 63 61 6c  t displays local
15100 74 69 6d 65 2e 20 20 49 66 20 22 6c 6f 63 61 6c  time.  If "local
15110 74 69 6d 65 22 0a 66 6f 6c 6c 6f 77 73 20 61 20  time".follows a 
15120 74 69 6d 65 20 74 68 61 74 20 69 73 20 6e 6f 74  time that is not
15130 20 55 54 43 2c 20 74 68 65 6e 20 74 68 65 20 62   UTC, then the b
15140 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66  ehavior is undef
15150 69 6e 65 64 2e 0a 5e 28 54 68 65 20 22 75 74 63  ined..^(The "utc
15160 22 20 69 73 20 74 68 65 20 6f 70 70 6f 73 69 74  " is the opposit
15170 65 20 6f 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22  e of "localtime"
15180 2e 20 20 22 75 74 63 22 20 61 73 73 75 6d 65 73  .  "utc" assumes
15190 20 74 68 61 74 20 74 68 65 20 73 74 72 69 6e 67   that the string
151a0 0a 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73 20  .to its left is 
151b0 69 6e 20 74 68 65 20 6c 6f 63 61 6c 20 74 69 6d  in the local tim
151c0 65 7a 6f 6e 65 20 61 6e 64 20 61 64 6a 75 73 74  ezone and adjust
151d0 73 20 74 68 61 74 20 73 74 72 69 6e 67 20 74 6f  s that string to
151e0 20 62 65 20 69 6e 20 55 54 43 2e 29 5e 0a 49 66   be in UTC.)^.If
151f0 20 74 68 65 20 70 72 69 6f 72 20 73 74 72 69 6e   the prior strin
15200 67 20 69 73 20 6e 6f 74 20 69 6e 20 6c 6f 63 61  g is not in loca
15210 6c 74 69 6d 65 2c 20 74 68 65 6e 20 74 68 65 20  ltime, then the 
15220 72 65 73 75 6c 74 20 6f 66 20 22 75 74 63 22 20  result of "utc" 
15230 69 73 0a 75 6e 64 65 66 69 6e 65 64 2e 3c 2f 70  is.undefined.</p
15240 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c 65 73 3c  >..<h3>Examples<
15250 2f 68 33 3e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75  /h3>..^(<p>Compu
15260 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 64  te the current d
15270 61 74 65 2e 3c 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  ate.<p>..<blockq
15280 75 6f 74 65 3e 53 45 4c 45 43 54 20 64 61 74 65  uote>SELECT date
15290 28 27 6e 6f 77 27 29 3b 3c 2f 62 6c 6f 63 6b 71  ('now');</blockq
152a0 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
152b0 6d 70 75 74 65 20 74 68 65 20 6c 61 73 74 20 64  mpute the last d
152c0 61 79 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  ay of the curren
152d0 74 20 6d 6f 6e 74 68 2e 3c 2f 70 3e 0a 0a 3c 62  t month.</p>..<b
152e0 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45 43 54  lockquote>SELECT
152f0 20 64 61 74 65 28 27 6e 6f 77 27 2c 27 73 74 61   date('now','sta
15300 72 74 20 6f 66 20 6d 6f 6e 74 68 27 2c 27 2b 31  rt of month','+1
15310 20 6d 6f 6e 74 68 27 2c 27 2d 31 20 64 61 79 27   month','-1 day'
15320 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  );.</blockquote>
15330 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65  )^..^(<p>Compute
15340 20 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 69   the date and ti
15350 6d 65 20 67 69 76 65 6e 20 61 20 75 6e 69 78 20  me given a unix 
15360 74 69 6d 65 73 74 61 6d 70 20 31 30 39 32 39 34  timestamp 109294
15370 31 34 36 36 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  1466.</p>..<bloc
15380 6b 71 75 6f 74 65 3e 0a 20 20 20 20 53 45 4c 45  kquote>.    SELE
15390 43 54 20 64 61 74 65 74 69 6d 65 28 31 30 39 32  CT datetime(1092
153a0 39 34 31 34 36 36 2c 20 27 75 6e 69 78 65 70 6f  941466, 'unixepo
153b0 63 68 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  ch');.</blockquo
153c0 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70  te>)^..^(<p>Comp
153d0 75 74 65 20 74 68 65 20 64 61 74 65 20 61 6e 64  ute the date and
153e0 20 74 69 6d 65 20 67 69 76 65 6e 20 61 20 75 6e   time given a un
153f0 69 78 20 74 69 6d 65 73 74 61 6d 70 20 31 30 39  ix timestamp 109
15400 32 39 34 31 34 36 36 2c 20 61 6e 64 20 0a 63 6f  2941466, and .co
15410 6d 70 65 6e 73 61 74 65 20 66 6f 72 20 79 6f 75  mpensate for you
15420 72 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65  r local timezone
15430 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
15440 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 64 61 74  te>.  SELECT dat
15450 65 74 69 6d 65 28 31 30 39 32 39 34 31 34 36 36  etime(1092941466
15460 2c 20 27 75 6e 69 78 65 70 6f 63 68 27 2c 20 27  , 'unixepoch', '
15470 6c 6f 63 61 6c 74 69 6d 65 27 29 3b 0a 3c 2f 62  localtime');.</b
15480 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28  lockquote>)^..^(
15490 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 63  <p>Compute the c
154a0 75 72 72 65 6e 74 20 75 6e 69 78 20 74 69 6d 65  urrent unix time
154b0 73 74 61 6d 70 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f  stamp.</p>..<blo
154c0 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43  ckquote>.  SELEC
154d0 54 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c  T strftime('%s',
154e0 27 6e 6f 77 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  'now');.</blockq
154f0 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
15500 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72  mpute the number
15510 20 6f 66 20 64 61 79 73 20 73 69 6e 63 65 20 74   of days since t
15520 68 65 20 73 69 67 6e 69 6e 67 20 6f 66 20 74 68  he signing of th
15530 65 20 55 53 20 44 65 63 6c 61 72 61 74 69 6f 6e  e US Declaration
15540 0a 6f 66 20 49 6e 64 65 70 65 6e 64 65 6e 74 2e  .of Independent.
15550 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
15560 65 3e 0a 20 20 53 45 4c 45 43 54 20 6a 75 6c 69  e>.  SELECT juli
15570 61 6e 64 61 79 28 27 6e 6f 77 27 29 20 2d 20 6a  anday('now') - j
15580 75 6c 69 61 6e 64 61 79 28 27 31 37 37 36 2d 30  ulianday('1776-0
15590 37 2d 30 34 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  7-04');.</blockq
155a0 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
155b0 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72  mpute the number
155c0 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63   of seconds sinc
155d0 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 6d  e a particular m
155e0 6f 6d 65 6e 74 20 69 6e 20 32 30 30 34 3a 3c 2f  oment in 2004:</
155f0 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
15600 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66 74 69  .  SELECT strfti
15610 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 20 2d  me('%s','now') -
15620 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27   strftime('%s','
15630 32 30 30 34 2d 30 31 2d 30 31 20 30 32 3a 33 34  2004-01-01 02:34
15640 3a 35 36 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  :56');.</blockqu
15650 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 0a 43 6f  ote>)^..^(<p>.Co
15660 6d 70 75 74 65 20 74 68 65 20 64 61 74 65 20 6f  mpute the date o
15670 66 20 74 68 65 20 66 69 72 73 74 20 54 75 65 73  f the first Tues
15680 64 61 79 20 69 6e 20 4f 63 74 6f 62 65 72 0a 66  day in October.f
15690 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 79  or the current y
156a0 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  ear..</p>..<bloc
156b0 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54  kquote>.  SELECT
156c0 20 64 61 74 65 28 27 6e 6f 77 27 2c 27 73 74 61   date('now','sta
156d0 72 74 20 6f 66 20 79 65 61 72 27 2c 27 2b 39 20  rt of year','+9 
156e0 6d 6f 6e 74 68 73 27 2c 27 77 65 65 6b 64 61 79  months','weekday
156f0 20 32 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f   2');.</blockquo
15700 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70  te>)^..^(<p>Comp
15710 75 74 65 20 74 68 65 20 74 69 6d 65 20 73 69 6e  ute the time sin
15720 63 65 20 74 68 65 20 75 6e 69 78 20 65 70 6f 63  ce the unix epoc
15730 68 20 69 6e 20 73 65 63 6f 6e 64 73 20 0a 28 6c  h in seconds .(l
15740 69 6b 65 20 73 74 72 66 74 69 6d 65 28 27 25 73  ike strftime('%s
15750 27 2c 27 6e 6f 77 27 29 20 65 78 63 65 70 74 20  ','now') except 
15760 69 6e 63 6c 75 64 65 73 20 66 72 61 63 74 69 6f  includes fractio
15770 6e 61 6c 20 70 61 72 74 29 3a 3c 2f 70 3e 0a 0a  nal part):</p>..
15780 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
15790 45 4c 45 43 54 20 28 6a 75 6c 69 61 6e 64 61 79  ELECT (julianday
157a0 28 27 6e 6f 77 27 29 20 2d 20 32 34 34 30 35 38  ('now') - 244058
157b0 37 2e 35 29 2a 38 36 34 30 30 2e 30 3b 0a 3c 2f  7.5)*86400.0;.</
157c0 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
157d0 68 33 3e 43 61 76 65 61 74 73 20 41 6e 64 20 42  h3>Caveats And B
157e0 75 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  ugs</h3>..<p>The
157f0 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20   computation of 
15800 6c 6f 63 61 6c 20 74 69 6d 65 20 64 65 70 65 6e  local time depen
15810 64 73 20 68 65 61 76 69 6c 79 20 6f 6e 20 74 68  ds heavily on th
15820 65 20 77 68 69 6d 20 0a 6f 66 20 70 6f 6c 69 74  e whim .of polit
15830 69 63 69 61 6e 73 20 61 6e 64 20 69 73 20 74 68  icians and is th
15840 75 73 20 64 69 66 66 69 63 75 6c 74 20 74 6f 20  us difficult to 
15850 67 65 74 20 63 6f 72 72 65 63 74 20 66 6f 72 20  get correct for 
15860 0a 61 6c 6c 20 6c 6f 63 61 6c 65 73 2e 20 5e 49  .all locales. ^I
15870 6e 20 74 68 69 73 20 69 6d 70 6c 65 6d 65 6e 74  n this implement
15880 61 74 69 6f 6e 2c 20 74 68 65 20 73 74 61 6e 64  ation, the stand
15890 61 72 64 20 43 20 6c 69 62 72 61 72 79 20 0a 66  ard C library .f
158a0 75 6e 63 74 69 6f 6e 20 6c 6f 63 61 6c 74 69 6d  unction localtim
158b0 65 5f 72 28 29 20 69 73 20 75 73 65 64 20 74 6f  e_r() is used to
158c0 20 61 73 73 69 73 74 20 69 6e 20 74 68 65 20 63   assist in the c
158d0 61 6c 63 75 6c 61 74 69 6f 6e 20 6f 66 20 0a 6c  alculation of .l
158e0 6f 63 61 6c 20 74 69 6d 65 2e 20 20 5e 28 54 68  ocal time.  ^(Th
158f0 65 20 0a 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29  e .localtime_r()
15900 20 43 20 66 75 6e 63 74 69 6f 6e 20 6e 6f 72 6d   C function norm
15910 61 6c 6c 79 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  ally only works 
15920 66 6f 72 20 79 65 61 72 73 0a 62 65 74 77 65 65  for years.betwee
15930 6e 20 31 39 37 30 20 61 6e 64 20 32 30 33 37 2e  n 1970 and 2037.
15940 20 46 6f 72 20 64 61 74 65 73 20 6f 75 74 73 69   For dates outsi
15950 64 65 20 74 68 69 73 20 72 61 6e 67 65 2c 20 53  de this range, S
15960 51 4c 69 74 65 20 0a 61 74 74 65 6d 70 74 73 20  QLite .attempts 
15970 74 6f 20 6d 61 70 20 74 68 65 20 79 65 61 72 20  to map the year 
15980 69 6e 74 6f 20 61 6e 20 65 71 75 69 76 61 6c 65  into an equivale
15990 6e 74 20 79 65 61 72 20 77 69 74 68 69 6e 20 0a  nt year within .
159a0 74 68 69 73 20 72 61 6e 67 65 2c 20 64 6f 20 74  this range, do t
159b0 68 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e 2c 20  he calculation, 
159c0 74 68 65 6e 20 6d 61 70 20 74 68 65 20 79 65 61  then map the yea
159d0 72 20 62 61 63 6b 2e 29 5e 3c 2f 70 3e 0a 0a 0a  r back.)^</p>...
159e0 3c 70 3e 5e 28 54 68 65 73 65 20 66 75 6e 63 74  <p>^(These funct
159f0 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66  ions only work f
15a00 6f 72 20 64 61 74 65 73 20 62 65 74 77 65 65 6e  or dates between
15a10 20 30 30 30 30 2d 30 31 2d 30 31 20 30 30 3a 30   0000-01-01 00:0
15a20 30 3a 30 30 0a 61 6e 64 20 39 39 39 39 2d 31 32  0:00.and 9999-12
15a30 2d 33 31 20 32 33 3a 35 39 3a 35 39 20 28 6a 75  -31 23:59:59 (ju
15a40 6c 69 64 61 6e 20 64 61 79 20 6e 75 6d 62 65 72  lidan day number
15a50 73 20 31 37 32 31 30 35 39 2e 35 20 74 68 72 6f  s 1721059.5 thro
15a60 75 67 68 20 35 33 37 33 34 38 34 2e 35 29 2e 29  ugh 5373484.5).)
15a70 5e 0a 46 6f 72 20 64 61 74 65 73 20 6f 75 74 73  ^.For dates outs
15a80 69 64 65 20 74 68 61 74 20 72 61 6e 67 65 2c 20  ide that range, 
15a90 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
15aa0 68 65 73 65 0a 66 75 6e 63 74 69 6f 6e 73 20 61  hese.functions a
15ab0 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 3c 2f 70  re undefined.</p
15ac0 3e 0a 0a 3c 70 3e 4e 6f 6e 2d 56 69 73 74 61 20  >..<p>Non-Vista 
15ad0 57 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f 72 6d  Windows platform
15ae0 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 20 6f  s only support o
15af0 6e 65 20 73 65 74 20 6f 66 20 44 53 54 20 72 75  ne set of DST ru
15b00 6c 65 73 2e 20 0a 56 69 73 74 61 20 6f 6e 6c 79  les. .Vista only
15b10 20 73 75 70 70 6f 72 74 73 20 74 77 6f 2e 20 54   supports two. T
15b20 68 65 72 65 66 6f 72 65 2c 20 6f 6e 20 74 68 65  herefore, on the
15b30 73 65 20 70 6c 61 74 66 6f 72 6d 73 2c 20 0a 68  se platforms, .h
15b40 69 73 74 6f 72 69 63 61 6c 20 44 53 54 20 63 61  istorical DST ca
15b50 6c 63 75 6c 61 74 69 6f 6e 73 20 77 69 6c 6c 20  lculations will 
15b60 62 65 20 69 6e 63 6f 72 72 65 63 74 2e 20 0a 46  be incorrect. .F
15b70 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 20 74  or example, in t
15b80 68 65 20 55 53 2c 20 69 6e 20 32 30 30 37 20 74  he US, in 2007 t
15b90 68 65 20 44 53 54 20 72 75 6c 65 73 20 63 68 61  he DST rules cha
15ba0 6e 67 65 64 2e 20 0a 4e 6f 6e 2d 56 69 73 74 61  nged. .Non-Vista
15bb0 20 57 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f 72   Windows platfor
15bc0 6d 73 20 61 70 70 6c 79 20 74 68 65 20 6e 65 77  ms apply the new
15bd0 20 32 30 30 37 20 44 53 54 20 72 75 6c 65 73 20   2007 DST rules 
15be0 0a 74 6f 20 61 6c 6c 20 70 72 65 76 69 6f 75 73  .to all previous
15bf0 20 79 65 61 72 73 20 61 73 20 77 65 6c 6c 2e 20   years as well. 
15c00 56 69 73 74 61 20 64 6f 65 73 20 73 6f 6d 65 77  Vista does somew
15c10 68 61 74 20 62 65 74 74 65 72 0a 67 65 74 74 69  hat better.getti
15c20 6e 67 20 72 65 73 75 6c 74 73 20 63 6f 72 72 65  ng results corre
15c30 63 74 20 62 61 63 6b 20 74 6f 20 31 39 38 36 2c  ct back to 1986,
15c40 20 77 68 65 6e 20 74 68 65 20 72 75 6c 65 73 20   when the rules 
15c50 77 65 72 65 20 61 6c 73 6f 20 63 68 61 6e 67 65  were also change
15c60 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6c 6c 20 69  d.</p>..<p>All i
15c70 6e 74 65 72 6e 61 6c 20 63 6f 6d 70 75 74 61 74  nternal computat
15c80 69 6f 6e 73 20 61 73 73 75 6d 65 20 74 68 65 20  ions assume the 
15c90 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69  .[http://en.wiki
15ca0 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 47  pedia.org/wiki/G
15cb0 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e 64 61  regorian_calenda
15cc0 72 20 7c 20 47 72 65 67 6f 72 69 61 6e 20 63 61  r | Gregorian ca
15cd0 6c 65 6e 64 61 72 5d 0a 73 79 73 74 65 6d 2e 20  lendar].system. 
15ce0 20 49 74 20 69 73 20 61 6c 73 6f 20 61 73 73 75   It is also assu
15cf0 6d 65 64 20 74 68 61 74 20 65 76 65 72 79 0a 64  med that every.d
15d00 61 79 20 69 73 20 65 78 61 63 74 6c 79 20 38 36  ay is exactly 86
15d10 34 30 30 20 73 65 63 6f 6e 64 73 20 69 6e 20 64  400 seconds in d
15d20 75 72 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74  uration.</p>..<t
15d30 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
15d40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15d50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15d60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15d70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15d80 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41 67 67 72  ##.Section {Aggr
15d90 65 67 61 74 65 20 46 75 6e 63 74 69 6f 6e 73 7d  egate Functions}
15da0 20 61 67 67 66 75 6e 63 20 7b 2a 61 67 67 66 75   aggfunc {*aggfu
15db0 6e 63 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a  nc}.</tcl>..<p>.
15dc0 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75  The aggregate fu
15dd0 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e 20 62 65  nctions shown be
15de0 6c 6f 77 20 61 72 65 20 61 76 61 69 6c 61 62 6c  low are availabl
15df0 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 41  e by default.  A
15e00 64 64 69 74 69 6f 6e 61 6c 0a 61 67 67 72 65 67  dditional.aggreg
15e10 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 77 72  ate functions wr
15e20 69 74 74 65 6e 20 69 6e 20 43 20 6d 61 79 20 62  itten in C may b
15e30 65 20 61 64 64 65 64 20 75 73 69 6e 67 20 74 68  e added using th
15e40 65 20 0a 5b 73 71 6c 69 74 65 33 5f 63 72 65 61  e .[sqlite3_crea
15e50 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 3c 2f  te_function()]</
15e60 61 3e 0a 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 70 3e  a>.API.</p>..<p>
15e70 0a 5e 49 6e 20 61 6e 79 20 61 67 67 72 65 67 61  .^In any aggrega
15e80 74 65 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74  te function that
15e90 20 74 61 6b 65 73 20 61 20 73 69 6e 67 6c 65 20   takes a single 
15ea0 61 72 67 75 6d 65 6e 74 2c 20 74 68 61 74 20 61  argument, that a
15eb0 72 67 75 6d 65 6e 74 0a 63 61 6e 20 62 65 20 70  rgument.can be p
15ec0 72 65 63 65 64 65 64 20 62 79 20 74 68 65 20 6b  receded by the k
15ed0 65 79 77 6f 72 64 20 44 49 53 54 49 4e 43 54 2e  eyword DISTINCT.
15ee0 20 20 5e 49 6e 20 73 75 63 68 20 63 61 73 65 73    ^In such cases
15ef0 2c 20 64 75 70 6c 69 63 61 74 65 0a 65 6c 65 6d  , duplicate.elem
15f00 65 6e 74 73 20 61 72 65 20 66 69 6c 74 65 72 65  ents are filtere
15f10 64 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20 70  d before being p
15f20 61 73 73 65 64 20 69 6e 74 6f 20 74 68 65 20 61  assed into the a
15f30 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
15f40 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c  n..^For example,
15f50 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 22 63   the function "c
15f60 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 58 29  ount(distinct X)
15f70 22 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 74 68  " will return th
15f80 65 20 6e 75 6d 62 65 72 0a 6f 66 20 64 69 73 74  e number.of dist
15f90 69 6e 63 74 20 76 61 6c 75 65 73 20 6f 66 20 63  inct values of c
15fa0 6f 6c 75 6d 6e 20 58 20 69 6e 73 74 65 61 64 20  olumn X instead 
15fb0 6f 66 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  of the total num
15fc0 62 65 72 20 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c 0a  ber of non-null.
15fd0 76 61 6c 75 65 73 20 69 6e 20 63 6f 6c 75 6d 6e  values in column
15fe0 20 58 2e 0a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65   X..</p>..<table
15ff0 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61   border=0 cellpa
16000 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c 3e 0a  dding=10>.<tcl>.
16010 66 75 6e 63 64 65 66 20 7b 61 76 67 28 58 29 7d  funcdef {avg(X)}
16020 20 7b 2a 61 76 67 20 7b 61 76 67 28 29 20 61 67   {*avg {avg() ag
16030 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
16040 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 61 76 67 28  }} {.  ^The avg(
16050 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74  ) function.  ret
16060 75 72 6e 73 20 74 68 65 20 61 76 65 72 61 67 65  urns the average
16070 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 6e 6f   value of all no
16080 6e 2d 4e 55 4c 4c 20 3c 69 3e 58 3c 2f 69 3e 20  n-NULL <i>X</i> 
16090 77 69 74 68 69 6e 20 61 0a 20 20 67 72 6f 75 70  within a.  group
160a0 2e 20 20 5e 53 74 72 69 6e 67 20 61 6e 64 20 42  .  ^String and B
160b0 4c 4f 42 20 76 61 6c 75 65 73 20 74 68 61 74 20  LOB values that 
160c0 64 6f 20 6e 6f 74 20 6c 6f 6f 6b 20 6c 69 6b 65  do not look like
160d0 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 20 20 69   numbers are.  i
160e0 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 30 2e  nterpreted as 0.
160f0 0a 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  .  ^The result o
16100 66 20 61 76 67 28 29 20 69 73 20 61 6c 77 61 79  f avg() is alway
16110 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  s a floating poi
16120 6e 74 20 76 61 6c 75 65 20 61 73 20 6c 6f 6e 67  nt value as long
16130 20 61 73 0a 20 20 61 74 20 74 68 65 72 65 20 69   as.  at there i
16140 73 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6e  s at least one n
16150 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 65 76  on-NULL input ev
16160 65 6e 20 69 66 20 61 6c 6c 0a 20 20 69 6e 70 75  en if all.  inpu
16170 74 73 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e  ts are integers.
16180 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66    ^The result of
16190 20 61 76 67 28 29 20 69 73 20 4e 55 4c 4c 20 69   avg() is NULL i
161a0 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 20 20  f and only if.  
161b0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e  there are no non
161c0 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 2e 20 20 0a  -NULL inputs.  .
161d0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 6f 75 6e  }..funcdef {coun
161e0 74 28 58 29 20 63 6f 75 6e 74 28 2a 29 7d 20 7b  t(X) count(*)} {
161f0 2a 63 6f 75 6e 74 20 7b 63 6f 75 6e 74 28 29 20  *count {count() 
16200 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
16210 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 63 6f  on}} {.  ^The co
16220 75 6e 74 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  unt(X) function 
16230 72 65 74 75 72 6e 73 0a 20 20 61 20 63 6f 75 6e  returns.  a coun
16240 74 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20  t of the number 
16250 6f 66 20 74 69 6d 65 73 0a 20 20 74 68 61 74 20  of times.  that 
16260 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 6e 6f 74 20  <i>X</i> is not 
16270 4e 55 4c 4c 20 69 6e 20 61 20 67 72 6f 75 70 2e  NULL in a group.
16280 20 20 5e 54 68 65 20 63 6f 75 6e 74 28 2a 29 20    ^The count(*) 
16290 66 75 6e 63 74 69 6f 6e 0a 20 20 28 77 69 74 68  function.  (with
162a0 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 29 20 72   no arguments) r
162b0 65 74 75 72 6e 73 20 74 68 65 20 74 6f 74 61 6c  eturns the total
162c0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
162d0 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a  in the group..}.
162e0 0a 66 75 6e 63 64 65 66 20 7b 67 72 6f 75 70 5f  .funcdef {group_
162f0 63 6f 6e 63 61 74 28 58 29 20 67 72 6f 75 70 5f  concat(X) group_
16300 63 6f 6e 63 61 74 28 58 2c 59 29 7d 20 7b 0a 20  concat(X,Y)} {. 
16310 20 2a 67 72 6f 75 70 5f 63 6f 6e 63 61 74 20 7b   *group_concat {
16320 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 29 20 61  group_concat() a
16330 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
16340 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68 65 20 67 72  n}.} {.  ^The gr
16350 6f 75 70 5f 63 6f 6e 63 61 74 28 29 20 66 75 6e  oup_concat() fun
16360 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 0a 20 20  ction returns.  
16370 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 20 69  a string which i
16380 73 20 74 68 65 20 63 6f 6e 63 61 74 65 6e 61 74  s the concatenat
16390 69 6f 6e 20 6f 66 0a 20 20 61 6c 6c 20 6e 6f 6e  ion of.  all non
163a0 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 6f 66 20  -NULL values of 
163b0 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 49 66 20 70  <i>X</i>.  ^If p
163c0 61 72 61 6d 65 74 65 72 20 3c 69 3e 59 3c 2f 69  arameter <i>Y</i
163d0 3e 20 69 73 20 70 72 65 73 65 6e 74 20 74 68 65  > is present the
163e0 6e 0a 20 20 69 73 20 69 73 20 75 73 65 64 20 61  n.  is is used a
163f0 73 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 0a  s the separator.
16400 20 20 62 65 74 77 65 65 6e 20 69 6e 73 74 61 6e    between instan
16410 63 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e  ces of <i>X</i>.
16420 20 20 5e 41 20 63 6f 6d 6d 61 20 28 22 2c 22 29    ^A comma (",")
16430 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20   is used as the 
16440 73 65 70 61 72 61 74 6f 72 0a 20 20 69 66 20 3c  separator.  if <
16450 69 3e 59 3c 2f 69 3e 20 69 73 20 6f 6d 69 74 74  i>Y</i> is omitt
16460 65 64 2e 20 20 54 68 65 20 6f 72 64 65 72 20 6f  ed.  The order o
16470 66 20 74 68 65 20 63 6f 6e 63 61 74 65 6e 61 74  f the concatenat
16480 65 64 20 65 6c 65 6d 65 6e 74 73 20 69 73 0a 20  ed elements is. 
16490 20 61 72 62 69 74 72 61 72 79 2e 0a 7d 0a 0a 66   arbitrary..}..f
164a0 75 6e 63 64 65 66 20 7b 6d 61 78 28 58 29 7d 20  uncdef {max(X)} 
164b0 7b 2a 6d 61 78 41 67 67 46 75 6e 63 20 2a 61 67  {*maxAggFunc *ag
164c0 67 5f 6d 61 78 20 7b 6d 61 78 28 29 20 61 67 67  g_max {max() agg
164d0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d  regate function}
164e0 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 61 78 28 29  } {.  ^The max()
164f0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
16500 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68  ion.  returns th
16510 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20  e maximum value 
16520 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e  of all values in
16530 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e 54   the group..  ^T
16540 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65  he maximum value
16550 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 74 68   is the value th
16560 61 74 20 77 6f 75 6c 64 20 62 65 20 72 65 74 75  at would be retu
16570 72 6e 65 64 20 6c 61 73 74 20 69 6e 20 61 6e 0a  rned last in an.
16580 20 20 4f 52 44 45 52 20 42 59 20 6f 6e 20 74 68    ORDER BY on th
16590 65 20 73 61 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20  e same column.  
165a0 5e 41 67 67 72 65 67 61 74 65 20 6d 61 78 28 29  ^Aggregate max()
165b0 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 0a 20   returns NULL . 
165c0 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20   if and only if 
165d0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e  there are no non
165e0 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20  -NULL values in 
165f0 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75  the group..}..fu
16600 6e 63 64 65 66 20 7b 6d 69 6e 28 58 29 7d 20 7b  ncdef {min(X)} {
16610 2a 6d 69 6e 41 67 67 46 75 6e 63 20 2a 61 67 67  *minAggFunc *agg
16620 5f 6d 69 6e 20 7b 6d 69 6e 28 29 20 61 67 67 72  _min {min() aggr
16630 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d  egate function}}
16640 20 7b 0a 20 20 5e 54 68 65 20 6d 69 6e 28 29 20   {.  ^The min() 
16650 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
16660 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68 65  on.  returns the
16670 20 6d 69 6e 69 6d 75 6d 20 6e 6f 6e 2d 4e 55 4c   minimum non-NUL
16680 4c 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76  L value of all v
16690 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f  alues in the gro
166a0 75 70 2e 0a 20 20 5e 54 68 65 20 6d 69 6e 69 6d  up..  ^The minim
166b0 75 6d 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  um value is the 
166c0 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 76  first non-NULL v
166d0 61 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20  alue that would 
166e0 61 70 70 65 61 72 0a 20 20 69 6e 20 61 6e 20 4f  appear.  in an O
166f0 52 44 45 52 20 42 59 20 6f 66 20 74 68 65 20 63  RDER BY of the c
16700 6f 6c 75 6d 6e 2e 0a 20 20 5e 41 67 67 72 65 67  olumn..  ^Aggreg
16710 61 74 65 20 6d 69 6e 28 29 20 72 65 74 75 72 6e  ate min() return
16720 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64 20 6f 6e  s NULL if and on
16730 6c 79 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ly if there are 
16740 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 0a 20 20 76 61  no non-NULL.  va
16750 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75  lues in the grou
16760 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73  p..}..funcdef {s
16770 75 6d 28 58 29 20 74 6f 74 61 6c 28 58 29 7d 20  um(X) total(X)} 
16780 7b 0a 20 20 2a 73 75 6d 46 75 6e 63 20 2a 73 75  {.  *sumFunc *su
16790 6d 20 2a 74 6f 74 61 6c 0a 20 20 7b 73 75 6d 28  m *total.  {sum(
167a0 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
167b0 74 69 6f 6e 7d 0a 20 20 7b 74 6f 74 61 6c 28 29  tion}.  {total()
167c0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
167d0 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 54 68 65 20 73  ion}.} {.  The s
167e0 75 6d 28 29 20 61 67 67 72 65 67 61 74 65 20 66  um() aggregate f
167f0 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e  unction.  return
16800 73 20 73 75 6d 20 6f 66 20 61 6c 6c 20 6e 6f 6e  s sum of all non
16810 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20  -NULL values in 
16820 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e 49 66  the group..  ^If
16830 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f   there are no no
16840 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 72 6f 77  n-NULL input row
16850 73 20 74 68 65 6e 20 73 75 6d 28 29 20 72 65 74  s then sum() ret
16860 75 72 6e 73 0a 20 20 4e 55 4c 4c 20 62 75 74 20  urns.  NULL but 
16870 74 6f 74 61 6c 28 29 20 72 65 74 75 72 6e 73 20  total() returns 
16880 30 2e 30 2e 0a 20 20 5e 4e 55 4c 4c 20 69 73 20  0.0..  ^NULL is 
16890 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 61 20 68  not normally a h
168a0 65 6c 70 66 75 6c 20 72 65 73 75 6c 74 20 66 6f  elpful result fo
168b0 72 20 74 68 65 20 73 75 6d 20 6f 66 20 6e 6f 20  r the sum of no 
168c0 72 6f 77 73 0a 20 20 62 75 74 20 74 68 65 20 53  rows.  but the S
168d0 51 4c 20 73 74 61 6e 64 61 72 64 20 72 65 71 75  QL standard requ
168e0 69 72 65 73 20 69 74 20 61 6e 64 20 6d 6f 73 74  ires it and most
168f0 20 6f 74 68 65 72 0a 20 20 53 51 4c 20 64 61 74   other.  SQL dat
16900 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20 69 6d  abase engines im
16910 70 6c 65 6d 65 6e 74 20 73 75 6d 28 29 20 74 68  plement sum() th
16920 61 74 20 77 61 79 20 73 6f 20 53 51 4c 69 74 65  at way so SQLite
16930 20 64 6f 65 73 20 69 74 20 69 6e 20 74 68 65 0a   does it in the.
16940 20 20 73 61 6d 65 20 77 61 79 20 69 6e 20 6f 72    same way in or
16950 64 65 72 20 74 6f 20 62 65 20 63 6f 6d 70 61 74  der to be compat
16960 69 62 6c 65 2e 20 20 20 5e 54 68 65 20 6e 6f 6e  ible.   ^The non
16970 2d 73 74 61 6e 64 61 72 64 20 74 6f 74 61 6c 28  -standard total(
16980 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 69 73 20  ) function.  is 
16990 70 72 6f 76 69 64 65 64 20 61 73 20 61 20 63 6f  provided as a co
169a0 6e 76 65 6e 69 65 6e 74 20 77 61 79 20 74 6f 20  nvenient way to 
169b0 77 6f 72 6b 20 61 72 6f 75 6e 64 20 74 68 69 73  work around this
169c0 20 64 65 73 69 67 6e 20 70 72 6f 62 6c 65 6d 0a   design problem.
169d0 20 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e    in the SQL lan
169e0 67 75 61 67 65 2e 3c 2f 70 3e 0a 0a 20 20 3c 70  guage.</p>..  <p
169f0 3e 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20  >^The result of 
16a00 74 6f 74 61 6c 28 29 20 69 73 20 61 6c 77 61 79  total() is alway
16a10 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  s a floating poi
16a20 6e 74 20 76 61 6c 75 65 2e 0a 20 20 5e 54 68 65  nt value..  ^The
16a30 20 72 65 73 75 6c 74 20 6f 66 20 73 75 6d 28 29   result of sum()
16a40 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 76   is an integer v
16a50 61 6c 75 65 20 69 66 20 61 6c 6c 20 6e 6f 6e 2d  alue if all non-
16a60 4e 55 4c 4c 20 69 6e 70 75 74 73 20 61 72 65 20  NULL inputs are 
16a70 69 6e 74 65 67 65 72 73 2e 0a 20 20 5e 49 66 20  integers..  ^If 
16a80 61 6e 79 20 69 6e 70 75 74 20 74 6f 20 73 75 6d  any input to sum
16a90 28 29 20 69 73 20 6e 65 69 74 68 65 72 20 61 6e  () is neither an
16aa0 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20 4e 55   integer or a NU
16ab0 4c 4c 0a 20 20 74 68 65 6e 20 73 75 6d 28 29 20  LL.  then sum() 
16ac0 72 65 74 75 72 6e 73 20 61 20 66 6c 6f 61 74 69  returns a floati
16ad0 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 0a 20  ng point value. 
16ae0 20 77 68 69 63 68 20 6d 69 67 68 74 20 62 65 20   which might be 
16af0 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e  an approximation
16b00 20 74 6f 20 74 68 65 20 74 72 75 65 20 73 75 6d   to the true sum
16b10 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 53 75 6d  .</p>..  <p>^Sum
16b20 28 29 20 77 69 6c 6c 20 74 68 72 6f 77 20 61 6e  () will throw an
16b30 20 22 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c   "integer overfl
16b40 6f 77 22 20 65 78 63 65 70 74 69 6f 6e 20 69 66  ow" exception if
16b50 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 61 72   all inputs.  ar
16b60 65 20 69 6e 74 65 67 65 72 73 20 6f 72 20 4e 55  e integers or NU
16b70 4c 4c 0a 20 20 61 6e 64 20 61 6e 20 69 6e 74 65  LL.  and an inte
16b80 67 65 72 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63  ger overflow occ
16b90 75 72 73 20 61 74 20 61 6e 79 20 70 6f 69 6e 74  urs at any point
16ba0 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f 6d 70   during the comp
16bb0 75 74 61 74 69 6f 6e 2e 0a 20 20 5e 54 6f 74 61  utation..  ^Tota
16bc0 6c 28 29 20 6e 65 76 65 72 20 74 68 72 6f 77 73  l() never throws
16bd0 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72   an integer over
16be0 66 6c 6f 77 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c  flow..}.</tcl>.<
16bf0 2f 74 61 62 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23  /table>..<tcl>.#
16c00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16c10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16c20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16c30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16c40 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
16c50 63 74 69 6f 6e 20 49 4e 53 45 52 54 20 69 6e 73  ction INSERT ins
16c60 65 72 74 20 7b 49 4e 53 45 52 54 20 2a 49 4e 53  ert {INSERT *INS
16c70 45 52 54 73 7d 0a 0a 42 75 62 62 6c 65 44 69 61  ERTs}..BubbleDia
16c80 67 72 61 6d 20 69 6e 73 65 72 74 2d 73 74 6d 74  gram insert-stmt
16c90 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68   1.</tcl>..<p>Th
16ca0 65 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  e INSERT stateme
16cb0 6e 74 20 63 6f 6d 65 73 20 69 6e 20 74 68 72 65  nt comes in thre
16cc0 65 20 62 61 73 69 63 20 66 6f 72 6d 73 2e 20 20  e basic forms.  
16cd0 5e 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 0a  ^The first form.
16ce0 28 77 69 74 68 20 74 68 65 20 22 56 41 4c 55 45  (with the "VALUE
16cf0 53 22 20 6b 65 79 77 6f 72 64 29 20 63 72 65 61  S" keyword) crea
16d00 74 65 73 20 61 20 73 69 6e 67 6c 65 20 6e 65 77  tes a single new
16d10 20 72 6f 77 20 69 6e 20 61 6e 20 65 78 69 73 74   row in an exist
16d20 69 6e 67 20 74 61 62 6c 65 2e 0a 5e 49 66 20 6e  ing table..^If n
16d30 6f 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73  o column-list is
16d40 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 20   specified then 
16d50 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61  the number of va
16d60 6c 75 65 73 20 6d 75 73 74 0a 62 65 20 74 68 65  lues must.be the
16d70 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d   same as the num
16d80 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
16d90 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 5e 49  n the table.  ^I
16da0 66 20 61 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 0a  f a column-list.
16db0 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  is specified, th
16dc0 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  en the number of
16dd0 20 76 61 6c 75 65 73 20 6d 75 73 74 20 6d 61 74   values must mat
16de0 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ch the number of
16df0 0a 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d  .specified colum
16e00 6e 73 2e 20 20 5e 43 6f 6c 75 6d 6e 73 20 6f 66  ns.  ^Columns of
16e10 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
16e20 64 6f 20 6e 6f 74 20 61 70 70 65 61 72 20 69 6e  do not appear in
16e30 20 74 68 65 0a 63 6f 6c 75 6d 6e 20 6c 69 73 74   the.column list
16e40 20 61 72 65 20 66 69 6c 6c 65 64 20 77 69 74 68   are filled with
16e50 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
16e60 75 65 2c 20 6f 72 20 77 69 74 68 20 4e 55 4c 4c  ue, or with NULL
16e70 20 69 66 20 6e 6f 0a 64 65 66 61 75 6c 74 20 76   if no.default v
16e80 61 6c 75 65 20 69 73 20 73 70 65 63 69 66 69 65  alue is specifie
16e90 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  d..</p>..<p>^The
16ea0 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20   second form of 
16eb0 74 68 65 20 49 4e 53 45 52 54 20 73 74 61 74 65  the INSERT state
16ec0 6d 65 6e 74 20 74 61 6b 65 73 20 69 74 73 20 64  ment takes its d
16ed0 61 74 61 20 66 72 6f 6d 20 61 0a 53 45 4c 45 43  ata from a.SELEC
16ee0 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 5e 54  T statement.  ^T
16ef0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
16f00 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75  umns in the resu
16f10 6c 74 20 6f 66 20 74 68 65 0a 53 45 4c 45 43 54  lt of the.SELECT
16f20 20 6d 75 73 74 20 65 78 61 63 74 6c 79 20 6d 61   must exactly ma
16f30 74 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  tch the number o
16f40 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
16f50 20 74 61 62 6c 65 20 69 66 0a 6e 6f 20 63 6f 6c   table if.no col
16f60 75 6d 6e 20 6c 69 73 74 20 69 73 20 73 70 65 63  umn list is spec
16f70 69 66 69 65 64 2c 20 6f 72 20 69 74 20 6d 75 73  ified, or it mus
16f80 74 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d 62  t match the numb
16f90 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a 6e 61  er of columns.na
16fa0 6d 65 64 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d  med in the colum
16fb0 6e 20 6c 69 73 74 2e 20 20 5e 41 20 6e 65 77 20  n list.  ^A new 
16fc0 65 6e 74 72 79 20 69 73 20 6d 61 64 65 20 69 6e  entry is made in
16fd0 20 74 68 65 20 74 61 62 6c 65 0a 66 6f 72 20 65   the table.for e
16fe0 76 65 72 79 20 72 6f 77 20 6f 66 20 74 68 65 20  very row of the 
16ff0 53 45 4c 45 43 54 20 72 65 73 75 6c 74 2e 20 20  SELECT result.  
17000 5e 54 68 65 20 53 45 4c 45 43 54 20 6d 61 79 20  ^The SELECT may 
17010 62 65 20 73 69 6d 70 6c 65 0a 6f 72 20 63 6f 6d  be simple.or com
17020 70 6f 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  pound.</p>..<p>^
17030 54 68 65 20 74 68 69 72 64 20 66 6f 72 6d 20 6f  The third form o
17040 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  f an INSERT stat
17050 65 6d 65 6e 74 20 69 73 20 77 69 74 68 20 44 45  ement is with DE
17060 46 41 55 4c 54 20 56 41 4c 55 45 53 2e 0a 5e 28  FAULT VALUES..^(
17070 54 68 65 20 49 4e 53 45 52 54 20 2e 2e 2e 20 44  The INSERT ... D
17080 45 46 41 55 4c 54 20 56 41 4c 55 45 53 20 73 74  EFAULT VALUES st
17090 61 74 65 6d 65 6e 74 20 73 69 6d 70 6c 79 20 63  atement simply c
170a0 72 65 61 74 65 73 20 61 20 73 69 6e 67 6c 65 20  reates a single 
170b0 6e 65 77 0a 72 6f 77 20 69 6e 20 74 68 65 20 74  new.row in the t
170c0 61 62 6c 65 20 69 6e 20 77 68 69 63 68 20 65 61  able in which ea
170d0 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 66 69 6c  ch column is fil
170e0 6c 65 64 20 77 69 74 68 20 69 74 73 20 64 65 66  led with its def
170f0 61 75 6c 74 20 76 61 6c 75 65 2e 29 5e 3c 2f 70  ault value.)^</p
17100 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f  >..<p>^The optio
17110 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61  nal conflict-cla
17120 75 73 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 73  use allows the s
17130 70 65 63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20  pecification of 
17140 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 0a 63  an alternative.c
17150 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69  onstraint confli
17160 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
17170 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64  gorithm to use d
17180 75 72 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 49  uring this one I
17190 4e 53 45 52 54 20 63 6f 6d 6d 61 6e 64 2e 0a 53  NSERT command..S
171a0 65 65 20 74 68 65 20 73 65 63 74 69 6f 6e 20 74  ee the section t
171b0 69 74 6c 65 64 0a 5b 4f 4e 20 43 4f 4e 46 4c 49  itled.[ON CONFLI
171c0 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  CT] for addition
171d0 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
171e0 5e 46 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69  ^For compatibili
171f0 74 79 20 77 69 74 68 20 4d 79 53 51 4c 2c 20 74  ty with MySQL, t
17200 68 65 20 70 61 72 73 65 72 20 61 6c 6c 6f 77 73  he parser allows
17210 20 74 68 65 20 75 73 65 20 6f 66 20 74 68 65 0a   the use of the.
17220 73 69 6e 67 6c 65 20 6b 65 79 77 6f 72 64 20 3c  single keyword <
17230 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f 72 65 70  a href="lang_rep
17240 6c 61 63 65 2e 68 74 6d 6c 22 3e 52 45 50 4c 41  lace.html">REPLA
17250 43 45 3c 2f 61 3e 20 61 73 20 61 6e 20 0a 61 6c  CE</a> as an .al
17260 69 61 73 20 66 6f 72 20 22 49 4e 53 45 52 54 20  ias for "INSERT 
17270 4f 52 20 52 45 50 4c 41 43 45 22 2e 0a 3c 2f 70  OR REPLACE"..</p
17280 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f 70 74 69  >..<p>^(The opti
17290 6f 6e 61 6c 20 22 3c 69 3e 64 61 74 61 62 61 73  onal "<i>databas
172a0 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f  e-name</i><b>.</
172b0 62 3e 22 20 70 72 65 66 69 78 20 6f 6e 20 74 68  b>" prefix on th
172c0 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c  e <i>table-name<
172d0 2f 69 3e 0a 69 73 20 73 75 70 70 6f 72 74 20 66  /i>.is support f
172e0 6f 72 20 74 6f 70 2d 6c 65 76 65 6c 20 49 4e 53  or top-level INS
172f0 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6f  ERT statements o
17300 6e 6c 79 2e 29 5e 20 20 5e 54 68 65 20 74 61 62  nly.)^  ^The tab
17310 6c 65 20 6e 61 6d 65 20 6d 75 73 74 20 62 65 0a  le name must be.
17320 75 6e 71 75 61 6c 69 66 69 65 64 20 66 6f 72 20  unqualified for 
17330 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
17340 73 20 74 68 61 74 20 6f 63 63 75 72 20 77 69 74  s that occur wit
17350 68 69 6e 20 5b 43 52 45 41 54 45 20 54 52 49 47  hin [CREATE TRIG
17360 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e  GER] statements.
17370 0a 5e 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65  .^Similarly, the
17380 20 22 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53   "DEFAULT VALUES
17390 22 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 49 4e  " form of the IN
173a0 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 69  SERT statement i
173b0 73 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72 0a  s supported for.
173c0 74 6f 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54  top-level INSERT
173d0 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79   statements only
173e0 20 61 6e 64 20 6e 6f 74 20 66 6f 72 20 49 4e 53   and not for INS
173f0 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77  ERT statements w
17400 69 74 68 69 6e 0a 74 72 69 67 67 65 72 73 2e 0a  ithin.triggers..
17410 3c 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  <p>..<tcl>.#####
17420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17430 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17440 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17450 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17460 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
17470 6e 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  n {ON CONFLICT c
17480 6c 61 75 73 65 7d 20 63 6f 6e 66 6c 69 63 74 20  lause} conflict 
17490 7b 7b 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73  {{conflict claus
174a0 65 7d 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 7d  e} {ON CONFLICT}
174b0 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  }..BubbleDiagram
174c0 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65   conflict-clause
174d0 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  .</tcl>..<p>The 
174e0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
174f0 73 65 20 69 73 20 6e 6f 74 20 61 20 73 65 70 61  se is not a sepa
17500 72 61 74 65 20 53 51 4c 20 63 6f 6d 6d 61 6e 64  rate SQL command
17510 2e 20 20 49 74 20 69 73 20 61 0a 6e 6f 6e 2d 73  .  It is a.non-s
17520 74 61 6e 64 61 72 64 20 63 6c 61 75 73 65 20 74  tandard clause t
17530 68 61 74 20 63 61 6e 20 61 70 70 65 61 72 20 69  hat can appear i
17540 6e 20 6d 61 6e 79 20 6f 74 68 65 72 20 53 51 4c  n many other SQL
17550 20 63 6f 6d 6d 61 6e 64 73 2e 0a 49 74 20 69 73   commands..It is
17560 20 67 69 76 65 6e 20 69 74 73 20 6f 77 6e 20 73   given its own s
17570 65 63 74 69 6f 6e 20 69 6e 20 74 68 69 73 20 64  ection in this d
17580 6f 63 75 6d 65 6e 74 20 62 65 63 61 75 73 65 20  ocument because 
17590 69 74 20 69 73 20 6e 6f 74 0a 70 61 72 74 20 6f  it is not.part o
175a0 66 20 73 74 61 6e 64 61 72 64 20 53 51 4c 20 61  f standard SQL a
175b0 6e 64 20 74 68 65 72 65 66 6f 72 65 20 6d 69 67  nd therefore mig
175c0 68 74 20 6e 6f 74 20 62 65 20 66 61 6d 69 6c 69  ht not be famili
175d0 61 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ar.</p>..<p>^The
175e0 20 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20   syntax for the 
175f0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
17600 73 65 20 69 73 20 61 73 20 73 68 6f 77 6e 20 61  se is as shown a
17610 62 6f 76 65 20 66 6f 72 0a 74 68 65 20 43 52 45  bove for.the CRE
17620 41 54 45 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e  ATE TABLE comman
17630 64 2e 20 20 5e 46 6f 72 20 74 68 65 20 49 4e 53  d.  ^For the INS
17640 45 52 54 20 61 6e 64 0a 55 50 44 41 54 45 20 63  ERT and.UPDATE c
17650 6f 6d 6d 61 6e 64 73 2c 20 74 68 65 20 6b 65 79  ommands, the key
17660 77 6f 72 64 73 20 22 4f 4e 20 43 4f 4e 46 4c 49  words "ON CONFLI
17670 43 54 22 20 61 72 65 20 72 65 70 6c 61 63 65 64  CT" are replaced
17680 20 62 79 20 22 4f 52 22 2c 20 74 6f 20 6d 61 6b   by "OR", to mak
17690 65 0a 74 68 65 20 73 79 6e 74 61 78 20 73 65 65  e.the syntax see
176a0 6d 20 6d 6f 72 65 20 6e 61 74 75 72 61 6c 2e 20  m more natural. 
176b0 20 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69   ^For example, i
176c0 6e 73 74 65 61 64 20 6f 66 0a 22 49 4e 53 45 52  nstead of."INSER
176d0 54 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47  T ON CONFLICT IG
176e0 4e 4f 52 45 22 20 77 65 20 68 61 76 65 20 22 49  NORE" we have "I
176f0 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f 52 45 22  NSERT OR IGNORE"
17700 2e 0a 54 68 65 20 6b 65 79 77 6f 72 64 73 20 63  ..The keywords c
17710 68 61 6e 67 65 20 62 75 74 20 74 68 65 20 6d 65  hange but the me
17720 61 6e 69 6e 67 20 6f 66 20 74 68 65 20 63 6c 61  aning of the cla
17730 75 73 65 20 69 73 20 74 68 65 20 73 61 6d 65 0a  use is the same.
17740 65 69 74 68 65 72 20 77 61 79 2e 3c 2f 70 3e 0a  either way.</p>.
17750 0a 3c 70 3e 5e 54 68 65 20 4f 4e 20 43 4f 4e 46  .<p>^The ON CONF
17760 4c 49 43 54 20 63 6c 61 75 73 65 20 73 70 65 63  LICT clause spec
17770 69 66 69 65 73 20 61 6e 20 61 6c 67 6f 72 69 74  ifies an algorit
17780 68 6d 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c  hm used to resol
17790 76 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f  ve.constraint co
177a0 6e 66 6c 69 63 74 73 2e 20 20 5e 54 68 65 72 65  nflicts.  ^There
177b0 20 61 72 65 20 66 69 76 65 20 63 6f 6e 66 6c 69   are five confli
177c0 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
177d0 67 6f 72 69 74 68 6d 20 63 68 6f 69 63 65 73 3a  gorithm choices:
177e0 0a 52 4f 4c 4c 42 41 43 4b 2c 20 41 42 4f 52 54  .ROLLBACK, ABORT
177f0 2c 20 46 41 49 4c 2c 20 49 47 4e 4f 52 45 2c 20  , FAIL, IGNORE, 
17800 61 6e 64 20 52 45 50 4c 41 43 45 2e 0a 5e 54 68  and REPLACE..^Th
17810 65 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69  e default confli
17820 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
17830 67 6f 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54  gorithm is ABORT
17840 2e 20 20 54 68 69 73 0a 69 73 20 77 68 61 74 20  .  This.is what 
17850 74 68 65 79 20 6d 65 61 6e 3a 3c 2f 70 3e 0a 0a  they mean:</p>..
17860 3c 64 6c 3e 0a 3c 64 74 3e 3c 62 3e 52 4f 4c 4c  <dl>.<dt><b>ROLL
17870 42 41 43 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64  BACK</b></dt>.<d
17880 64 3e 3c 70 3e 5e 57 68 65 6e 20 61 20 63 6f 6e  d><p>^When a con
17890 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
178a0 6e 20 6f 63 63 75 72 73 2c 20 61 6e 20 69 6d 6d  n occurs, an imm
178b0 65 64 69 61 74 65 20 52 4f 4c 4c 42 41 43 4b 0a  ediate ROLLBACK.
178c0 6f 63 63 75 72 73 2c 20 74 68 75 73 20 65 6e 64  occurs, thus end
178d0 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74 20  ing the current 
178e0 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 61 6e 64  transaction, and
178f0 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 61 62 6f   the command abo
17900 72 74 73 0a 77 69 74 68 20 61 20 72 65 74 75 72  rts.with a retur
17910 6e 20 63 6f 64 65 20 6f 66 20 53 51 4c 49 54 45  n code of SQLITE
17920 5f 43 4f 4e 53 54 52 41 49 4e 54 2e 20 20 5e 49  _CONSTRAINT.  ^I
17930 66 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  f no transaction
17940 20 69 73 0a 61 63 74 69 76 65 20 28 6f 74 68 65   is.active (othe
17950 72 20 74 68 61 6e 20 74 68 65 20 69 6d 70 6c 69  r than the impli
17960 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74  ed transaction t
17970 68 61 74 20 69 73 20 63 72 65 61 74 65 64 20 6f  hat is created o
17980 6e 20 65 76 65 72 79 0a 63 6f 6d 6d 61 6e 64 29  n every.command)
17990 20 74 68 65 6e 20 74 68 69 73 20 61 6c 67 6f 72   then this algor
179a0 69 74 68 6d 20 77 6f 72 6b 73 20 74 68 65 20 73  ithm works the s
179b0 61 6d 65 20 61 73 20 41 42 4f 52 54 2e 3c 2f 70  ame as ABORT.</p
179c0 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 41  ></dd>..<dt><b>A
179d0 42 4f 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64  BORT</b></dt>.<d
179e0 64 3e 3c 70 3e 5e 57 68 65 6e 20 61 20 63 6f 6e  d><p>^When a con
179f0 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
17a00 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 63 6f  n occurs, the co
17a10 6d 6d 61 6e 64 20 62 61 63 6b 73 20 6f 75 74 0a  mmand backs out.
17a20 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65  any prior change
17a30 73 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 20  s it might have 
17a40 6d 61 64 65 20 61 6e 64 20 61 62 6f 72 74 73 20  made and aborts 
17a50 77 69 74 68 20 61 20 72 65 74 75 72 6e 20 63 6f  with a return co
17a60 64 65 0a 6f 66 20 53 51 4c 49 54 45 5f 43 4f 4e  de.of SQLITE_CON
17a70 53 54 52 41 49 4e 54 2e 20 20 5e 42 75 74 20 6e  STRAINT.  ^But n
17a80 6f 20 52 4f 4c 4c 42 41 43 4b 20 69 73 20 65 78  o ROLLBACK is ex
17a90 65 63 75 74 65 64 20 73 6f 20 63 68 61 6e 67 65  ecuted so change
17aa0 73 0a 66 72 6f 6d 20 70 72 69 6f 72 20 63 6f 6d  s.from prior com
17ab0 6d 61 6e 64 73 20 77 69 74 68 69 6e 20 74 68 65  mands within the
17ac0 20 73 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f   same transactio
17ad0 6e 0a 61 72 65 20 70 72 65 73 65 72 76 65 64 2e  n.are preserved.
17ae0 20 20 54 68 69 73 20 69 73 20 74 68 65 20 64 65    This is the de
17af0 66 61 75 6c 74 20 62 65 68 61 76 69 6f 72 2e 3c  fault behavior.<
17b00 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62  /p></dd>..<dt><b
17b10 3e 46 41 49 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c  >FAIL</b></dt>.<
17b20 64 64 3e 3c 70 3e 5e 57 68 65 6e 20 61 20 63 6f  dd><p>^When a co
17b30 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
17b40 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 63  on occurs, the c
17b50 6f 6d 6d 61 6e 64 20 61 62 6f 72 74 73 20 77 69  ommand aborts wi
17b60 74 68 20 61 0a 72 65 74 75 72 6e 20 63 6f 64 65  th a.return code
17b70 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49   SQLITE_CONSTRAI
17b80 4e 54 2e 20 20 5e 42 75 74 20 61 6e 79 20 63 68  NT.  ^But any ch
17b90 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61 74  anges to the dat
17ba0 61 62 61 73 65 20 74 68 61 74 0a 74 68 65 20 63  abase that.the c
17bb0 6f 6d 6d 61 6e 64 20 6d 61 64 65 20 70 72 69 6f  ommand made prio
17bc0 72 20 74 6f 20 65 6e 63 6f 75 6e 74 65 72 69 6e  r to encounterin
17bd0 67 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  g the constraint
17be0 20 76 69 6f 6c 61 74 69 6f 6e 0a 61 72 65 20 70   violation.are p
17bf0 72 65 73 65 72 76 65 64 20 61 6e 64 20 61 72 65  reserved and are
17c00 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 2e   not backed out.
17c10 20 20 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20    ^For example, 
17c20 69 66 20 61 6e 20 55 50 44 41 54 45 0a 73 74 61  if an UPDATE.sta
17c30 74 65 6d 65 6e 74 20 65 6e 63 6f 75 6e 74 65 72  tement encounter
17c40 65 64 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  ed a constraint 
17c50 76 69 6f 6c 61 74 69 6f 6e 20 6f 6e 20 74 68 65  violation on the
17c60 20 31 30 30 74 68 20 72 6f 77 20 74 68 61 74 0a   100th row that.
17c70 69 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 75  it attempts to u
17c80 70 64 61 74 65 2c 20 74 68 65 6e 20 74 68 65 20  pdate, then the 
17c90 66 69 72 73 74 20 39 39 20 72 6f 77 20 63 68 61  first 99 row cha
17ca0 6e 67 65 73 20 61 72 65 20 70 72 65 73 65 72 76  nges are preserv
17cb0 65 64 0a 62 75 74 20 63 68 61 6e 67 65 73 20 74  ed.but changes t
17cc0 6f 20 72 6f 77 73 20 31 30 30 20 61 6e 64 20 62  o rows 100 and b
17cd0 65 79 6f 6e 64 20 6e 65 76 65 72 20 6f 63 63 75  eyond never occu
17ce0 72 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  r.</p></dd>..<dt
17cf0 3e 3c 62 3e 49 47 4e 4f 52 45 3c 2f 62 3e 3c 2f  ><b>IGNORE</b></
17d00 64 74 3e 0a 3c 64 64 3e 3c 70 3e 5e 57 68 65 6e  dt>.<dd><p>^When
17d10 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
17d20 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
17d30 74 68 65 20 6f 6e 65 20 72 6f 77 20 74 68 61 74  the one row that
17d40 20 63 6f 6e 74 61 69 6e 73 0a 74 68 65 20 63 6f   contains.the co
17d50 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
17d60 6f 6e 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74  on is not insert
17d70 65 64 20 6f 72 20 63 68 61 6e 67 65 64 2e 20 20  ed or changed.  
17d80 5e 42 75 74 20 74 68 65 20 63 6f 6d 6d 61 6e 64  ^But the command
17d90 0a 63 6f 6e 74 69 6e 75 65 73 20 65 78 65 63 75  .continues execu
17da0 74 69 6e 67 20 6e 6f 72 6d 61 6c 6c 79 2e 20 20  ting normally.  
17db0 5e 4f 74 68 65 72 20 72 6f 77 73 20 62 65 66 6f  ^Other rows befo
17dc0 72 65 20 61 6e 64 20 61 66 74 65 72 20 74 68 65  re and after the
17dd0 20 72 6f 77 20 74 68 61 74 0a 63 6f 6e 74 61 69   row that.contai
17de0 6e 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69  ned the constrai
17df0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 63 6f 6e  nt violation con
17e00 74 69 6e 75 65 20 74 6f 20 62 65 20 69 6e 73 65  tinue to be inse
17e10 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 0a  rted or updated.
17e20 6e 6f 72 6d 61 6c 6c 79 2e 20 20 5e 4e 6f 20 65  normally.  ^No e
17e30 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
17e40 20 77 68 65 6e 20 74 68 65 20 49 47 4e 4f 52 45   when the IGNORE
17e50 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
17e60 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d 20 69  tion.algorithm i
17e70 73 20 75 73 65 64 2e 3c 2f 70 3e 3c 2f 64 64 3e  s used.</p></dd>
17e80 0a 0a 3c 64 74 3e 3c 62 3e 52 45 50 4c 41 43 45  ..<dt><b>REPLACE
17e90 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </b></dt>.<dd><p
17ea0 3e 5e 57 68 65 6e 20 61 20 55 4e 49 51 55 45 20  >^When a UNIQUE 
17eb0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
17ec0 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65  tion occurs, the
17ed0 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20 72 6f   pre-existing ro
17ee0 77 73 0a 74 68 61 74 20 61 72 65 20 63 61 75 73  ws.that are caus
17ef0 69 6e 67 20 74 68 65 20 63 6f 6e 73 74 72 61 69  ing the constrai
17f00 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65  nt violation are
17f10 20 72 65 6d 6f 76 65 64 20 70 72 69 6f 72 20 74   removed prior t
17f20 6f 20 69 6e 73 65 72 74 69 6e 67 0a 6f 72 20 75  o inserting.or u
17f30 70 64 61 74 69 6e 67 20 74 68 65 20 63 75 72 72  pdating the curr
17f40 65 6e 74 20 72 6f 77 2e 20 20 5e 54 68 75 73 20  ent row.  ^Thus 
17f50 74 68 65 20 69 6e 73 65 72 74 20 6f 72 20 75 70  the insert or up
17f60 64 61 74 65 20 61 6c 77 61 79 73 20 6f 63 63 75  date always occu
17f70 72 73 2e 0a 5e 54 68 65 20 63 6f 6d 6d 61 6e 64  rs..^The command
17f80 20 63 6f 6e 74 69 6e 75 65 73 20 65 78 65 63 75   continues execu
17f90 74 69 6e 67 20 6e 6f 72 6d 61 6c 6c 79 20 66 6f  ting normally fo
17fa0 6c 6c 6f 77 69 6e 67 20 52 45 50 4c 41 43 45 2e  llowing REPLACE.
17fb0 20 20 0a 5e 4e 6f 20 65 72 72 6f 72 20 69 73 20    .^No error is 
17fc0 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
17fd0 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74  REPLACE conflict
17fe0 20 72 65 73 6f 6c 75 74 69 6f 6e 2e 0a 5e 49 66   resolution..^If
17ff0 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73   a NOT NULL cons
18000 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
18010 20 6f 63 63 75 72 73 2c 20 74 68 65 20 4e 55 4c   occurs, the NUL
18020 4c 20 76 61 6c 75 65 20 69 73 20 72 65 70 6c 61  L value is repla
18030 63 65 64 0a 62 79 20 74 68 65 20 64 65 66 61 75  ced.by the defau
18040 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74 68 61  lt value for tha
18050 74 20 63 6f 6c 75 6d 6e 2e 20 20 5e 49 66 20 74  t column.  ^If t
18060 68 65 20 63 6f 6c 75 6d 6e 20 68 61 73 20 6e 6f  he column has no
18070 20 64 65 66 61 75 6c 74 0a 76 61 6c 75 65 2c 20   default.value, 
18080 74 68 65 6e 20 74 68 65 20 41 42 4f 52 54 20 61  then the ABORT a
18090 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64  lgorithm is used
180a0 2e 20 20 5e 49 66 20 61 20 43 48 45 43 4b 20 63  .  ^If a CHECK c
180b0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
180c0 69 6f 6e 0a 6f 63 63 75 72 73 20 74 68 65 6e 20  ion.occurs then 
180d0 74 68 65 20 49 47 4e 4f 52 45 20 61 6c 67 6f 72  the IGNORE algor
180e0 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70  ithm is used.</p
180f0 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 69 73  >..<p>^When this
18100 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
18110 74 69 6f 6e 20 73 74 72 61 74 65 67 79 20 64 65  tion strategy de
18120 6c 65 74 65 73 20 72 6f 77 73 20 69 6e 20 6f 72  letes rows in or
18130 64 65 72 20 74 6f 0a 73 61 74 69 73 66 79 20 61  der to.satisfy a
18140 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 5b 43 52   constraint, [CR
18150 45 41 54 45 20 54 52 49 47 47 45 52 20 7c 20 64  EATE TRIGGER | d
18160 65 6c 65 74 65 20 74 72 69 67 67 65 72 73 5d 20  elete triggers] 
18170 6f 6e 6c 79 20 66 69 72 65 20 69 66 0a 5b 72 65  only fire if.[re
18180 63 75 72 73 69 76 65 5f 74 72 69 67 67 65 72 73  cursive_triggers
18190 20 70 72 61 67 6d 61 20 7c 20 72 65 63 75 72 73   pragma | recurs
181a0 69 76 65 20 74 72 69 67 67 65 72 73 5d 20 61 72  ive triggers] ar
181b0 65 20 65 6e 61 62 6c 65 64 2e 3c 2f 70 3e 0a 0a  e enabled.</p>..
181c0 3c 70 3e 5e 54 68 65 20 5b 73 71 6c 69 74 65 33  <p>^The [sqlite3
181d0 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 20 7c 20 75  _update_hook | u
181e0 70 64 61 74 65 20 68 6f 6f 6b 5d 20 69 73 20 6e  pdate hook] is n
181f0 6f 74 20 69 6e 76 6f 6b 65 64 20 66 6f 72 20 72  ot invoked for r
18200 6f 77 73 20 74 68 61 74 0a 61 72 65 20 64 65 6c  ows that.are del
18210 65 74 65 64 20 62 79 20 61 6e 20 4f 52 20 52 45  eted by an OR RE
18220 50 4c 41 43 45 20 72 65 73 6f 6c 75 74 69 6f 6e  PLACE resolution
18230 2e 20 20 5e 4e 6f 72 20 69 73 20 74 68 65 20 0a  .  ^Nor is the .
18240 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73  [sqlite3_changes
18250 20 7c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65   | change counte
18260 72 5d 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  r] incremented..
18270 54 68 65 20 65 78 63 65 70 74 69 6f 6e 61 6c 20  The exceptional 
18280 62 65 68 61 76 69 6f 72 73 20 64 65 66 69 6e 65  behaviors define
18290 64 20 69 6e 20 74 68 69 73 20 70 61 72 61 67 72  d in this paragr
182a0 61 70 68 20 6d 69 67 68 74 20 63 68 61 6e 67 65  aph might change
182b0 20 0a 69 6e 20 61 20 66 75 74 75 72 65 20 72 65   .in a future re
182c0 6c 65 61 73 65 2e 3c 2f 70 3e 0a 3c 2f 64 6c 3e  lease.</p>.</dl>
182d0 0a 0a 3c 70 3e 5e 54 68 65 20 61 6c 67 6f 72 69  ..<p>^The algori
182e0 74 68 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e  thm specified in
182f0 20 74 68 65 20 4f 52 20 63 6c 61 75 73 65 20 6f   the OR clause o
18300 66 20 61 20 49 4e 53 45 52 54 20 6f 72 20 55 50  f a INSERT or UP
18310 44 41 54 45 0a 6f 76 65 72 72 69 64 65 73 20 61  DATE.overrides a
18320 6e 79 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65  ny algorithm spe
18330 63 69 66 69 65 64 20 69 6e 20 61 20 43 52 45 41  cified in a CREA
18340 54 45 20 54 41 42 4c 45 2e 0a 5e 49 66 20 6e 6f  TE TABLE..^If no
18350 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70   algorithm is sp
18360 65 63 69 66 69 65 64 20 61 6e 79 77 68 65 72 65  ecified anywhere
18370 2c 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f  , the ABORT algo
18380 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f  rithm is used.</
18390 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
183a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
183b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
183c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
183d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
183e0 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
183f0 20 52 45 49 4e 44 45 58 20 72 65 69 6e 64 65 78   REINDEX reindex
18400 20 52 45 49 4e 44 45 58 0a 0a 42 75 62 62 6c 65   REINDEX..Bubble
18410 44 69 61 67 72 61 6d 20 72 65 69 6e 64 65 78 2d  Diagram reindex-
18420 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c  stmt 1.</tcl>..<
18430 70 3e 5e 54 68 65 20 52 45 49 4e 44 45 58 20 63  p>^The REINDEX c
18440 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20 74  ommand is used t
18450 6f 20 64 65 6c 65 74 65 20 61 6e 64 20 72 65 63  o delete and rec
18460 72 65 61 74 65 20 69 6e 64 69 63 65 73 20 66 72  reate indices fr
18470 6f 6d 20 73 63 72 61 74 63 68 2e 0a 54 68 69 73  om scratch..This
18480 20 69 73 20 75 73 65 66 75 6c 20 77 68 65 6e 20   is useful when 
18490 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  the definition o
184a0 66 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  f a collation se
184b0 71 75 65 6e 63 65 20 68 61 73 20 63 68 61 6e 67  quence has chang
184c0 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e  ed..</p>..<p>^In
184d0 20 74 68 65 20 66 69 72 73 74 20 66 6f 72 6d 2c   the first form,
184e0 20 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e 20   all indices in 
184f0 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
18500 61 62 61 73 65 73 20 74 68 61 74 20 75 73 65 20  abases that use 
18510 74 68 65 0a 6e 61 6d 65 64 20 63 6f 6c 6c 61 74  the.named collat
18520 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 61 72 65  ion sequence are
18530 20 72 65 63 72 65 61 74 65 64 2e 20 5e 28 49 6e   recreated. ^(In
18540 20 74 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d   the second form
18550 2c 20 69 66 20 0a 3c 69 3e 26 23 39 31 3b 64 61  , if .<i>&#91;da
18560 74 61 62 61 73 65 2d 6e 61 6d 65 2e 26 23 39 33  tabase-name.&#93
18570 3b 74 61 62 6c 65 2f 69 6e 64 65 78 2d 6e 61 6d  ;table/index-nam
18580 65 3c 2f 69 3e 20 69 64 65 6e 74 69 66 69 65 73  e</i> identifies
18590 20 61 20 74 61 62 6c 65 2c 0a 74 68 65 6e 20 61   a table,.then a
185a0 6c 6c 20 69 6e 64 69 63 65 73 0a 61 73 73 6f 63  ll indices.assoc
185b0 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74  iated with the t
185c0 61 62 6c 65 20 61 72 65 20 72 65 62 75 69 6c 74  able are rebuilt
185d0 2e 29 5e 20 5e 49 66 20 61 6e 20 69 6e 64 65 78  .)^ ^If an index
185e0 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 2c 20   is identified, 
185f0 74 68 65 6e 20 6f 6e 6c 79 0a 74 68 69 73 20 73  then only.this s
18600 70 65 63 69 66 69 63 20 69 6e 64 65 78 20 69 73  pecific index is
18610 20 64 65 6c 65 74 65 64 20 61 6e 64 20 72 65 63   deleted and rec
18620 72 65 61 74 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70  reated..</p>..<p
18630 3e 5e 49 66 20 6e 6f 20 3c 69 3e 64 61 74 61 62  >^If no <i>datab
18640 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73 20  ase-name</i> is 
18650 73 70 65 63 69 66 69 65 64 20 61 6e 64 20 74 68  specified and th
18660 65 72 65 20 65 78 69 73 74 73 20 62 6f 74 68 20  ere exists both 
18670 61 20 74 61 62 6c 65 20 6f 72 0a 69 6e 64 65 78  a table or.index
18680 20 61 6e 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e   and a collation
18690 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65   sequence of the
186a0 20 73 70 65 63 69 66 69 65 64 20 6e 61 6d 65 2c   specified name,
186b0 20 74 68 65 6e 20 69 6e 64 69 63 65 73 20 61 73   then indices as
186c0 73 6f 63 69 61 74 65 64 0a 77 69 74 68 20 74 68  sociated.with th
186d0 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  e collation sequ
186e0 65 6e 63 65 20 6f 6e 6c 79 20 61 72 65 20 72 65  ence only are re
186f0 63 6f 6e 73 74 72 75 63 74 65 64 2e 20 54 68 69  constructed. Thi
18700 73 20 61 6d 62 69 67 75 69 74 79 20 6d 61 79 20  s ambiguity may 
18710 62 65 0a 64 69 73 70 65 6c 6c 65 64 20 62 79 20  be.dispelled by 
18720 61 6c 77 61 79 73 20 73 70 65 63 69 66 79 69 6e  always specifyin
18730 67 20 61 20 3c 69 3e 64 61 74 61 62 61 73 65 2d  g a <i>database-
18740 6e 61 6d 65 3c 2f 69 3e 20 77 68 65 6e 20 72 65  name</i> when re
18750 69 6e 64 65 78 69 6e 67 20 61 0a 73 70 65 63 69  indexing a.speci
18760 66 69 63 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  fic table or ind
18770 65 78 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  ex...<tcl>.#####
18780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
187a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
187b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
187c0 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
187d0 6f 6e 20 52 45 50 4c 41 43 45 20 72 65 70 6c 61  on REPLACE repla
187e0 63 65 20 52 45 50 4c 41 43 45 0a 0a 3c 2f 74 63  ce REPLACE..</tc
187f0 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 50 4c  l>..<p>^The REPL
18800 41 43 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61  ACE command is a
18810 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
18820 22 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 7c 20  "[ON CONFLICT | 
18830 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43  INSERT OR REPLAC
18840 45 5d 22 0a 76 61 72 69 61 6e 74 20 6f 66 20 74  E]".variant of t
18850 68 65 20 5b 49 4e 53 45 52 54 5d 20 63 6f 6d 6d  he [INSERT] comm
18860 61 6e 64 2e 20 20 0a 54 68 69 73 20 61 6c 69 61  and.  .This alia
18870 73 20 69 73 20 70 72 6f 76 69 64 65 64 20 66 6f  s is provided fo
18880 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  r compatibility 
18890 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61  other SQL databa
188a0 73 65 20 65 6e 67 69 6e 65 73 2e 20 20 53 65 65  se engines.  See
188b0 20 74 68 65 20 0a 5b 49 4e 53 45 52 54 5d 20 63   the .[INSERT] c
188c0 6f 6d 6d 61 6e 64 20 64 6f 63 75 6d 65 6e 74 61  ommand documenta
188d0 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f  tion for additio
188e0 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
188f0 3c 2f 70 3e 20 20 0a 0a 3c 74 63 6c 3e 0a 23 23  </p>  ..<tcl>.##
18900 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18910 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18940 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
18950 63 74 69 6f 6e 20 53 45 4c 45 43 54 20 73 65 6c  ction SELECT sel
18960 65 63 74 20 7b 53 45 4c 45 43 54 20 71 75 65 72  ect {SELECT quer
18970 79 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  y}..BubbleDiagra
18980 6d 20 73 65 6c 65 63 74 2d 73 74 6d 74 20 31 0a  m select-stmt 1.
18990 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 65  BubbleDiagram se
189a0 6c 65 63 74 2d 63 6f 72 65 0a 42 75 62 62 6c 65  lect-core.Bubble
189b0 44 69 61 67 72 61 6d 20 72 65 73 75 6c 74 2d 63  Diagram result-c
189c0 6f 6c 75 6d 6e 0a 42 75 62 62 6c 65 44 69 61 67  olumn.BubbleDiag
189d0 72 61 6d 20 6a 6f 69 6e 2d 73 6f 75 72 63 65 0a  ram join-source.
189e0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69  BubbleDiagram si
189f0 6e 67 6c 65 2d 73 6f 75 72 63 65 0a 42 75 62 62  ngle-source.Bubb
18a00 6c 65 44 69 61 67 72 61 6d 20 6a 6f 69 6e 2d 6f  leDiagram join-o
18a10 70 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  p.BubbleDiagram 
18a20 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 0a  join-constraint.
18a30 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 6f 72  BubbleDiagram or
18a40 64 65 72 69 6e 67 2d 74 65 72 6d 0a 42 75 62 62  dering-term.Bubb
18a50 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d 70 6f 75  leDiagram compou
18a60 6e 64 2d 6f 70 65 72 61 74 6f 72 0a 3c 2f 74 63  nd-operator.</tc
18a70 6c 3e 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43  l>..<p>The SELEC
18a80 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75  T statement is u
18a90 73 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65  sed to query the
18aa0 20 64 61 74 61 62 61 73 65 2e 20 20 5e 54 68 65   database.  ^The
18ab0 0a 72 65 73 75 6c 74 20 6f 66 20 61 20 53 45 4c  .result of a SEL
18ac0 45 43 54 20 69 73 20 7a 65 72 6f 20 6f 72 20 6d  ECT is zero or m
18ad0 6f 72 65 20 72 6f 77 73 20 6f 66 20 64 61 74 61  ore rows of data
18ae0 20 77 68 65 72 65 20 65 61 63 68 20 72 6f 77 0a   where each row.
18af0 68 61 73 20 61 20 66 69 78 65 64 20 6e 75 6d 62  has a fixed numb
18b00 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 2e 20 20  er of columns.  
18b10 5e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63  ^The number of c
18b20 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 0a 72 65  olumns in the.re
18b30 73 75 6c 74 20 69 73 20 73 70 65 63 69 66 69 65  sult is specifie
18b40 64 20 62 79 20 74 68 65 20 65 78 70 72 65 73 73  d by the express
18b50 69 6f 6e 20 6c 69 73 74 20 69 6e 20 62 65 74 77  ion list in betw
18b60 65 65 6e 20 74 68 65 0a 53 45 4c 45 43 54 20 61  een the.SELECT a
18b70 6e 64 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 73  nd FROM keywords
18b80 2e 20 20 5e 41 6e 79 20 61 72 62 69 74 72 61 72  .  ^Any arbitrar
18b90 79 20 65 78 70 72 65 73 73 69 6f 6e 20 63 61 6e  y expression can
18ba0 20 62 65 20 75 73 65 64 0a 61 73 20 61 20 72 65   be used.as a re
18bb0 73 75 6c 74 2e 20 20 5e 49 66 20 61 20 72 65 73  sult.  ^If a res
18bc0 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ult expression i
18bd0 73 20 7d 0a 68 64 5f 70 75 74 73 20 22 5b 4f 70  s }.hd_puts "[Op
18be0 65 72 61 74 6f 72 20 2a 5d 20 74 68 65 6e 20 61  erator *] then a
18bf0 6c 6c 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6c  ll columns of al
18c00 6c 20 74 61 62 6c 65 73 20 61 72 65 20 73 75 62  l tables are sub
18c10 73 74 69 74 75 74 65 64 5c 6e 22 0a 68 64 5f 70  stituted\n".hd_p
18c20 75 74 73 20 22 66 6f 72 20 74 68 61 74 20 6f 6e  uts "for that on
18c30 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20 5e  e expression.  ^
18c40 28 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69  (If the expressi
18c50 6f 6e 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  on is the name o
18c60 66 5c 6e 22 0a 68 64 5f 70 75 74 73 20 22 61 20  f\n".hd_puts "a 
18c70 74 61 62 6c 65 20 66 6f 6c 6c 6f 77 65 64 20 62  table followed b
18c80 79 20 5b 4f 70 65 72 61 74 6f 72 20 2e 2a 5d 20  y [Operator .*] 
18c90 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
18ca0 69 73 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 5c 6e  is all columns\n
18cb0 22 0a 68 64 5f 70 75 74 73 20 7b 69 6e 20 74 68  ".hd_puts {in th
18cc0 61 74 20 6f 6e 65 20 74 61 62 6c 65 2e 3c 2f 70  at one table.</p
18cd0 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 44 49 53  >)^..<p>^The DIS
18ce0 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 63 61  TINCT keyword ca
18cf0 75 73 65 73 20 61 20 73 75 62 73 65 74 20 6f 66  uses a subset of
18d00 20 72 65 73 75 6c 74 20 72 6f 77 73 20 74 6f 20   result rows to 
18d10 62 65 20 72 65 74 75 72 6e 65 64 2c 20 0a 69 6e  be returned, .in
18d20 20 77 68 69 63 68 20 65 61 63 68 20 72 65 73 75   which each resu
18d30 6c 74 20 72 6f 77 20 69 73 20 64 69 66 66 65 72  lt row is differ
18d40 65 6e 74 2e 20 20 5e 4e 55 4c 4c 20 76 61 6c 75  ent.  ^NULL valu
18d50 65 73 20 61 72 65 20 6e 6f 74 20 74 72 65 61 74  es are not treat
18d60 65 64 20 61 73 20 0a 64 69 73 74 69 6e 63 74 20  ed as .distinct 
18d70 66 72 6f 6d 20 65 61 63 68 20 6f 74 68 65 72 2e  from each other.
18d80 20 20 5e 54 68 65 20 64 65 66 61 75 6c 74 20 62    ^The default b
18d90 65 68 61 76 69 6f 72 20 69 73 20 74 68 61 74 20  ehavior is that 
18da0 61 6c 6c 20 72 65 73 75 6c 74 20 72 6f 77 73 20  all result rows 
18db0 0a 62 65 20 72 65 74 75 72 6e 65 64 2c 20 77 68  .be returned, wh
18dc0 69 63 68 20 63 61 6e 20 62 65 20 6d 61 64 65 20  ich can be made 
18dd0 65 78 70 6c 69 63 69 74 20 77 69 74 68 20 74 68  explicit with th
18de0 65 20 6b 65 79 77 6f 72 64 20 41 4c 4c 2e 3c 2f  e keyword ALL.</
18df0 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 71 75 65 72  p>..<p>^The quer
18e00 79 20 69 73 20 65 78 65 63 75 74 65 64 20 61 67  y is executed ag
18e10 61 69 6e 73 74 20 6f 6e 65 20 6f 72 20 6d 6f 72  ainst one or mor
18e20 65 20 74 61 62 6c 65 73 20 73 70 65 63 69 66 69  e tables specifi
18e30 65 64 20 61 66 74 65 72 0a 74 68 65 20 46 52 4f  ed after.the FRO
18e40 4d 20 6b 65 79 77 6f 72 64 2e 20 20 5e 49 66 20  M keyword.  ^If 
18e50 6d 75 6c 74 69 70 6c 65 20 74 61 62 6c 65 73 20  multiple tables 
18e60 6e 61 6d 65 73 20 61 72 65 20 73 65 70 61 72 61  names are separa
18e70 74 65 64 20 62 79 20 63 6f 6d 6d 61 73 2c 0a 74  ted by commas,.t
18e80 68 65 6e 20 74 68 65 20 71 75 65 72 79 20 69 73  hen the query is
18e90 20 61 67 61 69 6e 73 74 20 74 68 65 20 63 72 6f   against the cro
18ea0 73 73 20 6a 6f 69 6e 20 6f 66 20 74 68 65 20 76  ss join of the v
18eb0 61 72 69 6f 75 73 20 74 61 62 6c 65 73 2e 0a 5e  arious tables..^
18ec0 54 68 65 20 66 75 6c 6c 20 53 51 4c 2d 39 32 20  The full SQL-92 
18ed0 6a 6f 69 6e 20 73 79 6e 74 61 78 20 63 61 6e 20  join syntax can 
18ee0 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20  also be used to 
18ef0 73 70 65 63 69 66 79 20 6a 6f 69 6e 73 2e 0a 5e  specify joins..^
18f00 41 20 73 75 62 2d 71 75 65 72 79 0a 69 6e 20 70  A sub-query.in p
18f10 61 72 65 6e 74 68 65 73 65 73 20 6d 61 79 20 62  arentheses may b
18f20 65 20 73 75 62 73 74 69 74 75 74 65 64 20 66 6f  e substituted fo
18f30 72 20 61 6e 79 20 74 61 62 6c 65 20 6e 61 6d 65  r any table name
18f40 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
18f50 75 73 65 2e 0a 5e 54 68 65 20 65 6e 74 69 72 65  use..^The entire
18f60 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6d 61 79   FROM clause may
18f70 20 62 65 20 6f 6d 69 74 74 65 64 2c 20 69 6e 20   be omitted, in 
18f80 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20 72  which case the r
18f90 65 73 75 6c 74 20 69 73 20 61 0a 73 69 6e 67 6c  esult is a.singl
18fa0 65 20 72 6f 77 20 63 6f 6e 73 69 73 74 69 6e 67  e row consisting
18fb0 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 6f   of the values o
18fc0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
18fd0 20 6c 69 73 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e   list..</p>..<p>
18fe0 5e 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73  ^The WHERE claus
18ff0 65 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  e can be used to
19000 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65   limit the numbe
19010 72 20 6f 66 20 72 6f 77 73 20 6f 76 65 72 0a 77  r of rows over.w
19020 68 69 63 68 20 74 68 65 20 71 75 65 72 79 20 6f  hich the query o
19030 70 65 72 61 74 65 73 2e 3c 2f 70 3e 0a 0a 3c 70  perates.</p>..<p
19040 3e 5e 54 68 65 20 47 52 4f 55 50 20 42 59 20 63  >^The GROUP BY c
19050 6c 61 75 73 65 20 63 61 75 73 65 73 20 6f 6e 65  lause causes one
19060 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66   or more rows of
19070 20 74 68 65 20 72 65 73 75 6c 74 20 74 6f 0a 62   the result to.b
19080 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20  e combined into 
19090 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  a single row of 
190a0 6f 75 74 70 75 74 2e 20 20 54 68 69 73 20 69 73  output.  This is
190b0 20 65 73 70 65 63 69 61 6c 6c 79 20 75 73 65 66   especially usef
190c0 75 6c 0a 77 68 65 6e 20 74 68 65 20 72 65 73 75  ul.when the resu
190d0 6c 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72  lt contains aggr
190e0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e  egate functions.
190f0 20 20 5e 54 68 65 20 65 78 70 72 65 73 73 69 6f    ^The expressio
19100 6e 73 20 69 6e 0a 74 68 65 20 47 52 4f 55 50 20  ns in.the GROUP 
19110 42 59 20 63 6c 61 75 73 65 20 64 6f 20 3c 65 6d  BY clause do <em
19120 3e 6e 6f 74 3c 2f 65 6d 3e 20 68 61 76 65 20 74  >not</em> have t
19130 6f 20 62 65 20 65 78 70 72 65 73 73 69 6f 6e 73  o be expressions
19140 20 74 68 61 74 0a 61 70 70 65 61 72 20 69 6e 20   that.appear in 
19150 74 68 65 20 72 65 73 75 6c 74 2e 20 20 5e 54 68  the result.  ^Th
19160 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20  e HAVING clause 
19170 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 57 48  is similar to WH
19180 45 52 45 20 65 78 63 65 70 74 0a 74 68 61 74 20  ERE except.that 
19190 48 41 56 49 4e 47 20 61 70 70 6c 69 65 73 20 61  HAVING applies a
191a0 66 74 65 72 20 67 72 6f 75 70 69 6e 67 20 68 61  fter grouping ha
191b0 73 20 6f 63 63 75 72 72 65 64 2e 20 20 5e 54 68  s occurred.  ^Th
191c0 65 20 48 41 56 49 4e 47 20 65 78 70 72 65 73 73  e HAVING express
191d0 69 6f 6e 0a 6d 61 79 20 72 65 66 65 72 20 74 6f  ion.may refer to
191e0 20 76 61 6c 75 65 73 2c 20 65 76 65 6e 20 61 67   values, even ag
191f0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
19200 73 2c 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20  s, that are not 
19210 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 3c 2f  in the result.</
19220 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4f 52 44 45  p>..<p>^The ORDE
19230 52 20 42 59 20 63 6c 61 75 73 65 20 63 61 75 73  R BY clause caus
19240 65 73 20 74 68 65 20 6f 75 74 70 75 74 20 72 6f  es the output ro
19250 77 73 20 74 6f 20 62 65 20 73 6f 72 74 65 64 2e  ws to be sorted.
19260 20 20 0a 5e 54 68 65 20 61 72 67 75 6d 65 6e 74    .^The argument
19270 20 74 6f 20 4f 52 44 45 52 20 42 59 20 69 73 20   to ORDER BY is 
19280 61 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  a list of expres
19290 73 69 6f 6e 73 20 74 68 61 74 20 61 72 65 20 75  sions that are u
192a0 73 65 64 20 61 73 20 74 68 65 0a 6b 65 79 20 66  sed as the.key f
192b0 6f 72 20 74 68 65 20 73 6f 72 74 2e 20 20 5e 54  or the sort.  ^T
192c0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 64  he expressions d
192d0 6f 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 62 65  o not have to be
192e0 20 70 61 72 74 20 6f 66 20 74 68 65 0a 72 65 73   part of the.res
192f0 75 6c 74 20 66 6f 72 20 61 20 73 69 6d 70 6c 65  ult for a simple
19300 20 53 45 4c 45 43 54 2c 20 62 75 74 20 69 6e 20   SELECT, but in 
19310 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
19320 54 20 65 61 63 68 20 73 6f 72 74 0a 65 78 70 72  T each sort.expr
19330 65 73 73 69 6f 6e 20 6d 75 73 74 20 65 78 61 63  ession must exac
19340 74 6c 79 20 6d 61 74 63 68 20 6f 6e 65 20 6f 66  tly match one of
19350 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75   the result colu
19360 6d 6e 73 2e 20 20 5e 45 61 63 68 0a 73 6f 72 74  mns.  ^Each.sort
19370 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
19380 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f  be optionally fo
19390 6c 6c 6f 77 65 64 20 62 79 20 61 20 43 4f 4c 4c  llowed by a COLL
193a0 41 54 45 20 6b 65 79 77 6f 72 64 20 61 6e 64 0a  ATE keyword and.
193b0 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f  the name of a co
193c0 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
193d0 20 75 73 65 64 20 66 6f 72 20 6f 72 64 65 72 69   used for orderi
193e0 6e 67 20 74 65 78 74 20 61 6e 64 2f 6f 72 0a 6b  ng text and/or.k
193f0 65 79 77 6f 72 64 73 20 41 53 43 20 6f 72 20 44  eywords ASC or D
19400 45 53 43 20 74 6f 20 73 70 65 63 69 66 79 20 74  ESC to specify t
19410 68 65 20 73 6f 72 74 20 6f 72 64 65 72 2e 3c 2f  he sort order.</
19420 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 74 65 72 6d  p>..<p>Each term
19430 20 6f 66 20 61 6e 20 4f 52 44 45 52 20 42 59 20   of an ORDER BY 
19440 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 70 72  expression is pr
19450 6f 63 65 73 73 65 64 20 61 73 20 66 6f 6c 6c 6f  ocessed as follo
19460 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c  ws:</p>..<ol>.<l
19470 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44  i><p>^If the ORD
19480 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
19490 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 69   is a constant i
194a0 6e 74 65 67 65 72 20 4b 20 74 68 65 6e 20 74 68  nteger K then th
194b0 65 0a 6f 75 74 70 75 74 20 69 73 20 6f 72 64 65  e.output is orde
194c0 72 65 64 20 62 79 20 74 68 65 20 4b 2d 74 68 20  red by the K-th 
194d0 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65  column of the re
194e0 73 75 6c 74 20 73 65 74 2e 3c 2f 70 3e 3c 2f 6c  sult set.</p></l
194f0 69 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68  i>.<li><p>^If th
19500 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  e ORDER BY expre
19510 73 73 69 6f 6e 20 69 73 20 61 6e 20 69 64 65 6e  ssion is an iden
19520 74 69 66 69 65 72 20 61 6e 64 20 6f 6e 65 20 6f  tifier and one o
19530 66 20 74 68 65 0a 6f 75 74 70 75 74 20 63 6f 6c  f the.output col
19540 75 6d 6e 73 20 68 61 73 20 61 6e 20 61 6c 69 61  umns has an alia
19550 73 20 62 79 20 74 68 65 20 73 61 6d 65 20 6e 61  s by the same na
19560 6d 65 2c 20 74 68 65 6e 20 74 68 65 20 6f 75 74  me, then the out
19570 70 75 74 20 69 73 0a 6f 72 64 65 72 65 64 20 62  put is.ordered b
19580 79 20 74 68 65 20 69 64 65 6e 74 69 66 69 65 64  y the identified
19590 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 3c 2f 6c 69   column.</p></li
195a0 3e 0a 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77  >.<li><p>^Otherw
195b0 69 73 65 2c 20 74 68 65 20 4f 52 44 45 52 20 42  ise, the ORDER B
195c0 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
195d0 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68  evaluated and th
195e0 65 20 6f 75 74 70 75 74 20 0a 69 73 20 6f 72 64  e output .is ord
195f0 65 72 65 64 20 62 79 20 74 68 65 20 76 61 6c 75  ered by the valu
19600 65 20 6f 66 20 74 68 61 74 20 65 78 70 72 65 73  e of that expres
19610 73 69 6f 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c  sion.</p></li>.<
19620 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 63  /ol>..<p>^In a c
19630 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 73  ompound SELECT s
19640 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 20 74 68  tatement, the th
19650 69 72 64 20 4f 52 44 45 52 20 42 59 20 6d 61 74  ird ORDER BY mat
19660 63 68 69 6e 67 20 72 75 6c 65 0a 72 65 71 75 69  ching rule.requi
19670 72 65 73 20 74 68 61 74 20 74 68 65 20 65 78 70  res that the exp
19680 72 65 73 73 69 6f 6e 20 62 65 20 69 64 65 6e 74  ression be ident
19690 69 63 61 6c 20 74 6f 20 6f 6e 65 20 6f 66 20 74  ical to one of t
196a0 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 0a 74 68  he columns in.th
196b0 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20 5e  e result set.  ^
196c0 28 54 68 65 20 74 68 72 65 65 20 72 75 6c 65 73  (The three rules
196d0 20 61 72 65 20 66 69 72 73 74 20 61 70 70 6c 69   are first appli
196e0 65 64 20 74 6f 20 74 68 65 20 6c 65 66 74 2d 6d  ed to the left-m
196f0 6f 73 74 0a 53 45 4c 45 43 54 20 69 6e 20 74 68  ost.SELECT in th
19700 65 20 63 6f 6d 70 6f 75 6e 64 2e 20 20 49 66 20  e compound.  If 
19710 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
19720 2c 20 74 68 65 20 73 65 61 72 63 68 20 73 74 6f  , the search sto
19730 70 73 2e 20 20 4f 74 68 65 72 77 69 73 65 2c 0a  ps.  Otherwise,.
19740 74 68 65 20 6e 65 78 74 20 53 45 4c 45 43 54 20  the next SELECT 
19750 74 6f 20 74 68 65 20 72 69 67 68 74 20 69 73 20  to the right is 
19760 74 72 69 65 64 2e 20 20 54 68 69 73 20 63 6f 6e  tried.  This con
19770 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 61 20 6d  tinues until a m
19780 61 74 63 68 0a 69 73 20 66 6f 75 6e 64 2e 29 5e  atch.is found.)^
19790 20 20 5e 45 61 63 68 20 74 65 72 6d 20 6f 66 20    ^Each term of 
197a0 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
197b0 75 73 65 20 69 73 20 70 72 6f 63 65 73 73 65 64  use is processed
197c0 20 73 65 70 61 72 61 74 65 6c 79 20 0a 61 6e 64   separately .and
197d0 20 6d 61 79 20 63 6f 6d 65 20 66 72 6f 6d 20 64   may come from d
197e0 69 66 66 65 72 65 6e 74 20 53 45 4c 45 43 54 20  ifferent SELECT 
197f0 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68  statements in th
19800 65 20 63 6f 6d 70 6f 75 6e 64 2e 3c 2f 70 3e 0a  e compound.</p>.
19810 0a 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20 63  .<p>^The LIMIT c
19820 6c 61 75 73 65 20 70 6c 61 63 65 73 20 61 6e 20  lause places an 
19830 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74  upper bound on t
19840 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
19850 73 0a 72 65 74 75 72 6e 65 64 20 69 6e 20 74 68  s.returned in th
19860 65 20 72 65 73 75 6c 74 2e 20 20 5e 41 20 6e 65  e result.  ^A ne
19870 67 61 74 69 76 65 20 4c 49 4d 49 54 20 69 6e 64  gative LIMIT ind
19880 69 63 61 74 65 73 20 6e 6f 20 75 70 70 65 72 20  icates no upper 
19890 62 6f 75 6e 64 2e 0a 5e 54 68 65 20 6f 70 74 69  bound..^The opti
198a0 6f 6e 61 6c 20 4f 46 46 53 45 54 20 66 6f 6c 6c  onal OFFSET foll
198b0 6f 77 69 6e 67 20 4c 49 4d 49 54 20 73 70 65 63  owing LIMIT spec
198c0 69 66 69 65 73 20 68 6f 77 20 6d 61 6e 79 0a 72  ifies how many.r
198d0 6f 77 73 20 74 6f 20 73 6b 69 70 20 61 74 20 74  ows to skip at t
198e0 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20  he beginning of 
198f0 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a  the result set..
19900 5e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71  ^In a compound q
19910 75 65 72 79 2c 20 74 68 65 20 4c 49 4d 49 54 20  uery, the LIMIT 
19920 63 6c 61 75 73 65 20 6d 61 79 20 6f 6e 6c 79 20  clause may only 
19930 61 70 70 65 61 72 20 6f 6e 20 74 68 65 0a 66 69  appear on the.fi
19940 6e 61 6c 20 53 45 4c 45 43 54 20 73 74 61 74 65  nal SELECT state
19950 6d 65 6e 74 2e 0a 5e 54 68 65 20 6c 69 6d 69 74  ment..^The limit
19960 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20 74   is applied to t
19970 68 65 20 65 6e 74 69 72 65 20 71 75 65 72 79 20  he entire query 
19980 6e 6f 74 0a 74 6f 20 74 68 65 20 69 6e 64 69 76  not.to the indiv
19990 69 64 75 61 6c 20 53 45 4c 45 43 54 20 73 74 61  idual SELECT sta
199a0 74 65 6d 65 6e 74 20 74 6f 20 77 68 69 63 68 20  tement to which 
199b0 69 74 20 69 73 20 61 74 74 61 63 68 65 64 2e 0a  it is attached..
199c0 5e 4e 6f 74 65 20 74 68 61 74 20 69 66 20 74 68  ^Note that if th
199d0 65 20 4f 46 46 53 45 54 20 6b 65 79 77 6f 72 64  e OFFSET keyword
199e0 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20   is used in the 
199f0 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68  LIMIT clause, th
19a00 65 6e 20 74 68 65 0a 6c 69 6d 69 74 20 69 73 20  en the.limit is 
19a10 74 68 65 20 66 69 72 73 74 20 6e 75 6d 62 65 72  the first number
19a20 20 61 6e 64 20 74 68 65 20 6f 66 66 73 65 74 20   and the offset 
19a30 69 73 20 74 68 65 20 73 65 63 6f 6e 64 20 6e 75  is the second nu
19a40 6d 62 65 72 2e 20 20 5e 49 66 20 61 0a 63 6f 6d  mber.  ^If a.com
19a50 6d 61 20 69 73 20 75 73 65 64 20 69 6e 73 74 65  ma is used inste
19a60 61 64 20 6f 66 20 74 68 65 20 4f 46 46 53 45 54  ad of the OFFSET
19a70 20 6b 65 79 77 6f 72 64 2c 20 74 68 65 6e 20 74   keyword, then t
19a80 68 65 20 6f 66 66 73 65 74 20 69 73 20 74 68 65  he offset is the
19a90 0a 66 69 72 73 74 20 6e 75 6d 62 65 72 20 61 6e  .first number an
19aa0 64 20 74 68 65 20 6c 69 6d 69 74 20 69 73 20 74  d the limit is t
19ab0 68 65 20 73 65 63 6f 6e 64 20 6e 75 6d 62 65 72  he second number
19ac0 2e 20 20 54 68 69 73 20 73 65 65 6d 69 6e 67 0a  .  This seeming.
19ad0 63 6f 6e 74 72 61 64 69 74 69 6f 6e 20 69 73 20  contradition is 
19ae0 69 6e 74 65 6e 74 69 6f 6e 61 6c 20 2d 20 69 74  intentional - it
19af0 20 6d 61 78 69 6d 69 7a 65 73 20 63 6f 6d 70 61   maximizes compa
19b00 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 6c 65  tibility with le
19b10 67 61 63 79 0a 53 51 4c 20 64 61 74 61 62 61 73  gacy.SQL databas
19b20 65 20 73 79 73 74 65 6d 73 2e 0a 3c 2f 70 3e 0a  e systems..</p>.
19b30 0a 3c 70 3e 5e 41 20 63 6f 6d 70 6f 75 6e 64 20  .<p>^A compound 
19b40 53 45 4c 45 43 54 20 69 73 20 66 6f 72 6d 65 64  SELECT is formed
19b50 20 66 72 6f 6d 20 74 77 6f 20 6f 72 20 6d 6f 72   from two or mor
19b60 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 73  e simple SELECTs
19b70 20 63 6f 6e 6e 65 63 74 65 64 0a 62 79 20 6f 6e   connected.by on
19b80 65 20 6f 66 20 74 68 65 20 6f 70 65 72 61 74 6f  e of the operato
19b90 72 73 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20  rs UNION, UNION 
19ba0 41 4c 4c 2c 20 49 4e 54 45 52 53 45 43 54 2c 20  ALL, INTERSECT, 
19bb0 6f 72 20 45 58 43 45 50 54 2e 20 20 5e 49 6e 0a  or EXCEPT.  ^In.
19bc0 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
19bd0 54 2c 20 61 6c 6c 20 74 68 65 20 63 6f 6e 73 74  T, all the const
19be0 69 74 75 65 6e 74 20 53 45 4c 45 43 54 73 20 6d  ituent SELECTs m
19bf0 75 73 74 20 73 70 65 63 69 66 79 20 74 68 65 0a  ust specify the.
19c00 73 61 6d 65 20 6e 75 6d 62 65 72 20 6f 66 20 72  same number of r
19c10 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20 20  esult columns.  
19c20 5e 54 68 65 72 65 20 6d 61 79 20 62 65 20 6f 6e  ^There may be on
19c30 6c 79 20 61 20 73 69 6e 67 6c 65 20 4f 52 44 45  ly a single ORDE
19c40 52 20 42 59 0a 63 6c 61 75 73 65 20 61 74 20 74  R BY.clause at t
19c50 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 63 6f  he end of the co
19c60 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 20 20  mpound SELECT.  
19c70 5e 54 68 65 20 55 4e 49 4f 4e 20 61 6e 64 20 55  ^The UNION and U
19c80 4e 49 4f 4e 20 41 4c 4c 0a 6f 70 65 72 61 74 6f  NION ALL.operato
19c90 72 73 20 63 6f 6d 62 69 6e 65 20 74 68 65 20 72  rs combine the r
19ca0 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 53 45  esults of the SE
19cb0 4c 45 43 54 73 20 74 6f 20 74 68 65 20 72 69 67  LECTs to the rig
19cc0 68 74 20 61 6e 64 20 6c 65 66 74 20 69 6e 74 6f  ht and left into
19cd0 0a 61 20 73 69 6e 67 6c 65 20 62 69 67 20 74 61  .a single big ta
19ce0 62 6c 65 2e 20 20 5e 54 68 65 20 64 69 66 66 65  ble.  ^The diffe
19cf0 72 65 6e 63 65 20 69 73 20 74 68 61 74 20 69 6e  rence is that in
19d00 20 55 4e 49 4f 4e 20 61 6c 6c 20 72 65 73 75 6c   UNION all resul
19d10 74 20 72 6f 77 73 0a 61 72 65 20 64 69 73 74 69  t rows.are disti
19d20 6e 63 74 20 77 68 65 72 65 20 69 6e 20 55 4e 49  nct where in UNI
19d30 4f 4e 20 41 4c 4c 20 74 68 65 72 65 20 6d 61 79  ON ALL there may
19d40 20 62 65 20 64 75 70 6c 69 63 61 74 65 73 2e 0a   be duplicates..
19d50 5e 54 68 65 20 49 4e 54 45 52 53 45 43 54 20 6f  ^The INTERSECT o
19d60 70 65 72 61 74 6f 72 20 74 61 6b 65 73 20 74 68  perator takes th
19d70 65 20 69 6e 74 65 72 73 65 63 74 69 6f 6e 20 6f  e intersection o
19d80 66 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  f the results of
19d90 20 74 68 65 0a 6c 65 66 74 20 61 6e 64 20 72 69   the.left and ri
19da0 67 68 74 20 53 45 4c 45 43 54 73 2e 20 20 5e 45  ght SELECTs.  ^E
19db0 58 43 45 50 54 20 74 61 6b 65 73 20 74 68 65 20  XCEPT takes the 
19dc0 72 65 73 75 6c 74 20 6f 66 20 6c 65 66 74 20 53  result of left S
19dd0 45 4c 45 43 54 20 61 66 74 65 72 0a 72 65 6d 6f  ELECT after.remo
19de0 76 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 73  ving the results
19df0 20 6f 66 20 74 68 65 20 72 69 67 68 74 20 53 45   of the right SE
19e00 4c 45 43 54 2e 20 20 5e 57 68 65 6e 20 74 68 72  LECT.  ^When thr
19e10 65 65 20 6f 72 20 6d 6f 72 65 20 53 45 4c 45 43  ee or more SELEC
19e20 54 73 0a 61 72 65 20 63 6f 6e 6e 65 63 74 65 64  Ts.are connected
19e30 20 69 6e 74 6f 20 61 20 63 6f 6d 70 6f 75 6e 64   into a compound
19e40 2c 20 74 68 65 79 20 67 72 6f 75 70 20 66 72 6f  , they group fro
19e50 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e  m left to right.
19e60 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23  </p>...<tcl>.###
19e70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19e80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19e90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19ea0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19eb0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
19ec0 69 6f 6e 20 55 50 44 41 54 45 20 75 70 64 61 74  ion UPDATE updat
19ed0 65 20 7b 55 50 44 41 54 45 20 2a 55 50 44 41 54  e {UPDATE *UPDAT
19ee0 45 73 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  Es}..BubbleDiagr
19ef0 61 6d 20 75 70 64 61 74 65 2d 73 74 6d 74 20 31  am update-stmt 1
19f00 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 71  .BubbleDiagram q
19f10 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e  ualified-table-n
19f20 61 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  ame.</tcl>..<p>^
19f30 54 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  The UPDATE state
19f40 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20  ment is used to 
19f50 63 68 61 6e 67 65 20 74 68 65 20 76 61 6c 75 65  change the value
19f60 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 0a   of columns in .
19f70 73 65 6c 65 63 74 65 64 20 72 6f 77 73 20 6f 66  selected rows of
19f80 20 61 20 74 61 62 6c 65 2e 20 20 5e 45 61 63 68   a table.  ^Each
19f90 20 61 73 73 69 67 6e 6d 65 6e 74 20 69 6e 20 61   assignment in a
19fa0 6e 20 55 50 44 41 54 45 20 73 70 65 63 69 66 69  n UPDATE specifi
19fb0 65 73 0a 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  es.a column name
19fc0 20 74 6f 20 74 68 65 20 6c 65 66 74 20 6f 66 20   to the left of 
19fd0 74 68 65 20 65 71 75 61 6c 73 20 73 69 67 6e 20  the equals sign 
19fe0 61 6e 64 20 61 6e 20 61 72 62 69 74 72 61 72 79  and an arbitrary
19ff0 20 65 78 70 72 65 73 73 69 6f 6e 0a 74 6f 20 74   expression.to t
1a000 68 65 20 72 69 67 68 74 2e 20 20 5e 54 68 65 20  he right.  ^The 
1a010 65 78 70 72 65 73 73 69 6f 6e 73 20 6d 61 79 20  expressions may 
1a020 75 73 65 20 74 68 65 20 76 61 6c 75 65 73 20 6f  use the values o
1a030 66 20 6f 74 68 65 72 20 63 6f 6c 75 6d 6e 73 2e  f other columns.
1a040 0a 5e 41 6c 6c 20 65 78 70 72 65 73 73 69 6f 6e  .^All expression
1a050 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 20  s are evaluated 
1a060 62 65 66 6f 72 65 20 61 6e 79 20 61 73 73 69 67  before any assig
1a070 6e 6d 65 6e 74 73 20 61 72 65 20 6d 61 64 65 2e  nments are made.
1a080 0a 5e 41 20 57 48 45 52 45 20 63 6c 61 75 73 65  .^A WHERE clause
1a090 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
1a0a0 72 65 73 74 72 69 63 74 20 77 68 69 63 68 20 72  restrict which r
1a0b0 6f 77 73 20 61 72 65 20 75 70 64 61 74 65 64 2e  ows are updated.
1a0c0 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70  </p>..<p>^The op
1a0d0 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d  tional conflict-
1a0e0 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20 74 68  clause allows th
1a0f0 65 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20  e specification 
1a100 6f 66 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76  of an alternativ
1a110 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e  e.constraint con
1a120 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
1a130 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73   algorithm to us
1a140 65 20 64 75 72 69 6e 67 20 74 68 69 73 20 6f 6e  e during this on
1a150 65 20 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64  e UPDATE command
1a160 2e 0a 53 65 65 20 74 68 65 20 73 65 63 74 69 6f  ..See the sectio
1a170 6e 20 74 69 74 6c 65 64 0a 5b 4f 4e 20 43 4f 4e  n titled.[ON CON
1a180 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74  FLICT] for addit
1a190 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
1a1a0 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73 74  n.</p>..<h3>Rest
1a1b0 72 69 63 74 69 6f 6e 73 20 6f 6e 20 55 50 44 41  rictions on UPDA
1a1c0 54 45 20 53 74 61 74 65 6d 65 6e 74 73 20 57 69  TE Statements Wi
1a1d0 74 68 69 6e 20 43 52 45 41 54 45 20 54 52 49 47  thin CREATE TRIG
1a1e0 47 45 52 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68  GER</h3>..<p>^Th
1a1f0 65 72 65 20 61 72 65 20 61 64 64 69 74 69 6f 6e  ere are addition
1a200 61 6c 20 73 79 6e 74 61 78 20 72 65 73 74 72 69  al syntax restri
1a210 63 74 69 6f 6e 73 20 6f 6e 20 55 50 44 41 54 45  ctions on UPDATE
1a220 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74   statements that
1a230 0a 6f 63 63 75 72 20 77 69 74 68 69 6e 20 74 68  .occur within th
1a240 65 20 62 6f 64 79 20 6f 66 20 61 20 5b 43 52 45  e body of a [CRE
1a250 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61  ATE TRIGGER] sta
1a260 74 65 6d 65 6e 74 2e 20 20 5e 54 68 65 20 3c 69  tement.  ^The <i
1a270 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 0a  >table-name</i>.
1a280 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 6d 75  of the UPDATE mu
1a290 73 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69 65  st be unqualifie
1a2a0 64 2e 20 0a 5e 28 49 6e 20 6f 74 68 65 72 20 77  d. .^(In other w
1a2b0 6f 72 64 73 2c 20 74 68 65 20 3c 69 3e 64 61 74  ords, the <i>dat
1a2c0 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62  abase-name</i><b
1a2d0 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78 20 0a 6f  >.</b> prefix .o
1a2e0 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  n the table name
1a2f0 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 69   of the UPDATE i
1a300 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 77 69  s not allowed wi
1a310 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 29 5e  thin triggers.)^
1a320 0a 5e 54 68 65 20 74 61 62 6c 65 20 74 6f 20 62  .^The table to b
1a330 65 20 75 70 64 61 74 65 64 20 6d 75 73 74 20 62  e updated must b
1a340 65 20 69 6e 20 74 68 65 20 73 61 6d 65 0a 64 61  e in the same.da
1a350 74 61 62 61 73 65 20 61 73 20 74 68 65 20 74 61  tabase as the ta
1a360 62 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68 65  ble to which the
1a370 20 74 72 69 67 67 65 72 20 69 73 20 61 74 74 61   trigger is atta
1a380 63 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  ched.</p>..<p>^T
1a390 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e  he INDEXED BY an
1a3a0 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c  d NOT INDEXED cl
1a3b0 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20 61 6c  auses are not al
1a3c0 6c 6f 77 65 64 20 6f 6e 20 55 50 44 41 54 45 0a  lowed on UPDATE.
1a3d0 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
1a3e0 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a  n triggers.</p>.
1a3f0 0a 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20 63  .<p>^The LIMIT c
1a400 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41 54 45  lause for UPDATE
1a410 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64 20   is unsupported 
1a420 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
1a430 3c 2f 70 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f 6e  </p>..<h3>Option
1a440 61 6c 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44  al LIMIT and ORD
1a450 45 52 20 42 59 20 43 6c 61 75 73 65 73 3c 2f 68  ER BY Clauses</h
1a460 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53 51 4c 69  3>..<p>^(If SQLi
1a470 74 65 20 69 73 20 62 75 69 6c 74 20 77 69 74 68  te is built with
1a480 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41   the [SQLITE_ENA
1a490 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54  BLE_UPDATE_DELET
1a4a0 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c 65  E_LIMIT].compile
1a4b0 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 74 68 65  -time option the
1a4c0 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6f 66 20  n the syntax of 
1a4d0 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
1a4e0 6d 65 6e 74 20 69 73 20 65 78 74 65 6e 64 65 64  ment is extended
1a4f0 0a 77 69 74 68 20 6f 70 74 69 6f 6e 61 6c 20 4f  .with optional O
1a500 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49  RDER BY and LIMI
1a510 54 20 63 6c 61 75 73 65 73 29 5e 20 61 73 20 66  T clauses)^ as f
1a520 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 63  ollows:</p>..<tc
1a530 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  l>BubbleDiagram 
1a540 75 70 64 61 74 65 2d 73 74 6d 74 2d 6c 69 6d 69  update-stmt-limi
1a550 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  ted</tcl>..<p>^T
1a560 68 65 20 6f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49  he optional LIMI
1a570 54 20 63 6c 61 75 73 65 20 63 61 6e 20 62 65 20  T clause can be 
1a580 75 73 65 64 20 74 6f 20 6c 69 6d 69 74 20 74 68  used to limit th
1a590 65 20 6e 75 6d 62 65 72 20 6f 66 0a 72 6f 77 73  e number of.rows
1a5a0 20 6d 6f 64 69 66 65 64 2c 20 61 6e 64 20 74 68   modifed, and th
1a5b0 65 72 65 62 79 20 6c 69 6d 69 74 20 74 68 65 20  ereby limit the 
1a5c0 73 69 7a 65 20 6f 66 20 74 68 65 20 74 72 61 6e  size of the tran
1a5d0 73 61 63 74 69 6f 6e 2e 0a 5e 54 68 65 20 4f 52  saction..^The OR
1a5e0 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e  DER BY clause on
1a5f0 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65   an UPDATE state
1a600 6d 65 6e 74 0a 69 73 20 75 73 65 64 20 6f 6e 6c  ment.is used onl
1a610 79 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77  y to determine w
1a620 68 69 63 68 20 72 6f 77 73 20 66 61 6c 6c 0a 77  hich rows fall.w
1a630 69 74 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e  ithin the LIMIT.
1a640 20 20 5e 54 68 65 20 6f 72 64 65 72 20 69 6e 20    ^The order in 
1a650 77 68 69 63 68 20 72 6f 77 73 20 61 72 65 20 6d  which rows are m
1a660 6f 64 69 66 69 65 64 20 69 73 20 61 72 62 69 74  odified is arbit
1a670 72 61 72 79 0a 61 6e 64 20 69 73 20 6e 6f 74 20  rary.and is not 
1a680 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
1a690 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1a6a0 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  e.</p>..<tcl>.##
1a6b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a6c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a6d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a6e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a6f0 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
1a700 74 69 6f 6e 20 56 41 43 55 55 4d 20 76 61 63 75  tion VACUUM vacu
1a710 75 6d 20 56 41 43 55 55 4d 0a 0a 42 75 62 62 6c  um VACUUM..Bubbl
1a720 65 44 69 61 67 72 61 6d 20 76 61 63 75 75 6d 2d  eDiagram vacuum-
1a730 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c  stmt 1.</tcl>..<
1a740 70 3e 5e 57 68 65 6e 20 61 6e 20 6f 62 6a 65 63  p>^When an objec
1a750 74 20 28 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c  t (table, index,
1a760 20 74 72 69 67 67 65 72 2c 20 6f 72 20 76 69 65   trigger, or vie
1a770 77 29 20 69 73 20 64 72 6f 70 70 65 64 20 66 72  w) is dropped fr
1a780 6f 6d 20 74 68 65 20 0a 64 61 74 61 62 61 73 65  om the .database
1a790 2c 20 69 74 20 6c 65 61 76 65 73 20 62 65 68 69  , it leaves behi
1a7a0 6e 64 20 65 6d 70 74 79 20 73 70 61 63 65 2e 20  nd empty space. 
1a7b0 0a 5e 54 68 69 73 20 65 6d 70 74 79 20 73 70 61  .^This empty spa
1a7c0 63 65 20 77 69 6c 6c 20 62 65 20 72 65 75 73 65  ce will be reuse
1a7d0 64 20 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20  d the next time 
1a7e0 6e 65 77 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  new information 
1a7f0 69 73 0a 61 64 64 65 64 20 74 6f 20 74 68 65 20  is.added to the 
1a800 64 61 74 61 62 61 73 65 2e 20 20 42 75 74 20 69  database.  But i
1a810 6e 20 74 68 65 20 6d 65 61 6e 74 69 6d 65 2c 20  n the meantime, 
1a820 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
1a830 65 20 6d 69 67 68 74 0a 62 65 20 6c 61 72 67 65  e might.be large
1a840 72 20 74 68 61 6e 20 73 74 72 69 63 74 6c 79 20  r than strictly 
1a850 6e 65 63 65 73 73 61 72 79 2e 20 20 41 6c 73 6f  necessary.  Also
1a860 2c 20 66 72 65 71 75 65 6e 74 20 69 6e 73 65 72  , frequent inser
1a870 74 73 2c 20 75 70 64 61 74 65 73 2c 0a 61 6e 64  ts, updates,.and
1a880 20 64 65 6c 65 74 65 73 20 63 61 6e 20 63 61 75   deletes can cau
1a890 73 65 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69  se the informati
1a8a0 6f 6e 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  on in the databa
1a8b0 73 65 20 74 6f 20 62 65 63 6f 6d 65 0a 66 72 61  se to become.fra
1a8c0 67 6d 65 6e 74 65 64 20 2d 20 73 63 72 61 74 74  gmented - scratt
1a8d0 65 72 65 64 20 6f 75 74 20 61 6c 6c 20 61 63 72  ered out all acr
1a8e0 6f 73 73 20 74 68 65 20 64 61 74 61 62 61 73 65  oss the database
1a8f0 20 66 69 6c 65 20 72 61 74 68 65 72 0a 74 68 61   file rather.tha
1a900 6e 20 63 6c 75 73 74 65 72 65 64 20 74 6f 67 65  n clustered toge
1a910 74 68 65 72 20 69 6e 20 6f 6e 65 20 70 6c 61 63  ther in one plac
1a920 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  e.</p>..<p>^The 
1a930 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 63  VACUUM command c
1a940 6c 65 61 6e 73 0a 74 68 65 20 6d 61 69 6e 20 64  leans.the main d
1a950 61 74 61 62 61 73 65 20 62 79 20 63 6f 70 79 69  atabase by copyi
1a960 6e 67 20 69 74 73 20 63 6f 6e 74 65 6e 74 73 20  ng its contents 
1a970 74 6f 20 61 20 74 65 6d 70 6f 72 61 72 79 20 64  to a temporary d
1a980 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
1a990 20 0a 72 65 6c 6f 61 64 69 6e 67 20 74 68 65 20   .reloading the 
1a9a0 6f 72 69 67 69 6e 61 6c 20 64 61 74 61 62 61 73  original databas
1a9b0 65 20 66 69 6c 65 20 66 72 6f 6d 20 74 68 65 20  e file from the 
1a9c0 63 6f 70 79 2e 20 20 54 68 69 73 20 65 6c 69 6d  copy.  This elim
1a9d0 69 6e 61 74 65 73 20 0a 66 72 65 65 20 70 61 67  inates .free pag
1a9e0 65 73 2c 20 20 61 6c 69 67 6e 73 20 74 61 62 6c  es,  aligns tabl
1a9f0 65 20 64 61 74 61 20 74 6f 20 62 65 20 63 6f 6e  e data to be con
1aa00 74 69 67 75 6f 75 73 2c 20 61 6e 64 20 6f 74 68  tiguous, and oth
1aa10 65 72 77 69 73 65 20 63 6c 65 61 6e 73 20 0a 75  erwise cleans .u
1aa20 70 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  p the database f
1aa30 69 6c 65 20 73 74 72 75 63 74 75 72 65 2e 3c 2f  ile structure.</
1aa40 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55  p>..<p>^The VACU
1aa50 55 4d 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 63  UM command may c
1aa60 68 61 6e 67 65 20 74 68 65 20 0a 5b 52 4f 57 49  hange the .[ROWI
1aa70 44 20 7c 20 52 4f 57 49 44 73 5d 20 6f 66 20 65  D | ROWIDs] of e
1aa80 6e 74 72 69 65 73 20 69 6e 20 74 61 62 6c 65 73  ntries in tables
1aa90 20 74 68 61 74 20 64 6f 0a 6e 6f 74 20 68 61 76   that do.not hav
1aaa0 65 20 61 6e 20 65 78 70 6c 69 63 69 74 20 5b 49  e an explicit [I
1aab0 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
1aac0 45 59 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 56 41  EY].</p>..<p>^VA
1aad0 43 55 55 4d 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  CUUM only works 
1aae0 6f 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  on the main data
1aaf0 62 61 73 65 2e 0a 49 74 20 69 73 20 6e 6f 74 20  base..It is not 
1ab00 70 6f 73 73 69 62 6c 65 20 74 6f 20 56 41 43 55  possible to VACU
1ab10 55 4d 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  UM an attached d
1ab20 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70  atabase file.</p
1ab30 3e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55 55  >..<p>^The VACUU
1ab40 4d 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 66  M command will f
1ab50 61 69 6c 20 69 66 20 74 68 65 72 65 20 69 73 20  ail if there is 
1ab60 61 6e 20 61 63 74 69 76 65 20 74 72 61 6e 73 61  an active transa
1ab70 63 74 69 6f 6e 2e 0a 5e 54 68 65 20 56 41 43 55  ction..^The VACU
1ab80 55 4d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 20  UM command is a 
1ab90 6e 6f 2d 6f 70 20 66 6f 72 20 69 6e 2d 6d 65 6d  no-op for in-mem
1aba0 6f 72 79 20 64 61 74 61 62 61 73 65 73 2e 3c 2f  ory databases.</
1abb0 70 3e 0a 0a 3c 70 3e 5e 28 41 73 20 6f 66 20 53  p>..<p>^(As of S
1abc0 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e  QLite version 3.
1abd0 31 2c 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76  1, an alternativ
1abe0 65 20 74 6f 20 75 73 69 6e 67 20 74 68 65 20 56  e to using the V
1abf0 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 0a 69 73  ACUUM command.is
1ac00 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64   auto-vacuum mod
1ac10 65 2c 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67  e, enabled using
1ac20 20 74 68 65 20 0a 5b 61 75 74 6f 5f 76 61 63 75   the .[auto_vacu
1ac30 75 6d 5d 20 70 72 61 67 6d 61 2e 29 5e 20 20 5e  um] pragma.)^  ^
1ac40 57 68 65 6e 20 5b 61 75 74 6f 5f 76 61 63 75 75  When [auto_vacuu
1ac50 6d 5d 20 69 73 20 65 6e 61 62 6c 65 64 20 66 6f  m] is enabled fo
1ac60 72 20 61 20 64 61 74 61 62 61 73 65 2c 20 0a 6c  r a database, .l
1ac70 61 72 67 65 20 64 65 6c 65 74 65 73 20 63 61 75  arge deletes cau
1ac80 73 65 0a 74 68 65 20 73 69 7a 65 20 6f 66 20 74  se.the size of t
1ac90 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1aca0 20 74 6f 20 73 68 72 69 6e 6b 2e 20 20 48 6f 77   to shrink.  How
1acb0 65 76 65 72 2c 20 5b 61 75 74 6f 5f 76 61 63 75  ever, [auto_vacu
1acc0 75 6d 5d 0a 61 6c 73 6f 20 63 61 75 73 65 73 20  um].also causes 
1acd0 65 78 63 65 73 73 20 66 72 61 67 6d 65 6e 74 61  excess fragmenta
1ace0 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61  tion of the data
1acf0 62 61 73 65 20 66 69 6c 65 2e 20 20 5e 41 6e 64  base file.  ^And
1ad00 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 0a 64   [auto_vacuum].d
1ad10 6f 65 73 20 6e 6f 74 20 63 6f 6d 70 61 63 74 20  oes not compact 
1ad20 70 61 72 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64  partially filled
1ad30 20 70 61 67 65 73 20 6f 66 20 74 68 65 20 64 61   pages of the da
1ad40 74 61 62 61 73 65 20 61 73 20 56 41 43 55 55 4d  tabase as VACUUM
1ad50 0a 64 6f 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  .does.</p>..<p>^
1ad60 54 68 65 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20  The [page_size] 
1ad70 61 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f 76 61 63  and/or [auto_vac
1ad80 75 75 6d 5d 20 6d 6f 64 65 20 6f 66 20 61 20 64  uum] mode of a d
1ad90 61 74 61 62 61 73 65 20 63 61 6e 20 62 65 20 63  atabase can be c
1ada0 68 61 6e 67 65 64 0a 62 79 20 69 6e 76 6f 6b 69  hanged.by invoki
1adb0 6e 67 20 74 68 65 20 5b 70 61 67 65 5f 73 69 7a  ng the [page_siz
1adc0 65 20 70 72 61 67 6d 61 5d 20 61 6e 64 2f 6f 72  e pragma] and/or
1add0 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 20 70 72   [auto_vacuum pr
1ade0 61 67 6d 61 5d 20 61 6e 64 20 74 68 65 6e 0a 69  agma] and then.i
1adf0 6d 6d 65 64 69 61 74 65 6c 79 20 56 41 43 55 55  mmediately VACUU
1ae00 4d 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73  Ming the databas
1ae10 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  e.</p>..<tcl>.##
1ae20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ae30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ae40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ae50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ae60 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
1ae70 74 69 6f 6e 20 7b 49 4e 44 45 58 45 44 20 42 59  tion {INDEXED BY
1ae80 7d 20 69 6e 64 65 78 65 64 62 79 20 7b 7b 49 4e  } indexedby {{IN
1ae90 44 45 58 45 44 20 42 59 7d 20 7b 4e 4f 54 20 49  DEXED BY} {NOT I
1aea0 4e 44 45 58 45 44 7d 7d 0a 0a 3c 2f 74 63 6c 3e  NDEXED}}..</tcl>
1aeb0 0a 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44  .<p>^The INDEXED
1aec0 20 42 59 20 70 68 72 61 73 65 20 69 73 20 61 20   BY phrase is a 
1aed0 53 51 4c 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f  SQL extension fo
1aee0 75 6e 64 20 6f 6e 6c 79 20 69 6e 20 53 51 4c 69  und only in SQLi
1aef0 74 65 20 77 68 69 63 68 20 63 61 6e 0a 62 65 20  te which can.be 
1af00 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20 74  used to verify t
1af10 68 61 74 20 74 68 65 20 63 6f 72 72 65 63 74 20  hat the correct 
1af20 69 6e 64 69 63 65 73 20 61 72 65 20 62 65 69 6e  indices are bein
1af30 67 20 75 73 65 64 20 6f 6e 20 61 20 5b 44 45 4c  g used on a [DEL
1af40 45 54 45 5d 2c 0a 5b 53 45 4c 45 43 54 5d 2c 20  ETE],.[SELECT], 
1af50 6f 72 20 5b 55 50 44 41 54 45 5d 20 73 74 61 74  or [UPDATE] stat
1af60 65 6d 65 6e 74 2e 0a 5e 54 68 65 20 49 4e 44 45  ement..^The INDE
1af70 58 45 44 20 42 59 20 70 68 72 61 73 65 20 61 6c  XED BY phrase al
1af80 77 61 79 73 20 66 6f 6c 6c 6f 77 73 20 74 68 65  ways follows the
1af90 20 6e 61 6d 65 20 6f 66 20 61 20 74 61 62 6c 65   name of a table
1afa0 20 74 68 61 74 20 53 51 4c 69 74 65 20 77 69 6c   that SQLite wil
1afb0 6c 0a 62 65 20 72 65 61 64 69 6e 67 2e 20 20 54  l.be reading.  T
1afc0 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70 68  he INDEXED BY ph
1afd0 72 61 73 65 20 63 61 6e 20 62 65 20 73 65 65 6e  rase can be seen
1afe0 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   in the followin
1aff0 67 20 73 79 6e 74 61 78 0a 64 69 61 67 72 61 6d  g syntax.diagram
1b000 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 42 75  s:</p>..<tcl>.Bu
1b010 62 62 6c 65 44 69 61 67 72 61 6d 20 71 75 61 6c  bbleDiagram qual
1b020 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65  ified-table-name
1b030 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73  .BubbleDiagram s
1b040 69 6e 67 6c 65 2d 73 6f 75 72 63 65 0a 3c 2f 74  ingle-source.</t
1b050 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 49 4e  cl>..<p>^The "IN
1b060 44 45 58 45 44 20 42 59 20 69 6e 64 65 78 2d 6e  DEXED BY index-n
1b070 61 6d 65 22 20 63 6c 61 75 73 65 20 73 70 65 63  ame" clause spec
1b080 69 66 69 65 73 20 74 68 61 74 20 74 68 65 20 6e  ifies that the n
1b090 61 6d 65 64 20 69 6e 64 65 78 0a 6d 75 73 74 20  amed index.must 
1b0a0 62 65 20 75 73 65 64 20 69 6e 20 6f 72 64 65 72  be used in order
1b0b0 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 76 61 6c 75   to look up valu
1b0c0 65 73 20 6f 6e 20 74 68 65 20 70 72 65 63 65 64  es on the preced
1b0d0 69 6e 67 20 74 61 62 6c 65 2e 0a 5e 49 66 20 69  ing table..^If i
1b0e0 6e 64 65 78 2d 6e 61 6d 65 20 64 6f 65 73 20 6e  ndex-name does n
1b0f0 6f 74 20 65 78 69 73 74 20 6f 72 20 63 61 6e 6e  ot exist or cann
1b100 6f 74 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  ot be used for t
1b110 68 65 20 71 75 65 72 79 2c 20 74 68 65 6e 0a 74  he query, then.t
1b120 68 65 20 70 72 65 70 61 72 61 74 69 6f 6e 20 6f  he preparation o
1b130 66 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  f the SQL statem
1b140 65 6e 74 20 66 61 69 6c 73 2e 0a 5e 28 54 68 65  ent fails..^(The
1b150 20 22 4e 4f 54 20 49 4e 44 45 58 45 44 22 20 63   "NOT INDEXED" c
1b160 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 73 20  lause specifies 
1b170 74 68 61 74 20 6e 6f 20 69 6e 64 65 78 20 73 68  that no index sh
1b180 61 6c 6c 20 62 65 20 75 73 65 64 20 77 68 65 6e  all be used when
1b190 0a 61 63 63 65 73 73 69 6e 67 20 74 68 65 20 70  .accessing the p
1b1a0 72 65 63 65 64 69 6e 67 20 74 61 62 6c 65 2c 20  receding table, 
1b1b0 69 6e 63 6c 75 64 69 6e 67 20 69 6d 70 6c 69 65  including implie
1b1c0 64 20 69 6e 64 69 63 65 73 20 63 72 65 61 74 65  d indices create
1b1d0 20 62 79 0a 55 4e 49 51 55 45 20 61 6e 64 20 50   by.UNIQUE and P
1b1e0 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74  RIMARY KEY const
1b1f0 72 61 69 6e 74 73 2e 20 20 48 6f 77 65 76 65 72  raints.  However
1b200 2c 20 74 68 65 20 49 4e 54 45 47 45 52 20 50 52  , the INTEGER PR
1b210 49 4d 41 52 59 20 4b 45 59 0a 63 61 6e 20 73 74  IMARY KEY.can st
1b220 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20 6c  ill be used to l
1b230 6f 6f 6b 20 75 70 20 65 6e 74 72 69 65 73 20 65  ook up entries e
1b240 76 65 6e 20 77 68 65 6e 20 22 4e 4f 54 20 49 4e  ven when "NOT IN
1b250 44 45 58 45 44 22 20 69 73 20 73 70 65 63 69 66  DEXED" is specif
1b260 69 65 64 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 53  ied.)^</p>..<p>S
1b270 6f 6d 65 20 53 51 4c 20 64 61 74 61 62 61 73 65  ome SQL database
1b280 20 65 6e 67 69 6e 65 73 20 70 72 6f 76 69 64 65   engines provide
1b290 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 22 68   non-standard "h
1b2a0 69 6e 74 22 20 6d 65 63 68 61 6e 69 73 6d 73 20  int" mechanisms 
1b2b0 77 68 69 63 68 0a 63 61 6e 20 62 65 20 75 73 65  which.can be use
1b2c0 64 20 74 6f 20 67 69 76 65 20 74 68 65 20 71 75  d to give the qu
1b2d0 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 63 6c  ery optimizer cl
1b2e0 75 65 73 20 61 62 6f 75 74 20 77 68 61 74 20 69  ues about what i
1b2f0 6e 64 69 63 65 73 20 69 74 20 73 68 6f 75 6c 64  ndices it should
1b300 0a 75 73 65 20 66 6f 72 20 61 20 70 61 72 74 69  .use for a parti
1b310 63 75 6c 61 72 20 73 74 61 74 65 6d 65 6e 74 2e  cular statement.
1b320 20 20 54 68 65 20 49 4e 44 45 58 20 42 59 20 63    The INDEX BY c
1b330 6c 61 75 73 65 20 6f 66 20 53 51 4c 69 74 65 20  lause of SQLite 
1b340 69 73 20 0a 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e  is .<em>not</em>
1b350 20 61 20 68 69 6e 74 69 6e 67 20 6d 65 63 68 61   a hinting mecha
1b360 6e 69 73 6d 20 61 6e 64 20 69 74 20 73 68 6f 75  nism and it shou
1b370 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 61  ld not be used a
1b380 73 20 73 75 63 68 2e 0a 5e 54 68 65 20 49 4e 44  s such..^The IND
1b390 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 64  EXED BY clause d
1b3a0 6f 65 73 20 6e 6f 74 20 67 69 76 65 20 74 68 65  oes not give the
1b3b0 20 6f 70 74 69 6d 69 7a 65 72 20 68 69 6e 74 73   optimizer hints
1b3c0 20 61 62 6f 75 74 20 77 68 69 63 68 20 69 6e 64   about which ind
1b3d0 65 78 0a 74 6f 20 75 73 65 3b 20 69 74 20 67 69  ex.to use; it gi
1b3e0 76 65 73 20 74 68 65 20 6f 70 74 69 6d 69 7a 65  ves the optimize
1b3f0 72 20 61 20 72 65 71 75 69 72 65 6d 65 6e 74 20  r a requirement 
1b400 6f 66 20 77 68 69 63 68 20 69 6e 64 65 78 20 74  of which index t
1b410 6f 20 75 73 65 2e 0a 5e 49 66 20 74 68 65 20 71  o use..^If the q
1b420 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 69  uery optimizer i
1b430 73 20 75 6e 61 62 6c 65 20 74 6f 20 75 73 65 20  s unable to use 
1b440 74 68 65 20 69 6e 64 65 78 20 73 70 65 63 69 66  the index specif
1b450 69 65 64 20 62 79 20 74 68 65 0a 49 4e 44 45 58  ied by the.INDEX
1b460 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e   BY clause, then
1b470 20 74 68 65 20 71 75 65 72 79 20 77 69 6c 6c 20   the query will 
1b480 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72  fail with an err
1b490 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  or.</p>..<p>The 
1b4a0 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73  INDEXED BY claus
1b4b0 65 20 69 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d  e is <em>not</em
1b4c0 3e 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75  > intended for u
1b4d0 73 65 20 69 6e 20 74 75 6e 69 6e 67 0a 74 68 65  se in tuning.the
1b4e0 20 70 72 65 66 6f 72 6d 61 6e 63 65 20 6f 66 20   preformance of 
1b4f0 61 20 71 75 65 72 79 2e 20 20 54 68 65 20 69 6e  a query.  The in
1b500 74 65 6e 74 20 6f 66 20 74 68 65 20 49 4e 44 45  tent of the INDE
1b510 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 69 73  XED BY clause is
1b520 0a 74 6f 20 72 61 69 73 65 20 61 20 72 75 6e 2d  .to raise a run-
1b530 74 69 6d 65 20 65 72 72 6f 72 20 69 66 20 61 20  time error if a 
1b540 73 63 68 65 6d 61 20 63 68 61 6e 67 65 2c 20 73  schema change, s
1b550 75 63 68 20 61 73 20 64 72 6f 70 70 69 6e 67 20  uch as dropping 
1b560 6f 72 0a 63 72 65 61 74 69 6e 67 20 61 6e 20 69  or.creating an i
1b570 6e 64 65 78 2c 20 63 61 75 73 65 73 20 74 68 65  ndex, causes the
1b580 20 71 75 65 72 79 20 70 6c 61 6e 20 66 6f 72 20   query plan for 
1b590 61 20 74 69 6d 65 2d 73 65 6e 73 69 74 69 76 65  a time-sensitive
1b5a0 20 71 75 65 72 79 0a 74 6f 20 63 68 61 6e 67 65   query.to change
1b5b0 2e 20 20 54 68 65 20 49 4e 44 45 58 45 44 20 42  .  The INDEXED B
1b5c0 59 20 63 6c 61 75 73 65 20 69 73 20 64 65 73 69  Y clause is desi
1b5d0 67 6e 65 64 20 74 6f 20 68 65 6c 70 20 64 65 74  gned to help det
1b5e0 65 63 74 0a 75 6e 64 65 73 69 72 61 62 6c 65 20  ect.undesirable 
1b5f0 71 75 65 72 79 20 70 6c 61 6e 20 63 68 61 6e 67  query plan chang
1b600 65 73 20 64 75 72 69 6e 67 20 72 65 67 72 65 73  es during regres
1b610 73 69 6f 6e 20 74 65 73 74 69 6e 67 2e 0a 44 65  sion testing..De
1b620 76 65 6c 6f 70 65 72 73 20 61 72 65 20 61 64 6d  velopers are adm
1b630 6f 6e 69 73 68 65 64 20 74 6f 20 6f 6d 69 74 20  onished to omit 
1b640 61 6c 6c 20 75 73 65 20 6f 66 20 49 4e 44 45 58  all use of INDEX
1b650 45 44 20 42 59 20 64 75 72 69 6e 67 0a 61 70 70  ED BY during.app
1b660 6c 69 63 61 74 69 6f 6e 20 64 65 73 69 67 6e 2c  lication design,
1b670 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c   implementation,
1b680 20 74 65 73 74 69 6e 67 2c 20 61 6e 64 20 74 75   testing, and tu
1b690 6e 69 6e 67 2e 20 20 49 66 0a 49 4e 44 45 58 45  ning.  If.INDEXE
1b6a0 44 20 42 59 20 69 73 20 74 6f 20 62 65 20 75 73  D BY is to be us
1b6b0 65 64 20 61 74 20 61 6c 6c 2c 20 69 74 20 73 68  ed at all, it sh
1b6c0 6f 75 6c 64 20 62 65 20 69 6e 73 65 72 74 65 64  ould be inserted
1b6d0 20 61 74 20 74 68 65 20 76 65 72 79 0a 65 6e 64   at the very.end
1b6e0 20 6f 66 20 74 68 65 20 64 65 76 65 6c 6f 70 6d   of the developm
1b6f0 65 6e 74 20 70 72 6f 63 65 73 73 20 77 68 65 6e  ent process when
1b700 20 22 6c 6f 63 6b 69 6e 67 20 64 6f 77 6e 22 20   "locking down" 
1b710 61 20 64 65 73 69 67 6e 2e 3c 2f 70 3e 0a 0a 3c  a design.</p>..<
1b720 68 33 3e 53 65 65 20 41 6c 73 6f 3a 3c 2f 68 33  h3>See Also:</h3
1b730 3e 0a 0a 3c 70 3e 54 68 65 20 5b 73 71 6c 69 74  >..<p>The [sqlit
1b740 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 29  e3_stmt_status()
1b750 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63  ] C/C++ interfac
1b760 65 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  e together with 
1b770 74 68 65 0a 5b 53 51 4c 49 54 45 5f 53 54 4d 54  the.[SQLITE_STMT
1b780 53 54 41 54 55 53 5f 46 55 4c 4c 53 43 41 4e 5f  STATUS_FULLSCAN_
1b790 53 54 45 50 5d 20 61 6e 64 20 5b 53 51 4c 49 54  STEP] and [SQLIT
1b7a0 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52  E_STMTSTATUS_SOR
1b7b0 54 5d 20 76 65 72 62 73 0a 63 61 6e 20 62 65 20  T] verbs.can be 
1b7c0 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 61  used to detect a
1b7d0 74 20 72 75 6e 2d 74 69 6d 65 20 77 68 65 6e 20  t run-time when 
1b7e0 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  an SQL statement
1b7f0 20 69 73 20 6e 6f 74 0a 6d 61 6b 69 6e 67 20 65   is not.making e
1b800 66 66 65 63 74 69 76 65 20 75 73 65 20 6f 66 20  ffective use of 
1b810 69 6e 64 69 63 65 73 2e 20 20 4d 61 6e 79 20 61  indices.  Many a
1b820 70 70 6c 69 63 61 74 69 6f 6e 73 20 6d 61 79 20  pplications may 
1b830 70 72 65 66 65 72 20 74 6f 0a 75 73 65 20 74 68  prefer to.use th
1b840 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f  e [sqlite3_stmt_
1b850 73 74 61 74 75 73 28 29 5d 20 69 6e 74 65 72 66  status()] interf
1b860 61 63 65 20 74 6f 20 64 65 74 65 63 74 20 69 6e  ace to detect in
1b870 64 65 78 20 6d 69 73 75 73 65 0a 72 61 74 68 65  dex misuse.rathe
1b880 72 20 74 68 61 6e 20 74 68 65 20 49 4e 44 45 58  r than the INDEX
1b890 45 44 20 42 59 20 70 68 72 61 73 65 20 64 65 73  ED BY phrase des
1b8a0 63 72 69 62 65 64 20 68 65 72 65 2e 3c 2f 70 3e  cribed here.</p>
1b8b0 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
1b8c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b8d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b8e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b8f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b900 23 23 23 23 23 0a 23 20 41 20 6c 69 73 74 20 6f  #####.# A list o
1b910 66 20 6b 65 79 77 6f 72 64 73 2e 20 20 41 20 61  f keywords.  A a
1b920 73 74 65 72 69 73 6b 20 6f 63 63 75 72 73 20 61  sterisk occurs a
1b930 66 74 65 72 20 74 68 65 20 6b 65 79 77 6f 72 64  fter the keyword
1b940 20 69 66 20 69 74 20 69 73 20 6f 6e 0a 23 20 74   if it is on.# t
1b950 68 65 20 66 61 6c 6c 62 61 63 6b 20 6c 69 73 74  he fallback list
1b960 2e 0a 23 0a 73 65 74 20 6b 65 79 77 6f 72 64 5f  ..#.set keyword_
1b970 6c 69 73 74 20 5b 6c 73 6f 72 74 20 7b 0a 20 20  list [lsort {.  
1b980 20 41 42 4f 52 54 0a 20 20 20 41 43 54 49 4f 4e   ABORT.   ACTION
1b990 0a 20 20 20 41 44 44 0a 20 20 20 41 46 54 45 52  .   ADD.   AFTER
1b9a0 0a 20 20 20 41 4c 4c 0a 20 20 20 41 4c 54 45 52  .   ALL.   ALTER
1b9b0 0a 20 20 20 41 4e 41 4c 59 5a 45 0a 20 20 20 41  .   ANALYZE.   A
1b9c0 4e 44 0a 20 20 20 41 53 0a 20 20 20 41 53 43 0a  ND.   AS.   ASC.
1b9d0 20 20 20 41 54 54 41 43 48 0a 20 20 20 41 55 54     ATTACH.   AUT
1b9e0 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 42 45  OINCREMENT.   BE
1b9f0 46 4f 52 45 0a 20 20 20 42 45 47 49 4e 0a 20 20  FORE.   BEGIN.  
1ba00 20 42 45 54 57 45 45 4e 0a 20 20 20 42 59 0a 20   BETWEEN.   BY. 
1ba10 20 20 43 41 53 43 41 44 45 0a 20 20 20 43 41 53    CASCADE.   CAS
1ba20 45 0a 20 20 20 43 41 53 54 0a 20 20 20 43 48 45  E.   CAST.   CHE
1ba30 43 4b 0a 20 20 20 43 4f 4c 4c 41 54 45 0a 20 20  CK.   COLLATE.  
1ba40 20 43 4f 4c 55 4d 4e 0a 20 20 20 43 4f 4d 4d 49   COLUMN.   COMMI
1ba50 54 0a 20 20 20 43 4f 4e 46 4c 49 43 54 0a 20 20  T.   CONFLICT.  
1ba60 20 43 4f 4e 53 54 52 41 49 4e 54 0a 20 20 20 43   CONSTRAINT.   C
1ba70 52 45 41 54 45 0a 20 20 20 43 52 4f 53 53 0a 20  REATE.   CROSS. 
1ba80 20 20 43 55 52 52 45 4e 54 5f 44 41 54 45 0a 20    CURRENT_DATE. 
1ba90 20 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 0a 20    CURRENT_TIME. 
1baa0 20 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54    CURRENT_TIMEST
1bab0 41 4d 50 0a 20 20 20 44 41 54 41 42 41 53 45 0a  AMP.   DATABASE.
1bac0 20 20 20 44 45 46 41 55 4c 54 0a 20 20 20 44 45     DEFAULT.   DE
1bad0 46 45 52 52 45 44 0a 20 20 20 44 45 46 45 52 52  FERRED.   DEFERR
1bae0 41 42 4c 45 0a 20 20 20 44 45 4c 45 54 45 0a 20  ABLE.   DELETE. 
1baf0 20 20 44 45 53 43 0a 20 20 20 44 45 54 41 43 48    DESC.   DETACH
1bb00 0a 20 20 20 44 49 53 54 49 4e 43 54 0a 20 20 20  .   DISTINCT.   
1bb10 44 52 4f 50 0a 20 20 20 45 4e 44 0a 20 20 20 45  DROP.   END.   E
1bb20 41 43 48 0a 20 20 20 45 4c 53 45 0a 20 20 20 45  ACH.   ELSE.   E
1bb30 53 43 41 50 45 0a 20 20 20 45 58 43 45 50 54 0a  SCAPE.   EXCEPT.
1bb40 20 20 20 45 58 43 4c 55 53 49 56 45 0a 20 20 20     EXCLUSIVE.   
1bb50 45 58 49 53 54 53 0a 20 20 20 45 58 50 4c 41 49  EXISTS.   EXPLAI
1bb60 4e 0a 20 20 20 46 41 49 4c 0a 20 20 20 46 4f 52  N.   FAIL.   FOR
1bb70 0a 20 20 20 46 4f 52 45 49 47 4e 0a 20 20 20 46  .   FOREIGN.   F
1bb80 52 4f 4d 0a 20 20 20 46 55 4c 4c 0a 20 20 20 47  ROM.   FULL.   G
1bb90 4c 4f 42 0a 20 20 20 47 52 4f 55 50 0a 20 20 20  LOB.   GROUP.   
1bba0 48 41 56 49 4e 47 0a 20 20 20 49 46 0a 20 20 20  HAVING.   IF.   
1bbb0 49 47 4e 4f 52 45 0a 20 20 20 49 4d 4d 45 44 49  IGNORE.   IMMEDI
1bbc0 41 54 45 0a 20 20 20 49 4e 0a 20 20 20 49 4e 44  ATE.   IN.   IND
1bbd0 45 58 0a 20 20 20 49 4e 44 45 58 45 44 0a 20 20  EX.   INDEXED.  
1bbe0 20 49 4e 49 54 49 41 4c 4c 59 0a 20 20 20 49 4e   INITIALLY.   IN
1bbf0 4e 45 52 0a 20 20 20 49 4e 53 45 52 54 0a 20 20  NER.   INSERT.  
1bc00 20 49 4e 53 54 45 41 44 0a 20 20 20 49 4e 54 45   INSTEAD.   INTE
1bc10 52 53 45 43 54 0a 20 20 20 49 4e 54 4f 0a 20 20  RSECT.   INTO.  
1bc20 20 49 53 0a 20 20 20 49 53 4e 55 4c 4c 0a 20 20   IS.   ISNULL.  
1bc30 20 4a 4f 49 4e 0a 20 20 20 4b 45 59 0a 20 20 20   JOIN.   KEY.   
1bc40 4c 45 46 54 0a 20 20 20 4c 49 4b 45 0a 20 20 20  LEFT.   LIKE.   
1bc50 4c 49 4d 49 54 0a 20 20 20 4d 41 54 43 48 0a 20  LIMIT.   MATCH. 
1bc60 20 20 4e 41 54 55 52 41 4c 0a 20 20 20 4e 4f 0a    NATURAL.   NO.
1bc70 20 20 20 4e 4f 54 0a 20 20 20 4e 4f 54 4e 55 4c     NOT.   NOTNUL
1bc80 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20 20 4f 46 0a  L.   NULL.   OF.
1bc90 20 20 20 4f 46 46 53 45 54 0a 20 20 20 4f 4e 0a     OFFSET.   ON.
1bca0 20 20 20 4f 52 0a 20 20 20 4f 52 44 45 52 0a 20     OR.   ORDER. 
1bcb0 20 20 4f 55 54 45 52 0a 20 20 20 50 4c 41 4e 0a    OUTER.   PLAN.
1bcc0 20 20 20 50 52 41 47 4d 41 0a 20 20 20 50 52 49     PRAGMA.   PRI
1bcd0 4d 41 52 59 0a 20 20 20 51 55 45 52 59 0a 20 20  MARY.   QUERY.  
1bce0 20 52 41 49 53 45 0a 20 20 20 52 45 46 45 52 45   RAISE.   REFERE
1bcf0 4e 43 45 53 0a 20 20 20 52 45 47 45 58 50 0a 20  NCES.   REGEXP. 
1bd00 20 20 52 45 49 4e 44 45 58 0a 20 20 20 52 45 4c    REINDEX.   REL
1bd10 45 41 53 45 0a 20 20 20 52 45 4e 41 4d 45 0a 20  EASE.   RENAME. 
1bd20 20 20 52 45 50 4c 41 43 45 0a 20 20 20 52 45 53    REPLACE.   RES
1bd30 54 52 49 43 54 0a 20 20 20 52 49 47 48 54 0a 20  TRICT.   RIGHT. 
1bd40 20 20 52 4f 4c 4c 42 41 43 4b 0a 20 20 20 52 4f    ROLLBACK.   RO
1bd50 57 0a 20 20 20 53 41 56 45 50 4f 49 4e 54 0a 20  W.   SAVEPOINT. 
1bd60 20 20 53 45 4c 45 43 54 0a 20 20 20 53 45 54 0a    SELECT.   SET.
1bd70 20 20 20 54 41 42 4c 45 0a 20 20 20 54 45 4d 50     TABLE.   TEMP
1bd80 0a 20 20 20 54 45 4d 50 4f 52 41 52 59 0a 20 20  .   TEMPORARY.  
1bd90 20 54 48 45 4e 0a 20 20 20 54 4f 0a 20 20 20 54   THEN.   TO.   T
1bda0 52 41 4e 53 41 43 54 49 4f 4e 0a 20 20 20 54 52  RANSACTION.   TR
1bdb0 49 47 47 45 52 0a 20 20 20 55 4e 49 4f 4e 0a 20  IGGER.   UNION. 
1bdc0 20 20 55 4e 49 51 55 45 0a 20 20 20 55 50 44 41    UNIQUE.   UPDA
1bdd0 54 45 0a 20 20 20 55 53 49 4e 47 0a 20 20 20 56  TE.   USING.   V
1bde0 41 43 55 55 4d 0a 20 20 20 56 41 4c 55 45 53 0a  ACUUM.   VALUES.
1bdf0 20 20 20 56 49 45 57 0a 20 20 20 56 49 52 54 55     VIEW.   VIRTU
1be00 41 4c 0a 20 20 20 57 48 45 4e 0a 20 20 20 57 48  AL.   WHEN.   WH
1be10 45 52 45 0a 7d 5d 0a 0a 68 64 5f 70 75 74 73 20  ERE.}]..hd_puts 
1be20 7b 3c 44 49 56 20 63 6c 61 73 73 3d 22 70 64 66  {<DIV class="pdf
1be30 5f 73 65 63 74 69 6f 6e 22 3e 7d 0a 53 65 63 74  _section">}.Sect
1be40 69 6f 6e 20 7b 53 51 4c 69 74 65 20 4b 65 79 77  ion {SQLite Keyw
1be50 6f 72 64 73 7d 20 6b 65 79 77 6f 72 64 73 20 7b  ords} keywords {
1be60 7b 2a 53 51 4c 20 6b 65 79 77 6f 72 64 7d 20 7b  {*SQL keyword} {
1be70 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a 68  SQL keywords}}.h
1be80 64 5f 70 75 74 73 20 7b 3c 2f 44 49 56 3e 7d 0a  d_puts {</DIV>}.
1be90 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 53  </tcl>..<p>The S
1bea0 51 4c 20 73 74 61 6e 64 61 72 64 20 73 70 65 63  QL standard spec
1beb0 69 66 69 65 73 20 61 20 68 75 67 65 20 6e 75 6d  ifies a huge num
1bec0 62 65 72 20 6f 66 20 6b 65 79 77 6f 72 64 73 20  ber of keywords 
1bed0 77 68 69 63 68 20 6d 61 79 20 6e 6f 74 0a 62 65  which may not.be
1bee0 20 75 73 65 64 20 61 73 20 74 68 65 20 6e 61 6d   used as the nam
1bef0 65 73 20 6f 66 20 74 61 62 6c 65 73 2c 20 69 6e  es of tables, in
1bf00 64 69 63 65 73 2c 20 63 6f 6c 75 6d 6e 73 2c 20  dices, columns, 
1bf10 64 61 74 61 62 61 73 65 73 2c 20 75 73 65 72 2d  databases, user-
1bf20 64 65 66 69 6e 65 64 0a 66 75 6e 63 74 69 6f 6e  defined.function
1bf30 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20 76  s, collations, v
1bf40 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64  irtual table mod
1bf50 75 6c 65 73 2c 20 6f 72 20 61 6e 79 20 6f 74 68  ules, or any oth
1bf60 65 72 20 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2e  er named object.
1bf70 0a 54 68 65 20 6c 69 73 74 20 6f 66 20 6b 65 79  .The list of key
1bf80 77 6f 72 64 73 20 69 73 20 73 6f 20 6c 6f 6e 67  words is so long
1bf90 20 74 68 61 74 20 66 65 77 20 70 65 6f 70 6c 65   that few people
1bfa0 20 63 61 6e 20 72 65 6d 65 6d 62 65 72 20 74 68   can remember th
1bfb0 65 6d 20 61 6c 6c 2e 0a 46 6f 72 20 6d 6f 73 74  em all..For most
1bfc0 20 53 51 4c 20 63 6f 64 65 2c 20 79 6f 75 72 20   SQL code, your 
1bfd0 73 61 66 65 73 74 20 62 65 74 20 69 73 20 74 6f  safest bet is to
1bfe0 20 6e 65 76 65 72 20 75 73 65 20 61 6e 79 20 45   never use any E
1bff0 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 0a  nglish language.
1c000 77 6f 72 64 20 61 73 20 74 68 65 20 6e 61 6d 65  word as the name
1c010 20 6f 66 20 61 20 75 73 65 72 2d 64 65 66 69 6e   of a user-defin
1c020 65 64 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a  ed object.</p>..
1c030 3c 70 3e 49 66 20 79 6f 75 20 77 61 6e 74 20 74  <p>If you want t
1c040 6f 20 75 73 65 20 61 20 6b 65 79 77 6f 72 64 20  o use a keyword 
1c050 61 73 20 61 20 6e 61 6d 65 2c 20 79 6f 75 20 6e  as a name, you n
1c060 65 65 64 20 74 6f 20 71 75 6f 74 65 20 69 74 2e  eed to quote it.
1c070 20 20 54 68 65 72 65 0a 61 72 65 20 74 68 72 65    There.are thre
1c080 65 20 77 61 79 73 20 6f 66 20 71 75 6f 74 69 6e  e ways of quotin
1c090 67 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 53 51  g keywords in SQ
1c0a0 4c 69 74 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c  Lite:</p>..<p>.<
1c0b0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62  blockquote>.<tab
1c0c0 6c 65 3e 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c  le>.<tr>.<td val
1c0d0 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 27 6b 65  ign="top"><b>'ke
1c0e0 79 77 6f 72 64 27 3c 2f 62 3e 3c 2f 74 64 3e 3c  yword'</b></td><
1c0f0 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f  td width="20"></
1c100 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77  td>..<td>^A keyw
1c110 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65 20 71 75  ord in single qu
1c120 6f 74 65 73 20 69 73 20 61 20 73 74 72 69 6e 67  otes is a string
1c130 20 6c 69 74 65 72 61 6c 2e 3c 2f 74 64 3e 3c 2f   literal.</td></
1c140 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61  tr>..<tr>.<td va
1c150 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 22 6b  lign="top"><b>"k
1c160 65 79 77 6f 72 64 22 3c 2f 62 3e 3c 2f 74 64 3e  eyword"</b></td>
1c170 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e  <td></td>..<td>^
1c180 41 20 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f 75  A keyword in dou
1c190 62 6c 65 2d 71 75 6f 74 65 73 20 69 73 20 61 6e  ble-quotes is an
1c1a0 20 69 64 65 6e 74 69 66 69 65 72 2e 3c 2f 74 64   identifier.</td
1c1b0 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64  ></tr>..<tr>.<td
1c1c0 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
1c1d0 3e 26 23 39 31 3b 6b 65 79 77 6f 72 64 26 23 39  >&#91;keyword&#9
1c1e0 33 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c  3;</b></td><td><
1c1f0 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79  /td>..<td>^A key
1c200 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e  word enclosed in
1c210 20 73 71 75 61 72 65 20 62 72 61 63 6b 65 74 73   square brackets
1c220 20 69 73 20 0a 20 20 20 20 20 20 20 20 61 6e 20   is .        an 
1c230 69 64 65 6e 74 69 66 69 65 72 2e 20 20 54 68 69  identifier.  Thi
1c240 73 20 69 73 20 6e 6f 74 20 73 74 61 6e 64 61 72  s is not standar
1c250 64 20 53 51 4c 2e 20 20 54 68 69 73 20 71 75 6f  d SQL.  This quo
1c260 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20  ting mechanism. 
1c270 20 20 20 20 20 20 20 69 73 20 75 73 65 64 20 62         is used b
1c280 79 20 4d 53 20 41 63 63 65 73 73 20 61 6e 64 20  y MS Access and 
1c290 53 51 4c 20 53 65 72 76 65 72 20 61 6e 64 20 69  SQL Server and i
1c2a0 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 53 51  s included in SQ
1c2b0 4c 69 74 65 20 66 6f 72 0a 20 20 20 20 20 20 20  Lite for.       
1c2c0 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c   compatibility.<
1c2d0 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09  /td></tr>..<tr>.
1c2e0 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
1c2f0 3e 3c 62 3e 26 23 39 36 3b 6b 65 79 77 6f 72 64  ><b>&#96;keyword
1c300 26 23 39 36 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74  &#96;</b></td><t
1c310 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20  d></td>..<td>^A 
1c320 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64  keyword enclosed
1c330 20 69 6e 20 67 72 61 76 65 20 61 63 63 65 6e 74   in grave accent
1c340 73 20 28 41 53 43 49 49 20 63 6f 64 65 20 39 36  s (ASCII code 96
1c350 29 20 69 73 20 0a 20 20 20 20 20 20 20 20 61 6e  ) is .        an
1c360 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20 54 68   identifier.  Th
1c370 69 73 20 69 73 20 6e 6f 74 20 73 74 61 6e 64 61  is is not standa
1c380 72 64 20 53 51 4c 2e 20 20 54 68 69 73 20 71 75  rd SQL.  This qu
1c390 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a  oting mechanism.
1c3a0 20 20 20 20 20 20 20 20 69 73 20 75 73 65 64 20          is used 
1c3b0 62 79 20 4d 79 53 51 4c 20 61 6e 64 20 69 73 20  by MySQL and is 
1c3c0 69 6e 63 6c 75 64 65 64 20 69 6e 20 53 51 4c 69  included in SQLi
1c3d0 74 65 20 66 6f 72 0a 20 20 20 20 20 20 20 20 63  te for.        c
1c3e0 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74  ompatibility.</t
1c3f0 64 3e 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e  d></tr>.</table>
1c400 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c  .</blockquote>.<
1c410 2f 70 3e 0a 0a 3c 70 3e 46 6f 72 20 72 65 73 69  /p>..<p>For resi
1c420 6c 69 65 6e 63 65 20 77 68 65 6e 20 63 6f 6e 66  lience when conf
1c430 72 6f 6e 74 65 64 20 77 69 74 68 20 68 69 73 74  ronted with hist
1c440 6f 72 69 63 61 6c 20 53 51 4c 20 73 74 61 74 65  orical SQL state
1c450 6d 65 6e 74 73 2c 20 53 51 4c 69 74 65 0a 77 69  ments, SQLite.wi
1c460 6c 6c 20 73 6f 6d 65 74 69 6d 65 73 20 62 65 6e  ll sometimes ben
1c470 64 20 74 68 65 20 71 75 6f 74 69 6e 67 20 72 75  d the quoting ru
1c480 6c 65 73 20 61 62 6f 76 65 3a 3c 2f 70 3e 0a 0a  les above:</p>..
1c490 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20  <ul>.<li><p>^If 
1c4a0 61 20 6b 65 79 77 6f 72 64 20 69 6e 20 73 69 6e  a keyword in sin
1c4b0 67 6c 65 0a 71 75 6f 74 65 73 20 28 65 78 3a 20  gle.quotes (ex: 
1c4c0 3c 62 3e 27 6b 65 79 27 3c 2f 62 3e 20 6f 72 20  <b>'key'</b> or 
1c4d0 3c 62 3e 27 67 6c 6f 62 27 3c 2f 62 3e 29 20 69  <b>'glob'</b>) i
1c4e0 73 20 75 73 65 64 20 69 6e 20 61 20 63 6f 6e 74  s used in a cont
1c4f0 65 78 74 20 77 68 65 72 65 0a 61 6e 20 69 64 65  ext where.an ide
1c500 6e 74 69 66 69 65 72 20 69 73 20 61 6c 6c 6f 77  ntifier is allow
1c510 65 64 20 62 75 74 20 77 68 65 72 65 20 61 20 73  ed but where a s
1c520 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 73  tring literal is
1c530 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 2c 20 74 68   not allowed, th
1c540 65 6e 0a 74 68 65 20 74 6f 6b 65 6e 20 69 73 20  en.the token is 
1c550 75 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20 62 65  understood to be
1c560 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 69   an identifier i
1c570 6e 73 74 65 61 64 20 6f 66 20 61 20 73 74 72 69  nstead of a stri
1c580 6e 67 20 6c 69 74 65 72 61 6c 2e 0a 3c 2f 70 3e  ng literal..</p>
1c590 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49  </li>..<li><p>^I
1c5a0 66 20 61 20 6b 65 79 77 6f 72 64 20 69 6e 20 64  f a keyword in d
1c5b0 6f 75 62 6c 65 0a 71 75 6f 74 65 73 20 28 65 78  ouble.quotes (ex
1c5c0 3a 20 3c 62 3e 22 6b 65 79 22 3c 2f 62 3e 20 6f  : <b>"key"</b> o
1c5d0 72 20 3c 62 3e 22 67 6c 6f 62 22 3c 2f 62 3e 29  r <b>"glob"</b>)
1c5e0 20 69 73 20 75 73 65 64 20 69 6e 20 61 20 63 6f   is used in a co
1c5f0 6e 74 65 78 74 20 77 68 65 72 65 0a 69 74 20 63  ntext where.it c
1c600 61 6e 6e 6f 74 20 62 65 20 72 65 73 6f 6c 76 65  annot be resolve
1c610 64 20 74 6f 20 61 6e 20 69 64 65 6e 74 69 66 69  d to an identifi
1c620 65 72 20 62 75 74 20 77 68 65 72 65 20 61 20 73  er but where a s
1c630 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 0a 69 73  tring literal.is
1c640 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e 20 74   allowed, then t
1c650 68 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e 64 65  he token is unde
1c660 72 73 74 6f 6f 64 20 74 6f 20 62 65 20 61 20 73  rstood to be a s
1c670 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 6e  tring literal in
1c680 73 74 65 61 64 0a 6f 66 20 61 6e 20 69 64 65 6e  stead.of an iden
1c690 74 69 66 65 72 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a  tifer.</p></li>.
1c6a0 3c 2f 75 6c 3e 0a 0a 3c 70 3e 50 72 6f 67 72 61  </ul>..<p>Progra
1c6b0 6d 6d 65 72 73 20 61 72 65 20 63 61 75 74 69 6f  mmers are cautio
1c6c0 6e 65 64 20 6e 6f 74 20 74 6f 20 75 73 65 20 74  ned not to use t
1c6d0 68 65 20 74 77 6f 20 65 78 63 65 70 74 69 6f 6e  he two exception
1c6e0 73 20 64 65 73 63 72 69 62 65 64 20 69 6e 0a 74  s described in.t
1c6f0 68 65 20 70 72 65 76 69 6f 75 73 20 62 75 6c 6c  he previous bull
1c700 65 74 73 2e 20 20 57 65 20 65 6d 70 68 61 73 69  ets.  We emphasi
1c710 7a 65 20 74 68 61 74 20 74 68 65 79 20 65 78 69  ze that they exi
1c720 73 74 20 6f 6e 6c 79 20 73 6f 20 74 68 61 74 20  st only so that 
1c730 6f 6c 64 0a 61 6e 64 20 69 6c 6c 2d 66 6f 72 6d  old.and ill-form
1c740 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ed SQL statement
1c750 73 20 77 69 6c 6c 20 72 75 6e 20 63 6f 72 72 65  s will run corre
1c760 63 74 6c 79 2e 20 20 46 75 74 75 72 65 20 76 65  ctly.  Future ve
1c770 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65  rsions of.SQLite
1c780 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 74 6f   might change to
1c790 20 72 61 69 73 65 20 65 72 72 6f 72 73 20 69 6e   raise errors in
1c7a0 73 74 65 61 64 20 6f 66 20 61 63 63 65 70 74 69  stead of accepti
1c7b0 6e 67 20 74 68 65 20 6d 61 6c 66 6f 72 6d 65 64  ng the malformed
1c7c0 0a 73 74 61 74 65 6d 65 6e 74 73 20 63 6f 76 65  .statements cove
1c7d0 72 65 64 20 62 79 20 74 68 65 20 65 78 63 65 70  red by the excep
1c7e0 74 69 6f 6e 73 20 61 62 6f 76 65 2e 3c 2f 70 3e  tions above.</p>
1c7f0 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 61 64 64  ..<p>.SQLite add
1c800 73 20 6e 65 77 20 6b 65 79 77 6f 72 64 73 20 66  s new keywords f
1c810 72 6f 6d 20 74 69 6d 65 20 74 6f 20 74 69 6d 65  rom time to time
1c820 20 77 68 65 6e 20 69 74 20 74 61 6b 65 73 20 6f   when it takes o
1c830 6e 20 6e 65 77 20 66 65 61 74 75 72 65 73 2e 0a  n new features..
1c840 53 6f 20 74 6f 20 70 72 65 76 65 6e 74 20 79 6f  So to prevent yo
1c850 75 72 20 63 6f 64 65 20 66 72 6f 6d 20 62 65 69  ur code from bei
1c860 6e 67 20 62 72 6f 6b 65 6e 20 62 79 20 66 75 74  ng broken by fut
1c870 75 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73  ure enhancements
1c880 2c 20 79 6f 75 20 73 68 6f 75 6c 64 0a 6e 6f 72  , you should.nor
1c890 6d 61 6c 6c 79 20 71 75 6f 74 65 20 61 6e 79 20  mally quote any 
1c8a0 69 64 65 6e 74 69 66 69 65 72 20 74 68 61 74 20  identifier that 
1c8b0 69 73 20 61 6e 20 45 6e 67 6c 69 73 68 20 6c 61  is an English la
1c8c0 6e 67 75 61 67 65 20 77 6f 72 64 2c 20 65 76 65  nguage word, eve
1c8d0 6e 20 69 66 0a 79 6f 75 20 64 6f 20 6e 6f 74 20  n if.you do not 
1c8e0 68 61 76 65 20 74 6f 2e 0a 3c 2f 70 3e 0a 0a 3c  have to..</p>..<
1c8f0 70 3e 0a 54 68 65 20 6c 69 73 74 20 62 65 6c 6f  p>.The list belo
1c900 77 20 73 68 6f 77 73 20 61 6c 6c 20 70 6f 73 73  w shows all poss
1c910 69 62 6c 65 20 6b 65 79 77 6f 72 64 73 20 75 73  ible keywords us
1c920 65 64 20 62 79 20 61 6e 79 20 62 75 69 6c 64 20  ed by any build 
1c930 6f 66 0a 53 51 4c 69 74 65 20 72 65 67 61 72 64  of.SQLite regard
1c940 6c 65 73 73 20 6f 66 20 5b 63 6f 6d 70 69 6c 65  less of [compile
1c950 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 5d 2e 20  -time options]. 
1c960 20 0a 4d 6f 73 74 20 72 65 61 73 6f 6e 61 62 6c   .Most reasonabl
1c970 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73  e configurations
1c980 20 75 73 65 20 6d 6f 72 65 20 6f 72 20 61 6c 6c   use more or all
1c990 20 6f 66 20 74 68 65 73 65 20 6b 65 79 77 6f 72   of these keywor
1c9a0 64 73 2c 0a 62 75 74 20 73 6f 6d 65 20 6b 65 79  ds,.but some key
1c9b0 77 6f 72 64 73 20 6d 61 79 20 62 65 20 6f 6d 69  words may be omi
1c9c0 74 74 65 64 20 77 68 65 6e 20 53 51 4c 20 6c 61  tted when SQL la
1c9d0 6e 67 75 61 67 65 20 66 65 61 74 75 72 65 73 20  nguage features 
1c9e0 61 72 65 0a 64 69 73 61 62 6c 65 64 2e 0a 5e 28  are.disabled..^(
1c9f0 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68  Regardless of th
1ca00 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63  e compile-time c
1ca10 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 61 6e  onfiguration, an
1ca20 79 20 69 64 65 6e 74 69 66 69 65 72 20 74 68 61  y identifier tha
1ca30 74 20 69 73 20 6e 6f 74 20 6f 6e 0a 74 68 65 20  t is not on.the 
1ca40 66 6f 6c 6c 6f 77 69 6e 67 20 3c 74 63 6c 3e 68  following <tcl>h
1ca50 64 5f 70 75 74 73 20 5b 6c 6c 65 6e 67 74 68 20  d_puts [llength 
1ca60 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74 5d 3c 2f  $keyword_list]</
1ca70 74 63 6c 3e 20 65 6c 65 6d 65 6e 74 0a 6c 69 73  tcl> element.lis
1ca80 74 20 69 73 20 6e 6f 74 20 61 20 6b 65 79 77 6f  t is not a keywo
1ca90 72 64 20 74 6f 20 74 68 65 20 53 51 4c 20 70 61  rd to the SQL pa
1caa0 72 73 65 72 20 69 6e 20 53 51 4c 69 74 65 3a 0a  rser in SQLite:.
1cab0 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
1cac0 65 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d  e>.<table width=
1cad0 22 31 30 30 25 22 3e 3c 74 72 3e 0a 3c 74 64 20  "100%"><tr>.<td 
1cae0 61 6c 69 67 6e 3d 22 6c 65 66 74 22 20 76 61 6c  align="left" val
1caf0 69 67 6e 3d 22 74 6f 70 22 20 77 69 64 74 68 3d  ign="top" width=
1cb00 22 32 30 25 22 3e 0a 3c 74 63 6c 3e 0a 73 65 74  "20%">.<tcl>.set
1cb10 20 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79   n [llength $key
1cb20 77 6f 72 64 5f 6c 69 73 74 5d 0a 73 65 74 20 6e  word_list].set n
1cb30 43 6f 6c 20 35 0a 73 65 74 20 6e 52 6f 77 20 5b  Col 5.set nRow [
1cb40 65 78 70 72 20 7b 28 24 6e 2b 24 6e 43 6f 6c 2d  expr {($n+$nCol-
1cb50 31 29 2f 24 6e 43 6f 6c 7d 5d 0a 73 65 74 20 69  1)/$nCol}].set i
1cb60 20 30 0a 66 6f 72 65 61 63 68 20 77 6f 72 64 20   0.foreach word 
1cb70 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20 7b 0a  $keyword_list {.
1cb80 20 20 69 66 20 7b 24 69 3d 3d 24 6e 52 6f 77 7d    if {$i==$nRow}
1cb90 20 7b 0a 20 20 20 20 68 64 5f 70 75 74 73 20 22   {.    hd_puts "
1cba0 3c 2f 74 64 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  </td><td valign=
1cbb0 5c 22 74 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22  \"top\" align=\"
1cbc0 6c 65 66 74 5c 22 20 77 69 64 74 68 3d 5c 22 32  left\" width=\"2
1cbd0 30 25 5c 22 3e 22 0a 20 20 20 20 73 65 74 20 69  0%\">".    set i
1cbe0 20 31 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20   1.  } else {.  
1cbf0 20 20 69 6e 63 72 20 69 0a 20 20 7d 0a 20 20 68    incr i.  }.  h
1cc00 64 5f 70 75 74 73 20 22 24 77 6f 72 64 3c 62 72  d_puts "$word<br
1cc10 3e 5c 6e 22 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f  >\n".}.</tcl>.</
1cc20 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e  td></tr></table>
1cc30 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.