Documentation Source Text

Hex Artifact Content
Login

Artifact 6d658e45f1ce9eb4662bbcc9b8876e49388889a5:


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 7b 57 49 54 48 20 63 6c 61 75  .    {{WITH clau
03d0: 73 65 7d 20 77 69 74 68 63 6c 61 75 73 65 7d 0a  se} withclause}.
03e0: 20 20 20 20 7b 63 6f 6d 6d 65 6e 74 20 63 6f 6d      {comment com
03f0: 6d 65 6e 74 7d 0a 20 20 20 20 7b 45 58 50 4c 41  ment}.    {EXPLA
0400: 49 4e 20 65 78 70 6c 61 69 6e 7d 0a 20 20 20 20  IN explain}.    
0410: 7b 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72  {expression expr
0420: 7d 0a 20 20 20 20 7b 7b 42 45 47 49 4e 20 54 52  }.    {{BEGIN TR
0430: 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73  ANSACTION} trans
0440: 61 63 74 69 6f 6e 7d 0a 20 20 20 20 7b 7b 43 4f  action}.    {{CO
0450: 4d 4d 49 54 20 54 52 41 4e 53 41 43 54 49 4f 4e  MMIT TRANSACTION
0460: 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 43 4f  } transaction CO
0470: 4d 4d 49 54 7d 0a 20 20 20 20 7b 7b 45 4e 44 20  MMIT}.    {{END 
0480: 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61  TRANSACTION} tra
0490: 6e 73 61 63 74 69 6f 6e 20 43 4f 4d 4d 49 54 7d  nsaction COMMIT}
04a0: 0a 20 20 20 20 7b 7b 52 4f 4c 4c 42 41 43 4b 20  .    {{ROLLBACK 
04b0: 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61  TRANSACTION} tra
04c0: 6e 73 61 63 74 69 6f 6e 20 52 4f 4c 4c 42 41 43  nsaction ROLLBAC
04d0: 4b 7d 0a 20 20 20 20 7b 53 41 56 45 50 4f 49 4e  K}.    {SAVEPOIN
04e0: 54 20 73 61 76 65 70 6f 69 6e 74 7d 0a 20 20 20  T savepoint}.   
04f0: 20 7b 7b 52 45 4c 45 41 53 45 20 53 41 56 45 50   {{RELEASE SAVEP
0500: 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74 20  OINT} savepoint 
0510: 53 41 56 45 50 4f 49 4e 54 7d 0a 20 20 20 20 7b  SAVEPOINT}.    {
0520: 50 52 41 47 4d 41 20 70 72 61 67 6d 61 2e 68 74  PRAGMA pragma.ht
0530: 6d 6c 7d 0a 20 20 20 20 7b 7b 4f 4e 20 43 4f 4e  ml}.    {{ON CON
0540: 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63 6f  FLICT clause} co
0550: 6e 66 6c 69 63 74 7d 0a 20 20 20 20 7b 7b 43 52  nflict}.    {{CR
0560: 45 41 54 45 20 56 49 45 57 7d 20 63 72 65 61 74  EATE VIEW} creat
0570: 65 76 69 65 77 7d 0a 20 20 20 20 7b 7b 44 52 4f  eview}.    {{DRO
0580: 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65 77  P VIEW} dropview
0590: 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20 54  }.    {{CREATE T
05a0: 52 49 47 47 45 52 7d 20 63 72 65 61 74 65 74 72  RIGGER} createtr
05b0: 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 44 52 4f  igger}.    {{DRO
05c0: 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70 74  P TRIGGER} dropt
05d0: 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 41 54  rigger}.    {{AT
05e0: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 61  TACH DATABASE} a
05f0: 74 74 61 63 68 7d 0a 20 20 20 20 7b 7b 44 45 54  ttach}.    {{DET
0600: 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64 65  ACH DATABASE} de
0610: 74 61 63 68 7d 0a 20 20 20 20 20 20 7b 52 45 49  tach}.      {REI
0620: 4e 44 45 58 20 72 65 69 6e 64 65 78 7d 0a 20 20  NDEX reindex}.  
0630: 20 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d    {{ALTER TABLE}
0640: 20 61 6c 74 65 72 74 61 62 6c 65 7d 0a 20 20 20   altertable}.   
0650: 20 7b 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c   {{ANALYZE} anal
0660: 79 7a 65 7d 0a 20 20 20 20 7b 7b 49 4e 44 45 58  yze}.    {{INDEX
0670: 45 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79  ED BY} indexedby
0680: 7d 0a 20 20 20 20 7b 7b 61 67 67 72 65 67 61 74  }.    {{aggregat
0690: 65 20 66 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67  e functions} agg
06a0: 66 75 6e 63 20 61 67 67 66 75 6e 63 7d 0a 20 20  func aggfunc}.  
06b0: 20 20 7b 7b 63 6f 72 65 20 66 75 6e 63 74 69 6f    {{core functio
06c0: 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 63 6f 72  ns} corefunc cor
06d0: 65 66 75 6e 63 7d 0a 20 20 20 20 7b 7b 64 61 74  efunc}.    {{dat
06e0: 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
06f0: 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20 64  ions} datefunc d
0700: 61 74 65 66 75 6e 63 7d 0a 20 20 20 20 7b 6b 65  atefunc}.    {ke
0710: 79 77 6f 72 64 73 20 6b 65 79 77 6f 72 64 73 20  ywords keywords 
0720: 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a  {SQL keywords}}.
0730: 20 20 7d 0a 20 20 73 65 74 20 6c 78 20 7b 7d 0a    }.  set lx {}.
0740: 20 20 66 6f 72 65 61 63 68 20 7b 73 65 63 74 69    foreach {secti
0750: 6f 6e 7d 20 5b 6c 73 6f 72 74 20 2d 69 6e 64 65  on} [lsort -inde
0760: 78 20 30 20 2d 64 69 63 74 69 6f 6e 61 72 79 20  x 0 -dictionary 
0770: 24 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69  $lang_section_li
0780: 73 74 5d 20 7b 0a 20 20 20 20 66 6f 72 65 61 63  st] {.    foreac
0790: 68 20 7b 73 5f 74 69 74 6c 65 20 73 5f 74 61 67  h {s_title s_tag
07a0: 20 73 5f 6b 77 7d 20 24 73 65 63 74 69 6f 6e 20   s_kw} $section 
07b0: 7b 7d 0a 20 20 20 20 69 66 20 7b 24 73 5f 6b 77  {}.    if {$s_kw
07c0: 20 3d 3d 20 22 22 7d 20 7b 0a 20 20 20 20 20 20   == ""} {.      
07d0: 73 65 74 20 73 5f 6b 77 20 24 73 5f 74 69 74 6c  set s_kw $s_titl
07e0: 65 0a 20 20 20 20 7d 0a 20 20 20 20 6c 61 70 70  e.    }.    lapp
07f0: 65 6e 64 20 6c 78 20 5b 6c 69 73 74 20 24 73 5f  end lx [list $s_
0800: 6b 77 20 24 73 5f 74 69 74 6c 65 20 30 5d 0a 20  kw $s_title 0]. 
0810: 20 7d 0a 20 20 68 64 5f 6c 69 73 74 5f 6f 66 5f   }.  hd_list_of_
0820: 6c 69 6e 6b 73 20 7b 7d 20 33 34 30 20 24 6c 78  links {} 340 $lx
0830: 0a 3c 2f 74 63 6c 3e 0a 3c 2f 75 6c 3e 3c 2f 74  .</tcl>.</ul></t
0840: 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a  d></tr></table>.
0850: 0a 3c 70 3e 5e 54 68 65 20 72 6f 75 74 69 6e 65  .<p>^The routine
0860: 73 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  s [sqlite3_prepa
0870: 72 65 5f 76 32 28 29 5d 2c 20 5b 73 71 6c 69 74  re_v2()], [sqlit
0880: 65 33 5f 70 72 65 70 61 72 65 28 29 5d 2c 0a 5b  e3_prepare()],.[
0890: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31  sqlite3_prepare1
08a0: 36 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 70  6()], [sqlite3_p
08b0: 72 65 70 61 72 65 31 36 5f 76 32 28 29 5d 2c 20  repare16_v2()], 
08c0: 0a 5b 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29  .[sqlite3_exec()
08d0: 5d 2c 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f  ], and [sqlite3_
08e0: 67 65 74 5f 74 61 62 6c 65 28 29 5d 20 61 63 63  get_table()] acc
08f0: 65 70 74 0a 61 6e 20 53 51 4c 20 73 74 61 74 65  ept.an SQL state
0900: 6d 65 6e 74 20 6c 69 73 74 20 28 73 71 6c 2d 73  ment list (sql-s
0910: 74 6d 74 2d 6c 69 73 74 29 20 77 68 69 63 68 20  tmt-list) which 
0920: 69 73 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 2d 73  is a semicolon-s
0930: 65 70 61 72 61 74 65 64 0a 6c 69 73 74 20 6f 66  eparated.list of
0940: 20 73 74 61 74 65 6d 65 6e 74 73 2e 3c 2f 70 3e   statements.</p>
0950: 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61  ..<tcl>BubbleDia
0960: 67 72 61 6d 20 73 71 6c 2d 73 74 6d 74 2d 6c 69  gram sql-stmt-li
0970: 73 74 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 45 61 63  st</tcl>..<p>Eac
0980: 68 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  h SQL statement 
0990: 69 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  in the statement
09a0: 20 6c 69 73 74 20 69 73 20 61 6e 20 69 6e 73 74   list is an inst
09b0: 61 6e 63 65 20 6f 66 20 74 68 65 0a 66 6f 6c 6c  ance of the.foll
09c0: 6f 77 69 6e 67 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c  owing:</p>..<tcl
09d0: 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73  >BubbleDiagram s
09e0: 71 6c 2d 73 74 6d 74 3c 2f 74 63 6c 3e 0a 0a 3c  ql-stmt</tcl>..<
09f0: 74 63 6c 3e 0a 70 72 6f 63 20 4f 70 65 72 61 74  tcl>.proc Operat
0a00: 6f 72 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65  or {name} {.  re
0a10: 74 75 72 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f  turn "<font colo
0a20: 72 3d 5c 22 23 32 63 32 63 66 30 5c 22 3e 3c 62  r=\"#2c2cf0\"><b
0a30: 69 67 3e 24 6e 61 6d 65 3c 2f 62 69 67 3e 3c 2f  ig>$name</big></
0a40: 66 6f 6e 74 3e 22 0a 7d 0a 70 72 6f 63 20 4e 6f  font>".}.proc No
0a50: 6e 74 65 72 6d 69 6e 61 6c 20 7b 6e 61 6d 65 7d  nterminal {name}
0a60: 20 7b 0a 20 20 72 65 74 75 72 6e 20 22 3c 69 3e   {.  return "<i>
0a70: 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 66  <font color=\"#f
0a80: 66 33 34 33 34 5c 22 3e 24 6e 61 6d 65 3c 2f 66  f3434\">$name</f
0a90: 6f 6e 74 3e 3c 2f 69 3e 22 0a 7d 0a 70 72 6f 63  ont></i>".}.proc
0aa0: 20 4b 65 79 77 6f 72 64 20 7b 6e 61 6d 65 7d 20   Keyword {name} 
0ab0: 7b 0a 20 20 72 65 74 75 72 6e 20 22 3c 66 6f 6e  {.  return "<fon
0ac0: 74 20 63 6f 6c 6f 72 3d 5c 22 23 32 63 32 63 66  t color=\"#2c2cf
0ad0: 30 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e  0\">$name</font>
0ae0: 22 0a 7d 0a 70 72 6f 63 20 45 78 61 6d 70 6c 65  ".}.proc Example
0af0: 20 7b 74 65 78 74 7d 20 7b 0a 20 20 68 64 5f 70   {text} {.  hd_p
0b00: 75 74 73 20 22 3c 62 6c 6f 63 6b 71 75 6f 74 65  uts "<blockquote
0b10: 3e 3c 70 72 65 3e 24 74 65 78 74 3c 2f 70 72 65  ><pre>$text</pre
0b20: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 22 0a  ></blockquote>".
0b30: 7d 0a 0a 70 72 6f 63 20 53 65 63 74 69 6f 6e 20  }..proc Section 
0b40: 7b 6e 61 6d 65 20 6c 61 62 65 6c 20 6b 65 79 77  {name label keyw
0b50: 6f 72 64 73 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c  ords} {.  global
0b60: 20 44 4f 43 0a 20 20 68 64 5f 63 6c 6f 73 65 5f   DOC.  hd_close_
0b70: 6d 61 69 6e 0a 20 20 68 64 5f 6f 70 65 6e 5f 6d  main.  hd_open_m
0b80: 61 69 6e 20 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e  ain lang_$label.
0b90: 68 74 6d 6c 0a 20 20 68 64 5f 68 65 61 64 65 72  html.  hd_header
0ba0: 20 22 53 51 4c 69 74 65 20 51 75 65 72 79 20 4c   "SQLite Query L
0bb0: 61 6e 67 75 61 67 65 3a 20 24 6e 61 6d 65 22 20  anguage: $name" 
0bc0: 24 44 4f 43 2f 70 61 67 65 73 2f 6c 61 6e 67 2e  $DOC/pages/lang.
0bd0: 69 6e 0a 20 20 65 76 61 6c 20 68 64 5f 6b 65 79  in.  eval hd_key
0be0: 77 6f 72 64 73 20 24 6b 65 79 77 6f 72 64 73 0a  words $keywords.
0bf0: 20 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 24    if {[lsearch $
0c00: 6b 65 79 77 6f 72 64 73 20 24 6e 61 6d 65 5d 20  keywords $name] 
0c10: 3d 3d 20 2d 31 20 26 26 20 5b 6c 73 65 61 72 63  == -1 && [lsearc
0c20: 68 20 24 6b 65 79 77 6f 72 64 73 20 2a 24 6e 61  h $keywords *$na
0c30: 6d 65 5d 20 3d 3d 20 2d 31 7d 20 7b 0a 20 20 20  me] == -1} {.   
0c40: 20 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64   eval hd_keyword
0c50: 73 20 7b 20 24 6e 61 6d 65 20 7d 0a 20 20 7d 0a  s { $name }.  }.
0c60: 20 20 68 64 5f 70 75 74 73 20 7b 3c 64 69 76 20    hd_puts {<div 
0c70: 63 6c 61 73 73 3d 6e 6f 73 65 61 72 63 68 3e 7d  class=nosearch>}
0c80: 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 68 31 20  .  hd_puts {<h1 
0c90: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 53  align="center">S
0ca0: 51 4c 20 41 73 20 55 6e 64 65 72 73 74 6f 6f 64  QL As Understood
0cb0: 20 42 79 20 53 51 4c 69 74 65 3c 2f 68 31 3e 7d   By SQLite</h1>}
0cc0: 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 70 3e 3c  .  hd_puts {<p><
0cd0: 61 20 68 72 65 66 3d 22 6c 61 6e 67 2e 68 74 6d  a href="lang.htm
0ce0: 6c 22 3e 5b 54 6f 70 5d 3c 2f 61 3e 3c 2f 70 3e  l">[Top]</a></p>
0cf0: 7d 0a 20 20 68 64 5f 70 75 74 73 20 22 3c 68 32  }.  hd_puts "<h2
0d00: 3e 24 6e 61 6d 65 3c 2f 68 32 3e 22 0a 20 20 68  >$name</h2>".  h
0d10: 64 5f 70 75 74 73 20 7b 3c 2f 64 69 76 3e 7d 0a  d_puts {</div>}.
0d20: 7d 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  }..#############
0d30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d70: 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41 4c 54 45  ##.Section {ALTE
0d80: 52 20 54 41 42 4c 45 7d 20 61 6c 74 65 72 74 61  R TABLE} alterta
0d90: 62 6c 65 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c  ble {{ALTER TABL
0da0: 45 7d 20 7b 2a 41 4c 54 45 52 7d 7d 0a 0a 52 65  E} {*ALTER}}..Re
0db0: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
0dc0: 67 72 61 6d 20 61 6c 74 65 72 2d 74 61 62 6c 65  gram alter-table
0dd0: 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
0de0: 3e 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73  >SQLite supports
0df0: 20 61 20 6c 69 6d 69 74 65 64 20 73 75 62 73 65   a limited subse
0e00: 74 20 6f 66 20 41 4c 54 45 52 20 54 41 42 4c 45  t of ALTER TABLE
0e10: 2e 0a 54 68 65 20 41 4c 54 45 52 20 54 41 42 4c  ..The ALTER TABL
0e20: 45 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 53 51 4c  E command in SQL
0e30: 69 74 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 75  ite allows the u
0e40: 73 65 72 20 74 6f 20 72 65 6e 61 6d 65 20 61 20  ser to rename a 
0e50: 74 61 62 6c 65 0a 6f 72 20 74 6f 20 61 64 64 20  table.or to add 
0e60: 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 74 6f 20  a new column to 
0e70: 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c  an existing tabl
0e80: 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 28 54  e..</p>..<p> ^(T
0e90: 68 65 20 52 45 4e 41 4d 45 20 54 4f 20 73 79 6e  he RENAME TO syn
0ea0: 74 61 78 20 63 68 61 6e 67 65 73 20 74 68 65 20  tax changes the 
0eb0: 6e 61 6d 65 20 6f 66 20 3c 79 79 74 65 72 6d 3e  name of <yyterm>
0ec0: 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65  table-name</yyte
0ed0: 72 6d 3e 0a 74 6f 20 3c 79 79 74 65 72 6d 3e 6e  rm>.to <yyterm>n
0ee0: 65 77 2d 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79  ew-table-name</y
0ef0: 79 74 65 72 6d 3e 2e 29 5e 0a 54 68 69 73 20 63  yterm>.)^.This c
0f00: 6f 6d 6d 61 6e 64 20 0a 63 61 6e 6e 6f 74 20 62  ommand .cannot b
0f10: 65 20 75 73 65 64 20 74 6f 20 6d 6f 76 65 20 61  e used to move a
0f20: 20 74 61 62 6c 65 20 62 65 74 77 65 65 6e 20 61   table between a
0f30: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
0f40: 73 2c 20 6f 6e 6c 79 20 74 6f 20 72 65 6e 61 6d  s, only to renam
0f50: 65 20 0a 61 20 74 61 62 6c 65 20 77 69 74 68 69  e .a table withi
0f60: 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  n the same datab
0f70: 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 49  ase.</p>..<p> ^I
0f80: 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  f the table bein
0f90: 67 20 72 65 6e 61 6d 65 64 20 68 61 73 20 74 72  g renamed has tr
0fa0: 69 67 67 65 72 73 20 6f 72 20 69 6e 64 69 63 65  iggers or indice
0fb0: 73 2c 20 74 68 65 6e 20 74 68 65 73 65 20 72 65  s, then these re
0fc0: 6d 61 69 6e 0a 61 74 74 61 63 68 65 64 20 74 6f  main.attached to
0fd0: 20 74 68 65 20 74 61 62 6c 65 20 61 66 74 65 72   the table after
0fe0: 20 69 74 20 68 61 73 20 62 65 65 6e 20 72 65 6e   it has been ren
0ff0: 61 6d 65 64 2e 20 20 5e 48 6f 77 65 76 65 72 2c  amed.  ^However,
1000: 20 69 66 20 74 68 65 72 65 20 61 72 65 0a 61 6e   if there are.an
1010: 79 20 76 69 65 77 20 64 65 66 69 6e 69 74 69 6f  y view definitio
1020: 6e 73 2c 20 6f 72 20 73 74 61 74 65 6d 65 6e 74  ns, or statement
1030: 73 20 65 78 65 63 75 74 65 64 20 62 79 20 74 72  s executed by tr
1040: 69 67 67 65 72 73 20 74 68 61 74 20 72 65 66 65  iggers that refe
1050: 72 20 74 6f 0a 74 68 65 20 74 61 62 6c 65 20 62  r to.the table b
1060: 65 69 6e 67 20 72 65 6e 61 6d 65 64 2c 20 74 68  eing renamed, th
1070: 65 73 65 20 61 72 65 20 6e 6f 74 20 61 75 74 6f  ese are not auto
1080: 6d 61 74 69 63 61 6c 6c 79 20 6d 6f 64 69 66 69  matically modifi
1090: 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e 65  ed to use the ne
10a0: 77 0a 74 61 62 6c 65 20 6e 61 6d 65 2e 20 49 66  w.table name. If
10b0: 20 74 68 69 73 20 69 73 20 72 65 71 75 69 72 65   this is require
10c0: 64 2c 20 74 68 65 20 74 72 69 67 67 65 72 73 20  d, the triggers 
10d0: 6f 72 20 76 69 65 77 20 64 65 66 69 6e 69 74 69  or view definiti
10e0: 6f 6e 73 20 6d 75 73 74 20 62 65 0a 64 72 6f 70  ons must be.drop
10f0: 70 65 64 20 61 6e 64 20 72 65 63 72 65 61 74 65  ped and recreate
1100: 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e 65 77  d to use the new
1110: 20 74 61 62 6c 65 20 6e 61 6d 65 20 62 79 20 68   table name by h
1120: 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  and..</p>..<bloc
1130: 6b 71 75 6f 74 65 3e 3c 74 61 62 6c 65 20 62 6f  kquote><table bo
1140: 72 64 65 72 3d 22 31 22 20 63 65 6c 6c 70 61 64  rder="1" cellpad
1150: 64 69 6e 67 3d 22 31 30 22 3e 0a 3c 74 72 3e 3c  ding="10">.<tr><
1160: 74 64 3e 0a 3c 65 6d 3e 49 6d 70 6f 72 74 61 6e  td>.<em>Importan
1170: 74 20 4e 6f 74 65 3a 3c 2f 65 6d 3e 0a 54 68 65  t Note:</em>.The
1180: 20 27 41 4c 54 45 52 20 54 41 42 4c 45 20 2e 2e   'ALTER TABLE ..
1190: 2e 20 52 45 4e 41 4d 45 20 54 4f 20 2e 2e 2e 27  . RENAME TO ...'
11a0: 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f   command does no
11b0: 74 20 75 70 64 61 74 65 20 61 63 74 69 6f 6e 0a  t update action.
11c0: 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
11d0: 6e 20 74 72 69 67 67 65 72 73 20 6f 72 20 53 45  n triggers or SE
11e0: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
11f0: 77 69 74 68 69 6e 20 76 69 65 77 73 2e 0a 49 66  within views..If
1200: 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
1210: 20 72 65 6e 61 6d 65 64 20 69 73 20 72 65 66 65   renamed is refe
1220: 72 65 6e 63 65 64 20 66 72 6f 6d 20 77 69 74 68  renced from with
1230: 69 6e 20 74 72 69 67 67 65 72 73 20 6f 72 20 76  in triggers or v
1240: 69 65 77 73 2c 0a 74 68 65 6e 20 74 68 6f 73 65  iews,.then those
1250: 20 74 72 69 67 67 65 72 73 20 61 6e 64 20 76 69   triggers and vi
1260: 65 77 73 20 6d 75 73 74 20 62 65 20 64 72 6f 70  ews must be drop
1270: 70 65 64 20 61 6e 64 20 72 65 63 72 65 61 74 65  ped and recreate
1280: 64 20 73 65 70 61 72 61 74 65 6c 79 0a 62 79 20  d separately.by 
1290: 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e  the application.
12a0: 0a 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62  .</td></tr></tab
12b0: 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  le>.</blockquote
12c0: 3e 0a 0a 3c 70 3e 5e 49 66 20 5b 66 6f 72 65 69  >..<p>^If [forei
12d0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
12e0: 74 73 5d 20 61 72 65 20 0a 5b 66 6f 72 65 69 67  ts] are .[foreig
12f0: 6e 5f 6b 65 79 73 20 70 72 61 67 6d 61 20 7c 20  n_keys pragma | 
1300: 65 6e 61 62 6c 65 64 5d 20 77 68 65 6e 20 61 20  enabled] when a 
1310: 74 61 62 6c 65 20 69 73 20 72 65 6e 61 6d 65 64  table is renamed
1320: 2c 20 74 68 65 6e 20 61 6e 79 0a 5b 66 6f 72 65  , then any.[fore
1330: 69 67 6e 2d 6b 65 79 2d 63 6c 61 75 73 65 20 7c  ign-key-clause |
1340: 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
1350: 73 65 73 5d 20 69 6e 20 61 6e 79 20 74 61 62 6c  ses] in any tabl
1360: 65 20 28 65 69 74 68 65 72 20 74 68 65 0a 74 61  e (either the.ta
1370: 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d 65  ble being rename
1380: 64 20 6f 72 20 73 6f 6d 65 20 6f 74 68 65 72 20  d or some other 
1390: 74 61 62 6c 65 29 0a 74 68 61 74 20 72 65 66 65  table).that refe
13a0: 72 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62  r to the table b
13b0: 65 69 6e 67 20 72 65 6e 61 6d 65 64 20 61 72 65  eing renamed are
13c0: 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 72 65 66   modified to ref
13d0: 65 72 20 0a 74 6f 20 74 68 65 20 72 65 6e 61 6d  er .to the renam
13e0: 65 64 20 74 61 62 6c 65 20 62 79 20 69 74 73 20  ed table by its 
13f0: 6e 65 77 20 6e 61 6d 65 2e 0a 0a 3c 70 3e 20 5e  new name...<p> ^
1400: 54 68 65 20 41 44 44 20 43 4f 4c 55 4d 4e 20 73  The ADD COLUMN s
1410: 79 6e 74 61 78 0a 69 73 20 75 73 65 64 20 74 6f  yntax.is used to
1420: 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d   add a new colum
1430: 6e 20 74 6f 20 61 6e 20 65 78 69 73 74 69 6e 67  n to an existing
1440: 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20 6e 65 77   table..^The new
1450: 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6c 77 61 79   column is alway
1460: 73 20 61 70 70 65 6e 64 65 64 20 74 6f 20 74 68  s appended to th
1470: 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 69 73  e end of the lis
1480: 74 20 6f 66 20 65 78 69 73 74 69 6e 67 20 63 6f  t of existing co
1490: 6c 75 6d 6e 73 2e 0a 54 68 65 20 5b 63 6f 6c 75  lumns..The [colu
14a0: 6d 6e 2d 64 65 66 5d 20 72 75 6c 65 20 64 65 66  mn-def] rule def
14b0: 69 6e 65 73 20 74 68 65 20 63 68 61 72 61 63 74  ines the charact
14c0: 65 72 69 73 74 69 63 73 20 6f 66 20 74 68 65 20  eristics of the 
14d0: 6e 65 77 20 63 6f 6c 75 6d 6e 2e 0a 5e 28 54 68  new column..^(Th
14e0: 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 6d 61 79  e new column may
14f0: 20 74 61 6b 65 20 61 6e 79 20 6f 66 20 74 68 65   take any of the
1500: 20 66 6f 72 6d 73 20 70 65 72 6d 69 73 73 69 62   forms permissib
1510: 6c 65 20 69 6e 20 61 20 5b 43 52 45 41 54 45 20  le in a [CREATE 
1520: 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74  TABLE].statement
1530: 2c 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f  , with the follo
1540: 77 69 6e 67 20 72 65 73 74 72 69 63 74 69 6f 6e  wing restriction
1550: 73 3a 29 5e 0a 3c 75 6c 3e 0a 3c 6c 69 3e 5e 54  s:)^.<ul>.<li>^T
1560: 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f  he column may no
1570: 74 20 68 61 76 65 20 61 20 50 52 49 4d 41 52 59  t have a PRIMARY
1580: 20 4b 45 59 20 6f 72 20 55 4e 49 51 55 45 20 63   KEY or UNIQUE c
1590: 6f 6e 73 74 72 61 69 6e 74 2e 3c 2f 6c 69 3e 0a  onstraint.</li>.
15a0: 3c 6c 69 3e 5e 54 68 65 20 63 6f 6c 75 6d 6e 20  <li>^The column 
15b0: 6d 61 79 20 6e 6f 74 20 68 61 76 65 20 61 20 64  may not have a d
15c0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
15d0: 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55  CURRENT_TIME, CU
15e0: 52 52 45 4e 54 5f 44 41 54 45 2c 20 0a 20 20 20  RRENT_DATE, .   
15f0: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
1600: 4d 50 2c 20 6f 72 20 61 6e 20 65 78 70 72 65 73  MP, or an expres
1610: 73 69 6f 6e 20 69 6e 20 70 61 72 65 6e 74 68 65  sion in parenthe
1620: 73 65 73 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 5e 49  ses.</li>.<li>^I
1630: 66 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  f a NOT NULL con
1640: 73 74 72 61 69 6e 74 20 69 73 20 73 70 65 63 69  straint is speci
1650: 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 63  fied, then the c
1660: 6f 6c 75 6d 6e 20 6d 75 73 74 20 68 61 76 65 20  olumn must have 
1670: 61 0a 20 20 20 20 64 65 66 61 75 6c 74 20 76 61  a.    default va
1680: 6c 75 65 20 6f 74 68 65 72 20 74 68 61 6e 20 4e  lue other than N
1690: 55 4c 4c 2e 0a 3c 6c 69 3e 5e 49 66 20 5b 66 6f  ULL..<li>^If [fo
16a0: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
16b0: 61 69 6e 74 73 5d 20 61 72 65 20 5b 66 6f 72 65  aints] are [fore
16c0: 69 67 6e 5f 6b 65 79 73 20 70 72 61 67 6d 61 20  ign_keys pragma 
16d0: 7c 20 65 6e 61 62 6c 65 64 5d 20 61 6e 64 0a 20  | enabled] and. 
16e0: 20 20 20 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68     a column with
16f0: 20 61 20 5b 66 6f 72 65 69 67 6e 2d 6b 65 79 2d   a [foreign-key-
1700: 63 6c 61 75 73 65 20 7c 20 52 45 46 45 52 45 4e  clause | REFEREN
1710: 43 45 53 20 63 6c 61 75 73 65 5d 0a 20 20 20 20  CES clause].    
1720: 69 73 20 61 64 64 65 64 2c 20 74 68 65 20 63 6f  is added, the co
1730: 6c 75 6d 6e 20 6d 75 73 74 20 68 61 76 65 20 61  lumn must have a
1740: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
1750: 66 20 4e 55 4c 4c 2e 0a 3c 2f 75 6c 3e 0a 0a 3c  f NULL..</ul>..<
1760: 70 3e 5e 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61  p>^Note also tha
1770: 74 20 77 68 65 6e 20 61 64 64 69 6e 67 20 61 20  t when adding a 
1780: 5b 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e  [CHECK constrain
1790: 74 5d 2c 20 74 68 65 20 43 48 45 43 4b 20 63 6f  t], the CHECK co
17a0: 6e 73 74 72 61 69 6e 74 0a 69 73 20 6e 6f 74 20  nstraint.is not 
17b0: 74 65 73 74 65 64 20 61 67 61 69 6e 73 74 20 70  tested against p
17c0: 72 65 65 78 69 73 74 69 6e 67 20 72 6f 77 73 20  reexisting rows 
17d0: 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 0a 5e 54  of the table..^T
17e0: 68 69 73 20 63 61 6e 20 72 65 73 75 6c 74 20 69  his can result i
17f0: 6e 20 61 20 74 61 62 6c 65 20 74 68 61 74 20 63  n a table that c
1800: 6f 6e 74 61 69 6e 73 20 64 61 74 61 20 74 68 61  ontains data tha
1810: 74 0a 69 73 20 69 6e 20 76 69 6f 6c 61 74 69 6f  t.is in violatio
1820: 6e 20 6f 66 20 74 68 65 20 43 48 45 43 4b 20 63  n of the CHECK c
1830: 6f 6e 73 74 72 61 69 6e 74 2e 20 20 46 75 74 75  onstraint.  Futu
1840: 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  re versions of S
1850: 51 4c 69 74 65 20 6d 69 67 68 74 0a 63 68 61 6e  QLite might.chan
1860: 67 65 20 74 6f 20 76 61 6c 69 64 61 74 65 20 43  ge to validate C
1870: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  HECK constraints
1880: 20 61 73 20 74 68 65 79 20 61 72 65 20 61 64 64   as they are add
1890: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 54 68 65  ed.</p>..<p> The
18a0: 20 65 78 65 63 75 74 69 6f 6e 20 74 69 6d 65 20   execution time 
18b0: 6f 66 20 74 68 65 20 41 4c 54 45 52 20 54 41 42  of the ALTER TAB
18c0: 4c 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e  LE command is in
18d0: 64 65 70 65 6e 64 65 6e 74 20 6f 66 0a 74 68 65  dependent of.the
18e0: 20 61 6d 6f 75 6e 74 20 6f 66 20 64 61 74 61 20   amount of data 
18f0: 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54  in the table.  T
1900: 68 65 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63  he ALTER TABLE c
1910: 6f 6d 6d 61 6e 64 20 72 75 6e 73 20 61 73 20 71  ommand runs as q
1920: 75 69 63 6b 6c 79 0a 6f 6e 20 61 20 74 61 62 6c  uickly.on a tabl
1930: 65 20 77 69 74 68 20 31 30 20 6d 69 6c 6c 69 6f  e with 10 millio
1940: 6e 20 72 6f 77 73 20 61 73 20 69 74 20 64 6f 65  n rows as it doe
1950: 73 20 6f 6e 20 61 20 74 61 62 6c 65 20 77 69 74  s on a table wit
1960: 68 20 31 20 72 6f 77 2e 0a 3c 2f 70 3e 0a 0a 3c  h 1 row..</p>..<
1970: 70 3e 41 66 74 65 72 20 41 44 44 20 43 4f 4c 55  p>After ADD COLU
1980: 4d 4e 20 68 61 73 20 62 65 65 6e 20 72 75 6e 20  MN has been run 
1990: 6f 6e 20 61 20 64 61 74 61 62 61 73 65 2c 20 74  on a database, t
19a0: 68 61 74 20 64 61 74 61 62 61 73 65 20 77 69 6c  hat database wil
19b0: 6c 20 6e 6f 74 0a 62 65 20 72 65 61 64 61 62 6c  l not.be readabl
19c0: 65 20 62 79 20 53 51 4c 69 74 65 20 76 65 72 73  e by SQLite vers
19d0: 69 6f 6e 20 33 2e 31 2e 33 20 28 5b 64 61 74 65  ion 3.1.3 ([date
19e0: 6f 66 3a 33 2e 31 2e 33 5d 29 20 61 6e 64 20 65  of:3.1.3]) and e
19f0: 61 72 6c 69 65 72 2e 3c 2f 70 3e 0a 0a 3c 74 63  arlier.</p>..<tc
1a00: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f 74  l>hd_fragment ot
1a10: 68 65 72 61 6c 74 65 72 3c 2f 74 63 6c 3e 0a 3c  heralter</tcl>.<
1a20: 68 33 3e 4d 61 6b 69 6e 67 20 4f 74 68 65 72 20  h3>Making Other 
1a30: 4b 69 6e 64 73 20 4f 66 20 54 61 62 6c 65 20 53  Kinds Of Table S
1a40: 63 68 65 6d 61 20 43 68 61 6e 67 65 73 3c 2f 68  chema Changes</h
1a50: 33 3e 0a 0a 3c 70 3e 20 54 68 65 20 6f 6e 6c 79  3>..<p> The only
1a60: 20 73 63 68 65 6d 61 20 61 6c 74 65 72 69 6e 67   schema altering
1a70: 20 63 6f 6d 6d 61 6e 64 73 20 64 69 72 65 63 74   commands direct
1a80: 6c 79 20 73 75 70 70 6f 72 74 65 64 20 62 79 20  ly supported by 
1a90: 53 51 4c 69 74 65 20 61 72 65 20 74 68 65 0a 22  SQLite are the."
1aa0: 72 65 6e 61 6d 65 20 74 61 62 6c 65 22 20 61 6e  rename table" an
1ab0: 64 20 22 61 64 64 20 63 6f 6c 75 6d 6e 22 20 63  d "add column" c
1ac0: 6f 6d 6d 61 6e 64 73 20 73 68 6f 77 6e 20 61 62  ommands shown ab
1ad0: 6f 76 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 61  ove.  However, a
1ae0: 70 70 6c 69 63 61 74 69 6f 6e 73 0a 63 61 6e 20  pplications.can 
1af0: 6d 61 6b 65 20 6f 74 68 65 72 20 61 72 62 69 74  make other arbit
1b00: 72 61 72 79 20 63 68 61 6e 67 65 73 20 74 6f 20  rary changes to 
1b10: 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 61 20  the format of a 
1b20: 74 61 62 6c 65 20 75 73 69 6e 67 20 61 20 73 69  table using a si
1b30: 6d 70 6c 65 0a 73 65 71 75 65 6e 63 65 20 6f 66  mple.sequence of
1b40: 20 6f 70 65 72 61 74 69 6f 6e 73 2e 0a 54 68 65   operations..The
1b50: 20 73 74 65 70 73 20 74 6f 20 6d 61 6b 65 20 61   steps to make a
1b60: 72 62 69 74 72 61 72 79 20 63 68 61 6e 67 65 73  rbitrary changes
1b70: 20 74 6f 20 74 68 65 20 73 63 68 65 6d 61 20 64   to the schema d
1b80: 65 73 69 67 6e 20 6f 66 20 73 6f 6d 65 20 74 61  esign of some ta
1b90: 62 6c 65 20 58 0a 61 72 65 20 61 73 20 66 6f 6c  ble X.are as fol
1ba0: 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  lows:..<ol>.<li>
1bb0: 3c 70 3e 0a 49 66 20 66 6f 72 65 69 67 6e 20 6b  <p>.If foreign k
1bc0: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61  ey constraints a
1bd0: 72 65 20 65 6e 61 62 6c 65 64 2c 0a 64 69 73 61  re enabled,.disa
1be0: 62 6c 65 20 74 68 65 6d 20 75 73 69 6e 67 20 5b  ble them using [
1bf0: 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b  PRAGMA foreign_k
1c00: 65 79 73 20 7c 20 50 52 41 47 4d 41 20 66 6f 72  eys | PRAGMA for
1c10: 65 69 67 6e 5f 6b 65 79 73 3d 4f 46 46 5d 2e 0a  eign_keys=OFF]..
1c20: 0a 3c 6c 69 3e 3c 70 3e 0a 53 74 61 72 74 20 61  .<li><p>.Start a
1c30: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 0a 3c   transaction...<
1c40: 6c 69 3e 3c 70 3e 0a 52 65 6d 65 6d 62 65 72 20  li><p>.Remember 
1c50: 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 61 6c  the format of al
1c60: 6c 20 69 6e 64 65 78 65 73 20 61 6e 64 20 74 72  l indexes and tr
1c70: 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65  iggers associate
1c80: 64 20 77 69 74 68 20 74 61 62 6c 65 20 58 2e 0a  d with table X..
1c90: 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  This information
1ca0: 20 77 69 6c 6c 20 62 65 20 6e 65 65 64 65 64 20   will be needed 
1cb0: 69 6e 20 73 74 65 70 20 38 20 62 65 6c 6f 77 2e  in step 8 below.
1cc0: 20 20 4f 6e 65 20 77 61 79 20 74 6f 20 64 6f 20    One way to do 
1cd0: 74 68 69 73 20 69 73 0a 74 6f 20 72 75 6e 20 61  this is.to run a
1ce0: 20 71 75 65 72 79 20 6c 69 6b 65 20 74 68 65 20   query like the 
1cf0: 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 53 45 4c 45 43  following:.SELEC
1d00: 54 20 74 79 70 65 2c 20 73 71 6c 20 46 52 4f 4d  T type, sql FROM
1d10: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57   sqlite_master W
1d20: 48 45 52 45 20 74 62 6c 5f 6e 61 6d 65 3d 27 58  HERE tbl_name='X
1d30: 27 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 55 73 65 20  '...<li><p>.Use 
1d40: 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20 74  [CREATE TABLE] t
1d50: 6f 20 63 6f 6e 73 74 72 75 63 74 20 61 20 6e 65  o construct a ne
1d60: 77 20 74 61 62 6c 65 20 22 6e 65 77 5f 58 22 20  w table "new_X" 
1d70: 74 68 61 74 20 69 73 20 69 6e 20 74 68 65 20 64  that is in the d
1d80: 65 73 69 72 65 64 0a 72 65 76 69 73 65 64 20 66  esired.revised f
1d90: 6f 72 6d 61 74 20 6f 66 20 74 61 62 6c 65 20 58  ormat of table X
1da0: 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61  .  Make sure tha
1db0: 74 20 74 68 65 20 6e 61 6d 65 20 22 6e 65 77 5f  t the name "new_
1dc0: 58 22 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6c 6c  X" does not coll
1dd0: 69 64 65 0a 77 69 74 68 20 61 6e 79 20 65 78 69  ide.with any exi
1de0: 73 74 69 6e 67 20 74 61 62 6c 65 20 6e 61 6d 65  sting table name
1df0: 2c 20 6f 66 20 63 6f 75 72 73 65 2e 0a 0a 3c 6c  , of course...<l
1e00: 69 3e 3c 70 3e 0a 54 72 61 6e 73 66 65 72 20 63  i><p>.Transfer c
1e10: 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 58 20 69 6e  ontent from X in
1e20: 74 6f 20 6e 65 77 5f 58 20 75 73 69 6e 67 20 61  to new_X using a
1e30: 20 73 74 61 74 65 6d 65 6e 74 0a 6c 69 6b 65 3a   statement.like:
1e40: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 6e 65 77   INSERT INTO new
1e50: 5f 58 20 53 45 4c 45 43 54 20 2e 2e 2e 20 46 52  _X SELECT ... FR
1e60: 4f 4d 20 58 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 44  OM X...<li><p>.D
1e70: 72 6f 70 20 74 68 65 20 6f 6c 64 20 74 61 62 6c  rop the old tabl
1e80: 65 20 58 3a 20 20 5b 44 52 4f 50 20 54 41 42 4c  e X:  [DROP TABL
1e90: 45 20 7c 20 44 52 4f 50 20 54 41 42 4c 45 20 58  E | DROP TABLE X
1ea0: 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 43 68 61 6e  ]...<li><p>.Chan
1eb0: 67 65 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 6e  ge the name of n
1ec0: 65 77 5f 58 20 74 6f 20 58 20 75 73 69 6e 67 3a  ew_X to X using:
1ed0: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 6e 65 77   ALTER TABLE new
1ee0: 5f 58 20 52 45 4e 41 4d 45 20 54 4f 20 58 2e 0a  _X RENAME TO X..
1ef0: 0a 3c 6c 69 3e 3c 70 3e 0a 55 73 65 20 5b 43 52  .<li><p>.Use [CR
1f00: 45 41 54 45 20 49 4e 44 45 58 5d 20 61 6e 64 20  EATE INDEX] and 
1f10: 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d  [CREATE TRIGGER]
1f20: 20 74 6f 20 72 65 63 6f 6e 73 74 72 75 63 74 20   to reconstruct 
1f30: 69 6e 64 65 78 65 73 20 61 6e 64 20 74 72 69 67  indexes and trig
1f40: 67 65 72 73 0a 61 73 73 6f 63 69 61 74 65 64 20  gers.associated 
1f50: 77 69 74 68 20 74 61 62 6c 65 20 58 2e 20 20 50  with table X.  P
1f60: 65 72 68 61 70 73 20 75 73 65 20 74 68 65 20 6f  erhaps use the o
1f70: 6c 64 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65  ld format of the
1f80: 20 74 72 69 67 67 65 72 73 20 61 6e 64 0a 69 6e   triggers and.in
1f90: 64 65 78 65 73 20 73 61 76 65 64 20 66 72 6f 6d  dexes saved from
1fa0: 20 73 74 65 70 20 33 20 61 62 6f 76 65 20 61 73   step 3 above as
1fb0: 20 61 20 67 75 69 64 65 2c 20 6d 61 6b 69 6e 67   a guide, making
1fc0: 20 63 68 61 6e 67 65 73 20 61 73 20 61 70 70 72   changes as appr
1fd0: 6f 70 72 69 61 74 65 0a 66 6f 72 20 74 68 65 20  opriate.for the 
1fe0: 61 6c 74 65 72 61 74 69 6f 6e 2e 0a 0a 3c 6c 69  alteration...<li
1ff0: 3e 3c 70 3e 49 66 20 61 6e 79 20 76 69 65 77 73  ><p>If any views
2000: 20 72 65 66 65 72 20 74 6f 20 74 61 62 6c 65 20   refer to table 
2010: 58 20 69 6e 20 61 20 77 61 79 20 74 68 61 74 20  X in a way that 
2020: 69 73 20 61 66 66 65 63 74 65 64 20 62 79 20 74  is affected by t
2030: 68 65 0a 73 63 68 65 6d 61 20 63 68 61 6e 67 65  he.schema change
2040: 2c 20 74 68 65 6e 20 64 72 6f 70 20 74 68 6f 73  , then drop thos
2050: 65 20 76 69 65 77 73 20 75 73 69 6e 67 20 5b 44  e views using [D
2060: 52 4f 50 20 56 49 45 57 5d 20 61 6e 64 20 72 65  ROP VIEW] and re
2070: 63 72 65 61 74 65 20 74 68 65 6d 0a 77 69 74 68  create them.with
2080: 20 77 68 61 74 65 76 65 72 20 63 68 61 6e 67 65   whatever change
2090: 73 20 61 72 65 20 6e 65 63 65 73 73 61 72 79 20  s are necessary 
20a0: 74 6f 20 61 63 63 6f 6d 6d 6f 64 61 74 65 20 74  to accommodate t
20b0: 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  he schema change
20c0: 0a 75 73 69 6e 67 20 5b 43 52 45 41 54 45 20 56  .using [CREATE V
20d0: 49 45 57 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 49  IEW]...<li><p>.I
20e0: 66 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  f foreign key co
20f0: 6e 73 74 72 61 69 6e 74 73 20 77 65 72 65 20 6f  nstraints were o
2100: 72 69 67 69 6e 61 6c 6c 79 20 65 6e 61 62 6c 65  riginally enable
2110: 64 0a 74 68 65 6e 20 72 75 6e 20 5b 50 52 41 47  d.then run [PRAG
2120: 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63  MA foreign_key_c
2130: 68 65 63 6b 5d 20 74 6f 20 76 65 72 69 66 79 20  heck] to verify 
2140: 74 68 61 74 20 74 68 65 20 73 63 68 65 6d 61 0a  that the schema.
2150: 63 68 61 6e 67 65 20 64 69 64 20 6e 6f 74 20 62  change did not b
2160: 72 65 61 6b 20 61 6e 79 20 66 6f 72 65 69 67 6e  reak any foreign
2170: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
2180: 2e 0a 0a 0a 3c 6c 69 3e 3c 70 3e 0a 43 6f 6d 6d  ....<li><p>.Comm
2190: 69 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  it the transacti
21a0: 6f 6e 20 73 74 61 72 74 65 64 20 69 6e 20 73 74  on started in st
21b0: 65 70 20 32 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 49  ep 2...<li><p>.I
21c0: 66 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 63  f foreign keys c
21d0: 6f 6e 73 74 72 61 69 6e 74 73 20 77 65 72 65 20  onstraints were 
21e0: 6f 72 69 67 69 6e 61 6c 6c 79 20 65 6e 61 62 6c  originally enabl
21f0: 65 64 2c 20 72 65 65 6e 61 62 6c 65 20 74 68 65  ed, reenable the
2200: 6d 20 6e 6f 77 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70  m now..</ol>..<p
2210: 3e 54 68 65 20 70 72 6f 63 65 64 75 72 65 20 61  >The procedure a
2220: 62 6f 76 65 20 69 73 20 63 6f 6d 70 6c 65 74 65  bove is complete
2230: 6c 79 20 67 65 6e 65 72 61 6c 20 61 6e 64 20 77  ly general and w
2240: 69 6c 6c 20 77 6f 72 6b 20 65 76 65 6e 20 69 66  ill work even if
2250: 20 74 68 65 0a 73 63 68 65 6d 61 20 63 68 61 6e   the.schema chan
2260: 67 65 20 63 61 75 73 65 73 20 74 68 65 20 69 6e  ge causes the in
2270: 66 6f 72 6d 61 74 69 6f 6e 20 73 74 6f 72 65 64  formation stored
2280: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f   in the table to
2290: 20 63 68 61 6e 67 65 2e 0a 53 6f 20 74 68 65 20   change..So the 
22a0: 66 75 6c 6c 20 70 72 6f 63 65 64 75 72 65 20 61  full procedure a
22b0: 62 6f 76 65 20 69 73 20 61 70 70 72 6f 70 72 69  bove is appropri
22c0: 61 74 65 20 66 6f 72 20 64 72 6f 70 70 69 6e 67  ate for dropping
22d0: 20 61 20 63 6f 6c 75 6d 6e 2c 0a 63 68 61 6e 67   a column,.chang
22e0: 69 6e 67 20 74 68 65 20 6f 72 64 65 72 20 6f 66  ing the order of
22f0: 20 63 6f 6c 75 6d 6e 73 2c 20 61 64 64 69 6e 67   columns, adding
2300: 20 6f 72 20 72 65 6d 6f 76 69 6e 67 20 61 20 55   or removing a U
2310: 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
2320: 0a 6f 72 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  .or PRIMARY KEY,
2330: 20 61 64 64 69 6e 67 20 43 48 45 43 4b 20 6f 72   adding CHECK or
2340: 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 6f 72 20   FOREIGN KEY or 
2350: 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
2360: 69 6e 74 73 2c 0a 6f 72 20 63 68 61 6e 67 69 6e  ints,.or changin
2370: 67 20 74 68 65 20 64 61 74 61 74 79 70 65 20 66  g the datatype f
2380: 6f 72 20 61 20 63 6f 6c 75 6d 6e 2c 20 66 6f 72  or a column, for
2390: 20 65 78 61 6d 70 6c 65 2e 20 20 48 6f 77 65 76   example.  Howev
23a0: 65 72 2c 20 61 20 73 69 6d 70 6c 65 72 0a 61 6e  er, a simpler.an
23b0: 64 20 66 61 73 74 65 72 20 70 72 6f 63 65 64 75  d faster procedu
23c0: 72 65 20 63 61 6e 20 6f 70 74 69 6f 6e 61 6c 6c  re can optionall
23d0: 79 20 62 65 20 75 73 65 64 20 66 6f 72 0a 73 6f  y be used for.so
23e0: 6d 65 20 63 68 61 6e 67 65 73 20 74 68 61 74 20  me changes that 
23f0: 64 6f 20 6e 6f 20 61 66 66 65 63 74 20 74 68 65  do no affect the
2400: 20 6f 6e 2d 64 69 73 6b 20 63 6f 6e 74 65 6e 74   on-disk content
2410: 20 69 6e 20 61 6e 79 20 77 61 79 2e 0a 54 68 65   in any way..The
2420: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 69 6d 70 6c   following simpl
2430: 65 72 20 70 72 6f 63 65 64 75 72 65 20 69 73 20  er procedure is 
2440: 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20  appropriate for 
2450: 72 65 6d 6f 76 69 6e 67 0a 43 48 45 43 4b 20 6f  removing.CHECK o
2460: 72 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 6f 72  r FOREIGN KEY or
2470: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
2480: 61 69 6e 74 73 2c 0a 72 65 6e 61 6d 69 6e 67 20  aints,.renaming 
2490: 63 6f 6c 75 6d 6e 73 2c 20 6f 72 20 61 64 64 69  columns, or addi
24a0: 6e 67 20 6f 72 20 72 65 6d 6f 76 69 6e 67 20 6f  ng or removing o
24b0: 72 20 63 68 61 6e 67 69 6e 67 20 64 65 66 61 75  r changing defau
24c0: 6c 74 20 76 61 6c 75 65 73 20 6f 6e 0a 61 20 63  lt values on.a c
24d0: 6f 6c 75 6d 6e 2e 0a 0a 3c 6f 6c 3e 0a 3c 6c 49  olumn...<ol>.<lI
24e0: 3e 3c 70 3e 20 53 74 61 72 74 20 61 20 74 72 61  ><p> Start a tra
24f0: 6e 73 61 63 74 69 6f 6e 2e 0a 0a 3c 6c 69 3e 3c  nsaction...<li><
2500: 70 3e 20 52 75 6e 20 5b 50 52 41 47 4d 41 20 73  p> Run [PRAGMA s
2510: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 5d 20 74  chema_version] t
2520: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
2530: 63 75 72 72 65 6e 74 20 73 63 68 65 6d 61 0a 76  current schema.v
2540: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 2e 20 20  ersion number.  
2550: 54 68 69 73 20 6e 75 6d 62 65 72 20 77 69 6c 6c  This number will
2560: 20 62 65 20 6e 65 65 64 65 64 20 66 6f 72 20 73   be needed for s
2570: 74 65 70 20 36 20 62 65 6c 6f 77 2e 0a 0a 3c 6c  tep 6 below...<l
2580: 69 3e 3c 70 3e 20 41 63 74 69 76 61 74 65 20 73  i><p> Activate s
2590: 63 68 65 6d 61 20 65 64 69 74 69 6e 67 20 75 73  chema editing us
25a0: 69 6e 67 20 0a 5b 50 52 41 47 4d 41 20 77 72 69  ing .[PRAGMA wri
25b0: 74 61 62 6c 65 5f 73 63 68 65 6d 61 20 7c 20 50  table_schema | P
25c0: 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73  RAGMA writable_s
25d0: 63 68 65 6d 61 3d 4f 4e 5d 2e 0a 0a 3c 6c 69 3e  chema=ON]...<li>
25e0: 3c 70 3e 20 52 75 6e 20 61 6e 20 5b 55 50 44 41  <p> Run an [UPDA
25f0: 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 20 74 6f  TE] statement to
2600: 20 63 68 61 6e 67 65 20 74 68 65 20 64 65 66 69   change the defi
2610: 6e 69 74 69 6f 6e 20 6f 66 20 74 61 62 6c 65 20  nition of table 
2620: 58 0a 69 6e 20 74 68 65 20 5b 73 71 6c 69 74 65  X.in the [sqlite
2630: 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 5d 3a 20  _master table]: 
2640: 0a 55 50 44 41 54 45 20 73 71 6c 69 74 65 5f 6d  .UPDATE sqlite_m
2650: 61 73 74 65 72 20 53 45 54 20 73 71 6c 3d 2e 2e  aster SET sql=..
2660: 2e 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 61  . WHERE type='ta
2670: 62 6c 65 27 20 41 4e 44 20 6e 61 6d 65 3d 27 58  ble' AND name='X
2680: 27 3b 0a 3c 70 3e 3c 65 6d 3e 43 61 75 74 69 6f  ';.<p><em>Cautio
2690: 6e 3a 3c 2f 65 6d 3e 20 20 4d 61 6b 69 6e 67 20  n:</em>  Making 
26a0: 61 20 63 68 61 6e 67 65 20 74 6f 20 74 68 65 20  a change to the 
26b0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
26c0: 62 6c 65 20 6c 69 6b 65 20 74 68 69 73 20 77 69  ble like this wi
26d0: 6c 6c 0a 72 65 6e 64 65 72 20 74 68 65 20 64 61  ll.render the da
26e0: 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 20 61  tabase corrupt a
26f0: 6e 64 20 75 6e 72 65 61 64 61 62 6c 65 20 69 66  nd unreadable if
2700: 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 6e 74   the change cont
2710: 61 69 6e 73 0a 61 20 73 79 6e 74 61 78 20 65 72  ains.a syntax er
2720: 72 6f 72 2e 20 20 49 74 20 69 73 20 73 75 67 67  ror.  It is sugg
2730: 65 73 74 65 64 20 74 68 61 74 20 63 61 72 65 66  ested that caref
2740: 75 6c 20 74 65 73 74 69 6e 67 20 6f 66 20 74 68  ul testing of th
2750: 65 20 55 50 44 41 54 45 0a 73 74 61 74 65 6d 65  e UPDATE.stateme
2760: 6e 74 20 62 65 20 64 6f 6e 65 20 6f 6e 20 61 20  nt be done on a 
2770: 73 65 70 61 72 61 74 65 20 62 6c 61 6e 6b 20 64  separate blank d
2780: 61 74 61 62 61 73 65 20 70 72 69 6f 72 20 74 6f  atabase prior to
2790: 20 75 73 69 6e 67 20 69 74 20 6f 6e 0a 61 20 64   using it on.a d
27a0: 61 74 61 62 61 73 65 20 63 6f 6e 74 61 69 6e 69  atabase containi
27b0: 6e 67 20 69 6d 70 6f 72 74 61 6e 74 20 64 61 74  ng important dat
27c0: 61 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 49 66 20 74  a...<li><p> If t
27d0: 68 65 20 63 68 61 6e 67 65 20 74 6f 20 74 61 62  he change to tab
27e0: 6c 65 20 58 20 61 6c 73 6f 20 61 66 66 65 63 74  le X also affect
27f0: 73 20 6f 74 68 65 72 20 74 61 62 6c 65 73 20 6f  s other tables o
2800: 72 20 69 6e 64 65 78 65 73 20 6f 72 0a 74 72 69  r indexes or.tri
2810: 67 67 65 72 73 20 61 72 65 20 76 69 65 77 73 20  ggers are views 
2820: 77 69 74 68 69 6e 20 73 63 68 65 6d 61 2c 20 74  within schema, t
2830: 68 65 6e 20 72 75 6e 20 5b 55 50 44 41 54 45 5d  hen run [UPDATE]
2840: 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 6d   statements to m
2850: 6f 64 69 66 79 0a 74 68 6f 73 65 20 6f 74 68 65  odify.those othe
2860: 72 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65 73  r tables indexes
2870: 20 61 6e 64 20 76 69 65 77 73 20 74 6f 6f 2e 20   and views too. 
2880: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 66   For example, if
2890: 20 74 68 65 20 6e 61 6d 65 20 6f 66 0a 61 20 63   the name of.a c
28a0: 6f 6c 75 6d 6e 20 63 68 61 6e 67 65 73 2c 20 61  olumn changes, a
28b0: 6c 6c 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 63  ll FOREIGN KEY c
28c0: 6f 6e 73 74 72 61 69 6e 74 73 2c 20 74 72 69 67  onstraints, trig
28d0: 67 65 72 73 2c 20 69 6e 64 65 78 65 73 2c 20 61  gers, indexes, a
28e0: 6e 64 0a 76 69 65 77 73 20 74 68 61 74 20 72 65  nd.views that re
28f0: 66 65 72 20 74 6f 20 74 68 61 74 20 63 6f 6c 75  fer to that colu
2900: 6d 6e 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66  mn must be modif
2910: 69 65 64 2e 0a 3c 70 3e 3c 65 6d 3e 43 61 75 74  ied..<p><em>Caut
2920: 69 6f 6e 3a 3c 2f 65 6d 3e 20 20 4f 6e 63 65 20  ion:</em>  Once 
2930: 61 67 61 69 6e 2c 20 6d 61 6b 69 6e 67 20 63 68  again, making ch
2940: 61 6e 67 65 73 20 74 6f 20 74 68 65 20 73 71 6c  anges to the sql
2950: 69 74 65 5f 6d 61 73 74 65 72 20 0a 74 61 62 6c  ite_master .tabl
2960: 65 20 6c 69 6b 65 20 74 68 69 73 20 77 69 6c 6c  e like this will
2970: 20 72 65 6e 64 65 72 20 74 68 65 20 64 61 74 61   render the data
2980: 62 61 73 65 20 63 6f 72 72 75 70 74 20 61 6e 64  base corrupt and
2990: 20 75 6e 72 65 61 64 61 62 6c 65 20 69 66 20 74   unreadable if t
29a0: 68 65 20 0a 63 68 61 6e 67 65 20 63 6f 6e 74 61  he .change conta
29b0: 69 6e 73 20 61 6e 20 65 72 72 6f 72 2e 20 20 43  ins an error.  C
29c0: 61 72 65 66 75 6c 6c 79 20 74 65 73 74 20 6f 66  arefully test of
29d0: 20 74 68 69 73 20 65 6e 74 69 72 65 20 70 72 6f   this entire pro
29e0: 63 65 64 75 72 65 0a 6f 6e 20 61 20 73 65 70 61  cedure.on a sepa
29f0: 72 61 74 65 20 74 65 73 74 20 64 61 74 61 62 61  rate test databa
2a00: 73 65 20 70 72 69 6f 72 20 74 6f 20 75 73 69 6e  se prior to usin
2a10: 67 20 69 74 20 6f 6e 0a 61 20 64 61 74 61 62 61  g it on.a databa
2a20: 73 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 6d  se containing im
2a30: 70 6f 72 74 61 6e 74 20 64 61 74 61 20 61 6e 64  portant data and
2a40: 2f 6f 72 20 6d 61 6b 65 20 62 61 63 6b 75 70 20  /or make backup 
2a50: 63 6f 70 69 65 73 20 6f 66 0a 69 6d 70 6f 72 74  copies of.import
2a60: 61 6e 74 20 64 61 74 61 62 61 73 65 73 20 70 72  ant databases pr
2a70: 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e 67 20 74  ior to running t
2a80: 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e 0a 0a  his procedure...
2a90: 3c 6c 69 3e 3c 70 3e 20 49 6e 63 72 65 6d 65 6e  <li><p> Incremen
2aa0: 74 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72  t the schema ver
2ab0: 73 69 6f 6e 20 6e 75 6d 62 65 72 20 75 73 69 6e  sion number usin
2ac0: 67 0a 5b 50 52 41 47 4d 41 20 73 63 68 65 6d 61  g.[PRAGMA schema
2ad0: 5f 76 65 72 73 69 6f 6e 20 7c 20 50 52 41 47 4d  _version | PRAGM
2ae0: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
2af0: 3d 58 5d 20 77 68 65 72 65 20 58 20 69 73 20 6f  =X] where X is o
2b00: 6e 65 0a 6d 6f 72 65 20 74 68 61 6e 20 74 68 65  ne.more than the
2b10: 20 6f 6c 64 20 73 63 68 65 6d 61 20 76 65 72 73   old schema vers
2b20: 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 75 6e 64  ion number found
2b30: 20 69 6e 20 73 74 65 70 20 32 20 61 62 6f 76 65   in step 2 above
2b40: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 44 69 73 61 62  ...<li><p> Disab
2b50: 6c 65 20 73 63 68 65 6d 61 20 65 64 69 74 69 6e  le schema editin
2b60: 67 20 75 73 69 6e 67 20 0a 5b 50 52 41 47 4d 41  g using .[PRAGMA
2b70: 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61   writable_schema
2b80: 20 7c 20 50 52 41 47 4d 41 20 77 72 69 74 61 62   | PRAGMA writab
2b90: 6c 65 5f 73 63 68 65 6d 61 3d 4f 46 46 5d 2e 0a  le_schema=OFF]..
2ba0: 0a 3c 6c 69 3e 3c 70 3e 20 28 4f 70 74 69 6f 6e  .<li><p> (Option
2bb0: 61 6c 29 20 52 75 6e 20 5b 50 52 41 47 4d 41 20  al) Run [PRAGMA 
2bc0: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 5d  integrity_check]
2bd0: 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
2be0: 74 68 65 0a 73 63 68 65 6d 61 20 63 68 61 6e 67  the.schema chang
2bf0: 65 73 20 64 69 64 20 6e 6f 74 20 64 61 6d 61 67  es did not damag
2c00: 65 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a  e the database..
2c10: 0a 3c 6c 69 3e 3c 70 3e 20 43 6f 6d 6d 69 74 20  .<li><p> Commit 
2c20: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
2c30: 73 74 61 72 74 65 64 20 6f 6e 20 73 74 65 70 20  started on step 
2c40: 31 20 61 62 6f 76 65 2e 0a 3c 2f 6f 6c 3e 0a 0a  1 above..</ol>..
2c50: 3c 70 3e 49 66 20 73 6f 6d 65 20 66 75 74 75 72  <p>If some futur
2c60: 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c  e version of SQL
2c70: 69 74 65 20 61 64 64 73 20 6e 65 77 20 41 4c 54  ite adds new ALT
2c80: 45 52 20 54 41 42 4c 45 20 63 61 70 61 62 69 6c  ER TABLE capabil
2c90: 69 74 69 65 73 2c 20 0a 74 68 6f 73 65 20 63 61  ities, .those ca
2ca0: 70 61 62 69 6c 69 74 69 65 73 20 77 69 6c 6c 20  pabilities will 
2cb0: 76 65 72 79 20 6c 69 6b 65 6c 79 20 75 73 65 20  very likely use 
2cc0: 6f 6e 65 20 6f 66 20 74 68 65 20 74 77 6f 20 70  one of the two p
2cd0: 72 6f 63 65 64 75 72 65 73 0a 6f 75 74 6c 69 6e  rocedures.outlin
2ce0: 65 64 20 61 62 6f 76 65 2e 0a 0a 3c 74 63 6c 3e  ed above...<tcl>
2cf0: 0a 23 20 20 4f 6e 65 20 6f 66 20 74 68 65 20 72  .#  One of the r
2d00: 65 61 73 6f 6e 73 20 74 68 61 74 0a 23 20 53 51  easons that.# SQ
2d10: 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 63 75  Lite does not cu
2d20: 72 72 65 6e 74 6c 79 20 73 75 70 70 6f 72 74 20  rrently support 
2d30: 6d 6f 72 65 20 41 4c 54 45 52 20 54 41 42 4c 45  more ALTER TABLE
2d40: 20 63 61 70 61 62 69 6c 69 74 69 65 73 20 69 73   capabilities is
2d50: 20 74 68 61 74 0a 23 20 74 68 65 20 70 72 6f 63   that.# the proc
2d60: 65 64 75 72 65 20 73 68 6f 77 6e 20 61 62 6f 76  edure shown abov
2d70: 65 20 69 73 20 64 69 66 66 69 63 75 6c 74 20 74  e is difficult t
2d80: 6f 20 61 75 74 6f 6d 61 74 65 20 66 6f 72 20 61  o automate for a
2d90: 6e 20 61 72 62 69 74 72 61 72 79 20 73 63 68 65  n arbitrary sche
2da0: 6d 61 2e 0a 23 20 50 61 72 74 69 63 75 6c 61 72  ma..# Particular
2db0: 6c 79 20 74 72 6f 75 62 6c 65 73 6f 6d 65 20 61  ly troublesome a
2dc0: 72 65 61 73 20 61 72 65 20 69 64 65 6e 74 69 66  reas are identif
2dd0: 79 69 6e 67 20 61 6c 6c 20 76 69 65 77 73 20 61  ying all views a
2de0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 23  ssociated with.#
2df0: 20 74 61 62 6c 65 20 58 20 69 6e 20 73 74 65 70   table X in step
2e00: 20 31 20 61 6e 64 20 63 72 65 61 74 69 6e 67 20   1 and creating 
2e10: 6e 65 77 20 76 69 65 77 73 20 61 6e 64 20 74 72  new views and tr
2e20: 69 67 67 65 72 73 20 74 68 61 74 20 61 72 65 20  iggers that are 
2e30: 63 6f 6d 70 61 74 69 62 6c 65 0a 23 20 77 69 74  compatible.# wit
2e40: 68 20 74 68 65 20 61 6c 74 65 72 65 64 20 73 63  h the altered sc
2e50: 68 65 6d 61 20 66 6f 72 20 74 61 62 6c 65 20 58  hema for table X
2e60: 20 69 6e 20 73 74 65 70 20 36 2e 20 20 49 74 20   in step 6.  It 
2e70: 69 73 20 61 20 74 72 69 63 6b 79 20 62 75 74 20  is a tricky but 
2e80: 73 6f 6c 76 61 62 6c 65 0a 23 20 70 72 6f 62 6c  solvable.# probl
2e90: 65 6d 20 74 6f 20 63 72 65 61 74 65 20 63 6f 64  em to create cod
2ea0: 65 20 74 68 61 74 20 77 69 6c 6c 20 70 65 72 66  e that will perf
2eb0: 6f 72 6d 20 74 68 65 20 73 74 65 70 73 20 61 62  orm the steps ab
2ec0: 6f 76 65 20 0a 23 20 66 6f 72 20 22 72 65 61 73  ove .# for "reas
2ed0: 6f 6e 61 62 6c 65 22 20 73 63 68 65 6d 61 73 20  onable" schemas 
2ee0: 63 6f 6d 6d 6f 6e 6c 79 20 66 6f 75 6e 64 20 69  commonly found i
2ef0: 6e 20 70 72 61 63 74 69 63 65 2e 20 20 0a 23 20  n practice.  .# 
2f00: 42 75 74 20 74 68 65 72 65 20 65 78 69 73 74 20  But there exist 
2f10: 6d 61 6c 65 76 6f 6c 65 6e 74 20 73 63 68 65 6d  malevolent schem
2f20: 61 73 20 66 6f 72 20 77 68 69 63 68 0a 23 20 74  as for which.# t
2f30: 68 65 73 65 20 73 74 65 70 73 20 61 72 65 20 6d  hese steps are m
2f40: 61 64 64 65 6e 69 6e 67 6c 79 20 64 69 66 66 69  addeningly diffi
2f50: 63 75 6c 74 20 74 6f 20 64 6f 20 63 6f 72 72 65  cult to do corre
2f60: 63 74 6c 79 2e 20 20 52 61 74 68 65 72 20 74 68  ctly.  Rather th
2f70: 61 6e 20 63 72 65 61 74 65 0a 23 20 41 4c 54 45  an create.# ALTE
2f80: 52 20 54 41 42 4c 45 20 66 65 61 74 75 72 65 73  R TABLE features
2f90: 20 74 68 61 74 20 77 6f 72 6b 20 63 6f 72 72 65   that work corre
2fa0: 63 74 6c 79 20 39 39 2e 39 25 20 6f 66 20 74 68  ctly 99.9% of th
2fb0: 65 20 74 69 6d 65 20 62 75 74 20 70 6f 73 73 69  e time but possi
2fc0: 62 6c 79 0a 23 20 63 6f 72 72 75 70 74 20 74 68  bly.# corrupt th
2fd0: 65 20 73 63 68 65 6d 61 20 6f 6e 20 74 68 65 20  e schema on the 
2fe0: 6f 74 68 65 72 20 30 2e 31 25 2c 20 74 68 65 20  other 0.1%, the 
2ff0: 53 51 4c 69 74 65 20 64 65 76 65 6c 6f 70 65 72  SQLite developer
3000: 73 20 68 61 76 65 20 64 65 63 69 64 65 64 0a 23  s have decided.#
3010: 20 74 6f 20 70 75 73 68 20 74 68 65 20 70 72 6f   to push the pro
3020: 62 6c 65 6d 20 69 6e 74 6f 20 74 68 65 20 61 70  blem into the ap
3030: 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e  plication domain
3040: 2c 20 77 68 65 72 65 20 69 74 20 69 73 20 6d 75  , where it is mu
3050: 63 68 20 65 61 73 69 65 72 0a 23 20 74 6f 20 73  ch easier.# to s
3060: 6f 6c 76 65 2e 0a 3c 2f 74 63 6c 3e 0a 0a 0a 3c  olve..</tcl>...<
3070: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
3080: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3090: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30c0: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41 4e 41  ###.Section {ANA
30d0: 4c 59 5a 45 7d 20 61 6e 61 6c 79 7a 65 20 41 4e  LYZE} analyze AN
30e0: 41 4c 59 5a 45 0a 0a 52 65 63 75 72 73 69 76 65  ALYZE..Recursive
30f0: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61 6e  BubbleDiagram an
3100: 61 6c 79 7a 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c  alyze-stmt.</tcl
3110: 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 4e 41 4c  >..<p> ^The ANAL
3120: 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 67 61 74 68  YZE command gath
3130: 65 72 73 20 73 74 61 74 69 73 74 69 63 73 20 61  ers statistics a
3140: 62 6f 75 74 20 74 61 62 6c 65 73 20 61 6e 64 0a  bout tables and.
3150: 69 6e 64 69 63 65 73 20 61 6e 64 20 73 74 6f 72  indices and stor
3160: 65 73 20 74 68 65 20 63 6f 6c 6c 65 63 74 65 64  es the collected
3170: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69 6e 20   information.in 
3180: 5b 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 73  [internal tables
3190: 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  ] of the databas
31a0: 65 20 77 68 65 72 65 20 74 68 65 20 71 75 65 72  e where the quer
31b0: 79 20 6f 70 74 69 6d 69 7a 65 72 20 63 61 6e 0a  y optimizer can.
31c0: 61 63 63 65 73 73 20 74 68 65 20 69 6e 66 6f 72  access the infor
31d0: 6d 61 74 69 6f 6e 20 61 6e 64 20 75 73 65 20 69  mation and use i
31e0: 74 20 74 6f 20 68 65 6c 70 20 6d 61 6b 65 20 62  t to help make b
31f0: 65 74 74 65 72 20 71 75 65 72 79 20 70 6c 61 6e  etter query plan
3200: 6e 69 6e 67 20 63 68 6f 69 63 65 73 2e 0a 5e 49  ning choices..^I
3210: 66 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 20 61  f no arguments a
3220: 72 65 20 67 69 76 65 6e 2c 20 61 6c 6c 20 61 74  re given, all at
3230: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
3240: 20 61 72 65 0a 61 6e 61 6c 79 7a 65 64 2e 20 20   are.analyzed.  
3250: 5e 49 66 20 61 20 73 63 68 65 6d 61 20 6e 61 6d  ^If a schema nam
3260: 65 20 69 73 20 67 69 76 65 6e 20 61 73 20 74 68  e is given as th
3270: 65 20 61 72 67 75 6d 65 6e 74 2c 20 74 68 65 6e  e argument, then
3280: 20 61 6c 6c 20 74 61 62 6c 65 73 0a 61 6e 64 20   all tables.and 
3290: 69 6e 64 69 63 65 73 20 69 6e 20 74 68 61 74 20  indices in that 
32a0: 6f 6e 65 20 64 61 74 61 62 61 73 65 20 61 72 65  one database are
32b0: 20 61 6e 61 6c 79 7a 65 64 2e 20 20 0a 5e 49 66   analyzed.  .^If
32c0: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73   the argument is
32d0: 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 2c 20 74   a table name, t
32e0: 68 65 6e 20 6f 6e 6c 79 20 74 68 61 74 20 74 61  hen only that ta
32f0: 62 6c 65 20 61 6e 64 20 74 68 65 0a 69 6e 64 69  ble and the.indi
3300: 63 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ces associated w
3310: 69 74 68 20 74 68 61 74 20 74 61 62 6c 65 20 61  ith that table a
3320: 72 65 20 61 6e 61 6c 79 7a 65 64 2e 20 20 5e 49  re analyzed.  ^I
3330: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 0a 69  f the argument.i
3340: 73 20 61 6e 20 69 6e 64 65 78 20 6e 61 6d 65 2c  s an index name,
3350: 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 61 74 20   then only that 
3360: 6f 6e 65 20 69 6e 64 65 78 20 69 73 20 61 6e 61  one index is ana
3370: 6c 79 7a 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20  lyzed.</p>..<p> 
3380: 5e 54 68 65 20 64 65 66 61 75 6c 74 20 69 6d 70  ^The default imp
3390: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 73 74 6f 72  lementation stor
33a0: 65 73 20 61 6c 6c 20 73 74 61 74 69 73 74 69 63  es all statistic
33b0: 73 20 69 6e 20 61 20 73 69 6e 67 6c 65 0a 74 61  s in a single.ta
33c0: 62 6c 65 20 6e 61 6d 65 64 20 22 5b 73 71 6c 69  ble named "[sqli
33d0: 74 65 5f 73 74 61 74 31 5d 22 2e 20 20 5e 49 66  te_stat1]".  ^If
33e0: 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69   SQLite is compi
33f0: 6c 65 64 20 77 69 74 68 20 74 68 65 0a 5b 53 51  led with the.[SQ
3400: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
3410: 33 5d 20 6f 70 74 69 6f 6e 20 61 6e 64 20 77 69  3] option and wi
3420: 74 68 6f 75 74 20 74 68 65 20 5b 53 51 4c 49 54  thout the [SQLIT
3430: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 0a  E_ENABLE_STAT4].
3440: 6f 70 74 69 6f 6e 2c 20 74 68 65 6e 20 61 64 64  option, then add
3450: 69 74 69 6f 6e 61 6c 20 68 69 73 74 6f 67 72 61  itional histogra
3460: 6d 20 64 61 74 61 20 69 73 0a 63 6f 6c 6c 65 63  m data is.collec
3470: 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64 20 69  ted and stored i
3480: 6e 20 5b 73 71 6c 69 74 65 5f 73 74 61 74 33 5d  n [sqlite_stat3]
3490: 2e 0a 20 5e 49 66 20 53 51 4c 69 74 65 20 69 73  .. ^If SQLite is
34a0: 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74   compiled with t
34b0: 68 65 0a 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  he.[SQLITE_ENABL
34c0: 45 5f 53 54 41 54 34 5d 20 6f 70 74 69 6f 6e 2c  E_STAT4] option,
34d0: 20 74 68 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c   then additional
34e0: 20 68 69 73 74 6f 67 72 61 6d 20 64 61 74 61 20   histogram data 
34f0: 69 73 0a 63 6f 6c 6c 65 63 74 65 64 20 61 6e 64  is.collected and
3500: 20 73 74 6f 72 65 64 20 69 6e 20 5b 73 71 6c 69   stored in [sqli
3510: 74 65 5f 73 74 61 74 34 5d 2e 0a 4f 6c 64 65 72  te_stat4]..Older
3520: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
3530: 69 74 65 20 77 6f 75 6c 64 20 6d 61 6b 65 20 75  ite would make u
3540: 73 65 20 6f 66 20 74 68 65 20 5b 73 71 6c 69 74  se of the [sqlit
3550: 65 5f 73 74 61 74 32 5d 20 74 61 62 6c 65 0a 77  e_stat2] table.w
3560: 68 65 6e 20 63 6f 6d 70 69 6c 65 64 20 77 69 74  hen compiled wit
3570: 68 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  h [SQLITE_ENABLE
3580: 5f 53 54 41 54 32 5d 20 62 75 74 20 61 6c 6c 20  _STAT2] but all 
3590: 72 65 63 65 6e 74 20 76 65 72 73 69 6f 6e 73 20  recent versions 
35a0: 6f 66 0a 53 51 4c 69 74 65 20 69 67 6e 6f 72 65  of.SQLite ignore
35b0: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
35c0: 32 20 74 61 62 6c 65 2e 0a 46 75 74 75 72 65 20  2 table..Future 
35d0: 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20 6d 61 79  enhancements may
35e0: 20 63 72 65 61 74 65 0a 61 64 64 69 74 69 6f 6e   create.addition
35f0: 61 6c 20 5b 69 6e 74 65 72 6e 61 6c 20 74 61 62  al [internal tab
3600: 6c 65 73 5d 20 77 69 74 68 20 74 68 65 20 73 61  les] with the sa
3610: 6d 65 20 6e 61 6d 65 20 70 61 74 74 65 72 6e 20  me name pattern 
3620: 65 78 63 65 70 74 20 77 69 74 68 0a 66 69 6e 61  except with.fina
3630: 6c 20 64 69 67 69 74 20 6c 61 72 67 65 72 20 74  l digit larger t
3640: 68 61 6e 20 22 34 22 2e 0a 41 6c 6c 20 6f 66 20  han "4"..All of 
3650: 74 68 65 73 65 20 74 61 62 6c 65 73 20 61 72 65  these tables are
3660: 20 63 6f 6c 6c 65 63 74 69 76 65 6c 79 20 72 65   collectively re
3670: 66 65 72 72 65 64 20 74 6f 20 61 73 20 22 73 74  ferred to as "st
3680: 61 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 22  atistics tables"
3690: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65  ..</p>..<p> ^The
36a0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
36b0: 73 74 61 74 69 73 74 69 63 73 20 74 61 62 6c 65  statistics table
36c0: 73 20 63 61 6e 20 62 65 20 71 75 65 72 69 65 64  s can be queried
36d0: 20 75 73 69 6e 67 20 5b 53 45 4c 45 43 54 5d 0a   using [SELECT].
36e0: 61 6e 64 20 63 61 6e 20 62 65 20 63 68 61 6e 67  and can be chang
36f0: 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b 44 45  ed using the [DE
3700: 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c  LETE], [INSERT],
3710: 20 61 6e 64 20 5b 55 50 44 41 54 45 5d 20 63 6f   and [UPDATE] co
3720: 6d 6d 61 6e 64 73 2e 0a 5e 28 54 68 65 20 5b 44  mmands..^(The [D
3730: 52 4f 50 20 54 41 42 4c 45 5d 20 63 6f 6d 6d 61  ROP TABLE] comma
3740: 6e 64 20 77 6f 72 6b 73 20 6f 6e 20 73 74 61 74  nd works on stat
3750: 69 73 74 69 63 73 20 74 61 62 6c 65 73 0a 61 73  istics tables.as
3760: 20 6f 66 20 53 51 4c 69 74 65 20 76 65 72 73 69   of SQLite versi
3770: 6f 6e 20 33 2e 37 2e 39 2e 29 5e 20 28 5b 64 61  on 3.7.9.)^ ([da
3780: 74 65 6f 66 3a 33 2e 37 2e 39 5d 29 0a 5e 54 68  teof:3.7.9]).^Th
3790: 65 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 5d 20  e [ALTER TABLE] 
37a0: 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74  command does not
37b0: 20 77 6f 72 6b 20 6f 6e 20 73 74 61 74 69 73 74   work on statist
37c0: 69 63 73 20 74 61 62 6c 65 73 2e 0a 41 70 70 72  ics tables..Appr
37d0: 6f 70 72 69 61 74 65 20 63 61 72 65 20 73 68 6f  opriate care sho
37e0: 75 6c 64 20 62 65 20 75 73 65 64 20 77 68 65 6e  uld be used when
37f0: 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 63 6f   changing the co
3800: 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 73 74 61  ntent of the sta
3810: 74 69 73 74 69 63 73 0a 74 61 62 6c 65 73 20 61  tistics.tables a
3820: 73 20 69 6e 76 61 6c 69 64 20 63 6f 6e 74 65 6e  s invalid conten
3830: 74 20 63 61 6e 20 63 61 75 73 65 20 53 51 4c 69  t can cause SQLi
3840: 74 65 20 74 6f 20 73 65 6c 65 63 74 20 69 6e 65  te to select ine
3850: 66 66 69 63 69 65 6e 74 0a 71 75 65 72 79 20 70  fficient.query p
3860: 6c 61 6e 73 2e 20 20 47 65 6e 65 72 61 6c 6c 79  lans.  Generally
3870: 20 73 70 65 61 6b 69 6e 67 2c 20 6f 6e 65 20 73   speaking, one s
3880: 68 6f 75 6c 64 20 6e 6f 74 20 6d 6f 64 69 66 79  hould not modify
3890: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
38a0: 74 68 65 20 73 74 61 74 69 73 74 69 63 73 20 74  the statistics t
38b0: 61 62 6c 65 73 20 62 79 20 61 6e 79 20 6d 65 63  ables by any mec
38c0: 68 61 6e 69 73 6d 20 6f 74 68 65 72 20 74 68 61  hanism other tha
38d0: 6e 20 69 6e 76 6f 6b 69 6e 67 20 74 68 65 0a 41  n invoking the.A
38e0: 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 2e 20  NALYZE command. 
38f0: 20 0a 53 65 65 20 22 5b 4d 61 6e 75 61 6c 20 43   .See "[Manual C
3900: 6f 6e 74 72 6f 6c 20 4f 66 20 51 75 65 72 79 20  ontrol Of Query 
3910: 50 6c 61 6e 73 20 55 73 69 6e 67 20 53 51 4c 49  Plans Using SQLI
3920: 54 45 5f 53 54 41 54 20 54 61 62 6c 65 73 5d 22  TE_STAT Tables]"
3930: 20 66 6f 72 0a 66 75 72 74 68 65 72 20 69 6e 66   for.further inf
3940: 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c  ormation.</p>..<
3950: 70 3e 20 5e 53 74 61 74 69 73 74 69 63 73 20 67  p> ^Statistics g
3960: 61 74 68 65 72 65 64 20 62 79 20 41 4e 41 4c 59  athered by ANALY
3970: 5a 45 20 61 72 65 20 6e 6f 74 20 61 75 74 6f 6d  ZE are not autom
3980: 61 74 69 63 61 6c 6c 79 20 75 70 64 61 74 65 64  atically updated
3990: 20 61 73 0a 74 68 65 20 63 6f 6e 74 65 6e 74 20   as.the content 
39a0: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
39b0: 63 68 61 6e 67 65 73 2e 20 20 49 66 20 74 68 65  changes.  If the
39c0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
39d0: 64 61 74 61 62 61 73 65 0a 63 68 61 6e 67 65 73  database.changes
39e0: 20 73 69 67 6e 69 66 69 63 61 6e 74 6c 79 2c 20   significantly, 
39f0: 6f 72 20 69 66 20 74 68 65 20 64 61 74 61 62 61  or if the databa
3a00: 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  se schema change
3a10: 73 2c 20 74 68 65 6e 20 6f 6e 65 20 73 68 6f 75  s, then one shou
3a20: 6c 64 0a 63 6f 6e 73 69 64 65 72 20 72 65 72 75  ld.consider reru
3a30: 6e 6e 69 6e 67 20 74 68 65 20 41 4e 41 4c 59 5a  nning the ANALYZ
3a40: 45 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 6f 72 64  E command in ord
3a50: 65 72 20 74 6f 20 75 70 64 61 74 65 20 74 68 65  er to update the
3a60: 20 73 74 61 74 69 73 74 69 63 73 2e 3c 2f 70 3e   statistics.</p>
3a70: 0a 0a 3c 70 3e 20 54 68 65 20 71 75 65 72 79 20  ..<p> The query 
3a80: 70 6c 61 6e 6e 65 72 20 6c 6f 61 64 73 20 74 68  planner loads th
3a90: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65  e content of the
3aa0: 20 73 74 61 74 69 73 74 69 63 73 20 74 61 62 6c   statistics tabl
3ab0: 65 73 0a 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 77  es.into memory w
3ac0: 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 69  hen the schema i
3ad0: 73 20 72 65 61 64 2e 20 20 5e 48 65 6e 63 65 2c  s read.  ^Hence,
3ae0: 20 77 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61   when an applica
3af0: 74 69 6f 6e 0a 63 68 61 6e 67 65 73 20 74 68 65  tion.changes the
3b00: 20 73 74 61 74 69 73 74 69 63 73 20 74 61 62 6c   statistics tabl
3b10: 65 73 20 64 69 72 65 63 74 6c 79 2c 20 53 51 4c  es directly, SQL
3b20: 69 74 65 20 77 69 6c 6c 20 6e 6f 74 20 69 6d 6d  ite will not imm
3b30: 65 64 69 61 74 65 6c 79 0a 6e 6f 74 69 63 65 20  ediately.notice 
3b40: 74 68 65 20 63 68 61 6e 67 65 73 2e 20 5e 41 6e  the changes. ^An
3b50: 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a 63 61 6e   application.can
3b60: 20 66 6f 72 63 65 20 74 68 65 20 71 75 65 72 79   force the query
3b70: 20 70 6c 61 6e 6e 65 72 20 74 6f 20 72 65 72 65   planner to rere
3b80: 61 64 20 74 68 65 20 73 74 61 74 69 73 74 69 63  ad the statistic
3b90: 73 20 74 61 62 6c 65 73 20 62 79 20 72 75 6e 6e  s tables by runn
3ba0: 69 6e 67 0a 3c 62 3e 41 4e 41 4c 59 5a 45 20 73  ing.<b>ANALYZE s
3bb0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 3c 2f 62 3e  qlite_master</b>
3bc0: 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 20 0a 0a 3c 74  . </p>..<p> ..<t
3bd0: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
3be0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3bf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3c00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3c10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3c20: 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41 54 54 41  ##.Section {ATTA
3c30: 43 48 20 44 41 54 41 42 41 53 45 7d 20 61 74 74  CH DATABASE} att
3c40: 61 63 68 20 7b 61 74 74 61 63 68 65 64 20 2a 41  ach {attached *A
3c50: 54 54 41 43 48 7d 0a 0a 52 65 63 75 72 73 69 76  TTACH}..Recursiv
3c60: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61  eBubbleDiagram a
3c70: 74 74 61 63 68 2d 73 74 6d 74 0a 3c 2f 74 63 6c  ttach-stmt.</tcl
3c80: 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 54 54 41  >..<p> ^The ATTA
3c90: 43 48 20 44 41 54 41 42 41 53 45 20 73 74 61 74  CH DATABASE stat
3ca0: 65 6d 65 6e 74 20 61 64 64 73 20 61 6e 6f 74 68  ement adds anoth
3cb0: 65 72 20 64 61 74 61 62 61 73 65 20 0a 66 69 6c  er database .fil
3cc0: 65 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74  e to the current
3cd0: 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65   [database conne
3ce0: 63 74 69 6f 6e 5d 2e 20 0a 44 61 74 61 62 61 73  ction]. .Databas
3cf0: 65 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 72  e files that wer
3d00: 65 20 70 72 65 76 69 6f 75 73 6c 79 20 61 74 74  e previously att
3d10: 61 63 68 65 64 20 63 61 6e 20 62 65 20 72 65 6d  ached can be rem
3d20: 6f 76 65 64 20 75 73 69 6e 67 0a 74 68 65 20 5b  oved using.the [
3d30: 44 45 54 41 43 48 20 44 41 54 41 42 41 53 45 5d  DETACH DATABASE]
3d40: 20 63 6f 6d 6d 61 6e 64 2e 0a 0a 3c 70 3e 5e 54   command...<p>^T
3d50: 68 65 20 66 69 6c 65 6e 61 6d 65 20 66 6f 72 20  he filename for 
3d60: 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f 20  the database to 
3d70: 62 65 20 61 74 74 61 63 68 65 64 20 69 73 20 74  be attached is t
3d80: 68 65 20 76 61 6c 75 65 20 6f 66 0a 74 68 65 20  he value of.the 
3d90: 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
3da0: 6f 63 63 75 72 73 20 62 65 66 6f 72 65 20 74 68  occurs before th
3db0: 65 20 41 53 20 6b 65 79 77 6f 72 64 2e 0a 5e 54  e AS keyword..^T
3dc0: 68 65 20 66 69 6c 65 6e 61 6d 65 20 6f 66 20 74  he filename of t
3dd0: 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 6c 6c  he database foll
3de0: 6f 77 73 20 74 68 65 20 73 61 6d 65 20 73 65 6d  ows the same sem
3df0: 61 6e 74 69 63 73 20 61 73 20 74 68 65 0a 66 69  antics as the.fi
3e00: 6c 65 6e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20  lename argument 
3e10: 74 6f 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e  to [sqlite3_open
3e20: 28 29 5d 20 61 6e 64 20 5b 73 71 6c 69 74 65 33  ()] and [sqlite3
3e30: 5f 6f 70 65 6e 5f 76 32 28 29 5d 3b 20 74 68 65  _open_v2()]; the
3e40: 0a 73 70 65 63 69 61 6c 20 6e 61 6d 65 20 22 5b  .special name "[
3e50: 3a 6d 65 6d 6f 72 79 3a 5d 22 20 72 65 73 75 6c  :memory:]" resul
3e60: 74 73 20 69 6e 20 61 6e 20 5b 69 6e 2d 6d 65 6d  ts in an [in-mem
3e70: 6f 72 79 20 64 61 74 61 62 61 73 65 5d 20 61 6e  ory database] an
3e80: 64 20 61 6e 0a 65 6d 70 74 79 20 73 74 72 69 6e  d an.empty strin
3e90: 67 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20 6e  g results in a n
3ea0: 65 77 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74  ew temporary dat
3eb0: 61 62 61 73 65 2e 0a 5e 54 68 65 20 66 69 6c 65  abase..^The file
3ec0: 6e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 63 61  name argument ca
3ed0: 6e 20 62 65 20 61 20 5b 55 52 49 20 66 69 6c 65  n be a [URI file
3ee0: 6e 61 6d 65 5d 20 69 66 20 55 52 49 20 66 69 6c  name] if URI fil
3ef0: 65 6e 61 6d 65 20 70 72 6f 63 65 73 73 69 6e 67  ename processing
3f00: 0a 69 73 20 65 6e 61 62 6c 65 20 6f 6e 20 74 68  .is enable on th
3f10: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
3f20: 63 74 69 6f 6e 2e 20 20 54 68 65 20 64 65 66 61  ction.  The defa
3f30: 75 6c 74 20 62 65 68 61 76 69 6f 72 20 69 73 20  ult behavior is 
3f40: 66 6f 72 0a 55 52 49 20 66 69 6c 65 6e 61 6d 65  for.URI filename
3f50: 73 20 74 6f 20 62 65 20 64 69 73 61 62 6c 65 64  s to be disabled
3f60: 2c 20 68 6f 77 65 76 65 72 20 74 68 61 74 20 6d  , however that m
3f70: 69 67 68 74 20 63 68 61 6e 67 65 20 69 6e 20 61  ight change in a
3f80: 20 66 75 74 75 72 65 20 72 65 6c 65 61 73 65 0a   future release.
3f90: 6f 66 20 53 51 4c 69 74 65 2c 20 73 6f 20 61 70  of SQLite, so ap
3fa0: 70 6c 69 63 61 74 69 6f 6e 20 64 65 76 65 6c 6f  plication develo
3fb0: 70 65 72 73 20 61 72 65 20 61 64 76 69 73 65 64  pers are advised
3fc0: 20 74 6f 20 70 6c 61 6e 20 61 63 63 6f 72 64 69   to plan accordi
3fd0: 6e 67 6c 79 2e 0a 0a 3c 70 3e 54 68 65 20 6e 61  ngly...<p>The na
3fe0: 6d 65 20 74 68 61 74 20 6f 63 63 75 72 73 20 61  me that occurs a
3ff0: 66 74 65 72 20 74 68 65 20 41 53 20 6b 65 79 77  fter the AS keyw
4000: 6f 72 64 20 69 73 20 74 68 65 20 6e 61 6d 65 20  ord is the name 
4010: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  of the database.
4020: 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20  used internally 
4030: 62 79 20 53 51 4c 69 74 65 2e 0a 5e 54 68 65 20  by SQLite..^The 
4040: 73 63 68 65 6d 61 2d 6e 61 6d 65 73 20 27 6d 61  schema-names 'ma
4050: 69 6e 27 20 61 6e 64 20 0a 27 74 65 6d 70 27 20  in' and .'temp' 
4060: 72 65 66 65 72 20 74 6f 20 74 68 65 20 6d 61 69  refer to the mai
4070: 6e 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74  n database and t
4080: 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64  he database used
4090: 20 66 6f 72 20 0a 74 65 6d 70 6f 72 61 72 79 20   for .temporary 
40a0: 74 61 62 6c 65 73 2e 20 20 5e 54 68 65 20 6d 61  tables.  ^The ma
40b0: 69 6e 20 61 6e 64 20 74 65 6d 70 20 64 61 74 61  in and temp data
40c0: 62 61 73 65 73 20 63 61 6e 6e 6f 74 20 62 65 20  bases cannot be 
40d0: 61 74 74 61 63 68 65 64 20 6f 72 0a 64 65 74 61  attached or.deta
40e0: 63 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e  ched.</p>..<p> ^
40f0: 28 54 61 62 6c 65 73 20 69 6e 20 61 6e 20 61 74  (Tables in an at
4100: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
4110: 63 61 6e 20 62 65 20 72 65 66 65 72 72 65 64 20  can be referred 
4120: 74 6f 20 75 73 69 6e 67 20 74 68 65 20 73 79 6e  to using the syn
4130: 74 61 78 20 0a 3c 69 3e 73 63 68 65 6d 61 2d 6e  tax .<i>schema-n
4140: 61 6d 65 2e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  ame.table-name</
4150: 69 3e 2e 29 5e 20 20 5e 49 66 20 74 68 65 20 6e  i>.)^  ^If the n
4160: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
4170: 20 69 73 20 75 6e 69 71 75 65 0a 61 63 72 6f 73   is unique.acros
4180: 73 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  s all attached d
4190: 61 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65  atabases and the
41a0: 20 6d 61 69 6e 20 61 6e 64 20 74 65 6d 70 20 64   main and temp d
41b0: 61 74 61 62 61 73 65 73 2c 20 74 68 65 6e 20 74  atabases, then t
41c0: 68 65 0a 3c 69 3e 73 63 68 65 6d 61 2d 6e 61 6d  he.<i>schema-nam
41d0: 65 3c 2f 69 3e 20 70 72 65 66 69 78 20 69 73 20  e</i> prefix is 
41e0: 6e 6f 74 20 72 65 71 75 69 72 65 64 2e 20 20 5e  not required.  ^
41f0: 49 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 74  If two or more t
4200: 61 62 6c 65 73 20 69 6e 0a 64 69 66 66 65 72 65  ables in.differe
4210: 6e 74 20 64 61 74 61 62 61 73 65 73 20 68 61 76  nt databases hav
4220: 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  e the same name 
4230: 61 6e 64 20 74 68 65 20 0a 3c 69 3e 73 63 68 65  and the .<i>sche
4240: 6d 61 2d 6e 61 6d 65 3c 2f 69 3e 20 70 72 65 66  ma-name</i> pref
4250: 69 78 20 69 73 20 6e 6f 74 20 75 73 65 64 20 6f  ix is not used o
4260: 6e 20 61 20 74 61 62 6c 65 20 72 65 66 65 72 65  n a table refere
4270: 6e 63 65 2c 20 74 68 65 6e 20 74 68 65 0a 74 61  nce, then the.ta
4280: 62 6c 65 20 63 68 6f 73 65 6e 20 69 73 20 74 68  ble chosen is th
4290: 65 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74  e one in the dat
42a0: 61 62 61 73 65 20 74 68 61 74 20 77 61 73 20 6c  abase that was l
42b0: 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 61 74  east recently at
42c0: 74 61 63 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  tached.</p>..<p>
42d0: 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 69  .^Transactions i
42e0: 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c  nvolving multipl
42f0: 65 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  e attached datab
4300: 61 73 65 73 20 61 72 65 20 61 74 6f 6d 69 63 2c  ases are atomic,
4310: 0a 61 73 73 75 6d 69 6e 67 20 74 68 61 74 20 74  .assuming that t
4320: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
4330: 20 69 73 20 6e 6f 74 20 22 5b 3a 6d 65 6d 6f 72   is not "[:memor
4340: 79 3a 5d 22 20 61 6e 64 20 74 68 65 20 0a 5b 6a  y:]" and the .[j
4350: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 5d 20 69 73 20  ournal_mode] is 
4360: 6e 6f 74 20 5b 57 41 4c 5d 2e 20 20 5e 28 49 66  not [WAL].  ^(If
4370: 20 74 68 65 20 6d 61 69 6e 0a 64 61 74 61 62 61   the main.databa
4380: 73 65 20 69 73 20 22 3a 6d 65 6d 6f 72 79 3a 22  se is ":memory:"
4390: 20 6f 72 20 69 66 20 74 68 65 20 6a 6f 75 72 6e   or if the journ
43a0: 61 6c 5f 6d 6f 64 65 20 69 73 20 57 41 4c 2c 20  al_mode is WAL, 
43b0: 74 68 65 6e 20 0a 74 72 61 6e 73 61 63 74 69 6f  then .transactio
43c0: 6e 73 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62  ns continue to b
43d0: 65 20 61 74 6f 6d 69 63 20 77 69 74 68 69 6e 20  e atomic within 
43e0: 65 61 63 68 20 69 6e 64 69 76 69 64 75 61 6c 0a  each individual.
43f0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 42  database file. B
4400: 75 74 20 69 66 20 74 68 65 20 68 6f 73 74 20 63  ut if the host c
4410: 6f 6d 70 75 74 65 72 20 63 72 61 73 68 65 73 20  omputer crashes 
4420: 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 0a 6f 66  in the middle.of
4430: 20 61 20 5b 43 4f 4d 4d 49 54 5d 20 77 68 65 72   a [COMMIT] wher
4440: 65 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 64 61  e two or more da
4450: 74 61 62 61 73 65 20 66 69 6c 65 73 20 61 72 65  tabase files are
4460: 20 75 70 64 61 74 65 64 2c 0a 73 6f 6d 65 20 6f   updated,.some o
4470: 66 20 74 68 6f 73 65 20 66 69 6c 65 73 20 6d 69  f those files mi
4480: 67 68 74 20 67 65 74 20 74 68 65 20 63 68 61 6e  ght get the chan
4490: 67 65 73 20 77 68 65 72 65 20 6f 74 68 65 72 73  ges where others
44a0: 0a 6d 69 67 68 74 20 6e 6f 74 2e 29 5e 0a 3c 2f  .might not.)^.</
44b0: 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 72 65 20 69  p>..<p> ^There i
44c0: 73 20 61 20 6c 69 6d 69 74 2c 20 73 65 74 20 75  s a limit, set u
44d0: 73 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f 6c 69  sing [sqlite3_li
44e0: 6d 69 74 28 29 5d 20 61 6e 64 20 0a 5b 53 51 4c  mit()] and .[SQL
44f0: 49 54 45 5f 4c 49 4d 49 54 5f 41 54 54 41 43 48  ITE_LIMIT_ATTACH
4500: 45 44 5d 2c 20 74 6f 20 74 68 65 20 6e 75 6d 62  ED], to the numb
4510: 65 72 20 6f 66 20 64 61 74 61 62 61 73 65 73 20  er of databases 
4520: 74 68 61 74 20 63 61 6e 20 62 65 0a 73 69 6d 75  that can be.simu
4530: 6c 74 61 6e 65 6f 75 73 6c 79 20 61 74 74 61 63  ltaneously attac
4540: 68 65 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20  hed to a single 
4550: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
4560: 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  ion.</p>..<tcl>.
4570: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4580: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4590: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
45a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
45b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
45c0: 53 65 63 74 69 6f 6e 20 7b 42 45 47 49 4e 20 54  Section {BEGIN T
45d0: 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e  RANSACTION} tran
45e0: 73 61 63 74 69 6f 6e 20 7b 2a 42 45 47 49 4e 20  saction {*BEGIN 
45f0: 43 4f 4d 4d 49 54 20 52 4f 4c 4c 42 41 43 4b 7d  COMMIT ROLLBACK}
4600: 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
4610: 65 44 69 61 67 72 61 6d 20 62 65 67 69 6e 2d 73  eDiagram begin-s
4620: 74 6d 74 0a 52 65 63 75 72 73 69 76 65 42 75 62  tmt.RecursiveBub
4630: 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d 6d 69  bleDiagram commi
4640: 74 2d 73 74 6d 74 0a 52 65 63 75 72 73 69 76 65  t-stmt.Recursive
4650: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 6f  BubbleDiagram ro
4660: 6c 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63  llback-stmt.</tc
4670: 6c 3e 0a 0a 3c 70 3e 0a 5e 4e 6f 20 63 68 61 6e  l>..<p>.^No chan
4680: 67 65 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20  ges can be made 
4690: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
46a0: 65 78 63 65 70 74 20 77 69 74 68 69 6e 20 61 20  except within a 
46b0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 6e  transaction..^An
46c0: 79 20 63 6f 6d 6d 61 6e 64 20 74 68 61 74 20 63  y command that c
46d0: 68 61 6e 67 65 73 20 74 68 65 20 64 61 74 61 62  hanges the datab
46e0: 61 73 65 20 28 62 61 73 69 63 61 6c 6c 79 2c 20  ase (basically, 
46f0: 61 6e 79 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a  any SQL command.
4700: 6f 74 68 65 72 20 74 68 61 6e 20 5b 53 45 4c 45  other than [SELE
4710: 43 54 5d 29 20 77 69 6c 6c 20 61 75 74 6f 6d 61  CT]) will automa
4720: 74 69 63 61 6c 6c 79 20 73 74 61 72 74 20 61 20  tically start a 
4730: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 66 0a 6f  transaction if.o
4740: 6e 65 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64  ne is not alread
4750: 79 20 69 6e 20 65 66 66 65 63 74 2e 20 20 5e 41  y in effect.  ^A
4760: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 74 61  utomatically sta
4770: 72 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  rted transaction
4780: 73 0a 61 72 65 20 63 6f 6d 6d 69 74 74 65 64 20  s.are committed 
4790: 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 71 75  when the last qu
47a0: 65 72 79 20 66 69 6e 69 73 68 65 73 2e 0a 3c 2f  ery finishes..</
47b0: 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63  p>..<p>.^Transac
47c0: 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 73 74 61  tions can be sta
47d0: 72 74 65 64 20 6d 61 6e 75 61 6c 6c 79 20 75 73  rted manually us
47e0: 69 6e 67 20 74 68 65 20 42 45 47 49 4e 0a 63 6f  ing the BEGIN.co
47f0: 6d 6d 61 6e 64 2e 20 20 5e 28 53 75 63 68 20 74  mmand.  ^(Such t
4800: 72 61 6e 73 61 63 74 69 6f 6e 73 20 75 73 75 61  ransactions usua
4810: 6c 6c 79 20 70 65 72 73 69 73 74 20 75 6e 74 69  lly persist unti
4820: 6c 20 74 68 65 20 6e 65 78 74 0a 43 4f 4d 4d 49  l the next.COMMI
4830: 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 20 63 6f  T or ROLLBACK co
4840: 6d 6d 61 6e 64 2e 20 20 42 75 74 20 61 20 74 72  mmand.  But a tr
4850: 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61  ansaction will a
4860: 6c 73 6f 20 0a 52 4f 4c 4c 42 41 43 4b 20 69 66  lso .ROLLBACK if
4870: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
4880: 20 63 6c 6f 73 65 64 20 6f 72 20 69 66 20 61 6e   closed or if an
4890: 20 65 72 72 6f 72 20 6f 63 63 75 72 73 0a 61 6e   error occurs.an
48a0: 64 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63  d the ROLLBACK c
48b0: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
48c0: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  on algorithm is 
48d0: 73 70 65 63 69 66 69 65 64 2e 29 5e 0a 53 65 65  specified.)^.See
48e0: 20 74 68 65 20 64 6f 63 75 6d 65 6e 74 61 74 69   the documentati
48f0: 6f 6e 20 6f 6e 20 74 68 65 20 5b 4f 4e 20 43 4f  on on the [ON CO
4900: 4e 46 4c 49 43 54 5d 0a 63 6c 61 75 73 65 20 66  NFLICT].clause f
4910: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
4920: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
4930: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 63 6f 6e  the ROLLBACK.con
4940: 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
4950: 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 3c 2f 70 3e   algorithm..</p>
4960: 0a 0a 3c 70 3e 0a 5e 45 4e 44 20 54 52 41 4e 53  ..<p>.^END TRANS
4970: 41 43 54 49 4f 4e 20 69 73 20 61 6e 20 61 6c 69  ACTION is an ali
4980: 61 73 20 66 6f 72 20 43 4f 4d 4d 49 54 2e 0a 3c  as for COMMIT..<
4990: 2f 70 3e 0a 0a 3c 70 3e 20 5e 28 54 72 61 6e 73  /p>..<p> ^(Trans
49a0: 61 63 74 69 6f 6e 73 20 63 72 65 61 74 65 64 20  actions created 
49b0: 75 73 69 6e 67 20 42 45 47 49 4e 2e 2e 2e 43 4f  using BEGIN...CO
49c0: 4d 4d 49 54 20 64 6f 20 6e 6f 74 20 6e 65 73 74  MMIT do not nest
49d0: 2e 29 5e 0a 5e 46 6f 72 20 6e 65 73 74 65 64 20  .)^.^For nested 
49e0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20 75 73  transactions, us
49f0: 65 20 74 68 65 20 5b 53 41 56 45 50 4f 49 4e 54  e the [SAVEPOINT
4a00: 5d 20 61 6e 64 20 5b 52 45 4c 45 41 53 45 5d 20  ] and [RELEASE] 
4a10: 63 6f 6d 6d 61 6e 64 73 2e 0a 54 68 65 20 22 54  commands..The "T
4a20: 4f 20 53 41 56 45 50 4f 49 4e 54 20 3c 79 79 74  O SAVEPOINT <yyt
4a30: 65 72 6d 3e 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  erm>name</yyterm
4a40: 3e 22 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  >" clause of the
4a50: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
4a60: 64 20 73 68 6f 77 6e 0a 69 6e 20 74 68 65 20 73  d shown.in the s
4a70: 79 6e 74 61 78 20 64 69 61 67 72 61 6d 20 61 62  yntax diagram ab
4a80: 6f 76 65 20 69 73 20 6f 6e 6c 79 20 61 70 70 6c  ove is only appl
4a90: 69 63 61 62 6c 65 20 74 6f 20 5b 53 41 56 45 50  icable to [SAVEP
4aa0: 4f 49 4e 54 5d 0a 74 72 61 6e 73 61 63 74 69 6f  OINT].transactio
4ab0: 6e 73 2e 20 20 5e 41 6e 20 61 74 74 65 6d 70 74  ns.  ^An attempt
4ac0: 20 74 6f 20 69 6e 76 6f 6b 65 20 74 68 65 20 42   to invoke the B
4ad0: 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 77 69 74  EGIN command wit
4ae0: 68 69 6e 0a 61 20 74 72 61 6e 73 61 63 74 69 6f  hin.a transactio
4af0: 6e 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68  n will fail with
4b00: 20 61 6e 20 65 72 72 6f 72 2c 20 72 65 67 61 72   an error, regar
4b10: 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
4b20: 0a 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  .the transaction
4b30: 20 77 61 73 20 73 74 61 72 74 65 64 20 62 79 20   was started by 
4b40: 5b 53 41 56 45 50 4f 49 4e 54 5d 20 6f 72 20 61  [SAVEPOINT] or a
4b50: 20 70 72 69 6f 72 20 42 45 47 49 4e 2e 0a 5e 54   prior BEGIN..^T
4b60: 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e  he COMMIT comman
4b70: 64 20 61 6e 64 20 74 68 65 20 52 4f 4c 4c 42 41  d and the ROLLBA
4b80: 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f  CK command witho
4b90: 75 74 20 74 68 65 20 54 4f 20 63 6c 61 75 73 65  ut the TO clause
4ba0: 0a 77 6f 72 6b 20 74 68 65 20 73 61 6d 65 20 6f  .work the same o
4bb0: 6e 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 74 72  n [SAVEPOINT] tr
4bc0: 61 6e 73 61 63 74 69 6f 6e 73 20 61 73 20 74 68  ansactions as th
4bd0: 65 79 20 64 6f 20 77 69 74 68 20 74 72 61 6e 73  ey do with trans
4be0: 61 63 74 69 6f 6e 73 0a 73 74 61 72 74 65 64 20  actions.started 
4bf0: 62 79 20 42 45 47 49 4e 2e 3c 2f 70 3e 0a 0a 3c  by BEGIN.</p>..<
4c00: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
4c10: 69 6d 6d 65 64 69 61 74 65 20 7b 42 45 47 49 4e  immediate {BEGIN
4c20: 20 49 4d 4d 45 44 49 41 54 45 7d 20 7b 42 45 47   IMMEDIATE} {BEG
4c30: 49 4e 20 45 58 43 4c 55 53 49 56 45 7d 3c 2f 74  IN EXCLUSIVE}</t
4c40: 63 6c 3e 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63  cl>.<p>.^Transac
4c50: 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 64 65 66  tions can be def
4c60: 65 72 72 65 64 2c 20 69 6d 6d 65 64 69 61 74 65  erred, immediate
4c70: 2c 20 6f 72 20 65 78 63 6c 75 73 69 76 65 2e 20  , or exclusive. 
4c80: 20 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20 74   .^The default t
4c90: 72 61 6e 73 61 63 74 69 6f 6e 20 62 65 68 61 76  ransaction behav
4ca0: 69 6f 72 20 69 73 20 64 65 66 65 72 72 65 64 2e  ior is deferred.
4cb0: 0a 5e 44 65 66 65 72 72 65 64 20 6d 65 61 6e 73  .^Deferred means
4cc0: 20 74 68 61 74 20 6e 6f 20 6c 6f 63 6b 73 20 61   that no locks a
4cd0: 72 65 20 61 63 71 75 69 72 65 64 0a 6f 6e 20 74  re acquired.on t
4ce0: 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 74 69  he database unti
4cf0: 6c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  l the database i
4d00: 73 20 66 69 72 73 74 20 61 63 63 65 73 73 65 64  s first accessed
4d10: 2e 20 20 5e 54 68 75 73 20 77 69 74 68 20 61 0a  .  ^Thus with a.
4d20: 64 65 66 65 72 72 65 64 20 74 72 61 6e 73 61 63  deferred transac
4d30: 74 69 6f 6e 2c 20 74 68 65 20 42 45 47 49 4e 20  tion, the BEGIN 
4d40: 73 74 61 74 65 6d 65 6e 74 20 69 74 73 65 6c 66  statement itself
4d50: 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67 20 74 6f   does nothing to
4d60: 20 74 68 65 0a 66 69 6c 65 73 79 73 74 65 6d 2e   the.filesystem.
4d70: 20 20 5e 4c 6f 63 6b 73 0a 61 72 65 20 6e 6f 74    ^Locks.are not
4d80: 20 61 63 71 75 69 72 65 64 20 75 6e 74 69 6c 20   acquired until 
4d90: 74 68 65 20 66 69 72 73 74 20 72 65 61 64 20 6f  the first read o
4da0: 72 20 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f  r write operatio
4db0: 6e 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20 72  n.  ^The first r
4dc0: 65 61 64 0a 6f 70 65 72 61 74 69 6f 6e 20 61 67  ead.operation ag
4dd0: 61 69 6e 73 74 20 61 20 64 61 74 61 62 61 73 65  ainst a database
4de0: 20 63 72 65 61 74 65 73 20 61 20 5b 53 48 41 52   creates a [SHAR
4df0: 45 44 5d 20 6c 6f 63 6b 20 61 6e 64 20 74 68 65  ED] lock and the
4e00: 20 66 69 72 73 74 0a 77 72 69 74 65 20 6f 70 65   first.write ope
4e10: 72 61 74 69 6f 6e 20 63 72 65 61 74 65 73 20 61  ration creates a
4e20: 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b   [RESERVED] lock
4e30: 2e 20 20 20 5e 42 65 63 61 75 73 65 20 74 68 65  .   ^Because the
4e40: 20 61 63 71 75 69 73 69 74 69 6f 6e 20 6f 66 0a   acquisition of.
4e50: 6c 6f 63 6b 73 20 69 73 20 64 65 66 65 72 72 65  locks is deferre
4e60: 64 20 75 6e 74 69 6c 20 74 68 65 79 20 61 72 65  d until they are
4e70: 20 6e 65 65 64 65 64 2c 20 69 74 20 69 73 20 70   needed, it is p
4e80: 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f  ossible that ano
4e90: 74 68 65 72 0a 74 68 72 65 61 64 20 6f 72 20 70  ther.thread or p
4ea0: 72 6f 63 65 73 73 20 63 6f 75 6c 64 20 63 72 65  rocess could cre
4eb0: 61 74 65 20 61 20 73 65 70 61 72 61 74 65 20 74  ate a separate t
4ec0: 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 77  ransaction and w
4ed0: 72 69 74 65 20 74 6f 0a 74 68 65 20 64 61 74 61  rite to.the data
4ee0: 62 61 73 65 20 61 66 74 65 72 20 74 68 65 20 42  base after the B
4ef0: 45 47 49 4e 20 6f 6e 20 74 68 65 20 63 75 72 72  EGIN on the curr
4f00: 65 6e 74 20 74 68 72 65 61 64 20 68 61 73 20 65  ent thread has e
4f10: 78 65 63 75 74 65 64 2e 0a 5e 49 66 20 74 68 65  xecuted..^If the
4f20: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
4f30: 69 6d 6d 65 64 69 61 74 65 2c 20 74 68 65 6e 20  immediate, then 
4f40: 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b 73  [RESERVED] locks
4f50: 0a 61 72 65 20 61 63 71 75 69 72 65 64 20 6f 6e  .are acquired on
4f60: 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73 20 61   all databases a
4f70: 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 42 45  s soon as the BE
4f80: 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 69 73 0a 65  GIN command is.e
4f90: 78 65 63 75 74 65 64 2c 20 77 69 74 68 6f 75 74  xecuted, without
4fa0: 20 77 61 69 74 69 6e 67 20 66 6f 72 20 74 68 65   waiting for the
4fb0: 0a 64 61 74 61 62 61 73 65 20 74 6f 20 62 65 20  .database to be 
4fc0: 75 73 65 64 2e 20 20 5e 41 66 74 65 72 20 61 20  used.  ^After a 
4fd0: 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 2c  BEGIN IMMEDIATE,
4fe0: 20 0a 6e 6f 20 6f 74 68 65 72 20 5b 64 61 74 61   .no other [data
4ff0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d  base connection]
5000: 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f   will be able to
5010: 20 77 72 69 74 65 20 74 6f 20 74 68 65 20 64 61   write to the da
5020: 74 61 62 61 73 65 20 6f 72 0a 64 6f 20 61 20 42  tabase or.do a B
5030: 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 20 6f  EGIN IMMEDIATE o
5040: 72 20 42 45 47 49 4e 20 45 58 43 4c 55 53 49 56  r BEGIN EXCLUSIV
5050: 45 2e 20 20 5e 4f 74 68 65 72 20 70 72 6f 63 65  E.  ^Other proce
5060: 73 73 65 73 20 63 61 6e 20 63 6f 6e 74 69 6e 75  sses can continu
5070: 65 0a 74 6f 20 72 65 61 64 20 66 72 6f 6d 20 74  e.to read from t
5080: 68 65 20 64 61 74 61 62 61 73 65 2c 20 68 6f 77  he database, how
5090: 65 76 65 72 2e 20 20 5e 41 6e 20 65 78 63 6c 75  ever.  ^An exclu
50a0: 73 69 76 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  sive transaction
50b0: 20 63 61 75 73 65 73 0a 5b 45 58 43 4c 55 53 49   causes.[EXCLUSI
50c0: 56 45 5d 20 6c 6f 63 6b 73 20 74 6f 20 62 65 20  VE] locks to be 
50d0: 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20  acquired on all 
50e0: 64 61 74 61 62 61 73 65 73 2e 20 20 5e 41 66 74  databases.  ^Aft
50f0: 65 72 20 61 20 42 45 47 49 4e 0a 45 58 43 4c 55  er a BEGIN.EXCLU
5100: 53 49 56 45 2c 20 6e 6f 20 6f 74 68 65 72 20 5b  SIVE, no other [
5110: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
5120: 69 6f 6e 5d 20 65 78 63 65 70 74 20 66 6f 72 20  ion] except for 
5130: 5b 72 65 61 64 5f 75 6e 63 6f 6d 6d 69 74 74 65  [read_uncommitte
5140: 64 5d 0a 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 77  d].connections w
5150: 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 72  ill be able to r
5160: 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ead the database
5170: 20 61 6e 64 20 6e 6f 20 6f 74 68 65 72 20 63 6f   and no other co
5180: 6e 6e 65 63 74 69 6f 6e 20 77 69 74 68 6f 75 74  nnection without
5190: 0a 65 78 63 65 70 74 69 6f 6e 20 77 69 6c 6c 20  .exception will 
51a0: 62 65 20 61 62 6c 65 20 74 6f 20 77 72 69 74 65  be able to write
51b0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75 6e   the database un
51c0: 74 69 6c 20 74 68 65 20 74 72 61 6e 73 61 63 74  til the transact
51d0: 69 6f 6e 20 69 73 0a 63 6f 6d 70 6c 65 74 65 2e  ion is.complete.
51e0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28 41 6e 20  .</p>..<p>.^(An 
51f0: 69 6d 70 6c 69 63 69 74 20 74 72 61 6e 73 61 63  implicit transac
5200: 74 69 6f 6e 20 28 61 20 74 72 61 6e 73 61 63 74  tion (a transact
5210: 69 6f 6e 20 74 68 61 74 20 69 73 20 73 74 61 72  ion that is star
5220: 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
5230: 79 2c 0a 6e 6f 74 20 61 20 74 72 61 6e 73 61 63  y,.not a transac
5240: 74 69 6f 6e 20 73 74 61 72 74 65 64 20 62 79 20  tion started by 
5250: 42 45 47 49 4e 29 20 69 73 20 63 6f 6d 6d 69 74  BEGIN) is commit
5260: 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
5270: 79 20 77 68 65 6e 0a 74 68 65 20 6c 61 73 74 20  y when.the last 
5280: 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
5290: 20 66 69 6e 69 73 68 65 73 2e 20 20 41 20 73 74   finishes.  A st
52a0: 61 74 65 6d 65 6e 74 20 66 69 6e 69 73 68 65 73  atement finishes
52b0: 20 77 68 65 6e 20 69 74 73 0a 70 72 65 70 61 72   when its.prepar
52c0: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
52d0: 5b 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29  [sqlite3_reset()
52e0: 20 7c 20 72 65 73 65 74 5d 20 6f 72 0a 5b 73 71   | reset] or.[sq
52f0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29  lite3_finalize()
5300: 20 7c 20 66 69 6e 61 6c 69 7a 65 64 5d 2e 20 20   | finalized].  
5310: 41 6e 20 6f 70 65 6e 20 5b 73 71 6c 69 74 65 33  An open [sqlite3
5320: 5f 62 6c 6f 62 5d 20 75 73 65 64 20 66 6f 72 0a  _blob] used for.
5330: 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42  incremental BLOB
5340: 20 49 2f 4f 20 63 6f 75 6e 74 73 20 61 73 20 61   I/O counts as a
5350: 6e 20 75 6e 66 69 6e 69 73 68 65 64 20 73 74 61  n unfinished sta
5360: 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 5b 73 71  tement.  The [sq
5370: 6c 69 74 65 33 5f 62 6c 6f 62 5d 0a 66 69 6e 69  lite3_blob].fini
5380: 73 68 65 73 20 77 68 65 6e 20 69 74 20 69 73 20  shes when it is 
5390: 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 63 6c  [sqlite3_blob_cl
53a0: 6f 73 65 28 29 20 7c 20 63 6c 6f 73 65 64 5d 2e  ose() | closed].
53b0: 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 68  )^.</p>..<p>.^Th
53c0: 65 20 65 78 70 6c 69 63 69 74 20 43 4f 4d 4d 49  e explicit COMMI
53d0: 54 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73 20 69  T command runs i
53e0: 6d 6d 65 64 69 61 74 65 6c 79 2c 20 65 76 65 6e  mmediately, even
53f0: 20 69 66 20 74 68 65 72 65 20 61 72 65 0a 70 65   if there are.pe
5400: 6e 64 69 6e 67 20 5b 53 45 4c 45 43 54 5d 20 73  nding [SELECT] s
5410: 74 61 74 65 6d 65 6e 74 73 2e 20 20 5e 48 6f 77  tatements.  ^How
5420: 65 76 65 72 2c 20 69 66 20 74 68 65 72 65 20 61  ever, if there a
5430: 72 65 20 70 65 6e 64 69 6e 67 0a 77 72 69 74 65  re pending.write
5440: 20 6f 70 65 72 61 74 69 6f 6e 73 2c 20 74 68 65   operations, the
5450: 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 0a   COMMIT command.
5460: 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61  will fail with a
5470: 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 5b 53 51  n error code [SQ
5480: 4c 49 54 45 5f 42 55 53 59 5d 2e 0a 3c 2f 70 3e  LITE_BUSY]..</p>
5490: 0a 0a 3c 70 3e 0a 5e 41 6e 20 61 74 74 65 6d 70  ..<p>.^An attemp
54a0: 74 20 74 6f 20 65 78 65 63 75 74 65 20 43 4f 4d  t to execute COM
54b0: 4d 49 54 20 6d 69 67 68 74 20 61 6c 73 6f 20 72  MIT might also r
54c0: 65 73 75 6c 74 20 69 6e 20 61 6e 20 5b 53 51 4c  esult in an [SQL
54d0: 49 54 45 5f 42 55 53 59 5d 20 72 65 74 75 72 6e  ITE_BUSY] return
54e0: 20 63 6f 64 65 0a 69 66 20 61 6e 20 61 6e 6f 74   code.if an anot
54f0: 68 65 72 20 74 68 72 65 61 64 20 6f 72 20 70 72  her thread or pr
5500: 6f 63 65 73 73 20 68 61 73 20 61 20 5b 73 68 61  ocess has a [sha
5510: 72 65 64 20 6c 6f 63 6b 5d 20 6f 6e 20 74 68 65  red lock] on the
5520: 20 64 61 74 61 62 61 73 65 0a 74 68 61 74 20 70   database.that p
5530: 72 65 76 65 6e 74 65 64 20 74 68 65 20 64 61 74  revented the dat
5540: 61 62 61 73 65 20 66 72 6f 6d 20 62 65 69 6e 67  abase from being
5550: 20 75 70 64 61 74 65 64 2e 20 20 5e 57 68 65 6e   updated.  ^When
5560: 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 6e   COMMIT fails in
5570: 20 74 68 69 73 0a 77 61 79 2c 20 74 68 65 20 74   this.way, the t
5580: 72 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69  ransaction remai
5590: 6e 73 20 61 63 74 69 76 65 20 61 6e 64 20 74 68  ns active and th
55a0: 65 20 43 4f 4d 4d 49 54 20 63 61 6e 20 62 65 20  e COMMIT can be 
55b0: 72 65 74 72 69 65 64 20 6c 61 74 65 72 0a 61 66  retried later.af
55c0: 74 65 72 20 74 68 65 20 72 65 61 64 65 72 20 68  ter the reader h
55d0: 61 73 20 68 61 64 20 61 20 63 68 61 6e 63 65 20  as had a chance 
55e0: 74 6f 20 63 6c 65 61 72 2e 0a 3c 2f 70 3e 0a 0a  to clear..</p>..
55f0: 3c 70 3e 0a 49 6e 20 76 65 72 79 20 6f 6c 64 20  <p>.In very old 
5600: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
5610: 74 65 20 28 62 65 66 6f 72 65 20 76 65 72 73 69  te (before versi
5620: 6f 6e 20 33 2e 37 2e 31 31 20 2d 20 5b 64 61 74  on 3.7.11 - [dat
5630: 65 6f 66 3a 33 2e 37 2e 31 31 5d 29 0a 74 68 65  eof:3.7.11]).the
5640: 20 52 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c 20 66   ROLLBACK will f
5650: 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f  ail with an erro
5660: 72 20 63 6f 64 65 20 0a 5b 53 51 4c 49 54 45 5f  r code .[SQLITE_
5670: 42 55 53 59 5d 20 69 66 20 74 68 65 72 65 20 61  BUSY] if there a
5680: 72 65 20 61 6e 79 20 70 65 6e 64 69 6e 67 20 71  re any pending q
5690: 75 65 72 69 65 73 2e 20 20 5e 49 6e 20 6d 6f 72  ueries.  ^In mor
56a0: 65 20 72 65 63 65 6e 74 0a 76 65 72 73 69 6f 6e  e recent.version
56b0: 73 20 6f 66 20 53 51 4c 69 74 65 2c 20 74 68 65  s of SQLite, the
56c0: 20 52 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c 20 70   ROLLBACK will p
56d0: 72 6f 63 65 65 64 20 61 6e 64 20 70 65 6e 64 69  roceed and pendi
56e0: 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 0a 77 69  ng statements.wi
56f0: 6c 6c 20 6f 66 74 65 6e 20 62 65 20 61 62 6f 72  ll often be abor
5700: 74 65 64 2c 20 63 61 75 73 69 6e 67 20 74 68 65  ted, causing the
5710: 6d 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 5b  m to return an [
5720: 53 51 4c 49 54 45 5f 41 42 4f 52 54 5d 20 6f 72  SQLITE_ABORT] or
5730: 0a 5b 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52  .[SQLITE_ABORT_R
5740: 4f 4c 4c 42 41 43 4b 5d 20 65 72 72 6f 72 2e 0a  OLLBACK] error..
5750: 5e 49 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69  ^In SQLite versi
5760: 6f 6e 20 33 2e 38 2e 38 20 28 5b 64 61 74 65 6f  on 3.8.8 ([dateo
5770: 66 3a 33 2e 38 2e 38 5d 29 20 61 6e 64 20 6c 61  f:3.8.8]) and la
5780: 74 65 72 2c 0a 61 20 70 65 6e 64 69 6e 67 20 72  ter,.a pending r
5790: 65 61 64 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75  ead will continu
57a0: 65 20 66 75 6e 63 74 69 6f 6e 69 6e 67 0a 61 66  e functioning.af
57b0: 74 65 72 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  ter the ROLLBACK
57c0: 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68 65 20   as long as the 
57d0: 52 4f 4c 4c 42 41 43 4b 20 64 6f 65 73 20 6e 6f  ROLLBACK does no
57e0: 74 20 6d 6f 64 69 66 79 20 74 68 65 20 64 61 74  t modify the dat
57f0: 61 62 61 73 65 0a 73 63 68 65 6d 61 2e 0a 3c 2f  abase.schema..</
5800: 70 3e 0a 0a 3c 70 3e 0a 49 66 20 5b 50 52 41 47  p>..<p>.If [PRAG
5810: 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 5d  MA journal_mode]
5820: 20 69 73 20 73 65 74 20 74 6f 20 4f 46 46 20 28   is set to OFF (
5830: 74 68 75 73 20 64 69 73 61 62 6c 69 6e 67 20 74  thus disabling t
5840: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
5850: 6e 61 6c 0a 66 69 6c 65 29 20 74 68 65 6e 20 74  nal.file) then t
5860: 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74  he behavior of t
5870: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d  he ROLLBACK comm
5880: 61 6e 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  and is undefined
5890: 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73 70  ..</p>..<h3>Resp
58a0: 6f 6e 73 65 20 54 6f 20 45 72 72 6f 72 73 20 57  onse To Errors W
58b0: 69 74 68 69 6e 20 41 20 54 72 61 6e 73 61 63 74  ithin A Transact
58c0: 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 5e 28  ion</h3>..<p> ^(
58d0: 49 66 20 63 65 72 74 61 69 6e 20 6b 69 6e 64 73  If certain kinds
58e0: 20 6f 66 20 65 72 72 6f 72 73 20 6f 63 63 75 72   of errors occur
58f0: 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
5900: 63 74 69 6f 6e 2c 20 74 68 65 0a 74 72 61 6e 73  ction, the.trans
5910: 61 63 74 69 6f 6e 20 6d 61 79 20 6f 72 20 6d 61  action may or ma
5920: 79 20 6e 6f 74 20 62 65 20 72 6f 6c 6c 65 64 20  y not be rolled 
5930: 62 61 63 6b 20 61 75 74 6f 6d 61 74 69 63 61 6c  back automatical
5940: 6c 79 2e 20 20 54 68 65 0a 65 72 72 6f 72 73 20  ly.  The.errors 
5950: 74 68 61 74 20 63 61 6e 20 63 61 75 73 65 20 61  that can cause a
5960: 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 6c 6c  n automatic roll
5970: 62 61 63 6b 20 69 6e 63 6c 75 64 65 3a 3c 2f 70  back include:</p
5980: 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20 5b 53 51  >..<ul>.<li> [SQ
5990: 4c 49 54 45 5f 46 55 4c 4c 5d 3a 20 64 61 74 61  LITE_FULL]: data
59a0: 62 61 73 65 20 6f 72 20 64 69 73 6b 20 66 75 6c  base or disk ful
59b0: 6c 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 49  l.<li> [SQLITE_I
59c0: 4f 45 52 52 5d 3a 20 64 69 73 6b 20 49 2f 4f 20  OERR]: disk I/O 
59d0: 65 72 72 6f 72 0a 3c 6c 69 3e 20 5b 53 51 4c 49  error.<li> [SQLI
59e0: 54 45 5f 42 55 53 59 5d 3a 20 64 61 74 61 62 61  TE_BUSY]: databa
59f0: 73 65 20 69 6e 20 75 73 65 20 62 79 20 61 6e 6f  se in use by ano
5a00: 74 68 65 72 20 70 72 6f 63 65 73 73 0a 3c 6c 69  ther process.<li
5a10: 3e 20 5b 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5d  > [SQLITE_NOMEM]
5a20: 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f 72 79 0a  : out or memory.
5a30: 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 46 6f  </ul>)^..<p>.^Fo
5a40: 72 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20 65  r all of these e
5a50: 72 72 6f 72 73 2c 20 53 51 4c 69 74 65 20 61 74  rrors, SQLite at
5a60: 74 65 6d 70 74 73 20 74 6f 20 75 6e 64 6f 20 6a  tempts to undo j
5a70: 75 73 74 20 74 68 65 20 6f 6e 65 20 73 74 61 74  ust the one stat
5a80: 65 6d 65 6e 74 0a 69 74 20 77 61 73 20 77 6f 72  ement.it was wor
5a90: 6b 69 6e 67 20 6f 6e 20 61 6e 64 20 6c 65 61 76  king on and leav
5aa0: 65 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 70  e changes from p
5ab0: 72 69 6f 72 20 73 74 61 74 65 6d 65 6e 74 73 20  rior statements 
5ac0: 77 69 74 68 69 6e 20 74 68 65 0a 73 61 6d 65 20  within the.same 
5ad0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e 74 61  transaction inta
5ae0: 63 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20  ct and continue 
5af0: 77 69 74 68 20 74 68 65 20 74 72 61 6e 73 61 63  with the transac
5b00: 74 69 6f 6e 2e 20 20 5e 48 6f 77 65 76 65 72 2c  tion.  ^However,
5b10: 20 0a 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74   .depending on t
5b20: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  he statement bei
5b30: 6e 67 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64  ng evaluated and
5b40: 20 74 68 65 20 70 6f 69 6e 74 20 61 74 20 77 68   the point at wh
5b50: 69 63 68 20 74 68 65 0a 65 72 72 6f 72 20 6f 63  ich the.error oc
5b60: 63 75 72 73 2c 20 69 74 20 6d 69 67 68 74 20 62  curs, it might b
5b70: 65 20 6e 65 63 65 73 73 61 72 79 20 66 6f 72 20  e necessary for 
5b80: 53 51 4c 69 74 65 20 74 6f 20 72 6f 6c 6c 62 61  SQLite to rollba
5b90: 63 6b 20 61 6e 64 0a 63 61 6e 63 65 6c 20 74 68  ck and.cancel th
5ba0: 65 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63  e entire transac
5bb0: 74 69 6f 6e 2e 20 20 5e 41 6e 20 61 70 70 6c 69  tion.  ^An appli
5bc0: 63 61 74 69 6f 6e 20 63 61 6e 20 74 65 6c 6c 20  cation can tell 
5bd0: 77 68 69 63 68 0a 63 6f 75 72 73 65 20 6f 66 20  which.course of 
5be0: 61 63 74 69 6f 6e 20 53 51 4c 69 74 65 20 74 6f  action SQLite to
5bf0: 6f 6b 20 62 79 20 75 73 69 6e 67 20 74 68 65 0a  ok by using the.
5c00: 5b 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74  [sqlite3_get_aut
5c10: 6f 63 6f 6d 6d 69 74 28 29 5d 20 43 2d 6c 61 6e  ocommit()] C-lan
5c20: 67 75 61 67 65 20 69 6e 74 65 72 66 61 63 65 2e  guage interface.
5c30: 3c 2f 70 3e 0a 0a 3c 70 3e 49 74 20 69 73 20 72  </p>..<p>It is r
5c40: 65 63 6f 6d 6d 65 6e 64 65 64 20 74 68 61 74 20  ecommended that 
5c50: 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 72 65 73  applications res
5c60: 70 6f 6e 64 20 74 6f 20 74 68 65 20 65 72 72 6f  pond to the erro
5c70: 72 73 0a 6c 69 73 74 65 64 20 61 62 6f 76 65 20  rs.listed above 
5c80: 62 79 20 65 78 70 6c 69 63 69 74 6c 79 20 69 73  by explicitly is
5c90: 73 75 69 6e 67 20 61 20 52 4f 4c 4c 42 41 43 4b  suing a ROLLBACK
5ca0: 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 49 66 20 74   command.  ^If t
5cb0: 68 65 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20  he .transaction 
5cc0: 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e  has already been
5cd0: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 75 74   rolled back aut
5ce0: 6f 6d 61 74 69 63 61 6c 6c 79 0a 62 79 20 74 68  omatically.by th
5cf0: 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73 65  e error response
5d00: 2c 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42  , then the ROLLB
5d10: 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c  ACK command will
5d20: 20 66 61 69 6c 20 77 69 74 68 20 61 6e 0a 65 72   fail with an.er
5d30: 72 6f 72 2c 20 62 75 74 20 6e 6f 20 68 61 72 6d  ror, but no harm
5d40: 20 69 73 20 63 61 75 73 65 64 20 62 79 20 74 68   is caused by th
5d50: 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46 75 74 75  is.</p>..<p>Futu
5d60: 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  re versions of S
5d70: 51 4c 69 74 65 20 6d 61 79 20 65 78 74 65 6e 64  QLite may extend
5d80: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65 72 72   the list of err
5d90: 6f 72 73 20 77 68 69 63 68 0a 6d 69 67 68 74 20  ors which.might 
5da0: 63 61 75 73 65 20 61 75 74 6f 6d 61 74 69 63 20  cause automatic 
5db0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f 6c 6c  transaction roll
5dc0: 62 61 63 6b 2e 20 20 46 75 74 75 72 65 20 76 65  back.  Future ve
5dd0: 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65  rsions of.SQLite
5de0: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 74 68   might change th
5df0: 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73 65  e error response
5e00: 2e 20 20 49 6e 20 70 61 72 74 69 63 75 6c 61 72  .  In particular
5e10: 2c 20 77 65 20 6d 61 79 0a 63 68 6f 6f 73 65 20  , we may.choose 
5e20: 74 6f 20 73 69 6d 70 6c 69 66 79 20 74 68 65 20  to simplify the 
5e30: 69 6e 74 65 72 66 61 63 65 20 69 6e 20 66 75 74  interface in fut
5e40: 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ure versions of 
5e50: 53 51 4c 69 74 65 20 62 79 0a 63 61 75 73 69 6e  SQLite by.causin
5e60: 67 20 74 68 65 20 65 72 72 6f 72 73 20 61 62 6f  g the errors abo
5e70: 76 65 20 74 6f 20 66 6f 72 63 65 20 61 6e 20 75  ve to force an u
5e80: 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 72 6f 6c  nconditional rol
5e90: 6c 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  lback.</p>..<tcl
5ea0: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
5eb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ec0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ed0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ee0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ef0: 23 0a 53 65 63 74 69 6f 6e 20 7b 53 41 56 45 50  #.Section {SAVEP
5f00: 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74 20  OINT} savepoint 
5f10: 7b 53 41 56 45 50 4f 49 4e 54 20 52 45 4c 45 41  {SAVEPOINT RELEA
5f20: 53 45 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  SE}..RecursiveBu
5f30: 62 62 6c 65 44 69 61 67 72 61 6d 20 73 61 76 65  bbleDiagram save
5f40: 70 6f 69 6e 74 2d 73 74 6d 74 0a 52 65 63 75 72  point-stmt.Recur
5f50: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
5f60: 6d 20 72 65 6c 65 61 73 65 2d 73 74 6d 74 0a 52  m release-stmt.R
5f70: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
5f80: 61 67 72 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d 73  agram rollback-s
5f90: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20  tmt.</tcl>..<p> 
5fa0: 5e 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20  ^SAVEPOINTs are 
5fb0: 61 20 6d 65 74 68 6f 64 20 6f 66 20 63 72 65 61  a method of crea
5fc0: 74 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e  ting transaction
5fd0: 73 2c 20 73 69 6d 69 6c 61 72 20 74 6f 0a 5b 42  s, similar to.[B
5fe0: 45 47 49 4e 5d 20 61 6e 64 20 5b 43 4f 4d 4d 49  EGIN] and [COMMI
5ff0: 54 5d 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  T], except that 
6000: 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 61 6e  the SAVEPOINT an
6010: 64 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  d RELEASE comman
6020: 64 73 0a 61 72 65 20 6e 61 6d 65 64 20 61 6e 64  ds.are named and
6030: 20 6d 61 79 20 62 65 20 6e 65 73 74 65 64 2e 3c   may be nested.<
6040: 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 53 41  /p>..<p> ^The SA
6050: 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 20  VEPOINT command 
6060: 73 74 61 72 74 73 20 61 20 6e 65 77 20 74 72 61  starts a new tra
6070: 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 20 61 20  nsaction with a 
6080: 6e 61 6d 65 2e 0a 5e 54 68 65 20 74 72 61 6e 73  name..^The trans
6090: 61 63 74 69 6f 6e 20 6e 61 6d 65 73 20 6e 65 65  action names nee
60a0: 64 20 6e 6f 74 20 62 65 20 75 6e 69 71 75 65 2e  d not be unique.
60b0: 0a 5e 28 41 20 53 41 56 45 50 4f 49 4e 54 20 63  .^(A SAVEPOINT c
60c0: 61 6e 20 62 65 20 73 74 61 72 74 65 64 20 65 69  an be started ei
60d0: 74 68 65 72 20 77 69 74 68 69 6e 20 6f 72 20 6f  ther within or o
60e0: 75 74 73 69 64 65 20 6f 66 0a 61 20 5b 42 45 47  utside of.a [BEG
60f0: 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e 29  IN]...[COMMIT].)
6100: 5e 20 20 5e 28 57 68 65 6e 20 61 20 53 41 56 45  ^  ^(When a SAVE
6110: 50 4f 49 4e 54 20 69 73 20 74 68 65 20 6f 75 74  POINT is the out
6120: 65 72 2d 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e  er-most savepoin
6130: 74 0a 61 6e 64 20 69 74 20 69 73 20 6e 6f 74 20  t.and it is not 
6140: 77 69 74 68 69 6e 20 61 20 5b 42 45 47 49 4e 5d  within a [BEGIN]
6150: 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 20 74 68 65 6e  ...[COMMIT] then
6160: 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73   the behavior is
6170: 20 74 68 65 0a 73 61 6d 65 20 61 73 20 42 45 47   the.same as BEG
6180: 49 4e 20 44 45 46 45 52 52 45 44 20 54 52 41 4e  IN DEFERRED TRAN
6190: 53 41 43 54 49 4f 4e 2e 29 5e 3c 2f 70 3e 0a 0a  SACTION.)^</p>..
61a0: 3c 70 3e 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b  <p>^The ROLLBACK
61b0: 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 76 65   TO command reve
61c0: 72 74 73 20 74 68 65 20 73 74 61 74 65 20 6f 66  rts the state of
61d0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62 61   the database ba
61e0: 63 6b 20 74 6f 20 77 68 61 74 0a 69 74 20 77 61  ck to what.it wa
61f0: 73 20 6a 75 73 74 20 61 66 74 65 72 20 74 68 65  s just after the
6200: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 53   corresponding S
6210: 41 56 45 50 4f 49 4e 54 2e 20 20 5e 4e 6f 74 65  AVEPOINT.  ^Note
6220: 20 74 68 61 74 20 75 6e 6c 69 6b 65 20 74 68 61   that unlike tha
6230: 74 0a 70 6c 61 69 6e 20 5b 52 4f 4c 4c 42 41 43  t.plain [ROLLBAC
6240: 4b 5d 20 63 6f 6d 6d 61 6e 64 20 28 77 69 74 68  K] command (with
6250: 6f 75 74 20 74 68 65 20 54 4f 20 6b 65 79 77 6f  out the TO keywo
6260: 72 64 29 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  rd) the ROLLBACK
6270: 20 54 4f 20 63 6f 6d 6d 61 6e 64 0a 64 6f 65 73   TO command.does
6280: 20 6e 6f 74 20 63 61 6e 63 65 6c 20 74 68 65 20   not cancel the 
6290: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 49  transaction.  ^I
62a0: 6e 73 74 65 61 64 20 6f 66 20 63 61 6e 63 65 6c  nstead of cancel
62b0: 6c 69 6e 67 20 74 68 65 20 74 72 61 6e 73 61 63  ling the transac
62c0: 74 69 6f 6e 2c 0a 74 68 65 20 52 4f 4c 4c 42 41  tion,.the ROLLBA
62d0: 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65  CK TO command re
62e0: 73 74 61 72 74 73 20 74 68 65 20 74 72 61 6e 73  starts the trans
62f0: 61 63 74 69 6f 6e 20 61 67 61 69 6e 20 61 74 20  action again at 
6300: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 5e  the beginning..^
6310: 41 6c 6c 20 69 6e 74 65 72 76 65 6e 69 6e 67 20  All intervening 
6320: 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20 63  SAVEPOINTs are c
6330: 61 6e 63 65 6c 65 64 2c 20 68 6f 77 65 76 65 72  anceled, however
6340: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52  .</p>..<p>^The R
6350: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 69  ELEASE command i
6360: 73 20 6c 69 6b 65 20 61 20 5b 43 4f 4d 4d 49 54  s like a [COMMIT
6370: 5d 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49 4e  ] for a SAVEPOIN
6380: 54 2e 0a 5e 54 68 65 20 52 45 4c 45 41 53 45 20  T..^The RELEASE 
6390: 63 6f 6d 6d 61 6e 64 20 63 61 75 73 65 73 20 61  command causes a
63a0: 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73 20 62 61  ll savepoints ba
63b0: 63 6b 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64  ck to and includ
63c0: 69 6e 67 20 74 68 65 20 0a 6d 6f 73 74 20 72 65  ing the .most re
63d0: 63 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 77  cent savepoint w
63e0: 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e  ith a matching n
63f0: 61 6d 65 20 74 6f 20 62 65 20 72 65 6d 6f 76 65  ame to be remove
6400: 64 20 66 72 6f 6d 20 74 68 65 20 0a 74 72 61 6e  d from the .tran
6410: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2e 20 20  saction stack.  
6420: 5e 54 68 65 20 52 45 4c 45 41 53 45 20 6f 66 20  ^The RELEASE of 
6430: 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63  an inner transac
6440: 74 69 6f 6e 0a 64 6f 65 73 20 6e 6f 74 20 63 61  tion.does not ca
6450: 75 73 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20  use any changes 
6460: 74 6f 20 62 65 20 77 72 69 74 74 65 6e 20 74 6f  to be written to
6470: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
6480: 6c 65 3b 20 69 74 20 6d 65 72 65 6c 79 0a 72 65  le; it merely.re
6490: 6d 6f 76 65 73 20 73 61 76 65 70 6f 69 6e 74 73  moves savepoints
64a0: 20 66 72 6f 6d 20 74 68 65 20 74 72 61 6e 73 61   from the transa
64b0: 63 74 69 6f 6e 20 73 74 61 63 6b 20 73 75 63 68  ction stack such
64c0: 20 74 68 61 74 20 69 74 20 69 73 0a 6e 6f 20 6c   that it is.no l
64d0: 6f 6e 67 65 72 20 70 6f 73 73 69 62 6c 65 20 74  onger possible t
64e0: 6f 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 74 68  o ROLLBACK TO th
64f0: 6f 73 65 20 73 61 76 65 70 6f 69 6e 74 73 2e 0a  ose savepoints..
6500: 5e 49 66 20 61 20 52 45 4c 45 41 53 45 20 63 6f  ^If a RELEASE co
6510: 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20 74  mmand releases t
6520: 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76  he outermost sav
6530: 65 70 6f 69 6e 74 2c 20 73 6f 0a 74 68 61 74 20  epoint, so.that 
6540: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
6550: 73 74 61 63 6b 20 62 65 63 6f 6d 65 73 20 65 6d  stack becomes em
6560: 70 74 79 2c 20 74 68 65 6e 20 52 45 4c 45 41 53  pty, then RELEAS
6570: 45 20 69 73 20 74 68 65 20 73 61 6d 65 0a 61 73  E is the same.as
6580: 20 5b 43 4f 4d 4d 49 54 5d 2e 0a 5e 54 68 65 20   [COMMIT]..^The 
6590: 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64  [COMMIT] command
65a0: 20 6d 61 79 20 62 65 20 75 73 65 64 20 74 6f 20   may be used to 
65b0: 72 65 6c 65 61 73 65 20 61 6c 6c 20 73 61 76 65  release all save
65c0: 70 6f 69 6e 74 73 20 61 6e 64 0a 63 6f 6d 6d 69  points and.commi
65d0: 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  t the transactio
65e0: 6e 20 65 76 65 6e 20 69 66 20 74 68 65 20 74 72  n even if the tr
65f0: 61 6e 73 61 63 74 69 6f 6e 20 77 61 73 20 6f 72  ansaction was or
6600: 69 67 69 6e 61 6c 6c 79 20 73 74 61 72 74 65 64  iginally started
6610: 0a 62 79 20 61 20 53 41 56 45 50 4f 49 4e 54 20  .by a SAVEPOINT 
6620: 63 6f 6d 6d 61 6e 64 20 69 6e 73 74 65 61 64 20  command instead 
6630: 6f 66 20 61 20 5b 42 45 47 49 4e 5d 20 63 6f 6d  of a [BEGIN] com
6640: 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  mand.</p>..<p>^I
6650: 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d  f the savepoint-
6660: 6e 61 6d 65 20 69 6e 20 61 20 52 45 4c 45 41 53  name in a RELEAS
6670: 45 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e  E command does n
6680: 6f 74 20 6d 61 74 63 68 20 61 6e 79 0a 73 61 76  ot match any.sav
6690: 65 70 6f 69 6e 74 20 63 75 72 72 65 6e 74 6c 79  epoint currently
66a0: 20 69 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74   in the transact
66b0: 69 6f 6e 20 73 74 61 63 6b 2c 20 74 68 65 6e 20  ion stack, then 
66c0: 6e 6f 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72  no savepoints ar
66d0: 65 0a 72 65 6c 65 61 73 65 64 2c 20 74 68 65 20  e.released, the 
66e0: 64 61 74 61 62 61 73 65 20 69 73 20 75 6e 63 68  database is unch
66f0: 61 6e 67 65 64 2c 20 61 6e 64 20 74 68 65 20 52  anged, and the R
6700: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72  ELEASE command r
6710: 65 74 75 72 6e 73 0a 61 6e 20 65 72 72 6f 72 2e  eturns.an error.
6720: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74  </p>..<p>^Note t
6730: 68 61 74 20 61 6e 20 69 6e 6e 65 72 20 74 72 61  hat an inner tra
6740: 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 63  nsaction might c
6750: 6f 6d 6d 69 74 20 28 75 73 69 6e 67 20 74 68 65  ommit (using the
6760: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
6770: 29 0a 62 75 74 20 74 68 65 6e 20 6c 61 74 65 72  ).but then later
6780: 20 68 61 76 65 20 69 74 73 20 77 6f 72 6b 20 75   have its work u
6790: 6e 64 6f 6e 65 20 62 79 20 61 20 52 4f 4c 4c 42  ndone by a ROLLB
67a0: 41 43 4b 20 69 6e 20 61 6e 20 6f 75 74 65 72 20  ACK in an outer 
67b0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 20  transaction..^A 
67c0: 70 6f 77 65 72 20 66 61 69 6c 75 72 65 20 6f 72  power failure or
67d0: 20 70 72 6f 67 72 61 6d 20 63 72 61 73 68 20 6f   program crash o
67e0: 72 20 4f 53 20 63 72 61 73 68 20 77 69 6c 6c 20  r OS crash will 
67f0: 63 61 75 73 65 20 74 68 65 20 6f 75 74 65 72 2d  cause the outer-
6800: 6d 6f 73 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e  most.transaction
6810: 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 2c 20 75 6e   to rollback, un
6820: 64 6f 69 6e 67 20 61 6c 6c 20 63 68 61 6e 67 65  doing all change
6830: 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63 75  s that have occu
6840: 72 72 65 64 20 77 69 74 68 69 6e 0a 74 68 61 74  rred within.that
6850: 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74 69   outer transacti
6860: 6f 6e 2c 20 65 76 65 6e 20 63 68 61 6e 67 65 73  on, even changes
6870: 20 74 68 61 74 20 68 61 76 65 20 73 75 70 70 6f   that have suppo
6880: 73 65 64 6c 79 20 62 65 65 6e 20 22 63 6f 6d 6d  sedly been "comm
6890: 69 74 74 65 64 22 0a 62 79 20 74 68 65 20 52 45  itted".by the RE
68a0: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2e 20 20  LEASE command.  
68b0: 5e 43 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20  ^Content is not 
68c0: 61 63 74 75 61 6c 6c 79 20 63 6f 6d 6d 69 74 74  actually committ
68d0: 65 64 20 6f 6e 20 74 68 65 20 64 69 73 6b 20 0a  ed on the disk .
68e0: 75 6e 74 69 6c 20 74 68 65 20 6f 75 74 65 72 6d  until the outerm
68f0: 6f 73 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ost transaction 
6900: 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70  commits.</p>..<p
6910: 3e 54 68 65 72 65 20 61 72 65 20 73 65 76 65 72  >There are sever
6920: 61 6c 20 77 61 79 73 20 6f 66 20 74 68 69 6e 6b  al ways of think
6930: 69 6e 67 20 61 62 6f 75 74 20 74 68 65 20 52 45  ing about the RE
6940: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 3a 3c 2f  LEASE command:</
6950: 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e  p>..<ul>.<li><p>
6960: 0a 53 6f 6d 65 20 70 65 6f 70 6c 65 20 76 69 65  .Some people vie
6970: 77 20 52 45 4c 45 41 53 45 20 61 73 20 74 68 65  w RELEASE as the
6980: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 43   equivalent of C
6990: 4f 4d 4d 49 54 20 66 6f 72 20 61 20 53 41 56 45  OMMIT for a SAVE
69a0: 50 4f 49 4e 54 2e 0a 54 68 69 73 20 69 73 20 61  POINT..This is a
69b0: 6e 20 61 63 63 65 70 74 61 62 6c 65 20 70 6f 69  n acceptable poi
69c0: 6e 74 20 6f 66 20 76 69 65 77 20 61 73 20 6c 6f  nt of view as lo
69d0: 6e 67 20 61 73 20 6f 6e 65 20 72 65 6d 65 6d 62  ng as one rememb
69e0: 65 72 73 20 74 68 61 74 20 74 68 65 0a 63 68 61  ers that the.cha
69f0: 6e 67 65 73 20 63 6f 6d 6d 69 74 74 65 64 20 62  nges committed b
6a00: 79 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73  y an inner trans
6a10: 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 6c 61 74  action might lat
6a20: 65 72 20 62 65 20 75 6e 64 6f 6e 65 20 62 79 20  er be undone by 
6a30: 61 0a 72 6f 6c 6c 62 61 63 6b 20 69 6e 20 61 6e  a.rollback in an
6a40: 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74 69   outer transacti
6a50: 6f 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c  on.</p></li>..<l
6a60: 69 3e 3c 70 3e 0a 41 6e 6f 74 68 65 72 20 76 69  i><p>.Another vi
6a70: 65 77 20 6f 66 20 52 45 4c 45 41 53 45 20 69 73  ew of RELEASE is
6a80: 20 74 68 61 74 20 69 74 20 6d 65 72 67 65 73 20   that it merges 
6a90: 61 20 6e 61 6d 65 64 20 74 72 61 6e 73 61 63 74  a named transact
6aa0: 69 6f 6e 20 69 6e 74 6f 20 69 74 73 0a 70 61 72  ion into its.par
6ab0: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  ent transaction,
6ac0: 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 61 6d   so that the nam
6ad0: 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  ed transaction a
6ae0: 6e 64 20 69 74 73 20 70 61 72 65 6e 74 20 62 65  nd its parent be
6af0: 63 6f 6d 65 0a 74 68 65 20 73 61 6d 65 20 74 72  come.the same tr
6b00: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 41 66 74 65  ansaction.  Afte
6b10: 72 20 52 45 4c 45 41 53 45 2c 20 74 68 65 20 6e  r RELEASE, the n
6b20: 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  amed transaction
6b30: 20 61 6e 64 20 69 74 73 20 70 61 72 65 6e 74 0a   and its parent.
6b40: 77 69 6c 6c 20 63 6f 6d 6d 69 74 20 6f 72 20 72  will commit or r
6b50: 6f 6c 6c 62 61 63 6b 20 74 6f 67 65 74 68 65 72  ollback together
6b60: 2c 20 77 68 61 74 65 76 65 72 20 74 68 65 69 72  , whatever their
6b70: 20 66 61 74 65 20 6d 61 79 20 62 65 2e 0a 3c 2f   fate may be..</
6b80: 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
6b90: 0a 4f 6e 65 20 63 61 6e 20 61 6c 73 6f 20 74 68  .One can also th
6ba0: 69 6e 6b 20 6f 66 20 73 61 76 65 70 6f 69 6e 74  ink of savepoint
6bb0: 73 20 61 73 0a 22 6d 61 72 6b 73 22 20 69 6e 20  s as."marks" in 
6bc0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
6bd0: 74 69 6d 65 6c 69 6e 65 2e 20 20 49 6e 20 74 68  timeline.  In th
6be0: 69 73 20 76 69 65 77 2c 20 74 68 65 20 53 41 56  is view, the SAV
6bf0: 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 0a 63  EPOINT command.c
6c00: 72 65 61 74 65 73 20 61 20 6e 65 77 20 6d 61 72  reates a new mar
6c10: 6b 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  k, the ROLLBACK 
6c20: 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 77 69 6e  TO command rewin
6c30: 64 73 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 20  ds the timeline 
6c40: 62 61 63 6b 0a 74 6f 20 61 20 70 6f 69 6e 74 20  back.to a point 
6c50: 6a 75 73 74 20 61 66 74 65 72 20 74 68 65 20 6e  just after the n
6c60: 61 6d 65 64 20 6d 61 72 6b 2c 20 61 6e 64 20 74  amed mark, and t
6c70: 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  he RELEASE comma
6c80: 6e 64 0a 65 72 61 73 65 73 20 6d 61 72 6b 73 20  nd.erases marks 
6c90: 66 72 6f 6d 20 74 68 65 20 74 69 6d 65 6c 69 6e  from the timelin
6ca0: 65 20 77 69 74 68 6f 75 74 20 61 63 74 75 61 6c  e without actual
6cb0: 6c 79 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 63 68  ly making any.ch
6cc0: 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61 74  anges to the dat
6cd0: 61 62 61 73 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e  abase..</p></li>
6ce0: 0a 3c 2f 75 6c 3e 0a 0a 0a 0a 3c 68 33 3e 54 72  .</ul>....<h3>Tr
6cf0: 61 6e 73 61 63 74 69 6f 6e 20 4e 65 73 74 69 6e  ansaction Nestin
6d00: 67 20 52 75 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70  g Rules</h3>..<p
6d10: 3e 5e 54 68 65 20 6c 61 73 74 20 74 72 61 6e 73  >^The last trans
6d20: 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20 77  action started w
6d30: 69 6c 6c 20 62 65 20 74 68 65 20 66 69 72 73 74  ill be the first
6d40: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d  .transaction com
6d50: 6d 69 74 74 65 64 20 6f 72 20 72 6f 6c 6c 65 64  mitted or rolled
6d60: 20 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   back.</p>..<p>^
6d70: 54 68 65 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d  The [BEGIN] comm
6d80: 61 6e 64 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69  and only works i
6d90: 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  f the transactio
6da0: 6e 20 73 74 61 63 6b 20 69 73 20 65 6d 70 74 79  n stack is empty
6db0: 2c 20 6f 72 0a 69 6e 20 6f 74 68 65 72 20 77 6f  , or.in other wo
6dc0: 72 64 73 20 69 66 20 74 68 65 72 65 20 61 72 65  rds if there are
6dd0: 20 6e 6f 20 70 65 6e 64 69 6e 67 20 74 72 61 6e   no pending tran
6de0: 73 61 63 74 69 6f 6e 73 2e 20 20 5e 49 66 20 74  sactions.  ^If t
6df0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 73  he transaction.s
6e00: 74 61 63 6b 20 69 73 20 6e 6f 74 20 65 6d 70 74  tack is not empt
6e10: 79 20 77 68 65 6e 20 74 68 65 20 5b 42 45 47 49  y when the [BEGI
6e20: 4e 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e  N] command is in
6e30: 76 6f 6b 65 64 2c 20 74 68 65 6e 20 74 68 65 20  voked, then the 
6e40: 63 6f 6d 6d 61 6e 64 0a 66 61 69 6c 73 20 77 69  command.fails wi
6e50: 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e  th an error.</p>
6e60: 0a 0a 3c 70 3e 5e 54 68 65 20 5b 43 4f 4d 4d 49  ..<p>^The [COMMI
6e70: 54 5d 20 63 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 69  T] command commi
6e80: 74 73 20 61 6c 6c 20 6f 75 74 73 74 61 6e 64 69  ts all outstandi
6e90: 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  ng transactions 
6ea0: 61 6e 64 20 6c 65 61 76 65 73 0a 74 68 65 20 74  and leaves.the t
6eb0: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b  ransaction stack
6ec0: 20 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e   empty.</p>..<p>
6ed0: 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d  ^The RELEASE com
6ee0: 6d 61 6e 64 20 73 74 61 72 74 73 20 77 69 74 68  mand starts with
6ef0: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
6f00: 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 74 68 65   addition to the
6f10: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61  .transaction sta
6f20: 63 6b 20 61 6e 64 20 72 65 6c 65 61 73 65 73 20  ck and releases 
6f30: 73 61 76 65 70 6f 69 6e 74 73 20 62 61 63 6b 77  savepoints backw
6f40: 61 72 64 73 20 0a 69 6e 20 74 69 6d 65 20 75 6e  ards .in time un
6f50: 74 69 6c 20 69 74 20 72 65 6c 65 61 73 65 73 20  til it releases 
6f60: 61 20 73 61 76 65 70 6f 69 6e 74 20 77 69 74 68  a savepoint with
6f70: 20 61 20 6d 61 74 63 68 69 6e 67 20 73 61 76 65   a matching save
6f80: 70 6f 69 6e 74 2d 6e 61 6d 65 2e 0a 5e 50 72 69  point-name..^Pri
6f90: 6f 72 20 73 61 76 65 70 6f 69 6e 74 73 2c 20 65  or savepoints, e
6fa0: 76 65 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 77  ven savepoints w
6fb0: 69 74 68 20 6d 61 74 63 68 69 6e 67 20 73 61 76  ith matching sav
6fc0: 65 70 6f 69 6e 74 2d 6e 61 6d 65 73 2c 20 61 72  epoint-names, ar
6fd0: 65 0a 75 6e 63 68 61 6e 67 65 64 2e 0a 5e 49 66  e.unchanged..^If
6fe0: 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d   the RELEASE com
6ff0: 6d 61 6e 64 20 63 61 75 73 65 73 20 74 68 65 0a  mand causes the.
7000: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
7010: 6b 20 74 6f 20 62 65 63 6f 6d 65 20 65 6d 70 74  k to become empt
7020: 79 20 28 69 66 20 74 68 65 20 52 45 4c 45 41 53  y (if the RELEAS
7030: 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73  E command releas
7040: 65 73 20 74 68 65 0a 6f 75 74 65 72 6d 6f 73 74  es the.outermost
7050: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 66 72 6f   transaction fro
7060: 6d 20 74 68 65 20 73 74 61 63 6b 29 20 74 68 65  m the stack) the
7070: 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  n the transactio
7080: 6e 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a  n commits.</p>..
7090: 3c 70 3e 5e 54 68 65 20 5b 52 4f 4c 4c 42 41 43  <p>^The [ROLLBAC
70a0: 4b 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f  K] command witho
70b0: 75 74 20 61 20 54 4f 20 63 6c 61 75 73 65 20 72  ut a TO clause r
70c0: 6f 6c 6c 73 20 62 61 63 6b 73 20 61 6c 6c 20 74  olls backs all t
70d0: 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61 6e 64 20  ransactions.and 
70e0: 6c 65 61 76 65 73 20 74 68 65 20 74 72 61 6e 73  leaves the trans
70f0: 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70  action stack emp
7100: 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ty.</p>..<p>^The
7110: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
7120: 64 20 77 69 74 68 20 61 20 54 4f 20 63 6c 61 75  d with a TO clau
7130: 73 65 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74 72  se rolls back tr
7140: 61 6e 73 61 63 74 69 6f 6e 73 20 67 6f 69 6e 67  ansactions going
7150: 0a 62 61 63 6b 77 61 72 64 73 20 69 6e 20 74 69  .backwards in ti
7160: 6d 65 20 62 61 63 6b 20 74 6f 20 74 68 65 20 6d  me back to the m
7170: 6f 73 74 20 72 65 63 65 6e 74 20 53 41 56 45 50  ost recent SAVEP
7180: 4f 49 4e 54 20 77 69 74 68 20 61 20 6d 61 74 63  OINT with a matc
7190: 68 69 6e 67 20 6e 61 6d 65 2e 0a 5e 54 68 65 20  hing name..^The 
71a0: 53 41 56 45 50 4f 49 4e 54 20 77 69 74 68 20 74  SAVEPOINT with t
71b0: 68 65 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65  he matching name
71c0: 20 72 65 6d 61 69 6e 73 20 6f 6e 20 74 68 65 20   remains on the 
71d0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
71e0: 6b 2c 0a 62 75 74 20 61 6c 6c 20 64 61 74 61 62  k,.but all datab
71f0: 61 73 65 20 63 68 61 6e 67 65 73 20 74 68 61 74  ase changes that
7200: 20 6f 63 63 75 72 72 65 64 20 61 66 74 65 72 20   occurred after 
7210: 74 68 61 74 20 53 41 56 45 50 4f 49 4e 54 20 77  that SAVEPOINT w
7220: 61 73 20 63 72 65 61 74 65 64 0a 61 72 65 20 72  as created.are r
7230: 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49 66  olled back.  ^If
7240: 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e   the savepoint-n
7250: 61 6d 65 20 69 6e 20 61 20 52 4f 4c 4c 42 41 43  ame in a ROLLBAC
7260: 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 64 6f 65  K TO command doe
7270: 73 20 6e 6f 74 0a 6d 61 74 63 68 20 61 6e 79 20  s not.match any 
7280: 53 41 56 45 50 4f 49 4e 54 20 6f 6e 20 74 68 65  SAVEPOINT on the
7290: 20 73 74 61 63 6b 2c 20 74 68 65 6e 20 74 68 65   stack, then the
72a0: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
72b0: 64 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 0a  d fails with an.
72c0: 65 72 72 6f 72 20 61 6e 64 20 6c 65 61 76 65 73  error and leaves
72d0: 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68   the state of th
72e0: 65 20 64 61 74 61 62 61 73 65 20 75 6e 63 68 61  e database uncha
72f0: 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  nged.</p>..<tcl>
7300: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
7310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7350: 0a 53 65 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74  .Section comment
7360: 20 63 6f 6d 6d 65 6e 74 20 7b 63 6f 6d 6d 65 6e   comment {commen
7370: 74 20 2a 63 6f 6d 6d 65 6e 74 73 7d 0a 0a 52 65  t *comments}..Re
7380: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
7390: 67 72 61 6d 20 63 6f 6d 6d 65 6e 74 2d 73 79 6e  gram comment-syn
73a0: 74 61 78 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tax.</tcl>..<p>^
73b0: 43 6f 6d 6d 65 6e 74 73 20 61 72 65 20 6e 6f 74  Comments are not
73c0: 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2c 20 62   SQL commands, b
73d0: 75 74 20 63 61 6e 20 6f 63 63 75 72 20 77 69 74  ut can occur wit
73e0: 68 69 6e 20 74 68 65 20 74 65 78 74 20 6f 66 0a  hin the text of.
73f0: 53 51 4c 20 71 75 65 72 69 65 73 20 70 61 73 73  SQL queries pass
7400: 65 64 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 70  ed to [sqlite3_p
7410: 72 65 70 61 72 65 5f 76 32 28 29 5d 20 61 6e 64  repare_v2()] and
7420: 20 72 65 6c 61 74 65 64 20 69 6e 74 65 72 66 61   related interfa
7430: 63 65 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 61  ces..^Comments a
7440: 72 65 20 74 72 65 61 74 65 64 20 61 73 20 77 68  re treated as wh
7450: 69 74 65 73 70 61 63 65 20 62 79 20 74 68 65 20  itespace by the 
7460: 70 61 72 73 65 72 2e 0a 5e 43 6f 6d 6d 65 6e 74  parser..^Comment
7470: 73 20 63 61 6e 20 62 65 67 69 6e 20 61 6e 79 77  s can begin anyw
7480: 68 65 72 65 20 77 68 69 74 65 73 70 61 63 65 20  here whitespace 
7490: 0a 63 61 6e 20 62 65 20 66 6f 75 6e 64 2c 20 69  .can be found, i
74a0: 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20  ncluding inside 
74b0: 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74  expressions that
74c0: 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c   span multiple l
74d0: 69 6e 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ines..</p>..<p>^
74e0: 53 51 4c 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67  SQL comments beg
74f0: 69 6e 20 77 69 74 68 20 74 77 6f 20 63 6f 6e 73  in with two cons
7500: 65 63 75 74 69 76 65 20 22 2d 22 20 63 68 61 72  ecutive "-" char
7510: 61 63 74 65 72 73 20 28 41 53 43 49 49 20 30 78  acters (ASCII 0x
7520: 32 64 29 0a 61 6e 64 20 65 78 74 65 6e 64 20 75  2d).and extend u
7530: 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69  p to and includi
7540: 6e 67 20 74 68 65 20 6e 65 78 74 20 6e 65 77 6c  ng the next newl
7550: 69 6e 65 20 63 68 61 72 61 63 74 65 72 20 28 41  ine character (A
7560: 53 43 49 49 20 30 78 30 61 29 0a 6f 72 20 75 6e  SCII 0x0a).or un
7570: 74 69 6c 20 74 68 65 20 65 6e 64 20 6f 66 20 69  til the end of i
7580: 6e 70 75 74 2c 20 77 68 69 63 68 65 76 65 72 20  nput, whichever 
7590: 63 6f 6d 65 73 20 66 69 72 73 74 2e 3c 2f 70 3e  comes first.</p>
75a0: 0a 0a 3c 70 3e 5e 43 2d 73 74 79 6c 65 20 63 6f  ..<p>^C-style co
75b0: 6d 6d 65 6e 74 73 20 62 65 67 69 6e 0a 77 69 74  mments begin.wit
75c0: 68 20 22 2f 2a 22 20 61 6e 64 20 65 78 74 65 6e  h "/*" and exten
75d0: 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c  d up to and incl
75e0: 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20 22  uding the next "
75f0: 2a 2f 22 20 63 68 61 72 61 63 74 65 72 20 70 61  */" character pa
7600: 69 72 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65 20  ir.or until the 
7610: 65 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20 77 68  end of input, wh
7620: 69 63 68 65 76 65 72 20 63 6f 6d 65 73 20 66 69  ichever comes fi
7630: 72 73 74 2e 20 20 5e 43 2d 73 74 79 6c 65 20 63  rst.  ^C-style c
7640: 6f 6d 6d 65 6e 74 73 0a 63 61 6e 20 73 70 61 6e  omments.can span
7650: 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73 2e   multiple lines.
7660: 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65   </p>..<p>^Comme
7670: 6e 74 73 20 63 61 6e 20 61 70 70 65 61 72 20 61  nts can appear a
7680: 6e 79 77 68 65 72 65 20 77 68 69 74 65 73 70 61  nywhere whitespa
7690: 63 65 20 63 61 6e 20 6f 63 63 75 72 2c 0a 69 6e  ce can occur,.in
76a0: 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20 65  cluding inside e
76b0: 78 70 72 65 73 73 69 6f 6e 73 20 61 6e 64 20 69  xpressions and i
76c0: 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20  n the middle of 
76d0: 6f 74 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d  other SQL statem
76e0: 65 6e 74 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20  ents..^Comments 
76f0: 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 0a 3c 2f 70  do not nest..</p
7700: 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  >...<tcl>.######
7710: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7720: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7730: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7740: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7750: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
7760: 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20   {CREATE INDEX} 
7770: 63 72 65 61 74 65 69 6e 64 65 78 20 7b 7b 43 52  createindex {{CR
7780: 45 41 54 45 20 49 4e 44 45 58 7d 7d 0a 0a 52 65  EATE INDEX}}..Re
7790: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
77a0: 67 72 61 6d 20 63 72 65 61 74 65 2d 69 6e 64 65  gram create-inde
77b0: 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  x-stmt.</tcl>..<
77c0: 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 49 4e  p>^The CREATE IN
77d0: 44 45 58 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 73  DEX command cons
77e0: 69 73 74 73 20 6f 66 20 74 68 65 20 6b 65 79 77  ists of the keyw
77f0: 6f 72 64 73 20 22 43 52 45 41 54 45 20 49 4e 44  ords "CREATE IND
7800: 45 58 22 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20  EX" followed.by 
7810: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
7820: 6e 65 77 20 69 6e 64 65 78 2c 20 74 68 65 20 6b  new index, the k
7830: 65 79 77 6f 72 64 20 22 4f 4e 22 2c 20 74 68 65  eyword "ON", the
7840: 20 6e 61 6d 65 20 6f 66 20 61 20 70 72 65 76 69   name of a previ
7850: 6f 75 73 6c 79 0a 63 72 65 61 74 65 64 20 74 61  ously.created ta
7860: 62 6c 65 20 74 68 61 74 20 69 73 20 74 6f 20 62  ble that is to b
7870: 65 20 69 6e 64 65 78 65 64 2c 20 61 6e 64 20 61  e indexed, and a
7880: 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c   parenthesized l
7890: 69 73 74 20 6f 66 20 74 61 62 6c 65 20 63 6f 6c  ist of table col
78a0: 75 6d 6e 0a 6e 61 6d 65 73 20 61 6e 64 2f 6f 72  umn.names and/or
78b0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61   expressions tha
78c0: 74 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 74  t are used for t
78d0: 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 49 66  he index key..If
78e0: 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 57 48   the optional WH
78f0: 45 52 45 20 63 6c 61 75 73 65 20 69 73 20 69 6e  ERE clause is in
7900: 63 6c 75 64 65 64 2c 20 74 68 65 6e 20 74 68 65  cluded, then the
7910: 20 69 6e 64 65 78 20 69 73 20 61 20 22 5b 70 61   index is a "[pa
7920: 72 74 69 61 6c 20 69 6e 64 65 78 5d 22 2e 0a 3c  rtial index]"..<
7930: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
7940: 67 6d 65 6e 74 20 7b 64 65 73 63 69 64 78 7d 20  gment {descidx} 
7950: 7b 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 69  {descending indi
7960: 63 65 73 7d 20 7b 64 65 73 63 65 6e 64 69 6e 67  ces} {descending
7970: 20 69 6e 64 65 78 7d 20 5c 0a 20 20 20 20 7b 64   index} \.    {d
7980: 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 65  escending indexe
7990: 73 7d 20 7b 44 45 53 43 7d 3c 2f 74 63 6c 3e 0a  s} {DESC}</tcl>.
79a0: 3c 70 3e 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20  <p>^Each column 
79b0: 6e 61 6d 65 20 6f 72 20 65 78 70 72 65 73 73 69  name or expressi
79c0: 6f 6e 20 63 61 6e 20 62 65 20 66 6f 6c 6c 6f 77  on can be follow
79d0: 65 64 20 62 79 20 6f 6e 65 0a 6f 66 20 74 68 65  ed by one.of the
79e0: 20 22 41 53 43 22 20 6f 72 20 22 44 45 53 43 22   "ASC" or "DESC"
79f0: 20 6b 65 79 77 6f 72 64 73 20 74 6f 20 69 6e 64   keywords to ind
7a00: 69 63 61 74 65 20 73 6f 72 74 20 6f 72 64 65 72  icate sort order
7a10: 2e 0a 5e 54 68 65 20 73 6f 72 74 20 6f 72 64 65  ..^The sort orde
7a20: 72 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74  r may or may not
7a30: 20 62 65 20 69 67 6e 6f 72 65 64 20 64 65 70 65   be ignored depe
7a40: 6e 64 69 6e 67 0a 6f 6e 20 74 68 65 20 64 61 74  nding.on the dat
7a50: 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 6d 61  abase file forma
7a60: 74 2c 20 61 6e 64 20 69 6e 20 70 61 72 74 69 63  t, and in partic
7a70: 75 6c 61 72 20 74 68 65 20 5b 73 63 68 65 6d 61  ular the [schema
7a80: 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 5d 2e   format number].
7a90: 0a 5e 54 68 65 20 22 6c 65 67 61 63 79 22 20 73  .^The "legacy" s
7aa0: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 28 31 29  chema format (1)
7ab0: 20 69 67 6e 6f 72 65 73 20 69 6e 64 65 78 0a 73   ignores index.s
7ac0: 6f 72 74 20 6f 72 64 65 72 2e 20 20 5e 54 68 65  ort order.  ^The
7ad0: 20 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65   descending inde
7ae0: 78 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  x schema format 
7af0: 28 34 29 20 74 61 6b 65 73 20 69 6e 64 65 78 20  (4) takes index 
7b00: 73 6f 72 74 20 6f 72 64 65 72 0a 69 6e 74 6f 20  sort order.into 
7b10: 61 63 63 6f 75 6e 74 2e 20 20 4f 6e 6c 79 20 76  account.  Only v
7b20: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
7b30: 65 20 33 2e 33 2e 30 20 28 5b 64 61 74 65 6f 66  e 3.3.0 ([dateof
7b40: 3a 33 2e 33 2e 30 5d 29 0a 61 6e 64 20 6c 61 74  :3.3.0]).and lat
7b50: 65 72 20 61 72 65 20 61 62 6c 65 20 74 6f 20 75  er are able to u
7b60: 6e 64 65 72 73 74 61 6e 64 0a 74 68 65 20 64 65  nderstand.the de
7b70: 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 20 66  scending index f
7b80: 6f 72 6d 61 74 2e 20 46 6f 72 20 63 6f 6d 70 61  ormat. For compa
7b90: 74 69 62 69 6c 69 74 79 2c 20 76 65 72 73 69 6f  tibility, versio
7ba0: 6e 20 6f 66 20 53 51 4c 69 74 65 20 62 65 74 77  n of SQLite betw
7bb0: 65 65 6e 20 33 2e 33 2e 30 0a 61 6e 64 20 33 2e  een 3.3.0.and 3.
7bc0: 37 2e 39 20 75 73 65 20 74 68 65 20 6c 65 67 61  7.9 use the lega
7bd0: 63 79 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74  cy schema format
7be0: 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 54 68   by default.  Th
7bf0: 65 20 6e 65 77 65 72 20 73 63 68 65 6d 61 20 66  e newer schema f
7c00: 6f 72 6d 61 74 20 69 73 0a 75 73 65 64 20 62 79  ormat is.used by
7c10: 20 64 65 66 61 75 6c 74 20 69 6e 20 76 65 72 73   default in vers
7c20: 69 6f 6e 20 33 2e 37 2e 31 30 20 28 5b 64 61 74  ion 3.7.10 ([dat
7c30: 65 6f 66 3a 33 2e 37 2e 31 30 5d 29 20 61 6e 64  eof:3.7.10]) and
7c40: 20 6c 61 74 65 72 2e 0a 5e 54 68 65 20 5b 6c 65   later..^The [le
7c50: 67 61 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74  gacy_file_format
7c60: 20 70 72 61 67 6d 61 5d 20 63 61 6e 20 62 65 20   pragma] can be 
7c70: 75 73 65 64 20 74 6f 20 63 68 61 6e 67 65 20 73  used to change s
7c80: 65 74 20 74 68 65 20 73 70 65 63 69 66 69 63 0a  et the specific.
7c90: 62 65 68 61 76 69 6f 72 20 66 6f 72 20 61 6e 79  behavior for any
7ca0: 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69   version of SQLi
7cb0: 74 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  te.</p>..<tcl>hd
7cc0: 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6c 6c 69 64  _fragment collid
7cd0: 78 20 7b 43 4f 4c 4c 41 54 45 7d 3c 2f 74 63 6c  x {COLLATE}</tcl
7ce0: 3e 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c 4c 41 54  >.<p>^The COLLAT
7cf0: 45 20 63 6c 61 75 73 65 20 6f 70 74 69 6f 6e 61  E clause optiona
7d00: 6c 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 61  lly following ea
7d10: 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 6f  ch column name.o
7d20: 72 20 65 78 70 72 65 73 73 69 6f 6e 20 64 65 66  r expression def
7d30: 69 6e 65 73 20 61 0a 63 6f 6c 6c 61 74 69 6e 67  ines a.collating
7d40: 20 73 65 71 75 65 6e 63 65 20 75 73 65 64 20 66   sequence used f
7d50: 6f 72 20 74 65 78 74 20 65 6e 74 72 69 65 73 20  or text entries 
7d60: 69 6e 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a  in that column..
7d70: 5e 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c  ^The default col
7d80: 6c 61 74 69 6e 67 0a 73 65 71 75 65 6e 63 65 20  lating.sequence 
7d90: 69 73 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67  is the collating
7da0: 20 73 65 71 75 65 6e 63 65 20 64 65 66 69 6e 65   sequence define
7db0: 64 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d  d for that colum
7dc0: 6e 20 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45  n in the.[CREATE
7dd0: 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e   TABLE] statemen
7de0: 74 2e 20 20 5e 4f 72 20 69 66 20 6e 6f 20 63 6f  t.  ^Or if no co
7df0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
7e00: 20 69 73 20 6f 74 68 65 72 77 69 73 65 20 64 65   is otherwise de
7e10: 66 69 6e 65 64 2c 0a 74 68 65 20 62 75 69 6c 74  fined,.the built
7e20: 2d 69 6e 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61  -in BINARY colla
7e30: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73  ting sequence is
7e40: 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c   used.</p>..<tcl
7e50: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 64  >hd_fragment ind
7e60: 65 78 65 78 70 72 3c 2f 74 63 6c 3e 0a 3c 70 3e  exexpr</tcl>.<p>
7e70: 5e 45 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20  ^Expressions in 
7e80: 61 6e 20 69 6e 64 65 78 20 6d 61 79 20 6e 6f 74  an index may not
7e90: 20 72 65 66 65 72 65 6e 63 65 20 6f 74 68 65 72   reference other
7ea0: 20 74 61 62 6c 65 73 0a 61 6e 64 20 6d 61 79 20   tables.and may 
7eb0: 6e 6f 74 20 75 73 65 20 73 75 62 71 75 65 72 69  not use subqueri
7ec0: 65 73 20 6e 6f 72 20 66 75 6e 63 74 69 6f 6e 73  es nor functions
7ed0: 20 77 68 6f 73 65 20 72 65 73 75 6c 74 20 6d 69   whose result mi
7ee0: 67 68 74 0a 63 68 61 6e 67 65 20 28 65 78 3a 20  ght.change (ex: 
7ef0: 5b 72 61 6e 64 6f 6d 28 29 5d 20 6f 72 20 5b 73  [random()] or [s
7f00: 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 5d  qlite_version()]
7f10: 29 2e 0a 5e 45 78 70 72 65 73 73 69 6f 6e 73 20  )..^Expressions 
7f20: 69 6e 20 61 6e 20 69 6e 64 65 78 20 6d 61 79 20  in an index may 
7f30: 6f 6e 6c 79 20 72 65 66 65 72 20 74 6f 20 63 6f  only refer to co
7f40: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
7f50: 6c 65 0a 74 68 61 74 20 69 73 20 62 65 69 6e 67  le.that is being
7f60: 20 69 6e 64 65 78 65 64 2e 0a 49 6e 64 65 78 65   indexed..Indexe
7f70: 73 20 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  s on expression 
7f80: 77 69 6c 6c 20 6e 6f 74 20 77 6f 72 6b 20 77 69  will not work wi
7f90: 74 68 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  th versions of S
7fa0: 51 4c 69 74 65 20 70 72 69 6f 72 0a 74 6f 20 5b  QLite prior.to [
7fb0: 76 65 72 73 69 6f 6e 20 33 2e 39 2e 30 5d 20 28  version 3.9.0] (
7fc0: 5b 64 61 74 65 6f 66 3a 33 2e 39 2e 30 5d 29 2e  [dateof:3.9.0]).
7fd0: 0a 53 65 65 20 74 68 65 20 5b 49 6e 64 65 78 65  .See the [Indexe
7fe0: 73 20 4f 6e 20 45 78 70 72 65 73 73 69 6f 6e 73  s On Expressions
7ff0: 5d 20 64 6f 63 75 6d 65 6e 74 20 66 6f 72 20 61  ] document for a
8000: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
8010: 61 74 69 6f 6e 0a 61 62 6f 75 74 20 75 73 69 6e  ation.about usin
8020: 67 20 67 65 6e 65 72 61 6c 20 65 78 70 72 65 73  g general expres
8030: 73 69 6f 6e 73 20 69 6e 20 43 52 45 41 54 45 20  sions in CREATE 
8040: 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 73  INDEX statements
8050: 2e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20  ...<p>There are 
8060: 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c 69 6d  no arbitrary lim
8070: 69 74 73 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65  its on the numbe
8080: 72 20 6f 66 20 69 6e 64 69 63 65 73 20 74 68 61  r of indices tha
8090: 74 20 63 61 6e 20 62 65 0a 61 74 74 61 63 68 65  t can be.attache
80a0: 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61  d to a single ta
80b0: 62 6c 65 2e 20 20 5e 28 54 68 65 20 6e 75 6d 62  ble.  ^(The numb
80c0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
80d0: 20 61 6e 20 69 6e 64 65 78 20 69 73 20 0a 6c 69   an index is .li
80e0: 6d 69 74 65 64 20 74 6f 20 74 68 65 20 76 61 6c  mited to the val
80f0: 75 65 20 73 65 74 20 62 79 0a 5b 73 71 6c 69 74  ue set by.[sqlit
8100: 65 33 5f 6c 69 6d 69 74 5d 28 5b 53 51 4c 49 54  e3_limit]([SQLIT
8110: 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 5d 2c  E_LIMIT_COLUMN],
8120: 2e 2e 2e 29 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63  ...).)^</p>..<tc
8130: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e  l>hd_fragment un
8140: 69 71 75 65 69 64 78 20 7b 75 6e 69 71 75 65 20  iqueidx {unique 
8150: 69 6e 64 65 78 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  index}</tcl>.<p>
8160: 5e 49 66 20 74 68 65 20 55 4e 49 51 55 45 20 6b  ^If the UNIQUE k
8170: 65 79 77 6f 72 64 20 61 70 70 65 61 72 73 20 62  eyword appears b
8180: 65 74 77 65 65 6e 20 43 52 45 41 54 45 20 61 6e  etween CREATE an
8190: 64 20 49 4e 44 45 58 20 74 68 65 6e 20 64 75 70  d INDEX then dup
81a0: 6c 69 63 61 74 65 0a 69 6e 64 65 78 20 65 6e 74  licate.index ent
81b0: 72 69 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c  ries are not all
81c0: 6f 77 65 64 2e 20 20 5e 41 6e 79 20 61 74 74 65  owed.  ^Any atte
81d0: 6d 70 74 20 74 6f 20 69 6e 73 65 72 74 20 61 20  mpt to insert a 
81e0: 64 75 70 6c 69 63 61 74 65 20 65 6e 74 72 79 0a  duplicate entry.
81f0: 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61  will result in a
8200: 6e 20 65 72 72 6f 72 2e 20 20 5e 46 6f 72 20 74  n error.  ^For t
8210: 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 75  he purposes of u
8220: 6e 69 71 75 65 20 69 6e 64 69 63 65 73 2c 20 61  nique indices, a
8230: 6c 6c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 0a 61  ll NULL values.a
8240: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f  re considered to
8250: 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20   different from 
8260: 61 6c 6c 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76  all other NULL v
8270: 61 6c 75 65 73 20 61 6e 64 20 61 72 65 20 74 68  alues and are th
8280: 75 73 20 75 6e 69 71 75 65 2e 0a 54 68 69 73 20  us unique..This 
8290: 69 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 77  is one of the tw
82a0: 6f 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 72  o possible inter
82b0: 70 72 65 74 61 74 69 6f 6e 73 20 6f 66 20 74 68  pretations of th
82c0: 65 20 53 51 4c 2d 39 32 20 73 74 61 6e 64 61 72  e SQL-92 standar
82d0: 64 0a 28 74 68 65 20 6c 61 6e 67 75 61 67 65 20  d.(the language 
82e0: 69 6e 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  in the standard 
82f0: 69 73 20 61 6d 62 69 67 75 6f 75 73 29 20 61 6e  is ambiguous) an
8300: 64 20 69 73 20 74 68 65 20 69 6e 74 65 72 70 72  d is the interpr
8310: 65 74 61 74 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64  etation.followed
8320: 20 62 79 20 50 6f 73 74 67 72 65 53 51 4c 2c 20   by PostgreSQL, 
8330: 4d 79 53 51 4c 2c 20 46 69 72 65 62 69 72 64 2c  MySQL, Firebird,
8340: 20 61 6e 64 20 4f 72 61 63 6c 65 2e 20 20 49 6e   and Oracle.  In
8350: 66 6f 72 6d 69 78 20 61 6e 64 0a 4d 69 63 72 6f  formix and.Micro
8360: 73 6f 66 74 20 53 51 4c 20 53 65 72 76 65 72 20  soft SQL Server 
8370: 66 6f 6c 6c 6f 77 20 74 68 65 20 6f 74 68 65 72  follow the other
8380: 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20   interpretation 
8390: 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72 64 2e  of the standard.
83a0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  </p>..<p>^If the
83b0: 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 4e 4f 54   optional IF NOT
83c0: 20 45 58 49 53 54 53 20 63 6c 61 75 73 65 20 69   EXISTS clause i
83d0: 73 20 70 72 65 73 65 6e 74 20 61 6e 64 20 61 6e  s present and an
83e0: 6f 74 68 65 72 20 69 6e 64 65 78 0a 77 69 74 68  other index.with
83f0: 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61   the same name a
8400: 6c 72 65 61 64 79 20 65 78 69 73 74 73 2c 20 74  lready exists, t
8410: 68 65 6e 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  hen this command
8420: 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70   becomes a no-op
8430: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 64 65 78  .</p>..<p>^Index
8440: 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 77  es are removed w
8450: 69 74 68 20 74 68 65 20 5b 44 52 4f 50 20 49 4e  ith the [DROP IN
8460: 44 45 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70  DEX] command.</p
8470: 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  >...<tcl>.######
8480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
84a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
84b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
84c0: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
84d0: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 7d 20   {CREATE TABLE} 
84e0: 7b 63 72 65 61 74 65 74 61 62 6c 65 7d 20 7b 7b  {createtable} {{
84f0: 43 52 45 41 54 45 20 54 41 42 4c 45 7d 7d 0a 0a  CREATE TABLE}}..
8500: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
8510: 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d 74 61  iagram create-ta
8520: 62 6c 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ble-stmt.</tcl>.
8530: 0a 3c 70 3e 54 68 65 20 22 43 52 45 41 54 45 20  .<p>The "CREATE 
8540: 54 41 42 4c 45 22 20 63 6f 6d 6d 61 6e 64 20 69  TABLE" command i
8550: 73 20 75 73 65 64 20 74 6f 20 63 72 65 61 74 65  s used to create
8560: 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20   a new table in 
8570: 61 6e 20 53 51 4c 69 74 65 20 0a 64 61 74 61 62  an SQLite .datab
8580: 61 73 65 2e 20 41 20 43 52 45 41 54 45 20 54 41  ase. A CREATE TA
8590: 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 73 70 65 63  BLE command spec
85a0: 69 66 69 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77  ifies the follow
85b0: 69 6e 67 20 61 74 74 72 69 62 75 74 65 73 20 6f  ing attributes o
85c0: 66 20 74 68 65 0a 6e 65 77 20 74 61 62 6c 65 3a  f the.new table:
85d0: 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e  ..<ul>.  <li><p>
85e0: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
85f0: 6e 65 77 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c  new table...  <l
8600: 69 3e 3c 70 3e 20 54 68 65 20 64 61 74 61 62 61  i><p> The databa
8610: 73 65 20 69 6e 20 77 68 69 63 68 20 74 68 65 20  se in which the 
8620: 6e 65 77 20 74 61 62 6c 65 20 69 73 20 63 72 65  new table is cre
8630: 61 74 65 64 2e 20 54 61 62 6c 65 73 20 6d 61 79  ated. Tables may
8640: 20 62 65 20 0a 20 20 20 20 20 20 63 72 65 61 74   be .      creat
8650: 65 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  ed in the main d
8660: 61 74 61 62 61 73 65 2c 20 74 68 65 20 74 65 6d  atabase, the tem
8670: 70 20 64 61 74 61 62 61 73 65 2c 20 6f 72 20 69  p database, or i
8680: 6e 20 61 6e 79 20 61 74 74 61 63 68 65 64 0a 20  n any attached. 
8690: 20 20 20 20 20 64 61 74 61 62 61 73 65 2e 0a 0a       database...
86a0: 20 20 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 6e 61    <li><p> The na
86b0: 6d 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  me of each colum
86c0: 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a  n in the table..
86d0: 0a 20 20 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 64  .  <li><p> The d
86e0: 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20  eclared type of 
86f0: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  each column in t
8700: 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69  he table...  <li
8710: 3e 3c 70 3e 20 41 20 64 65 66 61 75 6c 74 20 76  ><p> A default v
8720: 61 6c 75 65 20 6f 72 20 65 78 70 72 65 73 73 69  alue or expressi
8730: 6f 6e 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  on for each colu
8740: 6d 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  mn in the table.
8750: 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 41 20 64 65  ..  <li><p> A de
8760: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20  fault collation 
8770: 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20  sequence to use 
8780: 77 69 74 68 20 65 61 63 68 20 63 6f 6c 75 6d 6e  with each column
8790: 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 4f 70 74  ...  <li><p> Opt
87a0: 69 6f 6e 61 6c 6c 79 2c 20 61 20 50 52 49 4d 41  ionally, a PRIMA
87b0: 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74  RY KEY for the t
87c0: 61 62 6c 65 2e 20 42 6f 74 68 20 73 69 6e 67 6c  able. Both singl
87d0: 65 20 63 6f 6c 75 6d 6e 20 61 6e 64 0a 20 20 20  e column and.   
87e0: 20 20 20 20 63 6f 6d 70 6f 73 69 74 65 20 28 6d      composite (m
87f0: 75 6c 74 69 70 6c 65 20 63 6f 6c 75 6d 6e 29 20  ultiple column) 
8800: 70 72 69 6d 61 72 79 20 6b 65 79 73 20 61 72 65  primary keys are
8810: 20 73 75 70 70 6f 72 74 65 64 2e 0a 0a 20 20 3c   supported...  <
8820: 6c 69 3e 3c 70 3e 20 41 20 73 65 74 20 6f 66 20  li><p> A set of 
8830: 53 51 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  SQL constraints 
8840: 66 6f 72 20 65 61 63 68 20 74 61 62 6c 65 2e 20  for each table. 
8850: 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
8860: 55 4e 49 51 55 45 2c 20 4e 4f 54 0a 20 20 20 20  UNIQUE, NOT.    
8870: 20 20 20 4e 55 4c 4c 2c 20 43 48 45 43 4b 20 61     NULL, CHECK a
8880: 6e 64 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 63  nd FOREIGN KEY c
8890: 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 0a 20 20 3c  onstraints...  <
88a0: 6c 69 3e 3c 70 3e 20 57 68 65 74 68 65 72 20 74  li><p> Whether t
88b0: 68 65 20 74 61 62 6c 65 20 69 73 20 61 20 5b 57  he table is a [W
88c0: 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61  ITHOUT ROWID] ta
88d0: 62 6c 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 45  ble..</ul>..<p>E
88e0: 76 65 72 79 20 43 52 45 41 54 45 20 54 41 42 4c  very CREATE TABL
88f0: 45 20 73 74 61 74 65 6d 65 6e 74 20 6d 75 73 74  E statement must
8900: 20 73 70 65 63 69 66 79 20 61 20 6e 61 6d 65 20   specify a name 
8910: 66 6f 72 20 74 68 65 20 6e 65 77 20 74 61 62 6c  for the new tabl
8920: 65 2e 0a 20 20 5e 28 54 61 62 6c 65 20 6e 61 6d  e..  ^(Table nam
8930: 65 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69  es that begin wi
8940: 74 68 20 22 73 71 6c 69 74 65 5f 22 20 61 72 65  th "sqlite_" are
8950: 20 72 65 73 65 72 76 65 64 20 66 6f 72 20 69 6e   reserved for in
8960: 74 65 72 6e 61 6c 20 75 73 65 2e 20 49 74 0a 20  ternal use. It. 
8970: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20   is an error to 
8980: 61 74 74 65 6d 70 74 20 74 6f 20 63 72 65 61 74  attempt to creat
8990: 65 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 61  e a table with a
89a0: 20 6e 61 6d 65 20 74 68 61 74 20 73 74 61 72 74   name that start
89b0: 73 20 77 69 74 68 0a 20 20 22 73 71 6c 69 74 65  s with.  "sqlite
89c0: 5f 22 2e 29 5e 0a 0a 3c 70 3e 20 5e 49 66 20 61  _".)^..<p> ^If a
89d0: 20 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d   <yyterm>schema-
89e0: 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 69 73  name</yyterm> is
89f0: 20 73 70 65 63 69 66 69 65 64 2c 20 69 74 20 6d   specified, it m
8a00: 75 73 74 20 62 65 20 65 69 74 68 65 72 20 22 6d  ust be either "m
8a10: 61 69 6e 22 2c 20 0a 20 20 22 74 65 6d 70 22 2c  ain", .  "temp",
8a20: 20 6f 72 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   or the name of 
8a30: 61 6e 20 5b 41 54 54 41 43 48 20 44 41 54 41 42  an [ATTACH DATAB
8a40: 41 53 45 7c 61 74 74 61 63 68 65 64 20 64 61 74  ASE|attached dat
8a50: 61 62 61 73 65 5d 2e 20 5e 49 6e 20 74 68 69 73  abase]. ^In this
8a60: 20 63 61 73 65 0a 20 20 74 68 65 20 6e 65 77 20   case.  the new 
8a70: 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64  table is created
8a80: 20 69 6e 20 74 68 65 20 6e 61 6d 65 64 20 64 61   in the named da
8a90: 74 61 62 61 73 65 2e 20 5e 49 66 20 74 68 65 20  tabase. ^If the 
8aa0: 22 54 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f  "TEMP" or "TEMPO
8ab0: 52 41 52 59 22 0a 20 20 6b 65 79 77 6f 72 64 20  RARY".  keyword 
8ac0: 6f 63 63 75 72 73 20 62 65 74 77 65 65 6e 20 74  occurs between t
8ad0: 68 65 20 22 43 52 45 41 54 45 22 20 61 6e 64 20  he "CREATE" and 
8ae0: 22 54 41 42 4c 45 22 20 74 68 65 6e 20 74 68 65  "TABLE" then the
8af0: 20 6e 65 77 20 74 61 62 6c 65 20 69 73 0a 20 20   new table is.  
8b00: 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 74  created in the t
8b10: 65 6d 70 20 64 61 74 61 62 61 73 65 2e 20 5e 49  emp database. ^I
8b20: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f  t is an error to
8b30: 20 73 70 65 63 69 66 79 20 62 6f 74 68 20 61 20   specify both a 
8b40: 0a 20 20 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d  .  <yyterm>schem
8b50: 61 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20  a-name</yyterm> 
8b60: 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6f 72 20  and the TEMP or 
8b70: 54 45 4d 50 4f 52 41 52 59 20 6b 65 79 77 6f 72  TEMPORARY keywor
8b80: 64 2c 20 75 6e 6c 65 73 73 20 74 68 65 0a 20 20  d, unless the.  
8b90: 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e  <yyterm>schema-n
8ba0: 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 69 73 20  ame</yyterm> is 
8bb0: 22 74 65 6d 70 22 2e 20 0a 20 20 5e 49 66 20 6e  "temp". .  ^If n
8bc0: 6f 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 69 73  o schema name is
8bd0: 20 73 70 65 63 69 66 69 65 64 20 61 6e 64 20 74   specified and t
8be0: 68 65 0a 20 20 54 45 4d 50 20 6b 65 79 77 6f 72  he.  TEMP keywor
8bf0: 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74  d is not present
8c00: 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
8c10: 69 73 20 63 72 65 61 74 65 64 20 69 6e 20 74 68  is created in th
8c20: 65 20 6d 61 69 6e 0a 20 20 64 61 74 61 62 61 73  e main.  databas
8c30: 65 2e 0a 0a 3c 70 3e 0a 20 20 5e 49 74 20 69 73  e...<p>.  ^It is
8c40: 20 75 73 75 61 6c 6c 79 20 61 6e 20 65 72 72 6f   usually an erro
8c50: 72 20 74 6f 20 61 74 74 65 6d 70 74 20 74 6f 20  r to attempt to 
8c60: 63 72 65 61 74 65 20 61 20 6e 65 77 20 74 61 62  create a new tab
8c70: 6c 65 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  le in a database
8c80: 20 74 68 61 74 0a 20 20 61 6c 72 65 61 64 79 20   that.  already 
8c90: 63 6f 6e 74 61 69 6e 73 20 61 20 74 61 62 6c 65  contains a table
8ca0: 2c 20 69 6e 64 65 78 20 6f 72 20 76 69 65 77 20  , index or view 
8cb0: 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  of the same name
8cc0: 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69 66 20 74  . ^However, if t
8cd0: 68 65 0a 20 20 22 49 46 20 4e 4f 54 20 45 58 49  he.  "IF NOT EXI
8ce0: 53 54 53 22 20 63 6c 61 75 73 65 20 69 73 20 73  STS" clause is s
8cf0: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
8d00: 20 6f 66 20 74 68 65 20 43 52 45 41 54 45 20 54   of the CREATE T
8d10: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 61  ABLE statement a
8d20: 6e 64 0a 20 20 61 20 74 61 62 6c 65 20 6f 72 20  nd.  a table or 
8d30: 76 69 65 77 20 6f 66 20 74 68 65 20 73 61 6d 65  view of the same
8d40: 20 6e 61 6d 65 20 61 6c 72 65 61 64 79 20 65 78   name already ex
8d50: 69 73 74 73 2c 20 74 68 65 20 43 52 45 41 54 45  ists, the CREATE
8d60: 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 0a 20   TABLE command. 
8d70: 20 73 69 6d 70 6c 79 20 68 61 73 20 6e 6f 20 65   simply has no e
8d80: 66 66 65 63 74 20 28 61 6e 64 20 6e 6f 20 65 72  ffect (and no er
8d90: 72 6f 72 20 6d 65 73 73 61 67 65 20 69 73 20 72  ror message is r
8da0: 65 74 75 72 6e 65 64 29 2e 20 5e 41 6e 20 65 72  eturned). ^An er
8db0: 72 6f 72 20 69 73 20 73 74 69 6c 6c 0a 20 20 72  ror is still.  r
8dc0: 65 74 75 72 6e 65 64 20 69 66 20 74 68 65 20 74  eturned if the t
8dd0: 61 62 6c 65 20 63 61 6e 6e 6f 74 20 62 65 20 63  able cannot be c
8de0: 72 65 61 74 65 64 20 62 65 63 61 75 73 65 20 6f  reated because o
8df0: 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 69 6e  f an existing in
8e00: 64 65 78 2c 20 65 76 65 6e 20 0a 20 20 69 66 20  dex, even .  if 
8e10: 74 68 65 20 22 49 46 20 4e 4f 54 20 45 58 49 53  the "IF NOT EXIS
8e20: 54 53 22 20 63 6c 61 75 73 65 20 69 73 20 73 70  TS" clause is sp
8e30: 65 63 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e 49 74  ecified...<p>^It
8e40: 20 69 73 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72   is not an error
8e50: 20 74 6f 20 63 72 65 61 74 65 20 61 20 74 61 62   to create a tab
8e60: 6c 65 20 74 68 61 74 20 68 61 73 20 74 68 65 20  le that has the 
8e70: 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61 6e 20  same name as an 
8e80: 0a 20 20 65 78 69 73 74 69 6e 67 20 5b 43 52 45  .  existing [CRE
8e90: 41 54 45 20 54 52 49 47 47 45 52 7c 74 72 69 67  ATE TRIGGER|trig
8ea0: 67 65 72 5d 2e 0a 0a 3c 70 3e 5e 54 61 62 6c 65  ger]...<p>^Table
8eb0: 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 75 73  s are removed us
8ec0: 69 6e 67 20 74 68 65 20 5b 44 52 4f 50 20 54 41  ing the [DROP TA
8ed0: 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  BLE] statement. 
8ee0: 20 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66   </p>..<tcl>hd_f
8ef0: 72 61 67 6d 65 6e 74 20 63 72 65 61 74 65 74 61  ragment createta
8f00: 62 61 73 20 7b 43 52 45 41 54 45 20 54 41 42 4c  bas {CREATE TABL
8f10: 45 20 41 53 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  E AS}</tcl>.<h3>
8f20: 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e  CREATE TABLE ...
8f30: 20 41 53 20 53 45 4c 45 43 54 20 53 74 61 74 65   AS SELECT State
8f40: 6d 65 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  ments</h3>..<p>^
8f50: 28 41 20 22 43 52 45 41 54 45 20 54 41 42 4c 45  (A "CREATE TABLE
8f60: 20 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 22 20   ... AS SELECT" 
8f70: 73 74 61 74 65 6d 65 6e 74 20 63 72 65 61 74 65  statement create
8f80: 73 20 61 6e 64 20 70 6f 70 75 6c 61 74 65 73 20  s and populates 
8f90: 61 20 64 61 74 61 62 61 73 65 0a 74 61 62 6c 65  a database.table
8fa0: 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 72 65   based on the re
8fb0: 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43  sults of a SELEC
8fc0: 54 20 73 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e  T statement.)^ ^
8fd0: 28 54 68 65 20 74 61 62 6c 65 20 68 61 73 20 74  (The table has t
8fe0: 68 65 20 73 61 6d 65 0a 6e 75 6d 62 65 72 20 6f  he same.number o
8ff0: 66 20 63 6f 6c 75 6d 6e 73 20 61 73 20 74 68 65  f columns as the
9000: 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62   rows returned b
9010: 79 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  y the SELECT sta
9020: 74 65 6d 65 6e 74 2e 20 54 68 65 20 6e 61 6d 65  tement. The name
9030: 20 6f 66 0a 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of.each column 
9040: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74  is the same as t
9050: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63  he name of the c
9060: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 63 6f 6c  orresponding col
9070: 75 6d 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c  umn in the resul
9080: 74 0a 73 65 74 20 6f 66 20 74 68 65 20 53 45 4c  t.set of the SEL
9090: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 29 5e  ECT statement.)^
90a0: 20 5e 28 54 68 65 20 64 65 63 6c 61 72 65 64 20   ^(The declared 
90b0: 74 79 70 65 20 6f 66 20 65 61 63 68 20 63 6f 6c  type of each col
90c0: 75 6d 6e 20 69 73 20 64 65 74 65 72 6d 69 6e 65  umn is determine
90d0: 64 0a 62 79 20 74 68 65 20 5b 65 78 70 72 65 73  d.by the [expres
90e0: 73 69 6f 6e 20 61 66 66 69 6e 69 74 79 5d 20 6f  sion affinity] o
90f0: 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  f the correspond
9100: 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ing expression i
9110: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  n the result set
9120: 0a 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 73  .of the SELECT s
9130: 74 61 74 65 6d 65 6e 74 2c 20 61 73 20 66 6f 6c  tatement, as fol
9140: 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 63 65 6e  lows:.</p>..<cen
9150: 74 65 72 3e 3c 74 61 62 6c 65 20 62 6f 72 64 65  ter><table borde
9160: 72 3d 31 3e 0a 20 20 3c 74 72 3e 3c 74 68 3e 45  r=1>.  <tr><th>E
9170: 78 70 72 65 73 73 69 6f 6e 20 41 66 66 69 6e 69  xpression Affini
9180: 74 79 20 20 20 3c 74 68 3e 43 6f 6c 75 6d 6e 20  ty   <th>Column 
9190: 44 65 63 6c 61 72 65 64 20 54 79 70 65 0a 20 20  Declared Type.  
91a0: 3c 74 72 3e 3c 74 64 3e 54 45 58 54 20 20 20 20  <tr><td>TEXT    
91b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 74                <t
91c0: 64 3e 22 54 45 58 54 22 0a 20 20 3c 74 72 3e 3c  d>"TEXT".  <tr><
91d0: 74 64 3e 4e 55 4d 45 52 49 43 20 20 20 20 20 20  td>NUMERIC      
91e0: 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 4e 55           <td>"NU
91f0: 4d 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 49 4e 54  M".  <tr><td>INT
9200: 45 47 45 52 20 20 20 20 20 20 20 20 20 20 20 20  EGER            
9210: 20 20 20 3c 74 64 3e 22 49 4e 54 22 0a 20 20 3c     <td>"INT".  <
9220: 74 72 3e 3c 74 64 3e 52 45 41 4c 20 20 20 20 20  tr><td>REAL     
9230: 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 74 64               <td
9240: 3e 22 52 45 41 4c 22 0a 20 20 3c 74 72 3e 3c 74  >"REAL".  <tr><t
9250: 64 3e 4e 4f 4e 45 20 20 20 20 20 20 20 20 20 20  d>NONE          
9260: 20 20 20 20 20 20 20 20 3c 74 64 3e 22 22 20 28          <td>"" (
9270: 65 6d 70 74 79 20 73 74 72 69 6e 67 29 0a 3c 2f  empty string).</
9280: 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 29  table></center>)
9290: 5e 0a 0a 3c 70 3e 5e 28 41 20 74 61 62 6c 65 20  ^..<p>^(A table 
92a0: 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52  created using CR
92b0: 45 41 54 45 20 54 41 42 4c 45 20 41 53 20 68 61  EATE TABLE AS ha
92c0: 73 20 6e 6f 20 50 52 49 4d 41 52 59 20 4b 45 59  s no PRIMARY KEY
92d0: 20 61 6e 64 20 6e 6f 0a 63 6f 6e 73 74 72 61 69   and no.constrai
92e0: 6e 74 73 20 6f 66 20 61 6e 79 20 6b 69 6e 64 2e  nts of any kind.
92f0: 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   The default val
9300: 75 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ue of each colum
9310: 6e 20 69 73 20 4e 55 4c 4c 2e 20 54 68 65 20 64  n is NULL. The d
9320: 65 66 61 75 6c 74 0a 63 6f 6c 6c 61 74 69 6f 6e  efault.collation
9330: 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61   sequence for ea
9340: 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  ch column of the
9350: 20 6e 65 77 20 74 61 62 6c 65 20 69 73 20 42 49   new table is BI
9360: 4e 41 52 59 2e 29 5e 0a 0a 3c 70 3e 5e 54 61 62  NARY.)^..<p>^Tab
9370: 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  les created usin
9380: 67 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 41  g CREATE TABLE A
9390: 53 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20  S are initially 
93a0: 70 6f 70 75 6c 61 74 65 64 20 77 69 74 68 20 74  populated with t
93b0: 68 65 0a 72 6f 77 73 20 6f 66 20 64 61 74 61 20  he.rows of data 
93c0: 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
93d0: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
93e0: 2e 20 5e 52 6f 77 73 20 61 72 65 20 61 73 73 69  . ^Rows are assi
93f0: 67 6e 65 64 20 63 6f 6e 74 69 67 75 6f 75 73 6c  gned contiguousl
9400: 79 0a 61 73 63 65 6e 64 69 6e 67 20 5b 72 6f 77  y.ascending [row
9410: 69 64 5d 20 76 61 6c 75 65 73 2c 20 73 74 61 72  id] values, star
9420: 74 69 6e 67 20 77 69 74 68 20 31 2c 20 69 6e 20  ting with 1, in 
9430: 74 68 65 20 5b 6f 72 64 65 72 20 62 79 7c 6f 72  the [order by|or
9440: 64 65 72 5d 20 74 68 61 74 20 74 68 65 79 0a 61  der] that they.a
9450: 72 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  re returned by t
9460: 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
9470: 65 6e 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ent...<tcl>hd_fr
9480: 61 67 6d 65 6e 74 20 7b 74 61 62 6c 65 63 6f 6c  agment {tablecol
9490: 64 65 66 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65 66  def} {column def
94a0: 69 6e 69 74 69 6f 6e 7d 20 7b 63 6f 6c 75 6d 6e  inition} {column
94b0: 20 64 65 66 69 6e 69 74 69 6f 6e 73 7d 3c 2f 74   definitions}</t
94c0: 63 6c 3e 0a 3c 68 33 3e 43 6f 6c 75 6d 6e 20 44  cl>.<h3>Column D
94d0: 65 66 69 6e 69 74 69 6f 6e 73 3c 2f 68 33 3e 0a  efinitions</h3>.
94e0: 0a 3c 70 3e 55 6e 6c 65 73 73 20 69 74 20 69 73  .<p>Unless it is
94f0: 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   a CREATE TABLE 
9500: 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 20 73 74  ... AS SELECT st
9510: 61 74 65 6d 65 6e 74 2c 20 61 20 43 52 45 41 54  atement, a CREAT
9520: 45 20 54 41 42 4c 45 20 69 6e 63 6c 75 64 65 73  E TABLE includes
9530: 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 5b 63 6f  .one or more [co
9540: 6c 75 6d 6e 2d 64 65 66 7c 63 6f 6c 75 6d 6e 20  lumn-def|column 
9550: 64 65 66 69 6e 69 74 69 6f 6e 73 5d 2c 20 6f 70  definitions], op
9560: 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65  tionally followe
9570: 64 20 62 79 20 61 20 6c 69 73 74 20 6f 66 0a 5b  d by a list of.[
9580: 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74  table-constraint
9590: 7c 74 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e  |table constrain
95a0: 74 73 5d 2e 20 20 45 61 63 68 20 63 6f 6c 75 6d  ts].  Each colum
95b0: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 63 6f 6e  n definition con
95c0: 73 69 73 74 73 20 6f 66 20 74 68 65 0a 6e 61 6d  sists of the.nam
95d0: 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2c  e of the column,
95e0: 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c   optionally foll
95f0: 6f 77 65 64 20 62 79 20 74 68 65 20 64 65 63 6c  owed by the decl
9600: 61 72 65 64 20 74 79 70 65 20 6f 66 20 74 68 65  ared type of the
9610: 20 63 6f 6c 75 6d 6e 2c 0a 74 68 65 6e 20 6f 6e   column,.then on
9620: 65 20 6f 72 20 6d 6f 72 65 20 6f 70 74 69 6f 6e  e or more option
9630: 61 6c 20 5b 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74  al [column-const
9640: 72 61 69 6e 74 7c 63 6f 6c 75 6d 6e 20 63 6f 6e  raint|column con
9650: 73 74 72 61 69 6e 74 73 5d 2e 20 49 6e 63 6c 75  straints]. Inclu
9660: 64 65 64 20 69 6e 0a 74 68 65 20 64 65 66 69 6e  ded in.the defin
9670: 69 74 69 6f 6e 20 6f 66 20 22 63 6f 6c 75 6d 6e  ition of "column
9680: 20 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 66 6f   constraints" fo
9690: 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
96a0: 66 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a 73  f the previous.s
96b0: 74 61 74 65 6d 65 6e 74 20 61 72 65 20 74 68 65  tatement are the
96c0: 20 43 4f 4c 4c 41 54 45 20 61 6e 64 20 44 45 46   COLLATE and DEF
96d0: 41 55 4c 54 20 63 6c 61 75 73 65 73 2c 20 65 76  AULT clauses, ev
96e0: 65 6e 20 74 68 6f 75 67 68 20 74 68 65 73 65 20  en though these 
96f0: 61 72 65 20 6e 6f 74 20 72 65 61 6c 6c 79 0a 63  are not really.c
9700: 6f 6e 73 74 72 61 69 6e 74 73 20 69 6e 20 74 68  onstraints in th
9710: 65 20 73 65 6e 73 65 20 74 68 61 74 20 74 68 65  e sense that the
9720: 79 20 64 6f 20 6e 6f 74 20 72 65 73 74 72 69 63  y do not restric
9730: 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74 20  t the data that 
9740: 74 68 65 20 74 61 62 6c 65 20 6d 61 79 0a 63 6f  the table may.co
9750: 6e 74 61 69 6e 2e 20 54 68 65 20 6f 74 68 65 72  ntain. The other
9760: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2d 20 4e   constraints - N
9770: 4f 54 20 4e 55 4c 4c 2c 20 43 48 45 43 4b 2c 20  OT NULL, CHECK, 
9780: 55 4e 49 51 55 45 2c 20 50 52 49 4d 41 52 59 20  UNIQUE, PRIMARY 
9790: 4b 45 59 20 61 6e 64 0a 46 4f 52 45 49 47 4e 20  KEY and.FOREIGN 
97a0: 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  KEY constraints 
97b0: 2d 20 69 6d 70 6f 73 65 20 72 65 73 74 72 69 63  - impose restric
97c0: 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 74 61 62  tions on the tab
97d0: 6c 65 73 20 64 61 74 61 2c 20 61 6e 64 20 61 72  les data, and ar
97e0: 65 20 61 72 65 0a 64 65 73 63 72 69 62 65 64 20  e are.described 
97f0: 75 6e 64 65 72 20 5b 63 6f 6e 73 74 72 61 69 6e  under [constrain
9800: 74 73 7c 53 51 4c 20 44 61 74 61 20 43 6f 6e 73  ts|SQL Data Cons
9810: 74 72 61 69 6e 74 73 5d 20 62 65 6c 6f 77 2e 0a  traints] below..
9820: 0a 3c 70 3e 5e 55 6e 6c 69 6b 65 20 6d 6f 73 74  .<p>^Unlike most
9830: 20 53 51 4c 20 64 61 74 61 62 61 73 65 73 2c 20   SQL databases, 
9840: 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20  SQLite does not 
9850: 72 65 73 74 72 69 63 74 20 74 68 65 20 74 79 70  restrict the typ
9860: 65 20 6f 66 20 64 61 74 61 20 74 68 61 74 0a 6d  e of data that.m
9870: 61 79 20 62 65 20 69 6e 73 65 72 74 65 64 20 69  ay be inserted i
9880: 6e 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 62 61 73  nto a column bas
9890: 65 64 20 6f 6e 20 74 68 65 20 63 6f 6c 75 6d 6e  ed on the column
98a0: 73 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 2e  s declared type.
98b0: 20 49 6e 73 74 65 61 64 2c 0a 53 51 4c 69 74 65   Instead,.SQLite
98c0: 20 75 73 65 73 20 5b 64 79 6e 61 6d 69 63 20 74   uses [dynamic t
98d0: 79 70 69 6e 67 5d 2e 20 5e 54 68 65 20 64 65 63  yping]. ^The dec
98e0: 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 61 20  lared type of a 
98f0: 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 20 74  column is used t
9900: 6f 0a 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o.determine the 
9910: 5b 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 74 68  [affinity] of th
9920: 65 20 63 6f 6c 75 6d 6e 20 6f 6e 6c 79 2e 0a 0a  e column only...
9930: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
9940: 20 64 66 6c 74 76 61 6c 20 7b 64 65 66 61 75 6c   dfltval {defaul
9950: 74 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 7d 20  t column value} 
9960: 7b 64 65 66 61 75 6c 74 20 76 61 6c 75 65 7d 3c  {default value}<
9970: 2f 74 63 6c 3e 0a 3c 70 3e 54 68 65 20 44 45 46  /tcl>.<p>The DEF
9980: 41 55 4c 54 20 63 6c 61 75 73 65 20 73 70 65 63  AULT clause spec
9990: 69 66 69 65 73 20 61 20 64 65 66 61 75 6c 74 20  ifies a default 
99a0: 76 61 6c 75 65 20 74 6f 20 75 73 65 20 66 6f 72  value to use for
99b0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 66 20 6e   the column if n
99c0: 6f 0a 76 61 6c 75 65 20 69 73 20 65 78 70 6c 69  o.value is expli
99d0: 63 69 74 6c 79 20 70 72 6f 76 69 64 65 64 20 62  citly provided b
99e0: 79 20 74 68 65 20 75 73 65 72 20 77 68 65 6e 20  y the user when 
99f0: 64 6f 69 6e 67 20 61 6e 20 5b 49 4e 53 45 52 54  doing an [INSERT
9a00: 5d 2e 20 5e 49 66 20 74 68 65 72 65 0a 69 73 20  ]. ^If there.is 
9a10: 6e 6f 20 65 78 70 6c 69 63 69 74 20 44 45 46 41  no explicit DEFA
9a20: 55 4c 54 20 63 6c 61 75 73 65 20 61 74 74 61 63  ULT clause attac
9a30: 68 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20  hed to a column 
9a40: 64 65 66 69 6e 69 74 69 6f 6e 2c 20 74 68 65 6e  definition, then
9a50: 20 74 68 65 20 0a 64 65 66 61 75 6c 74 20 76 61   the .default va
9a60: 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  lue of the colum
9a70: 6e 20 69 73 20 4e 55 4c 4c 2e 20 5e 28 41 6e 20  n is NULL. ^(An 
9a80: 65 78 70 6c 69 63 69 74 20 44 45 46 41 55 4c 54  explicit DEFAULT
9a90: 20 63 6c 61 75 73 65 20 6d 61 79 20 73 70 65 63   clause may spec
9aa0: 69 66 79 0a 74 68 61 74 20 74 68 65 20 64 65 66  ify.that the def
9ab0: 61 75 6c 74 20 76 61 6c 75 65 20 69 73 20 4e 55  ault value is NU
9ac0: 4c 4c 2c 20 61 20 73 74 72 69 6e 67 20 63 6f 6e  LL, a string con
9ad0: 73 74 61 6e 74 2c 20 61 20 62 6c 6f 62 20 63 6f  stant, a blob co
9ae0: 6e 73 74 61 6e 74 2c 20 61 0a 73 69 67 6e 65 64  nstant, a.signed
9af0: 2d 6e 75 6d 62 65 72 2c 20 6f 72 20 61 6e 79 20  -number, or any 
9b00: 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73  constant express
9b10: 69 6f 6e 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20  ion enclosed in 
9b20: 70 61 72 65 6e 74 68 65 73 65 73 2e 20 41 0a 64  parentheses. A.d
9b30: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6d 61 79  efault value may
9b40: 20 61 6c 73 6f 20 62 65 20 6f 6e 65 20 6f 66 20   also be one of 
9b50: 74 68 65 20 73 70 65 63 69 61 6c 20 63 61 73 65  the special case
9b60: 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20 6b 65 79  -independent key
9b70: 77 6f 72 64 73 0a 43 55 52 52 45 4e 54 5f 54 49  words.CURRENT_TI
9b80: 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45  ME, CURRENT_DATE
9b90: 20 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45   or CURRENT_TIME
9ba0: 53 54 41 4d 50 2e 29 5e 20 5e 46 6f 72 20 74 68  STAMP.)^ ^For th
9bb0: 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74 68  e purposes of th
9bc0: 65 0a 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65  e.DEFAULT clause
9bd0: 2c 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  , an expression 
9be0: 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 63 6f  is considered co
9bf0: 6e 73 74 61 6e 74 20 69 66 20 69 74 20 64 6f 65  nstant if it doe
9c00: 73 0a 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 73 75  s.contains no su
9c10: 62 2d 71 75 65 72 69 65 73 2c 20 63 6f 6c 75 6d  b-queries, colum
9c20: 6e 20 6f 72 20 74 61 62 6c 65 20 72 65 66 65 72  n or table refer
9c30: 65 6e 63 65 73 2c 20 5b 62 6f 75 6e 64 20 70 61  ences, [bound pa
9c40: 72 61 6d 65 74 65 72 73 5d 2c 0a 6f 72 20 73 74  rameters],.or st
9c50: 72 69 6e 67 20 6c 69 74 65 72 61 6c 73 20 65 6e  ring literals en
9c60: 63 6c 6f 73 65 64 20 69 6e 20 64 6f 75 62 6c 65  closed in double
9c70: 2d 71 75 6f 74 65 73 20 69 6e 73 74 65 61 64 20  -quotes instead 
9c80: 6f 66 20 73 69 6e 67 6c 65 2d 71 75 6f 74 65 73  of single-quotes
9c90: 2e 0a 0a 3c 70 3e 5e 28 45 61 63 68 20 74 69 6d  ...<p>^(Each tim
9ca0: 65 20 61 20 72 6f 77 20 69 73 20 69 6e 73 65 72  e a row is inser
9cb0: 74 65 64 20 69 6e 74 6f 20 74 68 65 20 74 61 62  ted into the tab
9cc0: 6c 65 20 62 79 20 61 6e 20 49 4e 53 45 52 54 20  le by an INSERT 
9cd0: 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 0a  statement that .
9ce0: 64 6f 65 73 20 6e 6f 74 20 70 72 6f 76 69 64 65  does not provide
9cf0: 20 65 78 70 6c 69 63 69 74 20 76 61 6c 75 65 73   explicit values
9d00: 20 66 6f 72 20 61 6c 6c 20 74 61 62 6c 65 20 63   for all table c
9d10: 6f 6c 75 6d 6e 73 20 74 68 65 20 76 61 6c 75 65  olumns the value
9d20: 73 20 73 74 6f 72 65 64 20 69 6e 0a 74 68 65 20  s stored in.the 
9d30: 6e 65 77 20 72 6f 77 20 61 72 65 20 64 65 74 65  new row are dete
9d40: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 69 72 20  rmined by their 
9d50: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73 29 5e  default values)^
9d60: 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c  , as follows:..<
9d70: 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66  ul>.  <li><p>^If
9d80: 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
9d90: 75 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ue of the column
9da0: 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 4e   is a constant N
9db0: 55 4c 4c 2c 20 74 65 78 74 2c 20 62 6c 6f 62 20  ULL, text, blob 
9dc0: 6f 72 0a 20 20 20 20 73 69 67 6e 65 64 2d 6e 75  or.    signed-nu
9dd0: 6d 62 65 72 20 76 61 6c 75 65 2c 20 74 68 65 6e  mber value, then
9de0: 20 74 68 61 74 20 76 61 6c 75 65 20 69 73 20 75   that value is u
9df0: 73 65 64 20 64 69 72 65 63 74 6c 79 20 69 6e 20  sed directly in 
9e00: 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 0a 20 20  the new row...  
9e10: 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 64  <li><p>^If the d
9e20: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
9e30: 61 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65  a column is an e
9e40: 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 70 61 72  xpression in par
9e50: 65 6e 74 68 65 73 65 73 2c 20 74 68 65 6e 0a 20  entheses, then. 
9e60: 20 20 20 74 68 65 20 65 78 70 72 65 73 73 69 6f     the expressio
9e70: 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f  n is evaluated o
9e80: 6e 63 65 20 66 6f 72 20 65 61 63 68 20 72 6f 77  nce for each row
9e90: 20 69 6e 73 65 72 74 65 64 20 61 6e 64 20 74 68   inserted and th
9ea0: 65 20 72 65 73 75 6c 74 73 0a 20 20 20 20 75 73  e results.    us
9eb0: 65 64 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f  ed in the new ro
9ec0: 77 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66  w...  <li><p>^If
9ed0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
9ee0: 75 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69  ue of a column i
9ef0: 73 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20  s CURRENT_TIME, 
9f00: 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f 72 0a  CURRENT_DATE or.
9f10: 20 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d 45      CURRENT_TIME
9f20: 53 54 41 4d 50 2c 20 74 68 65 6e 20 74 68 65 20  STAMP, then the 
9f30: 76 61 6c 75 65 20 75 73 65 64 20 69 6e 20 74 68  value used in th
9f40: 65 20 6e 65 77 20 72 6f 77 20 69 73 20 61 20 74  e new row is a t
9f50: 65 78 74 0a 20 20 20 20 72 65 70 72 65 73 65 6e  ext.    represen
9f60: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 75  tation of the cu
9f70: 72 72 65 6e 74 20 55 54 43 20 64 61 74 65 20 61  rrent UTC date a
9f80: 6e 64 2f 6f 72 20 74 69 6d 65 2e 20 5e 46 6f 72  nd/or time. ^For
9f90: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 74   CURRENT_TIME, t
9fa0: 68 65 0a 20 20 20 20 66 6f 72 6d 61 74 20 6f 66  he.    format of
9fb0: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 22 48   the value is "H
9fc0: 48 3a 4d 4d 3a 53 53 22 2e 20 5e 46 6f 72 20 43  H:MM:SS". ^For C
9fd0: 55 52 52 45 4e 54 5f 44 41 54 45 2c 20 22 59 59  URRENT_DATE, "YY
9fe0: 59 59 2d 4d 4d 2d 44 44 22 2e 20 5e 54 68 65 0a  YY-MM-DD". ^The.
9ff0: 20 20 20 20 66 6f 72 6d 61 74 20 66 6f 72 20 43      format for C
a000: 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
a010: 20 69 73 20 22 59 59 59 59 2d 4d 4d 2d 44 44 20   is "YYYY-MM-DD 
a020: 48 48 3a 4d 4d 3a 53 53 22 2e 0a 3c 2f 75 6c 3e  HH:MM:SS"..</ul>
a030: 0a 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c 4c 41 54  ..<p>^The COLLAT
a040: 45 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69  E clause specifi
a050: 65 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  es the name of a
a060: 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75   [collating sequ
a070: 65 6e 63 65 5d 20 74 6f 20 75 73 65 20 61 73 0a  ence] to use as.
a080: 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c  the default coll
a090: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66  ation sequence f
a0a0: 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 5e  or the column. ^
a0b0: 49 66 20 6e 6f 20 43 4f 4c 4c 41 54 45 20 63 6c  If no COLLATE cl
a0c0: 61 75 73 65 20 69 73 0a 73 70 65 63 69 66 69 65  ause is.specifie
a0d0: 64 2c 20 74 68 65 20 64 65 66 61 75 6c 74 20 63  d, the default c
a0e0: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
a0f0: 65 20 69 73 20 5b 42 49 4e 41 52 59 5d 2e 0a 0a  e is [BINARY]...
a100: 3c 70 3e 5e 54 68 65 20 6e 75 6d 62 65 72 20 6f  <p>^The number o
a110: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 20 74  f columns in a t
a120: 61 62 6c 65 20 69 73 20 6c 69 6d 69 74 65 64 20  able is limited 
a130: 62 79 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4d  by the [SQLITE_M
a140: 41 58 5f 43 4f 4c 55 4d 4e 5d 0a 63 6f 6d 70 69  AX_COLUMN].compi
a150: 6c 65 2d 74 69 6d 65 20 70 61 72 61 6d 65 74 65  le-time paramete
a160: 72 2e 20 5e 41 20 73 69 6e 67 6c 65 20 72 6f 77  r. ^A single row
a170: 20 6f 66 20 61 20 74 61 62 6c 65 20 63 61 6e 6e   of a table cann
a180: 6f 74 20 73 74 6f 72 65 20 6d 6f 72 65 20 74 68  ot store more th
a190: 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 4c  an.[SQLITE_MAX_L
a1a0: 45 4e 47 54 48 5d 20 62 79 74 65 73 20 6f 66 20  ENGTH] bytes of 
a1b0: 64 61 74 61 2e 20 5e 42 6f 74 68 20 6f 66 20 74  data. ^Both of t
a1c0: 68 65 73 65 20 6c 69 6d 69 74 73 20 63 61 6e 20  hese limits can 
a1d0: 62 65 20 6c 6f 77 65 72 65 64 20 61 74 0a 72 75  be lowered at.ru
a1e0: 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65 20  ntime using the 
a1f0: 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29  [sqlite3_limit()
a200: 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63  ] C/C++ interfac
a210: 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  e.</p>..<tcl>hd_
a220: 66 72 61 67 6d 65 6e 74 20 7b 63 6f 6e 73 74 72  fragment {constr
a230: 61 69 6e 74 73 7d 20 7b 63 6f 6e 73 74 72 61 69  aints} {constrai
a240: 6e 74 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 53  nts}</tcl>.<h3>S
a250: 51 4c 20 44 61 74 61 20 43 6f 6e 73 74 72 61 69  QL Data Constrai
a260: 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 74 63 6c 3e 68  nts</h3>..<tcl>h
a270: 64 5f 66 72 61 67 6d 65 6e 74 20 70 72 69 6d 6b  d_fragment primk
a280: 65 79 63 6f 6e 73 74 20 7b 50 52 49 4d 41 52 59  eyconst {PRIMARY
a290: 20 4b 45 59 7d 20 7b 50 52 49 4d 41 52 59 20 4b   KEY} {PRIMARY K
a2a0: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f  EY constraint}</
a2b0: 74 63 6c 3e 0a 3c 70 3e 5e 45 61 63 68 20 74 61  tcl>.<p>^Each ta
a2c0: 62 6c 65 20 69 6e 20 53 51 4c 69 74 65 20 6d 61  ble in SQLite ma
a2d0: 79 20 68 61 76 65 20 61 74 20 6d 6f 73 74 20 6f  y have at most o
a2e0: 6e 65 20 3c 62 3e 50 52 49 4d 41 52 59 20 4b 45  ne <b>PRIMARY KE
a2f0: 59 3c 2f 62 3e 2e 20 5e 49 66 20 74 68 65 0a 20  Y</b>. ^If the. 
a300: 20 6b 65 79 77 6f 72 64 73 20 50 52 49 4d 41 52   keywords PRIMAR
a310: 59 20 4b 45 59 20 61 72 65 20 61 64 64 65 64 20  Y KEY are added 
a320: 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69  to a column defi
a330: 6e 69 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  nition, then the
a340: 20 70 72 69 6d 61 72 79 20 6b 65 79 0a 20 20 66   primary key.  f
a350: 6f 72 20 74 68 65 20 74 61 62 6c 65 20 63 6f 6e  or the table con
a360: 73 69 73 74 73 20 6f 66 20 74 68 61 74 20 73 69  sists of that si
a370: 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 5e 4f 72  ngle column. ^Or
a380: 2c 20 69 66 20 61 20 50 52 49 4d 41 52 59 20 4b  , if a PRIMARY K
a390: 45 59 20 63 6c 61 75 73 65 20 0a 20 20 69 73 20  EY clause .  is 
a3a0: 73 70 65 63 69 66 69 65 64 20 61 73 20 61 20 5b  specified as a [
a3b0: 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74  table-constraint
a3c0: 5d 2c 20 74 68 65 6e 20 74 68 65 20 70 72 69 6d  ], then the prim
a3d0: 61 72 79 20 6b 65 79 20 6f 66 20 74 68 65 20 74  ary key of the t
a3e0: 61 62 6c 65 0a 20 20 63 6f 6e 73 69 73 74 73 20  able.  consists 
a3f0: 6f 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 63  of the list of c
a400: 6f 6c 75 6d 6e 73 20 73 70 65 63 69 66 69 65 64  olumns specified
a410: 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
a420: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6c 61 75  PRIMARY KEY clau
a430: 73 65 2e 0a 20 20 5e 54 68 65 20 50 52 49 4d 41  se..  ^The PRIMA
a440: 52 59 20 4b 45 59 20 63 6c 61 75 73 65 20 6d 75  RY KEY clause mu
a450: 73 74 20 63 6f 6e 74 61 69 6e 20 6f 6e 6c 79 20  st contain only 
a460: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 26 6d 64  column names &md
a470: 61 73 68 3b 20 74 68 65 20 75 73 65 20 6f 66 20  ash; the use of 
a480: 0a 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  .  expressions i
a490: 6e 20 61 6e 20 5b 69 6e 64 65 78 65 64 2d 63 6f  n an [indexed-co
a4a0: 6c 75 6d 6e 5d 20 6f 66 20 61 20 50 52 49 4d 41  lumn] of a PRIMA
a4b0: 52 59 20 4b 45 59 20 69 73 20 6e 6f 74 20 73 75  RY KEY is not su
a4c0: 70 70 6f 72 74 65 64 2e 0a 20 20 5e 41 6e 20 65  pported..  ^An e
a4d0: 72 72 6f 72 20 69 73 20 72 61 69 73 65 64 20 69  rror is raised i
a4e0: 66 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  f more than one 
a4f0: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6c 61 75  PRIMARY KEY clau
a500: 73 65 20 61 70 70 65 61 72 73 20 69 6e 20 61 0a  se appears in a.
a510: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73    CREATE TABLE s
a520: 74 61 74 65 6d 65 6e 74 2e 20 20 5e 54 68 65 20  tatement.  ^The 
a530: 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 6f  PRIMARY KEY is o
a540: 70 74 69 6f 6e 61 6c 20 66 6f 72 20 6f 72 64 69  ptional for ordi
a550: 6e 61 72 79 20 74 61 62 6c 65 73 0a 20 20 62 75  nary tables.  bu
a560: 74 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  t is required fo
a570: 72 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44  r [WITHOUT ROWID
a580: 5d 20 74 61 62 6c 65 73 2e 0a 0a 3c 70 3e 49 66  ] tables...<p>If
a590: 20 61 20 74 61 62 6c 65 20 68 61 73 20 61 20 73   a table has a s
a5a0: 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 70 72 69  ingle column pri
a5b0: 6d 61 72 79 20 6b 65 79 20 61 6e 64 20 74 68 65  mary key and the
a5c0: 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f   declared type o
a5d0: 66 20 74 68 61 74 0a 20 20 63 6f 6c 75 6d 6e 20  f that.  column 
a5e0: 69 73 20 22 49 4e 54 45 47 45 52 22 20 61 6e 64  is "INTEGER" and
a5f0: 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 6e 6f   the table is no
a600: 74 20 61 20 5b 57 49 54 48 4f 55 54 20 52 4f 57  t a [WITHOUT ROW
a610: 49 44 5d 20 74 61 62 6c 65 2c 0a 20 20 74 68 65  ID] table,.  the
a620: 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20  n the column is 
a630: 6b 6e 6f 77 6e 20 61 73 20 61 6e 20 5b 49 4e 54  known as an [INT
a640: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
a650: 5d 2e 0a 20 20 53 65 65 20 5b 72 6f 77 69 64 7c  ]..  See [rowid|
a660: 62 65 6c 6f 77 5d 20 66 6f 72 20 61 20 64 65 73  below] for a des
a670: 63 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20  cription of the 
a680: 73 70 65 63 69 61 6c 20 70 72 6f 70 65 72 74 69  special properti
a690: 65 73 20 61 6e 64 20 62 65 68 61 76 69 6f 72 73  es and behaviors
a6a0: 0a 20 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  .  associated wi
a6b0: 74 68 20 61 6e 20 5b 49 4e 54 45 47 45 52 20 50  th an [INTEGER P
a6c0: 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 0a 3c 70  RIMARY KEY]...<p
a6d0: 3e 5e 45 61 63 68 20 72 6f 77 20 69 6e 20 61 20  >^Each row in a 
a6e0: 74 61 62 6c 65 20 77 69 74 68 20 61 20 70 72 69  table with a pri
a6f0: 6d 61 72 79 20 6b 65 79 20 6d 75 73 74 20 68 61  mary key must ha
a700: 76 65 20 61 20 75 6e 69 71 75 65 20 63 6f 6d 62  ve a unique comb
a710: 69 6e 61 74 69 6f 6e 0a 20 20 6f 66 20 76 61 6c  ination.  of val
a720: 75 65 73 20 69 6e 20 69 74 73 20 70 72 69 6d 61  ues in its prima
a730: 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 2e 20  ry key columns. 
a740: 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65  ^For the purpose
a750: 73 20 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67  s of determining
a760: 0a 20 20 74 68 65 20 75 6e 69 71 75 65 6e 65 73  .  the uniquenes
a770: 73 20 6f 66 20 70 72 69 6d 61 72 79 20 6b 65 79  s of primary key
a780: 20 76 61 6c 75 65 73 2c 20 4e 55 4c 4c 20 76 61   values, NULL va
a790: 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65  lues are conside
a7a0: 72 65 64 20 64 69 73 74 69 6e 63 74 20 66 72 6f  red distinct fro
a7b0: 6d 0a 20 20 61 6c 6c 20 6f 74 68 65 72 20 76 61  m.  all other va
a7c0: 6c 75 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20  lues, including 
a7d0: 6f 74 68 65 72 20 4e 55 4c 4c 73 2e 20 5e 49 66  other NULLs. ^If
a7e0: 20 61 6e 20 5b 49 4e 53 45 52 54 5d 20 6f 72 20   an [INSERT] or 
a7f0: 5b 55 50 44 41 54 45 5d 0a 20 20 73 74 61 74 65  [UPDATE].  state
a800: 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f  ment attempts to
a810: 20 6d 6f 64 69 66 79 20 74 68 65 20 74 61 62 6c   modify the tabl
a820: 65 20 63 6f 6e 74 65 6e 74 20 73 6f 20 74 68 61  e content so tha
a830: 74 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 72 6f  t two or more ro
a840: 77 73 0a 20 20 68 61 76 65 20 69 64 65 6e 74 69  ws.  have identi
a850: 63 61 6c 20 70 72 69 6d 61 72 79 20 6b 65 79 20  cal primary key 
a860: 76 61 6c 75 65 73 2c 20 74 68 61 74 20 69 73 20  values, that is 
a870: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
a880: 6c 61 74 69 6f 6e 2e 0a 0a 3c 70 3e 20 41 63 63  lation...<p> Acc
a890: 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 53 51  ording to the SQ
a8a0: 4c 20 73 74 61 6e 64 61 72 64 2c 20 50 52 49 4d  L standard, PRIM
a8b0: 41 52 59 20 4b 45 59 20 73 68 6f 75 6c 64 20 61  ARY KEY should a
a8c0: 6c 77 61 79 73 20 69 6d 70 6c 79 20 4e 4f 54 20  lways imply NOT 
a8d0: 4e 55 4c 4c 2e 0a 20 20 55 6e 66 6f 72 74 75 6e  NULL..  Unfortun
a8e0: 61 74 65 6c 79 2c 20 64 75 65 20 74 6f 20 61 20  ately, due to a 
a8f0: 62 75 67 20 69 6e 20 73 6f 6d 65 20 65 61 72 6c  bug in some earl
a900: 79 20 76 65 72 73 69 6f 6e 73 2c 20 74 68 69 73  y versions, this
a910: 20 69 73 20 6e 6f 74 20 74 68 65 0a 20 20 63 61   is not the.  ca
a920: 73 65 20 69 6e 20 53 51 4c 69 74 65 2e 20 5e 55  se in SQLite. ^U
a930: 6e 6c 65 73 73 20 74 68 65 20 63 6f 6c 75 6d 6e  nless the column
a940: 20 69 73 20 61 6e 20 5b 49 4e 54 45 47 45 52 20   is an [INTEGER 
a950: 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 6f 72 0a  PRIMARY KEY] or.
a960: 20 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 61    the table is a
a970: 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d   [WITHOUT ROWID]
a980: 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 63 6f   table or the co
a990: 6c 75 6d 6e 20 69 73 20 64 65 63 6c 61 72 65 64  lumn is declared
a9a0: 20 4e 4f 54 20 4e 55 4c 4c 2c 0a 20 20 53 51 4c   NOT NULL,.  SQL
a9b0: 69 74 65 20 61 6c 6c 6f 77 73 20 4e 55 4c 4c 20  ite allows NULL 
a9c0: 76 61 6c 75 65 73 20 69 6e 20 61 20 50 52 49 4d  values in a PRIM
a9d0: 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 2e 20  ARY KEY column. 
a9e0: 20 53 51 4c 69 74 65 20 63 6f 75 6c 64 20 62 65   SQLite could be
a9f0: 20 66 69 78 65 64 20 74 6f 0a 20 20 63 6f 6e 66   fixed to.  conf
aa00: 6f 72 6d 20 74 6f 20 74 68 65 20 73 74 61 6e 64  orm to the stand
aa10: 61 72 64 2c 20 62 75 74 20 64 6f 69 6e 67 20 73  ard, but doing s
aa20: 6f 20 6d 69 67 68 74 20 62 72 65 61 6b 20 6c 65  o might break le
aa30: 67 61 63 79 20 61 70 70 6c 69 63 61 74 69 6f 6e  gacy application
aa40: 73 2e 0a 20 20 48 65 6e 63 65 2c 20 69 74 20 68  s..  Hence, it h
aa50: 61 73 20 62 65 65 6e 20 64 65 63 69 64 65 64 20  as been decided 
aa60: 74 6f 20 6d 65 72 65 6c 79 20 64 6f 63 75 6d 65  to merely docume
aa70: 6e 74 20 74 68 65 20 66 61 63 74 20 74 68 61 74  nt the fact that
aa80: 20 53 51 4c 69 74 65 0a 20 20 61 6c 6c 6f 77 69   SQLite.  allowi
aa90: 6e 67 20 4e 55 4c 4c 73 20 69 6e 20 6d 6f 73 74  ng NULLs in most
aaa0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c   PRIMARY KEY col
aab0: 75 6d 6e 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  umns...<tcl>hd_f
aac0: 72 61 67 6d 65 6e 74 20 75 6e 69 71 75 65 63 6f  ragment uniqueco
aad0: 6e 73 74 20 7b 55 4e 49 51 55 45 7d 20 7b 75 6e  nst {UNIQUE} {un
aae0: 69 71 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 7d  ique constraint}
aaf0: 20 7b 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61   {UNIQUE constra
ab00: 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 41  int}</tcl>.<p>^A
ab10: 20 3c 62 3e 55 4e 49 51 55 45 3c 2f 62 3e 20 63   <b>UNIQUE</b> c
ab20: 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 73 69 6d  onstraint is sim
ab30: 69 6c 61 72 20 74 6f 20 61 20 50 52 49 4d 41 52  ilar to a PRIMAR
ab40: 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  Y KEY constraint
ab50: 2c 20 65 78 63 65 70 74 0a 20 20 74 68 61 74 20  , except.  that 
ab60: 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6d  a single table m
ab70: 61 79 20 68 61 76 65 20 61 6e 79 20 6e 75 6d 62  ay have any numb
ab80: 65 72 20 6f 66 20 55 4e 49 51 55 45 20 63 6f 6e  er of UNIQUE con
ab90: 73 74 72 61 69 6e 74 73 2e 20 5e 46 6f 72 20 65  straints. ^For e
aba0: 61 63 68 0a 20 20 55 4e 49 51 55 45 20 63 6f 6e  ach.  UNIQUE con
abb0: 73 74 72 61 69 6e 74 20 6f 6e 20 74 68 65 20 74  straint on the t
abc0: 61 62 6c 65 2c 20 65 61 63 68 20 72 6f 77 20 6d  able, each row m
abd0: 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 20 75 6e  ust contain a un
abe0: 69 71 75 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  ique combination
abf0: 0a 20 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20  .  of values in 
ac00: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 64 65 6e  the columns iden
ac10: 74 69 66 69 65 64 20 62 79 20 74 68 65 20 55 4e  tified by the UN
ac20: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e  IQUE constraint.
ac30: 20 0a 20 20 5e 46 6f 72 20 74 68 65 20 70 75 72   .  ^For the pur
ac40: 70 6f 73 65 73 20 6f 66 20 55 4e 49 51 55 45 20  poses of UNIQUE 
ac50: 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 4e 55 4c  constraints, NUL
ac60: 4c 20 76 61 6c 75 65 73 0a 20 20 61 72 65 20 63  L values.  are c
ac70: 6f 6e 73 69 64 65 72 65 64 20 64 69 73 74 69 6e  onsidered distin
ac80: 63 74 20 66 72 6f 6d 20 61 6c 6c 20 6f 74 68 65  ct from all othe
ac90: 72 20 76 61 6c 75 65 73 2c 20 69 6e 63 6c 75 64  r values, includ
aca0: 69 6e 67 20 6f 74 68 65 72 20 4e 55 4c 4c 73 2e  ing other NULLs.
acb0: 0a 20 20 5e 41 73 20 77 69 74 68 20 50 52 49 4d  .  ^As with PRIM
acc0: 41 52 59 20 4b 45 59 73 2c 20 61 20 55 4e 49 51  ARY KEYs, a UNIQ
acd0: 55 45 20 5b 74 61 62 6c 65 2d 63 6f 6e 73 74 72  UE [table-constr
ace0: 61 69 6e 74 5d 20 63 6c 61 75 73 65 20 6d 75 73  aint] clause mus
acf0: 74 20 63 6f 6e 74 61 69 6e 0a 20 20 6f 6e 6c 79  t contain.  only
ad00: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 26 6d   column names &m
ad10: 64 61 73 68 3b 20 74 68 65 20 75 73 65 20 6f 66  dash; the use of
ad20: 20 0a 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20   .  expressions 
ad30: 69 6e 20 61 6e 20 5b 69 6e 64 65 78 65 64 2d 63  in an [indexed-c
ad40: 6f 6c 75 6d 6e 5d 20 6f 66 20 61 20 55 4e 49 51  olumn] of a UNIQ
ad50: 55 45 20 5b 74 61 62 6c 65 2d 63 6f 6e 73 74 72  UE [table-constr
ad60: 61 69 6e 74 5d 0a 20 20 69 73 20 6e 6f 74 20 73  aint].  is not s
ad70: 75 70 70 6f 72 74 65 64 2e 0a 20 20 0a 0a 3c 70  upported..  ..<p
ad80: 3e 5e 49 6e 20 6d 6f 73 74 20 63 61 73 65 73 2c  >^In most cases,
ad90: 20 55 4e 49 51 55 45 20 61 6e 64 20 50 52 49 4d   UNIQUE and PRIM
ada0: 41 52 59 20 4b 45 59 0a 20 20 63 6f 6e 73 74 72  ARY KEY.  constr
adb0: 61 69 6e 74 73 20 61 72 65 20 69 6d 70 6c 65 6d  aints are implem
adc0: 65 6e 74 65 64 20 62 79 20 63 72 65 61 74 69 6e  ented by creatin
add0: 67 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  g a unique index
ade0: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
adf0: 2e 0a 20 20 28 54 68 65 20 65 78 63 65 70 74 69  ..  (The excepti
ae00: 6f 6e 73 20 61 72 65 20 5b 49 4e 54 45 47 45 52  ons are [INTEGER
ae10: 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 61 6e   PRIMARY KEY] an
ae20: 64 20 50 52 49 4d 41 52 59 20 4b 45 59 73 20 6f  d PRIMARY KEYs o
ae30: 6e 20 0a 20 20 5b 57 49 54 48 4f 55 54 20 52 4f  n .  [WITHOUT RO
ae40: 57 49 44 5d 20 74 61 62 6c 65 73 2e 29 0a 20 20  WID] tables.).  
ae50: 48 65 6e 63 65 2c 20 74 68 65 20 66 6f 6c 6c 6f  Hence, the follo
ae60: 77 69 6e 67 20 73 63 68 65 6d 61 73 20 61 72 65  wing schemas are
ae70: 20 6c 6f 67 69 63 61 6c 6c 79 20 65 71 75 69 76   logically equiv
ae80: 61 6c 65 6e 74 3a 0a 0a 20 20 3c 6f 6c 3e 0a 20  alent:..  <ol>. 
ae90: 20 3c 6c 69 3e 3c 70 3e 43 52 45 41 54 45 20 54   <li><p>CREATE T
aea0: 41 42 4c 45 20 74 31 28 61 2c 20 62 20 55 4e 49  ABLE t1(a, b UNI
aeb0: 51 55 45 29 3b 0a 20 20 3c 6c 69 3e 3c 70 3e 43  QUE);.  <li><p>C
aec0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
aed0: 2c 20 62 20 50 52 49 4d 41 52 59 20 4b 45 59 29  , b PRIMARY KEY)
aee0: 3b 0a 20 20 3c 6c 69 3e 3c 70 3e 43 52 45 41 54  ;.  <li><p>CREAT
aef0: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 29  E TABLE t1(a, b)
af00: 3b 3c 62 72 3e 0a 20 20 20 20 20 20 20 20 20 43  ;<br>.         C
af10: 52 45 41 54 45 20 55 4e 49 51 55 45 20 49 4e 44  REATE UNIQUE IND
af20: 45 58 20 74 31 62 20 4f 4e 20 74 31 28 62 29 3b  EX t1b ON t1(b);
af30: 0a 20 20 3c 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e 68  .  </ol>..<tcl>h
af40: 64 5f 66 72 61 67 6d 65 6e 74 20 7b 63 6b 63 6f  d_fragment {ckco
af50: 6e 73 74 7d 20 7b 43 48 45 43 4b 7d 20 7b 43 48  nst} {CHECK} {CH
af60: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 7d 20  ECK constraint} 
af70: 7b 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e  {CHECK constrain
af80: 74 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 28 41  ts}</tcl>.<p>^(A
af90: 20 3c 62 3e 43 48 45 43 4b 3c 2f 62 3e 20 63 6f   <b>CHECK</b> co
afa0: 6e 73 74 72 61 69 6e 74 20 6d 61 79 20 62 65 20  nstraint may be 
afb0: 61 74 74 61 63 68 65 64 20 74 6f 20 61 20 63 6f  attached to a co
afc0: 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  lumn definition 
afd0: 6f 72 0a 20 20 73 70 65 63 69 66 69 65 64 20 61  or.  specified a
afe0: 73 20 61 20 74 61 62 6c 65 20 63 6f 6e 73 74 72  s a table constr
aff0: 61 69 6e 74 2e 20 49 6e 20 70 72 61 63 74 69 63  aint. In practic
b000: 65 20 69 74 20 6d 61 6b 65 73 20 6e 6f 20 64 69  e it makes no di
b010: 66 66 65 72 65 6e 63 65 2e 29 5e 20 5e 28 45 61  fference.)^ ^(Ea
b020: 63 68 0a 20 20 74 69 6d 65 20 61 20 6e 65 77 20  ch.  time a new 
b030: 72 6f 77 20 69 73 20 69 6e 73 65 72 74 65 64 20  row is inserted 
b040: 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f  into the table o
b050: 72 20 61 6e 20 65 78 69 73 74 69 6e 67 20 72 6f  r an existing ro
b060: 77 20 69 73 20 75 70 64 61 74 65 64 2c 0a 20 20  w is updated,.  
b070: 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61  the expression a
b080: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 65  ssociated with e
b090: 61 63 68 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  ach CHECK constr
b0a0: 61 69 6e 74 20 69 73 20 65 76 61 6c 75 61 74 65  aint is evaluate
b0b0: 64 20 61 6e 64 0a 20 20 63 61 73 74 20 74 6f 20  d and.  cast to 
b0c0: 61 20 4e 55 4d 45 52 49 43 20 76 61 6c 75 65 20  a NUMERIC value 
b0d0: 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20  in the same way 
b0e0: 61 73 20 61 20 5b 43 41 53 54 20 65 78 70 72 65  as a [CAST expre
b0f0: 73 73 69 6f 6e 5d 2e 20 49 66 20 74 68 65 20 0a  ssion]. If the .
b100: 20 20 72 65 73 75 6c 74 20 69 73 20 7a 65 72 6f    result is zero
b110: 20 28 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20   (integer value 
b120: 30 20 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20  0 or real value 
b130: 30 2e 30 29 2c 20 74 68 65 6e 20 61 20 63 6f 6e  0.0), then a con
b140: 73 74 72 61 69 6e 74 0a 20 20 76 69 6f 6c 61 74  straint.  violat
b150: 69 6f 6e 20 68 61 73 20 6f 63 63 75 72 72 65 64  ion has occurred
b160: 2e 29 5e 20 5e 49 66 20 74 68 65 20 43 48 45 43  .)^ ^If the CHEC
b170: 4b 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  K expression eva
b180: 6c 75 61 74 65 73 20 74 6f 20 4e 55 4c 4c 2c 20  luates to NULL, 
b190: 6f 72 0a 20 20 61 6e 79 20 6f 74 68 65 72 20 6e  or.  any other n
b1a0: 6f 6e 2d 7a 65 72 6f 20 76 61 6c 75 65 2c 20 69  on-zero value, i
b1b0: 74 20 69 73 20 6e 6f 74 20 61 20 63 6f 6e 73 74  t is not a const
b1c0: 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 2e  raint violation.
b1d0: 0a 20 20 5e 54 68 65 20 65 78 70 72 65 73 73 69  .  ^The expressi
b1e0: 6f 6e 20 6f 66 20 61 20 43 48 45 43 4b 20 63 6f  on of a CHECK co
b1f0: 6e 73 74 72 61 69 6e 74 20 6d 61 79 20 6e 6f 74  nstraint may not
b200: 20 63 6f 6e 74 61 69 6e 20 61 20 73 75 62 71 75   contain a subqu
b210: 65 72 79 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ery...<tcl>hd_fr
b220: 61 67 6d 65 6e 74 20 7b 6e 6f 74 6e 75 6c 6c 63  agment {notnullc
b230: 6f 6e 73 74 7d 20 7b 4e 4f 54 20 4e 55 4c 4c 7d  onst} {NOT NULL}
b240: 20 7b 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74   {NOT NULL const
b250: 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  raint}</tcl>.<p>
b260: 5e 41 20 3c 62 3e 4e 4f 54 20 4e 55 4c 4c 3c 2f  ^A <b>NOT NULL</
b270: 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61  b> constraint ma
b280: 79 20 6f 6e 6c 79 20 62 65 20 61 74 74 61 63 68  y only be attach
b290: 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64  ed to a column d
b2a0: 65 66 69 6e 69 74 69 6f 6e 2c 0a 20 20 6e 6f 74  efinition,.  not
b2b0: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 61 20   specified as a 
b2c0: 74 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74  table constraint
b2d0: 2e 20 20 4e 6f 74 20 73 75 72 70 72 69 73 69 6e  .  Not surprisin
b2e0: 67 6c 79 2c 20 5e 28 61 20 4e 4f 54 20 4e 55 4c  gly, ^(a NOT NUL
b2f0: 4c 0a 20 20 63 6f 6e 73 74 72 61 69 6e 74 20 64  L.  constraint d
b300: 69 63 74 61 74 65 73 20 74 68 61 74 20 74 68 65  ictates that the
b310: 20 61 73 73 6f 63 69 61 74 65 64 20 63 6f 6c 75   associated colu
b320: 6d 6e 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61  mn may not conta
b330: 69 6e 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2e  in a NULL value.
b340: 0a 20 20 41 74 74 65 6d 70 74 69 6e 67 20 74 6f  .  Attempting to
b350: 20 73 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20   set the column 
b360: 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 77 68  value to NULL wh
b370: 65 6e 20 69 6e 73 65 72 74 69 6e 67 20 61 20 6e  en inserting a n
b380: 65 77 20 72 6f 77 20 6f 72 0a 20 20 75 70 64 61  ew row or.  upda
b390: 74 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67  ting an existing
b3a0: 20 6f 6e 65 20 63 61 75 73 65 73 20 61 20 63 6f   one causes a co
b3b0: 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
b3c0: 6f 6e 2e 29 5e 0a 0a 3c 70 3e 45 78 61 63 74 6c  on.)^..<p>Exactl
b3d0: 79 20 68 6f 77 20 61 20 63 6f 6e 73 74 72 61 69  y how a constrai
b3e0: 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 69 73 20  nt violation is 
b3f0: 64 65 61 6c 74 20 77 69 74 68 20 69 73 20 64 65  dealt with is de
b400: 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 0a  termined by the.
b410: 20 20 5b 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75    [conflict clau
b420: 73 65 7c 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f  se|constraint co
b430: 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
b440: 6e 20 61 6c 67 6f 72 69 74 68 6d 5d 2e 20 45 61  n algorithm]. Ea
b450: 63 68 20 0a 20 20 50 52 49 4d 41 52 59 20 4b 45  ch .  PRIMARY KE
b460: 59 2c 20 55 4e 49 51 55 45 2c 20 4e 4f 54 20 4e  Y, UNIQUE, NOT N
b470: 55 4c 4c 20 61 6e 64 20 43 48 45 43 4b 20 63 6f  ULL and CHECK co
b480: 6e 73 74 72 61 69 6e 74 20 68 61 73 20 61 20 64  nstraint has a d
b490: 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 0a  efault conflict.
b4a0: 20 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67    resolution alg
b4b0: 6f 72 69 74 68 6d 2e 20 5e 50 52 49 4d 41 52 59  orithm. ^PRIMARY
b4c0: 20 4b 45 59 2c 20 55 4e 49 51 55 45 20 61 6e 64   KEY, UNIQUE and
b4d0: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
b4e0: 61 69 6e 74 73 20 6d 61 79 20 62 65 0a 20 20 65  aints may be.  e
b4f0: 78 70 6c 69 63 69 74 6c 79 20 61 73 73 69 67 6e  xplicitly assign
b500: 65 64 20 61 20 64 65 66 61 75 6c 74 20 63 6f 6e  ed a default con
b510: 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
b520: 20 61 6c 67 6f 72 69 74 68 6d 20 62 79 20 69 6e   algorithm by in
b530: 63 6c 75 64 69 6e 67 0a 20 20 61 20 5b 63 6f 6e  cluding.  a [con
b540: 66 6c 69 63 74 2d 63 6c 61 75 73 65 5d 20 69 6e  flict-clause] in
b550: 20 74 68 65 69 72 20 64 65 66 69 6e 69 74 69 6f   their definitio
b560: 6e 73 2e 20 5e 4f 72 2c 20 69 66 20 61 20 63 6f  ns. ^Or, if a co
b570: 6e 73 74 72 61 69 6e 74 20 64 65 66 69 6e 69 74  nstraint definit
b580: 69 6f 6e 0a 20 20 64 6f 65 73 20 6e 6f 74 20 69  ion.  does not i
b590: 6e 63 6c 75 64 65 20 61 20 5b 63 6f 6e 66 6c 69  nclude a [confli
b5a0: 63 74 2d 63 6c 61 75 73 65 5d 20 6f 72 20 69 74  ct-clause] or it
b5b0: 20 69 73 20 61 20 43 48 45 43 4b 20 63 6f 6e 73   is a CHECK cons
b5c0: 74 72 61 69 6e 74 2c 20 74 68 65 20 64 65 66 61  traint, the defa
b5d0: 75 6c 74 0a 20 20 63 6f 6e 66 6c 69 63 74 20 72  ult.  conflict r
b5e0: 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
b5f0: 74 68 6d 20 69 73 20 41 42 4f 52 54 2e 20 5e 44  thm is ABORT. ^D
b600: 69 66 66 65 72 65 6e 74 20 63 6f 6e 73 74 72 61  ifferent constra
b610: 69 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65 0a  ints within the.
b620: 20 20 73 61 6d 65 20 74 61 62 6c 65 20 6d 61 79    same table may
b630: 20 68 61 76 65 20 64 69 66 66 65 72 65 6e 74 20   have different 
b640: 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74  default conflict
b650: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
b660: 72 69 74 68 6d 73 2e 20 53 65 65 0a 20 20 74 68  rithms. See.  th
b670: 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64  e section titled
b680: 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66   [ON CONFLICT] f
b690: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
b6a0: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a 3c 74 63 6c  formation...<tcl
b6b0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 6f 77  >hd_fragment row
b6c0: 69 64 20 7b 49 4e 54 45 47 45 52 20 50 52 49 4d  id {INTEGER PRIM
b6d0: 41 52 59 20 4b 45 59 7d 20 52 4f 57 49 44 20 72  ARY KEY} ROWID r
b6e0: 6f 77 69 64 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 52  owid</tcl>.<h3>R
b6f0: 4f 57 49 44 73 20 61 6e 64 20 74 68 65 20 49 4e  OWIDs and the IN
b700: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
b710: 59 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 45 78 63 65  Y</h3>..<p>^Exce
b720: 70 74 20 66 6f 72 20 5b 57 49 54 48 4f 55 54 20  pt for [WITHOUT 
b730: 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2c 20 61  ROWID] tables, a
b740: 6c 6c 20 72 6f 77 73 20 77 69 74 68 69 6e 20 53  ll rows within S
b750: 51 4c 69 74 65 20 74 61 62 6c 65 73 0a 68 61 76  QLite tables.hav
b760: 65 20 61 20 36 34 2d 62 69 74 20 73 69 67 6e 65  e a 64-bit signe
b770: 64 20 69 6e 74 65 67 65 72 20 6b 65 79 20 74 68  d integer key th
b780: 61 74 20 75 6e 69 71 75 65 6c 79 20 69 64 65 6e  at uniquely iden
b790: 74 69 66 69 65 73 20 74 68 65 20 72 6f 77 20 77  tifies the row w
b7a0: 69 74 68 69 6e 20 69 74 73 20 74 61 62 6c 65 2e  ithin its table.
b7b0: 0a 54 68 69 73 20 69 6e 74 65 67 65 72 20 69 73  .This integer is
b7c0: 20 75 73 75 61 6c 6c 79 0a 63 61 6c 6c 65 64 20   usually.called 
b7d0: 74 68 65 20 22 72 6f 77 69 64 22 2e 20 5e 54 68  the "rowid". ^Th
b7e0: 65 20 72 6f 77 69 64 20 76 61 6c 75 65 20 63 61  e rowid value ca
b7f0: 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 75 73  n be accessed us
b800: 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65 20 73  ing one of the s
b810: 70 65 63 69 61 6c 0a 63 61 73 65 2d 69 6e 64 65  pecial.case-inde
b820: 70 65 6e 64 65 6e 74 20 6e 61 6d 65 73 20 22 72  pendent names "r
b830: 6f 77 69 64 22 2c 20 22 6f 69 64 22 2c 20 6f 72  owid", "oid", or
b840: 20 22 5f 72 6f 77 69 64 5f 22 20 69 6e 20 70 6c   "_rowid_" in pl
b850: 61 63 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  ace of a column 
b860: 6e 61 6d 65 2e 0a 5e 49 66 20 61 20 74 61 62 6c  name..^If a tabl
b870: 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 75 73 65  e contains a use
b880: 72 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e  r defined column
b890: 20 6e 61 6d 65 64 20 22 72 6f 77 69 64 22 2c 20   named "rowid", 
b8a0: 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77 69 64  "oid" or "_rowid
b8b0: 5f 22 2c 0a 74 68 65 6e 20 74 68 61 74 20 6e 61  _",.then that na
b8c0: 6d 65 20 61 6c 77 61 79 73 20 72 65 66 65 72 73  me always refers
b8d0: 20 74 68 65 20 65 78 70 6c 69 63 69 74 6c 79 20   the explicitly 
b8e0: 64 65 63 6c 61 72 65 64 20 63 6f 6c 75 6d 6e 20  declared column 
b8f0: 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 75 73  and cannot be us
b900: 65 64 0a 74 6f 20 72 65 74 72 69 65 76 65 20 74  ed.to retrieve t
b910: 68 65 20 69 6e 74 65 67 65 72 20 72 6f 77 69 64  he integer rowid
b920: 20 76 61 6c 75 65 2e 0a 0a 3c 70 3e 54 68 65 20   value...<p>The 
b930: 72 6f 77 69 64 20 28 61 6e 64 20 22 6f 69 64 22  rowid (and "oid"
b940: 20 61 6e 64 20 22 5f 72 6f 77 69 64 5f 22 29 20   and "_rowid_") 
b950: 69 73 20 6f 6d 69 74 74 65 64 20 69 6e 20 5b 57  is omitted in [W
b960: 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61  ITHOUT ROWID] ta
b970: 62 6c 65 73 2e 0a 57 49 54 48 4f 55 54 20 52 4f  bles..WITHOUT RO
b980: 57 49 44 20 74 61 62 6c 65 73 20 61 72 65 20 6f  WID tables are o
b990: 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 69 6e  nly available in
b9a0: 20 53 51 4c 69 74 65 20 5b 76 65 72 73 69 6f 6e   SQLite [version
b9b0: 20 33 2e 38 2e 32 5d 0a 28 5b 64 61 74 65 6f 66   3.8.2].([dateof
b9c0: 3a 33 2e 38 2e 32 5d 29 20 61 6e 64 20 6c 61 74  :3.8.2]) and lat
b9d0: 65 72 2e 0a 41 20 74 61 62 6c 65 20 74 68 61 74  er..A table that
b9e0: 20 6c 61 63 6b 73 20 74 68 65 20 57 49 54 48 4f   lacks the WITHO
b9f0: 55 54 20 52 4f 57 49 44 20 63 6c 61 75 73 65 20  UT ROWID clause 
ba00: 69 73 20 63 61 6c 6c 65 64 20 61 20 22 72 6f 77  is called a "row
ba10: 69 64 20 74 61 62 6c 65 22 2e 0a 0a 3c 70 3e 54  id table"...<p>T
ba20: 68 65 20 64 61 74 61 20 66 6f 72 20 72 6f 77 69  he data for rowi
ba30: 64 20 74 61 62 6c 65 73 20 69 73 20 73 74 6f 72  d tables is stor
ba40: 65 64 20 61 73 20 61 20 42 2d 54 72 65 65 20 73  ed as a B-Tree s
ba50: 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
ba60: 69 6e 67 0a 6f 6e 65 20 65 6e 74 72 79 20 66 6f  ing.one entry fo
ba70: 72 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77  r each table row
ba80: 2c 20 75 73 69 6e 67 20 74 68 65 20 72 6f 77 69  , using the rowi
ba90: 64 20 76 61 6c 75 65 20 61 73 20 74 68 65 20 6b  d value as the k
baa0: 65 79 2e 20 54 68 69 73 20 6d 65 61 6e 73 20 74  ey. This means t
bab0: 68 61 74 0a 72 65 74 72 69 65 76 69 6e 67 20 6f  hat.retrieving o
bac0: 72 20 73 6f 72 74 69 6e 67 20 72 65 63 6f 72 64  r sorting record
bad0: 73 20 62 79 20 72 6f 77 69 64 20 69 73 20 66 61  s by rowid is fa
bae0: 73 74 2e 20 53 65 61 72 63 68 69 6e 67 20 66 6f  st. Searching fo
baf0: 72 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20  r a record with 
bb00: 61 0a 73 70 65 63 69 66 69 63 20 72 6f 77 69 64  a.specific rowid
bb10: 2c 20 6f 72 20 66 6f 72 20 61 6c 6c 20 72 65 63  , or for all rec
bb20: 6f 72 64 73 20 77 69 74 68 20 72 6f 77 69 64 73  ords with rowids
bb30: 20 77 69 74 68 69 6e 20 61 20 73 70 65 63 69 66   within a specif
bb40: 69 65 64 20 72 61 6e 67 65 20 69 73 0a 61 72 6f  ied range is.aro
bb50: 75 6e 64 20 74 77 69 63 65 20 61 73 20 66 61 73  und twice as fas
bb60: 74 20 61 73 20 61 20 73 69 6d 69 6c 61 72 20 73  t as a similar s
bb70: 65 61 72 63 68 20 6d 61 64 65 20 62 79 20 73 70  earch made by sp
bb80: 65 63 69 66 79 69 6e 67 20 61 6e 79 20 6f 74 68  ecifying any oth
bb90: 65 72 20 50 52 49 4d 41 52 59 0a 4b 45 59 20 6f  er PRIMARY.KEY o
bba0: 72 20 69 6e 64 65 78 65 64 20 76 61 6c 75 65 2e  r indexed value.
bbb0: 0a 0a 3c 70 3e 20 5e 57 69 74 68 20 6f 6e 65 20  ..<p> ^With one 
bbc0: 65 78 63 65 70 74 69 6f 6e 20 6e 6f 74 65 64 20  exception noted 
bbd0: 62 65 6c 6f 77 2c 20 69 66 20 61 20 72 6f 77 69  below, if a rowi
bbe0: 64 20 74 61 62 6c 65 20 68 61 73 20 61 20 70 72  d table has a pr
bbf0: 69 6d 61 72 79 20 6b 65 79 20 74 68 61 74 20 63  imary key that c
bc00: 6f 6e 73 69 73 74 73 0a 6f 66 20 61 20 73 69 6e  onsists.of a sin
bc10: 67 6c 65 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 74  gle column and t
bc20: 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70 65  he declared type
bc30: 20 6f 66 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20   of that column 
bc40: 69 73 20 22 49 4e 54 45 47 45 52 22 20 69 6e 20  is "INTEGER" in 
bc50: 61 6e 79 20 6d 69 78 74 75 72 65 20 6f 66 0a 75  any mixture of.u
bc60: 70 70 65 72 20 61 6e 64 20 6c 6f 77 65 72 20 63  pper and lower c
bc70: 61 73 65 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  ase, then the co
bc80: 6c 75 6d 6e 20 62 65 63 6f 6d 65 73 20 61 6e 20  lumn becomes an 
bc90: 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72 6f  alias for the ro
bca0: 77 69 64 2e 20 53 75 63 68 20 61 0a 63 6f 6c 75  wid. Such a.colu
bcb0: 6d 6e 20 69 73 20 75 73 75 61 6c 6c 79 20 72 65  mn is usually re
bcc0: 66 65 72 72 65 64 20 74 6f 20 61 73 20 61 6e 20  ferred to as an 
bcd0: 22 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79  "integer primary
bce0: 20 6b 65 79 22 2e 20 41 20 50 52 49 4d 41 52 59   key". A PRIMARY
bcf0: 20 4b 45 59 20 63 6f 6c 75 6d 6e 0a 6f 6e 6c 79   KEY column.only
bd00: 20 62 65 63 6f 6d 65 73 20 61 6e 20 69 6e 74 65   becomes an inte
bd10: 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20  ger primary key 
bd20: 69 66 20 74 68 65 20 64 65 63 6c 61 72 65 64 20  if the declared 
bd30: 74 79 70 65 20 6e 61 6d 65 20 69 73 20 65 78 61  type name is exa
bd40: 63 74 6c 79 0a 22 49 4e 54 45 47 45 52 22 2e 20  ctly."INTEGER". 
bd50: 20 5e 4f 74 68 65 72 20 69 6e 74 65 67 65 72 20   ^Other integer 
bd60: 74 79 70 65 20 6e 61 6d 65 73 20 6c 69 6b 65 20  type names like 
bd70: 22 49 4e 54 22 20 6f 72 20 22 42 49 47 49 4e 54  "INT" or "BIGINT
bd80: 22 20 6f 72 20 22 53 48 4f 52 54 20 49 4e 54 45  " or "SHORT INTE
bd90: 47 45 52 22 0a 6f 72 20 22 55 4e 53 49 47 4e 45  GER".or "UNSIGNE
bda0: 44 20 49 4e 54 45 47 45 52 22 20 63 61 75 73 65  D INTEGER" cause
bdb0: 73 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  s the primary ke
bdc0: 79 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 68 61  y column to beha
bdd0: 76 65 20 61 73 20 61 6e 20 6f 72 64 69 6e 61 72  ve as an ordinar
bde0: 79 0a 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 77  y.table column w
bdf0: 69 74 68 20 69 6e 74 65 67 65 72 20 5b 61 66 66  ith integer [aff
be00: 69 6e 69 74 79 5d 20 61 6e 64 20 61 20 75 6e 69  inity] and a uni
be10: 71 75 65 20 69 6e 64 65 78 2c 20 6e 6f 74 20 61  que index, not a
be20: 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 0a 74  s an alias for.t
be30: 68 65 20 72 6f 77 69 64 2e 0a 0a 3c 70 3e 20 54  he rowid...<p> T
be40: 68 65 20 65 78 63 65 70 74 69 6f 6e 20 6d 65 6e  he exception men
be50: 74 69 6f 6e 65 64 20 61 62 6f 76 65 20 69 73 20  tioned above is 
be60: 74 68 61 74 20 5e 69 66 20 74 68 65 20 64 65 63  that ^if the dec
be70: 6c 61 72 61 74 69 6f 6e 20 6f 66 20 61 20 63 6f  laration of a co
be80: 6c 75 6d 6e 20 77 69 74 68 0a 64 65 63 6c 61 72  lumn with.declar
be90: 65 64 20 74 79 70 65 20 22 49 4e 54 45 47 45 52  ed type "INTEGER
bea0: 22 20 69 6e 63 6c 75 64 65 73 20 61 6e 20 22 50  " includes an "P
beb0: 52 49 4d 41 52 59 20 4b 45 59 20 44 45 53 43 22  RIMARY KEY DESC"
bec0: 20 63 6c 61 75 73 65 2c 20 69 74 20 64 6f 65 73   clause, it does
bed0: 20 6e 6f 74 0a 62 65 63 6f 6d 65 20 61 6e 20 61   not.become an a
bee0: 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77  lias for the row
bef0: 69 64 20 61 6e 64 20 69 73 20 6e 6f 74 20 63 6c  id and is not cl
bf00: 61 73 73 69 66 69 65 64 20 61 73 20 61 6e 20 69  assified as an i
bf10: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
bf20: 65 79 2e 0a 54 68 69 73 20 71 75 69 72 6b 20 69  ey..This quirk i
bf30: 73 20 6e 6f 74 20 62 79 20 64 65 73 69 67 6e 2e  s not by design.
bf40: 20 49 74 20 69 73 20 64 75 65 20 74 6f 20 61 20   It is due to a 
bf50: 62 75 67 20 69 6e 20 65 61 72 6c 79 20 76 65 72  bug in early ver
bf60: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2e  sions of SQLite.
bf70: 0a 42 75 74 20 66 69 78 69 6e 67 20 74 68 65 20  .But fixing the 
bf80: 62 75 67 20 63 6f 75 6c 64 20 72 65 73 75 6c 74  bug could result
bf90: 20 69 6e 20 62 61 63 6b 77 61 72 64 73 20 69 6e   in backwards in
bfa0: 63 6f 6d 70 61 74 69 62 69 6c 69 74 69 65 73 2e  compatibilities.
bfb0: 0a 48 65 6e 63 65 2c 20 74 68 65 20 6f 72 69 67  .Hence, the orig
bfc0: 69 6e 61 6c 20 62 65 68 61 76 69 6f 72 20 68 61  inal behavior ha
bfd0: 73 20 62 65 65 6e 20 72 65 74 61 69 6e 65 64 20  s been retained 
bfe0: 28 61 6e 64 20 64 6f 63 75 6d 65 6e 74 65 64 29  (and documented)
bff0: 20 62 65 63 61 75 73 65 20 6f 64 64 0a 62 65 68   because odd.beh
c000: 61 76 69 6f 72 20 69 6e 20 61 20 63 6f 72 6e 65  avior in a corne
c010: 72 20 63 61 73 65 20 69 73 20 66 61 72 20 62 65  r case is far be
c020: 74 74 65 72 20 74 68 61 6e 20 61 20 63 6f 6d 70  tter than a comp
c030: 61 74 69 62 69 6c 69 74 79 20 62 72 65 61 6b 2e  atibility break.
c040: 20 20 54 68 69 73 20 6d 65 61 6e 73 0a 74 68 61    This means.tha
c050: 74 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  t ^(the followin
c060: 67 20 74 68 72 65 65 20 74 61 62 6c 65 20 64 65  g three table de
c070: 63 6c 61 72 61 74 69 6f 6e 73 20 61 6c 6c 20 63  clarations all c
c080: 61 75 73 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ause the column 
c090: 22 78 22 20 74 6f 20 62 65 20 61 6e 0a 61 6c 69  "x" to be an.ali
c0a0: 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64  as for the rowid
c0b0: 20 28 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69   (an integer pri
c0c0: 6d 61 72 79 20 6b 65 79 29 3a 0a 0a 3c 75 6c 3e  mary key):..<ul>
c0d0: 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20  .<li><tt>CREATE 
c0e0: 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45  TABLE t(x INTEGE
c0f0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 53  R PRIMARY KEY AS
c100: 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c  C, y, z);</tt>.<
c110: 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54 41  li><tt>CREATE TA
c120: 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52 2c  BLE t(x INTEGER,
c130: 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59 20 4b   y, z, PRIMARY K
c140: 45 59 28 78 20 41 53 43 29 29 3b 3c 2f 74 74 3e  EY(x ASC));</tt>
c150: 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20  .<li><tt>CREATE 
c160: 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45  TABLE t(x INTEGE
c170: 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59  R, y, z, PRIMARY
c180: 20 4b 45 59 28 78 20 44 45 53 43 29 29 3b 3c 2f   KEY(x DESC));</
c190: 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e  tt>.</ul>)^..<p>
c1a0: 42 75 74 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77  But ^(the follow
c1b0: 69 6e 67 20 64 65 63 6c 61 72 61 74 69 6f 6e 20  ing declaration 
c1c0: 64 6f 65 73 20 6e 6f 74 20 72 65 73 75 6c 74 20  does not result 
c1d0: 69 6e 20 22 78 22 20 62 65 69 6e 67 20 61 6e 20  in "x" being an 
c1e0: 61 6c 69 61 73 20 66 6f 72 0a 74 68 65 20 72 6f  alias for.the ro
c1f0: 77 69 64 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74  wid:.<ul>.<li><t
c200: 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  t>CREATE TABLE t
c210: 28 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (x INTEGER PRIMA
c220: 52 59 20 4b 45 59 20 44 45 53 43 2c 20 79 2c 20  RY KEY DESC, y, 
c230: 7a 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e  z);</tt>.</ul>)^
c240: 0a 0a 3c 70 3e 5e 52 6f 77 69 64 20 76 61 6c 75  ..<p>^Rowid valu
c250: 65 73 20 6d 61 79 20 62 65 20 6d 6f 64 69 66 69  es may be modifi
c260: 65 64 20 75 73 69 6e 67 20 61 6e 20 55 50 44 41  ed using an UPDA
c270: 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20  TE statement in 
c280: 74 68 65 20 73 61 6d 65 0a 77 61 79 20 61 73 20  the same.way as 
c290: 61 6e 79 20 6f 74 68 65 72 20 63 6f 6c 75 6d 6e  any other column
c2a0: 20 76 61 6c 75 65 20 63 61 6e 2c 20 65 69 74 68   value can, eith
c2b0: 65 72 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66 20  er using one of 
c2c0: 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 61 6c 69  the built-in ali
c2d0: 61 73 65 73 0a 28 22 72 6f 77 69 64 22 2c 20 22  ases.("rowid", "
c2e0: 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77 69 64 5f  oid" or "_rowid_
c2f0: 22 29 20 6f 72 20 62 79 20 75 73 69 6e 67 20 61  ") or by using a
c300: 6e 20 61 6c 69 61 73 20 63 72 65 61 74 65 64 20  n alias created 
c310: 62 79 20 61 6e 20 69 6e 74 65 67 65 72 0a 70 72  by an integer.pr
c320: 69 6d 61 72 79 20 6b 65 79 2e 20 5e 53 69 6d 69  imary key. ^Simi
c330: 6c 61 72 6c 79 2c 20 61 6e 20 49 4e 53 45 52 54  larly, an INSERT
c340: 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 70   statement may p
c350: 72 6f 76 69 64 65 20 61 20 76 61 6c 75 65 20 74  rovide a value t
c360: 6f 20 75 73 65 20 61 73 20 74 68 65 0a 72 6f 77  o use as the.row
c370: 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  id for each row 
c380: 69 6e 73 65 72 74 65 64 2e 20 5e 28 55 6e 6c 69  inserted. ^(Unli
c390: 6b 65 20 6e 6f 72 6d 61 6c 20 53 51 4c 69 74 65  ke normal SQLite
c3a0: 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 20 69 6e 74   columns, an int
c3b0: 65 67 65 72 20 70 72 69 6d 61 72 79 0a 6b 65 79  eger primary.key
c3c0: 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e   or rowid column
c3d0: 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 69 6e   must contain in
c3e0: 74 65 67 65 72 20 76 61 6c 75 65 73 2e 20 49 6e  teger values. In
c3f0: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
c400: 79 20 6f 72 20 72 6f 77 69 64 0a 63 6f 6c 75 6d  y or rowid.colum
c410: 6e 73 20 61 72 65 20 6e 6f 74 20 61 62 6c 65 20  ns are not able 
c420: 74 6f 20 68 6f 6c 64 20 66 6c 6f 61 74 69 6e 67  to hold floating
c430: 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 2c 20 73   point values, s
c440: 74 72 69 6e 67 73 2c 20 42 4c 4f 42 73 2c 20 6f  trings, BLOBs, o
c450: 72 20 4e 55 4c 4c 73 2e 29 5e 0a 0a 3c 70 3e 5e  r NULLs.)^..<p>^
c460: 49 66 20 61 6e 20 55 50 44 41 54 45 20 73 74 61  If an UPDATE sta
c470: 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20  tement attempts 
c480: 74 6f 20 73 65 74 20 61 6e 20 69 6e 74 65 67 65  to set an intege
c490: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 72  r primary key or
c4a0: 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 0a 74 6f   rowid column.to
c4b0: 20 61 20 4e 55 4c 4c 20 6f 72 20 62 6c 6f 62 20   a NULL or blob 
c4c0: 76 61 6c 75 65 2c 20 6f 72 20 74 6f 20 61 20 73  value, or to a s
c4d0: 74 72 69 6e 67 20 6f 72 20 72 65 61 6c 20 76 61  tring or real va
c4e0: 6c 75 65 20 74 68 61 74 20 63 61 6e 6e 6f 74 20  lue that cannot 
c4f0: 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 0a 63 6f  be losslessly.co
c500: 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e  nverted to an in
c510: 74 65 67 65 72 2c 20 61 20 22 64 61 74 61 74 79  teger, a "dataty
c520: 70 65 20 6d 69 73 6d 61 74 63 68 22 20 65 72 72  pe mismatch" err
c530: 6f 72 20 6f 63 63 75 72 73 20 61 6e 64 20 74 68  or occurs and th
c540: 65 20 73 74 61 74 65 6d 65 6e 74 0a 69 73 20 61  e statement.is a
c550: 62 6f 72 74 65 64 2e 20 5e 49 66 20 61 6e 20 49  borted. ^If an I
c560: 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
c570: 61 74 74 65 6d 70 74 73 20 74 6f 20 69 6e 73 65  attempts to inse
c580: 72 74 20 61 20 62 6c 6f 62 20 76 61 6c 75 65 2c  rt a blob value,
c590: 20 6f 72 20 61 20 73 74 72 69 6e 67 0a 6f 72 20   or a string.or 
c5a0: 72 65 61 6c 20 76 61 6c 75 65 20 74 68 61 74 20  real value that 
c5b0: 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65  cannot be lossle
c5c0: 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
c5d0: 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 69 6e 74  o an integer int
c5e0: 6f 20 61 6e 0a 69 6e 74 65 67 65 72 20 70 72 69  o an.integer pri
c5f0: 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77 69  mary key or rowi
c600: 64 20 63 6f 6c 75 6d 6e 2c 20 61 20 22 64 61 74  d column, a "dat
c610: 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22 20  atype mismatch" 
c620: 65 72 72 6f 72 20 6f 63 63 75 72 73 20 61 6e 64  error occurs and
c630: 20 74 68 65 0a 73 74 61 74 65 6d 65 6e 74 20 69   the.statement i
c640: 73 20 61 62 6f 72 74 65 64 2e 0a 0a 3c 70 3e 5e  s aborted...<p>^
c650: 49 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  If an INSERT sta
c660: 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20  tement attempts 
c670: 74 6f 20 69 6e 73 65 72 74 20 61 20 4e 55 4c 4c  to insert a NULL
c680: 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 72 6f   value into a ro
c690: 77 69 64 20 6f 72 0a 69 6e 74 65 67 65 72 20 70  wid or.integer p
c6a0: 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d  rimary key colum
c6b0: 6e 2c 20 74 68 65 20 73 79 73 74 65 6d 20 63 68  n, the system ch
c6c0: 6f 6f 73 65 73 20 61 6e 20 69 6e 74 65 67 65 72  ooses an integer
c6d0: 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20 61 73   value to use as
c6e0: 20 74 68 65 0a 72 6f 77 69 64 20 61 75 74 6f 6d   the.rowid autom
c6f0: 61 74 69 63 61 6c 6c 79 2e 20 41 20 64 65 74 61  atically. A deta
c700: 69 6c 65 64 20 64 65 73 63 72 69 70 74 69 6f 6e  iled description
c710: 20 6f 66 20 68 6f 77 20 74 68 69 73 20 69 73 20   of how this is 
c720: 64 6f 6e 65 20 69 73 20 70 72 6f 76 69 64 65 64  done is provided
c730: 0a 3c 61 20 68 72 65 66 3d 22 61 75 74 6f 69 6e  .<a href="autoin
c740: 63 2e 68 74 6d 6c 22 3e 73 65 70 61 72 61 74 65  c.html">separate
c750: 6c 79 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ly</a>.</p>..<p>
c760: 5e 28 54 68 65 20 5b 70 61 72 65 6e 74 20 6b 65  ^(The [parent ke
c770: 79 5d 20 6f 66 20 61 20 5b 66 6f 72 65 69 67 6e  y] of a [foreign
c780: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 5d   key constraint]
c790: 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20   is not allowed 
c7a0: 74 6f 0a 75 73 65 20 74 68 65 20 72 6f 77 69 64  to.use the rowid
c7b0: 2e 20 20 54 68 65 20 70 61 72 65 6e 74 20 6b 65  .  The parent ke
c7c0: 79 20 6d 75 73 74 20 75 73 65 64 20 6e 61 6d 65  y must used name
c7d0: 64 20 63 6f 6c 75 6d 6e 73 20 6f 6e 6c 79 2e 29  d columns only.)
c7e0: 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  ^</p>..<tcl>.###
c7f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c830: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
c840: 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 52 49 47  ion {CREATE TRIG
c850: 47 45 52 7d 20 63 72 65 61 74 65 74 72 69 67 67  GER} createtrigg
c860: 65 72 20 7b 7b 43 52 45 41 54 45 20 54 52 49 47  er {{CREATE TRIG
c870: 47 45 52 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65  GER}}..Recursive
c880: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72  BubbleDiagram cr
c890: 65 61 74 65 2d 74 72 69 67 67 65 72 2d 73 74 6d  eate-trigger-stm
c8a0: 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  t.</tcl>..<p>^Th
c8b0: 65 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  e CREATE TRIGGER
c8c0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73   statement is us
c8d0: 65 64 20 74 6f 20 61 64 64 20 74 72 69 67 67 65  ed to add trigge
c8e0: 72 73 20 74 6f 20 74 68 65 20 0a 64 61 74 61 62  rs to the .datab
c8f0: 61 73 65 20 73 63 68 65 6d 61 2e 20 5e 54 72 69  ase schema. ^Tri
c900: 67 67 65 72 73 20 61 72 65 20 64 61 74 61 62 61  ggers are databa
c910: 73 65 20 6f 70 65 72 61 74 69 6f 6e 73 20 0a 74  se operations .t
c920: 68 61 74 20 61 72 65 20 61 75 74 6f 6d 61 74 69  hat are automati
c930: 63 61 6c 6c 79 20 70 65 72 66 6f 72 6d 65 64 20  cally performed 
c940: 77 68 65 6e 20 61 20 73 70 65 63 69 66 69 65 64  when a specified
c950: 20 64 61 74 61 62 61 73 65 20 65 76 65 6e 74 0a   database event.
c960: 6f 63 63 75 72 73 2e 20 20 3c 2f 70 3e 0a 0a 3c  occurs.  </p>..<
c970: 70 3e 5e 41 20 74 72 69 67 67 65 72 20 6d 61 79  p>^A trigger may
c980: 20 62 65 20 73 70 65 63 69 66 69 65 64 20 74 6f   be specified to
c990: 20 66 69 72 65 20 77 68 65 6e 65 76 65 72 20 61   fire whenever a
c9a0: 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45   [DELETE], [INSE
c9b0: 52 54 5d 2c 0a 6f 72 20 5b 55 50 44 41 54 45 5d  RT],.or [UPDATE]
c9c0: 20 6f 66 20 61 0a 70 61 72 74 69 63 75 6c 61 72   of a.particular
c9d0: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
c9e0: 6f 63 63 75 72 73 2c 20 6f 72 20 77 68 65 6e 65  occurs, or whene
c9f0: 76 65 72 20 61 6e 20 5b 55 50 44 41 54 45 5d 20  ver an [UPDATE] 
ca00: 6f 63 63 75 72 73 20 6f 6e 0a 6f 6e 20 6f 6e 65  occurs on.on one
ca10: 20 6f 72 20 6d 6f 72 65 20 73 70 65 63 69 66 69   or more specifi
ca20: 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 20  ed columns of a 
ca30: 74 61 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  table.</p>..<p>^
ca40: 41 74 20 74 68 69 73 20 74 69 6d 65 20 53 51 4c  At this time SQL
ca50: 69 74 65 20 73 75 70 70 6f 72 74 73 20 6f 6e 6c  ite supports onl
ca60: 79 20 46 4f 52 20 45 41 43 48 20 52 4f 57 20 74  y FOR EACH ROW t
ca70: 72 69 67 67 65 72 73 2c 20 6e 6f 74 20 46 4f 52  riggers, not FOR
ca80: 20 45 41 43 48 0a 53 54 41 54 45 4d 45 4e 54 20   EACH.STATEMENT 
ca90: 74 72 69 67 67 65 72 73 2e 20 5e 48 65 6e 63 65  triggers. ^Hence
caa0: 20 65 78 70 6c 69 63 69 74 6c 79 20 73 70 65 63   explicitly spec
cab0: 69 66 79 69 6e 67 20 46 4f 52 20 45 41 43 48 20  ifying FOR EACH 
cac0: 52 4f 57 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e  ROW is optional.
cad0: 0a 5e 46 4f 52 20 45 41 43 48 20 52 4f 57 20 69  .^FOR EACH ROW i
cae0: 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68 65 20  mplies that the 
caf0: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73  SQL statements s
cb00: 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 20  pecified in the 
cb10: 74 72 69 67 67 65 72 0a 6d 61 79 20 62 65 20 65  trigger.may be e
cb20: 78 65 63 75 74 65 64 20 28 64 65 70 65 6e 64 69  xecuted (dependi
cb30: 6e 67 20 6f 6e 20 74 68 65 20 57 48 45 4e 20 63  ng on the WHEN c
cb40: 6c 61 75 73 65 29 20 66 6f 72 20 65 61 63 68 20  lause) for each 
cb50: 64 61 74 61 62 61 73 65 20 72 6f 77 20 62 65 69  database row bei
cb60: 6e 67 0a 69 6e 73 65 72 74 65 64 2c 20 75 70 64  ng.inserted, upd
cb70: 61 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64 20  ated or deleted 
cb80: 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  by the statement
cb90: 20 63 61 75 73 69 6e 67 20 74 68 65 20 74 72 69   causing the tri
cba0: 67 67 65 72 20 74 6f 20 66 69 72 65 2e 3c 2f 70  gger to fire.</p
cbb0: 3e 0a 0a 3c 70 3e 5e 28 42 6f 74 68 20 74 68 65  >..<p>^(Both the
cbc0: 20 57 48 45 4e 20 63 6c 61 75 73 65 20 61 6e 64   WHEN clause and
cbd0: 20 74 68 65 20 74 72 69 67 67 65 72 20 61 63 74   the trigger act
cbe0: 69 6f 6e 73 20 6d 61 79 20 61 63 63 65 73 73 20  ions may access 
cbf0: 65 6c 65 6d 65 6e 74 73 20 6f 66 20 0a 74 68 65  elements of .the
cc00: 20 72 6f 77 20 62 65 69 6e 67 20 69 6e 73 65 72   row being inser
cc10: 74 65 64 2c 20 64 65 6c 65 74 65 64 20 6f 72 20  ted, deleted or 
cc20: 75 70 64 61 74 65 64 20 75 73 69 6e 67 20 72 65  updated using re
cc30: 66 65 72 65 6e 63 65 73 20 6f 66 20 74 68 65 20  ferences of the 
cc40: 66 6f 72 6d 20 0a 22 4e 45 57 2e 3c 69 3e 63 6f  form ."NEW.<i>co
cc50: 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 20 61  lumn-name</i>" a
cc60: 6e 64 20 22 4f 4c 44 2e 3c 69 3e 63 6f 6c 75 6d  nd "OLD.<i>colum
cc70: 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 2c 20 77 68 65  n-name</i>", whe
cc80: 72 65 0a 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d  re.<i>column-nam
cc90: 65 3c 2f 69 3e 20 69 73 20 74 68 65 20 6e 61 6d  e</i> is the nam
cca0: 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 66 72  e of a column fr
ccb0: 6f 6d 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  om the table tha
ccc0: 74 20 74 68 65 20 74 72 69 67 67 65 72 0a 69 73  t the trigger.is
ccd0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
cce0: 2e 29 5e 20 5e 28 4f 4c 44 20 61 6e 64 20 4e 45  .)^ ^(OLD and NE
ccf0: 57 20 72 65 66 65 72 65 6e 63 65 73 20 6d 61 79  W references may
cd00: 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 69 6e   only be used in
cd10: 20 74 72 69 67 67 65 72 73 20 6f 6e 0a 65 76 65   triggers on.eve
cd20: 6e 74 73 20 66 6f 72 20 77 68 69 63 68 20 74 68  nts for which th
cd30: 65 79 20 61 72 65 20 72 65 6c 65 76 61 6e 74 2c  ey are relevant,
cd40: 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e   as follows:</p>
cd50: 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  ..<table border=
cd60: 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30  0 cellpadding=10
cd70: 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67  >.<tr>.<td valig
cd80: 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72  n="top" align="r
cd90: 69 67 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e  ight" width=120>
cda0: 3c 69 3e 49 4e 53 45 52 54 3c 2f 69 3e 3c 2f 74  <i>INSERT</i></t
cdb0: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  d>.<td valign="t
cdc0: 6f 70 22 3e 4e 45 57 20 72 65 66 65 72 65 6e 63  op">NEW referenc
cdd0: 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64  es are valid</td
cde0: 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64  >.</tr>.<tr>.<td
cdf0: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
ce00: 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74  ign="right" widt
ce10: 68 3d 31 32 30 3e 3c 69 3e 55 50 44 41 54 45 3c  h=120><i>UPDATE<
ce20: 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  /i></td>.<td val
ce30: 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57 20 61 6e  ign="top">NEW an
ce40: 64 20 4f 4c 44 20 72 65 66 65 72 65 6e 63 65 73  d OLD references
ce50: 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a   are valid</td>.
ce60: 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76  </tr>.<tr>.<td v
ce70: 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
ce80: 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74 68 3d  n="right" width=
ce90: 31 32 30 3e 3c 69 3e 44 45 4c 45 54 45 3c 2f 69  120><i>DELETE</i
cea0: 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  ></td>.<td valig
ceb0: 6e 3d 22 74 6f 70 22 3e 4f 4c 44 20 72 65 66 65  n="top">OLD refe
cec0: 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c 69 64  rences are valid
ced0: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61  </td>.</tr>.</ta
cee0: 62 6c 65 3e 0a 3c 2f 70 3e 29 5e 0a 0a 3c 70 3e  ble>.</p>)^..<p>
cef0: 5e 49 66 20 61 20 57 48 45 4e 20 63 6c 61 75 73  ^If a WHEN claus
cf00: 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20 74  e is supplied, t
cf10: 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
cf20: 73 20 73 70 65 63 69 66 69 65 64 0a 61 72 65 20  s specified.are 
cf30: 6f 6e 6c 79 20 65 78 65 63 75 74 65 64 20 69 66  only executed if
cf40: 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   the WHEN clause
cf50: 20 69 73 20 74 72 75 65 2e 0a 5e 49 66 20 6e 6f   is true..^If no
cf60: 20 57 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20   WHEN clause is 
cf70: 73 75 70 70 6c 69 65 64 2c 20 74 68 65 20 53 51  supplied, the SQ
cf80: 4c 20 73 74 61 74 65 6d 65 6e 74 73 0a 61 72 65  L statements.are
cf90: 20 65 78 65 63 75 74 65 64 20 65 76 65 72 79 20   executed every 
cfa0: 74 69 6d 65 20 74 68 65 20 74 72 69 67 67 65 72  time the trigger
cfb0: 20 66 69 72 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e   fires.</p>..<p>
cfc0: 5e 54 68 65 20 42 45 46 4f 52 45 20 6f 72 20 41  ^The BEFORE or A
cfd0: 46 54 45 52 20 6b 65 79 77 6f 72 64 20 64 65 74  FTER keyword det
cfe0: 65 72 6d 69 6e 65 73 20 77 68 65 6e 20 74 68 65  ermines when the
cff0: 20 74 72 69 67 67 65 72 20 61 63 74 69 6f 6e 73   trigger actions
d000: 0a 77 69 6c 6c 20 62 65 20 65 78 65 63 75 74 65  .will be execute
d010: 64 20 72 65 6c 61 74 69 76 65 20 74 6f 20 74 68  d relative to th
d020: 65 20 69 6e 73 65 72 74 69 6f 6e 2c 20 6d 6f 64  e insertion, mod
d030: 69 66 69 63 61 74 69 6f 6e 20 6f 72 20 72 65 6d  ification or rem
d040: 6f 76 61 6c 20 6f 66 20 74 68 65 0a 61 73 73 6f  oval of the.asso
d050: 63 69 61 74 65 64 20 72 6f 77 2e 3c 2f 70 3e 0a  ciated row.</p>.
d060: 0a 3c 70 3e 5e 41 6e 20 5b 4f 4e 20 43 4f 4e 46  .<p>^An [ON CONF
d070: 4c 49 43 54 5d 20 63 6c 61 75 73 65 20 6d 61 79  LICT] clause may
d080: 20 62 65 20 73 70 65 63 69 66 69 65 64 20 61 73   be specified as
d090: 20 70 61 72 74 20 6f 66 20 61 6e 20 5b 55 50 44   part of an [UPD
d0a0: 41 54 45 5d 20 6f 72 20 5b 49 4e 53 45 52 54 5d  ATE] or [INSERT]
d0b0: 0a 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 74  .action within t
d0c0: 68 65 20 62 6f 64 79 20 6f 66 20 74 68 65 20 74  he body of the t
d0d0: 72 69 67 67 65 72 2e 0a 5e 48 6f 77 65 76 65 72  rigger..^However
d0e0: 20 69 66 20 61 6e 20 5b 4f 4e 20 43 4f 4e 46 4c   if an [ON CONFL
d0f0: 49 43 54 5d 20 63 6c 61 75 73 65 20 69 73 20 73  ICT] clause is s
d100: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
d110: 20 6f 66 20 0a 74 68 65 20 73 74 61 74 65 6d 65   of .the stateme
d120: 6e 74 20 63 61 75 73 69 6e 67 20 74 68 65 20 74  nt causing the t
d130: 72 69 67 67 65 72 20 74 6f 20 66 69 72 65 2c 20  rigger to fire, 
d140: 74 68 65 6e 20 63 6f 6e 66 6c 69 63 74 20 68 61  then conflict ha
d150: 6e 64 6c 69 6e 67 0a 70 6f 6c 69 63 79 20 6f 66  ndling.policy of
d160: 20 74 68 65 20 6f 75 74 65 72 20 73 74 61 74 65   the outer state
d170: 6d 65 6e 74 20 69 73 20 75 73 65 64 20 69 6e 73  ment is used ins
d180: 74 65 61 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  tead.</p>..<p>^T
d190: 72 69 67 67 65 72 73 20 61 72 65 20 61 75 74 6f  riggers are auto
d1a0: 6d 61 74 69 63 61 6c 6c 79 20 5b 44 52 4f 50 20  matically [DROP 
d1b0: 54 52 49 47 47 45 52 20 7c 20 64 72 6f 70 70 65  TRIGGER | droppe
d1c0: 64 5d 0a 77 68 65 6e 20 74 68 65 20 74 61 62 6c  d].when the tabl
d1d0: 65 20 74 68 61 74 20 74 68 65 79 20 61 72 65 20  e that they are 
d1e0: 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68  .associated with
d1f0: 20 28 74 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e   (the <i>table-n
d200: 61 6d 65 3c 2f 69 3e 20 74 61 62 6c 65 29 20 69  ame</i> table) i
d210: 73 20 0a 5b 44 52 4f 50 20 54 41 42 4c 45 20 7c  s .[DROP TABLE |
d220: 20 64 72 6f 70 70 65 64 5d 2e 20 20 5e 48 6f 77   dropped].  ^How
d230: 65 76 65 72 20 69 66 20 74 68 65 20 74 72 69 67  ever if the trig
d240: 67 65 72 20 61 63 74 69 6f 6e 73 20 72 65 66 65  ger actions refe
d250: 72 65 6e 63 65 0a 6f 74 68 65 72 20 74 61 62 6c  rence.other tabl
d260: 65 73 2c 20 74 68 65 20 74 72 69 67 67 65 72 20  es, the trigger 
d270: 69 73 20 6e 6f 74 20 64 72 6f 70 70 65 64 20 6f  is not dropped o
d280: 72 20 6d 6f 64 69 66 69 65 64 20 69 66 20 74 68  r modified if th
d290: 6f 73 65 20 6f 74 68 65 72 0a 74 61 62 6c 65 73  ose other.tables
d2a0: 20 61 72 65 20 5b 44 52 4f 50 20 54 41 42 4c 45   are [DROP TABLE
d2b0: 20 7c 20 64 72 6f 70 70 65 64 5d 20 6f 72 20 5b   | dropped] or [
d2c0: 41 4c 54 45 52 20 54 41 42 4c 45 20 7c 20 6d 6f  ALTER TABLE | mo
d2d0: 64 69 66 69 65 64 5d 2e 3c 2f 70 3e 0a 0a 3c 70  dified].</p>..<p
d2e0: 3e 5e 54 72 69 67 67 65 72 73 20 61 72 65 20 72  >^Triggers are r
d2f0: 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 74 68 65  emoved using the
d300: 20 5b 44 52 4f 50 20 54 52 49 47 47 45 52 5d 20   [DROP TRIGGER] 
d310: 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a  statement.</p>..
d320: 3c 68 33 3e 53 79 6e 74 61 78 20 52 65 73 74 72  <h3>Syntax Restr
d330: 69 63 74 69 6f 6e 73 20 4f 6e 20 55 50 44 41 54  ictions On UPDAT
d340: 45 2c 20 44 45 4c 45 54 45 2c 20 61 6e 64 20 49  E, DELETE, and I
d350: 4e 53 45 52 54 20 53 74 61 74 65 6d 65 6e 74 73  NSERT Statements
d360: 20 57 69 74 68 69 6e 0a 20 20 20 20 54 72 69 67   Within.    Trig
d370: 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54  gers</h3>..<p>^T
d380: 68 65 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45  he [UPDATE], [DE
d390: 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e 53 45  LETE], and [INSE
d3a0: 52 54 5d 0a 73 74 61 74 65 6d 65 6e 74 73 20 77  RT].statements w
d3b0: 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 64  ithin triggers d
d3c0: 6f 20 6e 6f 74 20 73 75 70 70 6f 72 74 0a 74 68  o not support.th
d3d0: 65 20 66 75 6c 6c 20 73 79 6e 74 61 78 20 66 6f  e full syntax fo
d3e0: 72 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c  r [UPDATE], [DEL
d3f0: 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e 53 45 52  ETE], and [INSER
d400: 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20  T] statements.  
d410: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 72 65  The following.re
d420: 73 74 72 69 63 74 69 6f 6e 73 20 61 70 70 6c 79  strictions apply
d430: 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  :</p>..<ul>.<li>
d440: 3c 70 3e 0a 20 20 5e 28 54 68 65 20 6e 61 6d 65  <p>.  ^(The name
d450: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
d460: 20 62 65 20 6d 6f 64 69 66 69 65 64 20 69 6e 20   be modified in 
d470: 61 6e 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45  an [UPDATE], [DE
d480: 4c 45 54 45 5d 2c 20 6f 72 20 5b 49 4e 53 45 52  LETE], or [INSER
d490: 54 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74 20 6d  T].  statement m
d4a0: 75 73 74 20 62 65 20 61 6e 20 75 6e 71 75 61 6c  ust be an unqual
d4b0: 69 66 69 65 64 20 74 61 62 6c 65 20 6e 61 6d 65  ified table name
d4c0: 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
d4d0: 73 2c 20 6f 6e 65 20 6d 75 73 74 0a 20 20 75 73  s, one must.  us
d4e0: 65 20 6a 75 73 74 20 22 3c 69 3e 74 61 62 6c 65  e just "<i>table
d4f0: 6e 61 6d 65 3c 2f 69 3e 22 20 6e 6f 74 20 22 3c  name</i>" not "<
d500: 69 3e 64 61 74 61 62 61 73 65 3c 2f 69 3e 3c 62  i>database</i><b
d510: 3e 2e 3c 2f 62 3e 3c 69 3e 74 61 62 6c 65 6e 61  >.</b><i>tablena
d520: 6d 65 3c 2f 69 3e 22 0a 20 20 77 68 65 6e 20 73  me</i>".  when s
d530: 70 65 63 69 66 79 69 6e 67 20 74 68 65 20 74 61  pecifying the ta
d540: 62 6c 65 2e 29 5e 20 20 5e 54 68 65 20 74 61 62  ble.)^  ^The tab
d550: 6c 65 20 74 6f 20 62 65 20 6d 6f 64 69 66 69 65  le to be modifie
d560: 64 20 6d 75 73 74 20 65 78 69 73 74 20 69 6e 20  d must exist in 
d570: 74 68 65 0a 20 20 73 61 6d 65 20 64 61 74 61 62  the.  same datab
d580: 61 73 65 20 61 73 20 74 68 65 20 74 61 62 6c 65  ase as the table
d590: 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69 63   or view to whic
d5a0: 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73  h the trigger is
d5b0: 20 61 74 74 61 63 68 65 64 2e 0a 20 20 3c 2f 70   attached..  </p
d5c0: 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ></li>..<li><p>.
d5d0: 20 20 5e 54 68 65 20 22 49 4e 53 45 52 54 20 49    ^The "INSERT I
d5e0: 4e 54 4f 20 3c 69 3e 74 61 62 6c 65 3c 2f 69 3e  NTO <i>table</i>
d5f0: 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 22   DEFAULT VALUES"
d600: 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 5b 49 4e   form of the [IN
d610: 53 45 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 0a  SERT] statement.
d620: 20 20 69 73 20 6e 6f 74 20 73 75 70 70 6f 72 74    is not support
d630: 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a  ed..  </p></li>.
d640: 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68 65 20  .<li><p>.  ^The 
d650: 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64 20 4e  INDEXED BY and N
d660: 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73  OT INDEXED claus
d670: 65 73 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f  es are not suppo
d680: 72 74 65 64 20 66 6f 72 20 5b 55 50 44 41 54 45  rted for [UPDATE
d690: 5d 20 61 6e 64 0a 20 20 5b 44 45 4c 45 54 45 5d  ] and.  [DELETE]
d6a0: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 3c   statements..  <
d6b0: 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
d6c0: 3e 0a 20 20 5e 28 54 68 65 20 4f 52 44 45 52 20  >.  ^(The ORDER 
d6d0: 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61  BY and LIMIT cla
d6e0: 75 73 65 73 20 6f 6e 20 5b 55 50 44 41 54 45 5d  uses on [UPDATE]
d6f0: 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20 73 74   and [DELETE] st
d700: 61 74 65 6d 65 6e 74 73 20 61 72 65 20 6e 6f 74  atements are not
d710: 0a 20 20 73 75 70 70 6f 72 74 65 64 2e 20 20 4f  .  supported.  O
d720: 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49  RDER BY and LIMI
d730: 54 20 61 72 65 20 6e 6f 74 20 6e 6f 72 6d 61 6c  T are not normal
d740: 6c 79 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72  ly supported for
d750: 20 5b 55 50 44 41 54 45 5d 20 6f 72 0a 20 20 5b   [UPDATE] or.  [
d760: 44 45 4c 45 54 45 5d 20 69 6e 20 61 6e 79 20 63  DELETE] in any c
d770: 6f 6e 74 65 78 74 20 62 75 74 20 63 61 6e 20 62  ontext but can b
d780: 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 6f  e enabled for to
d790: 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d 65 6e  p-level statemen
d7a0: 74 73 0a 20 20 75 73 69 6e 67 20 74 68 65 20 5b  ts.  using the [
d7b0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50  SQLITE_ENABLE_UP
d7c0: 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49  DATE_DELETE_LIMI
d7d0: 54 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  T] compile-time 
d7e0: 6f 70 74 69 6f 6e 2e 20 20 48 6f 77 65 76 65 72  option.  However
d7f0: 2c 0a 20 20 74 68 61 74 20 63 6f 6d 70 69 6c 65  ,.  that compile
d800: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 6f 6e 6c  -time option onl
d810: 79 20 61 70 70 6c 69 65 73 20 74 6f 20 74 6f 70  y applies to top
d820: 2d 6c 65 76 65 6c 20 5b 55 50 44 41 54 45 5d 20  -level [UPDATE] 
d830: 61 6e 64 20 5b 44 45 4c 45 54 45 5d 0a 20 20 73  and [DELETE].  s
d840: 74 61 74 65 6d 65 6e 74 73 2c 20 6e 6f 74 20 5b  tatements, not [
d850: 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44 45 4c  UPDATE] and [DEL
d860: 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 20  ETE] statements 
d870: 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
d880: 29 5e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a  )^.  </p></li>..
d890: 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 5b 63 6f 6d 6d  <li><p>.  ^[comm
d8a0: 6f 6e 2d 74 61 62 6c 65 2d 65 78 70 72 65 73 73  on-table-express
d8b0: 69 6f 6e 7c 43 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ion|Common table
d8c0: 20 65 78 70 72 65 73 73 69 6f 6e 5d 20 61 72 65   expression] are
d8d0: 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 66   not supported f
d8e0: 6f 72 0a 20 20 73 74 61 74 65 6d 65 6e 74 73 20  or.  statements 
d8f0: 69 6e 73 69 64 65 20 6f 66 20 74 72 69 67 67 65  inside of trigge
d900: 72 73 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a  rs..  </p></li>.
d910: 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  </ul>..<tcl>hd_f
d920: 72 61 67 6d 65 6e 74 20 69 6e 73 74 65 61 64 5f  ragment instead_
d930: 6f 66 5f 74 72 69 67 67 65 72 20 7b 49 4e 53 54  of_trigger {INST
d940: 45 41 44 20 4f 46 7d 20 7b 49 4e 53 54 45 41 44  EAD OF} {INSTEAD
d950: 20 4f 46 20 74 72 69 67 67 65 72 7d 3c 2f 74 63   OF trigger}</tc
d960: 6c 3e 0a 3c 68 33 3e 49 4e 53 54 45 41 44 20 4f  l>.<h3>INSTEAD O
d970: 46 20 74 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a  F triggers</h3>.
d980: 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 6d 61  .<p>^Triggers ma
d990: 79 20 62 65 20 63 72 65 61 74 65 64 20 6f 6e 20  y be created on 
d9a0: 5b 76 69 65 77 73 5d 2c 20 61 73 20 77 65 6c 6c  [views], as well
d9b0: 20 61 73 20 6f 72 64 69 6e 61 72 79 20 74 61 62   as ordinary tab
d9c0: 6c 65 73 2c 20 62 79 0a 73 70 65 63 69 66 79 69  les, by.specifyi
d9d0: 6e 67 20 49 4e 53 54 45 41 44 20 4f 46 20 69 6e  ng INSTEAD OF in
d9e0: 20 74 68 65 20 43 52 45 41 54 45 20 54 52 49 47   the CREATE TRIG
d9f0: 47 45 52 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a  GER statement. .
da00: 5e 49 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ^If one or more 
da10: 4f 4e 20 49 4e 53 45 52 54 2c 20 4f 4e 20 44 45  ON INSERT, ON DE
da20: 4c 45 54 45 0a 6f 72 20 4f 4e 20 55 50 44 41 54  LETE.or ON UPDAT
da30: 45 20 74 72 69 67 67 65 72 73 20 61 72 65 20 64  E triggers are d
da40: 65 66 69 6e 65 64 20 6f 6e 20 61 20 76 69 65 77  efined on a view
da50: 2c 20 74 68 65 6e 20 69 74 20 69 73 20 6e 6f 74  , then it is not
da60: 20 61 6e 0a 65 72 72 6f 72 20 74 6f 20 65 78 65   an.error to exe
da70: 63 75 74 65 20 61 6e 20 49 4e 53 45 52 54 2c 20  cute an INSERT, 
da80: 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
da90: 20 73 74 61 74 65 6d 65 6e 74 20 6f 6e 20 74 68   statement on th
daa0: 65 20 76 69 65 77 2c 20 0a 72 65 73 70 65 63 74  e view, .respect
dab0: 69 76 65 6c 79 2e 20 20 5e 49 6e 73 74 65 61 64  ively.  ^Instead
dac0: 2c 0a 65 78 65 63 75 74 69 6e 67 20 61 6e 20 49  ,.executing an I
dad0: 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f 72  NSERT, DELETE or
dae0: 20 55 50 44 41 54 45 20 6f 6e 20 74 68 65 20 76   UPDATE on the v
daf0: 69 65 77 20 63 61 75 73 65 73 20 74 68 65 20 61  iew causes the a
db00: 73 73 6f 63 69 61 74 65 64 0a 74 72 69 67 67 65  ssociated.trigge
db10: 72 73 20 74 6f 20 66 69 72 65 2e 20 5e 54 68 65  rs to fire. ^The
db20: 20 72 65 61 6c 20 74 61 62 6c 65 73 20 75 6e 64   real tables und
db30: 65 72 6c 79 69 6e 67 20 74 68 65 20 76 69 65 77  erlying the view
db40: 20 61 72 65 20 6e 6f 74 20 6d 6f 64 69 66 69 65   are not modifie
db50: 64 0a 28 65 78 63 65 70 74 20 70 6f 73 73 69 62  d.(except possib
db60: 6c 79 20 65 78 70 6c 69 63 69 74 6c 79 2c 20 62  ly explicitly, b
db70: 79 20 61 20 74 72 69 67 67 65 72 20 70 72 6f 67  y a trigger prog
db80: 72 61 6d 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e  ram).</p>..<p>^N
db90: 6f 74 65 20 74 68 61 74 20 74 68 65 20 5b 73 71  ote that the [sq
dba0: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d  lite3_changes()]
dbb0: 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 74 6f   and [sqlite3_to
dbc0: 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20 69  tal_changes()] i
dbd0: 6e 74 65 72 66 61 63 65 73 0a 64 6f 20 6e 6f 74  nterfaces.do not
dbe0: 20 63 6f 75 6e 74 20 49 4e 53 54 45 41 44 20 4f   count INSTEAD O
dbf0: 46 20 74 72 69 67 67 65 72 20 66 69 72 69 6e 67  F trigger firing
dc00: 73 2c 20 62 75 74 20 74 68 65 0a 5b 63 6f 75 6e  s, but the.[coun
dc10: 74 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d 61  t_changes pragma
dc20: 5d 20 64 6f 65 73 20 63 6f 75 6e 74 20 49 4e 53  ] does count INS
dc30: 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 20  TEAD OF trigger 
dc40: 66 69 72 69 6e 67 2e 3c 2f 70 3e 0a 0a 3c 68 33  firing.</p>..<h3
dc50: 3e 53 6f 6d 65 20 45 78 61 6d 70 6c 65 20 54 72  >Some Example Tr
dc60: 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  iggers</h3>..<p>
dc70: 5e 28 41 73 73 75 6d 69 6e 67 20 74 68 61 74 20  ^(Assuming that 
dc80: 63 75 73 74 6f 6d 65 72 20 72 65 63 6f 72 64 73  customer records
dc90: 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74   are stored in t
dca0: 68 65 20 22 63 75 73 74 6f 6d 65 72 73 22 20 74  he "customers" t
dcb0: 61 62 6c 65 2c 20 61 6e 64 0a 74 68 61 74 20 6f  able, and.that o
dcc0: 72 64 65 72 20 72 65 63 6f 72 64 73 20 61 72 65  rder records are
dcd0: 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 22   stored in the "
dce0: 6f 72 64 65 72 73 22 20 74 61 62 6c 65 2c 20 74  orders" table, t
dcf0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 55 50 44  he following.UPD
dd00: 41 54 45 20 74 72 69 67 67 65 72 0a 65 6e 73 75  ATE trigger.ensu
dd10: 72 65 73 20 74 68 61 74 20 61 6c 6c 20 61 73 73  res that all ass
dd20: 6f 63 69 61 74 65 64 20 6f 72 64 65 72 73 20 61  ociated orders a
dd30: 72 65 20 72 65 64 69 72 65 63 74 65 64 20 77 68  re redirected wh
dd40: 65 6e 20 61 20 63 75 73 74 6f 6d 65 72 20 63 68  en a customer ch
dd50: 61 6e 67 65 73 0a 68 69 73 20 6f 72 20 68 65 72  anges.his or her
dd60: 20 61 64 64 72 65 73 73 3a 3c 2f 70 3e 0a 0a 3c   address:</p>..<
dd70: 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 43 52  tcl>Example {.CR
dd80: 45 41 54 45 20 54 52 49 47 47 45 52 20 75 70 64  EATE TRIGGER upd
dd90: 61 74 65 5f 63 75 73 74 6f 6d 65 72 5f 61 64 64  ate_customer_add
dda0: 72 65 73 73 20 55 50 44 41 54 45 20 4f 46 20 61  ress UPDATE OF a
ddb0: 64 64 72 65 73 73 20 4f 4e 20 63 75 73 74 6f 6d  ddress ON custom
ddc0: 65 72 73 20 0a 20 20 42 45 47 49 4e 0a 20 20 20  ers .  BEGIN.   
ddd0: 20 55 50 44 41 54 45 20 6f 72 64 65 72 73 20 53   UPDATE orders S
dde0: 45 54 20 61 64 64 72 65 73 73 20 3d 20 6e 65 77  ET address = new
ddf0: 2e 61 64 64 72 65 73 73 20 57 48 45 52 45 20 63  .address WHERE c
de00: 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20 6f  ustomer_name = o
de10: 6c 64 2e 6e 61 6d 65 3b 0a 20 20 45 4e 44 3b 0a  ld.name;.  END;.
de20: 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 69 74 68  }</tcl>..<p>With
de30: 20 74 68 69 73 20 74 72 69 67 67 65 72 20 69 6e   this trigger in
de40: 73 74 61 6c 6c 65 64 2c 20 65 78 65 63 75 74 69  stalled, executi
de50: 6e 67 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  ng the statement
de60: 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d  :</p>..<tcl>Exam
de70: 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 63 75 73  ple {.UPDATE cus
de80: 74 6f 6d 65 72 73 20 53 45 54 20 61 64 64 72 65  tomers SET addre
de90: 73 73 20 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e  ss = '1 Main St.
dea0: 27 20 57 48 45 52 45 20 6e 61 6d 65 20 3d 20 27  ' WHERE name = '
deb0: 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f  Jack Jones';.}</
dec0: 74 63 6c 3e 0a 0a 3c 70 3e 63 61 75 73 65 73 20  tcl>..<p>causes 
ded0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 6f  the following to
dee0: 20 62 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   be automaticall
def0: 79 20 65 78 65 63 75 74 65 64 3a 3c 2f 70 3e 0a  y executed:</p>.
df00: 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a  .<tcl>Example {.
df10: 55 50 44 41 54 45 20 6f 72 64 65 72 73 20 53 45  UPDATE orders SE
df20: 54 20 61 64 64 72 65 73 73 20 3d 20 27 31 20 4d  T address = '1 M
df30: 61 69 6e 20 53 74 2e 27 20 57 48 45 52 45 20 63  ain St.' WHERE c
df40: 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20 27  ustomer_name = '
df50: 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f  Jack Jones';.}</
df60: 74 63 6c 3e 29 5e 0a 0a 3c 70 3e 46 6f 72 20 61  tcl>)^..<p>For a
df70: 6e 20 65 78 61 6d 70 6c 65 20 6f 66 20 61 6e 20  n example of an 
df80: 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67  INSTEAD OF trigg
df90: 65 72 2c 20 63 6f 6e 73 69 64 65 72 20 74 68 65  er, consider the
dfa0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 63 68 65 6d   following schem
dfb0: 61 3a 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65  a:..<tcl>Example
dfc0: 20 7b 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20   {.CREATE TABLE 
dfd0: 63 75 73 74 6f 6d 65 72 28 0a 20 20 63 75 73 74  customer(.  cust
dfe0: 5f 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d  _id INTEGER PRIM
dff0: 41 52 59 20 4b 45 59 2c 0a 20 20 63 75 73 74 5f  ARY KEY,.  cust_
e000: 6e 61 6d 65 20 54 45 58 54 2c 0a 20 20 63 75 73  name TEXT,.  cus
e010: 74 5f 61 64 64 72 20 54 45 58 54 0a 29 3b 0a 43  t_addr TEXT.);.C
e020: 52 45 41 54 45 20 56 49 45 57 20 63 75 73 74 6f  REATE VIEW custo
e030: 6d 65 72 5f 61 64 64 72 65 73 73 20 41 53 0a 20  mer_address AS. 
e040: 20 20 53 45 4c 45 43 54 20 63 75 73 74 5f 69 64    SELECT cust_id
e050: 2c 20 63 75 73 74 5f 61 64 64 72 20 46 52 4f 4d  , cust_addr FROM
e060: 20 63 75 73 74 6f 6d 65 72 3b 0a 43 52 45 41 54   customer;.CREAT
e070: 45 20 54 52 49 47 47 45 52 20 63 75 73 74 5f 61  E TRIGGER cust_a
e080: 64 64 72 5f 63 68 6e 67 0a 49 4e 53 54 45 41 44  ddr_chng.INSTEAD
e090: 20 4f 46 20 55 50 44 41 54 45 20 4f 46 20 63 75   OF UPDATE OF cu
e0a0: 73 74 5f 61 64 64 72 20 4f 4e 20 63 75 73 74 6f  st_addr ON custo
e0b0: 6d 65 72 5f 61 64 64 72 65 73 73 0a 42 45 47 49  mer_address.BEGI
e0c0: 4e 0a 20 20 55 50 44 41 54 45 20 63 75 73 74 6f  N.  UPDATE custo
e0d0: 6d 65 72 20 53 45 54 20 63 75 73 74 5f 61 64 64  mer SET cust_add
e0e0: 72 3d 4e 45 57 2e 63 75 73 74 5f 61 64 64 72 0a  r=NEW.cust_addr.
e0f0: 20 20 20 57 48 45 52 45 20 63 75 73 74 5f 69 64     WHERE cust_id
e100: 3d 4e 45 57 2e 63 75 73 74 5f 69 64 3b 0a 45 4e  =NEW.cust_id;.EN
e110: 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57  D;.}</tcl>..<p>W
e120: 69 74 68 20 74 68 65 20 73 63 68 65 6d 61 20 61  ith the schema a
e130: 62 6f 76 65 2c 20 61 20 73 74 61 74 65 6d 65 6e  bove, a statemen
e140: 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 3a 3c 2f  t of the form:</
e150: 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65  p>..<tcl>Example
e160: 20 7b 0a 55 50 44 41 54 45 20 63 75 73 74 6f 6d   {.UPDATE custom
e170: 65 72 5f 61 64 64 72 65 73 73 20 53 45 54 20 63  er_address SET c
e180: 75 73 74 5f 61 64 64 72 3d 24 6e 65 77 5f 61 64  ust_addr=$new_ad
e190: 64 72 65 73 73 20 57 48 45 52 45 20 63 75 73 74  dress WHERE cust
e1a0: 5f 69 64 3d 24 63 75 73 74 5f 69 64 3b 0a 7d 3c  _id=$cust_id;.}<
e1b0: 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 61 75 73 65 73  /tcl>..<p>Causes
e1c0: 20 74 68 65 20 63 75 73 74 6f 6d 65 72 2e 63 75   the customer.cu
e1d0: 73 74 5f 61 64 64 72 20 66 69 65 6c 64 20 74 6f  st_addr field to
e1e0: 20 62 65 20 75 70 64 61 74 65 64 20 66 6f 72 20   be updated for 
e1f0: 61 20 73 70 65 63 69 66 69 63 0a 63 75 73 74 6f  a specific.custo
e200: 6d 65 72 20 65 6e 74 72 79 20 74 68 61 74 20 68  mer entry that h
e210: 61 73 20 63 75 73 74 6f 6d 65 72 2e 63 75 73 74  as customer.cust
e220: 5f 69 64 20 65 71 75 61 6c 20 74 6f 20 74 68 65  _id equal to the
e230: 20 24 63 75 73 74 5f 69 64 20 70 61 72 61 6d 65   $cust_id parame
e240: 74 65 72 2e 0a 4e 6f 74 65 20 68 6f 77 20 74 68  ter..Note how th
e250: 65 20 76 61 6c 75 65 73 20 61 73 73 69 67 6e 65  e values assigne
e260: 64 20 74 6f 20 74 68 65 20 76 69 65 77 20 61 72  d to the view ar
e270: 65 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65  e made available
e280: 20 61 73 20 66 69 65 6c 64 0a 69 6e 20 74 68 65   as field.in the
e290: 20 73 70 65 63 69 61 6c 20 22 4e 45 57 22 20 74   special "NEW" t
e2a0: 61 62 6c 65 20 77 69 74 68 69 6e 20 74 68 65 20  able within the 
e2b0: 74 72 69 67 67 65 72 20 62 6f 64 79 2e 3c 2f 70  trigger body.</p
e2c0: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
e2d0: 65 6e 74 20 75 6e 64 65 66 5f 62 65 66 6f 72 65  ent undef_before
e2e0: 20 7b 75 6e 64 65 66 69 6e 65 64 20 42 45 46 4f   {undefined BEFO
e2f0: 52 45 20 74 72 69 67 67 65 72 20 62 65 68 61 76  RE trigger behav
e300: 69 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43  ior}</tcl>.<h3>C
e310: 61 75 74 69 6f 6e 73 20 4f 6e 20 54 68 65 20 55  autions On The U
e320: 73 65 20 4f 66 20 42 45 46 4f 52 45 20 74 72 69  se Of BEFORE tri
e330: 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 49  ggers</h3>..<p>I
e340: 66 20 61 20 42 45 46 4f 52 45 20 55 50 44 41 54  f a BEFORE UPDAT
e350: 45 20 6f 72 20 42 45 46 4f 52 45 20 44 45 4c 45  E or BEFORE DELE
e360: 54 45 20 74 72 69 67 67 65 72 20 6d 6f 64 69 66  TE trigger modif
e370: 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20 61  ies or deletes a
e380: 20 72 6f 77 0a 74 68 61 74 20 77 61 73 20 74 6f   row.that was to
e390: 20 68 61 76 65 20 62 65 65 6e 20 75 70 64 61 74   have been updat
e3a0: 65 64 20 6f 72 20 64 65 6c 65 74 65 64 2c 20 74  ed or deleted, t
e3b0: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
e3c0: 66 20 74 68 65 20 73 75 62 73 65 71 75 65 6e 74  f the subsequent
e3d0: 0a 75 70 64 61 74 65 20 6f 72 20 64 65 6c 65 74  .update or delet
e3e0: 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75  e operation is u
e3f0: 6e 64 65 66 69 6e 65 64 2e 20 20 46 75 72 74 68  ndefined.  Furth
e400: 65 72 6d 6f 72 65 2c 20 69 66 20 61 20 42 45 46  ermore, if a BEF
e410: 4f 52 45 20 74 72 69 67 67 65 72 0a 6d 6f 64 69  ORE trigger.modi
e420: 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20  fies or deletes 
e430: 61 20 72 6f 77 2c 20 74 68 65 6e 20 69 74 20 69  a row, then it i
e440: 73 20 75 6e 64 65 66 69 6e 65 64 20 77 68 65 74  s undefined whet
e450: 68 65 72 20 6f 72 20 6e 6f 74 20 41 46 54 45 52  her or not AFTER
e460: 20 74 72 69 67 67 65 72 73 0a 74 68 61 74 20 77   triggers.that w
e470: 6f 75 6c 64 20 68 61 76 65 20 6f 74 68 65 72 77  ould have otherw
e480: 69 73 65 20 72 75 6e 20 6f 6e 20 74 68 6f 73 65  ise run on those
e490: 20 72 6f 77 73 20 77 69 6c 6c 20 69 6e 20 66 61   rows will in fa
e4a0: 63 74 20 72 75 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70  ct run..</p>..<p
e4b0: 3e 54 68 65 20 76 61 6c 75 65 20 6f 66 20 4e 45  >The value of NE
e4c0: 57 2e 72 6f 77 69 64 20 69 73 20 75 6e 64 65 66  W.rowid is undef
e4d0: 69 6e 65 64 20 69 6e 20 61 20 42 45 46 4f 52 45  ined in a BEFORE
e4e0: 20 49 4e 53 45 52 54 20 74 72 69 67 67 65 72 20   INSERT trigger 
e4f0: 69 6e 20 77 68 69 63 68 0a 74 68 65 20 72 6f 77  in which.the row
e500: 69 64 20 69 73 20 6e 6f 74 20 65 78 70 6c 69 63  id is not explic
e510: 69 74 6c 79 20 73 65 74 20 74 6f 20 61 6e 20 69  itly set to an i
e520: 6e 74 65 67 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  nteger.</p>..<p>
e530: 42 65 63 61 75 73 65 20 6f 66 20 74 68 65 20 62  Because of the b
e540: 65 68 61 76 69 6f 72 73 20 64 65 73 63 72 69 62  ehaviors describ
e550: 65 64 20 61 62 6f 76 65 2c 20 70 72 6f 67 72 61  ed above, progra
e560: 6d 6d 65 72 73 20 61 72 65 20 65 6e 63 6f 75 72  mmers are encour
e570: 61 67 65 64 20 74 6f 0a 70 72 65 66 65 72 20 41  aged to.prefer A
e580: 46 54 45 52 20 74 72 69 67 67 65 72 73 20 6f 76  FTER triggers ov
e590: 65 72 20 42 45 46 4f 52 45 20 74 72 69 67 67 65  er BEFORE trigge
e5a0: 72 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  rs.</p>..<tcl>hd
e5b0: 5f 66 72 61 67 6d 65 6e 74 20 72 61 69 73 65 20  _fragment raise 
e5c0: 7b 52 41 49 53 45 20 66 75 6e 63 74 69 6f 6e 7d  {RAISE function}
e5d0: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 52  </tcl>.<h3>The R
e5e0: 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 3c  AISE() function<
e5f0: 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 73 70 65  /h3>..<p>^(A spe
e600: 63 69 61 6c 20 53 51 4c 20 66 75 6e 63 74 69 6f  cial SQL functio
e610: 6e 20 52 41 49 53 45 28 29 20 6d 61 79 20 62 65  n RAISE() may be
e620: 20 75 73 65 64 20 77 69 74 68 69 6e 20 61 20 74   used within a t
e630: 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2c 29  rigger-program,)
e640: 5e 0a 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f  ^.with the follo
e650: 77 69 6e 67 20 73 79 6e 74 61 78 3c 2f 70 3e 20  wing syntax</p> 
e660: 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61  ..<tcl>BubbleDia
e670: 67 72 61 6d 20 72 61 69 73 65 2d 66 75 6e 63 74  gram raise-funct
e680: 69 6f 6e 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 28  ion</tcl>..<p>^(
e690: 57 68 65 6e 20 6f 6e 65 20 6f 66 20 52 41 49 53  When one of RAIS
e6a0: 45 28 52 4f 4c 4c 42 41 43 4b 2c 2e 2e 2e 29 2c  E(ROLLBACK,...),
e6b0: 20 52 41 49 53 45 28 41 42 4f 52 54 2c 2e 2e 2e   RAISE(ABORT,...
e6c0: 29 20 6f 72 20 52 41 49 53 45 28 46 41 49 4c 2c  ) or RAISE(FAIL,
e6d0: 2e 2e 2e 29 0a 69 73 20 63 61 6c 6c 65 64 20 64  ...).is called d
e6e0: 75 72 69 6e 67 20 74 72 69 67 67 65 72 2d 70 72  uring trigger-pr
e6f0: 6f 67 72 61 6d 0a 65 78 65 63 75 74 69 6f 6e 2c  ogram.execution,
e700: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 5b   the specified [
e710: 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 70 72 6f  ON CONFLICT] pro
e720: 63 65 73 73 69 6e 67 20 69 73 20 70 65 72 66 6f  cessing is perfo
e730: 72 6d 65 64 0a 74 68 65 20 63 75 72 72 65 6e 74  rmed.the current
e740: 20 71 75 65 72 79 20 74 65 72 6d 69 6e 61 74 65   query terminate
e750: 73 2e 29 5e 0a 41 6e 20 65 72 72 6f 72 20 63 6f  s.)^.An error co
e760: 64 65 20 6f 66 20 5b 53 51 4c 49 54 45 5f 43 4f  de of [SQLITE_CO
e770: 4e 53 54 52 41 49 4e 54 5d 20 69 73 20 72 65 74  NSTRAINT] is ret
e780: 75 72 6e 65 64 20 74 6f 20 74 68 65 20 61 70 70  urned to the app
e790: 6c 69 63 61 74 69 6f 6e 2c 0a 61 6c 6f 6e 67 20  lication,.along 
e7a0: 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
e7b0: 65 64 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  ed error message
e7c0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20  .</p>..<p>^When 
e7d0: 52 41 49 53 45 28 49 47 4e 4f 52 45 29 20 69 73  RAISE(IGNORE) is
e7e0: 20 63 61 6c 6c 65 64 2c 20 74 68 65 20 72 65 6d   called, the rem
e7f0: 61 69 6e 64 65 72 20 6f 66 20 74 68 65 20 63 75  ainder of the cu
e800: 72 72 65 6e 74 20 74 72 69 67 67 65 72 20 70 72  rrent trigger pr
e810: 6f 67 72 61 6d 2c 0a 74 68 65 20 73 74 61 74 65  ogram,.the state
e820: 6d 65 6e 74 20 74 68 61 74 20 63 61 75 73 65 64  ment that caused
e830: 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
e840: 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20  gram to execute 
e850: 61 6e 64 20 61 6e 79 20 73 75 62 73 65 71 75 65  and any subseque
e860: 6e 74 0a 74 72 69 67 67 65 72 20 70 72 6f 67 72  nt.trigger progr
e870: 61 6d 73 20 74 68 61 74 20 77 6f 75 6c 64 20 68  ams that would h
e880: 61 76 65 20 62 65 65 6e 20 65 78 65 63 75 74 65  ave been execute
e890: 64 20 61 72 65 20 61 62 61 6e 64 6f 6e 65 64 2e  d are abandoned.
e8a0: 20 5e 4e 6f 20 64 61 74 61 62 61 73 65 0a 63 68   ^No database.ch
e8b0: 61 6e 67 65 73 20 61 72 65 20 72 6f 6c 6c 65 64  anges are rolled
e8c0: 20 62 61 63 6b 2e 20 20 5e 49 66 20 74 68 65 20   back.  ^If the 
e8d0: 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 63  statement that c
e8e0: 61 75 73 65 64 20 74 68 65 20 74 72 69 67 67 65  aused the trigge
e8f0: 72 20 70 72 6f 67 72 61 6d 0a 74 6f 20 65 78 65  r program.to exe
e900: 63 75 74 65 20 69 73 20 69 74 73 65 6c 66 20 70  cute is itself p
e910: 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72  art of a trigger
e920: 20 70 72 6f 67 72 61 6d 2c 20 74 68 65 6e 20 74   program, then t
e930: 68 61 74 20 74 72 69 67 67 65 72 20 70 72 6f 67  hat trigger prog
e940: 72 61 6d 0a 72 65 73 75 6d 65 73 20 65 78 65 63  ram.resumes exec
e950: 75 74 69 6f 6e 20 61 74 20 74 68 65 20 62 65 67  ution at the beg
e960: 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 6e 65  inning of the ne
e970: 78 74 20 73 74 65 70 2e 0a 3c 2f 70 3e 0a 0a 3c  xt step..</p>..<
e980: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
e990: 74 65 6d 70 74 72 69 67 20 7b 54 45 4d 50 20 74  temptrig {TEMP t
e9a0: 72 69 67 67 65 72 73 20 6f 6e 20 6e 6f 6e 2d 54  riggers on non-T
e9b0: 45 4d 50 20 74 61 62 6c 65 73 7d 3c 2f 74 63 6c  EMP tables}</tcl
e9c0: 3e 0a 3c 68 33 3e 54 45 4d 50 20 54 72 69 67 67  >.<h3>TEMP Trigg
e9d0: 65 72 73 20 6f 6e 20 4e 6f 6e 2d 54 45 4d 50 20  ers on Non-TEMP 
e9e0: 54 61 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  Tables</h3>..<p>
e9f0: 5e 28 41 20 74 72 69 67 67 65 72 20 6e 6f 72 6d  ^(A trigger norm
ea00: 61 6c 6c 79 20 65 78 69 73 74 73 20 69 6e 20 74  ally exists in t
ea10: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
ea20: 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 6e 61   as the table na
ea30: 6d 65 64 0a 61 66 74 65 72 20 74 68 65 20 22 4f  med.after the "O
ea40: 4e 22 20 6b 65 79 77 6f 72 64 20 69 6e 20 74 68  N" keyword in th
ea50: 65 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  e CREATE TRIGGER
ea60: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 45 78 63   statement.  Exc
ea70: 65 70 74 2c 20 69 74 20 69 73 0a 70 6f 73 73 69  ept, it is.possi
ea80: 62 6c 65 20 74 6f 20 63 72 65 61 74 65 20 61 20  ble to create a 
ea90: 54 45 4d 50 20 54 52 49 47 47 45 52 20 6f 6e 20  TEMP TRIGGER on 
eaa0: 61 20 74 61 62 6c 65 20 69 6e 20 61 6e 6f 74 68  a table in anoth
eab0: 65 72 20 64 61 74 61 62 61 73 65 2e 29 5e 20 20  er database.)^  
eac0: 0a 53 75 63 68 20 61 20 74 72 69 67 67 65 72 20  .Such a trigger 
ead0: 77 69 6c 6c 20 6f 6e 6c 79 20 66 69 72 65 20 77  will only fire w
eae0: 68 65 6e 20 63 68 61 6e 67 65 73 0a 61 72 65 20  hen changes.are 
eaf0: 6d 61 64 65 20 74 6f 20 74 68 65 20 74 61 72 67  made to the targ
eb00: 65 74 20 74 61 62 6c 65 20 62 79 20 74 68 65 20  et table by the 
eb10: 61 70 70 6c 69 63 61 74 69 6f 6e 20 74 68 61 74  application that
eb20: 20 64 65 66 69 6e 65 64 20 74 68 65 20 74 72 69   defined the tri
eb30: 67 67 65 72 2e 0a 4f 74 68 65 72 20 61 70 70 6c  gger..Other appl
eb40: 69 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 6f  ications that mo
eb50: 64 69 66 79 20 74 68 65 20 64 61 74 61 62 61 73  dify the databas
eb60: 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 61 62  e will not be ab
eb70: 6c 65 20 74 6f 20 73 65 65 20 74 68 65 0a 54 45  le to see the.TE
eb80: 4d 50 20 74 72 69 67 67 65 72 20 61 6e 64 20 68  MP trigger and h
eb90: 65 6e 63 65 20 63 61 6e 6e 6f 74 20 72 75 6e 20  ence cannot run 
eba0: 74 68 65 20 74 72 69 67 67 65 72 2e 3c 2f 70 3e  the trigger.</p>
ebb0: 0a 0a 3c 70 3e 57 68 65 6e 20 64 65 66 69 6e 69  ..<p>When defini
ebc0: 6e 67 20 61 20 54 45 4d 50 20 74 72 69 67 67 65  ng a TEMP trigge
ebd0: 72 20 6f 6e 20 61 20 6e 6f 6e 2d 54 45 4d 50 20  r on a non-TEMP 
ebe0: 74 61 62 6c 65 2c 20 69 74 20 69 73 20 69 6d 70  table, it is imp
ebf0: 6f 72 74 61 6e 74 20 74 6f 0a 73 70 65 63 69 66  ortant to.specif
ec00: 79 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  y the database h
ec10: 6f 6c 64 69 6e 67 20 74 68 65 20 6e 6f 6e 2d 54  olding the non-T
ec20: 45 4d 50 20 74 61 62 6c 65 2e 20 20 46 6f 72 20  EMP table.  For 
ec30: 65 78 61 6d 70 6c 65 2c 0a 69 6e 20 74 68 65 20  example,.in the 
ec40: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d  following statem
ec50: 65 6e 74 2c 20 69 74 20 69 73 20 69 6d 70 6f 72  ent, it is impor
ec60: 74 61 6e 74 20 74 6f 20 73 61 79 20 22 6d 61 69  tant to say "mai
ec70: 6e 2e 74 61 62 31 22 20 69 6e 73 74 65 61 64 0a  n.tab1" instead.
ec80: 6f 66 20 6a 75 73 74 20 22 74 61 62 31 22 3a 3c  of just "tab1":<
ec90: 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
eca0: 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 45  ><pre>.CREATE TE
ecb0: 4d 50 20 54 52 49 47 47 45 52 20 65 78 31 20 41  MP TRIGGER ex1 A
ecc0: 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20 3c  FTER INSERT ON <
ecd0: 62 3e 6d 61 69 6e 2e 3c 2f 62 3e 74 61 62 31 20  b>main.</b>tab1 
ece0: 42 45 47 49 4e 20 2e 2e 2e 0a 3c 2f 70 72 65 3e  BEGIN ....</pre>
ecf0: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
ed00: 70 3e 46 61 69 6c 75 72 65 20 74 6f 20 73 70 65  p>Failure to spe
ed10: 63 69 66 79 20 74 68 65 20 73 63 68 65 6d 61 20  cify the schema 
ed20: 6e 61 6d 65 20 6f 6e 20 74 68 65 20 74 61 72 67  name on the targ
ed30: 65 74 20 74 61 62 6c 65 20 63 6f 75 6c 64 20 72  et table could r
ed40: 65 73 75 6c 74 0a 69 6e 20 74 68 65 20 54 45 4d  esult.in the TEM
ed50: 50 20 74 72 69 67 67 65 72 20 62 65 69 6e 67 20  P trigger being 
ed60: 72 65 61 74 74 61 63 68 65 64 20 74 6f 20 61 20  reattached to a 
ed70: 74 61 62 6c 65 20 77 69 74 68 20 74 68 65 20 73  table with the s
ed80: 61 6d 65 20 6e 61 6d 65 20 69 6e 0a 61 6e 6f 74  ame name in.anot
ed90: 68 65 72 20 64 61 74 61 62 61 73 65 20 77 68 65  her database whe
eda0: 6e 65 76 65 72 20 61 6e 79 20 73 63 68 65 6d 61  never any schema
edb0: 20 63 68 61 6e 67 65 20 6f 63 63 75 72 73 2e 3c   change occurs.<
edc0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
edd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ede0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
edf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee10: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
ee20: 6f 6e 20 7b 43 52 45 41 54 45 20 56 49 45 57 7d  on {CREATE VIEW}
ee30: 20 7b 63 72 65 61 74 65 76 69 65 77 7d 20 7b 7b   {createview} {{
ee40: 43 52 45 41 54 45 20 56 49 45 57 7d 20 76 69 65  CREATE VIEW} vie
ee50: 77 20 56 49 45 57 20 2a 76 69 65 77 73 7d 0a 0a  w VIEW *views}..
ee60: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
ee70: 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d 76 69  iagram create-vi
ee80: 65 77 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ew-stmt.</tcl>..
ee90: 3c 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 56  <p>^The CREATE V
eea0: 49 45 57 20 63 6f 6d 6d 61 6e 64 20 61 73 73 69  IEW command assi
eeb0: 67 6e 73 20 61 20 6e 61 6d 65 20 74 6f 20 61 20  gns a name to a 
eec0: 70 72 65 2d 70 61 63 6b 61 67 65 64 20 0a 5b 53  pre-packaged .[S
eed0: 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
eee0: 2e 20 0a 5e 4f 6e 63 65 20 74 68 65 20 76 69 65  . .^Once the vie
eef0: 77 20 69 73 20 63 72 65 61 74 65 64 2c 20 69 74  w is created, it
ef00: 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
ef10: 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a  the FROM clause.
ef20: 6f 66 20 61 6e 6f 74 68 65 72 20 5b 53 45 4c 45  of another [SELE
ef30: 43 54 5d 20 69 6e 20 70 6c 61 63 65 20 6f 66 20  CT] in place of 
ef40: 61 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a 3c 2f  a table name..</
ef50: 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 22  p>..<p>^If the "
ef60: 54 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52  TEMP" or "TEMPOR
ef70: 41 52 59 22 20 6b 65 79 77 6f 72 64 20 6f 63 63  ARY" keyword occ
ef80: 75 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20 22  urs in between "
ef90: 43 52 45 41 54 45 22 0a 61 6e 64 20 22 56 49 45  CREATE".and "VIE
efa0: 57 22 20 74 68 65 6e 20 74 68 65 20 76 69 65 77  W" then the view
efb0: 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64   that is created
efc0: 20 69 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c 65   is only visible
efd0: 20 74 6f 20 74 68 65 0a 5b 64 61 74 61 62 61 73   to the.[databas
efe0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 74 68  e connection] th
eff0: 61 74 20 63 72 65 61 74 65 64 20 69 74 20 61 6e  at created it an
f000: 64 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c  d is automatical
f010: 6c 79 20 64 65 6c 65 74 65 64 20 77 68 65 6e 0a  ly deleted when.
f020: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
f030: 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c 6f 73 65  nection is close
f040: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 49 66 20  d.</p>..<p> ^If 
f050: 61 20 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d 61  a <yyterm>schema
f060: 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 69  -name</yyterm> i
f070: 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65  s specified, the
f080: 6e 20 74 68 65 20 76 69 65 77 20 0a 69 73 20 63  n the view .is c
f090: 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 73 70  reated in the sp
f0a0: 65 63 69 66 69 65 64 20 64 61 74 61 62 61 73 65  ecified database
f0b0: 2e 0a 5e 49 74 20 69 73 20 61 6e 20 65 72 72 6f  ..^It is an erro
f0c0: 72 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f 74  r to specify bot
f0d0: 68 20 61 20 3c 79 79 74 65 72 6d 3e 73 63 68 65  h a <yyterm>sche
f0e0: 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  ma-name</yyterm>
f0f0: 0a 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b 65  .and the TEMP ke
f100: 79 77 6f 72 64 20 6f 6e 20 61 20 56 49 45 57 2c  yword on a VIEW,
f110: 20 75 6e 6c 65 73 73 20 74 68 65 20 3c 79 79 74   unless the <yyt
f120: 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c  erm>schema-name<
f130: 2f 79 79 74 65 72 6d 3e 20 0a 69 73 20 22 74 65  /yyterm> .is "te
f140: 6d 70 22 2e 0a 5e 49 66 20 6e 6f 20 73 63 68 65  mp"..^If no sche
f150: 6d 61 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69  ma name is speci
f160: 66 69 65 64 2c 20 61 6e 64 20 74 68 65 20 54 45  fied, and the TE
f170: 4d 50 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f  MP keyword is no
f180: 74 20 70 72 65 73 65 6e 74 2c 0a 74 68 65 20 56  t present,.the V
f190: 49 45 57 20 69 73 20 63 72 65 61 74 65 64 20 69  IEW is created i
f1a0: 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
f1b0: 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 59 6f  ase.</p>..<p>^Yo
f1c0: 75 20 63 61 6e 6e 6f 74 20 5b 44 45 4c 45 54 45  u cannot [DELETE
f1d0: 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 20 6f 72 20  ], [INSERT], or 
f1e0: 5b 55 50 44 41 54 45 5d 20 61 20 76 69 65 77 2e  [UPDATE] a view.
f1f0: 20 20 5e 56 69 65 77 73 20 61 72 65 20 72 65 61    ^Views are rea
f200: 64 2d 6f 6e 6c 79 20 0a 69 6e 20 53 51 4c 69 74  d-only .in SQLit
f210: 65 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 69 6e  e.  ^However, in
f220: 20 6d 61 6e 79 20 63 61 73 65 73 20 79 6f 75 20   many cases you 
f230: 63 61 6e 20 75 73 65 20 61 6e 0a 5b 49 4e 53 54  can use an.[INST
f240: 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 5d 20  EAD OF trigger] 
f250: 6f 6e 20 74 68 65 20 76 69 65 77 20 74 6f 20 61  on the view to a
f260: 63 63 6f 6d 70 6c 69 73 68 20 0a 74 68 65 20 73  ccomplish .the s
f270: 61 6d 65 20 74 68 69 6e 67 2e 20 20 5e 56 69 65  ame thing.  ^Vie
f280: 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 0a  ws are removed .
f290: 77 69 74 68 20 74 68 65 20 5b 44 52 4f 50 20 56  with the [DROP V
f2a0: 49 45 57 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70  IEW] command.</p
f2b0: 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20 3c 79 79 74  >..<p>^If a <yyt
f2c0: 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c  erm>column-name<
f2d0: 2f 79 79 74 65 72 6d 3e 20 6c 69 73 74 20 66 6f  /yyterm> list fo
f2e0: 6c 6c 6f 77 73 20 0a 74 68 65 20 3c 79 79 74 65  llows .the <yyte
f2f0: 72 6d 3e 76 69 65 77 2d 6e 61 6d 65 3c 2f 79 79  rm>view-name</yy
f300: 74 65 72 6d 3e 2c 20 74 68 65 6e 20 74 68 61 74  term>, then that
f310: 20 6c 69 73 74 20 64 65 74 65 72 6d 69 6e 65 73   list determines
f320: 0a 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68  .the names of th
f330: 65 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 74 68  e columns for th
f340: 65 20 76 69 65 77 2e 20 20 5e 49 66 20 74 68 65  e view.  ^If the
f350: 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d   <yyterm>column-
f360: 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 6c 69  name</yyterm>.li
f370: 73 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 74  st is omitted, t
f380: 68 65 6e 20 74 68 65 20 6e 61 6d 65 73 20 6f 66  hen the names of
f390: 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20   the columns in 
f3a0: 74 68 65 20 76 69 65 77 20 61 72 65 20 64 65 72  the view are der
f3b0: 69 76 65 64 0a 66 72 6f 6d 20 74 68 65 20 6e 61  ived.from the na
f3c0: 6d 65 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c  mes of the resul
f3d0: 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 69 6e  t-set columns in
f3e0: 20 74 68 65 20 5b 73 65 6c 65 63 74 2d 73 74 6d   the [select-stm
f3f0: 74 5d 2e 0a 4e 6f 74 65 20 74 68 61 74 20 74 68  t]..Note that th
f400: 65 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e  e <yyterm>column
f410: 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 6c  -name</yyterm> l
f420: 69 73 74 20 73 79 6e 74 61 78 20 69 73 20 6f 6e  ist syntax is on
f430: 6c 79 0a 73 75 70 70 6f 72 74 65 64 20 69 6e 20  ly.supported in 
f440: 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 73 20  SQLite versions 
f450: 33 2e 39 2e 30 20 28 5b 64 61 74 65 6f 66 3a 33  3.9.0 ([dateof:3
f460: 2e 39 2e 30 5d 29 20 61 6e 64 20 6c 61 74 65 72  .9.0]) and later
f470: 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
f480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4c0: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
f4d0: 7b 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20  {CREATE VIRTUAL 
f4e0: 54 41 42 4c 45 7d 20 7b 63 72 65 61 74 65 76 74  TABLE} {createvt
f4f0: 61 62 7d 20 7b 7b 43 52 45 41 54 45 20 56 49 52  ab} {{CREATE VIR
f500: 54 55 41 4c 20 54 41 42 4c 45 7d 7d 0a 0a 52 65  TUAL TABLE}}..Re
f510: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
f520: 67 72 61 6d 20 63 72 65 61 74 65 2d 76 69 72 74  gram create-virt
f530: 75 61 6c 2d 74 61 62 6c 65 2d 73 74 6d 74 0a 3c  ual-table-stmt.<
f540: 2f 74 63 6c 3e 0a 0a 3c 70 3e 41 20 5b 76 69 72  /tcl>..<p>A [vir
f550: 74 75 61 6c 20 74 61 62 6c 65 5d 20 69 73 20 61  tual table] is a
f560: 6e 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 61  n interface to a
f570: 6e 20 65 78 74 65 72 6e 61 6c 20 73 74 6f 72 61  n external stora
f580: 67 65 20 6f 72 20 63 6f 6d 70 75 74 61 74 69 6f  ge or computatio
f590: 6e 0a 65 6e 67 69 6e 65 20 74 68 61 74 20 61 70  n.engine that ap
f5a0: 70 65 61 72 73 20 74 6f 20 62 65 20 61 20 74 61  pears to be a ta
f5b0: 62 6c 65 20 62 75 74 20 64 6f 65 73 20 6e 6f 74  ble but does not
f5c0: 20 61 63 74 75 61 6c 6c 79 20 73 74 6f 72 65 20   actually store 
f5d0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69 6e 20 74  information.in t
f5e0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
f5f0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 67 65 6e  .</p>..<p>In gen
f600: 65 72 61 6c 2c 20 79 6f 75 20 63 61 6e 20 64 6f  eral, you can do
f610: 20 61 6e 79 74 68 69 6e 67 20 77 69 74 68 20 61   anything with a
f620: 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 5d   [virtual table]
f630: 20 74 68 61 74 20 63 61 6e 20 62 65 20 64 6f 6e   that can be don
f640: 65 0a 77 69 74 68 20 61 6e 20 6f 72 64 69 6e 61  e.with an ordina
f650: 72 79 20 74 61 62 6c 65 2c 20 65 78 63 65 70 74  ry table, except
f660: 20 74 68 61 74 20 5e 79 6f 75 20 63 61 6e 6e 6f   that ^you canno
f670: 74 20 63 72 65 61 74 65 20 69 6e 64 69 63 65 73  t create indices
f680: 20 6f 72 20 74 72 69 67 67 65 72 73 20 6f 6e 20   or triggers on 
f690: 61 0a 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a.virtual table.
f6a0: 20 20 5e 53 6f 6d 65 20 76 69 72 74 75 61 6c 20    ^Some virtual 
f6b0: 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  table implementa
f6c0: 74 69 6f 6e 73 20 6d 69 67 68 74 20 69 6d 70 6f  tions might impo
f6d0: 73 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a 72 65  se additional.re
f6e0: 73 74 72 69 63 74 69 6f 6e 73 2e 20 20 46 6f 72  strictions.  For
f6f0: 20 65 78 61 6d 70 6c 65 2c 20 6d 61 6e 79 20 76   example, many v
f700: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 61 72  irtual tables ar
f710: 65 20 72 65 61 64 2d 6f 6e 6c 79 2e 3c 2f 70 3e  e read-only.</p>
f720: 0a 0a 3c 70 3e 54 68 65 20 3c 79 79 74 65 72 6d  ..<p>The <yyterm
f730: 3e 6d 6f 64 75 6c 65 2d 6e 61 6d 65 3c 2f 79 79  >module-name</yy
f740: 74 65 72 6d 3e 20 69 73 20 74 68 65 20 6e 61 6d  term> is the nam
f750: 65 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 74  e of an object t
f760: 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 0a 74  hat implements.t
f770: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
f780: 2e 20 20 5e 54 68 65 20 3c 79 79 74 65 72 6d 3e  .  ^The <yyterm>
f790: 6d 6f 64 75 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74  module-name</yyt
f7a0: 65 72 6d 3e 20 6d 75 73 74 20 62 65 20 72 65 67  erm> must be reg
f7b0: 69 73 74 65 72 65 64 20 77 69 74 68 0a 74 68 65  istered with.the
f7c0: 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65   SQLite database
f7d0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 75 73 69 6e   connection usin
f7e0: 67 0a 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74  g.[sqlite3_creat
f7f0: 65 5f 6d 6f 64 75 6c 65 28 29 5d 20 6f 72 20 5b  e_module()] or [
f800: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d  sqlite3_create_m
f810: 6f 64 75 6c 65 5f 76 32 28 29 5d 0a 70 72 69 6f  odule_v2()].prio
f820: 72 20 74 6f 20 69 73 73 75 69 6e 67 20 74 68 65  r to issuing the
f830: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
f840: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e  TABLE statement.
f850: 0a 5e 54 68 65 20 6d 6f 64 75 6c 65 20 74 61 6b  .^The module tak
f860: 65 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  es zero or more 
f870: 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65 64 20  comma-separated 
f880: 61 72 67 75 6d 65 6e 74 73 2e 0a 5e 54 68 65 20  arguments..^The 
f890: 61 72 67 75 6d 65 6e 74 73 20 63 61 6e 20 62 65  arguments can be
f8a0: 20 6a 75 73 74 20 61 62 6f 75 74 20 61 6e 79 20   just about any 
f8b0: 74 65 78 74 20 61 73 20 6c 6f 6e 67 20 61 73 20  text as long as 
f8c0: 69 74 20 68 61 73 20 62 61 6c 61 6e 63 65 64 0a  it has balanced.
f8d0: 70 61 72 65 6e 74 68 65 73 65 73 2e 20 20 54 68  parentheses.  Th
f8e0: 65 20 61 72 67 75 6d 65 6e 74 20 73 79 6e 74 61  e argument synta
f8f0: 78 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 6c  x is sufficientl
f900: 79 20 67 65 6e 65 72 61 6c 20 74 68 61 74 20 74  y general that t
f910: 68 65 0a 61 72 67 75 6d 65 6e 74 73 20 63 61 6e  he.arguments can
f920: 20 62 65 20 6d 61 64 65 20 74 6f 20 61 70 70 65   be made to appe
f930: 61 72 20 61 73 20 5b 63 6f 6c 75 6d 6e 20 64 65  ar as [column de
f940: 66 69 6e 69 74 69 6f 6e 73 5d 20 69 6e 20 61 20  finitions] in a 
f950: 74 72 61 64 69 74 69 6f 6e 61 6c 0a 5b 43 52 45  traditional.[CRE
f960: 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65  ATE TABLE] state
f970: 6d 65 6e 74 2e 20 20 0a 5e 53 51 4c 69 74 65 20  ment.  .^SQLite 
f980: 70 61 73 73 65 73 20 74 68 65 20 6d 6f 64 75 6c  passes the modul
f990: 65 20 61 72 67 75 6d 65 6e 74 73 20 64 69 72 65  e arguments dire
f9a0: 63 74 6c 79 0a 74 6f 20 74 68 65 20 5b 78 43 72  ctly.to the [xCr
f9b0: 65 61 74 65 5d 20 61 6e 64 20 5b 78 43 6f 6e 6e  eate] and [xConn
f9c0: 65 63 74 5d 20 6d 65 74 68 6f 64 73 20 6f 66 20  ect] methods of 
f9d0: 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65  the module imple
f9e0: 6d 65 6e 74 61 74 69 6f 6e 0a 77 69 74 68 6f 75  mentation.withou
f9f0: 74 20 61 6e 79 20 69 6e 74 65 72 70 72 65 74 61  t any interpreta
fa00: 74 69 6f 6e 2e 20 20 49 74 20 69 73 20 74 68 65  tion.  It is the
fa10: 20 72 65 73 70 6f 6e 73 69 62 69 6c 69 74 79 0a   responsibility.
fa20: 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d  of the module im
fa30: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
fa40: 70 61 72 73 65 20 61 6e 64 20 69 6e 74 65 72 70  parse and interp
fa50: 72 65 74 20 69 74 73 20 6f 77 6e 20 61 72 67 75  ret its own argu
fa60: 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ments.</p>..<p>^
fa70: 41 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  A virtual table 
fa80: 69 73 20 64 65 73 74 72 6f 79 65 64 20 75 73 69  is destroyed usi
fa90: 6e 67 20 74 68 65 20 6f 72 64 69 6e 61 72 79 0a  ng the ordinary.
faa0: 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20 73 74 61  [DROP TABLE] sta
fab0: 74 65 6d 65 6e 74 2e 20 20 54 68 65 72 65 20 69  tement.  There i
fac0: 73 20 6e 6f 0a 44 52 4f 50 20 56 49 52 54 55 41  s no.DROP VIRTUA
fad0: 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  L TABLE statemen
fae0: 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  t.</p>..<tcl>.##
faf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb30: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
fb40: 74 69 6f 6e 20 44 45 4c 45 54 45 20 64 65 6c 65  tion DELETE dele
fb50: 74 65 20 7b 44 45 4c 45 54 45 20 2a 44 45 4c 45  te {DELETE *DELE
fb60: 54 45 73 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  TEs}..RecursiveB
fb70: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65 6c  ubbleDiagram del
fb80: 65 74 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ete-stmt.</tcl>.
fb90: 0a 3c 70 3e 54 68 65 20 44 45 4c 45 54 45 20 63  .<p>The DELETE c
fba0: 6f 6d 6d 61 6e 64 20 72 65 6d 6f 76 65 73 20 72  ommand removes r
fbb0: 65 63 6f 72 64 73 20 66 72 6f 6d 20 74 68 65 20  ecords from the 
fbc0: 74 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65 64  table identified
fbd0: 20 62 79 20 74 68 65 0a 20 20 20 5b 71 75 61 6c   by the.   [qual
fbe0: 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65  ified-table-name
fbf0: 5d 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 57  ]...<p>^If the W
fc00: 48 45 52 45 20 63 6c 61 75 73 65 20 69 73 20 6e  HERE clause is n
fc10: 6f 74 20 70 72 65 73 65 6e 74 2c 20 61 6c 6c 20  ot present, all 
fc20: 72 65 63 6f 72 64 73 20 69 6e 20 74 68 65 20 74  records in the t
fc30: 61 62 6c 65 20 61 72 65 20 64 65 6c 65 74 65 64  able are deleted
fc40: 2e 0a 20 20 20 5e 49 66 20 61 20 57 48 45 52 45  ..   ^If a WHERE
fc50: 20 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c   clause is suppl
fc60: 69 65 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74  ied, then only t
fc70: 68 6f 73 65 20 72 6f 77 73 20 66 6f 72 20 77 68  hose rows for wh
fc80: 69 63 68 20 74 68 65 0a 20 20 20 57 48 45 52 45  ich the.   WHERE
fc90: 20 63 6c 61 75 73 65 20 5b 62 6f 6f 6c 65 61 6e   clause [boolean
fca0: 20 65 78 70 72 65 73 73 69 6f 6e 5d 20 69 73 20   expression] is 
fcb0: 74 72 75 65 20 61 72 65 20 64 65 6c 65 74 65 64  true are deleted
fcc0: 2e 0a 20 20 20 5e 52 6f 77 73 20 66 6f 72 20 77  ..   ^Rows for w
fcd0: 68 69 63 68 20 74 68 65 20 65 78 70 72 65 73 73  hich the express
fce0: 69 6f 6e 20 69 73 20 66 61 6c 73 65 20 6f 72 20  ion is false or 
fcf0: 4e 55 4c 4c 20 61 72 65 20 72 65 74 61 69 6e 65  NULL are retaine
fd00: 64 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63 74  d...<h3>Restrict
fd10: 69 6f 6e 73 20 6f 6e 20 44 45 4c 45 54 45 20 53  ions on DELETE S
fd20: 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e  tatements Within
fd30: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 3c   CREATE TRIGGER<
fd40: 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c  /h3>..<p>The fol
fd50: 6c 6f 77 69 6e 67 20 72 65 73 74 72 69 63 74 69  lowing restricti
fd60: 6f 6e 73 20 61 70 70 6c 79 20 74 6f 20 44 45 4c  ons apply to DEL
fd70: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 74  ETE statements t
fd80: 68 61 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e  hat occur within
fd90: 20 74 68 65 0a 20 20 20 62 6f 64 79 20 6f 66 20   the.   body of 
fda0: 61 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  a [CREATE TRIGGE
fdb0: 52 5d 20 73 74 61 74 65 6d 65 6e 74 3a 0a 0a 3c  R] statement:..<
fdc0: 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68  ul>.  <li><p>^Th
fdd0: 65 20 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d  e <yyterm>table-
fde0: 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 73 70  name</yyterm> sp
fdf0: 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
fe00: 6f 66 20 61 20 0a 20 20 20 20 44 45 4c 45 54 45  of a .    DELETE
fe10: 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68 69   statement withi
fe20: 6e 0a 20 20 20 20 61 20 74 72 69 67 67 65 72 20  n.    a trigger 
fe30: 62 6f 64 79 20 6d 75 73 74 20 62 65 20 75 6e 71  body must be unq
fe40: 75 61 6c 69 66 69 65 64 2e 20 20 5e 28 49 6e 20  ualified.  ^(In 
fe50: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
fe60: 0a 20 20 20 20 3c 69 3e 73 63 68 65 6d 61 2d 6e  .    <i>schema-n
fe70: 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20  ame</i><b>.</b> 
fe80: 70 72 65 66 69 78 20 6f 6e 20 74 68 65 20 74 61  prefix on the ta
fe90: 62 6c 65 20 6e 61 6d 65 20 69 73 20 6e 6f 74 20  ble name is not 
fea0: 61 6c 6c 6f 77 65 64 20 0a 20 20 20 20 77 69 74  allowed .    wit
feb0: 68 69 6e 20 74 72 69 67 67 65 72 73 2e 29 5e 20  hin triggers.)^ 
fec0: 5e 49 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f  ^If the table to
fed0: 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67   which the trigg
fee0: 65 72 20 69 73 20 61 74 74 61 63 68 65 64 20 69  er is attached i
fef0: 73 0a 20 20 20 20 6e 6f 74 20 69 6e 20 74 68 65  s.    not in the
ff00: 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 2c 20   temp database, 
ff10: 74 68 65 6e 20 44 45 4c 45 54 45 20 73 74 61 74  then DELETE stat
ff20: 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 68  ements within th
ff30: 65 20 74 72 69 67 67 65 72 0a 20 20 20 20 62 6f  e trigger.    bo
ff40: 64 79 20 6d 75 73 74 20 6f 70 65 72 61 74 65 20  dy must operate 
ff50: 6f 6e 20 74 61 62 6c 65 73 20 77 69 74 68 69 6e  on tables within
ff60: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
ff70: 73 65 20 61 73 20 69 74 2e 20 5e 49 66 20 74 68  se as it. ^If th
ff80: 65 20 74 61 62 6c 65 0a 20 20 20 20 74 6f 20 77  e table.    to w
ff90: 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
ffa0: 20 69 73 20 61 74 74 61 63 68 65 64 20 69 73 20   is attached is 
ffb0: 69 6e 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  in the TEMP data
ffc0: 62 61 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 20  base, then the. 
ffd0: 20 20 20 75 6e 71 75 61 6c 69 66 69 65 64 20 6e     unqualified n
ffe0: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
fff0: 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64 20 69   being deleted i
10000 73 20 72 65 73 6f 6c 76 65 64 20 69 6e 20 74 68  s resolved in th
10010 65 20 73 61 6d 65 20 77 61 79 20 61 73 0a 20 20  e same way as.  
10020 20 20 69 74 20 69 73 20 66 6f 72 20 61 20 74 6f    it is for a to
10030 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d 65 6e  p-level statemen
10040 74 20 28 62 79 20 73 65 61 72 63 68 69 6e 67 20  t (by searching 
10050 66 69 72 73 74 20 74 68 65 20 54 45 4d 50 20 64  first the TEMP d
10060 61 74 61 62 61 73 65 2c 20 74 68 65 6e 0a 20 20  atabase, then.  
10070 20 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62    the main datab
10080 61 73 65 2c 20 74 68 65 6e 20 61 6e 79 20 6f 74  ase, then any ot
10090 68 65 72 20 64 61 74 61 62 61 73 65 73 20 69 6e  her databases in
100a0 20 74 68 65 20 6f 72 64 65 72 20 74 68 65 79 20   the order they 
100b0 77 65 72 65 0a 20 20 20 20 61 74 74 61 63 68 65  were.    attache
100c0 64 29 2e 0a 20 20 20 20 0a 20 20 3c 6c 69 3e 3c  d)..    .  <li><
100d0 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42  p>^The INDEXED B
100e0 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45  Y and NOT INDEXE
100f0 44 20 63 6c 61 75 73 65 73 20 61 72 65 20 6e 6f  D clauses are no
10100 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 44 45 4c  t allowed on DEL
10110 45 54 45 0a 20 20 20 20 73 74 61 74 65 6d 65 6e  ETE.    statemen
10120 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ts within trigge
10130 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c  rs.</p>..  <li><
10140 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20 61 6e 64  p>^The LIMIT and
10150 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
10160 73 20 28 64 65 73 63 72 69 62 65 64 20 62 65 6c  s (described bel
10170 6f 77 29 20 61 72 65 20 75 6e 73 75 70 70 6f 72  ow) are unsuppor
10180 74 65 64 20 66 6f 72 0a 20 20 20 20 44 45 4c 45  ted for.    DELE
10190 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  TE statements wi
101a0 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f  thin triggers.</
101b0 70 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70  p>.</ul>..<h3>Op
101c0 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 61 6e 64  tional LIMIT and
101d0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
101e0 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20  s</h3>..<p>^(If 
101f0 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c  SQLite is compil
10200 65 64 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c  ed with the [SQL
10210 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54  ITE_ENABLE_UPDAT
10220 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a  E_DELETE_LIMIT].
10230 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
10240 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 73 79  ion, then the sy
10250 6e 74 61 78 20 6f 66 20 74 68 65 20 44 45 4c 45  ntax of the DELE
10260 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 0a  TE statement is.
10270 65 78 74 65 6e 64 65 64 20 62 79 20 74 68 65 20  extended by the 
10280 61 64 64 69 74 69 6f 6e 20 6f 66 20 6f 70 74 69  addition of opti
10290 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59 20 61 6e  onal ORDER BY an
102a0 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 3a  d LIMIT clauses:
102b0 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62  )^</p>..<tcl>Bub
102c0 62 6c 65 44 69 61 67 72 61 6d 20 64 65 6c 65 74  bleDiagram delet
102d0 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f  e-stmt-limited</
102e0 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20 44  tcl>..<p>^If a D
102f0 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
10300 68 61 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75  has a LIMIT clau
10310 73 65 2c 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  se, the maximum 
10320 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74  number of rows t
10330 68 61 74 0a 77 69 6c 6c 20 62 65 20 64 65 6c 65  hat.will be dele
10340 74 65 64 20 69 73 20 66 6f 75 6e 64 20 62 79 20  ted is found by 
10350 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61  evaluating the a
10360 63 63 6f 6d 70 61 6e 79 69 6e 67 20 65 78 70 72  ccompanying expr
10370 65 73 73 69 6f 6e 20 61 6e 64 20 63 61 73 74 69  ession and casti
10380 6e 67 0a 69 74 20 74 6f 20 61 6e 20 69 6e 74 65  ng.it to an inte
10390 67 65 72 20 76 61 6c 75 65 2e 20 5e 49 66 20 74  ger value. ^If t
103a0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
103b0 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
103c0 4c 49 4d 49 54 20 63 6c 61 75 73 65 0a 63 61 6e  LIMIT clause.can
103d0 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c  not be losslessl
103e0 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  y converted to a
103f0 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2c  n integer value,
10400 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e   it is an error.
10410 20 5e 41 20 0a 6e 65 67 61 74 69 76 65 20 4c 49   ^A .negative LI
10420 4d 49 54 20 76 61 6c 75 65 20 69 73 20 69 6e 74  MIT value is int
10430 65 72 70 72 65 74 65 64 20 61 73 20 22 6e 6f 20  erpreted as "no 
10440 6c 69 6d 69 74 22 2e 20 5e 28 49 66 20 74 68 65  limit". ^(If the
10450 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
10460 74 20 0a 61 6c 73 6f 20 68 61 73 20 61 6e 20 4f  t .also has an O
10470 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20 74 68  FFSET clause, th
10480 65 6e 20 69 74 20 69 73 20 73 69 6d 69 6c 61 72  en it is similar
10490 6c 79 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64  ly evaluated and
104a0 20 63 61 73 74 20 74 6f 20 61 6e 0a 69 6e 74 65   cast to an.inte
104b0 67 65 72 20 76 61 6c 75 65 2e 20 41 67 61 69 6e  ger value. Again
104c0 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72  , it is an error
104d0 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 63 61   if the value ca
104e0 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73  nnot be lossless
104f0 6c 79 0a 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  ly.converted to 
10500 61 6e 20 69 6e 74 65 67 65 72 2e 29 5e 20 5e 49  an integer.)^ ^I
10510 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 46  f there is no OF
10520 46 53 45 54 20 63 6c 61 75 73 65 2c 20 6f 72 20  FSET clause, or 
10530 74 68 65 20 63 61 6c 63 75 6c 61 74 65 64 0a 69  the calculated.i
10540 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 73 20  nteger value is 
10550 6e 65 67 61 74 69 76 65 2c 20 74 68 65 20 65 66  negative, the ef
10560 66 65 63 74 69 76 65 20 4f 46 46 53 45 54 20 76  fective OFFSET v
10570 61 6c 75 65 20 69 73 20 7a 65 72 6f 2e 0a 0a 3c  alue is zero...<
10580 70 3e 5e 28 49 66 20 74 68 65 20 44 45 4c 45 54  p>^(If the DELET
10590 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  E statement has 
105a0 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  an ORDER BY clau
105b0 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77  se, then all row
105c0 73 20 74 68 61 74 20 77 6f 75 6c 64 20 0a 62 65  s that would .be
105d0 20 64 65 6c 65 74 65 64 20 69 6e 20 74 68 65 20   deleted in the 
105e0 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c  absence of the L
105f0 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72 65 20  IMIT clause are 
10600 73 6f 72 74 65 64 20 61 63 63 6f 72 64 69 6e 67  sorted according
10610 20 74 6f 20 74 68 65 20 0a 4f 52 44 45 52 20 42   to the .ORDER B
10620 59 2e 20 54 68 65 20 66 69 72 73 74 20 3c 69 3e  Y. The first <i>
10630 4d 3c 2f 69 3e 20 72 6f 77 73 2c 20 77 68 65 72  M</i> rows, wher
10640 65 20 3c 69 3e 4d 3c 2f 69 3e 20 69 73 20 74 68  e <i>M</i> is th
10650 65 20 76 61 6c 75 65 20 66 6f 75 6e 64 20 62 79  e value found by
10660 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20  .evaluating the 
10670 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20 65 78  OFFSET clause ex
10680 70 72 65 73 73 69 6f 6e 2c 20 61 72 65 20 73 6b  pression, are sk
10690 69 70 70 65 64 2c 20 61 6e 64 20 74 68 65 20 66  ipped, and the f
106a0 6f 6c 6c 6f 77 69 6e 67 20 0a 3c 69 3e 4e 3c 2f  ollowing .<i>N</
106b0 69 3e 2c 20 77 68 65 72 65 20 3c 69 3e 4e 3c 2f  i>, where <i>N</
106c0 69 3e 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  i> is the value 
106d0 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70  of the LIMIT exp
106e0 72 65 73 73 69 6f 6e 2c 20 61 72 65 20 64 65 6c  ression, are del
106f0 65 74 65 64 2e 29 5e 0a 5e 49 66 20 74 68 65 72  eted.)^.^If ther
10700 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  e are less than 
10710 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 72 65  <i>N</i> rows re
10720 6d 61 69 6e 69 6e 67 20 61 66 74 65 72 20 74 61  maining after ta
10730 6b 69 6e 67 20 74 68 65 20 4f 46 46 53 45 54 20  king the OFFSET 
10740 63 6c 61 75 73 65 0a 69 6e 74 6f 20 61 63 63 6f  clause.into acco
10750 75 6e 74 2c 20 6f 72 20 69 66 20 74 68 65 20 4c  unt, or if the L
10760 49 4d 49 54 20 63 6c 61 75 73 65 20 65 76 61 6c  IMIT clause eval
10770 75 61 74 65 64 20 74 6f 20 61 20 6e 65 67 61 74  uated to a negat
10780 69 76 65 20 76 61 6c 75 65 2c 20 74 68 65 6e 20  ive value, then 
10790 61 6c 6c 0a 72 65 6d 61 69 6e 69 6e 67 20 72 6f  all.remaining ro
107a0 77 73 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a  ws are deleted..
107b0 0a 3c 70 3e 5e 49 66 20 74 68 65 20 44 45 4c 45  .<p>^If the DELE
107c0 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73  TE statement has
107d0 20 6e 6f 20 4f 52 44 45 52 20 42 59 20 63 6c 61   no ORDER BY cla
107e0 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f  use, then all ro
107f0 77 73 20 74 68 61 74 0a 77 6f 75 6c 64 20 62 65  ws that.would be
10800 20 64 65 6c 65 74 65 64 20 69 6e 20 74 68 65 20   deleted in the 
10810 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c  absence of the L
10820 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72 65 20  IMIT clause are 
10830 61 73 73 65 6d 62 6c 65 64 20 69 6e 20 61 6e 0a  assembled in an.
10840 61 72 62 69 74 72 61 72 79 20 6f 72 64 65 72 20  arbitrary order 
10850 62 65 66 6f 72 65 20 61 70 70 6c 79 69 6e 67 20  before applying 
10860 74 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46  the LIMIT and OF
10870 46 53 45 54 20 63 6c 61 75 73 65 73 20 74 6f 20  FSET clauses to 
10880 64 65 74 65 72 6d 69 6e 65 20 0a 74 68 65 20 73  determine .the s
10890 75 62 73 65 74 20 74 68 61 74 20 61 72 65 20 61  ubset that are a
108a0 63 74 75 61 6c 6c 79 20 64 65 6c 65 74 65 64 2e  ctually deleted.
108b0 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52 44 45 52  ..<p>^(The ORDER
108c0 20 42 59 20 63 6c 61 75 73 65 20 6f 6e 20 61 20   BY clause on a 
108d0 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
108e0 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f   is used only to
108f0 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68   determine which
10900 0a 72 6f 77 73 20 66 61 6c 6c 20 77 69 74 68 69  .rows fall withi
10910 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20 54 68 65  n the LIMIT. The
10920 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20   order in which 
10930 72 6f 77 73 20 61 72 65 20 64 65 6c 65 74 65 64  rows are deleted
10940 20 69 73 20 61 72 62 69 74 72 61 72 79 0a 61 6e   is arbitrary.an
10950 64 20 69 73 20 6e 6f 74 20 69 6e 66 6c 75 65 6e  d is not influen
10960 63 65 64 20 62 79 20 74 68 65 20 4f 52 44 45 52  ced by the ORDER
10970 20 42 59 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c   BY clause.)^..<
10980 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
10990 74 72 75 6e 63 61 74 65 6f 70 74 20 7b 74 72 75  truncateopt {tru
109a0 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69  ncate optimizati
109b0 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  on}</tcl>.<h3>Th
109c0 65 20 54 72 75 6e 63 61 74 65 20 4f 70 74 69 6d  e Truncate Optim
109d0 69 7a 61 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70  ization</h3>..<p
109e0 3e 5e 57 68 65 6e 20 74 68 65 20 57 48 45 52 45  >^When the WHERE
109f0 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
10a00 20 61 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d   a DELETE statem
10a10 65 6e 74 20 61 6e 64 20 74 68 65 20 74 61 62 6c  ent and the tabl
10a20 65 0a 62 65 69 6e 67 20 64 65 6c 65 74 65 64 20  e.being deleted 
10a30 68 61 73 20 6e 6f 20 74 72 69 67 67 65 72 73 2c  has no triggers,
10a40 0a 53 51 4c 69 74 65 20 75 73 65 73 20 61 6e 20  .SQLite uses an 
10a50 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 74 6f 20  optimization to 
10a60 65 72 61 73 65 20 74 68 65 20 65 6e 74 69 72 65  erase the entire
10a70 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74 0a 77   table content.w
10a80 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f  ithout having to
10a90 20 76 69 73 69 74 20 65 61 63 68 20 72 6f 77 20   visit each row 
10aa0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69 6e 64  of the table ind
10ab0 69 76 69 64 75 61 6c 6c 79 2e 0a 54 68 69 73 20  ividually..This 
10ac0 22 74 72 75 6e 63 61 74 65 22 20 6f 70 74 69 6d  "truncate" optim
10ad0 69 7a 61 74 69 6f 6e 20 6d 61 6b 65 73 20 74 68  ization makes th
10ae0 65 20 64 65 6c 65 74 65 20 72 75 6e 20 6d 75 63  e delete run muc
10af0 68 20 66 61 73 74 65 72 2e 0a 50 72 69 6f 72 20  h faster..Prior 
10b00 74 6f 20 53 51 4c 69 74 65 20 5b 76 65 72 73 69  to SQLite [versi
10b10 6f 6e 20 33 2e 36 2e 35 5d 20 28 5b 64 61 74 65  on 3.6.5] ([date
10b20 6f 66 3a 33 2e 36 2e 35 5d 29 2c 20 74 68 65 20  of:3.6.5]), the 
10b30 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a  truncate optimiz
10b40 61 74 69 6f 6e 0a 61 6c 73 6f 20 6d 65 61 6e 74  ation.also meant
10b50 20 74 68 61 74 20 74 68 65 20 5b 73 71 6c 69 74   that the [sqlit
10b60 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 20 61 6e  e3_changes()] an
10b70 64 0a 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c  d.[sqlite3_total
10b80 5f 63 68 61 6e 67 65 73 28 29 5d 20 69 6e 74 65  _changes()] inte
10b90 72 66 61 63 65 73 0a 61 6e 64 20 74 68 65 20 5b  rfaces.and the [
10ba0 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20 70 72  count_changes pr
10bb0 61 67 6d 61 5d 0a 77 69 6c 6c 20 6e 6f 74 20 61  agma].will not a
10bc0 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 74  ctually return t
10bd0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 6c  he number of del
10be0 65 74 65 64 20 72 6f 77 73 2e 20 20 0a 54 68 61  eted rows.  .Tha
10bf0 74 20 70 72 6f 62 6c 65 6d 20 68 61 73 20 62 65  t problem has be
10c00 65 6e 20 66 69 78 65 64 20 61 73 20 6f 66 20 5b  en fixed as of [
10c10 76 65 72 73 69 6f 6e 20 33 2e 36 2e 35 5d 20 28  version 3.6.5] (
10c20 5b 64 61 74 65 6f 66 3a 33 2e 36 2e 35 5d 29 2e  [dateof:3.6.5]).
10c30 0a 0a 3c 70 3e 5e 54 68 65 20 74 72 75 6e 63 61  ..<p>^The trunca
10c40 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  te optimization 
10c50 63 61 6e 20 62 65 20 70 65 72 6d 61 6e 65 6e 74  can be permanent
10c60 6c 79 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20  ly disabled for 
10c70 61 6c 6c 20 71 75 65 72 69 65 73 0a 62 79 20 72  all queries.by r
10c80 65 63 6f 6d 70 69 6c 69 6e 67 0a 53 51 4c 69 74  ecompiling.SQLit
10c90 65 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49  e with the [SQLI
10ca0 54 45 5f 4f 4d 49 54 5f 54 52 55 4e 43 41 54 45  TE_OMIT_TRUNCATE
10cb0 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 5d 20 63  _OPTIMIZATION] c
10cc0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 73 77 69 74  ompile-time swit
10cd0 63 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ch.</p>..<p>The 
10ce0 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a  truncate optimiz
10cf0 61 74 69 6f 6e 20 63 61 6e 20 61 6c 73 6f 20 62  ation can also b
10d00 65 20 64 69 73 61 62 6c 65 64 20 61 74 20 72 75  e disabled at ru
10d10 6e 74 69 6d 65 20 75 73 69 6e 67 0a 74 68 65 20  ntime using.the 
10d20 5b 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 74  [sqlite3_set_aut
10d30 68 6f 72 69 7a 65 72 28 29 5d 20 69 6e 74 65 72  horizer()] inter
10d40 66 61 63 65 2e 20 20 5e 49 66 20 61 6e 20 61 75  face.  ^If an au
10d50 74 68 6f 72 69 7a 65 72 20 63 61 6c 6c 62 61 63  thorizer callbac
10d60 6b 0a 72 65 74 75 72 6e 73 20 5b 53 51 4c 49 54  k.returns [SQLIT
10d70 45 5f 49 47 4e 4f 52 45 5d 20 66 6f 72 20 61 6e  E_IGNORE] for an
10d80 20 5b 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 5d   [SQLITE_DELETE]
10d90 20 61 63 74 69 6f 6e 20 63 6f 64 65 2c 20 74 68   action code, th
10da0 65 6e 0a 74 68 65 20 44 45 4c 45 54 45 20 6f 70  en.the DELETE op
10db0 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 70 72 6f  eration will pro
10dc0 63 65 65 64 20 62 75 74 20 74 68 65 20 74 72 75  ceed but the tru
10dd0 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69  ncate optimizati
10de0 6f 6e 20 77 69 6c 6c 0a 62 65 20 62 79 70 61 73  on will.be bypas
10df0 73 65 64 20 61 6e 64 20 72 6f 77 73 20 77 69 6c  sed and rows wil
10e00 6c 20 62 65 20 64 65 6c 65 74 65 64 20 6f 6e 65  l be deleted one
10e10 20 62 79 20 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 74   by one.</p>..<t
10e20 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
10e30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e70 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 45 54  ###.Section {DET
10e80 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64 65  ACH DATABASE} de
10e90 74 61 63 68 20 2a 44 45 54 41 43 48 0a 0a 52 65  tach *DETACH..Re
10ea0 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
10eb0 67 72 61 6d 20 64 65 74 61 63 68 2d 73 74 6d 74  gram detach-stmt
10ec0 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 69  .</tcl>..<p>^Thi
10ed0 73 20 73 74 61 74 65 6d 65 6e 74 20 64 65 74 61  s statement deta
10ee0 63 68 65 73 20 61 6e 20 61 64 64 69 74 69 6f 6e  ches an addition
10ef0 61 6c 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  al database conn
10f00 65 63 74 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c  ection previousl
10f10 79 20 0a 61 74 74 61 63 68 65 64 20 75 73 69 6e  y .attached usin
10f20 67 20 74 68 65 20 5b 41 54 54 41 43 48 5d 20 73  g the [ATTACH] s
10f30 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 57 68 65  tatement.  .^Whe
10f40 6e 20 6e 6f 74 20 69 6e 20 5b 73 68 61 72 65 64  n not in [shared
10f50 20 63 61 63 68 65 20 6d 6f 64 65 5d 2c 20 0a 69   cache mode], .i
10f60 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 6f  t is possible to
10f70 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 64   have the same d
10f80 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 74 74  atabase file att
10f90 61 63 68 65 64 20 6d 75 6c 74 69 70 6c 65 20 74  ached multiple t
10fa0 69 6d 65 73 20 75 73 69 6e 67 20 0a 64 69 66 66  imes using .diff
10fb0 65 72 65 6e 74 20 6e 61 6d 65 73 2c 20 61 6e 64  erent names, and
10fc0 20 64 65 74 61 63 68 69 6e 67 20 6f 6e 65 20 63   detaching one c
10fd0 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20 66  onnection to a f
10fe0 69 6c 65 20 77 69 6c 6c 20 6c 65 61 76 65 20 74  ile will leave t
10ff0 68 65 20 0a 6f 74 68 65 72 73 20 69 6e 74 61 63  he .others intac
11000 74 2e 3c 2f 70 3e 0a 5e 49 6e 20 5b 73 68 61 72  t.</p>.^In [shar
11010 65 64 20 63 61 63 68 65 20 6d 6f 64 65 5d 2c 20  ed cache mode], 
11020 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 61 74  attempting to at
11030 74 61 63 68 20 74 68 65 20 73 61 6d 65 20 64 61  tach the same da
11040 74 61 62 61 73 65 20 66 69 6c 65 20 6d 6f 72 65  tabase file more
11050 0a 74 68 61 6e 20 6f 6e 63 65 20 72 65 73 75 6c  .than once resul
11060 74 73 20 69 6e 20 61 6e 20 65 72 72 6f 72 2e 0a  ts in an error..
11070 0a 3c 70 3e 5e 54 68 69 73 20 73 74 61 74 65 6d  .<p>^This statem
11080 65 6e 74 20 77 69 6c 6c 20 66 61 69 6c 20 69 66  ent will fail if
11090 20 53 51 4c 69 74 65 20 69 73 20 69 6e 20 74 68   SQLite is in th
110a0 65 20 6d 69 64 64 6c 65 20 6f 66 20 61 20 74 72  e middle of a tr
110b0 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a  ansaction.</p>..
110c0 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
110d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
110e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
110f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11100 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11110 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
11120 52 4f 50 20 49 4e 44 45 58 7d 20 64 72 6f 70 69  ROP INDEX} dropi
11130 6e 64 65 78 20 7b 7b 44 52 4f 50 20 49 4e 44 45  ndex {{DROP INDE
11140 58 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  X}}..RecursiveBu
11150 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f 70  bbleDiagram drop
11160 2d 69 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f 74 63  -index-stmt.</tc
11170 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50  l>..<p>^The DROP
11180 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74   INDEX statement
11190 20 72 65 6d 6f 76 65 73 20 61 6e 20 69 6e 64 65   removes an inde
111a0 78 20 61 64 64 65 64 0a 77 69 74 68 20 74 68 65  x added.with the
111b0 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20   [CREATE INDEX] 
111c0 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20  statement.  The 
111d0 69 6e 64 65 78 20 69 73 20 63 6f 6d 70 6c 65 74  index is complet
111e0 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d  ely removed from
111f0 0a 74 68 65 20 64 69 73 6b 2e 20 20 54 68 65 20  .the disk.  The 
11200 6f 6e 6c 79 20 77 61 79 20 74 6f 20 72 65 63 6f  only way to reco
11210 76 65 72 20 74 68 65 20 69 6e 64 65 78 20 69 73  ver the index is
11220 20 74 6f 20 72 65 65 6e 74 65 72 20 74 68 65 0a   to reenter the.
11230 61 70 70 72 6f 70 72 69 61 74 65 20 5b 43 52 45  appropriate [CRE
11240 41 54 45 20 49 4e 44 45 58 5d 20 63 6f 6d 6d 61  ATE INDEX] comma
11250 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  nd.</p>..<tcl>.#
11260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
112a0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
112b0 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54 41 42 4c  ction {DROP TABL
112c0 45 7d 20 64 72 6f 70 74 61 62 6c 65 20 7b 7b 44  E} droptable {{D
112d0 52 4f 50 20 54 41 42 4c 45 7d 7d 0a 0a 52 65 63  ROP TABLE}}..Rec
112e0 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
112f0 72 61 6d 20 64 72 6f 70 2d 74 61 62 6c 65 2d 73  ram drop-table-s
11300 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tmt.</tcl>..<p>^
11310 54 68 65 20 44 52 4f 50 20 54 41 42 4c 45 20 73  The DROP TABLE s
11320 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73  tatement removes
11330 20 61 20 74 61 62 6c 65 20 61 64 64 65 64 20 77   a table added w
11340 69 74 68 20 74 68 65 0a 5b 43 52 45 41 54 45 20  ith the.[CREATE 
11350 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
11360 2e 20 20 54 68 65 20 6e 61 6d 65 20 73 70 65 63  .  The name spec
11370 69 66 69 65 64 20 69 73 20 74 68 65 0a 74 61 62  ified is the.tab
11380 6c 65 20 6e 61 6d 65 2e 20 20 5e 54 68 65 20 64  le name.  ^The d
11390 72 6f 70 70 65 64 20 74 61 62 6c 65 20 69 73 20  ropped table is 
113a0 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f 76  completely remov
113b0 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ed from the data
113c0 62 61 73 65 20 0a 73 63 68 65 6d 61 20 61 6e 64  base .schema and
113d0 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 2e 20   the disk file. 
113e0 20 54 68 65 20 74 61 62 6c 65 20 63 61 6e 20 6e   The table can n
113f0 6f 74 20 62 65 20 72 65 63 6f 76 65 72 65 64 2e  ot be recovered.
11400 20 20 0a 5e 41 6c 6c 20 69 6e 64 69 63 65 73 20    .^All indices 
11410 61 6e 64 20 74 72 69 67 67 65 72 73 0a 61 73 73  and triggers.ass
11420 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
11430 20 74 61 62 6c 65 20 61 72 65 20 61 6c 73 6f 20   table are also 
11440 64 65 6c 65 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  deleted.</p>..<p
11450 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 49  >^The optional I
11460 46 20 45 58 49 53 54 53 20 63 6c 61 75 73 65 20  F EXISTS clause 
11470 73 75 70 70 72 65 73 73 65 73 20 74 68 65 20 65  suppresses the e
11480 72 72 6f 72 20 74 68 61 74 20 77 6f 75 6c 64 20  rror that would 
11490 6e 6f 72 6d 61 6c 6c 79 0a 72 65 73 75 6c 74 20  normally.result 
114a0 69 66 20 74 68 65 20 74 61 62 6c 65 20 64 6f 65  if the table doe
114b0 73 20 6e 6f 74 20 65 78 69 73 74 2e 3c 2f 70 3e  s not exist.</p>
114c0 0a 0a 3c 70 3e 5e 49 66 20 5b 66 6f 72 65 69 67  ..<p>^If [foreig
114d0 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
114e0 73 5d 20 61 72 65 20 65 6e 61 62 6c 65 64 2c 20  s] are enabled, 
114f0 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63 6f 6d  a DROP TABLE com
11500 6d 61 6e 64 20 70 65 72 66 6f 72 6d 73 20 61 6e  mand performs an
11510 0a 69 6d 70 6c 69 63 69 74 20 5b 44 45 4c 45 54  .implicit [DELET
11520 45 20 7c 20 44 45 4c 45 54 45 20 46 52 4f 4d 5d  E | DELETE FROM]
11530 20 63 6f 6d 6d 61 6e 64 20 62 65 66 6f 72 65 20   command before 
11540 72 65 6d 6f 76 69 6e 67 20 74 68 65 0a 74 61 62  removing the.tab
11550 6c 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  le from the data
11560 62 61 73 65 20 73 63 68 65 6d 61 2e 20 5e 41 6e  base schema. ^An
11570 79 20 74 72 69 67 67 65 72 73 20 61 74 74 61 63  y triggers attac
11580 68 65 64 20 74 6f 20 74 68 65 20 74 61 62 6c 65  hed to the table
11590 20 61 72 65 0a 64 72 6f 70 70 65 64 20 66 72 6f   are.dropped fro
115a0 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  m the database s
115b0 63 68 65 6d 61 20 62 65 66 6f 72 65 20 74 68 65  chema before the
115c0 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45 54 45   implicit DELETE
115d0 20 46 52 4f 4d 0a 69 73 20 65 78 65 63 75 74 65   FROM.is execute
115e0 64 2c 20 73 6f 20 74 68 69 73 20 63 61 6e 6e 6f  d, so this canno
115f0 74 20 63 61 75 73 65 20 61 6e 79 20 74 72 69 67  t cause any trig
11600 67 65 72 73 20 74 6f 20 66 69 72 65 2e 20 42 79  gers to fire. By
11610 20 63 6f 6e 74 72 61 73 74 2c 20 5e 61 6e 0a 69   contrast, ^an.i
11620 6d 70 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46  mplicit DELETE F
11630 52 4f 4d 20 64 6f 65 73 20 63 61 75 73 65 20 61  ROM does cause a
11640 6e 79 20 63 6f 6e 66 69 67 75 72 65 64 0a 5b 66  ny configured.[f
11650 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f  oreign key actio
11660 6e 73 5d 20 74 6f 20 74 61 6b 65 20 70 6c 61 63  ns] to take plac
11670 65 2e 20 0a 5e 49 66 20 74 68 65 20 69 6d 70 6c  e. .^If the impl
11680 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f 4d  icit DELETE FROM
11690 20 65 78 65 63 75 74 65 64 0a 61 73 20 70 61 72   executed.as par
116a0 74 20 6f 66 20 61 20 44 52 4f 50 20 54 41 42 4c  t of a DROP TABL
116b0 45 20 63 6f 6d 6d 61 6e 64 20 76 69 6f 6c 61 74  E command violat
116c0 65 73 20 61 6e 79 20 69 6d 6d 65 64 69 61 74 65  es any immediate
116d0 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
116e0 73 74 72 61 69 6e 74 73 2c 0a 61 6e 20 65 72 72  straints,.an err
116f0 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 61  or is returned a
11700 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  nd the table is 
11710 6e 6f 74 20 64 72 6f 70 70 65 64 2e 20 5e 49 66  not dropped. ^If
11720 20 0a 74 68 65 20 69 6d 70 6c 69 63 69 74 20 44   .the implicit D
11730 45 4c 45 54 45 20 46 52 4f 4d 20 63 61 75 73 65  ELETE FROM cause
11740 73 20 61 6e 79 20 0a 64 65 66 65 72 72 65 64 20  s any .deferred 
11750 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
11760 74 72 61 69 6e 74 73 20 74 6f 20 62 65 20 76 69  traints to be vi
11770 6f 6c 61 74 65 64 2c 20 61 6e 64 20 74 68 65 20  olated, and the 
11780 76 69 6f 6c 61 74 69 6f 6e 73 20 73 74 69 6c 6c  violations still
11790 0a 65 78 69 73 74 20 77 68 65 6e 20 74 68 65 20  .exist when the 
117a0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 63  transaction is c
117b0 6f 6d 6d 69 74 74 65 64 2c 20 61 6e 20 65 72 72  ommitted, an err
117c0 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 61  or is returned a
117d0 74 20 74 68 65 20 74 69 6d 65 0a 6f 66 20 63 6f  t the time.of co
117e0 6d 6d 69 74 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  mmit...<tcl>.###
117f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11800 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11810 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11830 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
11840 69 6f 6e 20 7b 44 52 4f 50 20 54 52 49 47 47 45  ion {DROP TRIGGE
11850 52 7d 20 64 72 6f 70 74 72 69 67 67 65 72 20 7b  R} droptrigger {
11860 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d 7d 0a  {DROP TRIGGER}}.
11870 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
11880 44 69 61 67 72 61 6d 20 64 72 6f 70 2d 74 72 69  Diagram drop-tri
11890 67 67 65 72 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  gger-stmt.</tcl>
118a0 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50 20 54  ..<p>^The DROP T
118b0 52 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74  RIGGER statement
118c0 20 72 65 6d 6f 76 65 73 20 61 20 74 72 69 67 67   removes a trigg
118d0 65 72 20 63 72 65 61 74 65 64 20 62 79 20 74 68  er created by th
118e0 65 20 0a 5b 43 52 45 41 54 45 20 54 52 49 47 47  e .[CREATE TRIGG
118f0 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e  ER] statement. ^
11900 4f 6e 63 65 20 72 65 6d 6f 76 65 64 2c 20 74 68  Once removed, th
11910 65 20 74 72 69 67 67 65 72 20 64 65 66 69 6e 69  e trigger defini
11920 74 69 6f 6e 20 69 73 20 6e 6f 0a 6c 6f 6e 67 65  tion is no.longe
11930 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  r present in the
11940 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 28   sqlite_master (
11950 6f 72 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  or sqlite_temp_m
11960 61 73 74 65 72 29 20 74 61 62 6c 65 20 61 6e 64  aster) table and
11970 20 69 73 0a 6e 6f 74 20 66 69 72 65 64 20 62 79   is.not fired by
11980 20 61 6e 79 20 73 75 62 73 65 71 75 65 6e 74 20   any subsequent 
11990 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f  INSERT, UPDATE o
119a0 72 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  r DELETE stateme
119b0 6e 74 73 2e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74  nts...<p>^Note t
119c0 68 61 74 20 74 72 69 67 67 65 72 73 20 61 72 65  hat triggers are
119d0 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64   automatically d
119e0 72 6f 70 70 65 64 20 77 68 65 6e 20 74 68 65 20  ropped when the 
119f0 61 73 73 6f 63 69 61 74 65 64 20 74 61 62 6c 65  associated table
11a00 20 69 73 0a 64 72 6f 70 70 65 64 2e 0a 0a 3c 74   is.dropped...<t
11a10 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
11a20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a60 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50  ##.Section {DROP
11a70 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65 77 20   VIEW} dropview 
11a80 7b 7b 44 52 4f 50 20 56 49 45 57 7d 7d 0a 0a 52  {{DROP VIEW}}..R
11a90 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
11aa0 61 67 72 61 6d 20 64 72 6f 70 2d 76 69 65 77 2d  agram drop-view-
11ab0 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
11ac0 5e 54 68 65 20 44 52 4f 50 20 56 49 45 57 20 73  ^The DROP VIEW s
11ad0 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73  tatement removes
11ae0 20 61 20 76 69 65 77 20 63 72 65 61 74 65 64 20   a view created 
11af0 62 79 20 74 68 65 20 5b 43 52 45 41 54 45 20 56  by the [CREATE V
11b00 49 45 57 5d 20 0a 20 20 73 74 61 74 65 6d 65 6e  IEW] .  statemen
11b10 74 2e 20 5e 54 68 65 20 76 69 65 77 20 64 65 66  t. ^The view def
11b20 69 6e 69 74 69 6f 6e 20 69 73 20 72 65 6d 6f 76  inition is remov
11b30 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ed from the data
11b40 62 61 73 65 20 73 63 68 65 6d 61 2c 20 62 75 74  base schema, but
11b50 20 0a 20 20 6e 6f 20 61 63 74 75 61 6c 20 64 61   .  no actual da
11b60 74 61 20 69 6e 20 74 68 65 20 75 6e 64 65 72 6c  ta in the underl
11b70 79 69 6e 67 20 62 61 73 65 20 74 61 62 6c 65 73  ying base tables
11b80 20 69 73 20 6d 6f 64 69 66 69 65 64 2e 0a 0a 3c   is modified...<
11b90 70 3e 5e 28 54 68 65 20 76 69 65 77 20 74 6f 20  p>^(The view to 
11ba0 64 72 6f 70 20 69 73 20 69 64 65 6e 74 69 66 69  drop is identifi
11bb0 65 64 20 62 79 20 74 68 65 20 76 69 65 77 2d 6e  ed by the view-n
11bc0 61 6d 65 20 61 6e 64 20 6f 70 74 69 6f 6e 61 6c  ame and optional
11bd0 20 0a 20 20 73 63 68 65 6d 61 2d 6e 61 6d 65 20   .  schema-name 
11be0 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
11bf0 74 20 6f 66 20 74 68 65 20 44 52 4f 50 20 56 49  t of the DROP VI
11c00 45 57 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68  EW statement. Th
11c10 69 73 20 0a 20 20 72 65 66 65 72 65 6e 63 65 20  is .  reference 
11c20 69 73 20 72 65 73 6f 6c 76 65 64 20 75 73 69 6e  is resolved usin
11c30 67 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 70  g the standard p
11c40 72 6f 63 65 64 75 72 65 20 66 6f 72 20 5b 6f 62  rocedure for [ob
11c50 6a 65 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 5d  ject resolution]
11c60 2e 29 5e 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 74  .)^..<p>.  ^If t
11c70 68 65 20 73 70 65 63 69 66 69 65 64 20 76 69 65  he specified vie
11c80 77 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e  w cannot be foun
11c90 64 20 61 6e 64 20 74 68 65 20 49 46 20 45 58 49  d and the IF EXI
11ca0 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 6e 6f  STS clause is no
11cb0 74 20 0a 20 20 70 72 65 73 65 6e 74 2c 20 69 74  t .  present, it
11cc0 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e 49   is an error. ^I
11cd0 66 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  f the specified 
11ce0 76 69 65 77 20 63 61 6e 6e 6f 74 20 62 65 20 66  view cannot be f
11cf0 6f 75 6e 64 20 61 6e 64 20 61 6e 20 49 46 0a 20  ound and an IF. 
11d00 20 45 58 49 53 54 53 20 63 6c 61 75 73 65 20 69   EXISTS clause i
11d10 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  s present in the
11d20 20 44 52 4f 50 20 56 49 45 57 20 73 74 61 74 65   DROP VIEW state
11d30 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 73  ment, then the s
11d40 74 61 74 65 6d 65 6e 74 0a 20 20 69 73 20 61 20  tatement.  is a 
11d50 6e 6f 2d 6f 70 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23  no-op....<tcl>.#
11d60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11d70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11d80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11d90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11da0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
11db0 63 74 69 6f 6e 20 7b 44 61 74 61 62 61 73 65 20  ction {Database 
11dc0 4f 62 6a 65 63 74 20 4e 61 6d 65 20 52 65 73 6f  Object Name Reso
11dd0 6c 75 74 69 6f 6e 7d 20 7b 6e 61 6d 69 6e 67 7d  lution} {naming}
11de0 20 7b 7b 6f 62 6a 65 63 74 20 72 65 73 6f 6c 75   {{object resolu
11df0 74 69 6f 6e 7d 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c  tion}}.</tcl>..<
11e00 70 3e 0a 20 20 49 6e 20 53 51 4c 69 74 65 2c 20  p>.  In SQLite, 
11e10 61 20 64 61 74 61 62 61 73 65 20 6f 62 6a 65 63  a database objec
11e20 74 20 28 61 20 74 61 62 6c 65 2c 20 69 6e 64 65  t (a table, inde
11e30 78 2c 20 74 72 69 67 67 65 72 20 6f 72 20 76 69  x, trigger or vi
11e40 65 77 29 20 69 73 20 69 64 65 6e 74 69 66 69 65  ew) is identifie
11e50 64 0a 20 20 62 79 20 74 68 65 20 6e 61 6d 65 20  d.  by the name 
11e60 6f 66 20 74 68 65 20 6f 62 6a 65 63 74 20 61 6e  of the object an
11e70 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  d the name of th
11e80 65 20 64 61 74 61 62 61 73 65 20 74 68 61 74 20  e database that 
11e90 69 74 20 72 65 73 69 64 65 73 20 69 6e 2e 20 0a  it resides in. .
11ea0 20 20 44 61 74 61 62 61 73 65 20 6f 62 6a 65 63    Database objec
11eb0 74 73 20 6d 61 79 20 72 65 73 69 64 65 20 69 6e  ts may reside in
11ec0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
11ed0 73 65 2c 20 74 68 65 20 74 65 6d 70 20 64 61 74  se, the temp dat
11ee0 61 62 61 73 65 2c 20 6f 72 20 69 6e 0a 20 20 61  abase, or in.  a
11ef0 6e 20 5b 41 54 54 41 43 48 7c 61 74 74 61 63 68  n [ATTACH|attach
11f00 65 64 20 64 61 74 61 62 61 73 65 5d 2e 0a 0a 3c  ed database]...<
11f10 70 3e 0a 20 20 54 68 65 20 73 79 6e 74 61 78 20  p>.  The syntax 
11f20 6f 66 20 74 68 65 20 5b 44 52 4f 50 20 54 41 42  of the [DROP TAB
11f30 4c 45 5d 2c 20 5b 44 52 4f 50 20 49 4e 44 45 58  LE], [DROP INDEX
11f40 5d 2c 20 5b 44 52 4f 50 20 56 49 45 57 5d 2c 20  ], [DROP VIEW], 
11f50 5b 44 52 4f 50 20 54 52 49 47 47 45 52 5d 2c 0a  [DROP TRIGGER],.
11f60 20 20 5b 52 45 49 4e 44 45 58 5d 2c 20 5b 41 4c    [REINDEX], [AL
11f70 54 45 52 20 54 41 42 4c 45 5d 20 61 6e 64 20 6d  TER TABLE] and m
11f80 61 6e 79 20 6f 74 68 65 72 20 63 6f 6d 6d 61 6e  any other comman
11f90 64 73 20 61 6c 6c 20 70 65 72 6d 69 74 20 74 68  ds all permit th
11fa0 65 20 75 73 65 72 20 74 6f 0a 20 20 73 70 65 63  e user to.  spec
11fb0 69 66 79 20 61 20 64 61 74 61 62 61 73 65 20 6f  ify a database o
11fc0 62 6a 65 63 74 20 65 69 74 68 65 72 20 62 79 20  bject either by 
11fd0 69 74 73 20 6e 61 6d 65 20 61 6c 6f 6e 65 2c 20  its name alone, 
11fe0 6f 72 20 62 79 20 61 20 63 6f 6d 62 69 6e 61 74  or by a combinat
11ff0 69 6f 6e 20 6f 66 0a 20 20 69 74 73 20 6e 61 6d  ion of.  its nam
12000 65 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f  e and the name o
12010 66 20 69 74 73 20 64 61 74 61 62 61 73 65 2e 20  f its database. 
12020 5e 28 49 66 20 6e 6f 20 64 61 74 61 62 61 73 65  ^(If no database
12030 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73   is specified as
12040 20 70 61 72 74 0a 20 20 6f 66 20 74 68 65 20 6f   part.  of the o
12050 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 2c  bject reference,
12060 20 74 68 65 6e 20 53 51 4c 69 74 65 20 73 65 61   then SQLite sea
12070 72 63 68 65 73 20 74 68 65 20 6d 61 69 6e 2c 20  rches the main, 
12080 74 65 6d 70 20 61 6e 64 20 61 6c 6c 20 61 74 74  temp and all att
12090 61 63 68 65 64 0a 20 20 64 61 74 61 62 61 73 65  ached.  database
120a0 73 20 66 6f 72 20 61 6e 20 6f 62 6a 65 63 74 20  s for an object 
120b0 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20  with a matching 
120c0 6e 61 6d 65 2e 20 54 68 65 20 74 65 6d 70 20 64  name. The temp d
120d0 61 74 61 62 61 73 65 20 69 73 20 73 65 61 72 63  atabase is searc
120e0 68 65 64 0a 20 20 66 69 72 73 74 2c 20 66 6f 6c  hed.  first, fol
120f0 6c 6f 77 65 64 20 62 79 20 74 68 65 20 6d 61 69  lowed by the mai
12100 6e 20 64 61 74 61 62 61 73 65 2c 20 66 6f 6c 6c  n database, foll
12110 6f 77 65 64 20 61 6c 6c 20 61 74 74 61 63 68 65  owed all attache
12120 64 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 74  d databases in t
12130 68 65 0a 20 20 6f 72 64 65 72 20 74 68 61 74 20  he.  order that 
12140 74 68 65 79 20 77 65 72 65 20 61 74 74 61 63 68  they were attach
12150 65 64 2e 20 54 68 65 20 72 65 66 65 72 65 6e 63  ed. The referenc
12160 65 20 72 65 73 6f 6c 76 65 73 20 74 6f 20 74 68  e resolves to th
12170 65 20 66 69 72 73 74 20 6d 61 74 63 68 0a 20 20  e first match.  
12180 66 6f 75 6e 64 2e 29 5e 20 46 6f 72 20 65 78 61  found.)^ For exa
12190 6d 70 6c 65 3a 0a 0a 3c 70 72 65 3e 5e 28 0a 20  mple:..<pre>^(. 
121a0 20 20 20 20 20 2f 2a 20 41 64 64 20 61 20 74 61       /* Add a ta
121b0 62 6c 65 20 6e 61 6d 65 64 20 27 74 31 27 20 74  ble named 't1' t
121c0 6f 20 74 68 65 20 74 65 6d 70 2c 20 6d 61 69 6e  o the temp, main
121d0 20 61 6e 64 20 61 6e 20 61 74 74 61 63 68 65 64   and an attached
121e0 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20   database */.   
121f0 20 20 20 41 54 54 41 43 48 20 27 66 69 6c 65 2e     ATTACH 'file.
12200 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20  db' AS aux;.    
12210 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
12220 31 28 78 2c 20 79 29 3b 0a 20 20 20 20 20 20 43  1(x, y);.      C
12230 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45  REATE TEMP TABLE
12240 20 74 31 28 78 2c 20 79 29 3b 0a 20 20 20 20 20   t1(x, y);.     
12250 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75   CREATE TABLE au
12260 78 2e 74 31 28 78 2c 20 79 29 3b 0a 0a 20 20 20  x.t1(x, y);..   
12270 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31     DROP TABLE t1
12280 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f  ;         /* Dro
12290 70 20 74 61 62 6c 65 20 69 6e 20 74 65 6d 70 20  p table in temp 
122a0 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20  database */.    
122b0 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b    DROP TABLE t1;
122c0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70           /* Drop
122d0 20 74 61 62 6c 65 20 69 6e 20 6d 61 69 6e 20 64   table in main d
122e0 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20  atabase */.     
122f0 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20   DROP TABLE t1; 
12300 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20          /* Drop 
12310 74 61 62 6c 65 20 69 6e 20 61 75 78 20 64 61 74  table in aux dat
12320 61 62 61 73 65 20 2a 2f 0a 29 5e 3c 2f 70 72 65  abase */.)^</pre
12330 3e 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 61 20 73  >..<p>.  ^If a s
12340 63 68 65 6d 61 20 6e 61 6d 65 20 69 73 20 73 70  chema name is sp
12350 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
12360 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 72 65 66  of an object ref
12370 65 72 65 6e 63 65 2c 20 69 74 20 6d 75 73 74 20  erence, it must 
12380 62 65 0a 20 20 65 69 74 68 65 72 20 22 6d 61 69  be.  either "mai
12390 6e 22 2c 20 6f 72 20 22 74 65 6d 70 22 20 6f 72  n", or "temp" or
123a0 20 74 68 65 20 73 63 68 65 6d 61 2d 6e 61 6d 65   the schema-name
123b0 20 6f 66 20 61 6e 20 61 74 74 61 63 68 65 64 20   of an attached 
123c0 64 61 74 61 62 61 73 65 2e 0a 20 20 5e 4c 69 6b  database..  ^Lik
123d0 65 20 6f 74 68 65 72 20 53 51 4c 20 69 64 65 6e  e other SQL iden
123e0 74 69 66 69 65 72 73 2c 20 73 63 68 65 6d 61 20  tifiers, schema 
123f0 6e 61 6d 65 73 20 61 72 65 20 63 61 73 65 2d 69  names are case-i
12400 6e 73 65 6e 73 69 74 69 76 65 2e 0a 20 20 5e 49  nsensitive..  ^I
12410 66 20 61 20 73 63 68 65 6d 61 20 6e 61 6d 65 20  f a schema name 
12420 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  is specified, th
12430 65 6e 20 6f 6e 6c 79 20 74 68 61 74 20 6f 6e 65  en only that one
12440 20 73 63 68 65 6d 61 20 69 73 20 73 65 61 72 63   schema is searc
12450 68 65 64 20 66 6f 72 0a 20 20 74 68 65 20 6e 61  hed for.  the na
12460 6d 65 64 20 6f 62 6a 65 63 74 2e 0a 0a 3c 70 3e  med object...<p>
12470 0a 20 20 4d 6f 73 74 20 6f 62 6a 65 63 74 20 72  .  Most object r
12480 65 66 65 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e  eferences may on
12490 6c 79 20 72 65 73 6f 6c 76 65 20 74 6f 20 61 20  ly resolve to a 
124a0 73 70 65 63 69 66 69 63 20 74 79 70 65 20 6f 66  specific type of
124b0 20 6f 62 6a 65 63 74 20 28 66 6f 72 0a 20 20 65   object (for.  e
124c0 78 61 6d 70 6c 65 20 61 20 72 65 66 65 72 65 6e  xample a referen
124d0 63 65 20 74 68 61 74 20 69 73 20 70 61 72 74 20  ce that is part 
124e0 6f 66 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20  of a DROP TABLE 
124f0 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6f 6e  statement may on
12500 6c 79 20 72 65 73 6f 6c 76 65 0a 20 20 74 6f 20  ly resolve.  to 
12510 61 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  a table object, 
12520 6e 6f 74 20 61 6e 20 69 6e 64 65 78 2c 20 74 72  not an index, tr
12530 69 67 67 65 72 20 6f 72 20 76 69 65 77 29 2e 20  igger or view). 
12540 48 6f 77 65 76 65 72 20 69 6e 20 73 6f 6d 65 20  However in some 
12550 63 6f 6e 74 65 78 74 73 20 0a 20 20 28 65 2e 67  contexts .  (e.g
12560 2e 20 5b 52 45 49 4e 44 45 58 5d 29 20 61 6e 20  . [REINDEX]) an 
12570 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65  object reference
12580 20 6d 61 79 20 62 65 20 72 65 73 6f 6c 76 65 20   may be resolve 
12590 74 6f 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  to more than one
125a0 20 74 79 70 65 0a 20 20 6f 66 20 6f 62 6a 65 63   type.  of objec
125b0 74 2e 20 5e 57 68 65 6e 20 73 65 61 72 63 68 69  t. ^When searchi
125c0 6e 67 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ng database sche
125d0 6d 61 73 20 66 6f 72 20 61 20 6e 61 6d 65 64 20  mas for a named 
125e0 6f 62 6a 65 63 74 2c 20 6f 62 6a 65 63 74 73 20  object, objects 
125f0 6f 66 0a 20 20 74 79 70 65 73 20 74 68 61 74 20  of.  types that 
12600 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 69  cannot be used i
12610 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66  n the context of
12620 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 20 61   the reference a
12630 72 65 20 61 6c 77 61 79 73 20 0a 20 20 69 67 6e  re always .  ign
12640 6f 72 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  ored...<tcl>.###
12650 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12670 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12690 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
126a0 69 6f 6e 20 45 58 50 4c 41 49 4e 20 65 78 70 6c  ion EXPLAIN expl
126b0 61 69 6e 20 45 58 50 4c 41 49 4e 0a 0a 42 75 62  ain EXPLAIN..Bub
126c0 62 6c 65 44 69 61 67 72 61 6d 20 73 71 6c 2d 73  bleDiagram sql-s
126d0 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tmt.</tcl>..<p>^
126e0 41 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  An SQL statement
126f0 20 63 61 6e 20 62 65 20 70 72 65 63 65 64 65 64   can be preceded
12700 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64 20   by the keyword 
12710 22 45 58 50 4c 41 49 4e 22 20 6f 72 0a 62 79 20  "EXPLAIN" or.by 
12720 74 68 65 20 70 68 72 61 73 65 20 22 45 58 50 4c  the phrase "EXPL
12730 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 22 2e  AIN QUERY PLAN".
12740 20 20 5e 45 69 74 68 65 72 20 6d 6f 64 69 66 69    ^Either modifi
12750 63 61 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68  cation causes th
12760 65 0a 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e.SQL statement 
12770 74 6f 20 62 65 68 61 76 65 20 61 73 20 61 20 71  to behave as a q
12780 75 65 72 79 20 61 6e 64 20 74 6f 20 72 65 74 75  uery and to retu
12790 72 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  rn information a
127a0 62 6f 75 74 0a 68 6f 77 20 74 68 65 20 53 51 4c  bout.how the SQL
127b0 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64   statement would
127c0 20 68 61 76 65 20 6f 70 65 72 61 74 65 64 20 69   have operated i
127d0 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65  f the EXPLAIN ke
127e0 79 77 6f 72 64 20 6f 72 0a 70 68 72 61 73 65 20  yword or.phrase 
127f0 68 61 64 20 62 65 65 6e 20 6f 6d 69 74 74 65 64  had been omitted
12800 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75  .</p>..<p>The ou
12810 74 70 75 74 20 66 72 6f 6d 20 45 58 50 4c 41 49  tput from EXPLAI
12820 4e 20 61 6e 64 20 45 58 50 4c 41 49 4e 20 51 55  N and EXPLAIN QU
12830 45 52 59 20 50 4c 41 4e 20 69 73 20 69 6e 74 65  ERY PLAN is inte
12840 6e 64 65 64 20 66 6f 72 0a 69 6e 74 65 72 61 63  nded for.interac
12850 74 69 76 65 20 61 6e 61 6c 79 73 69 73 20 61 6e  tive analysis an
12860 64 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74 69 6e  d troubleshootin
12870 67 20 6f 6e 6c 79 2e 20 20 54 68 65 20 64 65 74  g only.  The det
12880 61 69 6c 73 20 6f 66 20 74 68 65 20 0a 6f 75 74  ails of the .out
12890 70 75 74 20 66 6f 72 6d 61 74 20 61 72 65 20 73  put format are s
128a0 75 62 6a 65 63 74 20 74 6f 20 63 68 61 6e 67 65  ubject to change
128b0 20 66 72 6f 6d 20 6f 6e 65 20 72 65 6c 65 61 73   from one releas
128c0 65 20 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 74  e of SQLite to t
128d0 68 65 20 6e 65 78 74 2e 0a 41 70 70 6c 69 63 61  he next..Applica
128e0 74 69 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74  tions should not
128f0 20 75 73 65 20 45 58 50 4c 41 49 4e 20 6f 72 20   use EXPLAIN or 
12900 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
12910 41 4e 20 73 69 6e 63 65 0a 74 68 65 69 72 20 65  AN since.their e
12920 78 61 63 74 20 62 65 68 61 76 69 6f 72 20 69 73  xact behavior is
12930 20 76 61 72 69 61 62 6c 65 20 61 6e 64 20 6f 6e   variable and on
12940 6c 79 20 70 61 72 74 69 61 6c 6c 79 20 64 6f 63  ly partially doc
12950 75 6d 65 6e 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  umented.</p>..<p
12960 3e 5e 57 68 65 6e 20 74 68 65 20 45 58 50 4c 41  >^When the EXPLA
12970 49 4e 20 6b 65 79 77 6f 72 64 20 61 70 70 65 61  IN keyword appea
12980 72 73 20 62 79 20 69 74 73 65 6c 66 20 69 74 20  rs by itself it 
12990 63 61 75 73 65 73 20 74 68 65 20 73 74 61 74 65  causes the state
129a0 6d 65 6e 74 0a 74 6f 20 62 65 68 61 76 65 20 61  ment.to behave a
129b0 73 20 61 20 71 75 65 72 79 20 74 68 61 74 20 72  s a query that r
129c0 65 74 75 72 6e 73 20 74 68 65 20 73 65 71 75 65  eturns the seque
129d0 6e 63 65 20 6f 66 20 0a 5b 76 69 72 74 75 61 6c  nce of .[virtual
129e0 20 6d 61 63 68 69 6e 65 20 69 6e 73 74 72 75 63   machine instruc
129f0 74 69 6f 6e 73 5d 20 69 74 20 77 6f 75 6c 64 20  tions] it would 
12a00 68 61 76 65 20 75 73 65 64 20 74 6f 20 65 78 65  have used to exe
12a10 63 75 74 65 20 74 68 65 20 63 6f 6d 6d 61 6e 64  cute the command
12a20 20 68 61 64 0a 74 68 65 20 45 58 50 4c 41 49 4e   had.the EXPLAIN
12a30 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 62 65 65   keyword not bee
12a40 6e 20 70 72 65 73 65 6e 74 2e 20 5e 57 68 65 6e  n present. ^When
12a50 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45   the EXPLAIN QUE
12a60 52 59 20 50 4c 41 4e 20 70 68 72 61 73 65 0a 61  RY PLAN phrase.a
12a70 70 70 65 61 72 73 2c 20 74 68 65 20 73 74 61 74  ppears, the stat
12a80 65 6d 65 6e 74 20 72 65 74 75 72 6e 73 20 68 69  ement returns hi
12a90 67 68 2d 6c 65 76 65 6c 20 69 6e 66 6f 72 6d 61  gh-level informa
12aa0 74 69 6f 6e 20 72 65 67 61 72 64 69 6e 67 20 74  tion regarding t
12ab0 68 65 20 71 75 65 72 79 0a 70 6c 61 6e 20 74 68  he query.plan th
12ac0 61 74 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65  at would have be
12ad0 65 6e 20 75 73 65 64 2e 0a 0a 54 68 65 20 45 58  en used...The EX
12ae0 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
12af0 20 63 6f 6d 6d 61 6e 64 20 69 73 20 64 65 73 63   command is desc
12b00 72 69 62 65 64 20 69 6e 20 0a 5b 65 78 70 6c 61  ribed in .[expla
12b10 69 6e 20 71 75 65 72 79 20 70 6c 61 6e 7c 6d 6f  in query plan|mo
12b20 72 65 20 64 65 74 61 69 6c 20 68 65 72 65 5d 2e  re detail here].
12b30 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
12b40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12b50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12b60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12b70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12b80 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 65  ######.Section e
12b90 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72 20 7b  xpression expr {
12ba0 2a 65 78 70 72 65 73 73 69 6f 6e 20 7b 65 78 70  *expression {exp
12bb0 72 65 73 73 69 6f 6e 20 73 79 6e 74 61 78 7d 7d  ression syntax}}
12bc0 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
12bd0 65 44 69 61 67 72 61 6d 20 65 78 70 72 0a 3c 2f  eDiagram expr.</
12be0 74 63 6c 3e 0a 0a 3c 70 3e 54 68 69 73 20 73 65  tcl>..<p>This se
12bf0 63 74 69 6f 6e 20 69 73 20 64 69 66 66 65 72 65  ction is differe
12c00 6e 74 20 66 72 6f 6d 20 74 68 65 20 6f 74 68 65  nt from the othe
12c10 72 73 2e 20 20 4d 6f 73 74 20 6f 74 68 65 72 20  rs.  Most other 
12c20 73 65 63 74 69 6f 6e 73 20 6f 66 0a 74 68 69 73  sections of.this
12c30 20 64 6f 63 75 6d 65 6e 74 20 74 61 6c 6b 73 20   document talks 
12c40 61 62 6f 75 74 20 61 20 70 61 72 74 69 63 75 6c  about a particul
12c50 61 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20  ar SQL command. 
12c60 20 54 68 69 73 20 73 65 63 74 69 6f 6e 20 64 6f   This section do
12c70 65 73 0a 6e 6f 74 20 74 61 6c 6b 20 61 62 6f 75  es.not talk abou
12c80 74 20 61 20 73 74 61 6e 64 61 6c 6f 6e 65 20 63  t a standalone c
12c90 6f 6d 6d 61 6e 64 20 62 75 74 20 61 62 6f 75 74  ommand but about
12ca0 20 22 65 78 70 72 65 73 73 69 6f 6e 73 22 20 77   "expressions" w
12cb0 68 69 63 68 20 61 72 65 20 0a 73 75 62 63 6f 6d  hich are .subcom
12cc0 70 6f 6e 65 6e 74 73 20 6f 66 20 6d 6f 73 74 20  ponents of most 
12cd0 6f 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 2e 3c  other commands.<
12ce0 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
12cf0 67 6d 65 6e 74 20 62 69 6e 61 72 79 6f 70 73 20  gment binaryops 
12d00 7b 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72  {binary operator
12d10 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 70 65  s}</tcl>.<h3>Ope
12d20 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e  rators</h3>.<p>^
12d30 28 53 51 4c 69 74 65 20 75 6e 64 65 72 73 74 61  (SQLite understa
12d40 6e 64 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  nds the followin
12d50 67 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  g binary operato
12d60 72 73 2c 20 69 6e 20 6f 72 64 65 72 20 66 72 6f  rs, in order fro
12d70 6d 0a 68 69 67 68 65 73 74 20 74 6f 20 6c 6f 77  m.highest to low
12d80 65 73 74 20 70 72 65 63 65 64 65 6e 63 65 3a 3c  est precedence:<
12d90 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
12da0 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c  ><pre>.<font col
12db0 6f 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69  or="#2c2cf0"><bi
12dc0 67 3e 7c 7c 0a 2a 20 20 20 20 2f 20 20 20 20 25  g>||.*    /    %
12dd0 0a 2b 20 20 20 20 2d 0a 26 6c 74 3b 26 6c 74 3b  .+    -.&lt;&lt;
12de0 20 20 20 26 67 74 3b 26 67 74 3b 20 20 20 26 61     &gt;&gt;   &a
12df0 6d 70 3b 20 20 20 20 7c 0a 26 6c 74 3b 20 20 20  mp;    |.&lt;   
12e00 20 26 6c 74 3b 3d 20 20 20 26 67 74 3b 20 20 20   &lt;=   &gt;   
12e10 20 26 67 74 3b 3d 0a 3d 20 20 20 20 3d 3d 20 20   &gt;=.=    ==  
12e20 20 21 3d 20 20 20 26 6c 74 3b 26 67 74 3b 20 20   !=   &lt;&gt;  
12e30 20 3c 2f 62 69 67 3e 49 53 20 20 20 49 53 20 4e   </big>IS   IS N
12e40 4f 54 20 20 20 49 4e 20 20 20 4c 49 4b 45 20 20  OT   IN   LIKE  
12e50 20 47 4c 4f 42 20 20 20 4d 41 54 43 48 20 20 20   GLOB   MATCH   
12e60 52 45 47 45 58 50 0a 41 4e 44 20 20 20 0a 4f 52  REGEXP.AND   .OR
12e70 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f  </font>.</pre></
12e80 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
12e90 70 3e 5e 28 53 75 70 70 6f 72 74 65 64 20 75 6e  p>^(Supported un
12ea0 61 72 79 20 70 72 65 66 69 78 20 6f 70 65 72 61  ary prefix opera
12eb0 74 6f 72 73 20 61 72 65 20 74 68 65 73 65 3a 3c  tors are these:<
12ec0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
12ed0 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c  ><pre>.<font col
12ee0 6f 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69  or="#2c2cf0"><bi
12ef0 67 3e 2d 20 20 20 20 2b 20 20 20 20 7e 20 20 20  g>-    +    ~   
12f00 20 4e 4f 54 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74   NOT</big></font
12f10 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  >.</pre></blockq
12f20 75 6f 74 65 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64  uote>)^..<tcl>hd
12f30 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6c 6c 61 74  _fragment collat
12f40 65 6f 70 20 7b 43 4f 4c 4c 41 54 45 20 6f 70 65  eop {COLLATE ope
12f50 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  rator}</tcl>.<p>
12f60 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65  ^The COLLATE ope
12f70 72 61 74 6f 72 20 69 73 20 61 20 75 6e 61 72 79  rator is a unary
12f80 20 70 6f 73 74 66 69 78 0a 6f 70 65 72 61 74 6f   postfix.operato
12f90 72 20 74 68 61 74 20 61 73 73 69 67 6e 73 20 61  r that assigns a
12fa0 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75   [collating sequ
12fb0 65 6e 63 65 5d 20 74 6f 20 61 6e 20 65 78 70 72  ence] to an expr
12fc0 65 73 73 69 6f 6e 2e 0a 5e 54 68 65 20 43 4f 4c  ession..^The COL
12fd0 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 68 61  LATE operator ha
12fe0 73 20 61 20 68 69 67 68 65 72 20 70 72 65 63 65  s a higher prece
12ff0 64 65 6e 63 65 20 28 62 69 6e 64 73 20 6d 6f 72  dence (binds mor
13000 65 20 74 69 67 68 74 6c 79 29 20 74 68 61 6e 20  e tightly) than 
13010 61 6e 79 0a 62 69 6e 61 72 79 20 6f 70 65 72 61  any.binary opera
13020 74 6f 72 20 61 6e 64 20 61 6e 79 20 75 6e 61 72  tor and any unar
13030 79 20 70 72 65 66 69 78 20 6f 70 65 72 61 74 6f  y prefix operato
13040 72 20 65 78 63 65 70 74 20 22 7e 22 2e 0a 28 43  r except "~"..(C
13050 4f 4c 4c 41 54 45 20 61 6e 64 20 22 7e 22 20 61  OLLATE and "~" a
13060 72 65 20 61 73 73 6f 63 69 61 74 69 76 65 20 73  re associative s
13070 6f 20 74 68 65 69 72 20 62 69 6e 64 69 6e 67 20  o their binding 
13080 6f 72 64 65 72 20 64 6f 65 73 20 6e 6f 74 20 6d  order does not m
13090 61 74 74 65 72 2e 29 0a 5e 54 68 65 20 63 6f 6c  atter.).^The col
130a0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
130b0 73 65 74 20 62 79 20 74 68 65 20 43 4f 4c 4c 41  set by the COLLA
130c0 54 45 20 6f 70 65 72 61 74 6f 72 20 6f 76 65 72  TE operator over
130d0 72 69 64 65 73 20 74 68 65 0a 63 6f 6c 6c 61 74  rides the.collat
130e0 69 6e 67 20 73 65 71 75 65 6e 63 65 20 64 65 74  ing sequence det
130f0 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 43  ermined by the C
13100 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 69 6e  OLLATE clause in
13110 20 61 20 74 61 62 6c 65 0a 5b 63 6f 6c 75 6d 6e   a table.[column
13120 20 64 65 66 69 6e 69 74 69 6f 6e 5d 2e 0a 53 65   definition]..Se
13130 65 20 74 68 65 20 5b 63 6f 6c 6c 61 74 69 6e 67  e the [collating
13140 20 73 65 71 75 65 6e 63 65 7c 20 64 65 74 61 69   sequence| detai
13150 6c 65 64 20 64 69 73 63 75 73 73 69 6f 6e 20 6f  led discussion o
13160 6e 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  n collating sequ
13170 65 6e 63 65 73 5d 0a 69 6e 20 74 68 65 20 5b 64  ences].in the [d
13180 61 74 61 74 79 70 65 20 7c 20 44 61 74 61 74 79  atatype | Dataty
13190 70 65 20 49 6e 20 53 51 4c 69 74 65 33 5d 20 64  pe In SQLite3] d
131a0 6f 63 75 6d 65 6e 74 20 66 6f 72 20 61 64 64 69  ocument for addi
131b0 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
131c0 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  on..</p>..<tcl>h
131d0 64 5f 70 75 74 73 20 22 0a 3c 70 3e 5e 54 68 65  d_puts ".<p>^The
131e0 20 75 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20   unary operator 
131f0 5b 4f 70 65 72 61 74 6f 72 20 2b 5d 20 69 73 20  [Operator +] is 
13200 61 20 6e 6f 2d 6f 70 2e 20 20 5e 49 74 20 63 61  a no-op.  ^It ca
13210 6e 20 62 65 20 61 70 70 6c 69 65 64 0a 74 6f 20  n be applied.to 
13220 73 74 72 69 6e 67 73 2c 20 6e 75 6d 62 65 72 73  strings, numbers
13230 2c 20 62 6c 6f 62 73 20 6f 72 20 4e 55 4c 4c 20  , blobs or NULL 
13240 61 6e 64 20 69 74 20 61 6c 77 61 79 73 20 72 65  and it always re
13250 74 75 72 6e 73 20 61 20 72 65 73 75 6c 74 0a 77  turns a result.w
13260 69 74 68 20 74 68 65 20 73 61 6d 65 20 76 61 6c  ith the same val
13270 75 65 20 61 73 20 74 68 65 20 6f 70 65 72 61 6e  ue as the operan
13280 64 2e 3c 2f 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c  d.</p>"</tcl>..<
13290 70 3e 4e 6f 74 65 20 74 68 61 74 20 74 68 65 72  p>Note that ther
132a0 65 20 61 72 65 20 74 77 6f 20 76 61 72 69 61 74  e are two variat
132b0 69 6f 6e 73 20 6f 66 20 74 68 65 20 65 71 75 61  ions of the equa
132c0 6c 73 20 61 6e 64 20 6e 6f 74 20 65 71 75 61 6c  ls and not equal
132d0 73 0a 6f 70 65 72 61 74 6f 72 73 2e 20 20 5e 45  s.operators.  ^E
132e0 71 75 61 6c 73 20 63 61 6e 20 62 65 20 65 69 74  quals can be eit
132f0 68 65 72 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 70 75  her..<tcl>.hd_pu
13300 74 73 20 22 5b 4f 70 65 72 61 74 6f 72 20 3d 5d  ts "[Operator =]
13310 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 3d 3d   or [Operator ==
13320 5d 2e 0a 5e 54 68 65 20 6e 6f 6e 2d 65 71 75 61  ]..^The non-equa
13330 6c 73 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20  ls operator can 
13340 62 65 20 65 69 74 68 65 72 0a 5b 4f 70 65 72 61  be either.[Opera
13350 74 6f 72 20 21 3d 5d 20 6f 72 20 5b 4f 70 65 72  tor !=] or [Oper
13360 61 74 6f 72 20 7b 26 6c 74 3b 26 67 74 3b 7d 5d  ator {&lt;&gt;}]
13370 2e 0a 5e 54 68 65 20 5b 4f 70 65 72 61 74 6f 72  ..^The [Operator
13380 20 7c 7c 5d 20 6f 70 65 72 61 74 6f 72 20 69 73   ||] operator is
13390 20 5c 22 63 6f 6e 63 61 74 65 6e 61 74 65 5c 22   \"concatenate\"
133a0 20 2d 20 69 74 20 6a 6f 69 6e 73 20 74 6f 67 65   - it joins toge
133b0 74 68 65 72 0a 74 68 65 20 74 77 6f 20 73 74 72  ther.the two str
133c0 69 6e 67 73 20 6f 66 20 69 74 73 20 6f 70 65 72  ings of its oper
133d0 61 6e 64 73 2e 0a 5e 54 68 65 20 6f 70 65 72 61  ands..^The opera
133e0 74 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 25 5d  tor [Operator %]
133f0 20 6f 75 74 70 75 74 73 20 74 68 65 20 76 61 6c   outputs the val
13400 75 65 20 6f 66 20 69 74 73 20 6c 65 66 74 20 0a  ue of its left .
13410 6f 70 65 72 61 6e 64 20 6d 6f 64 75 6c 6f 20 69  operand modulo i
13420 74 73 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  ts right operand
13430 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 72  .</p>..<p>^The r
13440 65 73 75 6c 74 20 6f 66 20 61 6e 79 20 62 69 6e  esult of any bin
13450 61 72 79 20 6f 70 65 72 61 74 6f 72 20 69 73 20  ary operator is 
13460 65 69 74 68 65 72 20 61 20 6e 75 6d 65 72 69 63  either a numeric
13470 20 76 61 6c 75 65 20 6f 72 20 0a 4e 55 4c 4c 2c   value or .NULL,
13480 20 65 78 63 65 70 74 20 66 6f 72 20 74 68 65 20   except for the 
13490 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20 63 6f  [Operator ||] co
134a0 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f 70 65 72  ncatenation oper
134b0 61 74 6f 72 20 77 68 69 63 68 20 61 6c 77 61 79  ator which alway
134c0 73 20 0a 65 76 61 6c 75 61 74 65 73 20 74 6f 20  s .evaluates to 
134d0 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61  either NULL or a
134e0 20 74 65 78 74 20 76 61 6c 75 65 2e 3c 2f 70 3e   text value.</p>
134f0 22 0a 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b  "..hd_fragment {
13500 69 73 69 73 6e 6f 74 7d 20 7b 49 53 20 6f 70 65  isisnot} {IS ope
13510 72 61 74 6f 72 7d 20 7b 49 53 20 4e 4f 54 20 6f  rator} {IS NOT o
13520 70 65 72 61 74 6f 72 7d 0a 0a 68 64 5f 70 75 74  perator}..hd_put
13530 73 20 22 3c 70 3e 5e 54 68 65 20 5b 4f 70 65 72  s "<p>^The [Oper
13540 61 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f 70  ator IS] and [Op
13550 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d  erator {IS NOT}]
13560 20 6f 70 65 72 61 74 6f 72 73 20 77 6f 72 6b 0a   operators work.
13570 6c 69 6b 65 20 5b 4f 70 65 72 61 74 6f 72 20 3d  like [Operator =
13580 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20  ] and [Operator 
13590 21 3d 5d 20 65 78 63 65 70 74 20 77 68 65 6e 20  !=] except when 
135a0 6f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 66 20 74  one or both of t
135b0 68 65 0a 6f 70 65 72 61 6e 64 73 20 61 72 65 20  he.operands are 
135c0 4e 55 4c 4c 2e 20 5e 49 6e 20 74 68 69 73 20 63  NULL. ^In this c
135d0 61 73 65 2c 20 69 66 20 62 6f 74 68 20 6f 70 65  ase, if both ope
135e0 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20  rands are NULL, 
135f0 74 68 65 6e 20 74 68 65 0a 49 53 20 6f 70 65 72  then the.IS oper
13600 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74  ator evaluates t
13610 6f 20 31 20 28 74 72 75 65 29 20 61 6e 64 20 74  o 1 (true) and t
13620 68 65 20 49 53 20 4e 4f 54 20 6f 70 65 72 61 74  he IS NOT operat
13630 6f 72 20 65 76 61 6c 75 61 74 65 73 0a 74 6f 20  or evaluates.to 
13640 30 20 28 66 61 6c 73 65 29 2e 20 5e 49 66 20 6f  0 (false). ^If o
13650 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  ne operand is NU
13660 4c 4c 20 61 6e 64 20 74 68 65 20 6f 74 68 65 72  LL and the other
13670 20 69 73 20 6e 6f 74 2c 20 74 68 65 6e 20 74 68   is not, then th
13680 65 0a 49 53 20 6f 70 65 72 61 74 6f 72 20 65 76  e.IS operator ev
13690 61 6c 75 61 74 65 73 20 74 6f 20 30 20 28 66 61  aluates to 0 (fa
136a0 6c 73 65 29 20 61 6e 64 20 74 68 65 20 49 53 20  lse) and the IS 
136b0 4e 4f 54 20 6f 70 65 72 61 74 6f 72 20 69 73 20  NOT operator is 
136c0 31 20 28 74 72 75 65 29 2e 0a 5e 49 74 20 69 73  1 (true)..^It is
136d0 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 66 6f   not possible fo
136e0 72 20 61 6e 20 49 53 20 6f 72 20 49 53 20 4e 4f  r an IS or IS NO
136f0 54 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20  T expression to 
13700 65 76 61 6c 75 61 74 65 20 74 6f 20 4e 55 4c 4c  evaluate to NULL
13710 2e 0a 5e 4f 70 65 72 61 74 6f 72 73 20 5b 4f 70  ..^Operators [Op
13720 65 72 61 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b  erator IS] and [
13730 4f 70 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54  Operator {IS NOT
13740 7d 5d 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  }] have the same
13750 20 0a 70 72 65 63 65 64 65 6e 63 65 20 61 73 20   .precedence as 
13760 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 2e 22 0a 0a  [Operator =]."..
13770 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
13780 20 6c 69 74 76 61 6c 75 65 20 7b 6c 69 74 65 72   litvalue {liter
13790 61 6c 20 76 61 6c 75 65 7d 3c 2f 74 63 6c 3e 0a  al value}</tcl>.
137a0 3c 68 33 3e 4c 69 74 65 72 61 6c 20 56 61 6c 75  <h3>Literal Valu
137b0 65 73 20 28 43 6f 6e 73 74 61 6e 74 73 29 3c 2f  es (Constants)</
137c0 68 33 3e 0a 3c 70 3e 0a 41 20 6c 69 74 65 72 61  h3>.<p>.A litera
137d0 6c 20 76 61 6c 75 65 20 72 65 70 72 65 73 65 6e  l value represen
137e0 74 73 20 61 20 63 6f 6e 73 74 61 6e 74 2e 0a 5e  ts a constant..^
137f0 4c 69 74 65 72 61 6c 20 76 61 6c 75 65 73 20 6d  Literal values m
13800 61 79 20 62 65 20 69 6e 74 65 67 65 72 73 2c 20  ay be integers, 
13810 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e  floating point n
13820 75 6d 62 65 72 73 2c 20 73 74 72 69 6e 67 73 2c  umbers, strings,
13830 0a 42 4c 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73  .BLOBs, or NULLs
13840 2e 0a 3c 70 3e 0a 54 68 65 20 73 79 6e 74 61 78  ..<p>.The syntax
13850 20 66 6f 72 20 69 6e 74 65 67 65 72 20 61 6e 64   for integer and
13860 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
13870 6c 69 74 65 72 61 6c 73 20 28 63 6f 6c 6c 65 63  literals (collec
13880 74 69 76 65 6c 79 0a 22 6e 75 6d 65 72 69 63 20  tively."numeric 
13890 6c 69 74 65 72 61 6c 73 22 29 20 69 73 20 73 68  literals") is sh
138a0 6f 77 6e 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f  own by the follo
138b0 77 69 6e 67 20 64 69 61 67 72 61 6d 3a 3c 2f 70  wing diagram:</p
138c0 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69  >..<tcl>BubbleDi
138d0 61 67 72 61 6d 20 6e 75 6d 65 72 69 63 2d 6c 69  agram numeric-li
138e0 74 65 72 61 6c 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  teral</tcl>..<p>
138f0 0a 5e 28 49 66 20 61 20 6e 75 6d 65 72 69 63 20  .^(If a numeric 
13900 6c 69 74 65 72 61 6c 20 68 61 73 20 61 20 64 65  literal has a de
13910 63 69 6d 61 6c 20 70 6f 69 6e 74 20 6f 72 20 61  cimal point or a
13920 6e 20 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e  n exponentiation
13930 0a 63 6c 61 75 73 65 20 6f 72 20 69 66 20 69 74  .clause or if it
13940 73 20 6d 61 67 6e 69 74 75 64 65 20 69 73 20 6c  s magnitude is l
13950 65 73 73 20 74 68 61 6e 20 2d 39 32 32 33 33 37  ess than -922337
13960 32 30 33 36 38 35 34 37 37 35 38 30 38 20 6f 72  2036854775808 or
13970 0a 67 72 65 61 74 65 72 20 74 68 61 6e 20 39 32  .greater than 92
13980 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
13990 37 2c 20 74 68 65 6e 20 69 74 20 69 73 20 61 20  7, then it is a 
139a0 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c  floating point l
139b0 69 74 65 72 61 6c 2e 0a 4f 74 68 65 72 77 69 73  iteral..Otherwis
139c0 65 20 69 73 20 69 74 20 69 73 20 61 6e 20 20 69  e is it is an  i
139d0 6e 74 65 67 65 72 20 6c 69 74 65 72 61 6c 2e 29  nteger literal.)
139e0 5e 0a 5e 54 68 65 20 22 45 22 20 63 68 61 72 61  ^.^The "E" chara
139f0 63 74 65 72 20 74 68 61 74 20 62 65 67 69 6e 73  cter that begins
13a00 20 74 68 65 20 65 78 70 6f 6e 65 6e 74 69 61 74   the exponentiat
13a10 69 6f 6e 0a 63 6c 61 75 73 65 20 6f 66 20 61 20  ion.clause of a 
13a20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c  floating point l
13a30 69 74 65 72 61 6c 20 63 61 6e 20 62 65 20 65 69  iteral can be ei
13a40 74 68 65 72 20 75 70 70 65 72 20 6f 72 20 6c 6f  ther upper or lo
13a50 77 65 72 20 63 61 73 65 2e 0a 5e 28 54 68 65 20  wer case..^(The 
13a60 22 2e 22 20 63 68 61 72 61 63 74 65 72 20 69 73  "." character is
13a70 20 61 6c 77 61 79 73 20 75 73 65 64 20 0a 61 73   always used .as
13a80 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69   the decimal poi
13a90 6e 74 20 65 76 65 6e 20 69 66 20 74 68 65 20 6c  nt even if the l
13aa0 6f 63 61 6c 65 20 73 65 74 74 69 6e 67 20 73 70  ocale setting sp
13ab0 65 63 69 66 69 65 73 20 22 2c 22 20 66 6f 72 0a  ecifies "," for.
13ac0 74 68 69 73 20 72 6f 6c 65 20 2d 20 74 68 65 20  this role - the 
13ad0 75 73 65 20 6f 66 20 22 2c 22 20 66 6f 72 20 74  use of "," for t
13ae0 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74  he decimal point
13af0 20 77 6f 75 6c 64 20 72 65 73 75 6c 74 20 69 6e   would result in
13b00 0a 73 79 6e 74 61 63 74 69 63 20 61 6d 62 69 67  .syntactic ambig
13b10 75 69 74 79 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64  uity.)^..<tcl>hd
13b20 5f 66 72 61 67 6d 65 6e 74 20 68 65 78 69 6e 74  _fragment hexint
13b30 20 7b 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e   {hexadecimal in
13b40 74 65 67 65 72 20 6c 69 74 65 72 61 6c 73 7d 20  teger literals} 
13b50 7b 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74  {hexadecimal int
13b60 65 67 65 72 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  egers}</tcl>.<p>
13b70 5e 48 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74  ^Hexadecimal int
13b80 65 67 65 72 20 6c 69 74 65 72 61 6c 73 20 66 6f  eger literals fo
13b90 6c 6c 6f 77 20 74 68 65 20 43 2d 6c 61 6e 67 75  llow the C-langu
13ba0 61 67 65 20 6e 6f 74 61 74 69 6f 6e 20 6f 66 0a  age notation of.
13bb0 22 30 78 22 20 6f 72 20 22 30 58 22 20 66 6f 6c  "0x" or "0X" fol
13bc0 6c 6f 77 65 64 20 62 79 20 68 65 78 61 64 65 63  lowed by hexadec
13bd0 69 6d 61 6c 20 64 69 67 69 74 73 2e 0a 5e 46 6f  imal digits..^Fo
13be0 72 20 65 78 61 6d 70 6c 65 2c 20 30 78 31 32 33  r example, 0x123
13bf0 34 20 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65  4 means the same
13c00 20 61 73 20 34 36 36 30 0a 61 6e 64 20 30 78 38   as 4660.and 0x8
13c10 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 20  000000000000000 
13c20 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65 20 61  means the same a
13c30 73 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34  s -9223372036854
13c40 37 37 35 38 30 38 2e 0a 20 5e 28 48 65 78 61 64  775808.. ^(Hexad
13c50 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 6c  ecimal integer l
13c60 69 74 65 72 61 6c 73 20 61 72 65 20 69 6e 74 65  iterals are inte
13c70 72 70 72 65 74 65 64 20 61 73 20 36 34 2d 62 69  rpreted as 64-bi
13c80 74 0a 74 77 6f 27 73 2d 63 6f 6d 70 6c 65 6d 65  t.two's-compleme
13c90 6e 74 20 69 6e 74 65 67 65 72 73 20 61 6e 64 20  nt integers and 
13ca0 61 72 65 20 74 68 75 73 20 6c 69 6d 69 74 65 64  are thus limited
13cb0 0a 74 6f 20 73 69 78 74 65 65 6e 20 73 69 67 6e  .to sixteen sign
13cc0 69 66 69 63 61 6e 74 20 64 69 67 69 74 73 20 6f  ificant digits o
13cd0 66 20 70 72 65 63 69 73 69 6f 6e 2e 29 5e 0a 53  f precision.)^.S
13ce0 75 70 70 6f 72 74 20 66 6f 72 20 68 65 78 61 64  upport for hexad
13cf0 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73 20  ecimal integers 
13d00 77 61 73 20 61 64 64 65 64 20 74 6f 20 53 51 4c  was added to SQL
13d10 69 74 65 0a 76 65 72 73 69 6f 6e 20 33 2e 38 2e  ite.version 3.8.
13d20 36 20 28 5b 64 61 74 65 6f 66 3a 33 2e 38 2e 36  6 ([dateof:3.8.6
13d30 5d 29 2e 0a 5e 46 6f 72 20 62 61 63 6b 77 61 72  ])..^For backwar
13d40 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  ds compatibility
13d50 2c 20 74 68 65 20 22 30 78 22 20 68 65 78 61 64  , the "0x" hexad
13d60 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 0a 6e  ecimal integer.n
13d70 6f 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  otation is only 
13d80 75 6e 64 65 72 73 74 6f 6f 64 20 62 79 20 74 68  understood by th
13d90 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 70  e SQL language p
13da0 61 72 73 65 72 2c 20 6e 6f 74 20 62 79 20 74 68  arser, not by th
13db0 65 0a 74 79 70 65 20 63 6f 6e 76 65 72 73 69 6f  e.type conversio
13dc0 6e 73 20 72 6f 75 74 69 6e 65 73 2e 0a 5e 28 53  ns routines..^(S
13dd0 74 72 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20  tring variables 
13de0 74 68 61 74 0a 63 6f 6e 74 61 69 6e 20 74 65 78  that.contain tex
13df0 74 20 66 6f 72 6d 61 74 74 65 64 20 6c 69 6b 65  t formatted like
13e00 20 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74   hexadecimal int
13e10 65 67 65 72 73 20 61 72 65 20 6e 6f 74 0a 69 6e  egers are not.in
13e20 74 65 72 70 72 65 74 65 64 20 61 73 20 68 65 78  terpreted as hex
13e30 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72  adecimal integer
13e40 73 20 77 68 65 6e 20 63 6f 65 72 63 69 6e 67 20  s when coercing 
13e50 74 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65  the string value
13e60 0a 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  .into an integer
13e70 20 64 75 65 20 74 6f 20 61 20 5b 43 41 53 54 20   due to a [CAST 
13e80 65 78 70 72 65 73 73 69 6f 6e 5d 20 6f 72 20 66  expression] or f
13e90 6f 72 20 61 20 5b 63 6f 6c 75 6d 6e 20 61 66 66  or a [column aff
13ea0 69 6e 69 74 79 5d 0a 74 72 61 6e 73 66 6f 72 6d  inity].transform
13eb0 61 74 69 6f 6e 20 6f 72 20 70 72 69 6f 72 20 74  ation or prior t
13ec0 6f 20 70 65 72 66 6f 72 6d 69 6e 67 20 61 20 6e  o performing a n
13ed0 75 6d 65 72 69 63 20 6f 70 65 72 61 74 69 6f 6e  umeric operation
13ee0 20 6f 72 20 66 6f 72 0a 61 6e 79 20 6f 74 68 65   or for.any othe
13ef0 72 20 72 75 6e 2d 74 69 6d 65 20 63 6f 6e 76 65  r run-time conve
13f00 72 73 69 6f 6e 73 2e 29 5e 20 20 5e 28 57 68 65  rsions.)^  ^(Whe
13f10 6e 20 63 6f 65 72 63 69 6e 67 20 61 0a 73 74 72  n coercing a.str
13f20 69 6e 67 20 76 61 6c 75 65 20 69 6e 20 74 68 65  ing value in the
13f30 20 66 6f 72 6d 61 74 20 6f 66 20 61 20 68 65 78   format of a hex
13f40 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72  adecimal integer
13f50 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72   into an integer
13f60 0a 76 61 6c 75 65 2c 20 74 68 65 20 63 6f 6e 76  .value, the conv
13f70 65 72 73 69 6f 6e 20 70 72 6f 63 65 73 73 20 73  ersion process s
13f80 74 6f 70 73 20 77 68 65 6e 20 74 68 65 20 27 78  tops when the 'x
13f90 27 20 63 68 61 72 61 63 74 65 72 20 69 73 20 73  ' character is s
13fa0 65 65 6e 0a 73 6f 20 74 68 65 20 72 65 73 75 6c  een.so the resul
13fb0 74 69 6e 67 20 69 6e 74 65 67 65 72 20 76 61 6c  ting integer val
13fc0 75 65 20 69 73 20 61 6c 77 61 79 73 20 7a 65 72  ue is always zer
13fd0 6f 2e 29 5e 0a 5e 28 53 51 4c 69 74 65 20 6f 6e  o.)^.^(SQLite on
13fe0 6c 79 20 75 6e 64 65 72 73 74 61 6e 64 73 20 74  ly understands t
13ff0 68 65 20 68 65 78 61 64 65 63 69 6d 61 6c 20 69  he hexadecimal i
14000 6e 74 65 67 65 72 20 6e 6f 74 61 74 69 6f 6e 20  nteger notation 
14010 77 68 65 6e 20 69 74 0a 61 70 70 65 61 72 73 20  when it.appears 
14020 69 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  in the SQL state
14030 6d 65 6e 74 20 74 65 78 74 2c 20 6e 6f 74 20 77  ment text, not w
14040 68 65 6e 20 69 74 20 61 70 70 65 61 72 73 20 61  hen it appears a
14050 73 0a 70 61 72 74 20 6f 66 20 74 68 65 20 63 6f  s.part of the co
14060 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 64 61 74  ntent of the dat
14070 61 62 61 73 65 2e 29 5e 0a 0a 3c 70 3e 20 5e 41  abase.)^..<p> ^A
14080 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74   string constant
14090 20 69 73 20 66 6f 72 6d 65 64 20 62 79 20 65 6e   is formed by en
140a0 63 6c 6f 73 69 6e 67 20 74 68 65 0a 73 74 72 69  closing the.stri
140b0 6e 67 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f  ng in single quo
140c0 74 65 73 20 28 27 29 2e 20 20 5e 41 20 73 69 6e  tes (').  ^A sin
140d0 67 6c 65 20 71 75 6f 74 65 20 77 69 74 68 69 6e  gle quote within
140e0 20 74 68 65 20 73 74 72 69 6e 67 20 63 61 6e 0a   the string can.
140f0 62 65 20 65 6e 63 6f 64 65 64 20 62 79 20 70 75  be encoded by pu
14100 74 74 69 6e 67 20 74 77 6f 20 73 69 6e 67 6c 65  tting two single
14110 20 71 75 6f 74 65 73 20 69 6e 20 61 20 72 6f 77   quotes in a row
14120 20 2d 20 61 73 20 69 6e 20 50 61 73 63 61 6c 2e   - as in Pascal.
14130 0a 43 2d 73 74 79 6c 65 20 65 73 63 61 70 65 73  .C-style escapes
14140 20 75 73 69 6e 67 20 74 68 65 20 62 61 63 6b 73   using the backs
14150 6c 61 73 68 20 63 68 61 72 61 63 74 65 72 20 61  lash character a
14160 72 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64  re not supported
14170 20 62 65 63 61 75 73 65 0a 74 68 65 79 20 61 72   because.they ar
14180 65 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53  e not standard S
14190 51 4c 2e 0a 0a 3c 70 3e 20 5e 42 4c 4f 42 20 6c  QL...<p> ^BLOB l
141a0 69 74 65 72 61 6c 73 20 61 72 65 20 73 74 72 69  iterals are stri
141b0 6e 67 20 6c 69 74 65 72 61 6c 73 20 63 6f 6e 74  ng literals cont
141c0 61 69 6e 69 6e 67 20 68 65 78 61 64 65 63 69 6d  aining hexadecim
141d0 61 6c 20 64 61 74 61 20 61 6e 64 0a 70 72 65 63  al data and.prec
141e0 65 64 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65  eded by a single
141f0 20 22 78 22 20 6f 72 20 22 58 22 20 63 68 61 72   "x" or "X" char
14200 61 63 74 65 72 2e 20 20 5e 28 45 78 61 6d 70 6c  acter.  ^(Exampl
14210 65 3a 20 58 27 35 33 35 31 34 43 36 39 37 34 36  e: X'53514C69746
14220 35 27 29 5e 0a 0a 3c 70 3e 0a 5e 41 20 6c 69 74  5')^..<p>.^A lit
14230 65 72 61 6c 20 76 61 6c 75 65 20 63 61 6e 20 61  eral value can a
14240 6c 73 6f 20 62 65 20 74 68 65 20 74 6f 6b 65 6e  lso be the token
14250 20 22 4e 55 4c 4c 22 2e 0a 3c 2f 70 3e 0a 0a 3c   "NULL"..</p>..<
14260 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
14270 76 61 72 70 61 72 61 6d 20 70 61 72 61 6d 65 74  varparam paramet
14280 65 72 20 70 61 72 61 6d 65 74 65 72 73 20 7b 62  er parameters {b
14290 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 7d 20  ound parameter} 
142a0 7b 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72  {bound parameter
142b0 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 50 61 72  s}</tcl>.<h3>Par
142c0 61 6d 65 74 65 72 73 3c 2f 68 33 3e 0a 3c 70 3e  ameters</h3>.<p>
142d0 0a 41 20 22 76 61 72 69 61 62 6c 65 22 20 6f 72  .A "variable" or
142e0 20 22 70 61 72 61 6d 65 74 65 72 22 20 74 6f 6b   "parameter" tok
142f0 65 6e 0a 73 70 65 63 69 66 69 65 73 20 61 20 70  en.specifies a p
14300 6c 61 63 65 68 6f 6c 64 65 72 20 69 6e 20 74 68  laceholder in th
14310 65 20 65 78 70 72 65 73 73 69 6f 6e 20 66 6f 72  e expression for
14320 20 61 20 0a 76 61 6c 75 65 20 74 68 61 74 20 69   a .value that i
14330 73 20 66 69 6c 6c 65 64 20 69 6e 20 61 74 20 72  s filled in at r
14340 75 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65  untime using the
14350 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62  .[sqlite3_bind_b
14360 6c 6f 62 28 29 20 7c 20 73 71 6c 69 74 65 33 5f  lob() | sqlite3_
14370 62 69 6e 64 28 29 5d 20 66 61 6d 69 6c 79 20 6f  bind()] family o
14380 66 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63  f C/C++ interfac
14390 65 73 2e 0a 50 61 72 61 6d 65 74 65 72 73 20 63  es..Parameters c
143a0 61 6e 20 74 61 6b 65 20 73 65 76 65 72 61 6c 20  an take several 
143b0 66 6f 72 6d 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c  forms:.</p>..<bl
143c0 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65  ockquote>.<table
143d0 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  >.<tr>.<td align
143e0 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d  ="right" valign=
143f0 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 69  "top"><b>?</b><i
14400 3e 4e 4e 4e 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64  >NNN</i></td><td
14410 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64   width="20"></td
14420 3e 0a 3c 74 64 3e 5e 28 41 20 71 75 65 73 74 69  >.<td>^(A questi
14430 6f 6e 20 6d 61 72 6b 20 66 6f 6c 6c 6f 77 65 64  on mark followed
14440 20 62 79 20 61 20 6e 75 6d 62 65 72 20 3c 69 3e   by a number <i>
14450 4e 4e 4e 3c 2f 69 3e 20 68 6f 6c 64 73 20 61 20  NNN</i> holds a 
14460 73 70 6f 74 20 66 6f 72 20 74 68 65 0a 4e 4e 4e  spot for the.NNN
14470 2d 74 68 20 70 61 72 61 6d 65 74 65 72 2e 20 20  -th parameter.  
14480 4e 4e 4e 20 6d 75 73 74 20 62 65 20 62 65 74 77  NNN must be betw
14490 65 65 6e 20 31 20 61 6e 64 20 5b 53 51 4c 49 54  een 1 and [SQLIT
144a0 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
144b0 55 4d 42 45 52 5d 2e 29 5e 0a 3c 2f 74 64 3e 0a  UMBER].)^.</td>.
144c0 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61  </tr>.<tr>.<td a
144d0 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c  lign="right" val
144e0 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f  ign="top"><b>?</
144f0 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68  b></td><td width
14500 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e  ="20"></td>.<td>
14510 5e 41 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b  ^A question mark
14520 20 74 68 61 74 20 69 73 20 6e 6f 74 20 66 6f 6c   that is not fol
14530 6c 6f 77 65 64 20 62 79 20 61 20 6e 75 6d 62 65  lowed by a numbe
14540 72 20 63 72 65 61 74 65 73 20 61 20 70 61 72 61  r creates a para
14550 6d 65 74 65 72 0a 77 69 74 68 20 61 20 6e 75 6d  meter.with a num
14560 62 65 72 20 6f 6e 65 20 67 72 65 61 74 65 72 20  ber one greater 
14570 74 68 61 6e 20 74 68 65 20 6c 61 72 67 65 73 74  than the largest
14580 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65   parameter numbe
14590 72 20 61 6c 72 65 61 64 79 20 61 73 73 69 67 6e  r already assign
145a0 65 64 2e 0a 5e 49 66 20 74 68 69 73 20 6d 65 61  ed..^If this mea
145b0 6e 73 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  ns the parameter
145c0 20 6e 75 6d 62 65 72 20 69 73 20 67 72 65 61 74   number is great
145d0 65 72 20 74 68 61 6e 0a 5b 53 51 4c 49 54 45 5f  er than.[SQLITE_
145e0 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
145f0 42 45 52 5d 2c 20 69 74 20 69 73 20 61 6e 20 65  BER], it is an e
14600 72 72 6f 72 2e 0a 54 68 69 73 20 70 61 72 61 6d  rror..This param
14610 65 74 65 72 20 66 6f 72 6d 61 74 20 69 73 20 70  eter format is p
14620 72 6f 76 69 64 65 64 20 66 6f 72 20 63 6f 6d 70  rovided for comp
14630 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 6f  atibility with o
14640 74 68 65 72 20 64 61 74 61 62 61 73 65 0a 65 6e  ther database.en
14650 67 69 6e 65 73 2e 20 20 42 75 74 20 62 65 63 61  gines.  But beca
14660 75 73 65 20 69 74 20 69 73 20 65 61 73 79 20 74  use it is easy t
14670 6f 20 6d 69 73 63 6f 75 6e 74 20 74 68 65 20 71  o miscount the q
14680 75 65 73 74 69 6f 6e 20 6d 61 72 6b 73 2c 20 74  uestion marks, t
14690 68 65 0a 75 73 65 20 6f 66 20 74 68 69 73 20 70  he.use of this p
146a0 61 72 61 6d 65 74 65 72 20 66 6f 72 6d 61 74 20  arameter format 
146b0 69 73 20 64 69 73 63 6f 75 72 61 67 65 64 2e 20  is discouraged. 
146c0 20 50 72 6f 67 72 61 6d 6d 65 72 73 20 61 72 65   Programmers are
146d0 20 65 6e 63 6f 75 72 61 67 65 64 0a 74 6f 20 75   encouraged.to u
146e0 73 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 73 79  se one of the sy
146f0 6d 62 6f 6c 69 63 20 66 6f 72 6d 61 74 73 20 62  mbolic formats b
14700 65 6c 6f 77 20 6f 72 20 74 68 65 20 3f 4e 4e 4e  elow or the ?NNN
14710 20 66 6f 72 6d 61 74 20 61 62 6f 76 65 20 69 6e   format above in
14720 73 74 65 61 64 2e 0a 3c 2f 74 64 3e 0a 3c 2f 74  stead..</td>.</t
14730 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  r>.<tr>.<td alig
14740 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e  n="right" valign
14750 3d 22 74 6f 70 22 3e 3c 62 3e 3a 3c 2f 62 3e 3c  ="top"><b>:</b><
14760 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c  i>AAAA</i></td><
14770 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f  td width="20"></
14780 74 64 3e 0a 3c 74 64 3e 5e 41 20 63 6f 6c 6f 6e  td>.<td>^A colon
14790 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20   followed by an 
147a0 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20  identifier name 
147b0 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72  holds a spot for
147c0 20 61 20 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e   a .[sqlite3_bin
147d0 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
147e0 7c 6e 61 6d 65 64 20 70 61 72 61 6d 65 74 65 72  |named parameter
147f0 5d 20 77 69 74 68 20 74 68 65 20 6e 61 6d 65 20  ] with the name 
14800 3a 41 41 41 41 2e 20 20 0a 5e 28 4e 61 6d 65 64  :AAAA.  .^(Named
14810 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20   parameters are 
14820 61 6c 73 6f 20 6e 75 6d 62 65 72 65 64 2e 20 54  also numbered. T
14830 68 65 20 6e 75 6d 62 65 72 20 61 73 73 69 67 6e  he number assign
14840 65 64 20 69 73 20 6f 6e 65 20 67 72 65 61 74 65  ed is one greate
14850 72 20 74 68 61 6e 0a 74 68 65 20 6c 61 72 67 65  r than.the large
14860 73 74 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d  st parameter num
14870 62 65 72 20 61 6c 72 65 61 64 79 20 61 73 73 69  ber already assi
14880 67 6e 65 64 2e 29 5e 20 5e 49 66 20 74 68 69 73  gned.)^ ^If this
14890 20 6d 65 61 6e 73 20 74 68 65 20 70 61 72 61 6d   means the param
148a0 65 74 65 72 0a 77 6f 75 6c 64 20 62 65 20 61 73  eter.would be as
148b0 73 69 67 6e 65 64 20 61 20 6e 75 6d 62 65 72 20  signed a number 
148c0 67 72 65 61 74 65 72 20 74 68 61 6e 20 5b 53 51  greater than [SQ
148d0 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
148e0 45 5f 4e 55 4d 42 45 52 5d 2c 20 69 74 20 69 73  E_NUMBER], it is
148f0 0a 61 6e 20 65 72 72 6f 72 2e 20 54 6f 20 61 76  .an error. To av
14900 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 2c 20 69  oid confusion, i
14910 74 20 69 73 20 62 65 73 74 20 74 6f 20 61 76 6f  t is best to avo
14920 69 64 20 6d 69 78 69 6e 67 20 6e 61 6d 65 64 20  id mixing named 
14930 61 6e 64 20 6e 75 6d 62 65 72 65 64 0a 70 61 72  and numbered.par
14940 61 6d 65 74 65 72 73 2e 3c 2f 74 64 3e 0a 3c 2f  ameters.</td>.</
14950 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  tr>.<tr>.<td ali
14960 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67  gn="right" valig
14970 6e 3d 22 74 6f 70 22 3e 3c 62 3e 40 3c 2f 62 3e  n="top"><b>@</b>
14980 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e  <i>AAAA</i></td>
14990 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c  <td width="20"><
149a0 2f 74 64 3e 0a 3c 74 64 3e 5e 41 6e 20 22 61 74  /td>.<td>^An "at
149b0 22 20 73 69 67 6e 20 77 6f 72 6b 73 20 65 78 61  " sign works exa
149c0 63 74 6c 79 20 6c 69 6b 65 20 61 20 63 6f 6c 6f  ctly like a colo
149d0 6e 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 74  n, except that t
149e0 68 65 20 6e 61 6d 65 20 6f 66 0a 74 68 65 20 70  he name of.the p
149f0 61 72 61 6d 65 74 65 72 20 63 72 65 61 74 65 64  arameter created
14a00 20 69 73 20 40 41 41 41 41 2e 3c 2f 74 64 3e 0a   is @AAAA.</td>.
14a10 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61  </tr>.<tr>.<td a
14a20 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c  lign="right" val
14a30 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 24 3c 2f  ign="top"><b>$</
14a40 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74  b><i>AAAA</i></t
14a50 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22  d><td width="20"
14a60 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 64 6f  ></td>.<td>^A do
14a70 6c 6c 61 72 2d 73 69 67 6e 20 66 6f 6c 6c 6f 77  llar-sign follow
14a80 65 64 20 62 79 20 61 6e 20 69 64 65 6e 74 69 66  ed by an identif
14a90 69 65 72 20 6e 61 6d 65 20 61 6c 73 6f 20 68 6f  ier name also ho
14aa0 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20 61  lds a spot for a
14ab0 20 6e 61 6d 65 64 0a 70 61 72 61 6d 65 74 65 72   named.parameter
14ac0 20 77 69 74 68 20 74 68 65 20 6e 61 6d 65 20 24   with the name $
14ad0 41 41 41 41 2e 20 20 5e 28 54 68 65 20 69 64 65  AAAA.  ^(The ide
14ae0 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 69 6e 20  ntifier name in 
14af0 74 68 69 73 20 63 61 73 65 20 63 61 6e 20 69 6e  this case can in
14b00 63 6c 75 64 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72  clude.one or mor
14b10 65 20 6f 63 63 75 72 72 65 6e 63 65 73 20 6f 66  e occurrences of
14b20 20 22 3a 3a 22 20 61 6e 64 20 61 20 73 75 66 66   "::" and a suff
14b30 69 78 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 22  ix enclosed in "
14b40 28 2e 2e 2e 29 22 20 63 6f 6e 74 61 69 6e 69 6e  (...)" containin
14b50 67 0a 61 6e 79 20 74 65 78 74 20 61 74 20 61 6c  g.any text at al
14b60 6c 2e 29 5e 20 20 54 68 69 73 20 73 79 6e 74 61  l.)^  This synta
14b70 78 20 69 73 20 74 68 65 20 66 6f 72 6d 20 6f 66  x is the form of
14b80 20 61 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65   a variable name
14b90 20 69 6e 20 74 68 65 0a 5b 68 74 74 70 3a 2f 2f   in the.[http://
14ba0 77 77 77 2e 74 63 6c 2d 6c 61 6e 67 2e 6f 72 67  www.tcl-lang.org
14bb0 2f 20 7c 20 54 63 6c 20 70 72 6f 67 72 61 6d 6d  / | Tcl programm
14bc0 69 6e 67 20 6c 61 6e 67 75 61 67 65 5d 2e 20 20  ing language].  
14bd0 54 68 65 20 70 72 65 73 65 6e 63 65 0a 6f 66 20  The presence.of 
14be0 74 68 69 73 20 73 79 6e 74 61 78 20 72 65 73 75  this syntax resu
14bf0 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 66 61 63  lts from the fac
14c00 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 69 73  t that SQLite is
14c10 20 72 65 61 6c 6c 79 20 61 20 0a 5b 54 63 6c 20   really a .[Tcl 
14c20 65 78 74 65 6e 73 69 6f 6e 5d 20 74 68 61 74 20  extension] that 
14c30 68 61 73 20 65 73 63 61 70 65 64 20 69 6e 74 6f  has escaped into
14c40 20 74 68 65 20 77 69 6c 64 2e 3c 2f 74 64 3e 0a   the wild.</td>.
14c50 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  </tr>.</table>.<
14c60 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
14c70 3e 5e 50 61 72 61 6d 65 74 65 72 73 20 74 68 61  >^Parameters tha
14c80 74 20 61 72 65 20 6e 6f 74 20 61 73 73 69 67 6e  t are not assign
14c90 65 64 20 76 61 6c 75 65 73 20 75 73 69 6e 67 0a  ed values using.
14ca0 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c  [sqlite3_bind_bl
14cb0 6f 62 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62  ob() | sqlite3_b
14cc0 69 6e 64 28 29 5d 20 61 72 65 20 74 72 65 61 74  ind()] are treat
14cd0 65 64 0a 61 73 20 4e 55 4c 4c 2e 20 20 54 68 65  ed.as NULL.  The
14ce0 20 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70   [sqlite3_bind_p
14cf0 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28 29  arameter_index()
14d00 5d 20 69 6e 74 65 72 66 61 63 65 20 63 61 6e 20  ] interface can 
14d10 62 65 20 75 73 65 64 0a 74 6f 20 74 72 61 6e 73  be used.to trans
14d20 6c 61 74 65 20 61 20 73 79 6d 62 6f 6c 69 63 20  late a symbolic 
14d30 70 61 72 61 6d 65 74 65 72 20 6e 61 6d 65 20 69  parameter name i
14d40 6e 74 6f 20 69 74 73 20 65 71 75 69 76 61 6c 65  nto its equivale
14d50 6e 74 20 6e 75 6d 65 72 69 63 20 69 6e 64 65 78  nt numeric index
14d60 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6d  .</p>..<p>^The m
14d70 61 78 69 6d 75 6d 20 70 61 72 61 6d 65 74 65 72  aximum parameter
14d80 20 6e 75 6d 62 65 72 20 69 73 20 73 65 74 20 61   number is set a
14d90 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 62  t compile-time b
14da0 79 0a 74 68 65 20 5b 53 51 4c 49 54 45 5f 4d 41  y.the [SQLITE_MA
14db0 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
14dc0 52 5d 20 6d 61 63 72 6f 2e 20 20 5e 28 41 6e 20  R] macro.  ^(An 
14dd0 69 6e 64 69 76 69 64 75 61 6c 20 5b 64 61 74 61  individual [data
14de0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d  base connection]
14df0 0a 44 20 63 61 6e 20 72 65 64 75 63 65 20 69 74  .D can reduce it
14e00 73 20 6d 61 78 69 6d 75 6d 20 70 61 72 61 6d 65  s maximum parame
14e10 74 65 72 20 6e 75 6d 62 65 72 20 62 65 6c 6f 77  ter number below
14e20 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   the compile-tim
14e30 65 20 6d 61 78 69 6d 75 6d 0a 75 73 69 6e 67 20  e maximum.using 
14e40 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d  the [sqlite3_lim
14e50 69 74 5d 28 44 2c 20 5b 53 51 4c 49 54 45 5f 4c  it](D, [SQLITE_L
14e60 49 4d 49 54 5f 56 41 52 49 41 42 4c 45 5f 4e 55  IMIT_VARIABLE_NU
14e70 4d 42 45 52 5d 2c 2e 2e 2e 29 20 69 6e 74 65 72  MBER],...) inter
14e80 66 61 63 65 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 74  face.)^.</p>..<t
14e90 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c  cl>hd_fragment l
14ea0 69 6b 65 20 4c 49 4b 45 20 45 53 43 41 50 45 3c  ike LIKE ESCAPE<
14eb0 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 4c 49  /tcl>.<h3>The LI
14ec0 4b 45 2c 20 47 4c 4f 42 2c 20 52 45 47 45 58 50  KE, GLOB, REGEXP
14ed0 2c 20 61 6e 64 20 4d 41 54 43 48 20 6f 70 65 72  , and MATCH oper
14ee0 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 54  ators</h3>.<p>^T
14ef0 68 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72  he LIKE operator
14f00 20 64 6f 65 73 20 61 20 70 61 74 74 65 72 6e 20   does a pattern 
14f10 6d 61 74 63 68 69 6e 67 20 63 6f 6d 70 61 72 69  matching compari
14f20 73 6f 6e 2e 20 5e 54 68 65 20 6f 70 65 72 61 6e  son. ^The operan
14f30 64 0a 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f  d.to the right o
14f40 66 20 74 68 65 20 4c 49 4b 45 20 6f 70 65 72 61  f the LIKE opera
14f50 74 6f 72 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  tor contains the
14f60 20 70 61 74 74 65 72 6e 20 61 6e 64 20 74 68 65   pattern and the
14f70 20 6c 65 66 74 20 68 61 6e 64 0a 6f 70 65 72 61   left hand.opera
14f80 6e 64 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  nd contains the 
14f90 73 74 72 69 6e 67 20 74 6f 20 6d 61 74 63 68 20  string to match 
14fa0 61 67 61 69 6e 73 74 20 74 68 65 20 70 61 74 74  against the patt
14fb0 65 72 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75  ern...<tcl>hd_pu
14fc0 74 73 20 22 5e 41 20 70 65 72 63 65 6e 74 20 73  ts "^A percent s
14fd0 79 6d 62 6f 6c 20 28 5c 22 25 5c 22 29 20 69 6e  ymbol (\"%\") in
14fe0 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74 65 72   the LIKE patter
14ff0 6e 20 6d 61 74 63 68 65 73 20 61 6e 79 0a 73 65  n matches any.se
15000 71 75 65 6e 63 65 20 6f 66 20 7a 65 72 6f 20 6f  quence of zero o
15010 72 20 6d 6f 72 65 20 63 68 61 72 61 63 74 65 72  r more character
15020 73 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67 2e  s in the string.
15030 20 20 5e 41 6e 20 75 6e 64 65 72 73 63 6f 72 65    ^An underscore
15040 0a 28 5c 22 5f 5c 22 29 20 69 6e 20 74 68 65 20  .(\"_\") in the 
15050 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 6d 61 74  LIKE pattern mat
15060 63 68 65 73 20 61 6e 79 20 73 69 6e 67 6c 65 20  ches any single 
15070 63 68 61 72 61 63 74 65 72 20 69 6e 20 74 68 65  character in the
15080 0a 73 74 72 69 6e 67 2e 20 20 5e 28 41 6e 79 20  .string.  ^(Any 
15090 6f 74 68 65 72 20 63 68 61 72 61 63 74 65 72 20  other character 
150a0 6d 61 74 63 68 65 73 20 69 74 73 65 6c 66 20 6f  matches itself o
150b0 72 20 69 74 73 20 6c 6f 77 65 72 2f 75 70 70 65  r its lower/uppe
150c0 72 20 63 61 73 65 0a 65 71 75 69 76 61 6c 65 6e  r case.equivalen
150d0 74 20 28 69 2e 65 2e 20 63 61 73 65 2d 69 6e 73  t (i.e. case-ins
150e0 65 6e 73 69 74 69 76 65 20 6d 61 74 63 68 69 6e  ensitive matchin
150f0 67 29 2e 29 5e 0a 0a 3c 75 3e 49 6d 70 6f 72 74  g).)^..<u>Import
15100 61 6e 74 20 4e 6f 74 65 3a 3c 2f 75 3e 20 5e 53  ant Note:</u> ^S
15110 51 4c 69 74 65 20 6f 6e 6c 79 0a 75 6e 64 65 72  QLite only.under
15120 73 74 61 6e 64 73 20 75 70 70 65 72 2f 6c 6f 77  stands upper/low
15130 65 72 20 63 61 73 65 20 66 6f 72 20 41 53 43 49  er case for ASCI
15140 49 20 63 68 61 72 61 63 74 65 72 73 20 62 79 20  I characters by 
15150 64 65 66 61 75 6c 74 2e 20 20 5e 54 68 65 0a 4c  default.  ^The.L
15160 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 69 73 20  IKE operator is 
15170 63 61 73 65 20 73 65 6e 73 69 74 69 76 65 20 62  case sensitive b
15180 79 20 64 65 66 61 75 6c 74 20 66 6f 72 20 75 6e  y default for un
15190 69 63 6f 64 65 20 63 68 61 72 61 63 74 65 72 73  icode characters
151a0 20 74 68 61 74 20 61 72 65 0a 62 65 79 6f 6e 64   that are.beyond
151b0 20 74 68 65 20 41 53 43 49 49 20 72 61 6e 67 65   the ASCII range
151c0 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 0a  .  For example,.
151d0 5e 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20  ^the expression 
151e0 3c 62 3e 27 61 27 26 6e 62 73 70 3b 4c 49 4b 45  <b>'a'&nbsp;LIKE
151f0 26 6e 62 73 70 3b 27 41 27 3c 2f 62 3e 0a 69 73  &nbsp;'A'</b>.is
15200 20 54 52 55 45 20 62 75 74 20 3c 62 3e 27 26 61   TRUE but <b>'&a
15210 65 6c 69 67 3b 27 26 6e 62 73 70 3b 4c 49 4b 45  elig;'&nbsp;LIKE
15220 26 6e 62 73 70 3b 27 26 41 45 6c 69 67 3b 27 3c  &nbsp;'&AElig;'<
15230 2f 62 3e 20 69 73 20 46 41 4c 53 45 2e 22 3c 2f  /b> is FALSE."</
15240 74 63 6c 3e 0a 54 68 65 20 49 43 55 20 65 78 74  tcl>.The ICU ext
15250 65 6e 73 69 6f 6e 20 74 6f 20 53 51 4c 69 74 65  ension to SQLite
15260 20 69 6e 63 6c 75 64 65 73 20 61 6e 20 65 6e 68   includes an enh
15270 61 6e 63 65 64 20 76 65 72 73 69 6f 6e 20 6f 66  anced version of
15280 20 74 68 65 0a 4c 49 4b 45 20 6f 70 65 72 61 74   the.LIKE operat
15290 6f 72 20 74 68 61 74 20 64 6f 65 73 20 63 61 73  or that does cas
152a0 65 20 66 6f 6c 64 69 6e 67 20 61 63 72 6f 73 73  e folding across
152b0 20 61 6c 6c 20 75 6e 69 63 6f 64 65 20 63 68 61   all unicode cha
152c0 72 61 63 74 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 70  racters.</p>..<p
152d0 3e 5e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61  >^If the optiona
152e0 6c 20 45 53 43 41 50 45 20 63 6c 61 75 73 65 20  l ESCAPE clause 
152f0 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e  is present, then
15300 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a   the expression.
15310 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 45 53  following the ES
15320 43 41 50 45 20 6b 65 79 77 6f 72 64 20 6d 75 73  CAPE keyword mus
15330 74 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61 20  t evaluate to a 
15340 73 74 72 69 6e 67 20 63 6f 6e 73 69 73 74 69 6e  string consistin
15350 67 20 6f 66 0a 61 20 73 69 6e 67 6c 65 20 63 68  g of.a single ch
15360 61 72 61 63 74 65 72 2e 20 5e 54 68 69 73 20 63  aracter. ^This c
15370 68 61 72 61 63 74 65 72 20 6d 61 79 20 62 65 20  haracter may be 
15380 75 73 65 64 20 69 6e 20 74 68 65 20 4c 49 4b 45  used in the LIKE
15390 20 70 61 74 74 65 72 6e 0a 74 6f 20 69 6e 63 6c   pattern.to incl
153a0 75 64 65 20 6c 69 74 65 72 61 6c 20 70 65 72 63  ude literal perc
153b0 65 6e 74 20 6f 72 20 75 6e 64 65 72 73 63 6f 72  ent or underscor
153c0 65 20 63 68 61 72 61 63 74 65 72 73 2e 20 5e 54  e characters. ^T
153d0 68 65 20 65 73 63 61 70 65 0a 63 68 61 72 61 63  he escape.charac
153e0 74 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  ter followed by 
153f0 61 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c  a percent symbol
15400 20 28 25 29 2c 20 75 6e 64 65 72 73 63 6f 72 65   (%), underscore
15410 20 28 5f 29 2c 20 6f 72 20 61 20 73 65 63 6f 6e   (_), or a secon
15420 64 0a 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  d.instance of th
15430 65 20 65 73 63 61 70 65 20 63 68 61 72 61 63 74  e escape charact
15440 65 72 20 69 74 73 65 6c 66 20 6d 61 74 63 68 65  er itself matche
15450 73 20 61 0a 6c 69 74 65 72 61 6c 20 70 65 72 63  s a.literal perc
15460 65 6e 74 20 73 79 6d 62 6f 6c 2c 20 75 6e 64 65  ent symbol, unde
15470 72 73 63 6f 72 65 2c 20 6f 72 20 61 20 73 69 6e  rscore, or a sin
15480 67 6c 65 20 65 73 63 61 70 65 20 63 68 61 72 61  gle escape chara
15490 63 74 65 72 2c 0a 72 65 73 70 65 63 74 69 76 65  cter,.respective
154a0 6c 79 2e 0a 0a 3c 70 3e 5e 54 68 65 20 69 6e 66  ly...<p>^The inf
154b0 69 78 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72  ix LIKE operator
154c0 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20   is implemented 
154d0 62 79 20 63 61 6c 6c 69 6e 67 20 74 68 65 0a 61  by calling the.a
154e0 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e  pplication-defin
154f0 65 64 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73  ed SQL functions
15500 20 5b 6c 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c   [like(<i>Y</i>,
15510 3c 69 3e 58 3c 2f 69 3e 29 5d 20 6f 72 0a 5b 6c  <i>X</i>)] or.[l
15520 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e  ike(<i>Y</i>,<i>
15530 58 3c 2f 69 3e 2c 3c 69 3e 5a 3c 2f 69 3e 29 5d  X</i>,<i>Z</i>)]
15540 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  </a>.</p>..<p>^T
15550 68 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72  he LIKE operator
15560 20 63 61 6e 20 62 65 20 6d 61 64 65 20 63 61 73   can be made cas
15570 65 20 73 65 6e 73 69 74 69 76 65 20 75 73 69 6e  e sensitive usin
15580 67 20 74 68 65 0a 5b 63 61 73 65 5f 73 65 6e 73  g the.[case_sens
15590 69 74 69 76 65 5f 6c 69 6b 65 20 70 72 61 67 6d  itive_like pragm
155a0 61 5d 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  a].</p>..<tcl>hd
155b0 5f 66 72 61 67 6d 65 6e 74 20 67 6c 6f 62 20 47  _fragment glob G
155c0 4c 4f 42 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68  LOB</tcl>.<p>^Th
155d0 65 20 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72 20  e GLOB operator 
155e0 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4c 49  is similar to LI
155f0 4b 45 20 62 75 74 20 75 73 65 73 20 74 68 65 20  KE but uses the 
15600 55 6e 69 78 0a 66 69 6c 65 20 67 6c 6f 62 62 69  Unix.file globbi
15610 6e 67 20 73 79 6e 74 61 78 20 66 6f 72 20 69 74  ng syntax for it
15620 73 20 77 69 6c 64 63 61 72 64 73 2e 20 20 5e 41  s wildcards.  ^A
15630 6c 73 6f 2c 20 47 4c 4f 42 20 69 73 20 63 61 73  lso, GLOB is cas
15640 65 0a 73 65 6e 73 69 74 69 76 65 2c 20 75 6e 6c  e.sensitive, unl
15650 69 6b 65 20 4c 49 4b 45 2e 20 20 5e 42 6f 74 68  ike LIKE.  ^Both
15660 20 47 4c 4f 42 20 61 6e 64 20 4c 49 4b 45 20 6d   GLOB and LIKE m
15670 61 79 20 62 65 20 70 72 65 63 65 64 65 64 20 62  ay be preceded b
15680 79 0a 74 68 65 20 4e 4f 54 20 6b 65 79 77 6f 72  y.the NOT keywor
15690 64 20 74 6f 20 69 6e 76 65 72 74 20 74 68 65 20  d to invert the 
156a0 73 65 6e 73 65 20 6f 66 20 74 68 65 20 74 65 73  sense of the tes
156b0 74 2e 20 20 5e 54 68 65 20 69 6e 66 69 78 20 47  t.  ^The infix G
156c0 4c 4f 42 20 0a 6f 70 65 72 61 74 6f 72 20 69 73  LOB .operator is
156d0 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
156e0 63 61 6c 6c 69 6e 67 20 74 68 65 20 66 75 6e 63  calling the func
156f0 74 69 6f 6e 0a 5b 67 6c 6f 62 28 3c 69 3e 59 3c  tion.[glob(<i>Y<
15700 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20 61  /i>,<i>X</i>)] a
15710 6e 64 20 63 61 6e 20 62 65 20 6d 6f 64 69 66 69  nd can be modifi
15720 65 64 20 62 79 20 6f 76 65 72 72 69 64 69 6e 67  ed by overriding
15730 0a 74 68 61 74 20 66 75 6e 63 74 69 6f 6e 2e 3c  .that function.<
15740 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
15750 67 6d 65 6e 74 20 72 65 67 65 78 70 20 52 45 47  gment regexp REG
15760 45 58 50 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68  EXP</tcl>.<p>^Th
15770 65 20 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f  e REGEXP operato
15780 72 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 73  r is a special s
15790 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 72 65  yntax for the re
157a0 67 65 78 70 28 29 0a 75 73 65 72 20 66 75 6e 63  gexp().user func
157b0 74 69 6f 6e 2e 20 20 5e 4e 6f 20 72 65 67 65 78  tion.  ^No regex
157c0 70 28 29 20 75 73 65 72 20 66 75 6e 63 74 69 6f  p() user functio
157d0 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  n is defined by 
157e0 64 65 66 61 75 6c 74 0a 61 6e 64 20 73 6f 20 75  default.and so u
157f0 73 65 20 6f 66 20 74 68 65 20 52 45 47 45 58 50  se of the REGEXP
15800 20 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c 20 6e   operator will n
15810 6f 72 6d 61 6c 6c 79 20 72 65 73 75 6c 74 20 69  ormally result i
15820 6e 20 61 6e 0a 65 72 72 6f 72 20 6d 65 73 73 61  n an.error messa
15830 67 65 2e 20 20 5e 49 66 20 61 6e 20 5b 61 70 70  ge.  ^If an [app
15840 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
15850 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 5d 20 6e   SQL function] n
15860 61 6d 65 64 20 22 72 65 67 65 78 70 22 0a 69 73  amed "regexp".is
15870 20 61 64 64 65 64 20 61 74 20 72 75 6e 2d 74 69   added at run-ti
15880 6d 65 2c 20 74 68 65 6e 20 74 68 65 20 22 3c 69  me, then the "<i
15890 3e 58 3c 2f 69 3e 20 52 45 47 45 58 50 20 3c 69  >X</i> REGEXP <i
158a0 3e 59 3c 2f 69 3e 22 20 6f 70 65 72 61 74 6f 72  >Y</i>" operator
158b0 20 77 69 6c 6c 0a 62 65 20 69 6d 70 6c 65 6d 65   will.be impleme
158c0 6e 74 65 64 20 61 73 20 61 20 63 61 6c 6c 20 74  nted as a call t
158d0 6f 20 22 72 65 67 65 78 70 28 3c 69 3e 59 3c 2f  o "regexp(<i>Y</
158e0 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 22 2e 3c 2f  i>,<i>X</i>)".</
158f0 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
15900 6d 65 6e 74 20 6d 61 74 63 68 20 4d 41 54 43 48  ment match MATCH
15910 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 4d  </tcl>.<p>^The M
15920 41 54 43 48 20 6f 70 65 72 61 74 6f 72 20 69 73  ATCH operator is
15930 20 61 20 73 70 65 63 69 61 6c 20 73 79 6e 74 61   a special synta
15940 78 20 66 6f 72 20 74 68 65 20 6d 61 74 63 68 28  x for the match(
15950 29 0a 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65  ).application-de
15960 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 2e 20  fined function. 
15970 20 5e 54 68 65 20 64 65 66 61 75 6c 74 20 6d 61   ^The default ma
15980 74 63 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 69  tch() function i
15990 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 72 61  mplementation.ra
159a0 69 73 65 73 20 61 6e 20 65 78 63 65 70 74 69 6f  ises an exceptio
159b0 6e 20 61 6e 64 20 69 73 20 6e 6f 74 20 72 65 61  n and is not rea
159c0 6c 6c 79 20 75 73 65 66 75 6c 20 66 6f 72 20 61  lly useful for a
159d0 6e 79 74 68 69 6e 67 2e 0a 5e 42 75 74 20 65 78  nything..^But ex
159e0 74 65 6e 73 69 6f 6e 73 20 63 61 6e 20 6f 76 65  tensions can ove
159f0 72 72 69 64 65 20 74 68 65 20 6d 61 74 63 68 28  rride the match(
15a00 29 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  ) function with 
15a10 6d 6f 72 65 0a 68 65 6c 70 66 75 6c 20 6c 6f 67  more.helpful log
15a20 69 63 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ic.</p>..<tcl>hd
15a30 5f 66 72 61 67 6d 65 6e 74 20 62 65 74 77 65 65  _fragment betwee
15a40 6e 20 42 45 54 57 45 45 4e 3c 2f 74 63 6c 3e 0a  n BETWEEN</tcl>.
15a50 3c 68 33 3e 54 68 65 20 42 45 54 57 45 45 4e 20  <h3>The BETWEEN 
15a60 6f 70 65 72 61 74 6f 72 3c 2f 68 33 3e 0a 3c 70  operator</h3>.<p
15a70 3e 5e 28 54 68 65 20 42 45 54 57 45 45 4e 20 6f  >^(The BETWEEN o
15a80 70 65 72 61 74 6f 72 20 69 73 20 6c 6f 67 69 63  perator is logic
15a90 61 6c 6c 79 20 65 71 75 69 76 61 6c 65 6e 74 20  ally equivalent 
15aa0 74 6f 20 61 20 70 61 69 72 20 6f 66 20 63 6f 6d  to a pair of com
15ab0 70 61 72 69 73 6f 6e 73 2e 0a 22 3c 69 3e 78 3c  parisons.."<i>x<
15ac0 2f 69 3e 20 3c 62 3e 42 45 54 57 45 45 4e 3c 2f  /i> <b>BETWEEN</
15ad0 62 3e 20 3c 69 3e 79 3c 2f 69 3e 20 3c 62 3e 41  b> <i>y</i> <b>A
15ae0 4e 44 3c 2f 62 3e 20 3c 69 3e 7a 3c 2f 69 3e 22  ND</b> <i>z</i>"
15af0 20 69 73 20 0a 65 71 75 69 76 61 6c 65 6e 74 20   is .equivalent 
15b00 74 6f 20 0a 22 3c 69 3e 78 3c 2f 69 3e 3c 62 3e  to ."<i>x</i><b>
15b10 26 67 74 3b 3d 3c 2f 62 3e 3c 69 3e 79 3c 2f 69  &gt;=</b><i>y</i
15b20 3e 20 3c 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e  > <b>AND</b> <i>
15b30 78 3c 2f 69 3e 3c 62 3e 26 6c 74 3b 3d 3c 2f 62  x</i><b>&lt;=</b
15b40 3e 3c 69 3e 7a 3c 2f 69 3e 22 20 65 78 63 65 70  ><i>z</i>" excep
15b50 74 0a 74 68 61 74 20 77 69 74 68 20 42 45 54 57  t.that with BETW
15b60 45 45 4e 2c 20 74 68 65 20 3c 69 3e 78 3c 2f 69  EEN, the <i>x</i
15b70 3e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  > expression is 
15b80 6f 6e 6c 79 20 65 76 61 6c 75 61 74 65 64 20 6f  only evaluated o
15b90 6e 63 65 2e 29 5e 0a 5e 54 68 65 20 70 72 65 63  nce.)^.^The prec
15ba0 65 64 65 6e 63 65 20 6f 66 20 74 68 65 20 42 45  edence of the BE
15bb0 54 57 45 45 4e 20 6f 70 65 72 61 74 6f 72 20 69  TWEEN operator i
15bc0 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68  s the same as th
15bd0 65 20 70 72 65 63 65 64 65 6e 63 65 0a 61 73 20  e precedence.as 
15be0 6f 70 65 72 61 74 6f 72 73 20 3c 62 3e 3d 3d 3c  operators <b>==<
15bf0 2f 62 3e 20 61 6e 64 20 3c 62 3e 21 3d 3c 2f 62  /b> and <b>!=</b
15c00 3e 20 61 6e 64 20 3c 62 3e 4c 49 4b 45 3c 2f 62  > and <b>LIKE</b
15c10 3e 20 61 6e 64 20 67 72 6f 75 70 73 20 6c 65 66  > and groups lef
15c20 74 20 74 6f 20 72 69 67 68 74 2e 0a 0a 3c 74 63  t to right...<tc
15c30 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 61  l>hd_fragment ca
15c40 73 65 20 7b 43 41 53 45 20 65 78 70 72 65 73 73  se {CASE express
15c50 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54  ion}</tcl>.<h3>T
15c60 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69  he CASE expressi
15c70 6f 6e 3c 2f 68 33 3e 0a 3c 70 3e 41 20 43 41 53  on</h3>.<p>A CAS
15c80 45 20 65 78 70 72 65 73 73 69 6f 6e 20 73 65 72  E expression ser
15c90 76 65 73 20 61 20 72 6f 6c 65 20 73 69 6d 69 6c  ves a role simil
15ca0 61 72 20 74 6f 20 49 46 2d 54 48 45 4e 2d 45 4c  ar to IF-THEN-EL
15cb0 53 45 20 69 6e 20 6f 74 68 65 72 0a 70 72 6f 67  SE in other.prog
15cc0 72 61 6d 6d 69 6e 67 20 6c 61 6e 67 75 61 67 65  ramming language
15cd0 73 2e 20 20 0a 0a 3c 70 3e 54 68 65 20 6f 70 74  s.  ..<p>The opt
15ce0 69 6f 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e  ional expression
15cf0 20 74 68 61 74 20 6f 63 63 75 72 73 20 69 6e 20   that occurs in 
15d00 62 65 74 77 65 65 6e 20 74 68 65 20 43 41 53 45  between the CASE
15d10 20 6b 65 79 77 6f 72 64 20 61 6e 64 20 74 68 65   keyword and the
15d20 0a 66 69 72 73 74 20 57 48 45 4e 20 6b 65 79 77  .first WHEN keyw
15d30 6f 72 64 20 69 73 20 63 61 6c 6c 65 64 20 74 68  ord is called th
15d40 65 20 22 62 61 73 65 22 20 65 78 70 72 65 73 73  e "base" express
15d50 69 6f 6e 2e 20 5e 54 68 65 72 65 20 61 72 65 20  ion. ^There are 
15d60 74 77 6f 20 62 61 73 69 63 20 66 6f 72 6d 73 0a  two basic forms.
15d70 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70 72  of the CASE expr
15d80 65 73 73 69 6f 6e 3a 20 74 68 6f 73 65 20 77 69  ession: those wi
15d90 74 68 20 61 20 62 61 73 65 20 65 78 70 72 65 73  th a base expres
15da0 73 69 6f 6e 20 61 6e 64 20 74 68 6f 73 65 20 77  sion and those w
15db0 69 74 68 6f 75 74 2e 0a 0a 3c 70 3e 5e 49 6e 20  ithout...<p>^In 
15dc0 61 20 43 41 53 45 20 77 69 74 68 6f 75 74 20 61  a CASE without a
15dd0 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e   base expression
15de0 2c 20 65 61 63 68 20 57 48 45 4e 20 65 78 70 72  , each WHEN expr
15df0 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61  ession is evalua
15e00 74 65 64 0a 61 6e 64 20 74 68 65 20 72 65 73 75  ted.and the resu
15e10 6c 74 20 74 72 65 61 74 65 64 20 61 73 20 61 20  lt treated as a 
15e20 62 6f 6f 6c 65 61 6e 2c 20 73 74 61 72 74 69 6e  boolean, startin
15e30 67 20 77 69 74 68 20 74 68 65 20 6c 65 66 74 6d  g with the leftm
15e40 6f 73 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 69  ost and continui
15e50 6e 67 0a 74 6f 20 74 68 65 20 72 69 67 68 74 2e  ng.to the right.
15e60 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20   ^The result of 
15e70 74 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73  the CASE express
15e80 69 6f 6e 20 69 73 20 74 68 65 20 65 76 61 6c 75  ion is the evalu
15e90 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 54 48 45  ation of the THE
15ea0 4e 0a 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  N.expression tha
15eb0 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
15ec0 20 74 68 65 20 66 69 72 73 74 20 57 48 45 4e 20   the first WHEN 
15ed0 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
15ee0 65 76 61 6c 75 61 74 65 73 20 74 6f 0a 74 72 75  evaluates to.tru
15ef0 65 2e 20 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65 20  e. ^Or, if none 
15f00 6f 66 20 74 68 65 20 57 48 45 4e 20 65 78 70 72  of the WHEN expr
15f10 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65  essions evaluate
15f20 20 74 6f 20 74 72 75 65 2c 20 74 68 65 20 72 65   to true, the re
15f30 73 75 6c 74 20 6f 66 0a 65 76 61 6c 75 61 74 69  sult of.evaluati
15f40 6e 67 20 74 68 65 20 45 4c 53 45 20 65 78 70 72  ng the ELSE expr
15f50 65 73 73 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 20  ession, if any. 
15f60 5e 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ^If there is no 
15f70 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  ELSE expression 
15f80 61 6e 64 0a 6e 6f 6e 65 20 6f 66 20 74 68 65 20  and.none of the 
15f90 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 73  WHEN expressions
15fa0 20 61 72 65 20 74 72 75 65 2c 20 74 68 65 6e 20   are true, then 
15fb0 74 68 65 20 6f 76 65 72 61 6c 6c 20 72 65 73 75  the overall resu
15fc0 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e  lt is NULL...<p>
15fd0 5e 41 20 4e 55 4c 4c 20 72 65 73 75 6c 74 20 69  ^A NULL result i
15fe0 73 20 63 6f 6e 73 69 64 65 72 65 64 20 75 6e 74  s considered unt
15ff0 72 75 65 20 77 68 65 6e 20 65 76 61 6c 75 61 74  rue when evaluat
16000 69 6e 67 20 57 48 45 4e 20 74 65 72 6d 73 2e 0a  ing WHEN terms..
16010 0a 3c 70 3e 5e 49 6e 20 61 20 43 41 53 45 20 77  .<p>^In a CASE w
16020 69 74 68 20 61 20 62 61 73 65 20 65 78 70 72 65  ith a base expre
16030 73 73 69 6f 6e 2c 20 74 68 65 20 62 61 73 65 20  ssion, the base 
16040 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76  expression is ev
16050 61 6c 75 61 74 65 64 20 6a 75 73 74 0a 6f 6e 63  aluated just.onc
16060 65 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74  e and the result
16070 20 69 73 20 63 6f 6d 70 61 72 65 64 20 61 67 61   is compared aga
16080 69 6e 73 74 20 74 68 65 20 65 76 61 6c 75 61 74  inst the evaluat
16090 69 6f 6e 20 6f 66 20 65 61 63 68 20 57 48 45 4e  ion of each WHEN
160a0 20 0a 65 78 70 72 65 73 73 69 6f 6e 20 66 72 6f   .expression fro
160b0 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e  m left to right.
160c0 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20   ^The result of 
160d0 74 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73  the CASE express
160e0 69 6f 6e 20 69 73 20 74 68 65 20 0a 65 76 61 6c  ion is the .eval
160f0 75 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 54 48  uation of the TH
16100 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  EN expression th
16110 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  at corresponds t
16120 6f 20 74 68 65 20 66 69 72 73 74 20 57 48 45 4e  o the first WHEN
16130 0a 65 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20  .expression for 
16140 77 68 69 63 68 20 74 68 65 20 63 6f 6d 70 61 72  which the compar
16150 69 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 5e 4f  ison is true. ^O
16160 72 2c 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68  r, if none of th
16170 65 20 57 48 45 4e 0a 65 78 70 72 65 73 73 69 6f  e WHEN.expressio
16180 6e 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61  ns evaluate to a
16190 20 76 61 6c 75 65 20 65 71 75 61 6c 20 74 6f 20   value equal to 
161a0 74 68 65 20 62 61 73 65 20 65 78 70 72 65 73 73  the base express
161b0 69 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c 74 0a  ion, the result.
161c0 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of evaluating th
161d0 65 20 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f  e ELSE expressio
161e0 6e 2c 20 69 66 20 61 6e 79 2e 20 5e 49 66 20 74  n, if any. ^If t
161f0 68 65 72 65 20 69 73 20 6e 6f 20 45 4c 53 45 20  here is no ELSE 
16200 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 0a 6e  expression and.n
16210 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e 20  one of the WHEN 
16220 65 78 70 72 65 73 73 69 6f 6e 73 20 70 72 6f 64  expressions prod
16230 75 63 65 20 61 20 72 65 73 75 6c 74 20 65 71 75  uce a result equ
16240 61 6c 20 74 6f 20 74 68 65 20 62 61 73 65 20 65  al to the base e
16250 78 70 72 65 73 73 69 6f 6e 2c 0a 74 68 65 20 6f  xpression,.the o
16260 76 65 72 61 6c 6c 20 72 65 73 75 6c 74 20 69 73  verall result is
16270 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e 57 68 65 6e   NULL...<p>^When
16280 20 63 6f 6d 70 61 72 69 6e 67 20 61 20 62 61 73   comparing a bas
16290 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 67 61  e expression aga
162a0 69 6e 73 74 20 61 20 57 48 45 4e 20 65 78 70 72  inst a WHEN expr
162b0 65 73 73 69 6f 6e 2c 20 74 68 65 20 73 61 6d 65  ession, the same
162c0 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65  .collating seque
162d0 6e 63 65 2c 20 61 66 66 69 6e 69 74 79 2c 20 61  nce, affinity, a
162e0 6e 64 20 4e 55 4c 4c 2d 68 61 6e 64 6c 69 6e 67  nd NULL-handling
162f0 20 72 75 6c 65 73 20 61 70 70 6c 79 20 61 73 20   rules apply as 
16300 69 66 20 74 68 65 0a 62 61 73 65 20 65 78 70 72  if the.base expr
16310 65 73 73 69 6f 6e 20 61 6e 64 20 57 48 45 4e 20  ession and WHEN 
16320 65 78 70 72 65 73 73 69 6f 6e 20 61 72 65 20 72  expression are r
16330 65 73 70 65 63 74 69 76 65 6c 79 20 74 68 65 20  espectively the 
16340 6c 65 66 74 2d 20 61 6e 64 0a 72 69 67 68 74 2d  left- and.right-
16350 68 61 6e 64 20 6f 70 65 72 61 6e 64 73 20 6f 66  hand operands of
16360 20 61 6e 20 3c 62 69 67 3e 3c 62 3e 3d 3c 2f 62   an <big><b>=</b
16370 3e 3c 2f 62 69 67 3e 20 6f 70 65 72 61 74 6f 72  ></big> operator
16380 2e 3c 2f 70 3e 20 5e 49 66 20 74 68 65 20 62 61  .</p> ^If the ba
16390 73 65 20 0a 65 78 70 72 65 73 73 69 6f 6e 20 69  se .expression i
163a0 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
163b0 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41  result of the CA
163c0 53 45 20 69 73 20 61 6c 77 61 79 73 20 74 68 65  SE is always the
163d0 20 72 65 73 75 6c 74 20 0a 6f 66 20 65 76 61 6c   result .of eval
163e0 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45 20  uating the ELSE 
163f0 65 78 70 72 65 73 73 69 6f 6e 20 69 66 20 69 74  expression if it
16400 20 65 78 69 73 74 73 2c 20 6f 72 20 4e 55 4c 4c   exists, or NULL
16410 20 69 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 2e   if it does not.
16420 0a 0a 3c 70 3e 5e 42 6f 74 68 20 66 6f 72 6d 73  ..<p>^Both forms
16430 20 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70   of the CASE exp
16440 72 65 73 73 69 6f 6e 20 75 73 65 20 6c 61 7a 79  ression use lazy
16450 2c 20 6f 72 20 73 68 6f 72 74 2d 63 69 72 63 75  , or short-circu
16460 69 74 2c 20 0a 65 76 61 6c 75 61 74 69 6f 6e 2e  it, .evaluation.
16470 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f 6e 6c 79 20  ..<p>^(The only 
16480 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
16490 65 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  en the following
164a0 20 74 77 6f 20 43 41 53 45 20 65 78 70 72 65 73   two CASE expres
164b0 73 69 6f 6e 73 20 69 73 20 74 68 61 74 20 0a 74  sions is that .t
164c0 68 65 20 3c 69 3e 78 3c 2f 69 3e 20 65 78 70 72  he <i>x</i> expr
164d0 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61  ession is evalua
164e0 74 65 64 20 65 78 61 63 74 6c 79 20 6f 6e 63 65  ted exactly once
164f0 20 69 6e 20 74 68 65 20 66 69 72 73 74 20 65 78   in the first ex
16500 61 6d 70 6c 65 20 62 75 74 20 0a 6d 69 67 68 74  ample but .might
16510 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 6d 75   be evaluated mu
16520 6c 74 69 70 6c 65 20 74 69 6d 65 73 20 69 6e 20  ltiple times in 
16530 74 68 65 20 73 65 63 6f 6e 64 3a 0a 0a 3c 75 6c  the second:..<ul
16540 3e 3c 70 72 65 3e 0a 3c 6c 69 3e 43 41 53 45 20  ><pre>.<li>CASE 
16550 78 20 57 48 45 4e 20 77 31 20 54 48 45 4e 20 72  x WHEN w1 THEN r
16560 31 20 57 48 45 4e 20 77 32 20 54 48 45 4e 20 72  1 WHEN w2 THEN r
16570 32 20 45 4c 53 45 20 72 33 20 45 4e 44 0a 3c 6c  2 ELSE r3 END.<l
16580 69 3e 43 41 53 45 20 57 48 45 4e 20 78 3d 77 31  i>CASE WHEN x=w1
16590 20 54 48 45 4e 20 72 31 20 57 48 45 4e 20 78 3d   THEN r1 WHEN x=
165a0 77 32 20 54 48 45 4e 20 72 32 20 45 4c 53 45 20  w2 THEN r2 ELSE 
165b0 72 33 20 45 4e 44 0a 3c 2f 70 72 65 3e 3c 2f 75  r3 END.</pre></u
165c0 6c 3e 29 5e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66  l>)^...<tcl>hd_f
165d0 72 61 67 6d 65 6e 74 20 69 6e 5f 6f 70 20 7b 49  ragment in_op {I
165e0 4e 20 6f 70 65 72 61 74 6f 72 7d 20 7b 4e 4f 54  N operator} {NOT
165f0 20 49 4e 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74   IN operator}</t
16600 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 49 4e 20 61  cl>.<h3>The IN a
16610 6e 64 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74  nd NOT IN operat
16620 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65  ors</h3>.<p>^The
16630 20 49 4e 20 61 6e 64 20 4e 4f 54 20 49 4e 20 6f   IN and NOT IN o
16640 70 65 72 61 74 6f 72 73 20 74 61 6b 65 20 61 6e  perators take an
16650 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 6e 20 74   expression on t
16660 68 65 0a 6c 65 66 74 20 61 6e 64 20 61 20 6c 69  he.left and a li
16670 73 74 20 6f 66 20 76 61 6c 75 65 73 20 6f 72 20  st of values or 
16680 61 20 73 75 62 71 75 65 72 79 20 6f 6e 20 74 68  a subquery on th
16690 65 20 72 69 67 68 74 2e 0a 5e 57 68 65 6e 20 74  e right..^When t
166a0 68 65 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  he right operand
166b0 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54   of an IN or NOT
166c0 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20   IN operator is 
166d0 61 20 73 75 62 71 75 65 72 79 2c 20 74 68 65 0a  a subquery, the.
166e0 73 75 62 71 75 65 72 79 20 6d 75 73 74 20 68 61  subquery must ha
166f0 76 65 20 74 68 65 20 73 61 6d 65 20 6e 75 6d 62  ve the same numb
16700 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 61 73  er of columns as
16710 20 74 68 65 72 65 20 61 72 65 20 63 6f 6c 75 6d   there are colum
16720 6e 73 20 69 6e 0a 74 68 65 20 5b 72 6f 77 20 76  ns in.the [row v
16730 61 6c 75 65 5d 20 6f 66 20 74 68 65 20 6c 65 66  alue] of the lef
16740 74 20 6f 70 65 72 61 6e 64 2e 20 20 5e 54 68 65  t operand.  ^The
16750 20 73 75 62 71 75 65 72 79 20 6f 6e 20 74 68 65   subquery on the
16760 0a 72 69 67 68 74 20 6f 66 20 61 6e 20 49 4e 20  .right of an IN 
16770 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74  or NOT IN operat
16780 6f 72 20 6d 75 73 74 20 62 65 20 61 20 73 63 61  or must be a sca
16790 6c 61 72 20 73 75 62 71 75 65 72 79 20 69 66 20  lar subquery if 
167a0 74 68 65 20 6c 65 66 74 0a 65 78 70 72 65 73 73  the left.express
167b0 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20 5b 72 6f  ion is not a [ro
167c0 77 20 76 61 6c 75 65 5d 20 65 78 70 72 65 73 73  w value] express
167d0 69 6f 6e 2e 0a 5e 49 66 20 74 68 65 20 72 69 67  ion..^If the rig
167e0 68 74 20 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e  ht operand of an
167f0 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70   IN or NOT IN op
16800 65 72 61 74 6f 72 20 69 73 20 61 20 6c 69 73 74  erator is a list
16810 20 6f 66 20 76 61 6c 75 65 73 2c 0a 65 61 63 68   of values,.each
16820 20 6f 66 20 74 68 6f 73 65 20 76 61 6c 75 65 73   of those values
16830 20 6d 75 73 74 20 62 65 20 73 63 61 6c 61 72 73   must be scalars
16840 20 61 6e 64 20 74 68 65 20 6c 65 66 74 20 65 78   and the left ex
16850 70 72 65 73 73 69 6f 6e 20 6d 75 73 74 20 61 6c  pression must al
16860 73 6f 0a 62 65 20 61 20 73 63 61 6c 61 72 2e 0a  so.be a scalar..
16870 5e 54 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20  ^The right-hand 
16880 73 69 64 65 20 6f 66 20 61 6e 20 49 4e 20 6f 72  side of an IN or
16890 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72   NOT IN operator
168a0 20 63 61 6e 20 62 65 20 61 0a 74 61 62 6c 65 20   can be a.table 
168b0 3c 69 3e 6e 61 6d 65 3c 2f 69 3e 20 6f 72 20 5b  <i>name</i> or [
168c0 74 61 62 6c 65 2d 76 61 6c 75 65 64 20 66 75 6e  table-valued fun
168d0 63 74 69 6f 6e 5d 20 3c 69 3e 6e 61 6d 65 3c 2f  ction] <i>name</
168e0 69 3e 20 69 6e 20 77 68 69 63 68 20 0a 63 61 73  i> in which .cas
168f0 65 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  e the right-hand
16900 20 73 69 64 65 20 69 73 20 75 6e 64 65 72 73 74   side is underst
16910 6f 6f 64 20 74 6f 20 62 65 20 73 75 62 71 75 65  ood to be subque
16920 72 79 20 6f 66 0a 74 68 65 20 66 6f 72 6d 20 22  ry of.the form "
16930 28 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 3c  (SELECT * FROM <
16940 69 3e 6e 61 6d 65 3c 2f 69 3e 29 22 2e 0a 5e 57  i>name</i>)"..^W
16950 68 65 6e 20 74 68 65 20 72 69 67 68 74 20 6f 70  hen the right op
16960 65 72 61 6e 64 20 69 73 20 61 6e 20 65 6d 70 74  erand is an empt
16970 79 20 73 65 74 2c 20 74 68 65 20 72 65 73 75 6c  y set, the resul
16980 74 20 6f 66 20 49 4e 20 69 73 20 66 61 6c 73 65  t of IN is false
16990 20 61 6e 64 20 74 68 65 0a 72 65 73 75 6c 74 20   and the.result 
169a0 6f 66 20 4e 4f 54 20 49 4e 20 69 73 20 74 72 75  of NOT IN is tru
169b0 65 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  e, regardless of
169c0 20 74 68 65 20 6c 65 66 74 20 6f 70 65 72 61 6e   the left operan
169d0 64 20 61 6e 64 20 65 76 65 6e 20 69 66 20 74 68  d and even if th
169e0 65 0a 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 69  e.left operand i
169f0 73 20 4e 55 4c 4c 2e 0a 3c 70 3e 5e 28 54 68 65  s NULL..<p>^(The
16a00 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 20 49 4e   result of an IN
16a10 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61   or NOT IN opera
16a20 74 6f 72 20 69 73 20 64 65 74 65 72 6d 69 6e 65  tor is determine
16a30 64 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69  d by the followi
16a40 6e 67 0a 6d 61 74 72 69 78 3a 0a 0a 3c 63 65 6e  ng.matrix:..<cen
16a50 74 65 72 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64  ter>.<table bord
16a60 65 72 3d 31 3e 0a 3c 74 72 3e 0a 3c 74 68 3e 4c  er=1>.<tr>.<th>L
16a70 65 66 74 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e  eft operand <br>
16a80 69 73 20 4e 55 4c 4c 0a 3c 74 68 3e 52 69 67 68  is NULL.<th>Righ
16a90 74 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e 63 6f  t operand <br>co
16aa0 6e 74 61 69 6e 73 20 4e 55 4c 4c 0a 3c 74 68 3e  ntains NULL.<th>
16ab0 52 69 67 68 74 20 6f 70 65 72 61 6e 64 20 3c 62  Right operand <b
16ac0 72 3e 69 73 20 61 6e 20 65 6d 70 74 79 20 73 65  r>is an empty se
16ad0 74 0a 3c 74 68 3e 4c 65 66 74 20 6f 70 65 72 61  t.<th>Left opera
16ae0 6e 64 20 66 6f 75 6e 64 20 3c 62 72 3e 77 69 74  nd found <br>wit
16af0 68 69 6e 20 72 69 67 68 74 20 6f 70 65 72 61 6e  hin right operan
16b00 64 0a 3c 74 68 3e 52 65 73 75 6c 74 20 6f 66 20  d.<th>Result of 
16b10 3c 62 72 3e 49 4e 20 6f 70 65 72 61 74 6f 72 0a  <br>IN operator.
16b20 3c 74 68 3e 52 65 73 75 6c 74 20 6f 66 20 3c 62  <th>Result of <b
16b30 72 3e 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f  r>NOT IN operato
16b40 72 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  r.<tr>.<td align
16b50 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
16b60 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
16b70 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
16b80 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
16b90 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
16ba0 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
16bb0 22 3e 66 61 6c 73 65 0a 3c 74 64 20 61 6c 69 67  ">false.<td alig
16bc0 6e 3d 22 63 65 6e 74 65 72 22 3e 74 72 75 65 0a  n="center">true.
16bd0 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
16be0 63 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74  center">does not
16bf0 20 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c 69 67   matter.<td alig
16c00 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74  n="center">no.<t
16c10 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
16c20 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  >yes.<td align="
16c30 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
16c40 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61  lign="center">fa
16c50 6c 73 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  lse.<td align="c
16c60 65 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74 72 3e  enter">true.<tr>
16c70 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
16c80 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
16c90 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e  ="center">does n
16ca0 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c  ot matter.<td al
16cb0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
16cc0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
16cd0 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e  r">yes.<td align
16ce0 3d 22 63 65 6e 74 65 72 22 3e 74 72 75 65 0a 3c  ="center">true.<
16cf0 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
16d00 22 3e 66 61 6c 73 65 0a 3c 74 72 3e 0a 3c 74 64  ">false.<tr>.<td
16d10 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
16d20 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
16d30 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c  nter">yes.<td al
16d40 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
16d50 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
16d60 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
16d70 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74  "center">NULL.<t
16d80 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
16d90 3e 4e 55 4c 4c 0a 3c 74 72 3e 0a 3c 74 64 20 61  >NULL.<tr>.<td a
16da0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65  lign="center">ye
16db0 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  s.<td align="cen
16dc0 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61  ter">does not ma
16dd0 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  tter.<td align="
16de0 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
16df0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f  lign="center">do
16e00 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74  es not matter.<t
16e10 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
16e20 3e 4e 55 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d  >NULL.<td align=
16e30 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 2f  "center">NULL.</
16e40 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e  table>.</center>
16e50 29 5e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61  )^..<p>^Note tha
16e60 74 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20  t SQLite allows 
16e70 74 68 65 20 70 61 72 65 6e 74 68 65 73 69 7a 65  the parenthesize
16e80 64 20 6c 69 73 74 20 6f 66 20 73 63 61 6c 61 72  d list of scalar
16e90 20 76 61 6c 75 65 73 20 6f 6e 0a 74 68 65 20 72   values on.the r
16ea0 69 67 68 74 2d 68 61 6e 64 20 73 69 64 65 20 6f  ight-hand side o
16eb0 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49  f an IN or NOT I
16ec0 4e 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65  N operator to be
16ed0 20 61 6e 20 65 6d 70 74 79 20 6c 69 73 74 20 62   an empty list b
16ee0 75 74 0a 6d 6f 73 74 20 6f 74 68 65 72 20 53 51  ut.most other SQ
16ef0 4c 20 64 61 74 61 62 61 73 65 20 64 61 74 61 62  L database datab
16f00 61 73 65 20 65 6e 67 69 6e 65 73 20 61 6e 64 20  ase engines and 
16f10 74 68 65 20 53 51 4c 39 32 20 73 74 61 6e 64 61  the SQL92 standa
16f20 72 64 20 72 65 71 75 69 72 65 0a 74 68 65 20 6c  rd require.the l
16f30 69 73 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61  ist to contain a
16f40 74 20 6c 65 61 73 74 20 6f 6e 65 20 65 6c 65 6d  t least one elem
16f50 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 61  ent.</p>..<h3>Ta
16f60 62 6c 65 20 43 6f 6c 75 6d 6e 20 4e 61 6d 65 73  ble Column Names
16f70 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 41 20 63 6f 6c  </h3>..<p>^A col
16f80 75 6d 6e 20 6e 61 6d 65 20 63 61 6e 20 62 65 20  umn name can be 
16f90 61 6e 79 20 6f 66 20 74 68 65 20 6e 61 6d 65 73  any of the names
16fa0 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68 65 20   defined in the 
16fb0 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 0a 73  [CREATE TABLE].s
16fc0 74 61 74 65 6d 65 6e 74 20 6f 72 20 6f 6e 65 20  tatement or one 
16fd0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
16fe0 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69 66   special identif
16ff0 69 65 72 73 3a 20 22 3c 62 3e 52 4f 57 49 44 3c  iers: "<b>ROWID<
17000 2f 62 3e 22 2c 0a 22 3c 62 3e 4f 49 44 3c 2f 62  /b>",."<b>OID</b
17010 3e 22 2c 20 6f 72 20 22 3c 62 3e 5f 52 4f 57 49  >", or "<b>_ROWI
17020 44 5f 3c 2f 62 3e 22 2e 0a 5e 54 68 65 20 74 68  D_</b>"..^The th
17030 72 65 65 20 73 70 65 63 69 61 6c 20 69 64 65 6e  ree special iden
17040 74 69 66 69 65 72 73 20 64 65 73 63 72 69 62 65  tifiers describe
17050 20 74 68 65 0a 75 6e 69 71 75 65 20 69 6e 74 65   the.unique inte
17060 67 65 72 20 6b 65 79 20 28 74 68 65 20 5b 72 6f  ger key (the [ro
17070 77 69 64 5d 29 20 61 73 73 6f 63 69 61 74 65 64  wid]) associated
17080 20 77 69 74 68 20 65 76 65 72 79 20 0a 72 6f 77   with every .row
17090 20 6f 66 20 65 76 65 72 79 20 74 61 62 6c 65 20   of every table 
170a0 61 6e 64 20 73 6f 20 61 72 65 20 6e 6f 74 20 61  and so are not a
170b0 76 61 69 6c 61 62 6c 65 20 6f 6e 20 5b 57 49 54  vailable on [WIT
170c0 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c  HOUT ROWID] tabl
170d0 65 73 2e 0a 5e 54 68 65 20 73 70 65 63 69 61 6c  es..^The special
170e0 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 6c   identifiers onl
170f0 79 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 72  y refer to the r
17100 6f 77 20 6b 65 79 20 69 66 20 74 68 65 20 5b 43  ow key if the [C
17110 52 45 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61  REATE TABLE].sta
17120 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20  tement does not 
17130 64 65 66 69 6e 65 20 61 20 72 65 61 6c 20 63 6f  define a real co
17140 6c 75 6d 6e 20 77 69 74 68 20 74 68 65 20 73 61  lumn with the sa
17150 6d 65 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 72 6f  me name..^The ro
17160 77 69 64 20 63 61 6e 20 62 65 20 75 73 65 64 20  wid can be used 
17170 61 6e 79 77 68 65 72 65 20 61 20 72 65 67 75 6c  anywhere a regul
17180 61 72 0a 63 6f 6c 75 6d 6e 20 63 61 6e 20 62 65  ar.column can be
17190 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c   used.</p>..<tcl
171a0 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 5f  >hd_fragment in_
171b0 6f 70 20 7b 45 58 49 53 54 53 20 6f 70 65 72 61  op {EXISTS opera
171c0 74 6f 72 7d 20 7b 4e 4f 54 20 45 58 49 53 54 53  tor} {NOT EXISTS
171d0 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e   operator}</tcl>
171e0 0a 3c 68 33 3e 54 68 65 20 45 58 49 53 54 53 20  .<h3>The EXISTS 
171f0 6f 70 65 72 61 74 6f 72 3c 2f 68 33 3e 0a 0a 3c  operator</h3>..<
17200 70 3e 5e 54 68 65 20 45 58 49 53 54 53 20 6f 70  p>^The EXISTS op
17210 65 72 61 74 6f 72 20 61 6c 77 61 79 73 20 65 76  erator always ev
17220 61 6c 75 61 74 65 73 20 74 6f 20 6f 6e 65 20 6f  aluates to one o
17230 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  f the integer va
17240 6c 75 65 73 20 30 20 0a 61 6e 64 20 31 2e 20 5e  lues 0 .and 1. ^
17250 49 66 20 65 78 65 63 75 74 69 6e 67 20 74 68 65  If executing the
17260 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
17270 74 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74  t specified as t
17280 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 0a 6f  he right-hand .o
17290 70 65 72 61 6e 64 20 6f 66 20 74 68 65 20 45 58  perand of the EX
172a0 49 53 54 53 20 6f 70 65 72 61 74 6f 72 20 77 6f  ISTS operator wo
172b0 75 6c 64 20 72 65 74 75 72 6e 20 6f 6e 65 20 6f  uld return one o
172c0 72 20 6d 6f 72 65 20 72 6f 77 73 2c 20 74 68 65  r more rows, the
172d0 6e 20 74 68 65 0a 45 58 49 53 54 53 20 6f 70 65  n the.EXISTS ope
172e0 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20  rator evaluates 
172f0 74 6f 20 31 2e 20 5e 49 66 20 65 78 65 63 75 74  to 1. ^If execut
17300 69 6e 67 20 74 68 65 20 53 45 4c 45 43 54 20 77  ing the SELECT w
17310 6f 75 6c 64 20 72 65 74 75 72 6e 0a 6e 6f 20 72  ould return.no r
17320 6f 77 73 20 61 74 20 61 6c 6c 2c 20 74 68 65 6e  ows at all, then
17330 20 74 68 65 20 45 58 49 53 54 53 20 6f 70 65 72   the EXISTS oper
17340 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74  ator evaluates t
17350 6f 20 30 2e 20 0a 0a 3c 70 3e 5e 54 68 65 20 6e  o 0. ..<p>^The n
17360 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
17370 20 69 6e 20 65 61 63 68 20 72 6f 77 20 72 65 74   in each row ret
17380 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c  urned by the SEL
17390 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a 28 69  ECT statement.(i
173a0 66 20 61 6e 79 29 20 61 6e 64 20 74 68 65 20 73  f any) and the s
173b0 70 65 63 69 66 69 63 20 76 61 6c 75 65 73 20 72  pecific values r
173c0 65 74 75 72 6e 65 64 20 68 61 76 65 20 6e 6f 20  eturned have no 
173d0 65 66 66 65 63 74 20 6f 6e 20 74 68 65 20 72 65  effect on the re
173e0 73 75 6c 74 73 0a 6f 66 20 74 68 65 20 45 58 49  sults.of the EXI
173f0 53 54 53 20 6f 70 65 72 61 74 6f 72 2e 20 5e 49  STS operator. ^I
17400 6e 20 70 61 72 74 69 63 75 6c 61 72 2c 20 72 6f  n particular, ro
17410 77 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 4e 55  ws containing NU
17420 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 0a 6e 6f  LL values are.no
17430 74 20 68 61 6e 64 6c 65 64 20 61 6e 79 20 64 69  t handled any di
17440 66 66 65 72 65 6e 74 6c 79 20 66 72 6f 6d 20 72  fferently from r
17450 6f 77 73 20 77 69 74 68 6f 75 74 20 4e 55 4c 4c  ows without NULL
17460 20 76 61 6c 75 65 73 2e 0a 0a 3c 74 63 6c 3e 68   values...<tcl>h
17470 64 5f 66 72 61 67 6d 65 6e 74 20 73 75 62 71 20  d_fragment subq 
17480 7b 53 75 62 71 75 65 72 69 65 73 7d 3c 2f 74 63  {Subqueries}</tc
17490 6c 3e 0a 3c 68 33 3e 53 75 62 71 75 65 72 79 20  l>.<h3>Subquery 
174a0 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e  Expressions</h3>
174b0 0a 0a 3c 70 3e 5e 41 20 5b 53 45 4c 45 43 54 5d  ..<p>^A [SELECT]
174c0 20 73 74 61 74 65 6d 65 6e 74 20 65 6e 63 6c 6f   statement enclo
174d0 73 65 64 20 69 6e 20 70 61 72 65 6e 74 68 65 73  sed in parenthes
174e0 65 73 20 69 73 20 61 20 73 75 62 71 75 65 72 79  es is a subquery
174f0 2e 0a 5e 41 6c 6c 20 74 79 70 65 73 20 6f 66 20  ..^All types of 
17500 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
17510 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 61 67 67 72  , including.aggr
17520 65 67 61 74 65 20 61 6e 64 20 63 6f 6d 70 6f 75  egate and compou
17530 6e 64 20 53 45 4c 45 43 54 20 71 75 65 72 69 65  nd SELECT querie
17540 73 20 28 71 75 65 72 69 65 73 20 77 69 74 68 20  s (queries with 
17550 6b 65 79 77 6f 72 64 73 20 6c 69 6b 65 0a 55 4e  keywords like.UN
17560 49 4f 4e 20 6f 72 20 45 58 43 45 50 54 29 20 61  ION or EXCEPT) a
17570 72 65 20 61 6c 6c 6f 77 65 64 20 61 73 20 73 63  re allowed as sc
17580 61 6c 61 72 20 73 75 62 71 75 65 72 69 65 73 2e  alar subqueries.
17590 0a 5e 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61  .^The value of a
175a0 20 73 75 62 71 75 65 72 79 20 65 78 70 72 65 73   subquery expres
175b0 73 69 6f 6e 20 69 73 20 74 68 65 20 66 69 72 73  sion is the firs
175c0 74 20 72 6f 77 20 6f 66 20 74 68 65 20 72 65 73  t row of the res
175d0 75 6c 74 0a 66 72 6f 6d 20 74 68 65 20 65 6e 63  ult.from the enc
175e0 6c 6f 73 65 64 20 5b 53 45 4c 45 43 54 5d 20 73  losed [SELECT] s
175f0 74 61 74 65 6d 65 6e 74 2e 0a 5e 49 6e 20 6f 74  tatement..^In ot
17600 68 65 72 20 77 6f 72 64 73 2c 20 61 6e 20 69 6d  her words, an im
17610 70 6c 69 65 64 20 22 4c 49 4d 49 54 20 31 22 20  plied "LIMIT 1" 
17620 69 73 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  is added to the 
17630 73 75 62 71 75 65 72 79 2c 20 6f 76 65 72 72 69  subquery, overri
17640 64 69 6e 67 0a 61 6e 20 65 78 70 6c 69 63 69 74  ding.an explicit
17650 6c 79 20 63 6f 64 65 64 20 4c 49 4d 49 54 2e 0a  ly coded LIMIT..
17660 5e 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20  ^The value of a 
17670 73 75 62 71 75 65 72 79 20 65 78 70 72 65 73 73  subquery express
17680 69 6f 6e 20 69 73 20 4e 55 4c 4c 20 69 66 20 74  ion is NULL if t
17690 68 65 20 65 6e 63 6c 6f 73 65 64 0a 5b 53 45 4c  he enclosed.[SEL
176a0 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 20 72  ECT] statement r
176b0 65 74 75 72 6e 73 20 6e 6f 20 72 6f 77 73 2e 0a  eturns no rows..
176c0 0a 3c 70 3e 41 20 73 75 62 71 75 65 72 79 20 74  .<p>A subquery t
176d0 68 61 74 20 72 65 74 75 72 6e 73 20 61 20 73 69  hat returns a si
176e0 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61  ngle column is a
176f0 20 73 63 61 6c 61 72 20 73 75 62 71 75 65 72 79   scalar subquery
17700 20 61 6e 64 20 63 61 6e 0a 62 65 20 75 73 65 64   and can.be used
17710 20 6d 6f 73 74 20 61 6e 79 77 68 65 72 65 2e 0a   most anywhere..
17720 5e 41 20 73 75 62 71 75 65 72 79 20 74 68 61 74  ^A subquery that
17730 20 72 65 74 75 72 6e 73 20 74 77 6f 20 6f 72 20   returns two or 
17740 6d 6f 72 65 20 63 6f 6c 75 6d 6e 73 20 69 73 20  more columns is 
17750 61 20 5b 72 6f 77 20 76 61 6c 75 65 5d 0a 73 75  a [row value].su
17760 62 71 75 65 72 79 20 61 6e 64 20 63 61 6e 20 6f  bquery and can o
17770 6e 6c 79 20 62 65 20 75 73 65 64 20 61 73 20 74  nly be used as t
17780 68 65 20 6f 70 65 72 61 6e 64 20 6f 66 20 61 20  he operand of a 
17790 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61  comparison opera
177a0 74 6f 72 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  tor...<tcl>hd_fr
177b0 61 67 6d 65 6e 74 20 63 6f 73 75 62 20 7b 63 6f  agment cosub {co
177c0 72 72 65 6c 61 74 65 64 20 73 75 62 71 75 65 72  rrelated subquer
177d0 69 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43  ies}</tcl>.<h3>C
177e0 6f 72 72 65 6c 61 74 65 64 20 53 75 62 71 75 65  orrelated Subque
177f0 72 69 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 41  ries</h3>..<p>^A
17800 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d   [SELECT] statem
17810 65 6e 74 20 75 73 65 64 20 61 73 20 65 69 74 68  ent used as eith
17820 65 72 20 61 20 73 63 61 6c 61 72 20 73 75 62 71  er a scalar subq
17830 75 65 72 79 20 6f 72 20 61 73 20 74 68 65 20 0a  uery or as the .
17840 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61  right-hand opera
17850 6e 64 20 6f 66 20 61 6e 20 49 4e 2c 20 4e 4f 54  nd of an IN, NOT
17860 20 49 4e 20 6f 72 20 45 58 49 53 54 53 20 65 78   IN or EXISTS ex
17870 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 63 6f 6e  pression may con
17880 74 61 69 6e 20 0a 72 65 66 65 72 65 6e 63 65 73  tain .references
17890 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   to columns in t
178a0 68 65 20 6f 75 74 65 72 20 71 75 65 72 79 2e 20  he outer query. 
178b0 53 75 63 68 20 61 20 73 75 62 71 75 65 72 79 20  Such a subquery 
178c0 69 73 20 6b 6e 6f 77 6e 20 61 73 0a 61 20 63 6f  is known as.a co
178d0 72 72 65 6c 61 74 65 64 20 73 75 62 71 75 65 72  rrelated subquer
178e0 79 2e 20 5e 41 20 63 6f 72 72 65 6c 61 74 65 64  y. ^A correlated
178f0 20 73 75 62 71 75 65 72 79 20 69 73 20 72 65 65   subquery is ree
17900 76 61 6c 75 61 74 65 64 20 65 61 63 68 20 74 69  valuated each ti
17910 6d 65 0a 69 74 73 20 72 65 73 75 6c 74 20 69 73  me.its result is
17920 20 72 65 71 75 69 72 65 64 2e 20 5e 41 6e 20 75   required. ^An u
17930 6e 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71  ncorrelated subq
17940 75 65 72 79 20 69 73 20 65 76 61 6c 75 61 74 65  uery is evaluate
17950 64 20 6f 6e 6c 79 20 6f 6e 63 65 0a 61 6e 64 20  d only once.and 
17960 74 68 65 20 72 65 73 75 6c 74 20 72 65 75 73 65  the result reuse
17970 64 20 61 73 20 6e 65 63 65 73 73 61 72 79 2e 0a  d as necessary..
17980 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
17990 74 20 63 61 73 74 65 78 70 72 20 7b 43 41 53 54  t castexpr {CAST
179a0 20 65 78 70 72 65 73 73 69 6f 6e 7d 20 7b 43 41   expression} {CA
179b0 53 54 7d 20 7b 63 61 73 74 7d 20 7b 43 41 53 54  ST} {cast} {CAST
179c0 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e   operator}</tcl>
179d0 0a 3c 68 33 3e 43 41 53 54 20 65 78 70 72 65 73  .<h3>CAST expres
179e0 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 41  sions</h3>..<p>A
179f0 20 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e   CAST expression
17a00 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 43 41   of the form "CA
17a10 53 54 28 3c 69 3e 65 78 70 72 3c 2f 69 3e 20 41  ST(<i>expr</i> A
17a20 53 20 3c 69 3e 74 79 70 65 2d 6e 61 6d 65 3c 2f  S <i>type-name</
17a30 69 3e 29 22 0a 69 73 20 75 73 65 64 20 74 6f 20  i>)".is used to 
17a40 63 6f 6e 76 65 72 74 20 74 68 65 20 76 61 6c 75  convert the valu
17a50 65 20 6f 66 20 3c 69 3e 65 78 70 72 3c 2f 69 3e  e of <i>expr</i>
17a60 20 74 6f 20 0a 61 20 64 69 66 66 65 72 65 6e 74   to .a different
17a70 20 5b 73 74 6f 72 61 67 65 20 63 6c 61 73 73 5d   [storage class]
17a80 20 73 70 65 63 69 66 69 65 64 20 62 79 20 3c 79   specified by <y
17a90 79 74 65 72 6d 3e 74 79 70 65 2d 6e 61 6d 65 3c  yterm>type-name<
17aa0 2f 79 79 74 65 72 6d 3e 2e 0a 5e 41 20 43 41 53  /yyterm>..^A CAS
17ab0 54 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20  T conversion is 
17ac0 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 65 20 63  similar to the c
17ad0 6f 6e 76 65 72 73 69 6f 6e 20 74 68 61 74 20 74  onversion that t
17ae0 61 6b 65 73 0a 70 6c 61 63 65 20 77 68 65 6e 20  akes.place when 
17af0 61 20 5b 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  a [column affini
17b00 74 79 5d 20 69 73 20 61 70 70 6c 69 65 64 20 74  ty] is applied t
17b10 6f 20 61 20 76 61 6c 75 65 20 65 78 63 65 70 74  o a value except
17b20 20 74 68 61 74 20 77 69 74 68 0a 74 68 65 20 43   that with.the C
17b30 41 53 54 20 6f 70 65 72 61 74 6f 72 20 74 68 65  AST operator the
17b40 20 63 6f 6e 76 65 72 73 69 6f 6e 20 61 6c 77 61   conversion alwa
17b50 79 73 20 74 61 6b 65 73 20 70 6c 61 63 65 20 65  ys takes place e
17b60 76 65 6e 20 69 66 20 74 68 65 20 63 6f 6e 76 65  ven if the conve
17b70 72 73 69 6f 6e 0a 6c 6f 73 73 79 20 61 6e 64 20  rsion.lossy and 
17b80 69 72 72 65 76 65 72 73 69 62 6c 65 2c 20 77 68  irreversible, wh
17b90 65 72 65 61 73 20 63 6f 6c 75 6d 6e 20 61 66 66  ereas column aff
17ba0 69 6e 69 74 79 20 6f 6e 6c 79 20 63 68 61 6e 67  inity only chang
17bb0 65 73 20 74 68 65 20 64 61 74 61 20 74 79 70 65  es the data type
17bc0 0a 6f 66 20 61 20 76 61 6c 75 65 20 69 66 20 74  .of a value if t
17bd0 68 65 20 63 68 61 6e 67 65 20 69 73 20 6c 6f 73  he change is los
17be0 73 6c 65 73 73 20 61 6e 64 20 72 65 76 65 72 73  sless and revers
17bf0 69 62 6c 65 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68  ible...<p>^If th
17c00 65 20 76 61 6c 75 65 20 6f 66 20 3c 69 3e 65 78  e value of <i>ex
17c10 70 72 3c 2f 69 3e 20 69 73 20 4e 55 4c 4c 2c 20  pr</i> is NULL, 
17c20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
17c30 6f 66 20 74 68 65 20 43 41 53 54 0a 65 78 70 72  of the CAST.expr
17c40 65 73 73 69 6f 6e 20 69 73 20 61 6c 73 6f 20 4e  ession is also N
17c50 55 4c 4c 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c  ULL. ^Otherwise,
17c60 20 74 68 65 20 73 74 6f 72 61 67 65 20 63 6c 61   the storage cla
17c70 73 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ss of the result
17c80 0a 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62  .is determined b
17c90 79 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20 5b  y applying the [
17ca0 72 75 6c 65 73 20 66 6f 72 20 64 65 74 65 72 6d  rules for determ
17cb0 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 20 61 66 66  ining column aff
17cc0 69 6e 69 74 79 5d 20 74 6f 0a 74 68 65 20 3c 79  inity] to.the <y
17cd0 79 74 65 72 6d 3e 74 79 70 65 2d 6e 61 6d 65 3c  yterm>type-name<
17ce0 2f 79 79 74 65 72 6d 3e 2e 0a 0a 3c 74 61 62 6c  /yyterm>...<tabl
17cf0 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e  e border=1>.<tr>
17d00 0a 20 20 3c 74 68 3e 20 41 66 66 69 6e 69 74 79  .  <th> Affinity
17d10 20 6f 66 20 3c 79 79 74 65 72 6d 3e 74 79 70 65   of <yyterm>type
17d20 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 20  -name</yyterm>. 
17d30 20 3c 74 68 3e 20 43 6f 6e 76 65 72 73 69 6f 6e   <th> Conversion
17d40 20 50 72 6f 63 65 73 73 69 6e 67 0a 3c 74 72 3e   Processing.<tr>
17d50 0a 20 20 3c 74 64 3e 20 4e 4f 4e 45 20 0a 20 20  .  <td> NONE .  
17d60 3c 74 64 3e 20 5e 43 61 73 74 69 6e 67 20 61 20  <td> ^Casting a 
17d70 76 61 6c 75 65 20 74 6f 20 61 20 3c 79 79 74 65  value to a <yyte
17d80 72 6d 3e 74 79 70 65 2d 6e 61 6d 65 3c 2f 79 79  rm>type-name</yy
17d90 74 65 72 6d 3e 20 77 69 74 68 20 6e 6f 20 61 66  term> with no af
17da0 66 69 6e 69 74 79 20 0a 20 20 63 61 75 73 65 73  finity .  causes
17db0 20 74 68 65 20 76 61 6c 75 65 20 74 6f 0a 20 20   the value to.  
17dc0 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
17dd0 6f 20 61 20 42 4c 4f 42 2e 20 20 5e 43 61 73 74  o a BLOB.  ^Cast
17de0 69 6e 67 20 74 6f 20 61 20 42 4c 4f 42 20 63 6f  ing to a BLOB co
17df0 6e 73 69 73 74 73 20 6f 66 20 66 69 72 73 74 20  nsists of first 
17e00 63 61 73 74 69 6e 67 0a 20 20 74 68 65 20 76 61  casting.  the va
17e10 6c 75 65 20 74 6f 20 54 45 58 54 20 69 6e 20 74  lue to TEXT in t
17e20 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 6f 66  he [encoding] of
17e30 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
17e40 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65 6e 0a 20  nnection, then. 
17e50 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20 74 68   interpreting th
17e60 65 20 72 65 73 75 6c 74 69 6e 67 20 62 79 74 65  e resulting byte
17e70 20 73 65 71 75 65 6e 63 65 20 61 73 20 61 20 42   sequence as a B
17e80 4c 4f 42 20 69 6e 73 74 65 61 64 20 6f 66 20 61  LOB instead of a
17e90 73 20 54 45 58 54 2e 0a 0a 3c 74 72 3e 0a 20 20  s TEXT...<tr>.  
17ea0 3c 74 64 3e 20 54 45 58 54 0a 20 20 3c 74 64 3e  <td> TEXT.  <td>
17eb0 20 5e 54 6f 20 63 61 73 74 20 61 20 42 4c 4f 42   ^To cast a BLOB
17ec0 20 76 61 6c 75 65 20 74 6f 20 54 45 58 54 2c 20   value to TEXT, 
17ed0 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f 66 20  the sequence of 
17ee0 62 79 74 65 73 20 74 68 61 74 20 6d 61 6b 65 20  bytes that make 
17ef0 75 70 20 74 68 65 0a 20 20 42 4c 4f 42 20 69 73  up the.  BLOB is
17f00 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
17f10 74 65 78 74 20 65 6e 63 6f 64 65 64 20 75 73 69  text encoded usi
17f20 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ng the database 
17f30 65 6e 63 6f 64 69 6e 67 2e 0a 20 20 3c 70 3e 0a  encoding..  <p>.
17f40 20 20 20 5e 43 61 73 74 69 6e 67 20 61 6e 20 49     ^Casting an I
17f50 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c 20 76  NTEGER or REAL v
17f60 61 6c 75 65 20 69 6e 74 6f 20 54 45 58 54 20 72  alue into TEXT r
17f70 65 6e 64 65 72 73 20 74 68 65 20 76 61 6c 75 65  enders the value
17f80 20 61 73 20 69 66 20 76 69 61 20 0a 20 20 20 20   as if via .    
17f90 5b 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74  [sqlite3_snprint
17fa0 66 28 29 5d 20 65 78 63 65 70 74 20 74 68 61 74  f()] except that
17fb0 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 54   the resulting T
17fc0 45 58 54 20 75 73 65 73 20 74 68 65 20 5b 65 6e  EXT uses the [en
17fd0 63 6f 64 69 6e 67 5d 20 6f 66 0a 20 20 20 20 74  coding] of.    t
17fe0 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
17ff0 65 63 74 69 6f 6e 2e 0a 0a 3c 74 72 3e 0a 20 20  ection...<tr>.  
18000 3c 74 64 3e 20 52 45 41 4c 0a 20 20 3c 74 64 3e  <td> REAL.  <td>
18010 20 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61   ^When casting a
18020 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f 20 61   BLOB value to a
18030 20 52 45 41 4c 2c 20 74 68 65 20 76 61 6c 75 65   REAL, the value
18040 20 69 73 20 66 69 72 73 74 20 63 6f 6e 76 65 72   is first conver
18050 74 65 64 20 74 6f 0a 20 20 20 20 20 20 20 20 54  ted to.        T
18060 45 58 54 2e 0a 20 20 20 20 20 20 20 3c 70 3e 5e  EXT..       <p>^
18070 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20 54  When casting a T
18080 45 58 54 20 76 61 6c 75 65 20 74 6f 20 52 45 41  EXT value to REA
18090 4c 2c 20 74 68 65 20 6c 6f 6e 67 65 73 74 20 70  L, the longest p
180a0 6f 73 73 69 62 6c 65 20 70 72 65 66 69 78 20 6f  ossible prefix o
180b0 66 0a 20 20 20 20 20 20 20 20 74 68 65 20 76 61  f.        the va
180c0 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65 20  lue that can be 
180d0 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
180e0 20 72 65 61 6c 20 6e 75 6d 62 65 72 20 69 73 20   real number is 
180f0 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 0a 20  extracted from. 
18100 20 20 20 20 20 20 20 74 68 65 20 54 45 58 54 20         the TEXT 
18110 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 72 65  value and the re
18120 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72 65 64 2e  mainder ignored.
18130 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67 20 73 70   ^Any leading sp
18140 61 63 65 73 20 69 6e 20 74 68 65 0a 20 20 20 20  aces in the.    
18150 20 20 20 20 54 45 58 54 20 76 61 6c 75 65 20 61      TEXT value a
18160 72 65 20 69 67 6e 6f 72 65 64 20 77 68 65 6e 20  re ignored when 
18170 63 6f 6e 76 65 72 67 69 6e 67 20 66 72 6f 6d 20  converging from 
18180 54 45 58 54 20 74 6f 20 52 45 41 4c 2e 20 5e 28  TEXT to REAL. ^(
18190 49 66 20 74 68 65 72 65 20 69 73 0a 20 20 20 20  If there is.    
181a0 20 20 20 20 6e 6f 20 70 72 65 66 69 78 20 74 68      no prefix th
181b0 61 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70  at can be interp
181c0 72 65 74 65 64 20 61 73 20 61 20 72 65 61 6c 20  reted as a real 
181d0 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65 73 75  number, the resu
181e0 6c 74 20 6f 66 20 74 68 65 0a 20 20 20 20 20 20  lt of the.      
181f0 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20    conversion is 
18200 30 2e 30 2e 29 5e 0a 0a 3c 74 72 3e 0a 20 20 3c  0.0.)^..<tr>.  <
18210 74 64 3e 20 49 4e 54 45 47 45 52 0a 20 20 3c 74  td> INTEGER.  <t
18220 64 3e 20 5e 57 68 65 6e 20 63 61 73 74 69 6e 67  d> ^When casting
18230 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f   a BLOB value to
18240 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20 76 61   INTEGER, the va
18250 6c 75 65 20 69 73 20 66 69 72 73 74 20 63 6f 6e  lue is first con
18260 76 65 72 74 65 64 20 74 6f 0a 20 20 20 20 20 20  verted to.      
18270 20 20 54 45 58 54 2e 0a 20 20 20 20 20 20 20 3c    TEXT..       <
18280 70 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20  p>^When casting 
18290 61 20 54 45 58 54 20 76 61 6c 75 65 20 74 6f 20  a TEXT value to 
182a0 49 4e 54 45 47 45 52 2c 20 74 68 65 20 6c 6f 6e  INTEGER, the lon
182b0 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 70 72  gest possible pr
182c0 65 66 69 78 20 6f 66 0a 20 20 20 20 20 20 20 20  efix of.        
182d0 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 63  the value that c
182e0 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74 65  an be interprete
182f0 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20  d as an integer 
18300 6e 75 6d 62 65 72 20 69 73 20 65 78 74 72 61 63  number is extrac
18310 74 65 64 20 66 72 6f 6d 0a 20 20 20 20 20 20 20  ted from.       
18320 20 74 68 65 20 54 45 58 54 20 76 61 6c 75 65 20   the TEXT value 
18330 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e 64 65  and the remainde
18340 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41 6e 79 20  r ignored. ^Any 
18350 6c 65 61 64 69 6e 67 20 73 70 61 63 65 73 20 69  leading spaces i
18360 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20 54 45  n the.        TE
18370 58 54 20 76 61 6c 75 65 20 77 68 65 6e 20 63 6f  XT value when co
18380 6e 76 65 72 74 69 6e 67 20 66 72 6f 6d 20 54 45  nverting from TE
18390 58 54 20 74 6f 20 49 4e 54 45 47 45 52 20 61 72  XT to INTEGER ar
183a0 65 20 69 67 6e 6f 72 65 64 2e 20 5e 49 66 20 74  e ignored. ^If t
183b0 68 65 72 65 0a 20 20 20 20 20 20 20 20 69 73 20  here.        is 
183c0 6e 6f 20 70 72 65 66 69 78 20 74 68 61 74 20 63  no prefix that c
183d0 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74 65  an be interprete
183e0 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20  d as an integer 
183f0 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65 73 75  number, the resu
18400 6c 74 0a 20 20 20 20 20 20 20 20 6f 66 20 74 68  lt.        of th
18410 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20  e conversion is 
18420 30 2e 20 20 5e 28 54 68 65 20 43 41 53 54 20 6f  0.  ^(The CAST o
18430 70 65 72 61 74 6f 72 20 75 6e 64 65 72 73 74 61  perator understa
18440 6e 64 73 20 64 65 63 69 6d 61 6c 0a 20 20 20 20  nds decimal.    
18450 20 20 20 20 69 6e 74 65 67 65 72 73 20 6f 6e 6c      integers onl
18460 79 20 26 6d 64 61 73 68 3b 20 63 6f 6e 76 65 72  y &mdash; conver
18470 73 69 6f 6e 20 6f 66 20 5b 68 65 78 61 64 65 63  sion of [hexadec
18480 69 6d 61 6c 20 69 6e 74 65 67 65 72 73 5d 20 73  imal integers] s
18490 74 6f 70 73 20 0a 20 20 20 20 20 20 20 20 61 74  tops .        at
184a0 20 74 68 65 20 22 78 22 20 69 6e 20 74 68 65 20   the "x" in the 
184b0 22 30 78 22 20 70 72 65 66 69 78 20 6f 66 20 74  "0x" prefix of t
184c0 68 65 20 68 65 78 61 64 65 63 69 6d 61 6c 20 69  he hexadecimal i
184d0 6e 74 65 67 65 72 20 73 74 72 69 6e 67 20 0a 20  nteger string . 
184e0 20 20 20 20 20 20 20 61 6e 64 20 74 68 75 73 20         and thus 
184f0 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41  result of the CA
18500 53 54 20 69 73 20 61 6c 77 61 79 73 20 7a 65 72  ST is always zer
18510 6f 2e 29 5e 0a 0a 20 20 20 20 20 20 3c 70 3e 5e  o.)^..      <p>^
18520 41 20 63 61 73 74 20 6f 66 20 61 20 52 45 41 4c  A cast of a REAL
18530 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 6e 20 49   value into an I
18540 4e 54 45 47 45 52 20 72 65 73 75 6c 74 73 20 69  NTEGER results i
18550 6e 20 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20  n the integer.  
18560 20 20 20 20 62 65 74 77 65 65 6e 20 74 68 65 20      between the 
18570 52 45 41 4c 20 76 61 6c 75 65 20 61 6e 64 20 7a  REAL value and z
18580 65 72 6f 20 74 68 61 74 20 69 73 20 63 6c 6f 73  ero that is clos
18590 65 73 74 20 74 6f 20 74 68 65 20 52 45 41 4c 20  est to the REAL 
185a0 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 5e 49 66  value..      ^If
185b0 20 61 20 52 45 41 4c 20 69 73 20 67 72 65 61 74   a REAL is great
185c0 65 72 20 74 68 61 6e 20 74 68 65 20 67 72 65 61  er than the grea
185d0 74 65 73 74 20 70 6f 73 73 69 62 6c 65 20 73 69  test possible si
185e0 67 6e 65 64 0a 20 20 20 20 20 20 69 6e 74 65 67  gned.      integ
185f0 65 72 20 28 2b 39 32 32 33 33 37 32 30 33 36 38  er (+92233720368
18600 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20 74  54775807) then t
18610 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65  he result is the
18620 20 67 72 65 61 74 65 73 74 20 70 6f 73 73 69 62   greatest possib
18630 6c 65 0a 20 20 20 20 20 20 73 69 67 6e 65 64 20  le.      signed 
18640 69 6e 74 65 67 65 72 20 61 6e 64 20 69 66 20 74  integer and if t
18650 68 65 20 52 45 41 4c 20 69 73 20 6c 65 73 73 20  he REAL is less 
18660 74 68 61 6e 20 74 68 65 20 6c 65 61 73 74 20 70  than the least p
18670 6f 73 73 69 62 6c 65 20 73 69 67 6e 65 64 0a 20  ossible signed. 
18680 20 20 20 20 20 69 6e 74 65 67 65 72 20 28 2d 39       integer (-9
18690 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
186a0 30 38 29 20 74 68 65 6e 20 74 68 65 20 72 65 73  08) then the res
186b0 75 6c 74 20 69 73 20 74 68 65 20 6c 65 61 73 74  ult is the least
186c0 20 70 6f 73 73 69 62 6c 65 0a 20 20 20 20 20 20   possible.      
186d0 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2e 0a  signed integer..
186e0 0a 20 20 20 20 20 20 3c 70 3e 50 72 69 6f 72 20  .      <p>Prior 
186f0 74 6f 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  to SQLite versio
18700 6e 20 33 2e 38 2e 32 20 28 5b 64 61 74 65 6f 66  n 3.8.2 ([dateof
18710 3a 33 2e 38 2e 32 5d 29 2c 0a 20 20 20 20 20 20  :3.8.2]),.      
18720 63 61 73 74 69 6e 67 20 61 20 52 45 41 4c 20 76  casting a REAL v
18730 61 6c 75 65 20 67 72 65 61 74 65 72 20 74 68 61  alue greater tha
18740 6e 0a 20 20 20 20 20 20 2b 39 32 32 33 33 37 32  n.      +9223372
18750 30 33 36 38 35 34 37 37 35 38 30 37 2e 30 20 69  036854775807.0 i
18760 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72  nto an integer r
18770 65 73 75 6c 74 65 64 20 69 6e 20 74 68 65 20 6d  esulted in the m
18780 6f 73 74 20 6e 65 67 61 74 69 76 65 0a 20 20 20  ost negative.   
18790 20 20 20 69 6e 74 65 67 65 72 2c 20 2d 39 32 32     integer, -922
187a0 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38  3372036854775808
187b0 2e 20 20 54 68 69 73 20 62 65 68 61 76 69 6f 72  .  This behavior
187c0 20 77 61 73 20 6d 65 61 6e 74 20 74 6f 20 65 6d   was meant to em
187d0 75 6c 61 74 65 20 74 68 65 0a 20 20 20 20 20 20  ulate the.      
187e0 62 65 68 61 76 69 6f 72 20 6f 66 20 78 38 36 2f  behavior of x86/
187f0 78 36 34 20 68 61 72 64 77 61 72 65 20 77 68 65  x64 hardware whe
18800 6e 20 64 6f 69 6e 67 20 74 68 65 20 65 71 75 69  n doing the equi
18810 76 61 6c 65 6e 74 20 63 61 73 74 2e 0a 0a 3c 74  valent cast...<t
18820 72 3e 0a 20 20 3c 74 64 3e 20 4e 55 4d 45 52 49  r>.  <td> NUMERI
18830 43 0a 20 20 3c 74 64 3e 20 5e 43 61 73 74 69 6e  C.  <td> ^Castin
18840 67 20 61 20 54 45 58 54 20 6f 72 20 42 4c 4f 42  g a TEXT or BLOB
18850 20 76 61 6c 75 65 20 69 6e 74 6f 20 4e 55 4d 45   value into NUME
18860 52 49 43 20 66 69 72 73 74 20 64 6f 65 73 20 61  RIC first does a
18870 20 66 6f 72 63 65 64 0a 20 20 20 63 6f 6e 76 65   forced.   conve
18880 72 73 69 6f 6e 20 69 6e 74 6f 20 52 45 41 4c 20  rsion into REAL 
18890 62 75 74 20 74 68 65 6e 20 66 75 72 74 68 65 72  but then further
188a0 20 63 6f 6e 76 65 72 74 73 20 74 68 65 20 72 65   converts the re
188b0 73 75 6c 74 20 69 6e 74 6f 20 49 4e 54 45 47 45  sult into INTEGE
188c0 52 20 69 66 0a 20 20 20 61 6e 64 20 6f 6e 6c 79  R if.   and only
188d0 20 69 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69   if the conversi
188e0 6f 6e 20 66 72 6f 6d 20 52 45 41 4c 20 74 6f 20  on from REAL to 
188f0 49 4e 54 45 47 45 52 20 69 73 20 6c 6f 73 73 6c  INTEGER is lossl
18900 65 73 73 20 61 6e 64 20 72 65 76 65 72 73 69 62  ess and reversib
18910 6c 65 2e 0a 20 20 20 54 68 69 73 20 69 73 20 74  le..   This is t
18920 68 65 20 6f 6e 6c 79 20 63 6f 6e 74 65 78 74 20  he only context 
18930 69 6e 20 53 51 4c 69 74 65 20 77 68 65 72 65 20  in SQLite where 
18940 74 68 65 20 4e 55 4d 45 52 49 43 20 61 6e 64 20  the NUMERIC and 
18950 49 4e 54 45 47 45 52 20 5b 61 66 66 69 6e 69 74  INTEGER [affinit
18960 69 65 73 5d 0a 20 20 20 62 65 68 61 76 65 20 64  ies].   behave d
18970 69 66 66 65 72 65 6e 74 6c 79 2e 0a 20 20 20 3c  ifferently..   <
18980 70 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 52 45  p> ^Casting a RE
18990 41 4c 20 6f 72 20 49 4e 54 45 47 45 52 20 76 61  AL or INTEGER va
189a0 6c 75 65 20 74 6f 20 4e 55 4d 45 52 49 43 20 69  lue to NUMERIC i
189b0 73 20 61 20 6e 6f 2d 6f 70 2c 20 65 76 65 6e 20  s a no-op, even 
189c0 69 66 20 61 20 72 65 61 6c 0a 20 20 20 76 61 6c  if a real.   val
189d0 75 65 20 63 6f 75 6c 64 20 62 65 20 6c 6f 73 73  ue could be loss
189e0 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64  lessly converted
189f0 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a   to an integer..
18a00 0a 3c 2f 74 72 3e 0a 0a 3c 2f 74 61 62 6c 65 3e  .</tr>..</table>
18a10 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20  ..<p>^Note that 
18a20 74 68 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20  the result from 
18a30 63 61 73 74 69 6e 67 20 61 6e 79 20 6e 6f 6e 2d  casting any non-
18a40 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f 20  BLOB value into 
18a50 61 20 0a 42 4c 4f 42 20 61 6e 64 20 74 68 65 20  a .BLOB and the 
18a60 72 65 73 75 6c 74 20 66 72 6f 6d 20 63 61 73 74  result from cast
18a70 69 6e 67 20 61 6e 79 20 42 4c 4f 42 20 76 61 6c  ing any BLOB val
18a80 75 65 20 69 6e 74 6f 20 61 20 6e 6f 6e 2d 42 4c  ue into a non-BL
18a90 4f 42 20 76 61 6c 75 65 0a 6d 61 79 20 62 65 20  OB value.may be 
18aa0 64 69 66 66 65 72 65 6e 74 20 64 65 70 65 6e 64  different depend
18ab0 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20 74  ing on whether t
18ac0 68 65 20 64 61 74 61 62 61 73 65 20 5b 65 6e 63  he database [enc
18ad0 6f 64 69 6e 67 5d 20 69 73 20 55 54 46 2d 38 2c  oding] is UTF-8,
18ae0 0a 55 54 46 2d 31 36 62 65 2c 20 6f 72 20 55 54  .UTF-16be, or UT
18af0 46 2d 31 36 6c 65 2e 0a 0a 0a 3c 74 63 6c 3e 68  F-16le....<tcl>h
18b00 64 5f 66 72 61 67 6d 65 6e 74 20 62 6f 6f 6c 65  d_fragment boole
18b10 61 6e 65 78 70 72 20 7b 62 6f 6f 6c 65 61 6e 20  anexpr {boolean 
18b20 65 78 70 72 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c  expression}</tcl
18b30 3e 0a 3c 68 33 3e 42 6f 6f 6c 65 61 6e 20 45 78  >.<h3>Boolean Ex
18b40 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a  pressions</h3>..
18b50 3c 70 3e 54 68 65 20 53 51 4c 20 6c 61 6e 67 75  <p>The SQL langu
18b60 61 67 65 20 66 65 61 74 75 72 65 73 20 73 65 76  age features sev
18b70 65 72 61 6c 20 63 6f 6e 74 65 78 74 73 20 77 68  eral contexts wh
18b80 65 72 65 20 61 6e 20 65 78 70 72 65 73 73 69 6f  ere an expressio
18b90 6e 20 69 73 20 0a 65 76 61 6c 75 61 74 65 64 20  n is .evaluated 
18ba0 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 63  and the result c
18bb0 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 20 62 6f  onverted to a bo
18bc0 6f 6c 65 61 6e 20 28 74 72 75 65 20 6f 72 20 66  olean (true or f
18bd0 61 6c 73 65 29 20 76 61 6c 75 65 2e 20 54 68 65  alse) value. The
18be0 73 65 0a 63 6f 6e 74 65 78 74 73 20 61 72 65 3a  se.contexts are:
18bf0 0a 0a 20 20 3c 75 6c 3e 0a 20 20 20 20 3c 6c 69  ..  <ul>.    <li
18c00 3e 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  > the WHERE clau
18c10 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 2c 20  se of a SELECT, 
18c20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45  UPDATE or DELETE
18c30 20 73 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20 20   statement,.    
18c40 3c 6c 69 3e 20 74 68 65 20 4f 4e 20 6f 72 20 55  <li> the ON or U
18c50 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61  SING clause of a
18c60 20 6a 6f 69 6e 20 69 6e 20 61 20 53 45 4c 45 43   join in a SELEC
18c70 54 20 73 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20  T statement,.   
18c80 20 3c 6c 69 3e 20 74 68 65 20 48 41 56 49 4e 47   <li> the HAVING
18c90 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
18ca0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 0a 20  ECT statement,. 
18cb0 20 20 20 3c 6c 69 3e 20 74 68 65 20 57 48 45 4e     <li> the WHEN
18cc0 20 63 6c 61 75 73 65 20 6f 66 20 61 6e 20 53 51   clause of an SQ
18cd0 4c 20 74 72 69 67 67 65 72 2c 20 61 6e 64 0a 20  L trigger, and. 
18ce0 20 20 20 3c 6c 69 3e 20 74 68 65 20 57 48 45 4e     <li> the WHEN
18cf0 20 63 6c 61 75 73 65 20 6f 72 20 63 6c 61 75 73   clause or claus
18d00 65 73 20 6f 66 20 73 6f 6d 65 20 43 41 53 45 20  es of some CASE 
18d10 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a 20 20 3c  expressions..  <
18d20 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 54 6f 20 63 6f  /ul>..<p>^(To co
18d30 6e 76 65 72 74 20 74 68 65 20 72 65 73 75 6c 74  nvert the result
18d40 73 20 6f 66 20 61 6e 20 53 51 4c 20 65 78 70 72  s of an SQL expr
18d50 65 73 73 69 6f 6e 20 74 6f 20 61 20 62 6f 6f 6c  ession to a bool
18d60 65 61 6e 20 76 61 6c 75 65 2c 20 53 51 4c 69 74  ean value, SQLit
18d70 65 0a 66 69 72 73 74 20 63 61 73 74 73 20 74 68  e.first casts th
18d80 65 20 72 65 73 75 6c 74 20 74 6f 20 61 20 4e 55  e result to a NU
18d90 4d 45 52 49 43 20 76 61 6c 75 65 20 69 6e 20 74  MERIC value in t
18da0 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 61  he same way as a
18db0 20 0a 5b 43 41 53 54 20 65 78 70 72 65 73 73 69   .[CAST expressi
18dc0 6f 6e 5d 2e 20 41 20 6e 75 6d 65 72 69 63 20 7a  on]. A numeric z
18dd0 65 72 6f 20 76 61 6c 75 65 20 28 69 6e 74 65 67  ero value (integ
18de0 65 72 20 76 61 6c 75 65 20 30 20 6f 72 20 72 65  er value 0 or re
18df0 61 6c 20 0a 76 61 6c 75 65 20 30 2e 30 29 20 69  al .value 0.0) i
18e00 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20  s considered to 
18e10 62 65 20 66 61 6c 73 65 2e 20 20 41 20 4e 55 4c  be false.  A NUL
18e20 4c 20 76 61 6c 75 65 20 69 73 20 73 74 69 6c 6c  L value is still
18e30 20 4e 55 4c 4c 2e 0a 41 6c 6c 20 6f 74 68 65 72   NULL..All other
18e40 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73   values are cons
18e50 69 64 65 72 65 64 20 74 72 75 65 2e 29 5e 0a 0a  idered true.)^..
18e60 3c 70 3e 5e 28 46 6f 72 20 65 78 61 6d 70 6c 65  <p>^(For example
18e70 2c 20 74 68 65 20 76 61 6c 75 65 73 20 4e 55 4c  , the values NUL
18e80 4c 2c 20 30 2e 30 2c 20 30 2c 20 27 65 6e 67 6c  L, 0.0, 0, 'engl
18e90 69 73 68 27 20 61 6e 64 20 27 30 27 20 61 72 65  ish' and '0' are
18ea0 20 61 6c 6c 20 63 6f 6e 73 69 64 65 72 65 64 0a   all considered.
18eb0 74 6f 20 62 65 20 66 61 6c 73 65 2e 29 5e 20 5e  to be false.)^ ^
18ec0 28 56 61 6c 75 65 73 20 31 2c 20 31 2e 30 2c 20  (Values 1, 1.0, 
18ed0 30 2e 31 2c 20 2d 30 2e 31 20 61 6e 64 20 27 31  0.1, -0.1 and '1
18ee0 65 6e 67 6c 69 73 68 27 20 61 72 65 20 63 6f 6e  english' are con
18ef0 73 69 64 65 72 65 64 20 74 6f 20 0a 62 65 20 74  sidered to .be t
18f00 72 75 65 2e 29 5e 0a 0a 3c 68 33 3e 46 75 6e 63  rue.)^..<h3>Func
18f10 74 69 6f 6e 73 3c 2f 68 33 3e 0a 3c 70 3e 53 51  tions</h3>.<p>SQ
18f20 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61  Lite supports ma
18f30 6e 79 20 5b 63 6f 72 65 66 75 6e 63 7c 73 69 6d  ny [corefunc|sim
18f40 70 6c 65 5d 20 61 6e 64 20 5b 61 67 67 66 75 6e  ple] and [aggfun
18f50 63 7c 61 67 67 72 65 67 61 74 65 5d 0a 53 51 4c  c|aggregate].SQL
18f60 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 46 6f 72   functions.  For
18f70 20 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 70 75   presentation pu
18f80 72 70 6f 73 65 73 2c 20 73 69 6d 70 6c 65 20 66  rposes, simple f
18f90 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 66 75 72  unctions are fur
18fa0 74 68 65 72 0a 73 75 62 64 69 76 69 64 65 64 20  ther.subdivided 
18fb0 69 6e 74 6f 20 5b 63 6f 72 65 66 75 6e 63 20 7c  into [corefunc |
18fc0 20 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 5d   core functions]
18fd0 20 61 6e 64 20 5b 64 61 74 65 66 75 6e 63 7c 64   and [datefunc|d
18fe0 61 74 65 2d 74 69 6d 65 20 66 75 6e 63 74 69 6f  ate-time functio
18ff0 6e 73 5d 2e 0a 41 70 70 6c 69 63 61 74 69 6f 6e  ns]..Application
19000 73 20 63 61 6e 20 61 64 64 20 6e 65 77 20 66 75  s can add new fu
19010 6e 63 74 69 6f 6e 73 2c 20 77 72 69 74 74 65 6e  nctions, written
19020 20 69 6e 20 43 2f 43 2b 2b 2c 20 75 73 69 6e 67   in C/C++, using
19030 20 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f 63 72   the.[sqlite3_cr
19040 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d  eate_function()]
19050 20 69 6e 74 65 72 66 61 63 65 2e 0a 3c 2f 70 3e   interface..</p>
19060 0a 0a 3c 70 3e 5e 49 74 20 69 73 20 70 6f 73 73  ..<p>^It is poss
19070 69 62 6c 65 20 74 6f 20 68 61 76 65 20 61 6e 20  ible to have an 
19080 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
19090 6f 6e 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  on with the same
190a0 20 6e 61 6d 65 20 61 73 20 61 0a 73 69 6d 70 6c   name as a.simpl
190b0 65 20 66 75 6e 63 74 69 6f 6e 2c 20 61 73 20 6c  e function, as l
190c0 6f 6e 67 20 61 73 20 74 68 65 20 6e 75 6d 62 65  ong as the numbe
190d0 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 66  r of arguments f
190e0 6f 72 20 74 68 65 20 74 77 6f 20 66 6f 72 6d 73  or the two forms
190f0 20 6f 66 20 74 68 65 0a 66 75 6e 63 74 69 6f 6e   of the.function
19100 20 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e 20   are different. 
19110 20 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74   ^For example, t
19120 68 65 20 5b 61 67 67 5f 6d 61 78 7c 6d 61 78 28  he [agg_max|max(
19130 29 5d 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  )] function with
19140 20 61 0a 73 69 6e 67 6c 65 20 61 72 67 75 6d 65   a.single argume
19150 6e 74 20 69 73 20 61 6e 20 61 67 67 72 65 67 61  nt is an aggrega
19160 74 65 20 61 6e 64 20 74 68 65 20 5b 6d 61 78 28  te and the [max(
19170 29 5d 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  )] function with
19180 20 74 77 6f 20 6f 72 20 6d 6f 72 65 0a 61 72 67   two or more.arg
19190 75 6d 65 6e 74 73 20 69 73 20 61 20 73 69 6d 70  uments is a simp
191a0 6c 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 0a 3c 74  le function...<t
191b0 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
191c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
191d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
191e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
191f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19200 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 6f 72 65  ##.Section {Core
19210 20 46 75 6e 63 74 69 6f 6e 73 7d 20 63 6f 72 65   Functions} core
19220 66 75 6e 63 20 7b 2a 63 6f 72 65 66 75 6e 63 7d  func {*corefunc}
19230 0a 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61  .unset -nocompla
19240 69 6e 20 63 6f 72 65 66 75 6e 63 73 65 74 0a 70  in corefuncset.p
19250 72 6f 63 20 66 75 6e 63 64 65 66 20 7b 73 79 6e  roc funcdef {syn
19260 74 61 78 20 6b 65 79 77 6f 72 64 73 20 64 65 73  tax keywords des
19270 63 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 63 6f  c} {.  global co
19280 72 65 66 75 6e 63 73 65 74 0a 20 20 72 65 67 65  refuncset.  rege
19290 78 70 20 7b 5e 5b 61 2d 7a 5f 5d 2b 7d 20 24 73  xp {^[a-z_]+} $s
192a0 79 6e 74 61 78 20 62 61 73 65 73 79 6e 74 61 78  yntax basesyntax
192b0 0a 20 20 73 65 74 20 63 6f 72 65 66 75 6e 63 73  .  set corefuncs
192c0 65 74 28 24 62 61 73 65 73 79 6e 74 61 78 29 20  et($basesyntax) 
192d0 5b 6c 69 73 74 20 24 73 79 6e 74 61 78 20 24 6b  [list $syntax $k
192e0 65 79 77 6f 72 64 73 20 24 64 65 73 63 5d 0a 7d  eywords $desc].}
192f0 0a 66 75 6e 63 64 65 66 20 7b 61 62 73 28 58 29  .funcdef {abs(X)
19300 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 61 62  } {} {.  ^The ab
19310 73 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  s(X) function re
19320 74 75 72 6e 73 20 74 68 65 20 61 62 73 6f 6c 75  turns the absolu
19330 74 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  te value of the 
19340 6e 75 6d 65 72 69 63 0a 20 20 61 72 67 75 6d 65  numeric.  argume
19350 6e 74 20 58 2e 20 20 5e 41 62 73 28 58 29 20 72  nt X.  ^Abs(X) r
19360 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20 58  eturns NULL if X
19370 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 28 41   is NULL. .  ^(A
19380 62 73 28 58 29 20 72 65 74 75 72 6e 73 20 30 2e  bs(X) returns 0.
19390 30 20 69 66 20 58 20 69 73 20 61 20 73 74 72 69  0 if X is a stri
193a0 6e 67 20 6f 72 20 62 6c 6f 62 0a 20 20 74 68 61  ng or blob.  tha
193b0 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76  t cannot be conv
193c0 65 72 74 65 64 20 74 6f 20 61 20 6e 75 6d 65 72  erted to a numer
193d0 69 63 20 76 61 6c 75 65 2e 29 5e 20 20 5e 49 66  ic value.)^  ^If
193e0 20 58 20 69 73 20 74 68 65 20 0a 20 20 69 6e 74   X is the .  int
193f0 65 67 65 72 20 2d 39 32 32 33 33 37 32 30 33 36  eger -9223372036
19400 38 35 34 37 37 35 38 30 38 20 74 68 65 6e 20 61  854775808 then a
19410 62 73 28 58 29 20 74 68 72 6f 77 73 20 61 6e 20  bs(X) throws an 
19420 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77  integer overflow
19430 0a 20 20 65 72 72 6f 72 20 73 69 6e 63 65 20 74  .  error since t
19440 68 65 72 65 20 69 73 20 6e 6f 20 65 71 75 69 76  here is no equiv
19450 61 6c 65 6e 74 20 70 6f 73 69 74 69 76 65 20 36  alent positive 6
19460 34 2d 62 69 74 20 74 77 6f 20 63 6f 6d 70 6c 65  4-bit two comple
19470 6d 65 6e 74 20 76 61 6c 75 65 2e 0a 7d 0a 0a 66  ment value..}..f
19480 75 6e 63 64 65 66 20 7b 63 68 61 6e 67 65 73 28  uncdef {changes(
19490 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 63  )} {} {.  ^The c
194a0 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f  hanges() functio
194b0 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  n returns the nu
194c0 6d 62 65 72 20 6f 66 20 64 61 74 61 62 61 73 65  mber of database
194d0 20 72 6f 77 73 20 74 68 61 74 20 77 65 72 65 20   rows that were 
194e0 63 68 61 6e 67 65 64 0a 20 20 6f 72 20 69 6e 73  changed.  or ins
194f0 65 72 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64  erted or deleted
19500 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63   by the most rec
19510 65 6e 74 6c 79 20 63 6f 6d 70 6c 65 74 65 64 20  ently completed 
19520 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 0a  INSERT, DELETE,.
19530 20 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74    or UPDATE stat
19540 65 6d 65 6e 74 2c 20 65 78 63 6c 75 73 69 76 65  ement, exclusive
19550 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 69   of statements i
19560 6e 20 6c 6f 77 65 72 2d 6c 65 76 65 6c 20 74 72  n lower-level tr
19570 69 67 67 65 72 73 2e 0a 20 20 5e 54 68 65 20 63  iggers..  ^The c
19580 68 61 6e 67 65 73 28 29 20 53 51 4c 20 66 75 6e  hanges() SQL fun
19590 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70  ction is a wrapp
195a0 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73  er around the [s
195b0 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
195c0 5d 0a 20 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69  ].  C/C++ functi
195d0 6f 6e 20 61 6e 64 20 68 65 6e 63 65 20 66 6f 6c  on and hence fol
195e0 6c 6f 77 73 20 74 68 65 20 73 61 6d 65 20 72 75  lows the same ru
195f0 6c 65 73 20 66 6f 72 20 63 6f 75 6e 74 69 6e 67  les for counting
19600 20 63 68 61 6e 67 65 73 2e 0a 7d 0a 0a 66 75 6e   changes..}..fun
19610 63 64 65 66 20 7b 63 68 61 72 28 58 31 2c 58 32  cdef {char(X1,X2
19620 2c 2e 2e 2e 2c 58 4e 29 7d 20 7b 7d 20 7b 0a 20  ,...,XN)} {} {. 
19630 20 5e 28 54 68 65 20 63 68 61 72 28 58 31 2c 58   ^(The char(X1,X
19640 32 2c 2e 2e 2e 2c 58 4e 29 20 66 75 6e 63 74 69  2,...,XN) functi
19650 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72  on returns a str
19660 69 6e 67 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20  ing composed of 
19670 63 68 61 72 61 63 74 65 72 73 20 68 61 76 69 6e  characters havin
19680 67 20 74 68 65 0a 20 20 20 75 6e 69 63 6f 64 65  g the.   unicode
19690 20 63 6f 64 65 20 70 6f 69 6e 74 20 76 61 6c 75   code point valu
196a0 65 73 20 6f 66 20 69 6e 74 65 67 65 72 73 20 58  es of integers X
196b0 31 20 74 68 72 6f 75 67 68 20 58 4e 2c 20 72 65  1 through XN, re
196c0 73 70 65 63 74 69 76 65 6c 79 2e 29 5e 0a 7d 0a  spectively.)^.}.
196d0 0a 66 75 6e 63 64 65 66 20 7b 63 6f 61 6c 65 73  .funcdef {coales
196e0 63 65 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 7d 20  ce(X,Y,...)} {} 
196f0 7b 0a 20 20 5e 54 68 65 20 63 6f 61 6c 65 73 63  {.  ^The coalesc
19700 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  e() function ret
19710 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69  urns a copy of i
19720 74 73 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c  ts first non-NUL
19730 4c 20 61 72 67 75 6d 65 6e 74 2c 20 6f 72 0a 20  L argument, or. 
19740 20 4e 55 4c 4c 20 69 66 20 61 6c 6c 20 61 72 67   NULL if all arg
19750 75 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c 4c 2e  uments are NULL.
19760 20 20 5e 43 6f 61 6c 65 73 63 65 28 29 20 6d 75    ^Coalesce() mu
19770 73 74 20 68 61 76 65 20 61 74 20 6c 65 61 73 74  st have at least
19780 20 0a 20 20 32 20 61 72 67 75 6d 65 6e 74 73 2e   .  2 arguments.
19790 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67 6c 6f  .}..funcdef {glo
197a0 62 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  b(X,Y)} {} {.  ^
197b0 54 68 65 20 67 6c 6f 62 28 58 2c 59 29 20 66 75  The glob(X,Y) fu
197c0 6e 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61  nction is equiva
197d0 6c 65 6e 74 20 74 6f 20 74 68 65 0a 20 20 65 78  lent to the.  ex
197e0 70 72 65 73 73 69 6f 6e 20 22 3c 62 3e 59 20 47  pression "<b>Y G
197f0 4c 4f 42 20 58 3c 2f 62 3e 22 2e 0a 20 20 4e 6f  LOB X</b>"..  No
19800 74 65 20 74 68 61 74 20 74 68 65 20 58 20 61 6e  te that the X an
19810 64 20 59 20 61 72 67 75 6d 65 6e 74 73 20 61 72  d Y arguments ar
19820 65 20 72 65 76 65 72 73 65 64 20 69 6e 20 74 68  e reversed in th
19830 65 20 67 6c 6f 62 28 29 20 66 75 6e 63 74 69 6f  e glob() functio
19840 6e 0a 20 20 72 65 6c 61 74 69 76 65 20 74 6f 20  n.  relative to 
19850 74 68 65 20 69 6e 66 69 78 20 5b 47 4c 4f 42 5d  the infix [GLOB]
19860 20 6f 70 65 72 61 74 6f 72 2e 0a 20 20 5e 49 66   operator..  ^If
19870 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72   the [sqlite3_cr
19880 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d  eate_function()]
19890 20 69 6e 74 65 72 66 61 63 65 20 69 73 20 75 73   interface is us
198a0 65 64 20 74 6f 0a 20 20 6f 76 65 72 72 69 64 65  ed to.  override
198b0 20 74 68 65 20 67 6c 6f 62 28 58 2c 59 29 20 66   the glob(X,Y) f
198c0 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 6e 20  unction with an 
198d0 61 6c 74 65 72 6e 61 74 69 76 65 20 69 6d 70 6c  alternative impl
198e0 65 6d 65 6e 74 61 74 69 6f 6e 20 74 68 65 6e 0a  ementation then.
198f0 20 20 74 68 65 20 5b 47 4c 4f 42 5d 20 6f 70 65    the [GLOB] ope
19900 72 61 74 6f 72 20 77 69 6c 6c 20 69 6e 76 6f 6b  rator will invok
19910 65 20 74 68 65 20 61 6c 74 65 72 6e 61 74 69 76  e the alternativ
19920 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
19930 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 69 66  ..}..funcdef {if
19940 6e 75 6c 6c 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  null(X,Y)} {} {.
19950 20 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28 29 20    ^The ifnull() 
19960 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
19970 20 61 20 63 6f 70 79 20 6f 66 20 69 74 73 20 66   a copy of its f
19980 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72  irst non-NULL ar
19990 67 75 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c  gument, or.  NUL
199a0 4c 20 69 66 20 62 6f 74 68 20 61 72 67 75 6d 65  L if both argume
199b0 6e 74 73 20 61 72 65 20 4e 55 4c 4c 2e 20 20 5e  nts are NULL.  ^
199c0 49 66 6e 75 6c 6c 28 29 20 6d 75 73 74 20 68 61  Ifnull() must ha
199d0 76 65 20 65 78 61 63 74 6c 79 20 32 20 61 72 67  ve exactly 2 arg
199e0 75 6d 65 6e 74 73 2e 0a 20 20 5e 54 68 65 20 69  uments..  ^The i
199f0 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69 6f 6e  fnull() function
19a00 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74   is equivalent t
19a10 6f 20 5b 63 6f 61 6c 65 73 63 65 28 29 5d 20 77  o [coalesce()] w
19a20 69 74 68 20 74 77 6f 20 61 72 67 75 6d 65 6e 74  ith two argument
19a30 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 69  s..}..funcdef {i
19a40 6e 73 74 72 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  nstr(X,Y)} {} {.
19a50 20 20 5e 54 68 65 20 69 6e 73 74 72 28 58 2c 59    ^The instr(X,Y
19a60 29 20 66 75 6e 63 74 69 6f 6e 20 66 69 6e 64 73  ) function finds
19a70 20 74 68 65 20 66 69 72 73 74 20 6f 63 63 75 72   the first occur
19a80 72 65 6e 63 65 20 6f 66 20 73 74 72 69 6e 67 20  rence of string 
19a90 59 20 77 69 74 68 69 6e 20 0a 20 20 73 74 72 69  Y within .  stri
19aa0 6e 67 20 58 20 61 6e 64 20 72 65 74 75 72 6e 73  ng X and returns
19ab0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
19ac0 72 69 6f 72 20 63 68 61 72 61 63 74 65 72 73 20  rior characters 
19ad0 70 6c 75 73 20 31 2c 20 6f 72 20 30 20 69 66 0a  plus 1, or 0 if.
19ae0 20 20 59 20 69 73 20 6e 6f 77 68 65 72 65 20 66    Y is nowhere f
19af0 6f 75 6e 64 20 77 69 74 68 69 6e 20 58 2e 0a 20  ound within X.. 
19b00 20 5e 4f 72 2c 20 69 66 20 58 20 61 6e 64 20 59   ^Or, if X and Y
19b10 20 61 72 65 20 62 6f 74 68 20 42 4c 4f 42 73 2c   are both BLOBs,
19b20 20 74 68 65 6e 20 69 6e 73 74 72 28 58 2c 59 29   then instr(X,Y)
19b30 20 72 65 74 75 72 6e 73 20 6f 6e 65 0a 20 20 6d   returns one.  m
19b40 6f 72 65 20 74 68 61 6e 20 74 68 65 20 6e 75 6d  ore than the num
19b50 62 65 72 20 62 79 74 65 73 20 70 72 69 6f 72 20  ber bytes prior 
19b60 74 6f 20 74 68 65 20 66 69 72 73 74 20 6f 63 63  to the first occ
19b70 75 72 72 65 6e 63 65 20 6f 66 20 59 2c 20 6f 72  urrence of Y, or
19b80 20 30 20 69 66 0a 20 20 59 20 64 6f 65 73 20 6e   0 if.  Y does n
19b90 6f 74 20 6f 63 63 75 72 20 61 6e 79 77 68 65 72  ot occur anywher
19ba0 65 20 77 69 74 68 69 6e 20 58 2e 0a 20 20 5e 49  e within X..  ^I
19bb0 66 20 62 6f 74 68 20 61 72 67 75 6d 65 6e 74 73  f both arguments
19bc0 20 58 20 61 6e 64 20 59 20 74 6f 20 69 6e 73 74   X and Y to inst
19bd0 72 28 58 2c 59 29 20 61 72 65 20 6e 6f 6e 2d 4e  r(X,Y) are non-N
19be0 55 4c 4c 20 61 6e 64 20 61 72 65 20 6e 6f 74 20  ULL and are not 
19bf0 42 4c 4f 42 73 0a 20 20 74 68 65 6e 20 62 6f 74  BLOBs.  then bot
19c00 68 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65  h are interprete
19c10 64 20 61 73 20 73 74 72 69 6e 67 73 2e 0a 20 20  d as strings..  
19c20 5e 49 66 20 65 69 74 68 65 72 20 58 20 6f 72 20  ^If either X or 
19c30 59 20 61 72 65 20 4e 55 4c 4c 20 69 6e 20 69 6e  Y are NULL in in
19c40 73 74 72 28 58 2c 59 29 20 74 68 65 6e 20 74 68  str(X,Y) then th
19c50 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
19c60 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 68 65  ..}..funcdef {he
19c70 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  x(X)} {} {.  ^Th
19c80 65 20 68 65 78 28 29 20 66 75 6e 63 74 69 6f 6e  e hex() function
19c90 20 69 6e 74 65 72 70 72 65 74 73 20 69 74 73 20   interprets its 
19ca0 61 72 67 75 6d 65 6e 74 20 61 73 20 61 20 42 4c  argument as a BL
19cb0 4f 42 20 61 6e 64 20 72 65 74 75 72 6e 73 0a 20  OB and returns. 
19cc0 20 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 20   a string which 
19cd0 69 73 20 74 68 65 20 75 70 70 65 72 2d 63 61 73  is the upper-cas
19ce0 65 20 68 65 78 61 64 65 63 69 6d 61 6c 20 72 65  e hexadecimal re
19cf0 6e 64 65 72 69 6e 67 20 6f 66 20 74 68 65 20 63  ndering of the c
19d00 6f 6e 74 65 6e 74 20 6f 66 0a 20 20 74 68 61 74  ontent of.  that
19d10 20 62 6c 6f 62 2e 0a 7d 0a 0a 66 75 6e 63 64 65   blob..}..funcde
19d20 66 20 7b 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  f {last_insert_r
19d30 6f 77 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e  owid()} {} {.  ^
19d40 54 68 65 20 6c 61 73 74 5f 69 6e 73 65 72 74 5f  The last_insert_
19d50 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e  rowid() function
19d60 20 72 65 74 75 72 6e 73 20 74 68 65 20 5b 52 4f   returns the [RO
19d70 57 49 44 5d 0a 20 20 6f 66 20 74 68 65 20 6c 61  WID].  of the la
19d80 73 74 20 72 6f 77 20 69 6e 73 65 72 74 20 66 72  st row insert fr
19d90 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
19da0 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 68 69 63 68  connection which
19db0 20 69 6e 76 6f 6b 65 64 20 74 68 65 0a 20 20 66   invoked the.  f
19dc0 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54 68 65 20  unction..  ^The 
19dd0 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
19de0 64 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  d() SQL function
19df0 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72   is a wrapper ar
19e00 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c 69  ound the.  [sqli
19e10 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
19e20 72 6f 77 69 64 28 29 5d 20 43 2f 43 2b 2b 20 69  rowid()] C/C++ i
19e30 6e 74 65 72 66 61 63 65 20 66 75 6e 63 74 69 6f  nterface functio
19e40 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c  n..}..funcdef {l
19e50 65 6e 67 74 68 28 58 29 7d 20 7b 7d 20 7b 0a 20  ength(X)} {} {. 
19e60 20 5e 46 6f 72 20 61 20 73 74 72 69 6e 67 20 76   ^For a string v
19e70 61 6c 75 65 20 58 2c 20 74 68 65 20 6c 65 6e 67  alue X, the leng
19e80 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  th(X) function r
19e90 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
19ea0 72 20 6f 66 20 0a 20 20 63 68 61 72 61 63 74 65  r of .  characte
19eb0 72 73 20 28 6e 6f 74 20 62 79 74 65 73 29 20 69  rs (not bytes) i
19ec0 6e 20 58 20 70 72 69 6f 72 20 74 6f 20 74 68 65  n X prior to the
19ed0 20 66 69 72 73 74 20 4e 55 4c 20 63 68 61 72 61   first NUL chara
19ee0 63 74 65 72 2e 0a 20 20 53 69 6e 63 65 20 53 51  cter..  Since SQ
19ef0 4c 69 74 65 20 73 74 72 69 6e 67 73 20 64 6f 20  Lite strings do 
19f00 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6e  not normally con
19f10 74 61 69 6e 20 4e 55 4c 20 63 68 61 72 61 63 74  tain NUL charact
19f20 65 72 73 2c 20 74 68 65 20 6c 65 6e 67 74 68 28  ers, the length(
19f30 58 29 0a 20 20 66 75 6e 63 74 69 6f 6e 20 77 69  X).  function wi
19f40 6c 6c 20 75 73 75 61 6c 6c 79 20 72 65 74 75 72  ll usually retur
19f50 6e 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  n the total numb
19f60 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73  er of characters
19f70 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67 20 58   in the string X
19f80 2e 0a 20 20 5e 46 6f 72 20 61 20 62 6c 6f 62 20  ..  ^For a blob 
19f90 76 61 6c 75 65 20 58 2c 20 6c 65 6e 67 74 68 28  value X, length(
19fa0 58 29 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e  X) returns the n
19fb0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
19fc0 6e 20 74 68 65 20 62 6c 6f 62 2e 0a 20 20 5e 49  n the blob..  ^I
19fd0 66 20 58 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  f X is NULL then
19fe0 20 6c 65 6e 67 74 68 28 58 29 20 69 73 20 4e 55   length(X) is NU
19ff0 4c 4c 2e 0a 20 20 5e 49 66 20 58 20 69 73 20 6e  LL..  ^If X is n
1a000 75 6d 65 72 69 63 20 74 68 65 6e 20 6c 65 6e 67  umeric then leng
1a010 74 68 28 58 29 20 72 65 74 75 72 6e 73 20 74 68  th(X) returns th
1a020 65 20 6c 65 6e 67 74 68 20 6f 66 20 61 20 73 74  e length of a st
1a030 72 69 6e 67 0a 20 20 72 65 70 72 65 73 65 6e 74  ring.  represent
1a040 61 74 69 6f 6e 20 6f 66 20 58 2e 0a 7d 0a 0a 66  ation of X..}..f
1a050 75 6e 63 64 65 66 20 7b 6c 69 6b 65 28 58 2c 59  uncdef {like(X,Y
1a060 29 20 6c 69 6b 65 28 58 2c 59 2c 5a 29 7d 20 7b  ) like(X,Y,Z)} {
1a070 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 69 6b 65 28  } {.  ^The like(
1a080 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73  ) function is us
1a090 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
1a0a0 74 68 65 0a 20 20 22 3c 62 3e 59 20 4c 49 4b 45  the.  "<b>Y LIKE
1a0b0 20 58 20 26 23 39 31 3b 45 53 43 41 50 45 20 5a   X &#91;ESCAPE Z
1a0c0 26 23 39 33 3b 3c 2f 62 3e 22 20 65 78 70 72 65  &#93;</b>" expre
1a0d0 73 73 69 6f 6e 2e 20 0a 20 20 5e 49 66 20 74 68  ssion. .  ^If th
1a0e0 65 20 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41 50  e optional ESCAP
1a0f0 45 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73  E clause is pres
1a100 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 0a 20 20  ent, then the.  
1a110 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  like() function 
1a120 69 73 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20  is invoked with 
1a130 74 68 72 65 65 20 61 72 67 75 6d 65 6e 74 73 2e  three arguments.
1a140 20 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 74    ^Otherwise, it
1a150 20 69 73 0a 20 20 69 6e 76 6f 6b 65 64 20 77 69   is.  invoked wi
1a160 74 68 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73  th two arguments
1a170 20 6f 6e 6c 79 2e 20 4e 6f 74 65 20 74 68 61 74   only. Note that
1a180 20 74 68 65 20 58 20 61 6e 64 20 59 20 70 61 72   the X and Y par
1a190 61 6d 65 74 65 72 73 20 61 72 65 0a 20 20 72 65  ameters are.  re
1a1a0 76 65 72 73 65 64 20 69 6e 20 74 68 65 20 6c 69  versed in the li
1a1b0 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  ke() function re
1a1c0 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e  lative to the in
1a1d0 66 69 78 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61  fix [LIKE] opera
1a1e0 74 6f 72 2e 0a 20 20 5e 54 68 65 20 5b 73 71 6c  tor..  ^The [sql
1a1f0 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
1a200 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63  tion()] interfac
1a210 65 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  e can be used to
1a220 20 6f 76 65 72 72 69 64 65 20 74 68 65 0a 20 20   override the.  
1a230 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  like() function 
1a240 61 6e 64 20 74 68 65 72 65 62 79 20 63 68 61 6e  and thereby chan
1a250 67 65 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ge the operation
1a260 20 6f 66 20 74 68 65 0a 20 20 5b 4c 49 4b 45 5d   of the.  [LIKE]
1a270 20 6f 70 65 72 61 74 6f 72 2e 20 20 57 68 65 6e   operator.  When
1a280 20 6f 76 65 72 72 69 64 69 6e 67 20 74 68 65 20   overriding the 
1a290 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 2c  like() function,
1a2a0 20 69 74 20 6d 61 79 20 62 65 20 69 6d 70 6f 72   it may be impor
1a2b0 74 61 6e 74 0a 20 20 74 6f 20 6f 76 65 72 72 69  tant.  to overri
1a2c0 64 65 20 62 6f 74 68 20 74 68 65 20 74 77 6f 20  de both the two 
1a2d0 61 6e 64 20 74 68 72 65 65 20 61 72 67 75 6d 65  and three argume
1a2e0 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74  nt versions of t
1a2f0 68 65 20 6c 69 6b 65 28 29 20 0a 20 20 66 75 6e  he like() .  fun
1a300 63 74 69 6f 6e 2e 20 4f 74 68 65 72 77 69 73 65  ction. Otherwise
1a310 2c 20 64 69 66 66 65 72 65 6e 74 20 63 6f 64 65  , different code
1a320 20 6d 61 79 20 62 65 20 63 61 6c 6c 65 64 20 74   may be called t
1a330 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a  o implement the.
1a340 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f    [LIKE] operato
1a350 72 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  r depending on w
1a360 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e  hether or not an
1a370 20 45 53 43 41 50 45 20 63 6c 61 75 73 65 20 77   ESCAPE clause w
1a380 61 73 20 0a 20 20 73 70 65 63 69 66 69 65 64 2e  as .  specified.
1a390 0a 7d 0a 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 69  .}...funcdef {li
1a3a0 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 7d 20 7b  kelihood(X,Y)} {
1a3b0 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 69 6b 65 6c  } {.  ^The likel
1a3c0 69 68 6f 6f 64 28 58 2c 59 29 20 66 75 6e 63 74  ihood(X,Y) funct
1a3d0 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 72 67 75  ion returns argu
1a3e0 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e 67 65 64  ment X unchanged
1a3f0 2e 0a 20 20 5e 28 54 68 65 20 76 61 6c 75 65 20  ..  ^(The value 
1a400 59 20 69 6e 20 6c 69 6b 65 6c 69 68 6f 6f 64 28  Y in likelihood(
1a410 58 2c 59 29 20 6d 75 73 74 20 62 65 20 61 20 66  X,Y) must be a f
1a420 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 63 6f  loating point co
1a430 6e 73 74 61 6e 74 0a 20 20 62 65 74 77 65 65 6e  nstant.  between
1a440 20 30 2e 30 20 61 6e 64 20 31 2e 30 2c 20 69 6e   0.0 and 1.0, in
1a450 63 6c 75 73 69 76 65 2e 29 5e 0a 20 20 5e 54 68  clusive.)^.  ^Th
1a460 65 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 29 20  e likelihood(X) 
1a470 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f  function is a no
1a480 2d 6f 70 20 74 68 61 74 20 74 68 65 20 63 6f 64  -op that the cod
1a490 65 20 67 65 6e 65 72 61 74 6f 72 0a 20 20 6f 70  e generator.  op
1a4a0 74 69 6d 69 7a 65 73 20 61 77 61 79 20 73 6f 20  timizes away so 
1a4b0 74 68 61 74 20 69 74 20 63 6f 6e 73 75 6d 65 73  that it consumes
1a4c0 20 6e 6f 20 43 50 55 20 63 79 63 6c 65 73 20 64   no CPU cycles d
1a4d0 75 72 69 6e 67 20 72 75 6e 2d 74 69 6d 65 0a 20  uring run-time. 
1a4e0 20 28 74 68 61 74 20 69 73 2c 20 64 75 72 69 6e   (that is, durin
1a4f0 67 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71 6c 69  g calls to [sqli
1a500 74 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a 20 20  te3_step()])..  
1a510 5e 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20  ^The purpose of 
1a520 74 68 65 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58  the likelihood(X
1a530 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  ,Y) function is 
1a540 74 6f 20 70 72 6f 76 69 64 65 20 61 20 68 69 6e  to provide a hin
1a550 74 0a 20 20 74 6f 20 74 68 65 20 71 75 65 72 79  t.  to the query
1a560 20 70 6c 61 6e 6e 65 72 20 74 68 61 74 20 74 68   planner that th
1a570 65 20 61 72 67 75 6d 65 6e 74 20 58 20 69 73 20  e argument X is 
1a580 61 20 62 6f 6f 6c 65 61 6e 20 74 68 61 74 20 69  a boolean that i
1a590 73 0a 20 20 74 72 75 65 20 77 69 74 68 20 61 20  s.  true with a 
1a5a0 70 72 6f 62 61 62 69 6c 69 74 79 20 6f 66 20 61  probability of a
1a5b0 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 59 2e 0a  pproximately Y..
1a5c0 20 20 5e 28 54 68 65 20 5b 75 6e 6c 69 6b 65 6c    ^(The [unlikel
1a5d0 79 28 58 29 5d 20 66 75 6e 63 74 69 6f 6e 20 69  y(X)] function i
1a5e0 73 20 73 68 6f 72 74 2d 68 61 6e 64 20 66 6f 72  s short-hand for
1a5f0 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 30 2e   likelihood(X,0.
1a600 30 36 32 35 29 2e 29 5e 0a 20 20 5e 28 54 68 65  0625).)^.  ^(The
1a610 20 5b 6c 69 6b 65 6c 79 28 58 29 5d 20 66 75 6e   [likely(X)] fun
1a620 63 74 69 6f 6e 20 69 73 20 73 68 6f 72 74 2d 68  ction is short-h
1a630 61 6e 64 20 66 6f 72 20 6c 69 6b 65 6c 69 68 6f  and for likeliho
1a640 6f 64 28 58 2c 30 2e 39 33 37 35 29 2e 29 5e 0a  od(X,0.9375).)^.
1a650 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 69 6b 65  }..funcdef {like
1a660 6c 79 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ly(X)} {} {.  ^T
1a670 68 65 20 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e  he likely(X) fun
1a680 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
1a690 65 20 61 72 67 75 6d 65 6e 74 20 58 20 75 6e 63  e argument X unc
1a6a0 68 61 6e 67 65 64 2e 0a 20 20 5e 54 68 65 20 6c  hanged..  ^The l
1a6b0 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f  ikely(X) functio
1a6c0 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 20 74 68 61  n is a no-op tha
1a6d0 74 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  t the code gener
1a6e0 61 74 6f 72 0a 20 20 6f 70 74 69 6d 69 7a 65 73  ator.  optimizes
1a6f0 20 61 77 61 79 20 73 6f 20 74 68 61 74 20 69 74   away so that it
1a700 20 63 6f 6e 73 75 6d 65 73 20 6e 6f 20 43 50 55   consumes no CPU
1a710 20 63 79 63 6c 65 73 20 61 74 0a 20 20 72 75 6e   cycles at.  run
1a720 2d 74 69 6d 65 20 28 74 68 61 74 20 69 73 2c 20  -time (that is, 
1a730 64 75 72 69 6e 67 20 63 61 6c 6c 73 20 74 6f 20  during calls to 
1a740 5b 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 5d  [sqlite3_step()]
1a750 29 2e 0a 20 20 5e 54 68 65 20 70 75 72 70 6f 73  )..  ^The purpos
1a760 65 20 6f 66 20 74 68 65 20 6c 69 6b 65 6c 79 28  e of the likely(
1a770 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74  X) function is t
1a780 6f 20 70 72 6f 76 69 64 65 20 61 20 68 69 6e 74  o provide a hint
1a790 0a 20 20 74 6f 20 74 68 65 20 71 75 65 72 79 20  .  to the query 
1a7a0 70 6c 61 6e 6e 65 72 20 74 68 61 74 20 74 68 65  planner that the
1a7b0 20 61 72 67 75 6d 65 6e 74 20 58 20 69 73 20 61   argument X is a
1a7c0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 0a 20   boolean value. 
1a7d0 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79   that is usually
1a7e0 20 74 72 75 65 2e 20 5e 28 54 68 65 20 6c 69 6b   true. ^(The lik
1a7f0 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  ely(X) function 
1a800 69 73 20 65 71 75 69 76 61 6c 65 6e 74 0a 20 20  is equivalent.  
1a810 74 6f 20 5b 6c 69 6b 65 6c 69 68 6f 6f 64 5d 28  to [likelihood](
1a820 58 2c 30 2e 39 33 37 35 29 2e 29 5e 20 53 65 65  X,0.9375).)^ See
1a830 20 61 6c 73 6f 3a 20 5b 75 6e 6c 69 6b 65 6c 79   also: [unlikely
1a840 28 58 29 5d 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  (X)]..}..funcdef
1a850 20 7b 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e   {load_extension
1a860 28 58 29 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  (X) load_extensi
1a870 6f 6e 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  on(X,Y)} {} {.  
1a880 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  ^The load_extens
1a890 69 6f 6e 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  ion(X,Y) functio
1a8a0 6e 20 6c 6f 61 64 73 20 5b 53 51 4c 69 74 65 20  n loads [SQLite 
1a8b0 65 78 74 65 6e 73 69 6f 6e 73 5d 20 6f 75 74 20  extensions] out 
1a8c0 6f 66 20 74 68 65 20 73 68 61 72 65 64 0a 20 20  of the shared.  
1a8d0 6c 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d  library file nam
1a8e0 65 64 20 58 20 75 73 69 6e 67 20 74 68 65 20 65  ed X using the e
1a8f0 6e 74 72 79 20 70 6f 69 6e 74 20 59 2e 20 20 5e  ntry point Y.  ^
1a900 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 6c 6f  The result of lo
1a910 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 0a 20  ad_extension(). 
1a920 20 69 73 20 61 6c 77 61 79 73 20 61 20 4e 55 4c   is always a NUL
1a930 4c 2e 20 20 5e 49 66 20 59 20 69 73 20 6f 6d 69  L.  ^If Y is omi
1a940 74 74 65 64 20 74 68 65 6e 20 74 68 65 20 64 65  tted then the de
1a950 66 61 75 6c 74 20 65 6e 74 72 79 20 70 6f 69 6e  fault entry poin
1a960 74 20 6e 61 6d 65 20 69 73 20 75 73 65 64 2e 0a  t name is used..
1a970 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65    ^The load_exte
1a980 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e  nsion() function
1a990 20 72 61 69 73 65 73 20 61 6e 20 65 78 63 65 70   raises an excep
1a9a0 74 69 6f 6e 20 69 66 20 74 68 65 20 65 78 74 65  tion if the exte
1a9b0 6e 73 69 6f 6e 20 66 61 69 6c 73 20 74 6f 0a 20  nsion fails to. 
1a9c0 20 6c 6f 61 64 20 6f 72 20 69 6e 69 74 69 61 6c   load or initial
1a9d0 69 7a 65 20 63 6f 72 72 65 63 74 6c 79 2e 0a 0a  ize correctly...
1a9e0 20 20 3c 70 3e 5e 54 68 65 20 6c 6f 61 64 5f 65    <p>^The load_e
1a9f0 78 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74  xtension() funct
1aa00 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 69 66  ion will fail if
1aa10 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 20 61   the extension a
1aa20 74 74 65 6d 70 74 73 20 74 6f 20 0a 20 20 6d 6f  ttempts to .  mo
1aa30 64 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20 61  dify or delete a
1aa40 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 6f  n SQL function o
1aa50 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  r collating sequ
1aa60 65 6e 63 65 2e 20 20 5e 54 68 65 0a 20 20 65 78  ence.  ^The.  ex
1aa70 74 65 6e 73 69 6f 6e 20 63 61 6e 20 61 64 64 20  tension can add 
1aa80 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72  new functions or
1aa90 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
1aaa0 6e 63 65 73 2c 20 62 75 74 20 63 61 6e 6e 6f 74  nces, but cannot
1aab0 0a 20 20 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c  .  modify or del
1aac0 65 74 65 20 65 78 69 73 74 69 6e 67 20 66 75 6e  ete existing fun
1aad0 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74  ctions or collat
1aae0 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 62 65  ing sequences be
1aaf0 63 61 75 73 65 0a 20 20 74 68 6f 73 65 20 66 75  cause.  those fu
1ab00 6e 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 63  nctions and/or c
1ab10 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
1ab20 65 73 20 6d 69 67 68 74 20 62 65 20 75 73 65 64  es might be used
1ab30 20 65 6c 73 65 77 68 65 72 65 0a 20 20 69 6e 20   elsewhere.  in 
1ab40 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 72 75  the currently ru
1ab50 6e 6e 69 6e 67 20 53 51 4c 20 73 74 61 74 65 6d  nning SQL statem
1ab60 65 6e 74 2e 20 20 54 6f 20 6c 6f 61 64 20 61 6e  ent.  To load an
1ab70 20 65 78 74 65 6e 73 69 6f 6e 20 74 68 61 74 0a   extension that.
1ab80 20 20 63 68 61 6e 67 65 73 20 6f 72 20 64 65 6c    changes or del
1ab90 65 74 65 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f  etes functions o
1aba0 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  r collating sequ
1abb0 65 6e 63 65 73 2c 20 75 73 65 20 74 68 65 0a 20  ences, use the. 
1abc0 20 5b 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65   [sqlite3_load_e
1abd0 78 74 65 6e 73 69 6f 6e 28 29 5d 20 43 2d 6c 61  xtension()] C-la
1abe0 6e 67 75 61 67 65 20 41 50 49 2e 3c 2f 70 3e 0a  nguage API.</p>.
1abf0 0a 20 20 3c 70 3e 46 6f 72 20 73 65 63 75 72 69  .  <p>For securi
1ac00 74 79 20 72 65 61 73 6f 6e 73 2c 20 65 78 74 65  ty reasons, exte
1ac10 6e 73 69 6f 6e 20 6c 6f 61 64 65 64 20 69 73 20  nsion loaded is 
1ac20 74 75 72 6e 65 64 20 6f 66 66 20 62 79 20 64 65  turned off by de
1ac30 66 61 75 6c 74 20 61 6e 64 20 6d 75 73 74 0a 20  fault and must. 
1ac40 20 62 65 20 65 6e 61 62 6c 65 64 20 62 79 20 61   be enabled by a
1ac50 20 70 72 69 6f 72 20 63 61 6c 6c 20 74 6f 20 5b   prior call to [
1ac60 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c  sqlite3_enable_l
1ac70 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 5d  oad_extension()]
1ac80 2e 3c 2f 70 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66  .</p>.}..funcdef
1ac90 20 7b 6c 6f 77 65 72 28 58 29 7d 20 7b 7d 20 7b   {lower(X)} {} {
1aca0 0a 20 20 5e 54 68 65 20 6c 6f 77 65 72 28 58 29  .  ^The lower(X)
1acb0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1acc0 73 20 61 20 63 6f 70 79 20 6f 66 20 73 74 72 69  s a copy of stri
1acd0 6e 67 20 58 20 77 69 74 68 20 61 6c 6c 20 41 53  ng X with all AS
1ace0 43 49 49 20 63 68 61 72 61 63 74 65 72 73 0a 20  CII characters. 
1acf0 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 6c 6f   converted to lo
1ad00 77 65 72 20 63 61 73 65 2e 20 20 5e 54 68 65 20  wer case.  ^The 
1ad10 64 65 66 61 75 6c 74 20 62 75 69 6c 74 2d 69 6e  default built-in
1ad20 20 6c 6f 77 65 72 28 29 20 66 75 6e 63 74 69 6f   lower() functio
1ad30 6e 20 77 6f 72 6b 73 0a 20 20 66 6f 72 20 41 53  n works.  for AS
1ad40 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20 6f  CII characters o
1ad50 6e 6c 79 2e 20 20 54 6f 20 64 6f 20 63 61 73 65  nly.  To do case
1ad60 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 6f 6e 20   conversions on 
1ad70 6e 6f 6e 2d 41 53 43 49 49 0a 20 20 63 68 61 72  non-ASCII.  char
1ad80 61 63 74 65 72 73 2c 20 6c 6f 61 64 20 74 68 65  acters, load the
1ad90 20 49 43 55 20 65 78 74 65 6e 73 69 6f 6e 2e 0a   ICU extension..
1ada0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 74 72 69  }..funcdef {ltri
1adb0 6d 28 58 29 20 6c 74 72 69 6d 28 58 2c 59 29 7d  m(X) ltrim(X,Y)}
1adc0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 74 72   {} {.  ^The ltr
1add0 69 6d 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  im(X,Y) function
1ade0 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
1adf0 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f  g formed by remo
1ae00 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c  ving any and all
1ae10 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 74 68  .  characters th
1ae20 61 74 20 61 70 70 65 61 72 20 69 6e 20 59 20 66  at appear in Y f
1ae30 72 6f 6d 20 74 68 65 20 6c 65 66 74 20 73 69 64  rom the left sid
1ae40 65 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74 68  e of X..  ^If th
1ae50 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20  e Y argument is 
1ae60 6f 6d 69 74 74 65 64 2c 20 6c 74 72 69 6d 28 58  omitted, ltrim(X
1ae70 29 20 72 65 6d 6f 76 65 73 20 73 70 61 63 65 73  ) removes spaces
1ae80 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74 20 73   from the left s
1ae90 69 64 65 0a 20 20 6f 66 20 58 2e 0a 7d 0a 0a 66  ide.  of X..}..f
1aea0 75 6e 63 64 65 66 20 7b 6d 61 78 28 58 2c 59 2c  uncdef {max(X,Y,
1aeb0 2e 2e 2e 29 7d 20 7b 2a 6d 61 78 43 6f 72 65 46  ...)} {*maxCoreF
1aec0 75 6e 63 20 2a 6d 61 78 20 7b 6d 61 78 28 29 20  unc *max {max() 
1aed0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b  SQL function}} {
1aee0 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72  .  ^The multi-ar
1aef0 67 75 6d 65 6e 74 20 6d 61 78 28 29 20 66 75 6e  gument max() fun
1af00 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
1af10 65 20 61 72 67 75 6d 65 6e 74 20 77 69 74 68 20  e argument with 
1af20 74 68 65 20 0a 20 20 6d 61 78 69 6d 75 6d 20 76  the .  maximum v
1af30 61 6c 75 65 2c 20 6f 72 20 72 65 74 75 72 6e 20  alue, or return 
1af40 4e 55 4c 4c 20 69 66 20 61 6e 79 20 61 72 67 75  NULL if any argu
1af50 6d 65 6e 74 20 69 73 20 4e 55 4c 4c 2e 20 0a 20  ment is NULL. . 
1af60 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75   ^The multi-argu
1af70 6d 65 6e 74 20 6d 61 78 28 29 20 66 75 6e 63 74  ment max() funct
1af80 69 6f 6e 20 73 65 61 72 63 68 65 73 20 69 74 73  ion searches its
1af90 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20   arguments from 
1afa0 6c 65 66 74 20 74 6f 20 72 69 67 68 74 0a 20 20  left to right.  
1afb0 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20  for an argument 
1afc0 74 68 61 74 20 64 65 66 69 6e 65 73 20 61 20 63  that defines a c
1afd0 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
1afe0 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61 74 20  n and uses that 
1aff0 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75 6e 63  collating.  func
1b000 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72  tion for all str
1b010 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e  ing comparisons.
1b020 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68    ^If none of th
1b030 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 6d  e arguments to m
1b040 61 78 28 29 0a 20 20 64 65 66 69 6e 65 20 61 20  ax().  define a 
1b050 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
1b060 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 42 49 4e  on, then the BIN
1b070 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ARY collating fu
1b080 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a  nction is used..
1b090 20 20 5e 28 4e 6f 74 65 20 74 68 61 74 20 3c 62    ^(Note that <b
1b0a0 3e 6d 61 78 28 29 3c 2f 62 3e 20 69 73 20 61 20  >max()</b> is a 
1b0b0 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20  simple function 
1b0c0 77 68 65 6e 0a 20 20 69 74 20 68 61 73 20 32 20  when.  it has 2 
1b0d0 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74  or more argument
1b0e0 73 20 62 75 74 20 6f 70 65 72 61 74 65 73 20 61  s but operates a
1b0f0 73 20 61 6e 0a 20 20 5b 6d 61 78 41 67 67 46 75  s an.  [maxAggFu
1b100 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65 20 66  nc | aggregate f
1b110 75 6e 63 74 69 6f 6e 5d 20 69 66 20 67 69 76 65  unction] if give
1b120 6e 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20  n only a single 
1b130 61 72 67 75 6d 65 6e 74 2e 29 5e 0a 7d 0a 0a 66  argument.)^.}..f
1b140 75 6e 63 64 65 66 20 7b 6d 69 6e 28 58 2c 59 2c  uncdef {min(X,Y,
1b150 2e 2e 2e 29 7d 20 7b 2a 6d 69 6e 43 6f 72 65 46  ...)} {*minCoreF
1b160 75 6e 63 20 2a 6d 69 6e 20 7b 6d 69 6e 28 29 20  unc *min {min() 
1b170 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b  SQL function}} {
1b180 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72  .  ^The multi-ar
1b190 67 75 6d 65 6e 74 20 6d 69 6e 28 29 20 66 75 6e  gument min() fun
1b1a0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
1b1b0 65 20 61 72 67 75 6d 65 6e 74 20 77 69 74 68 20  e argument with 
1b1c0 74 68 65 0a 20 20 6d 69 6e 69 6d 75 6d 20 76 61  the.  minimum va
1b1d0 6c 75 65 2e 0a 20 20 5e 54 68 65 20 6d 75 6c 74  lue..  ^The mult
1b1e0 69 2d 61 72 67 75 6d 65 6e 74 20 6d 69 6e 28 29  i-argument min()
1b1f0 20 66 75 6e 63 74 69 6f 6e 20 73 65 61 72 63 68   function search
1b200 65 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74 73  es its arguments
1b210 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
1b220 67 68 74 0a 20 20 66 6f 72 20 61 6e 20 61 72 67  ght.  for an arg
1b230 75 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69 6e  ument that defin
1b240 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66  es a collating f
1b250 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73 65 73  unction and uses
1b260 20 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67 0a   that collating.
1b270 20 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61    function for a
1b280 6c 6c 20 73 74 72 69 6e 67 20 63 6f 6d 70 61 72  ll string compar
1b290 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 6f 6e 65  isons.  ^If none
1b2a0 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   of the argument
1b2b0 73 20 74 6f 20 6d 69 6e 28 29 0a 20 20 64 65 66  s to min().  def
1b2c0 69 6e 65 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20  ine a collating 
1b2d0 66 75 6e 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74  function, then t
1b2e0 68 65 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74  he BINARY collat
1b2f0 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  ing function is 
1b300 75 73 65 64 2e 0a 20 20 5e 28 4e 6f 74 65 20 74  used..  ^(Note t
1b310 68 61 74 20 3c 62 3e 6d 69 6e 28 29 3c 2f 62 3e  hat <b>min()</b>
1b320 20 69 73 20 61 20 73 69 6d 70 6c 65 20 66 75 6e   is a simple fun
1b330 63 74 69 6f 6e 20 77 68 65 6e 0a 20 20 69 74 20  ction when.  it 
1b340 68 61 73 20 32 20 6f 72 20 6d 6f 72 65 20 61 72  has 2 or more ar
1b350 67 75 6d 65 6e 74 73 20 62 75 74 20 6f 70 65 72  guments but oper
1b360 61 74 65 73 20 61 73 20 61 6e 20 0a 20 20 5b 6d  ates as an .  [m
1b370 69 6e 41 67 67 46 75 6e 63 20 7c 20 61 67 67 72  inAggFunc | aggr
1b380 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 5d 20  egate function] 
1b390 69 66 20 67 69 76 65 6e 0a 20 20 6f 6e 6c 79 20  if given.  only 
1b3a0 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e  a single argumen
1b3b0 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  t.)^.}..funcdef 
1b3c0 7b 6e 75 6c 6c 69 66 28 58 2c 59 29 7d 20 7b 7d  {nullif(X,Y)} {}
1b3d0 20 7b 0a 20 20 5e 54 68 65 20 6e 75 6c 6c 69 66   {.  ^The nullif
1b3e0 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72  (X,Y) function r
1b3f0 65 74 75 72 6e 73 20 69 74 73 20 66 69 72 73 74  eturns its first
1b400 20 61 72 67 75 6d 65 6e 74 20 69 66 20 74 68 65   argument if the
1b410 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 0a 20   arguments are. 
1b420 20 64 69 66 66 65 72 65 6e 74 20 61 6e 64 20 4e   different and N
1b430 55 4c 4c 20 69 66 20 74 68 65 20 61 72 67 75 6d  ULL if the argum
1b440 65 6e 74 73 20 61 72 65 20 74 68 65 20 73 61 6d  ents are the sam
1b450 65 2e 20 20 5e 54 68 65 20 6e 75 6c 6c 69 66 28  e.  ^The nullif(
1b460 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  X,Y) function.  
1b470 73 65 61 72 63 68 65 73 20 69 74 73 20 61 72 67  searches its arg
1b480 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74  uments from left
1b490 20 74 6f 20 72 69 67 68 74 20 66 6f 72 20 61 6e   to right for an
1b4a0 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20 64   argument that d
1b4b0 65 66 69 6e 65 73 20 61 0a 20 20 63 6f 6c 6c 61  efines a.  colla
1b4c0 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e  ting function an
1b4d0 64 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c  d uses that coll
1b4e0 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 66  ating function f
1b4f0 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 0a 20 20  or all string.  
1b500 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49  comparisons.  ^I
1b510 66 20 6e 65 69 74 68 65 72 20 61 72 67 75 6d 65  f neither argume
1b520 6e 74 20 74 6f 20 6e 75 6c 6c 69 66 28 29 20 64  nt to nullif() d
1b530 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69  efines a collati
1b540 6e 67 20 66 75 6e 63 74 69 6f 6e 0a 20 20 74 68  ng function.  th
1b550 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20 69 73  en the BINARY is
1b560 20 75 73 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65   used..}..funcde
1b570 66 20 7b 70 72 69 6e 74 66 28 46 4f 52 4d 41 54  f {printf(FORMAT
1b580 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 28  ,...)} {} {.  ^(
1b590 54 68 65 20 70 72 69 6e 74 66 28 46 4f 52 4d 41  The printf(FORMA
1b5a0 54 2c 2e 2e 2e 29 20 53 51 4c 20 66 75 6e 63 74  T,...) SQL funct
1b5b0 69 6f 6e 20 77 6f 72 6b 73 20 6c 69 6b 65 20 74  ion works like t
1b5c0 68 65 20 5b 73 71 6c 69 74 65 33 5f 6d 70 72 69  he [sqlite3_mpri
1b5d0 6e 74 66 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67  ntf()] C-languag
1b5e0 65 0a 20 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  e.  function and
1b5f0 20 74 68 65 20 70 72 69 6e 74 66 28 29 20 66 75   the printf() fu
1b600 6e 63 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20  nction from the 
1b610 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61  standard C libra
1b620 72 79 2e 29 5e 0a 20 20 54 68 65 20 66 69 72 73  ry.)^.  The firs
1b630 74 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  t argument is a 
1b640 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 74 68  format string th
1b650 61 74 20 73 70 65 63 69 66 69 65 73 20 68 6f 77  at specifies how
1b660 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68   to construct th
1b670 65 20 6f 75 74 70 75 74 0a 20 20 73 74 72 69 6e  e output.  strin
1b680 67 20 75 73 69 6e 67 20 76 61 6c 75 65 73 20 74  g using values t
1b690 61 6b 65 6e 20 66 72 6f 6d 20 73 75 62 73 65 71  aken from subseq
1b6a0 75 65 6e 74 20 61 72 67 75 6d 65 6e 74 73 2e 20  uent arguments. 
1b6b0 20 5e 49 66 20 74 68 65 20 46 4f 52 4d 41 54 20   ^If the FORMAT 
1b6c0 61 72 67 75 6d 65 6e 74 20 69 73 0a 20 20 6d 69  argument is.  mi
1b6d0 73 73 69 6e 67 20 6f 72 20 4e 55 4c 4c 20 74 68  ssing or NULL th
1b6e0 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
1b6f0 20 4e 55 4c 4c 2e 20 20 5e 54 68 65 20 25 6e 20   NULL.  ^The %n 
1b700 66 6f 72 6d 61 74 20 69 73 20 73 69 6c 65 6e 74  format is silent
1b710 6c 79 20 69 67 6e 6f 72 65 64 20 61 6e 64 0a 20  ly ignored and. 
1b720 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 73 75 6d   does not consum
1b730 65 20 61 6e 20 61 72 67 75 6d 65 6e 74 2e 20 20  e an argument.  
1b740 5e 54 68 65 20 25 70 20 66 6f 72 6d 61 74 20 69  ^The %p format i
1b750 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 25  s an alias for %
1b760 58 2e 20 20 5e 54 68 65 20 25 7a 20 66 6f 72 6d  X.  ^The %z form
1b770 61 74 0a 20 20 69 73 20 69 6e 74 65 72 63 68 61  at.  is intercha
1b780 6e 67 65 61 62 6c 65 20 77 69 74 68 20 25 73 2e  ngeable with %s.
1b790 20 20 5e 28 49 66 20 74 68 65 72 65 20 61 72 65    ^(If there are
1b7a0 20 74 6f 6f 20 66 65 77 20 61 72 67 75 6d 65 6e   too few argumen
1b7b0 74 73 20 69 6e 20 74 68 65 20 61 72 67 75 6d 65  ts in the argume
1b7c0 6e 74 20 6c 69 73 74 2c 0a 20 20 6d 69 73 73 69  nt list,.  missi
1b7d0 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  ng arguments are
1b7e0 20 61 73 73 75 6d 65 64 20 74 6f 20 68 61 76 65   assumed to have
1b7f0 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2c 20 77   a NULL value, w
1b800 68 69 63 68 20 69 73 20 74 72 61 6e 73 6c 61 74  hich is translat
1b810 65 64 20 69 6e 74 6f 0a 20 20 30 20 6f 72 20 30  ed into.  0 or 0
1b820 2e 30 20 66 6f 72 20 6e 75 6d 65 72 69 63 20 66  .0 for numeric f
1b830 6f 72 6d 61 74 73 20 6f 72 20 61 6e 20 65 6d 70  ormats or an emp
1b840 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 25 73  ty string for %s
1b850 2e 29 5e 0a 7d 0a 20 20 0a 0a 66 75 6e 63 64 65  .)^.}.  ..funcde
1b860 66 20 7b 71 75 6f 74 65 28 58 29 7d 20 7b 7d 20  f {quote(X)} {} 
1b870 7b 0a 20 20 5e 54 68 65 20 71 75 6f 74 65 28 58  {.  ^The quote(X
1b880 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1b890 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66 20 61  ns the text of a
1b8a0 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 77 68  n SQL literal wh
1b8b0 69 63 68 0a 20 20 69 73 20 74 68 65 20 76 61 6c  ich.  is the val
1b8c0 75 65 20 6f 66 20 69 74 73 20 61 72 67 75 6d 65  ue of its argume
1b8d0 6e 74 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20  nt suitable for 
1b8e0 69 6e 63 6c 75 73 69 6f 6e 20 69 6e 74 6f 20 61  inclusion into a
1b8f0 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  n SQL statement.
1b900 0a 20 20 5e 53 74 72 69 6e 67 73 20 61 72 65 20  .  ^Strings are 
1b910 73 75 72 72 6f 75 6e 64 65 64 20 62 79 20 73 69  surrounded by si
1b920 6e 67 6c 65 2d 71 75 6f 74 65 73 20 77 69 74 68  ngle-quotes with
1b930 20 65 73 63 61 70 65 73 20 6f 6e 20 69 6e 74 65   escapes on inte
1b940 72 69 6f 72 20 71 75 6f 74 65 73 0a 20 20 61 73  rior quotes.  as
1b950 20 6e 65 65 64 65 64 2e 20 20 5e 42 4c 4f 42 73   needed.  ^BLOBs
1b960 20 61 72 65 20 65 6e 63 6f 64 65 64 20 61 73 20   are encoded as 
1b970 68 65 78 61 64 65 63 69 6d 61 6c 20 6c 69 74 65  hexadecimal lite
1b980 72 61 6c 73 2e 0a 20 20 5e 53 74 72 69 6e 67 73  rals..  ^Strings
1b990 20 77 69 74 68 20 65 6d 62 65 64 64 65 64 20 4e   with embedded N
1b9a0 55 4c 20 63 68 61 72 61 63 74 65 72 73 20 63 61  UL characters ca
1b9b0 6e 6e 6f 74 20 62 65 20 72 65 70 72 65 73 65 6e  nnot be represen
1b9c0 74 65 64 20 61 73 20 73 74 72 69 6e 67 0a 20 20  ted as string.  
1b9d0 6c 69 74 65 72 61 6c 73 20 69 6e 20 53 51 4c 20  literals in SQL 
1b9e0 61 6e 64 20 68 65 6e 63 65 20 74 68 65 20 72 65  and hence the re
1b9f0 74 75 72 6e 65 64 20 73 74 72 69 6e 67 20 6c 69  turned string li
1ba00 74 65 72 61 6c 20 69 73 20 74 72 75 6e 63 61 74  teral is truncat
1ba10 65 64 20 70 72 69 6f 72 0a 20 20 74 6f 20 74 68  ed prior.  to th
1ba20 65 20 66 69 72 73 74 20 4e 55 4c 2e 0a 7d 0a 0a  e first NUL..}..
1ba30 66 75 6e 63 64 65 66 20 7b 72 61 6e 64 6f 6d 28  funcdef {random(
1ba40 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72  )} {} {.  ^The r
1ba50 61 6e 64 6f 6d 28 29 20 66 75 6e 63 74 69 6f 6e  andom() function
1ba60 20 72 65 74 75 72 6e 73 20 61 20 70 73 65 75 64   returns a pseud
1ba70 6f 2d 72 61 6e 64 6f 6d 20 69 6e 74 65 67 65 72  o-random integer
1ba80 0a 20 20 62 65 74 77 65 65 6e 20 2d 39 32 32 33  .  between -9223
1ba90 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38 20  372036854775808 
1baa0 61 6e 64 20 2b 39 32 32 33 33 37 32 30 33 36 38  and +92233720368
1bab0 35 34 37 37 35 38 30 37 2e 0a 7d 0a 0a 66 75 6e  54775807..}..fun
1bac0 63 64 65 66 20 7b 72 61 6e 64 6f 6d 62 6c 6f 62  cdef {randomblob
1bad0 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (N)} {} {.  ^The
1bae0 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29 20 66   randomblob(N) f
1baf0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 20 61  unction return a
1bb00 6e 20 4e 2d 62 79 74 65 20 62 6c 6f 62 20 63 6f  n N-byte blob co
1bb10 6e 74 61 69 6e 69 6e 67 20 70 73 65 75 64 6f 2d  ntaining pseudo-
1bb20 72 61 6e 64 6f 6d 0a 20 20 62 79 74 65 73 2e 20  random.  bytes. 
1bb30 5e 49 66 20 4e 20 69 73 20 6c 65 73 73 20 74 68  ^If N is less th
1bb40 61 6e 20 31 20 74 68 65 6e 20 61 20 31 2d 62 79  an 1 then a 1-by
1bb50 74 65 20 72 61 6e 64 6f 6d 20 62 6c 6f 62 20 69  te random blob i
1bb60 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a 20 20 3c  s returned...  <
1bb70 70 3e 48 69 6e 74 3a 20 20 61 70 70 6c 69 63 61  p>Hint:  applica
1bb80 74 69 6f 6e 73 20 63 61 6e 20 67 65 6e 65 72 61  tions can genera
1bb90 74 65 20 67 6c 6f 62 61 6c 6c 79 20 75 6e 69 71  te globally uniq
1bba0 75 65 20 69 64 65 6e 74 69 66 69 65 72 73 0a 20  ue identifiers. 
1bbb0 20 75 73 69 6e 67 20 74 68 69 73 20 66 75 6e 63   using this func
1bbc0 74 69 6f 6e 20 74 6f 67 65 74 68 65 72 20 77 69  tion together wi
1bbd0 74 68 20 5b 68 65 78 28 29 5d 20 61 6e 64 2f 6f  th [hex()] and/o
1bbe0 72 0a 20 20 5b 6c 6f 77 65 72 28 29 5d 20 6c 69  r.  [lower()] li
1bbf0 6b 65 20 74 68 69 73 3a 3c 2f 70 3e 0a 0a 20 20  ke this:</p>..  
1bc00 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 68  <blockquote>.  h
1bc10 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36  ex(randomblob(16
1bc20 29 29 3c 62 72 3e 3c 2f 62 72 3e 0a 20 20 6c 6f  ))<br></br>.  lo
1bc30 77 65 72 28 68 65 78 28 72 61 6e 64 6f 6d 62 6c  wer(hex(randombl
1bc40 6f 62 28 31 36 29 29 29 0a 20 20 3c 2f 62 6c 6f  ob(16))).  </blo
1bc50 63 6b 71 75 6f 74 65 3e 0a 7d 0a 0a 66 75 6e 63  ckquote>.}..func
1bc60 64 65 66 20 7b 72 65 70 6c 61 63 65 28 58 2c 59  def {replace(X,Y
1bc70 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Z)} {} {.  ^The
1bc80 20 72 65 70 6c 61 63 65 28 58 2c 59 2c 5a 29 20   replace(X,Y,Z) 
1bc90 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1bca0 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64   a string formed
1bcb0 20 62 79 20 73 75 62 73 74 69 74 75 74 69 6e 67   by substituting
1bcc0 0a 20 20 73 74 72 69 6e 67 20 5a 20 66 6f 72 20  .  string Z for 
1bcd0 65 76 65 72 79 20 6f 63 63 75 72 72 65 6e 63 65  every occurrence
1bce0 20 6f 66 20 73 74 72 69 6e 67 20 59 20 69 6e 20   of string Y in 
1bcf0 73 74 72 69 6e 67 20 58 2e 20 20 5e 54 68 65 20  string X.  ^The 
1bd00 5b 42 49 4e 41 52 59 5d 0a 20 20 63 6f 6c 6c 61  [BINARY].  colla
1bd10 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73  ting sequence is
1bd20 20 75 73 65 64 20 66 6f 72 20 63 6f 6d 70 61 72   used for compar
1bd30 69 73 6f 6e 73 2e 20 20 5e 49 66 20 59 20 69 73  isons.  ^If Y is
1bd40 20 61 6e 20 65 6d 70 74 79 0a 20 20 73 74 72 69   an empty.  stri
1bd50 6e 67 20 74 68 65 6e 20 72 65 74 75 72 6e 20 58  ng then return X
1bd60 20 75 6e 63 68 61 6e 67 65 64 2e 20 20 5e 49 66   unchanged.  ^If
1bd70 20 5a 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61   Z is not initia
1bd80 6c 6c 79 0a 20 20 61 20 73 74 72 69 6e 67 2c 20  lly.  a string, 
1bd90 69 74 20 69 73 20 63 61 73 74 20 74 6f 20 61 20  it is cast to a 
1bda0 55 54 46 2d 38 20 73 74 72 69 6e 67 20 70 72 69  UTF-8 string pri
1bdb0 6f 72 20 74 6f 20 70 72 6f 63 65 73 73 69 6e 67  or to processing
1bdc0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 6f  ..}..funcdef {ro
1bdd0 75 6e 64 28 58 29 20 72 6f 75 6e 64 28 58 2c 59  und(X) round(X,Y
1bde0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72  )} {} {.  ^The r
1bdf0 6f 75 6e 64 28 58 2c 59 29 20 66 75 6e 63 74 69  ound(X,Y) functi
1be00 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 66 6c 6f  on returns a flo
1be10 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 20 20 76 61  ating-point.  va
1be20 6c 75 65 20 58 20 72 6f 75 6e 64 65 64 20 74 6f  lue X rounded to
1be30 20 59 20 64 69 67 69 74 73 20 74 6f 20 74 68 65   Y digits to the
1be40 20 72 69 67 68 74 20 6f 66 20 74 68 65 20 64 65   right of the de
1be50 63 69 6d 61 6c 20 70 6f 69 6e 74 2e 0a 20 20 5e  cimal point..  ^
1be60 49 66 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e  If the Y argumen
1be70 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 69 74  t is omitted, it
1be80 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 62   is assumed to b
1be90 65 20 30 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  e 0..}..funcdef 
1bea0 7b 72 74 72 69 6d 28 58 29 20 72 74 72 69 6d 28  {rtrim(X) rtrim(
1beb0 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
1bec0 65 20 72 74 72 69 6d 28 58 2c 59 29 20 66 75 6e  e rtrim(X,Y) fun
1bed0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
1bee0 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79  string formed by
1bef0 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e   removing any an
1bf00 64 20 61 6c 6c 0a 20 20 63 68 61 72 61 63 74 65  d all.  characte
1bf10 72 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69  rs that appear i
1bf20 6e 20 59 20 66 72 6f 6d 20 74 68 65 20 72 69 67  n Y from the rig
1bf30 68 74 20 73 69 64 65 20 6f 66 20 58 2e 0a 20 20  ht side of X..  
1bf40 5e 49 66 20 74 68 65 20 59 20 61 72 67 75 6d 65  ^If the Y argume
1bf50 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 72  nt is omitted, r
1bf60 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20  trim(X) removes 
1bf70 73 70 61 63 65 73 20 66 72 6f 6d 20 74 68 65 20  spaces from the 
1bf80 72 69 67 68 74 0a 20 20 73 69 64 65 20 6f 66 20  right.  side of 
1bf90 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73  X..}..funcdef {s
1bfa0 6f 75 6e 64 65 78 28 58 29 7d 20 7b 7d 20 7b 0a  oundex(X)} {} {.
1bfb0 20 20 5e 54 68 65 20 73 6f 75 6e 64 65 78 28 58    ^The soundex(X
1bfc0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1bfd0 6e 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  ns a string that
1bfe0 20 69 73 20 74 68 65 20 73 6f 75 6e 64 65 78 20   is the soundex 
1bff0 65 6e 63 6f 64 69 6e 67 20 0a 20 20 6f 66 20 74  encoding .  of t
1c000 68 65 20 73 74 72 69 6e 67 20 58 2e 0a 20 20 5e  he string X..  ^
1c010 54 68 65 20 73 74 72 69 6e 67 20 22 3f 30 30 30  The string "?000
1c020 22 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 66  " is returned if
1c030 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73   the argument is
1c040 20 4e 55 4c 4c 20 6f 72 20 63 6f 6e 74 61 69 6e   NULL or contain
1c050 73 0a 20 20 6e 6f 20 41 53 43 49 49 20 61 6c 70  s.  no ASCII alp
1c060 68 61 62 65 74 69 63 20 63 68 61 72 61 63 74 65  habetic characte
1c070 72 73 2e 0a 20 20 5e 28 54 68 69 73 20 66 75 6e  rs..  ^(This fun
1c080 63 74 69 6f 6e 20 69 73 20 6f 6d 69 74 74 65 64  ction is omitted
1c090 20 66 72 6f 6d 20 53 51 4c 69 74 65 20 62 79 20   from SQLite by 
1c0a0 64 65 66 61 75 6c 74 2e 0a 20 20 49 74 20 69 73  default..  It is
1c0b0 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20   only available 
1c0c0 69 66 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 53  if the [SQLITE_S
1c0d0 4f 55 4e 44 45 58 5d 20 63 6f 6d 70 69 6c 65 2d  OUNDEX] compile-
1c0e0 74 69 6d 65 20 6f 70 74 69 6f 6e 0a 20 20 69 73  time option.  is
1c0f0 20 75 73 65 64 20 77 68 65 6e 20 53 51 4c 69 74   used when SQLit
1c100 65 20 69 73 20 62 75 69 6c 74 2e 29 5e 0a 7d 0a  e is built.)^.}.
1c110 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65  .funcdef {sqlite
1c120 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67  _compileoption_g
1c130 65 74 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  et(N)} {} {.  ^T
1c140 68 65 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c  he sqlite_compil
1c150 65 6f 70 74 69 6f 6e 5f 67 65 74 28 29 20 53 51  eoption_get() SQ
1c160 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20  L function is a 
1c170 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
1c180 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f  he.  [sqlite3_co
1c190 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28  mpileoption_get(
1c1a0 29 5d 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f  )] C/C++ functio
1c1b0 6e 2e 0a 20 20 5e 54 68 69 73 20 72 6f 75 74 69  n..  ^This routi
1c1c0 6e 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 4e  ne returns the N
1c1d0 2d 74 68 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  -th compile-time
1c1e0 20 6f 70 74 69 6f 6e 20 75 73 65 64 20 74 6f 20   option used to 
1c1f0 62 75 69 6c 64 20 53 51 4c 69 74 65 0a 20 20 6f  build SQLite.  o
1c200 72 20 4e 55 4c 4c 20 69 66 20 4e 20 69 73 20 6f  r NULL if N is o
1c210 75 74 20 6f 66 20 72 61 6e 67 65 2e 20 20 53 65  ut of range.  Se
1c220 65 20 61 6c 73 6f 20 74 68 65 20 5b 63 6f 6d 70  e also the [comp
1c230 69 6c 65 5f 6f 70 74 69 6f 6e 73 20 70 72 61 67  ile_options prag
1c240 6d 61 5d 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ma]..}..funcdef 
1c250 7b 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f  {sqlite_compileo
1c260 70 74 69 6f 6e 5f 75 73 65 64 28 58 29 7d 20 7b  ption_used(X)} {
1c270 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74  } {.  ^The sqlit
1c280 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  e_compileoption_
1c290 75 73 65 64 28 29 20 53 51 4c 20 66 75 6e 63 74  used() SQL funct
1c2a0 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65 72  ion is a wrapper
1c2b0 20 61 72 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73   around the.  [s
1c2c0 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70  qlite3_compileop
1c2d0 74 69 6f 6e 5f 75 73 65 64 28 29 5d 20 43 2f 43  tion_used()] C/C
1c2e0 2b 2b 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e  ++ function..  ^
1c2f0 57 68 65 6e 20 74 68 65 20 61 72 67 75 6d 65 6e  When the argumen
1c300 74 20 58 20 74 6f 20 73 71 6c 69 74 65 5f 63 6f  t X to sqlite_co
1c310 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64  mpileoption_used
1c320 28 58 29 20 69 73 20 61 20 73 74 72 69 6e 67 20  (X) is a string 
1c330 77 68 69 63 68 0a 20 20 69 73 20 74 68 65 20 6e  which.  is the n
1c340 61 6d 65 20 6f 66 20 61 20 63 6f 6d 70 69 6c 65  ame of a compile
1c350 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 74 68  -time option, th
1c360 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72  is routine retur
1c370 6e 73 20 74 72 75 65 20 28 31 29 20 6f 72 0a 20  ns true (1) or. 
1c380 20 66 61 6c 73 65 20 28 30 29 20 64 65 70 65 6e   false (0) depen
1c390 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20  ding on whether 
1c3a0 6f 72 20 6e 6f 74 20 74 68 61 74 20 6f 70 74 69  or not that opti
1c3b0 6f 6e 20 77 61 73 20 75 73 65 64 20 64 75 72 69  on was used duri
1c3c0 6e 67 20 74 68 65 0a 20 20 62 75 69 6c 64 2e 0a  ng the.  build..
1c3d0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69  }..funcdef {sqli
1c3e0 74 65 5f 73 6f 75 72 63 65 5f 69 64 28 29 7d 20  te_source_id()} 
1c3f0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69  {} {.  ^The sqli
1c400 74 65 5f 73 6f 75 72 63 65 5f 69 64 28 29 20 66  te_source_id() f
1c410 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1c420 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 64  a string that id
1c430 65 6e 74 69 66 69 65 73 20 74 68 65 0a 20 20 73  entifies the.  s
1c440 70 65 63 69 66 69 63 20 76 65 72 73 69 6f 6e 20  pecific version 
1c450 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f  of the source co
1c460 64 65 20 74 68 61 74 20 77 61 73 20 75 73 65 64  de that was used
1c470 20 74 6f 20 62 75 69 6c 64 20 74 68 65 20 53 51   to build the SQ
1c480 4c 69 74 65 0a 20 20 6c 69 62 72 61 72 79 2e 20  Lite.  library. 
1c490 20 5e 54 68 65 20 73 74 72 69 6e 67 20 72 65 74   ^The string ret
1c4a0 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 5f  urned by sqlite_
1c4b0 73 6f 75 72 63 65 5f 69 64 28 29 20 69 73 0a 20  source_id() is. 
1c4c0 20 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 69   the date and ti
1c4d0 6d 65 20 74 68 61 74 20 74 68 65 20 73 6f 75 72  me that the sour
1c4e0 63 65 20 63 6f 64 65 20 77 61 73 20 63 68 65 63  ce code was chec
1c4f0 6b 65 64 20 69 6e 20 66 6f 6c 6c 6f 77 65 64 20  ked in followed 
1c500 62 79 0a 20 20 74 68 65 20 53 48 41 31 20 68 61  by.  the SHA1 ha
1c510 73 68 20 66 6f 72 20 74 68 61 74 20 63 68 65 63  sh for that chec
1c520 6b 2d 69 6e 2e 20 20 5e 54 68 69 73 20 66 75 6e  k-in.  ^This fun
1c530 63 74 69 6f 6e 20 69 73 0a 20 20 61 6e 20 53 51  ction is.  an SQ
1c540 4c 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64  L wrapper around
1c550 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 6f   the [sqlite3_so
1c560 75 72 63 65 69 64 28 29 5d 20 43 20 69 6e 74 65  urceid()] C inte
1c570 72 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65  rface..}..funcde
1c580 66 20 7b 73 71 6c 69 74 65 5f 76 65 72 73 69 6f  f {sqlite_versio
1c590 6e 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  n()} {} {.  ^The
1c5a0 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28   sqlite_version(
1c5b0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1c5c0 6e 73 20 74 68 65 20 76 65 72 73 69 6f 6e 20 73  ns the version s
1c5d0 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 53 51  tring for the SQ
1c5e0 4c 69 74 65 0a 20 20 6c 69 62 72 61 72 79 20 74  Lite.  library t
1c5f0 68 61 74 20 69 73 20 72 75 6e 6e 69 6e 67 2e 20  hat is running. 
1c600 20 5e 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20   ^This function 
1c610 69 73 20 61 6e 20 53 51 4c 0a 20 20 77 72 61 70  is an SQL.  wrap
1c620 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b  per around the [
1c630 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69  sqlite3_libversi
1c640 6f 6e 28 29 5d 20 43 2d 69 6e 74 65 72 66 61 63  on()] C-interfac
1c650 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73  e..}..funcdef {s
1c660 75 62 73 74 72 28 58 2c 59 2c 5a 29 20 73 75 62  ubstr(X,Y,Z) sub
1c670 73 74 72 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  str(X,Y)} {} {. 
1c680 20 5e 54 68 65 20 73 75 62 73 74 72 28 58 2c 59   ^The substr(X,Y
1c690 2c 5a 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  ,Z) function ret
1c6a0 75 72 6e 73 20 61 20 73 75 62 73 74 72 69 6e 67  urns a substring
1c6b0 20 6f 66 20 69 6e 70 75 74 20 73 74 72 69 6e 67   of input string
1c6c0 20 58 20 74 68 61 74 20 62 65 67 69 6e 73 0a 20   X that begins. 
1c6d0 20 77 69 74 68 20 74 68 65 20 59 2d 74 68 20 63   with the Y-th c
1c6e0 68 61 72 61 63 74 65 72 20 61 6e 64 20 77 68 69  haracter and whi
1c6f0 63 68 20 69 73 20 5a 20 63 68 61 72 61 63 74 65  ch is Z characte
1c700 72 73 20 6c 6f 6e 67 2e 0a 20 20 5e 49 66 20 5a  rs long..  ^If Z
1c710 20 69 73 20 6f 6d 69 74 74 65 64 20 74 68 65 6e   is omitted then
1c720 20 73 75 62 73 74 72 28 58 2c 59 29 20 72 65 74   substr(X,Y) ret
1c730 75 72 6e 73 20 61 6c 6c 20 63 68 61 72 61 63 74  urns all charact
1c740 65 72 73 20 74 68 72 6f 75 67 68 20 74 68 65 20  ers through the 
1c750 65 6e 64 0a 20 20 6f 66 20 74 68 65 20 73 74 72  end.  of the str
1c760 69 6e 67 20 58 20 62 65 67 69 6e 6e 69 6e 67 20  ing X beginning 
1c770 77 69 74 68 20 74 68 65 20 59 2d 74 68 2e 0a 20  with the Y-th.. 
1c780 20 5e 54 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20   ^The left-most 
1c790 63 68 61 72 61 63 74 65 72 20 6f 66 20 58 20 69  character of X i
1c7a0 73 20 6e 75 6d 62 65 72 20 31 2e 20 20 5e 49 66  s number 1.  ^If
1c7b0 20 59 20 69 73 20 6e 65 67 61 74 69 76 65 0a 20   Y is negative. 
1c7c0 20 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20   then the first 
1c7d0 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65  character of the
1c7e0 20 73 75 62 73 74 72 69 6e 67 20 69 73 20 66 6f   substring is fo
1c7f0 75 6e 64 20 62 79 20 63 6f 75 6e 74 69 6e 67 20  und by counting 
1c800 66 72 6f 6d 20 74 68 65 0a 20 20 72 69 67 68 74  from the.  right
1c810 20 72 61 74 68 65 72 20 74 68 61 6e 20 74 68 65   rather than the
1c820 20 6c 65 66 74 2e 20 20 5e 49 66 20 5a 20 69 73   left.  ^If Z is
1c830 20 6e 65 67 61 74 69 76 65 20 74 68 65 6e 0a 20   negative then. 
1c840 20 74 68 65 20 61 62 73 28 5a 29 20 63 68 61 72   the abs(Z) char
1c850 61 63 74 65 72 73 20 70 72 65 63 65 64 69 6e 67  acters preceding
1c860 20 74 68 65 20 59 2d 74 68 20 63 68 61 72 61 63   the Y-th charac
1c870 74 65 72 20 61 72 65 20 72 65 74 75 72 6e 65 64  ter are returned
1c880 2e 0a 20 20 5e 49 66 20 58 20 69 73 20 61 20 73  ..  ^If X is a s
1c890 74 72 69 6e 67 20 74 68 65 6e 20 63 68 61 72 61  tring then chara
1c8a0 63 74 65 72 73 20 69 6e 64 69 63 65 73 20 72 65  cters indices re
1c8b0 66 65 72 20 74 6f 20 61 63 74 75 61 6c 20 55 54  fer to actual UT
1c8c0 46 2d 38 20 0a 20 20 63 68 61 72 61 63 74 65 72  F-8 .  character
1c8d0 73 2e 20 20 5e 49 66 20 58 20 69 73 20 61 20 42  s.  ^If X is a B
1c8e0 4c 4f 42 20 74 68 65 6e 20 74 68 65 20 69 6e 64  LOB then the ind
1c8f0 69 63 65 73 20 72 65 66 65 72 20 74 6f 20 62 79  ices refer to by
1c900 74 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  tes..}..funcdef 
1c910 7b 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29  {total_changes()
1c920 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74 6f  } {} {.  ^The to
1c930 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 66 75  tal_changes() fu
1c940 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
1c950 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
1c960 20 63 68 61 6e 67 65 73 0a 20 20 63 61 75 73 65   changes.  cause
1c970 64 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44  d by INSERT, UPD
1c980 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 20 20  ATE or DELETE.  
1c990 73 74 61 74 65 6d 65 6e 74 73 20 73 69 6e 63 65  statements since
1c9a0 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 61 74   the current dat
1c9b0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
1c9c0 20 77 61 73 20 6f 70 65 6e 65 64 2e 0a 20 20 5e   was opened..  ^
1c9d0 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
1c9e0 20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e   a wrapper aroun
1c9f0 64 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 74  d the [sqlite3_t
1ca00 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 0a  otal_changes()].
1ca10 20 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63    C/C++ interfac
1ca20 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74  e..}..funcdef {t
1ca30 72 69 6d 28 58 29 20 74 72 69 6d 28 58 2c 59 29  rim(X) trim(X,Y)
1ca40 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74 72  } {} {.  ^The tr
1ca50 69 6d 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  im(X,Y) function
1ca60 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
1ca70 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f  g formed by remo
1ca80 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c  ving any and all
1ca90 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 74 68  .  characters th
1caa0 61 74 20 61 70 70 65 61 72 20 69 6e 20 59 20 66  at appear in Y f
1cab0 72 6f 6d 20 62 6f 74 68 20 65 6e 64 73 20 6f 66  rom both ends of
1cac0 20 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20   X..  ^If the Y 
1cad0 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74  argument is omit
1cae0 74 65 64 2c 20 74 72 69 6d 28 58 29 20 72 65 6d  ted, trim(X) rem
1caf0 6f 76 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d  oves spaces from
1cb00 20 62 6f 74 68 20 65 6e 64 73 20 6f 66 20 58 2e   both ends of X.
1cb10 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 79 70  .}..funcdef {typ
1cb20 65 6f 66 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  eof(X)} {} {.  ^
1cb30 54 68 65 20 74 79 70 65 6f 66 28 58 29 20 66 75  The typeof(X) fu
1cb40 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
1cb50 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 6e 64   string that ind
1cb60 69 63 61 74 65 73 20 74 68 65 20 5b 64 61 74 61  icates the [data
1cb70 74 79 70 65 5d 20 6f 66 0a 20 20 74 68 65 20 65  type] of.  the e
1cb80 78 70 72 65 73 73 69 6f 6e 20 58 3a 20 22 6e 75  xpression X: "nu
1cb90 6c 6c 22 2c 20 22 69 6e 74 65 67 65 72 22 2c 20  ll", "integer", 
1cba0 22 72 65 61 6c 22 2c 20 22 74 65 78 74 22 2c 20  "real", "text", 
1cbb0 6f 72 20 22 62 6c 6f 62 22 2e 0a 7d 0a 0a 66 75  or "blob"..}..fu
1cbc0 6e 63 64 65 66 20 7b 75 6e 6c 69 6b 65 6c 79 28  ncdef {unlikely(
1cbd0 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  X)} {} {.  ^The 
1cbe0 75 6e 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63  unlikely(X) func
1cbf0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
1cc00 20 61 72 67 75 6d 65 6e 74 20 58 20 75 6e 63 68   argument X unch
1cc10 61 6e 67 65 64 2e 0a 20 20 5e 54 68 65 20 75 6e  anged..  ^The un
1cc20 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69  likely(X) functi
1cc30 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 20 74 68  on is a no-op th
1cc40 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  at the code gene
1cc50 72 61 74 6f 72 0a 20 20 6f 70 74 69 6d 69 7a 65  rator.  optimize
1cc60 73 20 61 77 61 79 20 73 6f 20 74 68 61 74 20 69  s away so that i
1cc70 74 20 63 6f 6e 73 75 6d 65 73 20 6e 6f 20 43 50  t consumes no CP
1cc80 55 20 63 79 63 6c 65 73 20 61 74 0a 20 20 72 75  U cycles at.  ru
1cc90 6e 2d 74 69 6d 65 20 28 74 68 61 74 20 69 73 2c  n-time (that is,
1cca0 20 64 75 72 69 6e 67 20 63 61 6c 6c 73 20 74 6f   during calls to
1ccb0 20 5b 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29   [sqlite3_step()
1ccc0 5d 29 2e 0a 20 20 5e 54 68 65 20 70 75 72 70 6f  ])..  ^The purpo
1ccd0 73 65 20 6f 66 20 74 68 65 20 75 6e 6c 69 6b 65  se of the unlike
1cce0 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69  ly(X) function i
1ccf0 73 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20 68  s to provide a h
1cd00 69 6e 74 0a 20 20 74 6f 20 74 68 65 20 71 75 65  int.  to the que
1cd10 72 79 20 70 6c 61 6e 6e 65 72 20 74 68 61 74 20  ry planner that 
1cd20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 58 20 69  the argument X i
1cd30 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  s a boolean valu
1cd40 65 0a 20 20 74 68 61 74 20 69 73 20 75 73 75 61  e.  that is usua
1cd50 6c 6c 79 20 6e 6f 74 20 74 72 75 65 2e 20 5e 28  lly not true. ^(
1cd60 54 68 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20  The unlikely(X) 
1cd70 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71 75 69  function is equi
1cd80 76 61 6c 65 6e 74 0a 20 20 74 6f 20 5b 6c 69 6b  valent.  to [lik
1cd90 65 6c 69 68 6f 6f 64 5d 28 58 2c 20 30 2e 30 36  elihood](X, 0.06
1cda0 32 35 29 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65  25).)^.}..funcde
1cdb0 66 20 7b 75 6e 69 63 6f 64 65 28 58 29 7d 20 7b  f {unicode(X)} {
1cdc0 7d 20 7b 0a 20 20 5e 54 68 65 20 75 6e 69 63 6f  } {.  ^The unico
1cdd0 64 65 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  de(X) function r
1cde0 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 65 72  eturns the numer
1cdf0 69 63 20 75 6e 69 63 6f 64 65 20 63 6f 64 65 20  ic unicode code 
1ce00 70 6f 69 6e 74 20 63 6f 72 72 65 73 70 6f 6e 64  point correspond
1ce10 69 6e 67 20 74 6f 0a 20 20 74 68 65 20 66 69 72  ing to.  the fir
1ce20 73 74 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  st character of 
1ce30 74 68 65 20 73 74 72 69 6e 67 20 58 2e 20 20 49  the string X.  I
1ce40 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74  f the argument t
1ce50 6f 20 75 6e 69 63 6f 64 65 28 58 29 20 69 73 20  o unicode(X) is 
1ce60 6e 6f 74 20 61 20 73 74 72 69 6e 67 0a 20 20 74  not a string.  t
1ce70 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
1ce80 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 7d 0a 0a  s undefined..}..
1ce90 66 75 6e 63 64 65 66 20 7b 75 70 70 65 72 28 58  funcdef {upper(X
1cea0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 75  )} {} {.  ^The u
1ceb0 70 70 65 72 28 58 29 20 66 75 6e 63 74 69 6f 6e  pper(X) function
1cec0 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20   returns a copy 
1ced0 6f 66 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20  of input string 
1cee0 58 20 69 6e 20 77 68 69 63 68 20 61 6c 6c 20 0a  X in which all .
1cef0 20 20 6c 6f 77 65 72 2d 63 61 73 65 20 41 53 43    lower-case ASC
1cf00 49 49 20 63 68 61 72 61 63 74 65 72 73 20 61 72  II characters ar
1cf10 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74  e converted to t
1cf20 68 65 69 72 20 75 70 70 65 72 2d 63 61 73 65 20  heir upper-case 
1cf30 65 71 75 69 76 61 6c 65 6e 74 2e 0a 7d 0a 0a 66  equivalent..}..f
1cf40 75 6e 63 64 65 66 20 7b 7a 65 72 6f 62 6c 6f 62  uncdef {zeroblob
1cf50 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (N)} {} {.  ^The
1cf60 20 7a 65 72 6f 62 6c 6f 62 28 4e 29 20 66 75 6e   zeroblob(N) fun
1cf70 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
1cf80 42 4c 4f 42 20 63 6f 6e 73 69 73 74 69 6e 67 20  BLOB consisting 
1cf90 6f 66 20 4e 20 62 79 74 65 73 20 6f 66 20 30 78  of N bytes of 0x
1cfa0 30 30 2e 0a 20 20 53 51 4c 69 74 65 20 6d 61 6e  00..  SQLite man
1cfb0 61 67 65 73 20 74 68 65 73 65 20 7a 65 72 6f 62  ages these zerob
1cfc0 6c 6f 62 73 20 76 65 72 79 20 65 66 66 69 63 69  lobs very effici
1cfd0 65 6e 74 6c 79 2e 20 20 5a 65 72 6f 62 6c 6f 62  ently.  Zeroblob
1cfe0 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  s can be used to
1cff0 0a 20 20 72 65 73 65 72 76 65 20 73 70 61 63 65  .  reserve space
1d000 20 66 6f 72 20 61 20 42 4c 4f 42 20 74 68 61 74   for a BLOB that
1d010 20 69 73 20 6c 61 74 65 72 20 77 72 69 74 74 65   is later writte
1d020 6e 20 75 73 69 6e 67 20 0a 20 20 5b 73 71 6c 69  n using .  [sqli
1d030 74 65 33 5f 62 6c 6f 62 5f 6f 70 65 6e 28 29 20  te3_blob_open() 
1d040 7c 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c  | incremental BL
1d050 4f 42 20 49 2f 4f 5d 2e 0a 20 20 5e 54 68 69 73  OB I/O]..  ^This
1d060 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73   SQL function is
1d070 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 75 73 69   implemented usi
1d080 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  ng the [sqlite3_
1d090 72 65 73 75 6c 74 5f 7a 65 72 6f 62 6c 6f 62 28  result_zeroblob(
1d0a0 29 5d 0a 20 20 72 6f 75 74 69 6e 65 20 66 72 6f  )].  routine fro
1d0b0 6d 20 74 68 65 20 43 2f 43 2b 2b 20 69 6e 74 65  m the C/C++ inte
1d0c0 72 66 61 63 65 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a  rface..}.</tcl>.
1d0d0 0a 3c 70 3e 54 68 65 20 63 6f 72 65 20 66 75 6e  .<p>The core fun
1d0e0 63 74 69 6f 6e 73 20 73 68 6f 77 6e 20 62 65 6c  ctions shown bel
1d0f0 6f 77 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  ow are available
1d100 20 62 79 20 64 65 66 61 75 6c 74 2e 20 0a 5b 64   by default. .[d
1d110 61 74 65 66 75 6e 63 20 7c 20 44 61 74 65 20 26  atefunc | Date &
1d120 61 6d 70 3b 20 54 69 6d 65 20 66 75 6e 63 74 69  amp; Time functi
1d130 6f 6e 73 5d 2c 0a 5b 61 67 67 66 75 6e 63 20 7c  ons],.[aggfunc |
1d140 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1d150 69 6f 6e 73 5d 2c 20 61 6e 64 0a 5b 6a 73 6f 6e  ions], and.[json
1d160 31 20 7c 20 4a 53 4f 4e 20 66 75 6e 63 74 69 6f  1 | JSON functio
1d170 6e 73 5d 20 61 72 65 20 64 6f 63 75 6d 65 6e 74  ns] are document
1d180 65 64 20 73 65 70 61 72 61 74 65 6c 79 2e 20 20  ed separately.  
1d190 41 6e 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d  An.application m
1d1a0 61 79 20 64 65 66 69 6e 65 20 61 64 64 69 74 69  ay define additi
1d1b0 6f 6e 61 6c 0a 66 75 6e 63 74 69 6f 6e 73 20 77  onal.functions w
1d1c0 72 69 74 74 65 6e 20 69 6e 20 43 20 61 6e 64 20  ritten in C and 
1d1d0 61 64 64 65 64 20 74 6f 20 74 68 65 20 64 61 74  added to the dat
1d1e0 61 62 61 73 65 20 65 6e 67 69 6e 65 20 75 73 69  abase engine usi
1d1f0 6e 67 0a 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  ng.the [sqlite3_
1d200 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
1d210 29 5d 20 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 74 63  )] API.</p>..<tc
1d220 6c 3e 0a 73 65 74 20 6c 78 20 7b 7d 0a 66 6f 72  l>.set lx {}.for
1d230 65 61 63 68 20 62 61 73 65 73 79 6e 74 61 78 20  each basesyntax 
1d240 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 63 6f 72  [array names cor
1d250 65 66 75 6e 63 73 65 74 5d 20 7b 0a 20 20 66 6f  efuncset] {.  fo
1d260 72 65 61 63 68 20 7b 73 79 6e 74 61 78 20 6b 65  reach {syntax ke
1d270 79 77 6f 72 64 73 20 64 65 73 63 7d 20 24 63 6f  ywords desc} $co
1d280 72 65 66 75 6e 63 73 65 74 28 24 62 61 73 65 73  refuncset($bases
1d290 79 6e 74 61 78 29 20 62 72 65 61 6b 0a 20 20 72  yntax) break.  r
1d2a0 65 67 65 78 70 20 7b 5e 5b 61 2d 7a 5f 5d 2b 7d  egexp {^[a-z_]+}
1d2b0 20 24 62 61 73 65 73 79 6e 74 61 78 20 66 72 61   $basesyntax fra
1d2c0 67 6d 65 6e 74 0a 20 20 66 6f 72 65 61 63 68 20  gment.  foreach 
1d2d0 63 6f 72 65 73 79 6e 74 61 78 20 24 73 79 6e 74  coresyntax $synt
1d2e0 61 78 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64  ax {.    lappend
1d2f0 20 6c 78 20 5b 6c 69 73 74 20 24 66 72 61 67 6d   lx [list $fragm
1d300 65 6e 74 20 24 63 6f 72 65 73 79 6e 74 61 78 20  ent $coresyntax 
1d310 30 5d 0a 20 20 7d 0a 7d 0a 68 64 5f 6c 69 73 74  0].  }.}.hd_list
1d320 5f 6f 66 5f 6c 69 6e 6b 73 20 7b 7d 20 32 32 35  _of_links {} 225
1d330 20 5b 6c 73 6f 72 74 20 2d 69 6e 64 65 78 20 31   [lsort -index 1
1d340 20 24 6c 78 5d 0a 0a 68 64 5f 70 75 74 73 6e 6c   $lx]..hd_putsnl
1d350 20 22 3c 68 72 20 63 6c 61 73 73 3d 27 78 68 72   "<hr class='xhr
1d360 27 3e 22 0a 68 64 5f 70 75 74 73 6e 6c 20 22 3c  '>".hd_putsnl "<
1d370 64 6c 3e 22 0a 66 6f 72 65 61 63 68 20 62 61 73  dl>".foreach bas
1d380 65 73 79 6e 74 61 78 20 5b 6c 73 6f 72 74 20 5b  esyntax [lsort [
1d390 61 72 72 61 79 20 6e 61 6d 65 73 20 63 6f 72 65  array names core
1d3a0 66 75 6e 63 73 65 74 5d 5d 20 7b 0a 20 20 66 6f  funcset]] {.  fo
1d3b0 72 65 61 63 68 20 7b 73 79 6e 74 61 78 20 6b 65  reach {syntax ke
1d3c0 79 77 6f 72 64 73 20 64 65 73 63 7d 20 24 63 6f  ywords desc} $co
1d3d0 72 65 66 75 6e 63 73 65 74 28 24 62 61 73 65 73  refuncset($bases
1d3e0 79 6e 74 61 78 29 20 62 72 65 61 6b 0a 20 20 72  yntax) break.  r
1d3f0 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 73 2b 7d  egsub -all {\s+}
1d400 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 73   [string trim $s
1d410 79 6e 74 61 78 5d 20 7b 3c 62 72 20 2f 3e 7d 20  yntax] {<br />} 
1d420 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20  syntax.  regsub 
1d430 2d 61 6c 6c 20 7b 5c 28 28 5b 5e 2a 29 5d 2b 29  -all {\(([^*)]+)
1d440 5c 29 7d 20 24 73 79 6e 74 61 78 20 7b 28 3c 69  \)} $syntax {(<i
1d450 3e 5c 31 3c 2f 69 3e 29 7d 20 73 79 6e 74 61 78  >\1</i>)} syntax
1d460 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  .  regsub -all {
1d470 2c 7d 20 24 73 79 6e 74 61 78 20 7b 3c 2f 69 3e  ,} $syntax {</i>
1d480 2c 3c 69 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72  ,<i>} syntax.  r
1d490 65 67 73 75 62 20 2d 61 6c 6c 20 7b 3c 69 3e 5c  egsub -all {<i>\
1d4a0 2e 5c 2e 5c 2e 3c 2f 69 3e 7d 20 24 73 79 6e 74  .\.\.</i>} $synt
1d4b0 61 78 20 7b 2e 2e 2e 7d 20 73 79 6e 74 61 78 0a  ax {...} syntax.
1d4c0 20 20 72 65 67 65 78 70 20 7b 5e 5b 61 2d 7a 5d    regexp {^[a-z]
1d4d0 2b 7d 20 24 62 61 73 65 73 79 6e 74 61 78 20 66  +} $basesyntax f
1d4e0 72 61 67 6d 65 6e 74 0a 20 20 69 66 20 7b 5b 6c  ragment.  if {[l
1d4f0 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72 64 73  length $keywords
1d500 5d 3d 3d 30 7d 20 7b 0a 20 20 20 20 72 65 67 65  ]==0} {.    rege
1d510 78 70 20 7b 5b 61 2d 7a 5f 5d 2b 7d 20 24 73 79  xp {[a-z_]+} $sy
1d520 6e 74 61 78 20 6e 61 6d 65 0a 20 20 20 20 68 64  ntax name.    hd
1d530 5f 66 72 61 67 6d 65 6e 74 20 24 6e 61 6d 65 20  _fragment $name 
1d540 2a 24 6e 61 6d 65 20 22 24 7b 6e 61 6d 65 7d 28  *$name "${name}(
1d550 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 22 0a  ) SQL function".
1d560 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 73    } else {.    s
1d570 65 74 20 66 72 61 67 6e 61 6d 65 20 5b 6c 69 6e  et fragname [lin
1d580 64 65 78 20 24 6b 65 79 77 6f 72 64 73 20 30 5d  dex $keywords 0]
1d590 0a 20 20 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  .    regsub -all
1d5a0 20 7b 5b 5e 61 2d 7a 5d 7d 20 24 66 72 61 67 6e   {[^a-z]} $fragn
1d5b0 61 6d 65 20 7b 7d 20 66 72 61 67 6e 61 6d 65 0a  ame {} fragname.
1d5c0 20 20 20 20 68 64 5f 66 72 61 67 6d 65 6e 74 20      hd_fragment 
1d5d0 24 66 72 61 67 6e 61 6d 65 0a 20 20 20 20 65 76  $fragname.    ev
1d5e0 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73 20 5b  al hd_keywords [
1d5f0 73 74 72 69 6e 67 20 6d 61 70 20 7b 5c 6e 20 7b  string map {\n {
1d600 20 7d 7d 20 24 6b 65 79 77 6f 72 64 73 5d 0a 20   }} $keywords]. 
1d610 20 7d 0a 20 20 68 64 5f 70 75 74 73 20 22 3c 64   }.  hd_puts "<d
1d620 74 3e 3c 70 3e 3c 62 3e 24 73 79 6e 74 61 78 3c  t><p><b>$syntax<
1d630 2f 62 3e 3c 2f 64 74 3e 22 0a 20 20 68 64 5f 72  /b></dt>".  hd_r
1d640 65 73 6f 6c 76 65 20 22 3c 64 64 3e 3c 70 3e 24  esolve "<dd><p>$
1d650 64 65 73 63 3c 2f 64 64 3e 5c 6e 22 0a 7d 0a 68  desc</dd>\n".}.h
1d660 64 5f 70 75 74 73 6e 6c 20 22 3c 2f 64 6c 3e 22  d_putsnl "</dl>"
1d670 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
1d680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d690 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d6a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d6b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d6c0 0a 53 65 63 74 69 6f 6e 20 7b 44 61 74 65 20 41  .Section {Date A
1d6d0 6e 64 20 54 69 6d 65 20 46 75 6e 63 74 69 6f 6e  nd Time Function
1d6e0 73 7d 20 64 61 74 65 66 75 6e 63 20 7b 2a 64 61  s} datefunc {*da
1d6f0 74 65 66 75 6e 63 20 7b 64 61 74 65 20 61 6e 64  tefunc {date and
1d700 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 7d   time functions}
1d710 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 64  }.hd_keywords {d
1d720 61 74 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69  ate() SQL functi
1d730 6f 6e 7d 20 7b 74 69 6d 65 28 29 20 53 51 4c 20  on} {time() SQL 
1d740 66 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79  function}.hd_key
1d750 77 6f 72 64 73 20 7b 64 61 74 65 74 69 6d 65 28  words {datetime(
1d760 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20  ) SQL function} 
1d770 7b 6a 75 6c 69 61 6e 64 61 79 28 29 20 53 51 4c  {julianday() SQL
1d780 20 66 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65   function}.hd_ke
1d790 79 77 6f 72 64 73 20 7b 73 74 72 66 74 69 6d 65  ywords {strftime
1d7a0 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d  () SQL function}
1d7b0 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 53 51 4c  .</tcl>..<p>.SQL
1d7c0 69 74 65 20 73 75 70 70 6f 72 74 73 20 66 69 76  ite supports fiv
1d7d0 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  e date and time 
1d7e0 66 75 6e 63 74 69 6f 6e 73 20 61 73 20 66 6f 6c  functions as fol
1d7f0 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  lows:.</p>..<p>.
1d800 3c 6f 6c 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64  <ol>.<li> ^(<b>d
1d810 61 74 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73  ate(</b><i>times
1d820 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c  tring, modifier,
1d830 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f   modifier, ...</
1d840 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c  i><b>)</b>)^ </l
1d850 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 74 69 6d  i>.<li> ^(<b>tim
1d860 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72  e(</b><i>timestr
1d870 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d  ing, modifier, m
1d880 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e  odifier, ...</i>
1d890 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e  <b>)</b>)^ </li>
1d8a0 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65 74  .<li> ^(<b>datet
1d8b0 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73  ime(</b><i>times
1d8c0 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c  tring, modifier,
1d8d0 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f   modifier, ...</
1d8e0 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c  i><b>)</b>)^ </l
1d8f0 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 6a 75 6c  i>.<li> ^(<b>jul
1d900 69 61 6e 64 61 79 28 3c 2f 62 3e 3c 69 3e 74 69  ianday(</b><i>ti
1d910 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69  mestring, modifi
1d920 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e  er, modifier, ..
1d930 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20  .</i><b>)</b>)^ 
1d940 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e  </li>.<li> ^(<b>
1d950 73 74 72 66 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e  strftime(</b><i>
1d960 66 6f 72 6d 61 74 2c 20 74 69 6d 65 73 74 72 69  format, timestri
1d970 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f  ng, modifier, mo
1d980 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c  difier, ...</i><
1d990 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a  b>)</b>)^ </li>.
1d9a0 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 0a 5e 41 6c 6c 20  </ol>..<p>.^All 
1d9b0 66 69 76 65 20 64 61 74 65 20 61 6e 64 20 74 69  five date and ti
1d9c0 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 74 61 6b  me functions tak
1d9d0 65 20 61 20 74 69 6d 65 20 73 74 72 69 6e 67 20  e a time string 
1d9e0 61 73 20 61 6e 20 61 72 67 75 6d 65 6e 74 2e 20  as an argument. 
1d9f0 0a 5e 54 68 65 20 74 69 6d 65 20 73 74 72 69 6e  .^The time strin
1da00 67 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79  g is followed by
1da10 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f   zero or more mo
1da20 64 69 66 69 65 72 73 2e 20 0a 5e 54 68 65 20 73  difiers. .^The s
1da30 74 72 66 74 69 6d 65 28 29 20 66 75 6e 63 74 69  trftime() functi
1da40 6f 6e 20 61 6c 73 6f 20 74 61 6b 65 73 20 61 20  on also takes a 
1da50 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 61 73  format string as
1da60 20 69 74 73 20 66 69 72 73 74 20 61 72 67 75 6d   its first argum
1da70 65 6e 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54  ent..</p>..<p>.T
1da80 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  he date and time
1da90 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 61   functions use a
1daa0 20 73 75 62 73 65 74 20 6f 66 0a 5b 68 74 74 70   subset of.[http
1dab0 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e  ://en.wikipedia.
1dac0 6f 72 67 2f 77 69 6b 69 2f 49 53 4f 5f 38 36 30  org/wiki/ISO_860
1dad0 31 20 7c 20 49 53 30 2d 38 36 30 31 5d 20 64 61  1 | IS0-8601] da
1dae0 74 65 20 61 6e 64 20 74 69 6d 65 0a 66 6f 72 6d  te and time.form
1daf0 61 74 73 2e 0a 5e 54 68 65 20 64 61 74 65 28 29  ats..^The date()
1db00 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1db10 73 20 74 68 65 20 64 61 74 65 20 69 6e 20 74 68  s the date in th
1db20 69 73 20 66 6f 72 6d 61 74 3a 20 59 59 59 59 2d  is format: YYYY-
1db30 4d 4d 2d 44 44 2e 20 0a 5e 54 68 65 20 74 69 6d  MM-DD. .^The tim
1db40 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  e() function ret
1db50 75 72 6e 73 20 74 68 65 20 74 69 6d 65 20 61 73  urns the time as
1db60 20 48 48 3a 4d 4d 3a 53 53 2e 20 0a 5e 54 68 65   HH:MM:SS. .^The
1db70 20 64 61 74 65 74 69 6d 65 28 29 20 66 75 6e 63   datetime() func
1db80 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 22 59 59  tion returns "YY
1db90 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53  YY-MM-DD HH:MM:S
1dba0 53 22 2e 20 0a 5e 28 54 68 65 20 6a 75 6c 69 61  S". .^(The julia
1dbb0 6e 64 61 79 28 29 20 66 75 6e 63 74 69 6f 6e 20  nday() function 
1dbc0 72 65 74 75 72 6e 73 20 74 68 65 20 0a 5b 68 74  returns the .[ht
1dbd0 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69  tp://en.wikipedi
1dbe0 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61  a.org/wiki/Julia
1dbf0 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64  n_day | Julian d
1dc00 61 79 5d 20 2d 20 74 68 65 0a 6e 75 6d 62 65 72  ay] - the.number
1dc10 20 6f 66 20 64 61 79 73 20 73 69 6e 63 65 20 6e   of days since n
1dc20 6f 6f 6e 20 69 6e 20 47 72 65 65 6e 77 69 63 68  oon in Greenwich
1dc30 20 6f 6e 20 4e 6f 76 65 6d 62 65 72 20 32 34 2c   on November 24,
1dc40 20 34 37 31 34 20 42 2e 43 2e 20 0a 28 5b 68 74   4714 B.C. .([ht
1dc50 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69  tp://en.wikipedi
1dc60 61 2e 6f 72 67 2f 77 69 6b 69 2f 50 72 6f 6c 65  a.org/wiki/Prole
1dc70 70 74 69 63 5f 47 72 65 67 6f 72 69 61 6e 5f 63  ptic_Gregorian_c
1dc80 61 6c 65 6e 64 61 72 20 7c 20 50 72 6f 6c 65 70  alendar | Prolep
1dc90 74 69 63 20 47 72 65 67 6f 72 69 61 6e 20 63 61  tic Gregorian ca
1dca0 6c 65 6e 64 61 72 5d 29 2e 29 5e 0a 5e 54 68 65  lendar]).)^.^The
1dcb0 20 73 74 72 66 74 69 6d 65 28 29 20 72 6f 75 74   strftime() rout
1dcc0 69 6e 65 20 72 65 74 75 72 6e 73 20 74 68 65 20  ine returns the 
1dcd0 64 61 74 65 20 66 6f 72 6d 61 74 74 65 64 20 61  date formatted a
1dce0 63 63 6f 72 64 69 6e 67 20 74 6f 20 0a 74 68 65  ccording to .the
1dcf0 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73   format string s
1dd00 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20  pecified as the 
1dd10 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a  first argument..
1dd20 5e 54 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69  ^The format stri
1dd30 6e 67 20 73 75 70 70 6f 72 74 73 20 74 68 65 20  ng supports the 
1dd40 6d 6f 73 74 20 63 6f 6d 6d 6f 6e 20 73 75 62 73  most common subs
1dd50 74 69 74 75 74 69 6f 6e 73 20 66 6f 75 6e 64 20  titutions found 
1dd60 69 6e 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f  in the .[http://
1dd70 6f 70 65 6e 67 72 6f 75 70 2e 6f 72 67 2f 6f 6e  opengroup.org/on
1dd80 6c 69 6e 65 70 75 62 73 2f 30 30 37 39 30 38 37  linepubs/0079087
1dd90 39 39 2f 78 73 68 2f 73 74 72 66 74 69 6d 65 2e  99/xsh/strftime.
1dda0 68 74 6d 6c 20 7c 20 73 74 72 66 74 69 6d 65 28  html | strftime(
1ddb0 29 20 66 75 6e 63 74 69 6f 6e 5d 0a 66 72 6f 6d  ) function].from
1ddc0 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20   the standard C 
1ddd0 6c 69 62 72 61 72 79 20 70 6c 75 73 20 74 77 6f  library plus two
1dde0 20 6e 65 77 20 73 75 62 73 74 69 74 75 74 69 6f   new substitutio
1ddf0 6e 73 2c 20 25 66 20 61 6e 64 20 25 4a 2e 0a 5e  ns, %f and %J..^
1de00 28 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69  (The following i
1de10 73 20 61 20 63 6f 6d 70 6c 65 74 65 20 6c 69 73  s a complete lis
1de20 74 20 6f 66 20 76 61 6c 69 64 20 73 74 72 66 74  t of valid strft
1de30 69 6d 65 28 29 20 73 75 62 73 74 69 74 75 74 69  ime() substituti
1de40 6f 6e 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  ons:.</p>..<bloc
1de50 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62  kquote>.<table b
1de60 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c 70 61  order="0" cellpa
1de70 64 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70  dding="0" cellsp
1de80 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c  acing="0">.<tr><
1de90 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 31 30  td><td width="10
1dea0 22 3e 3c 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72  "><td></tr>..<tr
1deb0 3e 3c 74 64 3e 20 25 64 20 3c 74 64 3e 3c 74 64  ><td> %d <td><td
1dec0 3e 20 64 61 79 20 6f 66 20 6d 6f 6e 74 68 3a 20  > day of month: 
1ded0 30 30 0a 3c 74 72 3e 3c 74 64 3e 20 25 66 20 3c  00.<tr><td> %f <
1dee0 74 64 3e 3c 74 64 3e 20 66 72 61 63 74 69 6f 6e  td><td> fraction
1def0 61 6c 20 73 65 63 6f 6e 64 73 3a 20 53 53 2e 53  al seconds: SS.S
1df00 53 53 0a 3c 74 72 3e 3c 74 64 3e 20 25 48 20 3c  SS.<tr><td> %H <
1df10 74 64 3e 3c 74 64 3e 20 68 6f 75 72 3a 20 30 30  td><td> hour: 00
1df20 2d 32 34 20 0a 3c 74 72 3e 3c 74 64 3e 20 25 6a  -24 .<tr><td> %j
1df30 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66   <td><td> day of
1df40 20 79 65 61 72 3a 20 30 30 31 2d 33 36 36 0a 3c   year: 001-366.<
1df50 74 72 3e 3c 74 64 3e 20 25 4a 20 3c 74 64 3e 3c  tr><td> %J <td><
1df60 74 64 3e 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e  td> Julian day n
1df70 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 3e 20 25  umber.<tr><td> %
1df80 6d 20 3c 74 64 3e 3c 74 64 3e 20 6d 6f 6e 74 68  m <td><td> month
1df90 3a 20 30 31 2d 31 32 0a 3c 74 72 3e 3c 74 64 3e  : 01-12.<tr><td>
1dfa0 20 25 4d 20 3c 74 64 3e 3c 74 64 3e 20 6d 69 6e   %M <td><td> min
1dfb0 75 74 65 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c  ute: 00-59.<tr><
1dfc0 74 64 3e 20 25 73 20 3c 74 64 3e 3c 74 64 3e 20  td> %s <td><td> 
1dfd0 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39  seconds since 19
1dfe0 37 30 2d 30 31 2d 30 31 0a 3c 74 72 3e 3c 74 64  70-01-01.<tr><td
1dff0 3e 20 25 53 20 3c 74 64 3e 3c 74 64 3e 20 73 65  > %S <td><td> se
1e000 63 6f 6e 64 73 3a 20 30 30 2d 35 39 0a 3c 74 72  conds: 00-59.<tr
1e010 3e 3c 74 64 3e 20 25 77 20 3c 74 64 3e 3c 74 64  ><td> %w <td><td
1e020 3e 20 64 61 79 20 6f 66 20 77 65 65 6b 20 30 2d  > day of week 0-
1e030 36 20 77 69 74 68 20 53 75 6e 64 61 79 3d 3d 30  6 with Sunday==0
1e040 0a 3c 74 72 3e 3c 74 64 3e 20 25 57 20 3c 74 64  .<tr><td> %W <td
1e050 3e 3c 74 64 3e 20 77 65 65 6b 20 6f 66 20 79 65  ><td> week of ye
1e060 61 72 3a 20 30 30 2d 35 33 0a 3c 74 72 3e 3c 74  ar: 00-53.<tr><t
1e070 64 3e 20 25 59 20 3c 74 64 3e 3c 74 64 3e 20 79  d> %Y <td><td> y
1e080 65 61 72 3a 20 30 30 30 30 2d 39 39 39 39 0a 3c  ear: 0000-9999.<
1e090 74 72 3e 3c 74 64 3e 20 25 25 20 3c 74 64 3e 3c  tr><td> %% <td><
1e0a0 74 64 3e 20 25 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  td> %.</table>.<
1e0b0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
1e0c0 3c 70 3e 0a 5e 28 4e 6f 74 69 63 65 20 74 68 61  <p>.^(Notice tha
1e0d0 74 20 61 6c 6c 20 6f 74 68 65 72 20 64 61 74 65  t all other date
1e0e0 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69   and time functi
1e0f0 6f 6e 73 20 63 61 6e 20 62 65 20 65 78 70 72 65  ons can be expre
1e100 73 73 65 64 0a 69 6e 20 74 65 72 6d 73 20 6f 66  ssed.in terms of
1e110 20 73 74 72 66 74 69 6d 65 28 29 3a 0a 3c 2f 70   strftime():.</p
1e120 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
1e130 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 30  <table border="0
1e140 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30  " cellpadding="0
1e150 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30  " cellspacing="0
1e160 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 62 3e 46 75  ">.<tr><td><b>Fu
1e170 6e 63 74 69 6f 6e 3c 2f 62 3e 3c 74 64 20 77 69  nction</b><td wi
1e180 64 74 68 3d 22 33 30 22 3e 3c 74 64 3e 3c 62 3e  dth="30"><td><b>
1e190 45 71 75 69 76 61 6c 65 6e 74 20 73 74 72 66 74  Equivalent strft
1e1a0 69 6d 65 28 29 3c 2f 62 3e 0a 3c 74 72 3e 3c 74  ime()</b>.<tr><t
1e1b0 64 3e 20 20 20 64 61 74 65 28 2e 2e 2e 29 20 20  d>   date(...)  
1e1c0 20 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74      <td><td>  st
1e1d0 72 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64  rftime('%Y-%m-%d
1e1e0 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e  ', ...).<tr><td>
1e1f0 20 20 20 74 69 6d 65 28 2e 2e 2e 29 20 20 20 20     time(...)    
1e200 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66    <td><td>  strf
1e210 74 69 6d 65 28 27 25 48 3a 25 4d 3a 25 53 27 2c  time('%H:%M:%S',
1e220 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20   ...).<tr><td>  
1e230 20 64 61 74 65 74 69 6d 65 28 2e 2e 2e 29 20 20   datetime(...)  
1e240 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69  <td><td>  strfti
1e250 6d 65 28 27 25 59 2d 25 6d 2d 25 64 20 25 48 3a  me('%Y-%m-%d %H:
1e260 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74 72  %M:%S', ...).<tr
1e270 3e 3c 74 64 3e 20 20 20 6a 75 6c 69 61 6e 64 61  ><td>   julianda
1e280 79 28 2e 2e 2e 29 20 3c 74 64 3e 3c 74 64 3e 20  y(...) <td><td> 
1e290 20 73 74 72 66 74 69 6d 65 28 27 25 4a 27 2c 20   strftime('%J', 
1e2a0 2e 2e 2e 29 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  ...).</table>.</
1e2b0 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
1e2c0 70 3e 0a 54 68 65 20 6f 6e 6c 79 20 72 65 61 73  p>.The only reas
1e2d0 6f 6e 73 20 66 6f 72 20 70 72 6f 76 69 64 69 6e  ons for providin
1e2e0 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f 74 68 65  g functions othe
1e2f0 72 20 74 68 61 6e 20 73 74 72 66 74 69 6d 65 28  r than strftime(
1e300 29 20 69 73 0a 66 6f 72 20 63 6f 6e 76 65 6e 69  ) is.for conveni
1e310 65 6e 63 65 20 61 6e 64 20 66 6f 72 20 65 66 66  ence and for eff
1e320 69 63 69 65 6e 63 79 2e 0a 3c 2f 70 3e 0a 0a 3c  iciency..</p>..<
1e330 68 33 3e 54 69 6d 65 20 53 74 72 69 6e 67 73 3c  h3>Time Strings<
1e340 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 74 69 6d  /h3>..<p>^(A tim
1e350 65 20 73 74 72 69 6e 67 20 63 61 6e 20 62 65 20  e string can be 
1e360 69 6e 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f  in any of the fo
1e370 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 73 3a  llowing formats:
1e380 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20  </p>..<ol>.<li> 
1e390 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69  <i>YYYY-MM-DD</i
1e3a0 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d  >.<li> <i>YYYY-M
1e3b0 4d 2d 44 44 20 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c  M-DD HH:MM</i>.<
1e3c0 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44  li> <i>YYYY-MM-D
1e3d0 44 20 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c  D HH:MM:SS</i>.<
1e3e0 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44  li> <i>YYYY-MM-D
1e3f0 44 20 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f  D HH:MM:SS.SSS</
1e400 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d  i>.<li> <i>YYYY-
1e410 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62  MM-DD</i><b>T</b
1e420 3e 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c  ><i>HH:MM</i>.<l
1e430 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44  i> <i>YYYY-MM-DD
1e440 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48  </i><b>T</b><i>H
1e450 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e  H:MM:SS</i>.<li>
1e460 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f   <i>YYYY-MM-DD</
1e470 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a  i><b>T</b><i>HH:
1e480 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c  MM:SS.SSS</i>.<l
1e490 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a  i> <i>HH:MM</i>.
1e4a0 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53  <li> <i>HH:MM:SS
1e4b0 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a  </i>.<li> <i>HH:
1e4c0 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c  MM:SS.SSS</i>.<l
1e4d0 69 3e 20 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a 3c 6c  i> <b>now</b>.<l
1e4e0 69 3e 20 3c 69 3e 44 44 44 44 44 44 44 44 44 44  i> <i>DDDDDDDDDD
1e4f0 3c 2f 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70  </i>.</ol>)^..<p
1e500 3e 0a 5e 49 6e 20 66 6f 72 6d 61 74 73 20 35 20  >.^In formats 5 
1e510 74 68 72 6f 75 67 68 20 37 2c 20 74 68 65 20 22  through 7, the "
1e520 54 22 20 69 73 20 61 20 6c 69 74 65 72 61 6c 20  T" is a literal 
1e530 63 68 61 72 61 63 74 65 72 20 73 65 70 61 72 61  character separa
1e540 74 69 6e 67 20 0a 74 68 65 20 64 61 74 65 20 61  ting .the date a
1e550 6e 64 20 74 68 65 20 74 69 6d 65 2c 20 61 73 20  nd the time, as 
1e560 72 65 71 75 69 72 65 64 20 62 79 20 0a 5b 68 74  required by .[ht
1e570 74 70 3a 2f 2f 77 77 77 2e 77 33 63 2e 6f 72 67  tp://www.w3c.org
1e580 2f 54 52 2f 4e 4f 54 45 2d 64 61 74 65 74 69 6d  /TR/NOTE-datetim
1e590 65 20 7c 20 49 53 4f 2d 38 36 30 31 5d 2e 20 0a  e | ISO-8601]. .
1e5a0 5e 46 6f 72 6d 61 74 73 20 38 20 74 68 72 6f 75  ^Formats 8 throu
1e5b0 67 68 20 31 30 20 74 68 61 74 20 73 70 65 63 69  gh 10 that speci
1e5c0 66 79 20 6f 6e 6c 79 20 61 20 74 69 6d 65 20 61  fy only a time a
1e5d0 73 73 75 6d 65 20 61 20 64 61 74 65 20 6f 66 20  ssume a date of 
1e5e0 0a 32 30 30 30 2d 30 31 2d 30 31 2e 20 46 6f 72  .2000-01-01. For
1e5f0 6d 61 74 20 31 31 2c 20 74 68 65 20 73 74 72 69  mat 11, the stri
1e600 6e 67 20 27 6e 6f 77 27 2c 20 69 73 20 63 6f 6e  ng 'now', is con
1e610 76 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20  verted into the 
1e620 0a 63 75 72 72 65 6e 74 20 64 61 74 65 20 61 6e  .current date an
1e630 64 20 74 69 6d 65 20 61 73 20 6f 62 74 61 69 6e  d time as obtain
1e640 65 64 20 66 72 6f 6d 20 74 68 65 20 78 43 75 72  ed from the xCur
1e650 72 65 6e 74 54 69 6d 65 20 6d 65 74 68 6f 64 0a  rentTime method.
1e660 6f 66 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  of the [sqlite3_
1e670 76 66 73 5d 20 6f 62 6a 65 63 74 20 69 6e 20 75  vfs] object in u
1e680 73 65 2e 0a 5e 54 68 65 20 27 6e 6f 77 27 20 61  se..^The 'now' a
1e690 72 67 75 6d 65 6e 74 20 74 6f 20 64 61 74 65 20  rgument to date 
1e6a0 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f  and time functio
1e6b0 6e 73 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e  ns always return
1e6c0 73 20 65 78 61 63 74 6c 79 20 74 68 65 0a 73 61  s exactly the.sa
1e6d0 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 6d 75 6c  me value for mul
1e6e0 74 69 70 6c 65 20 69 6e 76 6f 63 61 74 69 6f 6e  tiple invocation
1e6f0 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  s within the sam
1e700 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 65 70 28  e [sqlite3_step(
1e710 29 5d 20 63 61 6c 6c 2e 0a 5e 5b 68 74 74 70 3a  )] call..^[http:
1e720 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
1e730 72 67 2f 77 69 6b 69 2f 43 6f 6f 72 64 69 6e 61  rg/wiki/Coordina
1e740 74 65 64 5f 55 6e 69 76 65 72 73 61 6c 5f 54 69  ted_Universal_Ti
1e750 6d 65 20 7c 20 55 6e 69 76 65 72 73 61 6c 20 43  me | Universal C
1e760 6f 6f 72 64 69 6e 61 74 65 64 20 54 69 6d 65 20  oordinated Time 
1e770 28 55 54 43 29 5d 20 69 73 20 75 73 65 64 2e 20  (UTC)] is used. 
1e780 0a 5e 46 6f 72 6d 61 74 20 31 32 20 69 73 20 74  .^Format 12 is t
1e790 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77  he .[http://en.w
1e7a0 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b  ikipedia.org/wik
1e7b0 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 20 7c 20 4a  i/Julian_day | J
1e7c0 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72  ulian day number
1e7d0 5d 0a 65 78 70 72 65 73 73 65 64 20 61 73 20 61  ].expressed as a
1e7e0 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
1e7f0 76 61 6c 75 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  value..</p>..<p>
1e800 0a 46 6f 72 6d 61 74 73 20 32 20 74 68 72 6f 75  .Formats 2 throu
1e810 67 68 20 31 30 20 6d 61 79 20 62 65 20 6f 70 74  gh 10 may be opt
1e820 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64  ionally followed
1e830 20 62 79 20 61 20 74 69 6d 65 7a 6f 6e 65 20 69   by a timezone i
1e840 6e 64 69 63 61 74 6f 72 20 6f 66 20 74 68 65 20  ndicator of the 
1e850 66 6f 72 6d 0a 22 3c 69 3e 26 23 39 31 3b 2b 2d  form."<i>&#91;+-
1e860 26 23 39 33 3b 48 48 3a 4d 4d 3c 2f 69 3e 22 20  &#93;HH:MM</i>" 
1e870 6f 72 20 6a 75 73 74 20 22 3c 69 3e 5a 3c 2f 69  or just "<i>Z</i
1e880 3e 22 2e 20 20 54 68 65 20 64 61 74 65 20 61 6e  >".  The date an
1e890 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  d time functions
1e8a0 20 75 73 65 20 55 54 43 20 6f 72 20 22 7a 75 6c   use UTC or "zul
1e8b0 75 22 0a 74 69 6d 65 20 69 6e 74 65 72 6e 61 6c  u".time internal
1e8c0 6c 79 2c 20 61 6e 64 20 73 6f 20 74 68 65 20 22  ly, and so the "
1e8d0 5a 22 20 73 75 66 66 69 78 20 69 73 20 61 20 6e  Z" suffix is a n
1e8e0 6f 2d 6f 70 2e 20 20 41 6e 79 20 6e 6f 6e 2d 7a  o-op.  Any non-z
1e8f0 65 72 6f 20 22 48 48 3a 4d 4d 22 20 73 75 66 66  ero "HH:MM" suff
1e900 69 78 20 69 73 0a 73 75 62 74 72 61 63 74 65 64  ix is.subtracted
1e910 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 69 63 61   from the indica
1e920 74 65 64 20 64 61 74 65 20 61 6e 64 20 74 69 6d  ted date and tim
1e930 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f  e in order to co
1e940 6d 70 75 74 65 20 7a 75 6c 75 20 74 69 6d 65 2e  mpute zulu time.
1e950 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 6c  .For example, al
1e960 6c 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  l of the followi
1e970 6e 67 20 74 69 6d 65 20 73 74 72 69 6e 67 73 20  ng time strings 
1e980 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74 3a 0a  are equivalent:.
1e990 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
1e9a0 65 3e 0a 32 30 31 33 2d 31 30 2d 30 37 20 30 38  e>.2013-10-07 08
1e9b0 3a 32 33 3a 31 39 2e 31 32 30 3c 62 72 3e 0a 32  :23:19.120<br>.2
1e9c0 30 31 33 2d 31 30 2d 30 37 54 30 38 3a 32 33 3a  013-10-07T08:23:
1e9d0 31 39 2e 31 32 30 5a 3c 62 72 3e 0a 32 30 31 33  19.120Z<br>.2013
1e9e0 2d 31 30 2d 30 37 20 30 34 3a 32 33 3a 31 39 2e  -10-07 04:23:19.
1e9f0 31 32 30 2d 30 34 3a 30 30 3c 62 72 3e 0a 32 34  120-04:00<br>.24
1ea00 35 36 35 37 32 2e 38 34 39 35 32 36 38 35 0a 3c  56572.84952685.<
1ea10 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
1ea20 3e 0a 5e 28 49 6e 20 66 6f 72 6d 61 74 73 20 34  >.^(In formats 4
1ea30 2c 20 37 2c 20 61 6e 64 20 31 30 2c 20 74 68 65  , 7, and 10, the
1ea40 20 66 72 61 63 74 69 6f 6e 61 6c 20 73 65 63 6f   fractional seco
1ea50 6e 64 73 20 76 61 6c 75 65 20 53 53 2e 53 53 53  nds value SS.SSS
1ea60 20 63 61 6e 20 68 61 76 65 0a 6f 6e 65 20 6f 72   can have.one or
1ea70 20 6d 6f 72 65 20 64 69 67 69 74 73 20 66 6f 6c   more digits fol
1ea80 6c 6f 77 69 6e 67 20 74 68 65 20 64 65 63 69 6d  lowing the decim
1ea90 61 6c 20 70 6f 69 6e 74 2e 20 20 45 78 61 63 74  al point.  Exact
1eaa0 6c 79 20 74 68 72 65 65 20 64 69 67 69 74 73 20  ly three digits 
1eab0 61 72 65 0a 73 68 6f 77 6e 20 69 6e 20 74 68 65  are.shown in the
1eac0 20 65 78 61 6d 70 6c 65 73 20 62 65 63 61 75 73   examples becaus
1ead0 65 20 6f 6e 6c 79 20 74 68 65 20 66 69 72 73 74  e only the first
1eae0 20 74 68 72 65 65 20 64 69 67 69 74 73 20 61 72   three digits ar
1eaf0 65 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 74 6f  e significant.to
1eb00 20 74 68 65 20 72 65 73 75 6c 74 2c 20 62 75 74   the result, but
1eb10 20 74 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e   the input strin
1eb20 67 20 63 61 6e 20 68 61 76 65 20 66 65 77 65 72  g can have fewer
1eb30 20 6f 72 20 6d 6f 72 65 20 74 68 61 6e 20 74 68   or more than th
1eb40 72 65 65 20 64 69 67 69 74 73 0a 61 6e 64 20 74  ree digits.and t
1eb50 68 65 20 64 61 74 65 2f 74 69 6d 65 20 66 75 6e  he date/time fun
1eb60 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73 74 69 6c  ctions will stil
1eb70 6c 20 6f 70 65 72 61 74 65 20 63 6f 72 72 65 63  l operate correc
1eb80 74 6c 79 2e 29 5e 0a 53 69 6d 69 6c 61 72 6c 79  tly.)^.Similarly
1eb90 2c 20 66 6f 72 6d 61 74 20 31 32 20 69 73 20 73  , format 12 is s
1eba0 68 6f 77 6e 20 77 69 74 68 20 31 30 20 73 69 67  hown with 10 sig
1ebb0 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74 73 2c  nificant digits,
1ebc0 20 62 75 74 20 74 68 65 20 64 61 74 65 2f 74 69   but the date/ti
1ebd0 6d 65 0a 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c  me.functions wil
1ebe0 6c 20 72 65 61 6c 6c 79 20 61 63 63 65 70 74 20  l really accept 
1ebf0 61 73 20 6d 61 6e 79 20 6f 72 20 61 73 20 66 65  as many or as fe
1ec00 77 20 64 69 67 69 74 73 20 61 73 20 61 72 65 20  w digits as are 
1ec10 6e 65 63 65 73 73 61 72 79 20 74 6f 0a 72 65 70  necessary to.rep
1ec20 72 65 73 65 6e 74 20 74 68 65 20 4a 75 6c 69 61  resent the Julia
1ec30 6e 20 64 61 79 20 6e 75 6d 62 65 72 2e 0a 3c 2f  n day number..</
1ec40 70 3e 0a 0a 3c 68 33 3e 4d 6f 64 69 66 69 65 72  p>..<h3>Modifier
1ec50 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20  s</h3>..<p>^The 
1ec60 74 69 6d 65 20 73 74 72 69 6e 67 20 63 61 6e 20  time string can 
1ec70 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a  be followed by z
1ec80 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64 69  ero or more modi
1ec90 66 69 65 72 73 20 74 68 61 74 20 0a 61 6c 74 65  fiers that .alte
1eca0 72 20 64 61 74 65 20 61 6e 64 2f 6f 72 20 74 69  r date and/or ti
1ecb0 6d 65 2e 20 5e 45 61 63 68 20 6d 6f 64 69 66 69  me. ^Each modifi
1ecc0 65 72 0a 69 73 20 61 20 74 72 61 6e 73 66 6f 72  er.is a transfor
1ecd0 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 61  mation that is a
1ece0 70 70 6c 69 65 64 20 74 6f 20 74 68 65 20 74 69  pplied to the ti
1ecf0 6d 65 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20  me value to its 
1ed00 6c 65 66 74 2e 0a 5e 4d 6f 64 69 66 69 65 72 73  left..^Modifiers
1ed10 20 61 72 65 20 61 70 70 6c 69 65 64 20 66 72 6f   are applied fro
1ed20 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 3b  m left to right;
1ed30 20 6f 72 64 65 72 20 69 73 20 69 6d 70 6f 72 74   order is import
1ed40 61 6e 74 2e 0a 5e 28 54 68 65 20 61 76 61 69 6c  ant..^(The avail
1ed50 61 62 6c 65 20 6d 6f 64 69 66 69 65 72 73 20 61  able modifiers a
1ed60 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73 2e 3c 2f  re as follows.</
1ed70 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 4e 4e  p>..<ol>.<li> NN
1ed80 4e 20 64 61 79 73 0a 3c 6c 69 3e 20 4e 4e 4e 20  N days.<li> NNN 
1ed90 68 6f 75 72 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d  hours.<li> NNN m
1eda0 69 6e 75 74 65 73 0a 3c 6c 69 3e 20 4e 4e 4e 2e  inutes.<li> NNN.
1edb0 4e 4e 4e 4e 20 73 65 63 6f 6e 64 73 0a 3c 6c 69  NNNN seconds.<li
1edc0 3e 20 4e 4e 4e 20 6d 6f 6e 74 68 73 0a 3c 6c 69  > NNN months.<li
1edd0 3e 20 4e 4e 4e 20 79 65 61 72 73 0a 3c 6c 69 3e  > NNN years.<li>
1ede0 20 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68 0a   start of month.
1edf0 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 79 65  <li> start of ye
1ee00 61 72 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66  ar.<li> start of
1ee10 20 64 61 79 0a 3c 6c 69 3e 20 77 65 65 6b 64 61   day.<li> weekda
1ee20 79 20 4e 0a 3c 6c 69 3e 20 75 6e 69 78 65 70 6f  y N.<li> unixepo
1ee30 63 68 0a 3c 6c 69 3e 20 6c 6f 63 61 6c 74 69 6d  ch.<li> localtim
1ee40 65 0a 3c 6c 69 3e 20 75 74 63 20 0a 3c 2f 6f 6c  e.<li> utc .</ol
1ee50 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 66 69 72  >)^..<p>^The fir
1ee60 73 74 20 73 69 78 20 6d 6f 64 69 66 69 65 72 73  st six modifiers
1ee70 20 28 31 20 74 68 72 6f 75 67 68 20 36 29 20 0a   (1 through 6) .
1ee80 73 69 6d 70 6c 79 20 61 64 64 20 74 68 65 20 73  simply add the s
1ee90 70 65 63 69 66 69 65 64 20 61 6d 6f 75 6e 74 20  pecified amount 
1eea0 6f 66 20 74 69 6d 65 20 74 6f 20 74 68 65 20 64  of time to the d
1eeb0 61 74 65 20 61 6e 64 20 74 69 6d 65 20 0a 73 70  ate and time .sp
1eec0 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 70  ecified by the p
1eed0 72 65 63 65 64 69 6e 67 20 74 69 6d 65 73 74 72  receding timestr
1eee0 69 6e 67 20 61 6e 64 20 6d 6f 64 69 66 69 65 72  ing and modifier
1eef0 73 2e 0a 5e 54 68 65 20 27 73 27 20 63 68 61 72  s..^The 's' char
1ef00 61 63 74 65 72 20 61 74 20 74 68 65 20 65 6e 64  acter at the end
1ef10 20 6f 66 20 74 68 65 20 6d 6f 64 69 66 69 65 72   of the modifier
1ef20 20 6e 61 6d 65 73 20 69 73 20 6f 70 74 69 6f 6e   names is option
1ef30 61 6c 2e 0a 5e 4e 6f 74 65 20 74 68 61 74 20 22  al..^Note that "
1ef40 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 6d 6f 6e 74  &plusmn;NNN mont
1ef50 68 73 22 20 77 6f 72 6b 73 20 62 79 20 72 65 6e  hs" works by ren
1ef60 64 65 72 69 6e 67 20 74 68 65 20 6f 72 69 67 69  dering the origi
1ef70 6e 61 6c 20 64 61 74 65 20 69 6e 74 6f 0a 74 68  nal date into.th
1ef80 65 20 59 59 59 59 2d 4d 4d 2d 44 44 20 66 6f 72  e YYYY-MM-DD for
1ef90 6d 61 74 2c 20 61 64 64 69 6e 67 20 74 68 65 20  mat, adding the 
1efa0 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 74 6f 20 74  &plusmn;NNN to t
1efb0 68 65 20 4d 4d 20 6d 6f 6e 74 68 20 76 61 6c 75  he MM month valu
1efc0 65 2c 20 74 68 65 6e 0a 6e 6f 72 6d 61 6c 69 7a  e, then.normaliz
1efd0 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 2e 20  ing the result. 
1efe0 20 5e 54 68 75 73 2c 20 66 6f 72 20 65 78 61 6d   ^Thus, for exam
1eff0 70 6c 65 2c 20 74 68 65 20 64 61 74 61 20 32 30  ple, the data 20
1f000 30 31 2d 30 33 2d 33 31 20 6d 6f 64 69 66 69 65  01-03-31 modifie
1f010 64 0a 62 79 20 27 2b 31 20 6d 6f 6e 74 68 27 20  d.by '+1 month' 
1f020 69 6e 69 74 69 61 6c 6c 79 20 79 69 65 6c 64 73  initially yields
1f030 20 32 30 30 31 2d 30 34 2d 33 31 2c 20 62 75 74   2001-04-31, but
1f040 20 41 70 72 69 6c 20 6f 6e 6c 79 20 68 61 73 20   April only has 
1f050 33 30 20 64 61 79 73 0a 73 6f 20 74 68 65 20 64  30 days.so the d
1f060 61 74 65 20 69 73 20 6e 6f 72 6d 61 6c 69 7a 65  ate is normalize
1f070 64 20 74 6f 20 32 30 30 31 2d 30 35 2d 30 31 2e  d to 2001-05-01.
1f080 20 20 5e 41 20 73 69 6d 69 6c 61 72 20 65 66 66    ^A similar eff
1f090 65 63 74 20 6f 63 63 75 72 73 20 77 68 65 6e 0a  ect occurs when.
1f0a0 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74  the original dat
1f0b0 65 20 69 73 20 46 65 62 72 75 61 72 79 20 32 39  e is February 29
1f0c0 20 6f 66 20 61 20 6c 65 61 70 79 65 61 72 20 61   of a leapyear a
1f0d0 6e 64 20 74 68 65 20 6d 6f 64 69 66 69 65 72 20  nd the modifier 
1f0e0 69 73 0a 26 70 6c 75 73 6d 6e 3b 4e 20 79 65 61  is.&plusmn;N yea
1f0f0 72 73 20 77 68 65 72 65 20 4e 20 69 73 20 6e 6f  rs where N is no
1f100 74 20 61 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20  t a multiple of 
1f110 66 6f 75 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  four.</p>..<p>^T
1f120 68 65 20 22 73 74 61 72 74 20 6f 66 22 20 6d 6f  he "start of" mo
1f130 64 69 66 69 65 72 73 20 28 37 20 74 68 72 6f 75  difiers (7 throu
1f140 67 68 20 39 29 20 73 68 69 66 74 20 74 68 65 20  gh 9) shift the 
1f150 64 61 74 65 20 62 61 63 6b 77 61 72 64 73 20 0a  date backwards .
1f160 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  to the beginning
1f170 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
1f180 6d 6f 6e 74 68 2c 20 79 65 61 72 20 6f 72 20 64  month, year or d
1f190 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ay.</p>..<p>^The
1f1a0 20 22 77 65 65 6b 64 61 79 22 20 6d 6f 64 69 66   "weekday" modif
1f1b0 69 65 72 20 61 64 76 61 6e 63 65 73 20 74 68 65  ier advances the
1f1c0 20 64 61 74 65 20 66 6f 72 77 61 72 64 20 74 6f   date forward to
1f1d0 20 74 68 65 20 6e 65 78 74 20 64 61 74 65 20 0a   the next date .
1f1e0 77 68 65 72 65 20 74 68 65 20 77 65 65 6b 64 61  where the weekda
1f1f0 79 20 6e 75 6d 62 65 72 20 69 73 20 4e 2e 20 53  y number is N. S
1f200 75 6e 64 61 79 20 69 73 20 30 2c 20 4d 6f 6e 64  unday is 0, Mond
1f210 61 79 20 69 73 20 31 2c 20 61 6e 64 20 73 6f 20  ay is 1, and so 
1f220 66 6f 72 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  forth.</p>..<p>^
1f230 54 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20  The "unixepoch" 
1f240 6d 6f 64 69 66 69 65 72 20 28 31 31 29 20 6f 6e  modifier (11) on
1f250 6c 79 20 77 6f 72 6b 73 20 69 66 20 69 74 20 69  ly works if it i
1f260 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
1f270 77 73 20 0a 61 20 74 69 6d 65 73 74 72 69 6e 67  ws .a timestring
1f280 20 69 6e 20 74 68 65 20 44 44 44 44 44 44 44 44   in the DDDDDDDD
1f290 44 44 20 66 6f 72 6d 61 74 2e 20 0a 5e 54 68 69  DD format. .^Thi
1f2a0 73 20 6d 6f 64 69 66 69 65 72 20 63 61 75 73 65  s modifier cause
1f2b0 73 20 74 68 65 20 44 44 44 44 44 44 44 44 44 44  s the DDDDDDDDDD
1f2c0 20 74 6f 20 62 65 20 69 6e 74 65 72 70 72 65 74   to be interpret
1f2d0 65 64 20 6e 6f 74 20 0a 61 73 20 61 20 4a 75 6c  ed not .as a Jul
1f2e0 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 20 61  ian day number a
1f2f0 73 20 69 74 20 6e 6f 72 6d 61 6c 6c 79 20 77 6f  s it normally wo
1f300 75 6c 64 20 62 65 2c 20 62 75 74 20 61 73 0a 5b  uld be, but as.[
1f310 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65  http://en.wikipe
1f320 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 55 6e 69  dia.org/wiki/Uni
1f330 78 5f 74 69 6d 65 20 7c 20 55 6e 69 78 20 54 69  x_time | Unix Ti
1f340 6d 65 5d 20 2d 20 74 68 65 20 0a 6e 75 6d 62 65  me] - the .numbe
1f350 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e  r of seconds sin
1f360 63 65 20 31 39 37 30 2e 20 20 49 66 20 74 68 65  ce 1970.  If the
1f370 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64   "unixepoch" mod
1f380 69 66 69 65 72 20 64 6f 65 73 20 6e 6f 74 0a 66  ifier does not.f
1f390 6f 6c 6c 6f 77 20 61 20 74 69 6d 65 73 74 72 69  ollow a timestri
1f3a0 6e 67 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 44  ng of the form D
1f3b0 44 44 44 44 44 44 44 44 44 20 77 68 69 63 68 20  DDDDDDDDD which 
1f3c0 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6e 75  expresses the nu
1f3d0 6d 62 65 72 0a 6f 66 20 73 65 63 6f 6e 64 73 20  mber.of seconds 
1f3e0 73 69 6e 63 65 20 31 39 37 30 20 6f 72 20 69 66  since 1970 or if
1f3f0 20 6f 74 68 65 72 20 6d 6f 64 69 66 69 65 72 73   other modifiers
1f400 0a 73 65 70 61 72 61 74 65 20 74 68 65 20 22 75  .separate the "u
1f410 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69  nixepoch" modifi
1f420 65 72 20 66 72 6f 6d 20 70 72 69 6f 72 20 44 44  er from prior DD
1f430 44 44 44 44 44 44 44 44 20 74 68 65 6e 20 74 68  DDDDDDDD then th
1f440 65 0a 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e  e.behavior is un
1f450 64 65 66 69 6e 65 64 2e 0a 46 6f 72 20 53 51 4c  defined..For SQL
1f460 69 74 65 20 76 65 72 73 69 6f 6e 73 20 62 65 66  ite versions bef
1f470 6f 72 65 20 33 2e 31 36 2e 30 20 28 5b 64 61 74  ore 3.16.0 ([dat
1f480 65 6f 66 3a 33 2e 31 36 2e 30 5d 29 2c 20 0a 74  eof:3.16.0]), .t
1f490 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d  he "unixepoch" m
1f4a0 6f 64 69 66 69 65 72 20 6f 6e 6c 79 20 77 6f 72  odifier only wor
1f4b0 6b 73 20 66 6f 72 0a 64 61 74 65 73 20 62 65 74  ks for.dates bet
1f4c0 77 65 65 6e 20 30 30 30 30 2d 30 31 2d 30 31 20  ween 0000-01-01 
1f4d0 30 30 3a 30 30 3a 30 30 20 61 6e 64 20 35 33 35  00:00:00 and 535
1f4e0 32 2d 31 31 2d 30 31 20 31 30 3a 35 32 3a 34 37  2-11-01 10:52:47
1f4f0 20 28 75 6e 69 78 20 74 69 6d 65 73 0a 6f 66 20   (unix times.of 
1f500 2d 36 32 31 36 37 32 31 39 32 30 30 20 74 68 72  -62167219200 thr
1f510 6f 75 67 68 20 31 30 36 37 35 31 39 39 31 31 36  ough 10675199116
1f520 37 29 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  7).</p>..<tcl>hd
1f530 5f 66 72 61 67 6d 65 6e 74 20 6c 6f 63 61 6c 74  _fragment localt
1f540 69 6d 65 20 7b 6c 6f 63 61 6c 74 69 6d 65 20 6d  ime {localtime m
1f550 6f 64 69 66 69 65 72 7d 20 7b 27 75 74 63 27 20  odifier} {'utc' 
1f560 6d 6f 64 69 66 69 65 72 7d 3c 2f 74 63 6c 3e 0a  modifier}</tcl>.
1f570 3c 70 3e 5e 54 68 65 20 22 6c 6f 63 61 6c 74 69  <p>^The "localti
1f580 6d 65 22 20 6d 6f 64 69 66 69 65 72 20 28 31 32  me" modifier (12
1f590 29 20 61 73 73 75 6d 65 73 20 74 68 65 20 74 69  ) assumes the ti
1f5a0 6d 65 20 73 74 72 69 6e 67 20 74 6f 20 69 74 73  me string to its
1f5b0 20 6c 65 66 74 20 69 73 20 69 6e 0a 55 6e 69 76   left is in.Univ
1f5c0 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65  ersal Coordinate
1f5d0 64 20 54 69 6d 65 20 28 55 54 43 29 20 61 6e 64  d Time (UTC) and
1f5e0 20 61 64 6a 75 73 74 73 20 74 68 65 20 74 69 6d   adjusts the tim
1f5f0 65 0a 73 74 72 69 6e 67 20 73 6f 20 74 68 61 74  e.string so that
1f600 20 69 74 20 64 69 73 70 6c 61 79 73 20 6c 6f 63   it displays loc
1f610 61 6c 74 69 6d 65 2e 20 20 49 66 20 22 6c 6f 63  altime.  If "loc
1f620 61 6c 74 69 6d 65 22 0a 66 6f 6c 6c 6f 77 73 20  altime".follows 
1f630 61 20 74 69 6d 65 20 74 68 61 74 20 69 73 20 6e  a time that is n
1f640 6f 74 20 55 54 43 2c 20 74 68 65 6e 20 74 68 65  ot UTC, then the
1f650 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64   behavior is und
1f660 65 66 69 6e 65 64 2e 0a 5e 28 54 68 65 20 22 75  efined..^(The "u
1f670 74 63 22 20 6d 6f 64 69 66 69 65 72 20 69 73 20  tc" modifier is 
1f680 74 68 65 20 6f 70 70 6f 73 69 74 65 20 6f 66 20  the opposite of 
1f690 22 6c 6f 63 61 6c 74 69 6d 65 22 2e 20 20 0a 22  "localtime".  ."
1f6a0 75 74 63 22 20 61 73 73 75 6d 65 73 20 74 68 61  utc" assumes tha
1f6b0 74 20 74 68 65 20 73 74 72 69 6e 67 0a 74 6f 20  t the string.to 
1f6c0 69 74 73 20 6c 65 66 74 20 69 73 20 69 6e 20 74  its left is in t
1f6d0 68 65 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e  he local timezon
1f6e0 65 20 61 6e 64 20 61 64 6a 75 73 74 73 20 74 68  e and adjusts th
1f6f0 61 74 20 73 74 72 69 6e 67 20 74 6f 20 62 65 20  at string to be 
1f700 69 6e 20 55 54 43 2e 29 5e 0a 49 66 20 74 68 65  in UTC.)^.If the
1f710 20 70 72 69 6f 72 20 73 74 72 69 6e 67 20 69 73   prior string is
1f720 20 6e 6f 74 20 69 6e 20 6c 6f 63 61 6c 74 69 6d   not in localtim
1f730 65 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e, then the resu
1f740 6c 74 20 6f 66 20 22 75 74 63 22 20 69 73 0a 75  lt of "utc" is.u
1f750 6e 64 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c  ndefined.</p>..<
1f760 68 33 3e 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e  h3>Examples</h3>
1f770 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
1f780 68 65 20 63 75 72 72 65 6e 74 20 64 61 74 65 2e  he current date.
1f790 3c 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  <p>..<blockquote
1f7a0 3e 53 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f  >SELECT date('no
1f7b0 77 27 29 3b 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  w');</blockquote
1f7c0 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74  >)^..^(<p>Comput
1f7d0 65 20 74 68 65 20 6c 61 73 74 20 64 61 79 20 6f  e the last day o
1f7e0 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f  f the current mo
1f7f0 6e 74 68 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  nth.</p>..<block
1f800 71 75 6f 74 65 3e 53 45 4c 45 43 54 20 64 61 74  quote>SELECT dat
1f810 65 28 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f  e('now','start o
1f820 66 20 6d 6f 6e 74 68 27 2c 27 2b 31 20 6d 6f 6e  f month','+1 mon
1f830 74 68 27 2c 27 2d 31 20 64 61 79 27 29 3b 0a 3c  th','-1 day');.<
1f840 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
1f850 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ^(<p>Compute the
1f860 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 67   date and time g
1f870 69 76 65 6e 20 61 20 75 6e 69 78 20 74 69 6d 65  iven a unix time
1f880 73 74 61 6d 70 20 31 30 39 32 39 34 31 34 36 36  stamp 1092941466
1f890 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
1f8a0 74 65 3e 0a 20 20 20 20 53 45 4c 45 43 54 20 64  te>.    SELECT d
1f8b0 61 74 65 74 69 6d 65 28 31 30 39 32 39 34 31 34  atetime(10929414
1f8c0 36 36 2c 20 27 75 6e 69 78 65 70 6f 63 68 27 29  66, 'unixepoch')
1f8d0 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
1f8e0 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20  ^..^(<p>Compute 
1f8f0 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  the date and tim
1f900 65 20 67 69 76 65 6e 20 61 20 75 6e 69 78 20 74  e given a unix t
1f910 69 6d 65 73 74 61 6d 70 20 31 30 39 32 39 34 31  imestamp 1092941
1f920 34 36 36 2c 20 61 6e 64 20 0a 63 6f 6d 70 65 6e  466, and .compen
1f930 73 61 74 65 20 66 6f 72 20 79 6f 75 72 20 6c 6f  sate for your lo
1f940 63 61 6c 20 74 69 6d 65 7a 6f 6e 65 2e 3c 2f 70  cal timezone.</p
1f950 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
1f960 20 20 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d    SELECT datetim
1f970 65 28 31 30 39 32 39 34 31 34 36 36 2c 20 27 75  e(1092941466, 'u
1f980 6e 69 78 65 70 6f 63 68 27 2c 20 27 6c 6f 63 61  nixepoch', 'loca
1f990 6c 74 69 6d 65 27 29 3b 0a 3c 2f 62 6c 6f 63 6b  ltime');.</block
1f9a0 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43  quote>)^..^(<p>C
1f9b0 6f 6d 70 75 74 65 20 74 68 65 20 63 75 72 72 65  ompute the curre
1f9c0 6e 74 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d  nt unix timestam
1f9d0 70 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  p.</p>..<blockqu
1f9e0 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 73 74  ote>.  SELECT st
1f9f0 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77  rftime('%s','now
1fa00 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ');.</blockquote
1fa10 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74  >)^..^(<p>Comput
1fa20 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
1fa30 64 61 79 73 20 73 69 6e 63 65 20 74 68 65 20 73  days since the s
1fa40 69 67 6e 69 6e 67 20 6f 66 20 74 68 65 20 55 53  igning of the US
1fa50 20 44 65 63 6c 61 72 61 74 69 6f 6e 0a 6f 66 20   Declaration.of 
1fa60 49 6e 64 65 70 65 6e 64 65 6e 63 65 2e 3c 2f 70  Independence.</p
1fa70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
1fa80 20 20 53 45 4c 45 43 54 20 6a 75 6c 69 61 6e 64    SELECT juliand
1fa90 61 79 28 27 6e 6f 77 27 29 20 2d 20 6a 75 6c 69  ay('now') - juli
1faa0 61 6e 64 61 79 28 27 31 37 37 36 2d 30 37 2d 30  anday('1776-07-0
1fab0 34 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  4');.</blockquot
1fac0 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75  e>)^..^(<p>Compu
1fad0 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  te the number of
1fae0 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 61   seconds since a
1faf0 20 70 61 72 74 69 63 75 6c 61 72 20 6d 6f 6d 65   particular mome
1fb00 6e 74 20 69 6e 20 32 30 30 34 3a 3c 2f 70 3e 0a  nt in 2004:</p>.
1fb10 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20  .<blockquote>.  
1fb20 53 45 4c 45 43 54 20 73 74 72 66 74 69 6d 65 28  SELECT strftime(
1fb30 27 25 73 27 2c 27 6e 6f 77 27 29 20 2d 20 73 74  '%s','now') - st
1fb40 72 66 74 69 6d 65 28 27 25 73 27 2c 27 32 30 30  rftime('%s','200
1fb50 34 2d 30 31 2d 30 31 20 30 32 3a 33 34 3a 35 36  4-01-01 02:34:56
1fb60 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ');.</blockquote
1fb70 3e 29 5e 0a 0a 5e 28 3c 70 3e 0a 43 6f 6d 70 75  >)^..^(<p>.Compu
1fb80 74 65 20 74 68 65 20 64 61 74 65 20 6f 66 20 74  te the date of t
1fb90 68 65 20 66 69 72 73 74 20 54 75 65 73 64 61 79  he first Tuesday
1fba0 20 69 6e 20 4f 63 74 6f 62 65 72 0a 66 6f 72 20   in October.for 
1fbb0 74 68 65 20 63 75 72 72 65 6e 74 20 79 65 61 72  the current year
1fbc0 2e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  ..</p>..<blockqu
1fbd0 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 64 61  ote>.  SELECT da
1fbe0 74 65 28 27 6e 6f 77 27 2c 27 73 74 61 72 74 20  te('now','start 
1fbf0 6f 66 20 79 65 61 72 27 2c 27 2b 39 20 6d 6f 6e  of year','+9 mon
1fc00 74 68 73 27 2c 27 77 65 65 6b 64 61 79 20 32 27  ths','weekday 2'
1fc10 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  );.</blockquote>
1fc20 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65  )^..^(<p>Compute
1fc30 20 74 68 65 20 74 69 6d 65 20 73 69 6e 63 65 20   the time since 
1fc40 74 68 65 20 75 6e 69 78 20 65 70 6f 63 68 20 69  the unix epoch i
1fc50 6e 20 73 65 63 6f 6e 64 73 20 0a 28 6c 69 6b 65  n seconds .(like
1fc60 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27   strftime('%s','
1fc70 6e 6f 77 27 29 20 65 78 63 65 70 74 20 69 6e 63  now') except inc
1fc80 6c 75 64 65 73 20 66 72 61 63 74 69 6f 6e 61 6c  ludes fractional
1fc90 20 70 61 72 74 29 3a 3c 2f 70 3e 0a 0a 3c 62 6c   part):</p>..<bl
1fca0 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45  ockquote>.  SELE
1fcb0 43 54 20 28 6a 75 6c 69 61 6e 64 61 79 28 27 6e  CT (julianday('n
1fcc0 6f 77 27 29 20 2d 20 32 34 34 30 35 38 37 2e 35  ow') - 2440587.5
1fcd0 29 2a 38 36 34 30 30 2e 30 3b 0a 3c 2f 62 6c 6f  )*86400.0;.</blo
1fce0 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 68 33 3e  ckquote>)^..<h3>
1fcf0 43 61 76 65 61 74 73 20 41 6e 64 20 42 75 67 73  Caveats And Bugs
1fd00 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f  </h3>..<p>The co
1fd10 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20 6c 6f 63  mputation of loc
1fd20 61 6c 20 74 69 6d 65 20 64 65 70 65 6e 64 73 20  al time depends 
1fd30 68 65 61 76 69 6c 79 20 6f 6e 20 74 68 65 20 77  heavily on the w
1fd40 68 69 6d 20 0a 6f 66 20 70 6f 6c 69 74 69 63 69  him .of politici
1fd50 61 6e 73 20 61 6e 64 20 69 73 20 74 68 75 73 20  ans and is thus 
1fd60 64 69 66 66 69 63 75 6c 74 20 74 6f 20 67 65 74  difficult to get
1fd70 20 63 6f 72 72 65 63 74 20 66 6f 72 20 0a 61 6c   correct for .al
1fd80 6c 20 6c 6f 63 61 6c 65 73 2e 20 5e 49 6e 20 74  l locales. ^In t
1fd90 68 69 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  his implementati
1fda0 6f 6e 2c 20 74 68 65 20 73 74 61 6e 64 61 72 64  on, the standard
1fdb0 20 43 20 6c 69 62 72 61 72 79 20 0a 66 75 6e 63   C library .func
1fdc0 74 69 6f 6e 20 6c 6f 63 61 6c 74 69 6d 65 5f 72  tion localtime_r
1fdd0 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 73  () is used to as
1fde0 73 69 73 74 20 69 6e 20 74 68 65 20 63 61 6c 63  sist in the calc
1fdf0 75 6c 61 74 69 6f 6e 20 6f 66 20 0a 6c 6f 63 61  ulation of .loca
1fe00 6c 20 74 69 6d 65 2e 20 20 5e 28 54 68 65 20 0a  l time.  ^(The .
1fe10 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20 43 20  localtime_r() C 
1fe20 66 75 6e 63 74 69 6f 6e 20 6e 6f 72 6d 61 6c 6c  function normall
1fe30 79 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  y only works for
1fe40 20 79 65 61 72 73 0a 62 65 74 77 65 65 6e 20 31   years.between 1
1fe50 39 37 30 20 61 6e 64 20 32 30 33 37 2e 20 46 6f  970 and 2037. Fo
1fe60 72 20 64 61 74 65 73 20 6f 75 74 73 69 64 65 20  r dates outside 
1fe70 74 68 69 73 20 72 61 6e 67 65 2c 20 53 51 4c 69  this range, SQLi
1fe80 74 65 20 0a 61 74 74 65 6d 70 74 73 20 74 6f 20  te .attempts to 
1fe90 6d 61 70 20 74 68 65 20 79 65 61 72 20 69 6e 74  map the year int
1fea0 6f 20 61 6e 20 65 71 75 69 76 61 6c 65 6e 74 20  o an equivalent 
1feb0 79 65 61 72 20 77 69 74 68 69 6e 20 0a 74 68 69  year within .thi
1fec0 73 20 72 61 6e 67 65 2c 20 64 6f 20 74 68 65 20  s range, do the 
1fed0 63 61 6c 63 75 6c 61 74 69 6f 6e 2c 20 74 68 65  calculation, the
1fee0 6e 20 6d 61 70 20 74 68 65 20 79 65 61 72 20 62  n map the year b
1fef0 61 63 6b 2e 29 5e 3c 2f 70 3e 0a 0a 0a 3c 70 3e  ack.)^</p>...<p>
1ff00 5e 28 54 68 65 73 65 20 66 75 6e 63 74 69 6f 6e  ^(These function
1ff10 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20  s only work for 
1ff20 64 61 74 65 73 20 62 65 74 77 65 65 6e 20 30 30  dates between 00
1ff30 30 30 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a 30  00-01-01 00:00:0
1ff40 30 0a 61 6e 64 20 39 39 39 39 2d 31 32 2d 33 31  0.and 9999-12-31
1ff50 20 32 33 3a 35 39 3a 35 39 20 28 6a 75 6c 69 64   23:59:59 (julid
1ff60 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 73 20 31  an day numbers 1
1ff70 37 32 31 30 35 39 2e 35 20 74 68 72 6f 75 67 68  721059.5 through
1ff80 20 35 33 37 33 34 38 34 2e 35 29 2e 29 5e 0a 46   5373484.5).)^.F
1ff90 6f 72 20 64 61 74 65 73 20 6f 75 74 73 69 64 65  or dates outside
1ffa0 20 74 68 61 74 20 72 61 6e 67 65 2c 20 74 68 65   that range, the
1ffb0 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 73   results of thes
1ffc0 65 0a 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e.functions are 
1ffd0 75 6e 64 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a  undefined.</p>..
1ffe0 3c 70 3e 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e  <p>Non-Vista Win
1fff0 64 6f 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 6f  dows platforms o
20000 6e 6c 79 20 73 75 70 70 6f 72 74 20 6f 6e 65 20  nly support one 
20010 73 65 74 20 6f 66 20 44 53 54 20 72 75 6c 65 73  set of DST rules
20020 2e 20 0a 56 69 73 74 61 20 6f 6e 6c 79 20 73 75  . .Vista only su
20030 70 70 6f 72 74 73 20 74 77 6f 2e 20 54 68 65 72  pports two. Ther
20040 65 66 6f 72 65 2c 20 6f 6e 20 74 68 65 73 65 20  efore, on these 
20050 70 6c 61 74 66 6f 72 6d 73 2c 20 0a 68 69 73 74  platforms, .hist
20060 6f 72 69 63 61 6c 20 44 53 54 20 63 61 6c 63 75  orical DST calcu
20070 6c 61 74 69 6f 6e 73 20 77 69 6c 6c 20 62 65 20  lations will be 
20080 69 6e 63 6f 72 72 65 63 74 2e 20 0a 46 6f 72 20  incorrect. .For 
20090 65 78 61 6d 70 6c 65 2c 20 69 6e 20 74 68 65 20  example, in the 
200a0 55 53 2c 20 69 6e 20 32 30 30 37 20 74 68 65 20  US, in 2007 the 
200b0 44 53 54 20 72 75 6c 65 73 20 63 68 61 6e 67 65  DST rules change
200c0 64 2e 20 0a 4e 6f 6e 2d 56 69 73 74 61 20 57 69  d. .Non-Vista Wi
200d0 6e 64 6f 77 73 20 70 6c 61 74 66 6f 72 6d 73 20  ndows platforms 
200e0 61 70 70 6c 79 20 74 68 65 20 6e 65 77 20 32 30  apply the new 20
200f0 30 37 20 44 53 54 20 72 75 6c 65 73 20 0a 74 6f  07 DST rules .to
20100 20 61 6c 6c 20 70 72 65 76 69 6f 75 73 20 79 65   all previous ye
20110 61 72 73 20 61 73 20 77 65 6c 6c 2e 20 56 69 73  ars as well. Vis
20120 74 61 20 64 6f 65 73 20 73 6f 6d 65 77 68 61 74  ta does somewhat
20130 20 62 65 74 74 65 72 0a 67 65 74 74 69 6e 67 20   better.getting 
20140 72 65 73 75 6c 74 73 20 63 6f 72 72 65 63 74 20  results correct 
20150 62 61 63 6b 20 74 6f 20 31 39 38 36 2c 20 77 68  back to 1986, wh
20160 65 6e 20 74 68 65 20 72 75 6c 65 73 20 77 65 72  en the rules wer
20170 65 20 61 6c 73 6f 20 63 68 61 6e 67 65 64 2e 3c  e also changed.<
20180 2f 70 3e 0a 0a 3c 70 3e 41 6c 6c 20 69 6e 74 65  /p>..<p>All inte
20190 72 6e 61 6c 20 63 6f 6d 70 75 74 61 74 69 6f 6e  rnal computation
201a0 73 20 61 73 73 75 6d 65 20 74 68 65 20 0a 5b 68  s assume the .[h
201b0 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64  ttp://en.wikiped
201c0 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 47 72 65 67  ia.org/wiki/Greg
201d0 6f 72 69 61 6e 5f 63 61 6c 65 6e 64 61 72 20 7c  orian_calendar |
201e0 20 47 72 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e   Gregorian calen
201f0 64 61 72 5d 0a 73 79 73 74 65 6d 2e 20 20 49 74  dar].system.  It
20200 20 69 73 20 61 6c 73 6f 20 61 73 73 75 6d 65 64   is also assumed
20210 20 74 68 61 74 20 65 76 65 72 79 0a 64 61 79 20   that every.day 
20220 69 73 20 65 78 61 63 74 6c 79 20 38 36 34 30 30  is exactly 86400
20230 20 73 65 63 6f 6e 64 73 20 69 6e 20 64 75 72 61   seconds in dura
20240 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  tion.</p>..<tcl>
20250 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
20260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
202a0 53 65 63 74 69 6f 6e 20 7b 41 67 67 72 65 67 61  Section {Aggrega
202b0 74 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20 61 67  te Functions} ag
202c0 67 66 75 6e 63 20 7b 2a 61 67 67 66 75 6e 63 7d  gfunc {*aggfunc}
202d0 0a 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61  .unset -nocompla
202e0 69 6e 20 63 6f 72 65 66 75 6e 63 73 65 74 0a 0a  in corefuncset..
202f0 66 75 6e 63 64 65 66 20 7b 61 76 67 28 58 29 7d  funcdef {avg(X)}
20300 20 7b 2a 61 76 67 20 7b 61 76 67 28 29 20 61 67   {*avg {avg() ag
20310 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
20320 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 61 76 67 28  }} {.  ^The avg(
20330 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74  ) function.  ret
20340 75 72 6e 73 20 74 68 65 20 61 76 65 72 61 67 65  urns the average
20350 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 6e 6f   value of all no
20360 6e 2d 4e 55 4c 4c 20 3c 69 3e 58 3c 2f 69 3e 20  n-NULL <i>X</i> 
20370 77 69 74 68 69 6e 20 61 0a 20 20 67 72 6f 75 70  within a.  group
20380 2e 20 20 5e 53 74 72 69 6e 67 20 61 6e 64 20 42  .  ^String and B
20390 4c 4f 42 20 76 61 6c 75 65 73 20 74 68 61 74 20  LOB values that 
203a0 64 6f 20 6e 6f 74 20 6c 6f 6f 6b 20 6c 69 6b 65  do not look like
203b0 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 20 20 69   numbers are.  i
203c0 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 30 2e  nterpreted as 0.
203d0 0a 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  .  ^The result o
203e0 66 20 61 76 67 28 29 20 69 73 20 61 6c 77 61 79  f avg() is alway
203f0 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  s a floating poi
20400 6e 74 20 76 61 6c 75 65 20 61 73 20 6c 6f 6e 67  nt value as long
20410 20 61 73 0a 20 20 61 74 20 74 68 65 72 65 20 69   as.  at there i
20420 73 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6e  s at least one n
20430 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 65 76  on-NULL input ev
20440 65 6e 20 69 66 20 61 6c 6c 0a 20 20 69 6e 70 75  en if all.  inpu
20450 74 73 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e  ts are integers.
20460 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66    ^The result of
20470 20 61 76 67 28 29 20 69 73 20 4e 55 4c 4c 20 69   avg() is NULL i
20480 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 20 20  f and only if.  
20490 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e  there are no non
204a0 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 2e 20 20 0a  -NULL inputs.  .
204b0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 6f 75 6e  }..funcdef {coun
204c0 74 28 58 29 20 63 6f 75 6e 74 28 2a 29 7d 20 7b  t(X) count(*)} {
204d0 2a 63 6f 75 6e 74 20 7b 63 6f 75 6e 74 28 29 20  *count {count() 
204e0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
204f0 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 63 6f  on}} {.  ^The co
20500 75 6e 74 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  unt(X) function 
20510 72 65 74 75 72 6e 73 0a 20 20 61 20 63 6f 75 6e  returns.  a coun
20520 74 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20  t of the number 
20530 6f 66 20 74 69 6d 65 73 0a 20 20 74 68 61 74 20  of times.  that 
20540 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 6e 6f 74 20  <i>X</i> is not 
20550 4e 55 4c 4c 20 69 6e 20 61 20 67 72 6f 75 70 2e  NULL in a group.
20560 20 20 5e 54 68 65 20 63 6f 75 6e 74 28 2a 29 20    ^The count(*) 
20570 66 75 6e 63 74 69 6f 6e 0a 20 20 28 77 69 74 68  function.  (with
20580 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 29 20 72   no arguments) r
20590 65 74 75 72 6e 73 20 74 68 65 20 74 6f 74 61 6c  eturns the total
205a0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
205b0 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a  in the group..}.
205c0 0a 66 75 6e 63 64 65 66 20 7b 67 72 6f 75 70 5f  .funcdef {group_
205d0 63 6f 6e 63 61 74 28 58 29 20 67 72 6f 75 70 5f  concat(X) group_
205e0 63 6f 6e 63 61 74 28 58 2c 59 29 7d 20 7b 0a 20  concat(X,Y)} {. 
205f0 20 2a 67 72 6f 75 70 5f 63 6f 6e 63 61 74 20 7b   *group_concat {
20600 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 29 20 61  group_concat() a
20610 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
20620 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68 65 20 67 72  n}.} {.  ^The gr
20630 6f 75 70 5f 63 6f 6e 63 61 74 28 29 20 66 75 6e  oup_concat() fun
20640 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 0a 20 20  ction returns.  
20650 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 20 69  a string which i
20660 73 20 74 68 65 20 63 6f 6e 63 61 74 65 6e 61 74  s the concatenat
20670 69 6f 6e 20 6f 66 0a 20 20 61 6c 6c 20 6e 6f 6e  ion of.  all non
20680 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 6f 66 20  -NULL values of 
20690 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 49 66 20 70  <i>X</i>.  ^If p
206a0 61 72 61 6d 65 74 65 72 20 3c 69 3e 59 3c 2f 69  arameter <i>Y</i
206b0 3e 20 69 73 20 70 72 65 73 65 6e 74 20 74 68 65  > is present the
206c0 6e 0a 20 20 69 74 20 69 73 20 75 73 65 64 20 61  n.  it is used a
206d0 73 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 0a  s the separator.
206e0 20 20 62 65 74 77 65 65 6e 20 69 6e 73 74 61 6e    between instan
206f0 63 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e  ces of <i>X</i>.
20700 20 20 5e 41 20 63 6f 6d 6d 61 20 28 22 2c 22 29    ^A comma (",")
20710 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20   is used as the 
20720 73 65 70 61 72 61 74 6f 72 0a 20 20 69 66 20 3c  separator.  if <
20730 69 3e 59 3c 2f 69 3e 20 69 73 20 6f 6d 69 74 74  i>Y</i> is omitt
20740 65 64 2e 20 20 54 68 65 20 6f 72 64 65 72 20 6f  ed.  The order o
20750 66 20 74 68 65 20 63 6f 6e 63 61 74 65 6e 61 74  f the concatenat
20760 65 64 20 65 6c 65 6d 65 6e 74 73 20 69 73 0a 20  ed elements is. 
20770 20 61 72 62 69 74 72 61 72 79 2e 0a 7d 0a 0a 66   arbitrary..}..f
20780 75 6e 63 64 65 66 20 7b 6d 61 78 28 58 29 7d 20  uncdef {max(X)} 
20790 7b 2a 6d 61 78 41 67 67 46 75 6e 63 20 2a 61 67  {*maxAggFunc *ag
207a0 67 5f 6d 61 78 20 7b 6d 61 78 28 29 20 61 67 67  g_max {max() agg
207b0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d  regate function}
207c0 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 61 78 28 29  } {.  ^The max()
207d0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
207e0 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68  ion.  returns th
207f0 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20  e maximum value 
20800 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e  of all values in
20810 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e 54   the group..  ^T
20820 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65  he maximum value
20830 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 74 68   is the value th
20840 61 74 20 77 6f 75 6c 64 20 62 65 20 72 65 74 75  at would be retu
20850 72 6e 65 64 20 6c 61 73 74 20 69 6e 20 61 6e 0a  rned last in an.
20860 20 20 4f 52 44 45 52 20 42 59 20 6f 6e 20 74 68    ORDER BY on th
20870 65 20 73 61 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20  e same column.  
20880 5e 41 67 67 72 65 67 61 74 65 20 6d 61 78 28 29  ^Aggregate max()
20890 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 0a 20   returns NULL . 
208a0 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20   if and only if 
208b0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e  there are no non
208c0 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20  -NULL values in 
208d0 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75  the group..}..fu
208e0 6e 63 64 65 66 20 7b 6d 69 6e 28 58 29 7d 20 7b  ncdef {min(X)} {
208f0 2a 6d 69 6e 41 67 67 46 75 6e 63 20 2a 61 67 67  *minAggFunc *agg
20900 5f 6d 69 6e 20 7b 6d 69 6e 28 29 20 61 67 67 72  _min {min() aggr
20910 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d  egate function}}
20920 20 7b 0a 20 20 5e 54 68 65 20 6d 69 6e 28 29 20   {.  ^The min() 
20930 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
20940 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68 65  on.  returns the
20950 20 6d 69 6e 69 6d 75 6d 20 6e 6f 6e 2d 4e 55 4c   minimum non-NUL
20960 4c 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76  L value of all v
20970 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f  alues in the gro
20980 75 70 2e 0a 20 20 5e 54 68 65 20 6d 69 6e 69 6d  up..  ^The minim
20990 75 6d 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  um value is the 
209a0 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 76  first non-NULL v
209b0 61 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20  alue that would 
209c0 61 70 70 65 61 72 0a 20 20 69 6e 20 61 6e 20 4f  appear.  in an O
209d0 52 44 45 52 20 42 59 20 6f 66 20 74 68 65 20 63  RDER BY of the c
209e0 6f 6c 75 6d 6e 2e 0a 20 20 5e 41 67 67 72 65 67  olumn..  ^Aggreg
209f0 61 74 65 20 6d 69 6e 28 29 20 72 65 74 75 72 6e  ate min() return
20a00 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64 20 6f 6e  s NULL if and on
20a10 6c 79 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ly if there are 
20a20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 0a 20 20 76 61  no non-NULL.  va
20a30 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75  lues in the grou
20a40 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73  p..}..funcdef {s
20a50 75 6d 28 58 29 20 74 6f 74 61 6c 28 58 29 7d 20  um(X) total(X)} 
20a60 7b 0a 20 20 2a 73 75 6d 46 75 6e 63 20 2a 73 75  {.  *sumFunc *su
20a70 6d 20 2a 74 6f 74 61 6c 0a 20 20 7b 73 75 6d 28  m *total.  {sum(
20a80 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
20a90 74 69 6f 6e 7d 0a 20 20 7b 74 6f 74 61 6c 28 29  tion}.  {total()
20aa0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
20ab0 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68 65 20  ion}.} {.  ^The 
20ac0 73 75 6d 28 29 20 61 6e 64 20 74 6f 74 61 6c 28  sum() and total(
20ad0 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
20ae0 74 69 6f 6e 73 0a 20 20 72 65 74 75 72 6e 20 73  tions.  return s
20af0 75 6d 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55  um of all non-NU
20b00 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  LL values in the
20b10 20 67 72 6f 75 70 2e 0a 20 20 5e 49 66 20 74 68   group..  ^If th
20b20 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e  ere are no non-N
20b30 55 4c 4c 20 69 6e 70 75 74 20 72 6f 77 73 20 74  ULL input rows t
20b40 68 65 6e 20 73 75 6d 28 29 20 72 65 74 75 72 6e  hen sum() return
20b50 73 0a 20 20 4e 55 4c 4c 20 62 75 74 20 74 6f 74  s.  NULL but tot
20b60 61 6c 28 29 20 72 65 74 75 72 6e 73 20 30 2e 30  al() returns 0.0
20b70 2e 0a 20 20 4e 55 4c 4c 20 69 73 20 6e 6f 74 20  ..  NULL is not 
20b80 6e 6f 72 6d 61 6c 6c 79 20 61 20 68 65 6c 70 66  normally a helpf
20b90 75 6c 20 72 65 73 75 6c 74 20 66 6f 72 20 74 68  ul result for th
20ba0 65 20 73 75 6d 20 6f 66 20 6e 6f 20 72 6f 77 73  e sum of no rows
20bb0 0a 20 20 62 75 74 20 74 68 65 20 53 51 4c 20 73  .  but the SQL s
20bc0 74 61 6e 64 61 72 64 20 72 65 71 75 69 72 65 73  tandard requires
20bd0 20 69 74 20 61 6e 64 20 6d 6f 73 74 20 6f 74 68   it and most oth
20be0 65 72 0a 20 20 53 51 4c 20 64 61 74 61 62 61 73  er.  SQL databas
20bf0 65 20 65 6e 67 69 6e 65 73 20 69 6d 70 6c 65 6d  e engines implem
20c00 65 6e 74 20 73 75 6d 28 29 20 74 68 61 74 20 77  ent sum() that w
20c10 61 79 20 73 6f 20 53 51 4c 69 74 65 20 64 6f 65  ay so SQLite doe
20c20 73 20 69 74 20 69 6e 20 74 68 65 0a 20 20 73 61  s it in the.  sa
20c30 6d 65 20 77 61 79 20 69 6e 20 6f 72 64 65 72 20  me way in order 
20c40 74 6f 20 62 65 20 63 6f 6d 70 61 74 69 62 6c 65  to be compatible
20c50 2e 20 20 20 54 68 65 20 6e 6f 6e 2d 73 74 61 6e  .   The non-stan
20c60 64 61 72 64 20 74 6f 74 61 6c 28 29 20 66 75 6e  dard total() fun
20c70 63 74 69 6f 6e 0a 20 20 69 73 20 70 72 6f 76 69  ction.  is provi
20c80 64 65 64 20 61 73 20 61 20 63 6f 6e 76 65 6e 69  ded as a conveni
20c90 65 6e 74 20 77 61 79 20 74 6f 20 77 6f 72 6b 20  ent way to work 
20ca0 61 72 6f 75 6e 64 20 74 68 69 73 20 64 65 73 69  around this desi
20cb0 67 6e 20 70 72 6f 62 6c 65 6d 0a 20 20 69 6e 20  gn problem.  in 
20cc0 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
20cd0 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 54 68 65  .</p>..  <p>^The
20ce0 20 72 65 73 75 6c 74 20 6f 66 20 74 6f 74 61 6c   result of total
20cf0 28 29 20 69 73 20 61 6c 77 61 79 73 20 61 20 66  () is always a f
20d00 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
20d10 6c 75 65 2e 0a 20 20 5e 54 68 65 20 72 65 73 75  lue..  ^The resu
20d20 6c 74 20 6f 66 20 73 75 6d 28 29 20 69 73 20 61  lt of sum() is a
20d30 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  n integer value 
20d40 69 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20  if all non-NULL 
20d50 69 6e 70 75 74 73 20 61 72 65 20 69 6e 74 65 67  inputs are integ
20d60 65 72 73 2e 0a 20 20 5e 49 66 20 61 6e 79 20 69  ers..  ^If any i
20d70 6e 70 75 74 20 74 6f 20 73 75 6d 28 29 20 69 73  nput to sum() is
20d80 20 6e 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65   neither an inte
20d90 67 65 72 20 6f 72 20 61 20 4e 55 4c 4c 0a 20 20  ger or a NULL.  
20da0 74 68 65 6e 20 73 75 6d 28 29 20 72 65 74 75 72  then sum() retur
20db0 6e 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f  ns a floating po
20dc0 69 6e 74 20 76 61 6c 75 65 0a 20 20 77 68 69 63  int value.  whic
20dd0 68 20 6d 69 67 68 74 20 62 65 20 61 6e 20 61 70  h might be an ap
20de0 70 72 6f 78 69 6d 61 74 69 6f 6e 20 74 6f 20 74  proximation to t
20df0 68 65 20 74 72 75 65 20 73 75 6d 2e 3c 2f 70 3e  he true sum.</p>
20e00 0a 0a 20 20 3c 70 3e 5e 53 75 6d 28 29 20 77 69  ..  <p>^Sum() wi
20e10 6c 6c 20 74 68 72 6f 77 20 61 6e 20 22 69 6e 74  ll throw an "int
20e20 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 22 20 65  eger overflow" e
20e30 78 63 65 70 74 69 6f 6e 20 69 66 20 61 6c 6c 20  xception if all 
20e40 69 6e 70 75 74 73 0a 20 20 61 72 65 20 69 6e 74  inputs.  are int
20e50 65 67 65 72 73 20 6f 72 20 4e 55 4c 4c 0a 20 20  egers or NULL.  
20e60 61 6e 64 20 61 6e 20 69 6e 74 65 67 65 72 20 6f  and an integer o
20e70 76 65 72 66 6c 6f 77 20 6f 63 63 75 72 73 20 61  verflow occurs a
20e80 74 20 61 6e 79 20 70 6f 69 6e 74 20 64 75 72 69  t any point duri
20e90 6e 67 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69  ng the computati
20ea0 6f 6e 2e 0a 20 20 5e 54 6f 74 61 6c 28 29 20 6e  on..  ^Total() n
20eb0 65 76 65 72 20 74 68 72 6f 77 73 20 61 6e 20 69  ever throws an i
20ec0 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 2e  nteger overflow.
20ed0 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 0a 3c 70 3e 0a  .}.</tcl>...<p>.
20ee0 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75  The aggregate fu
20ef0 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e 20 62 65  nctions shown be
20f00 6c 6f 77 20 61 72 65 20 61 76 61 69 6c 61 62 6c  low are availabl
20f10 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 41  e by default.  A
20f20 64 64 69 74 69 6f 6e 61 6c 0a 61 67 67 72 65 67  dditional.aggreg
20f30 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 77 72  ate functions wr
20f40 69 74 74 65 6e 20 69 6e 20 43 20 6d 61 79 20 62  itten in C may b
20f50 65 20 61 64 64 65 64 20 75 73 69 6e 67 20 74 68  e added using th
20f60 65 20 0a 5b 73 71 6c 69 74 65 33 5f 63 72 65 61  e .[sqlite3_crea
20f70 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 3c 2f  te_function()]</
20f80 61 3e 0a 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 70 3e  a>.API.</p>..<p>
20f90 0a 5e 49 6e 20 61 6e 79 20 61 67 67 72 65 67 61  .^In any aggrega
20fa0 74 65 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74  te function that
20fb0 20 74 61 6b 65 73 20 61 20 73 69 6e 67 6c 65 20   takes a single 
20fc0 61 72 67 75 6d 65 6e 74 2c 20 74 68 61 74 20 61  argument, that a
20fd0 72 67 75 6d 65 6e 74 0a 63 61 6e 20 62 65 20 70  rgument.can be p
20fe0 72 65 63 65 64 65 64 20 62 79 20 74 68 65 20 6b  receded by the k
20ff0 65 79 77 6f 72 64 20 44 49 53 54 49 4e 43 54 2e  eyword DISTINCT.
21000 20 20 5e 49 6e 20 73 75 63 68 20 63 61 73 65 73    ^In such cases
21010 2c 20 64 75 70 6c 69 63 61 74 65 0a 65 6c 65 6d  , duplicate.elem
21020 65 6e 74 73 20 61 72 65 20 66 69 6c 74 65 72 65  ents are filtere
21030 64 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20 70  d before being p
21040 61 73 73 65 64 20 69 6e 74 6f 20 74 68 65 20 61  assed into the a
21050 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
21060 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c  n..^For example,
21070 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 22 63   the function "c
21080 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 58 29  ount(distinct X)
21090 22 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 74 68  " will return th
210a0 65 20 6e 75 6d 62 65 72 0a 6f 66 20 64 69 73 74  e number.of dist
210b0 69 6e 63 74 20 76 61 6c 75 65 73 20 6f 66 20 63  inct values of c
210c0 6f 6c 75 6d 6e 20 58 20 69 6e 73 74 65 61 64 20  olumn X instead 
210d0 6f 66 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  of the total num
210e0 62 65 72 20 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c 0a  ber of non-null.
210f0 76 61 6c 75 65 73 20 69 6e 20 63 6f 6c 75 6d 6e  values in column
21100 20 58 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a   X..</p>..<tcl>.
21110 73 65 74 20 6c 78 20 7b 7d 0a 66 6f 72 65 61 63  set lx {}.foreac
21120 68 20 62 61 73 65 73 79 6e 74 61 78 20 5b 61 72  h basesyntax [ar
21130 72 61 79 20 6e 61 6d 65 73 20 63 6f 72 65 66 75  ray names corefu
21140 6e 63 73 65 74 5d 20 7b 0a 20 20 66 6f 72 65 61  ncset] {.  forea
21150 63 68 20 7b 73 79 6e 74 61 78 20 6b 65 79 77 6f  ch {syntax keywo
21160 72 64 73 20 64 65 73 63 7d 20 24 63 6f 72 65 66  rds desc} $coref
21170 75 6e 63 73 65 74 28 24 62 61 73 65 73 79 6e 74  uncset($basesynt
21180 61 78 29 20 62 72 65 61 6b 0a 20 20 72 65 67 65  ax) break.  rege
21190 78 70 20 7b 5e 5b 61 2d 7a 5f 5d 2b 7d 20 24 62  xp {^[a-z_]+} $b
211a0 61 73 65 73 79 6e 74 61 78 20 66 72 61 67 6d 65  asesyntax fragme
211b0 6e 74 0a 20 20 66 6f 72 65 61 63 68 20 63 6f 72  nt.  foreach cor
211c0 65 73 79 6e 74 61 78 20 24 73 79 6e 74 61 78 20  esyntax $syntax 
211d0 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 6c 78  {.    lappend lx
211e0 20 5b 6c 69 73 74 20 24 66 72 61 67 6d 65 6e 74   [list $fragment
211f0 20 24 63 6f 72 65 73 79 6e 74 61 78 20 30 5d 0a   $coresyntax 0].
21200 20 20 7d 0a 7d 0a 68 64 5f 6c 69 73 74 5f 6f 66    }.}.hd_list_of
21210 5f 6c 69 6e 6b 73 20 7b 7d 20 32 32 35 20 5b 6c  _links {} 225 [l
21220 73 6f 72 74 20 2d 69 6e 64 65 78 20 31 20 24 6c  sort -index 1 $l
21230 78 5d 0a 0a 68 64 5f 70 75 74 73 6e 6c 20 22 3c  x]..hd_putsnl "<
21240 68 72 20 63 6c 61 73 73 3d 27 78 68 72 27 3e 22  hr class='xhr'>"
21250 0a 68 64 5f 70 75 74 73 6e 6c 20 22 3c 64 6c 3e  .hd_putsnl "<dl>
21260 22 0a 66 6f 72 65 61 63 68 20 62 61 73 65 73 79  ".foreach basesy
21270 6e 74 61 78 20 5b 6c 73 6f 72 74 20 5b 61 72 72  ntax [lsort [arr
21280 61 79 20 6e 61 6d 65 73 20 63 6f 72 65 66 75 6e  ay names corefun
21290 63 73 65 74 5d 5d 20 7b 0a 20 20 66 6f 72 65 61  cset]] {.  forea
212a0 63 68 20 7b 73 79 6e 74 61 78 20 6b 65 79 77 6f  ch {syntax keywo
212b0 72 64 73 20 64 65 73 63 7d 20 24 63 6f 72 65 66  rds desc} $coref
212c0 75 6e 63 73 65 74 28 24 62 61 73 65 73 79 6e 74  uncset($basesynt
212d0 61 78 29 20 62 72 65 61 6b 0a 20 20 72 65 67 73  ax) break.  regs
212e0 75 62 20 2d 61 6c 6c 20 7b 5c 73 2b 7d 20 5b 73  ub -all {\s+} [s
212f0 74 72 69 6e 67 20 74 72 69 6d 20 24 73 79 6e 74  tring trim $synt
21300 61 78 5d 20 7b 3c 62 72 20 2f 3e 7d 20 73 79 6e  ax] {<br />} syn
21310 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c  tax.  regsub -al
21320 6c 20 7b 5c 28 28 5b 5e 2a 29 5d 2b 29 5c 29 7d  l {\(([^*)]+)\)}
21330 20 24 73 79 6e 74 61 78 20 7b 28 3c 69 3e 5c 31   $syntax {(<i>\1
21340 3c 2f 69 3e 29 7d 20 73 79 6e 74 61 78 0a 20 20  </i>)} syntax.  
21350 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 2c 7d 20  regsub -all {,} 
21360 24 73 79 6e 74 61 78 20 7b 3c 2f 69 3e 2c 3c 69  $syntax {</i>,<i
21370 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73  >} syntax.  regs
21380 75 62 20 2d 61 6c 6c 20 7b 3c 69 3e 5c 2e 5c 2e  ub -all {<i>\.\.
21390 5c 2e 3c 2f 69 3e 7d 20 24 73 79 6e 74 61 78 20  \.</i>} $syntax 
213a0 7b 2e 2e 2e 7d 20 73 79 6e 74 61 78 0a 20 20 72  {...} syntax.  r
213b0 65 67 65 78 70 20 7b 5e 5b 61 2d 7a 5d 2b 7d 20  egexp {^[a-z]+} 
213c0 24 62 61 73 65 73 79 6e 74 61 78 20 66 72 61 67  $basesyntax frag
213d0 6d 65 6e 74 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e  ment.  if {[llen
213e0 67 74 68 20 24 6b 65 79 77 6f 72 64 73 5d 3d 3d  gth $keywords]==
213f0 30 7d 20 7b 0a 20 20 20 20 72 65 67 65 78 70 20  0} {.    regexp 
21400 7b 5b 61 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61  {[a-z_]+} $synta
21410 78 20 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72  x name.    hd_fr
21420 61 67 6d 65 6e 74 20 24 6e 61 6d 65 20 2a 24 6e  agment $name *$n
21430 61 6d 65 20 22 24 7b 6e 61 6d 65 7d 28 29 20 53  ame "${name}() S
21440 51 4c 20 66 75 6e 63 74 69 6f 6e 22 0a 20 20 7d  QL function".  }
21450 20 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20   else {.    set 
21460 66 72 61 67 6e 61 6d 65 20 5b 6c 69 6e 64 65 78  fragname [lindex
21470 20 24 6b 65 79 77 6f 72 64 73 20 30 5d 0a 20 20   $keywords 0].  
21480 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5b    regsub -all {[
21490 5e 61 2d 7a 5d 7d 20 24 66 72 61 67 6e 61 6d 65  ^a-z]} $fragname
214a0 20 7b 7d 20 66 72 61 67 6e 61 6d 65 0a 20 20 20   {} fragname.   
214b0 20 68 64 5f 66 72 61 67 6d 65 6e 74 20 24 66 72   hd_fragment $fr
214c0 61 67 6e 61 6d 65 0a 20 20 20 20 65 76 61 6c 20  agname.    eval 
214d0 68 64 5f 6b 65 79 77 6f 72 64 73 20 5b 73 74 72  hd_keywords [str
214e0 69 6e 67 20 6d 61 70 20 7b 5c 6e 20 7b 20 7d 7d  ing map {\n { }}
214f0 20 24 6b 65 79 77 6f 72 64 73 5d 0a 20 20 7d 0a   $keywords].  }.
21500 20 20 68 64 5f 70 75 74 73 20 22 3c 64 74 3e 3c    hd_puts "<dt><
21510 70 3e 3c 62 3e 24 73 79 6e 74 61 78 3c 2f 62 3e  p><b>$syntax</b>
21520 3c 2f 64 74 3e 22 0a 20 20 68 64 5f 72 65 73 6f  </dt>".  hd_reso
21530 6c 76 65 20 22 3c 64 64 3e 3c 70 3e 24 64 65 73  lve "<dd><p>$des
21540 63 3c 2f 64 64 3e 5c 6e 22 0a 7d 0a 68 64 5f 70  c</dd>\n".}.hd_p
21550 75 74 73 6e 6c 20 22 3c 2f 64 6c 3e 22 0a 0a 23  utsnl "</dl>"..#
21560 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21570 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21580 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21590 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
215a0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
215b0 63 74 69 6f 6e 20 49 4e 53 45 52 54 20 69 6e 73  ction INSERT ins
215c0 65 72 74 20 7b 49 4e 53 45 52 54 20 2a 49 4e 53  ert {INSERT *INS
215d0 45 52 54 73 7d 0a 0a 52 65 63 75 72 73 69 76 65  ERTs}..Recursive
215e0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 69 6e  BubbleDiagram in
215f0 73 65 72 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  sert-stmt.</tcl>
21600 0a 0a 3c 70 3e 54 68 65 20 49 4e 53 45 52 54 20  ..<p>The INSERT 
21610 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 65 73 20  statement comes 
21620 69 6e 20 74 68 72 65 65 20 62 61 73 69 63 20 66  in three basic f
21630 6f 72 6d 73 2e 20 20 0a 3c 75 6c 3e 0a 3c 6c 69  orms.  .<ul>.<li
21640 3e 3c 70 3e 5e 54 68 65 20 66 69 72 73 74 20 66  ><p>^The first f
21650 6f 72 6d 20 28 77 69 74 68 20 74 68 65 20 22 56  orm (with the "V
21660 41 4c 55 45 53 22 20 6b 65 79 77 6f 72 64 29 20  ALUES" keyword) 
21670 63 72 65 61 74 65 73 20 6f 6e 65 20 6f 72 20 6d  creates one or m
21680 6f 72 65 0a 6e 65 77 20 72 6f 77 73 20 69 6e 0a  ore.new rows in.
21690 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c  an existing tabl
216a0 65 2e 20 5e 49 66 20 74 68 65 20 3c 79 79 74 65  e. ^If the <yyte
216b0 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f  rm>column-name</
216c0 79 79 74 65 72 6d 3e 20 6c 69 73 74 20 61 66 74  yyterm> list aft
216d0 65 72 0a 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65  er.<yyterm>table
216e0 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 69  -name</yyterm> i
216f0 73 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 74  s omitted then t
21700 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 76 61 6c  he number.of val
21710 75 65 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74  ues inserted int
21720 6f 20 65 61 63 68 20 72 6f 77 0a 6d 75 73 74 20  o each row.must 
21730 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 74  be the same as t
21740 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
21750 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
21760 65 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65  e. ^In this case
21770 0a 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65  .the result of e
21780 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 6c 65  valuating the le
21790 66 74 2d 6d 6f 73 74 20 65 78 70 72 65 73 73 69  ft-most expressi
217a0 6f 6e 20 66 72 6f 6d 20 65 61 63 68 20 74 65 72  on from each ter
217b0 6d 20 6f 66 0a 74 68 65 20 56 41 4c 55 45 53 20  m of.the VALUES 
217c0 6c 69 73 74 20 69 73 20 69 6e 73 65 72 74 65 64  list is inserted
217d0 20 69 6e 74 6f 20 74 68 65 20 6c 65 66 74 2d 6d   into the left-m
217e0 6f 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 65 61  ost column of ea
217f0 63 68 20 6e 65 77 20 72 6f 77 2c 0a 61 6e 64 20  ch new row,.and 
21800 73 6f 20 66 6f 72 74 68 20 66 6f 72 20 65 61 63  so forth for eac
21810 68 20 73 75 62 73 65 71 75 65 6e 74 20 65 78 70  h subsequent exp
21820 72 65 73 73 69 6f 6e 2e 20 5e 49 66 20 61 20 3c  ression. ^If a <
21830 79 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61  yyterm>column-na
21840 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 6c 69 73 74  me</yyterm>.list
21850 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74   is specified, t
21860 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  hen the number o
21870 66 20 76 61 6c 75 65 73 20 69 6e 20 65 61 63 68  f values in each
21880 20 74 65 72 6d 20 6f 66 20 74 68 65 0a 56 41 4c   term of the.VAL
21890 55 45 20 6c 69 73 74 20 6d 75 73 74 20 6d 61 74  UE list must mat
218a0 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ch the number of
218b0 0a 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d  .specified colum
218c0 6e 73 2e 20 5e 45 61 63 68 20 6f 66 20 74 68 65  ns. ^Each of the
218d0 20 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e 73 20 6f   named columns o
218e0 66 20 74 68 65 20 6e 65 77 20 72 6f 77 20 69 73  f the new row is
218f0 20 70 6f 70 75 6c 61 74 65 64 0a 77 69 74 68 20   populated.with 
21900 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 65  the results of e
21910 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 63 6f  valuating the co
21920 72 72 65 73 70 6f 6e 64 69 6e 67 20 56 41 4c 55  rresponding VALU
21930 45 53 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e  ES expression. ^
21940 54 61 62 6c 65 0a 63 6f 6c 75 6d 6e 73 20 74 68  Table.columns th
21950 61 74 20 64 6f 20 6e 6f 74 20 61 70 70 65 61 72  at do not appear
21960 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6c   in the column l
21970 69 73 74 20 61 72 65 20 70 6f 70 75 6c 61 74 65  ist are populate
21980 64 20 77 69 74 68 20 74 68 65 20 0a 5b 64 65 66  d with the .[def
21990 61 75 6c 74 20 63 6f 6c 75 6d 6e 20 76 61 6c 75  ault column valu
219a0 65 5d 20 28 73 70 65 63 69 66 69 65 64 20 61 73  e] (specified as
219b0 20 70 61 72 74 20 6f 66 20 74 68 65 20 5b 43 52   part of the [CR
219c0 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74  EATE TABLE] stat
219d0 65 6d 65 6e 74 29 2c 20 6f 72 0a 77 69 74 68 20  ement), or.with 
219e0 4e 55 4c 4c 20 69 66 20 6e 6f 20 5b 64 65 66 61  NULL if no [defa
219f0 75 6c 74 20 76 61 6c 75 65 5d 20 69 73 20 73 70  ult value] is sp
21a00 65 63 69 66 69 65 64 2e 0a 0a 3c 6c 69 3e 3c 70  ecified...<li><p
21a10 3e 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d  >The second form
21a20 20 6f 66 20 74 68 65 20 49 4e 53 45 52 54 20 73   of the INSERT s
21a30 74 61 74 65 6d 65 6e 74 20 63 6f 6e 74 61 69 6e  tatement contain
21a40 73 20 61 20 5b 53 45 4c 45 43 54 5d 20 73 74 61  s a [SELECT] sta
21a50 74 65 6d 65 6e 74 0a 69 6e 73 74 65 61 64 20 6f  tement.instead o
21a60 66 20 61 20 56 41 4c 55 45 53 20 63 6c 61 75 73  f a VALUES claus
21a70 65 2e 20 5e 41 20 6e 65 77 20 65 6e 74 72 79 20  e. ^A new entry 
21a80 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  is inserted into
21a90 20 74 68 65 20 74 61 62 6c 65 20 66 6f 72 20 65   the table for e
21aa0 61 63 68 0a 72 6f 77 20 6f 66 20 64 61 74 61 20  ach.row of data 
21ab0 72 65 74 75 72 6e 65 64 20 62 79 20 65 78 65 63  returned by exec
21ac0 75 74 69 6e 67 20 74 68 65 20 53 45 4c 45 43 54  uting the SELECT
21ad0 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 49 66 20   statement. ^If 
21ae0 61 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73  a column-list is
21af0 0a 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 20  .specified, the 
21b00 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
21b10 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20  s in the result 
21b20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 6d 75  of the SELECT mu
21b30 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 0a 61  st be the same.a
21b40 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
21b50 69 74 65 6d 73 20 69 6e 20 74 68 65 20 63 6f 6c  items in the col
21b60 75 6d 6e 2d 6c 69 73 74 2e 20 5e 4f 74 68 65 72  umn-list. ^Other
21b70 77 69 73 65 2c 20 69 66 20 6e 6f 20 63 6f 6c 75  wise, if no colu
21b80 6d 6e 2d 6c 69 73 74 20 69 73 0a 73 70 65 63 69  mn-list is.speci
21b90 66 69 65 64 2c 20 74 68 65 20 6e 75 6d 62 65 72  fied, the number
21ba0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
21bb0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
21bc0 20 53 45 4c 45 43 54 20 6d 75 73 74 20 62 65 20   SELECT must be 
21bd0 74 68 65 20 73 61 6d 65 0a 61 73 20 74 68 65 20  the same.as the 
21be0 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
21bf0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
21c00 5e 41 6e 79 20 53 45 4c 45 43 54 20 73 74 61 74  ^Any SELECT stat
21c10 65 6d 65 6e 74 2c 20 69 6e 63 6c 75 64 69 6e 67  ement, including
21c20 0a 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  .[compound SELEC
21c30 54 73 5d 20 61 6e 64 20 53 45 4c 45 43 54 20 73  Ts] and SELECT s
21c40 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20 5b  tatements with [
21c50 4f 52 44 45 52 20 42 59 5d 20 61 6e 64 2f 6f 72  ORDER BY] and/or
21c60 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73 65 73   [LIMIT] clauses
21c70 2c 20 0a 6d 61 79 20 62 65 20 75 73 65 64 20 69  , .may be used i
21c80 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  n an INSERT stat
21c90 65 6d 65 6e 74 20 6f 66 20 74 68 69 73 20 66 6f  ement of this fo
21ca0 72 6d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20  rm...<li><p>The 
21cb0 74 68 69 72 64 20 66 6f 72 6d 20 6f 66 20 61 6e  third form of an
21cc0 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
21cd0 74 20 69 73 20 77 69 74 68 20 44 45 46 41 55 4c  t is with DEFAUL
21ce0 54 20 56 41 4c 55 45 53 2e 0a 5e 28 54 68 65 20  T VALUES..^(The 
21cf0 49 4e 53 45 52 54 20 2e 2e 2e 20 44 45 46 41 55  INSERT ... DEFAU
21d00 4c 54 20 56 41 4c 55 45 53 20 73 74 61 74 65 6d  LT VALUES statem
21d10 65 6e 74 20 69 6e 73 65 72 74 73 20 61 20 73 69  ent inserts a si
21d20 6e 67 6c 65 20 6e 65 77 20 72 6f 77 20 69 6e 74  ngle new row int
21d30 6f 20 74 68 65 0a 6e 61 6d 65 64 20 74 61 62 6c  o the.named tabl
21d40 65 2e 29 5e 20 5e 45 61 63 68 20 63 6f 6c 75 6d  e.)^ ^Each colum
21d50 6e 20 6f 66 20 74 68 65 20 6e 65 77 20 72 6f 77  n of the new row
21d60 20 69 73 20 70 6f 70 75 6c 61 74 65 64 20 77 69   is populated wi
21d70 74 68 20 69 74 73 20 0a 5b 64 65 66 61 75 6c 74  th its .[default
21d80 20 76 61 6c 75 65 5d 2c 20 6f 72 20 77 69 74 68   value], or with
21d90 20 61 20 4e 55 4c 4c 20 69 66 20 6e 6f 20 64 65   a NULL if no de
21da0 66 61 75 6c 74 20 76 61 6c 75 65 20 69 73 20 73  fault value is s
21db0 70 65 63 69 66 69 65 64 20 0a 61 73 20 70 61 72  pecified .as par
21dc0 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  t of the column 
21dd0 64 65 66 69 6e 69 74 69 6f 6e 20 69 6e 20 74 68  definition in th
21de0 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  e [CREATE TABLE]
21df0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 2f 75   statement...</u
21e00 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 52 45 50  l>..<p>^The "REP
21e10 4c 41 43 45 22 20 61 6e 64 20 22 49 4e 53 45 52  LACE" and "INSER
21e20 54 20 4f 52 20 3c 69 3e 61 63 74 69 6f 6e 3c 2f  T OR <i>action</
21e30 69 3e 22 20 66 6f 72 6d 73 20 73 70 65 63 69 66  i>" forms specif
21e40 79 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65  y an alternative
21e50 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66  .constraint conf
21e60 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
21e70 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65  algorithm to use
21e80 20 64 75 72 69 6e 67 20 74 68 69 73 20 6f 6e 65   during this one
21e90 20 49 4e 53 45 52 54 20 63 6f 6d 6d 61 6e 64 2e   INSERT command.
21ea0 0a 53 65 65 20 74 68 65 20 73 65 63 74 69 6f 6e  .See the section
21eb0 20 74 69 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46   titled [ON CONF
21ec0 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69  LICT] for additi
21ed0 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
21ee0 2e 0a 46 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c  ..For compatibil
21ef0 69 74 79 20 77 69 74 68 20 4d 79 53 51 4c 2c 20  ity with MySQL, 
21f00 5e 74 68 65 20 70 61 72 73 65 72 20 61 6c 6c 6f  ^the parser allo
21f10 77 73 20 74 68 65 20 75 73 65 20 6f 66 20 74 68  ws the use of th
21f20 65 0a 73 69 6e 67 6c 65 20 6b 65 79 77 6f 72 64  e.single keyword
21f30 20 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f 72   <a href="lang_r
21f40 65 70 6c 61 63 65 2e 68 74 6d 6c 22 3e 52 45 50  eplace.html">REP
21f50 4c 41 43 45 3c 2f 61 3e 20 61 73 20 61 6e 20 0a  LACE</a> as an .
21f60 61 6c 69 61 73 20 66 6f 72 20 22 49 4e 53 45 52  alias for "INSER
21f70 54 20 4f 52 20 52 45 50 4c 41 43 45 22 2e 0a 0a  T OR REPLACE"...
21f80 3c 70 3e 5e 28 54 68 65 20 6f 70 74 69 6f 6e 61  <p>^(The optiona
21f90 6c 20 22 3c 69 3e 73 63 68 65 6d 61 2d 6e 61 6d  l "<i>schema-nam
21fa0 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 22 20 70  e</i><b>.</b>" p
21fb0 72 65 66 69 78 20 6f 6e 20 74 68 65 20 0a 3c 79  refix on the .<y
21fc0 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65  yterm>table-name
21fd0 3c 2f 79 79 74 65 72 6d 3e 0a 69 73 20 73 75 70  </yyterm>.is sup
21fe0 70 6f 72 74 65 64 20 66 6f 72 20 74 6f 70 2d 6c  ported for top-l
21ff0 65 76 65 6c 20 49 4e 53 45 52 54 20 73 74 61 74  evel INSERT stat
22000 65 6d 65 6e 74 73 20 6f 6e 6c 79 2e 29 5e 20 20  ements only.)^  
22010 5e 54 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 20  ^The table name 
22020 6d 75 73 74 20 62 65 0a 75 6e 71 75 61 6c 69 66  must be.unqualif
22030 69 65 64 20 66 6f 72 20 49 4e 53 45 52 54 20 73  ied for INSERT s
22040 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 6f  tatements that o
22050 63 63 75 72 20 77 69 74 68 69 6e 20 5b 43 52 45  ccur within [CRE
22060 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61  ATE TRIGGER] sta
22070 74 65 6d 65 6e 74 73 2e 0a 5e 53 69 6d 69 6c 61  tements..^Simila
22080 72 6c 79 2c 20 74 68 65 20 22 44 45 46 41 55 4c  rly, the "DEFAUL
22090 54 20 56 41 4c 55 45 53 22 20 66 6f 72 6d 20 6f  T VALUES" form o
220a0 66 20 74 68 65 20 49 4e 53 45 52 54 20 73 74 61  f the INSERT sta
220b0 74 65 6d 65 6e 74 20 69 73 20 73 75 70 70 6f 72  tement is suppor
220c0 74 65 64 20 66 6f 72 0a 74 6f 70 2d 6c 65 76 65  ted for.top-leve
220d0 6c 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  l INSERT stateme
220e0 6e 74 73 20 6f 6e 6c 79 20 61 6e 64 20 6e 6f 74  nts only and not
220f0 20 66 6f 72 20 49 4e 53 45 52 54 20 73 74 61 74   for INSERT stat
22100 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 0a 74 72  ements within.tr
22110 69 67 67 65 72 73 2e 0a 3c 70 3e 0a 0a 3c 74 63  iggers..<p>..<tc
22120 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
22130 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22140 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22150 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22160 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22170 23 0a 53 65 63 74 69 6f 6e 20 7b 4f 4e 20 43 4f  #.Section {ON CO
22180 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63  NFLICT clause} c
22190 6f 6e 66 6c 69 63 74 20 7b 7b 63 6f 6e 66 6c 69  onflict {{confli
221a0 63 74 20 63 6c 61 75 73 65 7d 20 7b 4f 4e 20 43  ct clause} {ON C
221b0 4f 4e 46 4c 49 43 54 7d 7d 0a 0a 52 65 63 75 72  ONFLICT}}..Recur
221c0 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
221d0 6d 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73  m conflict-claus
221e0 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  e.</tcl>..<p>The
221f0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
22200 75 73 65 20 69 73 20 6e 6f 74 20 61 20 73 65 70  use is not a sep
22210 61 72 61 74 65 20 53 51 4c 20 63 6f 6d 6d 61 6e  arate SQL comman
22220 64 2e 20 20 49 74 20 69 73 20 61 0a 6e 6f 6e 2d  d.  It is a.non-
22230 73 74 61 6e 64 61 72 64 20 63 6c 61 75 73 65 20  standard clause 
22240 74 68 61 74 20 63 61 6e 20 61 70 70 65 61 72 20  that can appear 
22250 69 6e 20 6d 61 6e 79 20 6f 74 68 65 72 20 53 51  in many other SQ
22260 4c 20 63 6f 6d 6d 61 6e 64 73 2e 0a 49 74 20 69  L commands..It i
22270 73 20 67 69 76 65 6e 20 69 74 73 20 6f 77 6e 20  s given its own 
22280 73 65 63 74 69 6f 6e 20 69 6e 20 74 68 69 73 20  section in this 
22290 64 6f 63 75 6d 65 6e 74 20 62 65 63 61 75 73 65  document because
222a0 20 69 74 20 69 73 20 6e 6f 74 0a 70 61 72 74 20   it is not.part 
222b0 6f 66 20 73 74 61 6e 64 61 72 64 20 53 51 4c 20  of standard SQL 
222c0 61 6e 64 20 74 68 65 72 65 66 6f 72 65 20 6d 69  and therefore mi
222d0 67 68 74 20 6e 6f 74 20 62 65 20 66 61 6d 69 6c  ght not be famil
222e0 69 61 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  iar.</p>..<p>^Th
222f0 65 20 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65  e syntax for the
22300 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
22310 75 73 65 20 69 73 20 61 73 20 73 68 6f 77 6e 20  use is as shown 
22320 61 62 6f 76 65 20 66 6f 72 0a 74 68 65 20 43 52  above for.the CR
22330 45 41 54 45 20 54 41 42 4c 45 20 63 6f 6d 6d 61  EATE TABLE comma
22340 6e 64 2e 20 20 5e 46 6f 72 20 74 68 65 20 49 4e  nd.  ^For the IN
22350 53 45 52 54 20 61 6e 64 0a 55 50 44 41 54 45 20  SERT and.UPDATE 
22360 63 6f 6d 6d 61 6e 64 73 2c 20 74 68 65 20 6b 65  commands, the ke
22370 79 77 6f 72 64 73 20 22 4f 4e 20 43 4f 4e 46 4c  ywords "ON CONFL
22380 49 43 54 22 20 61 72 65 20 72 65 70 6c 61 63 65  ICT" are replace
22390 64 20 62 79 20 22 4f 52 22 20 73 6f 20 74 68 61  d by "OR" so tha
223a0 74 0a 74 68 65 20 73 79 6e 74 61 78 20 72 65 61  t.the syntax rea
223b0 64 73 20 6d 6f 72 65 20 6e 61 74 75 72 61 6c 6c  ds more naturall
223c0 79 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  y.  For example,
223d0 20 69 6e 73 74 65 61 64 20 6f 66 0a 22 49 4e 53   instead of."INS
223e0 45 52 54 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ERT ON CONFLICT 
223f0 49 47 4e 4f 52 45 22 20 77 65 20 68 61 76 65 20  IGNORE" we have 
22400 22 49 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f 52  "INSERT OR IGNOR
22410 45 22 2e 0a 54 68 65 20 6b 65 79 77 6f 72 64 73  E"..The keywords
22420 20 63 68 61 6e 67 65 20 62 75 74 20 74 68 65 20   change but the 
22430 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68 65 20 63  meaning of the c
22440 6c 61 75 73 65 20 69 73 20 74 68 65 20 73 61 6d  lause is the sam
22450 65 0a 65 69 74 68 65 72 20 77 61 79 2e 3c 2f 70  e.either way.</p
22460 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e  >..<p>The ON CON
22470 46 4c 49 43 54 20 63 6c 61 75 73 65 20 61 70 70  FLICT clause app
22480 6c 69 65 73 20 74 6f 20 5b 55 4e 49 51 55 45 5d  lies to [UNIQUE]
22490 2c 20 5b 4e 4f 54 20 4e 55 4c 4c 5d 2c 0a 5b 43  , [NOT NULL],.[C
224a0 48 45 43 4b 5d 2c 20 61 6e 64 20 5b 50 52 49 4d  HECK], and [PRIM
224b0 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61  ARY KEY] constra
224c0 69 6e 74 73 2e 0a 54 68 65 20 4f 4e 20 43 4f 4e  ints..The ON CON
224d0 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 20  FLICT algorithm 
224e0 64 6f 65 73 20 6e 6f 74 0a 61 70 70 6c 79 20 74  does not.apply t
224f0 6f 20 5b 46 4f 52 45 49 47 4e 20 4b 45 59 20 63  o [FOREIGN KEY c
22500 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 0a 54 68 65  onstraints]..The
22510 72 65 20 61 72 65 20 66 69 76 65 20 63 6f 6e 66  re are five conf
22520 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
22530 61 6c 67 6f 72 69 74 68 6d 20 63 68 6f 69 63 65  algorithm choice
22540 73 3a 0a 52 4f 4c 4c 42 41 43 4b 2c 20 41 42 4f  s:.ROLLBACK, ABO
22550 52 54 2c 20 46 41 49 4c 2c 20 49 47 4e 4f 52 45  RT, FAIL, IGNORE
22560 2c 20 61 6e 64 20 52 45 50 4c 41 43 45 2e 0a 5e  , and REPLACE..^
22570 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6e 66  The default conf
22580 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
22590 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 41 42 4f  algorithm is ABO
225a0 52 54 2e 20 20 54 68 69 73 0a 69 73 20 77 68 61  RT.  This.is wha
225b0 74 20 74 68 65 79 20 6d 65 61 6e 3a 3c 2f 70 3e  t they mean:</p>
225c0 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c 62 3e 52 4f  ..<dl>.<dt><b>RO
225d0 4c 4c 42 41 43 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a  LLBACK</b></dt>.
225e0 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e  <dd><p> ^When an
225f0 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73   applicable cons
22600 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
22610 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52 4f 4c   occurs, the ROL
22620 4c 42 41 43 4b 0a 72 65 73 6f 6c 75 74 69 6f 6e  LBACK.resolution
22630 20 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72 74   algorithm abort
22640 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 53 51  s the current SQ
22650 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68  L statement with
22660 0a 61 6e 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54  .an SQLITE_CONST
22670 52 41 49 4e 54 20 65 72 72 6f 72 20 61 6e 64 20  RAINT error and 
22680 72 6f 6c 6c 73 20 62 61 63 6b 20 74 68 65 20 63  rolls back the c
22690 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
226a0 6f 6e 2e 0a 5e 49 66 20 6e 6f 20 74 72 61 6e 73  on..^If no trans
226b0 61 63 74 69 6f 6e 20 69 73 0a 61 63 74 69 76 65  action is.active
226c0 20 28 6f 74 68 65 72 20 74 68 61 6e 20 74 68 65   (other than the
226d0 20 69 6d 70 6c 69 65 64 20 74 72 61 6e 73 61 63   implied transac
226e0 74 69 6f 6e 20 74 68 61 74 20 69 73 20 63 72 65  tion that is cre
226f0 61 74 65 64 20 6f 6e 20 65 76 65 72 79 0a 63 6f  ated on every.co
22700 6d 6d 61 6e 64 29 20 74 68 65 6e 20 74 68 65 20  mmand) then the 
22710 52 4f 4c 4c 42 41 43 4b 20 72 65 73 6f 6c 75 74  ROLLBACK resolut
22720 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 77 6f  ion algorithm wo
22730 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73 20  rks the same as 
22740 74 68 65 0a 41 42 4f 52 54 20 61 6c 67 6f 72 69  the.ABORT algori
22750 74 68 6d 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c  thm.</p></dd>..<
22760 64 74 3e 3c 62 3e 41 42 4f 52 54 3c 2f 62 3e 3c  dt><b>ABORT</b><
22770 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68  /dt>.<dd><p> ^Wh
22780 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65  en an applicable
22790 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
227a0 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68  ation occurs, th
227b0 65 20 41 42 4f 52 54 0a 72 65 73 6f 6c 75 74 69  e ABORT.resoluti
227c0 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f  on algorithm abo
227d0 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
227e0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 77 69  SQL statement.wi
227f0 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 43 4f 4e  th an SQLITE_CON
22800 53 54 52 41 49 4e 54 20 65 72 72 6f 72 20 61 6e  STRAINT error an
22810 64 20 62 61 63 6b 73 20 6f 75 74 20 61 6e 79 20  d backs out any 
22820 63 68 61 6e 67 65 73 0a 6d 61 64 65 20 62 79 20  changes.made by 
22830 74 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20  the current SQL 
22840 73 74 61 74 65 6d 65 6e 74 3b 20 62 75 74 20 63  statement; but c
22850 68 61 6e 67 65 73 20 63 61 75 73 65 64 0a 62 79  hanges caused.by
22860 20 70 72 69 6f 72 20 53 51 4c 20 73 74 61 74 65   prior SQL state
22870 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65  ments within the
22880 20 73 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f   same transactio
22890 6e 20 61 72 65 20 70 72 65 73 65 72 76 65 64 20  n are preserved 
228a0 61 6e 64 20 74 68 65 0a 74 72 61 6e 73 61 63 74  and the.transact
228b0 69 6f 6e 20 72 65 6d 61 69 6e 73 20 61 63 74 69  ion remains acti
228c0 76 65 2e 0a 54 68 69 73 20 69 73 20 74 68 65 20  ve..This is the 
228d0 64 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f 72  default behavior
228e0 20 61 6e 64 20 74 68 65 20 62 65 68 61 76 69 6f   and the behavio
228f0 72 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  r specified by t
22900 68 65 20 53 51 4c 0a 73 74 61 6e 64 61 72 64 2e  he SQL.standard.
22910 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c  </p></dd>..<dt><
22920 62 3e 46 41 49 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a  b>FAIL</b></dt>.
22930 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e  <dd><p> ^When an
22940 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73   applicable cons
22950 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
22960 20 6f 63 63 75 72 73 2c 20 74 68 65 20 46 41 49   occurs, the FAI
22970 4c 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  L.resolution alg
22980 6f 72 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68  orithm aborts th
22990 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74  e current SQL st
229a0 61 74 65 6d 65 6e 74 20 77 69 74 68 20 61 6e 0a  atement with an.
229b0 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
229c0 54 20 65 72 72 6f 72 2e 20 20 5e 42 75 74 20 74  T error.  ^But t
229d0 68 65 20 46 41 49 4c 20 72 65 73 6f 6c 75 74 69  he FAIL resoluti
229e0 6f 6e 20 64 6f 65 73 20 6e 6f 74 0a 62 61 63 6b  on does not.back
229f0 20 6f 75 74 20 70 72 69 6f 72 20 63 68 61 6e 67   out prior chang
22a00 65 73 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74  es of the SQL st
22a10 61 74 65 6d 65 6e 74 20 74 68 61 74 20 66 61 69  atement that fai
22a20 6c 65 64 20 6e 6f 72 20 64 6f 65 73 0a 69 74 20  led nor does.it 
22a30 65 6e 64 20 74 68 65 20 74 72 61 6e 73 61 63 74  end the transact
22a40 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c  ion..^For exampl
22a50 65 2c 20 69 66 20 61 6e 20 55 50 44 41 54 45 0a  e, if an UPDATE.
22a60 73 74 61 74 65 6d 65 6e 74 20 65 6e 63 6f 75 6e  statement encoun
22a70 74 65 72 65 64 20 61 20 63 6f 6e 73 74 72 61 69  tered a constrai
22a80 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 6e 20  nt violation on 
22a90 74 68 65 20 31 30 30 74 68 20 72 6f 77 20 74 68  the 100th row th
22aa0 61 74 0a 69 74 20 61 74 74 65 6d 70 74 73 20 74  at.it attempts t
22ab0 6f 20 75 70 64 61 74 65 2c 20 74 68 65 6e 20 74  o update, then t
22ac0 68 65 20 66 69 72 73 74 20 39 39 20 72 6f 77 20  he first 99 row 
22ad0 63 68 61 6e 67 65 73 20 61 72 65 20 70 72 65 73  changes are pres
22ae0 65 72 76 65 64 0a 62 75 74 20 63 68 61 6e 67 65  erved.but change
22af0 73 20 74 6f 20 72 6f 77 73 20 31 30 30 20 61 6e  s to rows 100 an
22b00 64 20 62 65 79 6f 6e 64 20 6e 65 76 65 72 20 6f  d beyond never o
22b10 63 63 75 72 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a  ccur.</p></dd>..
22b20 3c 64 74 3e 3c 62 3e 49 47 4e 4f 52 45 3c 2f 62  <dt><b>IGNORE</b
22b30 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e  ></dt>.<dd><p> ^
22b40 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62  When an applicab
22b50 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  le constraint vi
22b60 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
22b70 0a 74 68 65 20 49 47 4e 4f 52 45 20 72 65 73 6f  .the IGNORE reso
22b80 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
22b90 20 73 6b 69 70 73 20 74 68 65 20 6f 6e 65 20 72   skips the one r
22ba0 6f 77 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ow that contains
22bb0 0a 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  .the constraint 
22bc0 76 69 6f 6c 61 74 69 6f 6e 20 61 6e 64 20 63 6f  violation and co
22bd0 6e 74 69 6e 75 65 73 20 70 72 6f 63 65 73 73 69  ntinues processi
22be0 6e 67 20 73 75 62 73 65 71 75 65 6e 74 20 72 6f  ng subsequent ro
22bf0 77 73 0a 6f 66 20 74 68 65 20 53 51 4c 20 73 74  ws.of the SQL st
22c00 61 74 65 6d 65 6e 74 20 61 73 20 69 66 20 6e 6f  atement as if no
22c10 74 68 69 6e 67 20 77 65 6e 74 20 77 72 6f 6e 67  thing went wrong
22c20 2e 0a 4f 74 68 65 72 20 72 6f 77 73 20 62 65 66  ..Other rows bef
22c30 6f 72 65 20 61 6e 64 20 61 66 74 65 72 20 74 68  ore and after th
22c40 65 20 72 6f 77 20 74 68 61 74 0a 63 6f 6e 74 61  e row that.conta
22c50 69 6e 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61  ined the constra
22c60 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72  int violation ar
22c70 65 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70  e inserted or up
22c80 64 61 74 65 64 0a 6e 6f 72 6d 61 6c 6c 79 2e 20  dated.normally. 
22c90 5e 4e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 74  ^No error is ret
22ca0 75 72 6e 65 64 20 77 68 65 6e 20 74 68 65 20 49  urned when the I
22cb0 47 4e 4f 52 45 20 63 6f 6e 66 6c 69 63 74 20 72  GNORE conflict r
22cc0 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69  esolution.algori
22cd0 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e  thm is used.</p>
22ce0 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 52 45  </dd>..<dt><b>RE
22cf0 50 4c 41 43 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c  PLACE</b></dt>.<
22d00 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 20 5b  dd><p> ^When a [
22d10 55 4e 49 51 55 45 5d 20 6f 72 20 5b 50 52 49 4d  UNIQUE] or [PRIM
22d20 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61  ARY KEY] constra
22d30 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
22d40 63 75 72 73 2c 20 0a 74 68 65 20 52 45 50 4c 41  curs, .the REPLA
22d50 43 45 20 61 6c 67 6f 72 69 74 68 6d 0a 64 65 6c  CE algorithm.del
22d60 65 74 65 73 20 70 72 65 2d 65 78 69 73 74 69 6e  etes pre-existin
22d70 67 20 72 6f 77 73 20 74 68 61 74 20 61 72 65 20  g rows that are 
22d80 63 61 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 73  causing the cons
22d90 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
22da0 0a 70 72 69 6f 72 20 74 6f 20 69 6e 73 65 72 74  .prior to insert
22db0 69 6e 67 20 6f 72 20 75 70 64 61 74 69 6e 67 20  ing or updating 
22dc0 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
22dd0 61 6e 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20  and the command 
22de0 63 6f 6e 74 69 6e 75 65 73 20 0a 65 78 65 63 75  continues .execu
22df0 74 69 6e 67 20 6e 6f 72 6d 61 6c 6c 79 2e 0a 5e  ting normally..^
22e00 49 66 20 61 20 5b 4e 4f 54 20 4e 55 4c 4c 5d 20  If a [NOT NULL] 
22e10 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
22e20 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65  tion occurs, the
22e30 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63   REPLACE conflic
22e40 74 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 72 65 70  t.resolution rep
22e50 6c 61 63 65 73 20 74 68 65 20 4e 55 4c 4c 20 76  laces the NULL v
22e60 61 6c 75 65 20 77 69 74 68 0a 74 68 65 20 64 65  alue with.the de
22e70 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20  fault value for 
22e80 74 68 61 74 20 63 6f 6c 75 6d 6e 2c 20 6f 72 20  that column, or 
22e90 69 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 61  if the column ha
22ea0 73 20 6e 6f 20 64 65 66 61 75 6c 74 0a 76 61 6c  s no default.val
22eb0 75 65 2c 20 74 68 65 6e 20 74 68 65 20 41 42 4f  ue, then the ABO
22ec0 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  RT algorithm is 
22ed0 75 73 65 64 2e 0a 5e 49 66 20 61 20 5b 43 48 45  used..^If a [CHE
22ee0 43 4b 5d 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  CK] constraint v
22ef0 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
22f00 20 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e   the REPLACE con
22f10 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
22f20 0a 61 6c 67 6f 72 69 74 68 6d 20 61 6c 77 61 79  .algorithm alway
22f30 73 20 77 6f 72 6b 73 20 6c 69 6b 65 20 41 42 4f  s works like ABO
22f40 52 54 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65  RT.</p>..<p>^Whe
22f50 6e 20 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f  n the REPLACE co
22f60 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
22f70 6e 20 73 74 72 61 74 65 67 79 20 64 65 6c 65 74  n strategy delet
22f80 65 73 20 72 6f 77 73 20 69 6e 20 6f 72 64 65 72  es rows in order
22f90 20 74 6f 0a 73 61 74 69 73 66 79 20 61 20 63 6f   to.satisfy a co
22fa0 6e 73 74 72 61 69 6e 74 2c 20 5b 43 52 45 41 54  nstraint, [CREAT
22fb0 45 20 54 52 49 47 47 45 52 20 7c 20 64 65 6c 65  E TRIGGER | dele
22fc0 74 65 20 74 72 69 67 67 65 72 73 5d 20 66 69 72  te triggers] fir
22fd0 65 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  e if and only if
22fe0 0a 5b 72 65 63 75 72 73 69 76 65 5f 74 72 69 67  .[recursive_trig
22ff0 67 65 72 73 20 70 72 61 67 6d 61 20 7c 20 72 65  gers pragma | re
23000 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73  cursive triggers
23010 5d 20 61 72 65 20 65 6e 61 62 6c 65 64 2e 3c 2f  ] are enabled.</
23020 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 73 71 6c  p>..<p>^The [sql
23030 69 74 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b  ite3_update_hook
23040 20 7c 20 75 70 64 61 74 65 20 68 6f 6f 6b 5d 20   | update hook] 
23050 69 73 20 6e 6f 74 20 69 6e 76 6f 6b 65 64 20 66  is not invoked f
23060 6f 72 20 72 6f 77 73 20 74 68 61 74 0a 61 72 65  or rows that.are
23070 20 64 65 6c 65 74 65 64 20 62 79 20 74 68 65 20   deleted by the 
23080 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74  REPLACE conflict
23090 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73 74 72 61   resolution stra
230a0 74 65 67 79 2e 20 20 5e 4e 6f 72 20 64 6f 65 73  tegy.  ^Nor does
230b0 0a 52 45 50 4c 41 43 45 20 69 6e 63 72 65 6d 65  .REPLACE increme
230c0 6e 74 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  nt the [sqlite3_
230d0 63 68 61 6e 67 65 73 20 7c 20 63 68 61 6e 67 65  changes | change
230e0 20 63 6f 75 6e 74 65 72 5d 2e 0a 54 68 65 20 65   counter]..The e
230f0 78 63 65 70 74 69 6f 6e 61 6c 20 62 65 68 61 76  xceptional behav
23100 69 6f 72 73 20 64 65 66 69 6e 65 64 20 69 6e 20  iors defined in 
23110 74 68 69 73 20 70 61 72 61 67 72 61 70 68 20 6d  this paragraph m
23120 69 67 68 74 20 63 68 61 6e 67 65 20 0a 69 6e 20  ight change .in 
23130 61 20 66 75 74 75 72 65 20 72 65 6c 65 61 73 65  a future release
23140 2e 3c 2f 70 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e  .</p>.</dl>..<p>
23150 5e 54 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 73  ^The algorithm s
23160 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 20  pecified in the 
23170 4f 52 20 63 6c 61 75 73 65 20 6f 66 20 61 6e 20  OR clause of an 
23180 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
23190 0a 6f 76 65 72 72 69 64 65 73 20 61 6e 79 20 61  .overrides any a
231a0 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66 69  lgorithm specifi
231b0 65 64 20 69 6e 20 61 20 43 52 45 41 54 45 20 54  ed in a CREATE T
231c0 41 42 4c 45 2e 0a 5e 49 66 20 6e 6f 20 61 6c 67  ABLE..^If no alg
231d0 6f 72 69 74 68 6d 20 69 73 20 73 70 65 63 69 66  orithm is specif
231e0 69 65 64 20 61 6e 79 77 68 65 72 65 2c 20 74 68  ied anywhere, th
231f0 65 20 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68  e ABORT algorith
23200 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a  m is used.</p>..
23210 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
23220 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23230 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23260 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 52 45 49  ####.Section REI
23270 4e 44 45 58 20 72 65 69 6e 64 65 78 20 52 45 49  NDEX reindex REI
23280 4e 44 45 58 0a 0a 52 65 63 75 72 73 69 76 65 42  NDEX..RecursiveB
23290 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 65 69  ubbleDiagram rei
232a0 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  ndex-stmt.</tcl>
232b0 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 49 4e 44 45  ..<p>^The REINDE
232c0 58 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65  X command is use
232d0 64 20 74 6f 20 64 65 6c 65 74 65 20 61 6e 64 20  d to delete and 
232e0 72 65 63 72 65 61 74 65 20 69 6e 64 69 63 65 73  recreate indices
232f0 20 66 72 6f 6d 20 73 63 72 61 74 63 68 2e 0a 54   from scratch..T
23300 68 69 73 20 69 73 20 75 73 65 66 75 6c 20 77 68  his is useful wh
23310 65 6e 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f  en the definitio
23320 6e 20 6f 66 20 61 20 63 6f 6c 6c 61 74 69 6f 6e  n of a collation
23330 20 73 65 71 75 65 6e 63 65 20 68 61 73 20 63 68   sequence has ch
23340 61 6e 67 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  anged..</p>..<p>
23350 5e 49 66 20 74 68 65 20 52 45 49 4e 44 45 58 20  ^If the REINDEX 
23360 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 66  keyword is not f
23370 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6c  ollowed by a col
23380 6c 61 74 69 6f 6e 2d 73 65 71 75 65 6e 63 65 20  lation-sequence 
23390 6f 72 20 64 61 74 61 62 61 73 65 20 0a 6f 62 6a  or database .obj
233a0 65 63 74 20 69 64 65 6e 74 69 66 69 65 72 2c 20  ect identifier, 
233b0 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73  then all indices
233c0 20 69 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64   in all attached
233d0 20 64 61 74 61 62 61 73 65 73 20 61 72 65 20 72   databases are r
233e0 65 62 75 69 6c 74 2e 0a 0a 3c 70 3e 5e 49 66 20  ebuilt...<p>^If 
233f0 74 68 65 20 52 45 49 4e 44 45 58 20 6b 65 79 77  the REINDEX keyw
23400 6f 72 64 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20  ord is followed 
23410 62 79 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73  by a collation-s
23420 65 71 75 65 6e 63 65 20 6e 61 6d 65 2c 20 74 68  equence name, th
23430 65 6e 0a 61 6c 6c 20 69 6e 64 69 63 65 73 20 69  en.all indices i
23440 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  n all attached d
23450 61 74 61 62 61 73 65 73 20 74 68 61 74 20 75 73  atabases that us
23460 65 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 6c  e the named coll
23470 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 73 0a  ation sequences.
23480 61 72 65 20 72 65 63 72 65 61 74 65 64 2e 20 0a  are recreated. .
23490 0a 3c 70 3e 5e 4f 72 2c 20 69 66 20 74 68 65 20  .<p>^Or, if the 
234a0 61 72 67 75 6d 65 6e 74 20 61 74 74 61 63 68 65  argument attache
234b0 64 20 74 6f 20 74 68 65 20 52 45 49 4e 44 45 58  d to the REINDEX
234c0 20 69 64 65 6e 74 69 66 69 65 73 20 61 20 73 70   identifies a sp
234d0 65 63 69 66 69 63 20 0a 64 61 74 61 62 61 73 65  ecific .database
234e0 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 61 6c 6c   table, then all
234f0 20 69 6e 64 69 63 65 73 20 61 74 74 61 63 68 65   indices attache
23500 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  d to the databas
23510 65 20 74 61 62 6c 65 20 61 72 65 20 72 65 62 75  e table are rebu
23520 69 6c 74 2e 20 0a 5e 49 66 20 69 74 20 69 64 65  ilt. .^If it ide
23530 6e 74 69 66 69 65 73 20 61 20 73 70 65 63 69 66  ntifies a specif
23540 69 63 20 64 61 74 61 62 61 73 65 20 69 6e 64 65  ic database inde
23550 78 2c 20 74 68 65 6e 20 6a 75 73 74 20 74 68 61  x, then just tha
23560 74 20 69 6e 64 65 78 20 69 73 20 72 65 63 72 65  t index is recre
23570 61 74 65 64 2e 0a 0a 3c 70 3e 5e 46 6f 72 20 61  ated...<p>^For a
23580 20 63 6f 6d 6d 61 6e 64 20 6f 66 20 74 68 65 20   command of the 
23590 66 6f 72 6d 20 22 52 45 49 4e 44 45 58 20 3c 69  form "REINDEX <i
235a0 3e 6e 61 6d 65 3c 2f 69 3e 22 2c 20 61 20 6d 61  >name</i>", a ma
235b0 74 63 68 0a 61 67 61 69 6e 73 74 20 3c 79 79 74  tch.against <yyt
235c0 65 72 6d 3e 63 6f 6c 6c 61 74 69 6f 6e 2d 6e 61  erm>collation-na
235d0 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 74 61 6b 65  me</yyterm> take
235e0 73 20 70 72 65 63 65 64 65 6e 63 65 20 6f 76 65  s precedence ove
235f0 72 20 61 20 6d 61 74 63 68 0a 61 67 61 69 6e 73  r a match.agains
23600 74 20 3c 79 79 74 65 72 6d 3e 69 6e 64 65 78 2d  t <yyterm>index-
23610 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 6f 72  name</yyterm> or
23620 20 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6e   <yyterm>table-n
23630 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 2e 0a 54 68  ame</yyterm>..Th
23640 69 73 20 61 6d 62 69 67 75 69 74 79 20 69 6e 20  is ambiguity in 
23650 74 68 65 20 73 79 6e 74 61 78 20 6d 61 79 20 62  the syntax may b
23660 65 20 61 76 6f 69 64 65 64 20 62 79 20 61 6c 77  e avoided by alw
23670 61 79 73 20 73 70 65 63 69 66 79 69 6e 67 20 61  ays specifying a
23680 0a 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d  .<yyterm>schema-
23690 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 77 68  name</yyterm> wh
236a0 65 6e 20 72 65 69 6e 64 65 78 69 6e 67 20 61 20  en reindexing a 
236b0 73 70 65 63 69 66 69 63 20 74 61 62 6c 65 20 6f  specific table o
236c0 72 20 69 6e 64 65 78 2e 0a 0a 3c 74 63 6c 3e 0a  r index...<tcl>.
236d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
236e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
236f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23710 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
23720 53 65 63 74 69 6f 6e 20 52 45 50 4c 41 43 45 20  Section REPLACE 
23730 72 65 70 6c 61 63 65 20 52 45 50 4c 41 43 45 0a  replace REPLACE.
23740 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
23750 20 52 45 50 4c 41 43 45 20 63 6f 6d 6d 61 6e 64   REPLACE command
23760 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72   is an alias for
23770 20 74 68 65 20 22 5b 4f 4e 20 43 4f 4e 46 4c 49   the "[ON CONFLI
23780 43 54 20 7c 20 49 4e 53 45 52 54 20 4f 52 20 52  CT | INSERT OR R
23790 45 50 4c 41 43 45 5d 22 0a 76 61 72 69 61 6e 74  EPLACE]".variant
237a0 20 6f 66 20 74 68 65 20 5b 49 4e 53 45 52 54 5d   of the [INSERT]
237b0 20 63 6f 6d 6d 61 6e 64 2e 20 20 0a 54 68 69 73   command.  .This
237c0 20 61 6c 69 61 73 20 69 73 20 70 72 6f 76 69 64   alias is provid
237d0 65 64 20 66 6f 72 20 63 6f 6d 70 61 74 69 62 69  ed for compatibi
237e0 6c 69 74 79 20 6f 74 68 65 72 20 53 51 4c 20 64  lity other SQL d
237f0 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 2e  atabase engines.
23800 20 20 53 65 65 20 74 68 65 20 0a 5b 49 4e 53 45    See the .[INSE
23810 52 54 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f 63 75  RT] command docu
23820 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61 64  mentation for ad
23830 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
23840 74 69 6f 6e 2e 3c 2f 70 3e 20 20 0a 0a 3c 74 63  tion.</p>  ..<tc
23850 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
23860 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23870 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23880 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23890 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
238a0 23 23 0a 53 65 63 74 69 6f 6e 20 7b 57 49 54 48  ##.Section {WITH
238b0 20 63 6c 61 75 73 65 7d 20 77 69 74 68 20 7b 7b   clause} with {{
238c0 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
238d0 72 65 73 73 69 6f 6e 73 7d 20 57 49 54 48 7d 0a  ressions} WITH}.
238e0 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
238f0 44 69 61 67 72 61 6d 20 77 69 74 68 2d 63 6c 61  Diagram with-cla
23900 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43  use.</tcl>..<p>C
23910 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20 45 78 70 72  ommon Table Expr
23920 65 73 73 69 6f 6e 73 20 6f 72 20 43 54 45 73 20  essions or CTEs 
23930 61 63 74 20 6c 69 6b 65 20 74 65 6d 70 6f 72 61  act like tempora
23940 72 79 20 5b 76 69 65 77 73 5d 20 74 68 61 74 20  ry [views] that 
23950 65 78 69 73 74 0a 6f 6e 6c 79 20 66 6f 72 20 74  exist.only for t
23960 68 65 20 64 75 72 61 74 69 6f 6e 20 6f 66 20 61  he duration of a
23970 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74   single SQL stat
23980 65 6d 65 6e 74 2e 20 20 54 68 65 72 65 20 61 72  ement.  There ar
23990 65 20 74 77 6f 20 6b 69 6e 64 73 20 6f 66 0a 63  e two kinds of.c
239a0 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
239b0 65 73 73 69 6f 6e 73 3a 20 22 6f 72 64 69 6e 61  essions: "ordina
239c0 72 79 22 20 61 6e 64 20 22 72 65 63 75 72 73 69  ry" and "recursi
239d0 76 65 22 2e 20 4f 72 64 69 6e 61 72 79 20 0a 63  ve". Ordinary .c
239e0 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
239f0 65 73 73 69 6f 6e 73 20 61 72 65 20 68 65 6c 70  essions are help
23a00 66 75 6c 20 66 6f 72 20 6d 61 6b 69 6e 67 0a 71  ful for making.q
23a10 75 65 72 69 65 73 20 65 61 73 69 65 72 20 74 6f  ueries easier to
23a20 20 75 6e 64 65 72 73 74 61 6e 64 20 62 79 20 66   understand by f
23a30 61 63 74 6f 72 69 6e 67 0a 73 75 62 71 75 65 72  actoring.subquer
23a40 69 65 73 20 6f 75 74 20 6f 66 20 74 68 65 20 6d  ies out of the m
23a50 61 69 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ain SQL statemen
23a60 74 2e 0a 52 65 63 75 72 73 69 76 65 20 63 6f 6d  t..Recursive com
23a70 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
23a80 73 69 6f 6e 73 0a 70 72 6f 76 69 64 65 20 74 68  sions.provide th
23a90 65 20 61 62 69 6c 69 74 79 20 74 6f 20 64 6f 20  e ability to do 
23aa0 68 69 65 72 61 72 63 68 69 63 61 6c 20 6f 72 0a  hierarchical or.
23ab0 72 65 63 75 72 73 69 76 65 20 71 75 65 72 69 65  recursive querie
23ac0 73 20 6f 66 20 74 72 65 65 73 20 61 6e 64 20 67  s of trees and g
23ad0 72 61 70 68 73 2c 20 61 20 63 61 70 61 62 69 6c  raphs, a capabil
23ae0 69 74 79 0a 74 68 61 74 20 69 73 20 6e 6f 74 20  ity.that is not 
23af0 6f 74 68 65 72 77 69 73 65 20 61 76 61 69 6c 61  otherwise availa
23b00 62 6c 65 20 69 6e 20 74 68 65 20 53 51 4c 20 6c  ble in the SQL l
23b10 61 6e 67 75 61 67 65 2e 0a 0a 3c 70 3e 41 6c 6c  anguage...<p>All
23b20 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
23b30 70 72 65 73 73 69 6f 6e 73 20 28 6f 72 64 69 6e  pressions (ordin
23b40 61 72 79 20 61 6e 64 20 72 65 63 75 72 73 69 76  ary and recursiv
23b50 65 29 20 61 72 65 20 0a 63 72 65 61 74 65 64 20  e) are .created 
23b60 62 79 20 70 72 65 70 65 6e 64 69 6e 67 20 61 20  by prepending a 
23b70 57 49 54 48 20 63 6c 61 75 73 65 20 69 6e 20 66  WITH clause in f
23b80 72 6f 6e 74 20 6f 66 20 61 20 5b 53 45 4c 45 43  ront of a [SELEC
23b90 54 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 20 5b 44  T], [INSERT], [D
23ba0 45 4c 45 54 45 5d 2c 0a 6f 72 20 5b 55 50 44 41  ELETE],.or [UPDA
23bb0 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  TE] statement.  
23bc0 41 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c  A single WITH cl
23bd0 61 75 73 65 20 63 61 6e 20 73 70 65 63 69 66 79  ause can specify
23be0 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 63 6f 6d   one or more.com
23bf0 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
23c00 73 69 6f 6e 73 2c 20 73 6f 6d 65 20 6f 66 20 77  sions, some of w
23c10 68 69 63 68 20 61 72 65 20 6f 72 64 69 6e 61 72  hich are ordinar
23c20 79 20 61 6e 64 20 73 6f 6d 65 20 6f 66 20 77 68  y and some of wh
23c30 69 63 68 0a 61 72 65 20 72 65 63 75 72 73 69 76  ich.are recursiv
23c40 65 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  e...<tcl>hd_frag
23c50 6d 65 6e 74 20 6f 72 64 69 6e 61 72 79 63 74 65  ment ordinarycte
23c60 20 7b 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f   {ordinary commo
23c70 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
23c80 6f 6e 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f  ons}</tcl>.<h3>O
23c90 72 64 69 6e 61 72 79 20 43 6f 6d 6d 6f 6e 20 54  rdinary Common T
23ca0 61 62 6c 65 20 45 78 70 72 65 73 73 69 6f 6e 73  able Expressions
23cb0 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 6e 20 6f 72 64  </h3>..<p>An ord
23cc0 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62  inary common tab
23cd0 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 20 77 6f  le expression wo
23ce0 72 6b 73 20 61 73 20 69 66 20 69 74 20 77 65 72  rks as if it wer
23cf0 65 20 61 20 5b 76 69 65 77 5d 20 74 68 61 74 0a  e a [view] that.
23d00 65 78 69 73 74 73 20 66 6f 72 20 74 68 65 20 64  exists for the d
23d10 75 72 61 74 69 6f 6e 20 6f 66 20 61 20 73 69 6e  uration of a sin
23d20 67 6c 65 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  gle statement.  
23d30 4f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20  Ordinary common 
23d40 74 61 62 6c 65 0a 65 78 70 72 65 73 73 69 6f 6e  table.expression
23d50 73 20 61 72 65 20 75 73 65 66 75 6c 20 66 6f 72  s are useful for
23d60 20 66 61 63 74 6f 72 69 6e 67 20 6f 75 74 20 73   factoring out s
23d70 75 62 71 75 65 72 69 65 73 20 61 6e 64 20 6d 61  ubqueries and ma
23d80 6b 69 6e 67 20 74 68 65 20 6f 76 65 72 61 6c 6c  king the overall
23d90 0a 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 65  .SQL statement e
23da0 61 73 69 65 72 20 74 6f 20 72 65 61 64 20 61 6e  asier to read an
23db0 64 20 75 6e 64 65 72 73 74 61 6e 64 2e 0a 0a 3c  d understand...<
23dc0 70 3e 41 20 57 49 54 48 20 63 6c 61 75 73 65 20  p>A WITH clause 
23dd0 63 61 6e 20 63 6f 6e 74 61 69 6e 20 6f 72 64 69  can contain ordi
23de0 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c  nary common tabl
23df0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76  e expressions ev
23e00 65 6e 20 69 66 0a 69 74 20 69 6e 63 6c 75 64 65  en if.it include
23e10 73 20 74 68 65 20 52 45 43 55 52 53 49 56 45 20  s the RECURSIVE 
23e20 6b 65 79 77 6f 72 64 2e 20 20 54 68 65 20 75 73  keyword.  The us
23e30 65 20 6f 66 20 52 45 43 55 52 53 49 56 45 20 64  e of RECURSIVE d
23e40 6f 65 73 20 6e 6f 74 20 66 6f 72 63 65 0a 63 6f  oes not force.co
23e50 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
23e60 73 73 69 6f 6e 73 20 74 6f 20 62 65 20 72 65 63  ssions to be rec
23e70 75 72 73 69 76 65 2e 0a 0a 3c 74 63 6c 3e 0a 68  ursive...<tcl>.h
23e80 64 5f 66 72 61 67 6d 65 6e 74 20 72 65 63 75 72  d_fragment recur
23e90 73 69 76 65 63 74 65 20 7b 72 65 63 75 72 73 69  sivecte {recursi
23ea0 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  ve common table 
23eb0 65 78 70 72 65 73 73 69 6f 6e 73 7d 20 5c 0a 7b  expressions} \.{
23ec0 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e  recursive common
23ed0 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
23ee0 6e 7d 20 7b 72 65 63 75 72 73 69 76 65 20 71 75  n} {recursive qu
23ef0 65 72 79 7d 0a 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  ery}.</tcl>.<h3>
23f00 52 65 63 75 72 73 69 76 65 20 43 6f 6d 6d 6f 6e  Recursive Common
23f10 20 54 61 62 6c 65 20 45 78 70 72 65 73 73 69 6f   Table Expressio
23f20 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20 72 65  ns</h3>..<p>A re
23f30 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74  cursive common t
23f40 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 20  able expression 
23f50 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 77  can be used to w
23f60 72 69 74 65 20 61 20 71 75 65 72 79 20 74 68 61  rite a query tha
23f70 74 0a 77 61 6c 6b 73 20 61 20 74 72 65 65 20 6f  t.walks a tree o
23f80 72 20 67 72 61 70 68 2e 20 20 41 20 72 65 63 75  r graph.  A recu
23f90 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62  rsive common tab
23fa0 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 20 68 61  le expression ha
23fb0 73 20 74 68 65 20 73 61 6d 65 0a 62 61 73 69 63  s the same.basic
23fc0 20 73 79 6e 74 61 78 20 61 73 20 61 6e 20 6f 72   syntax as an or
23fd0 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61  dinary common ta
23fe0 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  ble expression, 
23ff0 62 75 74 20 77 69 74 68 20 74 68 65 20 66 6f 6c  but with the fol
24000 6c 6f 77 69 6e 67 0a 61 64 64 69 74 69 6f 6e 61  lowing.additiona
24010 6c 20 66 65 61 74 75 72 65 73 3a 0a 0a 3c 6f 6c  l features:..<ol
24020 3e 0a 3c 6c 69 3e 20 54 68 65 20 22 5b 73 65 6c  >.<li> The "[sel
24030 65 63 74 2d 73 74 6d 74 5d 22 0a 20 20 20 20 20  ect-stmt]".     
24040 6d 75 73 74 20 62 65 20 61 20 5b 63 6f 6d 70 6f  must be a [compo
24050 75 6e 64 20 73 65 6c 65 63 74 5d 20 77 68 65 72  und select] wher
24060 65 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74  e the right-most
24070 20 5b 63 6f 6d 70 6f 75 6e 64 2d 6f 70 65 72 61   [compound-opera
24080 74 6f 72 5d 20 69 73 0a 20 20 20 20 20 65 69 74  tor] is.     eit
24090 68 65 72 20 55 4e 49 4f 4e 20 6f 72 20 55 4e 49  her UNION or UNI
240a0 4f 4e 20 41 4c 4c 2e 0a 3c 6c 69 3e 20 54 68 65  ON ALL..<li> The
240b0 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 6f 6e 20   table named on 
240c0 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 73 69  the left-hand si
240d0 64 65 20 6f 66 20 74 68 65 20 41 53 20 6b 65 79  de of the AS key
240e0 77 6f 72 64 20 6d 75 73 74 20 61 70 70 65 61 72  word must appear
240f0 0a 20 20 20 20 20 65 78 61 63 74 6c 79 20 6f 6e  .     exactly on
24100 63 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  ce in the FROM c
24110 6c 61 75 73 65 20 6f 66 20 74 68 65 20 72 69 67  lause of the rig
24120 68 74 2d 6d 6f 73 74 20 53 45 4c 45 43 54 20 73  ht-most SELECT s
24130 74 61 74 65 6d 65 6e 74 0a 20 20 20 20 20 6f 66  tatement.     of
24140 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 73 65   the compound se
24150 6c 65 63 74 2c 20 61 6e 64 20 6e 6f 77 68 65 72  lect, and nowher
24160 65 20 65 6c 73 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c  e else..</ol>..<
24170 70 3e 54 6f 20 70 75 74 20 69 74 20 61 6e 6f 74  p>To put it anot
24180 68 65 72 20 77 61 79 2c 20 61 20 72 65 63 75 72  her way, a recur
24190 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c  sive common tabl
241a0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 75 73  e expression mus
241b0 74 0a 6c 6f 6f 6b 20 6c 69 6b 65 20 74 68 65 20  t.look like the 
241c0 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 0a 3c 74 63 6c  following:..<tcl
241d0 3e 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  >RecursiveBubble
241e0 44 69 61 67 72 61 6d 20 72 65 63 75 72 73 69 76  Diagram recursiv
241f0 65 2d 63 74 65 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  e-cte</tcl>..<p>
24200 43 61 6c 6c 20 74 68 65 20 74 61 62 6c 65 20 6e  Call the table n
24210 61 6d 65 64 20 62 79 20 74 68 65 20 5b 63 74 65  amed by the [cte
24220 2d 74 61 62 6c 65 2d 6e 61 6d 65 5d 20 69 6e 20  -table-name] in 
24230 61 20 72 65 63 75 72 73 69 76 65 0a 63 6f 6d 6d  a recursive.comm
24240 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
24250 69 6f 6e 20 74 68 65 20 22 72 65 63 75 72 73 69  ion the "recursi
24260 76 65 20 74 61 62 6c 65 22 2e 0a 49 6e 20 74 68  ve table"..In th
24270 65 20 5b 72 65 63 75 72 73 69 76 65 2d 63 74 65  e [recursive-cte
24280 5d 20 62 75 62 62 6c 65 20 64 69 61 67 72 61 6d  ] bubble diagram
24290 20 61 62 6f 76 65 2c 20 74 68 65 20 72 65 63 75   above, the recu
242a0 72 73 69 76 65 0a 74 61 62 6c 65 20 6d 75 73 74  rsive.table must
242b0 20 61 70 70 65 61 72 20 65 78 61 63 74 6c 79 20   appear exactly 
242c0 6f 6e 63 65 20 69 6e 20 74 68 65 20 46 52 4f 4d  once in the FROM
242d0 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 0a   clause of the .
242e0 3c 79 79 74 65 72 6d 3e 72 65 63 75 72 73 69 76  <yyterm>recursiv
242f0 65 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d  e-select</yyterm
24300 3e 0a 61 6e 64 20 6d 75 73 74 20 6e 6f 74 20 61  >.and must not a
24310 70 70 65 61 72 20 61 6e 79 77 68 65 72 65 20 65  ppear anywhere e
24320 6c 73 65 20 69 6e 20 65 69 74 68 65 72 20 74 68  lse in either th
24330 65 0a 3c 79 79 74 65 72 6d 3e 69 6e 69 74 69 61  e.<yyterm>initia
24340 6c 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d  l-select</yyterm
24350 3e 20 6f 72 20 74 68 65 0a 3c 79 79 74 65 72 6d  > or the.<yyterm
24360 3e 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63  >recursive-selec
24370 74 3c 2f 79 79 74 65 72 6d 3e 2c 20 69 6e 63 6c  t</yyterm>, incl
24380 75 64 69 6e 67 20 73 75 62 71 75 65 72 69 65 73  uding subqueries
24390 2e 0a 54 68 65 20 3c 79 79 74 65 72 6d 3e 69 6e  ..The <yyterm>in
243a0 69 74 69 61 6c 2d 73 65 6c 65 63 74 3c 2f 79 79  itial-select</yy
243b0 74 65 72 6d 3e 20 6d 61 79 20 62 65 0a 61 20 5b  term> may be.a [
243c0 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 5d  compound select]
243d0 2c 20 62 75 74 20 69 74 20 6d 61 79 20 6e 6f 74  , but it may not
243e0 20 69 6e 63 6c 75 64 65 20 61 6e 20 4f 52 44 45   include an ORDE
243f0 52 20 42 59 2c 20 4c 49 4d 49 54 2c 20 6f 72 20  R BY, LIMIT, or 
24400 4f 46 46 53 45 54 2e 0a 54 68 65 20 72 65 63 75  OFFSET..The recu
24410 72 73 69 76 65 2d 73 65 6c 65 63 74 20 6d 75 73  rsive-select mus
24420 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 73 65  t be a simple se
24430 6c 65 63 74 2c 20 6e 6f 74 20 61 20 63 6f 6d 70  lect, not a comp
24440 6f 75 6e 64 2e 20 20 54 68 65 0a 72 65 63 75 72  ound.  The.recur
24450 73 69 76 65 2d 73 65 6c 65 63 74 20 69 73 20 61  sive-select is a
24460 6c 6c 6f 77 65 64 20 74 6f 20 69 6e 63 6c 75 64  llowed to includ
24470 65 20 61 6e 20 4f 52 44 45 52 20 42 59 2c 20 4c  e an ORDER BY, L
24480 49 4d 49 54 2c 20 61 6e 64 2f 6f 72 20 4f 46 46  IMIT, and/or OFF
24490 53 45 54 2e 0a 0a 3c 70 3e 54 68 65 20 62 61 73  SET...<p>The bas
244a0 69 63 20 61 6c 67 6f 72 69 74 68 6d 20 66 6f 72  ic algorithm for
244b0 20 63 6f 6d 70 75 74 69 6e 67 20 74 68 65 20 63   computing the c
244c0 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 72 65  ontent of the re
244d0 63 75 72 73 69 76 65 20 74 61 62 6c 65 0a 69 73  cursive table.is
244e0 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f   as follows:..<o
244f0 6c 3e 0a 3c 6c 69 3e 20 52 75 6e 20 74 68 65 20  l>.<li> Run the 
24500 3c 79 79 74 65 72 6d 3e 69 6e 69 74 69 61 6c 2d  <yyterm>initial-
24510 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20  select</yyterm> 
24520 61 6e 64 20 61 64 64 20 74 68 65 20 72 65 73 75  and add the resu
24530 6c 74 73 20 74 6f 20 61 20 71 75 65 75 65 2e 0a  lts to a queue..
24540 3c 6c 69 3e 20 57 68 69 6c 65 20 74 68 65 20 71  <li> While the q
24550 75 65 75 65 20 69 73 20 6e 6f 74 20 65 6d 70 74  ueue is not empt
24560 79 3a 0a 3c 6f 6c 20 74 79 70 65 3d 22 61 22 3e  y:.<ol type="a">
24570 0a 3c 6c 69 3e 20 45 78 74 72 61 63 74 20 61 20  .<li> Extract a 
24580 73 69 6e 67 6c 65 20 72 6f 77 20 66 72 6f 6d 20  single row from 
24590 74 68 65 20 71 75 65 75 65 2e 0a 3c 6c 69 3e 20  the queue..<li> 
245a0 49 6e 73 65 72 74 20 74 68 61 74 20 73 69 6e 67  Insert that sing
245b0 6c 65 20 72 6f 77 20 69 6e 74 6f 20 74 68 65 20  le row into the 
245c0 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 0a  recursive table.
245d0 3c 6c 69 3e 20 50 72 65 74 65 6e 64 20 74 68 61  <li> Pretend tha
245e0 74 20 74 68 65 20 73 69 6e 67 6c 65 20 72 6f 77  t the single row
245f0 20 6a 75 73 74 20 65 78 74 72 61 63 74 65 64 20   just extracted 
24600 69 73 20 74 68 65 20 6f 6e 6c 79 0a 20 20 20 20  is the only.    
24610 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65 63 75   row in the recu
24620 72 73 69 76 65 20 74 61 62 6c 65 20 61 6e 64 20  rsive table and 
24630 72 75 6e 20 74 68 65 20 72 65 63 75 72 73 69 76  run the recursiv
24640 65 2d 73 65 6c 65 63 74 2c 0a 20 20 20 20 20 61  e-select,.     a
24650 64 64 69 6e 67 20 61 6c 6c 20 72 65 73 75 6c 74  dding all result
24660 73 20 74 6f 20 74 68 65 20 71 75 65 75 65 2e 0a  s to the queue..
24670 3c 2f 6f 6c 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  </ol>.</ol>..<p>
24680 54 68 65 20 62 61 73 69 63 20 70 72 6f 63 65 64  The basic proced
24690 75 72 65 20 61 62 6f 76 65 20 6d 61 79 20 6d 6f  ure above may mo
246a0 64 69 66 69 65 64 20 62 79 20 74 68 65 20 66 6f  dified by the fo
246b0 6c 6c 6f 77 69 6e 67 20 61 64 64 69 74 69 6f 6e  llowing addition
246c0 61 6c 20 72 75 6c 65 73 3a 0a 0a 3c 75 6c 3e 0a  al rules:..<ul>.
246d0 3c 6c 69 3e 3c 70 3e 0a 20 20 49 66 20 61 20 55  <li><p>.  If a U
246e0 4e 49 4f 4e 20 6f 70 65 72 61 74 6f 72 20 63 6f  NION operator co
246f0 6e 6e 65 63 74 73 20 74 68 65 20 3c 79 79 74 65  nnects the <yyte
24700 72 6d 3e 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63  rm>initial-selec
24710 74 3c 2f 79 79 74 65 72 6d 3e 20 77 69 74 68 20  t</yyterm> with 
24720 74 68 65 0a 20 20 3c 79 79 74 65 72 6d 3e 72 65  the.  <yyterm>re
24730 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 3c 2f  cursive-select</
24740 79 79 74 65 72 6d 3e 2c 20 74 68 65 6e 20 6f 6e  yyterm>, then on
24750 6c 79 20 61 64 64 20 72 6f 77 73 20 74 6f 20 74  ly add rows to t
24760 68 65 20 71 75 65 75 65 20 69 66 20 0a 20 20 6e  he queue if .  n
24770 6f 20 69 64 65 6e 74 69 63 61 6c 20 72 6f 77 20  o identical row 
24780 68 61 73 0a 20 20 62 65 65 6e 20 70 72 65 76 69  has.  been previ
24790 6f 75 73 6c 79 20 61 64 64 65 64 20 74 6f 20 74  ously added to t
247a0 68 65 20 71 75 65 75 65 2e 20 20 52 65 70 65 61  he queue.  Repea
247b0 74 65 64 20 72 6f 77 73 20 61 72 65 20 64 69 73  ted rows are dis
247c0 63 61 72 64 65 64 20 62 65 66 6f 72 65 20 62 65  carded before be
247d0 69 6e 67 0a 20 20 61 64 64 65 64 20 74 6f 20 74  ing.  added to t
247e0 68 65 20 71 75 65 75 65 20 65 76 65 6e 20 69 66  he queue even if
247f0 20 74 68 65 20 72 65 70 65 61 74 65 64 20 72 6f   the repeated ro
24800 77 73 20 68 61 76 65 20 61 6c 72 65 61 64 79 20  ws have already 
24810 62 65 65 6e 20 65 78 74 72 61 63 74 65 64 0a 20  been extracted. 
24820 20 66 72 6f 6d 20 74 68 65 20 71 75 65 75 65 20   from the queue 
24830 62 79 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e  by the recursion
24840 20 73 74 65 70 2e 20 20 49 66 20 74 68 65 20 6f   step.  If the o
24850 70 65 72 61 74 6f 72 20 69 73 20 55 4e 49 4f 4e  perator is UNION
24860 20 41 4c 4c 2c 0a 20 20 74 68 65 6e 20 61 6c 6c   ALL,.  then all
24870 20 72 6f 77 73 20 67 65 6e 65 72 61 74 65 64 20   rows generated 
24880 62 79 20 62 6f 74 68 20 74 68 65 20 3c 79 79 74  by both the <yyt
24890 65 72 6d 3e 69 6e 69 74 69 61 6c 2d 73 65 6c 65  erm>initial-sele
248a0 63 74 3c 2f 79 79 74 65 72 6d 3e 20 61 6e 64 20  ct</yyterm> and 
248b0 74 68 65 0a 20 20 3c 79 79 74 65 72 6d 3e 72 65  the.  <yyterm>re
248c0 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 3c 2f  cursive-select</
248d0 79 79 74 65 72 6d 3e 20 61 72 65 20 61 6c 77 61  yyterm> are alwa
248e0 79 73 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  ys added to the 
248f0 71 75 65 75 65 20 65 76 65 6e 20 69 66 0a 20 20  queue even if.  
24900 74 68 65 79 20 61 72 65 20 72 65 70 65 61 74 73  they are repeats
24910 2e 0a 20 20 57 68 65 6e 20 64 65 74 65 72 6d 69  ..  When determi
24920 6e 69 6e 67 20 69 66 20 61 20 72 6f 77 20 69 73  ning if a row is
24930 20 72 65 70 65 61 74 65 64 2c 20 4e 55 4c 4c 20   repeated, NULL 
24940 76 61 6c 75 65 73 20 63 6f 6d 70 61 72 65 0a 20  values compare. 
24950 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61 6e   equal to one an
24960 6f 74 68 65 72 20 61 6e 64 20 6e 6f 74 20 65 71  other and not eq
24970 75 61 6c 20 74 6f 20 61 6e 79 20 6f 74 68 65 72  ual to any other
24980 20 76 61 6c 75 65 2e 0a 3c 6c 69 3e 3c 70 3e 0a   value..<li><p>.
24990 20 20 54 68 65 20 4c 49 4d 49 54 20 63 6c 61 75    The LIMIT clau
249a0 73 65 2c 20 69 66 20 70 72 65 73 65 6e 74 2c 20  se, if present, 
249b0 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 6d  determines the m
249c0 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
249d0 20 72 6f 77 73 20 74 68 61 74 0a 20 20 77 69 6c   rows that.  wil
249e0 6c 20 65 76 65 72 20 62 65 20 61 64 64 65 64 20  l ever be added 
249f0 74 6f 20 74 68 65 20 72 65 63 75 72 73 69 76 65  to the recursive
24a00 20 74 61 62 6c 65 20 69 6e 20 73 74 65 70 20 32   table in step 2
24a10 62 2e 0a 20 20 4f 6e 63 65 20 74 68 65 20 6c 69  b..  Once the li
24a20 6d 69 74 20 69 73 20 72 65 61 63 68 65 64 2c 20  mit is reached, 
24a30 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 73 74  the recursion st
24a40 6f 70 73 2e 0a 20 20 41 20 6c 69 6d 69 74 20 6f  ops..  A limit o
24a50 66 20 7a 65 72 6f 20 6d 65 61 6e 73 20 74 68 61  f zero means tha
24a60 74 20 6e 6f 20 72 6f 77 73 20 61 72 65 20 65 76  t no rows are ev
24a70 65 72 20 61 64 64 65 64 20 74 6f 20 74 68 65 0a  er added to the.
24a80 20 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c    recursive tabl
24a90 65 2c 20 61 6e 64 20 61 20 6e 65 67 61 74 69 76  e, and a negativ
24aa0 65 20 6c 69 6d 69 74 20 6d 65 61 6e 73 20 61 6e  e limit means an
24ab0 20 75 6e 6c 69 6d 69 74 65 64 20 6e 75 6d 62 65   unlimited numbe
24ac0 72 20 6f 66 20 72 6f 77 73 0a 20 20 6d 61 79 20  r of rows.  may 
24ad0 62 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  be added to the 
24ae0 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e  recursive table.
24af0 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 54 68 65 20 4f  .<li><p>.  The O
24b00 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20 69 66  FFSET clause, if
24b10 20 69 74 20 69 73 20 70 72 65 73 65 6e 74 20 61   it is present a
24b20 6e 64 20 68 61 73 20 61 20 70 6f 73 69 74 69 76  nd has a positiv
24b30 65 20 76 61 6c 75 65 20 4e 2c 20 70 72 65 76 65  e value N, preve
24b40 6e 74 73 20 74 68 65 0a 20 20 66 69 72 73 74 20  nts the.  first 
24b50 4e 20 72 6f 77 73 20 66 72 6f 6d 20 62 65 69 6e  N rows from bein
24b60 67 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 72  g added to the r
24b70 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e 0a  ecursive table..
24b80 20 20 54 68 65 20 66 69 72 73 74 20 4e 20 72 6f    The first N ro
24b90 77 73 20 61 72 65 20 73 74 69 6c 6c 20 70 72 6f  ws are still pro
24ba0 63 65 73 73 65 64 0a 20 20 62 79 20 74 68 65 20  cessed.  by the 
24bb0 3c 79 79 74 65 72 6d 3e 72 65 63 75 72 73 69 76  <yyterm>recursiv
24bc0 65 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d  e-select</yyterm
24bd0 3e 20 26 6d 64 61 73 68 3b 20 74 68 65 79 0a 20  > &mdash; they. 
24be0 20 6a 75 73 74 20 61 72 65 20 6e 6f 74 20 61 64   just are not ad
24bf0 64 65 64 20 74 6f 20 74 68 65 20 72 65 63 75 72  ded to the recur
24c00 73 69 76 65 20 74 61 62 6c 65 2e 20 20 52 6f 77  sive table.  Row
24c10 73 20 61 72 65 20 6e 6f 74 20 63 6f 75 6e 74 65  s are not counte
24c20 64 20 74 6f 77 61 72 64 0a 20 20 66 75 6c 66 69  d toward.  fulfi
24c30 6c 6c 69 6e 67 20 74 68 65 20 4c 49 4d 49 54 20  lling the LIMIT 
24c40 75 6e 74 69 6c 20 61 6c 6c 20 4f 46 46 53 45 54  until all OFFSET
24c50 20 72 6f 77 73 20 68 61 76 65 20 62 65 65 6e 20   rows have been 
24c60 73 6b 69 70 70 65 64 2e 0a 3c 6c 69 3e 3c 70 3e  skipped..<li><p>
24c70 0a 20 20 49 66 20 61 6e 20 4f 52 44 45 52 20 42  .  If an ORDER B
24c80 59 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73  Y clause is pres
24c90 65 6e 74 2c 20 69 74 20 64 65 74 65 72 6d 69 6e  ent, it determin
24ca0 65 73 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20  es the order in 
24cb0 77 68 69 63 68 20 72 6f 77 73 0a 20 20 61 72 65  which rows.  are
24cc0 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 20   extracted from 
24cd0 74 68 65 20 71 75 65 75 65 20 69 6e 20 73 74 65  the queue in ste
24ce0 70 20 32 61 2e 20 20 49 66 20 74 68 65 72 65 20  p 2a.  If there 
24cf0 69 73 20 6e 6f 20 4f 52 44 45 52 20 42 59 20 63  is no ORDER BY c
24d00 6c 61 75 73 65 2c 0a 20 20 74 68 65 6e 20 74 68  lause,.  then th
24d10 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68  e order in which
24d20 20 72 6f 77 73 20 61 72 65 20 65 78 74 72 61 63   rows are extrac
24d30 74 65 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ted is undefined
24d40 2e 20 20 28 49 6e 20 74 68 65 20 63 75 72 72 65  .  (In the curre
24d50 6e 74 0a 20 20 69 6d 70 6c 65 6d 65 6e 74 61 74  nt.  implementat
24d60 69 6f 6e 2c 20 74 68 65 20 71 75 65 75 65 20 62  ion, the queue b
24d70 65 63 6f 6d 65 73 20 61 20 46 49 46 4f 20 69 66  ecomes a FIFO if
24d80 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
24d90 61 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64 2c  ause is omitted,
24da0 0a 20 20 62 75 74 20 61 70 70 6c 69 63 61 74 69  .  but applicati
24db0 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74 20 64  ons should not d
24dc0 65 70 65 6e 64 20 6f 6e 20 74 68 61 74 20 66 61  epend on that fa
24dd0 63 74 20 73 69 6e 63 65 20 69 74 20 6d 69 67 68  ct since it migh
24de0 74 20 63 68 61 6e 67 65 2e 29 0a 3c 2f 75 6c 3e  t change.).</ul>
24df0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
24e00 6e 74 20 72 63 65 78 31 3c 2f 74 63 6c 3e 0a 3c  nt rcex1</tcl>.<
24e10 68 34 3e 52 65 63 75 72 73 69 76 65 20 51 75 65  h4>Recursive Que
24e20 72 79 20 45 78 61 6d 70 6c 65 73 3c 2f 68 34 3e  ry Examples</h4>
24e30 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69  ..<p>The followi
24e40 6e 67 20 71 75 65 72 79 20 72 65 74 75 72 6e 73  ng query returns
24e50 20 61 6c 6c 20 69 6e 74 65 67 65 72 73 20 62 65   all integers be
24e60 74 77 65 65 6e 20 31 20 61 6e 64 20 31 30 30 30  tween 1 and 1000
24e70 30 30 30 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  000:..<blockquot
24e80 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43  e><pre>.WITH REC
24e90 55 52 53 49 56 45 0a 20 20 63 6e 74 28 78 29 20  URSIVE.  cnt(x) 
24ea0 41 53 20 28 56 41 4c 55 45 53 28 31 29 20 55 4e  AS (VALUES(1) UN
24eb0 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 78  ION ALL SELECT x
24ec0 2b 31 20 46 52 4f 4d 20 63 6e 74 20 57 48 45 52  +1 FROM cnt WHER
24ed0 45 20 78 3c 31 30 30 30 30 30 30 29 0a 53 45 4c  E x<1000000).SEL
24ee0 45 43 54 20 78 20 46 52 4f 4d 20 63 6e 74 3b 0a  ECT x FROM cnt;.
24ef0 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
24f00 74 65 3e 0a 0a 3c 70 3e 43 6f 6e 73 69 64 65 72  te>..<p>Consider
24f10 20 68 6f 77 20 74 68 69 73 20 71 75 65 72 79 20   how this query 
24f20 77 6f 72 6b 73 2e 20 20 54 68 65 20 69 6e 69 74  works.  The init
24f30 69 61 6c 2d 73 65 6c 65 63 74 0a 72 75 6e 73 20  ial-select.runs 
24f40 66 69 72 73 74 20 61 6e 64 20 72 65 74 75 72 6e  first and return
24f50 73 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 0a 77  s a single row.w
24f60 69 74 68 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c  ith a single col
24f70 75 6d 6e 20 22 31 22 2e 20 20 54 68 69 73 20 6f  umn "1".  This o
24f80 6e 65 20 72 6f 77 20 69 73 20 61 64 64 65 64 20  ne row is added 
24f90 74 6f 20 74 68 65 20 71 75 65 75 65 2e 20 20 49  to the queue.  I
24fa0 6e 0a 73 74 65 70 20 32 61 2c 20 74 68 61 74 20  n.step 2a, that 
24fb0 6f 6e 65 20 72 6f 77 20 69 73 20 65 78 74 72 61  one row is extra
24fc0 63 74 65 64 20 66 72 6f 6d 20 74 68 65 20 71 75  cted from the qu
24fd0 65 75 65 20 61 6e 64 20 61 64 64 65 64 20 74 6f  eue and added to
24fe0 20 22 63 6e 74 22 2e 0a 54 68 65 6e 20 74 68 65   "cnt"..Then the
24ff0 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63   recursive-selec
25000 74 20 69 73 20 72 75 6e 20 69 6e 20 61 63 63 6f  t is run in acco
25010 72 64 61 6e 63 65 20 77 69 74 68 20 73 74 65 70  rdance with step
25020 20 32 63 20 67 65 6e 65 72 61 74 69 6e 67 0a 61   2c generating.a
25030 20 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77 20   single new row 
25040 77 69 74 68 20 76 61 6c 75 65 20 22 32 22 20 74  with value "2" t
25050 6f 20 61 64 64 20 74 6f 20 74 68 65 20 71 75 65  o add to the que
25060 75 65 2e 20 20 54 68 65 20 71 75 65 75 65 20 73  ue.  The queue s
25070 74 69 6c 6c 0a 68 61 73 20 6f 6e 65 20 72 6f 77  till.has one row
25080 2c 20 73 6f 20 73 74 65 70 20 32 20 72 65 70 65  , so step 2 repe
25090 61 74 73 2e 20 20 54 68 65 20 22 32 22 20 72 6f  ats.  The "2" ro
250a0 77 20 69 73 20 65 78 74 72 61 63 74 65 64 20 61  w is extracted a
250b0 6e 64 20 61 64 64 65 64 20 74 6f 20 74 68 65 0a  nd added to the.
250c0 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 20  recursive table 
250d0 62 79 20 73 74 65 70 73 20 32 61 20 61 6e 64 20  by steps 2a and 
250e0 32 62 2e 20 20 54 68 65 6e 20 74 68 65 20 72 6f  2b.  Then the ro
250f0 77 20 63 6f 6e 74 61 69 6e 69 6e 67 20 32 20 69  w containing 2 i
25100 73 20 75 73 65 64 20 0a 61 73 20 69 66 20 69 74  s used .as if it
25110 20 77 65 72 65 20 74 68 65 20 63 6f 6d 70 6c 65   were the comple
25120 74 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  te content of th
25130 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  e recursive tabl
25140 65 20 61 6e 64 20 74 68 65 20 0a 72 65 63 75 72  e and the .recur
25150 73 69 76 65 2d 73 65 6c 65 63 74 20 69 73 20 72  sive-select is r
25160 75 6e 20 61 67 61 69 6e 2c 20 72 65 73 75 6c 74  un again, result
25170 69 6e 67 20 69 6e 20 61 20 72 6f 77 20 77 69 74  ing in a row wit
25180 68 20 76 61 6c 75 65 20 22 33 22 20 62 65 69 6e  h value "3" bein
25190 67 20 61 64 64 65 64 0a 74 6f 20 74 68 65 20 71  g added.to the q
251a0 75 65 75 65 2e 20 20 54 68 69 73 20 72 65 70 65  ueue.  This repe
251b0 61 74 73 20 39 39 39 39 39 39 20 74 69 6d 65 73  ats 999999 times
251c0 20 75 6e 74 69 6c 20 66 69 6e 61 6c 6c 79 20 61   until finally a
251d0 74 20 73 74 65 70 20 32 61 20 74 68 65 0a 6f 6e  t step 2a the.on
251e0 6c 79 20 76 61 6c 75 65 20 6f 6e 20 74 68 65 20  ly value on the 
251f0 71 75 65 75 65 20 69 73 20 61 20 72 6f 77 20 63  queue is a row c
25200 6f 6e 74 61 69 6e 69 6e 67 20 31 30 30 30 30 30  ontaining 100000
25210 30 2e 20 20 54 68 61 74 20 72 6f 77 20 69 73 0a  0.  That row is.
25220 65 78 74 72 61 63 74 65 64 20 61 6e 64 20 61 64  extracted and ad
25230 64 65 64 20 74 6f 20 74 68 65 20 72 65 63 75 72  ded to the recur
25240 73 69 76 65 20 74 61 62 6c 65 2e 20 20 42 75 74  sive table.  But
25250 20 74 68 69 73 20 74 69 6d 65 2c 20 74 68 65 0a   this time, the.
25260 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 61 75  WHERE clause cau
25270 73 65 73 20 74 68 65 20 72 65 63 75 72 73 69 76  ses the recursiv
25280 65 2d 73 65 6c 65 63 74 20 74 6f 20 72 65 74 75  e-select to retu
25290 72 6e 20 6e 6f 20 72 6f 77 73 2c 20 73 6f 20 74  rn no rows, so t
252a0 68 65 0a 71 75 65 75 65 20 72 65 6d 61 69 6e 73  he.queue remains
252b0 20 65 6d 70 74 79 20 61 6e 64 20 74 68 65 20 72   empty and the r
252c0 65 63 75 72 73 69 6f 6e 20 73 74 6f 70 73 2e 0a  ecursion stops..
252d0 0a 3c 70 3e 3c 62 3e 4f 70 74 69 6d 69 7a 61 74  .<p><b>Optimizat
252e0 69 6f 6e 20 6e 6f 74 65 3a 3c 2f 62 3e 0a 49 6e  ion note:</b>.In
252f0 20 74 68 65 20 64 69 73 63 75 73 73 69 6f 6e 20   the discussion 
25300 61 62 6f 76 65 2c 20 73 74 61 74 65 6d 65 6e 74  above, statement
25310 73 20 6c 69 6b 65 20 22 69 6e 73 65 72 74 20 74  s like "insert t
25320 68 65 20 72 6f 77 20 69 6e 74 6f 0a 74 68 65 20  he row into.the 
25330 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 22  recursive table"
25340 20 73 68 6f 75 6c 64 20 62 65 20 75 6e 64 65 72   should be under
25350 73 74 6f 6f 64 20 63 6f 6e 63 65 70 74 75 61 6c  stood conceptual
25360 6c 79 2c 20 6e 6f 74 20 6c 69 74 65 72 61 6c 6c  ly, not literall
25370 79 2e 0a 49 74 20 73 6f 75 6e 64 73 20 61 73 20  y..It sounds as 
25380 69 66 20 53 51 4c 69 74 65 20 69 73 20 61 63 63  if SQLite is acc
25390 75 6d 75 6c 61 74 69 6e 67 20 61 20 68 75 67 65  umulating a huge
253a0 20 74 61 62 6c 65 0a 63 6f 6e 74 61 69 6e 69 6e   table.containin
253b0 67 20 6f 6e 65 20 6d 69 6c 6c 69 6f 6e 20 72 6f  g one million ro
253c0 77 73 2c 20 74 68 65 6e 20 67 6f 69 6e 67 20 62  ws, then going b
253d0 61 63 6b 20 61 6e 64 20 73 63 61 6e 6e 69 6e 67  ack and scanning
253e0 20 74 68 61 74 20 74 61 62 6c 65 0a 66 72 6f 6d   that table.from
253f0 20 74 6f 70 20 74 6f 20 62 6f 74 74 6f 6d 20 74   top to bottom t
25400 6f 20 67 65 6e 65 72 61 74 65 20 74 68 65 20 72  o generate the r
25410 65 73 75 6c 74 2e 20 20 57 68 61 74 20 72 65 61  esult.  What rea
25420 6c 6c 79 20 68 61 70 70 65 6e 73 0a 69 73 20 74  lly happens.is t
25430 68 61 74 20 74 68 65 20 71 75 65 72 79 20 6f 70  hat the query op
25440 74 69 6d 69 7a 65 72 20 73 65 65 73 20 74 68 61  timizer sees tha
25450 74 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 0a  t values in the.
25460 22 63 6e 74 22 20 72 65 63 75 72 73 69 76 65 20  "cnt" recursive 
25470 74 61 62 6c 65 20 61 72 65 20 6f 6e 6c 79 20 75  table are only u
25480 73 65 64 20 6f 6e 63 65 2e 20 20 53 6f 20 61 73  sed once.  So as
25490 20 65 61 63 68 20 72 6f 77 20 69 73 20 61 64 64   each row is add
254a0 65 64 20 74 6f 0a 74 68 65 20 72 65 63 75 72 73  ed to.the recurs
254b0 69 76 65 20 74 61 62 6c 65 2c 20 74 68 61 74 20  ive table, that 
254c0 72 6f 77 20 69 73 20 69 6d 6d 65 64 69 61 74 65  row is immediate
254d0 6c 79 20 72 65 74 75 72 6e 65 64 20 61 73 20 61  ly returned as a
254e0 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 6d   result of the m
254f0 61 69 6e 0a 53 45 4c 45 43 54 20 73 74 61 74 65  ain.SELECT state
25500 6d 65 6e 74 20 61 6e 64 20 74 68 65 6e 20 64 69  ment and then di
25510 73 63 61 72 64 65 64 2e 20 20 53 51 4c 69 74 65  scarded.  SQLite
25520 20 64 6f 65 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65   does <em>not</e
25530 6d 3e 20 61 63 63 75 6d 75 6c 61 74 65 0a 61 20  m> accumulate.a 
25540 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
25550 63 6f 6e 74 61 69 6e 69 6e 67 20 61 20 6d 69 6c  containing a mil
25560 6c 69 6f 6e 20 72 6f 77 73 2e 20 20 56 65 72 79  lion rows.  Very
25570 20 6c 69 74 74 6c 65 20 6d 65 6d 6f 72 79 20 69   little memory i
25580 73 0a 6e 65 65 64 65 64 20 74 6f 20 72 75 6e 20  s.needed to run 
25590 74 68 65 20 61 62 6f 76 65 20 65 78 61 6d 70 6c  the above exampl
255a0 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 20  e.  However, if 
255b0 74 68 65 20 65 78 61 6d 70 6c 65 20 68 61 64 20  the example had 
255c0 75 73 65 64 0a 55 4e 49 4f 4e 20 69 6e 73 74 65  used.UNION inste
255d0 61 64 20 6f 66 20 55 4e 49 4f 4e 20 41 4c 4c 2c  ad of UNION ALL,
255e0 20 74 68 65 6e 20 53 51 4c 69 74 65 20 77 6f 75   then SQLite wou
255f0 6c 64 20 68 61 76 65 20 68 61 64 20 74 6f 20 6b  ld have had to k
25600 65 65 70 20 61 72 6f 75 6e 64 0a 61 6c 6c 20 70  eep around.all p
25610 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61  reviously genera
25620 74 65 64 20 63 6f 6e 74 65 6e 74 20 69 6e 20 6f  ted content in o
25630 72 64 65 72 20 74 6f 20 63 68 65 63 6b 20 66 6f  rder to check fo
25640 72 20 64 75 70 6c 69 63 61 74 65 73 2e 0a 46 6f  r duplicates..Fo
25650 72 20 74 68 69 73 20 72 65 61 73 6f 6e 2c 20 70  r this reason, p
25660 72 6f 67 72 61 6d 6d 65 72 73 20 73 68 6f 75 6c  rogrammers shoul
25670 64 20 73 74 72 69 76 65 20 74 6f 20 75 73 65 20  d strive to use 
25680 55 4e 49 4f 4e 20 41 4c 4c 20 69 6e 73 74 65 61  UNION ALL instea
25690 64 0a 6f 66 20 55 4e 49 4f 4e 20 77 68 65 6e 20  d.of UNION when 
256a0 66 65 61 73 69 62 6c 65 2e 0a 0a 3c 70 3e 48 65  feasible...<p>He
256b0 72 65 20 69 73 20 61 20 76 61 72 69 61 74 69 6f  re is a variatio
256c0 6e 20 6f 6e 20 74 68 65 20 70 72 65 76 69 6f 75  n on the previou
256d0 73 20 65 78 61 6d 70 6c 65 3a 0a 0a 3c 62 6c 6f  s example:..<blo
256e0 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49  ckquote><pre>.WI
256f0 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 63  TH RECURSIVE.  c
25700 6e 74 28 78 29 20 41 53 20 28 0a 20 20 20 20 20  nt(x) AS (.     
25710 53 45 4c 45 43 54 20 31 0a 20 20 20 20 20 55 4e  SELECT 1.     UN
25720 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 20 53 45 4c  ION ALL.     SEL
25730 45 43 54 20 78 2b 31 20 46 52 4f 4d 20 63 6e 74  ECT x+1 FROM cnt
25740 0a 20 20 20 20 20 20 4c 49 4d 49 54 20 31 30 30  .      LIMIT 100
25750 30 30 30 30 0a 20 20 29 0a 53 45 4c 45 43 54 20  0000.  ).SELECT 
25760 78 20 46 52 4f 4d 20 63 6e 74 3b 0a 3c 2f 70 72  x FROM cnt;.</pr
25770 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
25780 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 74 77  .<p>There are tw
25790 6f 20 64 69 66 66 65 72 65 6e 63 65 73 20 69 6e  o differences in
257a0 20 74 68 69 73 20 76 61 72 69 61 74 69 6f 6e 2e   this variation.
257b0 20 20 54 68 65 20 69 6e 69 74 69 61 6c 2d 73 65    The initial-se
257c0 6c 65 63 74 20 69 73 0a 22 53 45 4c 45 43 54 20  lect is."SELECT 
257d0 31 22 20 69 6e 73 74 65 61 64 20 6f 66 20 22 56  1" instead of "V
257e0 41 4c 55 45 53 28 31 29 22 2e 20 20 42 75 74 20  ALUES(1)".  But 
257f0 74 68 6f 73 65 20 61 72 65 20 6a 75 73 74 20 64  those are just d
25800 69 66 66 65 72 65 6e 74 0a 73 79 6e 74 61 78 65  ifferent.syntaxe
25810 73 20 66 6f 72 20 73 61 79 69 6e 67 20 65 78 61  s for saying exa
25820 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68  ctly the same th
25830 69 6e 67 2e 20 20 54 68 65 20 6f 74 68 65 72 20  ing.  The other 
25840 63 68 61 6e 67 65 20 69 73 20 74 68 61 74 20 74  change is that t
25850 68 65 0a 72 65 63 75 72 73 69 6f 6e 20 69 73 20  he.recursion is 
25860 73 74 6f 70 70 65 64 20 62 79 20 61 20 4c 49 4d  stopped by a LIM
25870 49 54 20 72 61 74 68 65 72 20 74 68 61 6e 20 61  IT rather than a
25880 20 57 48 45 52 45 20 63 6c 61 75 73 65 2e 20 20   WHERE clause.  
25890 54 68 65 20 75 73 65 20 6f 66 0a 4c 49 4d 49 54  The use of.LIMIT
258a0 20 6d 65 61 6e 73 20 74 68 61 74 20 77 68 65 6e   means that when
258b0 20 74 68 65 20 6f 6e 65 2d 6d 69 6c 6c 69 6f 6e   the one-million
258c0 74 68 20 72 6f 77 20 69 73 20 61 64 64 65 64 20  th row is added 
258d0 74 6f 20 74 68 65 20 22 63 6e 74 22 20 74 61 62  to the "cnt" tab
258e0 6c 65 0a 28 61 6e 64 20 72 65 74 75 72 6e 65 64  le.(and returned
258f0 20 62 79 20 74 68 65 20 6d 61 69 6e 20 53 45 4c   by the main SEL
25900 45 43 54 2c 20 74 68 61 6e 6b 73 20 74 6f 20 74  ECT, thanks to t
25910 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a  he query optimiz
25920 65 72 29 0a 74 68 65 6e 20 74 68 65 20 72 65 63  er).then the rec
25930 75 72 73 69 6f 6e 20 73 74 6f 70 73 20 69 6d 6d  ursion stops imm
25940 65 64 69 61 74 65 6c 79 20 72 65 67 61 72 64 6c  ediately regardl
25950 65 73 73 20 6f 66 20 68 6f 77 20 6d 61 6e 79 20  ess of how many 
25960 72 6f 77 73 20 6d 69 67 68 74 20 62 65 0a 6c 65  rows might be.le
25970 66 74 20 69 6e 20 74 68 65 20 71 75 65 75 65 2e  ft in the queue.
25980 20 20 4f 6e 20 6d 6f 72 65 20 63 6f 6d 70 6c 65    On more comple
25990 78 20 71 75 65 72 69 65 73 2c 20 69 74 20 63 61  x queries, it ca
259a0 6e 20 73 6f 6d 65 74 69 6d 65 73 20 62 65 0a 64  n sometimes be.d
259b0 69 66 66 69 63 75 6c 74 20 74 6f 20 65 6e 73 75  ifficult to ensu
259c0 72 65 20 74 68 61 74 20 74 68 65 20 57 48 45 52  re that the WHER
259d0 45 20 63 6c 61 75 73 65 20 77 69 6c 6c 20 65 76  E clause will ev
259e0 65 6e 74 75 61 6c 6c 79 20 63 61 75 73 65 20 74  entually cause t
259f0 68 65 0a 71 75 65 75 65 20 74 6f 20 64 72 61 69  he.queue to drai
25a00 6e 20 61 6e 64 20 74 68 65 20 72 65 63 75 72 73  n and the recurs
25a10 69 6f 6e 20 74 6f 20 74 65 72 6d 69 6e 61 74 65  ion to terminate
25a20 2e 20 20 42 75 74 20 74 68 65 20 4c 49 4d 49 54  .  But the LIMIT
25a30 20 63 6c 61 75 73 65 20 77 69 6c 6c 0a 61 6c 77   clause will.alw
25a40 61 79 73 20 73 74 6f 70 20 74 68 65 20 72 65 63  ays stop the rec
25a50 75 72 73 69 6f 6e 2e 20 20 53 6f 20 69 74 20 69  ursion.  So it i
25a60 73 20 67 6f 6f 64 20 70 72 61 63 74 69 63 65 20  s good practice 
25a70 74 6f 20 61 6c 77 61 79 73 20 69 6e 63 6c 75 64  to always includ
25a80 65 20 61 0a 4c 49 4d 49 54 20 63 6c 61 75 73 65  e a.LIMIT clause
25a90 20 61 73 20 61 20 73 61 66 65 74 79 20 69 66 20   as a safety if 
25aa0 61 6e 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f  an upper bound o
25ab0 6e 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  n the size of th
25ac0 65 20 72 65 63 75 72 73 69 6f 6e 20 0a 69 73 20  e recursion .is 
25ad0 6b 6e 6f 77 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  known...<tcl>hd_
25ae0 66 72 61 67 6d 65 6e 74 20 72 63 65 78 32 3c 2f  fragment rcex2</
25af0 74 63 6c 3e 0a 3c 68 34 3e 48 69 65 72 61 72 63  tcl>.<h4>Hierarc
25b00 68 69 63 61 6c 20 51 75 65 72 79 20 45 78 61 6d  hical Query Exam
25b10 70 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 43 6f  ples</h4>..<p>Co
25b20 6e 73 69 64 65 72 20 61 20 74 61 62 6c 65 20 74  nsider a table t
25b30 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
25b40 65 20 6d 65 6d 62 65 72 73 20 6f 66 20 61 6e 20  e members of an 
25b50 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20 61 73 0a  organization as.
25b60 77 65 6c 6c 20 61 73 20 74 68 65 20 63 68 61 69  well as the chai
25b70 6e 2d 6f 66 2d 63 6f 6d 6d 61 6e 64 20 77 69 74  n-of-command wit
25b80 68 69 6e 20 74 68 61 74 20 6f 72 67 61 6e 69 7a  hin that organiz
25b90 61 74 69 6f 6e 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  ation:..<blockqu
25ba0 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45  ote><pre>.CREATE
25bb0 20 54 41 42 4c 45 20 6f 72 67 28 0a 20 20 6e 61   TABLE org(.  na
25bc0 6d 65 20 54 45 58 54 20 50 52 49 4d 41 52 59 20  me TEXT PRIMARY 
25bd0 4b 45 59 2c 0a 20 20 62 6f 73 73 20 54 45 58 54  KEY,.  boss TEXT
25be0 20 52 45 46 45 52 45 4e 43 45 53 20 6f 72 67 2c   REFERENCES org,
25bf0 0a 20 20 68 65 69 67 68 74 20 49 4e 54 2c 0a 20  .  height INT,. 
25c00 20 2d 2d 20 6f 74 68 65 72 20 63 6f 6e 74 65 6e   -- other conten
25c10 74 20 6f 6d 69 74 74 65 64 0a 29 3b 0a 3c 2f 70  t omitted.);.</p
25c20 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
25c30 0a 0a 3c 70 3e 45 76 65 72 79 20 6d 65 6d 62 65  ..<p>Every membe
25c40 72 20 69 6e 20 74 68 65 20 6f 72 67 61 6e 69 7a  r in the organiz
25c50 61 74 69 6f 6e 20 68 61 73 20 61 20 6e 61 6d 65  ation has a name
25c60 2c 20 61 6e 64 20 6d 6f 73 74 20 6d 65 6d 62 65  , and most membe
25c70 72 73 20 68 61 76 65 0a 61 20 73 69 6e 67 6c 65  rs have.a single
25c80 20 62 6f 73 73 2e 20 20 28 54 68 65 20 68 65 61   boss.  (The hea
25c90 64 20 6f 66 20 74 68 65 20 77 68 6f 6c 65 20 6f  d of the whole o
25ca0 72 67 61 6e 69 7a 61 74 69 6f 6e 20 68 61 73 20  rganization has 
25cb0 61 20 4e 55 4c 4c 0a 22 62 6f 73 73 22 20 66 69  a NULL."boss" fi
25cc0 65 6c 64 2e 29 20 54 68 65 20 72 6f 77 73 20 6f  eld.) The rows o
25cd0 66 20 74 68 65 20 22 6f 72 67 22 20 74 61 62 6c  f the "org" tabl
25ce0 65 20 66 6f 72 6d 20 61 20 74 72 65 65 2e 0a 0a  e form a tree...
25cf0 3c 70 3e 48 65 72 65 20 69 73 20 61 20 71 75 65  <p>Here is a que
25d00 72 79 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73  ry that computes
25d10 20 74 68 65 20 61 76 65 72 61 67 65 20 68 65 69   the average hei
25d20 67 68 74 20 6f 76 65 72 20 65 76 65 72 79 6f 6e  ght over everyon
25d30 65 0a 69 6e 20 41 6c 69 63 65 27 73 20 6f 72 67  e.in Alice's org
25d40 61 6e 69 7a 61 74 69 6f 6e 2c 20 69 6e 63 6c 75  anization, inclu
25d50 64 69 6e 67 20 41 6c 69 63 65 3a 0a 0a 3c 62 6c  ding Alice:..<bl
25d60 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57  ockquote><pre>.W
25d70 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20  ITH RECURSIVE.  
25d80 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 28  works_for_alice(
25d90 6e 29 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55  n) AS (.    VALU
25da0 45 53 28 27 41 6c 69 63 65 27 29 0a 20 20 20 20  ES('Alice').    
25db0 55 4e 49 4f 4e 0a 20 20 20 20 53 45 4c 45 43 54  UNION.    SELECT
25dc0 20 6e 61 6d 65 20 46 52 4f 4d 20 6f 72 67 2c 20   name FROM org, 
25dd0 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 0a  works_for_alice.
25de0 20 20 20 20 20 57 48 45 52 45 20 6f 72 67 2e 62       WHERE org.b
25df0 6f 73 73 3d 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c  oss=works_for_al
25e00 69 63 65 2e 6e 0a 20 20 29 0a 53 45 4c 45 43 54  ice.n.  ).SELECT
25e10 20 61 76 67 28 68 65 69 67 68 74 29 20 46 52 4f   avg(height) FRO
25e20 4d 20 6f 72 67 0a 20 57 48 45 52 45 20 6f 72 67  M org. WHERE org
25e30 2e 6e 61 6d 65 20 49 4e 20 77 6f 72 6b 73 5f 66  .name IN works_f
25e40 6f 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70 72 65 3e  or_alice;.</pre>
25e50 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
25e60 70 3e 54 68 65 20 6e 65 78 74 20 65 78 61 6d 70  p>The next examp
25e70 6c 65 20 75 73 65 73 20 74 77 6f 20 0a 63 6f 6d  le uses two .com
25e80 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
25e90 73 69 6f 6e 73 20 69 6e 20 61 20 73 69 6e 67 6c  sions in a singl
25ea0 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 20 20  e WITH clause.  
25eb0 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  .The following t
25ec0 61 62 6c 65 20 72 65 63 6f 72 64 73 20 61 20 66  able records a f
25ed0 61 6d 69 6c 79 20 74 72 65 65 3a 0a 0a 3c 62 6c  amily tree:..<bl
25ee0 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43  ockquote><pre>.C
25ef0 52 45 41 54 45 20 54 41 42 4c 45 20 66 61 6d 69  REATE TABLE fami
25f00 6c 79 28 0a 20 20 6e 61 6d 65 20 54 45 58 54 20  ly(.  name TEXT 
25f10 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 6d  PRIMARY KEY,.  m
25f20 6f 6d 20 54 45 58 54 20 52 45 46 45 52 45 4e 43  om TEXT REFERENC
25f30 45 53 20 66 61 6d 69 6c 79 2c 0a 20 20 64 61 64  ES family,.  dad
25f40 20 54 45 58 54 20 52 45 46 45 52 45 4e 43 45 53   TEXT REFERENCES
25f50 20 66 61 6d 69 6c 79 2c 0a 20 20 62 6f 72 6e 20   family,.  born 
25f60 44 41 54 45 54 49 4d 45 2c 0a 20 20 64 69 65 64  DATETIME,.  died
25f70 20 44 41 54 45 54 49 4d 45 2c 20 2d 2d 20 4e 55   DATETIME, -- NU
25f80 4c 4c 20 69 66 20 73 74 69 6c 6c 20 61 6c 69 76  LL if still aliv
25f90 65 0a 20 20 2d 2d 20 6f 74 68 65 72 20 63 6f 6e  e.  -- other con
25fa0 74 65 6e 74 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f  tent.);.</pre></
25fb0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
25fc0 54 68 65 20 22 66 61 6d 69 6c 79 22 20 74 61 62  The "family" tab
25fd0 6c 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f  le is similar to
25fe0 20 74 68 65 20 65 61 72 6c 69 65 72 20 22 6f 72   the earlier "or
25ff0 67 22 20 74 61 62 6c 65 20 65 78 63 65 70 74 20  g" table except 
26000 74 68 61 74 20 0a 6e 6f 77 20 74 68 65 72 65 20  that .now there 
26010 61 72 65 20 74 77 6f 20 70 61 72 65 6e 74 73 20  are two parents 
26020 74 6f 20 65 61 63 68 20 6d 65 6d 62 65 72 2e 0a  to each member..
26030 57 65 20 77 61 6e 74 20 74 6f 20 6b 6e 6f 77 20  We want to know 
26040 61 6c 6c 20 6c 69 76 69 6e 67 20 61 6e 63 65 73  all living ances
26050 74 6f 72 73 20 6f 66 20 41 6c 69 63 65 2c 20 66  tors of Alice, f
26060 72 6f 6d 20 6f 6c 64 65 73 74 20 74 6f 20 79 6f  rom oldest to yo
26070 75 6e 67 65 73 74 2e 0a 41 6e 20 6f 72 64 69 6e  ungest..An ordin
26080 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ary common table
26090 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 22 70 61   expression, "pa
260a0 72 65 6e 74 5f 6f 66 22 2c 20 69 73 20 64 65 66  rent_of", is def
260b0 69 6e 65 64 20 66 69 72 73 74 2e 20 20 54 68 61  ined first.  Tha
260c0 74 0a 6f 72 64 69 6e 61 72 79 20 43 54 45 20 69  t.ordinary CTE i
260d0 73 20 61 20 76 69 65 77 20 74 68 61 74 20 63 61  s a view that ca
260e0 6e 20 62 65 20 75 73 65 64 20 74 6f 20 66 69 6e  n be used to fin
260f0 64 20 61 6c 6c 20 70 61 72 65 6e 74 73 20 6f 66  d all parents of
26100 20 61 6e 79 0a 69 6e 64 69 76 69 64 75 61 6c 2e   any.individual.
26110 20 20 54 68 61 74 20 6f 72 64 69 6e 61 72 79 20    That ordinary 
26120 43 54 45 20 69 73 20 74 68 65 6e 20 75 73 65 64  CTE is then used
26130 20 69 6e 20 74 68 65 20 22 61 6e 63 65 73 74 6f   in the "ancesto
26140 72 5f 6f 66 5f 61 6c 69 63 65 22 0a 72 65 63 75  r_of_alice".recu
26150 72 73 69 76 65 20 43 54 45 2e 20 20 54 68 65 20  rsive CTE.  The 
26160 72 65 63 75 72 73 69 76 65 20 43 54 45 20 69 73  recursive CTE is
26170 20 74 68 65 6e 20 75 73 65 64 20 69 6e 20 74 68   then used in th
26180 65 20 66 69 6e 61 6c 20 71 75 65 72 79 3a 0a 0a  e final query:..
26190 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
261a0 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45  >.WITH RECURSIVE
261b0 0a 20 20 70 61 72 65 6e 74 5f 6f 66 28 6e 61 6d  .  parent_of(nam
261c0 65 2c 20 70 61 72 65 6e 74 29 20 41 53 0a 20 20  e, parent) AS.  
261d0 20 20 28 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20    (SELECT name, 
261e0 6d 6f 6d 20 46 52 4f 4d 20 66 61 6d 69 6c 79 20  mom FROM family 
261f0 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20 6e 61 6d  UNION SELECT nam
26200 65 2c 20 64 61 64 20 46 52 4f 4d 20 66 61 6d 69  e, dad FROM fami
26210 6c 79 29 2c 0a 20 20 61 6e 63 65 73 74 6f 72 5f  ly),.  ancestor_
26220 6f 66 5f 61 6c 69 63 65 28 6e 61 6d 65 29 20 41  of_alice(name) A
26230 53 0a 20 20 20 20 28 53 45 4c 45 43 54 20 70 61  S.    (SELECT pa
26240 72 65 6e 74 20 46 52 4f 4d 20 70 61 72 65 6e 74  rent FROM parent
26250 5f 6f 66 20 57 48 45 52 45 20 6e 61 6d 65 3d 27  _of WHERE name='
26260 41 6c 69 63 65 27 0a 20 20 20 20 20 55 4e 49 4f  Alice'.     UNIO
26270 4e 20 41 4c 4c 0a 20 20 20 20 20 53 45 4c 45 43  N ALL.     SELEC
26280 54 20 70 61 72 65 6e 74 20 46 52 4f 4d 20 70 61  T parent FROM pa
26290 72 65 6e 74 5f 6f 66 20 4a 4f 49 4e 20 61 6e 63  rent_of JOIN anc
262a0 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 20 55  estor_of_alice U
262b0 53 49 4e 47 28 6e 61 6d 65 29 29 0a 53 45 4c 45  SING(name)).SELE
262c0 43 54 20 66 61 6d 69 6c 79 2e 6e 61 6d 65 20 46  CT family.name F
262d0 52 4f 4d 20 61 6e 63 65 73 74 6f 72 5f 6f 66 5f  ROM ancestor_of_
262e0 61 6c 69 63 65 2c 20 66 61 6d 69 6c 79 0a 20 57  alice, family. W
262f0 48 45 52 45 20 61 6e 63 65 73 74 6f 72 5f 6f 66  HERE ancestor_of
26300 5f 61 6c 69 63 65 2e 6e 61 6d 65 3d 66 61 6d 69  _alice.name=fami
26310 6c 79 2e 6e 61 6d 65 0a 20 20 20 41 4e 44 20 64  ly.name.   AND d
26320 69 65 64 20 49 53 20 4e 55 4c 4c 0a 20 4f 52 44  ied IS NULL. ORD
26330 45 52 20 42 59 20 62 6f 72 6e 3b 0a 3c 2f 70 72  ER BY born;.</pr
26340 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
26350 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
26360 74 20 72 63 65 78 32 3c 2f 74 63 6c 3e 0a 3c 68  t rcex2</tcl>.<h
26370 34 3e 51 75 65 72 69 65 73 20 41 67 61 69 6e 73  4>Queries Agains
26380 74 20 41 20 47 72 61 70 68 3c 2f 68 34 3e 0a 0a  t A Graph</h4>..
26390 3c 70 3e 41 20 76 65 72 73 69 6f 6e 20 63 6f 6e  <p>A version con
263a0 74 72 6f 6c 20 73 79 73 74 65 6d 20 28 56 43 53  trol system (VCS
263b0 29 20 77 69 6c 6c 20 74 79 70 69 63 61 6c 6c 79  ) will typically
263c0 20 73 74 6f 72 65 20 74 68 65 20 65 76 6f 6c 76   store the evolv
263d0 69 6e 67 0a 76 65 72 73 69 6f 6e 73 20 6f 66 20  ing.versions of 
263e0 61 20 70 72 6f 6a 65 63 74 20 61 73 20 61 20 64  a project as a d
263f0 69 72 65 63 74 65 64 20 61 63 79 63 6c 69 63 20  irected acyclic 
26400 67 72 61 70 68 20 28 44 41 47 29 2e 20 20 43 61  graph (DAG).  Ca
26410 6c 6c 20 65 61 63 68 0a 76 65 72 73 69 6f 6e 20  ll each.version 
26420 6f 66 20 74 68 65 20 70 72 6f 6a 65 63 74 20 61  of the project a
26430 20 22 63 68 65 63 6b 69 6e 22 2e 20 20 41 20 73   "checkin".  A s
26440 69 6e 67 6c 65 0a 63 68 65 63 6b 69 6e 20 63 61  ingle.checkin ca
26450 6e 20 68 61 76 65 20 7a 65 72 6f 20 6f 72 20 6d  n have zero or m
26460 6f 72 65 20 70 61 72 65 6e 74 73 2e 20 20 4d 6f  ore parents.  Mo
26470 73 74 20 63 68 65 63 6b 69 6e 73 20 28 65 78 63  st checkins (exc
26480 65 70 74 20 74 68 65 0a 66 69 72 73 74 29 20 68  ept the.first) h
26490 61 76 65 20 61 20 73 69 6e 67 6c 65 20 70 61 72  ave a single par
264a0 65 6e 74 2c 20 62 75 74 20 69 6e 20 74 68 65 20  ent, but in the 
264b0 63 61 73 65 20 6f 66 20 61 20 6d 65 72 67 65 2c  case of a merge,
264c0 20 61 20 63 68 65 63 6b 69 6e 0a 6d 69 67 68 74   a checkin.might
264d0 20 68 61 76 65 20 74 77 6f 20 6f 72 20 74 68 72   have two or thr
264e0 65 65 20 6f 72 20 6d 6f 72 65 20 70 61 72 65 6e  ee or more paren
264f0 74 73 2e 20 20 41 20 73 63 68 65 6d 61 20 74 6f  ts.  A schema to
26500 20 6b 65 65 70 20 74 72 61 63 6b 20 6f 66 0a 63   keep track of.c
26510 68 65 63 6b 69 6e 73 20 61 6e 64 20 74 68 65 20  heckins and the 
26520 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 74  order in which t
26530 68 65 79 20 6f 63 63 75 72 20 6d 69 67 68 74 20  hey occur might 
26540 6c 6f 6f 6b 20 73 6f 6d 65 74 68 69 6e 67 20 6c  look something l
26550 69 6b 65 0a 74 68 69 73 3a 0a 0a 3c 62 6c 6f 63  ike.this:..<bloc
26560 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45  kquote><pre>.CRE
26570 41 54 45 20 54 41 42 4c 45 20 63 68 65 63 6b 69  ATE TABLE checki
26580 6e 28 0a 20 20 69 64 20 49 4e 54 45 47 45 52 20  n(.  id INTEGER 
26590 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 6d  PRIMARY KEY,.  m
265a0 74 69 6d 65 20 49 4e 54 45 47 45 52 20 2d 2d 20  time INTEGER -- 
265b0 74 69 6d 65 73 74 61 6d 70 20 77 68 65 6e 20 74  timestamp when t
265c0 68 69 73 20 63 68 65 63 6b 69 6e 20 6f 63 63 75  his checkin occu
265d0 72 72 65 64 0a 29 3b 0a 43 52 45 41 54 45 20 54  rred.);.CREATE T
265e0 41 42 4c 45 20 64 65 72 69 76 65 64 66 72 6f 6d  ABLE derivedfrom
265f0 28 0a 20 20 78 66 72 6f 6d 20 49 4e 54 45 47 45  (.  xfrom INTEGE
26600 52 20 4e 4f 54 20 4e 55 4c 4c 20 52 45 46 45 52  R NOT NULL REFER
26610 45 4e 43 45 53 20 63 68 65 63 6b 69 6e 2c 20 2d  ENCES checkin, -
26620 2d 20 70 61 72 65 6e 74 20 63 68 65 63 6b 69 6e  - parent checkin
26630 0a 20 20 78 74 6f 20 49 4e 54 45 47 45 52 20 4e  .  xto INTEGER N
26640 4f 54 20 4e 55 4c 4c 20 52 45 46 45 52 45 4e 43  OT NULL REFERENC
26650 45 53 20 63 68 65 63 6b 69 6e 2c 20 20 20 2d 2d  ES checkin,   --
26660 20 64 65 72 69 76 65 64 20 63 68 65 63 6b 69 6e   derived checkin
26670 0a 20 20 50 52 49 4d 41 52 59 20 4b 45 59 28 78  .  PRIMARY KEY(x
26680 66 72 6f 6d 2c 78 74 6f 29 0a 29 3b 0a 43 52 45  from,xto).);.CRE
26690 41 54 45 20 49 4e 44 45 58 20 64 65 72 69 76 65  ATE INDEX derive
266a0 64 66 72 6f 6d 5f 62 61 63 6b 20 4f 4e 20 64 65  dfrom_back ON de
266b0 72 69 76 65 64 66 72 6f 6d 28 78 74 6f 2c 78 66  rivedfrom(xto,xf
266c0 72 6f 6d 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  rom);.</pre></bl
266d0 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68  ockquote>..<p>Th
266e0 69 73 20 67 72 61 70 68 20 69 73 20 61 63 79 63  is graph is acyc
266f0 6c 69 63 2e 20 20 41 6e 64 20 77 65 20 61 73 73  lic.  And we ass
26700 75 6d 65 20 74 68 61 74 20 74 68 65 20 6d 74 69  ume that the mti
26710 6d 65 20 6f 66 20 65 76 65 72 79 0a 63 68 69 6c  me of every.chil
26720 64 20 63 68 65 63 6b 69 6e 20 69 73 20 6e 6f 20  d checkin is no 
26730 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6d 74  less than the mt
26740 69 6d 65 20 6f 66 20 61 6c 6c 20 69 74 73 20 70  ime of all its p
26750 61 72 65 6e 74 73 2e 20 20 42 75 74 0a 75 6e 6c  arents.  But.unl
26760 69 6b 65 20 74 68 65 20 65 61 72 6c 69 65 72 20  ike the earlier 
26770 65 78 61 6d 70 6c 65 73 2c 20 74 68 69 73 20 67  examples, this g
26780 72 61 70 68 20 6d 69 67 68 74 20 68 61 76 65 20  raph might have 
26790 6d 75 6c 74 69 70 6c 65 20 70 61 74 68 73 20 6f  multiple paths o
267a0 66 0a 64 69 66 66 65 72 69 6e 67 20 6c 65 6e 67  f.differing leng
267b0 74 68 73 20 62 65 74 77 65 65 6e 20 61 6e 79 20  ths between any 
267c0 74 77 6f 20 63 68 65 63 6b 69 6e 73 2e 0a 0a 3c  two checkins...<
267d0 70 3e 57 65 20 77 61 6e 74 20 74 6f 20 6b 6e 6f  p>We want to kno
267e0 77 20 74 68 65 20 74 77 65 6e 74 79 20 6d 6f 73  w the twenty mos
267f0 74 20 72 65 63 65 6e 74 20 61 6e 63 65 73 74 6f  t recent ancesto
26800 72 73 20 69 6e 20 74 69 6d 65 20 28 6f 75 74 20  rs in time (out 
26810 6f 66 0a 74 68 65 20 74 68 6f 75 73 61 6e 64 73  of.the thousands
26820 20 61 6e 64 20 74 68 6f 75 73 61 6e 64 73 20 6f   and thousands o
26830 66 20 61 6e 63 65 73 74 6f 72 73 20 69 6e 20 74  f ancestors in t
26840 68 65 20 77 68 6f 6c 65 20 44 41 47 29 20 66 6f  he whole DAG) fo
26850 72 0a 63 68 65 63 6b 69 6e 20 22 40 42 41 53 45  r.checkin "@BASE
26860 4c 49 4e 45 22 2e 20 20 28 41 20 71 75 65 72 79  LINE".  (A query
26870 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73   similar to this
26880 20 69 73 20 75 73 65 64 0a 62 79 20 74 68 65 20   is used.by the 
26890 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f  <a href="http://
268a0 77 77 77 2e 66 6f 73 73 69 6c 2d 73 63 6d 2e 6f  www.fossil-scm.o
268b0 72 67 2f 22 3e 46 6f 73 73 69 6c 3c 2f 61 3e 20  rg/">Fossil</a> 
268c0 56 43 53 20 74 6f 0a 73 68 6f 77 20 74 68 65 20  VCS to.show the 
268d0 4e 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 6e  N most recent an
268e0 63 65 73 74 6f 72 73 20 6f 66 20 61 20 63 68 65  cestors of a che
268f0 63 6b 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ck.  For example
26900 3a 0a 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a  :.<a href="http:
26910 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72 67  //www.sqlite.org
26920 2f 73 72 63 2f 74 69 6d 65 6c 69 6e 65 3f 70 3d  /src/timeline?p=
26930 74 72 75 6e 6b 26 6e 3d 33 30 22 3e 68 74 74 70  trunk&n=30">http
26940 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72  ://www.sqlite.or
26950 67 2f 73 72 63 2f 74 69 6d 65 6c 69 6e 65 3f 70  g/src/timeline?p
26960 3d 74 72 75 6e 6b 26 6e 3d 33 30 3c 2f 61 3e 2e  =trunk&n=30</a>.
26970 29 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  )..<blockquote><
26980 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53  pre>.WITH RECURS
26990 49 56 45 0a 20 20 61 6e 63 65 73 74 6f 72 28 69  IVE.  ancestor(i
269a0 64 2c 6d 74 69 6d 65 29 20 41 53 20 28 0a 20 20  d,mtime) AS (.  
269b0 20 20 53 45 4c 45 43 54 20 69 64 2c 20 6d 74 69    SELECT id, mti
269c0 6d 65 20 46 52 4f 4d 20 63 68 65 63 6b 69 6e 20  me FROM checkin 
269d0 57 48 45 52 45 20 69 64 3d 40 42 41 53 45 4c 49  WHERE id=@BASELI
269e0 4e 45 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20  NE.    UNION.   
269f0 20 53 45 4c 45 43 54 20 64 65 72 69 76 65 64 66   SELECT derivedf
26a00 72 6f 6d 2e 78 66 72 6f 6d 2c 20 63 68 65 63 6b  rom.xfrom, check
26a10 69 6e 2e 6d 74 69 6d 65 0a 20 20 20 20 20 20 46  in.mtime.      F
26a20 52 4f 4d 20 61 6e 63 65 73 74 6f 72 2c 20 64 65  ROM ancestor, de
26a30 72 69 76 65 64 66 72 6f 6d 2c 20 63 68 65 63 6b  rivedfrom, check
26a40 69 6e 0a 20 20 20 20 20 57 48 45 52 45 20 61 6e  in.     WHERE an
26a50 63 65 73 74 6f 72 2e 69 64 3d 64 65 72 69 76 65  cestor.id=derive
26a60 64 66 72 6f 6d 2e 78 74 6f 0a 20 20 20 20 20 20  dfrom.xto.      
26a70 20 41 4e 44 20 63 68 65 63 6b 69 6e 2e 69 64 3d   AND checkin.id=
26a80 64 65 72 69 76 65 64 66 72 6f 6d 2e 78 66 72 6f  derivedfrom.xfro
26a90 6d 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59 20  m.     ORDER BY 
26aa0 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65 20 44 45  checkin.mtime DE
26ab0 53 43 0a 20 20 20 20 20 4c 49 4d 49 54 20 32 30  SC.     LIMIT 20
26ac0 0a 20 20 29 0a 53 45 4c 45 43 54 20 2a 20 46 52  .  ).SELECT * FR
26ad0 4f 4d 20 63 68 65 63 6b 69 6e 20 4a 4f 49 4e 20  OM checkin JOIN 
26ae0 61 6e 63 65 73 74 6f 72 20 55 53 49 4e 47 28 69  ancestor USING(i
26af0 64 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  d);.</pre></bloc
26b00 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 54 68 65  kquote>..<p>.The
26b10 20 22 4f 52 44 45 52 20 42 59 20 63 68 65 63 6b   "ORDER BY check
26b20 69 6e 2e 6d 74 69 6d 65 20 44 45 53 43 22 20 74  in.mtime DESC" t
26b30 65 72 6d 20 69 6e 20 74 68 65 20 72 65 63 75 72  erm in the recur
26b40 73 69 76 65 2d 73 65 6c 65 63 74 20 6d 61 6b 65  sive-select make
26b50 73 0a 74 68 65 20 71 75 65 72 79 20 72 75 6e 20  s.the query run 
26b60 6d 75 63 68 20 66 61 73 74 65 72 20 62 79 20 70  much faster by p
26b70 72 65 76 65 6e 74 69 6e 67 20 69 74 20 66 72 6f  reventing it fro
26b80 6d 20 66 6f 6c 6c 6f 77 69 6e 67 0a 62 72 61 6e  m following.bran
26b90 63 68 65 73 20 74 68 61 74 20 6d 65 72 67 65 20  ches that merge 
26ba0 63 68 65 63 6b 69 6e 73 0a 66 72 6f 6d 20 6c 6f  checkins.from lo
26bb0 6e 67 20 61 67 6f 2e 20 20 54 68 65 20 4f 52 44  ng ago.  The ORD
26bc0 45 52 20 42 59 20 66 6f 72 63 65 73 20 74 68 65  ER BY forces the
26bd0 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63   recursive-selec
26be0 74 20 74 6f 20 66 6f 63 75 73 0a 6f 6e 20 74 68  t to focus.on th
26bf0 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 63 68  e most recent ch
26c00 65 63 6b 69 6e 73 2c 20 74 68 65 20 6f 6e 65 73  eckins, the ones
26c10 20 77 65 20 77 61 6e 74 2e 20 20 57 69 74 68 6f   we want.  Witho
26c20 75 74 20 74 68 65 20 4f 52 44 45 52 20 42 59 0a  ut the ORDER BY.
26c30 6f 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65  on the recursive
26c40 2d 73 65 6c 65 63 74 2c 20 6f 6e 65 20 77 6f 75  -select, one wou
26c50 6c 64 20 62 65 20 66 6f 72 63 65 64 20 74 6f 20  ld be forced to 
26c60 63 6f 6d 70 75 74 65 20 74 68 65 20 63 6f 6d 70  compute the comp
26c70 6c 65 74 65 20 73 65 74 20 6f 66 0a 74 68 6f 75  lete set of.thou
26c80 73 61 6e 64 73 20 6f 66 20 61 6e 63 65 73 74 6f  sands of ancesto
26c90 72 73 2c 20 73 6f 72 74 20 74 68 65 6d 20 61 6c  rs, sort them al
26ca0 6c 20 62 79 20 6d 74 69 6d 65 2c 20 74 68 65 6e  l by mtime, then
26cb0 20 74 61 6b 65 20 74 68 65 20 74 6f 70 20 74 77   take the top tw
26cc0 65 6e 74 79 2e 0a 54 68 65 20 4f 52 44 45 52 20  enty..The ORDER 
26cd0 42 59 20 65 73 73 65 6e 74 69 61 6c 6c 79 20 73  BY essentially s
26ce0 65 74 73 20 75 70 20 61 20 70 72 69 6f 72 69 74  ets up a priorit
26cf0 79 20 71 75 65 75 65 20 74 68 61 74 0a 66 6f 72  y queue that.for
26d00 63 65 73 20 74 68 65 20 72 65 63 75 72 73 69 76  ces the recursiv
26d10 65 20 71 75 65 72 79 20 74 6f 20 6c 6f 6f 6b 20  e query to look 
26d20 61 74 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  at the most rece
26d30 6e 74 20 61 6e 63 65 73 74 6f 72 73 20 66 69 72  nt ancestors fir
26d40 73 74 2c 0a 61 6c 6c 6f 77 69 6e 67 20 74 68 65  st,.allowing the
26d50 20 75 73 65 20 6f 66 20 61 20 4c 49 4d 49 54 20   use of a LIMIT 
26d60 63 6c 61 75 73 65 20 74 6f 20 72 65 73 74 72 69  clause to restri
26d70 63 74 20 74 68 65 20 73 63 6f 70 65 20 6f 66 20  ct the scope of 
26d80 74 68 65 0a 71 75 65 72 79 20 74 6f 20 6a 75 73  the.query to jus
26d90 74 20 74 68 65 20 63 68 65 63 6b 69 6e 73 20 6f  t the checkins o
26da0 66 20 69 6e 74 65 72 65 73 74 2e 0a 0a 3c 74 63  f interest...<tc
26db0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 69  l>hd_fragment wi
26dc0 74 68 6f 72 64 65 72 62 79 3c 2f 74 63 6c 3e 0a  thorderby</tcl>.
26dd0 3c 68 34 3e 43 6f 6e 74 72 6f 6c 6c 69 6e 67 20  <h4>Controlling 
26de0 44 65 70 74 68 2d 46 69 72 73 74 20 56 65 72 73  Depth-First Vers
26df0 75 73 20 42 72 65 61 64 74 68 2d 46 69 72 73 74  us Breadth-First
26e00 20 53 65 61 72 63 68 20 4f 66 20 61 20 54 72 65   Search Of a Tre
26e10 65 0a 55 73 69 6e 67 20 4f 52 44 45 52 20 42 59  e.Using ORDER BY
26e20 3c 2f 68 34 3e 0a 0a 3c 70 3e 41 6e 20 4f 52 44  </h4>..<p>An ORD
26e30 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e 20  ER BY clause on 
26e40 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65  the recursive-se
26e50 6c 65 63 74 20 63 61 6e 20 62 65 20 75 73 65 64  lect can be used
26e60 20 74 6f 20 63 6f 6e 74 72 6f 6c 0a 77 68 65 74   to control.whet
26e70 68 65 72 20 74 68 65 20 73 65 61 72 63 68 20 6f  her the search o
26e80 66 20 61 20 74 72 65 65 20 69 73 20 64 65 70 74  f a tree is dept
26e90 68 2d 66 69 72 73 74 20 6f 72 20 62 72 65 61 64  h-first or bread
26ea0 74 68 2d 66 69 72 73 74 2e 20 20 54 6f 0a 69 6c  th-first.  To.il
26eb0 6c 75 73 74 72 61 74 65 2c 20 77 65 20 77 69 6c  lustrate, we wil
26ec0 6c 20 75 73 65 20 61 20 76 61 72 69 61 74 69 6f  l use a variatio
26ed0 6e 20 6f 6e 20 74 68 65 20 22 6f 72 67 22 20 74  n on the "org" t
26ee0 61 62 6c 65 20 66 72 6f 6d 20 61 6e 20 65 78 61  able from an exa
26ef0 6d 70 6c 65 0a 61 62 6f 76 65 2c 20 77 69 74 68  mple.above, with
26f00 6f 75 74 20 74 68 65 20 22 68 65 69 67 68 74 22  out the "height"
26f10 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20 77 69 74   column, and wit
26f20 68 20 73 6f 6d 65 20 72 65 61 6c 20 64 61 74 61  h some real data
26f30 20 69 6e 73 65 72 74 65 64 3a 0a 0a 3c 62 6c 6f   inserted:..<blo
26f40 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52  ckquote><pre>.CR
26f50 45 41 54 45 20 54 41 42 4c 45 20 6f 72 67 28 0a  EATE TABLE org(.
26f60 20 20 6e 61 6d 65 20 54 45 58 54 20 50 52 49 4d    name TEXT PRIM
26f70 41 52 59 20 4b 45 59 2c 0a 20 20 62 6f 73 73 20  ARY KEY,.  boss 
26f80 54 45 58 54 20 52 45 46 45 52 45 4e 43 45 53 20  TEXT REFERENCES 
26f90 6f 72 67 0a 29 20 57 49 54 48 4f 55 54 20 52 4f  org.) WITHOUT RO
26fa0 57 49 44 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f  WID;.INSERT INTO
26fb0 20 6f 72 67 20 56 41 4c 55 45 53 28 27 41 6c 69   org VALUES('Ali
26fc0 63 65 27 2c 4e 55 4c 4c 29 3b 0a 49 4e 53 45 52  ce',NULL);.INSER
26fd0 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45  T INTO org VALUE
26fe0 53 28 27 42 6f 62 27 2c 27 41 6c 69 63 65 27 29  S('Bob','Alice')
26ff0 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72  ;.INSERT INTO or
27000 67 20 56 41 4c 55 45 53 28 27 43 69 6e 64 79 27  g VALUES('Cindy'
27010 2c 27 41 6c 69 63 65 27 29 3b 0a 49 4e 53 45 52  ,'Alice');.INSER
27020 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45  T INTO org VALUE
27030 53 28 27 44 61 76 65 27 2c 27 42 6f 62 27 29 3b  S('Dave','Bob');
27040 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67  .INSERT INTO org
27050 20 56 41 4c 55 45 53 28 27 45 6d 6d 61 27 2c 27   VALUES('Emma','
27060 42 6f 62 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e  Bob');.INSERT IN
27070 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27 46  TO org VALUES('F
27080 72 65 64 27 2c 27 43 69 6e 64 79 27 29 3b 0a 49  red','Cindy');.I
27090 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56  NSERT INTO org V
270a0 41 4c 55 45 53 28 27 47 61 69 6c 27 2c 27 43 69  ALUES('Gail','Ci
270b0 6e 64 79 27 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  ndy');.</pre></b
270c0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 48  lockquote>..<p>H
270d0 65 72 65 20 69 73 20 61 20 71 75 65 72 79 20 74  ere is a query t
270e0 6f 20 73 68 6f 77 20 74 68 65 20 74 72 65 65 20  o show the tree 
270f0 73 74 72 75 63 74 75 72 65 20 69 6e 20 61 20 62  structure in a b
27100 72 65 61 64 74 68 2d 66 69 72 73 74 20 70 61 74  readth-first pat
27110 74 65 72 6e 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  tern:..<blockquo
27120 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45  te><pre>.WITH RE
27130 43 55 52 53 49 56 45 0a 20 20 75 6e 64 65 72 5f  CURSIVE.  under_
27140 61 6c 69 63 65 28 6e 61 6d 65 2c 6c 65 76 65 6c  alice(name,level
27150 29 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45  ) AS (.    VALUE
27160 53 28 27 41 6c 69 63 65 27 2c 30 29 0a 20 20 20  S('Alice',0).   
27170 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53   UNION ALL.    S
27180 45 4c 45 43 54 20 6f 72 67 2e 6e 61 6d 65 2c 20  ELECT org.name, 
27190 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6c 65 76 65  under_alice.leve
271a0 6c 2b 31 0a 20 20 20 20 20 20 46 52 4f 4d 20 6f  l+1.      FROM o
271b0 72 67 20 4a 4f 49 4e 20 75 6e 64 65 72 5f 61 6c  rg JOIN under_al
271c0 69 63 65 20 4f 4e 20 6f 72 67 2e 62 6f 73 73 3d  ice ON org.boss=
271d0 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6e 61 6d 65  under_alice.name
271e0 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 32  .     ORDER BY 2
271f0 0a 20 20 29 0a 53 45 4c 45 43 54 20 73 75 62 73  .  ).SELECT subs
27200 74 72 28 27 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 27 2c  tr('..........',
27210 31 2c 6c 65 76 65 6c 2a 33 29 20 7c 7c 20 6e 61  1,level*3) || na
27220 6d 65 20 46 52 4f 4d 20 75 6e 64 65 72 5f 61 6c  me FROM under_al
27230 69 63 65 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  ice;.</pre></blo
27240 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65  ckquote>..<p>The
27250 20 22 4f 52 44 45 52 20 42 59 20 32 22 20 28 77   "ORDER BY 2" (w
27260 68 69 63 68 20 6d 65 61 6e 73 20 74 68 65 20 73  hich means the s
27270 61 6d 65 20 61 73 20 22 4f 52 44 45 52 20 42 59  ame as "ORDER BY
27280 20 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6c 65 76   under_alice.lev
27290 65 6c 2b 31 22 29 0a 63 61 75 73 65 73 20 68 69  el+1").causes hi
272a0 67 68 65 72 20 6c 65 76 65 6c 73 20 69 6e 20 74  gher levels in t
272b0 68 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20  he organization 
272c0 63 68 61 72 74 20 28 77 69 74 68 20 73 6d 61 6c  chart (with smal
272d0 6c 65 72 20 22 6c 65 76 65 6c 22 20 76 61 6c 75  ler "level" valu
272e0 65 73 29 0a 74 6f 20 62 65 20 70 72 6f 63 65 73  es).to be proces
272f0 73 65 64 20 66 69 72 73 74 2c 20 72 65 73 75 6c  sed first, resul
27300 74 69 6e 67 20 69 6e 20 61 20 62 72 65 61 64 74  ting in a breadt
27310 68 2d 66 69 72 73 74 20 73 65 61 72 63 68 2e 20  h-first search. 
27320 20 54 68 65 20 6f 75 74 70 75 74 20 69 73 3a 0a   The output is:.
27330 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
27340 65 3e 0a 41 6c 69 63 65 0a 2e 2e 2e 42 6f 62 0a  e>.Alice....Bob.
27350 2e 2e 2e 43 69 6e 64 79 0a 2e 2e 2e 2e 2e 2e 44  ...Cindy.......D
27360 61 76 65 0a 2e 2e 2e 2e 2e 2e 45 6d 6d 61 0a 2e  ave.......Emma..
27370 2e 2e 2e 2e 2e 46 72 65 64 0a 2e 2e 2e 2e 2e 2e  .....Fred.......
27380 47 61 69 6c 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  Gail.</pre></blo
27390 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 42 75 74  ckquote>..<p>But
273a0 20 69 66 20 77 65 20 63 68 61 6e 67 65 20 74 68   if we change th
273b0 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
273c0 65 20 74 6f 20 61 64 64 20 74 68 65 20 22 44 45  e to add the "DE
273d0 53 43 22 20 6d 6f 64 69 66 69 65 72 2c 20 74 68  SC" modifier, th
273e0 61 74 20 77 69 6c 6c 0a 63 61 75 73 65 20 6c 6f  at will.cause lo
273f0 77 65 72 20 6c 65 76 65 6c 73 20 69 6e 20 74 68  wer levels in th
27400 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20 28  e organization (
27410 77 69 74 68 20 6c 61 72 67 65 72 20 22 6c 65 76  with larger "lev
27420 65 6c 22 20 76 61 6c 75 65 73 29 20 74 6f 20 62  el" values) to b
27430 65 0a 70 72 6f 63 65 73 73 65 64 20 66 69 72 73  e.processed firs
27440 74 20 62 79 20 74 68 65 20 72 65 63 75 72 73 69  t by the recursi
27450 76 65 2d 73 65 6c 65 63 74 2c 20 72 65 73 75 6c  ve-select, resul
27460 74 69 6e 67 20 69 6e 20 61 20 64 65 70 74 68 2d  ting in a depth-
27470 66 69 72 73 74 20 73 65 61 72 63 68 3a 0a 0a 3c  first search:..<
27480 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
27490 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a  .WITH RECURSIVE.
274a0 20 20 75 6e 64 65 72 5f 61 6c 69 63 65 28 6e 61    under_alice(na
274b0 6d 65 2c 6c 65 76 65 6c 29 20 41 53 20 28 0a 20  me,level) AS (. 
274c0 20 20 20 56 41 4c 55 45 53 28 27 41 6c 69 63 65     VALUES('Alice
274d0 27 2c 30 29 0a 20 20 20 20 55 4e 49 4f 4e 20 41  ',0).    UNION A
274e0 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 20 6f 72  LL.    SELECT or
274f0 67 2e 6e 61 6d 65 2c 20 75 6e 64 65 72 5f 61 6c  g.name, under_al
27500 69 63 65 2e 6c 65 76 65 6c 2b 31 0a 20 20 20 20  ice.level+1.    
27510 20 20 46 52 4f 4d 20 6f 72 67 20 4a 4f 49 4e 20    FROM org JOIN 
27520 75 6e 64 65 72 5f 61 6c 69 63 65 20 4f 4e 20 6f  under_alice ON o
27530 72 67 2e 62 6f 73 73 3d 75 6e 64 65 72 5f 61 6c  rg.boss=under_al
27540 69 63 65 2e 6e 61 6d 65 0a 20 20 20 20 20 4f 52  ice.name.     OR
27550 44 45 52 20 42 59 20 32 20 3c 62 3e 44 45 53 43  DER BY 2 <b>DESC
27560 3c 2f 62 3e 0a 20 20 29 0a 53 45 4c 45 43 54 20  </b>.  ).SELECT 
27570 73 75 62 73 74 72 28 27 2e 2e 2e 2e 2e 2e 2e 2e  substr('........
27580 2e 2e 27 2c 31 2c 6c 65 76 65 6c 2a 33 29 20 7c  ..',1,level*3) |
27590 7c 20 6e 61 6d 65 20 46 52 4f 4d 20 75 6e 64 65  | name FROM unde
275a0 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70 72 65 3e 3c  r_alice;.</pre><
275b0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
275c0 3e 54 68 65 20 6f 75 74 70 75 74 20 6f 66 20 74  >The output of t
275d0 68 69 73 20 72 65 76 69 73 65 64 20 71 75 65 72  his revised quer
275e0 79 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  y is:..<blockquo
275f0 74 65 3e 3c 70 72 65 3e 0a 41 6c 69 63 65 0a 2e  te><pre>.Alice..
27600 2e 2e 42 6f 62 0a 2e 2e 2e 2e 2e 2e 44 61 76 65  ..Bob.......Dave
27610 0a 2e 2e 2e 2e 2e 2e 45 6d 6d 61 0a 2e 2e 2e 43  .......Emma....C
27620 69 6e 64 79 0a 2e 2e 2e 2e 2e 2e 46 72 65 64 0a  indy.......Fred.
27630 2e 2e 2e 2e 2e 2e 47 61 69 6c 0a 3c 2f 70 72 65  ......Gail.</pre
27640 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
27650 3c 70 3e 57 68 65 6e 20 74 68 65 20 4f 52 44 45  <p>When the ORDE
27660 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 6f  R BY clause is o
27670 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
27680 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
27690 2c 20 74 68 65 0a 71 75 65 75 65 20 62 65 68 61  , the.queue beha
276a0 76 65 73 20 61 73 20 61 20 46 49 46 4f 2c 20 77  ves as a FIFO, w
276b0 68 69 63 68 20 72 65 73 75 6c 74 73 20 69 6e 20  hich results in 
276c0 61 20 62 72 65 61 64 74 68 2d 66 69 72 73 74 20  a breadth-first 
276d0 73 65 61 72 63 68 2e 0a 0a 0a 3c 74 63 6c 3e 68  search....<tcl>h
276e0 64 5f 66 72 61 67 6d 65 6e 74 20 6d 61 6e 64 65  d_fragment mande
276f0 6c 62 72 6f 74 20 7b 63 6f 6d 70 75 74 65 20 74  lbrot {compute t
27700 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74 20 73 65  he Mandelbrot se
27710 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 4f 75 74  t}</tcl>.<h4>Out
27720 6c 61 6e 64 69 73 68 20 52 65 63 75 72 73 69 76  landish Recursiv
27730 65 20 51 75 65 72 79 20 45 78 61 6d 70 6c 65 73  e Query Examples
27740 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f  </h4>..<p>The fo
27750 6c 6c 6f 77 69 6e 67 20 71 75 65 72 79 20 63 6f  llowing query co
27760 6d 70 75 74 65 73 20 61 6e 20 61 70 70 72 6f 78  mputes an approx
27770 69 6d 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 4d  imation of the M
27780 61 6e 64 65 6c 62 72 6f 74 20 53 65 74 0a 61 6e  andelbrot Set.an
27790 64 20 6f 75 74 70 75 74 73 20 74 68 65 20 72 65  d outputs the re
277a0 73 75 6c 74 20 61 73 20 41 53 43 49 49 2d 61 72  sult as ASCII-ar
277b0 74 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  t:..<blockquote>
277c0 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52  <pre>.WITH RECUR
277d0 53 49 56 45 0a 20 20 78 61 78 69 73 28 78 29 20  SIVE.  xaxis(x) 
277e0 41 53 20 28 56 41 4c 55 45 53 28 2d 32 2e 30 29  AS (VALUES(-2.0)
277f0 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43   UNION ALL SELEC
27800 54 20 78 2b 30 2e 30 35 20 46 52 4f 4d 20 78 61  T x+0.05 FROM xa
27810 78 69 73 20 57 48 45 52 45 20 78 26 6c 74 3b 31  xis WHERE x&lt;1
27820 2e 32 29 2c 0a 20 20 79 61 78 69 73 28 79 29 20  .2),.  yaxis(y) 
27830 41 53 20 28 56 41 4c 55 45 53 28 2d 31 2e 30 29  AS (VALUES(-1.0)
27840 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43   UNION ALL SELEC
27850 54 20 79 2b 30 2e 31 20 46 52 4f 4d 20 79 61 78  T y+0.1 FROM yax
27860 69 73 20 57 48 45 52 45 20 79 26 6c 74 3b 31 2e  is WHERE y&lt;1.
27870 30 29 2c 0a 20 20 6d 28 69 74 65 72 2c 20 63 78  0),.  m(iter, cx
27880 2c 20 63 79 2c 20 78 2c 20 79 29 20 41 53 20 28  , cy, x, y) AS (
27890 0a 20 20 20 20 53 45 4c 45 43 54 20 30 2c 20 78  .    SELECT 0, x
278a0 2c 20 79 2c 20 30 2e 30 2c 20 30 2e 30 20 46 52  , y, 0.0, 0.0 FR
278b0 4f 4d 20 78 61 78 69 73 2c 20 79 61 78 69 73 0a  OM xaxis, yaxis.
278c0 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20      UNION ALL.  
278d0 20 20 53 45 4c 45 43 54 20 69 74 65 72 2b 31 2c    SELECT iter+1,
278e0 20 63 78 2c 20 63 79 2c 20 78 2a 78 2d 79 2a 79   cx, cy, x*x-y*y
278f0 20 2b 20 63 78 2c 20 32 2e 30 2a 78 2a 79 20 2b   + cx, 2.0*x*y +
27900 20 63 79 20 46 52 4f 4d 20 6d 20 0a 20 20 20 20   cy FROM m .    
27910 20 57 48 45 52 45 20 28 78 2a 78 20 2b 20 79 2a   WHERE (x*x + y*
27920 79 29 20 26 6c 74 3b 20 34 2e 30 20 41 4e 44 20  y) &lt; 4.0 AND 
27930 69 74 65 72 26 6c 74 3b 32 38 0a 20 20 29 2c 0a  iter&lt;28.  ),.
27940 20 20 6d 32 28 69 74 65 72 2c 20 63 78 2c 20 63    m2(iter, cx, c
27950 79 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45  y) AS (.    SELE
27960 43 54 20 6d 61 78 28 69 74 65 72 29 2c 20 63 78  CT max(iter), cx
27970 2c 20 63 79 20 46 52 4f 4d 20 6d 20 47 52 4f 55  , cy FROM m GROU
27980 50 20 42 59 20 63 78 2c 20 63 79 0a 20 20 29 2c  P BY cx, cy.  ),
27990 0a 20 20 61 28 74 29 20 41 53 20 28 0a 20 20 20  .  a(t) AS (.   
279a0 20 53 45 4c 45 43 54 20 67 72 6f 75 70 5f 63 6f   SELECT group_co
279b0 6e 63 61 74 28 20 73 75 62 73 74 72 28 27 20 2e  ncat( substr(' .
279c0 2b 2a 23 27 2c 20 31 2b 6d 69 6e 28 69 74 65 72  +*#', 1+min(iter
279d0 2f 37 2c 34 29 2c 20 31 29 2c 20 27 27 29 20 0a  /7,4), 1), '') .
279e0 20 20 20 20 46 52 4f 4d 20 6d 32 20 47 52 4f 55      FROM m2 GROU
279f0 50 20 42 59 20 63 79 0a 20 20 29 0a 53 45 4c 45  P BY cy.  ).SELE
27a00 43 54 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  CT group_concat(
27a10 72 74 72 69 6d 28 74 29 2c 78 27 30 61 27 29 20  rtrim(t),x'0a') 
27a20 46 52 4f 4d 20 61 3b 0a 3c 2f 70 72 65 3e 3c 2f  FROM a;.</pre></
27a30 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
27a40 49 6e 20 74 68 69 73 20 71 75 65 72 79 2c 20 74  In this query, t
27a50 68 65 20 22 78 61 78 69 73 22 20 61 6e 64 20 22  he "xaxis" and "
27a60 79 61 78 69 73 22 20 43 54 45 73 20 64 65 66 69  yaxis" CTEs defi
27a70 6e 65 20 74 68 65 20 67 72 69 64 20 6f 66 20 70  ne the grid of p
27a80 6f 69 6e 74 73 20 66 6f 72 0a 77 68 69 63 68 20  oints for.which 
27a90 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74 20 53  the Mandelbrot S
27aa0 65 74 20 77 69 6c 6c 20 62 65 20 61 70 70 72 6f  et will be appro
27ab0 78 69 6d 61 74 65 64 2e 20 20 45 61 63 68 20 72  ximated.  Each r
27ac0 6f 77 20 69 6e 20 74 68 65 0a 22 6d 28 69 74 65  ow in the."m(ite
27ad0 72 2c 63 78 2c 63 79 2c 78 2c 79 29 22 20 43 54  r,cx,cy,x,y)" CT
27ae0 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61 66 74  E means that aft
27af0 65 72 20 22 69 74 65 72 22 20 69 74 65 72 61 74  er "iter" iterat
27b00 69 6f 6e 73 2c 20 74 68 65 20 4d 61 6e 64 65 6c  ions, the Mandel
27b10 62 72 6f 74 0a 69 74 65 72 61 74 69 6f 6e 20 73  brot.iteration s
27b20 74 61 72 74 69 6e 67 20 61 74 20 63 78 2c 63 79  tarting at cx,cy
27b30 20 68 61 73 20 72 65 61 63 68 65 64 20 70 6f 69   has reached poi
27b40 6e 74 20 78 2c 79 2e 20 20 54 68 65 20 6e 75 6d  nt x,y.  The num
27b50 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e  ber of iteration
27b60 73 0a 69 6e 20 74 68 69 73 20 65 78 61 6d 70 6c  s.in this exampl
27b70 65 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20  e is limited to 
27b80 32 38 20 28 77 68 69 63 68 20 73 65 76 65 72 65  28 (which severe
27b90 6c 79 20 6c 69 6d 69 74 73 20 74 68 65 20 72 65  ly limits the re
27ba0 73 6f 6c 75 74 69 6f 6e 20 6f 66 0a 74 68 65 20  solution of.the 
27bb0 63 6f 6d 70 75 74 61 74 69 6f 6e 2c 20 62 75 74  computation, but
27bc0 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 20 66   is sufficient f
27bd0 6f 72 20 6c 6f 77 2d 72 65 73 6f 6c 75 74 69 6f  or low-resolutio
27be0 6e 20 41 53 43 49 49 2d 61 72 74 20 6f 75 74 70  n ASCII-art outp
27bf0 75 74 29 2e 0a 54 68 65 20 22 6d 32 28 69 74 65  ut)..The "m2(ite
27c00 72 2c 63 78 2c 63 79 29 22 20 43 54 45 20 68 6f  r,cx,cy)" CTE ho
27c10 6c 64 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  lds the maximum 
27c20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74  number of iterat
27c30 69 6f 6e 73 20 72 65 61 63 68 65 64 20 77 68 65  ions reached whe
27c40 6e 0a 73 74 61 72 74 69 6e 67 20 61 74 20 70 6f  n.starting at po
27c50 69 6e 74 20 63 78 2c 63 79 2e 0a 46 69 6e 61 6c  int cx,cy..Final
27c60 6c 79 2c 20 65 61 63 68 20 72 6f 77 20 69 6e 20  ly, each row in 
27c70 74 68 65 20 22 61 28 74 29 22 20 43 54 45 20 68  the "a(t)" CTE h
27c80 6f 6c 64 73 20 61 20 73 74 72 69 6e 67 20 0a 77  olds a string .w
27c90 68 69 63 68 20 69 73 20 61 20 73 69 6e 67 6c 65  hich is a single
27ca0 20 6c 69 6e 65 20 6f 66 20 74 68 65 20 6f 75 74   line of the out
27cb0 70 75 74 20 41 53 43 49 49 2d 61 72 74 2e 0a 54  put ASCII-art..T
27cc0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
27cd0 65 6e 74 20 61 74 20 74 68 65 20 65 6e 64 20 6a  ent at the end j
27ce0 75 73 74 20 71 75 65 72 69 65 73 20 74 68 65 20  ust queries the 
27cf0 22 61 22 20 43 54 45 20 74 6f 0a 72 65 74 72 69  "a" CTE to.retri
27d00 65 76 65 20 61 6c 6c 20 6c 69 6e 65 73 20 6f 66  eve all lines of
27d10 20 41 53 43 49 49 2d 61 72 74 2c 20 6f 6e 65 20   ASCII-art, one 
27d20 62 79 20 6f 6e 65 2e 0a 0a 3c 70 3e 52 75 6e 6e  by one...<p>Runn
27d30 69 6e 67 20 74 68 65 20 71 75 65 72 79 20 61 62  ing the query ab
27d40 6f 76 65 20 69 6e 20 61 6e 20 53 51 4c 69 74 65  ove in an SQLite
27d50 20 5b 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73   [command-line s
27d60 68 65 6c 6c 5d 20 72 65 73 75 6c 74 73 0a 69 6e  hell] results.in
27d70 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f   the following o
27d80 75 74 70 75 74 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  utput:..<blockqu
27d90 6f 74 65 3e 3c 70 72 65 3e 0a 20 20 20 20 20 20  ote><pre>.      
27da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e                ..
27dc0 2e 2e 23 0a 20 20 20 20 20 20 20 20 20 20 20 20  ..#.            
27dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27de0 20 20 20 20 20 20 20 2e 2e 23 2a 2e 2e 0a 20 20         ..#*...  
27df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
27e10 2e 2b 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20  .+####+..       
27e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e30 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23       .......+###
27e40 23 2e 2e 2e 2e 20 20 20 2b 0a 20 20 20 20 20 20  #....   +.      
27e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e60 20 20 20 20 20 2e 2e 23 23 2b 2a 23 23 23 23 23       ..##+*#####
27e70 23 23 23 23 23 2b 2e 2b 2b 2b 2b 0a 20 20 20 20  #####+.++++.    
27e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e90 20 20 20 20 20 20 2e 2b 2e 23 23 23 23 23 23 23        .+.#######
27ea0 23 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20 20  ###########+..  
27eb0 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e              ....
27ec0 2e 2e 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 23 23  .........+######
27ed0 23 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e 2b  #############+.+
27ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e  .              .
27ef0 2e 2b 2b 2e 2e 23 2e 2e 2e 2e 2e 2a 23 23 23 23  .++..#.....*####
27f00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27f10 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  #+..            
27f20 20 2e 2e 2e 2b 23 23 23 23 23 23 23 2b 2b 23 23   ...+#######++##
27f30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27f40 23 23 23 23 23 2e 0a 20 20 20 20 20 20 20 20 20  #####..         
27f50 20 2e 2e 2e 2e 2b 2a 23 23 23 23 23 23 23 23 23   ....+*#########
27f60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27f70 23 23 23 23 23 23 23 2e 0a 20 23 23 23 23 23 23  #######.. ######
27f80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27f90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27fa0 23 23 23 23 23 23 23 2e 2e 2e 0a 20 20 20 20 20  #######....     
27fb0 20 20 20 20 20 2e 2e 2e 2e 2b 2a 23 23 23 23 23       ....+*#####
27fc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27fd0 23 23 23 23 23 23 23 23 23 23 23 2e 0a 20 20 20  ###########..   
27fe0 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2b 23 23            ...+##
27ff0 23 23 23 23 23 2b 2b 23 23 23 23 23 23 23 23 23  #####++#########
28000 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2e 0a  ##############..
28010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e                ..
28020 2b 2b 2e 2e 23 2e 2e 2e 2e 2e 2a 23 23 23 23 23  ++..#.....*#####
28030 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28040 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
28050 20 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2b 23   .............+#
28060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28070 23 23 2b 2e 2b 0a 20 20 20 20 20 20 20 20 20 20  ##+.+.          
28080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28090 2e 2b 2e 23 23 23 23 23 23 23 23 23 23 23 23 23  .+.#############
280a0 23 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20  #####+..        
280b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280c0 20 20 20 2e 2e 23 23 2b 2a 23 23 23 23 23 23 23     ..##+*#######
280d0 23 23 23 2b 2e 2b 2b 2b 2b 0a 20 20 20 20 20 20  ###+.++++.      
280e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280f0 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2b 23 23        .......+##
28100 23 23 2e 2e 2e 2e 20 20 20 2b 0a 20 20 20 20 20  ##....   +.     
28110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28120 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2b 23              ..+#
28130 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20  ###+..          
28140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28150 20 20 20 20 20 20 20 20 20 2e 2e 23 2a 2e 2e 0a           ..#*...
28160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28180 20 20 20 20 2e 2e 2e 2e 23 0a 20 20 20 20 20 20      ....#.      
28190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 2e                +.
281b0 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
281c0 6f 74 65 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ote>..<tcl>hd_fr
281d0 61 67 6d 65 6e 74 20 73 75 64 6f 6b 75 20 7b 73  agment sudoku {s
281e0 6f 6c 76 65 20 53 75 64 6f 6b 75 20 70 75 7a 7a  olve Sudoku puzz
281f0 6c 65 73 7d 20 3c 2f 74 63 6c 3e 0a 3c 70 3e 54  les} </tcl>.<p>T
28200 68 69 73 20 6e 65 78 74 20 71 75 65 72 79 20 73  his next query s
28210 6f 6c 76 65 73 20 61 20 53 75 64 6f 6b 75 20 70  olves a Sudoku p
28220 75 7a 7a 6c 65 2e 20 20 54 68 65 20 73 74 61 74  uzzle.  The stat
28230 65 20 6f 66 20 74 68 65 20 70 75 7a 7a 6c 65 20  e of the puzzle 
28240 69 73 0a 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is.defined by an
28250 20 38 31 2d 63 68 61 72 61 63 74 65 72 20 73 74   81-character st
28260 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 72  ring formed by r
28270 65 61 64 69 6e 67 20 65 6e 74 72 69 65 73 20 66  eading entries f
28280 72 6f 6d 20 74 68 65 0a 70 75 7a 7a 6c 65 20 62  rom the.puzzle b
28290 6f 78 20 72 6f 77 20 62 79 20 72 6f 77 20 66 72  ox row by row fr
282a0 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
282b0 20 61 6e 64 20 74 68 65 6e 20 66 72 6f 6d 20 74   and then from t
282c0 6f 70 20 74 6f 20 62 6f 74 74 6f 6d 2e 0a 42 6c  op to bottom..Bl
282d0 61 6e 6b 20 73 71 75 61 72 65 73 20 69 6e 20 74  ank squares in t
282e0 68 65 20 70 75 7a 7a 6c 65 20 61 72 65 20 64 65  he puzzle are de
282f0 6e 6f 74 65 64 20 62 79 20 61 20 22 2e 22 20 63  noted by a "." c
28300 68 61 72 61 63 74 65 72 2e 20 20 0a 54 68 75 73  haracter.  .Thus
28310 20 74 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e   the input strin
28320 67 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  g:..<blockquote>
28330 0a 35 33 2e 2e 37 2e 2e 2e 2e 36 2e 2e 31 39 35  .53..7....6..195
28340 2e 2e 2e 2e 39 38 2e 2e 2e 2e 36 2e 38 2e 2e 2e  ....98....6.8...
28350 36 2e 2e 2e 33 34 2e 2e 38 2e 33 2e 2e 31 37 2e  6...34..8.3..17.
28360 2e 2e 32 2e 2e 2e 36 2e 36 2e 2e 2e 2e 32 38 2e  ..2...6.6....28.
28370 2e 2e 2e 34 31 39 2e 2e 35 2e 2e 2e 2e 38 2e 2e  ...419..5....8..
28380 37 39 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  79.</blockquote>
28390 0a 0a 3c 70 3e 43 6f 72 72 65 73 70 6f 6e 64 73  ..<p>Corresponds
283a0 20 74 6f 20 61 20 70 75 7a 7a 6c 65 20 6c 69 6b   to a puzzle lik
283b0 65 20 74 68 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71  e this:..<blockq
283c0 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72  uote>.<table bor
283d0 64 65 72 3d 22 31 22 20 63 65 6c 6c 70 61 64 64  der="1" cellpadd
283e0 69 6e 67 3d 22 35 22 3e 0a 3c 74 72 3e 3c 74 64  ing="5">.<tr><td
283f0 3e 35 3c 74 64 3e 33 3c 74 64 3e 20 3c 74 64 3e  >5<td>3<td> <td>
28400 20 3c 74 64 3e 37 3c 74 64 3e 20 3c 74 64 3e 20   <td>7<td> <td> 
28410 3c 74 64 3e 20 3c 74 64 3e 0a 3c 74 72 3e 3c 74  <td> <td>.<tr><t
28420 64 3e 36 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>6<td> <td> <td
28430 3e 31 3c 74 64 3e 39 3c 74 64 3e 35 3c 74 64 3e  >1<td>9<td>5<td>
28440 20 3c 74 64 3e 20 3c 74 64 3e 0a 3c 74 72 3e 3c   <td> <td>.<tr><
28450 74 64 3e 20 3c 74 64 3e 39 3c 74 64 3e 38 3c 74  td> <td>9<td>8<t
28460 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d> <td> <td> <td
28470 3e 20 3c 74 64 3e 36 3c 74 64 3e 0a 3c 74 72 3e  > <td>6<td>.<tr>
28480 3c 74 64 3e 38 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>8<td> <td> <
28490 74 64 3e 20 3c 74 64 3e 36 3c 74 64 3e 20 3c 74  td> <td>6<td> <t
284a0 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 33 0a 3c 74  d> <td> <td>3.<t
284b0 72 3e 3c 74 64 3e 34 3c 74 64 3e 20 3c 74 64 3e  r><td>4<td> <td>
284c0 20 3c 74 64 3e 38 3c 74 64 3e 20 3c 74 64 3e 33   <td>8<td> <td>3
284d0 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 31 0a  <td> <td> <td>1.
284e0 3c 74 72 3e 3c 74 64 3e 37 3c 74 64 3e 20 3c 74  <tr><td>7<td> <t
284f0 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 32 3c 74 64  d> <td> <td>2<td
28500 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  > <td> <td> <td>
28510 36 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 36  6.<tr><td> <td>6
28520 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
28530 74 64 3e 20 3c 74 64 3e 32 3c 74 64 3e 38 3c 74  td> <td>2<td>8<t
28540 64 3e 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e  d>.<tr><td> <td>
28550 20 3c 74 64 3e 20 3c 74 64 3e 34 3c 74 64 3e 31   <td> <td>4<td>1
28560 3c 74 64 3e 39 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>9<td> <td> <
28570 74 64 3e 35 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74  td>5.<tr><td> <t
28580 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d> <td> <td> <td
28590 3e 38 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  >8<td> <td> <td>
285a0 37 3c 74 64 3e 39 0a 3c 2f 74 61 62 6c 65 3e 0a  7<td>9.</table>.
285b0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
285c0 70 3e 54 68 69 73 20 69 73 20 74 68 65 20 71 75  p>This is the qu
285d0 65 72 79 20 74 68 61 74 20 73 6f 6c 76 65 73 20  ery that solves 
285e0 74 68 65 20 70 75 7a 7a 6c 65 3a 0a 0a 3c 62 6c  the puzzle:..<bl
285f0 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57  ockquote><pre>.W
28600 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20  ITH RECURSIVE.  
28610 69 6e 70 75 74 28 73 75 64 29 20 41 53 20 28 0a  input(sud) AS (.
28620 20 20 20 20 56 41 4c 55 45 53 28 27 35 33 2e 2e      VALUES('53..
28630 37 2e 2e 2e 2e 36 2e 2e 31 39 35 2e 2e 2e 2e 39  7....6..195....9
28640 38 2e 2e 2e 2e 36 2e 38 2e 2e 2e 36 2e 2e 2e 33  8....6.8...6...3
28650 34 2e 2e 38 2e 33 2e 2e 31 37 2e 2e 2e 32 2e 2e  4..8.3..17...2..
28660 2e 36 2e 36 2e 2e 2e 2e 32 38 2e 2e 2e 2e 34 31  .6.6....28....41
28670 39 2e 2e 35 2e 2e 2e 2e 38 2e 2e 37 39 27 29 0a  9..5....8..79').
28680 20 20 29 2c 0a 20 20 64 69 67 69 74 73 28 7a 2c    ),.  digits(z,
28690 20 6c 70 29 20 41 53 20 28 0a 20 20 20 20 56 41   lp) AS (.    VA
286a0 4c 55 45 53 28 27 31 27 2c 20 31 29 0a 20 20 20  LUES('1', 1).   
286b0 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43   UNION ALL SELEC
286c0 54 0a 20 20 20 20 43 41 53 54 28 6c 70 2b 31 20  T.    CAST(lp+1 
286d0 41 53 20 54 45 58 54 29 2c 20 6c 70 2b 31 20 46  AS TEXT), lp+1 F
286e0 52 4f 4d 20 64 69 67 69 74 73 20 57 48 45 52 45  ROM digits WHERE
286f0 20 6c 70 26 6c 74 3b 39 0a 20 20 29 2c 0a 20 20   lp&lt;9.  ),.  
28700 78 28 73 2c 20 69 6e 64 29 20 41 53 20 28 0a 20  x(s, ind) AS (. 
28710 20 20 20 53 45 4c 45 43 54 20 73 75 64 2c 20 69     SELECT sud, i
28720 6e 73 74 72 28 73 75 64 2c 20 27 2e 27 29 20 46  nstr(sud, '.') F
28730 52 4f 4d 20 69 6e 70 75 74 0a 20 20 20 20 55 4e  ROM input.    UN
28740 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45  ION ALL.    SELE
28750 43 54 0a 20 20 20 20 20 20 73 75 62 73 74 72 28  CT.      substr(
28760 73 2c 20 31 2c 20 69 6e 64 2d 31 29 20 7c 7c 20  s, 1, ind-1) || 
28770 7a 20 7c 7c 20 73 75 62 73 74 72 28 73 2c 20 69  z || substr(s, i
28780 6e 64 2b 31 29 2c 0a 20 20 20 20 20 20 69 6e 73  nd+1),.      ins
28790 74 72 28 20 73 75 62 73 74 72 28 73 2c 20 31 2c  tr( substr(s, 1,
287a0 20 69 6e 64 2d 31 29 20 7c 7c 20 7a 20 7c 7c 20   ind-1) || z || 
287b0 73 75 62 73 74 72 28 73 2c 20 69 6e 64 2b 31 29  substr(s, ind+1)
287c0 2c 20 27 2e 27 20 29 0a 20 20 20 20 20 46 52 4f  , '.' ).     FRO
287d0 4d 20 78 2c 20 64 69 67 69 74 73 20 41 53 20 7a  M x, digits AS z
287e0 0a 20 20 20 20 57 48 45 52 45 20 69 6e 64 3e 30  .    WHERE ind>0
287f0 0a 20 20 20 20 20 20 41 4e 44 20 4e 4f 54 20 45  .      AND NOT E
28800 58 49 53 54 53 20 28 0a 20 20 20 20 20 20 20 20  XISTS (.        
28810 20 20 20 20 53 45 4c 45 43 54 20 31 0a 20 20 20      SELECT 1.   
28820 20 20 20 20 20 20 20 20 20 20 20 46 52 4f 4d 20             FROM 
28830 64 69 67 69 74 73 20 41 53 20 6c 70 0a 20 20 20  digits AS lp.   
28840 20 20 20 20 20 20 20 20 20 20 57 48 45 52 45 20            WHERE 
28850 7a 2e 7a 20 3d 20 73 75 62 73 74 72 28 73 2c 20  z.z = substr(s, 
28860 28 28 69 6e 64 2d 31 29 2f 39 29 2a 39 20 2b 20  ((ind-1)/9)*9 + 
28870 6c 70 2c 20 31 29 0a 20 20 20 20 20 20 20 20 20  lp, 1).         
28880 20 20 20 20 20 20 20 4f 52 20 7a 2e 7a 20 3d 20         OR z.z = 
28890 73 75 62 73 74 72 28 73 2c 20 28 28 69 6e 64 2d  substr(s, ((ind-
288a0 31 29 25 39 29 20 2b 20 28 6c 70 2d 31 29 2a 39  1)%9) + (lp-1)*9
288b0 20 2b 20 31 2c 20 31 29 0a 20 20 20 20 20 20 20   + 1, 1).       
288c0 20 20 20 20 20 20 20 20 20 4f 52 20 7a 2e 7a 20           OR z.z 
288d0 3d 20 73 75 62 73 74 72 28 73 2c 20 28 28 28 69  = substr(s, (((i
288e0 6e 64 2d 31 29 2f 33 29 20 25 20 33 29 20 2a 20  nd-1)/3) % 3) * 
288f0 33 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  3.              
28900 20 20 20 20 20 20 20 20 20 20 2b 20 28 28 69 6e            + ((in
28910 64 2d 31 29 2f 32 37 29 20 2a 20 32 37 20 2b 20  d-1)/27) * 27 + 
28920 6c 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  lp.             
28930 20 20 20 20 20 20 20 20 20 20 20 2b 20 28 28 6c             + ((l
28940 70 2d 31 29 20 2f 20 33 29 20 2a 20 36 2c 20 31  p-1) / 3) * 6, 1
28950 29 0a 20 20 20 20 20 20 20 20 20 29 0a 20 20 29  ).         ).  )
28960 0a 53 45 4c 45 43 54 20 73 20 46 52 4f 4d 20 78  .SELECT s FROM x
28970 20 57 48 45 52 45 20 69 6e 64 3d 30 3b 0a 3c 2f   WHERE ind=0;.</
28980 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
28990 3e 0a 0a 3c 70 3e 54 68 65 20 22 69 6e 70 75 74  >..<p>The "input
289a0 22 20 43 54 45 20 64 65 66 69 6e 65 73 20 74 68  " CTE defines th
289b0 65 20 69 6e 70 75 74 20 70 75 7a 7a 6c 65 2e 0a  e input puzzle..
289c0 54 68 65 20 22 64 69 67 69 74 73 22 20 43 54 45  The "digits" CTE
289d0 20 64 65 66 69 6e 65 73 20 61 20 74 61 62 6c 65   defines a table
289e0 20 74 68 61 74 20 68 6f 6c 64 73 20 61 6c 6c 20   that holds all 
289f0 64 69 67 69 74 73 20 62 65 74 77 65 65 6e 20 31  digits between 1
28a00 20 61 6e 64 20 39 2e 0a 54 68 65 20 77 6f 72 6b   and 9..The work
28a10 20 6f 66 20 73 6f 6c 76 69 6e 67 20 74 68 65 20   of solving the 
28a20 70 75 7a 7a 6c 65 20 69 73 20 75 6e 64 65 72 74  puzzle is undert
28a30 61 6b 65 6e 20 62 79 20 74 68 65 20 22 78 22 20  aken by the "x" 
28a40 43 54 45 2e 0a 41 6e 20 65 6e 74 72 79 20 69 6e  CTE..An entry in
28a50 20 78 28 73 2c 69 6e 64 29 20 6d 65 61 6e 73 20   x(s,ind) means 
28a60 74 68 61 74 20 74 68 65 20 38 31 2d 63 68 61 72  that the 81-char
28a70 61 63 74 65 72 20 73 74 72 69 6e 67 20 22 73 22  acter string "s"
28a80 20 69 73 20 61 20 76 61 6c 69 64 0a 73 75 64 6f   is a valid.sudo
28a90 6b 75 20 70 75 7a 7a 6c 65 20 28 69 74 20 68 61  ku puzzle (it ha
28aa0 73 20 6e 6f 20 63 6f 6e 66 6c 69 63 74 73 29 20  s no conflicts) 
28ab0 61 6e 64 20 74 68 61 74 20 74 68 65 20 66 69 72  and that the fir
28ac0 73 74 20 75 6e 6b 6e 6f 77 6e 20 63 68 61 72 61  st unknown chara
28ad0 63 74 65 72 0a 69 73 20 61 74 20 70 6f 73 69 74  cter.is at posit
28ae0 69 6f 6e 20 22 69 6e 64 22 2c 20 6f 72 20 69 6e  ion "ind", or in
28af0 64 3d 3d 30 20 69 66 20 61 6c 6c 20 63 68 61 72  d==0 if all char
28b00 61 63 74 65 72 20 70 6f 73 69 74 69 6f 6e 73 20  acter positions 
28b10 61 72 65 20 66 69 6c 6c 65 64 20 69 6e 2e 0a 54  are filled in..T
28b20 68 65 20 67 6f 61 6c 2c 20 74 68 65 6e 2c 20 69  he goal, then, i
28b30 73 20 74 6f 20 63 6f 6d 70 75 74 65 20 65 6e 74  s to compute ent
28b40 72 69 65 73 20 66 6f 72 20 22 78 22 20 77 69 74  ries for "x" wit
28b50 68 20 61 6e 20 22 69 6e 64 22 20 6f 66 20 30 2e  h an "ind" of 0.
28b60 0a 0a 3c 70 3e 54 68 65 20 73 6f 6c 76 65 72 20  ..<p>The solver 
28b70 77 6f 72 6b 73 20 62 79 20 61 64 64 69 6e 67 20  works by adding 
28b80 6e 65 77 20 65 6e 74 72 69 65 73 20 74 6f 20 74  new entries to t
28b90 68 65 20 22 78 22 20 72 65 63 75 72 73 69 76 65  he "x" recursive
28ba0 20 74 61 62 6c 65 2e 0a 47 69 76 65 6e 20 70 72   table..Given pr
28bb0 69 6f 72 20 65 6e 74 72 69 65 73 2c 20 74 68 65  ior entries, the
28bc0 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63   recursive-selec
28bd0 74 20 74 72 69 65 73 20 74 6f 20 66 69 6c 6c 20  t tries to fill 
28be0 69 6e 20 61 20 73 69 6e 67 6c 65 20 6e 65 77 0a  in a single new.
28bf0 70 6f 73 69 74 69 6f 6e 20 77 69 74 68 20 61 6c  position with al
28c00 6c 20 76 61 6c 75 65 73 20 62 65 74 77 65 65 6e  l values between
28c10 20 31 20 61 6e 64 20 39 20 74 68 61 74 20 61 63   1 and 9 that ac
28c20 74 75 61 6c 6c 79 20 77 6f 72 6b 20 69 6e 20 74  tually work in t
28c30 68 61 74 0a 70 6f 73 69 74 69 6f 6e 2e 20 20 54  hat.position.  T
28c40 68 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 20 22  he complicated "
28c50 4e 4f 54 20 45 58 49 53 54 53 22 20 73 75 62 71  NOT EXISTS" subq
28c60 75 65 72 79 20 69 73 20 74 68 65 20 6d 61 67 69  uery is the magi
28c70 63 20 74 68 61 74 0a 66 69 67 75 72 65 73 20 6f  c that.figures o
28c80 75 74 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ut whether or no
28c90 74 20 65 61 63 68 20 63 61 6e 64 69 64 61 74 65  t each candidate
28ca0 20 22 73 22 20 73 74 72 69 6e 67 20 69 73 20 61   "s" string is a
28cb0 20 76 61 6c 69 64 0a 73 75 64 6f 6b 75 20 70 75   valid.sudoku pu
28cc0 7a 7a 6c 65 20 6f 72 20 6e 6f 74 2e 0a 0a 3c 70  zzle or not...<p
28cd0 3e 54 68 65 20 66 69 6e 61 6c 20 61 6e 73 77 65  >The final answe
28ce0 72 20 69 73 20 66 6f 75 6e 64 20 62 79 20 6c 6f  r is found by lo
28cf0 6f 6b 69 6e 67 20 66 6f 72 20 61 20 73 74 72 69  oking for a stri
28d00 6e 67 20 77 69 74 68 20 69 6e 64 3d 3d 30 2e 0a  ng with ind==0..
28d10 49 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  If the original 
28d20 73 75 64 6f 6b 75 20 70 72 6f 62 6c 65 6d 20 64  sudoku problem d
28d30 69 64 20 6e 6f 74 20 68 61 76 65 20 61 20 75 6e  id not have a un
28d40 69 71 75 65 20 73 6f 6c 75 74 69 6f 6e 2c 20 74  ique solution, t
28d50 68 65 6e 0a 74 68 65 20 71 75 65 72 79 20 77 69  hen.the query wi
28d60 6c 6c 20 72 65 74 75 72 6e 20 61 6c 6c 20 70 6f  ll return all po
28d70 73 73 69 62 6c 65 20 73 6f 6c 75 74 69 6f 6e 73  ssible solutions
28d80 2e 20 20 49 66 20 74 68 65 20 6f 72 69 67 69 6e  .  If the origin
28d90 61 6c 20 70 72 6f 62 6c 65 6d 0a 77 61 73 20 75  al problem.was u
28da0 6e 73 6f 6c 76 61 62 6c 65 2c 20 74 68 65 6e 20  nsolvable, then 
28db0 6e 6f 20 72 6f 77 73 20 77 69 6c 6c 20 62 65 20  no rows will be 
28dc0 72 65 74 75 72 6e 65 64 2e 20 20 49 6e 20 74 68  returned.  In th
28dd0 69 73 20 63 61 73 65 2c 20 74 68 65 20 75 6e 69  is case, the uni
28de0 71 75 65 0a 61 6e 73 77 65 72 20 69 73 3a 0a 0a  que.answer is:..
28df0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 35 33 34  <blockquote>.534
28e00 36 37 38 39 31 32 36 37 32 31 39 35 33 34 38 31  6789126721953481
28e10 39 38 33 34 32 35 36 37 38 35 39 37 36 31 34 32  9834256785976142
28e20 33 34 32 36 38 35 33 37 39 31 37 31 33 39 32 34  3426853791713924
28e30 38 35 36 39 36 31 35 33 37 32 38 34 32 38 37 34  8569615372842874
28e40 31 39 36 33 35 33 34 35 32 38 36 31 37 39 0a 3c  19635345286179.<
28e50 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
28e60 3e 54 68 65 20 73 6f 6c 75 74 69 6f 6e 20 77 61  >The solution wa
28e70 73 20 63 6f 6d 70 75 74 65 64 20 69 6e 20 6c 65  s computed in le
28e80 73 73 20 74 68 61 6e 20 33 30 30 20 6d 69 6c 6c  ss than 300 mill
28e90 69 73 65 63 6f 6e 64 73 20 6f 6e 20 61 20 6d 6f  iseconds on a mo
28ea0 64 65 72 6e 0a 77 6f 72 6b 73 74 61 74 69 6f 6e  dern.workstation
28eb0 2e 0a 0a 3c 68 33 3e 4c 69 6d 69 74 61 74 69 6f  ...<h3>Limitatio
28ec0 6e 73 20 41 6e 64 20 43 61 76 65 61 74 73 3c 2f  ns And Caveats</
28ed0 68 33 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  h3>..<ul>.<li><p
28ee0 3e 0a 54 68 65 20 57 49 54 48 20 63 6c 61 75 73  >.The WITH claus
28ef0 65 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64  e cannot be used
28f00 20 77 69 74 68 69 6e 20 61 20 5b 43 52 45 41 54   within a [CREAT
28f10 45 20 54 52 49 47 47 45 52 5d 2e 0a 3c 6c 69 3e  E TRIGGER]..<li>
28f20 3c 70 3e 0a 54 68 65 20 57 49 54 48 20 63 6c 61  <p>.The WITH cla
28f30 75 73 65 20 6d 75 73 74 20 61 70 70 65 61 72 20  use must appear 
28f40 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
28f50 20 6f 66 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20   of a top-level 
28f60 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65  [SELECT] stateme
28f70 6e 74 0a 6f 72 20 61 74 20 74 68 65 20 62 65 67  nt.or at the beg
28f80 69 6e 6e 69 6e 67 20 6f 66 20 61 20 73 75 62 71  inning of a subq
28f90 75 65 72 79 2e 20 20 54 68 65 20 57 49 54 48 20  uery.  The WITH 
28fa0 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20 62 65  clause cannot be
28fb0 20 70 72 65 70 65 6e 64 65 64 20 74 6f 0a 74 68   prepended to.th
28fc0 65 20 73 65 63 6f 6e 64 20 6f 72 20 73 75 62 73  e second or subs
28fd0 65 71 75 65 6e 74 20 53 45 4c 45 43 54 20 73 74  equent SELECT st
28fe0 61 74 65 6d 65 6e 74 20 6f 66 20 61 20 5b 63 6f  atement of a [co
28ff0 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 5d 2e 0a  mpound select]..
29000 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20 53 51 4c 3a  <li><p>.The SQL:
29010 31 39 39 39 20 73 70 65 63 20 72 65 71 75 69 72  1999 spec requir
29020 65 73 20 74 68 61 74 20 74 68 65 20 52 45 43 55  es that the RECU
29030 52 53 49 56 45 20 6b 65 79 77 6f 72 64 20 66 6f  RSIVE keyword fo
29040 6c 6c 6f 77 20 57 49 54 48 20 69 6e 20 61 6e 79  llow WITH in any
29050 0a 57 49 54 48 20 63 6c 61 75 73 65 20 74 68 61  .WITH clause tha
29060 74 20 69 6e 63 6c 75 64 65 73 20 61 20 72 65 63  t includes a rec
29070 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61  ursive common ta
29080 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  ble expression. 
29090 20 48 6f 77 65 76 65 72 2c 20 66 6f 72 0a 63 6f   However, for.co
290a0 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
290b0 20 53 71 6c 53 65 72 76 65 72 20 61 6e 64 20 4f   SqlServer and O
290c0 72 61 63 6c 65 2c 20 53 51 4c 69 74 65 20 64 6f  racle, SQLite do
290d0 65 73 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 74  es not enforce t
290e0 68 69 73 20 72 75 6c 65 2e 0a 3c 2f 75 6c 3e 0a  his rule..</ul>.
290f0 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
29100 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
29110 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
29120 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
29130 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
29140 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 53  ######.Section S
29150 45 4c 45 43 54 20 73 65 6c 65 63 74 20 7b 53 45  ELECT select {SE
29160 4c 45 43 54 20 71 75 65 72 79 7d 0a 0a 52 65 63  LECT query}..Rec
29170 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
29180 72 61 6d 20 73 65 6c 65 63 74 2d 73 74 6d 74 0a  ram select-stmt.
29190 3c 2f 74 63 6c 3e 0a 0a 0a 3c 70 3e 54 68 65 20  </tcl>...<p>The 
291a0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
291b0 20 69 73 20 75 73 65 64 20 74 6f 20 71 75 65 72   is used to quer
291c0 79 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  y the database. 
291d0 20 54 68 65 0a 72 65 73 75 6c 74 20 6f 66 20 61   The.result of a
291e0 20 53 45 4c 45 43 54 20 69 73 20 7a 65 72 6f 20   SELECT is zero 
291f0 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20  or more rows of 
29200 64 61 74 61 20 77 68 65 72 65 20 65 61 63 68 20  data where each 
29210 72 6f 77 0a 68 61 73 20 61 20 66 69 78 65 64 20  row.has a fixed 
29220 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
29230 73 2e 20 20 41 20 53 45 4c 45 43 54 20 73 74 61  s.  A SELECT sta
29240 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20  tement does not 
29250 6d 61 6b 65 0a 61 6e 79 20 63 68 61 6e 67 65 73  make.any changes
29260 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
29270 2e 0a 0a 3c 70 3e 54 68 65 20 22 5b 73 65 6c 65  ...<p>The "[sele
29280 63 74 2d 73 74 6d 74 5d 22 20 73 79 6e 74 61 78  ct-stmt]" syntax
29290 20 64 69 61 67 72 61 6d 20 61 62 6f 76 65 20 61   diagram above a
292a0 74 74 65 6d 70 74 73 20 74 6f 20 73 68 6f 77 20  ttempts to show 
292b0 61 73 20 6d 75 63 68 20 6f 66 20 74 68 65 0a 53  as much of the.S
292c0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
292d0 73 79 6e 74 61 78 20 61 73 20 70 6f 73 73 69 62  syntax as possib
292e0 6c 65 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 64  le in a single d
292f0 69 61 67 72 61 6d 2c 20 62 65 63 61 75 73 65 20  iagram, because 
29300 73 6f 6d 65 20 72 65 61 64 65 72 73 0a 66 69 6e  some readers.fin
29310 64 20 74 68 61 74 20 68 65 6c 70 66 75 6c 2e 20  d that helpful. 
29320 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 22   The following "
29330 5b 66 61 63 74 6f 72 65 64 2d 73 65 6c 65 63 74  [factored-select
29340 2d 73 74 6d 74 5d 22 20 69 73 20 61 6e 20 61 6c  -stmt]" is an al
29350 74 65 72 6e 61 74 69 76 65 0a 73 79 6e 74 61 78  ternative.syntax
29360 20 64 69 61 67 72 61 6d 73 20 74 68 61 74 20 65   diagrams that e
29370 78 70 72 65 73 73 65 73 20 74 68 65 20 73 61 6d  xpresses the sam
29380 65 20 73 79 6e 74 61 78 20 62 75 74 20 74 72 69  e syntax but tri
29390 65 73 20 74 6f 20 62 72 65 61 6b 20 74 68 65 20  es to break the 
293a0 73 79 6e 74 61 78 20 0a 64 6f 77 6e 20 69 6e 74  syntax .down int
293b0 6f 20 73 6d 61 6c 6c 65 72 20 63 68 75 6e 6b 73  o smaller chunks
293c0 2e 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69  ...<tcl>.Recursi
293d0 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
293e0 2d 2d 69 6e 69 74 69 61 6c 6c 79 2d 68 69 64 64  --initially-hidd
293f0 65 6e 20 66 61 63 74 6f 72 65 64 2d 73 65 6c 65  en factored-sele
29400 63 74 2d 73 74 6d 74 20 73 65 6c 65 63 74 2d 63  ct-stmt select-c
29410 6f 72 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e  ore.</tcl>..<p>N
29420 6f 74 65 20 74 68 61 74 20 74 68 65 72 65 20 61  ote that there a
29430 72 65 20 70 61 74 68 73 20 74 68 72 6f 75 67 68  re paths through
29440 20 74 68 65 20 73 79 6e 74 61 78 20 64 69 61 67   the syntax diag
29450 72 61 6d 73 20 74 68 61 74 0a 61 72 65 20 6e 6f  rams that.are no
29460 74 20 61 6c 6c 6f 77 65 64 20 69 6e 20 70 72 61  t allowed in pra
29470 63 74 69 63 65 2e 20 20 53 6f 6d 65 20 65 78 61  ctice.  Some exa
29480 6d 70 6c 65 73 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  mples:.<ul>.<li>
29490 41 20 5b 56 41 4c 55 45 53 5d 20 63 6c 61 75 73  A [VALUES] claus
294a0 65 20 63 61 6e 20 62 65 20 74 68 65 20 66 69 72  e can be the fir
294b0 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 61 20  st element in a 
294c0 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  [compound SELECT
294d0 5d 0a 20 20 20 20 74 68 61 74 20 75 73 65 73 20  ].    that uses 
294e0 61 20 5b 57 49 54 48 5d 20 63 6c 61 75 73 65 2c  a [WITH] clause,
294f0 20 62 75 74 20 61 20 5b 73 69 6d 70 6c 65 20 53   but a [simple S
29500 45 4c 45 43 54 5d 20 74 68 61 74 20 63 6f 6e 73  ELECT] that cons
29510 69 73 74 73 20 6f 66 0a 20 20 20 20 6a 75 73 74  ists of.    just
29520 20 61 20 5b 56 41 4c 55 45 53 5d 20 63 6c 61 75   a [VALUES] clau
29530 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 70 72 65  se cannot be pre
29540 63 65 64 65 64 20 62 79 20 61 20 5b 57 49 54 48  ceded by a [WITH
29550 5d 20 63 6c 61 75 73 65 2e 0a 3c 6c 69 3e 54 68  ] clause..<li>Th
29560 65 20 5b 57 49 54 48 5d 20 63 6c 61 75 73 65 20  e [WITH] clause 
29570 6d 75 73 74 20 6f 63 63 75 72 20 6f 6e 20 74 68  must occur on th
29580 65 20 66 69 72 73 74 20 53 45 4c 45 43 54 20 6f  e first SELECT o
29590 66 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45  f a [compound SE
295a0 4c 45 43 54 5d 2e 0a 20 20 20 20 49 74 20 63 61  LECT]..    It ca
295b0 6e 6e 6f 74 20 66 6f 6c 6c 6f 77 20 61 20 5b 63  nnot follow a [c
295c0 6f 6d 70 6f 75 6e 64 2d 6f 70 65 72 61 74 6f 72  ompound-operator
295d0 5d 2e 0a 3c 2f 75 6c 3e 0a 54 68 65 73 65 20 61  ]..</ul>.These a
295e0 6e 64 20 6f 74 68 65 72 20 73 69 6d 69 6c 61 72  nd other similar
295f0 20 73 79 6e 74 61 78 20 72 65 73 74 72 69 63 74   syntax restrict
29600 69 6f 6e 73 20 61 72 65 20 64 65 73 63 72 69 62  ions are describ
29610 65 64 20 69 6e 20 74 68 65 20 74 65 78 74 2e 0a  ed in the text..
29620 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20 73  .<p>The SELECT s
29630 74 61 74 65 6d 65 6e 74 20 69 73 20 74 68 65 20  tatement is the 
29640 6d 6f 73 74 20 63 6f 6d 70 6c 69 63 61 74 65 64  most complicated
29650 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 74 68 65 20   command in the 
29660 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e 0a 54 6f  SQL language..To
29670 20 6d 61 6b 65 20 74 68 65 20 64 65 73 63 72 69   make the descri
29680 70 74 69 6f 6e 20 65 61 73 69 65 72 20 74 6f 20  ption easier to 
29690 66 6f 6c 6c 6f 77 2c 20 73 6f 6d 65 20 6f 66 20  follow, some of 
296a0 74 68 65 20 70 61 73 73 61 67 65 73 20 62 65 6c  the passages bel
296b0 6f 77 20 64 65 73 63 72 69 62 65 0a 74 68 65 20  ow describe.the 
296c0 77 61 79 20 74 68 65 20 64 61 74 61 20 72 65 74  way the data ret
296d0 75 72 6e 65 64 20 62 79 20 61 20 53 45 4c 45 43  urned by a SELEC
296e0 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 64  T statement is d
296f0 65 74 65 72 6d 69 6e 65 64 20 61 73 20 61 20 73  etermined as a s
29700 65 72 69 65 73 20 6f 66 0a 73 74 65 70 73 2e 20  eries of.steps. 
29710 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  It is important 
29720 74 6f 20 6b 65 65 70 20 69 6e 20 6d 69 6e 64 20  to keep in mind 
29730 74 68 61 74 20 74 68 69 73 20 69 73 20 70 75 72  that this is pur
29740 65 6c 79 20 69 6c 6c 75 73 74 72 61 74 69 76 65  ely illustrative
29750 20 2d 0a 69 6e 20 70 72 61 63 74 69 63 65 20 6e   -.in practice n
29760 65 69 74 68 65 72 20 53 51 4c 69 74 65 20 6e 6f  either SQLite no
29770 72 20 61 6e 79 20 6f 74 68 65 72 20 53 51 4c 20  r any other SQL 
29780 65 6e 67 69 6e 65 20 69 73 20 72 65 71 75 69 72  engine is requir
29790 65 64 20 74 6f 20 66 6f 6c 6c 6f 77 20 0a 74 68  ed to follow .th
297a0 69 73 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20  is or any other 
297b0 73 70 65 63 69 66 69 63 20 70 72 6f 63 65 73 73  specific process
297c0 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
297d0 65 6e 74 20 73 69 6d 70 6c 65 73 65 6c 65 63 74  ent simpleselect
297e0 20 7b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 7d   {simple SELECT}
297f0 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 53 69 6d 70 6c  </tcl>.<h3>Simpl
29800 65 20 53 65 6c 65 63 74 20 50 72 6f 63 65 73 73  e Select Process
29810 69 6e 67 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  ing</h3>..<p>The
29820 20 63 6f 72 65 20 6f 66 20 61 20 53 45 4c 45 43   core of a SELEC
29830 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61  T statement is a
29840 20 22 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 22   "simple SELECT"
29850 20 73 68 6f 77 6e 20 62 79 20 74 68 65 0a 5b 73   shown by the.[s
29860 65 6c 65 63 74 2d 63 6f 72 65 5d 20 61 6e 64 20  elect-core] and 
29870 5b 73 69 6d 70 6c 65 2d 73 65 6c 65 63 74 2d 73  [simple-select-s
29880 74 6d 74 5d 20 73 79 6e 74 61 78 20 64 69 61 67  tmt] syntax diag
29890 72 61 6d 73 20 62 65 6c 6f 77 2e 20 20 0a 49 6e  rams below.  .In
298a0 20 70 72 61 63 74 69 63 65 2c 20 6d 6f 73 74 20   practice, most 
298b0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
298c0 73 20 61 72 65 20 73 69 6d 70 6c 65 20 53 45 4c  s are simple SEL
298d0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  ECT statements..
298e0 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69 76 65  .<tcl>.Recursive
298f0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69  BubbleDiagram si
29900 6d 70 6c 65 2d 73 65 6c 65 63 74 2d 73 74 6d 74  mple-select-stmt
29910 20 73 65 6c 65 63 74 2d 63 6f 72 65 0a 3c 2f 74   select-core.</t
29920 63 6c 3e 0a 0a 3c 70 3e 47 65 6e 65 72 61 74 69  cl>..<p>Generati
29930 6e 67 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  ng the results o
29940 66 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  f a simple SELEC
29950 54 0a 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70  T.statement is p
29960 72 65 73 65 6e 74 65 64 20 61 73 20 61 20 66 6f  resented as a fo
29970 75 72 20 73 74 65 70 20 70 72 6f 63 65 73 73 20  ur step process 
29980 69 6e 20 74 68 65 20 64 65 73 63 72 69 70 74 69  in the descripti
29990 6f 6e 20 62 65 6c 6f 77 3a 0a 0a 3c 6f 6c 3e 0a  on below:..<ol>.
299a0 20 20 3c 6c 69 3e 20 3c 70 3e 5b 46 52 4f 4d 20    <li> <p>[FROM 
299b0 63 6c 61 75 73 65 5d 20 70 72 6f 63 65 73 73 69  clause] processi
299c0 6e 67 3a 20 54 68 65 20 69 6e 70 75 74 20 64 61  ng: The input da
299d0 74 61 20 66 6f 72 20 74 68 65 20 73 69 6d 70 6c  ta for the simpl
299e0 65 20 53 45 4c 45 43 54 20 69 73 0a 20 20 20 20  e SELECT is.    
299f0 20 20 20 64 65 74 65 72 6d 69 6e 65 64 2e 20 54     determined. T
29a00 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 69 73  he input data is
29a10 20 65 69 74 68 65 72 20 69 6d 70 6c 69 63 69 74   either implicit
29a20 6c 79 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  ly a single row 
29a30 77 69 74 68 20 30 0a 20 20 20 20 20 20 20 63 6f  with 0.       co
29a40 6c 75 6d 6e 73 20 28 69 66 20 74 68 65 72 65 20  lumns (if there 
29a50 69 73 20 6e 6f 20 46 52 4f 4d 20 63 6c 61 75 73  is no FROM claus
29a60 65 29 20 6f 72 20 69 73 20 64 65 74 65 72 6d 69  e) or is determi
29a70 6e 65 64 20 62 79 20 74 68 65 20 46 52 4f 4d 0a  ned by the FROM.
29a80 20 20 20 20 20 20 20 63 6c 61 75 73 65 2e 0a 20         clause.. 
29a90 20 3c 6c 69 3e 20 3c 70 3e 5b 57 48 45 52 45 20   <li> <p>[WHERE 
29aa0 63 6c 61 75 73 65 5d 20 70 72 6f 63 65 73 73 69  clause] processi
29ab0 6e 67 3a 20 54 68 65 20 69 6e 70 75 74 20 64 61  ng: The input da
29ac0 74 61 20 69 73 20 66 69 6c 74 65 72 65 64 20 75  ta is filtered u
29ad0 73 69 6e 67 20 74 68 65 20 57 48 45 52 45 0a 20  sing the WHERE. 
29ae0 20 20 20 20 20 20 63 6c 61 75 73 65 20 65 78 70        clause exp
29af0 72 65 73 73 69 6f 6e 2e 20 20 0a 20 20 3c 6c 69  ression.  .  <li
29b00 3e 20 3c 70 3e 5b 47 52 4f 55 50 20 42 59 7c 47  > <p>[GROUP BY|G
29b10 52 4f 55 50 20 42 59 2c 20 48 41 56 49 4e 47 20  ROUP BY, HAVING 
29b20 61 6e 64 20 72 65 73 75 6c 74 2d 63 6f 6c 75 6d  and result-colum
29b30 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 20 70 72  n expression] pr
29b40 6f 63 65 73 73 69 6e 67 3a 20 0a 20 20 20 20 20  ocessing: .     
29b50 20 20 54 68 65 20 73 65 74 20 6f 66 20 72 65 73    The set of res
29b60 75 6c 74 20 72 6f 77 73 20 69 73 20 63 6f 6d 70  ult rows is comp
29b70 75 74 65 64 20 62 79 20 61 67 67 72 65 67 61 74  uted by aggregat
29b80 69 6e 67 20 74 68 65 20 64 61 74 61 20 61 63 63  ing the data acc
29b90 6f 72 64 69 6e 67 20 74 6f 0a 20 20 20 20 20 20  ording to.      
29ba0 20 61 6e 79 20 47 52 4f 55 50 20 42 59 20 63 6c   any GROUP BY cl
29bb0 61 75 73 65 20 61 6e 64 20 63 61 6c 63 75 6c 61  ause and calcula
29bc0 74 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 2d  ting the result-
29bd0 73 65 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20  set expressions 
29be0 66 6f 72 20 74 68 65 0a 20 20 20 20 20 20 20 72  for the.       r
29bf0 6f 77 73 20 6f 66 20 74 68 65 20 66 69 6c 74 65  ows of the filte
29c00 72 65 64 20 69 6e 70 75 74 20 64 61 74 61 73 65  red input datase
29c10 74 2e 20 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b  t.  .  <li> <p>[
29c20 44 49 53 54 49 4e 43 54 7c 44 49 53 54 49 4e 43  DISTINCT|DISTINC
29c30 54 2f 41 4c 4c 20 6b 65 79 77 6f 72 64 5d 20 70  T/ALL keyword] p
29c40 72 6f 63 65 73 73 69 6e 67 3a 20 49 66 20 74 68  rocessing: If th
29c50 65 20 71 75 65 72 79 20 69 73 20 61 20 22 53 45  e query is a "SE
29c60 4c 45 43 54 0a 20 20 20 20 20 20 20 44 49 53 54  LECT.       DIST
29c70 49 4e 43 54 22 20 71 75 65 72 79 2c 20 64 75 70  INCT" query, dup
29c80 6c 69 63 61 74 65 20 72 6f 77 73 20 61 72 65 20  licate rows are 
29c90 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65  removed from the
29ca0 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72   set of result r
29cb0 6f 77 73 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54  ows..</ol>..<p>T
29cc0 68 65 72 65 20 61 72 65 20 74 77 6f 20 74 79 70  here are two typ
29cd0 65 73 20 6f 66 20 73 69 6d 70 6c 65 20 53 45 4c  es of simple SEL
29ce0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 2d 20  ECT statement - 
29cf0 61 67 67 72 65 67 61 74 65 20 61 6e 64 20 0a 6e  aggregate and .n
29d00 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71 75 65  on-aggregate que
29d10 72 69 65 73 2e 20 5e 41 20 73 69 6d 70 6c 65 20  ries. ^A simple 
29d20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
29d30 20 69 73 20 61 6e 20 61 67 67 72 65 67 61 74 65   is an aggregate
29d40 20 71 75 65 72 79 20 69 66 0a 69 74 20 63 6f 6e   query if.it con
29d50 74 61 69 6e 73 20 65 69 74 68 65 72 20 61 20 47  tains either a G
29d60 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 6f  ROUP BY clause o
29d70 72 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  r one or more ag
29d80 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
29d90 73 0a 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d  s.in the result-
29da0 73 65 74 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c  set. ^Otherwise,
29db0 20 69 66 20 61 20 73 69 6d 70 6c 65 20 53 45 4c   if a simple SEL
29dc0 45 43 54 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  ECT contains no 
29dd0 61 67 67 72 65 67 61 74 65 0a 66 75 6e 63 74 69  aggregate.functi
29de0 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42  ons or a GROUP B
29df0 59 20 63 6c 61 75 73 65 2c 20 69 74 20 69 73 20  Y clause, it is 
29e00 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20  a non-aggregate 
29e10 71 75 65 72 79 2e 0a 0a 3c 70 3e 3c 62 3e 31 2e  query...<p><b>1.
29e20 20 44 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 6f   Determination o
29e30 66 20 69 6e 70 75 74 20 64 61 74 61 20 28 46 52  f input data (FR
29e40 4f 4d 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73  OM clause proces
29e50 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e  sing).</b>.<tcl>
29e60 68 64 5f 66 72 61 67 6d 65 6e 74 20 66 72 6f 6d  hd_fragment from
29e70 63 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63  clause</tcl>.<tc
29e80 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 46  l>hd_keywords {F
29e90 52 4f 4d 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c  ROM clause}</tcl
29ea0 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e 70 75 74 20  >..<p>The input 
29eb0 64 61 74 61 20 75 73 65 64 20 62 79 20 61 20 73  data used by a s
29ec0 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 71 75 65  imple SELECT que
29ed0 72 79 20 69 73 20 61 20 73 65 74 20 6f 66 20 3c  ry is a set of <
29ee0 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 0a 65 61  i>N</i> rows .ea
29ef0 63 68 20 3c 69 3e 4d 3c 2f 69 3e 20 63 6f 6c 75  ch <i>M</i> colu
29f00 6d 6e 73 20 77 69 64 65 2e 0a 0a 3c 70 3e 5e 28  mns wide...<p>^(
29f10 49 66 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  If the FROM clau
29f20 73 65 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  se is omitted fr
29f30 6f 6d 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45  om a simple SELE
29f40 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68  CT statement, th
29f50 65 6e 20 74 68 65 20 0a 69 6e 70 75 74 20 64 61  en the .input da
29f60 74 61 20 69 73 20 69 6d 70 6c 69 63 69 74 6c 79  ta is implicitly
29f70 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 7a 65   a single row ze
29f80 72 6f 20 63 6f 6c 75 6d 6e 73 20 77 69 64 65 29  ro columns wide)
29f90 5e 20 28 69 2e 65 2e 20 3c 69 3e 4e 3c 2f 69 3e  ^ (i.e. <i>N</i>
29fa0 3d 31 20 61 6e 64 0a 3c 69 3e 4d 3c 2f 69 3e 3d  =1 and.<i>M</i>=
29fb0 30 29 2e 0a 0a 3c 70 3e 49 66 20 61 20 46 52 4f  0)...<p>If a FRO
29fc0 4d 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63  M clause is spec
29fd0 69 66 69 65 64 2c 20 74 68 65 20 64 61 74 61 20  ified, the data 
29fe0 6f 6e 20 77 68 69 63 68 20 61 20 73 69 6d 70 6c  on which a simpl
29ff0 65 20 53 45 4c 45 43 54 20 71 75 65 72 79 0a 6f  e SELECT query.o
2a000 70 65 72 61 74 65 73 20 63 6f 6d 65 73 20 66 72  perates comes fr
2a010 6f 6d 20 74 68 65 20 6f 6e 65 20 6f 72 20 6d 6f  om the one or mo
2a020 72 65 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62  re tables or sub
2a030 71 75 65 72 69 65 73 20 28 53 45 4c 45 43 54 20  queries (SELECT 
2a040 73 74 61 74 65 6d 65 6e 74 73 0a 69 6e 20 70 61  statements.in pa
2a050 72 65 6e 74 68 65 73 69 73 29 20 73 70 65 63 69  renthesis) speci
2a060 66 69 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  fied following t
2a070 68 65 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 2e  he FROM keyword.
2a080 20 5e 41 20 73 75 62 71 75 65 72 79 20 73 70 65   ^A subquery spe
2a090 63 69 66 69 65 64 0a 69 6e 20 74 68 65 20 3c 79  cified.in the <y
2a0a0 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6f 72 2d 73  yterm>table-or-s
2a0b0 75 62 71 75 65 72 79 3c 2f 79 79 74 65 72 6d 3e  ubquery</yyterm>
2a0c0 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 46   following the F
2a0d0 52 4f 4d 20 63 6c 61 75 73 65 20 69 6e 20 61 20  ROM clause in a 
2a0e0 0a 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73  .simple SELECT s
2a0f0 74 61 74 65 6d 65 6e 74 20 69 73 0a 68 61 6e 64  tatement is.hand
2a100 6c 65 64 20 61 73 20 69 66 20 69 74 20 77 61 73  led as if it was
2a110 20 61 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e   a table contain
2a120 69 6e 67 20 74 68 65 20 64 61 74 61 20 72 65 74  ing the data ret
2a130 75 72 6e 65 64 20 62 79 20 65 78 65 63 75 74 69  urned by executi
2a140 6e 67 20 74 68 65 0a 73 75 62 71 75 65 72 79 20  ng the.subquery 
2a150 73 74 61 74 65 6d 65 6e 74 2e 20 5e 45 61 63 68  statement. ^Each
2a160 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 73   column of the s
2a170 75 62 71 75 65 72 79 20 68 61 73 20 74 68 65 0a  ubquery has the.
2a180 5b 63 6f 6c 6c 61 74 69 6f 6e 7c 63 6f 6c 6c 61  [collation|colla
2a190 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 5d 20 61  tion sequence] a
2a1a0 6e 64 20 5b 61 66 66 69 6e 69 74 79 5d 20 6f 66  nd [affinity] of
2a1b0 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
2a1c0 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 0a 69 6e  ng expression.in
2a1d0 20 74 68 65 20 73 75 62 71 75 65 72 79 20 73 74   the subquery st
2a1e0 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 66  atement...<p>^If
2a1f0 20 74 68 65 72 65 20 69 73 20 6f 6e 6c 79 20 61   there is only a
2a200 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6f 72   single table or
2a210 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65   subquery in the
2a220 20 46 52 4f 4d 0a 63 6c 61 75 73 65 2c 20 74 68   FROM.clause, th
2a230 65 6e 20 74 68 65 20 69 6e 70 75 74 20 64 61 74  en the input dat
2a240 61 20 75 73 65 64 20 62 79 20 74 68 65 20 53 45  a used by the SE
2a250 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
2a260 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f  s the contents o
2a270 66 20 74 68 65 0a 6e 61 6d 65 64 20 74 61 62 6c  f the.named tabl
2a280 65 2e 20 5e 49 66 20 74 68 65 72 65 20 69 73 20  e. ^If there is 
2a290 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 74 61  more than one ta
2a2a0 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20  ble or subquery 
2a2b0 69 6e 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 74  in FROM clause.t
2a2c0 68 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 73  hen the contents
2a2d0 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 61   of all tables a
2a2e0 6e 64 2f 6f 72 20 73 75 62 71 75 65 72 69 65 73  nd/or subqueries
2a2f0 0a 61 72 65 20 6a 6f 69 6e 65 64 20 69 6e 74 6f  .are joined into
2a300 20 61 20 73 69 6e 67 6c 65 20 64 61 74 61 73 65   a single datase
2a310 74 20 66 6f 72 20 74 68 65 20 73 69 6d 70 6c 65  t for the simple
2a320 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2a330 74 20 74 6f 20 6f 70 65 72 61 74 65 20 6f 6e 2e  t to operate on.
2a340 0a 45 78 61 63 74 6c 79 20 68 6f 77 20 74 68 65  .Exactly how the
2a350 20 64 61 74 61 20 69 73 20 63 6f 6d 62 69 6e 65   data is combine
2a360 64 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65  d depends on the
2a370 20 73 70 65 63 69 66 69 63 20 5b 6a 6f 69 6e 2d   specific [join-
2a380 6f 70 65 72 61 74 6f 72 5d 20 61 6e 64 0a 5b 6a  operator] and.[j
2a390 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 20  oin-constraint] 
2a3a0 75 73 65 64 20 74 6f 20 63 6f 6e 6e 65 63 74 20  used to connect 
2a3b0 74 68 65 20 74 61 62 6c 65 73 20 6f 72 20 73 75  the tables or su
2a3c0 62 71 75 65 72 69 65 73 20 74 6f 67 65 74 68 65  bqueries togethe
2a3d0 72 2e 0a 0a 3c 70 3e 41 6c 6c 20 6a 6f 69 6e 73  r...<p>All joins
2a3e0 20 69 6e 20 53 51 4c 69 74 65 20 61 72 65 20 62   in SQLite are b
2a3f0 61 73 65 64 20 6f 6e 20 74 68 65 20 63 61 72 74  ased on the cart
2a400 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 6f 66  esian product of
2a410 20 74 68 65 20 6c 65 66 74 20 61 6e 64 0a 72 69   the left and.ri
2a420 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74  ght-hand dataset
2a430 73 2e 20 5e 54 68 65 20 63 6f 6c 75 6d 6e 73 20  s. ^The columns 
2a440 6f 66 20 74 68 65 20 63 61 72 74 65 73 69 61 6e  of the cartesian
2a450 20 70 72 6f 64 75 63 74 20 64 61 74 61 73 65 74   product dataset
2a460 20 61 72 65 2c 20 69 6e 20 0a 6f 72 64 65 72 2c   are, in .order,
2a470 20 61 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 73   all the columns
2a480 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 68 61 6e   of the left-han
2a490 64 20 64 61 74 61 73 65 74 20 66 6f 6c 6c 6f 77  d dataset follow
2a4a0 65 64 20 62 79 20 61 6c 6c 20 74 68 65 20 63 6f  ed by all the co
2a4b0 6c 75 6d 6e 73 0a 6f 66 20 74 68 65 20 72 69 67  lumns.of the rig
2a4c0 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 2e  ht-hand dataset.
2a4d0 20 5e 54 68 65 72 65 20 69 73 20 61 20 72 6f 77   ^There is a row
2a4e0 20 69 6e 20 74 68 65 20 63 61 72 74 65 73 69 61   in the cartesia
2a4f0 6e 20 70 72 6f 64 75 63 74 20 64 61 74 61 73 65  n product datase
2a500 74 0a 66 6f 72 6d 65 64 20 62 79 20 63 6f 6d 62  t.formed by comb
2a510 69 6e 69 6e 67 20 65 61 63 68 20 75 6e 69 71 75  ining each uniqu
2a520 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66  e combination of
2a530 20 61 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20   a row from the 
2a540 6c 65 66 74 2d 68 61 6e 64 20 0a 61 6e 64 20 72  left-hand .and r
2a550 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65  ight-hand datase
2a560 74 73 2e 20 5e 28 49 6e 20 6f 74 68 65 72 20 77  ts. ^(In other w
2a570 6f 72 64 73 2c 20 69 66 20 74 68 65 20 6c 65 66  ords, if the lef
2a580 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20 63  t-hand dataset c
2a590 6f 6e 73 69 73 74 73 20 6f 66 0a 3c 69 3e 4e 3c  onsists of.<i>N<
2a5a0 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74 3c  sub><small>left<
2a5b0 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69  /small></sub></i
2a5c0 3e 20 72 6f 77 73 20 6f 66 20 0a 3c 69 3e 4d 3c  > rows of .<i>M<
2a5d0 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74 3c  sub><small>left<
2a5e0 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69  /small></sub></i
2a5f0 3e 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 64 20 74  > columns, and t
2a600 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61  he right-hand da
2a610 74 61 73 65 74 20 6f 66 0a 3c 69 3e 4e 3c 73 75  taset of.<i>N<su
2a620 62 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f  b><small>right</
2a630 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e  small></sub></i>
2a640 20 72 6f 77 73 20 6f 66 0a 3c 69 3e 4d 3c 73 75   rows of.<i>M<su
2a650 62 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f  b><small>right</
2a660 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e  small></sub></i>
2a670 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 6e 20 74   columns, then t
2a680 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f  he cartesian pro
2a690 64 75 63 74 20 69 73 20 61 0a 64 61 74 61 73 65  duct is a.datase
2a6a0 74 20 6f 66 20 0a 3c 69 3e 4e 3c 73 75 62 3e 3c  t of .<i>N<sub><
2a6b0 73 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c  small>left</smal
2a6c0 6c 3e 3c 2f 73 75 62 3e 26 74 69 6d 65 73 3b 4e  l></sub>&times;N
2a6d0 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68  <sub><small>righ
2a6e0 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c  t</small></sub><
2a6f0 2f 69 3e 0a 72 6f 77 73 2c 20 65 61 63 68 20 63  /i>.rows, each c
2a700 6f 6e 74 61 69 6e 69 6e 67 20 0a 3c 69 3e 4d 3c  ontaining .<i>M<
2a710 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74 3c  sub><small>left<
2a720 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 2b 4d 3c  /small></sub>+M<
2a730 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68 74  sub><small>right
2a740 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f  </small></sub></
2a750 69 3e 20 63 6f 6c 75 6d 6e 73 2e 29 5e 0a 0a 3c  i> columns.)^..<
2a760 70 3e 5e 49 66 20 74 68 65 20 6a 6f 69 6e 2d 6f  p>^If the join-o
2a770 70 65 72 61 74 6f 72 20 69 73 20 22 43 52 4f 53  perator is "CROS
2a780 53 20 4a 4f 49 4e 22 2c 20 22 49 4e 4e 45 52 20  S JOIN", "INNER 
2a790 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 6f 72  JOIN", "JOIN" or
2a7a0 20 61 20 63 6f 6d 6d 61 0a 28 22 2c 22 29 20 61   a comma.(",") a
2a7b0 6e 64 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f  nd there is no O
2a7c0 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73  N or USING claus
2a7d0 65 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e, then the resu
2a7e0 6c 74 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 69  lt of the join i
2a7f0 73 0a 73 69 6d 70 6c 79 20 74 68 65 20 63 61 72  s.simply the car
2a800 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 6f  tesian product o
2a810 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72  f the left and r
2a820 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65  ight-hand datase
2a830 74 73 2e 20 0a 49 66 20 6a 6f 69 6e 2d 6f 70 65  ts. .If join-ope
2a840 72 61 74 6f 72 20 64 6f 65 73 20 68 61 76 65 20  rator does have 
2a850 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75  ON or USING clau
2a860 73 65 73 2c 20 74 68 6f 73 65 20 61 72 65 20 68  ses, those are h
2a870 61 6e 64 6c 65 64 20 61 63 63 6f 72 64 69 6e 67  andled according
2a880 20 74 6f 0a 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to.the followin
2a890 67 20 62 75 6c 6c 65 74 20 70 6f 69 6e 74 73 3a  g bullet points:
2a8a0 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70  ..<ul>.  <li> <p
2a8b0 3e 5e 28 49 66 20 74 68 65 72 65 20 69 73 20 61  >^(If there is a
2a8c0 6e 20 4f 4e 20 63 6c 61 75 73 65 20 74 68 65 6e  n ON clause then
2a8d0 20 74 68 65 20 4f 4e 20 65 78 70 72 65 73 73 69   the ON expressi
2a8e0 6f 6e 20 69 73 0a 20 20 20 20 20 20 20 65 76 61  on is.       eva
2a8f0 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  luated for each 
2a900 72 6f 77 20 6f 66 20 74 68 65 20 63 61 72 74 65  row of the carte
2a910 73 69 61 6e 20 70 72 6f 64 75 63 74 20 61 73 20  sian product as 
2a920 61 20 0a 20 20 20 20 20 20 20 5b 62 6f 6f 6c 65  a .       [boole
2a930 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20  an expression]. 
2a940 4f 6e 6c 79 20 72 6f 77 73 20 66 6f 72 20 77 68  Only rows for wh
2a950 69 63 68 20 74 68 65 20 65 78 70 72 65 73 73 69  ich the expressi
2a960 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  on evaluates to 
2a970 0a 20 20 20 20 20 20 20 74 72 75 65 20 61 72 65  .       true are
2a980 20 69 6e 63 6c 75 64 65 64 20 66 72 6f 6d 20 74   included from t
2a990 68 65 20 64 61 74 61 73 65 74 2e 29 5e 0a 0a 20  he dataset.)^.. 
2a9a0 20 3c 6c 69 3e 20 3c 70 3e 5e 49 66 20 74 68 65   <li> <p>^If the
2a9b0 72 65 20 69 73 20 61 20 55 53 49 4e 47 20 63 6c  re is a USING cl
2a9c0 61 75 73 65 0a 20 20 20 20 20 20 20 74 68 65 6e  ause.       then
2a9d0 20 65 61 63 68 20 6f 66 20 74 68 65 20 63 6f 6c   each of the col
2a9e0 75 6d 6e 20 6e 61 6d 65 73 20 73 70 65 63 69 66  umn names specif
2a9f0 69 65 64 20 6d 75 73 74 20 65 78 69 73 74 20 69  ied must exist i
2aa00 6e 20 74 68 65 20 64 61 74 61 73 65 74 73 20 74  n the datasets t
2aa10 6f 20 0a 20 20 20 20 20 20 20 62 6f 74 68 20 74  o .       both t
2aa20 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
2aa30 74 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70  t of the join-op
2aa40 65 72 61 74 6f 72 2e 20 5e 28 46 6f 72 20 65 61  erator. ^(For ea
2aa50 63 68 20 70 61 69 72 20 6f 66 20 6e 61 6d 65 64  ch pair of named
2aa60 0a 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 73 2c  .       columns,
2aa70 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
2aa80 22 6c 68 73 2e 58 20 3d 20 72 68 73 2e 58 22 20  "lhs.X = rhs.X" 
2aa90 69 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72  is evaluated for
2aaa0 20 65 61 63 68 20 72 6f 77 20 6f 66 0a 20 20 20   each row of.   
2aab0 20 20 20 20 74 68 65 20 63 61 72 74 65 73 69 61      the cartesia
2aac0 6e 20 70 72 6f 64 75 63 74 20 61 73 20 61 20 5b  n product as a [
2aad0 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
2aae0 6f 6e 5d 2e 20 4f 6e 6c 79 20 72 6f 77 73 20 66  on]. Only rows f
2aaf0 6f 72 20 77 68 69 63 68 0a 20 20 20 20 20 20 20  or which.       
2ab00 61 6c 6c 20 73 75 63 68 20 65 78 70 72 65 73 73  all such express
2ab10 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 73 20 74  ions evaluates t
2ab20 6f 20 74 72 75 65 20 61 72 65 20 69 6e 63 6c 75  o true are inclu
2ab30 64 65 64 20 66 72 6f 6d 20 74 68 65 0a 20 20 20  ded from the.   
2ab40 20 20 20 20 72 65 73 75 6c 74 20 73 65 74 2e 29      result set.)
2ab50 5e 20 5e 57 68 65 6e 20 63 6f 6d 70 61 72 69 6e  ^ ^When comparin
2ab60 67 20 76 61 6c 75 65 73 20 61 73 20 61 20 72 65  g values as a re
2ab70 73 75 6c 74 20 6f 66 20 61 20 55 53 49 4e 47 20  sult of a USING 
2ab80 63 6c 61 75 73 65 2c 20 74 68 65 0a 20 20 20 20  clause, the.    
2ab90 20 20 20 6e 6f 72 6d 61 6c 20 72 75 6c 65 73 20     normal rules 
2aba0 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 66 66  for handling aff
2abb0 69 6e 69 74 69 65 73 2c 20 63 6f 6c 6c 61 74 69  inities, collati
2abc0 6f 6e 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64  on sequences and
2abd0 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 76 61 6c   NULL.       val
2abe0 75 65 73 20 69 6e 20 63 6f 6d 70 61 72 69 73 6f  ues in compariso
2abf0 6e 73 20 61 70 70 6c 79 2e 20 5e 54 68 65 20 63  ns apply. ^The c
2ac00 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68 65 20 64  olumn from the d
2ac10 61 74 61 73 65 74 20 6f 6e 20 74 68 65 0a 20 20  ataset on the.  
2ac20 20 20 20 20 20 6c 65 66 74 2d 68 61 6e 64 20 73       left-hand s
2ac30 69 64 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2d  ide of the join-
2ac40 6f 70 65 72 61 74 6f 72 20 69 73 20 63 6f 6e 73  operator is cons
2ac50 69 64 65 72 65 64 20 74 6f 20 62 65 20 6f 6e 20  idered to be on 
2ac60 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 0a 20 20  the left-hand.  
2ac70 20 20 20 20 20 73 69 64 65 20 6f 66 20 74 68 65       side of the
2ac80 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72   comparison oper
2ac90 61 74 6f 72 20 28 3d 29 20 66 6f 72 20 74 68 65  ator (=) for the
2aca0 20 70 75 72 70 6f 73 65 73 20 6f 66 20 63 6f 6c   purposes of col
2acb0 6c 61 74 69 6f 6e 20 0a 20 20 20 20 20 20 20 73  lation .       s
2acc0 65 71 75 65 6e 63 65 20 61 6e 64 20 61 66 66 69  equence and affi
2acd0 6e 69 74 79 20 70 72 65 63 65 64 65 6e 63 65 2e  nity precedence.
2ace0 0a 0a 20 20 20 20 20 20 20 3c 70 3e 5e 46 6f 72  ..       <p>^For
2acf0 20 65 61 63 68 20 70 61 69 72 20 6f 66 20 63 6f   each pair of co
2ad00 6c 75 6d 6e 73 20 69 64 65 6e 74 69 66 69 65 64  lumns identified
2ad10 20 62 79 20 61 20 55 53 49 4e 47 20 63 6c 61 75   by a USING clau
2ad20 73 65 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 20  se, the column. 
2ad30 20 20 20 20 20 20 66 72 6f 6d 20 74 68 65 20 72        from the r
2ad40 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65  ight-hand datase
2ad50 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  t is omitted fro
2ad60 6d 20 74 68 65 20 6a 6f 69 6e 65 64 20 64 61 74  m the joined dat
2ad70 61 73 65 74 2e 20 5e 54 68 69 73 20 0a 20 20 20  aset. ^This .   
2ad80 20 20 20 20 69 73 20 74 68 65 20 6f 6e 6c 79 20      is the only 
2ad90 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
2ada0 65 6e 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73  en a USING claus
2adb0 65 20 61 6e 64 20 69 74 73 20 65 71 75 69 76 61  e and its equiva
2adc0 6c 65 6e 74 20 4f 4e 0a 20 20 20 20 20 20 20 63  lent ON.       c
2add0 6f 6e 73 74 72 61 69 6e 74 2e 0a 0a 20 20 3c 6c  onstraint...  <l
2ade0 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65 20 4e  i> <p>^(If the N
2adf0 41 54 55 52 41 4c 20 6b 65 79 77 6f 72 64 20 69  ATURAL keyword i
2ae00 73 20 69 6e 20 74 68 65 20 6a 6f 69 6e 2d 6f 70  s in the join-op
2ae10 65 72 61 74 6f 72 20 74 68 65 6e 20 61 6e 0a 20  erator then an. 
2ae20 20 20 20 20 20 20 69 6d 70 6c 69 63 69 74 20 55        implicit U
2ae30 53 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 61  SING clause is a
2ae40 64 64 65 64 20 74 6f 20 74 68 65 20 6a 6f 69 6e  dded to the join
2ae50 2d 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 54 68  -constraints. Th
2ae60 65 20 69 6d 70 6c 69 63 69 74 0a 20 20 20 20 20  e implicit.     
2ae70 20 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 63    USING clause c
2ae80 6f 6e 74 61 69 6e 73 20 65 61 63 68 20 6f 66 20  ontains each of 
2ae90 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  the column names
2aea0 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e 20   that appear in 
2aeb0 62 6f 74 68 0a 20 20 20 20 20 20 20 74 68 65 20  both.       the 
2aec0 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68  left and right-h
2aed0 61 6e 64 20 69 6e 70 75 74 20 64 61 74 61 73 65  and input datase
2aee0 74 73 2e 29 5e 20 5e 49 66 20 74 68 65 20 6c 65  ts.)^ ^If the le
2aef0 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e  ft and right-han
2af00 64 0a 20 20 20 20 20 20 20 69 6e 70 75 74 20 64  d.       input d
2af10 61 74 61 73 65 74 73 20 66 65 61 74 75 72 65 20  atasets feature 
2af20 6e 6f 20 63 6f 6d 6d 6f 6e 20 63 6f 6c 75 6d 6e  no common column
2af30 20 6e 61 6d 65 73 2c 20 74 68 65 6e 20 74 68 65   names, then the
2af40 20 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f 72 64   NATURAL keyword
2af50 0a 20 20 20 20 20 20 20 68 61 73 20 6e 6f 20 65  .       has no e
2af60 66 66 65 63 74 20 6f 6e 20 74 68 65 20 72 65 73  ffect on the res
2af70 75 6c 74 73 20 6f 66 20 74 68 65 20 6a 6f 69 6e  ults of the join
2af80 2e 20 5e 41 20 55 53 49 4e 47 20 6f 72 20 4f 4e  . ^A USING or ON
2af90 20 63 6c 61 75 73 65 20 6d 61 79 0a 20 20 20 20   clause may.    
2afa0 20 20 20 6e 6f 74 20 62 65 20 61 64 64 65 64 20     not be added 
2afb0 74 6f 20 61 20 6a 6f 69 6e 20 74 68 61 74 20 73  to a join that s
2afc0 70 65 63 69 66 69 65 73 20 74 68 65 20 4e 41 54  pecifies the NAT
2afd0 55 52 41 4c 20 6b 65 79 77 6f 72 64 2e 0a 0a 20  URAL keyword... 
2afe0 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68   <li> <p>^(If th
2aff0 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20  e join-operator 
2b000 69 73 20 61 20 22 4c 45 46 54 20 4a 4f 49 4e 22  is a "LEFT JOIN"
2b010 20 6f 72 20 22 4c 45 46 54 20 4f 55 54 45 52 20   or "LEFT OUTER 
2b020 4a 4f 49 4e 22 2c 20 74 68 65 6e 0a 20 20 20 20  JOIN", then.    
2b030 20 20 20 61 66 74 65 72 0a 20 20 20 20 20 20 20     after.       
2b040 74 68 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20  the ON or USING 
2b050 66 69 6c 74 65 72 69 6e 67 20 63 6c 61 75 73 65  filtering clause
2b060 73 20 68 61 76 65 20 62 65 65 6e 20 61 70 70 6c  s have been appl
2b070 69 65 64 2c 20 61 6e 20 65 78 74 72 61 20 72 6f  ied, an extra ro
2b080 77 20 69 73 20 0a 20 20 20 20 20 20 20 61 64 64  w is .       add
2b090 65 64 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74  ed to the output
2b0a0 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e   for each row in
2b0b0 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 6c 65   the original le
2b0c0 66 74 2d 68 61 6e 64 20 69 6e 70 75 74 20 0a 20  ft-hand input . 
2b0d0 20 20 20 20 20 20 64 61 74 61 73 65 74 20 74 68        dataset th
2b0e0 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  at corresponds t
2b0f0 6f 20 6e 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c  o no rows at all
2b100 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 73 69 74   in the composit
2b110 65 0a 20 20 20 20 20 20 20 64 61 74 61 73 65 74  e.       dataset
2b120 20 28 69 66 20 61 6e 79 29 2e 29 5e 20 5e 54 68   (if any).)^ ^Th
2b130 65 20 61 64 64 65 64 20 72 6f 77 73 20 63 6f 6e  e added rows con
2b140 74 61 69 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73  tain NULL values
2b150 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a   in the columns.
2b160 20 20 20 20 20 20 20 74 68 61 74 20 77 6f 75 6c         that woul
2b170 64 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6e 74 61  d normally conta
2b180 69 6e 20 76 61 6c 75 65 73 20 63 6f 70 69 65 64  in values copied
2b190 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 2d   from the right-
2b1a0 68 61 6e 64 20 69 6e 70 75 74 0a 20 20 20 20 20  hand input.     
2b1b0 20 20 64 61 74 61 73 65 74 2e 20 20 0a 3c 2f 75    dataset.  .</u
2b1c0 6c 3e 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 6d 6f  l>..<p>^(When mo
2b1d0 72 65 20 74 68 61 6e 20 74 77 6f 20 74 61 62 6c  re than two tabl
2b1e0 65 73 20 61 72 65 20 6a 6f 69 6e 65 64 20 74 6f  es are joined to
2b1f0 67 65 74 68 65 72 20 61 73 20 70 61 72 74 20 6f  gether as part o
2b200 66 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 2c  f a FROM clause,
2b210 0a 74 68 65 20 6a 6f 69 6e 20 6f 70 65 72 61 74  .the join operat
2b220 69 6f 6e 73 20 61 72 65 20 70 72 6f 63 65 73 73  ions are process
2b230 65 64 20 69 6e 20 6f 72 64 65 72 20 66 72 6f 6d  ed in order from
2b240 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20   left to right. 
2b250 49 6e 20 6f 74 68 65 72 20 0a 77 6f 72 64 73 2c  In other .words,
2b260 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
2b270 20 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31 20 42 20   (A join-op-1 B 
2b280 6a 6f 69 6e 2d 6f 70 2d 32 20 43 29 20 69 73 20  join-op-2 C) is 
2b290 63 6f 6d 70 75 74 65 64 20 61 73 20 0a 28 28 41  computed as .((A
2b2a0 20 6a 6f 69 6e 2d 6f 70 2d 31 20 42 29 20 6a 6f   join-op-1 B) jo
2b2b0 69 6e 2d 6f 70 2d 32 20 43 29 2e 29 5e 0a 0a 3c  in-op-2 C).)^..<
2b2c0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
2b2d0 63 72 6f 73 73 6a 6f 69 6e 20 7b 74 72 65 61 74  crossjoin {treat
2b2e0 73 20 74 68 65 20 43 52 4f 53 53 20 4a 4f 49 4e  s the CROSS JOIN
2b2f0 20 6f 70 65 72 61 74 6f 72 20 73 70 65 63 69 61   operator specia
2b300 6c 6c 79 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 3c 62  lly}</tcl>.<p><b
2b310 3e 53 69 64 65 20 6e 6f 74 65 3a 20 53 70 65 63  >Side note: Spec
2b320 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 6f 66 20  ial handling of 
2b330 43 52 4f 53 53 20 4a 4f 49 4e 2e 3c 2f 62 3e 0a  CROSS JOIN.</b>.
2b340 5e 54 68 65 72 65 20 69 73 20 6e 6f 20 64 69 66  ^There is no dif
2b350 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
2b360 74 68 65 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22  the "INNER JOIN"
2b370 2c 20 22 4a 4f 49 4e 22 20 61 6e 64 20 22 2c 22  , "JOIN" and ","
2b380 20 6a 6f 69 6e 0a 6f 70 65 72 61 74 6f 72 73 2e   join.operators.
2b390 20 54 68 65 79 20 61 72 65 20 63 6f 6d 70 6c 65   They are comple
2b3a0 74 65 6c 79 20 69 6e 74 65 72 63 68 61 6e 67 65  tely interchange
2b3b0 61 62 6c 65 20 69 6e 20 53 51 4c 69 74 65 2e 0a  able in SQLite..
2b3c0 5e 28 54 68 65 20 22 43 52 4f 53 53 20 4a 4f 49  ^(The "CROSS JOI
2b3d0 4e 22 20 6a 6f 69 6e 20 6f 70 65 72 61 74 6f 72  N" join operator
2b3e0 20 70 72 6f 64 75 63 65 73 20 74 68 65 20 73 61   produces the sa
2b3f0 6d 65 20 72 65 73 75 6c 74 20 61 73 20 74 68 65  me result as the
2b400 20 0a 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20   ."INNER JOIN", 
2b410 22 4a 4f 49 4e 22 20 61 6e 64 20 22 2c 22 20 6f  "JOIN" and "," o
2b420 70 65 72 61 74 6f 72 73 29 5e 2c 20 62 75 74 20  perators)^, but 
2b430 69 73 20 0a 5b 43 52 4f 53 53 20 4a 4f 49 4e 7c  is .[CROSS JOIN|
2b440 68 61 6e 64 6c 65 64 20 64 69 66 66 65 72 65 6e  handled differen
2b450 74 6c 79 20 62 79 20 74 68 65 20 71 75 65 72 79  tly by the query
2b460 20 6f 70 74 69 6d 69 7a 65 72 5d 0a 69 6e 20 74   optimizer].in t
2b470 68 61 74 20 69 74 20 70 72 65 76 65 6e 74 73 20  hat it prevents 
2b480 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69  the query optimi
2b490 7a 65 72 20 66 72 6f 6d 20 72 65 6f 72 64 65 72  zer from reorder
2b4a0 69 6e 67 0a 74 68 65 20 74 61 62 6c 65 73 20 69  ing.the tables i
2b4b0 6e 20 74 68 65 20 6a 6f 69 6e 2e 20 20 41 6e 20  n the join.  An 
2b4c0 61 70 70 6c 69 63 61 74 69 6f 6e 20 70 72 6f 67  application prog
2b4d0 72 61 6d 6d 65 72 20 63 61 6e 20 75 73 65 20 74  rammer can use t
2b4e0 68 65 20 43 52 4f 53 53 20 4a 4f 49 4e 20 0a 6f  he CROSS JOIN .o
2b4f0 70 65 72 61 74 6f 72 20 74 6f 20 64 69 72 65 63  perator to direc
2b500 74 6c 79 20 69 6e 66 6c 75 65 6e 63 65 20 74 68  tly influence th
2b510 65 20 61 6c 67 6f 72 69 74 68 6d 20 74 68 61 74  e algorithm that
2b520 20 69 73 20 63 68 6f 73 65 6e 20 74 6f 20 69 6d   is chosen to im
2b530 70 6c 65 6d 65 6e 74 0a 74 68 65 20 53 45 4c 45  plement.the SELE
2b540 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 41  CT statement.  A
2b550 76 6f 69 64 20 75 73 69 6e 67 20 43 52 4f 53 53  void using CROSS
2b560 20 4a 4f 49 4e 20 65 78 63 65 70 74 20 69 6e 20   JOIN except in 
2b570 73 70 65 63 69 66 69 63 20 73 69 74 75 61 74 69  specific situati
2b580 6f 6e 73 20 0a 77 68 65 72 65 20 6d 61 6e 75 61  ons .where manua
2b590 6c 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 65  l control of the
2b5a0 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72   query optimizer
2b5b0 20 69 73 20 64 65 73 69 72 65 64 2e 20 20 41 76   is desired.  Av
2b5c0 6f 69 64 20 75 73 69 6e 67 0a 43 52 4f 53 53 20  oid using.CROSS 
2b5d0 4a 4f 49 4e 20 65 61 72 6c 79 20 69 6e 20 74 68  JOIN early in th
2b5e0 65 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 6f 66  e development of
2b5f0 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20   an application 
2b600 61 73 20 64 6f 69 6e 67 20 73 6f 20 69 73 0a 61  as doing so is.a
2b610 20 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f   <a href="http:/
2b620 2f 63 32 2e 63 6f 6d 2f 63 67 69 2f 77 69 6b 69  /c2.com/cgi/wiki
2b630 3f 50 72 65 6d 61 74 75 72 65 4f 70 74 69 6d 69  ?PrematureOptimi
2b640 7a 61 74 69 6f 6e 22 3e 70 72 65 6d 61 74 75 72  zation">prematur
2b650 65 0a 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 3c 2f  e.optimization</
2b660 61 3e 2e 20 20 54 68 65 20 73 70 65 63 69 61 6c  a>.  The special
2b670 20 68 61 6e 64 6c 69 6e 67 20 6f 66 20 43 52 4f   handling of CRO
2b680 53 53 20 4a 4f 49 4e 20 69 73 20 61 6e 20 53 51  SS JOIN is an SQ
2b690 4c 69 74 65 2d 73 70 65 63 69 66 69 63 0a 66 65  Lite-specific.fe
2b6a0 61 74 75 72 65 20 61 6e 64 20 69 73 20 6e 6f 74  ature and is not
2b6b0 20 61 20 70 61 72 74 20 6f 66 20 73 74 61 6e 64   a part of stand
2b6c0 61 72 64 20 53 51 4c 2e 0a 20 20 20 20 20 20 20  ard SQL..       
2b6d0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
2b6e0 6e 74 20 77 68 65 72 65 63 6c 61 75 73 65 3c 2f  nt whereclause</
2b6f0 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79  tcl>.<tcl>hd_key
2b700 77 6f 72 64 73 20 7b 57 48 45 52 45 20 63 6c 61  words {WHERE cla
2b710 75 73 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 3c 62  use}</tcl>.<p><b
2b720 3e 32 2e 20 57 48 45 52 45 20 63 6c 61 75 73 65  >2. WHERE clause
2b730 20 66 69 6c 74 65 72 69 6e 67 2e 3c 2f 62 3e 0a   filtering.</b>.
2b740 0a 3c 70 3e 5e 28 49 66 20 61 20 57 48 45 52 45  .<p>^(If a WHERE
2b750 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69   clause is speci
2b760 66 69 65 64 2c 20 74 68 65 20 57 48 45 52 45 20  fied, the WHERE 
2b770 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76  expression is ev
2b780 61 6c 75 61 74 65 64 20 66 6f 72 20 0a 65 61 63  aluated for .eac
2b790 68 20 72 6f 77 20 69 6e 20 74 68 65 20 69 6e 70  h row in the inp
2b7a0 75 74 20 64 61 74 61 20 61 73 20 61 20 5b 62 6f  ut data as a [bo
2b7b0 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
2b7c0 5d 2e 20 4f 6e 6c 79 20 72 6f 77 73 20 66 6f 72  ]. Only rows for
2b7d0 20 77 68 69 63 68 20 74 68 65 0a 57 48 45 52 45   which the.WHERE
2b7e0 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69   clause expressi
2b7f0 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  on evaluates to 
2b800 74 72 75 65 20 61 72 65 20 69 6e 63 6c 75 64 65  true are include
2b810 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73  d from the datas
2b820 65 74 20 62 65 66 6f 72 65 0a 63 6f 6e 74 69 6e  et before.contin
2b830 75 69 6e 67 2e 29 5e 20 20 52 6f 77 73 20 61 72  uing.)^  Rows ar
2b840 65 20 65 78 63 6c 75 64 65 64 20 66 72 6f 6d 20  e excluded from 
2b850 74 68 65 20 72 65 73 75 6c 74 20 69 66 20 74 68  the result if th
2b860 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 0a 65  e WHERE clause.e
2b870 76 61 6c 75 61 74 65 73 20 74 6f 20 65 69 74 68  valuates to eith
2b880 65 72 20 66 61 6c 73 65 20 6f 72 20 4e 55 4c 4c  er false or NULL
2b890 2e 0a 0a 3c 70 3e 46 6f 72 20 61 20 4a 4f 49 4e  ...<p>For a JOIN
2b8a0 20 6f 72 20 49 4e 4e 45 52 20 4a 4f 49 4e 20 6f   or INNER JOIN o
2b8b0 72 20 43 52 4f 53 53 20 4a 4f 49 4e 2c 20 74 68  r CROSS JOIN, th
2b8c0 65 72 65 20 69 73 20 6e 6f 20 64 69 66 66 65 72  ere is no differ
2b8d0 65 6e 63 65 20 62 65 74 77 65 65 6e 20 0a 61 20  ence between .a 
2b8e0 63 6f 6e 73 74 72 61 69 6e 74 20 65 78 70 72 65  constraint expre
2b8f0 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 57 48 45  ssion in the WHE
2b900 52 45 20 63 6c 61 75 73 65 20 61 6e 64 20 6f 6e  RE clause and on
2b910 65 20 69 6e 20 74 68 65 20 4f 4e 20 63 6c 61 75  e in the ON clau
2b920 73 65 2e 20 20 48 6f 77 65 76 65 72 2c 0a 66 6f  se.  However,.fo
2b930 72 20 61 20 4c 45 46 54 20 4a 4f 49 4e 20 6f 72  r a LEFT JOIN or
2b940 20 4c 45 46 54 20 4f 55 54 45 52 20 4a 4f 49 4e   LEFT OUTER JOIN
2b950 2c 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65  , the difference
2b960 20 69 73 20 76 65 72 79 20 69 6d 70 6f 72 74 61   is very importa
2b970 6e 74 2e 20 20 0a 49 6e 20 61 20 4c 45 46 54 20  nt.  .In a LEFT 
2b980 4a 4f 49 4e 2c 0a 74 68 65 20 65 78 74 72 61 20  JOIN,.the extra 
2b990 4e 55 4c 4c 20 72 6f 77 20 66 6f 72 20 74 68 65  NULL row for the
2b9a0 20 72 69 67 68 74 2d 68 61 6e 64 20 74 61 62 6c   right-hand tabl
2b9b0 65 20 69 73 20 61 64 64 65 64 20 61 66 74 65 72  e is added after
2b9c0 20 4f 4e 20 63 6c 61 75 73 65 20 70 72 6f 63 65   ON clause proce
2b9d0 73 73 69 6e 67 0a 62 75 74 20 62 65 66 6f 72 65  ssing.but before
2b9e0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 70 72   WHERE clause pr
2b9f0 6f 63 65 73 73 69 6e 67 2e 20 20 41 20 63 6f 6e  ocessing.  A con
2ba00 73 74 72 61 69 6e 74 20 6f 66 20 74 68 65 20 66  straint of the f
2ba10 6f 72 6d 20 22 6c 65 66 74 2e 78 3d 72 69 67 68  orm "left.x=righ
2ba20 74 2e 79 22 0a 69 6e 20 61 6e 20 4f 4e 20 63 6c  t.y".in an ON cl
2ba30 61 75 73 65 20 77 69 6c 6c 20 74 68 65 72 65 66  ause will theref
2ba40 6f 72 65 20 61 6c 6c 6f 77 20 74 68 72 6f 75 67  ore allow throug
2ba50 68 20 74 68 65 20 61 64 64 65 64 20 61 6c 6c 2d  h the added all-
2ba60 4e 55 4c 4c 20 72 6f 77 73 20 6f 66 20 74 68 65  NULL rows of the
2ba70 0a 72 69 67 68 74 20 74 61 62 6c 65 2e 20 20 42  .right table.  B
2ba80 75 74 20 69 66 20 74 68 61 74 20 73 61 6d 65 20  ut if that same 
2ba90 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 69 6e  constraint is in
2baa0 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
2bab0 65 20 61 20 4e 55 4c 4c 20 69 6e 0a 22 72 69 67  e a NULL in."rig
2bac0 68 74 2e 79 22 20 77 69 6c 6c 20 70 72 65 76 65  ht.y" will preve
2bad0 6e 74 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  nt the expressio
2bae0 6e 20 22 6c 65 66 74 2e 78 3d 72 69 67 68 74 2e  n "left.x=right.
2baf0 79 22 20 66 72 6f 6d 20 62 65 69 6e 67 20 74 72  y" from being tr
2bb00 75 65 2c 20 61 6e 64 0a 74 68 75 73 20 65 78 63  ue, and.thus exc
2bb10 6c 75 64 65 20 74 68 61 74 20 72 6f 77 20 66 72  lude that row fr
2bb20 6f 6d 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 0a  om the output...
2bb30 3c 70 3e 3c 62 3e 33 2e 20 47 65 6e 65 72 61 74  <p><b>3. Generat
2bb40 69 6f 6e 20 6f 66 20 74 68 65 20 73 65 74 20 6f  ion of the set o
2bb50 66 20 72 65 73 75 6c 74 20 72 6f 77 73 2e 3c 2f  f result rows.</
2bb60 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  b>.<tcl>hd_fragm
2bb70 65 6e 74 20 72 65 73 75 6c 74 73 65 74 3c 2f 74  ent resultset</t
2bb80 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77  cl>.<tcl>hd_keyw
2bb90 6f 72 64 73 20 7b 72 65 73 75 6c 74 2d 73 65 74  ords {result-set
2bba0 20 65 78 70 72 65 73 73 69 6f 6e 73 7d 20 7b 47   expressions} {G
2bbb0 52 4f 55 50 20 42 59 7d 3c 2f 74 63 6c 3e 0a 0a  ROUP BY}</tcl>..
2bbc0 3c 70 3e 4f 6e 63 65 20 74 68 65 20 69 6e 70 75  <p>Once the inpu
2bbd0 74 20 64 61 74 61 20 66 72 6f 6d 20 74 68 65 20  t data from the 
2bbe0 46 52 4f 4d 20 63 6c 61 75 73 65 20 68 61 73 20  FROM clause has 
2bbf0 62 65 65 6e 20 66 69 6c 74 65 72 65 64 20 62 79  been filtered by
2bc00 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73   the.WHERE claus
2bc10 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 69 66  e expression (if
2bc20 20 61 6e 79 29 2c 20 74 68 65 20 73 65 74 20 6f   any), the set o
2bc30 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 66 6f  f result rows fo
2bc40 72 20 74 68 65 20 73 69 6d 70 6c 65 20 0a 53 45  r the simple .SE
2bc50 4c 45 43 54 20 61 72 65 20 63 61 6c 63 75 6c 61  LECT are calcula
2bc60 74 65 64 2e 20 45 78 61 63 74 6c 79 20 68 6f 77  ted. Exactly how
2bc70 20 74 68 69 73 20 69 73 20 64 6f 6e 65 20 64 65   this is done de
2bc80 70 65 6e 64 73 20 6f 6e 20 77 68 65 74 68 65 72  pends on whether
2bc90 20 74 68 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c   the simple .SEL
2bca0 45 43 54 20 69 73 20 61 6e 20 61 67 67 72 65 67  ECT is an aggreg
2bcb0 61 74 65 20 6f 72 20 6e 6f 6e 2d 61 67 67 72 65  ate or non-aggre
2bcc0 67 61 74 65 20 71 75 65 72 79 2c 20 61 6e 64 20  gate query, and 
2bcd0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
2bce0 20 47 52 4f 55 50 0a 42 59 20 63 6c 61 75 73 65   GROUP.BY clause
2bcf0 20 77 61 73 20 73 70 65 63 69 66 69 65 64 2e 0a   was specified..
2bd00 0a 3c 70 3e 20 54 68 65 20 6c 69 73 74 20 6f 66  .<p> The list of
2bd10 20 65 78 70 72 65 73 73 69 6f 6e 73 20 62 65 74   expressions bet
2bd20 77 65 65 6e 20 74 68 65 20 53 45 4c 45 43 54 20  ween the SELECT 
2bd30 61 6e 64 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64  and FROM keyword
2bd40 73 20 69 73 20 6b 6e 6f 77 6e 20 61 73 0a 74 68  s is known as.th
2bd50 65 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73  e result express
2bd60 69 6f 6e 20 6c 69 73 74 2e 20 20 5e 49 66 20 61  ion list.  ^If a
2bd70 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69   result expressi
2bd80 6f 6e 20 69 73 20 74 68 65 20 73 70 65 63 69 61  on is the specia
2bd90 6c 20 65 78 70 72 65 73 73 69 6f 6e 0a 22 2a 22  l expression."*"
2bda0 20 74 68 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e   then all column
2bdb0 73 20 69 6e 20 74 68 65 20 69 6e 70 75 74 20 64  s in the input d
2bdc0 61 74 61 20 61 72 65 20 73 75 62 73 74 69 74 75  ata are substitu
2bdd0 74 65 64 20 66 6f 72 20 74 68 61 74 20 6f 6e 65  ted for that one
2bde0 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 5e 28 49   expression..^(I
2bdf0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
2be00 20 69 73 20 74 68 65 20 61 6c 69 61 73 20 6f 66   is the alias of
2be10 20 61 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71   a table or subq
2be20 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d  uery in the FROM
2be30 20 63 6c 61 75 73 65 0a 66 6f 6c 6c 6f 77 65 64   clause.followed
2be40 20 62 79 20 22 2e 2a 22 20 74 68 65 6e 20 61 6c   by ".*" then al
2be50 6c 20 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d 20 74  l columns from t
2be60 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 6f  he named table o
2be70 72 20 73 75 62 71 75 65 72 79 20 61 72 65 0a 73  r subquery are.s
2be80 75 62 73 74 69 74 75 74 65 64 20 66 6f 72 20 74  ubstituted for t
2be90 68 65 20 73 69 6e 67 6c 65 20 65 78 70 72 65 73  he single expres
2bea0 73 69 6f 6e 2e 29 5e 20 5e 28 49 74 20 69 73 20  sion.)^ ^(It is 
2beb0 61 6e 20 65 72 72 6f 72 20 74 6f 20 75 73 65 20  an error to use 
2bec0 61 20 22 2a 22 20 6f 72 0a 22 61 6c 69 61 73 2e  a "*" or."alias.
2bed0 2a 22 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  *" expression in
2bee0 20 61 6e 79 20 63 6f 6e 74 65 78 74 20 6f 74 68   any context oth
2bef0 65 72 20 74 68 61 6e 20 61 20 72 65 73 75 6c 74  er than a result
2bf00 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
2bf10 2e 29 5e 0a 5e 28 49 74 20 69 73 20 61 6c 73 6f  .)^.^(It is also
2bf20 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 75 73 65   an error to use
2bf30 20 61 20 22 2a 22 20 6f 72 20 22 61 6c 69 61 73   a "*" or "alias
2bf40 2e 2a 22 20 65 78 70 72 65 73 73 69 6f 6e 20 69  .*" expression i
2bf50 6e 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  n a simple SELEC
2bf60 54 0a 71 75 65 72 79 20 74 68 61 74 20 64 6f 65  T.query that doe
2bf70 73 20 6e 6f 74 20 68 61 76 65 20 61 20 46 52 4f  s not have a FRO
2bf80 4d 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 70 3e  M clause.)^..<p>
2bf90 20 5e 28 54 68 65 20 6e 75 6d 62 65 72 20 6f 66   ^(The number of
2bfa0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
2bfb0 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62 79  rows returned by
2bfc0 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54   a simple SELECT
2bfd0 20 73 74 61 74 65 6d 65 6e 74 0a 69 73 20 65 71   statement.is eq
2bfe0 75 61 6c 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  ual to the numbe
2bff0 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  r of expressions
2c000 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65   in the result e
2c010 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 61  xpression list a
2c020 66 74 65 72 0a 73 75 62 73 74 69 74 75 74 69 6f  fter.substitutio
2c030 6e 20 6f 66 20 2a 20 61 6e 64 20 61 6c 69 61 73  n of * and alias
2c040 2e 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 29  .* expressions.)
2c050 5e 20 45 61 63 68 20 72 65 73 75 6c 74 20 72 6f  ^ Each result ro
2c060 77 20 69 73 20 63 61 6c 63 75 6c 61 74 65 64 20  w is calculated 
2c070 62 79 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68  by.evaluating th
2c080 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e  e expressions in
2c090 20 74 68 65 20 72 65 73 75 6c 74 20 65 78 70 72   the result expr
2c0a0 65 73 73 69 6f 6e 20 6c 69 73 74 20 77 69 74 68  ession list with
2c0b0 20 72 65 73 70 65 63 74 20 74 6f 20 61 0a 73 69   respect to a.si
2c0c0 6e 67 6c 65 20 72 6f 77 20 6f 66 20 69 6e 70 75  ngle row of inpu
2c0d0 74 20 64 61 74 61 20 6f 72 2c 20 66 6f 72 20 61  t data or, for a
2c0e0 67 67 72 65 67 61 74 65 20 71 75 65 72 69 65 73  ggregate queries
2c0f0 2c 20 77 69 74 68 20 72 65 73 70 65 63 74 20 74  , with respect t
2c100 6f 20 61 20 67 72 6f 75 70 0a 6f 66 20 72 6f 77  o a group.of row
2c110 73 2e 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c  s...<ul>.  <li><
2c120 70 3e 5e 49 66 20 74 68 65 20 53 45 4c 45 43 54  p>^If the SELECT
2c130 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c 62   statement is <b
2c140 3e 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65  >a non-aggregate
2c150 20 71 75 65 72 79 3c 2f 62 3e 2c 20 74 68 65 6e   query</b>, then
2c160 20 0a 20 20 20 20 65 61 63 68 20 65 78 70 72 65   .    each expre
2c170 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73  ssion in the res
2c180 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  ult expression l
2c190 69 73 74 20 69 73 20 65 76 61 6c 75 61 74 65 64  ist is evaluated
2c1a0 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e   for each row in
2c1b0 0a 20 20 20 20 74 68 65 20 64 61 74 61 73 65 74  .    the dataset
2c1c0 20 66 69 6c 74 65 72 65 64 20 62 79 20 74 68 65   filtered by the
2c1d0 20 57 48 45 52 45 20 63 6c 61 75 73 65 2e 0a 0a   WHERE clause...
2c1e0 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
2c1f0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2c200 74 20 69 73 20 3c 62 3e 61 6e 20 61 67 67 72 65  t is <b>an aggre
2c210 67 61 74 65 20 71 75 65 72 79 20 77 69 74 68 6f  gate query witho
2c220 75 74 20 61 20 47 52 4f 55 50 0a 20 20 20 20 42  ut a GROUP.    B
2c230 59 3c 2f 62 3e 20 63 6c 61 75 73 65 2c 20 74 68  Y</b> clause, th
2c240 65 6e 20 65 61 63 68 20 61 67 67 72 65 67 61 74  en each aggregat
2c250 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  e expression in 
2c260 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 69  the result-set i
2c270 73 20 0a 20 20 20 20 65 76 61 6c 75 61 74 65 64  s .    evaluated
2c280 20 6f 6e 63 65 20 61 63 72 6f 73 73 20 74 68 65   once across the
2c290 20 65 6e 74 69 72 65 20 64 61 74 61 73 65 74 2e   entire dataset.
2c2a0 20 5e 45 61 63 68 20 6e 6f 6e 2d 61 67 67 72 65   ^Each non-aggre
2c2b0 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 0a  gate expression.
2c2c0 20 20 20 20 69 6e 20 74 68 65 20 72 65 73 75 6c      in the resul
2c2d0 74 2d 73 65 74 20 69 73 20 65 76 61 6c 75 61 74  t-set is evaluat
2c2e0 65 64 20 6f 6e 63 65 20 66 6f 72 20 61 6e 20 61  ed once for an a
2c2f0 72 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63  rbitrarily selec
2c300 74 65 64 20 72 6f 77 20 6f 66 0a 20 20 20 20 74  ted row of.    t
2c310 68 65 20 64 61 74 61 73 65 74 2e 20 5e 54 68 65  he dataset. ^The
2c320 20 73 61 6d 65 20 61 72 62 69 74 72 61 72 69 6c   same arbitraril
2c330 79 20 73 65 6c 65 63 74 65 64 20 72 6f 77 20 69  y selected row i
2c340 73 20 75 73 65 64 20 66 6f 72 20 65 61 63 68 0a  s used for each.
2c350 20 20 20 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74      non-aggregat
2c360 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e 4f  e expression. ^O
2c370 72 2c 20 69 66 20 74 68 65 20 64 61 74 61 73 65  r, if the datase
2c380 74 20 63 6f 6e 74 61 69 6e 73 20 7a 65 72 6f 20  t contains zero 
2c390 72 6f 77 73 2c 20 74 68 65 6e 20 0a 20 20 20 20  rows, then .    
2c3a0 65 61 63 68 20 6e 6f 6e 2d 61 67 67 72 65 67 61  each non-aggrega
2c3b0 74 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  te expression is
2c3c0 20 65 76 61 6c 75 61 74 65 64 20 61 67 61 69 6e   evaluated again
2c3d0 73 74 20 61 20 72 6f 77 20 63 6f 6e 73 69 73 74  st a row consist
2c3e0 69 6e 67 0a 20 20 20 20 65 6e 74 69 72 65 6c 79  ing.    entirely
2c3f0 20 6f 66 20 4e 55 4c 4c 20 76 61 6c 75 65 73 2e   of NULL values.
2c400 0a 0a 20 20 20 3c 70 3e 5e 54 68 65 20 73 69 6e  ..   <p>^The sin
2c410 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  gle row of resul
2c420 74 2d 73 65 74 20 64 61 74 61 20 63 72 65 61 74  t-set data creat
2c430 65 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67  ed by evaluating
2c440 20 74 68 65 20 61 67 67 72 65 67 61 74 65 0a 20   the aggregate. 
2c450 20 20 20 61 6e 64 20 6e 6f 6e 2d 61 67 67 72 65     and non-aggre
2c460 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 73  gate expressions
2c470 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73   in the result-s
2c480 65 74 20 66 6f 72 6d 73 20 74 68 65 20 72 65 73  et forms the res
2c490 75 6c 74 20 6f 66 20 61 6e 0a 20 20 20 20 61 67  ult of an.    ag
2c4a0 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69  gregate query wi
2c4b0 74 68 6f 75 74 20 61 20 47 52 4f 55 50 20 42 59  thout a GROUP BY
2c4c0 20 63 6c 61 75 73 65 2e 20 5e 41 6e 20 61 67 67   clause. ^An agg
2c4d0 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69 74  regate query wit
2c4e0 68 6f 75 74 20 61 0a 20 20 20 20 47 52 4f 55 50  hout a.    GROUP
2c4f0 20 42 59 20 63 6c 61 75 73 65 20 61 6c 77 61 79   BY clause alway
2c500 73 20 72 65 74 75 72 6e 73 20 65 78 61 63 74 6c  s returns exactl
2c510 79 20 6f 6e 65 20 72 6f 77 20 6f 66 20 64 61 74  y one row of dat
2c520 61 2c 20 65 76 65 6e 20 69 66 20 74 68 65 72 65  a, even if there
2c530 20 61 72 65 0a 20 20 20 20 7a 65 72 6f 20 72 6f   are.    zero ro
2c540 77 73 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61  ws of input data
2c550 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 28 49 66  ...  <li><p>^(If
2c560 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
2c570 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61 6e 20 61  ement is <b>an a
2c580 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77  ggregate query w
2c590 69 74 68 20 61 20 47 52 4f 55 50 0a 20 20 20 20  ith a GROUP.    
2c5a0 42 59 3c 2f 62 3e 20 63 6c 61 75 73 65 2c 20 74  BY</b> clause, t
2c5b0 68 65 6e 20 65 61 63 68 20 6f 66 20 74 68 65 20  hen each of the 
2c5c0 65 78 70 72 65 73 73 69 6f 6e 73 20 73 70 65 63  expressions spec
2c5d0 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
2c5e0 20 74 68 65 0a 20 20 20 20 47 52 4f 55 50 20 42   the.    GROUP B
2c5f0 59 20 63 6c 61 75 73 65 20 69 73 20 65 76 61 6c  Y clause is eval
2c600 75 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72  uated for each r
2c610 6f 77 20 6f 66 20 74 68 65 20 64 61 74 61 73 65  ow of the datase
2c620 74 2e 20 45 61 63 68 20 72 6f 77 0a 20 20 20 20  t. Each row.    
2c630 69 73 20 74 68 65 6e 20 61 73 73 69 67 6e 65 64  is then assigned
2c640 20 74 6f 20 61 20 22 67 72 6f 75 70 22 20 62 61   to a "group" ba
2c650 73 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c  sed on the resul
2c660 74 73 3b 20 72 6f 77 73 20 66 6f 72 20 77 68 69  ts; rows for whi
2c670 63 68 0a 20 20 20 20 74 68 65 20 72 65 73 75 6c  ch.    the resul
2c680 74 73 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67  ts of evaluating
2c690 20 74 68 65 20 47 52 4f 55 50 20 42 59 20 65 78   the GROUP BY ex
2c6a0 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 74 68  pressions are th
2c6b0 65 20 73 61 6d 65 20 67 65 74 0a 20 20 20 20 61  e same get.    a
2c6c0 73 73 69 67 6e 65 64 20 74 6f 20 74 68 65 20 73  ssigned to the s
2c6d0 61 6d 65 20 67 72 6f 75 70 2e 29 5e 20 5e 46 6f  ame group.)^ ^Fo
2c6e0 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
2c6f0 66 20 67 72 6f 75 70 69 6e 67 20 72 6f 77 73 2c  f grouping rows,
2c700 20 4e 55 4c 4c 20 0a 20 20 20 20 76 61 6c 75 65   NULL .    value
2c710 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
2c720 20 65 71 75 61 6c 2e 20 5e 54 68 65 20 75 73 75   equal. ^The usu
2c730 61 6c 20 72 75 6c 65 73 20 66 6f 72 20 5b 63 6f  al rules for [co
2c740 6c 6c 61 74 69 6f 6e 7c 73 65 6c 65 63 74 69 6e  llation|selectin
2c750 67 20 61 0a 20 20 20 20 63 6f 6c 6c 61 74 69 6f  g a.    collatio
2c760 6e 20 73 65 71 75 65 6e 63 65 5d 20 77 69 74 68  n sequence] with
2c770 20 77 68 69 63 68 20 74 6f 20 63 6f 6d 70 61 72   which to compar
2c780 65 20 74 65 78 74 20 76 61 6c 75 65 73 20 61 70  e text values ap
2c790 70 6c 79 20 77 68 65 6e 20 65 76 61 6c 75 61 74  ply when evaluat
2c7a0 69 6e 67 0a 20 20 20 20 65 78 70 72 65 73 73 69  ing.    expressi
2c7b0 6f 6e 73 20 69 6e 20 61 20 47 52 4f 55 50 20 42  ons in a GROUP B
2c7c0 59 20 63 6c 61 75 73 65 2e 20 20 5e 54 68 65 20  Y clause.  ^The 
2c7d0 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74  expressions in t
2c7e0 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  he GROUP BY clau
2c7f0 73 65 0a 20 20 20 20 64 6f 20 3c 65 6d 3e 6e 6f  se.    do <em>no
2c800 74 3c 2f 65 6d 3e 20 68 61 76 65 20 74 6f 20 62  t</em> have to b
2c810 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68  e expressions th
2c820 61 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65  at appear in the
2c830 20 72 65 73 75 6c 74 2e 20 5e 54 68 65 0a 20 20   result. ^The.  
2c840 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e    expressions in
2c850 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75   a GROUP BY clau
2c860 73 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 61 67  se may not be ag
2c870 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
2c880 6f 6e 73 2e 0a 0a 20 20 20 20 3c 70 3e 5e 28 49  ons...    <p>^(I
2c890 66 20 61 20 48 41 56 49 4e 47 20 63 6c 61 75 73  f a HAVING claus
2c8a0 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  e is specified, 
2c8b0 69 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  it is evaluated 
2c8c0 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 20 67 72  once for each gr
2c8d0 6f 75 70 20 0a 20 20 20 20 6f 66 20 72 6f 77 73  oup .    of rows
2c8e0 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65   as a [boolean e
2c8f0 78 70 72 65 73 73 69 6f 6e 5d 2e 20 49 66 20 74  xpression]. If t
2c900 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61  he result of eva
2c910 6c 75 61 74 69 6e 67 20 74 68 65 0a 20 20 20 20  luating the.    
2c920 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73  HAVING clause is
2c930 20 66 61 6c 73 65 2c 20 74 68 65 20 67 72 6f 75   false, the grou
2c940 70 20 69 73 20 64 69 73 63 61 72 64 65 64 2e 29  p is discarded.)
2c950 5e 20 5e 49 66 20 74 68 65 20 48 41 56 49 4e 47  ^ ^If the HAVING
2c960 20 63 6c 61 75 73 65 20 69 73 0a 20 20 20 20 61   clause is.    a
2c970 6e 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72  n aggregate expr
2c980 65 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 65 76  ession, it is ev
2c990 61 6c 75 61 74 65 64 20 61 63 72 6f 73 73 20 61  aluated across a
2c9a0 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67  ll rows in the g
2c9b0 72 6f 75 70 2e 20 5e 49 66 0a 20 20 20 20 61 20  roup. ^If.    a 
2c9c0 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73  HAVING clause is
2c9d0 20 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65   a non-aggregate
2c9e0 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20   expression, it 
2c9f0 69 73 20 65 76 61 6c 75 61 74 65 64 20 77 69 74  is evaluated wit
2ca00 68 20 72 65 73 70 65 63 74 0a 20 20 20 20 74 6f  h respect.    to
2ca10 20 61 6e 20 61 72 62 69 74 72 61 72 69 6c 79 20   an arbitrarily 
2ca20 73 65 6c 65 63 74 65 64 20 72 6f 77 20 66 72 6f  selected row fro
2ca30 6d 20 74 68 65 20 67 72 6f 75 70 2e 20 20 5e 54  m the group.  ^T
2ca40 68 65 20 48 41 56 49 4e 47 20 65 78 70 72 65 73  he HAVING expres
2ca50 73 69 6f 6e 20 6d 61 79 0a 20 20 20 20 72 65 66  sion may.    ref
2ca60 65 72 20 74 6f 20 76 61 6c 75 65 73 2c 20 65 76  er to values, ev
2ca70 65 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  en aggregate fun
2ca80 63 74 69 6f 6e 73 2c 20 74 68 61 74 20 61 72 65  ctions, that are
2ca90 20 6e 6f 74 20 69 6e 20 74 68 65 20 72 65 73 75   not in the resu
2caa0 6c 74 2e 3c 2f 70 3e 0a 0a 20 20 20 20 3c 70 3e  lt.</p>..    <p>
2cab0 5e 45 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e  ^Each expression
2cac0 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73   in the result-s
2cad0 65 74 20 69 73 20 74 68 65 6e 20 65 76 61 6c 75  et is then evalu
2cae0 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61  ated once for ea
2caf0 63 68 0a 20 20 20 20 67 72 6f 75 70 20 6f 66 20  ch.    group of 
2cb00 72 6f 77 73 2e 20 5e 49 66 20 74 68 65 20 65 78  rows. ^If the ex
2cb10 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 61  pression is an a
2cb20 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73  ggregate express
2cb30 69 6f 6e 2c 20 69 74 20 69 73 20 0a 20 20 20 20  ion, it is .    
2cb40 65 76 61 6c 75 61 74 65 64 20 61 63 72 6f 73 73  evaluated across
2cb50 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68 65   all rows in the
2cb60 20 67 72 6f 75 70 2e 20 5e 4f 74 68 65 72 77 69   group. ^Otherwi
2cb70 73 65 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61  se, it is evalua
2cb80 74 65 64 20 61 67 61 69 6e 73 74 0a 20 20 20 20  ted against.    
2cb90 61 20 73 69 6e 67 6c 65 20 61 72 62 69 74 72 61  a single arbitra
2cba0 72 69 6c 79 20 63 68 6f 73 65 6e 20 72 6f 77 20  rily chosen row 
2cbb0 66 72 6f 6d 20 77 69 74 68 69 6e 20 74 68 65 20  from within the 
2cbc0 67 72 6f 75 70 2e 20 5e 49 66 20 74 68 65 72 65  group. ^If there
2cbd0 20 69 73 20 6d 6f 72 65 0a 20 20 20 20 74 68 61   is more.    tha
2cbe0 6e 20 6f 6e 65 20 6e 6f 6e 2d 61 67 67 72 65 67  n one non-aggreg
2cbf0 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ate expression i
2cc00 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74  n the result-set
2cc10 2c 20 74 68 65 6e 20 61 6c 6c 20 73 75 63 68 0a  , then all such.
2cc20 20 20 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20      expressions 
2cc30 61 72 65 20 65 76 61 6c 75 61 74 65 64 20 66 6f  are evaluated fo
2cc40 72 20 74 68 65 20 73 61 6d 65 20 72 6f 77 2e 0a  r the same row..
2cc50 0a 20 20 20 20 3c 70 3e 5e 45 61 63 68 20 67 72  .    <p>^Each gr
2cc60 6f 75 70 20 6f 66 20 69 6e 70 75 74 20 64 61 74  oup of input dat
2cc70 61 73 65 74 20 72 6f 77 73 20 63 6f 6e 74 72 69  aset rows contri
2cc80 62 75 74 65 73 20 61 20 73 69 6e 67 6c 65 20 72  butes a single r
2cc90 6f 77 20 74 6f 20 74 68 65 20 0a 20 20 20 20 73  ow to the .    s
2cca0 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
2ccb0 73 2e 20 5e 53 75 62 6a 65 63 74 20 74 6f 20 66  s. ^Subject to f
2ccc0 69 6c 74 65 72 69 6e 67 20 61 73 73 6f 63 69 61  iltering associa
2ccd0 74 65 64 20 77 69 74 68 20 74 68 65 20 44 49 53  ted with the DIS
2cce0 54 49 4e 43 54 0a 20 20 20 20 6b 65 79 77 6f 72  TINCT.    keywor
2ccf0 64 2c 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  d, the number of
2cd00 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62   rows returned b
2cd10 79 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 71  y an aggregate q
2cd20 75 65 72 79 20 77 69 74 68 20 61 20 47 52 4f 55  uery with a GROU
2cd30 50 0a 20 20 20 20 42 59 20 63 6c 61 75 73 65 20  P.    BY clause 
2cd40 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74  is the same as t
2cd50 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 67 72 6f  he number of gro
2cd60 75 70 73 20 6f 66 20 72 6f 77 73 20 70 72 6f 64  ups of rows prod
2cd70 75 63 65 64 20 62 79 20 61 70 70 6c 79 69 6e 67  uced by applying
2cd80 0a 20 20 20 20 74 68 65 20 47 52 4f 55 50 20 42  .    the GROUP B
2cd90 59 20 61 6e 64 20 48 41 56 49 4e 47 20 63 6c 61  Y and HAVING cla
2cda0 75 73 65 73 20 74 6f 20 74 68 65 20 66 69 6c 74  uses to the filt
2cdb0 65 72 65 64 20 69 6e 70 75 74 20 64 61 74 61 73  ered input datas
2cdc0 65 74 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e  et..</ul>..<tcl>
2cdd0 68 64 5f 66 72 61 67 6d 65 6e 74 20 62 61 72 65  hd_fragment bare
2cde0 61 67 67 20 7b 62 61 72 65 20 61 67 67 72 65 67  agg {bare aggreg
2cdf0 61 74 65 20 74 65 72 6d 73 7d 3c 2f 74 63 6c 3e  ate terms}</tcl>
2ce00 0a 3c 70 3e 3c 62 3e 53 69 64 65 20 6e 6f 74 65  .<p><b>Side note
2ce10 3a 20 42 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69  : Bare columns i
2ce20 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 71  n an aggregate q
2ce30 75 65 72 69 65 73 2e 3c 2f 62 3e 0a 54 68 65 20  ueries.</b>.The 
2ce40 75 73 75 61 6c 20 63 61 73 65 20 69 73 20 74 68  usual case is th
2ce50 61 74 20 61 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61  at all column na
2ce60 6d 65 73 20 69 6e 20 61 6e 20 61 67 67 72 65 67  mes in an aggreg
2ce70 61 74 65 20 71 75 65 72 79 20 61 72 65 20 65 69  ate query are ei
2ce80 74 68 65 72 0a 61 72 67 75 6d 65 6e 74 73 20 74  ther.arguments t
2ce90 6f 20 5b 61 67 67 66 75 6e 63 7c 61 67 67 72 65  o [aggfunc|aggre
2cea0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20  gate functions] 
2ceb0 6f 72 20 65 6c 73 65 20 61 70 70 65 61 72 20 69  or else appear i
2cec0 6e 20 74 68 65 20 47 52 4f 55 50 20 42 59 20 63  n the GROUP BY c
2ced0 6c 61 75 73 65 2e 0a 41 20 72 65 73 75 6c 74 20  lause..A result 
2cee0 63 6f 6c 75 6d 6e 20 77 68 69 63 68 20 63 6f 6e  column which con
2cef0 74 61 69 6e 73 20 61 20 63 6f 6c 75 6d 6e 20 6e  tains a column n
2cf00 61 6d 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20  ame that is not 
2cf10 77 69 74 68 69 6e 20 61 6e 0a 61 67 67 72 65 67  within an.aggreg
2cf20 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  ate function and
2cf30 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 61   that does not a
2cf40 70 70 65 61 72 20 69 6e 20 74 68 65 20 47 52 4f  ppear in the GRO
2cf50 55 50 20 42 59 20 63 6c 61 75 73 65 20 28 69 66  UP BY clause (if
2cf60 0a 6f 6e 65 20 65 78 69 73 74 73 29 20 69 73 20  .one exists) is 
2cf70 63 61 6c 6c 65 64 20 61 20 22 62 61 72 65 22 20  called a "bare" 
2cf80 63 6f 6c 75 6d 6e 2e 0a 45 78 61 6d 70 6c 65 3a  column..Example:
2cf90 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
2cfa0 65 3e 0a 53 45 4c 45 43 54 20 61 2c 20 62 2c 20  e>.SELECT a, b, 
2cfb0 73 75 6d 28 63 29 20 46 52 4f 4d 20 74 61 62 31  sum(c) FROM tab1
2cfc0 20 47 52 4f 55 50 20 42 59 20 61 3b 0a 3c 2f 70   GROUP BY a;.</p
2cfd0 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
2cfe0 0a 3c 70 3e 49 6e 20 74 68 65 20 71 75 65 72 79  .<p>In the query
2cff0 20 61 62 6f 76 65 2c 20 74 68 65 20 22 61 22 20   above, the "a" 
2d000 63 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f  column is part o
2d010 66 20 74 68 65 20 47 52 4f 55 50 20 42 59 20 63  f the GROUP BY c
2d020 6c 61 75 73 65 0a 61 6e 64 20 73 6f 20 65 61 63  lause.and so eac
2d030 68 20 72 6f 77 20 6f 66 20 74 68 65 20 6f 75 74  h row of the out
2d040 70 75 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  put contains one
2d050 20 6f 66 20 74 68 65 20 64 69 73 74 69 6e 63 74   of the distinct
2d060 20 76 61 6c 75 65 73 20 66 6f 72 0a 22 61 22 2e   values for."a".
2d070 20 20 54 68 65 20 22 63 22 20 63 6f 6c 75 6d 6e    The "c" column
2d080 20 69 73 20 63 6f 6e 74 61 69 6e 65 64 20 77 69   is contained wi
2d090 74 68 69 6e 20 74 68 65 20 5b 73 75 6d 28 29 5d  thin the [sum()]
2d0a0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
2d0b0 69 6f 6e 0a 61 6e 64 20 73 6f 20 74 68 61 74 20  ion.and so that 
2d0c0 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 20 69 73  output column is
2d0d0 20 74 68 65 20 73 75 6d 20 6f 66 20 61 6c 6c 20   the sum of all 
2d0e0 22 63 22 20 76 61 6c 75 65 73 20 69 6e 20 72 6f  "c" values in ro
2d0f0 77 73 20 74 68 61 74 0a 68 61 76 65 20 74 68 65  ws that.have the
2d100 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20   same value for 
2d110 22 61 22 2e 20 20 42 75 74 20 77 68 61 74 20 69  "a".  But what i
2d120 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  s the result of 
2d130 74 68 65 20 62 61 72 65 20 0a 63 6f 6c 75 6d 6e  the bare .column
2d140 20 22 62 22 3f 20 54 68 65 20 61 6e 73 77 65 72   "b"? The answer
2d150 20 69 73 20 74 68 61 74 20 74 68 65 20 22 62 22   is that the "b"
2d160 20 72 65 73 75 6c 74 20 77 69 6c 6c 20 62 65 20   result will be 
2d170 74 68 65 0a 76 61 6c 75 65 20 66 6f 72 20 22 62  the.value for "b
2d180 22 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20  " in one of the 
2d190 69 6e 70 75 74 20 72 6f 77 73 20 74 68 61 74 20  input rows that 
2d1a0 66 6f 72 6d 20 74 68 65 20 61 67 67 72 65 67 61  form the aggrega
2d1b0 74 65 2e 0a 54 68 65 20 70 72 6f 62 6c 65 6d 20  te..The problem 
2d1c0 69 73 20 74 68 61 74 20 79 6f 75 20 75 73 75 61  is that you usua
2d1d0 6c 6c 79 20 64 6f 20 6e 6f 74 20 6b 6e 6f 77 20  lly do not know 
2d1e0 77 68 69 63 68 20 69 6e 70 75 74 20 72 6f 77 20  which input row 
2d1f0 69 73 20 75 73 65 64 0a 74 6f 20 63 6f 6d 70 75  is used.to compu
2d200 74 65 20 22 62 22 2c 20 61 6e 64 20 73 6f 20 69  te "b", and so i
2d210 6e 20 6d 61 6e 79 20 63 61 73 65 73 20 74 68 65  n many cases the
2d220 20 76 61 6c 75 65 20 66 6f 72 20 22 62 22 20 69   value for "b" i
2d230 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 3c 2f 70  s undefined..</p
2d240 3e 0a 3c 70 3e 0a 53 70 65 63 69 61 6c 20 70 72  >.<p>.Special pr
2d250 6f 63 65 73 73 69 6e 67 20 6f 63 63 75 72 73 20  ocessing occurs 
2d260 6f 63 63 75 72 73 20 77 68 65 6e 20 74 68 65 20  occurs when the 
2d270 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
2d280 6f 6e 20 69 73 20 0a 65 69 74 68 65 72 20 5b 6d  on is .either [m
2d290 61 78 41 67 67 46 75 6e 63 7c 6d 69 6e 28 29 5d  axAggFunc|min()]
2d2a0 20 6f 72 20 5b 6d 69 6e 41 67 67 46 75 6e 63 7c   or [minAggFunc|
2d2b0 6d 61 78 28 29 5d 2e 20 20 45 78 61 6d 70 6c 65  max()].  Example
2d2c0 3a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  :.<blockquote><p
2d2d0 72 65 3e 0a 53 45 4c 45 43 54 20 61 2c 20 62 2c  re>.SELECT a, b,
2d2e0 20 6d 61 78 28 63 29 20 46 52 4f 4d 20 74 61 62   max(c) FROM tab
2d2f0 31 20 47 52 4f 55 50 20 42 59 20 61 3b 0a 3c 2f  1 GROUP BY a;.</
2d300 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
2d310 3e 0a 57 68 65 6e 20 74 68 65 20 5b 6d 61 78 41  >.When the [maxA
2d320 67 67 46 75 6e 63 7c 6d 69 6e 28 29 5d 20 6f 72  ggFunc|min()] or
2d330 20 5b 6d 69 6e 41 67 67 46 75 6e 63 7c 6d 61 78   [minAggFunc|max
2d340 28 29 5d 20 61 67 67 72 65 67 61 74 65 20 66 75  ()] aggregate fu
2d350 6e 63 74 69 6f 6e 73 20 0a 61 72 65 20 75 73 65  nctions .are use
2d360 64 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74  d in an aggregat
2d370 65 20 71 75 65 72 79 2c 20 61 6c 6c 20 62 61 72  e query, all bar
2d380 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
2d390 20 72 65 73 75 6c 74 20 73 65 74 20 0a 74 61 6b   result set .tak
2d3a0 65 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 74 68  e values from th
2d3b0 65 20 69 6e 70 75 74 0a 72 6f 77 20 77 68 69 63  e input.row whic
2d3c0 68 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20  h also contains 
2d3d0 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 20 6d  the minimum or m
2d3e0 61 78 69 6d 75 6d 2e 20 20 53 6f 20 69 6e 20 74  aximum.  So in t
2d3f0 68 65 20 71 75 65 72 79 0a 61 62 6f 76 65 2c 20  he query.above, 
2d400 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
2d410 20 22 62 22 20 63 6f 6c 75 6d 6e 20 69 6e 20 74   "b" column in t
2d420 68 65 20 6f 75 74 70 75 74 20 77 69 6c 6c 20 62  he output will b
2d430 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 0a 74  e the value of.t
2d440 68 65 20 22 62 22 20 63 6f 6c 75 6d 6e 20 69 6e  he "b" column in
2d450 20 74 68 65 20 69 6e 70 75 74 20 72 6f 77 20 74   the input row t
2d460 68 61 74 20 68 61 73 20 74 68 65 20 6c 61 72 67  hat has the larg
2d470 65 73 74 20 22 63 22 20 76 61 6c 75 65 2e 0a 54  est "c" value..T
2d480 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20 61 6e  here is still an
2d490 20 61 6d 62 69 67 75 69 74 79 20 69 66 20 74 77   ambiguity if tw
2d4a0 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65  o or more of the
2d4b0 20 69 6e 70 75 74 20 72 6f 77 73 20 68 61 76 65   input rows have
2d4c0 20 74 68 65 0a 73 61 6d 65 20 6d 69 6e 69 6d 75   the.same minimu
2d4d0 6d 20 6f 72 20 6d 61 78 69 6d 75 6d 20 76 61 6c  m or maximum val
2d4e0 75 65 20 6f 72 20 69 66 20 74 68 65 20 71 75 65  ue or if the que
2d4f0 72 79 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65  ry contains more
2d500 20 74 68 61 6e 20 6f 6e 65 0a 6d 69 6e 28 29 20   than one.min() 
2d510 61 6e 64 2f 6f 72 20 6d 61 78 28 29 20 61 67 67  and/or max() agg
2d520 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e  regate function.
2d530 20 4f 6e 6c 79 20 74 68 65 20 62 75 69 6c 74 2d   Only the built-
2d540 69 6e 20 5b 6d 69 6e 41 67 67 46 75 6e 63 7c 6d  in [minAggFunc|m
2d550 69 6e 28 29 5d 20 0a 61 6e 64 20 5b 6d 61 78 41  in()] .and [maxA
2d560 67 67 46 75 6e 63 7c 6d 61 78 28 29 5d 20 66 75  ggFunc|max()] fu
2d570 6e 63 74 69 6f 6e 73 20 77 6f 72 6b 20 74 68 69  nctions work thi
2d580 73 20 77 61 79 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  s way..</p>..<p>
2d590 3c 62 3e 34 2e 20 52 65 6d 6f 76 61 6c 20 6f 66  <b>4. Removal of
2d5a0 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20   duplicate rows 
2d5b0 28 44 49 53 54 49 4e 43 54 20 70 72 6f 63 65 73  (DISTINCT proces
2d5c0 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e  sing).</b>.<tcl>
2d5d0 68 64 5f 66 72 61 67 6d 65 6e 74 20 64 69 73 74  hd_fragment dist
2d5e0 69 6e 63 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e  inct</tcl>.<tcl>
2d5f0 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 44 49 53  hd_keywords {DIS
2d600 54 49 4e 43 54 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  TINCT}</tcl>..<p
2d610 3e 5e 4f 6e 65 20 6f 66 20 74 68 65 20 41 4c 4c  >^One of the ALL
2d620 20 6f 72 20 44 49 53 54 49 4e 43 54 20 6b 65 79   or DISTINCT key
2d630 77 6f 72 64 73 20 6d 61 79 20 66 6f 6c 6c 6f 77  words may follow
2d640 20 74 68 65 20 53 45 4c 45 43 54 20 6b 65 79 77   the SELECT keyw
2d650 6f 72 64 20 69 6e 20 61 20 0a 73 69 6d 70 6c 65  ord in a .simple
2d660 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2d670 74 2e 20 5e 49 66 20 74 68 65 20 73 69 6d 70 6c  t. ^If the simpl
2d680 65 20 53 45 4c 45 43 54 20 69 73 20 61 20 53 45  e SELECT is a SE
2d690 4c 45 43 54 20 41 4c 4c 2c 20 74 68 65 6e 20 74  LECT ALL, then t
2d6a0 68 65 0a 65 6e 74 69 72 65 20 73 65 74 20 6f 66  he.entire set of
2d6b0 20 72 65 73 75 6c 74 20 72 6f 77 73 20 61 72 65   result rows are
2d6c0 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
2d6d0 20 53 45 4c 45 43 54 2e 20 5e 49 66 20 6e 65 69   SELECT. ^If nei
2d6e0 74 68 65 72 20 41 4c 4c 20 6f 72 0a 44 49 53 54  ther ALL or.DIST
2d6f0 49 4e 43 54 20 61 72 65 20 70 72 65 73 65 6e 74  INCT are present
2d700 2c 20 74 68 65 6e 20 74 68 65 20 62 65 68 61 76  , then the behav
2d710 69 6f 72 20 69 73 20 61 73 20 69 66 20 41 4c 4c  ior is as if ALL
2d720 20 77 65 72 65 20 73 70 65 63 69 66 69 65 64 2e   were specified.
2d730 20 0a 5e 49 66 20 74 68 65 20 73 69 6d 70 6c 65   .^If the simple
2d740 20 53 45 4c 45 43 54 20 69 73 20 61 20 53 45 4c   SELECT is a SEL
2d750 45 43 54 20 44 49 53 54 49 4e 43 54 2c 20 74 68  ECT DISTINCT, th
2d760 65 6e 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77  en duplicate row
2d770 73 20 61 72 65 20 72 65 6d 6f 76 65 64 0a 66 72  s are removed.fr
2d780 6f 6d 20 74 68 65 20 73 65 74 20 6f 66 20 72 65  om the set of re
2d790 73 75 6c 74 20 72 6f 77 73 20 62 65 66 6f 72 65  sult rows before
2d7a0 20 69 74 20 69 73 20 72 65 74 75 72 6e 65 64 2e   it is returned.
2d7b0 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73   ^For the purpos
2d7c0 65 73 20 6f 66 0a 64 65 74 65 63 74 69 6e 67 20  es of.detecting 
2d7d0 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 2c 20  duplicate rows, 
2d7e0 74 77 6f 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  two NULL values 
2d7f0 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74  are considered t
2d800 6f 20 62 65 20 65 71 75 61 6c 2e 20 5e 54 68 65  o be equal. ^The
2d810 0a 5b 68 6f 77 20 63 6f 6c 6c 61 74 69 6f 6e 20  .[how collation 
2d820 69 73 20 64 65 74 65 72 6d 69 6e 65 64 7c 75 73  is determined|us
2d830 75 61 6c 20 72 75 6c 65 73 5d 20 61 70 70 6c 79  ual rules] apply
2d840 20 66 6f 72 20 73 65 6c 65 63 74 69 6e 67 20 61   for selecting a
2d850 20 63 6f 6c 6c 61 74 69 6f 6e 0a 73 65 71 75 65   collation.seque
2d860 6e 63 65 20 74 6f 20 63 6f 6d 70 61 72 65 20 74  nce to compare t
2d870 65 78 74 20 76 61 6c 75 65 73 2e 0a 0a 3c 74 63  ext values...<tc
2d880 6c 3e 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 63  l>.hd_fragment c
2d890 6f 6d 70 6f 75 6e 64 20 7b 63 6f 6d 70 6f 75 6e  ompound {compoun
2d8a0 64 20 73 65 6c 65 63 74 7d 20 7b 63 6f 6d 70 6f  d select} {compo
2d8b0 75 6e 64 20 71 75 65 72 79 7d 20 7b 63 6f 6d 70  und query} {comp
2d8c0 6f 75 6e 64 20 53 45 4c 45 43 54 7d 20 7b 63 6f  ound SELECT} {co
2d8d0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 73 7d 0a  mpound SELECTs}.
2d8e0 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 6f 6d 70 6f  </tcl>.<h3>Compo
2d8f0 75 6e 64 20 53 65 6c 65 63 74 20 53 74 61 74 65  und Select State
2d900 6d 65 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54  ments</h3>..<p>T
2d910 77 6f 20 6f 72 20 6d 6f 72 65 20 5b 73 69 6d 70  wo or more [simp
2d920 6c 65 20 53 45 4c 45 43 54 5d 20 73 74 61 74 65  le SELECT] state
2d930 6d 65 6e 74 73 20 6d 61 79 20 62 65 20 63 6f 6e  ments may be con
2d940 6e 65 63 74 65 64 20 74 6f 67 65 74 68 65 72 20  nected together 
2d950 74 6f 20 66 6f 72 6d 0a 61 20 63 6f 6d 70 6f 75  to form.a compou
2d960 6e 64 20 53 45 4c 45 43 54 20 75 73 69 6e 67 20  nd SELECT using 
2d970 74 68 65 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e  the UNION, UNION
2d980 20 41 4c 4c 2c 20 49 4e 54 45 52 53 45 43 54 20   ALL, INTERSECT 
2d990 6f 72 20 45 58 43 45 50 54 20 6f 70 65 72 61 74  or EXCEPT operat
2d9a0 6f 72 2c 0a 61 73 20 73 68 6f 77 6e 20 62 79 20  or,.as shown by 
2d9b0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 69  the following di
2d9c0 61 67 72 61 6d 3a 0a 0a 3c 74 63 6c 3e 0a 52 65  agram:..<tcl>.Re
2d9d0 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
2d9e0 67 72 61 6d 20 63 6f 6d 70 6f 75 6e 64 2d 73 65  gram compound-se
2d9f0 6c 65 63 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  lect-stmt.</tcl>
2da00 0a 0a 3c 70 3e 5e 49 6e 20 61 20 63 6f 6d 70 6f  ..<p>^In a compo
2da10 75 6e 64 20 53 45 4c 45 43 54 2c 20 61 6c 6c 20  und SELECT, all 
2da20 74 68 65 20 63 6f 6e 73 74 69 74 75 65 6e 74 20  the constituent 
2da30 53 45 4c 45 43 54 73 20 6d 75 73 74 20 72 65 74  SELECTs must ret
2da40 75 72 6e 20 74 68 65 20 73 61 6d 65 20 0a 6e 75  urn the same .nu
2da50 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 63  mber of result c
2da60 6f 6c 75 6d 6e 73 2e 20 5e 41 73 20 74 68 65 20  olumns. ^As the 
2da70 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 61 20  components of a 
2da80 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20  compound SELECT 
2da90 6d 75 73 74 0a 62 65 20 73 69 6d 70 6c 65 20 53  must.be simple S
2daa0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
2dab0 2c 20 74 68 65 79 20 6d 61 79 20 6e 6f 74 20 63  , they may not c
2dac0 6f 6e 74 61 69 6e 20 5b 4f 52 44 45 52 20 42 59  ontain [ORDER BY
2dad0 5d 20 6f 72 20 5b 4c 49 4d 49 54 5d 20 63 6c 61  ] or [LIMIT] cla
2dae0 75 73 65 73 2e 0a 5e 5b 4f 52 44 45 52 20 42 59  uses..^[ORDER BY
2daf0 5d 20 61 6e 64 20 5b 4c 49 4d 49 54 5d 20 63 6c  ] and [LIMIT] cl
2db00 61 75 73 65 73 20 6d 61 79 20 6f 6e 6c 79 20 6f  auses may only o
2db10 63 63 75 72 20 61 74 20 74 68 65 20 65 6e 64 20  ccur at the end 
2db20 6f 66 20 74 68 65 20 65 6e 74 69 72 65 20 63 6f  of the entire co
2db30 6d 70 6f 75 6e 64 0a 53 45 4c 45 43 54 2c 20 61  mpound.SELECT, a
2db40 6e 64 20 74 68 65 6e 20 6f 6e 6c 79 20 69 66 20  nd then only if 
2db50 74 68 65 20 66 69 6e 61 6c 20 65 6c 65 6d 65 6e  the final elemen
2db60 74 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e  t of the compoun
2db70 64 20 69 73 20 6e 6f 74 20 61 20 5b 56 41 4c 55  d is not a [VALU
2db80 45 53 5d 20 63 6c 61 75 73 65 2e 0a 0a 3c 70 3e  ES] clause...<p>
2db90 5e 41 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  ^A compound SELE
2dba0 43 54 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  CT created using
2dbb0 20 55 4e 49 4f 4e 20 41 4c 4c 20 6f 70 65 72 61   UNION ALL opera
2dbc0 74 6f 72 20 72 65 74 75 72 6e 73 20 61 6c 6c 20  tor returns all 
2dbd0 74 68 65 20 72 6f 77 73 0a 66 72 6f 6d 20 74 68  the rows.from th
2dbe0 65 20 53 45 4c 45 43 54 20 74 6f 20 74 68 65 20  e SELECT to the 
2dbf0 6c 65 66 74 20 6f 66 20 74 68 65 20 55 4e 49 4f  left of the UNIO
2dc00 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f 72 2c 20  N ALL operator, 
2dc10 61 6e 64 20 61 6c 6c 20 74 68 65 20 72 6f 77 73  and all the rows
2dc20 0a 66 72 6f 6d 20 74 68 65 20 53 45 4c 45 43 54  .from the SELECT
2dc30 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66   to the right of
2dc40 20 69 74 2e 20 5e 54 68 65 20 55 4e 49 4f 4e 20   it. ^The UNION 
2dc50 6f 70 65 72 61 74 6f 72 20 77 6f 72 6b 73 20 74  operator works t
2dc60 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 0a 55  he same way as.U
2dc70 4e 49 4f 4e 20 41 4c 4c 2c 20 65 78 63 65 70 74  NION ALL, except
2dc80 20 74 68 61 74 20 64 75 70 6c 69 63 61 74 65 20   that duplicate 
2dc90 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64  rows are removed
2dca0 20 66 72 6f 6d 20 74 68 65 20 66 69 6e 61 6c 20   from the final 
2dcb0 72 65 73 75 6c 74 20 73 65 74 2e 0a 5e 54 68 65  result set..^The
2dcc0 20 49 4e 54 45 52 53 45 43 54 20 6f 70 65 72 61   INTERSECT opera
2dcd0 74 6f 72 20 72 65 74 75 72 6e 73 20 74 68 65 20  tor returns the 
2dce0 69 6e 74 65 72 73 65 63 74 69 6f 6e 20 6f 66 20  intersection of 
2dcf0 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
2dd00 68 65 20 6c 65 66 74 20 61 6e 64 0a 72 69 67 68  he left and.righ
2dd10 74 20 53 45 4c 45 43 54 73 2e 20 20 5e 54 68 65  t SELECTs.  ^The
2dd20 20 45 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72   EXCEPT operator
2dd30 20 72 65 74 75 72 6e 73 20 74 68 65 20 73 75 62   returns the sub
2dd40 73 65 74 20 6f 66 20 72 6f 77 73 20 72 65 74 75  set of rows retu
2dd50 72 6e 65 64 20 62 79 20 74 68 65 0a 6c 65 66 74  rned by the.left
2dd60 20 53 45 4c 45 43 54 20 74 68 61 74 20 61 72 65   SELECT that are
2dd70 20 6e 6f 74 20 61 6c 73 6f 20 72 65 74 75 72 6e   not also return
2dd80 65 64 20 62 79 20 74 68 65 20 72 69 67 68 74 2d  ed by the right-
2dd90 68 61 6e 64 20 53 45 4c 45 43 54 2e 20 5e 44 75  hand SELECT. ^Du
2dda0 70 6c 69 63 61 74 65 0a 72 6f 77 73 20 61 72 65  plicate.rows are
2ddb0 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68   removed from th
2ddc0 65 20 72 65 73 75 6c 74 73 20 6f 66 20 49 4e 54  e results of INT
2ddd0 45 52 53 45 43 54 20 61 6e 64 20 45 58 43 45 50  ERSECT and EXCEP
2dde0 54 20 6f 70 65 72 61 74 6f 72 73 20 62 65 66 6f  T operators befo
2ddf0 72 65 20 74 68 65 0a 72 65 73 75 6c 74 20 73 65  re the.result se
2de00 74 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a  t is returned...
2de10 3c 70 3e 5e 46 6f 72 20 74 68 65 20 70 75 72 70  <p>^For the purp
2de20 6f 73 65 73 20 6f 66 20 64 65 74 65 72 6d 69 6e  oses of determin
2de30 69 6e 67 20 64 75 70 6c 69 63 61 74 65 20 72 6f  ing duplicate ro
2de40 77 73 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c  ws for the resul
2de50 74 73 20 6f 66 20 63 6f 6d 70 6f 75 6e 64 0a 53  ts of compound.S
2de60 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 73 2c  ELECT operators,
2de70 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65   NULL values are
2de80 20 63 6f 6e 73 69 64 65 72 65 64 20 65 71 75 61   considered equa
2de90 6c 20 74 6f 20 6f 74 68 65 72 20 4e 55 4c 4c 20  l to other NULL 
2dea0 76 61 6c 75 65 73 20 61 6e 64 0a 64 69 73 74 69  values and.disti
2deb0 6e 63 74 20 66 72 6f 6d 20 61 6c 6c 20 6e 6f 6e  nct from all non
2dec0 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 20 5e 54  -NULL values. ^T
2ded0 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
2dee0 75 65 6e 63 65 20 75 73 65 64 20 74 6f 20 63 6f  uence used to co
2def0 6d 70 61 72 65 20 0a 74 77 6f 20 74 65 78 74 20  mpare .two text 
2df00 76 61 6c 75 65 73 20 69 73 20 64 65 74 65 72 6d  values is determ
2df10 69 6e 65 64 20 61 73 20 69 66 20 74 68 65 20 63  ined as if the c
2df20 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65  olumns of the le
2df30 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e  ft and right-han
2df40 64 0a 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  d.SELECT stateme
2df50 6e 74 73 20 77 65 72 65 20 74 68 65 20 6c 65 66  nts were the lef
2df60 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64  t and right-hand
2df70 20 6f 70 65 72 61 6e 64 73 20 6f 66 20 74 68 65   operands of the
2df80 20 65 71 75 61 6c 73 20 28 3d 29 0a 6f 70 65 72   equals (=).oper
2df90 61 74 6f 72 2c 20 65 78 63 65 70 74 20 74 68 61  ator, except tha
2dfa0 74 20 67 72 65 61 74 65 72 20 70 72 65 63 65 64  t greater preced
2dfb0 65 6e 63 65 20 69 73 20 6e 6f 74 20 61 73 73 69  ence is not assi
2dfc0 67 6e 65 64 20 74 6f 20 61 20 63 6f 6c 6c 61 74  gned to a collat
2dfd0 69 6f 6e 20 0a 73 65 71 75 65 6e 63 65 20 73 70  ion .sequence sp
2dfe0 65 63 69 66 69 65 64 20 77 69 74 68 20 74 68 65  ecified with the
2dff0 20 70 6f 73 74 66 69 78 20 43 4f 4c 4c 41 54 45   postfix COLLATE
2e000 20 6f 70 65 72 61 74 6f 72 2e 20 5e 4e 6f 20 61   operator. ^No a
2e010 66 66 69 6e 69 74 79 0a 74 72 61 6e 73 66 6f 72  ffinity.transfor
2e020 6d 61 74 69 6f 6e 73 20 61 72 65 20 61 70 70 6c  mations are appl
2e030 69 65 64 20 74 6f 20 61 6e 79 20 76 61 6c 75 65  ied to any value
2e040 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67  s when comparing
2e050 20 72 6f 77 73 20 61 73 20 70 61 72 74 20 6f 66   rows as part of
2e060 20 61 0a 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45   a.compound SELE
2e070 43 54 2e 20 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20  CT. ..<p>^(When 
2e080 74 68 72 65 65 20 6f 72 20 6d 6f 72 65 20 73 69  three or more si
2e090 6d 70 6c 65 20 53 45 4c 45 43 54 73 20 61 72 65  mple SELECTs are
2e0a0 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e 74 6f 20   connected into 
2e0b0 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
2e0c0 54 2c 0a 74 68 65 79 20 67 72 6f 75 70 20 66 72  T,.they group fr
2e0d0 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
2e0e0 2e 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  . In other words
2e0f0 2c 20 69 66 20 22 41 22 2c 20 22 42 22 20 61 6e  , if "A", "B" an
2e100 64 20 22 43 22 20 61 72 65 20 61 6c 6c 0a 73 69  d "C" are all.si
2e110 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
2e120 65 6d 65 6e 74 73 2c 20 28 41 20 6f 70 20 42 20  ements, (A op B 
2e130 6f 70 20 43 29 20 69 73 20 70 72 6f 63 65 73 73  op C) is process
2e140 65 64 20 61 73 20 28 28 41 20 6f 70 20 42 29 20  ed as ((A op B) 
2e150 6f 70 20 43 29 2e 29 5e 0a 0a 3c 2f 70 3e 0a 0a  op C).)^..</p>..
2e160 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
2e170 20 6f 72 64 65 72 62 79 20 7b 6f 72 64 65 72 20   orderby {order 
2e180 62 79 7d 20 7b 4f 52 44 45 52 20 42 59 7d 3c 2f  by} {ORDER BY}</
2e190 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 4f 52 44  tcl>.<h3>The ORD
2e1a0 45 52 20 42 59 20 63 6c 61 75 73 65 3c 2f 68 33  ER BY clause</h3
2e1b0 3e 0a 0a 3c 70 3e 49 66 20 61 20 53 45 4c 45 43  >..<p>If a SELEC
2e1c0 54 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  T statement that
2e1d0 20 72 65 74 75 72 6e 73 20 6d 6f 72 65 20 74 68   returns more th
2e1e0 61 6e 20 6f 6e 65 20 72 6f 77 20 64 6f 65 73 20  an one row does 
2e1f0 6e 6f 74 20 68 61 76 65 20 61 6e 0a 4f 52 44 45  not have an.ORDE
2e200 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65  R BY clause, the
2e210 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20   order in which 
2e220 74 68 65 20 72 6f 77 73 20 61 72 65 20 72 65 74  the rows are ret
2e230 75 72 6e 65 64 20 69 73 20 75 6e 64 65 66 69 6e  urned is undefin
2e240 65 64 2e 0a 4f 72 2c 20 69 66 20 61 20 53 45 4c  ed..Or, if a SEL
2e250 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 64 6f  ECT statement do
2e260 65 73 20 68 61 76 65 20 61 6e 20 4f 52 44 45 52  es have an ORDER
2e270 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e   BY clause, then
2e280 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 65 78 70   the list of.exp
2e290 72 65 73 73 69 6f 6e 73 20 61 74 74 61 63 68 65  ressions attache
2e2a0 64 20 74 6f 20 74 68 65 20 4f 52 44 45 52 20 42  d to the ORDER B
2e2b0 59 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  Y determine the 
2e2c0 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72  order in which r
2e2d0 6f 77 73 0a 61 72 65 20 72 65 74 75 72 6e 65 64  ows.are returned
2e2e0 20 74 6f 20 74 68 65 20 75 73 65 72 2e 0a 0a 3c   to the user...<
2e2f0 70 3e 0a 5e 49 6e 20 61 20 5b 63 6f 6d 70 6f 75  p>.^In a [compou
2e300 6e 64 20 53 45 4c 45 43 54 5d 20 73 74 61 74 65  nd SELECT] state
2e310 6d 65 6e 74 2c 20 6f 6e 6c 79 20 74 68 65 20 6c  ment, only the l
2e320 61 73 74 20 6f 72 20 72 69 67 68 74 2d 6d 6f 73  ast or right-mos
2e330 74 20 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  t [simple SELECT
2e340 5d 0a 6d 61 79 20 68 61 76 65 20 61 6e 20 4f 52  ].may have an OR
2e350 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 5e  DER BY clause. ^
2e360 54 68 61 74 20 4f 52 44 45 52 20 42 59 20 63 6c  That ORDER BY cl
2e370 61 75 73 65 20 77 69 6c 6c 20 61 70 70 6c 79 20  ause will apply 
2e380 61 63 72 6f 73 73 20 61 6c 6c 20 65 6c 65 6d 65  across all eleme
2e390 6e 74 73 20 6f 66 0a 74 68 65 20 63 6f 6d 70 6f  nts of.the compo
2e3a0 75 6e 64 2e 20 5e 49 66 20 74 68 65 20 72 69 67  und. ^If the rig
2e3b0 68 74 2d 6d 6f 73 74 20 65 6c 65 6d 65 6e 74 20  ht-most element 
2e3c0 6f 66 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53  of a [compound S
2e3d0 45 4c 45 43 54 5d 20 69 73 20 61 20 5b 56 41 4c  ELECT] is a [VAL
2e3e0 55 45 53 5d 20 63 6c 61 75 73 65 2c 0a 74 68 65  UES] clause,.the
2e3f0 6e 20 6e 6f 20 4f 52 44 45 52 20 42 59 20 63 6c  n no ORDER BY cl
2e400 61 75 73 65 20 69 73 20 61 6c 6c 6f 77 65 64 20  ause is allowed 
2e410 6f 6e 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e  on that statemen
2e420 74 2e 0a 0a 0a 3c 70 3e 5e 52 6f 77 73 20 61 72  t....<p>^Rows ar
2e430 65 20 66 69 72 73 74 20 73 6f 72 74 65 64 20 62  e first sorted b
2e440 61 73 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75  ased on the resu
2e450 6c 74 73 20 6f 66 0a 65 76 61 6c 75 61 74 69 6e  lts of.evaluatin
2e460 67 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  g the left-most 
2e470 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
2e480 65 20 4f 52 44 45 52 20 42 59 20 6c 69 73 74 2c  e ORDER BY list,
2e490 20 74 68 65 6e 20 74 69 65 73 20 61 72 65 20 62   then ties are b
2e4a0 72 6f 6b 65 6e 0a 62 79 20 65 76 61 6c 75 61 74  roken.by evaluat
2e4b0 69 6e 67 20 74 68 65 20 73 65 63 6f 6e 64 20 6c  ing the second l
2e4c0 65 66 74 2d 6d 6f 73 74 20 65 78 70 72 65 73 73  eft-most express
2e4d0 69 6f 6e 20 61 6e 64 20 73 6f 20 6f 6e 2e 20 54  ion and so on. T
2e4e0 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63  he order in whic
2e4f0 68 0a 74 77 6f 20 72 6f 77 73 20 66 6f 72 20 77  h.two rows for w
2e500 68 69 63 68 20 61 6c 6c 20 4f 52 44 45 52 20 42  hich all ORDER B
2e510 59 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76  Y expressions ev
2e520 61 6c 75 61 74 65 20 74 6f 20 65 71 75 61 6c 20  aluate to equal 
2e530 76 61 6c 75 65 73 20 61 72 65 0a 72 65 74 75 72  values are.retur
2e540 6e 65 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ned is undefined
2e550 2e 20 5e 45 61 63 68 20 4f 52 44 45 52 20 42 59  . ^Each ORDER BY
2e560 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
2e570 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f  be optionally fo
2e580 6c 6c 6f 77 65 64 0a 62 79 20 6f 6e 65 20 6f 66  llowed.by one of
2e590 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 41 53   the keywords AS
2e5a0 43 20 28 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65  C (smaller value
2e5b0 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 66  s are returned f
2e5c0 69 72 73 74 29 20 6f 72 20 44 45 53 43 20 28 6c  irst) or DESC (l
2e5d0 61 72 67 65 72 0a 76 61 6c 75 65 73 20 61 72 65  arger.values are
2e5e0 20 72 65 74 75 72 6e 65 64 20 66 69 72 73 74 29   returned first)
2e5f0 2e 20 5e 49 66 20 6e 65 69 74 68 65 72 20 41 53  . ^If neither AS
2e600 43 20 6f 72 20 44 45 53 43 20 61 72 65 20 73 70  C or DESC are sp
2e610 65 63 69 66 69 65 64 2c 20 72 6f 77 73 0a 61 72  ecified, rows.ar
2e620 65 20 73 6f 72 74 65 64 20 69 6e 20 61 73 63 65  e sorted in asce
2e630 6e 64 69 6e 67 20 28 73 6d 61 6c 6c 65 72 20 76  nding (smaller v
2e640 61 6c 75 65 73 20 66 69 72 73 74 29 20 6f 72 64  alues first) ord
2e650 65 72 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 0a  er by default...
2e660 3c 70 3e 45 61 63 68 20 4f 52 44 45 52 20 42 59  <p>Each ORDER BY
2e670 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 70   expression is p
2e680 72 6f 63 65 73 73 65 64 20 61 73 20 66 6f 6c 6c  rocessed as foll
2e690 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c  ows:</p>..<ol>.<
2e6a0 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52  li><p>^If the OR
2e6b0 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
2e6c0 6e 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20  n is a constant 
2e6d0 69 6e 74 65 67 65 72 20 4b 20 74 68 65 6e 20 74  integer K then t
2e6e0 68 65 0a 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he.expression is
2e6f0 20 63 6f 6e 73 69 64 65 72 65 64 20 61 6e 20 61   considered an a
2e700 6c 69 61 73 20 66 6f 72 20 74 68 65 20 4b 2d 74  lias for the K-t
2e710 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  h column of the 
2e720 72 65 73 75 6c 74 20 73 65 74 0a 28 63 6f 6c 75  result set.(colu
2e730 6d 6e 73 20 61 72 65 20 6e 75 6d 62 65 72 65 64  mns are numbered
2e740 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
2e750 67 68 74 20 73 74 61 72 74 69 6e 67 20 77 69 74  ght starting wit
2e760 68 20 31 29 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49  h 1)...<li><p>^I
2e770 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65  f the ORDER BY e
2e780 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
2e790 69 64 65 6e 74 69 66 69 65 72 20 74 68 61 74 20  identifier that 
2e7a0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 0a 74  corresponds to.t
2e7b0 68 65 20 61 6c 69 61 73 20 6f 66 20 6f 6e 65 20  he alias of one 
2e7c0 6f 66 20 74 68 65 20 6f 75 74 70 75 74 20 63 6f  of the output co
2e7d0 6c 75 6d 6e 73 2c 20 74 68 65 6e 20 74 68 65 20  lumns, then the 
2e7e0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f  expression is co
2e7f0 6e 73 69 64 65 72 65 64 0a 61 6e 20 61 6c 69 61  nsidered.an alia
2e800 73 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d  s for that colum
2e810 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65  n...<li><p>^Othe
2e820 72 77 69 73 65 2c 20 69 66 20 74 68 65 20 4f 52  rwise, if the OR
2e830 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
2e840 6e 20 69 73 20 61 6e 79 20 6f 74 68 65 72 20 65  n is any other e
2e850 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 0a 69  xpression, it .i
2e860 73 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20  s evaluated and 
2e870 74 68 65 20 72 65 74 75 72 6e 65 64 20 76 61 6c  the returned val
2e880 75 65 20 75 73 65 64 20 74 6f 20 6f 72 64 65 72  ue used to order
2e890 20 74 68 65 20 6f 75 74 70 75 74 20 72 6f 77 73   the output rows
2e8a0 2e 20 5e 49 66 0a 74 68 65 20 53 45 4c 45 43 54  . ^If.the SELECT
2e8b0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 20   statement is a 
2e8c0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 2c 20 74  simple SELECT, t
2e8d0 68 65 6e 20 61 6e 20 4f 52 44 45 52 20 42 59 20  hen an ORDER BY 
2e8e0 6d 61 79 20 63 6f 6e 74 61 69 6e 20 61 6e 79 0a  may contain any.
2e8f0 61 72 62 69 74 72 61 72 79 20 65 78 70 72 65 73  arbitrary expres
2e900 73 69 6f 6e 73 2e 20 5e 48 6f 77 65 76 65 72 2c  sions. ^However,
2e910 20 69 66 20 74 68 65 20 53 45 4c 45 43 54 20 69   if the SELECT i
2e920 73 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c  s a compound SEL
2e930 45 43 54 2c 20 74 68 65 6e 0a 4f 52 44 45 52 20  ECT, then.ORDER 
2e940 42 59 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74  BY expressions t
2e950 68 61 74 20 61 72 65 20 6e 6f 74 20 61 6c 69 61  hat are not alia
2e960 73 65 73 20 74 6f 20 6f 75 74 70 75 74 20 63 6f  ses to output co
2e970 6c 75 6d 6e 73 20 6d 75 73 74 20 62 65 20 65 78  lumns must be ex
2e980 61 63 74 6c 79 0a 74 68 65 20 73 61 6d 65 20 61  actly.the same a
2e990 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  s an expression 
2e9a0 75 73 65 64 20 61 73 20 61 6e 20 6f 75 74 70 75  used as an outpu
2e9b0 74 20 63 6f 6c 75 6d 6e 2e 0a 3c 2f 6f 6c 3e 0a  t column..</ol>.
2e9c0 0a 3c 70 3e 5e 46 6f 72 20 74 68 65 20 70 75 72  .<p>^For the pur
2e9d0 70 6f 73 65 73 20 6f 66 20 73 6f 72 74 69 6e 67  poses of sorting
2e9e0 20 72 6f 77 73 2c 20 76 61 6c 75 65 73 20 61 72   rows, values ar
2e9f0 65 20 63 6f 6d 70 61 72 65 64 20 69 6e 20 74 68  e compared in th
2ea00 65 20 73 61 6d 65 20 77 61 79 0a 61 73 20 66 6f  e same way.as fo
2ea10 72 20 5b 63 6f 6d 70 61 72 69 73 6f 6e 20 65 78  r [comparison ex
2ea20 70 72 65 73 73 69 6f 6e 73 5d 2e 20 54 68 65 20  pressions]. The 
2ea30 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
2ea40 63 65 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61  ce used to compa
2ea50 72 65 0a 74 77 6f 20 74 65 78 74 20 76 61 6c 75  re.two text valu
2ea60 65 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  es is determined
2ea70 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f   as follows:..<o
2ea80 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20  l>.  <li><p>^If 
2ea90 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70  the ORDER BY exp
2eaa0 72 65 73 73 69 6f 6e 20 69 73 20 61 73 73 69 67  ression is assig
2eab0 6e 65 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20  ned a collation 
2eac0 73 65 71 75 65 6e 63 65 20 75 73 69 6e 67 0a 20  sequence using. 
2ead0 20 74 68 65 20 70 6f 73 74 66 69 78 20 5b 43 4f   the postfix [CO
2eae0 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c  LLATE operator],
2eaf0 20 74 68 65 6e 20 74 68 65 20 73 70 65 63 69 66   then the specif
2eb00 69 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ied collation se
2eb10 71 75 65 6e 63 65 20 69 73 0a 20 20 75 73 65 64  quence is.  used
2eb20 2e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65  ..  <li><p>^Othe
2eb30 72 77 69 73 65 2c 20 69 66 20 74 68 65 20 4f 52  rwise, if the OR
2eb40 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
2eb50 6e 20 69 73 20 61 6e 20 61 6c 69 61 73 20 74 6f  n is an alias to
2eb60 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 0a 20   an expression. 
2eb70 20 74 68 61 74 20 68 61 73 20 62 65 65 6e 20 61   that has been a
2eb80 73 73 69 67 6e 65 64 20 61 20 63 6f 6c 6c 61 74  ssigned a collat
2eb90 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73 69  ion sequence usi
2eba0 6e 67 20 74 68 65 20 70 6f 73 74 66 69 78 20 0a  ng the postfix .
2ebb0 20 20 5b 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61    [COLLATE opera
2ebc0 74 6f 72 5d 2c 20 74 68 65 6e 20 74 68 65 20 63  tor], then the c
2ebd0 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
2ebe0 65 20 61 73 73 69 67 6e 65 64 20 74 6f 20 74 68  e assigned to th
2ebf0 65 20 61 6c 69 61 73 65 64 0a 20 20 65 78 70 72  e aliased.  expr
2ec00 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a  ession is used..
2ec10 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77    <li><p>^Otherw
2ec20 69 73 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45  ise, if the ORDE
2ec30 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
2ec40 69 73 20 61 20 63 6f 6c 75 6d 6e 20 6f 72 20 61  is a column or a
2ec50 6e 20 61 6c 69 61 73 20 6f 66 0a 20 20 61 6e 20  n alias of.  an 
2ec60 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
2ec70 69 73 20 61 20 63 6f 6c 75 6d 6e 2c 20 74 68 65  is a column, the
2ec80 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f  n the default co
2ec90 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
2eca0 20 66 6f 72 0a 20 20 74 68 65 20 63 6f 6c 75 6d   for.  the colum
2ecb0 6e 20 69 73 20 75 73 65 64 2e 20 0a 20 20 3c 6c  n is used. .  <l
2ecc0 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c  i><p>^Otherwise,
2ecd0 20 74 68 65 20 5b 42 49 4e 41 52 59 5d 20 63 6f   the [BINARY] co
2ece0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
2ecf0 20 69 73 20 75 73 65 64 2e 0a 3c 2f 6f 6c 3e 0a   is used..</ol>.
2ed00 0a 3c 70 3e 49 6e 20 61 20 5b 63 6f 6d 70 6f 75  .<p>In a [compou
2ed10 6e 64 20 53 45 4c 45 43 54 5d 20 73 74 61 74 65  nd SELECT] state
2ed20 6d 65 6e 74 2c 20 61 6c 6c 20 4f 52 44 45 52 20  ment, all ORDER 
2ed30 42 59 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61  BY expressions a
2ed40 72 65 20 68 61 6e 64 6c 65 64 0a 61 73 20 61 6c  re handled.as al
2ed50 69 61 73 65 73 20 66 6f 72 20 6f 6e 65 20 6f 66  iases for one of
2ed60 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75   the result colu
2ed70 6d 6e 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f  mns of the compo
2ed80 75 6e 64 2e 0a 5e 28 49 66 20 61 6e 20 4f 52 44  und..^(If an ORD
2ed90 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
2eda0 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67   is not an integ
2edb0 65 72 20 61 6c 69 61 73 2c 20 74 68 65 6e 20 53  er alias, then S
2edc0 51 4c 69 74 65 20 73 65 61 72 63 68 65 73 0a 74  QLite searches.t
2edd0 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 53 45 4c  he left-most SEL
2ede0 45 43 54 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f  ECT in the compo
2edf0 75 6e 64 20 66 6f 72 20 61 20 72 65 73 75 6c 74  und for a result
2ee00 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 6d 61 74   column that mat
2ee10 63 68 65 73 20 65 69 74 68 65 72 0a 74 68 65 20  ches either.the 
2ee20 73 65 63 6f 6e 64 20 6f 72 20 74 68 69 72 64 20  second or third 
2ee30 72 75 6c 65 73 20 61 62 6f 76 65 2e 20 49 66 20  rules above. If 
2ee40 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
2ee50 2c 20 74 68 65 20 73 65 61 72 63 68 20 73 74 6f  , the search sto
2ee60 70 73 20 61 6e 64 0a 74 68 65 20 65 78 70 72 65  ps and.the expre
2ee70 73 73 69 6f 6e 20 69 73 20 68 61 6e 64 6c 65 64  ssion is handled
2ee80 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72   as an alias for
2ee90 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75   the result colu
2eea0 6d 6e 20 74 68 61 74 20 69 74 20 68 61 73 20 62  mn that it has b
2eeb0 65 65 6e 0a 6d 61 74 63 68 65 64 20 61 67 61 69  een.matched agai
2eec0 6e 73 74 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  nst. Otherwise, 
2eed0 74 68 65 20 6e 65 78 74 20 53 45 4c 45 43 54 20  the next SELECT 
2eee0 74 6f 20 74 68 65 20 72 69 67 68 74 20 69 73 20  to the right is 
2eef0 74 72 69 65 64 2c 20 61 6e 64 20 73 6f 20 6f 6e  tried, and so on
2ef00 2e 29 5e 0a 5e 49 66 20 6e 6f 20 6d 61 74 63 68  .)^.^If no match
2ef10 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 20 63  ing expression c
2ef20 61 6e 20 62 65 20 66 6f 75 6e 64 20 69 6e 20 74  an be found in t
2ef30 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
2ef40 73 20 6f 66 20 61 6e 79 0a 63 6f 6e 73 74 69 74  s of any.constit
2ef50 75 65 6e 74 20 53 45 4c 45 43 54 2c 20 69 74 20  uent SELECT, it 
2ef60 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e 45 61  is an error. ^Ea
2ef70 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20 4f  ch term of the O
2ef80 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
2ef90 73 0a 70 72 6f 63 65 73 73 65 64 20 73 65 70 61  s.processed sepa
2efa0 72 61 74 65 6c 79 20 61 6e 64 20 6d 61 79 20 62  rately and may b
2efb0 65 20 6d 61 74 63 68 65 64 20 61 67 61 69 6e 73  e matched agains
2efc0 74 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73  t result columns
2efd0 20 66 72 6f 6d 20 64 69 66 66 65 72 65 6e 74 0a   from different.
2efe0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2eff0 73 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e  s in the compoun
2f000 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  d.</p>..<tcl>hd_
2f010 66 72 61 67 6d 65 6e 74 20 6c 69 6d 69 74 6f 66  fragment limitof
2f020 66 73 65 74 20 7b 4c 49 4d 49 54 7d 20 7b 4f 46  fset {LIMIT} {OF
2f030 46 53 45 54 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  FSET}</tcl>.<h3>
2f040 54 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  The LIMIT clause
2f050 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c  </h3>..<p>^The L
2f060 49 4d 49 54 20 63 6c 61 75 73 65 20 69 73 20 75  IMIT clause is u
2f070 73 65 64 20 74 6f 20 70 6c 61 63 65 20 61 6e 20  sed to place an 
2f080 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74  upper bound on t
2f090 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
2f0a0 73 0a 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  s.returned by th
2f0b0 65 20 65 6e 74 69 72 65 20 53 45 4c 45 43 54 20  e entire SELECT 
2f0c0 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e  statement...<p>^
2f0d0 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53  In a [compound S
2f0e0 45 4c 45 43 54 5d 2c 20 6f 6e 6c 79 20 74 68 65  ELECT], only the
2f0f0 0a 6c 61 73 74 20 6f 72 20 72 69 67 68 74 2d 6d  .last or right-m
2f100 6f 73 74 20 5b 73 69 6d 70 6c 65 20 53 45 4c 45  ost [simple SELE
2f110 43 54 5d 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20  CT] may contain 
2f120 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e 20  a LIMIT clause. 
2f130 20 0a 5e 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e   .^In a [compoun
2f140 64 20 53 45 4c 45 43 54 5d 2c 20 0a 74 68 65 20  d SELECT], .the 
2f150 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61 70 70  LIMIT clause app
2f160 6c 69 65 73 20 74 6f 20 74 68 65 20 65 6e 74 69  lies to the enti
2f170 72 65 20 63 6f 6d 70 6f 75 6e 64 2c 20 6e 6f 74  re compound, not
2f180 20 6a 75 73 74 20 74 68 65 20 66 69 6e 61 6c 20   just the final 
2f190 53 45 4c 45 43 54 2e 0a 5e 49 66 20 74 68 65 20  SELECT..^If the 
2f1a0 72 69 67 68 74 2d 6d 6f 73 74 20 5b 73 69 6d 70  right-most [simp
2f1b0 6c 65 20 53 45 4c 45 43 54 5d 20 69 73 20 61 20  le SELECT] is a 
2f1c0 5b 56 41 4c 55 45 53 20 63 6c 61 75 73 65 5d 20  [VALUES clause] 
2f1d0 74 68 65 6e 20 6e 6f 20 4c 49 4d 49 54 20 63 6c  then no LIMIT cl
2f1e0 61 75 73 65 0a 69 73 20 61 6c 6c 6f 77 65 64 2e  ause.is allowed.
2f1f0 0a 0a 3c 70 3e 5e 41 6e 79 20 73 63 61 6c 61 72  ..<p>^Any scalar
2f200 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
2f210 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 0a  be used in the .
2f220 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 73 6f  LIMIT clause, so
2f230 20 6c 6f 6e 67 20 61 73 20 69 74 20 65 76 61 6c   long as it eval
2f240 75 61 74 65 73 20 74 6f 20 61 6e 20 69 6e 74 65  uates to an inte
2f250 67 65 72 20 6f 72 20 61 20 76 61 6c 75 65 20 74  ger or a value t
2f260 68 61 74 20 63 61 6e 20 62 65 0a 6c 6f 73 73 6c  hat can be.lossl
2f270 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20  essly converted 
2f280 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 5e  to an integer. ^
2f290 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
2f2a0 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61  n evaluates to a
2f2b0 20 4e 55 4c 4c 20 0a 76 61 6c 75 65 20 6f 72 20   NULL .value or 
2f2c0 61 6e 79 20 6f 74 68 65 72 20 76 61 6c 75 65 20  any other value 
2f2d0 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c  that cannot be l
2f2e0 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72  osslessly conver
2f2f0 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  ted to an intege
2f300 72 2c 20 61 6e 0a 65 72 72 6f 72 20 69 73 20 72  r, an.error is r
2f310 65 74 75 72 6e 65 64 2e 20 5e 49 66 20 74 68 65  eturned. ^If the
2f320 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f   LIMIT expressio
2f330 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61  n evaluates to a
2f340 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 2c   negative value,
2f350 0a 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6e  .then there is n
2f360 6f 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e  o upper bound on
2f370 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
2f380 6f 77 73 20 72 65 74 75 72 6e 65 64 2e 20 5e 4f  ows returned. ^O
2f390 74 68 65 72 77 69 73 65 2c 20 74 68 65 0a 53 45  therwise, the.SE
2f3a0 4c 45 43 54 20 72 65 74 75 72 6e 73 20 74 68 65  LECT returns the
2f3b0 20 66 69 72 73 74 20 4e 20 72 6f 77 73 20 6f 66   first N rows of
2f3c0 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 20   its result set 
2f3d0 6f 6e 6c 79 2c 20 77 68 65 72 65 20 4e 20 69 73  only, where N is
2f3e0 20 74 68 65 20 76 61 6c 75 65 0a 74 68 61 74 20   the value.that 
2f3f0 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73  the LIMIT expres
2f400 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74  sion evaluates t
2f410 6f 2e 20 5e 4f 72 2c 20 69 66 20 74 68 65 20 53  o. ^Or, if the S
2f420 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
2f430 77 6f 75 6c 64 0a 72 65 74 75 72 6e 20 6c 65 73  would.return les
2f440 73 20 74 68 61 6e 20 4e 20 72 6f 77 73 20 77 69  s than N rows wi
2f450 74 68 6f 75 74 20 61 20 4c 49 4d 49 54 20 63 6c  thout a LIMIT cl
2f460 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 65  ause, then the e
2f470 6e 74 69 72 65 20 72 65 73 75 6c 74 20 73 65 74  ntire result set
2f480 20 69 73 0a 72 65 74 75 72 6e 65 64 2e 20 0a 0a   is.returned. ..
2f490 3c 70 3e 5e 54 68 65 20 65 78 70 72 65 73 73 69  <p>^The expressi
2f4a0 6f 6e 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  on attached to t
2f4b0 68 65 20 6f 70 74 69 6f 6e 61 6c 20 4f 46 46 53  he optional OFFS
2f4c0 45 54 20 63 6c 61 75 73 65 20 74 68 61 74 20 6d  ET clause that m
2f4d0 61 79 20 66 6f 6c 6c 6f 77 20 61 0a 4c 49 4d 49  ay follow a.LIMI
2f4e0 54 20 63 6c 61 75 73 65 20 6d 75 73 74 20 61 6c  T clause must al
2f4f0 73 6f 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61  so evaluate to a
2f500 6e 20 69 6e 74 65 67 65 72 2c 20 6f 72 20 61 20  n integer, or a 
2f510 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62  value that can b
2f520 65 0a 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e  e.losslessly con
2f530 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74  verted to an int
2f540 65 67 65 72 2e 20 5e 49 66 20 61 6e 20 65 78 70  eger. ^If an exp
2f550 72 65 73 73 69 6f 6e 20 68 61 73 20 61 6e 20 4f  ression has an O
2f560 46 46 53 45 54 20 63 6c 61 75 73 65 2c 0a 74 68  FFSET clause,.th
2f570 65 6e 20 74 68 65 20 66 69 72 73 74 20 4d 20 72  en the first M r
2f580 6f 77 73 20 61 72 65 20 6f 6d 69 74 74 65 64 20  ows are omitted 
2f590 66 72 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 20  from the result 
2f5a0 73 65 74 20 72 65 74 75 72 6e 65 64 20 62 79 20  set returned by 
2f5b0 74 68 65 20 53 45 4c 45 43 54 0a 73 74 61 74 65  the SELECT.state
2f5c0 6d 65 6e 74 20 61 6e 64 20 74 68 65 20 6e 65 78  ment and the nex
2f5d0 74 20 4e 20 72 6f 77 73 20 61 72 65 20 72 65 74  t N rows are ret
2f5e0 75 72 6e 65 64 2c 20 77 68 65 72 65 20 4d 20 61  urned, where M a
2f5f0 6e 64 20 4e 20 61 72 65 20 74 68 65 20 76 61 6c  nd N are the val
2f600 75 65 73 20 74 68 61 74 0a 74 68 65 20 4f 46 46  ues that.the OFF
2f610 53 45 54 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c  SET and LIMIT cl
2f620 61 75 73 65 73 20 65 76 61 6c 75 61 74 65 20 74  auses evaluate t
2f630 6f 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  o, respectively.
2f640 20 5e 4f 72 2c 20 69 66 20 74 68 65 20 53 45 4c   ^Or, if the SEL
2f650 45 43 54 0a 77 6f 75 6c 64 20 72 65 74 75 72 6e  ECT.would return
2f660 20 6c 65 73 73 20 74 68 61 6e 20 4d 2b 4e 20 72   less than M+N r
2f670 6f 77 73 20 69 66 20 69 74 20 64 69 64 20 6e 6f  ows if it did no
2f680 74 20 68 61 76 65 20 61 20 4c 49 4d 49 54 20 63  t have a LIMIT c
2f690 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 0a  lause, then the.
2f6a0 66 69 72 73 74 20 4d 20 72 6f 77 73 20 61 72 65  first M rows are
2f6b0 20 73 6b 69 70 70 65 64 20 61 6e 64 20 74 68 65   skipped and the
2f6c0 20 72 65 6d 61 69 6e 69 6e 67 20 72 6f 77 73 20   remaining rows 
2f6d0 28 69 66 20 61 6e 79 29 20 61 72 65 20 72 65 74  (if any) are ret
2f6e0 75 72 6e 65 64 2e 20 5e 49 66 20 74 68 65 0a 4f  urned. ^If the.O
2f6f0 46 46 53 45 54 20 63 6c 61 75 73 65 20 65 76 61  FFSET clause eva
2f700 6c 75 61 74 65 73 20 74 6f 20 61 20 6e 65 67 61  luates to a nega
2f710 74 69 76 65 20 76 61 6c 75 65 2c 20 74 68 65 20  tive value, the 
2f720 72 65 73 75 6c 74 73 20 61 72 65 20 74 68 65 20  results are the 
2f730 73 61 6d 65 20 61 73 20 69 66 20 69 74 0a 68 61  same as if it.ha
2f740 64 20 65 76 61 6c 75 61 74 65 64 20 74 6f 20 7a  d evaluated to z
2f750 65 72 6f 2e 0a 0a 3c 70 3e 5e 49 6e 73 74 65 61  ero...<p>^Instea
2f760 64 20 6f 66 20 61 20 73 65 70 61 72 61 74 65 20  d of a separate 
2f770 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20 74  OFFSET clause, t
2f780 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
2f790 6d 61 79 20 73 70 65 63 69 66 79 20 74 77 6f 0a  may specify two.
2f7a0 73 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f  scalar expressio
2f7b0 6e 73 20 73 65 70 61 72 61 74 65 64 20 62 79 20  ns separated by 
2f7c0 61 20 63 6f 6d 6d 61 2e 20 5e 49 6e 20 74 68 69  a comma. ^In thi
2f7d0 73 20 63 61 73 65 2c 20 74 68 65 20 66 69 72 73  s case, the firs
2f7e0 74 20 65 78 70 72 65 73 73 69 6f 6e 0a 69 73 20  t expression.is 
2f7f0 75 73 65 64 20 61 73 20 74 68 65 20 4f 46 46 53  used as the OFFS
2f800 45 54 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e  ET expression an
2f810 64 20 74 68 65 20 73 65 63 6f 6e 64 20 61 73 20  d the second as 
2f820 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73  the LIMIT expres
2f830 73 69 6f 6e 2e 0a 54 68 69 73 20 69 73 20 63 6f  sion..This is co
2f840 75 6e 74 65 72 2d 69 6e 74 75 69 74 69 76 65 2c  unter-intuitive,
2f850 20 61 73 20 77 68 65 6e 20 75 73 69 6e 67 20 74   as when using t
2f860 68 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65  he OFFSET clause
2f870 20 74 68 65 20 73 65 63 6f 6e 64 20 6f 66 0a 74   the second of.t
2f880 68 65 20 74 77 6f 20 65 78 70 72 65 73 73 69 6f  he two expressio
2f890 6e 73 20 69 73 20 74 68 65 20 4f 46 46 53 45 54  ns is the OFFSET
2f8a0 20 61 6e 64 20 74 68 65 20 66 69 72 73 74 20 74   and the first t
2f8b0 68 65 20 4c 49 4d 49 54 2e 20 0a 54 68 69 73 20  he LIMIT. .This 
2f8c0 72 65 76 65 72 73 61 6c 20 6f 66 20 74 68 65 20  reversal of the 
2f8d0 6f 66 66 73 65 74 20 61 6e 64 20 6c 69 6d 69 74  offset and limit
2f8e0 20 69 73 20 69 6e 74 65 6e 74 69 6f 6e 61 6c 0a   is intentional.
2f8f0 2d 20 69 74 20 6d 61 78 69 6d 69 7a 65 73 20 63  - it maximizes c
2f900 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74  ompatibility wit
2f910 68 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61  h other SQL data
2f920 62 61 73 65 20 73 79 73 74 65 6d 73 2e 0a 48 6f  base systems..Ho
2f930 77 65 76 65 72 2c 20 74 6f 20 61 76 6f 69 64 20  wever, to avoid 
2f940 63 6f 6e 66 75 73 69 6f 6e 2c 20 70 72 6f 67 72  confusion, progr
2f950 61 6d 6d 65 72 73 20 61 72 65 20 73 74 72 6f 6e  ammers are stron
2f960 67 6c 79 20 65 6e 63 6f 75 72 61 67 65 64 20 74  gly encouraged t
2f970 6f 20 75 73 65 0a 74 68 65 20 66 6f 72 6d 20 6f  o use.the form o
2f980 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75  f the LIMIT clau
2f990 73 65 20 74 68 61 74 20 75 73 65 73 20 74 68 65  se that uses the
2f9a0 20 22 4f 46 46 53 45 54 22 20 6b 65 79 77 6f 72   "OFFSET" keywor
2f9b0 64 20 61 6e 64 20 61 76 6f 69 64 0a 75 73 69 6e  d and avoid.usin
2f9c0 67 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  g a LIMIT clause
2f9d0 20 77 69 74 68 20 61 20 63 6f 6d 6d 61 2d 73 65   with a comma-se
2f9e0 70 61 72 61 74 65 64 20 6f 66 66 73 65 74 2e 0a  parated offset..
2f9f0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
2fa00 74 20 76 61 6c 75 65 73 20 7b 56 41 4c 55 45 53  t values {VALUES
2fa10 20 63 6c 61 75 73 65 7d 20 56 41 4c 55 45 53 3c   clause} VALUES<
2fa20 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 56 41  /tcl>.<h3>The VA
2fa30 4c 55 45 53 20 63 6c 61 75 73 65 3c 2f 68 33 3e  LUES clause</h3>
2fa40 0a 0a 3c 70 3e 5e 28 54 68 65 20 70 68 72 61 73  ..<p>^(The phras
2fa50 65 20 22 56 41 4c 55 45 53 28 3c 69 3e 65 78 70  e "VALUES(<i>exp
2fa60 72 2d 6c 69 73 74 3c 2f 69 3e 29 22 20 6d 65 61  r-list</i>)" mea
2fa70 6e 73 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e  ns the same thin
2fa80 67 0a 61 73 20 22 53 45 4c 45 43 54 20 3c 69 3e  g.as "SELECT <i>
2fa90 65 78 70 72 2d 6c 69 73 74 3c 2f 69 3e 22 2e 29  expr-list</i>".)
2faa0 5e 20 20 5e 28 54 68 65 20 70 68 72 61 73 65 0a  ^  ^(The phrase.
2fab0 22 56 41 4c 55 45 53 28 3c 69 3e 65 78 70 72 2d  "VALUES(<i>expr-
2fac0 6c 69 73 74 2d 31 3c 2f 69 3e 29 2c 2e 2e 2e 2c  list-1</i>),...,
2fad0 28 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d 4e 3c  (<i>expr-list-N<
2fae0 2f 69 3e 29 22 20 6d 65 61 6e 73 20 74 68 65 20  /i>)" means the 
2faf0 73 61 6d 65 0a 74 68 69 6e 67 20 61 73 20 22 53  same.thing as "S
2fb00 45 4c 45 43 54 20 3c 69 3e 65 78 70 72 2d 6c 69  ELECT <i>expr-li
2fb10 73 74 2d 31 3c 2f 69 3e 20 55 4e 49 4f 4e 20 41  st-1</i> UNION A
2fb20 4c 4c 20 2e 2e 2e 20 55 4e 49 4f 4e 20 41 4c 4c  LL ... UNION ALL
2fb30 0a 53 45 4c 45 43 54 20 3c 69 3e 65 78 70 72 2d  .SELECT <i>expr-
2fb40 6c 69 73 74 2d 4e 3c 2f 69 3e 22 2e 29 5e 20 20  list-N</i>".)^  
2fb50 42 6f 74 68 20 66 6f 72 6d 73 20 61 72 65 20 74  Both forms are t
2fb60 68 65 20 73 61 6d 65 2c 20 65 78 63 65 70 74 20  he same, except 
2fb70 74 68 61 74 0a 74 68 65 20 6e 75 6d 62 65 72 20  that.the number 
2fb80 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  of SELECT statem
2fb90 65 6e 74 73 20 69 6e 20 61 20 63 6f 6d 70 6f 75  ents in a compou
2fba0 6e 64 20 69 73 20 6c 69 6d 69 74 65 64 20 62 79  nd is limited by
2fbb0 0a 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43  .[SQLITE_LIMIT_C
2fbc0 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54 5d 20  OMPOUND_SELECT] 
2fbd0 77 68 65 72 65 61 73 20 74 68 65 20 6e 75 6d 62  whereas the numb
2fbe0 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a  er of rows in a.
2fbf0 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 68 61  VALUES clause ha
2fc00 73 20 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c  s no arbitrary l
2fc10 69 6d 69 74 2e 0a 0a 3c 70 3e 54 68 65 72 65 20  imit...<p>There 
2fc20 61 72 65 20 73 6f 6d 65 20 72 65 73 74 72 69 63  are some restric
2fc30 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 75 73 65  tions on the use
2fc40 20 6f 66 20 61 20 56 41 4c 55 45 53 20 63 6c 61   of a VALUES cla
2fc50 75 73 65 20 74 68 61 74 20 61 72 65 0a 6e 6f 74  use that are.not
2fc60 20 73 68 6f 77 6e 20 6f 6e 20 74 68 65 20 73 79   shown on the sy
2fc70 6e 74 61 78 20 64 69 61 67 72 61 6d 73 3a 0a 0a  ntax diagrams:..
2fc80 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 5e 41 20  <ul>.<li><p>.^A 
2fc90 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 63 61  VALUES clause ca
2fca0 6e 6e 6f 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64  nnot be followed
2fcb0 20 62 79 20 5b 4f 52 44 45 52 20 42 59 5d 2e 0a   by [ORDER BY]..
2fcc0 0a 3c 6c 69 3e 3c 70 3e 0a 5e 41 20 56 41 4c 55  .<li><p>.^A VALU
2fcd0 45 53 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74  ES clause cannot
2fce0 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   be followed by 
2fcf0 5b 4c 49 4d 49 54 5d 2e 0a 3c 2f 75 6c 3e 0a 0a  [LIMIT]..</ul>..
2fd00 0a 3c 68 33 3e 54 68 65 20 57 49 54 48 20 43 6c  .<h3>The WITH Cl
2fd10 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 53  ause</h3>..<p>^S
2fd20 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
2fd30 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c   may be optional
2fd40 6c 79 20 70 72 65 63 65 64 65 64 20 62 79 20 61  ly preceded by a
2fd50 20 73 69 6e 67 6c 65 0a 5b 57 49 54 48 20 63 6c   single.[WITH cl
2fd60 61 75 73 65 5d 20 74 68 61 74 20 64 65 66 69 6e  ause] that defin
2fd70 65 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 5b  es one or more [
2fd80 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
2fd90 72 65 73 73 69 6f 6e 73 5d 0a 66 6f 72 20 75 73  ressions].for us
2fda0 65 20 77 69 74 68 69 6e 20 74 68 65 20 53 45 4c  e within the SEL
2fdb0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  ECT statement...
2fdc0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
2fdd0 20 74 61 62 66 75 6e 63 31 20 7b 74 61 62 6c 65   tabfunc1 {table
2fde0 2d 76 61 6c 75 65 64 20 66 75 6e 63 74 69 6f 6e  -valued function
2fdf0 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  s in the FROM cl
2fe00 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  ause}</tcl>.<h3>
2fe10 54 61 62 6c 65 2d 76 61 6c 75 65 64 20 46 75 6e  Table-valued Fun
2fe20 63 74 69 6f 6e 73 20 49 6e 20 54 68 65 20 46 52  ctions In The FR
2fe30 4f 4d 20 43 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a  OM Clause</h3>..
2fe40 3c 70 3e 41 20 5b 76 69 72 74 75 61 6c 20 74 61  <p>A [virtual ta
2fe50 62 6c 65 5d 20 74 68 61 74 20 63 6f 6e 74 61 69  ble] that contai
2fe60 6e 73 20 5b 68 69 64 64 65 6e 20 63 6f 6c 75 6d  ns [hidden colum
2fe70 6e 73 5d 20 63 61 6e 20 62 65 20 75 73 65 64 20  ns] can be used 
2fe80 6c 69 6b 65 0a 61 20 5b 74 61 62 6c 65 2d 76 61  like.a [table-va
2fe90 6c 75 65 64 20 66 75 6e 63 74 69 6f 6e 5d 20 69  lued function] i
2fea0 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
2feb0 65 2e 20 20 54 68 65 20 61 72 67 75 6d 65 6e 74  e.  The argument
2fec0 73 20 74 6f 20 74 68 65 0a 74 61 62 6c 65 2d 76  s to the.table-v
2fed0 61 6c 75 65 64 20 66 75 6e 63 74 69 6f 6e 20 62  alued function b
2fee0 65 63 6f 6d 65 20 63 6f 6e 73 74 72 61 69 6e 74  ecome constraint
2fef0 73 20 6f 6e 20 74 68 65 20 48 49 44 44 45 4e 20  s on the HIDDEN 
2ff00 63 6f 6c 75 6d 6e 73 20 6f 66 0a 74 68 65 20 76  columns of.the v
2ff10 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 41  irtual table.  A
2ff20 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
2ff30 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 66 6f 75  ation can be fou
2ff40 6e 64 20 69 6e 20 74 68 65 0a 5b 74 61 62 6c 65  nd in the.[table
2ff50 2d 76 61 6c 75 65 64 20 66 75 6e 63 74 69 6f 6e  -valued function
2ff60 73 7c 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  s|virtual table 
2ff70 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 5d 2e 0a  documentation]..
2ff80 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
2ff90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ffa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ffb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ffc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ffd0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 55 50  #####.Section UP
2ffe0 44 41 54 45 20 75 70 64 61 74 65 20 7b 55 50 44  DATE update {UPD
2fff0 41 54 45 20 2a 55 50 44 41 54 45 73 7d 0a 0a 52  ATE *UPDATEs}..R
30000 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
30010 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d  agram update-stm
30020 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e  t.</tcl>..<p>^An
30030 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
30040 74 20 69 73 20 75 73 65 64 20 74 6f 20 6d 6f 64  t is used to mod
30050 69 66 79 20 61 20 73 75 62 73 65 74 20 6f 66 20  ify a subset of 
30060 74 68 65 20 76 61 6c 75 65 73 20 73 74 6f 72 65  the values store
30070 64 20 69 6e 20 0a 7a 65 72 6f 20 6f 72 20 6d 6f  d in .zero or mo
30080 72 65 20 72 6f 77 73 20 6f 66 20 74 68 65 20 64  re rows of the d
30090 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 64  atabase table id
300a0 65 6e 74 69 66 69 65 64 20 62 79 20 74 68 65 20  entified by the 
300b0 0a 5b 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c  .[qualified-tabl
300c0 65 2d 6e 61 6d 65 5d 20 73 70 65 63 69 66 69 65  e-name] specifie
300d0 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  d as part of the
300e0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
300f0 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55  t...<p>^If the U
30100 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
30110 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61 20  does not have a 
30120 57 48 45 52 45 20 63 6c 61 75 73 65 2c 20 61 6c  WHERE clause, al
30130 6c 20 72 6f 77 73 20 69 6e 20 74 68 65 0a 74 61  l rows in the.ta
30140 62 6c 65 20 61 72 65 20 6d 6f 64 69 66 69 65 64  ble are modified
30150 20 62 79 20 74 68 65 20 55 50 44 41 54 45 2e 20   by the UPDATE. 
30160 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20  ^Otherwise, the 
30170 55 50 44 41 54 45 20 61 66 66 65 63 74 73 20 6f  UPDATE affects o
30180 6e 6c 79 20 74 68 6f 73 65 0a 72 6f 77 73 20 66  nly those.rows f
30190 6f 72 20 77 68 69 63 68 20 74 68 65 20 57 48 45  or which the WHE
301a0 52 45 20 63 6c 61 75 73 65 0a 5b 62 6f 6f 6c 65  RE clause.[boole
301b0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 7c 62 6f  an expression|bo
301c0 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
301d0 20 69 73 20 74 72 75 65 5d 2e 20 5e 49 74 20 69   is true]. ^It i
301e0 73 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 69  s not an error i
301f0 66 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75  f the.WHERE clau
30200 73 65 20 64 6f 65 73 20 6e 6f 74 20 65 76 61 6c  se does not eval
30210 75 61 74 65 20 74 6f 20 74 72 75 65 20 66 6f 72  uate to true for
30220 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 20   any row in the 
30230 74 61 62 6c 65 20 2d 20 74 68 69 73 20 6a 75 73  table - this jus
30240 74 0a 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t.means that the
30250 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
30260 74 20 61 66 66 65 63 74 73 20 7a 65 72 6f 20 72  t affects zero r
30270 6f 77 73 2e 0a 0a 3c 70 3e 54 68 65 20 6d 6f 64  ows...<p>The mod
30280 69 66 69 63 61 74 69 6f 6e 73 20 6d 61 64 65 20  ifications made 
30290 74 6f 20 65 61 63 68 20 72 6f 77 20 61 66 66 65  to each row affe
302a0 63 74 65 64 20 62 79 20 61 6e 20 55 50 44 41 54  cted by an UPDAT
302b0 45 20 73 74 61 74 65 6d 65 6e 74 20 61 72 65 0a  E statement are.
302c0 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
302d0 65 20 6c 69 73 74 20 6f 66 20 61 73 73 69 67 6e  e list of assign
302e0 6d 65 6e 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20  ments following 
302f0 74 68 65 20 53 45 54 20 6b 65 79 77 6f 72 64 2e  the SET keyword.
30300 20 45 61 63 68 0a 61 73 73 69 67 6e 6d 65 6e 74   Each.assignment
30310 20 73 70 65 63 69 66 69 65 73 20 61 20 3c 79 79   specifies a <yy
30320 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  term>column-name
30330 3c 2f 79 79 74 65 72 6d 3e 20 74 6f 20 74 68 65  </yyterm> to the
30340 20 6c 65 66 74 20 6f 66 20 74 68 65 20 0a 65 71   left of the .eq
30350 75 61 6c 73 20 73 69 67 6e 20 61 6e 64 20 61 20  uals sign and a 
30360 73 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f  scalar expressio
30370 6e 20 74 6f 20 74 68 65 20 72 69 67 68 74 2e 20  n to the right. 
30380 0a 5e 46 6f 72 20 65 61 63 68 20 61 66 66 65 63  .^For each affec
30390 74 65 64 20 72 6f 77 2c 20 74 68 65 20 6e 61 6d  ted row, the nam
303a0 65 64 20 63 6f 6c 75 6d 6e 73 0a 61 72 65 20 73  ed columns.are s
303b0 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 73  et to the values
303c0 20 66 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61   found by evalua
303d0 74 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70  ting the corresp
303e0 6f 6e 64 69 6e 67 20 73 63 61 6c 61 72 20 0a 65  onding scalar .e
303f0 78 70 72 65 73 73 69 6f 6e 73 2e 20 5e 49 66 20  xpressions. ^If 
30400 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2d  a single column-
30410 6e 61 6d 65 20 61 70 70 65 61 72 73 20 6d 6f 72  name appears mor
30420 65 20 74 68 61 6e 20 6f 6e 63 65 20 69 6e 20 74  e than once in t
30430 68 65 20 6c 69 73 74 20 6f 66 0a 61 73 73 69 67  he list of.assig
30440 6e 6d 65 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  nment expression
30450 73 2c 20 61 6c 6c 20 62 75 74 20 74 68 65 20 72  s, all but the r
30460 69 67 68 74 6d 6f 73 74 20 6f 63 63 75 72 72 65  ightmost occurre
30470 6e 63 65 20 69 73 20 69 67 6e 6f 72 65 64 2e 20  nce is ignored. 
30480 5e 43 6f 6c 75 6d 6e 73 0a 74 68 61 74 20 64 6f  ^Columns.that do
30490 20 6e 6f 74 20 61 70 70 65 61 72 20 69 6e 20 74   not appear in t
304a0 68 65 20 6c 69 73 74 20 6f 66 20 61 73 73 69 67  he list of assig
304b0 6e 6d 65 6e 74 73 20 61 72 65 20 6c 65 66 74 20  nments are left 
304c0 75 6e 6d 6f 64 69 66 69 65 64 2e 20 5e 54 68 65  unmodified. ^The
304d0 20 73 63 61 6c 61 72 0a 65 78 70 72 65 73 73 69   scalar.expressi
304e0 6f 6e 73 20 6d 61 79 20 72 65 66 65 72 20 74 6f  ons may refer to
304f0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
30500 72 6f 77 20 62 65 69 6e 67 20 75 70 64 61 74 65  row being update
30510 64 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65  d. ^In this case
30520 20 61 6c 6c 0a 73 63 61 6c 61 72 20 65 78 70 72   all.scalar expr
30530 65 73 73 69 6f 6e 73 20 61 72 65 20 65 76 61 6c  essions are eval
30540 75 61 74 65 64 20 62 65 66 6f 72 65 20 61 6e 79  uated before any
30550 20 61 73 73 69 67 6e 6d 65 6e 74 73 20 61 72 65   assignments are
30560 20 6d 61 64 65 2e 0a 0a 3c 70 3e 42 65 67 69 6e   made...<p>Begin
30570 6e 69 6e 67 20 69 6e 20 53 51 4c 69 74 65 20 5b  ning in SQLite [
30580 76 65 72 73 69 6f 6e 20 33 2e 31 35 2e 30 5d 20  version 3.15.0] 
30590 28 5b 64 61 74 65 6f 66 3a 33 2e 31 35 2e 30 5d  ([dateof:3.15.0]
305a0 29 2c 20 61 6e 20 61 73 73 69 67 6e 6d 65 6e 74  ), an assignment
305b0 20 69 6e 0a 74 68 65 20 53 45 54 20 63 6c 61 75   in.the SET clau
305c0 73 65 20 63 61 6e 20 62 65 20 61 20 0a 5b 63 6f  se can be a .[co
305d0 6c 75 6d 6e 2d 6e 61 6d 65 2d 6c 69 73 74 7c 70  lumn-name-list|p
305e0 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c 69 73  arenthesized lis
305f0 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  t of column name
30600 73 5d 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 61  s] on the left a
30610 6e 64 20 61 0a 5b 72 6f 77 20 76 61 6c 75 65 5d  nd a.[row value]
30620 20 6f 66 20 74 68 65 20 73 61 6d 65 20 73 69 7a   of the same siz
30630 65 20 6f 6e 20 74 68 65 20 72 69 67 68 74 2e 0a  e on the right..
30640 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e  ..<p>^The option
30650 61 6c 20 22 4f 52 20 3c 69 3e 61 63 74 69 6f 6e  al "OR <i>action
30660 3c 2f 69 3e 22 20 63 6f 6e 66 6c 69 63 74 20 63  </i>" conflict c
30670 6c 61 75 73 65 20 74 68 61 74 20 66 6f 6c 6c 6f  lause that follo
30680 77 73 20 74 68 65 0a 55 50 44 41 54 45 20 6b 65  ws the.UPDATE ke
30690 79 77 6f 72 64 20 61 6c 6c 6f 77 73 20 74 68 65  yword allows the
306a0 20 75 73 65 72 20 74 6f 20 6e 6f 6d 69 6e 61 74   user to nominat
306b0 65 20 61 20 73 70 65 63 69 66 69 63 0a 63 6f 6e  e a specific.con
306c0 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74  straint conflict
306d0 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
306e0 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72  rithm to use dur
306f0 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 55 50 44  ing this one UPD
30700 41 54 45 20 63 6f 6d 6d 61 6e 64 2e 0a 52 65 66  ATE command..Ref
30710 65 72 20 74 6f 20 74 68 65 20 73 65 63 74 69 6f  er to the sectio
30720 6e 20 65 6e 74 69 74 6c 65 64 20 5b 4f 4e 20 43  n entitled [ON C
30730 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64  ONFLICT] for add
30740 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
30750 69 6f 6e 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69  ion...<h3>Restri
30760 63 74 69 6f 6e 73 20 6f 6e 20 55 50 44 41 54 45  ctions on UPDATE
30770 20 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68   Statements With
30780 69 6e 20 43 52 45 41 54 45 20 54 52 49 47 47 45  in CREATE TRIGGE
30790 52 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66  R</h3>..<p>The f
307a0 6f 6c 6c 6f 77 69 6e 67 20 61 64 64 69 74 69 6f  ollowing additio
307b0 6e 61 6c 20 73 79 6e 74 61 78 20 72 65 73 74 72  nal syntax restr
307c0 69 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 74 6f  ictions apply to
307d0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
307e0 74 73 20 74 68 61 74 0a 6f 63 63 75 72 20 77 69  ts that.occur wi
307f0 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66  thin the body of
30800 20 61 20 5b 43 52 45 41 54 45 20 54 52 49 47 47   a [CREATE TRIGG
30810 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ER] statement.  
30820 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e  ..<ul>.  <li><p>
30830 5e 54 68 65 20 3c 79 79 74 65 72 6d 3e 74 61 62  ^The <yyterm>tab
30840 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  le-name</yyterm>
30850 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
30860 72 74 20 6f 66 20 61 6e 20 55 50 44 41 54 45 20  rt of an UPDATE 
30870 0a 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74  .      statement
30880 20 77 69 74 68 69 6e 0a 20 20 20 20 20 20 61 20   within.      a 
30890 74 72 69 67 67 65 72 20 62 6f 64 79 20 6d 75 73  trigger body mus
308a0 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69 65 64  t be unqualified
308b0 2e 20 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72  . ^(In other wor
308c0 64 73 2c 20 74 68 65 0a 20 20 20 20 20 20 3c 69  ds, the.      <i
308d0 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69 3e  >schema-name</i>
308e0 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78 20  <b>.</b> prefix 
308f0 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  on the table nam
30900 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  e of the UPDATE 
30910 69 73 0a 20 20 20 20 20 20 6e 6f 74 20 61 6c 6c  is.      not all
30920 6f 77 65 64 20 77 69 74 68 69 6e 20 74 72 69 67  owed within trig
30930 67 65 72 73 2e 29 5e 20 5e 55 6e 6c 65 73 73 20  gers.)^ ^Unless 
30940 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77 68 69  the table to whi
30950 63 68 20 74 68 65 20 74 72 69 67 67 65 72 0a 20  ch the trigger. 
30960 20 20 20 20 20 69 73 20 61 74 74 61 63 68 65 64       is attached
30970 20 69 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20   is in the TEMP 
30980 64 61 74 61 62 61 73 65 2c 20 74 68 65 20 74 61  database, the ta
30990 62 6c 65 20 62 65 69 6e 67 20 75 70 64 61 74 65  ble being update
309a0 64 20 62 79 20 74 68 65 0a 20 20 20 20 20 20 74  d by the.      t
309b0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 6d  rigger program m
309c0 75 73 74 20 72 65 73 69 64 65 20 69 6e 20 74 68  ust reside in th
309d0 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
309e0 61 73 20 69 74 2e 20 5e 49 66 20 74 68 65 20 74  as it. ^If the t
309f0 61 62 6c 65 0a 20 20 20 20 20 20 74 6f 20 77 68  able.      to wh
30a00 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
30a10 69 73 20 61 74 74 61 63 68 65 64 20 69 73 20 69  is attached is i
30a20 6e 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  n the TEMP datab
30a30 61 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20  ase, then the.  
30a40 20 20 20 20 75 6e 71 75 61 6c 69 66 69 65 64 20      unqualified 
30a50 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
30a60 65 20 62 65 69 6e 67 20 75 70 64 61 74 65 64 20  e being updated 
30a70 69 73 20 72 65 73 6f 6c 76 65 64 20 69 6e 20 74  is resolved in t
30a80 68 65 20 73 61 6d 65 20 77 61 79 0a 20 20 20 20  he same way.    
30a90 20 20 61 73 20 69 74 20 69 73 20 66 6f 72 20 61    as it is for a
30aa0 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65   top-level state
30ab0 6d 65 6e 74 20 28 62 79 20 73 65 61 72 63 68 69  ment (by searchi
30ac0 6e 67 20 66 69 72 73 74 20 74 68 65 20 54 45 4d  ng first the TEM
30ad0 50 20 64 61 74 61 62 61 73 65 2c 0a 20 20 20 20  P database,.    
30ae0 20 20 74 68 65 6e 20 74 68 65 20 6d 61 69 6e 20    then the main 
30af0 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 61  database, then a
30b00 6e 79 20 6f 74 68 65 72 20 64 61 74 61 62 61 73  ny other databas
30b10 65 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20  es in the order 
30b20 74 68 65 79 20 77 65 72 65 0a 20 20 20 20 20 20  they were.      
30b30 61 74 74 61 63 68 65 64 29 2e 0a 0a 20 20 3c 6c  attached)...  <l
30b40 69 3e 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45  i><p>^The INDEXE
30b50 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44  D BY and NOT IND
30b60 45 58 45 44 20 63 6c 61 75 73 65 73 20 61 72 65  EXED clauses are
30b70 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20   not allowed on 
30b80 55 50 44 41 54 45 0a 20 20 20 20 20 20 73 74 61  UPDATE.      sta
30b90 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
30ba0 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20  riggers.</p>..  
30bb0 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d 49  <li><p>^The LIMI
30bc0 54 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63  T and ORDER BY c
30bd0 6c 61 75 73 65 73 20 66 6f 72 20 55 50 44 41 54  lauses for UPDAT
30be0 45 20 61 72 65 20 75 6e 73 75 70 70 6f 72 74 65  E are unsupporte
30bf0 64 20 77 69 74 68 69 6e 0a 20 20 20 20 20 20 74  d within.      t
30c00 72 69 67 67 65 72 73 2c 20 72 65 67 61 72 64 6c  riggers, regardl
30c10 65 73 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 69  ess of the compi
30c20 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 75  lation options u
30c30 73 65 64 20 74 6f 20 62 75 69 6c 64 20 53 51 4c  sed to build SQL
30c40 69 74 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e  ite..</ul>..<h3>
30c50 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 61  Optional LIMIT a
30c60 6e 64 20 4f 52 44 45 52 20 42 59 20 43 6c 61 75  nd ORDER BY Clau
30c70 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49  ses</h3>..<p>^(I
30c80 66 20 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c  f SQLite is buil
30c90 74 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49  t with the [SQLI
30ca0 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45  TE_ENABLE_UPDATE
30cb0 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63  _DELETE_LIMIT].c
30cc0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
30cd0 6f 6e 20 74 68 65 6e 20 74 68 65 20 73 79 6e 74  on then the synt
30ce0 61 78 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  ax of the UPDATE
30cf0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78   statement is ex
30d00 74 65 6e 64 65 64 0a 77 69 74 68 20 6f 70 74 69  tended.with opti
30d10 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59 20 61 6e  onal ORDER BY an
30d20 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 29  d LIMIT clauses)
30d30 5e 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70  ^ as follows:</p
30d40 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69  >..<tcl>BubbleDi
30d50 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d  agram update-stm
30d60 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a  t-limited</tcl>.
30d70 0a 3c 70 3e 5e 49 66 20 61 6e 20 55 50 44 41 54  .<p>^If an UPDAT
30d80 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  E statement has 
30d90 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20  a LIMIT clause, 
30da0 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
30db0 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0a  er of rows that.
30dc0 77 69 6c 6c 20 62 65 20 75 70 64 61 74 65 64 20  will be updated 
30dd0 69 73 20 66 6f 75 6e 64 20 62 79 20 65 76 61 6c  is found by eval
30de0 75 61 74 69 6e 67 20 74 68 65 20 61 63 63 6f 6d  uating the accom
30df0 70 61 6e 79 69 6e 67 20 65 78 70 72 65 73 73 69  panying expressi
30e00 6f 6e 20 61 6e 64 20 63 61 73 74 69 6e 67 0a 69  on and casting.i
30e10 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
30e20 76 61 6c 75 65 2e 20 5e 41 20 6e 65 67 61 74 69  value. ^A negati
30e30 76 65 20 76 61 6c 75 65 20 69 73 20 69 6e 74 65  ve value is inte
30e40 72 70 72 65 74 65 64 20 61 73 20 22 6e 6f 20 6c  rpreted as "no l
30e50 69 6d 69 74 22 2e 0a 0a 3c 70 3e 5e 49 66 20 74  imit"...<p>^If t
30e60 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  he LIMIT express
30e70 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f  ion evaluates to
30e80 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61   non-negative va
30e90 6c 75 65 20 3c 69 3e 4e 3c 2f 69 3e 20 61 6e 64  lue <i>N</i> and
30ea0 20 74 68 65 0a 55 50 44 41 54 45 20 73 74 61 74   the.UPDATE stat
30eb0 65 6d 65 6e 74 20 68 61 73 20 61 6e 20 4f 52 44  ement has an ORD
30ec0 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68  ER BY clause, th
30ed0 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74  en all rows that
30ee0 20 77 6f 75 6c 64 20 62 65 20 75 70 64 61 74 65   would be update
30ef0 64 20 69 6e 0a 74 68 65 20 61 62 73 65 6e 63 65  d in.the absence
30f00 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c   of the LIMIT cl
30f10 61 75 73 65 20 61 72 65 20 73 6f 72 74 65 64 20  ause are sorted 
30f20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65  according to the
30f30 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 74 68   ORDER BY and th
30f40 65 0a 66 69 72 73 74 20 3c 69 3e 4e 3c 2f 69 3e  e.first <i>N</i>
30f50 20 75 70 64 61 74 65 64 2e 20 5e 28 49 66 20 74   updated. ^(If t
30f60 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
30f70 65 6e 74 20 61 6c 73 6f 20 68 61 73 20 61 6e 20  ent also has an 
30f80 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 0a 74  OFFSET clause,.t
30f90 68 65 6e 20 69 74 20 69 73 20 73 69 6d 69 6c 61  hen it is simila
30fa0 72 6c 79 20 65 76 61 6c 75 61 74 65 64 20 61 6e  rly evaluated an
30fb0 64 20 63 61 73 74 20 74 6f 20 61 6e 20 69 6e 74  d cast to an int
30fc0 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20 74  eger value. If t
30fd0 68 65 20 4f 46 46 53 45 54 0a 65 78 70 72 65 73  he OFFSET.expres
30fe0 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74  sion evaluates t
30ff0 6f 20 61 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65  o a non-negative
31000 20 76 61 6c 75 65 20 3c 69 3e 4d 3c 2f 69 3e 2c   value <i>M</i>,
31010 20 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20   then the first 
31020 3c 69 3e 4d 3c 2f 69 3e 0a 72 6f 77 73 20 61 72  <i>M</i>.rows ar
31030 65 20 73 6b 69 70 70 65 64 20 61 6e 64 20 74 68  e skipped and th
31040 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c 69 3e 4e  e following <i>N
31050 3c 2f 69 3e 20 72 6f 77 73 20 75 70 64 61 74 65  </i> rows update
31060 64 20 69 6e 73 74 65 61 64 2e 29 5e 0a 0a 3c 70  d instead.)^..<p
31070 3e 5e 49 66 20 74 68 65 20 55 50 44 41 54 45 20  >^If the UPDATE 
31080 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f  statement has no
31090 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
310a0 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20  , then all rows 
310b0 74 68 61 74 0a 77 6f 75 6c 64 20 62 65 20 75 70  that.would be up
310c0 64 61 74 65 64 20 69 6e 20 74 68 65 20 61 62 73  dated in the abs
310d0 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49  ence of the LIMI
310e0 54 20 63 6c 61 75 73 65 20 61 72 65 20 61 73 73  T clause are ass
310f0 65 6d 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72 62  embled in an.arb
31100 69 74 72 61 72 79 20 6f 72 64 65 72 20 62 65 66  itrary order bef
31110 6f 72 65 20 61 70 70 6c 79 69 6e 67 20 74 68 65  ore applying the
31120 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45   LIMIT and OFFSE
31130 54 20 63 6c 61 75 73 65 73 20 74 6f 20 64 65 74  T clauses to det
31140 65 72 6d 69 6e 65 20 0a 77 68 69 63 68 20 61 72  ermine .which ar
31150 65 20 61 63 74 75 61 6c 6c 79 20 75 70 64 61 74  e actually updat
31160 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52  ed...<p>^(The OR
31170 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e  DER BY clause on
31180 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65   an UPDATE state
31190 6d 65 6e 74 20 69 73 20 75 73 65 64 20 6f 6e 6c  ment is used onl
311a0 79 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77  y to determine w
311b0 68 69 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77  hich.rows fall w
311c0 69 74 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e  ithin the LIMIT.
311d0 20 54 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68   The order in wh
311e0 69 63 68 20 72 6f 77 73 20 61 72 65 20 6d 6f 64  ich rows are mod
311f0 69 66 69 65 64 20 69 73 20 61 72 62 69 74 72 61  ified is arbitra
31200 72 79 0a 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e  ry.and is not in
31210 66 6c 75 65 6e 63 65 64 20 62 79 20 74 68 65 20  fluenced by the 
31220 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
31230 29 5e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  )^..<tcl>.######
31240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31280 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
31290 20 56 41 43 55 55 4d 20 76 61 63 75 75 6d 20 56   VACUUM vacuum V
312a0 41 43 55 55 4d 0a 0a 52 65 63 75 72 73 69 76 65  ACUUM..Recursive
312b0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 76 61  BubbleDiagram va
312c0 63 75 75 6d 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  cuum-stmt.</tcl>
312d0 0a 0a 3c 70 3e 0a 20 20 54 68 65 20 56 41 43 55  ..<p>.  The VACU
312e0 55 4d 20 63 6f 6d 6d 61 6e 64 20 72 65 62 75 69  UM command rebui
312f0 6c 64 73 20 74 68 65 20 64 61 74 61 62 61 73 65  lds the database
31300 20 66 69 6c 65 2c 20 72 65 70 61 63 6b 69 6e 67   file, repacking
31310 20 69 74 20 69 6e 74 6f 20 61 20 6d 69 6e 69 6d   it into a minim
31320 61 6c 0a 20 20 61 6d 6f 75 6e 74 20 6f 66 20 64  al.  amount of d
31330 69 73 6b 20 73 70 61 63 65 2e 20 54 68 65 72 65  isk space. There
31340 20 61 72 65 20 73 65 76 65 72 61 6c 20 0a 20 20   are several .  
31350 72 65 61 73 6f 6e 73 20 61 6e 20 61 70 70 6c 69  reasons an appli
31360 63 61 74 69 6f 6e 20 6d 69 67 68 74 20 64 6f 20  cation might do 
31370 74 68 69 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c  this:..<ul>.  <l
31380 69 3e 20 3c 70 3e 20 5e 55 6e 6c 65 73 73 20 53  i> <p> ^Unless S
31390 51 4c 69 74 65 20 69 73 20 72 75 6e 6e 69 6e 67  QLite is running
313a0 20 69 6e 20 22 61 75 74 6f 5f 76 61 63 75 75 6d   in "auto_vacuum
313b0 3d 46 55 4c 4c 22 20 6d 6f 64 65 2c 20 77 68 65  =FULL" mode, whe
313c0 6e 20 61 20 6c 61 72 67 65 0a 20 20 20 20 20 61  n a large.     a
313d0 6d 6f 75 6e 74 20 6f 66 20 64 61 74 61 20 69 73  mount of data is
313e0 20 64 65 6c 65 74 65 64 20 66 72 6f 6d 20 74 68   deleted from th
313f0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
31400 69 74 20 6c 65 61 76 65 73 20 62 65 68 69 6e 64  it leaves behind
31410 20 65 6d 70 74 79 0a 20 20 20 20 20 73 70 61 63   empty.     spac
31420 65 2c 20 6f 72 20 22 66 72 65 65 22 20 64 61 74  e, or "free" dat
31430 61 62 61 73 65 20 70 61 67 65 73 2e 20 54 68 69  abase pages. Thi
31440 73 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61  s means the data
31450 62 61 73 65 20 66 69 6c 65 20 6d 69 67 68 74 0a  base file might.
31460 20 20 20 20 20 62 65 20 6c 61 72 67 65 72 20 74       be larger t
31470 68 61 6e 20 73 74 72 69 63 74 6c 79 20 6e 65 63  han strictly nec
31480 65 73 73 61 72 79 2e 20 5e 52 75 6e 6e 69 6e 67  essary. ^Running
31490 20 56 41 43 55 55 4d 20 74 6f 20 72 65 62 75 69   VACUUM to rebui
314a0 6c 64 20 74 68 65 20 0a 20 20 20 20 20 64 61 74  ld the .     dat
314b0 61 62 61 73 65 20 72 65 63 6c 61 69 6d 73 20 74  abase reclaims t
314c0 68 69 73 20 73 70 61 63 65 20 61 6e 64 20 72 65  his space and re
314d0 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 20 6f  duces the size o
314e0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
314f0 69 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e  ile...  <li> <p>
31500 20 5e 46 72 65 71 75 65 6e 74 20 69 6e 73 65 72   ^Frequent inser
31510 74 73 2c 20 75 70 64 61 74 65 73 2c 20 61 6e 64  ts, updates, and
31520 20 64 65 6c 65 74 65 73 20 63 61 6e 20 63 61 75   deletes can cau
31530 73 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  se the database 
31540 66 69 6c 65 0a 20 20 20 20 20 74 6f 20 62 65 63  file.     to bec
31550 6f 6d 65 20 66 72 61 67 6d 65 6e 74 65 64 20 2d  ome fragmented -
31560 20 77 68 65 72 65 20 64 61 74 61 20 66 6f 72 20   where data for 
31570 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6f  a single table o
31580 72 20 69 6e 64 65 78 20 69 73 20 73 63 61 74 74  r index is scatt
31590 65 72 65 64 20 0a 20 20 20 20 20 61 72 6f 75 6e  ered .     aroun
315a0 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  d the database f
315b0 69 6c 65 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41  ile. ^Running VA
315c0 43 55 55 4d 20 65 6e 73 75 72 65 73 20 74 68 61  CUUM ensures tha
315d0 74 20 65 61 63 68 20 74 61 62 6c 65 20 61 6e 64  t each table and
315e0 0a 20 20 20 20 20 69 6e 64 65 78 20 69 73 20 6c  .     index is l
315f0 61 72 67 65 6c 79 20 73 74 6f 72 65 64 20 63 6f  argely stored co
31600 6e 74 69 67 75 6f 75 73 6c 79 20 77 69 74 68 69  ntiguously withi
31610 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
31620 69 6c 65 2e 20 5e 49 6e 20 73 6f 6d 65 0a 20 20  ile. ^In some.  
31630 20 20 20 63 61 73 65 73 2c 20 56 41 43 55 55 4d     cases, VACUUM
31640 20 6d 61 79 20 61 6c 73 6f 20 72 65 64 75 63 65   may also reduce
31650 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
31660 61 72 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20  artially filled 
31670 70 61 67 65 73 20 69 6e 0a 20 20 20 20 20 74 68  pages in.     th
31680 65 20 64 61 74 61 62 61 73 65 2c 20 72 65 64 75  e database, redu
31690 63 69 6e 67 20 74 68 65 20 73 69 7a 65 20 6f 66  cing the size of
316a0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
316b0 6c 65 20 66 75 72 74 68 65 72 2e 0a 0a 20 20 3c  le further...  <
316c0 6c 69 3e 20 3c 70 3e 20 5e 4e 6f 72 6d 61 6c 6c  li> <p> ^Normall
316d0 79 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20  y, the database 
316e0 5b 70 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64 20  [page_size] and 
316f0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
31700 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20  he database.    
31710 20 73 75 70 70 6f 72 74 73 20 5b 61 75 74 6f 5f   supports [auto_
31720 76 61 63 75 75 6d 5d 20 6d 75 73 74 20 62 65 20  vacuum] must be 
31730 63 6f 6e 66 69 67 75 72 65 64 20 62 65 66 6f 72  configured befor
31740 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  e the database f
31750 69 6c 65 20 69 73 0a 20 20 20 20 20 61 63 74 75  ile is.     actu
31760 61 6c 6c 79 20 63 72 65 61 74 65 64 2e 20 5e 48  ally created. ^H
31770 6f 77 65 76 65 72 2c 20 77 68 65 6e 20 6e 6f 74  owever, when not
31780 20 69 6e 20 5b 77 72 69 74 65 2d 61 68 65 61 64   in [write-ahead
31790 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20 74 68 65 20   log] mode, the 
317a0 0a 20 20 20 20 20 5b 70 61 67 65 5f 73 69 7a 65  .     [page_size
317b0 5d 20 61 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f 76  ] and/or [auto_v
317c0 61 63 75 75 6d 5d 20 70 72 6f 70 65 72 74 69 65  acuum] propertie
317d0 73 20 6f 66 20 61 6e 20 65 78 69 73 74 69 6e 67  s of an existing
317e0 20 64 61 74 61 62 61 73 65 20 6d 61 79 20 62 65   database may be
317f0 0a 20 20 20 20 20 63 68 61 6e 67 65 64 20 62 79  .     changed by
31800 20 75 73 69 6e 67 20 74 68 65 20 5b 70 61 67 65   using the [page
31810 5f 73 69 7a 65 20 70 72 61 67 6d 61 7c 70 61 67  _size pragma|pag
31820 65 5f 73 69 7a 65 5d 20 20 61 6e 64 2f 6f 72 20  e_size]  and/or 
31830 0a 20 20 20 20 20 5b 61 75 74 6f 5f 76 61 63 75  .     [auto_vacu
31840 75 6d 7c 70 72 61 67 6d 61 20 61 75 74 6f 5f 76  um|pragma auto_v
31850 61 63 75 75 6d 5d 20 70 72 61 67 6d 61 73 20 61  acuum] pragmas a
31860 6e 64 20 74 68 65 6e 20 69 6d 6d 65 64 69 61 74  nd then immediat
31870 65 6c 79 20 56 41 43 55 55 4d 69 6e 67 0a 20 20  ely VACUUMing.  
31880 20 20 20 74 68 65 20 64 61 74 61 62 61 73 65 2e     the database.
31890 20 5e 57 68 65 6e 20 69 6e 20 5b 77 72 69 74 65   ^When in [write
318a0 2d 61 68 65 61 64 20 6c 6f 67 5d 20 6d 6f 64 65  -ahead log] mode
318b0 2c 20 6f 6e 6c 79 20 74 68 65 20 5b 61 75 74 6f  , only the [auto
318c0 5f 76 61 63 75 75 6d 5d 0a 20 20 20 20 20 73 75  _vacuum].     su
318d0 70 70 6f 72 74 20 70 72 6f 70 65 72 74 79 20 63  pport property c
318e0 61 6e 20 62 65 20 63 68 61 6e 67 65 64 20 75 73  an be changed us
318f0 69 6e 67 20 56 41 43 55 55 4d 2e 0a 3c 2f 75 6c  ing VACUUM..</ul
31900 3e 0a 0a 3c 70 3e 5e 42 79 20 64 65 66 61 75 6c  >..<p>^By defaul
31910 74 2c 20 56 41 43 55 55 4d 20 6f 6e 6c 79 20 77  t, VACUUM only w
31920 6f 72 6b 73 20 6f 6e 6c 79 20 6f 6e 20 74 68 65  orks only on the
31930 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 0a   main database..
31940 5e 5b 41 54 54 41 43 48 7c 41 74 74 61 63 68 65  ^[ATTACH|Attache
31950 64 20 64 61 74 61 62 61 73 65 73 5d 20 63 61 6e  d databases] can
31960 20 62 65 20 76 61 63 75 75 6d 65 64 20 62 79 20   be vacuumed by 
31970 61 70 70 65 6e 64 69 6e 67 20 74 68 65 20 61 70  appending the ap
31980 70 72 6f 70 72 69 61 74 65 0a 3c 79 79 74 65 72  propriate.<yyter
31990 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79  m>schema-name</y
319a0 79 74 65 72 6d 3e 20 74 6f 20 74 68 65 20 56 41  yterm> to the VA
319b0 43 55 55 4d 20 73 74 61 74 65 6d 65 6e 74 2e 0a  CUUM statement..
319c0 0a 3c 70 3e 3c 62 3e 43 6f 6d 70 61 74 69 62 69  .<p><b>Compatibi
319d0 6c 69 74 79 20 57 61 72 6e 69 6e 67 3a 3c 2f 62  lity Warning:</b
319e0 3e 20 54 68 65 20 61 62 69 6c 69 74 79 20 74 6f  > The ability to
319f0 20 76 61 63 75 75 6d 20 61 74 74 61 63 68 65 64   vacuum attached
31a00 20 64 61 74 61 62 61 73 65 73 20 77 61 73 0a 61   databases was.a
31a10 64 64 65 64 20 69 6e 20 5b 76 65 72 73 69 6f 6e  dded in [version
31a20 20 33 2e 31 35 2e 30 5d 20 28 5b 64 61 74 65 6f   3.15.0] ([dateo
31a30 66 3a 33 2e 31 35 2e 30 5d 29 2e 20 20 50 72 69  f:3.15.0]).  Pri
31a40 6f 72 20 74 6f 20 74 68 61 74 2c 20 61 20 0a 3c  or to that, a .<
31a50 79 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61  yyterm>schema-na
31a60 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 61 64 64 65  me</yyterm> adde
31a70 64 20 74 6f 20 74 68 65 0a 56 41 43 55 55 4d 20  d to the.VACUUM 
31a80 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20  statement would 
31a90 62 65 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f  be silently igno
31aa0 72 65 64 20 61 6e 64 20 74 68 65 20 22 6d 61 69  red and the "mai
31ab0 6e 22 20 73 63 68 65 6d 61 20 77 6f 75 6c 64 20  n" schema would 
31ac0 62 65 0a 76 61 63 75 75 6d 65 64 2e 3c 2f 70 3e  be.vacuumed.</p>
31ad0 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d  ..<p>^The VACUUM
31ae0 20 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 62   command works b
31af0 79 20 63 6f 70 79 69 6e 67 20 74 68 65 20 63 6f  y copying the co
31b00 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61  ntents of the da
31b10 74 61 62 61 73 65 20 69 6e 74 6f 0a 61 20 74 65  tabase into.a te
31b20 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61 73 65  mporary database
31b30 20 66 69 6c 65 20 61 6e 64 20 74 68 65 6e 20 6f   file and then o
31b40 76 65 72 77 72 69 74 69 6e 67 20 74 68 65 20 6f  verwriting the o
31b50 72 69 67 69 6e 61 6c 20 77 69 74 68 20 74 68 65  riginal with the
31b60 20 0a 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68   .contents of th
31b70 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65  e temporary file
31b80 2e 20 5e 57 68 65 6e 20 6f 76 65 72 77 72 69 74  . ^When overwrit
31b90 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  ing the original
31ba0 2c 20 61 20 72 6f 6c 6c 62 61 63 6b 0a 6a 6f 75  , a rollback.jou
31bb0 72 6e 61 6c 20 6f 72 20 5b 77 72 69 74 65 2d 61  rnal or [write-a
31bc0 68 65 61 64 20 6c 6f 67 5d 20 57 41 4c 20 66 69  head log] WAL fi
31bd0 6c 65 20 69 73 20 75 73 65 64 20 6a 75 73 74 20  le is used just 
31be0 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 66  as it would be f
31bf0 6f 72 20 61 6e 79 0a 6f 74 68 65 72 20 64 61 74  or any.other dat
31c00 61 62 61 73 65 20 74 72 61 6e 73 61 63 74 69 6f  abase transactio
31c10 6e 2e 20 5e 54 68 69 73 20 6d 65 61 6e 73 20 74  n. ^This means t
31c20 68 61 74 20 77 68 65 6e 20 56 41 43 55 55 4d 69  hat when VACUUMi
31c30 6e 67 20 61 20 64 61 74 61 62 61 73 65 2c 20 0a  ng a database, .
31c40 61 73 20 6d 75 63 68 20 61 73 20 74 77 69 63 65  as much as twice
31c50 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
31c60 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 61 62 61   original databa
31c70 73 65 20 66 69 6c 65 20 69 73 20 72 65 71 75 69  se file is requi
31c80 72 65 64 20 69 6e 20 66 72 65 65 0a 64 69 73 6b  red in free.disk
31c90 20 73 70 61 63 65 2e 0a 0a 3c 70 3e 5e 54 68 65   space...<p>^The
31ca0 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20   VACUUM command 
31cb0 6d 61 79 20 63 68 61 6e 67 65 20 74 68 65 20 5b  may change the [
31cc0 52 4f 57 49 44 20 7c 20 52 4f 57 49 44 73 5d 20  ROWID | ROWIDs] 
31cd0 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 6e  of entries in an
31ce0 79 0a 74 61 62 6c 65 73 20 74 68 61 74 20 64 6f  y.tables that do
31cf0 20 6e 6f 74 20 68 61 76 65 20 61 6e 20 65 78 70   not have an exp
31d00 6c 69 63 69 74 20 5b 49 4e 54 45 47 45 52 20 50  licit [INTEGER P
31d10 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 3c 2f 70  RIMARY KEY]..</p
31d20 3e 0a 0a 3c 70 3e 5e 41 20 56 41 43 55 55 4d 20  >..<p>^A VACUUM 
31d30 77 69 6c 6c 20 66 61 69 6c 20 69 66 20 74 68 65  will fail if the
31d40 72 65 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 72  re is an open tr
31d50 61 6e 73 61 63 74 69 6f 6e 2c 20 6f 72 20 69 66  ansaction, or if
31d60 20 74 68 65 72 65 20 61 72 65 20 6f 6e 65 20 6f   there are one o
31d70 72 0a 6d 6f 72 65 20 61 63 74 69 76 65 20 53 51  r.more active SQ
31d80 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65  L statements whe
31d90 6e 20 69 74 20 69 73 20 72 75 6e 2e 0a 0a 3c 70  n it is run...<p
31da0 3e 5e 28 41 6e 20 61 6c 74 65 72 6e 61 74 69 76  >^(An alternativ
31db0 65 20 74 6f 20 75 73 69 6e 67 20 74 68 65 20 56  e to using the V
31dc0 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 74 6f  ACUUM command to
31dd0 0a 72 65 63 6c 61 69 6d 20 73 70 61 63 65 20 61  .reclaim space a
31de0 66 74 65 72 20 64 61 74 61 20 68 61 73 20 62 65  fter data has be
31df0 65 6e 20 64 65 6c 65 74 65 64 20 69 73 20 61 75  en deleted is au
31e00 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2c 20  to-vacuum mode, 
31e10 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 0a 74 68  enabled using.th
31e20 65 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20  e [auto_vacuum] 
31e30 70 72 61 67 6d 61 2e 29 5e 20 5e 57 68 65 6e 20  pragma.)^ ^When 
31e40 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 69 73  [auto_vacuum] is
31e50 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 61 20 64   enabled for a d
31e60 61 74 61 62 61 73 65 0a 66 72 65 65 20 70 61 67  atabase.free pag
31e70 65 73 20 6d 61 79 20 62 65 20 72 65 63 6c 61 69  es may be reclai
31e80 6d 65 64 20 61 66 74 65 72 20 64 65 6c 65 74 69  med after deleti
31e90 6e 67 20 64 61 74 61 2c 20 63 61 75 73 69 6e 67  ng data, causing
31ea0 20 74 68 65 20 66 69 6c 65 20 74 6f 20 73 68 72   the file to shr
31eb0 69 6e 6b 2c 0a 77 69 74 68 6f 75 74 20 72 65 62  ink,.without reb
31ec0 75 69 6c 64 69 6e 67 20 74 68 65 20 65 6e 74 69  uilding the enti
31ed0 72 65 20 64 61 74 61 62 61 73 65 20 75 73 69 6e  re database usin
31ee0 67 20 56 41 43 55 55 4d 2e 20 20 5e 48 6f 77 65  g VACUUM.  ^Howe
31ef0 76 65 72 2c 20 75 73 69 6e 67 0a 5b 61 75 74 6f  ver, using.[auto
31f00 5f 76 61 63 75 75 6d 5d 20 63 61 6e 20 6c 65 61  _vacuum] can lea
31f10 64 20 74 6f 20 65 78 74 72 61 20 64 61 74 61 62  d to extra datab
31f20 61 73 65 20 66 69 6c 65 20 66 72 61 67 6d 65 6e  ase file fragmen
31f30 74 61 74 69 6f 6e 2e 20 20 5e 41 6e 64 20 5b 61  tation.  ^And [a
31f40 75 74 6f 5f 76 61 63 75 75 6d 5d 0a 64 6f 65 73  uto_vacuum].does
31f50 20 6e 6f 74 20 63 6f 6d 70 61 63 74 20 70 61 72   not compact par
31f60 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61  tially filled pa
31f70 67 65 73 20 6f 66 20 74 68 65 20 64 61 74 61 62  ges of the datab
31f80 61 73 65 20 61 73 20 56 41 43 55 55 4d 20 64 6f  ase as VACUUM do
31f90 65 73 2e 0a 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c  es...</p>...<tcl
31fa0 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
31fb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31fc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31fd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31fe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31ff0 0a 53 65 63 74 69 6f 6e 20 7b 49 4e 44 45 58 45  .Section {INDEXE
32000 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79 20  D BY} indexedby 
32010 7b 7b 49 4e 44 45 58 45 44 20 42 59 7d 20 7b 4e  {{INDEXED BY} {N
32020 4f 54 20 49 4e 44 45 58 45 44 7d 7d 0a 0a 3c 2f  OT INDEXED}}..</
32030 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 44  tcl>.<p>^The IND
32040 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20 66  EXED BY phrase f
32050 6f 72 63 65 73 20 74 68 65 20 5b 53 51 4c 69 74  orces the [SQLit
32060 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 5d  e query planner]
32070 20 74 6f 20 75 73 65 20 61 0a 70 61 72 74 69 63   to use a.partic
32080 75 6c 61 72 20 6e 61 6d 65 64 20 69 6e 64 65 78  ular named index
32090 20 6f 6e 20 61 20 5b 44 45 4c 45 54 45 5d 2c 20   on a [DELETE], 
320a0 5b 53 45 4c 45 43 54 5d 2c 20 6f 72 20 5b 55 50  [SELECT], or [UP
320b0 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e  DATE] statement.
320c0 0a 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  .The INDEXED BY 
320d0 70 68 72 61 73 65 20 69 73 20 61 6e 20 53 51 4c  phrase is an SQL
320e0 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 20 61 6e  ite extension an
320f0 64 0a 69 73 20 6e 6f 74 20 70 6f 72 74 61 62 6c  d.is not portabl
32100 65 20 74 6f 20 6f 74 68 65 72 20 53 51 4c 20 64  e to other SQL d
32110 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 2e  atabase engines.
32120 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75  </p>..<tcl>.Recu
32130 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
32140 61 6d 20 71 75 61 6c 69 66 69 65 64 2d 74 61 62  am qualified-tab
32150 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a  le-name.</tcl>..
32160 3c 70 3e 5e 54 68 65 20 22 49 4e 44 45 58 45 44  <p>^The "INDEXED
32170 20 42 59 20 3c 79 79 74 65 72 6d 3e 69 6e 64 65   BY <yyterm>inde
32180 78 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 22  x-name</yyterm>"
32190 20 70 68 72 61 73 65 20 73 70 65 63 69 66 69 65   phrase specifie
321a0 73 20 0a 74 68 61 74 20 74 68 65 20 6e 61 6d 65  s .that the name
321b0 64 20 69 6e 64 65 78 0a 6d 75 73 74 20 62 65 20  d index.must be 
321c0 75 73 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  used in order to
321d0 20 6c 6f 6f 6b 20 75 70 20 76 61 6c 75 65 73 20   look up values 
321e0 6f 6e 20 74 68 65 20 70 72 65 63 65 64 69 6e 67  on the preceding
321f0 20 74 61 62 6c 65 2e 0a 5e 49 66 20 3c 79 79 74   table..^If <yyt
32200 65 72 6d 3e 69 6e 64 65 78 2d 6e 61 6d 65 3c 2f  erm>index-name</
32210 79 79 74 65 72 6d 3e 20 64 6f 65 73 20 6e 6f 74  yyterm> does not
32220 20 65 78 69 73 74 20 6f 72 20 63 61 6e 6e 6f 74   exist or cannot
32230 20 62 65 20 75 73 65 64 20 0a 66 6f 72 20 74 68   be used .for th
32240 65 20 71 75 65 72 79 2c 20 74 68 65 6e 20 74 68  e query, then th
32250 65 20 70 72 65 70 61 72 61 74 69 6f 6e 20 6f 66  e preparation of
32260 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
32270 6e 74 20 66 61 69 6c 73 2e 0a 5e 28 54 68 65 20  nt fails..^(The 
32280 22 4e 4f 54 20 49 4e 44 45 58 45 44 22 20 63 6c  "NOT INDEXED" cl
32290 61 75 73 65 20 73 70 65 63 69 66 69 65 73 20 74  ause specifies t
322a0 68 61 74 20 6e 6f 20 69 6e 64 65 78 20 73 68 61  hat no index sha
322b0 6c 6c 20 62 65 20 75 73 65 64 20 77 68 65 6e 0a  ll be used when.
322c0 61 63 63 65 73 73 69 6e 67 20 74 68 65 20 70 72  accessing the pr
322d0 65 63 65 64 69 6e 67 20 74 61 62 6c 65 2c 20 69  eceding table, i
322e0 6e 63 6c 75 64 69 6e 67 20 69 6d 70 6c 69 65 64  ncluding implied
322f0 20 69 6e 64 69 63 65 73 20 63 72 65 61 74 65 20   indices create 
32300 62 79 0a 55 4e 49 51 55 45 20 61 6e 64 20 50 52  by.UNIQUE and PR
32310 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72  IMARY KEY constr
32320 61 69 6e 74 73 2e 20 20 48 6f 77 65 76 65 72 2c  aints.  However,
32330 20 74 68 65 20 5b 72 6f 77 69 64 5d 0a 63 61 6e   the [rowid].can
32340 20 73 74 69 6c 6c 20 62 65 20 75 73 65 64 20 74   still be used t
32350 6f 20 6c 6f 6f 6b 20 75 70 20 65 6e 74 72 69 65  o look up entrie
32360 73 20 65 76 65 6e 20 77 68 65 6e 20 22 4e 4f 54  s even when "NOT
32370 20 49 4e 44 45 58 45 44 22 20 69 73 20 73 70 65   INDEXED" is spe
32380 63 69 66 69 65 64 2e 29 5e 3c 2f 70 3e 0a 0a 3c  cified.)^</p>..<
32390 70 3e 53 6f 6d 65 20 53 51 4c 20 64 61 74 61 62  p>Some SQL datab
323a0 61 73 65 20 65 6e 67 69 6e 65 73 20 70 72 6f 76  ase engines prov
323b0 69 64 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64  ide non-standard
323c0 20 22 68 69 6e 74 22 20 6d 65 63 68 61 6e 69 73   "hint" mechanis
323d0 6d 73 20 77 68 69 63 68 0a 63 61 6e 20 62 65 20  ms which.can be 
323e0 75 73 65 64 20 74 6f 20 67 69 76 65 20 74 68 65  used to give the
323f0 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72   query optimizer
32400 20 63 6c 75 65 73 20 61 62 6f 75 74 20 77 68 61   clues about wha
32410 74 20 69 6e 64 69 63 65 73 20 69 74 20 73 68 6f  t indices it sho
32420 75 6c 64 0a 75 73 65 20 66 6f 72 20 61 20 70 61  uld.use for a pa
32430 72 74 69 63 75 6c 61 72 20 73 74 61 74 65 6d 65  rticular stateme
32440 6e 74 2e 20 20 54 68 65 20 49 4e 44 45 58 20 42  nt.  The INDEX B
32450 59 20 63 6c 61 75 73 65 20 6f 66 20 53 51 4c 69  Y clause of SQLi
32460 74 65 20 69 73 20 0a 3c 65 6d 3e 6e 6f 74 3c 2f  te is .<em>not</
32470 65 6d 3e 20 61 20 68 69 6e 74 69 6e 67 20 6d 65  em> a hinting me
32480 63 68 61 6e 69 73 6d 20 61 6e 64 20 69 74 20 73  chanism and it s
32490 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75 73 65  hould not be use
324a0 64 20 61 73 20 73 75 63 68 2e 0a 5e 54 68 65 20  d as such..^The 
324b0 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73  INDEXED BY claus
324c0 65 20 64 6f 65 73 20 6e 6f 74 20 67 69 76 65 20  e does not give 
324d0 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 68 69  the optimizer hi
324e0 6e 74 73 20 61 62 6f 75 74 20 77 68 69 63 68 20  nts about which 
324f0 69 6e 64 65 78 0a 74 6f 20 75 73 65 3b 20 69 74  index.to use; it
32500 20 67 69 76 65 73 20 74 68 65 20 6f 70 74 69 6d   gives the optim
32510 69 7a 65 72 20 61 20 72 65 71 75 69 72 65 6d 65  izer a requireme
32520 6e 74 20 6f 66 20 77 68 69 63 68 20 69 6e 64 65  nt of which inde
32530 78 20 74 6f 20 75 73 65 2e 0a 5e 49 66 20 74 68  x to use..^If th
32540 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65  e query optimize
32550 72 20 69 73 20 75 6e 61 62 6c 65 20 74 6f 20 75  r is unable to u
32560 73 65 20 74 68 65 20 69 6e 64 65 78 20 73 70 65  se the index spe
32570 63 69 66 69 65 64 20 62 79 20 74 68 65 0a 49 4e  cified by the.IN
32580 44 45 58 20 42 59 20 63 6c 61 75 73 65 2c 20 74  DEX BY clause, t
32590 68 65 6e 20 74 68 65 20 71 75 65 72 79 20 77 69  hen the query wi
325a0 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20  ll fail with an 
325b0 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  error.</p>..<p>T
325c0 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c  he INDEXED BY cl
325d0 61 75 73 65 20 69 73 20 3c 65 6d 3e 6e 6f 74 3c  ause is <em>not<
325e0 2f 65 6d 3e 20 69 6e 74 65 6e 64 65 64 20 66 6f  /em> intended fo
325f0 72 20 75 73 65 20 69 6e 20 74 75 6e 69 6e 67 0a  r use in tuning.
32600 74 68 65 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  the performance 
32610 6f 66 20 61 20 71 75 65 72 79 2e 20 20 54 68 65  of a query.  The
32620 20 69 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 49   intent of the I
32630 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65  NDEXED BY clause
32640 20 69 73 0a 74 6f 20 72 61 69 73 65 20 61 20 72   is.to raise a r
32650 75 6e 2d 74 69 6d 65 20 65 72 72 6f 72 20 69 66  un-time error if
32660 20 61 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65   a schema change
32670 2c 20 73 75 63 68 20 61 73 20 64 72 6f 70 70 69  , such as droppi
32680 6e 67 20 6f 72 0a 63 72 65 61 74 69 6e 67 20 61  ng or.creating a
32690 6e 20 69 6e 64 65 78 2c 20 63 61 75 73 65 73 20  n index, causes 
326a0 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 20 66  the query plan f
326b0 6f 72 20 61 20 74 69 6d 65 2d 73 65 6e 73 69 74  or a time-sensit
326c0 69 76 65 20 71 75 65 72 79 0a 74 6f 20 63 68 61  ive query.to cha
326d0 6e 67 65 2e 20 20 54 68 65 20 49 4e 44 45 58 45  nge.  The INDEXE
326e0 44 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 64  D BY clause is d
326f0 65 73 69 67 6e 65 64 20 74 6f 20 68 65 6c 70 20  esigned to help 
32700 64 65 74 65 63 74 0a 75 6e 64 65 73 69 72 61 62  detect.undesirab
32710 6c 65 20 71 75 65 72 79 20 70 6c 61 6e 20 63 68  le query plan ch
32720 61 6e 67 65 73 20 64 75 72 69 6e 67 20 72 65 67  anges during reg
32730 72 65 73 73 69 6f 6e 20 74 65 73 74 69 6e 67 2e  ression testing.
32740 0a 41 70 70 6c 69 63 61 74 69 6f 6e 20 0a 64 65  .Application .de
32750 76 65 6c 6f 70 65 72 73 20 61 72 65 20 61 64 6d  velopers are adm
32760 6f 6e 69 73 68 65 64 20 74 6f 20 6f 6d 69 74 20  onished to omit 
32770 61 6c 6c 20 75 73 65 20 6f 66 20 49 4e 44 45 58  all use of INDEX
32780 45 44 20 42 59 20 64 75 72 69 6e 67 0a 61 70 70  ED BY during.app
32790 6c 69 63 61 74 69 6f 6e 20 64 65 73 69 67 6e 2c  lication design,
327a0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c   implementation,
327b0 20 74 65 73 74 69 6e 67 2c 20 61 6e 64 20 74 75   testing, and tu
327c0 6e 69 6e 67 2e 20 20 49 66 0a 49 4e 44 45 58 45  ning.  If.INDEXE
327d0 44 20 42 59 20 69 73 20 74 6f 20 62 65 20 75 73  D BY is to be us
327e0 65 64 20 61 74 20 61 6c 6c 2c 20 69 74 20 73 68  ed at all, it sh
327f0 6f 75 6c 64 20 62 65 20 69 6e 73 65 72 74 65 64  ould be inserted
32800 20 61 74 20 74 68 65 20 76 65 72 79 0a 65 6e 64   at the very.end
32810 20 6f 66 20 74 68 65 20 64 65 76 65 6c 6f 70 6d   of the developm
32820 65 6e 74 20 70 72 6f 63 65 73 73 20 77 68 65 6e  ent process when
32830 20 22 6c 6f 63 6b 69 6e 67 20 64 6f 77 6e 22 20   "locking down" 
32840 61 20 64 65 73 69 67 6e 2e 3c 2f 70 3e 0a 0a 3c  a design.</p>..<
32850 68 33 3e 53 65 65 20 41 6c 73 6f 3a 3c 2f 68 33  h3>See Also:</h3
32860 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 54  >..<ol>.<li><p>T
32870 68 65 20 5b 71 75 65 72 79 20 70 6c 61 6e 6e 65  he [query planne
32880 72 20 63 68 65 63 6b 6c 69 73 74 5d 20 64 65 73  r checklist] des
32890 63 72 69 62 65 73 20 73 74 65 70 73 20 74 68 61  cribes steps tha
328a0 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a 64 65  t application.de
328b0 76 65 6c 6f 70 65 72 73 20 73 68 6f 75 6c 64 20  velopers should 
328c0 66 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20 68 65 6c  following to hel
328d0 70 20 72 65 73 6f 6c 76 65 20 71 75 65 72 79 20  p resolve query 
328e0 70 6c 61 6e 6e 65 72 20 70 72 6f 62 6c 65 6d 73  planner problems
328f0 2e 0a 4e 6f 74 69 63 65 20 74 68 65 20 74 68 61  ..Notice the tha
32900 74 20 74 68 65 20 75 73 65 20 6f 66 20 49 4e 44  t the use of IND
32910 45 58 45 44 20 42 59 20 69 73 20 61 20 6c 61 73  EXED BY is a las
32920 74 20 72 65 73 6f 72 74 2c 20 74 6f 20 62 65 20  t resort, to be 
32930 75 73 65 64 20 6f 6e 6c 79 0a 77 68 65 6e 20 61  used only.when a
32940 6c 6c 20 6f 74 68 65 72 20 6d 65 61 73 75 72 65  ll other measure
32950 73 20 66 61 69 6c 2e 3c 2f 70 3e 0a 0a 3c 6c 69  s fail.</p>..<li
32960 3e 3c 70 3e 5b 75 70 6c 75 73 63 6f 6e 74 72 6f  ><p>[upluscontro
32970 6c 7c 54 68 65 20 75 6e 61 72 79 20 22 2b 22 20  l|The unary "+" 
32980 6f 70 65 72 61 74 6f 72 5d 0a 63 61 6e 20 62 65  operator].can be
32990 20 75 73 65 64 20 74 6f 20 64 69 73 71 75 61 6c   used to disqual
329a0 69 66 79 20 74 65 72 6d 73 20 69 6e 20 74 68 65  ify terms in the
329b0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 72   WHERE clause fr
329c0 6f 6d 20 75 73 65 20 62 79 20 69 6e 64 69 63 65  om use by indice
329d0 73 2e 0a 43 61 72 65 66 75 6c 20 75 73 65 20 6f  s..Careful use o
329e0 66 20 75 6e 61 72 79 20 2b 20 63 61 6e 20 73 6f  f unary + can so
329f0 6d 65 74 69 6d 65 73 20 68 65 6c 70 20 70 72 65  metimes help pre
32a00 76 65 6e 74 20 74 68 65 20 71 75 65 72 79 20 70  vent the query p
32a10 6c 61 6e 6e 65 72 20 66 72 6f 6d 0a 63 68 6f 6f  lanner from.choo
32a20 73 69 6e 67 20 61 20 70 6f 6f 72 20 69 6e 64 65  sing a poor inde
32a30 78 20 77 69 74 68 6f 75 74 20 72 65 73 74 72 69  x without restri
32a40 63 74 69 6e 67 20 69 74 20 74 6f 20 75 73 69 6e  cting it to usin
32a50 67 20 6f 6e 65 20 73 70 65 63 69 66 69 63 20 69  g one specific i
32a60 6e 64 65 78 2e 0a 43 61 72 65 66 75 6c 20 70 6c  ndex..Careful pl
32a70 61 63 65 6d 65 6e 74 20 6f 66 20 75 6e 61 72 79  acement of unary
32a80 20 2b 20 6f 70 65 72 61 74 6f 72 73 20 69 73 20   + operators is 
32a90 61 20 62 65 74 74 65 72 20 6d 65 74 68 6f 64 20  a better method 
32aa0 66 6f 72 20 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20  for controlling 
32ab0 0a 77 68 69 63 68 20 69 6e 64 69 63 65 73 20 61  .which indices a
32ac0 72 65 20 75 73 65 64 20 62 79 20 61 20 71 75 65  re used by a que
32ad0 72 79 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e  ry.</p>..<li><p>
32ae0 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d  The [sqlite3_stm
32af0 74 5f 73 74 61 74 75 73 28 29 5d 20 43 2f 43 2b  t_status()] C/C+
32b00 2b 20 69 6e 74 65 72 66 61 63 65 20 74 6f 67 65  + interface toge
32b10 74 68 65 72 20 77 69 74 68 20 74 68 65 0a 5b 53  ther with the.[S
32b20 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
32b30 5f 46 55 4c 4c 53 43 41 4e 5f 53 54 45 50 5d 20  _FULLSCAN_STEP] 
32b40 61 6e 64 20 5b 53 51 4c 49 54 45 5f 53 54 4d 54  and [SQLITE_STMT
32b50 53 54 41 54 55 53 5f 53 4f 52 54 5d 20 76 65 72  STATUS_SORT] ver
32b60 62 73 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74  bs.can be used t
32b70 6f 20 64 65 74 65 63 74 20 61 74 20 72 75 6e 2d  o detect at run-
32b80 74 69 6d 65 20 77 68 65 6e 20 61 6e 20 53 51 4c  time when an SQL
32b90 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6e 6f   statement is no
32ba0 74 0a 6d 61 6b 69 6e 67 20 65 66 66 65 63 74 69  t.making effecti
32bb0 76 65 20 75 73 65 20 6f 66 20 69 6e 64 69 63 65  ve use of indice
32bc0 73 2e 20 20 4d 61 6e 79 20 61 70 70 6c 69 63 61  s.  Many applica
32bd0 74 69 6f 6e 73 20 6d 61 79 20 70 72 65 66 65 72  tions may prefer
32be0 20 74 6f 0a 75 73 65 20 74 68 65 20 5b 73 71 6c   to.use the [sql
32bf0 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73  ite3_stmt_status
32c00 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20 74 6f  ()] interface to
32c10 20 64 65 74 65 63 74 20 69 6e 64 65 78 20 6d 69   detect index mi
32c20 73 75 73 65 0a 72 61 74 68 65 72 20 74 68 61 6e  suse.rather than
32c30 20 74 68 65 20 49 4e 44 45 58 45 44 20 42 59 20   the INDEXED BY 
32c40 70 68 72 61 73 65 20 64 65 73 63 72 69 62 65 64  phrase described
32c50 20 68 65 72 65 2e 3c 2f 70 3e 0a 3c 2f 6f 6c 3e   here.</p>.</ol>
32c60 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
32c70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32c80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32c90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32ca0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32cb0 23 23 23 23 23 0a 23 20 41 20 6c 69 73 74 20 6f  #####.# A list o
32cc0 66 20 6b 65 79 77 6f 72 64 73 2e 20 20 41 20 61  f keywords.  A a
32cd0 73 74 65 72 69 73 6b 20 6f 63 63 75 72 73 20 61  sterisk occurs a
32ce0 66 74 65 72 20 74 68 65 20 6b 65 79 77 6f 72 64  fter the keyword
32cf0 20 69 66 20 69 74 20 69 73 20 6f 6e 0a 23 20 74   if it is on.# t
32d00 68 65 20 66 61 6c 6c 62 61 63 6b 20 6c 69 73 74  he fallback list
32d10 2e 0a 23 0a 73 65 74 20 6b 65 79 77 6f 72 64 5f  ..#.set keyword_
32d20 6c 69 73 74 20 5b 6c 73 6f 72 74 20 7b 0a 20 20  list [lsort {.  
32d30 20 41 42 4f 52 54 0a 20 20 20 41 43 54 49 4f 4e   ABORT.   ACTION
32d40 0a 20 20 20 41 44 44 0a 20 20 20 41 46 54 45 52  .   ADD.   AFTER
32d50 0a 20 20 20 41 4c 4c 0a 20 20 20 41 4c 54 45 52  .   ALL.   ALTER
32d60 0a 20 20 20 41 4e 41 4c 59 5a 45 0a 20 20 20 41  .   ANALYZE.   A
32d70 4e 44 0a 20 20 20 41 53 0a 20 20 20 41 53 43 0a  ND.   AS.   ASC.
32d80 20 20 20 41 54 54 41 43 48 0a 20 20 20 41 55 54     ATTACH.   AUT
32d90 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 42 45  OINCREMENT.   BE
32da0 46 4f 52 45 0a 20 20 20 42 45 47 49 4e 0a 20 20  FORE.   BEGIN.  
32db0 20 42 45 54 57 45 45 4e 0a 20 20 20 42 59 0a 20   BETWEEN.   BY. 
32dc0 20 20 43 41 53 43 41 44 45 0a 20 20 20 43 41 53    CASCADE.   CAS
32dd0 45 0a 20 20 20 43 41 53 54 0a 20 20 20 43 48 45  E.   CAST.   CHE
32de0 43 4b 0a 20 20 20 43 4f 4c 4c 41 54 45 0a 20 20  CK.   COLLATE.  
32df0 20 43 4f 4c 55 4d 4e 0a 20 20 20 43 4f 4d 4d 49   COLUMN.   COMMI
32e00 54 0a 20 20 20 43 4f 4e 46 4c 49 43 54 0a 20 20  T.   CONFLICT.  
32e10 20 43 4f 4e 53 54 52 41 49 4e 54 0a 20 20 20 43   CONSTRAINT.   C
32e20 52 45 41 54 45 0a 20 20 20 43 52 4f 53 53 0a 20  REATE.   CROSS. 
32e30 20 20 43 55 52 52 45 4e 54 5f 44 41 54 45 0a 20    CURRENT_DATE. 
32e40 20 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 0a 20    CURRENT_TIME. 
32e50 20 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54    CURRENT_TIMEST
32e60 41 4d 50 0a 20 20 20 44 41 54 41 42 41 53 45 0a  AMP.   DATABASE.
32e70 20 20 20 44 45 46 41 55 4c 54 0a 20 20 20 44 45     DEFAULT.   DE
32e80 46 45 52 52 45 44 0a 20 20 20 44 45 46 45 52 52  FERRED.   DEFERR
32e90 41 42 4c 45 0a 20 20 20 44 45 4c 45 54 45 0a 20  ABLE.   DELETE. 
32ea0 20 20 44 45 53 43 0a 20 20 20 44 45 54 41 43 48    DESC.   DETACH
32eb0 0a 20 20 20 44 49 53 54 49 4e 43 54 0a 20 20 20  .   DISTINCT.   
32ec0 44 52 4f 50 0a 20 20 20 45 4e 44 0a 20 20 20 45  DROP.   END.   E
32ed0 41 43 48 0a 20 20 20 45 4c 53 45 0a 20 20 20 45  ACH.   ELSE.   E
32ee0 53 43 41 50 45 0a 20 20 20 45 58 43 45 50 54 0a  SCAPE.   EXCEPT.
32ef0 20 20 20 45 58 43 4c 55 53 49 56 45 0a 20 20 20     EXCLUSIVE.   
32f00 45 58 49 53 54 53 0a 20 20 20 45 58 50 4c 41 49  EXISTS.   EXPLAI
32f10 4e 0a 20 20 20 46 41 49 4c 0a 20 20 20 46 4f 52  N.   FAIL.   FOR
32f20 0a 20 20 20 46 4f 52 45 49 47 4e 0a 20 20 20 46  .   FOREIGN.   F
32f30 52 4f 4d 0a 20 20 20 46 55 4c 4c 0a 20 20 20 47  ROM.   FULL.   G
32f40 4c 4f 42 0a 20 20 20 47 52 4f 55 50 0a 20 20 20  LOB.   GROUP.   
32f50 48 41 56 49 4e 47 0a 20 20 20 49 46 0a 20 20 20  HAVING.   IF.   
32f60 49 47 4e 4f 52 45 0a 20 20 20 49 4d 4d 45 44 49  IGNORE.   IMMEDI
32f70 41 54 45 0a 20 20 20 49 4e 0a 20 20 20 49 4e 44  ATE.   IN.   IND
32f80 45 58 0a 20 20 20 49 4e 44 45 58 45 44 0a 20 20  EX.   INDEXED.  
32f90 20 49 4e 49 54 49 41 4c 4c 59 0a 20 20 20 49 4e   INITIALLY.   IN
32fa0 4e 45 52 0a 20 20 20 49 4e 53 45 52 54 0a 20 20  NER.   INSERT.  
32fb0 20 49 4e 53 54 45 41 44 0a 20 20 20 49 4e 54 45   INSTEAD.   INTE
32fc0 52 53 45 43 54 0a 20 20 20 49 4e 54 4f 0a 20 20  RSECT.   INTO.  
32fd0 20 49 53 0a 20 20 20 49 53 4e 55 4c 4c 0a 20 20   IS.   ISNULL.  
32fe0 20 4a 4f 49 4e 0a 20 20 20 4b 45 59 0a 20 20 20   JOIN.   KEY.   
32ff0 4c 45 46 54 0a 20 20 20 4c 49 4b 45 0a 20 20 20  LEFT.   LIKE.   
33000 4c 49 4d 49 54 0a 20 20 20 4d 41 54 43 48 0a 20  LIMIT.   MATCH. 
33010 20 20 4e 41 54 55 52 41 4c 0a 20 20 20 4e 4f 0a    NATURAL.   NO.
33020 20 20 20 4e 4f 54 0a 20 20 20 4e 4f 54 4e 55 4c     NOT.   NOTNUL
33030 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20 20 4f 46 0a  L.   NULL.   OF.
33040 20 20 20 4f 46 46 53 45 54 0a 20 20 20 4f 4e 0a     OFFSET.   ON.
33050 20 20 20 4f 52 0a 20 20 20 4f 52 44 45 52 0a 20     OR.   ORDER. 
33060 20 20 4f 55 54 45 52 0a 20 20 20 50 4c 41 4e 0a    OUTER.   PLAN.
33070 20 20 20 50 52 41 47 4d 41 0a 20 20 20 50 52 49     PRAGMA.   PRI
33080 4d 41 52 59 0a 20 20 20 51 55 45 52 59 0a 20 20  MARY.   QUERY.  
33090 20 52 41 49 53 45 0a 20 20 20 52 45 43 55 52 53   RAISE.   RECURS
330a0 49 56 45 0a 20 20 20 52 45 46 45 52 45 4e 43 45  IVE.   REFERENCE
330b0 53 0a 20 20 20 52 45 47 45 58 50 0a 20 20 20 52  S.   REGEXP.   R
330c0 45 49 4e 44 45 58 0a 20 20 20 52 45 4c 45 41 53  EINDEX.   RELEAS
330d0 45 0a 20 20 20 52 45 4e 41 4d 45 0a 20 20 20 52  E.   RENAME.   R
330e0 45 50 4c 41 43 45 0a 20 20 20 52 45 53 54 52 49  EPLACE.   RESTRI
330f0 43 54 0a 20 20 20 52 49 47 48 54 0a 20 20 20 52  CT.   RIGHT.   R
33100 4f 4c 4c 42 41 43 4b 0a 20 20 20 52 4f 57 0a 20  OLLBACK.   ROW. 
33110 20 20 53 41 56 45 50 4f 49 4e 54 0a 20 20 20 53    SAVEPOINT.   S
33120 45 4c 45 43 54 0a 20 20 20 53 45 54 0a 20 20 20  ELECT.   SET.   
33130 54 41 42 4c 45 0a 20 20 20 54 45 4d 50 0a 20 20  TABLE.   TEMP.  
33140 20 54 45 4d 50 4f 52 41 52 59 0a 20 20 20 54 48   TEMPORARY.   TH
33150 45 4e 0a 20 20 20 54 4f 0a 20 20 20 54 52 41 4e  EN.   TO.   TRAN
33160 53 41 43 54 49 4f 4e 0a 20 20 20 54 52 49 47 47  SACTION.   TRIGG
33170 45 52 0a 20 20 20 55 4e 49 4f 4e 0a 20 20 20 55  ER.   UNION.   U
33180 4e 49 51 55 45 0a 20 20 20 55 50 44 41 54 45 0a  NIQUE.   UPDATE.
33190 20 20 20 55 53 49 4e 47 0a 20 20 20 56 41 43 55     USING.   VACU
331a0 55 4d 0a 20 20 20 56 41 4c 55 45 53 0a 20 20 20  UM.   VALUES.   
331b0 56 49 45 57 0a 20 20 20 56 49 52 54 55 41 4c 0a  VIEW.   VIRTUAL.
331c0 20 20 20 57 49 54 48 0a 20 20 20 57 49 54 48 4f     WITH.   WITHO
331d0 55 54 0a 20 20 20 57 48 45 4e 0a 20 20 20 57 48  UT.   WHEN.   WH
331e0 45 52 45 0a 7d 5d 0a 0a 68 64 5f 70 75 74 73 20  ERE.}]..hd_puts 
331f0 7b 3c 44 49 56 20 63 6c 61 73 73 3d 22 70 64 66  {<DIV class="pdf
33200 5f 73 65 63 74 69 6f 6e 22 3e 7d 0a 53 65 63 74  _section">}.Sect
33210 69 6f 6e 20 7b 53 51 4c 69 74 65 20 4b 65 79 77  ion {SQLite Keyw
33220 6f 72 64 73 7d 20 6b 65 79 77 6f 72 64 73 20 7b  ords} keywords {
33230 7b 2a 53 51 4c 20 6b 65 79 77 6f 72 64 7d 20 7b  {*SQL keyword} {
33240 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a 68  SQL keywords}}.h
33250 64 5f 70 75 74 73 20 7b 3c 2f 44 49 56 3e 7d 0a  d_puts {</DIV>}.
33260 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 53  </tcl>..<p>The S
33270 51 4c 20 73 74 61 6e 64 61 72 64 20 73 70 65 63  QL standard spec
33280 69 66 69 65 73 20 61 20 68 75 67 65 20 6e 75 6d  ifies a huge num
33290 62 65 72 20 6f 66 20 6b 65 79 77 6f 72 64 73 20  ber of keywords 
332a0 77 68 69 63 68 20 6d 61 79 20 6e 6f 74 0a 62 65  which may not.be
332b0 20 75 73 65 64 20 61 73 20 74 68 65 20 6e 61 6d   used as the nam
332c0 65 73 20 6f 66 20 74 61 62 6c 65 73 2c 20 69 6e  es of tables, in
332d0 64 69 63 65 73 2c 20 63 6f 6c 75 6d 6e 73 2c 20  dices, columns, 
332e0 64 61 74 61 62 61 73 65 73 2c 20 75 73 65 72 2d  databases, user-
332f0 64 65 66 69 6e 65 64 0a 66 75 6e 63 74 69 6f 6e  defined.function
33300 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20 76  s, collations, v
33310 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64  irtual table mod
33320 75 6c 65 73 2c 20 6f 72 20 61 6e 79 20 6f 74 68  ules, or any oth
33330 65 72 20 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2e  er named object.
33340 0a 54 68 65 20 6c 69 73 74 20 6f 66 20 6b 65 79  .The list of key
33350 77 6f 72 64 73 20 69 73 20 73 6f 20 6c 6f 6e 67  words is so long
33360 20 74 68 61 74 20 66 65 77 20 70 65 6f 70 6c 65   that few people
33370 20 63 61 6e 20 72 65 6d 65 6d 62 65 72 20 74 68   can remember th
33380 65 6d 20 61 6c 6c 2e 0a 46 6f 72 20 6d 6f 73 74  em all..For most
33390 20 53 51 4c 20 63 6f 64 65 2c 20 79 6f 75 72 20   SQL code, your 
333a0 73 61 66 65 73 74 20 62 65 74 20 69 73 20 74 6f  safest bet is to
333b0 20 6e 65 76 65 72 20 75 73 65 20 61 6e 79 20 45   never use any E
333c0 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 0a  nglish language.
333d0 77 6f 72 64 20 61 73 20 74 68 65 20 6e 61 6d 65  word as the name
333e0 20 6f 66 20 61 20 75 73 65 72 2d 64 65 66 69 6e   of a user-defin
333f0 65 64 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a  ed object.</p>..
33400 3c 70 3e 49 66 20 79 6f 75 20 77 61 6e 74 20 74  <p>If you want t
33410 6f 20 75 73 65 20 61 20 6b 65 79 77 6f 72 64 20  o use a keyword 
33420 61 73 20 61 20 6e 61 6d 65 2c 20 79 6f 75 20 6e  as a name, you n
33430 65 65 64 20 74 6f 20 71 75 6f 74 65 20 69 74 2e  eed to quote it.
33440 20 20 54 68 65 72 65 0a 61 72 65 20 66 6f 75 72    There.are four
33450 20 77 61 79 73 20 6f 66 20 71 75 6f 74 69 6e 67   ways of quoting
33460 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 53 51 4c   keywords in SQL
33470 69 74 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62  ite:</p>..<p>.<b
33480 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c  lockquote>.<tabl
33490 65 3e 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69  e>.<tr>.<td vali
334a0 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 27 6b 65 79  gn="top"><b>'key
334b0 77 6f 72 64 27 3c 2f 62 3e 3c 2f 74 64 3e 3c 74  word'</b></td><t
334c0 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74  d width="20"></t
334d0 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f  d>..<td>^A keywo
334e0 72 64 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f  rd in single quo
334f0 74 65 73 20 69 73 20 61 20 73 74 72 69 6e 67 20  tes is a string 
33500 6c 69 74 65 72 61 6c 2e 3c 2f 74 64 3e 3c 2f 74  literal.</td></t
33510 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c  r>..<tr>.<td val
33520 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 22 6b 65  ign="top"><b>"ke
33530 79 77 6f 72 64 22 3c 2f 62 3e 3c 2f 74 64 3e 3c  yword"</b></td><
33540 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41  td></td>..<td>^A
33550 20 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62   keyword in doub
33560 6c 65 2d 71 75 6f 74 65 73 20 69 73 20 61 6e 20  le-quotes is an 
33570 69 64 65 6e 74 69 66 69 65 72 2e 3c 2f 74 64 3e  identifier.</td>
33580 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20  </tr>..<tr>.<td 
33590 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
335a0 26 23 39 31 3b 6b 65 79 77 6f 72 64 26 23 39 33  &#91;keyword&#93
335b0 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f  ;</b></td><td></
335c0 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77  td>..<td>^A keyw
335d0 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20  ord enclosed in 
335e0 73 71 75 61 72 65 20 62 72 61 63 6b 65 74 73 20  square brackets 
335f0 69 73 20 0a 20 20 20 20 20 20 20 20 61 6e 20 69  is .        an i
33600 64 65 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73  dentifier.  This
33610 20 69 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64   is not standard
33620 20 53 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74   SQL.  This quot
33630 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20  ing mechanism.  
33640 20 20 20 20 20 20 69 73 20 75 73 65 64 20 62 79        is used by
33650 20 4d 53 20 41 63 63 65 73 73 20 61 6e 64 20 53   MS Access and S
33660 51 4c 20 53 65 72 76 65 72 20 61 6e 64 20 69 73  QL Server and is
33670 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 53 51 4c   included in SQL
33680 69 74 65 20 66 6f 72 0a 20 20 20 20 20 20 20 20  ite for.        
33690 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f  compatibility.</
336a0 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c  td></tr>..<tr>.<
336b0 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
336c0 3c 62 3e 26 23 39 36 3b 6b 65 79 77 6f 72 64 26  <b>&#96;keyword&
336d0 23 39 36 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  #96;</b></td><td
336e0 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b  ></td>..<td>^A k
336f0 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20  eyword enclosed 
33700 69 6e 20 67 72 61 76 65 20 61 63 63 65 6e 74 73  in grave accents
33710 20 28 41 53 43 49 49 20 63 6f 64 65 20 39 36 29   (ASCII code 96)
33720 20 69 73 20 0a 20 20 20 20 20 20 20 20 61 6e 20   is .        an 
33730 69 64 65 6e 74 69 66 69 65 72 2e 20 20 54 68 69  identifier.  Thi
33740 73 20 69 73 20 6e 6f 74 20 73 74 61 6e 64 61 72  s is not standar
33750 64 20 53 51 4c 2e 20 20 54 68 69 73 20 71 75 6f  d SQL.  This quo
33760 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20  ting mechanism. 
33770 20 20 20 20 20 20 20 69 73 20 75 73 65 64 20 62         is used b
33780 79 20 4d 79 53 51 4c 20 61 6e 64 20 69 73 20 69  y MySQL and is i
33790 6e 63 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74  ncluded in SQLit
337a0 65 20 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f  e for.        co
337b0 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64  mpatibility.</td
337c0 3e 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a  ></tr>.</table>.
337d0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 2f  </blockquote>.</
337e0 70 3e 0a 0a 3c 70 3e 46 6f 72 20 72 65 73 69 6c  p>..<p>For resil
337f0 69 65 6e 63 65 20 77 68 65 6e 20 63 6f 6e 66 72  ience when confr
33800 6f 6e 74 65 64 20 77 69 74 68 20 68 69 73 74 6f  onted with histo
33810 72 69 63 61 6c 20 53 51 4c 20 73 74 61 74 65 6d  rical SQL statem
33820 65 6e 74 73 2c 20 53 51 4c 69 74 65 0a 77 69 6c  ents, SQLite.wil
33830 6c 20 73 6f 6d 65 74 69 6d 65 73 20 62 65 6e 64  l sometimes bend
33840 20 74 68 65 20 71 75 6f 74 69 6e 67 20 72 75 6c   the quoting rul
33850 65 73 20 61 62 6f 76 65 3a 3c 2f 70 3e 0a 0a 3c  es above:</p>..<
33860 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61  ul>.<li><p>^If a
33870 20 6b 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67   keyword in sing
33880 6c 65 0a 71 75 6f 74 65 73 20 28 65 78 3a 20 3c  le.quotes (ex: <
33890 62 3e 27 6b 65 79 27 3c 2f 62 3e 20 6f 72 20 3c  b>'key'</b> or <
338a0 62 3e 27 67 6c 6f 62 27 3c 2f 62 3e 29 20 69 73  b>'glob'</b>) is
338b0 20 75 73 65 64 20 69 6e 20 61 20 63 6f 6e 74 65   used in a conte
338c0 78 74 20 77 68 65 72 65 0a 61 6e 20 69 64 65 6e  xt where.an iden
338d0 74 69 66 69 65 72 20 69 73 20 61 6c 6c 6f 77 65  tifier is allowe
338e0 64 20 62 75 74 20 77 68 65 72 65 20 61 20 73 74  d but where a st
338f0 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 73 20  ring literal is 
33900 6e 6f 74 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65  not allowed, the
33910 6e 0a 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 75  n.the token is u
33920 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20  nderstood to be 
33930 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 69 6e  an identifier in
33940 73 74 65 61 64 20 6f 66 20 61 20 73 74 72 69 6e  stead of a strin
33950 67 20 6c 69 74 65 72 61 6c 2e 0a 3c 2f 70 3e 3c  g literal..</p><
33960 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66  /li>..<li><p>^If
33970 20 61 20 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f   a keyword in do
33980 75 62 6c 65 0a 71 75 6f 74 65 73 20 28 65 78 3a  uble.quotes (ex:
33990 20 3c 62 3e 22 6b 65 79 22 3c 2f 62 3e 20 6f 72   <b>"key"</b> or
339a0 20 3c 62 3e 22 67 6c 6f 62 22 3c 2f 62 3e 29 20   <b>"glob"</b>) 
339b0 69 73 20 75 73 65 64 20 69 6e 20 61 20 63 6f 6e  is used in a con
339c0 74 65 78 74 20 77 68 65 72 65 0a 69 74 20 63 61  text where.it ca
339d0 6e 6e 6f 74 20 62 65 20 72 65 73 6f 6c 76 65 64  nnot be resolved
339e0 20 74 6f 20 61 6e 20 69 64 65 6e 74 69 66 69 65   to an identifie
339f0 72 20 62 75 74 20 77 68 65 72 65 20 61 20 73 74  r but where a st
33a00 72 69 6e 67 20 6c 69 74 65 72 61 6c 0a 69 73 20  ring literal.is 
33a10 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e 20 74 68  allowed, then th
33a20 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72  e token is under
33a30 73 74 6f 6f 64 20 74 6f 20 62 65 20 61 20 73 74  stood to be a st
33a40 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 6e 73  ring literal ins
33a50 74 65 61 64 0a 6f 66 20 61 6e 20 69 64 65 6e 74  tead.of an ident
33a60 69 66 69 65 72 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a  ifier.</p></li>.
33a70 3c 2f 75 6c 3e 0a 0a 3c 70 3e 50 72 6f 67 72 61  </ul>..<p>Progra
33a80 6d 6d 65 72 73 20 61 72 65 20 63 61 75 74 69 6f  mmers are cautio
33a90 6e 65 64 20 6e 6f 74 20 74 6f 20 75 73 65 20 74  ned not to use t
33aa0 68 65 20 74 77 6f 20 65 78 63 65 70 74 69 6f 6e  he two exception
33ab0 73 20 64 65 73 63 72 69 62 65 64 20 69 6e 0a 74  s described in.t
33ac0 68 65 20 70 72 65 76 69 6f 75 73 20 62 75 6c 6c  he previous bull
33ad0 65 74 73 2e 20 20 57 65 20 65 6d 70 68 61 73 69  ets.  We emphasi
33ae0 7a 65 20 74 68 61 74 20 74 68 65 79 20 65 78 69  ze that they exi
33af0 73 74 20 6f 6e 6c 79 20 73 6f 20 74 68 61 74 20  st only so that 
33b00 6f 6c 64 0a 61 6e 64 20 69 6c 6c 2d 66 6f 72 6d  old.and ill-form
33b10 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ed SQL statement
33b20 73 20 77 69 6c 6c 20 72 75 6e 20 63 6f 72 72 65  s will run corre
33b30 63 74 6c 79 2e 20 20 46 75 74 75 72 65 20 76 65  ctly.  Future ve
33b40 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65  rsions of.SQLite
33b50 20 6d 69 67 68 74 20 72 61 69 73 65 20 65 72 72   might raise err
33b60 6f 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61  ors instead of a
33b70 63 63 65 70 74 69 6e 67 20 74 68 65 20 6d 61 6c  ccepting the mal
33b80 66 6f 72 6d 65 64 0a 73 74 61 74 65 6d 65 6e 74  formed.statement
33b90 73 20 63 6f 76 65 72 65 64 20 62 79 20 74 68 65  s covered by the
33ba0 20 65 78 63 65 70 74 69 6f 6e 73 20 61 62 6f 76   exceptions abov
33bb0 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69  e.</p>..<p>.SQLi
33bc0 74 65 20 61 64 64 73 20 6e 65 77 20 6b 65 79 77  te adds new keyw
33bd0 6f 72 64 73 20 66 72 6f 6d 20 74 69 6d 65 20 74  ords from time t
33be0 6f 20 74 69 6d 65 20 77 68 65 6e 20 69 74 20 74  o time when it t
33bf0 61 6b 65 73 20 6f 6e 20 6e 65 77 20 66 65 61 74  akes on new feat
33c00 75 72 65 73 2e 0a 53 6f 20 74 6f 20 70 72 65 76  ures..So to prev
33c10 65 6e 74 20 79 6f 75 72 20 63 6f 64 65 20 66 72  ent your code fr
33c20 6f 6d 20 62 65 69 6e 67 20 62 72 6f 6b 65 6e 20  om being broken 
33c30 62 79 20 66 75 74 75 72 65 20 65 6e 68 61 6e 63  by future enhanc
33c40 65 6d 65 6e 74 73 2c 20 79 6f 75 20 73 68 6f 75  ements, you shou
33c50 6c 64 0a 6e 6f 72 6d 61 6c 6c 79 20 71 75 6f 74  ld.normally quot
33c60 65 20 61 6e 79 20 69 64 65 6e 74 69 66 69 65 72  e any identifier
33c70 20 74 68 61 74 20 69 73 20 61 6e 20 45 6e 67 6c   that is an Engl
33c80 69 73 68 20 6c 61 6e 67 75 61 67 65 20 77 6f 72  ish language wor
33c90 64 2c 20 65 76 65 6e 20 69 66 0a 79 6f 75 20 64  d, even if.you d
33ca0 6f 20 6e 6f 74 20 68 61 76 65 20 74 6f 2e 0a 3c  o not have to..<
33cb0 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 6c 69 73  /p>..<p>.The lis
33cc0 74 20 62 65 6c 6f 77 20 73 68 6f 77 73 20 61 6c  t below shows al
33cd0 6c 20 70 6f 73 73 69 62 6c 65 20 6b 65 79 77 6f  l possible keywo
33ce0 72 64 73 20 75 73 65 64 20 62 79 20 61 6e 79 20  rds used by any 
33cf0 62 75 69 6c 64 20 6f 66 0a 53 51 4c 69 74 65 20  build of.SQLite 
33d00 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 5b 63  regardless of [c
33d10 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
33d20 6f 6e 73 5d 2e 20 20 0a 4d 6f 73 74 20 72 65 61  ons].  .Most rea
33d30 73 6f 6e 61 62 6c 65 20 63 6f 6e 66 69 67 75 72  sonable configur
33d40 61 74 69 6f 6e 73 20 75 73 65 20 6d 6f 73 74 20  ations use most 
33d50 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20  or all of these 
33d60 6b 65 79 77 6f 72 64 73 2c 0a 62 75 74 20 73 6f  keywords,.but so
33d70 6d 65 20 6b 65 79 77 6f 72 64 73 20 6d 61 79 20  me keywords may 
33d80 62 65 20 6f 6d 69 74 74 65 64 20 77 68 65 6e 20  be omitted when 
33d90 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 66 65 61  SQL language fea
33da0 74 75 72 65 73 20 61 72 65 0a 64 69 73 61 62 6c  tures are.disabl
33db0 65 64 2e 0a 5e 28 52 65 67 61 72 64 6c 65 73 73  ed..^(Regardless
33dc0 20 6f 66 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d   of the compile-
33dd0 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
33de0 6f 6e 2c 20 61 6e 79 20 69 64 65 6e 74 69 66 69  on, any identifi
33df0 65 72 20 74 68 61 74 20 69 73 20 6e 6f 74 20 6f  er that is not o
33e00 6e 0a 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n.the following 
33e10 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20 5b 6c 6c  <tcl>hd_puts [ll
33e20 65 6e 67 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c  ength $keyword_l
33e30 69 73 74 5d 3c 2f 74 63 6c 3e 20 65 6c 65 6d 65  ist]</tcl> eleme
33e40 6e 74 0a 6c 69 73 74 20 69 73 20 6e 6f 74 20 61  nt.list is not a
33e50 20 6b 65 79 77 6f 72 64 20 74 6f 20 74 68 65 20   keyword to the 
33e60 53 51 4c 20 70 61 72 73 65 72 20 69 6e 20 53 51  SQL parser in SQ
33e70 4c 69 74 65 3a 0a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e  Lite:.</p>..<ol>
33e80 0a 3c 74 63 6c 3e 0a 73 65 74 20 6c 78 20 7b 7d  .<tcl>.set lx {}
33e90 0a 66 6f 72 65 61 63 68 20 77 6f 72 64 20 5b 6c  .foreach word [l
33ea0 73 6f 72 74 20 24 6b 65 79 77 6f 72 64 5f 6c 69  sort $keyword_li
33eb0 73 74 5d 20 7b 0a 20 20 68 64 5f 70 75 74 73 6e  st] {.  hd_putsn
33ec0 6c 20 22 3c 6c 69 3e 24 77 6f 72 64 3c 2f 6c 69  l "<li>$word</li
33ed0 3e 22 0a 7d 0a 68 64 5f 70 75 74 73 6e 6c 20 22  >".}.hd_putsnl "
33ee0 3c 2f 6f 6c 3e 29 5e 22 0a 3c 2f 74 63 6c 3e 0a  </ol>)^".</tcl>.