Documentation Source Text

Hex Artifact Content
Login

Artifact c97b9daf26228a00d976248ca06412de9e31582a:


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 61 6e 64 20 65 61  ion 3.1.3 and ea
19e0: 72 6c 69 65 72 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  rlier.</p>..<tcl
19f0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f 74 68  >hd_fragment oth
1a00: 65 72 61 6c 74 65 72 3c 2f 74 63 6c 3e 0a 3c 68  eralter</tcl>.<h
1a10: 33 3e 4d 61 6b 69 6e 67 20 4f 74 68 65 72 20 4b  3>Making Other K
1a20: 69 6e 64 73 20 4f 66 20 54 61 62 6c 65 20 53 63  inds Of Table Sc
1a30: 68 65 6d 61 20 43 68 61 6e 67 65 73 3c 2f 68 33  hema Changes</h3
1a40: 3e 0a 0a 3c 70 3e 20 54 68 65 20 6f 6e 6c 79 20  >..<p> The only 
1a50: 73 63 68 65 6d 61 20 61 6c 74 65 72 69 6e 67 20  schema altering 
1a60: 63 6f 6d 6d 61 6e 64 73 20 64 69 72 65 63 74 6c  commands directl
1a70: 79 20 73 75 70 70 6f 72 74 65 64 20 62 79 20 53  y supported by S
1a80: 51 4c 69 74 65 20 61 72 65 20 74 68 65 0a 22 72  QLite are the."r
1a90: 65 6e 61 6d 65 20 74 61 62 6c 65 22 20 61 6e 64  ename table" and
1aa0: 20 22 61 64 64 20 63 6f 6c 75 6d 6e 22 20 63 6f   "add column" co
1ab0: 6d 6d 61 6e 64 73 20 73 68 6f 77 6e 20 61 62 6f  mmands shown abo
1ac0: 76 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 61 70  ve.  However, ap
1ad0: 70 6c 69 63 61 74 69 6f 6e 73 0a 63 61 6e 20 6d  plications.can m
1ae0: 61 6b 65 20 6f 74 68 65 72 20 61 72 62 69 74 72  ake other arbitr
1af0: 61 72 79 20 63 68 61 6e 67 65 73 20 74 6f 20 74  ary changes to t
1b00: 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 61 20 74  he format of a t
1b10: 61 62 6c 65 20 75 73 69 6e 67 20 61 20 73 69 6d  able using a sim
1b20: 70 6c 65 0a 73 65 71 75 65 6e 63 65 20 6f 66 20  ple.sequence of 
1b30: 6f 70 65 72 61 74 69 6f 6e 73 2e 0a 54 68 65 20  operations..The 
1b40: 73 74 65 70 73 20 74 6f 20 6d 61 6b 65 20 61 72  steps to make ar
1b50: 62 69 74 72 61 72 79 20 63 68 61 6e 67 65 73 20  bitrary changes 
1b60: 74 6f 20 74 68 65 20 73 63 68 65 6d 61 20 64 65  to the schema de
1b70: 73 69 67 6e 20 6f 66 20 73 6f 6d 65 20 74 61 62  sign of some tab
1b80: 6c 65 20 58 0a 61 72 65 20 61 73 20 66 6f 6c 6c  le X.are as foll
1b90: 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c  ows:..<ol>.<li><
1ba0: 70 3e 0a 49 66 20 66 6f 72 65 69 67 6e 20 6b 65  p>.If foreign ke
1bb0: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72  y constraints ar
1bc0: 65 20 65 6e 61 62 6c 65 64 2c 0a 64 69 73 61 62  e enabled,.disab
1bd0: 6c 65 20 74 68 65 6d 20 75 73 69 6e 67 20 5b 50  le them using [P
1be0: 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65  RAGMA foreign_ke
1bf0: 79 73 20 7c 20 50 52 41 47 4d 41 20 66 6f 72 65  ys | PRAGMA fore
1c00: 69 67 6e 5f 6b 65 79 73 3d 4f 46 46 5d 2e 0a 0a  ign_keys=OFF]...
1c10: 3c 6c 69 3e 3c 70 3e 0a 53 74 61 72 74 20 61 20  <li><p>.Start a 
1c20: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 0a 3c 6c  transaction...<l
1c30: 69 3e 3c 70 3e 0a 52 65 6d 65 6d 62 65 72 20 74  i><p>.Remember t
1c40: 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 61 6c 6c  he format of all
1c50: 20 69 6e 64 65 78 65 73 20 61 6e 64 20 74 72 69   indexes and tri
1c60: 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65 64  ggers associated
1c70: 20 77 69 74 68 20 74 61 62 6c 65 20 58 2e 0a 54   with table X..T
1c80: 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  his information 
1c90: 77 69 6c 6c 20 62 65 20 6e 65 65 64 65 64 20 69  will be needed i
1ca0: 6e 20 73 74 65 70 20 38 20 62 65 6c 6f 77 2e 20  n step 8 below. 
1cb0: 20 4f 6e 65 20 77 61 79 20 74 6f 20 64 6f 20 74   One way to do t
1cc0: 68 69 73 20 69 73 0a 74 6f 20 72 75 6e 20 61 20  his is.to run a 
1cd0: 71 75 65 72 79 20 6c 69 6b 65 20 74 68 65 20 66  query like the f
1ce0: 6f 6c 6c 6f 77 69 6e 67 3a 0a 53 45 4c 45 43 54  ollowing:.SELECT
1cf0: 20 74 79 70 65 2c 20 73 71 6c 20 46 52 4f 4d 20   type, sql FROM 
1d00: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48  sqlite_master WH
1d10: 45 52 45 20 74 62 6c 5f 6e 61 6d 65 3d 27 58 27  ERE tbl_name='X'
1d20: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 55 73 65 20 5b  ...<li><p>.Use [
1d30: 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20 74 6f  CREATE TABLE] to
1d40: 20 63 6f 6e 73 74 72 75 63 74 20 61 20 6e 65 77   construct a new
1d50: 20 74 61 62 6c 65 20 22 6e 65 77 5f 58 22 20 74   table "new_X" t
1d60: 68 61 74 20 69 73 20 69 6e 20 74 68 65 20 64 65  hat is in the de
1d70: 73 69 72 65 64 0a 72 65 76 69 73 65 64 20 66 6f  sired.revised fo
1d80: 72 6d 61 74 20 6f 66 20 74 61 62 6c 65 20 58 2e  rmat of table X.
1d90: 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74    Make sure that
1da0: 20 74 68 65 20 6e 61 6d 65 20 22 6e 65 77 5f 58   the name "new_X
1db0: 22 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6c 6c 69  " does not colli
1dc0: 64 65 0a 77 69 74 68 20 61 6e 79 20 65 78 69 73  de.with any exis
1dd0: 74 69 6e 67 20 74 61 62 6c 65 20 6e 61 6d 65 2c  ting table name,
1de0: 20 6f 66 20 63 6f 75 72 73 65 2e 0a 0a 3c 6c 69   of course...<li
1df0: 3e 3c 70 3e 0a 54 72 61 6e 73 66 65 72 20 63 6f  ><p>.Transfer co
1e00: 6e 74 65 6e 74 20 66 72 6f 6d 20 58 20 69 6e 74  ntent from X int
1e10: 6f 20 6e 65 77 5f 58 20 75 73 69 6e 67 20 61 20  o new_X using a 
1e20: 73 74 61 74 65 6d 65 6e 74 0a 6c 69 6b 65 3a 20  statement.like: 
1e30: 49 4e 53 45 52 54 20 49 4e 54 4f 20 6e 65 77 5f  INSERT INTO new_
1e40: 58 20 53 45 4c 45 43 54 20 2e 2e 2e 20 46 52 4f  X SELECT ... FRO
1e50: 4d 20 58 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 44 72  M X...<li><p>.Dr
1e60: 6f 70 20 74 68 65 20 6f 6c 64 20 74 61 62 6c 65  op the old table
1e70: 20 58 3a 20 20 5b 44 52 4f 50 20 54 41 42 4c 45   X:  [DROP TABLE
1e80: 20 7c 20 44 52 4f 50 20 54 41 42 4c 45 20 58 5d   | DROP TABLE X]
1e90: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 43 68 61 6e 67  ...<li><p>.Chang
1ea0: 65 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 6e 65  e the name of ne
1eb0: 77 5f 58 20 74 6f 20 58 20 75 73 69 6e 67 3a 20  w_X to X using: 
1ec0: 41 4c 54 45 52 20 54 41 42 4c 45 20 6e 65 77 5f  ALTER TABLE new_
1ed0: 58 20 52 45 4e 41 4d 45 20 54 4f 20 58 2e 0a 0a  X RENAME TO X...
1ee0: 3c 6c 69 3e 3c 70 3e 0a 55 73 65 20 5b 43 52 45  <li><p>.Use [CRE
1ef0: 41 54 45 20 49 4e 44 45 58 5d 20 61 6e 64 20 5b  ATE INDEX] and [
1f00: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20  CREATE TRIGGER] 
1f10: 74 6f 20 72 65 63 6f 6e 73 74 72 75 63 74 20 69  to reconstruct i
1f20: 6e 64 65 78 65 73 20 61 6e 64 20 74 72 69 67 67  ndexes and trigg
1f30: 65 72 73 0a 61 73 73 6f 63 69 61 74 65 64 20 77  ers.associated w
1f40: 69 74 68 20 74 61 62 6c 65 20 58 2e 20 20 50 65  ith table X.  Pe
1f50: 72 68 61 70 73 20 75 73 65 20 74 68 65 20 6f 6c  rhaps use the ol
1f60: 64 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20  d format of the 
1f70: 74 72 69 67 67 65 72 73 20 61 6e 64 0a 69 6e 64  triggers and.ind
1f80: 65 78 65 73 20 73 61 76 65 64 20 66 72 6f 6d 20  exes saved from 
1f90: 73 74 65 70 20 33 20 61 62 6f 76 65 20 61 73 20  step 3 above as 
1fa0: 61 20 67 75 69 64 65 2c 20 6d 61 6b 69 6e 67 20  a guide, making 
1fb0: 63 68 61 6e 67 65 73 20 61 73 20 61 70 70 72 6f  changes as appro
1fc0: 70 72 69 61 74 65 0a 66 6f 72 20 74 68 65 20 61  priate.for the a
1fd0: 6c 74 65 72 61 74 69 6f 6e 2e 0a 0a 3c 6c 69 3e  lteration...<li>
1fe0: 3c 70 3e 49 66 20 61 6e 79 20 76 69 65 77 73 20  <p>If any views 
1ff0: 72 65 66 65 72 20 74 6f 20 74 61 62 6c 65 20 58  refer to table X
2000: 20 69 6e 20 61 20 77 61 79 20 74 68 61 74 20 69   in a way that i
2010: 73 20 61 66 66 65 63 74 65 64 20 62 79 20 74 68  s affected by th
2020: 65 0a 73 63 68 65 6d 61 20 63 68 61 6e 67 65 2c  e.schema change,
2030: 20 74 68 65 6e 20 64 72 6f 70 20 74 68 6f 73 65   then drop those
2040: 20 76 69 65 77 73 20 75 73 69 6e 67 20 5b 44 52   views using [DR
2050: 4f 50 20 56 49 45 57 5d 20 61 6e 64 20 72 65 63  OP VIEW] and rec
2060: 72 65 61 74 65 20 74 68 65 6d 0a 77 69 74 68 20  reate them.with 
2070: 77 68 61 74 65 76 65 72 20 63 68 61 6e 67 65 73  whatever changes
2080: 20 61 72 65 20 6e 65 63 65 73 73 61 72 79 20 74   are necessary t
2090: 6f 20 61 63 63 6f 6d 6d 6f 64 61 74 65 20 74 68  o accommodate th
20a0: 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 0a  e schema change.
20b0: 75 73 69 6e 67 20 5b 43 52 45 41 54 45 20 56 49  using [CREATE VI
20c0: 45 57 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 49 66  EW]...<li><p>.If
20d0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
20e0: 73 74 72 61 69 6e 74 73 20 77 65 72 65 20 6f 72  straints were or
20f0: 69 67 69 6e 61 6c 6c 79 20 65 6e 61 62 6c 65 64  iginally enabled
2100: 0a 74 68 65 6e 20 72 75 6e 20 5b 50 52 41 47 4d  .then run [PRAGM
2110: 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68  A foreign_key_ch
2120: 65 63 6b 5d 20 74 6f 20 76 65 72 69 66 79 20 74  eck] to verify t
2130: 68 61 74 20 74 68 65 20 73 63 68 65 6d 61 0a 63  hat the schema.c
2140: 68 61 6e 67 65 20 64 69 64 20 6e 6f 74 20 62 72  hange did not br
2150: 65 61 6b 20 61 6e 79 20 66 6f 72 65 69 67 6e 20  eak any foreign 
2160: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e  key constraints.
2170: 0a 0a 0a 3c 6c 69 3e 3c 70 3e 0a 43 6f 6d 6d 69  ...<li><p>.Commi
2180: 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  t the transactio
2190: 6e 20 73 74 61 72 74 65 64 20 69 6e 20 73 74 65  n started in ste
21a0: 70 20 32 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 49 66  p 2...<li><p>.If
21b0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 63 6f   foreign keys co
21c0: 6e 73 74 72 61 69 6e 74 73 20 77 65 72 65 20 6f  nstraints were o
21d0: 72 69 67 69 6e 61 6c 6c 79 20 65 6e 61 62 6c 65  riginally enable
21e0: 64 2c 20 72 65 65 6e 61 62 6c 65 20 74 68 65 6d  d, reenable them
21f0: 20 6e 6f 77 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e   now..</ol>..<p>
2200: 54 68 65 20 70 72 6f 63 65 64 75 72 65 20 61 62  The procedure ab
2210: 6f 76 65 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c  ove is completel
2220: 79 20 67 65 6e 65 72 61 6c 20 61 6e 64 20 77 69  y general and wi
2230: 6c 6c 20 77 6f 72 6b 20 65 76 65 6e 20 69 66 20  ll work even if 
2240: 74 68 65 0a 73 63 68 65 6d 61 20 63 68 61 6e 67  the.schema chang
2250: 65 20 63 61 75 73 65 73 20 74 68 65 20 69 6e 66  e causes the inf
2260: 6f 72 6d 61 74 69 6f 6e 20 73 74 6f 72 65 64 20  ormation stored 
2270: 69 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  in the table to 
2280: 63 68 61 6e 67 65 2e 0a 53 6f 20 74 68 65 20 66  change..So the f
2290: 75 6c 6c 20 70 72 6f 63 65 64 75 72 65 20 61 62  ull procedure ab
22a0: 6f 76 65 20 69 73 20 61 70 70 72 6f 70 72 69 61  ove is appropria
22b0: 74 65 20 66 6f 72 20 64 72 6f 70 70 69 6e 67 20  te for dropping 
22c0: 61 20 63 6f 6c 75 6d 6e 2c 0a 63 68 61 6e 67 69  a column,.changi
22d0: 6e 67 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20  ng the order of 
22e0: 63 6f 6c 75 6d 6e 73 2c 20 61 64 64 69 6e 67 20  columns, adding 
22f0: 6f 72 20 72 65 6d 6f 76 69 6e 67 20 61 20 55 4e  or removing a UN
2300: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 0a  IQUE constraint.
2310: 6f 72 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  or PRIMARY KEY, 
2320: 61 64 64 69 6e 67 20 43 48 45 43 4b 20 6f 72 20  adding CHECK or 
2330: 46 4f 52 45 49 47 4e 20 4b 45 59 20 6f 72 20 4e  FOREIGN KEY or N
2340: 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
2350: 6e 74 73 2c 0a 6f 72 20 63 68 61 6e 67 69 6e 67  nts,.or changing
2360: 20 74 68 65 20 64 61 74 61 74 79 70 65 20 66 6f   the datatype fo
2370: 72 20 61 20 63 6f 6c 75 6d 6e 2c 20 66 6f 72 20  r a column, for 
2380: 65 78 61 6d 70 6c 65 2e 20 20 48 6f 77 65 76 65  example.  Howeve
2390: 72 2c 20 61 20 73 69 6d 70 6c 65 72 0a 61 6e 64  r, a simpler.and
23a0: 20 66 61 73 74 65 72 20 70 72 6f 63 65 64 75 72   faster procedur
23b0: 65 20 63 61 6e 20 6f 70 74 69 6f 6e 61 6c 6c 79  e can optionally
23c0: 20 62 65 20 75 73 65 64 20 66 6f 72 0a 73 6f 6d   be used for.som
23d0: 65 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 64  e changes that d
23e0: 6f 20 6e 6f 20 61 66 66 65 63 74 20 74 68 65 20  o no affect the 
23f0: 6f 6e 2d 64 69 73 6b 20 63 6f 6e 74 65 6e 74 20  on-disk content 
2400: 69 6e 20 61 6e 79 20 77 61 79 2e 0a 54 68 65 20  in any way..The 
2410: 66 6f 6c 6c 6f 77 69 6e 67 20 73 69 6d 70 6c 65  following simple
2420: 72 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 61  r procedure is a
2430: 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 72  ppropriate for r
2440: 65 6d 6f 76 69 6e 67 0a 43 48 45 43 4b 20 6f 72  emoving.CHECK or
2450: 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 6f 72 20   FOREIGN KEY or 
2460: 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
2470: 69 6e 74 73 2c 0a 72 65 6e 61 6d 69 6e 67 20 63  ints,.renaming c
2480: 6f 6c 75 6d 6e 73 2c 20 6f 72 20 61 64 64 69 6e  olumns, or addin
2490: 67 20 6f 72 20 72 65 6d 6f 76 69 6e 67 20 6f 72  g or removing or
24a0: 20 63 68 61 6e 67 69 6e 67 20 64 65 66 61 75 6c   changing defaul
24b0: 74 20 76 61 6c 75 65 73 20 6f 6e 0a 61 20 63 6f  t values on.a co
24c0: 6c 75 6d 6e 2e 0a 0a 3c 6f 6c 3e 0a 3c 6c 49 3e  lumn...<ol>.<lI>
24d0: 3c 70 3e 20 53 74 61 72 74 20 61 20 74 72 61 6e  <p> Start a tran
24e0: 73 61 63 74 69 6f 6e 2e 0a 0a 3c 6c 69 3e 3c 70  saction...<li><p
24f0: 3e 20 52 75 6e 20 5b 50 52 41 47 4d 41 20 73 63  > Run [PRAGMA sc
2500: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 5d 20 74 6f  hema_version] to
2510: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 63   determine the c
2520: 75 72 72 65 6e 74 20 73 63 68 65 6d 61 0a 76 65  urrent schema.ve
2530: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 2e 20 20 54  rsion number.  T
2540: 68 69 73 20 6e 75 6d 62 65 72 20 77 69 6c 6c 20  his number will 
2550: 62 65 20 6e 65 65 64 65 64 20 66 6f 72 20 73 74  be needed for st
2560: 65 70 20 36 20 62 65 6c 6f 77 2e 0a 0a 3c 6c 69  ep 6 below...<li
2570: 3e 3c 70 3e 20 41 63 74 69 76 61 74 65 20 73 63  ><p> Activate sc
2580: 68 65 6d 61 20 65 64 69 74 69 6e 67 20 75 73 69  hema editing usi
2590: 6e 67 20 0a 5b 50 52 41 47 4d 41 20 77 72 69 74  ng .[PRAGMA writ
25a0: 61 62 6c 65 5f 73 63 68 65 6d 61 20 7c 20 50 52  able_schema | PR
25b0: 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63  AGMA writable_sc
25c0: 68 65 6d 61 3d 4f 4e 5d 2e 0a 0a 3c 6c 69 3e 3c  hema=ON]...<li><
25d0: 70 3e 20 52 75 6e 20 61 6e 20 5b 55 50 44 41 54  p> Run an [UPDAT
25e0: 45 5d 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  E] statement to 
25f0: 63 68 61 6e 67 65 20 74 68 65 20 64 65 66 69 6e  change the defin
2600: 69 74 69 6f 6e 20 6f 66 20 74 61 62 6c 65 20 58  ition of table X
2610: 0a 69 6e 20 74 68 65 20 5b 73 71 6c 69 74 65 5f  .in the [sqlite_
2620: 6d 61 73 74 65 72 20 74 61 62 6c 65 5d 3a 20 0a  master table]: .
2630: 55 50 44 41 54 45 20 73 71 6c 69 74 65 5f 6d 61  UPDATE sqlite_ma
2640: 73 74 65 72 20 53 45 54 20 73 71 6c 3d 2e 2e 2e  ster SET sql=...
2650: 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 61 62   WHERE type='tab
2660: 6c 65 27 20 41 4e 44 20 6e 61 6d 65 3d 27 58 27  le' AND name='X'
2670: 3b 0a 3c 70 3e 3c 65 6d 3e 43 61 75 74 69 6f 6e  ;.<p><em>Caution
2680: 3a 3c 2f 65 6d 3e 20 20 4d 61 6b 69 6e 67 20 61  :</em>  Making a
2690: 20 63 68 61 6e 67 65 20 74 6f 20 74 68 65 20 73   change to the s
26a0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
26b0: 6c 65 20 6c 69 6b 65 20 74 68 69 73 20 77 69 6c  le like this wil
26c0: 6c 0a 72 65 6e 64 65 72 20 74 68 65 20 64 61 74  l.render the dat
26d0: 61 62 61 73 65 20 63 6f 72 72 75 70 74 20 61 6e  abase corrupt an
26e0: 64 20 75 6e 72 65 61 64 61 62 6c 65 20 69 66 20  d unreadable if 
26f0: 74 68 65 20 63 68 61 6e 67 65 20 63 6f 6e 74 61  the change conta
2700: 69 6e 73 0a 61 20 73 79 6e 74 61 78 20 65 72 72  ins.a syntax err
2710: 6f 72 2e 20 20 49 74 20 69 73 20 73 75 67 67 65  or.  It is sugge
2720: 73 74 65 64 20 74 68 61 74 20 63 61 72 65 66 75  sted that carefu
2730: 6c 20 74 65 73 74 69 6e 67 20 6f 66 20 74 68 65  l testing of the
2740: 20 55 50 44 41 54 45 0a 73 74 61 74 65 6d 65 6e   UPDATE.statemen
2750: 74 20 62 65 20 64 6f 6e 65 20 6f 6e 20 61 20 73  t be done on a s
2760: 65 70 61 72 61 74 65 20 62 6c 61 6e 6b 20 64 61  eparate blank da
2770: 74 61 62 61 73 65 20 70 72 69 6f 72 20 74 6f 20  tabase prior to 
2780: 75 73 69 6e 67 20 69 74 20 6f 6e 0a 61 20 64 61  using it on.a da
2790: 74 61 62 61 73 65 20 63 6f 6e 74 61 69 6e 69 6e  tabase containin
27a0: 67 20 69 6d 70 6f 72 74 61 6e 74 20 64 61 74 61  g important data
27b0: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 49 66 20 74 68  ...<li><p> If th
27c0: 65 20 63 68 61 6e 67 65 20 74 6f 20 74 61 62 6c  e change to tabl
27d0: 65 20 58 20 61 6c 73 6f 20 61 66 66 65 63 74 73  e X also affects
27e0: 20 6f 74 68 65 72 20 74 61 62 6c 65 73 20 6f 72   other tables or
27f0: 20 69 6e 64 65 78 65 73 20 6f 72 0a 74 72 69 67   indexes or.trig
2800: 67 65 72 73 20 61 72 65 20 76 69 65 77 73 20 77  gers are views w
2810: 69 74 68 69 6e 20 73 63 68 65 6d 61 2c 20 74 68  ithin schema, th
2820: 65 6e 20 72 75 6e 20 5b 55 50 44 41 54 45 5d 20  en run [UPDATE] 
2830: 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 6d 6f  statements to mo
2840: 64 69 66 79 0a 74 68 6f 73 65 20 6f 74 68 65 72  dify.those other
2850: 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65 73 20   tables indexes 
2860: 61 6e 64 20 76 69 65 77 73 20 74 6f 6f 2e 20 20  and views too.  
2870: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 66 20  For example, if 
2880: 74 68 65 20 6e 61 6d 65 20 6f 66 0a 61 20 63 6f  the name of.a co
2890: 6c 75 6d 6e 20 63 68 61 6e 67 65 73 2c 20 61 6c  lumn changes, al
28a0: 6c 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f  l FOREIGN KEY co
28b0: 6e 73 74 72 61 69 6e 74 73 2c 20 74 72 69 67 67  nstraints, trigg
28c0: 65 72 73 2c 20 69 6e 64 65 78 65 73 2c 20 61 6e  ers, indexes, an
28d0: 64 0a 76 69 65 77 73 20 74 68 61 74 20 72 65 66  d.views that ref
28e0: 65 72 20 74 6f 20 74 68 61 74 20 63 6f 6c 75 6d  er to that colum
28f0: 6e 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69  n must be modifi
2900: 65 64 2e 0a 3c 70 3e 3c 65 6d 3e 43 61 75 74 69  ed..<p><em>Cauti
2910: 6f 6e 3a 3c 2f 65 6d 3e 20 20 4f 6e 63 65 20 61  on:</em>  Once a
2920: 67 61 69 6e 2c 20 6d 61 6b 69 6e 67 20 63 68 61  gain, making cha
2930: 6e 67 65 73 20 74 6f 20 74 68 65 20 73 71 6c 69  nges to the sqli
2940: 74 65 5f 6d 61 73 74 65 72 20 0a 74 61 62 6c 65  te_master .table
2950: 20 6c 69 6b 65 20 74 68 69 73 20 77 69 6c 6c 20   like this will 
2960: 72 65 6e 64 65 72 20 74 68 65 20 64 61 74 61 62  render the datab
2970: 61 73 65 20 63 6f 72 72 75 70 74 20 61 6e 64 20  ase corrupt and 
2980: 75 6e 72 65 61 64 61 62 6c 65 20 69 66 20 74 68  unreadable if th
2990: 65 20 0a 63 68 61 6e 67 65 20 63 6f 6e 74 61 69  e .change contai
29a0: 6e 73 20 61 6e 20 65 72 72 6f 72 2e 20 20 43 61  ns an error.  Ca
29b0: 72 65 66 75 6c 6c 79 20 74 65 73 74 20 6f 66 20  refully test of 
29c0: 74 68 69 73 20 65 6e 74 69 72 65 20 70 72 6f 63  this entire proc
29d0: 65 64 75 72 65 0a 6f 6e 20 61 20 73 65 70 61 72  edure.on a separ
29e0: 61 74 65 20 74 65 73 74 20 64 61 74 61 62 61 73  ate test databas
29f0: 65 20 70 72 69 6f 72 20 74 6f 20 75 73 69 6e 67  e prior to using
2a00: 20 69 74 20 6f 6e 0a 61 20 64 61 74 61 62 61 73   it on.a databas
2a10: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 6d 70  e containing imp
2a20: 6f 72 74 61 6e 74 20 64 61 74 61 20 61 6e 64 2f  ortant data and/
2a30: 6f 72 20 6d 61 6b 65 20 62 61 63 6b 75 70 20 63  or make backup c
2a40: 6f 70 69 65 73 20 6f 66 0a 69 6d 70 6f 72 74 61  opies of.importa
2a50: 6e 74 20 64 61 74 61 62 61 73 65 73 20 70 72 69  nt databases pri
2a60: 6f 72 20 74 6f 20 72 75 6e 6e 69 6e 67 20 74 68  or to running th
2a70: 69 73 20 70 72 6f 63 65 64 75 72 65 2e 0a 0a 3c  is procedure...<
2a80: 6c 69 3e 3c 70 3e 20 49 6e 63 72 65 6d 65 6e 74  li><p> Increment
2a90: 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   the schema vers
2aa0: 69 6f 6e 20 6e 75 6d 62 65 72 20 75 73 69 6e 67  ion number using
2ab0: 0a 5b 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f  .[PRAGMA schema_
2ac0: 76 65 72 73 69 6f 6e 20 7c 20 50 52 41 47 4d 41  version | PRAGMA
2ad0: 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3d   schema_version=
2ae0: 58 5d 20 77 68 65 72 65 20 58 20 69 73 20 6f 6e  X] where X is on
2af0: 65 0a 6d 6f 72 65 20 74 68 61 6e 20 74 68 65 20  e.more than the 
2b00: 6f 6c 64 20 73 63 68 65 6d 61 20 76 65 72 73 69  old schema versi
2b10: 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 75 6e 64 20  on number found 
2b20: 69 6e 20 73 74 65 70 20 32 20 61 62 6f 76 65 2e  in step 2 above.
2b30: 0a 0a 3c 6c 69 3e 3c 70 3e 20 44 69 73 61 62 6c  ..<li><p> Disabl
2b40: 65 20 73 63 68 65 6d 61 20 65 64 69 74 69 6e 67  e schema editing
2b50: 20 75 73 69 6e 67 20 0a 5b 50 52 41 47 4d 41 20   using .[PRAGMA 
2b60: 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 20  writable_schema 
2b70: 7c 20 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c  | PRAGMA writabl
2b80: 65 5f 73 63 68 65 6d 61 3d 4f 46 46 5d 2e 0a 0a  e_schema=OFF]...
2b90: 3c 6c 69 3e 3c 70 3e 20 28 4f 70 74 69 6f 6e 61  <li><p> (Optiona
2ba0: 6c 29 20 52 75 6e 20 5b 50 52 41 47 4d 41 20 69  l) Run [PRAGMA i
2bb0: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 5d 20  ntegrity_check] 
2bc0: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
2bd0: 68 65 0a 73 63 68 65 6d 61 20 63 68 61 6e 67 65  he.schema change
2be0: 73 20 64 69 64 20 6e 6f 74 20 64 61 6d 61 67 65  s did not damage
2bf0: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 0a   the database...
2c00: 3c 6c 69 3e 3c 70 3e 20 43 6f 6d 6d 69 74 20 74  <li><p> Commit t
2c10: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  he transaction s
2c20: 74 61 72 74 65 64 20 6f 6e 20 73 74 65 70 20 31  tarted on step 1
2c30: 20 61 62 6f 76 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c   above..</ol>..<
2c40: 70 3e 49 66 20 73 6f 6d 65 20 66 75 74 75 72 65  p>If some future
2c50: 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69   version of SQLi
2c60: 74 65 20 61 64 64 73 20 6e 65 77 20 41 4c 54 45  te adds new ALTE
2c70: 52 20 54 41 42 4c 45 20 63 61 70 61 62 69 6c 69  R TABLE capabili
2c80: 74 69 65 73 2c 20 0a 74 68 6f 73 65 20 63 61 70  ties, .those cap
2c90: 61 62 69 6c 69 74 69 65 73 20 77 69 6c 6c 20 76  abilities will v
2ca0: 65 72 79 20 6c 69 6b 65 6c 79 20 75 73 65 20 6f  ery likely use o
2cb0: 6e 65 20 6f 66 20 74 68 65 20 74 77 6f 20 70 72  ne of the two pr
2cc0: 6f 63 65 64 75 72 65 73 0a 6f 75 74 6c 69 6e 65  ocedures.outline
2cd0: 64 20 61 62 6f 76 65 2e 0a 0a 3c 74 63 6c 3e 0a  d above...<tcl>.
2ce0: 23 20 20 4f 6e 65 20 6f 66 20 74 68 65 20 72 65  #  One of the re
2cf0: 61 73 6f 6e 73 20 74 68 61 74 0a 23 20 53 51 4c  asons that.# SQL
2d00: 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 63 75 72  ite does not cur
2d10: 72 65 6e 74 6c 79 20 73 75 70 70 6f 72 74 20 6d  rently support m
2d20: 6f 72 65 20 41 4c 54 45 52 20 54 41 42 4c 45 20  ore ALTER TABLE 
2d30: 63 61 70 61 62 69 6c 69 74 69 65 73 20 69 73 20  capabilities is 
2d40: 74 68 61 74 0a 23 20 74 68 65 20 70 72 6f 63 65  that.# the proce
2d50: 64 75 72 65 20 73 68 6f 77 6e 20 61 62 6f 76 65  dure shown above
2d60: 20 69 73 20 64 69 66 66 69 63 75 6c 74 20 74 6f   is difficult to
2d70: 20 61 75 74 6f 6d 61 74 65 20 66 6f 72 20 61 6e   automate for an
2d80: 20 61 72 62 69 74 72 61 72 79 20 73 63 68 65 6d   arbitrary schem
2d90: 61 2e 0a 23 20 50 61 72 74 69 63 75 6c 61 72 6c  a..# Particularl
2da0: 79 20 74 72 6f 75 62 6c 65 73 6f 6d 65 20 61 72  y troublesome ar
2db0: 65 61 73 20 61 72 65 20 69 64 65 6e 74 69 66 79  eas are identify
2dc0: 69 6e 67 20 61 6c 6c 20 76 69 65 77 73 20 61 73  ing all views as
2dd0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 23 20  sociated with.# 
2de0: 74 61 62 6c 65 20 58 20 69 6e 20 73 74 65 70 20  table X in step 
2df0: 31 20 61 6e 64 20 63 72 65 61 74 69 6e 67 20 6e  1 and creating n
2e00: 65 77 20 76 69 65 77 73 20 61 6e 64 20 74 72 69  ew views and tri
2e10: 67 67 65 72 73 20 74 68 61 74 20 61 72 65 20 63  ggers that are c
2e20: 6f 6d 70 61 74 69 62 6c 65 0a 23 20 77 69 74 68  ompatible.# with
2e30: 20 74 68 65 20 61 6c 74 65 72 65 64 20 73 63 68   the altered sch
2e40: 65 6d 61 20 66 6f 72 20 74 61 62 6c 65 20 58 20  ema for table X 
2e50: 69 6e 20 73 74 65 70 20 36 2e 20 20 49 74 20 69  in step 6.  It i
2e60: 73 20 61 20 74 72 69 63 6b 79 20 62 75 74 20 73  s a tricky but s
2e70: 6f 6c 76 61 62 6c 65 0a 23 20 70 72 6f 62 6c 65  olvable.# proble
2e80: 6d 20 74 6f 20 63 72 65 61 74 65 20 63 6f 64 65  m to create code
2e90: 20 74 68 61 74 20 77 69 6c 6c 20 70 65 72 66 6f   that will perfo
2ea0: 72 6d 20 74 68 65 20 73 74 65 70 73 20 61 62 6f  rm the steps abo
2eb0: 76 65 20 0a 23 20 66 6f 72 20 22 72 65 61 73 6f  ve .# for "reaso
2ec0: 6e 61 62 6c 65 22 20 73 63 68 65 6d 61 73 20 63  nable" schemas c
2ed0: 6f 6d 6d 6f 6e 6c 79 20 66 6f 75 6e 64 20 69 6e  ommonly found in
2ee0: 20 70 72 61 63 74 69 63 65 2e 20 20 0a 23 20 42   practice.  .# B
2ef0: 75 74 20 74 68 65 72 65 20 65 78 69 73 74 20 6d  ut there exist m
2f00: 61 6c 65 76 6f 6c 65 6e 74 20 73 63 68 65 6d 61  alevolent schema
2f10: 73 20 66 6f 72 20 77 68 69 63 68 0a 23 20 74 68  s for which.# th
2f20: 65 73 65 20 73 74 65 70 73 20 61 72 65 20 6d 61  ese steps are ma
2f30: 64 64 65 6e 69 6e 67 6c 79 20 64 69 66 66 69 63  ddeningly diffic
2f40: 75 6c 74 20 74 6f 20 64 6f 20 63 6f 72 72 65 63  ult to do correc
2f50: 74 6c 79 2e 20 20 52 61 74 68 65 72 20 74 68 61  tly.  Rather tha
2f60: 6e 20 63 72 65 61 74 65 0a 23 20 41 4c 54 45 52  n create.# ALTER
2f70: 20 54 41 42 4c 45 20 66 65 61 74 75 72 65 73 20   TABLE features 
2f80: 74 68 61 74 20 77 6f 72 6b 20 63 6f 72 72 65 63  that work correc
2f90: 74 6c 79 20 39 39 2e 39 25 20 6f 66 20 74 68 65  tly 99.9% of the
2fa0: 20 74 69 6d 65 20 62 75 74 20 70 6f 73 73 69 62   time but possib
2fb0: 6c 79 0a 23 20 63 6f 72 72 75 70 74 20 74 68 65  ly.# corrupt the
2fc0: 20 73 63 68 65 6d 61 20 6f 6e 20 74 68 65 20 6f   schema on the o
2fd0: 74 68 65 72 20 30 2e 31 25 2c 20 74 68 65 20 53  ther 0.1%, the S
2fe0: 51 4c 69 74 65 20 64 65 76 65 6c 6f 70 65 72 73  QLite developers
2ff0: 20 68 61 76 65 20 64 65 63 69 64 65 64 0a 23 20   have decided.# 
3000: 74 6f 20 70 75 73 68 20 74 68 65 20 70 72 6f 62  to push the prob
3010: 6c 65 6d 20 69 6e 74 6f 20 74 68 65 20 61 70 70  lem into the app
3020: 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 2c  lication domain,
3030: 20 77 68 65 72 65 20 69 74 20 69 73 20 6d 75 63   where it is muc
3040: 68 20 65 61 73 69 65 72 0a 23 20 74 6f 20 73 6f  h easier.# to so
3050: 6c 76 65 2e 0a 3c 2f 74 63 6c 3e 0a 0a 0a 3c 74  lve..</tcl>...<t
3060: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
3070: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65 63 74 69 6f 6e 20 7b 41 4e 41 4c  ##.Section {ANAL
30c0: 59 5a 45 7d 20 61 6e 61 6c 79 7a 65 20 41 4e 41  YZE} analyze ANA
30d0: 4c 59 5a 45 0a 0a 52 65 63 75 72 73 69 76 65 42  LYZE..RecursiveB
30e0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61 6e 61  ubbleDiagram ana
30f0: 6c 79 7a 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  lyze-stmt.</tcl>
3100: 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 4e 41 4c 59  ..<p> ^The ANALY
3110: 5a 45 20 63 6f 6d 6d 61 6e 64 20 67 61 74 68 65  ZE command gathe
3120: 72 73 20 73 74 61 74 69 73 74 69 63 73 20 61 62  rs statistics ab
3130: 6f 75 74 20 74 61 62 6c 65 73 20 61 6e 64 0a 69  out tables and.i
3140: 6e 64 69 63 65 73 20 61 6e 64 20 73 74 6f 72 65  ndices and store
3150: 73 20 74 68 65 20 63 6f 6c 6c 65 63 74 65 64 20  s the collected 
3160: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69 6e 20 5b  information.in [
3170: 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 73 5d  internal tables]
3180: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
3190: 20 77 68 65 72 65 20 74 68 65 20 71 75 65 72 79   where the query
31a0: 20 6f 70 74 69 6d 69 7a 65 72 20 63 61 6e 0a 61   optimizer can.a
31b0: 63 63 65 73 73 20 74 68 65 20 69 6e 66 6f 72 6d  ccess the inform
31c0: 61 74 69 6f 6e 20 61 6e 64 20 75 73 65 20 69 74  ation and use it
31d0: 20 74 6f 20 68 65 6c 70 20 6d 61 6b 65 20 62 65   to help make be
31e0: 74 74 65 72 20 71 75 65 72 79 20 70 6c 61 6e 6e  tter query plann
31f0: 69 6e 67 20 63 68 6f 69 63 65 73 2e 0a 5e 49 66  ing choices..^If
3200: 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 20 61 72   no arguments ar
3210: 65 20 67 69 76 65 6e 2c 20 61 6c 6c 20 61 74 74  e given, all att
3220: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20  ached databases 
3230: 61 72 65 0a 61 6e 61 6c 79 7a 65 64 2e 20 20 5e  are.analyzed.  ^
3240: 49 66 20 61 20 73 63 68 65 6d 61 20 6e 61 6d 65  If a schema name
3250: 20 69 73 20 67 69 76 65 6e 20 61 73 20 74 68 65   is given as the
3260: 20 61 72 67 75 6d 65 6e 74 2c 20 74 68 65 6e 20   argument, then 
3270: 61 6c 6c 20 74 61 62 6c 65 73 0a 61 6e 64 20 69  all tables.and i
3280: 6e 64 69 63 65 73 20 69 6e 20 74 68 61 74 20 6f  ndices in that o
3290: 6e 65 20 64 61 74 61 62 61 73 65 20 61 72 65 20  ne database are 
32a0: 61 6e 61 6c 79 7a 65 64 2e 20 20 0a 5e 49 66 20  analyzed.  .^If 
32b0: 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20  the argument is 
32c0: 61 20 74 61 62 6c 65 20 6e 61 6d 65 2c 20 74 68  a table name, th
32d0: 65 6e 20 6f 6e 6c 79 20 74 68 61 74 20 74 61 62  en only that tab
32e0: 6c 65 20 61 6e 64 20 74 68 65 0a 69 6e 64 69 63  le and the.indic
32f0: 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  es associated wi
3300: 74 68 20 74 68 61 74 20 74 61 62 6c 65 20 61 72  th that table ar
3310: 65 20 61 6e 61 6c 79 7a 65 64 2e 20 20 5e 49 66  e analyzed.  ^If
3320: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 0a 69 73   the argument.is
3330: 20 61 6e 20 69 6e 64 65 78 20 6e 61 6d 65 2c 20   an index name, 
3340: 74 68 65 6e 20 6f 6e 6c 79 20 74 68 61 74 20 6f  then only that o
3350: 6e 65 20 69 6e 64 65 78 20 69 73 20 61 6e 61 6c  ne index is anal
3360: 79 7a 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e  yzed.</p>..<p> ^
3370: 54 68 65 20 64 65 66 61 75 6c 74 20 69 6d 70 6c  The default impl
3380: 65 6d 65 6e 74 61 74 69 6f 6e 20 73 74 6f 72 65  ementation store
3390: 73 20 61 6c 6c 20 73 74 61 74 69 73 74 69 63 73  s all statistics
33a0: 20 69 6e 20 61 20 73 69 6e 67 6c 65 0a 74 61 62   in a single.tab
33b0: 6c 65 20 6e 61 6d 65 64 20 22 5b 73 71 6c 69 74  le named "[sqlit
33c0: 65 5f 73 74 61 74 31 5d 22 2e 20 20 5e 49 66 20  e_stat1]".  ^If 
33d0: 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c  SQLite is compil
33e0: 65 64 20 77 69 74 68 20 74 68 65 0a 5b 53 51 4c  ed with the.[SQL
33f0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
3400: 5d 20 6f 70 74 69 6f 6e 20 61 6e 64 20 77 69 74  ] option and wit
3410: 68 6f 75 74 20 74 68 65 20 5b 53 51 4c 49 54 45  hout the [SQLITE
3420: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 0a 6f  _ENABLE_STAT4].o
3430: 70 74 69 6f 6e 2c 20 74 68 65 6e 20 61 64 64 69  ption, then addi
3440: 74 69 6f 6e 61 6c 20 68 69 73 74 6f 67 72 61 6d  tional histogram
3450: 20 64 61 74 61 20 69 73 0a 63 6f 6c 6c 65 63 74   data is.collect
3460: 65 64 20 61 6e 64 20 73 74 6f 72 65 64 20 69 6e  ed and stored in
3470: 20 5b 73 71 6c 69 74 65 5f 73 74 61 74 33 5d 2e   [sqlite_stat3].
3480: 0a 20 5e 49 66 20 53 51 4c 69 74 65 20 69 73 20  . ^If SQLite is 
3490: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68  compiled with th
34a0: 65 0a 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  e.[SQLITE_ENABLE
34b0: 5f 53 54 41 54 34 5d 20 6f 70 74 69 6f 6e 2c 20  _STAT4] option, 
34c0: 74 68 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20  then additional 
34d0: 68 69 73 74 6f 67 72 61 6d 20 64 61 74 61 20 69  histogram data i
34e0: 73 0a 63 6f 6c 6c 65 63 74 65 64 20 61 6e 64 20  s.collected and 
34f0: 73 74 6f 72 65 64 20 69 6e 20 5b 73 71 6c 69 74  stored in [sqlit
3500: 65 5f 73 74 61 74 34 5d 2e 0a 4f 6c 64 65 72 20  e_stat4]..Older 
3510: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
3520: 74 65 20 77 6f 75 6c 64 20 6d 61 6b 65 20 75 73  te would make us
3530: 65 20 6f 66 20 74 68 65 20 5b 73 71 6c 69 74 65  e of the [sqlite
3540: 5f 73 74 61 74 32 5d 20 74 61 62 6c 65 0a 77 68  _stat2] table.wh
3550: 65 6e 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  en compiled with
3560: 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   [SQLITE_ENABLE_
3570: 53 54 41 54 32 5d 20 62 75 74 20 61 6c 6c 20 72  STAT2] but all r
3580: 65 63 65 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f  ecent versions o
3590: 66 0a 53 51 4c 69 74 65 20 69 67 6e 6f 72 65 20  f.SQLite ignore 
35a0: 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32  the sqlite_stat2
35b0: 20 74 61 62 6c 65 2e 0a 46 75 74 75 72 65 20 65   table..Future e
35c0: 6e 68 61 6e 63 65 6d 65 6e 74 73 20 6d 61 79 20  nhancements may 
35d0: 63 72 65 61 74 65 0a 61 64 64 69 74 69 6f 6e 61  create.additiona
35e0: 6c 20 5b 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c  l [internal tabl
35f0: 65 73 5d 20 77 69 74 68 20 74 68 65 20 73 61 6d  es] with the sam
3600: 65 20 6e 61 6d 65 20 70 61 74 74 65 72 6e 20 65  e name pattern e
3610: 78 63 65 70 74 20 77 69 74 68 0a 66 69 6e 61 6c  xcept with.final
3620: 20 64 69 67 69 74 20 6c 61 72 67 65 72 20 74 68   digit larger th
3630: 61 6e 20 22 34 22 2e 0a 41 6c 6c 20 6f 66 20 74  an "4"..All of t
3640: 68 65 73 65 20 74 61 62 6c 65 73 20 61 72 65 20  hese tables are 
3650: 63 6f 6c 6c 65 63 74 69 76 65 6c 79 20 72 65 66  collectively ref
3660: 65 72 72 65 64 20 74 6f 20 61 73 20 22 73 74 61  erred to as "sta
3670: 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 22 2e  tistics tables".
3680: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20  .</p>..<p> ^The 
3690: 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 73  content of the s
36a0: 74 61 74 69 73 74 69 63 73 20 74 61 62 6c 65 73  tatistics tables
36b0: 20 63 61 6e 20 62 65 20 71 75 65 72 69 65 64 20   can be queried 
36c0: 75 73 69 6e 67 20 5b 53 45 4c 45 43 54 5d 0a 61  using [SELECT].a
36d0: 6e 64 20 63 61 6e 20 62 65 20 63 68 61 6e 67 65  nd can be change
36e0: 64 20 75 73 69 6e 67 20 74 68 65 20 5b 44 45 4c  d using the [DEL
36f0: 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 20  ETE], [INSERT], 
3700: 61 6e 64 20 5b 55 50 44 41 54 45 5d 20 63 6f 6d  and [UPDATE] com
3710: 6d 61 6e 64 73 2e 0a 5e 28 54 68 65 20 5b 44 52  mands..^(The [DR
3720: 4f 50 20 54 41 42 4c 45 5d 20 63 6f 6d 6d 61 6e  OP TABLE] comman
3730: 64 20 77 6f 72 6b 73 20 6f 6e 20 73 74 61 74 69  d works on stati
3740: 73 74 69 63 73 20 74 61 62 6c 65 73 0a 61 73 20  stics tables.as 
3750: 6f 66 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  of SQLite versio
3760: 6e 20 33 2e 37 2e 39 2e 29 5e 0a 5e 54 68 65 20  n 3.7.9.)^.^The 
3770: 5b 41 4c 54 45 52 20 54 41 42 4c 45 5d 20 63 6f  [ALTER TABLE] co
3780: 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 77  mmand does not w
3790: 6f 72 6b 20 6f 6e 20 73 74 61 74 69 73 74 69 63  ork on statistic
37a0: 73 20 74 61 62 6c 65 73 2e 0a 41 70 70 72 6f 70  s tables..Approp
37b0: 72 69 61 74 65 20 63 61 72 65 20 73 68 6f 75 6c  riate care shoul
37c0: 64 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 63  d be used when c
37d0: 68 61 6e 67 69 6e 67 20 74 68 65 20 63 6f 6e 74  hanging the cont
37e0: 65 6e 74 20 6f 66 20 74 68 65 20 73 74 61 74 69  ent of the stati
37f0: 73 74 69 63 73 0a 74 61 62 6c 65 73 20 61 73 20  stics.tables as 
3800: 69 6e 76 61 6c 69 64 20 63 6f 6e 74 65 6e 74 20  invalid content 
3810: 63 61 6e 20 63 61 75 73 65 20 53 51 4c 69 74 65  can cause SQLite
3820: 20 74 6f 20 73 65 6c 65 63 74 20 69 6e 65 66 66   to select ineff
3830: 69 63 69 65 6e 74 0a 71 75 65 72 79 20 70 6c 61  icient.query pla
3840: 6e 73 2e 20 20 47 65 6e 65 72 61 6c 6c 79 20 73  ns.  Generally s
3850: 70 65 61 6b 69 6e 67 2c 20 6f 6e 65 20 73 68 6f  peaking, one sho
3860: 75 6c 64 20 6e 6f 74 20 6d 6f 64 69 66 79 20 74  uld not modify t
3870: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 74 68  he content of.th
3880: 65 20 73 74 61 74 69 73 74 69 63 73 20 74 61 62  e statistics tab
3890: 6c 65 73 20 62 79 20 61 6e 79 20 6d 65 63 68 61  les by any mecha
38a0: 6e 69 73 6d 20 6f 74 68 65 72 20 74 68 61 6e 20  nism other than 
38b0: 69 6e 76 6f 6b 69 6e 67 20 74 68 65 0a 41 4e 41  invoking the.ANA
38c0: 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 0a  LYZE command.  .
38d0: 53 65 65 20 22 5b 4d 61 6e 75 61 6c 20 43 6f 6e  See "[Manual Con
38e0: 74 72 6f 6c 20 4f 66 20 51 75 65 72 79 20 50 6c  trol Of Query Pl
38f0: 61 6e 73 20 55 73 69 6e 67 20 53 51 4c 49 54 45  ans Using SQLITE
3900: 5f 53 54 41 54 20 54 61 62 6c 65 73 5d 22 20 66  _STAT Tables]" f
3910: 6f 72 0a 66 75 72 74 68 65 72 20 69 6e 66 6f 72  or.further infor
3920: 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e  mation.</p>..<p>
3930: 20 5e 53 74 61 74 69 73 74 69 63 73 20 67 61 74   ^Statistics gat
3940: 68 65 72 65 64 20 62 79 20 41 4e 41 4c 59 5a 45  hered by ANALYZE
3950: 20 61 72 65 20 6e 6f 74 20 61 75 74 6f 6d 61 74   are not automat
3960: 69 63 61 6c 6c 79 20 75 70 64 61 74 65 64 20 61  ically updated a
3970: 73 0a 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  s.the content of
3980: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 68   the database ch
3990: 61 6e 67 65 73 2e 20 20 49 66 20 74 68 65 20 63  anges.  If the c
39a0: 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 64 61  ontent of the da
39b0: 74 61 62 61 73 65 0a 63 68 61 6e 67 65 73 20 73  tabase.changes s
39c0: 69 67 6e 69 66 69 63 61 6e 74 6c 79 2c 20 6f 72  ignificantly, or
39d0: 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65   if the database
39e0: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c   schema changes,
39f0: 20 74 68 65 6e 20 6f 6e 65 20 73 68 6f 75 6c 64   then one should
3a00: 0a 63 6f 6e 73 69 64 65 72 20 72 65 72 75 6e 6e  .consider rerunn
3a10: 69 6e 67 20 74 68 65 20 41 4e 41 4c 59 5a 45 20  ing the ANALYZE 
3a20: 63 6f 6d 6d 61 6e 64 20 69 6e 20 6f 72 64 65 72  command in order
3a30: 20 74 6f 20 75 70 64 61 74 65 20 74 68 65 20 73   to update the s
3a40: 74 61 74 69 73 74 69 63 73 2e 3c 2f 70 3e 0a 0a  tatistics.</p>..
3a50: 3c 70 3e 20 54 68 65 20 71 75 65 72 79 20 70 6c  <p> The query pl
3a60: 61 6e 6e 65 72 20 6c 6f 61 64 73 20 74 68 65 20  anner loads the 
3a70: 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 73  content of the s
3a80: 74 61 74 69 73 74 69 63 73 20 74 61 62 6c 65 73  tatistics tables
3a90: 0a 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 77 68 65  .into memory whe
3aa0: 6e 20 74 68 65 20 73 63 68 65 6d 61 20 69 73 20  n the schema is 
3ab0: 72 65 61 64 2e 20 20 5e 48 65 6e 63 65 2c 20 77  read.  ^Hence, w
3ac0: 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 74 69  hen an applicati
3ad0: 6f 6e 0a 63 68 61 6e 67 65 73 20 74 68 65 20 73  on.changes the s
3ae0: 74 61 74 69 73 74 69 63 73 20 74 61 62 6c 65 73  tatistics tables
3af0: 20 64 69 72 65 63 74 6c 79 2c 20 53 51 4c 69 74   directly, SQLit
3b00: 65 20 77 69 6c 6c 20 6e 6f 74 20 69 6d 6d 65 64  e will not immed
3b10: 69 61 74 65 6c 79 0a 6e 6f 74 69 63 65 20 74 68  iately.notice th
3b20: 65 20 63 68 61 6e 67 65 73 2e 20 5e 41 6e 20 61  e changes. ^An a
3b30: 70 70 6c 69 63 61 74 69 6f 6e 0a 63 61 6e 20 66  pplication.can f
3b40: 6f 72 63 65 20 74 68 65 20 71 75 65 72 79 20 70  orce the query p
3b50: 6c 61 6e 6e 65 72 20 74 6f 20 72 65 72 65 61 64  lanner to reread
3b60: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 20   the statistics 
3b70: 74 61 62 6c 65 73 20 62 79 20 72 75 6e 6e 69 6e  tables by runnin
3b80: 67 0a 3c 62 3e 41 4e 41 4c 59 5a 45 20 73 71 6c  g.<b>ANALYZE sql
3b90: 69 74 65 5f 6d 61 73 74 65 72 3c 2f 62 3e 2e 20  ite_master</b>. 
3ba0: 3c 2f 70 3e 0a 0a 3c 70 3e 20 0a 0a 3c 74 63 6c  </p>..<p> ..<tcl
3bb0: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
3bc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3bd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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: 0a 53 65 63 74 69 6f 6e 20 7b 41 54 54 41 43 48  .Section {ATTACH
3c10: 20 44 41 54 41 42 41 53 45 7d 20 61 74 74 61 63   DATABASE} attac
3c20: 68 20 7b 61 74 74 61 63 68 65 64 20 2a 41 54 54  h {attached *ATT
3c30: 41 43 48 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  ACH}..RecursiveB
3c40: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61 74 74  ubbleDiagram att
3c50: 61 63 68 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ach-stmt.</tcl>.
3c60: 0a 3c 70 3e 20 5e 54 68 65 20 41 54 54 41 43 48  .<p> ^The ATTACH
3c70: 20 44 41 54 41 42 41 53 45 20 73 74 61 74 65 6d   DATABASE statem
3c80: 65 6e 74 20 61 64 64 73 20 61 6e 6f 74 68 65 72  ent adds another
3c90: 20 64 61 74 61 62 61 73 65 20 0a 66 69 6c 65 20   database .file 
3ca0: 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 5b  to the current [
3cb0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
3cc0: 69 6f 6e 5d 2e 20 0a 44 61 74 61 62 61 73 65 20  ion]. .Database 
3cd0: 66 69 6c 65 73 20 74 68 61 74 20 77 65 72 65 20  files that were 
3ce0: 70 72 65 76 69 6f 75 73 6c 79 20 61 74 74 61 63  previously attac
3cf0: 68 65 64 20 63 61 6e 20 62 65 20 72 65 6d 6f 76  hed can be remov
3d00: 65 64 20 75 73 69 6e 67 0a 74 68 65 20 5b 44 45  ed using.the [DE
3d10: 54 41 43 48 20 44 41 54 41 42 41 53 45 5d 20 63  TACH DATABASE] c
3d20: 6f 6d 6d 61 6e 64 2e 0a 0a 3c 70 3e 5e 54 68 65  ommand...<p>^The
3d30: 20 66 69 6c 65 6e 61 6d 65 20 66 6f 72 20 74 68   filename for th
3d40: 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 62 65  e database to be
3d50: 20 61 74 74 61 63 68 65 64 20 69 73 20 74 68 65   attached is the
3d60: 20 76 61 6c 75 65 20 6f 66 0a 74 68 65 20 65 78   value of.the ex
3d70: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 6f 63  pression that oc
3d80: 63 75 72 73 20 62 65 66 6f 72 65 20 74 68 65 20  curs before the 
3d90: 41 53 20 6b 65 79 77 6f 72 64 2e 0a 5e 54 68 65  AS keyword..^The
3da0: 20 66 69 6c 65 6e 61 6d 65 20 6f 66 20 74 68 65   filename of the
3db0: 20 64 61 74 61 62 61 73 65 20 66 6f 6c 6c 6f 77   database follow
3dc0: 73 20 74 68 65 20 73 61 6d 65 20 73 65 6d 61 6e  s the same seman
3dd0: 74 69 63 73 20 61 73 20 74 68 65 0a 66 69 6c 65  tics as the.file
3de0: 6e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f  name argument to
3df0: 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29   [sqlite3_open()
3e00: 5d 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 6f  ] and [sqlite3_o
3e10: 70 65 6e 5f 76 32 28 29 5d 3b 20 74 68 65 0a 73  pen_v2()]; the.s
3e20: 70 65 63 69 61 6c 20 6e 61 6d 65 20 22 5b 3a 6d  pecial name "[:m
3e30: 65 6d 6f 72 79 3a 5d 22 20 72 65 73 75 6c 74 73  emory:]" results
3e40: 20 69 6e 20 61 6e 20 5b 69 6e 2d 6d 65 6d 6f 72   in an [in-memor
3e50: 79 20 64 61 74 61 62 61 73 65 5d 20 61 6e 64 20  y database] and 
3e60: 61 6e 0a 65 6d 70 74 79 20 73 74 72 69 6e 67 20  an.empty string 
3e70: 72 65 73 75 6c 74 73 20 69 6e 20 61 20 6e 65 77  results in a new
3e80: 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62   temporary datab
3e90: 61 73 65 2e 0a 5e 54 68 65 20 66 69 6c 65 6e 61  ase..^The filena
3ea0: 6d 65 20 61 72 67 75 6d 65 6e 74 20 63 61 6e 20  me argument can 
3eb0: 62 65 20 61 20 5b 55 52 49 20 66 69 6c 65 6e 61  be a [URI filena
3ec0: 6d 65 5d 20 69 66 20 55 52 49 20 66 69 6c 65 6e  me] if URI filen
3ed0: 61 6d 65 20 70 72 6f 63 65 73 73 69 6e 67 0a 69  ame processing.i
3ee0: 73 20 65 6e 61 62 6c 65 20 6f 6e 20 74 68 65 20  s enable on the 
3ef0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
3f00: 69 6f 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c  ion.  The defaul
3f10: 74 20 62 65 68 61 76 69 6f 72 20 69 73 20 66 6f  t behavior is fo
3f20: 72 0a 55 52 49 20 66 69 6c 65 6e 61 6d 65 73 20  r.URI filenames 
3f30: 74 6f 20 62 65 20 64 69 73 61 62 6c 65 64 2c 20  to be disabled, 
3f40: 68 6f 77 65 76 65 72 20 74 68 61 74 20 6d 69 67  however that mig
3f50: 68 74 20 63 68 61 6e 67 65 20 69 6e 20 61 20 66  ht change in a f
3f60: 75 74 75 72 65 20 72 65 6c 65 61 73 65 0a 6f 66  uture release.of
3f70: 20 53 51 4c 69 74 65 2c 20 73 6f 20 61 70 70 6c   SQLite, so appl
3f80: 69 63 61 74 69 6f 6e 20 64 65 76 65 6c 6f 70 65  ication develope
3f90: 72 73 20 61 72 65 20 61 64 76 69 73 65 64 20 74  rs are advised t
3fa0: 6f 20 70 6c 61 6e 20 61 63 63 6f 72 64 69 6e 67  o plan according
3fb0: 6c 79 2e 0a 0a 3c 70 3e 54 68 65 20 6e 61 6d 65  ly...<p>The name
3fc0: 20 74 68 61 74 20 6f 63 63 75 72 73 20 61 66 74   that occurs aft
3fd0: 65 72 20 74 68 65 20 41 53 20 6b 65 79 77 6f 72  er the AS keywor
3fe0: 64 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  d is the name of
3ff0: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 75 73   the database.us
4000: 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79  ed internally by
4010: 20 53 51 4c 69 74 65 2e 0a 5e 54 68 65 20 73 63   SQLite..^The sc
4020: 68 65 6d 61 2d 6e 61 6d 65 73 20 27 6d 61 69 6e  hema-names 'main
4030: 27 20 61 6e 64 20 0a 27 74 65 6d 70 27 20 72 65  ' and .'temp' re
4040: 66 65 72 20 74 6f 20 74 68 65 20 6d 61 69 6e 20  fer to the main 
4050: 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 68 65  database and the
4060: 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20 66   database used f
4070: 6f 72 20 0a 74 65 6d 70 6f 72 61 72 79 20 74 61  or .temporary ta
4080: 62 6c 65 73 2e 20 20 5e 54 68 65 20 6d 61 69 6e  bles.  ^The main
4090: 20 61 6e 64 20 74 65 6d 70 20 64 61 74 61 62 61   and temp databa
40a0: 73 65 73 20 63 61 6e 6e 6f 74 20 62 65 20 61 74  ses cannot be at
40b0: 74 61 63 68 65 64 20 6f 72 0a 64 65 74 61 63 68  tached or.detach
40c0: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 28 54  ed.</p>..<p> ^(T
40d0: 61 62 6c 65 73 20 69 6e 20 61 6e 20 61 74 74 61  ables in an atta
40e0: 63 68 65 64 20 64 61 74 61 62 61 73 65 20 63 61  ched database ca
40f0: 6e 20 62 65 20 72 65 66 65 72 72 65 64 20 74 6f  n be referred to
4100: 20 75 73 69 6e 67 20 74 68 65 20 73 79 6e 74 61   using the synta
4110: 78 20 0a 3c 69 3e 73 63 68 65 6d 61 2d 6e 61 6d  x .<i>schema-nam
4120: 65 2e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e  e.table-name</i>
4130: 2e 29 5e 20 20 5e 49 66 20 74 68 65 20 6e 61 6d  .)^  ^If the nam
4140: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69  e of the table i
4150: 73 20 75 6e 69 71 75 65 0a 61 63 72 6f 73 73 20  s unique.across 
4160: 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
4170: 61 62 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d  abases and the m
4180: 61 69 6e 20 61 6e 64 20 74 65 6d 70 20 64 61 74  ain and temp dat
4190: 61 62 61 73 65 73 2c 20 74 68 65 6e 20 74 68 65  abases, then the
41a0: 0a 3c 69 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c  .<i>schema-name<
41b0: 2f 69 3e 20 70 72 65 66 69 78 20 69 73 20 6e 6f  /i> prefix is no
41c0: 74 20 72 65 71 75 69 72 65 64 2e 20 20 5e 49 66  t required.  ^If
41d0: 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 74 61 62   two or more tab
41e0: 6c 65 73 20 69 6e 0a 64 69 66 66 65 72 65 6e 74  les in.different
41f0: 20 64 61 74 61 62 61 73 65 73 20 68 61 76 65 20   databases have 
4200: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6e  the same name an
4210: 64 20 74 68 65 20 0a 3c 69 3e 73 63 68 65 6d 61  d the .<i>schema
4220: 2d 6e 61 6d 65 3c 2f 69 3e 20 70 72 65 66 69 78  -name</i> prefix
4230: 20 69 73 20 6e 6f 74 20 75 73 65 64 20 6f 6e 20   is not used on 
4240: 61 20 74 61 62 6c 65 20 72 65 66 65 72 65 6e 63  a table referenc
4250: 65 2c 20 74 68 65 6e 20 74 68 65 0a 74 61 62 6c  e, then the.tabl
4260: 65 20 63 68 6f 73 65 6e 20 69 73 20 74 68 65 20  e chosen is the 
4270: 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  one in the datab
4280: 61 73 65 20 74 68 61 74 20 77 61 73 20 6c 65 61  ase that was lea
4290: 73 74 20 72 65 63 65 6e 74 6c 79 20 61 74 74 61  st recently atta
42a0: 63 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e  ched.</p>..<p>.^
42b0: 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 69 6e 76  Transactions inv
42c0: 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20  olving multiple 
42d0: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
42e0: 65 73 20 61 72 65 20 61 74 6f 6d 69 63 2c 0a 61  es are atomic,.a
42f0: 73 73 75 6d 69 6e 67 20 74 68 61 74 20 74 68 65  ssuming that the
4300: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69   main database i
4310: 73 20 6e 6f 74 20 22 5b 3a 6d 65 6d 6f 72 79 3a  s not "[:memory:
4320: 5d 22 20 61 6e 64 20 74 68 65 20 0a 5b 6a 6f 75  ]" and the .[jou
4330: 72 6e 61 6c 5f 6d 6f 64 65 5d 20 69 73 20 6e 6f  rnal_mode] is no
4340: 74 20 5b 57 41 4c 5d 2e 20 20 5e 28 49 66 20 74  t [WAL].  ^(If t
4350: 68 65 20 6d 61 69 6e 0a 64 61 74 61 62 61 73 65  he main.database
4360: 20 69 73 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 6f   is ":memory:" o
4370: 72 20 69 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c  r if the journal
4380: 5f 6d 6f 64 65 20 69 73 20 57 41 4c 2c 20 74 68  _mode is WAL, th
4390: 65 6e 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73  en .transactions
43a0: 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20   continue to be 
43b0: 61 74 6f 6d 69 63 20 77 69 74 68 69 6e 20 65 61  atomic within ea
43c0: 63 68 20 69 6e 64 69 76 69 64 75 61 6c 0a 64 61  ch individual.da
43d0: 74 61 62 61 73 65 20 66 69 6c 65 2e 20 42 75 74  tabase file. But
43e0: 20 69 66 20 74 68 65 20 68 6f 73 74 20 63 6f 6d   if the host com
43f0: 70 75 74 65 72 20 63 72 61 73 68 65 73 20 69 6e  puter crashes in
4400: 20 74 68 65 20 6d 69 64 64 6c 65 0a 6f 66 20 61   the middle.of a
4410: 20 5b 43 4f 4d 4d 49 54 5d 20 77 68 65 72 65 20   [COMMIT] where 
4420: 74 77 6f 20 6f 72 20 6d 6f 72 65 20 64 61 74 61  two or more data
4430: 62 61 73 65 20 66 69 6c 65 73 20 61 72 65 20 75  base files are u
4440: 70 64 61 74 65 64 2c 0a 73 6f 6d 65 20 6f 66 20  pdated,.some of 
4450: 74 68 6f 73 65 20 66 69 6c 65 73 20 6d 69 67 68  those files migh
4460: 74 20 67 65 74 20 74 68 65 20 63 68 61 6e 67 65  t get the change
4470: 73 20 77 68 65 72 65 20 6f 74 68 65 72 73 0a 6d  s where others.m
4480: 69 67 68 74 20 6e 6f 74 2e 29 5e 0a 3c 2f 70 3e  ight not.)^.</p>
4490: 0a 0a 3c 70 3e 20 5e 54 68 65 72 65 20 69 73 20  ..<p> ^There is 
44a0: 61 20 6c 69 6d 69 74 2c 20 73 65 74 20 75 73 69  a limit, set usi
44b0: 6e 67 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69  ng [sqlite3_limi
44c0: 74 28 29 5d 20 61 6e 64 20 0a 5b 53 51 4c 49 54  t()] and .[SQLIT
44d0: 45 5f 4c 49 4d 49 54 5f 41 54 54 41 43 48 45 44  E_LIMIT_ATTACHED
44e0: 5d 2c 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  ], to the number
44f0: 20 6f 66 20 64 61 74 61 62 61 73 65 73 20 74 68   of databases th
4500: 61 74 20 63 61 6e 20 62 65 0a 73 69 6d 75 6c 74  at can be.simult
4510: 61 6e 65 6f 75 73 6c 79 20 61 74 74 61 63 68 65  aneously attache
4520: 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 64 61  d to a single da
4530: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
4540: 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  n.</p>..<tcl>.##
4550: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4560: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65  #############.Se
45a0: 63 74 69 6f 6e 20 7b 42 45 47 49 4e 20 54 52 41  ction {BEGIN TRA
45b0: 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73 61  NSACTION} transa
45c0: 63 74 69 6f 6e 20 7b 2a 42 45 47 49 4e 20 43 4f  ction {*BEGIN CO
45d0: 4d 4d 49 54 20 52 4f 4c 4c 42 41 43 4b 7d 0a 0a  MMIT ROLLBACK}..
45e0: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
45f0: 69 61 67 72 61 6d 20 62 65 67 69 6e 2d 73 74 6d  iagram begin-stm
4600: 74 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  t.RecursiveBubbl
4610: 65 44 69 61 67 72 61 6d 20 63 6f 6d 6d 69 74 2d  eDiagram commit-
4620: 73 74 6d 74 0a 52 65 63 75 72 73 69 76 65 42 75  stmt.RecursiveBu
4630: 62 62 6c 65 44 69 61 67 72 61 6d 20 72 6f 6c 6c  bbleDiagram roll
4640: 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  back-stmt.</tcl>
4650: 0a 0a 3c 70 3e 0a 5e 4e 6f 20 63 68 61 6e 67 65  ..<p>.^No change
4660: 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f  s can be made to
4670: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 65 78   the database ex
4680: 63 65 70 74 20 77 69 74 68 69 6e 20 61 20 74 72  cept within a tr
4690: 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 6e 79 20  ansaction..^Any 
46a0: 63 6f 6d 6d 61 6e 64 20 74 68 61 74 20 63 68 61  command that cha
46b0: 6e 67 65 73 20 74 68 65 20 64 61 74 61 62 61 73  nges the databas
46c0: 65 20 28 62 61 73 69 63 61 6c 6c 79 2c 20 61 6e  e (basically, an
46d0: 79 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a 6f 74  y SQL command.ot
46e0: 68 65 72 20 74 68 61 6e 20 5b 53 45 4c 45 43 54  her than [SELECT
46f0: 5d 29 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69  ]) will automati
4700: 63 61 6c 6c 79 20 73 74 61 72 74 20 61 20 74 72  cally start a tr
4710: 61 6e 73 61 63 74 69 6f 6e 20 69 66 0a 6f 6e 65  ansaction if.one
4720: 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20   is not already 
4730: 69 6e 20 65 66 66 65 63 74 2e 20 20 5e 41 75 74  in effect.  ^Aut
4740: 6f 6d 61 74 69 63 61 6c 6c 79 20 73 74 61 72 74  omatically start
4750: 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a  ed transactions.
4760: 61 72 65 20 63 6f 6d 6d 69 74 74 65 64 20 77 68  are committed wh
4770: 65 6e 20 74 68 65 20 6c 61 73 74 20 71 75 65 72  en the last quer
4780: 79 20 66 69 6e 69 73 68 65 73 2e 0a 3c 2f 70 3e  y finishes..</p>
4790: 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69  ..<p>.^Transacti
47a0: 6f 6e 73 20 63 61 6e 20 62 65 20 73 74 61 72 74  ons can be start
47b0: 65 64 20 6d 61 6e 75 61 6c 6c 79 20 75 73 69 6e  ed manually usin
47c0: 67 20 74 68 65 20 42 45 47 49 4e 0a 63 6f 6d 6d  g the BEGIN.comm
47d0: 61 6e 64 2e 20 20 5e 28 53 75 63 68 20 74 72 61  and.  ^(Such tra
47e0: 6e 73 61 63 74 69 6f 6e 73 20 75 73 75 61 6c 6c  nsactions usuall
47f0: 79 20 70 65 72 73 69 73 74 20 75 6e 74 69 6c 20  y persist until 
4800: 74 68 65 20 6e 65 78 74 0a 43 4f 4d 4d 49 54 20  the next.COMMIT 
4810: 6f 72 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d  or ROLLBACK comm
4820: 61 6e 64 2e 20 20 42 75 74 20 61 20 74 72 61 6e  and.  But a tran
4830: 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61 6c 73  saction will als
4840: 6f 20 0a 52 4f 4c 4c 42 41 43 4b 20 69 66 20 74  o .ROLLBACK if t
4850: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 63  he database is c
4860: 6c 6f 73 65 64 20 6f 72 20 69 66 20 61 6e 20 65  losed or if an e
4870: 72 72 6f 72 20 6f 63 63 75 72 73 0a 61 6e 64 20  rror occurs.and 
4880: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6e  the ROLLBACK con
4890: 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
48a0: 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70   algorithm is sp
48b0: 65 63 69 66 69 65 64 2e 29 5e 0a 53 65 65 20 74  ecified.)^.See t
48c0: 68 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  he documentation
48d0: 20 6f 6e 20 74 68 65 20 5b 4f 4e 20 43 4f 4e 46   on the [ON CONF
48e0: 4c 49 43 54 5d 0a 63 6c 61 75 73 65 20 66 6f 72  LICT].clause for
48f0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
4900: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
4910: 65 20 52 4f 4c 4c 42 41 43 4b 0a 63 6f 6e 66 6c  e ROLLBACK.confl
4920: 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ict resolution a
4930: 6c 67 6f 72 69 74 68 6d 2e 0a 3c 2f 70 3e 0a 0a  lgorithm..</p>..
4940: 3c 70 3e 0a 5e 45 4e 44 20 54 52 41 4e 53 41 43  <p>.^END TRANSAC
4950: 54 49 4f 4e 20 69 73 20 61 6e 20 61 6c 69 61 73  TION is an alias
4960: 20 66 6f 72 20 43 4f 4d 4d 49 54 2e 0a 3c 2f 70   for COMMIT..</p
4970: 3e 0a 0a 3c 70 3e 20 5e 28 54 72 61 6e 73 61 63  >..<p> ^(Transac
4980: 74 69 6f 6e 73 20 63 72 65 61 74 65 64 20 75 73  tions created us
4990: 69 6e 67 20 42 45 47 49 4e 2e 2e 2e 43 4f 4d 4d  ing BEGIN...COMM
49a0: 49 54 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 29  IT do not nest.)
49b0: 5e 0a 5e 46 6f 72 20 6e 65 73 74 65 64 20 74 72  ^.^For nested tr
49c0: 61 6e 73 61 63 74 69 6f 6e 73 2c 20 75 73 65 20  ansactions, use 
49d0: 74 68 65 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20  the [SAVEPOINT] 
49e0: 61 6e 64 20 5b 52 45 4c 45 41 53 45 5d 20 63 6f  and [RELEASE] co
49f0: 6d 6d 61 6e 64 73 2e 0a 54 68 65 20 22 54 4f 20  mmands..The "TO 
4a00: 53 41 56 45 50 4f 49 4e 54 20 3c 79 79 74 65 72  SAVEPOINT <yyter
4a10: 6d 3e 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 22  m>name</yyterm>"
4a20: 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 52   clause of the R
4a30: 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20  OLLBACK command 
4a40: 73 68 6f 77 6e 0a 69 6e 20 74 68 65 20 73 79 6e  shown.in the syn
4a50: 74 61 78 20 64 69 61 67 72 61 6d 20 61 62 6f 76  tax diagram abov
4a60: 65 20 69 73 20 6f 6e 6c 79 20 61 70 70 6c 69 63  e is only applic
4a70: 61 62 6c 65 20 74 6f 20 5b 53 41 56 45 50 4f 49  able to [SAVEPOI
4a80: 4e 54 5d 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73  NT].transactions
4a90: 2e 20 20 5e 41 6e 20 61 74 74 65 6d 70 74 20 74  .  ^An attempt t
4aa0: 6f 20 69 6e 76 6f 6b 65 20 74 68 65 20 42 45 47  o invoke the BEG
4ab0: 49 4e 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 69  IN command withi
4ac0: 6e 0a 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  n.a transaction 
4ad0: 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61  will fail with a
4ae0: 6e 20 65 72 72 6f 72 2c 20 72 65 67 61 72 64 6c  n error, regardl
4af0: 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 0a 74  ess of whether.t
4b00: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77  he transaction w
4b10: 61 73 20 73 74 61 72 74 65 64 20 62 79 20 5b 53  as started by [S
4b20: 41 56 45 50 4f 49 4e 54 5d 20 6f 72 20 61 20 70  AVEPOINT] or a p
4b30: 72 69 6f 72 20 42 45 47 49 4e 2e 0a 5e 54 68 65  rior BEGIN..^The
4b40: 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 20   COMMIT command 
4b50: 61 6e 64 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  and the ROLLBACK
4b60: 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74   command without
4b70: 20 74 68 65 20 54 4f 20 63 6c 61 75 73 65 0a 77   the TO clause.w
4b80: 6f 72 6b 20 74 68 65 20 73 61 6d 65 20 6f 6e 20  ork the same on 
4b90: 5b 53 41 56 45 50 4f 49 4e 54 5d 20 74 72 61 6e  [SAVEPOINT] tran
4ba0: 73 61 63 74 69 6f 6e 73 20 61 73 20 74 68 65 79  sactions as they
4bb0: 20 64 6f 20 77 69 74 68 20 74 72 61 6e 73 61 63   do with transac
4bc0: 74 69 6f 6e 73 0a 73 74 61 72 74 65 64 20 62 79  tions.started by
4bd0: 20 42 45 47 49 4e 2e 3c 2f 70 3e 0a 0a 3c 74 63   BEGIN.</p>..<tc
4be0: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6d  l>hd_fragment im
4bf0: 6d 65 64 69 61 74 65 20 7b 42 45 47 49 4e 20 49  mediate {BEGIN I
4c00: 4d 4d 45 44 49 41 54 45 7d 20 7b 42 45 47 49 4e  MMEDIATE} {BEGIN
4c10: 20 45 58 43 4c 55 53 49 56 45 7d 3c 2f 74 63 6c   EXCLUSIVE}</tcl
4c20: 3e 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69  >.<p>.^Transacti
4c30: 6f 6e 73 20 63 61 6e 20 62 65 20 64 65 66 65 72  ons can be defer
4c40: 72 65 64 2c 20 69 6d 6d 65 64 69 61 74 65 2c 20  red, immediate, 
4c50: 6f 72 20 65 78 63 6c 75 73 69 76 65 2e 20 20 0a  or exclusive.  .
4c60: 5e 54 68 65 20 64 65 66 61 75 6c 74 20 74 72 61  ^The default tra
4c70: 6e 73 61 63 74 69 6f 6e 20 62 65 68 61 76 69 6f  nsaction behavio
4c80: 72 20 69 73 20 64 65 66 65 72 72 65 64 2e 0a 5e  r is deferred..^
4c90: 44 65 66 65 72 72 65 64 20 6d 65 61 6e 73 20 74  Deferred means t
4ca0: 68 61 74 20 6e 6f 20 6c 6f 63 6b 73 20 61 72 65  hat no locks are
4cb0: 20 61 63 71 75 69 72 65 64 0a 6f 6e 20 74 68 65   acquired.on the
4cc0: 20 64 61 74 61 62 61 73 65 20 75 6e 74 69 6c 20   database until 
4cd0: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
4ce0: 66 69 72 73 74 20 61 63 63 65 73 73 65 64 2e 20  first accessed. 
4cf0: 20 5e 54 68 75 73 20 77 69 74 68 20 61 0a 64 65   ^Thus with a.de
4d00: 66 65 72 72 65 64 20 74 72 61 6e 73 61 63 74 69  ferred transacti
4d10: 6f 6e 2c 20 74 68 65 20 42 45 47 49 4e 20 73 74  on, the BEGIN st
4d20: 61 74 65 6d 65 6e 74 20 69 74 73 65 6c 66 20 64  atement itself d
4d30: 6f 65 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74  oes nothing to t
4d40: 68 65 0a 66 69 6c 65 73 79 73 74 65 6d 2e 20 20  he.filesystem.  
4d50: 5e 4c 6f 63 6b 73 0a 61 72 65 20 6e 6f 74 20 61  ^Locks.are not a
4d60: 63 71 75 69 72 65 64 20 75 6e 74 69 6c 20 74 68  cquired until th
4d70: 65 20 66 69 72 73 74 20 72 65 61 64 20 6f 72 20  e first read or 
4d80: 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 2e  write operation.
4d90: 20 20 5e 54 68 65 20 66 69 72 73 74 20 72 65 61    ^The first rea
4da0: 64 0a 6f 70 65 72 61 74 69 6f 6e 20 61 67 61 69  d.operation agai
4db0: 6e 73 74 20 61 20 64 61 74 61 62 61 73 65 20 63  nst a database c
4dc0: 72 65 61 74 65 73 20 61 20 5b 53 48 41 52 45 44  reates a [SHARED
4dd0: 5d 20 6c 6f 63 6b 20 61 6e 64 20 74 68 65 20 66  ] lock and the f
4de0: 69 72 73 74 0a 77 72 69 74 65 20 6f 70 65 72 61  irst.write opera
4df0: 74 69 6f 6e 20 63 72 65 61 74 65 73 20 61 20 5b  tion creates a [
4e00: 52 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b 2e 20  RESERVED] lock. 
4e10: 20 20 5e 42 65 63 61 75 73 65 20 74 68 65 20 61    ^Because the a
4e20: 63 71 75 69 73 69 74 69 6f 6e 20 6f 66 0a 6c 6f  cquisition of.lo
4e30: 63 6b 73 20 69 73 20 64 65 66 65 72 72 65 64 20  cks is deferred 
4e40: 75 6e 74 69 6c 20 74 68 65 79 20 61 72 65 20 6e  until they are n
4e50: 65 65 64 65 64 2c 20 69 74 20 69 73 20 70 6f 73  eeded, it is pos
4e60: 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68  sible that anoth
4e70: 65 72 0a 74 68 72 65 61 64 20 6f 72 20 70 72 6f  er.thread or pro
4e80: 63 65 73 73 20 63 6f 75 6c 64 20 63 72 65 61 74  cess could creat
4e90: 65 20 61 20 73 65 70 61 72 61 74 65 20 74 72 61  e a separate tra
4ea0: 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 77 72 69  nsaction and wri
4eb0: 74 65 20 74 6f 0a 74 68 65 20 64 61 74 61 62 61  te to.the databa
4ec0: 73 65 20 61 66 74 65 72 20 74 68 65 20 42 45 47  se after the BEG
4ed0: 49 4e 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e  IN on the curren
4ee0: 74 20 74 68 72 65 61 64 20 68 61 73 20 65 78 65  t thread has exe
4ef0: 63 75 74 65 64 2e 0a 5e 49 66 20 74 68 65 20 74  cuted..^If the t
4f00: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 69 6d  ransaction is im
4f10: 6d 65 64 69 61 74 65 2c 20 74 68 65 6e 20 5b 52  mediate, then [R
4f20: 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b 73 0a 61  ESERVED] locks.a
4f30: 72 65 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61  re acquired on a
4f40: 6c 6c 20 64 61 74 61 62 61 73 65 73 20 61 73 20  ll databases as 
4f50: 73 6f 6f 6e 20 61 73 20 74 68 65 20 42 45 47 49  soon as the BEGI
4f60: 4e 20 63 6f 6d 6d 61 6e 64 20 69 73 0a 65 78 65  N command is.exe
4f70: 63 75 74 65 64 2c 20 77 69 74 68 6f 75 74 20 77  cuted, without w
4f80: 61 69 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 64  aiting for the.d
4f90: 61 74 61 62 61 73 65 20 74 6f 20 62 65 20 75 73  atabase to be us
4fa0: 65 64 2e 20 20 5e 41 66 74 65 72 20 61 20 42 45  ed.  ^After a BE
4fb0: 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 2c 20 0a  GIN IMMEDIATE, .
4fc0: 6e 6f 20 6f 74 68 65 72 20 5b 64 61 74 61 62 61  no other [databa
4fd0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 77  se connection] w
4fe0: 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 77  ill be able to w
4ff0: 72 69 74 65 20 74 6f 20 74 68 65 20 64 61 74 61  rite to the data
5000: 62 61 73 65 20 6f 72 0a 64 6f 20 61 20 42 45 47  base or.do a BEG
5010: 49 4e 20 49 4d 4d 45 44 49 41 54 45 20 6f 72 20  IN IMMEDIATE or 
5020: 42 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45 2e  BEGIN EXCLUSIVE.
5030: 20 20 5e 4f 74 68 65 72 20 70 72 6f 63 65 73 73    ^Other process
5040: 65 73 20 63 61 6e 20 63 6f 6e 74 69 6e 75 65 0a  es can continue.
5050: 74 6f 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65  to read from the
5060: 20 64 61 74 61 62 61 73 65 2c 20 68 6f 77 65 76   database, howev
5070: 65 72 2e 20 20 5e 41 6e 20 65 78 63 6c 75 73 69  er.  ^An exclusi
5080: 76 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63  ve transaction c
5090: 61 75 73 65 73 0a 5b 45 58 43 4c 55 53 49 56 45  auses.[EXCLUSIVE
50a0: 5d 20 6c 6f 63 6b 73 20 74 6f 20 62 65 20 61 63  ] locks to be ac
50b0: 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20 64 61  quired on all da
50c0: 74 61 62 61 73 65 73 2e 20 20 5e 41 66 74 65 72  tabases.  ^After
50d0: 20 61 20 42 45 47 49 4e 0a 45 58 43 4c 55 53 49   a BEGIN.EXCLUSI
50e0: 56 45 2c 20 6e 6f 20 6f 74 68 65 72 20 5b 64 61  VE, no other [da
50f0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
5100: 6e 5d 20 65 78 63 65 70 74 20 66 6f 72 20 5b 72  n] except for [r
5110: 65 61 64 5f 75 6e 63 6f 6d 6d 69 74 74 65 64 5d  ead_uncommitted]
5120: 0a 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 77 69 6c  .connections wil
5130: 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 72 65 61  l be able to rea
5140: 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  d the database a
5150: 6e 64 20 6e 6f 20 6f 74 68 65 72 20 63 6f 6e 6e  nd no other conn
5160: 65 63 74 69 6f 6e 20 77 69 74 68 6f 75 74 0a 65  ection without.e
5170: 78 63 65 70 74 69 6f 6e 20 77 69 6c 6c 20 62 65  xception will be
5180: 20 61 62 6c 65 20 74 6f 20 77 72 69 74 65 20 74   able to write t
5190: 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 74 69  he database unti
51a0: 6c 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  l the transactio
51b0: 6e 20 69 73 0a 63 6f 6d 70 6c 65 74 65 2e 0a 3c  n is.complete..<
51c0: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28 41 6e 20 69 6d  /p>..<p>.^(An im
51d0: 70 6c 69 63 69 74 20 74 72 61 6e 73 61 63 74 69  plicit transacti
51e0: 6f 6e 20 28 61 20 74 72 61 6e 73 61 63 74 69 6f  on (a transactio
51f0: 6e 20 74 68 61 74 20 69 73 20 73 74 61 72 74 65  n that is starte
5200: 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2c  d automatically,
5210: 0a 6e 6f 74 20 61 20 74 72 61 6e 73 61 63 74 69  .not a transacti
5220: 6f 6e 20 73 74 61 72 74 65 64 20 62 79 20 42 45  on started by BE
5230: 47 49 4e 29 20 69 73 20 63 6f 6d 6d 69 74 74 65  GIN) is committe
5240: 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  d automatically 
5250: 77 68 65 6e 0a 74 68 65 20 6c 61 73 74 20 61 63  when.the last ac
5260: 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 20 66  tive statement f
5270: 69 6e 69 73 68 65 73 2e 20 20 41 20 73 74 61 74  inishes.  A stat
5280: 65 6d 65 6e 74 20 66 69 6e 69 73 68 65 73 20 77  ement finishes w
5290: 68 65 6e 20 69 74 73 0a 70 72 65 70 61 72 65 64  hen its.prepared
52a0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 5b 73   statement is [s
52b0: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 20 7c  qlite3_reset() |
52c0: 20 72 65 73 65 74 5d 20 6f 72 0a 5b 73 71 6c 69   reset] or.[sqli
52d0: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 20 7c  te3_finalize() |
52e0: 20 66 69 6e 61 6c 69 7a 65 64 5d 2e 20 20 41 6e   finalized].  An
52f0: 20 6f 70 65 6e 20 5b 73 71 6c 69 74 65 33 5f 62   open [sqlite3_b
5300: 6c 6f 62 5d 20 75 73 65 64 20 66 6f 72 0a 69 6e  lob] used for.in
5310: 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49  cremental BLOB I
5320: 2f 4f 20 63 6f 75 6e 74 73 20 61 73 20 61 6e 20  /O counts as an 
5330: 75 6e 66 69 6e 69 73 68 65 64 20 73 74 61 74 65  unfinished state
5340: 6d 65 6e 74 2e 20 20 54 68 65 20 5b 73 71 6c 69  ment.  The [sqli
5350: 74 65 33 5f 62 6c 6f 62 5d 0a 66 69 6e 69 73 68  te3_blob].finish
5360: 65 73 20 77 68 65 6e 20 69 74 20 69 73 20 5b 73  es when it is [s
5370: 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 63 6c 6f 73  qlite3_blob_clos
5380: 65 28 29 20 7c 20 63 6c 6f 73 65 64 5d 2e 29 5e  e() | closed].)^
5390: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 68 65 20  .</p>..<p>.^The 
53a0: 65 78 70 6c 69 63 69 74 20 43 4f 4d 4d 49 54 20  explicit COMMIT 
53b0: 63 6f 6d 6d 61 6e 64 20 72 75 6e 73 20 69 6d 6d  command runs imm
53c0: 65 64 69 61 74 65 6c 79 2c 20 65 76 65 6e 20 69  ediately, even i
53d0: 66 20 74 68 65 72 65 20 61 72 65 0a 70 65 6e 64  f there are.pend
53e0: 69 6e 67 20 5b 53 45 4c 45 43 54 5d 20 73 74 61  ing [SELECT] sta
53f0: 74 65 6d 65 6e 74 73 2e 20 20 5e 48 6f 77 65 76  tements.  ^Howev
5400: 65 72 2c 20 69 66 20 74 68 65 72 65 20 61 72 65  er, if there are
5410: 20 70 65 6e 64 69 6e 67 0a 77 72 69 74 65 20 6f   pending.write o
5420: 70 65 72 61 74 69 6f 6e 73 2c 20 74 68 65 20 43  perations, the C
5430: 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 0a 77 69  OMMIT command.wi
5440: 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20  ll fail with an 
5450: 65 72 72 6f 72 20 63 6f 64 65 20 5b 53 51 4c 49  error code [SQLI
5460: 54 45 5f 42 55 53 59 5d 2e 0a 3c 2f 70 3e 0a 0a  TE_BUSY]..</p>..
5470: 3c 70 3e 0a 5e 41 6e 20 61 74 74 65 6d 70 74 20  <p>.^An attempt 
5480: 74 6f 20 65 78 65 63 75 74 65 20 43 4f 4d 4d 49  to execute COMMI
5490: 54 20 6d 69 67 68 74 20 61 6c 73 6f 20 72 65 73  T might also res
54a0: 75 6c 74 20 69 6e 20 61 6e 20 5b 53 51 4c 49 54  ult in an [SQLIT
54b0: 45 5f 42 55 53 59 5d 20 72 65 74 75 72 6e 20 63  E_BUSY] return c
54c0: 6f 64 65 0a 69 66 20 61 6e 20 61 6e 6f 74 68 65  ode.if an anothe
54d0: 72 20 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63  r thread or proc
54e0: 65 73 73 20 68 61 73 20 61 20 5b 73 68 61 72 65  ess has a [share
54f0: 64 20 6c 6f 63 6b 5d 20 6f 6e 20 74 68 65 20 64  d lock] on the d
5500: 61 74 61 62 61 73 65 0a 74 68 61 74 20 70 72 65  atabase.that pre
5510: 76 65 6e 74 65 64 20 74 68 65 20 64 61 74 61 62  vented the datab
5520: 61 73 65 20 66 72 6f 6d 20 62 65 69 6e 67 20 75  ase from being u
5530: 70 64 61 74 65 64 2e 20 20 5e 57 68 65 6e 20 43  pdated.  ^When C
5540: 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 6e 20 74  OMMIT fails in t
5550: 68 69 73 0a 77 61 79 2c 20 74 68 65 20 74 72 61  his.way, the tra
5560: 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69 6e 73  nsaction remains
5570: 20 61 63 74 69 76 65 20 61 6e 64 20 74 68 65 20   active and the 
5580: 43 4f 4d 4d 49 54 20 63 61 6e 20 62 65 20 72 65  COMMIT can be re
5590: 74 72 69 65 64 20 6c 61 74 65 72 0a 61 66 74 65  tried later.afte
55a0: 72 20 74 68 65 20 72 65 61 64 65 72 20 68 61 73  r the reader has
55b0: 20 68 61 64 20 61 20 63 68 61 6e 63 65 20 74 6f   had a chance to
55c0: 20 63 6c 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 70   clear..</p>..<p
55d0: 3e 0a 49 6e 20 76 65 72 79 20 6f 6c 64 20 76 65  >.In very old ve
55e0: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
55f0: 20 28 62 65 66 6f 72 65 20 76 65 72 73 69 6f 6e   (before version
5600: 20 33 2e 37 2e 31 31 20 63 69 72 63 61 20 32 30   3.7.11 circa 20
5610: 31 32 2d 30 33 2d 32 30 29 0a 74 68 65 20 52 4f  12-03-20).the RO
5620: 4c 4c 42 41 43 4b 20 77 69 6c 6c 20 66 61 69 6c  LLBACK will fail
5630: 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20 63   with an error c
5640: 6f 64 65 20 0a 5b 53 51 4c 49 54 45 5f 42 55 53  ode .[SQLITE_BUS
5650: 59 5d 20 69 66 20 74 68 65 72 65 20 61 72 65 20  Y] if there are 
5660: 61 6e 79 20 70 65 6e 64 69 6e 67 20 71 75 65 72  any pending quer
5670: 69 65 73 2e 20 20 5e 49 6e 20 6d 6f 72 65 20 72  ies.  ^In more r
5680: 65 63 65 6e 74 0a 76 65 72 73 69 6f 6e 73 20 6f  ecent.versions o
5690: 66 20 53 51 4c 69 74 65 2c 20 74 68 65 20 52 4f  f SQLite, the RO
56a0: 4c 4c 42 41 43 4b 20 77 69 6c 6c 20 70 72 6f 63  LLBACK will proc
56b0: 65 65 64 20 61 6e 64 20 70 65 6e 64 69 6e 67 20  eed and pending 
56c0: 73 74 61 74 65 6d 65 6e 74 73 0a 77 69 6c 6c 20  statements.will 
56d0: 6f 66 74 65 6e 20 62 65 20 61 62 6f 72 74 65 64  often be aborted
56e0: 2c 20 63 61 75 73 69 6e 67 20 74 68 65 6d 20 74  , causing them t
56f0: 6f 20 72 65 74 75 72 6e 20 61 6e 20 5b 53 51 4c  o return an [SQL
5700: 49 54 45 5f 41 42 4f 52 54 5d 20 6f 72 0a 5b 53  ITE_ABORT] or.[S
5710: 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c  QLITE_ABORT_ROLL
5720: 42 41 43 4b 5d 20 65 72 72 6f 72 2e 0a 5e 49 6e  BACK] error..^In
5730: 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
5740: 33 2e 38 2e 38 20 61 6e 64 20 6c 61 74 65 72 2c  3.8.8 and later,
5750: 20 61 20 70 65 6e 64 69 6e 67 20 72 65 61 64 20   a pending read 
5760: 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 66 75  will continue fu
5770: 6e 63 74 69 6f 6e 69 6e 67 0a 61 66 74 65 72 20  nctioning.after 
5780: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 61 73 20  the ROLLBACK as 
5790: 6c 6f 6e 67 20 61 73 20 74 68 65 20 52 4f 4c 4c  long as the ROLL
57a0: 42 41 43 4b 20 64 6f 65 73 20 6e 6f 74 20 6d 6f  BACK does not mo
57b0: 64 69 66 79 20 74 68 65 20 64 61 74 61 62 61 73  dify the databas
57c0: 65 0a 73 63 68 65 6d 61 2e 0a 3c 2f 70 3e 0a 0a  e.schema..</p>..
57d0: 3c 70 3e 0a 49 66 20 5b 50 52 41 47 4d 41 20 6a  <p>.If [PRAGMA j
57e0: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 5d 20 69 73 20  ournal_mode] is 
57f0: 73 65 74 20 74 6f 20 4f 46 46 20 28 74 68 75 73  set to OFF (thus
5800: 20 64 69 73 61 62 6c 69 6e 67 20 74 68 65 20 72   disabling the r
5810: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a  ollback journal.
5820: 66 69 6c 65 29 20 74 68 65 6e 20 74 68 65 20 62  file) then the b
5830: 65 68 61 76 69 6f 72 20 6f 66 20 74 68 65 20 52  ehavior of the R
5840: 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20  OLLBACK command 
5850: 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 3c 2f  is undefined..</
5860: 70 3e 0a 0a 3c 68 33 3e 52 65 73 70 6f 6e 73 65  p>..<h3>Response
5870: 20 54 6f 20 45 72 72 6f 72 73 20 57 69 74 68 69   To Errors Withi
5880: 6e 20 41 20 54 72 61 6e 73 61 63 74 69 6f 6e 3c  n A Transaction<
5890: 2f 68 33 3e 0a 0a 3c 70 3e 20 5e 28 49 66 20 63  /h3>..<p> ^(If c
58a0: 65 72 74 61 69 6e 20 6b 69 6e 64 73 20 6f 66 20  ertain kinds of 
58b0: 65 72 72 6f 72 73 20 6f 63 63 75 72 20 77 69 74  errors occur wit
58c0: 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
58d0: 6e 2c 20 74 68 65 0a 74 72 61 6e 73 61 63 74 69  n, the.transacti
58e0: 6f 6e 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f  on may or may no
58f0: 74 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  t be rolled back
5900: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 20   automatically. 
5910: 20 54 68 65 0a 65 72 72 6f 72 73 20 74 68 61 74   The.errors that
5920: 20 63 61 6e 20 63 61 75 73 65 20 61 6e 20 61 75   can cause an au
5930: 74 6f 6d 61 74 69 63 20 72 6f 6c 6c 62 61 63 6b  tomatic rollback
5940: 20 69 6e 63 6c 75 64 65 3a 3c 2f 70 3e 0a 0a 3c   include:</p>..<
5950: 75 6c 3e 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45  ul>.<li> [SQLITE
5960: 5f 46 55 4c 4c 5d 3a 20 64 61 74 61 62 61 73 65  _FULL]: database
5970: 20 6f 72 20 64 69 73 6b 20 66 75 6c 6c 0a 3c 6c   or disk full.<l
5980: 69 3e 20 5b 53 51 4c 49 54 45 5f 49 4f 45 52 52  i> [SQLITE_IOERR
5990: 5d 3a 20 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f  ]: disk I/O erro
59a0: 72 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 42  r.<li> [SQLITE_B
59b0: 55 53 59 5d 3a 20 64 61 74 61 62 61 73 65 20 69  USY]: database i
59c0: 6e 20 75 73 65 20 62 79 20 61 6e 6f 74 68 65 72  n use by another
59d0: 20 70 72 6f 63 65 73 73 0a 3c 6c 69 3e 20 5b 53   process.<li> [S
59e0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5d 3a 20 6f 75  QLITE_NOMEM]: ou
59f0: 74 20 6f 72 20 6d 65 6d 6f 72 79 0a 3c 2f 75 6c  t or memory.</ul
5a00: 3e 29 5e 0a 0a 3c 70 3e 0a 5e 46 6f 72 20 61 6c  >)^..<p>.^For al
5a10: 6c 20 6f 66 20 74 68 65 73 65 20 65 72 72 6f 72  l of these error
5a20: 73 2c 20 53 51 4c 69 74 65 20 61 74 74 65 6d 70  s, SQLite attemp
5a30: 74 73 20 74 6f 20 75 6e 64 6f 20 6a 75 73 74 20  ts to undo just 
5a40: 74 68 65 20 6f 6e 65 20 73 74 61 74 65 6d 65 6e  the one statemen
5a50: 74 0a 69 74 20 77 61 73 20 77 6f 72 6b 69 6e 67  t.it was working
5a60: 20 6f 6e 20 61 6e 64 20 6c 65 61 76 65 20 63 68   on and leave ch
5a70: 61 6e 67 65 73 20 66 72 6f 6d 20 70 72 69 6f 72  anges from prior
5a80: 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
5a90: 69 6e 20 74 68 65 0a 73 61 6d 65 20 74 72 61 6e  in the.same tran
5aa0: 73 61 63 74 69 6f 6e 20 69 6e 74 61 63 74 20 61  saction intact a
5ab0: 6e 64 20 63 6f 6e 74 69 6e 75 65 20 77 69 74 68  nd continue with
5ac0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
5ad0: 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 0a 64 65  .  ^However, .de
5ae0: 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 73  pending on the s
5af0: 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 65  tatement being e
5b00: 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65  valuated and the
5b10: 20 70 6f 69 6e 74 20 61 74 20 77 68 69 63 68 20   point at which 
5b20: 74 68 65 0a 65 72 72 6f 72 20 6f 63 63 75 72 73  the.error occurs
5b30: 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 6e 65  , it might be ne
5b40: 63 65 73 73 61 72 79 20 66 6f 72 20 53 51 4c 69  cessary for SQLi
5b50: 74 65 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61  te to rollback a
5b60: 6e 64 0a 63 61 6e 63 65 6c 20 74 68 65 20 65 6e  nd.cancel the en
5b70: 74 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  tire transaction
5b80: 2e 20 20 5e 41 6e 20 61 70 70 6c 69 63 61 74 69  .  ^An applicati
5b90: 6f 6e 20 63 61 6e 20 74 65 6c 6c 20 77 68 69 63  on can tell whic
5ba0: 68 0a 63 6f 75 72 73 65 20 6f 66 20 61 63 74 69  h.course of acti
5bb0: 6f 6e 20 53 51 4c 69 74 65 20 74 6f 6f 6b 20 62  on SQLite took b
5bc0: 79 20 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c  y using the.[sql
5bd0: 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d  ite3_get_autocom
5be0: 6d 69 74 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67  mit()] C-languag
5bf0: 65 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e  e interface.</p>
5c00: 0a 0a 3c 70 3e 49 74 20 69 73 20 72 65 63 6f 6d  ..<p>It is recom
5c10: 6d 65 6e 64 65 64 20 74 68 61 74 20 61 70 70 6c  mended that appl
5c20: 69 63 61 74 69 6f 6e 73 20 72 65 73 70 6f 6e 64  ications respond
5c30: 20 74 6f 20 74 68 65 20 65 72 72 6f 72 73 0a 6c   to the errors.l
5c40: 69 73 74 65 64 20 61 62 6f 76 65 20 62 79 20 65  isted above by e
5c50: 78 70 6c 69 63 69 74 6c 79 20 69 73 73 75 69 6e  xplicitly issuin
5c60: 67 20 61 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d  g a ROLLBACK com
5c70: 6d 61 6e 64 2e 20 20 5e 49 66 20 74 68 65 20 0a  mand.  ^If the .
5c80: 74 72 61 6e 73 61 63 74 69 6f 6e 20 68 61 73 20  transaction has 
5c90: 61 6c 72 65 61 64 79 20 62 65 65 6e 20 72 6f 6c  already been rol
5ca0: 6c 65 64 20 62 61 63 6b 20 61 75 74 6f 6d 61 74  led back automat
5cb0: 69 63 61 6c 6c 79 0a 62 79 20 74 68 65 20 65 72  ically.by the er
5cc0: 72 6f 72 20 72 65 73 70 6f 6e 73 65 2c 20 74 68  ror response, th
5cd0: 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  en the ROLLBACK 
5ce0: 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 66 61 69  command will fai
5cf0: 6c 20 77 69 74 68 20 61 6e 0a 65 72 72 6f 72 2c  l with an.error,
5d00: 20 62 75 74 20 6e 6f 20 68 61 72 6d 20 69 73 20   but no harm is 
5d10: 63 61 75 73 65 64 20 62 79 20 74 68 69 73 2e 3c  caused by this.<
5d20: 2f 70 3e 0a 0a 3c 70 3e 46 75 74 75 72 65 20 76  /p>..<p>Future v
5d30: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
5d40: 65 20 6d 61 79 20 65 78 74 65 6e 64 20 74 68 65  e may extend the
5d50: 20 6c 69 73 74 20 6f 66 20 65 72 72 6f 72 73 20   list of errors 
5d60: 77 68 69 63 68 0a 6d 69 67 68 74 20 63 61 75 73  which.might caus
5d70: 65 20 61 75 74 6f 6d 61 74 69 63 20 74 72 61 6e  e automatic tran
5d80: 73 61 63 74 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b  saction rollback
5d90: 2e 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f  .  Future versio
5da0: 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 6d 69 67  ns of.SQLite mig
5db0: 68 74 20 63 68 61 6e 67 65 20 74 68 65 20 65 72  ht change the er
5dc0: 72 6f 72 20 72 65 73 70 6f 6e 73 65 2e 20 20 49  ror response.  I
5dd0: 6e 20 70 61 72 74 69 63 75 6c 61 72 2c 20 77 65  n particular, we
5de0: 20 6d 61 79 0a 63 68 6f 6f 73 65 20 74 6f 20 73   may.choose to s
5df0: 69 6d 70 6c 69 66 79 20 74 68 65 20 69 6e 74 65  implify the inte
5e00: 72 66 61 63 65 20 69 6e 20 66 75 74 75 72 65 20  rface in future 
5e10: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
5e20: 74 65 20 62 79 0a 63 61 75 73 69 6e 67 20 74 68  te by.causing th
5e30: 65 20 65 72 72 6f 72 73 20 61 62 6f 76 65 20 74  e errors above t
5e40: 6f 20 66 6f 72 63 65 20 61 6e 20 75 6e 63 6f 6e  o force an uncon
5e50: 64 69 74 69 6f 6e 61 6c 20 72 6f 6c 6c 62 61 63  ditional rollbac
5e60: 6b 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  k.</p>..<tcl>.##
5e70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5e80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5e90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ea0: 23 23 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 0a 53 65  #############.Se
5ec0: 63 74 69 6f 6e 20 7b 53 41 56 45 50 4f 49 4e 54  ction {SAVEPOINT
5ed0: 7d 20 73 61 76 65 70 6f 69 6e 74 20 7b 53 41 56  } savepoint {SAV
5ee0: 45 50 4f 49 4e 54 20 52 45 4c 45 41 53 45 7d 0a  EPOINT RELEASE}.
5ef0: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
5f00: 44 69 61 67 72 61 6d 20 73 61 76 65 70 6f 69 6e  Diagram savepoin
5f10: 74 2d 73 74 6d 74 0a 52 65 63 75 72 73 69 76 65  t-stmt.Recursive
5f20: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 65  BubbleDiagram re
5f30: 6c 65 61 73 65 2d 73 74 6d 74 0a 52 65 63 75 72  lease-stmt.Recur
5f40: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
5f50: 6d 20 72 6f 6c 6c 62 61 63 6b 2d 73 74 6d 74 0a  m rollback-stmt.
5f60: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 53 41 56  </tcl>..<p> ^SAV
5f70: 45 50 4f 49 4e 54 73 20 61 72 65 20 61 20 6d 65  EPOINTs are a me
5f80: 74 68 6f 64 20 6f 66 20 63 72 65 61 74 69 6e 67  thod of creating
5f90: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20 73   transactions, s
5fa0: 69 6d 69 6c 61 72 20 74 6f 0a 5b 42 45 47 49 4e  imilar to.[BEGIN
5fb0: 5d 20 61 6e 64 20 5b 43 4f 4d 4d 49 54 5d 2c 20  ] and [COMMIT], 
5fc0: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
5fd0: 53 41 56 45 50 4f 49 4e 54 20 61 6e 64 20 52 45  SAVEPOINT and RE
5fe0: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 73 0a 61  LEASE commands.a
5ff0: 72 65 20 6e 61 6d 65 64 20 61 6e 64 20 6d 61 79  re named and may
6000: 20 62 65 20 6e 65 73 74 65 64 2e 3c 2f 70 3e 0a   be nested.</p>.
6010: 0a 3c 70 3e 20 5e 54 68 65 20 53 41 56 45 50 4f  .<p> ^The SAVEPO
6020: 49 4e 54 20 63 6f 6d 6d 61 6e 64 20 73 74 61 72  INT command star
6030: 74 73 20 61 20 6e 65 77 20 74 72 61 6e 73 61 63  ts a new transac
6040: 74 69 6f 6e 20 77 69 74 68 20 61 20 6e 61 6d 65  tion with a name
6050: 2e 0a 5e 54 68 65 20 74 72 61 6e 73 61 63 74 69  ..^The transacti
6060: 6f 6e 20 6e 61 6d 65 73 20 6e 65 65 64 20 6e 6f  on names need no
6070: 74 20 62 65 20 75 6e 69 71 75 65 2e 0a 5e 28 41  t be unique..^(A
6080: 20 53 41 56 45 50 4f 49 4e 54 20 63 61 6e 20 62   SAVEPOINT can b
6090: 65 20 73 74 61 72 74 65 64 20 65 69 74 68 65 72  e started either
60a0: 20 77 69 74 68 69 6e 20 6f 72 20 6f 75 74 73 69   within or outsi
60b0: 64 65 20 6f 66 0a 61 20 5b 42 45 47 49 4e 5d 2e  de of.a [BEGIN].
60c0: 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e 29 5e 20 20 5e  ..[COMMIT].)^  ^
60d0: 28 57 68 65 6e 20 61 20 53 41 56 45 50 4f 49 4e  (When a SAVEPOIN
60e0: 54 20 69 73 20 74 68 65 20 6f 75 74 65 72 2d 6d  T is the outer-m
60f0: 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 0a 61 6e  ost savepoint.an
6100: 64 20 69 74 20 69 73 20 6e 6f 74 20 77 69 74 68  d it is not with
6110: 69 6e 20 61 20 5b 42 45 47 49 4e 5d 2e 2e 2e 5b  in a [BEGIN]...[
6120: 43 4f 4d 4d 49 54 5d 20 74 68 65 6e 20 74 68 65  COMMIT] then the
6130: 20 62 65 68 61 76 69 6f 72 20 69 73 20 74 68 65   behavior is the
6140: 0a 73 61 6d 65 20 61 73 20 42 45 47 49 4e 20 44  .same as BEGIN D
6150: 45 46 45 52 52 45 44 20 54 52 41 4e 53 41 43 54  EFERRED TRANSACT
6160: 49 4f 4e 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ION.)^</p>..<p>^
6170: 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20  The ROLLBACK TO 
6180: 63 6f 6d 6d 61 6e 64 20 72 65 76 65 72 74 73 20  command reverts 
6190: 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65  the state of the
61a0: 20 64 61 74 61 62 61 73 65 20 62 61 63 6b 20 74   database back t
61b0: 6f 20 77 68 61 74 0a 69 74 20 77 61 73 20 6a 75  o what.it was ju
61c0: 73 74 20 61 66 74 65 72 20 74 68 65 20 63 6f 72  st after the cor
61d0: 72 65 73 70 6f 6e 64 69 6e 67 20 53 41 56 45 50  responding SAVEP
61e0: 4f 49 4e 54 2e 20 20 5e 4e 6f 74 65 20 74 68 61  OINT.  ^Note tha
61f0: 74 20 75 6e 6c 69 6b 65 20 74 68 61 74 0a 70 6c  t unlike that.pl
6200: 61 69 6e 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20 63  ain [ROLLBACK] c
6210: 6f 6d 6d 61 6e 64 20 28 77 69 74 68 6f 75 74 20  ommand (without 
6220: 74 68 65 20 54 4f 20 6b 65 79 77 6f 72 64 29 20  the TO keyword) 
6230: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20  the ROLLBACK TO 
6240: 63 6f 6d 6d 61 6e 64 0a 64 6f 65 73 20 6e 6f 74  command.does not
6250: 20 63 61 6e 63 65 6c 20 74 68 65 20 74 72 61 6e   cancel the tran
6260: 73 61 63 74 69 6f 6e 2e 20 20 5e 49 6e 73 74 65  saction.  ^Inste
6270: 61 64 20 6f 66 20 63 61 6e 63 65 6c 6c 69 6e 67  ad of cancelling
6280: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
6290: 2c 0a 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54  ,.the ROLLBACK T
62a0: 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 73 74 61 72  O command restar
62b0: 74 73 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ts the transacti
62c0: 6f 6e 20 61 67 61 69 6e 20 61 74 20 74 68 65 20  on again at the 
62d0: 62 65 67 69 6e 6e 69 6e 67 2e 0a 5e 41 6c 6c 20  beginning..^All 
62e0: 69 6e 74 65 72 76 65 6e 69 6e 67 20 53 41 56 45  intervening SAVE
62f0: 50 4f 49 4e 54 73 20 61 72 65 20 63 61 6e 63 65  POINTs are cance
6300: 6c 65 64 2c 20 68 6f 77 65 76 65 72 2e 3c 2f 70  led, however.</p
6310: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 4c 45 41  >..<p>^The RELEA
6320: 53 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6c 69  SE command is li
6330: 6b 65 20 61 20 5b 43 4f 4d 4d 49 54 5d 20 66 6f  ke a [COMMIT] fo
6340: 72 20 61 20 53 41 56 45 50 4f 49 4e 54 2e 0a 5e  r a SAVEPOINT..^
6350: 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  The RELEASE comm
6360: 61 6e 64 20 63 61 75 73 65 73 20 61 6c 6c 20 73  and causes all s
6370: 61 76 65 70 6f 69 6e 74 73 20 62 61 63 6b 20 74  avepoints back t
6380: 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20  o and including 
6390: 74 68 65 20 0a 6d 6f 73 74 20 72 65 63 65 6e 74  the .most recent
63a0: 20 73 61 76 65 70 6f 69 6e 74 20 77 69 74 68 20   savepoint with 
63b0: 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 20  a matching name 
63c0: 74 6f 20 62 65 20 72 65 6d 6f 76 65 64 20 66 72  to be removed fr
63d0: 6f 6d 20 74 68 65 20 0a 74 72 61 6e 73 61 63 74  om the .transact
63e0: 69 6f 6e 20 73 74 61 63 6b 2e 20 20 5e 54 68 65  ion stack.  ^The
63f0: 20 52 45 4c 45 41 53 45 20 6f 66 20 61 6e 20 69   RELEASE of an i
6400: 6e 6e 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e  nner transaction
6410: 0a 64 6f 65 73 20 6e 6f 74 20 63 61 75 73 65 20  .does not cause 
6420: 61 6e 79 20 63 68 61 6e 67 65 73 20 74 6f 20 62  any changes to b
6430: 65 20 77 72 69 74 74 65 6e 20 74 6f 20 74 68 65  e written to the
6440: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 3b 20   database file; 
6450: 69 74 20 6d 65 72 65 6c 79 0a 72 65 6d 6f 76 65  it merely.remove
6460: 73 20 73 61 76 65 70 6f 69 6e 74 73 20 66 72 6f  s savepoints fro
6470: 6d 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  m the transactio
6480: 6e 20 73 74 61 63 6b 20 73 75 63 68 20 74 68 61  n stack such tha
6490: 74 20 69 74 20 69 73 0a 6e 6f 20 6c 6f 6e 67 65  t it is.no longe
64a0: 72 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 52 4f  r possible to RO
64b0: 4c 4c 42 41 43 4b 20 54 4f 20 74 68 6f 73 65 20  LLBACK TO those 
64c0: 73 61 76 65 70 6f 69 6e 74 73 2e 0a 5e 49 66 20  savepoints..^If 
64d0: 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  a RELEASE comman
64e0: 64 20 72 65 6c 65 61 73 65 73 20 74 68 65 20 6f  d releases the o
64f0: 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69  utermost savepoi
6500: 6e 74 2c 20 73 6f 0a 74 68 61 74 20 74 68 65 20  nt, so.that the 
6510: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
6520: 6b 20 62 65 63 6f 6d 65 73 20 65 6d 70 74 79 2c  k becomes empty,
6530: 20 74 68 65 6e 20 52 45 4c 45 41 53 45 20 69 73   then RELEASE is
6540: 20 74 68 65 20 73 61 6d 65 0a 61 73 20 5b 43 4f   the same.as [CO
6550: 4d 4d 49 54 5d 2e 0a 5e 54 68 65 20 5b 43 4f 4d  MMIT]..^The [COM
6560: 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64 20 6d 61 79  MIT] command may
6570: 20 62 65 20 75 73 65 64 20 74 6f 20 72 65 6c 65   be used to rele
6580: 61 73 65 20 61 6c 6c 20 73 61 76 65 70 6f 69 6e  ase all savepoin
6590: 74 73 20 61 6e 64 0a 63 6f 6d 6d 69 74 20 74 68  ts and.commit th
65a0: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 65 76  e transaction ev
65b0: 65 6e 20 69 66 20 74 68 65 20 74 72 61 6e 73 61  en if the transa
65c0: 63 74 69 6f 6e 20 77 61 73 20 6f 72 69 67 69 6e  ction was origin
65d0: 61 6c 6c 79 20 73 74 61 72 74 65 64 0a 62 79 20  ally started.by 
65e0: 61 20 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d  a SAVEPOINT comm
65f0: 61 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20 61  and instead of a
6600: 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64   [BEGIN] command
6610: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68  .</p>..<p>^If th
6620: 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65  e savepoint-name
6630: 20 69 6e 20 61 20 52 45 4c 45 41 53 45 20 63 6f   in a RELEASE co
6640: 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6d  mmand does not m
6650: 61 74 63 68 20 61 6e 79 0a 73 61 76 65 70 6f 69  atch any.savepoi
6660: 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  nt currently in 
6670: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
6680: 73 74 61 63 6b 2c 20 74 68 65 6e 20 6e 6f 20 73  stack, then no s
6690: 61 76 65 70 6f 69 6e 74 73 20 61 72 65 0a 72 65  avepoints are.re
66a0: 6c 65 61 73 65 64 2c 20 74 68 65 20 64 61 74 61  leased, the data
66b0: 62 61 73 65 20 69 73 20 75 6e 63 68 61 6e 67 65  base is unchange
66c0: 64 2c 20 61 6e 64 20 74 68 65 20 52 45 4c 45 41  d, and the RELEA
66d0: 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72  SE command retur
66e0: 6e 73 0a 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e  ns.an error.</p>
66f0: 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20  ..<p>^Note that 
6700: 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63  an inner transac
6710: 74 69 6f 6e 20 6d 69 67 68 74 20 63 6f 6d 6d 69  tion might commi
6720: 74 20 28 75 73 69 6e 67 20 74 68 65 20 52 45 4c  t (using the REL
6730: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 29 0a 62 75  EASE command).bu
6740: 74 20 74 68 65 6e 20 6c 61 74 65 72 20 68 61 76  t then later hav
6750: 65 20 69 74 73 20 77 6f 72 6b 20 75 6e 64 6f 6e  e its work undon
6760: 65 20 62 79 20 61 20 52 4f 4c 4c 42 41 43 4b 20  e by a ROLLBACK 
6770: 69 6e 20 61 6e 20 6f 75 74 65 72 20 74 72 61 6e  in an outer tran
6780: 73 61 63 74 69 6f 6e 2e 0a 5e 41 20 70 6f 77 65  saction..^A powe
6790: 72 20 66 61 69 6c 75 72 65 20 6f 72 20 70 72 6f  r failure or pro
67a0: 67 72 61 6d 20 63 72 61 73 68 20 6f 72 20 4f 53  gram crash or OS
67b0: 20 63 72 61 73 68 20 77 69 6c 6c 20 63 61 75 73   crash will caus
67c0: 65 20 74 68 65 20 6f 75 74 65 72 2d 6d 6f 73 74  e the outer-most
67d0: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 6f 20  .transaction to 
67e0: 72 6f 6c 6c 62 61 63 6b 2c 20 75 6e 64 6f 69 6e  rollback, undoin
67f0: 67 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68  g all changes th
6800: 61 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64  at have occurred
6810: 20 77 69 74 68 69 6e 0a 74 68 61 74 20 6f 75 74   within.that out
6820: 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  er transaction, 
6830: 65 76 65 6e 20 63 68 61 6e 67 65 73 20 74 68 61  even changes tha
6840: 74 20 68 61 76 65 20 73 75 70 70 6f 73 65 64 6c  t have supposedl
6850: 79 20 62 65 65 6e 20 22 63 6f 6d 6d 69 74 74 65  y been "committe
6860: 64 22 0a 62 79 20 74 68 65 20 52 45 4c 45 41 53  d".by the RELEAS
6870: 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 43 6f 6e  E command.  ^Con
6880: 74 65 6e 74 20 69 73 20 6e 6f 74 20 61 63 74 75  tent is not actu
6890: 61 6c 6c 79 20 63 6f 6d 6d 69 74 74 65 64 20 6f  ally committed o
68a0: 6e 20 74 68 65 20 64 69 73 6b 20 0a 75 6e 74 69  n the disk .unti
68b0: 6c 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20  l the outermost 
68c0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d  transaction comm
68d0: 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  its.</p>..<p>The
68e0: 72 65 20 61 72 65 20 73 65 76 65 72 61 6c 20 77  re are several w
68f0: 61 79 73 20 6f 66 20 74 68 69 6e 6b 69 6e 67 20  ays of thinking 
6900: 61 62 6f 75 74 20 74 68 65 20 52 45 4c 45 41 53  about the RELEAS
6910: 45 20 63 6f 6d 6d 61 6e 64 3a 3c 2f 70 3e 0a 0a  E command:</p>..
6920: 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 53 6f 6d  <ul>.<li><p>.Som
6930: 65 20 70 65 6f 70 6c 65 20 76 69 65 77 20 52 45  e people view RE
6940: 4c 45 41 53 45 20 61 73 20 74 68 65 20 65 71 75  LEASE as the equ
6950: 69 76 61 6c 65 6e 74 20 6f 66 20 43 4f 4d 4d 49  ivalent of COMMI
6960: 54 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49 4e  T for a SAVEPOIN
6970: 54 2e 0a 54 68 69 73 20 69 73 20 61 6e 20 61 63  T..This is an ac
6980: 63 65 70 74 61 62 6c 65 20 70 6f 69 6e 74 20 6f  ceptable point o
6990: 66 20 76 69 65 77 20 61 73 20 6c 6f 6e 67 20 61  f view as long a
69a0: 73 20 6f 6e 65 20 72 65 6d 65 6d 62 65 72 73 20  s one remembers 
69b0: 74 68 61 74 20 74 68 65 0a 63 68 61 6e 67 65 73  that the.changes
69c0: 20 63 6f 6d 6d 69 74 74 65 64 20 62 79 20 61 6e   committed by an
69d0: 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74 69   inner transacti
69e0: 6f 6e 20 6d 69 67 68 74 20 6c 61 74 65 72 20 62  on might later b
69f0: 65 20 75 6e 64 6f 6e 65 20 62 79 20 61 0a 72 6f  e undone by a.ro
6a00: 6c 6c 62 61 63 6b 20 69 6e 20 61 6e 20 6f 75 74  llback in an out
6a10: 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c  er transaction.<
6a20: 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
6a30: 3e 0a 41 6e 6f 74 68 65 72 20 76 69 65 77 20 6f  >.Another view o
6a40: 66 20 52 45 4c 45 41 53 45 20 69 73 20 74 68 61  f RELEASE is tha
6a50: 74 20 69 74 20 6d 65 72 67 65 73 20 61 20 6e 61  t it merges a na
6a60: 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  med transaction 
6a70: 69 6e 74 6f 20 69 74 73 0a 70 61 72 65 6e 74 20  into its.parent 
6a80: 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 73 6f 20  transaction, so 
6a90: 74 68 61 74 20 74 68 65 20 6e 61 6d 65 64 20 74  that the named t
6aa0: 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 69  ransaction and i
6ab0: 74 73 20 70 61 72 65 6e 74 20 62 65 63 6f 6d 65  ts parent become
6ac0: 0a 74 68 65 20 73 61 6d 65 20 74 72 61 6e 73 61  .the same transa
6ad0: 63 74 69 6f 6e 2e 20 20 41 66 74 65 72 20 52 45  ction.  After RE
6ae0: 4c 45 41 53 45 2c 20 74 68 65 20 6e 61 6d 65 64  LEASE, the named
6af0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64   transaction and
6b00: 20 69 74 73 20 70 61 72 65 6e 74 0a 77 69 6c 6c   its parent.will
6b10: 20 63 6f 6d 6d 69 74 20 6f 72 20 72 6f 6c 6c 62   commit or rollb
6b20: 61 63 6b 20 74 6f 67 65 74 68 65 72 2c 20 77 68  ack together, wh
6b30: 61 74 65 76 65 72 20 74 68 65 69 72 20 66 61 74  atever their fat
6b40: 65 20 6d 61 79 20 62 65 2e 0a 3c 2f 70 3e 3c 2f  e may be..</p></
6b50: 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 4f 6e 65  li>..<li><p>.One
6b60: 20 63 61 6e 20 61 6c 73 6f 20 74 68 69 6e 6b 20   can also think 
6b70: 6f 66 20 73 61 76 65 70 6f 69 6e 74 73 20 61 73  of savepoints as
6b80: 0a 22 6d 61 72 6b 73 22 20 69 6e 20 74 68 65 20  ."marks" in the 
6b90: 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 69 6d 65  transaction time
6ba0: 6c 69 6e 65 2e 20 20 49 6e 20 74 68 69 73 20 76  line.  In this v
6bb0: 69 65 77 2c 20 74 68 65 20 53 41 56 45 50 4f 49  iew, the SAVEPOI
6bc0: 4e 54 20 63 6f 6d 6d 61 6e 64 0a 63 72 65 61 74  NT command.creat
6bd0: 65 73 20 61 20 6e 65 77 20 6d 61 72 6b 2c 20 74  es a new mark, t
6be0: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63  he ROLLBACK TO c
6bf0: 6f 6d 6d 61 6e 64 20 72 65 77 69 6e 64 73 20 74  ommand rewinds t
6c00: 68 65 20 74 69 6d 65 6c 69 6e 65 20 62 61 63 6b  he timeline back
6c10: 0a 74 6f 20 61 20 70 6f 69 6e 74 20 6a 75 73 74  .to a point just
6c20: 20 61 66 74 65 72 20 74 68 65 20 6e 61 6d 65 64   after the named
6c30: 20 6d 61 72 6b 2c 20 61 6e 64 20 74 68 65 20 52   mark, and the R
6c40: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 0a 65  ELEASE command.e
6c50: 72 61 73 65 73 20 6d 61 72 6b 73 20 66 72 6f 6d  rases marks from
6c60: 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 20 77 69   the timeline wi
6c70: 74 68 6f 75 74 20 61 63 74 75 61 6c 6c 79 20 6d  thout actually m
6c80: 61 6b 69 6e 67 20 61 6e 79 0a 63 68 61 6e 67 65  aking any.change
6c90: 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  s to the databas
6ca0: 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75  e..</p></li>.</u
6cb0: 6c 3e 0a 0a 0a 0a 3c 68 33 3e 54 72 61 6e 73 61  l>....<h3>Transa
6cc0: 63 74 69 6f 6e 20 4e 65 73 74 69 6e 67 20 52 75  ction Nesting Ru
6cd0: 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68  les</h3>..<p>^Th
6ce0: 65 20 6c 61 73 74 20 74 72 61 6e 73 61 63 74 69  e last transacti
6cf0: 6f 6e 20 73 74 61 72 74 65 64 20 77 69 6c 6c 20  on started will 
6d00: 62 65 20 74 68 65 20 66 69 72 73 74 0a 74 72 61  be the first.tra
6d10: 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 74  nsaction committ
6d20: 65 64 20 6f 72 20 72 6f 6c 6c 65 64 20 62 61 63  ed or rolled bac
6d30: 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  k.</p>..<p>^The 
6d40: 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64 20  [BEGIN] command 
6d50: 6f 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20 74 68  only works if th
6d60: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74  e transaction st
6d70: 61 63 6b 20 69 73 20 65 6d 70 74 79 2c 20 6f 72  ack is empty, or
6d80: 0a 69 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 20  .in other words 
6d90: 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  if there are no 
6da0: 70 65 6e 64 69 6e 67 20 74 72 61 6e 73 61 63 74  pending transact
6db0: 69 6f 6e 73 2e 20 20 5e 49 66 20 74 68 65 20 74  ions.  ^If the t
6dc0: 72 61 6e 73 61 63 74 69 6f 6e 0a 73 74 61 63 6b  ransaction.stack
6dd0: 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 77 68   is not empty wh
6de0: 65 6e 20 74 68 65 20 5b 42 45 47 49 4e 5d 20 63  en the [BEGIN] c
6df0: 6f 6d 6d 61 6e 64 20 69 73 20 69 6e 76 6f 6b 65  ommand is invoke
6e00: 64 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6d 6d  d, then the comm
6e10: 61 6e 64 0a 66 61 69 6c 73 20 77 69 74 68 20 61  and.fails with a
6e20: 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70  n error.</p>..<p
6e30: 3e 5e 54 68 65 20 5b 43 4f 4d 4d 49 54 5d 20 63  >^The [COMMIT] c
6e40: 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 69 74 73 20 61  ommand commits a
6e50: 6c 6c 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 74  ll outstanding t
6e60: 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 6e 64 20  ransactions and 
6e70: 6c 65 61 76 65 73 0a 74 68 65 20 74 72 61 6e 73  leaves.the trans
6e80: 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70  action stack emp
6e90: 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ty.</p>..<p>^The
6ea0: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
6eb0: 20 73 74 61 72 74 73 20 77 69 74 68 20 74 68 65   starts with the
6ec0: 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 64 64   most recent add
6ed0: 69 74 69 6f 6e 20 74 6f 20 74 68 65 0a 74 72 61  ition to the.tra
6ee0: 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 61  nsaction stack a
6ef0: 6e 64 20 72 65 6c 65 61 73 65 73 20 73 61 76 65  nd releases save
6f00: 70 6f 69 6e 74 73 20 62 61 63 6b 77 61 72 64 73  points backwards
6f10: 20 0a 69 6e 20 74 69 6d 65 20 75 6e 74 69 6c 20   .in time until 
6f20: 69 74 20 72 65 6c 65 61 73 65 73 20 61 20 73 61  it releases a sa
6f30: 76 65 70 6f 69 6e 74 20 77 69 74 68 20 61 20 6d  vepoint with a m
6f40: 61 74 63 68 69 6e 67 20 73 61 76 65 70 6f 69 6e  atching savepoin
6f50: 74 2d 6e 61 6d 65 2e 0a 5e 50 72 69 6f 72 20 73  t-name..^Prior s
6f60: 61 76 65 70 6f 69 6e 74 73 2c 20 65 76 65 6e 20  avepoints, even 
6f70: 73 61 76 65 70 6f 69 6e 74 73 20 77 69 74 68 20  savepoints with 
6f80: 6d 61 74 63 68 69 6e 67 20 73 61 76 65 70 6f 69  matching savepoi
6f90: 6e 74 2d 6e 61 6d 65 73 2c 20 61 72 65 0a 75 6e  nt-names, are.un
6fa0: 63 68 61 6e 67 65 64 2e 0a 5e 49 66 20 74 68 65  changed..^If the
6fb0: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
6fc0: 20 63 61 75 73 65 73 20 74 68 65 0a 74 72 61 6e   causes the.tran
6fd0: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 74 6f  saction stack to
6fe0: 20 62 65 63 6f 6d 65 20 65 6d 70 74 79 20 28 69   become empty (i
6ff0: 66 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f  f the RELEASE co
7000: 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20 74  mmand releases t
7010: 68 65 0a 6f 75 74 65 72 6d 6f 73 74 20 74 72 61  he.outermost tra
7020: 6e 73 61 63 74 69 6f 6e 20 66 72 6f 6d 20 74 68  nsaction from th
7030: 65 20 73 74 61 63 6b 29 20 74 68 65 6e 20 74 68  e stack) then th
7040: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f  e transaction co
7050: 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  mmits.</p>..<p>^
7060: 54 68 65 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20 63  The [ROLLBACK] c
7070: 6f 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74 20 61  ommand without a
7080: 20 54 4f 20 63 6c 61 75 73 65 20 72 6f 6c 6c 73   TO clause rolls
7090: 20 62 61 63 6b 73 20 61 6c 6c 20 74 72 61 6e 73   backs all trans
70a0: 61 63 74 69 6f 6e 73 0a 61 6e 64 20 6c 65 61 76  actions.and leav
70b0: 65 73 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  es the transacti
70c0: 6f 6e 20 73 74 61 63 6b 20 65 6d 70 74 79 2e 3c  on stack empty.<
70d0: 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 4f 4c  /p>..<p>^The ROL
70e0: 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69  LBACK command wi
70f0: 74 68 20 61 20 54 4f 20 63 6c 61 75 73 65 20 72  th a TO clause r
7100: 6f 6c 6c 73 20 62 61 63 6b 20 74 72 61 6e 73 61  olls back transa
7110: 63 74 69 6f 6e 73 20 67 6f 69 6e 67 0a 62 61 63  ctions going.bac
7120: 6b 77 61 72 64 73 20 69 6e 20 74 69 6d 65 20 62  kwards in time b
7130: 61 63 6b 20 74 6f 20 74 68 65 20 6d 6f 73 74 20  ack to the most 
7140: 72 65 63 65 6e 74 20 53 41 56 45 50 4f 49 4e 54  recent SAVEPOINT
7150: 20 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67   with a matching
7160: 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 53 41 56 45   name..^The SAVE
7170: 50 4f 49 4e 54 20 77 69 74 68 20 74 68 65 20 6d  POINT with the m
7180: 61 74 63 68 69 6e 67 20 6e 61 6d 65 20 72 65 6d  atching name rem
7190: 61 69 6e 73 20 6f 6e 20 74 68 65 20 74 72 61 6e  ains on the tran
71a0: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2c 0a 62  saction stack,.b
71b0: 75 74 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20  ut all database 
71c0: 63 68 61 6e 67 65 73 20 74 68 61 74 20 6f 63 63  changes that occ
71d0: 75 72 72 65 64 20 61 66 74 65 72 20 74 68 61 74  urred after that
71e0: 20 53 41 56 45 50 4f 49 4e 54 20 77 61 73 20 63   SAVEPOINT was c
71f0: 72 65 61 74 65 64 0a 61 72 65 20 72 6f 6c 6c 65  reated.are rolle
7200: 64 20 62 61 63 6b 2e 20 20 5e 49 66 20 74 68 65  d back.  ^If the
7210: 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 20   savepoint-name 
7220: 69 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f  in a ROLLBACK TO
7230: 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f   command does no
7240: 74 0a 6d 61 74 63 68 20 61 6e 79 20 53 41 56 45  t.match any SAVE
7250: 50 4f 49 4e 54 20 6f 6e 20 74 68 65 20 73 74 61  POINT on the sta
7260: 63 6b 2c 20 74 68 65 6e 20 74 68 65 20 52 4f 4c  ck, then the ROL
7270: 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 66 61  LBACK command fa
7280: 69 6c 73 20 77 69 74 68 20 61 6e 0a 65 72 72 6f  ils with an.erro
7290: 72 20 61 6e 64 20 6c 65 61 76 65 73 20 74 68 65  r and leaves the
72a0: 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 64 61   state of the da
72b0: 74 61 62 61 73 65 20 75 6e 63 68 61 6e 67 65 64  tabase unchanged
72c0: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
72d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
72e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
72f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7300: 23 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 0a 53 65 63  ############.Sec
7320: 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74 20 63 6f 6d  tion comment com
7330: 6d 65 6e 74 20 7b 63 6f 6d 6d 65 6e 74 20 2a 63  ment {comment *c
7340: 6f 6d 6d 65 6e 74 73 7d 0a 0a 52 65 63 75 72 73  omments}..Recurs
7350: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
7360: 20 63 6f 6d 6d 65 6e 74 2d 73 79 6e 74 61 78 0a   comment-syntax.
7370: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d  </tcl>..<p>^Comm
7380: 65 6e 74 73 20 61 72 65 20 6e 6f 74 20 53 51 4c  ents are not SQL
7390: 20 63 6f 6d 6d 61 6e 64 73 2c 20 62 75 74 20 63   commands, but c
73a0: 61 6e 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20  an occur within 
73b0: 74 68 65 20 74 65 78 74 20 6f 66 0a 53 51 4c 20  the text of.SQL 
73c0: 71 75 65 72 69 65 73 20 70 61 73 73 65 64 20 74  queries passed t
73d0: 6f 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  o [sqlite3_prepa
73e0: 72 65 5f 76 32 28 29 5d 20 61 6e 64 20 72 65 6c  re_v2()] and rel
73f0: 61 74 65 64 20 69 6e 74 65 72 66 61 63 65 73 2e  ated interfaces.
7400: 0a 5e 43 6f 6d 6d 65 6e 74 73 20 61 72 65 20 74  .^Comments are t
7410: 72 65 61 74 65 64 20 61 73 20 77 68 69 74 65 73  reated as whites
7420: 70 61 63 65 20 62 79 20 74 68 65 20 70 61 72 73  pace by the pars
7430: 65 72 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 63 61  er..^Comments ca
7440: 6e 20 62 65 67 69 6e 20 61 6e 79 77 68 65 72 65  n begin anywhere
7450: 20 77 68 69 74 65 73 70 61 63 65 20 0a 63 61 6e   whitespace .can
7460: 20 62 65 20 66 6f 75 6e 64 2c 20 69 6e 63 6c 75   be found, inclu
7470: 64 69 6e 67 20 69 6e 73 69 64 65 20 65 78 70 72  ding inside expr
7480: 65 73 73 69 6f 6e 73 20 74 68 61 74 20 73 70 61  essions that spa
7490: 6e 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73  n multiple lines
74a0: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 53 51 4c 20  ..</p>..<p>^SQL 
74b0: 63 6f 6d 6d 65 6e 74 73 20 62 65 67 69 6e 20 77  comments begin w
74c0: 69 74 68 20 74 77 6f 20 63 6f 6e 73 65 63 75 74  ith two consecut
74d0: 69 76 65 20 22 2d 22 20 63 68 61 72 61 63 74 65  ive "-" characte
74e0: 72 73 20 28 41 53 43 49 49 20 30 78 32 64 29 0a  rs (ASCII 0x2d).
74f0: 61 6e 64 20 65 78 74 65 6e 64 20 75 70 20 74 6f  and extend up to
7500: 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74   and including t
7510: 68 65 20 6e 65 78 74 20 6e 65 77 6c 69 6e 65 20  he next newline 
7520: 63 68 61 72 61 63 74 65 72 20 28 41 53 43 49 49  character (ASCII
7530: 20 30 78 30 61 29 0a 6f 72 20 75 6e 74 69 6c 20   0x0a).or until 
7540: 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74  the end of input
7550: 2c 20 77 68 69 63 68 65 76 65 72 20 63 6f 6d 65  , whichever come
7560: 73 20 66 69 72 73 74 2e 3c 2f 70 3e 0a 0a 3c 70  s first.</p>..<p
7570: 3e 5e 43 2d 73 74 79 6c 65 20 63 6f 6d 6d 65 6e  >^C-style commen
7580: 74 73 20 62 65 67 69 6e 0a 77 69 74 68 20 22 2f  ts begin.with "/
7590: 2a 22 20 61 6e 64 20 65 78 74 65 6e 64 20 75 70  *" and extend up
75a0: 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e   to and includin
75b0: 67 20 74 68 65 20 6e 65 78 74 20 22 2a 2f 22 20  g the next "*/" 
75c0: 63 68 61 72 61 63 74 65 72 20 70 61 69 72 0a 6f  character pair.o
75d0: 72 20 75 6e 74 69 6c 20 74 68 65 20 65 6e 64 20  r until the end 
75e0: 6f 66 20 69 6e 70 75 74 2c 20 77 68 69 63 68 65  of input, whiche
75f0: 76 65 72 20 63 6f 6d 65 73 20 66 69 72 73 74 2e  ver comes first.
7600: 20 20 5e 43 2d 73 74 79 6c 65 20 63 6f 6d 6d 65    ^C-style comme
7610: 6e 74 73 0a 63 61 6e 20 73 70 61 6e 20 6d 75 6c  nts.can span mul
7620: 74 69 70 6c 65 20 6c 69 6e 65 73 2e 20 3c 2f 70  tiple lines. </p
7630: 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65 6e 74 73 20  >..<p>^Comments 
7640: 63 61 6e 20 61 70 70 65 61 72 20 61 6e 79 77 68  can appear anywh
7650: 65 72 65 20 77 68 69 74 65 73 70 61 63 65 20 63  ere whitespace c
7660: 61 6e 20 6f 63 63 75 72 2c 0a 69 6e 63 6c 75 64  an occur,.includ
7670: 69 6e 67 20 69 6e 73 69 64 65 20 65 78 70 72 65  ing inside expre
7680: 73 73 69 6f 6e 73 20 61 6e 64 20 69 6e 20 74 68  ssions and in th
7690: 65 20 6d 69 64 64 6c 65 20 6f 66 20 6f 74 68 65  e middle of othe
76a0: 72 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  r SQL statements
76b0: 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 64 6f 20 6e  ..^Comments do n
76c0: 6f 74 20 6e 65 73 74 2e 0a 3c 2f 70 3e 0a 0a 0a  ot nest..</p>...
76d0: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
76e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
76f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7700: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7710: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7720: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52  ####.Section {CR
7730: 45 41 54 45 20 49 4e 44 45 58 7d 20 63 72 65 61  EATE INDEX} crea
7740: 74 65 69 6e 64 65 78 20 7b 7b 43 52 45 41 54 45  teindex {{CREATE
7750: 20 49 4e 44 45 58 7d 7d 0a 0a 52 65 63 75 72 73   INDEX}}..Recurs
7760: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
7770: 20 63 72 65 61 74 65 2d 69 6e 64 65 78 2d 73 74   create-index-st
7780: 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  mt.</tcl>..<p>^T
7790: 68 65 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  he CREATE INDEX 
77a0: 63 6f 6d 6d 61 6e 64 20 63 6f 6e 73 69 73 74 73  command consists
77b0: 20 6f 66 20 74 68 65 20 6b 65 79 77 6f 72 64 73   of the keywords
77c0: 20 22 43 52 45 41 54 45 20 49 4e 44 45 58 22 20   "CREATE INDEX" 
77d0: 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 74 68 65 20  followed.by the 
77e0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 65 77 20  name of the new 
77f0: 69 6e 64 65 78 2c 20 74 68 65 20 6b 65 79 77 6f  index, the keywo
7800: 72 64 20 22 4f 4e 22 2c 20 74 68 65 20 6e 61 6d  rd "ON", the nam
7810: 65 20 6f 66 20 61 20 70 72 65 76 69 6f 75 73 6c  e of a previousl
7820: 79 0a 63 72 65 61 74 65 64 20 74 61 62 6c 65 20  y.created table 
7830: 74 68 61 74 20 69 73 20 74 6f 20 62 65 20 69 6e  that is to be in
7840: 64 65 78 65 64 2c 20 61 6e 64 20 61 20 70 61 72  dexed, and a par
7850: 65 6e 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20  enthesized list 
7860: 6f 66 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 0a  of table column.
7870: 6e 61 6d 65 73 20 61 6e 64 2f 6f 72 20 65 78 70  names and/or exp
7880: 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61 72  ressions that ar
7890: 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 69  e used for the i
78a0: 6e 64 65 78 20 6b 65 79 2e 0a 49 66 20 74 68 65  ndex key..If the
78b0: 20 6f 70 74 69 6f 6e 61 6c 20 57 48 45 52 45 20   optional WHERE 
78c0: 63 6c 61 75 73 65 20 69 73 20 69 6e 63 6c 75 64  clause is includ
78d0: 65 64 2c 20 74 68 65 6e 20 74 68 65 20 69 6e 64  ed, then the ind
78e0: 65 78 20 69 73 20 61 20 22 5b 70 61 72 74 69 61  ex is a "[partia
78f0: 6c 20 69 6e 64 65 78 5d 22 2e 0a 3c 2f 70 3e 0a  l index]"..</p>.
7900: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
7910: 74 20 7b 64 65 73 63 69 64 78 7d 20 7b 64 65 73  t {descidx} {des
7920: 63 65 6e 64 69 6e 67 20 69 6e 64 69 63 65 73 7d  cending indices}
7930: 20 7b 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64   {descending ind
7940: 65 78 7d 20 7b 64 65 73 63 65 6e 64 69 6e 67 20  ex} {descending 
7950: 69 6e 64 65 78 65 73 7d 3c 2f 74 63 6c 3e 0a 3c  indexes}</tcl>.<
7960: 70 3e 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6e  p>^Each column n
7970: 61 6d 65 20 6f 72 20 65 78 70 72 65 73 73 69 6f  ame or expressio
7980: 6e 20 63 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65  n can be followe
7990: 64 20 62 79 20 6f 6e 65 0a 6f 66 20 74 68 65 20  d by one.of the 
79a0: 22 41 53 43 22 20 6f 72 20 22 44 45 53 43 22 20  "ASC" or "DESC" 
79b0: 6b 65 79 77 6f 72 64 73 20 74 6f 20 69 6e 64 69  keywords to indi
79c0: 63 61 74 65 20 73 6f 72 74 20 6f 72 64 65 72 2e  cate sort order.
79d0: 0a 5e 54 68 65 20 73 6f 72 74 20 6f 72 64 65 72  .^The sort order
79e0: 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20   may or may not 
79f0: 62 65 20 69 67 6e 6f 72 65 64 20 64 65 70 65 6e  be ignored depen
7a00: 64 69 6e 67 0a 6f 6e 20 74 68 65 20 64 61 74 61  ding.on the data
7a10: 62 61 73 65 20 66 69 6c 65 20 66 6f 72 6d 61 74  base file format
7a20: 2c 20 61 6e 64 20 69 6e 20 70 61 72 74 69 63 75  , and in particu
7a30: 6c 61 72 20 74 68 65 20 5b 73 63 68 65 6d 61 20  lar the [schema 
7a40: 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 5d 2e 0a  format number]..
7a50: 5e 54 68 65 20 22 6c 65 67 61 63 79 22 20 73 63  ^The "legacy" sc
7a60: 68 65 6d 61 20 66 6f 72 6d 61 74 20 28 31 29 20  hema format (1) 
7a70: 69 67 6e 6f 72 65 73 20 69 6e 64 65 78 0a 73 6f  ignores index.so
7a80: 72 74 20 6f 72 64 65 72 2e 20 20 5e 54 68 65 20  rt order.  ^The 
7a90: 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78  descending index
7aa0: 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 28   schema format (
7ab0: 34 29 20 74 61 6b 65 73 20 69 6e 64 65 78 20 73  4) takes index s
7ac0: 6f 72 74 20 6f 72 64 65 72 0a 69 6e 74 6f 20 61  ort order.into a
7ad0: 63 63 6f 75 6e 74 2e 20 20 4f 6e 6c 79 20 76 65  ccount.  Only ve
7ae0: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
7af0: 20 33 2e 33 2e 30 20 61 6e 64 20 6c 61 74 65 72   3.3.0 and later
7b00: 20 61 72 65 20 61 62 6c 65 20 74 6f 20 75 6e 64   are able to und
7b10: 65 72 73 74 61 6e 64 0a 74 68 65 20 64 65 73 63  erstand.the desc
7b20: 65 6e 64 69 6e 67 20 69 6e 64 65 78 20 66 6f 72  ending index for
7b30: 6d 61 74 2e 20 46 6f 72 20 63 6f 6d 70 61 74 69  mat. For compati
7b40: 62 69 6c 69 74 79 2c 20 76 65 72 73 69 6f 6e 20  bility, version 
7b50: 6f 66 20 53 51 4c 69 74 65 20 62 65 74 77 65 65  of SQLite betwee
7b60: 6e 20 33 2e 33 2e 30 0a 61 6e 64 20 33 2e 37 2e  n 3.3.0.and 3.7.
7b70: 39 20 75 73 65 20 74 68 65 20 6c 65 67 61 63 79  9 use the legacy
7b80: 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 62   schema format b
7b90: 79 20 64 65 66 61 75 6c 74 2e 20 20 54 68 65 20  y default.  The 
7ba0: 6e 65 77 65 72 20 73 63 68 65 6d 61 20 66 6f 72  newer schema for
7bb0: 6d 61 74 20 69 73 0a 75 73 65 64 20 62 79 20 64  mat is.used by d
7bc0: 65 66 61 75 6c 74 20 69 6e 20 76 65 72 73 69 6f  efault in versio
7bd0: 6e 20 33 2e 37 2e 31 30 20 61 6e 64 20 6c 61 74  n 3.7.10 and lat
7be0: 65 72 2e 0a 5e 54 68 65 20 5b 6c 65 67 61 63 79  er..^The [legacy
7bf0: 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61  _file_format pra
7c00: 67 6d 61 5d 20 63 61 6e 20 62 65 20 75 73 65 64  gma] can be used
7c10: 20 74 6f 20 63 68 61 6e 67 65 20 73 65 74 20 74   to change set t
7c20: 68 65 20 73 70 65 63 69 66 69 63 0a 62 65 68 61  he specific.beha
7c30: 76 69 6f 72 20 66 6f 72 20 61 6e 79 20 76 65 72  vior for any ver
7c40: 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 2e 3c  sion of SQLite.<
7c50: 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c  /p>..<p>^The COL
7c60: 4c 41 54 45 20 63 6c 61 75 73 65 20 6f 70 74 69  LATE clause opti
7c70: 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67  onally following
7c80: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d   each column nam
7c90: 65 0a 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 20  e.or expression 
7ca0: 64 65 66 69 6e 65 73 20 61 0a 63 6f 6c 6c 61 74  defines a.collat
7cb0: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 75 73 65  ing sequence use
7cc0: 64 20 66 6f 72 20 74 65 78 74 20 65 6e 74 72 69  d for text entri
7cd0: 65 73 20 69 6e 20 74 68 61 74 20 63 6f 6c 75 6d  es in that colum
7ce0: 6e 2e 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20  n..^The default 
7cf0: 63 6f 6c 6c 61 74 69 6e 67 0a 73 65 71 75 65 6e  collating.sequen
7d00: 63 65 20 69 73 20 74 68 65 20 63 6f 6c 6c 61 74  ce is the collat
7d10: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 64 65 66  ing sequence def
7d20: 69 6e 65 64 20 66 6f 72 20 74 68 61 74 20 63 6f  ined for that co
7d30: 6c 75 6d 6e 20 69 6e 20 74 68 65 0a 5b 43 52 45  lumn in the.[CRE
7d40: 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65  ATE TABLE] state
7d50: 6d 65 6e 74 2e 20 20 5e 4f 72 20 69 66 20 6e 6f  ment.  ^Or if no
7d60: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
7d70: 6e 63 65 20 69 73 20 6f 74 68 65 72 77 69 73 65  nce is otherwise
7d80: 20 64 65 66 69 6e 65 64 2c 0a 74 68 65 20 62 75   defined,.the bu
7d90: 69 6c 74 2d 69 6e 20 42 49 4e 41 52 59 20 63 6f  ilt-in BINARY co
7da0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
7db0: 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c   is used.</p>..<
7dc0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
7dd0: 69 6e 64 65 78 65 78 70 72 3c 2f 74 63 6c 3e 0a  indexexpr</tcl>.
7de0: 3c 70 3e 5e 45 78 70 72 65 73 73 69 6f 6e 73 20  <p>^Expressions 
7df0: 69 6e 20 61 6e 20 69 6e 64 65 78 20 6d 61 79 20  in an index may 
7e00: 6e 6f 74 20 72 65 66 65 72 65 6e 63 65 20 6f 74  not reference ot
7e10: 68 65 72 20 74 61 62 6c 65 73 0a 61 6e 64 20 6d  her tables.and m
7e20: 61 79 20 6e 6f 74 20 75 73 65 20 73 75 62 71 75  ay not use subqu
7e30: 65 72 69 65 73 20 6e 6f 72 20 66 75 6e 63 74 69  eries nor functi
7e40: 6f 6e 73 20 77 68 6f 73 65 20 72 65 73 75 6c 74  ons whose result
7e50: 20 6d 69 67 68 74 0a 63 68 61 6e 67 65 20 28 65   might.change (e
7e60: 78 3a 20 5b 72 61 6e 64 6f 6d 28 29 5d 20 6f 72  x: [random()] or
7e70: 20 5b 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e   [sqlite_version
7e80: 28 29 5d 29 2e 0a 5e 45 78 70 72 65 73 73 69 6f  ()])..^Expressio
7e90: 6e 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 6d  ns in an index m
7ea0: 61 79 20 6f 6e 6c 79 20 72 65 66 65 72 20 74 6f  ay only refer to
7eb0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
7ec0: 74 61 62 6c 65 0a 74 68 61 74 20 69 73 20 62 65  table.that is be
7ed0: 69 6e 67 20 69 6e 64 65 78 65 64 2e 0a 49 6e 64  ing indexed..Ind
7ee0: 65 78 65 73 20 6f 6e 20 65 78 70 72 65 73 73 69  exes on expressi
7ef0: 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 77 6f 72 6b  on will not work
7f00: 20 77 69 74 68 20 76 65 72 73 69 6f 6e 73 20 6f   with versions o
7f10: 66 20 53 51 4c 69 74 65 20 70 72 69 6f 72 0a 74  f SQLite prior.t
7f20: 6f 20 5b 76 65 72 73 69 6f 6e 20 33 2e 39 2e 30  o [version 3.9.0
7f30: 5d 2e 0a 53 65 65 20 74 68 65 20 5b 49 6e 64 65  ]..See the [Inde
7f40: 78 65 73 20 4f 6e 20 45 78 70 72 65 73 73 69 6f  xes On Expressio
7f50: 6e 73 5d 20 64 6f 63 75 6d 65 6e 74 20 66 6f 72  ns] document for
7f60: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
7f70: 72 6d 61 74 69 6f 6e 0a 61 62 6f 75 74 20 75 73  rmation.about us
7f80: 69 6e 67 20 67 65 6e 65 72 61 6c 20 65 78 70 72  ing general expr
7f90: 65 73 73 69 6f 6e 73 20 69 6e 20 43 52 45 41 54  essions in CREAT
7fa0: 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e  E INDEX statemen
7fb0: 74 73 2e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72  ts...<p>There ar
7fc0: 65 20 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c  e no arbitrary l
7fd0: 69 6d 69 74 73 20 6f 6e 20 74 68 65 20 6e 75 6d  imits on the num
7fe0: 62 65 72 20 6f 66 20 69 6e 64 69 63 65 73 20 74  ber of indices t
7ff0: 68 61 74 20 63 61 6e 20 62 65 0a 61 74 74 61 63  hat can be.attac
8000: 68 65 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20  hed to a single 
8010: 74 61 62 6c 65 2e 20 20 5e 28 54 68 65 20 6e 75  table.  ^(The nu
8020: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
8030: 69 6e 20 61 6e 20 69 6e 64 65 78 20 69 73 20 0a  in an index is .
8040: 6c 69 6d 69 74 65 64 20 74 6f 20 74 68 65 20 76  limited to the v
8050: 61 6c 75 65 20 73 65 74 20 62 79 0a 5b 73 71 6c  alue set by.[sql
8060: 69 74 65 33 5f 6c 69 6d 69 74 5d 28 5b 53 51 4c  ite3_limit]([SQL
8070: 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e  ITE_LIMIT_COLUMN
8080: 5d 2c 2e 2e 2e 29 2e 29 5e 3c 2f 70 3e 0a 0a 3c  ],...).)^</p>..<
8090: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
80a0: 75 6e 69 71 75 65 69 64 78 20 7b 75 6e 69 71 75  uniqueidx {uniqu
80b0: 65 20 69 6e 64 65 78 7d 3c 2f 74 63 6c 3e 0a 3c  e index}</tcl>.<
80c0: 70 3e 5e 49 66 20 74 68 65 20 55 4e 49 51 55 45  p>^If the UNIQUE
80d0: 20 6b 65 79 77 6f 72 64 20 61 70 70 65 61 72 73   keyword appears
80e0: 20 62 65 74 77 65 65 6e 20 43 52 45 41 54 45 20   between CREATE 
80f0: 61 6e 64 20 49 4e 44 45 58 20 74 68 65 6e 20 64  and INDEX then d
8100: 75 70 6c 69 63 61 74 65 0a 69 6e 64 65 78 20 65  uplicate.index e
8110: 6e 74 72 69 65 73 20 61 72 65 20 6e 6f 74 20 61  ntries are not a
8120: 6c 6c 6f 77 65 64 2e 20 20 5e 41 6e 79 20 61 74  llowed.  ^Any at
8130: 74 65 6d 70 74 20 74 6f 20 69 6e 73 65 72 74 20  tempt to insert 
8140: 61 20 64 75 70 6c 69 63 61 74 65 20 65 6e 74 72  a duplicate entr
8150: 79 0a 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e  y.will result in
8160: 20 61 6e 20 65 72 72 6f 72 2e 20 20 5e 46 6f 72   an error.  ^For
8170: 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66   the purposes of
8180: 20 75 6e 69 71 75 65 20 69 6e 64 69 63 65 73 2c   unique indices,
8190: 20 61 6c 6c 20 4e 55 4c 4c 20 76 61 6c 75 65 73   all NULL values
81a0: 0a 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20  .are considered 
81b0: 74 6f 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f  to different fro
81c0: 6d 20 61 6c 6c 20 6f 74 68 65 72 20 4e 55 4c 4c  m all other NULL
81d0: 20 76 61 6c 75 65 73 20 61 6e 64 20 61 72 65 20   values and are 
81e0: 74 68 75 73 20 75 6e 69 71 75 65 2e 0a 54 68 69  thus unique..Thi
81f0: 73 20 69 73 20 6f 6e 65 20 6f 66 20 74 68 65 20  s is one of the 
8200: 74 77 6f 20 70 6f 73 73 69 62 6c 65 20 69 6e 74  two possible int
8210: 65 72 70 72 65 74 61 74 69 6f 6e 73 20 6f 66 20  erpretations of 
8220: 74 68 65 20 53 51 4c 2d 39 32 20 73 74 61 6e 64  the SQL-92 stand
8230: 61 72 64 0a 28 74 68 65 20 6c 61 6e 67 75 61 67  ard.(the languag
8240: 65 20 69 6e 20 74 68 65 20 73 74 61 6e 64 61 72  e in the standar
8250: 64 20 69 73 20 61 6d 62 69 67 75 6f 75 73 29 20  d is ambiguous) 
8260: 61 6e 64 20 69 73 20 74 68 65 20 69 6e 74 65 72  and is the inter
8270: 70 72 65 74 61 74 69 6f 6e 0a 66 6f 6c 6c 6f 77  pretation.follow
8280: 65 64 20 62 79 20 50 6f 73 74 67 72 65 53 51 4c  ed by PostgreSQL
8290: 2c 20 4d 79 53 51 4c 2c 20 46 69 72 65 62 69 72  , MySQL, Firebir
82a0: 64 2c 20 61 6e 64 20 4f 72 61 63 6c 65 2e 20 20  d, and Oracle.  
82b0: 49 6e 66 6f 72 6d 69 78 20 61 6e 64 0a 4d 69 63  Informix and.Mic
82c0: 72 6f 73 6f 66 74 20 53 51 4c 20 53 65 72 76 65  rosoft SQL Serve
82d0: 72 20 66 6f 6c 6c 6f 77 20 74 68 65 20 6f 74 68  r follow the oth
82e0: 65 72 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  er interpretatio
82f0: 6e 20 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72  n of the standar
8300: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74  d.</p>..<p>^If t
8310: 68 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 4e  he optional IF N
8320: 4f 54 20 45 58 49 53 54 53 20 63 6c 61 75 73 65  OT EXISTS clause
8330: 20 69 73 20 70 72 65 73 65 6e 74 20 61 6e 64 20   is present and 
8340: 61 6e 6f 74 68 65 72 20 69 6e 64 65 78 0a 77 69  another index.wi
8350: 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  th the same name
8360: 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 2c   already exists,
8370: 20 74 68 65 6e 20 74 68 69 73 20 63 6f 6d 6d 61   then this comma
8380: 6e 64 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d  nd becomes a no-
8390: 6f 70 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 64  op.</p>..<p>^Ind
83a0: 65 78 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64  exes are removed
83b0: 20 77 69 74 68 20 74 68 65 20 5b 44 52 4f 50 20   with the [DROP 
83c0: 49 4e 44 45 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c  INDEX] command.<
83d0: 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  /p>...<tcl>.####
83e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
83f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8400: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8410: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8420: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
8430: 6f 6e 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45  on {CREATE TABLE
8440: 7d 20 7b 63 72 65 61 74 65 74 61 62 6c 65 7d 20  } {createtable} 
8450: 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45 7d 7d  {{CREATE TABLE}}
8460: 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
8470: 65 44 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d  eDiagram create-
8480: 74 61 62 6c 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c  table-stmt.</tcl
8490: 3e 0a 0a 3c 70 3e 54 68 65 20 22 43 52 45 41 54  >..<p>The "CREAT
84a0: 45 20 54 41 42 4c 45 22 20 63 6f 6d 6d 61 6e 64  E TABLE" command
84b0: 20 69 73 20 75 73 65 64 20 74 6f 20 63 72 65 61   is used to crea
84c0: 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69  te a new table i
84d0: 6e 20 61 6e 20 53 51 4c 69 74 65 20 0a 64 61 74  n an SQLite .dat
84e0: 61 62 61 73 65 2e 20 41 20 43 52 45 41 54 45 20  abase. A CREATE 
84f0: 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 73 70  TABLE command sp
8500: 65 63 69 66 69 65 73 20 74 68 65 20 66 6f 6c 6c  ecifies the foll
8510: 6f 77 69 6e 67 20 61 74 74 72 69 62 75 74 65 73  owing attributes
8520: 20 6f 66 20 74 68 65 0a 6e 65 77 20 74 61 62 6c   of the.new tabl
8530: 65 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c  e:..<ul>.  <li><
8540: 70 3e 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  p>The name of th
8550: 65 20 6e 65 77 20 74 61 62 6c 65 2e 0a 0a 20 20  e new table...  
8560: 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 64 61 74 61  <li><p> The data
8570: 62 61 73 65 20 69 6e 20 77 68 69 63 68 20 74 68  base in which th
8580: 65 20 6e 65 77 20 74 61 62 6c 65 20 69 73 20 63  e new table is c
8590: 72 65 61 74 65 64 2e 20 54 61 62 6c 65 73 20 6d  reated. Tables m
85a0: 61 79 20 62 65 20 0a 20 20 20 20 20 20 63 72 65  ay be .      cre
85b0: 61 74 65 64 20 69 6e 20 74 68 65 20 6d 61 69 6e  ated in the main
85c0: 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 20 74   database, the t
85d0: 65 6d 70 20 64 61 74 61 62 61 73 65 2c 20 6f 72  emp database, or
85e0: 20 69 6e 20 61 6e 79 20 61 74 74 61 63 68 65 64   in any attached
85f0: 0a 20 20 20 20 20 20 64 61 74 61 62 61 73 65 2e  .      database.
8600: 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 54 68 65 20  ..  <li><p> The 
8610: 6e 61 6d 65 20 6f 66 20 65 61 63 68 20 63 6f 6c  name of each col
8620: 75 6d 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65  umn in the table
8630: 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 54 68 65  ...  <li><p> The
8640: 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f   declared type o
8650: 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e  f each column in
8660: 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20 3c   the table...  <
8670: 6c 69 3e 3c 70 3e 20 41 20 64 65 66 61 75 6c 74  li><p> A default
8680: 20 76 61 6c 75 65 20 6f 72 20 65 78 70 72 65 73   value or expres
8690: 73 69 6f 6e 20 66 6f 72 20 65 61 63 68 20 63 6f  sion for each co
86a0: 6c 75 6d 6e 20 69 6e 20 74 68 65 20 74 61 62 6c  lumn in the tabl
86b0: 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 41 20  e...  <li><p> A 
86c0: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f  default collatio
86d0: 6e 20 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73  n sequence to us
86e0: 65 20 77 69 74 68 20 65 61 63 68 20 63 6f 6c 75  e with each colu
86f0: 6d 6e 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 4f  mn...  <li><p> O
8700: 70 74 69 6f 6e 61 6c 6c 79 2c 20 61 20 50 52 49  ptionally, a PRI
8710: 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65  MARY KEY for the
8720: 20 74 61 62 6c 65 2e 20 42 6f 74 68 20 73 69 6e   table. Both sin
8730: 67 6c 65 20 63 6f 6c 75 6d 6e 20 61 6e 64 0a 20  gle column and. 
8740: 20 20 20 20 20 20 63 6f 6d 70 6f 73 69 74 65 20        composite 
8750: 28 6d 75 6c 74 69 70 6c 65 20 63 6f 6c 75 6d 6e  (multiple column
8760: 29 20 70 72 69 6d 61 72 79 20 6b 65 79 73 20 61  ) primary keys a
8770: 72 65 20 73 75 70 70 6f 72 74 65 64 2e 0a 0a 20  re supported... 
8780: 20 3c 6c 69 3e 3c 70 3e 20 41 20 73 65 74 20 6f   <li><p> A set o
8790: 66 20 53 51 4c 20 63 6f 6e 73 74 72 61 69 6e 74  f SQL constraint
87a0: 73 20 66 6f 72 20 65 61 63 68 20 74 61 62 6c 65  s for each table
87b0: 2e 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74  . SQLite support
87c0: 73 20 55 4e 49 51 55 45 2c 20 4e 4f 54 0a 20 20  s UNIQUE, NOT.  
87d0: 20 20 20 20 20 4e 55 4c 4c 2c 20 43 48 45 43 4b       NULL, CHECK
87e0: 20 61 6e 64 20 46 4f 52 45 49 47 4e 20 4b 45 59   and FOREIGN KEY
87f0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 0a 20   constraints... 
8800: 20 3c 6c 69 3e 3c 70 3e 20 57 68 65 74 68 65 72   <li><p> Whether
8810: 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 61 20   the table is a 
8820: 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20  [WITHOUT ROWID] 
8830: 74 61 62 6c 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  table..</ul>..<p
8840: 3e 45 76 65 72 79 20 43 52 45 41 54 45 20 54 41  >Every CREATE TA
8850: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 6d 75  BLE statement mu
8860: 73 74 20 73 70 65 63 69 66 79 20 61 20 6e 61 6d  st specify a nam
8870: 65 20 66 6f 72 20 74 68 65 20 6e 65 77 20 74 61  e for the new ta
8880: 62 6c 65 2e 0a 20 20 5e 28 54 61 62 6c 65 20 6e  ble..  ^(Table n
8890: 61 6d 65 73 20 74 68 61 74 20 62 65 67 69 6e 20  ames that begin 
88a0: 77 69 74 68 20 22 73 71 6c 69 74 65 5f 22 20 61  with "sqlite_" a
88b0: 72 65 20 72 65 73 65 72 76 65 64 20 66 6f 72 20  re reserved for 
88c0: 69 6e 74 65 72 6e 61 6c 20 75 73 65 2e 20 49 74  internal use. It
88d0: 0a 20 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74  .  is an error t
88e0: 6f 20 61 74 74 65 6d 70 74 20 74 6f 20 63 72 65  o attempt to cre
88f0: 61 74 65 20 61 20 74 61 62 6c 65 20 77 69 74 68  ate a table with
8900: 20 61 20 6e 61 6d 65 20 74 68 61 74 20 73 74 61   a name that sta
8910: 72 74 73 20 77 69 74 68 0a 20 20 22 73 71 6c 69  rts with.  "sqli
8920: 74 65 5f 22 2e 29 5e 0a 0a 3c 70 3e 20 5e 49 66  te_".)^..<p> ^If
8930: 20 61 20 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d   a <yyterm>schem
8940: 61 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20  a-name</yyterm> 
8950: 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 69 74  is specified, it
8960: 20 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20   must be either 
8970: 22 6d 61 69 6e 22 2c 20 0a 20 20 22 74 65 6d 70  "main", .  "temp
8980: 22 2c 20 6f 72 20 74 68 65 20 6e 61 6d 65 20 6f  ", or the name o
8990: 66 20 61 6e 20 5b 41 54 54 41 43 48 20 44 41 54  f an [ATTACH DAT
89a0: 41 42 41 53 45 7c 61 74 74 61 63 68 65 64 20 64  ABASE|attached d
89b0: 61 74 61 62 61 73 65 5d 2e 20 5e 49 6e 20 74 68  atabase]. ^In th
89c0: 69 73 20 63 61 73 65 0a 20 20 74 68 65 20 6e 65  is case.  the ne
89d0: 77 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74  w table is creat
89e0: 65 64 20 69 6e 20 74 68 65 20 6e 61 6d 65 64 20  ed in the named 
89f0: 64 61 74 61 62 61 73 65 2e 20 5e 49 66 20 74 68  database. ^If th
8a00: 65 20 22 54 45 4d 50 22 20 6f 72 20 22 54 45 4d  e "TEMP" or "TEM
8a10: 50 4f 52 41 52 59 22 0a 20 20 6b 65 79 77 6f 72  PORARY".  keywor
8a20: 64 20 6f 63 63 75 72 73 20 62 65 74 77 65 65 6e  d occurs between
8a30: 20 74 68 65 20 22 43 52 45 41 54 45 22 20 61 6e   the "CREATE" an
8a40: 64 20 22 54 41 42 4c 45 22 20 74 68 65 6e 20 74  d "TABLE" then t
8a50: 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 73 0a  he new table is.
8a60: 20 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65    created in the
8a70: 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 2e 20   temp database. 
8a80: 5e 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20  ^It is an error 
8a90: 74 6f 20 73 70 65 63 69 66 79 20 62 6f 74 68 20  to specify both 
8aa0: 61 20 0a 20 20 3c 79 79 74 65 72 6d 3e 73 63 68  a .  <yyterm>sch
8ab0: 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  ema-name</yyterm
8ac0: 3e 20 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6f  > and the TEMP o
8ad0: 72 20 54 45 4d 50 4f 52 41 52 59 20 6b 65 79 77  r TEMPORARY keyw
8ae0: 6f 72 64 2c 20 75 6e 6c 65 73 73 20 74 68 65 0a  ord, unless the.
8af0: 20 20 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d 61    <yyterm>schema
8b00: 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 69  -name</yyterm> i
8b10: 73 20 22 74 65 6d 70 22 2e 20 0a 20 20 5e 49 66  s "temp". .  ^If
8b20: 20 6e 6f 20 73 63 68 65 6d 61 20 6e 61 6d 65 20   no schema name 
8b30: 69 73 20 73 70 65 63 69 66 69 65 64 20 61 6e 64  is specified and
8b40: 20 74 68 65 0a 20 20 54 45 4d 50 20 6b 65 79 77   the.  TEMP keyw
8b50: 6f 72 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65  ord is not prese
8b60: 6e 74 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  nt then the tabl
8b70: 65 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20  e is created in 
8b80: 74 68 65 20 6d 61 69 6e 0a 20 20 64 61 74 61 62  the main.  datab
8b90: 61 73 65 2e 0a 0a 3c 70 3e 0a 20 20 5e 49 74 20  ase...<p>.  ^It 
8ba0: 69 73 20 75 73 75 61 6c 6c 79 20 61 6e 20 65 72  is usually an er
8bb0: 72 6f 72 20 74 6f 20 61 74 74 65 6d 70 74 20 74  ror to attempt t
8bc0: 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 74  o create a new t
8bd0: 61 62 6c 65 20 69 6e 20 61 20 64 61 74 61 62 61  able in a databa
8be0: 73 65 20 74 68 61 74 0a 20 20 61 6c 72 65 61 64  se that.  alread
8bf0: 79 20 63 6f 6e 74 61 69 6e 73 20 61 20 74 61 62  y contains a tab
8c00: 6c 65 2c 20 69 6e 64 65 78 20 6f 72 20 76 69 65  le, index or vie
8c10: 77 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61  w of the same na
8c20: 6d 65 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69 66  me. ^However, if
8c30: 20 74 68 65 0a 20 20 22 49 46 20 4e 4f 54 20 45   the.  "IF NOT E
8c40: 58 49 53 54 53 22 20 63 6c 61 75 73 65 20 69 73  XISTS" clause is
8c50: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
8c60: 72 74 20 6f 66 20 74 68 65 20 43 52 45 41 54 45  rt of the CREATE
8c70: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
8c80: 20 61 6e 64 0a 20 20 61 20 74 61 62 6c 65 20 6f   and.  a table o
8c90: 72 20 76 69 65 77 20 6f 66 20 74 68 65 20 73 61  r view of the sa
8ca0: 6d 65 20 6e 61 6d 65 20 61 6c 72 65 61 64 79 20  me name already 
8cb0: 65 78 69 73 74 73 2c 20 74 68 65 20 43 52 45 41  exists, the CREA
8cc0: 54 45 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  TE TABLE command
8cd0: 0a 20 20 73 69 6d 70 6c 79 20 68 61 73 20 6e 6f  .  simply has no
8ce0: 20 65 66 66 65 63 74 20 28 61 6e 64 20 6e 6f 20   effect (and no 
8cf0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 73  error message is
8d00: 20 72 65 74 75 72 6e 65 64 29 2e 20 5e 41 6e 20   returned). ^An 
8d10: 65 72 72 6f 72 20 69 73 20 73 74 69 6c 6c 0a 20  error is still. 
8d20: 20 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65   returned if the
8d30: 20 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20 62 65   table cannot be
8d40: 20 63 72 65 61 74 65 64 20 62 65 63 61 75 73 65   created because
8d50: 20 6f 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20   of an existing 
8d60: 69 6e 64 65 78 2c 20 65 76 65 6e 20 0a 20 20 69  index, even .  i
8d70: 66 20 74 68 65 20 22 49 46 20 4e 4f 54 20 45 58  f the "IF NOT EX
8d80: 49 53 54 53 22 20 63 6c 61 75 73 65 20 69 73 20  ISTS" clause is 
8d90: 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e  specified...<p>^
8da0: 49 74 20 69 73 20 6e 6f 74 20 61 6e 20 65 72 72  It is not an err
8db0: 6f 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 74  or to create a t
8dc0: 61 62 6c 65 20 74 68 61 74 20 68 61 73 20 74 68  able that has th
8dd0: 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61  e same name as a
8de0: 6e 20 0a 20 20 65 78 69 73 74 69 6e 67 20 5b 43  n .  existing [C
8df0: 52 45 41 54 45 20 54 52 49 47 47 45 52 7c 74 72  REATE TRIGGER|tr
8e00: 69 67 67 65 72 5d 2e 0a 0a 3c 70 3e 5e 54 61 62  igger]...<p>^Tab
8e10: 6c 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20  les are removed 
8e20: 75 73 69 6e 67 20 74 68 65 20 5b 44 52 4f 50 20  using the [DROP 
8e30: 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
8e40: 2e 20 20 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  .  </p>..<tcl>hd
8e50: 5f 66 72 61 67 6d 65 6e 74 20 63 72 65 61 74 65  _fragment create
8e60: 74 61 62 61 73 20 7b 43 52 45 41 54 45 20 54 41  tabas {CREATE TA
8e70: 42 4c 45 20 41 53 7d 3c 2f 74 63 6c 3e 0a 3c 68  BLE AS}</tcl>.<h
8e80: 33 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e  3>CREATE TABLE .
8e90: 2e 2e 20 41 53 20 53 45 4c 45 43 54 20 53 74 61  .. AS SELECT Sta
8ea0: 74 65 6d 65 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70  tements</h3>..<p
8eb0: 3e 5e 28 41 20 22 43 52 45 41 54 45 20 54 41 42  >^(A "CREATE TAB
8ec0: 4c 45 20 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54  LE ... AS SELECT
8ed0: 22 20 73 74 61 74 65 6d 65 6e 74 20 63 72 65 61  " statement crea
8ee0: 74 65 73 20 61 6e 64 20 70 6f 70 75 6c 61 74 65  tes and populate
8ef0: 73 20 61 20 64 61 74 61 62 61 73 65 0a 74 61 62  s a database.tab
8f00: 6c 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  le based on the 
8f10: 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c  results of a SEL
8f20: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 29 5e  ECT statement.)^
8f30: 20 5e 28 54 68 65 20 74 61 62 6c 65 20 68 61 73   ^(The table has
8f40: 20 74 68 65 20 73 61 6d 65 0a 6e 75 6d 62 65 72   the same.number
8f50: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 61 73 20 74   of columns as t
8f60: 68 65 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64  he rows returned
8f70: 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73   by the SELECT s
8f80: 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6e 61  tatement. The na
8f90: 6d 65 20 6f 66 0a 65 61 63 68 20 63 6f 6c 75 6d  me of.each colum
8fa0: 6e 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  n is the same as
8fb0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
8fc0: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 63   corresponding c
8fd0: 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72 65 73  olumn in the res
8fe0: 75 6c 74 0a 73 65 74 20 6f 66 20 74 68 65 20 53  ult.set of the S
8ff0: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
9000: 29 5e 20 5e 28 54 68 65 20 64 65 63 6c 61 72 65  )^ ^(The declare
9010: 64 20 74 79 70 65 20 6f 66 20 65 61 63 68 20 63  d type of each c
9020: 6f 6c 75 6d 6e 20 69 73 20 64 65 74 65 72 6d 69  olumn is determi
9030: 6e 65 64 0a 62 79 20 74 68 65 20 5b 65 78 70 72  ned.by the [expr
9040: 65 73 73 69 6f 6e 20 61 66 66 69 6e 69 74 79 5d  ession affinity]
9050: 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f   of the correspo
9060: 6e 64 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  nding expression
9070: 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73   in the result s
9080: 65 74 0a 6f 66 20 74 68 65 20 53 45 4c 45 43 54  et.of the SELECT
9090: 20 73 74 61 74 65 6d 65 6e 74 2c 20 61 73 20 66   statement, as f
90a0: 6f 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 63  ollows:.</p>..<c
90b0: 65 6e 74 65 72 3e 3c 74 61 62 6c 65 20 62 6f 72  enter><table bor
90c0: 64 65 72 3d 31 3e 0a 20 20 3c 74 72 3e 3c 74 68  der=1>.  <tr><th
90d0: 3e 45 78 70 72 65 73 73 69 6f 6e 20 41 66 66 69  >Expression Affi
90e0: 6e 69 74 79 20 20 20 3c 74 68 3e 43 6f 6c 75 6d  nity   <th>Colum
90f0: 6e 20 44 65 63 6c 61 72 65 64 20 54 79 70 65 0a  n Declared Type.
9100: 20 20 3c 74 72 3e 3c 74 64 3e 54 45 58 54 20 20    <tr><td>TEXT  
9110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9120: 3c 74 64 3e 22 54 45 58 54 22 0a 20 20 3c 74 72  <td>"TEXT".  <tr
9130: 3e 3c 74 64 3e 4e 55 4d 45 52 49 43 20 20 20 20  ><td>NUMERIC    
9140: 20 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22             <td>"
9150: 4e 55 4d 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 49  NUM".  <tr><td>I
9160: 4e 54 45 47 45 52 20 20 20 20 20 20 20 20 20 20  NTEGER          
9170: 20 20 20 20 20 3c 74 64 3e 22 49 4e 54 22 0a 20       <td>"INT". 
9180: 20 3c 74 72 3e 3c 74 64 3e 52 45 41 4c 20 20 20   <tr><td>REAL   
9190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c                 <
91a0: 74 64 3e 22 52 45 41 4c 22 0a 20 20 3c 74 72 3e  td>"REAL".  <tr>
91b0: 3c 74 64 3e 4e 4f 4e 45 20 20 20 20 20 20 20 20  <td>NONE        
91c0: 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 22            <td>""
91d0: 20 28 65 6d 70 74 79 20 73 74 72 69 6e 67 29 0a   (empty string).
91e0: 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72  </table></center
91f0: 3e 29 5e 0a 0a 3c 70 3e 5e 28 41 20 74 61 62 6c  >)^..<p>^(A tabl
9200: 65 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20  e created using 
9210: 43 52 45 41 54 45 20 54 41 42 4c 45 20 41 53 20  CREATE TABLE AS 
9220: 68 61 73 20 6e 6f 20 50 52 49 4d 41 52 59 20 4b  has no PRIMARY K
9230: 45 59 20 61 6e 64 20 6e 6f 0a 63 6f 6e 73 74 72  EY and no.constr
9240: 61 69 6e 74 73 20 6f 66 20 61 6e 79 20 6b 69 6e  aints of any kin
9250: 64 2e 20 54 68 65 20 64 65 66 61 75 6c 74 20 76  d. The default v
9260: 61 6c 75 65 20 6f 66 20 65 61 63 68 20 63 6f 6c  alue of each col
9270: 75 6d 6e 20 69 73 20 4e 55 4c 4c 2e 20 54 68 65  umn is NULL. The
9280: 20 64 65 66 61 75 6c 74 0a 63 6f 6c 6c 61 74 69   default.collati
9290: 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20  on sequence for 
92a0: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  each column of t
92b0: 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 73 20  he new table is 
92c0: 42 49 4e 41 52 59 2e 29 5e 0a 0a 3c 70 3e 5e 54  BINARY.)^..<p>^T
92d0: 61 62 6c 65 73 20 63 72 65 61 74 65 64 20 75 73  ables created us
92e0: 69 6e 67 20 43 52 45 41 54 45 20 54 41 42 4c 45  ing CREATE TABLE
92f0: 20 41 53 20 61 72 65 20 69 6e 69 74 69 61 6c 6c   AS are initiall
9300: 79 20 70 6f 70 75 6c 61 74 65 64 20 77 69 74 68  y populated with
9310: 20 74 68 65 0a 72 6f 77 73 20 6f 66 20 64 61 74   the.rows of dat
9320: 61 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  a returned by th
9330: 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
9340: 6e 74 2e 20 5e 52 6f 77 73 20 61 72 65 20 61 73  nt. ^Rows are as
9350: 73 69 67 6e 65 64 20 63 6f 6e 74 69 67 75 6f 75  signed contiguou
9360: 73 6c 79 0a 61 73 63 65 6e 64 69 6e 67 20 5b 72  sly.ascending [r
9370: 6f 77 69 64 5d 20 76 61 6c 75 65 73 2c 20 73 74  owid] values, st
9380: 61 72 74 69 6e 67 20 77 69 74 68 20 31 2c 20 69  arting with 1, i
9390: 6e 20 74 68 65 20 5b 6f 72 64 65 72 20 62 79 7c  n the [order by|
93a0: 6f 72 64 65 72 5d 20 74 68 61 74 20 74 68 65 79  order] that they
93b0: 0a 61 72 65 20 72 65 74 75 72 6e 65 64 20 62 79  .are returned by
93c0: 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
93d0: 65 6d 65 6e 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  ement...<tcl>hd_
93e0: 66 72 61 67 6d 65 6e 74 20 7b 74 61 62 6c 65 63  fragment {tablec
93f0: 6f 6c 64 65 66 7d 20 7b 63 6f 6c 75 6d 6e 20 64  oldef} {column d
9400: 65 66 69 6e 69 74 69 6f 6e 7d 20 7b 63 6f 6c 75  efinition} {colu
9410: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 7d 3c  mn definitions}<
9420: 2f 74 63 6c 3e 0a 3c 68 33 3e 43 6f 6c 75 6d 6e  /tcl>.<h3>Column
9430: 20 44 65 66 69 6e 69 74 69 6f 6e 73 3c 2f 68 33   Definitions</h3
9440: 3e 0a 0a 3c 70 3e 55 6e 6c 65 73 73 20 69 74 20  >..<p>Unless it 
9450: 69 73 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  is a CREATE TABL
9460: 45 20 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 20  E ... AS SELECT 
9470: 73 74 61 74 65 6d 65 6e 74 2c 20 61 20 43 52 45  statement, a CRE
9480: 41 54 45 20 54 41 42 4c 45 20 69 6e 63 6c 75 64  ATE TABLE includ
9490: 65 73 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 5b  es.one or more [
94a0: 63 6f 6c 75 6d 6e 2d 64 65 66 7c 63 6f 6c 75 6d  column-def|colum
94b0: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 5d 2c 20  n definitions], 
94c0: 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f  optionally follo
94d0: 77 65 64 20 62 79 20 61 20 6c 69 73 74 20 6f 66  wed by a list of
94e0: 0a 5b 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69  .[table-constrai
94f0: 6e 74 7c 74 61 62 6c 65 20 63 6f 6e 73 74 72 61  nt|table constra
9500: 69 6e 74 73 5d 2e 20 20 45 61 63 68 20 63 6f 6c  ints].  Each col
9510: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 63  umn definition c
9520: 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 0a 6e  onsists of the.n
9530: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ame of the colum
9540: 6e 2c 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f  n, optionally fo
9550: 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 20 64 65  llowed by the de
9560: 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 74  clared type of t
9570: 68 65 20 63 6f 6c 75 6d 6e 2c 0a 74 68 65 6e 20  he column,.then 
9580: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 70 74 69  one or more opti
9590: 6f 6e 61 6c 20 5b 63 6f 6c 75 6d 6e 2d 63 6f 6e  onal [column-con
95a0: 73 74 72 61 69 6e 74 7c 63 6f 6c 75 6d 6e 20 63  straint|column c
95b0: 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 20 49 6e 63  onstraints]. Inc
95c0: 6c 75 64 65 64 20 69 6e 0a 74 68 65 20 64 65 66  luded in.the def
95d0: 69 6e 69 74 69 6f 6e 20 6f 66 20 22 63 6f 6c 75  inition of "colu
95e0: 6d 6e 20 63 6f 6e 73 74 72 61 69 6e 74 73 22 20  mn constraints" 
95f0: 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  for the purposes
9600: 20 6f 66 20 74 68 65 20 70 72 65 76 69 6f 75 73   of the previous
9610: 0a 73 74 61 74 65 6d 65 6e 74 20 61 72 65 20 74  .statement are t
9620: 68 65 20 43 4f 4c 4c 41 54 45 20 61 6e 64 20 44  he COLLATE and D
9630: 45 46 41 55 4c 54 20 63 6c 61 75 73 65 73 2c 20  EFAULT clauses, 
9640: 65 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65 73  even though thes
9650: 65 20 61 72 65 20 6e 6f 74 20 72 65 61 6c 6c 79  e are not really
9660: 0a 63 6f 6e 73 74 72 61 69 6e 74 73 20 69 6e 20  .constraints in 
9670: 74 68 65 20 73 65 6e 73 65 20 74 68 61 74 20 74  the sense that t
9680: 68 65 79 20 64 6f 20 6e 6f 74 20 72 65 73 74 72  hey do not restr
9690: 69 63 74 20 74 68 65 20 64 61 74 61 20 74 68 61  ict the data tha
96a0: 74 20 74 68 65 20 74 61 62 6c 65 20 6d 61 79 0a  t the table may.
96b0: 63 6f 6e 74 61 69 6e 2e 20 54 68 65 20 6f 74 68  contain. The oth
96c0: 65 72 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2d  er constraints -
96d0: 20 4e 4f 54 20 4e 55 4c 4c 2c 20 43 48 45 43 4b   NOT NULL, CHECK
96e0: 2c 20 55 4e 49 51 55 45 2c 20 50 52 49 4d 41 52  , UNIQUE, PRIMAR
96f0: 59 20 4b 45 59 20 61 6e 64 0a 46 4f 52 45 49 47  Y KEY and.FOREIG
9700: 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
9710: 73 20 2d 20 69 6d 70 6f 73 65 20 72 65 73 74 72  s - impose restr
9720: 69 63 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 74  ictions on the t
9730: 61 62 6c 65 73 20 64 61 74 61 2c 20 61 6e 64 20  ables data, and 
9740: 61 72 65 20 61 72 65 0a 64 65 73 63 72 69 62 65  are are.describe
9750: 64 20 75 6e 64 65 72 20 5b 63 6f 6e 73 74 72 61  d under [constra
9760: 69 6e 74 73 7c 53 51 4c 20 44 61 74 61 20 43 6f  ints|SQL Data Co
9770: 6e 73 74 72 61 69 6e 74 73 5d 20 62 65 6c 6f 77  nstraints] below
9780: 2e 0a 0a 3c 70 3e 5e 55 6e 6c 69 6b 65 20 6d 6f  ...<p>^Unlike mo
9790: 73 74 20 53 51 4c 20 64 61 74 61 62 61 73 65 73  st SQL databases
97a0: 2c 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f  , SQLite does no
97b0: 74 20 72 65 73 74 72 69 63 74 20 74 68 65 20 74  t restrict the t
97c0: 79 70 65 20 6f 66 20 64 61 74 61 20 74 68 61 74  ype of data that
97d0: 0a 6d 61 79 20 62 65 20 69 6e 73 65 72 74 65 64  .may be inserted
97e0: 20 69 6e 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 62   into a column b
97f0: 61 73 65 64 20 6f 6e 20 74 68 65 20 63 6f 6c 75  ased on the colu
9800: 6d 6e 73 20 64 65 63 6c 61 72 65 64 20 74 79 70  mns declared typ
9810: 65 2e 20 49 6e 73 74 65 61 64 2c 0a 53 51 4c 69  e. Instead,.SQLi
9820: 74 65 20 75 73 65 73 20 5b 64 79 6e 61 6d 69 63  te uses [dynamic
9830: 20 74 79 70 69 6e 67 5d 2e 20 5e 54 68 65 20 64   typing]. ^The d
9840: 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20  eclared type of 
9850: 61 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64  a column is used
9860: 20 74 6f 0a 64 65 74 65 72 6d 69 6e 65 20 74 68   to.determine th
9870: 65 20 5b 61 66 66 69 6e 69 74 79 5d 20 6f 66 20  e [affinity] of 
9880: 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 6e 6c 79 2e  the column only.
9890: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
98a0: 6e 74 20 64 66 6c 74 76 61 6c 20 7b 64 65 66 61  nt dfltval {defa
98b0: 75 6c 74 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  ult column value
98c0: 7d 20 7b 64 65 66 61 75 6c 74 20 76 61 6c 75 65  } {default value
98d0: 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68 65 20 44  }</tcl>.<p>The D
98e0: 45 46 41 55 4c 54 20 63 6c 61 75 73 65 20 73 70  EFAULT clause sp
98f0: 65 63 69 66 69 65 73 20 61 20 64 65 66 61 75 6c  ecifies a defaul
9900: 74 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20 66  t value to use f
9910: 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 66  or the column if
9920: 20 6e 6f 0a 76 61 6c 75 65 20 69 73 20 65 78 70   no.value is exp
9930: 6c 69 63 69 74 6c 79 20 70 72 6f 76 69 64 65 64  licitly provided
9940: 20 62 79 20 74 68 65 20 75 73 65 72 20 77 68 65   by the user whe
9950: 6e 20 64 6f 69 6e 67 20 61 6e 20 5b 49 4e 53 45  n doing an [INSE
9960: 52 54 5d 2e 20 5e 49 66 20 74 68 65 72 65 0a 69  RT]. ^If there.i
9970: 73 20 6e 6f 20 65 78 70 6c 69 63 69 74 20 44 45  s no explicit DE
9980: 46 41 55 4c 54 20 63 6c 61 75 73 65 20 61 74 74  FAULT clause att
9990: 61 63 68 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d  ached to a colum
99a0: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c 20 74 68  n definition, th
99b0: 65 6e 20 74 68 65 20 0a 64 65 66 61 75 6c 74 20  en the .default 
99c0: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6c  value of the col
99d0: 75 6d 6e 20 69 73 20 4e 55 4c 4c 2e 20 5e 28 41  umn is NULL. ^(A
99e0: 6e 20 65 78 70 6c 69 63 69 74 20 44 45 46 41 55  n explicit DEFAU
99f0: 4c 54 20 63 6c 61 75 73 65 20 6d 61 79 20 73 70  LT clause may sp
9a00: 65 63 69 66 79 0a 74 68 61 74 20 74 68 65 20 64  ecify.that the d
9a10: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69 73 20  efault value is 
9a20: 4e 55 4c 4c 2c 20 61 20 73 74 72 69 6e 67 20 63  NULL, a string c
9a30: 6f 6e 73 74 61 6e 74 2c 20 61 20 62 6c 6f 62 20  onstant, a blob 
9a40: 63 6f 6e 73 74 61 6e 74 2c 20 61 0a 73 69 67 6e  constant, a.sign
9a50: 65 64 2d 6e 75 6d 62 65 72 2c 20 6f 72 20 61 6e  ed-number, or an
9a60: 79 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  y constant expre
9a70: 73 73 69 6f 6e 20 65 6e 63 6c 6f 73 65 64 20 69  ssion enclosed i
9a80: 6e 20 70 61 72 65 6e 74 68 65 73 65 73 2e 20 41  n parentheses. A
9a90: 0a 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6d  .default value m
9aa0: 61 79 20 61 6c 73 6f 20 62 65 20 6f 6e 65 20 6f  ay also be one o
9ab0: 66 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 61  f the special ca
9ac0: 73 65 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20 6b  se-independent k
9ad0: 65 79 77 6f 72 64 73 0a 43 55 52 52 45 4e 54 5f  eywords.CURRENT_
9ae0: 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41  TIME, CURRENT_DA
9af0: 54 45 20 6f 72 20 43 55 52 52 45 4e 54 5f 54 49  TE or CURRENT_TI
9b00: 4d 45 53 54 41 4d 50 2e 29 5e 20 5e 46 6f 72 20  MESTAMP.)^ ^For 
9b10: 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20  the purposes of 
9b20: 74 68 65 0a 44 45 46 41 55 4c 54 20 63 6c 61 75  the.DEFAULT clau
9b30: 73 65 2c 20 61 6e 20 65 78 70 72 65 73 73 69 6f  se, an expressio
9b40: 6e 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  n is considered 
9b50: 63 6f 6e 73 74 61 6e 74 20 69 66 20 69 74 20 64  constant if it d
9b60: 6f 65 73 0a 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  oes.contains no 
9b70: 73 75 62 2d 71 75 65 72 69 65 73 2c 20 63 6f 6c  sub-queries, col
9b80: 75 6d 6e 20 6f 72 20 74 61 62 6c 65 20 72 65 66  umn or table ref
9b90: 65 72 65 6e 63 65 73 2c 20 5b 62 6f 75 6e 64 20  erences, [bound 
9ba0: 70 61 72 61 6d 65 74 65 72 73 5d 2c 0a 6f 72 20  parameters],.or 
9bb0: 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 73 20  string literals 
9bc0: 65 6e 63 6c 6f 73 65 64 20 69 6e 20 64 6f 75 62  enclosed in doub
9bd0: 6c 65 2d 71 75 6f 74 65 73 20 69 6e 73 74 65 61  le-quotes instea
9be0: 64 20 6f 66 20 73 69 6e 67 6c 65 2d 71 75 6f 74  d of single-quot
9bf0: 65 73 2e 0a 0a 3c 70 3e 5e 28 45 61 63 68 20 74  es...<p>^(Each t
9c00: 69 6d 65 20 61 20 72 6f 77 20 69 73 20 69 6e 73  ime a row is ins
9c10: 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 74  erted into the t
9c20: 61 62 6c 65 20 62 79 20 61 6e 20 49 4e 53 45 52  able by an INSER
9c30: 54 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  T statement that
9c40: 20 0a 64 6f 65 73 20 6e 6f 74 20 70 72 6f 76 69   .does not provi
9c50: 64 65 20 65 78 70 6c 69 63 69 74 20 76 61 6c 75  de explicit valu
9c60: 65 73 20 66 6f 72 20 61 6c 6c 20 74 61 62 6c 65  es for all table
9c70: 20 63 6f 6c 75 6d 6e 73 20 74 68 65 20 76 61 6c   columns the val
9c80: 75 65 73 20 73 74 6f 72 65 64 20 69 6e 0a 74 68  ues stored in.th
9c90: 65 20 6e 65 77 20 72 6f 77 20 61 72 65 20 64 65  e new row are de
9ca0: 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 69  termined by thei
9cb0: 72 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73  r default values
9cc0: 29 5e 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  )^, as follows:.
9cd0: 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  .<ul>.  <li><p>^
9ce0: 49 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  If the default v
9cf0: 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6c 75  alue of the colu
9d00: 6d 6e 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74  mn is a constant
9d10: 20 4e 55 4c 4c 2c 20 74 65 78 74 2c 20 62 6c 6f   NULL, text, blo
9d20: 62 20 6f 72 0a 20 20 20 20 73 69 67 6e 65 64 2d  b or.    signed-
9d30: 6e 75 6d 62 65 72 20 76 61 6c 75 65 2c 20 74 68  number value, th
9d40: 65 6e 20 74 68 61 74 20 76 61 6c 75 65 20 69 73  en that value is
9d50: 20 75 73 65 64 20 64 69 72 65 63 74 6c 79 20 69   used directly i
9d60: 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 0a  n the new row...
9d70: 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
9d80: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
9d90: 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e  f a column is an
9da0: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 70   expression in p
9db0: 61 72 65 6e 74 68 65 73 65 73 2c 20 74 68 65 6e  arentheses, then
9dc0: 0a 20 20 20 20 74 68 65 20 65 78 70 72 65 73 73  .    the express
9dd0: 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64  ion is evaluated
9de0: 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 20 72   once for each r
9df0: 6f 77 20 69 6e 73 65 72 74 65 64 20 61 6e 64 20  ow inserted and 
9e00: 74 68 65 20 72 65 73 75 6c 74 73 0a 20 20 20 20  the results.    
9e10: 75 73 65 64 20 69 6e 20 74 68 65 20 6e 65 77 20  used in the new 
9e20: 72 6f 77 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  row...  <li><p>^
9e30: 49 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  If the default v
9e40: 61 6c 75 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  alue of a column
9e50: 20 69 73 20 43 55 52 52 45 4e 54 5f 54 49 4d 45   is CURRENT_TIME
9e60: 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f  , CURRENT_DATE o
9e70: 72 0a 20 20 20 20 43 55 52 52 45 4e 54 5f 54 49  r.    CURRENT_TI
9e80: 4d 45 53 54 41 4d 50 2c 20 74 68 65 6e 20 74 68  MESTAMP, then th
9e90: 65 20 76 61 6c 75 65 20 75 73 65 64 20 69 6e 20  e value used in 
9ea0: 74 68 65 20 6e 65 77 20 72 6f 77 20 69 73 20 61  the new row is a
9eb0: 20 74 65 78 74 0a 20 20 20 20 72 65 70 72 65 73   text.    repres
9ec0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
9ed0: 63 75 72 72 65 6e 74 20 55 54 43 20 64 61 74 65  current UTC date
9ee0: 20 61 6e 64 2f 6f 72 20 74 69 6d 65 2e 20 5e 46   and/or time. ^F
9ef0: 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c  or CURRENT_TIME,
9f00: 20 74 68 65 0a 20 20 20 20 66 6f 72 6d 61 74 20   the.    format 
9f10: 6f 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  of the value is 
9f20: 22 48 48 3a 4d 4d 3a 53 53 22 2e 20 5e 46 6f 72  "HH:MM:SS". ^For
9f30: 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2c 20 22   CURRENT_DATE, "
9f40: 59 59 59 59 2d 4d 4d 2d 44 44 22 2e 20 5e 54 68  YYYY-MM-DD". ^Th
9f50: 65 0a 20 20 20 20 66 6f 72 6d 61 74 20 66 6f 72  e.    format for
9f60: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
9f70: 4d 50 20 69 73 20 22 59 59 59 59 2d 4d 4d 2d 44  MP is "YYYY-MM-D
9f80: 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 0a 3c 2f 75  D HH:MM:SS"..</u
9f90: 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c 4c  l>..<p>^The COLL
9fa0: 41 54 45 20 63 6c 61 75 73 65 20 73 70 65 63 69  ATE clause speci
9fb0: 66 69 65 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  fies the name of
9fc0: 20 61 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65   a [collating se
9fd0: 71 75 65 6e 63 65 5d 20 74 6f 20 75 73 65 20 61  quence] to use a
9fe0: 73 0a 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f  s.the default co
9ff0: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
a000: 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2e   for the column.
a010: 20 5e 49 66 20 6e 6f 20 43 4f 4c 4c 41 54 45 20   ^If no COLLATE 
a020: 63 6c 61 75 73 65 20 69 73 0a 73 70 65 63 69 66  clause is.specif
a030: 69 65 64 2c 20 74 68 65 20 64 65 66 61 75 6c 74  ied, the default
a040: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
a050: 6e 63 65 20 69 73 20 5b 42 49 4e 41 52 59 5d 2e  nce is [BINARY].
a060: 0a 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d 62 65 72  ..<p>^The number
a070: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61   of columns in a
a080: 20 74 61 62 6c 65 20 69 73 20 6c 69 6d 69 74 65   table is limite
a090: 64 20 62 79 20 74 68 65 20 5b 53 51 4c 49 54 45  d by the [SQLITE
a0a0: 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 5d 0a 63 6f 6d  _MAX_COLUMN].com
a0b0: 70 69 6c 65 2d 74 69 6d 65 20 70 61 72 61 6d 65  pile-time parame
a0c0: 74 65 72 2e 20 5e 41 20 73 69 6e 67 6c 65 20 72  ter. ^A single r
a0d0: 6f 77 20 6f 66 20 61 20 74 61 62 6c 65 20 63 61  ow of a table ca
a0e0: 6e 6e 6f 74 20 73 74 6f 72 65 20 6d 6f 72 65 20  nnot store more 
a0f0: 74 68 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d 41 58  than.[SQLITE_MAX
a100: 5f 4c 45 4e 47 54 48 5d 20 62 79 74 65 73 20 6f  _LENGTH] bytes o
a110: 66 20 64 61 74 61 2e 20 5e 42 6f 74 68 20 6f 66  f data. ^Both of
a120: 20 74 68 65 73 65 20 6c 69 6d 69 74 73 20 63 61   these limits ca
a130: 6e 20 62 65 20 6c 6f 77 65 72 65 64 20 61 74 0a  n be lowered at.
a140: 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68  runtime using th
a150: 65 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  e [sqlite3_limit
a160: 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66  ()] C/C++ interf
a170: 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ace.</p>..<tcl>h
a180: 64 5f 66 72 61 67 6d 65 6e 74 20 7b 63 6f 6e 73  d_fragment {cons
a190: 74 72 61 69 6e 74 73 7d 20 7b 63 6f 6e 73 74 72  traints} {constr
a1a0: 61 69 6e 74 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  aints}</tcl>.<h3
a1b0: 3e 53 51 4c 20 44 61 74 61 20 43 6f 6e 73 74 72  >SQL Data Constr
a1c0: 61 69 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 74 63 6c  aints</h3>..<tcl
a1d0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 70 72 69  >hd_fragment pri
a1e0: 6d 6b 65 79 63 6f 6e 73 74 20 7b 50 52 49 4d 41  mkeyconst {PRIMA
a1f0: 52 59 20 4b 45 59 7d 20 7b 50 52 49 4d 41 52 59  RY KEY} {PRIMARY
a200: 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 7d   KEY constraint}
a210: 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 45 61 63 68 20  </tcl>.<p>^Each 
a220: 74 61 62 6c 65 20 69 6e 20 53 51 4c 69 74 65 20  table in SQLite 
a230: 6d 61 79 20 68 61 76 65 20 61 74 20 6d 6f 73 74  may have at most
a240: 20 6f 6e 65 20 3c 62 3e 50 52 49 4d 41 52 59 20   one <b>PRIMARY 
a250: 4b 45 59 3c 2f 62 3e 2e 20 5e 49 66 20 74 68 65  KEY</b>. ^If the
a260: 0a 20 20 6b 65 79 77 6f 72 64 73 20 50 52 49 4d  .  keywords PRIM
a270: 41 52 59 20 4b 45 59 20 61 72 65 20 61 64 64 65  ARY KEY are adde
a280: 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65  d to a column de
a290: 66 69 6e 69 74 69 6f 6e 2c 20 74 68 65 6e 20 74  finition, then t
a2a0: 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 0a 20  he primary key. 
a2b0: 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20 63   for the table c
a2c0: 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 61 74 20  onsists of that 
a2d0: 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 5e  single column. ^
a2e0: 4f 72 2c 20 69 66 20 61 20 50 52 49 4d 41 52 59  Or, if a PRIMARY
a2f0: 20 4b 45 59 20 63 6c 61 75 73 65 20 0a 20 20 69   KEY clause .  i
a300: 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 61  s specified as a
a310: 20 5b 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69   [table-constrai
a320: 6e 74 5d 2c 20 74 68 65 6e 20 74 68 65 20 70 72  nt], then the pr
a330: 69 6d 61 72 79 20 6b 65 79 20 6f 66 20 74 68 65  imary key of the
a340: 20 74 61 62 6c 65 0a 20 20 63 6f 6e 73 69 73 74   table.  consist
a350: 73 20 6f 66 20 74 68 65 20 6c 69 73 74 20 6f 66  s of the list of
a360: 20 63 6f 6c 75 6d 6e 73 20 73 70 65 63 69 66 69   columns specifi
a370: 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ed as part of th
a380: 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6c  e PRIMARY KEY cl
a390: 61 75 73 65 2e 0a 20 20 5e 54 68 65 20 50 52 49  ause..  ^The PRI
a3a0: 4d 41 52 59 20 4b 45 59 20 63 6c 61 75 73 65 20  MARY KEY clause 
a3b0: 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 6f 6e 6c  must contain onl
a3c0: 79 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 26  y column names &
a3d0: 6d 64 61 73 68 3b 20 74 68 65 20 75 73 65 20 6f  mdash; the use o
a3e0: 66 20 0a 20 20 65 78 70 72 65 73 73 69 6f 6e 73  f .  expressions
a3f0: 20 69 6e 20 61 6e 20 5b 69 6e 64 65 78 65 64 2d   in an [indexed-
a400: 63 6f 6c 75 6d 6e 5d 20 6f 66 20 61 20 50 52 49  column] of a PRI
a410: 4d 41 52 59 20 4b 45 59 20 69 73 20 6e 6f 74 20  MARY KEY is not 
a420: 73 75 70 70 6f 72 74 65 64 2e 0a 20 20 5e 41 6e  supported..  ^An
a430: 20 65 72 72 6f 72 20 69 73 20 72 61 69 73 65 64   error is raised
a440: 20 69 66 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e   if more than on
a450: 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6c  e PRIMARY KEY cl
a460: 61 75 73 65 20 61 70 70 65 61 72 73 20 69 6e 20  ause appears in 
a470: 61 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  a.  CREATE TABLE
a480: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 5e 54 68   statement.  ^Th
a490: 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73  e PRIMARY KEY is
a4a0: 20 6f 70 74 69 6f 6e 61 6c 20 66 6f 72 20 6f 72   optional for or
a4b0: 64 69 6e 61 72 79 20 74 61 62 6c 65 73 0a 20 20  dinary tables.  
a4c0: 62 75 74 20 69 73 20 72 65 71 75 69 72 65 64 20  but is required 
a4d0: 66 6f 72 20 5b 57 49 54 48 4f 55 54 20 52 4f 57  for [WITHOUT ROW
a4e0: 49 44 5d 20 74 61 62 6c 65 73 2e 0a 0a 3c 70 3e  ID] tables...<p>
a4f0: 49 66 20 61 20 74 61 62 6c 65 20 68 61 73 20 61  If a table has a
a500: 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 70   single column p
a510: 72 69 6d 61 72 79 20 6b 65 79 20 61 6e 64 20 74  rimary key and t
a520: 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70 65  he declared type
a530: 20 6f 66 20 74 68 61 74 0a 20 20 63 6f 6c 75 6d   of that.  colum
a540: 6e 20 69 73 20 22 49 4e 54 45 47 45 52 22 20 61  n is "INTEGER" a
a550: 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  nd the table is 
a560: 6e 6f 74 20 61 20 5b 57 49 54 48 4f 55 54 20 52  not a [WITHOUT R
a570: 4f 57 49 44 5d 20 74 61 62 6c 65 2c 0a 20 20 74  OWID] table,.  t
a580: 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69  hen the column i
a590: 73 20 6b 6e 6f 77 6e 20 61 73 20 61 6e 20 5b 49  s known as an [I
a5a0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
a5b0: 45 59 5d 2e 0a 20 20 53 65 65 20 5b 72 6f 77 69  EY]..  See [rowi
a5c0: 64 7c 62 65 6c 6f 77 5d 20 66 6f 72 20 61 20 64  d|below] for a d
a5d0: 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 74 68  escription of th
a5e0: 65 20 73 70 65 63 69 61 6c 20 70 72 6f 70 65 72  e special proper
a5f0: 74 69 65 73 20 61 6e 64 20 62 65 68 61 76 69 6f  ties and behavio
a600: 72 73 0a 20 20 61 73 73 6f 63 69 61 74 65 64 20  rs.  associated 
a610: 77 69 74 68 20 61 6e 20 5b 49 4e 54 45 47 45 52  with an [INTEGER
a620: 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 0a   PRIMARY KEY]...
a630: 3c 70 3e 5e 45 61 63 68 20 72 6f 77 20 69 6e 20  <p>^Each row in 
a640: 61 20 74 61 62 6c 65 20 77 69 74 68 20 61 20 70  a table with a p
a650: 72 69 6d 61 72 79 20 6b 65 79 20 6d 75 73 74 20  rimary key must 
a660: 68 61 76 65 20 61 20 75 6e 69 71 75 65 20 63 6f  have a unique co
a670: 6d 62 69 6e 61 74 69 6f 6e 0a 20 20 6f 66 20 76  mbination.  of v
a680: 61 6c 75 65 73 20 69 6e 20 69 74 73 20 70 72 69  alues in its pri
a690: 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 73  mary key columns
a6a0: 2e 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f  . ^For the purpo
a6b0: 73 65 73 20 6f 66 20 64 65 74 65 72 6d 69 6e 69  ses of determini
a6c0: 6e 67 0a 20 20 74 68 65 20 75 6e 69 71 75 65 6e  ng.  the uniquen
a6d0: 65 73 73 20 6f 66 20 70 72 69 6d 61 72 79 20 6b  ess of primary k
a6e0: 65 79 20 76 61 6c 75 65 73 2c 20 4e 55 4c 4c 20  ey values, NULL 
a6f0: 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69  values are consi
a700: 64 65 72 65 64 20 64 69 73 74 69 6e 63 74 20 66  dered distinct f
a710: 72 6f 6d 0a 20 20 61 6c 6c 20 6f 74 68 65 72 20  rom.  all other 
a720: 76 61 6c 75 65 73 2c 20 69 6e 63 6c 75 64 69 6e  values, includin
a730: 67 20 6f 74 68 65 72 20 4e 55 4c 4c 73 2e 20 5e  g other NULLs. ^
a740: 49 66 20 61 6e 20 5b 49 4e 53 45 52 54 5d 20 6f  If an [INSERT] o
a750: 72 20 5b 55 50 44 41 54 45 5d 0a 20 20 73 74 61  r [UPDATE].  sta
a760: 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20  tement attempts 
a770: 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 74 61  to modify the ta
a780: 62 6c 65 20 63 6f 6e 74 65 6e 74 20 73 6f 20 74  ble content so t
a790: 68 61 74 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  hat two or more 
a7a0: 72 6f 77 73 0a 20 20 68 61 76 65 20 69 64 65 6e  rows.  have iden
a7b0: 74 69 63 61 6c 20 70 72 69 6d 61 72 79 20 6b 65  tical primary ke
a7c0: 79 20 76 61 6c 75 65 73 2c 20 74 68 61 74 20 69  y values, that i
a7d0: 73 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  s a constraint v
a7e0: 69 6f 6c 61 74 69 6f 6e 2e 0a 0a 3c 70 3e 20 41  iolation...<p> A
a7f0: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20  ccording to the 
a800: 53 51 4c 20 73 74 61 6e 64 61 72 64 2c 20 50 52  SQL standard, PR
a810: 49 4d 41 52 59 20 4b 45 59 20 73 68 6f 75 6c 64  IMARY KEY should
a820: 20 61 6c 77 61 79 73 20 69 6d 70 6c 79 20 4e 4f   always imply NO
a830: 54 20 4e 55 4c 4c 2e 0a 20 20 55 6e 66 6f 72 74  T NULL..  Unfort
a840: 75 6e 61 74 65 6c 79 2c 20 64 75 65 20 74 6f 20  unately, due to 
a850: 61 20 62 75 67 20 69 6e 20 73 6f 6d 65 20 65 61  a bug in some ea
a860: 72 6c 79 20 76 65 72 73 69 6f 6e 73 2c 20 74 68  rly versions, th
a870: 69 73 20 69 73 20 6e 6f 74 20 74 68 65 0a 20 20  is is not the.  
a880: 63 61 73 65 20 69 6e 20 53 51 4c 69 74 65 2e 20  case in SQLite. 
a890: 5e 55 6e 6c 65 73 73 20 74 68 65 20 63 6f 6c 75  ^Unless the colu
a8a0: 6d 6e 20 69 73 20 61 6e 20 5b 49 4e 54 45 47 45  mn is an [INTEGE
a8b0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 6f  R PRIMARY KEY] o
a8c0: 72 0a 20 20 74 68 65 20 74 61 62 6c 65 20 69 73  r.  the table is
a8d0: 20 61 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49   a [WITHOUT ROWI
a8e0: 44 5d 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20  D] table or the 
a8f0: 63 6f 6c 75 6d 6e 20 69 73 20 64 65 63 6c 61 72  column is declar
a900: 65 64 20 4e 4f 54 20 4e 55 4c 4c 2c 0a 20 20 53  ed NOT NULL,.  S
a910: 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 4e 55 4c  QLite allows NUL
a920: 4c 20 76 61 6c 75 65 73 20 69 6e 20 61 20 50 52  L values in a PR
a930: 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e  IMARY KEY column
a940: 2e 20 20 53 51 4c 69 74 65 20 63 6f 75 6c 64 20  .  SQLite could 
a950: 62 65 20 66 69 78 65 64 20 74 6f 0a 20 20 63 6f  be fixed to.  co
a960: 6e 66 6f 72 6d 20 74 6f 20 74 68 65 20 73 74 61  nform to the sta
a970: 6e 64 61 72 64 2c 20 62 75 74 20 64 6f 69 6e 67  ndard, but doing
a980: 20 73 6f 20 6d 69 67 68 74 20 62 72 65 61 6b 20   so might break 
a990: 6c 65 67 61 63 79 20 61 70 70 6c 69 63 61 74 69  legacy applicati
a9a0: 6f 6e 73 2e 0a 20 20 48 65 6e 63 65 2c 20 69 74  ons..  Hence, it
a9b0: 20 68 61 73 20 62 65 65 6e 20 64 65 63 69 64 65   has been decide
a9c0: 64 20 74 6f 20 6d 65 72 65 6c 79 20 64 6f 63 75  d to merely docu
a9d0: 6d 65 6e 74 20 74 68 65 20 66 61 63 74 20 74 68  ment the fact th
a9e0: 61 74 20 53 51 4c 69 74 65 0a 20 20 61 6c 6c 6f  at SQLite.  allo
a9f0: 77 69 6e 67 20 4e 55 4c 4c 73 20 69 6e 20 6d 6f  wing NULLs in mo
aa00: 73 74 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  st PRIMARY KEY c
aa10: 6f 6c 75 6d 6e 73 2e 0a 0a 3c 74 63 6c 3e 68 64  olumns...<tcl>hd
aa20: 5f 66 72 61 67 6d 65 6e 74 20 75 6e 69 71 75 65  _fragment unique
aa30: 63 6f 6e 73 74 20 7b 55 4e 49 51 55 45 7d 20 7b  const {UNIQUE} {
aa40: 75 6e 69 71 75 65 20 63 6f 6e 73 74 72 61 69 6e  unique constrain
aa50: 74 7d 20 7b 55 4e 49 51 55 45 20 63 6f 6e 73 74  t} {UNIQUE const
aa60: 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  raint}</tcl>.<p>
aa70: 5e 41 20 3c 62 3e 55 4e 49 51 55 45 3c 2f 62 3e  ^A <b>UNIQUE</b>
aa80: 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 73   constraint is s
aa90: 69 6d 69 6c 61 72 20 74 6f 20 61 20 50 52 49 4d  imilar to a PRIM
aaa0: 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69  ARY KEY constrai
aab0: 6e 74 2c 20 65 78 63 65 70 74 0a 20 20 74 68 61  nt, except.  tha
aac0: 74 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  t a single table
aad0: 20 6d 61 79 20 68 61 76 65 20 61 6e 79 20 6e 75   may have any nu
aae0: 6d 62 65 72 20 6f 66 20 55 4e 49 51 55 45 20 63  mber of UNIQUE c
aaf0: 6f 6e 73 74 72 61 69 6e 74 73 2e 20 5e 46 6f 72  onstraints. ^For
ab00: 20 65 61 63 68 0a 20 20 55 4e 49 51 55 45 20 63   each.  UNIQUE c
ab10: 6f 6e 73 74 72 61 69 6e 74 20 6f 6e 20 74 68 65  onstraint on the
ab20: 20 74 61 62 6c 65 2c 20 65 61 63 68 20 72 6f 77   table, each row
ab30: 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 20   must contain a 
ab40: 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61 74 69  unique combinati
ab50: 6f 6e 0a 20 20 6f 66 20 76 61 6c 75 65 73 20 69  on.  of values i
ab60: 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 64  n the columns id
ab70: 65 6e 74 69 66 69 65 64 20 62 79 20 74 68 65 20  entified by the 
ab80: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
ab90: 74 2e 20 0a 20 20 5e 46 6f 72 20 74 68 65 20 70  t. .  ^For the p
aba0: 75 72 70 6f 73 65 73 20 6f 66 20 55 4e 49 51 55  urposes of UNIQU
abb0: 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 4e  E constraints, N
abc0: 55 4c 4c 20 76 61 6c 75 65 73 0a 20 20 61 72 65  ULL values.  are
abd0: 20 63 6f 6e 73 69 64 65 72 65 64 20 64 69 73 74   considered dist
abe0: 69 6e 63 74 20 66 72 6f 6d 20 61 6c 6c 20 6f 74  inct from all ot
abf0: 68 65 72 20 76 61 6c 75 65 73 2c 20 69 6e 63 6c  her values, incl
ac00: 75 64 69 6e 67 20 6f 74 68 65 72 20 4e 55 4c 4c  uding other NULL
ac10: 73 2e 0a 20 20 5e 41 73 20 77 69 74 68 20 50 52  s..  ^As with PR
ac20: 49 4d 41 52 59 20 4b 45 59 73 2c 20 61 20 55 4e  IMARY KEYs, a UN
ac30: 49 51 55 45 20 5b 74 61 62 6c 65 2d 63 6f 6e 73  IQUE [table-cons
ac40: 74 72 61 69 6e 74 5d 20 63 6c 61 75 73 65 20 6d  traint] clause m
ac50: 75 73 74 20 63 6f 6e 74 61 69 6e 0a 20 20 6f 6e  ust contain.  on
ac60: 6c 79 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ly column names 
ac70: 26 6d 64 61 73 68 3b 20 74 68 65 20 75 73 65 20  &mdash; the use 
ac80: 6f 66 20 0a 20 20 65 78 70 72 65 73 73 69 6f 6e  of .  expression
ac90: 73 20 69 6e 20 61 6e 20 5b 69 6e 64 65 78 65 64  s in an [indexed
aca0: 2d 63 6f 6c 75 6d 6e 5d 20 6f 66 20 61 20 55 4e  -column] of a UN
acb0: 49 51 55 45 20 5b 74 61 62 6c 65 2d 63 6f 6e 73  IQUE [table-cons
acc0: 74 72 61 69 6e 74 5d 0a 20 20 69 73 20 6e 6f 74  traint].  is not
acd0: 20 73 75 70 70 6f 72 74 65 64 2e 0a 20 20 0a 0a   supported..  ..
ace0: 3c 70 3e 5e 49 6e 20 6d 6f 73 74 20 63 61 73 65  <p>^In most case
acf0: 73 2c 20 55 4e 49 51 55 45 20 61 6e 64 20 50 52  s, UNIQUE and PR
ad00: 49 4d 41 52 59 20 4b 45 59 0a 20 20 63 6f 6e 73  IMARY KEY.  cons
ad10: 74 72 61 69 6e 74 73 20 61 72 65 20 69 6d 70 6c  traints are impl
ad20: 65 6d 65 6e 74 65 64 20 62 79 20 63 72 65 61 74  emented by creat
ad30: 69 6e 67 20 61 20 75 6e 69 71 75 65 20 69 6e 64  ing a unique ind
ad40: 65 78 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ex in the databa
ad50: 73 65 2e 0a 20 20 28 54 68 65 20 65 78 63 65 70  se..  (The excep
ad60: 74 69 6f 6e 73 20 61 72 65 20 5b 49 4e 54 45 47  tions are [INTEG
ad70: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20  ER PRIMARY KEY] 
ad80: 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45 59 73  and PRIMARY KEYs
ad90: 20 6f 6e 20 0a 20 20 5b 57 49 54 48 4f 55 54 20   on .  [WITHOUT 
ada0: 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e 29 0a  ROWID] tables.).
adb0: 20 20 48 65 6e 63 65 2c 20 74 68 65 20 66 6f 6c    Hence, the fol
adc0: 6c 6f 77 69 6e 67 20 73 63 68 65 6d 61 73 20 61  lowing schemas a
add0: 72 65 20 6c 6f 67 69 63 61 6c 6c 79 20 65 71 75  re logically equ
ade0: 69 76 61 6c 65 6e 74 3a 0a 0a 20 20 3c 6f 6c 3e  ivalent:..  <ol>
adf0: 0a 20 20 3c 6c 69 3e 3c 70 3e 43 52 45 41 54 45  .  <li><p>CREATE
ae00: 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 20 55   TABLE t1(a, b U
ae10: 4e 49 51 55 45 29 3b 0a 20 20 3c 6c 69 3e 3c 70  NIQUE);.  <li><p
ae20: 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  >CREATE TABLE t1
ae30: 28 61 2c 20 62 20 50 52 49 4d 41 52 59 20 4b 45  (a, b PRIMARY KE
ae40: 59 29 3b 0a 20 20 3c 6c 69 3e 3c 70 3e 43 52 45  Y);.  <li><p>CRE
ae50: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20  ATE TABLE t1(a, 
ae60: 62 29 3b 3c 62 72 3e 0a 20 20 20 20 20 20 20 20  b);<br>.        
ae70: 20 43 52 45 41 54 45 20 55 4e 49 51 55 45 20 49   CREATE UNIQUE I
ae80: 4e 44 45 58 20 74 31 62 20 4f 4e 20 74 31 28 62  NDEX t1b ON t1(b
ae90: 29 3b 0a 20 20 3c 2f 6f 6c 3e 0a 0a 3c 74 63 6c  );.  </ol>..<tcl
aea0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 63 6b  >hd_fragment {ck
aeb0: 63 6f 6e 73 74 7d 20 7b 43 48 45 43 4b 7d 20 7b  const} {CHECK} {
aec0: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
aed0: 7d 20 7b 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  } {CHECK constra
aee0: 69 6e 74 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  ints}</tcl>.<p>^
aef0: 28 41 20 3c 62 3e 43 48 45 43 4b 3c 2f 62 3e 20  (A <b>CHECK</b> 
af00: 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79 20 62  constraint may b
af10: 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 61 20  e attached to a 
af20: 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f  column definitio
af30: 6e 20 6f 72 0a 20 20 73 70 65 63 69 66 69 65 64  n or.  specified
af40: 20 61 73 20 61 20 74 61 62 6c 65 20 63 6f 6e 73   as a table cons
af50: 74 72 61 69 6e 74 2e 20 49 6e 20 70 72 61 63 74  traint. In pract
af60: 69 63 65 20 69 74 20 6d 61 6b 65 73 20 6e 6f 20  ice it makes no 
af70: 64 69 66 66 65 72 65 6e 63 65 2e 29 5e 20 5e 28  difference.)^ ^(
af80: 45 61 63 68 0a 20 20 74 69 6d 65 20 61 20 6e 65  Each.  time a ne
af90: 77 20 72 6f 77 20 69 73 20 69 6e 73 65 72 74 65  w row is inserte
afa0: 64 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65  d into the table
afb0: 20 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67 20   or an existing 
afc0: 72 6f 77 20 69 73 20 75 70 64 61 74 65 64 2c 0a  row is updated,.
afd0: 20 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e    the expression
afe0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
aff0: 20 65 61 63 68 20 43 48 45 43 4b 20 63 6f 6e 73   each CHECK cons
b000: 74 72 61 69 6e 74 20 69 73 20 65 76 61 6c 75 61  traint is evalua
b010: 74 65 64 20 61 6e 64 0a 20 20 63 61 73 74 20 74  ted and.  cast t
b020: 6f 20 61 20 4e 55 4d 45 52 49 43 20 76 61 6c 75  o a NUMERIC valu
b030: 65 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61  e in the same wa
b040: 79 20 61 73 20 61 20 5b 43 41 53 54 20 65 78 70  y as a [CAST exp
b050: 72 65 73 73 69 6f 6e 5d 2e 20 49 66 20 74 68 65  ression]. If the
b060: 20 0a 20 20 72 65 73 75 6c 74 20 69 73 20 7a 65   .  result is ze
b070: 72 6f 20 28 69 6e 74 65 67 65 72 20 76 61 6c 75  ro (integer valu
b080: 65 20 30 20 6f 72 20 72 65 61 6c 20 76 61 6c 75  e 0 or real valu
b090: 65 20 30 2e 30 29 2c 20 74 68 65 6e 20 61 20 63  e 0.0), then a c
b0a0: 6f 6e 73 74 72 61 69 6e 74 0a 20 20 76 69 6f 6c  onstraint.  viol
b0b0: 61 74 69 6f 6e 20 68 61 73 20 6f 63 63 75 72 72  ation has occurr
b0c0: 65 64 2e 29 5e 20 5e 49 66 20 74 68 65 20 43 48  ed.)^ ^If the CH
b0d0: 45 43 4b 20 65 78 70 72 65 73 73 69 6f 6e 20 65  ECK expression e
b0e0: 76 61 6c 75 61 74 65 73 20 74 6f 20 4e 55 4c 4c  valuates to NULL
b0f0: 2c 20 6f 72 0a 20 20 61 6e 79 20 6f 74 68 65 72  , or.  any other
b100: 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61 6c 75 65 2c   non-zero value,
b110: 20 69 74 20 69 73 20 6e 6f 74 20 61 20 63 6f 6e   it is not a con
b120: 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
b130: 6e 2e 0a 20 20 5e 54 68 65 20 65 78 70 72 65 73  n..  ^The expres
b140: 73 69 6f 6e 20 6f 66 20 61 20 43 48 45 43 4b 20  sion of a CHECK 
b150: 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79 20 6e  constraint may n
b160: 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 73 75 62  ot contain a sub
b170: 71 75 65 72 79 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  query...<tcl>hd_
b180: 66 72 61 67 6d 65 6e 74 20 7b 6e 6f 74 6e 75 6c  fragment {notnul
b190: 6c 63 6f 6e 73 74 7d 20 7b 4e 4f 54 20 4e 55 4c  lconst} {NOT NUL
b1a0: 4c 7d 20 7b 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  L} {NOT NULL con
b1b0: 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c  straint}</tcl>.<
b1c0: 70 3e 5e 41 20 3c 62 3e 4e 4f 54 20 4e 55 4c 4c  p>^A <b>NOT NULL
b1d0: 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74 20  </b> constraint 
b1e0: 6d 61 79 20 6f 6e 6c 79 20 62 65 20 61 74 74 61  may only be atta
b1f0: 63 68 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  ched to a column
b200: 20 64 65 66 69 6e 69 74 69 6f 6e 2c 0a 20 20 6e   definition,.  n
b210: 6f 74 20 73 70 65 63 69 66 69 65 64 20 61 73 20  ot specified as 
b220: 61 20 74 61 62 6c 65 20 63 6f 6e 73 74 72 61 69  a table constrai
b230: 6e 74 2e 20 20 4e 6f 74 20 73 75 72 70 72 69 73  nt.  Not surpris
b240: 69 6e 67 6c 79 2c 20 5e 28 61 20 4e 4f 54 20 4e  ingly, ^(a NOT N
b250: 55 4c 4c 0a 20 20 63 6f 6e 73 74 72 61 69 6e 74  ULL.  constraint
b260: 20 64 69 63 74 61 74 65 73 20 74 68 61 74 20 74   dictates that t
b270: 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 63 6f  he associated co
b280: 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 63 6f 6e  lumn may not con
b290: 74 61 69 6e 20 61 20 4e 55 4c 4c 20 76 61 6c 75  tain a NULL valu
b2a0: 65 2e 0a 20 20 41 74 74 65 6d 70 74 69 6e 67 20  e..  Attempting 
b2b0: 74 6f 20 73 65 74 20 74 68 65 20 63 6f 6c 75 6d  to set the colum
b2c0: 6e 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20  n value to NULL 
b2d0: 77 68 65 6e 20 69 6e 73 65 72 74 69 6e 67 20 61  when inserting a
b2e0: 20 6e 65 77 20 72 6f 77 20 6f 72 0a 20 20 75 70   new row or.  up
b2f0: 64 61 74 69 6e 67 20 61 6e 20 65 78 69 73 74 69  dating an existi
b300: 6e 67 20 6f 6e 65 20 63 61 75 73 65 73 20 61 20  ng one causes a 
b310: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
b320: 74 69 6f 6e 2e 29 5e 0a 0a 3c 70 3e 45 78 61 63  tion.)^..<p>Exac
b330: 74 6c 79 20 68 6f 77 20 61 20 63 6f 6e 73 74 72  tly how a constr
b340: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 69  aint violation i
b350: 73 20 64 65 61 6c 74 20 77 69 74 68 20 69 73 20  s dealt with is 
b360: 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
b370: 65 0a 20 20 5b 63 6f 6e 66 6c 69 63 74 20 63 6c  e.  [conflict cl
b380: 61 75 73 65 7c 63 6f 6e 73 74 72 61 69 6e 74 20  ause|constraint 
b390: 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
b3a0: 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 5d 2e 20  ion algorithm]. 
b3b0: 45 61 63 68 20 0a 20 20 50 52 49 4d 41 52 59 20  Each .  PRIMARY 
b3c0: 4b 45 59 2c 20 55 4e 49 51 55 45 2c 20 4e 4f 54  KEY, UNIQUE, NOT
b3d0: 20 4e 55 4c 4c 20 61 6e 64 20 43 48 45 43 4b 20   NULL and CHECK 
b3e0: 63 6f 6e 73 74 72 61 69 6e 74 20 68 61 73 20 61  constraint has a
b3f0: 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63   default conflic
b400: 74 0a 20 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  t.  resolution a
b410: 6c 67 6f 72 69 74 68 6d 2e 20 5e 50 52 49 4d 41  lgorithm. ^PRIMA
b420: 52 59 20 4b 45 59 2c 20 55 4e 49 51 55 45 20 61  RY KEY, UNIQUE a
b430: 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73  nd NOT NULL cons
b440: 74 72 61 69 6e 74 73 20 6d 61 79 20 62 65 0a 20  traints may be. 
b450: 20 65 78 70 6c 69 63 69 74 6c 79 20 61 73 73 69   explicitly assi
b460: 67 6e 65 64 20 61 20 64 65 66 61 75 6c 74 20 63  gned a default c
b470: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
b480: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 62 79 20  on algorithm by 
b490: 69 6e 63 6c 75 64 69 6e 67 0a 20 20 61 20 5b 63  including.  a [c
b4a0: 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 5d 20  onflict-clause] 
b4b0: 69 6e 20 74 68 65 69 72 20 64 65 66 69 6e 69 74  in their definit
b4c0: 69 6f 6e 73 2e 20 5e 4f 72 2c 20 69 66 20 61 20  ions. ^Or, if a 
b4d0: 63 6f 6e 73 74 72 61 69 6e 74 20 64 65 66 69 6e  constraint defin
b4e0: 69 74 69 6f 6e 0a 20 20 64 6f 65 73 20 6e 6f 74  ition.  does not
b4f0: 20 69 6e 63 6c 75 64 65 20 61 20 5b 63 6f 6e 66   include a [conf
b500: 6c 69 63 74 2d 63 6c 61 75 73 65 5d 20 6f 72 20  lict-clause] or 
b510: 69 74 20 69 73 20 61 20 43 48 45 43 4b 20 63 6f  it is a CHECK co
b520: 6e 73 74 72 61 69 6e 74 2c 20 74 68 65 20 64 65  nstraint, the de
b530: 66 61 75 6c 74 0a 20 20 63 6f 6e 66 6c 69 63 74  fault.  conflict
b540: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
b550: 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e 20  rithm is ABORT. 
b560: 5e 44 69 66 66 65 72 65 6e 74 20 63 6f 6e 73 74  ^Different const
b570: 72 61 69 6e 74 73 20 77 69 74 68 69 6e 20 74 68  raints within th
b580: 65 0a 20 20 73 61 6d 65 20 74 61 62 6c 65 20 6d  e.  same table m
b590: 61 79 20 68 61 76 65 20 64 69 66 66 65 72 65 6e  ay have differen
b5a0: 74 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69  t default confli
b5b0: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
b5c0: 67 6f 72 69 74 68 6d 73 2e 20 53 65 65 0a 20 20  gorithms. See.  
b5d0: 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c  the section titl
b5e0: 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d  ed [ON CONFLICT]
b5f0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
b600: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a 3c 74  information...<t
b610: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72  cl>hd_fragment r
b620: 6f 77 69 64 20 7b 49 4e 54 45 47 45 52 20 50 52  owid {INTEGER PR
b630: 49 4d 41 52 59 20 4b 45 59 7d 20 52 4f 57 49 44  IMARY KEY} ROWID
b640: 20 72 6f 77 69 64 3c 2f 74 63 6c 3e 0a 3c 68 33   rowid</tcl>.<h3
b650: 3e 52 4f 57 49 44 73 20 61 6e 64 20 74 68 65 20  >ROWIDs and the 
b660: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
b670: 4b 45 59 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 45 78  KEY</h3>..<p>^Ex
b680: 63 65 70 74 20 66 6f 72 20 5b 57 49 54 48 4f 55  cept for [WITHOU
b690: 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2c  T ROWID] tables,
b6a0: 20 61 6c 6c 20 72 6f 77 73 20 77 69 74 68 69 6e   all rows within
b6b0: 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 0a 68   SQLite tables.h
b6c0: 61 76 65 20 61 20 36 34 2d 62 69 74 20 73 69 67  ave a 64-bit sig
b6d0: 6e 65 64 20 69 6e 74 65 67 65 72 20 6b 65 79 20  ned integer key 
b6e0: 74 68 61 74 20 75 6e 69 71 75 65 6c 79 20 69 64  that uniquely id
b6f0: 65 6e 74 69 66 69 65 73 20 74 68 65 20 72 6f 77  entifies the row
b700: 20 77 69 74 68 69 6e 20 69 74 73 20 74 61 62 6c   within its tabl
b710: 65 2e 0a 54 68 69 73 20 69 6e 74 65 67 65 72 20  e..This integer 
b720: 69 73 20 75 73 75 61 6c 6c 79 0a 63 61 6c 6c 65  is usually.calle
b730: 64 20 74 68 65 20 22 72 6f 77 69 64 22 2e 20 5e  d the "rowid". ^
b740: 54 68 65 20 72 6f 77 69 64 20 76 61 6c 75 65 20  The rowid value 
b750: 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20  can be accessed 
b760: 75 73 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65  using one of the
b770: 20 73 70 65 63 69 61 6c 0a 63 61 73 65 2d 69 6e   special.case-in
b780: 64 65 70 65 6e 64 65 6e 74 20 6e 61 6d 65 73 20  dependent names 
b790: 22 72 6f 77 69 64 22 2c 20 22 6f 69 64 22 2c 20  "rowid", "oid", 
b7a0: 6f 72 20 22 5f 72 6f 77 69 64 5f 22 20 69 6e 20  or "_rowid_" in 
b7b0: 70 6c 61 63 65 20 6f 66 20 61 20 63 6f 6c 75 6d  place of a colum
b7c0: 6e 20 6e 61 6d 65 2e 0a 5e 49 66 20 61 20 74 61  n name..^If a ta
b7d0: 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 75  ble contains a u
b7e0: 73 65 72 20 64 65 66 69 6e 65 64 20 63 6f 6c 75  ser defined colu
b7f0: 6d 6e 20 6e 61 6d 65 64 20 22 72 6f 77 69 64 22  mn named "rowid"
b800: 2c 20 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77  , "oid" or "_row
b810: 69 64 5f 22 2c 0a 74 68 65 6e 20 74 68 61 74 20  id_",.then that 
b820: 6e 61 6d 65 20 61 6c 77 61 79 73 20 72 65 66 65  name always refe
b830: 72 73 20 74 68 65 20 65 78 70 6c 69 63 69 74 6c  rs the explicitl
b840: 79 20 64 65 63 6c 61 72 65 64 20 63 6f 6c 75 6d  y declared colum
b850: 6e 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20  n and cannot be 
b860: 75 73 65 64 0a 74 6f 20 72 65 74 72 69 65 76 65  used.to retrieve
b870: 20 74 68 65 20 69 6e 74 65 67 65 72 20 72 6f 77   the integer row
b880: 69 64 20 76 61 6c 75 65 2e 0a 0a 3c 70 3e 54 68  id value...<p>Th
b890: 65 20 72 6f 77 69 64 20 28 61 6e 64 20 22 6f 69  e rowid (and "oi
b8a0: 64 22 20 61 6e 64 20 22 5f 72 6f 77 69 64 5f 22  d" and "_rowid_"
b8b0: 29 20 69 73 20 6f 6d 69 74 74 65 64 20 69 6e 20  ) is omitted in 
b8c0: 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20  [WITHOUT ROWID] 
b8d0: 74 61 62 6c 65 73 2e 0a 57 49 54 48 4f 55 54 20  tables..WITHOUT 
b8e0: 52 4f 57 49 44 20 74 61 62 6c 65 73 20 61 72 65  ROWID tables are
b8f0: 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20   only available 
b900: 69 6e 20 53 51 4c 69 74 65 20 5b 76 65 72 73 69  in SQLite [versi
b910: 6f 6e 20 33 2e 38 2e 32 5d 20 61 6e 64 20 6c 61  on 3.8.2] and la
b920: 74 65 72 2e 0a 41 20 74 61 62 6c 65 20 74 68 61  ter..A table tha
b930: 74 20 6c 61 63 6b 73 20 74 68 65 20 57 49 54 48  t lacks the WITH
b940: 4f 55 54 20 52 4f 57 49 44 20 63 6c 61 75 73 65  OUT ROWID clause
b950: 20 69 73 20 63 61 6c 6c 65 64 20 61 20 22 72 6f   is called a "ro
b960: 77 69 64 20 74 61 62 6c 65 22 2e 0a 0a 3c 70 3e  wid table"...<p>
b970: 54 68 65 20 64 61 74 61 20 66 6f 72 20 72 6f 77  The data for row
b980: 69 64 20 74 61 62 6c 65 73 20 69 73 20 73 74 6f  id tables is sto
b990: 72 65 64 20 61 73 20 61 20 42 2d 54 72 65 65 20  red as a B-Tree 
b9a0: 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
b9b0: 6e 69 6e 67 0a 6f 6e 65 20 65 6e 74 72 79 20 66  ning.one entry f
b9c0: 6f 72 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f  or each table ro
b9d0: 77 2c 20 75 73 69 6e 67 20 74 68 65 20 72 6f 77  w, using the row
b9e0: 69 64 20 76 61 6c 75 65 20 61 73 20 74 68 65 20  id value as the 
b9f0: 6b 65 79 2e 20 54 68 69 73 20 6d 65 61 6e 73 20  key. This means 
ba00: 74 68 61 74 0a 72 65 74 72 69 65 76 69 6e 67 20  that.retrieving 
ba10: 6f 72 20 73 6f 72 74 69 6e 67 20 72 65 63 6f 72  or sorting recor
ba20: 64 73 20 62 79 20 72 6f 77 69 64 20 69 73 20 66  ds by rowid is f
ba30: 61 73 74 2e 20 53 65 61 72 63 68 69 6e 67 20 66  ast. Searching f
ba40: 6f 72 20 61 20 72 65 63 6f 72 64 20 77 69 74 68  or a record with
ba50: 20 61 0a 73 70 65 63 69 66 69 63 20 72 6f 77 69   a.specific rowi
ba60: 64 2c 20 6f 72 20 66 6f 72 20 61 6c 6c 20 72 65  d, or for all re
ba70: 63 6f 72 64 73 20 77 69 74 68 20 72 6f 77 69 64  cords with rowid
ba80: 73 20 77 69 74 68 69 6e 20 61 20 73 70 65 63 69  s within a speci
ba90: 66 69 65 64 20 72 61 6e 67 65 20 69 73 0a 61 72  fied range is.ar
baa0: 6f 75 6e 64 20 74 77 69 63 65 20 61 73 20 66 61  ound twice as fa
bab0: 73 74 20 61 73 20 61 20 73 69 6d 69 6c 61 72 20  st as a similar 
bac0: 73 65 61 72 63 68 20 6d 61 64 65 20 62 79 20 73  search made by s
bad0: 70 65 63 69 66 79 69 6e 67 20 61 6e 79 20 6f 74  pecifying any ot
bae0: 68 65 72 20 50 52 49 4d 41 52 59 0a 4b 45 59 20  her PRIMARY.KEY 
baf0: 6f 72 20 69 6e 64 65 78 65 64 20 76 61 6c 75 65  or indexed value
bb00: 2e 0a 0a 3c 70 3e 20 5e 57 69 74 68 20 6f 6e 65  ...<p> ^With one
bb10: 20 65 78 63 65 70 74 69 6f 6e 20 6e 6f 74 65 64   exception noted
bb20: 20 62 65 6c 6f 77 2c 20 69 66 20 61 20 72 6f 77   below, if a row
bb30: 69 64 20 74 61 62 6c 65 20 68 61 73 20 61 20 70  id table has a p
bb40: 72 69 6d 61 72 79 20 6b 65 79 20 74 68 61 74 20  rimary key that 
bb50: 63 6f 6e 73 69 73 74 73 0a 6f 66 20 61 20 73 69  consists.of a si
bb60: 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 61 6e 64 20  ngle column and 
bb70: 74 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70  the declared typ
bb80: 65 20 6f 66 20 74 68 61 74 20 63 6f 6c 75 6d 6e  e of that column
bb90: 20 69 73 20 22 49 4e 54 45 47 45 52 22 20 69 6e   is "INTEGER" in
bba0: 20 61 6e 79 20 6d 69 78 74 75 72 65 20 6f 66 0a   any mixture of.
bbb0: 75 70 70 65 72 20 61 6e 64 20 6c 6f 77 65 72 20  upper and lower 
bbc0: 63 61 73 65 2c 20 74 68 65 6e 20 74 68 65 20 63  case, then the c
bbd0: 6f 6c 75 6d 6e 20 62 65 63 6f 6d 65 73 20 61 6e  olumn becomes an
bbe0: 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72   alias for the r
bbf0: 6f 77 69 64 2e 20 53 75 63 68 20 61 0a 63 6f 6c  owid. Such a.col
bc00: 75 6d 6e 20 69 73 20 75 73 75 61 6c 6c 79 20 72  umn is usually r
bc10: 65 66 65 72 72 65 64 20 74 6f 20 61 73 20 61 6e  eferred to as an
bc20: 20 22 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72   "integer primar
bc30: 79 20 6b 65 79 22 2e 20 41 20 50 52 49 4d 41 52  y key". A PRIMAR
bc40: 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 0a 6f 6e 6c  Y KEY column.onl
bc50: 79 20 62 65 63 6f 6d 65 73 20 61 6e 20 69 6e 74  y becomes an int
bc60: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
bc70: 20 69 66 20 74 68 65 20 64 65 63 6c 61 72 65 64   if the declared
bc80: 20 74 79 70 65 20 6e 61 6d 65 20 69 73 20 65 78   type name is ex
bc90: 61 63 74 6c 79 0a 22 49 4e 54 45 47 45 52 22 2e  actly."INTEGER".
bca0: 20 20 5e 4f 74 68 65 72 20 69 6e 74 65 67 65 72    ^Other integer
bcb0: 20 74 79 70 65 20 6e 61 6d 65 73 20 6c 69 6b 65   type names like
bcc0: 20 22 49 4e 54 22 20 6f 72 20 22 42 49 47 49 4e   "INT" or "BIGIN
bcd0: 54 22 20 6f 72 20 22 53 48 4f 52 54 20 49 4e 54  T" or "SHORT INT
bce0: 45 47 45 52 22 0a 6f 72 20 22 55 4e 53 49 47 4e  EGER".or "UNSIGN
bcf0: 45 44 20 49 4e 54 45 47 45 52 22 20 63 61 75 73  ED INTEGER" caus
bd00: 65 73 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  es the primary k
bd10: 65 79 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 68  ey column to beh
bd20: 61 76 65 20 61 73 20 61 6e 20 6f 72 64 69 6e 61  ave as an ordina
bd30: 72 79 0a 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20  ry.table column 
bd40: 77 69 74 68 20 69 6e 74 65 67 65 72 20 5b 61 66  with integer [af
bd50: 66 69 6e 69 74 79 5d 20 61 6e 64 20 61 20 75 6e  finity] and a un
bd60: 69 71 75 65 20 69 6e 64 65 78 2c 20 6e 6f 74 20  ique index, not 
bd70: 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 0a  as an alias for.
bd80: 74 68 65 20 72 6f 77 69 64 2e 0a 0a 3c 70 3e 20  the rowid...<p> 
bd90: 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20 6d 65  The exception me
bda0: 6e 74 69 6f 6e 65 64 20 61 62 6f 76 65 20 69 73  ntioned above is
bdb0: 20 74 68 61 74 20 5e 69 66 20 74 68 65 20 64 65   that ^if the de
bdc0: 63 6c 61 72 61 74 69 6f 6e 20 6f 66 20 61 20 63  claration of a c
bdd0: 6f 6c 75 6d 6e 20 77 69 74 68 0a 64 65 63 6c 61  olumn with.decla
bde0: 72 65 64 20 74 79 70 65 20 22 49 4e 54 45 47 45  red type "INTEGE
bdf0: 52 22 20 69 6e 63 6c 75 64 65 73 20 61 6e 20 22  R" includes an "
be00: 50 52 49 4d 41 52 59 20 4b 45 59 20 44 45 53 43  PRIMARY KEY DESC
be10: 22 20 63 6c 61 75 73 65 2c 20 69 74 20 64 6f 65  " clause, it doe
be20: 73 20 6e 6f 74 0a 62 65 63 6f 6d 65 20 61 6e 20  s not.become an 
be30: 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72 6f  alias for the ro
be40: 77 69 64 20 61 6e 64 20 69 73 20 6e 6f 74 20 63  wid and is not c
be50: 6c 61 73 73 69 66 69 65 64 20 61 73 20 61 6e 20  lassified as an 
be60: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
be70: 6b 65 79 2e 0a 54 68 69 73 20 71 75 69 72 6b 20  key..This quirk 
be80: 69 73 20 6e 6f 74 20 62 79 20 64 65 73 69 67 6e  is not by design
be90: 2e 20 49 74 20 69 73 20 64 75 65 20 74 6f 20 61  . It is due to a
bea0: 20 62 75 67 20 69 6e 20 65 61 72 6c 79 20 76 65   bug in early ve
beb0: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
bec0: 2e 0a 42 75 74 20 66 69 78 69 6e 67 20 74 68 65  ..But fixing the
bed0: 20 62 75 67 20 63 6f 75 6c 64 20 72 65 73 75 6c   bug could resul
bee0: 74 20 69 6e 20 62 61 63 6b 77 61 72 64 73 20 69  t in backwards i
bef0: 6e 63 6f 6d 70 61 74 69 62 69 6c 69 74 69 65 73  ncompatibilities
bf00: 2e 0a 48 65 6e 63 65 2c 20 74 68 65 20 6f 72 69  ..Hence, the ori
bf10: 67 69 6e 61 6c 20 62 65 68 61 76 69 6f 72 20 68  ginal behavior h
bf20: 61 73 20 62 65 65 6e 20 72 65 74 61 69 6e 65 64  as been retained
bf30: 20 28 61 6e 64 20 64 6f 63 75 6d 65 6e 74 65 64   (and documented
bf40: 29 20 62 65 63 61 75 73 65 20 6f 64 64 0a 62 65  ) because odd.be
bf50: 68 61 76 69 6f 72 20 69 6e 20 61 20 63 6f 72 6e  havior in a corn
bf60: 65 72 20 63 61 73 65 20 69 73 20 66 61 72 20 62  er case is far b
bf70: 65 74 74 65 72 20 74 68 61 6e 20 61 20 63 6f 6d  etter than a com
bf80: 70 61 74 69 62 69 6c 69 74 79 20 62 72 65 61 6b  patibility break
bf90: 2e 20 20 54 68 69 73 20 6d 65 61 6e 73 0a 74 68  .  This means.th
bfa0: 61 74 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77 69  at ^(the followi
bfb0: 6e 67 20 74 68 72 65 65 20 74 61 62 6c 65 20 64  ng three table d
bfc0: 65 63 6c 61 72 61 74 69 6f 6e 73 20 61 6c 6c 20  eclarations all 
bfd0: 63 61 75 73 65 20 74 68 65 20 63 6f 6c 75 6d 6e  cause the column
bfe0: 20 22 78 22 20 74 6f 20 62 65 20 61 6e 0a 61 6c   "x" to be an.al
bff0: 69 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69  ias for the rowi
c000: 64 20 28 61 6e 20 69 6e 74 65 67 65 72 20 70 72  d (an integer pr
c010: 69 6d 61 72 79 20 6b 65 79 29 3a 0a 0a 3c 75 6c  imary key):..<ul
c020: 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45  >.<li><tt>CREATE
c030: 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47   TABLE t(x INTEG
c040: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41  ER PRIMARY KEY A
c050: 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74 74 3e 0a  SC, y, z);</tt>.
c060: 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54  <li><tt>CREATE T
c070: 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52  ABLE t(x INTEGER
c080: 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59 20  , y, z, PRIMARY 
c090: 4b 45 59 28 78 20 41 53 43 29 29 3b 3c 2f 74 74  KEY(x ASC));</tt
c0a0: 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45  >.<li><tt>CREATE
c0b0: 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47   TABLE t(x INTEG
c0c0: 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52  ER, y, z, PRIMAR
c0d0: 59 20 4b 45 59 28 78 20 44 45 53 43 29 29 3b 3c  Y KEY(x DESC));<
c0e0: 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70  /tt>.</ul>)^..<p
c0f0: 3e 42 75 74 20 5e 28 74 68 65 20 66 6f 6c 6c 6f  >But ^(the follo
c100: 77 69 6e 67 20 64 65 63 6c 61 72 61 74 69 6f 6e  wing declaration
c110: 20 64 6f 65 73 20 6e 6f 74 20 72 65 73 75 6c 74   does not result
c120: 20 69 6e 20 22 78 22 20 62 65 69 6e 67 20 61 6e   in "x" being an
c130: 20 61 6c 69 61 73 20 66 6f 72 0a 74 68 65 20 72   alias for.the r
c140: 6f 77 69 64 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c  owid:.<ul>.<li><
c150: 74 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20  tt>CREATE TABLE 
c160: 74 28 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d  t(x INTEGER PRIM
c170: 41 52 59 20 4b 45 59 20 44 45 53 43 2c 20 79 2c  ARY KEY DESC, y,
c180: 20 7a 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29   z);</tt>.</ul>)
c190: 5e 0a 0a 3c 70 3e 5e 52 6f 77 69 64 20 76 61 6c  ^..<p>^Rowid val
c1a0: 75 65 73 20 6d 61 79 20 62 65 20 6d 6f 64 69 66  ues may be modif
c1b0: 69 65 64 20 75 73 69 6e 67 20 61 6e 20 55 50 44  ied using an UPD
c1c0: 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 6e  ATE statement in
c1d0: 20 74 68 65 20 73 61 6d 65 0a 77 61 79 20 61 73   the same.way as
c1e0: 20 61 6e 79 20 6f 74 68 65 72 20 63 6f 6c 75 6d   any other colum
c1f0: 6e 20 76 61 6c 75 65 20 63 61 6e 2c 20 65 69 74  n value can, eit
c200: 68 65 72 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66  her using one of
c210: 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 61 6c   the built-in al
c220: 69 61 73 65 73 0a 28 22 72 6f 77 69 64 22 2c 20  iases.("rowid", 
c230: 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77 69 64  "oid" or "_rowid
c240: 5f 22 29 20 6f 72 20 62 79 20 75 73 69 6e 67 20  _") or by using 
c250: 61 6e 20 61 6c 69 61 73 20 63 72 65 61 74 65 64  an alias created
c260: 20 62 79 20 61 6e 20 69 6e 74 65 67 65 72 0a 70   by an integer.p
c270: 72 69 6d 61 72 79 20 6b 65 79 2e 20 5e 53 69 6d  rimary key. ^Sim
c280: 69 6c 61 72 6c 79 2c 20 61 6e 20 49 4e 53 45 52  ilarly, an INSER
c290: 54 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  T statement may 
c2a0: 70 72 6f 76 69 64 65 20 61 20 76 61 6c 75 65 20  provide a value 
c2b0: 74 6f 20 75 73 65 20 61 73 20 74 68 65 0a 72 6f  to use as the.ro
c2c0: 77 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77  wid for each row
c2d0: 20 69 6e 73 65 72 74 65 64 2e 20 5e 28 55 6e 6c   inserted. ^(Unl
c2e0: 69 6b 65 20 6e 6f 72 6d 61 6c 20 53 51 4c 69 74  ike normal SQLit
c2f0: 65 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 20 69 6e  e columns, an in
c300: 74 65 67 65 72 20 70 72 69 6d 61 72 79 0a 6b 65  teger primary.ke
c310: 79 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d  y or rowid colum
c320: 6e 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 69  n must contain i
c330: 6e 74 65 67 65 72 20 76 61 6c 75 65 73 2e 20 49  nteger values. I
c340: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
c350: 65 79 20 6f 72 20 72 6f 77 69 64 0a 63 6f 6c 75  ey or rowid.colu
c360: 6d 6e 73 20 61 72 65 20 6e 6f 74 20 61 62 6c 65  mns are not able
c370: 20 74 6f 20 68 6f 6c 64 20 66 6c 6f 61 74 69 6e   to hold floatin
c380: 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 2c 20  g point values, 
c390: 73 74 72 69 6e 67 73 2c 20 42 4c 4f 42 73 2c 20  strings, BLOBs, 
c3a0: 6f 72 20 4e 55 4c 4c 73 2e 29 5e 0a 0a 3c 70 3e  or NULLs.)^..<p>
c3b0: 5e 49 66 20 61 6e 20 55 50 44 41 54 45 20 73 74  ^If an UPDATE st
c3c0: 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73  atement attempts
c3d0: 20 74 6f 20 73 65 74 20 61 6e 20 69 6e 74 65 67   to set an integ
c3e0: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f  er primary key o
c3f0: 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 0a 74  r rowid column.t
c400: 6f 20 61 20 4e 55 4c 4c 20 6f 72 20 62 6c 6f 62  o a NULL or blob
c410: 20 76 61 6c 75 65 2c 20 6f 72 20 74 6f 20 61 20   value, or to a 
c420: 73 74 72 69 6e 67 20 6f 72 20 72 65 61 6c 20 76  string or real v
c430: 61 6c 75 65 20 74 68 61 74 20 63 61 6e 6e 6f 74  alue that cannot
c440: 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 0a 63   be losslessly.c
c450: 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69  onverted to an i
c460: 6e 74 65 67 65 72 2c 20 61 20 22 64 61 74 61 74  nteger, a "datat
c470: 79 70 65 20 6d 69 73 6d 61 74 63 68 22 20 65 72  ype mismatch" er
c480: 72 6f 72 20 6f 63 63 75 72 73 20 61 6e 64 20 74  ror occurs and t
c490: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 69 73 20  he statement.is 
c4a0: 61 62 6f 72 74 65 64 2e 20 5e 49 66 20 61 6e 20  aborted. ^If an 
c4b0: 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
c4c0: 20 61 74 74 65 6d 70 74 73 20 74 6f 20 69 6e 73   attempts to ins
c4d0: 65 72 74 20 61 20 62 6c 6f 62 20 76 61 6c 75 65  ert a blob value
c4e0: 2c 20 6f 72 20 61 20 73 74 72 69 6e 67 0a 6f 72  , or a string.or
c4f0: 20 72 65 61 6c 20 76 61 6c 75 65 20 74 68 61 74   real value that
c500: 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c   cannot be lossl
c510: 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20  essly converted 
c520: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 69 6e  to an integer in
c530: 74 6f 20 61 6e 0a 69 6e 74 65 67 65 72 20 70 72  to an.integer pr
c540: 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77  imary key or row
c550: 69 64 20 63 6f 6c 75 6d 6e 2c 20 61 20 22 64 61  id column, a "da
c560: 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22  tatype mismatch"
c570: 20 65 72 72 6f 72 20 6f 63 63 75 72 73 20 61 6e   error occurs an
c580: 64 20 74 68 65 0a 73 74 61 74 65 6d 65 6e 74 20  d the.statement 
c590: 69 73 20 61 62 6f 72 74 65 64 2e 0a 0a 3c 70 3e  is aborted...<p>
c5a0: 5e 49 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74  ^If an INSERT st
c5b0: 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73  atement attempts
c5c0: 20 74 6f 20 69 6e 73 65 72 74 20 61 20 4e 55 4c   to insert a NUL
c5d0: 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 72  L value into a r
c5e0: 6f 77 69 64 20 6f 72 0a 69 6e 74 65 67 65 72 20  owid or.integer 
c5f0: 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75  primary key colu
c600: 6d 6e 2c 20 74 68 65 20 73 79 73 74 65 6d 20 63  mn, the system c
c610: 68 6f 6f 73 65 73 20 61 6e 20 69 6e 74 65 67 65  hooses an intege
c620: 72 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20 61  r value to use a
c630: 73 20 74 68 65 0a 72 6f 77 69 64 20 61 75 74 6f  s the.rowid auto
c640: 6d 61 74 69 63 61 6c 6c 79 2e 20 41 20 64 65 74  matically. A det
c650: 61 69 6c 65 64 20 64 65 73 63 72 69 70 74 69 6f  ailed descriptio
c660: 6e 20 6f 66 20 68 6f 77 20 74 68 69 73 20 69 73  n of how this is
c670: 20 64 6f 6e 65 20 69 73 20 70 72 6f 76 69 64 65   done is provide
c680: 64 0a 3c 61 20 68 72 65 66 3d 22 61 75 74 6f 69  d.<a href="autoi
c690: 6e 63 2e 68 74 6d 6c 22 3e 73 65 70 61 72 61 74  nc.html">separat
c6a0: 65 6c 79 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70  ely</a>.</p>..<p
c6b0: 3e 5e 28 54 68 65 20 5b 70 61 72 65 6e 74 20 6b  >^(The [parent k
c6c0: 65 79 5d 20 6f 66 20 61 20 5b 66 6f 72 65 69 67  ey] of a [foreig
c6d0: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
c6e0: 5d 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  ] is not allowed
c6f0: 20 74 6f 0a 75 73 65 20 74 68 65 20 72 6f 77 69   to.use the rowi
c700: 64 2e 20 20 54 68 65 20 70 61 72 65 6e 74 20 6b  d.  The parent k
c710: 65 79 20 6d 75 73 74 20 75 73 65 64 20 6e 61 6d  ey must used nam
c720: 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 6e 6c 79 2e  ed columns only.
c730: 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  )^</p>..<tcl>.##
c740: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c750: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c760: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c770: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c780: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
c790: 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 52 49  tion {CREATE TRI
c7a0: 47 47 45 52 7d 20 63 72 65 61 74 65 74 72 69 67  GGER} createtrig
c7b0: 67 65 72 20 7b 7b 43 52 45 41 54 45 20 54 52 49  ger {{CREATE TRI
c7c0: 47 47 45 52 7d 7d 0a 0a 52 65 63 75 72 73 69 76  GGER}}..Recursiv
c7d0: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63  eBubbleDiagram c
c7e0: 72 65 61 74 65 2d 74 72 69 67 67 65 72 2d 73 74  reate-trigger-st
c7f0: 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  mt.</tcl>..<p>^T
c800: 68 65 20 43 52 45 41 54 45 20 54 52 49 47 47 45  he CREATE TRIGGE
c810: 52 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75  R statement is u
c820: 73 65 64 20 74 6f 20 61 64 64 20 74 72 69 67 67  sed to add trigg
c830: 65 72 73 20 74 6f 20 74 68 65 20 0a 64 61 74 61  ers to the .data
c840: 62 61 73 65 20 73 63 68 65 6d 61 2e 20 5e 54 72  base schema. ^Tr
c850: 69 67 67 65 72 73 20 61 72 65 20 64 61 74 61 62  iggers are datab
c860: 61 73 65 20 6f 70 65 72 61 74 69 6f 6e 73 20 0a  ase operations .
c870: 74 68 61 74 20 61 72 65 20 61 75 74 6f 6d 61 74  that are automat
c880: 69 63 61 6c 6c 79 20 70 65 72 66 6f 72 6d 65 64  ically performed
c890: 20 77 68 65 6e 20 61 20 73 70 65 63 69 66 69 65   when a specifie
c8a0: 64 20 64 61 74 61 62 61 73 65 20 65 76 65 6e 74  d database event
c8b0: 0a 6f 63 63 75 72 73 2e 20 20 3c 2f 70 3e 0a 0a  .occurs.  </p>..
c8c0: 3c 70 3e 5e 41 20 74 72 69 67 67 65 72 20 6d 61  <p>^A trigger ma
c8d0: 79 20 62 65 20 73 70 65 63 69 66 69 65 64 20 74  y be specified t
c8e0: 6f 20 66 69 72 65 20 77 68 65 6e 65 76 65 72 20  o fire whenever 
c8f0: 61 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53  a [DELETE], [INS
c900: 45 52 54 5d 2c 0a 6f 72 20 5b 55 50 44 41 54 45  ERT],.or [UPDATE
c910: 5d 20 6f 66 20 61 0a 70 61 72 74 69 63 75 6c 61  ] of a.particula
c920: 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  r database table
c930: 20 6f 63 63 75 72 73 2c 20 6f 72 20 77 68 65 6e   occurs, or when
c940: 65 76 65 72 20 61 6e 20 5b 55 50 44 41 54 45 5d  ever an [UPDATE]
c950: 20 6f 63 63 75 72 73 20 6f 6e 0a 6f 6e 20 6f 6e   occurs on.on on
c960: 65 20 6f 72 20 6d 6f 72 65 20 73 70 65 63 69 66  e or more specif
c970: 69 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61  ied columns of a
c980: 20 74 61 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e   table.</p>..<p>
c990: 5e 41 74 20 74 68 69 73 20 74 69 6d 65 20 53 51  ^At this time SQ
c9a0: 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6f 6e  Lite supports on
c9b0: 6c 79 20 46 4f 52 20 45 41 43 48 20 52 4f 57 20  ly FOR EACH ROW 
c9c0: 74 72 69 67 67 65 72 73 2c 20 6e 6f 74 20 46 4f  triggers, not FO
c9d0: 52 20 45 41 43 48 0a 53 54 41 54 45 4d 45 4e 54  R EACH.STATEMENT
c9e0: 20 74 72 69 67 67 65 72 73 2e 20 5e 48 65 6e 63   triggers. ^Henc
c9f0: 65 20 65 78 70 6c 69 63 69 74 6c 79 20 73 70 65  e explicitly spe
ca00: 63 69 66 79 69 6e 67 20 46 4f 52 20 45 41 43 48  cifying FOR EACH
ca10: 20 52 4f 57 20 69 73 20 6f 70 74 69 6f 6e 61 6c   ROW is optional
ca20: 2e 0a 5e 46 4f 52 20 45 41 43 48 20 52 4f 57 20  ..^FOR EACH ROW 
ca30: 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68 65  implies that the
ca40: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
ca50: 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65  specified in the
ca60: 20 74 72 69 67 67 65 72 0a 6d 61 79 20 62 65 20   trigger.may be 
ca70: 65 78 65 63 75 74 65 64 20 28 64 65 70 65 6e 64  executed (depend
ca80: 69 6e 67 20 6f 6e 20 74 68 65 20 57 48 45 4e 20  ing on the WHEN 
ca90: 63 6c 61 75 73 65 29 20 66 6f 72 20 65 61 63 68  clause) for each
caa0: 20 64 61 74 61 62 61 73 65 20 72 6f 77 20 62 65   database row be
cab0: 69 6e 67 0a 69 6e 73 65 72 74 65 64 2c 20 75 70  ing.inserted, up
cac0: 64 61 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64  dated or deleted
cad0: 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e   by the statemen
cae0: 74 20 63 61 75 73 69 6e 67 20 74 68 65 20 74 72  t causing the tr
caf0: 69 67 67 65 72 20 74 6f 20 66 69 72 65 2e 3c 2f  igger to fire.</
cb00: 70 3e 0a 0a 3c 70 3e 5e 28 42 6f 74 68 20 74 68  p>..<p>^(Both th
cb10: 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 61 6e  e WHEN clause an
cb20: 64 20 74 68 65 20 74 72 69 67 67 65 72 20 61 63  d the trigger ac
cb30: 74 69 6f 6e 73 20 6d 61 79 20 61 63 63 65 73 73  tions may access
cb40: 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 0a 74 68   elements of .th
cb50: 65 20 72 6f 77 20 62 65 69 6e 67 20 69 6e 73 65  e row being inse
cb60: 72 74 65 64 2c 20 64 65 6c 65 74 65 64 20 6f 72  rted, deleted or
cb70: 20 75 70 64 61 74 65 64 20 75 73 69 6e 67 20 72   updated using r
cb80: 65 66 65 72 65 6e 63 65 73 20 6f 66 20 74 68 65  eferences of the
cb90: 20 66 6f 72 6d 20 0a 22 4e 45 57 2e 3c 69 3e 63   form ."NEW.<i>c
cba0: 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 20  olumn-name</i>" 
cbb0: 61 6e 64 20 22 4f 4c 44 2e 3c 69 3e 63 6f 6c 75  and "OLD.<i>colu
cbc0: 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 2c 20 77 68  mn-name</i>", wh
cbd0: 65 72 65 0a 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61  ere.<i>column-na
cbe0: 6d 65 3c 2f 69 3e 20 69 73 20 74 68 65 20 6e 61  me</i> is the na
cbf0: 6d 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 66  me of a column f
cc00: 72 6f 6d 20 74 68 65 20 74 61 62 6c 65 20 74 68  rom the table th
cc10: 61 74 20 74 68 65 20 74 72 69 67 67 65 72 0a 69  at the trigger.i
cc20: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
cc30: 68 2e 29 5e 20 5e 28 4f 4c 44 20 61 6e 64 20 4e  h.)^ ^(OLD and N
cc40: 45 57 20 72 65 66 65 72 65 6e 63 65 73 20 6d 61  EW references ma
cc50: 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 69  y only be used i
cc60: 6e 20 74 72 69 67 67 65 72 73 20 6f 6e 0a 65 76  n triggers on.ev
cc70: 65 6e 74 73 20 66 6f 72 20 77 68 69 63 68 20 74  ents for which t
cc80: 68 65 79 20 61 72 65 20 72 65 6c 65 76 61 6e 74  hey are relevant
cc90: 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70  , as follows:</p
cca0: 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  >..<table border
ccb0: 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31  =0 cellpadding=1
ccc0: 30 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69  0>.<tr>.<td vali
ccd0: 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
cce0: 72 69 67 68 74 22 20 77 69 64 74 68 3d 31 32 30  right" width=120
ccf0: 3e 3c 69 3e 49 4e 53 45 52 54 3c 2f 69 3e 3c 2f  ><i>INSERT</i></
cd00: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
cd10: 74 6f 70 22 3e 4e 45 57 20 72 65 66 65 72 65 6e  top">NEW referen
cd20: 63 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74  ces are valid</t
cd30: 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74  d>.</tr>.<tr>.<t
cd40: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
cd50: 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64  lign="right" wid
cd60: 74 68 3d 31 32 30 3e 3c 69 3e 55 50 44 41 54 45  th=120><i>UPDATE
cd70: 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  </i></td>.<td va
cd80: 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57 20 61  lign="top">NEW a
cd90: 6e 64 20 4f 4c 44 20 72 65 66 65 72 65 6e 63 65  nd OLD reference
cda0: 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e  s are valid</td>
cdb0: 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20  .</tr>.<tr>.<td 
cdc0: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
cdd0: 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74 68  gn="right" width
cde0: 3d 31 32 30 3e 3c 69 3e 44 45 4c 45 54 45 3c 2f  =120><i>DELETE</
cdf0: 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  i></td>.<td vali
ce00: 67 6e 3d 22 74 6f 70 22 3e 4f 4c 44 20 72 65 66  gn="top">OLD ref
ce10: 65 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c 69  erences are vali
ce20: 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74  d</td>.</tr>.</t
ce30: 61 62 6c 65 3e 0a 3c 2f 70 3e 29 5e 0a 0a 3c 70  able>.</p>)^..<p
ce40: 3e 5e 49 66 20 61 20 57 48 45 4e 20 63 6c 61 75  >^If a WHEN clau
ce50: 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20  se is supplied, 
ce60: 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
ce70: 74 73 20 73 70 65 63 69 66 69 65 64 0a 61 72 65  ts specified.are
ce80: 20 6f 6e 6c 79 20 65 78 65 63 75 74 65 64 20 66   only executed f
ce90: 6f 72 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63  or rows for whic
cea0: 68 20 74 68 65 20 57 48 45 4e 0a 63 6c 61 75 73  h the WHEN.claus
ceb0: 65 20 69 73 20 74 72 75 65 2e 20 5e 49 66 20 6e  e is true. ^If n
cec0: 6f 20 57 48 45 4e 20 63 6c 61 75 73 65 20 69 73  o WHEN clause is
ced0: 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65 20 53   supplied, the S
cee0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 0a 61 72  QL statements.ar
cef0: 65 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 61  e executed for a
cf00: 6c 6c 20 72 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 70  ll rows.</p>..<p
cf10: 3e 5e 54 68 65 20 42 45 46 4f 52 45 20 6f 72 20  >^The BEFORE or 
cf20: 41 46 54 45 52 20 6b 65 79 77 6f 72 64 20 64 65  AFTER keyword de
cf30: 74 65 72 6d 69 6e 65 73 20 77 68 65 6e 20 74 68  termines when th
cf40: 65 20 74 72 69 67 67 65 72 20 61 63 74 69 6f 6e  e trigger action
cf50: 73 0a 77 69 6c 6c 20 62 65 20 65 78 65 63 75 74  s.will be execut
cf60: 65 64 20 72 65 6c 61 74 69 76 65 20 74 6f 20 74  ed relative to t
cf70: 68 65 20 69 6e 73 65 72 74 69 6f 6e 2c 20 6d 6f  he insertion, mo
cf80: 64 69 66 69 63 61 74 69 6f 6e 20 6f 72 20 72 65  dification or re
cf90: 6d 6f 76 61 6c 20 6f 66 20 74 68 65 0a 61 73 73  moval of the.ass
cfa0: 6f 63 69 61 74 65 64 20 72 6f 77 2e 3c 2f 70 3e  ociated row.</p>
cfb0: 0a 0a 3c 70 3e 5e 41 6e 20 5b 4f 4e 20 43 4f 4e  ..<p>^An [ON CON
cfc0: 46 4c 49 43 54 5d 20 63 6c 61 75 73 65 20 6d 61  FLICT] clause ma
cfd0: 79 20 62 65 20 73 70 65 63 69 66 69 65 64 20 61  y be specified a
cfe0: 73 20 70 61 72 74 20 6f 66 20 61 6e 20 5b 55 50  s part of an [UP
cff0: 44 41 54 45 5d 20 6f 72 20 5b 49 4e 53 45 52 54  DATE] or [INSERT
d000: 5d 0a 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20  ].action within 
d010: 74 68 65 20 62 6f 64 79 20 6f 66 20 74 68 65 20  the body of the 
d020: 74 72 69 67 67 65 72 2e 0a 5e 48 6f 77 65 76 65  trigger..^Howeve
d030: 72 20 69 66 20 61 6e 20 5b 4f 4e 20 43 4f 4e 46  r if an [ON CONF
d040: 4c 49 43 54 5d 20 63 6c 61 75 73 65 20 69 73 20  LICT] clause is 
d050: 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
d060: 74 20 6f 66 20 0a 74 68 65 20 73 74 61 74 65 6d  t of .the statem
d070: 65 6e 74 20 63 61 75 73 69 6e 67 20 74 68 65 20  ent causing the 
d080: 74 72 69 67 67 65 72 20 74 6f 20 66 69 72 65 2c  trigger to fire,
d090: 20 74 68 65 6e 20 63 6f 6e 66 6c 69 63 74 20 68   then conflict h
d0a0: 61 6e 64 6c 69 6e 67 0a 70 6f 6c 69 63 79 20 6f  andling.policy o
d0b0: 66 20 74 68 65 20 6f 75 74 65 72 20 73 74 61 74  f the outer stat
d0c0: 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 69 6e  ement is used in
d0d0: 73 74 65 61 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  stead.</p>..<p>^
d0e0: 54 72 69 67 67 65 72 73 20 61 72 65 20 61 75 74  Triggers are aut
d0f0: 6f 6d 61 74 69 63 61 6c 6c 79 20 5b 44 52 4f 50  omatically [DROP
d100: 20 54 52 49 47 47 45 52 20 7c 20 64 72 6f 70 70   TRIGGER | dropp
d110: 65 64 5d 0a 77 68 65 6e 20 74 68 65 20 74 61 62  ed].when the tab
d120: 6c 65 20 74 68 61 74 20 74 68 65 79 20 61 72 65  le that they are
d130: 20 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69 74   .associated wit
d140: 68 20 28 74 68 65 20 3c 69 3e 74 61 62 6c 65 2d  h (the <i>table-
d150: 6e 61 6d 65 3c 2f 69 3e 20 74 61 62 6c 65 29 20  name</i> table) 
d160: 69 73 20 0a 5b 44 52 4f 50 20 54 41 42 4c 45 20  is .[DROP TABLE 
d170: 7c 20 64 72 6f 70 70 65 64 5d 2e 20 20 5e 48 6f  | dropped].  ^Ho
d180: 77 65 76 65 72 20 69 66 20 74 68 65 20 74 72 69  wever if the tri
d190: 67 67 65 72 20 61 63 74 69 6f 6e 73 20 72 65 66  gger actions ref
d1a0: 65 72 65 6e 63 65 0a 6f 74 68 65 72 20 74 61 62  erence.other tab
d1b0: 6c 65 73 2c 20 74 68 65 20 74 72 69 67 67 65 72  les, the trigger
d1c0: 20 69 73 20 6e 6f 74 20 64 72 6f 70 70 65 64 20   is not dropped 
d1d0: 6f 72 20 6d 6f 64 69 66 69 65 64 20 69 66 20 74  or modified if t
d1e0: 68 6f 73 65 20 6f 74 68 65 72 0a 74 61 62 6c 65  hose other.table
d1f0: 73 20 61 72 65 20 5b 44 52 4f 50 20 54 41 42 4c  s are [DROP TABL
d200: 45 20 7c 20 64 72 6f 70 70 65 64 5d 20 6f 72 20  E | dropped] or 
d210: 5b 41 4c 54 45 52 20 54 41 42 4c 45 20 7c 20 6d  [ALTER TABLE | m
d220: 6f 64 69 66 69 65 64 5d 2e 3c 2f 70 3e 0a 0a 3c  odified].</p>..<
d230: 70 3e 5e 54 72 69 67 67 65 72 73 20 61 72 65 20  p>^Triggers are 
d240: 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 74 68  removed using th
d250: 65 20 5b 44 52 4f 50 20 54 52 49 47 47 45 52 5d  e [DROP TRIGGER]
d260: 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a   statement.</p>.
d270: 0a 3c 68 33 3e 53 79 6e 74 61 78 20 52 65 73 74  .<h3>Syntax Rest
d280: 72 69 63 74 69 6f 6e 73 20 4f 6e 20 55 50 44 41  rictions On UPDA
d290: 54 45 2c 20 44 45 4c 45 54 45 2c 20 61 6e 64 20  TE, DELETE, and 
d2a0: 49 4e 53 45 52 54 20 53 74 61 74 65 6d 65 6e 74  INSERT Statement
d2b0: 73 20 57 69 74 68 69 6e 0a 20 20 20 20 54 72 69  s Within.    Tri
d2c0: 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  ggers</h3>..<p>^
d2d0: 54 68 65 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44  The [UPDATE], [D
d2e0: 45 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e 53  ELETE], and [INS
d2f0: 45 52 54 5d 0a 73 74 61 74 65 6d 65 6e 74 73 20  ERT].statements 
d300: 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20  within triggers 
d310: 64 6f 20 6e 6f 74 20 73 75 70 70 6f 72 74 0a 74  do not support.t
d320: 68 65 20 66 75 6c 6c 20 73 79 6e 74 61 78 20 66  he full syntax f
d330: 6f 72 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45  or [UPDATE], [DE
d340: 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e 53 45  LETE], and [INSE
d350: 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  RT] statements. 
d360: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 72   The following.r
d370: 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70 70 6c  estrictions appl
d380: 79 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69  y:</p>..<ul>.<li
d390: 3e 3c 70 3e 0a 20 20 5e 28 54 68 65 20 6e 61 6d  ><p>.  ^(The nam
d3a0: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
d3b0: 6f 20 62 65 20 6d 6f 64 69 66 69 65 64 20 69 6e  o be modified in
d3c0: 20 61 6e 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44   an [UPDATE], [D
d3d0: 45 4c 45 54 45 5d 2c 20 6f 72 20 5b 49 4e 53 45  ELETE], or [INSE
d3e0: 52 54 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74 20  RT].  statement 
d3f0: 6d 75 73 74 20 62 65 20 61 6e 20 75 6e 71 75 61  must be an unqua
d400: 6c 69 66 69 65 64 20 74 61 62 6c 65 20 6e 61 6d  lified table nam
d410: 65 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  e.  In other wor
d420: 64 73 2c 20 6f 6e 65 20 6d 75 73 74 0a 20 20 75  ds, one must.  u
d430: 73 65 20 6a 75 73 74 20 22 3c 69 3e 74 61 62 6c  se just "<i>tabl
d440: 65 6e 61 6d 65 3c 2f 69 3e 22 20 6e 6f 74 20 22  ename</i>" not "
d450: 3c 69 3e 64 61 74 61 62 61 73 65 3c 2f 69 3e 3c  <i>database</i><
d460: 62 3e 2e 3c 2f 62 3e 3c 69 3e 74 61 62 6c 65 6e  b>.</b><i>tablen
d470: 61 6d 65 3c 2f 69 3e 22 0a 20 20 77 68 65 6e 20  ame</i>".  when 
d480: 73 70 65 63 69 66 79 69 6e 67 20 74 68 65 20 74  specifying the t
d490: 61 62 6c 65 2e 29 5e 20 20 5e 54 68 65 20 74 61  able.)^  ^The ta
d4a0: 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64 69 66 69  ble to be modifi
d4b0: 65 64 20 6d 75 73 74 20 65 78 69 73 74 20 69 6e  ed must exist in
d4c0: 20 74 68 65 0a 20 20 73 61 6d 65 20 64 61 74 61   the.  same data
d4d0: 62 61 73 65 20 61 73 20 74 68 65 20 74 61 62 6c  base as the tabl
d4e0: 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69  e or view to whi
d4f0: 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69  ch the trigger i
d500: 73 20 61 74 74 61 63 68 65 64 2e 0a 20 20 3c 2f  s attached..  </
d510: 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
d520: 0a 20 20 5e 54 68 65 20 22 49 4e 53 45 52 54 20  .  ^The "INSERT 
d530: 49 4e 54 4f 20 3c 69 3e 74 61 62 6c 65 3c 2f 69  INTO <i>table</i
d540: 3e 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53  > DEFAULT VALUES
d550: 22 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 5b 49  " form of the [I
d560: 4e 53 45 52 54 5d 20 73 74 61 74 65 6d 65 6e 74  NSERT] statement
d570: 0a 20 20 69 73 20 6e 6f 74 20 73 75 70 70 6f 72  .  is not suppor
d580: 74 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e  ted..  </p></li>
d590: 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68 65  ..<li><p>.  ^The
d5a0: 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64 20   INDEXED BY and 
d5b0: 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75  NOT INDEXED clau
d5c0: 73 65 73 20 61 72 65 20 6e 6f 74 20 73 75 70 70  ses are not supp
d5d0: 6f 72 74 65 64 20 66 6f 72 20 5b 55 50 44 41 54  orted for [UPDAT
d5e0: 45 5d 20 61 6e 64 0a 20 20 5b 44 45 4c 45 54 45  E] and.  [DELETE
d5f0: 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20  ] statements..  
d600: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c  </p></li>..<li><
d610: 70 3e 0a 20 20 5e 28 54 68 65 20 4f 52 44 45 52  p>.  ^(The ORDER
d620: 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c   BY and LIMIT cl
d630: 61 75 73 65 73 20 6f 6e 20 5b 55 50 44 41 54 45  auses on [UPDATE
d640: 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20 73  ] and [DELETE] s
d650: 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 6e 6f  tatements are no
d660: 74 0a 20 20 73 75 70 70 6f 72 74 65 64 2e 20 20  t.  supported.  
d670: 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d  ORDER BY and LIM
d680: 49 54 20 61 72 65 20 6e 6f 74 20 6e 6f 72 6d 61  IT are not norma
d690: 6c 6c 79 20 73 75 70 70 6f 72 74 65 64 20 66 6f  lly supported fo
d6a0: 72 20 5b 55 50 44 41 54 45 5d 20 6f 72 0a 20 20  r [UPDATE] or.  
d6b0: 5b 44 45 4c 45 54 45 5d 20 69 6e 20 61 6e 79 20  [DELETE] in any 
d6c0: 63 6f 6e 74 65 78 74 20 62 75 74 20 63 61 6e 20  context but can 
d6d0: 62 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74  be enabled for t
d6e0: 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d 65  op-level stateme
d6f0: 6e 74 73 0a 20 20 75 73 69 6e 67 20 74 68 65 20  nts.  using the 
d700: 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55  [SQLITE_ENABLE_U
d710: 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d  PDATE_DELETE_LIM
d720: 49 54 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  IT] compile-time
d730: 20 6f 70 74 69 6f 6e 2e 20 20 48 6f 77 65 76 65   option.  Howeve
d740: 72 2c 0a 20 20 74 68 61 74 20 63 6f 6d 70 69 6c  r,.  that compil
d750: 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 6f 6e  e-time option on
d760: 6c 79 20 61 70 70 6c 69 65 73 20 74 6f 20 74 6f  ly applies to to
d770: 70 2d 6c 65 76 65 6c 20 5b 55 50 44 41 54 45 5d  p-level [UPDATE]
d780: 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 0a 20 20   and [DELETE].  
d790: 73 74 61 74 65 6d 65 6e 74 73 2c 20 6e 6f 74 20  statements, not 
d7a0: 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44 45  [UPDATE] and [DE
d7b0: 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73  LETE] statements
d7c0: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
d7d0: 2e 29 5e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a  .)^.  </p></li>.
d7e0: 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 5b 63 6f 6d  .<li><p>.  ^[com
d7f0: 6d 6f 6e 2d 74 61 62 6c 65 2d 65 78 70 72 65 73  mon-table-expres
d800: 73 69 6f 6e 7c 43 6f 6d 6d 6f 6e 20 74 61 62 6c  sion|Common tabl
d810: 65 20 65 78 70 72 65 73 73 69 6f 6e 5d 20 61 72  e expression] ar
d820: 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20  e not supported 
d830: 66 6f 72 0a 20 20 73 74 61 74 65 6d 65 6e 74 73  for.  statements
d840: 20 69 6e 73 69 64 65 20 6f 66 20 74 72 69 67 67   inside of trigg
d850: 65 72 73 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e  ers..  </p></li>
d860: 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  .</ul>..<tcl>hd_
d870: 66 72 61 67 6d 65 6e 74 20 69 6e 73 74 65 61 64  fragment instead
d880: 5f 6f 66 5f 74 72 69 67 67 65 72 20 7b 49 4e 53  _of_trigger {INS
d890: 54 45 41 44 20 4f 46 7d 20 7b 49 4e 53 54 45 41  TEAD OF} {INSTEA
d8a0: 44 20 4f 46 20 74 72 69 67 67 65 72 7d 3c 2f 74  D OF trigger}</t
d8b0: 63 6c 3e 0a 3c 68 33 3e 49 4e 53 54 45 41 44 20  cl>.<h3>INSTEAD 
d8c0: 4f 46 20 74 72 69 67 67 65 72 73 3c 2f 68 33 3e  OF triggers</h3>
d8d0: 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 6d  ..<p>^Triggers m
d8e0: 61 79 20 62 65 20 63 72 65 61 74 65 64 20 6f 6e  ay be created on
d8f0: 20 5b 76 69 65 77 73 5d 2c 20 61 73 20 77 65 6c   [views], as wel
d900: 6c 20 61 73 20 6f 72 64 69 6e 61 72 79 20 74 61  l as ordinary ta
d910: 62 6c 65 73 2c 20 62 79 0a 73 70 65 63 69 66 79  bles, by.specify
d920: 69 6e 67 20 49 4e 53 54 45 41 44 20 4f 46 20 69  ing INSTEAD OF i
d930: 6e 20 74 68 65 20 43 52 45 41 54 45 20 54 52 49  n the CREATE TRI
d940: 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74 2e 20  GGER statement. 
d950: 0a 5e 49 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  .^If one or more
d960: 20 4f 4e 20 49 4e 53 45 52 54 2c 20 4f 4e 20 44   ON INSERT, ON D
d970: 45 4c 45 54 45 0a 6f 72 20 4f 4e 20 55 50 44 41  ELETE.or ON UPDA
d980: 54 45 20 74 72 69 67 67 65 72 73 20 61 72 65 20  TE triggers are 
d990: 64 65 66 69 6e 65 64 20 6f 6e 20 61 20 76 69 65  defined on a vie
d9a0: 77 2c 20 74 68 65 6e 20 69 74 20 69 73 20 6e 6f  w, then it is no
d9b0: 74 20 61 6e 0a 65 72 72 6f 72 20 74 6f 20 65 78  t an.error to ex
d9c0: 65 63 75 74 65 20 61 6e 20 49 4e 53 45 52 54 2c  ecute an INSERT,
d9d0: 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54   DELETE or UPDAT
d9e0: 45 20 73 74 61 74 65 6d 65 6e 74 20 6f 6e 20 74  E statement on t
d9f0: 68 65 20 76 69 65 77 2c 20 0a 72 65 73 70 65 63  he view, .respec
da00: 74 69 76 65 6c 79 2e 20 20 5e 49 6e 73 74 65 61  tively.  ^Instea
da10: 64 2c 0a 65 78 65 63 75 74 69 6e 67 20 61 6e 20  d,.executing an 
da20: 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f  INSERT, DELETE o
da30: 72 20 55 50 44 41 54 45 20 6f 6e 20 74 68 65 20  r UPDATE on the 
da40: 76 69 65 77 20 63 61 75 73 65 73 20 74 68 65 20  view causes the 
da50: 61 73 73 6f 63 69 61 74 65 64 0a 74 72 69 67 67  associated.trigg
da60: 65 72 73 20 74 6f 20 66 69 72 65 2e 20 5e 54 68  ers to fire. ^Th
da70: 65 20 72 65 61 6c 20 74 61 62 6c 65 73 20 75 6e  e real tables un
da80: 64 65 72 6c 79 69 6e 67 20 74 68 65 20 76 69 65  derlying the vie
da90: 77 20 61 72 65 20 6e 6f 74 20 6d 6f 64 69 66 69  w are not modifi
daa0: 65 64 0a 28 65 78 63 65 70 74 20 70 6f 73 73 69  ed.(except possi
dab0: 62 6c 79 20 65 78 70 6c 69 63 69 74 6c 79 2c 20  bly explicitly, 
dac0: 62 79 20 61 20 74 72 69 67 67 65 72 20 70 72 6f  by a trigger pro
dad0: 67 72 61 6d 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  gram).</p>..<p>^
dae0: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 5b 73  Note that the [s
daf0: 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
db00: 5d 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 74  ] and [sqlite3_t
db10: 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20  otal_changes()] 
db20: 69 6e 74 65 72 66 61 63 65 73 0a 64 6f 20 6e 6f  interfaces.do no
db30: 74 20 63 6f 75 6e 74 20 49 4e 53 54 45 41 44 20  t count INSTEAD 
db40: 4f 46 20 74 72 69 67 67 65 72 20 66 69 72 69 6e  OF trigger firin
db50: 67 73 2c 20 62 75 74 20 74 68 65 0a 5b 63 6f 75  gs, but the.[cou
db60: 6e 74 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d  nt_changes pragm
db70: 61 5d 20 64 6f 65 73 20 63 6f 75 6e 74 20 49 4e  a] does count IN
db80: 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72  STEAD OF trigger
db90: 20 66 69 72 69 6e 67 2e 3c 2f 70 3e 0a 0a 3c 68   firing.</p>..<h
dba0: 33 3e 53 6f 6d 65 20 45 78 61 6d 70 6c 65 20 54  3>Some Example T
dbb0: 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70  riggers</h3>..<p
dbc0: 3e 5e 28 41 73 73 75 6d 69 6e 67 20 74 68 61 74  >^(Assuming that
dbd0: 20 63 75 73 74 6f 6d 65 72 20 72 65 63 6f 72 64   customer record
dbe0: 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
dbf0: 74 68 65 20 22 63 75 73 74 6f 6d 65 72 73 22 20  the "customers" 
dc00: 74 61 62 6c 65 2c 20 61 6e 64 0a 74 68 61 74 20  table, and.that 
dc10: 6f 72 64 65 72 20 72 65 63 6f 72 64 73 20 61 72  order records ar
dc20: 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
dc30: 22 6f 72 64 65 72 73 22 20 74 61 62 6c 65 2c 20  "orders" table, 
dc40: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 55 50  the following.UP
dc50: 44 41 54 45 20 74 72 69 67 67 65 72 0a 65 6e 73  DATE trigger.ens
dc60: 75 72 65 73 20 74 68 61 74 20 61 6c 6c 20 61 73  ures that all as
dc70: 73 6f 63 69 61 74 65 64 20 6f 72 64 65 72 73 20  sociated orders 
dc80: 61 72 65 20 72 65 64 69 72 65 63 74 65 64 20 77  are redirected w
dc90: 68 65 6e 20 61 20 63 75 73 74 6f 6d 65 72 20 63  hen a customer c
dca0: 68 61 6e 67 65 73 0a 68 69 73 20 6f 72 20 68 65  hanges.his or he
dcb0: 72 20 61 64 64 72 65 73 73 3a 3c 2f 70 3e 0a 0a  r address:</p>..
dcc0: 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 43  <tcl>Example {.C
dcd0: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 75 70  REATE TRIGGER up
dce0: 64 61 74 65 5f 63 75 73 74 6f 6d 65 72 5f 61 64  date_customer_ad
dcf0: 64 72 65 73 73 20 55 50 44 41 54 45 20 4f 46 20  dress UPDATE OF 
dd00: 61 64 64 72 65 73 73 20 4f 4e 20 63 75 73 74 6f  address ON custo
dd10: 6d 65 72 73 20 0a 20 20 42 45 47 49 4e 0a 20 20  mers .  BEGIN.  
dd20: 20 20 55 50 44 41 54 45 20 6f 72 64 65 72 73 20    UPDATE orders 
dd30: 53 45 54 20 61 64 64 72 65 73 73 20 3d 20 6e 65  SET address = ne
dd40: 77 2e 61 64 64 72 65 73 73 20 57 48 45 52 45 20  w.address WHERE 
dd50: 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20  customer_name = 
dd60: 6f 6c 64 2e 6e 61 6d 65 3b 0a 20 20 45 4e 44 3b  old.name;.  END;
dd70: 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 69 74  .}</tcl>..<p>Wit
dd80: 68 20 74 68 69 73 20 74 72 69 67 67 65 72 20 69  h this trigger i
dd90: 6e 73 74 61 6c 6c 65 64 2c 20 65 78 65 63 75 74  nstalled, execut
dda0: 69 6e 67 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ing the statemen
ddb0: 74 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61  t:</p>..<tcl>Exa
ddc0: 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 63 75  mple {.UPDATE cu
ddd0: 73 74 6f 6d 65 72 73 20 53 45 54 20 61 64 64 72  stomers SET addr
dde0: 65 73 73 20 3d 20 27 31 20 4d 61 69 6e 20 53 74  ess = '1 Main St
ddf0: 2e 27 20 57 48 45 52 45 20 6e 61 6d 65 20 3d 20  .' WHERE name = 
de00: 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c  'Jack Jones';.}<
de10: 2f 74 63 6c 3e 0a 0a 3c 70 3e 63 61 75 73 65 73  /tcl>..<p>causes
de20: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   the following t
de30: 6f 20 62 65 20 61 75 74 6f 6d 61 74 69 63 61 6c  o be automatical
de40: 6c 79 20 65 78 65 63 75 74 65 64 3a 3c 2f 70 3e  ly executed:</p>
de50: 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b  ..<tcl>Example {
de60: 0a 55 50 44 41 54 45 20 6f 72 64 65 72 73 20 53  .UPDATE orders S
de70: 45 54 20 61 64 64 72 65 73 73 20 3d 20 27 31 20  ET address = '1 
de80: 4d 61 69 6e 20 53 74 2e 27 20 57 48 45 52 45 20  Main St.' WHERE 
de90: 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20  customer_name = 
dea0: 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c  'Jack Jones';.}<
deb0: 2f 74 63 6c 3e 29 5e 0a 0a 3c 70 3e 46 6f 72 20  /tcl>)^..<p>For 
dec0: 61 6e 20 65 78 61 6d 70 6c 65 20 6f 66 20 61 6e  an example of an
ded0: 20 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67   INSTEAD OF trig
dee0: 67 65 72 2c 20 63 6f 6e 73 69 64 65 72 20 74 68  ger, consider th
def0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 63 68 65  e following sche
df00: 6d 61 3a 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c  ma:..<tcl>Exampl
df10: 65 20 7b 0a 43 52 45 41 54 45 20 54 41 42 4c 45  e {.CREATE TABLE
df20: 20 63 75 73 74 6f 6d 65 72 28 0a 20 20 63 75 73   customer(.  cus
df30: 74 5f 69 64 20 49 4e 54 45 47 45 52 20 50 52 49  t_id INTEGER PRI
df40: 4d 41 52 59 20 4b 45 59 2c 0a 20 20 63 75 73 74  MARY KEY,.  cust
df50: 5f 6e 61 6d 65 20 54 45 58 54 2c 0a 20 20 63 75  _name TEXT,.  cu
df60: 73 74 5f 61 64 64 72 20 54 45 58 54 0a 29 3b 0a  st_addr TEXT.);.
df70: 43 52 45 41 54 45 20 56 49 45 57 20 63 75 73 74  CREATE VIEW cust
df80: 6f 6d 65 72 5f 61 64 64 72 65 73 73 20 41 53 0a  omer_address AS.
df90: 20 20 20 53 45 4c 45 43 54 20 63 75 73 74 5f 69     SELECT cust_i
dfa0: 64 2c 20 63 75 73 74 5f 61 64 64 72 20 46 52 4f  d, cust_addr FRO
dfb0: 4d 20 63 75 73 74 6f 6d 65 72 3b 0a 43 52 45 41  M customer;.CREA
dfc0: 54 45 20 54 52 49 47 47 45 52 20 63 75 73 74 5f  TE TRIGGER cust_
dfd0: 61 64 64 72 5f 63 68 6e 67 0a 49 4e 53 54 45 41  addr_chng.INSTEA
dfe0: 44 20 4f 46 20 55 50 44 41 54 45 20 4f 46 20 63  D OF UPDATE OF c
dff0: 75 73 74 5f 61 64 64 72 20 4f 4e 20 63 75 73 74  ust_addr ON cust
e000: 6f 6d 65 72 5f 61 64 64 72 65 73 73 0a 42 45 47  omer_address.BEG
e010: 49 4e 0a 20 20 55 50 44 41 54 45 20 63 75 73 74  IN.  UPDATE cust
e020: 6f 6d 65 72 20 53 45 54 20 63 75 73 74 5f 61 64  omer SET cust_ad
e030: 64 72 3d 4e 45 57 2e 63 75 73 74 5f 61 64 64 72  dr=NEW.cust_addr
e040: 0a 20 20 20 57 48 45 52 45 20 63 75 73 74 5f 69  .   WHERE cust_i
e050: 64 3d 4e 45 57 2e 63 75 73 74 5f 69 64 3b 0a 45  d=NEW.cust_id;.E
e060: 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ND;.}</tcl>..<p>
e070: 57 69 74 68 20 74 68 65 20 73 63 68 65 6d 61 20  With the schema 
e080: 61 62 6f 76 65 2c 20 61 20 73 74 61 74 65 6d 65  above, a stateme
e090: 6e 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 3a 3c  nt of the form:<
e0a0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c  /p>..<tcl>Exampl
e0b0: 65 20 7b 0a 55 50 44 41 54 45 20 63 75 73 74 6f  e {.UPDATE custo
e0c0: 6d 65 72 5f 61 64 64 72 65 73 73 20 53 45 54 20  mer_address SET 
e0d0: 63 75 73 74 5f 61 64 64 72 3d 24 6e 65 77 5f 61  cust_addr=$new_a
e0e0: 64 64 72 65 73 73 20 57 48 45 52 45 20 63 75 73  ddress WHERE cus
e0f0: 74 5f 69 64 3d 24 63 75 73 74 5f 69 64 3b 0a 7d  t_id=$cust_id;.}
e100: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 61 75 73 65  </tcl>..<p>Cause
e110: 73 20 74 68 65 20 63 75 73 74 6f 6d 65 72 2e 63  s the customer.c
e120: 75 73 74 5f 61 64 64 72 20 66 69 65 6c 64 20 74  ust_addr field t
e130: 6f 20 62 65 20 75 70 64 61 74 65 64 20 66 6f 72  o be updated for
e140: 20 61 20 73 70 65 63 69 66 69 63 0a 63 75 73 74   a specific.cust
e150: 6f 6d 65 72 20 65 6e 74 72 79 20 74 68 61 74 20  omer entry that 
e160: 68 61 73 20 63 75 73 74 6f 6d 65 72 2e 63 75 73  has customer.cus
e170: 74 5f 69 64 20 65 71 75 61 6c 20 74 6f 20 74 68  t_id equal to th
e180: 65 20 24 63 75 73 74 5f 69 64 20 70 61 72 61 6d  e $cust_id param
e190: 65 74 65 72 2e 0a 4e 6f 74 65 20 68 6f 77 20 74  eter..Note how t
e1a0: 68 65 20 76 61 6c 75 65 73 20 61 73 73 69 67 6e  he values assign
e1b0: 65 64 20 74 6f 20 74 68 65 20 76 69 65 77 20 61  ed to the view a
e1c0: 72 65 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c  re made availabl
e1d0: 65 20 61 73 20 66 69 65 6c 64 0a 69 6e 20 74 68  e as field.in th
e1e0: 65 20 73 70 65 63 69 61 6c 20 22 4e 45 57 22 20  e special "NEW" 
e1f0: 74 61 62 6c 65 20 77 69 74 68 69 6e 20 74 68 65  table within the
e200: 20 74 72 69 67 67 65 72 20 62 6f 64 79 2e 3c 2f   trigger body.</
e210: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
e220: 6d 65 6e 74 20 75 6e 64 65 66 5f 62 65 66 6f 72  ment undef_befor
e230: 65 20 7b 75 6e 64 65 66 69 6e 65 64 20 42 45 46  e {undefined BEF
e240: 4f 52 45 20 74 72 69 67 67 65 72 20 62 65 68 61  ORE trigger beha
e250: 76 69 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  vior}</tcl>.<h3>
e260: 43 61 75 74 69 6f 6e 73 20 4f 6e 20 54 68 65 20  Cautions On The 
e270: 55 73 65 20 4f 66 20 42 45 46 4f 52 45 20 74 72  Use Of BEFORE tr
e280: 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  iggers</h3>..<p>
e290: 49 66 20 61 20 42 45 46 4f 52 45 20 55 50 44 41  If a BEFORE UPDA
e2a0: 54 45 20 6f 72 20 42 45 46 4f 52 45 20 44 45 4c  TE or BEFORE DEL
e2b0: 45 54 45 20 74 72 69 67 67 65 72 20 6d 6f 64 69  ETE trigger modi
e2c0: 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20  fies or deletes 
e2d0: 61 20 72 6f 77 0a 74 68 61 74 20 77 61 73 20 74  a row.that was t
e2e0: 6f 20 68 61 76 65 20 62 65 65 6e 20 75 70 64 61  o have been upda
e2f0: 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64 2c 20  ted or deleted, 
e300: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
e310: 6f 66 20 74 68 65 20 73 75 62 73 65 71 75 65 6e  of the subsequen
e320: 74 0a 75 70 64 61 74 65 20 6f 72 20 64 65 6c 65  t.update or dele
e330: 74 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  te operation is 
e340: 75 6e 64 65 66 69 6e 65 64 2e 20 20 46 75 72 74  undefined.  Furt
e350: 68 65 72 6d 6f 72 65 2c 20 69 66 20 61 20 42 45  hermore, if a BE
e360: 46 4f 52 45 20 74 72 69 67 67 65 72 0a 6d 6f 64  FORE trigger.mod
e370: 69 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73  ifies or deletes
e380: 20 61 20 72 6f 77 2c 20 74 68 65 6e 20 69 74 20   a row, then it 
e390: 69 73 20 75 6e 64 65 66 69 6e 65 64 20 77 68 65  is undefined whe
e3a0: 74 68 65 72 20 6f 72 20 6e 6f 74 20 41 46 54 45  ther or not AFTE
e3b0: 52 20 74 72 69 67 67 65 72 73 0a 74 68 61 74 20  R triggers.that 
e3c0: 77 6f 75 6c 64 20 68 61 76 65 20 6f 74 68 65 72  would have other
e3d0: 77 69 73 65 20 72 75 6e 20 6f 6e 20 74 68 6f 73  wise run on thos
e3e0: 65 20 72 6f 77 73 20 77 69 6c 6c 20 69 6e 20 66  e rows will in f
e3f0: 61 63 74 20 72 75 6e 2e 0a 3c 2f 70 3e 0a 0a 3c  act run..</p>..<
e400: 70 3e 54 68 65 20 76 61 6c 75 65 20 6f 66 20 4e  p>The value of N
e410: 45 57 2e 72 6f 77 69 64 20 69 73 20 75 6e 64 65  EW.rowid is unde
e420: 66 69 6e 65 64 20 69 6e 20 61 20 42 45 46 4f 52  fined in a BEFOR
e430: 45 20 49 4e 53 45 52 54 20 74 72 69 67 67 65 72  E INSERT trigger
e440: 20 69 6e 20 77 68 69 63 68 0a 74 68 65 20 72 6f   in which.the ro
e450: 77 69 64 20 69 73 20 6e 6f 74 20 65 78 70 6c 69  wid is not expli
e460: 63 69 74 6c 79 20 73 65 74 20 74 6f 20 61 6e 20  citly set to an 
e470: 69 6e 74 65 67 65 72 2e 3c 2f 70 3e 0a 0a 3c 70  integer.</p>..<p
e480: 3e 42 65 63 61 75 73 65 20 6f 66 20 74 68 65 20  >Because of the 
e490: 62 65 68 61 76 69 6f 72 73 20 64 65 73 63 72 69  behaviors descri
e4a0: 62 65 64 20 61 62 6f 76 65 2c 20 70 72 6f 67 72  bed above, progr
e4b0: 61 6d 6d 65 72 73 20 61 72 65 20 65 6e 63 6f 75  ammers are encou
e4c0: 72 61 67 65 64 20 74 6f 0a 70 72 65 66 65 72 20  raged to.prefer 
e4d0: 41 46 54 45 52 20 74 72 69 67 67 65 72 73 20 6f  AFTER triggers o
e4e0: 76 65 72 20 42 45 46 4f 52 45 20 74 72 69 67 67  ver BEFORE trigg
e4f0: 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ers.</p>..<tcl>h
e500: 64 5f 66 72 61 67 6d 65 6e 74 20 72 61 69 73 65  d_fragment raise
e510: 20 7b 52 41 49 53 45 20 66 75 6e 63 74 69 6f 6e   {RAISE function
e520: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  }</tcl>.<h3>The 
e530: 52 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e  RAISE() function
e540: 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 73 70  </h3>..<p>^(A sp
e550: 65 63 69 61 6c 20 53 51 4c 20 66 75 6e 63 74 69  ecial SQL functi
e560: 6f 6e 20 52 41 49 53 45 28 29 20 6d 61 79 20 62  on RAISE() may b
e570: 65 20 75 73 65 64 20 77 69 74 68 69 6e 20 61 20  e used within a 
e580: 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2c  trigger-program,
e590: 29 5e 0a 77 69 74 68 20 74 68 65 20 66 6f 6c 6c  )^.with the foll
e5a0: 6f 77 69 6e 67 20 73 79 6e 74 61 78 3c 2f 70 3e  owing syntax</p>
e5b0: 20 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69   ..<tcl>BubbleDi
e5c0: 61 67 72 61 6d 20 72 61 69 73 65 2d 66 75 6e 63  agram raise-func
e5d0: 74 69 6f 6e 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tion</tcl>..<p>^
e5e0: 28 57 68 65 6e 20 6f 6e 65 20 6f 66 20 52 41 49  (When one of RAI
e5f0: 53 45 28 52 4f 4c 4c 42 41 43 4b 2c 2e 2e 2e 29  SE(ROLLBACK,...)
e600: 2c 20 52 41 49 53 45 28 41 42 4f 52 54 2c 2e 2e  , RAISE(ABORT,..
e610: 2e 29 20 6f 72 20 52 41 49 53 45 28 46 41 49 4c  .) or RAISE(FAIL
e620: 2c 2e 2e 2e 29 0a 69 73 20 63 61 6c 6c 65 64 20  ,...).is called 
e630: 64 75 72 69 6e 67 20 74 72 69 67 67 65 72 2d 70  during trigger-p
e640: 72 6f 67 72 61 6d 0a 65 78 65 63 75 74 69 6f 6e  rogram.execution
e650: 2c 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  , the specified 
e660: 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 70 72  [ON CONFLICT] pr
e670: 6f 63 65 73 73 69 6e 67 20 69 73 20 70 65 72 66  ocessing is perf
e680: 6f 72 6d 65 64 0a 74 68 65 20 63 75 72 72 65 6e  ormed.the curren
e690: 74 20 71 75 65 72 79 20 74 65 72 6d 69 6e 61 74  t query terminat
e6a0: 65 73 2e 29 5e 0a 41 6e 20 65 72 72 6f 72 20 63  es.)^.An error c
e6b0: 6f 64 65 20 6f 66 20 5b 53 51 4c 49 54 45 5f 43  ode of [SQLITE_C
e6c0: 4f 4e 53 54 52 41 49 4e 54 5d 20 69 73 20 72 65  ONSTRAINT] is re
e6d0: 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 61 70  turned to the ap
e6e0: 70 6c 69 63 61 74 69 6f 6e 2c 0a 61 6c 6f 6e 67  plication,.along
e6f0: 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66   with the specif
e700: 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73 61 67  ied error messag
e710: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e  e.</p>..<p>^When
e720: 20 52 41 49 53 45 28 49 47 4e 4f 52 45 29 20 69   RAISE(IGNORE) i
e730: 73 20 63 61 6c 6c 65 64 2c 20 74 68 65 20 72 65  s called, the re
e740: 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 65 20 63  mainder of the c
e750: 75 72 72 65 6e 74 20 74 72 69 67 67 65 72 20 70  urrent trigger p
e760: 72 6f 67 72 61 6d 2c 0a 74 68 65 20 73 74 61 74  rogram,.the stat
e770: 65 6d 65 6e 74 20 74 68 61 74 20 63 61 75 73 65  ement that cause
e780: 64 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  d the trigger pr
e790: 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65  ogram to execute
e7a0: 20 61 6e 64 20 61 6e 79 20 73 75 62 73 65 71 75   and any subsequ
e7b0: 65 6e 74 0a 74 72 69 67 67 65 72 20 70 72 6f 67  ent.trigger prog
e7c0: 72 61 6d 73 20 74 68 61 74 20 77 6f 75 6c 64 20  rams that would 
e7d0: 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75 74  have been execut
e7e0: 65 64 20 61 72 65 20 61 62 61 6e 64 6f 6e 65 64  ed are abandoned
e7f0: 2e 20 5e 4e 6f 20 64 61 74 61 62 61 73 65 0a 63  . ^No database.c
e800: 68 61 6e 67 65 73 20 61 72 65 20 72 6f 6c 6c 65  hanges are rolle
e810: 64 20 62 61 63 6b 2e 20 20 5e 49 66 20 74 68 65  d back.  ^If the
e820: 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20   statement that 
e830: 63 61 75 73 65 64 20 74 68 65 20 74 72 69 67 67  caused the trigg
e840: 65 72 20 70 72 6f 67 72 61 6d 0a 74 6f 20 65 78  er program.to ex
e850: 65 63 75 74 65 20 69 73 20 69 74 73 65 6c 66 20  ecute is itself 
e860: 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65  part of a trigge
e870: 72 20 70 72 6f 67 72 61 6d 2c 20 74 68 65 6e 20  r program, then 
e880: 74 68 61 74 20 74 72 69 67 67 65 72 20 70 72 6f  that trigger pro
e890: 67 72 61 6d 0a 72 65 73 75 6d 65 73 20 65 78 65  gram.resumes exe
e8a0: 63 75 74 69 6f 6e 20 61 74 20 74 68 65 20 62 65  cution at the be
e8b0: 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 6e  ginning of the n
e8c0: 65 78 74 20 73 74 65 70 2e 0a 3c 2f 70 3e 0a 0a  ext step..</p>..
e8d0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
e8e0: 20 74 65 6d 70 74 72 69 67 20 7b 54 45 4d 50 20   temptrig {TEMP 
e8f0: 74 72 69 67 67 65 72 73 20 6f 6e 20 6e 6f 6e 2d  triggers on non-
e900: 54 45 4d 50 20 74 61 62 6c 65 73 7d 3c 2f 74 63  TEMP tables}</tc
e910: 6c 3e 0a 3c 68 33 3e 54 45 4d 50 20 54 72 69 67  l>.<h3>TEMP Trig
e920: 67 65 72 73 20 6f 6e 20 4e 6f 6e 2d 54 45 4d 50  gers on Non-TEMP
e930: 20 54 61 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70   Tables</h3>..<p
e940: 3e 5e 28 41 20 74 72 69 67 67 65 72 20 6e 6f 72  >^(A trigger nor
e950: 6d 61 6c 6c 79 20 65 78 69 73 74 73 20 69 6e 20  mally exists in 
e960: 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
e970: 65 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 6e  e as the table n
e980: 61 6d 65 64 0a 61 66 74 65 72 20 74 68 65 20 22  amed.after the "
e990: 4f 4e 22 20 6b 65 79 77 6f 72 64 20 69 6e 20 74  ON" keyword in t
e9a0: 68 65 20 43 52 45 41 54 45 20 54 52 49 47 47 45  he CREATE TRIGGE
e9b0: 52 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 45 78  R statement.  Ex
e9c0: 63 65 70 74 2c 20 69 74 20 69 73 0a 70 6f 73 73  cept, it is.poss
e9d0: 69 62 6c 65 20 74 6f 20 63 72 65 61 74 65 20 61  ible to create a
e9e0: 20 54 45 4d 50 20 54 52 49 47 47 45 52 20 6f 6e   TEMP TRIGGER on
e9f0: 20 61 20 74 61 62 6c 65 20 69 6e 20 61 6e 6f 74   a table in anot
ea00: 68 65 72 20 64 61 74 61 62 61 73 65 2e 29 5e 20  her database.)^ 
ea10: 20 0a 53 75 63 68 20 61 20 74 72 69 67 67 65 72   .Such a trigger
ea20: 20 77 69 6c 6c 20 6f 6e 6c 79 20 66 69 72 65 20   will only fire 
ea30: 77 68 65 6e 20 63 68 61 6e 67 65 73 0a 61 72 65  when changes.are
ea40: 20 6d 61 64 65 20 74 6f 20 74 68 65 20 74 61 72   made to the tar
ea50: 67 65 74 20 74 61 62 6c 65 20 62 79 20 74 68 65  get table by the
ea60: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 74 68 61   application tha
ea70: 74 20 64 65 66 69 6e 65 64 20 74 68 65 20 74 72  t defined the tr
ea80: 69 67 67 65 72 2e 0a 4f 74 68 65 72 20 61 70 70  igger..Other app
ea90: 6c 69 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d  lications that m
eaa0: 6f 64 69 66 79 20 74 68 65 20 64 61 74 61 62 61  odify the databa
eab0: 73 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 61  se will not be a
eac0: 62 6c 65 20 74 6f 20 73 65 65 20 74 68 65 0a 54  ble to see the.T
ead0: 45 4d 50 20 74 72 69 67 67 65 72 20 61 6e 64 20  EMP trigger and 
eae0: 68 65 6e 63 65 20 63 61 6e 6e 6f 74 20 72 75 6e  hence cannot run
eaf0: 20 74 68 65 20 74 72 69 67 67 65 72 2e 3c 2f 70   the trigger.</p
eb00: 3e 0a 0a 3c 70 3e 57 68 65 6e 20 64 65 66 69 6e  >..<p>When defin
eb10: 69 6e 67 20 61 20 54 45 4d 50 20 74 72 69 67 67  ing a TEMP trigg
eb20: 65 72 20 6f 6e 20 61 20 6e 6f 6e 2d 54 45 4d 50  er on a non-TEMP
eb30: 20 74 61 62 6c 65 2c 20 69 74 20 69 73 20 69 6d   table, it is im
eb40: 70 6f 72 74 61 6e 74 20 74 6f 0a 73 70 65 63 69  portant to.speci
eb50: 66 79 20 74 68 65 20 64 61 74 61 62 61 73 65 20  fy the database 
eb60: 68 6f 6c 64 69 6e 67 20 74 68 65 20 6e 6f 6e 2d  holding the non-
eb70: 54 45 4d 50 20 74 61 62 6c 65 2e 20 20 46 6f 72  TEMP table.  For
eb80: 20 65 78 61 6d 70 6c 65 2c 0a 69 6e 20 74 68 65   example,.in the
eb90: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65   following state
eba0: 6d 65 6e 74 2c 20 69 74 20 69 73 20 69 6d 70 6f  ment, it is impo
ebb0: 72 74 61 6e 74 20 74 6f 20 73 61 79 20 22 6d 61  rtant to say "ma
ebc0: 69 6e 2e 74 61 62 31 22 20 69 6e 73 74 65 61 64  in.tab1" instead
ebd0: 0a 6f 66 20 6a 75 73 74 20 22 74 61 62 31 22 3a  .of just "tab1":
ebe0: 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
ebf0: 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54  e><pre>.CREATE T
ec00: 45 4d 50 20 54 52 49 47 47 45 52 20 65 78 31 20  EMP TRIGGER ex1 
ec10: 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20  AFTER INSERT ON 
ec20: 3c 62 3e 6d 61 69 6e 2e 3c 2f 62 3e 74 61 62 31  <b>main.</b>tab1
ec30: 20 42 45 47 49 4e 20 2e 2e 2e 0a 3c 2f 70 72 65   BEGIN ....</pre
ec40: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
ec50: 3c 70 3e 46 61 69 6c 75 72 65 20 74 6f 20 73 70  <p>Failure to sp
ec60: 65 63 69 66 79 20 74 68 65 20 73 63 68 65 6d 61  ecify the schema
ec70: 20 6e 61 6d 65 20 6f 6e 20 74 68 65 20 74 61 72   name on the tar
ec80: 67 65 74 20 74 61 62 6c 65 20 63 6f 75 6c 64 20  get table could 
ec90: 72 65 73 75 6c 74 0a 69 6e 20 74 68 65 20 54 45  result.in the TE
eca0: 4d 50 20 74 72 69 67 67 65 72 20 62 65 69 6e 67  MP trigger being
ecb0: 20 72 65 61 74 74 61 63 68 65 64 20 74 6f 20 61   reattached to a
ecc0: 20 74 61 62 6c 65 20 77 69 74 68 20 74 68 65 20   table with the 
ecd0: 73 61 6d 65 20 6e 61 6d 65 20 69 6e 0a 61 6e 6f  same name in.ano
ece0: 74 68 65 72 20 64 61 74 61 62 61 73 65 20 77 68  ther database wh
ecf0: 65 6e 65 76 65 72 20 61 6e 79 20 73 63 68 65 6d  enever any schem
ed00: 61 20 63 68 61 6e 67 65 20 6f 63 63 75 72 73 2e  a change occurs.
ed10: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
ed20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ed30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ed40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ed50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ed60: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
ed70: 69 6f 6e 20 7b 43 52 45 41 54 45 20 56 49 45 57  ion {CREATE VIEW
ed80: 7d 20 7b 63 72 65 61 74 65 76 69 65 77 7d 20 7b  } {createview} {
ed90: 7b 43 52 45 41 54 45 20 56 49 45 57 7d 20 76 69  {CREATE VIEW} vi
eda0: 65 77 20 56 49 45 57 20 2a 76 69 65 77 73 7d 0a  ew VIEW *views}.
edb0: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
edc0: 44 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d 76  Diagram create-v
edd0: 69 65 77 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  iew-stmt.</tcl>.
ede0: 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20  .<p>^The CREATE 
edf0: 56 49 45 57 20 63 6f 6d 6d 61 6e 64 20 61 73 73  VIEW command ass
ee00: 69 67 6e 73 20 61 20 6e 61 6d 65 20 74 6f 20 61  igns a name to a
ee10: 20 70 72 65 2d 70 61 63 6b 61 67 65 64 20 0a 5b   pre-packaged .[
ee20: 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e  SELECT] statemen
ee30: 74 2e 20 0a 5e 4f 6e 63 65 20 74 68 65 20 76 69  t. .^Once the vi
ee40: 65 77 20 69 73 20 63 72 65 61 74 65 64 2c 20 69  ew is created, i
ee50: 74 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e  t can be used in
ee60: 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
ee70: 0a 6f 66 20 61 6e 6f 74 68 65 72 20 5b 53 45 4c  .of another [SEL
ee80: 45 43 54 5d 20 69 6e 20 70 6c 61 63 65 20 6f 66  ECT] in place of
ee90: 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a 3c   a table name..<
eea0: 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  /p>..<p>^If the 
eeb0: 22 54 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f  "TEMP" or "TEMPO
eec0: 52 41 52 59 22 20 6b 65 79 77 6f 72 64 20 6f 63  RARY" keyword oc
eed0: 63 75 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20  curs in between 
eee0: 22 43 52 45 41 54 45 22 0a 61 6e 64 20 22 56 49  "CREATE".and "VI
eef0: 45 57 22 20 74 68 65 6e 20 74 68 65 20 76 69 65  EW" then the vie
ef00: 77 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65  w that is create
ef10: 64 20 69 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c  d is only visibl
ef20: 65 20 74 6f 20 74 68 65 0a 5b 64 61 74 61 62 61  e to the.[databa
ef30: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 74  se connection] t
ef40: 68 61 74 20 63 72 65 61 74 65 64 20 69 74 20 61  hat created it a
ef50: 6e 64 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61  nd is automatica
ef60: 6c 6c 79 20 64 65 6c 65 74 65 64 20 77 68 65 6e  lly deleted when
ef70: 0a 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f  .the database co
ef80: 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c 6f 73  nnection is clos
ef90: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 49 66  ed.</p>..<p> ^If
efa0: 20 61 20 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d   a <yyterm>schem
efb0: 61 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20  a-name</yyterm> 
efc0: 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  is specified, th
efd0: 65 6e 20 74 68 65 20 76 69 65 77 20 0a 69 73 20  en the view .is 
efe0: 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 73  created in the s
eff0: 70 65 63 69 66 69 65 64 20 64 61 74 61 62 61 73  pecified databas
f000: 65 2e 0a 5e 49 74 20 69 73 20 61 6e 20 65 72 72  e..^It is an err
f010: 6f 72 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f  or to specify bo
f020: 74 68 20 61 20 3c 79 79 74 65 72 6d 3e 73 63 68  th a <yyterm>sch
f030: 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  ema-name</yyterm
f040: 3e 0a 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b  >.and the TEMP k
f050: 65 79 77 6f 72 64 20 6f 6e 20 61 20 56 49 45 57  eyword on a VIEW
f060: 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 3c 79 79  , unless the <yy
f070: 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65  term>schema-name
f080: 3c 2f 79 79 74 65 72 6d 3e 20 0a 69 73 20 22 74  </yyterm> .is "t
f090: 65 6d 70 22 2e 0a 5e 49 66 20 6e 6f 20 73 63 68  emp"..^If no sch
f0a0: 65 6d 61 20 6e 61 6d 65 20 69 73 20 73 70 65 63  ema name is spec
f0b0: 69 66 69 65 64 2c 20 61 6e 64 20 74 68 65 20 54  ified, and the T
f0c0: 45 4d 50 20 6b 65 79 77 6f 72 64 20 69 73 20 6e  EMP keyword is n
f0d0: 6f 74 20 70 72 65 73 65 6e 74 2c 0a 74 68 65 20  ot present,.the 
f0e0: 56 49 45 57 20 69 73 20 63 72 65 61 74 65 64 20  VIEW is created 
f0f0: 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
f100: 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 59  base.</p>..<p>^Y
f110: 6f 75 20 63 61 6e 6e 6f 74 20 5b 44 45 4c 45 54  ou cannot [DELET
f120: 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 20 6f 72  E], [INSERT], or
f130: 20 5b 55 50 44 41 54 45 5d 20 61 20 76 69 65 77   [UPDATE] a view
f140: 2e 20 20 5e 56 69 65 77 73 20 61 72 65 20 72 65  .  ^Views are re
f150: 61 64 2d 6f 6e 6c 79 20 0a 69 6e 20 53 51 4c 69  ad-only .in SQLi
f160: 74 65 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 69  te.  ^However, i
f170: 6e 20 6d 61 6e 79 20 63 61 73 65 73 20 79 6f 75  n many cases you
f180: 20 63 61 6e 20 75 73 65 20 61 6e 0a 5b 49 4e 53   can use an.[INS
f190: 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 5d  TEAD OF trigger]
f1a0: 20 6f 6e 20 74 68 65 20 76 69 65 77 20 74 6f 20   on the view to 
f1b0: 61 63 63 6f 6d 70 6c 69 73 68 20 0a 74 68 65 20  accomplish .the 
f1c0: 73 61 6d 65 20 74 68 69 6e 67 2e 20 20 5e 56 69  same thing.  ^Vi
f1d0: 65 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20  ews are removed 
f1e0: 0a 77 69 74 68 20 74 68 65 20 5b 44 52 4f 50 20  .with the [DROP 
f1f0: 56 49 45 57 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f  VIEW] command.</
f200: 70 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20 3c 79 79  p>..<p>^If a <yy
f210: 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  term>column-name
f220: 3c 2f 79 79 74 65 72 6d 3e 20 6c 69 73 74 20 66  </yyterm> list f
f230: 6f 6c 6c 6f 77 73 20 0a 74 68 65 20 3c 79 79 74  ollows .the <yyt
f240: 65 72 6d 3e 76 69 65 77 2d 6e 61 6d 65 3c 2f 79  erm>view-name</y
f250: 79 74 65 72 6d 3e 2c 20 74 68 65 6e 20 74 68 61  yterm>, then tha
f260: 74 20 6c 69 73 74 20 64 65 74 65 72 6d 69 6e 65  t list determine
f270: 73 0a 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74  s.the names of t
f280: 68 65 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 74  he columns for t
f290: 68 65 20 76 69 65 77 2e 20 20 5e 49 66 20 74 68  he view.  ^If th
f2a0: 65 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e  e <yyterm>column
f2b0: 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 6c  -name</yyterm>.l
f2c0: 69 73 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20  ist is omitted, 
f2d0: 74 68 65 6e 20 74 68 65 20 6e 61 6d 65 73 20 6f  then the names o
f2e0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  f the columns in
f2f0: 20 74 68 65 20 76 69 65 77 20 61 72 65 20 64 65   the view are de
f300: 72 69 76 65 64 0a 66 72 6f 6d 20 74 68 65 20 6e  rived.from the n
f310: 61 6d 65 73 20 6f 66 20 74 68 65 20 72 65 73 75  ames of the resu
f320: 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 69  lt-set columns i
f330: 6e 20 74 68 65 20 5b 73 65 6c 65 63 74 2d 73 74  n the [select-st
f340: 6d 74 5d 2e 0a 4e 6f 74 65 20 74 68 61 74 20 74  mt]..Note that t
f350: 68 65 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d  he <yyterm>colum
f360: 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20  n-name</yyterm> 
f370: 6c 69 73 74 20 73 79 6e 74 61 78 20 69 73 20 6f  list syntax is o
f380: 6e 6c 79 0a 73 75 70 70 6f 72 74 65 64 20 69 6e  nly.supported in
f390: 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 73   SQLite versions
f3a0: 20 33 2e 39 2e 30 20 61 6e 64 20 6c 61 74 65 72   3.9.0 and later
f3b0: 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
f3c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f3d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f3e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f3f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f400: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
f410: 7b 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20  {CREATE VIRTUAL 
f420: 54 41 42 4c 45 7d 20 7b 63 72 65 61 74 65 76 74  TABLE} {createvt
f430: 61 62 7d 20 7b 7b 43 52 45 41 54 45 20 56 49 52  ab} {{CREATE VIR
f440: 54 55 41 4c 20 54 41 42 4c 45 7d 7d 0a 0a 52 65  TUAL TABLE}}..Re
f450: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
f460: 67 72 61 6d 20 63 72 65 61 74 65 2d 76 69 72 74  gram create-virt
f470: 75 61 6c 2d 74 61 62 6c 65 2d 73 74 6d 74 0a 3c  ual-table-stmt.<
f480: 2f 74 63 6c 3e 0a 0a 3c 70 3e 41 20 5b 76 69 72  /tcl>..<p>A [vir
f490: 74 75 61 6c 20 74 61 62 6c 65 5d 20 69 73 20 61  tual table] is a
f4a0: 6e 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 61  n interface to a
f4b0: 6e 20 65 78 74 65 72 6e 61 6c 20 73 74 6f 72 61  n external stora
f4c0: 67 65 20 6f 72 20 63 6f 6d 70 75 74 61 74 69 6f  ge or computatio
f4d0: 6e 0a 65 6e 67 69 6e 65 20 74 68 61 74 20 61 70  n.engine that ap
f4e0: 70 65 61 72 73 20 74 6f 20 62 65 20 61 20 74 61  pears to be a ta
f4f0: 62 6c 65 20 62 75 74 20 64 6f 65 73 20 6e 6f 74  ble but does not
f500: 20 61 63 74 75 61 6c 6c 79 20 73 74 6f 72 65 20   actually store 
f510: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69 6e 20 74  information.in t
f520: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
f530: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 67 65 6e  .</p>..<p>In gen
f540: 65 72 61 6c 2c 20 79 6f 75 20 63 61 6e 20 64 6f  eral, you can do
f550: 20 61 6e 79 74 68 69 6e 67 20 77 69 74 68 20 61   anything with a
f560: 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 5d   [virtual table]
f570: 20 74 68 61 74 20 63 61 6e 20 62 65 20 64 6f 6e   that can be don
f580: 65 0a 77 69 74 68 20 61 6e 20 6f 72 64 69 6e 61  e.with an ordina
f590: 72 79 20 74 61 62 6c 65 2c 20 65 78 63 65 70 74  ry table, except
f5a0: 20 74 68 61 74 20 5e 79 6f 75 20 63 61 6e 6e 6f   that ^you canno
f5b0: 74 20 63 72 65 61 74 65 20 69 6e 64 69 63 65 73  t create indices
f5c0: 20 6f 72 20 74 72 69 67 67 65 72 73 20 6f 6e 20   or triggers on 
f5d0: 61 0a 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a.virtual table.
f5e0: 20 20 5e 53 6f 6d 65 20 76 69 72 74 75 61 6c 20    ^Some virtual 
f5f0: 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  table implementa
f600: 74 69 6f 6e 73 20 6d 69 67 68 74 20 69 6d 70 6f  tions might impo
f610: 73 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a 72 65  se additional.re
f620: 73 74 72 69 63 74 69 6f 6e 73 2e 20 20 46 6f 72  strictions.  For
f630: 20 65 78 61 6d 70 6c 65 2c 20 6d 61 6e 79 20 76   example, many v
f640: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 61 72  irtual tables ar
f650: 65 20 72 65 61 64 2d 6f 6e 6c 79 2e 3c 2f 70 3e  e read-only.</p>
f660: 0a 0a 3c 70 3e 54 68 65 20 3c 79 79 74 65 72 6d  ..<p>The <yyterm
f670: 3e 6d 6f 64 75 6c 65 2d 6e 61 6d 65 3c 2f 79 79  >module-name</yy
f680: 74 65 72 6d 3e 20 69 73 20 74 68 65 20 6e 61 6d  term> is the nam
f690: 65 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 74  e of an object t
f6a0: 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 0a 74  hat implements.t
f6b0: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
f6c0: 2e 20 20 5e 54 68 65 20 3c 79 79 74 65 72 6d 3e  .  ^The <yyterm>
f6d0: 6d 6f 64 75 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74  module-name</yyt
f6e0: 65 72 6d 3e 20 6d 75 73 74 20 62 65 20 72 65 67  erm> must be reg
f6f0: 69 73 74 65 72 65 64 20 77 69 74 68 0a 74 68 65  istered with.the
f700: 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65   SQLite database
f710: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 75 73 69 6e   connection usin
f720: 67 0a 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74  g.[sqlite3_creat
f730: 65 5f 6d 6f 64 75 6c 65 28 29 5d 20 6f 72 20 5b  e_module()] or [
f740: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d  sqlite3_create_m
f750: 6f 64 75 6c 65 5f 76 32 28 29 5d 0a 70 72 69 6f  odule_v2()].prio
f760: 72 20 74 6f 20 69 73 73 75 69 6e 67 20 74 68 65  r to issuing the
f770: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
f780: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e  TABLE statement.
f790: 0a 5e 54 68 65 20 6d 6f 64 75 6c 65 20 74 61 6b  .^The module tak
f7a0: 65 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  es zero or more 
f7b0: 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65 64 20  comma-separated 
f7c0: 61 72 67 75 6d 65 6e 74 73 2e 0a 5e 54 68 65 20  arguments..^The 
f7d0: 61 72 67 75 6d 65 6e 74 73 20 63 61 6e 20 62 65  arguments can be
f7e0: 20 6a 75 73 74 20 61 62 6f 75 74 20 61 6e 79 20   just about any 
f7f0: 74 65 78 74 20 61 73 20 6c 6f 6e 67 20 61 73 20  text as long as 
f800: 69 74 20 68 61 73 20 62 61 6c 61 6e 63 65 64 0a  it has balanced.
f810: 70 61 72 65 6e 74 68 65 73 65 73 2e 20 20 54 68  parentheses.  Th
f820: 65 20 61 72 67 75 6d 65 6e 74 20 73 79 6e 74 61  e argument synta
f830: 78 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 6c  x is sufficientl
f840: 79 20 67 65 6e 65 72 61 6c 20 74 68 61 74 20 74  y general that t
f850: 68 65 0a 61 72 67 75 6d 65 6e 74 73 20 63 61 6e  he.arguments can
f860: 20 62 65 20 6d 61 64 65 20 74 6f 20 61 70 70 65   be made to appe
f870: 61 72 20 61 73 20 5b 63 6f 6c 75 6d 6e 20 64 65  ar as [column de
f880: 66 69 6e 69 74 69 6f 6e 73 5d 20 69 6e 20 61 20  finitions] in a 
f890: 74 72 61 64 69 74 69 6f 6e 61 6c 0a 5b 43 52 45  traditional.[CRE
f8a0: 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65  ATE TABLE] state
f8b0: 6d 65 6e 74 2e 20 20 0a 5e 53 51 4c 69 74 65 20  ment.  .^SQLite 
f8c0: 70 61 73 73 65 73 20 74 68 65 20 6d 6f 64 75 6c  passes the modul
f8d0: 65 20 61 72 67 75 6d 65 6e 74 73 20 64 69 72 65  e arguments dire
f8e0: 63 74 6c 79 0a 74 6f 20 74 68 65 20 5b 78 43 72  ctly.to the [xCr
f8f0: 65 61 74 65 5d 20 61 6e 64 20 5b 78 43 6f 6e 6e  eate] and [xConn
f900: 65 63 74 5d 20 6d 65 74 68 6f 64 73 20 6f 66 20  ect] methods of 
f910: 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65  the module imple
f920: 6d 65 6e 74 61 74 69 6f 6e 0a 77 69 74 68 6f 75  mentation.withou
f930: 74 20 61 6e 79 20 69 6e 74 65 72 70 72 65 74 61  t any interpreta
f940: 74 69 6f 6e 2e 20 20 49 74 20 69 73 20 74 68 65  tion.  It is the
f950: 20 72 65 73 70 6f 6e 73 69 62 69 6c 69 74 79 0a   responsibility.
f960: 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d  of the module im
f970: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
f980: 70 61 72 73 65 20 61 6e 64 20 69 6e 74 65 72 70  parse and interp
f990: 72 65 74 20 69 74 73 20 6f 77 6e 20 61 72 67 75  ret its own argu
f9a0: 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ments.</p>..<p>^
f9b0: 41 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  A virtual table 
f9c0: 69 73 20 64 65 73 74 72 6f 79 65 64 20 75 73 69  is destroyed usi
f9d0: 6e 67 20 74 68 65 20 6f 72 64 69 6e 61 72 79 0a  ng the ordinary.
f9e0: 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20 73 74 61  [DROP TABLE] sta
f9f0: 74 65 6d 65 6e 74 2e 20 20 54 68 65 72 65 20 69  tement.  There i
fa00: 73 20 6e 6f 0a 44 52 4f 50 20 56 49 52 54 55 41  s no.DROP VIRTUA
fa10: 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  L TABLE statemen
fa20: 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  t.</p>..<tcl>.##
fa30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fa40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fa50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fa60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fa70: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
fa80: 74 69 6f 6e 20 44 45 4c 45 54 45 20 64 65 6c 65  tion DELETE dele
fa90: 74 65 20 7b 44 45 4c 45 54 45 20 2a 44 45 4c 45  te {DELETE *DELE
faa0: 54 45 73 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  TEs}..RecursiveB
fab0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65 6c  ubbleDiagram del
fac0: 65 74 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ete-stmt.</tcl>.
fad0: 0a 3c 70 3e 54 68 65 20 44 45 4c 45 54 45 20 63  .<p>The DELETE c
fae0: 6f 6d 6d 61 6e 64 20 72 65 6d 6f 76 65 73 20 72  ommand removes r
faf0: 65 63 6f 72 64 73 20 66 72 6f 6d 20 74 68 65 20  ecords from the 
fb00: 74 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65 64  table identified
fb10: 20 62 79 20 74 68 65 0a 20 20 20 5b 71 75 61 6c   by the.   [qual
fb20: 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65  ified-table-name
fb30: 5d 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 57  ]...<p>^If the W
fb40: 48 45 52 45 20 63 6c 61 75 73 65 20 69 73 20 6e  HERE clause is n
fb50: 6f 74 20 70 72 65 73 65 6e 74 2c 20 61 6c 6c 20  ot present, all 
fb60: 72 65 63 6f 72 64 73 20 69 6e 20 74 68 65 20 74  records in the t
fb70: 61 62 6c 65 20 61 72 65 20 64 65 6c 65 74 65 64  able are deleted
fb80: 2e 0a 20 20 20 5e 49 66 20 61 20 57 48 45 52 45  ..   ^If a WHERE
fb90: 20 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c   clause is suppl
fba0: 69 65 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74  ied, then only t
fbb0: 68 6f 73 65 20 72 6f 77 73 20 66 6f 72 20 77 68  hose rows for wh
fbc0: 69 63 68 20 74 68 65 0a 20 20 20 57 48 45 52 45  ich the.   WHERE
fbd0: 20 63 6c 61 75 73 65 20 5b 62 6f 6f 6c 65 61 6e   clause [boolean
fbe0: 20 65 78 70 72 65 73 73 69 6f 6e 5d 20 69 73 20   expression] is 
fbf0: 74 72 75 65 20 61 72 65 20 64 65 6c 65 74 65 64  true are deleted
fc00: 2e 0a 20 20 20 5e 52 6f 77 73 20 66 6f 72 20 77  ..   ^Rows for w
fc10: 68 69 63 68 20 74 68 65 20 65 78 70 72 65 73 73  hich the express
fc20: 69 6f 6e 20 69 73 20 66 61 6c 73 65 20 6f 72 20  ion is false or 
fc30: 4e 55 4c 4c 20 61 72 65 20 72 65 74 61 69 6e 65  NULL are retaine
fc40: 64 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63 74  d...<h3>Restrict
fc50: 69 6f 6e 73 20 6f 6e 20 44 45 4c 45 54 45 20 53  ions on DELETE S
fc60: 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e  tatements Within
fc70: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 3c   CREATE TRIGGER<
fc80: 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c  /h3>..<p>The fol
fc90: 6c 6f 77 69 6e 67 20 72 65 73 74 72 69 63 74 69  lowing restricti
fca0: 6f 6e 73 20 61 70 70 6c 79 20 74 6f 20 44 45 4c  ons apply to DEL
fcb0: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 74  ETE statements t
fcc0: 68 61 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e  hat occur within
fcd0: 20 74 68 65 0a 20 20 20 62 6f 64 79 20 6f 66 20   the.   body of 
fce0: 61 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  a [CREATE TRIGGE
fcf0: 52 5d 20 73 74 61 74 65 6d 65 6e 74 3a 0a 0a 3c  R] statement:..<
fd00: 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68  ul>.  <li><p>^Th
fd10: 65 20 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d  e <yyterm>table-
fd20: 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 73 70  name</yyterm> sp
fd30: 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
fd40: 6f 66 20 61 20 0a 20 20 20 20 44 45 4c 45 54 45  of a .    DELETE
fd50: 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68 69   statement withi
fd60: 6e 0a 20 20 20 20 61 20 74 72 69 67 67 65 72 20  n.    a trigger 
fd70: 62 6f 64 79 20 6d 75 73 74 20 62 65 20 75 6e 71  body must be unq
fd80: 75 61 6c 69 66 69 65 64 2e 20 20 5e 28 49 6e 20  ualified.  ^(In 
fd90: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
fda0: 0a 20 20 20 20 3c 69 3e 73 63 68 65 6d 61 2d 6e  .    <i>schema-n
fdb0: 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20  ame</i><b>.</b> 
fdc0: 70 72 65 66 69 78 20 6f 6e 20 74 68 65 20 74 61  prefix on the ta
fdd0: 62 6c 65 20 6e 61 6d 65 20 69 73 20 6e 6f 74 20  ble name is not 
fde0: 61 6c 6c 6f 77 65 64 20 0a 20 20 20 20 77 69 74  allowed .    wit
fdf0: 68 69 6e 20 74 72 69 67 67 65 72 73 2e 29 5e 20  hin triggers.)^ 
fe00: 5e 49 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f  ^If the table to
fe10: 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67   which the trigg
fe20: 65 72 20 69 73 20 61 74 74 61 63 68 65 64 20 69  er is attached i
fe30: 73 0a 20 20 20 20 6e 6f 74 20 69 6e 20 74 68 65  s.    not in the
fe40: 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 2c 20   temp database, 
fe50: 74 68 65 6e 20 44 45 4c 45 54 45 20 73 74 61 74  then DELETE stat
fe60: 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 68  ements within th
fe70: 65 20 74 72 69 67 67 65 72 0a 20 20 20 20 62 6f  e trigger.    bo
fe80: 64 79 20 6d 75 73 74 20 6f 70 65 72 61 74 65 20  dy must operate 
fe90: 6f 6e 20 74 61 62 6c 65 73 20 77 69 74 68 69 6e  on tables within
fea0: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
feb0: 73 65 20 61 73 20 69 74 2e 20 5e 49 66 20 74 68  se as it. ^If th
fec0: 65 20 74 61 62 6c 65 0a 20 20 20 20 74 6f 20 77  e table.    to w
fed0: 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
fee0: 20 69 73 20 61 74 74 61 63 68 65 64 20 69 73 20   is attached is 
fef0: 69 6e 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  in the TEMP data
ff00: 62 61 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 20  base, then the. 
ff10: 20 20 20 75 6e 71 75 61 6c 69 66 69 65 64 20 6e     unqualified n
ff20: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
ff30: 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64 20 69   being deleted i
ff40: 73 20 72 65 73 6f 6c 76 65 64 20 69 6e 20 74 68  s resolved in th
ff50: 65 20 73 61 6d 65 20 77 61 79 20 61 73 0a 20 20  e same way as.  
ff60: 20 20 69 74 20 69 73 20 66 6f 72 20 61 20 74 6f    it is for a to
ff70: 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d 65 6e  p-level statemen
ff80: 74 20 28 62 79 20 73 65 61 72 63 68 69 6e 67 20  t (by searching 
ff90: 66 69 72 73 74 20 74 68 65 20 54 45 4d 50 20 64  first the TEMP d
ffa0: 61 74 61 62 61 73 65 2c 20 74 68 65 6e 0a 20 20  atabase, then.  
ffb0: 20 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62    the main datab
ffc0: 61 73 65 2c 20 74 68 65 6e 20 61 6e 79 20 6f 74  ase, then any ot
ffd0: 68 65 72 20 64 61 74 61 62 61 73 65 73 20 69 6e  her databases in
ffe0: 20 74 68 65 20 6f 72 64 65 72 20 74 68 65 79 20   the order they 
fff0: 77 65 72 65 0a 20 20 20 20 61 74 74 61 63 68 65  were.    attache
10000 64 29 2e 0a 20 20 20 20 0a 20 20 3c 6c 69 3e 3c  d)..    .  <li><
10010 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42  p>^The INDEXED B
10020 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45  Y and NOT INDEXE
10030 44 20 63 6c 61 75 73 65 73 20 61 72 65 20 6e 6f  D clauses are no
10040 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 44 45 4c  t allowed on DEL
10050 45 54 45 0a 20 20 20 20 73 74 61 74 65 6d 65 6e  ETE.    statemen
10060 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ts within trigge
10070 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c  rs.</p>..  <li><
10080 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20 61 6e 64  p>^The LIMIT and
10090 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
100a0 73 20 28 64 65 73 63 72 69 62 65 64 20 62 65 6c  s (described bel
100b0 6f 77 29 20 61 72 65 20 75 6e 73 75 70 70 6f 72  ow) are unsuppor
100c0 74 65 64 20 66 6f 72 0a 20 20 20 20 44 45 4c 45  ted for.    DELE
100d0 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  TE statements wi
100e0 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f  thin triggers.</
100f0 70 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70  p>.</ul>..<h3>Op
10100 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 61 6e 64  tional LIMIT and
10110 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
10120 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20  s</h3>..<p>^(If 
10130 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c  SQLite is compil
10140 65 64 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c  ed with the [SQL
10150 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54  ITE_ENABLE_UPDAT
10160 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a  E_DELETE_LIMIT].
10170 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
10180 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 73 79  ion, then the sy
10190 6e 74 61 78 20 6f 66 20 74 68 65 20 44 45 4c 45  ntax of the DELE
101a0 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 0a  TE statement is.
101b0 65 78 74 65 6e 64 65 64 20 62 79 20 74 68 65 20  extended by the 
101c0 61 64 64 69 74 69 6f 6e 20 6f 66 20 6f 70 74 69  addition of opti
101d0 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59 20 61 6e  onal ORDER BY an
101e0 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 3a  d LIMIT clauses:
101f0 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62  )^</p>..<tcl>Bub
10200 62 6c 65 44 69 61 67 72 61 6d 20 64 65 6c 65 74  bleDiagram delet
10210 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f  e-stmt-limited</
10220 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20 44  tcl>..<p>^If a D
10230 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
10240 68 61 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75  has a LIMIT clau
10250 73 65 2c 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  se, the maximum 
10260 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74  number of rows t
10270 68 61 74 0a 77 69 6c 6c 20 62 65 20 64 65 6c 65  hat.will be dele
10280 74 65 64 20 69 73 20 66 6f 75 6e 64 20 62 79 20  ted is found by 
10290 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61  evaluating the a
102a0 63 63 6f 6d 70 61 6e 79 69 6e 67 20 65 78 70 72  ccompanying expr
102b0 65 73 73 69 6f 6e 20 61 6e 64 20 63 61 73 74 69  ession and casti
102c0 6e 67 0a 69 74 20 74 6f 20 61 6e 20 69 6e 74 65  ng.it to an inte
102d0 67 65 72 20 76 61 6c 75 65 2e 20 5e 49 66 20 74  ger value. ^If t
102e0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
102f0 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
10300 4c 49 4d 49 54 20 63 6c 61 75 73 65 0a 63 61 6e  LIMIT clause.can
10310 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c  not be losslessl
10320 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  y converted to a
10330 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2c  n integer value,
10340 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e   it is an error.
10350 20 5e 41 20 0a 6e 65 67 61 74 69 76 65 20 4c 49   ^A .negative LI
10360 4d 49 54 20 76 61 6c 75 65 20 69 73 20 69 6e 74  MIT value is int
10370 65 72 70 72 65 74 65 64 20 61 73 20 22 6e 6f 20  erpreted as "no 
10380 6c 69 6d 69 74 22 2e 20 5e 28 49 66 20 74 68 65  limit". ^(If the
10390 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
103a0 74 20 0a 61 6c 73 6f 20 68 61 73 20 61 6e 20 4f  t .also has an O
103b0 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20 74 68  FFSET clause, th
103c0 65 6e 20 69 74 20 69 73 20 73 69 6d 69 6c 61 72  en it is similar
103d0 6c 79 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64  ly evaluated and
103e0 20 63 61 73 74 20 74 6f 20 61 6e 0a 69 6e 74 65   cast to an.inte
103f0 67 65 72 20 76 61 6c 75 65 2e 20 41 67 61 69 6e  ger value. Again
10400 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72  , it is an error
10410 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 63 61   if the value ca
10420 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73  nnot be lossless
10430 6c 79 0a 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  ly.converted to 
10440 61 6e 20 69 6e 74 65 67 65 72 2e 29 5e 20 5e 49  an integer.)^ ^I
10450 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 46  f there is no OF
10460 46 53 45 54 20 63 6c 61 75 73 65 2c 20 6f 72 20  FSET clause, or 
10470 74 68 65 20 63 61 6c 63 75 6c 61 74 65 64 0a 69  the calculated.i
10480 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 73 20  nteger value is 
10490 6e 65 67 61 74 69 76 65 2c 20 74 68 65 20 65 66  negative, the ef
104a0 66 65 63 74 69 76 65 20 4f 46 46 53 45 54 20 76  fective OFFSET v
104b0 61 6c 75 65 20 69 73 20 7a 65 72 6f 2e 0a 0a 3c  alue is zero...<
104c0 70 3e 5e 28 49 66 20 74 68 65 20 44 45 4c 45 54  p>^(If the DELET
104d0 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  E statement has 
104e0 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  an ORDER BY clau
104f0 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77  se, then all row
10500 73 20 74 68 61 74 20 77 6f 75 6c 64 20 0a 62 65  s that would .be
10510 20 64 65 6c 65 74 65 64 20 69 6e 20 74 68 65 20   deleted in the 
10520 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c  absence of the L
10530 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72 65 20  IMIT clause are 
10540 73 6f 72 74 65 64 20 61 63 63 6f 72 64 69 6e 67  sorted according
10550 20 74 6f 20 74 68 65 20 0a 4f 52 44 45 52 20 42   to the .ORDER B
10560 59 2e 20 54 68 65 20 66 69 72 73 74 20 3c 69 3e  Y. The first <i>
10570 4d 3c 2f 69 3e 20 72 6f 77 73 2c 20 77 68 65 72  M</i> rows, wher
10580 65 20 3c 69 3e 4d 3c 2f 69 3e 20 69 73 20 74 68  e <i>M</i> is th
10590 65 20 76 61 6c 75 65 20 66 6f 75 6e 64 20 62 79  e value found by
105a0 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20  .evaluating the 
105b0 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20 65 78  OFFSET clause ex
105c0 70 72 65 73 73 69 6f 6e 2c 20 61 72 65 20 73 6b  pression, are sk
105d0 69 70 70 65 64 2c 20 61 6e 64 20 74 68 65 20 66  ipped, and the f
105e0 6f 6c 6c 6f 77 69 6e 67 20 0a 3c 69 3e 4e 3c 2f  ollowing .<i>N</
105f0 69 3e 2c 20 77 68 65 72 65 20 3c 69 3e 4e 3c 2f  i>, where <i>N</
10600 69 3e 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  i> is the value 
10610 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70  of the LIMIT exp
10620 72 65 73 73 69 6f 6e 2c 20 61 72 65 20 64 65 6c  ression, are del
10630 65 74 65 64 2e 29 5e 0a 5e 49 66 20 74 68 65 72  eted.)^.^If ther
10640 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  e are less than 
10650 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 72 65  <i>N</i> rows re
10660 6d 61 69 6e 69 6e 67 20 61 66 74 65 72 20 74 61  maining after ta
10670 6b 69 6e 67 20 74 68 65 20 4f 46 46 53 45 54 20  king the OFFSET 
10680 63 6c 61 75 73 65 0a 69 6e 74 6f 20 61 63 63 6f  clause.into acco
10690 75 6e 74 2c 20 6f 72 20 69 66 20 74 68 65 20 4c  unt, or if the L
106a0 49 4d 49 54 20 63 6c 61 75 73 65 20 65 76 61 6c  IMIT clause eval
106b0 75 61 74 65 64 20 74 6f 20 61 20 6e 65 67 61 74  uated to a negat
106c0 69 76 65 20 76 61 6c 75 65 2c 20 74 68 65 6e 20  ive value, then 
106d0 61 6c 6c 0a 72 65 6d 61 69 6e 69 6e 67 20 72 6f  all.remaining ro
106e0 77 73 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a  ws are deleted..
106f0 0a 3c 70 3e 5e 49 66 20 74 68 65 20 44 45 4c 45  .<p>^If the DELE
10700 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73  TE statement has
10710 20 6e 6f 20 4f 52 44 45 52 20 42 59 20 63 6c 61   no ORDER BY cla
10720 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f  use, then all ro
10730 77 73 20 74 68 61 74 0a 77 6f 75 6c 64 20 62 65  ws that.would be
10740 20 64 65 6c 65 74 65 64 20 69 6e 20 74 68 65 20   deleted in the 
10750 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c  absence of the L
10760 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72 65 20  IMIT clause are 
10770 61 73 73 65 6d 62 6c 65 64 20 69 6e 20 61 6e 0a  assembled in an.
10780 61 72 62 69 74 72 61 72 79 20 6f 72 64 65 72 20  arbitrary order 
10790 62 65 66 6f 72 65 20 61 70 70 6c 79 69 6e 67 20  before applying 
107a0 74 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46  the LIMIT and OF
107b0 46 53 45 54 20 63 6c 61 75 73 65 73 20 74 6f 20  FSET clauses to 
107c0 64 65 74 65 72 6d 69 6e 65 20 0a 74 68 65 20 73  determine .the s
107d0 75 62 73 65 74 20 74 68 61 74 20 61 72 65 20 61  ubset that are a
107e0 63 74 75 61 6c 6c 79 20 64 65 6c 65 74 65 64 2e  ctually deleted.
107f0 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52 44 45 52  ..<p>^(The ORDER
10800 20 42 59 20 63 6c 61 75 73 65 20 6f 6e 20 61 20   BY clause on a 
10810 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
10820 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f   is used only to
10830 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68   determine which
10840 0a 72 6f 77 73 20 66 61 6c 6c 20 77 69 74 68 69  .rows fall withi
10850 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20 54 68 65  n the LIMIT. The
10860 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20   order in which 
10870 72 6f 77 73 20 61 72 65 20 64 65 6c 65 74 65 64  rows are deleted
10880 20 69 73 20 61 72 62 69 74 72 61 72 79 0a 61 6e   is arbitrary.an
10890 64 20 69 73 20 6e 6f 74 20 69 6e 66 6c 75 65 6e  d is not influen
108a0 63 65 64 20 62 79 20 74 68 65 20 4f 52 44 45 52  ced by the ORDER
108b0 20 42 59 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c   BY clause.)^..<
108c0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
108d0 74 72 75 6e 63 61 74 65 6f 70 74 20 7b 74 72 75  truncateopt {tru
108e0 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69  ncate optimizati
108f0 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  on}</tcl>.<h3>Th
10900 65 20 54 72 75 6e 63 61 74 65 20 4f 70 74 69 6d  e Truncate Optim
10910 69 7a 61 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70  ization</h3>..<p
10920 3e 5e 57 68 65 6e 20 74 68 65 20 57 48 45 52 45  >^When the WHERE
10930 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
10940 20 61 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d   a DELETE statem
10950 65 6e 74 20 61 6e 64 20 74 68 65 20 74 61 62 6c  ent and the tabl
10960 65 0a 62 65 69 6e 67 20 64 65 6c 65 74 65 64 20  e.being deleted 
10970 68 61 73 20 6e 6f 20 74 72 69 67 67 65 72 73 2c  has no triggers,
10980 0a 53 51 4c 69 74 65 20 75 73 65 73 20 61 6e 20  .SQLite uses an 
10990 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 74 6f 20  optimization to 
109a0 65 72 61 73 65 20 74 68 65 20 65 6e 74 69 72 65  erase the entire
109b0 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74 0a 77   table content.w
109c0 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f  ithout having to
109d0 20 76 69 73 69 74 20 65 61 63 68 20 72 6f 77 20   visit each row 
109e0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69 6e 64  of the table ind
109f0 69 76 69 64 75 61 6c 6c 79 2e 0a 54 68 69 73 20  ividually..This 
10a00 22 74 72 75 6e 63 61 74 65 22 20 6f 70 74 69 6d  "truncate" optim
10a10 69 7a 61 74 69 6f 6e 20 6d 61 6b 65 73 20 74 68  ization makes th
10a20 65 20 64 65 6c 65 74 65 20 72 75 6e 20 6d 75 63  e delete run muc
10a30 68 20 66 61 73 74 65 72 2e 0a 50 72 69 6f 72 20  h faster..Prior 
10a40 74 6f 20 53 51 4c 69 74 65 20 5b 76 65 72 73 69  to SQLite [versi
10a50 6f 6e 20 33 2e 36 2e 35 5d 2c 20 74 68 65 20 74  on 3.6.5], the t
10a60 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61  runcate optimiza
10a70 74 69 6f 6e 0a 61 6c 73 6f 20 6d 65 61 6e 74 20  tion.also meant 
10a80 74 68 61 74 20 74 68 65 20 5b 73 71 6c 69 74 65  that the [sqlite
10a90 33 5f 63 68 61 6e 67 65 73 28 29 5d 20 61 6e 64  3_changes()] and
10aa0 0a 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f  .[sqlite3_total_
10ab0 63 68 61 6e 67 65 73 28 29 5d 20 69 6e 74 65 72  changes()] inter
10ac0 66 61 63 65 73 0a 61 6e 64 20 74 68 65 20 5b 63  faces.and the [c
10ad0 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20 70 72 61  ount_changes pra
10ae0 67 6d 61 5d 0a 77 69 6c 6c 20 6e 6f 74 20 61 63  gma].will not ac
10af0 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 74 68  tually return th
10b00 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 6c 65  e number of dele
10b10 74 65 64 20 72 6f 77 73 2e 20 20 0a 54 68 61 74  ted rows.  .That
10b20 20 70 72 6f 62 6c 65 6d 20 68 61 73 20 62 65 65   problem has bee
10b30 6e 20 66 69 78 65 64 20 61 73 20 6f 66 20 5b 76  n fixed as of [v
10b40 65 72 73 69 6f 6e 20 33 2e 36 2e 35 5d 2e 0a 0a  ersion 3.6.5]...
10b50 3c 70 3e 5e 54 68 65 20 74 72 75 6e 63 61 74 65  <p>^The truncate
10b60 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 63 61   optimization ca
10b70 6e 20 62 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79  n be permanently
10b80 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20 61 6c   disabled for al
10b90 6c 20 71 75 65 72 69 65 73 0a 62 79 20 72 65 63  l queries.by rec
10ba0 6f 6d 70 69 6c 69 6e 67 0a 53 51 4c 69 74 65 20  ompiling.SQLite 
10bb0 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45  with the [SQLITE
10bc0 5f 4f 4d 49 54 5f 54 52 55 4e 43 41 54 45 5f 4f  _OMIT_TRUNCATE_O
10bd0 50 54 49 4d 49 5a 41 54 49 4f 4e 5d 20 63 6f 6d  PTIMIZATION] com
10be0 70 69 6c 65 2d 74 69 6d 65 20 73 77 69 74 63 68  pile-time switch
10bf0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 74 72  .</p>..<p>The tr
10c00 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74  uncate optimizat
10c10 69 6f 6e 20 63 61 6e 20 61 6c 73 6f 20 62 65 20  ion can also be 
10c20 64 69 73 61 62 6c 65 64 20 61 74 20 72 75 6e 74  disabled at runt
10c30 69 6d 65 20 75 73 69 6e 67 0a 74 68 65 20 5b 73  ime using.the [s
10c40 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 74 68 6f  qlite3_set_autho
10c50 72 69 7a 65 72 28 29 5d 20 69 6e 74 65 72 66 61  rizer()] interfa
10c60 63 65 2e 20 20 5e 49 66 20 61 6e 20 61 75 74 68  ce.  ^If an auth
10c70 6f 72 69 7a 65 72 20 63 61 6c 6c 62 61 63 6b 0a  orizer callback.
10c80 72 65 74 75 72 6e 73 20 5b 53 51 4c 49 54 45 5f  returns [SQLITE_
10c90 49 47 4e 4f 52 45 5d 20 66 6f 72 20 61 6e 20 5b  IGNORE] for an [
10ca0 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 5d 20 61  SQLITE_DELETE] a
10cb0 63 74 69 6f 6e 20 63 6f 64 65 2c 20 74 68 65 6e  ction code, then
10cc0 0a 74 68 65 20 44 45 4c 45 54 45 20 6f 70 65 72  .the DELETE oper
10cd0 61 74 69 6f 6e 20 77 69 6c 6c 20 70 72 6f 63 65  ation will proce
10ce0 65 64 20 62 75 74 20 74 68 65 20 74 72 75 6e 63  ed but the trunc
10cf0 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ate optimization
10d00 20 77 69 6c 6c 0a 62 65 20 62 79 70 61 73 73 65   will.be bypasse
10d10 64 20 61 6e 64 20 72 6f 77 73 20 77 69 6c 6c 20  d and rows will 
10d20 62 65 20 64 65 6c 65 74 65 64 20 6f 6e 65 20 62  be deleted one b
10d30 79 20 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  y one.</p>..<tcl
10d40 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
10d50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10d60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10d70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10d80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10d90 23 0a 53 65 63 74 69 6f 6e 20 7b 44 45 54 41 43  #.Section {DETAC
10da0 48 20 44 41 54 41 42 41 53 45 7d 20 64 65 74 61  H DATABASE} deta
10db0 63 68 20 2a 44 45 54 41 43 48 0a 0a 52 65 63 75  ch *DETACH..Recu
10dc0 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
10dd0 61 6d 20 64 65 74 61 63 68 2d 73 74 6d 74 0a 3c  am detach-stmt.<
10de0 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 69 73 20  /tcl>..<p>^This 
10df0 73 74 61 74 65 6d 65 6e 74 20 64 65 74 61 63 68  statement detach
10e00 65 73 20 61 6e 20 61 64 64 69 74 69 6f 6e 61 6c  es an additional
10e10 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
10e20 74 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79 20  tion previously 
10e30 0a 61 74 74 61 63 68 65 64 20 75 73 69 6e 67 20  .attached using 
10e40 74 68 65 20 5b 41 54 54 41 43 48 5d 20 73 74 61  the [ATTACH] sta
10e50 74 65 6d 65 6e 74 2e 20 20 0a 5e 57 68 65 6e 20  tement.  .^When 
10e60 6e 6f 74 20 69 6e 20 5b 73 68 61 72 65 64 20 63  not in [shared c
10e70 61 63 68 65 20 6d 6f 64 65 5d 2c 20 0a 69 74 20  ache mode], .it 
10e80 69 73 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 68  is possible to h
10e90 61 76 65 20 74 68 65 20 73 61 6d 65 20 64 61 74  ave the same dat
10ea0 61 62 61 73 65 20 66 69 6c 65 20 61 74 74 61 63  abase file attac
10eb0 68 65 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d  hed multiple tim
10ec0 65 73 20 75 73 69 6e 67 20 0a 64 69 66 66 65 72  es using .differ
10ed0 65 6e 74 20 6e 61 6d 65 73 2c 20 61 6e 64 20 64  ent names, and d
10ee0 65 74 61 63 68 69 6e 67 20 6f 6e 65 20 63 6f 6e  etaching one con
10ef0 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20 66 69 6c  nection to a fil
10f00 65 20 77 69 6c 6c 20 6c 65 61 76 65 20 74 68 65  e will leave the
10f10 20 0a 6f 74 68 65 72 73 20 69 6e 74 61 63 74 2e   .others intact.
10f20 3c 2f 70 3e 0a 5e 49 6e 20 5b 73 68 61 72 65 64  </p>.^In [shared
10f30 20 63 61 63 68 65 20 6d 6f 64 65 5d 2c 20 61 74   cache mode], at
10f40 74 65 6d 70 74 69 6e 67 20 74 6f 20 61 74 74 61  tempting to atta
10f50 63 68 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  ch the same data
10f60 62 61 73 65 20 66 69 6c 65 20 6d 6f 72 65 0a 74  base file more.t
10f70 68 61 6e 20 6f 6e 63 65 20 72 65 73 75 6c 74 73  han once results
10f80 20 69 6e 20 61 6e 20 65 72 72 6f 72 2e 0a 0a 3c   in an error...<
10f90 70 3e 5e 54 68 69 73 20 73 74 61 74 65 6d 65 6e  p>^This statemen
10fa0 74 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20 53  t will fail if S
10fb0 51 4c 69 74 65 20 69 73 20 69 6e 20 74 68 65 20  QLite is in the 
10fc0 6d 69 64 64 6c 65 20 6f 66 20 61 20 74 72 61 6e  middle of a tran
10fd0 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 0a 3c  saction.</p>...<
10fe0 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
10ff0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11000 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11010 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11030 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f  ###.Section {DRO
11040 50 20 49 4e 44 45 58 7d 20 64 72 6f 70 69 6e 64  P INDEX} dropind
11050 65 78 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d  ex {{DROP INDEX}
11060 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  }..RecursiveBubb
11070 6c 65 44 69 61 67 72 61 6d 20 64 72 6f 70 2d 69  leDiagram drop-i
11080 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  ndex-stmt.</tcl>
11090 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50 20 49  ..<p>^The DROP I
110a0 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 72  NDEX statement r
110b0 65 6d 6f 76 65 73 20 61 6e 20 69 6e 64 65 78 20  emoves an index 
110c0 61 64 64 65 64 0a 77 69 74 68 20 74 68 65 20 5b  added.with the [
110d0 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20 73 74  CREATE INDEX] st
110e0 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 69 6e  atement.  The in
110f0 64 65 78 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c  dex is completel
11100 79 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 0a 74  y removed from.t
11110 68 65 20 64 69 73 6b 2e 20 20 54 68 65 20 6f 6e  he disk.  The on
11120 6c 79 20 77 61 79 20 74 6f 20 72 65 63 6f 76 65  ly way to recove
11130 72 20 74 68 65 20 69 6e 64 65 78 20 69 73 20 74  r the index is t
11140 6f 20 72 65 65 6e 74 65 72 20 74 68 65 0a 61 70  o reenter the.ap
11150 70 72 6f 70 72 69 61 74 65 20 5b 43 52 45 41 54  propriate [CREAT
11160 45 20 49 4e 44 45 58 5d 20 63 6f 6d 6d 61 6e 64  E INDEX] command
11170 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
11180 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11190 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
111a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
111b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
111c0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
111d0 69 6f 6e 20 7b 44 52 4f 50 20 54 41 42 4c 45 7d  ion {DROP TABLE}
111e0 20 64 72 6f 70 74 61 62 6c 65 20 7b 7b 44 52 4f   droptable {{DRO
111f0 50 20 54 41 42 4c 45 7d 7d 0a 0a 52 65 63 75 72  P TABLE}}..Recur
11200 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
11210 6d 20 64 72 6f 70 2d 74 61 62 6c 65 2d 73 74 6d  m drop-table-stm
11220 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  t.</tcl>..<p>^Th
11230 65 20 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61  e DROP TABLE sta
11240 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61  tement removes a
11250 20 74 61 62 6c 65 20 61 64 64 65 64 20 77 69 74   table added wit
11260 68 20 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41  h the.[CREATE TA
11270 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  BLE] statement. 
11280 20 54 68 65 20 6e 61 6d 65 20 73 70 65 63 69 66   The name specif
11290 69 65 64 20 69 73 20 74 68 65 0a 74 61 62 6c 65  ied is the.table
112a0 20 6e 61 6d 65 2e 20 20 5e 54 68 65 20 64 72 6f   name.  ^The dro
112b0 70 70 65 64 20 74 61 62 6c 65 20 69 73 20 63 6f  pped table is co
112c0 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64  mpletely removed
112d0 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
112e0 73 65 20 0a 73 63 68 65 6d 61 20 61 6e 64 20 74  se .schema and t
112f0 68 65 20 64 69 73 6b 20 66 69 6c 65 2e 20 20 54  he disk file.  T
11300 68 65 20 74 61 62 6c 65 20 63 61 6e 20 6e 6f 74  he table can not
11310 20 62 65 20 72 65 63 6f 76 65 72 65 64 2e 20 20   be recovered.  
11320 0a 5e 41 6c 6c 20 69 6e 64 69 63 65 73 20 61 6e  .^All indices an
11330 64 20 74 72 69 67 67 65 72 73 0a 61 73 73 6f 63  d triggers.assoc
11340 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74  iated with the t
11350 61 62 6c 65 20 61 72 65 20 61 6c 73 6f 20 64 65  able are also de
11360 6c 65 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  leted.</p>..<p>^
11370 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20  The optional IF 
11380 45 58 49 53 54 53 20 63 6c 61 75 73 65 20 73 75  EXISTS clause su
11390 70 70 72 65 73 73 65 73 20 74 68 65 20 65 72 72  ppresses the err
113a0 6f 72 20 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f  or that would no
113b0 72 6d 61 6c 6c 79 0a 72 65 73 75 6c 74 20 69 66  rmally.result if
113c0 20 74 68 65 20 74 61 62 6c 65 20 64 6f 65 73 20   the table does 
113d0 6e 6f 74 20 65 78 69 73 74 2e 3c 2f 70 3e 0a 0a  not exist.</p>..
113e0 3c 70 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20  <p>^If [foreign 
113f0 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d  key constraints]
11400 20 61 72 65 20 65 6e 61 62 6c 65 64 2c 20 61 20   are enabled, a 
11410 44 52 4f 50 20 54 41 42 4c 45 20 63 6f 6d 6d 61  DROP TABLE comma
11420 6e 64 20 70 65 72 66 6f 72 6d 73 20 61 6e 0a 69  nd performs an.i
11430 6d 70 6c 69 63 69 74 20 5b 44 45 4c 45 54 45 20  mplicit [DELETE 
11440 7c 20 44 45 4c 45 54 45 20 46 52 4f 4d 5d 20 63  | DELETE FROM] c
11450 6f 6d 6d 61 6e 64 20 62 65 66 6f 72 65 20 72 65  ommand before re
11460 6d 6f 76 69 6e 67 20 74 68 65 0a 74 61 62 6c 65  moving the.table
11470 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
11480 73 65 20 73 63 68 65 6d 61 2e 20 5e 41 6e 79 20  se schema. ^Any 
11490 74 72 69 67 67 65 72 73 20 61 74 74 61 63 68 65  triggers attache
114a0 64 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 61  d to the table a
114b0 72 65 0a 64 72 6f 70 70 65 64 20 66 72 6f 6d 20  re.dropped from 
114c0 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
114d0 65 6d 61 20 62 65 66 6f 72 65 20 74 68 65 20 69  ema before the i
114e0 6d 70 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46  mplicit DELETE F
114f0 52 4f 4d 0a 69 73 20 65 78 65 63 75 74 65 64 2c  ROM.is executed,
11500 20 73 6f 20 74 68 69 73 20 63 61 6e 6e 6f 74 20   so this cannot 
11510 63 61 75 73 65 20 61 6e 79 20 74 72 69 67 67 65  cause any trigge
11520 72 73 20 74 6f 20 66 69 72 65 2e 20 42 79 20 63  rs to fire. By c
11530 6f 6e 74 72 61 73 74 2c 20 5e 61 6e 0a 69 6d 70  ontrast, ^an.imp
11540 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f  licit DELETE FRO
11550 4d 20 64 6f 65 73 20 63 61 75 73 65 20 61 6e 79  M does cause any
11560 20 63 6f 6e 66 69 67 75 72 65 64 0a 5b 66 6f 72   configured.[for
11570 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e 73  eign key actions
11580 5d 20 74 6f 20 74 61 6b 65 20 70 6c 61 63 65 2e  ] to take place.
11590 20 0a 5e 49 66 20 74 68 65 20 69 6d 70 6c 69 63   .^If the implic
115a0 69 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 65  it DELETE FROM e
115b0 78 65 63 75 74 65 64 0a 61 73 20 70 61 72 74 20  xecuted.as part 
115c0 6f 66 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20  of a DROP TABLE 
115d0 63 6f 6d 6d 61 6e 64 20 76 69 6f 6c 61 74 65 73  command violates
115e0 20 61 6e 79 20 69 6d 6d 65 64 69 61 74 65 20 66   any immediate f
115f0 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
11600 72 61 69 6e 74 73 2c 0a 61 6e 20 65 72 72 6f 72  raints,.an error
11610 20 69 73 20 72 65 74 75 72 6e 65 64 20 61 6e 64   is returned and
11620 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 6e 6f   the table is no
11630 74 20 64 72 6f 70 70 65 64 2e 20 5e 49 66 20 0a  t dropped. ^If .
11640 74 68 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c  the implicit DEL
11650 45 54 45 20 46 52 4f 4d 20 63 61 75 73 65 73 20  ETE FROM causes 
11660 61 6e 79 20 0a 64 65 66 65 72 72 65 64 20 66 6f  any .deferred fo
11670 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
11680 61 69 6e 74 73 20 74 6f 20 62 65 20 76 69 6f 6c  aints to be viol
11690 61 74 65 64 2c 20 61 6e 64 20 74 68 65 20 76 69  ated, and the vi
116a0 6f 6c 61 74 69 6f 6e 73 20 73 74 69 6c 6c 0a 65  olations still.e
116b0 78 69 73 74 20 77 68 65 6e 20 74 68 65 20 74 72  xist when the tr
116c0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 63 6f 6d  ansaction is com
116d0 6d 69 74 74 65 64 2c 20 61 6e 20 65 72 72 6f 72  mitted, an error
116e0 20 69 73 20 72 65 74 75 72 6e 65 64 20 61 74 20   is returned at 
116f0 74 68 65 20 74 69 6d 65 0a 6f 66 20 63 6f 6d 6d  the time.of comm
11700 69 74 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  it...<tcl>.#####
11710 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11720 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11730 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11740 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11750 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
11760 6e 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d  n {DROP TRIGGER}
11770 20 64 72 6f 70 74 72 69 67 67 65 72 20 7b 7b 44   droptrigger {{D
11780 52 4f 50 20 54 52 49 47 47 45 52 7d 7d 0a 0a 52  ROP TRIGGER}}..R
11790 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
117a0 61 67 72 61 6d 20 64 72 6f 70 2d 74 72 69 67 67  agram drop-trigg
117b0 65 72 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  er-stmt.</tcl>..
117c0 3c 70 3e 5e 54 68 65 20 44 52 4f 50 20 54 52 49  <p>^The DROP TRI
117d0 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74 20 72  GGER statement r
117e0 65 6d 6f 76 65 73 20 61 20 74 72 69 67 67 65 72  emoves a trigger
117f0 20 63 72 65 61 74 65 64 20 62 79 20 74 68 65 20   created by the 
11800 0a 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52  .[CREATE TRIGGER
11810 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 4f 6e  ] statement. ^On
11820 63 65 20 72 65 6d 6f 76 65 64 2c 20 74 68 65 20  ce removed, the 
11830 74 72 69 67 67 65 72 20 64 65 66 69 6e 69 74 69  trigger definiti
11840 6f 6e 20 69 73 20 6e 6f 0a 6c 6f 6e 67 65 72 20  on is no.longer 
11850 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 73  present in the s
11860 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 28 6f 72  qlite_master (or
11870 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
11880 74 65 72 29 20 74 61 62 6c 65 20 61 6e 64 20 69  ter) table and i
11890 73 0a 6e 6f 74 20 66 69 72 65 64 20 62 79 20 61  s.not fired by a
118a0 6e 79 20 73 75 62 73 65 71 75 65 6e 74 20 49 4e  ny subsequent IN
118b0 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20  SERT, UPDATE or 
118c0 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
118d0 73 2e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61  s...<p>^Note tha
118e0 74 20 74 72 69 67 67 65 72 73 20 61 72 65 20 61  t triggers are a
118f0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 72 6f  utomatically dro
11900 70 70 65 64 20 77 68 65 6e 20 74 68 65 20 61 73  pped when the as
11910 73 6f 63 69 61 74 65 64 20 74 61 62 6c 65 20 69  sociated table i
11920 73 0a 64 72 6f 70 70 65 64 2e 0a 0a 3c 74 63 6c  s.dropped...<tcl
11930 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
11940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11970 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11980 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 56  .Section {DROP V
11990 49 45 57 7d 20 64 72 6f 70 76 69 65 77 20 7b 7b  IEW} dropview {{
119a0 44 52 4f 50 20 56 49 45 57 7d 7d 0a 0a 52 65 63  DROP VIEW}}..Rec
119b0 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
119c0 72 61 6d 20 64 72 6f 70 2d 76 69 65 77 2d 73 74  ram drop-view-st
119d0 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  mt.</tcl>..<p>^T
119e0 68 65 20 44 52 4f 50 20 56 49 45 57 20 73 74 61  he DROP VIEW sta
119f0 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61  tement removes a
11a00 20 76 69 65 77 20 63 72 65 61 74 65 64 20 62 79   view created by
11a10 20 74 68 65 20 5b 43 52 45 41 54 45 20 56 49 45   the [CREATE VIE
11a20 57 5d 20 0a 20 20 73 74 61 74 65 6d 65 6e 74 2e  W] .  statement.
11a30 20 5e 54 68 65 20 76 69 65 77 20 64 65 66 69 6e   ^The view defin
11a40 69 74 69 6f 6e 20 69 73 20 72 65 6d 6f 76 65 64  ition is removed
11a50 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
11a60 73 65 20 73 63 68 65 6d 61 2c 20 62 75 74 20 0a  se schema, but .
11a70 20 20 6e 6f 20 61 63 74 75 61 6c 20 64 61 74 61    no actual data
11a80 20 69 6e 20 74 68 65 20 75 6e 64 65 72 6c 79 69   in the underlyi
11a90 6e 67 20 62 61 73 65 20 74 61 62 6c 65 73 20 69  ng base tables i
11aa0 73 20 6d 6f 64 69 66 69 65 64 2e 0a 0a 3c 70 3e  s modified...<p>
11ab0 5e 28 54 68 65 20 76 69 65 77 20 74 6f 20 64 72  ^(The view to dr
11ac0 6f 70 20 69 73 20 69 64 65 6e 74 69 66 69 65 64  op is identified
11ad0 20 62 79 20 74 68 65 20 76 69 65 77 2d 6e 61 6d   by the view-nam
11ae0 65 20 61 6e 64 20 6f 70 74 69 6f 6e 61 6c 20 0a  e and optional .
11af0 20 20 73 63 68 65 6d 61 2d 6e 61 6d 65 20 73 70    schema-name sp
11b00 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
11b10 6f 66 20 74 68 65 20 44 52 4f 50 20 56 49 45 57  of the DROP VIEW
11b20 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 69 73   statement. This
11b30 20 0a 20 20 72 65 66 65 72 65 6e 63 65 20 69 73   .  reference is
11b40 20 72 65 73 6f 6c 76 65 64 20 75 73 69 6e 67 20   resolved using 
11b50 74 68 65 20 73 74 61 6e 64 61 72 64 20 70 72 6f  the standard pro
11b60 63 65 64 75 72 65 20 66 6f 72 20 5b 6f 62 6a 65  cedure for [obje
11b70 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 5d 2e 29  ct resolution].)
11b80 5e 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 74 68 65  ^..<p>.  ^If the
11b90 20 73 70 65 63 69 66 69 65 64 20 76 69 65 77 20   specified view 
11ba0 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64 20  cannot be found 
11bb0 61 6e 64 20 74 68 65 20 49 46 20 45 58 49 53 54  and the IF EXIST
11bc0 53 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20  S clause is not 
11bd0 0a 20 20 70 72 65 73 65 6e 74 2c 20 69 74 20 69  .  present, it i
11be0 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e 49 66 20  s an error. ^If 
11bf0 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 69  the specified vi
11c00 65 77 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75  ew cannot be fou
11c10 6e 64 20 61 6e 64 20 61 6e 20 49 46 0a 20 20 45  nd and an IF.  E
11c20 58 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20  XISTS clause is 
11c30 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 44  present in the D
11c40 52 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d 65  ROP VIEW stateme
11c50 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 73 74 61  nt, then the sta
11c60 74 65 6d 65 6e 74 0a 20 20 69 73 20 61 20 6e 6f  tement.  is a no
11c70 2d 6f 70 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23  -op....<tcl>.###
11c80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11c90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11ca0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11cb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11cc0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
11cd0 69 6f 6e 20 7b 44 61 74 61 62 61 73 65 20 4f 62  ion {Database Ob
11ce0 6a 65 63 74 20 4e 61 6d 65 20 52 65 73 6f 6c 75  ject Name Resolu
11cf0 74 69 6f 6e 7d 20 7b 6e 61 6d 69 6e 67 7d 20 7b  tion} {naming} {
11d00 7b 6f 62 6a 65 63 74 20 72 65 73 6f 6c 75 74 69  {object resoluti
11d10 6f 6e 7d 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  on}}.</tcl>..<p>
11d20 0a 20 20 49 6e 20 53 51 4c 69 74 65 2c 20 61 20  .  In SQLite, a 
11d30 64 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74 20  database object 
11d40 28 61 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c  (a table, index,
11d50 20 74 72 69 67 67 65 72 20 6f 72 20 76 69 65 77   trigger or view
11d60 29 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 0a  ) is identified.
11d70 20 20 62 79 20 74 68 65 20 6e 61 6d 65 20 6f 66    by the name of
11d80 20 74 68 65 20 6f 62 6a 65 63 74 20 61 6e 64 20   the object and 
11d90 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
11da0 64 61 74 61 62 61 73 65 20 74 68 61 74 20 69 74  database that it
11db0 20 72 65 73 69 64 65 73 20 69 6e 2e 20 0a 20 20   resides in. .  
11dc0 44 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74 73  Database objects
11dd0 20 6d 61 79 20 72 65 73 69 64 65 20 69 6e 20 74   may reside in t
11de0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
11df0 2c 20 74 68 65 20 74 65 6d 70 20 64 61 74 61 62  , the temp datab
11e00 61 73 65 2c 20 6f 72 20 69 6e 0a 20 20 61 6e 20  ase, or in.  an 
11e10 5b 41 54 54 41 43 48 7c 61 74 74 61 63 68 65 64  [ATTACH|attached
11e20 20 64 61 74 61 62 61 73 65 5d 2e 0a 0a 3c 70 3e   database]...<p>
11e30 0a 20 20 54 68 65 20 73 79 6e 74 61 78 20 6f 66  .  The syntax of
11e40 20 74 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45   the [DROP TABLE
11e50 5d 2c 20 5b 44 52 4f 50 20 49 4e 44 45 58 5d 2c  ], [DROP INDEX],
11e60 20 5b 44 52 4f 50 20 56 49 45 57 5d 2c 20 5b 44   [DROP VIEW], [D
11e70 52 4f 50 20 54 52 49 47 47 45 52 5d 2c 0a 20 20  ROP TRIGGER],.  
11e80 5b 52 45 49 4e 44 45 58 5d 2c 20 5b 41 4c 54 45  [REINDEX], [ALTE
11e90 52 20 54 41 42 4c 45 5d 20 61 6e 64 20 6d 61 6e  R TABLE] and man
11ea0 79 20 6f 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73  y other commands
11eb0 20 61 6c 6c 20 70 65 72 6d 69 74 20 74 68 65 20   all permit the 
11ec0 75 73 65 72 20 74 6f 0a 20 20 73 70 65 63 69 66  user to.  specif
11ed0 79 20 61 20 64 61 74 61 62 61 73 65 20 6f 62 6a  y a database obj
11ee0 65 63 74 20 65 69 74 68 65 72 20 62 79 20 69 74  ect either by it
11ef0 73 20 6e 61 6d 65 20 61 6c 6f 6e 65 2c 20 6f 72  s name alone, or
11f00 20 62 79 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f   by a combinatio
11f10 6e 20 6f 66 0a 20 20 69 74 73 20 6e 61 6d 65 20  n of.  its name 
11f20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  and the name of 
11f30 69 74 73 20 64 61 74 61 62 61 73 65 2e 20 5e 28  its database. ^(
11f40 49 66 20 6e 6f 20 64 61 74 61 62 61 73 65 20 69  If no database i
11f50 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  s specified as p
11f60 61 72 74 0a 20 20 6f 66 20 74 68 65 20 6f 62 6a  art.  of the obj
11f70 65 63 74 20 72 65 66 65 72 65 6e 63 65 2c 20 74  ect reference, t
11f80 68 65 6e 20 53 51 4c 69 74 65 20 73 65 61 72 63  hen SQLite searc
11f90 68 65 73 20 74 68 65 20 6d 61 69 6e 2c 20 74 65  hes the main, te
11fa0 6d 70 20 61 6e 64 20 61 6c 6c 20 61 74 74 61 63  mp and all attac
11fb0 68 65 64 0a 20 20 64 61 74 61 62 61 73 65 73 20  hed.  databases 
11fc0 66 6f 72 20 61 6e 20 6f 62 6a 65 63 74 20 77 69  for an object wi
11fd0 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e 61  th a matching na
11fe0 6d 65 2e 20 54 68 65 20 74 65 6d 70 20 64 61 74  me. The temp dat
11ff0 61 62 61 73 65 20 69 73 20 73 65 61 72 63 68 65  abase is searche
12000 64 0a 20 20 66 69 72 73 74 2c 20 66 6f 6c 6c 6f  d.  first, follo
12010 77 65 64 20 62 79 20 74 68 65 20 6d 61 69 6e 20  wed by the main 
12020 64 61 74 61 62 61 73 65 2c 20 66 6f 6c 6c 6f 77  database, follow
12030 65 64 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  ed all attached 
12040 64 61 74 61 62 61 73 65 73 20 69 6e 20 74 68 65  databases in the
12050 0a 20 20 6f 72 64 65 72 20 74 68 61 74 20 74 68  .  order that th
12060 65 79 20 77 65 72 65 20 61 74 74 61 63 68 65 64  ey were attached
12070 2e 20 54 68 65 20 72 65 66 65 72 65 6e 63 65 20  . The reference 
12080 72 65 73 6f 6c 76 65 73 20 74 6f 20 74 68 65 20  resolves to the 
12090 66 69 72 73 74 20 6d 61 74 63 68 0a 20 20 66 6f  first match.  fo
120a0 75 6e 64 2e 29 5e 20 46 6f 72 20 65 78 61 6d 70  und.)^ For examp
120b0 6c 65 3a 0a 0a 3c 70 72 65 3e 5e 28 0a 20 20 20  le:..<pre>^(.   
120c0 20 20 20 2f 2a 20 41 64 64 20 61 20 74 61 62 6c     /* Add a tabl
120d0 65 20 6e 61 6d 65 64 20 27 74 31 27 20 74 6f 20  e named 't1' to 
120e0 74 68 65 20 74 65 6d 70 2c 20 6d 61 69 6e 20 61  the temp, main a
120f0 6e 64 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  nd an attached d
12100 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20  atabase */.     
12110 20 41 54 54 41 43 48 20 27 66 69 6c 65 2e 64 62   ATTACH 'file.db
12120 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20 20 20  ' AS aux;.      
12130 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
12140 78 2c 20 79 29 3b 0a 20 20 20 20 20 20 43 52 45  x, y);.      CRE
12150 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74  ATE TEMP TABLE t
12160 31 28 78 2c 20 79 29 3b 0a 20 20 20 20 20 20 43  1(x, y);.      C
12170 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78 2e  REATE TABLE aux.
12180 74 31 28 78 2c 20 79 29 3b 0a 0a 20 20 20 20 20  t1(x, y);..     
12190 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20   DROP TABLE t1; 
121a0 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20          /* Drop 
121b0 74 61 62 6c 65 20 69 6e 20 74 65 6d 70 20 64 61  table in temp da
121c0 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20  tabase */.      
121d0 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20  DROP TABLE t1;  
121e0 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74         /* Drop t
121f0 61 62 6c 65 20 69 6e 20 6d 61 69 6e 20 64 61 74  able in main dat
12200 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 44  abase */.      D
12210 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20  ROP TABLE t1;   
12220 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61        /* Drop ta
12230 62 6c 65 20 69 6e 20 61 75 78 20 64 61 74 61 62  ble in aux datab
12240 61 73 65 20 2a 2f 0a 29 5e 3c 2f 70 72 65 3e 0a  ase */.)^</pre>.
12250 0a 3c 70 3e 0a 20 20 5e 49 66 20 61 20 73 63 68  .<p>.  ^If a sch
12260 65 6d 61 20 6e 61 6d 65 20 69 73 20 73 70 65 63  ema name is spec
12270 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
12280 20 61 6e 20 6f 62 6a 65 63 74 20 72 65 66 65 72   an object refer
12290 65 6e 63 65 2c 20 69 74 20 6d 75 73 74 20 62 65  ence, it must be
122a0 0a 20 20 65 69 74 68 65 72 20 22 6d 61 69 6e 22  .  either "main"
122b0 2c 20 6f 72 20 22 74 65 6d 70 22 20 6f 72 20 74  , or "temp" or t
122c0 68 65 20 73 63 68 65 6d 61 2d 6e 61 6d 65 20 6f  he schema-name o
122d0 66 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  f an attached da
122e0 74 61 62 61 73 65 2e 0a 20 20 5e 4c 69 6b 65 20  tabase..  ^Like 
122f0 6f 74 68 65 72 20 53 51 4c 20 69 64 65 6e 74 69  other SQL identi
12300 66 69 65 72 73 2c 20 73 63 68 65 6d 61 20 6e 61  fiers, schema na
12310 6d 65 73 20 61 72 65 20 63 61 73 65 2d 69 6e 73  mes are case-ins
12320 65 6e 73 69 74 69 76 65 2e 0a 20 20 5e 49 66 20  ensitive..  ^If 
12330 61 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 69 73  a schema name is
12340 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e   specified, then
12350 20 6f 6e 6c 79 20 74 68 61 74 20 6f 6e 65 20 73   only that one s
12360 63 68 65 6d 61 20 69 73 20 73 65 61 72 63 68 65  chema is searche
12370 64 20 66 6f 72 0a 20 20 74 68 65 20 6e 61 6d 65  d for.  the name
12380 64 20 6f 62 6a 65 63 74 2e 0a 0a 3c 70 3e 0a 20  d object...<p>. 
12390 20 4d 6f 73 74 20 6f 62 6a 65 63 74 20 72 65 66   Most object ref
123a0 65 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79  erences may only
123b0 20 72 65 73 6f 6c 76 65 20 74 6f 20 61 20 73 70   resolve to a sp
123c0 65 63 69 66 69 63 20 74 79 70 65 20 6f 66 20 6f  ecific type of o
123d0 62 6a 65 63 74 20 28 66 6f 72 0a 20 20 65 78 61  bject (for.  exa
123e0 6d 70 6c 65 20 61 20 72 65 66 65 72 65 6e 63 65  mple a reference
123f0 20 74 68 61 74 20 69 73 20 70 61 72 74 20 6f 66   that is part of
12400 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 73 74   a DROP TABLE st
12410 61 74 65 6d 65 6e 74 20 6d 61 79 20 6f 6e 6c 79  atement may only
12420 20 72 65 73 6f 6c 76 65 0a 20 20 74 6f 20 61 20   resolve.  to a 
12430 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 6e 6f  table object, no
12440 74 20 61 6e 20 69 6e 64 65 78 2c 20 74 72 69 67  t an index, trig
12450 67 65 72 20 6f 72 20 76 69 65 77 29 2e 20 48 6f  ger or view). Ho
12460 77 65 76 65 72 20 69 6e 20 73 6f 6d 65 20 63 6f  wever in some co
12470 6e 74 65 78 74 73 20 0a 20 20 28 65 2e 67 2e 20  ntexts .  (e.g. 
12480 5b 52 45 49 4e 44 45 58 5d 29 20 61 6e 20 6f 62  [REINDEX]) an ob
12490 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 20 6d  ject reference m
124a0 61 79 20 62 65 20 72 65 73 6f 6c 76 65 20 74 6f  ay be resolve to
124b0 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 74   more than one t
124c0 79 70 65 0a 20 20 6f 66 20 6f 62 6a 65 63 74 2e  ype.  of object.
124d0 20 5e 57 68 65 6e 20 73 65 61 72 63 68 69 6e 67   ^When searching
124e0 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
124f0 73 20 66 6f 72 20 61 20 6e 61 6d 65 64 20 6f 62  s for a named ob
12500 6a 65 63 74 2c 20 6f 62 6a 65 63 74 73 20 6f 66  ject, objects of
12510 0a 20 20 74 79 70 65 73 20 74 68 61 74 20 63 61  .  types that ca
12520 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 69 6e 20  nnot be used in 
12530 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 74  the context of t
12540 68 65 20 72 65 66 65 72 65 6e 63 65 20 61 72 65  he reference are
12550 20 61 6c 77 61 79 73 20 0a 20 20 69 67 6e 6f 72   always .  ignor
12560 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  ed...<tcl>.#####
12570 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12580 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12590 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
125a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
125b0 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
125c0 6e 20 45 58 50 4c 41 49 4e 20 65 78 70 6c 61 69  n EXPLAIN explai
125d0 6e 20 45 58 50 4c 41 49 4e 0a 0a 42 75 62 62 6c  n EXPLAIN..Bubbl
125e0 65 44 69 61 67 72 61 6d 20 73 71 6c 2d 73 74 6d  eDiagram sql-stm
125f0 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e  t.</tcl>..<p>^An
12600 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 63   SQL statement c
12610 61 6e 20 62 65 20 70 72 65 63 65 64 65 64 20 62  an be preceded b
12620 79 20 74 68 65 20 6b 65 79 77 6f 72 64 20 22 45  y the keyword "E
12630 58 50 4c 41 49 4e 22 20 6f 72 0a 62 79 20 74 68  XPLAIN" or.by th
12640 65 20 70 68 72 61 73 65 20 22 45 58 50 4c 41 49  e phrase "EXPLAI
12650 4e 20 51 55 45 52 59 20 50 4c 41 4e 22 2e 20 20  N QUERY PLAN".  
12660 5e 45 69 74 68 65 72 20 6d 6f 64 69 66 69 63 61  ^Either modifica
12670 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 0a  tion causes the.
12680 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 6f  SQL statement to
12690 20 62 65 68 61 76 65 20 61 73 20 61 20 71 75 65   behave as a que
126a0 72 79 20 61 6e 64 20 74 6f 20 72 65 74 75 72 6e  ry and to return
126b0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
126c0 75 74 0a 68 6f 77 20 74 68 65 20 53 51 4c 20 73  ut.how the SQL s
126d0 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68  tatement would h
126e0 61 76 65 20 6f 70 65 72 61 74 65 64 20 69 66 20  ave operated if 
126f0 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77  the EXPLAIN keyw
12700 6f 72 64 20 6f 72 0a 70 68 72 61 73 65 20 68 61  ord or.phrase ha
12710 64 20 62 65 65 6e 20 6f 6d 69 74 74 65 64 2e 3c  d been omitted.<
12720 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70  /p>..<p>The outp
12730 75 74 20 66 72 6f 6d 20 45 58 50 4c 41 49 4e 20  ut from EXPLAIN 
12740 61 6e 64 20 45 58 50 4c 41 49 4e 20 51 55 45 52  and EXPLAIN QUER
12750 59 20 50 4c 41 4e 20 69 73 20 69 6e 74 65 6e 64  Y PLAN is intend
12760 65 64 20 66 6f 72 0a 69 6e 74 65 72 61 63 74 69  ed for.interacti
12770 76 65 20 61 6e 61 6c 79 73 69 73 20 61 6e 64 20  ve analysis and 
12780 74 72 6f 75 62 6c 65 73 68 6f 6f 74 69 6e 67 20  troubleshooting 
12790 6f 6e 6c 79 2e 20 20 54 68 65 20 64 65 74 61 69  only.  The detai
127a0 6c 73 20 6f 66 20 74 68 65 20 0a 6f 75 74 70 75  ls of the .outpu
127b0 74 20 66 6f 72 6d 61 74 20 61 72 65 20 73 75 62  t format are sub
127c0 6a 65 63 74 20 74 6f 20 63 68 61 6e 67 65 20 66  ject to change f
127d0 72 6f 6d 20 6f 6e 65 20 72 65 6c 65 61 73 65 20  rom one release 
127e0 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 74 68 65  of SQLite to the
127f0 20 6e 65 78 74 2e 0a 41 70 70 6c 69 63 61 74 69   next..Applicati
12800 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74 20 75  ons should not u
12810 73 65 20 45 58 50 4c 41 49 4e 20 6f 72 20 45 58  se EXPLAIN or EX
12820 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
12830 20 73 69 6e 63 65 0a 74 68 65 69 72 20 65 78 61   since.their exa
12840 63 74 20 62 65 68 61 76 69 6f 72 20 69 73 20 76  ct behavior is v
12850 61 72 69 61 62 6c 65 20 61 6e 64 20 6f 6e 6c 79  ariable and only
12860 20 70 61 72 74 69 61 6c 6c 79 20 64 6f 63 75 6d   partially docum
12870 65 6e 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ented.</p>..<p>^
12880 57 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e  When the EXPLAIN
12890 20 6b 65 79 77 6f 72 64 20 61 70 70 65 61 72 73   keyword appears
128a0 20 62 79 20 69 74 73 65 6c 66 20 69 74 20 63 61   by itself it ca
128b0 75 73 65 73 20 74 68 65 20 73 74 61 74 65 6d 65  uses the stateme
128c0 6e 74 0a 74 6f 20 62 65 68 61 76 65 20 61 73 20  nt.to behave as 
128d0 61 20 71 75 65 72 79 20 74 68 61 74 20 72 65 74  a query that ret
128e0 75 72 6e 73 20 74 68 65 20 73 65 71 75 65 6e 63  urns the sequenc
128f0 65 20 6f 66 20 0a 5b 76 69 72 74 75 61 6c 20 6d  e of .[virtual m
12900 61 63 68 69 6e 65 20 69 6e 73 74 72 75 63 74 69  achine instructi
12910 6f 6e 73 5d 20 69 74 20 77 6f 75 6c 64 20 68 61  ons] it would ha
12920 76 65 20 75 73 65 64 20 74 6f 20 65 78 65 63 75  ve used to execu
12930 74 65 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 68  te the command h
12940 61 64 0a 74 68 65 20 45 58 50 4c 41 49 4e 20 6b  ad.the EXPLAIN k
12950 65 79 77 6f 72 64 20 6e 6f 74 20 62 65 65 6e 20  eyword not been 
12960 70 72 65 73 65 6e 74 2e 20 5e 57 68 65 6e 20 74  present. ^When t
12970 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  he EXPLAIN QUERY
12980 20 50 4c 41 4e 20 70 68 72 61 73 65 0a 61 70 70   PLAN phrase.app
12990 65 61 72 73 2c 20 74 68 65 20 73 74 61 74 65 6d  ears, the statem
129a0 65 6e 74 20 72 65 74 75 72 6e 73 20 68 69 67 68  ent returns high
129b0 2d 6c 65 76 65 6c 20 69 6e 66 6f 72 6d 61 74 69  -level informati
129c0 6f 6e 20 72 65 67 61 72 64 69 6e 67 20 74 68 65  on regarding the
129d0 20 71 75 65 72 79 0a 70 6c 61 6e 20 74 68 61 74   query.plan that
129e0 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e   would have been
129f0 20 75 73 65 64 2e 0a 0a 54 68 65 20 45 58 50 4c   used...The EXPL
12a00 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 63  AIN QUERY PLAN c
12a10 6f 6d 6d 61 6e 64 20 69 73 20 64 65 73 63 72 69  ommand is descri
12a20 62 65 64 20 69 6e 20 0a 5b 65 78 70 6c 61 69 6e  bed in .[explain
12a30 20 71 75 65 72 79 20 70 6c 61 6e 7c 6d 6f 72 65   query plan|more
12a40 20 64 65 74 61 69 6c 20 68 65 72 65 5d 2e 0a 0a   detail here]...
12a50 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
12a60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12a70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12a80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12a90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12aa0 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 65 78 70  ####.Section exp
12ab0 72 65 73 73 69 6f 6e 20 65 78 70 72 20 7b 2a 65  ression expr {*e
12ac0 78 70 72 65 73 73 69 6f 6e 20 7b 65 78 70 72 65  xpression {expre
12ad0 73 73 69 6f 6e 20 73 79 6e 74 61 78 7d 7d 0a 0a  ssion syntax}}..
12ae0 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
12af0 69 61 67 72 61 6d 20 65 78 70 72 0a 3c 2f 74 63  iagram expr.</tc
12b00 6c 3e 0a 0a 3c 70 3e 54 68 69 73 20 73 65 63 74  l>..<p>This sect
12b10 69 6f 6e 20 69 73 20 64 69 66 66 65 72 65 6e 74  ion is different
12b20 20 66 72 6f 6d 20 74 68 65 20 6f 74 68 65 72 73   from the others
12b30 2e 20 20 4d 6f 73 74 20 6f 74 68 65 72 20 73 65  .  Most other se
12b40 63 74 69 6f 6e 73 20 6f 66 0a 74 68 69 73 20 64  ctions of.this d
12b50 6f 63 75 6d 65 6e 74 20 74 61 6c 6b 73 20 61 62  ocument talks ab
12b60 6f 75 74 20 61 20 70 61 72 74 69 63 75 6c 61 72  out a particular
12b70 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 54   SQL command.  T
12b80 68 69 73 20 73 65 63 74 69 6f 6e 20 64 6f 65 73  his section does
12b90 0a 6e 6f 74 20 74 61 6c 6b 20 61 62 6f 75 74 20  .not talk about 
12ba0 61 20 73 74 61 6e 64 61 6c 6f 6e 65 20 63 6f 6d  a standalone com
12bb0 6d 61 6e 64 20 62 75 74 20 61 62 6f 75 74 20 22  mand but about "
12bc0 65 78 70 72 65 73 73 69 6f 6e 73 22 20 77 68 69  expressions" whi
12bd0 63 68 20 61 72 65 20 0a 73 75 62 63 6f 6d 70 6f  ch are .subcompo
12be0 6e 65 6e 74 73 20 6f 66 20 6d 6f 73 74 20 6f 74  nents of most ot
12bf0 68 65 72 20 63 6f 6d 6d 61 6e 64 73 2e 3c 2f 70  her commands.</p
12c00 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
12c10 65 6e 74 20 62 69 6e 61 72 79 6f 70 73 20 7b 62  ent binaryops {b
12c20 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 73 7d  inary operators}
12c30 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 70 65 72 61  </tcl>.<h3>Opera
12c40 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 53  tors</h3>.<p>^(S
12c50 51 4c 69 74 65 20 75 6e 64 65 72 73 74 61 6e 64  QLite understand
12c60 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  s the following 
12c70 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 73  binary operators
12c80 2c 20 69 6e 20 6f 72 64 65 72 20 66 72 6f 6d 0a  , in order from.
12c90 68 69 67 68 65 73 74 20 74 6f 20 6c 6f 77 65 73  highest to lowes
12ca0 74 20 70 72 65 63 65 64 65 6e 63 65 3a 3c 2f 70  t precedence:</p
12cb0 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  >..<blockquote><
12cc0 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72  pre>.<font color
12cd0 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69 67 3e  ="#2c2cf0"><big>
12ce0 7c 7c 0a 2a 20 20 20 20 2f 20 20 20 20 25 0a 2b  ||.*    /    %.+
12cf0 20 20 20 20 2d 0a 26 6c 74 3b 26 6c 74 3b 20 20      -.&lt;&lt;  
12d00 20 26 67 74 3b 26 67 74 3b 20 20 20 26 61 6d 70   &gt;&gt;   &amp
12d10 3b 20 20 20 20 7c 0a 26 6c 74 3b 20 20 20 20 26  ;    |.&lt;    &
12d20 6c 74 3b 3d 20 20 20 26 67 74 3b 20 20 20 20 26  lt;=   &gt;    &
12d30 67 74 3b 3d 0a 3d 20 20 20 20 3d 3d 20 20 20 21  gt;=.=    ==   !
12d40 3d 20 20 20 26 6c 74 3b 26 67 74 3b 20 20 20 3c  =   &lt;&gt;   <
12d50 2f 62 69 67 3e 49 53 20 20 20 49 53 20 4e 4f 54  /big>IS   IS NOT
12d60 20 20 20 49 4e 20 20 20 4c 49 4b 45 20 20 20 47     IN   LIKE   G
12d70 4c 4f 42 20 20 20 4d 41 54 43 48 20 20 20 52 45  LOB   MATCH   RE
12d80 47 45 58 50 0a 41 4e 44 20 20 20 0a 4f 52 3c 2f  GEXP.AND   .OR</
12d90 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  font>.</pre></bl
12da0 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e  ockquote>)^..<p>
12db0 5e 28 53 75 70 70 6f 72 74 65 64 20 75 6e 61 72  ^(Supported unar
12dc0 79 20 70 72 65 66 69 78 20 6f 70 65 72 61 74 6f  y prefix operato
12dd0 72 73 20 61 72 65 20 74 68 65 73 65 3a 3c 2f 70  rs are these:</p
12de0 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  >..<blockquote><
12df0 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72  pre>.<font color
12e00 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69 67 3e  ="#2c2cf0"><big>
12e10 2d 20 20 20 20 2b 20 20 20 20 7e 20 20 20 20 4e  -    +    ~    N
12e20 4f 54 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e 0a  OT</big></font>.
12e30 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
12e40 74 65 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  te>)^..<tcl>hd_f
12e50 72 61 67 6d 65 6e 74 20 63 6f 6c 6c 61 74 65 6f  ragment collateo
12e60 70 20 7b 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61  p {COLLATE opera
12e70 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54  tor}</tcl>.<p>^T
12e80 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61  he COLLATE opera
12e90 74 6f 72 20 69 73 20 61 20 75 6e 61 72 79 20 70  tor is a unary p
12ea0 6f 73 74 66 69 78 0a 6f 70 65 72 61 74 6f 72 20  ostfix.operator 
12eb0 74 68 61 74 20 61 73 73 69 67 6e 73 20 61 20 5b  that assigns a [
12ec0 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
12ed0 63 65 5d 20 74 6f 20 61 6e 20 65 78 70 72 65 73  ce] to an expres
12ee0 73 69 6f 6e 2e 0a 5e 54 68 65 20 43 4f 4c 4c 41  sion..^The COLLA
12ef0 54 45 20 6f 70 65 72 61 74 6f 72 20 68 61 73 20  TE operator has 
12f00 61 20 68 69 67 68 65 72 20 70 72 65 63 65 64 65  a higher precede
12f10 6e 63 65 20 28 62 69 6e 64 73 20 6d 6f 72 65 20  nce (binds more 
12f20 74 69 67 68 74 6c 79 29 20 74 68 61 6e 20 61 6e  tightly) than an
12f30 79 0a 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  y.binary operato
12f40 72 20 61 6e 64 20 61 6e 79 20 75 6e 61 72 79 20  r and any unary 
12f50 70 72 65 66 69 78 20 6f 70 65 72 61 74 6f 72 20  prefix operator 
12f60 65 78 63 65 70 74 20 22 7e 22 2e 0a 28 43 4f 4c  except "~"..(COL
12f70 4c 41 54 45 20 61 6e 64 20 22 7e 22 20 61 72 65  LATE and "~" are
12f80 20 61 73 73 6f 63 69 61 74 69 76 65 20 73 6f 20   associative so 
12f90 74 68 65 69 72 20 62 69 6e 64 69 6e 67 20 6f 72  their binding or
12fa0 64 65 72 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74  der does not mat
12fb0 74 65 72 2e 29 0a 5e 54 68 65 20 63 6f 6c 6c 61  ter.).^The colla
12fc0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 73 65  ting sequence se
12fd0 74 20 62 79 20 74 68 65 20 43 4f 4c 4c 41 54 45  t by the COLLATE
12fe0 20 6f 70 65 72 61 74 6f 72 20 6f 76 65 72 72 69   operator overri
12ff0 64 65 73 20 74 68 65 0a 63 6f 6c 6c 61 74 69 6e  des the.collatin
13000 67 20 73 65 71 75 65 6e 63 65 20 64 65 74 65 72  g sequence deter
13010 6d 69 6e 65 64 20 62 79 20 74 68 65 20 43 4f 4c  mined by the COL
13020 4c 41 54 45 20 63 6c 61 75 73 65 20 69 6e 20 61  LATE clause in a
13030 20 74 61 62 6c 65 0a 5b 63 6f 6c 75 6d 6e 20 64   table.[column d
13040 65 66 69 6e 69 74 69 6f 6e 5d 2e 0a 53 65 65 20  efinition]..See 
13050 74 68 65 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 73  the [collating s
13060 65 71 75 65 6e 63 65 7c 20 64 65 74 61 69 6c 65  equence| detaile
13070 64 20 64 69 73 63 75 73 73 69 6f 6e 20 6f 6e 20  d discussion on 
13080 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
13090 63 65 73 5d 0a 69 6e 20 74 68 65 20 5b 64 61 74  ces].in the [dat
130a0 61 74 79 70 65 20 7c 20 44 61 74 61 74 79 70 65  atype | Datatype
130b0 20 49 6e 20 53 51 4c 69 74 65 33 5d 20 64 6f 63   In SQLite3] doc
130c0 75 6d 65 6e 74 20 66 6f 72 20 61 64 64 69 74 69  ument for additi
130d0 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
130e0 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  ..</p>..<tcl>hd_
130f0 70 75 74 73 20 22 0a 3c 70 3e 5e 54 68 65 20 75  puts ".<p>^The u
13100 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20 5b 4f  nary operator [O
13110 70 65 72 61 74 6f 72 20 2b 5d 20 69 73 20 61 20  perator +] is a 
13120 6e 6f 2d 6f 70 2e 20 20 5e 49 74 20 63 61 6e 20  no-op.  ^It can 
13130 62 65 20 61 70 70 6c 69 65 64 0a 74 6f 20 73 74  be applied.to st
13140 72 69 6e 67 73 2c 20 6e 75 6d 62 65 72 73 2c 20  rings, numbers, 
13150 62 6c 6f 62 73 20 6f 72 20 4e 55 4c 4c 20 61 6e  blobs or NULL an
13160 64 20 69 74 20 61 6c 77 61 79 73 20 72 65 74 75  d it always retu
13170 72 6e 73 20 61 20 72 65 73 75 6c 74 0a 77 69 74  rns a result.wit
13180 68 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  h the same value
13190 20 61 73 20 74 68 65 20 6f 70 65 72 61 6e 64 2e   as the operand.
131a0 3c 2f 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  </p>"</tcl>..<p>
131b0 4e 6f 74 65 20 74 68 61 74 20 74 68 65 72 65 20  Note that there 
131c0 61 72 65 20 74 77 6f 20 76 61 72 69 61 74 69 6f  are two variatio
131d0 6e 73 20 6f 66 20 74 68 65 20 65 71 75 61 6c 73  ns of the equals
131e0 20 61 6e 64 20 6e 6f 74 20 65 71 75 61 6c 73 0a   and not equals.
131f0 6f 70 65 72 61 74 6f 72 73 2e 20 20 5e 45 71 75  operators.  ^Equ
13200 61 6c 73 20 63 61 6e 20 62 65 20 65 69 74 68 65  als can be eithe
13210 72 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 70 75 74 73  r..<tcl>.hd_puts
13220 20 22 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 20 6f   "[Operator =] o
13230 72 20 5b 4f 70 65 72 61 74 6f 72 20 3d 3d 5d 2e  r [Operator ==].
13240 0a 5e 54 68 65 20 6e 6f 6e 2d 65 71 75 61 6c 73  .^The non-equals
13250 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20 62 65   operator can be
13260 20 65 69 74 68 65 72 0a 5b 4f 70 65 72 61 74 6f   either.[Operato
13270 72 20 21 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74  r !=] or [Operat
13280 6f 72 20 7b 26 6c 74 3b 26 67 74 3b 7d 5d 2e 0a  or {&lt;&gt;}]..
13290 5e 54 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c  ^The [Operator |
132a0 7c 5d 20 6f 70 65 72 61 74 6f 72 20 69 73 20 5c  |] operator is \
132b0 22 63 6f 6e 63 61 74 65 6e 61 74 65 5c 22 20 2d  "concatenate\" -
132c0 20 69 74 20 6a 6f 69 6e 73 20 74 6f 67 65 74 68   it joins togeth
132d0 65 72 0a 74 68 65 20 74 77 6f 20 73 74 72 69 6e  er.the two strin
132e0 67 73 20 6f 66 20 69 74 73 20 6f 70 65 72 61 6e  gs of its operan
132f0 64 73 2e 0a 5e 54 68 65 20 6f 70 65 72 61 74 6f  ds..^The operato
13300 72 20 5b 4f 70 65 72 61 74 6f 72 20 25 5d 20 6f  r [Operator %] o
13310 75 74 70 75 74 73 20 74 68 65 20 76 61 6c 75 65  utputs the value
13320 20 6f 66 20 69 74 73 20 6c 65 66 74 20 0a 6f 70   of its left .op
13330 65 72 61 6e 64 20 6d 6f 64 75 6c 6f 20 69 74 73  erand modulo its
13340 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 2e 3c   right operand.<
13350 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 72 65 73  /p>..<p>^The res
13360 75 6c 74 20 6f 66 20 61 6e 79 20 62 69 6e 61 72  ult of any binar
13370 79 20 6f 70 65 72 61 74 6f 72 20 69 73 20 65 69  y operator is ei
13380 74 68 65 72 20 61 20 6e 75 6d 65 72 69 63 20 76  ther a numeric v
13390 61 6c 75 65 20 6f 72 20 0a 4e 55 4c 4c 2c 20 65  alue or .NULL, e
133a0 78 63 65 70 74 20 66 6f 72 20 74 68 65 20 5b 4f  xcept for the [O
133b0 70 65 72 61 74 6f 72 20 7c 7c 5d 20 63 6f 6e 63  perator ||] conc
133c0 61 74 65 6e 61 74 69 6f 6e 20 6f 70 65 72 61 74  atenation operat
133d0 6f 72 20 77 68 69 63 68 20 61 6c 77 61 79 73 20  or which always 
133e0 0a 65 76 61 6c 75 61 74 65 73 20 74 6f 20 65 69  .evaluates to ei
133f0 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 74  ther NULL or a t
13400 65 78 74 20 76 61 6c 75 65 2e 3c 2f 70 3e 22 0a  ext value.</p>".
13410 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 69 73  .hd_fragment {is
13420 69 73 6e 6f 74 7d 20 7b 49 53 20 6f 70 65 72 61  isnot} {IS opera
13430 74 6f 72 7d 20 7b 49 53 20 4e 4f 54 20 6f 70 65  tor} {IS NOT ope
13440 72 61 74 6f 72 7d 0a 0a 68 64 5f 70 75 74 73 20  rator}..hd_puts 
13450 22 3c 70 3e 5e 54 68 65 20 5b 4f 70 65 72 61 74  "<p>^The [Operat
13460 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f 70 65 72  or IS] and [Oper
13470 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d 20 6f  ator {IS NOT}] o
13480 70 65 72 61 74 6f 72 73 20 77 6f 72 6b 0a 6c 69  perators work.li
13490 6b 65 20 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 20  ke [Operator =] 
134a0 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20 21 3d  and [Operator !=
134b0 5d 20 65 78 63 65 70 74 20 77 68 65 6e 20 6f 6e  ] except when on
134c0 65 20 6f 72 20 62 6f 74 68 20 6f 66 20 74 68 65  e or both of the
134d0 0a 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55  .operands are NU
134e0 4c 4c 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73  LL. ^In this cas
134f0 65 2c 20 69 66 20 62 6f 74 68 20 6f 70 65 72 61  e, if both opera
13500 6e 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 74 68  nds are NULL, th
13510 65 6e 20 74 68 65 0a 49 53 20 6f 70 65 72 61 74  en the.IS operat
13520 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  or evaluates to 
13530 31 20 28 74 72 75 65 29 20 61 6e 64 20 74 68 65  1 (true) and the
13540 20 49 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f 72   IS NOT operator
13550 20 65 76 61 6c 75 61 74 65 73 0a 74 6f 20 30 20   evaluates.to 0 
13560 28 66 61 6c 73 65 29 2e 20 5e 49 66 20 6f 6e 65  (false). ^If one
13570 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
13580 20 61 6e 64 20 74 68 65 20 6f 74 68 65 72 20 69   and the other i
13590 73 20 6e 6f 74 2c 20 74 68 65 6e 20 74 68 65 0a  s not, then the.
135a0 49 53 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c  IS operator eval
135b0 75 61 74 65 73 20 74 6f 20 30 20 28 66 61 6c 73  uates to 0 (fals
135c0 65 29 20 61 6e 64 20 74 68 65 20 49 53 20 4e 4f  e) and the IS NO
135d0 54 20 6f 70 65 72 61 74 6f 72 20 69 73 20 31 20  T operator is 1 
135e0 28 74 72 75 65 29 2e 0a 5e 49 74 20 69 73 20 6e  (true)..^It is n
135f0 6f 74 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 20  ot possible for 
13600 61 6e 20 49 53 20 6f 72 20 49 53 20 4e 4f 54 20  an IS or IS NOT 
13610 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20 65 76  expression to ev
13620 61 6c 75 61 74 65 20 74 6f 20 4e 55 4c 4c 2e 0a  aluate to NULL..
13630 5e 4f 70 65 72 61 74 6f 72 73 20 5b 4f 70 65 72  ^Operators [Oper
13640 61 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f 70  ator IS] and [Op
13650 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d  erator {IS NOT}]
13660 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 0a   have the same .
13670 70 72 65 63 65 64 65 6e 63 65 20 61 73 20 5b 4f  precedence as [O
13680 70 65 72 61 74 6f 72 20 3d 5d 2e 22 0a 0a 3c 74  perator =]."..<t
13690 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c  cl>hd_fragment l
136a0 69 74 76 61 6c 75 65 20 7b 6c 69 74 65 72 61 6c  itvalue {literal
136b0 20 76 61 6c 75 65 7d 3c 2f 74 63 6c 3e 0a 3c 68   value}</tcl>.<h
136c0 33 3e 4c 69 74 65 72 61 6c 20 56 61 6c 75 65 73  3>Literal Values
136d0 20 28 43 6f 6e 73 74 61 6e 74 73 29 3c 2f 68 33   (Constants)</h3
136e0 3e 0a 3c 70 3e 0a 41 20 6c 69 74 65 72 61 6c 20  >.<p>.A literal 
136f0 76 61 6c 75 65 20 72 65 70 72 65 73 65 6e 74 73  value represents
13700 20 61 20 63 6f 6e 73 74 61 6e 74 2e 0a 5e 4c 69   a constant..^Li
13710 74 65 72 61 6c 20 76 61 6c 75 65 73 20 6d 61 79  teral values may
13720 20 62 65 20 69 6e 74 65 67 65 72 73 2c 20 66 6c   be integers, fl
13730 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d  oating point num
13740 62 65 72 73 2c 20 73 74 72 69 6e 67 73 2c 0a 42  bers, strings,.B
13750 4c 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e 0a  LOBs, or NULLs..
13760 3c 70 3e 0a 54 68 65 20 73 79 6e 74 61 78 20 66  <p>.The syntax f
13770 6f 72 20 69 6e 74 65 67 65 72 20 61 6e 64 20 66  or integer and f
13780 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69  loating point li
13790 74 65 72 61 6c 73 20 28 63 6f 6c 6c 65 63 74 69  terals (collecti
137a0 76 65 6c 79 0a 22 6e 75 6d 65 72 69 63 20 6c 69  vely."numeric li
137b0 74 65 72 61 6c 73 22 29 20 69 73 20 73 68 6f 77  terals") is show
137c0 6e 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69  n by the followi
137d0 6e 67 20 64 69 61 67 72 61 6d 3a 3c 2f 70 3e 0a  ng diagram:</p>.
137e0 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67  .<tcl>BubbleDiag
137f0 72 61 6d 20 6e 75 6d 65 72 69 63 2d 6c 69 74 65  ram numeric-lite
13800 72 61 6c 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e  ral</tcl>..<p>.^
13810 28 49 66 20 61 20 6e 75 6d 65 72 69 63 20 6c 69  (If a numeric li
13820 74 65 72 61 6c 20 68 61 73 20 61 20 64 65 63 69  teral has a deci
13830 6d 61 6c 20 70 6f 69 6e 74 20 6f 72 20 61 6e 20  mal point or an 
13840 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63  exponentiation.c
13850 6c 61 75 73 65 20 6f 72 20 69 66 20 69 74 73 20  lause or if its 
13860 6d 61 67 6e 69 74 75 64 65 20 69 73 20 6c 65 73  magnitude is les
13870 73 20 74 68 61 6e 20 2d 39 32 32 33 33 37 32 30  s than -92233720
13880 33 36 38 35 34 37 37 35 38 30 38 20 6f 72 0a 67  36854775808 or.g
13890 72 65 61 74 65 72 20 74 68 61 6e 20 39 32 32 33  reater than 9223
138a0 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37 2c  372036854775807,
138b0 20 74 68 65 6e 20 69 74 20 69 73 20 61 20 66 6c   then it is a fl
138c0 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74  oating point lit
138d0 65 72 61 6c 2e 0a 4f 74 68 65 72 77 69 73 65 20  eral..Otherwise 
138e0 69 73 20 69 74 20 69 73 20 61 6e 20 20 69 6e 74  is it is an  int
138f0 65 67 65 72 20 6c 69 74 65 72 61 6c 2e 29 5e 0a  eger literal.)^.
13900 5e 54 68 65 20 22 45 22 20 63 68 61 72 61 63 74  ^The "E" charact
13910 65 72 20 74 68 61 74 20 62 65 67 69 6e 73 20 74  er that begins t
13920 68 65 20 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f  he exponentiatio
13930 6e 0a 63 6c 61 75 73 65 20 6f 66 20 61 20 66 6c  n.clause of a fl
13940 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74  oating point lit
13950 65 72 61 6c 20 63 61 6e 20 62 65 20 65 69 74 68  eral can be eith
13960 65 72 20 75 70 70 65 72 20 6f 72 20 6c 6f 77 65  er upper or lowe
13970 72 20 63 61 73 65 2e 0a 5e 28 54 68 65 20 22 2e  r case..^(The ".
13980 22 20 63 68 61 72 61 63 74 65 72 20 69 73 20 61  " character is a
13990 6c 77 61 79 73 20 75 73 65 64 20 0a 61 73 20 74  lways used .as t
139a0 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74  he decimal point
139b0 20 65 76 65 6e 20 69 66 20 74 68 65 20 6c 6f 63   even if the loc
139c0 61 6c 65 20 73 65 74 74 69 6e 67 20 73 70 65 63  ale setting spec
139d0 69 66 69 65 73 20 22 2c 22 20 66 6f 72 0a 74 68  ifies "," for.th
139e0 69 73 20 72 6f 6c 65 20 2d 20 74 68 65 20 75 73  is role - the us
139f0 65 20 6f 66 20 22 2c 22 20 66 6f 72 20 74 68 65  e of "," for the
13a00 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 77   decimal point w
13a10 6f 75 6c 64 20 72 65 73 75 6c 74 20 69 6e 0a 73  ould result in.s
13a20 79 6e 74 61 63 74 69 63 20 61 6d 62 69 67 75 69  yntactic ambigui
13a30 74 79 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  ty.)^..<tcl>hd_f
13a40 72 61 67 6d 65 6e 74 20 68 65 78 69 6e 74 20 7b  ragment hexint {
13a50 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65  hexadecimal inte
13a60 67 65 72 20 6c 69 74 65 72 61 6c 73 7d 20 7b 68  ger literals} {h
13a70 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67  exadecimal integ
13a80 65 72 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 48  ers}</tcl>.<p>^H
13a90 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67  exadecimal integ
13aa0 65 72 20 6c 69 74 65 72 61 6c 73 20 66 6f 6c 6c  er literals foll
13ab0 6f 77 20 74 68 65 20 43 2d 6c 61 6e 67 75 61 67  ow the C-languag
13ac0 65 20 6e 6f 74 61 74 69 6f 6e 20 6f 66 0a 22 30  e notation of."0
13ad0 78 22 20 6f 72 20 22 30 58 22 20 66 6f 6c 6c 6f  x" or "0X" follo
13ae0 77 65 64 20 62 79 20 68 65 78 61 64 65 63 69 6d  wed by hexadecim
13af0 61 6c 20 64 69 67 69 74 73 2e 0a 5e 46 6f 72 20  al digits..^For 
13b00 65 78 61 6d 70 6c 65 2c 20 30 78 31 32 33 34 20  example, 0x1234 
13b10 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65 20 61  means the same a
13b20 73 20 34 36 36 30 0a 61 6e 64 20 30 78 38 30 30  s 4660.and 0x800
13b30 30 30 30 30 30 30 30 30 30 30 30 30 30 20 6d 65  0000000000000 me
13b40 61 6e 73 20 74 68 65 20 73 61 6d 65 20 61 73 20  ans the same as 
13b50 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  -922337203685477
13b60 35 38 30 38 2e 0a 20 5e 28 48 65 78 61 64 65 63  5808.. ^(Hexadec
13b70 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 6c 69 74  imal integer lit
13b80 65 72 61 6c 73 20 61 72 65 20 69 6e 74 65 72 70  erals are interp
13b90 72 65 74 65 64 20 61 73 20 36 34 2d 62 69 74 0a  reted as 64-bit.
13ba0 74 77 6f 27 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74  two's-complement
13bb0 20 69 6e 74 65 67 65 72 73 20 61 6e 64 20 61 72   integers and ar
13bc0 65 20 74 68 75 73 20 6c 69 6d 69 74 65 64 0a 74  e thus limited.t
13bd0 6f 20 73 69 78 74 65 65 6e 20 73 69 67 6e 69 66  o sixteen signif
13be0 69 63 61 6e 74 20 64 69 67 69 74 73 20 6f 66 20  icant digits of 
13bf0 70 72 65 63 69 73 69 6f 6e 2e 29 5e 0a 53 75 70  precision.)^.Sup
13c00 70 6f 72 74 20 66 6f 72 20 68 65 78 61 64 65 63  port for hexadec
13c10 69 6d 61 6c 20 69 6e 74 65 67 65 72 73 20 77 61  imal integers wa
13c20 73 20 61 64 64 65 64 20 74 6f 20 53 51 4c 69 74  s added to SQLit
13c30 65 20 76 65 72 73 69 6f 6e 20 33 2e 38 2e 36 2e  e version 3.8.6.
13c40 0a 5e 46 6f 72 20 62 61 63 6b 77 61 72 64 73 20  .^For backwards 
13c50 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2c 20 74  compatibility, t
13c60 68 65 20 22 30 78 22 20 68 65 78 61 64 65 63 69  he "0x" hexadeci
13c70 6d 61 6c 20 69 6e 74 65 67 65 72 0a 6e 6f 74 61  mal integer.nota
13c80 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 6e 64  tion is only und
13c90 65 72 73 74 6f 6f 64 20 62 79 20 74 68 65 20 53  erstood by the S
13ca0 51 4c 20 6c 61 6e 67 75 61 67 65 20 70 61 72 73  QL language pars
13cb0 65 72 2c 20 6e 6f 74 20 62 79 20 74 68 65 0a 74  er, not by the.t
13cc0 79 70 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  ype conversions 
13cd0 72 6f 75 74 69 6e 65 73 2e 0a 5e 28 53 74 72 69  routines..^(Stri
13ce0 6e 67 20 76 61 72 69 61 62 6c 65 73 20 74 68 61  ng variables tha
13cf0 74 0a 63 6f 6e 74 61 69 6e 20 74 65 78 74 20 66  t.contain text f
13d00 6f 72 6d 61 74 74 65 64 20 6c 69 6b 65 20 68 65  ormatted like he
13d10 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65  xadecimal intege
13d20 72 73 20 61 72 65 20 6e 6f 74 0a 69 6e 74 65 72  rs are not.inter
13d30 70 72 65 74 65 64 20 61 73 20 68 65 78 61 64 65  preted as hexade
13d40 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73 20 77  cimal integers w
13d50 68 65 6e 20 63 6f 65 72 63 69 6e 67 20 74 68 65  hen coercing the
13d60 20 73 74 72 69 6e 67 20 76 61 6c 75 65 0a 69 6e   string value.in
13d70 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 64 75  to an integer du
13d80 65 20 74 6f 20 61 20 5b 43 41 53 54 20 65 78 70  e to a [CAST exp
13d90 72 65 73 73 69 6f 6e 5d 20 6f 72 20 66 6f 72 20  ression] or for 
13da0 61 20 5b 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  a [column affini
13db0 74 79 5d 0a 74 72 61 6e 73 66 6f 72 6d 61 74 69  ty].transformati
13dc0 6f 6e 20 6f 72 20 70 72 69 6f 72 20 74 6f 20 70  on or prior to p
13dd0 65 72 66 6f 72 6d 69 6e 67 20 61 20 6e 75 6d 65  erforming a nume
13de0 72 69 63 20 6f 70 65 72 61 74 69 6f 6e 20 6f 72  ric operation or
13df0 20 66 6f 72 0a 61 6e 79 20 6f 74 68 65 72 20 72   for.any other r
13e00 75 6e 2d 74 69 6d 65 20 63 6f 6e 76 65 72 73 69  un-time conversi
13e10 6f 6e 73 2e 29 5e 20 20 5e 28 57 68 65 6e 20 63  ons.)^  ^(When c
13e20 6f 65 72 63 69 6e 67 20 61 0a 73 74 72 69 6e 67  oercing a.string
13e30 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 66 6f   value in the fo
13e40 72 6d 61 74 20 6f 66 20 61 20 68 65 78 61 64 65  rmat of a hexade
13e50 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 69 6e  cimal integer in
13e60 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 76 61  to an integer.va
13e70 6c 75 65 2c 20 74 68 65 20 63 6f 6e 76 65 72 73  lue, the convers
13e80 69 6f 6e 20 70 72 6f 63 65 73 73 20 73 74 6f 70  ion process stop
13e90 73 20 77 68 65 6e 20 74 68 65 20 27 78 27 20 63  s when the 'x' c
13ea0 68 61 72 61 63 74 65 72 20 69 73 20 73 65 65 6e  haracter is seen
13eb0 0a 73 6f 20 74 68 65 20 72 65 73 75 6c 74 69 6e  .so the resultin
13ec0 67 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  g integer value 
13ed0 69 73 20 61 6c 77 61 79 73 20 7a 65 72 6f 2e 29  is always zero.)
13ee0 5e 0a 5e 28 53 51 4c 69 74 65 20 6f 6e 6c 79 20  ^.^(SQLite only 
13ef0 75 6e 64 65 72 73 74 61 6e 64 73 20 74 68 65 20  understands the 
13f00 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65  hexadecimal inte
13f10 67 65 72 20 6e 6f 74 61 74 69 6f 6e 20 77 68 65  ger notation whe
13f20 6e 20 69 74 0a 61 70 70 65 61 72 73 20 69 6e 20  n it.appears in 
13f30 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
13f40 74 20 74 65 78 74 2c 20 6e 6f 74 20 77 68 65 6e  t text, not when
13f50 20 69 74 20 61 70 70 65 61 72 73 20 61 73 0a 70   it appears as.p
13f60 61 72 74 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  art of the conte
13f70 6e 74 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  nt of the databa
13f80 73 65 2e 29 5e 0a 0a 3c 70 3e 20 5e 41 20 73 74  se.)^..<p> ^A st
13f90 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 20 69 73  ring constant is
13fa0 20 66 6f 72 6d 65 64 20 62 79 20 65 6e 63 6c 6f   formed by enclo
13fb0 73 69 6e 67 20 74 68 65 0a 73 74 72 69 6e 67 20  sing the.string 
13fc0 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73  in single quotes
13fd0 20 28 27 29 2e 20 20 5e 41 20 73 69 6e 67 6c 65   (').  ^A single
13fe0 20 71 75 6f 74 65 20 77 69 74 68 69 6e 20 74 68   quote within th
13ff0 65 20 73 74 72 69 6e 67 20 63 61 6e 0a 62 65 20  e string can.be 
14000 65 6e 63 6f 64 65 64 20 62 79 20 70 75 74 74 69  encoded by putti
14010 6e 67 20 74 77 6f 20 73 69 6e 67 6c 65 20 71 75  ng two single qu
14020 6f 74 65 73 20 69 6e 20 61 20 72 6f 77 20 2d 20  otes in a row - 
14030 61 73 20 69 6e 20 50 61 73 63 61 6c 2e 0a 43 2d  as in Pascal..C-
14040 73 74 79 6c 65 20 65 73 63 61 70 65 73 20 75 73  style escapes us
14050 69 6e 67 20 74 68 65 20 62 61 63 6b 73 6c 61 73  ing the backslas
14060 68 20 63 68 61 72 61 63 74 65 72 20 61 72 65 20  h character are 
14070 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 62 65  not supported be
14080 63 61 75 73 65 0a 74 68 65 79 20 61 72 65 20 6e  cause.they are n
14090 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e  ot standard SQL.
140a0 0a 0a 3c 70 3e 20 5e 42 4c 4f 42 20 6c 69 74 65  ..<p> ^BLOB lite
140b0 72 61 6c 73 20 61 72 65 20 73 74 72 69 6e 67 20  rals are string 
140c0 6c 69 74 65 72 61 6c 73 20 63 6f 6e 74 61 69 6e  literals contain
140d0 69 6e 67 20 68 65 78 61 64 65 63 69 6d 61 6c 20  ing hexadecimal 
140e0 64 61 74 61 20 61 6e 64 0a 70 72 65 63 65 64 65  data and.precede
140f0 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 22 78  d by a single "x
14100 22 20 6f 72 20 22 58 22 20 63 68 61 72 61 63 74  " or "X" charact
14110 65 72 2e 20 20 5e 28 45 78 61 6d 70 6c 65 3a 20  er.  ^(Example: 
14120 58 27 35 33 35 31 34 43 36 39 37 34 36 35 27 29  X'53514C697465')
14130 5e 0a 0a 3c 70 3e 0a 5e 41 20 6c 69 74 65 72 61  ^..<p>.^A litera
14140 6c 20 76 61 6c 75 65 20 63 61 6e 20 61 6c 73 6f  l value can also
14150 20 62 65 20 74 68 65 20 74 6f 6b 65 6e 20 22 4e   be the token "N
14160 55 4c 4c 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c  ULL"..</p>..<tcl
14170 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 72  >hd_fragment var
14180 70 61 72 61 6d 20 70 61 72 61 6d 65 74 65 72 20  param parameter 
14190 70 61 72 61 6d 65 74 65 72 73 20 7b 62 6f 75 6e  parameters {boun
141a0 64 20 70 61 72 61 6d 65 74 65 72 7d 20 7b 62 6f  d parameter} {bo
141b0 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73 7d 3c  und parameters}<
141c0 2f 74 63 6c 3e 0a 3c 68 33 3e 50 61 72 61 6d 65  /tcl>.<h3>Parame
141d0 74 65 72 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 41 20  ters</h3>.<p>.A 
141e0 22 76 61 72 69 61 62 6c 65 22 20 6f 72 20 22 70  "variable" or "p
141f0 61 72 61 6d 65 74 65 72 22 20 74 6f 6b 65 6e 0a  arameter" token.
14200 73 70 65 63 69 66 69 65 73 20 61 20 70 6c 61 63  specifies a plac
14210 65 68 6f 6c 64 65 72 20 69 6e 20 74 68 65 20 65  eholder in the e
14220 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 61 20  xpression for a 
14230 0a 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 66  .value that is f
14240 69 6c 6c 65 64 20 69 6e 20 61 74 20 72 75 6e 74  illed in at runt
14250 69 6d 65 20 75 73 69 6e 67 20 74 68 65 0a 5b 73  ime using the.[s
14260 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62  qlite3_bind_blob
14270 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e  () | sqlite3_bin
14280 64 28 29 5d 20 66 61 6d 69 6c 79 20 6f 66 20 43  d()] family of C
14290 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 73 2e  /C++ interfaces.
142a0 0a 50 61 72 61 6d 65 74 65 72 73 20 63 61 6e 20  .Parameters can 
142b0 74 61 6b 65 20 73 65 76 65 72 61 6c 20 66 6f 72  take several for
142c0 6d 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  ms:.</p>..<block
142d0 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c  quote>.<table>.<
142e0 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72  tr>.<td align="r
142f0 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f  ight" valign="to
14300 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 69 3e 4e 4e  p"><b>?</b><i>NN
14310 4e 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69  N</i></td><td wi
14320 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c  dth="20"></td>.<
14330 74 64 3e 5e 28 41 20 71 75 65 73 74 69 6f 6e 20  td>^(A question 
14340 6d 61 72 6b 20 66 6f 6c 6c 6f 77 65 64 20 62 79  mark followed by
14350 20 61 20 6e 75 6d 62 65 72 20 3c 69 3e 4e 4e 4e   a number <i>NNN
14360 3c 2f 69 3e 20 68 6f 6c 64 73 20 61 20 73 70 6f  </i> holds a spo
14370 74 20 66 6f 72 20 74 68 65 0a 4e 4e 4e 2d 74 68  t for the.NNN-th
14380 20 70 61 72 61 6d 65 74 65 72 2e 20 20 4e 4e 4e   parameter.  NNN
14390 20 6d 75 73 74 20 62 65 20 62 65 74 77 65 65 6e   must be between
143a0 20 31 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f 4d   1 and [SQLITE_M
143b0 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
143c0 45 52 5d 2e 29 5e 0a 3c 2f 74 64 3e 0a 3c 2f 74  ER].)^.</td>.</t
143d0 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  r>.<tr>.<td alig
143e0 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e  n="right" valign
143f0 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c  ="top"><b>?</b><
14400 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32  /td><td width="2
14410 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20  0"></td>.<td>^A 
14420 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 74 68  question mark th
14430 61 74 20 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77  at is not follow
14440 65 64 20 62 79 20 61 20 6e 75 6d 62 65 72 20 63  ed by a number c
14450 72 65 61 74 65 73 20 61 20 70 61 72 61 6d 65 74  reates a paramet
14460 65 72 0a 77 69 74 68 20 61 20 6e 75 6d 62 65 72  er.with a number
14470 20 6f 6e 65 20 67 72 65 61 74 65 72 20 74 68 61   one greater tha
14480 6e 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 61  n the largest pa
14490 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 61  rameter number a
144a0 6c 72 65 61 64 79 20 61 73 73 69 67 6e 65 64 2e  lready assigned.
144b0 0a 5e 49 66 20 74 68 69 73 20 6d 65 61 6e 73 20  .^If this means 
144c0 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 6e 75  the parameter nu
144d0 6d 62 65 72 20 69 73 20 67 72 65 61 74 65 72 20  mber is greater 
144e0 74 68 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d 41 58  than.[SQLITE_MAX
144f0 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
14500 5d 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f  ], it is an erro
14510 72 2e 0a 54 68 69 73 20 70 61 72 61 6d 65 74 65  r..This paramete
14520 72 20 66 6f 72 6d 61 74 20 69 73 20 70 72 6f 76  r format is prov
14530 69 64 65 64 20 66 6f 72 20 63 6f 6d 70 61 74 69  ided for compati
14540 62 69 6c 69 74 79 20 77 69 74 68 20 6f 74 68 65  bility with othe
14550 72 20 64 61 74 61 62 61 73 65 0a 65 6e 67 69 6e  r database.engin
14560 65 73 2e 20 20 42 75 74 20 62 65 63 61 75 73 65  es.  But because
14570 20 69 74 20 69 73 20 65 61 73 79 20 74 6f 20 6d   it is easy to m
14580 69 73 63 6f 75 6e 74 20 74 68 65 20 71 75 65 73  iscount the ques
14590 74 69 6f 6e 20 6d 61 72 6b 73 2c 20 74 68 65 0a  tion marks, the.
145a0 75 73 65 20 6f 66 20 74 68 69 73 20 70 61 72 61  use of this para
145b0 6d 65 74 65 72 20 66 6f 72 6d 61 74 20 69 73 20  meter format is 
145c0 64 69 73 63 6f 75 72 61 67 65 64 2e 20 20 50 72  discouraged.  Pr
145d0 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20 65 6e  ogrammers are en
145e0 63 6f 75 72 61 67 65 64 0a 74 6f 20 75 73 65 20  couraged.to use 
145f0 6f 6e 65 20 6f 66 20 74 68 65 20 73 79 6d 62 6f  one of the symbo
14600 6c 69 63 20 66 6f 72 6d 61 74 73 20 62 65 6c 6f  lic formats belo
14610 77 20 6f 72 20 74 68 65 20 3f 4e 4e 4e 20 66 6f  w or the ?NNN fo
14620 72 6d 61 74 20 61 62 6f 76 65 20 69 6e 73 74 65  rmat above inste
14630 61 64 2e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  ad..</td>.</tr>.
14640 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
14650 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74  right" valign="t
14660 6f 70 22 3e 3c 62 3e 3a 3c 2f 62 3e 3c 69 3e 41  op"><b>:</b><i>A
14670 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20  AAA</i></td><td 
14680 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e  width="20"></td>
14690 0a 3c 74 64 3e 5e 41 20 63 6f 6c 6f 6e 20 66 6f  .<td>^A colon fo
146a0 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 69 64 65  llowed by an ide
146b0 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 68 6f 6c  ntifier name hol
146c0 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20 61 20  ds a spot for a 
146d0 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  .[sqlite3_bind_p
146e0 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 7c 6e 61  arameter_name|na
146f0 6d 65 64 20 70 61 72 61 6d 65 74 65 72 5d 20 77  med parameter] w
14700 69 74 68 20 74 68 65 20 6e 61 6d 65 20 3a 41 41  ith the name :AA
14710 41 41 2e 20 20 0a 5e 28 4e 61 6d 65 64 20 70 61  AA.  .^(Named pa
14720 72 61 6d 65 74 65 72 73 20 61 72 65 20 61 6c 73  rameters are als
14730 6f 20 6e 75 6d 62 65 72 65 64 2e 20 54 68 65 20  o numbered. The 
14740 6e 75 6d 62 65 72 20 61 73 73 69 67 6e 65 64 20  number assigned 
14750 69 73 20 6f 6e 65 20 67 72 65 61 74 65 72 20 74  is one greater t
14760 68 61 6e 0a 74 68 65 20 6c 61 72 67 65 73 74 20  han.the largest 
14770 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72  parameter number
14780 20 61 6c 72 65 61 64 79 20 61 73 73 69 67 6e 65   already assigne
14790 64 2e 29 5e 20 5e 49 66 20 74 68 69 73 20 6d 65  d.)^ ^If this me
147a0 61 6e 73 20 74 68 65 20 70 61 72 61 6d 65 74 65  ans the paramete
147b0 72 0a 77 6f 75 6c 64 20 62 65 20 61 73 73 69 67  r.would be assig
147c0 6e 65 64 20 61 20 6e 75 6d 62 65 72 20 67 72 65  ned a number gre
147d0 61 74 65 72 20 74 68 61 6e 20 5b 53 51 4c 49 54  ater than [SQLIT
147e0 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
147f0 55 4d 42 45 52 5d 2c 20 69 74 20 69 73 0a 61 6e  UMBER], it is.an
14800 20 65 72 72 6f 72 2e 20 54 6f 20 61 76 6f 69 64   error. To avoid
14810 20 63 6f 6e 66 75 73 69 6f 6e 2c 20 69 74 20 69   confusion, it i
14820 73 20 62 65 73 74 20 74 6f 20 61 76 6f 69 64 20  s best to avoid 
14830 6d 69 78 69 6e 67 20 6e 61 6d 65 64 20 61 6e 64  mixing named and
14840 20 6e 75 6d 62 65 72 65 64 0a 70 61 72 61 6d 65   numbered.parame
14850 74 65 72 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  ters.</td>.</tr>
14860 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
14870 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22  "right" valign="
14880 74 6f 70 22 3e 3c 62 3e 40 3c 2f 62 3e 3c 69 3e  top"><b>@</b><i>
14890 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64  AAAA</i></td><td
148a0 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64   width="20"></td
148b0 3e 0a 3c 74 64 3e 5e 41 6e 20 22 61 74 22 20 73  >.<td>^An "at" s
148c0 69 67 6e 20 77 6f 72 6b 73 20 65 78 61 63 74 6c  ign works exactl
148d0 79 20 6c 69 6b 65 20 61 20 63 6f 6c 6f 6e 2c 20  y like a colon, 
148e0 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
148f0 6e 61 6d 65 20 6f 66 0a 74 68 65 20 70 61 72 61  name of.the para
14900 6d 65 74 65 72 20 63 72 65 61 74 65 64 20 69 73  meter created is
14910 20 40 41 41 41 41 2e 3c 2f 74 64 3e 0a 3c 2f 74   @AAAA.</td>.</t
14920 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  r>.<tr>.<td alig
14930 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e  n="right" valign
14940 3d 22 74 6f 70 22 3e 3c 62 3e 24 3c 2f 62 3e 3c  ="top"><b>$</b><
14950 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c  i>AAAA</i></td><
14960 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f  td width="20"></
14970 74 64 3e 0a 3c 74 64 3e 5e 41 20 64 6f 6c 6c 61  td>.<td>^A dolla
14980 72 2d 73 69 67 6e 20 66 6f 6c 6c 6f 77 65 64 20  r-sign followed 
14990 62 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  by an identifier
149a0 20 6e 61 6d 65 20 61 6c 73 6f 20 68 6f 6c 64 73   name also holds
149b0 20 61 20 73 70 6f 74 20 66 6f 72 20 61 20 6e 61   a spot for a na
149c0 6d 65 64 0a 70 61 72 61 6d 65 74 65 72 20 77 69  med.parameter wi
149d0 74 68 20 74 68 65 20 6e 61 6d 65 20 24 41 41 41  th the name $AAA
149e0 41 2e 20 20 5e 28 54 68 65 20 69 64 65 6e 74 69  A.  ^(The identi
149f0 66 69 65 72 20 6e 61 6d 65 20 69 6e 20 74 68 69  fier name in thi
14a00 73 20 63 61 73 65 20 63 61 6e 20 69 6e 63 6c 75  s case can inclu
14a10 64 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f  de.one or more o
14a20 63 63 75 72 72 65 6e 63 65 73 20 6f 66 20 22 3a  ccurrences of ":
14a30 3a 22 20 61 6e 64 20 61 20 73 75 66 66 69 78 20  :" and a suffix 
14a40 65 6e 63 6c 6f 73 65 64 20 69 6e 20 22 28 2e 2e  enclosed in "(..
14a50 2e 29 22 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 61  .)" containing.a
14a60 6e 79 20 74 65 78 74 20 61 74 20 61 6c 6c 2e 29  ny text at all.)
14a70 5e 20 20 54 68 69 73 20 73 79 6e 74 61 78 20 69  ^  This syntax i
14a80 73 20 74 68 65 20 66 6f 72 6d 20 6f 66 20 61 20  s the form of a 
14a90 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 20 69 6e  variable name in
14aa0 20 74 68 65 0a 5b 68 74 74 70 3a 2f 2f 77 77 77   the.[http://www
14ab0 2e 74 63 6c 2d 6c 61 6e 67 2e 6f 72 67 2f 20 7c  .tcl-lang.org/ |
14ac0 20 54 63 6c 20 70 72 6f 67 72 61 6d 6d 69 6e 67   Tcl programming
14ad0 20 6c 61 6e 67 75 61 67 65 5d 2e 20 20 54 68 65   language].  The
14ae0 20 70 72 65 73 65 6e 63 65 0a 6f 66 20 74 68 69   presence.of thi
14af0 73 20 73 79 6e 74 61 78 20 72 65 73 75 6c 74 73  s syntax results
14b00 20 66 72 6f 6d 20 74 68 65 20 66 61 63 74 20 74   from the fact t
14b10 68 61 74 20 53 51 4c 69 74 65 20 69 73 20 72 65  hat SQLite is re
14b20 61 6c 6c 79 20 61 20 0a 5b 54 63 6c 20 65 78 74  ally a .[Tcl ext
14b30 65 6e 73 69 6f 6e 5d 20 74 68 61 74 20 68 61 73  ension] that has
14b40 20 65 73 63 61 70 65 64 20 69 6e 74 6f 20 74 68   escaped into th
14b50 65 20 77 69 6c 64 2e 3c 2f 74 64 3e 0a 3c 2f 74  e wild.</td>.</t
14b60 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c  r>.</table>.</bl
14b70 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 50  ockquote>..<p>^P
14b80 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 61  arameters that a
14b90 72 65 20 6e 6f 74 20 61 73 73 69 67 6e 65 64 20  re not assigned 
14ba0 76 61 6c 75 65 73 20 75 73 69 6e 67 0a 5b 73 71  values using.[sq
14bb0 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28  lite3_bind_blob(
14bc0 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  ) | sqlite3_bind
14bd0 28 29 5d 20 61 72 65 20 74 72 65 61 74 65 64 0a  ()] are treated.
14be0 61 73 20 4e 55 4c 4c 2e 20 20 54 68 65 20 5b 73  as NULL.  The [s
14bf0 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
14c00 6d 65 74 65 72 5f 69 6e 64 65 78 28 29 5d 20 69  meter_index()] i
14c10 6e 74 65 72 66 61 63 65 20 63 61 6e 20 62 65 20  nterface can be 
14c20 75 73 65 64 0a 74 6f 20 74 72 61 6e 73 6c 61 74  used.to translat
14c30 65 20 61 20 73 79 6d 62 6f 6c 69 63 20 70 61 72  e a symbolic par
14c40 61 6d 65 74 65 72 20 6e 61 6d 65 20 69 6e 74 6f  ameter name into
14c50 20 69 74 73 20 65 71 75 69 76 61 6c 65 6e 74 20   its equivalent 
14c60 6e 75 6d 65 72 69 63 20 69 6e 64 65 78 2e 3c 2f  numeric index.</
14c70 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61 78 69  p>..<p>^The maxi
14c80 6d 75 6d 20 70 61 72 61 6d 65 74 65 72 20 6e 75  mum parameter nu
14c90 6d 62 65 72 20 69 73 20 73 65 74 20 61 74 20 63  mber is set at c
14ca0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 62 79 0a 74  ompile-time by.t
14cb0 68 65 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56  he [SQLITE_MAX_V
14cc0 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 20  ARIABLE_NUMBER] 
14cd0 6d 61 63 72 6f 2e 20 20 5e 28 41 6e 20 69 6e 64  macro.  ^(An ind
14ce0 69 76 69 64 75 61 6c 20 5b 64 61 74 61 62 61 73  ividual [databas
14cf0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 0a 44 20  e connection].D 
14d00 63 61 6e 20 72 65 64 75 63 65 20 69 74 73 20 6d  can reduce its m
14d10 61 78 69 6d 75 6d 20 70 61 72 61 6d 65 74 65 72  aximum parameter
14d20 20 6e 75 6d 62 65 72 20 62 65 6c 6f 77 20 74 68   number below th
14d30 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6d  e compile-time m
14d40 61 78 69 6d 75 6d 0a 75 73 69 6e 67 20 74 68 65  aximum.using the
14d50 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d   [sqlite3_limit]
14d60 28 44 2c 20 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  (D, [SQLITE_LIMI
14d70 54 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  T_VARIABLE_NUMBE
14d80 52 5d 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63  R],...) interfac
14d90 65 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  e.)^.</p>..<tcl>
14da0 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69 6b 65  hd_fragment like
14db0 20 4c 49 4b 45 20 45 53 43 41 50 45 3c 2f 74 63   LIKE ESCAPE</tc
14dc0 6c 3e 0a 3c 68 33 3e 54 68 65 20 4c 49 4b 45 2c  l>.<h3>The LIKE,
14dd0 20 47 4c 4f 42 2c 20 52 45 47 45 58 50 2c 20 61   GLOB, REGEXP, a
14de0 6e 64 20 4d 41 54 43 48 20 6f 70 65 72 61 74 6f  nd MATCH operato
14df0 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65 20  rs</h3>.<p>^The 
14e00 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 64 6f  LIKE operator do
14e10 65 73 20 61 20 70 61 74 74 65 72 6e 20 6d 61 74  es a pattern mat
14e20 63 68 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e  ching comparison
14e30 2e 20 5e 54 68 65 20 6f 70 65 72 61 6e 64 0a 74  . ^The operand.t
14e40 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 74  o the right of t
14e50 68 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72  he LIKE operator
14e60 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 70 61   contains the pa
14e70 74 74 65 72 6e 20 61 6e 64 20 74 68 65 20 6c 65  ttern and the le
14e80 66 74 20 68 61 6e 64 0a 6f 70 65 72 61 6e 64 20  ft hand.operand 
14e90 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 73 74 72  contains the str
14ea0 69 6e 67 20 74 6f 20 6d 61 74 63 68 20 61 67 61  ing to match aga
14eb0 69 6e 73 74 20 74 68 65 20 70 61 74 74 65 72 6e  inst the pattern
14ec0 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20  ...<tcl>hd_puts 
14ed0 22 5e 41 20 70 65 72 63 65 6e 74 20 73 79 6d 62  "^A percent symb
14ee0 6f 6c 20 28 5c 22 25 5c 22 29 20 69 6e 20 74 68  ol (\"%\") in th
14ef0 65 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 6d  e LIKE pattern m
14f00 61 74 63 68 65 73 20 61 6e 79 0a 73 65 71 75 65  atches any.seque
14f10 6e 63 65 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d  nce of zero or m
14f20 6f 72 65 20 63 68 61 72 61 63 74 65 72 73 20 69  ore characters i
14f30 6e 20 74 68 65 20 73 74 72 69 6e 67 2e 20 20 5e  n the string.  ^
14f40 41 6e 20 75 6e 64 65 72 73 63 6f 72 65 0a 28 5c  An underscore.(\
14f50 22 5f 5c 22 29 20 69 6e 20 74 68 65 20 4c 49 4b  "_\") in the LIK
14f60 45 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65  E pattern matche
14f70 73 20 61 6e 79 20 73 69 6e 67 6c 65 20 63 68 61  s any single cha
14f80 72 61 63 74 65 72 20 69 6e 20 74 68 65 0a 73 74  racter in the.st
14f90 72 69 6e 67 2e 20 20 5e 28 41 6e 79 20 6f 74 68  ring.  ^(Any oth
14fa0 65 72 20 63 68 61 72 61 63 74 65 72 20 6d 61 74  er character mat
14fb0 63 68 65 73 20 69 74 73 65 6c 66 20 6f 72 20 69  ches itself or i
14fc0 74 73 20 6c 6f 77 65 72 2f 75 70 70 65 72 20 63  ts lower/upper c
14fd0 61 73 65 0a 65 71 75 69 76 61 6c 65 6e 74 20 28  ase.equivalent (
14fe0 69 2e 65 2e 20 63 61 73 65 2d 69 6e 73 65 6e 73  i.e. case-insens
14ff0 69 74 69 76 65 20 6d 61 74 63 68 69 6e 67 29 2e  itive matching).
15000 29 5e 0a 0a 3c 75 3e 49 6d 70 6f 72 74 61 6e 74  )^..<u>Important
15010 20 4e 6f 74 65 3a 3c 2f 75 3e 20 5e 53 51 4c 69   Note:</u> ^SQLi
15020 74 65 20 6f 6e 6c 79 0a 75 6e 64 65 72 73 74 61  te only.understa
15030 6e 64 73 20 75 70 70 65 72 2f 6c 6f 77 65 72 20  nds upper/lower 
15040 63 61 73 65 20 66 6f 72 20 41 53 43 49 49 20 63  case for ASCII c
15050 68 61 72 61 63 74 65 72 73 20 62 79 20 64 65 66  haracters by def
15060 61 75 6c 74 2e 20 20 5e 54 68 65 0a 4c 49 4b 45  ault.  ^The.LIKE
15070 20 6f 70 65 72 61 74 6f 72 20 69 73 20 63 61 73   operator is cas
15080 65 20 73 65 6e 73 69 74 69 76 65 20 62 79 20 64  e sensitive by d
15090 65 66 61 75 6c 74 20 66 6f 72 20 75 6e 69 63 6f  efault for unico
150a0 64 65 20 63 68 61 72 61 63 74 65 72 73 20 74 68  de characters th
150b0 61 74 20 61 72 65 0a 62 65 79 6f 6e 64 20 74 68  at are.beyond th
150c0 65 20 41 53 43 49 49 20 72 61 6e 67 65 2e 20 20  e ASCII range.  
150d0 46 6f 72 20 65 78 61 6d 70 6c 65 2c 0a 5e 74 68  For example,.^th
150e0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 3c 62 3e  e expression <b>
150f0 27 61 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62  'a'&nbsp;LIKE&nb
15100 73 70 3b 27 41 27 3c 2f 62 3e 0a 69 73 20 54 52  sp;'A'</b>.is TR
15110 55 45 20 62 75 74 20 3c 62 3e 27 26 61 65 6c 69  UE but <b>'&aeli
15120 67 3b 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62  g;'&nbsp;LIKE&nb
15130 73 70 3b 27 26 41 45 6c 69 67 3b 27 3c 2f 62 3e  sp;'&AElig;'</b>
15140 20 69 73 20 46 41 4c 53 45 2e 22 3c 2f 74 63 6c   is FALSE."</tcl
15150 3e 0a 54 68 65 20 49 43 55 20 65 78 74 65 6e 73  >.The ICU extens
15160 69 6f 6e 20 74 6f 20 53 51 4c 69 74 65 20 69 6e  ion to SQLite in
15170 63 6c 75 64 65 73 20 61 6e 20 65 6e 68 61 6e 63  cludes an enhanc
15180 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  ed version of th
15190 65 0a 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20  e.LIKE operator 
151a0 74 68 61 74 20 64 6f 65 73 20 63 61 73 65 20 66  that does case f
151b0 6f 6c 64 69 6e 67 20 61 63 72 6f 73 73 20 61 6c  olding across al
151c0 6c 20 75 6e 69 63 6f 64 65 20 63 68 61 72 61 63  l unicode charac
151d0 74 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  ters.</p>..<p>^I
151e0 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 45  f the optional E
151f0 53 43 41 50 45 20 63 6c 61 75 73 65 20 69 73 20  SCAPE clause is 
15200 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68  present, then th
15210 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 66 6f 6c  e expression.fol
15220 6c 6f 77 69 6e 67 20 74 68 65 20 45 53 43 41 50  lowing the ESCAP
15230 45 20 6b 65 79 77 6f 72 64 20 6d 75 73 74 20 65  E keyword must e
15240 76 61 6c 75 61 74 65 20 74 6f 20 61 20 73 74 72  valuate to a str
15250 69 6e 67 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f  ing consisting o
15260 66 0a 61 20 73 69 6e 67 6c 65 20 63 68 61 72 61  f.a single chara
15270 63 74 65 72 2e 20 5e 54 68 69 73 20 63 68 61 72  cter. ^This char
15280 61 63 74 65 72 20 6d 61 79 20 62 65 20 75 73 65  acter may be use
15290 64 20 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61  d in the LIKE pa
152a0 74 74 65 72 6e 0a 74 6f 20 69 6e 63 6c 75 64 65  ttern.to include
152b0 20 6c 69 74 65 72 61 6c 20 70 65 72 63 65 6e 74   literal percent
152c0 20 6f 72 20 75 6e 64 65 72 73 63 6f 72 65 20 63   or underscore c
152d0 68 61 72 61 63 74 65 72 73 2e 20 5e 54 68 65 20  haracters. ^The 
152e0 65 73 63 61 70 65 0a 63 68 61 72 61 63 74 65 72  escape.character
152f0 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 70   followed by a p
15300 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 20 28 25  ercent symbol (%
15310 29 2c 20 75 6e 64 65 72 73 63 6f 72 65 20 28 5f  ), underscore (_
15320 29 2c 20 6f 72 20 61 20 73 65 63 6f 6e 64 0a 69  ), or a second.i
15330 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 65  nstance of the e
15340 73 63 61 70 65 20 63 68 61 72 61 63 74 65 72 20  scape character 
15350 69 74 73 65 6c 66 20 6d 61 74 63 68 65 73 20 61  itself matches a
15360 0a 6c 69 74 65 72 61 6c 20 70 65 72 63 65 6e 74  .literal percent
15370 20 73 79 6d 62 6f 6c 2c 20 75 6e 64 65 72 73 63   symbol, undersc
15380 6f 72 65 2c 20 6f 72 20 61 20 73 69 6e 67 6c 65  ore, or a single
15390 20 65 73 63 61 70 65 20 63 68 61 72 61 63 74 65   escape characte
153a0 72 2c 0a 72 65 73 70 65 63 74 69 76 65 6c 79 2e  r,.respectively.
153b0 0a 0a 3c 70 3e 5e 54 68 65 20 69 6e 66 69 78 20  ..<p>^The infix 
153c0 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 69 73  LIKE operator is
153d0 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
153e0 63 61 6c 6c 69 6e 67 20 74 68 65 0a 61 70 70 6c  calling the.appl
153f0 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20  ication-defined 
15400 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20 5b 6c  SQL functions [l
15410 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e  ike(<i>Y</i>,<i>
15420 58 3c 2f 69 3e 29 5d 20 6f 72 0a 5b 6c 69 6b 65  X</i>)] or.[like
15430 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f  (<i>Y</i>,<i>X</
15440 69 3e 2c 3c 69 3e 5a 3c 2f 69 3e 29 5d 3c 2f 61  i>,<i>Z</i>)]</a
15450 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  >.</p>..<p>^The 
15460 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 63 61  LIKE operator ca
15470 6e 20 62 65 20 6d 61 64 65 20 63 61 73 65 20 73  n be made case s
15480 65 6e 73 69 74 69 76 65 20 75 73 69 6e 67 20 74  ensitive using t
15490 68 65 0a 5b 63 61 73 65 5f 73 65 6e 73 69 74 69  he.[case_sensiti
154a0 76 65 5f 6c 69 6b 65 20 70 72 61 67 6d 61 5d 2e  ve_like pragma].
154b0 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
154c0 61 67 6d 65 6e 74 20 67 6c 6f 62 20 47 4c 4f 42  agment glob GLOB
154d0 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 47  </tcl>.<p>^The G
154e0 4c 4f 42 20 6f 70 65 72 61 74 6f 72 20 69 73 20  LOB operator is 
154f0 73 69 6d 69 6c 61 72 20 74 6f 20 4c 49 4b 45 20  similar to LIKE 
15500 62 75 74 20 75 73 65 73 20 74 68 65 20 55 6e 69  but uses the Uni
15510 78 0a 66 69 6c 65 20 67 6c 6f 62 62 69 6e 67 20  x.file globbing 
15520 73 79 6e 74 61 78 20 66 6f 72 20 69 74 73 20 77  syntax for its w
15530 69 6c 64 63 61 72 64 73 2e 20 20 5e 41 6c 73 6f  ildcards.  ^Also
15540 2c 20 47 4c 4f 42 20 69 73 20 63 61 73 65 0a 73  , GLOB is case.s
15550 65 6e 73 69 74 69 76 65 2c 20 75 6e 6c 69 6b 65  ensitive, unlike
15560 20 4c 49 4b 45 2e 20 20 5e 42 6f 74 68 20 47 4c   LIKE.  ^Both GL
15570 4f 42 20 61 6e 64 20 4c 49 4b 45 20 6d 61 79 20  OB and LIKE may 
15580 62 65 20 70 72 65 63 65 64 65 64 20 62 79 0a 74  be preceded by.t
15590 68 65 20 4e 4f 54 20 6b 65 79 77 6f 72 64 20 74  he NOT keyword t
155a0 6f 20 69 6e 76 65 72 74 20 74 68 65 20 73 65 6e  o invert the sen
155b0 73 65 20 6f 66 20 74 68 65 20 74 65 73 74 2e 20  se of the test. 
155c0 20 5e 54 68 65 20 69 6e 66 69 78 20 47 4c 4f 42   ^The infix GLOB
155d0 20 0a 6f 70 65 72 61 74 6f 72 20 69 73 20 69 6d   .operator is im
155e0 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c  plemented by cal
155f0 6c 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f  ling the functio
15600 6e 0a 5b 67 6c 6f 62 28 3c 69 3e 59 3c 2f 69 3e  n.[glob(<i>Y</i>
15610 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20 61 6e 64 20  ,<i>X</i>)] and 
15620 63 61 6e 20 62 65 20 6d 6f 64 69 66 69 65 64 20  can be modified 
15630 62 79 20 6f 76 65 72 72 69 64 69 6e 67 0a 74 68  by overriding.th
15640 61 74 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70 3e  at function.</p>
15650 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
15660 6e 74 20 72 65 67 65 78 70 20 52 45 47 45 58 50  nt regexp REGEXP
15670 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 52  </tcl>.<p>^The R
15680 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72 20 69  EGEXP operator i
15690 73 20 61 20 73 70 65 63 69 61 6c 20 73 79 6e 74  s a special synt
156a0 61 78 20 66 6f 72 20 74 68 65 20 72 65 67 65 78  ax for the regex
156b0 70 28 29 0a 75 73 65 72 20 66 75 6e 63 74 69 6f  p().user functio
156c0 6e 2e 20 20 5e 4e 6f 20 72 65 67 65 78 70 28 29  n.  ^No regexp()
156d0 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 69   user function i
156e0 73 20 64 65 66 69 6e 65 64 20 62 79 20 64 65 66  s defined by def
156f0 61 75 6c 74 0a 61 6e 64 20 73 6f 20 75 73 65 20  ault.and so use 
15700 6f 66 20 74 68 65 20 52 45 47 45 58 50 20 6f 70  of the REGEXP op
15710 65 72 61 74 6f 72 20 77 69 6c 6c 20 6e 6f 72 6d  erator will norm
15720 61 6c 6c 79 20 72 65 73 75 6c 74 20 69 6e 20 61  ally result in a
15730 6e 0a 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e  n.error message.
15740 20 20 5e 49 66 20 61 6e 20 5b 61 70 70 6c 69 63    ^If an [applic
15750 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53 51  ation-defined SQ
15760 4c 20 66 75 6e 63 74 69 6f 6e 5d 20 6e 61 6d 65  L function] name
15770 64 20 22 72 65 67 65 78 70 22 0a 69 73 20 61 64  d "regexp".is ad
15780 64 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65 2c  ded at run-time,
15790 20 74 68 65 6e 20 74 68 65 20 22 3c 69 3e 58 3c   then the "<i>X<
157a0 2f 69 3e 20 52 45 47 45 58 50 20 3c 69 3e 59 3c  /i> REGEXP <i>Y<
157b0 2f 69 3e 22 20 6f 70 65 72 61 74 6f 72 20 77 69  /i>" operator wi
157c0 6c 6c 0a 62 65 20 69 6d 70 6c 65 6d 65 6e 74 65  ll.be implemente
157d0 64 20 61 73 20 61 20 63 61 6c 6c 20 74 6f 20 22  d as a call to "
157e0 72 65 67 65 78 70 28 3c 69 3e 59 3c 2f 69 3e 2c  regexp(<i>Y</i>,
157f0 3c 69 3e 58 3c 2f 69 3e 29 22 2e 3c 2f 70 3e 0a  <i>X</i>)".</p>.
15800 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
15810 74 20 6d 61 74 63 68 20 4d 41 54 43 48 3c 2f 74  t match MATCH</t
15820 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 4d 41 54 43  cl>.<p>^The MATC
15830 48 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20  H operator is a 
15840 73 70 65 63 69 61 6c 20 73 79 6e 74 61 78 20 66  special syntax f
15850 6f 72 20 74 68 65 20 6d 61 74 63 68 28 29 0a 61  or the match().a
15860 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e  pplication-defin
15870 65 64 20 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 54  ed function.  ^T
15880 68 65 20 64 65 66 61 75 6c 74 20 6d 61 74 63 68  he default match
15890 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c  () function impl
158a0 65 6d 65 6e 74 61 74 69 6f 6e 0a 72 61 69 73 65  ementation.raise
158b0 73 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 61  s an exception a
158c0 6e 64 20 69 73 20 6e 6f 74 20 72 65 61 6c 6c 79  nd is not really
158d0 20 75 73 65 66 75 6c 20 66 6f 72 20 61 6e 79 74   useful for anyt
158e0 68 69 6e 67 2e 0a 5e 42 75 74 20 65 78 74 65 6e  hing..^But exten
158f0 73 69 6f 6e 73 20 63 61 6e 20 6f 76 65 72 72 69  sions can overri
15900 64 65 20 74 68 65 20 6d 61 74 63 68 28 29 20 66  de the match() f
15910 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 6d 6f 72  unction with mor
15920 65 0a 68 65 6c 70 66 75 6c 20 6c 6f 67 69 63 2e  e.helpful logic.
15930 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
15940 61 67 6d 65 6e 74 20 62 65 74 77 65 65 6e 20 42  agment between B
15950 45 54 57 45 45 4e 3c 2f 74 63 6c 3e 0a 3c 68 33  ETWEEN</tcl>.<h3
15960 3e 54 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65  >The BETWEEN ope
15970 72 61 74 6f 72 3c 2f 68 33 3e 0a 3c 70 3e 5e 28  rator</h3>.<p>^(
15980 54 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72  The BETWEEN oper
15990 61 74 6f 72 20 69 73 20 6c 6f 67 69 63 61 6c 6c  ator is logicall
159a0 79 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20  y equivalent to 
159b0 61 20 70 61 69 72 20 6f 66 20 63 6f 6d 70 61 72  a pair of compar
159c0 69 73 6f 6e 73 2e 0a 22 3c 69 3e 78 3c 2f 69 3e  isons.."<i>x</i>
159d0 20 3c 62 3e 42 45 54 57 45 45 4e 3c 2f 62 3e 20   <b>BETWEEN</b> 
159e0 3c 69 3e 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c  <i>y</i> <b>AND<
159f0 2f 62 3e 20 3c 69 3e 7a 3c 2f 69 3e 22 20 69 73  /b> <i>z</i>" is
15a00 20 0a 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20   .equivalent to 
15a10 0a 22 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 67 74  ."<i>x</i><b>&gt
15a20 3b 3d 3c 2f 62 3e 3c 69 3e 79 3c 2f 69 3e 20 3c  ;=</b><i>y</i> <
15a30 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e 78 3c 2f  b>AND</b> <i>x</
15a40 69 3e 3c 62 3e 26 6c 74 3b 3d 3c 2f 62 3e 3c 69  i><b>&lt;=</b><i
15a50 3e 7a 3c 2f 69 3e 22 20 65 78 63 65 70 74 0a 74  >z</i>" except.t
15a60 68 61 74 20 77 69 74 68 20 42 45 54 57 45 45 4e  hat with BETWEEN
15a70 2c 20 74 68 65 20 3c 69 3e 78 3c 2f 69 3e 20 65  , the <i>x</i> e
15a80 78 70 72 65 73 73 69 6f 6e 20 69 73 20 6f 6e 6c  xpression is onl
15a90 79 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65  y evaluated once
15aa0 2e 29 5e 0a 5e 54 68 65 20 70 72 65 63 65 64 65  .)^.^The precede
15ab0 6e 63 65 20 6f 66 20 74 68 65 20 42 45 54 57 45  nce of the BETWE
15ac0 45 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 74  EN operator is t
15ad0 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 70  he same as the p
15ae0 72 65 63 65 64 65 6e 63 65 0a 61 73 20 6f 70 65  recedence.as ope
15af0 72 61 74 6f 72 73 20 3c 62 3e 3d 3d 3c 2f 62 3e  rators <b>==</b>
15b00 20 61 6e 64 20 3c 62 3e 21 3d 3c 2f 62 3e 20 61   and <b>!=</b> a
15b10 6e 64 20 3c 62 3e 4c 49 4b 45 3c 2f 62 3e 20 61  nd <b>LIKE</b> a
15b20 6e 64 20 67 72 6f 75 70 73 20 6c 65 66 74 20 74  nd groups left t
15b30 6f 20 72 69 67 68 74 2e 0a 0a 3c 74 63 6c 3e 68  o right...<tcl>h
15b40 64 5f 66 72 61 67 6d 65 6e 74 20 63 61 73 65 20  d_fragment case 
15b50 7b 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e  {CASE expression
15b60 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  }</tcl>.<h3>The 
15b70 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 3c  CASE expression<
15b80 2f 68 33 3e 0a 3c 70 3e 41 20 43 41 53 45 20 65  /h3>.<p>A CASE e
15b90 78 70 72 65 73 73 69 6f 6e 20 73 65 72 76 65 73  xpression serves
15ba0 20 61 20 72 6f 6c 65 20 73 69 6d 69 6c 61 72 20   a role similar 
15bb0 74 6f 20 49 46 2d 54 48 45 4e 2d 45 4c 53 45 20  to IF-THEN-ELSE 
15bc0 69 6e 20 6f 74 68 65 72 0a 70 72 6f 67 72 61 6d  in other.program
15bd0 6d 69 6e 67 20 6c 61 6e 67 75 61 67 65 73 2e 20  ming languages. 
15be0 20 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e   ..<p>The option
15bf0 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  al expression th
15c00 61 74 20 6f 63 63 75 72 73 20 69 6e 20 62 65 74  at occurs in bet
15c10 77 65 65 6e 20 74 68 65 20 43 41 53 45 20 6b 65  ween the CASE ke
15c20 79 77 6f 72 64 20 61 6e 64 20 74 68 65 0a 66 69  yword and the.fi
15c30 72 73 74 20 57 48 45 4e 20 6b 65 79 77 6f 72 64  rst WHEN keyword
15c40 20 69 73 20 63 61 6c 6c 65 64 20 74 68 65 20 22   is called the "
15c50 62 61 73 65 22 20 65 78 70 72 65 73 73 69 6f 6e  base" expression
15c60 2e 20 5e 54 68 65 72 65 20 61 72 65 20 74 77 6f  . ^There are two
15c70 20 62 61 73 69 63 20 66 6f 72 6d 73 0a 6f 66 20   basic forms.of 
15c80 74 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73  the CASE express
15c90 69 6f 6e 3a 20 74 68 6f 73 65 20 77 69 74 68 20  ion: those with 
15ca0 61 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f  a base expressio
15cb0 6e 20 61 6e 64 20 74 68 6f 73 65 20 77 69 74 68  n and those with
15cc0 6f 75 74 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43  out...<p>^In a C
15cd0 41 53 45 20 77 69 74 68 6f 75 74 20 61 20 62 61  ASE without a ba
15ce0 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 65  se expression, e
15cf0 61 63 68 20 57 48 45 4e 20 65 78 70 72 65 73 73  ach WHEN express
15d00 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64  ion is evaluated
15d10 0a 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20  .and the result 
15d20 74 72 65 61 74 65 64 20 61 73 20 61 20 62 6f 6f  treated as a boo
15d30 6c 65 61 6e 2c 20 73 74 61 72 74 69 6e 67 20 77  lean, starting w
15d40 69 74 68 20 74 68 65 20 6c 65 66 74 6d 6f 73 74  ith the leftmost
15d50 20 61 6e 64 20 63 6f 6e 74 69 6e 75 69 6e 67 0a   and continuing.
15d60 74 6f 20 74 68 65 20 72 69 67 68 74 2e 20 5e 54  to the right. ^T
15d70 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
15d80 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
15d90 20 69 73 20 74 68 65 20 65 76 61 6c 75 61 74 69   is the evaluati
15da0 6f 6e 20 6f 66 20 74 68 65 20 54 48 45 4e 0a 65  on of the THEN.e
15db0 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 63  xpression that c
15dc0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
15dd0 65 20 66 69 72 73 74 20 57 48 45 4e 20 65 78 70  e first WHEN exp
15de0 72 65 73 73 69 6f 6e 20 74 68 61 74 20 65 76 61  ression that eva
15df0 6c 75 61 74 65 73 20 74 6f 0a 74 72 75 65 2e 20  luates to.true. 
15e00 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65 20 6f 66 20  ^Or, if none of 
15e10 74 68 65 20 57 48 45 4e 20 65 78 70 72 65 73 73  the WHEN express
15e20 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 20 74 6f  ions evaluate to
15e30 20 74 72 75 65 2c 20 74 68 65 20 72 65 73 75 6c   true, the resul
15e40 74 20 6f 66 0a 65 76 61 6c 75 61 74 69 6e 67 20  t of.evaluating 
15e50 74 68 65 20 45 4c 53 45 20 65 78 70 72 65 73 73  the ELSE express
15e60 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 20 5e 49 66  ion, if any. ^If
15e70 20 74 68 65 72 65 20 69 73 20 6e 6f 20 45 4c 53   there is no ELS
15e80 45 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  E expression and
15e90 0a 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45  .none of the WHE
15ea0 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72  N expressions ar
15eb0 65 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65  e true, then the
15ec0 20 6f 76 65 72 61 6c 6c 20 72 65 73 75 6c 74 20   overall result 
15ed0 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e 41 20  is NULL...<p>^A 
15ee0 4e 55 4c 4c 20 72 65 73 75 6c 74 20 69 73 20 63  NULL result is c
15ef0 6f 6e 73 69 64 65 72 65 64 20 75 6e 74 72 75 65  onsidered untrue
15f00 20 77 68 65 6e 20 65 76 61 6c 75 61 74 69 6e 67   when evaluating
15f10 20 57 48 45 4e 20 74 65 72 6d 73 2e 0a 0a 3c 70   WHEN terms...<p
15f20 3e 5e 49 6e 20 61 20 43 41 53 45 20 77 69 74 68  >^In a CASE with
15f30 20 61 20 62 61 73 65 20 65 78 70 72 65 73 73 69   a base expressi
15f40 6f 6e 2c 20 74 68 65 20 62 61 73 65 20 65 78 70  on, the base exp
15f50 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75  ression is evalu
15f60 61 74 65 64 20 6a 75 73 74 0a 6f 6e 63 65 20 61  ated just.once a
15f70 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  nd the result is
15f80 20 63 6f 6d 70 61 72 65 64 20 61 67 61 69 6e 73   compared agains
15f90 74 20 74 68 65 20 65 76 61 6c 75 61 74 69 6f 6e  t the evaluation
15fa0 20 6f 66 20 65 61 63 68 20 57 48 45 4e 20 0a 65   of each WHEN .e
15fb0 78 70 72 65 73 73 69 6f 6e 20 66 72 6f 6d 20 6c  xpression from l
15fc0 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 5e 54  eft to right. ^T
15fd0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
15fe0 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
15ff0 20 69 73 20 74 68 65 20 0a 65 76 61 6c 75 61 74   is the .evaluat
16000 69 6f 6e 20 6f 66 20 74 68 65 20 54 48 45 4e 20  ion of the THEN 
16010 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
16020 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
16030 68 65 20 66 69 72 73 74 20 57 48 45 4e 0a 65 78  he first WHEN.ex
16040 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 77 68 69  pression for whi
16050 63 68 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  ch the compariso
16060 6e 20 69 73 20 74 72 75 65 2e 20 5e 4f 72 2c 20  n is true. ^Or, 
16070 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57  if none of the W
16080 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e 73 20  HEN.expressions 
16090 65 76 61 6c 75 61 74 65 20 74 6f 20 61 20 76 61  evaluate to a va
160a0 6c 75 65 20 65 71 75 61 6c 20 74 6f 20 74 68 65  lue equal to the
160b0 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e   base expression
160c0 2c 20 74 68 65 20 72 65 73 75 6c 74 0a 6f 66 20  , the result.of 
160d0 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 45  evaluating the E
160e0 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  LSE expression, 
160f0 69 66 20 61 6e 79 2e 20 5e 49 66 20 74 68 65 72  if any. ^If ther
16100 65 20 69 73 20 6e 6f 20 45 4c 53 45 20 65 78 70  e is no ELSE exp
16110 72 65 73 73 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65  ression and.none
16120 20 6f 66 20 74 68 65 20 57 48 45 4e 20 65 78 70   of the WHEN exp
16130 72 65 73 73 69 6f 6e 73 20 70 72 6f 64 75 63 65  ressions produce
16140 20 61 20 72 65 73 75 6c 74 20 65 71 75 61 6c 20   a result equal 
16150 74 6f 20 74 68 65 20 62 61 73 65 20 65 78 70 72  to the base expr
16160 65 73 73 69 6f 6e 2c 0a 74 68 65 20 6f 76 65 72  ession,.the over
16170 61 6c 6c 20 72 65 73 75 6c 74 20 69 73 20 4e 55  all result is NU
16180 4c 4c 2e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 63 6f  LL...<p>^When co
16190 6d 70 61 72 69 6e 67 20 61 20 62 61 73 65 20 65  mparing a base e
161a0 78 70 72 65 73 73 69 6f 6e 20 61 67 61 69 6e 73  xpression agains
161b0 74 20 61 20 57 48 45 4e 20 65 78 70 72 65 73 73  t a WHEN express
161c0 69 6f 6e 2c 20 74 68 65 20 73 61 6d 65 0a 63 6f  ion, the same.co
161d0 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
161e0 2c 20 61 66 66 69 6e 69 74 79 2c 20 61 6e 64 20  , affinity, and 
161f0 4e 55 4c 4c 2d 68 61 6e 64 6c 69 6e 67 20 72 75  NULL-handling ru
16200 6c 65 73 20 61 70 70 6c 79 20 61 73 20 69 66 20  les apply as if 
16210 74 68 65 0a 62 61 73 65 20 65 78 70 72 65 73 73  the.base express
16220 69 6f 6e 20 61 6e 64 20 57 48 45 4e 20 65 78 70  ion and WHEN exp
16230 72 65 73 73 69 6f 6e 20 61 72 65 20 72 65 73 70  ression are resp
16240 65 63 74 69 76 65 6c 79 20 74 68 65 20 6c 65 66  ectively the lef
16250 74 2d 20 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e  t- and.right-han
16260 64 20 6f 70 65 72 61 6e 64 73 20 6f 66 20 61 6e  d operands of an
16270 20 3c 62 69 67 3e 3c 62 3e 3d 3c 2f 62 3e 3c 2f   <big><b>=</b></
16280 62 69 67 3e 20 6f 70 65 72 61 74 6f 72 2e 3c 2f  big> operator.</
16290 70 3e 20 5e 49 66 20 74 68 65 20 62 61 73 65 20  p> ^If the base 
162a0 0a 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 4e  .expression is N
162b0 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
162c0 75 6c 74 20 6f 66 20 74 68 65 20 43 41 53 45 20  ult of the CASE 
162d0 69 73 20 61 6c 77 61 79 73 20 74 68 65 20 72 65  is always the re
162e0 73 75 6c 74 20 0a 6f 66 20 65 76 61 6c 75 61 74  sult .of evaluat
162f0 69 6e 67 20 74 68 65 20 45 4c 53 45 20 65 78 70  ing the ELSE exp
16300 72 65 73 73 69 6f 6e 20 69 66 20 69 74 20 65 78  ression if it ex
16310 69 73 74 73 2c 20 6f 72 20 4e 55 4c 4c 20 69 66  ists, or NULL if
16320 20 69 74 20 64 6f 65 73 20 6e 6f 74 2e 0a 0a 3c   it does not...<
16330 70 3e 5e 42 6f 74 68 20 66 6f 72 6d 73 20 6f 66  p>^Both forms of
16340 20 74 68 65 20 43 41 53 45 20 65 78 70 72 65 73   the CASE expres
16350 73 69 6f 6e 20 75 73 65 20 6c 61 7a 79 2c 20 6f  sion use lazy, o
16360 72 20 73 68 6f 72 74 2d 63 69 72 63 75 69 74 2c  r short-circuit,
16370 20 0a 65 76 61 6c 75 61 74 69 6f 6e 2e 0a 0a 3c   .evaluation...<
16380 70 3e 5e 28 54 68 65 20 6f 6e 6c 79 20 64 69 66  p>^(The only dif
16390 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
163a0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 77  the following tw
163b0 6f 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  o CASE expressio
163c0 6e 73 20 69 73 20 74 68 61 74 20 0a 74 68 65 20  ns is that .the 
163d0 3c 69 3e 78 3c 2f 69 3e 20 65 78 70 72 65 73 73  <i>x</i> express
163e0 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64  ion is evaluated
163f0 20 65 78 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e   exactly once in
16400 20 74 68 65 20 66 69 72 73 74 20 65 78 61 6d 70   the first examp
16410 6c 65 20 62 75 74 20 0a 6d 69 67 68 74 20 62 65  le but .might be
16420 20 65 76 61 6c 75 61 74 65 64 20 6d 75 6c 74 69   evaluated multi
16430 70 6c 65 20 74 69 6d 65 73 20 69 6e 20 74 68 65  ple times in the
16440 20 73 65 63 6f 6e 64 3a 0a 0a 3c 75 6c 3e 3c 70   second:..<ul><p
16450 72 65 3e 0a 3c 6c 69 3e 43 41 53 45 20 78 20 57  re>.<li>CASE x W
16460 48 45 4e 20 77 31 20 54 48 45 4e 20 72 31 20 57  HEN w1 THEN r1 W
16470 48 45 4e 20 77 32 20 54 48 45 4e 20 72 32 20 45  HEN w2 THEN r2 E
16480 4c 53 45 20 72 33 20 45 4e 44 0a 3c 6c 69 3e 43  LSE r3 END.<li>C
16490 41 53 45 20 57 48 45 4e 20 78 3d 77 31 20 54 48  ASE WHEN x=w1 TH
164a0 45 4e 20 72 31 20 57 48 45 4e 20 78 3d 77 32 20  EN r1 WHEN x=w2 
164b0 54 48 45 4e 20 72 32 20 45 4c 53 45 20 72 33 20  THEN r2 ELSE r3 
164c0 45 4e 44 0a 3c 2f 70 72 65 3e 3c 2f 75 6c 3e 29  END.</pre></ul>)
164d0 5e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  ^...<tcl>hd_frag
164e0 6d 65 6e 74 20 69 6e 5f 6f 70 20 7b 49 4e 20 6f  ment in_op {IN o
164f0 70 65 72 61 74 6f 72 7d 20 7b 4e 4f 54 20 49 4e  perator} {NOT IN
16500 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e   operator}</tcl>
16510 0a 3c 68 33 3e 54 68 65 20 49 4e 20 61 6e 64 20  .<h3>The IN and 
16520 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 73  NOT IN operators
16530 3c 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e  </h3>.<p>^The IN
16540 20 61 6e 64 20 4e 4f 54 20 49 4e 20 6f 70 65 72   and NOT IN oper
16550 61 74 6f 72 73 20 74 61 6b 65 20 61 20 73 69 6e  ators take a sin
16560 67 6c 65 20 73 63 61 6c 61 72 20 6f 70 65 72 61  gle scalar opera
16570 6e 64 20 6f 6e 20 74 68 65 0a 6c 65 66 74 20 61  nd on the.left a
16580 6e 64 20 61 20 76 65 63 74 6f 72 20 6f 70 65 72  nd a vector oper
16590 61 6e 64 20 6f 6e 20 74 68 65 20 72 69 67 68 74  and on the right
165a0 0a 66 6f 72 6d 65 64 20 62 79 20 61 6e 20 65 78  .formed by an ex
165b0 70 6c 69 63 69 74 20 6c 69 73 74 20 6f 66 20 7a  plicit list of z
165c0 65 72 6f 20 6f 72 20 6d 6f 72 65 20 73 63 61 6c  ero or more scal
165d0 61 72 73 20 6f 72 20 62 79 20 61 20 0a 73 69 6e  ars or by a .sin
165e0 67 6c 65 20 73 75 62 71 75 65 72 79 2e 0a 5e 57  gle subquery..^W
165f0 68 65 6e 20 74 68 65 20 72 69 67 68 74 20 6f 70  hen the right op
16600 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e 20 6f  erand of an IN o
16610 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f  r NOT IN operato
16620 72 20 69 73 20 61 20 73 75 62 71 75 65 72 79 2c  r is a subquery,
16630 20 74 68 65 0a 73 75 62 71 75 65 72 79 20 6d 75   the.subquery mu
16640 73 74 20 68 61 76 65 20 61 20 73 69 6e 67 6c 65  st have a single
16650 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 2e 0a   result column..
16660 5e 54 68 65 20 22 73 75 62 71 75 65 72 79 22 20  ^The "subquery" 
16670 6f 6e 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e  on the right-han
16680 64 20 73 69 64 65 20 6f 66 20 61 6e 20 49 4e 20  d side of an IN 
16690 6f 70 65 72 61 74 6f 72 20 63 61 6e 20 62 65 20  operator can be 
166a0 61 0a 74 61 62 6c 65 20 6e 61 6d 65 20 6f 72 20  a.table name or 
166b0 5b 74 61 62 6c 65 2d 76 61 6c 75 65 64 20 66 75  [table-valued fu
166c0 6e 63 74 69 6f 6e 5d 20 6e 61 6d 65 20 69 6e 20  nction] name in 
166d0 77 68 69 63 68 20 63 61 73 65 20 74 68 65 0a 73  which case the.s
166e0 75 62 71 75 65 72 79 20 69 73 20 75 6e 64 65 72  ubquery is under
166f0 73 74 6f 6f 64 20 74 6f 20 62 65 20 22 28 53 45  stood to be "(SE
16700 4c 45 43 54 20 2a 20 46 52 4f 4d 20 3c 69 3e 6e  LECT * FROM <i>n
16710 61 6d 65 3c 2f 69 3e 29 22 2e 0a 5e 57 68 65 6e  ame</i>)"..^When
16720 20 74 68 65 20 72 69 67 68 74 20 6f 70 65 72 61   the right opera
16730 6e 64 20 69 73 20 61 6e 20 65 6d 70 74 79 20 73  nd is an empty s
16740 65 74 2c 20 74 68 65 20 72 65 73 75 6c 74 20 6f  et, the result o
16750 66 20 49 4e 20 69 73 20 66 61 6c 73 65 20 61 6e  f IN is false an
16760 64 20 74 68 65 0a 72 65 73 75 6c 74 20 6f 66 20  d the.result of 
16770 4e 4f 54 20 49 4e 20 69 73 20 74 72 75 65 2c 20  NOT IN is true, 
16780 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68  regardless of th
16790 65 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 61  e left operand a
167a0 6e 64 20 65 76 65 6e 20 69 66 20 74 68 65 0a 6c  nd even if the.l
167b0 65 66 74 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  eft operand is N
167c0 55 4c 4c 2e 0a 3c 70 3e 5e 28 54 68 65 20 72 65  ULL..<p>^(The re
167d0 73 75 6c 74 20 6f 66 20 61 6e 20 49 4e 20 6f 72  sult of an IN or
167e0 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72   NOT IN operator
167f0 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
16800 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  y the following.
16810 6d 61 74 72 69 78 3a 0a 0a 3c 63 65 6e 74 65 72  matrix:..<center
16820 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  >.<table border=
16830 31 3e 0a 3c 74 72 3e 0a 3c 74 68 3e 4c 65 66 74  1>.<tr>.<th>Left
16840 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e 69 73 20   operand <br>is 
16850 4e 55 4c 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f  NULL.<th>Right o
16860 70 65 72 61 6e 64 20 3c 62 72 3e 63 6f 6e 74 61  perand <br>conta
16870 69 6e 73 20 4e 55 4c 4c 0a 3c 74 68 3e 52 69 67  ins NULL.<th>Rig
16880 68 74 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e 69  ht operand <br>i
16890 73 20 61 6e 20 65 6d 70 74 79 20 73 65 74 0a 3c  s an empty set.<
168a0 74 68 3e 4c 65 66 74 20 6f 70 65 72 61 6e 64 20  th>Left operand 
168b0 66 6f 75 6e 64 20 3c 62 72 3e 77 69 74 68 69 6e  found <br>within
168c0 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 0a 3c   right operand.<
168d0 74 68 3e 52 65 73 75 6c 74 20 6f 66 20 3c 62 72  th>Result of <br
168e0 3e 49 4e 20 6f 70 65 72 61 74 6f 72 0a 3c 74 68  >IN operator.<th
168f0 3e 52 65 73 75 6c 74 20 6f 66 20 3c 62 72 3e 4e  >Result of <br>N
16900 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 0a 3c  OT IN operator.<
16910 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  tr>.<td align="c
16920 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
16930 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
16940 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
16950 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
16960 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
16970 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66  align="center">f
16980 61 6c 73 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  alse.<td align="
16990 63 65 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74 72  center">true.<tr
169a0 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  >.<td align="cen
169b0 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61  ter">does not ma
169c0 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  tter.<td align="
169d0 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
169e0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65  lign="center">ye
169f0 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  s.<td align="cen
16a00 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
16a10 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65  n="center">false
16a20 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
16a30 65 72 22 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74  er">true.<tr>.<t
16a40 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
16a50 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
16a60 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20  enter">does not 
16a70 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e  matter.<td align
16a80 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
16a90 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
16aa0 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  yes.<td align="c
16ab0 65 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74 64 20  enter">true.<td 
16ac0 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66  align="center">f
16ad0 61 6c 73 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  alse.<tr>.<td al
16ae0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
16af0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
16b00 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e  r">yes.<td align
16b10 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
16b20 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
16b30 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
16b40 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64 20 61  nter">NULL.<td a
16b50 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55  lign="center">NU
16b60 4c 4c 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  LL.<tr>.<td alig
16b70 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c  n="center">yes.<
16b80 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
16b90 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65  ">does not matte
16ba0 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  r.<td align="cen
16bb0 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
16bc0 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20  n="center">does 
16bd0 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61  not matter.<td a
16be0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55  lign="center">NU
16bf0 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  LL.<td align="ce
16c00 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 2f 74 61 62  nter">NULL.</tab
16c10 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a  le>.</center>)^.
16c20 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 53  .<p>^Note that S
16c30 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74 68 65  QLite allows the
16c40 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c   parenthesized l
16c50 69 73 74 20 6f 66 20 73 63 61 6c 61 72 20 76 61  ist of scalar va
16c60 6c 75 65 73 20 6f 6e 0a 74 68 65 20 72 69 67 68  lues on.the righ
16c70 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 61  t-hand side of a
16c80 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f  n IN or NOT IN o
16c90 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20 61 6e  perator to be an
16ca0 20 65 6d 70 74 79 20 6c 69 73 74 20 62 75 74 0a   empty list but.
16cb0 6d 6f 73 74 20 6f 74 68 65 72 20 53 51 4c 20 64  most other SQL d
16cc0 61 74 61 62 61 73 65 20 64 61 74 61 62 61 73 65  atabase database
16cd0 20 65 6e 67 69 6e 65 73 20 61 6e 64 20 74 68 65   engines and the
16ce0 20 53 51 4c 39 32 20 73 74 61 6e 64 61 72 64 20   SQL92 standard 
16cf0 72 65 71 75 69 72 65 0a 74 68 65 20 6c 69 73 74  require.the list
16d00 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 74 20 6c   to contain at l
16d10 65 61 73 74 20 6f 6e 65 20 65 6c 65 6d 65 6e 74  east one element
16d20 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
16d30 72 61 67 6d 65 6e 74 20 69 6e 5f 6f 70 20 7b 45  ragment in_op {E
16d40 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 7d 20  XISTS operator} 
16d50 7b 4e 4f 54 20 45 58 49 53 54 53 20 6f 70 65 72  {NOT EXISTS oper
16d60 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  ator}</tcl>.<h3>
16d70 54 68 65 20 45 58 49 53 54 53 20 6f 70 65 72 61  The EXISTS opera
16d80 74 6f 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68  tor</h3>..<p>^Th
16d90 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f  e EXISTS operato
16da0 72 20 61 6c 77 61 79 73 20 65 76 61 6c 75 61 74  r always evaluat
16db0 65 73 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65  es to one of the
16dc0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20   integer values 
16dd0 30 20 0a 61 6e 64 20 31 2e 20 5e 49 66 20 65 78  0 .and 1. ^If ex
16de0 65 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c 45  ecuting the SELE
16df0 43 54 20 73 74 61 74 65 6d 65 6e 74 20 73 70 65  CT statement spe
16e00 63 69 66 69 65 64 20 61 73 20 74 68 65 20 72 69  cified as the ri
16e10 67 68 74 2d 68 61 6e 64 20 0a 6f 70 65 72 61 6e  ght-hand .operan
16e20 64 20 6f 66 20 74 68 65 20 45 58 49 53 54 53 20  d of the EXISTS 
16e30 6f 70 65 72 61 74 6f 72 20 77 6f 75 6c 64 20 72  operator would r
16e40 65 74 75 72 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72  eturn one or mor
16e50 65 20 72 6f 77 73 2c 20 74 68 65 6e 20 74 68 65  e rows, then the
16e60 0a 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72  .EXISTS operator
16e70 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 31 2e   evaluates to 1.
16e80 20 5e 49 66 20 65 78 65 63 75 74 69 6e 67 20 74   ^If executing t
16e90 68 65 20 53 45 4c 45 43 54 20 77 6f 75 6c 64 20  he SELECT would 
16ea0 72 65 74 75 72 6e 0a 6e 6f 20 72 6f 77 73 20 61  return.no rows a
16eb0 74 20 61 6c 6c 2c 20 74 68 65 6e 20 74 68 65 20  t all, then the 
16ec0 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 20  EXISTS operator 
16ed0 65 76 61 6c 75 61 74 65 73 20 74 6f 20 30 2e 20  evaluates to 0. 
16ee0 0a 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d 62 65 72  ..<p>^The number
16ef0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 65   of columns in e
16f00 61 63 68 20 72 6f 77 20 72 65 74 75 72 6e 65 64  ach row returned
16f10 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73   by the SELECT s
16f20 74 61 74 65 6d 65 6e 74 0a 28 69 66 20 61 6e 79  tatement.(if any
16f30 29 20 61 6e 64 20 74 68 65 20 73 70 65 63 69 66  ) and the specif
16f40 69 63 20 76 61 6c 75 65 73 20 72 65 74 75 72 6e  ic values return
16f50 65 64 20 68 61 76 65 20 6e 6f 20 65 66 66 65 63  ed have no effec
16f60 74 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73  t on the results
16f70 0a 6f 66 20 74 68 65 20 45 58 49 53 54 53 20 6f  .of the EXISTS o
16f80 70 65 72 61 74 6f 72 2e 20 5e 49 6e 20 70 61 72  perator. ^In par
16f90 74 69 63 75 6c 61 72 2c 20 72 6f 77 73 20 63 6f  ticular, rows co
16fa0 6e 74 61 69 6e 69 6e 67 20 4e 55 4c 4c 20 76 61  ntaining NULL va
16fb0 6c 75 65 73 20 61 72 65 0a 6e 6f 74 20 68 61 6e  lues are.not han
16fc0 64 6c 65 64 20 61 6e 79 20 64 69 66 66 65 72 65  dled any differe
16fd0 6e 74 6c 79 20 66 72 6f 6d 20 72 6f 77 73 20 77  ntly from rows w
16fe0 69 74 68 6f 75 74 20 4e 55 4c 4c 20 76 61 6c 75  ithout NULL valu
16ff0 65 73 2e 0a 0a 3c 68 33 3e 53 63 61 6c 61 72 20  es...<h3>Scalar 
17000 53 75 62 71 75 65 72 69 65 73 3c 2f 68 33 3e 0a  Subqueries</h3>.
17010 0a 3c 70 3e 5e 41 20 5b 53 45 4c 45 43 54 5d 20  .<p>^A [SELECT] 
17020 73 74 61 74 65 6d 65 6e 74 20 65 6e 63 6c 6f 73  statement enclos
17030 65 64 20 69 6e 20 70 61 72 65 6e 74 68 65 73 65  ed in parenthese
17040 73 20 6d 61 79 20 61 70 70 65 61 72 20 61 73 20  s may appear as 
17050 61 20 73 63 61 6c 61 72 0a 71 75 61 6e 74 69 74  a scalar.quantit
17060 79 2e 20 5e 41 20 5b 53 45 4c 45 43 54 5d 20 75  y. ^A [SELECT] u
17070 73 65 64 20 61 73 20 61 20 73 63 61 6c 61 72 20  sed as a scalar 
17080 71 75 61 6e 74 69 74 79 20 6d 75 73 74 20 72 65  quantity must re
17090 74 75 72 6e 20 61 20 72 65 73 75 6c 74 20 73 65  turn a result se
170a0 74 0a 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  t.with a single 
170b0 63 6f 6c 75 6d 6e 2e 20 5e 54 68 65 20 72 65 73  column. ^The res
170c0 75 6c 74 20 6f 66 20 74 68 65 20 65 78 70 72 65  ult of the expre
170d0 73 73 69 6f 6e 20 69 73 20 74 68 65 20 76 61 6c  ssion is the val
170e0 75 65 20 6f 66 20 74 68 65 0a 6f 6e 6c 79 20 63  ue of the.only c
170f0 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 69 72  olumn in the fir
17100 73 74 20 72 6f 77 20 72 65 74 75 72 6e 65 64 20  st row returned 
17110 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  by the SELECT st
17120 61 74 65 6d 65 6e 74 2e 20 5e 49 66 20 74 68 65  atement. ^If the
17130 20 53 45 4c 45 43 54 20 0a 79 69 65 6c 64 73 20   SELECT .yields 
17140 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 65  more than one re
17150 73 75 6c 74 20 72 6f 77 2c 20 61 6c 6c 20 72 6f  sult row, all ro
17160 77 73 20 61 66 74 65 72 20 74 68 65 20 66 69 72  ws after the fir
17170 73 74 20 61 72 65 20 69 67 6e 6f 72 65 64 2e 20  st are ignored. 
17180 5e 49 66 0a 74 68 65 20 53 45 4c 45 43 54 20 79  ^If.the SELECT y
17190 69 65 6c 64 73 20 6e 6f 20 72 6f 77 73 2c 20 74  ields no rows, t
171a0 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66  hen the value of
171b0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
171c0 69 73 20 4e 55 4c 4c 2e 0a 5e 28 54 68 65 20 4c  is NULL..^(The L
171d0 49 4d 49 54 20 6f 66 20 61 20 73 63 61 6c 61 72  IMIT of a scalar
171e0 20 73 75 62 71 75 65 72 79 20 69 73 20 61 6c 77   subquery is alw
171f0 61 79 73 20 31 2e 0a 41 6e 79 20 6f 74 68 65 72  ays 1..Any other
17200 20 4c 49 4d 49 54 20 76 61 6c 75 65 20 67 69 76   LIMIT value giv
17210 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 74 65  en in the SQL te
17220 78 74 20 69 73 20 69 67 6e 6f 72 65 64 2e 29 5e  xt is ignored.)^
17230 0a 0a 3c 70 3e 5e 41 6c 6c 20 74 79 70 65 73 20  ..<p>^All types 
17240 6f 66 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74  of [SELECT] stat
17250 65 6d 65 6e 74 2c 20 69 6e 63 6c 75 64 69 6e 67  ement, including
17260 20 61 67 67 72 65 67 61 74 65 20 61 6e 64 20 5b   aggregate and [
17270 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d  compound SELECT]
17280 0a 71 75 65 72 69 65 73 20 28 71 75 65 72 69 65  .queries (querie
17290 73 20 77 69 74 68 20 6b 65 79 77 6f 72 64 73 20  s with keywords 
172a0 6c 69 6b 65 20 55 4e 49 4f 4e 20 6f 72 20 45 58  like UNION or EX
172b0 43 45 50 54 29 20 61 72 65 20 61 6c 6c 6f 77 65  CEPT) are allowe
172c0 64 20 61 73 20 73 63 61 6c 61 72 0a 73 75 62 71  d as scalar.subq
172d0 75 65 72 69 65 73 2e 0a 0a 3c 68 33 3e 54 61 62  ueries...<h3>Tab
172e0 6c 65 20 43 6f 6c 75 6d 6e 20 4e 61 6d 65 73 3c  le Column Names<
172f0 2f 68 33 3e 0a 0a 3c 70 3e 5e 41 20 63 6f 6c 75  /h3>..<p>^A colu
17300 6d 6e 20 6e 61 6d 65 20 63 61 6e 20 62 65 20 61  mn name can be a
17310 6e 79 20 6f 66 20 74 68 65 20 6e 61 6d 65 73 20  ny of the names 
17320 64 65 66 69 6e 65 64 20 69 6e 20 74 68 65 20 5b  defined in the [
17330 43 52 45 41 54 45 20 54 41 42 4c 45 5d 0a 73 74  CREATE TABLE].st
17340 61 74 65 6d 65 6e 74 20 6f 72 20 6f 6e 65 20 6f  atement or one o
17350 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
17360 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69 66 69  special identifi
17370 65 72 73 3a 20 22 3c 62 3e 52 4f 57 49 44 3c 2f  ers: "<b>ROWID</
17380 62 3e 22 2c 0a 22 3c 62 3e 4f 49 44 3c 2f 62 3e  b>",."<b>OID</b>
17390 22 2c 20 6f 72 20 22 3c 62 3e 5f 52 4f 57 49 44  ", or "<b>_ROWID
173a0 5f 3c 2f 62 3e 22 2e 0a 5e 54 68 65 20 74 68 72  _</b>"..^The thr
173b0 65 65 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74  ee special ident
173c0 69 66 69 65 72 73 20 64 65 73 63 72 69 62 65 20  ifiers describe 
173d0 74 68 65 0a 75 6e 69 71 75 65 20 69 6e 74 65 67  the.unique integ
173e0 65 72 20 6b 65 79 20 28 74 68 65 20 5b 72 6f 77  er key (the [row
173f0 69 64 5d 29 20 61 73 73 6f 63 69 61 74 65 64 20  id]) associated 
17400 77 69 74 68 20 65 76 65 72 79 20 0a 72 6f 77 20  with every .row 
17410 6f 66 20 65 76 65 72 79 20 74 61 62 6c 65 20 61  of every table a
17420 6e 64 20 73 6f 20 61 72 65 20 6e 6f 74 20 61 76  nd so are not av
17430 61 69 6c 61 62 6c 65 20 6f 6e 20 5b 57 49 54 48  ailable on [WITH
17440 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65  OUT ROWID] table
17450 73 2e 0a 5e 54 68 65 20 73 70 65 63 69 61 6c 20  s..^The special 
17460 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 6c 79  identifiers only
17470 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 72 6f   refer to the ro
17480 77 20 6b 65 79 20 69 66 20 74 68 65 20 5b 43 52  w key if the [CR
17490 45 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74  EATE TABLE].stat
174a0 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 64  ement does not d
174b0 65 66 69 6e 65 20 61 20 72 65 61 6c 20 63 6f 6c  efine a real col
174c0 75 6d 6e 20 77 69 74 68 20 74 68 65 20 73 61 6d  umn with the sam
174d0 65 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 72 6f 77  e name..^The row
174e0 69 64 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  id can be used a
174f0 6e 79 77 68 65 72 65 20 61 20 72 65 67 75 6c 61  nywhere a regula
17500 72 0a 63 6f 6c 75 6d 6e 20 63 61 6e 20 62 65 20  r.column can be 
17510 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41  used.</p>..<p>^A
17520 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d   [SELECT] statem
17530 65 6e 74 20 75 73 65 64 20 61 73 20 65 69 74 68  ent used as eith
17540 65 72 20 61 20 73 63 61 6c 61 72 20 73 75 62 71  er a scalar subq
17550 75 65 72 79 20 6f 72 20 61 73 20 74 68 65 20 0a  uery or as the .
17560 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61  right-hand opera
17570 6e 64 20 6f 66 20 61 6e 20 49 4e 2c 20 4e 4f 54  nd of an IN, NOT
17580 20 49 4e 20 6f 72 20 45 58 49 53 54 53 20 65 78   IN or EXISTS ex
17590 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 63 6f 6e  pression may con
175a0 74 61 69 6e 20 0a 72 65 66 65 72 65 6e 63 65 73  tain .references
175b0 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   to columns in t
175c0 68 65 20 6f 75 74 65 72 20 71 75 65 72 79 2e 20  he outer query. 
175d0 53 75 63 68 20 61 20 73 75 62 71 75 65 72 79 20  Such a subquery 
175e0 69 73 20 6b 6e 6f 77 6e 20 61 73 0a 61 20 63 6f  is known as.a co
175f0 72 72 65 6c 61 74 65 64 20 73 75 62 71 75 65 72  rrelated subquer
17600 79 2e 20 5e 41 20 63 6f 72 72 65 6c 61 74 65 64  y. ^A correlated
17610 20 73 75 62 71 75 65 72 79 20 69 73 20 72 65 65   subquery is ree
17620 76 61 6c 75 61 74 65 64 20 65 61 63 68 20 74 69  valuated each ti
17630 6d 65 0a 69 74 73 20 72 65 73 75 6c 74 20 69 73  me.its result is
17640 20 72 65 71 75 69 72 65 64 2e 20 5e 41 6e 20 75   required. ^An u
17650 6e 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71  ncorrelated subq
17660 75 65 72 79 20 69 73 20 65 76 61 6c 75 61 74 65  uery is evaluate
17670 64 20 6f 6e 6c 79 20 6f 6e 63 65 0a 61 6e 64 20  d only once.and 
17680 74 68 65 20 72 65 73 75 6c 74 20 72 65 75 73 65  the result reuse
17690 64 20 61 73 20 6e 65 63 65 73 73 61 72 79 2e 0a  d as necessary..
176a0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
176b0 74 20 63 61 73 74 65 78 70 72 20 7b 43 41 53 54  t castexpr {CAST
176c0 20 65 78 70 72 65 73 73 69 6f 6e 7d 20 7b 43 41   expression} {CA
176d0 53 54 7d 20 7b 63 61 73 74 7d 20 7b 43 41 53 54  ST} {cast} {CAST
176e0 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e   operator}</tcl>
176f0 0a 3c 68 33 3e 43 41 53 54 20 65 78 70 72 65 73  .<h3>CAST expres
17700 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 41  sions</h3>..<p>A
17710 20 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e   CAST expression
17720 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 43 41   of the form "CA
17730 53 54 28 3c 69 3e 65 78 70 72 3c 2f 69 3e 20 41  ST(<i>expr</i> A
17740 53 20 3c 69 3e 74 79 70 65 2d 6e 61 6d 65 3c 2f  S <i>type-name</
17750 69 3e 29 22 0a 69 73 20 75 73 65 64 20 74 6f 20  i>)".is used to 
17760 63 6f 6e 76 65 72 74 20 74 68 65 20 76 61 6c 75  convert the valu
17770 65 20 6f 66 20 3c 69 3e 65 78 70 72 3c 2f 69 3e  e of <i>expr</i>
17780 20 74 6f 20 0a 61 20 64 69 66 66 65 72 65 6e 74   to .a different
17790 20 5b 73 74 6f 72 61 67 65 20 63 6c 61 73 73 5d   [storage class]
177a0 20 73 70 65 63 69 66 69 65 64 20 62 79 20 3c 79   specified by <y
177b0 79 74 65 72 6d 3e 74 79 70 65 2d 6e 61 6d 65 3c  yterm>type-name<
177c0 2f 79 79 74 65 72 6d 3e 2e 0a 5e 41 20 43 41 53  /yyterm>..^A CAS
177d0 54 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20  T conversion is 
177e0 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 65 20 63  similar to the c
177f0 6f 6e 76 65 72 73 69 6f 6e 20 74 68 61 74 20 74  onversion that t
17800 61 6b 65 73 0a 70 6c 61 63 65 20 77 68 65 6e 20  akes.place when 
17810 61 20 5b 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  a [column affini
17820 74 79 5d 20 69 73 20 61 70 70 6c 69 65 64 20 74  ty] is applied t
17830 6f 20 61 20 76 61 6c 75 65 20 65 78 63 65 70 74  o a value except
17840 20 74 68 61 74 20 77 69 74 68 0a 74 68 65 20 43   that with.the C
17850 41 53 54 20 6f 70 65 72 61 74 6f 72 20 74 68 65  AST operator the
17860 20 63 6f 6e 76 65 72 73 69 6f 6e 20 61 6c 77 61   conversion alwa
17870 79 73 20 74 61 6b 65 73 20 70 6c 61 63 65 20 65  ys takes place e
17880 76 65 6e 20 69 66 20 74 68 65 20 63 6f 6e 76 65  ven if the conve
17890 72 73 69 6f 6e 0a 6c 6f 73 73 79 20 61 6e 64 20  rsion.lossy and 
178a0 69 72 72 65 76 65 72 73 69 62 6c 65 2c 20 77 68  irreversible, wh
178b0 65 72 65 61 73 20 63 6f 6c 75 6d 6e 20 61 66 66  ereas column aff
178c0 69 6e 69 74 79 20 6f 6e 6c 79 20 63 68 61 6e 67  inity only chang
178d0 65 73 20 74 68 65 20 64 61 74 61 20 74 79 70 65  es the data type
178e0 0a 6f 66 20 61 20 76 61 6c 75 65 20 69 66 20 74  .of a value if t
178f0 68 65 20 63 68 61 6e 67 65 20 69 73 20 6c 6f 73  he change is los
17900 73 6c 65 73 73 20 61 6e 64 20 72 65 76 65 72 73  sless and revers
17910 69 62 6c 65 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68  ible...<p>^If th
17920 65 20 76 61 6c 75 65 20 6f 66 20 3c 69 3e 65 78  e value of <i>ex
17930 70 72 3c 2f 69 3e 20 69 73 20 4e 55 4c 4c 2c 20  pr</i> is NULL, 
17940 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
17950 6f 66 20 74 68 65 20 43 41 53 54 0a 65 78 70 72  of the CAST.expr
17960 65 73 73 69 6f 6e 20 69 73 20 61 6c 73 6f 20 4e  ession is also N
17970 55 4c 4c 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c  ULL. ^Otherwise,
17980 20 74 68 65 20 73 74 6f 72 61 67 65 20 63 6c 61   the storage cla
17990 73 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ss of the result
179a0 0a 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62  .is determined b
179b0 79 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20 5b  y applying the [
179c0 72 75 6c 65 73 20 66 6f 72 20 64 65 74 65 72 6d  rules for determ
179d0 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 20 61 66 66  ining column aff
179e0 69 6e 69 74 79 5d 20 74 6f 0a 74 68 65 20 3c 79  inity] to.the <y
179f0 79 74 65 72 6d 3e 74 79 70 65 2d 6e 61 6d 65 3c  yterm>type-name<
17a00 2f 79 79 74 65 72 6d 3e 2e 0a 0a 3c 74 61 62 6c  /yyterm>...<tabl
17a10 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e  e border=1>.<tr>
17a20 0a 20 20 3c 74 68 3e 20 41 66 66 69 6e 69 74 79  .  <th> Affinity
17a30 20 6f 66 20 3c 79 79 74 65 72 6d 3e 74 79 70 65   of <yyterm>type
17a40 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 20  -name</yyterm>. 
17a50 20 3c 74 68 3e 20 43 6f 6e 76 65 72 73 69 6f 6e   <th> Conversion
17a60 20 50 72 6f 63 65 73 73 69 6e 67 0a 3c 74 72 3e   Processing.<tr>
17a70 0a 20 20 3c 74 64 3e 20 4e 4f 4e 45 20 0a 20 20  .  <td> NONE .  
17a80 3c 74 64 3e 20 5e 43 61 73 74 69 6e 67 20 61 20  <td> ^Casting a 
17a90 76 61 6c 75 65 20 74 6f 20 61 20 3c 79 79 74 65  value to a <yyte
17aa0 72 6d 3e 74 79 70 65 2d 6e 61 6d 65 3c 2f 79 79  rm>type-name</yy
17ab0 74 65 72 6d 3e 20 77 69 74 68 20 6e 6f 20 61 66  term> with no af
17ac0 66 69 6e 69 74 79 20 0a 20 20 63 61 75 73 65 73  finity .  causes
17ad0 20 74 68 65 20 76 61 6c 75 65 20 74 6f 0a 20 20   the value to.  
17ae0 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
17af0 6f 20 61 20 42 4c 4f 42 2e 20 20 5e 43 61 73 74  o a BLOB.  ^Cast
17b00 69 6e 67 20 74 6f 20 61 20 42 4c 4f 42 20 63 6f  ing to a BLOB co
17b10 6e 73 69 73 74 73 20 6f 66 20 66 69 72 73 74 20  nsists of first 
17b20 63 61 73 74 69 6e 67 0a 20 20 74 68 65 20 76 61  casting.  the va
17b30 6c 75 65 20 74 6f 20 54 45 58 54 20 69 6e 20 74  lue to TEXT in t
17b40 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 6f 66  he [encoding] of
17b50 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
17b60 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65 6e 0a 20  nnection, then. 
17b70 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20 74 68   interpreting th
17b80 65 20 72 65 73 75 6c 74 69 6e 67 20 62 79 74 65  e resulting byte
17b90 20 73 65 71 75 65 6e 63 65 20 61 73 20 61 20 42   sequence as a B
17ba0 4c 4f 42 20 69 6e 73 74 65 61 64 20 6f 66 20 61  LOB instead of a
17bb0 73 20 54 45 58 54 2e 0a 0a 3c 74 72 3e 0a 20 20  s TEXT...<tr>.  
17bc0 3c 74 64 3e 20 54 45 58 54 0a 20 20 3c 74 64 3e  <td> TEXT.  <td>
17bd0 20 5e 54 6f 20 63 61 73 74 20 61 20 42 4c 4f 42   ^To cast a BLOB
17be0 20 76 61 6c 75 65 20 74 6f 20 54 45 58 54 2c 20   value to TEXT, 
17bf0 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f 66 20  the sequence of 
17c00 62 79 74 65 73 20 74 68 61 74 20 6d 61 6b 65 20  bytes that make 
17c10 75 70 20 74 68 65 0a 20 20 42 4c 4f 42 20 69 73  up the.  BLOB is
17c20 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
17c30 74 65 78 74 20 65 6e 63 6f 64 65 64 20 75 73 69  text encoded usi
17c40 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ng the database 
17c50 65 6e 63 6f 64 69 6e 67 2e 0a 20 20 3c 70 3e 0a  encoding..  <p>.
17c60 20 20 20 5e 43 61 73 74 69 6e 67 20 61 6e 20 49     ^Casting an I
17c70 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c 20 76  NTEGER or REAL v
17c80 61 6c 75 65 20 69 6e 74 6f 20 54 45 58 54 20 72  alue into TEXT r
17c90 65 6e 64 65 72 73 20 74 68 65 20 76 61 6c 75 65  enders the value
17ca0 20 61 73 20 69 66 20 76 69 61 20 0a 20 20 20 20   as if via .    
17cb0 5b 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74  [sqlite3_snprint
17cc0 66 28 29 5d 20 65 78 63 65 70 74 20 74 68 61 74  f()] except that
17cd0 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 54   the resulting T
17ce0 45 58 54 20 75 73 65 73 20 74 68 65 20 5b 65 6e  EXT uses the [en
17cf0 63 6f 64 69 6e 67 5d 20 6f 66 0a 20 20 20 20 74  coding] of.    t
17d00 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
17d10 65 63 74 69 6f 6e 2e 0a 0a 3c 74 72 3e 0a 20 20  ection...<tr>.  
17d20 3c 74 64 3e 20 52 45 41 4c 0a 20 20 3c 74 64 3e  <td> REAL.  <td>
17d30 20 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61   ^When casting a
17d40 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f 20 61   BLOB value to a
17d50 20 52 45 41 4c 2c 20 74 68 65 20 76 61 6c 75 65   REAL, the value
17d60 20 69 73 20 66 69 72 73 74 20 63 6f 6e 76 65 72   is first conver
17d70 74 65 64 20 74 6f 0a 20 20 20 20 20 20 20 20 54  ted to.        T
17d80 45 58 54 2e 0a 20 20 20 20 20 20 20 3c 70 3e 5e  EXT..       <p>^
17d90 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20 54  When casting a T
17da0 45 58 54 20 76 61 6c 75 65 20 74 6f 20 52 45 41  EXT value to REA
17db0 4c 2c 20 74 68 65 20 6c 6f 6e 67 65 73 74 20 70  L, the longest p
17dc0 6f 73 73 69 62 6c 65 20 70 72 65 66 69 78 20 6f  ossible prefix o
17dd0 66 0a 20 20 20 20 20 20 20 20 74 68 65 20 76 61  f.        the va
17de0 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65 20  lue that can be 
17df0 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
17e00 20 72 65 61 6c 20 6e 75 6d 62 65 72 20 69 73 20   real number is 
17e10 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 0a 20  extracted from. 
17e20 20 20 20 20 20 20 20 74 68 65 20 54 45 58 54 20         the TEXT 
17e30 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 72 65  value and the re
17e40 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72 65 64 2e  mainder ignored.
17e50 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67 20 73 70   ^Any leading sp
17e60 61 63 65 73 20 69 6e 20 74 68 65 0a 20 20 20 20  aces in the.    
17e70 20 20 20 20 54 45 58 54 20 76 61 6c 75 65 20 61      TEXT value a
17e80 72 65 20 69 67 6e 6f 72 65 64 20 77 68 65 6e 20  re ignored when 
17e90 63 6f 6e 76 65 72 67 69 6e 67 20 66 72 6f 6d 20  converging from 
17ea0 54 45 58 54 20 74 6f 20 52 45 41 4c 2e 20 5e 28  TEXT to REAL. ^(
17eb0 49 66 20 74 68 65 72 65 20 69 73 0a 20 20 20 20  If there is.    
17ec0 20 20 20 20 6e 6f 20 70 72 65 66 69 78 20 74 68      no prefix th
17ed0 61 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70  at can be interp
17ee0 72 65 74 65 64 20 61 73 20 61 20 72 65 61 6c 20  reted as a real 
17ef0 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65 73 75  number, the resu
17f00 6c 74 20 6f 66 20 74 68 65 0a 20 20 20 20 20 20  lt of the.      
17f10 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20    conversion is 
17f20 30 2e 30 2e 29 5e 0a 0a 3c 74 72 3e 0a 20 20 3c  0.0.)^..<tr>.  <
17f30 74 64 3e 20 49 4e 54 45 47 45 52 0a 20 20 3c 74  td> INTEGER.  <t
17f40 64 3e 20 5e 57 68 65 6e 20 63 61 73 74 69 6e 67  d> ^When casting
17f50 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f   a BLOB value to
17f60 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20 76 61   INTEGER, the va
17f70 6c 75 65 20 69 73 20 66 69 72 73 74 20 63 6f 6e  lue is first con
17f80 76 65 72 74 65 64 20 74 6f 0a 20 20 20 20 20 20  verted to.      
17f90 20 20 54 45 58 54 2e 0a 20 20 20 20 20 20 20 3c    TEXT..       <
17fa0 70 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20  p>^When casting 
17fb0 61 20 54 45 58 54 20 76 61 6c 75 65 20 74 6f 20  a TEXT value to 
17fc0 49 4e 54 45 47 45 52 2c 20 74 68 65 20 6c 6f 6e  INTEGER, the lon
17fd0 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 70 72  gest possible pr
17fe0 65 66 69 78 20 6f 66 0a 20 20 20 20 20 20 20 20  efix of.        
17ff0 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 63  the value that c
18000 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74 65  an be interprete
18010 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20  d as an integer 
18020 6e 75 6d 62 65 72 20 69 73 20 65 78 74 72 61 63  number is extrac
18030 74 65 64 20 66 72 6f 6d 0a 20 20 20 20 20 20 20  ted from.       
18040 20 74 68 65 20 54 45 58 54 20 76 61 6c 75 65 20   the TEXT value 
18050 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e 64 65  and the remainde
18060 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41 6e 79 20  r ignored. ^Any 
18070 6c 65 61 64 69 6e 67 20 73 70 61 63 65 73 20 69  leading spaces i
18080 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20 54 45  n the.        TE
18090 58 54 20 76 61 6c 75 65 20 77 68 65 6e 20 63 6f  XT value when co
180a0 6e 76 65 72 74 69 6e 67 20 66 72 6f 6d 20 54 45  nverting from TE
180b0 58 54 20 74 6f 20 49 4e 54 45 47 45 52 20 61 72  XT to INTEGER ar
180c0 65 20 69 67 6e 6f 72 65 64 2e 20 5e 49 66 20 74  e ignored. ^If t
180d0 68 65 72 65 0a 20 20 20 20 20 20 20 20 69 73 20  here.        is 
180e0 6e 6f 20 70 72 65 66 69 78 20 74 68 61 74 20 63  no prefix that c
180f0 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74 65  an be interprete
18100 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20  d as an integer 
18110 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65 73 75  number, the resu
18120 6c 74 0a 20 20 20 20 20 20 20 20 6f 66 20 74 68  lt.        of th
18130 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20  e conversion is 
18140 30 2e 20 20 5e 28 54 68 65 20 43 41 53 54 20 6f  0.  ^(The CAST o
18150 70 65 72 61 74 6f 72 20 75 6e 64 65 72 73 74 61  perator understa
18160 6e 64 73 20 64 65 63 69 6d 61 6c 0a 20 20 20 20  nds decimal.    
18170 20 20 20 20 69 6e 74 65 67 65 72 73 20 6f 6e 6c      integers onl
18180 79 20 26 6d 64 61 73 68 3b 20 63 6f 6e 76 65 72  y &mdash; conver
18190 73 69 6f 6e 20 6f 66 20 5b 68 65 78 61 64 65 63  sion of [hexadec
181a0 69 6d 61 6c 20 69 6e 74 65 67 65 72 73 5d 20 73  imal integers] s
181b0 74 6f 70 73 20 0a 20 20 20 20 20 20 20 20 61 74  tops .        at
181c0 20 74 68 65 20 22 78 22 20 69 6e 20 74 68 65 20   the "x" in the 
181d0 22 30 78 22 20 70 72 65 66 69 78 20 6f 66 20 74  "0x" prefix of t
181e0 68 65 20 68 65 78 61 64 65 63 69 6d 61 6c 20 69  he hexadecimal i
181f0 6e 74 65 67 65 72 20 73 74 72 69 6e 67 20 0a 20  nteger string . 
18200 20 20 20 20 20 20 20 61 6e 64 20 74 68 75 73 20         and thus 
18210 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41  result of the CA
18220 53 54 20 69 73 20 61 6c 77 61 79 73 20 7a 65 72  ST is always zer
18230 6f 2e 29 5e 0a 0a 20 20 20 20 20 20 3c 70 3e 5e  o.)^..      <p>^
18240 41 20 63 61 73 74 20 6f 66 20 61 20 52 45 41 4c  A cast of a REAL
18250 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 6e 20 49   value into an I
18260 4e 54 45 47 45 52 20 72 65 73 75 6c 74 73 20 69  NTEGER results i
18270 6e 20 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20  n the integer.  
18280 20 20 20 20 62 65 74 77 65 65 6e 20 74 68 65 20      between the 
18290 52 45 41 4c 20 76 61 6c 75 65 20 61 6e 64 20 7a  REAL value and z
182a0 65 72 6f 20 74 68 61 74 20 69 73 20 63 6c 6f 73  ero that is clos
182b0 65 73 74 20 74 6f 20 74 68 65 20 52 45 41 4c 20  est to the REAL 
182c0 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 5e 49 66  value..      ^If
182d0 20 61 20 52 45 41 4c 20 69 73 20 67 72 65 61 74   a REAL is great
182e0 65 72 20 74 68 61 6e 20 74 68 65 20 67 72 65 61  er than the grea
182f0 74 65 73 74 20 70 6f 73 73 69 62 6c 65 20 73 69  test possible si
18300 67 6e 65 64 0a 20 20 20 20 20 20 69 6e 74 65 67  gned.      integ
18310 65 72 20 28 2b 39 32 32 33 33 37 32 30 33 36 38  er (+92233720368
18320 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20 74  54775807) then t
18330 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65  he result is the
18340 20 67 72 65 61 74 65 73 74 20 70 6f 73 73 69 62   greatest possib
18350 6c 65 0a 20 20 20 20 20 20 73 69 67 6e 65 64 20  le.      signed 
18360 69 6e 74 65 67 65 72 20 61 6e 64 20 69 66 20 74  integer and if t
18370 68 65 20 52 45 41 4c 20 69 73 20 6c 65 73 73 20  he REAL is less 
18380 74 68 61 6e 20 74 68 65 20 6c 65 61 73 74 20 70  than the least p
18390 6f 73 73 69 62 6c 65 20 73 69 67 6e 65 64 0a 20  ossible signed. 
183a0 20 20 20 20 20 69 6e 74 65 67 65 72 20 28 2d 39       integer (-9
183b0 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
183c0 30 38 29 20 74 68 65 6e 20 74 68 65 20 72 65 73  08) then the res
183d0 75 6c 74 20 69 73 20 74 68 65 20 6c 65 61 73 74  ult is the least
183e0 20 70 6f 73 73 69 62 6c 65 0a 20 20 20 20 20 20   possible.      
183f0 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2e 0a  signed integer..
18400 0a 20 20 20 20 20 20 3c 70 3e 50 72 69 6f 72 20  .      <p>Prior 
18410 74 6f 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  to SQLite versio
18420 6e 20 33 2e 38 2e 32 2c 20 63 61 73 74 69 6e 67  n 3.8.2, casting
18430 20 61 20 52 45 41 4c 20 76 61 6c 75 65 20 67 72   a REAL value gr
18440 65 61 74 65 72 20 74 68 61 6e 0a 20 20 20 20 20  eater than.     
18450 20 2b 39 32 32 33 33 37 32 30 33 36 38 35 34 37   +92233720368547
18460 37 35 38 30 37 2e 30 20 69 6e 74 6f 20 61 6e 20  75807.0 into an 
18470 69 6e 74 65 67 65 72 20 72 65 73 75 6c 74 65 64  integer resulted
18480 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 6e 65 67   in the most neg
18490 61 74 69 76 65 0a 20 20 20 20 20 20 69 6e 74 65  ative.      inte
184a0 67 65 72 2c 20 2d 39 32 32 33 33 37 32 30 33 36  ger, -9223372036
184b0 38 35 34 37 37 35 38 30 38 2e 20 20 54 68 69 73  854775808.  This
184c0 20 62 65 68 61 76 69 6f 72 20 77 61 73 20 6d 65   behavior was me
184d0 61 6e 74 20 74 6f 20 65 6d 75 6c 61 74 65 20 74  ant to emulate t
184e0 68 65 0a 20 20 20 20 20 20 62 65 68 61 76 69 6f  he.      behavio
184f0 72 20 6f 66 20 78 38 36 2f 78 36 34 20 68 61 72  r of x86/x64 har
18500 64 77 61 72 65 20 77 68 65 6e 20 64 6f 69 6e 67  dware when doing
18510 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20   the equivalent 
18520 63 61 73 74 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74  cast...<tr>.  <t
18530 64 3e 20 4e 55 4d 45 52 49 43 0a 20 20 3c 74 64  d> NUMERIC.  <td
18540 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 54 45 58  > ^Casting a TEX
18550 54 20 6f 72 20 42 4c 4f 42 20 76 61 6c 75 65 20  T or BLOB value 
18560 69 6e 74 6f 20 4e 55 4d 45 52 49 43 20 66 69 72  into NUMERIC fir
18570 73 74 20 64 6f 65 73 20 61 20 66 6f 72 63 65 64  st does a forced
18580 0a 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  .   conversion i
18590 6e 74 6f 20 52 45 41 4c 20 62 75 74 20 74 68 65  nto REAL but the
185a0 6e 20 66 75 72 74 68 65 72 20 63 6f 6e 76 65 72  n further conver
185b0 74 73 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  ts the result in
185c0 74 6f 20 49 4e 54 45 47 45 52 20 69 66 0a 20 20  to INTEGER if.  
185d0 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65   and only if the
185e0 20 63 6f 6e 76 65 72 73 69 6f 6e 20 66 72 6f 6d   conversion from
185f0 20 52 45 41 4c 20 74 6f 20 49 4e 54 45 47 45 52   REAL to INTEGER
18600 20 69 73 20 6c 6f 73 73 6c 65 73 73 20 61 6e 64   is lossless and
18610 20 72 65 76 65 72 73 69 62 6c 65 2e 0a 20 20 20   reversible..   
18620 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79  This is the only
18630 20 63 6f 6e 74 65 78 74 20 69 6e 20 53 51 4c 69   context in SQLi
18640 74 65 20 77 68 65 72 65 20 74 68 65 20 4e 55 4d  te where the NUM
18650 45 52 49 43 20 61 6e 64 20 49 4e 54 45 47 45 52  ERIC and INTEGER
18660 20 5b 61 66 66 69 6e 69 74 69 65 73 5d 0a 20 20   [affinities].  
18670 20 62 65 68 61 76 65 20 64 69 66 66 65 72 65 6e   behave differen
18680 74 6c 79 2e 0a 20 20 20 3c 70 3e 20 5e 43 61 73  tly..   <p> ^Cas
18690 74 69 6e 67 20 61 20 52 45 41 4c 20 6f 72 20 49  ting a REAL or I
186a0 4e 54 45 47 45 52 20 76 61 6c 75 65 20 74 6f 20  NTEGER value to 
186b0 4e 55 4d 45 52 49 43 20 69 73 20 61 20 6e 6f 2d  NUMERIC is a no-
186c0 6f 70 2c 20 65 76 65 6e 20 69 66 20 61 20 72 65  op, even if a re
186d0 61 6c 0a 20 20 20 76 61 6c 75 65 20 63 6f 75 6c  al.   value coul
186e0 64 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20  d be losslessly 
186f0 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
18700 69 6e 74 65 67 65 72 2e 0a 0a 3c 2f 74 72 3e 0a  integer...</tr>.
18710 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e 5e 4e  .</table>..<p>^N
18720 6f 74 65 20 74 68 61 74 20 74 68 65 20 72 65 73  ote that the res
18730 75 6c 74 20 66 72 6f 6d 20 63 61 73 74 69 6e 67  ult from casting
18740 20 61 6e 79 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61   any non-BLOB va
18750 6c 75 65 20 69 6e 74 6f 20 61 20 0a 42 4c 4f 42  lue into a .BLOB
18760 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20   and the result 
18770 66 72 6f 6d 20 63 61 73 74 69 6e 67 20 61 6e 79  from casting any
18780 20 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f   BLOB value into
18790 20 61 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75   a non-BLOB valu
187a0 65 0a 6d 61 79 20 62 65 20 64 69 66 66 65 72 65  e.may be differe
187b0 6e 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  nt depending on 
187c0 77 68 65 74 68 65 72 20 74 68 65 20 64 61 74 61  whether the data
187d0 62 61 73 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20  base [encoding] 
187e0 69 73 20 55 54 46 2d 38 2c 0a 55 54 46 2d 31 36  is UTF-8,.UTF-16
187f0 62 65 2c 20 6f 72 20 55 54 46 2d 31 36 6c 65 2e  be, or UTF-16le.
18800 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
18810 65 6e 74 20 62 6f 6f 6c 65 61 6e 65 78 70 72 20  ent booleanexpr 
18820 7b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  {boolean express
18830 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 42  ion}</tcl>.<h3>B
18840 6f 6f 6c 65 61 6e 20 45 78 70 72 65 73 73 69 6f  oolean Expressio
18850 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20  ns</h3>..<p>The 
18860 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 66 65 61  SQL language fea
18870 74 75 72 65 73 20 73 65 76 65 72 61 6c 20 63 6f  tures several co
18880 6e 74 65 78 74 73 20 77 68 65 72 65 20 61 6e 20  ntexts where an 
18890 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 0a 65  expression is .e
188a0 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65  valuated and the
188b0 20 72 65 73 75 6c 74 20 63 6f 6e 76 65 72 74 65   result converte
188c0 64 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 28  d to a boolean (
188d0 74 72 75 65 20 6f 72 20 66 61 6c 73 65 29 20 76  true or false) v
188e0 61 6c 75 65 2e 20 54 68 65 73 65 0a 63 6f 6e 74  alue. These.cont
188f0 65 78 74 73 20 61 72 65 3a 0a 0a 20 20 3c 75 6c  exts are:..  <ul
18900 3e 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20 57  >.    <li> the W
18910 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 61  HERE clause of a
18920 20 53 45 4c 45 43 54 2c 20 55 50 44 41 54 45 20   SELECT, UPDATE 
18930 6f 72 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  or DELETE statem
18940 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68  ent,.    <li> th
18950 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c  e ON or USING cl
18960 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 69  ause of a join i
18970 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  n a SELECT state
18980 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74  ment,.    <li> t
18990 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65  he HAVING clause
189a0 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
189b0 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e  tement,.    <li>
189c0 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   the WHEN clause
189d0 20 6f 66 20 61 6e 20 53 51 4c 20 74 72 69 67 67   of an SQL trigg
189e0 65 72 2c 20 61 6e 64 0a 20 20 20 20 3c 6c 69 3e  er, and.    <li>
189f0 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   the WHEN clause
18a00 20 6f 72 20 63 6c 61 75 73 65 73 20 6f 66 20 73   or clauses of s
18a10 6f 6d 65 20 43 41 53 45 20 65 78 70 72 65 73 73  ome CASE express
18a20 69 6f 6e 73 2e 0a 20 20 3c 2f 75 6c 3e 0a 0a 3c  ions..  </ul>..<
18a30 70 3e 5e 28 54 6f 20 63 6f 6e 76 65 72 74 20 74  p>^(To convert t
18a40 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 6e  he results of an
18a50 20 53 51 4c 20 65 78 70 72 65 73 73 69 6f 6e 20   SQL expression 
18a60 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  to a boolean val
18a70 75 65 2c 20 53 51 4c 69 74 65 0a 66 69 72 73 74  ue, SQLite.first
18a80 20 63 61 73 74 73 20 74 68 65 20 72 65 73 75 6c   casts the resul
18a90 74 20 74 6f 20 61 20 4e 55 4d 45 52 49 43 20 76  t to a NUMERIC v
18aa0 61 6c 75 65 20 69 6e 20 74 68 65 20 73 61 6d 65  alue in the same
18ab0 20 77 61 79 20 61 73 20 61 20 0a 5b 43 41 53 54   way as a .[CAST
18ac0 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41 20   expression]. A 
18ad0 6e 75 6d 65 72 69 63 20 7a 65 72 6f 20 76 61 6c  numeric zero val
18ae0 75 65 20 28 69 6e 74 65 67 65 72 20 76 61 6c 75  ue (integer valu
18af0 65 20 30 20 6f 72 20 72 65 61 6c 20 0a 76 61 6c  e 0 or real .val
18b00 75 65 20 30 2e 30 29 20 69 73 20 63 6f 6e 73 69  ue 0.0) is consi
18b10 64 65 72 65 64 20 74 6f 20 62 65 20 66 61 6c 73  dered to be fals
18b20 65 2e 20 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  e.  A NULL value
18b30 20 69 73 20 73 74 69 6c 6c 20 4e 55 4c 4c 2e 0a   is still NULL..
18b40 41 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73  All other values
18b50 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
18b60 74 72 75 65 2e 29 5e 0a 0a 3c 70 3e 5e 28 46 6f  true.)^..<p>^(Fo
18b70 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 76  r example, the v
18b80 61 6c 75 65 73 20 4e 55 4c 4c 2c 20 30 2e 30 2c  alues NULL, 0.0,
18b90 20 30 2c 20 27 65 6e 67 6c 69 73 68 27 20 61 6e   0, 'english' an
18ba0 64 20 27 30 27 20 61 72 65 20 61 6c 6c 20 63 6f  d '0' are all co
18bb0 6e 73 69 64 65 72 65 64 0a 74 6f 20 62 65 20 66  nsidered.to be f
18bc0 61 6c 73 65 2e 29 5e 20 5e 28 56 61 6c 75 65 73  alse.)^ ^(Values
18bd0 20 31 2c 20 31 2e 30 2c 20 30 2e 31 2c 20 2d 30   1, 1.0, 0.1, -0
18be0 2e 31 20 61 6e 64 20 27 31 65 6e 67 6c 69 73 68  .1 and '1english
18bf0 27 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  ' are considered
18c00 20 74 6f 20 0a 62 65 20 74 72 75 65 2e 29 5e 0a   to .be true.)^.
18c10 0a 3c 68 33 3e 46 75 6e 63 74 69 6f 6e 73 3c 2f  .<h3>Functions</
18c20 68 33 3e 0a 3c 70 3e 53 51 4c 69 74 65 20 73 75  h3>.<p>SQLite su
18c30 70 70 6f 72 74 73 20 6d 61 6e 79 20 5b 63 6f 72  pports many [cor
18c40 65 66 75 6e 63 7c 73 69 6d 70 6c 65 5d 20 61 6e  efunc|simple] an
18c50 64 20 5b 61 67 67 66 75 6e 63 7c 61 67 67 72 65  d [aggfunc|aggre
18c60 67 61 74 65 5d 0a 53 51 4c 20 66 75 6e 63 74 69  gate].SQL functi
18c70 6f 6e 73 2e 20 20 46 6f 72 20 70 72 65 73 65 6e  ons.  For presen
18c80 74 61 74 69 6f 6e 20 70 75 72 70 6f 73 65 73 2c  tation purposes,
18c90 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e   simple function
18ca0 73 20 61 72 65 20 66 75 72 74 68 65 72 0a 73 75  s are further.su
18cb0 62 64 69 76 69 64 65 64 20 69 6e 74 6f 20 5b 63  bdivided into [c
18cc0 6f 72 65 66 75 6e 63 20 7c 20 63 6f 72 65 20 66  orefunc | core f
18cd0 75 6e 63 74 69 6f 6e 73 5d 20 61 6e 64 20 5b 64  unctions] and [d
18ce0 61 74 65 66 75 6e 63 7c 64 61 74 65 2d 74 69 6d  atefunc|date-tim
18cf0 65 20 66 75 6e 63 74 69 6f 6e 73 5d 2e 0a 41 70  e functions]..Ap
18d00 70 6c 69 63 61 74 69 6f 6e 73 20 63 61 6e 20 61  plications can a
18d10 64 64 20 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73  dd new functions
18d20 2c 20 77 72 69 74 74 65 6e 20 69 6e 20 43 2f 43  , written in C/C
18d30 2b 2b 2c 20 75 73 69 6e 67 20 74 68 65 0a 5b 73  ++, using the.[s
18d40 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
18d50 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66  nction()] interf
18d60 61 63 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  ace..</p>..<p>^I
18d70 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 6f  t is possible to
18d80 20 68 61 76 65 20 61 6e 20 61 67 67 72 65 67 61   have an aggrega
18d90 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  te function with
18da0 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61   the same name a
18db0 73 20 61 0a 73 69 6d 70 6c 65 20 66 75 6e 63 74  s a.simple funct
18dc0 69 6f 6e 2c 20 61 73 20 6c 6f 6e 67 20 61 73 20  ion, as long as 
18dd0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  the number of ar
18de0 67 75 6d 65 6e 74 73 20 66 6f 72 20 74 68 65 20  guments for the 
18df0 74 77 6f 20 66 6f 72 6d 73 20 6f 66 20 74 68 65  two forms of the
18e00 0a 66 75 6e 63 74 69 6f 6e 20 61 72 65 20 64 69  .function are di
18e10 66 66 65 72 65 6e 74 2e 20 20 5e 46 6f 72 20 65  fferent.  ^For e
18e20 78 61 6d 70 6c 65 2c 20 74 68 65 20 5b 61 67 67  xample, the [agg
18e30 5f 6d 61 78 7c 6d 61 78 28 29 5d 20 66 75 6e 63  _max|max()] func
18e40 74 69 6f 6e 20 77 69 74 68 20 61 0a 73 69 6e 67  tion with a.sing
18e50 6c 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  le argument is a
18e60 6e 20 61 67 67 72 65 67 61 74 65 20 61 6e 64 20  n aggregate and 
18e70 74 68 65 20 5b 6d 61 78 28 29 5d 20 66 75 6e 63  the [max()] func
18e80 74 69 6f 6e 20 77 69 74 68 20 74 77 6f 20 6f 72  tion with two or
18e90 20 6d 6f 72 65 0a 61 72 67 75 6d 65 6e 74 73 20   more.arguments 
18ea0 69 73 20 61 20 73 69 6d 70 6c 65 20 66 75 6e 63  is a simple func
18eb0 74 69 6f 6e 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  tion...<tcl>.###
18ec0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18ed0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18ee0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18ef0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18f00 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
18f10 69 6f 6e 20 7b 43 6f 72 65 20 46 75 6e 63 74 69  ion {Core Functi
18f20 6f 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 7b 2a  ons} corefunc {*
18f30 63 6f 72 65 66 75 6e 63 7d 0a 75 6e 73 65 74 20  corefunc}.unset 
18f40 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63 6f 72 65  -nocomplain core
18f50 66 75 6e 63 73 65 74 0a 70 72 6f 63 20 66 75 6e  funcset.proc fun
18f60 63 64 65 66 20 7b 73 79 6e 74 61 78 20 6b 65 79  cdef {syntax key
18f70 77 6f 72 64 73 20 64 65 73 63 7d 20 7b 0a 20 20  words desc} {.  
18f80 67 6c 6f 62 61 6c 20 63 6f 72 65 66 75 6e 63 73  global corefuncs
18f90 65 74 0a 20 20 72 65 67 65 78 70 20 7b 5e 5b 61  et.  regexp {^[a
18fa0 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61 78 20 62  -z_]+} $syntax b
18fb0 61 73 65 73 79 6e 74 61 78 0a 20 20 73 65 74 20  asesyntax.  set 
18fc0 63 6f 72 65 66 75 6e 63 73 65 74 28 24 62 61 73  corefuncset($bas
18fd0 65 73 79 6e 74 61 78 29 20 5b 6c 69 73 74 20 24  esyntax) [list $
18fe0 73 79 6e 74 61 78 20 24 6b 65 79 77 6f 72 64 73  syntax $keywords
18ff0 20 24 64 65 73 63 5d 0a 7d 0a 66 75 6e 63 64 65   $desc].}.funcde
19000 66 20 7b 61 62 73 28 58 29 7d 20 7b 7d 20 7b 0a  f {abs(X)} {} {.
19010 20 20 5e 54 68 65 20 61 62 73 28 58 29 20 66 75    ^The abs(X) fu
19020 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
19030 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75  he absolute valu
19040 65 20 6f 66 20 74 68 65 20 6e 75 6d 65 72 69 63  e of the numeric
19050 0a 20 20 61 72 67 75 6d 65 6e 74 20 58 2e 20 20  .  argument X.  
19060 5e 41 62 73 28 58 29 20 72 65 74 75 72 6e 73 20  ^Abs(X) returns 
19070 4e 55 4c 4c 20 69 66 20 58 20 69 73 20 4e 55 4c  NULL if X is NUL
19080 4c 2e 20 0a 20 20 5e 28 41 62 73 28 58 29 20 72  L. .  ^(Abs(X) r
19090 65 74 75 72 6e 73 20 30 2e 30 20 69 66 20 58 20  eturns 0.0 if X 
190a0 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62  is a string or b
190b0 6c 6f 62 0a 20 20 74 68 61 74 20 63 61 6e 6e 6f  lob.  that canno
190c0 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 74  t be converted t
190d0 6f 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75  o a numeric valu
190e0 65 2e 29 5e 20 20 5e 49 66 20 58 20 69 73 20 74  e.)^  ^If X is t
190f0 68 65 20 0a 20 20 69 6e 74 65 67 65 72 20 2d 39  he .  integer -9
19100 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
19110 30 38 20 74 68 65 6e 20 61 62 73 28 58 29 20 74  08 then abs(X) t
19120 68 72 6f 77 73 20 61 6e 20 69 6e 74 65 67 65 72  hrows an integer
19130 20 6f 76 65 72 66 6c 6f 77 0a 20 20 65 72 72 6f   overflow.  erro
19140 72 20 73 69 6e 63 65 20 74 68 65 72 65 20 69 73  r since there is
19150 20 6e 6f 20 65 71 75 69 76 61 6c 65 6e 74 20 70   no equivalent p
19160 6f 73 69 74 69 76 65 20 36 34 2d 62 69 74 20 74  ositive 64-bit t
19170 77 6f 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 76 61  wo complement va
19180 6c 75 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  lue..}..funcdef 
19190 7b 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20 7b  {changes()} {} {
191a0 0a 20 20 5e 54 68 65 20 63 68 61 6e 67 65 73 28  .  ^The changes(
191b0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
191c0 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
191d0 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74   database rows t
191e0 68 61 74 20 77 65 72 65 20 63 68 61 6e 67 65 64  hat were changed
191f0 0a 20 20 6f 72 20 69 6e 73 65 72 74 65 64 20 6f  .  or inserted o
19200 72 20 64 65 6c 65 74 65 64 20 62 79 20 74 68 65  r deleted by the
19210 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 20 63   most recently c
19220 6f 6d 70 6c 65 74 65 64 20 49 4e 53 45 52 54 2c  ompleted INSERT,
19230 20 44 45 4c 45 54 45 2c 0a 20 20 6f 72 20 55 50   DELETE,.  or UP
19240 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2c 20  DATE statement, 
19250 65 78 63 6c 75 73 69 76 65 20 6f 66 20 73 74 61  exclusive of sta
19260 74 65 6d 65 6e 74 73 20 69 6e 20 6c 6f 77 65 72  tements in lower
19270 2d 6c 65 76 65 6c 20 74 72 69 67 67 65 72 73 2e  -level triggers.
19280 0a 20 20 5e 54 68 65 20 63 68 61 6e 67 65 73 28  .  ^The changes(
19290 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69  ) SQL function i
192a0 73 20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75  s a wrapper arou
192b0 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  nd the [sqlite3_
192c0 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43  changes()].  C/C
192d0 2b 2b 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20  ++ function and 
192e0 68 65 6e 63 65 20 66 6f 6c 6c 6f 77 73 20 74 68  hence follows th
192f0 65 20 73 61 6d 65 20 72 75 6c 65 73 20 66 6f 72  e same rules for
19300 20 63 6f 75 6e 74 69 6e 67 20 63 68 61 6e 67 65   counting change
19310 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63  s..}..funcdef {c
19320 68 61 72 28 58 31 2c 58 32 2c 2e 2e 2e 2c 58 4e  har(X1,X2,...,XN
19330 29 7d 20 7b 7d 20 7b 0a 20 20 5e 28 54 68 65 20  )} {} {.  ^(The 
19340 63 68 61 72 28 58 31 2c 58 32 2c 2e 2e 2e 2c 58  char(X1,X2,...,X
19350 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  N) function retu
19360 72 6e 73 20 61 20 73 74 72 69 6e 67 20 63 6f 6d  rns a string com
19370 70 6f 73 65 64 20 6f 66 20 63 68 61 72 61 63 74  posed of charact
19380 65 72 73 20 68 61 76 69 6e 67 20 74 68 65 0a 20  ers having the. 
19390 20 20 75 6e 69 63 6f 64 65 20 63 6f 64 65 20 70    unicode code p
193a0 6f 69 6e 74 20 76 61 6c 75 65 73 20 6f 66 20 69  oint values of i
193b0 6e 74 65 67 65 72 73 20 58 31 20 74 68 72 6f 75  ntegers X1 throu
193c0 67 68 20 58 4e 2c 20 72 65 73 70 65 63 74 69 76  gh XN, respectiv
193d0 65 6c 79 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65  ely.)^.}..funcde
193e0 66 20 7b 63 6f 61 6c 65 73 63 65 28 58 2c 59 2c  f {coalesce(X,Y,
193f0 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  ...)} {} {.  ^Th
19400 65 20 63 6f 61 6c 65 73 63 65 28 29 20 66 75 6e  e coalesce() fun
19410 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
19420 63 6f 70 79 20 6f 66 20 69 74 73 20 66 69 72 73  copy of its firs
19430 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d  t non-NULL argum
19440 65 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c 20 69  ent, or.  NULL i
19450 66 20 61 6c 6c 20 61 72 67 75 6d 65 6e 74 73 20  f all arguments 
19460 61 72 65 20 4e 55 4c 4c 2e 20 20 5e 43 6f 61 6c  are NULL.  ^Coal
19470 65 73 63 65 28 29 20 6d 75 73 74 20 68 61 76 65  esce() must have
19480 20 61 74 20 6c 65 61 73 74 20 0a 20 20 32 20 61   at least .  2 a
19490 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e  rguments..}..fun
194a0 63 64 65 66 20 7b 67 6c 6f 62 28 58 2c 59 29 7d  cdef {glob(X,Y)}
194b0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 67 6c 6f   {} {.  ^The glo
194c0 62 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  b(X,Y) function 
194d0 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f  is equivalent to
194e0 20 74 68 65 0a 20 20 65 78 70 72 65 73 73 69 6f   the.  expressio
194f0 6e 20 22 3c 62 3e 59 20 47 4c 4f 42 20 58 3c 2f  n "<b>Y GLOB X</
19500 62 3e 22 2e 0a 20 20 4e 6f 74 65 20 74 68 61 74  b>"..  Note that
19510 20 74 68 65 20 58 20 61 6e 64 20 59 20 61 72 67   the X and Y arg
19520 75 6d 65 6e 74 73 20 61 72 65 20 72 65 76 65 72  uments are rever
19530 73 65 64 20 69 6e 20 74 68 65 20 67 6c 6f 62 28  sed in the glob(
19540 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 6c  ) function.  rel
19550 61 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e 66  ative to the inf
19560 69 78 20 5b 47 4c 4f 42 5d 20 6f 70 65 72 61 74  ix [GLOB] operat
19570 6f 72 2e 0a 20 20 5e 49 66 20 74 68 65 20 5b 73  or..  ^If the [s
19580 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
19590 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66  nction()] interf
195a0 61 63 65 20 69 73 20 75 73 65 64 20 74 6f 0a 20  ace is used to. 
195b0 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 67 6c   override the gl
195c0 6f 62 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  ob(X,Y) function
195d0 20 77 69 74 68 20 61 6e 20 61 6c 74 65 72 6e 61   with an alterna
195e0 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tive implementat
195f0 69 6f 6e 20 74 68 65 6e 0a 20 20 74 68 65 20 5b  ion then.  the [
19600 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72 20 77  GLOB] operator w
19610 69 6c 6c 20 69 6e 76 6f 6b 65 20 74 68 65 20 61  ill invoke the a
19620 6c 74 65 72 6e 61 74 69 76 65 20 69 6d 70 6c 65  lternative imple
19630 6d 65 6e 74 61 74 69 6f 6e 2e 0a 7d 0a 0a 66 75  mentation..}..fu
19640 6e 63 64 65 66 20 7b 69 66 6e 75 6c 6c 28 58 2c  ncdef {ifnull(X,
19650 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
19660 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69 6f  ifnull() functio
19670 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79  n returns a copy
19680 20 6f 66 20 69 74 73 20 66 69 72 73 74 20 6e 6f   of its first no
19690 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2c  n-NULL argument,
196a0 20 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20 62 6f   or.  NULL if bo
196b0 74 68 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  th arguments are
196c0 20 4e 55 4c 4c 2e 20 20 5e 49 66 6e 75 6c 6c 28   NULL.  ^Ifnull(
196d0 29 20 6d 75 73 74 20 68 61 76 65 20 65 78 61 63  ) must have exac
196e0 74 6c 79 20 32 20 61 72 67 75 6d 65 6e 74 73 2e  tly 2 arguments.
196f0 0a 20 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28 29  .  ^The ifnull()
19700 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71 75   function is equ
19710 69 76 61 6c 65 6e 74 20 74 6f 20 5b 63 6f 61 6c  ivalent to [coal
19720 65 73 63 65 28 29 5d 20 77 69 74 68 20 74 77 6f  esce()] with two
19730 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66   arguments..}..f
19740 75 6e 63 64 65 66 20 7b 69 6e 73 74 72 28 58 2c  uncdef {instr(X,
19750 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
19760 69 6e 73 74 72 28 58 2c 59 29 20 66 75 6e 63 74  instr(X,Y) funct
19770 69 6f 6e 20 66 69 6e 64 73 20 74 68 65 20 66 69  ion finds the fi
19780 72 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20 6f  rst occurrence o
19790 66 20 73 74 72 69 6e 67 20 59 20 77 69 74 68 69  f string Y withi
197a0 6e 20 0a 20 20 73 74 72 69 6e 67 20 58 20 61 6e  n .  string X an
197b0 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  d returns the nu
197c0 6d 62 65 72 20 6f 66 20 70 72 69 6f 72 20 63 68  mber of prior ch
197d0 61 72 61 63 74 65 72 73 20 70 6c 75 73 20 31 2c  aracters plus 1,
197e0 20 6f 72 20 30 20 69 66 0a 20 20 59 20 69 73 20   or 0 if.  Y is 
197f0 6e 6f 77 68 65 72 65 20 66 6f 75 6e 64 20 77 69  nowhere found wi
19800 74 68 69 6e 20 58 2e 0a 20 20 5e 4f 72 2c 20 69  thin X..  ^Or, i
19810 66 20 58 20 61 6e 64 20 59 20 61 72 65 20 62 6f  f X and Y are bo
19820 74 68 20 42 4c 4f 42 73 2c 20 74 68 65 6e 20 69  th BLOBs, then i
19830 6e 73 74 72 28 58 2c 59 29 20 72 65 74 75 72 6e  nstr(X,Y) return
19840 73 20 6f 6e 65 0a 20 20 6d 6f 72 65 20 74 68 61  s one.  more tha
19850 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 62 79 74  n the number byt
19860 65 73 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20  es prior to the 
19870 66 69 72 73 74 20 6f 63 63 75 72 72 65 6e 63 65  first occurrence
19880 20 6f 66 20 59 2c 20 6f 72 20 30 20 69 66 0a 20   of Y, or 0 if. 
19890 20 59 20 64 6f 65 73 20 6e 6f 74 20 6f 63 63 75   Y does not occu
198a0 72 20 61 6e 79 77 68 65 72 65 20 77 69 74 68 69  r anywhere withi
198b0 6e 20 58 2e 0a 20 20 5e 49 66 20 62 6f 74 68 20  n X..  ^If both 
198c0 61 72 67 75 6d 65 6e 74 73 20 58 20 61 6e 64 20  arguments X and 
198d0 59 20 74 6f 20 69 6e 73 74 72 28 58 2c 59 29 20  Y to instr(X,Y) 
198e0 61 72 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 6e 64  are non-NULL and
198f0 20 61 72 65 20 6e 6f 74 20 42 4c 4f 42 73 0a 20   are not BLOBs. 
19900 20 74 68 65 6e 20 62 6f 74 68 20 61 72 65 20 69   then both are i
19910 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 73 74  nterpreted as st
19920 72 69 6e 67 73 2e 0a 20 20 5e 49 66 20 65 69 74  rings..  ^If eit
19930 68 65 72 20 58 20 6f 72 20 59 20 61 72 65 20 4e  her X or Y are N
19940 55 4c 4c 20 69 6e 20 69 6e 73 74 72 28 58 2c 59  ULL in instr(X,Y
19950 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
19960 74 20 69 73 20 4e 55 4c 4c 2e 0a 7d 0a 0a 66 75  t is NULL..}..fu
19970 6e 63 64 65 66 20 7b 68 65 78 28 58 29 7d 20 7b  ncdef {hex(X)} {
19980 7d 20 7b 0a 20 20 5e 54 68 65 20 68 65 78 28 29  } {.  ^The hex()
19990 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 65 72 70   function interp
199a0 72 65 74 73 20 69 74 73 20 61 72 67 75 6d 65 6e  rets its argumen
199b0 74 20 61 73 20 61 20 42 4c 4f 42 20 61 6e 64 20  t as a BLOB and 
199c0 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74 72 69  returns.  a stri
199d0 6e 67 20 77 68 69 63 68 20 69 73 20 74 68 65 20  ng which is the 
199e0 75 70 70 65 72 2d 63 61 73 65 20 68 65 78 61 64  upper-case hexad
199f0 65 63 69 6d 61 6c 20 72 65 6e 64 65 72 69 6e 67  ecimal rendering
19a00 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   of the content 
19a10 6f 66 0a 20 20 74 68 61 74 20 62 6c 6f 62 2e 0a  of.  that blob..
19a20 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 61 73 74  }..funcdef {last
19a30 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 7d  _insert_rowid()}
19a40 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 61 73   {} {.  ^The las
19a50 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
19a60 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
19a70 73 20 74 68 65 20 5b 52 4f 57 49 44 5d 0a 20 20  s the [ROWID].  
19a80 6f 66 20 74 68 65 20 6c 61 73 74 20 72 6f 77 20  of the last row 
19a90 69 6e 73 65 72 74 20 66 72 6f 6d 20 74 68 65 20  insert from the 
19aa0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
19ab0 69 6f 6e 20 77 68 69 63 68 20 69 6e 76 6f 6b 65  ion which invoke
19ac0 64 20 74 68 65 0a 20 20 66 75 6e 63 74 69 6f 6e  d the.  function
19ad0 2e 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f 69 6e  ..  ^The last_in
19ae0 73 65 72 74 5f 72 6f 77 69 64 28 29 20 53 51 4c  sert_rowid() SQL
19af0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77   function is a w
19b00 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68  rapper around th
19b10 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c 61 73  e.  [sqlite3_las
19b20 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
19b30 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63  ] C/C++ interfac
19b40 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a 66  e function..}..f
19b50 75 6e 63 64 65 66 20 7b 6c 65 6e 67 74 68 28 58  uncdef {length(X
19b60 29 7d 20 7b 7d 20 7b 0a 20 20 5e 46 6f 72 20 61  )} {} {.  ^For a
19b70 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 58 2c   string value X,
19b80 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29 20 66   the length(X) f
19b90 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
19ba0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 0a 20  the number of . 
19bb0 20 63 68 61 72 61 63 74 65 72 73 20 28 6e 6f 74   characters (not
19bc0 20 62 79 74 65 73 29 20 69 6e 20 58 20 70 72 69   bytes) in X pri
19bd0 6f 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  or to the first 
19be0 4e 55 4c 20 63 68 61 72 61 63 74 65 72 2e 0a 20  NUL character.. 
19bf0 20 53 69 6e 63 65 20 53 51 4c 69 74 65 20 73 74   Since SQLite st
19c00 72 69 6e 67 73 20 64 6f 20 6e 6f 74 20 6e 6f 72  rings do not nor
19c10 6d 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20 4e 55  mally contain NU
19c20 4c 20 63 68 61 72 61 63 74 65 72 73 2c 20 74 68  L characters, th
19c30 65 20 6c 65 6e 67 74 68 28 58 29 0a 20 20 66 75  e length(X).  fu
19c40 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 75 73 75 61  nction will usua
19c50 6c 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20 74  lly return the t
19c60 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 63  otal number of c
19c70 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 65  haracters in the
19c80 20 73 74 72 69 6e 67 20 58 2e 0a 20 20 5e 46 6f   string X..  ^Fo
19c90 72 20 61 20 62 6c 6f 62 20 76 61 6c 75 65 20 58  r a blob value X
19ca0 2c 20 6c 65 6e 67 74 68 28 58 29 20 72 65 74 75  , length(X) retu
19cb0 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
19cc0 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 62  f bytes in the b
19cd0 6c 6f 62 2e 0a 20 20 5e 49 66 20 58 20 69 73 20  lob..  ^If X is 
19ce0 4e 55 4c 4c 20 74 68 65 6e 20 6c 65 6e 67 74 68  NULL then length
19cf0 28 58 29 20 69 73 20 4e 55 4c 4c 2e 0a 20 20 5e  (X) is NULL..  ^
19d00 49 66 20 58 20 69 73 20 6e 75 6d 65 72 69 63 20  If X is numeric 
19d10 74 68 65 6e 20 6c 65 6e 67 74 68 28 58 29 20 72  then length(X) r
19d20 65 74 75 72 6e 73 20 74 68 65 20 6c 65 6e 67 74  eturns the lengt
19d30 68 20 6f 66 20 61 20 73 74 72 69 6e 67 0a 20 20  h of a string.  
19d40 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
19d50 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  f X..}..funcdef 
19d60 7b 6c 69 6b 65 28 58 2c 59 29 20 6c 69 6b 65 28  {like(X,Y) like(
19d70 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e  X,Y,Z)} {} {.  ^
19d80 54 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63 74  The like() funct
19d90 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 69  ion is used to i
19da0 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 22  mplement the.  "
19db0 3c 62 3e 59 20 4c 49 4b 45 20 58 20 26 23 39 31  <b>Y LIKE X &#91
19dc0 3b 45 53 43 41 50 45 20 5a 26 23 39 33 3b 3c 2f  ;ESCAPE Z&#93;</
19dd0 62 3e 22 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  b>" expression. 
19de0 0a 20 20 5e 49 66 20 74 68 65 20 6f 70 74 69 6f  .  ^If the optio
19df0 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61 75 73  nal ESCAPE claus
19e00 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68  e is present, th
19e10 65 6e 20 74 68 65 0a 20 20 6c 69 6b 65 28 29 20  en the.  like() 
19e20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 76 6f  function is invo
19e30 6b 65 64 20 77 69 74 68 20 74 68 72 65 65 20 61  ked with three a
19e40 72 67 75 6d 65 6e 74 73 2e 20 20 5e 4f 74 68 65  rguments.  ^Othe
19e50 72 77 69 73 65 2c 20 69 74 20 69 73 0a 20 20 69  rwise, it is.  i
19e60 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 77 6f 20  nvoked with two 
19e70 61 72 67 75 6d 65 6e 74 73 20 6f 6e 6c 79 2e 20  arguments only. 
19e80 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 58 20  Note that the X 
19e90 61 6e 64 20 59 20 70 61 72 61 6d 65 74 65 72 73  and Y parameters
19ea0 20 61 72 65 0a 20 20 72 65 76 65 72 73 65 64 20   are.  reversed 
19eb0 69 6e 20 74 68 65 20 6c 69 6b 65 28 29 20 66 75  in the like() fu
19ec0 6e 63 74 69 6f 6e 20 72 65 6c 61 74 69 76 65 20  nction relative 
19ed0 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b 4c 49  to the infix [LI
19ee0 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20 20  KE] operator..  
19ef0 5e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72  ^The [sqlite3_cr
19f00 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d  eate_function()]
19f10 20 69 6e 74 65 72 66 61 63 65 20 63 61 6e 20 62   interface can b
19f20 65 20 75 73 65 64 20 74 6f 20 6f 76 65 72 72 69  e used to overri
19f30 64 65 20 74 68 65 0a 20 20 6c 69 6b 65 28 29 20  de the.  like() 
19f40 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68 65  function and the
19f50 72 65 62 79 20 63 68 61 6e 67 65 20 74 68 65 20  reby change the 
19f60 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  operation of the
19f70 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74  .  [LIKE] operat
19f80 6f 72 2e 20 20 57 68 65 6e 20 6f 76 65 72 72 69  or.  When overri
19f90 64 69 6e 67 20 74 68 65 20 6c 69 6b 65 28 29 20  ding the like() 
19fa0 66 75 6e 63 74 69 6f 6e 2c 20 69 74 20 6d 61 79  function, it may
19fb0 20 62 65 20 69 6d 70 6f 72 74 61 6e 74 0a 20 20   be important.  
19fc0 74 6f 20 6f 76 65 72 72 69 64 65 20 62 6f 74 68  to override both
19fd0 20 74 68 65 20 74 77 6f 20 61 6e 64 20 74 68 72   the two and thr
19fe0 65 65 20 61 72 67 75 6d 65 6e 74 20 76 65 72 73  ee argument vers
19ff0 69 6f 6e 73 20 6f 66 20 74 68 65 20 6c 69 6b 65  ions of the like
1a000 28 29 20 0a 20 20 66 75 6e 63 74 69 6f 6e 2e 20  () .  function. 
1a010 4f 74 68 65 72 77 69 73 65 2c 20 64 69 66 66 65  Otherwise, diffe
1a020 72 65 6e 74 20 63 6f 64 65 20 6d 61 79 20 62 65  rent code may be
1a030 20 63 61 6c 6c 65 64 20 74 6f 20 69 6d 70 6c 65   called to imple
1a040 6d 65 6e 74 20 74 68 65 0a 20 20 5b 4c 49 4b 45  ment the.  [LIKE
1a050 5d 20 6f 70 65 72 61 74 6f 72 20 64 65 70 65 6e  ] operator depen
1a060 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20  ding on whether 
1a070 6f 72 20 6e 6f 74 20 61 6e 20 45 53 43 41 50 45  or not an ESCAPE
1a080 20 63 6c 61 75 73 65 20 77 61 73 20 0a 20 20 73   clause was .  s
1a090 70 65 63 69 66 69 65 64 2e 0a 7d 0a 0a 0a 66 75  pecified..}...fu
1a0a0 6e 63 64 65 66 20 7b 6c 69 6b 65 6c 69 68 6f 6f  ncdef {likelihoo
1a0b0 64 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  d(X,Y)} {} {.  ^
1a0c0 54 68 65 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58  The likelihood(X
1a0d0 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  ,Y) function ret
1a0e0 75 72 6e 73 20 61 72 67 75 6d 65 6e 74 20 58 20  urns argument X 
1a0f0 75 6e 63 68 61 6e 67 65 64 2e 0a 20 20 5e 28 54  unchanged..  ^(T
1a100 68 65 20 76 61 6c 75 65 20 59 20 69 6e 20 6c 69  he value Y in li
1a110 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20 6d 75  kelihood(X,Y) mu
1a120 73 74 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67  st be a floating
1a130 20 70 6f 69 6e 74 20 63 6f 6e 73 74 61 6e 74 0a   point constant.
1a140 20 20 62 65 74 77 65 65 6e 20 30 2e 30 20 61 6e    between 0.0 an
1a150 64 20 31 2e 30 2c 20 69 6e 63 6c 75 73 69 76 65  d 1.0, inclusive
1a160 2e 29 5e 0a 20 20 5e 54 68 65 20 6c 69 6b 65 6c  .)^.  ^The likel
1a170 69 68 6f 6f 64 28 58 29 20 66 75 6e 63 74 69 6f  ihood(X) functio
1a180 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 20 74 68 61  n is a no-op tha
1a190 74 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  t the code gener
1a1a0 61 74 6f 72 0a 20 20 6f 70 74 69 6d 69 7a 65 73  ator.  optimizes
1a1b0 20 61 77 61 79 20 73 6f 20 74 68 61 74 20 69 74   away so that it
1a1c0 20 63 6f 6e 73 75 6d 65 73 20 6e 6f 20 43 50 55   consumes no CPU
1a1d0 20 63 79 63 6c 65 73 20 64 75 72 69 6e 67 20 72   cycles during r
1a1e0 75 6e 2d 74 69 6d 65 0a 20 20 28 74 68 61 74 20  un-time.  (that 
1a1f0 69 73 2c 20 64 75 72 69 6e 67 20 63 61 6c 6c 73  is, during calls
1a200 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 73 74 65   to [sqlite3_ste
1a210 70 28 29 5d 29 2e 0a 20 20 5e 54 68 65 20 70 75  p()])..  ^The pu
1a220 72 70 6f 73 65 20 6f 66 20 74 68 65 20 6c 69 6b  rpose of the lik
1a230 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20 66 75 6e  elihood(X,Y) fun
1a240 63 74 69 6f 6e 20 69 73 20 74 6f 20 70 72 6f 76  ction is to prov
1a250 69 64 65 20 61 20 68 69 6e 74 0a 20 20 74 6f 20  ide a hint.  to 
1a260 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65  the query planne
1a270 72 20 74 68 61 74 20 74 68 65 20 61 72 67 75 6d  r that the argum
1a280 65 6e 74 20 58 20 69 73 20 61 20 62 6f 6f 6c 65  ent X is a boole
1a290 61 6e 20 74 68 61 74 20 69 73 0a 20 20 74 72 75  an that is.  tru
1a2a0 65 20 77 69 74 68 20 61 20 70 72 6f 62 61 62 69  e with a probabi
1a2b0 6c 69 74 79 20 6f 66 20 61 70 70 72 6f 78 69 6d  lity of approxim
1a2c0 61 74 65 6c 79 20 59 2e 0a 20 20 5e 28 54 68 65  ately Y..  ^(The
1a2d0 20 5b 75 6e 6c 69 6b 65 6c 79 28 58 29 5d 20 66   [unlikely(X)] f
1a2e0 75 6e 63 74 69 6f 6e 20 69 73 20 73 68 6f 72 74  unction is short
1a2f0 2d 68 61 6e 64 20 66 6f 72 20 6c 69 6b 65 6c 69  -hand for likeli
1a300 68 6f 6f 64 28 58 2c 30 2e 30 36 32 35 29 2e 29  hood(X,0.0625).)
1a310 5e 0a 20 20 5e 28 54 68 65 20 5b 6c 69 6b 65 6c  ^.  ^(The [likel
1a320 79 28 58 29 5d 20 66 75 6e 63 74 69 6f 6e 20 69  y(X)] function i
1a330 73 20 73 68 6f 72 74 2d 68 61 6e 64 20 66 6f 72  s short-hand for
1a340 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 30 2e   likelihood(X,0.
1a350 39 33 37 35 29 2e 29 5e 0a 7d 0a 0a 66 75 6e 63  9375).)^.}..func
1a360 64 65 66 20 7b 6c 69 6b 65 6c 79 28 58 29 7d 20  def {likely(X)} 
1a370 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 69 6b 65  {} {.  ^The like
1a380 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  ly(X) function r
1a390 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75 6d  eturns the argum
1a3a0 65 6e 74 20 58 20 75 6e 63 68 61 6e 67 65 64 2e  ent X unchanged.
1a3b0 0a 20 20 5e 54 68 65 20 6c 69 6b 65 6c 79 28 58  .  ^The likely(X
1a3c0 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20  ) function is a 
1a3d0 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68 65 20 63  no-op that the c
1a3e0 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 0a 20 20  ode generator.  
1a3f0 6f 70 74 69 6d 69 7a 65 73 20 61 77 61 79 20 73  optimizes away s
1a400 6f 20 74 68 61 74 20 69 74 20 63 6f 6e 73 75 6d  o that it consum
1a410 65 73 20 6e 6f 20 43 50 55 20 63 79 63 6c 65 73  es no CPU cycles
1a420 20 61 74 0a 20 20 72 75 6e 2d 74 69 6d 65 20 28   at.  run-time (
1a430 74 68 61 74 20 69 73 2c 20 64 75 72 69 6e 67 20  that is, during 
1a440 63 61 6c 6c 73 20 74 6f 20 5b 73 71 6c 69 74 65  calls to [sqlite
1a450 33 5f 73 74 65 70 28 29 5d 29 2e 0a 20 20 5e 54  3_step()])..  ^T
1a460 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68  he purpose of th
1a470 65 20 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63  e likely(X) func
1a480 74 69 6f 6e 20 69 73 20 74 6f 20 70 72 6f 76 69  tion is to provi
1a490 64 65 20 61 20 68 69 6e 74 0a 20 20 74 6f 20 74  de a hint.  to t
1a4a0 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72  he query planner
1a4b0 20 74 68 61 74 20 74 68 65 20 61 72 67 75 6d 65   that the argume
1a4c0 6e 74 20 58 20 69 73 20 61 20 62 6f 6f 6c 65 61  nt X is a boolea
1a4d0 6e 20 76 61 6c 75 65 0a 20 20 74 68 61 74 20 69  n value.  that i
1a4e0 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20  s usually true. 
1a4f0 5e 28 54 68 65 20 6c 69 6b 65 6c 79 28 58 29 20  ^(The likely(X) 
1a500 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71 75 69  function is equi
1a510 76 61 6c 65 6e 74 0a 20 20 74 6f 20 5b 6c 69 6b  valent.  to [lik
1a520 65 6c 69 68 6f 6f 64 5d 28 58 2c 30 2e 39 33 37  elihood](X,0.937
1a530 35 29 2e 29 5e 20 53 65 65 20 61 6c 73 6f 3a 20  5).)^ See also: 
1a540 5b 75 6e 6c 69 6b 65 6c 79 28 58 29 5d 2e 0a 7d  [unlikely(X)]..}
1a550 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 61 64 5f  ..funcdef {load_
1a560 65 78 74 65 6e 73 69 6f 6e 28 58 29 20 6c 6f 61  extension(X) loa
1a570 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 2c 59 29  d_extension(X,Y)
1a580 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 6f  } {} {.  ^The lo
1a590 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 2c 59  ad_extension(X,Y
1a5a0 29 20 66 75 6e 63 74 69 6f 6e 20 6c 6f 61 64 73  ) function loads
1a5b0 20 5b 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69   [SQLite extensi
1a5c0 6f 6e 73 5d 20 6f 75 74 20 6f 66 20 74 68 65 20  ons] out of the 
1a5d0 73 68 61 72 65 64 0a 20 20 6c 69 62 72 61 72 79  shared.  library
1a5e0 20 66 69 6c 65 20 6e 61 6d 65 64 20 58 20 75 73   file named X us
1a5f0 69 6e 67 20 74 68 65 20 65 6e 74 72 79 20 70 6f  ing the entry po
1a600 69 6e 74 20 59 2e 20 20 5e 54 68 65 20 72 65 73  int Y.  ^The res
1a610 75 6c 74 20 6f 66 20 6c 6f 61 64 5f 65 78 74 65  ult of load_exte
1a620 6e 73 69 6f 6e 28 29 0a 20 20 69 73 20 61 6c 77  nsion().  is alw
1a630 61 79 73 20 61 20 4e 55 4c 4c 2e 20 20 5e 49 66  ays a NULL.  ^If
1a640 20 59 20 69 73 20 6f 6d 69 74 74 65 64 20 74 68   Y is omitted th
1a650 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 65  en the default e
1a660 6e 74 72 79 20 70 6f 69 6e 74 20 6e 61 6d 65 20  ntry point name 
1a670 69 73 20 75 73 65 64 2e 0a 20 20 5e 54 68 65 20  is used..  ^The 
1a680 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29  load_extension()
1a690 20 66 75 6e 63 74 69 6f 6e 20 72 61 69 73 65 73   function raises
1a6a0 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 69 66   an exception if
1a6b0 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 20 66   the extension f
1a6c0 61 69 6c 73 20 74 6f 0a 20 20 6c 6f 61 64 20 6f  ails to.  load o
1a6d0 72 20 69 6e 69 74 69 61 6c 69 7a 65 20 63 6f 72  r initialize cor
1a6e0 72 65 63 74 6c 79 2e 0a 0a 20 20 3c 70 3e 5e 54  rectly...  <p>^T
1a6f0 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  he load_extensio
1a700 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c  n() function wil
1a710 6c 20 66 61 69 6c 20 69 66 20 74 68 65 20 65 78  l fail if the ex
1a720 74 65 6e 73 69 6f 6e 20 61 74 74 65 6d 70 74 73  tension attempts
1a730 20 74 6f 20 0a 20 20 6d 6f 64 69 66 79 20 6f 72   to .  modify or
1a740 20 64 65 6c 65 74 65 20 61 6e 20 53 51 4c 20 66   delete an SQL f
1a750 75 6e 63 74 69 6f 6e 20 6f 72 20 63 6f 6c 6c 61  unction or colla
1a760 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20  ting sequence.  
1a770 5e 54 68 65 0a 20 20 65 78 74 65 6e 73 69 6f 6e  ^The.  extension
1a780 20 63 61 6e 20 61 64 64 20 6e 65 77 20 66 75 6e   can add new fun
1a790 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74  ctions or collat
1a7a0 69 6e 67 20 73 65 71 75 65 6e 63 65 73 2c 20 62  ing sequences, b
1a7b0 75 74 20 63 61 6e 6e 6f 74 0a 20 20 6d 6f 64 69  ut cannot.  modi
1a7c0 66 79 20 6f 72 20 64 65 6c 65 74 65 20 65 78 69  fy or delete exi
1a7d0 73 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20  sting functions 
1a7e0 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  or collating seq
1a7f0 75 65 6e 63 65 73 20 62 65 63 61 75 73 65 0a 20  uences because. 
1a800 20 74 68 6f 73 65 20 66 75 6e 63 74 69 6f 6e 73   those functions
1a810 20 61 6e 64 2f 6f 72 20 63 6f 6c 6c 61 74 69 6e   and/or collatin
1a820 67 20 73 65 71 75 65 6e 63 65 73 20 6d 69 67 68  g sequences migh
1a830 74 20 62 65 20 75 73 65 64 20 65 6c 73 65 77 68  t be used elsewh
1a840 65 72 65 0a 20 20 69 6e 20 74 68 65 20 63 75 72  ere.  in the cur
1a850 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 53  rently running S
1a860 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  QL statement.  T
1a870 6f 20 6c 6f 61 64 20 61 6e 20 65 78 74 65 6e 73  o load an extens
1a880 69 6f 6e 20 74 68 61 74 0a 20 20 63 68 61 6e 67  ion that.  chang
1a890 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20 66 75  es or deletes fu
1a8a0 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61  nctions or colla
1a8b0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 2c 20  ting sequences, 
1a8c0 75 73 65 20 74 68 65 0a 20 20 5b 73 71 6c 69 74  use the.  [sqlit
1a8d0 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  e3_load_extensio
1a8e0 6e 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67 65 20  n()] C-language 
1a8f0 41 50 49 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 46  API.</p>..  <p>F
1a900 6f 72 20 73 65 63 75 72 69 74 79 20 72 65 61 73  or security reas
1a910 6f 6e 73 2c 20 65 78 74 65 6e 73 69 6f 6e 20 6c  ons, extension l
1a920 6f 61 64 65 64 20 69 73 20 74 75 72 6e 65 64 20  oaded is turned 
1a930 6f 66 66 20 62 79 20 64 65 66 61 75 6c 74 20 61  off by default a
1a940 6e 64 20 6d 75 73 74 0a 20 20 62 65 20 65 6e 61  nd must.  be ena
1a950 62 6c 65 64 20 62 79 20 61 20 70 72 69 6f 72 20  bled by a prior 
1a960 63 61 6c 6c 20 74 6f 20 5b 73 71 6c 69 74 65 33  call to [sqlite3
1a970 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74  _enable_load_ext
1a980 65 6e 73 69 6f 6e 28 29 5d 2e 3c 2f 70 3e 0a 7d  ension()].</p>.}
1a990 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 77 65 72  ..funcdef {lower
1a9a0 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
1a9b0 20 6c 6f 77 65 72 28 58 29 20 66 75 6e 63 74 69   lower(X) functi
1a9c0 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70  on returns a cop
1a9d0 79 20 6f 66 20 73 74 72 69 6e 67 20 58 20 77 69  y of string X wi
1a9e0 74 68 20 61 6c 6c 20 41 53 43 49 49 20 63 68 61  th all ASCII cha
1a9f0 72 61 63 74 65 72 73 0a 20 20 63 6f 6e 76 65 72  racters.  conver
1aa00 74 65 64 20 74 6f 20 6c 6f 77 65 72 20 63 61 73  ted to lower cas
1aa10 65 2e 20 20 5e 54 68 65 20 64 65 66 61 75 6c 74  e.  ^The default
1aa20 20 62 75 69 6c 74 2d 69 6e 20 6c 6f 77 65 72 28   built-in lower(
1aa30 29 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72 6b 73  ) function works
1aa40 0a 20 20 66 6f 72 20 41 53 43 49 49 20 63 68 61  .  for ASCII cha
1aa50 72 61 63 74 65 72 73 20 6f 6e 6c 79 2e 20 20 54  racters only.  T
1aa60 6f 20 64 6f 20 63 61 73 65 20 63 6f 6e 76 65 72  o do case conver
1aa70 73 69 6f 6e 73 20 6f 6e 20 6e 6f 6e 2d 41 53 43  sions on non-ASC
1aa80 49 49 0a 20 20 63 68 61 72 61 63 74 65 72 73 2c  II.  characters,
1aa90 20 6c 6f 61 64 20 74 68 65 20 49 43 55 20 65 78   load the ICU ex
1aaa0 74 65 6e 73 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63  tension..}..func
1aab0 64 65 66 20 7b 6c 74 72 69 6d 28 58 29 20 6c 74  def {ltrim(X) lt
1aac0 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  rim(X,Y)} {} {. 
1aad0 20 5e 54 68 65 20 6c 74 72 69 6d 28 58 2c 59 29   ^The ltrim(X,Y)
1aae0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1aaf0 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65  s a string forme
1ab00 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e  d by removing an
1ab10 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72  y and all.  char
1ab20 61 63 74 65 72 73 20 74 68 61 74 20 61 70 70 65  acters that appe
1ab30 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74 68 65  ar in Y from the
1ab40 20 6c 65 66 74 20 73 69 64 65 20 6f 66 20 58 2e   left side of X.
1ab50 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67  .  ^If the Y arg
1ab60 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64  ument is omitted
1ab70 2c 20 6c 74 72 69 6d 28 58 29 20 72 65 6d 6f 76  , ltrim(X) remov
1ab80 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20 74  es spaces from t
1ab90 68 65 20 6c 65 66 74 20 73 69 64 65 0a 20 20 6f  he left side.  o
1aba0 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  f X..}..funcdef 
1abb0 7b 6d 61 78 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b  {max(X,Y,...)} {
1abc0 2a 6d 61 78 43 6f 72 65 46 75 6e 63 20 2a 6d 61  *maxCoreFunc *ma
1abd0 78 20 7b 6d 61 78 28 29 20 53 51 4c 20 66 75 6e  x {max() SQL fun
1abe0 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65  ction}} {.  ^The
1abf0 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20   multi-argument 
1ac00 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  max() function r
1ac10 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75 6d  eturns the argum
1ac20 65 6e 74 20 77 69 74 68 20 74 68 65 20 0a 20 20  ent with the .  
1ac30 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 2c 20 6f  maximum value, o
1ac40 72 20 72 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66  r return NULL if
1ac50 20 61 6e 79 20 61 72 67 75 6d 65 6e 74 20 69 73   any argument is
1ac60 20 4e 55 4c 4c 2e 20 0a 20 20 5e 54 68 65 20 6d   NULL. .  ^The m
1ac70 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 61  ulti-argument ma
1ac80 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 73 65 61  x() function sea
1ac90 72 63 68 65 73 20 69 74 73 20 61 72 67 75 6d 65  rches its argume
1aca0 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  nts from left to
1acb0 20 72 69 67 68 74 0a 20 20 66 6f 72 20 61 6e 20   right.  for an 
1acc0 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20 64 65  argument that de
1acd0 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e  fines a collatin
1ace0 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75  g function and u
1acf0 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61 74 69  ses that collati
1ad00 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20 66 6f  ng.  function fo
1ad10 72 20 61 6c 6c 20 73 74 72 69 6e 67 20 63 6f 6d  r all string com
1ad20 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e  parisons.  ^If n
1ad30 6f 6e 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d  one of the argum
1ad40 65 6e 74 73 20 74 6f 20 6d 61 78 28 29 0a 20 20  ents to max().  
1ad50 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61 74 69  define a collati
1ad60 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74 68 65  ng function, the
1ad70 6e 20 74 68 65 20 42 49 4e 41 52 59 20 63 6f 6c  n the BINARY col
1ad80 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
1ad90 69 73 20 75 73 65 64 2e 0a 20 20 5e 28 4e 6f 74  is used..  ^(Not
1ada0 65 20 74 68 61 74 20 3c 62 3e 6d 61 78 28 29 3c  e that <b>max()<
1adb0 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c 65 20  /b> is a simple 
1adc0 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20 20  function when.  
1add0 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72 65  it has 2 or more
1ade0 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20 6f   arguments but o
1adf0 70 65 72 61 74 65 73 20 61 73 20 61 6e 0a 20 20  perates as an.  
1ae00 5b 6d 61 78 41 67 67 46 75 6e 63 20 7c 20 61 67  [maxAggFunc | ag
1ae10 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1ae20 5d 20 69 66 20 67 69 76 65 6e 20 6f 6e 6c 79 20  ] if given only 
1ae30 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e  a single argumen
1ae40 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  t.)^.}..funcdef 
1ae50 7b 6d 69 6e 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b  {min(X,Y,...)} {
1ae60 2a 6d 69 6e 43 6f 72 65 46 75 6e 63 20 2a 6d 69  *minCoreFunc *mi
1ae70 6e 20 7b 6d 69 6e 28 29 20 53 51 4c 20 66 75 6e  n {min() SQL fun
1ae80 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65  ction}} {.  ^The
1ae90 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20   multi-argument 
1aea0 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  min() function r
1aeb0 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75 6d  eturns the argum
1aec0 65 6e 74 20 77 69 74 68 20 74 68 65 0a 20 20 6d  ent with the.  m
1aed0 69 6e 69 6d 75 6d 20 76 61 6c 75 65 2e 0a 20 20  inimum value..  
1aee0 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d  ^The multi-argum
1aef0 65 6e 74 20 6d 69 6e 28 29 20 66 75 6e 63 74 69  ent min() functi
1af00 6f 6e 20 73 65 61 72 63 68 65 73 20 69 74 73 20  on searches its 
1af10 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c  arguments from l
1af20 65 66 74 20 74 6f 20 72 69 67 68 74 0a 20 20 66  eft to right.  f
1af30 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74  or an argument t
1af40 68 61 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f  hat defines a co
1af50 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
1af60 20 61 6e 64 20 75 73 65 73 20 74 68 61 74 20 63   and uses that c
1af70 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75 6e 63 74  ollating.  funct
1af80 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69  ion for all stri
1af90 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20  ng comparisons. 
1afa0 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65   ^If none of the
1afb0 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 6d 69   arguments to mi
1afc0 6e 28 29 0a 20 20 64 65 66 69 6e 65 20 61 20 63  n().  define a c
1afd0 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
1afe0 6e 2c 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41  n, then the BINA
1aff0 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  RY collating fun
1b000 63 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20  ction is used.. 
1b010 20 5e 28 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e   ^(Note that <b>
1b020 6d 69 6e 28 29 3c 2f 62 3e 20 69 73 20 61 20 73  min()</b> is a s
1b030 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77  imple function w
1b040 68 65 6e 0a 20 20 69 74 20 68 61 73 20 32 20 6f  hen.  it has 2 o
1b050 72 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74 73  r more arguments
1b060 20 62 75 74 20 6f 70 65 72 61 74 65 73 20 61 73   but operates as
1b070 20 61 6e 20 0a 20 20 5b 6d 69 6e 41 67 67 46 75   an .  [minAggFu
1b080 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65 20 66  nc | aggregate f
1b090 75 6e 63 74 69 6f 6e 5d 20 69 66 20 67 69 76 65  unction] if give
1b0a0 6e 0a 20 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c  n.  only a singl
1b0b0 65 20 61 72 67 75 6d 65 6e 74 2e 29 5e 0a 7d 0a  e argument.)^.}.
1b0c0 0a 66 75 6e 63 64 65 66 20 7b 6e 75 6c 6c 69 66  .funcdef {nullif
1b0d0 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  (X,Y)} {} {.  ^T
1b0e0 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29 20 66  he nullif(X,Y) f
1b0f0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1b100 69 74 73 20 66 69 72 73 74 20 61 72 67 75 6d 65  its first argume
1b110 6e 74 20 69 66 20 74 68 65 20 61 72 67 75 6d 65  nt if the argume
1b120 6e 74 73 20 61 72 65 0a 20 20 64 69 66 66 65 72  nts are.  differ
1b130 65 6e 74 20 61 6e 64 20 4e 55 4c 4c 20 69 66 20  ent and NULL if 
1b140 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61 72  the arguments ar
1b150 65 20 74 68 65 20 73 61 6d 65 2e 20 20 5e 54 68  e the same.  ^Th
1b160 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29 20 66 75  e nullif(X,Y) fu
1b170 6e 63 74 69 6f 6e 0a 20 20 73 65 61 72 63 68 65  nction.  searche
1b180 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74 73 20  s its arguments 
1b190 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
1b1a0 68 74 20 66 6f 72 20 61 6e 20 61 72 67 75 6d 65  ht for an argume
1b1b0 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  nt that defines 
1b1c0 61 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  a.  collating fu
1b1d0 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73 65 73 20  nction and uses 
1b1e0 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66  that collating f
1b1f0 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20  unction for all 
1b200 73 74 72 69 6e 67 0a 20 20 63 6f 6d 70 61 72 69  string.  compari
1b210 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 65 69 74 68  sons.  ^If neith
1b220 65 72 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 6e  er argument to n
1b230 75 6c 6c 69 66 28 29 20 64 65 66 69 6e 65 73 20  ullif() defines 
1b240 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  a collating func
1b250 74 69 6f 6e 0a 20 20 74 68 65 6e 20 74 68 65 20  tion.  then the 
1b260 42 49 4e 41 52 59 20 69 73 20 75 73 65 64 2e 0a  BINARY is used..
1b270 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 70 72 69 6e  }..funcdef {prin
1b280 74 66 28 46 4f 52 4d 41 54 2c 2e 2e 2e 29 7d 20  tf(FORMAT,...)} 
1b290 7b 7d 20 7b 0a 20 20 5e 28 54 68 65 20 70 72 69  {} {.  ^(The pri
1b2a0 6e 74 66 28 46 4f 52 4d 41 54 2c 2e 2e 2e 29 20  ntf(FORMAT,...) 
1b2b0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72  SQL function wor
1b2c0 6b 73 20 6c 69 6b 65 20 74 68 65 20 5b 73 71 6c  ks like the [sql
1b2d0 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 29 5d 20  ite3_mprintf()] 
1b2e0 43 2d 6c 61 6e 67 75 61 67 65 0a 20 20 66 75 6e  C-language.  fun
1b2f0 63 74 69 6f 6e 20 61 6e 64 20 74 68 65 20 70 72  ction and the pr
1b300 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 20  intf() function 
1b310 66 72 6f 6d 20 74 68 65 20 73 74 61 6e 64 61 72  from the standar
1b320 64 20 43 20 6c 69 62 72 61 72 79 2e 29 5e 0a 20  d C library.)^. 
1b330 20 54 68 65 20 66 69 72 73 74 20 61 72 67 75 6d   The first argum
1b340 65 6e 74 20 69 73 20 61 20 66 6f 72 6d 61 74 20  ent is a format 
1b350 73 74 72 69 6e 67 20 74 68 61 74 20 73 70 65 63  string that spec
1b360 69 66 69 65 73 20 68 6f 77 20 74 6f 20 63 6f 6e  ifies how to con
1b370 73 74 72 75 63 74 20 74 68 65 20 6f 75 74 70 75  struct the outpu
1b380 74 0a 20 20 73 74 72 69 6e 67 20 75 73 69 6e 67  t.  string using
1b390 20 76 61 6c 75 65 73 20 74 61 6b 65 6e 20 66 72   values taken fr
1b3a0 6f 6d 20 73 75 62 73 65 71 75 65 6e 74 20 61 72  om subsequent ar
1b3b0 67 75 6d 65 6e 74 73 2e 20 20 5e 49 66 20 74 68  guments.  ^If th
1b3c0 65 20 46 4f 52 4d 41 54 20 61 72 67 75 6d 65 6e  e FORMAT argumen
1b3d0 74 20 69 73 0a 20 20 6d 69 73 73 69 6e 67 20 6f  t is.  missing o
1b3e0 72 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  r NULL then the 
1b3f0 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20  result is NULL. 
1b400 20 5e 54 68 65 20 25 6e 20 66 6f 72 6d 61 74 20   ^The %n format 
1b410 69 73 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f  is silently igno
1b420 72 65 64 20 61 6e 64 0a 20 20 64 6f 65 73 20 6e  red and.  does n
1b430 6f 74 20 63 6f 6e 73 75 6d 65 20 61 6e 20 61 72  ot consume an ar
1b440 67 75 6d 65 6e 74 2e 20 20 5e 54 68 65 20 25 70  gument.  ^The %p
1b450 20 66 6f 72 6d 61 74 20 69 73 20 61 6e 20 61 6c   format is an al
1b460 69 61 73 20 66 6f 72 20 25 58 2e 20 20 5e 54 68  ias for %X.  ^Th
1b470 65 20 25 7a 20 66 6f 72 6d 61 74 0a 20 20 69 73  e %z format.  is
1b480 20 69 6e 74 65 72 63 68 61 6e 67 65 61 62 6c 65   interchangeable
1b490 20 77 69 74 68 20 25 73 2e 20 20 5e 28 49 66 20   with %s.  ^(If 
1b4a0 74 68 65 72 65 20 61 72 65 20 74 6f 6f 20 66 65  there are too fe
1b4b0 77 20 61 72 67 75 6d 65 6e 74 73 20 69 6e 20 74  w arguments in t
1b4c0 68 65 20 61 72 67 75 6d 65 6e 74 20 6c 69 73 74  he argument list
1b4d0 2c 0a 20 20 6d 69 73 73 69 6e 67 20 61 72 67 75  ,.  missing argu
1b4e0 6d 65 6e 74 73 20 61 72 65 20 61 73 73 75 6d 65  ments are assume
1b4f0 64 20 74 6f 20 68 61 76 65 20 61 20 4e 55 4c 4c  d to have a NULL
1b500 20 76 61 6c 75 65 2c 20 77 68 69 63 68 20 69 73   value, which is
1b510 20 74 72 61 6e 73 6c 61 74 65 64 20 69 6e 74 6f   translated into
1b520 0a 20 20 30 20 6f 72 20 30 2e 30 20 66 6f 72 20  .  0 or 0.0 for 
1b530 6e 75 6d 65 72 69 63 20 66 6f 72 6d 61 74 73 20  numeric formats 
1b540 6f 72 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69  or an empty stri
1b550 6e 67 20 66 6f 72 20 25 73 2e 29 5e 0a 7d 0a 20  ng for %s.)^.}. 
1b560 20 0a 0a 66 75 6e 63 64 65 66 20 7b 71 75 6f 74   ..funcdef {quot
1b570 65 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  e(X)} {} {.  ^Th
1b580 65 20 71 75 6f 74 65 28 58 29 20 66 75 6e 63 74  e quote(X) funct
1b590 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
1b5a0 74 65 78 74 20 6f 66 20 61 6e 20 53 51 4c 20 6c  text of an SQL l
1b5b0 69 74 65 72 61 6c 20 77 68 69 63 68 0a 20 20 69  iteral which.  i
1b5c0 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 69  s the value of i
1b5d0 74 73 20 61 72 67 75 6d 65 6e 74 20 73 75 69 74  ts argument suit
1b5e0 61 62 6c 65 20 66 6f 72 20 69 6e 63 6c 75 73 69  able for inclusi
1b5f0 6f 6e 20 69 6e 74 6f 20 61 6e 20 53 51 4c 20 73  on into an SQL s
1b600 74 61 74 65 6d 65 6e 74 2e 0a 20 20 5e 53 74 72  tatement..  ^Str
1b610 69 6e 67 73 20 61 72 65 20 73 75 72 72 6f 75 6e  ings are surroun
1b620 64 65 64 20 62 79 20 73 69 6e 67 6c 65 2d 71 75  ded by single-qu
1b630 6f 74 65 73 20 77 69 74 68 20 65 73 63 61 70 65  otes with escape
1b640 73 20 6f 6e 20 69 6e 74 65 72 69 6f 72 20 71 75  s on interior qu
1b650 6f 74 65 73 0a 20 20 61 73 20 6e 65 65 64 65 64  otes.  as needed
1b660 2e 20 20 5e 42 4c 4f 42 73 20 61 72 65 20 65 6e  .  ^BLOBs are en
1b670 63 6f 64 65 64 20 61 73 20 68 65 78 61 64 65 63  coded as hexadec
1b680 69 6d 61 6c 20 6c 69 74 65 72 61 6c 73 2e 0a 20  imal literals.. 
1b690 20 5e 53 74 72 69 6e 67 73 20 77 69 74 68 20 65   ^Strings with e
1b6a0 6d 62 65 64 64 65 64 20 4e 55 4c 20 63 68 61 72  mbedded NUL char
1b6b0 61 63 74 65 72 73 20 63 61 6e 6e 6f 74 20 62 65  acters cannot be
1b6c0 20 72 65 70 72 65 73 65 6e 74 65 64 20 61 73 20   represented as 
1b6d0 73 74 72 69 6e 67 0a 20 20 6c 69 74 65 72 61 6c  string.  literal
1b6e0 73 20 69 6e 20 53 51 4c 20 61 6e 64 20 68 65 6e  s in SQL and hen
1b6f0 63 65 20 74 68 65 20 72 65 74 75 72 6e 65 64 20  ce the returned 
1b700 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 69  string literal i
1b710 73 20 74 72 75 6e 63 61 74 65 64 20 70 72 69 6f  s truncated prio
1b720 72 0a 20 20 74 6f 20 74 68 65 20 66 69 72 73 74  r.  to the first
1b730 20 4e 55 4c 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66   NUL..}..funcdef
1b740 20 7b 72 61 6e 64 6f 6d 28 29 7d 20 7b 7d 20 7b   {random()} {} {
1b750 0a 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d 28 29  .  ^The random()
1b760 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1b770 73 20 61 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f  s a pseudo-rando
1b780 6d 20 69 6e 74 65 67 65 72 0a 20 20 62 65 74 77  m integer.  betw
1b790 65 65 6e 20 2d 39 32 32 33 33 37 32 30 33 36 38  een -92233720368
1b7a0 35 34 37 37 35 38 30 38 20 61 6e 64 20 2b 39 32  54775808 and +92
1b7b0 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
1b7c0 37 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72  7..}..funcdef {r
1b7d0 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29 7d 20 7b 7d  andomblob(N)} {}
1b7e0 20 7b 0a 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d   {.  ^The random
1b7f0 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e  blob(N) function
1b800 20 72 65 74 75 72 6e 20 61 6e 20 4e 2d 62 79 74   return an N-byt
1b810 65 20 62 6c 6f 62 20 63 6f 6e 74 61 69 6e 69 6e  e blob containin
1b820 67 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 0a  g pseudo-random.
1b830 20 20 62 79 74 65 73 2e 20 5e 49 66 20 4e 20 69    bytes. ^If N i
1b840 73 20 6c 65 73 73 20 74 68 61 6e 20 31 20 74 68  s less than 1 th
1b850 65 6e 20 61 20 31 2d 62 79 74 65 20 72 61 6e 64  en a 1-byte rand
1b860 6f 6d 20 62 6c 6f 62 20 69 73 20 72 65 74 75 72  om blob is retur
1b870 6e 65 64 2e 0a 0a 20 20 3c 70 3e 48 69 6e 74 3a  ned...  <p>Hint:
1b880 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 63    applications c
1b890 61 6e 20 67 65 6e 65 72 61 74 65 20 67 6c 6f 62  an generate glob
1b8a0 61 6c 6c 79 20 75 6e 69 71 75 65 20 69 64 65 6e  ally unique iden
1b8b0 74 69 66 69 65 72 73 0a 20 20 75 73 69 6e 67 20  tifiers.  using 
1b8c0 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 74 6f  this function to
1b8d0 67 65 74 68 65 72 20 77 69 74 68 20 5b 68 65 78  gether with [hex
1b8e0 28 29 5d 20 61 6e 64 2f 6f 72 0a 20 20 5b 6c 6f  ()] and/or.  [lo
1b8f0 77 65 72 28 29 5d 20 6c 69 6b 65 20 74 68 69 73  wer()] like this
1b900 3a 3c 2f 70 3e 0a 0a 20 20 3c 62 6c 6f 63 6b 71  :</p>..  <blockq
1b910 75 6f 74 65 3e 0a 20 20 68 65 78 28 72 61 6e 64  uote>.  hex(rand
1b920 6f 6d 62 6c 6f 62 28 31 36 29 29 3c 62 72 3e 3c  omblob(16))<br><
1b930 2f 62 72 3e 0a 20 20 6c 6f 77 65 72 28 68 65 78  /br>.  lower(hex
1b940 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29  (randomblob(16))
1b950 29 0a 20 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ).  </blockquote
1b960 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 65  >.}..funcdef {re
1b970 70 6c 61 63 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d  place(X,Y,Z)} {}
1b980 20 7b 0a 20 20 5e 54 68 65 20 72 65 70 6c 61 63   {.  ^The replac
1b990 65 28 58 2c 59 2c 5a 29 20 66 75 6e 63 74 69 6f  e(X,Y,Z) functio
1b9a0 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69  n returns a stri
1b9b0 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 73 75 62  ng formed by sub
1b9c0 73 74 69 74 75 74 69 6e 67 0a 20 20 73 74 72 69  stituting.  stri
1b9d0 6e 67 20 5a 20 66 6f 72 20 65 76 65 72 79 20 6f  ng Z for every o
1b9e0 63 63 75 72 72 65 6e 63 65 20 6f 66 20 73 74 72  ccurrence of str
1b9f0 69 6e 67 20 59 20 69 6e 20 73 74 72 69 6e 67 20  ing Y in string 
1ba00 58 2e 20 20 5e 54 68 65 20 5b 42 49 4e 41 52 59  X.  ^The [BINARY
1ba10 5d 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ].  collating se
1ba20 71 75 65 6e 63 65 20 69 73 20 75 73 65 64 20 66  quence is used f
1ba30 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20  or comparisons. 
1ba40 20 5e 49 66 20 59 20 69 73 20 61 6e 20 65 6d 70   ^If Y is an emp
1ba50 74 79 0a 20 20 73 74 72 69 6e 67 20 74 68 65 6e  ty.  string then
1ba60 20 72 65 74 75 72 6e 20 58 20 75 6e 63 68 61 6e   return X unchan
1ba70 67 65 64 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e  ged.  ^If Z is n
1ba80 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 20 20 61  ot initially.  a
1ba90 20 73 74 72 69 6e 67 2c 20 69 74 20 69 73 20 63   string, it is c
1baa0 61 73 74 20 74 6f 20 61 20 55 54 46 2d 38 20 73  ast to a UTF-8 s
1bab0 74 72 69 6e 67 20 70 72 69 6f 72 20 74 6f 20 70  tring prior to p
1bac0 72 6f 63 65 73 73 69 6e 67 2e 0a 7d 0a 0a 66 75  rocessing..}..fu
1bad0 6e 63 64 65 66 20 7b 72 6f 75 6e 64 28 58 29 20  ncdef {round(X) 
1bae0 72 6f 75 6e 64 28 58 2c 59 29 7d 20 7b 7d 20 7b  round(X,Y)} {} {
1baf0 0a 20 20 5e 54 68 65 20 72 6f 75 6e 64 28 58 2c  .  ^The round(X,
1bb00 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
1bb10 72 6e 73 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70  rns a floating-p
1bb20 6f 69 6e 74 0a 20 20 76 61 6c 75 65 20 58 20 72  oint.  value X r
1bb30 6f 75 6e 64 65 64 20 74 6f 20 59 20 64 69 67 69  ounded to Y digi
1bb40 74 73 20 74 6f 20 74 68 65 20 72 69 67 68 74 20  ts to the right 
1bb50 6f 66 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70  of the decimal p
1bb60 6f 69 6e 74 2e 0a 20 20 5e 49 66 20 74 68 65 20  oint..  ^If the 
1bb70 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d  Y argument is om
1bb80 69 74 74 65 64 2c 20 69 74 20 69 73 20 61 73 73  itted, it is ass
1bb90 75 6d 65 64 20 74 6f 20 62 65 20 30 2e 0a 7d 0a  umed to be 0..}.
1bba0 0a 66 75 6e 63 64 65 66 20 7b 72 74 72 69 6d 28  .funcdef {rtrim(
1bbb0 58 29 20 72 74 72 69 6d 28 58 2c 59 29 7d 20 7b  X) rtrim(X,Y)} {
1bbc0 7d 20 7b 0a 20 20 5e 54 68 65 20 72 74 72 69 6d  } {.  ^The rtrim
1bbd0 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72  (X,Y) function r
1bbe0 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20  eturns a string 
1bbf0 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69  formed by removi
1bc00 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20  ng any and all. 
1bc10 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74   characters that
1bc20 20 61 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f   appear in Y fro
1bc30 6d 20 74 68 65 20 72 69 67 68 74 20 73 69 64 65  m the right side
1bc40 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74 68 65   of X..  ^If the
1bc50 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f   Y argument is o
1bc60 6d 69 74 74 65 64 2c 20 72 74 72 69 6d 28 58 29  mitted, rtrim(X)
1bc70 20 72 65 6d 6f 76 65 73 20 73 70 61 63 65 73 20   removes spaces 
1bc80 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 0a 20  from the right. 
1bc90 20 73 69 64 65 20 6f 66 20 58 2e 0a 7d 0a 0a 66   side of X..}..f
1bca0 75 6e 63 64 65 66 20 7b 73 6f 75 6e 64 65 78 28  uncdef {soundex(
1bcb0 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  X)} {} {.  ^The 
1bcc0 73 6f 75 6e 64 65 78 28 58 29 20 66 75 6e 63 74  soundex(X) funct
1bcd0 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74  ion returns a st
1bce0 72 69 6e 67 20 74 68 61 74 20 69 73 20 74 68 65  ring that is the
1bcf0 20 73 6f 75 6e 64 65 78 20 65 6e 63 6f 64 69 6e   soundex encodin
1bd00 67 20 0a 20 20 6f 66 20 74 68 65 20 73 74 72 69  g .  of the stri
1bd10 6e 67 20 58 2e 0a 20 20 5e 54 68 65 20 73 74 72  ng X..  ^The str
1bd20 69 6e 67 20 22 3f 30 30 30 22 20 69 73 20 72 65  ing "?000" is re
1bd30 74 75 72 6e 65 64 20 69 66 20 74 68 65 20 61 72  turned if the ar
1bd40 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c 20 6f  gument is NULL o
1bd50 72 20 63 6f 6e 74 61 69 6e 73 0a 20 20 6e 6f 20  r contains.  no 
1bd60 41 53 43 49 49 20 61 6c 70 68 61 62 65 74 69 63  ASCII alphabetic
1bd70 20 63 68 61 72 61 63 74 65 72 73 2e 0a 20 20 5e   characters..  ^
1bd80 28 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69  (This function i
1bd90 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 53  s omitted from S
1bda0 51 4c 69 74 65 20 62 79 20 64 65 66 61 75 6c 74  QLite by default
1bdb0 2e 0a 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 61  ..  It is only a
1bdc0 76 61 69 6c 61 62 6c 65 20 69 66 20 74 68 65 20  vailable if the 
1bdd0 5b 53 51 4c 49 54 45 5f 53 4f 55 4e 44 45 58 5d  [SQLITE_SOUNDEX]
1bde0 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
1bdf0 74 69 6f 6e 0a 20 20 69 73 20 75 73 65 64 20 77  tion.  is used w
1be00 68 65 6e 20 53 51 4c 69 74 65 20 69 73 20 62 75  hen SQLite is bu
1be10 69 6c 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65  ilt.)^.}..funcde
1be20 66 20 7b 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c  f {sqlite_compil
1be30 65 6f 70 74 69 6f 6e 5f 67 65 74 28 4e 29 7d 20  eoption_get(N)} 
1be40 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69  {} {.  ^The sqli
1be50 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e  te_compileoption
1be60 5f 67 65 74 28 29 20 53 51 4c 20 66 75 6e 63 74  _get() SQL funct
1be70 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65 72  ion is a wrapper
1be80 20 61 72 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73   around the.  [s
1be90 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70  qlite3_compileop
1bea0 74 69 6f 6e 5f 67 65 74 28 29 5d 20 43 2f 43 2b  tion_get()] C/C+
1beb0 2b 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54  + function..  ^T
1bec0 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75  his routine retu
1bed0 72 6e 73 20 74 68 65 20 4e 2d 74 68 20 63 6f 6d  rns the N-th com
1bee0 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
1bef0 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20 53   used to build S
1bf00 51 4c 69 74 65 0a 20 20 6f 72 20 4e 55 4c 4c 20  QLite.  or NULL 
1bf10 69 66 20 4e 20 69 73 20 6f 75 74 20 6f 66 20 72  if N is out of r
1bf20 61 6e 67 65 2e 20 20 53 65 65 20 61 6c 73 6f 20  ange.  See also 
1bf30 74 68 65 20 5b 63 6f 6d 70 69 6c 65 5f 6f 70 74  the [compile_opt
1bf40 69 6f 6e 73 20 70 72 61 67 6d 61 5d 2e 0a 7d 0a  ions pragma]..}.
1bf50 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65  .funcdef {sqlite
1bf60 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75  _compileoption_u
1bf70 73 65 64 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  sed(X)} {} {.  ^
1bf80 54 68 65 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69  The sqlite_compi
1bf90 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 29 20  leoption_used() 
1bfa0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  SQL function is 
1bfb0 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64  a wrapper around
1bfc0 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f   the.  [sqlite3_
1bfd0 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73  compileoption_us
1bfe0 65 64 28 29 5d 20 43 2f 43 2b 2b 20 66 75 6e 63  ed()] C/C++ func
1bff0 74 69 6f 6e 2e 0a 20 20 5e 57 68 65 6e 20 74 68  tion..  ^When th
1c000 65 20 61 72 67 75 6d 65 6e 74 20 58 20 74 6f 20  e argument X to 
1c010 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70  sqlite_compileop
1c020 74 69 6f 6e 5f 75 73 65 64 28 58 29 20 69 73 20  tion_used(X) is 
1c030 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 0a 20  a string which. 
1c040 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
1c050 61 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  a compile-time o
1c060 70 74 69 6f 6e 2c 20 74 68 69 73 20 72 6f 75 74  ption, this rout
1c070 69 6e 65 20 72 65 74 75 72 6e 73 20 74 72 75 65  ine returns true
1c080 20 28 31 29 20 6f 72 0a 20 20 66 61 6c 73 65 20   (1) or.  false 
1c090 28 30 29 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  (0) depending on
1c0a0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
1c0b0 74 68 61 74 20 6f 70 74 69 6f 6e 20 77 61 73 20  that option was 
1c0c0 75 73 65 64 20 64 75 72 69 6e 67 20 74 68 65 0a  used during the.
1c0d0 20 20 62 75 69 6c 64 2e 0a 7d 0a 0a 66 75 6e 63    build..}..func
1c0e0 64 65 66 20 7b 73 71 6c 69 74 65 5f 73 6f 75 72  def {sqlite_sour
1c0f0 63 65 5f 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20  ce_id()} {} {.  
1c100 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 6f 75 72  ^The sqlite_sour
1c110 63 65 5f 69 64 28 29 20 66 75 6e 63 74 69 6f 6e  ce_id() function
1c120 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
1c130 67 20 74 68 61 74 20 69 64 65 6e 74 69 66 69 65  g that identifie
1c140 73 20 74 68 65 0a 20 20 73 70 65 63 69 66 69 63  s the.  specific
1c150 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20   version of the 
1c160 73 6f 75 72 63 65 20 63 6f 64 65 20 74 68 61 74  source code that
1c170 20 77 61 73 20 75 73 65 64 20 74 6f 20 62 75 69   was used to bui
1c180 6c 64 20 74 68 65 20 53 51 4c 69 74 65 0a 20 20  ld the SQLite.  
1c190 6c 69 62 72 61 72 79 2e 20 20 5e 54 68 65 20 73  library.  ^The s
1c1a0 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62  tring returned b
1c1b0 79 20 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f  y sqlite_source_
1c1c0 69 64 28 29 20 69 73 0a 20 20 74 68 65 20 64 61  id() is.  the da
1c1d0 74 65 20 61 6e 64 20 74 69 6d 65 20 74 68 61 74  te and time that
1c1e0 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65   the source code
1c1f0 20 77 61 73 20 63 68 65 63 6b 65 64 20 69 6e 20   was checked in 
1c200 66 6f 6c 6c 6f 77 65 64 20 62 79 0a 20 20 74 68  followed by.  th
1c210 65 20 53 48 41 31 20 68 61 73 68 20 66 6f 72 20  e SHA1 hash for 
1c220 74 68 61 74 20 63 68 65 63 6b 2d 69 6e 2e 20 20  that check-in.  
1c230 5e 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69  ^This function i
1c240 73 0a 20 20 61 6e 20 53 51 4c 20 77 72 61 70 70  s.  an SQL wrapp
1c250 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73  er around the [s
1c260 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28  qlite3_sourceid(
1c270 29 5d 20 43 20 69 6e 74 65 72 66 61 63 65 2e 0a  )] C interface..
1c280 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69  }..funcdef {sqli
1c290 74 65 5f 76 65 72 73 69 6f 6e 28 29 7d 20 7b 7d  te_version()} {}
1c2a0 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65   {.  ^The sqlite
1c2b0 5f 76 65 72 73 69 6f 6e 28 29 20 66 75 6e 63 74  _version() funct
1c2c0 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
1c2d0 76 65 72 73 69 6f 6e 20 73 74 72 69 6e 67 20 66  version string f
1c2e0 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0a 20 20  or the SQLite.  
1c2f0 6c 69 62 72 61 72 79 20 74 68 61 74 20 69 73 20  library that is 
1c300 72 75 6e 6e 69 6e 67 2e 20 20 5e 54 68 69 73 20  running.  ^This 
1c310 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 6e 20 53  function is an S
1c320 51 4c 0a 20 20 77 72 61 70 70 65 72 20 61 72 6f  QL.  wrapper aro
1c330 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65 33  und the [sqlite3
1c340 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 5d 20 43  _libversion()] C
1c350 2d 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66  -interface..}..f
1c360 75 6e 63 64 65 66 20 7b 73 75 62 73 74 72 28 58  uncdef {substr(X
1c370 2c 59 2c 5a 29 20 73 75 62 73 74 72 28 58 2c 59  ,Y,Z) substr(X,Y
1c380 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73  )} {} {.  ^The s
1c390 75 62 73 74 72 28 58 2c 59 2c 5a 29 20 66 75 6e  ubstr(X,Y,Z) fun
1c3a0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
1c3b0 73 75 62 73 74 72 69 6e 67 20 6f 66 20 69 6e 70  substring of inp
1c3c0 75 74 20 73 74 72 69 6e 67 20 58 20 74 68 61 74  ut string X that
1c3d0 20 62 65 67 69 6e 73 0a 20 20 77 69 74 68 20 74   begins.  with t
1c3e0 68 65 20 59 2d 74 68 20 63 68 61 72 61 63 74 65  he Y-th characte
1c3f0 72 20 61 6e 64 20 77 68 69 63 68 20 69 73 20 5a  r and which is Z
1c400 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
1c410 2e 0a 20 20 5e 49 66 20 5a 20 69 73 20 6f 6d 69  ..  ^If Z is omi
1c420 74 74 65 64 20 74 68 65 6e 20 73 75 62 73 74 72  tted then substr
1c430 28 58 2c 59 29 20 72 65 74 75 72 6e 73 20 61 6c  (X,Y) returns al
1c440 6c 20 63 68 61 72 61 63 74 65 72 73 20 74 68 72  l characters thr
1c450 6f 75 67 68 20 74 68 65 20 65 6e 64 0a 20 20 6f  ough the end.  o
1c460 66 20 74 68 65 20 73 74 72 69 6e 67 20 58 20 62  f the string X b
1c470 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 74 68  eginning with th
1c480 65 20 59 2d 74 68 2e 0a 20 20 5e 54 68 65 20 6c  e Y-th..  ^The l
1c490 65 66 74 2d 6d 6f 73 74 20 63 68 61 72 61 63 74  eft-most charact
1c4a0 65 72 20 6f 66 20 58 20 69 73 20 6e 75 6d 62 65  er of X is numbe
1c4b0 72 20 31 2e 20 20 5e 49 66 20 59 20 69 73 20 6e  r 1.  ^If Y is n
1c4c0 65 67 61 74 69 76 65 0a 20 20 74 68 65 6e 20 74  egative.  then t
1c4d0 68 65 20 66 69 72 73 74 20 63 68 61 72 61 63 74  he first charact
1c4e0 65 72 20 6f 66 20 74 68 65 20 73 75 62 73 74 72  er of the substr
1c4f0 69 6e 67 20 69 73 20 66 6f 75 6e 64 20 62 79 20  ing is found by 
1c500 63 6f 75 6e 74 69 6e 67 20 66 72 6f 6d 20 74 68  counting from th
1c510 65 0a 20 20 72 69 67 68 74 20 72 61 74 68 65 72  e.  right rather
1c520 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74 2e 20   than the left. 
1c530 20 5e 49 66 20 5a 20 69 73 20 6e 65 67 61 74 69   ^If Z is negati
1c540 76 65 20 74 68 65 6e 0a 20 20 74 68 65 20 61 62  ve then.  the ab
1c550 73 28 5a 29 20 63 68 61 72 61 63 74 65 72 73 20  s(Z) characters 
1c560 70 72 65 63 65 64 69 6e 67 20 74 68 65 20 59 2d  preceding the Y-
1c570 74 68 20 63 68 61 72 61 63 74 65 72 20 61 72 65  th character are
1c580 20 72 65 74 75 72 6e 65 64 2e 0a 20 20 5e 49 66   returned..  ^If
1c590 20 58 20 69 73 20 61 20 73 74 72 69 6e 67 20 74   X is a string t
1c5a0 68 65 6e 20 63 68 61 72 61 63 74 65 72 73 20 69  hen characters i
1c5b0 6e 64 69 63 65 73 20 72 65 66 65 72 20 74 6f 20  ndices refer to 
1c5c0 61 63 74 75 61 6c 20 55 54 46 2d 38 20 0a 20 20  actual UTF-8 .  
1c5d0 63 68 61 72 61 63 74 65 72 73 2e 20 20 5e 49 66  characters.  ^If
1c5e0 20 58 20 69 73 20 61 20 42 4c 4f 42 20 74 68 65   X is a BLOB the
1c5f0 6e 20 74 68 65 20 69 6e 64 69 63 65 73 20 72 65  n the indices re
1c600 66 65 72 20 74 6f 20 62 79 74 65 73 2e 0a 7d 0a  fer to bytes..}.
1c610 0a 66 75 6e 63 64 65 66 20 7b 74 6f 74 61 6c 5f  .funcdef {total_
1c620 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20 7b 0a  changes()} {} {.
1c630 20 20 5e 54 68 65 20 74 6f 74 61 6c 5f 63 68 61    ^The total_cha
1c640 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f 6e 20  nges() function 
1c650 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  returns the numb
1c660 65 72 20 6f 66 20 72 6f 77 20 63 68 61 6e 67 65  er of row change
1c670 73 0a 20 20 63 61 75 73 65 64 20 62 79 20 49 4e  s.  caused by IN
1c680 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20  SERT, UPDATE or 
1c690 44 45 4c 45 54 45 0a 20 20 73 74 61 74 65 6d 65  DELETE.  stateme
1c6a0 6e 74 73 20 73 69 6e 63 65 20 74 68 65 20 63 75  nts since the cu
1c6b0 72 72 65 6e 74 20 64 61 74 61 62 61 73 65 20 63  rrent database c
1c6c0 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 6f 70  onnection was op
1c6d0 65 6e 65 64 2e 0a 20 20 5e 54 68 69 73 20 66 75  ened..  ^This fu
1c6e0 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70  nction is a wrap
1c6f0 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b  per around the [
1c700 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
1c710 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43 2b 2b  anges()].  C/C++
1c720 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66   interface..}..f
1c730 75 6e 63 64 65 66 20 7b 74 72 69 6d 28 58 29 20  uncdef {trim(X) 
1c740 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  trim(X,Y)} {} {.
1c750 20 20 5e 54 68 65 20 74 72 69 6d 28 58 2c 59 29    ^The trim(X,Y)
1c760 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1c770 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65  s a string forme
1c780 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e  d by removing an
1c790 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72  y and all.  char
1c7a0 61 63 74 65 72 73 20 74 68 61 74 20 61 70 70 65  acters that appe
1c7b0 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 62 6f 74  ar in Y from bot
1c7c0 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 20 20 5e  h ends of X..  ^
1c7d0 49 66 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e  If the Y argumen
1c7e0 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 74 72  t is omitted, tr
1c7f0 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20 73 70  im(X) removes sp
1c800 61 63 65 73 20 66 72 6f 6d 20 62 6f 74 68 20 65  aces from both e
1c810 6e 64 73 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e  nds of X..}..fun
1c820 63 64 65 66 20 7b 74 79 70 65 6f 66 28 58 29 7d  cdef {typeof(X)}
1c830 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74 79 70   {} {.  ^The typ
1c840 65 6f 66 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  eof(X) function 
1c850 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67  returns a string
1c860 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20   that indicates 
1c870 74 68 65 20 5b 64 61 74 61 74 79 70 65 5d 20 6f  the [datatype] o
1c880 66 0a 20 20 74 68 65 20 65 78 70 72 65 73 73 69  f.  the expressi
1c890 6f 6e 20 58 3a 20 22 6e 75 6c 6c 22 2c 20 22 69  on X: "null", "i
1c8a0 6e 74 65 67 65 72 22 2c 20 22 72 65 61 6c 22 2c  nteger", "real",
1c8b0 20 22 74 65 78 74 22 2c 20 6f 72 20 22 62 6c 6f   "text", or "blo
1c8c0 62 22 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  b"..}..funcdef {
1c8d0 75 6e 6c 69 6b 65 6c 79 28 58 29 7d 20 7b 7d 20  unlikely(X)} {} 
1c8e0 7b 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b 65 6c  {.  ^The unlikel
1c8f0 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  y(X) function re
1c900 74 75 72 6e 73 20 74 68 65 20 61 72 67 75 6d 65  turns the argume
1c910 6e 74 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 0a  nt X unchanged..
1c920 20 20 5e 54 68 65 20 75 6e 6c 69 6b 65 6c 79 28    ^The unlikely(
1c930 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61  X) function is a
1c940 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68 65 20   no-op that the 
1c950 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 0a 20  code generator. 
1c960 20 6f 70 74 69 6d 69 7a 65 73 20 61 77 61 79 20   optimizes away 
1c970 73 6f 20 74 68 61 74 20 69 74 20 63 6f 6e 73 75  so that it consu
1c980 6d 65 73 20 6e 6f 20 43 50 55 20 63 79 63 6c 65  mes no CPU cycle
1c990 73 20 61 74 0a 20 20 72 75 6e 2d 74 69 6d 65 20  s at.  run-time 
1c9a0 28 74 68 61 74 20 69 73 2c 20 64 75 72 69 6e 67  (that is, during
1c9b0 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71 6c 69 74   calls to [sqlit
1c9c0 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a 20 20 5e  e3_step()])..  ^
1c9d0 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74  The purpose of t
1c9e0 68 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 66  he unlikely(X) f
1c9f0 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20 70 72  unction is to pr
1ca00 6f 76 69 64 65 20 61 20 68 69 6e 74 0a 20 20 74  ovide a hint.  t
1ca10 6f 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e  o the query plan
1ca20 6e 65 72 20 74 68 61 74 20 74 68 65 20 61 72 67  ner that the arg
1ca30 75 6d 65 6e 74 20 58 20 69 73 20 61 20 62 6f 6f  ument X is a boo
1ca40 6c 65 61 6e 20 76 61 6c 75 65 0a 20 20 74 68 61  lean value.  tha
1ca50 74 20 69 73 20 75 73 75 61 6c 6c 79 20 6e 6f 74  t is usually not
1ca60 20 74 72 75 65 2e 20 5e 28 54 68 65 20 75 6e 6c   true. ^(The unl
1ca70 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f  ikely(X) functio
1ca80 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 0a  n is equivalent.
1ca90 20 20 74 6f 20 5b 6c 69 6b 65 6c 69 68 6f 6f 64    to [likelihood
1caa0 5d 28 58 2c 20 30 2e 30 36 32 35 29 2e 29 5e 0a  ](X, 0.0625).)^.
1cab0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75 6e 69 63  }..funcdef {unic
1cac0 6f 64 65 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  ode(X)} {} {.  ^
1cad0 54 68 65 20 75 6e 69 63 6f 64 65 28 58 29 20 66  The unicode(X) f
1cae0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1caf0 74 68 65 20 6e 75 6d 65 72 69 63 20 75 6e 69 63  the numeric unic
1cb00 6f 64 65 20 63 6f 64 65 20 70 6f 69 6e 74 20 63  ode code point c
1cb10 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 0a  orresponding to.
1cb20 20 20 74 68 65 20 66 69 72 73 74 20 63 68 61 72    the first char
1cb30 61 63 74 65 72 20 6f 66 20 74 68 65 20 73 74 72  acter of the str
1cb40 69 6e 67 20 58 2e 20 20 49 66 20 74 68 65 20 61  ing X.  If the a
1cb50 72 67 75 6d 65 6e 74 20 74 6f 20 75 6e 69 63 6f  rgument to unico
1cb60 64 65 28 58 29 20 69 73 20 6e 6f 74 20 61 20 73  de(X) is not a s
1cb70 74 72 69 6e 67 0a 20 20 74 68 65 6e 20 74 68 65  tring.  then the
1cb80 20 72 65 73 75 6c 74 20 69 73 20 75 6e 64 65 66   result is undef
1cb90 69 6e 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  ined..}..funcdef
1cba0 20 7b 75 70 70 65 72 28 58 29 7d 20 7b 7d 20 7b   {upper(X)} {} {
1cbb0 0a 20 20 5e 54 68 65 20 75 70 70 65 72 28 58 29  .  ^The upper(X)
1cbc0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1cbd0 73 20 61 20 63 6f 70 79 20 6f 66 20 69 6e 70 75  s a copy of inpu
1cbe0 74 20 73 74 72 69 6e 67 20 58 20 69 6e 20 77 68  t string X in wh
1cbf0 69 63 68 20 61 6c 6c 20 0a 20 20 6c 6f 77 65 72  ich all .  lower
1cc00 2d 63 61 73 65 20 41 53 43 49 49 20 63 68 61 72  -case ASCII char
1cc10 61 63 74 65 72 73 20 61 72 65 20 63 6f 6e 76 65  acters are conve
1cc20 72 74 65 64 20 74 6f 20 74 68 65 69 72 20 75 70  rted to their up
1cc30 70 65 72 2d 63 61 73 65 20 65 71 75 69 76 61 6c  per-case equival
1cc40 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ent..}..funcdef 
1cc50 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29 7d 20 7b 7d  {zeroblob(N)} {}
1cc60 20 7b 0a 20 20 5e 54 68 65 20 7a 65 72 6f 62 6c   {.  ^The zerobl
1cc70 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72  ob(N) function r
1cc80 65 74 75 72 6e 73 20 61 20 42 4c 4f 42 20 63 6f  eturns a BLOB co
1cc90 6e 73 69 73 74 69 6e 67 20 6f 66 20 4e 20 62 79  nsisting of N by
1cca0 74 65 73 20 6f 66 20 30 78 30 30 2e 0a 20 20 53  tes of 0x00..  S
1ccb0 51 4c 69 74 65 20 6d 61 6e 61 67 65 73 20 74 68  QLite manages th
1ccc0 65 73 65 20 7a 65 72 6f 62 6c 6f 62 73 20 76 65  ese zeroblobs ve
1ccd0 72 79 20 65 66 66 69 63 69 65 6e 74 6c 79 2e 20  ry efficiently. 
1cce0 20 5a 65 72 6f 62 6c 6f 62 73 20 63 61 6e 20 62   Zeroblobs can b
1ccf0 65 20 75 73 65 64 20 74 6f 0a 20 20 72 65 73 65  e used to.  rese
1cd00 72 76 65 20 73 70 61 63 65 20 66 6f 72 20 61 20  rve space for a 
1cd10 42 4c 4f 42 20 74 68 61 74 20 69 73 20 6c 61 74  BLOB that is lat
1cd20 65 72 20 77 72 69 74 74 65 6e 20 75 73 69 6e 67  er written using
1cd30 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f   .  [sqlite3_blo
1cd40 62 5f 6f 70 65 6e 28 29 20 7c 20 69 6e 63 72 65  b_open() | incre
1cd50 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 5d  mental BLOB I/O]
1cd60 2e 0a 20 20 5e 54 68 69 73 20 53 51 4c 20 66 75  ..  ^This SQL fu
1cd70 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65 6d  nction is implem
1cd80 65 6e 74 65 64 20 75 73 69 6e 67 20 74 68 65 20  ented using the 
1cd90 5b 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  [sqlite3_result_
1cda0 7a 65 72 6f 62 6c 6f 62 28 29 5d 0a 20 20 72 6f  zeroblob()].  ro
1cdb0 75 74 69 6e 65 20 66 72 6f 6d 20 74 68 65 20 43  utine from the C
1cdc0 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a  /C++ interface..
1cdd0 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  }.</tcl>..<p>The
1cde0 20 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 20   core functions 
1cdf0 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65 20  shown below are 
1ce00 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66  available by def
1ce10 61 75 6c 74 2e 20 0a 5b 64 61 74 65 66 75 6e 63  ault. .[datefunc
1ce20 20 7c 20 44 61 74 65 20 26 61 6d 70 3b 20 54 69   | Date &amp; Ti
1ce30 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 2c 0a 5b  me functions],.[
1ce40 61 67 67 66 75 6e 63 20 7c 20 61 67 67 72 65 67  aggfunc | aggreg
1ce50 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 5d 2c 20  ate functions], 
1ce60 61 6e 64 0a 5b 6a 73 6f 6e 31 20 7c 20 4a 53 4f  and.[json1 | JSO
1ce70 4e 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 72 65  N functions] are
1ce80 20 64 6f 63 75 6d 65 6e 74 65 64 20 73 65 70 61   documented sepa
1ce90 72 61 74 65 6c 79 2e 20 20 41 6e 0a 61 70 70 6c  rately.  An.appl
1cea0 69 63 61 74 69 6f 6e 20 6d 61 79 20 64 65 66 69  ication may defi
1ceb0 6e 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a 66 75  ne additional.fu
1cec0 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e 20  nctions written 
1ced0 69 6e 20 43 20 61 6e 64 20 61 64 64 65 64 20 74  in C and added t
1cee0 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 65  o the database e
1cef0 6e 67 69 6e 65 20 75 73 69 6e 67 0a 74 68 65 20  ngine using.the 
1cf00 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  [sqlite3_create_
1cf10 66 75 6e 63 74 69 6f 6e 28 29 5d 20 41 50 49 2e  function()] API.
1cf20 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 73 65 74 20  </p>..<tcl>.set 
1cf30 6c 78 20 7b 7d 0a 66 6f 72 65 61 63 68 20 62 61  lx {}.foreach ba
1cf40 73 65 73 79 6e 74 61 78 20 5b 61 72 72 61 79 20  sesyntax [array 
1cf50 6e 61 6d 65 73 20 63 6f 72 65 66 75 6e 63 73 65  names corefuncse
1cf60 74 5d 20 7b 0a 20 20 66 6f 72 65 61 63 68 20 7b  t] {.  foreach {
1cf70 73 79 6e 74 61 78 20 6b 65 79 77 6f 72 64 73 20  syntax keywords 
1cf80 64 65 73 63 7d 20 24 63 6f 72 65 66 75 6e 63 73  desc} $corefuncs
1cf90 65 74 28 24 62 61 73 65 73 79 6e 74 61 78 29 20  et($basesyntax) 
1cfa0 62 72 65 61 6b 0a 20 20 72 65 67 65 78 70 20 7b  break.  regexp {
1cfb0 5e 5b 61 2d 7a 5f 5d 2b 7d 20 24 62 61 73 65 73  ^[a-z_]+} $bases
1cfc0 79 6e 74 61 78 20 66 72 61 67 6d 65 6e 74 0a 20  yntax fragment. 
1cfd0 20 66 6f 72 65 61 63 68 20 63 6f 72 65 73 79 6e   foreach coresyn
1cfe0 74 61 78 20 24 73 79 6e 74 61 78 20 7b 0a 20 20  tax $syntax {.  
1cff0 20 20 6c 61 70 70 65 6e 64 20 6c 78 20 5b 6c 69    lappend lx [li
1d000 73 74 20 24 66 72 61 67 6d 65 6e 74 20 24 63 6f  st $fragment $co
1d010 72 65 73 79 6e 74 61 78 20 30 5d 0a 20 20 7d 0a  resyntax 0].  }.
1d020 7d 0a 68 64 5f 6c 69 73 74 5f 6f 66 5f 6c 69 6e  }.hd_list_of_lin
1d030 6b 73 20 7b 7d 20 32 32 35 20 5b 6c 73 6f 72 74  ks {} 225 [lsort
1d040 20 2d 69 6e 64 65 78 20 31 20 24 6c 78 5d 0a 0a   -index 1 $lx]..
1d050 68 64 5f 70 75 74 73 6e 6c 20 22 3c 68 72 20 63  hd_putsnl "<hr c
1d060 6c 61 73 73 3d 27 78 68 72 27 3e 22 0a 68 64 5f  lass='xhr'>".hd_
1d070 70 75 74 73 6e 6c 20 22 3c 64 6c 3e 22 0a 66 6f  putsnl "<dl>".fo
1d080 72 65 61 63 68 20 62 61 73 65 73 79 6e 74 61 78  reach basesyntax
1d090 20 5b 6c 73 6f 72 74 20 5b 61 72 72 61 79 20 6e   [lsort [array n
1d0a0 61 6d 65 73 20 63 6f 72 65 66 75 6e 63 73 65 74  ames corefuncset
1d0b0 5d 5d 20 7b 0a 20 20 66 6f 72 65 61 63 68 20 7b  ]] {.  foreach {
1d0c0 73 79 6e 74 61 78 20 6b 65 79 77 6f 72 64 73 20  syntax keywords 
1d0d0 64 65 73 63 7d 20 24 63 6f 72 65 66 75 6e 63 73  desc} $corefuncs
1d0e0 65 74 28 24 62 61 73 65 73 79 6e 74 61 78 29 20  et($basesyntax) 
1d0f0 62 72 65 61 6b 0a 20 20 72 65 67 73 75 62 20 2d  break.  regsub -
1d100 61 6c 6c 20 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e  all {\s+} [strin
1d110 67 20 74 72 69 6d 20 24 73 79 6e 74 61 78 5d 20  g trim $syntax] 
1d120 7b 3c 62 72 20 2f 3e 7d 20 73 79 6e 74 61 78 0a  {<br />} syntax.
1d130 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c    regsub -all {\
1d140 28 28 5b 5e 2a 29 5d 2b 29 5c 29 7d 20 24 73 79  (([^*)]+)\)} $sy
1d150 6e 74 61 78 20 7b 28 3c 69 3e 5c 31 3c 2f 69 3e  ntax {(<i>\1</i>
1d160 29 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73  )} syntax.  regs
1d170 75 62 20 2d 61 6c 6c 20 7b 2c 7d 20 24 73 79 6e  ub -all {,} $syn
1d180 74 61 78 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20 73  tax {</i>,<i>} s
1d190 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d  yntax.  regsub -
1d1a0 61 6c 6c 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f  all {<i>\.\.\.</
1d1b0 69 3e 7d 20 24 73 79 6e 74 61 78 20 7b 2e 2e 2e  i>} $syntax {...
1d1c0 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 65 78  } syntax.  regex
1d1d0 70 20 7b 5e 5b 61 2d 7a 5d 2b 7d 20 24 62 61 73  p {^[a-z]+} $bas
1d1e0 65 73 79 6e 74 61 78 20 66 72 61 67 6d 65 6e 74  esyntax fragment
1d1f0 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20  .  if {[llength 
1d200 24 6b 65 79 77 6f 72 64 73 5d 3d 3d 30 7d 20 7b  $keywords]==0} {
1d210 0a 20 20 20 20 72 65 67 65 78 70 20 7b 5b 61 2d  .    regexp {[a-
1d220 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61 78 20 6e 61  z_]+} $syntax na
1d230 6d 65 0a 20 20 20 20 68 64 5f 66 72 61 67 6d 65  me.    hd_fragme
1d240 6e 74 20 24 6e 61 6d 65 20 2a 24 6e 61 6d 65 20  nt $name *$name 
1d250 22 24 7b 6e 61 6d 65 7d 28 29 20 53 51 4c 20 66  "${name}() SQL f
1d260 75 6e 63 74 69 6f 6e 22 0a 20 20 7d 20 65 6c 73  unction".  } els
1d270 65 20 7b 0a 20 20 20 20 73 65 74 20 66 72 61 67  e {.    set frag
1d280 6e 61 6d 65 20 5b 6c 69 6e 64 65 78 20 24 6b 65  name [lindex $ke
1d290 79 77 6f 72 64 73 20 30 5d 0a 20 20 20 20 72 65  ywords 0].    re
1d2a0 67 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e 61 2d 7a  gsub -all {[^a-z
1d2b0 5d 7d 20 24 66 72 61 67 6e 61 6d 65 20 7b 7d 20  ]} $fragname {} 
1d2c0 66 72 61 67 6e 61 6d 65 0a 20 20 20 20 68 64 5f  fragname.    hd_
1d2d0 66 72 61 67 6d 65 6e 74 20 24 66 72 61 67 6e 61  fragment $fragna
1d2e0 6d 65 0a 20 20 20 20 65 76 61 6c 20 68 64 5f 6b  me.    eval hd_k
1d2f0 65 79 77 6f 72 64 73 20 5b 73 74 72 69 6e 67 20  eywords [string 
1d300 6d 61 70 20 7b 5c 6e 20 7b 20 7d 7d 20 24 6b 65  map {\n { }} $ke
1d310 79 77 6f 72 64 73 5d 0a 20 20 7d 0a 20 20 68 64  ywords].  }.  hd
1d320 5f 70 75 74 73 20 22 3c 64 74 3e 3c 70 3e 3c 62  _puts "<dt><p><b
1d330 3e 24 73 79 6e 74 61 78 3c 2f 62 3e 3c 2f 64 74  >$syntax</b></dt
1d340 3e 22 0a 20 20 68 64 5f 72 65 73 6f 6c 76 65 20  >".  hd_resolve 
1d350 22 3c 64 64 3e 3c 70 3e 24 64 65 73 63 3c 2f 64  "<dd><p>$desc</d
1d360 64 3e 5c 6e 22 0a 7d 0a 68 64 5f 70 75 74 73 6e  d>\n".}.hd_putsn
1d370 6c 20 22 3c 2f 64 6c 3e 22 0a 0a 23 23 23 23 23  l "</dl>"..#####
1d380 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d3a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d3b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d3c0 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
1d3d0 6e 20 7b 44 61 74 65 20 41 6e 64 20 54 69 6d 65  n {Date And Time
1d3e0 20 46 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65   Functions} date
1d3f0 66 75 6e 63 20 7b 2a 64 61 74 65 66 75 6e 63 20  func {*datefunc 
1d400 7b 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66  {date and time f
1d410 75 6e 63 74 69 6f 6e 73 7d 7d 0a 68 64 5f 6b 65  unctions}}.hd_ke
1d420 79 77 6f 72 64 73 20 7b 64 61 74 65 28 29 20 53  ywords {date() S
1d430 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b 74 69  QL function} {ti
1d440 6d 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  me() SQL functio
1d450 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  n}.hd_keywords {
1d460 64 61 74 65 74 69 6d 65 28 29 20 53 51 4c 20 66  datetime() SQL f
1d470 75 6e 63 74 69 6f 6e 7d 20 7b 6a 75 6c 69 61 6e  unction} {julian
1d480 64 61 79 28 29 20 53 51 4c 20 66 75 6e 63 74 69  day() SQL functi
1d490 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20  on}.hd_keywords 
1d4a0 7b 73 74 72 66 74 69 6d 65 28 29 20 53 51 4c 20  {strftime() SQL 
1d4b0 66 75 6e 63 74 69 6f 6e 7d 0a 3c 2f 74 63 6c 3e  function}.</tcl>
1d4c0 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 73 75 70  ..<p>.SQLite sup
1d4d0 70 6f 72 74 73 20 66 69 76 65 20 64 61 74 65 20  ports five date 
1d4e0 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f  and time functio
1d4f0 6e 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 3c  ns as follows:.<
1d500 2f 70 3e 0a 0a 3c 70 3e 0a 3c 6f 6c 3e 0a 3c 6c  /p>..<p>.<ol>.<l
1d510 69 3e 20 5e 28 3c 62 3e 64 61 74 65 28 3c 2f 62  i> ^(<b>date(</b
1d520 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20  ><i>timestring, 
1d530 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69  modifier, modifi
1d540 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c  er, ...</i><b>)<
1d550 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e  /b>)^ </li>.<li>
1d560 20 5e 28 3c 62 3e 74 69 6d 65 28 3c 2f 62 3e 3c   ^(<b>time(</b><
1d570 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f  i>timestring, mo
1d580 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72  difier, modifier
1d590 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62  , ...</i><b>)</b
1d5a0 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e  >)^ </li>.<li> ^
1d5b0 28 3c 62 3e 64 61 74 65 74 69 6d 65 28 3c 2f 62  (<b>datetime(</b
1d5c0 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20  ><i>timestring, 
1d5d0 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69  modifier, modifi
1d5e0 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c  er, ...</i><b>)<
1d5f0 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e  /b>)^ </li>.<li>
1d600 20 5e 28 3c 62 3e 6a 75 6c 69 61 6e 64 61 79 28   ^(<b>julianday(
1d610 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e  </b><i>timestrin
1d620 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64  g, modifier, mod
1d630 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62  ifier, ...</i><b
1d640 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c  >)</b>)^ </li>.<
1d650 6c 69 3e 20 5e 28 3c 62 3e 73 74 72 66 74 69 6d  li> ^(<b>strftim
1d660 65 28 3c 2f 62 3e 3c 69 3e 66 6f 72 6d 61 74 2c  e(</b><i>format,
1d670 20 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64   timestring, mod
1d680 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c  ifier, modifier,
1d690 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e   ...</i><b>)</b>
1d6a0 29 5e 20 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a  )^ </li>.</ol>..
1d6b0 3c 70 3e 0a 5e 41 6c 6c 20 66 69 76 65 20 64 61  <p>.^All five da
1d6c0 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63  te and time func
1d6d0 74 69 6f 6e 73 20 74 61 6b 65 20 61 20 74 69 6d  tions take a tim
1d6e0 65 20 73 74 72 69 6e 67 20 61 73 20 61 6e 20 61  e string as an a
1d6f0 72 67 75 6d 65 6e 74 2e 20 0a 5e 54 68 65 20 74  rgument. .^The t
1d700 69 6d 65 20 73 74 72 69 6e 67 20 69 73 20 66 6f  ime string is fo
1d710 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f  llowed by zero o
1d720 72 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72 73  r more modifiers
1d730 2e 20 0a 5e 54 68 65 20 73 74 72 66 74 69 6d 65  . .^The strftime
1d740 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6c 73 6f  () function also
1d750 20 74 61 6b 65 73 20 61 20 66 6f 72 6d 61 74 20   takes a format 
1d760 73 74 72 69 6e 67 20 61 73 20 69 74 73 20 66 69  string as its fi
1d770 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 3c 2f  rst argument..</
1d780 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 64 61 74 65  p>..<p>.The date
1d790 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69   and time functi
1d7a0 6f 6e 73 20 75 73 65 20 61 20 73 75 62 73 65 74  ons use a subset
1d7b0 20 6f 66 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77   of.[http://en.w
1d7c0 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b  ikipedia.org/wik
1d7d0 69 2f 49 53 4f 5f 38 36 30 31 20 7c 20 49 53 30  i/ISO_8601 | IS0
1d7e0 2d 38 36 30 31 5d 20 64 61 74 65 20 61 6e 64 20  -8601] date and 
1d7f0 74 69 6d 65 0a 66 6f 72 6d 61 74 73 2e 0a 5e 54  time.formats..^T
1d800 68 65 20 64 61 74 65 28 29 20 66 75 6e 63 74 69  he date() functi
1d810 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 64  on returns the d
1d820 61 74 65 20 69 6e 20 74 68 69 73 20 66 6f 72 6d  ate in this form
1d830 61 74 3a 20 59 59 59 59 2d 4d 4d 2d 44 44 2e 20  at: YYYY-MM-DD. 
1d840 0a 5e 54 68 65 20 74 69 6d 65 28 29 20 66 75 6e  .^The time() fun
1d850 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
1d860 65 20 74 69 6d 65 20 61 73 20 48 48 3a 4d 4d 3a  e time as HH:MM:
1d870 53 53 2e 20 0a 5e 54 68 65 20 64 61 74 65 74 69  SS. .^The dateti
1d880 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  me() function re
1d890 74 75 72 6e 73 20 22 59 59 59 59 2d 4d 4d 2d 44  turns "YYYY-MM-D
1d8a0 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 20 0a 5e 28  D HH:MM:SS". .^(
1d8b0 54 68 65 20 6a 75 6c 69 61 6e 64 61 79 28 29 20  The julianday() 
1d8c0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1d8d0 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e   the .[http://en
1d8e0 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77  .wikipedia.org/w
1d8f0 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 20 7c  iki/Julian_day |
1d900 20 4a 75 6c 69 61 6e 20 64 61 79 5d 20 2d 20 74   Julian day] - t
1d910 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20 64 61 79  he.number of day
1d920 73 20 73 69 6e 63 65 20 6e 6f 6f 6e 20 69 6e 20  s since noon in 
1d930 47 72 65 65 6e 77 69 63 68 20 6f 6e 20 4e 6f 76  Greenwich on Nov
1d940 65 6d 62 65 72 20 32 34 2c 20 34 37 31 34 20 42  ember 24, 4714 B
1d950 2e 43 2e 20 0a 28 5b 68 74 74 70 3a 2f 2f 65 6e  .C. .([http://en
1d960 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77  .wikipedia.org/w
1d970 69 6b 69 2f 50 72 6f 6c 65 70 74 69 63 5f 47 72  iki/Proleptic_Gr
1d980 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e 64 61 72  egorian_calendar
1d990 20 7c 20 50 72 6f 6c 65 70 74 69 63 20 47 72 65   | Proleptic Gre
1d9a0 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72 5d  gorian calendar]
1d9b0 29 2e 29 5e 0a 5e 54 68 65 20 73 74 72 66 74 69  ).)^.^The strfti
1d9c0 6d 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65 74  me() routine ret
1d9d0 75 72 6e 73 20 74 68 65 20 64 61 74 65 20 66 6f  urns the date fo
1d9e0 72 6d 61 74 74 65 64 20 61 63 63 6f 72 64 69 6e  rmatted accordin
1d9f0 67 20 74 6f 20 0a 74 68 65 20 66 6f 72 6d 61 74  g to .the format
1da00 20 73 74 72 69 6e 67 20 73 70 65 63 69 66 69 65   string specifie
1da10 64 20 61 73 20 74 68 65 20 66 69 72 73 74 20 61  d as the first a
1da20 72 67 75 6d 65 6e 74 2e 0a 5e 54 68 65 20 66 6f  rgument..^The fo
1da30 72 6d 61 74 20 73 74 72 69 6e 67 20 73 75 70 70  rmat string supp
1da40 6f 72 74 73 20 74 68 65 20 6d 6f 73 74 20 63 6f  orts the most co
1da50 6d 6d 6f 6e 20 73 75 62 73 74 69 74 75 74 69 6f  mmon substitutio
1da60 6e 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20  ns found in the 
1da70 0a 5b 68 74 74 70 3a 2f 2f 6f 70 65 6e 67 72 6f  .[http://opengro
1da80 75 70 2e 6f 72 67 2f 6f 6e 6c 69 6e 65 70 75 62  up.org/onlinepub
1da90 73 2f 30 30 37 39 30 38 37 39 39 2f 78 73 68 2f  s/007908799/xsh/
1daa0 73 74 72 66 74 69 6d 65 2e 68 74 6d 6c 20 7c 20  strftime.html | 
1dab0 73 74 72 66 74 69 6d 65 28 29 20 66 75 6e 63 74  strftime() funct
1dac0 69 6f 6e 5d 0a 66 72 6f 6d 20 74 68 65 20 73 74  ion].from the st
1dad0 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79  andard C library
1dae0 20 70 6c 75 73 20 74 77 6f 20 6e 65 77 20 73 75   plus two new su
1daf0 62 73 74 69 74 75 74 69 6f 6e 73 2c 20 25 66 20  bstitutions, %f 
1db00 61 6e 64 20 25 4a 2e 0a 5e 28 54 68 65 20 66 6f  and %J..^(The fo
1db10 6c 6c 6f 77 69 6e 67 20 69 73 20 61 20 63 6f 6d  llowing is a com
1db20 70 6c 65 74 65 20 6c 69 73 74 20 6f 66 20 76 61  plete list of va
1db30 6c 69 64 20 73 74 72 66 74 69 6d 65 28 29 20 73  lid strftime() s
1db40 75 62 73 74 69 74 75 74 69 6f 6e 73 3a 0a 3c 2f  ubstitutions:.</
1db50 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
1db60 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22  .<table border="
1db70 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22  0" cellpadding="
1db80 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22  0" cellspacing="
1db90 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 74 64 20  0">.<tr><td><td 
1dba0 77 69 64 74 68 3d 22 31 30 22 3e 3c 74 64 3e 3c  width="10"><td><
1dbb0 2f 74 72 3e 0a 0a 3c 74 72 3e 3c 74 64 3e 20 25  /tr>..<tr><td> %
1dbc0 64 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f  d <td><td> day o
1dbd0 66 20 6d 6f 6e 74 68 3a 20 30 30 0a 3c 74 72 3e  f month: 00.<tr>
1dbe0 3c 74 64 3e 20 25 66 20 3c 74 64 3e 3c 74 64 3e  <td> %f <td><td>
1dbf0 20 66 72 61 63 74 69 6f 6e 61 6c 20 73 65 63 6f   fractional seco
1dc00 6e 64 73 3a 20 53 53 2e 53 53 53 0a 3c 74 72 3e  nds: SS.SSS.<tr>
1dc10 3c 74 64 3e 20 25 48 20 3c 74 64 3e 3c 74 64 3e  <td> %H <td><td>
1dc20 20 68 6f 75 72 3a 20 30 30 2d 32 34 20 0a 3c 74   hour: 00-24 .<t
1dc30 72 3e 3c 74 64 3e 20 25 6a 20 3c 74 64 3e 3c 74  r><td> %j <td><t
1dc40 64 3e 20 64 61 79 20 6f 66 20 79 65 61 72 3a 20  d> day of year: 
1dc50 30 30 31 2d 33 36 36 0a 3c 74 72 3e 3c 74 64 3e  001-366.<tr><td>
1dc60 20 25 4a 20 3c 74 64 3e 3c 74 64 3e 20 4a 75 6c   %J <td><td> Jul
1dc70 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 0a 3c  ian day number.<
1dc80 74 72 3e 3c 74 64 3e 20 25 6d 20 3c 74 64 3e 3c  tr><td> %m <td><
1dc90 74 64 3e 20 6d 6f 6e 74 68 3a 20 30 31 2d 31 32  td> month: 01-12
1dca0 0a 3c 74 72 3e 3c 74 64 3e 20 25 4d 20 3c 74 64  .<tr><td> %M <td
1dcb0 3e 3c 74 64 3e 20 6d 69 6e 75 74 65 3a 20 30 30  ><td> minute: 00
1dcc0 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 73 20  -59.<tr><td> %s 
1dcd0 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73  <td><td> seconds
1dce0 20 73 69 6e 63 65 20 31 39 37 30 2d 30 31 2d 30   since 1970-01-0
1dcf0 31 0a 3c 74 72 3e 3c 74 64 3e 20 25 53 20 3c 74  1.<tr><td> %S <t
1dd00 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73 3a 20  d><td> seconds: 
1dd10 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25  00-59.<tr><td> %
1dd20 77 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f  w <td><td> day o
1dd30 66 20 77 65 65 6b 20 30 2d 36 20 77 69 74 68 20  f week 0-6 with 
1dd40 53 75 6e 64 61 79 3d 3d 30 0a 3c 74 72 3e 3c 74  Sunday==0.<tr><t
1dd50 64 3e 20 25 57 20 3c 74 64 3e 3c 74 64 3e 20 77  d> %W <td><td> w
1dd60 65 65 6b 20 6f 66 20 79 65 61 72 3a 20 30 30 2d  eek of year: 00-
1dd70 35 33 0a 3c 74 72 3e 3c 74 64 3e 20 25 59 20 3c  53.<tr><td> %Y <
1dd80 74 64 3e 3c 74 64 3e 20 79 65 61 72 3a 20 30 30  td><td> year: 00
1dd90 30 30 2d 39 39 39 39 0a 3c 74 72 3e 3c 74 64 3e  00-9999.<tr><td>
1dda0 20 25 25 20 3c 74 64 3e 3c 74 64 3e 20 25 0a 3c   %% <td><td> %.<
1ddb0 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71  /table>.</blockq
1ddc0 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 5e 28 4e  uote>)^..<p>.^(N
1ddd0 6f 74 69 63 65 20 74 68 61 74 20 61 6c 6c 20 6f  otice that all o
1dde0 74 68 65 72 20 64 61 74 65 20 61 6e 64 20 74 69  ther date and ti
1ddf0 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 63 61 6e  me functions can
1de00 20 62 65 20 65 78 70 72 65 73 73 65 64 0a 69 6e   be expressed.in
1de10 20 74 65 72 6d 73 20 6f 66 20 73 74 72 66 74 69   terms of strfti
1de20 6d 65 28 29 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  me():.</p>..<blo
1de30 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20  ckquote>.<table 
1de40 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c 70  border="0" cellp
1de50 61 64 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73  adding="0" cells
1de60 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e  pacing="0">.<tr>
1de70 3c 74 64 3e 3c 62 3e 46 75 6e 63 74 69 6f 6e 3c  <td><b>Function<
1de80 2f 62 3e 3c 74 64 20 77 69 64 74 68 3d 22 33 30  /b><td width="30
1de90 22 3e 3c 74 64 3e 3c 62 3e 45 71 75 69 76 61 6c  "><td><b>Equival
1dea0 65 6e 74 20 73 74 72 66 74 69 6d 65 28 29 3c 2f  ent strftime()</
1deb0 62 3e 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61  b>.<tr><td>   da
1dec0 74 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64  te(...)      <td
1ded0 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28  ><td>  strftime(
1dee0 27 25 59 2d 25 6d 2d 25 64 27 2c 20 2e 2e 2e 29  '%Y-%m-%d', ...)
1def0 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 74 69 6d 65  .<tr><td>   time
1df00 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64 3e 3c  (...)      <td><
1df10 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25  td>  strftime('%
1df20 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c  H:%M:%S', ...).<
1df30 74 72 3e 3c 74 64 3e 20 20 20 64 61 74 65 74 69  tr><td>   dateti
1df40 6d 65 28 2e 2e 2e 29 20 20 3c 74 64 3e 3c 74 64  me(...)  <td><td
1df50 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25 59 2d  >  strftime('%Y-
1df60 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 53 27 2c  %m-%d %H:%M:%S',
1df70 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20   ...).<tr><td>  
1df80 20 6a 75 6c 69 61 6e 64 61 79 28 2e 2e 2e 29 20   julianday(...) 
1df90 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69  <td><td>  strfti
1dfa0 6d 65 28 27 25 4a 27 2c 20 2e 2e 2e 29 0a 3c 2f  me('%J', ...).</
1dfb0 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75  table>.</blockqu
1dfc0 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 54 68 65 20  ote>)^..<p>.The 
1dfd0 6f 6e 6c 79 20 72 65 61 73 6f 6e 73 20 66 6f 72  only reasons for
1dfe0 20 70 72 6f 76 69 64 69 6e 67 20 66 75 6e 63 74   providing funct
1dff0 69 6f 6e 73 20 6f 74 68 65 72 20 74 68 61 6e 20  ions other than 
1e000 73 74 72 66 74 69 6d 65 28 29 20 69 73 0a 66 6f  strftime() is.fo
1e010 72 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 61 6e  r convenience an
1e020 64 20 66 6f 72 20 65 66 66 69 63 69 65 6e 63 79  d for efficiency
1e030 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 69 6d 65  ..</p>..<h3>Time
1e040 20 53 74 72 69 6e 67 73 3c 2f 68 33 3e 0a 0a 3c   Strings</h3>..<
1e050 70 3e 5e 28 41 20 74 69 6d 65 20 73 74 72 69 6e  p>^(A time strin
1e060 67 20 63 61 6e 20 62 65 20 69 6e 20 61 6e 79 20  g can be in any 
1e070 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1e080 20 66 6f 72 6d 61 74 73 3a 3c 2f 70 3e 0a 0a 3c   formats:</p>..<
1e090 6f 6c 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  ol>.<li> <i>YYYY
1e0a0 2d 4d 4d 2d 44 44 3c 2f 69 3e 0a 3c 6c 69 3e 20  -MM-DD</i>.<li> 
1e0b0 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48  <i>YYYY-MM-DD HH
1e0c0 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  :MM</i>.<li> <i>
1e0d0 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d  YYYY-MM-DD HH:MM
1e0e0 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  :SS</i>.<li> <i>
1e0f0 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d  YYYY-MM-DD HH:MM
1e100 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e  :SS.SSS</i>.<li>
1e110 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f   <i>YYYY-MM-DD</
1e120 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a  i><b>T</b><i>HH:
1e130 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59  MM</i>.<li> <i>Y
1e140 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e  YYY-MM-DD</i><b>
1e150 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53  T</b><i>HH:MM:SS
1e160 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59  </i>.<li> <i>YYY
1e170 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c  Y-MM-DD</i><b>T<
1e180 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53  /b><i>HH:MM:SS.S
1e190 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48  SS</i>.<li> <i>H
1e1a0 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  H:MM</i>.<li> <i
1e1b0 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c  >HH:MM:SS</i>.<l
1e1c0 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53  i> <i>HH:MM:SS.S
1e1d0 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 62 3e 6e  SS</i>.<li> <b>n
1e1e0 6f 77 3c 2f 62 3e 0a 3c 6c 69 3e 20 3c 69 3e 44  ow</b>.<li> <i>D
1e1f0 44 44 44 44 44 44 44 44 44 3c 2f 69 3e 0a 3c 2f  DDDDDDDDD</i>.</
1e200 6f 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 49 6e 20 66  ol>)^..<p>.^In f
1e210 6f 72 6d 61 74 73 20 35 20 74 68 72 6f 75 67 68  ormats 5 through
1e220 20 37 2c 20 74 68 65 20 22 54 22 20 69 73 20 61   7, the "T" is a
1e230 20 6c 69 74 65 72 61 6c 20 63 68 61 72 61 63 74   literal charact
1e240 65 72 20 73 65 70 61 72 61 74 69 6e 67 20 0a 74  er separating .t
1e250 68 65 20 64 61 74 65 20 61 6e 64 20 74 68 65 20  he date and the 
1e260 74 69 6d 65 2c 20 61 73 20 72 65 71 75 69 72 65  time, as require
1e270 64 20 62 79 20 0a 5b 68 74 74 70 3a 2f 2f 77 77  d by .[http://ww
1e280 77 2e 77 33 63 2e 6f 72 67 2f 54 52 2f 4e 4f 54  w.w3c.org/TR/NOT
1e290 45 2d 64 61 74 65 74 69 6d 65 20 7c 20 49 53 4f  E-datetime | ISO
1e2a0 2d 38 36 30 31 5d 2e 20 0a 5e 46 6f 72 6d 61 74  -8601]. .^Format
1e2b0 73 20 38 20 74 68 72 6f 75 67 68 20 31 30 20 74  s 8 through 10 t
1e2c0 68 61 74 20 73 70 65 63 69 66 79 20 6f 6e 6c 79  hat specify only
1e2d0 20 61 20 74 69 6d 65 20 61 73 73 75 6d 65 20 61   a time assume a
1e2e0 20 64 61 74 65 20 6f 66 20 0a 32 30 30 30 2d 30   date of .2000-0
1e2f0 31 2d 30 31 2e 20 46 6f 72 6d 61 74 20 31 31 2c  1-01. Format 11,
1e300 20 74 68 65 20 73 74 72 69 6e 67 20 27 6e 6f 77   the string 'now
1e310 27 2c 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20  ', is converted 
1e320 69 6e 74 6f 20 74 68 65 20 0a 63 75 72 72 65 6e  into the .curren
1e330 74 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  t date and time 
1e340 61 73 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  as obtained from
1e350 20 74 68 65 20 78 43 75 72 72 65 6e 74 54 69 6d   the xCurrentTim
1e360 65 20 6d 65 74 68 6f 64 0a 6f 66 20 74 68 65 20  e method.of the 
1e370 5b 73 71 6c 69 74 65 33 5f 76 66 73 5d 20 6f 62  [sqlite3_vfs] ob
1e380 6a 65 63 74 20 69 6e 20 75 73 65 2e 0a 5e 54 68  ject in use..^Th
1e390 65 20 27 6e 6f 77 27 20 61 72 67 75 6d 65 6e 74  e 'now' argument
1e3a0 20 74 6f 20 64 61 74 65 20 61 6e 64 20 74 69 6d   to date and tim
1e3b0 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 6c 77 61  e functions alwa
1e3c0 79 73 20 72 65 74 75 72 6e 73 20 65 78 61 63 74  ys returns exact
1e3d0 6c 79 20 74 68 65 0a 73 61 6d 65 20 76 61 6c 75  ly the.same valu
1e3e0 65 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20 69  e for multiple i
1e3f0 6e 76 6f 63 61 74 69 6f 6e 73 20 77 69 74 68 69  nvocations withi
1e400 6e 20 74 68 65 20 73 61 6d 65 20 5b 73 71 6c 69  n the same [sqli
1e410 74 65 33 5f 73 74 65 70 28 29 5d 20 63 61 6c 6c  te3_step()] call
1e420 2e 0a 5e 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69  ..^[http://en.wi
1e430 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
1e440 2f 43 6f 6f 72 64 69 6e 61 74 65 64 5f 55 6e 69  /Coordinated_Uni
1e450 76 65 72 73 61 6c 5f 54 69 6d 65 20 7c 20 55 6e  versal_Time | Un
1e460 69 76 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61  iversal Coordina
1e470 74 65 64 20 54 69 6d 65 20 28 55 54 43 29 5d 20  ted Time (UTC)] 
1e480 69 73 20 75 73 65 64 2e 20 0a 5e 46 6f 72 6d 61  is used. .^Forma
1e490 74 20 31 32 20 69 73 20 74 68 65 20 0a 5b 68 74  t 12 is the .[ht
1e4a0 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69  tp://en.wikipedi
1e4b0 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61  a.org/wiki/Julia
1e4c0 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64  n_day | Julian d
1e4d0 61 79 20 6e 75 6d 62 65 72 5d 0a 65 78 70 72 65  ay number].expre
1e4e0 73 73 65 64 20 61 73 20 61 20 66 6c 6f 61 74 69  ssed as a floati
1e4f0 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a  ng point value..
1e500 3c 2f 70 3e 0a 0a 3c 70 3e 0a 46 6f 72 6d 61 74  </p>..<p>.Format
1e510 73 20 32 20 74 68 72 6f 75 67 68 20 31 30 20 6d  s 2 through 10 m
1e520 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79  ay be optionally
1e530 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 74   followed by a t
1e540 69 6d 65 7a 6f 6e 65 20 69 6e 64 69 63 61 74 6f  imezone indicato
1e550 72 20 6f 66 20 74 68 65 20 66 6f 72 6d 0a 22 3c  r of the form."<
1e560 69 3e 26 23 39 31 3b 2b 2d 26 23 39 33 3b 48 48  i>&#91;+-&#93;HH
1e570 3a 4d 4d 3c 2f 69 3e 22 20 6f 72 20 6a 75 73 74  :MM</i>" or just
1e580 20 22 3c 69 3e 5a 3c 2f 69 3e 22 2e 20 20 54 68   "<i>Z</i>".  Th
1e590 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  e date and time 
1e5a0 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 55 54  functions use UT
1e5b0 43 20 6f 72 20 22 7a 75 6c 75 22 0a 74 69 6d 65  C or "zulu".time
1e5c0 20 69 6e 74 65 72 6e 61 6c 6c 79 2c 20 61 6e 64   internally, and
1e5d0 20 73 6f 20 74 68 65 20 22 5a 22 20 73 75 66 66   so the "Z" suff
1e5e0 69 78 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20  ix is a no-op.  
1e5f0 41 6e 79 20 6e 6f 6e 2d 7a 65 72 6f 20 22 48 48  Any non-zero "HH
1e600 3a 4d 4d 22 20 73 75 66 66 69 78 20 69 73 0a 73  :MM" suffix is.s
1e610 75 62 74 72 61 63 74 65 64 20 66 72 6f 6d 20 74  ubtracted from t
1e620 68 65 20 69 6e 64 69 63 61 74 65 64 20 64 61 74  he indicated dat
1e630 65 20 61 6e 64 20 74 69 6d 65 20 69 6e 20 6f 72  e and time in or
1e640 64 65 72 20 74 6f 20 63 6f 6d 70 75 74 65 20 7a  der to compute z
1e650 75 6c 75 20 74 69 6d 65 2e 0a 46 6f 72 20 65 78  ulu time..For ex
1e660 61 6d 70 6c 65 2c 20 61 6c 6c 20 6f 66 20 74 68  ample, all of th
1e670 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 69 6d 65  e following time
1e680 20 73 74 72 69 6e 67 73 20 61 72 65 20 65 71 75   strings are equ
1e690 69 76 61 6c 65 6e 74 3a 0a 3c 2f 70 3e 0a 0a 3c  ivalent:.</p>..<
1e6a0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 32 30 31 33  blockquote>.2013
1e6b0 2d 31 30 2d 30 37 20 30 38 3a 32 33 3a 31 39 2e  -10-07 08:23:19.
1e6c0 31 32 30 3c 62 72 3e 0a 32 30 31 33 2d 31 30 2d  120<br>.2013-10-
1e6d0 30 37 54 30 38 3a 32 33 3a 31 39 2e 31 32 30 5a  07T08:23:19.120Z
1e6e0 3c 62 72 3e 0a 32 30 31 33 2d 31 30 2d 30 37 20  <br>.2013-10-07 
1e6f0 30 34 3a 32 33 3a 31 39 2e 31 32 30 2d 30 34 3a  04:23:19.120-04:
1e700 30 30 3c 62 72 3e 0a 32 34 35 36 35 37 32 2e 38  00<br>.2456572.8
1e710 34 39 35 32 36 38 35 0a 3c 2f 62 6c 6f 63 6b 71  4952685.</blockq
1e720 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 5e 28 49 6e 20  uote>..<p>.^(In 
1e730 66 6f 72 6d 61 74 73 20 34 2c 20 37 2c 20 61 6e  formats 4, 7, an
1e740 64 20 31 30 2c 20 74 68 65 20 66 72 61 63 74 69  d 10, the fracti
1e750 6f 6e 61 6c 20 73 65 63 6f 6e 64 73 20 76 61 6c  onal seconds val
1e760 75 65 20 53 53 2e 53 53 53 20 63 61 6e 20 68 61  ue SS.SSS can ha
1e770 76 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 64  ve.one or more d
1e780 69 67 69 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20  igits following 
1e790 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e  the decimal poin
1e7a0 74 2e 20 20 45 78 61 63 74 6c 79 20 74 68 72 65  t.  Exactly thre
1e7b0 65 20 64 69 67 69 74 73 20 61 72 65 0a 73 68 6f  e digits are.sho
1e7c0 77 6e 20 69 6e 20 74 68 65 20 65 78 61 6d 70 6c  wn in the exampl
1e7d0 65 73 20 62 65 63 61 75 73 65 20 6f 6e 6c 79 20  es because only 
1e7e0 74 68 65 20 66 69 72 73 74 20 74 68 72 65 65 20  the first three 
1e7f0 64 69 67 69 74 73 20 61 72 65 20 73 69 67 6e 69  digits are signi
1e800 66 69 63 61 6e 74 0a 74 6f 20 74 68 65 20 72 65  ficant.to the re
1e810 73 75 6c 74 2c 20 62 75 74 20 74 68 65 20 69 6e  sult, but the in
1e820 70 75 74 20 73 74 72 69 6e 67 20 63 61 6e 20 68  put string can h
1e830 61 76 65 20 66 65 77 65 72 20 6f 72 20 6d 6f 72  ave fewer or mor
1e840 65 20 74 68 61 6e 20 74 68 72 65 65 20 64 69 67  e than three dig
1e850 69 74 73 0a 61 6e 64 20 74 68 65 20 64 61 74 65  its.and the date
1e860 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20  /time functions 
1e870 77 69 6c 6c 20 73 74 69 6c 6c 20 6f 70 65 72 61  will still opera
1e880 74 65 20 63 6f 72 72 65 63 74 6c 79 2e 29 5e 0a  te correctly.)^.
1e890 53 69 6d 69 6c 61 72 6c 79 2c 20 66 6f 72 6d 61  Similarly, forma
1e8a0 74 20 31 32 20 69 73 20 73 68 6f 77 6e 20 77 69  t 12 is shown wi
1e8b0 74 68 20 31 30 20 73 69 67 6e 69 66 69 63 61 6e  th 10 significan
1e8c0 74 20 64 69 67 69 74 73 2c 20 62 75 74 20 74 68  t digits, but th
1e8d0 65 20 64 61 74 65 2f 74 69 6d 65 0a 66 75 6e 63  e date/time.func
1e8e0 74 69 6f 6e 73 20 77 69 6c 6c 20 72 65 61 6c 6c  tions will reall
1e8f0 79 20 61 63 63 65 70 74 20 61 73 20 6d 61 6e 79  y accept as many
1e900 20 6f 72 20 61 73 20 66 65 77 20 64 69 67 69 74   or as few digit
1e910 73 20 61 73 20 61 72 65 20 6e 65 63 65 73 73 61  s as are necessa
1e920 72 79 20 74 6f 0a 72 65 70 72 65 73 65 6e 74 20  ry to.represent 
1e930 74 68 65 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e  the Julian day n
1e940 75 6d 62 65 72 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33  umber..</p>..<h3
1e950 3e 4d 6f 64 69 66 69 65 72 73 3c 2f 68 33 3e 0a  >Modifiers</h3>.
1e960 0a 3c 70 3e 5e 54 68 65 20 74 69 6d 65 20 73 74  .<p>^The time st
1e970 72 69 6e 67 20 63 61 6e 20 62 65 20 66 6f 6c 6c  ring can be foll
1e980 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72 20  owed by zero or 
1e990 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72 73 20 74  more modifiers t
1e9a0 68 61 74 20 0a 61 6c 74 65 72 20 64 61 74 65 20  hat .alter date 
1e9b0 61 6e 64 2f 6f 72 20 74 69 6d 65 2e 20 5e 45 61  and/or time. ^Ea
1e9c0 63 68 20 6d 6f 64 69 66 69 65 72 0a 69 73 20 61  ch modifier.is a
1e9d0 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 20   transformation 
1e9e0 74 68 61 74 20 69 73 20 61 70 70 6c 69 65 64 20  that is applied 
1e9f0 74 6f 20 74 68 65 20 74 69 6d 65 20 76 61 6c 75  to the time valu
1ea00 65 20 74 6f 20 69 74 73 20 6c 65 66 74 2e 0a 5e  e to its left..^
1ea10 4d 6f 64 69 66 69 65 72 73 20 61 72 65 20 61 70  Modifiers are ap
1ea20 70 6c 69 65 64 20 66 72 6f 6d 20 6c 65 66 74 20  plied from left 
1ea30 74 6f 20 72 69 67 68 74 3b 20 6f 72 64 65 72 20  to right; order 
1ea40 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 0a 5e 28  is important..^(
1ea50 54 68 65 20 61 76 61 69 6c 61 62 6c 65 20 6d 6f  The available mo
1ea60 64 69 66 69 65 72 73 20 61 72 65 20 61 73 20 66  difiers are as f
1ea70 6f 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 6f 6c  ollows.</p>..<ol
1ea80 3e 0a 3c 6c 69 3e 20 4e 4e 4e 20 64 61 79 73 0a  >.<li> NNN days.
1ea90 3c 6c 69 3e 20 4e 4e 4e 20 68 6f 75 72 73 0a 3c  <li> NNN hours.<
1eaa0 6c 69 3e 20 4e 4e 4e 20 6d 69 6e 75 74 65 73 0a  li> NNN minutes.
1eab0 3c 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e 4e 20 73 65  <li> NNN.NNNN se
1eac0 63 6f 6e 64 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d  conds.<li> NNN m
1ead0 6f 6e 74 68 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 79  onths.<li> NNN y
1eae0 65 61 72 73 0a 3c 6c 69 3e 20 73 74 61 72 74 20  ears.<li> start 
1eaf0 6f 66 20 6d 6f 6e 74 68 0a 3c 6c 69 3e 20 73 74  of month.<li> st
1eb00 61 72 74 20 6f 66 20 79 65 61 72 0a 3c 6c 69 3e  art of year.<li>
1eb10 20 73 74 61 72 74 20 6f 66 20 64 61 79 0a 3c 6c   start of day.<l
1eb20 69 3e 20 77 65 65 6b 64 61 79 20 4e 0a 3c 6c 69  i> weekday N.<li
1eb30 3e 20 75 6e 69 78 65 70 6f 63 68 0a 3c 6c 69 3e  > unixepoch.<li>
1eb40 20 6c 6f 63 61 6c 74 69 6d 65 0a 3c 6c 69 3e 20   localtime.<li> 
1eb50 75 74 63 20 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70  utc .</ol>)^..<p
1eb60 3e 5e 54 68 65 20 66 69 72 73 74 20 73 69 78 20  >^The first six 
1eb70 6d 6f 64 69 66 69 65 72 73 20 28 31 20 74 68 72  modifiers (1 thr
1eb80 6f 75 67 68 20 36 29 20 0a 73 69 6d 70 6c 79 20  ough 6) .simply 
1eb90 61 64 64 20 74 68 65 20 73 70 65 63 69 66 69 65  add the specifie
1eba0 64 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65  d amount of time
1ebb0 20 74 6f 20 74 68 65 20 64 61 74 65 20 61 6e 64   to the date and
1ebc0 20 74 69 6d 65 20 0a 73 70 65 63 69 66 69 65 64   time .specified
1ebd0 20 62 79 20 74 68 65 20 70 72 65 63 65 64 69 6e   by the precedin
1ebe0 67 20 74 69 6d 65 73 74 72 69 6e 67 20 61 6e 64  g timestring and
1ebf0 20 6d 6f 64 69 66 69 65 72 73 2e 0a 5e 54 68 65   modifiers..^The
1ec00 20 27 73 27 20 63 68 61 72 61 63 74 65 72 20 61   's' character a
1ec10 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
1ec20 20 6d 6f 64 69 66 69 65 72 20 6e 61 6d 65 73 20   modifier names 
1ec30 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 0a 5e 4e 6f  is optional..^No
1ec40 74 65 20 74 68 61 74 20 22 26 70 6c 75 73 6d 6e  te that "&plusmn
1ec50 3b 4e 4e 4e 20 6d 6f 6e 74 68 73 22 20 77 6f 72  ;NNN months" wor
1ec60 6b 73 20 62 79 20 72 65 6e 64 65 72 69 6e 67 20  ks by rendering 
1ec70 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74  the original dat
1ec80 65 20 69 6e 74 6f 0a 74 68 65 20 59 59 59 59 2d  e into.the YYYY-
1ec90 4d 4d 2d 44 44 20 66 6f 72 6d 61 74 2c 20 61 64  MM-DD format, ad
1eca0 64 69 6e 67 20 74 68 65 20 26 70 6c 75 73 6d 6e  ding the &plusmn
1ecb0 3b 4e 4e 4e 20 74 6f 20 74 68 65 20 4d 4d 20 6d  ;NNN to the MM m
1ecc0 6f 6e 74 68 20 76 61 6c 75 65 2c 20 74 68 65 6e  onth value, then
1ecd0 0a 6e 6f 72 6d 61 6c 69 7a 69 6e 67 20 74 68 65  .normalizing the
1ece0 20 72 65 73 75 6c 74 2e 20 20 5e 54 68 75 73 2c   result.  ^Thus,
1ecf0 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68   for example, th
1ed00 65 20 64 61 74 61 20 32 30 30 31 2d 30 33 2d 33  e data 2001-03-3
1ed10 31 20 6d 6f 64 69 66 69 65 64 0a 62 79 20 27 2b  1 modified.by '+
1ed20 31 20 6d 6f 6e 74 68 27 20 69 6e 69 74 69 61 6c  1 month' initial
1ed30 6c 79 20 79 69 65 6c 64 73 20 32 30 30 31 2d 30  ly yields 2001-0
1ed40 34 2d 33 31 2c 20 62 75 74 20 41 70 72 69 6c 20  4-31, but April 
1ed50 6f 6e 6c 79 20 68 61 73 20 33 30 20 64 61 79 73  only has 30 days
1ed60 0a 73 6f 20 74 68 65 20 64 61 74 65 20 69 73 20  .so the date is 
1ed70 6e 6f 72 6d 61 6c 69 7a 65 64 20 74 6f 20 32 30  normalized to 20
1ed80 30 31 2d 30 35 2d 30 31 2e 20 20 5e 41 20 73 69  01-05-01.  ^A si
1ed90 6d 69 6c 61 72 20 65 66 66 65 63 74 20 6f 63 63  milar effect occ
1eda0 75 72 73 20 77 68 65 6e 0a 74 68 65 20 6f 72 69  urs when.the ori
1edb0 67 69 6e 61 6c 20 64 61 74 65 20 69 73 20 46 65  ginal date is Fe
1edc0 62 72 75 61 72 79 20 32 39 20 6f 66 20 61 20 6c  bruary 29 of a l
1edd0 65 61 70 79 65 61 72 20 61 6e 64 20 74 68 65 20  eapyear and the 
1ede0 6d 6f 64 69 66 69 65 72 20 69 73 0a 26 70 6c 75  modifier is.&plu
1edf0 73 6d 6e 3b 4e 20 79 65 61 72 73 20 77 68 65 72  smn;N years wher
1ee00 65 20 4e 20 69 73 20 6e 6f 74 20 61 20 6d 75 6c  e N is not a mul
1ee10 74 69 70 6c 65 20 6f 66 20 66 6f 75 72 2e 3c 2f  tiple of four.</
1ee20 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 73 74 61  p>..<p>^The "sta
1ee30 72 74 20 6f 66 22 20 6d 6f 64 69 66 69 65 72 73  rt of" modifiers
1ee40 20 28 37 20 74 68 72 6f 75 67 68 20 39 29 20 73   (7 through 9) s
1ee50 68 69 66 74 20 74 68 65 20 64 61 74 65 20 62 61  hift the date ba
1ee60 63 6b 77 61 72 64 73 20 0a 74 6f 20 74 68 65 20  ckwards .to the 
1ee70 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
1ee80 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2c 20   current month, 
1ee90 79 65 61 72 20 6f 72 20 64 61 79 2e 3c 2f 70 3e  year or day.</p>
1eea0 0a 0a 3c 70 3e 5e 54 68 65 20 22 77 65 65 6b 64  ..<p>^The "weekd
1eeb0 61 79 22 20 6d 6f 64 69 66 69 65 72 20 61 64 76  ay" modifier adv
1eec0 61 6e 63 65 73 20 74 68 65 20 64 61 74 65 20 66  ances the date f
1eed0 6f 72 77 61 72 64 20 74 6f 20 74 68 65 20 6e 65  orward to the ne
1eee0 78 74 20 64 61 74 65 20 0a 77 68 65 72 65 20 74  xt date .where t
1eef0 68 65 20 77 65 65 6b 64 61 79 20 6e 75 6d 62 65  he weekday numbe
1ef00 72 20 69 73 20 4e 2e 20 53 75 6e 64 61 79 20 69  r is N. Sunday i
1ef10 73 20 30 2c 20 4d 6f 6e 64 61 79 20 69 73 20 31  s 0, Monday is 1
1ef20 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 3c  , and so forth.<
1ef30 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 75 6e  /p>..<p>^The "un
1ef40 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65  ixepoch" modifie
1ef50 72 20 28 31 31 29 20 6f 6e 6c 79 20 77 6f 72 6b  r (11) only work
1ef60 73 20 69 66 20 69 74 20 69 6d 6d 65 64 69 61 74  s if it immediat
1ef70 65 6c 79 20 66 6f 6c 6c 6f 77 73 20 0a 61 20 74  ely follows .a t
1ef80 69 6d 65 73 74 72 69 6e 67 20 69 6e 20 74 68 65  imestring in the
1ef90 20 44 44 44 44 44 44 44 44 44 44 20 66 6f 72 6d   DDDDDDDDDD form
1efa0 61 74 2e 20 0a 5e 54 68 69 73 20 6d 6f 64 69 66  at. .^This modif
1efb0 69 65 72 20 63 61 75 73 65 73 20 74 68 65 20 44  ier causes the D
1efc0 44 44 44 44 44 44 44 44 44 20 74 6f 20 62 65 20  DDDDDDDDD to be 
1efd0 69 6e 74 65 72 70 72 65 74 65 64 20 6e 6f 74 20  interpreted not 
1efe0 0a 61 73 20 61 20 4a 75 6c 69 61 6e 20 64 61 79  .as a Julian day
1eff0 20 6e 75 6d 62 65 72 20 61 73 20 69 74 20 6e 6f   number as it no
1f000 72 6d 61 6c 6c 79 20 77 6f 75 6c 64 20 62 65 2c  rmally would be,
1f010 20 62 75 74 20 61 73 0a 5b 68 74 74 70 3a 2f 2f   but as.[http://
1f020 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67  en.wikipedia.org
1f030 2f 77 69 6b 69 2f 55 6e 69 78 5f 74 69 6d 65 20  /wiki/Unix_time 
1f040 7c 20 55 6e 69 78 20 54 69 6d 65 5d 20 2d 20 74  | Unix Time] - t
1f050 68 65 20 0a 6e 75 6d 62 65 72 20 6f 66 20 73 65  he .number of se
1f060 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30  conds since 1970
1f070 2e 20 20 49 66 20 74 68 65 20 22 75 6e 69 78 65  .  If the "unixe
1f080 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 64  poch" modifier d
1f090 6f 65 73 20 6e 6f 74 0a 66 6f 6c 6c 6f 77 20 61  oes not.follow a
1f0a0 20 74 69 6d 65 73 74 72 69 6e 67 20 6f 66 20 74   timestring of t
1f0b0 68 65 20 66 6f 72 6d 20 44 44 44 44 44 44 44 44  he form DDDDDDDD
1f0c0 44 44 20 77 68 69 63 68 20 65 78 70 72 65 73 73  DD which express
1f0d0 65 73 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66  es the number.of
1f0e0 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31   seconds since 1
1f0f0 39 37 30 20 6f 72 20 69 66 20 6f 74 68 65 72 20  970 or if other 
1f100 6d 6f 64 69 66 69 65 72 73 0a 73 65 70 61 72 61  modifiers.separa
1f110 74 65 20 74 68 65 20 22 75 6e 69 78 65 70 6f 63  te the "unixepoc
1f120 68 22 20 6d 6f 64 69 66 69 65 72 20 66 72 6f 6d  h" modifier from
1f130 20 70 72 69 6f 72 20 44 44 44 44 44 44 44 44 44   prior DDDDDDDDD
1f140 44 20 74 68 65 6e 20 74 68 65 0a 62 65 68 61 76  D then the.behav
1f150 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ior is undefined
1f160 2e 0a 44 75 65 20 74 6f 20 70 72 65 63 69 73 69  ..Due to precisi
1f170 6f 6e 20 6c 69 6d 69 74 61 74 69 6f 6e 73 20 69  on limitations i
1f180 6d 70 6f 73 65 64 20 62 79 20 74 68 65 20 69 6d  mposed by the im
1f190 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 75 73  plementations us
1f1a0 65 0a 6f 66 20 36 34 2d 62 69 74 20 69 6e 74 65  e.of 64-bit inte
1f1b0 67 65 72 73 2c 20 74 68 65 20 22 75 6e 69 78 65  gers, the "unixe
1f1c0 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 6f  poch" modifier o
1f1d0 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 0a 64 61  nly works for.da
1f1e0 74 65 73 20 62 65 74 77 65 65 6e 20 30 30 30 30  tes between 0000
1f1f0 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 20  -01-01 00:00:00 
1f200 61 6e 64 20 35 33 35 32 2d 31 31 2d 30 31 20 31  and 5352-11-01 1
1f210 30 3a 35 32 3a 34 37 20 28 75 6e 69 78 20 74 69  0:52:47 (unix ti
1f220 6d 65 73 0a 6f 66 20 2d 36 32 31 36 37 32 31 39  mes.of -62167219
1f230 32 30 30 20 74 68 72 6f 75 67 68 20 31 30 36 37  200 through 1067
1f240 35 31 39 39 31 31 36 37 29 2e 3c 2f 70 3e 0a 0a  51991167).</p>..
1f250 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
1f260 20 6c 6f 63 61 6c 74 69 6d 65 20 7b 6c 6f 63 61   localtime {loca
1f270 6c 74 69 6d 65 20 6d 6f 64 69 66 69 65 72 7d 20  ltime modifier} 
1f280 7b 27 75 74 63 27 20 6d 6f 64 69 66 69 65 72 7d  {'utc' modifier}
1f290 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 22  </tcl>.<p>^The "
1f2a0 6c 6f 63 61 6c 74 69 6d 65 22 20 6d 6f 64 69 66  localtime" modif
1f2b0 69 65 72 20 28 31 32 29 20 61 73 73 75 6d 65 73  ier (12) assumes
1f2c0 20 74 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67   the time string
1f2d0 20 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73 20   to its left is 
1f2e0 69 6e 0a 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f  in.Universal Coo
1f2f0 72 64 69 6e 61 74 65 64 20 54 69 6d 65 20 28 55  rdinated Time (U
1f300 54 43 29 20 61 6e 64 20 61 64 6a 75 73 74 73 20  TC) and adjusts 
1f310 74 68 65 20 74 69 6d 65 0a 73 74 72 69 6e 67 20  the time.string 
1f320 73 6f 20 74 68 61 74 20 69 74 20 64 69 73 70 6c  so that it displ
1f330 61 79 73 20 6c 6f 63 61 6c 74 69 6d 65 2e 20 20  ays localtime.  
1f340 49 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22 0a 66  If "localtime".f
1f350 6f 6c 6c 6f 77 73 20 61 20 74 69 6d 65 20 74 68  ollows a time th
1f360 61 74 20 69 73 20 6e 6f 74 20 55 54 43 2c 20 74  at is not UTC, t
1f370 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72  hen the behavior
1f380 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 5e   is undefined..^
1f390 28 54 68 65 20 22 75 74 63 22 20 6d 6f 64 69 66  (The "utc" modif
1f3a0 69 65 72 20 69 73 20 74 68 65 20 6f 70 70 6f 73  ier is the oppos
1f3b0 69 74 65 20 6f 66 20 22 6c 6f 63 61 6c 74 69 6d  ite of "localtim
1f3c0 65 22 2e 20 20 0a 22 75 74 63 22 20 61 73 73 75  e".  ."utc" assu
1f3d0 6d 65 73 20 74 68 61 74 20 74 68 65 20 73 74 72  mes that the str
1f3e0 69 6e 67 0a 74 6f 20 69 74 73 20 6c 65 66 74 20  ing.to its left 
1f3f0 69 73 20 69 6e 20 74 68 65 20 6c 6f 63 61 6c 20  is in the local 
1f400 74 69 6d 65 7a 6f 6e 65 20 61 6e 64 20 61 64 6a  timezone and adj
1f410 75 73 74 73 20 74 68 61 74 20 73 74 72 69 6e 67  usts that string
1f420 20 74 6f 20 62 65 20 69 6e 20 55 54 43 2e 29 5e   to be in UTC.)^
1f430 0a 49 66 20 74 68 65 20 70 72 69 6f 72 20 73 74  .If the prior st
1f440 72 69 6e 67 20 69 73 20 6e 6f 74 20 69 6e 20 6c  ring is not in l
1f450 6f 63 61 6c 74 69 6d 65 2c 20 74 68 65 6e 20 74  ocaltime, then t
1f460 68 65 20 72 65 73 75 6c 74 20 6f 66 20 22 75 74  he result of "ut
1f470 63 22 20 69 73 0a 75 6e 64 65 66 69 6e 65 64 2e  c" is.undefined.
1f480 3c 2f 70 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c  </p>..<h3>Exampl
1f490 65 73 3c 2f 68 33 3e 0a 0a 5e 28 3c 70 3e 43 6f  es</h3>..^(<p>Co
1f4a0 6d 70 75 74 65 20 74 68 65 20 63 75 72 72 65 6e  mpute the curren
1f4b0 74 20 64 61 74 65 2e 3c 70 3e 0a 0a 3c 62 6c 6f  t date.<p>..<blo
1f4c0 63 6b 71 75 6f 74 65 3e 53 45 4c 45 43 54 20 64  ckquote>SELECT d
1f4d0 61 74 65 28 27 6e 6f 77 27 29 3b 3c 2f 62 6c 6f  ate('now');</blo
1f4e0 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70  ckquote>)^..^(<p
1f4f0 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6c 61 73  >Compute the las
1f500 74 20 64 61 79 20 6f 66 20 74 68 65 20 63 75 72  t day of the cur
1f510 72 65 6e 74 20 6d 6f 6e 74 68 2e 3c 2f 70 3e 0a  rent month.</p>.
1f520 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c  .<blockquote>SEL
1f530 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 2c 27  ECT date('now','
1f540 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68 27 2c  start of month',
1f550 27 2b 31 20 6d 6f 6e 74 68 27 2c 27 2d 31 20 64  '+1 month','-1 d
1f560 61 79 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  ay');.</blockquo
1f570 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70  te>)^..^(<p>Comp
1f580 75 74 65 20 74 68 65 20 64 61 74 65 20 61 6e 64  ute the date and
1f590 20 74 69 6d 65 20 67 69 76 65 6e 20 61 20 75 6e   time given a un
1f5a0 69 78 20 74 69 6d 65 73 74 61 6d 70 20 31 30 39  ix timestamp 109
1f5b0 32 39 34 31 34 36 36 2e 3c 2f 70 3e 0a 0a 3c 62  2941466.</p>..<b
1f5c0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20 53  lockquote>.    S
1f5d0 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28 31  ELECT datetime(1
1f5e0 30 39 32 39 34 31 34 36 36 2c 20 27 75 6e 69 78  092941466, 'unix
1f5f0 65 70 6f 63 68 27 29 3b 0a 3c 2f 62 6c 6f 63 6b  epoch');.</block
1f600 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43  quote>)^..^(<p>C
1f610 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74 65 20  ompute the date 
1f620 61 6e 64 20 74 69 6d 65 20 67 69 76 65 6e 20 61  and time given a
1f630 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 20   unix timestamp 
1f640 31 30 39 32 39 34 31 34 36 36 2c 20 61 6e 64 20  1092941466, and 
1f650 0a 63 6f 6d 70 65 6e 73 61 74 65 20 66 6f 72 20  .compensate for 
1f660 79 6f 75 72 20 6c 6f 63 61 6c 20 74 69 6d 65 7a  your local timez
1f670 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  one.</p>..<block
1f680 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20  quote>.  SELECT 
1f690 64 61 74 65 74 69 6d 65 28 31 30 39 32 39 34 31  datetime(1092941
1f6a0 34 36 36 2c 20 27 75 6e 69 78 65 70 6f 63 68 27  466, 'unixepoch'
1f6b0 2c 20 27 6c 6f 63 61 6c 74 69 6d 65 27 29 3b 0a  , 'localtime');.
1f6c0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
1f6d0 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  .^(<p>Compute th
1f6e0 65 20 63 75 72 72 65 6e 74 20 75 6e 69 78 20 74  e current unix t
1f6f0 69 6d 65 73 74 61 6d 70 2e 3c 2f 70 3e 0a 0a 3c  imestamp.</p>..<
1f700 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45  blockquote>.  SE
1f710 4c 45 43 54 20 73 74 72 66 74 69 6d 65 28 27 25  LECT strftime('%
1f720 73 27 2c 27 6e 6f 77 27 29 3b 0a 3c 2f 62 6c 6f  s','now');.</blo
1f730 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70  ckquote>)^..^(<p
1f740 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d  >Compute the num
1f750 62 65 72 20 6f 66 20 64 61 79 73 20 73 69 6e 63  ber of days sinc
1f760 65 20 74 68 65 20 73 69 67 6e 69 6e 67 20 6f 66  e the signing of
1f770 20 74 68 65 20 55 53 20 44 65 63 6c 61 72 61 74   the US Declarat
1f780 69 6f 6e 0a 6f 66 20 49 6e 64 65 70 65 6e 64 65  ion.of Independe
1f790 6e 63 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  nce.</p>..<block
1f7a0 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20  quote>.  SELECT 
1f7b0 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27 29  julianday('now')
1f7c0 20 2d 20 6a 75 6c 69 61 6e 64 61 79 28 27 31 37   - julianday('17
1f7d0 37 36 2d 30 37 2d 30 34 27 29 3b 0a 3c 2f 62 6c  76-07-04');.</bl
1f7e0 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
1f7f0 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6e 75  p>Compute the nu
1f800 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20  mber of seconds 
1f810 73 69 6e 63 65 20 61 20 70 61 72 74 69 63 75 6c  since a particul
1f820 61 72 20 6d 6f 6d 65 6e 74 20 69 6e 20 32 30 30  ar moment in 200
1f830 34 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  4:</p>..<blockqu
1f840 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 73 74  ote>.  SELECT st
1f850 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77  rftime('%s','now
1f860 27 29 20 2d 20 73 74 72 66 74 69 6d 65 28 27 25  ') - strftime('%
1f870 73 27 2c 27 32 30 30 34 2d 30 31 2d 30 31 20 30  s','2004-01-01 0
1f880 32 3a 33 34 3a 35 36 27 29 3b 0a 3c 2f 62 6c 6f  2:34:56');.</blo
1f890 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70  ckquote>)^..^(<p
1f8a0 3e 0a 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61  >.Compute the da
1f8b0 74 65 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  te of the first 
1f8c0 54 75 65 73 64 61 79 20 69 6e 20 4f 63 74 6f 62  Tuesday in Octob
1f8d0 65 72 0a 66 6f 72 20 74 68 65 20 63 75 72 72 65  er.for the curre
1f8e0 6e 74 20 79 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c  nt year..</p>..<
1f8f0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45  blockquote>.  SE
1f900 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 2c  LECT date('now',
1f910 27 73 74 61 72 74 20 6f 66 20 79 65 61 72 27 2c  'start of year',
1f920 27 2b 39 20 6d 6f 6e 74 68 73 27 2c 27 77 65 65  '+9 months','wee
1f930 6b 64 61 79 20 32 27 29 3b 0a 3c 2f 62 6c 6f 63  kday 2');.</bloc
1f940 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e  kquote>)^..^(<p>
1f950 43 6f 6d 70 75 74 65 20 74 68 65 20 74 69 6d 65  Compute the time
1f960 20 73 69 6e 63 65 20 74 68 65 20 75 6e 69 78 20   since the unix 
1f970 65 70 6f 63 68 20 69 6e 20 73 65 63 6f 6e 64 73  epoch in seconds
1f980 20 0a 28 6c 69 6b 65 20 73 74 72 66 74 69 6d 65   .(like strftime
1f990 28 27 25 73 27 2c 27 6e 6f 77 27 29 20 65 78 63  ('%s','now') exc
1f9a0 65 70 74 20 69 6e 63 6c 75 64 65 73 20 66 72 61  ept includes fra
1f9b0 63 74 69 6f 6e 61 6c 20 70 61 72 74 29 3a 3c 2f  ctional part):</
1f9c0 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
1f9d0 0a 20 20 53 45 4c 45 43 54 20 28 6a 75 6c 69 61  .  SELECT (julia
1f9e0 6e 64 61 79 28 27 6e 6f 77 27 29 20 2d 20 32 34  nday('now') - 24
1f9f0 34 30 35 38 37 2e 35 29 2a 38 36 34 30 30 2e 30  40587.5)*86400.0
1fa00 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
1fa10 5e 0a 0a 3c 68 33 3e 43 61 76 65 61 74 73 20 41  ^..<h3>Caveats A
1fa20 6e 64 20 42 75 67 73 3c 2f 68 33 3e 0a 0a 3c 70  nd Bugs</h3>..<p
1fa30 3e 54 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e  >The computation
1fa40 20 6f 66 20 6c 6f 63 61 6c 20 74 69 6d 65 20 64   of local time d
1fa50 65 70 65 6e 64 73 20 68 65 61 76 69 6c 79 20 6f  epends heavily o
1fa60 6e 20 74 68 65 20 77 68 69 6d 20 0a 6f 66 20 70  n the whim .of p
1fa70 6f 6c 69 74 69 63 69 61 6e 73 20 61 6e 64 20 69  oliticians and i
1fa80 73 20 74 68 75 73 20 64 69 66 66 69 63 75 6c 74  s thus difficult
1fa90 20 74 6f 20 67 65 74 20 63 6f 72 72 65 63 74 20   to get correct 
1faa0 66 6f 72 20 0a 61 6c 6c 20 6c 6f 63 61 6c 65 73  for .all locales
1fab0 2e 20 5e 49 6e 20 74 68 69 73 20 69 6d 70 6c 65  . ^In this imple
1fac0 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20 73  mentation, the s
1fad0 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72  tandard C librar
1fae0 79 20 0a 66 75 6e 63 74 69 6f 6e 20 6c 6f 63 61  y .function loca
1faf0 6c 74 69 6d 65 5f 72 28 29 20 69 73 20 75 73 65  ltime_r() is use
1fb00 64 20 74 6f 20 61 73 73 69 73 74 20 69 6e 20 74  d to assist in t
1fb10 68 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e 20 6f  he calculation o
1fb20 66 20 0a 6c 6f 63 61 6c 20 74 69 6d 65 2e 20 20  f .local time.  
1fb30 5e 28 54 68 65 20 0a 6c 6f 63 61 6c 74 69 6d 65  ^(The .localtime
1fb40 5f 72 28 29 20 43 20 66 75 6e 63 74 69 6f 6e 20  _r() C function 
1fb50 6e 6f 72 6d 61 6c 6c 79 20 6f 6e 6c 79 20 77 6f  normally only wo
1fb60 72 6b 73 20 66 6f 72 20 79 65 61 72 73 0a 62 65  rks for years.be
1fb70 74 77 65 65 6e 20 31 39 37 30 20 61 6e 64 20 32  tween 1970 and 2
1fb80 30 33 37 2e 20 46 6f 72 20 64 61 74 65 73 20 6f  037. For dates o
1fb90 75 74 73 69 64 65 20 74 68 69 73 20 72 61 6e 67  utside this rang
1fba0 65 2c 20 53 51 4c 69 74 65 20 0a 61 74 74 65 6d  e, SQLite .attem
1fbb0 70 74 73 20 74 6f 20 6d 61 70 20 74 68 65 20 79  pts to map the y
1fbc0 65 61 72 20 69 6e 74 6f 20 61 6e 20 65 71 75 69  ear into an equi
1fbd0 76 61 6c 65 6e 74 20 79 65 61 72 20 77 69 74 68  valent year with
1fbe0 69 6e 20 0a 74 68 69 73 20 72 61 6e 67 65 2c 20  in .this range, 
1fbf0 64 6f 20 74 68 65 20 63 61 6c 63 75 6c 61 74 69  do the calculati
1fc00 6f 6e 2c 20 74 68 65 6e 20 6d 61 70 20 74 68 65  on, then map the
1fc10 20 79 65 61 72 20 62 61 63 6b 2e 29 5e 3c 2f 70   year back.)^</p
1fc20 3e 0a 0a 0a 3c 70 3e 5e 28 54 68 65 73 65 20 66  >...<p>^(These f
1fc30 75 6e 63 74 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f  unctions only wo
1fc40 72 6b 20 66 6f 72 20 64 61 74 65 73 20 62 65 74  rk for dates bet
1fc50 77 65 65 6e 20 30 30 30 30 2d 30 31 2d 30 31 20  ween 0000-01-01 
1fc60 30 30 3a 30 30 3a 30 30 0a 61 6e 64 20 39 39 39  00:00:00.and 999
1fc70 39 2d 31 32 2d 33 31 20 32 33 3a 35 39 3a 35 39  9-12-31 23:59:59
1fc80 20 28 6a 75 6c 69 64 61 6e 20 64 61 79 20 6e 75   (julidan day nu
1fc90 6d 62 65 72 73 20 31 37 32 31 30 35 39 2e 35 20  mbers 1721059.5 
1fca0 74 68 72 6f 75 67 68 20 35 33 37 33 34 38 34 2e  through 5373484.
1fcb0 35 29 2e 29 5e 0a 46 6f 72 20 64 61 74 65 73 20  5).)^.For dates 
1fcc0 6f 75 74 73 69 64 65 20 74 68 61 74 20 72 61 6e  outside that ran
1fcd0 67 65 2c 20 74 68 65 20 72 65 73 75 6c 74 73 20  ge, the results 
1fce0 6f 66 20 74 68 65 73 65 0a 66 75 6e 63 74 69 6f  of these.functio
1fcf0 6e 73 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64  ns are undefined
1fd00 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e 6f 6e 2d 56 69  .</p>..<p>Non-Vi
1fd10 73 74 61 20 57 69 6e 64 6f 77 73 20 70 6c 61 74  sta Windows plat
1fd20 66 6f 72 6d 73 20 6f 6e 6c 79 20 73 75 70 70 6f  forms only suppo
1fd30 72 74 20 6f 6e 65 20 73 65 74 20 6f 66 20 44 53  rt one set of DS
1fd40 54 20 72 75 6c 65 73 2e 20 0a 56 69 73 74 61 20  T rules. .Vista 
1fd50 6f 6e 6c 79 20 73 75 70 70 6f 72 74 73 20 74 77  only supports tw
1fd60 6f 2e 20 54 68 65 72 65 66 6f 72 65 2c 20 6f 6e  o. Therefore, on
1fd70 20 74 68 65 73 65 20 70 6c 61 74 66 6f 72 6d 73   these platforms
1fd80 2c 20 0a 68 69 73 74 6f 72 69 63 61 6c 20 44 53  , .historical DS
1fd90 54 20 63 61 6c 63 75 6c 61 74 69 6f 6e 73 20 77  T calculations w
1fda0 69 6c 6c 20 62 65 20 69 6e 63 6f 72 72 65 63 74  ill be incorrect
1fdb0 2e 20 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  . .For example, 
1fdc0 69 6e 20 74 68 65 20 55 53 2c 20 69 6e 20 32 30  in the US, in 20
1fdd0 30 37 20 74 68 65 20 44 53 54 20 72 75 6c 65 73  07 the DST rules
1fde0 20 63 68 61 6e 67 65 64 2e 20 0a 4e 6f 6e 2d 56   changed. .Non-V
1fdf0 69 73 74 61 20 57 69 6e 64 6f 77 73 20 70 6c 61  ista Windows pla
1fe00 74 66 6f 72 6d 73 20 61 70 70 6c 79 20 74 68 65  tforms apply the
1fe10 20 6e 65 77 20 32 30 30 37 20 44 53 54 20 72 75   new 2007 DST ru
1fe20 6c 65 73 20 0a 74 6f 20 61 6c 6c 20 70 72 65 76  les .to all prev
1fe30 69 6f 75 73 20 79 65 61 72 73 20 61 73 20 77 65  ious years as we
1fe40 6c 6c 2e 20 56 69 73 74 61 20 64 6f 65 73 20 73  ll. Vista does s
1fe50 6f 6d 65 77 68 61 74 20 62 65 74 74 65 72 0a 67  omewhat better.g
1fe60 65 74 74 69 6e 67 20 72 65 73 75 6c 74 73 20 63  etting results c
1fe70 6f 72 72 65 63 74 20 62 61 63 6b 20 74 6f 20 31  orrect back to 1
1fe80 39 38 36 2c 20 77 68 65 6e 20 74 68 65 20 72 75  986, when the ru
1fe90 6c 65 73 20 77 65 72 65 20 61 6c 73 6f 20 63 68  les were also ch
1fea0 61 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41  anged.</p>..<p>A
1feb0 6c 6c 20 69 6e 74 65 72 6e 61 6c 20 63 6f 6d 70  ll internal comp
1fec0 75 74 61 74 69 6f 6e 73 20 61 73 73 75 6d 65 20  utations assume 
1fed0 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e  the .[http://en.
1fee0 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
1fef0 6b 69 2f 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c  ki/Gregorian_cal
1ff00 65 6e 64 61 72 20 7c 20 47 72 65 67 6f 72 69 61  endar | Gregoria
1ff10 6e 20 63 61 6c 65 6e 64 61 72 5d 0a 73 79 73 74  n calendar].syst
1ff20 65 6d 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 20  em.  It is also 
1ff30 61 73 73 75 6d 65 64 20 74 68 61 74 20 65 76 65  assumed that eve
1ff40 72 79 0a 64 61 79 20 69 73 20 65 78 61 63 74 6c  ry.day is exactl
1ff50 79 20 38 36 34 30 30 20 73 65 63 6f 6e 64 73 20  y 86400 seconds 
1ff60 69 6e 20 64 75 72 61 74 69 6f 6e 2e 3c 2f 70 3e  in duration.</p>
1ff70 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
1ff80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ff90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ffa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ffb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ffc0 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
1ffd0 41 67 67 72 65 67 61 74 65 20 46 75 6e 63 74 69  Aggregate Functi
1ffe0 6f 6e 73 7d 20 61 67 67 66 75 6e 63 20 7b 2a 61  ons} aggfunc {*a
1fff0 67 67 66 75 6e 63 7d 0a 75 6e 73 65 74 20 2d 6e  ggfunc}.unset -n
20000 6f 63 6f 6d 70 6c 61 69 6e 20 63 6f 72 65 66 75  ocomplain corefu
20010 6e 63 73 65 74 0a 0a 66 75 6e 63 64 65 66 20 7b  ncset..funcdef {
20020 61 76 67 28 58 29 7d 20 7b 2a 61 76 67 20 7b 61  avg(X)} {*avg {a
20030 76 67 28 29 20 61 67 67 72 65 67 61 74 65 20 66  vg() aggregate f
20040 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54  unction}} {.  ^T
20050 68 65 20 61 76 67 28 29 20 66 75 6e 63 74 69 6f  he avg() functio
20060 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68 65 20  n.  returns the 
20070 61 76 65 72 61 67 65 20 76 61 6c 75 65 20 6f 66  average value of
20080 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 3c 69   all non-NULL <i
20090 3e 58 3c 2f 69 3e 20 77 69 74 68 69 6e 20 61 0a  >X</i> within a.
200a0 20 20 67 72 6f 75 70 2e 20 20 5e 53 74 72 69 6e    group.  ^Strin
200b0 67 20 61 6e 64 20 42 4c 4f 42 20 76 61 6c 75 65  g and BLOB value
200c0 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 6c 6f  s that do not lo
200d0 6f 6b 20 6c 69 6b 65 20 6e 75 6d 62 65 72 73 20  ok like numbers 
200e0 61 72 65 0a 20 20 69 6e 74 65 72 70 72 65 74 65  are.  interprete
200f0 64 20 61 73 20 30 2e 0a 20 20 5e 54 68 65 20 72  d as 0..  ^The r
20100 65 73 75 6c 74 20 6f 66 20 61 76 67 28 29 20 69  esult of avg() i
20110 73 20 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74  s always a float
20120 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 20  ing point value 
20130 61 73 20 6c 6f 6e 67 20 61 73 0a 20 20 61 74 20  as long as.  at 
20140 74 68 65 72 65 20 69 73 20 61 74 20 6c 65 61 73  there is at leas
20150 74 20 6f 6e 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 69  t one non-NULL i
20160 6e 70 75 74 20 65 76 65 6e 20 69 66 20 61 6c 6c  nput even if all
20170 0a 20 20 69 6e 70 75 74 73 20 61 72 65 20 69 6e  .  inputs are in
20180 74 65 67 65 72 73 2e 20 20 5e 54 68 65 20 72 65  tegers.  ^The re
20190 73 75 6c 74 20 6f 66 20 61 76 67 28 29 20 69 73  sult of avg() is
201a0 20 4e 55 4c 4c 20 69 66 20 61 6e 64 20 6f 6e 6c   NULL if and onl
201b0 79 20 69 66 0a 20 20 74 68 65 72 65 20 61 72 65  y if.  there are
201c0 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70   no non-NULL inp
201d0 75 74 73 2e 20 20 0a 7d 0a 0a 66 75 6e 63 64 65  uts.  .}..funcde
201e0 66 20 7b 63 6f 75 6e 74 28 58 29 20 63 6f 75 6e  f {count(X) coun
201f0 74 28 2a 29 7d 20 7b 2a 63 6f 75 6e 74 20 7b 63  t(*)} {*count {c
20200 6f 75 6e 74 28 29 20 61 67 67 72 65 67 61 74 65  ount() aggregate
20210 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20   function}} {.  
20220 5e 54 68 65 20 63 6f 75 6e 74 28 58 29 20 66 75  ^The count(X) fu
20230 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 0a 20  nction returns. 
20240 20 61 20 63 6f 75 6e 74 20 6f 66 20 74 68 65 20   a count of the 
20250 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 0a  number of times.
20260 20 20 74 68 61 74 20 3c 69 3e 58 3c 2f 69 3e 20    that <i>X</i> 
20270 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 69 6e 20 61  is not NULL in a
20280 20 67 72 6f 75 70 2e 20 20 5e 54 68 65 20 63 6f   group.  ^The co
20290 75 6e 74 28 2a 29 20 66 75 6e 63 74 69 6f 6e 0a  unt(*) function.
202a0 20 20 28 77 69 74 68 20 6e 6f 20 61 72 67 75 6d    (with no argum
202b0 65 6e 74 73 29 20 72 65 74 75 72 6e 73 20 74 68  ents) returns th
202c0 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
202d0 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67 72  f rows in the gr
202e0 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  oup..}..funcdef 
202f0 7b 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 29  {group_concat(X)
20300 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 2c   group_concat(X,
20310 59 29 7d 20 7b 0a 20 20 2a 67 72 6f 75 70 5f 63  Y)} {.  *group_c
20320 6f 6e 63 61 74 20 7b 67 72 6f 75 70 5f 63 6f 6e  oncat {group_con
20330 63 61 74 28 29 20 61 67 67 72 65 67 61 74 65 20  cat() aggregate 
20340 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20  function}.} {.  
20350 5e 54 68 65 20 67 72 6f 75 70 5f 63 6f 6e 63 61  ^The group_conca
20360 74 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  t() function ret
20370 75 72 6e 73 0a 20 20 61 20 73 74 72 69 6e 67 20  urns.  a string 
20380 77 68 69 63 68 20 69 73 20 74 68 65 20 63 6f 6e  which is the con
20390 63 61 74 65 6e 61 74 69 6f 6e 20 6f 66 0a 20 20  catenation of.  
203a0 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c  all non-NULL val
203b0 75 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e  ues of <i>X</i>.
203c0 20 20 5e 49 66 20 70 61 72 61 6d 65 74 65 72 20    ^If parameter 
203d0 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 70 72 65 73  <i>Y</i> is pres
203e0 65 6e 74 20 74 68 65 6e 0a 20 20 69 74 20 69 73  ent then.  it is
203f0 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65 70   used as the sep
20400 61 72 61 74 6f 72 0a 20 20 62 65 74 77 65 65 6e  arator.  between
20410 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 3c 69   instances of <i
20420 3e 58 3c 2f 69 3e 2e 20 20 5e 41 20 63 6f 6d 6d  >X</i>.  ^A comm
20430 61 20 28 22 2c 22 29 20 69 73 20 75 73 65 64 20  a (",") is used 
20440 61 73 20 74 68 65 20 73 65 70 61 72 61 74 6f 72  as the separator
20450 0a 20 20 69 66 20 3c 69 3e 59 3c 2f 69 3e 20 69  .  if <i>Y</i> i
20460 73 20 6f 6d 69 74 74 65 64 2e 20 20 54 68 65 20  s omitted.  The 
20470 6f 72 64 65 72 20 6f 66 20 74 68 65 20 63 6f 6e  order of the con
20480 63 61 74 65 6e 61 74 65 64 20 65 6c 65 6d 65 6e  catenated elemen
20490 74 73 20 69 73 0a 20 20 61 72 62 69 74 72 61 72  ts is.  arbitrar
204a0 79 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d  y..}..funcdef {m
204b0 61 78 28 58 29 7d 20 7b 2a 6d 61 78 41 67 67 46  ax(X)} {*maxAggF
204c0 75 6e 63 20 2a 61 67 67 5f 6d 61 78 20 7b 6d 61  unc *agg_max {ma
204d0 78 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  x() aggregate fu
204e0 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68  nction}} {.  ^Th
204f0 65 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74  e max() aggregat
20500 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74  e function.  ret
20510 75 72 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  urns the maximum
20520 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61   value of all va
20530 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75  lues in the grou
20540 70 2e 0a 20 20 5e 54 68 65 20 6d 61 78 69 6d 75  p..  ^The maximu
20550 6d 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 76  m value is the v
20560 61 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20  alue that would 
20570 62 65 20 72 65 74 75 72 6e 65 64 20 6c 61 73 74  be returned last
20580 20 69 6e 20 61 6e 0a 20 20 4f 52 44 45 52 20 42   in an.  ORDER B
20590 59 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 63 6f  Y on the same co
205a0 6c 75 6d 6e 2e 20 20 5e 41 67 67 72 65 67 61 74  lumn.  ^Aggregat
205b0 65 20 6d 61 78 28 29 20 72 65 74 75 72 6e 73 20  e max() returns 
205c0 4e 55 4c 4c 20 0a 20 20 69 66 20 61 6e 64 20 6f  NULL .  if and o
205d0 6e 6c 79 20 69 66 20 74 68 65 72 65 20 61 72 65  nly if there are
205e0 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c   no non-NULL val
205f0 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ues in the group
20600 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69  ..}..funcdef {mi
20610 6e 28 58 29 7d 20 7b 2a 6d 69 6e 41 67 67 46 75  n(X)} {*minAggFu
20620 6e 63 20 2a 61 67 67 5f 6d 69 6e 20 7b 6d 69 6e  nc *agg_min {min
20630 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
20640 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65  ction}} {.  ^The
20650 20 6d 69 6e 28 29 20 61 67 67 72 65 67 61 74 65   min() aggregate
20660 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75   function.  retu
20670 72 6e 73 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20  rns the minimum 
20680 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 6f  non-NULL value o
20690 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20  f all values in 
206a0 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e 54 68  the group..  ^Th
206b0 65 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 20  e minimum value 
206c0 69 73 20 74 68 65 20 66 69 72 73 74 20 6e 6f 6e  is the first non
206d0 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 74 68 61 74  -NULL value that
206e0 20 77 6f 75 6c 64 20 61 70 70 65 61 72 0a 20 20   would appear.  
206f0 69 6e 20 61 6e 20 4f 52 44 45 52 20 42 59 20 6f  in an ORDER BY o
20700 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 20 20  f the column..  
20710 5e 41 67 67 72 65 67 61 74 65 20 6d 69 6e 28 29  ^Aggregate min()
20720 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66   returns NULL if
20730 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65   and only if the
20740 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55  re are no non-NU
20750 4c 4c 0a 20 20 76 61 6c 75 65 73 20 69 6e 20 74  LL.  values in t
20760 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e  he group..}..fun
20770 63 64 65 66 20 7b 73 75 6d 28 58 29 20 74 6f 74  cdef {sum(X) tot
20780 61 6c 28 58 29 7d 20 7b 0a 20 20 2a 73 75 6d 46  al(X)} {.  *sumF
20790 75 6e 63 20 2a 73 75 6d 20 2a 74 6f 74 61 6c 0a  unc *sum *total.
207a0 20 20 7b 73 75 6d 28 29 20 61 67 67 72 65 67 61    {sum() aggrega
207b0 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 20 20 7b  te function}.  {
207c0 74 6f 74 61 6c 28 29 20 61 67 67 72 65 67 61 74  total() aggregat
207d0 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a  e function}.} {.
207e0 20 20 5e 54 68 65 20 73 75 6d 28 29 20 61 6e 64    ^The sum() and
207f0 20 74 6f 74 61 6c 28 29 20 61 67 67 72 65 67 61   total() aggrega
20800 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a 20 20 72  te functions.  r
20810 65 74 75 72 6e 20 73 75 6d 20 6f 66 20 61 6c 6c  eturn sum of all
20820 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73   non-NULL values
20830 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20   in the group.. 
20840 20 5e 49 66 20 74 68 65 72 65 20 61 72 65 20 6e   ^If there are n
20850 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74  o non-NULL input
20860 20 72 6f 77 73 20 74 68 65 6e 20 73 75 6d 28 29   rows then sum()
20870 20 72 65 74 75 72 6e 73 0a 20 20 4e 55 4c 4c 20   returns.  NULL 
20880 62 75 74 20 74 6f 74 61 6c 28 29 20 72 65 74 75  but total() retu
20890 72 6e 73 20 30 2e 30 2e 0a 20 20 4e 55 4c 4c 20  rns 0.0..  NULL 
208a0 69 73 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20  is not normally 
208b0 61 20 68 65 6c 70 66 75 6c 20 72 65 73 75 6c 74  a helpful result
208c0 20 66 6f 72 20 74 68 65 20 73 75 6d 20 6f 66 20   for the sum of 
208d0 6e 6f 20 72 6f 77 73 0a 20 20 62 75 74 20 74 68  no rows.  but th
208e0 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20 72  e SQL standard r
208f0 65 71 75 69 72 65 73 20 69 74 20 61 6e 64 20 6d  equires it and m
20900 6f 73 74 20 6f 74 68 65 72 0a 20 20 53 51 4c 20  ost other.  SQL 
20910 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73  database engines
20920 20 69 6d 70 6c 65 6d 65 6e 74 20 73 75 6d 28 29   implement sum()
20930 20 74 68 61 74 20 77 61 79 20 73 6f 20 53 51 4c   that way so SQL
20940 69 74 65 20 64 6f 65 73 20 69 74 20 69 6e 20 74  ite does it in t
20950 68 65 0a 20 20 73 61 6d 65 20 77 61 79 20 69 6e  he.  same way in
20960 20 6f 72 64 65 72 20 74 6f 20 62 65 20 63 6f 6d   order to be com
20970 70 61 74 69 62 6c 65 2e 20 20 20 54 68 65 20 6e  patible.   The n
20980 6f 6e 2d 73 74 61 6e 64 61 72 64 20 74 6f 74 61  on-standard tota
20990 6c 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 69  l() function.  i
209a0 73 20 70 72 6f 76 69 64 65 64 20 61 73 20 61 20  s provided as a 
209b0 63 6f 6e 76 65 6e 69 65 6e 74 20 77 61 79 20 74  convenient way t
209c0 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 74 68  o work around th
209d0 69 73 20 64 65 73 69 67 6e 20 70 72 6f 62 6c 65  is design proble
209e0 6d 0a 20 20 69 6e 20 74 68 65 20 53 51 4c 20 6c  m.  in the SQL l
209f0 61 6e 67 75 61 67 65 2e 3c 2f 70 3e 0a 0a 20 20  anguage.</p>..  
20a00 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  <p>^The result o
20a10 66 20 74 6f 74 61 6c 28 29 20 69 73 20 61 6c 77  f total() is alw
20a20 61 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70  ays a floating p
20a30 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 20 20 5e 54  oint value..  ^T
20a40 68 65 20 72 65 73 75 6c 74 20 6f 66 20 73 75 6d  he result of sum
20a50 28 29 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  () is an integer
20a60 20 76 61 6c 75 65 20 69 66 20 61 6c 6c 20 6e 6f   value if all no
20a70 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 20 61 72  n-NULL inputs ar
20a80 65 20 69 6e 74 65 67 65 72 73 2e 0a 20 20 5e 49  e integers..  ^I
20a90 66 20 61 6e 79 20 69 6e 70 75 74 20 74 6f 20 73  f any input to s
20aa0 75 6d 28 29 20 69 73 20 6e 65 69 74 68 65 72 20  um() is neither 
20ab0 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20  an integer or a 
20ac0 4e 55 4c 4c 0a 20 20 74 68 65 6e 20 73 75 6d 28  NULL.  then sum(
20ad0 29 20 72 65 74 75 72 6e 73 20 61 20 66 6c 6f 61  ) returns a floa
20ae0 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65  ting point value
20af0 0a 20 20 77 68 69 63 68 20 6d 69 67 68 74 20 62  .  which might b
20b00 65 20 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 69  e an approximati
20b10 6f 6e 20 74 6f 20 74 68 65 20 74 72 75 65 20 73  on to the true s
20b20 75 6d 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 53  um.</p>..  <p>^S
20b30 75 6d 28 29 20 77 69 6c 6c 20 74 68 72 6f 77 20  um() will throw 
20b40 61 6e 20 22 69 6e 74 65 67 65 72 20 6f 76 65 72  an "integer over
20b50 66 6c 6f 77 22 20 65 78 63 65 70 74 69 6f 6e 20  flow" exception 
20b60 69 66 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20  if all inputs.  
20b70 61 72 65 20 69 6e 74 65 67 65 72 73 20 6f 72 20  are integers or 
20b80 4e 55 4c 4c 0a 20 20 61 6e 64 20 61 6e 20 69 6e  NULL.  and an in
20b90 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 20 6f  teger overflow o
20ba0 63 63 75 72 73 20 61 74 20 61 6e 79 20 70 6f 69  ccurs at any poi
20bb0 6e 74 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f  nt during the co
20bc0 6d 70 75 74 61 74 69 6f 6e 2e 0a 20 20 5e 54 6f  mputation..  ^To
20bd0 74 61 6c 28 29 20 6e 65 76 65 72 20 74 68 72 6f  tal() never thro
20be0 77 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76  ws an integer ov
20bf0 65 72 66 6c 6f 77 2e 0a 7d 0a 3c 2f 74 63 6c 3e  erflow..}.</tcl>
20c00 0a 0a 0a 3c 70 3e 0a 54 68 65 20 61 67 67 72 65  ...<p>.The aggre
20c10 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73  gate functions s
20c20 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65 20 61  hown below are a
20c30 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61  vailable by defa
20c40 75 6c 74 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c  ult.  Additional
20c50 0a 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74  .aggregate funct
20c60 69 6f 6e 73 20 77 72 69 74 74 65 6e 20 69 6e 20  ions written in 
20c70 43 20 6d 61 79 20 62 65 20 61 64 64 65 64 20 75  C may be added u
20c80 73 69 6e 67 20 74 68 65 20 0a 5b 73 71 6c 69 74  sing the .[sqlit
20c90 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
20ca0 6f 6e 28 29 5d 3c 2f 61 3e 0a 41 50 49 2e 3c 2f  on()]</a>.API.</
20cb0 70 3e 0a 0a 3c 70 3e 0a 5e 49 6e 20 61 6e 79 20  p>..<p>.^In any 
20cc0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
20cd0 6f 6e 20 74 68 61 74 20 74 61 6b 65 73 20 61 20  on that takes a 
20ce0 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2c  single argument,
20cf0 20 74 68 61 74 20 61 72 67 75 6d 65 6e 74 0a 63   that argument.c
20d00 61 6e 20 62 65 20 70 72 65 63 65 64 65 64 20 62  an be preceded b
20d10 79 20 74 68 65 20 6b 65 79 77 6f 72 64 20 44 49  y the keyword DI
20d20 53 54 49 4e 43 54 2e 20 20 5e 49 6e 20 73 75 63  STINCT.  ^In suc
20d30 68 20 63 61 73 65 73 2c 20 64 75 70 6c 69 63 61  h cases, duplica
20d40 74 65 0a 65 6c 65 6d 65 6e 74 73 20 61 72 65 20  te.elements are 
20d50 66 69 6c 74 65 72 65 64 20 62 65 66 6f 72 65 20  filtered before 
20d60 62 65 69 6e 67 20 70 61 73 73 65 64 20 69 6e 74  being passed int
20d70 6f 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20  o the aggregate 
20d80 66 75 6e 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65  function..^For e
20d90 78 61 6d 70 6c 65 2c 20 74 68 65 20 66 75 6e 63  xample, the func
20da0 74 69 6f 6e 20 22 63 6f 75 6e 74 28 64 69 73 74  tion "count(dist
20db0 69 6e 63 74 20 58 29 22 20 77 69 6c 6c 20 72 65  inct X)" will re
20dc0 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a  turn the number.
20dd0 6f 66 20 64 69 73 74 69 6e 63 74 20 76 61 6c 75  of distinct valu
20de0 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 20 58 20 69  es of column X i
20df0 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 74 6f  nstead of the to
20e00 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f  tal number of no
20e10 6e 2d 6e 75 6c 6c 0a 76 61 6c 75 65 73 20 69 6e  n-null.values in
20e20 20 63 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f 70 3e 0a   column X..</p>.
20e30 0a 3c 74 63 6c 3e 0a 73 65 74 20 6c 78 20 7b 7d  .<tcl>.set lx {}
20e40 0a 66 6f 72 65 61 63 68 20 62 61 73 65 73 79 6e  .foreach basesyn
20e50 74 61 78 20 5b 61 72 72 61 79 20 6e 61 6d 65 73  tax [array names
20e60 20 63 6f 72 65 66 75 6e 63 73 65 74 5d 20 7b 0a   corefuncset] {.
20e70 20 20 66 6f 72 65 61 63 68 20 7b 73 79 6e 74 61    foreach {synta
20e80 78 20 6b 65 79 77 6f 72 64 73 20 64 65 73 63 7d  x keywords desc}
20e90 20 24 63 6f 72 65 66 75 6e 63 73 65 74 28 24 62   $corefuncset($b
20ea0 61 73 65 73 79 6e 74 61 78 29 20 62 72 65 61 6b  asesyntax) break
20eb0 0a 20 20 72 65 67 65 78 70 20 7b 5e 5b 61 2d 7a  .  regexp {^[a-z
20ec0 5f 5d 2b 7d 20 24 62 61 73 65 73 79 6e 74 61 78  _]+} $basesyntax
20ed0 20 66 72 61 67 6d 65 6e 74 0a 20 20 66 6f 72 65   fragment.  fore
20ee0 61 63 68 20 63 6f 72 65 73 79 6e 74 61 78 20 24  ach coresyntax $
20ef0 73 79 6e 74 61 78 20 7b 0a 20 20 20 20 6c 61 70  syntax {.    lap
20f00 70 65 6e 64 20 6c 78 20 5b 6c 69 73 74 20 24 66  pend lx [list $f
20f10 72 61 67 6d 65 6e 74 20 24 63 6f 72 65 73 79 6e  ragment $coresyn
20f20 74 61 78 20 30 5d 0a 20 20 7d 0a 7d 0a 68 64 5f  tax 0].  }.}.hd_
20f30 6c 69 73 74 5f 6f 66 5f 6c 69 6e 6b 73 20 7b 7d  list_of_links {}
20f40 20 32 32 35 20 5b 6c 73 6f 72 74 20 2d 69 6e 64   225 [lsort -ind
20f50 65 78 20 31 20 24 6c 78 5d 0a 0a 68 64 5f 70 75  ex 1 $lx]..hd_pu
20f60 74 73 6e 6c 20 22 3c 68 72 20 63 6c 61 73 73 3d  tsnl "<hr class=
20f70 27 78 68 72 27 3e 22 0a 68 64 5f 70 75 74 73 6e  'xhr'>".hd_putsn
20f80 6c 20 22 3c 64 6c 3e 22 0a 66 6f 72 65 61 63 68  l "<dl>".foreach
20f90 20 62 61 73 65 73 79 6e 74 61 78 20 5b 6c 73 6f   basesyntax [lso
20fa0 72 74 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20  rt [array names 
20fb0 63 6f 72 65 66 75 6e 63 73 65 74 5d 5d 20 7b 0a  corefuncset]] {.
20fc0 20 20 66 6f 72 65 61 63 68 20 7b 73 79 6e 74 61    foreach {synta
20fd0 78 20 6b 65 79 77 6f 72 64 73 20 64 65 73 63 7d  x keywords desc}
20fe0 20 24 63 6f 72 65 66 75 6e 63 73 65 74 28 24 62   $corefuncset($b
20ff0 61 73 65 73 79 6e 74 61 78 29 20 62 72 65 61 6b  asesyntax) break
21000 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  .  regsub -all {
21010 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69  \s+} [string tri
21020 6d 20 24 73 79 6e 74 61 78 5d 20 7b 3c 62 72 20  m $syntax] {<br 
21030 2f 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67  />} syntax.  reg
21040 73 75 62 20 2d 61 6c 6c 20 7b 5c 28 28 5b 5e 2a  sub -all {\(([^*
21050 29 5d 2b 29 5c 29 7d 20 24 73 79 6e 74 61 78 20  )]+)\)} $syntax 
21060 7b 28 3c 69 3e 5c 31 3c 2f 69 3e 29 7d 20 73 79  {(<i>\1</i>)} sy
21070 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61  ntax.  regsub -a
21080 6c 6c 20 7b 2c 7d 20 24 73 79 6e 74 61 78 20 7b  ll {,} $syntax {
21090 3c 2f 69 3e 2c 3c 69 3e 7d 20 73 79 6e 74 61 78  </i>,<i>} syntax
210a0 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  .  regsub -all {
210b0 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d 20 24  <i>\.\.\.</i>} $
210c0 73 79 6e 74 61 78 20 7b 2e 2e 2e 7d 20 73 79 6e  syntax {...} syn
210d0 74 61 78 0a 20 20 72 65 67 65 78 70 20 7b 5e 5b  tax.  regexp {^[
210e0 61 2d 7a 5d 2b 7d 20 24 62 61 73 65 73 79 6e 74  a-z]+} $basesynt
210f0 61 78 20 66 72 61 67 6d 65 6e 74 0a 20 20 69 66  ax fragment.  if
21100 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77   {[llength $keyw
21110 6f 72 64 73 5d 3d 3d 30 7d 20 7b 0a 20 20 20 20  ords]==0} {.    
21120 72 65 67 65 78 70 20 7b 5b 61 2d 7a 5f 5d 2b 7d  regexp {[a-z_]+}
21130 20 24 73 79 6e 74 61 78 20 6e 61 6d 65 0a 20 20   $syntax name.  
21140 20 20 68 64 5f 66 72 61 67 6d 65 6e 74 20 24 6e    hd_fragment $n
21150 61 6d 65 20 2a 24 6e 61 6d 65 20 22 24 7b 6e 61  ame *$name "${na
21160 6d 65 7d 28 29 20 53 51 4c 20 66 75 6e 63 74 69  me}() SQL functi
21170 6f 6e 22 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20  on".  } else {. 
21180 20 20 20 73 65 74 20 66 72 61 67 6e 61 6d 65 20     set fragname 
21190 5b 6c 69 6e 64 65 78 20 24 6b 65 79 77 6f 72 64  [lindex $keyword
211a0 73 20 30 5d 0a 20 20 20 20 72 65 67 73 75 62 20  s 0].    regsub 
211b0 2d 61 6c 6c 20 7b 5b 5e 61 2d 7a 5d 7d 20 24 66  -all {[^a-z]} $f
211c0 72 61 67 6e 61 6d 65 20 7b 7d 20 66 72 61 67 6e  ragname {} fragn
211d0 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61 67 6d  ame.    hd_fragm
211e0 65 6e 74 20 24 66 72 61 67 6e 61 6d 65 0a 20 20  ent $fragname.  
211f0 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72    eval hd_keywor
21200 64 73 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b  ds [string map {
21210 5c 6e 20 7b 20 7d 7d 20 24 6b 65 79 77 6f 72 64  \n { }} $keyword
21220 73 5d 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74 73  s].  }.  hd_puts
21230 20 22 3c 64 74 3e 3c 70 3e 3c 62 3e 24 73 79 6e   "<dt><p><b>$syn
21240 74 61 78 3c 2f 62 3e 3c 2f 64 74 3e 22 0a 20 20  tax</b></dt>".  
21250 68 64 5f 72 65 73 6f 6c 76 65 20 22 3c 64 64 3e  hd_resolve "<dd>
21260 3c 70 3e 24 64 65 73 63 3c 2f 64 64 3e 5c 6e 22  <p>$desc</dd>\n"
21270 0a 7d 0a 68 64 5f 70 75 74 73 6e 6c 20 22 3c 2f  .}.hd_putsnl "</
21280 64 6c 3e 22 0a 0a 23 23 23 23 23 23 23 23 23 23  dl>"..##########
21290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
212a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
212b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
212c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
212d0 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 49 4e 53  ####.Section INS
212e0 45 52 54 20 69 6e 73 65 72 74 20 7b 49 4e 53 45  ERT insert {INSE
212f0 52 54 20 2a 49 4e 53 45 52 54 73 7d 0a 0a 52 65  RT *INSERTs}..Re
21300 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
21310 67 72 61 6d 20 69 6e 73 65 72 74 2d 73 74 6d 74  gram insert-stmt
21320 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  .</tcl>..<p>The 
21330 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
21340 20 63 6f 6d 65 73 20 69 6e 20 74 68 72 65 65 20   comes in three 
21350 62 61 73 69 63 20 66 6f 72 6d 73 2e 20 20 0a 3c  basic forms.  .<
21360 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20  ul>.<li><p>^The 
21370 66 69 72 73 74 20 66 6f 72 6d 20 28 77 69 74 68  first form (with
21380 20 74 68 65 20 22 56 41 4c 55 45 53 22 20 6b 65   the "VALUES" ke
21390 79 77 6f 72 64 29 20 63 72 65 61 74 65 73 20 6f  yword) creates o
213a0 6e 65 20 6f 72 20 6d 6f 72 65 0a 6e 65 77 20 72  ne or more.new r
213b0 6f 77 73 20 69 6e 0a 61 6e 20 65 78 69 73 74 69  ows in.an existi
213c0 6e 67 20 74 61 62 6c 65 2e 20 5e 49 66 20 74 68  ng table. ^If th
213d0 65 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e  e <yyterm>column
213e0 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 6c  -name</yyterm> l
213f0 69 73 74 20 61 66 74 65 72 0a 3c 79 79 74 65 72  ist after.<yyter
21400 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79  m>table-name</yy
21410 74 65 72 6d 3e 20 69 73 20 6f 6d 69 74 74 65 64  term> is omitted
21420 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72   then the number
21430 0a 6f 66 20 76 61 6c 75 65 73 20 69 6e 73 65 72  .of values inser
21440 74 65 64 20 69 6e 74 6f 20 65 61 63 68 20 72 6f  ted into each ro
21450 77 0a 6d 75 73 74 20 62 65 20 74 68 65 20 73 61  w.must be the sa
21460 6d 65 20 61 73 20 74 68 65 20 6e 75 6d 62 65 72  me as the number
21470 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
21480 68 65 20 74 61 62 6c 65 2e 20 5e 49 6e 20 74 68  he table. ^In th
21490 69 73 20 63 61 73 65 0a 74 68 65 20 72 65 73 75  is case.the resu
214a0 6c 74 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67  lt of evaluating
214b0 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 65   the left-most e
214c0 78 70 72 65 73 73 69 6f 6e 20 66 72 6f 6d 20 65  xpression from e
214d0 61 63 68 20 74 65 72 6d 20 6f 66 0a 74 68 65 20  ach term of.the 
214e0 56 41 4c 55 45 53 20 6c 69 73 74 20 69 73 20 69  VALUES list is i
214f0 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nserted into the
21500 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d   left-most colum
21510 6e 20 6f 66 20 65 61 63 68 20 6e 65 77 20 72 6f  n of each new ro
21520 77 2c 0a 61 6e 64 20 73 6f 20 66 6f 72 74 68 20  w,.and so forth 
21530 66 6f 72 20 65 61 63 68 20 73 75 62 73 65 71 75  for each subsequ
21540 65 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  ent expression. 
21550 5e 49 66 20 61 20 3c 79 79 74 65 72 6d 3e 63 6f  ^If a <yyterm>co
21560 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72  lumn-name</yyter
21570 6d 3e 0a 6c 69 73 74 20 69 73 20 73 70 65 63 69  m>.list is speci
21580 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 6e  fied, then the n
21590 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20  umber of values 
215a0 69 6e 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20  in each term of 
215b0 74 68 65 0a 56 41 4c 55 45 20 6c 69 73 74 20 6d  the.VALUE list m
215c0 75 73 74 20 6d 61 74 63 68 20 74 68 65 20 6e 75  ust match the nu
215d0 6d 62 65 72 20 6f 66 0a 73 70 65 63 69 66 69 65  mber of.specifie
215e0 64 20 63 6f 6c 75 6d 6e 73 2e 20 5e 45 61 63 68  d columns. ^Each
215f0 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 63 6f   of the named co
21600 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6e 65 77  lumns of the new
21610 20 72 6f 77 20 69 73 20 70 6f 70 75 6c 61 74 65   row is populate
21620 64 0a 77 69 74 68 20 74 68 65 20 72 65 73 75 6c  d.with the resul
21630 74 73 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67  ts of evaluating
21640 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
21650 6e 67 20 56 41 4c 55 45 53 20 65 78 70 72 65 73  ng VALUES expres
21660 73 69 6f 6e 2e 20 5e 54 61 62 6c 65 0a 63 6f 6c  sion. ^Table.col
21670 75 6d 6e 73 20 74 68 61 74 20 64 6f 20 6e 6f 74  umns that do not
21680 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 63   appear in the c
21690 6f 6c 75 6d 6e 20 6c 69 73 74 20 61 72 65 20 70  olumn list are p
216a0 6f 70 75 6c 61 74 65 64 20 77 69 74 68 20 74 68  opulated with th
216b0 65 20 0a 5b 64 65 66 61 75 6c 74 20 63 6f 6c 75  e .[default colu
216c0 6d 6e 20 76 61 6c 75 65 5d 20 28 73 70 65 63 69  mn value] (speci
216d0 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
216e0 74 68 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c  the [CREATE TABL
216f0 45 5d 20 73 74 61 74 65 6d 65 6e 74 29 2c 20 6f  E] statement), o
21700 72 0a 77 69 74 68 20 4e 55 4c 4c 20 69 66 20 6e  r.with NULL if n
21710 6f 20 5b 64 65 66 61 75 6c 74 20 76 61 6c 75 65  o [default value
21720 5d 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  ] is specified..
21730 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 73 65 63 6f  .<li><p>The seco
21740 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 49  nd form of the I
21750 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
21760 63 6f 6e 74 61 69 6e 73 20 61 20 5b 53 45 4c 45  contains a [SELE
21770 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 0a 69 6e  CT] statement.in
21780 73 74 65 61 64 20 6f 66 20 61 20 56 41 4c 55 45  stead of a VALUE
21790 53 20 63 6c 61 75 73 65 2e 20 5e 41 20 6e 65 77  S clause. ^A new
217a0 20 65 6e 74 72 79 20 69 73 20 69 6e 73 65 72 74   entry is insert
217b0 65 64 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c  ed into the tabl
217c0 65 20 66 6f 72 20 65 61 63 68 0a 72 6f 77 20 6f  e for each.row o
217d0 66 20 64 61 74 61 20 72 65 74 75 72 6e 65 64 20  f data returned 
217e0 62 79 20 65 78 65 63 75 74 69 6e 67 20 74 68 65  by executing the
217f0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
21800 74 2e 20 5e 49 66 20 61 20 63 6f 6c 75 6d 6e 2d  t. ^If a column-
21810 6c 69 73 74 20 69 73 0a 73 70 65 63 69 66 69 65  list is.specifie
21820 64 2c 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  d, the number of
21830 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
21840 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 53 45  result of the SE
21850 4c 45 43 54 20 6d 75 73 74 20 62 65 20 74 68 65  LECT must be the
21860 20 73 61 6d 65 0a 61 73 20 74 68 65 20 6e 75 6d   same.as the num
21870 62 65 72 20 6f 66 20 69 74 65 6d 73 20 69 6e 20  ber of items in 
21880 74 68 65 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 2e  the column-list.
21890 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20   ^Otherwise, if 
218a0 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69  no column-list i
218b0 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74 68 65  s.specified, the
218c0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
218d0 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ns in the result
218e0 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 6d   of the SELECT m
218f0 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 0a  ust be the same.
21900 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  as the number of
21910 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
21920 74 61 62 6c 65 2e 20 5e 41 6e 79 20 53 45 4c 45  table. ^Any SELE
21930 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 69 6e  CT statement, in
21940 63 6c 75 64 69 6e 67 0a 5b 63 6f 6d 70 6f 75 6e  cluding.[compoun
21950 64 20 53 45 4c 45 43 54 73 5d 20 61 6e 64 20 53  d SELECTs] and S
21960 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
21970 20 77 69 74 68 20 5b 4f 52 44 45 52 20 42 59 5d   with [ORDER BY]
21980 20 61 6e 64 2f 6f 72 20 5b 4c 49 4d 49 54 5d 20   and/or [LIMIT] 
21990 63 6c 61 75 73 65 73 2c 20 0a 6d 61 79 20 62 65  clauses, .may be
219a0 20 75 73 65 64 20 69 6e 20 61 6e 20 49 4e 53 45   used in an INSE
219b0 52 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 66 20  RT statement of 
219c0 74 68 69 73 20 66 6f 72 6d 2e 0a 0a 3c 6c 69 3e  this form...<li>
219d0 3c 70 3e 54 68 65 20 74 68 69 72 64 20 66 6f 72  <p>The third for
219e0 6d 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 73  m of an INSERT s
219f0 74 61 74 65 6d 65 6e 74 20 69 73 20 77 69 74 68  tatement is with
21a00 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 2e   DEFAULT VALUES.
21a10 0a 5e 28 54 68 65 20 49 4e 53 45 52 54 20 2e 2e  .^(The INSERT ..
21a20 2e 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53  . DEFAULT VALUES
21a30 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 73 65 72   statement inser
21a40 74 73 20 61 20 73 69 6e 67 6c 65 20 6e 65 77 20  ts a single new 
21a50 72 6f 77 20 69 6e 74 6f 20 74 68 65 0a 6e 61 6d  row into the.nam
21a60 65 64 20 74 61 62 6c 65 2e 29 5e 20 5e 45 61 63  ed table.)^ ^Eac
21a70 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  h column of the 
21a80 6e 65 77 20 72 6f 77 20 69 73 20 70 6f 70 75 6c  new row is popul
21a90 61 74 65 64 20 77 69 74 68 20 69 74 73 20 0a 5b  ated with its .[
21aa0 64 65 66 61 75 6c 74 20 76 61 6c 75 65 5d 2c 20  default value], 
21ab0 6f 72 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 69  or with a NULL i
21ac0 66 20 6e 6f 20 64 65 66 61 75 6c 74 20 76 61 6c  f no default val
21ad0 75 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20  ue is specified 
21ae0 0a 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20  .as part of the 
21af0 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f  column definitio
21b00 6e 20 69 6e 20 74 68 65 20 5b 43 52 45 41 54 45  n in the [CREATE
21b10 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e   TABLE] statemen
21b20 74 2e 0a 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54  t...</ul>..<p>^T
21b30 68 65 20 22 52 45 50 4c 41 43 45 22 20 61 6e 64  he "REPLACE" and
21b40 20 22 49 4e 53 45 52 54 20 4f 52 20 3c 69 3e 61   "INSERT OR <i>a
21b50 63 74 69 6f 6e 3c 2f 69 3e 22 20 66 6f 72 6d 73  ction</i>" forms
21b60 20 73 70 65 63 69 66 79 20 61 6e 20 61 6c 74 65   specify an alte
21b70 72 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72 61 69  rnative.constrai
21b80 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  nt conflict reso
21b90 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
21ba0 20 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20 74   to use during t
21bb0 68 69 73 20 6f 6e 65 20 49 4e 53 45 52 54 20 63  his one INSERT c
21bc0 6f 6d 6d 61 6e 64 2e 0a 53 65 65 20 74 68 65 20  ommand..See the 
21bd0 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 20 5b  section titled [
21be0 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72  ON CONFLICT] for
21bf0 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
21c00 72 6d 61 74 69 6f 6e 2e 0a 46 6f 72 20 63 6f 6d  rmation..For com
21c10 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20  patibility with 
21c20 4d 79 53 51 4c 2c 20 5e 74 68 65 20 70 61 72 73  MySQL, ^the pars
21c30 65 72 20 61 6c 6c 6f 77 73 20 74 68 65 20 75 73  er allows the us
21c40 65 20 6f 66 20 74 68 65 0a 73 69 6e 67 6c 65 20  e of the.single 
21c50 6b 65 79 77 6f 72 64 20 3c 61 20 68 72 65 66 3d  keyword <a href=
21c60 22 6c 61 6e 67 5f 72 65 70 6c 61 63 65 2e 68 74  "lang_replace.ht
21c70 6d 6c 22 3e 52 45 50 4c 41 43 45 3c 2f 61 3e 20  ml">REPLACE</a> 
21c80 61 73 20 61 6e 20 0a 61 6c 69 61 73 20 66 6f 72  as an .alias for
21c90 20 22 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c   "INSERT OR REPL
21ca0 41 43 45 22 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20  ACE"...<p>^(The 
21cb0 6f 70 74 69 6f 6e 61 6c 20 22 3c 69 3e 73 63 68  optional "<i>sch
21cc0 65 6d 61 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e  ema-name</i><b>.
21cd0 3c 2f 62 3e 22 20 70 72 65 66 69 78 20 6f 6e 20  </b>" prefix on 
21ce0 74 68 65 20 0a 3c 79 79 74 65 72 6d 3e 74 61 62  the .<yyterm>tab
21cf0 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  le-name</yyterm>
21d00 0a 69 73 20 73 75 70 70 6f 72 74 65 64 20 66 6f  .is supported fo
21d10 72 20 74 6f 70 2d 6c 65 76 65 6c 20 49 4e 53 45  r top-level INSE
21d20 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e  RT statements on
21d30 6c 79 2e 29 5e 20 20 5e 54 68 65 20 74 61 62 6c  ly.)^  ^The tabl
21d40 65 20 6e 61 6d 65 20 6d 75 73 74 20 62 65 0a 75  e name must be.u
21d50 6e 71 75 61 6c 69 66 69 65 64 20 66 6f 72 20 49  nqualified for I
21d60 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73  NSERT statements
21d70 20 74 68 61 74 20 6f 63 63 75 72 20 77 69 74 68   that occur with
21d80 69 6e 20 5b 43 52 45 41 54 45 20 54 52 49 47 47  in [CREATE TRIGG
21d90 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  ER] statements..
21da0 5e 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20  ^Similarly, the 
21db0 22 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 22  "DEFAULT VALUES"
21dc0 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 49 4e 53   form of the INS
21dd0 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ERT statement is
21de0 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72 0a 74   supported for.t
21df0 6f 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54 20  op-level INSERT 
21e00 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 20  statements only 
21e10 61 6e 64 20 6e 6f 74 20 66 6f 72 20 49 4e 53 45  and not for INSE
21e20 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  RT statements wi
21e30 74 68 69 6e 0a 74 72 69 67 67 65 72 73 2e 0a 3c  thin.triggers..<
21e40 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
21e50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21e60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21e70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21e80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21e90 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
21ea0 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c   {ON CONFLICT cl
21eb0 61 75 73 65 7d 20 63 6f 6e 66 6c 69 63 74 20 7b  ause} conflict {
21ec0 7b 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73 65  {conflict clause
21ed0 7d 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 7d 7d  } {ON CONFLICT}}
21ee0 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
21ef0 65 44 69 61 67 72 61 6d 20 63 6f 6e 66 6c 69 63  eDiagram conflic
21f00 74 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a  t-clause.</tcl>.
21f10 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c  .<p>The ON CONFL
21f20 49 43 54 20 63 6c 61 75 73 65 20 69 73 20 6e 6f  ICT clause is no
21f30 74 20 61 20 73 65 70 61 72 61 74 65 20 53 51 4c  t a separate SQL
21f40 20 63 6f 6d 6d 61 6e 64 2e 20 20 49 74 20 69 73   command.  It is
21f50 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20   a.non-standard 
21f60 63 6c 61 75 73 65 20 74 68 61 74 20 63 61 6e 20  clause that can 
21f70 61 70 70 65 61 72 20 69 6e 20 6d 61 6e 79 20 6f  appear in many o
21f80 74 68 65 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64  ther SQL command
21f90 73 2e 0a 49 74 20 69 73 20 67 69 76 65 6e 20 69  s..It is given i
21fa0 74 73 20 6f 77 6e 20 73 65 63 74 69 6f 6e 20 69  ts own section i
21fb0 6e 20 74 68 69 73 20 64 6f 63 75 6d 65 6e 74 20  n this document 
21fc0 62 65 63 61 75 73 65 20 69 74 20 69 73 20 6e 6f  because it is no
21fd0 74 0a 70 61 72 74 20 6f 66 20 73 74 61 6e 64 61  t.part of standa
21fe0 72 64 20 53 51 4c 20 61 6e 64 20 74 68 65 72 65  rd SQL and there
21ff0 66 6f 72 65 20 6d 69 67 68 74 20 6e 6f 74 20 62  fore might not b
22000 65 20 66 61 6d 69 6c 69 61 72 2e 3c 2f 70 3e 0a  e familiar.</p>.
22010 0a 3c 70 3e 5e 54 68 65 20 73 79 6e 74 61 78 20  .<p>^The syntax 
22020 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c  for the ON CONFL
22030 49 43 54 20 63 6c 61 75 73 65 20 69 73 20 61 73  ICT clause is as
22040 20 73 68 6f 77 6e 20 61 62 6f 76 65 20 66 6f 72   shown above for
22050 0a 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c  .the CREATE TABL
22060 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 46 6f 72  E command.  ^For
22070 20 74 68 65 20 49 4e 53 45 52 54 20 61 6e 64 0a   the INSERT and.
22080 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64 73 2c  UPDATE commands,
22090 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22 4f   the keywords "O
220a0 4e 20 43 4f 4e 46 4c 49 43 54 22 20 61 72 65 20  N CONFLICT" are 
220b0 72 65 70 6c 61 63 65 64 20 62 79 20 22 4f 52 22  replaced by "OR"
220c0 20 73 6f 20 74 68 61 74 0a 74 68 65 20 73 79 6e   so that.the syn
220d0 74 61 78 20 72 65 61 64 73 20 6d 6f 72 65 20 6e  tax reads more n
220e0 61 74 75 72 61 6c 6c 79 2e 20 20 46 6f 72 20 65  aturally.  For e
220f0 78 61 6d 70 6c 65 2c 20 69 6e 73 74 65 61 64 20  xample, instead 
22100 6f 66 0a 22 49 4e 53 45 52 54 20 4f 4e 20 43 4f  of."INSERT ON CO
22110 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45 22 20 77  NFLICT IGNORE" w
22120 65 20 68 61 76 65 20 22 49 4e 53 45 52 54 20 4f  e have "INSERT O
22130 52 20 49 47 4e 4f 52 45 22 2e 0a 54 68 65 20 6b  R IGNORE"..The k
22140 65 79 77 6f 72 64 73 20 63 68 61 6e 67 65 20 62  eywords change b
22150 75 74 20 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f  ut the meaning o
22160 66 20 74 68 65 20 63 6c 61 75 73 65 20 69 73 20  f the clause is 
22170 74 68 65 20 73 61 6d 65 0a 65 69 74 68 65 72 20  the same.either 
22180 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  way.</p>..<p>The
22190 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
221a0 75 73 65 20 61 70 70 6c 69 65 73 20 74 6f 20 5b  use applies to [
221b0 55 4e 49 51 55 45 5d 2c 20 5b 4e 4f 54 20 4e 55  UNIQUE], [NOT NU
221c0 4c 4c 5d 2c 0a 5b 43 48 45 43 4b 5d 2c 20 61 6e  LL],.[CHECK], an
221d0 64 20 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d 20  d [PRIMARY KEY] 
221e0 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 54 68 65  constraints..The
221f0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67   ON CONFLICT alg
22200 6f 72 69 74 68 6d 20 64 6f 65 73 20 6e 6f 74 0a  orithm does not.
22210 61 70 70 6c 79 20 74 6f 20 5b 46 4f 52 45 49 47  apply to [FOREIG
22220 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
22230 73 5d 2e 0a 54 68 65 72 65 20 61 72 65 20 66 69  s]..There are fi
22240 76 65 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  ve conflict reso
22250 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
22260 20 63 68 6f 69 63 65 73 3a 0a 52 4f 4c 4c 42 41   choices:.ROLLBA
22270 43 4b 2c 20 41 42 4f 52 54 2c 20 46 41 49 4c 2c  CK, ABORT, FAIL,
22280 20 49 47 4e 4f 52 45 2c 20 61 6e 64 20 52 45 50   IGNORE, and REP
22290 4c 41 43 45 2e 0a 5e 54 68 65 20 64 65 66 61 75  LACE..^The defau
222a0 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  lt conflict reso
222b0 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
222c0 20 69 73 20 41 42 4f 52 54 2e 20 20 54 68 69 73   is ABORT.  This
222d0 0a 69 73 20 77 68 61 74 20 74 68 65 79 20 6d 65  .is what they me
222e0 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c 64  an:</p>..<dl>.<d
222f0 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43 4b 3c 2f 62  t><b>ROLLBACK</b
22300 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e  ></dt>.<dd><p> ^
22310 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62  When an applicab
22320 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  le constraint vi
22330 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
22340 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 72 65 73  the ROLLBACK.res
22350 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
22360 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63 75 72  m aborts the cur
22370 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65  rent SQL stateme
22380 6e 74 20 77 69 74 68 0a 61 6e 20 53 51 4c 49 54  nt with.an SQLIT
22390 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72 72  E_CONSTRAINT err
223a0 6f 72 20 61 6e 64 20 72 6f 6c 6c 73 20 62 61 63  or and rolls bac
223b0 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  k the current tr
223c0 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 49 66 20 6e  ansaction..^If n
223d0 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
223e0 0a 61 63 74 69 76 65 20 28 6f 74 68 65 72 20 74  .active (other t
223f0 68 61 6e 20 74 68 65 20 69 6d 70 6c 69 65 64 20  han the implied 
22400 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 61 74  transaction that
22410 20 69 73 20 63 72 65 61 74 65 64 20 6f 6e 20 65   is created on e
22420 76 65 72 79 0a 63 6f 6d 6d 61 6e 64 29 20 74 68  very.command) th
22430 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  en the ROLLBACK 
22440 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
22450 69 74 68 6d 20 77 6f 72 6b 73 20 74 68 65 20 73  ithm works the s
22460 61 6d 65 20 61 73 20 74 68 65 0a 41 42 4f 52 54  ame as the.ABORT
22470 20 61 6c 67 6f 72 69 74 68 6d 2e 3c 2f 70 3e 3c   algorithm.</p><
22480 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 41 42 4f  /dd>..<dt><b>ABO
22490 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  RT</b></dt>.<dd>
224a0 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70  <p> ^When an app
224b0 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69  licable constrai
224c0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
224d0 75 72 73 2c 20 74 68 65 20 41 42 4f 52 54 0a 72  urs, the ABORT.r
224e0 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
224f0 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63  thm aborts the c
22500 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65  urrent SQL state
22510 6d 65 6e 74 0a 77 69 74 68 20 61 6e 20 53 51 4c  ment.with an SQL
22520 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65  ITE_CONSTRAINT e
22530 72 72 6f 72 20 61 6e 64 20 62 61 63 6b 73 20 6f  rror and backs o
22540 75 74 20 61 6e 79 20 63 68 61 6e 67 65 73 0a 6d  ut any changes.m
22550 61 64 65 20 62 79 20 74 68 65 20 63 75 72 72 65  ade by the curre
22560 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  nt SQL statement
22570 3b 20 62 75 74 20 63 68 61 6e 67 65 73 20 63 61  ; but changes ca
22580 75 73 65 64 0a 62 79 20 70 72 69 6f 72 20 53 51  used.by prior SQ
22590 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  L statements wit
225a0 68 69 6e 20 74 68 65 20 73 61 6d 65 20 74 72 61  hin the same tra
225b0 6e 73 61 63 74 69 6f 6e 20 61 72 65 20 70 72 65  nsaction are pre
225c0 73 65 72 76 65 64 20 61 6e 64 20 74 68 65 0a 74  served and the.t
225d0 72 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69  ransaction remai
225e0 6e 73 20 61 63 74 69 76 65 2e 0a 54 68 69 73 20  ns active..This 
225f0 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 62  is the default b
22600 65 68 61 76 69 6f 72 20 61 6e 64 20 74 68 65 20  ehavior and the 
22610 62 65 68 61 76 69 6f 72 20 73 70 65 63 69 66 69  behavior specifi
22620 65 64 20 62 79 20 74 68 65 20 53 51 4c 0a 73 74  ed by the SQL.st
22630 61 6e 64 61 72 64 2e 3c 2f 70 3e 3c 2f 64 64 3e  andard.</p></dd>
22640 0a 0a 3c 64 74 3e 3c 62 3e 46 41 49 4c 3c 2f 62  ..<dt><b>FAIL</b
22650 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e  ></dt>.<dd><p> ^
22660 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62  When an applicab
22670 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  le constraint vi
22680 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
22690 74 68 65 20 46 41 49 4c 0a 72 65 73 6f 6c 75 74  the FAIL.resolut
226a0 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61 62  ion algorithm ab
226b0 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74  orts the current
226c0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77   SQL statement w
226d0 69 74 68 20 61 6e 0a 53 51 4c 49 54 45 5f 43 4f  ith an.SQLITE_CO
226e0 4e 53 54 52 41 49 4e 54 20 65 72 72 6f 72 2e 20  NSTRAINT error. 
226f0 20 5e 42 75 74 20 74 68 65 20 46 41 49 4c 20 72   ^But the FAIL r
22700 65 73 6f 6c 75 74 69 6f 6e 20 64 6f 65 73 20 6e  esolution does n
22710 6f 74 0a 62 61 63 6b 20 6f 75 74 20 70 72 69 6f  ot.back out prio
22720 72 20 63 68 61 6e 67 65 73 20 6f 66 20 74 68 65  r changes of the
22730 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74   SQL statement t
22740 68 61 74 20 66 61 69 6c 65 64 20 6e 6f 72 20 64  hat failed nor d
22750 6f 65 73 0a 69 74 20 65 6e 64 20 74 68 65 20 74  oes.it end the t
22760 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 46 6f 72  ransaction..^For
22770 20 65 78 61 6d 70 6c 65 2c 20 69 66 20 61 6e 20   example, if an 
22780 55 50 44 41 54 45 0a 73 74 61 74 65 6d 65 6e 74  UPDATE.statement
22790 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 61 20 63   encountered a c
227a0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
227b0 69 6f 6e 20 6f 6e 20 74 68 65 20 31 30 30 74 68  ion on the 100th
227c0 20 72 6f 77 20 74 68 61 74 0a 69 74 20 61 74 74   row that.it att
227d0 65 6d 70 74 73 20 74 6f 20 75 70 64 61 74 65 2c  empts to update,
227e0 20 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20   then the first 
227f0 39 39 20 72 6f 77 20 63 68 61 6e 67 65 73 20 61  99 row changes a
22800 72 65 20 70 72 65 73 65 72 76 65 64 0a 62 75 74  re preserved.but
22810 20 63 68 61 6e 67 65 73 20 74 6f 20 72 6f 77 73   changes to rows
22820 20 31 30 30 20 61 6e 64 20 62 65 79 6f 6e 64 20   100 and beyond 
22830 6e 65 76 65 72 20 6f 63 63 75 72 2e 3c 2f 70 3e  never occur.</p>
22840 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 49 47  </dd>..<dt><b>IG
22850 4e 4f 52 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64  NORE</b></dt>.<d
22860 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61  d><p> ^When an a
22870 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72  pplicable constr
22880 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
22890 63 63 75 72 73 2c 20 0a 74 68 65 20 49 47 4e 4f  ccurs, .the IGNO
228a0 52 45 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  RE resolution al
228b0 67 6f 72 69 74 68 6d 20 73 6b 69 70 73 20 74 68  gorithm skips th
228c0 65 20 6f 6e 65 20 72 6f 77 20 74 68 61 74 20 63  e one row that c
228d0 6f 6e 74 61 69 6e 73 0a 74 68 65 20 63 6f 6e 73  ontains.the cons
228e0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
228f0 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20 70   and continues p
22900 72 6f 63 65 73 73 69 6e 67 20 73 75 62 73 65 71  rocessing subseq
22910 75 65 6e 74 20 72 6f 77 73 0a 6f 66 20 74 68 65  uent rows.of the
22920 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61   SQL statement a
22930 73 20 69 66 20 6e 6f 74 68 69 6e 67 20 77 65 6e  s if nothing wen
22940 74 20 77 72 6f 6e 67 2e 0a 4f 74 68 65 72 20 72  t wrong..Other r
22950 6f 77 73 20 62 65 66 6f 72 65 20 61 6e 64 20 61  ows before and a
22960 66 74 65 72 20 74 68 65 20 72 6f 77 20 74 68 61  fter the row tha
22970 74 0a 63 6f 6e 74 61 69 6e 65 64 20 74 68 65 20  t.contained the 
22980 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
22990 74 69 6f 6e 20 61 72 65 20 69 6e 73 65 72 74 65  tion are inserte
229a0 64 20 6f 72 20 75 70 64 61 74 65 64 0a 6e 6f 72  d or updated.nor
229b0 6d 61 6c 6c 79 2e 20 5e 4e 6f 20 65 72 72 6f 72  mally. ^No error
229c0 20 69 73 20 72 65 74 75 72 6e 65 64 20 77 68 65   is returned whe
229d0 6e 20 74 68 65 20 49 47 4e 4f 52 45 20 63 6f 6e  n the IGNORE con
229e0 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
229f0 0a 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73  .algorithm is us
22a00 65 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  ed.</p></dd>..<d
22a10 74 3e 3c 62 3e 52 45 50 4c 41 43 45 3c 2f 62 3e  t><b>REPLACE</b>
22a20 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57  </dt>.<dd><p> ^W
22a30 68 65 6e 20 61 20 5b 55 4e 49 51 55 45 5d 20 6f  hen a [UNIQUE] o
22a40 72 20 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d 20  r [PRIMARY KEY] 
22a50 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
22a60 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 0a 74 68  tion occurs, .th
22a70 65 20 52 45 50 4c 41 43 45 20 61 6c 67 6f 72 69  e REPLACE algori
22a80 74 68 6d 0a 64 65 6c 65 74 65 73 20 70 72 65 2d  thm.deletes pre-
22a90 65 78 69 73 74 69 6e 67 20 72 6f 77 73 20 74 68  existing rows th
22aa0 61 74 20 61 72 65 20 63 61 75 73 69 6e 67 20 74  at are causing t
22ab0 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  he constraint vi
22ac0 6f 6c 61 74 69 6f 6e 0a 70 72 69 6f 72 20 74 6f  olation.prior to
22ad0 20 69 6e 73 65 72 74 69 6e 67 20 6f 72 20 75 70   inserting or up
22ae0 64 61 74 69 6e 67 20 74 68 65 20 63 75 72 72 65  dating the curre
22af0 6e 74 20 72 6f 77 20 61 6e 64 20 74 68 65 20 63  nt row and the c
22b00 6f 6d 6d 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73  ommand continues
22b10 20 0a 65 78 65 63 75 74 69 6e 67 20 6e 6f 72 6d   .executing norm
22b20 61 6c 6c 79 2e 0a 5e 49 66 20 61 20 5b 4e 4f 54  ally..^If a [NOT
22b30 20 4e 55 4c 4c 5d 20 63 6f 6e 73 74 72 61 69 6e   NULL] constrain
22b40 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
22b50 72 73 2c 20 74 68 65 20 52 45 50 4c 41 43 45 20  rs, the REPLACE 
22b60 63 6f 6e 66 6c 69 63 74 0a 72 65 73 6f 6c 75 74  conflict.resolut
22b70 69 6f 6e 20 72 65 70 6c 61 63 65 73 20 74 68 65  ion replaces the
22b80 20 4e 55 4c 4c 20 76 61 6c 75 65 20 77 69 74 68   NULL value with
22b90 0a 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c  .the default val
22ba0 75 65 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75  ue for that colu
22bb0 6d 6e 2c 20 6f 72 20 69 66 20 74 68 65 20 63 6f  mn, or if the co
22bc0 6c 75 6d 6e 20 68 61 73 20 6e 6f 20 64 65 66 61  lumn has no defa
22bd0 75 6c 74 0a 76 61 6c 75 65 2c 20 74 68 65 6e 20  ult.value, then 
22be0 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72 69  the ABORT algori
22bf0 74 68 6d 20 69 73 20 75 73 65 64 2e 0a 5e 49 66  thm is used..^If
22c00 20 61 20 5b 43 48 45 43 4b 5d 20 63 6f 6e 73 74   a [CHECK] const
22c10 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
22c20 6f 63 63 75 72 73 2c 20 74 68 65 20 52 45 50 4c  occurs, the REPL
22c30 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ACE conflict res
22c40 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68  olution.algorith
22c50 6d 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 6c  m always works l
22c60 69 6b 65 20 41 42 4f 52 54 2e 3c 2f 70 3e 0a 0a  ike ABORT.</p>..
22c70 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 52 45 50  <p>^When the REP
22c80 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65  LACE conflict re
22c90 73 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74 65 67  solution strateg
22ca0 79 20 64 65 6c 65 74 65 73 20 72 6f 77 73 20 69  y deletes rows i
22cb0 6e 20 6f 72 64 65 72 20 74 6f 0a 73 61 74 69 73  n order to.satis
22cc0 66 79 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 2c  fy a constraint,
22cd0 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   [CREATE TRIGGER
22ce0 20 7c 20 64 65 6c 65 74 65 20 74 72 69 67 67 65   | delete trigge
22cf0 72 73 5d 20 66 69 72 65 20 69 66 20 61 6e 64 20  rs] fire if and 
22d00 6f 6e 6c 79 20 69 66 0a 5b 72 65 63 75 72 73 69  only if.[recursi
22d10 76 65 5f 74 72 69 67 67 65 72 73 20 70 72 61 67  ve_triggers prag
22d20 6d 61 20 7c 20 72 65 63 75 72 73 69 76 65 20 74  ma | recursive t
22d30 72 69 67 67 65 72 73 5d 20 61 72 65 20 65 6e 61  riggers] are ena
22d40 62 6c 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  bled.</p>..<p>^T
22d50 68 65 20 5b 73 71 6c 69 74 65 33 5f 75 70 64 61  he [sqlite3_upda
22d60 74 65 5f 68 6f 6f 6b 20 7c 20 75 70 64 61 74 65  te_hook | update
22d70 20 68 6f 6f 6b 5d 20 69 73 20 6e 6f 74 20 69 6e   hook] is not in
22d80 76 6f 6b 65 64 20 66 6f 72 20 72 6f 77 73 20 74  voked for rows t
22d90 68 61 74 0a 61 72 65 20 64 65 6c 65 74 65 64 20  hat.are deleted 
22da0 62 79 20 74 68 65 20 52 45 50 4c 41 43 45 20 63  by the REPLACE c
22db0 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
22dc0 6f 6e 20 73 74 72 61 74 65 67 79 2e 20 20 5e 4e  on strategy.  ^N
22dd0 6f 72 20 64 6f 65 73 0a 52 45 50 4c 41 43 45 20  or does.REPLACE 
22de0 69 6e 63 72 65 6d 65 6e 74 20 74 68 65 20 5b 73  increment the [s
22df0 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 20 7c  qlite3_changes |
22e00 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 5d   change counter]
22e10 2e 0a 54 68 65 20 65 78 63 65 70 74 69 6f 6e 61  ..The exceptiona
22e20 6c 20 62 65 68 61 76 69 6f 72 73 20 64 65 66 69  l behaviors defi
22e30 6e 65 64 20 69 6e 20 74 68 69 73 20 70 61 72 61  ned in this para
22e40 67 72 61 70 68 20 6d 69 67 68 74 20 63 68 61 6e  graph might chan
22e50 67 65 20 0a 69 6e 20 61 20 66 75 74 75 72 65 20  ge .in a future 
22e60 72 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a 3c 2f 64  release.</p>.</d
22e70 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 61 6c 67 6f  l>..<p>^The algo
22e80 72 69 74 68 6d 20 73 70 65 63 69 66 69 65 64 20  rithm specified 
22e90 69 6e 20 74 68 65 20 4f 52 20 63 6c 61 75 73 65  in the OR clause
22ea0 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 72   of an INSERT or
22eb0 20 55 50 44 41 54 45 0a 6f 76 65 72 72 69 64 65   UPDATE.override
22ec0 73 20 61 6e 79 20 61 6c 67 6f 72 69 74 68 6d 20  s any algorithm 
22ed0 73 70 65 63 69 66 69 65 64 20 69 6e 20 61 20 43  specified in a C
22ee0 52 45 41 54 45 20 54 41 42 4c 45 2e 0a 5e 49 66  REATE TABLE..^If
22ef0 20 6e 6f 20 61 6c 67 6f 72 69 74 68 6d 20 69 73   no algorithm is
22f00 20 73 70 65 63 69 66 69 65 64 20 61 6e 79 77 68   specified anywh
22f10 65 72 65 2c 20 74 68 65 20 41 42 4f 52 54 20 61  ere, the ABORT a
22f20 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64  lgorithm is used
22f30 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
22f40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22f50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22f60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22f70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22f80 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
22f90 69 6f 6e 20 52 45 49 4e 44 45 58 20 72 65 69 6e  ion REINDEX rein
22fa0 64 65 78 20 52 45 49 4e 44 45 58 0a 0a 52 65 63  dex REINDEX..Rec
22fb0 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
22fc0 72 61 6d 20 72 65 69 6e 64 65 78 2d 73 74 6d 74  ram reindex-stmt
22fd0 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
22fe0 20 52 45 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64   REINDEX command
22ff0 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 6c 65   is used to dele
23000 74 65 20 61 6e 64 20 72 65 63 72 65 61 74 65 20  te and recreate 
23010 69 6e 64 69 63 65 73 20 66 72 6f 6d 20 73 63 72  indices from scr
23020 61 74 63 68 2e 0a 54 68 69 73 20 69 73 20 75 73  atch..This is us
23030 65 66 75 6c 20 77 68 65 6e 20 74 68 65 20 64 65  eful when the de
23040 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 63 6f  finition of a co
23050 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
23060 20 68 61 73 20 63 68 61 6e 67 65 64 2e 0a 3c 2f   has changed..</
23070 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 52  p>..<p>^If the R
23080 45 49 4e 44 45 58 20 6b 65 79 77 6f 72 64 20 69  EINDEX keyword i
23090 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62  s not followed b
230a0 79 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65  y a collation-se
230b0 71 75 65 6e 63 65 20 6f 72 20 64 61 74 61 62 61  quence or databa
230c0 73 65 20 0a 6f 62 6a 65 63 74 20 69 64 65 6e 74  se .object ident
230d0 69 66 69 65 72 2c 20 74 68 65 6e 20 61 6c 6c 20  ifier, then all 
230e0 69 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c 20 61  indices in all a
230f0 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
23100 73 20 61 72 65 20 72 65 62 75 69 6c 74 2e 0a 0a  s are rebuilt...
23110 3c 70 3e 5e 49 66 20 74 68 65 20 52 45 49 4e 44  <p>^If the REIND
23120 45 58 20 6b 65 79 77 6f 72 64 20 69 73 20 66 6f  EX keyword is fo
23130 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6c 6c  llowed by a coll
23140 61 74 69 6f 6e 2d 73 65 71 75 65 6e 63 65 20 6e  ation-sequence n
23150 61 6d 65 2c 20 74 68 65 6e 0a 61 6c 6c 20 69 6e  ame, then.all in
23160 64 69 63 65 73 20 69 6e 20 61 6c 6c 20 61 74 74  dices in all att
23170 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20  ached databases 
23180 74 68 61 74 20 75 73 65 20 74 68 65 20 6e 61 6d  that use the nam
23190 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  ed collation seq
231a0 75 65 6e 63 65 73 0a 61 72 65 20 72 65 63 72 65  uences.are recre
231b0 61 74 65 64 2e 20 0a 0a 3c 70 3e 5e 4f 72 2c 20  ated. ..<p>^Or, 
231c0 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  if the argument 
231d0 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
231e0 52 45 49 4e 44 45 58 20 69 64 65 6e 74 69 66 69  REINDEX identifi
231f0 65 73 20 61 20 73 70 65 63 69 66 69 63 20 0a 64  es a specific .d
23200 61 74 61 62 61 73 65 20 74 61 62 6c 65 2c 20 74  atabase table, t
23210 68 65 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73 20  hen all indices 
23220 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
23230 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 61  database table a
23240 72 65 20 72 65 62 75 69 6c 74 2e 20 0a 5e 49 66  re rebuilt. .^If
23250 20 69 74 20 69 64 65 6e 74 69 66 69 65 73 20 61   it identifies a
23260 20 73 70 65 63 69 66 69 63 20 64 61 74 61 62 61   specific databa
23270 73 65 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 6a  se index, then j
23280 75 73 74 20 74 68 61 74 20 69 6e 64 65 78 20 69  ust that index i
23290 73 20 72 65 63 72 65 61 74 65 64 2e 0a 0a 3c 70  s recreated...<p
232a0 3e 5e 46 6f 72 20 61 20 63 6f 6d 6d 61 6e 64 20  >^For a command 
232b0 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 52 45 49  of the form "REI
232c0 4e 44 45 58 20 3c 69 3e 6e 61 6d 65 3c 2f 69 3e  NDEX <i>name</i>
232d0 22 2c 20 61 20 6d 61 74 63 68 0a 61 67 61 69 6e  ", a match.again
232e0 73 74 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 6c 61  st <yyterm>colla
232f0 74 69 6f 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72  tion-name</yyter
23300 6d 3e 20 74 61 6b 65 73 20 70 72 65 63 65 64 65  m> takes precede
23310 6e 63 65 20 6f 76 65 72 20 61 20 6d 61 74 63 68  nce over a match
23320 0a 61 67 61 69 6e 73 74 20 3c 79 79 74 65 72 6d  .against <yyterm
23330 3e 69 6e 64 65 78 2d 6e 61 6d 65 3c 2f 79 79 74  >index-name</yyt
23340 65 72 6d 3e 20 6f 72 20 3c 79 79 74 65 72 6d 3e  erm> or <yyterm>
23350 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65  table-name</yyte
23360 72 6d 3e 2e 0a 54 68 69 73 20 61 6d 62 69 67 75  rm>..This ambigu
23370 69 74 79 20 69 6e 20 74 68 65 20 73 79 6e 74 61  ity in the synta
23380 78 20 6d 61 79 20 62 65 20 61 76 6f 69 64 65 64  x may be avoided
23390 20 62 79 20 61 6c 77 61 79 73 20 73 70 65 63 69   by always speci
233a0 66 79 69 6e 67 20 61 0a 3c 79 79 74 65 72 6d 3e  fying a.<yyterm>
233b0 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74  schema-name</yyt
233c0 65 72 6d 3e 20 77 68 65 6e 20 72 65 69 6e 64 65  erm> when reinde
233d0 78 69 6e 67 20 61 20 73 70 65 63 69 66 69 63 20  xing a specific 
233e0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a  table or index..
233f0 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
23400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23410 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23430 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23440 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 52  ######.Section R
23450 45 50 4c 41 43 45 20 72 65 70 6c 61 63 65 20 52  EPLACE replace R
23460 45 50 4c 41 43 45 0a 0a 3c 2f 74 63 6c 3e 0a 0a  EPLACE..</tcl>..
23470 3c 70 3e 5e 54 68 65 20 52 45 50 4c 41 43 45 20  <p>^The REPLACE 
23480 63 6f 6d 6d 61 6e 64 20 69 73 20 61 6e 20 61 6c  command is an al
23490 69 61 73 20 66 6f 72 20 74 68 65 20 22 5b 4f 4e  ias for the "[ON
234a0 20 43 4f 4e 46 4c 49 43 54 20 7c 20 49 4e 53 45   CONFLICT | INSE
234b0 52 54 20 4f 52 20 52 45 50 4c 41 43 45 5d 22 0a  RT OR REPLACE]".
234c0 76 61 72 69 61 6e 74 20 6f 66 20 74 68 65 20 5b  variant of the [
234d0 49 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e 64 2e  INSERT] command.
234e0 20 20 0a 54 68 69 73 20 61 6c 69 61 73 20 69 73    .This alias is
234f0 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 63 6f   provided for co
23500 6d 70 61 74 69 62 69 6c 69 74 79 20 6f 74 68 65  mpatibility othe
23510 72 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65  r SQL database e
23520 6e 67 69 6e 65 73 2e 20 20 53 65 65 20 74 68 65  ngines.  See the
23530 20 0a 5b 49 4e 53 45 52 54 5d 20 63 6f 6d 6d 61   .[INSERT] comma
23540 6e 64 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  nd documentation
23550 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
23560 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e  information.</p>
23570 20 20 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23    ..<tcl>.######
23580 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23590 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
235a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
235b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
235c0 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
235d0 6e 20 7b 57 49 54 48 20 63 6c 61 75 73 65 7d 20  n {WITH clause} 
235e0 77 69 74 68 20 7b 7b 63 6f 6d 6d 6f 6e 20 74 61  with {{common ta
235f0 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 7d  ble expressions}
23600 20 57 49 54 48 7d 0a 0a 52 65 63 75 72 73 69 76   WITH}..Recursiv
23610 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 77  eBubbleDiagram w
23620 69 74 68 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c  ith-clause.</tcl
23630 3e 0a 0a 3c 70 3e 43 6f 6d 6d 6f 6e 20 54 61 62  >..<p>Common Tab
23640 6c 65 20 45 78 70 72 65 73 73 69 6f 6e 73 20 6f  le Expressions o
23650 72 20 43 54 45 73 20 61 63 74 20 6c 69 6b 65 20  r CTEs act like 
23660 74 65 6d 70 6f 72 61 72 79 20 5b 76 69 65 77 73  temporary [views
23670 5d 20 74 68 61 74 20 65 78 69 73 74 0a 6f 6e 6c  ] that exist.onl
23680 79 20 66 6f 72 20 74 68 65 20 64 75 72 61 74 69  y for the durati
23690 6f 6e 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 53  on of a single S
236a0 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  QL statement.  T
236b0 68 65 72 65 20 61 72 65 20 74 77 6f 20 6b 69 6e  here are two kin
236c0 64 73 20 6f 66 0a 63 6f 6d 6d 6f 6e 20 74 61 62  ds of.common tab
236d0 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 3a 20  le expressions: 
236e0 22 6f 72 64 69 6e 61 72 79 22 20 61 6e 64 20 22  "ordinary" and "
236f0 72 65 63 75 72 73 69 76 65 22 2e 20 4f 72 64 69  recursive". Ordi
23700 6e 61 72 79 20 0a 63 6f 6d 6d 6f 6e 20 74 61 62  nary .common tab
23710 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61  le expressions a
23720 72 65 20 68 65 6c 70 66 75 6c 20 66 6f 72 20 6d  re helpful for m
23730 61 6b 69 6e 67 0a 71 75 65 72 69 65 73 20 65 61  aking.queries ea
23740 73 69 65 72 20 74 6f 20 75 6e 64 65 72 73 74 61  sier to understa
23750 6e 64 20 62 79 20 66 61 63 74 6f 72 69 6e 67 0a  nd by factoring.
23760 73 75 62 71 75 65 72 69 65 73 20 6f 75 74 20 6f  subqueries out o
23770 66 20 74 68 65 20 6d 61 69 6e 20 53 51 4c 20 73  f the main SQL s
23780 74 61 74 65 6d 65 6e 74 2e 0a 52 65 63 75 72 73  tatement..Recurs
23790 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ive common table
237a0 20 65 78 70 72 65 73 73 69 6f 6e 73 0a 70 72 6f   expressions.pro
237b0 76 69 64 65 20 74 68 65 20 61 62 69 6c 69 74 79  vide the ability
237c0 20 74 6f 20 64 6f 20 68 69 65 72 61 72 63 68 69   to do hierarchi
237d0 63 61 6c 20 6f 72 0a 72 65 63 75 72 73 69 76 65  cal or.recursive
237e0 20 71 75 65 72 69 65 73 20 6f 66 20 74 72 65 65   queries of tree
237f0 73 20 61 6e 64 20 67 72 61 70 68 73 2c 20 61 20  s and graphs, a 
23800 63 61 70 61 62 69 6c 69 74 79 0a 74 68 61 74 20  capability.that 
23810 69 73 20 6e 6f 74 20 6f 74 68 65 72 77 69 73 65  is not otherwise
23820 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68   available in th
23830 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e 0a  e SQL language..
23840 0a 3c 70 3e 41 6c 6c 20 63 6f 6d 6d 6f 6e 20 74  .<p>All common t
23850 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
23860 20 28 6f 72 64 69 6e 61 72 79 20 61 6e 64 20 72   (ordinary and r
23870 65 63 75 72 73 69 76 65 29 20 61 72 65 20 0a 63  ecursive) are .c
23880 72 65 61 74 65 64 20 62 79 20 70 72 65 70 65 6e  reated by prepen
23890 64 69 6e 67 20 61 20 57 49 54 48 20 63 6c 61 75  ding a WITH clau
238a0 73 65 20 69 6e 20 66 72 6f 6e 74 20 6f 66 20 61  se in front of a
238b0 20 5b 53 45 4c 45 43 54 5d 2c 20 5b 49 4e 53 45   [SELECT], [INSE
238c0 52 54 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 0a 6f  RT], [DELETE],.o
238d0 72 20 5b 55 50 44 41 54 45 5d 20 73 74 61 74 65  r [UPDATE] state
238e0 6d 65 6e 74 2e 20 20 41 20 73 69 6e 67 6c 65 20  ment.  A single 
238f0 57 49 54 48 20 63 6c 61 75 73 65 20 63 61 6e 20  WITH clause can 
23900 73 70 65 63 69 66 79 20 6f 6e 65 20 6f 72 20 6d  specify one or m
23910 6f 72 65 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ore.common table
23920 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 73 6f   expressions, so
23930 6d 65 20 6f 66 20 77 68 69 63 68 20 61 72 65 20  me of which are 
23940 6f 72 64 69 6e 61 72 79 20 61 6e 64 20 73 6f 6d  ordinary and som
23950 65 20 6f 66 20 77 68 69 63 68 0a 61 72 65 20 72  e of which.are r
23960 65 63 75 72 73 69 76 65 2e 0a 0a 3c 74 63 6c 3e  ecursive...<tcl>
23970 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f 72 64 69  hd_fragment ordi
23980 6e 61 72 79 63 74 65 20 7b 6f 72 64 69 6e 61 72  narycte {ordinar
23990 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  y common table e
239a0 78 70 72 65 73 73 69 6f 6e 73 7d 3c 2f 74 63 6c  xpressions}</tcl
239b0 3e 0a 3c 68 33 3e 4f 72 64 69 6e 61 72 79 20 43  >.<h3>Ordinary C
239c0 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20 45 78 70 72  ommon Table Expr
239d0 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70  essions</h3>..<p
239e0 3e 41 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f 6d  >An ordinary com
239f0 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
23a00 73 69 6f 6e 20 77 6f 72 6b 73 20 61 73 20 69 66  sion works as if
23a10 20 69 74 20 77 65 72 65 20 61 20 5b 76 69 65 77   it were a [view
23a20 5d 20 74 68 61 74 0a 65 78 69 73 74 73 20 66 6f  ] that.exists fo
23a30 72 20 74 68 65 20 64 75 72 61 74 69 6f 6e 20 6f  r the duration o
23a40 66 20 61 20 73 69 6e 67 6c 65 20 73 74 61 74 65  f a single state
23a50 6d 65 6e 74 2e 20 20 4f 72 64 69 6e 61 72 79 20  ment.  Ordinary 
23a60 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 0a 65 78 70  common table.exp
23a70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 75 73 65  ressions are use
23a80 66 75 6c 20 66 6f 72 20 66 61 63 74 6f 72 69 6e  ful for factorin
23a90 67 20 6f 75 74 20 73 75 62 71 75 65 72 69 65 73  g out subqueries
23aa0 20 61 6e 64 20 6d 61 6b 69 6e 67 20 74 68 65 20   and making the 
23ab0 6f 76 65 72 61 6c 6c 0a 53 51 4c 20 73 74 61 74  overall.SQL stat
23ac0 65 6d 65 6e 74 20 65 61 73 69 65 72 20 74 6f 20  ement easier to 
23ad0 72 65 61 64 20 61 6e 64 20 75 6e 64 65 72 73 74  read and underst
23ae0 61 6e 64 2e 0a 0a 3c 70 3e 41 20 57 49 54 48 20  and...<p>A WITH 
23af0 63 6c 61 75 73 65 20 63 61 6e 20 63 6f 6e 74 61  clause can conta
23b00 69 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d  in ordinary comm
23b10 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
23b20 69 6f 6e 73 20 65 76 65 6e 20 69 66 0a 69 74 20  ions even if.it 
23b30 69 6e 63 6c 75 64 65 73 20 74 68 65 20 52 45 43  includes the REC
23b40 55 52 53 49 56 45 20 6b 65 79 77 6f 72 64 2e 20  URSIVE keyword. 
23b50 20 54 68 65 20 75 73 65 20 6f 66 20 52 45 43 55   The use of RECU
23b60 52 53 49 56 45 20 64 6f 65 73 20 6e 6f 74 20 66  RSIVE does not f
23b70 6f 72 63 65 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c  orce.common tabl
23b80 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f  e expressions to
23b90 20 62 65 20 72 65 63 75 72 73 69 76 65 2e 0a 0a   be recursive...
23ba0 3c 74 63 6c 3e 0a 68 64 5f 66 72 61 67 6d 65 6e  <tcl>.hd_fragmen
23bb0 74 20 72 65 63 75 72 73 69 76 65 63 74 65 20 7b  t recursivecte {
23bc0 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e  recursive common
23bd0 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
23be0 6e 73 7d 20 5c 0a 7b 72 65 63 75 72 73 69 76 65  ns} \.{recursive
23bf0 20 71 75 65 72 79 7d 0a 3c 2f 74 63 6c 3e 0a 3c   query}.</tcl>.<
23c00 68 33 3e 52 65 63 75 72 73 69 76 65 20 43 6f 6d  h3>Recursive Com
23c10 6d 6f 6e 20 54 61 62 6c 65 20 45 78 70 72 65 73  mon Table Expres
23c20 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 41  sions</h3>..<p>A
23c30 20 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f   recursive commo
23c40 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
23c50 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  on can be used t
23c60 6f 20 77 72 69 74 65 20 61 20 71 75 65 72 79 20  o write a query 
23c70 74 68 61 74 0a 77 61 6c 6b 73 20 61 20 74 72 65  that.walks a tre
23c80 65 20 6f 72 20 67 72 61 70 68 2e 20 20 41 20 72  e or graph.  A r
23c90 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20  ecursive common 
23ca0 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
23cb0 20 68 61 73 20 74 68 65 20 73 61 6d 65 0a 62 61   has the same.ba
23cc0 73 69 63 20 73 79 6e 74 61 78 20 61 73 20 61 6e  sic syntax as an
23cd0 20 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e   ordinary common
23ce0 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
23cf0 6e 2c 20 62 75 74 20 77 69 74 68 20 74 68 65 20  n, but with the 
23d00 66 6f 6c 6c 6f 77 69 6e 67 0a 61 64 64 69 74 69  following.additi
23d10 6f 6e 61 6c 20 66 65 61 74 75 72 65 73 3a 0a 0a  onal features:..
23d20 3c 6f 6c 3e 0a 3c 6c 69 3e 20 54 68 65 20 22 5b  <ol>.<li> The "[
23d30 73 65 6c 65 63 74 2d 73 74 6d 74 5d 22 0a 20 20  select-stmt]".  
23d40 20 20 20 6d 75 73 74 20 62 65 20 61 20 5b 63 6f     must be a [co
23d50 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 5d 20 77  mpound select] w
23d60 68 65 72 65 20 74 68 65 20 72 69 67 68 74 2d 6d  here the right-m
23d70 6f 73 74 20 5b 63 6f 6d 70 6f 75 6e 64 2d 6f 70  ost [compound-op
23d80 65 72 61 74 6f 72 5d 20 69 73 0a 20 20 20 20 20  erator] is.     
23d90 65 69 74 68 65 72 20 55 4e 49 4f 4e 20 6f 72 20  either UNION or 
23da0 55 4e 49 4f 4e 20 41 4c 4c 2e 0a 3c 6c 69 3e 20  UNION ALL..<li> 
23db0 54 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  The table named 
23dc0 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64  on the left-hand
23dd0 20 73 69 64 65 20 6f 66 20 74 68 65 20 41 53 20   side of the AS 
23de0 6b 65 79 77 6f 72 64 20 6d 75 73 74 20 61 70 70  keyword must app
23df0 65 61 72 0a 20 20 20 20 20 65 78 61 63 74 6c 79  ear.     exactly
23e00 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 46 52 4f   once in the FRO
23e10 4d 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  M clause of the 
23e20 72 69 67 68 74 2d 6d 6f 73 74 20 53 45 4c 45 43  right-most SELEC
23e30 54 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 20 20  T statement.    
23e40 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64   of the compound
23e50 20 73 65 6c 65 63 74 2c 20 61 6e 64 20 6e 6f 77   select, and now
23e60 68 65 72 65 20 65 6c 73 65 2e 0a 3c 2f 6f 6c 3e  here else..</ol>
23e70 0a 0a 3c 70 3e 54 6f 20 70 75 74 20 69 74 20 61  ..<p>To put it a
23e80 6e 6f 74 68 65 72 20 77 61 79 2c 20 61 20 72 65  nother way, a re
23e90 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74  cursive common t
23ea0 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 20  able expression 
23eb0 6d 75 73 74 0a 6c 6f 6f 6b 20 6c 69 6b 65 20 74  must.look like t
23ec0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 0a 3c  he following:..<
23ed0 74 63 6c 3e 52 65 63 75 72 73 69 76 65 42 75 62  tcl>RecursiveBub
23ee0 62 6c 65 44 69 61 67 72 61 6d 20 72 65 63 75 72  bleDiagram recur
23ef0 73 69 76 65 2d 63 74 65 3c 2f 74 63 6c 3e 0a 0a  sive-cte</tcl>..
23f00 3c 70 3e 43 61 6c 6c 20 74 68 65 20 74 61 62 6c  <p>Call the tabl
23f10 65 20 6e 61 6d 65 64 20 62 79 20 74 68 65 20 5b  e named by the [
23f20 63 74 65 2d 74 61 62 6c 65 2d 6e 61 6d 65 5d 20  cte-table-name] 
23f30 69 6e 20 61 20 72 65 63 75 72 73 69 76 65 0a 63  in a recursive.c
23f40 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
23f50 65 73 73 69 6f 6e 20 74 68 65 20 22 72 65 63 75  ession the "recu
23f60 72 73 69 76 65 20 74 61 62 6c 65 22 2e 0a 49 6e  rsive table"..In
23f70 20 74 68 65 20 5b 72 65 63 75 72 73 69 76 65 2d   the [recursive-
23f80 63 74 65 5d 20 62 75 62 62 6c 65 20 64 69 61 67  cte] bubble diag
23f90 72 61 6d 20 61 62 6f 76 65 2c 20 74 68 65 20 72  ram above, the r
23fa0 65 63 75 72 73 69 76 65 0a 74 61 62 6c 65 20 6d  ecursive.table m
23fb0 75 73 74 20 61 70 70 65 61 72 20 65 78 61 63 74  ust appear exact
23fc0 6c 79 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 46  ly once in the F
23fd0 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ROM clause of th
23fe0 65 20 0a 3c 79 79 74 65 72 6d 3e 72 65 63 75 72  e .<yyterm>recur
23ff0 73 69 76 65 2d 73 65 6c 65 63 74 3c 2f 79 79 74  sive-select</yyt
24000 65 72 6d 3e 0a 61 6e 64 20 6d 75 73 74 20 6e 6f  erm>.and must no
24010 74 20 61 70 70 65 61 72 20 61 6e 79 77 68 65 72  t appear anywher
24020 65 20 65 6c 73 65 20 69 6e 20 65 69 74 68 65 72  e else in either
24030 20 74 68 65 0a 3c 79 79 74 65 72 6d 3e 69 6e 69   the.<yyterm>ini
24040 74 69 61 6c 2d 73 65 6c 65 63 74 3c 2f 79 79 74  tial-select</yyt
24050 65 72 6d 3e 20 6f 72 20 74 68 65 0a 3c 79 79 74  erm> or the.<yyt
24060 65 72 6d 3e 72 65 63 75 72 73 69 76 65 2d 73 65  erm>recursive-se
24070 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 2c 20 69  lect</yyterm>, i
24080 6e 63 6c 75 64 69 6e 67 20 73 75 62 71 75 65 72  ncluding subquer
24090 69 65 73 2e 0a 54 68 65 20 3c 79 79 74 65 72 6d  ies..The <yyterm
240a0 3e 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 3c  >initial-select<
240b0 2f 79 79 74 65 72 6d 3e 20 6d 61 79 20 62 65 0a  /yyterm> may be.
240c0 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65  a [compound sele
240d0 63 74 5d 2c 20 62 75 74 20 69 74 20 6d 61 79 20  ct], but it may 
240e0 6e 6f 74 20 69 6e 63 6c 75 64 65 20 61 6e 20 4f  not include an O
240f0 52 44 45 52 20 42 59 2c 20 4c 49 4d 49 54 2c 20  RDER BY, LIMIT, 
24100 6f 72 20 4f 46 46 53 45 54 2e 0a 54 68 65 20 72  or OFFSET..The r
24110 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20  ecursive-select 
24120 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65  must be a simple
24130 20 73 65 6c 65 63 74 2c 20 6e 6f 74 20 61 20 63   select, not a c
24140 6f 6d 70 6f 75 6e 64 2e 20 20 54 68 65 0a 72 65  ompound.  The.re
24150 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20 69  cursive-select i
24160 73 20 61 6c 6c 6f 77 65 64 20 74 6f 20 69 6e 63  s allowed to inc
24170 6c 75 64 65 20 61 6e 20 4f 52 44 45 52 20 42 59  lude an ORDER BY
24180 2c 20 4c 49 4d 49 54 2c 20 61 6e 64 2f 6f 72 20  , LIMIT, and/or 
24190 4f 46 46 53 45 54 2e 0a 0a 3c 70 3e 54 68 65 20  OFFSET...<p>The 
241a0 62 61 73 69 63 20 61 6c 67 6f 72 69 74 68 6d 20  basic algorithm 
241b0 66 6f 72 20 63 6f 6d 70 75 74 69 6e 67 20 74 68  for computing th
241c0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65  e content of the
241d0 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65   recursive table
241e0 0a 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  .is as follows:.
241f0 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 52 75 6e 20 74  .<ol>.<li> Run t
24200 68 65 20 3c 79 79 74 65 72 6d 3e 69 6e 69 74 69  he <yyterm>initi
24210 61 6c 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72  al-select</yyter
24220 6d 3e 20 61 6e 64 20 61 64 64 20 74 68 65 20 72  m> and add the r
24230 65 73 75 6c 74 73 20 74 6f 20 61 20 71 75 65 75  esults to a queu
24240 65 2e 0a 3c 6c 69 3e 20 57 68 69 6c 65 20 74 68  e..<li> While th
24250 65 20 71 75 65 75 65 20 69 73 20 6e 6f 74 20 65  e queue is not e
24260 6d 70 74 79 3a 0a 3c 6f 6c 20 74 79 70 65 3d 22  mpty:.<ol type="
24270 61 22 3e 0a 3c 6c 69 3e 20 45 78 74 72 61 63 74  a">.<li> Extract
24280 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 66 72   a single row fr
24290 6f 6d 20 74 68 65 20 71 75 65 75 65 2e 0a 3c 6c  om the queue..<l
242a0 69 3e 20 49 6e 73 65 72 74 20 74 68 61 74 20 73  i> Insert that s
242b0 69 6e 67 6c 65 20 72 6f 77 20 69 6e 74 6f 20 74  ingle row into t
242c0 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62  he recursive tab
242d0 6c 65 0a 3c 6c 69 3e 20 50 72 65 74 65 6e 64 20  le.<li> Pretend 
242e0 74 68 61 74 20 74 68 65 20 73 69 6e 67 6c 65 20  that the single 
242f0 72 6f 77 20 6a 75 73 74 20 65 78 74 72 61 63 74  row just extract
24300 65 64 20 69 73 20 74 68 65 20 6f 6e 6c 79 0a 20  ed is the only. 
24310 20 20 20 20 72 6f 77 20 69 6e 20 74 68 65 20 72      row in the r
24320 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 20 61  ecursive table a
24330 6e 64 20 72 75 6e 20 74 68 65 20 72 65 63 75 72  nd run the recur
24340 73 69 76 65 2d 73 65 6c 65 63 74 2c 0a 20 20 20  sive-select,.   
24350 20 20 61 64 64 69 6e 67 20 61 6c 6c 20 72 65 73    adding all res
24360 75 6c 74 73 20 74 6f 20 74 68 65 20 71 75 65 75  ults to the queu
24370 65 2e 0a 3c 2f 6f 6c 3e 0a 3c 2f 6f 6c 3e 0a 0a  e..</ol>.</ol>..
24380 3c 70 3e 54 68 65 20 62 61 73 69 63 20 70 72 6f  <p>The basic pro
24390 63 65 64 75 72 65 20 61 62 6f 76 65 20 6d 61 79  cedure above may
243a0 20 6d 6f 64 69 66 69 65 64 20 62 79 20 74 68 65   modified by the
243b0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 64 64 69 74   following addit
243c0 69 6f 6e 61 6c 20 72 75 6c 65 73 3a 0a 0a 3c 75  ional rules:..<u
243d0 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 49 66 20  l>.<li><p>.  If 
243e0 61 20 55 4e 49 4f 4e 20 6f 70 65 72 61 74 6f 72  a UNION operator
243f0 20 63 6f 6e 6e 65 63 74 73 20 74 68 65 20 3c 79   connects the <y
24400 79 74 65 72 6d 3e 69 6e 69 74 69 61 6c 2d 73 65  yterm>initial-se
24410 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20 77 69  lect</yyterm> wi
24420 74 68 20 74 68 65 0a 20 20 3c 79 79 74 65 72 6d  th the.  <yyterm
24430 3e 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63  >recursive-selec
24440 74 3c 2f 79 79 74 65 72 6d 3e 2c 20 74 68 65 6e  t</yyterm>, then
24450 20 6f 6e 6c 79 20 61 64 64 20 72 6f 77 73 20 74   only add rows t
24460 6f 20 74 68 65 20 71 75 65 75 65 20 69 66 20 0a  o the queue if .
24470 20 20 6e 6f 20 69 64 65 6e 74 69 63 61 6c 20 72    no identical r
24480 6f 77 20 68 61 73 0a 20 20 62 65 65 6e 20 70 72  ow has.  been pr
24490 65 76 69 6f 75 73 6c 79 20 61 64 64 65 64 20 74  eviously added t
244a0 6f 20 74 68 65 20 71 75 65 75 65 2e 20 20 52 65  o the queue.  Re
244b0 70 65 61 74 65 64 20 72 6f 77 73 20 61 72 65 20  peated rows are 
244c0 64 69 73 63 61 72 64 65 64 20 62 65 66 6f 72 65  discarded before
244d0 20 62 65 69 6e 67 0a 20 20 61 64 64 65 64 20 74   being.  added t
244e0 6f 20 74 68 65 20 71 75 65 75 65 20 65 76 65 6e  o the queue even
244f0 20 69 66 20 74 68 65 20 72 65 70 65 61 74 65 64   if the repeated
24500 20 72 6f 77 73 20 68 61 76 65 20 61 6c 72 65 61   rows have alrea
24510 64 79 20 62 65 65 6e 20 65 78 74 72 61 63 74 65  dy been extracte
24520 64 0a 20 20 66 72 6f 6d 20 74 68 65 20 71 75 65  d.  from the que
24530 75 65 20 62 79 20 74 68 65 20 72 65 63 75 72 73  ue by the recurs
24540 69 6f 6e 20 73 74 65 70 2e 20 20 49 66 20 74 68  ion step.  If th
24550 65 20 6f 70 65 72 61 74 6f 72 20 69 73 20 55 4e  e operator is UN
24560 49 4f 4e 20 41 4c 4c 2c 0a 20 20 74 68 65 6e 20  ION ALL,.  then 
24570 61 6c 6c 20 72 6f 77 73 20 67 65 6e 65 72 61 74  all rows generat
24580 65 64 20 62 79 20 62 6f 74 68 20 74 68 65 20 3c  ed by both the <
24590 79 79 74 65 72 6d 3e 69 6e 69 74 69 61 6c 2d 73  yyterm>initial-s
245a0 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20 61  elect</yyterm> a
245b0 6e 64 20 74 68 65 0a 20 20 3c 79 79 74 65 72 6d  nd the.  <yyterm
245c0 3e 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63  >recursive-selec
245d0 74 3c 2f 79 79 74 65 72 6d 3e 20 61 72 65 20 61  t</yyterm> are a
245e0 6c 77 61 79 73 20 61 64 64 65 64 20 74 6f 20 74  lways added to t
245f0 68 65 20 71 75 65 75 65 20 65 76 65 6e 20 69 66  he queue even if
24600 0a 20 20 74 68 65 79 20 61 72 65 20 72 65 70 65  .  they are repe
24610 61 74 73 2e 0a 20 20 57 68 65 6e 20 64 65 74 65  ats..  When dete
24620 72 6d 69 6e 69 6e 67 20 69 66 20 61 20 72 6f 77  rmining if a row
24630 20 69 73 20 72 65 70 65 61 74 65 64 2c 20 4e 55   is repeated, NU
24640 4c 4c 20 76 61 6c 75 65 73 20 63 6f 6d 70 61 72  LL values compar
24650 65 0a 20 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65  e.  equal to one
24660 20 61 6e 6f 74 68 65 72 20 61 6e 64 20 6e 6f 74   another and not
24670 20 65 71 75 61 6c 20 74 6f 20 61 6e 79 20 6f 74   equal to any ot
24680 68 65 72 20 76 61 6c 75 65 2e 0a 3c 6c 69 3e 3c  her value..<li><
24690 70 3e 0a 20 20 54 68 65 20 4c 49 4d 49 54 20 63  p>.  The LIMIT c
246a0 6c 61 75 73 65 2c 20 69 66 20 70 72 65 73 65 6e  lause, if presen
246b0 74 2c 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68  t, determines th
246c0 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
246d0 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0a 20 20   of rows that.  
246e0 77 69 6c 6c 20 65 76 65 72 20 62 65 20 61 64 64  will ever be add
246f0 65 64 20 74 6f 20 74 68 65 20 72 65 63 75 72 73  ed to the recurs
24700 69 76 65 20 74 61 62 6c 65 20 69 6e 20 73 74 65  ive table in ste
24710 70 20 32 62 2e 0a 20 20 4f 6e 63 65 20 74 68 65  p 2b..  Once the
24720 20 6c 69 6d 69 74 20 69 73 20 72 65 61 63 68 65   limit is reache
24730 64 2c 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e  d, the recursion
24740 20 73 74 6f 70 73 2e 0a 20 20 41 20 6c 69 6d 69   stops..  A limi
24750 74 20 6f 66 20 7a 65 72 6f 20 6d 65 61 6e 73 20  t of zero means 
24760 74 68 61 74 20 6e 6f 20 72 6f 77 73 20 61 72 65  that no rows are
24770 20 65 76 65 72 20 61 64 64 65 64 20 74 6f 20 74   ever added to t
24780 68 65 0a 20 20 72 65 63 75 72 73 69 76 65 20 74  he.  recursive t
24790 61 62 6c 65 2c 20 61 6e 64 20 61 20 6e 65 67 61  able, and a nega
247a0 74 69 76 65 20 6c 69 6d 69 74 20 6d 65 61 6e 73  tive limit means
247b0 20 61 6e 20 75 6e 6c 69 6d 69 74 65 64 20 6e 75   an unlimited nu
247c0 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a 20 20 6d  mber of rows.  m
247d0 61 79 20 62 65 20 61 64 64 65 64 20 74 6f 20 74  ay be added to t
247e0 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62  he recursive tab
247f0 6c 65 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 54 68  le..<li><p>.  Th
24800 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c  e OFFSET clause,
24810 20 69 66 20 69 74 20 69 73 20 70 72 65 73 65 6e   if it is presen
24820 74 20 61 6e 64 20 68 61 73 20 61 20 70 6f 73 69  t and has a posi
24830 74 69 76 65 20 76 61 6c 75 65 20 4e 2c 20 70 72  tive value N, pr
24840 65 76 65 6e 74 73 20 74 68 65 0a 20 20 66 69 72  events the.  fir
24850 73 74 20 4e 20 72 6f 77 73 20 66 72 6f 6d 20 62  st N rows from b
24860 65 69 6e 67 20 61 64 64 65 64 20 74 6f 20 74 68  eing added to th
24870 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  e recursive tabl
24880 65 2e 0a 20 20 54 68 65 20 66 69 72 73 74 20 4e  e..  The first N
24890 20 72 6f 77 73 20 61 72 65 20 73 74 69 6c 6c 20   rows are still 
248a0 70 72 6f 63 65 73 73 65 64 0a 20 20 62 79 20 74  processed.  by t
248b0 68 65 20 3c 79 79 74 65 72 6d 3e 72 65 63 75 72  he <yyterm>recur
248c0 73 69 76 65 2d 73 65 6c 65 63 74 3c 2f 79 79 74  sive-select</yyt
248d0 65 72 6d 3e 20 26 6d 64 61 73 68 3b 20 74 68 65  erm> &mdash; the
248e0 79 0a 20 20 6a 75 73 74 20 61 72 65 20 6e 6f 74  y.  just are not
248f0 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 72 65   added to the re
24900 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e 20 20  cursive table.  
24910 52 6f 77 73 20 61 72 65 20 6e 6f 74 20 63 6f 75  Rows are not cou
24920 6e 74 65 64 20 74 6f 77 61 72 64 0a 20 20 66 75  nted toward.  fu
24930 6c 66 69 6c 6c 69 6e 67 20 74 68 65 20 4c 49 4d  lfilling the LIM
24940 49 54 20 75 6e 74 69 6c 20 61 6c 6c 20 4f 46 46  IT until all OFF
24950 53 45 54 20 72 6f 77 73 20 68 61 76 65 20 62 65  SET rows have be
24960 65 6e 20 73 6b 69 70 70 65 64 2e 0a 3c 6c 69 3e  en skipped..<li>
24970 3c 70 3e 0a 20 20 49 66 20 61 6e 20 4f 52 44 45  <p>.  If an ORDE
24980 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 70  R BY clause is p
24990 72 65 73 65 6e 74 2c 20 69 74 20 64 65 74 65 72  resent, it deter
249a0 6d 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20  mines the order 
249b0 69 6e 20 77 68 69 63 68 20 72 6f 77 73 0a 20 20  in which rows.  
249c0 61 72 65 20 65 78 74 72 61 63 74 65 64 20 66 72  are extracted fr
249d0 6f 6d 20 74 68 65 20 71 75 65 75 65 20 69 6e 20  om the queue in 
249e0 73 74 65 70 20 32 61 2e 20 20 49 66 20 74 68 65  step 2a.  If the
249f0 72 65 20 69 73 20 6e 6f 20 4f 52 44 45 52 20 42  re is no ORDER B
24a00 59 20 63 6c 61 75 73 65 2c 0a 20 20 74 68 65 6e  Y clause,.  then
24a10 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68   the order in wh
24a20 69 63 68 20 72 6f 77 73 20 61 72 65 20 65 78 74  ich rows are ext
24a30 72 61 63 74 65 64 20 69 73 20 75 6e 64 65 66 69  racted is undefi
24a40 6e 65 64 2e 20 20 28 49 6e 20 74 68 65 20 63 75  ned.  (In the cu
24a50 72 72 65 6e 74 0a 20 20 69 6d 70 6c 65 6d 65 6e  rrent.  implemen
24a60 74 61 74 69 6f 6e 2c 20 74 68 65 20 71 75 65 75  tation, the queu
24a70 65 20 62 65 63 6f 6d 65 73 20 61 20 46 49 46 4f  e becomes a FIFO
24a80 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59   if the ORDER BY
24a90 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69 74 74   clause is omitt
24aa0 65 64 2c 0a 20 20 62 75 74 20 61 70 70 6c 69 63  ed,.  but applic
24ab0 61 74 69 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f  ations should no
24ac0 74 20 64 65 70 65 6e 64 20 6f 6e 20 74 68 61 74  t depend on that
24ad0 20 66 61 63 74 20 73 69 6e 63 65 20 69 74 20 6d   fact since it m
24ae0 69 67 68 74 20 63 68 61 6e 67 65 2e 29 0a 3c 2f  ight change.).</
24af0 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  ul>..<tcl>hd_fra
24b00 67 6d 65 6e 74 20 72 63 65 78 31 3c 2f 74 63 6c  gment rcex1</tcl
24b10 3e 0a 3c 68 34 3e 52 65 63 75 72 73 69 76 65 20  >.<h4>Recursive 
24b20 51 75 65 72 79 20 45 78 61 6d 70 6c 65 73 3c 2f  Query Examples</
24b30 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c  h4>..<p>The foll
24b40 6f 77 69 6e 67 20 71 75 65 72 79 20 72 65 74 75  owing query retu
24b50 72 6e 73 20 61 6c 6c 20 69 6e 74 65 67 65 72 73  rns all integers
24b60 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 31   between 1 and 1
24b70 30 30 30 30 30 30 3a 0a 0a 3c 62 6c 6f 63 6b 71  000000:..<blockq
24b80 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20  uote><pre>.WITH 
24b90 52 45 43 55 52 53 49 56 45 0a 20 20 63 6e 74 28  RECURSIVE.  cnt(
24ba0 78 29 20 41 53 20 28 56 41 4c 55 45 53 28 31 29  x) AS (VALUES(1)
24bb0 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43   UNION ALL SELEC
24bc0 54 20 78 2b 31 20 46 52 4f 4d 20 63 6e 74 20 57  T x+1 FROM cnt W
24bd0 48 45 52 45 20 78 3c 31 30 30 30 30 30 30 29 0a  HERE x<1000000).
24be0 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 63 6e  SELECT x FROM cn
24bf0 74 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  t;.</pre></block
24c00 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 6e 73 69  quote>..<p>Consi
24c10 64 65 72 20 68 6f 77 20 74 68 69 73 20 71 75 65  der how this que
24c20 72 79 20 77 6f 72 6b 73 2e 20 20 54 68 65 20 69  ry works.  The i
24c30 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 0a 72 75  nitial-select.ru
24c40 6e 73 20 66 69 72 73 74 20 61 6e 64 20 72 65 74  ns first and ret
24c50 75 72 6e 73 20 61 20 73 69 6e 67 6c 65 20 72 6f  urns a single ro
24c60 77 0a 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  w.with a single 
24c70 63 6f 6c 75 6d 6e 20 22 31 22 2e 20 20 54 68 69  column "1".  Thi
24c80 73 20 6f 6e 65 20 72 6f 77 20 69 73 20 61 64 64  s one row is add
24c90 65 64 20 74 6f 20 74 68 65 20 71 75 65 75 65 2e  ed to the queue.
24ca0 20 20 49 6e 0a 73 74 65 70 20 32 61 2c 20 74 68    In.step 2a, th
24cb0 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20 65 78  at one row is ex
24cc0 74 72 61 63 74 65 64 20 66 72 6f 6d 20 74 68 65  tracted from the
24cd0 20 71 75 65 75 65 20 61 6e 64 20 61 64 64 65 64   queue and added
24ce0 20 74 6f 20 22 63 6e 74 22 2e 0a 54 68 65 6e 20   to "cnt"..Then 
24cf0 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65  the recursive-se
24d00 6c 65 63 74 20 69 73 20 72 75 6e 20 69 6e 20 61  lect is run in a
24d10 63 63 6f 72 64 61 6e 63 65 20 77 69 74 68 20 73  ccordance with s
24d20 74 65 70 20 32 63 20 67 65 6e 65 72 61 74 69 6e  tep 2c generatin
24d30 67 0a 61 20 73 69 6e 67 6c 65 20 6e 65 77 20 72  g.a single new r
24d40 6f 77 20 77 69 74 68 20 76 61 6c 75 65 20 22 32  ow with value "2
24d50 22 20 74 6f 20 61 64 64 20 74 6f 20 74 68 65 20  " to add to the 
24d60 71 75 65 75 65 2e 20 20 54 68 65 20 71 75 65 75  queue.  The queu
24d70 65 20 73 74 69 6c 6c 0a 68 61 73 20 6f 6e 65 20  e still.has one 
24d80 72 6f 77 2c 20 73 6f 20 73 74 65 70 20 32 20 72  row, so step 2 r
24d90 65 70 65 61 74 73 2e 20 20 54 68 65 20 22 32 22  epeats.  The "2"
24da0 20 72 6f 77 20 69 73 20 65 78 74 72 61 63 74 65   row is extracte
24db0 64 20 61 6e 64 20 61 64 64 65 64 20 74 6f 20 74  d and added to t
24dc0 68 65 0a 72 65 63 75 72 73 69 76 65 20 74 61 62  he.recursive tab
24dd0 6c 65 20 62 79 20 73 74 65 70 73 20 32 61 20 61  le by steps 2a a
24de0 6e 64 20 32 62 2e 20 20 54 68 65 6e 20 74 68 65  nd 2b.  Then the
24df0 20 72 6f 77 20 63 6f 6e 74 61 69 6e 69 6e 67 20   row containing 
24e00 32 20 69 73 20 75 73 65 64 20 0a 61 73 20 69 66  2 is used .as if
24e10 20 69 74 20 77 65 72 65 20 74 68 65 20 63 6f 6d   it were the com
24e20 70 6c 65 74 65 20 63 6f 6e 74 65 6e 74 20 6f 66  plete content of
24e30 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74   the recursive t
24e40 61 62 6c 65 20 61 6e 64 20 74 68 65 20 0a 72 65  able and the .re
24e50 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20 69  cursive-select i
24e60 73 20 72 75 6e 20 61 67 61 69 6e 2c 20 72 65 73  s run again, res
24e70 75 6c 74 69 6e 67 20 69 6e 20 61 20 72 6f 77 20  ulting in a row 
24e80 77 69 74 68 20 76 61 6c 75 65 20 22 33 22 20 62  with value "3" b
24e90 65 69 6e 67 20 61 64 64 65 64 0a 74 6f 20 74 68  eing added.to th
24ea0 65 20 71 75 65 75 65 2e 20 20 54 68 69 73 20 72  e queue.  This r
24eb0 65 70 65 61 74 73 20 39 39 39 39 39 39 20 74 69  epeats 999999 ti
24ec0 6d 65 73 20 75 6e 74 69 6c 20 66 69 6e 61 6c 6c  mes until finall
24ed0 79 20 61 74 20 73 74 65 70 20 32 61 20 74 68 65  y at step 2a the
24ee0 0a 6f 6e 6c 79 20 76 61 6c 75 65 20 6f 6e 20 74  .only value on t
24ef0 68 65 20 71 75 65 75 65 20 69 73 20 61 20 72 6f  he queue is a ro
24f00 77 20 63 6f 6e 74 61 69 6e 69 6e 67 20 31 30 30  w containing 100
24f10 30 30 30 30 2e 20 20 54 68 61 74 20 72 6f 77 20  0000.  That row 
24f20 69 73 0a 65 78 74 72 61 63 74 65 64 20 61 6e 64  is.extracted and
24f30 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 72 65   added to the re
24f40 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e 20 20  cursive table.  
24f50 42 75 74 20 74 68 69 73 20 74 69 6d 65 2c 20 74  But this time, t
24f60 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20  he.WHERE clause 
24f70 63 61 75 73 65 73 20 74 68 65 20 72 65 63 75 72  causes the recur
24f80 73 69 76 65 2d 73 65 6c 65 63 74 20 74 6f 20 72  sive-select to r
24f90 65 74 75 72 6e 20 6e 6f 20 72 6f 77 73 2c 20 73  eturn no rows, s
24fa0 6f 20 74 68 65 0a 71 75 65 75 65 20 72 65 6d 61  o the.queue rema
24fb0 69 6e 73 20 65 6d 70 74 79 20 61 6e 64 20 74 68  ins empty and th
24fc0 65 20 72 65 63 75 72 73 69 6f 6e 20 73 74 6f 70  e recursion stop
24fd0 73 2e 0a 0a 3c 70 3e 3c 62 3e 4f 70 74 69 6d 69  s...<p><b>Optimi
24fe0 7a 61 74 69 6f 6e 20 6e 6f 74 65 3a 3c 2f 62 3e  zation note:</b>
24ff0 0a 49 6e 20 74 68 65 20 64 69 73 63 75 73 73 69  .In the discussi
25000 6f 6e 20 61 62 6f 76 65 2c 20 73 74 61 74 65 6d  on above, statem
25010 65 6e 74 73 20 6c 69 6b 65 20 22 69 6e 73 65 72  ents like "inser
25020 74 20 74 68 65 20 72 6f 77 20 69 6e 74 6f 0a 74  t the row into.t
25030 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62  he recursive tab
25040 6c 65 22 20 73 68 6f 75 6c 64 20 62 65 20 75 6e  le" should be un
25050 64 65 72 73 74 6f 6f 64 20 63 6f 6e 63 65 70 74  derstood concept
25060 75 61 6c 6c 79 2c 20 6e 6f 74 20 6c 69 74 65 72  ually, not liter
25070 61 6c 6c 79 2e 0a 49 74 20 73 6f 75 6e 64 73 20  ally..It sounds 
25080 61 73 20 69 66 20 53 51 4c 69 74 65 20 69 73 20  as if SQLite is 
25090 61 63 63 75 6d 75 6c 61 74 69 6e 67 20 61 20 68  accumulating a h
250a0 75 67 65 20 74 61 62 6c 65 0a 63 6f 6e 74 61 69  uge table.contai
250b0 6e 69 6e 67 20 6f 6e 65 20 6d 69 6c 6c 69 6f 6e  ning one million
250c0 20 72 6f 77 73 2c 20 74 68 65 6e 20 67 6f 69 6e   rows, then goin
250d0 67 20 62 61 63 6b 20 61 6e 64 20 73 63 61 6e 6e  g back and scann
250e0 69 6e 67 20 74 68 61 74 20 74 61 62 6c 65 0a 66  ing that table.f
250f0 72 6f 6d 20 74 6f 70 20 74 6f 20 62 6f 74 74 6f  rom top to botto
25100 6d 20 74 6f 20 67 65 6e 65 72 61 74 65 20 74 68  m to generate th
25110 65 20 72 65 73 75 6c 74 2e 20 20 57 68 61 74 20  e result.  What 
25120 72 65 61 6c 6c 79 20 68 61 70 70 65 6e 73 0a 69  really happens.i
25130 73 20 74 68 61 74 20 74 68 65 20 71 75 65 72 79  s that the query
25140 20 6f 70 74 69 6d 69 7a 65 72 20 73 65 65 73 20   optimizer sees 
25150 74 68 61 74 20 76 61 6c 75 65 73 20 69 6e 20 74  that values in t
25160 68 65 0a 22 63 6e 74 22 20 72 65 63 75 72 73 69  he."cnt" recursi
25170 76 65 20 74 61 62 6c 65 20 61 72 65 20 6f 6e 6c  ve table are onl
25180 79 20 75 73 65 64 20 6f 6e 63 65 2e 20 20 53 6f  y used once.  So
25190 20 61 73 20 65 61 63 68 20 72 6f 77 20 69 73 20   as each row is 
251a0 61 64 64 65 64 20 74 6f 0a 74 68 65 20 72 65 63  added to.the rec
251b0 75 72 73 69 76 65 20 74 61 62 6c 65 2c 20 74 68  ursive table, th
251c0 61 74 20 72 6f 77 20 69 73 20 69 6d 6d 65 64 69  at row is immedi
251d0 61 74 65 6c 79 20 72 65 74 75 72 6e 65 64 20 61  ately returned a
251e0 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 74 68  s a result of th
251f0 65 20 6d 61 69 6e 0a 53 45 4c 45 43 54 20 73 74  e main.SELECT st
25200 61 74 65 6d 65 6e 74 20 61 6e 64 20 74 68 65 6e  atement and then
25210 20 64 69 73 63 61 72 64 65 64 2e 20 20 53 51 4c   discarded.  SQL
25220 69 74 65 20 64 6f 65 73 20 3c 65 6d 3e 6e 6f 74  ite does <em>not
25230 3c 2f 65 6d 3e 20 61 63 63 75 6d 75 6c 61 74 65  </em> accumulate
25240 0a 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  .a temporary tab
25250 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 20  le containing a 
25260 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73 2e 20 20 56  million rows.  V
25270 65 72 79 20 6c 69 74 74 6c 65 20 6d 65 6d 6f 72  ery little memor
25280 79 20 69 73 0a 6e 65 65 64 65 64 20 74 6f 20 72  y is.needed to r
25290 75 6e 20 74 68 65 20 61 62 6f 76 65 20 65 78 61  un the above exa
252a0 6d 70 6c 65 2e 20 20 48 6f 77 65 76 65 72 2c 20  mple.  However, 
252b0 69 66 20 74 68 65 20 65 78 61 6d 70 6c 65 20 68  if the example h
252c0 61 64 20 75 73 65 64 0a 55 4e 49 4f 4e 20 69 6e  ad used.UNION in
252d0 73 74 65 61 64 20 6f 66 20 55 4e 49 4f 4e 20 41  stead of UNION A
252e0 4c 4c 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20  LL, then SQLite 
252f0 77 6f 75 6c 64 20 68 61 76 65 20 68 61 64 20 74  would have had t
25300 6f 20 6b 65 65 70 20 61 72 6f 75 6e 64 0a 61 6c  o keep around.al
25310 6c 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e  l previously gen
25320 65 72 61 74 65 64 20 63 6f 6e 74 65 6e 74 20 69  erated content i
25330 6e 20 6f 72 64 65 72 20 74 6f 20 63 68 65 63 6b  n order to check
25340 20 66 6f 72 20 64 75 70 6c 69 63 61 74 65 73 2e   for duplicates.
25350 0a 46 6f 72 20 74 68 69 73 20 72 65 61 73 6f 6e  .For this reason
25360 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73 20 73 68  , programmers sh
25370 6f 75 6c 64 20 73 74 72 69 76 65 20 74 6f 20 75  ould strive to u
25380 73 65 20 55 4e 49 4f 4e 20 41 4c 4c 20 69 6e 73  se UNION ALL ins
25390 74 65 61 64 0a 6f 66 20 55 4e 49 4f 4e 20 77 68  tead.of UNION wh
253a0 65 6e 20 66 65 61 73 69 62 6c 65 2e 0a 0a 3c 70  en feasible...<p
253b0 3e 48 65 72 65 20 69 73 20 61 20 76 61 72 69 61  >Here is a varia
253c0 74 69 6f 6e 20 6f 6e 20 74 68 65 20 70 72 65 76  tion on the prev
253d0 69 6f 75 73 20 65 78 61 6d 70 6c 65 3a 0a 0a 3c  ious example:..<
253e0 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
253f0 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a  .WITH RECURSIVE.
25400 20 20 63 6e 74 28 78 29 20 41 53 20 28 0a 20 20    cnt(x) AS (.  
25410 20 20 20 53 45 4c 45 43 54 20 31 0a 20 20 20 20     SELECT 1.    
25420 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 20   UNION ALL.     
25430 53 45 4c 45 43 54 20 78 2b 31 20 46 52 4f 4d 20  SELECT x+1 FROM 
25440 63 6e 74 0a 20 20 20 20 20 20 4c 49 4d 49 54 20  cnt.      LIMIT 
25450 31 30 30 30 30 30 30 0a 20 20 29 0a 53 45 4c 45  1000000.  ).SELE
25460 43 54 20 78 20 46 52 4f 4d 20 63 6e 74 3b 0a 3c  CT x FROM cnt;.<
25470 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
25480 65 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65  e>..<p>There are
25490 20 74 77 6f 20 64 69 66 66 65 72 65 6e 63 65 73   two differences
254a0 20 69 6e 20 74 68 69 73 20 76 61 72 69 61 74 69   in this variati
254b0 6f 6e 2e 20 20 54 68 65 20 69 6e 69 74 69 61 6c  on.  The initial
254c0 2d 73 65 6c 65 63 74 20 69 73 0a 22 53 45 4c 45  -select is."SELE
254d0 43 54 20 31 22 20 69 6e 73 74 65 61 64 20 6f 66  CT 1" instead of
254e0 20 22 56 41 4c 55 45 53 28 31 29 22 2e 20 20 42   "VALUES(1)".  B
254f0 75 74 20 74 68 6f 73 65 20 61 72 65 20 6a 75 73  ut those are jus
25500 74 20 64 69 66 66 65 72 65 6e 74 0a 73 79 6e 74  t different.synt
25510 61 78 65 73 20 66 6f 72 20 73 61 79 69 6e 67 20  axes for saying 
25520 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65  exactly the same
25530 20 74 68 69 6e 67 2e 20 20 54 68 65 20 6f 74 68   thing.  The oth
25540 65 72 20 63 68 61 6e 67 65 20 69 73 20 74 68 61  er change is tha
25550 74 20 74 68 65 0a 72 65 63 75 72 73 69 6f 6e 20  t the.recursion 
25560 69 73 20 73 74 6f 70 70 65 64 20 62 79 20 61 20  is stopped by a 
25570 4c 49 4d 49 54 20 72 61 74 68 65 72 20 74 68 61  LIMIT rather tha
25580 6e 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65  n a WHERE clause
25590 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 4c 49  .  The use of.LI
255a0 4d 49 54 20 6d 65 61 6e 73 20 74 68 61 74 20 77  MIT means that w
255b0 68 65 6e 20 74 68 65 20 6f 6e 65 2d 6d 69 6c 6c  hen the one-mill
255c0 69 6f 6e 74 68 20 72 6f 77 20 69 73 20 61 64 64  ionth row is add
255d0 65 64 20 74 6f 20 74 68 65 20 22 63 6e 74 22 20  ed to the "cnt" 
255e0 74 61 62 6c 65 0a 28 61 6e 64 20 72 65 74 75 72  table.(and retur
255f0 6e 65 64 20 62 79 20 74 68 65 20 6d 61 69 6e 20  ned by the main 
25600 53 45 4c 45 43 54 2c 20 74 68 61 6e 6b 73 20 74  SELECT, thanks t
25610 6f 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69  o the query opti
25620 6d 69 7a 65 72 29 0a 74 68 65 6e 20 74 68 65 20  mizer).then the 
25630 72 65 63 75 72 73 69 6f 6e 20 73 74 6f 70 73 20  recursion stops 
25640 69 6d 6d 65 64 69 61 74 65 6c 79 20 72 65 67 61  immediately rega
25650 72 64 6c 65 73 73 20 6f 66 20 68 6f 77 20 6d 61  rdless of how ma
25660 6e 79 20 72 6f 77 73 20 6d 69 67 68 74 20 62 65  ny rows might be
25670 0a 6c 65 66 74 20 69 6e 20 74 68 65 20 71 75 65  .left in the que
25680 75 65 2e 20 20 4f 6e 20 6d 6f 72 65 20 63 6f 6d  ue.  On more com
25690 70 6c 65 78 20 71 75 65 72 69 65 73 2c 20 69 74  plex queries, it
256a0 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73 20 62   can sometimes b
256b0 65 0a 64 69 66 66 69 63 75 6c 74 20 74 6f 20 65  e.difficult to e
256c0 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 57  nsure that the W
256d0 48 45 52 45 20 63 6c 61 75 73 65 20 77 69 6c 6c  HERE clause will
256e0 20 65 76 65 6e 74 75 61 6c 6c 79 20 63 61 75 73   eventually caus
256f0 65 20 74 68 65 0a 71 75 65 75 65 20 74 6f 20 64  e the.queue to d
25700 72 61 69 6e 20 61 6e 64 20 74 68 65 20 72 65 63  rain and the rec
25710 75 72 73 69 6f 6e 20 74 6f 20 74 65 72 6d 69 6e  ursion to termin
25720 61 74 65 2e 20 20 42 75 74 20 74 68 65 20 4c 49  ate.  But the LI
25730 4d 49 54 20 63 6c 61 75 73 65 20 77 69 6c 6c 0a  MIT clause will.
25740 61 6c 77 61 79 73 20 73 74 6f 70 20 74 68 65 20  always stop the 
25750 72 65 63 75 72 73 69 6f 6e 2e 20 20 53 6f 20 69  recursion.  So i
25760 74 20 69 73 20 67 6f 6f 64 20 70 72 61 63 74 69  t is good practi
25770 63 65 20 74 6f 20 61 6c 77 61 79 73 20 69 6e 63  ce to always inc
25780 6c 75 64 65 20 61 0a 4c 49 4d 49 54 20 63 6c 61  lude a.LIMIT cla
25790 75 73 65 20 61 73 20 61 20 73 61 66 65 74 79 20  use as a safety 
257a0 69 66 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e  if an upper boun
257b0 64 20 6f 6e 20 74 68 65 20 73 69 7a 65 20 6f 66  d on the size of
257c0 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 0a   the recursion .
257d0 69 73 20 6b 6e 6f 77 6e 2e 0a 0a 3c 74 63 6c 3e  is known...<tcl>
257e0 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 63 65 78  hd_fragment rcex
257f0 32 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 48 69 65 72  2</tcl>.<h4>Hier
25800 61 72 63 68 69 63 61 6c 20 51 75 65 72 79 20 45  archical Query E
25810 78 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70  xamples</h4>..<p
25820 3e 43 6f 6e 73 69 64 65 72 20 61 20 74 61 62 6c  >Consider a tabl
25830 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  e that describes
25840 20 74 68 65 20 6d 65 6d 62 65 72 73 20 6f 66 20   the members of 
25850 61 6e 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20  an organization 
25860 61 73 0a 77 65 6c 6c 20 61 73 20 74 68 65 20 63  as.well as the c
25870 68 61 69 6e 2d 6f 66 2d 63 6f 6d 6d 61 6e 64 20  hain-of-command 
25880 77 69 74 68 69 6e 20 74 68 61 74 20 6f 72 67 61  within that orga
25890 6e 69 7a 61 74 69 6f 6e 3a 0a 0a 3c 62 6c 6f 63  nization:..<bloc
258a0 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45  kquote><pre>.CRE
258b0 41 54 45 20 54 41 42 4c 45 20 6f 72 67 28 0a 20  ATE TABLE org(. 
258c0 20 6e 61 6d 65 20 54 45 58 54 20 50 52 49 4d 41   name TEXT PRIMA
258d0 52 59 20 4b 45 59 2c 0a 20 20 62 6f 73 73 20 54  RY KEY,.  boss T
258e0 45 58 54 20 52 45 46 45 52 45 4e 43 45 53 20 6f  EXT REFERENCES o
258f0 72 67 2c 0a 20 20 68 65 69 67 68 74 20 49 4e 54  rg,.  height INT
25900 2c 0a 20 20 2d 2d 20 6f 74 68 65 72 20 63 6f 6e  ,.  -- other con
25910 74 65 6e 74 20 6f 6d 69 74 74 65 64 0a 29 3b 0a  tent omitted.);.
25920 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
25930 74 65 3e 0a 0a 3c 70 3e 45 76 65 72 79 20 6d 65  te>..<p>Every me
25940 6d 62 65 72 20 69 6e 20 74 68 65 20 6f 72 67 61  mber in the orga
25950 6e 69 7a 61 74 69 6f 6e 20 68 61 73 20 61 20 6e  nization has a n
25960 61 6d 65 2c 20 61 6e 64 20 6d 6f 73 74 20 6d 65  ame, and most me
25970 6d 62 65 72 73 20 68 61 76 65 0a 61 20 73 69 6e  mbers have.a sin
25980 67 6c 65 20 62 6f 73 73 2e 20 20 28 54 68 65 20  gle boss.  (The 
25990 68 65 61 64 20 6f 66 20 74 68 65 20 77 68 6f 6c  head of the whol
259a0 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20 68  e organization h
259b0 61 73 20 61 20 4e 55 4c 4c 0a 22 62 6f 73 73 22  as a NULL."boss"
259c0 20 66 69 65 6c 64 2e 29 20 54 68 65 20 72 6f 77   field.) The row
259d0 73 20 6f 66 20 74 68 65 20 22 6f 72 67 22 20 74  s of the "org" t
259e0 61 62 6c 65 20 66 6f 72 6d 20 61 20 74 72 65 65  able form a tree
259f0 2e 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20 61 20  ...<p>Here is a 
25a00 71 75 65 72 79 20 74 68 61 74 20 63 6f 6d 70 75  query that compu
25a10 74 65 73 20 74 68 65 20 61 76 65 72 61 67 65 20  tes the average 
25a20 68 65 69 67 68 74 20 6f 76 65 72 20 65 76 65 72  height over ever
25a30 79 6f 6e 65 0a 69 6e 20 41 6c 69 63 65 27 73 20  yone.in Alice's 
25a40 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 2c 20 69 6e  organization, in
25a50 63 6c 75 64 69 6e 67 20 41 6c 69 63 65 3a 0a 0a  cluding Alice:..
25a60 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
25a70 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45  >.WITH RECURSIVE
25a80 0a 20 20 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69  .  works_for_ali
25a90 63 65 28 6e 29 20 41 53 20 28 0a 20 20 20 20 56  ce(n) AS (.    V
25aa0 41 4c 55 45 53 28 27 41 6c 69 63 65 27 29 0a 20  ALUES('Alice'). 
25ab0 20 20 20 55 4e 49 4f 4e 0a 20 20 20 20 53 45 4c     UNION.    SEL
25ac0 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 6f 72  ECT name FROM or
25ad0 67 2c 20 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69  g, works_for_ali
25ae0 63 65 0a 20 20 20 20 20 57 48 45 52 45 20 6f 72  ce.     WHERE or
25af0 67 2e 62 6f 73 73 3d 77 6f 72 6b 73 5f 66 6f 72  g.boss=works_for
25b00 5f 61 6c 69 63 65 2e 6e 0a 20 20 29 0a 53 45 4c  _alice.n.  ).SEL
25b10 45 43 54 20 61 76 67 28 68 65 69 67 68 74 29 20  ECT avg(height) 
25b20 46 52 4f 4d 20 6f 72 67 0a 20 57 48 45 52 45 20  FROM org. WHERE 
25b30 6f 72 67 2e 6e 61 6d 65 20 49 4e 20 77 6f 72 6b  org.name IN work
25b40 73 5f 66 6f 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70  s_for_alice;.</p
25b50 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
25b60 0a 0a 3c 70 3e 54 68 65 20 6e 65 78 74 20 65 78  ..<p>The next ex
25b70 61 6d 70 6c 65 20 75 73 65 73 20 74 77 6f 20 0a  ample uses two .
25b80 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
25b90 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 20 73 69  ressions in a si
25ba0 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65  ngle WITH clause
25bb0 2e 20 20 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .  .The followin
25bc0 67 20 74 61 62 6c 65 20 72 65 63 6f 72 64 73 20  g table records 
25bd0 61 20 66 61 6d 69 6c 79 20 74 72 65 65 3a 0a 0a  a family tree:..
25be0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
25bf0 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 66  >.CREATE TABLE f
25c00 61 6d 69 6c 79 28 0a 20 20 6e 61 6d 65 20 54 45  amily(.  name TE
25c10 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  XT PRIMARY KEY,.
25c20 20 20 6d 6f 6d 20 54 45 58 54 20 52 45 46 45 52    mom TEXT REFER
25c30 45 4e 43 45 53 20 66 61 6d 69 6c 79 2c 0a 20 20  ENCES family,.  
25c40 64 61 64 20 54 45 58 54 20 52 45 46 45 52 45 4e  dad TEXT REFEREN
25c50 43 45 53 20 66 61 6d 69 6c 79 2c 0a 20 20 62 6f  CES family,.  bo
25c60 72 6e 20 44 41 54 45 54 49 4d 45 2c 0a 20 20 64  rn DATETIME,.  d
25c70 69 65 64 20 44 41 54 45 54 49 4d 45 2c 20 2d 2d  ied DATETIME, --
25c80 20 4e 55 4c 4c 20 69 66 20 73 74 69 6c 6c 20 61   NULL if still a
25c90 6c 69 76 65 0a 20 20 2d 2d 20 6f 74 68 65 72 20  live.  -- other 
25ca0 63 6f 6e 74 65 6e 74 0a 29 3b 0a 3c 2f 70 72 65  content.);.</pre
25cb0 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
25cc0 3c 70 3e 54 68 65 20 22 66 61 6d 69 6c 79 22 20  <p>The "family" 
25cd0 74 61 62 6c 65 20 69 73 20 73 69 6d 69 6c 61 72  table is similar
25ce0 20 74 6f 20 74 68 65 20 65 61 72 6c 69 65 72 20   to the earlier 
25cf0 22 6f 72 67 22 20 74 61 62 6c 65 20 65 78 63 65  "org" table exce
25d00 70 74 20 74 68 61 74 20 0a 6e 6f 77 20 74 68 65  pt that .now the
25d10 72 65 20 61 72 65 20 74 77 6f 20 70 61 72 65 6e  re are two paren
25d20 74 73 20 74 6f 20 65 61 63 68 20 6d 65 6d 62 65  ts to each membe
25d30 72 2e 0a 57 65 20 77 61 6e 74 20 74 6f 20 6b 6e  r..We want to kn
25d40 6f 77 20 61 6c 6c 20 6c 69 76 69 6e 67 20 61 6e  ow all living an
25d50 63 65 73 74 6f 72 73 20 6f 66 20 41 6c 69 63 65  cestors of Alice
25d60 2c 20 66 72 6f 6d 20 6f 6c 64 65 73 74 20 74 6f  , from oldest to
25d70 20 79 6f 75 6e 67 65 73 74 2e 0a 41 6e 20 6f 72   youngest..An or
25d80 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61  dinary common ta
25d90 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  ble expression, 
25da0 22 70 61 72 65 6e 74 5f 6f 66 22 2c 20 69 73 20  "parent_of", is 
25db0 64 65 66 69 6e 65 64 20 66 69 72 73 74 2e 20 20  defined first.  
25dc0 54 68 61 74 0a 6f 72 64 69 6e 61 72 79 20 43 54  That.ordinary CT
25dd0 45 20 69 73 20 61 20 76 69 65 77 20 74 68 61 74  E is a view that
25de0 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
25df0 66 69 6e 64 20 61 6c 6c 20 70 61 72 65 6e 74 73  find all parents
25e00 20 6f 66 20 61 6e 79 0a 69 6e 64 69 76 69 64 75   of any.individu
25e10 61 6c 2e 20 20 54 68 61 74 20 6f 72 64 69 6e 61  al.  That ordina
25e20 72 79 20 43 54 45 20 69 73 20 74 68 65 6e 20 75  ry CTE is then u
25e30 73 65 64 20 69 6e 20 74 68 65 20 22 61 6e 63 65  sed in the "ance
25e40 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 22 0a 72  stor_of_alice".r
25e50 65 63 75 72 73 69 76 65 20 43 54 45 2e 20 20 54  ecursive CTE.  T
25e60 68 65 20 72 65 63 75 72 73 69 76 65 20 43 54 45  he recursive CTE
25e70 20 69 73 20 74 68 65 6e 20 75 73 65 64 20 69 6e   is then used in
25e80 20 74 68 65 20 66 69 6e 61 6c 20 71 75 65 72 79   the final query
25e90 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
25ea0 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53  pre>.WITH RECURS
25eb0 49 56 45 0a 20 20 70 61 72 65 6e 74 5f 6f 66 28  IVE.  parent_of(
25ec0 6e 61 6d 65 2c 20 70 61 72 65 6e 74 29 20 41 53  name, parent) AS
25ed0 0a 20 20 20 20 28 53 45 4c 45 43 54 20 6e 61 6d  .    (SELECT nam
25ee0 65 2c 20 6d 6f 6d 20 46 52 4f 4d 20 66 61 6d 69  e, mom FROM fami
25ef0 6c 79 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20  ly UNION SELECT 
25f00 6e 61 6d 65 2c 20 64 61 64 20 46 52 4f 4d 20 66  name, dad FROM f
25f10 61 6d 69 6c 79 29 2c 0a 20 20 61 6e 63 65 73 74  amily),.  ancest
25f20 6f 72 5f 6f 66 5f 61 6c 69 63 65 28 6e 61 6d 65  or_of_alice(name
25f30 29 20 41 53 0a 20 20 20 20 28 53 45 4c 45 43 54  ) AS.    (SELECT
25f40 20 70 61 72 65 6e 74 20 46 52 4f 4d 20 70 61 72   parent FROM par
25f50 65 6e 74 5f 6f 66 20 57 48 45 52 45 20 6e 61 6d  ent_of WHERE nam
25f60 65 3d 27 41 6c 69 63 65 27 0a 20 20 20 20 20 55  e='Alice'.     U
25f70 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 20 53 45  NION ALL.     SE
25f80 4c 45 43 54 20 70 61 72 65 6e 74 20 46 52 4f 4d  LECT parent FROM
25f90 20 70 61 72 65 6e 74 5f 6f 66 20 4a 4f 49 4e 20   parent_of JOIN 
25fa0 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63  ancestor_of_alic
25fb0 65 20 55 53 49 4e 47 28 6e 61 6d 65 29 29 0a 53  e USING(name)).S
25fc0 45 4c 45 43 54 20 66 61 6d 69 6c 79 2e 6e 61 6d  ELECT family.nam
25fd0 65 20 46 52 4f 4d 20 61 6e 63 65 73 74 6f 72 5f  e FROM ancestor_
25fe0 6f 66 5f 61 6c 69 63 65 2c 20 66 61 6d 69 6c 79  of_alice, family
25ff0 0a 20 57 48 45 52 45 20 61 6e 63 65 73 74 6f 72  . WHERE ancestor
26000 5f 6f 66 5f 61 6c 69 63 65 2e 6e 61 6d 65 3d 66  _of_alice.name=f
26010 61 6d 69 6c 79 2e 6e 61 6d 65 0a 20 20 20 41 4e  amily.name.   AN
26020 44 20 64 69 65 64 20 49 53 20 4e 55 4c 4c 0a 20  D died IS NULL. 
26030 4f 52 44 45 52 20 42 59 20 62 6f 72 6e 3b 0a 3c  ORDER BY born;.<
26040 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
26050 65 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  e>..<tcl>hd_frag
26060 6d 65 6e 74 20 72 63 65 78 32 3c 2f 74 63 6c 3e  ment rcex2</tcl>
26070 0a 3c 68 34 3e 51 75 65 72 69 65 73 20 41 67 61  .<h4>Queries Aga
26080 69 6e 73 74 20 41 20 47 72 61 70 68 3c 2f 68 34  inst A Graph</h4
26090 3e 0a 0a 3c 70 3e 41 20 76 65 72 73 69 6f 6e 20  >..<p>A version 
260a0 63 6f 6e 74 72 6f 6c 20 73 79 73 74 65 6d 20 28  control system (
260b0 56 43 53 29 20 77 69 6c 6c 20 74 79 70 69 63 61  VCS) will typica
260c0 6c 6c 79 20 73 74 6f 72 65 20 74 68 65 20 65 76  lly store the ev
260d0 6f 6c 76 69 6e 67 0a 76 65 72 73 69 6f 6e 73 20  olving.versions 
260e0 6f 66 20 61 20 70 72 6f 6a 65 63 74 20 61 73 20  of a project as 
260f0 61 20 64 69 72 65 63 74 65 64 20 61 63 79 63 6c  a directed acycl
26100 69 63 20 67 72 61 70 68 20 28 44 41 47 29 2e 20  ic graph (DAG). 
26110 20 43 61 6c 6c 20 65 61 63 68 0a 76 65 72 73 69   Call each.versi
26120 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 6a 65 63  on of the projec
26130 74 20 61 20 22 63 68 65 63 6b 69 6e 22 2e 20 20  t a "checkin".  
26140 41 20 73 69 6e 67 6c 65 0a 63 68 65 63 6b 69 6e  A single.checkin
26150 20 63 61 6e 20 68 61 76 65 20 7a 65 72 6f 20 6f   can have zero o
26160 72 20 6d 6f 72 65 20 70 61 72 65 6e 74 73 2e 20  r more parents. 
26170 20 4d 6f 73 74 20 63 68 65 63 6b 69 6e 73 20 28   Most checkins (
26180 65 78 63 65 70 74 20 74 68 65 0a 66 69 72 73 74  except the.first
26190 29 20 68 61 76 65 20 61 20 73 69 6e 67 6c 65 20  ) have a single 
261a0 70 61 72 65 6e 74 2c 20 62 75 74 20 69 6e 20 74  parent, but in t
261b0 68 65 20 63 61 73 65 20 6f 66 20 61 20 6d 65 72  he case of a mer
261c0 67 65 2c 20 61 20 63 68 65 63 6b 69 6e 0a 6d 69  ge, a checkin.mi
261d0 67 68 74 20 68 61 76 65 20 74 77 6f 20 6f 72 20  ght have two or 
261e0 74 68 72 65 65 20 6f 72 20 6d 6f 72 65 20 70 61  three or more pa
261f0 72 65 6e 74 73 2e 20 20 41 20 73 63 68 65 6d 61  rents.  A schema
26200 20 74 6f 20 6b 65 65 70 20 74 72 61 63 6b 20 6f   to keep track o
26210 66 0a 63 68 65 63 6b 69 6e 73 20 61 6e 64 20 74  f.checkins and t
26220 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63  he order in whic
26230 68 20 74 68 65 79 20 6f 63 63 75 72 20 6d 69 67  h they occur mig
26240 68 74 20 6c 6f 6f 6b 20 73 6f 6d 65 74 68 69 6e  ht look somethin
26250 67 20 6c 69 6b 65 0a 74 68 69 73 3a 0a 0a 3c 62  g like.this:..<b
26260 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
26270 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 68 65  CREATE TABLE che
26280 63 6b 69 6e 28 0a 20 20 69 64 20 49 4e 54 45 47  ckin(.  id INTEG
26290 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  ER PRIMARY KEY,.
262a0 20 20 6d 74 69 6d 65 20 49 4e 54 45 47 45 52 20    mtime INTEGER 
262b0 2d 2d 20 74 69 6d 65 73 74 61 6d 70 20 77 68 65  -- timestamp whe
262c0 6e 20 74 68 69 73 20 63 68 65 63 6b 69 6e 20 6f  n this checkin o
262d0 63 63 75 72 72 65 64 0a 29 3b 0a 43 52 45 41 54  ccurred.);.CREAT
262e0 45 20 54 41 42 4c 45 20 64 65 72 69 76 65 64 66  E TABLE derivedf
262f0 72 6f 6d 28 0a 20 20 78 66 72 6f 6d 20 49 4e 54  rom(.  xfrom INT
26300 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c 20 52 45  EGER NOT NULL RE
26310 46 45 52 45 4e 43 45 53 20 63 68 65 63 6b 69 6e  FERENCES checkin
26320 2c 20 2d 2d 20 70 61 72 65 6e 74 20 63 68 65 63  , -- parent chec
26330 6b 69 6e 0a 20 20 78 74 6f 20 49 4e 54 45 47 45  kin.  xto INTEGE
26340 52 20 4e 4f 54 20 4e 55 4c 4c 20 52 45 46 45 52  R NOT NULL REFER
26350 45 4e 43 45 53 20 63 68 65 63 6b 69 6e 2c 20 20  ENCES checkin,  
26360 20 2d 2d 20 64 65 72 69 76 65 64 20 63 68 65 63   -- derived chec
26370 6b 69 6e 0a 20 20 50 52 49 4d 41 52 59 20 4b 45  kin.  PRIMARY KE
26380 59 28 78 66 72 6f 6d 2c 78 74 6f 29 0a 29 3b 0a  Y(xfrom,xto).);.
26390 43 52 45 41 54 45 20 49 4e 44 45 58 20 64 65 72  CREATE INDEX der
263a0 69 76 65 64 66 72 6f 6d 5f 62 61 63 6b 20 4f 4e  ivedfrom_back ON
263b0 20 64 65 72 69 76 65 64 66 72 6f 6d 28 78 74 6f   derivedfrom(xto
263c0 2c 78 66 72 6f 6d 29 3b 0a 3c 2f 70 72 65 3e 3c  ,xfrom);.</pre><
263d0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
263e0 3e 54 68 69 73 20 67 72 61 70 68 20 69 73 20 61  >This graph is a
263f0 63 79 63 6c 69 63 2e 20 20 41 6e 64 20 77 65 20  cyclic.  And we 
26400 61 73 73 75 6d 65 20 74 68 61 74 20 74 68 65 20  assume that the 
26410 6d 74 69 6d 65 20 6f 66 20 65 76 65 72 79 0a 63  mtime of every.c
26420 68 69 6c 64 20 63 68 65 63 6b 69 6e 20 69 73 20  hild checkin is 
26430 6e 6f 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  no less than the
26440 20 6d 74 69 6d 65 20 6f 66 20 61 6c 6c 20 69 74   mtime of all it
26450 73 20 70 61 72 65 6e 74 73 2e 20 20 42 75 74 0a  s parents.  But.
26460 75 6e 6c 69 6b 65 20 74 68 65 20 65 61 72 6c 69  unlike the earli
26470 65 72 20 65 78 61 6d 70 6c 65 73 2c 20 74 68 69  er examples, thi
26480 73 20 67 72 61 70 68 20 6d 69 67 68 74 20 68 61  s graph might ha
26490 76 65 20 6d 75 6c 74 69 70 6c 65 20 70 61 74 68  ve multiple path
264a0 73 20 6f 66 0a 64 69 66 66 65 72 69 6e 67 20 6c  s of.differing l
264b0 65 6e 67 74 68 73 20 62 65 74 77 65 65 6e 20 61  engths between a
264c0 6e 79 20 74 77 6f 20 63 68 65 63 6b 69 6e 73 2e  ny two checkins.
264d0 0a 0a 3c 70 3e 57 65 20 77 61 6e 74 20 74 6f 20  ..<p>We want to 
264e0 6b 6e 6f 77 20 74 68 65 20 74 77 65 6e 74 79 20  know the twenty 
264f0 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 6e 63 65  most recent ance
26500 73 74 6f 72 73 20 69 6e 20 74 69 6d 65 20 28 6f  stors in time (o
26510 75 74 20 6f 66 0a 74 68 65 20 74 68 6f 75 73 61  ut of.the thousa
26520 6e 64 73 20 61 6e 64 20 74 68 6f 75 73 61 6e 64  nds and thousand
26530 73 20 6f 66 20 61 6e 63 65 73 74 6f 72 73 20 69  s of ancestors i
26540 6e 20 74 68 65 20 77 68 6f 6c 65 20 44 41 47 29  n the whole DAG)
26550 20 66 6f 72 0a 63 68 65 63 6b 69 6e 20 22 40 42   for.checkin "@B
26560 41 53 45 4c 49 4e 45 22 2e 20 20 28 41 20 71 75  ASELINE".  (A qu
26570 65 72 79 20 73 69 6d 69 6c 61 72 20 74 6f 20 74  ery similar to t
26580 68 69 73 20 69 73 20 75 73 65 64 0a 62 79 20 74  his is used.by t
26590 68 65 20 3c 61 20 68 72 65 66 3d 22 68 74 74 70  he <a href="http
265a0 3a 2f 2f 77 77 77 2e 66 6f 73 73 69 6c 2d 73 63  ://www.fossil-sc
265b0 6d 2e 6f 72 67 2f 22 3e 46 6f 73 73 69 6c 3c 2f  m.org/">Fossil</
265c0 61 3e 20 56 43 53 20 74 6f 0a 73 68 6f 77 20 74  a> VCS to.show t
265d0 68 65 20 4e 20 6d 6f 73 74 20 72 65 63 65 6e 74  he N most recent
265e0 20 61 6e 63 65 73 74 6f 72 73 20 6f 66 20 61 20   ancestors of a 
265f0 63 68 65 63 6b 2e 20 20 46 6f 72 20 65 78 61 6d  check.  For exam
26600 70 6c 65 3a 0a 3c 61 20 68 72 65 66 3d 22 68 74  ple:.<a href="ht
26610 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e  tp://www.sqlite.
26620 6f 72 67 2f 73 72 63 2f 74 69 6d 65 6c 69 6e 65  org/src/timeline
26630 3f 70 3d 74 72 75 6e 6b 26 6e 3d 33 30 22 3e 68  ?p=trunk&n=30">h
26640 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65  ttp://www.sqlite
26650 2e 6f 72 67 2f 73 72 63 2f 74 69 6d 65 6c 69 6e  .org/src/timelin
26660 65 3f 70 3d 74 72 75 6e 6b 26 6e 3d 33 30 3c 2f  e?p=trunk&n=30</
26670 61 3e 2e 29 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  a>.)..<blockquot
26680 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43  e><pre>.WITH REC
26690 55 52 53 49 56 45 0a 20 20 61 6e 63 65 73 74 6f  URSIVE.  ancesto
266a0 72 28 69 64 2c 6d 74 69 6d 65 29 20 41 53 20 28  r(id,mtime) AS (
266b0 0a 20 20 20 20 53 45 4c 45 43 54 20 69 64 2c 20  .    SELECT id, 
266c0 6d 74 69 6d 65 20 46 52 4f 4d 20 63 68 65 63 6b  mtime FROM check
266d0 69 6e 20 57 48 45 52 45 20 69 64 3d 40 42 41 53  in WHERE id=@BAS
266e0 45 4c 49 4e 45 0a 20 20 20 20 55 4e 49 4f 4e 0a  ELINE.    UNION.
266f0 20 20 20 20 53 45 4c 45 43 54 20 64 65 72 69 76      SELECT deriv
26700 65 64 66 72 6f 6d 2e 78 66 72 6f 6d 2c 20 63 68  edfrom.xfrom, ch
26710 65 63 6b 69 6e 2e 6d 74 69 6d 65 0a 20 20 20 20  eckin.mtime.    
26720 20 20 46 52 4f 4d 20 61 6e 63 65 73 74 6f 72 2c    FROM ancestor,
26730 20 64 65 72 69 76 65 64 66 72 6f 6d 2c 20 63 68   derivedfrom, ch
26740 65 63 6b 69 6e 0a 20 20 20 20 20 57 48 45 52 45  eckin.     WHERE
26750 20 61 6e 63 65 73 74 6f 72 2e 69 64 3d 64 65 72   ancestor.id=der
26760 69 76 65 64 66 72 6f 6d 2e 78 74 6f 0a 20 20 20  ivedfrom.xto.   
26770 20 20 20 20 41 4e 44 20 63 68 65 63 6b 69 6e 2e      AND checkin.
26780 69 64 3d 64 65 72 69 76 65 64 66 72 6f 6d 2e 78  id=derivedfrom.x
26790 66 72 6f 6d 0a 20 20 20 20 20 4f 52 44 45 52 20  from.     ORDER 
267a0 42 59 20 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65  BY checkin.mtime
267b0 20 44 45 53 43 0a 20 20 20 20 20 4c 49 4d 49 54   DESC.     LIMIT
267c0 20 32 30 0a 20 20 29 0a 53 45 4c 45 43 54 20 2a   20.  ).SELECT *
267d0 20 46 52 4f 4d 20 63 68 65 63 6b 69 6e 20 4a 4f   FROM checkin JO
267e0 49 4e 20 61 6e 63 65 73 74 6f 72 20 55 53 49 4e  IN ancestor USIN
267f0 47 28 69 64 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  G(id);.</pre></b
26800 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a  lockquote>..<p>.
26810 54 68 65 20 22 4f 52 44 45 52 20 42 59 20 63 68  The "ORDER BY ch
26820 65 63 6b 69 6e 2e 6d 74 69 6d 65 20 44 45 53 43  eckin.mtime DESC
26830 22 20 74 65 72 6d 20 69 6e 20 74 68 65 20 72 65  " term in the re
26840 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20 6d  cursive-select m
26850 61 6b 65 73 0a 74 68 65 20 71 75 65 72 79 20 72  akes.the query r
26860 75 6e 20 6d 75 63 68 20 66 61 73 74 65 72 20 62  un much faster b
26870 79 20 70 72 65 76 65 6e 74 69 6e 67 20 69 74 20  y preventing it 
26880 66 72 6f 6d 20 66 6f 6c 6c 6f 77 69 6e 67 0a 62  from following.b
26890 72 61 6e 63 68 65 73 20 74 68 61 74 20 6d 65 72  ranches that mer
268a0 67 65 20 63 68 65 63 6b 69 6e 73 0a 66 72 6f 6d  ge checkins.from
268b0 20 6c 6f 6e 67 20 61 67 6f 2e 20 20 54 68 65 20   long ago.  The 
268c0 4f 52 44 45 52 20 42 59 20 66 6f 72 63 65 73 20  ORDER BY forces 
268d0 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65  the recursive-se
268e0 6c 65 63 74 20 74 6f 20 66 6f 63 75 73 0a 6f 6e  lect to focus.on
268f0 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
26900 20 63 68 65 63 6b 69 6e 73 2c 20 74 68 65 20 6f   checkins, the o
26910 6e 65 73 20 77 65 20 77 61 6e 74 2e 20 20 57 69  nes we want.  Wi
26920 74 68 6f 75 74 20 74 68 65 20 4f 52 44 45 52 20  thout the ORDER 
26930 42 59 0a 6f 6e 20 74 68 65 20 72 65 63 75 72 73  BY.on the recurs
26940 69 76 65 2d 73 65 6c 65 63 74 2c 20 6f 6e 65 20  ive-select, one 
26950 77 6f 75 6c 64 20 62 65 20 66 6f 72 63 65 64 20  would be forced 
26960 74 6f 20 63 6f 6d 70 75 74 65 20 74 68 65 20 63  to compute the c
26970 6f 6d 70 6c 65 74 65 20 73 65 74 20 6f 66 0a 74  omplete set of.t
26980 68 6f 75 73 61 6e 64 73 20 6f 66 20 61 6e 63 65  housands of ance
26990 73 74 6f 72 73 2c 20 73 6f 72 74 20 74 68 65 6d  stors, sort them
269a0 20 61 6c 6c 20 62 79 20 6d 74 69 6d 65 2c 20 74   all by mtime, t
269b0 68 65 6e 20 74 61 6b 65 20 74 68 65 20 74 6f 70  hen take the top
269c0 20 74 77 65 6e 74 79 2e 0a 54 68 65 20 4f 52 44   twenty..The ORD
269d0 45 52 20 42 59 20 65 73 73 65 6e 74 69 61 6c 6c  ER BY essentiall
269e0 79 20 73 65 74 73 20 75 70 20 61 20 70 72 69 6f  y sets up a prio
269f0 72 69 74 79 20 71 75 65 75 65 20 74 68 61 74 0a  rity queue that.
26a00 66 6f 72 63 65 73 20 74 68 65 20 72 65 63 75 72  forces the recur
26a10 73 69 76 65 20 71 75 65 72 79 20 74 6f 20 6c 6f  sive query to lo
26a20 6f 6b 20 61 74 20 74 68 65 20 6d 6f 73 74 20 72  ok at the most r
26a30 65 63 65 6e 74 20 61 6e 63 65 73 74 6f 72 73 20  ecent ancestors 
26a40 66 69 72 73 74 2c 0a 61 6c 6c 6f 77 69 6e 67 20  first,.allowing 
26a50 74 68 65 20 75 73 65 20 6f 66 20 61 20 4c 49 4d  the use of a LIM
26a60 49 54 20 63 6c 61 75 73 65 20 74 6f 20 72 65 73  IT clause to res
26a70 74 72 69 63 74 20 74 68 65 20 73 63 6f 70 65 20  trict the scope 
26a80 6f 66 20 74 68 65 0a 71 75 65 72 79 20 74 6f 20  of the.query to 
26a90 6a 75 73 74 20 74 68 65 20 63 68 65 63 6b 69 6e  just the checkin
26aa0 73 20 6f 66 20 69 6e 74 65 72 65 73 74 2e 0a 0a  s of interest...
26ab0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
26ac0 20 77 69 74 68 6f 72 64 65 72 62 79 3c 2f 74 63   withorderby</tc
26ad0 6c 3e 0a 3c 68 34 3e 43 6f 6e 74 72 6f 6c 6c 69  l>.<h4>Controlli
26ae0 6e 67 20 44 65 70 74 68 2d 46 69 72 73 74 20 56  ng Depth-First V
26af0 65 72 73 75 73 20 42 72 65 61 64 74 68 2d 46 69  ersus Breadth-Fi
26b00 72 73 74 20 53 65 61 72 63 68 20 4f 66 20 61 20  rst Search Of a 
26b10 54 72 65 65 0a 55 73 69 6e 67 20 4f 52 44 45 52  Tree.Using ORDER
26b20 20 42 59 3c 2f 68 34 3e 0a 0a 3c 70 3e 41 6e 20   BY</h4>..<p>An 
26b30 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
26b40 6f 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65  on the recursive
26b50 2d 73 65 6c 65 63 74 20 63 61 6e 20 62 65 20 75  -select can be u
26b60 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 0a 77  sed to control.w
26b70 68 65 74 68 65 72 20 74 68 65 20 73 65 61 72 63  hether the searc
26b80 68 20 6f 66 20 61 20 74 72 65 65 20 69 73 20 64  h of a tree is d
26b90 65 70 74 68 2d 66 69 72 73 74 20 6f 72 20 62 72  epth-first or br
26ba0 65 61 64 74 68 2d 66 69 72 73 74 2e 20 20 54 6f  eadth-first.  To
26bb0 0a 69 6c 6c 75 73 74 72 61 74 65 2c 20 77 65 20  .illustrate, we 
26bc0 77 69 6c 6c 20 75 73 65 20 61 20 76 61 72 69 61  will use a varia
26bd0 74 69 6f 6e 20 6f 6e 20 74 68 65 20 22 6f 72 67  tion on the "org
26be0 22 20 74 61 62 6c 65 20 66 72 6f 6d 20 61 6e 20  " table from an 
26bf0 65 78 61 6d 70 6c 65 0a 61 62 6f 76 65 2c 20 77  example.above, w
26c00 69 74 68 6f 75 74 20 74 68 65 20 22 68 65 69 67  ithout the "heig
26c10 68 74 22 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20  ht" column, and 
26c20 77 69 74 68 20 73 6f 6d 65 20 72 65 61 6c 20 64  with some real d
26c30 61 74 61 20 69 6e 73 65 72 74 65 64 3a 0a 0a 3c  ata inserted:..<
26c40 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
26c50 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72  .CREATE TABLE or
26c60 67 28 0a 20 20 6e 61 6d 65 20 54 45 58 54 20 50  g(.  name TEXT P
26c70 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 62 6f  RIMARY KEY,.  bo
26c80 73 73 20 54 45 58 54 20 52 45 46 45 52 45 4e 43  ss TEXT REFERENC
26c90 45 53 20 6f 72 67 0a 29 20 57 49 54 48 4f 55 54  ES org.) WITHOUT
26ca0 20 52 4f 57 49 44 3b 0a 49 4e 53 45 52 54 20 49   ROWID;.INSERT I
26cb0 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27  NTO org VALUES('
26cc0 41 6c 69 63 65 27 2c 4e 55 4c 4c 29 3b 0a 49 4e  Alice',NULL);.IN
26cd0 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41  SERT INTO org VA
26ce0 4c 55 45 53 28 27 42 6f 62 27 2c 27 41 6c 69 63  LUES('Bob','Alic
26cf0 65 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f  e');.INSERT INTO
26d00 20 6f 72 67 20 56 41 4c 55 45 53 28 27 43 69 6e   org VALUES('Cin
26d10 64 79 27 2c 27 41 6c 69 63 65 27 29 3b 0a 49 4e  dy','Alice');.IN
26d20 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41  SERT INTO org VA
26d30 4c 55 45 53 28 27 44 61 76 65 27 2c 27 42 6f 62  LUES('Dave','Bob
26d40 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20  ');.INSERT INTO 
26d50 6f 72 67 20 56 41 4c 55 45 53 28 27 45 6d 6d 61  org VALUES('Emma
26d60 27 2c 27 42 6f 62 27 29 3b 0a 49 4e 53 45 52 54  ','Bob');.INSERT
26d70 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53   INTO org VALUES
26d80 28 27 46 72 65 64 27 2c 27 43 69 6e 64 79 27 29  ('Fred','Cindy')
26d90 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72  ;.INSERT INTO or
26da0 67 20 56 41 4c 55 45 53 28 27 47 61 69 6c 27 2c  g VALUES('Gail',
26db0 27 43 69 6e 64 79 27 29 3b 0a 3c 2f 70 72 65 3e  'Cindy');.</pre>
26dc0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
26dd0 70 3e 48 65 72 65 20 69 73 20 61 20 71 75 65 72  p>Here is a quer
26de0 79 20 74 6f 20 73 68 6f 77 20 74 68 65 20 74 72  y to show the tr
26df0 65 65 20 73 74 72 75 63 74 75 72 65 20 69 6e 20  ee structure in 
26e00 61 20 62 72 65 61 64 74 68 2d 66 69 72 73 74 20  a breadth-first 
26e10 70 61 74 74 65 72 6e 3a 0a 0a 3c 62 6c 6f 63 6b  pattern:..<block
26e20 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48  quote><pre>.WITH
26e30 20 52 45 43 55 52 53 49 56 45 0a 20 20 75 6e 64   RECURSIVE.  und
26e40 65 72 5f 61 6c 69 63 65 28 6e 61 6d 65 2c 6c 65  er_alice(name,le
26e50 76 65 6c 29 20 41 53 20 28 0a 20 20 20 20 56 41  vel) AS (.    VA
26e60 4c 55 45 53 28 27 41 6c 69 63 65 27 2c 30 29 0a  LUES('Alice',0).
26e70 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20      UNION ALL.  
26e80 20 20 53 45 4c 45 43 54 20 6f 72 67 2e 6e 61 6d    SELECT org.nam
26e90 65 2c 20 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6c  e, under_alice.l
26ea0 65 76 65 6c 2b 31 0a 20 20 20 20 20 20 46 52 4f  evel+1.      FRO
26eb0 4d 20 6f 72 67 20 4a 4f 49 4e 20 75 6e 64 65 72  M org JOIN under
26ec0 5f 61 6c 69 63 65 20 4f 4e 20 6f 72 67 2e 62 6f  _alice ON org.bo
26ed0 73 73 3d 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6e  ss=under_alice.n
26ee0 61 6d 65 0a 20 20 20 20 20 4f 52 44 45 52 20 42  ame.     ORDER B
26ef0 59 20 32 0a 20 20 29 0a 53 45 4c 45 43 54 20 73  Y 2.  ).SELECT s
26f00 75 62 73 74 72 28 27 2e 2e 2e 2e 2e 2e 2e 2e 2e  ubstr('.........
26f10 2e 27 2c 31 2c 6c 65 76 65 6c 2a 33 29 20 7c 7c  .',1,level*3) ||
26f20 20 6e 61 6d 65 20 46 52 4f 4d 20 75 6e 64 65 72   name FROM under
26f30 5f 61 6c 69 63 65 3b 0a 3c 2f 70 72 65 3e 3c 2f  _alice;.</pre></
26f40 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
26f50 54 68 65 20 22 4f 52 44 45 52 20 42 59 20 32 22  The "ORDER BY 2"
26f60 20 28 77 68 69 63 68 20 6d 65 61 6e 73 20 74 68   (which means th
26f70 65 20 73 61 6d 65 20 61 73 20 22 4f 52 44 45 52  e same as "ORDER
26f80 20 42 59 20 75 6e 64 65 72 5f 61 6c 69 63 65 2e   BY under_alice.
26f90 6c 65 76 65 6c 2b 31 22 29 0a 63 61 75 73 65 73  level+1").causes
26fa0 20 68 69 67 68 65 72 20 6c 65 76 65 6c 73 20 69   higher levels i
26fb0 6e 20 74 68 65 20 6f 72 67 61 6e 69 7a 61 74 69  n the organizati
26fc0 6f 6e 20 63 68 61 72 74 20 28 77 69 74 68 20 73  on chart (with s
26fd0 6d 61 6c 6c 65 72 20 22 6c 65 76 65 6c 22 20 76  maller "level" v
26fe0 61 6c 75 65 73 29 0a 74 6f 20 62 65 20 70 72 6f  alues).to be pro
26ff0 63 65 73 73 65 64 20 66 69 72 73 74 2c 20 72 65  cessed first, re
27000 73 75 6c 74 69 6e 67 20 69 6e 20 61 20 62 72 65  sulting in a bre
27010 61 64 74 68 2d 66 69 72 73 74 20 73 65 61 72 63  adth-first searc
27020 68 2e 20 20 54 68 65 20 6f 75 74 70 75 74 20 69  h.  The output i
27030 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  s:..<blockquote>
27040 3c 70 72 65 3e 0a 41 6c 69 63 65 0a 2e 2e 2e 42  <pre>.Alice....B
27050 6f 62 0a 2e 2e 2e 43 69 6e 64 79 0a 2e 2e 2e 2e  ob....Cindy.....
27060 2e 2e 44 61 76 65 0a 2e 2e 2e 2e 2e 2e 45 6d 6d  ..Dave.......Emm
27070 61 0a 2e 2e 2e 2e 2e 2e 46 72 65 64 0a 2e 2e 2e  a.......Fred....
27080 2e 2e 2e 47 61 69 6c 0a 3c 2f 70 72 65 3e 3c 2f  ...Gail.</pre></
27090 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
270a0 42 75 74 20 69 66 20 77 65 20 63 68 61 6e 67 65  But if we change
270b0 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
270c0 61 75 73 65 20 74 6f 20 61 64 64 20 74 68 65 20  ause to add the 
270d0 22 44 45 53 43 22 20 6d 6f 64 69 66 69 65 72 2c  "DESC" modifier,
270e0 20 74 68 61 74 20 77 69 6c 6c 0a 63 61 75 73 65   that will.cause
270f0 20 6c 6f 77 65 72 20 6c 65 76 65 6c 73 20 69 6e   lower levels in
27100 20 74 68 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f   the organizatio
27110 6e 20 28 77 69 74 68 20 6c 61 72 67 65 72 20 22  n (with larger "
27120 6c 65 76 65 6c 22 20 76 61 6c 75 65 73 29 20 74  level" values) t
27130 6f 20 62 65 0a 70 72 6f 63 65 73 73 65 64 20 66  o be.processed f
27140 69 72 73 74 20 62 79 20 74 68 65 20 72 65 63 75  irst by the recu
27150 72 73 69 76 65 2d 73 65 6c 65 63 74 2c 20 72 65  rsive-select, re
27160 73 75 6c 74 69 6e 67 20 69 6e 20 61 20 64 65 70  sulting in a dep
27170 74 68 2d 66 69 72 73 74 20 73 65 61 72 63 68 3a  th-first search:
27180 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
27190 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49  re>.WITH RECURSI
271a0 56 45 0a 20 20 75 6e 64 65 72 5f 61 6c 69 63 65  VE.  under_alice
271b0 28 6e 61 6d 65 2c 6c 65 76 65 6c 29 20 41 53 20  (name,level) AS 
271c0 28 0a 20 20 20 20 56 41 4c 55 45 53 28 27 41 6c  (.    VALUES('Al
271d0 69 63 65 27 2c 30 29 0a 20 20 20 20 55 4e 49 4f  ice',0).    UNIO
271e0 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54  N ALL.    SELECT
271f0 20 6f 72 67 2e 6e 61 6d 65 2c 20 75 6e 64 65 72   org.name, under
27200 5f 61 6c 69 63 65 2e 6c 65 76 65 6c 2b 31 0a 20  _alice.level+1. 
27210 20 20 20 20 20 46 52 4f 4d 20 6f 72 67 20 4a 4f       FROM org JO
27220 49 4e 20 75 6e 64 65 72 5f 61 6c 69 63 65 20 4f  IN under_alice O
27230 4e 20 6f 72 67 2e 62 6f 73 73 3d 75 6e 64 65 72  N org.boss=under
27240 5f 61 6c 69 63 65 2e 6e 61 6d 65 0a 20 20 20 20  _alice.name.    
27250 20 4f 52 44 45 52 20 42 59 20 32 20 3c 62 3e 44   ORDER BY 2 <b>D
27260 45 53 43 3c 2f 62 3e 0a 20 20 29 0a 53 45 4c 45  ESC</b>.  ).SELE
27270 43 54 20 73 75 62 73 74 72 28 27 2e 2e 2e 2e 2e  CT substr('.....
27280 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65 76 65 6c 2a 33  .....',1,level*3
27290 29 20 7c 7c 20 6e 61 6d 65 20 46 52 4f 4d 20 75  ) || name FROM u
272a0 6e 64 65 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70 72  nder_alice;.</pr
272b0 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
272c0 0a 3c 70 3e 54 68 65 20 6f 75 74 70 75 74 20 6f  .<p>The output o
272d0 66 20 74 68 69 73 20 72 65 76 69 73 65 64 20 71  f this revised q
272e0 75 65 72 79 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b  uery is:..<block
272f0 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 41 6c 69 63  quote><pre>.Alic
27300 65 0a 2e 2e 2e 42 6f 62 0a 2e 2e 2e 2e 2e 2e 44  e....Bob.......D
27310 61 76 65 0a 2e 2e 2e 2e 2e 2e 45 6d 6d 61 0a 2e  ave.......Emma..
27320 2e 2e 43 69 6e 64 79 0a 2e 2e 2e 2e 2e 2e 46 72  ..Cindy.......Fr
27330 65 64 0a 2e 2e 2e 2e 2e 2e 47 61 69 6c 0a 3c 2f  ed.......Gail.</
27340 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
27350 3e 0a 0a 3c 70 3e 57 68 65 6e 20 74 68 65 20 4f  >..<p>When the O
27360 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
27370 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74  s omitted from t
27380 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c  he recursive-sel
27390 65 63 74 2c 20 74 68 65 0a 71 75 65 75 65 20 62  ect, the.queue b
273a0 65 68 61 76 65 73 20 61 73 20 61 20 46 49 46 4f  ehaves as a FIFO
273b0 2c 20 77 68 69 63 68 20 72 65 73 75 6c 74 73 20  , which results 
273c0 69 6e 20 61 20 62 72 65 61 64 74 68 2d 66 69 72  in a breadth-fir
273d0 73 74 20 73 65 61 72 63 68 2e 0a 0a 0a 3c 74 63  st search....<tc
273e0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6d 61  l>hd_fragment ma
273f0 6e 64 65 6c 62 72 6f 74 20 7b 63 6f 6d 70 75 74  ndelbrot {comput
27400 65 20 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74  e the Mandelbrot
27410 20 73 65 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e   set}</tcl>.<h4>
27420 4f 75 74 6c 61 6e 64 69 73 68 20 52 65 63 75 72  Outlandish Recur
27430 73 69 76 65 20 51 75 65 72 79 20 45 78 61 6d 70  sive Query Examp
27440 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65  les</h4>..<p>The
27450 20 66 6f 6c 6c 6f 77 69 6e 67 20 71 75 65 72 79   following query
27460 20 63 6f 6d 70 75 74 65 73 20 61 6e 20 61 70 70   computes an app
27470 72 6f 78 69 6d 61 74 69 6f 6e 20 6f 66 20 74 68  roximation of th
27480 65 20 4d 61 6e 64 65 6c 62 72 6f 74 20 53 65 74  e Mandelbrot Set
27490 0a 61 6e 64 20 6f 75 74 70 75 74 73 20 74 68 65  .and outputs the
274a0 20 72 65 73 75 6c 74 20 61 73 20 41 53 43 49 49   result as ASCII
274b0 2d 61 72 74 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  -art:..<blockquo
274c0 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45  te><pre>.WITH RE
274d0 43 55 52 53 49 56 45 0a 20 20 78 61 78 69 73 28  CURSIVE.  xaxis(
274e0 78 29 20 41 53 20 28 56 41 4c 55 45 53 28 2d 32  x) AS (VALUES(-2
274f0 2e 30 29 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45  .0) UNION ALL SE
27500 4c 45 43 54 20 78 2b 30 2e 30 35 20 46 52 4f 4d  LECT x+0.05 FROM
27510 20 78 61 78 69 73 20 57 48 45 52 45 20 78 26 6c   xaxis WHERE x&l
27520 74 3b 31 2e 32 29 2c 0a 20 20 79 61 78 69 73 28  t;1.2),.  yaxis(
27530 79 29 20 41 53 20 28 56 41 4c 55 45 53 28 2d 31  y) AS (VALUES(-1
27540 2e 30 29 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45  .0) UNION ALL SE
27550 4c 45 43 54 20 79 2b 30 2e 31 20 46 52 4f 4d 20  LECT y+0.1 FROM 
27560 79 61 78 69 73 20 57 48 45 52 45 20 79 26 6c 74  yaxis WHERE y&lt
27570 3b 31 2e 30 29 2c 0a 20 20 6d 28 69 74 65 72 2c  ;1.0),.  m(iter,
27580 20 63 78 2c 20 63 79 2c 20 78 2c 20 79 29 20 41   cx, cy, x, y) A
27590 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20 30  S (.    SELECT 0
275a0 2c 20 78 2c 20 79 2c 20 30 2e 30 2c 20 30 2e 30  , x, y, 0.0, 0.0
275b0 20 46 52 4f 4d 20 78 61 78 69 73 2c 20 79 61 78   FROM xaxis, yax
275c0 69 73 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c  is.    UNION ALL
275d0 0a 20 20 20 20 53 45 4c 45 43 54 20 69 74 65 72  .    SELECT iter
275e0 2b 31 2c 20 63 78 2c 20 63 79 2c 20 78 2a 78 2d  +1, cx, cy, x*x-
275f0 79 2a 79 20 2b 20 63 78 2c 20 32 2e 30 2a 78 2a  y*y + cx, 2.0*x*
27600 79 20 2b 20 63 79 20 46 52 4f 4d 20 6d 20 0a 20  y + cy FROM m . 
27610 20 20 20 20 57 48 45 52 45 20 28 78 2a 78 20 2b      WHERE (x*x +
27620 20 79 2a 79 29 20 26 6c 74 3b 20 34 2e 30 20 41   y*y) &lt; 4.0 A
27630 4e 44 20 69 74 65 72 26 6c 74 3b 32 38 0a 20 20  ND iter&lt;28.  
27640 29 2c 0a 20 20 6d 32 28 69 74 65 72 2c 20 63 78  ),.  m2(iter, cx
27650 2c 20 63 79 29 20 41 53 20 28 0a 20 20 20 20 53  , cy) AS (.    S
27660 45 4c 45 43 54 20 6d 61 78 28 69 74 65 72 29 2c  ELECT max(iter),
27670 20 63 78 2c 20 63 79 20 46 52 4f 4d 20 6d 20 47   cx, cy FROM m G
27680 52 4f 55 50 20 42 59 20 63 78 2c 20 63 79 0a 20  ROUP BY cx, cy. 
27690 20 29 2c 0a 20 20 61 28 74 29 20 41 53 20 28 0a   ),.  a(t) AS (.
276a0 20 20 20 20 53 45 4c 45 43 54 20 67 72 6f 75 70      SELECT group
276b0 5f 63 6f 6e 63 61 74 28 20 73 75 62 73 74 72 28  _concat( substr(
276c0 27 20 2e 2b 2a 23 27 2c 20 31 2b 6d 69 6e 28 69  ' .+*#', 1+min(i
276d0 74 65 72 2f 37 2c 34 29 2c 20 31 29 2c 20 27 27  ter/7,4), 1), ''
276e0 29 20 0a 20 20 20 20 46 52 4f 4d 20 6d 32 20 47  ) .    FROM m2 G
276f0 52 4f 55 50 20 42 59 20 63 79 0a 20 20 29 0a 53  ROUP BY cy.  ).S
27700 45 4c 45 43 54 20 67 72 6f 75 70 5f 63 6f 6e 63  ELECT group_conc
27710 61 74 28 72 74 72 69 6d 28 74 29 2c 78 27 30 61  at(rtrim(t),x'0a
27720 27 29 20 46 52 4f 4d 20 61 3b 0a 3c 2f 70 72 65  ') FROM a;.</pre
27730 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
27740 3c 70 3e 49 6e 20 74 68 69 73 20 71 75 65 72 79  <p>In this query
27750 2c 20 74 68 65 20 22 78 61 78 69 73 22 20 61 6e  , the "xaxis" an
27760 64 20 22 79 61 78 69 73 22 20 43 54 45 73 20 64  d "yaxis" CTEs d
27770 65 66 69 6e 65 20 74 68 65 20 67 72 69 64 20 6f  efine the grid o
27780 66 20 70 6f 69 6e 74 73 20 66 6f 72 0a 77 68 69  f points for.whi
27790 63 68 20 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f  ch the Mandelbro
277a0 74 20 53 65 74 20 77 69 6c 6c 20 62 65 20 61 70  t Set will be ap
277b0 70 72 6f 78 69 6d 61 74 65 64 2e 20 20 45 61 63  proximated.  Eac
277c0 68 20 72 6f 77 20 69 6e 20 74 68 65 0a 22 6d 28  h row in the."m(
277d0 69 74 65 72 2c 63 78 2c 63 79 2c 78 2c 79 29 22  iter,cx,cy,x,y)"
277e0 20 43 54 45 20 6d 65 61 6e 73 20 74 68 61 74 20   CTE means that 
277f0 61 66 74 65 72 20 22 69 74 65 72 22 20 69 74 65  after "iter" ite
27800 72 61 74 69 6f 6e 73 2c 20 74 68 65 20 4d 61 6e  rations, the Man
27810 64 65 6c 62 72 6f 74 0a 69 74 65 72 61 74 69 6f  delbrot.iteratio
27820 6e 20 73 74 61 72 74 69 6e 67 20 61 74 20 63 78  n starting at cx
27830 2c 63 79 20 68 61 73 20 72 65 61 63 68 65 64 20  ,cy has reached 
27840 70 6f 69 6e 74 20 78 2c 79 2e 20 20 54 68 65 20  point x,y.  The 
27850 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74  number of iterat
27860 69 6f 6e 73 0a 69 6e 20 74 68 69 73 20 65 78 61  ions.in this exa
27870 6d 70 6c 65 20 69 73 20 6c 69 6d 69 74 65 64 20  mple is limited 
27880 74 6f 20 32 38 20 28 77 68 69 63 68 20 73 65 76  to 28 (which sev
27890 65 72 65 6c 79 20 6c 69 6d 69 74 73 20 74 68 65  erely limits the
278a0 20 72 65 73 6f 6c 75 74 69 6f 6e 20 6f 66 0a 74   resolution of.t
278b0 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 2c 20  he computation, 
278c0 62 75 74 20 69 73 20 73 75 66 66 69 63 69 65 6e  but is sufficien
278d0 74 20 66 6f 72 20 6c 6f 77 2d 72 65 73 6f 6c 75  t for low-resolu
278e0 74 69 6f 6e 20 41 53 43 49 49 2d 61 72 74 20 6f  tion ASCII-art o
278f0 75 74 70 75 74 29 2e 0a 54 68 65 20 22 6d 32 28  utput)..The "m2(
27900 69 74 65 72 2c 63 78 2c 63 79 29 22 20 43 54 45  iter,cx,cy)" CTE
27910 20 68 6f 6c 64 73 20 74 68 65 20 6d 61 78 69 6d   holds the maxim
27920 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65  um number of ite
27930 72 61 74 69 6f 6e 73 20 72 65 61 63 68 65 64 20  rations reached 
27940 77 68 65 6e 0a 73 74 61 72 74 69 6e 67 20 61 74  when.starting at
27950 20 70 6f 69 6e 74 20 63 78 2c 63 79 2e 0a 46 69   point cx,cy..Fi
27960 6e 61 6c 6c 79 2c 20 65 61 63 68 20 72 6f 77 20  nally, each row 
27970 69 6e 20 74 68 65 20 22 61 28 74 29 22 20 43 54  in the "a(t)" CT
27980 45 20 68 6f 6c 64 73 20 61 20 73 74 72 69 6e 67  E holds a string
27990 20 0a 77 68 69 63 68 20 69 73 20 61 20 73 69 6e   .which is a sin
279a0 67 6c 65 20 6c 69 6e 65 20 6f 66 20 74 68 65 20  gle line of the 
279b0 6f 75 74 70 75 74 20 41 53 43 49 49 2d 61 72 74  output ASCII-art
279c0 2e 0a 54 68 65 20 53 45 4c 45 43 54 20 73 74 61  ..The SELECT sta
279d0 74 65 6d 65 6e 74 20 61 74 20 74 68 65 20 65 6e  tement at the en
279e0 64 20 6a 75 73 74 20 71 75 65 72 69 65 73 20 74  d just queries t
279f0 68 65 20 22 61 22 20 43 54 45 20 74 6f 0a 72 65  he "a" CTE to.re
27a00 74 72 69 65 76 65 20 61 6c 6c 20 6c 69 6e 65 73  trieve all lines
27a10 20 6f 66 20 41 53 43 49 49 2d 61 72 74 2c 20 6f   of ASCII-art, o
27a20 6e 65 20 62 79 20 6f 6e 65 2e 0a 0a 3c 70 3e 52  ne by one...<p>R
27a30 75 6e 6e 69 6e 67 20 74 68 65 20 71 75 65 72 79  unning the query
27a40 20 61 62 6f 76 65 20 69 6e 20 61 6e 20 53 51 4c   above in an SQL
27a50 69 74 65 20 5b 63 6f 6d 6d 61 6e 64 2d 6c 69 6e  ite [command-lin
27a60 65 20 73 68 65 6c 6c 5d 20 72 65 73 75 6c 74 73  e shell] results
27a70 0a 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  .in the followin
27a80 67 20 6f 75 74 70 75 74 3a 0a 0a 3c 62 6c 6f 63  g output:..<bloc
27a90 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 20 20 20  kquote><pre>.   
27aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ac0 20 2e 2e 2e 2e 23 0a 20 20 20 20 20 20 20 20 20   ....#.         
27ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ae0 20 20 20 20 20 20 20 20 20 20 2e 2e 23 2a 2e 2e            ..#*..
27af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b10 20 20 2e 2e 2b 23 23 23 23 2b 2e 0a 20 20 20 20    ..+####+..    
27b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b30 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2b          .......+
27b40 23 23 23 23 2e 2e 2e 2e 20 20 20 2b 0a 20 20 20  ####....   +.   
27b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b60 20 20 20 20 20 20 20 20 2e 2e 23 23 2b 2a 23 23          ..##+*##
27b70 23 23 23 23 23 23 23 23 2b 2e 2b 2b 2b 2b 0a 20  ########+.++++. 
27b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b90 20 20 20 20 20 20 20 20 20 2e 2b 2e 23 23 23 23           .+.####
27ba0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e  ##############+.
27bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e  .              .
27bc0 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23  ............+###
27bd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27be0 2b 2e 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +.+.            
27bf0 20 20 2e 2e 2b 2b 2e 2e 23 2e 2e 2e 2e 2e 2a 23    ..++..#.....*#
27c00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27c10 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20 20  ####+..         
27c20 20 20 20 20 2e 2e 2e 2b 23 23 23 23 23 23 23 2b      ...+#######+
27c30 2b 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  +###############
27c40 23 23 23 23 23 23 23 23 2e 0a 20 20 20 20 20 20  ########..      
27c50 20 20 20 20 2e 2e 2e 2e 2b 2a 23 23 23 23 23 23      ....+*######
27c60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27c70 23 23 23 23 23 23 23 23 23 23 2e 0a 20 23 23 23  ##########.. ###
27c80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27c90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27ca0 23 23 23 23 23 23 23 23 23 23 2e 2e 2e 0a 20 20  ##########....  
27cb0 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2b 2a 23 23          ....+*##
27cc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27cd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2e 0a  ##############..
27ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e               ...
27cf0 2b 23 23 23 23 23 23 23 2b 2b 23 23 23 23 23 23  +#######++######
27d00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27d10 23 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..             
27d20 20 2e 2e 2b 2b 2e 2e 23 2e 2e 2e 2e 2e 2a 23 23   ..++..#.....*##
27d30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27d40 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20  ###+..          
27d50 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e      ............
27d60 2e 2b 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .+##############
27d70 23 23 23 23 23 2b 2e 2b 0a 20 20 20 20 20 20 20  #####+.+.       
27d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d90 20 20 20 2e 2b 2e 23 23 23 23 23 23 23 23 23 23     .+.##########
27da0 23 23 23 23 23 23 23 23 2b 2e 0a 20 20 20 20 20  ########+..     
27db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27dc0 20 20 20 20 20 20 2e 2e 23 23 2b 2a 23 23 23 23        ..##+*####
27dd0 23 23 23 23 23 23 2b 2e 2b 2b 2b 2b 0a 20 20 20  ######+.++++.   
27de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27df0 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e           .......
27e00 2b 23 23 23 23 2e 2e 2e 2e 20 20 20 2b 0a 20 20  +####....   +.  
27e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
27e30 2e 2b 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20  .+####+..       
27e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e50 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 23 2a              ..#*
27e60 2e 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
27e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e80 20 20 20 20 20 20 20 2e 2e 2e 2e 23 0a 20 20 20         ....#.   
27e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27eb0 20 2b 2e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63   +..</pre></bloc
27ec0 6b 71 75 6f 74 65 3e 0a 0a 3c 74 63 6c 3e 68 64  kquote>..<tcl>hd
27ed0 5f 66 72 61 67 6d 65 6e 74 20 73 75 64 6f 6b 75  _fragment sudoku
27ee0 20 7b 73 6f 6c 76 65 20 53 75 64 6f 6b 75 20 70   {solve Sudoku p
27ef0 75 7a 7a 6c 65 73 7d 20 3c 2f 74 63 6c 3e 0a 3c  uzzles} </tcl>.<
27f00 70 3e 54 68 69 73 20 6e 65 78 74 20 71 75 65 72  p>This next quer
27f10 79 20 73 6f 6c 76 65 73 20 61 20 53 75 64 6f 6b  y solves a Sudok
27f20 75 20 70 75 7a 7a 6c 65 2e 20 20 54 68 65 20 73  u puzzle.  The s
27f30 74 61 74 65 20 6f 66 20 74 68 65 20 70 75 7a 7a  tate of the puzz
27f40 6c 65 20 69 73 0a 64 65 66 69 6e 65 64 20 62 79  le is.defined by
27f50 20 61 6e 20 38 31 2d 63 68 61 72 61 63 74 65 72   an 81-character
27f60 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62   string formed b
27f70 79 20 72 65 61 64 69 6e 67 20 65 6e 74 72 69 65  y reading entrie
27f80 73 20 66 72 6f 6d 20 74 68 65 0a 70 75 7a 7a 6c  s from the.puzzl
27f90 65 20 62 6f 78 20 72 6f 77 20 62 79 20 72 6f 77  e box row by row
27fa0 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
27fb0 67 68 74 20 61 6e 64 20 74 68 65 6e 20 66 72 6f  ght and then fro
27fc0 6d 20 74 6f 70 20 74 6f 20 62 6f 74 74 6f 6d 2e  m top to bottom.
27fd0 0a 42 6c 61 6e 6b 20 73 71 75 61 72 65 73 20 69  .Blank squares i
27fe0 6e 20 74 68 65 20 70 75 7a 7a 6c 65 20 61 72 65  n the puzzle are
27ff0 20 64 65 6e 6f 74 65 64 20 62 79 20 61 20 22 2e   denoted by a ".
28000 22 20 63 68 61 72 61 63 74 65 72 2e 20 20 0a 54  " character.  .T
28010 68 75 73 20 74 68 65 20 69 6e 70 75 74 20 73 74  hus the input st
28020 72 69 6e 67 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  ring:..<blockquo
28030 74 65 3e 0a 35 33 2e 2e 37 2e 2e 2e 2e 36 2e 2e  te>.53..7....6..
28040 31 39 35 2e 2e 2e 2e 39 38 2e 2e 2e 2e 36 2e 38  195....98....6.8
28050 2e 2e 2e 36 2e 2e 2e 33 34 2e 2e 38 2e 33 2e 2e  ...6...34..8.3..
28060 31 37 2e 2e 2e 32 2e 2e 2e 36 2e 36 2e 2e 2e 2e  17...2...6.6....
28070 32 38 2e 2e 2e 2e 34 31 39 2e 2e 35 2e 2e 2e 2e  28....419..5....
28080 38 2e 2e 37 39 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  8..79.</blockquo
28090 74 65 3e 0a 0a 3c 70 3e 43 6f 72 72 65 73 70 6f  te>..<p>Correspo
280a0 6e 64 73 20 74 6f 20 61 20 70 75 7a 7a 6c 65 20  nds to a puzzle 
280b0 6c 69 6b 65 20 74 68 69 73 3a 0a 0a 3c 62 6c 6f  like this:..<blo
280c0 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20  ckquote>.<table 
280d0 62 6f 72 64 65 72 3d 22 31 22 20 63 65 6c 6c 70  border="1" cellp
280e0 61 64 64 69 6e 67 3d 22 35 22 3e 0a 3c 74 72 3e  adding="5">.<tr>
280f0 3c 74 64 3e 35 3c 74 64 3e 33 3c 74 64 3e 20 3c  <td>5<td>3<td> <
28100 74 64 3e 20 3c 74 64 3e 37 3c 74 64 3e 20 3c 74  td> <td>7<td> <t
28110 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 0a 3c 74 72  d> <td> <td>.<tr
28120 3e 3c 74 64 3e 36 3c 74 64 3e 20 3c 74 64 3e 20  ><td>6<td> <td> 
28130 3c 74 64 3e 31 3c 74 64 3e 39 3c 74 64 3e 35 3c  <td>1<td>9<td>5<
28140 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 0a 3c 74  td> <td> <td>.<t
28150 72 3e 3c 74 64 3e 20 3c 74 64 3e 39 3c 74 64 3e  r><td> <td>9<td>
28160 38 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20  8<td> <td> <td> 
28170 3c 74 64 3e 20 3c 74 64 3e 36 3c 74 64 3e 0a 3c  <td> <td>6<td>.<
28180 74 72 3e 3c 74 64 3e 38 3c 74 64 3e 20 3c 74 64  tr><td>8<td> <td
28190 3e 20 3c 74 64 3e 20 3c 74 64 3e 36 3c 74 64 3e  > <td> <td>6<td>
281a0 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 33   <td> <td> <td>3
281b0 0a 3c 74 72 3e 3c 74 64 3e 34 3c 74 64 3e 20 3c  .<tr><td>4<td> <
281c0 74 64 3e 20 3c 74 64 3e 38 3c 74 64 3e 20 3c 74  td> <td>8<td> <t
281d0 64 3e 33 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>3<td> <td> <td
281e0 3e 31 0a 3c 74 72 3e 3c 74 64 3e 37 3c 74 64 3e  >1.<tr><td>7<td>
281f0 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 32   <td> <td> <td>2
28200 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
28210 74 64 3e 36 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74  td>6.<tr><td> <t
28220 64 3e 36 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>6<td> <td> <td
28230 3e 20 3c 74 64 3e 20 3c 74 64 3e 32 3c 74 64 3e  > <td> <td>2<td>
28240 38 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 20 3c  8<td>.<tr><td> <
28250 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 34 3c 74  td> <td> <td>4<t
28260 64 3e 31 3c 74 64 3e 39 3c 74 64 3e 20 3c 74 64  d>1<td>9<td> <td
28270 3e 20 3c 74 64 3e 35 0a 3c 74 72 3e 3c 74 64 3e  > <td>5.<tr><td>
28280 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20   <td> <td> <td> 
28290 3c 74 64 3e 38 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>8<td> <td> <
282a0 74 64 3e 37 3c 74 64 3e 39 0a 3c 2f 74 61 62 6c  td>7<td>9.</tabl
282b0 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  e>.</blockquote>
282c0 0a 0a 3c 70 3e 54 68 69 73 20 69 73 20 74 68 65  ..<p>This is the
282d0 20 71 75 65 72 79 20 74 68 61 74 20 73 6f 6c 76   query that solv
282e0 65 73 20 74 68 65 20 70 75 7a 7a 6c 65 3a 0a 0a  es the puzzle:..
282f0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
28300 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45  >.WITH RECURSIVE
28310 0a 20 20 69 6e 70 75 74 28 73 75 64 29 20 41 53  .  input(sud) AS
28320 20 28 0a 20 20 20 20 56 41 4c 55 45 53 28 27 35   (.    VALUES('5
28330 33 2e 2e 37 2e 2e 2e 2e 36 2e 2e 31 39 35 2e 2e  3..7....6..195..
28340 2e 2e 39 38 2e 2e 2e 2e 36 2e 38 2e 2e 2e 36 2e  ..98....6.8...6.
28350 2e 2e 33 34 2e 2e 38 2e 33 2e 2e 31 37 2e 2e 2e  ..34..8.3..17...
28360 32 2e 2e 2e 36 2e 36 2e 2e 2e 2e 32 38 2e 2e 2e  2...6.6....28...
28370 2e 34 31 39 2e 2e 35 2e 2e 2e 2e 38 2e 2e 37 39  .419..5....8..79
28380 27 29 0a 20 20 29 2c 0a 20 20 64 69 67 69 74 73  ').  ),.  digits
28390 28 7a 2c 20 6c 70 29 20 41 53 20 28 0a 20 20 20  (z, lp) AS (.   
283a0 20 56 41 4c 55 45 53 28 27 31 27 2c 20 31 29 0a   VALUES('1', 1).
283b0 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45      UNION ALL SE
283c0 4c 45 43 54 0a 20 20 20 20 43 41 53 54 28 6c 70  LECT.    CAST(lp
283d0 2b 31 20 41 53 20 54 45 58 54 29 2c 20 6c 70 2b  +1 AS TEXT), lp+
283e0 31 20 46 52 4f 4d 20 64 69 67 69 74 73 20 57 48  1 FROM digits WH
283f0 45 52 45 20 6c 70 26 6c 74 3b 39 0a 20 20 29 2c  ERE lp&lt;9.  ),
28400 0a 20 20 78 28 73 2c 20 69 6e 64 29 20 41 53 20  .  x(s, ind) AS 
28410 28 0a 20 20 20 20 53 45 4c 45 43 54 20 73 75 64  (.    SELECT sud
28420 2c 20 69 6e 73 74 72 28 73 75 64 2c 20 27 2e 27  , instr(sud, '.'
28430 29 20 46 52 4f 4d 20 69 6e 70 75 74 0a 20 20 20  ) FROM input.   
28440 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53   UNION ALL.    S
28450 45 4c 45 43 54 0a 20 20 20 20 20 20 73 75 62 73  ELECT.      subs
28460 74 72 28 73 2c 20 31 2c 20 69 6e 64 2d 31 29 20  tr(s, 1, ind-1) 
28470 7c 7c 20 7a 20 7c 7c 20 73 75 62 73 74 72 28 73  || z || substr(s
28480 2c 20 69 6e 64 2b 31 29 2c 0a 20 20 20 20 20 20  , ind+1),.      
28490 69 6e 73 74 72 28 20 73 75 62 73 74 72 28 73 2c  instr( substr(s,
284a0 20 31 2c 20 69 6e 64 2d 31 29 20 7c 7c 20 7a 20   1, ind-1) || z 
284b0 7c 7c 20 73 75 62 73 74 72 28 73 2c 20 69 6e 64  || substr(s, ind
284c0 2b 31 29 2c 20 27 2e 27 20 29 0a 20 20 20 20 20  +1), '.' ).     
284d0 46 52 4f 4d 20 78 2c 20 64 69 67 69 74 73 20 41  FROM x, digits A
284e0 53 20 7a 0a 20 20 20 20 57 48 45 52 45 20 69 6e  S z.    WHERE in
284f0 64 3e 30 0a 20 20 20 20 20 20 41 4e 44 20 4e 4f  d>0.      AND NO
28500 54 20 45 58 49 53 54 53 20 28 0a 20 20 20 20 20  T EXISTS (.     
28510 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 31 0a         SELECT 1.
28520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 52                FR
28530 4f 4d 20 64 69 67 69 74 73 20 41 53 20 6c 70 0a  OM digits AS lp.
28540 20 20 20 20 20 20 20 20 20 20 20 20 20 57 48 45               WHE
28550 52 45 20 7a 2e 7a 20 3d 20 73 75 62 73 74 72 28  RE z.z = substr(
28560 73 2c 20 28 28 69 6e 64 2d 31 29 2f 39 29 2a 39  s, ((ind-1)/9)*9
28570 20 2b 20 6c 70 2c 20 31 29 0a 20 20 20 20 20 20   + lp, 1).      
28580 20 20 20 20 20 20 20 20 20 20 4f 52 20 7a 2e 7a            OR z.z
28590 20 3d 20 73 75 62 73 74 72 28 73 2c 20 28 28 69   = substr(s, ((i
285a0 6e 64 2d 31 29 25 39 29 20 2b 20 28 6c 70 2d 31  nd-1)%9) + (lp-1
285b0 29 2a 39 20 2b 20 31 2c 20 31 29 0a 20 20 20 20  )*9 + 1, 1).    
285c0 20 20 20 20 20 20 20 20 20 20 20 20 4f 52 20 7a              OR z
285d0 2e 7a 20 3d 20 73 75 62 73 74 72 28 73 2c 20 28  .z = substr(s, (
285e0 28 28 69 6e 64 2d 31 29 2f 33 29 20 25 20 33 29  ((ind-1)/3) % 3)
285f0 20 2a 20 33 0a 20 20 20 20 20 20 20 20 20 20 20   * 3.           
28600 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 28               + (
28610 28 69 6e 64 2d 31 29 2f 32 37 29 20 2a 20 32 37  (ind-1)/27) * 27
28620 20 2b 20 6c 70 0a 20 20 20 20 20 20 20 20 20 20   + lp.          
28630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
28640 28 28 6c 70 2d 31 29 20 2f 20 33 29 20 2a 20 36  ((lp-1) / 3) * 6
28650 2c 20 31 29 0a 20 20 20 20 20 20 20 20 20 29 0a  , 1).         ).
28660 20 20 29 0a 53 45 4c 45 43 54 20 73 20 46 52 4f    ).SELECT s FRO
28670 4d 20 78 20 57 48 45 52 45 20 69 6e 64 3d 30 3b  M x WHERE ind=0;
28680 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
28690 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 22 69 6e  ote>..<p>The "in
286a0 70 75 74 22 20 43 54 45 20 64 65 66 69 6e 65 73  put" CTE defines
286b0 20 74 68 65 20 69 6e 70 75 74 20 70 75 7a 7a 6c   the input puzzl
286c0 65 2e 0a 54 68 65 20 22 64 69 67 69 74 73 22 20  e..The "digits" 
286d0 43 54 45 20 64 65 66 69 6e 65 73 20 61 20 74 61  CTE defines a ta
286e0 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73 20 61  ble that holds a
286f0 6c 6c 20 64 69 67 69 74 73 20 62 65 74 77 65 65  ll digits betwee
28700 6e 20 31 20 61 6e 64 20 39 2e 0a 54 68 65 20 77  n 1 and 9..The w
28710 6f 72 6b 20 6f 66 20 73 6f 6c 76 69 6e 67 20 74  ork of solving t
28720 68 65 20 70 75 7a 7a 6c 65 20 69 73 20 75 6e 64  he puzzle is und
28730 65 72 74 61 6b 65 6e 20 62 79 20 74 68 65 20 22  ertaken by the "
28740 78 22 20 43 54 45 2e 0a 41 6e 20 65 6e 74 72 79  x" CTE..An entry
28750 20 69 6e 20 78 28 73 2c 69 6e 64 29 20 6d 65 61   in x(s,ind) mea
28760 6e 73 20 74 68 61 74 20 74 68 65 20 38 31 2d 63  ns that the 81-c
28770 68 61 72 61 63 74 65 72 20 73 74 72 69 6e 67 20  haracter string 
28780 22 73 22 20 69 73 20 61 20 76 61 6c 69 64 0a 73  "s" is a valid.s
28790 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 20 28 69 74  udoku puzzle (it
287a0 20 68 61 73 20 6e 6f 20 63 6f 6e 66 6c 69 63 74   has no conflict
287b0 73 29 20 61 6e 64 20 74 68 61 74 20 74 68 65 20  s) and that the 
287c0 66 69 72 73 74 20 75 6e 6b 6e 6f 77 6e 20 63 68  first unknown ch
287d0 61 72 61 63 74 65 72 0a 69 73 20 61 74 20 70 6f  aracter.is at po
287e0 73 69 74 69 6f 6e 20 22 69 6e 64 22 2c 20 6f 72  sition "ind", or
287f0 20 69 6e 64 3d 3d 30 20 69 66 20 61 6c 6c 20 63   ind==0 if all c
28800 68 61 72 61 63 74 65 72 20 70 6f 73 69 74 69 6f  haracter positio
28810 6e 73 20 61 72 65 20 66 69 6c 6c 65 64 20 69 6e  ns are filled in
28820 2e 0a 54 68 65 20 67 6f 61 6c 2c 20 74 68 65 6e  ..The goal, then
28830 2c 20 69 73 20 74 6f 20 63 6f 6d 70 75 74 65 20  , is to compute 
28840 65 6e 74 72 69 65 73 20 66 6f 72 20 22 78 22 20  entries for "x" 
28850 77 69 74 68 20 61 6e 20 22 69 6e 64 22 20 6f 66  with an "ind" of
28860 20 30 2e 0a 0a 3c 70 3e 54 68 65 20 73 6f 6c 76   0...<p>The solv
28870 65 72 20 77 6f 72 6b 73 20 62 79 20 61 64 64 69  er works by addi
28880 6e 67 20 6e 65 77 20 65 6e 74 72 69 65 73 20 74  ng new entries t
28890 6f 20 74 68 65 20 22 78 22 20 72 65 63 75 72 73  o the "x" recurs
288a0 69 76 65 20 74 61 62 6c 65 2e 0a 47 69 76 65 6e  ive table..Given
288b0 20 70 72 69 6f 72 20 65 6e 74 72 69 65 73 2c 20   prior entries, 
288c0 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65  the recursive-se
288d0 6c 65 63 74 20 74 72 69 65 73 20 74 6f 20 66 69  lect tries to fi
288e0 6c 6c 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6e  ll in a single n
288f0 65 77 0a 70 6f 73 69 74 69 6f 6e 20 77 69 74 68  ew.position with
28900 20 61 6c 6c 20 76 61 6c 75 65 73 20 62 65 74 77   all values betw
28910 65 65 6e 20 31 20 61 6e 64 20 39 20 74 68 61 74  een 1 and 9 that
28920 20 61 63 74 75 61 6c 6c 79 20 77 6f 72 6b 20 69   actually work i
28930 6e 20 74 68 61 74 0a 70 6f 73 69 74 69 6f 6e 2e  n that.position.
28940 20 20 54 68 65 20 63 6f 6d 70 6c 69 63 61 74 65    The complicate
28950 64 20 22 4e 4f 54 20 45 58 49 53 54 53 22 20 73  d "NOT EXISTS" s
28960 75 62 71 75 65 72 79 20 69 73 20 74 68 65 20 6d  ubquery is the m
28970 61 67 69 63 20 74 68 61 74 0a 66 69 67 75 72 65  agic that.figure
28980 73 20 6f 75 74 20 77 68 65 74 68 65 72 20 6f 72  s out whether or
28990 20 6e 6f 74 20 65 61 63 68 20 63 61 6e 64 69 64   not each candid
289a0 61 74 65 20 22 73 22 20 73 74 72 69 6e 67 20 69  ate "s" string i
289b0 73 20 61 20 76 61 6c 69 64 0a 73 75 64 6f 6b 75  s a valid.sudoku
289c0 20 70 75 7a 7a 6c 65 20 6f 72 20 6e 6f 74 2e 0a   puzzle or not..
289d0 0a 3c 70 3e 54 68 65 20 66 69 6e 61 6c 20 61 6e  .<p>The final an
289e0 73 77 65 72 20 69 73 20 66 6f 75 6e 64 20 62 79  swer is found by
289f0 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 73   looking for a s
28a00 74 72 69 6e 67 20 77 69 74 68 20 69 6e 64 3d 3d  tring with ind==
28a10 30 2e 0a 49 66 20 74 68 65 20 6f 72 69 67 69 6e  0..If the origin
28a20 61 6c 20 73 75 64 6f 6b 75 20 70 72 6f 62 6c 65  al sudoku proble
28a30 6d 20 64 69 64 20 6e 6f 74 20 68 61 76 65 20 61  m did not have a
28a40 20 75 6e 69 71 75 65 20 73 6f 6c 75 74 69 6f 6e   unique solution
28a50 2c 20 74 68 65 6e 0a 74 68 65 20 71 75 65 72 79  , then.the query
28a60 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 61 6c 6c   will return all
28a70 20 70 6f 73 73 69 62 6c 65 20 73 6f 6c 75 74 69   possible soluti
28a80 6f 6e 73 2e 20 20 49 66 20 74 68 65 20 6f 72 69  ons.  If the ori
28a90 67 69 6e 61 6c 20 70 72 6f 62 6c 65 6d 0a 77 61  ginal problem.wa
28aa0 73 20 75 6e 73 6f 6c 76 61 62 6c 65 2c 20 74 68  s unsolvable, th
28ab0 65 6e 20 6e 6f 20 72 6f 77 73 20 77 69 6c 6c 20  en no rows will 
28ac0 62 65 20 72 65 74 75 72 6e 65 64 2e 20 20 49 6e  be returned.  In
28ad0 20 74 68 69 73 20 63 61 73 65 2c 20 74 68 65 20   this case, the 
28ae0 75 6e 69 71 75 65 0a 61 6e 73 77 65 72 20 69 73  unique.answer is
28af0 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  :..<blockquote>.
28b00 35 33 34 36 37 38 39 31 32 36 37 32 31 39 35 33  5346789126721953
28b10 34 38 31 39 38 33 34 32 35 36 37 38 35 39 37 36  4819834256785976
28b20 31 34 32 33 34 32 36 38 35 33 37 39 31 37 31 33  1423426853791713
28b30 39 32 34 38 35 36 39 36 31 35 33 37 32 38 34 32  9248569615372842
28b40 38 37 34 31 39 36 33 35 33 34 35 32 38 36 31 37  8741963534528617
28b50 39 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  9.</blockquote>.
28b60 0a 3c 70 3e 54 68 65 20 73 6f 6c 75 74 69 6f 6e  .<p>The solution
28b70 20 77 61 73 20 63 6f 6d 70 75 74 65 64 20 69 6e   was computed in
28b80 20 6c 65 73 73 20 74 68 61 6e 20 33 30 30 20 6d   less than 300 m
28b90 69 6c 6c 69 73 65 63 6f 6e 64 73 20 6f 6e 20 61  illiseconds on a
28ba0 20 6d 6f 64 65 72 6e 0a 77 6f 72 6b 73 74 61 74   modern.workstat
28bb0 69 6f 6e 2e 0a 0a 3c 68 33 3e 4c 69 6d 69 74 61  ion...<h3>Limita
28bc0 74 69 6f 6e 73 20 41 6e 64 20 43 61 76 65 61 74  tions And Caveat
28bd0 73 3c 2f 68 33 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69  s</h3>..<ul>.<li
28be0 3e 3c 70 3e 0a 54 68 65 20 57 49 54 48 20 63 6c  ><p>.The WITH cl
28bf0 61 75 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 75  ause cannot be u
28c00 73 65 64 20 77 69 74 68 69 6e 20 61 20 5b 43 52  sed within a [CR
28c10 45 41 54 45 20 54 52 49 47 47 45 52 5d 2e 0a 3c  EATE TRIGGER]..<
28c20 6c 69 3e 3c 70 3e 0a 54 68 65 20 57 49 54 48 20  li><p>.The WITH 
28c30 63 6c 61 75 73 65 20 6d 75 73 74 20 61 70 70 65  clause must appe
28c40 61 72 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  ar at the beginn
28c50 69 6e 67 20 6f 66 20 61 20 74 6f 70 2d 6c 65 76  ing of a top-lev
28c60 65 6c 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74  el [SELECT] stat
28c70 65 6d 65 6e 74 0a 6f 72 20 61 74 20 74 68 65 20  ement.or at the 
28c80 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 61 20 73  beginning of a s
28c90 75 62 71 75 65 72 79 2e 20 20 54 68 65 20 57 49  ubquery.  The WI
28ca0 54 48 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74  TH clause cannot
28cb0 20 62 65 20 70 72 65 70 65 6e 64 65 64 20 74 6f   be prepended to
28cc0 0a 74 68 65 20 73 65 63 6f 6e 64 20 6f 72 20 73  .the second or s
28cd0 75 62 73 65 71 75 65 6e 74 20 53 45 4c 45 43 54  ubsequent SELECT
28ce0 20 73 74 61 74 65 6d 65 6e 74 20 6f 66 20 61 20   statement of a 
28cf0 5b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74  [compound select
28d00 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20 53  ]..<li><p>.The S
28d10 51 4c 3a 31 39 39 39 20 73 70 65 63 20 72 65 71  QL:1999 spec req
28d20 75 69 72 65 73 20 74 68 61 74 20 74 68 65 20 52  uires that the R
28d30 45 43 55 52 53 49 56 45 20 6b 65 79 77 6f 72 64  ECURSIVE keyword
28d40 20 66 6f 6c 6c 6f 77 20 57 49 54 48 20 69 6e 20   follow WITH in 
28d50 61 6e 79 0a 57 49 54 48 20 63 6c 61 75 73 65 20  any.WITH clause 
28d60 74 68 61 74 20 69 6e 63 6c 75 64 65 73 20 61 20  that includes a 
28d70 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e  recursive common
28d80 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
28d90 6e 2e 20 20 48 6f 77 65 76 65 72 2c 20 66 6f 72  n.  However, for
28da0 0a 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77  .compatibility w
28db0 69 74 68 20 53 71 6c 53 65 72 76 65 72 20 61 6e  ith SqlServer an
28dc0 64 20 4f 72 61 63 6c 65 2c 20 53 51 4c 69 74 65  d Oracle, SQLite
28dd0 20 64 6f 65 73 20 6e 6f 74 20 65 6e 66 6f 72 63   does not enforc
28de0 65 20 74 68 69 73 20 72 75 6c 65 2e 0a 3c 2f 75  e this rule..</u
28df0 6c 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  l>..<tcl>.######
28e00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28e10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28e20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28e30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28e40 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
28e50 6e 20 53 45 4c 45 43 54 20 73 65 6c 65 63 74 20  n SELECT select 
28e60 7b 53 45 4c 45 43 54 20 71 75 65 72 79 7d 0a 0a  {SELECT query}..
28e70 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
28e80 69 61 67 72 61 6d 20 73 65 6c 65 63 74 2d 73 74  iagram select-st
28e90 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 0a 3c 70 3e 54  mt.</tcl>...<p>T
28ea0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
28eb0 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 71  ent is used to q
28ec0 75 65 72 79 20 74 68 65 20 64 61 74 61 62 61 73  uery the databas
28ed0 65 2e 20 20 54 68 65 0a 72 65 73 75 6c 74 20 6f  e.  The.result o
28ee0 66 20 61 20 53 45 4c 45 43 54 20 69 73 20 7a 65  f a SELECT is ze
28ef0 72 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20  ro or more rows 
28f00 6f 66 20 64 61 74 61 20 77 68 65 72 65 20 65 61  of data where ea
28f10 63 68 20 72 6f 77 0a 68 61 73 20 61 20 66 69 78  ch row.has a fix
28f20 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  ed number of col
28f30 75 6d 6e 73 2e 20 20 41 20 53 45 4c 45 43 54 20  umns.  A SELECT 
28f40 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e  statement does n
28f50 6f 74 20 6d 61 6b 65 0a 61 6e 79 20 63 68 61 6e  ot make.any chan
28f60 67 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62  ges to the datab
28f70 61 73 65 2e 0a 0a 3c 70 3e 54 68 65 20 22 5b 73  ase...<p>The "[s
28f80 65 6c 65 63 74 2d 73 74 6d 74 5d 22 20 73 79 6e  elect-stmt]" syn
28f90 74 61 78 20 64 69 61 67 72 61 6d 20 61 62 6f 76  tax diagram abov
28fa0 65 20 61 74 74 65 6d 70 74 73 20 74 6f 20 73 68  e attempts to sh
28fb0 6f 77 20 61 73 20 6d 75 63 68 20 6f 66 20 74 68  ow as much of th
28fc0 65 0a 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e.SELECT stateme
28fd0 6e 74 20 73 79 6e 74 61 78 20 61 73 20 70 6f 73  nt syntax as pos
28fe0 73 69 62 6c 65 20 69 6e 20 61 20 73 69 6e 67 6c  sible in a singl
28ff0 65 20 64 69 61 67 72 61 6d 2c 20 62 65 63 61 75  e diagram, becau
29000 73 65 20 73 6f 6d 65 20 72 65 61 64 65 72 73 0a  se some readers.
29010 66 69 6e 64 20 74 68 61 74 20 68 65 6c 70 66 75  find that helpfu
29020 6c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  l.  The followin
29030 67 20 22 5b 66 61 63 74 6f 72 65 64 2d 73 65 6c  g "[factored-sel
29040 65 63 74 2d 73 74 6d 74 5d 22 20 69 73 20 61 6e  ect-stmt]" is an
29050 20 61 6c 74 65 72 6e 61 74 69 76 65 0a 73 79 6e   alternative.syn
29060 74 61 78 20 64 69 61 67 72 61 6d 73 20 74 68 61  tax diagrams tha
29070 74 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20  t expresses the 
29080 73 61 6d 65 20 73 79 6e 74 61 78 20 62 75 74 20  same syntax but 
29090 74 72 69 65 73 20 74 6f 20 62 72 65 61 6b 20 74  tries to break t
290a0 68 65 20 73 79 6e 74 61 78 20 0a 64 6f 77 6e 20  he syntax .down 
290b0 69 6e 74 6f 20 73 6d 61 6c 6c 65 72 20 63 68 75  into smaller chu
290c0 6e 6b 73 2e 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75  nks...<tcl>.Recu
290d0 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
290e0 61 6d 20 2d 2d 69 6e 69 74 69 61 6c 6c 79 2d 68  am --initially-h
290f0 69 64 64 65 6e 20 66 61 63 74 6f 72 65 64 2d 73  idden factored-s
29100 65 6c 65 63 74 2d 73 74 6d 74 20 73 65 6c 65 63  elect-stmt selec
29110 74 2d 63 6f 72 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c  t-core.</tcl>..<
29120 70 3e 4e 6f 74 65 20 74 68 61 74 20 74 68 65 72  p>Note that ther
29130 65 20 61 72 65 20 70 61 74 68 73 20 74 68 72 6f  e are paths thro
29140 75 67 68 20 74 68 65 20 73 79 6e 74 61 78 20 64  ugh the syntax d
29150 69 61 67 72 61 6d 73 20 74 68 61 74 0a 61 72 65  iagrams that.are
29160 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 69 6e 20   not allowed in 
29170 70 72 61 63 74 69 63 65 2e 20 20 53 6f 6d 65 20  practice.  Some 
29180 65 78 61 6d 70 6c 65 73 3a 0a 3c 75 6c 3e 0a 3c  examples:.<ul>.<
29190 6c 69 3e 41 20 5b 56 41 4c 55 45 53 5d 20 63 6c  li>A [VALUES] cl
291a0 61 75 73 65 20 63 61 6e 20 62 65 20 74 68 65 20  ause can be the 
291b0 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e  first element in
291c0 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c   a [compound SEL
291d0 45 43 54 5d 0a 20 20 20 20 74 68 61 74 20 75 73  ECT].    that us
291e0 65 73 20 61 20 5b 57 49 54 48 5d 20 63 6c 61 75  es a [WITH] clau
291f0 73 65 2c 20 62 75 74 20 61 20 5b 73 69 6d 70 6c  se, but a [simpl
29200 65 20 53 45 4c 45 43 54 5d 20 74 68 61 74 20 63  e SELECT] that c
29210 6f 6e 73 69 73 74 73 20 6f 66 0a 20 20 20 20 6a  onsists of.    j
29220 75 73 74 20 61 20 5b 56 41 4c 55 45 53 5d 20 63  ust a [VALUES] c
29230 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20 62 65 20  lause cannot be 
29240 70 72 65 63 65 64 65 64 20 62 79 20 61 20 5b 57  preceded by a [W
29250 49 54 48 5d 20 63 6c 61 75 73 65 2e 0a 3c 6c 69  ITH] clause..<li
29260 3e 54 68 65 20 5b 57 49 54 48 5d 20 63 6c 61 75  >The [WITH] clau
29270 73 65 20 6d 75 73 74 20 6f 63 63 75 72 20 6f 6e  se must occur on
29280 20 74 68 65 20 66 69 72 73 74 20 53 45 4c 45 43   the first SELEC
29290 54 20 6f 66 20 61 20 5b 63 6f 6d 70 6f 75 6e 64  T of a [compound
292a0 20 53 45 4c 45 43 54 5d 2e 0a 20 20 20 20 49 74   SELECT]..    It
292b0 20 63 61 6e 6e 6f 74 20 66 6f 6c 6c 6f 77 20 61   cannot follow a
292c0 20 5b 63 6f 6d 70 6f 75 6e 64 2d 6f 70 65 72 61   [compound-opera
292d0 74 6f 72 5d 2e 0a 3c 2f 75 6c 3e 0a 54 68 65 73  tor]..</ul>.Thes
292e0 65 20 61 6e 64 20 6f 74 68 65 72 20 73 69 6d 69  e and other simi
292f0 6c 61 72 20 73 79 6e 74 61 78 20 72 65 73 74 72  lar syntax restr
29300 69 63 74 69 6f 6e 73 20 61 72 65 20 64 65 73 63  ictions are desc
29310 72 69 62 65 64 20 69 6e 20 74 68 65 20 74 65 78  ribed in the tex
29320 74 2e 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43  t...<p>The SELEC
29330 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 74  T statement is t
29340 68 65 20 6d 6f 73 74 20 63 6f 6d 70 6c 69 63 61  he most complica
29350 74 65 64 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 74  ted command in t
29360 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e  he SQL language.
29370 0a 54 6f 20 6d 61 6b 65 20 74 68 65 20 64 65 73  .To make the des
29380 63 72 69 70 74 69 6f 6e 20 65 61 73 69 65 72 20  cription easier 
29390 74 6f 20 66 6f 6c 6c 6f 77 2c 20 73 6f 6d 65 20  to follow, some 
293a0 6f 66 20 74 68 65 20 70 61 73 73 61 67 65 73 20  of the passages 
293b0 62 65 6c 6f 77 20 64 65 73 63 72 69 62 65 0a 74  below describe.t
293c0 68 65 20 77 61 79 20 74 68 65 20 64 61 74 61 20  he way the data 
293d0 72 65 74 75 72 6e 65 64 20 62 79 20 61 20 53 45  returned by a SE
293e0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
293f0 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61 73 20  s determined as 
29400 61 20 73 65 72 69 65 73 20 6f 66 0a 73 74 65 70  a series of.step
29410 73 2e 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61  s. It is importa
29420 6e 74 20 74 6f 20 6b 65 65 70 20 69 6e 20 6d 69  nt to keep in mi
29430 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 73 20  nd that this is 
29440 70 75 72 65 6c 79 20 69 6c 6c 75 73 74 72 61 74  purely illustrat
29450 69 76 65 20 2d 0a 69 6e 20 70 72 61 63 74 69 63  ive -.in practic
29460 65 20 6e 65 69 74 68 65 72 20 53 51 4c 69 74 65  e neither SQLite
29470 20 6e 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 53   nor any other S
29480 51 4c 20 65 6e 67 69 6e 65 20 69 73 20 72 65 71  QL engine is req
29490 75 69 72 65 64 20 74 6f 20 66 6f 6c 6c 6f 77 20  uired to follow 
294a0 0a 74 68 69 73 20 6f 72 20 61 6e 79 20 6f 74 68  .this or any oth
294b0 65 72 20 73 70 65 63 69 66 69 63 20 70 72 6f 63  er specific proc
294c0 65 73 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ess...<tcl>hd_fr
294d0 61 67 6d 65 6e 74 20 73 69 6d 70 6c 65 73 65 6c  agment simplesel
294e0 65 63 74 20 7b 73 69 6d 70 6c 65 20 53 45 4c 45  ect {simple SELE
294f0 43 54 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 53 69  CT}</tcl>.<h3>Si
29500 6d 70 6c 65 20 53 65 6c 65 63 74 20 50 72 6f 63  mple Select Proc
29510 65 73 73 69 6e 67 3c 2f 68 33 3e 0a 0a 3c 70 3e  essing</h3>..<p>
29520 54 68 65 20 63 6f 72 65 20 6f 66 20 61 20 53 45  The core of a SE
29530 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
29540 73 20 61 20 22 73 69 6d 70 6c 65 20 53 45 4c 45  s a "simple SELE
29550 43 54 22 20 73 68 6f 77 6e 20 62 79 20 74 68 65  CT" shown by the
29560 0a 5b 73 65 6c 65 63 74 2d 63 6f 72 65 5d 20 61  .[select-core] a
29570 6e 64 20 5b 73 69 6d 70 6c 65 2d 73 65 6c 65 63  nd [simple-selec
29580 74 2d 73 74 6d 74 5d 20 73 79 6e 74 61 78 20 64  t-stmt] syntax d
29590 69 61 67 72 61 6d 73 20 62 65 6c 6f 77 2e 20 20  iagrams below.  
295a0 0a 49 6e 20 70 72 61 63 74 69 63 65 2c 20 6d 6f  .In practice, mo
295b0 73 74 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  st SELECT statem
295c0 65 6e 74 73 20 61 72 65 20 73 69 6d 70 6c 65 20  ents are simple 
295d0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
295e0 73 2e 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73  s...<tcl>.Recurs
295f0 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
29600 20 73 69 6d 70 6c 65 2d 73 65 6c 65 63 74 2d 73   simple-select-s
29610 74 6d 74 20 73 65 6c 65 63 74 2d 63 6f 72 65 0a  tmt select-core.
29620 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 47 65 6e 65 72  </tcl>..<p>Gener
29630 61 74 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74  ating the result
29640 73 20 6f 66 20 61 20 73 69 6d 70 6c 65 20 53 45  s of a simple SE
29650 4c 45 43 54 0a 73 74 61 74 65 6d 65 6e 74 20 69  LECT.statement i
29660 73 20 70 72 65 73 65 6e 74 65 64 20 61 73 20 61  s presented as a
29670 20 66 6f 75 72 20 73 74 65 70 20 70 72 6f 63 65   four step proce
29680 73 73 20 69 6e 20 74 68 65 20 64 65 73 63 72 69  ss in the descri
29690 70 74 69 6f 6e 20 62 65 6c 6f 77 3a 0a 0a 3c 6f  ption below:..<o
296a0 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 46 52  l>.  <li> <p>[FR
296b0 4f 4d 20 63 6c 61 75 73 65 5d 20 70 72 6f 63 65  OM clause] proce
296c0 73 73 69 6e 67 3a 20 54 68 65 20 69 6e 70 75 74  ssing: The input
296d0 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 73 69   data for the si
296e0 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73 0a 20  mple SELECT is. 
296f0 20 20 20 20 20 20 64 65 74 65 72 6d 69 6e 65 64        determined
29700 2e 20 54 68 65 20 69 6e 70 75 74 20 64 61 74 61  . The input data
29710 20 69 73 20 65 69 74 68 65 72 20 69 6d 70 6c 69   is either impli
29720 63 69 74 6c 79 20 61 20 73 69 6e 67 6c 65 20 72  citly a single r
29730 6f 77 20 77 69 74 68 20 30 0a 20 20 20 20 20 20  ow with 0.      
29740 20 63 6f 6c 75 6d 6e 73 20 28 69 66 20 74 68 65   columns (if the
29750 72 65 20 69 73 20 6e 6f 20 46 52 4f 4d 20 63 6c  re is no FROM cl
29760 61 75 73 65 29 20 6f 72 20 69 73 20 64 65 74 65  ause) or is dete
29770 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 46 52  rmined by the FR
29780 4f 4d 0a 20 20 20 20 20 20 20 63 6c 61 75 73 65  OM.       clause
29790 2e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 57 48 45  ..  <li> <p>[WHE
297a0 52 45 20 63 6c 61 75 73 65 5d 20 70 72 6f 63 65  RE clause] proce
297b0 73 73 69 6e 67 3a 20 54 68 65 20 69 6e 70 75 74  ssing: The input
297c0 20 64 61 74 61 20 69 73 20 66 69 6c 74 65 72 65   data is filtere
297d0 64 20 75 73 69 6e 67 20 74 68 65 20 57 48 45 52  d using the WHER
297e0 45 0a 20 20 20 20 20 20 20 63 6c 61 75 73 65 20  E.       clause 
297f0 65 78 70 72 65 73 73 69 6f 6e 2e 20 20 0a 20 20  expression.  .  
29800 3c 6c 69 3e 20 3c 70 3e 5b 47 52 4f 55 50 20 42  <li> <p>[GROUP B
29810 59 7c 47 52 4f 55 50 20 42 59 2c 20 48 41 56 49  Y|GROUP BY, HAVI
29820 4e 47 20 61 6e 64 20 72 65 73 75 6c 74 2d 63 6f  NG and result-co
29830 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d  lumn expression]
29840 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 0a 20 20   processing: .  
29850 20 20 20 20 20 54 68 65 20 73 65 74 20 6f 66 20       The set of 
29860 72 65 73 75 6c 74 20 72 6f 77 73 20 69 73 20 63  result rows is c
29870 6f 6d 70 75 74 65 64 20 62 79 20 61 67 67 72 65  omputed by aggre
29880 67 61 74 69 6e 67 20 74 68 65 20 64 61 74 61 20  gating the data 
29890 61 63 63 6f 72 64 69 6e 67 20 74 6f 0a 20 20 20  according to.   
298a0 20 20 20 20 61 6e 79 20 47 52 4f 55 50 20 42 59      any GROUP BY
298b0 20 63 6c 61 75 73 65 20 61 6e 64 20 63 61 6c 63   clause and calc
298c0 75 6c 61 74 69 6e 67 20 74 68 65 20 72 65 73 75  ulating the resu
298d0 6c 74 2d 73 65 74 20 65 78 70 72 65 73 73 69 6f  lt-set expressio
298e0 6e 73 20 66 6f 72 20 74 68 65 0a 20 20 20 20 20  ns for the.     
298f0 20 20 72 6f 77 73 20 6f 66 20 74 68 65 20 66 69    rows of the fi
29900 6c 74 65 72 65 64 20 69 6e 70 75 74 20 64 61 74  ltered input dat
29910 61 73 65 74 2e 20 20 0a 20 20 3c 6c 69 3e 20 3c  aset.  .  <li> <
29920 70 3e 5b 44 49 53 54 49 4e 43 54 7c 44 49 53 54  p>[DISTINCT|DIST
29930 49 4e 43 54 2f 41 4c 4c 20 6b 65 79 77 6f 72 64  INCT/ALL keyword
29940 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 49 66  ] processing: If
29950 20 74 68 65 20 71 75 65 72 79 20 69 73 20 61 20   the query is a 
29960 22 53 45 4c 45 43 54 0a 20 20 20 20 20 20 20 44  "SELECT.       D
29970 49 53 54 49 4e 43 54 22 20 71 75 65 72 79 2c 20  ISTINCT" query, 
29980 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 61  duplicate rows a
29990 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20  re removed from 
299a0 74 68 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c  the set of resul
299b0 74 20 72 6f 77 73 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c  t rows..</ol>..<
299c0 70 3e 54 68 65 72 65 20 61 72 65 20 74 77 6f 20  p>There are two 
299d0 74 79 70 65 73 20 6f 66 20 73 69 6d 70 6c 65 20  types of simple 
299e0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
299f0 20 2d 20 61 67 67 72 65 67 61 74 65 20 61 6e 64   - aggregate and
29a00 20 0a 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20   .non-aggregate 
29a10 71 75 65 72 69 65 73 2e 20 5e 41 20 73 69 6d 70  queries. ^A simp
29a20 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
29a30 65 6e 74 20 69 73 20 61 6e 20 61 67 67 72 65 67  ent is an aggreg
29a40 61 74 65 20 71 75 65 72 79 20 69 66 0a 69 74 20  ate query if.it 
29a50 63 6f 6e 74 61 69 6e 73 20 65 69 74 68 65 72 20  contains either 
29a60 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  a GROUP BY claus
29a70 65 20 6f 72 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  e or one or more
29a80 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
29a90 69 6f 6e 73 0a 69 6e 20 74 68 65 20 72 65 73 75  ions.in the resu
29aa0 6c 74 2d 73 65 74 2e 20 5e 4f 74 68 65 72 77 69  lt-set. ^Otherwi
29ab0 73 65 2c 20 69 66 20 61 20 73 69 6d 70 6c 65 20  se, if a simple 
29ac0 53 45 4c 45 43 54 20 63 6f 6e 74 61 69 6e 73 20  SELECT contains 
29ad0 6e 6f 20 61 67 67 72 65 67 61 74 65 0a 66 75 6e  no aggregate.fun
29ae0 63 74 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55  ctions or a GROU
29af0 50 20 42 59 20 63 6c 61 75 73 65 2c 20 69 74 20  P BY clause, it 
29b00 69 73 20 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61  is a non-aggrega
29b10 74 65 20 71 75 65 72 79 2e 0a 0a 3c 70 3e 3c 62  te query...<p><b
29b20 3e 31 2e 20 44 65 74 65 72 6d 69 6e 61 74 69 6f  >1. Determinatio
29b30 6e 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61 20  n of input data 
29b40 28 46 52 4f 4d 20 63 6c 61 75 73 65 20 70 72 6f  (FROM clause pro
29b50 63 65 73 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74  cessing).</b>.<t
29b60 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 66  cl>hd_fragment f
29b70 72 6f 6d 63 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a  romclause</tcl>.
29b80 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73  <tcl>hd_keywords
29b90 20 7b 46 52 4f 4d 20 63 6c 61 75 73 65 7d 3c 2f   {FROM clause}</
29ba0 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e 70  tcl>..<p>The inp
29bb0 75 74 20 64 61 74 61 20 75 73 65 64 20 62 79 20  ut data used by 
29bc0 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  a simple SELECT 
29bd0 71 75 65 72 79 20 69 73 20 61 20 73 65 74 20 6f  query is a set o
29be0 66 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20  f <i>N</i> rows 
29bf0 0a 65 61 63 68 20 3c 69 3e 4d 3c 2f 69 3e 20 63  .each <i>M</i> c
29c00 6f 6c 75 6d 6e 73 20 77 69 64 65 2e 0a 0a 3c 70  olumns wide...<p
29c10 3e 5e 28 49 66 20 74 68 65 20 46 52 4f 4d 20 63  >^(If the FROM c
29c20 6c 61 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64  lause is omitted
29c30 20 66 72 6f 6d 20 61 20 73 69 6d 70 6c 65 20 53   from a simple S
29c40 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c  ELECT statement,
29c50 20 74 68 65 6e 20 74 68 65 20 0a 69 6e 70 75 74   then the .input
29c60 20 64 61 74 61 20 69 73 20 69 6d 70 6c 69 63 69   data is implici
29c70 74 6c 79 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  tly a single row
29c80 20 7a 65 72 6f 20 63 6f 6c 75 6d 6e 73 20 77 69   zero columns wi
29c90 64 65 29 5e 20 28 69 2e 65 2e 20 3c 69 3e 4e 3c  de)^ (i.e. <i>N<
29ca0 2f 69 3e 3d 31 20 61 6e 64 0a 3c 69 3e 4d 3c 2f  /i>=1 and.<i>M</
29cb0 69 3e 3d 30 29 2e 0a 0a 3c 70 3e 49 66 20 61 20  i>=0)...<p>If a 
29cc0 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 73  FROM clause is s
29cd0 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 64 61  pecified, the da
29ce0 74 61 20 6f 6e 20 77 68 69 63 68 20 61 20 73 69  ta on which a si
29cf0 6d 70 6c 65 20 53 45 4c 45 43 54 20 71 75 65 72  mple SELECT quer
29d00 79 0a 6f 70 65 72 61 74 65 73 20 63 6f 6d 65 73  y.operates comes
29d10 20 66 72 6f 6d 20 74 68 65 20 6f 6e 65 20 6f 72   from the one or
29d20 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 6f 72 20   more tables or 
29d30 73 75 62 71 75 65 72 69 65 73 20 28 53 45 4c 45  subqueries (SELE
29d40 43 54 20 73 74 61 74 65 6d 65 6e 74 73 0a 69 6e  CT statements.in
29d50 20 70 61 72 65 6e 74 68 65 73 69 73 29 20 73 70   parenthesis) sp
29d60 65 63 69 66 69 65 64 20 66 6f 6c 6c 6f 77 69 6e  ecified followin
29d70 67 20 74 68 65 20 46 52 4f 4d 20 6b 65 79 77 6f  g the FROM keywo
29d80 72 64 2e 20 5e 41 20 73 75 62 71 75 65 72 79 20  rd. ^A subquery 
29d90 73 70 65 63 69 66 69 65 64 0a 69 6e 20 74 68 65  specified.in the
29da0 20 74 61 62 6c 65 2d 6f 72 2d 73 75 62 71 75 65   table-or-subque
29db0 72 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  ry following the
29dc0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 6e 20   FROM clause in 
29dd0 61 20 0a 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  a .simple SELECT
29de0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 0a 68 61   statement is.ha
29df0 6e 64 6c 65 64 20 61 73 20 69 66 20 69 74 20 77  ndled as if it w
29e00 61 73 20 61 20 74 61 62 6c 65 20 63 6f 6e 74 61  as a table conta
29e10 69 6e 69 6e 67 20 74 68 65 20 64 61 74 61 20 72  ining the data r
29e20 65 74 75 72 6e 65 64 20 62 79 20 65 78 65 63 75  eturned by execu
29e30 74 69 6e 67 20 74 68 65 0a 73 75 62 71 75 65 72  ting the.subquer
29e40 79 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 45 61  y statement. ^Ea
29e50 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  ch column of the
29e60 20 73 75 62 71 75 65 72 79 20 68 61 73 20 74 68   subquery has th
29e70 65 0a 5b 63 6f 6c 6c 61 74 69 6f 6e 7c 63 6f 6c  e.[collation|col
29e80 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 5d  lation sequence]
29e90 20 61 6e 64 20 5b 61 66 66 69 6e 69 74 79 5d 20   and [affinity] 
29ea0 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
29eb0 64 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 0a  ding expression.
29ec0 69 6e 20 74 68 65 20 73 75 62 71 75 65 72 79 20  in the subquery 
29ed0 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e  statement...<p>^
29ee0 49 66 20 74 68 65 72 65 20 69 73 20 6f 6e 6c 79  If there is only
29ef0 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
29f00 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 74  or subquery in t
29f10 68 65 20 46 52 4f 4d 0a 63 6c 61 75 73 65 2c 20  he FROM.clause, 
29f20 74 68 65 6e 20 74 68 65 20 69 6e 70 75 74 20 64  then the input d
29f30 61 74 61 20 75 73 65 64 20 62 79 20 74 68 65 20  ata used by the 
29f40 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
29f50 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 73   is the contents
29f60 20 6f 66 20 74 68 65 0a 6e 61 6d 65 64 20 74 61   of the.named ta
29f70 62 6c 65 2e 20 5e 49 66 20 74 68 65 72 65 20 69  ble. ^If there i
29f80 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  s more than one 
29f90 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72  table or subquer
29fa0 79 20 69 6e 20 46 52 4f 4d 20 63 6c 61 75 73 65  y in FROM clause
29fb0 0a 74 68 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e  .then the conten
29fc0 74 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73  ts of all tables
29fd0 20 61 6e 64 2f 6f 72 20 73 75 62 71 75 65 72 69   and/or subqueri
29fe0 65 73 0a 61 72 65 20 6a 6f 69 6e 65 64 20 69 6e  es.are joined in
29ff0 74 6f 20 61 20 73 69 6e 67 6c 65 20 64 61 74 61  to a single data
2a000 73 65 74 20 66 6f 72 20 74 68 65 20 73 69 6d 70  set for the simp
2a010 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
2a020 65 6e 74 20 74 6f 20 6f 70 65 72 61 74 65 20 6f  ent to operate o
2a030 6e 2e 0a 45 78 61 63 74 6c 79 20 68 6f 77 20 74  n..Exactly how t
2a040 68 65 20 64 61 74 61 20 69 73 20 63 6f 6d 62 69  he data is combi
2a050 6e 65 64 20 64 65 70 65 6e 64 73 20 6f 6e 20 74  ned depends on t
2a060 68 65 20 73 70 65 63 69 66 69 63 20 5b 6a 6f 69  he specific [joi
2a070 6e 2d 6f 70 65 72 61 74 6f 72 5d 20 61 6e 64 0a  n-operator] and.
2a080 5b 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74  [join-constraint
2a090 5d 20 75 73 65 64 20 74 6f 20 63 6f 6e 6e 65 63  ] used to connec
2a0a0 74 20 74 68 65 20 74 61 62 6c 65 73 20 6f 72 20  t the tables or 
2a0b0 73 75 62 71 75 65 72 69 65 73 20 74 6f 67 65 74  subqueries toget
2a0c0 68 65 72 2e 0a 0a 3c 70 3e 41 6c 6c 20 6a 6f 69  her...<p>All joi
2a0d0 6e 73 20 69 6e 20 53 51 4c 69 74 65 20 61 72 65  ns in SQLite are
2a0e0 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 63 61   based on the ca
2a0f0 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20  rtesian product 
2a100 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64 0a  of the left and.
2a110 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73  right-hand datas
2a120 65 74 73 2e 20 5e 54 68 65 20 63 6f 6c 75 6d 6e  ets. ^The column
2a130 73 20 6f 66 20 74 68 65 20 63 61 72 74 65 73 69  s of the cartesi
2a140 61 6e 20 70 72 6f 64 75 63 74 20 64 61 74 61 73  an product datas
2a150 65 74 20 61 72 65 2c 20 69 6e 20 0a 6f 72 64 65  et are, in .orde
2a160 72 2c 20 61 6c 6c 20 74 68 65 20 63 6f 6c 75 6d  r, all the colum
2a170 6e 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 68  ns of the left-h
2a180 61 6e 64 20 64 61 74 61 73 65 74 20 66 6f 6c 6c  and dataset foll
2a190 6f 77 65 64 20 62 79 20 61 6c 6c 20 74 68 65 20  owed by all the 
2a1a0 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74 68 65 20 72  columns.of the r
2a1b0 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65  ight-hand datase
2a1c0 74 2e 20 5e 54 68 65 72 65 20 69 73 20 61 20 72  t. ^There is a r
2a1d0 6f 77 20 69 6e 20 74 68 65 20 63 61 72 74 65 73  ow in the cartes
2a1e0 69 61 6e 20 70 72 6f 64 75 63 74 20 64 61 74 61  ian product data
2a1f0 73 65 74 0a 66 6f 72 6d 65 64 20 62 79 20 63 6f  set.formed by co
2a200 6d 62 69 6e 69 6e 67 20 65 61 63 68 20 75 6e 69  mbining each uni
2a210 71 75 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  que combination 
2a220 6f 66 20 61 20 72 6f 77 20 66 72 6f 6d 20 74 68  of a row from th
2a230 65 20 6c 65 66 74 2d 68 61 6e 64 20 0a 61 6e 64  e left-hand .and
2a240 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61   right-hand data
2a250 73 65 74 73 2e 20 5e 28 49 6e 20 6f 74 68 65 72  sets. ^(In other
2a260 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 6c   words, if the l
2a270 65 66 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74  eft-hand dataset
2a280 20 63 6f 6e 73 69 73 74 73 20 6f 66 0a 3c 69 3e   consists of.<i>
2a290 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66  N<sub><small>lef
2a2a0 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c  t</small></sub><
2a2b0 2f 69 3e 20 72 6f 77 73 20 6f 66 20 0a 3c 69 3e  /i> rows of .<i>
2a2c0 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66  M<sub><small>lef
2a2d0 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c  t</small></sub><
2a2e0 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 64  /i> columns, and
2a2f0 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20   the right-hand 
2a300 64 61 74 61 73 65 74 20 6f 66 0a 3c 69 3e 4e 3c  dataset of.<i>N<
2a310 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68 74  sub><small>right
2a320 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f  </small></sub></
2a330 69 3e 20 72 6f 77 73 20 6f 66 0a 3c 69 3e 4d 3c  i> rows of.<i>M<
2a340 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68 74  sub><small>right
2a350 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f  </small></sub></
2a360 69 3e 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 6e  i> columns, then
2a370 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70   the cartesian p
2a380 72 6f 64 75 63 74 20 69 73 20 61 0a 64 61 74 61  roduct is a.data
2a390 73 65 74 20 6f 66 20 0a 3c 69 3e 4e 3c 73 75 62  set of .<i>N<sub
2a3a0 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d  ><small>left</sm
2a3b0 61 6c 6c 3e 3c 2f 73 75 62 3e 26 74 69 6d 65 73  all></sub>&times
2a3c0 3b 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72 69  ;N<sub><small>ri
2a3d0 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62  ght</small></sub
2a3e0 3e 3c 2f 69 3e 0a 72 6f 77 73 2c 20 65 61 63 68  ></i>.rows, each
2a3f0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 0a 3c 69 3e   containing .<i>
2a400 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66  M<sub><small>lef
2a410 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 2b  t</small></sub>+
2a420 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72 69 67  M<sub><small>rig
2a430 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e  ht</small></sub>
2a440 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2e 29 5e 0a  </i> columns.)^.
2a450 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6a 6f 69 6e  .<p>^If the join
2a460 2d 6f 70 65 72 61 74 6f 72 20 69 73 20 22 43 52  -operator is "CR
2a470 4f 53 53 20 4a 4f 49 4e 22 2c 20 22 49 4e 4e 45  OSS JOIN", "INNE
2a480 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20  R JOIN", "JOIN" 
2a490 6f 72 20 61 20 63 6f 6d 6d 61 0a 28 22 2c 22 29  or a comma.(",")
2a4a0 20 61 6e 64 20 74 68 65 72 65 20 69 73 20 6e 6f   and there is no
2a4b0 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61   ON or USING cla
2a4c0 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 72 65  use, then the re
2a4d0 73 75 6c 74 20 6f 66 20 74 68 65 20 6a 6f 69 6e  sult of the join
2a4e0 20 69 73 0a 73 69 6d 70 6c 79 20 74 68 65 20 63   is.simply the c
2a4f0 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74  artesian product
2a500 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64   of the left and
2a510 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61   right-hand data
2a520 73 65 74 73 2e 20 0a 49 66 20 6a 6f 69 6e 2d 6f  sets. .If join-o
2a530 70 65 72 61 74 6f 72 20 64 6f 65 73 20 68 61 76  perator does hav
2a540 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c  e ON or USING cl
2a550 61 75 73 65 73 2c 20 74 68 6f 73 65 20 61 72 65  auses, those are
2a560 20 68 61 6e 64 6c 65 64 20 61 63 63 6f 72 64 69   handled accordi
2a570 6e 67 20 74 6f 0a 74 68 65 20 66 6f 6c 6c 6f 77  ng to.the follow
2a580 69 6e 67 20 62 75 6c 6c 65 74 20 70 6f 69 6e 74  ing bullet point
2a590 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20  s:..<ul>.  <li> 
2a5a0 3c 70 3e 5e 28 49 66 20 74 68 65 72 65 20 69 73  <p>^(If there is
2a5b0 20 61 6e 20 4f 4e 20 63 6c 61 75 73 65 20 74 68   an ON clause th
2a5c0 65 6e 20 74 68 65 20 4f 4e 20 65 78 70 72 65 73  en the ON expres
2a5d0 73 69 6f 6e 20 69 73 0a 20 20 20 20 20 20 20 65  sion is.       e
2a5e0 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63  valuated for eac
2a5f0 68 20 72 6f 77 20 6f 66 20 74 68 65 20 63 61 72  h row of the car
2a600 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 61  tesian product a
2a610 73 20 61 20 0a 20 20 20 20 20 20 20 5b 62 6f 6f  s a .       [boo
2a620 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d  lean expression]
2a630 2e 20 4f 6e 6c 79 20 72 6f 77 73 20 66 6f 72 20  . Only rows for 
2a640 77 68 69 63 68 20 74 68 65 20 65 78 70 72 65 73  which the expres
2a650 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74  sion evaluates t
2a660 6f 20 0a 20 20 20 20 20 20 20 74 72 75 65 20 61  o .       true a
2a670 72 65 20 69 6e 63 6c 75 64 65 64 20 66 72 6f 6d  re included from
2a680 20 74 68 65 20 64 61 74 61 73 65 74 2e 29 5e 0a   the dataset.)^.
2a690 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 49 66 20 74  .  <li> <p>^If t
2a6a0 68 65 72 65 20 69 73 20 61 20 55 53 49 4e 47 20  here is a USING 
2a6b0 63 6c 61 75 73 65 0a 20 20 20 20 20 20 20 74 68  clause.       th
2a6c0 65 6e 20 65 61 63 68 20 6f 66 20 74 68 65 20 63  en each of the c
2a6d0 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 73 70 65 63  olumn names spec
2a6e0 69 66 69 65 64 20 6d 75 73 74 20 65 78 69 73 74  ified must exist
2a6f0 20 69 6e 20 74 68 65 20 64 61 74 61 73 65 74 73   in the datasets
2a700 20 74 6f 20 0a 20 20 20 20 20 20 20 62 6f 74 68   to .       both
2a710 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69   the left and ri
2a720 67 68 74 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2d  ght of the join-
2a730 6f 70 65 72 61 74 6f 72 2e 20 5e 28 46 6f 72 20  operator. ^(For 
2a740 65 61 63 68 20 70 61 69 72 20 6f 66 20 6e 61 6d  each pair of nam
2a750 65 64 0a 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e  ed.       column
2a760 73 2c 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  s, the expressio
2a770 6e 20 22 6c 68 73 2e 58 20 3d 20 72 68 73 2e 58  n "lhs.X = rhs.X
2a780 22 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 66  " is evaluated f
2a790 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 0a 20  or each row of. 
2a7a0 20 20 20 20 20 20 74 68 65 20 63 61 72 74 65 73        the cartes
2a7b0 69 61 6e 20 70 72 6f 64 75 63 74 20 61 73 20 61  ian product as a
2a7c0 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73   [boolean expres
2a7d0 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72 6f 77 73  sion]. Only rows
2a7e0 20 66 6f 72 20 77 68 69 63 68 0a 20 20 20 20 20   for which.     
2a7f0 20 20 61 6c 6c 20 73 75 63 68 20 65 78 70 72 65    all such expre
2a800 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 73  ssions evaluates
2a810 20 74 6f 20 74 72 75 65 20 61 72 65 20 69 6e 63   to true are inc
2a820 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65 0a 20  luded from the. 
2a830 20 20 20 20 20 20 72 65 73 75 6c 74 20 73 65 74        result set
2a840 2e 29 5e 20 5e 57 68 65 6e 20 63 6f 6d 70 61 72  .)^ ^When compar
2a850 69 6e 67 20 76 61 6c 75 65 73 20 61 73 20 61 20  ing values as a 
2a860 72 65 73 75 6c 74 20 6f 66 20 61 20 55 53 49 4e  result of a USIN
2a870 47 20 63 6c 61 75 73 65 2c 20 74 68 65 0a 20 20  G clause, the.  
2a880 20 20 20 20 20 6e 6f 72 6d 61 6c 20 72 75 6c 65       normal rule
2a890 73 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61  s for handling a
2a8a0 66 66 69 6e 69 74 69 65 73 2c 20 63 6f 6c 6c 61  ffinities, colla
2a8b0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 73 20 61  tion sequences a
2a8c0 6e 64 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 76  nd NULL.       v
2a8d0 61 6c 75 65 73 20 69 6e 20 63 6f 6d 70 61 72 69  alues in compari
2a8e0 73 6f 6e 73 20 61 70 70 6c 79 2e 20 5e 54 68 65  sons apply. ^The
2a8f0 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68 65   column from the
2a900 20 64 61 74 61 73 65 74 20 6f 6e 20 74 68 65 0a   dataset on the.
2a910 20 20 20 20 20 20 20 6c 65 66 74 2d 68 61 6e 64         left-hand
2a920 20 73 69 64 65 20 6f 66 20 74 68 65 20 6a 6f 69   side of the joi
2a930 6e 2d 6f 70 65 72 61 74 6f 72 20 69 73 20 63 6f  n-operator is co
2a940 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 20 6f  nsidered to be o
2a950 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 0a  n the left-hand.
2a960 20 20 20 20 20 20 20 73 69 64 65 20 6f 66 20 74         side of t
2a970 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70  he comparison op
2a980 65 72 61 74 6f 72 20 28 3d 29 20 66 6f 72 20 74  erator (=) for t
2a990 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 63  he purposes of c
2a9a0 6f 6c 6c 61 74 69 6f 6e 20 0a 20 20 20 20 20 20  ollation .      
2a9b0 20 73 65 71 75 65 6e 63 65 20 61 6e 64 20 61 66   sequence and af
2a9c0 66 69 6e 69 74 79 20 70 72 65 63 65 64 65 6e 63  finity precedenc
2a9d0 65 2e 0a 0a 20 20 20 20 20 20 20 3c 70 3e 5e 46  e...       <p>^F
2a9e0 6f 72 20 65 61 63 68 20 70 61 69 72 20 6f 66 20  or each pair of 
2a9f0 63 6f 6c 75 6d 6e 73 20 69 64 65 6e 74 69 66 69  columns identifi
2aa00 65 64 20 62 79 20 61 20 55 53 49 4e 47 20 63 6c  ed by a USING cl
2aa10 61 75 73 65 2c 20 74 68 65 20 63 6f 6c 75 6d 6e  ause, the column
2aa20 0a 20 20 20 20 20 20 20 66 72 6f 6d 20 74 68 65  .       from the
2aa30 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61   right-hand data
2aa40 73 65 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66  set is omitted f
2aa50 72 6f 6d 20 74 68 65 20 6a 6f 69 6e 65 64 20 64  rom the joined d
2aa60 61 74 61 73 65 74 2e 20 5e 54 68 69 73 20 0a 20  ataset. ^This . 
2aa70 20 20 20 20 20 20 69 73 20 74 68 65 20 6f 6e 6c        is the onl
2aa80 79 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  y difference bet
2aa90 77 65 65 6e 20 61 20 55 53 49 4e 47 20 63 6c 61  ween a USING cla
2aaa0 75 73 65 20 61 6e 64 20 69 74 73 20 65 71 75 69  use and its equi
2aab0 76 61 6c 65 6e 74 20 4f 4e 0a 20 20 20 20 20 20  valent ON.      
2aac0 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 0a 20 20   constraint...  
2aad0 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65  <li> <p>^(If the
2aae0 20 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f 72 64   NATURAL keyword
2aaf0 20 69 73 20 69 6e 20 74 68 65 20 6a 6f 69 6e 2d   is in the join-
2ab00 6f 70 65 72 61 74 6f 72 20 74 68 65 6e 20 61 6e  operator then an
2ab10 0a 20 20 20 20 20 20 20 69 6d 70 6c 69 63 69 74  .       implicit
2ab20 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 69 73   USING clause is
2ab30 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6a 6f   added to the jo
2ab40 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20  in-constraints. 
2ab50 54 68 65 20 69 6d 70 6c 69 63 69 74 0a 20 20 20  The implicit.   
2ab60 20 20 20 20 55 53 49 4e 47 20 63 6c 61 75 73 65      USING clause
2ab70 20 63 6f 6e 74 61 69 6e 73 20 65 61 63 68 20 6f   contains each o
2ab80 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d  f the column nam
2ab90 65 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69  es that appear i
2aba0 6e 20 62 6f 74 68 0a 20 20 20 20 20 20 20 74 68  n both.       th
2abb0 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
2abc0 2d 68 61 6e 64 20 69 6e 70 75 74 20 64 61 74 61  -hand input data
2abd0 73 65 74 73 2e 29 5e 20 5e 49 66 20 74 68 65 20  sets.)^ ^If the 
2abe0 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68  left and right-h
2abf0 61 6e 64 0a 20 20 20 20 20 20 20 69 6e 70 75 74  and.       input
2ac00 20 64 61 74 61 73 65 74 73 20 66 65 61 74 75 72   datasets featur
2ac10 65 20 6e 6f 20 63 6f 6d 6d 6f 6e 20 63 6f 6c 75  e no common colu
2ac20 6d 6e 20 6e 61 6d 65 73 2c 20 74 68 65 6e 20 74  mn names, then t
2ac30 68 65 20 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f  he NATURAL keywo
2ac40 72 64 0a 20 20 20 20 20 20 20 68 61 73 20 6e 6f  rd.       has no
2ac50 20 65 66 66 65 63 74 20 6f 6e 20 74 68 65 20 72   effect on the r
2ac60 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 6a 6f  esults of the jo
2ac70 69 6e 2e 20 5e 41 20 55 53 49 4e 47 20 6f 72 20  in. ^A USING or 
2ac80 4f 4e 20 63 6c 61 75 73 65 20 6d 61 79 0a 20 20  ON clause may.  
2ac90 20 20 20 20 20 6e 6f 74 20 62 65 20 61 64 64 65       not be adde
2aca0 64 20 74 6f 20 61 20 6a 6f 69 6e 20 74 68 61 74  d to a join that
2acb0 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20 4e   specifies the N
2acc0 41 54 55 52 41 4c 20 6b 65 79 77 6f 72 64 2e 0a  ATURAL keyword..
2acd0 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20  .  <li> <p>^(If 
2ace0 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f  the join-operato
2acf0 72 20 69 73 20 61 20 22 4c 45 46 54 20 4a 4f 49  r is a "LEFT JOI
2ad00 4e 22 20 6f 72 20 22 4c 45 46 54 20 4f 55 54 45  N" or "LEFT OUTE
2ad10 52 20 4a 4f 49 4e 22 2c 20 74 68 65 6e 0a 20 20  R JOIN", then.  
2ad20 20 20 20 20 20 61 66 74 65 72 0a 20 20 20 20 20       after.     
2ad30 20 20 74 68 65 20 4f 4e 20 6f 72 20 55 53 49 4e    the ON or USIN
2ad40 47 20 66 69 6c 74 65 72 69 6e 67 20 63 6c 61 75  G filtering clau
2ad50 73 65 73 20 68 61 76 65 20 62 65 65 6e 20 61 70  ses have been ap
2ad60 70 6c 69 65 64 2c 20 61 6e 20 65 78 74 72 61 20  plied, an extra 
2ad70 72 6f 77 20 69 73 20 0a 20 20 20 20 20 20 20 61  row is .       a
2ad80 64 64 65 64 20 74 6f 20 74 68 65 20 6f 75 74 70  dded to the outp
2ad90 75 74 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  ut for each row 
2ada0 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  in the original 
2adb0 6c 65 66 74 2d 68 61 6e 64 20 69 6e 70 75 74 20  left-hand input 
2adc0 0a 20 20 20 20 20 20 20 64 61 74 61 73 65 74 20  .       dataset 
2add0 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
2ade0 20 74 6f 20 6e 6f 20 72 6f 77 73 20 61 74 20 61   to no rows at a
2adf0 6c 6c 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 73  ll in the compos
2ae00 69 74 65 0a 20 20 20 20 20 20 20 64 61 74 61 73  ite.       datas
2ae10 65 74 20 28 69 66 20 61 6e 79 29 2e 29 5e 20 5e  et (if any).)^ ^
2ae20 54 68 65 20 61 64 64 65 64 20 72 6f 77 73 20 63  The added rows c
2ae30 6f 6e 74 61 69 6e 20 4e 55 4c 4c 20 76 61 6c 75  ontain NULL valu
2ae40 65 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e  es in the column
2ae50 73 0a 20 20 20 20 20 20 20 74 68 61 74 20 77 6f  s.       that wo
2ae60 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6e  uld normally con
2ae70 74 61 69 6e 20 76 61 6c 75 65 73 20 63 6f 70 69  tain values copi
2ae80 65 64 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68  ed from the righ
2ae90 74 2d 68 61 6e 64 20 69 6e 70 75 74 0a 20 20 20  t-hand input.   
2aea0 20 20 20 20 64 61 74 61 73 65 74 2e 20 20 0a 3c      dataset.  .<
2aeb0 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20  /ul>..<p>^(When 
2aec0 6d 6f 72 65 20 74 68 61 6e 20 74 77 6f 20 74 61  more than two ta
2aed0 62 6c 65 73 20 61 72 65 20 6a 6f 69 6e 65 64 20  bles are joined 
2aee0 74 6f 67 65 74 68 65 72 20 61 73 20 70 61 72 74  together as part
2aef0 20 6f 66 20 61 20 46 52 4f 4d 20 63 6c 61 75 73   of a FROM claus
2af00 65 2c 0a 74 68 65 20 6a 6f 69 6e 20 6f 70 65 72  e,.the join oper
2af10 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 63 65  ations are proce
2af20 73 73 65 64 20 69 6e 20 6f 72 64 65 72 20 66 72  ssed in order fr
2af30 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
2af40 2e 20 49 6e 20 6f 74 68 65 72 20 0a 77 6f 72 64  . In other .word
2af50 73 2c 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  s, the FROM clau
2af60 73 65 20 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31 20  se (A join-op-1 
2af70 42 20 6a 6f 69 6e 2d 6f 70 2d 32 20 43 29 20 69  B join-op-2 C) i
2af80 73 20 63 6f 6d 70 75 74 65 64 20 61 73 20 0a 28  s computed as .(
2af90 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31 20 42 29 20  (A join-op-1 B) 
2afa0 6a 6f 69 6e 2d 6f 70 2d 32 20 43 29 2e 29 5e 0a  join-op-2 C).)^.
2afb0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
2afc0 74 20 63 72 6f 73 73 6a 6f 69 6e 20 7b 74 72 65  t crossjoin {tre
2afd0 61 74 73 20 74 68 65 20 43 52 4f 53 53 20 4a 4f  ats the CROSS JO
2afe0 49 4e 20 6f 70 65 72 61 74 6f 72 20 73 70 65 63  IN operator spec
2aff0 69 61 6c 6c 79 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  ially}</tcl>.<p>
2b000 3c 62 3e 53 69 64 65 20 6e 6f 74 65 3a 20 53 70  <b>Side note: Sp
2b010 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 6f  ecial handling o
2b020 66 20 43 52 4f 53 53 20 4a 4f 49 4e 2e 3c 2f 62  f CROSS JOIN.</b
2b030 3e 0a 5e 54 68 65 72 65 20 69 73 20 6e 6f 20 64  >.^There is no d
2b040 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
2b050 6e 20 74 68 65 20 22 49 4e 4e 45 52 20 4a 4f 49  n the "INNER JOI
2b060 4e 22 2c 20 22 4a 4f 49 4e 22 20 61 6e 64 20 22  N", "JOIN" and "
2b070 2c 22 20 6a 6f 69 6e 0a 6f 70 65 72 61 74 6f 72  ," join.operator
2b080 73 2e 20 54 68 65 79 20 61 72 65 20 63 6f 6d 70  s. They are comp
2b090 6c 65 74 65 6c 79 20 69 6e 74 65 72 63 68 61 6e  letely interchan
2b0a0 67 65 61 62 6c 65 20 69 6e 20 53 51 4c 69 74 65  geable in SQLite
2b0b0 2e 0a 5e 28 54 68 65 20 22 43 52 4f 53 53 20 4a  ..^(The "CROSS J
2b0c0 4f 49 4e 22 20 6a 6f 69 6e 20 6f 70 65 72 61 74  OIN" join operat
2b0d0 6f 72 20 70 72 6f 64 75 63 65 73 20 74 68 65 20  or produces the 
2b0e0 73 61 6d 65 20 72 65 73 75 6c 74 20 61 73 20 74  same result as t
2b0f0 68 65 20 0a 22 49 4e 4e 45 52 20 4a 4f 49 4e 22  he ."INNER JOIN"
2b100 2c 20 22 4a 4f 49 4e 22 20 61 6e 64 20 22 2c 22  , "JOIN" and ","
2b110 20 6f 70 65 72 61 74 6f 72 73 29 5e 2c 20 62 75   operators)^, bu
2b120 74 20 69 73 20 0a 5b 43 52 4f 53 53 20 4a 4f 49  t is .[CROSS JOI
2b130 4e 7c 68 61 6e 64 6c 65 64 20 64 69 66 66 65 72  N|handled differ
2b140 65 6e 74 6c 79 20 62 79 20 74 68 65 20 71 75 65  ently by the que
2b150 72 79 20 6f 70 74 69 6d 69 7a 65 72 5d 0a 69 6e  ry optimizer].in
2b160 20 74 68 61 74 20 69 74 20 70 72 65 76 65 6e 74   that it prevent
2b170 73 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69  s the query opti
2b180 6d 69 7a 65 72 20 66 72 6f 6d 20 72 65 6f 72 64  mizer from reord
2b190 65 72 69 6e 67 0a 74 68 65 20 74 61 62 6c 65 73  ering.the tables
2b1a0 20 69 6e 20 74 68 65 20 6a 6f 69 6e 2e 20 20 41   in the join.  A
2b1b0 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 70 72  n application pr
2b1c0 6f 67 72 61 6d 6d 65 72 20 63 61 6e 20 75 73 65  ogrammer can use
2b1d0 20 74 68 65 20 43 52 4f 53 53 20 4a 4f 49 4e 20   the CROSS JOIN 
2b1e0 0a 6f 70 65 72 61 74 6f 72 20 74 6f 20 64 69 72  .operator to dir
2b1f0 65 63 74 6c 79 20 69 6e 66 6c 75 65 6e 63 65 20  ectly influence 
2b200 74 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 74 68  the algorithm th
2b210 61 74 20 69 73 20 63 68 6f 73 65 6e 20 74 6f 20  at is chosen to 
2b220 69 6d 70 6c 65 6d 65 6e 74 0a 74 68 65 20 53 45  implement.the SE
2b230 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
2b240 20 41 76 6f 69 64 20 75 73 69 6e 67 20 43 52 4f   Avoid using CRO
2b250 53 53 20 4a 4f 49 4e 20 65 78 63 65 70 74 20 69  SS JOIN except i
2b260 6e 20 73 70 65 63 69 66 69 63 20 73 69 74 75 61  n specific situa
2b270 74 69 6f 6e 73 20 0a 77 68 65 72 65 20 6d 61 6e  tions .where man
2b280 75 61 6c 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74  ual control of t
2b290 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a  he query optimiz
2b2a0 65 72 20 69 73 20 64 65 73 69 72 65 64 2e 20 20  er is desired.  
2b2b0 41 76 6f 69 64 20 75 73 69 6e 67 0a 43 52 4f 53  Avoid using.CROS
2b2c0 53 20 4a 4f 49 4e 20 65 61 72 6c 79 20 69 6e 20  S JOIN early in 
2b2d0 74 68 65 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20  the development 
2b2e0 6f 66 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f  of an applicatio
2b2f0 6e 20 61 73 20 64 6f 69 6e 67 20 73 6f 20 69 73  n as doing so is
2b300 0a 61 20 3c 61 20 68 72 65 66 3d 22 68 74 74 70  .a <a href="http
2b310 3a 2f 2f 63 32 2e 63 6f 6d 2f 63 67 69 2f 77 69  ://c2.com/cgi/wi
2b320 6b 69 3f 50 72 65 6d 61 74 75 72 65 4f 70 74 69  ki?PrematureOpti
2b330 6d 69 7a 61 74 69 6f 6e 22 3e 70 72 65 6d 61 74  mization">premat
2b340 75 72 65 0a 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ure.optimization
2b350 3c 2f 61 3e 2e 20 20 54 68 65 20 73 70 65 63 69  </a>.  The speci
2b360 61 6c 20 68 61 6e 64 6c 69 6e 67 20 6f 66 20 43  al handling of C
2b370 52 4f 53 53 20 4a 4f 49 4e 20 69 73 20 61 6e 20  ROSS JOIN is an 
2b380 53 51 4c 69 74 65 2d 73 70 65 63 69 66 69 63 0a  SQLite-specific.
2b390 66 65 61 74 75 72 65 20 61 6e 64 20 69 73 20 6e  feature and is n
2b3a0 6f 74 20 61 20 70 61 72 74 20 6f 66 20 73 74 61  ot a part of sta
2b3b0 6e 64 61 72 64 20 53 51 4c 2e 0a 20 20 20 20 20  ndard SQL..     
2b3c0 20 20 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67    ..<tcl>hd_frag
2b3d0 6d 65 6e 74 20 77 68 65 72 65 63 6c 61 75 73 65  ment whereclause
2b3e0 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b  </tcl>.<tcl>hd_k
2b3f0 65 79 77 6f 72 64 73 20 7b 57 48 45 52 45 20 63  eywords {WHERE c
2b400 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  lause}</tcl>.<p>
2b410 3c 62 3e 32 2e 20 57 48 45 52 45 20 63 6c 61 75  <b>2. WHERE clau
2b420 73 65 20 66 69 6c 74 65 72 69 6e 67 2e 3c 2f 62  se filtering.</b
2b430 3e 0a 0a 3c 70 3e 5e 28 49 66 20 61 20 57 48 45  >..<p>^(If a WHE
2b440 52 45 20 63 6c 61 75 73 65 20 69 73 20 73 70 65  RE clause is spe
2b450 63 69 66 69 65 64 2c 20 74 68 65 20 57 48 45 52  cified, the WHER
2b460 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  E expression is 
2b470 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 0a 65  evaluated for .e
2b480 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 69  ach row in the i
2b490 6e 70 75 74 20 64 61 74 61 20 61 73 20 61 20 5b  nput data as a [
2b4a0 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
2b4b0 6f 6e 5d 2e 20 4f 6e 6c 79 20 72 6f 77 73 20 66  on]. Only rows f
2b4c0 6f 72 20 77 68 69 63 68 20 74 68 65 0a 57 48 45  or which the.WHE
2b4d0 52 45 20 63 6c 61 75 73 65 20 65 78 70 72 65 73  RE clause expres
2b4e0 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74  sion evaluates t
2b4f0 6f 20 74 72 75 65 20 61 72 65 20 69 6e 63 6c 75  o true are inclu
2b500 64 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ded from the dat
2b510 61 73 65 74 20 62 65 66 6f 72 65 0a 63 6f 6e 74  aset before.cont
2b520 69 6e 75 69 6e 67 2e 29 5e 20 20 52 6f 77 73 20  inuing.)^  Rows 
2b530 61 72 65 20 65 78 63 6c 75 64 65 64 20 66 72 6f  are excluded fro
2b540 6d 20 74 68 65 20 72 65 73 75 6c 74 20 69 66 20  m the result if 
2b550 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
2b560 0a 65 76 61 6c 75 61 74 65 73 20 74 6f 20 65 69  .evaluates to ei
2b570 74 68 65 72 20 66 61 6c 73 65 20 6f 72 20 4e 55  ther false or NU
2b580 4c 4c 2e 0a 0a 3c 70 3e 46 6f 72 20 61 20 4a 4f  LL...<p>For a JO
2b590 49 4e 20 6f 72 20 49 4e 4e 45 52 20 4a 4f 49 4e  IN or INNER JOIN
2b5a0 20 6f 72 20 43 52 4f 53 53 20 4a 4f 49 4e 2c 20   or CROSS JOIN, 
2b5b0 74 68 65 72 65 20 69 73 20 6e 6f 20 64 69 66 66  there is no diff
2b5c0 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 0a  erence between .
2b5d0 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 65 78 70  a constraint exp
2b5e0 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 57  ression in the W
2b5f0 48 45 52 45 20 63 6c 61 75 73 65 20 61 6e 64 20  HERE clause and 
2b600 6f 6e 65 20 69 6e 20 74 68 65 20 4f 4e 20 63 6c  one in the ON cl
2b610 61 75 73 65 2e 20 20 48 6f 77 65 76 65 72 2c 0a  ause.  However,.
2b620 66 6f 72 20 61 20 4c 45 46 54 20 4a 4f 49 4e 20  for a LEFT JOIN 
2b630 6f 72 20 4c 45 46 54 20 4f 55 54 45 52 20 4a 4f  or LEFT OUTER JO
2b640 49 4e 2c 20 74 68 65 20 64 69 66 66 65 72 65 6e  IN, the differen
2b650 63 65 20 69 73 20 76 65 72 79 20 69 6d 70 6f 72  ce is very impor
2b660 74 61 6e 74 2e 20 20 0a 49 6e 20 61 20 4c 45 46  tant.  .In a LEF
2b670 54 20 4a 4f 49 4e 2c 0a 74 68 65 20 65 78 74 72  T JOIN,.the extr
2b680 61 20 4e 55 4c 4c 20 72 6f 77 20 66 6f 72 20 74  a NULL row for t
2b690 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 74 61  he right-hand ta
2b6a0 62 6c 65 20 69 73 20 61 64 64 65 64 20 61 66 74  ble is added aft
2b6b0 65 72 20 4f 4e 20 63 6c 61 75 73 65 20 70 72 6f  er ON clause pro
2b6c0 63 65 73 73 69 6e 67 0a 62 75 74 20 62 65 66 6f  cessing.but befo
2b6d0 72 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  re WHERE clause 
2b6e0 70 72 6f 63 65 73 73 69 6e 67 2e 20 20 41 20 63  processing.  A c
2b6f0 6f 6e 73 74 72 61 69 6e 74 20 6f 66 20 74 68 65  onstraint of the
2b700 20 66 6f 72 6d 20 22 6c 65 66 74 2e 78 3d 72 69   form "left.x=ri
2b710 67 68 74 2e 79 22 0a 69 6e 20 61 6e 20 4f 4e 20  ght.y".in an ON 
2b720 63 6c 61 75 73 65 20 77 69 6c 6c 20 74 68 65 72  clause will ther
2b730 65 66 6f 72 65 20 61 6c 6c 6f 77 20 74 68 72 6f  efore allow thro
2b740 75 67 68 20 74 68 65 20 61 64 64 65 64 20 61 6c  ugh the added al
2b750 6c 2d 4e 55 4c 4c 20 72 6f 77 73 20 6f 66 20 74  l-NULL rows of t
2b760 68 65 0a 72 69 67 68 74 20 74 61 62 6c 65 2e 20  he.right table. 
2b770 20 42 75 74 20 69 66 20 74 68 61 74 20 73 61 6d   But if that sam
2b780 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20  e constraint is 
2b790 69 6e 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  in the WHERE cla
2b7a0 75 73 65 20 61 20 4e 55 4c 4c 20 69 6e 0a 22 72  use a NULL in."r
2b7b0 69 67 68 74 2e 79 22 20 77 69 6c 6c 20 70 72 65  ight.y" will pre
2b7c0 76 65 6e 74 20 74 68 65 20 65 78 70 72 65 73 73  vent the express
2b7d0 69 6f 6e 20 22 6c 65 66 74 2e 78 3d 72 69 67 68  ion "left.x=righ
2b7e0 74 2e 79 22 20 66 72 6f 6d 20 62 65 69 6e 67 20  t.y" from being 
2b7f0 74 72 75 65 2c 20 61 6e 64 0a 74 68 75 73 20 65  true, and.thus e
2b800 78 63 6c 75 64 65 20 74 68 61 74 20 72 6f 77 20  xclude that row 
2b810 66 72 6f 6d 20 74 68 65 20 6f 75 74 70 75 74 2e  from the output.
2b820 0a 0a 3c 70 3e 3c 62 3e 33 2e 20 47 65 6e 65 72  ..<p><b>3. Gener
2b830 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 65 74  ation of the set
2b840 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 2e   of result rows.
2b850 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  </b>.<tcl>hd_fra
2b860 67 6d 65 6e 74 20 72 65 73 75 6c 74 73 65 74 3c  gment resultset<
2b870 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65  /tcl>.<tcl>hd_ke
2b880 79 77 6f 72 64 73 20 7b 72 65 73 75 6c 74 2d 73  ywords {result-s
2b890 65 74 20 65 78 70 72 65 73 73 69 6f 6e 73 7d 20  et expressions} 
2b8a0 7b 47 52 4f 55 50 20 42 59 7d 3c 2f 74 63 6c 3e  {GROUP BY}</tcl>
2b8b0 0a 0a 3c 70 3e 4f 6e 63 65 20 74 68 65 20 69 6e  ..<p>Once the in
2b8c0 70 75 74 20 64 61 74 61 20 66 72 6f 6d 20 74 68  put data from th
2b8d0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 68 61  e FROM clause ha
2b8e0 73 20 62 65 65 6e 20 66 69 6c 74 65 72 65 64 20  s been filtered 
2b8f0 62 79 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61  by the.WHERE cla
2b900 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28  use expression (
2b910 69 66 20 61 6e 79 29 2c 20 74 68 65 20 73 65 74  if any), the set
2b920 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
2b930 66 6f 72 20 74 68 65 20 73 69 6d 70 6c 65 20 0a  for the simple .
2b940 53 45 4c 45 43 54 20 61 72 65 20 63 61 6c 63 75  SELECT are calcu
2b950 6c 61 74 65 64 2e 20 45 78 61 63 74 6c 79 20 68  lated. Exactly h
2b960 6f 77 20 74 68 69 73 20 69 73 20 64 6f 6e 65 20  ow this is done 
2b970 64 65 70 65 6e 64 73 20 6f 6e 20 77 68 65 74 68  depends on wheth
2b980 65 72 20 74 68 65 20 73 69 6d 70 6c 65 20 0a 53  er the simple .S
2b990 45 4c 45 43 54 20 69 73 20 61 6e 20 61 67 67 72  ELECT is an aggr
2b9a0 65 67 61 74 65 20 6f 72 20 6e 6f 6e 2d 61 67 67  egate or non-agg
2b9b0 72 65 67 61 74 65 20 71 75 65 72 79 2c 20 61 6e  regate query, an
2b9c0 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  d whether or not
2b9d0 20 61 20 47 52 4f 55 50 0a 42 59 20 63 6c 61 75   a GROUP.BY clau
2b9e0 73 65 20 77 61 73 20 73 70 65 63 69 66 69 65 64  se was specified
2b9f0 2e 0a 0a 3c 70 3e 20 54 68 65 20 6c 69 73 74 20  ...<p> The list 
2ba00 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 62  of expressions b
2ba10 65 74 77 65 65 6e 20 74 68 65 20 53 45 4c 45 43  etween the SELEC
2ba20 54 20 61 6e 64 20 46 52 4f 4d 20 6b 65 79 77 6f  T and FROM keywo
2ba30 72 64 73 20 69 73 20 6b 6e 6f 77 6e 20 61 73 0a  rds is known as.
2ba40 74 68 65 20 72 65 73 75 6c 74 20 65 78 70 72 65  the result expre
2ba50 73 73 69 6f 6e 20 6c 69 73 74 2e 20 20 5e 49 66  ssion list.  ^If
2ba60 20 61 20 72 65 73 75 6c 74 20 65 78 70 72 65 73   a result expres
2ba70 73 69 6f 6e 20 69 73 20 74 68 65 20 73 70 65 63  sion is the spec
2ba80 69 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 0a 22  ial expression."
2ba90 2a 22 20 74 68 65 6e 20 61 6c 6c 20 63 6f 6c 75  *" then all colu
2baa0 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 70 75 74  mns in the input
2bab0 20 64 61 74 61 20 61 72 65 20 73 75 62 73 74 69   data are substi
2bac0 74 75 74 65 64 20 66 6f 72 20 74 68 61 74 20 6f  tuted for that o
2bad0 6e 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 5e  ne expression..^
2bae0 28 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69  (If the expressi
2baf0 6f 6e 20 69 73 20 74 68 65 20 61 6c 69 61 73 20  on is the alias 
2bb00 6f 66 20 61 20 74 61 62 6c 65 20 6f 72 20 73 75  of a table or su
2bb10 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52  bquery in the FR
2bb20 4f 4d 20 63 6c 61 75 73 65 0a 66 6f 6c 6c 6f 77  OM clause.follow
2bb30 65 64 20 62 79 20 22 2e 2a 22 20 74 68 65 6e 20  ed by ".*" then 
2bb40 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d  all columns from
2bb50 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65   the named table
2bb60 20 6f 72 20 73 75 62 71 75 65 72 79 20 61 72 65   or subquery are
2bb70 0a 73 75 62 73 74 69 74 75 74 65 64 20 66 6f 72  .substituted for
2bb80 20 74 68 65 20 73 69 6e 67 6c 65 20 65 78 70 72   the single expr
2bb90 65 73 73 69 6f 6e 2e 29 5e 20 5e 28 49 74 20 69  ession.)^ ^(It i
2bba0 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 75 73  s an error to us
2bbb0 65 20 61 20 22 2a 22 20 6f 72 0a 22 61 6c 69 61  e a "*" or."alia
2bbc0 73 2e 2a 22 20 65 78 70 72 65 73 73 69 6f 6e 20  s.*" expression 
2bbd0 69 6e 20 61 6e 79 20 63 6f 6e 74 65 78 74 20 6f  in any context o
2bbe0 74 68 65 72 20 74 68 61 6e 20 61 20 72 65 73 75  ther than a resu
2bbf0 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69  lt expression li
2bc00 73 74 2e 29 5e 0a 5e 28 49 74 20 69 73 20 61 6c  st.)^.^(It is al
2bc10 73 6f 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 75  so an error to u
2bc20 73 65 20 61 20 22 2a 22 20 6f 72 20 22 61 6c 69  se a "*" or "ali
2bc30 61 73 2e 2a 22 20 65 78 70 72 65 73 73 69 6f 6e  as.*" expression
2bc40 20 69 6e 20 61 20 73 69 6d 70 6c 65 20 53 45 4c   in a simple SEL
2bc50 45 43 54 0a 71 75 65 72 79 20 74 68 61 74 20 64  ECT.query that d
2bc60 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61 20 46  oes not have a F
2bc70 52 4f 4d 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c  ROM clause.)^..<
2bc80 70 3e 20 5e 28 54 68 65 20 6e 75 6d 62 65 72 20  p> ^(The number 
2bc90 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
2bca0 65 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20  e rows returned 
2bcb0 62 79 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45  by a simple SELE
2bcc0 43 54 20 73 74 61 74 65 6d 65 6e 74 0a 69 73 20  CT statement.is 
2bcd0 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6e 75 6d  equal to the num
2bce0 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ber of expressio
2bcf0 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ns in the result
2bd00 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
2bd10 20 61 66 74 65 72 0a 73 75 62 73 74 69 74 75 74   after.substitut
2bd20 69 6f 6e 20 6f 66 20 2a 20 61 6e 64 20 61 6c 69  ion of * and ali
2bd30 61 73 2e 2a 20 65 78 70 72 65 73 73 69 6f 6e 73  as.* expressions
2bd40 2e 29 5e 20 45 61 63 68 20 72 65 73 75 6c 74 20  .)^ Each result 
2bd50 72 6f 77 20 69 73 20 63 61 6c 63 75 6c 61 74 65  row is calculate
2bd60 64 20 62 79 0a 65 76 61 6c 75 61 74 69 6e 67 20  d by.evaluating 
2bd70 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  the expressions 
2bd80 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65 78  in the result ex
2bd90 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 77 69  pression list wi
2bda0 74 68 20 72 65 73 70 65 63 74 20 74 6f 20 61 0a  th respect to a.
2bdb0 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 69 6e  single row of in
2bdc0 70 75 74 20 64 61 74 61 20 6f 72 2c 20 66 6f 72  put data or, for
2bdd0 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72 69   aggregate queri
2bde0 65 73 2c 20 77 69 74 68 20 72 65 73 70 65 63 74  es, with respect
2bdf0 20 74 6f 20 61 20 67 72 6f 75 70 0a 6f 66 20 72   to a group.of r
2be00 6f 77 73 2e 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69  ows...<ul>.  <li
2be10 3e 3c 70 3e 5e 49 66 20 74 68 65 20 53 45 4c 45  ><p>^If the SELE
2be20 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  CT statement is 
2be30 3c 62 3e 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61  <b>a non-aggrega
2be40 74 65 20 71 75 65 72 79 3c 2f 62 3e 2c 20 74 68  te query</b>, th
2be50 65 6e 20 0a 20 20 20 20 65 61 63 68 20 65 78 70  en .    each exp
2be60 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72  ression in the r
2be70 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e  esult expression
2be80 20 6c 69 73 74 20 69 73 20 65 76 61 6c 75 61 74   list is evaluat
2be90 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  ed for each row 
2bea0 69 6e 0a 20 20 20 20 74 68 65 20 64 61 74 61 73  in.    the datas
2beb0 65 74 20 66 69 6c 74 65 72 65 64 20 62 79 20 74  et filtered by t
2bec0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 2e  he WHERE clause.
2bed0 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74  ..  <li><p>^If t
2bee0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
2bef0 65 6e 74 20 69 73 20 3c 62 3e 61 6e 20 61 67 67  ent is <b>an agg
2bf00 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69 74  regate query wit
2bf10 68 6f 75 74 20 61 20 47 52 4f 55 50 0a 20 20 20  hout a GROUP.   
2bf20 20 42 59 3c 2f 62 3e 20 63 6c 61 75 73 65 2c 20   BY</b> clause, 
2bf30 74 68 65 6e 20 65 61 63 68 20 61 67 67 72 65 67  then each aggreg
2bf40 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ate expression i
2bf50 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74  n the result-set
2bf60 20 69 73 20 0a 20 20 20 20 65 76 61 6c 75 61 74   is .    evaluat
2bf70 65 64 20 6f 6e 63 65 20 61 63 72 6f 73 73 20 74  ed once across t
2bf80 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 73 65  he entire datase
2bf90 74 2e 20 5e 45 61 63 68 20 6e 6f 6e 2d 61 67 67  t. ^Each non-agg
2bfa0 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
2bfb0 6e 0a 20 20 20 20 69 6e 20 74 68 65 20 72 65 73  n.    in the res
2bfc0 75 6c 74 2d 73 65 74 20 69 73 20 65 76 61 6c 75  ult-set is evalu
2bfd0 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 61 6e  ated once for an
2bfe0 20 61 72 62 69 74 72 61 72 69 6c 79 20 73 65 6c   arbitrarily sel
2bff0 65 63 74 65 64 20 72 6f 77 20 6f 66 0a 20 20 20  ected row of.   
2c000 20 74 68 65 20 64 61 74 61 73 65 74 2e 20 5e 54   the dataset. ^T
2c010 68 65 20 73 61 6d 65 20 61 72 62 69 74 72 61 72  he same arbitrar
2c020 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f 77  ily selected row
2c030 20 69 73 20 75 73 65 64 20 66 6f 72 20 65 61 63   is used for eac
2c040 68 0a 20 20 20 20 6e 6f 6e 2d 61 67 67 72 65 67  h.    non-aggreg
2c050 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  ate expression. 
2c060 5e 4f 72 2c 20 69 66 20 74 68 65 20 64 61 74 61  ^Or, if the data
2c070 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 7a 65 72  set contains zer
2c080 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20 0a 20 20  o rows, then .  
2c090 20 20 65 61 63 68 20 6e 6f 6e 2d 61 67 67 72 65    each non-aggre
2c0a0 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 20  gate expression 
2c0b0 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 67 61  is evaluated aga
2c0c0 69 6e 73 74 20 61 20 72 6f 77 20 63 6f 6e 73 69  inst a row consi
2c0d0 73 74 69 6e 67 0a 20 20 20 20 65 6e 74 69 72 65  sting.    entire
2c0e0 6c 79 20 6f 66 20 4e 55 4c 4c 20 76 61 6c 75 65  ly of NULL value
2c0f0 73 2e 0a 0a 20 20 20 3c 70 3e 5e 54 68 65 20 73  s...   <p>^The s
2c100 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73  ingle row of res
2c110 75 6c 74 2d 73 65 74 20 64 61 74 61 20 63 72 65  ult-set data cre
2c120 61 74 65 64 20 62 79 20 65 76 61 6c 75 61 74 69  ated by evaluati
2c130 6e 67 20 74 68 65 20 61 67 67 72 65 67 61 74 65  ng the aggregate
2c140 0a 20 20 20 20 61 6e 64 20 6e 6f 6e 2d 61 67 67  .    and non-agg
2c150 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
2c160 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ns in the result
2c170 2d 73 65 74 20 66 6f 72 6d 73 20 74 68 65 20 72  -set forms the r
2c180 65 73 75 6c 74 20 6f 66 20 61 6e 0a 20 20 20 20  esult of an.    
2c190 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20  aggregate query 
2c1a0 77 69 74 68 6f 75 74 20 61 20 47 52 4f 55 50 20  without a GROUP 
2c1b0 42 59 20 63 6c 61 75 73 65 2e 20 5e 41 6e 20 61  BY clause. ^An a
2c1c0 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77  ggregate query w
2c1d0 69 74 68 6f 75 74 20 61 0a 20 20 20 20 47 52 4f  ithout a.    GRO
2c1e0 55 50 20 42 59 20 63 6c 61 75 73 65 20 61 6c 77  UP BY clause alw
2c1f0 61 79 73 20 72 65 74 75 72 6e 73 20 65 78 61 63  ays returns exac
2c200 74 6c 79 20 6f 6e 65 20 72 6f 77 20 6f 66 20 64  tly one row of d
2c210 61 74 61 2c 20 65 76 65 6e 20 69 66 20 74 68 65  ata, even if the
2c220 72 65 20 61 72 65 0a 20 20 20 20 7a 65 72 6f 20  re are.    zero 
2c230 72 6f 77 73 20 6f 66 20 69 6e 70 75 74 20 64 61  rows of input da
2c240 74 61 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 28  ta...  <li><p>^(
2c250 49 66 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  If the SELECT st
2c260 61 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61 6e  atement is <b>an
2c270 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79   aggregate query
2c280 20 77 69 74 68 20 61 20 47 52 4f 55 50 0a 20 20   with a GROUP.  
2c290 20 20 42 59 3c 2f 62 3e 20 63 6c 61 75 73 65 2c    BY</b> clause,
2c2a0 20 74 68 65 6e 20 65 61 63 68 20 6f 66 20 74 68   then each of th
2c2b0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 73 70  e expressions sp
2c2c0 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
2c2d0 6f 66 20 74 68 65 0a 20 20 20 20 47 52 4f 55 50  of the.    GROUP
2c2e0 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 65 76   BY clause is ev
2c2f0 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63 68  aluated for each
2c300 20 72 6f 77 20 6f 66 20 74 68 65 20 64 61 74 61   row of the data
2c310 73 65 74 2e 20 45 61 63 68 20 72 6f 77 0a 20 20  set. Each row.  
2c320 20 20 69 73 20 74 68 65 6e 20 61 73 73 69 67 6e    is then assign
2c330 65 64 20 74 6f 20 61 20 22 67 72 6f 75 70 22 20  ed to a "group" 
2c340 62 61 73 65 64 20 6f 6e 20 74 68 65 20 72 65 73  based on the res
2c350 75 6c 74 73 3b 20 72 6f 77 73 20 66 6f 72 20 77  ults; rows for w
2c360 68 69 63 68 0a 20 20 20 20 74 68 65 20 72 65 73  hich.    the res
2c370 75 6c 74 73 20 6f 66 20 65 76 61 6c 75 61 74 69  ults of evaluati
2c380 6e 67 20 74 68 65 20 47 52 4f 55 50 20 42 59 20  ng the GROUP BY 
2c390 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20  expressions are 
2c3a0 74 68 65 20 73 61 6d 65 20 67 65 74 0a 20 20 20  the same get.   
2c3b0 20 61 73 73 69 67 6e 65 64 20 74 6f 20 74 68 65   assigned to the
2c3c0 20 73 61 6d 65 20 67 72 6f 75 70 2e 29 5e 20 5e   same group.)^ ^
2c3d0 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
2c3e0 20 6f 66 20 67 72 6f 75 70 69 6e 67 20 72 6f 77   of grouping row
2c3f0 73 2c 20 4e 55 4c 4c 20 0a 20 20 20 20 76 61 6c  s, NULL .    val
2c400 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ues are consider
2c410 65 64 20 65 71 75 61 6c 2e 20 5e 54 68 65 20 75  ed equal. ^The u
2c420 73 75 61 6c 20 72 75 6c 65 73 20 66 6f 72 20 5b  sual rules for [
2c430 63 6f 6c 6c 61 74 69 6f 6e 7c 73 65 6c 65 63 74  collation|select
2c440 69 6e 67 20 61 0a 20 20 20 20 63 6f 6c 6c 61 74  ing a.    collat
2c450 69 6f 6e 20 73 65 71 75 65 6e 63 65 5d 20 77 69  ion sequence] wi
2c460 74 68 20 77 68 69 63 68 20 74 6f 20 63 6f 6d 70  th which to comp
2c470 61 72 65 20 74 65 78 74 20 76 61 6c 75 65 73 20  are text values 
2c480 61 70 70 6c 79 20 77 68 65 6e 20 65 76 61 6c 75  apply when evalu
2c490 61 74 69 6e 67 0a 20 20 20 20 65 78 70 72 65 73  ating.    expres
2c4a0 73 69 6f 6e 73 20 69 6e 20 61 20 47 52 4f 55 50  sions in a GROUP
2c4b0 20 42 59 20 63 6c 61 75 73 65 2e 20 20 5e 54 68   BY clause.  ^Th
2c4c0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e  e expressions in
2c4d0 20 74 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c   the GROUP BY cl
2c4e0 61 75 73 65 0a 20 20 20 20 64 6f 20 3c 65 6d 3e  ause.    do <em>
2c4f0 6e 6f 74 3c 2f 65 6d 3e 20 68 61 76 65 20 74 6f  not</em> have to
2c500 20 62 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20   be expressions 
2c510 74 68 61 74 20 61 70 70 65 61 72 20 69 6e 20 74  that appear in t
2c520 68 65 20 72 65 73 75 6c 74 2e 20 5e 54 68 65 0a  he result. ^The.
2c530 20 20 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20      expressions 
2c540 69 6e 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c  in a GROUP BY cl
2c550 61 75 73 65 20 6d 61 79 20 6e 6f 74 20 62 65 20  ause may not be 
2c560 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
2c570 73 69 6f 6e 73 2e 0a 0a 20 20 20 20 3c 70 3e 5e  sions...    <p>^
2c580 28 49 66 20 61 20 48 41 56 49 4e 47 20 63 6c 61  (If a HAVING cla
2c590 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64  use is specified
2c5a0 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74 65  , it is evaluate
2c5b0 64 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 20  d once for each 
2c5c0 67 72 6f 75 70 20 0a 20 20 20 20 6f 66 20 72 6f  group .    of ro
2c5d0 77 73 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e  ws as a [boolean
2c5e0 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 49 66   expression]. If
2c5f0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65   the result of e
2c600 76 61 6c 75 61 74 69 6e 67 20 74 68 65 0a 20 20  valuating the.  
2c610 20 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20    HAVING clause 
2c620 69 73 20 66 61 6c 73 65 2c 20 74 68 65 20 67 72  is false, the gr
2c630 6f 75 70 20 69 73 20 64 69 73 63 61 72 64 65 64  oup is discarded
2c640 2e 29 5e 20 5e 49 66 20 74 68 65 20 48 41 56 49  .)^ ^If the HAVI
2c650 4e 47 20 63 6c 61 75 73 65 20 69 73 0a 20 20 20  NG clause is.   
2c660 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 65 78   an aggregate ex
2c670 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 69 73 20  pression, it is 
2c680 65 76 61 6c 75 61 74 65 64 20 61 63 72 6f 73 73  evaluated across
2c690 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68 65   all rows in the
2c6a0 20 67 72 6f 75 70 2e 20 5e 49 66 0a 20 20 20 20   group. ^If.    
2c6b0 61 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20  a HAVING clause 
2c6c0 69 73 20 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61  is a non-aggrega
2c6d0 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69  te expression, i
2c6e0 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 77  t is evaluated w
2c6f0 69 74 68 20 72 65 73 70 65 63 74 0a 20 20 20 20  ith respect.    
2c700 74 6f 20 61 6e 20 61 72 62 69 74 72 61 72 69 6c  to an arbitraril
2c710 79 20 73 65 6c 65 63 74 65 64 20 72 6f 77 20 66  y selected row f
2c720 72 6f 6d 20 74 68 65 20 67 72 6f 75 70 2e 20 20  rom the group.  
2c730 5e 54 68 65 20 48 41 56 49 4e 47 20 65 78 70 72  ^The HAVING expr
2c740 65 73 73 69 6f 6e 20 6d 61 79 0a 20 20 20 20 72  ession may.    r
2c750 65 66 65 72 20 74 6f 20 76 61 6c 75 65 73 2c 20  efer to values, 
2c760 65 76 65 6e 20 61 67 67 72 65 67 61 74 65 20 66  even aggregate f
2c770 75 6e 63 74 69 6f 6e 73 2c 20 74 68 61 74 20 61  unctions, that a
2c780 72 65 20 6e 6f 74 20 69 6e 20 74 68 65 20 72 65  re not in the re
2c790 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 20 20 20 20 3c  sult.</p>..    <
2c7a0 70 3e 5e 45 61 63 68 20 65 78 70 72 65 73 73 69  p>^Each expressi
2c7b0 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  on in the result
2c7c0 2d 73 65 74 20 69 73 20 74 68 65 6e 20 65 76 61  -set is then eva
2c7d0 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20  luated once for 
2c7e0 65 61 63 68 0a 20 20 20 20 67 72 6f 75 70 20 6f  each.    group o
2c7f0 66 20 72 6f 77 73 2e 20 5e 49 66 20 74 68 65 20  f rows. ^If the 
2c800 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
2c810 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65   aggregate expre
2c820 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 0a 20 20  ssion, it is .  
2c830 20 20 65 76 61 6c 75 61 74 65 64 20 61 63 72 6f    evaluated acro
2c840 73 73 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74  ss all rows in t
2c850 68 65 20 67 72 6f 75 70 2e 20 5e 4f 74 68 65 72  he group. ^Other
2c860 77 69 73 65 2c 20 69 74 20 69 73 20 65 76 61 6c  wise, it is eval
2c870 75 61 74 65 64 20 61 67 61 69 6e 73 74 0a 20 20  uated against.  
2c880 20 20 61 20 73 69 6e 67 6c 65 20 61 72 62 69 74    a single arbit
2c890 72 61 72 69 6c 79 20 63 68 6f 73 65 6e 20 72 6f  rarily chosen ro
2c8a0 77 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 74 68  w from within th
2c8b0 65 20 67 72 6f 75 70 2e 20 5e 49 66 20 74 68 65  e group. ^If the
2c8c0 72 65 20 69 73 20 6d 6f 72 65 0a 20 20 20 20 74  re is more.    t
2c8d0 68 61 6e 20 6f 6e 65 20 6e 6f 6e 2d 61 67 67 72  han one non-aggr
2c8e0 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
2c8f0 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73   in the result-s
2c900 65 74 2c 20 74 68 65 6e 20 61 6c 6c 20 73 75 63  et, then all suc
2c910 68 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f 6e  h.    expression
2c920 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 20  s are evaluated 
2c930 66 6f 72 20 74 68 65 20 73 61 6d 65 20 72 6f 77  for the same row
2c940 2e 0a 0a 20 20 20 20 3c 70 3e 5e 45 61 63 68 20  ...    <p>^Each 
2c950 67 72 6f 75 70 20 6f 66 20 69 6e 70 75 74 20 64  group of input d
2c960 61 74 61 73 65 74 20 72 6f 77 73 20 63 6f 6e 74  ataset rows cont
2c970 72 69 62 75 74 65 73 20 61 20 73 69 6e 67 6c 65  ributes a single
2c980 20 72 6f 77 20 74 6f 20 74 68 65 20 0a 20 20 20   row to the .   
2c990 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72   set of result r
2c9a0 6f 77 73 2e 20 5e 53 75 62 6a 65 63 74 20 74 6f  ows. ^Subject to
2c9b0 20 66 69 6c 74 65 72 69 6e 67 20 61 73 73 6f 63   filtering assoc
2c9c0 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 44  iated with the D
2c9d0 49 53 54 49 4e 43 54 0a 20 20 20 20 6b 65 79 77  ISTINCT.    keyw
2c9e0 6f 72 64 2c 20 74 68 65 20 6e 75 6d 62 65 72 20  ord, the number 
2c9f0 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64  of rows returned
2ca00 20 62 79 20 61 6e 20 61 67 67 72 65 67 61 74 65   by an aggregate
2ca10 20 71 75 65 72 79 20 77 69 74 68 20 61 20 47 52   query with a GR
2ca20 4f 55 50 0a 20 20 20 20 42 59 20 63 6c 61 75 73  OUP.    BY claus
2ca30 65 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  e is the same as
2ca40 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 67   the number of g
2ca50 72 6f 75 70 73 20 6f 66 20 72 6f 77 73 20 70 72  roups of rows pr
2ca60 6f 64 75 63 65 64 20 62 79 20 61 70 70 6c 79 69  oduced by applyi
2ca70 6e 67 0a 20 20 20 20 74 68 65 20 47 52 4f 55 50  ng.    the GROUP
2ca80 20 42 59 20 61 6e 64 20 48 41 56 49 4e 47 20 63   BY and HAVING c
2ca90 6c 61 75 73 65 73 20 74 6f 20 74 68 65 20 66 69  lauses to the fi
2caa0 6c 74 65 72 65 64 20 69 6e 70 75 74 20 64 61 74  ltered input dat
2cab0 61 73 65 74 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e  aset..</ul>..<p>
2cac0 3c 62 3e 34 2e 20 52 65 6d 6f 76 61 6c 20 6f 66  <b>4. Removal of
2cad0 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20   duplicate rows 
2cae0 28 44 49 53 54 49 4e 43 54 20 70 72 6f 63 65 73  (DISTINCT proces
2caf0 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e  sing).</b>.<tcl>
2cb00 68 64 5f 66 72 61 67 6d 65 6e 74 20 64 69 73 74  hd_fragment dist
2cb10 69 6e 63 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e  inct</tcl>.<tcl>
2cb20 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 44 49 53  hd_keywords {DIS
2cb30 54 49 4e 43 54 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  TINCT}</tcl>..<p
2cb40 3e 5e 4f 6e 65 20 6f 66 20 74 68 65 20 41 4c 4c  >^One of the ALL
2cb50 20 6f 72 20 44 49 53 54 49 4e 43 54 20 6b 65 79   or DISTINCT key
2cb60 77 6f 72 64 73 20 6d 61 79 20 66 6f 6c 6c 6f 77  words may follow
2cb70 20 74 68 65 20 53 45 4c 45 43 54 20 6b 65 79 77   the SELECT keyw
2cb80 6f 72 64 20 69 6e 20 61 20 0a 73 69 6d 70 6c 65  ord in a .simple
2cb90 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2cba0 74 2e 20 5e 49 66 20 74 68 65 20 73 69 6d 70 6c  t. ^If the simpl
2cbb0 65 20 53 45 4c 45 43 54 20 69 73 20 61 20 53 45  e SELECT is a SE
2cbc0 4c 45 43 54 20 41 4c 4c 2c 20 74 68 65 6e 20 74  LECT ALL, then t
2cbd0 68 65 0a 65 6e 74 69 72 65 20 73 65 74 20 6f 66  he.entire set of
2cbe0 20 72 65 73 75 6c 74 20 72 6f 77 73 20 61 72 65   result rows are
2cbf0 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
2cc00 20 53 45 4c 45 43 54 2e 20 5e 49 66 20 6e 65 69   SELECT. ^If nei
2cc10 74 68 65 72 20 41 4c 4c 20 6f 72 0a 44 49 53 54  ther ALL or.DIST
2cc20 49 4e 43 54 20 61 72 65 20 70 72 65 73 65 6e 74  INCT are present
2cc30 2c 20 74 68 65 6e 20 74 68 65 20 62 65 68 61 76  , then the behav
2cc40 69 6f 72 20 69 73 20 61 73 20 69 66 20 41 4c 4c  ior is as if ALL
2cc50 20 77 65 72 65 20 73 70 65 63 69 66 69 65 64 2e   were specified.
2cc60 20 0a 5e 49 66 20 74 68 65 20 73 69 6d 70 6c 65   .^If the simple
2cc70 20 53 45 4c 45 43 54 20 69 73 20 61 20 53 45 4c   SELECT is a SEL
2cc80 45 43 54 20 44 49 53 54 49 4e 43 54 2c 20 74 68  ECT DISTINCT, th
2cc90 65 6e 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77  en duplicate row
2cca0 73 20 61 72 65 20 72 65 6d 6f 76 65 64 0a 66 72  s are removed.fr
2ccb0 6f 6d 20 74 68 65 20 73 65 74 20 6f 66 20 72 65  om the set of re
2ccc0 73 75 6c 74 20 72 6f 77 73 20 62 65 66 6f 72 65  sult rows before
2ccd0 20 69 74 20 69 73 20 72 65 74 75 72 6e 65 64 2e   it is returned.
2cce0 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73   ^For the purpos
2ccf0 65 73 20 6f 66 0a 64 65 74 65 63 74 69 6e 67 20  es of.detecting 
2cd00 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 2c 20  duplicate rows, 
2cd10 74 77 6f 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  two NULL values 
2cd20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74  are considered t
2cd30 6f 20 62 65 20 65 71 75 61 6c 2e 20 5e 54 68 65  o be equal. ^The
2cd40 0a 6e 6f 72 6d 61 6c 20 72 75 6c 65 73 20 66 6f  .normal rules fo
2cd50 72 20 73 65 6c 65 63 74 69 6e 67 20 61 20 63 6f  r selecting a co
2cd60 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
2cd70 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74   to compare text
2cd80 20 76 61 6c 75 65 73 20 77 69 74 68 0a 61 70 70   values with.app
2cd90 6c 79 2e 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 66 72  ly...<tcl>.hd_fr
2cda0 61 67 6d 65 6e 74 20 63 6f 6d 70 6f 75 6e 64 20  agment compound 
2cdb0 7b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74  {compound select
2cdc0 7d 20 7b 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72  } {compound quer
2cdd0 79 7d 20 7b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c  y} {compound SEL
2cde0 45 43 54 7d 20 7b 63 6f 6d 70 6f 75 6e 64 20 53  ECT} {compound S
2cdf0 45 4c 45 43 54 73 7d 0a 3c 2f 74 63 6c 3e 0a 3c  ELECTs}.</tcl>.<
2ce00 68 33 3e 43 6f 6d 70 6f 75 6e 64 20 53 65 6c 65  h3>Compound Sele
2ce10 63 74 20 53 74 61 74 65 6d 65 6e 74 73 3c 2f 68  ct Statements</h
2ce20 33 3e 0a 0a 3c 70 3e 54 77 6f 20 6f 72 20 6d 6f  3>..<p>Two or mo
2ce30 72 65 20 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43  re [simple SELEC
2ce40 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 20 6d 61  T] statements ma
2ce50 79 20 62 65 20 63 6f 6e 6e 65 63 74 65 64 20 74  y be connected t
2ce60 6f 67 65 74 68 65 72 20 74 6f 20 66 6f 72 6d 0a  ogether to form.
2ce70 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
2ce80 54 20 75 73 69 6e 67 20 74 68 65 20 55 4e 49 4f  T using the UNIO
2ce90 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c 2c 20 49 4e  N, UNION ALL, IN
2cea0 54 45 52 53 45 43 54 20 6f 72 20 45 58 43 45 50  TERSECT or EXCEP
2ceb0 54 20 6f 70 65 72 61 74 6f 72 2c 0a 61 73 20 73  T operator,.as s
2cec0 68 6f 77 6e 20 62 79 20 74 68 65 20 66 6f 6c 6c  hown by the foll
2ced0 6f 77 69 6e 67 20 64 69 61 67 72 61 6d 3a 0a 0a  owing diagram:..
2cee0 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69 76 65 42  <tcl>.RecursiveB
2cef0 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d  ubbleDiagram com
2cf00 70 6f 75 6e 64 2d 73 65 6c 65 63 74 2d 73 74 6d  pound-select-stm
2cf10 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 6e  t.</tcl>..<p>^In
2cf20 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45   a compound SELE
2cf30 43 54 2c 20 61 6c 6c 20 74 68 65 20 63 6f 6e 73  CT, all the cons
2cf40 74 69 74 75 65 6e 74 20 53 45 4c 45 43 54 73 20  tituent SELECTs 
2cf50 6d 75 73 74 20 72 65 74 75 72 6e 20 74 68 65 20  must return the 
2cf60 73 61 6d 65 20 0a 6e 75 6d 62 65 72 20 6f 66 20  same .number of 
2cf70 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20  result columns. 
2cf80 5e 41 73 20 74 68 65 20 63 6f 6d 70 6f 6e 65 6e  ^As the componen
2cf90 74 73 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64  ts of a compound
2cfa0 20 53 45 4c 45 43 54 20 6d 75 73 74 0a 62 65 20   SELECT must.be 
2cfb0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
2cfc0 61 74 65 6d 65 6e 74 73 2c 20 74 68 65 79 20 6d  atements, they m
2cfd0 61 79 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 5b  ay not contain [
2cfe0 4f 52 44 45 52 20 42 59 5d 20 6f 72 20 5b 4c 49  ORDER BY] or [LI
2cff0 4d 49 54 5d 20 63 6c 61 75 73 65 73 2e 0a 5e 5b  MIT] clauses..^[
2d000 4f 52 44 45 52 20 42 59 5d 20 61 6e 64 20 5b 4c  ORDER BY] and [L
2d010 49 4d 49 54 5d 20 63 6c 61 75 73 65 73 20 6d 61  IMIT] clauses ma
2d020 79 20 6f 6e 6c 79 20 6f 63 63 75 72 20 61 74 20  y only occur at 
2d030 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 65  the end of the e
2d040 6e 74 69 72 65 20 63 6f 6d 70 6f 75 6e 64 0a 53  ntire compound.S
2d050 45 4c 45 43 54 2c 20 61 6e 64 20 74 68 65 6e 20  ELECT, and then 
2d060 6f 6e 6c 79 20 69 66 20 74 68 65 20 66 69 6e 61  only if the fina
2d070 6c 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  l element of the
2d080 20 63 6f 6d 70 6f 75 6e 64 20 69 73 20 6e 6f 74   compound is not
2d090 20 61 20 5b 56 41 4c 55 45 53 5d 20 63 6c 61 75   a [VALUES] clau
2d0a0 73 65 2e 0a 0a 3c 70 3e 5e 41 20 63 6f 6d 70 6f  se...<p>^A compo
2d0b0 75 6e 64 20 53 45 4c 45 43 54 20 63 72 65 61 74  und SELECT creat
2d0c0 65 64 20 75 73 69 6e 67 20 55 4e 49 4f 4e 20 41  ed using UNION A
2d0d0 4c 4c 20 6f 70 65 72 61 74 6f 72 20 72 65 74 75  LL operator retu
2d0e0 72 6e 73 20 61 6c 6c 20 74 68 65 20 72 6f 77 73  rns all the rows
2d0f0 0a 66 72 6f 6d 20 74 68 65 20 53 45 4c 45 43 54  .from the SELECT
2d100 20 74 6f 20 74 68 65 20 6c 65 66 74 20 6f 66 20   to the left of 
2d110 74 68 65 20 55 4e 49 4f 4e 20 41 4c 4c 20 6f 70  the UNION ALL op
2d120 65 72 61 74 6f 72 2c 20 61 6e 64 20 61 6c 6c 20  erator, and all 
2d130 74 68 65 20 72 6f 77 73 0a 66 72 6f 6d 20 74 68  the rows.from th
2d140 65 20 53 45 4c 45 43 54 20 74 6f 20 74 68 65 20  e SELECT to the 
2d150 72 69 67 68 74 20 6f 66 20 69 74 2e 20 5e 54 68  right of it. ^Th
2d160 65 20 55 4e 49 4f 4e 20 6f 70 65 72 61 74 6f 72  e UNION operator
2d170 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20   works the same 
2d180 77 61 79 20 61 73 0a 55 4e 49 4f 4e 20 41 4c 4c  way as.UNION ALL
2d190 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 64 75  , except that du
2d1a0 70 6c 69 63 61 74 65 20 72 6f 77 73 20 61 72 65  plicate rows are
2d1b0 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68   removed from th
2d1c0 65 20 66 69 6e 61 6c 20 72 65 73 75 6c 74 20 73  e final result s
2d1d0 65 74 2e 0a 5e 54 68 65 20 49 4e 54 45 52 53 45  et..^The INTERSE
2d1e0 43 54 20 6f 70 65 72 61 74 6f 72 20 72 65 74 75  CT operator retu
2d1f0 72 6e 73 20 74 68 65 20 69 6e 74 65 72 73 65 63  rns the intersec
2d200 74 69 6f 6e 20 6f 66 20 74 68 65 20 72 65 73 75  tion of the resu
2d210 6c 74 73 20 6f 66 20 74 68 65 20 6c 65 66 74 20  lts of the left 
2d220 61 6e 64 0a 72 69 67 68 74 20 53 45 4c 45 43 54  and.right SELECT
2d230 73 2e 20 20 5e 54 68 65 20 45 58 43 45 50 54 20  s.  ^The EXCEPT 
2d240 6f 70 65 72 61 74 6f 72 20 72 65 74 75 72 6e 73  operator returns
2d250 20 74 68 65 20 73 75 62 73 65 74 20 6f 66 20 72   the subset of r
2d260 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62 79 20  ows returned by 
2d270 74 68 65 0a 6c 65 66 74 20 53 45 4c 45 43 54 20  the.left SELECT 
2d280 74 68 61 74 20 61 72 65 20 6e 6f 74 20 61 6c 73  that are not als
2d290 6f 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  o returned by th
2d2a0 65 20 72 69 67 68 74 2d 68 61 6e 64 20 53 45 4c  e right-hand SEL
2d2b0 45 43 54 2e 20 5e 44 75 70 6c 69 63 61 74 65 0a  ECT. ^Duplicate.
2d2c0 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64  rows are removed
2d2d0 20 66 72 6f 6d 20 74 68 65 20 72 65 73 75 6c 74   from the result
2d2e0 73 20 6f 66 20 49 4e 54 45 52 53 45 43 54 20 61  s of INTERSECT a
2d2f0 6e 64 20 45 58 43 45 50 54 20 6f 70 65 72 61 74  nd EXCEPT operat
2d300 6f 72 73 20 62 65 66 6f 72 65 20 74 68 65 0a 72  ors before the.r
2d310 65 73 75 6c 74 20 73 65 74 20 69 73 20 72 65 74  esult set is ret
2d320 75 72 6e 65 64 2e 0a 0a 3c 70 3e 5e 46 6f 72 20  urned...<p>^For 
2d330 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20  the purposes of 
2d340 64 65 74 65 72 6d 69 6e 69 6e 67 20 64 75 70 6c  determining dupl
2d350 69 63 61 74 65 20 72 6f 77 73 20 66 6f 72 20 74  icate rows for t
2d360 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 63 6f  he results of co
2d370 6d 70 6f 75 6e 64 0a 53 45 4c 45 43 54 20 6f 70  mpound.SELECT op
2d380 65 72 61 74 6f 72 73 2c 20 4e 55 4c 4c 20 76 61  erators, NULL va
2d390 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65  lues are conside
2d3a0 72 65 64 20 65 71 75 61 6c 20 74 6f 20 6f 74 68  red equal to oth
2d3b0 65 72 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61  er NULL values a
2d3c0 6e 64 0a 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  nd.distinct from
2d3d0 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61   all non-NULL va
2d3e0 6c 75 65 73 2e 20 5e 54 68 65 20 63 6f 6c 6c 61  lues. ^The colla
2d3f0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73  tion sequence us
2d400 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 0a 74  ed to compare .t
2d410 77 6f 20 74 65 78 74 20 76 61 6c 75 65 73 20 69  wo text values i
2d420 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61 73 20  s determined as 
2d430 69 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  if the columns o
2d440 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72  f the left and r
2d450 69 67 68 74 2d 68 61 6e 64 0a 53 45 4c 45 43 54  ight-hand.SELECT
2d460 20 73 74 61 74 65 6d 65 6e 74 73 20 77 65 72 65   statements were
2d470 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69   the left and ri
2d480 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64  ght-hand operand
2d490 73 20 6f 66 20 74 68 65 20 65 71 75 61 6c 73 20  s of the equals 
2d4a0 28 3d 29 0a 6f 70 65 72 61 74 6f 72 2c 20 65 78  (=).operator, ex
2d4b0 63 65 70 74 20 74 68 61 74 20 67 72 65 61 74 65  cept that greate
2d4c0 72 20 70 72 65 63 65 64 65 6e 63 65 20 69 73 20  r precedence is 
2d4d0 6e 6f 74 20 61 73 73 69 67 6e 65 64 20 74 6f 20  not assigned to 
2d4e0 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a 73 65 71  a collation .seq
2d4f0 75 65 6e 63 65 20 73 70 65 63 69 66 69 65 64 20  uence specified 
2d500 77 69 74 68 20 74 68 65 20 70 6f 73 74 66 69 78  with the postfix
2d510 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f   COLLATE operato
2d520 72 2e 20 5e 4e 6f 20 61 66 66 69 6e 69 74 79 0a  r. ^No affinity.
2d530 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 73 20  transformations 
2d540 61 72 65 20 61 70 70 6c 69 65 64 20 74 6f 20 61  are applied to a
2d550 6e 79 20 76 61 6c 75 65 73 20 77 68 65 6e 20 63  ny values when c
2d560 6f 6d 70 61 72 69 6e 67 20 72 6f 77 73 20 61 73  omparing rows as
2d570 20 70 61 72 74 20 6f 66 20 61 0a 63 6f 6d 70 6f   part of a.compo
2d580 75 6e 64 20 53 45 4c 45 43 54 2e 20 0a 0a 3c 70  und SELECT. ..<p
2d590 3e 5e 28 57 68 65 6e 20 74 68 72 65 65 20 6f 72  >^(When three or
2d5a0 20 6d 6f 72 65 20 73 69 6d 70 6c 65 20 53 45 4c   more simple SEL
2d5b0 45 43 54 73 20 61 72 65 20 63 6f 6e 6e 65 63 74  ECTs are connect
2d5c0 65 64 20 69 6e 74 6f 20 61 20 63 6f 6d 70 6f 75  ed into a compou
2d5d0 6e 64 20 53 45 4c 45 43 54 2c 0a 74 68 65 79 20  nd SELECT,.they 
2d5e0 67 72 6f 75 70 20 66 72 6f 6d 20 6c 65 66 74 20  group from left 
2d5f0 74 6f 20 72 69 67 68 74 2e 20 49 6e 20 6f 74 68  to right. In oth
2d600 65 72 20 77 6f 72 64 73 2c 20 69 66 20 22 41 22  er words, if "A"
2d610 2c 20 22 42 22 20 61 6e 64 20 22 43 22 20 61 72  , "B" and "C" ar
2d620 65 20 61 6c 6c 0a 73 69 6d 70 6c 65 20 53 45 4c  e all.simple SEL
2d630 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2c 20  ECT statements, 
2d640 28 41 20 6f 70 20 42 20 6f 70 20 43 29 20 69 73  (A op B op C) is
2d650 20 70 72 6f 63 65 73 73 65 64 20 61 73 20 28 28   processed as ((
2d660 41 20 6f 70 20 42 29 20 6f 70 20 43 29 2e 29 5e  A op B) op C).)^
2d670 0a 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  ..</p>..<tcl>hd_
2d680 66 72 61 67 6d 65 6e 74 20 6f 72 64 65 72 62 79  fragment orderby
2d690 20 7b 6f 72 64 65 72 20 62 79 7d 20 7b 4f 52 44   {order by} {ORD
2d6a0 45 52 20 42 59 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  ER BY}</tcl>.<h3
2d6b0 3e 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c  >The ORDER BY cl
2d6c0 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 49 66  ause</h3>..<p>If
2d6d0 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
2d6e0 65 6e 74 20 74 68 61 74 20 72 65 74 75 72 6e 73  ent that returns
2d6f0 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72   more than one r
2d700 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  ow does not have
2d710 20 61 6e 0a 4f 52 44 45 52 20 42 59 20 63 6c 61   an.ORDER BY cla
2d720 75 73 65 2c 20 74 68 65 20 6f 72 64 65 72 20 69  use, the order i
2d730 6e 20 77 68 69 63 68 20 74 68 65 20 72 6f 77 73  n which the rows
2d740 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 69 73   are returned is
2d750 20 75 6e 64 65 66 69 6e 65 64 2e 0a 4f 72 2c 20   undefined..Or, 
2d760 69 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  if a SELECT stat
2d770 65 6d 65 6e 74 20 64 6f 65 73 20 68 61 76 65 20  ement does have 
2d780 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  an ORDER BY clau
2d790 73 65 2c 20 74 68 65 6e 20 74 68 65 20 6c 69 73  se, then the lis
2d7a0 74 20 6f 66 0a 65 78 70 72 65 73 73 69 6f 6e 73  t of.expressions
2d7b0 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
2d7c0 20 4f 52 44 45 52 20 42 59 20 64 65 74 65 72 6d   ORDER BY determ
2d7d0 69 6e 65 20 74 68 65 20 6f 72 64 65 72 20 69 6e  ine the order in
2d7e0 20 77 68 69 63 68 20 72 6f 77 73 0a 61 72 65 20   which rows.are 
2d7f0 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20  returned to the 
2d800 75 73 65 72 2e 0a 0a 3c 70 3e 0a 5e 49 6e 20 61  user...<p>.^In a
2d810 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43   [compound SELEC
2d820 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c 20 6f 6e  T] statement, on
2d830 6c 79 20 74 68 65 20 6c 61 73 74 20 6f 72 20 72  ly the last or r
2d840 69 67 68 74 2d 6d 6f 73 74 20 5b 73 69 6d 70 6c  ight-most [simpl
2d850 65 20 53 45 4c 45 43 54 5d 0a 6d 61 79 20 68 61  e SELECT].may ha
2d860 76 65 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63  ve an ORDER BY c
2d870 6c 61 75 73 65 2e 20 5e 54 68 61 74 20 4f 52 44  lause. ^That ORD
2d880 45 52 20 42 59 20 63 6c 61 75 73 65 20 77 69 6c  ER BY clause wil
2d890 6c 20 61 70 70 6c 79 20 61 63 72 6f 73 73 20 61  l apply across a
2d8a0 6c 6c 20 65 6c 65 6d 65 6e 74 73 20 6f 66 0a 74  ll elements of.t
2d8b0 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 20 5e 49 66  he compound. ^If
2d8c0 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20   the right-most 
2d8d0 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 5b 63 6f  element of a [co
2d8e0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 20 69  mpound SELECT] i
2d8f0 73 20 61 20 5b 56 41 4c 55 45 53 5d 20 63 6c 61  s a [VALUES] cla
2d900 75 73 65 2c 0a 74 68 65 6e 20 6e 6f 20 4f 52 44  use,.then no ORD
2d910 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ER BY clause is 
2d920 61 6c 6c 6f 77 65 64 20 6f 6e 20 74 68 61 74 20  allowed on that 
2d930 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 0a 3c 70 3e  statement....<p>
2d940 5e 52 6f 77 73 20 61 72 65 20 66 69 72 73 74 20  ^Rows are first 
2d950 73 6f 72 74 65 64 20 62 61 73 65 64 20 6f 6e 20  sorted based on 
2d960 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 65  the results of.e
2d970 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 6c 65  valuating the le
2d980 66 74 2d 6d 6f 73 74 20 65 78 70 72 65 73 73 69  ft-most expressi
2d990 6f 6e 20 69 6e 20 74 68 65 20 4f 52 44 45 52 20  on in the ORDER 
2d9a0 42 59 20 6c 69 73 74 2c 20 74 68 65 6e 20 74 69  BY list, then ti
2d9b0 65 73 20 61 72 65 20 62 72 6f 6b 65 6e 0a 62 79  es are broken.by
2d9c0 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
2d9d0 73 65 63 6f 6e 64 20 6c 65 66 74 2d 6d 6f 73 74  second left-most
2d9e0 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20   expression and 
2d9f0 73 6f 20 6f 6e 2e 20 54 68 65 20 6f 72 64 65 72  so on. The order
2da00 20 69 6e 20 77 68 69 63 68 0a 74 77 6f 20 72 6f   in which.two ro
2da10 77 73 20 66 6f 72 20 77 68 69 63 68 20 61 6c 6c  ws for which all
2da20 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
2da30 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 20 74  sions evaluate t
2da40 6f 20 65 71 75 61 6c 20 76 61 6c 75 65 73 20 61  o equal values a
2da50 72 65 0a 72 65 74 75 72 6e 65 64 20 69 73 20 75  re.returned is u
2da60 6e 64 65 66 69 6e 65 64 2e 20 5e 45 61 63 68 20  ndefined. ^Each 
2da70 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73  ORDER BY express
2da80 69 6f 6e 20 6d 61 79 20 62 65 20 6f 70 74 69 6f  ion may be optio
2da90 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a 62  nally followed.b
2daa0 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 6b 65 79  y one of the key
2dab0 77 6f 72 64 73 20 41 53 43 20 28 73 6d 61 6c 6c  words ASC (small
2dac0 65 72 20 76 61 6c 75 65 73 20 61 72 65 20 72 65  er values are re
2dad0 74 75 72 6e 65 64 20 66 69 72 73 74 29 20 6f 72  turned first) or
2dae0 20 44 45 53 43 20 28 6c 61 72 67 65 72 0a 76 61   DESC (larger.va
2daf0 6c 75 65 73 20 61 72 65 20 72 65 74 75 72 6e 65  lues are returne
2db00 64 20 66 69 72 73 74 29 2e 20 5e 49 66 20 6e 65  d first). ^If ne
2db10 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45 53  ither ASC or DES
2db20 43 20 61 72 65 20 73 70 65 63 69 66 69 65 64 2c  C are specified,
2db30 20 72 6f 77 73 0a 61 72 65 20 73 6f 72 74 65 64   rows.are sorted
2db40 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 28 73   in ascending (s
2db50 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73 20 66 69  maller values fi
2db60 72 73 74 29 20 6f 72 64 65 72 20 62 79 20 64 65  rst) order by de
2db70 66 61 75 6c 74 2e 0a 0a 3c 70 3e 45 61 63 68 20  fault...<p>Each 
2db80 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73  ORDER BY express
2db90 69 6f 6e 20 69 73 20 70 72 6f 63 65 73 73 65 64  ion is processed
2dba0 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e   as follows:</p>
2dbb0 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49  ..<ol>.<li><p>^I
2dbc0 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65  f the ORDER BY e
2dbd0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 63  xpression is a c
2dbe0 6f 6e 73 74 61 6e 74 20 69 6e 74 65 67 65 72 20  onstant integer 
2dbf0 4b 20 74 68 65 6e 20 74 68 65 0a 65 78 70 72 65  K then the.expre
2dc00 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65  ssion is conside
2dc10 72 65 64 20 61 6e 20 61 6c 69 61 73 20 66 6f 72  red an alias for
2dc20 20 74 68 65 20 4b 2d 74 68 20 63 6f 6c 75 6d 6e   the K-th column
2dc30 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 73   of the result s
2dc40 65 74 0a 28 63 6f 6c 75 6d 6e 73 20 61 72 65 20  et.(columns are 
2dc50 6e 75 6d 62 65 72 65 64 20 66 72 6f 6d 20 6c 65  numbered from le
2dc60 66 74 20 74 6f 20 72 69 67 68 74 20 73 74 61 72  ft to right star
2dc70 74 69 6e 67 20 77 69 74 68 20 31 29 2e 0a 0a 3c  ting with 1)...<
2dc80 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52  li><p>^If the OR
2dc90 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
2dca0 6e 20 69 73 20 61 6e 20 69 64 65 6e 74 69 66 69  n is an identifi
2dcb0 65 72 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  er that correspo
2dcc0 6e 64 73 20 74 6f 0a 74 68 65 20 61 6c 69 61 73  nds to.the alias
2dcd0 20 6f 66 20 6f 6e 65 20 6f 66 20 74 68 65 20 6f   of one of the o
2dce0 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73 2c 20 74  utput columns, t
2dcf0 68 65 6e 20 74 68 65 20 65 78 70 72 65 73 73 69  hen the expressi
2dd00 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  on is considered
2dd10 0a 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68  .an alias for th
2dd20 61 74 20 63 6f 6c 75 6d 6e 2e 0a 0a 3c 6c 69 3e  at column...<li>
2dd30 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 69  <p>^Otherwise, i
2dd40 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65  f the ORDER BY e
2dd50 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 79  xpression is any
2dd60 20 6f 74 68 65 72 20 65 78 70 72 65 73 73 69 6f   other expressio
2dd70 6e 2c 20 69 74 20 0a 69 73 20 65 76 61 6c 75 61  n, it .is evalua
2dd80 74 65 64 20 61 6e 64 20 74 68 65 20 72 65 74 75  ted and the retu
2dd90 72 6e 65 64 20 76 61 6c 75 65 20 75 73 65 64 20  rned value used 
2dda0 74 6f 20 6f 72 64 65 72 20 74 68 65 20 6f 75 74  to order the out
2ddb0 70 75 74 20 72 6f 77 73 2e 20 5e 49 66 0a 74 68  put rows. ^If.th
2ddc0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
2ddd0 6e 74 20 69 73 20 61 20 73 69 6d 70 6c 65 20 53  nt is a simple S
2dde0 45 4c 45 43 54 2c 20 74 68 65 6e 20 61 6e 20 4f  ELECT, then an O
2ddf0 52 44 45 52 20 42 59 20 6d 61 79 20 63 6f 6e 74  RDER BY may cont
2de00 61 69 6e 20 61 6e 79 0a 61 72 62 69 74 72 61 72  ain any.arbitrar
2de10 79 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 5e  y expressions. ^
2de20 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 20  However, if the 
2de30 53 45 4c 45 43 54 20 69 73 20 61 20 63 6f 6d 70  SELECT is a comp
2de40 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20 74 68 65  ound SELECT, the
2de50 6e 0a 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  n.ORDER BY expre
2de60 73 73 69 6f 6e 73 20 74 68 61 74 20 61 72 65 20  ssions that are 
2de70 6e 6f 74 20 61 6c 69 61 73 65 73 20 74 6f 20 6f  not aliases to o
2de80 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73 20 6d 75  utput columns mu
2de90 73 74 20 62 65 20 65 78 61 63 74 6c 79 0a 74 68  st be exactly.th
2dea0 65 20 73 61 6d 65 20 61 73 20 61 6e 20 65 78 70  e same as an exp
2deb0 72 65 73 73 69 6f 6e 20 75 73 65 64 20 61 73 20  ression used as 
2dec0 61 6e 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e  an output column
2ded0 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 46 6f 72  ..</ol>..<p>^For
2dee0 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66   the purposes of
2def0 20 73 6f 72 74 69 6e 67 20 72 6f 77 73 2c 20 76   sorting rows, v
2df00 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72  alues are compar
2df10 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ed in the same w
2df20 61 79 0a 61 73 20 66 6f 72 20 5b 63 6f 6d 70 61  ay.as for [compa
2df30 72 69 73 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e  rison expression
2df40 73 5d 2e 20 54 68 65 20 63 6f 6c 6c 61 74 69 6f  s]. The collatio
2df50 6e 20 73 65 71 75 65 6e 63 65 20 75 73 65 64 20  n sequence used 
2df60 74 6f 20 63 6f 6d 70 61 72 65 0a 74 77 6f 20 74  to compare.two t
2df70 65 78 74 20 76 61 6c 75 65 73 20 69 73 20 64 65  ext values is de
2df80 74 65 72 6d 69 6e 65 64 20 61 73 20 66 6f 6c 6c  termined as foll
2df90 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69  ows:..<ol>.  <li
2dfa0 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45  ><p>^If the ORDE
2dfb0 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
2dfc0 69 73 20 61 73 73 69 67 6e 65 64 20 61 20 63 6f  is assigned a co
2dfd0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
2dfe0 20 75 73 69 6e 67 0a 20 20 74 68 65 20 70 6f 73   using.  the pos
2dff0 74 66 69 78 20 5b 43 4f 4c 4c 41 54 45 20 6f 70  tfix [COLLATE op
2e000 65 72 61 74 6f 72 5d 2c 20 74 68 65 6e 20 74 68  erator], then th
2e010 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c 6c  e specified coll
2e020 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69  ation sequence i
2e030 73 0a 20 20 75 73 65 64 2e 0a 20 20 3c 6c 69 3e  s.  used..  <li>
2e040 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 69  <p>^Otherwise, i
2e050 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65  f the ORDER BY e
2e060 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
2e070 61 6c 69 61 73 20 74 6f 20 61 6e 20 65 78 70 72  alias to an expr
2e080 65 73 73 69 6f 6e 0a 20 20 74 68 61 74 20 68 61  ession.  that ha
2e090 73 20 62 65 65 6e 20 61 73 73 69 67 6e 65 64 20  s been assigned 
2e0a0 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  a collation sequ
2e0b0 65 6e 63 65 20 75 73 69 6e 67 20 74 68 65 20 70  ence using the p
2e0c0 6f 73 74 66 69 78 20 0a 20 20 5b 43 4f 4c 4c 41  ostfix .  [COLLA
2e0d0 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74 68  TE operator], th
2e0e0 65 6e 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e  en the collation
2e0f0 20 73 65 71 75 65 6e 63 65 20 61 73 73 69 67 6e   sequence assign
2e100 65 64 20 74 6f 20 74 68 65 20 61 6c 69 61 73 65  ed to the aliase
2e110 64 0a 20 20 65 78 70 72 65 73 73 69 6f 6e 20 69  d.  expression i
2e120 73 20 75 73 65 64 2e 0a 20 20 3c 6c 69 3e 3c 70  s used..  <li><p
2e130 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  >^Otherwise, if 
2e140 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70  the ORDER BY exp
2e150 72 65 73 73 69 6f 6e 20 69 73 20 61 20 63 6f 6c  ression is a col
2e160 75 6d 6e 20 6f 72 20 61 6e 20 61 6c 69 61 73 20  umn or an alias 
2e170 6f 66 0a 20 20 61 6e 20 65 78 70 72 65 73 73 69  of.  an expressi
2e180 6f 6e 20 74 68 61 74 20 69 73 20 61 20 63 6f 6c  on that is a col
2e190 75 6d 6e 2c 20 74 68 65 6e 20 74 68 65 20 64 65  umn, then the de
2e1a0 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20  fault collation 
2e1b0 73 65 71 75 65 6e 63 65 20 66 6f 72 0a 20 20 74  sequence for.  t
2e1c0 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65  he column is use
2e1d0 64 2e 20 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74  d. .  <li><p>^Ot
2e1e0 68 65 72 77 69 73 65 2c 20 74 68 65 20 5b 42 49  herwise, the [BI
2e1f0 4e 41 52 59 5d 20 63 6f 6c 6c 61 74 69 6f 6e 20  NARY] collation 
2e200 73 65 71 75 65 6e 63 65 20 69 73 20 75 73 65 64  sequence is used
2e210 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49 6e 20 61  ..</ol>..<p>In a
2e220 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43   [compound SELEC
2e230 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c 20 61 6c  T] statement, al
2e240 6c 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  l ORDER BY expre
2e250 73 73 69 6f 6e 73 20 61 72 65 20 68 61 6e 64 6c  ssions are handl
2e260 65 64 0a 61 73 20 61 6c 69 61 73 65 73 20 66 6f  ed.as aliases fo
2e270 72 20 6f 6e 65 20 6f 66 20 74 68 65 20 72 65 73  r one of the res
2e280 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  ult columns of t
2e290 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 0a 5e 28 49  he compound..^(I
2e2a0 66 20 61 6e 20 4f 52 44 45 52 20 42 59 20 65 78  f an ORDER BY ex
2e2b0 70 72 65 73 73 69 6f 6e 20 69 73 20 6e 6f 74 20  pression is not 
2e2c0 61 6e 20 69 6e 74 65 67 65 72 20 61 6c 69 61 73  an integer alias
2e2d0 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20 73 65  , then SQLite se
2e2e0 61 72 63 68 65 73 0a 74 68 65 20 6c 65 66 74 2d  arches.the left-
2e2f0 6d 6f 73 74 20 53 45 4c 45 43 54 20 69 6e 20 74  most SELECT in t
2e300 68 65 20 63 6f 6d 70 6f 75 6e 64 20 66 6f 72 20  he compound for 
2e310 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20  a result column 
2e320 74 68 61 74 20 6d 61 74 63 68 65 73 20 65 69 74  that matches eit
2e330 68 65 72 0a 74 68 65 20 73 65 63 6f 6e 64 20 6f  her.the second o
2e340 72 20 74 68 69 72 64 20 72 75 6c 65 73 20 61 62  r third rules ab
2e350 6f 76 65 2e 20 49 66 20 61 20 6d 61 74 63 68 20  ove. If a match 
2e360 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 73 65  is found, the se
2e370 61 72 63 68 20 73 74 6f 70 73 20 61 6e 64 0a 74  arch stops and.t
2e380 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
2e390 20 68 61 6e 64 6c 65 64 20 61 73 20 61 6e 20 61   handled as an a
2e3a0 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72 65 73  lias for the res
2e3b0 75 6c 74 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20  ult column that 
2e3c0 69 74 20 68 61 73 20 62 65 65 6e 0a 6d 61 74 63  it has been.matc
2e3d0 68 65 64 20 61 67 61 69 6e 73 74 2e 20 4f 74 68  hed against. Oth
2e3e0 65 72 77 69 73 65 2c 20 74 68 65 20 6e 65 78 74  erwise, the next
2e3f0 20 53 45 4c 45 43 54 20 74 6f 20 74 68 65 20 72   SELECT to the r
2e400 69 67 68 74 20 69 73 20 74 72 69 65 64 2c 20 61  ight is tried, a
2e410 6e 64 20 73 6f 20 6f 6e 2e 29 5e 0a 5e 49 66 20  nd so on.)^.^If 
2e420 6e 6f 20 6d 61 74 63 68 69 6e 67 20 65 78 70 72  no matching expr
2e430 65 73 73 69 6f 6e 20 63 61 6e 20 62 65 20 66 6f  ession can be fo
2e440 75 6e 64 20 69 6e 20 74 68 65 20 72 65 73 75 6c  und in the resul
2e450 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 79  t columns of any
2e460 0a 63 6f 6e 73 74 69 74 75 65 6e 74 20 53 45 4c  .constituent SEL
2e470 45 43 54 2c 20 69 74 20 69 73 20 61 6e 20 65 72  ECT, it is an er
2e480 72 6f 72 2e 20 5e 45 61 63 68 20 74 65 72 6d 20  ror. ^Each term 
2e490 6f 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  of the ORDER BY 
2e4a0 63 6c 61 75 73 65 20 69 73 0a 70 72 6f 63 65 73  clause is.proces
2e4b0 73 65 64 20 73 65 70 61 72 61 74 65 6c 79 20 61  sed separately a
2e4c0 6e 64 20 6d 61 79 20 62 65 20 6d 61 74 63 68 65  nd may be matche
2e4d0 64 20 61 67 61 69 6e 73 74 20 72 65 73 75 6c 74  d against result
2e4e0 20 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d 20 64 69   columns from di
2e4f0 66 66 65 72 65 6e 74 0a 53 45 4c 45 43 54 20 73  fferent.SELECT s
2e500 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65  tatements in the
2e510 20 63 6f 6d 70 6f 75 6e 64 2e 3c 2f 70 3e 0a 0a   compound.</p>..
2e520 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
2e530 20 6c 69 6d 69 74 6f 66 66 73 65 74 20 7b 4c 49   limitoffset {LI
2e540 4d 49 54 7d 20 7b 4f 46 46 53 45 54 7d 3c 2f 74  MIT} {OFFSET}</t
2e550 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 4c 49 4d 49  cl>.<h3>The LIMI
2e560 54 20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c  T clause</h3>..<
2e570 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20 63 6c 61  p>^The LIMIT cla
2e580 75 73 65 20 69 73 20 75 73 65 64 20 74 6f 20 70  use is used to p
2e590 6c 61 63 65 20 61 6e 20 75 70 70 65 72 20 62 6f  lace an upper bo
2e5a0 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65  und on the numbe
2e5b0 72 20 6f 66 20 72 6f 77 73 0a 72 65 74 75 72 6e  r of rows.return
2e5c0 65 64 20 62 79 20 74 68 65 20 65 6e 74 69 72 65  ed by the entire
2e5d0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2e5e0 74 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 5b 63 6f  t...<p>^In a [co
2e5f0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 2c 20  mpound SELECT], 
2e600 6f 6e 6c 79 20 74 68 65 0a 6c 61 73 74 20 6f 72  only the.last or
2e610 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b 73 69 6d   right-most [sim
2e620 70 6c 65 20 53 45 4c 45 43 54 5d 20 6d 61 79 20  ple SELECT] may 
2e630 63 6f 6e 74 61 69 6e 20 61 20 4c 49 4d 49 54 20  contain a LIMIT 
2e640 63 6c 61 75 73 65 2e 20 20 0a 5e 49 6e 20 61 20  clause.  .^In a 
2e650 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  [compound SELECT
2e660 5d 2c 20 0a 74 68 65 20 4c 49 4d 49 54 20 63 6c  ], .the LIMIT cl
2e670 61 75 73 65 20 61 70 70 6c 69 65 73 20 74 6f 20  ause applies to 
2e680 74 68 65 20 65 6e 74 69 72 65 20 63 6f 6d 70 6f  the entire compo
2e690 75 6e 64 2c 20 6e 6f 74 20 6a 75 73 74 20 74 68  und, not just th
2e6a0 65 20 66 69 6e 61 6c 20 53 45 4c 45 43 54 2e 0a  e final SELECT..
2e6b0 5e 49 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f  ^If the right-mo
2e6c0 73 74 20 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43  st [simple SELEC
2e6d0 54 5d 20 69 73 20 61 20 5b 56 41 4c 55 45 53 20  T] is a [VALUES 
2e6e0 63 6c 61 75 73 65 5d 20 74 68 65 6e 20 6e 6f 20  clause] then no 
2e6f0 4c 49 4d 49 54 20 63 6c 61 75 73 65 0a 69 73 20  LIMIT clause.is 
2e700 61 6c 6c 6f 77 65 64 2e 0a 0a 3c 70 3e 5e 41 6e  allowed...<p>^An
2e710 79 20 73 63 61 6c 61 72 20 65 78 70 72 65 73 73  y scalar express
2e720 69 6f 6e 20 6d 61 79 20 62 65 20 75 73 65 64 20  ion may be used 
2e730 69 6e 20 74 68 65 20 0a 4c 49 4d 49 54 20 63 6c  in the .LIMIT cl
2e740 61 75 73 65 2c 20 73 6f 20 6c 6f 6e 67 20 61 73  ause, so long as
2e750 20 69 74 20 65 76 61 6c 75 61 74 65 73 20 74 6f   it evaluates to
2e760 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 61   an integer or a
2e770 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20   value that can 
2e780 62 65 0a 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f  be.losslessly co
2e790 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e  nverted to an in
2e7a0 74 65 67 65 72 2e 20 5e 49 66 20 74 68 65 20 65  teger. ^If the e
2e7b0 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61  xpression evalua
2e7c0 74 65 73 20 74 6f 20 61 20 4e 55 4c 4c 20 0a 76  tes to a NULL .v
2e7d0 61 6c 75 65 20 6f 72 20 61 6e 79 20 6f 74 68 65  alue or any othe
2e7e0 72 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e  r value that can
2e7f0 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c  not be losslessl
2e800 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  y converted to a
2e810 6e 20 69 6e 74 65 67 65 72 2c 20 61 6e 0a 65 72  n integer, an.er
2e820 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 2e  ror is returned.
2e830 20 5e 49 66 20 74 68 65 20 4c 49 4d 49 54 20 65   ^If the LIMIT e
2e840 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61  xpression evalua
2e850 74 65 73 20 74 6f 20 61 20 6e 65 67 61 74 69 76  tes to a negativ
2e860 65 20 76 61 6c 75 65 2c 0a 74 68 65 6e 20 74 68  e value,.then th
2e870 65 72 65 20 69 73 20 6e 6f 20 75 70 70 65 72 20  ere is no upper 
2e880 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d  bound on the num
2e890 62 65 72 20 6f 66 20 72 6f 77 73 20 72 65 74 75  ber of rows retu
2e8a0 72 6e 65 64 2e 20 5e 4f 74 68 65 72 77 69 73 65  rned. ^Otherwise
2e8b0 2c 20 74 68 65 0a 53 45 4c 45 43 54 20 72 65 74  , the.SELECT ret
2e8c0 75 72 6e 73 20 74 68 65 20 66 69 72 73 74 20 4e  urns the first N
2e8d0 20 72 6f 77 73 20 6f 66 20 69 74 73 20 72 65 73   rows of its res
2e8e0 75 6c 74 20 73 65 74 20 6f 6e 6c 79 2c 20 77 68  ult set only, wh
2e8f0 65 72 65 20 4e 20 69 73 20 74 68 65 20 76 61 6c  ere N is the val
2e900 75 65 0a 74 68 61 74 20 74 68 65 20 4c 49 4d 49  ue.that the LIMI
2e910 54 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  T expression eva
2e920 6c 75 61 74 65 73 20 74 6f 2e 20 5e 4f 72 2c 20  luates to. ^Or, 
2e930 69 66 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  if the SELECT st
2e940 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 0a 72 65  atement would.re
2e950 74 75 72 6e 20 6c 65 73 73 20 74 68 61 6e 20 4e  turn less than N
2e960 20 72 6f 77 73 20 77 69 74 68 6f 75 74 20 61 20   rows without a 
2e970 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68  LIMIT clause, th
2e980 65 6e 20 74 68 65 20 65 6e 74 69 72 65 20 72 65  en the entire re
2e990 73 75 6c 74 20 73 65 74 20 69 73 0a 72 65 74 75  sult set is.retu
2e9a0 72 6e 65 64 2e 20 0a 0a 3c 70 3e 5e 54 68 65 20  rned. ..<p>^The 
2e9b0 65 78 70 72 65 73 73 69 6f 6e 20 61 74 74 61 63  expression attac
2e9c0 68 65 64 20 74 6f 20 74 68 65 20 6f 70 74 69 6f  hed to the optio
2e9d0 6e 61 6c 20 4f 46 46 53 45 54 20 63 6c 61 75 73  nal OFFSET claus
2e9e0 65 20 74 68 61 74 20 6d 61 79 20 66 6f 6c 6c 6f  e that may follo
2e9f0 77 20 61 0a 4c 49 4d 49 54 20 63 6c 61 75 73 65  w a.LIMIT clause
2ea00 20 6d 75 73 74 20 61 6c 73 6f 20 65 76 61 6c 75   must also evalu
2ea10 61 74 65 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  ate to an intege
2ea20 72 2c 20 6f 72 20 61 20 76 61 6c 75 65 20 74 68  r, or a value th
2ea30 61 74 20 63 61 6e 20 62 65 0a 6c 6f 73 73 6c 65  at can be.lossle
2ea40 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
2ea50 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 5e 49  o an integer. ^I
2ea60 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  f an expression 
2ea70 68 61 73 20 61 6e 20 4f 46 46 53 45 54 20 63 6c  has an OFFSET cl
2ea80 61 75 73 65 2c 0a 74 68 65 6e 20 74 68 65 20 66  ause,.then the f
2ea90 69 72 73 74 20 4d 20 72 6f 77 73 20 61 72 65 20  irst M rows are 
2eaa0 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
2eab0 20 72 65 73 75 6c 74 20 73 65 74 20 72 65 74 75   result set retu
2eac0 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c 45  rned by the SELE
2ead0 43 54 0a 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  CT.statement and
2eae0 20 74 68 65 20 6e 65 78 74 20 4e 20 72 6f 77 73   the next N rows
2eaf0 20 61 72 65 20 72 65 74 75 72 6e 65 64 2c 20 77   are returned, w
2eb00 68 65 72 65 20 4d 20 61 6e 64 20 4e 20 61 72 65  here M and N are
2eb10 20 74 68 65 20 76 61 6c 75 65 73 20 74 68 61 74   the values that
2eb20 0a 74 68 65 20 4f 46 46 53 45 54 20 61 6e 64 20  .the OFFSET and 
2eb30 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 20 65 76  LIMIT clauses ev
2eb40 61 6c 75 61 74 65 20 74 6f 2c 20 72 65 73 70 65  aluate to, respe
2eb50 63 74 69 76 65 6c 79 2e 20 5e 4f 72 2c 20 69 66  ctively. ^Or, if
2eb60 20 74 68 65 20 53 45 4c 45 43 54 0a 77 6f 75 6c   the SELECT.woul
2eb70 64 20 72 65 74 75 72 6e 20 6c 65 73 73 20 74 68  d return less th
2eb80 61 6e 20 4d 2b 4e 20 72 6f 77 73 20 69 66 20 69  an M+N rows if i
2eb90 74 20 64 69 64 20 6e 6f 74 20 68 61 76 65 20 61  t did not have a
2eba0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74   LIMIT clause, t
2ebb0 68 65 6e 20 74 68 65 0a 66 69 72 73 74 20 4d 20  hen the.first M 
2ebc0 72 6f 77 73 20 61 72 65 20 73 6b 69 70 70 65 64  rows are skipped
2ebd0 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e 69   and the remaini
2ebe0 6e 67 20 72 6f 77 73 20 28 69 66 20 61 6e 79 29  ng rows (if any)
2ebf0 20 61 72 65 20 72 65 74 75 72 6e 65 64 2e 20 5e   are returned. ^
2ec00 49 66 20 74 68 65 0a 4f 46 46 53 45 54 20 63 6c  If the.OFFSET cl
2ec10 61 75 73 65 20 65 76 61 6c 75 61 74 65 73 20 74  ause evaluates t
2ec20 6f 20 61 20 6e 65 67 61 74 69 76 65 20 76 61 6c  o a negative val
2ec30 75 65 2c 20 74 68 65 20 72 65 73 75 6c 74 73 20  ue, the results 
2ec40 61 72 65 20 74 68 65 20 73 61 6d 65 20 61 73 20  are the same as 
2ec50 69 66 20 69 74 0a 68 61 64 20 65 76 61 6c 75 61  if it.had evalua
2ec60 74 65 64 20 74 6f 20 7a 65 72 6f 2e 0a 0a 3c 70  ted to zero...<p
2ec70 3e 5e 49 6e 73 74 65 61 64 20 6f 66 20 61 20 73  >^Instead of a s
2ec80 65 70 61 72 61 74 65 20 4f 46 46 53 45 54 20 63  eparate OFFSET c
2ec90 6c 61 75 73 65 2c 20 74 68 65 20 4c 49 4d 49 54  lause, the LIMIT
2eca0 20 63 6c 61 75 73 65 20 6d 61 79 20 73 70 65 63   clause may spec
2ecb0 69 66 79 20 74 77 6f 0a 73 63 61 6c 61 72 20 65  ify two.scalar e
2ecc0 78 70 72 65 73 73 69 6f 6e 73 20 73 65 70 61 72  xpressions separ
2ecd0 61 74 65 64 20 62 79 20 61 20 63 6f 6d 6d 61 2e  ated by a comma.
2ece0 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20   ^In this case, 
2ecf0 74 68 65 20 66 69 72 73 74 20 65 78 70 72 65 73  the first expres
2ed00 73 69 6f 6e 0a 69 73 20 75 73 65 64 20 61 73 20  sion.is used as 
2ed10 74 68 65 20 4f 46 46 53 45 54 20 65 78 70 72 65  the OFFSET expre
2ed20 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 65  ssion and the se
2ed30 63 6f 6e 64 20 61 73 20 74 68 65 20 4c 49 4d 49  cond as the LIMI
2ed40 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 54 68  T expression..Th
2ed50 69 73 20 69 73 20 63 6f 75 6e 74 65 72 2d 69 6e  is is counter-in
2ed60 74 75 69 74 69 76 65 2c 20 61 73 20 77 68 65 6e  tuitive, as when
2ed70 20 75 73 69 6e 67 20 74 68 65 20 4f 46 46 53 45   using the OFFSE
2ed80 54 20 63 6c 61 75 73 65 20 74 68 65 20 73 65 63  T clause the sec
2ed90 6f 6e 64 20 6f 66 0a 74 68 65 20 74 77 6f 20 65  ond of.the two e
2eda0 78 70 72 65 73 73 69 6f 6e 73 20 69 73 20 74 68  xpressions is th
2edb0 65 20 4f 46 46 53 45 54 20 61 6e 64 20 74 68 65  e OFFSET and the
2edc0 20 66 69 72 73 74 20 74 68 65 20 4c 49 4d 49 54   first the LIMIT
2edd0 2e 20 0a 54 68 69 73 20 72 65 76 65 72 73 61 6c  . .This reversal
2ede0 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74 20 61   of the offset a
2edf0 6e 64 20 6c 69 6d 69 74 20 69 73 20 69 6e 74 65  nd limit is inte
2ee00 6e 74 69 6f 6e 61 6c 0a 2d 20 69 74 20 6d 61 78  ntional.- it max
2ee10 69 6d 69 7a 65 73 20 63 6f 6d 70 61 74 69 62 69  imizes compatibi
2ee20 6c 69 74 79 20 77 69 74 68 20 6f 74 68 65 72 20  lity with other 
2ee30 53 51 4c 20 64 61 74 61 62 61 73 65 20 73 79 73  SQL database sys
2ee40 74 65 6d 73 2e 0a 48 6f 77 65 76 65 72 2c 20 74  tems..However, t
2ee50 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f  o avoid confusio
2ee60 6e 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73 20 61  n, programmers a
2ee70 72 65 20 73 74 72 6f 6e 67 6c 79 20 65 6e 63 6f  re strongly enco
2ee80 75 72 61 67 65 64 20 74 6f 20 75 73 65 0a 74 68  uraged to use.th
2ee90 65 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 4c 49  e form of the LI
2eea0 4d 49 54 20 63 6c 61 75 73 65 20 74 68 61 74 20  MIT clause that 
2eeb0 75 73 65 73 20 74 68 65 20 22 4f 46 46 53 45 54  uses the "OFFSET
2eec0 22 20 6b 65 79 77 6f 72 64 20 61 6e 64 20 61 76  " keyword and av
2eed0 6f 69 64 0a 75 73 69 6e 67 20 61 20 4c 49 4d 49  oid.using a LIMI
2eee0 54 20 63 6c 61 75 73 65 20 77 69 74 68 20 61 20  T clause with a 
2eef0 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65 64 20  comma-separated 
2ef00 6f 66 66 73 65 74 2e 0a 0a 3c 74 63 6c 3e 68 64  offset...<tcl>hd
2ef10 5f 66 72 61 67 6d 65 6e 74 20 76 61 6c 75 65 73  _fragment values
2ef20 20 7b 56 41 4c 55 45 53 20 63 6c 61 75 73 65 7d   {VALUES clause}
2ef30 20 56 41 4c 55 45 53 3c 2f 74 63 6c 3e 0a 3c 68   VALUES</tcl>.<h
2ef40 33 3e 54 68 65 20 56 41 4c 55 45 53 20 63 6c 61  3>The VALUES cla
2ef50 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 54  use</h3>..<p>^(T
2ef60 68 65 20 70 68 72 61 73 65 20 22 56 41 4c 55 45  he phrase "VALUE
2ef70 53 28 3c 69 3e 65 78 70 72 2d 6c 69 73 74 3c 2f  S(<i>expr-list</
2ef80 69 3e 29 22 20 6d 65 61 6e 73 20 74 68 65 20 73  i>)" means the s
2ef90 61 6d 65 20 74 68 69 6e 67 0a 61 73 20 22 53 45  ame thing.as "SE
2efa0 4c 45 43 54 20 3c 69 3e 65 78 70 72 2d 6c 69 73  LECT <i>expr-lis
2efb0 74 3c 2f 69 3e 22 2e 29 5e 20 20 5e 28 54 68 65  t</i>".)^  ^(The
2efc0 20 70 68 72 61 73 65 0a 22 56 41 4c 55 45 53 28   phrase."VALUES(
2efd0 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d 31 3c 2f  <i>expr-list-1</
2efe0 69 3e 29 2c 2e 2e 2e 2c 28 3c 69 3e 65 78 70 72  i>),...,(<i>expr
2eff0 2d 6c 69 73 74 2d 4e 3c 2f 69 3e 29 22 20 6d 65  -list-N</i>)" me
2f000 61 6e 73 20 74 68 65 20 73 61 6d 65 0a 74 68 69  ans the same.thi
2f010 6e 67 20 61 73 20 22 53 45 4c 45 43 54 20 3c 69  ng as "SELECT <i
2f020 3e 65 78 70 72 2d 6c 69 73 74 2d 31 3c 2f 69 3e  >expr-list-1</i>
2f030 20 55 4e 49 4f 4e 20 41 4c 4c 20 2e 2e 2e 20 55   UNION ALL ... U
2f040 4e 49 4f 4e 20 41 4c 4c 0a 53 45 4c 45 43 54 20  NION ALL.SELECT 
2f050 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d 4e 3c 2f  <i>expr-list-N</
2f060 69 3e 22 2e 29 5e 20 20 42 6f 74 68 20 66 6f 72  i>".)^  Both for
2f070 6d 73 20 61 72 65 20 74 68 65 20 73 61 6d 65 2c  ms are the same,
2f080 20 65 78 63 65 70 74 20 74 68 61 74 0a 74 68 65   except that.the
2f090 20 6e 75 6d 62 65 72 20 6f 66 20 53 45 4c 45 43   number of SELEC
2f0a0 54 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  T statements in 
2f0b0 61 20 63 6f 6d 70 6f 75 6e 64 20 69 73 20 6c 69  a compound is li
2f0c0 6d 69 74 65 64 20 62 79 0a 5b 53 51 4c 49 54 45  mited by.[SQLITE
2f0d0 5f 4c 49 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44 5f  _LIMIT_COMPOUND_
2f0e0 53 45 4c 45 43 54 5d 20 77 68 65 72 65 61 73 20  SELECT] whereas 
2f0f0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
2f100 77 73 20 69 6e 20 61 0a 56 41 4c 55 45 53 20 63  ws in a.VALUES c
2f110 6c 61 75 73 65 20 68 61 73 20 6e 6f 20 61 72 62  lause has no arb
2f120 69 74 72 61 72 79 20 6c 69 6d 69 74 2e 0a 0a 3c  itrary limit...<
2f130 70 3e 54 68 65 72 65 20 61 72 65 20 73 6f 6d 65  p>There are some
2f140 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e   restrictions on
2f150 20 74 68 65 20 75 73 65 20 6f 66 20 61 20 56 41   the use of a VA
2f160 4c 55 45 53 20 63 6c 61 75 73 65 20 74 68 61 74  LUES clause that
2f170 20 61 72 65 0a 6e 6f 74 20 73 68 6f 77 6e 20 6f   are.not shown o
2f180 6e 20 74 68 65 20 73 79 6e 74 61 78 20 64 69 61  n the syntax dia
2f190 67 72 61 6d 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69  grams:..<ul>.<li
2f1a0 3e 3c 70 3e 0a 5e 41 20 56 41 4c 55 45 53 20 63  ><p>.^A VALUES c
2f1b0 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20 62 65 20  lause cannot be 
2f1c0 66 6f 6c 6c 6f 77 65 64 20 62 79 20 5b 4f 52 44  followed by [ORD
2f1d0 45 52 20 42 59 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e  ER BY]...<li><p>
2f1e0 0a 5e 41 20 56 41 4c 55 45 53 20 63 6c 61 75 73  .^A VALUES claus
2f1f0 65 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 6c 6c  e cannot be foll
2f200 6f 77 65 64 20 62 79 20 5b 4c 49 4d 49 54 5d 2e  owed by [LIMIT].
2f210 0a 3c 2f 75 6c 3e 0a 0a 0a 3c 68 33 3e 54 68 65  .</ul>...<h3>The
2f220 20 57 49 54 48 20 43 6c 61 75 73 65 3c 2f 68 33   WITH Clause</h3
2f230 3e 0a 0a 3c 70 3e 5e 53 45 4c 45 43 54 20 73 74  >..<p>^SELECT st
2f240 61 74 65 6d 65 6e 74 73 20 6d 61 79 20 62 65 20  atements may be 
2f250 6f 70 74 69 6f 6e 61 6c 6c 79 20 70 72 65 63 65  optionally prece
2f260 64 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 0a  ded by a single.
2f270 5b 57 49 54 48 20 63 6c 61 75 73 65 5d 20 74 68  [WITH clause] th
2f280 61 74 20 64 65 66 69 6e 65 73 20 6f 6e 65 20 6f  at defines one o
2f290 72 20 6d 6f 72 65 20 5b 63 6f 6d 6d 6f 6e 20 74  r more [common t
2f2a0 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
2f2b0 5d 0a 66 6f 72 20 75 73 65 20 77 69 74 68 69 6e  ].for use within
2f2c0 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
2f2d0 65 6d 65 6e 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  ement...<tcl>hd_
2f2e0 66 72 61 67 6d 65 6e 74 20 74 61 62 66 75 6e 63  fragment tabfunc
2f2f0 31 20 7b 74 61 62 6c 65 2d 76 61 6c 75 65 64 20  1 {table-valued 
2f300 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 74 68 65  functions in the
2f310 20 46 52 4f 4d 20 63 6c 61 75 73 65 7d 3c 2f 74   FROM clause}</t
2f320 63 6c 3e 0a 3c 68 33 3e 54 61 62 6c 65 2d 76 61  cl>.<h3>Table-va
2f330 6c 75 65 64 20 46 75 6e 63 74 69 6f 6e 73 20 49  lued Functions I
2f340 6e 20 54 68 65 20 46 52 4f 4d 20 43 6c 61 75 73  n The FROM Claus
2f350 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20 5b 76 69  e</h3>..<p>A [vi
2f360 72 74 75 61 6c 20 74 61 62 6c 65 5d 20 74 68 61  rtual table] tha
2f370 74 20 63 6f 6e 74 61 69 6e 73 20 5b 68 69 64 64  t contains [hidd
2f380 65 6e 20 63 6f 6c 75 6d 6e 73 5d 20 63 61 6e 20  en columns] can 
2f390 62 65 20 75 73 65 64 20 6c 69 6b 65 0a 61 20 5b  be used like.a [
2f3a0 74 61 62 6c 65 2d 76 61 6c 75 65 64 20 66 75 6e  table-valued fun
2f3b0 63 74 69 6f 6e 5d 20 69 6e 20 74 68 65 20 46 52  ction] in the FR
2f3c0 4f 4d 20 63 6c 61 75 73 65 2e 20 20 54 68 65 20  OM clause.  The 
2f3d0 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65  arguments to the
2f3e0 0a 74 61 62 6c 65 2d 76 61 6c 75 65 64 20 66 75  .table-valued fu
2f3f0 6e 63 74 69 6f 6e 20 62 65 63 6f 6d 65 20 63 6f  nction become co
2f400 6e 73 74 72 61 69 6e 74 73 20 6f 6e 20 74 68 65  nstraints on the
2f410 20 48 49 44 44 45 4e 20 63 6f 6c 75 6d 6e 73 20   HIDDEN columns 
2f420 6f 66 0a 74 68 65 20 76 69 72 74 75 61 6c 20 74  of.the virtual t
2f430 61 62 6c 65 2e 20 20 41 64 64 69 74 69 6f 6e 61  able.  Additiona
2f440 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61  l information ca
2f450 6e 20 62 65 20 66 6f 75 6e 64 20 69 6e 20 74 68  n be found in th
2f460 65 0a 5b 74 61 62 6c 65 2d 76 61 6c 75 65 64 20  e.[table-valued 
2f470 66 75 6e 63 74 69 6f 6e 73 7c 76 69 72 74 75 61  functions|virtua
2f480 6c 20 74 61 62 6c 65 20 64 6f 63 75 6d 65 6e 74  l table document
2f490 61 74 69 6f 6e 5d 2e 0a 0a 3c 74 63 6c 3e 0a 23  ation]...<tcl>.#
2f4a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f4b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f4c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f4d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f4e0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
2f4f0 63 74 69 6f 6e 20 55 50 44 41 54 45 20 75 70 64  ction UPDATE upd
2f500 61 74 65 20 7b 55 50 44 41 54 45 20 2a 55 50 44  ate {UPDATE *UPD
2f510 41 54 45 73 7d 0a 0a 52 65 63 75 72 73 69 76 65  ATEs}..Recursive
2f520 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 75 70  BubbleDiagram up
2f530 64 61 74 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  date-stmt.</tcl>
2f540 0a 0a 3c 70 3e 5e 41 6e 20 55 50 44 41 54 45 20  ..<p>^An UPDATE 
2f550 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65  statement is use
2f560 64 20 74 6f 20 6d 6f 64 69 66 79 20 61 20 73 75  d to modify a su
2f570 62 73 65 74 20 6f 66 20 74 68 65 20 76 61 6c 75  bset of the valu
2f580 65 73 20 73 74 6f 72 65 64 20 69 6e 20 0a 7a 65  es stored in .ze
2f590 72 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20  ro or more rows 
2f5a0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
2f5b0 74 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65 64  table identified
2f5c0 20 62 79 20 74 68 65 20 0a 5b 71 75 61 6c 69 66   by the .[qualif
2f5d0 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 5d 20  ied-table-name] 
2f5e0 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
2f5f0 74 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  t of the UPDATE 
2f600 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e  statement...<p>^
2f610 49 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74  If the UPDATE st
2f620 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74  atement does not
2f630 20 68 61 76 65 20 61 20 57 48 45 52 45 20 63 6c   have a WHERE cl
2f640 61 75 73 65 2c 20 61 6c 6c 20 72 6f 77 73 20 69  ause, all rows i
2f650 6e 20 74 68 65 0a 74 61 62 6c 65 20 61 72 65 20  n the.table are 
2f660 6d 6f 64 69 66 69 65 64 20 62 79 20 74 68 65 20  modified by the 
2f670 55 50 44 41 54 45 2e 20 5e 4f 74 68 65 72 77 69  UPDATE. ^Otherwi
2f680 73 65 2c 20 74 68 65 20 55 50 44 41 54 45 20 61  se, the UPDATE a
2f690 66 66 65 63 74 73 20 6f 6e 6c 79 20 74 68 6f 73  ffects only thos
2f6a0 65 0a 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  e.rows for which
2f6b0 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
2f6c0 65 0a 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65  e.[boolean expre
2f6d0 73 73 69 6f 6e 7c 62 6f 6f 6c 65 61 6e 20 65 78  ssion|boolean ex
2f6e0 70 72 65 73 73 69 6f 6e 20 69 73 20 74 72 75 65  pression is true
2f6f0 5d 2e 20 5e 49 74 20 69 73 20 6e 6f 74 20 61 6e  ]. ^It is not an
2f700 20 65 72 72 6f 72 20 69 66 20 74 68 65 0a 57 48   error if the.WH
2f710 45 52 45 20 63 6c 61 75 73 65 20 64 6f 65 73 20  ERE clause does 
2f720 6e 6f 74 20 65 76 61 6c 75 61 74 65 20 74 6f 20  not evaluate to 
2f730 74 72 75 65 20 66 6f 72 20 61 6e 79 20 72 6f 77  true for any row
2f740 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 2d 20   in the table - 
2f750 74 68 69 73 20 6a 75 73 74 0a 6d 65 61 6e 73 20  this just.means 
2f760 74 68 61 74 20 74 68 65 20 55 50 44 41 54 45 20  that the UPDATE 
2f770 73 74 61 74 65 6d 65 6e 74 20 61 66 66 65 63 74  statement affect
2f780 73 20 7a 65 72 6f 20 72 6f 77 73 2e 0a 0a 3c 70  s zero rows...<p
2f790 3e 54 68 65 20 6d 6f 64 69 66 69 63 61 74 69 6f  >The modificatio
2f7a0 6e 73 20 6d 61 64 65 20 74 6f 20 65 61 63 68 20  ns made to each 
2f7b0 72 6f 77 20 61 66 66 65 63 74 65 64 20 62 79 20  row affected by 
2f7c0 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  an UPDATE statem
2f7d0 65 6e 74 20 61 72 65 0a 64 65 74 65 72 6d 69 6e  ent are.determin
2f7e0 65 64 20 62 79 20 74 68 65 20 6c 69 73 74 20 6f  ed by the list o
2f7f0 66 20 61 73 73 69 67 6e 6d 65 6e 74 73 20 66 6f  f assignments fo
2f800 6c 6c 6f 77 69 6e 67 20 74 68 65 20 53 45 54 20  llowing the SET 
2f810 6b 65 79 77 6f 72 64 2e 20 45 61 63 68 0a 61 73  keyword. Each.as
2f820 73 69 67 6e 6d 65 6e 74 20 73 70 65 63 69 66 69  signment specifi
2f830 65 73 20 61 20 3c 79 79 74 65 72 6d 3e 63 6f 6c  es a <yyterm>col
2f840 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  umn-name</yyterm
2f850 3e 20 74 6f 20 74 68 65 20 6c 65 66 74 20 6f 66  > to the left of
2f860 20 74 68 65 20 0a 65 71 75 61 6c 73 20 73 69 67   the .equals sig
2f870 6e 20 61 6e 64 20 61 0a 73 63 61 6c 61 72 20 65  n and a.scalar e
2f880 78 70 72 65 73 73 69 6f 6e 20 74 6f 20 74 68 65  xpression to the
2f890 20 72 69 67 68 74 2e 20 5e 46 6f 72 20 65 61 63   right. ^For eac
2f8a0 68 20 61 66 66 65 63 74 65 64 20 72 6f 77 2c 20  h affected row, 
2f8b0 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e  the named column
2f8c0 73 0a 61 72 65 20 73 65 74 20 74 6f 20 74 68 65  s.are set to the
2f8d0 20 76 61 6c 75 65 73 20 66 6f 75 6e 64 20 62 79   values found by
2f8e0 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
2f8f0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 63  corresponding sc
2f900 61 6c 61 72 20 0a 65 78 70 72 65 73 73 69 6f 6e  alar .expression
2f910 73 2e 20 5e 49 66 20 61 20 73 69 6e 67 6c 65 20  s. ^If a single 
2f920 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 20 61 70 70 65  column-name appe
2f930 61 72 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ars more than on
2f940 63 65 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f  ce in the list o
2f950 66 0a 61 73 73 69 67 6e 6d 65 6e 74 20 65 78 70  f.assignment exp
2f960 72 65 73 73 69 6f 6e 73 2c 20 61 6c 6c 20 62 75  ressions, all bu
2f970 74 20 74 68 65 20 72 69 67 68 74 6d 6f 73 74 20  t the rightmost 
2f980 6f 63 63 75 72 72 65 6e 63 65 20 69 73 20 69 67  occurrence is ig
2f990 6e 6f 72 65 64 2e 20 5e 43 6f 6c 75 6d 6e 73 0a  nored. ^Columns.
2f9a0 74 68 61 74 20 64 6f 20 6e 6f 74 20 61 70 70 65  that do not appe
2f9b0 61 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f  ar in the list o
2f9c0 66 20 61 73 73 69 67 6e 6d 65 6e 74 73 20 61 72  f assignments ar
2f9d0 65 20 6c 65 66 74 20 75 6e 6d 6f 64 69 66 69 65  e left unmodifie
2f9e0 64 2e 20 5e 54 68 65 20 73 63 61 6c 61 72 0a 65  d. ^The scalar.e
2f9f0 78 70 72 65 73 73 69 6f 6e 73 20 6d 61 79 20 72  xpressions may r
2fa00 65 66 65 72 20 74 6f 20 63 6f 6c 75 6d 6e 73 20  efer to columns 
2fa10 6f 66 20 74 68 65 20 72 6f 77 20 62 65 69 6e 67  of the row being
2fa20 20 75 70 64 61 74 65 64 2e 20 5e 49 6e 20 74 68   updated. ^In th
2fa30 69 73 20 63 61 73 65 20 61 6c 6c 0a 73 63 61 6c  is case all.scal
2fa40 61 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61  ar expressions a
2fa50 72 65 20 65 76 61 6c 75 61 74 65 64 20 62 65 66  re evaluated bef
2fa60 6f 72 65 20 61 6e 79 20 61 73 73 69 67 6e 6d 65  ore any assignme
2fa70 6e 74 73 20 61 72 65 20 6d 61 64 65 2e 0a 0a 3c  nts are made...<
2fa80 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  p>^The optional 
2fa90 22 4f 52 20 3c 69 3e 61 63 74 69 6f 6e 3c 2f 69  "OR <i>action</i
2faa0 3e 22 20 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75  >" conflict clau
2fab0 73 65 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20  se that follows 
2fac0 74 68 65 0a 55 50 44 41 54 45 20 6b 65 79 77 6f  the.UPDATE keywo
2fad0 72 64 20 61 6c 6c 6f 77 73 20 74 68 65 20 75 73  rd allows the us
2fae0 65 72 20 74 6f 20 6e 6f 6d 69 6e 61 74 65 20 61  er to nominate a
2faf0 20 73 70 65 63 69 66 69 63 0a 63 6f 6e 73 74 72   specific.constr
2fb00 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65  aint conflict re
2fb10 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
2fb20 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69 6e 67  hm to use during
2fb30 20 74 68 69 73 20 6f 6e 65 20 55 50 44 41 54 45   this one UPDATE
2fb40 20 63 6f 6d 6d 61 6e 64 2e 0a 52 65 66 65 72 20   command..Refer 
2fb50 74 6f 20 74 68 65 20 73 65 63 74 69 6f 6e 20 65  to the section e
2fb60 6e 74 69 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46  ntitled [ON CONF
2fb70 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69  LICT] for additi
2fb80 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
2fb90 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63 74 69  ...<h3>Restricti
2fba0 6f 6e 73 20 6f 6e 20 55 50 44 41 54 45 20 53 74  ons on UPDATE St
2fbb0 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e 20  atements Within 
2fbc0 43 52 45 41 54 45 20 54 52 49 47 47 45 52 3c 2f  CREATE TRIGGER</
2fbd0 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c  h3>..<p>The foll
2fbe0 6f 77 69 6e 67 20 61 64 64 69 74 69 6f 6e 61 6c  owing additional
2fbf0 20 73 79 6e 74 61 78 20 72 65 73 74 72 69 63 74   syntax restrict
2fc00 69 6f 6e 73 20 61 70 70 6c 79 20 74 6f 20 55 50  ions apply to UP
2fc10 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20  DATE statements 
2fc20 74 68 61 74 0a 6f 63 63 75 72 20 77 69 74 68 69  that.occur withi
2fc30 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20  n the body of a 
2fc40 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d  [CREATE TRIGGER]
2fc50 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 0a 3c   statement.  ..<
2fc60 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68  ul>.  <li><p>^Th
2fc70 65 20 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d  e <yyterm>table-
2fc80 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 73 70  name</yyterm> sp
2fc90 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
2fca0 6f 66 20 61 6e 20 55 50 44 41 54 45 20 0a 20 20  of an UPDATE .  
2fcb0 20 20 20 20 73 74 61 74 65 6d 65 6e 74 20 77 69      statement wi
2fcc0 74 68 69 6e 0a 20 20 20 20 20 20 61 20 74 72 69  thin.      a tri
2fcd0 67 67 65 72 20 62 6f 64 79 20 6d 75 73 74 20 62  gger body must b
2fce0 65 20 75 6e 71 75 61 6c 69 66 69 65 64 2e 20 5e  e unqualified. ^
2fcf0 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c  (In other words,
2fd00 20 74 68 65 0a 20 20 20 20 20 20 3c 69 3e 73 63   the.      <i>sc
2fd10 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e  hema-name</i><b>
2fd20 2e 3c 2f 62 3e 20 70 72 65 66 69 78 20 6f 6e 20  .</b> prefix on 
2fd30 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 20 6f  the table name o
2fd40 66 20 74 68 65 20 55 50 44 41 54 45 20 69 73 0a  f the UPDATE is.
2fd50 20 20 20 20 20 20 6e 6f 74 20 61 6c 6c 6f 77 65        not allowe
2fd60 64 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  d within trigger
2fd70 73 2e 29 5e 20 5e 55 6e 6c 65 73 73 20 74 68 65  s.)^ ^Unless the
2fd80 20 74 61 62 6c 65 20 74 6f 20 77 68 69 63 68 20   table to which 
2fd90 74 68 65 20 74 72 69 67 67 65 72 0a 20 20 20 20  the trigger.    
2fda0 20 20 69 73 20 61 74 74 61 63 68 65 64 20 69 73    is attached is
2fdb0 20 69 6e 20 74 68 65 20 54 45 4d 50 20 64 61 74   in the TEMP dat
2fdc0 61 62 61 73 65 2c 20 74 68 65 20 74 61 62 6c 65  abase, the table
2fdd0 20 62 65 69 6e 67 20 75 70 64 61 74 65 64 20 62   being updated b
2fde0 79 20 74 68 65 0a 20 20 20 20 20 20 74 72 69 67  y the.      trig
2fdf0 67 65 72 20 70 72 6f 67 72 61 6d 20 6d 75 73 74  ger program must
2fe00 20 72 65 73 69 64 65 20 69 6e 20 74 68 65 20 73   reside in the s
2fe10 61 6d 65 20 64 61 74 61 62 61 73 65 20 61 73 20  ame database as 
2fe20 69 74 2e 20 5e 49 66 20 74 68 65 20 74 61 62 6c  it. ^If the tabl
2fe30 65 0a 20 20 20 20 20 20 74 6f 20 77 68 69 63 68  e.      to which
2fe40 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73 20   the trigger is 
2fe50 61 74 74 61 63 68 65 64 20 69 73 20 69 6e 20 74  attached is in t
2fe60 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  he TEMP database
2fe70 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 20 20 20  , then the.     
2fe80 20 75 6e 71 75 61 6c 69 66 69 65 64 20 6e 61 6d   unqualified nam
2fe90 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62  e of the table b
2fea0 65 69 6e 67 20 75 70 64 61 74 65 64 20 69 73 20  eing updated is 
2feb0 72 65 73 6f 6c 76 65 64 20 69 6e 20 74 68 65 20  resolved in the 
2fec0 73 61 6d 65 20 77 61 79 0a 20 20 20 20 20 20 61  same way.      a
2fed0 73 20 69 74 20 69 73 20 66 6f 72 20 61 20 74 6f  s it is for a to
2fee0 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d 65 6e  p-level statemen
2fef0 74 20 28 62 79 20 73 65 61 72 63 68 69 6e 67 20  t (by searching 
2ff00 66 69 72 73 74 20 74 68 65 20 54 45 4d 50 20 64  first the TEMP d
2ff10 61 74 61 62 61 73 65 2c 0a 20 20 20 20 20 20 74  atabase,.      t
2ff20 68 65 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74  hen the main dat
2ff30 61 62 61 73 65 2c 20 74 68 65 6e 20 61 6e 79 20  abase, then any 
2ff40 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 73 20  other databases 
2ff50 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68 65  in the order the
2ff60 79 20 77 65 72 65 0a 20 20 20 20 20 20 61 74 74  y were.      att
2ff70 61 63 68 65 64 29 2e 0a 0a 20 20 3c 6c 69 3e 3c  ached)...  <li><
2ff80 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42  p>^The INDEXED B
2ff90 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45  Y and NOT INDEXE
2ffa0 44 20 63 6c 61 75 73 65 73 20 61 72 65 20 6e 6f  D clauses are no
2ffb0 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 55 50 44  t allowed on UPD
2ffc0 41 54 45 0a 20 20 20 20 20 20 73 74 61 74 65 6d  ATE.      statem
2ffd0 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67  ents within trig
2ffe0 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69  gers.</p>..  <li
2fff0 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20 61  ><p>^The LIMIT a
30000 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  nd ORDER BY clau
30010 73 65 73 20 66 6f 72 20 55 50 44 41 54 45 20 61  ses for UPDATE a
30020 72 65 20 75 6e 73 75 70 70 6f 72 74 65 64 20 77  re unsupported w
30030 69 74 68 69 6e 0a 20 20 20 20 20 20 74 72 69 67  ithin.      trig
30040 67 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73  gers, regardless
30050 20 6f 66 20 74 68 65 20 63 6f 6d 70 69 6c 61 74   of the compilat
30060 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 75 73 65 64  ion options used
30070 20 74 6f 20 62 75 69 6c 64 20 53 51 4c 69 74 65   to build SQLite
30080 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70 74  ..</ul>..<h3>Opt
30090 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 61 6e 64 20  ional LIMIT and 
300a0 4f 52 44 45 52 20 42 59 20 43 6c 61 75 73 65 73  ORDER BY Clauses
300b0 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53  </h3>..<p>^(If S
300c0 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74 20 77  QLite is built w
300d0 69 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f  ith the [SQLITE_
300e0 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45  ENABLE_UPDATE_DE
300f0 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70  LETE_LIMIT].comp
30100 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
30110 74 68 65 6e 20 74 68 65 20 73 79 6e 74 61 78 20  then the syntax 
30120 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74  of the UPDATE st
30130 61 74 65 6d 65 6e 74 20 69 73 20 65 78 74 65 6e  atement is exten
30140 64 65 64 0a 77 69 74 68 20 6f 70 74 69 6f 6e 61  ded.with optiona
30150 6c 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c  l ORDER BY and L
30160 49 4d 49 54 20 63 6c 61 75 73 65 73 29 5e 20 61  IMIT clauses)^ a
30170 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a  s follows:</p>..
30180 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72  <tcl>BubbleDiagr
30190 61 6d 20 75 70 64 61 74 65 2d 73 74 6d 74 2d 6c  am update-stmt-l
301a0 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70  imited</tcl>..<p
301b0 3e 5e 49 66 20 61 6e 20 55 50 44 41 54 45 20 73  >^If an UPDATE s
301c0 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61 20 4c  tatement has a L
301d0 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65  IMIT clause, the
301e0 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
301f0 6f 66 20 72 6f 77 73 20 74 68 61 74 0a 77 69 6c  of rows that.wil
30200 6c 20 62 65 20 75 70 64 61 74 65 64 20 69 73 20  l be updated is 
30210 66 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61 74  found by evaluat
30220 69 6e 67 20 74 68 65 20 61 63 63 6f 6d 70 61 6e  ing the accompan
30230 79 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 20  ying expression 
30240 61 6e 64 20 63 61 73 74 69 6e 67 0a 69 74 20 74  and casting.it t
30250 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c  o an integer val
30260 75 65 2e 20 5e 41 20 6e 65 67 61 74 69 76 65 20  ue. ^A negative 
30270 76 61 6c 75 65 20 69 73 20 69 6e 74 65 72 70 72  value is interpr
30280 65 74 65 64 20 61 73 20 22 6e 6f 20 6c 69 6d 69  eted as "no limi
30290 74 22 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  t"...<p>^If the 
302a0 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e  LIMIT expression
302b0 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 6e 6f   evaluates to no
302c0 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  n-negative value
302d0 20 3c 69 3e 4e 3c 2f 69 3e 20 61 6e 64 20 74 68   <i>N</i> and th
302e0 65 0a 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e.UPDATE stateme
302f0 6e 74 20 68 61 73 20 61 6e 20 4f 52 44 45 52 20  nt has an ORDER 
30300 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  BY clause, then 
30310 61 6c 6c 20 72 6f 77 73 20 74 68 61 74 20 77 6f  all rows that wo
30320 75 6c 64 20 62 65 20 75 70 64 61 74 65 64 20 69  uld be updated i
30330 6e 0a 74 68 65 20 61 62 73 65 6e 63 65 20 6f 66  n.the absence of
30340 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73   the LIMIT claus
30350 65 20 61 72 65 20 73 6f 72 74 65 64 20 61 63 63  e are sorted acc
30360 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 4f 52  ording to the OR
30370 44 45 52 20 42 59 20 61 6e 64 20 74 68 65 0a 66  DER BY and the.f
30380 69 72 73 74 20 3c 69 3e 4e 3c 2f 69 3e 20 75 70  irst <i>N</i> up
30390 64 61 74 65 64 2e 20 5e 28 49 66 20 74 68 65 20  dated. ^(If the 
303a0 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
303b0 20 61 6c 73 6f 20 68 61 73 20 61 6e 20 4f 46 46   also has an OFF
303c0 53 45 54 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e  SET clause,.then
303d0 20 69 74 20 69 73 20 73 69 6d 69 6c 61 72 6c 79   it is similarly
303e0 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 63   evaluated and c
303f0 61 73 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  ast to an intege
30400 72 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 20  r value. If the 
30410 4f 46 46 53 45 54 0a 65 78 70 72 65 73 73 69 6f  OFFSET.expressio
30420 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61  n evaluates to a
30430 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61   non-negative va
30440 6c 75 65 20 3c 69 3e 4d 3c 2f 69 3e 2c 20 74 68  lue <i>M</i>, th
30450 65 6e 20 74 68 65 20 66 69 72 73 74 20 3c 69 3e  en the first <i>
30460 4d 3c 2f 69 3e 0a 72 6f 77 73 20 61 72 65 20 73  M</i>.rows are s
30470 6b 69 70 70 65 64 20 61 6e 64 20 74 68 65 20 66  kipped and the f
30480 6f 6c 6c 6f 77 69 6e 67 20 3c 69 3e 4e 3c 2f 69  ollowing <i>N</i
30490 3e 20 72 6f 77 73 20 75 70 64 61 74 65 64 20 69  > rows updated i
304a0 6e 73 74 65 61 64 2e 29 5e 0a 0a 3c 70 3e 5e 49  nstead.)^..<p>^I
304b0 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
304c0 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f 20 4f 52  tement has no OR
304d0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74  DER BY clause, t
304e0 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61  hen all rows tha
304f0 74 0a 77 6f 75 6c 64 20 62 65 20 75 70 64 61 74  t.would be updat
30500 65 64 20 69 6e 20 74 68 65 20 61 62 73 65 6e 63  ed in the absenc
30510 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63  e of the LIMIT c
30520 6c 61 75 73 65 20 61 72 65 20 61 73 73 65 6d 62  lause are assemb
30530 6c 65 64 20 69 6e 20 61 6e 0a 61 72 62 69 74 72  led in an.arbitr
30540 61 72 79 20 6f 72 64 65 72 20 62 65 66 6f 72 65  ary order before
30550 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20 4c 49   applying the LI
30560 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20 63  MIT and OFFSET c
30570 6c 61 75 73 65 73 20 74 6f 20 64 65 74 65 72 6d  lauses to determ
30580 69 6e 65 20 0a 77 68 69 63 68 20 61 72 65 20 61  ine .which are a
30590 63 74 75 61 6c 6c 79 20 75 70 64 61 74 65 64 2e  ctually updated.
305a0 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52 44 45 52  ..<p>^(The ORDER
305b0 20 42 59 20 63 6c 61 75 73 65 20 6f 6e 20 61 6e   BY clause on an
305c0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
305d0 74 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 74  t is used only t
305e0 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63  o determine whic
305f0 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77 69 74 68  h.rows fall with
30600 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20 54 68  in the LIMIT. Th
30610 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68  e order in which
30620 20 72 6f 77 73 20 61 72 65 20 6d 6f 64 69 66 69   rows are modifi
30630 65 64 20 69 73 20 61 72 62 69 74 72 61 72 79 0a  ed is arbitrary.
30640 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e 66 6c 75  and is not influ
30650 65 6e 63 65 64 20 62 79 20 74 68 65 20 4f 52 44  enced by the ORD
30660 45 52 20 42 59 20 63 6c 61 75 73 65 2e 29 5e 0a  ER BY clause.)^.
30670 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
30680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30690 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
306a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
306b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
306c0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 56 41  #####.Section VA
306d0 43 55 55 4d 20 76 61 63 75 75 6d 20 56 41 43 55  CUUM vacuum VACU
306e0 55 4d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  UM..RecursiveBub
306f0 62 6c 65 44 69 61 67 72 61 6d 20 76 61 63 75 75  bleDiagram vacuu
30700 6d 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  m-stmt.</tcl>..<
30710 70 3e 0a 20 20 54 68 65 20 56 41 43 55 55 4d 20  p>.  The VACUUM 
30720 63 6f 6d 6d 61 6e 64 20 72 65 62 75 69 6c 64 73  command rebuilds
30730 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61   the entire data
30740 62 61 73 65 2e 20 54 68 65 72 65 20 61 72 65 20  base. There are 
30750 73 65 76 65 72 61 6c 20 0a 20 20 72 65 61 73 6f  several .  reaso
30760 6e 73 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f  ns an applicatio
30770 6e 20 6d 69 67 68 74 20 64 6f 20 74 68 69 73 3a  n might do this:
30780 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70  ..<ul>.  <li> <p
30790 3e 20 5e 55 6e 6c 65 73 73 20 53 51 4c 69 74 65  > ^Unless SQLite
307a0 20 69 73 20 72 75 6e 6e 69 6e 67 20 69 6e 20 22   is running in "
307b0 61 75 74 6f 5f 76 61 63 75 75 6d 3d 46 55 4c 4c  auto_vacuum=FULL
307c0 22 20 6d 6f 64 65 2c 20 77 68 65 6e 20 61 20 6c  " mode, when a l
307d0 61 72 67 65 0a 20 20 20 20 20 61 6d 6f 75 6e 74  arge.     amount
307e0 20 6f 66 20 64 61 74 61 20 69 73 20 64 65 6c 65   of data is dele
307f0 74 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ted from the dat
30800 61 62 61 73 65 20 66 69 6c 65 20 69 74 20 6c 65  abase file it le
30810 61 76 65 73 20 62 65 68 69 6e 64 20 65 6d 70 74  aves behind empt
30820 79 0a 20 20 20 20 20 73 70 61 63 65 2c 20 6f 72  y.     space, or
30830 20 22 66 72 65 65 22 20 64 61 74 61 62 61 73 65   "free" database
30840 20 70 61 67 65 73 2e 20 54 68 69 73 20 6d 65 61   pages. This mea
30850 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ns the database 
30860 66 69 6c 65 20 6d 69 67 68 74 0a 20 20 20 20 20  file might.     
30870 62 65 20 6c 61 72 67 65 72 20 74 68 61 6e 20 73  be larger than s
30880 74 72 69 63 74 6c 79 20 6e 65 63 65 73 73 61 72  trictly necessar
30890 79 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55  y. ^Running VACU
308a0 55 4d 20 74 6f 20 72 65 62 75 69 6c 64 20 74 68  UM to rebuild th
308b0 65 20 0a 20 20 20 20 20 64 61 74 61 62 61 73 65  e .     database
308c0 20 72 65 63 6c 61 69 6d 73 20 74 68 69 73 20 73   reclaims this s
308d0 70 61 63 65 20 61 6e 64 20 72 65 64 75 63 65 73  pace and reduces
308e0 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
308f0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
30900 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e 46 72 65  .  <li> <p> ^Fre
30910 71 75 65 6e 74 20 69 6e 73 65 72 74 73 2c 20 75  quent inserts, u
30920 70 64 61 74 65 73 2c 20 61 6e 64 20 64 65 6c 65  pdates, and dele
30930 74 65 73 20 63 61 6e 20 63 61 75 73 65 20 74 68  tes can cause th
30940 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  e database file.
30950 20 20 20 20 20 74 6f 20 62 65 63 6f 6d 65 20 66       to become f
30960 72 61 67 6d 65 6e 74 65 64 20 2d 20 77 68 65 72  ragmented - wher
30970 65 20 64 61 74 61 20 66 6f 72 20 61 20 73 69 6e  e data for a sin
30980 67 6c 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  gle table or ind
30990 65 78 20 69 73 20 73 63 61 74 74 65 72 65 64 20  ex is scattered 
309a0 0a 20 20 20 20 20 61 72 6f 75 6e 64 20 74 68 65  .     around the
309b0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
309c0 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55 55 4d 20  ^Running VACUUM 
309d0 65 6e 73 75 72 65 73 20 74 68 61 74 20 65 61 63  ensures that eac
309e0 68 20 74 61 62 6c 65 20 61 6e 64 0a 20 20 20 20  h table and.    
309f0 20 69 6e 64 65 78 20 69 73 20 6c 61 72 67 65 6c   index is largel
30a00 79 20 73 74 6f 72 65 64 20 63 6f 6e 74 69 67 75  y stored contigu
30a10 6f 75 73 6c 79 20 77 69 74 68 69 6e 20 74 68 65  ously within the
30a20 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
30a30 5e 49 6e 20 73 6f 6d 65 0a 20 20 20 20 20 63 61  ^In some.     ca
30a40 73 65 73 2c 20 56 41 43 55 55 4d 20 6d 61 79 20  ses, VACUUM may 
30a50 61 6c 73 6f 20 72 65 64 75 63 65 20 74 68 65 20  also reduce the 
30a60 6e 75 6d 62 65 72 20 6f 66 20 70 61 72 74 69 61  number of partia
30a70 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61 67 65 73  lly filled pages
30a80 20 69 6e 0a 20 20 20 20 20 74 68 65 20 64 61 74   in.     the dat
30a90 61 62 61 73 65 2c 20 72 65 64 75 63 69 6e 67 20  abase, reducing 
30aa0 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
30ab0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 75  database file fu
30ac0 72 74 68 65 72 2e 0a 0a 20 20 3c 6c 69 3e 20 3c  rther...  <li> <
30ad0 70 3e 20 5e 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68  p> ^Normally, th
30ae0 65 20 64 61 74 61 62 61 73 65 20 5b 70 61 67 65  e database [page
30af0 5f 73 69 7a 65 5d 20 61 6e 64 20 77 68 65 74 68  _size] and wheth
30b00 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 64 61  er or not the da
30b10 74 61 62 61 73 65 0a 20 20 20 20 20 73 75 70 70  tabase.     supp
30b20 6f 72 74 73 20 5b 61 75 74 6f 5f 76 61 63 75 75  orts [auto_vacuu
30b30 6d 5d 20 6d 75 73 74 20 62 65 20 63 6f 6e 66 69  m] must be confi
30b40 67 75 72 65 64 20 62 65 66 6f 72 65 20 74 68 65  gured before the
30b50 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
30b60 73 0a 20 20 20 20 20 61 63 74 75 61 6c 6c 79 20  s.     actually 
30b70 63 72 65 61 74 65 64 2e 20 5e 48 6f 77 65 76 65  created. ^Howeve
30b80 72 2c 20 77 68 65 6e 20 6e 6f 74 20 69 6e 20 5b  r, when not in [
30b90 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d  write-ahead log]
30ba0 20 6d 6f 64 65 2c 20 74 68 65 20 0a 20 20 20 20   mode, the .    
30bb0 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64   [page_size] and
30bc0 2f 6f 72 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d  /or [auto_vacuum
30bd0 5d 20 70 72 6f 70 65 72 74 69 65 73 20 6f 66 20  ] properties of 
30be0 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74 61  an existing data
30bf0 62 61 73 65 20 6d 61 79 20 62 65 0a 20 20 20 20  base may be.    
30c00 20 63 68 61 6e 67 65 64 20 62 79 20 75 73 69 6e   changed by usin
30c10 67 20 74 68 65 20 5b 70 61 67 65 5f 73 69 7a 65  g the [page_size
30c20 20 70 72 61 67 6d 61 7c 70 61 67 65 5f 73 69 7a   pragma|page_siz
30c30 65 5d 20 20 61 6e 64 2f 6f 72 20 0a 20 20 20 20  e]  and/or .    
30c40 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 7c 70 72   [auto_vacuum|pr
30c50 61 67 6d 61 20 61 75 74 6f 5f 76 61 63 75 75 6d  agma auto_vacuum
30c60 5d 20 70 72 61 67 6d 61 73 20 61 6e 64 20 74 68  ] pragmas and th
30c70 65 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 56  en immediately V
30c80 41 43 55 55 4d 69 6e 67 0a 20 20 20 20 20 74 68  ACUUMing.     th
30c90 65 20 64 61 74 61 62 61 73 65 2e 20 5e 57 68 65  e database. ^Whe
30ca0 6e 20 69 6e 20 5b 77 72 69 74 65 2d 61 68 65 61  n in [write-ahea
30cb0 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20 6f 6e 6c  d log] mode, onl
30cc0 79 20 74 68 65 20 5b 61 75 74 6f 5f 76 61 63 75  y the [auto_vacu
30cd0 75 6d 5d 0a 20 20 20 20 20 73 75 70 70 6f 72 74  um].     support
30ce0 20 70 72 6f 70 65 72 74 79 20 63 61 6e 20 62 65   property can be
30cf0 20 63 68 61 6e 67 65 64 20 75 73 69 6e 67 20 56   changed using V
30d00 41 43 55 55 4d 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  ACUUM..</ul>..<p
30d10 3e 5e 28 56 41 43 55 55 4d 20 6f 6e 6c 79 20 77  >^(VACUUM only w
30d20 6f 72 6b 73 20 6f 6e 20 74 68 65 20 6d 61 69 6e  orks on the main
30d30 20 64 61 74 61 62 61 73 65 2e 20 49 74 20 69 73   database. It is
30d40 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f   not possible to
30d50 20 56 41 43 55 55 4d 20 61 6e 0a 61 74 74 61 63   VACUUM an.attac
30d60 68 65 64 20 64 61 74 61 62 61 73 65 20 66 69 6c  hed database fil
30d70 65 2e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41  e.)^..<p>^The VA
30d80 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 77 6f 72  CUUM command wor
30d90 6b 73 20 62 79 20 63 6f 70 79 69 6e 67 20 74 68  ks by copying th
30da0 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68  e contents of th
30db0 65 20 64 61 74 61 62 61 73 65 20 69 6e 74 6f 0a  e database into.
30dc0 61 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61  a temporary data
30dd0 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 74 68  base file and th
30de0 65 6e 20 6f 76 65 72 77 72 69 74 69 6e 67 20 74  en overwriting t
30df0 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 74 68  he original with
30e00 20 74 68 65 20 0a 63 6f 6e 74 65 6e 74 73 20 6f   the .contents o
30e10 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  f the temporary 
30e20 66 69 6c 65 2e 20 5e 57 68 65 6e 20 6f 76 65 72  file. ^When over
30e30 77 72 69 74 69 6e 67 20 74 68 65 20 6f 72 69 67  writing the orig
30e40 69 6e 61 6c 2c 20 61 20 72 6f 6c 6c 62 61 63 6b  inal, a rollback
30e50 0a 6a 6f 75 72 6e 61 6c 20 6f 72 20 5b 77 72 69  .journal or [wri
30e60 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20 57 41  te-ahead log] WA
30e70 4c 20 66 69 6c 65 20 69 73 20 75 73 65 64 20 6a  L file is used j
30e80 75 73 74 20 61 73 20 69 74 20 77 6f 75 6c 64 20  ust as it would 
30e90 62 65 20 66 6f 72 20 61 6e 79 0a 6f 74 68 65 72  be for any.other
30ea0 20 64 61 74 61 62 61 73 65 20 74 72 61 6e 73 61   database transa
30eb0 63 74 69 6f 6e 2e 20 5e 54 68 69 73 20 6d 65 61  ction. ^This mea
30ec0 6e 73 20 74 68 61 74 20 77 68 65 6e 20 56 41 43  ns that when VAC
30ed0 55 55 4d 69 6e 67 20 61 20 64 61 74 61 62 61 73  UUMing a databas
30ee0 65 2c 20 0a 61 73 20 6d 75 63 68 20 61 73 20 74  e, .as much as t
30ef0 77 69 63 65 20 74 68 65 20 73 69 7a 65 20 6f 66  wice the size of
30f00 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61   the original da
30f10 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 72  tabase file is r
30f20 65 71 75 69 72 65 64 20 69 6e 20 66 72 65 65 0a  equired in free.
30f30 64 69 73 6b 20 73 70 61 63 65 2e 0a 0a 3c 70 3e  disk space...<p>
30f40 5e 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d  ^The VACUUM comm
30f50 61 6e 64 20 6d 61 79 20 63 68 61 6e 67 65 20 74  and may change t
30f60 68 65 20 5b 52 4f 57 49 44 20 7c 20 52 4f 57 49  he [ROWID | ROWI
30f70 44 73 5d 20 6f 66 20 65 6e 74 72 69 65 73 20 69  Ds] of entries i
30f80 6e 20 61 6e 79 0a 74 61 62 6c 65 73 20 74 68 61  n any.tables tha
30f90 74 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 61 6e  t do not have an
30fa0 20 65 78 70 6c 69 63 69 74 20 5b 49 4e 54 45 47   explicit [INTEG
30fb0 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e  ER PRIMARY KEY].
30fc0 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 56 41 43  .</p>..<p>^A VAC
30fd0 55 55 4d 20 77 69 6c 6c 20 66 61 69 6c 20 69 66  UUM will fail if
30fe0 20 74 68 65 72 65 20 69 73 20 61 6e 20 6f 70 65   there is an ope
30ff0 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 6f  n transaction, o
31000 72 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6f  r if there are o
31010 6e 65 20 6f 72 0a 6d 6f 72 65 20 61 63 74 69 76  ne or.more activ
31020 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  e SQL statements
31030 20 77 68 65 6e 20 69 74 20 69 73 20 72 75 6e 2e   when it is run.
31040 0a 0a 3c 70 3e 5e 28 41 73 20 6f 66 20 53 51 4c  ..<p>^(As of SQL
31050 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 31 2c  ite version 3.1,
31060 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20   an alternative 
31070 74 6f 20 75 73 69 6e 67 20 74 68 65 20 56 41 43  to using the VAC
31080 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 74 6f 0a 72  UUM command to.r
31090 65 63 6c 61 69 6d 20 73 70 61 63 65 20 61 66 74  eclaim space aft
310a0 65 72 20 64 61 74 61 20 68 61 73 20 62 65 65 6e  er data has been
310b0 20 64 65 6c 65 74 65 64 20 69 73 20 61 75 74 6f   deleted is auto
310c0 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2c 20 65 6e  -vacuum mode, en
310d0 61 62 6c 65 64 20 75 73 69 6e 67 0a 74 68 65 20  abled using.the 
310e0 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72  [auto_vacuum] pr
310f0 61 67 6d 61 2e 29 5e 20 5e 57 68 65 6e 20 5b 61  agma.)^ ^When [a
31100 75 74 6f 5f 76 61 63 75 75 6d 5d 20 69 73 20 65  uto_vacuum] is e
31110 6e 61 62 6c 65 64 20 66 6f 72 20 61 20 64 61 74  nabled for a dat
31120 61 62 61 73 65 0a 66 72 65 65 20 70 61 67 65 73  abase.free pages
31130 20 6d 61 79 20 62 65 20 72 65 63 6c 61 69 6d 65   may be reclaime
31140 64 20 61 66 74 65 72 20 64 65 6c 65 74 69 6e 67  d after deleting
31150 20 64 61 74 61 2c 20 63 61 75 73 69 6e 67 20 74   data, causing t
31160 68 65 20 66 69 6c 65 20 74 6f 20 73 68 72 69 6e  he file to shrin
31170 6b 2c 0a 77 69 74 68 6f 75 74 20 72 65 62 75 69  k,.without rebui
31180 6c 64 69 6e 67 20 74 68 65 20 65 6e 74 69 72 65  lding the entire
31190 20 64 61 74 61 62 61 73 65 20 75 73 69 6e 67 20   database using 
311a0 56 41 43 55 55 4d 2e 20 20 48 6f 77 65 76 65 72  VACUUM.  However
311b0 2c 20 75 73 69 6e 67 0a 5b 61 75 74 6f 5f 76 61  , using.[auto_va
311c0 63 75 75 6d 5d 20 63 61 6e 20 6c 65 61 64 20 74  cuum] can lead t
311d0 6f 20 65 78 74 72 61 20 64 61 74 61 62 61 73 65  o extra database
311e0 20 66 69 6c 65 20 66 72 61 67 6d 65 6e 74 61 74   file fragmentat
311f0 69 6f 6e 2e 20 20 41 6e 64 20 5b 61 75 74 6f 5f  ion.  And [auto_
31200 76 61 63 75 75 6d 5d 0a 64 6f 65 73 20 6e 6f 74  vacuum].does not
31210 20 63 6f 6d 70 61 63 74 20 70 61 72 74 69 61 6c   compact partial
31220 6c 79 20 66 69 6c 6c 65 64 20 70 61 67 65 73 20  ly filled pages 
31230 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
31240 61 73 20 56 41 43 55 55 4d 20 64 6f 65 73 2e 0a  as VACUUM does..
31250 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23  .</p>...<tcl>.##
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 23 23 23 23 23 23 23 23  ################
31290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
312a0 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
312b0 74 69 6f 6e 20 7b 49 4e 44 45 58 45 44 20 42 59  tion {INDEXED BY
312c0 7d 20 69 6e 64 65 78 65 64 62 79 20 7b 7b 49 4e  } indexedby {{IN
312d0 44 45 58 45 44 20 42 59 7d 20 7b 4e 4f 54 20 49  DEXED BY} {NOT I
312e0 4e 44 45 58 45 44 7d 7d 0a 0a 3c 2f 74 63 6c 3e  NDEXED}}..</tcl>
312f0 0a 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44  .<p>^The INDEXED
31300 20 42 59 20 70 68 72 61 73 65 20 66 6f 72 63 65   BY phrase force
31310 73 20 74 68 65 20 5b 53 51 4c 69 74 65 20 71 75  s the [SQLite qu
31320 65 72 79 20 70 6c 61 6e 6e 65 72 5d 20 74 6f 20  ery planner] to 
31330 75 73 65 20 61 0a 70 61 72 74 69 63 75 6c 61 72  use a.particular
31340 20 6e 61 6d 65 64 20 69 6e 64 65 78 20 6f 6e 20   named index on 
31350 61 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 53 45 4c  a [DELETE], [SEL
31360 45 43 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45  ECT], or [UPDATE
31370 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a 54 68 65  ] statement..The
31380 20 49 4e 44 45 58 45 44 20 42 59 20 70 68 72 61   INDEXED BY phra
31390 73 65 20 69 73 20 61 6e 20 53 51 4c 69 74 65 20  se is an SQLite 
313a0 65 78 74 65 6e 73 69 6f 6e 20 61 6e 64 0a 69 73  extension and.is
313b0 20 6e 6f 74 20 70 6f 72 74 61 62 6c 65 20 74 6f   not portable to
313c0 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61 62   other SQL datab
313d0 61 73 65 20 65 6e 67 69 6e 65 73 2e 3c 2f 70 3e  ase engines.</p>
313e0 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69 76  ..<tcl>.Recursiv
313f0 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 71  eBubbleDiagram q
31400 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e  ualified-table-n
31410 61 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  ame.</tcl>..<p>^
31420 54 68 65 20 22 49 4e 44 45 58 45 44 20 42 59 20  The "INDEXED BY 
31430 3c 79 79 74 65 72 6d 3e 69 6e 64 65 78 2d 6e 61  <yyterm>index-na
31440 6d 65 3c 2f 79 79 74 65 72 6d 3e 22 20 70 68 72  me</yyterm>" phr
31450 61 73 65 20 73 70 65 63 69 66 69 65 73 20 0a 74  ase specifies .t
31460 68 61 74 20 74 68 65 20 6e 61 6d 65 64 20 69 6e  hat the named in
31470 64 65 78 0a 6d 75 73 74 20 62 65 20 75 73 65 64  dex.must be used
31480 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c 6f 6f   in order to loo
31490 6b 20 75 70 20 76 61 6c 75 65 73 20 6f 6e 20 74  k up values on t
314a0 68 65 20 70 72 65 63 65 64 69 6e 67 20 74 61 62  he preceding tab
314b0 6c 65 2e 0a 5e 49 66 20 3c 79 79 74 65 72 6d 3e  le..^If <yyterm>
314c0 69 6e 64 65 78 2d 6e 61 6d 65 3c 2f 79 79 74 65  index-name</yyte
314d0 72 6d 3e 20 64 6f 65 73 20 6e 6f 74 20 65 78 69  rm> does not exi
314e0 73 74 20 6f 72 20 63 61 6e 6e 6f 74 20 62 65 20  st or cannot be 
314f0 75 73 65 64 20 0a 66 6f 72 20 74 68 65 20 71 75  used .for the qu
31500 65 72 79 2c 20 74 68 65 6e 20 74 68 65 20 70 72  ery, then the pr
31510 65 70 61 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  eparation of the
31520 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 66   SQL statement f
31530 61 69 6c 73 2e 0a 5e 28 54 68 65 20 22 4e 4f 54  ails..^(The "NOT
31540 20 49 4e 44 45 58 45 44 22 20 63 6c 61 75 73 65   INDEXED" clause
31550 20 73 70 65 63 69 66 69 65 73 20 74 68 61 74 20   specifies that 
31560 6e 6f 20 69 6e 64 65 78 20 73 68 61 6c 6c 20 62  no index shall b
31570 65 20 75 73 65 64 20 77 68 65 6e 0a 61 63 63 65  e used when.acce
31580 73 73 69 6e 67 20 74 68 65 20 70 72 65 63 65 64  ssing the preced
31590 69 6e 67 20 74 61 62 6c 65 2c 20 69 6e 63 6c 75  ing table, inclu
315a0 64 69 6e 67 20 69 6d 70 6c 69 65 64 20 69 6e 64  ding implied ind
315b0 69 63 65 73 20 63 72 65 61 74 65 20 62 79 0a 55  ices create by.U
315c0 4e 49 51 55 45 20 61 6e 64 20 50 52 49 4d 41 52  NIQUE and PRIMAR
315d0 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  Y KEY constraint
315e0 73 2e 20 20 48 6f 77 65 76 65 72 2c 20 74 68 65  s.  However, the
315f0 20 5b 72 6f 77 69 64 5d 0a 63 61 6e 20 73 74 69   [rowid].can sti
31600 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20 6c 6f  ll be used to lo
31610 6f 6b 20 75 70 20 65 6e 74 72 69 65 73 20 65 76  ok up entries ev
31620 65 6e 20 77 68 65 6e 20 22 4e 4f 54 20 49 4e 44  en when "NOT IND
31630 45 58 45 44 22 20 69 73 20 73 70 65 63 69 66 69  EXED" is specifi
31640 65 64 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 53 6f  ed.)^</p>..<p>So
31650 6d 65 20 53 51 4c 20 64 61 74 61 62 61 73 65 20  me SQL database 
31660 65 6e 67 69 6e 65 73 20 70 72 6f 76 69 64 65 20  engines provide 
31670 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 22 68 69  non-standard "hi
31680 6e 74 22 20 6d 65 63 68 61 6e 69 73 6d 73 20 77  nt" mechanisms w
31690 68 69 63 68 0a 63 61 6e 20 62 65 20 75 73 65 64  hich.can be used
316a0 20 74 6f 20 67 69 76 65 20 74 68 65 20 71 75 65   to give the que
316b0 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 63 6c 75  ry optimizer clu
316c0 65 73 20 61 62 6f 75 74 20 77 68 61 74 20 69 6e  es about what in
316d0 64 69 63 65 73 20 69 74 20 73 68 6f 75 6c 64 0a  dices it should.
316e0 75 73 65 20 66 6f 72 20 61 20 70 61 72 74 69 63  use for a partic
316f0 75 6c 61 72 20 73 74 61 74 65 6d 65 6e 74 2e 20  ular statement. 
31700 20 54 68 65 20 49 4e 44 45 58 20 42 59 20 63 6c   The INDEX BY cl
31710 61 75 73 65 20 6f 66 20 53 51 4c 69 74 65 20 69  ause of SQLite i
31720 73 20 0a 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20  s .<em>not</em> 
31730 61 20 68 69 6e 74 69 6e 67 20 6d 65 63 68 61 6e  a hinting mechan
31740 69 73 6d 20 61 6e 64 20 69 74 20 73 68 6f 75 6c  ism and it shoul
31750 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 61 73  d not be used as
31760 20 73 75 63 68 2e 0a 5e 54 68 65 20 49 4e 44 45   such..^The INDE
31770 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 64 6f  XED BY clause do
31780 65 73 20 6e 6f 74 20 67 69 76 65 20 74 68 65 20  es not give the 
31790 6f 70 74 69 6d 69 7a 65 72 20 68 69 6e 74 73 20  optimizer hints 
317a0 61 62 6f 75 74 20 77 68 69 63 68 20 69 6e 64 65  about which inde
317b0 78 0a 74 6f 20 75 73 65 3b 20 69 74 20 67 69 76  x.to use; it giv
317c0 65 73 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  es the optimizer
317d0 20 61 20 72 65 71 75 69 72 65 6d 65 6e 74 20 6f   a requirement o
317e0 66 20 77 68 69 63 68 20 69 6e 64 65 78 20 74 6f  f which index to
317f0 20 75 73 65 2e 0a 5e 49 66 20 74 68 65 20 71 75   use..^If the qu
31800 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 69 73  ery optimizer is
31810 20 75 6e 61 62 6c 65 20 74 6f 20 75 73 65 20 74   unable to use t
31820 68 65 20 69 6e 64 65 78 20 73 70 65 63 69 66 69  he index specifi
31830 65 64 20 62 79 20 74 68 65 0a 49 4e 44 45 58 20  ed by the.INDEX 
31840 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  BY clause, then 
31850 74 68 65 20 71 75 65 72 79 20 77 69 6c 6c 20 66  the query will f
31860 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f  ail with an erro
31870 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 49  r.</p>..<p>The I
31880 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65  NDEXED BY clause
31890 20 69 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e   is <em>not</em>
318a0 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73   intended for us
318b0 65 20 69 6e 20 74 75 6e 69 6e 67 0a 74 68 65 20  e in tuning.the 
318c0 70 65 72 66 6f 72 6d 61 6e 63 65 20 6f 66 20 61  performance of a
318d0 20 71 75 65 72 79 2e 20 20 54 68 65 20 69 6e 74   query.  The int
318e0 65 6e 74 20 6f 66 20 74 68 65 20 49 4e 44 45 58  ent of the INDEX
318f0 45 44 20 42 59 20 63 6c 61 75 73 65 20 69 73 0a  ED BY clause is.
31900 74 6f 20 72 61 69 73 65 20 61 20 72 75 6e 2d 74  to raise a run-t
31910 69 6d 65 20 65 72 72 6f 72 20 69 66 20 61 20 73  ime error if a s
31920 63 68 65 6d 61 20 63 68 61 6e 67 65 2c 20 73 75  chema change, su
31930 63 68 20 61 73 20 64 72 6f 70 70 69 6e 67 20 6f  ch as dropping o
31940 72 0a 63 72 65 61 74 69 6e 67 20 61 6e 20 69 6e  r.creating an in
31950 64 65 78 2c 20 63 61 75 73 65 73 20 74 68 65 20  dex, causes the 
31960 71 75 65 72 79 20 70 6c 61 6e 20 66 6f 72 20 61  query plan for a
31970 20 74 69 6d 65 2d 73 65 6e 73 69 74 69 76 65 20   time-sensitive 
31980 71 75 65 72 79 0a 74 6f 20 63 68 61 6e 67 65 2e  query.to change.
31990 20 20 54 68 65 20 49 4e 44 45 58 45 44 20 42 59    The INDEXED BY
319a0 20 63 6c 61 75 73 65 20 69 73 20 64 65 73 69 67   clause is desig
319b0 6e 65 64 20 74 6f 20 68 65 6c 70 20 64 65 74 65  ned to help dete
319c0 63 74 0a 75 6e 64 65 73 69 72 61 62 6c 65 20 71  ct.undesirable q
319d0 75 65 72 79 20 70 6c 61 6e 20 63 68 61 6e 67 65  uery plan change
319e0 73 20 64 75 72 69 6e 67 20 72 65 67 72 65 73 73  s during regress
319f0 69 6f 6e 20 74 65 73 74 69 6e 67 2e 0a 41 70 70  ion testing..App
31a00 6c 69 63 61 74 69 6f 6e 20 0a 64 65 76 65 6c 6f  lication .develo
31a10 70 65 72 73 20 61 72 65 20 61 64 6d 6f 6e 69 73  pers are admonis
31a20 68 65 64 20 74 6f 20 6f 6d 69 74 20 61 6c 6c 20  hed to omit all 
31a30 75 73 65 20 6f 66 20 49 4e 44 45 58 45 44 20 42  use of INDEXED B
31a40 59 20 64 75 72 69 6e 67 0a 61 70 70 6c 69 63 61  Y during.applica
31a50 74 69 6f 6e 20 64 65 73 69 67 6e 2c 20 69 6d 70  tion design, imp
31a60 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 65 73  lementation, tes
31a70 74 69 6e 67 2c 20 61 6e 64 20 74 75 6e 69 6e 67  ting, and tuning
31a80 2e 20 20 49 66 0a 49 4e 44 45 58 45 44 20 42 59  .  If.INDEXED BY
31a90 20 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 61   is to be used a
31aa0 74 20 61 6c 6c 2c 20 69 74 20 73 68 6f 75 6c 64  t all, it should
31ab0 20 62 65 20 69 6e 73 65 72 74 65 64 20 61 74 20   be inserted at 
31ac0 74 68 65 20 76 65 72 79 0a 65 6e 64 20 6f 66 20  the very.end of 
31ad0 74 68 65 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20  the development 
31ae0 70 72 6f 63 65 73 73 20 77 68 65 6e 20 22 6c 6f  process when "lo
31af0 63 6b 69 6e 67 20 64 6f 77 6e 22 20 61 20 64 65  cking down" a de
31b00 73 69 67 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53  sign.</p>..<h3>S
31b10 65 65 20 41 6c 73 6f 3a 3c 2f 68 33 3e 0a 0a 3c  ee Also:</h3>..<
31b20 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 5b  ol>.<li><p>The [
31b30 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 63 68  query planner ch
31b40 65 63 6b 6c 69 73 74 5d 20 64 65 73 63 72 69 62  ecklist] describ
31b50 65 73 20 73 74 65 70 73 20 74 68 61 74 20 61 70  es steps that ap
31b60 70 6c 69 63 61 74 69 6f 6e 0a 64 65 76 65 6c 6f  plication.develo
31b70 70 65 72 73 20 73 68 6f 75 6c 64 20 66 6f 6c 6c  pers should foll
31b80 6f 77 69 6e 67 20 74 6f 20 68 65 6c 70 20 72 65  owing to help re
31b90 73 6f 6c 76 65 20 71 75 65 72 79 20 70 6c 61 6e  solve query plan
31ba0 6e 65 72 20 70 72 6f 62 6c 65 6d 73 2e 0a 4e 6f  ner problems..No
31bb0 74 69 63 65 20 74 68 65 20 74 68 61 74 20 74 68  tice the that th
31bc0 65 20 75 73 65 20 6f 66 20 49 4e 44 45 58 45 44  e use of INDEXED
31bd0 20 42 59 20 69 73 20 61 20 6c 61 73 74 20 72 65   BY is a last re
31be0 73 6f 72 74 2c 20 74 6f 20 62 65 20 75 73 65 64  sort, to be used
31bf0 20 6f 6e 6c 79 0a 77 68 65 6e 20 61 6c 6c 20 6f   only.when all o
31c00 74 68 65 72 20 6d 65 61 73 75 72 65 73 20 66 61  ther measures fa
31c10 69 6c 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e  il.</p>..<li><p>
31c20 5b 75 70 6c 75 73 63 6f 6e 74 72 6f 6c 7c 54 68  [upluscontrol|Th
31c30 65 20 75 6e 61 72 79 20 22 2b 22 20 6f 70 65 72  e unary "+" oper
31c40 61 74 6f 72 5d 0a 63 61 6e 20 62 65 20 75 73 65  ator].can be use
31c50 64 20 74 6f 20 64 69 73 71 75 61 6c 69 66 79 20  d to disqualify 
31c60 74 65 72 6d 73 20 69 6e 20 74 68 65 20 57 48 45  terms in the WHE
31c70 52 45 20 63 6c 61 75 73 65 20 66 72 6f 6d 20 75  RE clause from u
31c80 73 65 20 62 79 20 69 6e 64 69 63 65 73 2e 0a 43  se by indices..C
31c90 61 72 65 66 75 6c 20 75 73 65 20 6f 66 20 75 6e  areful use of un
31ca0 61 72 79 20 2b 20 63 61 6e 20 73 6f 6d 65 74 69  ary + can someti
31cb0 6d 65 73 20 68 65 6c 70 20 70 72 65 76 65 6e 74  mes help prevent
31cc0 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e   the query plann
31cd0 65 72 20 66 72 6f 6d 0a 63 68 6f 6f 73 69 6e 67  er from.choosing
31ce0 20 61 20 70 6f 6f 72 20 69 6e 64 65 78 20 77 69   a poor index wi
31cf0 74 68 6f 75 74 20 72 65 73 74 72 69 63 74 69 6e  thout restrictin
31d00 67 20 69 74 20 74 6f 20 75 73 69 6e 67 20 6f 6e  g it to using on
31d10 65 20 73 70 65 63 69 66 69 63 20 69 6e 64 65 78  e specific index
31d20 2e 0a 43 61 72 65 66 75 6c 20 70 6c 61 63 65 6d  ..Careful placem
31d30 65 6e 74 20 6f 66 20 75 6e 61 72 79 20 2b 20 6f  ent of unary + o
31d40 70 65 72 61 74 6f 72 73 20 69 73 20 61 20 62 65  perators is a be
31d50 74 74 65 72 20 6d 65 74 68 6f 64 20 66 6f 72 20  tter method for 
31d60 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20 0a 77 68 69  controlling .whi
31d70 63 68 20 69 6e 64 69 63 65 73 20 61 72 65 20 75  ch indices are u
31d80 73 65 64 20 62 79 20 61 20 71 75 65 72 79 2e 3c  sed by a query.<
31d90 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20  /p>..<li><p>The 
31da0 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74  [sqlite3_stmt_st
31db0 61 74 75 73 28 29 5d 20 43 2f 43 2b 2b 20 69 6e  atus()] C/C++ in
31dc0 74 65 72 66 61 63 65 20 74 6f 67 65 74 68 65 72  terface together
31dd0 20 77 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54   with the.[SQLIT
31de0 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 46 55 4c  E_STMTSTATUS_FUL
31df0 4c 53 43 41 4e 5f 53 54 45 50 5d 20 61 6e 64 20  LSCAN_STEP] and 
31e00 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
31e10 55 53 5f 53 4f 52 54 5d 20 76 65 72 62 73 0a 63  US_SORT] verbs.c
31e20 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 64 65  an be used to de
31e30 74 65 63 74 20 61 74 20 72 75 6e 2d 74 69 6d 65  tect at run-time
31e40 20 77 68 65 6e 20 61 6e 20 53 51 4c 20 73 74 61   when an SQL sta
31e50 74 65 6d 65 6e 74 20 69 73 20 6e 6f 74 0a 6d 61  tement is not.ma
31e60 6b 69 6e 67 20 65 66 66 65 63 74 69 76 65 20 75  king effective u
31e70 73 65 20 6f 66 20 69 6e 64 69 63 65 73 2e 20 20  se of indices.  
31e80 4d 61 6e 79 20 61 70 70 6c 69 63 61 74 69 6f 6e  Many application
31e90 73 20 6d 61 79 20 70 72 65 66 65 72 20 74 6f 0a  s may prefer to.
31ea0 75 73 65 20 74 68 65 20 5b 73 71 6c 69 74 65 33  use the [sqlite3
31eb0 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 29 5d 20  _stmt_status()] 
31ec0 69 6e 74 65 72 66 61 63 65 20 74 6f 20 64 65 74  interface to det
31ed0 65 63 74 20 69 6e 64 65 78 20 6d 69 73 75 73 65  ect index misuse
31ee0 0a 72 61 74 68 65 72 20 74 68 61 6e 20 74 68 65  .rather than the
31ef0 20 49 4e 44 45 58 45 44 20 42 59 20 70 68 72 61   INDEXED BY phra
31f00 73 65 20 64 65 73 63 72 69 62 65 64 20 68 65 72  se described her
31f10 65 2e 3c 2f 70 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 74  e.</p>.</ol>..<t
31f20 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
31f30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31f40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31f50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31f60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31f70 23 0a 23 20 41 20 6c 69 73 74 20 6f 66 20 6b 65  #.# A list of ke
31f80 79 77 6f 72 64 73 2e 20 20 41 20 61 73 74 65 72  ywords.  A aster
31f90 69 73 6b 20 6f 63 63 75 72 73 20 61 66 74 65 72  isk occurs after
31fa0 20 74 68 65 20 6b 65 79 77 6f 72 64 20 69 66 20   the keyword if 
31fb0 69 74 20 69 73 20 6f 6e 0a 23 20 74 68 65 20 66  it is on.# the f
31fc0 61 6c 6c 62 61 63 6b 20 6c 69 73 74 2e 0a 23 0a  allback list..#.
31fd0 73 65 74 20 6b 65 79 77 6f 72 64 5f 6c 69 73 74  set keyword_list
31fe0 20 5b 6c 73 6f 72 74 20 7b 0a 20 20 20 41 42 4f   [lsort {.   ABO
31ff0 52 54 0a 20 20 20 41 43 54 49 4f 4e 0a 20 20 20  RT.   ACTION.   
32000 41 44 44 0a 20 20 20 41 46 54 45 52 0a 20 20 20  ADD.   AFTER.   
32010 41 4c 4c 0a 20 20 20 41 4c 54 45 52 0a 20 20 20  ALL.   ALTER.   
32020 41 4e 41 4c 59 5a 45 0a 20 20 20 41 4e 44 0a 20  ANALYZE.   AND. 
32030 20 20 41 53 0a 20 20 20 41 53 43 0a 20 20 20 41    AS.   ASC.   A
32040 54 54 41 43 48 0a 20 20 20 41 55 54 4f 49 4e 43  TTACH.   AUTOINC
32050 52 45 4d 45 4e 54 0a 20 20 20 42 45 46 4f 52 45  REMENT.   BEFORE
32060 0a 20 20 20 42 45 47 49 4e 0a 20 20 20 42 45 54  .   BEGIN.   BET
32070 57 45 45 4e 0a 20 20 20 42 59 0a 20 20 20 43 41  WEEN.   BY.   CA
32080 53 43 41 44 45 0a 20 20 20 43 41 53 45 0a 20 20  SCADE.   CASE.  
32090 20 43 41 53 54 0a 20 20 20 43 48 45 43 4b 0a 20   CAST.   CHECK. 
320a0 20 20 43 4f 4c 4c 41 54 45 0a 20 20 20 43 4f 4c    COLLATE.   COL
320b0 55 4d 4e 0a 20 20 20 43 4f 4d 4d 49 54 0a 20 20  UMN.   COMMIT.  
320c0 20 43 4f 4e 46 4c 49 43 54 0a 20 20 20 43 4f 4e   CONFLICT.   CON
320d0 53 54 52 41 49 4e 54 0a 20 20 20 43 52 45 41 54  STRAINT.   CREAT
320e0 45 0a 20 20 20 43 52 4f 53 53 0a 20 20 20 43 55  E.   CROSS.   CU
320f0 52 52 45 4e 54 5f 44 41 54 45 0a 20 20 20 43 55  RRENT_DATE.   CU
32100 52 52 45 4e 54 5f 54 49 4d 45 0a 20 20 20 43 55  RRENT_TIME.   CU
32110 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 0a  RRENT_TIMESTAMP.
32120 20 20 20 44 41 54 41 42 41 53 45 0a 20 20 20 44     DATABASE.   D
32130 45 46 41 55 4c 54 0a 20 20 20 44 45 46 45 52 52  EFAULT.   DEFERR
32140 45 44 0a 20 20 20 44 45 46 45 52 52 41 42 4c 45  ED.   DEFERRABLE
32150 0a 20 20 20 44 45 4c 45 54 45 0a 20 20 20 44 45  .   DELETE.   DE
32160 53 43 0a 20 20 20 44 45 54 41 43 48 0a 20 20 20  SC.   DETACH.   
32170 44 49 53 54 49 4e 43 54 0a 20 20 20 44 52 4f 50  DISTINCT.   DROP
32180 0a 20 20 20 45 4e 44 0a 20 20 20 45 41 43 48 0a  .   END.   EACH.
32190 20 20 20 45 4c 53 45 0a 20 20 20 45 53 43 41 50     ELSE.   ESCAP
321a0 45 0a 20 20 20 45 58 43 45 50 54 0a 20 20 20 45  E.   EXCEPT.   E
321b0 58 43 4c 55 53 49 56 45 0a 20 20 20 45 58 49 53  XCLUSIVE.   EXIS
321c0 54 53 0a 20 20 20 45 58 50 4c 41 49 4e 0a 20 20  TS.   EXPLAIN.  
321d0 20 46 41 49 4c 0a 20 20 20 46 4f 52 0a 20 20 20   FAIL.   FOR.   
321e0 46 4f 52 45 49 47 4e 0a 20 20 20 46 52 4f 4d 0a  FOREIGN.   FROM.
321f0 20 20 20 46 55 4c 4c 0a 20 20 20 47 4c 4f 42 0a     FULL.   GLOB.
32200 20 20 20 47 52 4f 55 50 0a 20 20 20 48 41 56 49     GROUP.   HAVI
32210 4e 47 0a 20 20 20 49 46 0a 20 20 20 49 47 4e 4f  NG.   IF.   IGNO
32220 52 45 0a 20 20 20 49 4d 4d 45 44 49 41 54 45 0a  RE.   IMMEDIATE.
32230 20 20 20 49 4e 0a 20 20 20 49 4e 44 45 58 0a 20     IN.   INDEX. 
32240 20 20 49 4e 44 45 58 45 44 0a 20 20 20 49 4e 49    INDEXED.   INI
32250 54 49 41 4c 4c 59 0a 20 20 20 49 4e 4e 45 52 0a  TIALLY.   INNER.
32260 20 20 20 49 4e 53 45 52 54 0a 20 20 20 49 4e 53     INSERT.   INS
32270 54 45 41 44 0a 20 20 20 49 4e 54 45 52 53 45 43  TEAD.   INTERSEC
32280 54 0a 20 20 20 49 4e 54 4f 0a 20 20 20 49 53 0a  T.   INTO.   IS.
32290 20 20 20 49 53 4e 55 4c 4c 0a 20 20 20 4a 4f 49     ISNULL.   JOI
322a0 4e 0a 20 20 20 4b 45 59 0a 20 20 20 4c 45 46 54  N.   KEY.   LEFT
322b0 0a 20 20 20 4c 49 4b 45 0a 20 20 20 4c 49 4d 49  .   LIKE.   LIMI
322c0 54 0a 20 20 20 4d 41 54 43 48 0a 20 20 20 4e 41  T.   MATCH.   NA
322d0 54 55 52 41 4c 0a 20 20 20 4e 4f 0a 20 20 20 4e  TURAL.   NO.   N
322e0 4f 54 0a 20 20 20 4e 4f 54 4e 55 4c 4c 0a 20 20  OT.   NOTNULL.  
322f0 20 4e 55 4c 4c 0a 20 20 20 4f 46 0a 20 20 20 4f   NULL.   OF.   O
32300 46 46 53 45 54 0a 20 20 20 4f 4e 0a 20 20 20 4f  FFSET.   ON.   O
32310 52 0a 20 20 20 4f 52 44 45 52 0a 20 20 20 4f 55  R.   ORDER.   OU
32320 54 45 52 0a 20 20 20 50 4c 41 4e 0a 20 20 20 50  TER.   PLAN.   P
32330 52 41 47 4d 41 0a 20 20 20 50 52 49 4d 41 52 59  RAGMA.   PRIMARY
32340 0a 20 20 20 51 55 45 52 59 0a 20 20 20 52 41 49  .   QUERY.   RAI
32350 53 45 0a 20 20 20 52 45 43 55 52 53 49 56 45 0a  SE.   RECURSIVE.
32360 20 20 20 52 45 46 45 52 45 4e 43 45 53 0a 20 20     REFERENCES.  
32370 20 52 45 47 45 58 50 0a 20 20 20 52 45 49 4e 44   REGEXP.   REIND
32380 45 58 0a 20 20 20 52 45 4c 45 41 53 45 0a 20 20  EX.   RELEASE.  
32390 20 52 45 4e 41 4d 45 0a 20 20 20 52 45 50 4c 41   RENAME.   REPLA
323a0 43 45 0a 20 20 20 52 45 53 54 52 49 43 54 0a 20  CE.   RESTRICT. 
323b0 20 20 52 49 47 48 54 0a 20 20 20 52 4f 4c 4c 42    RIGHT.   ROLLB
323c0 41 43 4b 0a 20 20 20 52 4f 57 0a 20 20 20 53 41  ACK.   ROW.   SA
323d0 56 45 50 4f 49 4e 54 0a 20 20 20 53 45 4c 45 43  VEPOINT.   SELEC
323e0 54 0a 20 20 20 53 45 54 0a 20 20 20 54 41 42 4c  T.   SET.   TABL
323f0 45 0a 20 20 20 54 45 4d 50 0a 20 20 20 54 45 4d  E.   TEMP.   TEM
32400 50 4f 52 41 52 59 0a 20 20 20 54 48 45 4e 0a 20  PORARY.   THEN. 
32410 20 20 54 4f 0a 20 20 20 54 52 41 4e 53 41 43 54    TO.   TRANSACT
32420 49 4f 4e 0a 20 20 20 54 52 49 47 47 45 52 0a 20  ION.   TRIGGER. 
32430 20 20 55 4e 49 4f 4e 0a 20 20 20 55 4e 49 51 55    UNION.   UNIQU
32440 45 0a 20 20 20 55 50 44 41 54 45 0a 20 20 20 55  E.   UPDATE.   U
32450 53 49 4e 47 0a 20 20 20 56 41 43 55 55 4d 0a 20  SING.   VACUUM. 
32460 20 20 56 41 4c 55 45 53 0a 20 20 20 56 49 45 57    VALUES.   VIEW
32470 0a 20 20 20 56 49 52 54 55 41 4c 0a 20 20 20 57  .   VIRTUAL.   W
32480 49 54 48 0a 20 20 20 57 49 54 48 4f 55 54 0a 20  ITH.   WITHOUT. 
32490 20 20 57 48 45 4e 0a 20 20 20 57 48 45 52 45 0a    WHEN.   WHERE.
324a0 7d 5d 0a 0a 68 64 5f 70 75 74 73 20 7b 3c 44 49  }]..hd_puts {<DI
324b0 56 20 63 6c 61 73 73 3d 22 70 64 66 5f 73 65 63  V class="pdf_sec
324c0 74 69 6f 6e 22 3e 7d 0a 53 65 63 74 69 6f 6e 20  tion">}.Section 
324d0 7b 53 51 4c 69 74 65 20 4b 65 79 77 6f 72 64 73  {SQLite Keywords
324e0 7d 20 6b 65 79 77 6f 72 64 73 20 7b 7b 2a 53 51  } keywords {{*SQ
324f0 4c 20 6b 65 79 77 6f 72 64 7d 20 7b 53 51 4c 20  L keyword} {SQL 
32500 6b 65 79 77 6f 72 64 73 7d 7d 0a 68 64 5f 70 75  keywords}}.hd_pu
32510 74 73 20 7b 3c 2f 44 49 56 3e 7d 0a 3c 2f 74 63  ts {</DIV>}.</tc
32520 6c 3e 0a 0a 3c 70 3e 54 68 65 20 53 51 4c 20 73  l>..<p>The SQL s
32530 74 61 6e 64 61 72 64 20 73 70 65 63 69 66 69 65  tandard specifie
32540 73 20 61 20 68 75 67 65 20 6e 75 6d 62 65 72 20  s a huge number 
32550 6f 66 20 6b 65 79 77 6f 72 64 73 20 77 68 69 63  of keywords whic
32560 68 20 6d 61 79 20 6e 6f 74 0a 62 65 20 75 73 65  h may not.be use
32570 64 20 61 73 20 74 68 65 20 6e 61 6d 65 73 20 6f  d as the names o
32580 66 20 74 61 62 6c 65 73 2c 20 69 6e 64 69 63 65  f tables, indice
32590 73 2c 20 63 6f 6c 75 6d 6e 73 2c 20 64 61 74 61  s, columns, data
325a0 62 61 73 65 73 2c 20 75 73 65 72 2d 64 65 66 69  bases, user-defi
325b0 6e 65 64 0a 66 75 6e 63 74 69 6f 6e 73 2c 20 63  ned.functions, c
325c0 6f 6c 6c 61 74 69 6f 6e 73 2c 20 76 69 72 74 75  ollations, virtu
325d0 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 73  al table modules
325e0 2c 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6e  , or any other n
325f0 61 6d 65 64 20 6f 62 6a 65 63 74 2e 0a 54 68 65  amed object..The
32600 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f 72 64   list of keyword
32610 73 20 69 73 20 73 6f 20 6c 6f 6e 67 20 74 68 61  s is so long tha
32620 74 20 66 65 77 20 70 65 6f 70 6c 65 20 63 61 6e  t few people can
32630 20 72 65 6d 65 6d 62 65 72 20 74 68 65 6d 20 61   remember them a
32640 6c 6c 2e 0a 46 6f 72 20 6d 6f 73 74 20 53 51 4c  ll..For most SQL
32650 20 63 6f 64 65 2c 20 79 6f 75 72 20 73 61 66 65   code, your safe
32660 73 74 20 62 65 74 20 69 73 20 74 6f 20 6e 65 76  st bet is to nev
32670 65 72 20 75 73 65 20 61 6e 79 20 45 6e 67 6c 69  er use any Engli
32680 73 68 20 6c 61 6e 67 75 61 67 65 0a 77 6f 72 64  sh language.word
32690 20 61 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   as the name of 
326a0 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 6f  a user-defined o
326b0 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49  bject.</p>..<p>I
326c0 66 20 79 6f 75 20 77 61 6e 74 20 74 6f 20 75 73  f you want to us
326d0 65 20 61 20 6b 65 79 77 6f 72 64 20 61 73 20 61  e a keyword as a
326e0 20 6e 61 6d 65 2c 20 79 6f 75 20 6e 65 65 64 20   name, you need 
326f0 74 6f 20 71 75 6f 74 65 20 69 74 2e 20 20 54 68  to quote it.  Th
32700 65 72 65 0a 61 72 65 20 66 6f 75 72 20 77 61 79  ere.are four way
32710 73 20 6f 66 20 71 75 6f 74 69 6e 67 20 6b 65 79  s of quoting key
32720 77 6f 72 64 73 20 69 6e 20 53 51 4c 69 74 65 3a  words in SQLite:
32730 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62 6c 6f 63 6b  </p>..<p>.<block
32740 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c  quote>.<table>.<
32750 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
32760 74 6f 70 22 3e 3c 62 3e 27 6b 65 79 77 6f 72 64  top"><b>'keyword
32770 27 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69  '</b></td><td wi
32780 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 09  dth="20"></td>..
32790 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 69  <td>^A keyword i
327a0 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20  n single quotes 
327b0 69 73 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65  is a string lite
327c0 72 61 6c 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a  ral.</td></tr>..
327d0 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
327e0 22 74 6f 70 22 3e 3c 62 3e 22 6b 65 79 77 6f 72  "top"><b>"keywor
327f0 64 22 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c  d"</b></td><td><
32800 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79  /td>..<td>^A key
32810 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65 2d 71  word in double-q
32820 75 6f 74 65 73 20 69 73 20 61 6e 20 69 64 65 6e  uotes is an iden
32830 74 69 66 69 65 72 2e 3c 2f 74 64 3e 3c 2f 74 72  tifier.</td></tr
32840 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69  >..<tr>.<td vali
32850 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26 23 39 31  gn="top"><b>&#91
32860 3b 6b 65 79 77 6f 72 64 26 23 39 33 3b 3c 2f 62  ;keyword&#93;</b
32870 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a  ></td><td></td>.
32880 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20  .<td>^A keyword 
32890 65 6e 63 6c 6f 73 65 64 20 69 6e 20 73 71 75 61  enclosed in squa
328a0 72 65 20 62 72 61 63 6b 65 74 73 20 69 73 20 0a  re brackets is .
328b0 20 20 20 20 20 20 20 20 61 6e 20 69 64 65 6e 74          an ident
328c0 69 66 69 65 72 2e 20 20 54 68 69 73 20 69 73 20  ifier.  This is 
328d0 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c  not standard SQL
328e0 2e 20 20 54 68 69 73 20 71 75 6f 74 69 6e 67 20  .  This quoting 
328f0 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20 20 20 20  mechanism.      
32900 20 20 69 73 20 75 73 65 64 20 62 79 20 4d 53 20    is used by MS 
32910 41 63 63 65 73 73 20 61 6e 64 20 53 51 4c 20 53  Access and SQL S
32920 65 72 76 65 72 20 61 6e 64 20 69 73 20 69 6e 63  erver and is inc
32930 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20  luded in SQLite 
32940 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f 6d 70  for.        comp
32950 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c  atibility.</td><
32960 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76  /tr>..<tr>.<td v
32970 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26  align="top"><b>&
32980 23 39 36 3b 6b 65 79 77 6f 72 64 26 23 39 36 3b  #96;keyword&#96;
32990 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74  </b></td><td></t
329a0 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f  d>..<td>^A keywo
329b0 72 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 67  rd enclosed in g
329c0 72 61 76 65 20 61 63 63 65 6e 74 73 20 28 41 53  rave accents (AS
329d0 43 49 49 20 63 6f 64 65 20 39 36 29 20 69 73 20  CII code 96) is 
329e0 0a 20 20 20 20 20 20 20 20 61 6e 20 69 64 65 6e  .        an iden
329f0 74 69 66 69 65 72 2e 20 20 54 68 69 73 20 69 73  tifier.  This is
32a00 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51   not standard SQ
32a10 4c 2e 20 20 54 68 69 73 20 71 75 6f 74 69 6e 67  L.  This quoting
32a20 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20 20 20   mechanism.     
32a30 20 20 20 69 73 20 75 73 65 64 20 62 79 20 4d 79     is used by My
32a40 53 51 4c 20 61 6e 64 20 69 73 20 69 6e 63 6c 75  SQL and is inclu
32a50 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20 66 6f  ded in SQLite fo
32a60 72 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 61 74  r.        compat
32a70 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74  ibility.</td></t
32a80 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c  r>.</table>.</bl
32a90 6f 63 6b 71 75 6f 74 65 3e 0a 3c 2f 70 3e 0a 0a  ockquote>.</p>..
32aa0 3c 70 3e 46 6f 72 20 72 65 73 69 6c 69 65 6e 63  <p>For resilienc
32ab0 65 20 77 68 65 6e 20 63 6f 6e 66 72 6f 6e 74 65  e when confronte
32ac0 64 20 77 69 74 68 20 68 69 73 74 6f 72 69 63 61  d with historica
32ad0 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  l SQL statements
32ae0 2c 20 53 51 4c 69 74 65 0a 77 69 6c 6c 20 73 6f  , SQLite.will so
32af0 6d 65 74 69 6d 65 73 20 62 65 6e 64 20 74 68 65  metimes bend the
32b00 20 71 75 6f 74 69 6e 67 20 72 75 6c 65 73 20 61   quoting rules a
32b10 62 6f 76 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a  bove:</p>..<ul>.
32b20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61 20 6b 65 79  <li><p>^If a key
32b30 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65 0a 71  word in single.q
32b40 75 6f 74 65 73 20 28 65 78 3a 20 3c 62 3e 27 6b  uotes (ex: <b>'k
32b50 65 79 27 3c 2f 62 3e 20 6f 72 20 3c 62 3e 27 67  ey'</b> or <b>'g
32b60 6c 6f 62 27 3c 2f 62 3e 29 20 69 73 20 75 73 65  lob'</b>) is use
32b70 64 20 69 6e 20 61 20 63 6f 6e 74 65 78 74 20 77  d in a context w
32b80 68 65 72 65 0a 61 6e 20 69 64 65 6e 74 69 66 69  here.an identifi
32b90 65 72 20 69 73 20 61 6c 6c 6f 77 65 64 20 62 75  er is allowed bu
32ba0 74 20 77 68 65 72 65 20 61 20 73 74 72 69 6e 67  t where a string
32bb0 20 6c 69 74 65 72 61 6c 20 69 73 20 6e 6f 74 20   literal is not 
32bc0 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e 0a 74 68  allowed, then.th
32bd0 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72  e token is under
32be0 73 74 6f 6f 64 20 74 6f 20 62 65 20 61 6e 20 69  stood to be an i
32bf0 64 65 6e 74 69 66 69 65 72 20 69 6e 73 74 65 61  dentifier instea
32c00 64 20 6f 66 20 61 20 73 74 72 69 6e 67 20 6c 69  d of a string li
32c10 74 65 72 61 6c 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e  teral..</p></li>
32c20 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61 20 6b  ..<li><p>^If a k
32c30 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65  eyword in double
32c40 0a 71 75 6f 74 65 73 20 28 65 78 3a 20 3c 62 3e  .quotes (ex: <b>
32c50 22 6b 65 79 22 3c 2f 62 3e 20 6f 72 20 3c 62 3e  "key"</b> or <b>
32c60 22 67 6c 6f 62 22 3c 2f 62 3e 29 20 69 73 20 75  "glob"</b>) is u
32c70 73 65 64 20 69 6e 20 61 20 63 6f 6e 74 65 78 74  sed in a context
32c80 20 77 68 65 72 65 0a 69 74 20 63 61 6e 6e 6f 74   where.it cannot
32c90 20 62 65 20 72 65 73 6f 6c 76 65 64 20 74 6f 20   be resolved to 
32ca0 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 62 75  an identifier bu
32cb0 74 20 77 68 65 72 65 20 61 20 73 74 72 69 6e 67  t where a string
32cc0 20 6c 69 74 65 72 61 6c 0a 69 73 20 61 6c 6c 6f   literal.is allo
32cd0 77 65 64 2c 20 74 68 65 6e 20 74 68 65 20 74 6f  wed, then the to
32ce0 6b 65 6e 20 69 73 20 75 6e 64 65 72 73 74 6f 6f  ken is understoo
32cf0 64 20 74 6f 20 62 65 20 61 20 73 74 72 69 6e 67  d to be a string
32d00 20 6c 69 74 65 72 61 6c 20 69 6e 73 74 65 61 64   literal instead
32d10 0a 6f 66 20 61 6e 20 69 64 65 6e 74 69 66 69 65  .of an identifie
32d20 72 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c  r.</p></li>.</ul
32d30 3e 0a 0a 3c 70 3e 50 72 6f 67 72 61 6d 6d 65 72  >..<p>Programmer
32d40 73 20 61 72 65 20 63 61 75 74 69 6f 6e 65 64 20  s are cautioned 
32d50 6e 6f 74 20 74 6f 20 75 73 65 20 74 68 65 20 74  not to use the t
32d60 77 6f 20 65 78 63 65 70 74 69 6f 6e 73 20 64 65  wo exceptions de
32d70 73 63 72 69 62 65 64 20 69 6e 0a 74 68 65 20 70  scribed in.the p
32d80 72 65 76 69 6f 75 73 20 62 75 6c 6c 65 74 73 2e  revious bullets.
32d90 20 20 57 65 20 65 6d 70 68 61 73 69 7a 65 20 74    We emphasize t
32da0 68 61 74 20 74 68 65 79 20 65 78 69 73 74 20 6f  hat they exist o
32db0 6e 6c 79 20 73 6f 20 74 68 61 74 20 6f 6c 64 0a  nly so that old.
32dc0 61 6e 64 20 69 6c 6c 2d 66 6f 72 6d 65 64 20 53  and ill-formed S
32dd0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  QL statements wi
32de0 6c 6c 20 72 75 6e 20 63 6f 72 72 65 63 74 6c 79  ll run correctly
32df0 2e 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f  .  Future versio
32e00 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 6d 69 67  ns of.SQLite mig
32e10 68 74 20 72 61 69 73 65 20 65 72 72 6f 72 73 20  ht raise errors 
32e20 69 6e 73 74 65 61 64 20 6f 66 20 61 63 63 65 70  instead of accep
32e30 74 69 6e 67 20 74 68 65 20 6d 61 6c 66 6f 72 6d  ting the malform
32e40 65 64 0a 73 74 61 74 65 6d 65 6e 74 73 20 63 6f  ed.statements co
32e50 76 65 72 65 64 20 62 79 20 74 68 65 20 65 78 63  vered by the exc
32e60 65 70 74 69 6f 6e 73 20 61 62 6f 76 65 2e 3c 2f  eptions above.</
32e70 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 61  p>..<p>.SQLite a
32e80 64 64 73 20 6e 65 77 20 6b 65 79 77 6f 72 64 73  dds new keywords
32e90 20 66 72 6f 6d 20 74 69 6d 65 20 74 6f 20 74 69   from time to ti
32ea0 6d 65 20 77 68 65 6e 20 69 74 20 74 61 6b 65 73  me when it takes
32eb0 20 6f 6e 20 6e 65 77 20 66 65 61 74 75 72 65 73   on new features
32ec0 2e 0a 53 6f 20 74 6f 20 70 72 65 76 65 6e 74 20  ..So to prevent 
32ed0 79 6f 75 72 20 63 6f 64 65 20 66 72 6f 6d 20 62  your code from b
32ee0 65 69 6e 67 20 62 72 6f 6b 65 6e 20 62 79 20 66  eing broken by f
32ef0 75 74 75 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e  uture enhancemen
32f00 74 73 2c 20 79 6f 75 20 73 68 6f 75 6c 64 0a 6e  ts, you should.n
32f10 6f 72 6d 61 6c 6c 79 20 71 75 6f 74 65 20 61 6e  ormally quote an
32f20 79 20 69 64 65 6e 74 69 66 69 65 72 20 74 68 61  y identifier tha
32f30 74 20 69 73 20 61 6e 20 45 6e 67 6c 69 73 68 20  t is an English 
32f40 6c 61 6e 67 75 61 67 65 20 77 6f 72 64 2c 20 65  language word, e
32f50 76 65 6e 20 69 66 0a 79 6f 75 20 64 6f 20 6e 6f  ven if.you do no
32f60 74 20 68 61 76 65 20 74 6f 2e 0a 3c 2f 70 3e 0a  t have to..</p>.
32f70 0a 3c 70 3e 0a 54 68 65 20 6c 69 73 74 20 62 65  .<p>.The list be
32f80 6c 6f 77 20 73 68 6f 77 73 20 61 6c 6c 20 70 6f  low shows all po
32f90 73 73 69 62 6c 65 20 6b 65 79 77 6f 72 64 73 20  ssible keywords 
32fa0 75 73 65 64 20 62 79 20 61 6e 79 20 62 75 69 6c  used by any buil
32fb0 64 20 6f 66 0a 53 51 4c 69 74 65 20 72 65 67 61  d of.SQLite rega
32fc0 72 64 6c 65 73 73 20 6f 66 20 5b 63 6f 6d 70 69  rdless of [compi
32fd0 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 5d  le-time options]
32fe0 2e 20 20 0a 4d 6f 73 74 20 72 65 61 73 6f 6e 61  .  .Most reasona
32ff0 62 6c 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ble configuratio
33000 6e 73 20 75 73 65 20 6d 6f 73 74 20 6f 72 20 61  ns use most or a
33010 6c 6c 20 6f 66 20 74 68 65 73 65 20 6b 65 79 77  ll of these keyw
33020 6f 72 64 73 2c 0a 62 75 74 20 73 6f 6d 65 20 6b  ords,.but some k
33030 65 79 77 6f 72 64 73 20 6d 61 79 20 62 65 20 6f  eywords may be o
33040 6d 69 74 74 65 64 20 77 68 65 6e 20 53 51 4c 20  mitted when SQL 
33050 6c 61 6e 67 75 61 67 65 20 66 65 61 74 75 72 65  language feature
33060 73 20 61 72 65 0a 64 69 73 61 62 6c 65 64 2e 0a  s are.disabled..
33070 5e 28 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20  ^(Regardless of 
33080 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  the compile-time
33090 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20   configuration, 
330a0 61 6e 79 20 69 64 65 6e 74 69 66 69 65 72 20 74  any identifier t
330b0 68 61 74 20 69 73 20 6e 6f 74 20 6f 6e 0a 74 68  hat is not on.th
330c0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c 74 63 6c  e following <tcl
330d0 3e 68 64 5f 70 75 74 73 20 5b 6c 6c 65 6e 67 74  >hd_puts [llengt
330e0 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74 5d  h $keyword_list]
330f0 3c 2f 74 63 6c 3e 20 65 6c 65 6d 65 6e 74 0a 6c  </tcl> element.l
33100 69 73 74 20 69 73 20 6e 6f 74 20 61 20 6b 65 79  ist is not a key
33110 77 6f 72 64 20 74 6f 20 74 68 65 20 53 51 4c 20  word to the SQL 
33120 70 61 72 73 65 72 20 69 6e 20 53 51 4c 69 74 65  parser in SQLite
33130 3a 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 73 65  :.</p>..<tcl>.se
33140 74 20 6c 78 20 7b 7d 0a 66 6f 72 65 61 63 68 20  t lx {}.foreach 
33150 77 6f 72 64 20 24 6b 65 79 77 6f 72 64 5f 6c 69  word $keyword_li
33160 73 74 20 7b 0a 20 20 6c 61 70 70 65 6e 64 20 6c  st {.  lappend l
33170 78 20 5b 6c 69 73 74 20 7b 7d 20 24 77 6f 72 64  x [list {} $word
33180 20 30 5d 0a 7d 0a 68 64 5f 6c 69 73 74 5f 6f 66   0].}.hd_list_of
33190 5f 6c 69 6e 6b 73 20 7b 7d 20 32 30 30 20 24 6c  _links {} 200 $l
331a0 78 0a 3c 2f 74 63 6c 3e 0a 3c 62 6c 6f 63 6b 71  x.</tcl>.<blockq
331b0 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 77 69 64  uote>.<table wid
331c0 74 68 3d 22 31 30 30 25 22 3e 3c 74 72 3e 0a 3c  th="100%"><tr>.<
331d0 74 64 20 61 6c 69 67 6e 3d 22 6c 65 66 74 22 20  td align="left" 
331e0 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 77 69 64  valign="top" wid
331f0 74 68 3d 22 32 30 25 22 3e 0a 3c 74 63 6c 3e 0a  th="20%">.<tcl>.