Documentation Source Text

Hex Artifact Content
Login

Artifact 77336198ad0bfa82c62f1b82cadffa00d2dcf555:


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 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
23c00 70 72 65 73 73 69 6f 6e 7d 20 7b 72 65 63 75 72  pression} {recur
23c10 73 69 76 65 20 71 75 65 72 79 7d 0a 3c 2f 74 63  sive query}.</tc
23c20 6c 3e 0a 3c 68 33 3e 52 65 63 75 72 73 69 76 65  l>.<h3>Recursive
23c30 20 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20 45 78   Common Table Ex
23c40 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a  pressions</h3>..
23c50 3c 70 3e 41 20 72 65 63 75 72 73 69 76 65 20 63  <p>A recursive c
23c60 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
23c70 65 73 73 69 6f 6e 20 63 61 6e 20 62 65 20 75 73  ession can be us
23c80 65 64 20 74 6f 20 77 72 69 74 65 20 61 20 71 75  ed to write a qu
23c90 65 72 79 20 74 68 61 74 0a 77 61 6c 6b 73 20 61  ery that.walks a
23ca0 20 74 72 65 65 20 6f 72 20 67 72 61 70 68 2e 20   tree or graph. 
23cb0 20 41 20 72 65 63 75 72 73 69 76 65 20 63 6f 6d   A recursive com
23cc0 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
23cd0 73 69 6f 6e 20 68 61 73 20 74 68 65 20 73 61 6d  sion has the sam
23ce0 65 0a 62 61 73 69 63 20 73 79 6e 74 61 78 20 61  e.basic syntax a
23cf0 73 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f  s an ordinary co
23d00 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
23d10 73 73 69 6f 6e 2c 20 62 75 74 20 77 69 74 68 20  ssion, but with 
23d20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 61 64  the following.ad
23d30 64 69 74 69 6f 6e 61 6c 20 66 65 61 74 75 72 65  ditional feature
23d40 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 54 68  s:..<ol>.<li> Th
23d50 65 20 22 5b 73 65 6c 65 63 74 2d 73 74 6d 74 5d  e "[select-stmt]
23d60 22 0a 20 20 20 20 20 6d 75 73 74 20 62 65 20 61  ".     must be a
23d70 20 5b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63   [compound selec
23d80 74 5d 20 77 68 65 72 65 20 74 68 65 20 72 69 67  t] where the rig
23d90 68 74 2d 6d 6f 73 74 20 5b 63 6f 6d 70 6f 75 6e  ht-most [compoun
23da0 64 2d 6f 70 65 72 61 74 6f 72 5d 20 69 73 0a 20  d-operator] is. 
23db0 20 20 20 20 65 69 74 68 65 72 20 55 4e 49 4f 4e      either UNION
23dc0 20 6f 72 20 55 4e 49 4f 4e 20 41 4c 4c 2e 0a 3c   or UNION ALL..<
23dd0 6c 69 3e 20 54 68 65 20 74 61 62 6c 65 20 6e 61  li> The table na
23de0 6d 65 64 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d  med on the left-
23df0 68 61 6e 64 20 73 69 64 65 20 6f 66 20 74 68 65  hand side of the
23e00 20 41 53 20 6b 65 79 77 6f 72 64 20 6d 75 73 74   AS keyword must
23e10 20 61 70 70 65 61 72 0a 20 20 20 20 20 65 78 61   appear.     exa
23e20 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74 68 65  ctly once in the
23e30 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20   FROM clause of 
23e40 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 53  the right-most S
23e50 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a  ELECT statement.
23e60 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6d 70       of the comp
23e70 6f 75 6e 64 20 73 65 6c 65 63 74 2c 20 61 6e 64  ound select, and
23e80 20 6e 6f 77 68 65 72 65 20 65 6c 73 65 2e 0a 3c   nowhere else..<
23e90 2f 6f 6c 3e 0a 0a 3c 70 3e 54 6f 20 70 75 74 20  /ol>..<p>To put 
23ea0 69 74 20 61 6e 6f 74 68 65 72 20 77 61 79 2c 20  it another way, 
23eb0 61 20 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d  a recursive comm
23ec0 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
23ed0 69 6f 6e 20 6d 75 73 74 0a 6c 6f 6f 6b 20 6c 69  ion must.look li
23ee0 6b 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ke the following
23ef0 3a 0a 0a 3c 74 63 6c 3e 52 65 63 75 72 73 69 76  :..<tcl>Recursiv
23f00 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72  eBubbleDiagram r
23f10 65 63 75 72 73 69 76 65 2d 63 74 65 3c 2f 74 63  ecursive-cte</tc
23f20 6c 3e 0a 0a 3c 70 3e 43 61 6c 6c 20 74 68 65 20  l>..<p>Call the 
23f30 74 61 62 6c 65 20 6e 61 6d 65 64 20 62 79 20 74  table named by t
23f40 68 65 20 5b 63 74 65 2d 74 61 62 6c 65 2d 6e 61  he [cte-table-na
23f50 6d 65 5d 20 69 6e 20 61 20 72 65 63 75 72 73 69  me] in a recursi
23f60 76 65 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  ve.common table 
23f70 65 78 70 72 65 73 73 69 6f 6e 20 74 68 65 20 22  expression the "
23f80 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 22  recursive table"
23f90 2e 0a 49 6e 20 74 68 65 20 5b 72 65 63 75 72 73  ..In the [recurs
23fa0 69 76 65 2d 63 74 65 5d 20 62 75 62 62 6c 65 20  ive-cte] bubble 
23fb0 64 69 61 67 72 61 6d 20 61 62 6f 76 65 2c 20 74  diagram above, t
23fc0 68 65 20 72 65 63 75 72 73 69 76 65 0a 74 61 62  he recursive.tab
23fd0 6c 65 20 6d 75 73 74 20 61 70 70 65 61 72 20 65  le must appear e
23fe0 78 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74  xactly once in t
23ff0 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f  he FROM clause o
24000 66 20 74 68 65 20 0a 3c 79 79 74 65 72 6d 3e 72  f the .<yyterm>r
24010 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 3c  ecursive-select<
24020 2f 79 79 74 65 72 6d 3e 0a 61 6e 64 20 6d 75 73  /yyterm>.and mus
24030 74 20 6e 6f 74 20 61 70 70 65 61 72 20 61 6e 79  t not appear any
24040 77 68 65 72 65 20 65 6c 73 65 20 69 6e 20 65 69  where else in ei
24050 74 68 65 72 20 74 68 65 0a 3c 79 79 74 65 72 6d  ther the.<yyterm
24060 3e 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 3c  >initial-select<
24070 2f 79 79 74 65 72 6d 3e 20 6f 72 20 74 68 65 0a  /yyterm> or the.
24080 3c 79 79 74 65 72 6d 3e 72 65 63 75 72 73 69 76  <yyterm>recursiv
24090 65 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d  e-select</yyterm
240a0 3e 2c 20 69 6e 63 6c 75 64 69 6e 67 20 73 75 62  >, including sub
240b0 71 75 65 72 69 65 73 2e 0a 54 68 65 20 3c 79 79  queries..The <yy
240c0 74 65 72 6d 3e 69 6e 69 74 69 61 6c 2d 73 65 6c  term>initial-sel
240d0 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20 6d 61 79  ect</yyterm> may
240e0 20 62 65 0a 61 20 5b 63 6f 6d 70 6f 75 6e 64 20   be.a [compound 
240f0 73 65 6c 65 63 74 5d 2c 20 62 75 74 20 69 74 20  select], but it 
24100 6d 61 79 20 6e 6f 74 20 69 6e 63 6c 75 64 65 20  may not include 
24110 61 6e 20 4f 52 44 45 52 20 42 59 2c 20 4c 49 4d  an ORDER BY, LIM
24120 49 54 2c 20 6f 72 20 4f 46 46 53 45 54 2e 0a 54  IT, or OFFSET..T
24130 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c  he recursive-sel
24140 65 63 74 20 6d 75 73 74 20 62 65 20 61 20 73 69  ect must be a si
24150 6d 70 6c 65 20 73 65 6c 65 63 74 2c 20 6e 6f 74  mple select, not
24160 20 61 20 63 6f 6d 70 6f 75 6e 64 2e 20 20 54 68   a compound.  Th
24170 65 0a 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65  e.recursive-sele
24180 63 74 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ct is allowed to
24190 20 69 6e 63 6c 75 64 65 20 61 6e 20 4f 52 44 45   include an ORDE
241a0 52 20 42 59 2c 20 4c 49 4d 49 54 2c 20 61 6e 64  R BY, LIMIT, and
241b0 2f 6f 72 20 4f 46 46 53 45 54 2e 0a 0a 3c 70 3e  /or OFFSET...<p>
241c0 54 68 65 20 62 61 73 69 63 20 61 6c 67 6f 72 69  The basic algori
241d0 74 68 6d 20 66 6f 72 20 63 6f 6d 70 75 74 69 6e  thm for computin
241e0 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  g the content of
241f0 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74   the recursive t
24200 61 62 6c 65 0a 69 73 20 61 73 20 66 6f 6c 6c 6f  able.is as follo
24210 77 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 52  ws:..<ol>.<li> R
24220 75 6e 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 69  un the <yyterm>i
24230 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 3c 2f 79  nitial-select</y
24240 79 74 65 72 6d 3e 20 61 6e 64 20 61 64 64 20 74  yterm> and add t
24250 68 65 20 72 65 73 75 6c 74 73 20 74 6f 20 61 20  he results to a 
24260 71 75 65 75 65 2e 0a 3c 6c 69 3e 20 57 68 69 6c  queue..<li> Whil
24270 65 20 74 68 65 20 71 75 65 75 65 20 69 73 20 6e  e the queue is n
24280 6f 74 20 65 6d 70 74 79 3a 0a 3c 6f 6c 20 74 79  ot empty:.<ol ty
24290 70 65 3d 22 61 22 3e 0a 3c 6c 69 3e 20 45 78 74  pe="a">.<li> Ext
242a0 72 61 63 74 20 61 20 73 69 6e 67 6c 65 20 72 6f  ract a single ro
242b0 77 20 66 72 6f 6d 20 74 68 65 20 71 75 65 75 65  w from the queue
242c0 2e 0a 3c 6c 69 3e 20 49 6e 73 65 72 74 20 74 68  ..<li> Insert th
242d0 61 74 20 73 69 6e 67 6c 65 20 72 6f 77 20 69 6e  at single row in
242e0 74 6f 20 74 68 65 20 72 65 63 75 72 73 69 76 65  to the recursive
242f0 20 74 61 62 6c 65 0a 3c 6c 69 3e 20 50 72 65 74   table.<li> Pret
24300 65 6e 64 20 74 68 61 74 20 74 68 65 20 73 69 6e  end that the sin
24310 67 6c 65 20 72 6f 77 20 6a 75 73 74 20 65 78 74  gle row just ext
24320 72 61 63 74 65 64 20 69 73 20 74 68 65 20 6f 6e  racted is the on
24330 6c 79 0a 20 20 20 20 20 72 6f 77 20 69 6e 20 74  ly.     row in t
24340 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62  he recursive tab
24350 6c 65 20 61 6e 64 20 72 75 6e 20 74 68 65 20 72  le and run the r
24360 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c  ecursive-select,
24370 0a 20 20 20 20 20 61 64 64 69 6e 67 20 61 6c 6c  .     adding all
24380 20 72 65 73 75 6c 74 73 20 74 6f 20 74 68 65 20   results to the 
24390 71 75 65 75 65 2e 0a 3c 2f 6f 6c 3e 0a 3c 2f 6f  queue..</ol>.</o
243a0 6c 3e 0a 0a 3c 70 3e 54 68 65 20 62 61 73 69 63  l>..<p>The basic
243b0 20 70 72 6f 63 65 64 75 72 65 20 61 62 6f 76 65   procedure above
243c0 20 6d 61 79 20 6d 6f 64 69 66 69 65 64 20 62 79   may modified by
243d0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   the following a
243e0 64 64 69 74 69 6f 6e 61 6c 20 72 75 6c 65 73 3a  dditional rules:
243f0 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20  ..<ul>.<li><p>. 
24400 20 49 66 20 61 20 55 4e 49 4f 4e 20 6f 70 65 72   If a UNION oper
24410 61 74 6f 72 20 63 6f 6e 6e 65 63 74 73 20 74 68  ator connects th
24420 65 20 3c 79 79 74 65 72 6d 3e 69 6e 69 74 69 61  e <yyterm>initia
24430 6c 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d  l-select</yyterm
24440 3e 20 77 69 74 68 20 74 68 65 0a 20 20 3c 79 79  > with the.  <yy
24450 74 65 72 6d 3e 72 65 63 75 72 73 69 76 65 2d 73  term>recursive-s
24460 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 2c 20  elect</yyterm>, 
24470 74 68 65 6e 20 6f 6e 6c 79 20 61 64 64 20 72 6f  then only add ro
24480 77 73 20 74 6f 20 74 68 65 20 71 75 65 75 65 20  ws to the queue 
24490 69 66 20 0a 20 20 6e 6f 20 69 64 65 6e 74 69 63  if .  no identic
244a0 61 6c 20 72 6f 77 20 68 61 73 0a 20 20 62 65 65  al row has.  bee
244b0 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 61 64 64  n previously add
244c0 65 64 20 74 6f 20 74 68 65 20 71 75 65 75 65 2e  ed to the queue.
244d0 20 20 52 65 70 65 61 74 65 64 20 72 6f 77 73 20    Repeated rows 
244e0 61 72 65 20 64 69 73 63 61 72 64 65 64 20 62 65  are discarded be
244f0 66 6f 72 65 20 62 65 69 6e 67 0a 20 20 61 64 64  fore being.  add
24500 65 64 20 74 6f 20 74 68 65 20 71 75 65 75 65 20  ed to the queue 
24510 65 76 65 6e 20 69 66 20 74 68 65 20 72 65 70 65  even if the repe
24520 61 74 65 64 20 72 6f 77 73 20 68 61 76 65 20 61  ated rows have a
24530 6c 72 65 61 64 79 20 62 65 65 6e 20 65 78 74 72  lready been extr
24540 61 63 74 65 64 0a 20 20 66 72 6f 6d 20 74 68 65  acted.  from the
24550 20 71 75 65 75 65 20 62 79 20 74 68 65 20 72 65   queue by the re
24560 63 75 72 73 69 6f 6e 20 73 74 65 70 2e 20 20 49  cursion step.  I
24570 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69  f the operator i
24580 73 20 55 4e 49 4f 4e 20 41 4c 4c 2c 0a 20 20 74  s UNION ALL,.  t
24590 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 67 65 6e  hen all rows gen
245a0 65 72 61 74 65 64 20 62 79 20 62 6f 74 68 20 74  erated by both t
245b0 68 65 20 3c 79 79 74 65 72 6d 3e 69 6e 69 74 69  he <yyterm>initi
245c0 61 6c 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72  al-select</yyter
245d0 6d 3e 20 61 6e 64 20 74 68 65 0a 20 20 3c 79 79  m> and the.  <yy
245e0 74 65 72 6d 3e 72 65 63 75 72 73 69 76 65 2d 73  term>recursive-s
245f0 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20 61  elect</yyterm> a
24600 72 65 20 61 6c 77 61 79 73 20 61 64 64 65 64 20  re always added 
24610 74 6f 20 74 68 65 20 71 75 65 75 65 20 65 76 65  to the queue eve
24620 6e 20 69 66 0a 20 20 74 68 65 79 20 61 72 65 20  n if.  they are 
24630 72 65 70 65 61 74 73 2e 0a 20 20 57 68 65 6e 20  repeats..  When 
24640 64 65 74 65 72 6d 69 6e 69 6e 67 20 69 66 20 61  determining if a
24650 20 72 6f 77 20 69 73 20 72 65 70 65 61 74 65 64   row is repeated
24660 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 63 6f  , NULL values co
24670 6d 70 61 72 65 0a 20 20 65 71 75 61 6c 20 74 6f  mpare.  equal to
24680 20 6f 6e 65 20 61 6e 6f 74 68 65 72 20 61 6e 64   one another and
24690 20 6e 6f 74 20 65 71 75 61 6c 20 74 6f 20 61 6e   not equal to an
246a0 79 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 0a 3c  y other value..<
246b0 6c 69 3e 3c 70 3e 0a 20 20 54 68 65 20 4c 49 4d  li><p>.  The LIM
246c0 49 54 20 63 6c 61 75 73 65 2c 20 69 66 20 70 72  IT clause, if pr
246d0 65 73 65 6e 74 2c 20 64 65 74 65 72 6d 69 6e 65  esent, determine
246e0 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  s the maximum nu
246f0 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61  mber of rows tha
24700 74 0a 20 20 77 69 6c 6c 20 65 76 65 72 20 62 65  t.  will ever be
24710 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 72 65   added to the re
24720 63 75 72 73 69 76 65 20 74 61 62 6c 65 20 69 6e  cursive table in
24730 20 73 74 65 70 20 32 62 2e 0a 20 20 4f 6e 63 65   step 2b..  Once
24740 20 74 68 65 20 6c 69 6d 69 74 20 69 73 20 72 65   the limit is re
24750 61 63 68 65 64 2c 20 74 68 65 20 72 65 63 75 72  ached, the recur
24760 73 69 6f 6e 20 73 74 6f 70 73 2e 0a 20 20 41 20  sion stops..  A 
24770 6c 69 6d 69 74 20 6f 66 20 7a 65 72 6f 20 6d 65  limit of zero me
24780 61 6e 73 20 74 68 61 74 20 6e 6f 20 72 6f 77 73  ans that no rows
24790 20 61 72 65 20 65 76 65 72 20 61 64 64 65 64 20   are ever added 
247a0 74 6f 20 74 68 65 0a 20 20 72 65 63 75 72 73 69  to the.  recursi
247b0 76 65 20 74 61 62 6c 65 2c 20 61 6e 64 20 61 20  ve table, and a 
247c0 6e 65 67 61 74 69 76 65 20 6c 69 6d 69 74 20 6d  negative limit m
247d0 65 61 6e 73 20 61 6e 20 75 6e 6c 69 6d 69 74 65  eans an unlimite
247e0 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  d number of rows
247f0 0a 20 20 6d 61 79 20 62 65 20 61 64 64 65 64 20  .  may be added 
24800 74 6f 20 74 68 65 20 72 65 63 75 72 73 69 76 65  to the recursive
24810 20 74 61 62 6c 65 2e 0a 3c 6c 69 3e 3c 70 3e 0a   table..<li><p>.
24820 20 20 54 68 65 20 4f 46 46 53 45 54 20 63 6c 61    The OFFSET cla
24830 75 73 65 2c 20 69 66 20 69 74 20 69 73 20 70 72  use, if it is pr
24840 65 73 65 6e 74 20 61 6e 64 20 68 61 73 20 61 20  esent and has a 
24850 70 6f 73 69 74 69 76 65 20 76 61 6c 75 65 20 4e  positive value N
24860 2c 20 70 72 65 76 65 6e 74 73 20 74 68 65 0a 20  , prevents the. 
24870 20 66 69 72 73 74 20 4e 20 72 6f 77 73 20 66 72   first N rows fr
24880 6f 6d 20 62 65 69 6e 67 20 61 64 64 65 64 20 74  om being added t
24890 6f 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  o the recursive 
248a0 74 61 62 6c 65 2e 0a 20 20 54 68 65 20 66 69 72  table..  The fir
248b0 73 74 20 4e 20 72 6f 77 73 20 61 72 65 20 73 74  st N rows are st
248c0 69 6c 6c 20 70 72 6f 63 65 73 73 65 64 0a 20 20  ill processed.  
248d0 62 79 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 72  by the <yyterm>r
248e0 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 3c  ecursive-select<
248f0 2f 79 79 74 65 72 6d 3e 20 26 6d 64 61 73 68 3b  /yyterm> &mdash;
24900 20 74 68 65 79 0a 20 20 6a 75 73 74 20 61 72 65   they.  just are
24910 20 6e 6f 74 20 61 64 64 65 64 20 74 6f 20 74 68   not added to th
24920 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  e recursive tabl
24930 65 2e 20 20 52 6f 77 73 20 61 72 65 20 6e 6f 74  e.  Rows are not
24940 20 63 6f 75 6e 74 65 64 20 74 6f 77 61 72 64 0a   counted toward.
24950 20 20 66 75 6c 66 69 6c 6c 69 6e 67 20 74 68 65    fulfilling the
24960 20 4c 49 4d 49 54 20 75 6e 74 69 6c 20 61 6c 6c   LIMIT until all
24970 20 4f 46 46 53 45 54 20 72 6f 77 73 20 68 61 76   OFFSET rows hav
24980 65 20 62 65 65 6e 20 73 6b 69 70 70 65 64 2e 0a  e been skipped..
24990 3c 6c 69 3e 3c 70 3e 0a 20 20 49 66 20 61 6e 20  <li><p>.  If an 
249a0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
249b0 69 73 20 70 72 65 73 65 6e 74 2c 20 69 74 20 64  is present, it d
249c0 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 6f 72  etermines the or
249d0 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77  der in which row
249e0 73 0a 20 20 61 72 65 20 65 78 74 72 61 63 74 65  s.  are extracte
249f0 64 20 66 72 6f 6d 20 74 68 65 20 71 75 65 75 65  d from the queue
24a00 20 69 6e 20 73 74 65 70 20 32 61 2e 20 20 49 66   in step 2a.  If
24a10 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 52 44   there is no ORD
24a20 45 52 20 42 59 20 63 6c 61 75 73 65 2c 0a 20 20  ER BY clause,.  
24a30 74 68 65 6e 20 74 68 65 20 6f 72 64 65 72 20 69  then the order i
24a40 6e 20 77 68 69 63 68 20 72 6f 77 73 20 61 72 65  n which rows are
24a50 20 65 78 74 72 61 63 74 65 64 20 69 73 20 75 6e   extracted is un
24a60 64 65 66 69 6e 65 64 2e 20 20 28 49 6e 20 74 68  defined.  (In th
24a70 65 20 63 75 72 72 65 6e 74 0a 20 20 69 6d 70 6c  e current.  impl
24a80 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20  ementation, the 
24a90 71 75 65 75 65 20 62 65 63 6f 6d 65 73 20 61 20  queue becomes a 
24aa0 46 49 46 4f 20 69 66 20 74 68 65 20 4f 52 44 45  FIFO if the ORDE
24ab0 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 6f  R BY clause is o
24ac0 6d 69 74 74 65 64 2c 0a 20 20 62 75 74 20 61 70  mitted,.  but ap
24ad0 70 6c 69 63 61 74 69 6f 6e 73 20 73 68 6f 75 6c  plications shoul
24ae0 64 20 6e 6f 74 20 64 65 70 65 6e 64 20 6f 6e 20  d not depend on 
24af0 74 68 61 74 20 66 61 63 74 20 73 69 6e 63 65 20  that fact since 
24b00 69 74 20 6d 69 67 68 74 20 63 68 61 6e 67 65 2e  it might change.
24b10 29 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64  ).</ul>..<tcl>hd
24b20 5f 66 72 61 67 6d 65 6e 74 20 72 63 65 78 31 3c  _fragment rcex1<
24b30 2f 74 63 6c 3e 0a 3c 68 34 3e 52 65 63 75 72 73  /tcl>.<h4>Recurs
24b40 69 76 65 20 51 75 65 72 79 20 45 78 61 6d 70 6c  ive Query Exampl
24b50 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20  es</h4>..<p>The 
24b60 66 6f 6c 6c 6f 77 69 6e 67 20 71 75 65 72 79 20  following query 
24b70 72 65 74 75 72 6e 73 20 61 6c 6c 20 69 6e 74 65  returns all inte
24b80 67 65 72 73 20 62 65 74 77 65 65 6e 20 31 20 61  gers between 1 a
24b90 6e 64 20 31 30 30 30 30 30 30 3a 0a 0a 3c 62 6c  nd 1000000:..<bl
24ba0 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57  ockquote><pre>.W
24bb0 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20  ITH RECURSIVE.  
24bc0 63 6e 74 28 78 29 20 41 53 20 28 56 41 4c 55 45  cnt(x) AS (VALUE
24bd0 53 28 31 29 20 55 4e 49 4f 4e 20 41 4c 4c 20 53  S(1) UNION ALL S
24be0 45 4c 45 43 54 20 78 2b 31 20 46 52 4f 4d 20 63  ELECT x+1 FROM c
24bf0 6e 74 20 57 48 45 52 45 20 78 3c 31 30 30 30 30  nt WHERE x<10000
24c00 30 30 29 0a 53 45 4c 45 43 54 20 78 20 46 52 4f  00).SELECT x FRO
24c10 4d 20 63 6e 74 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  M cnt;.</pre></b
24c20 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43  lockquote>..<p>C
24c30 6f 6e 73 69 64 65 72 20 68 6f 77 20 74 68 69 73  onsider how this
24c40 20 71 75 65 72 79 20 77 6f 72 6b 73 2e 20 20 54   query works.  T
24c50 68 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63  he initial-selec
24c60 74 0a 72 75 6e 73 20 66 69 72 73 74 20 61 6e 64  t.runs first and
24c70 20 72 65 74 75 72 6e 73 20 61 20 73 69 6e 67 6c   returns a singl
24c80 65 20 72 6f 77 0a 77 69 74 68 20 61 20 73 69 6e  e row.with a sin
24c90 67 6c 65 20 63 6f 6c 75 6d 6e 20 22 31 22 2e 20  gle column "1". 
24ca0 20 54 68 69 73 20 6f 6e 65 20 72 6f 77 20 69 73   This one row is
24cb0 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 71 75   added to the qu
24cc0 65 75 65 2e 20 20 49 6e 0a 73 74 65 70 20 32 61  eue.  In.step 2a
24cd0 2c 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69  , that one row i
24ce0 73 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d  s extracted from
24cf0 20 74 68 65 20 71 75 65 75 65 20 61 6e 64 20 61   the queue and a
24d00 64 64 65 64 20 74 6f 20 22 63 6e 74 22 2e 0a 54  dded to "cnt"..T
24d10 68 65 6e 20 74 68 65 20 72 65 63 75 72 73 69 76  hen the recursiv
24d20 65 2d 73 65 6c 65 63 74 20 69 73 20 72 75 6e 20  e-select is run 
24d30 69 6e 20 61 63 63 6f 72 64 61 6e 63 65 20 77 69  in accordance wi
24d40 74 68 20 73 74 65 70 20 32 63 20 67 65 6e 65 72  th step 2c gener
24d50 61 74 69 6e 67 0a 61 20 73 69 6e 67 6c 65 20 6e  ating.a single n
24d60 65 77 20 72 6f 77 20 77 69 74 68 20 76 61 6c 75  ew row with valu
24d70 65 20 22 32 22 20 74 6f 20 61 64 64 20 74 6f 20  e "2" to add to 
24d80 74 68 65 20 71 75 65 75 65 2e 20 20 54 68 65 20  the queue.  The 
24d90 71 75 65 75 65 20 73 74 69 6c 6c 0a 68 61 73 20  queue still.has 
24da0 6f 6e 65 20 72 6f 77 2c 20 73 6f 20 73 74 65 70  one row, so step
24db0 20 32 20 72 65 70 65 61 74 73 2e 20 20 54 68 65   2 repeats.  The
24dc0 20 22 32 22 20 72 6f 77 20 69 73 20 65 78 74 72   "2" row is extr
24dd0 61 63 74 65 64 20 61 6e 64 20 61 64 64 65 64 20  acted and added 
24de0 74 6f 20 74 68 65 0a 72 65 63 75 72 73 69 76 65  to the.recursive
24df0 20 74 61 62 6c 65 20 62 79 20 73 74 65 70 73 20   table by steps 
24e00 32 61 20 61 6e 64 20 32 62 2e 20 20 54 68 65 6e  2a and 2b.  Then
24e10 20 74 68 65 20 72 6f 77 20 63 6f 6e 74 61 69 6e   the row contain
24e20 69 6e 67 20 32 20 69 73 20 75 73 65 64 20 0a 61  ing 2 is used .a
24e30 73 20 69 66 20 69 74 20 77 65 72 65 20 74 68 65  s if it were the
24e40 20 63 6f 6d 70 6c 65 74 65 20 63 6f 6e 74 65 6e   complete conten
24e50 74 20 6f 66 20 74 68 65 20 72 65 63 75 72 73 69  t of the recursi
24e60 76 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65  ve table and the
24e70 20 0a 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65   .recursive-sele
24e80 63 74 20 69 73 20 72 75 6e 20 61 67 61 69 6e 2c  ct is run again,
24e90 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61 20   resulting in a 
24ea0 72 6f 77 20 77 69 74 68 20 76 61 6c 75 65 20 22  row with value "
24eb0 33 22 20 62 65 69 6e 67 20 61 64 64 65 64 0a 74  3" being added.t
24ec0 6f 20 74 68 65 20 71 75 65 75 65 2e 20 20 54 68  o the queue.  Th
24ed0 69 73 20 72 65 70 65 61 74 73 20 39 39 39 39 39  is repeats 99999
24ee0 39 20 74 69 6d 65 73 20 75 6e 74 69 6c 20 66 69  9 times until fi
24ef0 6e 61 6c 6c 79 20 61 74 20 73 74 65 70 20 32 61  nally at step 2a
24f00 20 74 68 65 0a 6f 6e 6c 79 20 76 61 6c 75 65 20   the.only value 
24f10 6f 6e 20 74 68 65 20 71 75 65 75 65 20 69 73 20  on the queue is 
24f20 61 20 72 6f 77 20 63 6f 6e 74 61 69 6e 69 6e 67  a row containing
24f30 20 31 30 30 30 30 30 30 2e 20 20 54 68 61 74 20   1000000.  That 
24f40 72 6f 77 20 69 73 0a 65 78 74 72 61 63 74 65 64  row is.extracted
24f50 20 61 6e 64 20 61 64 64 65 64 20 74 6f 20 74 68   and added to th
24f60 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  e recursive tabl
24f70 65 2e 20 20 42 75 74 20 74 68 69 73 20 74 69 6d  e.  But this tim
24f80 65 2c 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61  e, the.WHERE cla
24f90 75 73 65 20 63 61 75 73 65 73 20 74 68 65 20 72  use causes the r
24fa0 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20  ecursive-select 
24fb0 74 6f 20 72 65 74 75 72 6e 20 6e 6f 20 72 6f 77  to return no row
24fc0 73 2c 20 73 6f 20 74 68 65 0a 71 75 65 75 65 20  s, so the.queue 
24fd0 72 65 6d 61 69 6e 73 20 65 6d 70 74 79 20 61 6e  remains empty an
24fe0 64 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20  d the recursion 
24ff0 73 74 6f 70 73 2e 0a 0a 3c 70 3e 3c 62 3e 4f 70  stops...<p><b>Op
25000 74 69 6d 69 7a 61 74 69 6f 6e 20 6e 6f 74 65 3a  timization note:
25010 3c 2f 62 3e 0a 49 6e 20 74 68 65 20 64 69 73 63  </b>.In the disc
25020 75 73 73 69 6f 6e 20 61 62 6f 76 65 2c 20 73 74  ussion above, st
25030 61 74 65 6d 65 6e 74 73 20 6c 69 6b 65 20 22 69  atements like "i
25040 6e 73 65 72 74 20 74 68 65 20 72 6f 77 20 69 6e  nsert the row in
25050 74 6f 0a 74 68 65 20 72 65 63 75 72 73 69 76 65  to.the recursive
25060 20 74 61 62 6c 65 22 20 73 68 6f 75 6c 64 20 62   table" should b
25070 65 20 75 6e 64 65 72 73 74 6f 6f 64 20 63 6f 6e  e understood con
25080 63 65 70 74 75 61 6c 6c 79 2c 20 6e 6f 74 20 6c  ceptually, not l
25090 69 74 65 72 61 6c 6c 79 2e 0a 49 74 20 73 6f 75  iterally..It sou
250a0 6e 64 73 20 61 73 20 69 66 20 53 51 4c 69 74 65  nds as if SQLite
250b0 20 69 73 20 61 63 63 75 6d 75 6c 61 74 69 6e 67   is accumulating
250c0 20 61 20 68 75 67 65 20 74 61 62 6c 65 0a 63 6f   a huge table.co
250d0 6e 74 61 69 6e 69 6e 67 20 6f 6e 65 20 6d 69 6c  ntaining one mil
250e0 6c 69 6f 6e 20 72 6f 77 73 2c 20 74 68 65 6e 20  lion rows, then 
250f0 67 6f 69 6e 67 20 62 61 63 6b 20 61 6e 64 20 73  going back and s
25100 63 61 6e 6e 69 6e 67 20 74 68 61 74 20 74 61 62  canning that tab
25110 6c 65 0a 66 72 6f 6d 20 74 6f 70 20 74 6f 20 62  le.from top to b
25120 6f 74 74 6f 6d 20 74 6f 20 67 65 6e 65 72 61 74  ottom to generat
25130 65 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20 57  e the result.  W
25140 68 61 74 20 72 65 61 6c 6c 79 20 68 61 70 70 65  hat really happe
25150 6e 73 0a 69 73 20 74 68 61 74 20 74 68 65 20 71  ns.is that the q
25160 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 73  uery optimizer s
25170 65 65 73 20 74 68 61 74 20 76 61 6c 75 65 73 20  ees that values 
25180 69 6e 20 74 68 65 0a 22 63 6e 74 22 20 72 65 63  in the."cnt" rec
25190 75 72 73 69 76 65 20 74 61 62 6c 65 20 61 72 65  ursive table are
251a0 20 6f 6e 6c 79 20 75 73 65 64 20 6f 6e 63 65 2e   only used once.
251b0 20 20 53 6f 20 61 73 20 65 61 63 68 20 72 6f 77    So as each row
251c0 20 69 73 20 61 64 64 65 64 20 74 6f 0a 74 68 65   is added to.the
251d0 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65   recursive table
251e0 2c 20 74 68 61 74 20 72 6f 77 20 69 73 20 69 6d  , that row is im
251f0 6d 65 64 69 61 74 65 6c 79 20 72 65 74 75 72 6e  mediately return
25200 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f  ed as a result o
25210 66 20 74 68 65 20 6d 61 69 6e 0a 53 45 4c 45 43  f the main.SELEC
25220 54 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20  T statement and 
25230 74 68 65 6e 20 64 69 73 63 61 72 64 65 64 2e 20  then discarded. 
25240 20 53 51 4c 69 74 65 20 64 6f 65 73 20 3c 65 6d   SQLite does <em
25250 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 63 63 75 6d 75  >not</em> accumu
25260 6c 61 74 65 0a 61 20 74 65 6d 70 6f 72 61 72 79  late.a temporary
25270 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e   table containin
25280 67 20 61 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73  g a million rows
25290 2e 20 20 56 65 72 79 20 6c 69 74 74 6c 65 20 6d  .  Very little m
252a0 65 6d 6f 72 79 20 69 73 0a 6e 65 65 64 65 64 20  emory is.needed 
252b0 74 6f 20 72 75 6e 20 74 68 65 20 61 62 6f 76 65  to run the above
252c0 20 65 78 61 6d 70 6c 65 2e 20 20 48 6f 77 65 76   example.  Howev
252d0 65 72 2c 20 69 66 20 74 68 65 20 65 78 61 6d 70  er, if the examp
252e0 6c 65 20 68 61 64 20 75 73 65 64 0a 55 4e 49 4f  le had used.UNIO
252f0 4e 20 69 6e 73 74 65 61 64 20 6f 66 20 55 4e 49  N instead of UNI
25300 4f 4e 20 41 4c 4c 2c 20 74 68 65 6e 20 53 51 4c  ON ALL, then SQL
25310 69 74 65 20 77 6f 75 6c 64 20 68 61 76 65 20 68  ite would have h
25320 61 64 20 74 6f 20 6b 65 65 70 20 61 72 6f 75 6e  ad to keep aroun
25330 64 0a 61 6c 6c 20 70 72 65 76 69 6f 75 73 6c 79  d.all previously
25340 20 67 65 6e 65 72 61 74 65 64 20 63 6f 6e 74 65   generated conte
25350 6e 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63  nt in order to c
25360 68 65 63 6b 20 66 6f 72 20 64 75 70 6c 69 63 61  heck for duplica
25370 74 65 73 2e 0a 46 6f 72 20 74 68 69 73 20 72 65  tes..For this re
25380 61 73 6f 6e 2c 20 70 72 6f 67 72 61 6d 6d 65 72  ason, programmer
25390 73 20 73 68 6f 75 6c 64 20 73 74 72 69 76 65 20  s should strive 
253a0 74 6f 20 75 73 65 20 55 4e 49 4f 4e 20 41 4c 4c  to use UNION ALL
253b0 20 69 6e 73 74 65 61 64 0a 6f 66 20 55 4e 49 4f   instead.of UNIO
253c0 4e 20 77 68 65 6e 20 66 65 61 73 69 62 6c 65 2e  N when feasible.
253d0 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20 61 20 76  ..<p>Here is a v
253e0 61 72 69 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20  ariation on the 
253f0 70 72 65 76 69 6f 75 73 20 65 78 61 6d 70 6c 65  previous example
25400 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
25410 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53  pre>.WITH RECURS
25420 49 56 45 0a 20 20 63 6e 74 28 78 29 20 41 53 20  IVE.  cnt(x) AS 
25430 28 0a 20 20 20 20 20 53 45 4c 45 43 54 20 31 0a  (.     SELECT 1.
25440 20 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20       UNION ALL. 
25450 20 20 20 20 53 45 4c 45 43 54 20 78 2b 31 20 46      SELECT x+1 F
25460 52 4f 4d 20 63 6e 74 0a 20 20 20 20 20 20 4c 49  ROM cnt.      LI
25470 4d 49 54 20 31 30 30 30 30 30 30 0a 20 20 29 0a  MIT 1000000.  ).
25480 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 63 6e  SELECT x FROM cn
25490 74 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  t;.</pre></block
254a0 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 72 65  quote>..<p>There
254b0 20 61 72 65 20 74 77 6f 20 64 69 66 66 65 72 65   are two differe
254c0 6e 63 65 73 20 69 6e 20 74 68 69 73 20 76 61 72  nces in this var
254d0 69 61 74 69 6f 6e 2e 20 20 54 68 65 20 69 6e 69  iation.  The ini
254e0 74 69 61 6c 2d 73 65 6c 65 63 74 20 69 73 0a 22  tial-select is."
254f0 53 45 4c 45 43 54 20 31 22 20 69 6e 73 74 65 61  SELECT 1" instea
25500 64 20 6f 66 20 22 56 41 4c 55 45 53 28 31 29 22  d of "VALUES(1)"
25510 2e 20 20 42 75 74 20 74 68 6f 73 65 20 61 72 65  .  But those are
25520 20 6a 75 73 74 20 64 69 66 66 65 72 65 6e 74 0a   just different.
25530 73 79 6e 74 61 78 65 73 20 66 6f 72 20 73 61 79  syntaxes for say
25540 69 6e 67 20 65 78 61 63 74 6c 79 20 74 68 65 20  ing exactly the 
25550 73 61 6d 65 20 74 68 69 6e 67 2e 20 20 54 68 65  same thing.  The
25560 20 6f 74 68 65 72 20 63 68 61 6e 67 65 20 69 73   other change is
25570 20 74 68 61 74 20 74 68 65 0a 72 65 63 75 72 73   that the.recurs
25580 69 6f 6e 20 69 73 20 73 74 6f 70 70 65 64 20 62  ion is stopped b
25590 79 20 61 20 4c 49 4d 49 54 20 72 61 74 68 65 72  y a LIMIT rather
255a0 20 74 68 61 6e 20 61 20 57 48 45 52 45 20 63 6c   than a WHERE cl
255b0 61 75 73 65 2e 20 20 54 68 65 20 75 73 65 20 6f  ause.  The use o
255c0 66 0a 4c 49 4d 49 54 20 6d 65 61 6e 73 20 74 68  f.LIMIT means th
255d0 61 74 20 77 68 65 6e 20 74 68 65 20 6f 6e 65 2d  at when the one-
255e0 6d 69 6c 6c 69 6f 6e 74 68 20 72 6f 77 20 69 73  millionth row is
255f0 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 22 63   added to the "c
25600 6e 74 22 20 74 61 62 6c 65 0a 28 61 6e 64 20 72  nt" table.(and r
25610 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 6d  eturned by the m
25620 61 69 6e 20 53 45 4c 45 43 54 2c 20 74 68 61 6e  ain SELECT, than
25630 6b 73 20 74 6f 20 74 68 65 20 71 75 65 72 79 20  ks to the query 
25640 6f 70 74 69 6d 69 7a 65 72 29 0a 74 68 65 6e 20  optimizer).then 
25650 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 73 74  the recursion st
25660 6f 70 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ops immediately 
25670 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 68 6f  regardless of ho
25680 77 20 6d 61 6e 79 20 72 6f 77 73 20 6d 69 67 68  w many rows migh
25690 74 20 62 65 0a 6c 65 66 74 20 69 6e 20 74 68 65  t be.left in the
256a0 20 71 75 65 75 65 2e 20 20 4f 6e 20 6d 6f 72 65   queue.  On more
256b0 20 63 6f 6d 70 6c 65 78 20 71 75 65 72 69 65 73   complex queries
256c0 2c 20 69 74 20 63 61 6e 20 73 6f 6d 65 74 69 6d  , it can sometim
256d0 65 73 20 62 65 0a 64 69 66 66 69 63 75 6c 74 20  es be.difficult 
256e0 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74  to ensure that t
256f0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
25700 77 69 6c 6c 20 65 76 65 6e 74 75 61 6c 6c 79 20  will eventually 
25710 63 61 75 73 65 20 74 68 65 0a 71 75 65 75 65 20  cause the.queue 
25720 74 6f 20 64 72 61 69 6e 20 61 6e 64 20 74 68 65  to drain and the
25730 20 72 65 63 75 72 73 69 6f 6e 20 74 6f 20 74 65   recursion to te
25740 72 6d 69 6e 61 74 65 2e 20 20 42 75 74 20 74 68  rminate.  But th
25750 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 77  e LIMIT clause w
25760 69 6c 6c 0a 61 6c 77 61 79 73 20 73 74 6f 70 20  ill.always stop 
25770 74 68 65 20 72 65 63 75 72 73 69 6f 6e 2e 20 20  the recursion.  
25780 53 6f 20 69 74 20 69 73 20 67 6f 6f 64 20 70 72  So it is good pr
25790 61 63 74 69 63 65 20 74 6f 20 61 6c 77 61 79 73  actice to always
257a0 20 69 6e 63 6c 75 64 65 20 61 0a 4c 49 4d 49 54   include a.LIMIT
257b0 20 63 6c 61 75 73 65 20 61 73 20 61 20 73 61 66   clause as a saf
257c0 65 74 79 20 69 66 20 61 6e 20 75 70 70 65 72 20  ety if an upper 
257d0 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 73 69 7a  bound on the siz
257e0 65 20 6f 66 20 74 68 65 20 72 65 63 75 72 73 69  e of the recursi
257f0 6f 6e 20 0a 69 73 20 6b 6e 6f 77 6e 2e 0a 0a 3c  on .is known...<
25800 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
25810 72 63 65 78 32 3c 2f 74 63 6c 3e 0a 3c 68 34 3e  rcex2</tcl>.<h4>
25820 48 69 65 72 61 72 63 68 69 63 61 6c 20 51 75 65  Hierarchical Que
25830 72 79 20 45 78 61 6d 70 6c 65 73 3c 2f 68 34 3e  ry Examples</h4>
25840 0a 0a 3c 70 3e 43 6f 6e 73 69 64 65 72 20 61 20  ..<p>Consider a 
25850 74 61 62 6c 65 20 74 68 61 74 20 64 65 73 63 72  table that descr
25860 69 62 65 73 20 74 68 65 20 6d 65 6d 62 65 72 73  ibes the members
25870 20 6f 66 20 61 6e 20 6f 72 67 61 6e 69 7a 61 74   of an organizat
25880 69 6f 6e 20 61 73 0a 77 65 6c 6c 20 61 73 20 74  ion as.well as t
25890 68 65 20 63 68 61 69 6e 2d 6f 66 2d 63 6f 6d 6d  he chain-of-comm
258a0 61 6e 64 20 77 69 74 68 69 6e 20 74 68 61 74 20  and within that 
258b0 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 3a 0a 0a 3c  organization:..<
258c0 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
258d0 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72  .CREATE TABLE or
258e0 67 28 0a 20 20 6e 61 6d 65 20 54 45 58 54 20 50  g(.  name TEXT P
258f0 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 62 6f  RIMARY KEY,.  bo
25900 73 73 20 54 45 58 54 20 52 45 46 45 52 45 4e 43  ss TEXT REFERENC
25910 45 53 20 6f 72 67 2c 0a 20 20 68 65 69 67 68 74  ES org,.  height
25920 20 49 4e 54 2c 0a 20 20 2d 2d 20 6f 74 68 65 72   INT,.  -- other
25930 20 63 6f 6e 74 65 6e 74 20 6f 6d 69 74 74 65 64   content omitted
25940 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  .);.</pre></bloc
25950 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 45 76 65 72  kquote>..<p>Ever
25960 79 20 6d 65 6d 62 65 72 20 69 6e 20 74 68 65 20  y member in the 
25970 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20 68 61 73  organization has
25980 20 61 20 6e 61 6d 65 2c 20 61 6e 64 20 6d 6f 73   a name, and mos
25990 74 20 6d 65 6d 62 65 72 73 20 68 61 76 65 0a 61  t members have.a
259a0 20 73 69 6e 67 6c 65 20 62 6f 73 73 2e 20 20 28   single boss.  (
259b0 54 68 65 20 68 65 61 64 20 6f 66 20 74 68 65 20  The head of the 
259c0 77 68 6f 6c 65 20 6f 72 67 61 6e 69 7a 61 74 69  whole organizati
259d0 6f 6e 20 68 61 73 20 61 20 4e 55 4c 4c 0a 22 62  on has a NULL."b
259e0 6f 73 73 22 20 66 69 65 6c 64 2e 29 20 54 68 65  oss" field.) The
259f0 20 72 6f 77 73 20 6f 66 20 74 68 65 20 22 6f 72   rows of the "or
25a00 67 22 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20  g" table form a 
25a10 74 72 65 65 2e 0a 0a 3c 70 3e 48 65 72 65 20 69  tree...<p>Here i
25a20 73 20 61 20 71 75 65 72 79 20 74 68 61 74 20 63  s a query that c
25a30 6f 6d 70 75 74 65 73 20 74 68 65 20 61 76 65 72  omputes the aver
25a40 61 67 65 20 68 65 69 67 68 74 20 6f 76 65 72 20  age height over 
25a50 65 76 65 72 79 6f 6e 65 0a 69 6e 20 41 6c 69 63  everyone.in Alic
25a60 65 27 73 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e  e's organization
25a70 2c 20 69 6e 63 6c 75 64 69 6e 67 20 41 6c 69 63  , including Alic
25a80 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  e:..<blockquote>
25a90 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52  <pre>.WITH RECUR
25aa0 53 49 56 45 0a 20 20 77 6f 72 6b 73 5f 66 6f 72  SIVE.  works_for
25ab0 5f 61 6c 69 63 65 28 6e 29 20 41 53 20 28 0a 20  _alice(n) AS (. 
25ac0 20 20 20 56 41 4c 55 45 53 28 27 41 6c 69 63 65     VALUES('Alice
25ad0 27 29 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20  ').    UNION.   
25ae0 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f   SELECT name FRO
25af0 4d 20 6f 72 67 2c 20 77 6f 72 6b 73 5f 66 6f 72  M org, works_for
25b00 5f 61 6c 69 63 65 0a 20 20 20 20 20 57 48 45 52  _alice.     WHER
25b10 45 20 6f 72 67 2e 62 6f 73 73 3d 77 6f 72 6b 73  E org.boss=works
25b20 5f 66 6f 72 5f 61 6c 69 63 65 2e 6e 0a 20 20 29  _for_alice.n.  )
25b30 0a 53 45 4c 45 43 54 20 61 76 67 28 68 65 69 67  .SELECT avg(heig
25b40 68 74 29 20 46 52 4f 4d 20 6f 72 67 0a 20 57 48  ht) FROM org. WH
25b50 45 52 45 20 6f 72 67 2e 6e 61 6d 65 20 49 4e 20  ERE org.name IN 
25b60 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 3b  works_for_alice;
25b70 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
25b80 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6e 65 78  ote>..<p>The nex
25b90 74 20 65 78 61 6d 70 6c 65 20 75 73 65 73 20 74  t example uses t
25ba0 77 6f 20 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  wo .common table
25bb0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20   expressions in 
25bc0 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c  a single WITH cl
25bd0 61 75 73 65 2e 20 20 0a 54 68 65 20 66 6f 6c 6c  ause.  .The foll
25be0 6f 77 69 6e 67 20 74 61 62 6c 65 20 72 65 63 6f  owing table reco
25bf0 72 64 73 20 61 20 66 61 6d 69 6c 79 20 74 72 65  rds a family tre
25c00 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  e:..<blockquote>
25c10 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42  <pre>.CREATE TAB
25c20 4c 45 20 66 61 6d 69 6c 79 28 0a 20 20 6e 61 6d  LE family(.  nam
25c30 65 20 54 45 58 54 20 50 52 49 4d 41 52 59 20 4b  e TEXT PRIMARY K
25c40 45 59 2c 0a 20 20 6d 6f 6d 20 54 45 58 54 20 52  EY,.  mom TEXT R
25c50 45 46 45 52 45 4e 43 45 53 20 66 61 6d 69 6c 79  EFERENCES family
25c60 2c 0a 20 20 64 61 64 20 54 45 58 54 20 52 45 46  ,.  dad TEXT REF
25c70 45 52 45 4e 43 45 53 20 66 61 6d 69 6c 79 2c 0a  ERENCES family,.
25c80 20 20 62 6f 72 6e 20 44 41 54 45 54 49 4d 45 2c    born DATETIME,
25c90 0a 20 20 64 69 65 64 20 44 41 54 45 54 49 4d 45  .  died DATETIME
25ca0 2c 20 2d 2d 20 4e 55 4c 4c 20 69 66 20 73 74 69  , -- NULL if sti
25cb0 6c 6c 20 61 6c 69 76 65 0a 20 20 2d 2d 20 6f 74  ll alive.  -- ot
25cc0 68 65 72 20 63 6f 6e 74 65 6e 74 0a 29 3b 0a 3c  her content.);.<
25cd0 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
25ce0 65 3e 0a 0a 3c 70 3e 54 68 65 20 22 66 61 6d 69  e>..<p>The "fami
25cf0 6c 79 22 20 74 61 62 6c 65 20 69 73 20 73 69 6d  ly" table is sim
25d00 69 6c 61 72 20 74 6f 20 74 68 65 20 65 61 72 6c  ilar to the earl
25d10 69 65 72 20 22 6f 72 67 22 20 74 61 62 6c 65 20  ier "org" table 
25d20 65 78 63 65 70 74 20 74 68 61 74 20 0a 6e 6f 77  except that .now
25d30 20 74 68 65 72 65 20 61 72 65 20 74 77 6f 20 70   there are two p
25d40 61 72 65 6e 74 73 20 74 6f 20 65 61 63 68 20 6d  arents to each m
25d50 65 6d 62 65 72 2e 0a 57 65 20 77 61 6e 74 20 74  ember..We want t
25d60 6f 20 6b 6e 6f 77 20 61 6c 6c 20 6c 69 76 69 6e  o know all livin
25d70 67 20 61 6e 63 65 73 74 6f 72 73 20 6f 66 20 41  g ancestors of A
25d80 6c 69 63 65 2c 20 66 72 6f 6d 20 6f 6c 64 65 73  lice, from oldes
25d90 74 20 74 6f 20 79 6f 75 6e 67 65 73 74 2e 0a 41  t to youngest..A
25da0 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f  n ordinary commo
25db0 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
25dc0 6f 6e 2c 20 22 70 61 72 65 6e 74 5f 6f 66 22 2c  on, "parent_of",
25dd0 20 69 73 20 64 65 66 69 6e 65 64 20 66 69 72 73   is defined firs
25de0 74 2e 20 20 54 68 61 74 0a 6f 72 64 69 6e 61 72  t.  That.ordinar
25df0 79 20 43 54 45 20 69 73 20 61 20 76 69 65 77 20  y CTE is a view 
25e00 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64  that can be used
25e10 20 74 6f 20 66 69 6e 64 20 61 6c 6c 20 70 61 72   to find all par
25e20 65 6e 74 73 20 6f 66 20 61 6e 79 0a 69 6e 64 69  ents of any.indi
25e30 76 69 64 75 61 6c 2e 20 20 54 68 61 74 20 6f 72  vidual.  That or
25e40 64 69 6e 61 72 79 20 43 54 45 20 69 73 20 74 68  dinary CTE is th
25e50 65 6e 20 75 73 65 64 20 69 6e 20 74 68 65 20 22  en used in the "
25e60 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63  ancestor_of_alic
25e70 65 22 0a 72 65 63 75 72 73 69 76 65 20 43 54 45  e".recursive CTE
25e80 2e 20 20 54 68 65 20 72 65 63 75 72 73 69 76 65  .  The recursive
25e90 20 43 54 45 20 69 73 20 74 68 65 6e 20 75 73 65   CTE is then use
25ea0 64 20 69 6e 20 74 68 65 20 66 69 6e 61 6c 20 71  d in the final q
25eb0 75 65 72 79 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  uery:..<blockquo
25ec0 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45  te><pre>.WITH RE
25ed0 43 55 52 53 49 56 45 0a 20 20 70 61 72 65 6e 74  CURSIVE.  parent
25ee0 5f 6f 66 28 6e 61 6d 65 2c 20 70 61 72 65 6e 74  _of(name, parent
25ef0 29 20 41 53 0a 20 20 20 20 28 53 45 4c 45 43 54  ) AS.    (SELECT
25f00 20 6e 61 6d 65 2c 20 6d 6f 6d 20 46 52 4f 4d 20   name, mom FROM 
25f10 66 61 6d 69 6c 79 20 55 4e 49 4f 4e 20 53 45 4c  family UNION SEL
25f20 45 43 54 20 6e 61 6d 65 2c 20 64 61 64 20 46 52  ECT name, dad FR
25f30 4f 4d 20 66 61 6d 69 6c 79 29 2c 0a 20 20 61 6e  OM family),.  an
25f40 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 28  cestor_of_alice(
25f50 6e 61 6d 65 29 20 41 53 0a 20 20 20 20 28 53 45  name) AS.    (SE
25f60 4c 45 43 54 20 70 61 72 65 6e 74 20 46 52 4f 4d  LECT parent FROM
25f70 20 70 61 72 65 6e 74 5f 6f 66 20 57 48 45 52 45   parent_of WHERE
25f80 20 6e 61 6d 65 3d 27 41 6c 69 63 65 27 0a 20 20   name='Alice'.  
25f90 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20     UNION ALL.   
25fa0 20 20 53 45 4c 45 43 54 20 70 61 72 65 6e 74 20    SELECT parent 
25fb0 46 52 4f 4d 20 70 61 72 65 6e 74 5f 6f 66 20 4a  FROM parent_of J
25fc0 4f 49 4e 20 61 6e 63 65 73 74 6f 72 5f 6f 66 5f  OIN ancestor_of_
25fd0 61 6c 69 63 65 20 55 53 49 4e 47 28 6e 61 6d 65  alice USING(name
25fe0 29 29 0a 53 45 4c 45 43 54 20 66 61 6d 69 6c 79  )).SELECT family
25ff0 2e 6e 61 6d 65 20 46 52 4f 4d 20 61 6e 63 65 73  .name FROM ances
26000 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 2c 20 66 61  tor_of_alice, fa
26010 6d 69 6c 79 0a 20 57 48 45 52 45 20 61 6e 63 65  mily. WHERE ance
26020 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 2e 6e 61  stor_of_alice.na
26030 6d 65 3d 66 61 6d 69 6c 79 2e 6e 61 6d 65 0a 20  me=family.name. 
26040 20 20 41 4e 44 20 64 69 65 64 20 49 53 20 4e 55    AND died IS NU
26050 4c 4c 0a 20 4f 52 44 45 52 20 42 59 20 62 6f 72  LL. ORDER BY bor
26060 6e 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  n;.</pre></block
26070 71 75 6f 74 65 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  quote>..<tcl>hd_
26080 66 72 61 67 6d 65 6e 74 20 72 63 65 78 32 3c 2f  fragment rcex2</
26090 74 63 6c 3e 0a 3c 68 34 3e 51 75 65 72 69 65 73  tcl>.<h4>Queries
260a0 20 41 67 61 69 6e 73 74 20 41 20 47 72 61 70 68   Against A Graph
260b0 3c 2f 68 34 3e 0a 0a 3c 70 3e 41 20 76 65 72 73  </h4>..<p>A vers
260c0 69 6f 6e 20 63 6f 6e 74 72 6f 6c 20 73 79 73 74  ion control syst
260d0 65 6d 20 28 56 43 53 29 20 77 69 6c 6c 20 74 79  em (VCS) will ty
260e0 70 69 63 61 6c 6c 79 20 73 74 6f 72 65 20 74 68  pically store th
260f0 65 20 65 76 6f 6c 76 69 6e 67 0a 76 65 72 73 69  e evolving.versi
26100 6f 6e 73 20 6f 66 20 61 20 70 72 6f 6a 65 63 74  ons of a project
26110 20 61 73 20 61 20 64 69 72 65 63 74 65 64 20 61   as a directed a
26120 63 79 63 6c 69 63 20 67 72 61 70 68 20 28 44 41  cyclic graph (DA
26130 47 29 2e 20 20 43 61 6c 6c 20 65 61 63 68 0a 76  G).  Call each.v
26140 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 70 72  ersion of the pr
26150 6f 6a 65 63 74 20 61 20 22 63 68 65 63 6b 69 6e  oject a "checkin
26160 22 2e 20 20 41 20 73 69 6e 67 6c 65 0a 63 68 65  ".  A single.che
26170 63 6b 69 6e 20 63 61 6e 20 68 61 76 65 20 7a 65  ckin can have ze
26180 72 6f 20 6f 72 20 6d 6f 72 65 20 70 61 72 65 6e  ro or more paren
26190 74 73 2e 20 20 4d 6f 73 74 20 63 68 65 63 6b 69  ts.  Most checki
261a0 6e 73 20 28 65 78 63 65 70 74 20 74 68 65 0a 66  ns (except the.f
261b0 69 72 73 74 29 20 68 61 76 65 20 61 20 73 69 6e  irst) have a sin
261c0 67 6c 65 20 70 61 72 65 6e 74 2c 20 62 75 74 20  gle parent, but 
261d0 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20 61  in the case of a
261e0 20 6d 65 72 67 65 2c 20 61 20 63 68 65 63 6b 69   merge, a checki
261f0 6e 0a 6d 69 67 68 74 20 68 61 76 65 20 74 77 6f  n.might have two
26200 20 6f 72 20 74 68 72 65 65 20 6f 72 20 6d 6f 72   or three or mor
26210 65 20 70 61 72 65 6e 74 73 2e 20 20 41 20 73 63  e parents.  A sc
26220 68 65 6d 61 20 74 6f 20 6b 65 65 70 20 74 72 61  hema to keep tra
26230 63 6b 20 6f 66 0a 63 68 65 63 6b 69 6e 73 20 61  ck of.checkins a
26240 6e 64 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20  nd the order in 
26250 77 68 69 63 68 20 74 68 65 79 20 6f 63 63 75 72  which they occur
26260 20 6d 69 67 68 74 20 6c 6f 6f 6b 20 73 6f 6d 65   might look some
26270 74 68 69 6e 67 20 6c 69 6b 65 0a 74 68 69 73 3a  thing like.this:
26280 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
26290 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45  re>.CREATE TABLE
262a0 20 63 68 65 63 6b 69 6e 28 0a 20 20 69 64 20 49   checkin(.  id I
262b0 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
262c0 45 59 2c 0a 20 20 6d 74 69 6d 65 20 49 4e 54 45  EY,.  mtime INTE
262d0 47 45 52 20 2d 2d 20 74 69 6d 65 73 74 61 6d 70  GER -- timestamp
262e0 20 77 68 65 6e 20 74 68 69 73 20 63 68 65 63 6b   when this check
262f0 69 6e 20 6f 63 63 75 72 72 65 64 0a 29 3b 0a 43  in occurred.);.C
26300 52 45 41 54 45 20 54 41 42 4c 45 20 64 65 72 69  REATE TABLE deri
26310 76 65 64 66 72 6f 6d 28 0a 20 20 78 66 72 6f 6d  vedfrom(.  xfrom
26320 20 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c   INTEGER NOT NUL
26330 4c 20 52 45 46 45 52 45 4e 43 45 53 20 63 68 65  L REFERENCES che
26340 63 6b 69 6e 2c 20 2d 2d 20 70 61 72 65 6e 74 20  ckin, -- parent 
26350 63 68 65 63 6b 69 6e 0a 20 20 78 74 6f 20 49 4e  checkin.  xto IN
26360 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c 20 52  TEGER NOT NULL R
26370 45 46 45 52 45 4e 43 45 53 20 63 68 65 63 6b 69  EFERENCES checki
26380 6e 2c 20 20 20 2d 2d 20 64 65 72 69 76 65 64 20  n,   -- derived 
26390 63 68 65 63 6b 69 6e 0a 20 20 50 52 49 4d 41 52  checkin.  PRIMAR
263a0 59 20 4b 45 59 28 78 66 72 6f 6d 2c 78 74 6f 29  Y KEY(xfrom,xto)
263b0 0a 29 3b 0a 43 52 45 41 54 45 20 49 4e 44 45 58  .);.CREATE INDEX
263c0 20 64 65 72 69 76 65 64 66 72 6f 6d 5f 62 61 63   derivedfrom_bac
263d0 6b 20 4f 4e 20 64 65 72 69 76 65 64 66 72 6f 6d  k ON derivedfrom
263e0 28 78 74 6f 2c 78 66 72 6f 6d 29 3b 0a 3c 2f 70  (xto,xfrom);.</p
263f0 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
26400 0a 0a 3c 70 3e 54 68 69 73 20 67 72 61 70 68 20  ..<p>This graph 
26410 69 73 20 61 63 79 63 6c 69 63 2e 20 20 41 6e 64  is acyclic.  And
26420 20 77 65 20 61 73 73 75 6d 65 20 74 68 61 74 20   we assume that 
26430 74 68 65 20 6d 74 69 6d 65 20 6f 66 20 65 76 65  the mtime of eve
26440 72 79 0a 63 68 69 6c 64 20 63 68 65 63 6b 69 6e  ry.child checkin
26450 20 69 73 20 6e 6f 20 6c 65 73 73 20 74 68 61 6e   is no less than
26460 20 74 68 65 20 6d 74 69 6d 65 20 6f 66 20 61 6c   the mtime of al
26470 6c 20 69 74 73 20 70 61 72 65 6e 74 73 2e 20 20  l its parents.  
26480 42 75 74 0a 75 6e 6c 69 6b 65 20 74 68 65 20 65  But.unlike the e
26490 61 72 6c 69 65 72 20 65 78 61 6d 70 6c 65 73 2c  arlier examples,
264a0 20 74 68 69 73 20 67 72 61 70 68 20 6d 69 67 68   this graph migh
264b0 74 20 68 61 76 65 20 6d 75 6c 74 69 70 6c 65 20  t have multiple 
264c0 70 61 74 68 73 20 6f 66 0a 64 69 66 66 65 72 69  paths of.differi
264d0 6e 67 20 6c 65 6e 67 74 68 73 20 62 65 74 77 65  ng lengths betwe
264e0 65 6e 20 61 6e 79 20 74 77 6f 20 63 68 65 63 6b  en any two check
264f0 69 6e 73 2e 0a 0a 3c 70 3e 57 65 20 77 61 6e 74  ins...<p>We want
26500 20 74 6f 20 6b 6e 6f 77 20 74 68 65 20 74 77 65   to know the twe
26510 6e 74 79 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  nty most recent 
26520 61 6e 63 65 73 74 6f 72 73 20 69 6e 20 74 69 6d  ancestors in tim
26530 65 20 28 6f 75 74 20 6f 66 0a 74 68 65 20 74 68  e (out of.the th
26540 6f 75 73 61 6e 64 73 20 61 6e 64 20 74 68 6f 75  ousands and thou
26550 73 61 6e 64 73 20 6f 66 20 61 6e 63 65 73 74 6f  sands of ancesto
26560 72 73 20 69 6e 20 74 68 65 20 77 68 6f 6c 65 20  rs in the whole 
26570 44 41 47 29 20 66 6f 72 0a 63 68 65 63 6b 69 6e  DAG) for.checkin
26580 20 22 40 42 41 53 45 4c 49 4e 45 22 2e 20 20 28   "@BASELINE".  (
26590 41 20 71 75 65 72 79 20 73 69 6d 69 6c 61 72 20  A query similar 
265a0 74 6f 20 74 68 69 73 20 69 73 20 75 73 65 64 0a  to this is used.
265b0 62 79 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22  by the <a href="
265c0 68 74 74 70 3a 2f 2f 77 77 77 2e 66 6f 73 73 69  http://www.fossi
265d0 6c 2d 73 63 6d 2e 6f 72 67 2f 22 3e 46 6f 73 73  l-scm.org/">Foss
265e0 69 6c 3c 2f 61 3e 20 56 43 53 20 74 6f 0a 73 68  il</a> VCS to.sh
265f0 6f 77 20 74 68 65 20 4e 20 6d 6f 73 74 20 72 65  ow the N most re
26600 63 65 6e 74 20 61 6e 63 65 73 74 6f 72 73 20 6f  cent ancestors o
26610 66 20 61 20 63 68 65 63 6b 2e 20 20 46 6f 72 20  f a check.  For 
26620 65 78 61 6d 70 6c 65 3a 0a 3c 61 20 68 72 65 66  example:.<a href
26630 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c  ="http://www.sql
26640 69 74 65 2e 6f 72 67 2f 73 72 63 2f 74 69 6d 65  ite.org/src/time
26650 6c 69 6e 65 3f 70 3d 74 72 75 6e 6b 26 6e 3d 33  line?p=trunk&n=3
26660 30 22 3e 68 74 74 70 3a 2f 2f 77 77 77 2e 73 71  0">http://www.sq
26670 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f 74 69 6d  lite.org/src/tim
26680 65 6c 69 6e 65 3f 70 3d 74 72 75 6e 6b 26 6e 3d  eline?p=trunk&n=
26690 33 30 3c 2f 61 3e 2e 29 0a 0a 3c 62 6c 6f 63 6b  30</a>.)..<block
266a0 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48  quote><pre>.WITH
266b0 20 52 45 43 55 52 53 49 56 45 0a 20 20 61 6e 63   RECURSIVE.  anc
266c0 65 73 74 6f 72 28 69 64 2c 6d 74 69 6d 65 29 20  estor(id,mtime) 
266d0 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20  AS (.    SELECT 
266e0 69 64 2c 20 6d 74 69 6d 65 20 46 52 4f 4d 20 63  id, mtime FROM c
266f0 68 65 63 6b 69 6e 20 57 48 45 52 45 20 69 64 3d  heckin WHERE id=
26700 40 42 41 53 45 4c 49 4e 45 0a 20 20 20 20 55 4e  @BASELINE.    UN
26710 49 4f 4e 0a 20 20 20 20 53 45 4c 45 43 54 20 64  ION.    SELECT d
26720 65 72 69 76 65 64 66 72 6f 6d 2e 78 66 72 6f 6d  erivedfrom.xfrom
26730 2c 20 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65 0a  , checkin.mtime.
26740 20 20 20 20 20 20 46 52 4f 4d 20 61 6e 63 65 73        FROM ances
26750 74 6f 72 2c 20 64 65 72 69 76 65 64 66 72 6f 6d  tor, derivedfrom
26760 2c 20 63 68 65 63 6b 69 6e 0a 20 20 20 20 20 57  , checkin.     W
26770 48 45 52 45 20 61 6e 63 65 73 74 6f 72 2e 69 64  HERE ancestor.id
26780 3d 64 65 72 69 76 65 64 66 72 6f 6d 2e 78 74 6f  =derivedfrom.xto
26790 0a 20 20 20 20 20 20 20 41 4e 44 20 63 68 65 63  .       AND chec
267a0 6b 69 6e 2e 69 64 3d 64 65 72 69 76 65 64 66 72  kin.id=derivedfr
267b0 6f 6d 2e 78 66 72 6f 6d 0a 20 20 20 20 20 4f 52  om.xfrom.     OR
267c0 44 45 52 20 42 59 20 63 68 65 63 6b 69 6e 2e 6d  DER BY checkin.m
267d0 74 69 6d 65 20 44 45 53 43 0a 20 20 20 20 20 4c  time DESC.     L
267e0 49 4d 49 54 20 32 30 0a 20 20 29 0a 53 45 4c 45  IMIT 20.  ).SELE
267f0 43 54 20 2a 20 46 52 4f 4d 20 63 68 65 63 6b 69  CT * FROM checki
26800 6e 20 4a 4f 49 4e 20 61 6e 63 65 73 74 6f 72 20  n JOIN ancestor 
26810 55 53 49 4e 47 28 69 64 29 3b 0a 3c 2f 70 72 65  USING(id);.</pre
26820 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
26830 3c 70 3e 0a 54 68 65 20 22 4f 52 44 45 52 20 42  <p>.The "ORDER B
26840 59 20 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65 20  Y checkin.mtime 
26850 44 45 53 43 22 20 74 65 72 6d 20 69 6e 20 74 68  DESC" term in th
26860 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65  e recursive-sele
26870 63 74 20 6d 61 6b 65 73 0a 74 68 65 20 71 75 65  ct makes.the que
26880 72 79 20 72 75 6e 20 6d 75 63 68 20 66 61 73 74  ry run much fast
26890 65 72 20 62 79 20 70 72 65 76 65 6e 74 69 6e 67  er by preventing
268a0 20 69 74 20 66 72 6f 6d 20 66 6f 6c 6c 6f 77 69   it from followi
268b0 6e 67 0a 62 72 61 6e 63 68 65 73 20 74 68 61 74  ng.branches that
268c0 20 6d 65 72 67 65 20 63 68 65 63 6b 69 6e 73 0a   merge checkins.
268d0 66 72 6f 6d 20 6c 6f 6e 67 20 61 67 6f 2e 20 20  from long ago.  
268e0 54 68 65 20 4f 52 44 45 52 20 42 59 20 66 6f 72  The ORDER BY for
268f0 63 65 73 20 74 68 65 20 72 65 63 75 72 73 69 76  ces the recursiv
26900 65 2d 73 65 6c 65 63 74 20 74 6f 20 66 6f 63 75  e-select to focu
26910 73 0a 6f 6e 20 74 68 65 20 6d 6f 73 74 20 72 65  s.on the most re
26920 63 65 6e 74 20 63 68 65 63 6b 69 6e 73 2c 20 74  cent checkins, t
26930 68 65 20 6f 6e 65 73 20 77 65 20 77 61 6e 74 2e  he ones we want.
26940 20 20 57 69 74 68 6f 75 74 20 74 68 65 20 4f 52    Without the OR
26950 44 45 52 20 42 59 0a 6f 6e 20 74 68 65 20 72 65  DER BY.on the re
26960 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c 20  cursive-select, 
26970 6f 6e 65 20 77 6f 75 6c 64 20 62 65 20 66 6f 72  one would be for
26980 63 65 64 20 74 6f 20 63 6f 6d 70 75 74 65 20 74  ced to compute t
26990 68 65 20 63 6f 6d 70 6c 65 74 65 20 73 65 74 20  he complete set 
269a0 6f 66 0a 74 68 6f 75 73 61 6e 64 73 20 6f 66 20  of.thousands of 
269b0 61 6e 63 65 73 74 6f 72 73 2c 20 73 6f 72 74 20  ancestors, sort 
269c0 74 68 65 6d 20 61 6c 6c 20 62 79 20 6d 74 69 6d  them all by mtim
269d0 65 2c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  e, then take the
269e0 20 74 6f 70 20 74 77 65 6e 74 79 2e 0a 54 68 65   top twenty..The
269f0 20 4f 52 44 45 52 20 42 59 20 65 73 73 65 6e 74   ORDER BY essent
26a00 69 61 6c 6c 79 20 73 65 74 73 20 75 70 20 61 20  ially sets up a 
26a10 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 74  priority queue t
26a20 68 61 74 0a 66 6f 72 63 65 73 20 74 68 65 20 72  hat.forces the r
26a30 65 63 75 72 73 69 76 65 20 71 75 65 72 79 20 74  ecursive query t
26a40 6f 20 6c 6f 6f 6b 20 61 74 20 74 68 65 20 6d 6f  o look at the mo
26a50 73 74 20 72 65 63 65 6e 74 20 61 6e 63 65 73 74  st recent ancest
26a60 6f 72 73 20 66 69 72 73 74 2c 0a 61 6c 6c 6f 77  ors first,.allow
26a70 69 6e 67 20 74 68 65 20 75 73 65 20 6f 66 20 61  ing the use of a
26a80 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 74 6f   LIMIT clause to
26a90 20 72 65 73 74 72 69 63 74 20 74 68 65 20 73 63   restrict the sc
26aa0 6f 70 65 20 6f 66 20 74 68 65 0a 71 75 65 72 79  ope of the.query
26ab0 20 74 6f 20 6a 75 73 74 20 74 68 65 20 63 68 65   to just the che
26ac0 63 6b 69 6e 73 20 6f 66 20 69 6e 74 65 72 65 73  ckins of interes
26ad0 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  t...<tcl>hd_frag
26ae0 6d 65 6e 74 20 77 69 74 68 6f 72 64 65 72 62 79  ment withorderby
26af0 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 43 6f 6e 74 72  </tcl>.<h4>Contr
26b00 6f 6c 6c 69 6e 67 20 44 65 70 74 68 2d 46 69 72  olling Depth-Fir
26b10 73 74 20 56 65 72 73 75 73 20 42 72 65 61 64 74  st Versus Breadt
26b20 68 2d 46 69 72 73 74 20 53 65 61 72 63 68 20 4f  h-First Search O
26b30 66 20 61 20 54 72 65 65 0a 55 73 69 6e 67 20 4f  f a Tree.Using O
26b40 52 44 45 52 20 42 59 3c 2f 68 34 3e 0a 0a 3c 70  RDER BY</h4>..<p
26b50 3e 41 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61  >An ORDER BY cla
26b60 75 73 65 20 6f 6e 20 74 68 65 20 72 65 63 75 72  use on the recur
26b70 73 69 76 65 2d 73 65 6c 65 63 74 20 63 61 6e 20  sive-select can 
26b80 62 65 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72  be used to contr
26b90 6f 6c 0a 77 68 65 74 68 65 72 20 74 68 65 20 73  ol.whether the s
26ba0 65 61 72 63 68 20 6f 66 20 61 20 74 72 65 65 20  earch of a tree 
26bb0 69 73 20 64 65 70 74 68 2d 66 69 72 73 74 20 6f  is depth-first o
26bc0 72 20 62 72 65 61 64 74 68 2d 66 69 72 73 74 2e  r breadth-first.
26bd0 20 20 54 6f 0a 69 6c 6c 75 73 74 72 61 74 65 2c    To.illustrate,
26be0 20 77 65 20 77 69 6c 6c 20 75 73 65 20 61 20 76   we will use a v
26bf0 61 72 69 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20  ariation on the 
26c00 22 6f 72 67 22 20 74 61 62 6c 65 20 66 72 6f 6d  "org" table from
26c10 20 61 6e 20 65 78 61 6d 70 6c 65 0a 61 62 6f 76   an example.abov
26c20 65 2c 20 77 69 74 68 6f 75 74 20 74 68 65 20 22  e, without the "
26c30 68 65 69 67 68 74 22 20 63 6f 6c 75 6d 6e 2c 20  height" column, 
26c40 61 6e 64 20 77 69 74 68 20 73 6f 6d 65 20 72 65  and with some re
26c50 61 6c 20 64 61 74 61 20 69 6e 73 65 72 74 65 64  al data inserted
26c60 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
26c70 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
26c80 45 20 6f 72 67 28 0a 20 20 6e 61 6d 65 20 54 45  E org(.  name TE
26c90 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  XT PRIMARY KEY,.
26ca0 20 20 62 6f 73 73 20 54 45 58 54 20 52 45 46 45    boss TEXT REFE
26cb0 52 45 4e 43 45 53 20 6f 72 67 0a 29 20 57 49 54  RENCES org.) WIT
26cc0 48 4f 55 54 20 52 4f 57 49 44 3b 0a 49 4e 53 45  HOUT ROWID;.INSE
26cd0 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55  RT INTO org VALU
26ce0 45 53 28 27 41 6c 69 63 65 27 2c 4e 55 4c 4c 29  ES('Alice',NULL)
26cf0 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72  ;.INSERT INTO or
26d00 67 20 56 41 4c 55 45 53 28 27 42 6f 62 27 2c 27  g VALUES('Bob','
26d10 41 6c 69 63 65 27 29 3b 0a 49 4e 53 45 52 54 20  Alice');.INSERT 
26d20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28  INTO org VALUES(
26d30 27 43 69 6e 64 79 27 2c 27 41 6c 69 63 65 27 29  'Cindy','Alice')
26d40 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72  ;.INSERT INTO or
26d50 67 20 56 41 4c 55 45 53 28 27 44 61 76 65 27 2c  g VALUES('Dave',
26d60 27 42 6f 62 27 29 3b 0a 49 4e 53 45 52 54 20 49  'Bob');.INSERT I
26d70 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27  NTO org VALUES('
26d80 45 6d 6d 61 27 2c 27 42 6f 62 27 29 3b 0a 49 4e  Emma','Bob');.IN
26d90 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41  SERT INTO org VA
26da0 4c 55 45 53 28 27 46 72 65 64 27 2c 27 43 69 6e  LUES('Fred','Cin
26db0 64 79 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54  dy');.INSERT INT
26dc0 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27 47 61  O org VALUES('Ga
26dd0 69 6c 27 2c 27 43 69 6e 64 79 27 29 3b 0a 3c 2f  il','Cindy');.</
26de0 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
26df0 3e 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20 61 20  >..<p>Here is a 
26e00 71 75 65 72 79 20 74 6f 20 73 68 6f 77 20 74 68  query to show th
26e10 65 20 74 72 65 65 20 73 74 72 75 63 74 75 72 65  e tree structure
26e20 20 69 6e 20 61 20 62 72 65 61 64 74 68 2d 66 69   in a breadth-fi
26e30 72 73 74 20 70 61 74 74 65 72 6e 3a 0a 0a 3c 62  rst pattern:..<b
26e40 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
26e50 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20  WITH RECURSIVE. 
26e60 20 75 6e 64 65 72 5f 61 6c 69 63 65 28 6e 61 6d   under_alice(nam
26e70 65 2c 6c 65 76 65 6c 29 20 41 53 20 28 0a 20 20  e,level) AS (.  
26e80 20 20 56 41 4c 55 45 53 28 27 41 6c 69 63 65 27    VALUES('Alice'
26e90 2c 30 29 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c  ,0).    UNION AL
26ea0 4c 0a 20 20 20 20 53 45 4c 45 43 54 20 6f 72 67  L.    SELECT org
26eb0 2e 6e 61 6d 65 2c 20 75 6e 64 65 72 5f 61 6c 69  .name, under_ali
26ec0 63 65 2e 6c 65 76 65 6c 2b 31 0a 20 20 20 20 20  ce.level+1.     
26ed0 20 46 52 4f 4d 20 6f 72 67 20 4a 4f 49 4e 20 75   FROM org JOIN u
26ee0 6e 64 65 72 5f 61 6c 69 63 65 20 4f 4e 20 6f 72  nder_alice ON or
26ef0 67 2e 62 6f 73 73 3d 75 6e 64 65 72 5f 61 6c 69  g.boss=under_ali
26f00 63 65 2e 6e 61 6d 65 0a 20 20 20 20 20 4f 52 44  ce.name.     ORD
26f10 45 52 20 42 59 20 32 0a 20 20 29 0a 53 45 4c 45  ER BY 2.  ).SELE
26f20 43 54 20 73 75 62 73 74 72 28 27 2e 2e 2e 2e 2e  CT substr('.....
26f30 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65 76 65 6c 2a 33  .....',1,level*3
26f40 29 20 7c 7c 20 6e 61 6d 65 20 46 52 4f 4d 20 75  ) || name FROM u
26f50 6e 64 65 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70 72  nder_alice;.</pr
26f60 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
26f70 0a 3c 70 3e 54 68 65 20 22 4f 52 44 45 52 20 42  .<p>The "ORDER B
26f80 59 20 32 22 20 28 77 68 69 63 68 20 6d 65 61 6e  Y 2" (which mean
26f90 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 22 4f  s the same as "O
26fa0 52 44 45 52 20 42 59 20 75 6e 64 65 72 5f 61 6c  RDER BY under_al
26fb0 69 63 65 2e 6c 65 76 65 6c 2b 31 22 29 0a 63 61  ice.level+1").ca
26fc0 75 73 65 73 20 68 69 67 68 65 72 20 6c 65 76 65  uses higher leve
26fd0 6c 73 20 69 6e 20 74 68 65 20 6f 72 67 61 6e 69  ls in the organi
26fe0 7a 61 74 69 6f 6e 20 63 68 61 72 74 20 28 77 69  zation chart (wi
26ff0 74 68 20 73 6d 61 6c 6c 65 72 20 22 6c 65 76 65  th smaller "leve
27000 6c 22 20 76 61 6c 75 65 73 29 0a 74 6f 20 62 65  l" values).to be
27010 20 70 72 6f 63 65 73 73 65 64 20 66 69 72 73 74   processed first
27020 2c 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61  , resulting in a
27030 20 62 72 65 61 64 74 68 2d 66 69 72 73 74 20 73   breadth-first s
27040 65 61 72 63 68 2e 20 20 54 68 65 20 6f 75 74 70  earch.  The outp
27050 75 74 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  ut is:..<blockqu
27060 6f 74 65 3e 3c 70 72 65 3e 0a 41 6c 69 63 65 0a  ote><pre>.Alice.
27070 2e 2e 2e 42 6f 62 0a 2e 2e 2e 43 69 6e 64 79 0a  ...Bob....Cindy.
27080 2e 2e 2e 2e 2e 2e 44 61 76 65 0a 2e 2e 2e 2e 2e  ......Dave......
27090 2e 45 6d 6d 61 0a 2e 2e 2e 2e 2e 2e 46 72 65 64  .Emma.......Fred
270a0 0a 2e 2e 2e 2e 2e 2e 47 61 69 6c 0a 3c 2f 70 72  .......Gail.</pr
270b0 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
270c0 0a 3c 70 3e 42 75 74 20 69 66 20 77 65 20 63 68  .<p>But if we ch
270d0 61 6e 67 65 20 74 68 65 20 4f 52 44 45 52 20 42  ange the ORDER B
270e0 59 20 63 6c 61 75 73 65 20 74 6f 20 61 64 64 20  Y clause to add 
270f0 74 68 65 20 22 44 45 53 43 22 20 6d 6f 64 69 66  the "DESC" modif
27100 69 65 72 2c 20 74 68 61 74 20 77 69 6c 6c 0a 63  ier, that will.c
27110 61 75 73 65 20 6c 6f 77 65 72 20 6c 65 76 65 6c  ause lower level
27120 73 20 69 6e 20 74 68 65 20 6f 72 67 61 6e 69 7a  s in the organiz
27130 61 74 69 6f 6e 20 28 77 69 74 68 20 6c 61 72 67  ation (with larg
27140 65 72 20 22 6c 65 76 65 6c 22 20 76 61 6c 75 65  er "level" value
27150 73 29 20 74 6f 20 62 65 0a 70 72 6f 63 65 73 73  s) to be.process
27160 65 64 20 66 69 72 73 74 20 62 79 20 74 68 65 20  ed first by the 
27170 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
27180 2c 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61  , resulting in a
27190 20 64 65 70 74 68 2d 66 69 72 73 74 20 73 65 61   depth-first sea
271a0 72 63 68 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  rch:..<blockquot
271b0 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43  e><pre>.WITH REC
271c0 55 52 53 49 56 45 0a 20 20 75 6e 64 65 72 5f 61  URSIVE.  under_a
271d0 6c 69 63 65 28 6e 61 6d 65 2c 6c 65 76 65 6c 29  lice(name,level)
271e0 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45 53   AS (.    VALUES
271f0 28 27 41 6c 69 63 65 27 2c 30 29 0a 20 20 20 20  ('Alice',0).    
27200 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45  UNION ALL.    SE
27210 4c 45 43 54 20 6f 72 67 2e 6e 61 6d 65 2c 20 75  LECT org.name, u
27220 6e 64 65 72 5f 61 6c 69 63 65 2e 6c 65 76 65 6c  nder_alice.level
27230 2b 31 0a 20 20 20 20 20 20 46 52 4f 4d 20 6f 72  +1.      FROM or
27240 67 20 4a 4f 49 4e 20 75 6e 64 65 72 5f 61 6c 69  g JOIN under_ali
27250 63 65 20 4f 4e 20 6f 72 67 2e 62 6f 73 73 3d 75  ce ON org.boss=u
27260 6e 64 65 72 5f 61 6c 69 63 65 2e 6e 61 6d 65 0a  nder_alice.name.
27270 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 32 20       ORDER BY 2 
27280 3c 62 3e 44 45 53 43 3c 2f 62 3e 0a 20 20 29 0a  <b>DESC</b>.  ).
27290 53 45 4c 45 43 54 20 73 75 62 73 74 72 28 27 2e  SELECT substr('.
272a0 2e 2e 2e 2e 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65 76  .........',1,lev
272b0 65 6c 2a 33 29 20 7c 7c 20 6e 61 6d 65 20 46 52  el*3) || name FR
272c0 4f 4d 20 75 6e 64 65 72 5f 61 6c 69 63 65 3b 0a  OM under_alice;.
272d0 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
272e0 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70  te>..<p>The outp
272f0 75 74 20 6f 66 20 74 68 69 73 20 72 65 76 69 73  ut of this revis
27300 65 64 20 71 75 65 72 79 20 69 73 3a 0a 0a 3c 62  ed query is:..<b
27310 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
27320 41 6c 69 63 65 0a 2e 2e 2e 42 6f 62 0a 2e 2e 2e  Alice....Bob....
27330 2e 2e 2e 44 61 76 65 0a 2e 2e 2e 2e 2e 2e 45 6d  ...Dave.......Em
27340 6d 61 0a 2e 2e 2e 43 69 6e 64 79 0a 2e 2e 2e 2e  ma....Cindy.....
27350 2e 2e 46 72 65 64 0a 2e 2e 2e 2e 2e 2e 47 61 69  ..Fred.......Gai
27360 6c 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  l.</pre></blockq
27370 75 6f 74 65 3e 0a 0a 3c 70 3e 57 68 65 6e 20 74  uote>..<p>When t
27380 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
27390 73 65 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  se is omitted fr
273a0 6f 6d 20 74 68 65 20 72 65 63 75 72 73 69 76 65  om the recursive
273b0 2d 73 65 6c 65 63 74 2c 20 74 68 65 0a 71 75 65  -select, the.que
273c0 75 65 20 62 65 68 61 76 65 73 20 61 73 20 61 20  ue behaves as a 
273d0 46 49 46 4f 2c 20 77 68 69 63 68 20 72 65 73 75  FIFO, which resu
273e0 6c 74 73 20 69 6e 20 61 20 62 72 65 61 64 74 68  lts in a breadth
273f0 2d 66 69 72 73 74 20 73 65 61 72 63 68 2e 0a 0a  -first search...
27400 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
27410 74 20 6d 61 6e 64 65 6c 62 72 6f 74 20 7b 63 6f  t mandelbrot {co
27420 6d 70 75 74 65 20 74 68 65 20 4d 61 6e 64 65 6c  mpute the Mandel
27430 62 72 6f 74 20 73 65 74 7d 3c 2f 74 63 6c 3e 0a  brot set}</tcl>.
27440 3c 68 34 3e 4f 75 74 6c 61 6e 64 69 73 68 20 52  <h4>Outlandish R
27450 65 63 75 72 73 69 76 65 20 51 75 65 72 79 20 45  ecursive Query E
27460 78 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70  xamples</h4>..<p
27470 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 71  >The following q
27480 75 65 72 79 20 63 6f 6d 70 75 74 65 73 20 61 6e  uery computes an
27490 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 6f   approximation o
274a0 66 20 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74  f the Mandelbrot
274b0 20 53 65 74 0a 61 6e 64 20 6f 75 74 70 75 74 73   Set.and outputs
274c0 20 74 68 65 20 72 65 73 75 6c 74 20 61 73 20 41   the result as A
274d0 53 43 49 49 2d 61 72 74 3a 0a 0a 3c 62 6c 6f 63  SCII-art:..<bloc
274e0 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54  kquote><pre>.WIT
274f0 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 78 61  H RECURSIVE.  xa
27500 78 69 73 28 78 29 20 41 53 20 28 56 41 4c 55 45  xis(x) AS (VALUE
27510 53 28 2d 32 2e 30 29 20 55 4e 49 4f 4e 20 41 4c  S(-2.0) UNION AL
27520 4c 20 53 45 4c 45 43 54 20 78 2b 30 2e 30 35 20  L SELECT x+0.05 
27530 46 52 4f 4d 20 78 61 78 69 73 20 57 48 45 52 45  FROM xaxis WHERE
27540 20 78 26 6c 74 3b 31 2e 32 29 2c 0a 20 20 79 61   x&lt;1.2),.  ya
27550 78 69 73 28 79 29 20 41 53 20 28 56 41 4c 55 45  xis(y) AS (VALUE
27560 53 28 2d 31 2e 30 29 20 55 4e 49 4f 4e 20 41 4c  S(-1.0) UNION AL
27570 4c 20 53 45 4c 45 43 54 20 79 2b 30 2e 31 20 46  L SELECT y+0.1 F
27580 52 4f 4d 20 79 61 78 69 73 20 57 48 45 52 45 20  ROM yaxis WHERE 
27590 79 26 6c 74 3b 31 2e 30 29 2c 0a 20 20 6d 28 69  y&lt;1.0),.  m(i
275a0 74 65 72 2c 20 63 78 2c 20 63 79 2c 20 78 2c 20  ter, cx, cy, x, 
275b0 79 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45  y) AS (.    SELE
275c0 43 54 20 30 2c 20 78 2c 20 79 2c 20 30 2e 30 2c  CT 0, x, y, 0.0,
275d0 20 30 2e 30 20 46 52 4f 4d 20 78 61 78 69 73 2c   0.0 FROM xaxis,
275e0 20 79 61 78 69 73 0a 20 20 20 20 55 4e 49 4f 4e   yaxis.    UNION
275f0 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 20   ALL.    SELECT 
27600 69 74 65 72 2b 31 2c 20 63 78 2c 20 63 79 2c 20  iter+1, cx, cy, 
27610 78 2a 78 2d 79 2a 79 20 2b 20 63 78 2c 20 32 2e  x*x-y*y + cx, 2.
27620 30 2a 78 2a 79 20 2b 20 63 79 20 46 52 4f 4d 20  0*x*y + cy FROM 
27630 6d 20 0a 20 20 20 20 20 57 48 45 52 45 20 28 78  m .     WHERE (x
27640 2a 78 20 2b 20 79 2a 79 29 20 26 6c 74 3b 20 34  *x + y*y) &lt; 4
27650 2e 30 20 41 4e 44 20 69 74 65 72 26 6c 74 3b 32  .0 AND iter&lt;2
27660 38 0a 20 20 29 2c 0a 20 20 6d 32 28 69 74 65 72  8.  ),.  m2(iter
27670 2c 20 63 78 2c 20 63 79 29 20 41 53 20 28 0a 20  , cx, cy) AS (. 
27680 20 20 20 53 45 4c 45 43 54 20 6d 61 78 28 69 74     SELECT max(it
27690 65 72 29 2c 20 63 78 2c 20 63 79 20 46 52 4f 4d  er), cx, cy FROM
276a0 20 6d 20 47 52 4f 55 50 20 42 59 20 63 78 2c 20   m GROUP BY cx, 
276b0 63 79 0a 20 20 29 2c 0a 20 20 61 28 74 29 20 41  cy.  ),.  a(t) A
276c0 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20 67  S (.    SELECT g
276d0 72 6f 75 70 5f 63 6f 6e 63 61 74 28 20 73 75 62  roup_concat( sub
276e0 73 74 72 28 27 20 2e 2b 2a 23 27 2c 20 31 2b 6d  str(' .+*#', 1+m
276f0 69 6e 28 69 74 65 72 2f 37 2c 34 29 2c 20 31 29  in(iter/7,4), 1)
27700 2c 20 27 27 29 20 0a 20 20 20 20 46 52 4f 4d 20  , '') .    FROM 
27710 6d 32 20 47 52 4f 55 50 20 42 59 20 63 79 0a 20  m2 GROUP BY cy. 
27720 20 29 0a 53 45 4c 45 43 54 20 67 72 6f 75 70 5f   ).SELECT group_
27730 63 6f 6e 63 61 74 28 72 74 72 69 6d 28 74 29 2c  concat(rtrim(t),
27740 78 27 30 61 27 29 20 46 52 4f 4d 20 61 3b 0a 3c  x'0a') FROM a;.<
27750 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
27760 65 3e 0a 0a 3c 70 3e 49 6e 20 74 68 69 73 20 71  e>..<p>In this q
27770 75 65 72 79 2c 20 74 68 65 20 22 78 61 78 69 73  uery, the "xaxis
27780 22 20 61 6e 64 20 22 79 61 78 69 73 22 20 43 54  " and "yaxis" CT
27790 45 73 20 64 65 66 69 6e 65 20 74 68 65 20 67 72  Es define the gr
277a0 69 64 20 6f 66 20 70 6f 69 6e 74 73 20 66 6f 72  id of points for
277b0 0a 77 68 69 63 68 20 74 68 65 20 4d 61 6e 64 65  .which the Mande
277c0 6c 62 72 6f 74 20 53 65 74 20 77 69 6c 6c 20 62  lbrot Set will b
277d0 65 20 61 70 70 72 6f 78 69 6d 61 74 65 64 2e 20  e approximated. 
277e0 20 45 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65   Each row in the
277f0 0a 22 6d 28 69 74 65 72 2c 63 78 2c 63 79 2c 78  ."m(iter,cx,cy,x
27800 2c 79 29 22 20 43 54 45 20 6d 65 61 6e 73 20 74  ,y)" CTE means t
27810 68 61 74 20 61 66 74 65 72 20 22 69 74 65 72 22  hat after "iter"
27820 20 69 74 65 72 61 74 69 6f 6e 73 2c 20 74 68 65   iterations, the
27830 20 4d 61 6e 64 65 6c 62 72 6f 74 0a 69 74 65 72   Mandelbrot.iter
27840 61 74 69 6f 6e 20 73 74 61 72 74 69 6e 67 20 61  ation starting a
27850 74 20 63 78 2c 63 79 20 68 61 73 20 72 65 61 63  t cx,cy has reac
27860 68 65 64 20 70 6f 69 6e 74 20 78 2c 79 2e 20 20  hed point x,y.  
27870 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 74  The number of it
27880 65 72 61 74 69 6f 6e 73 0a 69 6e 20 74 68 69 73  erations.in this
27890 20 65 78 61 6d 70 6c 65 20 69 73 20 6c 69 6d 69   example is limi
278a0 74 65 64 20 74 6f 20 32 38 20 28 77 68 69 63 68  ted to 28 (which
278b0 20 73 65 76 65 72 65 6c 79 20 6c 69 6d 69 74 73   severely limits
278c0 20 74 68 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20   the resolution 
278d0 6f 66 0a 74 68 65 20 63 6f 6d 70 75 74 61 74 69  of.the computati
278e0 6f 6e 2c 20 62 75 74 20 69 73 20 73 75 66 66 69  on, but is suffi
278f0 63 69 65 6e 74 20 66 6f 72 20 6c 6f 77 2d 72 65  cient for low-re
27900 73 6f 6c 75 74 69 6f 6e 20 41 53 43 49 49 2d 61  solution ASCII-a
27910 72 74 20 6f 75 74 70 75 74 29 2e 0a 54 68 65 20  rt output)..The 
27920 22 6d 32 28 69 74 65 72 2c 63 78 2c 63 79 29 22  "m2(iter,cx,cy)"
27930 20 43 54 45 20 68 6f 6c 64 73 20 74 68 65 20 6d   CTE holds the m
27940 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
27950 20 69 74 65 72 61 74 69 6f 6e 73 20 72 65 61 63   iterations reac
27960 68 65 64 20 77 68 65 6e 0a 73 74 61 72 74 69 6e  hed when.startin
27970 67 20 61 74 20 70 6f 69 6e 74 20 63 78 2c 63 79  g at point cx,cy
27980 2e 0a 46 69 6e 61 6c 6c 79 2c 20 65 61 63 68 20  ..Finally, each 
27990 72 6f 77 20 69 6e 20 74 68 65 20 22 61 28 74 29  row in the "a(t)
279a0 22 20 43 54 45 20 68 6f 6c 64 73 20 61 20 73 74  " CTE holds a st
279b0 72 69 6e 67 20 0a 77 68 69 63 68 20 69 73 20 61  ring .which is a
279c0 20 73 69 6e 67 6c 65 20 6c 69 6e 65 20 6f 66 20   single line of 
279d0 74 68 65 20 6f 75 74 70 75 74 20 41 53 43 49 49  the output ASCII
279e0 2d 61 72 74 2e 0a 54 68 65 20 53 45 4c 45 43 54  -art..The SELECT
279f0 20 73 74 61 74 65 6d 65 6e 74 20 61 74 20 74 68   statement at th
27a00 65 20 65 6e 64 20 6a 75 73 74 20 71 75 65 72 69  e end just queri
27a10 65 73 20 74 68 65 20 22 61 22 20 43 54 45 20 74  es the "a" CTE t
27a20 6f 0a 72 65 74 72 69 65 76 65 20 61 6c 6c 20 6c  o.retrieve all l
27a30 69 6e 65 73 20 6f 66 20 41 53 43 49 49 2d 61 72  ines of ASCII-ar
27a40 74 2c 20 6f 6e 65 20 62 79 20 6f 6e 65 2e 0a 0a  t, one by one...
27a50 3c 70 3e 52 75 6e 6e 69 6e 67 20 74 68 65 20 71  <p>Running the q
27a60 75 65 72 79 20 61 62 6f 76 65 20 69 6e 20 61 6e  uery above in an
27a70 20 53 51 4c 69 74 65 20 5b 63 6f 6d 6d 61 6e 64   SQLite [command
27a80 2d 6c 69 6e 65 20 73 68 65 6c 6c 5d 20 72 65 73  -line shell] res
27a90 75 6c 74 73 0a 69 6e 20 74 68 65 20 66 6f 6c 6c  ults.in the foll
27aa0 6f 77 69 6e 67 20 6f 75 74 70 75 74 3a 0a 0a 3c  owing output:..<
27ab0 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
27ac0 0a 20 20 20 20 20 20 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 2e 2e 2e 2e 23 0a 20 20 20 20 20       ....#.     
27af0 20 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 2e 2e                ..
27b10 23 2a 2e 2e 0a 20 20 20 20 20 20 20 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 2e 2e 2b 23 23 23 23 2b 2e 0a        ..+####+..
27b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b50 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e              ....
27b60 2e 2e 2e 2b 23 23 23 23 2e 2e 2e 2e 20 20 20 2b  ...+####....   +
27b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27b80 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 23 23              ..##
27b90 2b 2a 23 23 23 23 23 23 23 23 23 23 2b 2e 2b 2b  +*##########+.++
27ba0 2b 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ++.             
27bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2b 2e               .+.
27bc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27bd0 23 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20  ##+..           
27be0 20 20 20 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e     .............
27bf0 2b 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  +###############
27c00 23 23 23 23 2b 2e 2b 0a 20 20 20 20 20 20 20 20  ####+.+.        
27c10 20 20 20 20 20 20 2e 2e 2b 2b 2e 2e 23 2e 2e 2e        ..++..#...
27c20 2e 2e 2a 23 23 23 23 23 23 23 23 23 23 23 23 23  ..*#############
27c30 23 23 23 23 23 23 23 23 2b 2e 0a 20 20 20 20 20  ########+..     
27c40 20 20 20 20 20 20 20 20 2e 2e 2e 2b 23 23 23 23          ...+####
27c50 23 23 23 2b 2b 23 23 23 23 23 23 23 23 23 23 23  ###++###########
27c60 23 23 23 23 23 23 23 23 23 23 23 23 2e 0a 20 20  ############..  
27c70 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2b 2a 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 2e 0a  ##############..
27ca0 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
27cb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27cc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2e 2e  ##############..
27cd0 2e 0a 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e  ..          ....
27ce0 2b 2a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  +*##############
27cf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27d00 23 23 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  ##..            
27d10 20 2e 2e 2e 2b 23 23 23 23 23 23 23 2b 2b 23 23   ...+#######++##
27d20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27d30 23 23 23 23 23 2e 0a 20 20 20 20 20 20 20 20 20  #####..         
27d40 20 20 20 20 20 2e 2e 2b 2b 2e 2e 23 2e 2e 2e 2e       ..++..#....
27d50 2e 2a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .*##############
27d60 23 23 23 23 23 23 23 2b 2e 0a 20 20 20 20 20 20  #######+..      
27d70 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2e          ........
27d80 2e 2e 2e 2e 2e 2b 23 23 23 23 23 23 23 23 23 23  .....+##########
27d90 23 23 23 23 23 23 23 23 23 2b 2e 2b 0a 20 20 20  #########+.+.   
27da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27db0 20 20 20 20 20 20 20 2e 2b 2e 23 23 23 23 23 23         .+.######
27dc0 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20  ############+.. 
27dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27de0 20 20 20 20 20 20 20 20 20 20 2e 2e 23 23 2b 2a            ..##+*
27df0 23 23 23 23 23 23 23 23 23 23 2b 2e 2b 2b 2b 2b  ##########+.++++
27e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27e10 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e               ...
27e20 2e 2e 2e 2e 2b 23 23 23 23 2e 2e 2e 2e 20 20 20  ....+####....   
27e30 2b 0a 20 20 20 20 20 20 20 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 2e 2e 2b 23 23 23 23 2b 2e 0a 20 20 20     ..+####+..   
27e60 20 20 20 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 2e 2e 23 2a 2e 2e 0a 20 20 20 20 20 20 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 2e 2e 2e 2e 23             ....#
27eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ed0 20 20 20 20 20 2b 2e 0a 3c 2f 70 72 65 3e 3c 2f       +..</pre></
27ee0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 74 63  blockquote>..<tc
27ef0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 75  l>hd_fragment su
27f00 64 6f 6b 75 20 7b 73 6f 6c 76 65 20 53 75 64 6f  doku {solve Sudo
27f10 6b 75 20 70 75 7a 7a 6c 65 73 7d 20 3c 2f 74 63  ku puzzles} </tc
27f20 6c 3e 0a 3c 70 3e 54 68 69 73 20 6e 65 78 74 20  l>.<p>This next 
27f30 71 75 65 72 79 20 73 6f 6c 76 65 73 20 61 20 53  query solves a S
27f40 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 2e 20 20 54  udoku puzzle.  T
27f50 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20  he state of the 
27f60 70 75 7a 7a 6c 65 20 69 73 0a 64 65 66 69 6e 65  puzzle is.define
27f70 64 20 62 79 20 61 6e 20 38 31 2d 63 68 61 72 61  d by an 81-chara
27f80 63 74 65 72 20 73 74 72 69 6e 67 20 66 6f 72 6d  cter string form
27f90 65 64 20 62 79 20 72 65 61 64 69 6e 67 20 65 6e  ed by reading en
27fa0 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 0a 70  tries from the.p
27fb0 75 7a 7a 6c 65 20 62 6f 78 20 72 6f 77 20 62 79  uzzle box row by
27fc0 20 72 6f 77 20 66 72 6f 6d 20 6c 65 66 74 20 74   row from left t
27fd0 6f 20 72 69 67 68 74 20 61 6e 64 20 74 68 65 6e  o right and then
27fe0 20 66 72 6f 6d 20 74 6f 70 20 74 6f 20 62 6f 74   from top to bot
27ff0 74 6f 6d 2e 0a 42 6c 61 6e 6b 20 73 71 75 61 72  tom..Blank squar
28000 65 73 20 69 6e 20 74 68 65 20 70 75 7a 7a 6c 65  es in the puzzle
28010 20 61 72 65 20 64 65 6e 6f 74 65 64 20 62 79 20   are denoted by 
28020 61 20 22 2e 22 20 63 68 61 72 61 63 74 65 72 2e  a "." character.
28030 20 20 0a 54 68 75 73 20 74 68 65 20 69 6e 70 75    .Thus the inpu
28040 74 20 73 74 72 69 6e 67 3a 0a 0a 3c 62 6c 6f 63  t string:..<bloc
28050 6b 71 75 6f 74 65 3e 0a 35 33 2e 2e 37 2e 2e 2e  kquote>.53..7...
28060 2e 36 2e 2e 31 39 35 2e 2e 2e 2e 39 38 2e 2e 2e  .6..195....98...
28070 2e 36 2e 38 2e 2e 2e 36 2e 2e 2e 33 34 2e 2e 38  .6.8...6...34..8
28080 2e 33 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e 36 2e 36  .3..17...2...6.6
28090 2e 2e 2e 2e 32 38 2e 2e 2e 2e 34 31 39 2e 2e 35  ....28....419..5
280a0 2e 2e 2e 2e 38 2e 2e 37 39 0a 3c 2f 62 6c 6f 63  ....8..79.</bloc
280b0 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 72 72  kquote>..<p>Corr
280c0 65 73 70 6f 6e 64 73 20 74 6f 20 61 20 70 75 7a  esponds to a puz
280d0 7a 6c 65 20 6c 69 6b 65 20 74 68 69 73 3a 0a 0a  zle like this:..
280e0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61  <blockquote>.<ta
280f0 62 6c 65 20 62 6f 72 64 65 72 3d 22 31 22 20 63  ble border="1" c
28100 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35 22 3e 0a  ellpadding="5">.
28110 3c 74 72 3e 3c 74 64 3e 35 3c 74 64 3e 33 3c 74  <tr><td>5<td>3<t
28120 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 37 3c 74 64  d> <td> <td>7<td
28130 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  > <td> <td> <td>
28140 0a 3c 74 72 3e 3c 74 64 3e 36 3c 74 64 3e 20 3c  .<tr><td>6<td> <
28150 74 64 3e 20 3c 74 64 3e 31 3c 74 64 3e 39 3c 74  td> <td>1<td>9<t
28160 64 3e 35 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>5<td> <td> <td
28170 3e 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 39  >.<tr><td> <td>9
28180 3c 74 64 3e 38 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>8<td> <td> <
28190 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 36 3c 74  td> <td> <td>6<t
281a0 64 3e 0a 3c 74 72 3e 3c 74 64 3e 38 3c 74 64 3e  d>.<tr><td>8<td>
281b0 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 36   <td> <td> <td>6
281c0 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
281d0 74 64 3e 33 0a 3c 74 72 3e 3c 74 64 3e 34 3c 74  td>3.<tr><td>4<t
281e0 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 38 3c 74 64  d> <td> <td>8<td
281f0 3e 20 3c 74 64 3e 33 3c 74 64 3e 20 3c 74 64 3e  > <td>3<td> <td>
28200 20 3c 74 64 3e 31 0a 3c 74 72 3e 3c 74 64 3e 37   <td>1.<tr><td>7
28210 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
28220 74 64 3e 32 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td>2<td> <td> <t
28230 64 3e 20 3c 74 64 3e 36 0a 3c 74 72 3e 3c 74 64  d> <td>6.<tr><td
28240 3e 20 3c 74 64 3e 36 3c 74 64 3e 20 3c 74 64 3e  > <td>6<td> <td>
28250 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 32   <td> <td> <td>2
28260 3c 74 64 3e 38 3c 74 64 3e 0a 3c 74 72 3e 3c 74  <td>8<td>.<tr><t
28270 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d> <td> <td> <td
28280 3e 34 3c 74 64 3e 31 3c 74 64 3e 39 3c 74 64 3e  >4<td>1<td>9<td>
28290 20 3c 74 64 3e 20 3c 74 64 3e 35 0a 3c 74 72 3e   <td> <td>5.<tr>
282a0 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
282b0 74 64 3e 20 3c 74 64 3e 38 3c 74 64 3e 20 3c 74  td> <td>8<td> <t
282c0 64 3e 20 3c 74 64 3e 37 3c 74 64 3e 39 0a 3c 2f  d> <td>7<td>9.</
282d0 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75  table>.</blockqu
282e0 6f 74 65 3e 0a 0a 3c 70 3e 54 68 69 73 20 69 73  ote>..<p>This is
282f0 20 74 68 65 20 71 75 65 72 79 20 74 68 61 74 20   the query that 
28300 73 6f 6c 76 65 73 20 74 68 65 20 70 75 7a 7a 6c  solves the puzzl
28310 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  e:..<blockquote>
28320 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52  <pre>.WITH RECUR
28330 53 49 56 45 0a 20 20 69 6e 70 75 74 28 73 75 64  SIVE.  input(sud
28340 29 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45  ) AS (.    VALUE
28350 53 28 27 35 33 2e 2e 37 2e 2e 2e 2e 36 2e 2e 31  S('53..7....6..1
28360 39 35 2e 2e 2e 2e 39 38 2e 2e 2e 2e 36 2e 38 2e  95....98....6.8.
28370 2e 2e 36 2e 2e 2e 33 34 2e 2e 38 2e 33 2e 2e 31  ..6...34..8.3..1
28380 37 2e 2e 2e 32 2e 2e 2e 36 2e 36 2e 2e 2e 2e 32  7...2...6.6....2
28390 38 2e 2e 2e 2e 34 31 39 2e 2e 35 2e 2e 2e 2e 38  8....419..5....8
283a0 2e 2e 37 39 27 29 0a 20 20 29 2c 0a 20 20 64 69  ..79').  ),.  di
283b0 67 69 74 73 28 7a 2c 20 6c 70 29 20 41 53 20 28  gits(z, lp) AS (
283c0 0a 20 20 20 20 56 41 4c 55 45 53 28 27 31 27 2c  .    VALUES('1',
283d0 20 31 29 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c   1).    UNION AL
283e0 4c 20 53 45 4c 45 43 54 0a 20 20 20 20 43 41 53  L SELECT.    CAS
283f0 54 28 6c 70 2b 31 20 41 53 20 54 45 58 54 29 2c  T(lp+1 AS TEXT),
28400 20 6c 70 2b 31 20 46 52 4f 4d 20 64 69 67 69 74   lp+1 FROM digit
28410 73 20 57 48 45 52 45 20 6c 70 26 6c 74 3b 39 0a  s WHERE lp&lt;9.
28420 20 20 29 2c 0a 20 20 78 28 73 2c 20 69 6e 64 29    ),.  x(s, ind)
28430 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54   AS (.    SELECT
28440 20 73 75 64 2c 20 69 6e 73 74 72 28 73 75 64 2c   sud, instr(sud,
28450 20 27 2e 27 29 20 46 52 4f 4d 20 69 6e 70 75 74   '.') FROM input
28460 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20  .    UNION ALL. 
28470 20 20 20 53 45 4c 45 43 54 0a 20 20 20 20 20 20     SELECT.      
28480 73 75 62 73 74 72 28 73 2c 20 31 2c 20 69 6e 64  substr(s, 1, ind
28490 2d 31 29 20 7c 7c 20 7a 20 7c 7c 20 73 75 62 73  -1) || z || subs
284a0 74 72 28 73 2c 20 69 6e 64 2b 31 29 2c 0a 20 20  tr(s, ind+1),.  
284b0 20 20 20 20 69 6e 73 74 72 28 20 73 75 62 73 74      instr( subst
284c0 72 28 73 2c 20 31 2c 20 69 6e 64 2d 31 29 20 7c  r(s, 1, ind-1) |
284d0 7c 20 7a 20 7c 7c 20 73 75 62 73 74 72 28 73 2c  | z || substr(s,
284e0 20 69 6e 64 2b 31 29 2c 20 27 2e 27 20 29 0a 20   ind+1), '.' ). 
284f0 20 20 20 20 46 52 4f 4d 20 78 2c 20 64 69 67 69      FROM x, digi
28500 74 73 20 41 53 20 7a 0a 20 20 20 20 57 48 45 52  ts AS z.    WHER
28510 45 20 69 6e 64 3e 30 0a 20 20 20 20 20 20 41 4e  E ind>0.      AN
28520 44 20 4e 4f 54 20 45 58 49 53 54 53 20 28 0a 20  D NOT EXISTS (. 
28530 20 20 20 20 20 20 20 20 20 20 20 53 45 4c 45 43             SELEC
28540 54 20 31 0a 20 20 20 20 20 20 20 20 20 20 20 20  T 1.            
28550 20 20 46 52 4f 4d 20 64 69 67 69 74 73 20 41 53    FROM digits AS
28560 20 6c 70 0a 20 20 20 20 20 20 20 20 20 20 20 20   lp.            
28570 20 57 48 45 52 45 20 7a 2e 7a 20 3d 20 73 75 62   WHERE z.z = sub
28580 73 74 72 28 73 2c 20 28 28 69 6e 64 2d 31 29 2f  str(s, ((ind-1)/
28590 39 29 2a 39 20 2b 20 6c 70 2c 20 31 29 0a 20 20  9)*9 + lp, 1).  
285a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 52                OR
285b0 20 7a 2e 7a 20 3d 20 73 75 62 73 74 72 28 73 2c   z.z = substr(s,
285c0 20 28 28 69 6e 64 2d 31 29 25 39 29 20 2b 20 28   ((ind-1)%9) + (
285d0 6c 70 2d 31 29 2a 39 20 2b 20 31 2c 20 31 29 0a  lp-1)*9 + 1, 1).
285e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285f0 4f 52 20 7a 2e 7a 20 3d 20 73 75 62 73 74 72 28  OR z.z = substr(
28600 73 2c 20 28 28 28 69 6e 64 2d 31 29 2f 33 29 20  s, (((ind-1)/3) 
28610 25 20 33 29 20 2a 20 33 0a 20 20 20 20 20 20 20  % 3) * 3.       
28620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28630 20 2b 20 28 28 69 6e 64 2d 31 29 2f 32 37 29 20   + ((ind-1)/27) 
28640 2a 20 32 37 20 2b 20 6c 70 0a 20 20 20 20 20 20  * 27 + lp.      
28650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28660 20 20 2b 20 28 28 6c 70 2d 31 29 20 2f 20 33 29    + ((lp-1) / 3)
28670 20 2a 20 36 2c 20 31 29 0a 20 20 20 20 20 20 20   * 6, 1).       
28680 20 20 29 0a 20 20 29 0a 53 45 4c 45 43 54 20 73    ).  ).SELECT s
28690 20 46 52 4f 4d 20 78 20 57 48 45 52 45 20 69 6e   FROM x WHERE in
286a0 64 3d 30 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  d=0;.</pre></blo
286b0 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65  ckquote>..<p>The
286c0 20 22 69 6e 70 75 74 22 20 43 54 45 20 64 65 66   "input" CTE def
286d0 69 6e 65 73 20 74 68 65 20 69 6e 70 75 74 20 70  ines the input p
286e0 75 7a 7a 6c 65 2e 0a 54 68 65 20 22 64 69 67 69  uzzle..The "digi
286f0 74 73 22 20 43 54 45 20 64 65 66 69 6e 65 73 20  ts" CTE defines 
28700 61 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  a table that hol
28710 64 73 20 61 6c 6c 20 64 69 67 69 74 73 20 62 65  ds all digits be
28720 74 77 65 65 6e 20 31 20 61 6e 64 20 39 2e 0a 54  tween 1 and 9..T
28730 68 65 20 77 6f 72 6b 20 6f 66 20 73 6f 6c 76 69  he work of solvi
28740 6e 67 20 74 68 65 20 70 75 7a 7a 6c 65 20 69 73  ng the puzzle is
28750 20 75 6e 64 65 72 74 61 6b 65 6e 20 62 79 20 74   undertaken by t
28760 68 65 20 22 78 22 20 43 54 45 2e 0a 41 6e 20 65  he "x" CTE..An e
28770 6e 74 72 79 20 69 6e 20 78 28 73 2c 69 6e 64 29  ntry in x(s,ind)
28780 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
28790 38 31 2d 63 68 61 72 61 63 74 65 72 20 73 74 72  81-character str
287a0 69 6e 67 20 22 73 22 20 69 73 20 61 20 76 61 6c  ing "s" is a val
287b0 69 64 0a 73 75 64 6f 6b 75 20 70 75 7a 7a 6c 65  id.sudoku puzzle
287c0 20 28 69 74 20 68 61 73 20 6e 6f 20 63 6f 6e 66   (it has no conf
287d0 6c 69 63 74 73 29 20 61 6e 64 20 74 68 61 74 20  licts) and that 
287e0 74 68 65 20 66 69 72 73 74 20 75 6e 6b 6e 6f 77  the first unknow
287f0 6e 20 63 68 61 72 61 63 74 65 72 0a 69 73 20 61  n character.is a
28800 74 20 70 6f 73 69 74 69 6f 6e 20 22 69 6e 64 22  t position "ind"
28810 2c 20 6f 72 20 69 6e 64 3d 3d 30 20 69 66 20 61  , or ind==0 if a
28820 6c 6c 20 63 68 61 72 61 63 74 65 72 20 70 6f 73  ll character pos
28830 69 74 69 6f 6e 73 20 61 72 65 20 66 69 6c 6c 65  itions are fille
28840 64 20 69 6e 2e 0a 54 68 65 20 67 6f 61 6c 2c 20  d in..The goal, 
28850 74 68 65 6e 2c 20 69 73 20 74 6f 20 63 6f 6d 70  then, is to comp
28860 75 74 65 20 65 6e 74 72 69 65 73 20 66 6f 72 20  ute entries for 
28870 22 78 22 20 77 69 74 68 20 61 6e 20 22 69 6e 64  "x" with an "ind
28880 22 20 6f 66 20 30 2e 0a 0a 3c 70 3e 54 68 65 20  " of 0...<p>The 
28890 73 6f 6c 76 65 72 20 77 6f 72 6b 73 20 62 79 20  solver works by 
288a0 61 64 64 69 6e 67 20 6e 65 77 20 65 6e 74 72 69  adding new entri
288b0 65 73 20 74 6f 20 74 68 65 20 22 78 22 20 72 65  es to the "x" re
288c0 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e 0a 47  cursive table..G
288d0 69 76 65 6e 20 70 72 69 6f 72 20 65 6e 74 72 69  iven prior entri
288e0 65 73 2c 20 74 68 65 20 72 65 63 75 72 73 69 76  es, the recursiv
288f0 65 2d 73 65 6c 65 63 74 20 74 72 69 65 73 20 74  e-select tries t
28900 6f 20 66 69 6c 6c 20 69 6e 20 61 20 73 69 6e 67  o fill in a sing
28910 6c 65 20 6e 65 77 0a 70 6f 73 69 74 69 6f 6e 20  le new.position 
28920 77 69 74 68 20 61 6c 6c 20 76 61 6c 75 65 73 20  with all values 
28930 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 39 20  between 1 and 9 
28940 74 68 61 74 20 61 63 74 75 61 6c 6c 79 20 77 6f  that actually wo
28950 72 6b 20 69 6e 20 74 68 61 74 0a 70 6f 73 69 74  rk in that.posit
28960 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d 70 6c 69  ion.  The compli
28970 63 61 74 65 64 20 22 4e 4f 54 20 45 58 49 53 54  cated "NOT EXIST
28980 53 22 20 73 75 62 71 75 65 72 79 20 69 73 20 74  S" subquery is t
28990 68 65 20 6d 61 67 69 63 20 74 68 61 74 0a 66 69  he magic that.fi
289a0 67 75 72 65 73 20 6f 75 74 20 77 68 65 74 68 65  gures out whethe
289b0 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 63 61  r or not each ca
289c0 6e 64 69 64 61 74 65 20 22 73 22 20 73 74 72 69  ndidate "s" stri
289d0 6e 67 20 69 73 20 61 20 76 61 6c 69 64 0a 73 75  ng is a valid.su
289e0 64 6f 6b 75 20 70 75 7a 7a 6c 65 20 6f 72 20 6e  doku puzzle or n
289f0 6f 74 2e 0a 0a 3c 70 3e 54 68 65 20 66 69 6e 61  ot...<p>The fina
28a00 6c 20 61 6e 73 77 65 72 20 69 73 20 66 6f 75 6e  l answer is foun
28a10 64 20 62 79 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  d by looking for
28a20 20 61 20 73 74 72 69 6e 67 20 77 69 74 68 20 69   a string with i
28a30 6e 64 3d 3d 30 2e 0a 49 66 20 74 68 65 20 6f 72  nd==0..If the or
28a40 69 67 69 6e 61 6c 20 73 75 64 6f 6b 75 20 70 72  iginal sudoku pr
28a50 6f 62 6c 65 6d 20 64 69 64 20 6e 6f 74 20 68 61  oblem did not ha
28a60 76 65 20 61 20 75 6e 69 71 75 65 20 73 6f 6c 75  ve a unique solu
28a70 74 69 6f 6e 2c 20 74 68 65 6e 0a 74 68 65 20 71  tion, then.the q
28a80 75 65 72 79 20 77 69 6c 6c 20 72 65 74 75 72 6e  uery will return
28a90 20 61 6c 6c 20 70 6f 73 73 69 62 6c 65 20 73 6f   all possible so
28aa0 6c 75 74 69 6f 6e 73 2e 20 20 49 66 20 74 68 65  lutions.  If the
28ab0 20 6f 72 69 67 69 6e 61 6c 20 70 72 6f 62 6c 65   original proble
28ac0 6d 0a 77 61 73 20 75 6e 73 6f 6c 76 61 62 6c 65  m.was unsolvable
28ad0 2c 20 74 68 65 6e 20 6e 6f 20 72 6f 77 73 20 77  , then no rows w
28ae0 69 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64 2e  ill be returned.
28af0 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20    In this case, 
28b00 74 68 65 20 75 6e 69 71 75 65 0a 61 6e 73 77 65  the unique.answe
28b10 72 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  r is:..<blockquo
28b20 74 65 3e 0a 35 33 34 36 37 38 39 31 32 36 37 32  te>.534678912672
28b30 31 39 35 33 34 38 31 39 38 33 34 32 35 36 37 38  1953481983425678
28b40 35 39 37 36 31 34 32 33 34 32 36 38 35 33 37 39  5976142342685379
28b50 31 37 31 33 39 32 34 38 35 36 39 36 31 35 33 37  1713924856961537
28b60 32 38 34 32 38 37 34 31 39 36 33 35 33 34 35 32  2842874196353452
28b70 38 36 31 37 39 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  86179.</blockquo
28b80 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 73 6f 6c 75  te>..<p>The solu
28b90 74 69 6f 6e 20 77 61 73 20 63 6f 6d 70 75 74 65  tion was compute
28ba0 64 20 69 6e 20 6c 65 73 73 20 74 68 61 6e 20 33  d in less than 3
28bb0 30 30 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20  00 milliseconds 
28bc0 6f 6e 20 61 20 6d 6f 64 65 72 6e 0a 77 6f 72 6b  on a modern.work
28bd0 73 74 61 74 69 6f 6e 2e 0a 0a 3c 68 33 3e 4c 69  station...<h3>Li
28be0 6d 69 74 61 74 69 6f 6e 73 20 41 6e 64 20 43 61  mitations And Ca
28bf0 76 65 61 74 73 3c 2f 68 33 3e 0a 0a 3c 75 6c 3e  veats</h3>..<ul>
28c00 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20 57 49 54  .<li><p>.The WIT
28c10 48 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20  H clause cannot 
28c20 62 65 20 75 73 65 64 20 77 69 74 68 69 6e 20 61  be used within a
28c30 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   [CREATE TRIGGER
28c40 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20 57  ]..<li><p>.The W
28c50 49 54 48 20 63 6c 61 75 73 65 20 6d 75 73 74 20  ITH clause must 
28c60 61 70 70 65 61 72 20 61 74 20 74 68 65 20 62 65  appear at the be
28c70 67 69 6e 6e 69 6e 67 20 6f 66 20 61 20 74 6f 70  ginning of a top
28c80 2d 6c 65 76 65 6c 20 5b 53 45 4c 45 43 54 5d 20  -level [SELECT] 
28c90 73 74 61 74 65 6d 65 6e 74 0a 6f 72 20 61 74 20  statement.or at 
28ca0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
28cb0 20 61 20 73 75 62 71 75 65 72 79 2e 20 20 54 68   a subquery.  Th
28cc0 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 63 61  e WITH clause ca
28cd0 6e 6e 6f 74 20 62 65 20 70 72 65 70 65 6e 64 65  nnot be prepende
28ce0 64 20 74 6f 0a 74 68 65 20 73 65 63 6f 6e 64 20  d to.the second 
28cf0 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20 53 45  or subsequent SE
28d00 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f  LECT statement o
28d10 66 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 73 65  f a [compound se
28d20 6c 65 63 74 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54  lect]..<li><p>.T
28d30 68 65 20 53 51 4c 3a 31 39 39 39 20 73 70 65 63  he SQL:1999 spec
28d40 20 72 65 71 75 69 72 65 73 20 74 68 61 74 20 74   requires that t
28d50 68 65 20 52 45 43 55 52 53 49 56 45 20 6b 65 79  he RECURSIVE key
28d60 77 6f 72 64 20 66 6f 6c 6c 6f 77 20 57 49 54 48  word follow WITH
28d70 20 69 6e 20 61 6e 79 0a 57 49 54 48 20 63 6c 61   in any.WITH cla
28d80 75 73 65 20 74 68 61 74 20 69 6e 63 6c 75 64 65  use that include
28d90 73 20 61 20 72 65 63 75 72 73 69 76 65 20 63 6f  s a recursive co
28da0 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
28db0 73 73 69 6f 6e 2e 20 20 48 6f 77 65 76 65 72 2c  ssion.  However,
28dc0 20 66 6f 72 0a 63 6f 6d 70 61 74 69 62 69 6c 69   for.compatibili
28dd0 74 79 20 77 69 74 68 20 53 71 6c 53 65 72 76 65  ty with SqlServe
28de0 72 20 61 6e 64 20 4f 72 61 63 6c 65 2c 20 53 51  r and Oracle, SQ
28df0 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 65 6e  Lite does not en
28e00 66 6f 72 63 65 20 74 68 69 73 20 72 75 6c 65 2e  force this rule.
28e10 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  .</ul>..<tcl>.##
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 23 23 23 23 23 23 23  ################
28e50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28e60 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
28e70 63 74 69 6f 6e 20 53 45 4c 45 43 54 20 73 65 6c  ction SELECT sel
28e80 65 63 74 20 7b 53 45 4c 45 43 54 20 71 75 65 72  ect {SELECT quer
28e90 79 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  y}..RecursiveBub
28ea0 62 6c 65 44 69 61 67 72 61 6d 20 73 65 6c 65 63  bleDiagram selec
28eb0 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 0a  t-stmt.</tcl>...
28ec0 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20 73 74  <p>The SELECT st
28ed0 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20  atement is used 
28ee0 74 6f 20 71 75 65 72 79 20 74 68 65 20 64 61 74  to query the dat
28ef0 61 62 61 73 65 2e 20 20 54 68 65 0a 72 65 73 75  abase.  The.resu
28f00 6c 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 69  lt of a SELECT i
28f10 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72  s zero or more r
28f20 6f 77 73 20 6f 66 20 64 61 74 61 20 77 68 65 72  ows of data wher
28f30 65 20 65 61 63 68 20 72 6f 77 0a 68 61 73 20 61  e each row.has a
28f40 20 66 69 78 65 64 20 6e 75 6d 62 65 72 20 6f 66   fixed number of
28f50 20 63 6f 6c 75 6d 6e 73 2e 20 20 41 20 53 45 4c   columns.  A SEL
28f60 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 64 6f  ECT statement do
28f70 65 73 20 6e 6f 74 20 6d 61 6b 65 0a 61 6e 79 20  es not make.any 
28f80 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64  changes to the d
28f90 61 74 61 62 61 73 65 2e 0a 0a 3c 70 3e 54 68 65  atabase...<p>The
28fa0 20 22 5b 73 65 6c 65 63 74 2d 73 74 6d 74 5d 22   "[select-stmt]"
28fb0 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 20   syntax diagram 
28fc0 61 62 6f 76 65 20 61 74 74 65 6d 70 74 73 20 74  above attempts t
28fd0 6f 20 73 68 6f 77 20 61 73 20 6d 75 63 68 20 6f  o show as much o
28fe0 66 20 74 68 65 0a 53 45 4c 45 43 54 20 73 74 61  f the.SELECT sta
28ff0 74 65 6d 65 6e 74 20 73 79 6e 74 61 78 20 61 73  tement syntax as
29000 20 70 6f 73 73 69 62 6c 65 20 69 6e 20 61 20 73   possible in a s
29010 69 6e 67 6c 65 20 64 69 61 67 72 61 6d 2c 20 62  ingle diagram, b
29020 65 63 61 75 73 65 20 73 6f 6d 65 20 72 65 61 64  ecause some read
29030 65 72 73 0a 66 69 6e 64 20 74 68 61 74 20 68 65  ers.find that he
29040 6c 70 66 75 6c 2e 20 20 54 68 65 20 66 6f 6c 6c  lpful.  The foll
29050 6f 77 69 6e 67 20 22 5b 66 61 63 74 6f 72 65 64  owing "[factored
29060 2d 73 65 6c 65 63 74 2d 73 74 6d 74 5d 22 20 69  -select-stmt]" i
29070 73 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65  s an alternative
29080 0a 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73  .syntax diagrams
29090 20 74 68 61 74 20 65 78 70 72 65 73 73 65 73 20   that expresses 
290a0 74 68 65 20 73 61 6d 65 20 73 79 6e 74 61 78 20  the same syntax 
290b0 62 75 74 20 74 72 69 65 73 20 74 6f 20 62 72 65  but tries to bre
290c0 61 6b 20 74 68 65 20 73 79 6e 74 61 78 20 0a 64  ak the syntax .d
290d0 6f 77 6e 20 69 6e 74 6f 20 73 6d 61 6c 6c 65 72  own into smaller
290e0 20 63 68 75 6e 6b 73 2e 0a 0a 3c 74 63 6c 3e 0a   chunks...<tcl>.
290f0 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
29100 69 61 67 72 61 6d 20 2d 2d 69 6e 69 74 69 61 6c  iagram --initial
29110 6c 79 2d 68 69 64 64 65 6e 20 66 61 63 74 6f 72  ly-hidden factor
29120 65 64 2d 73 65 6c 65 63 74 2d 73 74 6d 74 20 73  ed-select-stmt s
29130 65 6c 65 63 74 2d 63 6f 72 65 0a 3c 2f 74 63 6c  elect-core.</tcl
29140 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20  >..<p>Note that 
29150 74 68 65 72 65 20 61 72 65 20 70 61 74 68 73 20  there are paths 
29160 74 68 72 6f 75 67 68 20 74 68 65 20 73 79 6e 74  through the synt
29170 61 78 20 64 69 61 67 72 61 6d 73 20 74 68 61 74  ax diagrams that
29180 0a 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  .are not allowed
29190 20 69 6e 20 70 72 61 63 74 69 63 65 2e 20 20 53   in practice.  S
291a0 6f 6d 65 20 65 78 61 6d 70 6c 65 73 3a 0a 3c 75  ome examples:.<u
291b0 6c 3e 0a 3c 6c 69 3e 41 20 5b 56 41 4c 55 45 53  l>.<li>A [VALUES
291c0 5d 20 63 6c 61 75 73 65 20 63 61 6e 20 62 65 20  ] clause can be 
291d0 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
291e0 74 20 69 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64  t in a [compound
291f0 20 53 45 4c 45 43 54 5d 0a 20 20 20 20 74 68 61   SELECT].    tha
29200 74 20 75 73 65 73 20 61 20 5b 57 49 54 48 5d 20  t uses a [WITH] 
29210 63 6c 61 75 73 65 2c 20 62 75 74 20 61 20 5b 73  clause, but a [s
29220 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20 74 68  imple SELECT] th
29230 61 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 0a 20  at consists of. 
29240 20 20 20 6a 75 73 74 20 61 20 5b 56 41 4c 55 45     just a [VALUE
29250 53 5d 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74  S] clause cannot
29260 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79 20   be preceded by 
29270 61 20 5b 57 49 54 48 5d 20 63 6c 61 75 73 65 2e  a [WITH] clause.
29280 0a 3c 6c 69 3e 54 68 65 20 5b 57 49 54 48 5d 20  .<li>The [WITH] 
29290 63 6c 61 75 73 65 20 6d 75 73 74 20 6f 63 63 75  clause must occu
292a0 72 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20 53  r on the first S
292b0 45 4c 45 43 54 20 6f 66 20 61 20 5b 63 6f 6d 70  ELECT of a [comp
292c0 6f 75 6e 64 20 53 45 4c 45 43 54 5d 2e 0a 20 20  ound SELECT]..  
292d0 20 20 49 74 20 63 61 6e 6e 6f 74 20 66 6f 6c 6c    It cannot foll
292e0 6f 77 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 2d 6f  ow a [compound-o
292f0 70 65 72 61 74 6f 72 5d 2e 0a 3c 2f 75 6c 3e 0a  perator]..</ul>.
29300 54 68 65 73 65 20 61 6e 64 20 6f 74 68 65 72 20  These and other 
29310 73 69 6d 69 6c 61 72 20 73 79 6e 74 61 78 20 72  similar syntax r
29320 65 73 74 72 69 63 74 69 6f 6e 73 20 61 72 65 20  estrictions are 
29330 64 65 73 63 72 69 62 65 64 20 69 6e 20 74 68 65  described in the
29340 20 74 65 78 74 2e 0a 0a 3c 70 3e 54 68 65 20 53   text...<p>The S
29350 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
29360 69 73 20 74 68 65 20 6d 6f 73 74 20 63 6f 6d 70  is the most comp
29370 6c 69 63 61 74 65 64 20 63 6f 6d 6d 61 6e 64 20  licated command 
29380 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e 67 75  in the SQL langu
29390 61 67 65 2e 0a 54 6f 20 6d 61 6b 65 20 74 68 65  age..To make the
293a0 20 64 65 73 63 72 69 70 74 69 6f 6e 20 65 61 73   description eas
293b0 69 65 72 20 74 6f 20 66 6f 6c 6c 6f 77 2c 20 73  ier to follow, s
293c0 6f 6d 65 20 6f 66 20 74 68 65 20 70 61 73 73 61  ome of the passa
293d0 67 65 73 20 62 65 6c 6f 77 20 64 65 73 63 72 69  ges below descri
293e0 62 65 0a 74 68 65 20 77 61 79 20 74 68 65 20 64  be.the way the d
293f0 61 74 61 20 72 65 74 75 72 6e 65 64 20 62 79 20  ata returned by 
29400 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
29410 6e 74 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  nt is determined
29420 20 61 73 20 61 20 73 65 72 69 65 73 20 6f 66 0a   as a series of.
29430 73 74 65 70 73 2e 20 49 74 20 69 73 20 69 6d 70  steps. It is imp
29440 6f 72 74 61 6e 74 20 74 6f 20 6b 65 65 70 20 69  ortant to keep i
29450 6e 20 6d 69 6e 64 20 74 68 61 74 20 74 68 69 73  n mind that this
29460 20 69 73 20 70 75 72 65 6c 79 20 69 6c 6c 75 73   is purely illus
29470 74 72 61 74 69 76 65 20 2d 0a 69 6e 20 70 72 61  trative -.in pra
29480 63 74 69 63 65 20 6e 65 69 74 68 65 72 20 53 51  ctice neither SQ
29490 4c 69 74 65 20 6e 6f 72 20 61 6e 79 20 6f 74 68  Lite nor any oth
294a0 65 72 20 53 51 4c 20 65 6e 67 69 6e 65 20 69 73  er SQL engine is
294b0 20 72 65 71 75 69 72 65 64 20 74 6f 20 66 6f 6c   required to fol
294c0 6c 6f 77 20 0a 74 68 69 73 20 6f 72 20 61 6e 79  low .this or any
294d0 20 6f 74 68 65 72 20 73 70 65 63 69 66 69 63 20   other specific 
294e0 70 72 6f 63 65 73 73 2e 0a 0a 3c 74 63 6c 3e 68  process...<tcl>h
294f0 64 5f 66 72 61 67 6d 65 6e 74 20 73 69 6d 70 6c  d_fragment simpl
29500 65 73 65 6c 65 63 74 20 7b 73 69 6d 70 6c 65 20  eselect {simple 
29510 53 45 4c 45 43 54 7d 3c 2f 74 63 6c 3e 0a 3c 68  SELECT}</tcl>.<h
29520 33 3e 53 69 6d 70 6c 65 20 53 65 6c 65 63 74 20  3>Simple Select 
29530 50 72 6f 63 65 73 73 69 6e 67 3c 2f 68 33 3e 0a  Processing</h3>.
29540 0a 3c 70 3e 54 68 65 20 63 6f 72 65 20 6f 66 20  .<p>The core of 
29550 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
29560 6e 74 20 69 73 20 61 20 22 73 69 6d 70 6c 65 20  nt is a "simple 
29570 53 45 4c 45 43 54 22 20 73 68 6f 77 6e 20 62 79  SELECT" shown by
29580 20 74 68 65 0a 5b 73 65 6c 65 63 74 2d 63 6f 72   the.[select-cor
29590 65 5d 20 61 6e 64 20 5b 73 69 6d 70 6c 65 2d 73  e] and [simple-s
295a0 65 6c 65 63 74 2d 73 74 6d 74 5d 20 73 79 6e 74  elect-stmt] synt
295b0 61 78 20 64 69 61 67 72 61 6d 73 20 62 65 6c 6f  ax diagrams belo
295c0 77 2e 20 20 0a 49 6e 20 70 72 61 63 74 69 63 65  w.  .In practice
295d0 2c 20 6d 6f 73 74 20 53 45 4c 45 43 54 20 73 74  , most SELECT st
295e0 61 74 65 6d 65 6e 74 73 20 61 72 65 20 73 69 6d  atements are sim
295f0 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
29600 6d 65 6e 74 73 2e 0a 0a 3c 74 63 6c 3e 0a 52 65  ments...<tcl>.Re
29610 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
29620 67 72 61 6d 20 73 69 6d 70 6c 65 2d 73 65 6c 65  gram simple-sele
29630 63 74 2d 73 74 6d 74 20 73 65 6c 65 63 74 2d 63  ct-stmt select-c
29640 6f 72 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 47  ore.</tcl>..<p>G
29650 65 6e 65 72 61 74 69 6e 67 20 74 68 65 20 72 65  enerating the re
29660 73 75 6c 74 73 20 6f 66 20 61 20 73 69 6d 70 6c  sults of a simpl
29670 65 20 53 45 4c 45 43 54 0a 73 74 61 74 65 6d 65  e SELECT.stateme
29680 6e 74 20 69 73 20 70 72 65 73 65 6e 74 65 64 20  nt is presented 
29690 61 73 20 61 20 66 6f 75 72 20 73 74 65 70 20 70  as a four step p
296a0 72 6f 63 65 73 73 20 69 6e 20 74 68 65 20 64 65  rocess in the de
296b0 73 63 72 69 70 74 69 6f 6e 20 62 65 6c 6f 77 3a  scription below:
296c0 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70  ..<ol>.  <li> <p
296d0 3e 5b 46 52 4f 4d 20 63 6c 61 75 73 65 5d 20 70  >[FROM clause] p
296e0 72 6f 63 65 73 73 69 6e 67 3a 20 54 68 65 20 69  rocessing: The i
296f0 6e 70 75 74 20 64 61 74 61 20 66 6f 72 20 74 68  nput data for th
29700 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  e simple SELECT 
29710 69 73 0a 20 20 20 20 20 20 20 64 65 74 65 72 6d  is.       determ
29720 69 6e 65 64 2e 20 54 68 65 20 69 6e 70 75 74 20  ined. The input 
29730 64 61 74 61 20 69 73 20 65 69 74 68 65 72 20 69  data is either i
29740 6d 70 6c 69 63 69 74 6c 79 20 61 20 73 69 6e 67  mplicitly a sing
29750 6c 65 20 72 6f 77 20 77 69 74 68 20 30 0a 20 20  le row with 0.  
29760 20 20 20 20 20 63 6f 6c 75 6d 6e 73 20 28 69 66       columns (if
29770 20 74 68 65 72 65 20 69 73 20 6e 6f 20 46 52 4f   there is no FRO
29780 4d 20 63 6c 61 75 73 65 29 20 6f 72 20 69 73 20  M clause) or is 
29790 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
297a0 65 20 46 52 4f 4d 0a 20 20 20 20 20 20 20 63 6c  e FROM.       cl
297b0 61 75 73 65 2e 0a 20 20 3c 6c 69 3e 20 3c 70 3e  ause..  <li> <p>
297c0 5b 57 48 45 52 45 20 63 6c 61 75 73 65 5d 20 70  [WHERE clause] p
297d0 72 6f 63 65 73 73 69 6e 67 3a 20 54 68 65 20 69  rocessing: The i
297e0 6e 70 75 74 20 64 61 74 61 20 69 73 20 66 69 6c  nput data is fil
297f0 74 65 72 65 64 20 75 73 69 6e 67 20 74 68 65 20  tered using the 
29800 57 48 45 52 45 0a 20 20 20 20 20 20 20 63 6c 61  WHERE.       cla
29810 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  use expression. 
29820 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 47 52 4f   .  <li> <p>[GRO
29830 55 50 20 42 59 7c 47 52 4f 55 50 20 42 59 2c 20  UP BY|GROUP BY, 
29840 48 41 56 49 4e 47 20 61 6e 64 20 72 65 73 75 6c  HAVING and resul
29850 74 2d 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73  t-column express
29860 69 6f 6e 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a  ion] processing:
29870 20 0a 20 20 20 20 20 20 20 54 68 65 20 73 65 74   .       The set
29880 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
29890 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20 61  is computed by a
298a0 67 67 72 65 67 61 74 69 6e 67 20 74 68 65 20 64  ggregating the d
298b0 61 74 61 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  ata according to
298c0 0a 20 20 20 20 20 20 20 61 6e 79 20 47 52 4f 55  .       any GROU
298d0 50 20 42 59 20 63 6c 61 75 73 65 20 61 6e 64 20  P BY clause and 
298e0 63 61 6c 63 75 6c 61 74 69 6e 67 20 74 68 65 20  calculating the 
298f0 72 65 73 75 6c 74 2d 73 65 74 20 65 78 70 72 65  result-set expre
29900 73 73 69 6f 6e 73 20 66 6f 72 20 74 68 65 0a 20  ssions for the. 
29910 20 20 20 20 20 20 72 6f 77 73 20 6f 66 20 74 68        rows of th
29920 65 20 66 69 6c 74 65 72 65 64 20 69 6e 70 75 74  e filtered input
29930 20 64 61 74 61 73 65 74 2e 20 20 0a 20 20 3c 6c   dataset.  .  <l
29940 69 3e 20 3c 70 3e 5b 44 49 53 54 49 4e 43 54 7c  i> <p>[DISTINCT|
29950 44 49 53 54 49 4e 43 54 2f 41 4c 4c 20 6b 65 79  DISTINCT/ALL key
29960 77 6f 72 64 5d 20 70 72 6f 63 65 73 73 69 6e 67  word] processing
29970 3a 20 49 66 20 74 68 65 20 71 75 65 72 79 20 69  : If the query i
29980 73 20 61 20 22 53 45 4c 45 43 54 0a 20 20 20 20  s a "SELECT.    
29990 20 20 20 44 49 53 54 49 4e 43 54 22 20 71 75 65     DISTINCT" que
299a0 72 79 2c 20 64 75 70 6c 69 63 61 74 65 20 72 6f  ry, duplicate ro
299b0 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66  ws are removed f
299c0 72 6f 6d 20 74 68 65 20 73 65 74 20 6f 66 20 72  rom the set of r
299d0 65 73 75 6c 74 20 72 6f 77 73 2e 0a 3c 2f 6f 6c  esult rows..</ol
299e0 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20  >..<p>There are 
299f0 74 77 6f 20 74 79 70 65 73 20 6f 66 20 73 69 6d  two types of sim
29a00 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
29a10 6d 65 6e 74 20 2d 20 61 67 67 72 65 67 61 74 65  ment - aggregate
29a20 20 61 6e 64 20 0a 6e 6f 6e 2d 61 67 67 72 65 67   and .non-aggreg
29a30 61 74 65 20 71 75 65 72 69 65 73 2e 20 5e 41 20  ate queries. ^A 
29a40 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
29a50 61 74 65 6d 65 6e 74 20 69 73 20 61 6e 20 61 67  atement is an ag
29a60 67 72 65 67 61 74 65 20 71 75 65 72 79 20 69 66  gregate query if
29a70 0a 69 74 20 63 6f 6e 74 61 69 6e 73 20 65 69 74  .it contains eit
29a80 68 65 72 20 61 20 47 52 4f 55 50 20 42 59 20 63  her a GROUP BY c
29a90 6c 61 75 73 65 20 6f 72 20 6f 6e 65 20 6f 72 20  lause or one or 
29aa0 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
29ab0 75 6e 63 74 69 6f 6e 73 0a 69 6e 20 74 68 65 20  unctions.in the 
29ac0 72 65 73 75 6c 74 2d 73 65 74 2e 20 5e 4f 74 68  result-set. ^Oth
29ad0 65 72 77 69 73 65 2c 20 69 66 20 61 20 73 69 6d  erwise, if a sim
29ae0 70 6c 65 20 53 45 4c 45 43 54 20 63 6f 6e 74 61  ple SELECT conta
29af0 69 6e 73 20 6e 6f 20 61 67 67 72 65 67 61 74 65  ins no aggregate
29b00 0a 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20  .functions or a 
29b10 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2c  GROUP BY clause,
29b20 20 69 74 20 69 73 20 61 20 6e 6f 6e 2d 61 67 67   it is a non-agg
29b30 72 65 67 61 74 65 20 71 75 65 72 79 2e 0a 0a 3c  regate query...<
29b40 70 3e 3c 62 3e 31 2e 20 44 65 74 65 72 6d 69 6e  p><b>1. Determin
29b50 61 74 69 6f 6e 20 6f 66 20 69 6e 70 75 74 20 64  ation of input d
29b60 61 74 61 20 28 46 52 4f 4d 20 63 6c 61 75 73 65  ata (FROM clause
29b70 20 70 72 6f 63 65 73 73 69 6e 67 29 2e 3c 2f 62   processing).</b
29b80 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  >.<tcl>hd_fragme
29b90 6e 74 20 66 72 6f 6d 63 6c 61 75 73 65 3c 2f 74  nt fromclause</t
29ba0 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77  cl>.<tcl>hd_keyw
29bb0 6f 72 64 73 20 7b 46 52 4f 4d 20 63 6c 61 75 73  ords {FROM claus
29bc0 65 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  e}</tcl>..<p>The
29bd0 20 69 6e 70 75 74 20 64 61 74 61 20 75 73 65 64   input data used
29be0 20 62 79 20 61 20 73 69 6d 70 6c 65 20 53 45 4c   by a simple SEL
29bf0 45 43 54 20 71 75 65 72 79 20 69 73 20 61 20 73  ECT query is a s
29c00 65 74 20 6f 66 20 3c 69 3e 4e 3c 2f 69 3e 20 72  et of <i>N</i> r
29c10 6f 77 73 20 0a 65 61 63 68 20 3c 69 3e 4d 3c 2f  ows .each <i>M</
29c20 69 3e 20 63 6f 6c 75 6d 6e 73 20 77 69 64 65 2e  i> columns wide.
29c30 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 46 52  ..<p>^(If the FR
29c40 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69  OM clause is omi
29c50 74 74 65 64 20 66 72 6f 6d 20 61 20 73 69 6d 70  tted from a simp
29c60 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
29c70 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 0a 69  ent, then the .i
29c80 6e 70 75 74 20 64 61 74 61 20 69 73 20 69 6d 70  nput data is imp
29c90 6c 69 63 69 74 6c 79 20 61 20 73 69 6e 67 6c 65  licitly a single
29ca0 20 72 6f 77 20 7a 65 72 6f 20 63 6f 6c 75 6d 6e   row zero column
29cb0 73 20 77 69 64 65 29 5e 20 28 69 2e 65 2e 20 3c  s wide)^ (i.e. <
29cc0 69 3e 4e 3c 2f 69 3e 3d 31 20 61 6e 64 0a 3c 69  i>N</i>=1 and.<i
29cd0 3e 4d 3c 2f 69 3e 3d 30 29 2e 0a 0a 3c 70 3e 49  >M</i>=0)...<p>I
29ce0 66 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  f a FROM clause 
29cf0 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  is specified, th
29d00 65 20 64 61 74 61 20 6f 6e 20 77 68 69 63 68 20  e data on which 
29d10 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  a simple SELECT 
29d20 71 75 65 72 79 0a 6f 70 65 72 61 74 65 73 20 63  query.operates c
29d30 6f 6d 65 73 20 66 72 6f 6d 20 74 68 65 20 6f 6e  omes from the on
29d40 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73  e or more tables
29d50 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 28   or subqueries (
29d60 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
29d70 73 0a 69 6e 20 70 61 72 65 6e 74 68 65 73 69 73  s.in parenthesis
29d80 29 20 73 70 65 63 69 66 69 65 64 20 66 6f 6c 6c  ) specified foll
29d90 6f 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 6b  owing the FROM k
29da0 65 79 77 6f 72 64 2e 20 5e 41 20 73 75 62 71 75  eyword. ^A subqu
29db0 65 72 79 20 73 70 65 63 69 66 69 65 64 0a 69 6e  ery specified.in
29dc0 20 74 68 65 20 74 61 62 6c 65 2d 6f 72 2d 73 75   the table-or-su
29dd0 62 71 75 65 72 79 20 66 6f 6c 6c 6f 77 69 6e 67  bquery following
29de0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
29df0 20 69 6e 20 61 20 0a 73 69 6d 70 6c 65 20 53 45   in a .simple SE
29e00 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
29e10 73 0a 68 61 6e 64 6c 65 64 20 61 73 20 69 66 20  s.handled as if 
29e20 69 74 20 77 61 73 20 61 20 74 61 62 6c 65 20 63  it was a table c
29e30 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 64 61  ontaining the da
29e40 74 61 20 72 65 74 75 72 6e 65 64 20 62 79 20 65  ta returned by e
29e50 78 65 63 75 74 69 6e 67 20 74 68 65 0a 73 75 62  xecuting the.sub
29e60 71 75 65 72 79 20 73 74 61 74 65 6d 65 6e 74 2e  query statement.
29e70 20 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66   ^Each column of
29e80 20 74 68 65 20 73 75 62 71 75 65 72 79 20 68 61   the subquery ha
29e90 73 20 74 68 65 0a 5b 63 6f 6c 6c 61 74 69 6f 6e  s the.[collation
29ea0 7c 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65  |collation seque
29eb0 6e 63 65 5d 20 61 6e 64 20 5b 61 66 66 69 6e 69  nce] and [affini
29ec0 74 79 5d 20 6f 66 20 74 68 65 20 63 6f 72 72 65  ty] of the corre
29ed0 73 70 6f 6e 64 69 6e 67 20 65 78 70 72 65 73 73  sponding express
29ee0 69 6f 6e 0a 69 6e 20 74 68 65 20 73 75 62 71 75  ion.in the subqu
29ef0 65 72 79 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  ery statement...
29f00 3c 70 3e 5e 49 66 20 74 68 65 72 65 20 69 73 20  <p>^If there is 
29f10 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 74 61  only a single ta
29f20 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20  ble or subquery 
29f30 69 6e 20 74 68 65 20 46 52 4f 4d 0a 63 6c 61 75  in the FROM.clau
29f40 73 65 2c 20 74 68 65 6e 20 74 68 65 20 69 6e 70  se, then the inp
29f50 75 74 20 64 61 74 61 20 75 73 65 64 20 62 79 20  ut data used by 
29f60 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
29f70 6d 65 6e 74 20 69 73 20 74 68 65 20 63 6f 6e 74  ment is the cont
29f80 65 6e 74 73 20 6f 66 20 74 68 65 0a 6e 61 6d 65  ents of the.name
29f90 64 20 74 61 62 6c 65 2e 20 5e 49 66 20 74 68 65  d table. ^If the
29fa0 72 65 20 69 73 20 6d 6f 72 65 20 74 68 61 6e 20  re is more than 
29fb0 6f 6e 65 20 74 61 62 6c 65 20 6f 72 20 73 75 62  one table or sub
29fc0 71 75 65 72 79 20 69 6e 20 46 52 4f 4d 20 63 6c  query in FROM cl
29fd0 61 75 73 65 0a 74 68 65 6e 20 74 68 65 20 63 6f  ause.then the co
29fe0 6e 74 65 6e 74 73 20 6f 66 20 61 6c 6c 20 74 61  ntents of all ta
29ff0 62 6c 65 73 20 61 6e 64 2f 6f 72 20 73 75 62 71  bles and/or subq
2a000 75 65 72 69 65 73 0a 61 72 65 20 6a 6f 69 6e 65  ueries.are joine
2a010 64 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20  d into a single 
2a020 64 61 74 61 73 65 74 20 66 6f 72 20 74 68 65 20  dataset for the 
2a030 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
2a040 61 74 65 6d 65 6e 74 20 74 6f 20 6f 70 65 72 61  atement to opera
2a050 74 65 20 6f 6e 2e 0a 45 78 61 63 74 6c 79 20 68  te on..Exactly h
2a060 6f 77 20 74 68 65 20 64 61 74 61 20 69 73 20 63  ow the data is c
2a070 6f 6d 62 69 6e 65 64 20 64 65 70 65 6e 64 73 20  ombined depends 
2a080 6f 6e 20 74 68 65 20 73 70 65 63 69 66 69 63 20  on the specific 
2a090 5b 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 5d 20  [join-operator] 
2a0a0 61 6e 64 0a 5b 6a 6f 69 6e 2d 63 6f 6e 73 74 72  and.[join-constr
2a0b0 61 69 6e 74 5d 20 75 73 65 64 20 74 6f 20 63 6f  aint] used to co
2a0c0 6e 6e 65 63 74 20 74 68 65 20 74 61 62 6c 65 73  nnect the tables
2a0d0 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 74   or subqueries t
2a0e0 6f 67 65 74 68 65 72 2e 0a 0a 3c 70 3e 41 6c 6c  ogether...<p>All
2a0f0 20 6a 6f 69 6e 73 20 69 6e 20 53 51 4c 69 74 65   joins in SQLite
2a100 20 61 72 65 20 62 61 73 65 64 20 6f 6e 20 74 68   are based on th
2a110 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
2a120 75 63 74 20 6f 66 20 74 68 65 20 6c 65 66 74 20  uct of the left 
2a130 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64 20 64  and.right-hand d
2a140 61 74 61 73 65 74 73 2e 20 5e 54 68 65 20 63 6f  atasets. ^The co
2a150 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 63 61 72  lumns of the car
2a160 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 64  tesian product d
2a170 61 74 61 73 65 74 20 61 72 65 2c 20 69 6e 20 0a  ataset are, in .
2a180 6f 72 64 65 72 2c 20 61 6c 6c 20 74 68 65 20 63  order, all the c
2a190 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65  olumns of the le
2a1a0 66 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20  ft-hand dataset 
2a1b0 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6c 6c 20  followed by all 
2a1c0 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74  the columns.of t
2a1d0 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61  he right-hand da
2a1e0 74 61 73 65 74 2e 20 5e 54 68 65 72 65 20 69 73  taset. ^There is
2a1f0 20 61 20 72 6f 77 20 69 6e 20 74 68 65 20 63 61   a row in the ca
2a200 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20  rtesian product 
2a210 64 61 74 61 73 65 74 0a 66 6f 72 6d 65 64 20 62  dataset.formed b
2a220 79 20 63 6f 6d 62 69 6e 69 6e 67 20 65 61 63 68  y combining each
2a230 20 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61 74   unique combinat
2a240 69 6f 6e 20 6f 66 20 61 20 72 6f 77 20 66 72 6f  ion of a row fro
2a250 6d 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20  m the left-hand 
2a260 0a 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20  .and right-hand 
2a270 64 61 74 61 73 65 74 73 2e 20 5e 28 49 6e 20 6f  datasets. ^(In o
2a280 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74  ther words, if t
2a290 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 64 61 74  he left-hand dat
2a2a0 61 73 65 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  aset consists of
2a2b0 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c  .<i>N<sub><small
2a2c0 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73  >left</small></s
2a2d0 75 62 3e 3c 2f 69 3e 20 72 6f 77 73 20 6f 66 20  ub></i> rows of 
2a2e0 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c  .<i>M<sub><small
2a2f0 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73  >left</small></s
2a300 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c  ub></i> columns,
2a310 20 61 6e 64 20 74 68 65 20 72 69 67 68 74 2d 68   and the right-h
2a320 61 6e 64 20 64 61 74 61 73 65 74 20 6f 66 0a 3c  and dataset of.<
2a330 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72  i>N<sub><small>r
2a340 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75  ight</small></su
2a350 62 3e 3c 2f 69 3e 20 72 6f 77 73 20 6f 66 0a 3c  b></i> rows of.<
2a360 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72  i>M<sub><small>r
2a370 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75  ight</small></su
2a380 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c 20  b></i> columns, 
2a390 74 68 65 6e 20 74 68 65 20 63 61 72 74 65 73 69  then the cartesi
2a3a0 61 6e 20 70 72 6f 64 75 63 74 20 69 73 20 61 0a  an product is a.
2a3b0 64 61 74 61 73 65 74 20 6f 66 20 0a 3c 69 3e 4e  dataset of .<i>N
2a3c0 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74  <sub><small>left
2a3d0 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 26 74  </small></sub>&t
2a3e0 69 6d 65 73 3b 4e 3c 73 75 62 3e 3c 73 6d 61 6c  imes;N<sub><smal
2a3f0 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c  l>right</small><
2a400 2f 73 75 62 3e 3c 2f 69 3e 0a 72 6f 77 73 2c 20  /sub></i>.rows, 
2a410 65 61 63 68 20 63 6f 6e 74 61 69 6e 69 6e 67 20  each containing 
2a420 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c  .<i>M<sub><small
2a430 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73  >left</small></s
2a440 75 62 3e 2b 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c  ub>+M<sub><small
2a450 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f  >right</small></
2a460 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73  sub></i> columns
2a470 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  .)^..<p>^If the 
2a480 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 69 73  join-operator is
2a490 20 22 43 52 4f 53 53 20 4a 4f 49 4e 22 2c 20 22   "CROSS JOIN", "
2a4a0 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f  INNER JOIN", "JO
2a4b0 49 4e 22 20 6f 72 20 61 20 63 6f 6d 6d 61 0a 28  IN" or a comma.(
2a4c0 22 2c 22 29 20 61 6e 64 20 74 68 65 72 65 20 69  ",") and there i
2a4d0 73 20 6e 6f 20 4f 4e 20 6f 72 20 55 53 49 4e 47  s no ON or USING
2a4e0 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68   clause, then th
2a4f0 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
2a500 6a 6f 69 6e 20 69 73 0a 73 69 6d 70 6c 79 20 74  join is.simply t
2a510 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f  he cartesian pro
2a520 64 75 63 74 20 6f 66 20 74 68 65 20 6c 65 66 74  duct of the left
2a530 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20   and right-hand 
2a540 64 61 74 61 73 65 74 73 2e 20 0a 49 66 20 6a 6f  datasets. .If jo
2a550 69 6e 2d 6f 70 65 72 61 74 6f 72 20 64 6f 65 73  in-operator does
2a560 20 68 61 76 65 20 4f 4e 20 6f 72 20 55 53 49 4e   have ON or USIN
2a570 47 20 63 6c 61 75 73 65 73 2c 20 74 68 6f 73 65  G clauses, those
2a580 20 61 72 65 20 68 61 6e 64 6c 65 64 20 61 63 63   are handled acc
2a590 6f 72 64 69 6e 67 20 74 6f 0a 74 68 65 20 66 6f  ording to.the fo
2a5a0 6c 6c 6f 77 69 6e 67 20 62 75 6c 6c 65 74 20 70  llowing bullet p
2a5b0 6f 69 6e 74 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c  oints:..<ul>.  <
2a5c0 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65 72  li> <p>^(If ther
2a5d0 65 20 69 73 20 61 6e 20 4f 4e 20 63 6c 61 75 73  e is an ON claus
2a5e0 65 20 74 68 65 6e 20 74 68 65 20 4f 4e 20 65 78  e then the ON ex
2a5f0 70 72 65 73 73 69 6f 6e 20 69 73 0a 20 20 20 20  pression is.    
2a600 20 20 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72     evaluated for
2a610 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65   each row of the
2a620 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75   cartesian produ
2a630 63 74 20 61 73 20 61 20 0a 20 20 20 20 20 20 20  ct as a .       
2a640 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  [boolean express
2a650 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72 6f 77 73 20  ion]. Only rows 
2a660 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 65 78  for which the ex
2a670 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74  pression evaluat
2a680 65 73 20 74 6f 20 0a 20 20 20 20 20 20 20 74 72  es to .       tr
2a690 75 65 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  ue are included 
2a6a0 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74  from the dataset
2a6b0 2e 29 5e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e  .)^..  <li> <p>^
2a6c0 49 66 20 74 68 65 72 65 20 69 73 20 61 20 55 53  If there is a US
2a6d0 49 4e 47 20 63 6c 61 75 73 65 0a 20 20 20 20 20  ING clause.     
2a6e0 20 20 74 68 65 6e 20 65 61 63 68 20 6f 66 20 74    then each of t
2a6f0 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  he column names 
2a700 73 70 65 63 69 66 69 65 64 20 6d 75 73 74 20 65  specified must e
2a710 78 69 73 74 20 69 6e 20 74 68 65 20 64 61 74 61  xist in the data
2a720 73 65 74 73 20 74 6f 20 0a 20 20 20 20 20 20 20  sets to .       
2a730 62 6f 74 68 20 74 68 65 20 6c 65 66 74 20 61 6e  both the left an
2a740 64 20 72 69 67 68 74 20 6f 66 20 74 68 65 20 6a  d right of the j
2a750 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 2e 20 5e 28  oin-operator. ^(
2a760 46 6f 72 20 65 61 63 68 20 70 61 69 72 20 6f 66  For each pair of
2a770 20 6e 61 6d 65 64 0a 20 20 20 20 20 20 20 63 6f   named.       co
2a780 6c 75 6d 6e 73 2c 20 74 68 65 20 65 78 70 72 65  lumns, the expre
2a790 73 73 69 6f 6e 20 22 6c 68 73 2e 58 20 3d 20 72  ssion "lhs.X = r
2a7a0 68 73 2e 58 22 20 69 73 20 65 76 61 6c 75 61 74  hs.X" is evaluat
2a7b0 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  ed for each row 
2a7c0 6f 66 0a 20 20 20 20 20 20 20 74 68 65 20 63 61  of.       the ca
2a7d0 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20  rtesian product 
2a7e0 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78  as a [boolean ex
2a7f0 70 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20  pression]. Only 
2a800 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 0a 20  rows for which. 
2a810 20 20 20 20 20 20 61 6c 6c 20 73 75 63 68 20 65        all such e
2a820 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75  xpressions evalu
2a830 61 74 65 73 20 74 6f 20 74 72 75 65 20 61 72 65  ates to true are
2a840 20 69 6e 63 6c 75 64 65 64 20 66 72 6f 6d 20 74   included from t
2a850 68 65 0a 20 20 20 20 20 20 20 72 65 73 75 6c 74  he.       result
2a860 20 73 65 74 2e 29 5e 20 5e 57 68 65 6e 20 63 6f   set.)^ ^When co
2a870 6d 70 61 72 69 6e 67 20 76 61 6c 75 65 73 20 61  mparing values a
2a880 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 61 20  s a result of a 
2a890 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68  USING clause, th
2a8a0 65 0a 20 20 20 20 20 20 20 6e 6f 72 6d 61 6c 20  e.       normal 
2a8b0 72 75 6c 65 73 20 66 6f 72 20 68 61 6e 64 6c 69  rules for handli
2a8c0 6e 67 20 61 66 66 69 6e 69 74 69 65 73 2c 20 63  ng affinities, c
2a8d0 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
2a8e0 65 73 20 61 6e 64 20 4e 55 4c 4c 0a 20 20 20 20  es and NULL.    
2a8f0 20 20 20 76 61 6c 75 65 73 20 69 6e 20 63 6f 6d     values in com
2a900 70 61 72 69 73 6f 6e 73 20 61 70 70 6c 79 2e 20  parisons apply. 
2a910 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d  ^The column from
2a920 20 74 68 65 20 64 61 74 61 73 65 74 20 6f 6e 20   the dataset on 
2a930 74 68 65 0a 20 20 20 20 20 20 20 6c 65 66 74 2d  the.       left-
2a940 68 61 6e 64 20 73 69 64 65 20 6f 66 20 74 68 65  hand side of the
2a950 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 69   join-operator i
2a960 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20  s considered to 
2a970 62 65 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68  be on the left-h
2a980 61 6e 64 0a 20 20 20 20 20 20 20 73 69 64 65 20  and.       side 
2a990 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
2a9a0 6e 20 6f 70 65 72 61 74 6f 72 20 28 3d 29 20 66  n operator (=) f
2a9b0 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
2a9c0 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a 20 20  of collation .  
2a9d0 20 20 20 20 20 73 65 71 75 65 6e 63 65 20 61 6e       sequence an
2a9e0 64 20 61 66 66 69 6e 69 74 79 20 70 72 65 63 65  d affinity prece
2a9f0 64 65 6e 63 65 2e 0a 0a 20 20 20 20 20 20 20 3c  dence...       <
2aa00 70 3e 5e 46 6f 72 20 65 61 63 68 20 70 61 69 72  p>^For each pair
2aa10 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 64 65 6e   of columns iden
2aa20 74 69 66 69 65 64 20 62 79 20 61 20 55 53 49 4e  tified by a USIN
2aa30 47 20 63 6c 61 75 73 65 2c 20 74 68 65 20 63 6f  G clause, the co
2aa40 6c 75 6d 6e 0a 20 20 20 20 20 20 20 66 72 6f 6d  lumn.       from
2aa50 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20   the right-hand 
2aa60 64 61 74 61 73 65 74 20 69 73 20 6f 6d 69 74 74  dataset is omitt
2aa70 65 64 20 66 72 6f 6d 20 74 68 65 20 6a 6f 69 6e  ed from the join
2aa80 65 64 20 64 61 74 61 73 65 74 2e 20 5e 54 68 69  ed dataset. ^Thi
2aa90 73 20 0a 20 20 20 20 20 20 20 69 73 20 74 68 65  s .       is the
2aaa0 20 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65   only difference
2aab0 20 62 65 74 77 65 65 6e 20 61 20 55 53 49 4e 47   between a USING
2aac0 20 63 6c 61 75 73 65 20 61 6e 64 20 69 74 73 20   clause and its 
2aad0 65 71 75 69 76 61 6c 65 6e 74 20 4f 4e 0a 20 20  equivalent ON.  
2aae0 20 20 20 20 20 63 6f 6e 73 74 72 61 69 6e 74 2e       constraint.
2aaf0 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66  ..  <li> <p>^(If
2ab00 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65 79   the NATURAL key
2ab10 77 6f 72 64 20 69 73 20 69 6e 20 74 68 65 20 6a  word is in the j
2ab20 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 74 68 65  oin-operator the
2ab30 6e 20 61 6e 0a 20 20 20 20 20 20 20 69 6d 70 6c  n an.       impl
2ab40 69 63 69 74 20 55 53 49 4e 47 20 63 6c 61 75 73  icit USING claus
2ab50 65 20 69 73 20 61 64 64 65 64 20 74 6f 20 74 68  e is added to th
2ab60 65 20 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e  e join-constrain
2ab70 74 73 2e 20 54 68 65 20 69 6d 70 6c 69 63 69 74  ts. The implicit
2ab80 0a 20 20 20 20 20 20 20 55 53 49 4e 47 20 63 6c  .       USING cl
2ab90 61 75 73 65 20 63 6f 6e 74 61 69 6e 73 20 65 61  ause contains ea
2aba0 63 68 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ch of the column
2abb0 20 6e 61 6d 65 73 20 74 68 61 74 20 61 70 70 65   names that appe
2abc0 61 72 20 69 6e 20 62 6f 74 68 0a 20 20 20 20 20  ar in both.     
2abd0 20 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72    the left and r
2abe0 69 67 68 74 2d 68 61 6e 64 20 69 6e 70 75 74 20  ight-hand input 
2abf0 64 61 74 61 73 65 74 73 2e 29 5e 20 5e 49 66 20  datasets.)^ ^If 
2ac00 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67  the left and rig
2ac10 68 74 2d 68 61 6e 64 0a 20 20 20 20 20 20 20 69  ht-hand.       i
2ac20 6e 70 75 74 20 64 61 74 61 73 65 74 73 20 66 65  nput datasets fe
2ac30 61 74 75 72 65 20 6e 6f 20 63 6f 6d 6d 6f 6e 20  ature no common 
2ac40 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 74 68  column names, th
2ac50 65 6e 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b  en the NATURAL k
2ac60 65 79 77 6f 72 64 0a 20 20 20 20 20 20 20 68 61  eyword.       ha
2ac70 73 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74  s no effect on t
2ac80 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
2ac90 65 20 6a 6f 69 6e 2e 20 5e 41 20 55 53 49 4e 47  e join. ^A USING
2aca0 20 6f 72 20 4f 4e 20 63 6c 61 75 73 65 20 6d 61   or ON clause ma
2acb0 79 0a 20 20 20 20 20 20 20 6e 6f 74 20 62 65 20  y.       not be 
2acc0 61 64 64 65 64 20 74 6f 20 61 20 6a 6f 69 6e 20  added to a join 
2acd0 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74  that specifies t
2ace0 68 65 20 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f  he NATURAL keywo
2acf0 72 64 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e  rd...  <li> <p>^
2ad00 28 49 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65  (If the join-ope
2ad10 72 61 74 6f 72 20 69 73 20 61 20 22 4c 45 46 54  rator is a "LEFT
2ad20 20 4a 4f 49 4e 22 20 6f 72 20 22 4c 45 46 54 20   JOIN" or "LEFT 
2ad30 4f 55 54 45 52 20 4a 4f 49 4e 22 2c 20 74 68 65  OUTER JOIN", the
2ad40 6e 0a 20 20 20 20 20 20 20 61 66 74 65 72 0a 20  n.       after. 
2ad50 20 20 20 20 20 20 74 68 65 20 4f 4e 20 6f 72 20        the ON or 
2ad60 55 53 49 4e 47 20 66 69 6c 74 65 72 69 6e 67 20  USING filtering 
2ad70 63 6c 61 75 73 65 73 20 68 61 76 65 20 62 65 65  clauses have bee
2ad80 6e 20 61 70 70 6c 69 65 64 2c 20 61 6e 20 65 78  n applied, an ex
2ad90 74 72 61 20 72 6f 77 20 69 73 20 0a 20 20 20 20  tra row is .    
2ada0 20 20 20 61 64 64 65 64 20 74 6f 20 74 68 65 20     added to the 
2adb0 6f 75 74 70 75 74 20 66 6f 72 20 65 61 63 68 20  output for each 
2adc0 72 6f 77 20 69 6e 20 74 68 65 20 6f 72 69 67 69  row in the origi
2add0 6e 61 6c 20 6c 65 66 74 2d 68 61 6e 64 20 69 6e  nal left-hand in
2ade0 70 75 74 20 0a 20 20 20 20 20 20 20 64 61 74 61  put .       data
2adf0 73 65 74 20 74 68 61 74 20 63 6f 72 72 65 73 70  set that corresp
2ae00 6f 6e 64 73 20 74 6f 20 6e 6f 20 72 6f 77 73 20  onds to no rows 
2ae10 61 74 20 61 6c 6c 20 69 6e 20 74 68 65 20 63 6f  at all in the co
2ae20 6d 70 6f 73 69 74 65 0a 20 20 20 20 20 20 20 64  mposite.       d
2ae30 61 74 61 73 65 74 20 28 69 66 20 61 6e 79 29 2e  ataset (if any).
2ae40 29 5e 20 5e 54 68 65 20 61 64 64 65 64 20 72 6f  )^ ^The added ro
2ae50 77 73 20 63 6f 6e 74 61 69 6e 20 4e 55 4c 4c 20  ws contain NULL 
2ae60 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 63 6f  values in the co
2ae70 6c 75 6d 6e 73 0a 20 20 20 20 20 20 20 74 68 61  lumns.       tha
2ae80 74 20 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79  t would normally
2ae90 20 63 6f 6e 74 61 69 6e 20 76 61 6c 75 65 73 20   contain values 
2aea0 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20  copied from the 
2aeb0 72 69 67 68 74 2d 68 61 6e 64 20 69 6e 70 75 74  right-hand input
2aec0 0a 20 20 20 20 20 20 20 64 61 74 61 73 65 74 2e  .       dataset.
2aed0 20 20 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 57    .</ul>..<p>^(W
2aee0 68 65 6e 20 6d 6f 72 65 20 74 68 61 6e 20 74 77  hen more than tw
2aef0 6f 20 74 61 62 6c 65 73 20 61 72 65 20 6a 6f 69  o tables are joi
2af00 6e 65 64 20 74 6f 67 65 74 68 65 72 20 61 73 20  ned together as 
2af10 70 61 72 74 20 6f 66 20 61 20 46 52 4f 4d 20 63  part of a FROM c
2af20 6c 61 75 73 65 2c 0a 74 68 65 20 6a 6f 69 6e 20  lause,.the join 
2af30 6f 70 65 72 61 74 69 6f 6e 73 20 61 72 65 20 70  operations are p
2af40 72 6f 63 65 73 73 65 64 20 69 6e 20 6f 72 64 65  rocessed in orde
2af50 72 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  r from left to r
2af60 69 67 68 74 2e 20 49 6e 20 6f 74 68 65 72 20 0a  ight. In other .
2af70 77 6f 72 64 73 2c 20 74 68 65 20 46 52 4f 4d 20  words, the FROM 
2af80 63 6c 61 75 73 65 20 28 41 20 6a 6f 69 6e 2d 6f  clause (A join-o
2af90 70 2d 31 20 42 20 6a 6f 69 6e 2d 6f 70 2d 32 20  p-1 B join-op-2 
2afa0 43 29 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61  C) is computed a
2afb0 73 20 0a 28 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31  s .((A join-op-1
2afc0 20 42 29 20 6a 6f 69 6e 2d 6f 70 2d 32 20 43 29   B) join-op-2 C)
2afd0 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  .)^..<tcl>hd_fra
2afe0 67 6d 65 6e 74 20 63 72 6f 73 73 6a 6f 69 6e 20  gment crossjoin 
2aff0 7b 74 72 65 61 74 73 20 74 68 65 20 43 52 4f 53  {treats the CROS
2b000 53 20 4a 4f 49 4e 20 6f 70 65 72 61 74 6f 72 20  S JOIN operator 
2b010 73 70 65 63 69 61 6c 6c 79 7d 3c 2f 74 63 6c 3e  specially}</tcl>
2b020 0a 3c 70 3e 3c 62 3e 53 69 64 65 20 6e 6f 74 65  .<p><b>Side note
2b030 3a 20 53 70 65 63 69 61 6c 20 68 61 6e 64 6c 69  : Special handli
2b040 6e 67 20 6f 66 20 43 52 4f 53 53 20 4a 4f 49 4e  ng of CROSS JOIN
2b050 2e 3c 2f 62 3e 0a 5e 54 68 65 72 65 20 69 73 20  .</b>.^There is 
2b060 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  no difference be
2b070 74 77 65 65 6e 20 74 68 65 20 22 49 4e 4e 45 52  tween the "INNER
2b080 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61   JOIN", "JOIN" a
2b090 6e 64 20 22 2c 22 20 6a 6f 69 6e 0a 6f 70 65 72  nd "," join.oper
2b0a0 61 74 6f 72 73 2e 20 54 68 65 79 20 61 72 65 20  ators. They are 
2b0b0 63 6f 6d 70 6c 65 74 65 6c 79 20 69 6e 74 65 72  completely inter
2b0c0 63 68 61 6e 67 65 61 62 6c 65 20 69 6e 20 53 51  changeable in SQ
2b0d0 4c 69 74 65 2e 0a 5e 28 54 68 65 20 22 43 52 4f  Lite..^(The "CRO
2b0e0 53 53 20 4a 4f 49 4e 22 20 6a 6f 69 6e 20 6f 70  SS JOIN" join op
2b0f0 65 72 61 74 6f 72 20 70 72 6f 64 75 63 65 73 20  erator produces 
2b100 74 68 65 20 73 61 6d 65 20 72 65 73 75 6c 74 20  the same result 
2b110 61 73 20 74 68 65 20 0a 22 49 4e 4e 45 52 20 4a  as the ."INNER J
2b120 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61 6e 64  OIN", "JOIN" and
2b130 20 22 2c 22 20 6f 70 65 72 61 74 6f 72 73 29 5e   "," operators)^
2b140 2c 20 62 75 74 20 69 73 20 0a 5b 43 52 4f 53 53  , but is .[CROSS
2b150 20 4a 4f 49 4e 7c 68 61 6e 64 6c 65 64 20 64 69   JOIN|handled di
2b160 66 66 65 72 65 6e 74 6c 79 20 62 79 20 74 68 65  fferently by the
2b170 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72   query optimizer
2b180 5d 0a 69 6e 20 74 68 61 74 20 69 74 20 70 72 65  ].in that it pre
2b190 76 65 6e 74 73 20 74 68 65 20 71 75 65 72 79 20  vents the query 
2b1a0 6f 70 74 69 6d 69 7a 65 72 20 66 72 6f 6d 20 72  optimizer from r
2b1b0 65 6f 72 64 65 72 69 6e 67 0a 74 68 65 20 74 61  eordering.the ta
2b1c0 62 6c 65 73 20 69 6e 20 74 68 65 20 6a 6f 69 6e  bles in the join
2b1d0 2e 20 20 41 6e 20 61 70 70 6c 69 63 61 74 69 6f  .  An applicatio
2b1e0 6e 20 70 72 6f 67 72 61 6d 6d 65 72 20 63 61 6e  n programmer can
2b1f0 20 75 73 65 20 74 68 65 20 43 52 4f 53 53 20 4a   use the CROSS J
2b200 4f 49 4e 20 0a 6f 70 65 72 61 74 6f 72 20 74 6f  OIN .operator to
2b210 20 64 69 72 65 63 74 6c 79 20 69 6e 66 6c 75 65   directly influe
2b220 6e 63 65 20 74 68 65 20 61 6c 67 6f 72 69 74 68  nce the algorith
2b230 6d 20 74 68 61 74 20 69 73 20 63 68 6f 73 65 6e  m that is chosen
2b240 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 0a 74 68   to implement.th
2b250 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
2b260 6e 74 2e 20 20 41 76 6f 69 64 20 75 73 69 6e 67  nt.  Avoid using
2b270 20 43 52 4f 53 53 20 4a 4f 49 4e 20 65 78 63 65   CROSS JOIN exce
2b280 70 74 20 69 6e 20 73 70 65 63 69 66 69 63 20 73  pt in specific s
2b290 69 74 75 61 74 69 6f 6e 73 20 0a 77 68 65 72 65  ituations .where
2b2a0 20 6d 61 6e 75 61 6c 20 63 6f 6e 74 72 6f 6c 20   manual control 
2b2b0 6f 66 20 74 68 65 20 71 75 65 72 79 20 6f 70 74  of the query opt
2b2c0 69 6d 69 7a 65 72 20 69 73 20 64 65 73 69 72 65  imizer is desire
2b2d0 64 2e 20 20 41 76 6f 69 64 20 75 73 69 6e 67 0a  d.  Avoid using.
2b2e0 43 52 4f 53 53 20 4a 4f 49 4e 20 65 61 72 6c 79  CROSS JOIN early
2b2f0 20 69 6e 20 74 68 65 20 64 65 76 65 6c 6f 70 6d   in the developm
2b300 65 6e 74 20 6f 66 20 61 6e 20 61 70 70 6c 69 63  ent of an applic
2b310 61 74 69 6f 6e 20 61 73 20 64 6f 69 6e 67 20 73  ation as doing s
2b320 6f 20 69 73 0a 61 20 3c 61 20 68 72 65 66 3d 22  o is.a <a href="
2b330 68 74 74 70 3a 2f 2f 63 32 2e 63 6f 6d 2f 63 67  http://c2.com/cg
2b340 69 2f 77 69 6b 69 3f 50 72 65 6d 61 74 75 72 65  i/wiki?Premature
2b350 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 22 3e 70 72  Optimization">pr
2b360 65 6d 61 74 75 72 65 0a 6f 70 74 69 6d 69 7a 61  emature.optimiza
2b370 74 69 6f 6e 3c 2f 61 3e 2e 20 20 54 68 65 20 73  tion</a>.  The s
2b380 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20  pecial handling 
2b390 6f 66 20 43 52 4f 53 53 20 4a 4f 49 4e 20 69 73  of CROSS JOIN is
2b3a0 20 61 6e 20 53 51 4c 69 74 65 2d 73 70 65 63 69   an SQLite-speci
2b3b0 66 69 63 0a 66 65 61 74 75 72 65 20 61 6e 64 20  fic.feature and 
2b3c0 69 73 20 6e 6f 74 20 61 20 70 61 72 74 20 6f 66  is not a part of
2b3d0 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 0a 20   standard SQL.. 
2b3e0 20 20 20 20 20 20 0a 0a 3c 74 63 6c 3e 68 64 5f        ..<tcl>hd_
2b3f0 66 72 61 67 6d 65 6e 74 20 77 68 65 72 65 63 6c  fragment wherecl
2b400 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e  ause</tcl>.<tcl>
2b410 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 57 48 45  hd_keywords {WHE
2b420 52 45 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e  RE clause}</tcl>
2b430 0a 3c 70 3e 3c 62 3e 32 2e 20 57 48 45 52 45 20  .<p><b>2. WHERE 
2b440 63 6c 61 75 73 65 20 66 69 6c 74 65 72 69 6e 67  clause filtering
2b450 2e 3c 2f 62 3e 0a 0a 3c 70 3e 5e 28 49 66 20 61  .</b>..<p>^(If a
2b460 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 73   WHERE clause is
2b470 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 20   specified, the 
2b480 57 48 45 52 45 20 65 78 70 72 65 73 73 69 6f 6e  WHERE expression
2b490 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f   is evaluated fo
2b4a0 72 20 0a 65 61 63 68 20 72 6f 77 20 69 6e 20 74  r .each row in t
2b4b0 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 61 73  he input data as
2b4c0 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72   a [boolean expr
2b4d0 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72 6f  ession]. Only ro
2b4e0 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65  ws for which the
2b4f0 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20 65 78  .WHERE clause ex
2b500 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74  pression evaluat
2b510 65 73 20 74 6f 20 74 72 75 65 20 61 72 65 20 69  es to true are i
2b520 6e 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65  ncluded from the
2b530 20 64 61 74 61 73 65 74 20 62 65 66 6f 72 65 0a   dataset before.
2b540 63 6f 6e 74 69 6e 75 69 6e 67 2e 29 5e 20 20 52  continuing.)^  R
2b550 6f 77 73 20 61 72 65 20 65 78 63 6c 75 64 65 64  ows are excluded
2b560 20 66 72 6f 6d 20 74 68 65 20 72 65 73 75 6c 74   from the result
2b570 20 69 66 20 74 68 65 20 57 48 45 52 45 20 63 6c   if the WHERE cl
2b580 61 75 73 65 0a 65 76 61 6c 75 61 74 65 73 20 74  ause.evaluates t
2b590 6f 20 65 69 74 68 65 72 20 66 61 6c 73 65 20 6f  o either false o
2b5a0 72 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 46 6f 72 20  r NULL...<p>For 
2b5b0 61 20 4a 4f 49 4e 20 6f 72 20 49 4e 4e 45 52 20  a JOIN or INNER 
2b5c0 4a 4f 49 4e 20 6f 72 20 43 52 4f 53 53 20 4a 4f  JOIN or CROSS JO
2b5d0 49 4e 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20  IN, there is no 
2b5e0 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
2b5f0 65 6e 20 0a 61 20 63 6f 6e 73 74 72 61 69 6e 74  en .a constraint
2b600 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
2b610 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
2b620 61 6e 64 20 6f 6e 65 20 69 6e 20 74 68 65 20 4f  and one in the O
2b630 4e 20 63 6c 61 75 73 65 2e 20 20 48 6f 77 65 76  N clause.  Howev
2b640 65 72 2c 0a 66 6f 72 20 61 20 4c 45 46 54 20 4a  er,.for a LEFT J
2b650 4f 49 4e 20 6f 72 20 4c 45 46 54 20 4f 55 54 45  OIN or LEFT OUTE
2b660 52 20 4a 4f 49 4e 2c 20 74 68 65 20 64 69 66 66  R JOIN, the diff
2b670 65 72 65 6e 63 65 20 69 73 20 76 65 72 79 20 69  erence is very i
2b680 6d 70 6f 72 74 61 6e 74 2e 20 20 0a 49 6e 20 61  mportant.  .In a
2b690 20 4c 45 46 54 20 4a 4f 49 4e 2c 0a 74 68 65 20   LEFT JOIN,.the 
2b6a0 65 78 74 72 61 20 4e 55 4c 4c 20 72 6f 77 20 66  extra NULL row f
2b6b0 6f 72 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e  or the right-han
2b6c0 64 20 74 61 62 6c 65 20 69 73 20 61 64 64 65 64  d table is added
2b6d0 20 61 66 74 65 72 20 4f 4e 20 63 6c 61 75 73 65   after ON clause
2b6e0 20 70 72 6f 63 65 73 73 69 6e 67 0a 62 75 74 20   processing.but 
2b6f0 62 65 66 6f 72 65 20 57 48 45 52 45 20 63 6c 61  before WHERE cla
2b700 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67 2e 20  use processing. 
2b710 20 41 20 63 6f 6e 73 74 72 61 69 6e 74 20 6f 66   A constraint of
2b720 20 74 68 65 20 66 6f 72 6d 20 22 6c 65 66 74 2e   the form "left.
2b730 78 3d 72 69 67 68 74 2e 79 22 0a 69 6e 20 61 6e  x=right.y".in an
2b740 20 4f 4e 20 63 6c 61 75 73 65 20 77 69 6c 6c 20   ON clause will 
2b750 74 68 65 72 65 66 6f 72 65 20 61 6c 6c 6f 77 20  therefore allow 
2b760 74 68 72 6f 75 67 68 20 74 68 65 20 61 64 64 65  through the adde
2b770 64 20 61 6c 6c 2d 4e 55 4c 4c 20 72 6f 77 73 20  d all-NULL rows 
2b780 6f 66 20 74 68 65 0a 72 69 67 68 74 20 74 61 62  of the.right tab
2b790 6c 65 2e 20 20 42 75 74 20 69 66 20 74 68 61 74  le.  But if that
2b7a0 20 73 61 6d 65 20 63 6f 6e 73 74 72 61 69 6e 74   same constraint
2b7b0 20 69 73 20 69 6e 20 74 68 65 20 57 48 45 52 45   is in the WHERE
2b7c0 20 63 6c 61 75 73 65 20 61 20 4e 55 4c 4c 20 69   clause a NULL i
2b7d0 6e 0a 22 72 69 67 68 74 2e 79 22 20 77 69 6c 6c  n."right.y" will
2b7e0 20 70 72 65 76 65 6e 74 20 74 68 65 20 65 78 70   prevent the exp
2b7f0 72 65 73 73 69 6f 6e 20 22 6c 65 66 74 2e 78 3d  ression "left.x=
2b800 72 69 67 68 74 2e 79 22 20 66 72 6f 6d 20 62 65  right.y" from be
2b810 69 6e 67 20 74 72 75 65 2c 20 61 6e 64 0a 74 68  ing true, and.th
2b820 75 73 20 65 78 63 6c 75 64 65 20 74 68 61 74 20  us exclude that 
2b830 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 6f 75 74  row from the out
2b840 70 75 74 2e 0a 0a 3c 70 3e 3c 62 3e 33 2e 20 47  put...<p><b>3. G
2b850 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  eneration of the
2b860 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72   set of result r
2b870 6f 77 73 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64  ows.</b>.<tcl>hd
2b880 5f 66 72 61 67 6d 65 6e 74 20 72 65 73 75 6c 74  _fragment result
2b890 73 65 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68  set</tcl>.<tcl>h
2b8a0 64 5f 6b 65 79 77 6f 72 64 73 20 7b 72 65 73 75  d_keywords {resu
2b8b0 6c 74 2d 73 65 74 20 65 78 70 72 65 73 73 69 6f  lt-set expressio
2b8c0 6e 73 7d 20 7b 47 52 4f 55 50 20 42 59 7d 3c 2f  ns} {GROUP BY}</
2b8d0 74 63 6c 3e 0a 0a 3c 70 3e 4f 6e 63 65 20 74 68  tcl>..<p>Once th
2b8e0 65 20 69 6e 70 75 74 20 64 61 74 61 20 66 72 6f  e input data fro
2b8f0 6d 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  m the FROM claus
2b900 65 20 68 61 73 20 62 65 65 6e 20 66 69 6c 74 65  e has been filte
2b910 72 65 64 20 62 79 20 74 68 65 0a 57 48 45 52 45  red by the.WHERE
2b920 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69   clause expressi
2b930 6f 6e 20 28 69 66 20 61 6e 79 29 2c 20 74 68 65  on (if any), the
2b940 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72   set of result r
2b950 6f 77 73 20 66 6f 72 20 74 68 65 20 73 69 6d 70  ows for the simp
2b960 6c 65 20 0a 53 45 4c 45 43 54 20 61 72 65 20 63  le .SELECT are c
2b970 61 6c 63 75 6c 61 74 65 64 2e 20 45 78 61 63 74  alculated. Exact
2b980 6c 79 20 68 6f 77 20 74 68 69 73 20 69 73 20 64  ly how this is d
2b990 6f 6e 65 20 64 65 70 65 6e 64 73 20 6f 6e 20 77  one depends on w
2b9a0 68 65 74 68 65 72 20 74 68 65 20 73 69 6d 70 6c  hether the simpl
2b9b0 65 20 0a 53 45 4c 45 43 54 20 69 73 20 61 6e 20  e .SELECT is an 
2b9c0 61 67 67 72 65 67 61 74 65 20 6f 72 20 6e 6f 6e  aggregate or non
2b9d0 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79  -aggregate query
2b9e0 2c 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f 72  , and whether or
2b9f0 20 6e 6f 74 20 61 20 47 52 4f 55 50 0a 42 59 20   not a GROUP.BY 
2ba00 63 6c 61 75 73 65 20 77 61 73 20 73 70 65 63 69  clause was speci
2ba10 66 69 65 64 2e 0a 0a 3c 70 3e 20 54 68 65 20 6c  fied...<p> The l
2ba20 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
2ba30 6e 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 53  ns between the S
2ba40 45 4c 45 43 54 20 61 6e 64 20 46 52 4f 4d 20 6b  ELECT and FROM k
2ba50 65 79 77 6f 72 64 73 20 69 73 20 6b 6e 6f 77 6e  eywords is known
2ba60 20 61 73 0a 74 68 65 20 72 65 73 75 6c 74 20 65   as.the result e
2ba70 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 2e 20  xpression list. 
2ba80 20 5e 49 66 20 61 20 72 65 73 75 6c 74 20 65 78   ^If a result ex
2ba90 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20  pression is the 
2baa0 73 70 65 63 69 61 6c 20 65 78 70 72 65 73 73 69  special expressi
2bab0 6f 6e 0a 22 2a 22 20 74 68 65 6e 20 61 6c 6c 20  on."*" then all 
2bac0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69  columns in the i
2bad0 6e 70 75 74 20 64 61 74 61 20 61 72 65 20 73 75  nput data are su
2bae0 62 73 74 69 74 75 74 65 64 20 66 6f 72 20 74 68  bstituted for th
2baf0 61 74 20 6f 6e 65 20 65 78 70 72 65 73 73 69 6f  at one expressio
2bb00 6e 2e 0a 5e 28 49 66 20 74 68 65 20 65 78 70 72  n..^(If the expr
2bb10 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 61 6c  ession is the al
2bb20 69 61 73 20 6f 66 20 61 20 74 61 62 6c 65 20 6f  ias of a table o
2bb30 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68  r subquery in th
2bb40 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 66 6f  e FROM clause.fo
2bb50 6c 6c 6f 77 65 64 20 62 79 20 22 2e 2a 22 20 74  llowed by ".*" t
2bb60 68 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20  hen all columns 
2bb70 66 72 6f 6d 20 74 68 65 20 6e 61 6d 65 64 20 74  from the named t
2bb80 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79  able or subquery
2bb90 20 61 72 65 0a 73 75 62 73 74 69 74 75 74 65 64   are.substituted
2bba0 20 66 6f 72 20 74 68 65 20 73 69 6e 67 6c 65 20   for the single 
2bbb0 65 78 70 72 65 73 73 69 6f 6e 2e 29 5e 20 5e 28  expression.)^ ^(
2bbc0 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74  It is an error t
2bbd0 6f 20 75 73 65 20 61 20 22 2a 22 20 6f 72 0a 22  o use a "*" or."
2bbe0 61 6c 69 61 73 2e 2a 22 20 65 78 70 72 65 73 73  alias.*" express
2bbf0 69 6f 6e 20 69 6e 20 61 6e 79 20 63 6f 6e 74 65  ion in any conte
2bc00 78 74 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20  xt other than a 
2bc10 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f  result expressio
2bc20 6e 20 6c 69 73 74 2e 29 5e 0a 5e 28 49 74 20 69  n list.)^.^(It i
2bc30 73 20 61 6c 73 6f 20 61 6e 20 65 72 72 6f 72 20  s also an error 
2bc40 74 6f 20 75 73 65 20 61 20 22 2a 22 20 6f 72 20  to use a "*" or 
2bc50 22 61 6c 69 61 73 2e 2a 22 20 65 78 70 72 65 73  "alias.*" expres
2bc60 73 69 6f 6e 20 69 6e 20 61 20 73 69 6d 70 6c 65  sion in a simple
2bc70 20 53 45 4c 45 43 54 0a 71 75 65 72 79 20 74 68   SELECT.query th
2bc80 61 74 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  at does not have
2bc90 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e 29   a FROM clause.)
2bca0 5e 0a 0a 3c 70 3e 20 5e 28 54 68 65 20 6e 75 6d  ^..<p> ^(The num
2bcb0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
2bcc0 6e 20 74 68 65 20 72 6f 77 73 20 72 65 74 75 72  n the rows retur
2bcd0 6e 65 64 20 62 79 20 61 20 73 69 6d 70 6c 65 20  ned by a simple 
2bce0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2bcf0 0a 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65  .is equal to the
2bd00 20 6e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65   number of expre
2bd10 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72 65  ssions in the re
2bd20 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20  sult expression 
2bd30 6c 69 73 74 20 61 66 74 65 72 0a 73 75 62 73 74  list after.subst
2bd40 69 74 75 74 69 6f 6e 20 6f 66 20 2a 20 61 6e 64  itution of * and
2bd50 20 61 6c 69 61 73 2e 2a 20 65 78 70 72 65 73 73   alias.* express
2bd60 69 6f 6e 73 2e 29 5e 20 45 61 63 68 20 72 65 73  ions.)^ Each res
2bd70 75 6c 74 20 72 6f 77 20 69 73 20 63 61 6c 63 75  ult row is calcu
2bd80 6c 61 74 65 64 20 62 79 0a 65 76 61 6c 75 61 74  lated by.evaluat
2bd90 69 6e 67 20 74 68 65 20 65 78 70 72 65 73 73 69  ing the expressi
2bda0 6f 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ons in the resul
2bdb0 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73  t expression lis
2bdc0 74 20 77 69 74 68 20 72 65 73 70 65 63 74 20 74  t with respect t
2bdd0 6f 20 61 0a 73 69 6e 67 6c 65 20 72 6f 77 20 6f  o a.single row o
2bde0 66 20 69 6e 70 75 74 20 64 61 74 61 20 6f 72 2c  f input data or,
2bdf0 20 66 6f 72 20 61 67 67 72 65 67 61 74 65 20 71   for aggregate q
2be00 75 65 72 69 65 73 2c 20 77 69 74 68 20 72 65 73  ueries, with res
2be10 70 65 63 74 20 74 6f 20 61 20 67 72 6f 75 70 0a  pect to a group.
2be20 6f 66 20 72 6f 77 73 2e 0a 0a 3c 75 6c 3e 0a 20  of rows...<ul>. 
2be30 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20   <li><p>^If the 
2be40 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2be50 20 69 73 20 3c 62 3e 61 20 6e 6f 6e 2d 61 67 67   is <b>a non-agg
2be60 72 65 67 61 74 65 20 71 75 65 72 79 3c 2f 62 3e  regate query</b>
2be70 2c 20 74 68 65 6e 20 0a 20 20 20 20 65 61 63 68  , then .    each
2be80 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
2be90 68 65 20 72 65 73 75 6c 74 20 65 78 70 72 65 73  he result expres
2bea0 73 69 6f 6e 20 6c 69 73 74 20 69 73 20 65 76 61  sion list is eva
2beb0 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  luated for each 
2bec0 72 6f 77 20 69 6e 0a 20 20 20 20 74 68 65 20 64  row in.    the d
2bed0 61 74 61 73 65 74 20 66 69 6c 74 65 72 65 64 20  ataset filtered 
2bee0 62 79 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  by the WHERE cla
2bef0 75 73 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  use...  <li><p>^
2bf00 49 66 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  If the SELECT st
2bf10 61 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61 6e  atement is <b>an
2bf20 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79   aggregate query
2bf30 20 77 69 74 68 6f 75 74 20 61 20 47 52 4f 55 50   without a GROUP
2bf40 0a 20 20 20 20 42 59 3c 2f 62 3e 20 63 6c 61 75  .    BY</b> clau
2bf50 73 65 2c 20 74 68 65 6e 20 65 61 63 68 20 61 67  se, then each ag
2bf60 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
2bf70 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  on in the result
2bf80 2d 73 65 74 20 69 73 20 0a 20 20 20 20 65 76 61  -set is .    eva
2bf90 6c 75 61 74 65 64 20 6f 6e 63 65 20 61 63 72 6f  luated once acro
2bfa0 73 73 20 74 68 65 20 65 6e 74 69 72 65 20 64 61  ss the entire da
2bfb0 74 61 73 65 74 2e 20 5e 45 61 63 68 20 6e 6f 6e  taset. ^Each non
2bfc0 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65  -aggregate expre
2bfd0 73 73 69 6f 6e 0a 20 20 20 20 69 6e 20 74 68 65  ssion.    in the
2bfe0 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73 20 65   result-set is e
2bff0 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f  valuated once fo
2c000 72 20 61 6e 20 61 72 62 69 74 72 61 72 69 6c 79  r an arbitrarily
2c010 20 73 65 6c 65 63 74 65 64 20 72 6f 77 20 6f 66   selected row of
2c020 0a 20 20 20 20 74 68 65 20 64 61 74 61 73 65 74  .    the dataset
2c030 2e 20 5e 54 68 65 20 73 61 6d 65 20 61 72 62 69  . ^The same arbi
2c040 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74 65 64  trarily selected
2c050 20 72 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72   row is used for
2c060 20 65 61 63 68 0a 20 20 20 20 6e 6f 6e 2d 61 67   each.    non-ag
2c070 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
2c080 6f 6e 2e 20 5e 4f 72 2c 20 69 66 20 74 68 65 20  on. ^Or, if the 
2c090 64 61 74 61 73 65 74 20 63 6f 6e 74 61 69 6e 73  dataset contains
2c0a0 20 7a 65 72 6f 20 72 6f 77 73 2c 20 74 68 65 6e   zero rows, then
2c0b0 20 0a 20 20 20 20 65 61 63 68 20 6e 6f 6e 2d 61   .    each non-a
2c0c0 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73  ggregate express
2c0d0 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64  ion is evaluated
2c0e0 20 61 67 61 69 6e 73 74 20 61 20 72 6f 77 20 63   against a row c
2c0f0 6f 6e 73 69 73 74 69 6e 67 0a 20 20 20 20 65 6e  onsisting.    en
2c100 74 69 72 65 6c 79 20 6f 66 20 4e 55 4c 4c 20 76  tirely of NULL v
2c110 61 6c 75 65 73 2e 0a 0a 20 20 20 3c 70 3e 5e 54  alues...   <p>^T
2c120 68 65 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66  he single row of
2c130 20 72 65 73 75 6c 74 2d 73 65 74 20 64 61 74 61   result-set data
2c140 20 63 72 65 61 74 65 64 20 62 79 20 65 76 61 6c   created by eval
2c150 75 61 74 69 6e 67 20 74 68 65 20 61 67 67 72 65  uating the aggre
2c160 67 61 74 65 0a 20 20 20 20 61 6e 64 20 6e 6f 6e  gate.    and non
2c170 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65  -aggregate expre
2c180 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72 65  ssions in the re
2c190 73 75 6c 74 2d 73 65 74 20 66 6f 72 6d 73 20 74  sult-set forms t
2c1a0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 0a  he result of an.
2c1b0 20 20 20 20 61 67 67 72 65 67 61 74 65 20 71 75      aggregate qu
2c1c0 65 72 79 20 77 69 74 68 6f 75 74 20 61 20 47 52  ery without a GR
2c1d0 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2e 20 5e  OUP BY clause. ^
2c1e0 41 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65  An aggregate que
2c1f0 72 79 20 77 69 74 68 6f 75 74 20 61 0a 20 20 20  ry without a.   
2c200 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
2c210 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20   always returns 
2c220 65 78 61 63 74 6c 79 20 6f 6e 65 20 72 6f 77 20  exactly one row 
2c230 6f 66 20 64 61 74 61 2c 20 65 76 65 6e 20 69 66  of data, even if
2c240 20 74 68 65 72 65 20 61 72 65 0a 20 20 20 20 7a   there are.    z
2c250 65 72 6f 20 72 6f 77 73 20 6f 66 20 69 6e 70 75  ero rows of inpu
2c260 74 20 64 61 74 61 2e 0a 0a 20 20 3c 6c 69 3e 3c  t data...  <li><
2c270 70 3e 5e 28 49 66 20 74 68 65 20 53 45 4c 45 43  p>^(If the SELEC
2c280 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c  T statement is <
2c290 62 3e 61 6e 20 61 67 67 72 65 67 61 74 65 20 71  b>an aggregate q
2c2a0 75 65 72 79 20 77 69 74 68 20 61 20 47 52 4f 55  uery with a GROU
2c2b0 50 0a 20 20 20 20 42 59 3c 2f 62 3e 20 63 6c 61  P.    BY</b> cla
2c2c0 75 73 65 2c 20 74 68 65 6e 20 65 61 63 68 20 6f  use, then each o
2c2d0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
2c2e0 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  s specified as p
2c2f0 61 72 74 20 6f 66 20 74 68 65 0a 20 20 20 20 47  art of the.    G
2c300 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 69  ROUP BY clause i
2c310 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20  s evaluated for 
2c320 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20  each row of the 
2c330 64 61 74 61 73 65 74 2e 20 45 61 63 68 20 72 6f  dataset. Each ro
2c340 77 0a 20 20 20 20 69 73 20 74 68 65 6e 20 61 73  w.    is then as
2c350 73 69 67 6e 65 64 20 74 6f 20 61 20 22 67 72 6f  signed to a "gro
2c360 75 70 22 20 62 61 73 65 64 20 6f 6e 20 74 68 65  up" based on the
2c370 20 72 65 73 75 6c 74 73 3b 20 72 6f 77 73 20 66   results; rows f
2c380 6f 72 20 77 68 69 63 68 0a 20 20 20 20 74 68 65  or which.    the
2c390 20 72 65 73 75 6c 74 73 20 6f 66 20 65 76 61 6c   results of eval
2c3a0 75 61 74 69 6e 67 20 74 68 65 20 47 52 4f 55 50  uating the GROUP
2c3b0 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 73 20   BY expressions 
2c3c0 61 72 65 20 74 68 65 20 73 61 6d 65 20 67 65 74  are the same get
2c3d0 0a 20 20 20 20 61 73 73 69 67 6e 65 64 20 74 6f  .    assigned to
2c3e0 20 74 68 65 20 73 61 6d 65 20 67 72 6f 75 70 2e   the same group.
2c3f0 29 5e 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70  )^ ^For the purp
2c400 6f 73 65 73 20 6f 66 20 67 72 6f 75 70 69 6e 67  oses of grouping
2c410 20 72 6f 77 73 2c 20 4e 55 4c 4c 20 0a 20 20 20   rows, NULL .   
2c420 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73   values are cons
2c430 69 64 65 72 65 64 20 65 71 75 61 6c 2e 20 5e 54  idered equal. ^T
2c440 68 65 20 75 73 75 61 6c 20 72 75 6c 65 73 20 66  he usual rules f
2c450 6f 72 20 5b 63 6f 6c 6c 61 74 69 6f 6e 7c 73 65  or [collation|se
2c460 6c 65 63 74 69 6e 67 20 61 0a 20 20 20 20 63 6f  lecting a.    co
2c470 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
2c480 5d 20 77 69 74 68 20 77 68 69 63 68 20 74 6f 20  ] with which to 
2c490 63 6f 6d 70 61 72 65 20 74 65 78 74 20 76 61 6c  compare text val
2c4a0 75 65 73 20 61 70 70 6c 79 20 77 68 65 6e 20 65  ues apply when e
2c4b0 76 61 6c 75 61 74 69 6e 67 0a 20 20 20 20 65 78  valuating.    ex
2c4c0 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 20 47  pressions in a G
2c4d0 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2e 20  ROUP BY clause. 
2c4e0 20 5e 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e   ^The expression
2c4f0 73 20 69 6e 20 74 68 65 20 47 52 4f 55 50 20 42  s in the GROUP B
2c500 59 20 63 6c 61 75 73 65 0a 20 20 20 20 64 6f 20  Y clause.    do 
2c510 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 68 61 76  <em>not</em> hav
2c520 65 20 74 6f 20 62 65 20 65 78 70 72 65 73 73 69  e to be expressi
2c530 6f 6e 73 20 74 68 61 74 20 61 70 70 65 61 72 20  ons that appear 
2c540 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 20 5e  in the result. ^
2c550 54 68 65 0a 20 20 20 20 65 78 70 72 65 73 73 69  The.    expressi
2c560 6f 6e 73 20 69 6e 20 61 20 47 52 4f 55 50 20 42  ons in a GROUP B
2c570 59 20 63 6c 61 75 73 65 20 6d 61 79 20 6e 6f 74  Y clause may not
2c580 20 62 65 20 61 67 67 72 65 67 61 74 65 20 65 78   be aggregate ex
2c590 70 72 65 73 73 69 6f 6e 73 2e 0a 0a 20 20 20 20  pressions...    
2c5a0 3c 70 3e 5e 28 49 66 20 61 20 48 41 56 49 4e 47  <p>^(If a HAVING
2c5b0 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69   clause is speci
2c5c0 66 69 65 64 2c 20 69 74 20 69 73 20 65 76 61 6c  fied, it is eval
2c5d0 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 65  uated once for e
2c5e0 61 63 68 20 67 72 6f 75 70 20 0a 20 20 20 20 6f  ach group .    o
2c5f0 66 20 72 6f 77 73 20 61 73 20 61 20 5b 62 6f 6f  f rows as a [boo
2c600 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d  lean expression]
2c610 2e 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 20  . If the result 
2c620 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of evaluating th
2c630 65 0a 20 20 20 20 48 41 56 49 4e 47 20 63 6c 61  e.    HAVING cla
2c640 75 73 65 20 69 73 20 66 61 6c 73 65 2c 20 74 68  use is false, th
2c650 65 20 67 72 6f 75 70 20 69 73 20 64 69 73 63 61  e group is disca
2c660 72 64 65 64 2e 29 5e 20 5e 49 66 20 74 68 65 20  rded.)^ ^If the 
2c670 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73  HAVING clause is
2c680 0a 20 20 20 20 61 6e 20 61 67 67 72 65 67 61 74  .    an aggregat
2c690 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 74  e expression, it
2c6a0 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 63   is evaluated ac
2c6b0 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 69 6e  ross all rows in
2c6c0 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 49 66 0a   the group. ^If.
2c6d0 20 20 20 20 61 20 48 41 56 49 4e 47 20 63 6c 61      a HAVING cla
2c6e0 75 73 65 20 69 73 20 61 20 6e 6f 6e 2d 61 67 67  use is a non-agg
2c6f0 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
2c700 6e 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74  n, it is evaluat
2c710 65 64 20 77 69 74 68 20 72 65 73 70 65 63 74 0a  ed with respect.
2c720 20 20 20 20 74 6f 20 61 6e 20 61 72 62 69 74 72      to an arbitr
2c730 61 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72  arily selected r
2c740 6f 77 20 66 72 6f 6d 20 74 68 65 20 67 72 6f 75  ow from the grou
2c750 70 2e 20 20 5e 54 68 65 20 48 41 56 49 4e 47 20  p.  ^The HAVING 
2c760 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 0a 20  expression may. 
2c770 20 20 20 72 65 66 65 72 20 74 6f 20 76 61 6c 75     refer to valu
2c780 65 73 2c 20 65 76 65 6e 20 61 67 67 72 65 67 61  es, even aggrega
2c790 74 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68  te functions, th
2c7a0 61 74 20 61 72 65 20 6e 6f 74 20 69 6e 20 74 68  at are not in th
2c7b0 65 20 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 20  e result.</p>.. 
2c7c0 20 20 20 3c 70 3e 5e 45 61 63 68 20 65 78 70 72     <p>^Each expr
2c7d0 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65  ession in the re
2c7e0 73 75 6c 74 2d 73 65 74 20 69 73 20 74 68 65 6e  sult-set is then
2c7f0 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20   evaluated once 
2c800 66 6f 72 20 65 61 63 68 0a 20 20 20 20 67 72 6f  for each.    gro
2c810 75 70 20 6f 66 20 72 6f 77 73 2e 20 5e 49 66 20  up of rows. ^If 
2c820 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
2c830 73 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 65  s an aggregate e
2c840 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 69 73  xpression, it is
2c850 20 0a 20 20 20 20 65 76 61 6c 75 61 74 65 64 20   .    evaluated 
2c860 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20  across all rows 
2c870 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 4f  in the group. ^O
2c880 74 68 65 72 77 69 73 65 2c 20 69 74 20 69 73 20  therwise, it is 
2c890 65 76 61 6c 75 61 74 65 64 20 61 67 61 69 6e 73  evaluated agains
2c8a0 74 0a 20 20 20 20 61 20 73 69 6e 67 6c 65 20 61  t.    a single a
2c8b0 72 62 69 74 72 61 72 69 6c 79 20 63 68 6f 73 65  rbitrarily chose
2c8c0 6e 20 72 6f 77 20 66 72 6f 6d 20 77 69 74 68 69  n row from withi
2c8d0 6e 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 49 66  n the group. ^If
2c8e0 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 0a 20   there is more. 
2c8f0 20 20 20 74 68 61 6e 20 6f 6e 65 20 6e 6f 6e 2d     than one non-
2c900 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
2c910 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75  sion in the resu
2c920 6c 74 2d 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c  lt-set, then all
2c930 20 73 75 63 68 0a 20 20 20 20 65 78 70 72 65 73   such.    expres
2c940 73 69 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61  sions are evalua
2c950 74 65 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65  ted for the same
2c960 20 72 6f 77 2e 0a 0a 20 20 20 20 3c 70 3e 5e 45   row...    <p>^E
2c970 61 63 68 20 67 72 6f 75 70 20 6f 66 20 69 6e 70  ach group of inp
2c980 75 74 20 64 61 74 61 73 65 74 20 72 6f 77 73 20  ut dataset rows 
2c990 63 6f 6e 74 72 69 62 75 74 65 73 20 61 20 73 69  contributes a si
2c9a0 6e 67 6c 65 20 72 6f 77 20 74 6f 20 74 68 65 20  ngle row to the 
2c9b0 0a 20 20 20 20 73 65 74 20 6f 66 20 72 65 73 75  .    set of resu
2c9c0 6c 74 20 72 6f 77 73 2e 20 5e 53 75 62 6a 65 63  lt rows. ^Subjec
2c9d0 74 20 74 6f 20 66 69 6c 74 65 72 69 6e 67 20 61  t to filtering a
2c9e0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
2c9f0 68 65 20 44 49 53 54 49 4e 43 54 0a 20 20 20 20  he DISTINCT.    
2ca00 6b 65 79 77 6f 72 64 2c 20 74 68 65 20 6e 75 6d  keyword, the num
2ca10 62 65 72 20 6f 66 20 72 6f 77 73 20 72 65 74 75  ber of rows retu
2ca20 72 6e 65 64 20 62 79 20 61 6e 20 61 67 67 72 65  rned by an aggre
2ca30 67 61 74 65 20 71 75 65 72 79 20 77 69 74 68 20  gate query with 
2ca40 61 20 47 52 4f 55 50 0a 20 20 20 20 42 59 20 63  a GROUP.    BY c
2ca50 6c 61 75 73 65 20 69 73 20 74 68 65 20 73 61 6d  lause is the sam
2ca60 65 20 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20  e as the number 
2ca70 6f 66 20 67 72 6f 75 70 73 20 6f 66 20 72 6f 77  of groups of row
2ca80 73 20 70 72 6f 64 75 63 65 64 20 62 79 20 61 70  s produced by ap
2ca90 70 6c 79 69 6e 67 0a 20 20 20 20 74 68 65 20 47  plying.    the G
2caa0 52 4f 55 50 20 42 59 20 61 6e 64 20 48 41 56 49  ROUP BY and HAVI
2cab0 4e 47 20 63 6c 61 75 73 65 73 20 74 6f 20 74 68  NG clauses to th
2cac0 65 20 66 69 6c 74 65 72 65 64 20 69 6e 70 75 74  e filtered input
2cad0 20 64 61 74 61 73 65 74 2e 0a 3c 2f 75 6c 3e 0a   dataset..</ul>.
2cae0 0a 3c 70 3e 3c 62 3e 34 2e 20 52 65 6d 6f 76 61  .<p><b>4. Remova
2caf0 6c 20 6f 66 20 64 75 70 6c 69 63 61 74 65 20 72  l of duplicate r
2cb00 6f 77 73 20 28 44 49 53 54 49 4e 43 54 20 70 72  ows (DISTINCT pr
2cb10 6f 63 65 73 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c  ocessing).</b>.<
2cb20 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
2cb30 64 69 73 74 69 6e 63 74 3c 2f 74 63 6c 3e 0a 3c  distinct</tcl>.<
2cb40 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20  tcl>hd_keywords 
2cb50 7b 44 49 53 54 49 4e 43 54 7d 3c 2f 74 63 6c 3e  {DISTINCT}</tcl>
2cb60 0a 0a 3c 70 3e 5e 4f 6e 65 20 6f 66 20 74 68 65  ..<p>^One of the
2cb70 20 41 4c 4c 20 6f 72 20 44 49 53 54 49 4e 43 54   ALL or DISTINCT
2cb80 20 6b 65 79 77 6f 72 64 73 20 6d 61 79 20 66 6f   keywords may fo
2cb90 6c 6c 6f 77 20 74 68 65 20 53 45 4c 45 43 54 20  llow the SELECT 
2cba0 6b 65 79 77 6f 72 64 20 69 6e 20 61 20 0a 73 69  keyword in a .si
2cbb0 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
2cbc0 65 6d 65 6e 74 2e 20 5e 49 66 20 74 68 65 20 73  ement. ^If the s
2cbd0 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73 20  imple SELECT is 
2cbe0 61 20 53 45 4c 45 43 54 20 41 4c 4c 2c 20 74 68  a SELECT ALL, th
2cbf0 65 6e 20 74 68 65 0a 65 6e 74 69 72 65 20 73 65  en the.entire se
2cc00 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  t of result rows
2cc10 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 62 79   are returned by
2cc20 20 74 68 65 20 53 45 4c 45 43 54 2e 20 5e 49 66   the SELECT. ^If
2cc30 20 6e 65 69 74 68 65 72 20 41 4c 4c 20 6f 72 0a   neither ALL or.
2cc40 44 49 53 54 49 4e 43 54 20 61 72 65 20 70 72 65  DISTINCT are pre
2cc50 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 62  sent, then the b
2cc60 65 68 61 76 69 6f 72 20 69 73 20 61 73 20 69 66  ehavior is as if
2cc70 20 41 4c 4c 20 77 65 72 65 20 73 70 65 63 69 66   ALL were specif
2cc80 69 65 64 2e 20 0a 5e 49 66 20 74 68 65 20 73 69  ied. .^If the si
2cc90 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73 20 61  mple SELECT is a
2cca0 20 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54   SELECT DISTINCT
2ccb0 2c 20 74 68 65 6e 20 64 75 70 6c 69 63 61 74 65  , then duplicate
2ccc0 20 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65   rows are remove
2ccd0 64 0a 66 72 6f 6d 20 74 68 65 20 73 65 74 20 6f  d.from the set o
2cce0 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 62 65  f result rows be
2ccf0 66 6f 72 65 20 69 74 20 69 73 20 72 65 74 75 72  fore it is retur
2cd00 6e 65 64 2e 20 5e 46 6f 72 20 74 68 65 20 70 75  ned. ^For the pu
2cd10 72 70 6f 73 65 73 20 6f 66 0a 64 65 74 65 63 74  rposes of.detect
2cd20 69 6e 67 20 64 75 70 6c 69 63 61 74 65 20 72 6f  ing duplicate ro
2cd30 77 73 2c 20 74 77 6f 20 4e 55 4c 4c 20 76 61 6c  ws, two NULL val
2cd40 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ues are consider
2cd50 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c 2e 20  ed to be equal. 
2cd60 5e 54 68 65 0a 6e 6f 72 6d 61 6c 20 72 75 6c 65  ^The.normal rule
2cd70 73 20 66 6f 72 20 73 65 6c 65 63 74 69 6e 67 20  s for selecting 
2cd80 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  a collation sequ
2cd90 65 6e 63 65 20 74 6f 20 63 6f 6d 70 61 72 65 20  ence to compare 
2cda0 74 65 78 74 20 76 61 6c 75 65 73 20 77 69 74 68  text values with
2cdb0 0a 61 70 70 6c 79 2e 0a 0a 3c 74 63 6c 3e 0a 68  .apply...<tcl>.h
2cdc0 64 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6d 70 6f  d_fragment compo
2cdd0 75 6e 64 20 7b 63 6f 6d 70 6f 75 6e 64 20 73 65  und {compound se
2cde0 6c 65 63 74 7d 20 7b 63 6f 6d 70 6f 75 6e 64 20  lect} {compound 
2cdf0 71 75 65 72 79 7d 20 7b 63 6f 6d 70 6f 75 6e 64  query} {compound
2ce00 20 53 45 4c 45 43 54 7d 20 7b 63 6f 6d 70 6f 75   SELECT} {compou
2ce10 6e 64 20 53 45 4c 45 43 54 73 7d 0a 3c 2f 74 63  nd SELECTs}.</tc
2ce20 6c 3e 0a 3c 68 33 3e 43 6f 6d 70 6f 75 6e 64 20  l>.<h3>Compound 
2ce30 53 65 6c 65 63 74 20 53 74 61 74 65 6d 65 6e 74  Select Statement
2ce40 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 77 6f 20 6f  s</h3>..<p>Two o
2ce50 72 20 6d 6f 72 65 20 5b 73 69 6d 70 6c 65 20 53  r more [simple S
2ce60 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
2ce70 73 20 6d 61 79 20 62 65 20 63 6f 6e 6e 65 63 74  s may be connect
2ce80 65 64 20 74 6f 67 65 74 68 65 72 20 74 6f 20 66  ed together to f
2ce90 6f 72 6d 0a 61 20 63 6f 6d 70 6f 75 6e 64 20 53  orm.a compound S
2cea0 45 4c 45 43 54 20 75 73 69 6e 67 20 74 68 65 20  ELECT using the 
2ceb0 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c  UNION, UNION ALL
2cec0 2c 20 49 4e 54 45 52 53 45 43 54 20 6f 72 20 45  , INTERSECT or E
2ced0 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72 2c 0a  XCEPT operator,.
2cee0 61 73 20 73 68 6f 77 6e 20 62 79 20 74 68 65 20  as shown by the 
2cef0 66 6f 6c 6c 6f 77 69 6e 67 20 64 69 61 67 72 61  following diagra
2cf00 6d 3a 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73  m:..<tcl>.Recurs
2cf10 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
2cf20 20 63 6f 6d 70 6f 75 6e 64 2d 73 65 6c 65 63 74   compound-select
2cf30 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
2cf40 3e 5e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  >^In a compound 
2cf50 53 45 4c 45 43 54 2c 20 61 6c 6c 20 74 68 65 20  SELECT, all the 
2cf60 63 6f 6e 73 74 69 74 75 65 6e 74 20 53 45 4c 45  constituent SELE
2cf70 43 54 73 20 6d 75 73 74 20 72 65 74 75 72 6e 20  CTs must return 
2cf80 74 68 65 20 73 61 6d 65 20 0a 6e 75 6d 62 65 72  the same .number
2cf90 20 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d   of result colum
2cfa0 6e 73 2e 20 5e 41 73 20 74 68 65 20 63 6f 6d 70  ns. ^As the comp
2cfb0 6f 6e 65 6e 74 73 20 6f 66 20 61 20 63 6f 6d 70  onents of a comp
2cfc0 6f 75 6e 64 20 53 45 4c 45 43 54 20 6d 75 73 74  ound SELECT must
2cfd0 0a 62 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  .be simple SELEC
2cfe0 54 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 74 68  T statements, th
2cff0 65 79 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61  ey may not conta
2d000 69 6e 20 5b 4f 52 44 45 52 20 42 59 5d 20 6f 72  in [ORDER BY] or
2d010 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73 65 73   [LIMIT] clauses
2d020 2e 0a 5e 5b 4f 52 44 45 52 20 42 59 5d 20 61 6e  ..^[ORDER BY] an
2d030 64 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73 65  d [LIMIT] clause
2d040 73 20 6d 61 79 20 6f 6e 6c 79 20 6f 63 63 75 72  s may only occur
2d050 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
2d060 68 65 20 65 6e 74 69 72 65 20 63 6f 6d 70 6f 75  he entire compou
2d070 6e 64 0a 53 45 4c 45 43 54 2c 20 61 6e 64 20 74  nd.SELECT, and t
2d080 68 65 6e 20 6f 6e 6c 79 20 69 66 20 74 68 65 20  hen only if the 
2d090 66 69 6e 61 6c 20 65 6c 65 6d 65 6e 74 20 6f 66  final element of
2d0a0 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 69 73   the compound is
2d0b0 20 6e 6f 74 20 61 20 5b 56 41 4c 55 45 53 5d 20   not a [VALUES] 
2d0c0 63 6c 61 75 73 65 2e 0a 0a 3c 70 3e 5e 41 20 63  clause...<p>^A c
2d0d0 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 63  ompound SELECT c
2d0e0 72 65 61 74 65 64 20 75 73 69 6e 67 20 55 4e 49  reated using UNI
2d0f0 4f 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f 72 20  ON ALL operator 
2d100 72 65 74 75 72 6e 73 20 61 6c 6c 20 74 68 65 20  returns all the 
2d110 72 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20 53 45  rows.from the SE
2d120 4c 45 43 54 20 74 6f 20 74 68 65 20 6c 65 66 74  LECT to the left
2d130 20 6f 66 20 74 68 65 20 55 4e 49 4f 4e 20 41 4c   of the UNION AL
2d140 4c 20 6f 70 65 72 61 74 6f 72 2c 20 61 6e 64 20  L operator, and 
2d150 61 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66 72 6f  all the rows.fro
2d160 6d 20 74 68 65 20 53 45 4c 45 43 54 20 74 6f 20  m the SELECT to 
2d170 74 68 65 20 72 69 67 68 74 20 6f 66 20 69 74 2e  the right of it.
2d180 20 5e 54 68 65 20 55 4e 49 4f 4e 20 6f 70 65 72   ^The UNION oper
2d190 61 74 6f 72 20 77 6f 72 6b 73 20 74 68 65 20 73  ator works the s
2d1a0 61 6d 65 20 77 61 79 20 61 73 0a 55 4e 49 4f 4e  ame way as.UNION
2d1b0 20 41 4c 4c 2c 20 65 78 63 65 70 74 20 74 68 61   ALL, except tha
2d1c0 74 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73  t duplicate rows
2d1d0 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f   are removed fro
2d1e0 6d 20 74 68 65 20 66 69 6e 61 6c 20 72 65 73 75  m the final resu
2d1f0 6c 74 20 73 65 74 2e 0a 5e 54 68 65 20 49 4e 54  lt set..^The INT
2d200 45 52 53 45 43 54 20 6f 70 65 72 61 74 6f 72 20  ERSECT operator 
2d210 72 65 74 75 72 6e 73 20 74 68 65 20 69 6e 74 65  returns the inte
2d220 72 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 20  rsection of the 
2d230 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 6c  results of the l
2d240 65 66 74 20 61 6e 64 0a 72 69 67 68 74 20 53 45  eft and.right SE
2d250 4c 45 43 54 73 2e 20 20 5e 54 68 65 20 45 58 43  LECTs.  ^The EXC
2d260 45 50 54 20 6f 70 65 72 61 74 6f 72 20 72 65 74  EPT operator ret
2d270 75 72 6e 73 20 74 68 65 20 73 75 62 73 65 74 20  urns the subset 
2d280 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64  of rows returned
2d290 20 62 79 20 74 68 65 0a 6c 65 66 74 20 53 45 4c   by the.left SEL
2d2a0 45 43 54 20 74 68 61 74 20 61 72 65 20 6e 6f 74  ECT that are not
2d2b0 20 61 6c 73 6f 20 72 65 74 75 72 6e 65 64 20 62   also returned b
2d2c0 79 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  y the right-hand
2d2d0 20 53 45 4c 45 43 54 2e 20 5e 44 75 70 6c 69 63   SELECT. ^Duplic
2d2e0 61 74 65 0a 72 6f 77 73 20 61 72 65 20 72 65 6d  ate.rows are rem
2d2f0 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65  oved from the re
2d300 73 75 6c 74 73 20 6f 66 20 49 4e 54 45 52 53 45  sults of INTERSE
2d310 43 54 20 61 6e 64 20 45 58 43 45 50 54 20 6f 70  CT and EXCEPT op
2d320 65 72 61 74 6f 72 73 20 62 65 66 6f 72 65 20 74  erators before t
2d330 68 65 0a 72 65 73 75 6c 74 20 73 65 74 20 69 73  he.result set is
2d340 20 72 65 74 75 72 6e 65 64 2e 0a 0a 3c 70 3e 5e   returned...<p>^
2d350 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
2d360 20 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 20   of determining 
2d370 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 66  duplicate rows f
2d380 6f 72 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  or the results o
2d390 66 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c 45 43  f compound.SELEC
2d3a0 54 20 6f 70 65 72 61 74 6f 72 73 2c 20 4e 55 4c  T operators, NUL
2d3b0 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e  L values are con
2d3c0 73 69 64 65 72 65 64 20 65 71 75 61 6c 20 74 6f  sidered equal to
2d3d0 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75   other NULL valu
2d3e0 65 73 20 61 6e 64 0a 64 69 73 74 69 6e 63 74 20  es and.distinct 
2d3f0 66 72 6f 6d 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c  from all non-NUL
2d400 4c 20 76 61 6c 75 65 73 2e 20 5e 54 68 65 20 63  L values. ^The c
2d410 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
2d420 65 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72  e used to compar
2d430 65 20 0a 74 77 6f 20 74 65 78 74 20 76 61 6c 75  e .two text valu
2d440 65 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  es is determined
2d450 20 61 73 20 69 66 20 74 68 65 20 63 6f 6c 75 6d   as if the colum
2d460 6e 73 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61  ns of the left a
2d470 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 0a 53 45  nd right-hand.SE
2d480 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
2d490 77 65 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e  were the left an
2d4a0 64 20 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65  d right-hand ope
2d4b0 72 61 6e 64 73 20 6f 66 20 74 68 65 20 65 71 75  rands of the equ
2d4c0 61 6c 73 20 28 3d 29 0a 6f 70 65 72 61 74 6f 72  als (=).operator
2d4d0 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 67 72  , except that gr
2d4e0 65 61 74 65 72 20 70 72 65 63 65 64 65 6e 63 65  eater precedence
2d4f0 20 69 73 20 6e 6f 74 20 61 73 73 69 67 6e 65 64   is not assigned
2d500 20 74 6f 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20   to a collation 
2d510 0a 73 65 71 75 65 6e 63 65 20 73 70 65 63 69 66  .sequence specif
2d520 69 65 64 20 77 69 74 68 20 74 68 65 20 70 6f 73  ied with the pos
2d530 74 66 69 78 20 43 4f 4c 4c 41 54 45 20 6f 70 65  tfix COLLATE ope
2d540 72 61 74 6f 72 2e 20 5e 4e 6f 20 61 66 66 69 6e  rator. ^No affin
2d550 69 74 79 0a 74 72 61 6e 73 66 6f 72 6d 61 74 69  ity.transformati
2d560 6f 6e 73 20 61 72 65 20 61 70 70 6c 69 65 64 20  ons are applied 
2d570 74 6f 20 61 6e 79 20 76 61 6c 75 65 73 20 77 68  to any values wh
2d580 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 72 6f 77  en comparing row
2d590 73 20 61 73 20 70 61 72 74 20 6f 66 20 61 0a 63  s as part of a.c
2d5a0 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 20  ompound SELECT. 
2d5b0 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 74 68 72 65  ..<p>^(When thre
2d5c0 65 20 6f 72 20 6d 6f 72 65 20 73 69 6d 70 6c 65  e or more simple
2d5d0 20 53 45 4c 45 43 54 73 20 61 72 65 20 63 6f 6e   SELECTs are con
2d5e0 6e 65 63 74 65 64 20 69 6e 74 6f 20 61 20 63 6f  nected into a co
2d5f0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 0a 74  mpound SELECT,.t
2d600 68 65 79 20 67 72 6f 75 70 20 66 72 6f 6d 20 6c  hey group from l
2d610 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 49 6e  eft to right. In
2d620 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
2d630 20 22 41 22 2c 20 22 42 22 20 61 6e 64 20 22 43   "A", "B" and "C
2d640 22 20 61 72 65 20 61 6c 6c 0a 73 69 6d 70 6c 65  " are all.simple
2d650 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2d660 74 73 2c 20 28 41 20 6f 70 20 42 20 6f 70 20 43  ts, (A op B op C
2d670 29 20 69 73 20 70 72 6f 63 65 73 73 65 64 20 61  ) is processed a
2d680 73 20 28 28 41 20 6f 70 20 42 29 20 6f 70 20 43  s ((A op B) op C
2d690 29 2e 29 5e 0a 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c  ).)^..</p>..<tcl
2d6a0 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f 72 64  >hd_fragment ord
2d6b0 65 72 62 79 20 7b 6f 72 64 65 72 20 62 79 7d 20  erby {order by} 
2d6c0 7b 4f 52 44 45 52 20 42 59 7d 3c 2f 74 63 6c 3e  {ORDER BY}</tcl>
2d6d0 0a 3c 68 33 3e 54 68 65 20 4f 52 44 45 52 20 42  .<h3>The ORDER B
2d6e0 59 20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c  Y clause</h3>..<
2d6f0 70 3e 49 66 20 61 20 53 45 4c 45 43 54 20 73 74  p>If a SELECT st
2d700 61 74 65 6d 65 6e 74 20 74 68 61 74 20 72 65 74  atement that ret
2d710 75 72 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f  urns more than o
2d720 6e 65 20 72 6f 77 20 64 6f 65 73 20 6e 6f 74 20  ne row does not 
2d730 68 61 76 65 20 61 6e 0a 4f 52 44 45 52 20 42 59  have an.ORDER BY
2d740 20 63 6c 61 75 73 65 2c 20 74 68 65 20 6f 72 64   clause, the ord
2d750 65 72 20 69 6e 20 77 68 69 63 68 20 74 68 65 20  er in which the 
2d760 72 6f 77 73 20 61 72 65 20 72 65 74 75 72 6e 65  rows are returne
2d770 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  d is undefined..
2d780 4f 72 2c 20 69 66 20 61 20 53 45 4c 45 43 54 20  Or, if a SELECT 
2d790 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 68  statement does h
2d7a0 61 76 65 20 61 6e 20 4f 52 44 45 52 20 42 59 20  ave an ORDER BY 
2d7b0 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65  clause, then the
2d7c0 20 6c 69 73 74 20 6f 66 0a 65 78 70 72 65 73 73   list of.express
2d7d0 69 6f 6e 73 20 61 74 74 61 63 68 65 64 20 74 6f  ions attached to
2d7e0 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 64 65   the ORDER BY de
2d7f0 74 65 72 6d 69 6e 65 20 74 68 65 20 6f 72 64 65  termine the orde
2d800 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73 0a  r in which rows.
2d810 61 72 65 20 72 65 74 75 72 6e 65 64 20 74 6f 20  are returned to 
2d820 74 68 65 20 75 73 65 72 2e 0a 0a 3c 70 3e 0a 5e  the user...<p>.^
2d830 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53  In a [compound S
2d840 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
2d850 2c 20 6f 6e 6c 79 20 74 68 65 20 6c 61 73 74 20  , only the last 
2d860 6f 72 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b 73  or right-most [s
2d870 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 0a 6d 61  imple SELECT].ma
2d880 79 20 68 61 76 65 20 61 6e 20 4f 52 44 45 52 20  y have an ORDER 
2d890 42 59 20 63 6c 61 75 73 65 2e 20 5e 54 68 61 74  BY clause. ^That
2d8a0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
2d8b0 20 77 69 6c 6c 20 61 70 70 6c 79 20 61 63 72 6f   will apply acro
2d8c0 73 73 20 61 6c 6c 20 65 6c 65 6d 65 6e 74 73 20  ss all elements 
2d8d0 6f 66 0a 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e  of.the compound.
2d8e0 20 5e 49 66 20 74 68 65 20 72 69 67 68 74 2d 6d   ^If the right-m
2d8f0 6f 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61  ost element of a
2d900 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43   [compound SELEC
2d910 54 5d 20 69 73 20 61 20 5b 56 41 4c 55 45 53 5d  T] is a [VALUES]
2d920 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 6e 6f   clause,.then no
2d930 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
2d940 20 69 73 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 74   is allowed on t
2d950 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  hat statement...
2d960 0a 3c 70 3e 5e 52 6f 77 73 20 61 72 65 20 66 69  .<p>^Rows are fi
2d970 72 73 74 20 73 6f 72 74 65 64 20 62 61 73 65 64  rst sorted based
2d980 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20   on the results 
2d990 6f 66 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of.evaluating th
2d9a0 65 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70 72  e left-most expr
2d9b0 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 4f 52  ession in the OR
2d9c0 44 45 52 20 42 59 20 6c 69 73 74 2c 20 74 68 65  DER BY list, the
2d9d0 6e 20 74 69 65 73 20 61 72 65 20 62 72 6f 6b 65  n ties are broke
2d9e0 6e 0a 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20  n.by evaluating 
2d9f0 74 68 65 20 73 65 63 6f 6e 64 20 6c 65 66 74 2d  the second left-
2da00 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20  most expression 
2da10 61 6e 64 20 73 6f 20 6f 6e 2e 20 54 68 65 20 6f  and so on. The o
2da20 72 64 65 72 20 69 6e 20 77 68 69 63 68 0a 74 77  rder in which.tw
2da30 6f 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  o rows for which
2da40 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65 78   all ORDER BY ex
2da50 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61  pressions evalua
2da60 74 65 20 74 6f 20 65 71 75 61 6c 20 76 61 6c 75  te to equal valu
2da70 65 73 20 61 72 65 0a 72 65 74 75 72 6e 65 64 20  es are.returned 
2da80 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 5e 45  is undefined. ^E
2da90 61 63 68 20 4f 52 44 45 52 20 42 59 20 65 78 70  ach ORDER BY exp
2daa0 72 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 6f  ression may be o
2dab0 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77  ptionally follow
2dac0 65 64 0a 62 79 20 6f 6e 65 20 6f 66 20 74 68 65  ed.by one of the
2dad0 20 6b 65 79 77 6f 72 64 73 20 41 53 43 20 28 73   keywords ASC (s
2dae0 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73 20 61 72  maller values ar
2daf0 65 20 72 65 74 75 72 6e 65 64 20 66 69 72 73 74  e returned first
2db00 29 20 6f 72 20 44 45 53 43 20 28 6c 61 72 67 65  ) or DESC (large
2db10 72 0a 76 61 6c 75 65 73 20 61 72 65 20 72 65 74  r.values are ret
2db20 75 72 6e 65 64 20 66 69 72 73 74 29 2e 20 5e 49  urned first). ^I
2db30 66 20 6e 65 69 74 68 65 72 20 41 53 43 20 6f 72  f neither ASC or
2db40 20 44 45 53 43 20 61 72 65 20 73 70 65 63 69 66   DESC are specif
2db50 69 65 64 2c 20 72 6f 77 73 0a 61 72 65 20 73 6f  ied, rows.are so
2db60 72 74 65 64 20 69 6e 20 61 73 63 65 6e 64 69 6e  rted in ascendin
2db70 67 20 28 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65  g (smaller value
2db80 73 20 66 69 72 73 74 29 20 6f 72 64 65 72 20 62  s first) order b
2db90 79 20 64 65 66 61 75 6c 74 2e 0a 0a 3c 70 3e 45  y default...<p>E
2dba0 61 63 68 20 4f 52 44 45 52 20 42 59 20 65 78 70  ach ORDER BY exp
2dbb0 72 65 73 73 69 6f 6e 20 69 73 20 70 72 6f 63 65  ression is proce
2dbc0 73 73 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  ssed as follows:
2dbd0 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c  </p>..<ol>.<li><
2dbe0 70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20  p>^If the ORDER 
2dbf0 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
2dc00 20 61 20 63 6f 6e 73 74 61 6e 74 20 69 6e 74 65   a constant inte
2dc10 67 65 72 20 4b 20 74 68 65 6e 20 74 68 65 0a 65  ger K then the.e
2dc20 78 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e  xpression is con
2dc30 73 69 64 65 72 65 64 20 61 6e 20 61 6c 69 61 73  sidered an alias
2dc40 20 66 6f 72 20 74 68 65 20 4b 2d 74 68 20 63 6f   for the K-th co
2dc50 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75  lumn of the resu
2dc60 6c 74 20 73 65 74 0a 28 63 6f 6c 75 6d 6e 73 20  lt set.(columns 
2dc70 61 72 65 20 6e 75 6d 62 65 72 65 64 20 66 72 6f  are numbered fro
2dc80 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20  m left to right 
2dc90 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 31 29  starting with 1)
2dca0 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68  ...<li><p>^If th
2dcb0 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  e ORDER BY expre
2dcc0 73 73 69 6f 6e 20 69 73 20 61 6e 20 69 64 65 6e  ssion is an iden
2dcd0 74 69 66 69 65 72 20 74 68 61 74 20 63 6f 72 72  tifier that corr
2dce0 65 73 70 6f 6e 64 73 20 74 6f 0a 74 68 65 20 61  esponds to.the a
2dcf0 6c 69 61 73 20 6f 66 20 6f 6e 65 20 6f 66 20 74  lias of one of t
2dd00 68 65 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e  he output column
2dd10 73 2c 20 74 68 65 6e 20 74 68 65 20 65 78 70 72  s, then the expr
2dd20 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64  ession is consid
2dd30 65 72 65 64 0a 61 6e 20 61 6c 69 61 73 20 66 6f  ered.an alias fo
2dd40 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 0a  r that column...
2dd50 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73  <li><p>^Otherwis
2dd60 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20  e, if the ORDER 
2dd70 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
2dd80 20 61 6e 79 20 6f 74 68 65 72 20 65 78 70 72 65   any other expre
2dd90 73 73 69 6f 6e 2c 20 69 74 20 0a 69 73 20 65 76  ssion, it .is ev
2dda0 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65 20  aluated and the 
2ddb0 72 65 74 75 72 6e 65 64 20 76 61 6c 75 65 20 75  returned value u
2ddc0 73 65 64 20 74 6f 20 6f 72 64 65 72 20 74 68 65  sed to order the
2ddd0 20 6f 75 74 70 75 74 20 72 6f 77 73 2e 20 5e 49   output rows. ^I
2dde0 66 0a 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  f.the SELECT sta
2ddf0 74 65 6d 65 6e 74 20 69 73 20 61 20 73 69 6d 70  tement is a simp
2de00 6c 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20  le SELECT, then 
2de10 61 6e 20 4f 52 44 45 52 20 42 59 20 6d 61 79 20  an ORDER BY may 
2de20 63 6f 6e 74 61 69 6e 20 61 6e 79 0a 61 72 62 69  contain any.arbi
2de30 74 72 61 72 79 20 65 78 70 72 65 73 73 69 6f 6e  trary expression
2de40 73 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69 66 20  s. ^However, if 
2de50 74 68 65 20 53 45 4c 45 43 54 20 69 73 20 61 20  the SELECT is a 
2de60 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c  compound SELECT,
2de70 20 74 68 65 6e 0a 4f 52 44 45 52 20 42 59 20 65   then.ORDER BY e
2de80 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20  xpressions that 
2de90 61 72 65 20 6e 6f 74 20 61 6c 69 61 73 65 73 20  are not aliases 
2dea0 74 6f 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e  to output column
2deb0 73 20 6d 75 73 74 20 62 65 20 65 78 61 63 74 6c  s must be exactl
2dec0 79 0a 74 68 65 20 73 61 6d 65 20 61 73 20 61 6e  y.the same as an
2ded0 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65 64   expression used
2dee0 20 61 73 20 61 6e 20 6f 75 74 70 75 74 20 63 6f   as an output co
2def0 6c 75 6d 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  lumn..</ol>..<p>
2df00 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65  ^For the purpose
2df10 73 20 6f 66 20 73 6f 72 74 69 6e 67 20 72 6f 77  s of sorting row
2df20 73 2c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  s, values are co
2df30 6d 70 61 72 65 64 20 69 6e 20 74 68 65 20 73 61  mpared in the sa
2df40 6d 65 20 77 61 79 0a 61 73 20 66 6f 72 20 5b 63  me way.as for [c
2df50 6f 6d 70 61 72 69 73 6f 6e 20 65 78 70 72 65 73  omparison expres
2df60 73 69 6f 6e 73 5d 2e 20 54 68 65 20 63 6f 6c 6c  sions]. The coll
2df70 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75  ation sequence u
2df80 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 0a 74  sed to compare.t
2df90 77 6f 20 74 65 78 74 20 76 61 6c 75 65 73 20 69  wo text values i
2dfa0 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61 73 20  s determined as 
2dfb0 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 20  follows:..<ol>. 
2dfc0 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20   <li><p>^If the 
2dfd0 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73  ORDER BY express
2dfe0 69 6f 6e 20 69 73 20 61 73 73 69 67 6e 65 64 20  ion is assigned 
2dff0 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  a collation sequ
2e000 65 6e 63 65 20 75 73 69 6e 67 0a 20 20 74 68 65  ence using.  the
2e010 20 70 6f 73 74 66 69 78 20 5b 43 4f 4c 4c 41 54   postfix [COLLAT
2e020 45 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74 68 65  E operator], the
2e030 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  n the specified 
2e040 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
2e050 63 65 20 69 73 0a 20 20 75 73 65 64 2e 0a 20 20  ce is.  used..  
2e060 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73  <li><p>^Otherwis
2e070 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20  e, if the ORDER 
2e080 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
2e090 20 61 6e 20 61 6c 69 61 73 20 74 6f 20 61 6e 20   an alias to an 
2e0a0 65 78 70 72 65 73 73 69 6f 6e 0a 20 20 74 68 61  expression.  tha
2e0b0 74 20 68 61 73 20 62 65 65 6e 20 61 73 73 69 67  t has been assig
2e0c0 6e 65 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20  ned a collation 
2e0d0 73 65 71 75 65 6e 63 65 20 75 73 69 6e 67 20 74  sequence using t
2e0e0 68 65 20 70 6f 73 74 66 69 78 20 0a 20 20 5b 43  he postfix .  [C
2e0f0 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 5d  OLLATE operator]
2e100 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 6c 61  , then the colla
2e110 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 61 73  tion sequence as
2e120 73 69 67 6e 65 64 20 74 6f 20 74 68 65 20 61 6c  signed to the al
2e130 69 61 73 65 64 0a 20 20 65 78 70 72 65 73 73 69  iased.  expressi
2e140 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 3c 6c  on is used..  <l
2e150 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c  i><p>^Otherwise,
2e160 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59   if the ORDER BY
2e170 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
2e180 20 63 6f 6c 75 6d 6e 20 6f 72 20 61 6e 20 61 6c   column or an al
2e190 69 61 73 20 6f 66 0a 20 20 61 6e 20 65 78 70 72  ias of.  an expr
2e1a0 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 61  ession that is a
2e1b0 20 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20 74 68   column, then th
2e1c0 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
2e1d0 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72  ion sequence for
2e1e0 0a 20 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73  .  the column is
2e1f0 20 75 73 65 64 2e 20 0a 20 20 3c 6c 69 3e 3c 70   used. .  <li><p
2e200 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65  >^Otherwise, the
2e210 20 5b 42 49 4e 41 52 59 5d 20 63 6f 6c 6c 61 74   [BINARY] collat
2e220 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73 20  ion sequence is 
2e230 75 73 65 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  used..</ol>..<p>
2e240 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53  In a [compound S
2e250 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
2e260 2c 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65  , all ORDER BY e
2e270 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 68  xpressions are h
2e280 61 6e 64 6c 65 64 0a 61 73 20 61 6c 69 61 73 65  andled.as aliase
2e290 73 20 66 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65  s for one of the
2e2a0 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20   result columns 
2e2b0 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e  of the compound.
2e2c0 0a 5e 28 49 66 20 61 6e 20 4f 52 44 45 52 20 42  .^(If an ORDER B
2e2d0 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
2e2e0 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61  not an integer a
2e2f0 6c 69 61 73 2c 20 74 68 65 6e 20 53 51 4c 69 74  lias, then SQLit
2e300 65 20 73 65 61 72 63 68 65 73 0a 74 68 65 20 6c  e searches.the l
2e310 65 66 74 2d 6d 6f 73 74 20 53 45 4c 45 43 54 20  eft-most SELECT 
2e320 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20  in the compound 
2e330 66 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c  for a result col
2e340 75 6d 6e 20 74 68 61 74 20 6d 61 74 63 68 65 73  umn that matches
2e350 20 65 69 74 68 65 72 0a 74 68 65 20 73 65 63 6f   either.the seco
2e360 6e 64 20 6f 72 20 74 68 69 72 64 20 72 75 6c 65  nd or third rule
2e370 73 20 61 62 6f 76 65 2e 20 49 66 20 61 20 6d 61  s above. If a ma
2e380 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
2e390 65 20 73 65 61 72 63 68 20 73 74 6f 70 73 20 61  e search stops a
2e3a0 6e 64 0a 74 68 65 20 65 78 70 72 65 73 73 69 6f  nd.the expressio
2e3b0 6e 20 69 73 20 68 61 6e 64 6c 65 64 20 61 73 20  n is handled as 
2e3c0 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
2e3d0 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 74   result column t
2e3e0 68 61 74 20 69 74 20 68 61 73 20 62 65 65 6e 0a  hat it has been.
2e3f0 6d 61 74 63 68 65 64 20 61 67 61 69 6e 73 74 2e  matched against.
2e400 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20   Otherwise, the 
2e410 6e 65 78 74 20 53 45 4c 45 43 54 20 74 6f 20 74  next SELECT to t
2e420 68 65 20 72 69 67 68 74 20 69 73 20 74 72 69 65  he right is trie
2e430 64 2c 20 61 6e 64 20 73 6f 20 6f 6e 2e 29 5e 0a  d, and so on.)^.
2e440 5e 49 66 20 6e 6f 20 6d 61 74 63 68 69 6e 67 20  ^If no matching 
2e450 65 78 70 72 65 73 73 69 6f 6e 20 63 61 6e 20 62  expression can b
2e460 65 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 72  e found in the r
2e470 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66  esult columns of
2e480 20 61 6e 79 0a 63 6f 6e 73 74 69 74 75 65 6e 74   any.constituent
2e490 20 53 45 4c 45 43 54 2c 20 69 74 20 69 73 20 61   SELECT, it is a
2e4a0 6e 20 65 72 72 6f 72 2e 20 5e 45 61 63 68 20 74  n error. ^Each t
2e4b0 65 72 6d 20 6f 66 20 74 68 65 20 4f 52 44 45 52  erm of the ORDER
2e4c0 20 42 59 20 63 6c 61 75 73 65 20 69 73 0a 70 72   BY clause is.pr
2e4d0 6f 63 65 73 73 65 64 20 73 65 70 61 72 61 74 65  ocessed separate
2e4e0 6c 79 20 61 6e 64 20 6d 61 79 20 62 65 20 6d 61  ly and may be ma
2e4f0 74 63 68 65 64 20 61 67 61 69 6e 73 74 20 72 65  tched against re
2e500 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 66 72 6f  sult columns fro
2e510 6d 20 64 69 66 66 65 72 65 6e 74 0a 53 45 4c 45  m different.SELE
2e520 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  CT statements in
2e530 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 3c 2f   the compound.</
2e540 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
2e550 6d 65 6e 74 20 6c 69 6d 69 74 6f 66 66 73 65 74  ment limitoffset
2e560 20 7b 4c 49 4d 49 54 7d 20 7b 4f 46 46 53 45 54   {LIMIT} {OFFSET
2e570 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  }</tcl>.<h3>The 
2e580 4c 49 4d 49 54 20 63 6c 61 75 73 65 3c 2f 68 33  LIMIT clause</h3
2e590 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54  >..<p>^The LIMIT
2e5a0 20 63 6c 61 75 73 65 20 69 73 20 75 73 65 64 20   clause is used 
2e5b0 74 6f 20 70 6c 61 63 65 20 61 6e 20 75 70 70 65  to place an uppe
2e5c0 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e  r bound on the n
2e5d0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a 72 65  umber of rows.re
2e5e0 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 65 6e  turned by the en
2e5f0 74 69 72 65 20 53 45 4c 45 43 54 20 73 74 61 74  tire SELECT stat
2e600 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 6e 20 61  ement...<p>^In a
2e610 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43   [compound SELEC
2e620 54 5d 2c 20 6f 6e 6c 79 20 74 68 65 0a 6c 61 73  T], only the.las
2e630 74 20 6f 72 20 72 69 67 68 74 2d 6d 6f 73 74 20  t or right-most 
2e640 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20  [simple SELECT] 
2e650 6d 61 79 20 63 6f 6e 74 61 69 6e 20 61 20 4c 49  may contain a LI
2e660 4d 49 54 20 63 6c 61 75 73 65 2e 20 20 0a 5e 49  MIT clause.  .^I
2e670 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45  n a [compound SE
2e680 4c 45 43 54 5d 2c 20 0a 74 68 65 20 4c 49 4d 49  LECT], .the LIMI
2e690 54 20 63 6c 61 75 73 65 20 61 70 70 6c 69 65 73  T clause applies
2e6a0 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 63   to the entire c
2e6b0 6f 6d 70 6f 75 6e 64 2c 20 6e 6f 74 20 6a 75 73  ompound, not jus
2e6c0 74 20 74 68 65 20 66 69 6e 61 6c 20 53 45 4c 45  t the final SELE
2e6d0 43 54 2e 0a 5e 49 66 20 74 68 65 20 72 69 67 68  CT..^If the righ
2e6e0 74 2d 6d 6f 73 74 20 5b 73 69 6d 70 6c 65 20 53  t-most [simple S
2e6f0 45 4c 45 43 54 5d 20 69 73 20 61 20 5b 56 41 4c  ELECT] is a [VAL
2e700 55 45 53 20 63 6c 61 75 73 65 5d 20 74 68 65 6e  UES clause] then
2e710 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65   no LIMIT clause
2e720 0a 69 73 20 61 6c 6c 6f 77 65 64 2e 0a 0a 3c 70  .is allowed...<p
2e730 3e 5e 41 6e 79 20 73 63 61 6c 61 72 20 65 78 70  >^Any scalar exp
2e740 72 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 75  ression may be u
2e750 73 65 64 20 69 6e 20 74 68 65 20 0a 4c 49 4d 49  sed in the .LIMI
2e760 54 20 63 6c 61 75 73 65 2c 20 73 6f 20 6c 6f 6e  T clause, so lon
2e770 67 20 61 73 20 69 74 20 65 76 61 6c 75 61 74 65  g as it evaluate
2e780 73 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  s to an integer 
2e790 6f 72 20 61 20 76 61 6c 75 65 20 74 68 61 74 20  or a value that 
2e7a0 63 61 6e 20 62 65 0a 6c 6f 73 73 6c 65 73 73 6c  can be.losslessl
2e7b0 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  y converted to a
2e7c0 6e 20 69 6e 74 65 67 65 72 2e 20 5e 49 66 20 74  n integer. ^If t
2e7d0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76  he expression ev
2e7e0 61 6c 75 61 74 65 73 20 74 6f 20 61 20 4e 55 4c  aluates to a NUL
2e7f0 4c 20 0a 76 61 6c 75 65 20 6f 72 20 61 6e 79 20  L .value or any 
2e800 6f 74 68 65 72 20 76 61 6c 75 65 20 74 68 61 74  other value that
2e810 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c   cannot be lossl
2e820 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20  essly converted 
2e830 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  to an integer, a
2e840 6e 0a 65 72 72 6f 72 20 69 73 20 72 65 74 75 72  n.error is retur
2e850 6e 65 64 2e 20 5e 49 66 20 74 68 65 20 4c 49 4d  ned. ^If the LIM
2e860 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76  IT expression ev
2e870 61 6c 75 61 74 65 73 20 74 6f 20 61 20 6e 65 67  aluates to a neg
2e880 61 74 69 76 65 20 76 61 6c 75 65 2c 0a 74 68 65  ative value,.the
2e890 6e 20 74 68 65 72 65 20 69 73 20 6e 6f 20 75 70  n there is no up
2e8a0 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65  per bound on the
2e8b0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
2e8c0 72 65 74 75 72 6e 65 64 2e 20 5e 4f 74 68 65 72  returned. ^Other
2e8d0 77 69 73 65 2c 20 74 68 65 0a 53 45 4c 45 43 54  wise, the.SELECT
2e8e0 20 72 65 74 75 72 6e 73 20 74 68 65 20 66 69 72   returns the fir
2e8f0 73 74 20 4e 20 72 6f 77 73 20 6f 66 20 69 74 73  st N rows of its
2e900 20 72 65 73 75 6c 74 20 73 65 74 20 6f 6e 6c 79   result set only
2e910 2c 20 77 68 65 72 65 20 4e 20 69 73 20 74 68 65  , where N is the
2e920 20 76 61 6c 75 65 0a 74 68 61 74 20 74 68 65 20   value.that the 
2e930 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e  LIMIT expression
2e940 20 65 76 61 6c 75 61 74 65 73 20 74 6f 2e 20 5e   evaluates to. ^
2e950 4f 72 2c 20 69 66 20 74 68 65 20 53 45 4c 45 43  Or, if the SELEC
2e960 54 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c  T statement woul
2e970 64 0a 72 65 74 75 72 6e 20 6c 65 73 73 20 74 68  d.return less th
2e980 61 6e 20 4e 20 72 6f 77 73 20 77 69 74 68 6f 75  an N rows withou
2e990 74 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  t a LIMIT clause
2e9a0 2c 20 74 68 65 6e 20 74 68 65 20 65 6e 74 69 72  , then the entir
2e9b0 65 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 0a  e result set is.
2e9c0 72 65 74 75 72 6e 65 64 2e 20 0a 0a 3c 70 3e 5e  returned. ..<p>^
2e9d0 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61  The expression a
2e9e0 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 6f  ttached to the o
2e9f0 70 74 69 6f 6e 61 6c 20 4f 46 46 53 45 54 20 63  ptional OFFSET c
2ea00 6c 61 75 73 65 20 74 68 61 74 20 6d 61 79 20 66  lause that may f
2ea10 6f 6c 6c 6f 77 20 61 0a 4c 49 4d 49 54 20 63 6c  ollow a.LIMIT cl
2ea20 61 75 73 65 20 6d 75 73 74 20 61 6c 73 6f 20 65  ause must also e
2ea30 76 61 6c 75 61 74 65 20 74 6f 20 61 6e 20 69 6e  valuate to an in
2ea40 74 65 67 65 72 2c 20 6f 72 20 61 20 76 61 6c 75  teger, or a valu
2ea50 65 20 74 68 61 74 20 63 61 6e 20 62 65 0a 6c 6f  e that can be.lo
2ea60 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74  sslessly convert
2ea70 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  ed to an integer
2ea80 2e 20 5e 49 66 20 61 6e 20 65 78 70 72 65 73 73  . ^If an express
2ea90 69 6f 6e 20 68 61 73 20 61 6e 20 4f 46 46 53 45  ion has an OFFSE
2eaa0 54 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 74  T clause,.then t
2eab0 68 65 20 66 69 72 73 74 20 4d 20 72 6f 77 73 20  he first M rows 
2eac0 61 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d  are omitted from
2ead0 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
2eae0 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
2eaf0 53 45 4c 45 43 54 0a 73 74 61 74 65 6d 65 6e 74  SELECT.statement
2eb00 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20 4e 20   and the next N 
2eb10 72 6f 77 73 20 61 72 65 20 72 65 74 75 72 6e 65  rows are returne
2eb20 64 2c 20 77 68 65 72 65 20 4d 20 61 6e 64 20 4e  d, where M and N
2eb30 20 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20   are the values 
2eb40 74 68 61 74 0a 74 68 65 20 4f 46 46 53 45 54 20  that.the OFFSET 
2eb50 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  and LIMIT clause
2eb60 73 20 65 76 61 6c 75 61 74 65 20 74 6f 2c 20 72  s evaluate to, r
2eb70 65 73 70 65 63 74 69 76 65 6c 79 2e 20 5e 4f 72  espectively. ^Or
2eb80 2c 20 69 66 20 74 68 65 20 53 45 4c 45 43 54 0a  , if the SELECT.
2eb90 77 6f 75 6c 64 20 72 65 74 75 72 6e 20 6c 65 73  would return les
2eba0 73 20 74 68 61 6e 20 4d 2b 4e 20 72 6f 77 73 20  s than M+N rows 
2ebb0 69 66 20 69 74 20 64 69 64 20 6e 6f 74 20 68 61  if it did not ha
2ebc0 76 65 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73  ve a LIMIT claus
2ebd0 65 2c 20 74 68 65 6e 20 74 68 65 0a 66 69 72 73  e, then the.firs
2ebe0 74 20 4d 20 72 6f 77 73 20 61 72 65 20 73 6b 69  t M rows are ski
2ebf0 70 70 65 64 20 61 6e 64 20 74 68 65 20 72 65 6d  pped and the rem
2ec00 61 69 6e 69 6e 67 20 72 6f 77 73 20 28 69 66 20  aining rows (if 
2ec10 61 6e 79 29 20 61 72 65 20 72 65 74 75 72 6e 65  any) are returne
2ec20 64 2e 20 5e 49 66 20 74 68 65 0a 4f 46 46 53 45  d. ^If the.OFFSE
2ec30 54 20 63 6c 61 75 73 65 20 65 76 61 6c 75 61 74  T clause evaluat
2ec40 65 73 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65  es to a negative
2ec50 20 76 61 6c 75 65 2c 20 74 68 65 20 72 65 73 75   value, the resu
2ec60 6c 74 73 20 61 72 65 20 74 68 65 20 73 61 6d 65  lts are the same
2ec70 20 61 73 20 69 66 20 69 74 0a 68 61 64 20 65 76   as if it.had ev
2ec80 61 6c 75 61 74 65 64 20 74 6f 20 7a 65 72 6f 2e  aluated to zero.
2ec90 0a 0a 3c 70 3e 5e 49 6e 73 74 65 61 64 20 6f 66  ..<p>^Instead of
2eca0 20 61 20 73 65 70 61 72 61 74 65 20 4f 46 46 53   a separate OFFS
2ecb0 45 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 4c  ET clause, the L
2ecc0 49 4d 49 54 20 63 6c 61 75 73 65 20 6d 61 79 20  IMIT clause may 
2ecd0 73 70 65 63 69 66 79 20 74 77 6f 0a 73 63 61 6c  specify two.scal
2ece0 61 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 73  ar expressions s
2ecf0 65 70 61 72 61 74 65 64 20 62 79 20 61 20 63 6f  eparated by a co
2ed00 6d 6d 61 2e 20 5e 49 6e 20 74 68 69 73 20 63 61  mma. ^In this ca
2ed10 73 65 2c 20 74 68 65 20 66 69 72 73 74 20 65 78  se, the first ex
2ed20 70 72 65 73 73 69 6f 6e 0a 69 73 20 75 73 65 64  pression.is used
2ed30 20 61 73 20 74 68 65 20 4f 46 46 53 45 54 20 65   as the OFFSET e
2ed40 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68  xpression and th
2ed50 65 20 73 65 63 6f 6e 64 20 61 73 20 74 68 65 20  e second as the 
2ed60 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e  LIMIT expression
2ed70 2e 0a 54 68 69 73 20 69 73 20 63 6f 75 6e 74 65  ..This is counte
2ed80 72 2d 69 6e 74 75 69 74 69 76 65 2c 20 61 73 20  r-intuitive, as 
2ed90 77 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20 4f  when using the O
2eda0 46 46 53 45 54 20 63 6c 61 75 73 65 20 74 68 65  FFSET clause the
2edb0 20 73 65 63 6f 6e 64 20 6f 66 0a 74 68 65 20 74   second of.the t
2edc0 77 6f 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  wo expressions i
2edd0 73 20 74 68 65 20 4f 46 46 53 45 54 20 61 6e 64  s the OFFSET and
2ede0 20 74 68 65 20 66 69 72 73 74 20 74 68 65 20 4c   the first the L
2edf0 49 4d 49 54 2e 20 0a 54 68 69 73 20 72 65 76 65  IMIT. .This reve
2ee00 72 73 61 6c 20 6f 66 20 74 68 65 20 6f 66 66 73  rsal of the offs
2ee10 65 74 20 61 6e 64 20 6c 69 6d 69 74 20 69 73 20  et and limit is 
2ee20 69 6e 74 65 6e 74 69 6f 6e 61 6c 0a 2d 20 69 74  intentional.- it
2ee30 20 6d 61 78 69 6d 69 7a 65 73 20 63 6f 6d 70 61   maximizes compa
2ee40 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 6f 74  tibility with ot
2ee50 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65  her SQL database
2ee60 20 73 79 73 74 65 6d 73 2e 0a 48 6f 77 65 76 65   systems..Howeve
2ee70 72 2c 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66  r, to avoid conf
2ee80 75 73 69 6f 6e 2c 20 70 72 6f 67 72 61 6d 6d 65  usion, programme
2ee90 72 73 20 61 72 65 20 73 74 72 6f 6e 67 6c 79 20  rs are strongly 
2eea0 65 6e 63 6f 75 72 61 67 65 64 20 74 6f 20 75 73  encouraged to us
2eeb0 65 0a 74 68 65 20 66 6f 72 6d 20 6f 66 20 74 68  e.the form of th
2eec0 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 74  e LIMIT clause t
2eed0 68 61 74 20 75 73 65 73 20 74 68 65 20 22 4f 46  hat uses the "OF
2eee0 46 53 45 54 22 20 6b 65 79 77 6f 72 64 20 61 6e  FSET" keyword an
2eef0 64 20 61 76 6f 69 64 0a 75 73 69 6e 67 20 61 20  d avoid.using a 
2ef00 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 77 69 74  LIMIT clause wit
2ef10 68 20 61 20 63 6f 6d 6d 61 2d 73 65 70 61 72 61  h a comma-separa
2ef20 74 65 64 20 6f 66 66 73 65 74 2e 0a 0a 3c 74 63  ted offset...<tc
2ef30 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61  l>hd_fragment va
2ef40 6c 75 65 73 20 7b 56 41 4c 55 45 53 20 63 6c 61  lues {VALUES cla
2ef50 75 73 65 7d 20 56 41 4c 55 45 53 3c 2f 74 63 6c  use} VALUES</tcl
2ef60 3e 0a 3c 68 33 3e 54 68 65 20 56 41 4c 55 45 53  >.<h3>The VALUES
2ef70 20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70   clause</h3>..<p
2ef80 3e 5e 28 54 68 65 20 70 68 72 61 73 65 20 22 56  >^(The phrase "V
2ef90 41 4c 55 45 53 28 3c 69 3e 65 78 70 72 2d 6c 69  ALUES(<i>expr-li
2efa0 73 74 3c 2f 69 3e 29 22 20 6d 65 61 6e 73 20 74  st</i>)" means t
2efb0 68 65 20 73 61 6d 65 20 74 68 69 6e 67 0a 61 73  he same thing.as
2efc0 20 22 53 45 4c 45 43 54 20 3c 69 3e 65 78 70 72   "SELECT <i>expr
2efd0 2d 6c 69 73 74 3c 2f 69 3e 22 2e 29 5e 20 20 5e  -list</i>".)^  ^
2efe0 28 54 68 65 20 70 68 72 61 73 65 0a 22 56 41 4c  (The phrase."VAL
2eff0 55 45 53 28 3c 69 3e 65 78 70 72 2d 6c 69 73 74  UES(<i>expr-list
2f000 2d 31 3c 2f 69 3e 29 2c 2e 2e 2e 2c 28 3c 69 3e  -1</i>),...,(<i>
2f010 65 78 70 72 2d 6c 69 73 74 2d 4e 3c 2f 69 3e 29  expr-list-N</i>)
2f020 22 20 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65  " means the same
2f030 0a 74 68 69 6e 67 20 61 73 20 22 53 45 4c 45 43  .thing as "SELEC
2f040 54 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d 31  T <i>expr-list-1
2f050 3c 2f 69 3e 20 55 4e 49 4f 4e 20 41 4c 4c 20 2e  </i> UNION ALL .
2f060 2e 2e 20 55 4e 49 4f 4e 20 41 4c 4c 0a 53 45 4c  .. UNION ALL.SEL
2f070 45 43 54 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74  ECT <i>expr-list
2f080 2d 4e 3c 2f 69 3e 22 2e 29 5e 20 20 42 6f 74 68  -N</i>".)^  Both
2f090 20 66 6f 72 6d 73 20 61 72 65 20 74 68 65 20 73   forms are the s
2f0a0 61 6d 65 2c 20 65 78 63 65 70 74 20 74 68 61 74  ame, except that
2f0b0 0a 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 53  .the number of S
2f0c0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
2f0d0 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 69   in a compound i
2f0e0 73 20 6c 69 6d 69 74 65 64 20 62 79 0a 5b 53 51  s limited by.[SQ
2f0f0 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4d 50 4f  LITE_LIMIT_COMPO
2f100 55 4e 44 5f 53 45 4c 45 43 54 5d 20 77 68 65 72  UND_SELECT] wher
2f110 65 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  eas the number o
2f120 66 20 72 6f 77 73 20 69 6e 20 61 0a 56 41 4c 55  f rows in a.VALU
2f130 45 53 20 63 6c 61 75 73 65 20 68 61 73 20 6e 6f  ES clause has no
2f140 20 61 72 62 69 74 72 61 72 79 20 6c 69 6d 69 74   arbitrary limit
2f150 2e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20  ...<p>There are 
2f160 73 6f 6d 65 20 72 65 73 74 72 69 63 74 69 6f 6e  some restriction
2f170 73 20 6f 6e 20 74 68 65 20 75 73 65 20 6f 66 20  s on the use of 
2f180 61 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20  a VALUES clause 
2f190 74 68 61 74 20 61 72 65 0a 6e 6f 74 20 73 68 6f  that are.not sho
2f1a0 77 6e 20 6f 6e 20 74 68 65 20 73 79 6e 74 61 78  wn on the syntax
2f1b0 20 64 69 61 67 72 61 6d 73 3a 0a 0a 3c 75 6c 3e   diagrams:..<ul>
2f1c0 0a 3c 6c 69 3e 3c 70 3e 0a 5e 41 20 56 41 4c 55  .<li><p>.^A VALU
2f1d0 45 53 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74  ES clause cannot
2f1e0 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   be followed by 
2f1f0 5b 4f 52 44 45 52 20 42 59 5d 2e 0a 0a 3c 6c 69  [ORDER BY]...<li
2f200 3e 3c 70 3e 0a 5e 41 20 56 41 4c 55 45 53 20 63  ><p>.^A VALUES c
2f210 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20 62 65 20  lause cannot be 
2f220 66 6f 6c 6c 6f 77 65 64 20 62 79 20 5b 4c 49 4d  followed by [LIM
2f230 49 54 5d 2e 0a 3c 2f 75 6c 3e 0a 0a 0a 3c 68 33  IT]..</ul>...<h3
2f240 3e 54 68 65 20 57 49 54 48 20 43 6c 61 75 73 65  >The WITH Clause
2f250 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 53 45 4c 45 43  </h3>..<p>^SELEC
2f260 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6d 61 79  T statements may
2f270 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 70   be optionally p
2f280 72 65 63 65 64 65 64 20 62 79 20 61 20 73 69 6e  receded by a sin
2f290 67 6c 65 0a 5b 57 49 54 48 20 63 6c 61 75 73 65  gle.[WITH clause
2f2a0 5d 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 6f  ] that defines o
2f2b0 6e 65 20 6f 72 20 6d 6f 72 65 20 5b 63 6f 6d 6d  ne or more [comm
2f2c0 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
2f2d0 69 6f 6e 73 5d 0a 66 6f 72 20 75 73 65 20 77 69  ions].for use wi
2f2e0 74 68 69 6e 20 74 68 65 20 53 45 4c 45 43 54 20  thin the SELECT 
2f2f0 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 74 63 6c  statement...<tcl
2f300 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 74 61 62  >hd_fragment tab
2f310 66 75 6e 63 31 20 7b 74 61 62 6c 65 2d 76 61 6c  func1 {table-val
2f320 75 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e  ued functions in
2f330 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
2f340 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 61 62 6c  }</tcl>.<h3>Tabl
2f350 65 2d 76 61 6c 75 65 64 20 46 75 6e 63 74 69 6f  e-valued Functio
2f360 6e 73 20 49 6e 20 54 68 65 20 46 52 4f 4d 20 43  ns In The FROM C
2f370 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 41  lause</h3>..<p>A
2f380 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 5d   [virtual table]
2f390 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 5b   that contains [
2f3a0 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 5d 20  hidden columns] 
2f3b0 63 61 6e 20 62 65 20 75 73 65 64 20 6c 69 6b 65  can be used like
2f3c0 0a 61 20 5b 74 61 62 6c 65 2d 76 61 6c 75 65 64  .a [table-valued
2f3d0 20 66 75 6e 63 74 69 6f 6e 5d 20 69 6e 20 74 68   function] in th
2f3e0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e 20 20  e FROM clause.  
2f3f0 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  The arguments to
2f400 20 74 68 65 0a 74 61 62 6c 65 2d 76 61 6c 75 65   the.table-value
2f410 64 20 66 75 6e 63 74 69 6f 6e 20 62 65 63 6f 6d  d function becom
2f420 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f 6e  e constraints on
2f430 20 74 68 65 20 48 49 44 44 45 4e 20 63 6f 6c 75   the HIDDEN colu
2f440 6d 6e 73 20 6f 66 0a 74 68 65 20 76 69 72 74 75  mns of.the virtu
2f450 61 6c 20 74 61 62 6c 65 2e 20 20 41 64 64 69 74  al table.  Addit
2f460 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
2f470 6e 20 63 61 6e 20 62 65 20 66 6f 75 6e 64 20 69  n can be found i
2f480 6e 20 74 68 65 0a 5b 74 61 62 6c 65 2d 76 61 6c  n the.[table-val
2f490 75 65 64 20 66 75 6e 63 74 69 6f 6e 73 7c 76 69  ued functions|vi
2f4a0 72 74 75 61 6c 20 74 61 62 6c 65 20 64 6f 63 75  rtual table docu
2f4b0 6d 65 6e 74 61 74 69 6f 6e 5d 2e 0a 0a 3c 74 63  mentation]...<tc
2f4c0 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
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 23 23 23  ################
2f4f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f500 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f510 23 0a 53 65 63 74 69 6f 6e 20 55 50 44 41 54 45  #.Section UPDATE
2f520 20 75 70 64 61 74 65 20 7b 55 50 44 41 54 45 20   update {UPDATE 
2f530 2a 55 50 44 41 54 45 73 7d 0a 0a 52 65 63 75 72  *UPDATEs}..Recur
2f540 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
2f550 6d 20 75 70 64 61 74 65 2d 73 74 6d 74 0a 3c 2f  m update-stmt.</
2f560 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 55 50 44  tcl>..<p>^An UPD
2f570 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ATE statement is
2f580 20 75 73 65 64 20 74 6f 20 6d 6f 64 69 66 79 20   used to modify 
2f590 61 20 73 75 62 73 65 74 20 6f 66 20 74 68 65 20  a subset of the 
2f5a0 76 61 6c 75 65 73 20 73 74 6f 72 65 64 20 69 6e  values stored in
2f5b0 20 0a 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72   .zero or more r
2f5c0 6f 77 73 20 6f 66 20 74 68 65 20 64 61 74 61 62  ows of the datab
2f5d0 61 73 65 20 74 61 62 6c 65 20 69 64 65 6e 74 69  ase table identi
2f5e0 66 69 65 64 20 62 79 20 74 68 65 20 0a 5b 71 75  fied by the .[qu
2f5f0 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61  alified-table-na
2f600 6d 65 5d 20 73 70 65 63 69 66 69 65 64 20 61 73  me] specified as
2f610 20 70 61 72 74 20 6f 66 20 74 68 65 20 55 50 44   part of the UPD
2f620 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  ATE statement...
2f630 3c 70 3e 5e 49 66 20 74 68 65 20 55 50 44 41 54  <p>^If the UPDAT
2f640 45 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73  E statement does
2f650 20 6e 6f 74 20 68 61 76 65 20 61 20 57 48 45 52   not have a WHER
2f660 45 20 63 6c 61 75 73 65 2c 20 61 6c 6c 20 72 6f  E clause, all ro
2f670 77 73 20 69 6e 20 74 68 65 0a 74 61 62 6c 65 20  ws in the.table 
2f680 61 72 65 20 6d 6f 64 69 66 69 65 64 20 62 79 20  are modified by 
2f690 74 68 65 20 55 50 44 41 54 45 2e 20 5e 4f 74 68  the UPDATE. ^Oth
2f6a0 65 72 77 69 73 65 2c 20 74 68 65 20 55 50 44 41  erwise, the UPDA
2f6b0 54 45 20 61 66 66 65 63 74 73 20 6f 6e 6c 79 20  TE affects only 
2f6c0 74 68 6f 73 65 0a 72 6f 77 73 20 66 6f 72 20 77  those.rows for w
2f6d0 68 69 63 68 20 74 68 65 20 57 48 45 52 45 20 63  hich the WHERE c
2f6e0 6c 61 75 73 65 0a 5b 62 6f 6f 6c 65 61 6e 20 65  lause.[boolean e
2f6f0 78 70 72 65 73 73 69 6f 6e 7c 62 6f 6f 6c 65 61  xpression|boolea
2f700 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  n expression is 
2f710 74 72 75 65 5d 2e 20 5e 49 74 20 69 73 20 6e 6f  true]. ^It is no
2f720 74 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68  t an error if th
2f730 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20 64  e.WHERE clause d
2f740 6f 65 73 20 6e 6f 74 20 65 76 61 6c 75 61 74 65  oes not evaluate
2f750 20 74 6f 20 74 72 75 65 20 66 6f 72 20 61 6e 79   to true for any
2f760 20 72 6f 77 20 69 6e 20 74 68 65 20 74 61 62 6c   row in the tabl
2f770 65 20 2d 20 74 68 69 73 20 6a 75 73 74 0a 6d 65  e - this just.me
2f780 61 6e 73 20 74 68 61 74 20 74 68 65 20 55 50 44  ans that the UPD
2f790 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61 66  ATE statement af
2f7a0 66 65 63 74 73 20 7a 65 72 6f 20 72 6f 77 73 2e  fects zero rows.
2f7b0 0a 0a 3c 70 3e 54 68 65 20 6d 6f 64 69 66 69 63  ..<p>The modific
2f7c0 61 74 69 6f 6e 73 20 6d 61 64 65 20 74 6f 20 65  ations made to e
2f7d0 61 63 68 20 72 6f 77 20 61 66 66 65 63 74 65 64  ach row affected
2f7e0 20 62 79 20 61 6e 20 55 50 44 41 54 45 20 73 74   by an UPDATE st
2f7f0 61 74 65 6d 65 6e 74 20 61 72 65 0a 64 65 74 65  atement are.dete
2f800 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6c 69  rmined by the li
2f810 73 74 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e 74  st of assignment
2f820 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  s following the 
2f830 53 45 54 20 6b 65 79 77 6f 72 64 2e 20 45 61 63  SET keyword. Eac
2f840 68 0a 61 73 73 69 67 6e 6d 65 6e 74 20 73 70 65  h.assignment spe
2f850 63 69 66 69 65 73 20 61 20 3c 79 79 74 65 72 6d  cifies a <yyterm
2f860 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79  >column-name</yy
2f870 74 65 72 6d 3e 20 74 6f 20 74 68 65 20 6c 65 66  term> to the lef
2f880 74 20 6f 66 20 74 68 65 20 0a 65 71 75 61 6c 73  t of the .equals
2f890 20 73 69 67 6e 20 61 6e 64 20 61 20 73 63 61 6c   sign and a scal
2f8a0 61 72 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f  ar expression to
2f8b0 20 74 68 65 20 72 69 67 68 74 2e 20 0a 5e 46 6f   the right. .^Fo
2f8c0 72 20 65 61 63 68 20 61 66 66 65 63 74 65 64 20  r each affected 
2f8d0 72 6f 77 2c 20 74 68 65 20 6e 61 6d 65 64 20 63  row, the named c
2f8e0 6f 6c 75 6d 6e 73 0a 61 72 65 20 73 65 74 20 74  olumns.are set t
2f8f0 6f 20 74 68 65 20 76 61 6c 75 65 73 20 66 6f 75  o the values fou
2f900 6e 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67  nd by evaluating
2f910 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
2f920 6e 67 20 73 63 61 6c 61 72 20 0a 65 78 70 72 65  ng scalar .expre
2f930 73 73 69 6f 6e 73 2e 20 5e 49 66 20 61 20 73 69  ssions. ^If a si
2f940 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  ngle column-name
2f950 20 61 70 70 65 61 72 73 20 6d 6f 72 65 20 74 68   appears more th
2f960 61 6e 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 6c  an once in the l
2f970 69 73 74 20 6f 66 0a 61 73 73 69 67 6e 6d 65 6e  ist of.assignmen
2f980 74 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 61  t expressions, a
2f990 6c 6c 20 62 75 74 20 74 68 65 20 72 69 67 68 74  ll but the right
2f9a0 6d 6f 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20  most occurrence 
2f9b0 69 73 20 69 67 6e 6f 72 65 64 2e 20 5e 43 6f 6c  is ignored. ^Col
2f9c0 75 6d 6e 73 0a 74 68 61 74 20 64 6f 20 6e 6f 74  umns.that do not
2f9d0 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 6c   appear in the l
2f9e0 69 73 74 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e  ist of assignmen
2f9f0 74 73 20 61 72 65 20 6c 65 66 74 20 75 6e 6d 6f  ts are left unmo
2fa00 64 69 66 69 65 64 2e 20 5e 54 68 65 20 73 63 61  dified. ^The sca
2fa10 6c 61 72 0a 65 78 70 72 65 73 73 69 6f 6e 73 20  lar.expressions 
2fa20 6d 61 79 20 72 65 66 65 72 20 74 6f 20 63 6f 6c  may refer to col
2fa30 75 6d 6e 73 20 6f 66 20 74 68 65 20 72 6f 77 20  umns of the row 
2fa40 62 65 69 6e 67 20 75 70 64 61 74 65 64 2e 20 5e  being updated. ^
2fa50 49 6e 20 74 68 69 73 20 63 61 73 65 20 61 6c 6c  In this case all
2fa60 0a 73 63 61 6c 61 72 20 65 78 70 72 65 73 73 69  .scalar expressi
2fa70 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74 65  ons are evaluate
2fa80 64 20 62 65 66 6f 72 65 20 61 6e 79 20 61 73 73  d before any ass
2fa90 69 67 6e 6d 65 6e 74 73 20 61 72 65 20 6d 61 64  ignments are mad
2faa0 65 2e 0a 0a 3c 70 3e 42 65 67 69 6e 6e 69 6e 67  e...<p>Beginning
2fab0 20 69 6e 20 53 51 4c 69 74 65 20 5b 76 65 72 73   in SQLite [vers
2fac0 69 6f 6e 20 33 2e 31 35 2e 30 5d 20 28 5b 64 61  ion 3.15.0] ([da
2fad0 74 65 6f 66 3a 33 2e 31 35 2e 30 5d 29 2c 20 61  teof:3.15.0]), a
2fae0 6e 20 61 73 73 69 67 6d 65 6e 74 20 69 6e 0a 74  n assigment in.t
2faf0 68 65 20 53 45 54 20 63 6c 61 75 73 65 20 63 61  he SET clause ca
2fb00 6e 20 62 65 20 61 20 0a 5b 63 6f 6c 75 6d 6e 2d  n be a .[column-
2fb10 6e 61 6d 65 2d 6c 69 73 74 7c 70 61 72 65 6e 74  name-list|parent
2fb20 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66 20  hesized list of 
2fb30 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 5d 20 6f 6e  column names] on
2fb40 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 61 0a   the left and a.
2fb50 5b 72 6f 77 20 76 61 6c 75 65 5d 20 6f 66 20 74  [row value] of t
2fb60 68 65 20 73 61 6d 65 20 73 69 7a 65 20 6f 6e 20  he same size on 
2fb70 74 68 65 20 72 69 67 68 74 2e 0a 0a 0a 3c 70 3e  the right....<p>
2fb80 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 22 4f  ^The optional "O
2fb90 52 20 3c 69 3e 61 63 74 69 6f 6e 3c 2f 69 3e 22  R <i>action</i>"
2fba0 20 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73 65   conflict clause
2fbb0 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 74 68   that follows th
2fbc0 65 0a 55 50 44 41 54 45 20 6b 65 79 77 6f 72 64  e.UPDATE keyword
2fbd0 20 61 6c 6c 6f 77 73 20 74 68 65 20 75 73 65 72   allows the user
2fbe0 20 74 6f 20 6e 6f 6d 69 6e 61 74 65 20 61 20 73   to nominate a s
2fbf0 70 65 63 69 66 69 63 0a 63 6f 6e 73 74 72 61 69  pecific.constrai
2fc00 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  nt conflict reso
2fc10 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
2fc20 20 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20 74   to use during t
2fc30 68 69 73 20 6f 6e 65 20 55 50 44 41 54 45 20 63  his one UPDATE c
2fc40 6f 6d 6d 61 6e 64 2e 0a 52 65 66 65 72 20 74 6f  ommand..Refer to
2fc50 20 74 68 65 20 73 65 63 74 69 6f 6e 20 65 6e 74   the section ent
2fc60 69 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49  itled [ON CONFLI
2fc70 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  CT] for addition
2fc80 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
2fc90 0a 3c 68 33 3e 52 65 73 74 72 69 63 74 69 6f 6e  .<h3>Restriction
2fca0 73 20 6f 6e 20 55 50 44 41 54 45 20 53 74 61 74  s on UPDATE Stat
2fcb0 65 6d 65 6e 74 73 20 57 69 74 68 69 6e 20 43 52  ements Within CR
2fcc0 45 41 54 45 20 54 52 49 47 47 45 52 3c 2f 68 33  EATE TRIGGER</h3
2fcd0 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77  >..<p>The follow
2fce0 69 6e 67 20 61 64 64 69 74 69 6f 6e 61 6c 20 73  ing additional s
2fcf0 79 6e 74 61 78 20 72 65 73 74 72 69 63 74 69 6f  yntax restrictio
2fd00 6e 73 20 61 70 70 6c 79 20 74 6f 20 55 50 44 41  ns apply to UPDA
2fd10 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  TE statements th
2fd20 61 74 0a 6f 63 63 75 72 20 77 69 74 68 69 6e 20  at.occur within 
2fd30 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 5b 43  the body of a [C
2fd40 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73  REATE TRIGGER] s
2fd50 74 61 74 65 6d 65 6e 74 2e 20 20 0a 0a 3c 75 6c  tatement.  ..<ul
2fd60 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20  >.  <li><p>^The 
2fd70 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6e 61  <yyterm>table-na
2fd80 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 73 70 65 63  me</yyterm> spec
2fd90 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
2fda0 20 61 6e 20 55 50 44 41 54 45 20 0a 20 20 20 20   an UPDATE .    
2fdb0 20 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68    statement with
2fdc0 69 6e 0a 20 20 20 20 20 20 61 20 74 72 69 67 67  in.      a trigg
2fdd0 65 72 20 62 6f 64 79 20 6d 75 73 74 20 62 65 20  er body must be 
2fde0 75 6e 71 75 61 6c 69 66 69 65 64 2e 20 5e 28 49  unqualified. ^(I
2fdf0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
2fe00 68 65 0a 20 20 20 20 20 20 3c 69 3e 73 63 68 65  he.      <i>sche
2fe10 6d 61 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c  ma-name</i><b>.<
2fe20 2f 62 3e 20 70 72 65 66 69 78 20 6f 6e 20 74 68  /b> prefix on th
2fe30 65 20 74 61 62 6c 65 20 6e 61 6d 65 20 6f 66 20  e table name of 
2fe40 74 68 65 20 55 50 44 41 54 45 20 69 73 0a 20 20  the UPDATE is.  
2fe50 20 20 20 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20      not allowed 
2fe60 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
2fe70 29 5e 20 5e 55 6e 6c 65 73 73 20 74 68 65 20 74  )^ ^Unless the t
2fe80 61 62 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68  able to which th
2fe90 65 20 74 72 69 67 67 65 72 0a 20 20 20 20 20 20  e trigger.      
2fea0 69 73 20 61 74 74 61 63 68 65 64 20 69 73 20 69  is attached is i
2feb0 6e 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  n the TEMP datab
2fec0 61 73 65 2c 20 74 68 65 20 74 61 62 6c 65 20 62  ase, the table b
2fed0 65 69 6e 67 20 75 70 64 61 74 65 64 20 62 79 20  eing updated by 
2fee0 74 68 65 0a 20 20 20 20 20 20 74 72 69 67 67 65  the.      trigge
2fef0 72 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 72  r program must r
2ff00 65 73 69 64 65 20 69 6e 20 74 68 65 20 73 61 6d  eside in the sam
2ff10 65 20 64 61 74 61 62 61 73 65 20 61 73 20 69 74  e database as it
2ff20 2e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65 0a  . ^If the table.
2ff30 20 20 20 20 20 20 74 6f 20 77 68 69 63 68 20 74        to which t
2ff40 68 65 20 74 72 69 67 67 65 72 20 69 73 20 61 74  he trigger is at
2ff50 74 61 63 68 65 64 20 69 73 20 69 6e 20 74 68 65  tached is in the
2ff60 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c 20   TEMP database, 
2ff70 74 68 65 6e 20 74 68 65 0a 20 20 20 20 20 20 75  then the.      u
2ff80 6e 71 75 61 6c 69 66 69 65 64 20 6e 61 6d 65 20  nqualified name 
2ff90 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  of the table bei
2ffa0 6e 67 20 75 70 64 61 74 65 64 20 69 73 20 72 65  ng updated is re
2ffb0 73 6f 6c 76 65 64 20 69 6e 20 74 68 65 20 73 61  solved in the sa
2ffc0 6d 65 20 77 61 79 0a 20 20 20 20 20 20 61 73 20  me way.      as 
2ffd0 69 74 20 69 73 20 66 6f 72 20 61 20 74 6f 70 2d  it is for a top-
2ffe0 6c 65 76 65 6c 20 73 74 61 74 65 6d 65 6e 74 20  level statement 
2fff0 28 62 79 20 73 65 61 72 63 68 69 6e 67 20 66 69  (by searching fi
30000 72 73 74 20 74 68 65 20 54 45 4d 50 20 64 61 74  rst the TEMP dat
30010 61 62 61 73 65 2c 0a 20 20 20 20 20 20 74 68 65  abase,.      the
30020 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
30030 61 73 65 2c 20 74 68 65 6e 20 61 6e 79 20 6f 74  ase, then any ot
30040 68 65 72 20 64 61 74 61 62 61 73 65 73 20 69 6e  her databases in
30050 20 74 68 65 20 6f 72 64 65 72 20 74 68 65 79 20   the order they 
30060 77 65 72 65 0a 20 20 20 20 20 20 61 74 74 61 63  were.      attac
30070 68 65 64 29 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  hed)...  <li><p>
30080 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  ^The INDEXED BY 
30090 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20  and NOT INDEXED 
300a0 63 6c 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20  clauses are not 
300b0 61 6c 6c 6f 77 65 64 20 6f 6e 20 55 50 44 41 54  allowed on UPDAT
300c0 45 0a 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e  E.      statemen
300d0 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ts within trigge
300e0 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c  rs.</p>..  <li><
300f0 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20 61 6e 64  p>^The LIMIT and
30100 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
30110 73 20 66 6f 72 20 55 50 44 41 54 45 20 61 72 65  s for UPDATE are
30120 20 75 6e 73 75 70 70 6f 72 74 65 64 20 77 69 74   unsupported wit
30130 68 69 6e 0a 20 20 20 20 20 20 74 72 69 67 67 65  hin.      trigge
30140 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  rs, regardless o
30150 66 20 74 68 65 20 63 6f 6d 70 69 6c 61 74 69 6f  f the compilatio
30160 6e 20 6f 70 74 69 6f 6e 73 20 75 73 65 64 20 74  n options used t
30170 6f 20 62 75 69 6c 64 20 53 51 4c 69 74 65 2e 0a  o build SQLite..
30180 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f  </ul>..<h3>Optio
30190 6e 61 6c 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52  nal LIMIT and OR
301a0 44 45 52 20 42 59 20 43 6c 61 75 73 65 73 3c 2f  DER BY Clauses</
301b0 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53 51 4c  h3>..<p>^(If SQL
301c0 69 74 65 20 69 73 20 62 75 69 6c 74 20 77 69 74  ite is built wit
301d0 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e  h the [SQLITE_EN
301e0 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
301f0 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c  TE_LIMIT].compil
30200 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 74 68  e-time option th
30210 65 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6f 66  en the syntax of
30220 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74   the UPDATE stat
30230 65 6d 65 6e 74 20 69 73 20 65 78 74 65 6e 64 65  ement is extende
30240 64 0a 77 69 74 68 20 6f 70 74 69 6f 6e 61 6c 20  d.with optional 
30250 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d  ORDER BY and LIM
30260 49 54 20 63 6c 61 75 73 65 73 29 5e 20 61 73 20  IT clauses)^ as 
30270 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74  follows:</p>..<t
30280 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d  cl>BubbleDiagram
30290 20 75 70 64 61 74 65 2d 73 74 6d 74 2d 6c 69 6d   update-stmt-lim
302a0 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  ited</tcl>..<p>^
302b0 49 66 20 61 6e 20 55 50 44 41 54 45 20 73 74 61  If an UPDATE sta
302c0 74 65 6d 65 6e 74 20 68 61 73 20 61 20 4c 49 4d  tement has a LIM
302d0 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 6d  IT clause, the m
302e0 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
302f0 20 72 6f 77 73 20 74 68 61 74 0a 77 69 6c 6c 20   rows that.will 
30300 62 65 20 75 70 64 61 74 65 64 20 69 73 20 66 6f  be updated is fo
30310 75 6e 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e  und by evaluatin
30320 67 20 74 68 65 20 61 63 63 6f 6d 70 61 6e 79 69  g the accompanyi
30330 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e  ng expression an
30340 64 20 63 61 73 74 69 6e 67 0a 69 74 20 74 6f 20  d casting.it to 
30350 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
30360 2e 20 5e 41 20 6e 65 67 61 74 69 76 65 20 76 61  . ^A negative va
30370 6c 75 65 20 69 73 20 69 6e 74 65 72 70 72 65 74  lue is interpret
30380 65 64 20 61 73 20 22 6e 6f 20 6c 69 6d 69 74 22  ed as "no limit"
30390 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 4c 49  ...<p>^If the LI
303a0 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20 65  MIT expression e
303b0 76 61 6c 75 61 74 65 73 20 74 6f 20 6e 6f 6e 2d  valuates to non-
303c0 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 20 3c  negative value <
303d0 69 3e 4e 3c 2f 69 3e 20 61 6e 64 20 74 68 65 0a  i>N</i> and the.
303e0 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
303f0 20 68 61 73 20 61 6e 20 4f 52 44 45 52 20 42 59   has an ORDER BY
30400 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c   clause, then al
30410 6c 20 72 6f 77 73 20 74 68 61 74 20 77 6f 75 6c  l rows that woul
30420 64 20 62 65 20 75 70 64 61 74 65 64 20 69 6e 0a  d be updated in.
30430 74 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74  the absence of t
30440 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
30450 61 72 65 20 73 6f 72 74 65 64 20 61 63 63 6f 72  are sorted accor
30460 64 69 6e 67 20 74 6f 20 74 68 65 20 4f 52 44 45  ding to the ORDE
30470 52 20 42 59 20 61 6e 64 20 74 68 65 0a 66 69 72  R BY and the.fir
30480 73 74 20 3c 69 3e 4e 3c 2f 69 3e 20 75 70 64 61  st <i>N</i> upda
30490 74 65 64 2e 20 5e 28 49 66 20 74 68 65 20 55 50  ted. ^(If the UP
304a0 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61  DATE statement a
304b0 6c 73 6f 20 68 61 73 20 61 6e 20 4f 46 46 53 45  lso has an OFFSE
304c0 54 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 69  T clause,.then i
304d0 74 20 69 73 20 73 69 6d 69 6c 61 72 6c 79 20 65  t is similarly e
304e0 76 61 6c 75 61 74 65 64 20 61 6e 64 20 63 61 73  valuated and cas
304f0 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
30500 76 61 6c 75 65 2e 20 49 66 20 74 68 65 20 4f 46  value. If the OF
30510 46 53 45 54 0a 65 78 70 72 65 73 73 69 6f 6e 20  FSET.expression 
30520 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20 6e  evaluates to a n
30530 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75  on-negative valu
30540 65 20 3c 69 3e 4d 3c 2f 69 3e 2c 20 74 68 65 6e  e <i>M</i>, then
30550 20 74 68 65 20 66 69 72 73 74 20 3c 69 3e 4d 3c   the first <i>M<
30560 2f 69 3e 0a 72 6f 77 73 20 61 72 65 20 73 6b 69  /i>.rows are ski
30570 70 70 65 64 20 61 6e 64 20 74 68 65 20 66 6f 6c  pped and the fol
30580 6c 6f 77 69 6e 67 20 3c 69 3e 4e 3c 2f 69 3e 20  lowing <i>N</i> 
30590 72 6f 77 73 20 75 70 64 61 74 65 64 20 69 6e 73  rows updated ins
305a0 74 65 61 64 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20  tead.)^..<p>^If 
305b0 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
305c0 6d 65 6e 74 20 68 61 73 20 6e 6f 20 4f 52 44 45  ment has no ORDE
305d0 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65  R BY clause, the
305e0 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74 0a  n all rows that.
305f0 77 6f 75 6c 64 20 62 65 20 75 70 64 61 74 65 64  would be updated
30600 20 69 6e 20 74 68 65 20 61 62 73 65 6e 63 65 20   in the absence 
30610 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61  of the LIMIT cla
30620 75 73 65 20 61 72 65 20 61 73 73 65 6d 62 6c 65  use are assemble
30630 64 20 69 6e 20 61 6e 0a 61 72 62 69 74 72 61 72  d in an.arbitrar
30640 79 20 6f 72 64 65 72 20 62 65 66 6f 72 65 20 61  y order before a
30650 70 70 6c 79 69 6e 67 20 74 68 65 20 4c 49 4d 49  pplying the LIMI
30660 54 20 61 6e 64 20 4f 46 46 53 45 54 20 63 6c 61  T and OFFSET cla
30670 75 73 65 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  uses to determin
30680 65 20 0a 77 68 69 63 68 20 61 72 65 20 61 63 74  e .which are act
30690 75 61 6c 6c 79 20 75 70 64 61 74 65 64 2e 0a 0a  ually updated...
306a0 3c 70 3e 5e 28 54 68 65 20 4f 52 44 45 52 20 42  <p>^(The ORDER B
306b0 59 20 63 6c 61 75 73 65 20 6f 6e 20 61 6e 20 55  Y clause on an U
306c0 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
306d0 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20  is used only to 
306e0 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 0a  determine which.
306f0 72 6f 77 73 20 66 61 6c 6c 20 77 69 74 68 69 6e  rows fall within
30700 20 74 68 65 20 4c 49 4d 49 54 2e 20 54 68 65 20   the LIMIT. The 
30710 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72  order in which r
30720 6f 77 73 20 61 72 65 20 6d 6f 64 69 66 69 65 64  ows are modified
30730 20 69 73 20 61 72 62 69 74 72 61 72 79 0a 61 6e   is arbitrary.an
30740 64 20 69 73 20 6e 6f 74 20 69 6e 66 6c 75 65 6e  d is not influen
30750 63 65 64 20 62 79 20 74 68 65 20 4f 52 44 45 52  ced by the ORDER
30760 20 42 59 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c   BY clause.)^..<
30770 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
30780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
307a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
307b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
307c0 23 23 23 0a 53 65 63 74 69 6f 6e 20 56 41 43 55  ###.Section VACU
307d0 55 4d 20 76 61 63 75 75 6d 20 56 41 43 55 55 4d  UM vacuum VACUUM
307e0 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
307f0 65 44 69 61 67 72 61 6d 20 76 61 63 75 75 6d 2d  eDiagram vacuum-
30800 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
30810 0a 20 20 54 68 65 20 56 41 43 55 55 4d 20 63 6f  .  The VACUUM co
30820 6d 6d 61 6e 64 20 72 65 62 75 69 6c 64 73 20 74  mmand rebuilds t
30830 68 65 20 61 6e 20 64 61 74 61 62 61 73 65 2c 20  he an database, 
30840 72 65 70 61 63 6b 69 6e 67 20 69 74 20 69 6e 74  repacking it int
30850 6f 20 61 20 6d 69 6e 69 6d 61 6c 0a 20 20 61 6d  o a minimal.  am
30860 6f 75 6e 74 20 6f 66 20 64 69 73 6b 20 73 70 61  ount of disk spa
30870 63 65 2e 20 54 68 65 72 65 20 61 72 65 20 73 65  ce. There are se
30880 76 65 72 61 6c 20 0a 20 20 72 65 61 73 6f 6e 73  veral .  reasons
30890 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20   an application 
308a0 6d 69 67 68 74 20 64 6f 20 74 68 69 73 3a 0a 0a  might do this:..
308b0 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20  <ul>.  <li> <p> 
308c0 5e 55 6e 6c 65 73 73 20 53 51 4c 69 74 65 20 69  ^Unless SQLite i
308d0 73 20 72 75 6e 6e 69 6e 67 20 69 6e 20 22 61 75  s running in "au
308e0 74 6f 5f 76 61 63 75 75 6d 3d 46 55 4c 4c 22 20  to_vacuum=FULL" 
308f0 6d 6f 64 65 2c 20 77 68 65 6e 20 61 20 6c 61 72  mode, when a lar
30900 67 65 0a 20 20 20 20 20 61 6d 6f 75 6e 74 20 6f  ge.     amount o
30910 66 20 64 61 74 61 20 69 73 20 64 65 6c 65 74 65  f data is delete
30920 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  d from the datab
30930 61 73 65 20 66 69 6c 65 20 69 74 20 6c 65 61 76  ase file it leav
30940 65 73 20 62 65 68 69 6e 64 20 65 6d 70 74 79 0a  es behind empty.
30950 20 20 20 20 20 73 70 61 63 65 2c 20 6f 72 20 22       space, or "
30960 66 72 65 65 22 20 64 61 74 61 62 61 73 65 20 70  free" database p
30970 61 67 65 73 2e 20 54 68 69 73 20 6d 65 61 6e 73  ages. This means
30980 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
30990 6c 65 20 6d 69 67 68 74 0a 20 20 20 20 20 62 65  le might.     be
309a0 20 6c 61 72 67 65 72 20 74 68 61 6e 20 73 74 72   larger than str
309b0 69 63 74 6c 79 20 6e 65 63 65 73 73 61 72 79 2e  ictly necessary.
309c0 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55 55 4d   ^Running VACUUM
309d0 20 74 6f 20 72 65 62 75 69 6c 64 20 74 68 65 20   to rebuild the 
309e0 0a 20 20 20 20 20 64 61 74 61 62 61 73 65 20 72  .     database r
309f0 65 63 6c 61 69 6d 73 20 74 68 69 73 20 73 70 61  eclaims this spa
30a00 63 65 20 61 6e 64 20 72 65 64 75 63 65 73 20 74  ce and reduces t
30a10 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64  he size of the d
30a20 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 0a 20  atabase file... 
30a30 20 3c 6c 69 3e 20 3c 70 3e 20 5e 46 72 65 71 75   <li> <p> ^Frequ
30a40 65 6e 74 20 69 6e 73 65 72 74 73 2c 20 75 70 64  ent inserts, upd
30a50 61 74 65 73 2c 20 61 6e 64 20 64 65 6c 65 74 65  ates, and delete
30a60 73 20 63 61 6e 20 63 61 75 73 65 20 74 68 65 20  s can cause the 
30a70 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 20 20  database file.  
30a80 20 20 20 74 6f 20 62 65 63 6f 6d 65 20 66 72 61     to become fra
30a90 67 6d 65 6e 74 65 64 20 2d 20 77 68 65 72 65 20  gmented - where 
30aa0 64 61 74 61 20 66 6f 72 20 61 20 73 69 6e 67 6c  data for a singl
30ab0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
30ac0 20 69 73 20 73 63 61 74 74 65 72 65 64 20 0a 20   is scattered . 
30ad0 20 20 20 20 61 72 6f 75 6e 64 20 74 68 65 20 64      around the d
30ae0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 5e 52  atabase file. ^R
30af0 75 6e 6e 69 6e 67 20 56 41 43 55 55 4d 20 65 6e  unning VACUUM en
30b00 73 75 72 65 73 20 74 68 61 74 20 65 61 63 68 20  sures that each 
30b10 74 61 62 6c 65 20 61 6e 64 0a 20 20 20 20 20 69  table and.     i
30b20 6e 64 65 78 20 69 73 20 6c 61 72 67 65 6c 79 20  ndex is largely 
30b30 73 74 6f 72 65 64 20 63 6f 6e 74 69 67 75 6f 75  stored contiguou
30b40 73 6c 79 20 77 69 74 68 69 6e 20 74 68 65 20 64  sly within the d
30b50 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 5e 49  atabase file. ^I
30b60 6e 20 73 6f 6d 65 0a 20 20 20 20 20 63 61 73 65  n some.     case
30b70 73 2c 20 56 41 43 55 55 4d 20 6d 61 79 20 61 6c  s, VACUUM may al
30b80 73 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75  so reduce the nu
30b90 6d 62 65 72 20 6f 66 20 70 61 72 74 69 61 6c 6c  mber of partiall
30ba0 79 20 66 69 6c 6c 65 64 20 70 61 67 65 73 20 69  y filled pages i
30bb0 6e 0a 20 20 20 20 20 74 68 65 20 64 61 74 61 62  n.     the datab
30bc0 61 73 65 2c 20 72 65 64 75 63 69 6e 67 20 74 68  ase, reducing th
30bd0 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61  e size of the da
30be0 74 61 62 61 73 65 20 66 69 6c 65 20 66 75 72 74  tabase file furt
30bf0 68 65 72 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e  her...  <li> <p>
30c00 20 5e 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 65 20   ^Normally, the 
30c10 64 61 74 61 62 61 73 65 20 5b 70 61 67 65 5f 73  database [page_s
30c20 69 7a 65 5d 20 61 6e 64 20 77 68 65 74 68 65 72  ize] and whether
30c30 20 6f 72 20 6e 6f 74 20 74 68 65 20 64 61 74 61   or not the data
30c40 62 61 73 65 0a 20 20 20 20 20 73 75 70 70 6f 72  base.     suppor
30c50 74 73 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  ts [auto_vacuum]
30c60 20 6d 75 73 74 20 62 65 20 63 6f 6e 66 69 67 75   must be configu
30c70 72 65 64 20 62 65 66 6f 72 65 20 74 68 65 20 64  red before the d
30c80 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 0a  atabase file is.
30c90 20 20 20 20 20 61 63 74 75 61 6c 6c 79 20 63 72       actually cr
30ca0 65 61 74 65 64 2e 20 5e 48 6f 77 65 76 65 72 2c  eated. ^However,
30cb0 20 77 68 65 6e 20 6e 6f 74 20 69 6e 20 5b 77 72   when not in [wr
30cc0 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20 6d  ite-ahead log] m
30cd0 6f 64 65 2c 20 74 68 65 20 0a 20 20 20 20 20 5b  ode, the .     [
30ce0 70 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64 2f 6f  page_size] and/o
30cf0 72 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20  r [auto_vacuum] 
30d00 70 72 6f 70 65 72 74 69 65 73 20 6f 66 20 61 6e  properties of an
30d10 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61   existing databa
30d20 73 65 20 6d 61 79 20 62 65 0a 20 20 20 20 20 63  se may be.     c
30d30 68 61 6e 67 65 64 20 62 79 20 75 73 69 6e 67 20  hanged by using 
30d40 74 68 65 20 5b 70 61 67 65 5f 73 69 7a 65 20 70  the [page_size p
30d50 72 61 67 6d 61 7c 70 61 67 65 5f 73 69 7a 65 5d  ragma|page_size]
30d60 20 20 61 6e 64 2f 6f 72 20 0a 20 20 20 20 20 5b    and/or .     [
30d70 61 75 74 6f 5f 76 61 63 75 75 6d 7c 70 72 61 67  auto_vacuum|prag
30d80 6d 61 20 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20  ma auto_vacuum] 
30d90 70 72 61 67 6d 61 73 20 61 6e 64 20 74 68 65 6e  pragmas and then
30da0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 56 41 43   immediately VAC
30db0 55 55 4d 69 6e 67 0a 20 20 20 20 20 74 68 65 20  UUMing.     the 
30dc0 64 61 74 61 62 61 73 65 2e 20 5e 57 68 65 6e 20  database. ^When 
30dd0 69 6e 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20  in [write-ahead 
30de0 6c 6f 67 5d 20 6d 6f 64 65 2c 20 6f 6e 6c 79 20  log] mode, only 
30df0 74 68 65 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d  the [auto_vacuum
30e00 5d 0a 20 20 20 20 20 73 75 70 70 6f 72 74 20 70  ].     support p
30e10 72 6f 70 65 72 74 79 20 63 61 6e 20 62 65 20 63  roperty can be c
30e20 68 61 6e 67 65 64 20 75 73 69 6e 67 20 56 41 43  hanged using VAC
30e30 55 55 4d 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e  UUM..</ul>..<p>^
30e40 42 79 20 64 65 66 61 75 6c 74 2c 20 56 41 43 55  By default, VACU
30e50 55 4d 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e  UM only works on
30e60 6c 79 20 6f 6e 20 74 68 65 20 6d 61 69 6e 20 64  ly on the main d
30e70 61 74 61 62 61 73 65 2e 0a 5e 5b 41 54 54 41 43  atabase..^[ATTAC
30e80 48 7c 41 74 74 61 63 68 65 64 20 64 61 74 61 62  H|Attached datab
30e90 61 73 65 73 5d 20 63 61 6e 20 62 65 20 76 61 63  ases] can be vac
30ea0 75 75 6d 65 64 20 62 79 20 61 70 70 65 6e 64 69  uumed by appendi
30eb0 6e 67 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  ng the appropria
30ec0 74 65 0a 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d  te.<yyterm>schem
30ed0 61 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20  a-name</yyterm> 
30ee0 74 6f 20 74 68 65 20 56 41 43 55 55 4d 20 73 74  to the VACUUM st
30ef0 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 3c 62 3e  atement...<p><b>
30f00 43 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 57 61  Compatibility Wa
30f10 72 6e 69 6e 67 3a 3c 2f 62 3e 20 54 68 65 20 61  rning:</b> The a
30f20 62 69 6c 69 74 79 20 74 6f 20 76 61 63 75 75 6d  bility to vacuum
30f30 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
30f40 73 65 73 20 77 61 73 0a 61 64 64 65 64 20 69 6e  ses was.added in
30f50 20 5b 76 65 72 73 69 6f 6e 20 33 2e 31 35 2e 30   [version 3.15.0
30f60 5d 20 28 5b 64 61 74 65 6f 66 3a 33 2e 31 35 2e  ] ([dateof:3.15.
30f70 30 5d 29 2e 20 20 50 72 69 6f 72 20 74 6f 20 74  0]).  Prior to t
30f80 68 61 74 2c 20 61 20 0a 3c 79 79 74 65 72 6d 3e  hat, a .<yyterm>
30f90 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74  schema-name</yyt
30fa0 65 72 6d 3e 20 61 64 64 65 64 20 74 6f 20 74 68  erm> added to th
30fb0 65 0a 56 41 43 55 55 4d 20 73 74 61 74 65 6d 65  e.VACUUM stateme
30fc0 6e 74 20 77 6f 75 6c 64 20 62 65 20 73 69 6c 65  nt would be sile
30fd0 6e 74 6c 79 20 69 67 6e 6f 72 65 64 20 61 6e 64  ntly ignored and
30fe0 20 74 68 65 20 22 6d 61 69 6e 22 20 73 63 68 65   the "main" sche
30ff0 6d 61 20 77 6f 75 6c 64 20 62 65 0a 76 61 63 63  ma would be.vacc
31000 75 6d 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  umed.</p>..<p>^T
31010 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e  he VACUUM comman
31020 64 20 77 6f 72 6b 73 20 62 79 20 63 6f 70 79 69  d works by copyi
31030 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  ng the contents 
31040 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
31050 69 6e 74 6f 0a 61 20 74 65 6d 70 6f 72 61 72 79  into.a temporary
31060 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
31070 6e 64 20 74 68 65 6e 20 6f 76 65 72 77 72 69 74  nd then overwrit
31080 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  ing the original
31090 20 77 69 74 68 20 74 68 65 20 0a 63 6f 6e 74 65   with the .conte
310a0 6e 74 73 20 6f 66 20 74 68 65 20 74 65 6d 70 6f  nts of the tempo
310b0 72 61 72 79 20 66 69 6c 65 2e 20 5e 57 68 65 6e  rary file. ^When
310c0 20 6f 76 65 72 77 72 69 74 69 6e 67 20 74 68 65   overwriting the
310d0 20 6f 72 69 67 69 6e 61 6c 2c 20 61 20 72 6f 6c   original, a rol
310e0 6c 62 61 63 6b 0a 6a 6f 75 72 6e 61 6c 20 6f 72  lback.journal or
310f0 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f   [write-ahead lo
31100 67 5d 20 57 41 4c 20 66 69 6c 65 20 69 73 20 75  g] WAL file is u
31110 73 65 64 20 6a 75 73 74 20 61 73 20 69 74 20 77  sed just as it w
31120 6f 75 6c 64 20 62 65 20 66 6f 72 20 61 6e 79 0a  ould be for any.
31130 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 20 74  other database t
31140 72 61 6e 73 61 63 74 69 6f 6e 2e 20 5e 54 68 69  ransaction. ^Thi
31150 73 20 6d 65 61 6e 73 20 74 68 61 74 20 77 68 65  s means that whe
31160 6e 20 56 41 43 55 55 4d 69 6e 67 20 61 20 64 61  n VACUUMing a da
31170 74 61 62 61 73 65 2c 20 0a 61 73 20 6d 75 63 68  tabase, .as much
31180 20 61 73 20 74 77 69 63 65 20 74 68 65 20 73 69   as twice the si
31190 7a 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e  ze of the origin
311a0 61 6c 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  al database file
311b0 20 69 73 20 72 65 71 75 69 72 65 64 20 69 6e 20   is required in 
311c0 66 72 65 65 0a 64 69 73 6b 20 73 70 61 63 65 2e  free.disk space.
311d0 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d  ..<p>^The VACUUM
311e0 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 63 68 61   command may cha
311f0 6e 67 65 20 74 68 65 20 5b 52 4f 57 49 44 20 7c  nge the [ROWID |
31200 20 52 4f 57 49 44 73 5d 20 6f 66 20 65 6e 74 72   ROWIDs] of entr
31210 69 65 73 20 69 6e 20 61 6e 79 0a 74 61 62 6c 65  ies in any.table
31220 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 68 61  s that do not ha
31230 76 65 20 61 6e 20 65 78 70 6c 69 63 69 74 20 5b  ve an explicit [
31240 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
31250 4b 45 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e  KEY]..</p>..<p>^
31260 41 20 56 41 43 55 55 4d 20 77 69 6c 6c 20 66 61  A VACUUM will fa
31270 69 6c 20 69 66 20 74 68 65 72 65 20 69 73 20 61  il if there is a
31280 6e 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69  n open transacti
31290 6f 6e 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20  on, or if there 
312a0 61 72 65 20 6f 6e 65 20 6f 72 0a 6d 6f 72 65 20  are one or.more 
312b0 61 63 74 69 76 65 20 53 51 4c 20 73 74 61 74 65  active SQL state
312c0 6d 65 6e 74 73 20 77 68 65 6e 20 69 74 20 69 73  ments when it is
312d0 20 72 75 6e 2e 0a 0a 3c 70 3e 5e 28 41 6e 20 61   run...<p>^(An a
312e0 6c 74 65 72 6e 61 74 69 76 65 20 74 6f 20 75 73  lternative to us
312f0 69 6e 67 20 74 68 65 20 56 41 43 55 55 4d 20 63  ing the VACUUM c
31300 6f 6d 6d 61 6e 64 20 74 6f 0a 72 65 63 6c 61 69  ommand to.reclai
31310 6d 20 73 70 61 63 65 20 61 66 74 65 72 20 64 61  m space after da
31320 74 61 20 68 61 73 20 62 65 65 6e 20 64 65 6c 65  ta has been dele
31330 74 65 64 20 69 73 20 61 75 74 6f 2d 76 61 63 75  ted is auto-vacu
31340 75 6d 20 6d 6f 64 65 2c 20 65 6e 61 62 6c 65 64  um mode, enabled
31350 20 75 73 69 6e 67 0a 74 68 65 20 5b 61 75 74 6f   using.the [auto
31360 5f 76 61 63 75 75 6d 5d 20 70 72 61 67 6d 61 2e  _vacuum] pragma.
31370 29 5e 20 5e 57 68 65 6e 20 5b 61 75 74 6f 5f 76  )^ ^When [auto_v
31380 61 63 75 75 6d 5d 20 69 73 20 65 6e 61 62 6c 65  acuum] is enable
31390 64 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65  d for a database
313a0 0a 66 72 65 65 20 70 61 67 65 73 20 6d 61 79 20  .free pages may 
313b0 62 65 20 72 65 63 6c 61 69 6d 65 64 20 61 66 74  be reclaimed aft
313c0 65 72 20 64 65 6c 65 74 69 6e 67 20 64 61 74 61  er deleting data
313d0 2c 20 63 61 75 73 69 6e 67 20 74 68 65 20 66 69  , causing the fi
313e0 6c 65 20 74 6f 20 73 68 72 69 6e 6b 2c 0a 77 69  le to shrink,.wi
313f0 74 68 6f 75 74 20 72 65 62 75 69 6c 64 69 6e 67  thout rebuilding
31400 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61   the entire data
31410 62 61 73 65 20 75 73 69 6e 67 20 56 41 43 55 55  base using VACUU
31420 4d 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 75 73  M.  ^However, us
31430 69 6e 67 0a 5b 61 75 74 6f 5f 76 61 63 75 75 6d  ing.[auto_vacuum
31440 5d 20 63 61 6e 20 6c 65 61 64 20 74 6f 20 65 78  ] can lead to ex
31450 74 72 61 20 64 61 74 61 62 61 73 65 20 66 69 6c  tra database fil
31460 65 20 66 72 61 67 6d 65 6e 74 61 74 69 6f 6e 2e  e fragmentation.
31470 20 20 5e 41 6e 64 20 5b 61 75 74 6f 5f 76 61 63    ^And [auto_vac
31480 75 75 6d 5d 0a 64 6f 65 73 20 6e 6f 74 20 63 6f  uum].does not co
31490 6d 70 61 63 74 20 70 61 72 74 69 61 6c 6c 79 20  mpact partially 
314a0 66 69 6c 6c 65 64 20 70 61 67 65 73 20 6f 66 20  filled pages of 
314b0 74 68 65 20 64 61 74 61 62 61 73 65 20 61 73 20  the database as 
314c0 56 41 43 55 55 4d 20 64 6f 65 73 2e 0a 0a 3c 2f  VACUUM does...</
314d0 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  p>...<tcl>.#####
314e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
314f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31500 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31510 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31520 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
31530 6e 20 7b 49 4e 44 45 58 45 44 20 42 59 7d 20 69  n {INDEXED BY} i
31540 6e 64 65 78 65 64 62 79 20 7b 7b 49 4e 44 45 58  ndexedby {{INDEX
31550 45 44 20 42 59 7d 20 7b 4e 4f 54 20 49 4e 44 45  ED BY} {NOT INDE
31560 58 45 44 7d 7d 0a 0a 3c 2f 74 63 6c 3e 0a 3c 70  XED}}..</tcl>.<p
31570 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59  >^The INDEXED BY
31580 20 70 68 72 61 73 65 20 66 6f 72 63 65 73 20 74   phrase forces t
31590 68 65 20 5b 53 51 4c 69 74 65 20 71 75 65 72 79  he [SQLite query
315a0 20 70 6c 61 6e 6e 65 72 5d 20 74 6f 20 75 73 65   planner] to use
315b0 20 61 0a 70 61 72 74 69 63 75 6c 61 72 20 6e 61   a.particular na
315c0 6d 65 64 20 69 6e 64 65 78 20 6f 6e 20 61 20 5b  med index on a [
315d0 44 45 4c 45 54 45 5d 2c 20 5b 53 45 4c 45 43 54  DELETE], [SELECT
315e0 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d 20 73  ], or [UPDATE] s
315f0 74 61 74 65 6d 65 6e 74 2e 0a 54 68 65 20 49 4e  tatement..The IN
31600 44 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20  DEXED BY phrase 
31610 69 73 20 61 6e 20 53 51 4c 69 74 65 20 65 78 74  is an SQLite ext
31620 65 6e 73 69 6f 6e 20 61 6e 64 0a 69 73 20 6e 6f  ension and.is no
31630 74 20 70 6f 72 74 61 62 6c 65 20 74 6f 20 6f 74  t portable to ot
31640 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65  her SQL database
31650 20 65 6e 67 69 6e 65 73 2e 3c 2f 70 3e 0a 0a 3c   engines.</p>..<
31660 74 63 6c 3e 0a 52 65 63 75 72 73 69 76 65 42 75  tcl>.RecursiveBu
31670 62 62 6c 65 44 69 61 67 72 61 6d 20 71 75 61 6c  bbleDiagram qual
31680 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65  ified-table-name
31690 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
316a0 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 79 79   "INDEXED BY <yy
316b0 74 65 72 6d 3e 69 6e 64 65 78 2d 6e 61 6d 65 3c  term>index-name<
316c0 2f 79 79 74 65 72 6d 3e 22 20 70 68 72 61 73 65  /yyterm>" phrase
316d0 20 73 70 65 63 69 66 69 65 73 20 0a 74 68 61 74   specifies .that
316e0 20 74 68 65 20 6e 61 6d 65 64 20 69 6e 64 65 78   the named index
316f0 0a 6d 75 73 74 20 62 65 20 75 73 65 64 20 69 6e  .must be used in
31700 20 6f 72 64 65 72 20 74 6f 20 6c 6f 6f 6b 20 75   order to look u
31710 70 20 76 61 6c 75 65 73 20 6f 6e 20 74 68 65 20  p values on the 
31720 70 72 65 63 65 64 69 6e 67 20 74 61 62 6c 65 2e  preceding table.
31730 0a 5e 49 66 20 3c 79 79 74 65 72 6d 3e 69 6e 64  .^If <yyterm>ind
31740 65 78 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  ex-name</yyterm>
31750 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20   does not exist 
31760 6f 72 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65  or cannot be use
31770 64 20 0a 66 6f 72 20 74 68 65 20 71 75 65 72 79  d .for the query
31780 2c 20 74 68 65 6e 20 74 68 65 20 70 72 65 70 61  , then the prepa
31790 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 53 51  ration of the SQ
317a0 4c 20 73 74 61 74 65 6d 65 6e 74 20 66 61 69 6c  L statement fail
317b0 73 2e 0a 5e 28 54 68 65 20 22 4e 4f 54 20 49 4e  s..^(The "NOT IN
317c0 44 45 58 45 44 22 20 63 6c 61 75 73 65 20 73 70  DEXED" clause sp
317d0 65 63 69 66 69 65 73 20 74 68 61 74 20 6e 6f 20  ecifies that no 
317e0 69 6e 64 65 78 20 73 68 61 6c 6c 20 62 65 20 75  index shall be u
317f0 73 65 64 20 77 68 65 6e 0a 61 63 63 65 73 73 69  sed when.accessi
31800 6e 67 20 74 68 65 20 70 72 65 63 65 64 69 6e 67  ng the preceding
31810 20 74 61 62 6c 65 2c 20 69 6e 63 6c 75 64 69 6e   table, includin
31820 67 20 69 6d 70 6c 69 65 64 20 69 6e 64 69 63 65  g implied indice
31830 73 20 63 72 65 61 74 65 20 62 79 0a 55 4e 49 51  s create by.UNIQ
31840 55 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b  UE and PRIMARY K
31850 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20  EY constraints. 
31860 20 48 6f 77 65 76 65 72 2c 20 74 68 65 20 5b 72   However, the [r
31870 6f 77 69 64 5d 0a 63 61 6e 20 73 74 69 6c 6c 20  owid].can still 
31880 62 65 20 75 73 65 64 20 74 6f 20 6c 6f 6f 6b 20  be used to look 
31890 75 70 20 65 6e 74 72 69 65 73 20 65 76 65 6e 20  up entries even 
318a0 77 68 65 6e 20 22 4e 4f 54 20 49 4e 44 45 58 45  when "NOT INDEXE
318b0 44 22 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  D" is specified.
318c0 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 53 6f 6d 65 20  )^</p>..<p>Some 
318d0 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67  SQL database eng
318e0 69 6e 65 73 20 70 72 6f 76 69 64 65 20 6e 6f 6e  ines provide non
318f0 2d 73 74 61 6e 64 61 72 64 20 22 68 69 6e 74 22  -standard "hint"
31900 20 6d 65 63 68 61 6e 69 73 6d 73 20 77 68 69 63   mechanisms whic
31910 68 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  h.can be used to
31920 20 67 69 76 65 20 74 68 65 20 71 75 65 72 79 20   give the query 
31930 6f 70 74 69 6d 69 7a 65 72 20 63 6c 75 65 73 20  optimizer clues 
31940 61 62 6f 75 74 20 77 68 61 74 20 69 6e 64 69 63  about what indic
31950 65 73 20 69 74 20 73 68 6f 75 6c 64 0a 75 73 65  es it should.use
31960 20 66 6f 72 20 61 20 70 61 72 74 69 63 75 6c 61   for a particula
31970 72 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  r statement.  Th
31980 65 20 49 4e 44 45 58 20 42 59 20 63 6c 61 75 73  e INDEX BY claus
31990 65 20 6f 66 20 53 51 4c 69 74 65 20 69 73 20 0a  e of SQLite is .
319a0 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 20 68  <em>not</em> a h
319b0 69 6e 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d  inting mechanism
319c0 20 61 6e 64 20 69 74 20 73 68 6f 75 6c 64 20 6e   and it should n
319d0 6f 74 20 62 65 20 75 73 65 64 20 61 73 20 73 75  ot be used as su
319e0 63 68 2e 0a 5e 54 68 65 20 49 4e 44 45 58 45 44  ch..^The INDEXED
319f0 20 42 59 20 63 6c 61 75 73 65 20 64 6f 65 73 20   BY clause does 
31a00 6e 6f 74 20 67 69 76 65 20 74 68 65 20 6f 70 74  not give the opt
31a10 69 6d 69 7a 65 72 20 68 69 6e 74 73 20 61 62 6f  imizer hints abo
31a20 75 74 20 77 68 69 63 68 20 69 6e 64 65 78 0a 74  ut which index.t
31a30 6f 20 75 73 65 3b 20 69 74 20 67 69 76 65 73 20  o use; it gives 
31a40 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 61 20  the optimizer a 
31a50 72 65 71 75 69 72 65 6d 65 6e 74 20 6f 66 20 77  requirement of w
31a60 68 69 63 68 20 69 6e 64 65 78 20 74 6f 20 75 73  hich index to us
31a70 65 2e 0a 5e 49 66 20 74 68 65 20 71 75 65 72 79  e..^If the query
31a80 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 20 75 6e   optimizer is un
31a90 61 62 6c 65 20 74 6f 20 75 73 65 20 74 68 65 20  able to use the 
31aa0 69 6e 64 65 78 20 73 70 65 63 69 66 69 65 64 20  index specified 
31ab0 62 79 20 74 68 65 0a 49 4e 44 45 58 20 42 59 20  by the.INDEX BY 
31ac0 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65  clause, then the
31ad0 20 71 75 65 72 79 20 77 69 6c 6c 20 66 61 69 6c   query will fail
31ae0 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c   with an error.<
31af0 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e 44 45  /p>..<p>The INDE
31b00 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 69 73  XED BY clause is
31b10 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 69 6e   <em>not</em> in
31b20 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69  tended for use i
31b30 6e 20 74 75 6e 69 6e 67 0a 74 68 65 20 70 65 72  n tuning.the per
31b40 66 6f 72 6d 61 6e 63 65 20 6f 66 20 61 20 71 75  formance of a qu
31b50 65 72 79 2e 20 20 54 68 65 20 69 6e 74 65 6e 74  ery.  The intent
31b60 20 6f 66 20 74 68 65 20 49 4e 44 45 58 45 44 20   of the INDEXED 
31b70 42 59 20 63 6c 61 75 73 65 20 69 73 0a 74 6f 20  BY clause is.to 
31b80 72 61 69 73 65 20 61 20 72 75 6e 2d 74 69 6d 65  raise a run-time
31b90 20 65 72 72 6f 72 20 69 66 20 61 20 73 63 68 65   error if a sche
31ba0 6d 61 20 63 68 61 6e 67 65 2c 20 73 75 63 68 20  ma change, such 
31bb0 61 73 20 64 72 6f 70 70 69 6e 67 20 6f 72 0a 63  as dropping or.c
31bc0 72 65 61 74 69 6e 67 20 61 6e 20 69 6e 64 65 78  reating an index
31bd0 2c 20 63 61 75 73 65 73 20 74 68 65 20 71 75 65  , causes the que
31be0 72 79 20 70 6c 61 6e 20 66 6f 72 20 61 20 74 69  ry plan for a ti
31bf0 6d 65 2d 73 65 6e 73 69 74 69 76 65 20 71 75 65  me-sensitive que
31c00 72 79 0a 74 6f 20 63 68 61 6e 67 65 2e 20 20 54  ry.to change.  T
31c10 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c  he INDEXED BY cl
31c20 61 75 73 65 20 69 73 20 64 65 73 69 67 6e 65 64  ause is designed
31c30 20 74 6f 20 68 65 6c 70 20 64 65 74 65 63 74 0a   to help detect.
31c40 75 6e 64 65 73 69 72 61 62 6c 65 20 71 75 65 72  undesirable quer
31c50 79 20 70 6c 61 6e 20 63 68 61 6e 67 65 73 20 64  y plan changes d
31c60 75 72 69 6e 67 20 72 65 67 72 65 73 73 69 6f 6e  uring regression
31c70 20 74 65 73 74 69 6e 67 2e 0a 41 70 70 6c 69 63   testing..Applic
31c80 61 74 69 6f 6e 20 0a 64 65 76 65 6c 6f 70 65 72  ation .developer
31c90 73 20 61 72 65 20 61 64 6d 6f 6e 69 73 68 65 64  s are admonished
31ca0 20 74 6f 20 6f 6d 69 74 20 61 6c 6c 20 75 73 65   to omit all use
31cb0 20 6f 66 20 49 4e 44 45 58 45 44 20 42 59 20 64   of INDEXED BY d
31cc0 75 72 69 6e 67 0a 61 70 70 6c 69 63 61 74 69 6f  uring.applicatio
31cd0 6e 20 64 65 73 69 67 6e 2c 20 69 6d 70 6c 65 6d  n design, implem
31ce0 65 6e 74 61 74 69 6f 6e 2c 20 74 65 73 74 69 6e  entation, testin
31cf0 67 2c 20 61 6e 64 20 74 75 6e 69 6e 67 2e 20 20  g, and tuning.  
31d00 49 66 0a 49 4e 44 45 58 45 44 20 42 59 20 69 73  If.INDEXED BY is
31d10 20 74 6f 20 62 65 20 75 73 65 64 20 61 74 20 61   to be used at a
31d20 6c 6c 2c 20 69 74 20 73 68 6f 75 6c 64 20 62 65  ll, it should be
31d30 20 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65   inserted at the
31d40 20 76 65 72 79 0a 65 6e 64 20 6f 66 20 74 68 65   very.end of the
31d50 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 70 72 6f   development pro
31d60 63 65 73 73 20 77 68 65 6e 20 22 6c 6f 63 6b 69  cess when "locki
31d70 6e 67 20 64 6f 77 6e 22 20 61 20 64 65 73 69 67  ng down" a desig
31d80 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 65 65 20  n.</p>..<h3>See 
31d90 41 6c 73 6f 3a 3c 2f 68 33 3e 0a 0a 3c 6f 6c 3e  Also:</h3>..<ol>
31da0 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 5b 71 75 65  .<li><p>The [que
31db0 72 79 20 70 6c 61 6e 6e 65 72 20 63 68 65 63 6b  ry planner check
31dc0 6c 69 73 74 5d 20 64 65 73 63 72 69 62 65 73 20  list] describes 
31dd0 73 74 65 70 73 20 74 68 61 74 20 61 70 70 6c 69  steps that appli
31de0 63 61 74 69 6f 6e 0a 64 65 76 65 6c 6f 70 65 72  cation.developer
31df0 73 20 73 68 6f 75 6c 64 20 66 6f 6c 6c 6f 77 69  s should followi
31e00 6e 67 20 74 6f 20 68 65 6c 70 20 72 65 73 6f 6c  ng to help resol
31e10 76 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72  ve query planner
31e20 20 70 72 6f 62 6c 65 6d 73 2e 0a 4e 6f 74 69 63   problems..Notic
31e30 65 20 74 68 65 20 74 68 61 74 20 74 68 65 20 75  e the that the u
31e40 73 65 20 6f 66 20 49 4e 44 45 58 45 44 20 42 59  se of INDEXED BY
31e50 20 69 73 20 61 20 6c 61 73 74 20 72 65 73 6f 72   is a last resor
31e60 74 2c 20 74 6f 20 62 65 20 75 73 65 64 20 6f 6e  t, to be used on
31e70 6c 79 0a 77 68 65 6e 20 61 6c 6c 20 6f 74 68 65  ly.when all othe
31e80 72 20 6d 65 61 73 75 72 65 73 20 66 61 69 6c 2e  r measures fail.
31e90 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5b 75 70  </p>..<li><p>[up
31ea0 6c 75 73 63 6f 6e 74 72 6f 6c 7c 54 68 65 20 75  luscontrol|The u
31eb0 6e 61 72 79 20 22 2b 22 20 6f 70 65 72 61 74 6f  nary "+" operato
31ec0 72 5d 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74  r].can be used t
31ed0 6f 20 64 69 73 71 75 61 6c 69 66 79 20 74 65 72  o disqualify ter
31ee0 6d 73 20 69 6e 20 74 68 65 20 57 48 45 52 45 20  ms in the WHERE 
31ef0 63 6c 61 75 73 65 20 66 72 6f 6d 20 75 73 65 20  clause from use 
31f00 62 79 20 69 6e 64 69 63 65 73 2e 0a 43 61 72 65  by indices..Care
31f10 66 75 6c 20 75 73 65 20 6f 66 20 75 6e 61 72 79  ful use of unary
31f20 20 2b 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73   + can sometimes
31f30 20 68 65 6c 70 20 70 72 65 76 65 6e 74 20 74 68   help prevent th
31f40 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  e query planner 
31f50 66 72 6f 6d 0a 63 68 6f 6f 73 69 6e 67 20 61 20  from.choosing a 
31f60 70 6f 6f 72 20 69 6e 64 65 78 20 77 69 74 68 6f  poor index witho
31f70 75 74 20 72 65 73 74 72 69 63 74 69 6e 67 20 69  ut restricting i
31f80 74 20 74 6f 20 75 73 69 6e 67 20 6f 6e 65 20 73  t to using one s
31f90 70 65 63 69 66 69 63 20 69 6e 64 65 78 2e 0a 43  pecific index..C
31fa0 61 72 65 66 75 6c 20 70 6c 61 63 65 6d 65 6e 74  areful placement
31fb0 20 6f 66 20 75 6e 61 72 79 20 2b 20 6f 70 65 72   of unary + oper
31fc0 61 74 6f 72 73 20 69 73 20 61 20 62 65 74 74 65  ators is a bette
31fd0 72 20 6d 65 74 68 6f 64 20 66 6f 72 20 63 6f 6e  r method for con
31fe0 74 72 6f 6c 6c 69 6e 67 20 0a 77 68 69 63 68 20  trolling .which 
31ff0 69 6e 64 69 63 65 73 20 61 72 65 20 75 73 65 64  indices are used
32000 20 62 79 20 61 20 71 75 65 72 79 2e 3c 2f 70 3e   by a query.</p>
32010 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 5b 73 71  ..<li><p>The [sq
32020 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75  lite3_stmt_statu
32030 73 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72  s()] C/C++ inter
32040 66 61 63 65 20 74 6f 67 65 74 68 65 72 20 77 69  face together wi
32050 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f 53  th the.[SQLITE_S
32060 54 4d 54 53 54 41 54 55 53 5f 46 55 4c 4c 53 43  TMTSTATUS_FULLSC
32070 41 4e 5f 53 54 45 50 5d 20 61 6e 64 20 5b 53 51  AN_STEP] and [SQ
32080 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
32090 53 4f 52 54 5d 20 76 65 72 62 73 0a 63 61 6e 20  SORT] verbs.can 
320a0 62 65 20 75 73 65 64 20 74 6f 20 64 65 74 65 63  be used to detec
320b0 74 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 77 68  t at run-time wh
320c0 65 6e 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d  en an SQL statem
320d0 65 6e 74 20 69 73 20 6e 6f 74 0a 6d 61 6b 69 6e  ent is not.makin
320e0 67 20 65 66 66 65 63 74 69 76 65 20 75 73 65 20  g effective use 
320f0 6f 66 20 69 6e 64 69 63 65 73 2e 20 20 4d 61 6e  of indices.  Man
32100 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 6d  y applications m
32110 61 79 20 70 72 65 66 65 72 20 74 6f 0a 75 73 65  ay prefer to.use
32120 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 74   the [sqlite3_st
32130 6d 74 5f 73 74 61 74 75 73 28 29 5d 20 69 6e 74  mt_status()] int
32140 65 72 66 61 63 65 20 74 6f 20 64 65 74 65 63 74  erface to detect
32150 20 69 6e 64 65 78 20 6d 69 73 75 73 65 0a 72 61   index misuse.ra
32160 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 49 4e  ther than the IN
32170 44 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20  DEXED BY phrase 
32180 64 65 73 63 72 69 62 65 64 20 68 65 72 65 2e 3c  described here.<
32190 2f 70 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e  /p>.</ol>..<tcl>
321a0 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
321b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
321c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
321d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
321e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23  ##############.#
321f0 20 41 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f   A list of keywo
32200 72 64 73 2e 20 20 41 20 61 73 74 65 72 69 73 6b  rds.  A asterisk
32210 20 6f 63 63 75 72 73 20 61 66 74 65 72 20 74 68   occurs after th
32220 65 20 6b 65 79 77 6f 72 64 20 69 66 20 69 74 20  e keyword if it 
32230 69 73 20 6f 6e 0a 23 20 74 68 65 20 66 61 6c 6c  is on.# the fall
32240 62 61 63 6b 20 6c 69 73 74 2e 0a 23 0a 73 65 74  back list..#.set
32250 20 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20 5b 6c   keyword_list [l
32260 73 6f 72 74 20 7b 0a 20 20 20 41 42 4f 52 54 0a  sort {.   ABORT.
32270 20 20 20 41 43 54 49 4f 4e 0a 20 20 20 41 44 44     ACTION.   ADD
32280 0a 20 20 20 41 46 54 45 52 0a 20 20 20 41 4c 4c  .   AFTER.   ALL
32290 0a 20 20 20 41 4c 54 45 52 0a 20 20 20 41 4e 41  .   ALTER.   ANA
322a0 4c 59 5a 45 0a 20 20 20 41 4e 44 0a 20 20 20 41  LYZE.   AND.   A
322b0 53 0a 20 20 20 41 53 43 0a 20 20 20 41 54 54 41  S.   ASC.   ATTA
322c0 43 48 0a 20 20 20 41 55 54 4f 49 4e 43 52 45 4d  CH.   AUTOINCREM
322d0 45 4e 54 0a 20 20 20 42 45 46 4f 52 45 0a 20 20  ENT.   BEFORE.  
322e0 20 42 45 47 49 4e 0a 20 20 20 42 45 54 57 45 45   BEGIN.   BETWEE
322f0 4e 0a 20 20 20 42 59 0a 20 20 20 43 41 53 43 41  N.   BY.   CASCA
32300 44 45 0a 20 20 20 43 41 53 45 0a 20 20 20 43 41  DE.   CASE.   CA
32310 53 54 0a 20 20 20 43 48 45 43 4b 0a 20 20 20 43  ST.   CHECK.   C
32320 4f 4c 4c 41 54 45 0a 20 20 20 43 4f 4c 55 4d 4e  OLLATE.   COLUMN
32330 0a 20 20 20 43 4f 4d 4d 49 54 0a 20 20 20 43 4f  .   COMMIT.   CO
32340 4e 46 4c 49 43 54 0a 20 20 20 43 4f 4e 53 54 52  NFLICT.   CONSTR
32350 41 49 4e 54 0a 20 20 20 43 52 45 41 54 45 0a 20  AINT.   CREATE. 
32360 20 20 43 52 4f 53 53 0a 20 20 20 43 55 52 52 45    CROSS.   CURRE
32370 4e 54 5f 44 41 54 45 0a 20 20 20 43 55 52 52 45  NT_DATE.   CURRE
32380 4e 54 5f 54 49 4d 45 0a 20 20 20 43 55 52 52 45  NT_TIME.   CURRE
32390 4e 54 5f 54 49 4d 45 53 54 41 4d 50 0a 20 20 20  NT_TIMESTAMP.   
323a0 44 41 54 41 42 41 53 45 0a 20 20 20 44 45 46 41  DATABASE.   DEFA
323b0 55 4c 54 0a 20 20 20 44 45 46 45 52 52 45 44 0a  ULT.   DEFERRED.
323c0 20 20 20 44 45 46 45 52 52 41 42 4c 45 0a 20 20     DEFERRABLE.  
323d0 20 44 45 4c 45 54 45 0a 20 20 20 44 45 53 43 0a   DELETE.   DESC.
323e0 20 20 20 44 45 54 41 43 48 0a 20 20 20 44 49 53     DETACH.   DIS
323f0 54 49 4e 43 54 0a 20 20 20 44 52 4f 50 0a 20 20  TINCT.   DROP.  
32400 20 45 4e 44 0a 20 20 20 45 41 43 48 0a 20 20 20   END.   EACH.   
32410 45 4c 53 45 0a 20 20 20 45 53 43 41 50 45 0a 20  ELSE.   ESCAPE. 
32420 20 20 45 58 43 45 50 54 0a 20 20 20 45 58 43 4c    EXCEPT.   EXCL
32430 55 53 49 56 45 0a 20 20 20 45 58 49 53 54 53 0a  USIVE.   EXISTS.
32440 20 20 20 45 58 50 4c 41 49 4e 0a 20 20 20 46 41     EXPLAIN.   FA
32450 49 4c 0a 20 20 20 46 4f 52 0a 20 20 20 46 4f 52  IL.   FOR.   FOR
32460 45 49 47 4e 0a 20 20 20 46 52 4f 4d 0a 20 20 20  EIGN.   FROM.   
32470 46 55 4c 4c 0a 20 20 20 47 4c 4f 42 0a 20 20 20  FULL.   GLOB.   
32480 47 52 4f 55 50 0a 20 20 20 48 41 56 49 4e 47 0a  GROUP.   HAVING.
32490 20 20 20 49 46 0a 20 20 20 49 47 4e 4f 52 45 0a     IF.   IGNORE.
324a0 20 20 20 49 4d 4d 45 44 49 41 54 45 0a 20 20 20     IMMEDIATE.   
324b0 49 4e 0a 20 20 20 49 4e 44 45 58 0a 20 20 20 49  IN.   INDEX.   I
324c0 4e 44 45 58 45 44 0a 20 20 20 49 4e 49 54 49 41  NDEXED.   INITIA
324d0 4c 4c 59 0a 20 20 20 49 4e 4e 45 52 0a 20 20 20  LLY.   INNER.   
324e0 49 4e 53 45 52 54 0a 20 20 20 49 4e 53 54 45 41  INSERT.   INSTEA
324f0 44 0a 20 20 20 49 4e 54 45 52 53 45 43 54 0a 20  D.   INTERSECT. 
32500 20 20 49 4e 54 4f 0a 20 20 20 49 53 0a 20 20 20    INTO.   IS.   
32510 49 53 4e 55 4c 4c 0a 20 20 20 4a 4f 49 4e 0a 20  ISNULL.   JOIN. 
32520 20 20 4b 45 59 0a 20 20 20 4c 45 46 54 0a 20 20    KEY.   LEFT.  
32530 20 4c 49 4b 45 0a 20 20 20 4c 49 4d 49 54 0a 20   LIKE.   LIMIT. 
32540 20 20 4d 41 54 43 48 0a 20 20 20 4e 41 54 55 52    MATCH.   NATUR
32550 41 4c 0a 20 20 20 4e 4f 0a 20 20 20 4e 4f 54 0a  AL.   NO.   NOT.
32560 20 20 20 4e 4f 54 4e 55 4c 4c 0a 20 20 20 4e 55     NOTNULL.   NU
32570 4c 4c 0a 20 20 20 4f 46 0a 20 20 20 4f 46 46 53  LL.   OF.   OFFS
32580 45 54 0a 20 20 20 4f 4e 0a 20 20 20 4f 52 0a 20  ET.   ON.   OR. 
32590 20 20 4f 52 44 45 52 0a 20 20 20 4f 55 54 45 52    ORDER.   OUTER
325a0 0a 20 20 20 50 4c 41 4e 0a 20 20 20 50 52 41 47  .   PLAN.   PRAG
325b0 4d 41 0a 20 20 20 50 52 49 4d 41 52 59 0a 20 20  MA.   PRIMARY.  
325c0 20 51 55 45 52 59 0a 20 20 20 52 41 49 53 45 0a   QUERY.   RAISE.
325d0 20 20 20 52 45 43 55 52 53 49 56 45 0a 20 20 20     RECURSIVE.   
325e0 52 45 46 45 52 45 4e 43 45 53 0a 20 20 20 52 45  REFERENCES.   RE
325f0 47 45 58 50 0a 20 20 20 52 45 49 4e 44 45 58 0a  GEXP.   REINDEX.
32600 20 20 20 52 45 4c 45 41 53 45 0a 20 20 20 52 45     RELEASE.   RE
32610 4e 41 4d 45 0a 20 20 20 52 45 50 4c 41 43 45 0a  NAME.   REPLACE.
32620 20 20 20 52 45 53 54 52 49 43 54 0a 20 20 20 52     RESTRICT.   R
32630 49 47 48 54 0a 20 20 20 52 4f 4c 4c 42 41 43 4b  IGHT.   ROLLBACK
32640 0a 20 20 20 52 4f 57 0a 20 20 20 53 41 56 45 50  .   ROW.   SAVEP
32650 4f 49 4e 54 0a 20 20 20 53 45 4c 45 43 54 0a 20  OINT.   SELECT. 
32660 20 20 53 45 54 0a 20 20 20 54 41 42 4c 45 0a 20    SET.   TABLE. 
32670 20 20 54 45 4d 50 0a 20 20 20 54 45 4d 50 4f 52    TEMP.   TEMPOR
32680 41 52 59 0a 20 20 20 54 48 45 4e 0a 20 20 20 54  ARY.   THEN.   T
32690 4f 0a 20 20 20 54 52 41 4e 53 41 43 54 49 4f 4e  O.   TRANSACTION
326a0 0a 20 20 20 54 52 49 47 47 45 52 0a 20 20 20 55  .   TRIGGER.   U
326b0 4e 49 4f 4e 0a 20 20 20 55 4e 49 51 55 45 0a 20  NION.   UNIQUE. 
326c0 20 20 55 50 44 41 54 45 0a 20 20 20 55 53 49 4e    UPDATE.   USIN
326d0 47 0a 20 20 20 56 41 43 55 55 4d 0a 20 20 20 56  G.   VACUUM.   V
326e0 41 4c 55 45 53 0a 20 20 20 56 49 45 57 0a 20 20  ALUES.   VIEW.  
326f0 20 56 49 52 54 55 41 4c 0a 20 20 20 57 49 54 48   VIRTUAL.   WITH
32700 0a 20 20 20 57 49 54 48 4f 55 54 0a 20 20 20 57  .   WITHOUT.   W
32710 48 45 4e 0a 20 20 20 57 48 45 52 45 0a 7d 5d 0a  HEN.   WHERE.}].
32720 0a 68 64 5f 70 75 74 73 20 7b 3c 44 49 56 20 63  .hd_puts {<DIV c
32730 6c 61 73 73 3d 22 70 64 66 5f 73 65 63 74 69 6f  lass="pdf_sectio
32740 6e 22 3e 7d 0a 53 65 63 74 69 6f 6e 20 7b 53 51  n">}.Section {SQ
32750 4c 69 74 65 20 4b 65 79 77 6f 72 64 73 7d 20 6b  Lite Keywords} k
32760 65 79 77 6f 72 64 73 20 7b 7b 2a 53 51 4c 20 6b  eywords {{*SQL k
32770 65 79 77 6f 72 64 7d 20 7b 53 51 4c 20 6b 65 79  eyword} {SQL key
32780 77 6f 72 64 73 7d 7d 0a 68 64 5f 70 75 74 73 20  words}}.hd_puts 
32790 7b 3c 2f 44 49 56 3e 7d 0a 3c 2f 74 63 6c 3e 0a  {</DIV>}.</tcl>.
327a0 0a 3c 70 3e 54 68 65 20 53 51 4c 20 73 74 61 6e  .<p>The SQL stan
327b0 64 61 72 64 20 73 70 65 63 69 66 69 65 73 20 61  dard specifies a
327c0 20 68 75 67 65 20 6e 75 6d 62 65 72 20 6f 66 20   huge number of 
327d0 6b 65 79 77 6f 72 64 73 20 77 68 69 63 68 20 6d  keywords which m
327e0 61 79 20 6e 6f 74 0a 62 65 20 75 73 65 64 20 61  ay not.be used a
327f0 73 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74  s the names of t
32800 61 62 6c 65 73 2c 20 69 6e 64 69 63 65 73 2c 20  ables, indices, 
32810 63 6f 6c 75 6d 6e 73 2c 20 64 61 74 61 62 61 73  columns, databas
32820 65 73 2c 20 75 73 65 72 2d 64 65 66 69 6e 65 64  es, user-defined
32830 0a 66 75 6e 63 74 69 6f 6e 73 2c 20 63 6f 6c 6c  .functions, coll
32840 61 74 69 6f 6e 73 2c 20 76 69 72 74 75 61 6c 20  ations, virtual 
32850 74 61 62 6c 65 20 6d 6f 64 75 6c 65 73 2c 20 6f  table modules, o
32860 72 20 61 6e 79 20 6f 74 68 65 72 20 6e 61 6d 65  r any other name
32870 64 20 6f 62 6a 65 63 74 2e 0a 54 68 65 20 6c 69  d object..The li
32880 73 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 69  st of keywords i
32890 73 20 73 6f 20 6c 6f 6e 67 20 74 68 61 74 20 66  s so long that f
328a0 65 77 20 70 65 6f 70 6c 65 20 63 61 6e 20 72 65  ew people can re
328b0 6d 65 6d 62 65 72 20 74 68 65 6d 20 61 6c 6c 2e  member them all.
328c0 0a 46 6f 72 20 6d 6f 73 74 20 53 51 4c 20 63 6f  .For most SQL co
328d0 64 65 2c 20 79 6f 75 72 20 73 61 66 65 73 74 20  de, your safest 
328e0 62 65 74 20 69 73 20 74 6f 20 6e 65 76 65 72 20  bet is to never 
328f0 75 73 65 20 61 6e 79 20 45 6e 67 6c 69 73 68 20  use any English 
32900 6c 61 6e 67 75 61 67 65 0a 77 6f 72 64 20 61 73  language.word as
32910 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 75   the name of a u
32920 73 65 72 2d 64 65 66 69 6e 65 64 20 6f 62 6a 65  ser-defined obje
32930 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 79  ct.</p>..<p>If y
32940 6f 75 20 77 61 6e 74 20 74 6f 20 75 73 65 20 61  ou want to use a
32950 20 6b 65 79 77 6f 72 64 20 61 73 20 61 20 6e 61   keyword as a na
32960 6d 65 2c 20 79 6f 75 20 6e 65 65 64 20 74 6f 20  me, you need to 
32970 71 75 6f 74 65 20 69 74 2e 20 20 54 68 65 72 65  quote it.  There
32980 0a 61 72 65 20 66 6f 75 72 20 77 61 79 73 20 6f  .are four ways o
32990 66 20 71 75 6f 74 69 6e 67 20 6b 65 79 77 6f 72  f quoting keywor
329a0 64 73 20 69 6e 20 53 51 4c 69 74 65 3a 3c 2f 70  ds in SQLite:</p
329b0 3e 0a 0a 3c 70 3e 0a 3c 62 6c 6f 63 6b 71 75 6f  >..<p>.<blockquo
329c0 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e  te>.<table>.<tr>
329d0 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
329e0 22 3e 3c 62 3e 27 6b 65 79 77 6f 72 64 27 3c 2f  "><b>'keyword'</
329f0 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68  b></td><td width
32a00 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 09 3c 74 64  ="20"></td>..<td
32a10 3e 5e 41 20 6b 65 79 77 6f 72 64 20 69 6e 20 73  >^A keyword in s
32a20 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 69 73 20  ingle quotes is 
32a30 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  a string literal
32a40 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72  .</td></tr>..<tr
32a50 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
32a60 70 22 3e 3c 62 3e 22 6b 65 79 77 6f 72 64 22 3c  p"><b>"keyword"<
32a70 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64  /b></td><td></td
32a80 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72  >..<td>^A keywor
32a90 64 20 69 6e 20 64 6f 75 62 6c 65 2d 71 75 6f 74  d in double-quot
32aa0 65 73 20 69 73 20 61 6e 20 69 64 65 6e 74 69 66  es is an identif
32ab0 69 65 72 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a  ier.</td></tr>..
32ac0 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
32ad0 22 74 6f 70 22 3e 3c 62 3e 26 23 39 31 3b 6b 65  "top"><b>&#91;ke
32ae0 79 77 6f 72 64 26 23 39 33 3b 3c 2f 62 3e 3c 2f  yword&#93;</b></
32af0 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74  td><td></td>..<t
32b00 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 65 6e 63  d>^A keyword enc
32b10 6c 6f 73 65 64 20 69 6e 20 73 71 75 61 72 65 20  losed in square 
32b20 62 72 61 63 6b 65 74 73 20 69 73 20 0a 20 20 20  brackets is .   
32b30 20 20 20 20 20 61 6e 20 69 64 65 6e 74 69 66 69       an identifi
32b40 65 72 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74  er.  This is not
32b50 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 20 20   standard SQL.  
32b60 54 68 69 73 20 71 75 6f 74 69 6e 67 20 6d 65 63  This quoting mec
32b70 68 61 6e 69 73 6d 0a 20 20 20 20 20 20 20 20 69  hanism.        i
32b80 73 20 75 73 65 64 20 62 79 20 4d 53 20 41 63 63  s used by MS Acc
32b90 65 73 73 20 61 6e 64 20 53 51 4c 20 53 65 72 76  ess and SQL Serv
32ba0 65 72 20 61 6e 64 20 69 73 20 69 6e 63 6c 75 64  er and is includ
32bb0 65 64 20 69 6e 20 53 51 4c 69 74 65 20 66 6f 72  ed in SQLite for
32bc0 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 61 74 69  .        compati
32bd0 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72  bility.</td></tr
32be0 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69  >..<tr>.<td vali
32bf0 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26 23 39 36  gn="top"><b>&#96
32c00 3b 6b 65 79 77 6f 72 64 26 23 39 36 3b 3c 2f 62  ;keyword&#96;</b
32c10 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a  ></td><td></td>.
32c20 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20  .<td>^A keyword 
32c30 65 6e 63 6c 6f 73 65 64 20 69 6e 20 67 72 61 76  enclosed in grav
32c40 65 20 61 63 63 65 6e 74 73 20 28 41 53 43 49 49  e accents (ASCII
32c50 20 63 6f 64 65 20 39 36 29 20 69 73 20 0a 20 20   code 96) is .  
32c60 20 20 20 20 20 20 61 6e 20 69 64 65 6e 74 69 66        an identif
32c70 69 65 72 2e 20 20 54 68 69 73 20 69 73 20 6e 6f  ier.  This is no
32c80 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 20  t standard SQL. 
32c90 20 54 68 69 73 20 71 75 6f 74 69 6e 67 20 6d 65   This quoting me
32ca0 63 68 61 6e 69 73 6d 0a 20 20 20 20 20 20 20 20  chanism.        
32cb0 69 73 20 75 73 65 64 20 62 79 20 4d 79 53 51 4c  is used by MySQL
32cc0 20 61 6e 64 20 69 73 20 69 6e 63 6c 75 64 65 64   and is included
32cd0 20 69 6e 20 53 51 4c 69 74 65 20 66 6f 72 0a 20   in SQLite for. 
32ce0 20 20 20 20 20 20 20 63 6f 6d 70 61 74 69 62 69         compatibi
32cf0 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a  lity.</td></tr>.
32d00 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b  </table>.</block
32d10 71 75 6f 74 65 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  quote>.</p>..<p>
32d20 46 6f 72 20 72 65 73 69 6c 69 65 6e 63 65 20 77  For resilience w
32d30 68 65 6e 20 63 6f 6e 66 72 6f 6e 74 65 64 20 77  hen confronted w
32d40 69 74 68 20 68 69 73 74 6f 72 69 63 61 6c 20 53  ith historical S
32d50 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 53  QL statements, S
32d60 51 4c 69 74 65 0a 77 69 6c 6c 20 73 6f 6d 65 74  QLite.will somet
32d70 69 6d 65 73 20 62 65 6e 64 20 74 68 65 20 71 75  imes bend the qu
32d80 6f 74 69 6e 67 20 72 75 6c 65 73 20 61 62 6f 76  oting rules abov
32d90 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69  e:</p>..<ul>.<li
32da0 3e 3c 70 3e 5e 49 66 20 61 20 6b 65 79 77 6f 72  ><p>^If a keywor
32db0 64 20 69 6e 20 73 69 6e 67 6c 65 0a 71 75 6f 74  d in single.quot
32dc0 65 73 20 28 65 78 3a 20 3c 62 3e 27 6b 65 79 27  es (ex: <b>'key'
32dd0 3c 2f 62 3e 20 6f 72 20 3c 62 3e 27 67 6c 6f 62  </b> or <b>'glob
32de0 27 3c 2f 62 3e 29 20 69 73 20 75 73 65 64 20 69  '</b>) is used i
32df0 6e 20 61 20 63 6f 6e 74 65 78 74 20 77 68 65 72  n a context wher
32e00 65 0a 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  e.an identifier 
32e10 69 73 20 61 6c 6c 6f 77 65 64 20 62 75 74 20 77  is allowed but w
32e20 68 65 72 65 20 61 20 73 74 72 69 6e 67 20 6c 69  here a string li
32e30 74 65 72 61 6c 20 69 73 20 6e 6f 74 20 61 6c 6c  teral is not all
32e40 6f 77 65 64 2c 20 74 68 65 6e 0a 74 68 65 20 74  owed, then.the t
32e50 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72 73 74 6f  oken is understo
32e60 6f 64 20 74 6f 20 62 65 20 61 6e 20 69 64 65 6e  od to be an iden
32e70 74 69 66 69 65 72 20 69 6e 73 74 65 61 64 20 6f  tifier instead o
32e80 66 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72  f a string liter
32e90 61 6c 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c  al..</p></li>..<
32ea0 6c 69 3e 3c 70 3e 5e 49 66 20 61 20 6b 65 79 77  li><p>^If a keyw
32eb0 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65 0a 71 75  ord in double.qu
32ec0 6f 74 65 73 20 28 65 78 3a 20 3c 62 3e 22 6b 65  otes (ex: <b>"ke
32ed0 79 22 3c 2f 62 3e 20 6f 72 20 3c 62 3e 22 67 6c  y"</b> or <b>"gl
32ee0 6f 62 22 3c 2f 62 3e 29 20 69 73 20 75 73 65 64  ob"</b>) is used
32ef0 20 69 6e 20 61 20 63 6f 6e 74 65 78 74 20 77 68   in a context wh
32f00 65 72 65 0a 69 74 20 63 61 6e 6e 6f 74 20 62 65  ere.it cannot be
32f10 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 61 6e 20   resolved to an 
32f20 69 64 65 6e 74 69 66 69 65 72 20 62 75 74 20 77  identifier but w
32f30 68 65 72 65 20 61 20 73 74 72 69 6e 67 20 6c 69  here a string li
32f40 74 65 72 61 6c 0a 69 73 20 61 6c 6c 6f 77 65 64  teral.is allowed
32f50 2c 20 74 68 65 6e 20 74 68 65 20 74 6f 6b 65 6e  , then the token
32f60 20 69 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 74   is understood t
32f70 6f 20 62 65 20 61 20 73 74 72 69 6e 67 20 6c 69  o be a string li
32f80 74 65 72 61 6c 20 69 6e 73 74 65 61 64 0a 6f 66  teral instead.of
32f90 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 3c   an identifier.<
32fa0 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a  /p></li>.</ul>..
32fb0 3c 70 3e 50 72 6f 67 72 61 6d 6d 65 72 73 20 61  <p>Programmers a
32fc0 72 65 20 63 61 75 74 69 6f 6e 65 64 20 6e 6f 74  re cautioned not
32fd0 20 74 6f 20 75 73 65 20 74 68 65 20 74 77 6f 20   to use the two 
32fe0 65 78 63 65 70 74 69 6f 6e 73 20 64 65 73 63 72  exceptions descr
32ff0 69 62 65 64 20 69 6e 0a 74 68 65 20 70 72 65 76  ibed in.the prev
33000 69 6f 75 73 20 62 75 6c 6c 65 74 73 2e 20 20 57  ious bullets.  W
33010 65 20 65 6d 70 68 61 73 69 7a 65 20 74 68 61 74  e emphasize that
33020 20 74 68 65 79 20 65 78 69 73 74 20 6f 6e 6c 79   they exist only
33030 20 73 6f 20 74 68 61 74 20 6f 6c 64 0a 61 6e 64   so that old.and
33040 20 69 6c 6c 2d 66 6f 72 6d 65 64 20 53 51 4c 20   ill-formed SQL 
33050 73 74 61 74 65 6d 65 6e 74 73 20 77 69 6c 6c 20  statements will 
33060 72 75 6e 20 63 6f 72 72 65 63 74 6c 79 2e 20 20  run correctly.  
33070 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20  Future versions 
33080 6f 66 0a 53 51 4c 69 74 65 20 6d 69 67 68 74 20  of.SQLite might 
33090 72 61 69 73 65 20 65 72 72 6f 72 73 20 69 6e 73  raise errors ins
330a0 74 65 61 64 20 6f 66 20 61 63 63 65 70 74 69 6e  tead of acceptin
330b0 67 20 74 68 65 20 6d 61 6c 66 6f 72 6d 65 64 0a  g the malformed.
330c0 73 74 61 74 65 6d 65 6e 74 73 20 63 6f 76 65 72  statements cover
330d0 65 64 20 62 79 20 74 68 65 20 65 78 63 65 70 74  ed by the except
330e0 69 6f 6e 73 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a  ions above.</p>.
330f0 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 61 64 64 73  .<p>.SQLite adds
33100 20 6e 65 77 20 6b 65 79 77 6f 72 64 73 20 66 72   new keywords fr
33110 6f 6d 20 74 69 6d 65 20 74 6f 20 74 69 6d 65 20  om time to time 
33120 77 68 65 6e 20 69 74 20 74 61 6b 65 73 20 6f 6e  when it takes on
33130 20 6e 65 77 20 66 65 61 74 75 72 65 73 2e 0a 53   new features..S
33140 6f 20 74 6f 20 70 72 65 76 65 6e 74 20 79 6f 75  o to prevent you
33150 72 20 63 6f 64 65 20 66 72 6f 6d 20 62 65 69 6e  r code from bein
33160 67 20 62 72 6f 6b 65 6e 20 62 79 20 66 75 74 75  g broken by futu
33170 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 2c  re enhancements,
33180 20 79 6f 75 20 73 68 6f 75 6c 64 0a 6e 6f 72 6d   you should.norm
33190 61 6c 6c 79 20 71 75 6f 74 65 20 61 6e 79 20 69  ally quote any i
331a0 64 65 6e 74 69 66 69 65 72 20 74 68 61 74 20 69  dentifier that i
331b0 73 20 61 6e 20 45 6e 67 6c 69 73 68 20 6c 61 6e  s an English lan
331c0 67 75 61 67 65 20 77 6f 72 64 2c 20 65 76 65 6e  guage word, even
331d0 20 69 66 0a 79 6f 75 20 64 6f 20 6e 6f 74 20 68   if.you do not h
331e0 61 76 65 20 74 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70  ave to..</p>..<p
331f0 3e 0a 54 68 65 20 6c 69 73 74 20 62 65 6c 6f 77  >.The list below
33200 20 73 68 6f 77 73 20 61 6c 6c 20 70 6f 73 73 69   shows all possi
33210 62 6c 65 20 6b 65 79 77 6f 72 64 73 20 75 73 65  ble keywords use
33220 64 20 62 79 20 61 6e 79 20 62 75 69 6c 64 20 6f  d by any build o
33230 66 0a 53 51 4c 69 74 65 20 72 65 67 61 72 64 6c  f.SQLite regardl
33240 65 73 73 20 6f 66 20 5b 63 6f 6d 70 69 6c 65 2d  ess of [compile-
33250 74 69 6d 65 20 6f 70 74 69 6f 6e 73 5d 2e 20 20  time options].  
33260 0a 4d 6f 73 74 20 72 65 61 73 6f 6e 61 62 6c 65  .Most reasonable
33270 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20   configurations 
33280 75 73 65 20 6d 6f 73 74 20 6f 72 20 61 6c 6c 20  use most or all 
33290 6f 66 20 74 68 65 73 65 20 6b 65 79 77 6f 72 64  of these keyword
332a0 73 2c 0a 62 75 74 20 73 6f 6d 65 20 6b 65 79 77  s,.but some keyw
332b0 6f 72 64 73 20 6d 61 79 20 62 65 20 6f 6d 69 74  ords may be omit
332c0 74 65 64 20 77 68 65 6e 20 53 51 4c 20 6c 61 6e  ted when SQL lan
332d0 67 75 61 67 65 20 66 65 61 74 75 72 65 73 20 61  guage features a
332e0 72 65 0a 64 69 73 61 62 6c 65 64 2e 0a 5e 28 52  re.disabled..^(R
332f0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65  egardless of the
33300 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f   compile-time co
33310 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 61 6e 79  nfiguration, any
33320 20 69 64 65 6e 74 69 66 69 65 72 20 74 68 61 74   identifier that
33330 20 69 73 20 6e 6f 74 20 6f 6e 0a 74 68 65 20 66   is not on.the f
33340 6f 6c 6c 6f 77 69 6e 67 20 3c 74 63 6c 3e 68 64  ollowing <tcl>hd
33350 5f 70 75 74 73 20 5b 6c 6c 65 6e 67 74 68 20 24  _puts [llength $
33360 6b 65 79 77 6f 72 64 5f 6c 69 73 74 5d 3c 2f 74  keyword_list]</t
33370 63 6c 3e 20 65 6c 65 6d 65 6e 74 0a 6c 69 73 74  cl> element.list
33380 20 69 73 20 6e 6f 74 20 61 20 6b 65 79 77 6f 72   is not a keywor
33390 64 20 74 6f 20 74 68 65 20 53 51 4c 20 70 61 72  d to the SQL par
333a0 73 65 72 20 69 6e 20 53 51 4c 69 74 65 3a 0a 3c  ser in SQLite:.<
333b0 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 73 65 74 20 6c  /p>..<tcl>.set l
333c0 78 20 7b 7d 0a 66 6f 72 65 61 63 68 20 77 6f 72  x {}.foreach wor
333d0 64 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20  d $keyword_list 
333e0 7b 0a 20 20 6c 61 70 70 65 6e 64 20 6c 78 20 5b  {.  lappend lx [
333f0 6c 69 73 74 20 7b 7d 20 24 77 6f 72 64 20 30 5d  list {} $word 0]
33400 0a 7d 0a 68 64 5f 6c 69 73 74 5f 6f 66 5f 6c 69  .}.hd_list_of_li
33410 6e 6b 73 20 7b 7d 20 32 30 30 20 24 6c 78 0a 3c  nks {} 200 $lx.<
33420 2f 74 63 6c 3e 0a 3c 62 6c 6f 63 6b 71 75 6f 74  /tcl>.<blockquot
33430 65 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d  e>.<table width=
33440 22 31 30 30 25 22 3e 3c 74 72 3e 0a 3c 74 64 20  "100%"><tr>.<td 
33450 61 6c 69 67 6e 3d 22 6c 65 66 74 22 20 76 61 6c  align="left" val
33460 69 67 6e 3d 22 74 6f 70 22 20 77 69 64 74 68 3d  ign="top" width=
33470 22 32 30 25 22 3e 0a 3c 74 63 6c 3e 0a           "20%">.<tcl>.