Documentation Source Text

Hex Artifact Content
Login

Artifact 6ca29159f58c37a8068abacdc1536de30bc15579:


0000: 3c 74 69 74 6c 65 3e 51 75 65 72 79 20 4c 61 6e  <title>Query Lan
0010: 67 75 61 67 65 20 55 6e 64 65 72 73 74 6f 6f 64  guage Understood
0020: 20 62 79 20 53 51 4c 69 74 65 3c 2f 74 69 74 6c   by SQLite</titl
0030: 65 3e 0a 0a 3c 68 31 20 61 6c 69 67 6e 3d 63 65  e>..<h1 align=ce
0040: 6e 74 65 72 3e 53 51 4c 20 41 73 20 55 6e 64 65  nter>SQL As Unde
0050: 72 73 74 6f 6f 64 20 42 79 20 53 51 4c 69 74 65  rstood By SQLite
0060: 3c 2f 68 31 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65  </h1>..<p>SQLite
0070: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 6d 6f 73   understands mos
0080: 74 20 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72  t of the standar
0090: 64 20 53 51 4c 0a 6c 61 6e 67 75 61 67 65 2e 20  d SQL.language. 
00a0: 20 42 75 74 20 69 74 20 64 6f 65 73 20 3c 61 20   But it does <a 
00b0: 68 72 65 66 3d 22 6f 6d 69 74 74 65 64 2e 68 74  href="omitted.ht
00c0: 6d 6c 22 3e 6f 6d 69 74 20 73 6f 6d 65 20 66 65  ml">omit some fe
00d0: 61 74 75 72 65 73 3c 2f 61 3e 0a 77 68 69 6c 65  atures</a>.while
00e0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
00f0: 65 0a 61 64 64 69 6e 67 20 61 20 66 65 77 20 66  e.adding a few f
0100: 65 61 74 75 72 65 73 20 6f 66 20 69 74 73 20 6f  eatures of its o
0110: 77 6e 2e 20 20 54 68 69 73 20 64 6f 63 75 6d 65  wn.  This docume
0120: 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 0a 64  nt attempts to.d
0130: 65 73 63 72 69 62 65 20 70 72 65 63 69 73 65 6c  escribe precisel
0140: 79 20 77 68 61 74 20 70 61 72 74 73 20 6f 66 20  y what parts of 
0150: 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
0160: 20 53 51 4c 69 74 65 20 64 6f 65 73 0a 61 6e 64   SQLite does.and
0170: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
0180: 74 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 5b 53  t.  A list of [S
0190: 51 4c 20 6b 65 79 77 6f 72 64 73 5d 20 69 73 20  QL keywords] is 
01a0: 0a 61 6c 73 6f 20 70 72 6f 76 69 64 65 64 2e 20  .also provided. 
01b0: 20 54 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   The SQL languag
01c0: 65 20 73 79 6e 74 61 78 20 69 73 20 64 65 73 63  e syntax is desc
01d0: 72 69 62 65 64 20 62 79 0a 5b 73 79 6e 74 61 78  ribed by.[syntax
01e0: 20 64 69 61 67 72 61 6d 73 5d 2e 0a 0a 3c 70 3e   diagrams]...<p>
01f0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  The following sy
0200: 6e 74 61 78 20 64 6f 63 75 6d 65 6e 74 61 74 69  ntax documentati
0210: 6f 6e 20 74 6f 70 69 63 73 20 61 72 65 20 61 76  on topics are av
0220: 61 69 6c 61 62 6c 65 3a 3c 2f 70 3e 0a 0a 3c 74  ailable:</p>..<t
0230: 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25  able width="100%
0240: 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35  " cellpadding="5
0250: 22 20 62 6f 72 64 65 72 3d 22 30 22 3e 0a 3c 74  " border="0">.<t
0260: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
0270: 70 22 3e 3c 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 20  p"><ul>..<tcl>. 
0280: 20 73 65 74 20 69 20 30 0a 20 20 73 65 74 20 6c   set i 0.  set l
0290: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
02a0: 20 7b 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20   {.    {{CREATE 
02b0: 54 41 42 4c 45 7d 20 63 72 65 61 74 65 74 61 62  TABLE} createtab
02c0: 6c 65 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45  le}.    {{CREATE
02d0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20   VIRTUAL TABLE} 
02e0: 63 72 65 61 74 65 76 74 61 62 7d 0a 20 20 20 20  createvtab}.    
02f0: 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20  {{CREATE INDEX} 
0300: 63 72 65 61 74 65 69 6e 64 65 78 7d 0a 20 20 20  createindex}.   
0310: 20 7b 56 41 43 55 55 4d 20 76 61 63 75 75 6d 7d   {VACUUM vacuum}
0320: 0a 20 20 20 20 7b 7b 44 52 4f 50 20 54 41 42 4c  .    {{DROP TABL
0330: 45 7d 20 64 72 6f 70 74 61 62 6c 65 7d 0a 20 20  E} droptable}.  
0340: 20 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20    {{DROP INDEX} 
0350: 64 72 6f 70 69 6e 64 65 78 7d 0a 20 20 20 20 7b  dropindex}.    {
0360: 49 4e 53 45 52 54 20 69 6e 73 65 72 74 7d 0a 20  INSERT insert}. 
0370: 20 20 20 7b 52 45 50 4c 41 43 45 20 72 65 70 6c     {REPLACE repl
0380: 61 63 65 7d 0a 20 20 20 20 7b 44 45 4c 45 54 45  ace}.    {DELETE
0390: 20 64 65 6c 65 74 65 7d 0a 20 20 20 20 7b 55 50   delete}.    {UP
03a0: 44 41 54 45 20 75 70 64 61 74 65 7d 0a 20 20 20  DATE update}.   
03b0: 20 7b 53 45 4c 45 43 54 20 73 65 6c 65 63 74 7d   {SELECT select}
03c0: 0a 20 20 20 20 7b 7b 57 49 54 48 20 63 6c 61 75  .    {{WITH clau
03d0: 73 65 7d 20 77 69 74 68 63 6c 61 75 73 65 7d 0a  se} withclause}.
03e0: 20 20 20 20 7b 63 6f 6d 6d 65 6e 74 20 63 6f 6d      {comment com
03f0: 6d 65 6e 74 7d 0a 20 20 20 20 7b 45 58 50 4c 41  ment}.    {EXPLA
0400: 49 4e 20 65 78 70 6c 61 69 6e 7d 0a 20 20 20 20  IN explain}.    
0410: 7b 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72  {expression expr
0420: 7d 0a 20 20 20 20 7b 7b 42 45 47 49 4e 20 54 52  }.    {{BEGIN TR
0430: 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73  ANSACTION} trans
0440: 61 63 74 69 6f 6e 7d 0a 20 20 20 20 7b 7b 43 4f  action}.    {{CO
0450: 4d 4d 49 54 20 54 52 41 4e 53 41 43 54 49 4f 4e  MMIT TRANSACTION
0460: 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 43 4f  } transaction CO
0470: 4d 4d 49 54 7d 0a 20 20 20 20 7b 7b 45 4e 44 20  MMIT}.    {{END 
0480: 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61  TRANSACTION} tra
0490: 6e 73 61 63 74 69 6f 6e 20 43 4f 4d 4d 49 54 7d  nsaction COMMIT}
04a0: 0a 20 20 20 20 7b 7b 52 4f 4c 4c 42 41 43 4b 20  .    {{ROLLBACK 
04b0: 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61  TRANSACTION} tra
04c0: 6e 73 61 63 74 69 6f 6e 20 52 4f 4c 4c 42 41 43  nsaction ROLLBAC
04d0: 4b 7d 0a 20 20 20 20 7b 53 41 56 45 50 4f 49 4e  K}.    {SAVEPOIN
04e0: 54 20 73 61 76 65 70 6f 69 6e 74 7d 0a 20 20 20  T savepoint}.   
04f0: 20 7b 7b 52 45 4c 45 41 53 45 20 53 41 56 45 50   {{RELEASE SAVEP
0500: 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74 20  OINT} savepoint 
0510: 53 41 56 45 50 4f 49 4e 54 7d 0a 20 20 20 20 7b  SAVEPOINT}.    {
0520: 50 52 41 47 4d 41 20 70 72 61 67 6d 61 2e 68 74  PRAGMA pragma.ht
0530: 6d 6c 7d 0a 20 20 20 20 7b 7b 4f 4e 20 43 4f 4e  ml}.    {{ON CON
0540: 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63 6f  FLICT clause} co
0550: 6e 66 6c 69 63 74 7d 0a 20 20 20 20 7b 7b 43 52  nflict}.    {{CR
0560: 45 41 54 45 20 56 49 45 57 7d 20 63 72 65 61 74  EATE VIEW} creat
0570: 65 76 69 65 77 7d 0a 20 20 20 20 7b 7b 44 52 4f  eview}.    {{DRO
0580: 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65 77  P VIEW} dropview
0590: 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20 54  }.    {{CREATE T
05a0: 52 49 47 47 45 52 7d 20 63 72 65 61 74 65 74 72  RIGGER} createtr
05b0: 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 44 52 4f  igger}.    {{DRO
05c0: 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70 74  P TRIGGER} dropt
05d0: 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 41 54  rigger}.    {{AT
05e0: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 61  TACH DATABASE} a
05f0: 74 74 61 63 68 7d 0a 20 20 20 20 7b 7b 44 45 54  ttach}.    {{DET
0600: 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64 65  ACH DATABASE} de
0610: 74 61 63 68 7d 0a 20 20 20 20 20 20 7b 52 45 49  tach}.      {REI
0620: 4e 44 45 58 20 72 65 69 6e 64 65 78 7d 0a 20 20  NDEX reindex}.  
0630: 20 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d    {{ALTER TABLE}
0640: 20 61 6c 74 65 72 74 61 62 6c 65 7d 0a 20 20 20   altertable}.   
0650: 20 7b 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c   {{ANALYZE} anal
0660: 79 7a 65 7d 0a 20 20 20 20 7b 7b 49 4e 44 45 58  yze}.    {{INDEX
0670: 45 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79  ED BY} indexedby
0680: 7d 0a 20 20 20 20 7b 7b 61 67 67 72 65 67 61 74  }.    {{aggregat
0690: 65 20 66 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67  e functions} agg
06a0: 66 75 6e 63 20 61 67 67 66 75 6e 63 7d 0a 20 20  func aggfunc}.  
06b0: 20 20 7b 7b 63 6f 72 65 20 66 75 6e 63 74 69 6f    {{core functio
06c0: 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 63 6f 72  ns} corefunc cor
06d0: 65 66 75 6e 63 7d 0a 20 20 20 20 7b 7b 64 61 74  efunc}.    {{dat
06e0: 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
06f0: 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20 64  ions} datefunc d
0700: 61 74 65 66 75 6e 63 7d 0a 20 20 20 20 7b 6b 65  atefunc}.    {ke
0710: 79 77 6f 72 64 73 20 6b 65 79 77 6f 72 64 73 20  ywords keywords 
0720: 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a  {SQL keywords}}.
0730: 20 20 7d 0a 20 20 73 65 74 20 6c 78 20 7b 7d 0a    }.  set lx {}.
0740: 20 20 66 6f 72 65 61 63 68 20 7b 73 65 63 74 69    foreach {secti
0750: 6f 6e 7d 20 5b 6c 73 6f 72 74 20 2d 69 6e 64 65  on} [lsort -inde
0760: 78 20 30 20 2d 64 69 63 74 69 6f 6e 61 72 79 20  x 0 -dictionary 
0770: 24 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69  $lang_section_li
0780: 73 74 5d 20 7b 0a 20 20 20 20 66 6f 72 65 61 63  st] {.    foreac
0790: 68 20 7b 73 5f 74 69 74 6c 65 20 73 5f 74 61 67  h {s_title s_tag
07a0: 20 73 5f 6b 77 7d 20 24 73 65 63 74 69 6f 6e 20   s_kw} $section 
07b0: 7b 7d 0a 20 20 20 20 69 66 20 7b 24 73 5f 6b 77  {}.    if {$s_kw
07c0: 20 3d 3d 20 22 22 7d 20 7b 0a 20 20 20 20 20 20   == ""} {.      
07d0: 73 65 74 20 73 5f 6b 77 20 24 73 5f 74 69 74 6c  set s_kw $s_titl
07e0: 65 0a 20 20 20 20 7d 0a 20 20 20 20 6c 61 70 70  e.    }.    lapp
07f0: 65 6e 64 20 6c 78 20 5b 6c 69 73 74 20 24 73 5f  end lx [list $s_
0800: 6b 77 20 24 73 5f 74 69 74 6c 65 20 30 5d 0a 20  kw $s_title 0]. 
0810: 20 7d 0a 20 20 68 64 5f 6c 69 73 74 5f 6f 66 5f   }.  hd_list_of_
0820: 6c 69 6e 6b 73 20 7b 7d 20 33 34 30 20 24 6c 78  links {} 340 $lx
0830: 0a 3c 2f 74 63 6c 3e 0a 3c 2f 75 6c 3e 3c 2f 74  .</tcl>.</ul></t
0840: 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a  d></tr></table>.
0850: 0a 3c 70 3e 5e 54 68 65 20 72 6f 75 74 69 6e 65  .<p>^The routine
0860: 73 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  s [sqlite3_prepa
0870: 72 65 5f 76 32 28 29 5d 2c 20 5b 73 71 6c 69 74  re_v2()], [sqlit
0880: 65 33 5f 70 72 65 70 61 72 65 28 29 5d 2c 0a 5b  e3_prepare()],.[
0890: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31  sqlite3_prepare1
08a0: 36 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 70  6()], [sqlite3_p
08b0: 72 65 70 61 72 65 31 36 5f 76 32 28 29 5d 2c 20  repare16_v2()], 
08c0: 0a 5b 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29  .[sqlite3_exec()
08d0: 5d 2c 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f  ], and [sqlite3_
08e0: 67 65 74 5f 74 61 62 6c 65 28 29 5d 20 61 63 63  get_table()] acc
08f0: 65 70 74 0a 61 6e 20 53 51 4c 20 73 74 61 74 65  ept.an SQL state
0900: 6d 65 6e 74 20 6c 69 73 74 20 28 73 71 6c 2d 73  ment list (sql-s
0910: 74 6d 74 2d 6c 69 73 74 29 20 77 68 69 63 68 20  tmt-list) which 
0920: 69 73 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 2d 73  is a semicolon-s
0930: 65 70 61 72 61 74 65 64 0a 6c 69 73 74 20 6f 66  eparated.list of
0940: 20 73 74 61 74 65 6d 65 6e 74 73 2e 3c 2f 70 3e   statements.</p>
0950: 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61  ..<tcl>BubbleDia
0960: 67 72 61 6d 20 73 71 6c 2d 73 74 6d 74 2d 6c 69  gram sql-stmt-li
0970: 73 74 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 45 61 63  st</tcl>..<p>Eac
0980: 68 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  h SQL statement 
0990: 69 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  in the statement
09a0: 20 6c 69 73 74 20 69 73 20 61 6e 20 69 6e 73 74   list is an inst
09b0: 61 6e 63 65 20 6f 66 20 74 68 65 0a 66 6f 6c 6c  ance of the.foll
09c0: 6f 77 69 6e 67 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c  owing:</p>..<tcl
09d0: 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73  >BubbleDiagram s
09e0: 71 6c 2d 73 74 6d 74 3c 2f 74 63 6c 3e 0a 0a 3c  ql-stmt</tcl>..<
09f0: 74 63 6c 3e 0a 70 72 6f 63 20 4f 70 65 72 61 74  tcl>.proc Operat
0a00: 6f 72 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65  or {name} {.  re
0a10: 74 75 72 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f  turn "<font colo
0a20: 72 3d 5c 22 23 32 63 32 63 66 30 5c 22 3e 3c 62  r=\"#2c2cf0\"><b
0a30: 69 67 3e 24 6e 61 6d 65 3c 2f 62 69 67 3e 3c 2f  ig>$name</big></
0a40: 66 6f 6e 74 3e 22 0a 7d 0a 70 72 6f 63 20 4e 6f  font>".}.proc No
0a50: 6e 74 65 72 6d 69 6e 61 6c 20 7b 6e 61 6d 65 7d  nterminal {name}
0a60: 20 7b 0a 20 20 72 65 74 75 72 6e 20 22 3c 69 3e   {.  return "<i>
0a70: 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 66  <font color=\"#f
0a80: 66 33 34 33 34 5c 22 3e 24 6e 61 6d 65 3c 2f 66  f3434\">$name</f
0a90: 6f 6e 74 3e 3c 2f 69 3e 22 0a 7d 0a 70 72 6f 63  ont></i>".}.proc
0aa0: 20 4b 65 79 77 6f 72 64 20 7b 6e 61 6d 65 7d 20   Keyword {name} 
0ab0: 7b 0a 20 20 72 65 74 75 72 6e 20 22 3c 66 6f 6e  {.  return "<fon
0ac0: 74 20 63 6f 6c 6f 72 3d 5c 22 23 32 63 32 63 66  t color=\"#2c2cf
0ad0: 30 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e  0\">$name</font>
0ae0: 22 0a 7d 0a 70 72 6f 63 20 45 78 61 6d 70 6c 65  ".}.proc Example
0af0: 20 7b 74 65 78 74 7d 20 7b 0a 20 20 68 64 5f 70   {text} {.  hd_p
0b00: 75 74 73 20 22 3c 62 6c 6f 63 6b 71 75 6f 74 65  uts "<blockquote
0b10: 3e 3c 70 72 65 3e 24 74 65 78 74 3c 2f 70 72 65  ><pre>$text</pre
0b20: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 22 0a  ></blockquote>".
0b30: 7d 0a 0a 70 72 6f 63 20 53 65 63 74 69 6f 6e 20  }..proc Section 
0b40: 7b 6e 61 6d 65 20 6c 61 62 65 6c 20 6b 65 79 77  {name label keyw
0b50: 6f 72 64 73 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c  ords} {.  global
0b60: 20 44 4f 43 0a 20 20 68 64 5f 63 6c 6f 73 65 5f   DOC.  hd_close_
0b70: 6d 61 69 6e 0a 20 20 68 64 5f 6f 70 65 6e 5f 6d  main.  hd_open_m
0b80: 61 69 6e 20 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e  ain lang_$label.
0b90: 68 74 6d 6c 0a 20 20 68 64 5f 68 65 61 64 65 72  html.  hd_header
0ba0: 20 22 53 51 4c 69 74 65 20 51 75 65 72 79 20 4c   "SQLite Query L
0bb0: 61 6e 67 75 61 67 65 3a 20 24 6e 61 6d 65 22 20  anguage: $name" 
0bc0: 24 44 4f 43 2f 70 61 67 65 73 2f 6c 61 6e 67 2e  $DOC/pages/lang.
0bd0: 69 6e 0a 20 20 65 76 61 6c 20 68 64 5f 6b 65 79  in.  eval hd_key
0be0: 77 6f 72 64 73 20 24 6b 65 79 77 6f 72 64 73 0a  words $keywords.
0bf0: 20 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 24    if {[lsearch $
0c00: 6b 65 79 77 6f 72 64 73 20 24 6e 61 6d 65 5d 20  keywords $name] 
0c10: 3d 3d 20 2d 31 20 26 26 20 5b 6c 73 65 61 72 63  == -1 && [lsearc
0c20: 68 20 24 6b 65 79 77 6f 72 64 73 20 2a 24 6e 61  h $keywords *$na
0c30: 6d 65 5d 20 3d 3d 20 2d 31 7d 20 7b 0a 20 20 20  me] == -1} {.   
0c40: 20 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64   eval hd_keyword
0c50: 73 20 7b 20 24 6e 61 6d 65 20 7d 0a 20 20 7d 0a  s { $name }.  }.
0c60: 20 20 68 64 5f 70 75 74 73 20 7b 3c 64 69 76 20    hd_puts {<div 
0c70: 63 6c 61 73 73 3d 6e 6f 73 65 61 72 63 68 3e 7d  class=nosearch>}
0c80: 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 68 31 20  .  hd_puts {<h1 
0c90: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 53  align="center">S
0ca0: 51 4c 20 41 73 20 55 6e 64 65 72 73 74 6f 6f 64  QL As Understood
0cb0: 20 42 79 20 53 51 4c 69 74 65 3c 2f 68 31 3e 7d   By SQLite</h1>}
0cc0: 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 70 3e 3c  .  hd_puts {<p><
0cd0: 61 20 68 72 65 66 3d 22 6c 61 6e 67 2e 68 74 6d  a href="lang.htm
0ce0: 6c 22 3e 5b 54 6f 70 5d 3c 2f 61 3e 3c 2f 70 3e  l">[Top]</a></p>
0cf0: 7d 0a 20 20 68 64 5f 70 75 74 73 20 22 3c 68 32  }.  hd_puts "<h2
0d00: 3e 24 6e 61 6d 65 3c 2f 68 32 3e 22 0a 20 20 68  >$name</h2>".  h
0d10: 64 5f 70 75 74 73 20 7b 3c 2f 64 69 76 3e 7d 0a  d_puts {</div>}.
0d20: 7d 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  }..#############
0d30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d70: 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41 4c 54 45  ##.Section {ALTE
0d80: 52 20 54 41 42 4c 45 7d 20 61 6c 74 65 72 74 61  R TABLE} alterta
0d90: 62 6c 65 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c  ble {{ALTER TABL
0da0: 45 7d 20 7b 2a 41 4c 54 45 52 7d 7d 0a 0a 52 65  E} {*ALTER}}..Re
0db0: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
0dc0: 67 72 61 6d 20 61 6c 74 65 72 2d 74 61 62 6c 65  gram alter-table
0dd0: 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
0de0: 3e 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73  >SQLite supports
0df0: 20 61 20 6c 69 6d 69 74 65 64 20 73 75 62 73 65   a limited subse
0e00: 74 20 6f 66 20 41 4c 54 45 52 20 54 41 42 4c 45  t of ALTER TABLE
0e10: 2e 0a 54 68 65 20 41 4c 54 45 52 20 54 41 42 4c  ..The ALTER TABL
0e20: 45 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 53 51 4c  E command in SQL
0e30: 69 74 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 75  ite allows the u
0e40: 73 65 72 20 74 6f 20 72 65 6e 61 6d 65 20 61 20  ser to rename a 
0e50: 74 61 62 6c 65 0a 6f 72 20 74 6f 20 61 64 64 20  table.or to add 
0e60: 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 74 6f 20  a new column to 
0e70: 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c  an existing tabl
0e80: 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 28 54  e..</p>..<p> ^(T
0e90: 68 65 20 52 45 4e 41 4d 45 20 54 4f 20 73 79 6e  he RENAME TO syn
0ea0: 74 61 78 20 63 68 61 6e 67 65 73 20 74 68 65 20  tax changes the 
0eb0: 6e 61 6d 65 20 6f 66 20 3c 79 79 74 65 72 6d 3e  name of <yyterm>
0ec0: 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65  table-name</yyte
0ed0: 72 6d 3e 0a 74 6f 20 3c 79 79 74 65 72 6d 3e 6e  rm>.to <yyterm>n
0ee0: 65 77 2d 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79  ew-table-name</y
0ef0: 79 74 65 72 6d 3e 2e 29 5e 0a 54 68 69 73 20 63  yterm>.)^.This c
0f00: 6f 6d 6d 61 6e 64 20 0a 63 61 6e 6e 6f 74 20 62  ommand .cannot b
0f10: 65 20 75 73 65 64 20 74 6f 20 6d 6f 76 65 20 61  e used to move a
0f20: 20 74 61 62 6c 65 20 62 65 74 77 65 65 6e 20 61   table between a
0f30: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
0f40: 73 2c 20 6f 6e 6c 79 20 74 6f 20 72 65 6e 61 6d  s, only to renam
0f50: 65 20 0a 61 20 74 61 62 6c 65 20 77 69 74 68 69  e .a table withi
0f60: 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  n the same datab
0f70: 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 49  ase.</p>..<p> ^I
0f80: 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  f the table bein
0f90: 67 20 72 65 6e 61 6d 65 64 20 68 61 73 20 74 72  g renamed has tr
0fa0: 69 67 67 65 72 73 20 6f 72 20 69 6e 64 69 63 65  iggers or indice
0fb0: 73 2c 20 74 68 65 6e 20 74 68 65 73 65 20 72 65  s, then these re
0fc0: 6d 61 69 6e 0a 61 74 74 61 63 68 65 64 20 74 6f  main.attached to
0fd0: 20 74 68 65 20 74 61 62 6c 65 20 61 66 74 65 72   the table after
0fe0: 20 69 74 20 68 61 73 20 62 65 65 6e 20 72 65 6e   it has been ren
0ff0: 61 6d 65 64 2e 20 20 5e 48 6f 77 65 76 65 72 2c  amed.  ^However,
1000: 20 69 66 20 74 68 65 72 65 20 61 72 65 0a 61 6e   if there are.an
1010: 79 20 76 69 65 77 20 64 65 66 69 6e 69 74 69 6f  y view definitio
1020: 6e 73 2c 20 6f 72 20 73 74 61 74 65 6d 65 6e 74  ns, or statement
1030: 73 20 65 78 65 63 75 74 65 64 20 62 79 20 74 72  s executed by tr
1040: 69 67 67 65 72 73 20 74 68 61 74 20 72 65 66 65  iggers that refe
1050: 72 20 74 6f 0a 74 68 65 20 74 61 62 6c 65 20 62  r to.the table b
1060: 65 69 6e 67 20 72 65 6e 61 6d 65 64 2c 20 74 68  eing renamed, th
1070: 65 73 65 20 61 72 65 20 6e 6f 74 20 61 75 74 6f  ese are not auto
1080: 6d 61 74 69 63 61 6c 6c 79 20 6d 6f 64 69 66 69  matically modifi
1090: 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e 65  ed to use the ne
10a0: 77 0a 74 61 62 6c 65 20 6e 61 6d 65 2e 20 49 66  w.table name. If
10b0: 20 74 68 69 73 20 69 73 20 72 65 71 75 69 72 65   this is require
10c0: 64 2c 20 74 68 65 20 74 72 69 67 67 65 72 73 20  d, the triggers 
10d0: 6f 72 20 76 69 65 77 20 64 65 66 69 6e 69 74 69  or view definiti
10e0: 6f 6e 73 20 6d 75 73 74 20 62 65 0a 64 72 6f 70  ons must be.drop
10f0: 70 65 64 20 61 6e 64 20 72 65 63 72 65 61 74 65  ped and recreate
1100: 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e 65 77  d to use the new
1110: 20 74 61 62 6c 65 20 6e 61 6d 65 20 62 79 20 68   table name by h
1120: 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  and..</p>..<bloc
1130: 6b 71 75 6f 74 65 3e 3c 74 61 62 6c 65 20 62 6f  kquote><table bo
1140: 72 64 65 72 3d 22 31 22 20 63 65 6c 6c 70 61 64  rder="1" cellpad
1150: 64 69 6e 67 3d 22 31 30 22 3e 0a 3c 74 72 3e 3c  ding="10">.<tr><
1160: 74 64 3e 0a 3c 65 6d 3e 49 6d 70 6f 72 74 61 6e  td>.<em>Importan
1170: 74 20 4e 6f 74 65 3a 3c 2f 65 6d 3e 0a 54 68 65  t Note:</em>.The
1180: 20 27 41 4c 54 45 52 20 54 41 42 4c 45 20 2e 2e   'ALTER TABLE ..
1190: 2e 20 52 45 4e 41 4d 45 20 54 4f 20 2e 2e 2e 27  . RENAME TO ...'
11a0: 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f   command does no
11b0: 74 20 75 70 64 61 74 65 20 61 63 74 69 6f 6e 0a  t update action.
11c0: 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
11d0: 6e 20 74 72 69 67 67 65 72 73 20 6f 72 20 53 45  n triggers or SE
11e0: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
11f0: 77 69 74 68 69 6e 20 76 69 65 77 73 2e 0a 49 66  within views..If
1200: 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
1210: 20 72 65 6e 61 6d 65 64 20 69 73 20 72 65 66 65   renamed is refe
1220: 72 65 6e 63 65 64 20 66 72 6f 6d 20 77 69 74 68  renced from with
1230: 69 6e 20 74 72 69 67 67 65 72 73 20 6f 72 20 76  in triggers or v
1240: 69 65 77 73 2c 0a 74 68 65 6e 20 74 68 6f 73 65  iews,.then those
1250: 20 74 72 69 67 67 65 72 73 20 61 6e 64 20 76 69   triggers and vi
1260: 65 77 73 20 6d 75 73 74 20 62 65 20 64 72 6f 70  ews must be drop
1270: 70 65 64 20 61 6e 64 20 72 65 63 72 65 61 74 65  ped and recreate
1280: 64 20 73 65 70 61 72 61 74 65 6c 79 0a 62 79 20  d separately.by 
1290: 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e  the application.
12a0: 0a 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62  .</td></tr></tab
12b0: 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  le>.</blockquote
12c0: 3e 0a 0a 3c 70 3e 5e 49 66 20 5b 66 6f 72 65 69  >..<p>^If [forei
12d0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
12e0: 74 73 5d 20 61 72 65 20 0a 5b 66 6f 72 65 69 67  ts] are .[foreig
12f0: 6e 5f 6b 65 79 73 20 70 72 61 67 6d 61 20 7c 20  n_keys pragma | 
1300: 65 6e 61 62 6c 65 64 5d 20 77 68 65 6e 20 61 20  enabled] when a 
1310: 74 61 62 6c 65 20 69 73 20 72 65 6e 61 6d 65 64  table is renamed
1320: 2c 20 74 68 65 6e 20 61 6e 79 0a 5b 66 6f 72 65  , then any.[fore
1330: 69 67 6e 2d 6b 65 79 2d 63 6c 61 75 73 65 20 7c  ign-key-clause |
1340: 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
1350: 73 65 73 5d 20 69 6e 20 61 6e 79 20 74 61 62 6c  ses] in any tabl
1360: 65 20 28 65 69 74 68 65 72 20 74 68 65 0a 74 61  e (either the.ta
1370: 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d 65  ble being rename
1380: 64 20 6f 72 20 73 6f 6d 65 20 6f 74 68 65 72 20  d or some other 
1390: 74 61 62 6c 65 29 0a 74 68 61 74 20 72 65 66 65  table).that refe
13a0: 72 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62  r to the table b
13b0: 65 69 6e 67 20 72 65 6e 61 6d 65 64 20 61 72 65  eing renamed are
13c0: 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 72 65 66   modified to ref
13d0: 65 72 20 0a 74 6f 20 74 68 65 20 72 65 6e 61 6d  er .to the renam
13e0: 65 64 20 74 61 62 6c 65 20 62 79 20 69 74 73 20  ed table by its 
13f0: 6e 65 77 20 6e 61 6d 65 2e 0a 0a 3c 70 3e 20 5e  new name...<p> ^
1400: 54 68 65 20 41 44 44 20 43 4f 4c 55 4d 4e 20 73  The ADD COLUMN s
1410: 79 6e 74 61 78 0a 69 73 20 75 73 65 64 20 74 6f  yntax.is used to
1420: 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d   add a new colum
1430: 6e 20 74 6f 20 61 6e 20 65 78 69 73 74 69 6e 67  n to an existing
1440: 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20 6e 65 77   table..^The new
1450: 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6c 77 61 79   column is alway
1460: 73 20 61 70 70 65 6e 64 65 64 20 74 6f 20 74 68  s appended to th
1470: 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 69 73  e end of the lis
1480: 74 20 6f 66 20 65 78 69 73 74 69 6e 67 20 63 6f  t of existing co
1490: 6c 75 6d 6e 73 2e 0a 54 68 65 20 5b 63 6f 6c 75  lumns..The [colu
14a0: 6d 6e 2d 64 65 66 5d 20 72 75 6c 65 20 64 65 66  mn-def] rule def
14b0: 69 6e 65 73 20 74 68 65 20 63 68 61 72 61 63 74  ines the charact
14c0: 65 72 69 73 74 69 63 73 20 6f 66 20 74 68 65 20  eristics of the 
14d0: 6e 65 77 20 63 6f 6c 75 6d 6e 2e 0a 5e 28 54 68  new column..^(Th
14e0: 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 6d 61 79  e new column may
14f0: 20 74 61 6b 65 20 61 6e 79 20 6f 66 20 74 68 65   take any of the
1500: 20 66 6f 72 6d 73 20 70 65 72 6d 69 73 73 69 62   forms permissib
1510: 6c 65 20 69 6e 20 61 20 5b 43 52 45 41 54 45 20  le in a [CREATE 
1520: 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74  TABLE].statement
1530: 2c 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f  , with the follo
1540: 77 69 6e 67 20 72 65 73 74 72 69 63 74 69 6f 6e  wing restriction
1550: 73 3a 29 5e 0a 3c 75 6c 3e 0a 3c 6c 69 3e 5e 54  s:)^.<ul>.<li>^T
1560: 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f  he column may no
1570: 74 20 68 61 76 65 20 61 20 50 52 49 4d 41 52 59  t have a PRIMARY
1580: 20 4b 45 59 20 6f 72 20 55 4e 49 51 55 45 20 63   KEY or UNIQUE c
1590: 6f 6e 73 74 72 61 69 6e 74 2e 3c 2f 6c 69 3e 0a  onstraint.</li>.
15a0: 3c 6c 69 3e 5e 54 68 65 20 63 6f 6c 75 6d 6e 20  <li>^The column 
15b0: 6d 61 79 20 6e 6f 74 20 68 61 76 65 20 61 20 64  may not have a d
15c0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
15d0: 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55  CURRENT_TIME, CU
15e0: 52 52 45 4e 54 5f 44 41 54 45 2c 20 0a 20 20 20  RRENT_DATE, .   
15f0: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
1600: 4d 50 2c 20 6f 72 20 61 6e 20 65 78 70 72 65 73  MP, or an expres
1610: 73 69 6f 6e 20 69 6e 20 70 61 72 65 6e 74 68 65  sion in parenthe
1620: 73 65 73 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 5e 49  ses.</li>.<li>^I
1630: 66 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  f a NOT NULL con
1640: 73 74 72 61 69 6e 74 20 69 73 20 73 70 65 63 69  straint is speci
1650: 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 63  fied, then the c
1660: 6f 6c 75 6d 6e 20 6d 75 73 74 20 68 61 76 65 20  olumn must have 
1670: 61 0a 20 20 20 20 64 65 66 61 75 6c 74 20 76 61  a.    default va
1680: 6c 75 65 20 6f 74 68 65 72 20 74 68 61 6e 20 4e  lue other than N
1690: 55 4c 4c 2e 0a 3c 6c 69 3e 5e 49 66 20 5b 66 6f  ULL..<li>^If [fo
16a0: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
16b0: 61 69 6e 74 73 5d 20 61 72 65 20 5b 66 6f 72 65  aints] are [fore
16c0: 69 67 6e 5f 6b 65 79 73 20 70 72 61 67 6d 61 20  ign_keys pragma 
16d0: 7c 20 65 6e 61 62 6c 65 64 5d 20 61 6e 64 0a 20  | enabled] and. 
16e0: 20 20 20 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68     a column with
16f0: 20 61 20 5b 66 6f 72 65 69 67 6e 2d 6b 65 79 2d   a [foreign-key-
1700: 63 6c 61 75 73 65 20 7c 20 52 45 46 45 52 45 4e  clause | REFEREN
1710: 43 45 53 20 63 6c 61 75 73 65 5d 0a 20 20 20 20  CES clause].    
1720: 69 73 20 61 64 64 65 64 2c 20 74 68 65 20 63 6f  is added, the co
1730: 6c 75 6d 6e 20 6d 75 73 74 20 68 61 76 65 20 61  lumn must have a
1740: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
1750: 66 20 4e 55 4c 4c 2e 0a 3c 2f 75 6c 3e 0a 0a 3c  f NULL..</ul>..<
1760: 70 3e 5e 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61  p>^Note also tha
1770: 74 20 77 68 65 6e 20 61 64 64 69 6e 67 20 61 20  t when adding a 
1780: 5b 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e  [CHECK constrain
1790: 74 5d 2c 20 74 68 65 20 43 48 45 43 4b 20 63 6f  t], the CHECK co
17a0: 6e 73 74 72 61 69 6e 74 0a 69 73 20 6e 6f 74 20  nstraint.is not 
17b0: 74 65 73 74 65 64 20 61 67 61 69 6e 73 74 20 70  tested against p
17c0: 72 65 65 78 69 73 74 69 6e 67 20 72 6f 77 73 20  reexisting rows 
17d0: 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 0a 5e 54  of the table..^T
17e0: 68 69 73 20 63 61 6e 20 72 65 73 75 6c 74 20 69  his can result i
17f0: 6e 20 61 20 74 61 62 6c 65 20 74 68 61 74 20 63  n a table that c
1800: 6f 6e 74 61 69 6e 73 20 64 61 74 61 20 74 68 61  ontains data tha
1810: 74 0a 69 73 20 69 6e 20 76 69 6f 6c 61 74 69 6f  t.is in violatio
1820: 6e 20 6f 66 20 74 68 65 20 43 48 45 43 4b 20 63  n of the CHECK c
1830: 6f 6e 73 74 72 61 69 6e 74 2e 20 20 46 75 74 75  onstraint.  Futu
1840: 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  re versions of S
1850: 51 4c 69 74 65 20 6d 69 67 68 74 0a 63 68 61 6e  QLite might.chan
1860: 67 65 20 74 6f 20 76 61 6c 69 64 61 74 65 20 43  ge to validate C
1870: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  HECK constraints
1880: 20 61 73 20 74 68 65 79 20 61 72 65 20 61 64 64   as they are add
1890: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 54 68 65  ed.</p>..<p> The
18a0: 20 65 78 65 63 75 74 69 6f 6e 20 74 69 6d 65 20   execution time 
18b0: 6f 66 20 74 68 65 20 41 4c 54 45 52 20 54 41 42  of the ALTER TAB
18c0: 4c 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e  LE command is in
18d0: 64 65 70 65 6e 64 65 6e 74 20 6f 66 0a 74 68 65  dependent of.the
18e0: 20 61 6d 6f 75 6e 74 20 6f 66 20 64 61 74 61 20   amount of data 
18f0: 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54  in the table.  T
1900: 68 65 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63  he ALTER TABLE c
1910: 6f 6d 6d 61 6e 64 20 72 75 6e 73 20 61 73 20 71  ommand runs as q
1920: 75 69 63 6b 6c 79 0a 6f 6e 20 61 20 74 61 62 6c  uickly.on a tabl
1930: 65 20 77 69 74 68 20 31 30 20 6d 69 6c 6c 69 6f  e with 10 millio
1940: 6e 20 72 6f 77 73 20 61 73 20 69 74 20 64 6f 65  n rows as it doe
1950: 73 20 6f 6e 20 61 20 74 61 62 6c 65 20 77 69 74  s on a table wit
1960: 68 20 31 20 72 6f 77 2e 0a 3c 2f 70 3e 0a 0a 3c  h 1 row..</p>..<
1970: 70 3e 41 66 74 65 72 20 41 44 44 20 43 4f 4c 55  p>After ADD COLU
1980: 4d 4e 20 68 61 73 20 62 65 65 6e 20 72 75 6e 20  MN has been run 
1990: 6f 6e 20 61 20 64 61 74 61 62 61 73 65 2c 20 74  on a database, t
19a0: 68 61 74 20 64 61 74 61 62 61 73 65 20 77 69 6c  hat database wil
19b0: 6c 20 6e 6f 74 0a 62 65 20 72 65 61 64 61 62 6c  l not.be readabl
19c0: 65 20 62 79 20 53 51 4c 69 74 65 20 76 65 72 73  e by SQLite vers
19d0: 69 6f 6e 20 33 2e 31 2e 33 20 28 5b 64 61 74 65  ion 3.1.3 ([date
19e0: 6f 66 3a 33 2e 31 2e 33 5d 29 20 61 6e 64 20 65  of:3.1.3]) and e
19f0: 61 72 6c 69 65 72 2e 3c 2f 70 3e 0a 0a 3c 74 63  arlier.</p>..<tc
1a00: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f 74  l>hd_fragment ot
1a10: 68 65 72 61 6c 74 65 72 3c 2f 74 63 6c 3e 0a 3c  heralter</tcl>.<
1a20: 68 33 3e 4d 61 6b 69 6e 67 20 4f 74 68 65 72 20  h3>Making Other 
1a30: 4b 69 6e 64 73 20 4f 66 20 54 61 62 6c 65 20 53  Kinds Of Table S
1a40: 63 68 65 6d 61 20 43 68 61 6e 67 65 73 3c 2f 68  chema Changes</h
1a50: 33 3e 0a 0a 3c 70 3e 20 54 68 65 20 6f 6e 6c 79  3>..<p> The only
1a60: 20 73 63 68 65 6d 61 20 61 6c 74 65 72 69 6e 67   schema altering
1a70: 20 63 6f 6d 6d 61 6e 64 73 20 64 69 72 65 63 74   commands direct
1a80: 6c 79 20 73 75 70 70 6f 72 74 65 64 20 62 79 20  ly supported by 
1a90: 53 51 4c 69 74 65 20 61 72 65 20 74 68 65 0a 22  SQLite are the."
1aa0: 72 65 6e 61 6d 65 20 74 61 62 6c 65 22 20 61 6e  rename table" an
1ab0: 64 20 22 61 64 64 20 63 6f 6c 75 6d 6e 22 20 63  d "add column" c
1ac0: 6f 6d 6d 61 6e 64 73 20 73 68 6f 77 6e 20 61 62  ommands shown ab
1ad0: 6f 76 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 61  ove.  However, a
1ae0: 70 70 6c 69 63 61 74 69 6f 6e 73 0a 63 61 6e 20  pplications.can 
1af0: 6d 61 6b 65 20 6f 74 68 65 72 20 61 72 62 69 74  make other arbit
1b00: 72 61 72 79 20 63 68 61 6e 67 65 73 20 74 6f 20  rary changes to 
1b10: 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 61 20  the format of a 
1b20: 74 61 62 6c 65 20 75 73 69 6e 67 20 61 20 73 69  table using a si
1b30: 6d 70 6c 65 0a 73 65 71 75 65 6e 63 65 20 6f 66  mple.sequence of
1b40: 20 6f 70 65 72 61 74 69 6f 6e 73 2e 0a 54 68 65   operations..The
1b50: 20 73 74 65 70 73 20 74 6f 20 6d 61 6b 65 20 61   steps to make a
1b60: 72 62 69 74 72 61 72 79 20 63 68 61 6e 67 65 73  rbitrary changes
1b70: 20 74 6f 20 74 68 65 20 73 63 68 65 6d 61 20 64   to the schema d
1b80: 65 73 69 67 6e 20 6f 66 20 73 6f 6d 65 20 74 61  esign of some ta
1b90: 62 6c 65 20 58 0a 61 72 65 20 61 73 20 66 6f 6c  ble X.are as fol
1ba0: 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  lows:..<ol>.<li>
1bb0: 3c 70 3e 0a 49 66 20 66 6f 72 65 69 67 6e 20 6b  <p>.If foreign k
1bc0: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61  ey constraints a
1bd0: 72 65 20 65 6e 61 62 6c 65 64 2c 0a 64 69 73 61  re enabled,.disa
1be0: 62 6c 65 20 74 68 65 6d 20 75 73 69 6e 67 20 5b  ble them using [
1bf0: 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b  PRAGMA foreign_k
1c00: 65 79 73 20 7c 20 50 52 41 47 4d 41 20 66 6f 72  eys | PRAGMA for
1c10: 65 69 67 6e 5f 6b 65 79 73 3d 4f 46 46 5d 2e 0a  eign_keys=OFF]..
1c20: 0a 3c 6c 69 3e 3c 70 3e 0a 53 74 61 72 74 20 61  .<li><p>.Start a
1c30: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 0a 3c   transaction...<
1c40: 6c 69 3e 3c 70 3e 0a 52 65 6d 65 6d 62 65 72 20  li><p>.Remember 
1c50: 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 61 6c  the format of al
1c60: 6c 20 69 6e 64 65 78 65 73 20 61 6e 64 20 74 72  l indexes and tr
1c70: 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65  iggers associate
1c80: 64 20 77 69 74 68 20 74 61 62 6c 65 20 58 2e 0a  d with table X..
1c90: 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  This information
1ca0: 20 77 69 6c 6c 20 62 65 20 6e 65 65 64 65 64 20   will be needed 
1cb0: 69 6e 20 73 74 65 70 20 38 20 62 65 6c 6f 77 2e  in step 8 below.
1cc0: 20 20 4f 6e 65 20 77 61 79 20 74 6f 20 64 6f 20    One way to do 
1cd0: 74 68 69 73 20 69 73 0a 74 6f 20 72 75 6e 20 61  this is.to run a
1ce0: 20 71 75 65 72 79 20 6c 69 6b 65 20 74 68 65 20   query like the 
1cf0: 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 53 45 4c 45 43  following:.SELEC
1d00: 54 20 74 79 70 65 2c 20 73 71 6c 20 46 52 4f 4d  T type, sql FROM
1d10: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57   sqlite_master W
1d20: 48 45 52 45 20 74 62 6c 5f 6e 61 6d 65 3d 27 58  HERE tbl_name='X
1d30: 27 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 55 73 65 20  '...<li><p>.Use 
1d40: 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20 74  [CREATE TABLE] t
1d50: 6f 20 63 6f 6e 73 74 72 75 63 74 20 61 20 6e 65  o construct a ne
1d60: 77 20 74 61 62 6c 65 20 22 6e 65 77 5f 58 22 20  w table "new_X" 
1d70: 74 68 61 74 20 69 73 20 69 6e 20 74 68 65 20 64  that is in the d
1d80: 65 73 69 72 65 64 0a 72 65 76 69 73 65 64 20 66  esired.revised f
1d90: 6f 72 6d 61 74 20 6f 66 20 74 61 62 6c 65 20 58  ormat of table X
1da0: 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61  .  Make sure tha
1db0: 74 20 74 68 65 20 6e 61 6d 65 20 22 6e 65 77 5f  t the name "new_
1dc0: 58 22 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6c 6c  X" does not coll
1dd0: 69 64 65 0a 77 69 74 68 20 61 6e 79 20 65 78 69  ide.with any exi
1de0: 73 74 69 6e 67 20 74 61 62 6c 65 20 6e 61 6d 65  sting table name
1df0: 2c 20 6f 66 20 63 6f 75 72 73 65 2e 0a 0a 3c 6c  , of course...<l
1e00: 69 3e 3c 70 3e 0a 54 72 61 6e 73 66 65 72 20 63  i><p>.Transfer c
1e10: 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 58 20 69 6e  ontent from X in
1e20: 74 6f 20 6e 65 77 5f 58 20 75 73 69 6e 67 20 61  to new_X using a
1e30: 20 73 74 61 74 65 6d 65 6e 74 0a 6c 69 6b 65 3a   statement.like:
1e40: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 6e 65 77   INSERT INTO new
1e50: 5f 58 20 53 45 4c 45 43 54 20 2e 2e 2e 20 46 52  _X SELECT ... FR
1e60: 4f 4d 20 58 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 44  OM X...<li><p>.D
1e70: 72 6f 70 20 74 68 65 20 6f 6c 64 20 74 61 62 6c  rop the old tabl
1e80: 65 20 58 3a 20 20 5b 44 52 4f 50 20 54 41 42 4c  e X:  [DROP TABL
1e90: 45 20 7c 20 44 52 4f 50 20 54 41 42 4c 45 20 58  E | DROP TABLE X
1ea0: 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 43 68 61 6e  ]...<li><p>.Chan
1eb0: 67 65 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 6e  ge the name of n
1ec0: 65 77 5f 58 20 74 6f 20 58 20 75 73 69 6e 67 3a  ew_X to X using:
1ed0: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 6e 65 77   ALTER TABLE new
1ee0: 5f 58 20 52 45 4e 41 4d 45 20 54 4f 20 58 2e 0a  _X RENAME TO X..
1ef0: 0a 3c 6c 69 3e 3c 70 3e 0a 55 73 65 20 5b 43 52  .<li><p>.Use [CR
1f00: 45 41 54 45 20 49 4e 44 45 58 5d 20 61 6e 64 20  EATE INDEX] and 
1f10: 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d  [CREATE TRIGGER]
1f20: 20 74 6f 20 72 65 63 6f 6e 73 74 72 75 63 74 20   to reconstruct 
1f30: 69 6e 64 65 78 65 73 20 61 6e 64 20 74 72 69 67  indexes and trig
1f40: 67 65 72 73 0a 61 73 73 6f 63 69 61 74 65 64 20  gers.associated 
1f50: 77 69 74 68 20 74 61 62 6c 65 20 58 2e 20 20 50  with table X.  P
1f60: 65 72 68 61 70 73 20 75 73 65 20 74 68 65 20 6f  erhaps use the o
1f70: 6c 64 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65  ld format of the
1f80: 20 74 72 69 67 67 65 72 73 20 61 6e 64 0a 69 6e   triggers and.in
1f90: 64 65 78 65 73 20 73 61 76 65 64 20 66 72 6f 6d  dexes saved from
1fa0: 20 73 74 65 70 20 33 20 61 62 6f 76 65 20 61 73   step 3 above as
1fb0: 20 61 20 67 75 69 64 65 2c 20 6d 61 6b 69 6e 67   a guide, making
1fc0: 20 63 68 61 6e 67 65 73 20 61 73 20 61 70 70 72   changes as appr
1fd0: 6f 70 72 69 61 74 65 0a 66 6f 72 20 74 68 65 20  opriate.for the 
1fe0: 61 6c 74 65 72 61 74 69 6f 6e 2e 0a 0a 3c 6c 69  alteration...<li
1ff0: 3e 3c 70 3e 49 66 20 61 6e 79 20 76 69 65 77 73  ><p>If any views
2000: 20 72 65 66 65 72 20 74 6f 20 74 61 62 6c 65 20   refer to table 
2010: 58 20 69 6e 20 61 20 77 61 79 20 74 68 61 74 20  X in a way that 
2020: 69 73 20 61 66 66 65 63 74 65 64 20 62 79 20 74  is affected by t
2030: 68 65 0a 73 63 68 65 6d 61 20 63 68 61 6e 67 65  he.schema change
2040: 2c 20 74 68 65 6e 20 64 72 6f 70 20 74 68 6f 73  , then drop thos
2050: 65 20 76 69 65 77 73 20 75 73 69 6e 67 20 5b 44  e views using [D
2060: 52 4f 50 20 56 49 45 57 5d 20 61 6e 64 20 72 65  ROP VIEW] and re
2070: 63 72 65 61 74 65 20 74 68 65 6d 0a 77 69 74 68  create them.with
2080: 20 77 68 61 74 65 76 65 72 20 63 68 61 6e 67 65   whatever change
2090: 73 20 61 72 65 20 6e 65 63 65 73 73 61 72 79 20  s are necessary 
20a0: 74 6f 20 61 63 63 6f 6d 6d 6f 64 61 74 65 20 74  to accommodate t
20b0: 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  he schema change
20c0: 0a 75 73 69 6e 67 20 5b 43 52 45 41 54 45 20 56  .using [CREATE V
20d0: 49 45 57 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 49  IEW]...<li><p>.I
20e0: 66 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  f foreign key co
20f0: 6e 73 74 72 61 69 6e 74 73 20 77 65 72 65 20 6f  nstraints were o
2100: 72 69 67 69 6e 61 6c 6c 79 20 65 6e 61 62 6c 65  riginally enable
2110: 64 0a 74 68 65 6e 20 72 75 6e 20 5b 50 52 41 47  d.then run [PRAG
2120: 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63  MA foreign_key_c
2130: 68 65 63 6b 5d 20 74 6f 20 76 65 72 69 66 79 20  heck] to verify 
2140: 74 68 61 74 20 74 68 65 20 73 63 68 65 6d 61 0a  that the schema.
2150: 63 68 61 6e 67 65 20 64 69 64 20 6e 6f 74 20 62  change did not b
2160: 72 65 61 6b 20 61 6e 79 20 66 6f 72 65 69 67 6e  reak any foreign
2170: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
2180: 2e 0a 0a 0a 3c 6c 69 3e 3c 70 3e 0a 43 6f 6d 6d  ....<li><p>.Comm
2190: 69 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  it the transacti
21a0: 6f 6e 20 73 74 61 72 74 65 64 20 69 6e 20 73 74  on started in st
21b0: 65 70 20 32 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 49  ep 2...<li><p>.I
21c0: 66 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 63  f foreign keys c
21d0: 6f 6e 73 74 72 61 69 6e 74 73 20 77 65 72 65 20  onstraints were 
21e0: 6f 72 69 67 69 6e 61 6c 6c 79 20 65 6e 61 62 6c  originally enabl
21f0: 65 64 2c 20 72 65 65 6e 61 62 6c 65 20 74 68 65  ed, reenable the
2200: 6d 20 6e 6f 77 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70  m now..</ol>..<p
2210: 3e 54 68 65 20 70 72 6f 63 65 64 75 72 65 20 61  >The procedure a
2220: 62 6f 76 65 20 69 73 20 63 6f 6d 70 6c 65 74 65  bove is complete
2230: 6c 79 20 67 65 6e 65 72 61 6c 20 61 6e 64 20 77  ly general and w
2240: 69 6c 6c 20 77 6f 72 6b 20 65 76 65 6e 20 69 66  ill work even if
2250: 20 74 68 65 0a 73 63 68 65 6d 61 20 63 68 61 6e   the.schema chan
2260: 67 65 20 63 61 75 73 65 73 20 74 68 65 20 69 6e  ge causes the in
2270: 66 6f 72 6d 61 74 69 6f 6e 20 73 74 6f 72 65 64  formation stored
2280: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f   in the table to
2290: 20 63 68 61 6e 67 65 2e 0a 53 6f 20 74 68 65 20   change..So the 
22a0: 66 75 6c 6c 20 70 72 6f 63 65 64 75 72 65 20 61  full procedure a
22b0: 62 6f 76 65 20 69 73 20 61 70 70 72 6f 70 72 69  bove is appropri
22c0: 61 74 65 20 66 6f 72 20 64 72 6f 70 70 69 6e 67  ate for dropping
22d0: 20 61 20 63 6f 6c 75 6d 6e 2c 0a 63 68 61 6e 67   a column,.chang
22e0: 69 6e 67 20 74 68 65 20 6f 72 64 65 72 20 6f 66  ing the order of
22f0: 20 63 6f 6c 75 6d 6e 73 2c 20 61 64 64 69 6e 67   columns, adding
2300: 20 6f 72 20 72 65 6d 6f 76 69 6e 67 20 61 20 55   or removing a U
2310: 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
2320: 0a 6f 72 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  .or PRIMARY KEY,
2330: 20 61 64 64 69 6e 67 20 43 48 45 43 4b 20 6f 72   adding CHECK or
2340: 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 6f 72 20   FOREIGN KEY or 
2350: 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
2360: 69 6e 74 73 2c 0a 6f 72 20 63 68 61 6e 67 69 6e  ints,.or changin
2370: 67 20 74 68 65 20 64 61 74 61 74 79 70 65 20 66  g the datatype f
2380: 6f 72 20 61 20 63 6f 6c 75 6d 6e 2c 20 66 6f 72  or a column, for
2390: 20 65 78 61 6d 70 6c 65 2e 20 20 48 6f 77 65 76   example.  Howev
23a0: 65 72 2c 20 61 20 73 69 6d 70 6c 65 72 0a 61 6e  er, a simpler.an
23b0: 64 20 66 61 73 74 65 72 20 70 72 6f 63 65 64 75  d faster procedu
23c0: 72 65 20 63 61 6e 20 6f 70 74 69 6f 6e 61 6c 6c  re can optionall
23d0: 79 20 62 65 20 75 73 65 64 20 66 6f 72 0a 73 6f  y be used for.so
23e0: 6d 65 20 63 68 61 6e 67 65 73 20 74 68 61 74 20  me changes that 
23f0: 64 6f 20 6e 6f 20 61 66 66 65 63 74 20 74 68 65  do no affect the
2400: 20 6f 6e 2d 64 69 73 6b 20 63 6f 6e 74 65 6e 74   on-disk content
2410: 20 69 6e 20 61 6e 79 20 77 61 79 2e 0a 54 68 65   in any way..The
2420: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 69 6d 70 6c   following simpl
2430: 65 72 20 70 72 6f 63 65 64 75 72 65 20 69 73 20  er procedure is 
2440: 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20  appropriate for 
2450: 72 65 6d 6f 76 69 6e 67 0a 43 48 45 43 4b 20 6f  removing.CHECK o
2460: 72 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 6f 72  r FOREIGN KEY or
2470: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
2480: 61 69 6e 74 73 2c 0a 72 65 6e 61 6d 69 6e 67 20  aints,.renaming 
2490: 63 6f 6c 75 6d 6e 73 2c 20 6f 72 20 61 64 64 69  columns, or addi
24a0: 6e 67 20 6f 72 20 72 65 6d 6f 76 69 6e 67 20 6f  ng or removing o
24b0: 72 20 63 68 61 6e 67 69 6e 67 20 64 65 66 61 75  r changing defau
24c0: 6c 74 20 76 61 6c 75 65 73 20 6f 6e 0a 61 20 63  lt values on.a c
24d0: 6f 6c 75 6d 6e 2e 0a 0a 3c 6f 6c 3e 0a 3c 6c 49  olumn...<ol>.<lI
24e0: 3e 3c 70 3e 20 53 74 61 72 74 20 61 20 74 72 61  ><p> Start a tra
24f0: 6e 73 61 63 74 69 6f 6e 2e 0a 0a 3c 6c 69 3e 3c  nsaction...<li><
2500: 70 3e 20 52 75 6e 20 5b 50 52 41 47 4d 41 20 73  p> Run [PRAGMA s
2510: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 5d 20 74  chema_version] t
2520: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
2530: 63 75 72 72 65 6e 74 20 73 63 68 65 6d 61 0a 76  current schema.v
2540: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 2e 20 20  ersion number.  
2550: 54 68 69 73 20 6e 75 6d 62 65 72 20 77 69 6c 6c  This number will
2560: 20 62 65 20 6e 65 65 64 65 64 20 66 6f 72 20 73   be needed for s
2570: 74 65 70 20 36 20 62 65 6c 6f 77 2e 0a 0a 3c 6c  tep 6 below...<l
2580: 69 3e 3c 70 3e 20 41 63 74 69 76 61 74 65 20 73  i><p> Activate s
2590: 63 68 65 6d 61 20 65 64 69 74 69 6e 67 20 75 73  chema editing us
25a0: 69 6e 67 20 0a 5b 50 52 41 47 4d 41 20 77 72 69  ing .[PRAGMA wri
25b0: 74 61 62 6c 65 5f 73 63 68 65 6d 61 20 7c 20 50  table_schema | P
25c0: 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73  RAGMA writable_s
25d0: 63 68 65 6d 61 3d 4f 4e 5d 2e 0a 0a 3c 6c 69 3e  chema=ON]...<li>
25e0: 3c 70 3e 20 52 75 6e 20 61 6e 20 5b 55 50 44 41  <p> Run an [UPDA
25f0: 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 20 74 6f  TE] statement to
2600: 20 63 68 61 6e 67 65 20 74 68 65 20 64 65 66 69   change the defi
2610: 6e 69 74 69 6f 6e 20 6f 66 20 74 61 62 6c 65 20  nition of table 
2620: 58 0a 69 6e 20 74 68 65 20 5b 73 71 6c 69 74 65  X.in the [sqlite
2630: 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 5d 3a 20  _master table]: 
2640: 0a 55 50 44 41 54 45 20 73 71 6c 69 74 65 5f 6d  .UPDATE sqlite_m
2650: 61 73 74 65 72 20 53 45 54 20 73 71 6c 3d 2e 2e  aster SET sql=..
2660: 2e 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 61  . WHERE type='ta
2670: 62 6c 65 27 20 41 4e 44 20 6e 61 6d 65 3d 27 58  ble' AND name='X
2680: 27 3b 0a 3c 70 3e 3c 65 6d 3e 43 61 75 74 69 6f  ';.<p><em>Cautio
2690: 6e 3a 3c 2f 65 6d 3e 20 20 4d 61 6b 69 6e 67 20  n:</em>  Making 
26a0: 61 20 63 68 61 6e 67 65 20 74 6f 20 74 68 65 20  a change to the 
26b0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
26c0: 62 6c 65 20 6c 69 6b 65 20 74 68 69 73 20 77 69  ble like this wi
26d0: 6c 6c 0a 72 65 6e 64 65 72 20 74 68 65 20 64 61  ll.render the da
26e0: 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 20 61  tabase corrupt a
26f0: 6e 64 20 75 6e 72 65 61 64 61 62 6c 65 20 69 66  nd unreadable if
2700: 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 6e 74   the change cont
2710: 61 69 6e 73 0a 61 20 73 79 6e 74 61 78 20 65 72  ains.a syntax er
2720: 72 6f 72 2e 20 20 49 74 20 69 73 20 73 75 67 67  ror.  It is sugg
2730: 65 73 74 65 64 20 74 68 61 74 20 63 61 72 65 66  ested that caref
2740: 75 6c 20 74 65 73 74 69 6e 67 20 6f 66 20 74 68  ul testing of th
2750: 65 20 55 50 44 41 54 45 0a 73 74 61 74 65 6d 65  e UPDATE.stateme
2760: 6e 74 20 62 65 20 64 6f 6e 65 20 6f 6e 20 61 20  nt be done on a 
2770: 73 65 70 61 72 61 74 65 20 62 6c 61 6e 6b 20 64  separate blank d
2780: 61 74 61 62 61 73 65 20 70 72 69 6f 72 20 74 6f  atabase prior to
2790: 20 75 73 69 6e 67 20 69 74 20 6f 6e 0a 61 20 64   using it on.a d
27a0: 61 74 61 62 61 73 65 20 63 6f 6e 74 61 69 6e 69  atabase containi
27b0: 6e 67 20 69 6d 70 6f 72 74 61 6e 74 20 64 61 74  ng important dat
27c0: 61 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 49 66 20 74  a...<li><p> If t
27d0: 68 65 20 63 68 61 6e 67 65 20 74 6f 20 74 61 62  he change to tab
27e0: 6c 65 20 58 20 61 6c 73 6f 20 61 66 66 65 63 74  le X also affect
27f0: 73 20 6f 74 68 65 72 20 74 61 62 6c 65 73 20 6f  s other tables o
2800: 72 20 69 6e 64 65 78 65 73 20 6f 72 0a 74 72 69  r indexes or.tri
2810: 67 67 65 72 73 20 61 72 65 20 76 69 65 77 73 20  ggers are views 
2820: 77 69 74 68 69 6e 20 73 63 68 65 6d 61 2c 20 74  within schema, t
2830: 68 65 6e 20 72 75 6e 20 5b 55 50 44 41 54 45 5d  hen run [UPDATE]
2840: 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 6d   statements to m
2850: 6f 64 69 66 79 0a 74 68 6f 73 65 20 6f 74 68 65  odify.those othe
2860: 72 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65 73  r tables indexes
2870: 20 61 6e 64 20 76 69 65 77 73 20 74 6f 6f 2e 20   and views too. 
2880: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 66   For example, if
2890: 20 74 68 65 20 6e 61 6d 65 20 6f 66 0a 61 20 63   the name of.a c
28a0: 6f 6c 75 6d 6e 20 63 68 61 6e 67 65 73 2c 20 61  olumn changes, a
28b0: 6c 6c 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 63  ll FOREIGN KEY c
28c0: 6f 6e 73 74 72 61 69 6e 74 73 2c 20 74 72 69 67  onstraints, trig
28d0: 67 65 72 73 2c 20 69 6e 64 65 78 65 73 2c 20 61  gers, indexes, a
28e0: 6e 64 0a 76 69 65 77 73 20 74 68 61 74 20 72 65  nd.views that re
28f0: 66 65 72 20 74 6f 20 74 68 61 74 20 63 6f 6c 75  fer to that colu
2900: 6d 6e 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66  mn must be modif
2910: 69 65 64 2e 0a 3c 70 3e 3c 65 6d 3e 43 61 75 74  ied..<p><em>Caut
2920: 69 6f 6e 3a 3c 2f 65 6d 3e 20 20 4f 6e 63 65 20  ion:</em>  Once 
2930: 61 67 61 69 6e 2c 20 6d 61 6b 69 6e 67 20 63 68  again, making ch
2940: 61 6e 67 65 73 20 74 6f 20 74 68 65 20 73 71 6c  anges to the sql
2950: 69 74 65 5f 6d 61 73 74 65 72 20 0a 74 61 62 6c  ite_master .tabl
2960: 65 20 6c 69 6b 65 20 74 68 69 73 20 77 69 6c 6c  e like this will
2970: 20 72 65 6e 64 65 72 20 74 68 65 20 64 61 74 61   render the data
2980: 62 61 73 65 20 63 6f 72 72 75 70 74 20 61 6e 64  base corrupt and
2990: 20 75 6e 72 65 61 64 61 62 6c 65 20 69 66 20 74   unreadable if t
29a0: 68 65 20 0a 63 68 61 6e 67 65 20 63 6f 6e 74 61  he .change conta
29b0: 69 6e 73 20 61 6e 20 65 72 72 6f 72 2e 20 20 43  ins an error.  C
29c0: 61 72 65 66 75 6c 6c 79 20 74 65 73 74 20 6f 66  arefully test of
29d0: 20 74 68 69 73 20 65 6e 74 69 72 65 20 70 72 6f   this entire pro
29e0: 63 65 64 75 72 65 0a 6f 6e 20 61 20 73 65 70 61  cedure.on a sepa
29f0: 72 61 74 65 20 74 65 73 74 20 64 61 74 61 62 61  rate test databa
2a00: 73 65 20 70 72 69 6f 72 20 74 6f 20 75 73 69 6e  se prior to usin
2a10: 67 20 69 74 20 6f 6e 0a 61 20 64 61 74 61 62 61  g it on.a databa
2a20: 73 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 6d  se containing im
2a30: 70 6f 72 74 61 6e 74 20 64 61 74 61 20 61 6e 64  portant data and
2a40: 2f 6f 72 20 6d 61 6b 65 20 62 61 63 6b 75 70 20  /or make backup 
2a50: 63 6f 70 69 65 73 20 6f 66 0a 69 6d 70 6f 72 74  copies of.import
2a60: 61 6e 74 20 64 61 74 61 62 61 73 65 73 20 70 72  ant databases pr
2a70: 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e 67 20 74  ior to running t
2a80: 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e 0a 0a  his procedure...
2a90: 3c 6c 69 3e 3c 70 3e 20 49 6e 63 72 65 6d 65 6e  <li><p> Incremen
2aa0: 74 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72  t the schema ver
2ab0: 73 69 6f 6e 20 6e 75 6d 62 65 72 20 75 73 69 6e  sion number usin
2ac0: 67 0a 5b 50 52 41 47 4d 41 20 73 63 68 65 6d 61  g.[PRAGMA schema
2ad0: 5f 76 65 72 73 69 6f 6e 20 7c 20 50 52 41 47 4d  _version | PRAGM
2ae0: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
2af0: 3d 58 5d 20 77 68 65 72 65 20 58 20 69 73 20 6f  =X] where X is o
2b00: 6e 65 0a 6d 6f 72 65 20 74 68 61 6e 20 74 68 65  ne.more than the
2b10: 20 6f 6c 64 20 73 63 68 65 6d 61 20 76 65 72 73   old schema vers
2b20: 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 75 6e 64  ion number found
2b30: 20 69 6e 20 73 74 65 70 20 32 20 61 62 6f 76 65   in step 2 above
2b40: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 44 69 73 61 62  ...<li><p> Disab
2b50: 6c 65 20 73 63 68 65 6d 61 20 65 64 69 74 69 6e  le schema editin
2b60: 67 20 75 73 69 6e 67 20 0a 5b 50 52 41 47 4d 41  g using .[PRAGMA
2b70: 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61   writable_schema
2b80: 20 7c 20 50 52 41 47 4d 41 20 77 72 69 74 61 62   | PRAGMA writab
2b90: 6c 65 5f 73 63 68 65 6d 61 3d 4f 46 46 5d 2e 0a  le_schema=OFF]..
2ba0: 0a 3c 6c 69 3e 3c 70 3e 20 28 4f 70 74 69 6f 6e  .<li><p> (Option
2bb0: 61 6c 29 20 52 75 6e 20 5b 50 52 41 47 4d 41 20  al) Run [PRAGMA 
2bc0: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 5d  integrity_check]
2bd0: 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
2be0: 74 68 65 0a 73 63 68 65 6d 61 20 63 68 61 6e 67  the.schema chang
2bf0: 65 73 20 64 69 64 20 6e 6f 74 20 64 61 6d 61 67  es did not damag
2c00: 65 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a  e the database..
2c10: 0a 3c 6c 69 3e 3c 70 3e 20 43 6f 6d 6d 69 74 20  .<li><p> Commit 
2c20: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
2c30: 73 74 61 72 74 65 64 20 6f 6e 20 73 74 65 70 20  started on step 
2c40: 31 20 61 62 6f 76 65 2e 0a 3c 2f 6f 6c 3e 0a 0a  1 above..</ol>..
2c50: 3c 70 3e 49 66 20 73 6f 6d 65 20 66 75 74 75 72  <p>If some futur
2c60: 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c  e version of SQL
2c70: 69 74 65 20 61 64 64 73 20 6e 65 77 20 41 4c 54  ite adds new ALT
2c80: 45 52 20 54 41 42 4c 45 20 63 61 70 61 62 69 6c  ER TABLE capabil
2c90: 69 74 69 65 73 2c 20 0a 74 68 6f 73 65 20 63 61  ities, .those ca
2ca0: 70 61 62 69 6c 69 74 69 65 73 20 77 69 6c 6c 20  pabilities will 
2cb0: 76 65 72 79 20 6c 69 6b 65 6c 79 20 75 73 65 20  very likely use 
2cc0: 6f 6e 65 20 6f 66 20 74 68 65 20 74 77 6f 20 70  one of the two p
2cd0: 72 6f 63 65 64 75 72 65 73 0a 6f 75 74 6c 69 6e  rocedures.outlin
2ce0: 65 64 20 61 62 6f 76 65 2e 0a 0a 3c 74 63 6c 3e  ed above...<tcl>
2cf0: 0a 23 20 20 4f 6e 65 20 6f 66 20 74 68 65 20 72  .#  One of the r
2d00: 65 61 73 6f 6e 73 20 74 68 61 74 0a 23 20 53 51  easons that.# SQ
2d10: 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 63 75  Lite does not cu
2d20: 72 72 65 6e 74 6c 79 20 73 75 70 70 6f 72 74 20  rrently support 
2d30: 6d 6f 72 65 20 41 4c 54 45 52 20 54 41 42 4c 45  more ALTER TABLE
2d40: 20 63 61 70 61 62 69 6c 69 74 69 65 73 20 69 73   capabilities is
2d50: 20 74 68 61 74 0a 23 20 74 68 65 20 70 72 6f 63   that.# the proc
2d60: 65 64 75 72 65 20 73 68 6f 77 6e 20 61 62 6f 76  edure shown abov
2d70: 65 20 69 73 20 64 69 66 66 69 63 75 6c 74 20 74  e is difficult t
2d80: 6f 20 61 75 74 6f 6d 61 74 65 20 66 6f 72 20 61  o automate for a
2d90: 6e 20 61 72 62 69 74 72 61 72 79 20 73 63 68 65  n arbitrary sche
2da0: 6d 61 2e 0a 23 20 50 61 72 74 69 63 75 6c 61 72  ma..# Particular
2db0: 6c 79 20 74 72 6f 75 62 6c 65 73 6f 6d 65 20 61  ly troublesome a
2dc0: 72 65 61 73 20 61 72 65 20 69 64 65 6e 74 69 66  reas are identif
2dd0: 79 69 6e 67 20 61 6c 6c 20 76 69 65 77 73 20 61  ying all views a
2de0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 23  ssociated with.#
2df0: 20 74 61 62 6c 65 20 58 20 69 6e 20 73 74 65 70   table X in step
2e00: 20 31 20 61 6e 64 20 63 72 65 61 74 69 6e 67 20   1 and creating 
2e10: 6e 65 77 20 76 69 65 77 73 20 61 6e 64 20 74 72  new views and tr
2e20: 69 67 67 65 72 73 20 74 68 61 74 20 61 72 65 20  iggers that are 
2e30: 63 6f 6d 70 61 74 69 62 6c 65 0a 23 20 77 69 74  compatible.# wit
2e40: 68 20 74 68 65 20 61 6c 74 65 72 65 64 20 73 63  h the altered sc
2e50: 68 65 6d 61 20 66 6f 72 20 74 61 62 6c 65 20 58  hema for table X
2e60: 20 69 6e 20 73 74 65 70 20 36 2e 20 20 49 74 20   in step 6.  It 
2e70: 69 73 20 61 20 74 72 69 63 6b 79 20 62 75 74 20  is a tricky but 
2e80: 73 6f 6c 76 61 62 6c 65 0a 23 20 70 72 6f 62 6c  solvable.# probl
2e90: 65 6d 20 74 6f 20 63 72 65 61 74 65 20 63 6f 64  em to create cod
2ea0: 65 20 74 68 61 74 20 77 69 6c 6c 20 70 65 72 66  e that will perf
2eb0: 6f 72 6d 20 74 68 65 20 73 74 65 70 73 20 61 62  orm the steps ab
2ec0: 6f 76 65 20 0a 23 20 66 6f 72 20 22 72 65 61 73  ove .# for "reas
2ed0: 6f 6e 61 62 6c 65 22 20 73 63 68 65 6d 61 73 20  onable" schemas 
2ee0: 63 6f 6d 6d 6f 6e 6c 79 20 66 6f 75 6e 64 20 69  commonly found i
2ef0: 6e 20 70 72 61 63 74 69 63 65 2e 20 20 0a 23 20  n practice.  .# 
2f00: 42 75 74 20 74 68 65 72 65 20 65 78 69 73 74 20  But there exist 
2f10: 6d 61 6c 65 76 6f 6c 65 6e 74 20 73 63 68 65 6d  malevolent schem
2f20: 61 73 20 66 6f 72 20 77 68 69 63 68 0a 23 20 74  as for which.# t
2f30: 68 65 73 65 20 73 74 65 70 73 20 61 72 65 20 6d  hese steps are m
2f40: 61 64 64 65 6e 69 6e 67 6c 79 20 64 69 66 66 69  addeningly diffi
2f50: 63 75 6c 74 20 74 6f 20 64 6f 20 63 6f 72 72 65  cult to do corre
2f60: 63 74 6c 79 2e 20 20 52 61 74 68 65 72 20 74 68  ctly.  Rather th
2f70: 61 6e 20 63 72 65 61 74 65 0a 23 20 41 4c 54 45  an create.# ALTE
2f80: 52 20 54 41 42 4c 45 20 66 65 61 74 75 72 65 73  R TABLE features
2f90: 20 74 68 61 74 20 77 6f 72 6b 20 63 6f 72 72 65   that work corre
2fa0: 63 74 6c 79 20 39 39 2e 39 25 20 6f 66 20 74 68  ctly 99.9% of th
2fb0: 65 20 74 69 6d 65 20 62 75 74 20 70 6f 73 73 69  e time but possi
2fc0: 62 6c 79 0a 23 20 63 6f 72 72 75 70 74 20 74 68  bly.# corrupt th
2fd0: 65 20 73 63 68 65 6d 61 20 6f 6e 20 74 68 65 20  e schema on the 
2fe0: 6f 74 68 65 72 20 30 2e 31 25 2c 20 74 68 65 20  other 0.1%, the 
2ff0: 53 51 4c 69 74 65 20 64 65 76 65 6c 6f 70 65 72  SQLite developer
3000: 73 20 68 61 76 65 20 64 65 63 69 64 65 64 0a 23  s have decided.#
3010: 20 74 6f 20 70 75 73 68 20 74 68 65 20 70 72 6f   to push the pro
3020: 62 6c 65 6d 20 69 6e 74 6f 20 74 68 65 20 61 70  blem into the ap
3030: 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e  plication domain
3040: 2c 20 77 68 65 72 65 20 69 74 20 69 73 20 6d 75  , where it is mu
3050: 63 68 20 65 61 73 69 65 72 0a 23 20 74 6f 20 73  ch easier.# to s
3060: 6f 6c 76 65 2e 0a 3c 2f 74 63 6c 3e 0a 0a 0a 3c  olve..</tcl>...<
3070: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
3080: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3090: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30c0: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41 4e 41  ###.Section {ANA
30d0: 4c 59 5a 45 7d 20 61 6e 61 6c 79 7a 65 20 41 4e  LYZE} analyze AN
30e0: 41 4c 59 5a 45 0a 0a 52 65 63 75 72 73 69 76 65  ALYZE..Recursive
30f0: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61 6e  BubbleDiagram an
3100: 61 6c 79 7a 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c  alyze-stmt.</tcl
3110: 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 4e 41 4c  >..<p> ^The ANAL
3120: 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 67 61 74 68  YZE command gath
3130: 65 72 73 20 73 74 61 74 69 73 74 69 63 73 20 61  ers statistics a
3140: 62 6f 75 74 20 74 61 62 6c 65 73 20 61 6e 64 0a  bout tables and.
3150: 69 6e 64 69 63 65 73 20 61 6e 64 20 73 74 6f 72  indices and stor
3160: 65 73 20 74 68 65 20 63 6f 6c 6c 65 63 74 65 64  es the collected
3170: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69 6e 20   information.in 
3180: 5b 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 73  [internal tables
3190: 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  ] of the databas
31a0: 65 20 77 68 65 72 65 20 74 68 65 20 71 75 65 72  e where the quer
31b0: 79 20 6f 70 74 69 6d 69 7a 65 72 20 63 61 6e 0a  y optimizer can.
31c0: 61 63 63 65 73 73 20 74 68 65 20 69 6e 66 6f 72  access the infor
31d0: 6d 61 74 69 6f 6e 20 61 6e 64 20 75 73 65 20 69  mation and use i
31e0: 74 20 74 6f 20 68 65 6c 70 20 6d 61 6b 65 20 62  t to help make b
31f0: 65 74 74 65 72 20 71 75 65 72 79 20 70 6c 61 6e  etter query plan
3200: 6e 69 6e 67 20 63 68 6f 69 63 65 73 2e 0a 5e 49  ning choices..^I
3210: 66 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 20 61  f no arguments a
3220: 72 65 20 67 69 76 65 6e 2c 20 61 6c 6c 20 61 74  re given, all at
3230: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
3240: 20 61 72 65 0a 61 6e 61 6c 79 7a 65 64 2e 20 20   are.analyzed.  
3250: 5e 49 66 20 61 20 73 63 68 65 6d 61 20 6e 61 6d  ^If a schema nam
3260: 65 20 69 73 20 67 69 76 65 6e 20 61 73 20 74 68  e is given as th
3270: 65 20 61 72 67 75 6d 65 6e 74 2c 20 74 68 65 6e  e argument, then
3280: 20 61 6c 6c 20 74 61 62 6c 65 73 0a 61 6e 64 20   all tables.and 
3290: 69 6e 64 69 63 65 73 20 69 6e 20 74 68 61 74 20  indices in that 
32a0: 6f 6e 65 20 64 61 74 61 62 61 73 65 20 61 72 65  one database are
32b0: 20 61 6e 61 6c 79 7a 65 64 2e 20 20 0a 5e 49 66   analyzed.  .^If
32c0: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73   the argument is
32d0: 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 2c 20 74   a table name, t
32e0: 68 65 6e 20 6f 6e 6c 79 20 74 68 61 74 20 74 61  hen only that ta
32f0: 62 6c 65 20 61 6e 64 20 74 68 65 0a 69 6e 64 69  ble and the.indi
3300: 63 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ces associated w
3310: 69 74 68 20 74 68 61 74 20 74 61 62 6c 65 20 61  ith that table a
3320: 72 65 20 61 6e 61 6c 79 7a 65 64 2e 20 20 5e 49  re analyzed.  ^I
3330: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 0a 69  f the argument.i
3340: 73 20 61 6e 20 69 6e 64 65 78 20 6e 61 6d 65 2c  s an index name,
3350: 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 61 74 20   then only that 
3360: 6f 6e 65 20 69 6e 64 65 78 20 69 73 20 61 6e 61  one index is ana
3370: 6c 79 7a 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20  lyzed.</p>..<p> 
3380: 5e 54 68 65 20 64 65 66 61 75 6c 74 20 69 6d 70  ^The default imp
3390: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 73 74 6f 72  lementation stor
33a0: 65 73 20 61 6c 6c 20 73 74 61 74 69 73 74 69 63  es all statistic
33b0: 73 20 69 6e 20 61 20 73 69 6e 67 6c 65 0a 74 61  s in a single.ta
33c0: 62 6c 65 20 6e 61 6d 65 64 20 22 5b 73 71 6c 69  ble named "[sqli
33d0: 74 65 5f 73 74 61 74 31 5d 22 2e 20 20 5e 49 66  te_stat1]".  ^If
33e0: 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69   SQLite is compi
33f0: 6c 65 64 20 77 69 74 68 20 74 68 65 0a 5b 53 51  led with the.[SQ
3400: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
3410: 33 5d 20 6f 70 74 69 6f 6e 20 61 6e 64 20 77 69  3] option and wi
3420: 74 68 6f 75 74 20 74 68 65 20 5b 53 51 4c 49 54  thout the [SQLIT
3430: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 0a  E_ENABLE_STAT4].
3440: 6f 70 74 69 6f 6e 2c 20 74 68 65 6e 20 61 64 64  option, then add
3450: 69 74 69 6f 6e 61 6c 20 68 69 73 74 6f 67 72 61  itional histogra
3460: 6d 20 64 61 74 61 20 69 73 0a 63 6f 6c 6c 65 63  m data is.collec
3470: 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64 20 69  ted and stored i
3480: 6e 20 5b 73 71 6c 69 74 65 5f 73 74 61 74 33 5d  n [sqlite_stat3]
3490: 2e 0a 20 5e 49 66 20 53 51 4c 69 74 65 20 69 73  .. ^If SQLite is
34a0: 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74   compiled with t
34b0: 68 65 0a 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  he.[SQLITE_ENABL
34c0: 45 5f 53 54 41 54 34 5d 20 6f 70 74 69 6f 6e 2c  E_STAT4] option,
34d0: 20 74 68 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c   then additional
34e0: 20 68 69 73 74 6f 67 72 61 6d 20 64 61 74 61 20   histogram data 
34f0: 69 73 0a 63 6f 6c 6c 65 63 74 65 64 20 61 6e 64  is.collected and
3500: 20 73 74 6f 72 65 64 20 69 6e 20 5b 73 71 6c 69   stored in [sqli
3510: 74 65 5f 73 74 61 74 34 5d 2e 0a 4f 6c 64 65 72  te_stat4]..Older
3520: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
3530: 69 74 65 20 77 6f 75 6c 64 20 6d 61 6b 65 20 75  ite would make u
3540: 73 65 20 6f 66 20 74 68 65 20 5b 73 71 6c 69 74  se of the [sqlit
3550: 65 5f 73 74 61 74 32 5d 20 74 61 62 6c 65 0a 77  e_stat2] table.w
3560: 68 65 6e 20 63 6f 6d 70 69 6c 65 64 20 77 69 74  hen compiled wit
3570: 68 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  h [SQLITE_ENABLE
3580: 5f 53 54 41 54 32 5d 20 62 75 74 20 61 6c 6c 20  _STAT2] but all 
3590: 72 65 63 65 6e 74 20 76 65 72 73 69 6f 6e 73 20  recent versions 
35a0: 6f 66 0a 53 51 4c 69 74 65 20 69 67 6e 6f 72 65  of.SQLite ignore
35b0: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
35c0: 32 20 74 61 62 6c 65 2e 0a 46 75 74 75 72 65 20  2 table..Future 
35d0: 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20 6d 61 79  enhancements may
35e0: 20 63 72 65 61 74 65 0a 61 64 64 69 74 69 6f 6e   create.addition
35f0: 61 6c 20 5b 69 6e 74 65 72 6e 61 6c 20 74 61 62  al [internal tab
3600: 6c 65 73 5d 20 77 69 74 68 20 74 68 65 20 73 61  les] with the sa
3610: 6d 65 20 6e 61 6d 65 20 70 61 74 74 65 72 6e 20  me name pattern 
3620: 65 78 63 65 70 74 20 77 69 74 68 0a 66 69 6e 61  except with.fina
3630: 6c 20 64 69 67 69 74 20 6c 61 72 67 65 72 20 74  l digit larger t
3640: 68 61 6e 20 22 34 22 2e 0a 41 6c 6c 20 6f 66 20  han "4"..All of 
3650: 74 68 65 73 65 20 74 61 62 6c 65 73 20 61 72 65  these tables are
3660: 20 63 6f 6c 6c 65 63 74 69 76 65 6c 79 20 72 65   collectively re
3670: 66 65 72 72 65 64 20 74 6f 20 61 73 20 22 73 74  ferred to as "st
3680: 61 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 22  atistics tables"
3690: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65  ..</p>..<p> ^The
36a0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
36b0: 73 74 61 74 69 73 74 69 63 73 20 74 61 62 6c 65  statistics table
36c0: 73 20 63 61 6e 20 62 65 20 71 75 65 72 69 65 64  s can be queried
36d0: 20 75 73 69 6e 67 20 5b 53 45 4c 45 43 54 5d 0a   using [SELECT].
36e0: 61 6e 64 20 63 61 6e 20 62 65 20 63 68 61 6e 67  and can be chang
36f0: 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b 44 45  ed using the [DE
3700: 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c  LETE], [INSERT],
3710: 20 61 6e 64 20 5b 55 50 44 41 54 45 5d 20 63 6f   and [UPDATE] co
3720: 6d 6d 61 6e 64 73 2e 0a 5e 28 54 68 65 20 5b 44  mmands..^(The [D
3730: 52 4f 50 20 54 41 42 4c 45 5d 20 63 6f 6d 6d 61  ROP TABLE] comma
3740: 6e 64 20 77 6f 72 6b 73 20 6f 6e 20 73 74 61 74  nd works on stat
3750: 69 73 74 69 63 73 20 74 61 62 6c 65 73 0a 61 73  istics tables.as
3760: 20 6f 66 20 53 51 4c 69 74 65 20 76 65 72 73 69   of SQLite versi
3770: 6f 6e 20 33 2e 37 2e 39 2e 29 5e 20 28 5b 64 61  on 3.7.9.)^ ([da
3780: 74 65 6f 66 3a 33 2e 37 2e 39 5d 29 0a 5e 54 68  teof:3.7.9]).^Th
3790: 65 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 5d 20  e [ALTER TABLE] 
37a0: 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74  command does not
37b0: 20 77 6f 72 6b 20 6f 6e 20 73 74 61 74 69 73 74   work on statist
37c0: 69 63 73 20 74 61 62 6c 65 73 2e 0a 41 70 70 72  ics tables..Appr
37d0: 6f 70 72 69 61 74 65 20 63 61 72 65 20 73 68 6f  opriate care sho
37e0: 75 6c 64 20 62 65 20 75 73 65 64 20 77 68 65 6e  uld be used when
37f0: 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 63 6f   changing the co
3800: 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 73 74 61  ntent of the sta
3810: 74 69 73 74 69 63 73 0a 74 61 62 6c 65 73 20 61  tistics.tables a
3820: 73 20 69 6e 76 61 6c 69 64 20 63 6f 6e 74 65 6e  s invalid conten
3830: 74 20 63 61 6e 20 63 61 75 73 65 20 53 51 4c 69  t can cause SQLi
3840: 74 65 20 74 6f 20 73 65 6c 65 63 74 20 69 6e 65  te to select ine
3850: 66 66 69 63 69 65 6e 74 0a 71 75 65 72 79 20 70  fficient.query p
3860: 6c 61 6e 73 2e 20 20 47 65 6e 65 72 61 6c 6c 79  lans.  Generally
3870: 20 73 70 65 61 6b 69 6e 67 2c 20 6f 6e 65 20 73   speaking, one s
3880: 68 6f 75 6c 64 20 6e 6f 74 20 6d 6f 64 69 66 79  hould not modify
3890: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
38a0: 74 68 65 20 73 74 61 74 69 73 74 69 63 73 20 74  the statistics t
38b0: 61 62 6c 65 73 20 62 79 20 61 6e 79 20 6d 65 63  ables by any mec
38c0: 68 61 6e 69 73 6d 20 6f 74 68 65 72 20 74 68 61  hanism other tha
38d0: 6e 20 69 6e 76 6f 6b 69 6e 67 20 74 68 65 0a 41  n invoking the.A
38e0: 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 2e 20  NALYZE command. 
38f0: 20 0a 53 65 65 20 22 5b 4d 61 6e 75 61 6c 20 43   .See "[Manual C
3900: 6f 6e 74 72 6f 6c 20 4f 66 20 51 75 65 72 79 20  ontrol Of Query 
3910: 50 6c 61 6e 73 20 55 73 69 6e 67 20 53 51 4c 49  Plans Using SQLI
3920: 54 45 5f 53 54 41 54 20 54 61 62 6c 65 73 5d 22  TE_STAT Tables]"
3930: 20 66 6f 72 0a 66 75 72 74 68 65 72 20 69 6e 66   for.further inf
3940: 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c  ormation.</p>..<
3950: 70 3e 20 5e 53 74 61 74 69 73 74 69 63 73 20 67  p> ^Statistics g
3960: 61 74 68 65 72 65 64 20 62 79 20 41 4e 41 4c 59  athered by ANALY
3970: 5a 45 20 61 72 65 20 6e 6f 74 20 61 75 74 6f 6d  ZE are not autom
3980: 61 74 69 63 61 6c 6c 79 20 75 70 64 61 74 65 64  atically updated
3990: 20 61 73 0a 74 68 65 20 63 6f 6e 74 65 6e 74 20   as.the content 
39a0: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
39b0: 63 68 61 6e 67 65 73 2e 20 20 49 66 20 74 68 65  changes.  If the
39c0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
39d0: 64 61 74 61 62 61 73 65 0a 63 68 61 6e 67 65 73  database.changes
39e0: 20 73 69 67 6e 69 66 69 63 61 6e 74 6c 79 2c 20   significantly, 
39f0: 6f 72 20 69 66 20 74 68 65 20 64 61 74 61 62 61  or if the databa
3a00: 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  se schema change
3a10: 73 2c 20 74 68 65 6e 20 6f 6e 65 20 73 68 6f 75  s, then one shou
3a20: 6c 64 0a 63 6f 6e 73 69 64 65 72 20 72 65 72 75  ld.consider reru
3a30: 6e 6e 69 6e 67 20 74 68 65 20 41 4e 41 4c 59 5a  nning the ANALYZ
3a40: 45 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 6f 72 64  E command in ord
3a50: 65 72 20 74 6f 20 75 70 64 61 74 65 20 74 68 65  er to update the
3a60: 20 73 74 61 74 69 73 74 69 63 73 2e 3c 2f 70 3e   statistics.</p>
3a70: 0a 0a 3c 70 3e 20 54 68 65 20 71 75 65 72 79 20  ..<p> The query 
3a80: 70 6c 61 6e 6e 65 72 20 6c 6f 61 64 73 20 74 68  planner loads th
3a90: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65  e content of the
3aa0: 20 73 74 61 74 69 73 74 69 63 73 20 74 61 62 6c   statistics tabl
3ab0: 65 73 0a 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 77  es.into memory w
3ac0: 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 69  hen the schema i
3ad0: 73 20 72 65 61 64 2e 20 20 5e 48 65 6e 63 65 2c  s read.  ^Hence,
3ae0: 20 77 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61   when an applica
3af0: 74 69 6f 6e 0a 63 68 61 6e 67 65 73 20 74 68 65  tion.changes the
3b00: 20 73 74 61 74 69 73 74 69 63 73 20 74 61 62 6c   statistics tabl
3b10: 65 73 20 64 69 72 65 63 74 6c 79 2c 20 53 51 4c  es directly, SQL
3b20: 69 74 65 20 77 69 6c 6c 20 6e 6f 74 20 69 6d 6d  ite will not imm
3b30: 65 64 69 61 74 65 6c 79 0a 6e 6f 74 69 63 65 20  ediately.notice 
3b40: 74 68 65 20 63 68 61 6e 67 65 73 2e 20 5e 41 6e  the changes. ^An
3b50: 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a 63 61 6e   application.can
3b60: 20 66 6f 72 63 65 20 74 68 65 20 71 75 65 72 79   force the query
3b70: 20 70 6c 61 6e 6e 65 72 20 74 6f 20 72 65 72 65   planner to rere
3b80: 61 64 20 74 68 65 20 73 74 61 74 69 73 74 69 63  ad the statistic
3b90: 73 20 74 61 62 6c 65 73 20 62 79 20 72 75 6e 6e  s tables by runn
3ba0: 69 6e 67 0a 3c 62 3e 41 4e 41 4c 59 5a 45 20 73  ing.<b>ANALYZE s
3bb0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 3c 2f 62 3e  qlite_master</b>
3bc0: 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 20 0a 0a 3c 74  . </p>..<p> ..<t
3bd0: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
3be0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3bf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3c00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3c10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3c20: 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41 54 54 41  ##.Section {ATTA
3c30: 43 48 20 44 41 54 41 42 41 53 45 7d 20 61 74 74  CH DATABASE} att
3c40: 61 63 68 20 7b 61 74 74 61 63 68 65 64 20 2a 41  ach {attached *A
3c50: 54 54 41 43 48 7d 0a 0a 52 65 63 75 72 73 69 76  TTACH}..Recursiv
3c60: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61  eBubbleDiagram a
3c70: 74 74 61 63 68 2d 73 74 6d 74 0a 3c 2f 74 63 6c  ttach-stmt.</tcl
3c80: 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 54 54 41  >..<p> ^The ATTA
3c90: 43 48 20 44 41 54 41 42 41 53 45 20 73 74 61 74  CH DATABASE stat
3ca0: 65 6d 65 6e 74 20 61 64 64 73 20 61 6e 6f 74 68  ement adds anoth
3cb0: 65 72 20 64 61 74 61 62 61 73 65 20 0a 66 69 6c  er database .fil
3cc0: 65 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74  e to the current
3cd0: 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65   [database conne
3ce0: 63 74 69 6f 6e 5d 2e 20 0a 44 61 74 61 62 61 73  ction]. .Databas
3cf0: 65 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 72  e files that wer
3d00: 65 20 70 72 65 76 69 6f 75 73 6c 79 20 61 74 74  e previously att
3d10: 61 63 68 65 64 20 63 61 6e 20 62 65 20 72 65 6d  ached can be rem
3d20: 6f 76 65 64 20 75 73 69 6e 67 0a 74 68 65 20 5b  oved using.the [
3d30: 44 45 54 41 43 48 20 44 41 54 41 42 41 53 45 5d  DETACH DATABASE]
3d40: 20 63 6f 6d 6d 61 6e 64 2e 0a 0a 3c 70 3e 5e 54   command...<p>^T
3d50: 68 65 20 66 69 6c 65 6e 61 6d 65 20 66 6f 72 20  he filename for 
3d60: 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f 20  the database to 
3d70: 62 65 20 61 74 74 61 63 68 65 64 20 69 73 20 74  be attached is t
3d80: 68 65 20 76 61 6c 75 65 20 6f 66 0a 74 68 65 20  he value of.the 
3d90: 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
3da0: 6f 63 63 75 72 73 20 62 65 66 6f 72 65 20 74 68  occurs before th
3db0: 65 20 41 53 20 6b 65 79 77 6f 72 64 2e 0a 5e 54  e AS keyword..^T
3dc0: 68 65 20 66 69 6c 65 6e 61 6d 65 20 6f 66 20 74  he filename of t
3dd0: 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 6c 6c  he database foll
3de0: 6f 77 73 20 74 68 65 20 73 61 6d 65 20 73 65 6d  ows the same sem
3df0: 61 6e 74 69 63 73 20 61 73 20 74 68 65 0a 66 69  antics as the.fi
3e00: 6c 65 6e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20  lename argument 
3e10: 74 6f 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e  to [sqlite3_open
3e20: 28 29 5d 20 61 6e 64 20 5b 73 71 6c 69 74 65 33  ()] and [sqlite3
3e30: 5f 6f 70 65 6e 5f 76 32 28 29 5d 3b 20 74 68 65  _open_v2()]; the
3e40: 0a 73 70 65 63 69 61 6c 20 6e 61 6d 65 20 22 5b  .special name "[
3e50: 3a 6d 65 6d 6f 72 79 3a 5d 22 20 72 65 73 75 6c  :memory:]" resul
3e60: 74 73 20 69 6e 20 61 6e 20 5b 69 6e 2d 6d 65 6d  ts in an [in-mem
3e70: 6f 72 79 20 64 61 74 61 62 61 73 65 5d 20 61 6e  ory database] an
3e80: 64 20 61 6e 0a 65 6d 70 74 79 20 73 74 72 69 6e  d an.empty strin
3e90: 67 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20 6e  g results in a n
3ea0: 65 77 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74  ew temporary dat
3eb0: 61 62 61 73 65 2e 0a 5e 54 68 65 20 66 69 6c 65  abase..^The file
3ec0: 6e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 63 61  name argument ca
3ed0: 6e 20 62 65 20 61 20 5b 55 52 49 20 66 69 6c 65  n be a [URI file
3ee0: 6e 61 6d 65 5d 20 69 66 20 55 52 49 20 66 69 6c  name] if URI fil
3ef0: 65 6e 61 6d 65 20 70 72 6f 63 65 73 73 69 6e 67  ename processing
3f00: 0a 69 73 20 65 6e 61 62 6c 65 20 6f 6e 20 74 68  .is enable on th
3f10: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
3f20: 63 74 69 6f 6e 2e 20 20 54 68 65 20 64 65 66 61  ction.  The defa
3f30: 75 6c 74 20 62 65 68 61 76 69 6f 72 20 69 73 20  ult behavior is 
3f40: 66 6f 72 0a 55 52 49 20 66 69 6c 65 6e 61 6d 65  for.URI filename
3f50: 73 20 74 6f 20 62 65 20 64 69 73 61 62 6c 65 64  s to be disabled
3f60: 2c 20 68 6f 77 65 76 65 72 20 74 68 61 74 20 6d  , however that m
3f70: 69 67 68 74 20 63 68 61 6e 67 65 20 69 6e 20 61  ight change in a
3f80: 20 66 75 74 75 72 65 20 72 65 6c 65 61 73 65 0a   future release.
3f90: 6f 66 20 53 51 4c 69 74 65 2c 20 73 6f 20 61 70  of SQLite, so ap
3fa0: 70 6c 69 63 61 74 69 6f 6e 20 64 65 76 65 6c 6f  plication develo
3fb0: 70 65 72 73 20 61 72 65 20 61 64 76 69 73 65 64  pers are advised
3fc0: 20 74 6f 20 70 6c 61 6e 20 61 63 63 6f 72 64 69   to plan accordi
3fd0: 6e 67 6c 79 2e 0a 0a 3c 70 3e 54 68 65 20 6e 61  ngly...<p>The na
3fe0: 6d 65 20 74 68 61 74 20 6f 63 63 75 72 73 20 61  me that occurs a
3ff0: 66 74 65 72 20 74 68 65 20 41 53 20 6b 65 79 77  fter the AS keyw
4000: 6f 72 64 20 69 73 20 74 68 65 20 6e 61 6d 65 20  ord is the name 
4010: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  of the database.
4020: 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20  used internally 
4030: 62 79 20 53 51 4c 69 74 65 2e 0a 5e 54 68 65 20  by SQLite..^The 
4040: 73 63 68 65 6d 61 2d 6e 61 6d 65 73 20 27 6d 61  schema-names 'ma
4050: 69 6e 27 20 61 6e 64 20 0a 27 74 65 6d 70 27 20  in' and .'temp' 
4060: 72 65 66 65 72 20 74 6f 20 74 68 65 20 6d 61 69  refer to the mai
4070: 6e 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74  n database and t
4080: 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64  he database used
4090: 20 66 6f 72 20 0a 74 65 6d 70 6f 72 61 72 79 20   for .temporary 
40a0: 74 61 62 6c 65 73 2e 20 20 5e 54 68 65 20 6d 61  tables.  ^The ma
40b0: 69 6e 20 61 6e 64 20 74 65 6d 70 20 64 61 74 61  in and temp data
40c0: 62 61 73 65 73 20 63 61 6e 6e 6f 74 20 62 65 20  bases cannot be 
40d0: 61 74 74 61 63 68 65 64 20 6f 72 0a 64 65 74 61  attached or.deta
40e0: 63 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e  ched.</p>..<p> ^
40f0: 28 54 61 62 6c 65 73 20 69 6e 20 61 6e 20 61 74  (Tables in an at
4100: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
4110: 63 61 6e 20 62 65 20 72 65 66 65 72 72 65 64 20  can be referred 
4120: 74 6f 20 75 73 69 6e 67 20 74 68 65 20 73 79 6e  to using the syn
4130: 74 61 78 20 0a 3c 69 3e 73 63 68 65 6d 61 2d 6e  tax .<i>schema-n
4140: 61 6d 65 2e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  ame.table-name</
4150: 69 3e 2e 29 5e 20 20 5e 49 66 20 74 68 65 20 6e  i>.)^  ^If the n
4160: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
4170: 20 69 73 20 75 6e 69 71 75 65 0a 61 63 72 6f 73   is unique.acros
4180: 73 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  s all attached d
4190: 61 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65  atabases and the
41a0: 20 6d 61 69 6e 20 61 6e 64 20 74 65 6d 70 20 64   main and temp d
41b0: 61 74 61 62 61 73 65 73 2c 20 74 68 65 6e 20 74  atabases, then t
41c0: 68 65 0a 3c 69 3e 73 63 68 65 6d 61 2d 6e 61 6d  he.<i>schema-nam
41d0: 65 3c 2f 69 3e 20 70 72 65 66 69 78 20 69 73 20  e</i> prefix is 
41e0: 6e 6f 74 20 72 65 71 75 69 72 65 64 2e 20 20 5e  not required.  ^
41f0: 49 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 74  If two or more t
4200: 61 62 6c 65 73 20 69 6e 0a 64 69 66 66 65 72 65  ables in.differe
4210: 6e 74 20 64 61 74 61 62 61 73 65 73 20 68 61 76  nt databases hav
4220: 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  e the same name 
4230: 61 6e 64 20 74 68 65 20 0a 3c 69 3e 73 63 68 65  and the .<i>sche
4240: 6d 61 2d 6e 61 6d 65 3c 2f 69 3e 20 70 72 65 66  ma-name</i> pref
4250: 69 78 20 69 73 20 6e 6f 74 20 75 73 65 64 20 6f  ix is not used o
4260: 6e 20 61 20 74 61 62 6c 65 20 72 65 66 65 72 65  n a table refere
4270: 6e 63 65 2c 20 74 68 65 6e 20 74 68 65 0a 74 61  nce, then the.ta
4280: 62 6c 65 20 63 68 6f 73 65 6e 20 69 73 20 74 68  ble chosen is th
4290: 65 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74  e one in the dat
42a0: 61 62 61 73 65 20 74 68 61 74 20 77 61 73 20 6c  abase that was l
42b0: 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 61 74  east recently at
42c0: 74 61 63 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  tached.</p>..<p>
42d0: 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 69  .^Transactions i
42e0: 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c  nvolving multipl
42f0: 65 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  e attached datab
4300: 61 73 65 73 20 61 72 65 20 61 74 6f 6d 69 63 2c  ases are atomic,
4310: 0a 61 73 73 75 6d 69 6e 67 20 74 68 61 74 20 74  .assuming that t
4320: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
4330: 20 69 73 20 6e 6f 74 20 22 5b 3a 6d 65 6d 6f 72   is not "[:memor
4340: 79 3a 5d 22 20 61 6e 64 20 74 68 65 20 0a 5b 6a  y:]" and the .[j
4350: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 5d 20 69 73 20  ournal_mode] is 
4360: 6e 6f 74 20 5b 57 41 4c 5d 2e 20 20 5e 28 49 66  not [WAL].  ^(If
4370: 20 74 68 65 20 6d 61 69 6e 0a 64 61 74 61 62 61   the main.databa
4380: 73 65 20 69 73 20 22 3a 6d 65 6d 6f 72 79 3a 22  se is ":memory:"
4390: 20 6f 72 20 69 66 20 74 68 65 20 6a 6f 75 72 6e   or if the journ
43a0: 61 6c 5f 6d 6f 64 65 20 69 73 20 57 41 4c 2c 20  al_mode is WAL, 
43b0: 74 68 65 6e 20 0a 74 72 61 6e 73 61 63 74 69 6f  then .transactio
43c0: 6e 73 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62  ns continue to b
43d0: 65 20 61 74 6f 6d 69 63 20 77 69 74 68 69 6e 20  e atomic within 
43e0: 65 61 63 68 20 69 6e 64 69 76 69 64 75 61 6c 0a  each individual.
43f0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 42  database file. B
4400: 75 74 20 69 66 20 74 68 65 20 68 6f 73 74 20 63  ut if the host c
4410: 6f 6d 70 75 74 65 72 20 63 72 61 73 68 65 73 20  omputer crashes 
4420: 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 0a 6f 66  in the middle.of
4430: 20 61 20 5b 43 4f 4d 4d 49 54 5d 20 77 68 65 72   a [COMMIT] wher
4440: 65 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 64 61  e two or more da
4450: 74 61 62 61 73 65 20 66 69 6c 65 73 20 61 72 65  tabase files are
4460: 20 75 70 64 61 74 65 64 2c 0a 73 6f 6d 65 20 6f   updated,.some o
4470: 66 20 74 68 6f 73 65 20 66 69 6c 65 73 20 6d 69  f those files mi
4480: 67 68 74 20 67 65 74 20 74 68 65 20 63 68 61 6e  ght get the chan
4490: 67 65 73 20 77 68 65 72 65 20 6f 74 68 65 72 73  ges where others
44a0: 0a 6d 69 67 68 74 20 6e 6f 74 2e 29 5e 0a 3c 2f  .might not.)^.</
44b0: 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 72 65 20 69  p>..<p> ^There i
44c0: 73 20 61 20 6c 69 6d 69 74 2c 20 73 65 74 20 75  s a limit, set u
44d0: 73 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f 6c 69  sing [sqlite3_li
44e0: 6d 69 74 28 29 5d 20 61 6e 64 20 0a 5b 53 51 4c  mit()] and .[SQL
44f0: 49 54 45 5f 4c 49 4d 49 54 5f 41 54 54 41 43 48  ITE_LIMIT_ATTACH
4500: 45 44 5d 2c 20 74 6f 20 74 68 65 20 6e 75 6d 62  ED], to the numb
4510: 65 72 20 6f 66 20 64 61 74 61 62 61 73 65 73 20  er of databases 
4520: 74 68 61 74 20 63 61 6e 20 62 65 0a 73 69 6d 75  that can be.simu
4530: 6c 74 61 6e 65 6f 75 73 6c 79 20 61 74 74 61 63  ltaneously attac
4540: 68 65 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20  hed to a single 
4550: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
4560: 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  ion.</p>..<tcl>.
4570: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4580: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4590: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
45a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
45b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
45c0: 53 65 63 74 69 6f 6e 20 7b 42 45 47 49 4e 20 54  Section {BEGIN T
45d0: 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e  RANSACTION} tran
45e0: 73 61 63 74 69 6f 6e 20 7b 2a 42 45 47 49 4e 20  saction {*BEGIN 
45f0: 43 4f 4d 4d 49 54 20 52 4f 4c 4c 42 41 43 4b 7d  COMMIT ROLLBACK}
4600: 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
4610: 65 44 69 61 67 72 61 6d 20 62 65 67 69 6e 2d 73  eDiagram begin-s
4620: 74 6d 74 0a 52 65 63 75 72 73 69 76 65 42 75 62  tmt.RecursiveBub
4630: 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d 6d 69  bleDiagram commi
4640: 74 2d 73 74 6d 74 0a 52 65 63 75 72 73 69 76 65  t-stmt.Recursive
4650: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 6f  BubbleDiagram ro
4660: 6c 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63  llback-stmt.</tc
4670: 6c 3e 0a 0a 3c 70 3e 0a 5e 4e 6f 20 63 68 61 6e  l>..<p>.^No chan
4680: 67 65 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20  ges can be made 
4690: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
46a0: 65 78 63 65 70 74 20 77 69 74 68 69 6e 20 61 20  except within a 
46b0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 6e  transaction..^An
46c0: 79 20 63 6f 6d 6d 61 6e 64 20 74 68 61 74 20 63  y command that c
46d0: 68 61 6e 67 65 73 20 74 68 65 20 64 61 74 61 62  hanges the datab
46e0: 61 73 65 20 28 62 61 73 69 63 61 6c 6c 79 2c 20  ase (basically, 
46f0: 61 6e 79 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a  any SQL command.
4700: 6f 74 68 65 72 20 74 68 61 6e 20 5b 53 45 4c 45  other than [SELE
4710: 43 54 5d 29 20 77 69 6c 6c 20 61 75 74 6f 6d 61  CT]) will automa
4720: 74 69 63 61 6c 6c 79 20 73 74 61 72 74 20 61 20  tically start a 
4730: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 66 0a 6f  transaction if.o
4740: 6e 65 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64  ne is not alread
4750: 79 20 69 6e 20 65 66 66 65 63 74 2e 20 20 5e 41  y in effect.  ^A
4760: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 74 61  utomatically sta
4770: 72 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  rted transaction
4780: 73 0a 61 72 65 20 63 6f 6d 6d 69 74 74 65 64 20  s.are committed 
4790: 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 71 75  when the last qu
47a0: 65 72 79 20 66 69 6e 69 73 68 65 73 2e 0a 3c 2f  ery finishes..</
47b0: 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63  p>..<p>.^Transac
47c0: 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 73 74 61  tions can be sta
47d0: 72 74 65 64 20 6d 61 6e 75 61 6c 6c 79 20 75 73  rted manually us
47e0: 69 6e 67 20 74 68 65 20 42 45 47 49 4e 0a 63 6f  ing the BEGIN.co
47f0: 6d 6d 61 6e 64 2e 20 20 5e 28 53 75 63 68 20 74  mmand.  ^(Such t
4800: 72 61 6e 73 61 63 74 69 6f 6e 73 20 75 73 75 61  ransactions usua
4810: 6c 6c 79 20 70 65 72 73 69 73 74 20 75 6e 74 69  lly persist unti
4820: 6c 20 74 68 65 20 6e 65 78 74 0a 43 4f 4d 4d 49  l the next.COMMI
4830: 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 20 63 6f  T or ROLLBACK co
4840: 6d 6d 61 6e 64 2e 20 20 42 75 74 20 61 20 74 72  mmand.  But a tr
4850: 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61  ansaction will a
4860: 6c 73 6f 20 0a 52 4f 4c 4c 42 41 43 4b 20 69 66  lso .ROLLBACK if
4870: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
4880: 20 63 6c 6f 73 65 64 20 6f 72 20 69 66 20 61 6e   closed or if an
4890: 20 65 72 72 6f 72 20 6f 63 63 75 72 73 0a 61 6e   error occurs.an
48a0: 64 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63  d the ROLLBACK c
48b0: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
48c0: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  on algorithm is 
48d0: 73 70 65 63 69 66 69 65 64 2e 29 5e 0a 53 65 65  specified.)^.See
48e0: 20 74 68 65 20 64 6f 63 75 6d 65 6e 74 61 74 69   the documentati
48f0: 6f 6e 20 6f 6e 20 74 68 65 20 5b 4f 4e 20 43 4f  on on the [ON CO
4900: 4e 46 4c 49 43 54 5d 0a 63 6c 61 75 73 65 20 66  NFLICT].clause f
4910: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
4920: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
4930: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 63 6f 6e  the ROLLBACK.con
4940: 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
4950: 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 3c 2f 70 3e   algorithm..</p>
4960: 0a 0a 3c 70 3e 0a 5e 45 4e 44 20 54 52 41 4e 53  ..<p>.^END TRANS
4970: 41 43 54 49 4f 4e 20 69 73 20 61 6e 20 61 6c 69  ACTION is an ali
4980: 61 73 20 66 6f 72 20 43 4f 4d 4d 49 54 2e 0a 3c  as for COMMIT..<
4990: 2f 70 3e 0a 0a 3c 70 3e 20 5e 28 54 72 61 6e 73  /p>..<p> ^(Trans
49a0: 61 63 74 69 6f 6e 73 20 63 72 65 61 74 65 64 20  actions created 
49b0: 75 73 69 6e 67 20 42 45 47 49 4e 2e 2e 2e 43 4f  using BEGIN...CO
49c0: 4d 4d 49 54 20 64 6f 20 6e 6f 74 20 6e 65 73 74  MMIT do not nest
49d0: 2e 29 5e 0a 5e 46 6f 72 20 6e 65 73 74 65 64 20  .)^.^For nested 
49e0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20 75 73  transactions, us
49f0: 65 20 74 68 65 20 5b 53 41 56 45 50 4f 49 4e 54  e the [SAVEPOINT
4a00: 5d 20 61 6e 64 20 5b 52 45 4c 45 41 53 45 5d 20  ] and [RELEASE] 
4a10: 63 6f 6d 6d 61 6e 64 73 2e 0a 54 68 65 20 22 54  commands..The "T
4a20: 4f 20 53 41 56 45 50 4f 49 4e 54 20 3c 79 79 74  O SAVEPOINT <yyt
4a30: 65 72 6d 3e 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  erm>name</yyterm
4a40: 3e 22 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  >" clause of the
4a50: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
4a60: 64 20 73 68 6f 77 6e 0a 69 6e 20 74 68 65 20 73  d shown.in the s
4a70: 79 6e 74 61 78 20 64 69 61 67 72 61 6d 20 61 62  yntax diagram ab
4a80: 6f 76 65 20 69 73 20 6f 6e 6c 79 20 61 70 70 6c  ove is only appl
4a90: 69 63 61 62 6c 65 20 74 6f 20 5b 53 41 56 45 50  icable to [SAVEP
4aa0: 4f 49 4e 54 5d 0a 74 72 61 6e 73 61 63 74 69 6f  OINT].transactio
4ab0: 6e 73 2e 20 20 5e 41 6e 20 61 74 74 65 6d 70 74  ns.  ^An attempt
4ac0: 20 74 6f 20 69 6e 76 6f 6b 65 20 74 68 65 20 42   to invoke the B
4ad0: 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 77 69 74  EGIN command wit
4ae0: 68 69 6e 0a 61 20 74 72 61 6e 73 61 63 74 69 6f  hin.a transactio
4af0: 6e 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68  n will fail with
4b00: 20 61 6e 20 65 72 72 6f 72 2c 20 72 65 67 61 72   an error, regar
4b10: 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
4b20: 0a 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  .the transaction
4b30: 20 77 61 73 20 73 74 61 72 74 65 64 20 62 79 20   was started by 
4b40: 5b 53 41 56 45 50 4f 49 4e 54 5d 20 6f 72 20 61  [SAVEPOINT] or a
4b50: 20 70 72 69 6f 72 20 42 45 47 49 4e 2e 0a 5e 54   prior BEGIN..^T
4b60: 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e  he COMMIT comman
4b70: 64 20 61 6e 64 20 74 68 65 20 52 4f 4c 4c 42 41  d and the ROLLBA
4b80: 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f  CK command witho
4b90: 75 74 20 74 68 65 20 54 4f 20 63 6c 61 75 73 65  ut the TO clause
4ba0: 0a 77 6f 72 6b 20 74 68 65 20 73 61 6d 65 20 6f  .work the same o
4bb0: 6e 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 74 72  n [SAVEPOINT] tr
4bc0: 61 6e 73 61 63 74 69 6f 6e 73 20 61 73 20 74 68  ansactions as th
4bd0: 65 79 20 64 6f 20 77 69 74 68 20 74 72 61 6e 73  ey do with trans
4be0: 61 63 74 69 6f 6e 73 0a 73 74 61 72 74 65 64 20  actions.started 
4bf0: 62 79 20 42 45 47 49 4e 2e 3c 2f 70 3e 0a 0a 3c  by BEGIN.</p>..<
4c00: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
4c10: 69 6d 6d 65 64 69 61 74 65 20 7b 42 45 47 49 4e  immediate {BEGIN
4c20: 20 49 4d 4d 45 44 49 41 54 45 7d 20 7b 42 45 47   IMMEDIATE} {BEG
4c30: 49 4e 20 45 58 43 4c 55 53 49 56 45 7d 3c 2f 74  IN EXCLUSIVE}</t
4c40: 63 6c 3e 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63  cl>.<p>.^Transac
4c50: 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 64 65 66  tions can be def
4c60: 65 72 72 65 64 2c 20 69 6d 6d 65 64 69 61 74 65  erred, immediate
4c70: 2c 20 6f 72 20 65 78 63 6c 75 73 69 76 65 2e 20  , or exclusive. 
4c80: 20 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20 74   .^The default t
4c90: 72 61 6e 73 61 63 74 69 6f 6e 20 62 65 68 61 76  ransaction behav
4ca0: 69 6f 72 20 69 73 20 64 65 66 65 72 72 65 64 2e  ior is deferred.
4cb0: 0a 5e 44 65 66 65 72 72 65 64 20 6d 65 61 6e 73  .^Deferred means
4cc0: 20 74 68 61 74 20 6e 6f 20 6c 6f 63 6b 73 20 61   that no locks a
4cd0: 72 65 20 61 63 71 75 69 72 65 64 0a 6f 6e 20 74  re acquired.on t
4ce0: 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 74 69  he database unti
4cf0: 6c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  l the database i
4d00: 73 20 66 69 72 73 74 20 61 63 63 65 73 73 65 64  s first accessed
4d10: 2e 20 20 5e 54 68 75 73 20 77 69 74 68 20 61 0a  .  ^Thus with a.
4d20: 64 65 66 65 72 72 65 64 20 74 72 61 6e 73 61 63  deferred transac
4d30: 74 69 6f 6e 2c 20 74 68 65 20 42 45 47 49 4e 20  tion, the BEGIN 
4d40: 73 74 61 74 65 6d 65 6e 74 20 69 74 73 65 6c 66  statement itself
4d50: 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67 20 74 6f   does nothing to
4d60: 20 74 68 65 0a 66 69 6c 65 73 79 73 74 65 6d 2e   the.filesystem.
4d70: 20 20 5e 4c 6f 63 6b 73 0a 61 72 65 20 6e 6f 74    ^Locks.are not
4d80: 20 61 63 71 75 69 72 65 64 20 75 6e 74 69 6c 20   acquired until 
4d90: 74 68 65 20 66 69 72 73 74 20 72 65 61 64 20 6f  the first read o
4da0: 72 20 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f  r write operatio
4db0: 6e 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20 72  n.  ^The first r
4dc0: 65 61 64 0a 6f 70 65 72 61 74 69 6f 6e 20 61 67  ead.operation ag
4dd0: 61 69 6e 73 74 20 61 20 64 61 74 61 62 61 73 65  ainst a database
4de0: 20 63 72 65 61 74 65 73 20 61 20 5b 53 48 41 52   creates a [SHAR
4df0: 45 44 5d 20 6c 6f 63 6b 20 61 6e 64 20 74 68 65  ED] lock and the
4e00: 20 66 69 72 73 74 0a 77 72 69 74 65 20 6f 70 65   first.write ope
4e10: 72 61 74 69 6f 6e 20 63 72 65 61 74 65 73 20 61  ration creates a
4e20: 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b   [RESERVED] lock
4e30: 2e 20 20 20 5e 42 65 63 61 75 73 65 20 74 68 65  .   ^Because the
4e40: 20 61 63 71 75 69 73 69 74 69 6f 6e 20 6f 66 0a   acquisition of.
4e50: 6c 6f 63 6b 73 20 69 73 20 64 65 66 65 72 72 65  locks is deferre
4e60: 64 20 75 6e 74 69 6c 20 74 68 65 79 20 61 72 65  d until they are
4e70: 20 6e 65 65 64 65 64 2c 20 69 74 20 69 73 20 70   needed, it is p
4e80: 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f  ossible that ano
4e90: 74 68 65 72 0a 74 68 72 65 61 64 20 6f 72 20 70  ther.thread or p
4ea0: 72 6f 63 65 73 73 20 63 6f 75 6c 64 20 63 72 65  rocess could cre
4eb0: 61 74 65 20 61 20 73 65 70 61 72 61 74 65 20 74  ate a separate t
4ec0: 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 77  ransaction and w
4ed0: 72 69 74 65 20 74 6f 0a 74 68 65 20 64 61 74 61  rite to.the data
4ee0: 62 61 73 65 20 61 66 74 65 72 20 74 68 65 20 42  base after the B
4ef0: 45 47 49 4e 20 6f 6e 20 74 68 65 20 63 75 72 72  EGIN on the curr
4f00: 65 6e 74 20 74 68 72 65 61 64 20 68 61 73 20 65  ent thread has e
4f10: 78 65 63 75 74 65 64 2e 0a 5e 49 66 20 74 68 65  xecuted..^If the
4f20: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
4f30: 69 6d 6d 65 64 69 61 74 65 2c 20 74 68 65 6e 20  immediate, then 
4f40: 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b 73  [RESERVED] locks
4f50: 0a 61 72 65 20 61 63 71 75 69 72 65 64 20 6f 6e  .are acquired on
4f60: 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73 20 61   all databases a
4f70: 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 42 45  s soon as the BE
4f80: 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 69 73 0a 65  GIN command is.e
4f90: 78 65 63 75 74 65 64 2c 20 77 69 74 68 6f 75 74  xecuted, without
4fa0: 20 77 61 69 74 69 6e 67 20 66 6f 72 20 74 68 65   waiting for the
4fb0: 0a 64 61 74 61 62 61 73 65 20 74 6f 20 62 65 20  .database to be 
4fc0: 75 73 65 64 2e 20 20 5e 41 66 74 65 72 20 61 20  used.  ^After a 
4fd0: 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 2c  BEGIN IMMEDIATE,
4fe0: 20 0a 6e 6f 20 6f 74 68 65 72 20 5b 64 61 74 61   .no other [data
4ff0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d  base connection]
5000: 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f   will be able to
5010: 20 77 72 69 74 65 20 74 6f 20 74 68 65 20 64 61   write to the da
5020: 74 61 62 61 73 65 20 6f 72 0a 64 6f 20 61 20 42  tabase or.do a B
5030: 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 20 6f  EGIN IMMEDIATE o
5040: 72 20 42 45 47 49 4e 20 45 58 43 4c 55 53 49 56  r BEGIN EXCLUSIV
5050: 45 2e 20 20 5e 4f 74 68 65 72 20 70 72 6f 63 65  E.  ^Other proce
5060: 73 73 65 73 20 63 61 6e 20 63 6f 6e 74 69 6e 75  sses can continu
5070: 65 0a 74 6f 20 72 65 61 64 20 66 72 6f 6d 20 74  e.to read from t
5080: 68 65 20 64 61 74 61 62 61 73 65 2c 20 68 6f 77  he database, how
5090: 65 76 65 72 2e 20 20 5e 41 6e 20 65 78 63 6c 75  ever.  ^An exclu
50a0: 73 69 76 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  sive transaction
50b0: 20 63 61 75 73 65 73 0a 5b 45 58 43 4c 55 53 49   causes.[EXCLUSI
50c0: 56 45 5d 20 6c 6f 63 6b 73 20 74 6f 20 62 65 20  VE] locks to be 
50d0: 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20  acquired on all 
50e0: 64 61 74 61 62 61 73 65 73 2e 20 20 5e 41 66 74  databases.  ^Aft
50f0: 65 72 20 61 20 42 45 47 49 4e 0a 45 58 43 4c 55  er a BEGIN.EXCLU
5100: 53 49 56 45 2c 20 6e 6f 20 6f 74 68 65 72 20 5b  SIVE, no other [
5110: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
5120: 69 6f 6e 5d 20 65 78 63 65 70 74 20 66 6f 72 20  ion] except for 
5130: 5b 72 65 61 64 5f 75 6e 63 6f 6d 6d 69 74 74 65  [read_uncommitte
5140: 64 5d 0a 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 77  d].connections w
5150: 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 72  ill be able to r
5160: 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ead the database
5170: 20 61 6e 64 20 6e 6f 20 6f 74 68 65 72 20 63 6f   and no other co
5180: 6e 6e 65 63 74 69 6f 6e 20 77 69 74 68 6f 75 74  nnection without
5190: 0a 65 78 63 65 70 74 69 6f 6e 20 77 69 6c 6c 20  .exception will 
51a0: 62 65 20 61 62 6c 65 20 74 6f 20 77 72 69 74 65  be able to write
51b0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75 6e   the database un
51c0: 74 69 6c 20 74 68 65 20 74 72 61 6e 73 61 63 74  til the transact
51d0: 69 6f 6e 20 69 73 0a 63 6f 6d 70 6c 65 74 65 2e  ion is.complete.
51e0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28 41 6e 20  .</p>..<p>.^(An 
51f0: 69 6d 70 6c 69 63 69 74 20 74 72 61 6e 73 61 63  implicit transac
5200: 74 69 6f 6e 20 28 61 20 74 72 61 6e 73 61 63 74  tion (a transact
5210: 69 6f 6e 20 74 68 61 74 20 69 73 20 73 74 61 72  ion that is star
5220: 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
5230: 79 2c 0a 6e 6f 74 20 61 20 74 72 61 6e 73 61 63  y,.not a transac
5240: 74 69 6f 6e 20 73 74 61 72 74 65 64 20 62 79 20  tion started by 
5250: 42 45 47 49 4e 29 20 69 73 20 63 6f 6d 6d 69 74  BEGIN) is commit
5260: 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
5270: 79 20 77 68 65 6e 0a 74 68 65 20 6c 61 73 74 20  y when.the last 
5280: 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
5290: 20 66 69 6e 69 73 68 65 73 2e 20 20 41 20 73 74   finishes.  A st
52a0: 61 74 65 6d 65 6e 74 20 66 69 6e 69 73 68 65 73  atement finishes
52b0: 20 77 68 65 6e 20 69 74 73 0a 70 72 65 70 61 72   when its.prepar
52c0: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
52d0: 5b 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29  [sqlite3_reset()
52e0: 20 7c 20 72 65 73 65 74 5d 20 6f 72 0a 5b 73 71   | reset] or.[sq
52f0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29  lite3_finalize()
5300: 20 7c 20 66 69 6e 61 6c 69 7a 65 64 5d 2e 20 20   | finalized].  
5310: 41 6e 20 6f 70 65 6e 20 5b 73 71 6c 69 74 65 33  An open [sqlite3
5320: 5f 62 6c 6f 62 5d 20 75 73 65 64 20 66 6f 72 0a  _blob] used for.
5330: 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42  incremental BLOB
5340: 20 49 2f 4f 20 63 6f 75 6e 74 73 20 61 73 20 61   I/O counts as a
5350: 6e 20 75 6e 66 69 6e 69 73 68 65 64 20 73 74 61  n unfinished sta
5360: 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 5b 73 71  tement.  The [sq
5370: 6c 69 74 65 33 5f 62 6c 6f 62 5d 0a 66 69 6e 69  lite3_blob].fini
5380: 73 68 65 73 20 77 68 65 6e 20 69 74 20 69 73 20  shes when it is 
5390: 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 63 6c  [sqlite3_blob_cl
53a0: 6f 73 65 28 29 20 7c 20 63 6c 6f 73 65 64 5d 2e  ose() | closed].
53b0: 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 68  )^.</p>..<p>.^Th
53c0: 65 20 65 78 70 6c 69 63 69 74 20 43 4f 4d 4d 49  e explicit COMMI
53d0: 54 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73 20 69  T command runs i
53e0: 6d 6d 65 64 69 61 74 65 6c 79 2c 20 65 76 65 6e  mmediately, even
53f0: 20 69 66 20 74 68 65 72 65 20 61 72 65 0a 70 65   if there are.pe
5400: 6e 64 69 6e 67 20 5b 53 45 4c 45 43 54 5d 20 73  nding [SELECT] s
5410: 74 61 74 65 6d 65 6e 74 73 2e 20 20 5e 48 6f 77  tatements.  ^How
5420: 65 76 65 72 2c 20 69 66 20 74 68 65 72 65 20 61  ever, if there a
5430: 72 65 20 70 65 6e 64 69 6e 67 0a 77 72 69 74 65  re pending.write
5440: 20 6f 70 65 72 61 74 69 6f 6e 73 2c 20 74 68 65   operations, the
5450: 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 0a   COMMIT command.
5460: 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61  will fail with a
5470: 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 5b 53 51  n error code [SQ
5480: 4c 49 54 45 5f 42 55 53 59 5d 2e 0a 3c 2f 70 3e  LITE_BUSY]..</p>
5490: 0a 0a 3c 70 3e 0a 5e 41 6e 20 61 74 74 65 6d 70  ..<p>.^An attemp
54a0: 74 20 74 6f 20 65 78 65 63 75 74 65 20 43 4f 4d  t to execute COM
54b0: 4d 49 54 20 6d 69 67 68 74 20 61 6c 73 6f 20 72  MIT might also r
54c0: 65 73 75 6c 74 20 69 6e 20 61 6e 20 5b 53 51 4c  esult in an [SQL
54d0: 49 54 45 5f 42 55 53 59 5d 20 72 65 74 75 72 6e  ITE_BUSY] return
54e0: 20 63 6f 64 65 0a 69 66 20 61 6e 20 61 6e 6f 74   code.if an anot
54f0: 68 65 72 20 74 68 72 65 61 64 20 6f 72 20 70 72  her thread or pr
5500: 6f 63 65 73 73 20 68 61 73 20 61 20 5b 73 68 61  ocess has a [sha
5510: 72 65 64 20 6c 6f 63 6b 5d 20 6f 6e 20 74 68 65  red lock] on the
5520: 20 64 61 74 61 62 61 73 65 0a 74 68 61 74 20 70   database.that p
5530: 72 65 76 65 6e 74 65 64 20 74 68 65 20 64 61 74  revented the dat
5540: 61 62 61 73 65 20 66 72 6f 6d 20 62 65 69 6e 67  abase from being
5550: 20 75 70 64 61 74 65 64 2e 20 20 5e 57 68 65 6e   updated.  ^When
5560: 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 6e   COMMIT fails in
5570: 20 74 68 69 73 0a 77 61 79 2c 20 74 68 65 20 74   this.way, the t
5580: 72 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69  ransaction remai
5590: 6e 73 20 61 63 74 69 76 65 20 61 6e 64 20 74 68  ns active and th
55a0: 65 20 43 4f 4d 4d 49 54 20 63 61 6e 20 62 65 20  e COMMIT can be 
55b0: 72 65 74 72 69 65 64 20 6c 61 74 65 72 0a 61 66  retried later.af
55c0: 74 65 72 20 74 68 65 20 72 65 61 64 65 72 20 68  ter the reader h
55d0: 61 73 20 68 61 64 20 61 20 63 68 61 6e 63 65 20  as had a chance 
55e0: 74 6f 20 63 6c 65 61 72 2e 0a 3c 2f 70 3e 0a 0a  to clear..</p>..
55f0: 3c 70 3e 0a 49 6e 20 76 65 72 79 20 6f 6c 64 20  <p>.In very old 
5600: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
5610: 74 65 20 28 62 65 66 6f 72 65 20 76 65 72 73 69  te (before versi
5620: 6f 6e 20 33 2e 37 2e 31 31 20 2d 20 5b 64 61 74  on 3.7.11 - [dat
5630: 65 6f 66 3a 33 2e 37 2e 31 31 5d 29 0a 74 68 65  eof:3.7.11]).the
5640: 20 52 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c 20 66   ROLLBACK will f
5650: 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f  ail with an erro
5660: 72 20 63 6f 64 65 20 0a 5b 53 51 4c 49 54 45 5f  r code .[SQLITE_
5670: 42 55 53 59 5d 20 69 66 20 74 68 65 72 65 20 61  BUSY] if there a
5680: 72 65 20 61 6e 79 20 70 65 6e 64 69 6e 67 20 71  re any pending q
5690: 75 65 72 69 65 73 2e 20 20 5e 49 6e 20 6d 6f 72  ueries.  ^In mor
56a0: 65 20 72 65 63 65 6e 74 0a 76 65 72 73 69 6f 6e  e recent.version
56b0: 73 20 6f 66 20 53 51 4c 69 74 65 2c 20 74 68 65  s of SQLite, the
56c0: 20 52 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c 20 70   ROLLBACK will p
56d0: 72 6f 63 65 65 64 20 61 6e 64 20 70 65 6e 64 69  roceed and pendi
56e0: 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 0a 77 69  ng statements.wi
56f0: 6c 6c 20 6f 66 74 65 6e 20 62 65 20 61 62 6f 72  ll often be abor
5700: 74 65 64 2c 20 63 61 75 73 69 6e 67 20 74 68 65  ted, causing the
5710: 6d 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 5b  m to return an [
5720: 53 51 4c 49 54 45 5f 41 42 4f 52 54 5d 20 6f 72  SQLITE_ABORT] or
5730: 0a 5b 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52  .[SQLITE_ABORT_R
5740: 4f 4c 4c 42 41 43 4b 5d 20 65 72 72 6f 72 2e 0a  OLLBACK] error..
5750: 5e 49 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69  ^In SQLite versi
5760: 6f 6e 20 33 2e 38 2e 38 20 28 5b 64 61 74 65 6f  on 3.8.8 ([dateo
5770: 66 3a 33 2e 38 2e 38 5d 29 20 61 6e 64 20 6c 61  f:3.8.8]) and la
5780: 74 65 72 2c 0a 61 20 70 65 6e 64 69 6e 67 20 72  ter,.a pending r
5790: 65 61 64 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75  ead will continu
57a0: 65 20 66 75 6e 63 74 69 6f 6e 69 6e 67 0a 61 66  e functioning.af
57b0: 74 65 72 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  ter the ROLLBACK
57c0: 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68 65 20   as long as the 
57d0: 52 4f 4c 4c 42 41 43 4b 20 64 6f 65 73 20 6e 6f  ROLLBACK does no
57e0: 74 20 6d 6f 64 69 66 79 20 74 68 65 20 64 61 74  t modify the dat
57f0: 61 62 61 73 65 0a 73 63 68 65 6d 61 2e 0a 3c 2f  abase.schema..</
5800: 70 3e 0a 0a 3c 70 3e 0a 49 66 20 5b 50 52 41 47  p>..<p>.If [PRAG
5810: 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 5d  MA journal_mode]
5820: 20 69 73 20 73 65 74 20 74 6f 20 4f 46 46 20 28   is set to OFF (
5830: 74 68 75 73 20 64 69 73 61 62 6c 69 6e 67 20 74  thus disabling t
5840: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
5850: 6e 61 6c 0a 66 69 6c 65 29 20 74 68 65 6e 20 74  nal.file) then t
5860: 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74  he behavior of t
5870: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d  he ROLLBACK comm
5880: 61 6e 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  and is undefined
5890: 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73 70  ..</p>..<h3>Resp
58a0: 6f 6e 73 65 20 54 6f 20 45 72 72 6f 72 73 20 57  onse To Errors W
58b0: 69 74 68 69 6e 20 41 20 54 72 61 6e 73 61 63 74  ithin A Transact
58c0: 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 5e 28  ion</h3>..<p> ^(
58d0: 49 66 20 63 65 72 74 61 69 6e 20 6b 69 6e 64 73  If certain kinds
58e0: 20 6f 66 20 65 72 72 6f 72 73 20 6f 63 63 75 72   of errors occur
58f0: 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
5900: 63 74 69 6f 6e 2c 20 74 68 65 0a 74 72 61 6e 73  ction, the.trans
5910: 61 63 74 69 6f 6e 20 6d 61 79 20 6f 72 20 6d 61  action may or ma
5920: 79 20 6e 6f 74 20 62 65 20 72 6f 6c 6c 65 64 20  y not be rolled 
5930: 62 61 63 6b 20 61 75 74 6f 6d 61 74 69 63 61 6c  back automatical
5940: 6c 79 2e 20 20 54 68 65 0a 65 72 72 6f 72 73 20  ly.  The.errors 
5950: 74 68 61 74 20 63 61 6e 20 63 61 75 73 65 20 61  that can cause a
5960: 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 6c 6c  n automatic roll
5970: 62 61 63 6b 20 69 6e 63 6c 75 64 65 3a 3c 2f 70  back include:</p
5980: 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20 5b 53 51  >..<ul>.<li> [SQ
5990: 4c 49 54 45 5f 46 55 4c 4c 5d 3a 20 64 61 74 61  LITE_FULL]: data
59a0: 62 61 73 65 20 6f 72 20 64 69 73 6b 20 66 75 6c  base or disk ful
59b0: 6c 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 49  l.<li> [SQLITE_I
59c0: 4f 45 52 52 5d 3a 20 64 69 73 6b 20 49 2f 4f 20  OERR]: disk I/O 
59d0: 65 72 72 6f 72 0a 3c 6c 69 3e 20 5b 53 51 4c 49  error.<li> [SQLI
59e0: 54 45 5f 42 55 53 59 5d 3a 20 64 61 74 61 62 61  TE_BUSY]: databa
59f0: 73 65 20 69 6e 20 75 73 65 20 62 79 20 61 6e 6f  se in use by ano
5a00: 74 68 65 72 20 70 72 6f 63 65 73 73 0a 3c 6c 69  ther process.<li
5a10: 3e 20 5b 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5d  > [SQLITE_NOMEM]
5a20: 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f 72 79 0a  : out or memory.
5a30: 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 46 6f  </ul>)^..<p>.^Fo
5a40: 72 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20 65  r all of these e
5a50: 72 72 6f 72 73 2c 20 53 51 4c 69 74 65 20 61 74  rrors, SQLite at
5a60: 74 65 6d 70 74 73 20 74 6f 20 75 6e 64 6f 20 6a  tempts to undo j
5a70: 75 73 74 20 74 68 65 20 6f 6e 65 20 73 74 61 74  ust the one stat
5a80: 65 6d 65 6e 74 0a 69 74 20 77 61 73 20 77 6f 72  ement.it was wor
5a90: 6b 69 6e 67 20 6f 6e 20 61 6e 64 20 6c 65 61 76  king on and leav
5aa0: 65 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 70  e changes from p
5ab0: 72 69 6f 72 20 73 74 61 74 65 6d 65 6e 74 73 20  rior statements 
5ac0: 77 69 74 68 69 6e 20 74 68 65 0a 73 61 6d 65 20  within the.same 
5ad0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e 74 61  transaction inta
5ae0: 63 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20  ct and continue 
5af0: 77 69 74 68 20 74 68 65 20 74 72 61 6e 73 61 63  with the transac
5b00: 74 69 6f 6e 2e 20 20 5e 48 6f 77 65 76 65 72 2c  tion.  ^However,
5b10: 20 0a 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74   .depending on t
5b20: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  he statement bei
5b30: 6e 67 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64  ng evaluated and
5b40: 20 74 68 65 20 70 6f 69 6e 74 20 61 74 20 77 68   the point at wh
5b50: 69 63 68 20 74 68 65 0a 65 72 72 6f 72 20 6f 63  ich the.error oc
5b60: 63 75 72 73 2c 20 69 74 20 6d 69 67 68 74 20 62  curs, it might b
5b70: 65 20 6e 65 63 65 73 73 61 72 79 20 66 6f 72 20  e necessary for 
5b80: 53 51 4c 69 74 65 20 74 6f 20 72 6f 6c 6c 62 61  SQLite to rollba
5b90: 63 6b 20 61 6e 64 0a 63 61 6e 63 65 6c 20 74 68  ck and.cancel th
5ba0: 65 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63  e entire transac
5bb0: 74 69 6f 6e 2e 20 20 5e 41 6e 20 61 70 70 6c 69  tion.  ^An appli
5bc0: 63 61 74 69 6f 6e 20 63 61 6e 20 74 65 6c 6c 20  cation can tell 
5bd0: 77 68 69 63 68 0a 63 6f 75 72 73 65 20 6f 66 20  which.course of 
5be0: 61 63 74 69 6f 6e 20 53 51 4c 69 74 65 20 74 6f  action SQLite to
5bf0: 6f 6b 20 62 79 20 75 73 69 6e 67 20 74 68 65 0a  ok by using the.
5c00: 5b 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74  [sqlite3_get_aut
5c10: 6f 63 6f 6d 6d 69 74 28 29 5d 20 43 2d 6c 61 6e  ocommit()] C-lan
5c20: 67 75 61 67 65 20 69 6e 74 65 72 66 61 63 65 2e  guage interface.
5c30: 3c 2f 70 3e 0a 0a 3c 70 3e 49 74 20 69 73 20 72  </p>..<p>It is r
5c40: 65 63 6f 6d 6d 65 6e 64 65 64 20 74 68 61 74 20  ecommended that 
5c50: 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 72 65 73  applications res
5c60: 70 6f 6e 64 20 74 6f 20 74 68 65 20 65 72 72 6f  pond to the erro
5c70: 72 73 0a 6c 69 73 74 65 64 20 61 62 6f 76 65 20  rs.listed above 
5c80: 62 79 20 65 78 70 6c 69 63 69 74 6c 79 20 69 73  by explicitly is
5c90: 73 75 69 6e 67 20 61 20 52 4f 4c 4c 42 41 43 4b  suing a ROLLBACK
5ca0: 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 49 66 20 74   command.  ^If t
5cb0: 68 65 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20  he .transaction 
5cc0: 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e  has already been
5cd0: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 75 74   rolled back aut
5ce0: 6f 6d 61 74 69 63 61 6c 6c 79 0a 62 79 20 74 68  omatically.by th
5cf0: 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73 65  e error response
5d00: 2c 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42  , then the ROLLB
5d10: 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c  ACK command will
5d20: 20 66 61 69 6c 20 77 69 74 68 20 61 6e 0a 65 72   fail with an.er
5d30: 72 6f 72 2c 20 62 75 74 20 6e 6f 20 68 61 72 6d  ror, but no harm
5d40: 20 69 73 20 63 61 75 73 65 64 20 62 79 20 74 68   is caused by th
5d50: 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46 75 74 75  is.</p>..<p>Futu
5d60: 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  re versions of S
5d70: 51 4c 69 74 65 20 6d 61 79 20 65 78 74 65 6e 64  QLite may extend
5d80: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65 72 72   the list of err
5d90: 6f 72 73 20 77 68 69 63 68 0a 6d 69 67 68 74 20  ors which.might 
5da0: 63 61 75 73 65 20 61 75 74 6f 6d 61 74 69 63 20  cause automatic 
5db0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f 6c 6c  transaction roll
5dc0: 62 61 63 6b 2e 20 20 46 75 74 75 72 65 20 76 65  back.  Future ve
5dd0: 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65  rsions of.SQLite
5de0: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 74 68   might change th
5df0: 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73 65  e error response
5e00: 2e 20 20 49 6e 20 70 61 72 74 69 63 75 6c 61 72  .  In particular
5e10: 2c 20 77 65 20 6d 61 79 0a 63 68 6f 6f 73 65 20  , we may.choose 
5e20: 74 6f 20 73 69 6d 70 6c 69 66 79 20 74 68 65 20  to simplify the 
5e30: 69 6e 74 65 72 66 61 63 65 20 69 6e 20 66 75 74  interface in fut
5e40: 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ure versions of 
5e50: 53 51 4c 69 74 65 20 62 79 0a 63 61 75 73 69 6e  SQLite by.causin
5e60: 67 20 74 68 65 20 65 72 72 6f 72 73 20 61 62 6f  g the errors abo
5e70: 76 65 20 74 6f 20 66 6f 72 63 65 20 61 6e 20 75  ve to force an u
5e80: 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 72 6f 6c  nconditional rol
5e90: 6c 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  lback.</p>..<tcl
5ea0: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
5eb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ec0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ed0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ee0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ef0: 23 0a 53 65 63 74 69 6f 6e 20 7b 53 41 56 45 50  #.Section {SAVEP
5f00: 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74 20  OINT} savepoint 
5f10: 7b 53 41 56 45 50 4f 49 4e 54 20 52 45 4c 45 41  {SAVEPOINT RELEA
5f20: 53 45 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  SE}..RecursiveBu
5f30: 62 62 6c 65 44 69 61 67 72 61 6d 20 73 61 76 65  bbleDiagram save
5f40: 70 6f 69 6e 74 2d 73 74 6d 74 0a 52 65 63 75 72  point-stmt.Recur
5f50: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
5f60: 6d 20 72 65 6c 65 61 73 65 2d 73 74 6d 74 0a 52  m release-stmt.R
5f70: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
5f80: 61 67 72 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d 73  agram rollback-s
5f90: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20  tmt.</tcl>..<p> 
5fa0: 5e 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20  ^SAVEPOINTs are 
5fb0: 61 20 6d 65 74 68 6f 64 20 6f 66 20 63 72 65 61  a method of crea
5fc0: 74 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e  ting transaction
5fd0: 73 2c 20 73 69 6d 69 6c 61 72 20 74 6f 0a 5b 42  s, similar to.[B
5fe0: 45 47 49 4e 5d 20 61 6e 64 20 5b 43 4f 4d 4d 49  EGIN] and [COMMI
5ff0: 54 5d 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  T], except that 
6000: 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 61 6e  the SAVEPOINT an
6010: 64 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  d RELEASE comman
6020: 64 73 0a 61 72 65 20 6e 61 6d 65 64 20 61 6e 64  ds.are named and
6030: 20 6d 61 79 20 62 65 20 6e 65 73 74 65 64 2e 3c   may be nested.<
6040: 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 53 41  /p>..<p> ^The SA
6050: 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 20  VEPOINT command 
6060: 73 74 61 72 74 73 20 61 20 6e 65 77 20 74 72 61  starts a new tra
6070: 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 20 61 20  nsaction with a 
6080: 6e 61 6d 65 2e 0a 5e 54 68 65 20 74 72 61 6e 73  name..^The trans
6090: 61 63 74 69 6f 6e 20 6e 61 6d 65 73 20 6e 65 65  action names nee
60a0: 64 20 6e 6f 74 20 62 65 20 75 6e 69 71 75 65 2e  d not be unique.
60b0: 0a 5e 28 41 20 53 41 56 45 50 4f 49 4e 54 20 63  .^(A SAVEPOINT c
60c0: 61 6e 20 62 65 20 73 74 61 72 74 65 64 20 65 69  an be started ei
60d0: 74 68 65 72 20 77 69 74 68 69 6e 20 6f 72 20 6f  ther within or o
60e0: 75 74 73 69 64 65 20 6f 66 0a 61 20 5b 42 45 47  utside of.a [BEG
60f0: 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e 29  IN]...[COMMIT].)
6100: 5e 20 20 5e 28 57 68 65 6e 20 61 20 53 41 56 45  ^  ^(When a SAVE
6110: 50 4f 49 4e 54 20 69 73 20 74 68 65 20 6f 75 74  POINT is the out
6120: 65 72 2d 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e  er-most savepoin
6130: 74 0a 61 6e 64 20 69 74 20 69 73 20 6e 6f 74 20  t.and it is not 
6140: 77 69 74 68 69 6e 20 61 20 5b 42 45 47 49 4e 5d  within a [BEGIN]
6150: 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 20 74 68 65 6e  ...[COMMIT] then
6160: 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73   the behavior is
6170: 20 74 68 65 0a 73 61 6d 65 20 61 73 20 42 45 47   the.same as BEG
6180: 49 4e 20 44 45 46 45 52 52 45 44 20 54 52 41 4e  IN DEFERRED TRAN
6190: 53 41 43 54 49 4f 4e 2e 29 5e 3c 2f 70 3e 0a 0a  SACTION.)^</p>..
61a0: 3c 70 3e 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b  <p>^The ROLLBACK
61b0: 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 76 65   TO command reve
61c0: 72 74 73 20 74 68 65 20 73 74 61 74 65 20 6f 66  rts the state of
61d0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62 61   the database ba
61e0: 63 6b 20 74 6f 20 77 68 61 74 0a 69 74 20 77 61  ck to what.it wa
61f0: 73 20 6a 75 73 74 20 61 66 74 65 72 20 74 68 65  s just after the
6200: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 53   corresponding S
6210: 41 56 45 50 4f 49 4e 54 2e 20 20 5e 4e 6f 74 65  AVEPOINT.  ^Note
6220: 20 74 68 61 74 20 75 6e 6c 69 6b 65 20 74 68 61   that unlike tha
6230: 74 0a 70 6c 61 69 6e 20 5b 52 4f 4c 4c 42 41 43  t.plain [ROLLBAC
6240: 4b 5d 20 63 6f 6d 6d 61 6e 64 20 28 77 69 74 68  K] command (with
6250: 6f 75 74 20 74 68 65 20 54 4f 20 6b 65 79 77 6f  out the TO keywo
6260: 72 64 29 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  rd) the ROLLBACK
6270: 20 54 4f 20 63 6f 6d 6d 61 6e 64 0a 64 6f 65 73   TO command.does
6280: 20 6e 6f 74 20 63 61 6e 63 65 6c 20 74 68 65 20   not cancel the 
6290: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 49  transaction.  ^I
62a0: 6e 73 74 65 61 64 20 6f 66 20 63 61 6e 63 65 6c  nstead of cancel
62b0: 6c 69 6e 67 20 74 68 65 20 74 72 61 6e 73 61 63  ling the transac
62c0: 74 69 6f 6e 2c 0a 74 68 65 20 52 4f 4c 4c 42 41  tion,.the ROLLBA
62d0: 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65  CK TO command re
62e0: 73 74 61 72 74 73 20 74 68 65 20 74 72 61 6e 73  starts the trans
62f0: 61 63 74 69 6f 6e 20 61 67 61 69 6e 20 61 74 20  action again at 
6300: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 5e  the beginning..^
6310: 41 6c 6c 20 69 6e 74 65 72 76 65 6e 69 6e 67 20  All intervening 
6320: 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20 63  SAVEPOINTs are c
6330: 61 6e 63 65 6c 65 64 2c 20 68 6f 77 65 76 65 72  anceled, however
6340: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52  .</p>..<p>^The R
6350: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 69  ELEASE command i
6360: 73 20 6c 69 6b 65 20 61 20 5b 43 4f 4d 4d 49 54  s like a [COMMIT
6370: 5d 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49 4e  ] for a SAVEPOIN
6380: 54 2e 0a 5e 54 68 65 20 52 45 4c 45 41 53 45 20  T..^The RELEASE 
6390: 63 6f 6d 6d 61 6e 64 20 63 61 75 73 65 73 20 61  command causes a
63a0: 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73 20 62 61  ll savepoints ba
63b0: 63 6b 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64  ck to and includ
63c0: 69 6e 67 20 74 68 65 20 0a 6d 6f 73 74 20 72 65  ing the .most re
63d0: 63 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 77  cent savepoint w
63e0: 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e  ith a matching n
63f0: 61 6d 65 20 74 6f 20 62 65 20 72 65 6d 6f 76 65  ame to be remove
6400: 64 20 66 72 6f 6d 20 74 68 65 20 0a 74 72 61 6e  d from the .tran
6410: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2e 20 20  saction stack.  
6420: 5e 54 68 65 20 52 45 4c 45 41 53 45 20 6f 66 20  ^The RELEASE of 
6430: 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63  an inner transac
6440: 74 69 6f 6e 0a 64 6f 65 73 20 6e 6f 74 20 63 61  tion.does not ca
6450: 75 73 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20  use any changes 
6460: 74 6f 20 62 65 20 77 72 69 74 74 65 6e 20 74 6f  to be written to
6470: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
6480: 6c 65 3b 20 69 74 20 6d 65 72 65 6c 79 0a 72 65  le; it merely.re
6490: 6d 6f 76 65 73 20 73 61 76 65 70 6f 69 6e 74 73  moves savepoints
64a0: 20 66 72 6f 6d 20 74 68 65 20 74 72 61 6e 73 61   from the transa
64b0: 63 74 69 6f 6e 20 73 74 61 63 6b 20 73 75 63 68  ction stack such
64c0: 20 74 68 61 74 20 69 74 20 69 73 0a 6e 6f 20 6c   that it is.no l
64d0: 6f 6e 67 65 72 20 70 6f 73 73 69 62 6c 65 20 74  onger possible t
64e0: 6f 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 74 68  o ROLLBACK TO th
64f0: 6f 73 65 20 73 61 76 65 70 6f 69 6e 74 73 2e 0a  ose savepoints..
6500: 5e 49 66 20 61 20 52 45 4c 45 41 53 45 20 63 6f  ^If a RELEASE co
6510: 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20 74  mmand releases t
6520: 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76  he outermost sav
6530: 65 70 6f 69 6e 74 2c 20 73 6f 0a 74 68 61 74 20  epoint, so.that 
6540: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
6550: 73 74 61 63 6b 20 62 65 63 6f 6d 65 73 20 65 6d  stack becomes em
6560: 70 74 79 2c 20 74 68 65 6e 20 52 45 4c 45 41 53  pty, then RELEAS
6570: 45 20 69 73 20 74 68 65 20 73 61 6d 65 0a 61 73  E is the same.as
6580: 20 5b 43 4f 4d 4d 49 54 5d 2e 0a 5e 54 68 65 20   [COMMIT]..^The 
6590: 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64  [COMMIT] command
65a0: 20 6d 61 79 20 62 65 20 75 73 65 64 20 74 6f 20   may be used to 
65b0: 72 65 6c 65 61 73 65 20 61 6c 6c 20 73 61 76 65  release all save
65c0: 70 6f 69 6e 74 73 20 61 6e 64 0a 63 6f 6d 6d 69  points and.commi
65d0: 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  t the transactio
65e0: 6e 20 65 76 65 6e 20 69 66 20 74 68 65 20 74 72  n even if the tr
65f0: 61 6e 73 61 63 74 69 6f 6e 20 77 61 73 20 6f 72  ansaction was or
6600: 69 67 69 6e 61 6c 6c 79 20 73 74 61 72 74 65 64  iginally started
6610: 0a 62 79 20 61 20 53 41 56 45 50 4f 49 4e 54 20  .by a SAVEPOINT 
6620: 63 6f 6d 6d 61 6e 64 20 69 6e 73 74 65 61 64 20  command instead 
6630: 6f 66 20 61 20 5b 42 45 47 49 4e 5d 20 63 6f 6d  of a [BEGIN] com
6640: 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  mand.</p>..<p>^I
6650: 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d  f the savepoint-
6660: 6e 61 6d 65 20 69 6e 20 61 20 52 45 4c 45 41 53  name in a RELEAS
6670: 45 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e  E command does n
6680: 6f 74 20 6d 61 74 63 68 20 61 6e 79 0a 73 61 76  ot match any.sav
6690: 65 70 6f 69 6e 74 20 63 75 72 72 65 6e 74 6c 79  epoint currently
66a0: 20 69 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74   in the transact
66b0: 69 6f 6e 20 73 74 61 63 6b 2c 20 74 68 65 6e 20  ion stack, then 
66c0: 6e 6f 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72  no savepoints ar
66d0: 65 0a 72 65 6c 65 61 73 65 64 2c 20 74 68 65 20  e.released, the 
66e0: 64 61 74 61 62 61 73 65 20 69 73 20 75 6e 63 68  database is unch
66f0: 61 6e 67 65 64 2c 20 61 6e 64 20 74 68 65 20 52  anged, and the R
6700: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72  ELEASE command r
6710: 65 74 75 72 6e 73 0a 61 6e 20 65 72 72 6f 72 2e  eturns.an error.
6720: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74  </p>..<p>^Note t
6730: 68 61 74 20 61 6e 20 69 6e 6e 65 72 20 74 72 61  hat an inner tra
6740: 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 63  nsaction might c
6750: 6f 6d 6d 69 74 20 28 75 73 69 6e 67 20 74 68 65  ommit (using the
6760: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
6770: 29 0a 62 75 74 20 74 68 65 6e 20 6c 61 74 65 72  ).but then later
6780: 20 68 61 76 65 20 69 74 73 20 77 6f 72 6b 20 75   have its work u
6790: 6e 64 6f 6e 65 20 62 79 20 61 20 52 4f 4c 4c 42  ndone by a ROLLB
67a0: 41 43 4b 20 69 6e 20 61 6e 20 6f 75 74 65 72 20  ACK in an outer 
67b0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 20  transaction..^A 
67c0: 70 6f 77 65 72 20 66 61 69 6c 75 72 65 20 6f 72  power failure or
67d0: 20 70 72 6f 67 72 61 6d 20 63 72 61 73 68 20 6f   program crash o
67e0: 72 20 4f 53 20 63 72 61 73 68 20 77 69 6c 6c 20  r OS crash will 
67f0: 63 61 75 73 65 20 74 68 65 20 6f 75 74 65 72 2d  cause the outer-
6800: 6d 6f 73 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e  most.transaction
6810: 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 2c 20 75 6e   to rollback, un
6820: 64 6f 69 6e 67 20 61 6c 6c 20 63 68 61 6e 67 65  doing all change
6830: 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63 75  s that have occu
6840: 72 72 65 64 20 77 69 74 68 69 6e 0a 74 68 61 74  rred within.that
6850: 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74 69   outer transacti
6860: 6f 6e 2c 20 65 76 65 6e 20 63 68 61 6e 67 65 73  on, even changes
6870: 20 74 68 61 74 20 68 61 76 65 20 73 75 70 70 6f   that have suppo
6880: 73 65 64 6c 79 20 62 65 65 6e 20 22 63 6f 6d 6d  sedly been "comm
6890: 69 74 74 65 64 22 0a 62 79 20 74 68 65 20 52 45  itted".by the RE
68a0: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2e 20 20  LEASE command.  
68b0: 5e 43 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20  ^Content is not 
68c0: 61 63 74 75 61 6c 6c 79 20 63 6f 6d 6d 69 74 74  actually committ
68d0: 65 64 20 6f 6e 20 74 68 65 20 64 69 73 6b 20 0a  ed on the disk .
68e0: 75 6e 74 69 6c 20 74 68 65 20 6f 75 74 65 72 6d  until the outerm
68f0: 6f 73 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ost transaction 
6900: 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70  commits.</p>..<p
6910: 3e 54 68 65 72 65 20 61 72 65 20 73 65 76 65 72  >There are sever
6920: 61 6c 20 77 61 79 73 20 6f 66 20 74 68 69 6e 6b  al ways of think
6930: 69 6e 67 20 61 62 6f 75 74 20 74 68 65 20 52 45  ing about the RE
6940: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 3a 3c 2f  LEASE command:</
6950: 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e  p>..<ul>.<li><p>
6960: 0a 53 6f 6d 65 20 70 65 6f 70 6c 65 20 76 69 65  .Some people vie
6970: 77 20 52 45 4c 45 41 53 45 20 61 73 20 74 68 65  w RELEASE as the
6980: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 43   equivalent of C
6990: 4f 4d 4d 49 54 20 66 6f 72 20 61 20 53 41 56 45  OMMIT for a SAVE
69a0: 50 4f 49 4e 54 2e 0a 54 68 69 73 20 69 73 20 61  POINT..This is a
69b0: 6e 20 61 63 63 65 70 74 61 62 6c 65 20 70 6f 69  n acceptable poi
69c0: 6e 74 20 6f 66 20 76 69 65 77 20 61 73 20 6c 6f  nt of view as lo
69d0: 6e 67 20 61 73 20 6f 6e 65 20 72 65 6d 65 6d 62  ng as one rememb
69e0: 65 72 73 20 74 68 61 74 20 74 68 65 0a 63 68 61  ers that the.cha
69f0: 6e 67 65 73 20 63 6f 6d 6d 69 74 74 65 64 20 62  nges committed b
6a00: 79 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73  y an inner trans
6a10: 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 6c 61 74  action might lat
6a20: 65 72 20 62 65 20 75 6e 64 6f 6e 65 20 62 79 20  er be undone by 
6a30: 61 0a 72 6f 6c 6c 62 61 63 6b 20 69 6e 20 61 6e  a.rollback in an
6a40: 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74 69   outer transacti
6a50: 6f 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c  on.</p></li>..<l
6a60: 69 3e 3c 70 3e 0a 41 6e 6f 74 68 65 72 20 76 69  i><p>.Another vi
6a70: 65 77 20 6f 66 20 52 45 4c 45 41 53 45 20 69 73  ew of RELEASE is
6a80: 20 74 68 61 74 20 69 74 20 6d 65 72 67 65 73 20   that it merges 
6a90: 61 20 6e 61 6d 65 64 20 74 72 61 6e 73 61 63 74  a named transact
6aa0: 69 6f 6e 20 69 6e 74 6f 20 69 74 73 0a 70 61 72  ion into its.par
6ab0: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  ent transaction,
6ac0: 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 61 6d   so that the nam
6ad0: 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  ed transaction a
6ae0: 6e 64 20 69 74 73 20 70 61 72 65 6e 74 20 62 65  nd its parent be
6af0: 63 6f 6d 65 0a 74 68 65 20 73 61 6d 65 20 74 72  come.the same tr
6b00: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 41 66 74 65  ansaction.  Afte
6b10: 72 20 52 45 4c 45 41 53 45 2c 20 74 68 65 20 6e  r RELEASE, the n
6b20: 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  amed transaction
6b30: 20 61 6e 64 20 69 74 73 20 70 61 72 65 6e 74 0a   and its parent.
6b40: 77 69 6c 6c 20 63 6f 6d 6d 69 74 20 6f 72 20 72  will commit or r
6b50: 6f 6c 6c 62 61 63 6b 20 74 6f 67 65 74 68 65 72  ollback together
6b60: 2c 20 77 68 61 74 65 76 65 72 20 74 68 65 69 72  , whatever their
6b70: 20 66 61 74 65 20 6d 61 79 20 62 65 2e 0a 3c 2f   fate may be..</
6b80: 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
6b90: 0a 4f 6e 65 20 63 61 6e 20 61 6c 73 6f 20 74 68  .One can also th
6ba0: 69 6e 6b 20 6f 66 20 73 61 76 65 70 6f 69 6e 74  ink of savepoint
6bb0: 73 20 61 73 0a 22 6d 61 72 6b 73 22 20 69 6e 20  s as."marks" in 
6bc0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
6bd0: 74 69 6d 65 6c 69 6e 65 2e 20 20 49 6e 20 74 68  timeline.  In th
6be0: 69 73 20 76 69 65 77 2c 20 74 68 65 20 53 41 56  is view, the SAV
6bf0: 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 0a 63  EPOINT command.c
6c00: 72 65 61 74 65 73 20 61 20 6e 65 77 20 6d 61 72  reates a new mar
6c10: 6b 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  k, the ROLLBACK 
6c20: 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 77 69 6e  TO command rewin
6c30: 64 73 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 20  ds the timeline 
6c40: 62 61 63 6b 0a 74 6f 20 61 20 70 6f 69 6e 74 20  back.to a point 
6c50: 6a 75 73 74 20 61 66 74 65 72 20 74 68 65 20 6e  just after the n
6c60: 61 6d 65 64 20 6d 61 72 6b 2c 20 61 6e 64 20 74  amed mark, and t
6c70: 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  he RELEASE comma
6c80: 6e 64 0a 65 72 61 73 65 73 20 6d 61 72 6b 73 20  nd.erases marks 
6c90: 66 72 6f 6d 20 74 68 65 20 74 69 6d 65 6c 69 6e  from the timelin
6ca0: 65 20 77 69 74 68 6f 75 74 20 61 63 74 75 61 6c  e without actual
6cb0: 6c 79 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 63 68  ly making any.ch
6cc0: 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61 74  anges to the dat
6cd0: 61 62 61 73 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e  abase..</p></li>
6ce0: 0a 3c 2f 75 6c 3e 0a 0a 0a 0a 3c 68 33 3e 54 72  .</ul>....<h3>Tr
6cf0: 61 6e 73 61 63 74 69 6f 6e 20 4e 65 73 74 69 6e  ansaction Nestin
6d00: 67 20 52 75 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70  g Rules</h3>..<p
6d10: 3e 5e 54 68 65 20 6c 61 73 74 20 74 72 61 6e 73  >^The last trans
6d20: 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20 77  action started w
6d30: 69 6c 6c 20 62 65 20 74 68 65 20 66 69 72 73 74  ill be the first
6d40: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d  .transaction com
6d50: 6d 69 74 74 65 64 20 6f 72 20 72 6f 6c 6c 65 64  mitted or rolled
6d60: 20 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   back.</p>..<p>^
6d70: 54 68 65 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d  The [BEGIN] comm
6d80: 61 6e 64 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69  and only works i
6d90: 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  f the transactio
6da0: 6e 20 73 74 61 63 6b 20 69 73 20 65 6d 70 74 79  n stack is empty
6db0: 2c 20 6f 72 0a 69 6e 20 6f 74 68 65 72 20 77 6f  , or.in other wo
6dc0: 72 64 73 20 69 66 20 74 68 65 72 65 20 61 72 65  rds if there are
6dd0: 20 6e 6f 20 70 65 6e 64 69 6e 67 20 74 72 61 6e   no pending tran
6de0: 73 61 63 74 69 6f 6e 73 2e 20 20 5e 49 66 20 74  sactions.  ^If t
6df0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 73  he transaction.s
6e00: 74 61 63 6b 20 69 73 20 6e 6f 74 20 65 6d 70 74  tack is not empt
6e10: 79 20 77 68 65 6e 20 74 68 65 20 5b 42 45 47 49  y when the [BEGI
6e20: 4e 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e  N] command is in
6e30: 76 6f 6b 65 64 2c 20 74 68 65 6e 20 74 68 65 20  voked, then the 
6e40: 63 6f 6d 6d 61 6e 64 0a 66 61 69 6c 73 20 77 69  command.fails wi
6e50: 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e  th an error.</p>
6e60: 0a 0a 3c 70 3e 5e 54 68 65 20 5b 43 4f 4d 4d 49  ..<p>^The [COMMI
6e70: 54 5d 20 63 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 69  T] command commi
6e80: 74 73 20 61 6c 6c 20 6f 75 74 73 74 61 6e 64 69  ts all outstandi
6e90: 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  ng transactions 
6ea0: 61 6e 64 20 6c 65 61 76 65 73 0a 74 68 65 20 74  and leaves.the t
6eb0: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b  ransaction stack
6ec0: 20 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e   empty.</p>..<p>
6ed0: 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d  ^The RELEASE com
6ee0: 6d 61 6e 64 20 73 74 61 72 74 73 20 77 69 74 68  mand starts with
6ef0: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
6f00: 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 74 68 65   addition to the
6f10: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61  .transaction sta
6f20: 63 6b 20 61 6e 64 20 72 65 6c 65 61 73 65 73 20  ck and releases 
6f30: 73 61 76 65 70 6f 69 6e 74 73 20 62 61 63 6b 77  savepoints backw
6f40: 61 72 64 73 20 0a 69 6e 20 74 69 6d 65 20 75 6e  ards .in time un
6f50: 74 69 6c 20 69 74 20 72 65 6c 65 61 73 65 73 20  til it releases 
6f60: 61 20 73 61 76 65 70 6f 69 6e 74 20 77 69 74 68  a savepoint with
6f70: 20 61 20 6d 61 74 63 68 69 6e 67 20 73 61 76 65   a matching save
6f80: 70 6f 69 6e 74 2d 6e 61 6d 65 2e 0a 5e 50 72 69  point-name..^Pri
6f90: 6f 72 20 73 61 76 65 70 6f 69 6e 74 73 2c 20 65  or savepoints, e
6fa0: 76 65 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 77  ven savepoints w
6fb0: 69 74 68 20 6d 61 74 63 68 69 6e 67 20 73 61 76  ith matching sav
6fc0: 65 70 6f 69 6e 74 2d 6e 61 6d 65 73 2c 20 61 72  epoint-names, ar
6fd0: 65 0a 75 6e 63 68 61 6e 67 65 64 2e 0a 5e 49 66  e.unchanged..^If
6fe0: 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d   the RELEASE com
6ff0: 6d 61 6e 64 20 63 61 75 73 65 73 20 74 68 65 0a  mand causes the.
7000: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
7010: 6b 20 74 6f 20 62 65 63 6f 6d 65 20 65 6d 70 74  k to become empt
7020: 79 20 28 69 66 20 74 68 65 20 52 45 4c 45 41 53  y (if the RELEAS
7030: 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73  E command releas
7040: 65 73 20 74 68 65 0a 6f 75 74 65 72 6d 6f 73 74  es the.outermost
7050: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 66 72 6f   transaction fro
7060: 6d 20 74 68 65 20 73 74 61 63 6b 29 20 74 68 65  m the stack) the
7070: 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  n the transactio
7080: 6e 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a  n commits.</p>..
7090: 3c 70 3e 5e 54 68 65 20 5b 52 4f 4c 4c 42 41 43  <p>^The [ROLLBAC
70a0: 4b 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f  K] command witho
70b0: 75 74 20 61 20 54 4f 20 63 6c 61 75 73 65 20 72  ut a TO clause r
70c0: 6f 6c 6c 73 20 62 61 63 6b 73 20 61 6c 6c 20 74  olls backs all t
70d0: 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61 6e 64 20  ransactions.and 
70e0: 6c 65 61 76 65 73 20 74 68 65 20 74 72 61 6e 73  leaves the trans
70f0: 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70  action stack emp
7100: 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ty.</p>..<p>^The
7110: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
7120: 64 20 77 69 74 68 20 61 20 54 4f 20 63 6c 61 75  d with a TO clau
7130: 73 65 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74 72  se rolls back tr
7140: 61 6e 73 61 63 74 69 6f 6e 73 20 67 6f 69 6e 67  ansactions going
7150: 0a 62 61 63 6b 77 61 72 64 73 20 69 6e 20 74 69  .backwards in ti
7160: 6d 65 20 62 61 63 6b 20 74 6f 20 74 68 65 20 6d  me back to the m
7170: 6f 73 74 20 72 65 63 65 6e 74 20 53 41 56 45 50  ost recent SAVEP
7180: 4f 49 4e 54 20 77 69 74 68 20 61 20 6d 61 74 63  OINT with a matc
7190: 68 69 6e 67 20 6e 61 6d 65 2e 0a 5e 54 68 65 20  hing name..^The 
71a0: 53 41 56 45 50 4f 49 4e 54 20 77 69 74 68 20 74  SAVEPOINT with t
71b0: 68 65 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65  he matching name
71c0: 20 72 65 6d 61 69 6e 73 20 6f 6e 20 74 68 65 20   remains on the 
71d0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
71e0: 6b 2c 0a 62 75 74 20 61 6c 6c 20 64 61 74 61 62  k,.but all datab
71f0: 61 73 65 20 63 68 61 6e 67 65 73 20 74 68 61 74  ase changes that
7200: 20 6f 63 63 75 72 72 65 64 20 61 66 74 65 72 20   occurred after 
7210: 74 68 61 74 20 53 41 56 45 50 4f 49 4e 54 20 77  that SAVEPOINT w
7220: 61 73 20 63 72 65 61 74 65 64 0a 61 72 65 20 72  as created.are r
7230: 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49 66  olled back.  ^If
7240: 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e   the savepoint-n
7250: 61 6d 65 20 69 6e 20 61 20 52 4f 4c 4c 42 41 43  ame in a ROLLBAC
7260: 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 64 6f 65  K TO command doe
7270: 73 20 6e 6f 74 0a 6d 61 74 63 68 20 61 6e 79 20  s not.match any 
7280: 53 41 56 45 50 4f 49 4e 54 20 6f 6e 20 74 68 65  SAVEPOINT on the
7290: 20 73 74 61 63 6b 2c 20 74 68 65 6e 20 74 68 65   stack, then the
72a0: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
72b0: 64 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 0a  d fails with an.
72c0: 65 72 72 6f 72 20 61 6e 64 20 6c 65 61 76 65 73  error and leaves
72d0: 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68   the state of th
72e0: 65 20 64 61 74 61 62 61 73 65 20 75 6e 63 68 61  e database uncha
72f0: 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  nged.</p>..<tcl>
7300: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
7310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7350: 0a 53 65 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74  .Section comment
7360: 20 63 6f 6d 6d 65 6e 74 20 7b 63 6f 6d 6d 65 6e   comment {commen
7370: 74 20 2a 63 6f 6d 6d 65 6e 74 73 7d 0a 0a 52 65  t *comments}..Re
7380: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
7390: 67 72 61 6d 20 63 6f 6d 6d 65 6e 74 2d 73 79 6e  gram comment-syn
73a0: 74 61 78 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tax.</tcl>..<p>^
73b0: 43 6f 6d 6d 65 6e 74 73 20 61 72 65 20 6e 6f 74  Comments are not
73c0: 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2c 20 62   SQL commands, b
73d0: 75 74 20 63 61 6e 20 6f 63 63 75 72 20 77 69 74  ut can occur wit
73e0: 68 69 6e 20 74 68 65 20 74 65 78 74 20 6f 66 0a  hin the text of.
73f0: 53 51 4c 20 71 75 65 72 69 65 73 20 70 61 73 73  SQL queries pass
7400: 65 64 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 70  ed to [sqlite3_p
7410: 72 65 70 61 72 65 5f 76 32 28 29 5d 20 61 6e 64  repare_v2()] and
7420: 20 72 65 6c 61 74 65 64 20 69 6e 74 65 72 66 61   related interfa
7430: 63 65 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 61  ces..^Comments a
7440: 72 65 20 74 72 65 61 74 65 64 20 61 73 20 77 68  re treated as wh
7450: 69 74 65 73 70 61 63 65 20 62 79 20 74 68 65 20  itespace by the 
7460: 70 61 72 73 65 72 2e 0a 5e 43 6f 6d 6d 65 6e 74  parser..^Comment
7470: 73 20 63 61 6e 20 62 65 67 69 6e 20 61 6e 79 77  s can begin anyw
7480: 68 65 72 65 20 77 68 69 74 65 73 70 61 63 65 20  here whitespace 
7490: 0a 63 61 6e 20 62 65 20 66 6f 75 6e 64 2c 20 69  .can be found, i
74a0: 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20  ncluding inside 
74b0: 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74  expressions that
74c0: 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c   span multiple l
74d0: 69 6e 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ines..</p>..<p>^
74e0: 53 51 4c 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67  SQL comments beg
74f0: 69 6e 20 77 69 74 68 20 74 77 6f 20 63 6f 6e 73  in with two cons
7500: 65 63 75 74 69 76 65 20 22 2d 22 20 63 68 61 72  ecutive "-" char
7510: 61 63 74 65 72 73 20 28 41 53 43 49 49 20 30 78  acters (ASCII 0x
7520: 32 64 29 0a 61 6e 64 20 65 78 74 65 6e 64 20 75  2d).and extend u
7530: 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69  p to and includi
7540: 6e 67 20 74 68 65 20 6e 65 78 74 20 6e 65 77 6c  ng the next newl
7550: 69 6e 65 20 63 68 61 72 61 63 74 65 72 20 28 41  ine character (A
7560: 53 43 49 49 20 30 78 30 61 29 0a 6f 72 20 75 6e  SCII 0x0a).or un
7570: 74 69 6c 20 74 68 65 20 65 6e 64 20 6f 66 20 69  til the end of i
7580: 6e 70 75 74 2c 20 77 68 69 63 68 65 76 65 72 20  nput, whichever 
7590: 63 6f 6d 65 73 20 66 69 72 73 74 2e 3c 2f 70 3e  comes first.</p>
75a0: 0a 0a 3c 70 3e 5e 43 2d 73 74 79 6c 65 20 63 6f  ..<p>^C-style co
75b0: 6d 6d 65 6e 74 73 20 62 65 67 69 6e 0a 77 69 74  mments begin.wit
75c0: 68 20 22 2f 2a 22 20 61 6e 64 20 65 78 74 65 6e  h "/*" and exten
75d0: 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c  d up to and incl
75e0: 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20 22  uding the next "
75f0: 2a 2f 22 20 63 68 61 72 61 63 74 65 72 20 70 61  */" character pa
7600: 69 72 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65 20  ir.or until the 
7610: 65 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20 77 68  end of input, wh
7620: 69 63 68 65 76 65 72 20 63 6f 6d 65 73 20 66 69  ichever comes fi
7630: 72 73 74 2e 20 20 5e 43 2d 73 74 79 6c 65 20 63  rst.  ^C-style c
7640: 6f 6d 6d 65 6e 74 73 0a 63 61 6e 20 73 70 61 6e  omments.can span
7650: 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73 2e   multiple lines.
7660: 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65   </p>..<p>^Comme
7670: 6e 74 73 20 63 61 6e 20 61 70 70 65 61 72 20 61  nts can appear a
7680: 6e 79 77 68 65 72 65 20 77 68 69 74 65 73 70 61  nywhere whitespa
7690: 63 65 20 63 61 6e 20 6f 63 63 75 72 2c 0a 69 6e  ce can occur,.in
76a0: 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20 65  cluding inside e
76b0: 78 70 72 65 73 73 69 6f 6e 73 20 61 6e 64 20 69  xpressions and i
76c0: 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20  n the middle of 
76d0: 6f 74 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d  other SQL statem
76e0: 65 6e 74 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20  ents..^Comments 
76f0: 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 0a 3c 2f 70  do not nest..</p
7700: 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  >...<tcl>.######
7710: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7720: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7730: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7740: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7750: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
7760: 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20   {CREATE INDEX} 
7770: 63 72 65 61 74 65 69 6e 64 65 78 20 7b 7b 43 52  createindex {{CR
7780: 45 41 54 45 20 49 4e 44 45 58 7d 7d 0a 0a 52 65  EATE INDEX}}..Re
7790: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
77a0: 67 72 61 6d 20 63 72 65 61 74 65 2d 69 6e 64 65  gram create-inde
77b0: 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  x-stmt.</tcl>..<
77c0: 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 49 4e  p>^The CREATE IN
77d0: 44 45 58 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 73  DEX command cons
77e0: 69 73 74 73 20 6f 66 20 74 68 65 20 6b 65 79 77  ists of the keyw
77f0: 6f 72 64 73 20 22 43 52 45 41 54 45 20 49 4e 44  ords "CREATE IND
7800: 45 58 22 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20  EX" followed.by 
7810: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
7820: 6e 65 77 20 69 6e 64 65 78 2c 20 74 68 65 20 6b  new index, the k
7830: 65 79 77 6f 72 64 20 22 4f 4e 22 2c 20 74 68 65  eyword "ON", the
7840: 20 6e 61 6d 65 20 6f 66 20 61 20 70 72 65 76 69   name of a previ
7850: 6f 75 73 6c 79 0a 63 72 65 61 74 65 64 20 74 61  ously.created ta
7860: 62 6c 65 20 74 68 61 74 20 69 73 20 74 6f 20 62  ble that is to b
7870: 65 20 69 6e 64 65 78 65 64 2c 20 61 6e 64 20 61  e indexed, and a
7880: 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c   parenthesized l
7890: 69 73 74 20 6f 66 20 74 61 62 6c 65 20 63 6f 6c  ist of table col
78a0: 75 6d 6e 0a 6e 61 6d 65 73 20 61 6e 64 2f 6f 72  umn.names and/or
78b0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61   expressions tha
78c0: 74 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 74  t are used for t
78d0: 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 49 66  he index key..If
78e0: 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 57 48   the optional WH
78f0: 45 52 45 20 63 6c 61 75 73 65 20 69 73 20 69 6e  ERE clause is in
7900: 63 6c 75 64 65 64 2c 20 74 68 65 6e 20 74 68 65  cluded, then the
7910: 20 69 6e 64 65 78 20 69 73 20 61 20 22 5b 70 61   index is a "[pa
7920: 72 74 69 61 6c 20 69 6e 64 65 78 5d 22 2e 0a 3c  rtial index]"..<
7930: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
7940: 67 6d 65 6e 74 20 7b 64 65 73 63 69 64 78 7d 20  gment {descidx} 
7950: 7b 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 69  {descending indi
7960: 63 65 73 7d 20 7b 64 65 73 63 65 6e 64 69 6e 67  ces} {descending
7970: 20 69 6e 64 65 78 7d 20 5c 0a 20 20 20 20 7b 64   index} \.    {d
7980: 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 65  escending indexe
7990: 73 7d 20 7b 44 45 53 43 7d 3c 2f 74 63 6c 3e 0a  s} {DESC}</tcl>.
79a0: 3c 70 3e 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20  <p>^Each column 
79b0: 6e 61 6d 65 20 6f 72 20 65 78 70 72 65 73 73 69  name or expressi
79c0: 6f 6e 20 63 61 6e 20 62 65 20 66 6f 6c 6c 6f 77  on can be follow
79d0: 65 64 20 62 79 20 6f 6e 65 0a 6f 66 20 74 68 65  ed by one.of the
79e0: 20 22 41 53 43 22 20 6f 72 20 22 44 45 53 43 22   "ASC" or "DESC"
79f0: 20 6b 65 79 77 6f 72 64 73 20 74 6f 20 69 6e 64   keywords to ind
7a00: 69 63 61 74 65 20 73 6f 72 74 20 6f 72 64 65 72  icate sort order
7a10: 2e 0a 5e 54 68 65 20 73 6f 72 74 20 6f 72 64 65  ..^The sort orde
7a20: 72 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74  r may or may not
7a30: 20 62 65 20 69 67 6e 6f 72 65 64 20 64 65 70 65   be ignored depe
7a40: 6e 64 69 6e 67 0a 6f 6e 20 74 68 65 20 64 61 74  nding.on the dat
7a50: 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 6d 61  abase file forma
7a60: 74 2c 20 61 6e 64 20 69 6e 20 70 61 72 74 69 63  t, and in partic
7a70: 75 6c 61 72 20 74 68 65 20 5b 73 63 68 65 6d 61  ular the [schema
7a80: 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 5d 2e   format number].
7a90: 0a 5e 54 68 65 20 22 6c 65 67 61 63 79 22 20 73  .^The "legacy" s
7aa0: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 28 31 29  chema format (1)
7ab0: 20 69 67 6e 6f 72 65 73 20 69 6e 64 65 78 0a 73   ignores index.s
7ac0: 6f 72 74 20 6f 72 64 65 72 2e 20 20 5e 54 68 65  ort order.  ^The
7ad0: 20 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65   descending inde
7ae0: 78 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  x schema format 
7af0: 28 34 29 20 74 61 6b 65 73 20 69 6e 64 65 78 20  (4) takes index 
7b00: 73 6f 72 74 20 6f 72 64 65 72 0a 69 6e 74 6f 20  sort order.into 
7b10: 61 63 63 6f 75 6e 74 2e 20 20 4f 6e 6c 79 20 76  account.  Only v
7b20: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
7b30: 65 20 33 2e 33 2e 30 20 28 5b 64 61 74 65 6f 66  e 3.3.0 ([dateof
7b40: 3a 33 2e 33 2e 30 5d 29 0a 61 6e 64 20 6c 61 74  :3.3.0]).and lat
7b50: 65 72 20 61 72 65 20 61 62 6c 65 20 74 6f 20 75  er are able to u
7b60: 6e 64 65 72 73 74 61 6e 64 0a 74 68 65 20 64 65  nderstand.the de
7b70: 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 20 66  scending index f
7b80: 6f 72 6d 61 74 2e 20 46 6f 72 20 63 6f 6d 70 61  ormat. For compa
7b90: 74 69 62 69 6c 69 74 79 2c 20 76 65 72 73 69 6f  tibility, versio
7ba0: 6e 20 6f 66 20 53 51 4c 69 74 65 20 62 65 74 77  n of SQLite betw
7bb0: 65 65 6e 20 33 2e 33 2e 30 0a 61 6e 64 20 33 2e  een 3.3.0.and 3.
7bc0: 37 2e 39 20 75 73 65 20 74 68 65 20 6c 65 67 61  7.9 use the lega
7bd0: 63 79 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74  cy schema format
7be0: 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 54 68   by default.  Th
7bf0: 65 20 6e 65 77 65 72 20 73 63 68 65 6d 61 20 66  e newer schema f
7c00: 6f 72 6d 61 74 20 69 73 0a 75 73 65 64 20 62 79  ormat is.used by
7c10: 20 64 65 66 61 75 6c 74 20 69 6e 20 76 65 72 73   default in vers
7c20: 69 6f 6e 20 33 2e 37 2e 31 30 20 28 5b 64 61 74  ion 3.7.10 ([dat
7c30: 65 6f 66 3a 33 2e 37 2e 31 30 5d 29 20 61 6e 64  eof:3.7.10]) and
7c40: 20 6c 61 74 65 72 2e 0a 5e 54 68 65 20 5b 6c 65   later..^The [le
7c50: 67 61 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74  gacy_file_format
7c60: 20 70 72 61 67 6d 61 5d 20 63 61 6e 20 62 65 20   pragma] can be 
7c70: 75 73 65 64 20 74 6f 20 63 68 61 6e 67 65 20 73  used to change s
7c80: 65 74 20 74 68 65 20 73 70 65 63 69 66 69 63 0a  et the specific.
7c90: 62 65 68 61 76 69 6f 72 20 66 6f 72 20 61 6e 79  behavior for any
7ca0: 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69   version of SQLi
7cb0: 74 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  te.</p>..<tcl>hd
7cc0: 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6c 6c 69 64  _fragment collid
7cd0: 78 20 7b 43 4f 4c 4c 41 54 45 7d 3c 2f 74 63 6c  x {COLLATE}</tcl
7ce0: 3e 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c 4c 41 54  >.<p>^The COLLAT
7cf0: 45 20 63 6c 61 75 73 65 20 6f 70 74 69 6f 6e 61  E clause optiona
7d00: 6c 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 61  lly following ea
7d10: 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 6f  ch column name.o
7d20: 72 20 65 78 70 72 65 73 73 69 6f 6e 20 64 65 66  r expression def
7d30: 69 6e 65 73 20 61 0a 63 6f 6c 6c 61 74 69 6e 67  ines a.collating
7d40: 20 73 65 71 75 65 6e 63 65 20 75 73 65 64 20 66   sequence used f
7d50: 6f 72 20 74 65 78 74 20 65 6e 74 72 69 65 73 20  or text entries 
7d60: 69 6e 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a  in that column..
7d70: 5e 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c  ^The default col
7d80: 6c 61 74 69 6e 67 0a 73 65 71 75 65 6e 63 65 20  lating.sequence 
7d90: 69 73 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67  is the collating
7da0: 20 73 65 71 75 65 6e 63 65 20 64 65 66 69 6e 65   sequence define
7db0: 64 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d  d for that colum
7dc0: 6e 20 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45  n in the.[CREATE
7dd0: 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e   TABLE] statemen
7de0: 74 2e 20 20 5e 4f 72 20 69 66 20 6e 6f 20 63 6f  t.  ^Or if no co
7df0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
7e00: 20 69 73 20 6f 74 68 65 72 77 69 73 65 20 64 65   is otherwise de
7e10: 66 69 6e 65 64 2c 0a 74 68 65 20 62 75 69 6c 74  fined,.the built
7e20: 2d 69 6e 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61  -in BINARY colla
7e30: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73  ting sequence is
7e40: 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c   used.</p>..<tcl
7e50: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 64  >hd_fragment ind
7e60: 65 78 65 78 70 72 3c 2f 74 63 6c 3e 0a 3c 70 3e  exexpr</tcl>.<p>
7e70: 5e 45 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20  ^Expressions in 
7e80: 61 6e 20 69 6e 64 65 78 20 6d 61 79 20 6e 6f 74  an index may not
7e90: 20 72 65 66 65 72 65 6e 63 65 20 6f 74 68 65 72   reference other
7ea0: 20 74 61 62 6c 65 73 0a 61 6e 64 20 6d 61 79 20   tables.and may 
7eb0: 6e 6f 74 20 75 73 65 20 73 75 62 71 75 65 72 69  not use subqueri
7ec0: 65 73 20 6e 6f 72 20 66 75 6e 63 74 69 6f 6e 73  es nor functions
7ed0: 20 77 68 6f 73 65 20 72 65 73 75 6c 74 20 6d 69   whose result mi
7ee0: 67 68 74 0a 63 68 61 6e 67 65 20 28 65 78 3a 20  ght.change (ex: 
7ef0: 5b 72 61 6e 64 6f 6d 28 29 5d 20 6f 72 20 5b 73  [random()] or [s
7f00: 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 5d  qlite_version()]
7f10: 29 2e 0a 5e 45 78 70 72 65 73 73 69 6f 6e 73 20  )..^Expressions 
7f20: 69 6e 20 61 6e 20 69 6e 64 65 78 20 6d 61 79 20  in an index may 
7f30: 6f 6e 6c 79 20 72 65 66 65 72 20 74 6f 20 63 6f  only refer to co
7f40: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
7f50: 6c 65 0a 74 68 61 74 20 69 73 20 62 65 69 6e 67  le.that is being
7f60: 20 69 6e 64 65 78 65 64 2e 0a 49 6e 64 65 78 65   indexed..Indexe
7f70: 73 20 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  s on expression 
7f80: 77 69 6c 6c 20 6e 6f 74 20 77 6f 72 6b 20 77 69  will not work wi
7f90: 74 68 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  th versions of S
7fa0: 51 4c 69 74 65 20 70 72 69 6f 72 0a 74 6f 20 5b  QLite prior.to [
7fb0: 76 65 72 73 69 6f 6e 20 33 2e 39 2e 30 5d 20 28  version 3.9.0] (
7fc0: 5b 64 61 74 65 6f 66 3a 33 2e 39 2e 30 5d 29 2e  [dateof:3.9.0]).
7fd0: 0a 53 65 65 20 74 68 65 20 5b 49 6e 64 65 78 65  .See the [Indexe
7fe0: 73 20 4f 6e 20 45 78 70 72 65 73 73 69 6f 6e 73  s On Expressions
7ff0: 5d 20 64 6f 63 75 6d 65 6e 74 20 66 6f 72 20 61  ] document for a
8000: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
8010: 61 74 69 6f 6e 0a 61 62 6f 75 74 20 75 73 69 6e  ation.about usin
8020: 67 20 67 65 6e 65 72 61 6c 20 65 78 70 72 65 73  g general expres
8030: 73 69 6f 6e 73 20 69 6e 20 43 52 45 41 54 45 20  sions in CREATE 
8040: 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 73  INDEX statements
8050: 2e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20  ...<p>There are 
8060: 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c 69 6d  no arbitrary lim
8070: 69 74 73 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65  its on the numbe
8080: 72 20 6f 66 20 69 6e 64 69 63 65 73 20 74 68 61  r of indices tha
8090: 74 20 63 61 6e 20 62 65 0a 61 74 74 61 63 68 65  t can be.attache
80a0: 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61  d to a single ta
80b0: 62 6c 65 2e 20 20 5e 28 54 68 65 20 6e 75 6d 62  ble.  ^(The numb
80c0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
80d0: 20 61 6e 20 69 6e 64 65 78 20 69 73 20 0a 6c 69   an index is .li
80e0: 6d 69 74 65 64 20 74 6f 20 74 68 65 20 76 61 6c  mited to the val
80f0: 75 65 20 73 65 74 20 62 79 0a 5b 73 71 6c 69 74  ue set by.[sqlit
8100: 65 33 5f 6c 69 6d 69 74 5d 28 5b 53 51 4c 49 54  e3_limit]([SQLIT
8110: 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 5d 2c  E_LIMIT_COLUMN],
8120: 2e 2e 2e 29 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63  ...).)^</p>..<tc
8130: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e  l>hd_fragment un
8140: 69 71 75 65 69 64 78 20 7b 75 6e 69 71 75 65 20  iqueidx {unique 
8150: 69 6e 64 65 78 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  index}</tcl>.<p>
8160: 5e 49 66 20 74 68 65 20 55 4e 49 51 55 45 20 6b  ^If the UNIQUE k
8170: 65 79 77 6f 72 64 20 61 70 70 65 61 72 73 20 62  eyword appears b
8180: 65 74 77 65 65 6e 20 43 52 45 41 54 45 20 61 6e  etween CREATE an
8190: 64 20 49 4e 44 45 58 20 74 68 65 6e 20 64 75 70  d INDEX then dup
81a0: 6c 69 63 61 74 65 0a 69 6e 64 65 78 20 65 6e 74  licate.index ent
81b0: 72 69 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c  ries are not all
81c0: 6f 77 65 64 2e 20 20 5e 41 6e 79 20 61 74 74 65  owed.  ^Any atte
81d0: 6d 70 74 20 74 6f 20 69 6e 73 65 72 74 20 61 20  mpt to insert a 
81e0: 64 75 70 6c 69 63 61 74 65 20 65 6e 74 72 79 0a  duplicate entry.
81f0: 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61  will result in a
8200: 6e 20 65 72 72 6f 72 2e 20 20 5e 46 6f 72 20 74  n error.  ^For t
8210: 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 75  he purposes of u
8220: 6e 69 71 75 65 20 69 6e 64 69 63 65 73 2c 20 61  nique indices, a
8230: 6c 6c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 0a 61  ll NULL values.a
8240: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f  re considered to
8250: 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20   different from 
8260: 61 6c 6c 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76  all other NULL v
8270: 61 6c 75 65 73 20 61 6e 64 20 61 72 65 20 74 68  alues and are th
8280: 75 73 20 75 6e 69 71 75 65 2e 0a 54 68 69 73 20  us unique..This 
8290: 69 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 77  is one of the tw
82a0: 6f 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 72  o possible inter
82b0: 70 72 65 74 61 74 69 6f 6e 73 20 6f 66 20 74 68  pretations of th
82c0: 65 20 53 51 4c 2d 39 32 20 73 74 61 6e 64 61 72  e SQL-92 standar
82d0: 64 0a 28 74 68 65 20 6c 61 6e 67 75 61 67 65 20  d.(the language 
82e0: 69 6e 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  in the standard 
82f0: 69 73 20 61 6d 62 69 67 75 6f 75 73 29 20 61 6e  is ambiguous) an
8300: 64 20 69 73 20 74 68 65 20 69 6e 74 65 72 70 72  d is the interpr
8310: 65 74 61 74 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64  etation.followed
8320: 20 62 79 20 50 6f 73 74 67 72 65 53 51 4c 2c 20   by PostgreSQL, 
8330: 4d 79 53 51 4c 2c 20 46 69 72 65 62 69 72 64 2c  MySQL, Firebird,
8340: 20 61 6e 64 20 4f 72 61 63 6c 65 2e 20 20 49 6e   and Oracle.  In
8350: 66 6f 72 6d 69 78 20 61 6e 64 0a 4d 69 63 72 6f  formix and.Micro
8360: 73 6f 66 74 20 53 51 4c 20 53 65 72 76 65 72 20  soft SQL Server 
8370: 66 6f 6c 6c 6f 77 20 74 68 65 20 6f 74 68 65 72  follow the other
8380: 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20   interpretation 
8390: 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72 64 2e  of the standard.
83a0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  </p>..<p>^If the
83b0: 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 4e 4f 54   optional IF NOT
83c0: 20 45 58 49 53 54 53 20 63 6c 61 75 73 65 20 69   EXISTS clause i
83d0: 73 20 70 72 65 73 65 6e 74 20 61 6e 64 20 61 6e  s present and an
83e0: 6f 74 68 65 72 20 69 6e 64 65 78 0a 77 69 74 68  other index.with
83f0: 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61   the same name a
8400: 6c 72 65 61 64 79 20 65 78 69 73 74 73 2c 20 74  lready exists, t
8410: 68 65 6e 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  hen this command
8420: 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70   becomes a no-op
8430: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 64 65 78  .</p>..<p>^Index
8440: 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 77  es are removed w
8450: 69 74 68 20 74 68 65 20 5b 44 52 4f 50 20 49 4e  ith the [DROP IN
8460: 44 45 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70  DEX] command.</p
8470: 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  >...<tcl>.######
8480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
84a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
84b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
84c0: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
84d0: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 7d 20   {CREATE TABLE} 
84e0: 7b 63 72 65 61 74 65 74 61 62 6c 65 7d 20 7b 7b  {createtable} {{
84f0: 43 52 45 41 54 45 20 54 41 42 4c 45 7d 7d 0a 0a  CREATE TABLE}}..
8500: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
8510: 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d 74 61  iagram create-ta
8520: 62 6c 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ble-stmt.</tcl>.
8530: 0a 3c 70 3e 54 68 65 20 22 43 52 45 41 54 45 20  .<p>The "CREATE 
8540: 54 41 42 4c 45 22 20 63 6f 6d 6d 61 6e 64 20 69  TABLE" command i
8550: 73 20 75 73 65 64 20 74 6f 20 63 72 65 61 74 65  s used to create
8560: 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20   a new table in 
8570: 61 6e 20 53 51 4c 69 74 65 20 0a 64 61 74 61 62  an SQLite .datab
8580: 61 73 65 2e 20 41 20 43 52 45 41 54 45 20 54 41  ase. A CREATE TA
8590: 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 73 70 65 63  BLE command spec
85a0: 69 66 69 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77  ifies the follow
85b0: 69 6e 67 20 61 74 74 72 69 62 75 74 65 73 20 6f  ing attributes o
85c0: 66 20 74 68 65 0a 6e 65 77 20 74 61 62 6c 65 3a  f the.new table:
85d0: 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e  ..<ul>.  <li><p>
85e0: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
85f0: 6e 65 77 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c  new table...  <l
8600: 69 3e 3c 70 3e 20 54 68 65 20 64 61 74 61 62 61  i><p> The databa
8610: 73 65 20 69 6e 20 77 68 69 63 68 20 74 68 65 20  se in which the 
8620: 6e 65 77 20 74 61 62 6c 65 20 69 73 20 63 72 65  new table is cre
8630: 61 74 65 64 2e 20 54 61 62 6c 65 73 20 6d 61 79  ated. Tables may
8640: 20 62 65 20 0a 20 20 20 20 20 20 63 72 65 61 74   be .      creat
8650: 65 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  ed in the main d
8660: 61 74 61 62 61 73 65 2c 20 74 68 65 20 74 65 6d  atabase, the tem
8670: 70 20 64 61 74 61 62 61 73 65 2c 20 6f 72 20 69  p database, or i
8680: 6e 20 61 6e 79 20 61 74 74 61 63 68 65 64 0a 20  n any attached. 
8690: 20 20 20 20 20 64 61 74 61 62 61 73 65 2e 0a 0a       database...
86a0: 20 20 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 6e 61    <li><p> The na
86b0: 6d 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  me of each colum
86c0: 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a  n in the table..
86d0: 0a 20 20 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 64  .  <li><p> The d
86e0: 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20  eclared type of 
86f0: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  each column in t
8700: 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69  he table...  <li
8710: 3e 3c 70 3e 20 41 20 64 65 66 61 75 6c 74 20 76  ><p> A default v
8720: 61 6c 75 65 20 6f 72 20 65 78 70 72 65 73 73 69  alue or expressi
8730: 6f 6e 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  on for each colu
8740: 6d 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  mn in the table.
8750: 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 41 20 64 65  ..  <li><p> A de
8760: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20  fault collation 
8770: 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20  sequence to use 
8780: 77 69 74 68 20 65 61 63 68 20 63 6f 6c 75 6d 6e  with each column
8790: 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 4f 70 74  ...  <li><p> Opt
87a0: 69 6f 6e 61 6c 6c 79 2c 20 61 20 50 52 49 4d 41  ionally, a PRIMA
87b0: 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74  RY KEY for the t
87c0: 61 62 6c 65 2e 20 42 6f 74 68 20 73 69 6e 67 6c  able. Both singl
87d0: 65 20 63 6f 6c 75 6d 6e 20 61 6e 64 0a 20 20 20  e column and.   
87e0: 20 20 20 20 63 6f 6d 70 6f 73 69 74 65 20 28 6d      composite (m
87f0: 75 6c 74 69 70 6c 65 20 63 6f 6c 75 6d 6e 29 20  ultiple column) 
8800: 70 72 69 6d 61 72 79 20 6b 65 79 73 20 61 72 65  primary keys are
8810: 20 73 75 70 70 6f 72 74 65 64 2e 0a 0a 20 20 3c   supported...  <
8820: 6c 69 3e 3c 70 3e 20 41 20 73 65 74 20 6f 66 20  li><p> A set of 
8830: 53 51 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  SQL constraints 
8840: 66 6f 72 20 65 61 63 68 20 74 61 62 6c 65 2e 20  for each table. 
8850: 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
8860: 55 4e 49 51 55 45 2c 20 4e 4f 54 0a 20 20 20 20  UNIQUE, NOT.    
8870: 20 20 20 4e 55 4c 4c 2c 20 43 48 45 43 4b 20 61     NULL, CHECK a
8880: 6e 64 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 63  nd FOREIGN KEY c
8890: 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 0a 20 20 3c  onstraints...  <
88a0: 6c 69 3e 3c 70 3e 20 57 68 65 74 68 65 72 20 74  li><p> Whether t
88b0: 68 65 20 74 61 62 6c 65 20 69 73 20 61 20 5b 57  he table is a [W
88c0: 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61  ITHOUT ROWID] ta
88d0: 62 6c 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 45  ble..</ul>..<p>E
88e0: 76 65 72 79 20 43 52 45 41 54 45 20 54 41 42 4c  very CREATE TABL
88f0: 45 20 73 74 61 74 65 6d 65 6e 74 20 6d 75 73 74  E statement must
8900: 20 73 70 65 63 69 66 79 20 61 20 6e 61 6d 65 20   specify a name 
8910: 66 6f 72 20 74 68 65 20 6e 65 77 20 74 61 62 6c  for the new tabl
8920: 65 2e 0a 20 20 5e 28 54 61 62 6c 65 20 6e 61 6d  e..  ^(Table nam
8930: 65 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69  es that begin wi
8940: 74 68 20 22 73 71 6c 69 74 65 5f 22 20 61 72 65  th "sqlite_" are
8950: 20 72 65 73 65 72 76 65 64 20 66 6f 72 20 69 6e   reserved for in
8960: 74 65 72 6e 61 6c 20 75 73 65 2e 20 49 74 0a 20  ternal use. It. 
8970: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20   is an error to 
8980: 61 74 74 65 6d 70 74 20 74 6f 20 63 72 65 61 74  attempt to creat
8990: 65 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 61  e a table with a
89a0: 20 6e 61 6d 65 20 74 68 61 74 20 73 74 61 72 74   name that start
89b0: 73 20 77 69 74 68 0a 20 20 22 73 71 6c 69 74 65  s with.  "sqlite
89c0: 5f 22 2e 29 5e 0a 0a 3c 70 3e 20 5e 49 66 20 61  _".)^..<p> ^If a
89d0: 20 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d   <yyterm>schema-
89e0: 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 69 73  name</yyterm> is
89f0: 20 73 70 65 63 69 66 69 65 64 2c 20 69 74 20 6d   specified, it m
8a00: 75 73 74 20 62 65 20 65 69 74 68 65 72 20 22 6d  ust be either "m
8a10: 61 69 6e 22 2c 20 0a 20 20 22 74 65 6d 70 22 2c  ain", .  "temp",
8a20: 20 6f 72 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   or the name of 
8a30: 61 6e 20 5b 41 54 54 41 43 48 20 44 41 54 41 42  an [ATTACH DATAB
8a40: 41 53 45 7c 61 74 74 61 63 68 65 64 20 64 61 74  ASE|attached dat
8a50: 61 62 61 73 65 5d 2e 20 5e 49 6e 20 74 68 69 73  abase]. ^In this
8a60: 20 63 61 73 65 0a 20 20 74 68 65 20 6e 65 77 20   case.  the new 
8a70: 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64  table is created
8a80: 20 69 6e 20 74 68 65 20 6e 61 6d 65 64 20 64 61   in the named da
8a90: 74 61 62 61 73 65 2e 20 5e 49 66 20 74 68 65 20  tabase. ^If the 
8aa0: 22 54 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f  "TEMP" or "TEMPO
8ab0: 52 41 52 59 22 0a 20 20 6b 65 79 77 6f 72 64 20  RARY".  keyword 
8ac0: 6f 63 63 75 72 73 20 62 65 74 77 65 65 6e 20 74  occurs between t
8ad0: 68 65 20 22 43 52 45 41 54 45 22 20 61 6e 64 20  he "CREATE" and 
8ae0: 22 54 41 42 4c 45 22 20 74 68 65 6e 20 74 68 65  "TABLE" then the
8af0: 20 6e 65 77 20 74 61 62 6c 65 20 69 73 0a 20 20   new table is.  
8b00: 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 74  created in the t
8b10: 65 6d 70 20 64 61 74 61 62 61 73 65 2e 20 5e 49  emp database. ^I
8b20: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f  t is an error to
8b30: 20 73 70 65 63 69 66 79 20 62 6f 74 68 20 61 20   specify both a 
8b40: 0a 20 20 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d  .  <yyterm>schem
8b50: 61 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20  a-name</yyterm> 
8b60: 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6f 72 20  and the TEMP or 
8b70: 54 45 4d 50 4f 52 41 52 59 20 6b 65 79 77 6f 72  TEMPORARY keywor
8b80: 64 2c 20 75 6e 6c 65 73 73 20 74 68 65 0a 20 20  d, unless the.  
8b90: 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e  <yyterm>schema-n
8ba0: 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 69 73 20  ame</yyterm> is 
8bb0: 22 74 65 6d 70 22 2e 20 0a 20 20 5e 49 66 20 6e  "temp". .  ^If n
8bc0: 6f 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 69 73  o schema name is
8bd0: 20 73 70 65 63 69 66 69 65 64 20 61 6e 64 20 74   specified and t
8be0: 68 65 0a 20 20 54 45 4d 50 20 6b 65 79 77 6f 72  he.  TEMP keywor
8bf0: 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74  d is not present
8c00: 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
8c10: 69 73 20 63 72 65 61 74 65 64 20 69 6e 20 74 68  is created in th
8c20: 65 20 6d 61 69 6e 0a 20 20 64 61 74 61 62 61 73  e main.  databas
8c30: 65 2e 0a 0a 3c 70 3e 0a 20 20 5e 49 74 20 69 73  e...<p>.  ^It is
8c40: 20 75 73 75 61 6c 6c 79 20 61 6e 20 65 72 72 6f   usually an erro
8c50: 72 20 74 6f 20 61 74 74 65 6d 70 74 20 74 6f 20  r to attempt to 
8c60: 63 72 65 61 74 65 20 61 20 6e 65 77 20 74 61 62  create a new tab
8c70: 6c 65 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  le in a database
8c80: 20 74 68 61 74 0a 20 20 61 6c 72 65 61 64 79 20   that.  already 
8c90: 63 6f 6e 74 61 69 6e 73 20 61 20 74 61 62 6c 65  contains a table
8ca0: 2c 20 69 6e 64 65 78 20 6f 72 20 76 69 65 77 20  , index or view 
8cb0: 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  of the same name
8cc0: 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69 66 20 74  . ^However, if t
8cd0: 68 65 0a 20 20 22 49 46 20 4e 4f 54 20 45 58 49  he.  "IF NOT EXI
8ce0: 53 54 53 22 20 63 6c 61 75 73 65 20 69 73 20 73  STS" clause is s
8cf0: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
8d00: 20 6f 66 20 74 68 65 20 43 52 45 41 54 45 20 54   of the CREATE T
8d10: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 61  ABLE statement a
8d20: 6e 64 0a 20 20 61 20 74 61 62 6c 65 20 6f 72 20  nd.  a table or 
8d30: 76 69 65 77 20 6f 66 20 74 68 65 20 73 61 6d 65  view of the same
8d40: 20 6e 61 6d 65 20 61 6c 72 65 61 64 79 20 65 78   name already ex
8d50: 69 73 74 73 2c 20 74 68 65 20 43 52 45 41 54 45  ists, the CREATE
8d60: 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 0a 20   TABLE command. 
8d70: 20 73 69 6d 70 6c 79 20 68 61 73 20 6e 6f 20 65   simply has no e
8d80: 66 66 65 63 74 20 28 61 6e 64 20 6e 6f 20 65 72  ffect (and no er
8d90: 72 6f 72 20 6d 65 73 73 61 67 65 20 69 73 20 72  ror message is r
8da0: 65 74 75 72 6e 65 64 29 2e 20 5e 41 6e 20 65 72  eturned). ^An er
8db0: 72 6f 72 20 69 73 20 73 74 69 6c 6c 0a 20 20 72  ror is still.  r
8dc0: 65 74 75 72 6e 65 64 20 69 66 20 74 68 65 20 74  eturned if the t
8dd0: 61 62 6c 65 20 63 61 6e 6e 6f 74 20 62 65 20 63  able cannot be c
8de0: 72 65 61 74 65 64 20 62 65 63 61 75 73 65 20 6f  reated because o
8df0: 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 69 6e  f an existing in
8e00: 64 65 78 2c 20 65 76 65 6e 20 0a 20 20 69 66 20  dex, even .  if 
8e10: 74 68 65 20 22 49 46 20 4e 4f 54 20 45 58 49 53  the "IF NOT EXIS
8e20: 54 53 22 20 63 6c 61 75 73 65 20 69 73 20 73 70  TS" clause is sp
8e30: 65 63 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e 49 74  ecified...<p>^It
8e40: 20 69 73 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72   is not an error
8e50: 20 74 6f 20 63 72 65 61 74 65 20 61 20 74 61 62   to create a tab
8e60: 6c 65 20 74 68 61 74 20 68 61 73 20 74 68 65 20  le that has the 
8e70: 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61 6e 20  same name as an 
8e80: 0a 20 20 65 78 69 73 74 69 6e 67 20 5b 43 52 45  .  existing [CRE
8e90: 41 54 45 20 54 52 49 47 47 45 52 7c 74 72 69 67  ATE TRIGGER|trig
8ea0: 67 65 72 5d 2e 0a 0a 3c 70 3e 5e 54 61 62 6c 65  ger]...<p>^Table
8eb0: 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 75 73  s are removed us
8ec0: 69 6e 67 20 74 68 65 20 5b 44 52 4f 50 20 54 41  ing the [DROP TA
8ed0: 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  BLE] statement. 
8ee0: 20 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66   </p>..<tcl>hd_f
8ef0: 72 61 67 6d 65 6e 74 20 63 72 65 61 74 65 74 61  ragment createta
8f00: 62 61 73 20 7b 43 52 45 41 54 45 20 54 41 42 4c  bas {CREATE TABL
8f10: 45 20 41 53 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  E AS}</tcl>.<h3>
8f20: 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e  CREATE TABLE ...
8f30: 20 41 53 20 53 45 4c 45 43 54 20 53 74 61 74 65   AS SELECT State
8f40: 6d 65 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  ments</h3>..<p>^
8f50: 28 41 20 22 43 52 45 41 54 45 20 54 41 42 4c 45  (A "CREATE TABLE
8f60: 20 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 22 20   ... AS SELECT" 
8f70: 73 74 61 74 65 6d 65 6e 74 20 63 72 65 61 74 65  statement create
8f80: 73 20 61 6e 64 20 70 6f 70 75 6c 61 74 65 73 20  s and populates 
8f90: 61 20 64 61 74 61 62 61 73 65 0a 74 61 62 6c 65  a database.table
8fa0: 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 72 65   based on the re
8fb0: 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43  sults of a SELEC
8fc0: 54 20 73 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e  T statement.)^ ^
8fd0: 28 54 68 65 20 74 61 62 6c 65 20 68 61 73 20 74  (The table has t
8fe0: 68 65 20 73 61 6d 65 0a 6e 75 6d 62 65 72 20 6f  he same.number o
8ff0: 66 20 63 6f 6c 75 6d 6e 73 20 61 73 20 74 68 65  f columns as the
9000: 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62   rows returned b
9010: 79 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  y the SELECT sta
9020: 74 65 6d 65 6e 74 2e 20 54 68 65 20 6e 61 6d 65  tement. The name
9030: 20 6f 66 0a 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of.each column 
9040: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74  is the same as t
9050: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63  he name of the c
9060: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 63 6f 6c  orresponding col
9070: 75 6d 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c  umn in the resul
9080: 74 0a 73 65 74 20 6f 66 20 74 68 65 20 53 45 4c  t.set of the SEL
9090: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 29 5e  ECT statement.)^
90a0: 20 5e 28 54 68 65 20 64 65 63 6c 61 72 65 64 20   ^(The declared 
90b0: 74 79 70 65 20 6f 66 20 65 61 63 68 20 63 6f 6c  type of each col
90c0: 75 6d 6e 20 69 73 20 64 65 74 65 72 6d 69 6e 65  umn is determine
90d0: 64 0a 62 79 20 74 68 65 20 5b 65 78 70 72 65 73  d.by the [expres
90e0: 73 69 6f 6e 20 61 66 66 69 6e 69 74 79 5d 20 6f  sion affinity] o
90f0: 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  f the correspond
9100: 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ing expression i
9110: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  n the result set
9120: 0a 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 73  .of the SELECT s
9130: 74 61 74 65 6d 65 6e 74 2c 20 61 73 20 66 6f 6c  tatement, as fol
9140: 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 63 65 6e  lows:.</p>..<cen
9150: 74 65 72 3e 3c 74 61 62 6c 65 20 62 6f 72 64 65  ter><table borde
9160: 72 3d 31 3e 0a 20 20 3c 74 72 3e 3c 74 68 3e 45  r=1>.  <tr><th>E
9170: 78 70 72 65 73 73 69 6f 6e 20 41 66 66 69 6e 69  xpression Affini
9180: 74 79 20 20 20 3c 74 68 3e 43 6f 6c 75 6d 6e 20  ty   <th>Column 
9190: 44 65 63 6c 61 72 65 64 20 54 79 70 65 0a 20 20  Declared Type.  
91a0: 3c 74 72 3e 3c 74 64 3e 54 45 58 54 20 20 20 20  <tr><td>TEXT    
91b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 74                <t
91c0: 64 3e 22 54 45 58 54 22 0a 20 20 3c 74 72 3e 3c  d>"TEXT".  <tr><
91d0: 74 64 3e 4e 55 4d 45 52 49 43 20 20 20 20 20 20  td>NUMERIC      
91e0: 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 4e 55           <td>"NU
91f0: 4d 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 49 4e 54  M".  <tr><td>INT
9200: 45 47 45 52 20 20 20 20 20 20 20 20 20 20 20 20  EGER            
9210: 20 20 20 3c 74 64 3e 22 49 4e 54 22 0a 20 20 3c     <td>"INT".  <
9220: 74 72 3e 3c 74 64 3e 52 45 41 4c 20 20 20 20 20  tr><td>REAL     
9230: 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 74 64               <td
9240: 3e 22 52 45 41 4c 22 0a 20 20 3c 74 72 3e 3c 74  >"REAL".  <tr><t
9250: 64 3e 4e 4f 4e 45 20 20 20 20 20 20 20 20 20 20  d>NONE          
9260: 20 20 20 20 20 20 20 20 3c 74 64 3e 22 22 20 28          <td>"" (
9270: 65 6d 70 74 79 20 73 74 72 69 6e 67 29 0a 3c 2f  empty string).</
9280: 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 29  table></center>)
9290: 5e 0a 0a 3c 70 3e 5e 28 41 20 74 61 62 6c 65 20  ^..<p>^(A table 
92a0: 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52  created using CR
92b0: 45 41 54 45 20 54 41 42 4c 45 20 41 53 20 68 61  EATE TABLE AS ha
92c0: 73 20 6e 6f 20 50 52 49 4d 41 52 59 20 4b 45 59  s no PRIMARY KEY
92d0: 20 61 6e 64 20 6e 6f 0a 63 6f 6e 73 74 72 61 69   and no.constrai
92e0: 6e 74 73 20 6f 66 20 61 6e 79 20 6b 69 6e 64 2e  nts of any kind.
92f0: 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   The default val
9300: 75 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ue of each colum
9310: 6e 20 69 73 20 4e 55 4c 4c 2e 20 54 68 65 20 64  n is NULL. The d
9320: 65 66 61 75 6c 74 0a 63 6f 6c 6c 61 74 69 6f 6e  efault.collation
9330: 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61   sequence for ea
9340: 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  ch column of the
9350: 20 6e 65 77 20 74 61 62 6c 65 20 69 73 20 42 49   new table is BI
9360: 4e 41 52 59 2e 29 5e 0a 0a 3c 70 3e 5e 54 61 62  NARY.)^..<p>^Tab
9370: 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  les created usin
9380: 67 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 41  g CREATE TABLE A
9390: 53 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20  S are initially 
93a0: 70 6f 70 75 6c 61 74 65 64 20 77 69 74 68 20 74  populated with t
93b0: 68 65 0a 72 6f 77 73 20 6f 66 20 64 61 74 61 20  he.rows of data 
93c0: 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
93d0: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
93e0: 2e 20 5e 52 6f 77 73 20 61 72 65 20 61 73 73 69  . ^Rows are assi
93f0: 67 6e 65 64 20 63 6f 6e 74 69 67 75 6f 75 73 6c  gned contiguousl
9400: 79 0a 61 73 63 65 6e 64 69 6e 67 20 5b 72 6f 77  y.ascending [row
9410: 69 64 5d 20 76 61 6c 75 65 73 2c 20 73 74 61 72  id] values, star
9420: 74 69 6e 67 20 77 69 74 68 20 31 2c 20 69 6e 20  ting with 1, in 
9430: 74 68 65 20 5b 6f 72 64 65 72 20 62 79 7c 6f 72  the [order by|or
9440: 64 65 72 5d 20 74 68 61 74 20 74 68 65 79 0a 61  der] that they.a
9450: 72 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  re returned by t
9460: 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
9470: 65 6e 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ent...<tcl>hd_fr
9480: 61 67 6d 65 6e 74 20 7b 74 61 62 6c 65 63 6f 6c  agment {tablecol
9490: 64 65 66 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65 66  def} {column def
94a0: 69 6e 69 74 69 6f 6e 7d 20 7b 63 6f 6c 75 6d 6e  inition} {column
94b0: 20 64 65 66 69 6e 69 74 69 6f 6e 73 7d 3c 2f 74   definitions}</t
94c0: 63 6c 3e 0a 3c 68 33 3e 43 6f 6c 75 6d 6e 20 44  cl>.<h3>Column D
94d0: 65 66 69 6e 69 74 69 6f 6e 73 3c 2f 68 33 3e 0a  efinitions</h3>.
94e0: 0a 3c 70 3e 55 6e 6c 65 73 73 20 69 74 20 69 73  .<p>Unless it is
94f0: 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   a CREATE TABLE 
9500: 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 20 73 74  ... AS SELECT st
9510: 61 74 65 6d 65 6e 74 2c 20 61 20 43 52 45 41 54  atement, a CREAT
9520: 45 20 54 41 42 4c 45 20 69 6e 63 6c 75 64 65 73  E TABLE includes
9530: 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 5b 63 6f  .one or more [co
9540: 6c 75 6d 6e 2d 64 65 66 7c 63 6f 6c 75 6d 6e 20  lumn-def|column 
9550: 64 65 66 69 6e 69 74 69 6f 6e 73 5d 2c 20 6f 70  definitions], op
9560: 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65  tionally followe
9570: 64 20 62 79 20 61 20 6c 69 73 74 20 6f 66 0a 5b  d by a list of.[
9580: 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74  table-constraint
9590: 7c 74 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e  |table constrain
95a0: 74 73 5d 2e 20 20 45 61 63 68 20 63 6f 6c 75 6d  ts].  Each colum
95b0: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 63 6f 6e  n definition con
95c0: 73 69 73 74 73 20 6f 66 20 74 68 65 0a 6e 61 6d  sists of the.nam
95d0: 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2c  e of the column,
95e0: 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c   optionally foll
95f0: 6f 77 65 64 20 62 79 20 74 68 65 20 64 65 63 6c  owed by the decl
9600: 61 72 65 64 20 74 79 70 65 20 6f 66 20 74 68 65  ared type of the
9610: 20 63 6f 6c 75 6d 6e 2c 0a 74 68 65 6e 20 6f 6e   column,.then on
9620: 65 20 6f 72 20 6d 6f 72 65 20 6f 70 74 69 6f 6e  e or more option
9630: 61 6c 20 5b 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74  al [column-const
9640: 72 61 69 6e 74 7c 63 6f 6c 75 6d 6e 20 63 6f 6e  raint|column con
9650: 73 74 72 61 69 6e 74 73 5d 2e 20 49 6e 63 6c 75  straints]. Inclu
9660: 64 65 64 20 69 6e 0a 74 68 65 20 64 65 66 69 6e  ded in.the defin
9670: 69 74 69 6f 6e 20 6f 66 20 22 63 6f 6c 75 6d 6e  ition of "column
9680: 20 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 66 6f   constraints" fo
9690: 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
96a0: 66 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a 73  f the previous.s
96b0: 74 61 74 65 6d 65 6e 74 20 61 72 65 20 74 68 65  tatement are the
96c0: 20 43 4f 4c 4c 41 54 45 20 61 6e 64 20 44 45 46   COLLATE and DEF
96d0: 41 55 4c 54 20 63 6c 61 75 73 65 73 2c 20 65 76  AULT clauses, ev
96e0: 65 6e 20 74 68 6f 75 67 68 20 74 68 65 73 65 20  en though these 
96f0: 61 72 65 20 6e 6f 74 20 72 65 61 6c 6c 79 0a 63  are not really.c
9700: 6f 6e 73 74 72 61 69 6e 74 73 20 69 6e 20 74 68  onstraints in th
9710: 65 20 73 65 6e 73 65 20 74 68 61 74 20 74 68 65  e sense that the
9720: 79 20 64 6f 20 6e 6f 74 20 72 65 73 74 72 69 63  y do not restric
9730: 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74 20  t the data that 
9740: 74 68 65 20 74 61 62 6c 65 20 6d 61 79 0a 63 6f  the table may.co
9750: 6e 74 61 69 6e 2e 20 54 68 65 20 6f 74 68 65 72  ntain. The other
9760: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2d 20 4e   constraints - N
9770: 4f 54 20 4e 55 4c 4c 2c 20 43 48 45 43 4b 2c 20  OT NULL, CHECK, 
9780: 55 4e 49 51 55 45 2c 20 50 52 49 4d 41 52 59 20  UNIQUE, PRIMARY 
9790: 4b 45 59 20 61 6e 64 0a 46 4f 52 45 49 47 4e 20  KEY and.FOREIGN 
97a0: 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  KEY constraints 
97b0: 2d 20 69 6d 70 6f 73 65 20 72 65 73 74 72 69 63  - impose restric
97c0: 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 74 61 62  tions on the tab
97d0: 6c 65 73 20 64 61 74 61 2c 20 61 6e 64 20 61 72  les data, and ar
97e0: 65 20 61 72 65 0a 64 65 73 63 72 69 62 65 64 20  e are.described 
97f0: 75 6e 64 65 72 20 5b 63 6f 6e 73 74 72 61 69 6e  under [constrain
9800: 74 73 7c 53 51 4c 20 44 61 74 61 20 43 6f 6e 73  ts|SQL Data Cons
9810: 74 72 61 69 6e 74 73 5d 20 62 65 6c 6f 77 2e 0a  traints] below..
9820: 0a 3c 70 3e 5e 55 6e 6c 69 6b 65 20 6d 6f 73 74  .<p>^Unlike most
9830: 20 53 51 4c 20 64 61 74 61 62 61 73 65 73 2c 20   SQL databases, 
9840: 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20  SQLite does not 
9850: 72 65 73 74 72 69 63 74 20 74 68 65 20 74 79 70  restrict the typ
9860: 65 20 6f 66 20 64 61 74 61 20 74 68 61 74 0a 6d  e of data that.m
9870: 61 79 20 62 65 20 69 6e 73 65 72 74 65 64 20 69  ay be inserted i
9880: 6e 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 62 61 73  nto a column bas
9890: 65 64 20 6f 6e 20 74 68 65 20 63 6f 6c 75 6d 6e  ed on the column
98a0: 73 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 2e  s declared type.
98b0: 20 49 6e 73 74 65 61 64 2c 0a 53 51 4c 69 74 65   Instead,.SQLite
98c0: 20 75 73 65 73 20 5b 64 79 6e 61 6d 69 63 20 74   uses [dynamic t
98d0: 79 70 69 6e 67 5d 2e 20 5e 54 68 65 20 64 65 63  yping]. ^The dec
98e0: 6c 61 72 65 64 20 74 79 70 65 20 6f 66 20 61 20  lared type of a 
98f0: 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 20 74  column is used t
9900: 6f 0a 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o.determine the 
9910: 5b 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 74 68  [affinity] of th
9920: 65 20 63 6f 6c 75 6d 6e 20 6f 6e 6c 79 2e 0a 0a  e column only...
9930: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
9940: 20 64 66 6c 74 76 61 6c 20 7b 64 65 66 61 75 6c   dfltval {defaul
9950: 74 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 7d 20  t column value} 
9960: 7b 64 65 66 61 75 6c 74 20 76 61 6c 75 65 7d 3c  {default value}<
9970: 2f 74 63 6c 3e 0a 3c 70 3e 54 68 65 20 44 45 46  /tcl>.<p>The DEF
9980: 41 55 4c 54 20 63 6c 61 75 73 65 20 73 70 65 63  AULT clause spec
9990: 69 66 69 65 73 20 61 20 64 65 66 61 75 6c 74 20  ifies a default 
99a0: 76 61 6c 75 65 20 74 6f 20 75 73 65 20 66 6f 72  value to use for
99b0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 66 20 6e   the column if n
99c0: 6f 0a 76 61 6c 75 65 20 69 73 20 65 78 70 6c 69  o.value is expli
99d0: 63 69 74 6c 79 20 70 72 6f 76 69 64 65 64 20 62  citly provided b
99e0: 79 20 74 68 65 20 75 73 65 72 20 77 68 65 6e 20  y the user when 
99f0: 64 6f 69 6e 67 20 61 6e 20 5b 49 4e 53 45 52 54  doing an [INSERT
9a00: 5d 2e 20 5e 49 66 20 74 68 65 72 65 0a 69 73 20  ]. ^If there.is 
9a10: 6e 6f 20 65 78 70 6c 69 63 69 74 20 44 45 46 41  no explicit DEFA
9a20: 55 4c 54 20 63 6c 61 75 73 65 20 61 74 74 61 63  ULT clause attac
9a30: 68 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20  hed to a column 
9a40: 64 65 66 69 6e 69 74 69 6f 6e 2c 20 74 68 65 6e  definition, then
9a50: 20 74 68 65 20 0a 64 65 66 61 75 6c 74 20 76 61   the .default va
9a60: 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  lue of the colum
9a70: 6e 20 69 73 20 4e 55 4c 4c 2e 20 5e 28 41 6e 20  n is NULL. ^(An 
9a80: 65 78 70 6c 69 63 69 74 20 44 45 46 41 55 4c 54  explicit DEFAULT
9a90: 20 63 6c 61 75 73 65 20 6d 61 79 20 73 70 65 63   clause may spec
9aa0: 69 66 79 0a 74 68 61 74 20 74 68 65 20 64 65 66  ify.that the def
9ab0: 61 75 6c 74 20 76 61 6c 75 65 20 69 73 20 4e 55  ault value is NU
9ac0: 4c 4c 2c 20 61 20 73 74 72 69 6e 67 20 63 6f 6e  LL, a string con
9ad0: 73 74 61 6e 74 2c 20 61 20 62 6c 6f 62 20 63 6f  stant, a blob co
9ae0: 6e 73 74 61 6e 74 2c 20 61 0a 73 69 67 6e 65 64  nstant, a.signed
9af0: 2d 6e 75 6d 62 65 72 2c 20 6f 72 20 61 6e 79 20  -number, or any 
9b00: 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73  constant express
9b10: 69 6f 6e 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20  ion enclosed in 
9b20: 70 61 72 65 6e 74 68 65 73 65 73 2e 20 41 0a 64  parentheses. A.d
9b30: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6d 61 79  efault value may
9b40: 20 61 6c 73 6f 20 62 65 20 6f 6e 65 20 6f 66 20   also be one of 
9b50: 74 68 65 20 73 70 65 63 69 61 6c 20 63 61 73 65  the special case
9b60: 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20 6b 65 79  -independent key
9b70: 77 6f 72 64 73 0a 43 55 52 52 45 4e 54 5f 54 49  words.CURRENT_TI
9b80: 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45  ME, CURRENT_DATE
9b90: 20 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45   or CURRENT_TIME
9ba0: 53 54 41 4d 50 2e 29 5e 20 5e 46 6f 72 20 74 68  STAMP.)^ ^For th
9bb0: 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74 68  e purposes of th
9bc0: 65 0a 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65  e.DEFAULT clause
9bd0: 2c 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  , an expression 
9be0: 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 63 6f  is considered co
9bf0: 6e 73 74 61 6e 74 20 69 66 20 69 74 20 64 6f 65  nstant if it doe
9c00: 73 0a 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 73 75  s.contains no su
9c10: 62 2d 71 75 65 72 69 65 73 2c 20 63 6f 6c 75 6d  b-queries, colum
9c20: 6e 20 6f 72 20 74 61 62 6c 65 20 72 65 66 65 72  n or table refer
9c30: 65 6e 63 65 73 2c 20 5b 62 6f 75 6e 64 20 70 61  ences, [bound pa
9c40: 72 61 6d 65 74 65 72 73 5d 2c 0a 6f 72 20 73 74  rameters],.or st
9c50: 72 69 6e 67 20 6c 69 74 65 72 61 6c 73 20 65 6e  ring literals en
9c60: 63 6c 6f 73 65 64 20 69 6e 20 64 6f 75 62 6c 65  closed in double
9c70: 2d 71 75 6f 74 65 73 20 69 6e 73 74 65 61 64 20  -quotes instead 
9c80: 6f 66 20 73 69 6e 67 6c 65 2d 71 75 6f 74 65 73  of single-quotes
9c90: 2e 0a 0a 3c 70 3e 5e 28 45 61 63 68 20 74 69 6d  ...<p>^(Each tim
9ca0: 65 20 61 20 72 6f 77 20 69 73 20 69 6e 73 65 72  e a row is inser
9cb0: 74 65 64 20 69 6e 74 6f 20 74 68 65 20 74 61 62  ted into the tab
9cc0: 6c 65 20 62 79 20 61 6e 20 49 4e 53 45 52 54 20  le by an INSERT 
9cd0: 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 0a  statement that .
9ce0: 64 6f 65 73 20 6e 6f 74 20 70 72 6f 76 69 64 65  does not provide
9cf0: 20 65 78 70 6c 69 63 69 74 20 76 61 6c 75 65 73   explicit values
9d00: 20 66 6f 72 20 61 6c 6c 20 74 61 62 6c 65 20 63   for all table c
9d10: 6f 6c 75 6d 6e 73 20 74 68 65 20 76 61 6c 75 65  olumns the value
9d20: 73 20 73 74 6f 72 65 64 20 69 6e 0a 74 68 65 20  s stored in.the 
9d30: 6e 65 77 20 72 6f 77 20 61 72 65 20 64 65 74 65  new row are dete
9d40: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 69 72 20  rmined by their 
9d50: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73 29 5e  default values)^
9d60: 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c  , as follows:..<
9d70: 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66  ul>.  <li><p>^If
9d80: 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
9d90: 75 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ue of the column
9da0: 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 4e   is a constant N
9db0: 55 4c 4c 2c 20 74 65 78 74 2c 20 62 6c 6f 62 20  ULL, text, blob 
9dc0: 6f 72 0a 20 20 20 20 73 69 67 6e 65 64 2d 6e 75  or.    signed-nu
9dd0: 6d 62 65 72 20 76 61 6c 75 65 2c 20 74 68 65 6e  mber value, then
9de0: 20 74 68 61 74 20 76 61 6c 75 65 20 69 73 20 75   that value is u
9df0: 73 65 64 20 64 69 72 65 63 74 6c 79 20 69 6e 20  sed directly in 
9e00: 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 0a 20 20  the new row...  
9e10: 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 64  <li><p>^If the d
9e20: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
9e30: 61 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65  a column is an e
9e40: 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 70 61 72  xpression in par
9e50: 65 6e 74 68 65 73 65 73 2c 20 74 68 65 6e 0a 20  entheses, then. 
9e60: 20 20 20 74 68 65 20 65 78 70 72 65 73 73 69 6f     the expressio
9e70: 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f  n is evaluated o
9e80: 6e 63 65 20 66 6f 72 20 65 61 63 68 20 72 6f 77  nce for each row
9e90: 20 69 6e 73 65 72 74 65 64 20 61 6e 64 20 74 68   inserted and th
9ea0: 65 20 72 65 73 75 6c 74 73 0a 20 20 20 20 75 73  e results.    us
9eb0: 65 64 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f  ed in the new ro
9ec0: 77 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66  w...  <li><p>^If
9ed0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
9ee0: 75 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69  ue of a column i
9ef0: 73 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20  s CURRENT_TIME, 
9f00: 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f 72 0a  CURRENT_DATE or.
9f10: 20 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d 45      CURRENT_TIME
9f20: 53 54 41 4d 50 2c 20 74 68 65 6e 20 74 68 65 20  STAMP, then the 
9f30: 76 61 6c 75 65 20 75 73 65 64 20 69 6e 20 74 68  value used in th
9f40: 65 20 6e 65 77 20 72 6f 77 20 69 73 20 61 20 74  e new row is a t
9f50: 65 78 74 0a 20 20 20 20 72 65 70 72 65 73 65 6e  ext.    represen
9f60: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 75  tation of the cu
9f70: 72 72 65 6e 74 20 55 54 43 20 64 61 74 65 20 61  rrent UTC date a
9f80: 6e 64 2f 6f 72 20 74 69 6d 65 2e 20 5e 46 6f 72  nd/or time. ^For
9f90: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 74   CURRENT_TIME, t
9fa0: 68 65 0a 20 20 20 20 66 6f 72 6d 61 74 20 6f 66  he.    format of
9fb0: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 22 48   the value is "H
9fc0: 48 3a 4d 4d 3a 53 53 22 2e 20 5e 46 6f 72 20 43  H:MM:SS". ^For C
9fd0: 55 52 52 45 4e 54 5f 44 41 54 45 2c 20 22 59 59  URRENT_DATE, "YY
9fe0: 59 59 2d 4d 4d 2d 44 44 22 2e 20 5e 54 68 65 0a  YY-MM-DD". ^The.
9ff0: 20 20 20 20 66 6f 72 6d 61 74 20 66 6f 72 20 43      format for C
a000: 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
a010: 20 69 73 20 22 59 59 59 59 2d 4d 4d 2d 44 44 20   is "YYYY-MM-DD 
a020: 48 48 3a 4d 4d 3a 53 53 22 2e 0a 3c 2f 75 6c 3e  HH:MM:SS"..</ul>
a030: 0a 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c 4c 41 54  ..<p>^The COLLAT
a040: 45 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69  E clause specifi
a050: 65 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  es the name of a
a060: 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75   [collating sequ
a070: 65 6e 63 65 5d 20 74 6f 20 75 73 65 20 61 73 0a  ence] to use as.
a080: 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c  the default coll
a090: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66  ation sequence f
a0a0: 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 5e  or the column. ^
a0b0: 49 66 20 6e 6f 20 43 4f 4c 4c 41 54 45 20 63 6c  If no COLLATE cl
a0c0: 61 75 73 65 20 69 73 0a 73 70 65 63 69 66 69 65  ause is.specifie
a0d0: 64 2c 20 74 68 65 20 64 65 66 61 75 6c 74 20 63  d, the default c
a0e0: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
a0f0: 65 20 69 73 20 5b 42 49 4e 41 52 59 5d 2e 0a 0a  e is [BINARY]...
a100: 3c 70 3e 5e 54 68 65 20 6e 75 6d 62 65 72 20 6f  <p>^The number o
a110: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 20 74  f columns in a t
a120: 61 62 6c 65 20 69 73 20 6c 69 6d 69 74 65 64 20  able is limited 
a130: 62 79 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4d  by the [SQLITE_M
a140: 41 58 5f 43 4f 4c 55 4d 4e 5d 0a 63 6f 6d 70 69  AX_COLUMN].compi
a150: 6c 65 2d 74 69 6d 65 20 70 61 72 61 6d 65 74 65  le-time paramete
a160: 72 2e 20 5e 41 20 73 69 6e 67 6c 65 20 72 6f 77  r. ^A single row
a170: 20 6f 66 20 61 20 74 61 62 6c 65 20 63 61 6e 6e   of a table cann
a180: 6f 74 20 73 74 6f 72 65 20 6d 6f 72 65 20 74 68  ot store more th
a190: 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 4c  an.[SQLITE_MAX_L
a1a0: 45 4e 47 54 48 5d 20 62 79 74 65 73 20 6f 66 20  ENGTH] bytes of 
a1b0: 64 61 74 61 2e 20 5e 42 6f 74 68 20 6f 66 20 74  data. ^Both of t
a1c0: 68 65 73 65 20 6c 69 6d 69 74 73 20 63 61 6e 20  hese limits can 
a1d0: 62 65 20 6c 6f 77 65 72 65 64 20 61 74 0a 72 75  be lowered at.ru
a1e0: 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65 20  ntime using the 
a1f0: 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29  [sqlite3_limit()
a200: 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63  ] C/C++ interfac
a210: 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  e.</p>..<tcl>hd_
a220: 66 72 61 67 6d 65 6e 74 20 7b 63 6f 6e 73 74 72  fragment {constr
a230: 61 69 6e 74 73 7d 20 7b 63 6f 6e 73 74 72 61 69  aints} {constrai
a240: 6e 74 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 53  nts}</tcl>.<h3>S
a250: 51 4c 20 44 61 74 61 20 43 6f 6e 73 74 72 61 69  QL Data Constrai
a260: 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 74 63 6c 3e 68  nts</h3>..<tcl>h
a270: 64 5f 66 72 61 67 6d 65 6e 74 20 70 72 69 6d 6b  d_fragment primk
a280: 65 79 63 6f 6e 73 74 20 7b 50 52 49 4d 41 52 59  eyconst {PRIMARY
a290: 20 4b 45 59 7d 20 7b 50 52 49 4d 41 52 59 20 4b   KEY} {PRIMARY K
a2a0: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f  EY constraint}</
a2b0: 74 63 6c 3e 0a 3c 70 3e 5e 45 61 63 68 20 74 61  tcl>.<p>^Each ta
a2c0: 62 6c 65 20 69 6e 20 53 51 4c 69 74 65 20 6d 61  ble in SQLite ma
a2d0: 79 20 68 61 76 65 20 61 74 20 6d 6f 73 74 20 6f  y have at most o
a2e0: 6e 65 20 3c 62 3e 50 52 49 4d 41 52 59 20 4b 45  ne <b>PRIMARY KE
a2f0: 59 3c 2f 62 3e 2e 20 5e 49 66 20 74 68 65 0a 20  Y</b>. ^If the. 
a300: 20 6b 65 79 77 6f 72 64 73 20 50 52 49 4d 41 52   keywords PRIMAR
a310: 59 20 4b 45 59 20 61 72 65 20 61 64 64 65 64 20  Y KEY are added 
a320: 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69  to a column defi
a330: 6e 69 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  nition, then the
a340: 20 70 72 69 6d 61 72 79 20 6b 65 79 0a 20 20 66   primary key.  f
a350: 6f 72 20 74 68 65 20 74 61 62 6c 65 20 63 6f 6e  or the table con
a360: 73 69 73 74 73 20 6f 66 20 74 68 61 74 20 73 69  sists of that si
a370: 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 5e 4f 72  ngle column. ^Or
a380: 2c 20 69 66 20 61 20 50 52 49 4d 41 52 59 20 4b  , if a PRIMARY K
a390: 45 59 20 63 6c 61 75 73 65 20 0a 20 20 69 73 20  EY clause .  is 
a3a0: 73 70 65 63 69 66 69 65 64 20 61 73 20 61 20 5b  specified as a [
a3b0: 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74  table-constraint
a3c0: 5d 2c 20 74 68 65 6e 20 74 68 65 20 70 72 69 6d  ], then the prim
a3d0: 61 72 79 20 6b 65 79 20 6f 66 20 74 68 65 20 74  ary key of the t
a3e0: 61 62 6c 65 0a 20 20 63 6f 6e 73 69 73 74 73 20  able.  consists 
a3f0: 6f 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 63  of the list of c
a400: 6f 6c 75 6d 6e 73 20 73 70 65 63 69 66 69 65 64  olumns specified
a410: 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
a420: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6c 61 75  PRIMARY KEY clau
a430: 73 65 2e 0a 20 20 5e 54 68 65 20 50 52 49 4d 41  se..  ^The PRIMA
a440: 52 59 20 4b 45 59 20 63 6c 61 75 73 65 20 6d 75  RY KEY clause mu
a450: 73 74 20 63 6f 6e 74 61 69 6e 20 6f 6e 6c 79 20  st contain only 
a460: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 26 6d 64  column names &md
a470: 61 73 68 3b 20 74 68 65 20 75 73 65 20 6f 66 20  ash; the use of 
a480: 0a 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  .  expressions i
a490: 6e 20 61 6e 20 5b 69 6e 64 65 78 65 64 2d 63 6f  n an [indexed-co
a4a0: 6c 75 6d 6e 5d 20 6f 66 20 61 20 50 52 49 4d 41  lumn] of a PRIMA
a4b0: 52 59 20 4b 45 59 20 69 73 20 6e 6f 74 20 73 75  RY KEY is not su
a4c0: 70 70 6f 72 74 65 64 2e 0a 20 20 5e 41 6e 20 65  pported..  ^An e
a4d0: 72 72 6f 72 20 69 73 20 72 61 69 73 65 64 20 69  rror is raised i
a4e0: 66 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  f more than one 
a4f0: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6c 61 75  PRIMARY KEY clau
a500: 73 65 20 61 70 70 65 61 72 73 20 69 6e 20 61 0a  se appears in a.
a510: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73    CREATE TABLE s
a520: 74 61 74 65 6d 65 6e 74 2e 20 20 5e 54 68 65 20  tatement.  ^The 
a530: 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 6f  PRIMARY KEY is o
a540: 70 74 69 6f 6e 61 6c 20 66 6f 72 20 6f 72 64 69  ptional for ordi
a550: 6e 61 72 79 20 74 61 62 6c 65 73 0a 20 20 62 75  nary tables.  bu
a560: 74 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  t is required fo
a570: 72 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44  r [WITHOUT ROWID
a580: 5d 20 74 61 62 6c 65 73 2e 0a 0a 3c 70 3e 49 66  ] tables...<p>If
a590: 20 61 20 74 61 62 6c 65 20 68 61 73 20 61 20 73   a table has a s
a5a0: 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 70 72 69  ingle column pri
a5b0: 6d 61 72 79 20 6b 65 79 20 61 6e 64 20 74 68 65  mary key and the
a5c0: 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f   declared type o
a5d0: 66 20 74 68 61 74 0a 20 20 63 6f 6c 75 6d 6e 20  f that.  column 
a5e0: 69 73 20 22 49 4e 54 45 47 45 52 22 20 61 6e 64  is "INTEGER" and
a5f0: 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 6e 6f   the table is no
a600: 74 20 61 20 5b 57 49 54 48 4f 55 54 20 52 4f 57  t a [WITHOUT ROW
a610: 49 44 5d 20 74 61 62 6c 65 2c 0a 20 20 74 68 65  ID] table,.  the
a620: 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20  n the column is 
a630: 6b 6e 6f 77 6e 20 61 73 20 61 6e 20 5b 49 4e 54  known as an [INT
a640: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
a650: 5d 2e 0a 20 20 53 65 65 20 5b 72 6f 77 69 64 7c  ]..  See [rowid|
a660: 62 65 6c 6f 77 5d 20 66 6f 72 20 61 20 64 65 73  below] for a des
a670: 63 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20  cription of the 
a680: 73 70 65 63 69 61 6c 20 70 72 6f 70 65 72 74 69  special properti
a690: 65 73 20 61 6e 64 20 62 65 68 61 76 69 6f 72 73  es and behaviors
a6a0: 0a 20 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  .  associated wi
a6b0: 74 68 20 61 6e 20 5b 49 4e 54 45 47 45 52 20 50  th an [INTEGER P
a6c0: 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 0a 3c 70  RIMARY KEY]...<p
a6d0: 3e 5e 45 61 63 68 20 72 6f 77 20 69 6e 20 61 20  >^Each row in a 
a6e0: 74 61 62 6c 65 20 77 69 74 68 20 61 20 70 72 69  table with a pri
a6f0: 6d 61 72 79 20 6b 65 79 20 6d 75 73 74 20 68 61  mary key must ha
a700: 76 65 20 61 20 75 6e 69 71 75 65 20 63 6f 6d 62  ve a unique comb
a710: 69 6e 61 74 69 6f 6e 0a 20 20 6f 66 20 76 61 6c  ination.  of val
a720: 75 65 73 20 69 6e 20 69 74 73 20 70 72 69 6d 61  ues in its prima
a730: 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 2e 20  ry key columns. 
a740: 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65  ^For the purpose
a750: 73 20 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67  s of determining
a760: 0a 20 20 74 68 65 20 75 6e 69 71 75 65 6e 65 73  .  the uniquenes
a770: 73 20 6f 66 20 70 72 69 6d 61 72 79 20 6b 65 79  s of primary key
a780: 20 76 61 6c 75 65 73 2c 20 4e 55 4c 4c 20 76 61   values, NULL va
a790: 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65  lues are conside
a7a0: 72 65 64 20 64 69 73 74 69 6e 63 74 20 66 72 6f  red distinct fro
a7b0: 6d 0a 20 20 61 6c 6c 20 6f 74 68 65 72 20 76 61  m.  all other va
a7c0: 6c 75 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20  lues, including 
a7d0: 6f 74 68 65 72 20 4e 55 4c 4c 73 2e 20 5e 49 66  other NULLs. ^If
a7e0: 20 61 6e 20 5b 49 4e 53 45 52 54 5d 20 6f 72 20   an [INSERT] or 
a7f0: 5b 55 50 44 41 54 45 5d 0a 20 20 73 74 61 74 65  [UPDATE].  state
a800: 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f  ment attempts to
a810: 20 6d 6f 64 69 66 79 20 74 68 65 20 74 61 62 6c   modify the tabl
a820: 65 20 63 6f 6e 74 65 6e 74 20 73 6f 20 74 68 61  e content so tha
a830: 74 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 72 6f  t two or more ro
a840: 77 73 0a 20 20 68 61 76 65 20 69 64 65 6e 74 69  ws.  have identi
a850: 63 61 6c 20 70 72 69 6d 61 72 79 20 6b 65 79 20  cal primary key 
a860: 76 61 6c 75 65 73 2c 20 74 68 61 74 20 69 73 20  values, that is 
a870: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
a880: 6c 61 74 69 6f 6e 2e 0a 0a 3c 70 3e 20 41 63 63  lation...<p> Acc
a890: 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 53 51  ording to the SQ
a8a0: 4c 20 73 74 61 6e 64 61 72 64 2c 20 50 52 49 4d  L standard, PRIM
a8b0: 41 52 59 20 4b 45 59 20 73 68 6f 75 6c 64 20 61  ARY KEY should a
a8c0: 6c 77 61 79 73 20 69 6d 70 6c 79 20 4e 4f 54 20  lways imply NOT 
a8d0: 4e 55 4c 4c 2e 0a 20 20 55 6e 66 6f 72 74 75 6e  NULL..  Unfortun
a8e0: 61 74 65 6c 79 2c 20 64 75 65 20 74 6f 20 61 20  ately, due to a 
a8f0: 62 75 67 20 69 6e 20 73 6f 6d 65 20 65 61 72 6c  bug in some earl
a900: 79 20 76 65 72 73 69 6f 6e 73 2c 20 74 68 69 73  y versions, this
a910: 20 69 73 20 6e 6f 74 20 74 68 65 0a 20 20 63 61   is not the.  ca
a920: 73 65 20 69 6e 20 53 51 4c 69 74 65 2e 20 5e 55  se in SQLite. ^U
a930: 6e 6c 65 73 73 20 74 68 65 20 63 6f 6c 75 6d 6e  nless the column
a940: 20 69 73 20 61 6e 20 5b 49 4e 54 45 47 45 52 20   is an [INTEGER 
a950: 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 6f 72 0a  PRIMARY KEY] or.
a960: 20 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 61    the table is a
a970: 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d   [WITHOUT ROWID]
a980: 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 63 6f   table or the co
a990: 6c 75 6d 6e 20 69 73 20 64 65 63 6c 61 72 65 64  lumn is declared
a9a0: 20 4e 4f 54 20 4e 55 4c 4c 2c 0a 20 20 53 51 4c   NOT NULL,.  SQL
a9b0: 69 74 65 20 61 6c 6c 6f 77 73 20 4e 55 4c 4c 20  ite allows NULL 
a9c0: 76 61 6c 75 65 73 20 69 6e 20 61 20 50 52 49 4d  values in a PRIM
a9d0: 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 2e 20  ARY KEY column. 
a9e0: 20 53 51 4c 69 74 65 20 63 6f 75 6c 64 20 62 65   SQLite could be
a9f0: 20 66 69 78 65 64 20 74 6f 0a 20 20 63 6f 6e 66   fixed to.  conf
aa00: 6f 72 6d 20 74 6f 20 74 68 65 20 73 74 61 6e 64  orm to the stand
aa10: 61 72 64 2c 20 62 75 74 20 64 6f 69 6e 67 20 73  ard, but doing s
aa20: 6f 20 6d 69 67 68 74 20 62 72 65 61 6b 20 6c 65  o might break le
aa30: 67 61 63 79 20 61 70 70 6c 69 63 61 74 69 6f 6e  gacy application
aa40: 73 2e 0a 20 20 48 65 6e 63 65 2c 20 69 74 20 68  s..  Hence, it h
aa50: 61 73 20 62 65 65 6e 20 64 65 63 69 64 65 64 20  as been decided 
aa60: 74 6f 20 6d 65 72 65 6c 79 20 64 6f 63 75 6d 65  to merely docume
aa70: 6e 74 20 74 68 65 20 66 61 63 74 20 74 68 61 74  nt the fact that
aa80: 20 53 51 4c 69 74 65 0a 20 20 61 6c 6c 6f 77 69   SQLite.  allowi
aa90: 6e 67 20 4e 55 4c 4c 73 20 69 6e 20 6d 6f 73 74  ng NULLs in most
aaa0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c   PRIMARY KEY col
aab0: 75 6d 6e 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  umns...<tcl>hd_f
aac0: 72 61 67 6d 65 6e 74 20 75 6e 69 71 75 65 63 6f  ragment uniqueco
aad0: 6e 73 74 20 7b 55 4e 49 51 55 45 7d 20 7b 75 6e  nst {UNIQUE} {un
aae0: 69 71 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 7d  ique constraint}
aaf0: 20 7b 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61   {UNIQUE constra
ab00: 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 41  int}</tcl>.<p>^A
ab10: 20 3c 62 3e 55 4e 49 51 55 45 3c 2f 62 3e 20 63   <b>UNIQUE</b> c
ab20: 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 73 69 6d  onstraint is sim
ab30: 69 6c 61 72 20 74 6f 20 61 20 50 52 49 4d 41 52  ilar to a PRIMAR
ab40: 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  Y KEY constraint
ab50: 2c 20 65 78 63 65 70 74 0a 20 20 74 68 61 74 20  , except.  that 
ab60: 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6d  a single table m
ab70: 61 79 20 68 61 76 65 20 61 6e 79 20 6e 75 6d 62  ay have any numb
ab80: 65 72 20 6f 66 20 55 4e 49 51 55 45 20 63 6f 6e  er of UNIQUE con
ab90: 73 74 72 61 69 6e 74 73 2e 20 5e 46 6f 72 20 65  straints. ^For e
aba0: 61 63 68 0a 20 20 55 4e 49 51 55 45 20 63 6f 6e  ach.  UNIQUE con
abb0: 73 74 72 61 69 6e 74 20 6f 6e 20 74 68 65 20 74  straint on the t
abc0: 61 62 6c 65 2c 20 65 61 63 68 20 72 6f 77 20 6d  able, each row m
abd0: 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 20 75 6e  ust contain a un
abe0: 69 71 75 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  ique combination
abf0: 0a 20 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20  .  of values in 
ac00: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 64 65 6e  the columns iden
ac10: 74 69 66 69 65 64 20 62 79 20 74 68 65 20 55 4e  tified by the UN
ac20: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e  IQUE constraint.
ac30: 20 0a 20 20 5e 46 6f 72 20 74 68 65 20 70 75 72   .  ^For the pur
ac40: 70 6f 73 65 73 20 6f 66 20 55 4e 49 51 55 45 20  poses of UNIQUE 
ac50: 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 4e 55 4c  constraints, NUL
ac60: 4c 20 76 61 6c 75 65 73 0a 20 20 61 72 65 20 63  L values.  are c
ac70: 6f 6e 73 69 64 65 72 65 64 20 64 69 73 74 69 6e  onsidered distin
ac80: 63 74 20 66 72 6f 6d 20 61 6c 6c 20 6f 74 68 65  ct from all othe
ac90: 72 20 76 61 6c 75 65 73 2c 20 69 6e 63 6c 75 64  r values, includ
aca0: 69 6e 67 20 6f 74 68 65 72 20 4e 55 4c 4c 73 2e  ing other NULLs.
acb0: 0a 20 20 5e 41 73 20 77 69 74 68 20 50 52 49 4d  .  ^As with PRIM
acc0: 41 52 59 20 4b 45 59 73 2c 20 61 20 55 4e 49 51  ARY KEYs, a UNIQ
acd0: 55 45 20 5b 74 61 62 6c 65 2d 63 6f 6e 73 74 72  UE [table-constr
ace0: 61 69 6e 74 5d 20 63 6c 61 75 73 65 20 6d 75 73  aint] clause mus
acf0: 74 20 63 6f 6e 74 61 69 6e 0a 20 20 6f 6e 6c 79  t contain.  only
ad00: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 26 6d   column names &m
ad10: 64 61 73 68 3b 20 74 68 65 20 75 73 65 20 6f 66  dash; the use of
ad20: 20 0a 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20   .  expressions 
ad30: 69 6e 20 61 6e 20 5b 69 6e 64 65 78 65 64 2d 63  in an [indexed-c
ad40: 6f 6c 75 6d 6e 5d 20 6f 66 20 61 20 55 4e 49 51  olumn] of a UNIQ
ad50: 55 45 20 5b 74 61 62 6c 65 2d 63 6f 6e 73 74 72  UE [table-constr
ad60: 61 69 6e 74 5d 0a 20 20 69 73 20 6e 6f 74 20 73  aint].  is not s
ad70: 75 70 70 6f 72 74 65 64 2e 0a 20 20 0a 0a 3c 70  upported..  ..<p
ad80: 3e 5e 49 6e 20 6d 6f 73 74 20 63 61 73 65 73 2c  >^In most cases,
ad90: 20 55 4e 49 51 55 45 20 61 6e 64 20 50 52 49 4d   UNIQUE and PRIM
ada0: 41 52 59 20 4b 45 59 0a 20 20 63 6f 6e 73 74 72  ARY KEY.  constr
adb0: 61 69 6e 74 73 20 61 72 65 20 69 6d 70 6c 65 6d  aints are implem
adc0: 65 6e 74 65 64 20 62 79 20 63 72 65 61 74 69 6e  ented by creatin
add0: 67 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  g a unique index
ade0: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
adf0: 2e 0a 20 20 28 54 68 65 20 65 78 63 65 70 74 69  ..  (The excepti
ae00: 6f 6e 73 20 61 72 65 20 5b 49 4e 54 45 47 45 52  ons are [INTEGER
ae10: 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 61 6e   PRIMARY KEY] an
ae20: 64 20 50 52 49 4d 41 52 59 20 4b 45 59 73 20 6f  d PRIMARY KEYs o
ae30: 6e 20 0a 20 20 5b 57 49 54 48 4f 55 54 20 52 4f  n .  [WITHOUT RO
ae40: 57 49 44 5d 20 74 61 62 6c 65 73 2e 29 0a 20 20  WID] tables.).  
ae50: 48 65 6e 63 65 2c 20 74 68 65 20 66 6f 6c 6c 6f  Hence, the follo
ae60: 77 69 6e 67 20 73 63 68 65 6d 61 73 20 61 72 65  wing schemas are
ae70: 20 6c 6f 67 69 63 61 6c 6c 79 20 65 71 75 69 76   logically equiv
ae80: 61 6c 65 6e 74 3a 0a 0a 20 20 3c 6f 6c 3e 0a 20  alent:..  <ol>. 
ae90: 20 3c 6c 69 3e 3c 70 3e 43 52 45 41 54 45 20 54   <li><p>CREATE T
aea0: 41 42 4c 45 20 74 31 28 61 2c 20 62 20 55 4e 49  ABLE t1(a, b UNI
aeb0: 51 55 45 29 3b 0a 20 20 3c 6c 69 3e 3c 70 3e 43  QUE);.  <li><p>C
aec0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
aed0: 2c 20 62 20 50 52 49 4d 41 52 59 20 4b 45 59 29  , b PRIMARY KEY)
aee0: 3b 0a 20 20 3c 6c 69 3e 3c 70 3e 43 52 45 41 54  ;.  <li><p>CREAT
aef0: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 29  E TABLE t1(a, b)
af00: 3b 3c 62 72 3e 0a 20 20 20 20 20 20 20 20 20 43  ;<br>.         C
af10: 52 45 41 54 45 20 55 4e 49 51 55 45 20 49 4e 44  REATE UNIQUE IND
af20: 45 58 20 74 31 62 20 4f 4e 20 74 31 28 62 29 3b  EX t1b ON t1(b);
af30: 0a 20 20 3c 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e 68  .  </ol>..<tcl>h
af40: 64 5f 66 72 61 67 6d 65 6e 74 20 7b 63 6b 63 6f  d_fragment {ckco
af50: 6e 73 74 7d 20 7b 43 48 45 43 4b 7d 20 7b 43 48  nst} {CHECK} {CH
af60: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 7d 20  ECK constraint} 
af70: 7b 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e  {CHECK constrain
af80: 74 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 28 41  ts}</tcl>.<p>^(A
af90: 20 3c 62 3e 43 48 45 43 4b 3c 2f 62 3e 20 63 6f   <b>CHECK</b> co
afa0: 6e 73 74 72 61 69 6e 74 20 6d 61 79 20 62 65 20  nstraint may be 
afb0: 61 74 74 61 63 68 65 64 20 74 6f 20 61 20 63 6f  attached to a co
afc0: 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  lumn definition 
afd0: 6f 72 0a 20 20 73 70 65 63 69 66 69 65 64 20 61  or.  specified a
afe0: 73 20 61 20 74 61 62 6c 65 20 63 6f 6e 73 74 72  s a table constr
aff0: 61 69 6e 74 2e 20 49 6e 20 70 72 61 63 74 69 63  aint. In practic
b000: 65 20 69 74 20 6d 61 6b 65 73 20 6e 6f 20 64 69  e it makes no di
b010: 66 66 65 72 65 6e 63 65 2e 29 5e 20 5e 28 45 61  fference.)^ ^(Ea
b020: 63 68 0a 20 20 74 69 6d 65 20 61 20 6e 65 77 20  ch.  time a new 
b030: 72 6f 77 20 69 73 20 69 6e 73 65 72 74 65 64 20  row is inserted 
b040: 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f  into the table o
b050: 72 20 61 6e 20 65 78 69 73 74 69 6e 67 20 72 6f  r an existing ro
b060: 77 20 69 73 20 75 70 64 61 74 65 64 2c 0a 20 20  w is updated,.  
b070: 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61  the expression a
b080: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 65  ssociated with e
b090: 61 63 68 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  ach CHECK constr
b0a0: 61 69 6e 74 20 69 73 20 65 76 61 6c 75 61 74 65  aint is evaluate
b0b0: 64 20 61 6e 64 0a 20 20 63 61 73 74 20 74 6f 20  d and.  cast to 
b0c0: 61 20 4e 55 4d 45 52 49 43 20 76 61 6c 75 65 20  a NUMERIC value 
b0d0: 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20  in the same way 
b0e0: 61 73 20 61 20 5b 43 41 53 54 20 65 78 70 72 65  as a [CAST expre
b0f0: 73 73 69 6f 6e 5d 2e 20 49 66 20 74 68 65 20 0a  ssion]. If the .
b100: 20 20 72 65 73 75 6c 74 20 69 73 20 7a 65 72 6f    result is zero
b110: 20 28 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20   (integer value 
b120: 30 20 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20  0 or real value 
b130: 30 2e 30 29 2c 20 74 68 65 6e 20 61 20 63 6f 6e  0.0), then a con
b140: 73 74 72 61 69 6e 74 0a 20 20 76 69 6f 6c 61 74  straint.  violat
b150: 69 6f 6e 20 68 61 73 20 6f 63 63 75 72 72 65 64  ion has occurred
b160: 2e 29 5e 20 5e 49 66 20 74 68 65 20 43 48 45 43  .)^ ^If the CHEC
b170: 4b 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  K expression eva
b180: 6c 75 61 74 65 73 20 74 6f 20 4e 55 4c 4c 2c 20  luates to NULL, 
b190: 6f 72 0a 20 20 61 6e 79 20 6f 74 68 65 72 20 6e  or.  any other n
b1a0: 6f 6e 2d 7a 65 72 6f 20 76 61 6c 75 65 2c 20 69  on-zero value, i
b1b0: 74 20 69 73 20 6e 6f 74 20 61 20 63 6f 6e 73 74  t is not a const
b1c0: 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 2e  raint violation.
b1d0: 0a 20 20 5e 54 68 65 20 65 78 70 72 65 73 73 69  .  ^The expressi
b1e0: 6f 6e 20 6f 66 20 61 20 43 48 45 43 4b 20 63 6f  on of a CHECK co
b1f0: 6e 73 74 72 61 69 6e 74 20 6d 61 79 20 6e 6f 74  nstraint may not
b200: 20 63 6f 6e 74 61 69 6e 20 61 20 73 75 62 71 75   contain a subqu
b210: 65 72 79 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ery...<tcl>hd_fr
b220: 61 67 6d 65 6e 74 20 7b 6e 6f 74 6e 75 6c 6c 63  agment {notnullc
b230: 6f 6e 73 74 7d 20 7b 4e 4f 54 20 4e 55 4c 4c 7d  onst} {NOT NULL}
b240: 20 7b 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74   {NOT NULL const
b250: 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  raint}</tcl>.<p>
b260: 5e 41 20 3c 62 3e 4e 4f 54 20 4e 55 4c 4c 3c 2f  ^A <b>NOT NULL</
b270: 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61  b> constraint ma
b280: 79 20 6f 6e 6c 79 20 62 65 20 61 74 74 61 63 68  y only be attach
b290: 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64  ed to a column d
b2a0: 65 66 69 6e 69 74 69 6f 6e 2c 0a 20 20 6e 6f 74  efinition,.  not
b2b0: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 61 20   specified as a 
b2c0: 74 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74  table constraint
b2d0: 2e 20 20 4e 6f 74 20 73 75 72 70 72 69 73 69 6e  .  Not surprisin
b2e0: 67 6c 79 2c 20 5e 28 61 20 4e 4f 54 20 4e 55 4c  gly, ^(a NOT NUL
b2f0: 4c 0a 20 20 63 6f 6e 73 74 72 61 69 6e 74 20 64  L.  constraint d
b300: 69 63 74 61 74 65 73 20 74 68 61 74 20 74 68 65  ictates that the
b310: 20 61 73 73 6f 63 69 61 74 65 64 20 63 6f 6c 75   associated colu
b320: 6d 6e 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61  mn may not conta
b330: 69 6e 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2e  in a NULL value.
b340: 0a 20 20 41 74 74 65 6d 70 74 69 6e 67 20 74 6f  .  Attempting to
b350: 20 73 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20   set the column 
b360: 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 77 68  value to NULL wh
b370: 65 6e 20 69 6e 73 65 72 74 69 6e 67 20 61 20 6e  en inserting a n
b380: 65 77 20 72 6f 77 20 6f 72 0a 20 20 75 70 64 61  ew row or.  upda
b390: 74 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67  ting an existing
b3a0: 20 6f 6e 65 20 63 61 75 73 65 73 20 61 20 63 6f   one causes a co
b3b0: 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
b3c0: 6f 6e 2e 29 5e 0a 0a 3c 70 3e 45 78 61 63 74 6c  on.)^..<p>Exactl
b3d0: 79 20 68 6f 77 20 61 20 63 6f 6e 73 74 72 61 69  y how a constrai
b3e0: 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 69 73 20  nt violation is 
b3f0: 64 65 61 6c 74 20 77 69 74 68 20 69 73 20 64 65  dealt with is de
b400: 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 0a  termined by the.
b410: 20 20 5b 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75    [conflict clau
b420: 73 65 7c 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f  se|constraint co
b430: 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
b440: 6e 20 61 6c 67 6f 72 69 74 68 6d 5d 2e 20 45 61  n algorithm]. Ea
b450: 63 68 20 0a 20 20 50 52 49 4d 41 52 59 20 4b 45  ch .  PRIMARY KE
b460: 59 2c 20 55 4e 49 51 55 45 2c 20 4e 4f 54 20 4e  Y, UNIQUE, NOT N
b470: 55 4c 4c 20 61 6e 64 20 43 48 45 43 4b 20 63 6f  ULL and CHECK co
b480: 6e 73 74 72 61 69 6e 74 20 68 61 73 20 61 20 64  nstraint has a d
b490: 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 0a  efault conflict.
b4a0: 20 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67    resolution alg
b4b0: 6f 72 69 74 68 6d 2e 20 5e 50 52 49 4d 41 52 59  orithm. ^PRIMARY
b4c0: 20 4b 45 59 2c 20 55 4e 49 51 55 45 20 61 6e 64   KEY, UNIQUE and
b4d0: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
b4e0: 61 69 6e 74 73 20 6d 61 79 20 62 65 0a 20 20 65  aints may be.  e
b4f0: 78 70 6c 69 63 69 74 6c 79 20 61 73 73 69 67 6e  xplicitly assign
b500: 65 64 20 61 20 64 65 66 61 75 6c 74 20 63 6f 6e  ed a default con
b510: 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
b520: 20 61 6c 67 6f 72 69 74 68 6d 20 62 79 20 69 6e   algorithm by in
b530: 63 6c 75 64 69 6e 67 0a 20 20 61 20 5b 63 6f 6e  cluding.  a [con
b540: 66 6c 69 63 74 2d 63 6c 61 75 73 65 5d 20 69 6e  flict-clause] in
b550: 20 74 68 65 69 72 20 64 65 66 69 6e 69 74 69 6f   their definitio
b560: 6e 73 2e 20 5e 4f 72 2c 20 69 66 20 61 20 63 6f  ns. ^Or, if a co
b570: 6e 73 74 72 61 69 6e 74 20 64 65 66 69 6e 69 74  nstraint definit
b580: 69 6f 6e 0a 20 20 64 6f 65 73 20 6e 6f 74 20 69  ion.  does not i
b590: 6e 63 6c 75 64 65 20 61 20 5b 63 6f 6e 66 6c 69  nclude a [confli
b5a0: 63 74 2d 63 6c 61 75 73 65 5d 20 6f 72 20 69 74  ct-clause] or it
b5b0: 20 69 73 20 61 20 43 48 45 43 4b 20 63 6f 6e 73   is a CHECK cons
b5c0: 74 72 61 69 6e 74 2c 20 74 68 65 20 64 65 66 61  traint, the defa
b5d0: 75 6c 74 0a 20 20 63 6f 6e 66 6c 69 63 74 20 72  ult.  conflict r
b5e0: 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
b5f0: 74 68 6d 20 69 73 20 41 42 4f 52 54 2e 20 5e 44  thm is ABORT. ^D
b600: 69 66 66 65 72 65 6e 74 20 63 6f 6e 73 74 72 61  ifferent constra
b610: 69 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65 0a  ints within the.
b620: 20 20 73 61 6d 65 20 74 61 62 6c 65 20 6d 61 79    same table may
b630: 20 68 61 76 65 20 64 69 66 66 65 72 65 6e 74 20   have different 
b640: 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74  default conflict
b650: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
b660: 72 69 74 68 6d 73 2e 20 53 65 65 0a 20 20 74 68  rithms. See.  th
b670: 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64  e section titled
b680: 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66   [ON CONFLICT] f
b690: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
b6a0: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a 3c 74 63 6c  formation...<tcl
b6b0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 6f 77  >hd_fragment row
b6c0: 69 64 20 7b 49 4e 54 45 47 45 52 20 50 52 49 4d  id {INTEGER PRIM
b6d0: 41 52 59 20 4b 45 59 7d 20 52 4f 57 49 44 20 72  ARY KEY} ROWID r
b6e0: 6f 77 69 64 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 52  owid</tcl>.<h3>R
b6f0: 4f 57 49 44 73 20 61 6e 64 20 74 68 65 20 49 4e  OWIDs and the IN
b700: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
b710: 59 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 45 78 63 65  Y</h3>..<p>^Exce
b720: 70 74 20 66 6f 72 20 5b 57 49 54 48 4f 55 54 20  pt for [WITHOUT 
b730: 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2c 20 61  ROWID] tables, a
b740: 6c 6c 20 72 6f 77 73 20 77 69 74 68 69 6e 20 53  ll rows within S
b750: 51 4c 69 74 65 20 74 61 62 6c 65 73 0a 68 61 76  QLite tables.hav
b760: 65 20 61 20 36 34 2d 62 69 74 20 73 69 67 6e 65  e a 64-bit signe
b770: 64 20 69 6e 74 65 67 65 72 20 6b 65 79 20 74 68  d integer key th
b780: 61 74 20 75 6e 69 71 75 65 6c 79 20 69 64 65 6e  at uniquely iden
b790: 74 69 66 69 65 73 20 74 68 65 20 72 6f 77 20 77  tifies the row w
b7a0: 69 74 68 69 6e 20 69 74 73 20 74 61 62 6c 65 2e  ithin its table.
b7b0: 0a 54 68 69 73 20 69 6e 74 65 67 65 72 20 69 73  .This integer is
b7c0: 20 75 73 75 61 6c 6c 79 0a 63 61 6c 6c 65 64 20   usually.called 
b7d0: 74 68 65 20 22 72 6f 77 69 64 22 2e 20 5e 54 68  the "rowid". ^Th
b7e0: 65 20 72 6f 77 69 64 20 76 61 6c 75 65 20 63 61  e rowid value ca
b7f0: 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 75 73  n be accessed us
b800: 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65 20 73  ing one of the s
b810: 70 65 63 69 61 6c 0a 63 61 73 65 2d 69 6e 64 65  pecial.case-inde
b820: 70 65 6e 64 65 6e 74 20 6e 61 6d 65 73 20 22 72  pendent names "r
b830: 6f 77 69 64 22 2c 20 22 6f 69 64 22 2c 20 6f 72  owid", "oid", or
b840: 20 22 5f 72 6f 77 69 64 5f 22 20 69 6e 20 70 6c   "_rowid_" in pl
b850: 61 63 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  ace of a column 
b860: 6e 61 6d 65 2e 0a 5e 49 66 20 61 20 74 61 62 6c  name..^If a tabl
b870: 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 75 73 65  e contains a use
b880: 72 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e  r defined column
b890: 20 6e 61 6d 65 64 20 22 72 6f 77 69 64 22 2c 20   named "rowid", 
b8a0: 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77 69 64  "oid" or "_rowid
b8b0: 5f 22 2c 0a 74 68 65 6e 20 74 68 61 74 20 6e 61  _",.then that na
b8c0: 6d 65 20 61 6c 77 61 79 73 20 72 65 66 65 72 73  me always refers
b8d0: 20 74 68 65 20 65 78 70 6c 69 63 69 74 6c 79 20   the explicitly 
b8e0: 64 65 63 6c 61 72 65 64 20 63 6f 6c 75 6d 6e 20  declared column 
b8f0: 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 75 73  and cannot be us
b900: 65 64 0a 74 6f 20 72 65 74 72 69 65 76 65 20 74  ed.to retrieve t
b910: 68 65 20 69 6e 74 65 67 65 72 20 72 6f 77 69 64  he integer rowid
b920: 20 76 61 6c 75 65 2e 0a 0a 3c 70 3e 54 68 65 20   value...<p>The 
b930: 72 6f 77 69 64 20 28 61 6e 64 20 22 6f 69 64 22  rowid (and "oid"
b940: 20 61 6e 64 20 22 5f 72 6f 77 69 64 5f 22 29 20   and "_rowid_") 
b950: 69 73 20 6f 6d 69 74 74 65 64 20 69 6e 20 5b 57  is omitted in [W
b960: 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61  ITHOUT ROWID] ta
b970: 62 6c 65 73 2e 0a 57 49 54 48 4f 55 54 20 52 4f  bles..WITHOUT RO
b980: 57 49 44 20 74 61 62 6c 65 73 20 61 72 65 20 6f  WID tables are o
b990: 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 69 6e  nly available in
b9a0: 20 53 51 4c 69 74 65 20 5b 76 65 72 73 69 6f 6e   SQLite [version
b9b0: 20 33 2e 38 2e 32 5d 0a 28 5b 64 61 74 65 6f 66   3.8.2].([dateof
b9c0: 3a 33 2e 38 2e 32 5d 29 20 61 6e 64 20 6c 61 74  :3.8.2]) and lat
b9d0: 65 72 2e 0a 41 20 74 61 62 6c 65 20 74 68 61 74  er..A table that
b9e0: 20 6c 61 63 6b 73 20 74 68 65 20 57 49 54 48 4f   lacks the WITHO
b9f0: 55 54 20 52 4f 57 49 44 20 63 6c 61 75 73 65 20  UT ROWID clause 
ba00: 69 73 20 63 61 6c 6c 65 64 20 61 20 22 72 6f 77  is called a "row
ba10: 69 64 20 74 61 62 6c 65 22 2e 0a 0a 3c 70 3e 54  id table"...<p>T
ba20: 68 65 20 64 61 74 61 20 66 6f 72 20 72 6f 77 69  he data for rowi
ba30: 64 20 74 61 62 6c 65 73 20 69 73 20 73 74 6f 72  d tables is stor
ba40: 65 64 20 61 73 20 61 20 42 2d 54 72 65 65 20 73  ed as a B-Tree s
ba50: 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
ba60: 69 6e 67 0a 6f 6e 65 20 65 6e 74 72 79 20 66 6f  ing.one entry fo
ba70: 72 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77  r each table row
ba80: 2c 20 75 73 69 6e 67 20 74 68 65 20 72 6f 77 69  , using the rowi
ba90: 64 20 76 61 6c 75 65 20 61 73 20 74 68 65 20 6b  d value as the k
baa0: 65 79 2e 20 54 68 69 73 20 6d 65 61 6e 73 20 74  ey. This means t
bab0: 68 61 74 0a 72 65 74 72 69 65 76 69 6e 67 20 6f  hat.retrieving o
bac0: 72 20 73 6f 72 74 69 6e 67 20 72 65 63 6f 72 64  r sorting record
bad0: 73 20 62 79 20 72 6f 77 69 64 20 69 73 20 66 61  s by rowid is fa
bae0: 73 74 2e 20 53 65 61 72 63 68 69 6e 67 20 66 6f  st. Searching fo
baf0: 72 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20  r a record with 
bb00: 61 0a 73 70 65 63 69 66 69 63 20 72 6f 77 69 64  a.specific rowid
bb10: 2c 20 6f 72 20 66 6f 72 20 61 6c 6c 20 72 65 63  , or for all rec
bb20: 6f 72 64 73 20 77 69 74 68 20 72 6f 77 69 64 73  ords with rowids
bb30: 20 77 69 74 68 69 6e 20 61 20 73 70 65 63 69 66   within a specif
bb40: 69 65 64 20 72 61 6e 67 65 20 69 73 0a 61 72 6f  ied range is.aro
bb50: 75 6e 64 20 74 77 69 63 65 20 61 73 20 66 61 73  und twice as fas
bb60: 74 20 61 73 20 61 20 73 69 6d 69 6c 61 72 20 73  t as a similar s
bb70: 65 61 72 63 68 20 6d 61 64 65 20 62 79 20 73 70  earch made by sp
bb80: 65 63 69 66 79 69 6e 67 20 61 6e 79 20 6f 74 68  ecifying any oth
bb90: 65 72 20 50 52 49 4d 41 52 59 0a 4b 45 59 20 6f  er PRIMARY.KEY o
bba0: 72 20 69 6e 64 65 78 65 64 20 76 61 6c 75 65 2e  r indexed value.
bbb0: 0a 0a 3c 70 3e 20 5e 57 69 74 68 20 6f 6e 65 20  ..<p> ^With one 
bbc0: 65 78 63 65 70 74 69 6f 6e 20 6e 6f 74 65 64 20  exception noted 
bbd0: 62 65 6c 6f 77 2c 20 69 66 20 61 20 72 6f 77 69  below, if a rowi
bbe0: 64 20 74 61 62 6c 65 20 68 61 73 20 61 20 70 72  d table has a pr
bbf0: 69 6d 61 72 79 20 6b 65 79 20 74 68 61 74 20 63  imary key that c
bc00: 6f 6e 73 69 73 74 73 0a 6f 66 20 61 20 73 69 6e  onsists.of a sin
bc10: 67 6c 65 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 74  gle column and t
bc20: 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70 65  he declared type
bc30: 20 6f 66 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20   of that column 
bc40: 69 73 20 22 49 4e 54 45 47 45 52 22 20 69 6e 20  is "INTEGER" in 
bc50: 61 6e 79 20 6d 69 78 74 75 72 65 20 6f 66 0a 75  any mixture of.u
bc60: 70 70 65 72 20 61 6e 64 20 6c 6f 77 65 72 20 63  pper and lower c
bc70: 61 73 65 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  ase, then the co
bc80: 6c 75 6d 6e 20 62 65 63 6f 6d 65 73 20 61 6e 20  lumn becomes an 
bc90: 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72 6f  alias for the ro
bca0: 77 69 64 2e 20 53 75 63 68 20 61 0a 63 6f 6c 75  wid. Such a.colu
bcb0: 6d 6e 20 69 73 20 75 73 75 61 6c 6c 79 20 72 65  mn is usually re
bcc0: 66 65 72 72 65 64 20 74 6f 20 61 73 20 61 6e 20  ferred to as an 
bcd0: 22 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79  "integer primary
bce0: 20 6b 65 79 22 2e 20 41 20 50 52 49 4d 41 52 59   key". A PRIMARY
bcf0: 20 4b 45 59 20 63 6f 6c 75 6d 6e 0a 6f 6e 6c 79   KEY column.only
bd00: 20 62 65 63 6f 6d 65 73 20 61 6e 20 69 6e 74 65   becomes an inte
bd10: 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20  ger primary key 
bd20: 69 66 20 74 68 65 20 64 65 63 6c 61 72 65 64 20  if the declared 
bd30: 74 79 70 65 20 6e 61 6d 65 20 69 73 20 65 78 61  type name is exa
bd40: 63 74 6c 79 0a 22 49 4e 54 45 47 45 52 22 2e 20  ctly."INTEGER". 
bd50: 20 5e 4f 74 68 65 72 20 69 6e 74 65 67 65 72 20   ^Other integer 
bd60: 74 79 70 65 20 6e 61 6d 65 73 20 6c 69 6b 65 20  type names like 
bd70: 22 49 4e 54 22 20 6f 72 20 22 42 49 47 49 4e 54  "INT" or "BIGINT
bd80: 22 20 6f 72 20 22 53 48 4f 52 54 20 49 4e 54 45  " or "SHORT INTE
bd90: 47 45 52 22 0a 6f 72 20 22 55 4e 53 49 47 4e 45  GER".or "UNSIGNE
bda0: 44 20 49 4e 54 45 47 45 52 22 20 63 61 75 73 65  D INTEGER" cause
bdb0: 73 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  s the primary ke
bdc0: 79 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 68 61  y column to beha
bdd0: 76 65 20 61 73 20 61 6e 20 6f 72 64 69 6e 61 72  ve as an ordinar
bde0: 79 0a 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 77  y.table column w
bdf0: 69 74 68 20 69 6e 74 65 67 65 72 20 5b 61 66 66  ith integer [aff
be00: 69 6e 69 74 79 5d 20 61 6e 64 20 61 20 75 6e 69  inity] and a uni
be10: 71 75 65 20 69 6e 64 65 78 2c 20 6e 6f 74 20 61  que index, not a
be20: 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 0a 74  s an alias for.t
be30: 68 65 20 72 6f 77 69 64 2e 0a 0a 3c 70 3e 20 54  he rowid...<p> T
be40: 68 65 20 65 78 63 65 70 74 69 6f 6e 20 6d 65 6e  he exception men
be50: 74 69 6f 6e 65 64 20 61 62 6f 76 65 20 69 73 20  tioned above is 
be60: 74 68 61 74 20 5e 69 66 20 74 68 65 20 64 65 63  that ^if the dec
be70: 6c 61 72 61 74 69 6f 6e 20 6f 66 20 61 20 63 6f  laration of a co
be80: 6c 75 6d 6e 20 77 69 74 68 0a 64 65 63 6c 61 72  lumn with.declar
be90: 65 64 20 74 79 70 65 20 22 49 4e 54 45 47 45 52  ed type "INTEGER
bea0: 22 20 69 6e 63 6c 75 64 65 73 20 61 6e 20 22 50  " includes an "P
beb0: 52 49 4d 41 52 59 20 4b 45 59 20 44 45 53 43 22  RIMARY KEY DESC"
bec0: 20 63 6c 61 75 73 65 2c 20 69 74 20 64 6f 65 73   clause, it does
bed0: 20 6e 6f 74 0a 62 65 63 6f 6d 65 20 61 6e 20 61   not.become an a
bee0: 6c 69 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77  lias for the row
bef0: 69 64 20 61 6e 64 20 69 73 20 6e 6f 74 20 63 6c  id and is not cl
bf00: 61 73 73 69 66 69 65 64 20 61 73 20 61 6e 20 69  assified as an i
bf10: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
bf20: 65 79 2e 0a 54 68 69 73 20 71 75 69 72 6b 20 69  ey..This quirk i
bf30: 73 20 6e 6f 74 20 62 79 20 64 65 73 69 67 6e 2e  s not by design.
bf40: 20 49 74 20 69 73 20 64 75 65 20 74 6f 20 61 20   It is due to a 
bf50: 62 75 67 20 69 6e 20 65 61 72 6c 79 20 76 65 72  bug in early ver
bf60: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2e  sions of SQLite.
bf70: 0a 42 75 74 20 66 69 78 69 6e 67 20 74 68 65 20  .But fixing the 
bf80: 62 75 67 20 63 6f 75 6c 64 20 72 65 73 75 6c 74  bug could result
bf90: 20 69 6e 20 62 61 63 6b 77 61 72 64 73 20 69 6e   in backwards in
bfa0: 63 6f 6d 70 61 74 69 62 69 6c 69 74 69 65 73 2e  compatibilities.
bfb0: 0a 48 65 6e 63 65 2c 20 74 68 65 20 6f 72 69 67  .Hence, the orig
bfc0: 69 6e 61 6c 20 62 65 68 61 76 69 6f 72 20 68 61  inal behavior ha
bfd0: 73 20 62 65 65 6e 20 72 65 74 61 69 6e 65 64 20  s been retained 
bfe0: 28 61 6e 64 20 64 6f 63 75 6d 65 6e 74 65 64 29  (and documented)
bff0: 20 62 65 63 61 75 73 65 20 6f 64 64 0a 62 65 68   because odd.beh
c000: 61 76 69 6f 72 20 69 6e 20 61 20 63 6f 72 6e 65  avior in a corne
c010: 72 20 63 61 73 65 20 69 73 20 66 61 72 20 62 65  r case is far be
c020: 74 74 65 72 20 74 68 61 6e 20 61 20 63 6f 6d 70  tter than a comp
c030: 61 74 69 62 69 6c 69 74 79 20 62 72 65 61 6b 2e  atibility break.
c040: 20 20 54 68 69 73 20 6d 65 61 6e 73 0a 74 68 61    This means.tha
c050: 74 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  t ^(the followin
c060: 67 20 74 68 72 65 65 20 74 61 62 6c 65 20 64 65  g three table de
c070: 63 6c 61 72 61 74 69 6f 6e 73 20 61 6c 6c 20 63  clarations all c
c080: 61 75 73 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ause the column 
c090: 22 78 22 20 74 6f 20 62 65 20 61 6e 0a 61 6c 69  "x" to be an.ali
c0a0: 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64  as for the rowid
c0b0: 20 28 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69   (an integer pri
c0c0: 6d 61 72 79 20 6b 65 79 29 3a 0a 0a 3c 75 6c 3e  mary key):..<ul>
c0d0: 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20  .<li><tt>CREATE 
c0e0: 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45  TABLE t(x INTEGE
c0f0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 53  R PRIMARY KEY AS
c100: 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c  C, y, z);</tt>.<
c110: 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54 41  li><tt>CREATE TA
c120: 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52 2c  BLE t(x INTEGER,
c130: 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59 20 4b   y, z, PRIMARY K
c140: 45 59 28 78 20 41 53 43 29 29 3b 3c 2f 74 74 3e  EY(x ASC));</tt>
c150: 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20  .<li><tt>CREATE 
c160: 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45  TABLE t(x INTEGE
c170: 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59  R, y, z, PRIMARY
c180: 20 4b 45 59 28 78 20 44 45 53 43 29 29 3b 3c 2f   KEY(x DESC));</
c190: 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e  tt>.</ul>)^..<p>
c1a0: 42 75 74 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77  But ^(the follow
c1b0: 69 6e 67 20 64 65 63 6c 61 72 61 74 69 6f 6e 20  ing declaration 
c1c0: 64 6f 65 73 20 6e 6f 74 20 72 65 73 75 6c 74 20  does not result 
c1d0: 69 6e 20 22 78 22 20 62 65 69 6e 67 20 61 6e 20  in "x" being an 
c1e0: 61 6c 69 61 73 20 66 6f 72 0a 74 68 65 20 72 6f  alias for.the ro
c1f0: 77 69 64 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74  wid:.<ul>.<li><t
c200: 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  t>CREATE TABLE t
c210: 28 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (x INTEGER PRIMA
c220: 52 59 20 4b 45 59 20 44 45 53 43 2c 20 79 2c 20  RY KEY DESC, y, 
c230: 7a 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e  z);</tt>.</ul>)^
c240: 0a 0a 3c 70 3e 5e 52 6f 77 69 64 20 76 61 6c 75  ..<p>^Rowid valu
c250: 65 73 20 6d 61 79 20 62 65 20 6d 6f 64 69 66 69  es may be modifi
c260: 65 64 20 75 73 69 6e 67 20 61 6e 20 55 50 44 41  ed using an UPDA
c270: 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20  TE statement in 
c280: 74 68 65 20 73 61 6d 65 0a 77 61 79 20 61 73 20  the same.way as 
c290: 61 6e 79 20 6f 74 68 65 72 20 63 6f 6c 75 6d 6e  any other column
c2a0: 20 76 61 6c 75 65 20 63 61 6e 2c 20 65 69 74 68   value can, eith
c2b0: 65 72 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66 20  er using one of 
c2c0: 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 61 6c 69  the built-in ali
c2d0: 61 73 65 73 0a 28 22 72 6f 77 69 64 22 2c 20 22  ases.("rowid", "
c2e0: 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77 69 64 5f  oid" or "_rowid_
c2f0: 22 29 20 6f 72 20 62 79 20 75 73 69 6e 67 20 61  ") or by using a
c300: 6e 20 61 6c 69 61 73 20 63 72 65 61 74 65 64 20  n alias created 
c310: 62 79 20 61 6e 20 69 6e 74 65 67 65 72 0a 70 72  by an integer.pr
c320: 69 6d 61 72 79 20 6b 65 79 2e 20 5e 53 69 6d 69  imary key. ^Simi
c330: 6c 61 72 6c 79 2c 20 61 6e 20 49 4e 53 45 52 54  larly, an INSERT
c340: 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 70   statement may p
c350: 72 6f 76 69 64 65 20 61 20 76 61 6c 75 65 20 74  rovide a value t
c360: 6f 20 75 73 65 20 61 73 20 74 68 65 0a 72 6f 77  o use as the.row
c370: 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  id for each row 
c380: 69 6e 73 65 72 74 65 64 2e 20 5e 28 55 6e 6c 69  inserted. ^(Unli
c390: 6b 65 20 6e 6f 72 6d 61 6c 20 53 51 4c 69 74 65  ke normal SQLite
c3a0: 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 20 69 6e 74   columns, an int
c3b0: 65 67 65 72 20 70 72 69 6d 61 72 79 0a 6b 65 79  eger primary.key
c3c0: 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e   or rowid column
c3d0: 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 69 6e   must contain in
c3e0: 74 65 67 65 72 20 76 61 6c 75 65 73 2e 20 49 6e  teger values. In
c3f0: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
c400: 79 20 6f 72 20 72 6f 77 69 64 0a 63 6f 6c 75 6d  y or rowid.colum
c410: 6e 73 20 61 72 65 20 6e 6f 74 20 61 62 6c 65 20  ns are not able 
c420: 74 6f 20 68 6f 6c 64 20 66 6c 6f 61 74 69 6e 67  to hold floating
c430: 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 2c 20 73   point values, s
c440: 74 72 69 6e 67 73 2c 20 42 4c 4f 42 73 2c 20 6f  trings, BLOBs, o
c450: 72 20 4e 55 4c 4c 73 2e 29 5e 0a 0a 3c 70 3e 5e  r NULLs.)^..<p>^
c460: 49 66 20 61 6e 20 55 50 44 41 54 45 20 73 74 61  If an UPDATE sta
c470: 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20  tement attempts 
c480: 74 6f 20 73 65 74 20 61 6e 20 69 6e 74 65 67 65  to set an intege
c490: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 72  r primary key or
c4a0: 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 0a 74 6f   rowid column.to
c4b0: 20 61 20 4e 55 4c 4c 20 6f 72 20 62 6c 6f 62 20   a NULL or blob 
c4c0: 76 61 6c 75 65 2c 20 6f 72 20 74 6f 20 61 20 73  value, or to a s
c4d0: 74 72 69 6e 67 20 6f 72 20 72 65 61 6c 20 76 61  tring or real va
c4e0: 6c 75 65 20 74 68 61 74 20 63 61 6e 6e 6f 74 20  lue that cannot 
c4f0: 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 0a 63 6f  be losslessly.co
c500: 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e  nverted to an in
c510: 74 65 67 65 72 2c 20 61 20 22 64 61 74 61 74 79  teger, a "dataty
c520: 70 65 20 6d 69 73 6d 61 74 63 68 22 20 65 72 72  pe mismatch" err
c530: 6f 72 20 6f 63 63 75 72 73 20 61 6e 64 20 74 68  or occurs and th
c540: 65 20 73 74 61 74 65 6d 65 6e 74 0a 69 73 20 61  e statement.is a
c550: 62 6f 72 74 65 64 2e 20 5e 49 66 20 61 6e 20 49  borted. ^If an I
c560: 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
c570: 61 74 74 65 6d 70 74 73 20 74 6f 20 69 6e 73 65  attempts to inse
c580: 72 74 20 61 20 62 6c 6f 62 20 76 61 6c 75 65 2c  rt a blob value,
c590: 20 6f 72 20 61 20 73 74 72 69 6e 67 0a 6f 72 20   or a string.or 
c5a0: 72 65 61 6c 20 76 61 6c 75 65 20 74 68 61 74 20  real value that 
c5b0: 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65  cannot be lossle
c5c0: 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
c5d0: 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 69 6e 74  o an integer int
c5e0: 6f 20 61 6e 0a 69 6e 74 65 67 65 72 20 70 72 69  o an.integer pri
c5f0: 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77 69  mary key or rowi
c600: 64 20 63 6f 6c 75 6d 6e 2c 20 61 20 22 64 61 74  d column, a "dat
c610: 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22 20  atype mismatch" 
c620: 65 72 72 6f 72 20 6f 63 63 75 72 73 20 61 6e 64  error occurs and
c630: 20 74 68 65 0a 73 74 61 74 65 6d 65 6e 74 20 69   the.statement i
c640: 73 20 61 62 6f 72 74 65 64 2e 0a 0a 3c 70 3e 5e  s aborted...<p>^
c650: 49 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  If an INSERT sta
c660: 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20  tement attempts 
c670: 74 6f 20 69 6e 73 65 72 74 20 61 20 4e 55 4c 4c  to insert a NULL
c680: 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 72 6f   value into a ro
c690: 77 69 64 20 6f 72 0a 69 6e 74 65 67 65 72 20 70  wid or.integer p
c6a0: 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d  rimary key colum
c6b0: 6e 2c 20 74 68 65 20 73 79 73 74 65 6d 20 63 68  n, the system ch
c6c0: 6f 6f 73 65 73 20 61 6e 20 69 6e 74 65 67 65 72  ooses an integer
c6d0: 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20 61 73   value to use as
c6e0: 20 74 68 65 0a 72 6f 77 69 64 20 61 75 74 6f 6d   the.rowid autom
c6f0: 61 74 69 63 61 6c 6c 79 2e 20 41 20 64 65 74 61  atically. A deta
c700: 69 6c 65 64 20 64 65 73 63 72 69 70 74 69 6f 6e  iled description
c710: 20 6f 66 20 68 6f 77 20 74 68 69 73 20 69 73 20   of how this is 
c720: 64 6f 6e 65 20 69 73 20 70 72 6f 76 69 64 65 64  done is provided
c730: 0a 3c 61 20 68 72 65 66 3d 22 61 75 74 6f 69 6e  .<a href="autoin
c740: 63 2e 68 74 6d 6c 22 3e 73 65 70 61 72 61 74 65  c.html">separate
c750: 6c 79 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ly</a>.</p>..<p>
c760: 5e 28 54 68 65 20 5b 70 61 72 65 6e 74 20 6b 65  ^(The [parent ke
c770: 79 5d 20 6f 66 20 61 20 5b 66 6f 72 65 69 67 6e  y] of a [foreign
c780: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 5d   key constraint]
c790: 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20   is not allowed 
c7a0: 74 6f 0a 75 73 65 20 74 68 65 20 72 6f 77 69 64  to.use the rowid
c7b0: 2e 20 20 54 68 65 20 70 61 72 65 6e 74 20 6b 65  .  The parent ke
c7c0: 79 20 6d 75 73 74 20 75 73 65 64 20 6e 61 6d 65  y must used name
c7d0: 64 20 63 6f 6c 75 6d 6e 73 20 6f 6e 6c 79 2e 29  d columns only.)
c7e0: 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  ^</p>..<tcl>.###
c7f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c830: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
c840: 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 52 49 47  ion {CREATE TRIG
c850: 47 45 52 7d 20 63 72 65 61 74 65 74 72 69 67 67  GER} createtrigg
c860: 65 72 20 7b 7b 43 52 45 41 54 45 20 54 52 49 47  er {{CREATE TRIG
c870: 47 45 52 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65  GER}}..Recursive
c880: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72  BubbleDiagram cr
c890: 65 61 74 65 2d 74 72 69 67 67 65 72 2d 73 74 6d  eate-trigger-stm
c8a0: 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  t.</tcl>..<p>^Th
c8b0: 65 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  e CREATE TRIGGER
c8c0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73   statement is us
c8d0: 65 64 20 74 6f 20 61 64 64 20 74 72 69 67 67 65  ed to add trigge
c8e0: 72 73 20 74 6f 20 74 68 65 20 0a 64 61 74 61 62  rs to the .datab
c8f0: 61 73 65 20 73 63 68 65 6d 61 2e 20 5e 54 72 69  ase schema. ^Tri
c900: 67 67 65 72 73 20 61 72 65 20 64 61 74 61 62 61  ggers are databa
c910: 73 65 20 6f 70 65 72 61 74 69 6f 6e 73 20 0a 74  se operations .t
c920: 68 61 74 20 61 72 65 20 61 75 74 6f 6d 61 74 69  hat are automati
c930: 63 61 6c 6c 79 20 70 65 72 66 6f 72 6d 65 64 20  cally performed 
c940: 77 68 65 6e 20 61 20 73 70 65 63 69 66 69 65 64  when a specified
c950: 20 64 61 74 61 62 61 73 65 20 65 76 65 6e 74 0a   database event.
c960: 6f 63 63 75 72 73 2e 20 20 3c 2f 70 3e 0a 0a 3c  occurs.  </p>..<
c970: 70 3e 5e 41 20 74 72 69 67 67 65 72 20 6d 61 79  p>^A trigger may
c980: 20 62 65 20 73 70 65 63 69 66 69 65 64 20 74 6f   be specified to
c990: 20 66 69 72 65 20 77 68 65 6e 65 76 65 72 20 61   fire whenever a
c9a0: 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45   [DELETE], [INSE
c9b0: 52 54 5d 2c 0a 6f 72 20 5b 55 50 44 41 54 45 5d  RT],.or [UPDATE]
c9c0: 20 6f 66 20 61 0a 70 61 72 74 69 63 75 6c 61 72   of a.particular
c9d0: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
c9e0: 6f 63 63 75 72 73 2c 20 6f 72 20 77 68 65 6e 65  occurs, or whene
c9f0: 76 65 72 20 61 6e 20 5b 55 50 44 41 54 45 5d 20  ver an [UPDATE] 
ca00: 6f 63 63 75 72 73 20 6f 6e 0a 6f 6e 20 6f 6e 65  occurs on.on one
ca10: 20 6f 72 20 6d 6f 72 65 20 73 70 65 63 69 66 69   or more specifi
ca20: 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 20  ed columns of a 
ca30: 74 61 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  table.</p>..<p>^
ca40: 41 74 20 74 68 69 73 20 74 69 6d 65 20 53 51 4c  At this time SQL
ca50: 69 74 65 20 73 75 70 70 6f 72 74 73 20 6f 6e 6c  ite supports onl
ca60: 79 20 46 4f 52 20 45 41 43 48 20 52 4f 57 20 74  y FOR EACH ROW t
ca70: 72 69 67 67 65 72 73 2c 20 6e 6f 74 20 46 4f 52  riggers, not FOR
ca80: 20 45 41 43 48 0a 53 54 41 54 45 4d 45 4e 54 20   EACH.STATEMENT 
ca90: 74 72 69 67 67 65 72 73 2e 20 5e 48 65 6e 63 65  triggers. ^Hence
caa0: 20 65 78 70 6c 69 63 69 74 6c 79 20 73 70 65 63   explicitly spec
cab0: 69 66 79 69 6e 67 20 46 4f 52 20 45 41 43 48 20  ifying FOR EACH 
cac0: 52 4f 57 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e  ROW is optional.
cad0: 0a 5e 46 4f 52 20 45 41 43 48 20 52 4f 57 20 69  .^FOR EACH ROW i
cae0: 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68 65 20  mplies that the 
caf0: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73  SQL statements s
cb00: 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 20  pecified in the 
cb10: 74 72 69 67 67 65 72 0a 6d 61 79 20 62 65 20 65  trigger.may be e
cb20: 78 65 63 75 74 65 64 20 28 64 65 70 65 6e 64 69  xecuted (dependi
cb30: 6e 67 20 6f 6e 20 74 68 65 20 57 48 45 4e 20 63  ng on the WHEN c
cb40: 6c 61 75 73 65 29 20 66 6f 72 20 65 61 63 68 20  lause) for each 
cb50: 64 61 74 61 62 61 73 65 20 72 6f 77 20 62 65 69  database row bei
cb60: 6e 67 0a 69 6e 73 65 72 74 65 64 2c 20 75 70 64  ng.inserted, upd
cb70: 61 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64 20  ated or deleted 
cb80: 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  by the statement
cb90: 20 63 61 75 73 69 6e 67 20 74 68 65 20 74 72 69   causing the tri
cba0: 67 67 65 72 20 74 6f 20 66 69 72 65 2e 3c 2f 70  gger to fire.</p
cbb0: 3e 0a 0a 3c 70 3e 5e 28 42 6f 74 68 20 74 68 65  >..<p>^(Both the
cbc0: 20 57 48 45 4e 20 63 6c 61 75 73 65 20 61 6e 64   WHEN clause and
cbd0: 20 74 68 65 20 74 72 69 67 67 65 72 20 61 63 74   the trigger act
cbe0: 69 6f 6e 73 20 6d 61 79 20 61 63 63 65 73 73 20  ions may access 
cbf0: 65 6c 65 6d 65 6e 74 73 20 6f 66 20 0a 74 68 65  elements of .the
cc00: 20 72 6f 77 20 62 65 69 6e 67 20 69 6e 73 65 72   row being inser
cc10: 74 65 64 2c 20 64 65 6c 65 74 65 64 20 6f 72 20  ted, deleted or 
cc20: 75 70 64 61 74 65 64 20 75 73 69 6e 67 20 72 65  updated using re
cc30: 66 65 72 65 6e 63 65 73 20 6f 66 20 74 68 65 20  ferences of the 
cc40: 66 6f 72 6d 20 0a 22 4e 45 57 2e 3c 69 3e 63 6f  form ."NEW.<i>co
cc50: 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 20 61  lumn-name</i>" a
cc60: 6e 64 20 22 4f 4c 44 2e 3c 69 3e 63 6f 6c 75 6d  nd "OLD.<i>colum
cc70: 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 2c 20 77 68 65  n-name</i>", whe
cc80: 72 65 0a 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d  re.<i>column-nam
cc90: 65 3c 2f 69 3e 20 69 73 20 74 68 65 20 6e 61 6d  e</i> is the nam
cca0: 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 66 72  e of a column fr
ccb0: 6f 6d 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  om the table tha
ccc0: 74 20 74 68 65 20 74 72 69 67 67 65 72 0a 69 73  t the trigger.is
ccd0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
cce0: 2e 29 5e 20 5e 28 4f 4c 44 20 61 6e 64 20 4e 45  .)^ ^(OLD and NE
ccf0: 57 20 72 65 66 65 72 65 6e 63 65 73 20 6d 61 79  W references may
cd00: 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 69 6e   only be used in
cd10: 20 74 72 69 67 67 65 72 73 20 6f 6e 0a 65 76 65   triggers on.eve
cd20: 6e 74 73 20 66 6f 72 20 77 68 69 63 68 20 74 68  nts for which th
cd30: 65 79 20 61 72 65 20 72 65 6c 65 76 61 6e 74 2c  ey are relevant,
cd40: 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e   as follows:</p>
cd50: 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  ..<table border=
cd60: 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30  0 cellpadding=10
cd70: 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67  >.<tr>.<td valig
cd80: 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72  n="top" align="r
cd90: 69 67 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e  ight" width=120>
cda0: 3c 69 3e 49 4e 53 45 52 54 3c 2f 69 3e 3c 2f 74  <i>INSERT</i></t
cdb0: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  d>.<td valign="t
cdc0: 6f 70 22 3e 4e 45 57 20 72 65 66 65 72 65 6e 63  op">NEW referenc
cdd0: 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64  es are valid</td
cde0: 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64  >.</tr>.<tr>.<td
cdf0: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
ce00: 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74  ign="right" widt
ce10: 68 3d 31 32 30 3e 3c 69 3e 55 50 44 41 54 45 3c  h=120><i>UPDATE<
ce20: 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  /i></td>.<td val
ce30: 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57 20 61 6e  ign="top">NEW an
ce40: 64 20 4f 4c 44 20 72 65 66 65 72 65 6e 63 65 73  d OLD references
ce50: 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a   are valid</td>.
ce60: 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76  </tr>.<tr>.<td v
ce70: 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
ce80: 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74 68 3d  n="right" width=
ce90: 31 32 30 3e 3c 69 3e 44 45 4c 45 54 45 3c 2f 69  120><i>DELETE</i
cea0: 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  ></td>.<td valig
ceb0: 6e 3d 22 74 6f 70 22 3e 4f 4c 44 20 72 65 66 65  n="top">OLD refe
cec0: 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c 69 64  rences are valid
ced0: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61  </td>.</tr>.</ta
cee0: 62 6c 65 3e 0a 3c 2f 70 3e 29 5e 0a 0a 3c 70 3e  ble>.</p>)^..<p>
cef0: 5e 49 66 20 61 20 57 48 45 4e 20 63 6c 61 75 73  ^If a WHEN claus
cf00: 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20 74  e is supplied, t
cf10: 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
cf20: 73 20 73 70 65 63 69 66 69 65 64 0a 61 72 65 20  s specified.are 
cf30: 6f 6e 6c 79 20 65 78 65 63 75 74 65 64 20 66 6f  only executed fo
cf40: 72 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  r rows for which
cf50: 20 74 68 65 20 57 48 45 4e 0a 63 6c 61 75 73 65   the WHEN.clause
cf60: 20 69 73 20 74 72 75 65 2e 20 5e 49 66 20 6e 6f   is true. ^If no
cf70: 20 57 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20   WHEN clause is 
cf80: 73 75 70 70 6c 69 65 64 2c 20 74 68 65 20 53 51  supplied, the SQ
cf90: 4c 20 73 74 61 74 65 6d 65 6e 74 73 0a 61 72 65  L statements.are
cfa0: 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 61 6c   executed for al
cfb0: 6c 20 72 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  l rows.</p>..<p>
cfc0: 5e 54 68 65 20 42 45 46 4f 52 45 20 6f 72 20 41  ^The BEFORE or A
cfd0: 46 54 45 52 20 6b 65 79 77 6f 72 64 20 64 65 74  FTER keyword det
cfe0: 65 72 6d 69 6e 65 73 20 77 68 65 6e 20 74 68 65  ermines when the
cff0: 20 74 72 69 67 67 65 72 20 61 63 74 69 6f 6e 73   trigger actions
d000: 0a 77 69 6c 6c 20 62 65 20 65 78 65 63 75 74 65  .will be execute
d010: 64 20 72 65 6c 61 74 69 76 65 20 74 6f 20 74 68  d relative to th
d020: 65 20 69 6e 73 65 72 74 69 6f 6e 2c 20 6d 6f 64  e insertion, mod
d030: 69 66 69 63 61 74 69 6f 6e 20 6f 72 20 72 65 6d  ification or rem
d040: 6f 76 61 6c 20 6f 66 20 74 68 65 0a 61 73 73 6f  oval of the.asso
d050: 63 69 61 74 65 64 20 72 6f 77 2e 3c 2f 70 3e 0a  ciated row.</p>.
d060: 0a 3c 70 3e 5e 41 6e 20 5b 4f 4e 20 43 4f 4e 46  .<p>^An [ON CONF
d070: 4c 49 43 54 5d 20 63 6c 61 75 73 65 20 6d 61 79  LICT] clause may
d080: 20 62 65 20 73 70 65 63 69 66 69 65 64 20 61 73   be specified as
d090: 20 70 61 72 74 20 6f 66 20 61 6e 20 5b 55 50 44   part of an [UPD
d0a0: 41 54 45 5d 20 6f 72 20 5b 49 4e 53 45 52 54 5d  ATE] or [INSERT]
d0b0: 0a 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 74  .action within t
d0c0: 68 65 20 62 6f 64 79 20 6f 66 20 74 68 65 20 74  he body of the t
d0d0: 72 69 67 67 65 72 2e 0a 5e 48 6f 77 65 76 65 72  rigger..^However
d0e0: 20 69 66 20 61 6e 20 5b 4f 4e 20 43 4f 4e 46 4c   if an [ON CONFL
d0f0: 49 43 54 5d 20 63 6c 61 75 73 65 20 69 73 20 73  ICT] clause is s
d100: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
d110: 20 6f 66 20 0a 74 68 65 20 73 74 61 74 65 6d 65   of .the stateme
d120: 6e 74 20 63 61 75 73 69 6e 67 20 74 68 65 20 74  nt causing the t
d130: 72 69 67 67 65 72 20 74 6f 20 66 69 72 65 2c 20  rigger to fire, 
d140: 74 68 65 6e 20 63 6f 6e 66 6c 69 63 74 20 68 61  then conflict ha
d150: 6e 64 6c 69 6e 67 0a 70 6f 6c 69 63 79 20 6f 66  ndling.policy of
d160: 20 74 68 65 20 6f 75 74 65 72 20 73 74 61 74 65   the outer state
d170: 6d 65 6e 74 20 69 73 20 75 73 65 64 20 69 6e 73  ment is used ins
d180: 74 65 61 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  tead.</p>..<p>^T
d190: 72 69 67 67 65 72 73 20 61 72 65 20 61 75 74 6f  riggers are auto
d1a0: 6d 61 74 69 63 61 6c 6c 79 20 5b 44 52 4f 50 20  matically [DROP 
d1b0: 54 52 49 47 47 45 52 20 7c 20 64 72 6f 70 70 65  TRIGGER | droppe
d1c0: 64 5d 0a 77 68 65 6e 20 74 68 65 20 74 61 62 6c  d].when the tabl
d1d0: 65 20 74 68 61 74 20 74 68 65 79 20 61 72 65 20  e that they are 
d1e0: 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68  .associated with
d1f0: 20 28 74 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e   (the <i>table-n
d200: 61 6d 65 3c 2f 69 3e 20 74 61 62 6c 65 29 20 69  ame</i> table) i
d210: 73 20 0a 5b 44 52 4f 50 20 54 41 42 4c 45 20 7c  s .[DROP TABLE |
d220: 20 64 72 6f 70 70 65 64 5d 2e 20 20 5e 48 6f 77   dropped].  ^How
d230: 65 76 65 72 20 69 66 20 74 68 65 20 74 72 69 67  ever if the trig
d240: 67 65 72 20 61 63 74 69 6f 6e 73 20 72 65 66 65  ger actions refe
d250: 72 65 6e 63 65 0a 6f 74 68 65 72 20 74 61 62 6c  rence.other tabl
d260: 65 73 2c 20 74 68 65 20 74 72 69 67 67 65 72 20  es, the trigger 
d270: 69 73 20 6e 6f 74 20 64 72 6f 70 70 65 64 20 6f  is not dropped o
d280: 72 20 6d 6f 64 69 66 69 65 64 20 69 66 20 74 68  r modified if th
d290: 6f 73 65 20 6f 74 68 65 72 0a 74 61 62 6c 65 73  ose other.tables
d2a0: 20 61 72 65 20 5b 44 52 4f 50 20 54 41 42 4c 45   are [DROP TABLE
d2b0: 20 7c 20 64 72 6f 70 70 65 64 5d 20 6f 72 20 5b   | dropped] or [
d2c0: 41 4c 54 45 52 20 54 41 42 4c 45 20 7c 20 6d 6f  ALTER TABLE | mo
d2d0: 64 69 66 69 65 64 5d 2e 3c 2f 70 3e 0a 0a 3c 70  dified].</p>..<p
d2e0: 3e 5e 54 72 69 67 67 65 72 73 20 61 72 65 20 72  >^Triggers are r
d2f0: 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 74 68 65  emoved using the
d300: 20 5b 44 52 4f 50 20 54 52 49 47 47 45 52 5d 20   [DROP TRIGGER] 
d310: 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a  statement.</p>..
d320: 3c 68 33 3e 53 79 6e 74 61 78 20 52 65 73 74 72  <h3>Syntax Restr
d330: 69 63 74 69 6f 6e 73 20 4f 6e 20 55 50 44 41 54  ictions On UPDAT
d340: 45 2c 20 44 45 4c 45 54 45 2c 20 61 6e 64 20 49  E, DELETE, and I
d350: 4e 53 45 52 54 20 53 74 61 74 65 6d 65 6e 74 73  NSERT Statements
d360: 20 57 69 74 68 69 6e 0a 20 20 20 20 54 72 69 67   Within.    Trig
d370: 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54  gers</h3>..<p>^T
d380: 68 65 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45  he [UPDATE], [DE
d390: 4c 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e 53 45  LETE], and [INSE
d3a0: 52 54 5d 0a 73 74 61 74 65 6d 65 6e 74 73 20 77  RT].statements w
d3b0: 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 64  ithin triggers d
d3c0: 6f 20 6e 6f 74 20 73 75 70 70 6f 72 74 0a 74 68  o not support.th
d3d0: 65 20 66 75 6c 6c 20 73 79 6e 74 61 78 20 66 6f  e full syntax fo
d3e0: 72 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c  r [UPDATE], [DEL
d3f0: 45 54 45 5d 2c 20 61 6e 64 20 5b 49 4e 53 45 52  ETE], and [INSER
d400: 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20  T] statements.  
d410: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 72 65  The following.re
d420: 73 74 72 69 63 74 69 6f 6e 73 20 61 70 70 6c 79  strictions apply
d430: 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  :</p>..<ul>.<li>
d440: 3c 70 3e 0a 20 20 5e 28 54 68 65 20 6e 61 6d 65  <p>.  ^(The name
d450: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
d460: 20 62 65 20 6d 6f 64 69 66 69 65 64 20 69 6e 20   be modified in 
d470: 61 6e 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45  an [UPDATE], [DE
d480: 4c 45 54 45 5d 2c 20 6f 72 20 5b 49 4e 53 45 52  LETE], or [INSER
d490: 54 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74 20 6d  T].  statement m
d4a0: 75 73 74 20 62 65 20 61 6e 20 75 6e 71 75 61 6c  ust be an unqual
d4b0: 69 66 69 65 64 20 74 61 62 6c 65 20 6e 61 6d 65  ified table name
d4c0: 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
d4d0: 73 2c 20 6f 6e 65 20 6d 75 73 74 0a 20 20 75 73  s, one must.  us
d4e0: 65 20 6a 75 73 74 20 22 3c 69 3e 74 61 62 6c 65  e just "<i>table
d4f0: 6e 61 6d 65 3c 2f 69 3e 22 20 6e 6f 74 20 22 3c  name</i>" not "<
d500: 69 3e 64 61 74 61 62 61 73 65 3c 2f 69 3e 3c 62  i>database</i><b
d510: 3e 2e 3c 2f 62 3e 3c 69 3e 74 61 62 6c 65 6e 61  >.</b><i>tablena
d520: 6d 65 3c 2f 69 3e 22 0a 20 20 77 68 65 6e 20 73  me</i>".  when s
d530: 70 65 63 69 66 79 69 6e 67 20 74 68 65 20 74 61  pecifying the ta
d540: 62 6c 65 2e 29 5e 20 20 5e 54 68 65 20 74 61 62  ble.)^  ^The tab
d550: 6c 65 20 74 6f 20 62 65 20 6d 6f 64 69 66 69 65  le to be modifie
d560: 64 20 6d 75 73 74 20 65 78 69 73 74 20 69 6e 20  d must exist in 
d570: 74 68 65 0a 20 20 73 61 6d 65 20 64 61 74 61 62  the.  same datab
d580: 61 73 65 20 61 73 20 74 68 65 20 74 61 62 6c 65  ase as the table
d590: 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69 63   or view to whic
d5a0: 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73  h the trigger is
d5b0: 20 61 74 74 61 63 68 65 64 2e 0a 20 20 3c 2f 70   attached..  </p
d5c0: 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ></li>..<li><p>.
d5d0: 20 20 5e 54 68 65 20 22 49 4e 53 45 52 54 20 49    ^The "INSERT I
d5e0: 4e 54 4f 20 3c 69 3e 74 61 62 6c 65 3c 2f 69 3e  NTO <i>table</i>
d5f0: 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 22   DEFAULT VALUES"
d600: 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 5b 49 4e   form of the [IN
d610: 53 45 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 0a  SERT] statement.
d620: 20 20 69 73 20 6e 6f 74 20 73 75 70 70 6f 72 74    is not support
d630: 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a  ed..  </p></li>.
d640: 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68 65 20  .<li><p>.  ^The 
d650: 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64 20 4e  INDEXED BY and N
d660: 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73  OT INDEXED claus
d670: 65 73 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f  es are not suppo
d680: 72 74 65 64 20 66 6f 72 20 5b 55 50 44 41 54 45  rted for [UPDATE
d690: 5d 20 61 6e 64 0a 20 20 5b 44 45 4c 45 54 45 5d  ] and.  [DELETE]
d6a0: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 3c   statements..  <
d6b0: 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
d6c0: 3e 0a 20 20 5e 28 54 68 65 20 4f 52 44 45 52 20  >.  ^(The ORDER 
d6d0: 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61  BY and LIMIT cla
d6e0: 75 73 65 73 20 6f 6e 20 5b 55 50 44 41 54 45 5d  uses on [UPDATE]
d6f0: 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20 73 74   and [DELETE] st
d700: 61 74 65 6d 65 6e 74 73 20 61 72 65 20 6e 6f 74  atements are not
d710: 0a 20 20 73 75 70 70 6f 72 74 65 64 2e 20 20 4f  .  supported.  O
d720: 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49  RDER BY and LIMI
d730: 54 20 61 72 65 20 6e 6f 74 20 6e 6f 72 6d 61 6c  T are not normal
d740: 6c 79 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72  ly supported for
d750: 20 5b 55 50 44 41 54 45 5d 20 6f 72 0a 20 20 5b   [UPDATE] or.  [
d760: 44 45 4c 45 54 45 5d 20 69 6e 20 61 6e 79 20 63  DELETE] in any c
d770: 6f 6e 74 65 78 74 20 62 75 74 20 63 61 6e 20 62  ontext but can b
d780: 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 6f  e enabled for to
d790: 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d 65 6e  p-level statemen
d7a0: 74 73 0a 20 20 75 73 69 6e 67 20 74 68 65 20 5b  ts.  using the [
d7b0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50  SQLITE_ENABLE_UP
d7c0: 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49  DATE_DELETE_LIMI
d7d0: 54 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  T] compile-time 
d7e0: 6f 70 74 69 6f 6e 2e 20 20 48 6f 77 65 76 65 72  option.  However
d7f0: 2c 0a 20 20 74 68 61 74 20 63 6f 6d 70 69 6c 65  ,.  that compile
d800: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 6f 6e 6c  -time option onl
d810: 79 20 61 70 70 6c 69 65 73 20 74 6f 20 74 6f 70  y applies to top
d820: 2d 6c 65 76 65 6c 20 5b 55 50 44 41 54 45 5d 20  -level [UPDATE] 
d830: 61 6e 64 20 5b 44 45 4c 45 54 45 5d 0a 20 20 73  and [DELETE].  s
d840: 74 61 74 65 6d 65 6e 74 73 2c 20 6e 6f 74 20 5b  tatements, not [
d850: 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44 45 4c  UPDATE] and [DEL
d860: 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 20  ETE] statements 
d870: 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
d880: 29 5e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a  )^.  </p></li>..
d890: 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 5b 63 6f 6d 6d  <li><p>.  ^[comm
d8a0: 6f 6e 2d 74 61 62 6c 65 2d 65 78 70 72 65 73 73  on-table-express
d8b0: 69 6f 6e 7c 43 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ion|Common table
d8c0: 20 65 78 70 72 65 73 73 69 6f 6e 5d 20 61 72 65   expression] are
d8d0: 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 66   not supported f
d8e0: 6f 72 0a 20 20 73 74 61 74 65 6d 65 6e 74 73 20  or.  statements 
d8f0: 69 6e 73 69 64 65 20 6f 66 20 74 72 69 67 67 65  inside of trigge
d900: 72 73 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a  rs..  </p></li>.
d910: 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  </ul>..<tcl>hd_f
d920: 72 61 67 6d 65 6e 74 20 69 6e 73 74 65 61 64 5f  ragment instead_
d930: 6f 66 5f 74 72 69 67 67 65 72 20 7b 49 4e 53 54  of_trigger {INST
d940: 45 41 44 20 4f 46 7d 20 7b 49 4e 53 54 45 41 44  EAD OF} {INSTEAD
d950: 20 4f 46 20 74 72 69 67 67 65 72 7d 3c 2f 74 63   OF trigger}</tc
d960: 6c 3e 0a 3c 68 33 3e 49 4e 53 54 45 41 44 20 4f  l>.<h3>INSTEAD O
d970: 46 20 74 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a  F triggers</h3>.
d980: 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 6d 61  .<p>^Triggers ma
d990: 79 20 62 65 20 63 72 65 61 74 65 64 20 6f 6e 20  y be created on 
d9a0: 5b 76 69 65 77 73 5d 2c 20 61 73 20 77 65 6c 6c  [views], as well
d9b0: 20 61 73 20 6f 72 64 69 6e 61 72 79 20 74 61 62   as ordinary tab
d9c0: 6c 65 73 2c 20 62 79 0a 73 70 65 63 69 66 79 69  les, by.specifyi
d9d0: 6e 67 20 49 4e 53 54 45 41 44 20 4f 46 20 69 6e  ng INSTEAD OF in
d9e0: 20 74 68 65 20 43 52 45 41 54 45 20 54 52 49 47   the CREATE TRIG
d9f0: 47 45 52 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a  GER statement. .
da00: 5e 49 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ^If one or more 
da10: 4f 4e 20 49 4e 53 45 52 54 2c 20 4f 4e 20 44 45  ON INSERT, ON DE
da20: 4c 45 54 45 0a 6f 72 20 4f 4e 20 55 50 44 41 54  LETE.or ON UPDAT
da30: 45 20 74 72 69 67 67 65 72 73 20 61 72 65 20 64  E triggers are d
da40: 65 66 69 6e 65 64 20 6f 6e 20 61 20 76 69 65 77  efined on a view
da50: 2c 20 74 68 65 6e 20 69 74 20 69 73 20 6e 6f 74  , then it is not
da60: 20 61 6e 0a 65 72 72 6f 72 20 74 6f 20 65 78 65   an.error to exe
da70: 63 75 74 65 20 61 6e 20 49 4e 53 45 52 54 2c 20  cute an INSERT, 
da80: 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
da90: 20 73 74 61 74 65 6d 65 6e 74 20 6f 6e 20 74 68   statement on th
daa0: 65 20 76 69 65 77 2c 20 0a 72 65 73 70 65 63 74  e view, .respect
dab0: 69 76 65 6c 79 2e 20 20 5e 49 6e 73 74 65 61 64  ively.  ^Instead
dac0: 2c 0a 65 78 65 63 75 74 69 6e 67 20 61 6e 20 49  ,.executing an I
dad0: 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f 72  NSERT, DELETE or
dae0: 20 55 50 44 41 54 45 20 6f 6e 20 74 68 65 20 76   UPDATE on the v
daf0: 69 65 77 20 63 61 75 73 65 73 20 74 68 65 20 61  iew causes the a
db00: 73 73 6f 63 69 61 74 65 64 0a 74 72 69 67 67 65  ssociated.trigge
db10: 72 73 20 74 6f 20 66 69 72 65 2e 20 5e 54 68 65  rs to fire. ^The
db20: 20 72 65 61 6c 20 74 61 62 6c 65 73 20 75 6e 64   real tables und
db30: 65 72 6c 79 69 6e 67 20 74 68 65 20 76 69 65 77  erlying the view
db40: 20 61 72 65 20 6e 6f 74 20 6d 6f 64 69 66 69 65   are not modifie
db50: 64 0a 28 65 78 63 65 70 74 20 70 6f 73 73 69 62  d.(except possib
db60: 6c 79 20 65 78 70 6c 69 63 69 74 6c 79 2c 20 62  ly explicitly, b
db70: 79 20 61 20 74 72 69 67 67 65 72 20 70 72 6f 67  y a trigger prog
db80: 72 61 6d 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e  ram).</p>..<p>^N
db90: 6f 74 65 20 74 68 61 74 20 74 68 65 20 5b 73 71  ote that the [sq
dba0: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d  lite3_changes()]
dbb0: 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 74 6f   and [sqlite3_to
dbc0: 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20 69  tal_changes()] i
dbd0: 6e 74 65 72 66 61 63 65 73 0a 64 6f 20 6e 6f 74  nterfaces.do not
dbe0: 20 63 6f 75 6e 74 20 49 4e 53 54 45 41 44 20 4f   count INSTEAD O
dbf0: 46 20 74 72 69 67 67 65 72 20 66 69 72 69 6e 67  F trigger firing
dc00: 73 2c 20 62 75 74 20 74 68 65 0a 5b 63 6f 75 6e  s, but the.[coun
dc10: 74 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d 61  t_changes pragma
dc20: 5d 20 64 6f 65 73 20 63 6f 75 6e 74 20 49 4e 53  ] does count INS
dc30: 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 20  TEAD OF trigger 
dc40: 66 69 72 69 6e 67 2e 3c 2f 70 3e 0a 0a 3c 68 33  firing.</p>..<h3
dc50: 3e 53 6f 6d 65 20 45 78 61 6d 70 6c 65 20 54 72  >Some Example Tr
dc60: 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  iggers</h3>..<p>
dc70: 5e 28 41 73 73 75 6d 69 6e 67 20 74 68 61 74 20  ^(Assuming that 
dc80: 63 75 73 74 6f 6d 65 72 20 72 65 63 6f 72 64 73  customer records
dc90: 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74   are stored in t
dca0: 68 65 20 22 63 75 73 74 6f 6d 65 72 73 22 20 74  he "customers" t
dcb0: 61 62 6c 65 2c 20 61 6e 64 0a 74 68 61 74 20 6f  able, and.that o
dcc0: 72 64 65 72 20 72 65 63 6f 72 64 73 20 61 72 65  rder records are
dcd0: 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 22   stored in the "
dce0: 6f 72 64 65 72 73 22 20 74 61 62 6c 65 2c 20 74  orders" table, t
dcf0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 55 50 44  he following.UPD
dd00: 41 54 45 20 74 72 69 67 67 65 72 0a 65 6e 73 75  ATE trigger.ensu
dd10: 72 65 73 20 74 68 61 74 20 61 6c 6c 20 61 73 73  res that all ass
dd20: 6f 63 69 61 74 65 64 20 6f 72 64 65 72 73 20 61  ociated orders a
dd30: 72 65 20 72 65 64 69 72 65 63 74 65 64 20 77 68  re redirected wh
dd40: 65 6e 20 61 20 63 75 73 74 6f 6d 65 72 20 63 68  en a customer ch
dd50: 61 6e 67 65 73 0a 68 69 73 20 6f 72 20 68 65 72  anges.his or her
dd60: 20 61 64 64 72 65 73 73 3a 3c 2f 70 3e 0a 0a 3c   address:</p>..<
dd70: 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 43 52  tcl>Example {.CR
dd80: 45 41 54 45 20 54 52 49 47 47 45 52 20 75 70 64  EATE TRIGGER upd
dd90: 61 74 65 5f 63 75 73 74 6f 6d 65 72 5f 61 64 64  ate_customer_add
dda0: 72 65 73 73 20 55 50 44 41 54 45 20 4f 46 20 61  ress UPDATE OF a
ddb0: 64 64 72 65 73 73 20 4f 4e 20 63 75 73 74 6f 6d  ddress ON custom
ddc0: 65 72 73 20 0a 20 20 42 45 47 49 4e 0a 20 20 20  ers .  BEGIN.   
ddd0: 20 55 50 44 41 54 45 20 6f 72 64 65 72 73 20 53   UPDATE orders S
dde0: 45 54 20 61 64 64 72 65 73 73 20 3d 20 6e 65 77  ET address = new
ddf0: 2e 61 64 64 72 65 73 73 20 57 48 45 52 45 20 63  .address WHERE c
de00: 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20 6f  ustomer_name = o
de10: 6c 64 2e 6e 61 6d 65 3b 0a 20 20 45 4e 44 3b 0a  ld.name;.  END;.
de20: 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 69 74 68  }</tcl>..<p>With
de30: 20 74 68 69 73 20 74 72 69 67 67 65 72 20 69 6e   this trigger in
de40: 73 74 61 6c 6c 65 64 2c 20 65 78 65 63 75 74 69  stalled, executi
de50: 6e 67 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  ng the statement
de60: 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d  :</p>..<tcl>Exam
de70: 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 63 75 73  ple {.UPDATE cus
de80: 74 6f 6d 65 72 73 20 53 45 54 20 61 64 64 72 65  tomers SET addre
de90: 73 73 20 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e  ss = '1 Main St.
dea0: 27 20 57 48 45 52 45 20 6e 61 6d 65 20 3d 20 27  ' WHERE name = '
deb0: 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f  Jack Jones';.}</
dec0: 74 63 6c 3e 0a 0a 3c 70 3e 63 61 75 73 65 73 20  tcl>..<p>causes 
ded0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 6f  the following to
dee0: 20 62 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   be automaticall
def0: 79 20 65 78 65 63 75 74 65 64 3a 3c 2f 70 3e 0a  y executed:</p>.
df00: 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a  .<tcl>Example {.
df10: 55 50 44 41 54 45 20 6f 72 64 65 72 73 20 53 45  UPDATE orders SE
df20: 54 20 61 64 64 72 65 73 73 20 3d 20 27 31 20 4d  T address = '1 M
df30: 61 69 6e 20 53 74 2e 27 20 57 48 45 52 45 20 63  ain St.' WHERE c
df40: 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20 27  ustomer_name = '
df50: 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f  Jack Jones';.}</
df60: 74 63 6c 3e 29 5e 0a 0a 3c 70 3e 46 6f 72 20 61  tcl>)^..<p>For a
df70: 6e 20 65 78 61 6d 70 6c 65 20 6f 66 20 61 6e 20  n example of an 
df80: 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67  INSTEAD OF trigg
df90: 65 72 2c 20 63 6f 6e 73 69 64 65 72 20 74 68 65  er, consider the
dfa0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 63 68 65 6d   following schem
dfb0: 61 3a 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65  a:..<tcl>Example
dfc0: 20 7b 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20   {.CREATE TABLE 
dfd0: 63 75 73 74 6f 6d 65 72 28 0a 20 20 63 75 73 74  customer(.  cust
dfe0: 5f 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d  _id INTEGER PRIM
dff0: 41 52 59 20 4b 45 59 2c 0a 20 20 63 75 73 74 5f  ARY KEY,.  cust_
e000: 6e 61 6d 65 20 54 45 58 54 2c 0a 20 20 63 75 73  name TEXT,.  cus
e010: 74 5f 61 64 64 72 20 54 45 58 54 0a 29 3b 0a 43  t_addr TEXT.);.C
e020: 52 45 41 54 45 20 56 49 45 57 20 63 75 73 74 6f  REATE VIEW custo
e030: 6d 65 72 5f 61 64 64 72 65 73 73 20 41 53 0a 20  mer_address AS. 
e040: 20 20 53 45 4c 45 43 54 20 63 75 73 74 5f 69 64    SELECT cust_id
e050: 2c 20 63 75 73 74 5f 61 64 64 72 20 46 52 4f 4d  , cust_addr FROM
e060: 20 63 75 73 74 6f 6d 65 72 3b 0a 43 52 45 41 54   customer;.CREAT
e070: 45 20 54 52 49 47 47 45 52 20 63 75 73 74 5f 61  E TRIGGER cust_a
e080: 64 64 72 5f 63 68 6e 67 0a 49 4e 53 54 45 41 44  ddr_chng.INSTEAD
e090: 20 4f 46 20 55 50 44 41 54 45 20 4f 46 20 63 75   OF UPDATE OF cu
e0a0: 73 74 5f 61 64 64 72 20 4f 4e 20 63 75 73 74 6f  st_addr ON custo
e0b0: 6d 65 72 5f 61 64 64 72 65 73 73 0a 42 45 47 49  mer_address.BEGI
e0c0: 4e 0a 20 20 55 50 44 41 54 45 20 63 75 73 74 6f  N.  UPDATE custo
e0d0: 6d 65 72 20 53 45 54 20 63 75 73 74 5f 61 64 64  mer SET cust_add
e0e0: 72 3d 4e 45 57 2e 63 75 73 74 5f 61 64 64 72 0a  r=NEW.cust_addr.
e0f0: 20 20 20 57 48 45 52 45 20 63 75 73 74 5f 69 64     WHERE cust_id
e100: 3d 4e 45 57 2e 63 75 73 74 5f 69 64 3b 0a 45 4e  =NEW.cust_id;.EN
e110: 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57  D;.}</tcl>..<p>W
e120: 69 74 68 20 74 68 65 20 73 63 68 65 6d 61 20 61  ith the schema a
e130: 62 6f 76 65 2c 20 61 20 73 74 61 74 65 6d 65 6e  bove, a statemen
e140: 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 3a 3c 2f  t of the form:</
e150: 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65  p>..<tcl>Example
e160: 20 7b 0a 55 50 44 41 54 45 20 63 75 73 74 6f 6d   {.UPDATE custom
e170: 65 72 5f 61 64 64 72 65 73 73 20 53 45 54 20 63  er_address SET c
e180: 75 73 74 5f 61 64 64 72 3d 24 6e 65 77 5f 61 64  ust_addr=$new_ad
e190: 64 72 65 73 73 20 57 48 45 52 45 20 63 75 73 74  dress WHERE cust
e1a0: 5f 69 64 3d 24 63 75 73 74 5f 69 64 3b 0a 7d 3c  _id=$cust_id;.}<
e1b0: 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 61 75 73 65 73  /tcl>..<p>Causes
e1c0: 20 74 68 65 20 63 75 73 74 6f 6d 65 72 2e 63 75   the customer.cu
e1d0: 73 74 5f 61 64 64 72 20 66 69 65 6c 64 20 74 6f  st_addr field to
e1e0: 20 62 65 20 75 70 64 61 74 65 64 20 66 6f 72 20   be updated for 
e1f0: 61 20 73 70 65 63 69 66 69 63 0a 63 75 73 74 6f  a specific.custo
e200: 6d 65 72 20 65 6e 74 72 79 20 74 68 61 74 20 68  mer entry that h
e210: 61 73 20 63 75 73 74 6f 6d 65 72 2e 63 75 73 74  as customer.cust
e220: 5f 69 64 20 65 71 75 61 6c 20 74 6f 20 74 68 65  _id equal to the
e230: 20 24 63 75 73 74 5f 69 64 20 70 61 72 61 6d 65   $cust_id parame
e240: 74 65 72 2e 0a 4e 6f 74 65 20 68 6f 77 20 74 68  ter..Note how th
e250: 65 20 76 61 6c 75 65 73 20 61 73 73 69 67 6e 65  e values assigne
e260: 64 20 74 6f 20 74 68 65 20 76 69 65 77 20 61 72  d to the view ar
e270: 65 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65  e made available
e280: 20 61 73 20 66 69 65 6c 64 0a 69 6e 20 74 68 65   as field.in the
e290: 20 73 70 65 63 69 61 6c 20 22 4e 45 57 22 20 74   special "NEW" t
e2a0: 61 62 6c 65 20 77 69 74 68 69 6e 20 74 68 65 20  able within the 
e2b0: 74 72 69 67 67 65 72 20 62 6f 64 79 2e 3c 2f 70  trigger body.</p
e2c0: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
e2d0: 65 6e 74 20 75 6e 64 65 66 5f 62 65 66 6f 72 65  ent undef_before
e2e0: 20 7b 75 6e 64 65 66 69 6e 65 64 20 42 45 46 4f   {undefined BEFO
e2f0: 52 45 20 74 72 69 67 67 65 72 20 62 65 68 61 76  RE trigger behav
e300: 69 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43  ior}</tcl>.<h3>C
e310: 61 75 74 69 6f 6e 73 20 4f 6e 20 54 68 65 20 55  autions On The U
e320: 73 65 20 4f 66 20 42 45 46 4f 52 45 20 74 72 69  se Of BEFORE tri
e330: 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 49  ggers</h3>..<p>I
e340: 66 20 61 20 42 45 46 4f 52 45 20 55 50 44 41 54  f a BEFORE UPDAT
e350: 45 20 6f 72 20 42 45 46 4f 52 45 20 44 45 4c 45  E or BEFORE DELE
e360: 54 45 20 74 72 69 67 67 65 72 20 6d 6f 64 69 66  TE trigger modif
e370: 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20 61  ies or deletes a
e380: 20 72 6f 77 0a 74 68 61 74 20 77 61 73 20 74 6f   row.that was to
e390: 20 68 61 76 65 20 62 65 65 6e 20 75 70 64 61 74   have been updat
e3a0: 65 64 20 6f 72 20 64 65 6c 65 74 65 64 2c 20 74  ed or deleted, t
e3b0: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
e3c0: 66 20 74 68 65 20 73 75 62 73 65 71 75 65 6e 74  f the subsequent
e3d0: 0a 75 70 64 61 74 65 20 6f 72 20 64 65 6c 65 74  .update or delet
e3e0: 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75  e operation is u
e3f0: 6e 64 65 66 69 6e 65 64 2e 20 20 46 75 72 74 68  ndefined.  Furth
e400: 65 72 6d 6f 72 65 2c 20 69 66 20 61 20 42 45 46  ermore, if a BEF
e410: 4f 52 45 20 74 72 69 67 67 65 72 0a 6d 6f 64 69  ORE trigger.modi
e420: 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20  fies or deletes 
e430: 61 20 72 6f 77 2c 20 74 68 65 6e 20 69 74 20 69  a row, then it i
e440: 73 20 75 6e 64 65 66 69 6e 65 64 20 77 68 65 74  s undefined whet
e450: 68 65 72 20 6f 72 20 6e 6f 74 20 41 46 54 45 52  her or not AFTER
e460: 20 74 72 69 67 67 65 72 73 0a 74 68 61 74 20 77   triggers.that w
e470: 6f 75 6c 64 20 68 61 76 65 20 6f 74 68 65 72 77  ould have otherw
e480: 69 73 65 20 72 75 6e 20 6f 6e 20 74 68 6f 73 65  ise run on those
e490: 20 72 6f 77 73 20 77 69 6c 6c 20 69 6e 20 66 61   rows will in fa
e4a0: 63 74 20 72 75 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70  ct run..</p>..<p
e4b0: 3e 54 68 65 20 76 61 6c 75 65 20 6f 66 20 4e 45  >The value of NE
e4c0: 57 2e 72 6f 77 69 64 20 69 73 20 75 6e 64 65 66  W.rowid is undef
e4d0: 69 6e 65 64 20 69 6e 20 61 20 42 45 46 4f 52 45  ined in a BEFORE
e4e0: 20 49 4e 53 45 52 54 20 74 72 69 67 67 65 72 20   INSERT trigger 
e4f0: 69 6e 20 77 68 69 63 68 0a 74 68 65 20 72 6f 77  in which.the row
e500: 69 64 20 69 73 20 6e 6f 74 20 65 78 70 6c 69 63  id is not explic
e510: 69 74 6c 79 20 73 65 74 20 74 6f 20 61 6e 20 69  itly set to an i
e520: 6e 74 65 67 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  nteger.</p>..<p>
e530: 42 65 63 61 75 73 65 20 6f 66 20 74 68 65 20 62  Because of the b
e540: 65 68 61 76 69 6f 72 73 20 64 65 73 63 72 69 62  ehaviors describ
e550: 65 64 20 61 62 6f 76 65 2c 20 70 72 6f 67 72 61  ed above, progra
e560: 6d 6d 65 72 73 20 61 72 65 20 65 6e 63 6f 75 72  mmers are encour
e570: 61 67 65 64 20 74 6f 0a 70 72 65 66 65 72 20 41  aged to.prefer A
e580: 46 54 45 52 20 74 72 69 67 67 65 72 73 20 6f 76  FTER triggers ov
e590: 65 72 20 42 45 46 4f 52 45 20 74 72 69 67 67 65  er BEFORE trigge
e5a0: 72 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  rs.</p>..<tcl>hd
e5b0: 5f 66 72 61 67 6d 65 6e 74 20 72 61 69 73 65 20  _fragment raise 
e5c0: 7b 52 41 49 53 45 20 66 75 6e 63 74 69 6f 6e 7d  {RAISE function}
e5d0: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 52  </tcl>.<h3>The R
e5e0: 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 3c  AISE() function<
e5f0: 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 73 70 65  /h3>..<p>^(A spe
e600: 63 69 61 6c 20 53 51 4c 20 66 75 6e 63 74 69 6f  cial SQL functio
e610: 6e 20 52 41 49 53 45 28 29 20 6d 61 79 20 62 65  n RAISE() may be
e620: 20 75 73 65 64 20 77 69 74 68 69 6e 20 61 20 74   used within a t
e630: 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2c 29  rigger-program,)
e640: 5e 0a 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f  ^.with the follo
e650: 77 69 6e 67 20 73 79 6e 74 61 78 3c 2f 70 3e 20  wing syntax</p> 
e660: 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61  ..<tcl>BubbleDia
e670: 67 72 61 6d 20 72 61 69 73 65 2d 66 75 6e 63 74  gram raise-funct
e680: 69 6f 6e 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 28  ion</tcl>..<p>^(
e690: 57 68 65 6e 20 6f 6e 65 20 6f 66 20 52 41 49 53  When one of RAIS
e6a0: 45 28 52 4f 4c 4c 42 41 43 4b 2c 2e 2e 2e 29 2c  E(ROLLBACK,...),
e6b0: 20 52 41 49 53 45 28 41 42 4f 52 54 2c 2e 2e 2e   RAISE(ABORT,...
e6c0: 29 20 6f 72 20 52 41 49 53 45 28 46 41 49 4c 2c  ) or RAISE(FAIL,
e6d0: 2e 2e 2e 29 0a 69 73 20 63 61 6c 6c 65 64 20 64  ...).is called d
e6e0: 75 72 69 6e 67 20 74 72 69 67 67 65 72 2d 70 72  uring trigger-pr
e6f0: 6f 67 72 61 6d 0a 65 78 65 63 75 74 69 6f 6e 2c  ogram.execution,
e700: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 5b   the specified [
e710: 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 70 72 6f  ON CONFLICT] pro
e720: 63 65 73 73 69 6e 67 20 69 73 20 70 65 72 66 6f  cessing is perfo
e730: 72 6d 65 64 0a 74 68 65 20 63 75 72 72 65 6e 74  rmed.the current
e740: 20 71 75 65 72 79 20 74 65 72 6d 69 6e 61 74 65   query terminate
e750: 73 2e 29 5e 0a 41 6e 20 65 72 72 6f 72 20 63 6f  s.)^.An error co
e760: 64 65 20 6f 66 20 5b 53 51 4c 49 54 45 5f 43 4f  de of [SQLITE_CO
e770: 4e 53 54 52 41 49 4e 54 5d 20 69 73 20 72 65 74  NSTRAINT] is ret
e780: 75 72 6e 65 64 20 74 6f 20 74 68 65 20 61 70 70  urned to the app
e790: 6c 69 63 61 74 69 6f 6e 2c 0a 61 6c 6f 6e 67 20  lication,.along 
e7a0: 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
e7b0: 65 64 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  ed error message
e7c0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20  .</p>..<p>^When 
e7d0: 52 41 49 53 45 28 49 47 4e 4f 52 45 29 20 69 73  RAISE(IGNORE) is
e7e0: 20 63 61 6c 6c 65 64 2c 20 74 68 65 20 72 65 6d   called, the rem
e7f0: 61 69 6e 64 65 72 20 6f 66 20 74 68 65 20 63 75  ainder of the cu
e800: 72 72 65 6e 74 20 74 72 69 67 67 65 72 20 70 72  rrent trigger pr
e810: 6f 67 72 61 6d 2c 0a 74 68 65 20 73 74 61 74 65  ogram,.the state
e820: 6d 65 6e 74 20 74 68 61 74 20 63 61 75 73 65 64  ment that caused
e830: 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
e840: 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20  gram to execute 
e850: 61 6e 64 20 61 6e 79 20 73 75 62 73 65 71 75 65  and any subseque
e860: 6e 74 0a 74 72 69 67 67 65 72 20 70 72 6f 67 72  nt.trigger progr
e870: 61 6d 73 20 74 68 61 74 20 77 6f 75 6c 64 20 68  ams that would h
e880: 61 76 65 20 62 65 65 6e 20 65 78 65 63 75 74 65  ave been execute
e890: 64 20 61 72 65 20 61 62 61 6e 64 6f 6e 65 64 2e  d are abandoned.
e8a0: 20 5e 4e 6f 20 64 61 74 61 62 61 73 65 0a 63 68   ^No database.ch
e8b0: 61 6e 67 65 73 20 61 72 65 20 72 6f 6c 6c 65 64  anges are rolled
e8c0: 20 62 61 63 6b 2e 20 20 5e 49 66 20 74 68 65 20   back.  ^If the 
e8d0: 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 63  statement that c
e8e0: 61 75 73 65 64 20 74 68 65 20 74 72 69 67 67 65  aused the trigge
e8f0: 72 20 70 72 6f 67 72 61 6d 0a 74 6f 20 65 78 65  r program.to exe
e900: 63 75 74 65 20 69 73 20 69 74 73 65 6c 66 20 70  cute is itself p
e910: 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72  art of a trigger
e920: 20 70 72 6f 67 72 61 6d 2c 20 74 68 65 6e 20 74   program, then t
e930: 68 61 74 20 74 72 69 67 67 65 72 20 70 72 6f 67  hat trigger prog
e940: 72 61 6d 0a 72 65 73 75 6d 65 73 20 65 78 65 63  ram.resumes exec
e950: 75 74 69 6f 6e 20 61 74 20 74 68 65 20 62 65 67  ution at the beg
e960: 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 6e 65  inning of the ne
e970: 78 74 20 73 74 65 70 2e 0a 3c 2f 70 3e 0a 0a 3c  xt step..</p>..<
e980: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
e990: 74 65 6d 70 74 72 69 67 20 7b 54 45 4d 50 20 74  temptrig {TEMP t
e9a0: 72 69 67 67 65 72 73 20 6f 6e 20 6e 6f 6e 2d 54  riggers on non-T
e9b0: 45 4d 50 20 74 61 62 6c 65 73 7d 3c 2f 74 63 6c  EMP tables}</tcl
e9c0: 3e 0a 3c 68 33 3e 54 45 4d 50 20 54 72 69 67 67  >.<h3>TEMP Trigg
e9d0: 65 72 73 20 6f 6e 20 4e 6f 6e 2d 54 45 4d 50 20  ers on Non-TEMP 
e9e0: 54 61 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  Tables</h3>..<p>
e9f0: 5e 28 41 20 74 72 69 67 67 65 72 20 6e 6f 72 6d  ^(A trigger norm
ea00: 61 6c 6c 79 20 65 78 69 73 74 73 20 69 6e 20 74  ally exists in t
ea10: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
ea20: 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 6e 61   as the table na
ea30: 6d 65 64 0a 61 66 74 65 72 20 74 68 65 20 22 4f  med.after the "O
ea40: 4e 22 20 6b 65 79 77 6f 72 64 20 69 6e 20 74 68  N" keyword in th
ea50: 65 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  e CREATE TRIGGER
ea60: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 45 78 63   statement.  Exc
ea70: 65 70 74 2c 20 69 74 20 69 73 0a 70 6f 73 73 69  ept, it is.possi
ea80: 62 6c 65 20 74 6f 20 63 72 65 61 74 65 20 61 20  ble to create a 
ea90: 54 45 4d 50 20 54 52 49 47 47 45 52 20 6f 6e 20  TEMP TRIGGER on 
eaa0: 61 20 74 61 62 6c 65 20 69 6e 20 61 6e 6f 74 68  a table in anoth
eab0: 65 72 20 64 61 74 61 62 61 73 65 2e 29 5e 20 20  er database.)^  
eac0: 0a 53 75 63 68 20 61 20 74 72 69 67 67 65 72 20  .Such a trigger 
ead0: 77 69 6c 6c 20 6f 6e 6c 79 20 66 69 72 65 20 77  will only fire w
eae0: 68 65 6e 20 63 68 61 6e 67 65 73 0a 61 72 65 20  hen changes.are 
eaf0: 6d 61 64 65 20 74 6f 20 74 68 65 20 74 61 72 67  made to the targ
eb00: 65 74 20 74 61 62 6c 65 20 62 79 20 74 68 65 20  et table by the 
eb10: 61 70 70 6c 69 63 61 74 69 6f 6e 20 74 68 61 74  application that
eb20: 20 64 65 66 69 6e 65 64 20 74 68 65 20 74 72 69   defined the tri
eb30: 67 67 65 72 2e 0a 4f 74 68 65 72 20 61 70 70 6c  gger..Other appl
eb40: 69 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 6f  ications that mo
eb50: 64 69 66 79 20 74 68 65 20 64 61 74 61 62 61 73  dify the databas
eb60: 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 61 62  e will not be ab
eb70: 6c 65 20 74 6f 20 73 65 65 20 74 68 65 0a 54 45  le to see the.TE
eb80: 4d 50 20 74 72 69 67 67 65 72 20 61 6e 64 20 68  MP trigger and h
eb90: 65 6e 63 65 20 63 61 6e 6e 6f 74 20 72 75 6e 20  ence cannot run 
eba0: 74 68 65 20 74 72 69 67 67 65 72 2e 3c 2f 70 3e  the trigger.</p>
ebb0: 0a 0a 3c 70 3e 57 68 65 6e 20 64 65 66 69 6e 69  ..<p>When defini
ebc0: 6e 67 20 61 20 54 45 4d 50 20 74 72 69 67 67 65  ng a TEMP trigge
ebd0: 72 20 6f 6e 20 61 20 6e 6f 6e 2d 54 45 4d 50 20  r on a non-TEMP 
ebe0: 74 61 62 6c 65 2c 20 69 74 20 69 73 20 69 6d 70  table, it is imp
ebf0: 6f 72 74 61 6e 74 20 74 6f 0a 73 70 65 63 69 66  ortant to.specif
ec00: 79 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  y the database h
ec10: 6f 6c 64 69 6e 67 20 74 68 65 20 6e 6f 6e 2d 54  olding the non-T
ec20: 45 4d 50 20 74 61 62 6c 65 2e 20 20 46 6f 72 20  EMP table.  For 
ec30: 65 78 61 6d 70 6c 65 2c 0a 69 6e 20 74 68 65 20  example,.in the 
ec40: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d  following statem
ec50: 65 6e 74 2c 20 69 74 20 69 73 20 69 6d 70 6f 72  ent, it is impor
ec60: 74 61 6e 74 20 74 6f 20 73 61 79 20 22 6d 61 69  tant to say "mai
ec70: 6e 2e 74 61 62 31 22 20 69 6e 73 74 65 61 64 0a  n.tab1" instead.
ec80: 6f 66 20 6a 75 73 74 20 22 74 61 62 31 22 3a 3c  of just "tab1":<
ec90: 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
eca0: 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 45  ><pre>.CREATE TE
ecb0: 4d 50 20 54 52 49 47 47 45 52 20 65 78 31 20 41  MP TRIGGER ex1 A
ecc0: 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20 3c  FTER INSERT ON <
ecd0: 62 3e 6d 61 69 6e 2e 3c 2f 62 3e 74 61 62 31 20  b>main.</b>tab1 
ece0: 42 45 47 49 4e 20 2e 2e 2e 0a 3c 2f 70 72 65 3e  BEGIN ....</pre>
ecf0: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
ed00: 70 3e 46 61 69 6c 75 72 65 20 74 6f 20 73 70 65  p>Failure to spe
ed10: 63 69 66 79 20 74 68 65 20 73 63 68 65 6d 61 20  cify the schema 
ed20: 6e 61 6d 65 20 6f 6e 20 74 68 65 20 74 61 72 67  name on the targ
ed30: 65 74 20 74 61 62 6c 65 20 63 6f 75 6c 64 20 72  et table could r
ed40: 65 73 75 6c 74 0a 69 6e 20 74 68 65 20 54 45 4d  esult.in the TEM
ed50: 50 20 74 72 69 67 67 65 72 20 62 65 69 6e 67 20  P trigger being 
ed60: 72 65 61 74 74 61 63 68 65 64 20 74 6f 20 61 20  reattached to a 
ed70: 74 61 62 6c 65 20 77 69 74 68 20 74 68 65 20 73  table with the s
ed80: 61 6d 65 20 6e 61 6d 65 20 69 6e 0a 61 6e 6f 74  ame name in.anot
ed90: 68 65 72 20 64 61 74 61 62 61 73 65 20 77 68 65  her database whe
eda0: 6e 65 76 65 72 20 61 6e 79 20 73 63 68 65 6d 61  never any schema
edb0: 20 63 68 61 6e 67 65 20 6f 63 63 75 72 73 2e 3c   change occurs.<
edc0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
edd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ede0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
edf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee10: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
ee20: 6f 6e 20 7b 43 52 45 41 54 45 20 56 49 45 57 7d  on {CREATE VIEW}
ee30: 20 7b 63 72 65 61 74 65 76 69 65 77 7d 20 7b 7b   {createview} {{
ee40: 43 52 45 41 54 45 20 56 49 45 57 7d 20 76 69 65  CREATE VIEW} vie
ee50: 77 20 56 49 45 57 20 2a 76 69 65 77 73 7d 0a 0a  w VIEW *views}..
ee60: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
ee70: 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d 76 69  iagram create-vi
ee80: 65 77 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ew-stmt.</tcl>..
ee90: 3c 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 56  <p>^The CREATE V
eea0: 49 45 57 20 63 6f 6d 6d 61 6e 64 20 61 73 73 69  IEW command assi
eeb0: 67 6e 73 20 61 20 6e 61 6d 65 20 74 6f 20 61 20  gns a name to a 
eec0: 70 72 65 2d 70 61 63 6b 61 67 65 64 20 0a 5b 53  pre-packaged .[S
eed0: 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
eee0: 2e 20 0a 5e 4f 6e 63 65 20 74 68 65 20 76 69 65  . .^Once the vie
eef0: 77 20 69 73 20 63 72 65 61 74 65 64 2c 20 69 74  w is created, it
ef00: 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
ef10: 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a  the FROM clause.
ef20: 6f 66 20 61 6e 6f 74 68 65 72 20 5b 53 45 4c 45  of another [SELE
ef30: 43 54 5d 20 69 6e 20 70 6c 61 63 65 20 6f 66 20  CT] in place of 
ef40: 61 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a 3c 2f  a table name..</
ef50: 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 22  p>..<p>^If the "
ef60: 54 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52  TEMP" or "TEMPOR
ef70: 41 52 59 22 20 6b 65 79 77 6f 72 64 20 6f 63 63  ARY" keyword occ
ef80: 75 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20 22  urs in between "
ef90: 43 52 45 41 54 45 22 0a 61 6e 64 20 22 56 49 45  CREATE".and "VIE
efa0: 57 22 20 74 68 65 6e 20 74 68 65 20 76 69 65 77  W" then the view
efb0: 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64   that is created
efc0: 20 69 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c 65   is only visible
efd0: 20 74 6f 20 74 68 65 0a 5b 64 61 74 61 62 61 73   to the.[databas
efe0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 74 68  e connection] th
eff0: 61 74 20 63 72 65 61 74 65 64 20 69 74 20 61 6e  at created it an
f000: 64 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c  d is automatical
f010: 6c 79 20 64 65 6c 65 74 65 64 20 77 68 65 6e 0a  ly deleted when.
f020: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
f030: 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c 6f 73 65  nection is close
f040: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 49 66 20  d.</p>..<p> ^If 
f050: 61 20 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d 61  a <yyterm>schema
f060: 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 69  -name</yyterm> i
f070: 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65  s specified, the
f080: 6e 20 74 68 65 20 76 69 65 77 20 0a 69 73 20 63  n the view .is c
f090: 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 73 70  reated in the sp
f0a0: 65 63 69 66 69 65 64 20 64 61 74 61 62 61 73 65  ecified database
f0b0: 2e 0a 5e 49 74 20 69 73 20 61 6e 20 65 72 72 6f  ..^It is an erro
f0c0: 72 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f 74  r to specify bot
f0d0: 68 20 61 20 3c 79 79 74 65 72 6d 3e 73 63 68 65  h a <yyterm>sche
f0e0: 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  ma-name</yyterm>
f0f0: 0a 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b 65  .and the TEMP ke
f100: 79 77 6f 72 64 20 6f 6e 20 61 20 56 49 45 57 2c  yword on a VIEW,
f110: 20 75 6e 6c 65 73 73 20 74 68 65 20 3c 79 79 74   unless the <yyt
f120: 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c  erm>schema-name<
f130: 2f 79 79 74 65 72 6d 3e 20 0a 69 73 20 22 74 65  /yyterm> .is "te
f140: 6d 70 22 2e 0a 5e 49 66 20 6e 6f 20 73 63 68 65  mp"..^If no sche
f150: 6d 61 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69  ma name is speci
f160: 66 69 65 64 2c 20 61 6e 64 20 74 68 65 20 54 45  fied, and the TE
f170: 4d 50 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f  MP keyword is no
f180: 74 20 70 72 65 73 65 6e 74 2c 0a 74 68 65 20 56  t present,.the V
f190: 49 45 57 20 69 73 20 63 72 65 61 74 65 64 20 69  IEW is created i
f1a0: 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
f1b0: 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 59 6f  ase.</p>..<p>^Yo
f1c0: 75 20 63 61 6e 6e 6f 74 20 5b 44 45 4c 45 54 45  u cannot [DELETE
f1d0: 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 20 6f 72 20  ], [INSERT], or 
f1e0: 5b 55 50 44 41 54 45 5d 20 61 20 76 69 65 77 2e  [UPDATE] a view.
f1f0: 20 20 5e 56 69 65 77 73 20 61 72 65 20 72 65 61    ^Views are rea
f200: 64 2d 6f 6e 6c 79 20 0a 69 6e 20 53 51 4c 69 74  d-only .in SQLit
f210: 65 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 69 6e  e.  ^However, in
f220: 20 6d 61 6e 79 20 63 61 73 65 73 20 79 6f 75 20   many cases you 
f230: 63 61 6e 20 75 73 65 20 61 6e 0a 5b 49 4e 53 54  can use an.[INST
f240: 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 5d 20  EAD OF trigger] 
f250: 6f 6e 20 74 68 65 20 76 69 65 77 20 74 6f 20 61  on the view to a
f260: 63 63 6f 6d 70 6c 69 73 68 20 0a 74 68 65 20 73  ccomplish .the s
f270: 61 6d 65 20 74 68 69 6e 67 2e 20 20 5e 56 69 65  ame thing.  ^Vie
f280: 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 0a  ws are removed .
f290: 77 69 74 68 20 74 68 65 20 5b 44 52 4f 50 20 56  with the [DROP V
f2a0: 49 45 57 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70  IEW] command.</p
f2b0: 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20 3c 79 79 74  >..<p>^If a <yyt
f2c0: 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c  erm>column-name<
f2d0: 2f 79 79 74 65 72 6d 3e 20 6c 69 73 74 20 66 6f  /yyterm> list fo
f2e0: 6c 6c 6f 77 73 20 0a 74 68 65 20 3c 79 79 74 65  llows .the <yyte
f2f0: 72 6d 3e 76 69 65 77 2d 6e 61 6d 65 3c 2f 79 79  rm>view-name</yy
f300: 74 65 72 6d 3e 2c 20 74 68 65 6e 20 74 68 61 74  term>, then that
f310: 20 6c 69 73 74 20 64 65 74 65 72 6d 69 6e 65 73   list determines
f320: 0a 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68  .the names of th
f330: 65 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 74 68  e columns for th
f340: 65 20 76 69 65 77 2e 20 20 5e 49 66 20 74 68 65  e view.  ^If the
f350: 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d   <yyterm>column-
f360: 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 6c 69  name</yyterm>.li
f370: 73 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 74  st is omitted, t
f380: 68 65 6e 20 74 68 65 20 6e 61 6d 65 73 20 6f 66  hen the names of
f390: 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20   the columns in 
f3a0: 74 68 65 20 76 69 65 77 20 61 72 65 20 64 65 72  the view are der
f3b0: 69 76 65 64 0a 66 72 6f 6d 20 74 68 65 20 6e 61  ived.from the na
f3c0: 6d 65 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c  mes of the resul
f3d0: 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 69 6e  t-set columns in
f3e0: 20 74 68 65 20 5b 73 65 6c 65 63 74 2d 73 74 6d   the [select-stm
f3f0: 74 5d 2e 0a 4e 6f 74 65 20 74 68 61 74 20 74 68  t]..Note that th
f400: 65 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e  e <yyterm>column
f410: 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 6c  -name</yyterm> l
f420: 69 73 74 20 73 79 6e 74 61 78 20 69 73 20 6f 6e  ist syntax is on
f430: 6c 79 0a 73 75 70 70 6f 72 74 65 64 20 69 6e 20  ly.supported in 
f440: 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 73 20  SQLite versions 
f450: 33 2e 39 2e 30 20 28 5b 64 61 74 65 6f 66 3a 33  3.9.0 ([dateof:3
f460: 2e 39 2e 30 5d 29 20 61 6e 64 20 6c 61 74 65 72  .9.0]) and later
f470: 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
f480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4c0: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
f4d0: 7b 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20  {CREATE VIRTUAL 
f4e0: 54 41 42 4c 45 7d 20 7b 63 72 65 61 74 65 76 74  TABLE} {createvt
f4f0: 61 62 7d 20 7b 7b 43 52 45 41 54 45 20 56 49 52  ab} {{CREATE VIR
f500: 54 55 41 4c 20 54 41 42 4c 45 7d 7d 0a 0a 52 65  TUAL TABLE}}..Re
f510: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
f520: 67 72 61 6d 20 63 72 65 61 74 65 2d 76 69 72 74  gram create-virt
f530: 75 61 6c 2d 74 61 62 6c 65 2d 73 74 6d 74 0a 3c  ual-table-stmt.<
f540: 2f 74 63 6c 3e 0a 0a 3c 70 3e 41 20 5b 76 69 72  /tcl>..<p>A [vir
f550: 74 75 61 6c 20 74 61 62 6c 65 5d 20 69 73 20 61  tual table] is a
f560: 6e 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 61  n interface to a
f570: 6e 20 65 78 74 65 72 6e 61 6c 20 73 74 6f 72 61  n external stora
f580: 67 65 20 6f 72 20 63 6f 6d 70 75 74 61 74 69 6f  ge or computatio
f590: 6e 0a 65 6e 67 69 6e 65 20 74 68 61 74 20 61 70  n.engine that ap
f5a0: 70 65 61 72 73 20 74 6f 20 62 65 20 61 20 74 61  pears to be a ta
f5b0: 62 6c 65 20 62 75 74 20 64 6f 65 73 20 6e 6f 74  ble but does not
f5c0: 20 61 63 74 75 61 6c 6c 79 20 73 74 6f 72 65 20   actually store 
f5d0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69 6e 20 74  information.in t
f5e0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
f5f0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 67 65 6e  .</p>..<p>In gen
f600: 65 72 61 6c 2c 20 79 6f 75 20 63 61 6e 20 64 6f  eral, you can do
f610: 20 61 6e 79 74 68 69 6e 67 20 77 69 74 68 20 61   anything with a
f620: 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 5d   [virtual table]
f630: 20 74 68 61 74 20 63 61 6e 20 62 65 20 64 6f 6e   that can be don
f640: 65 0a 77 69 74 68 20 61 6e 20 6f 72 64 69 6e 61  e.with an ordina
f650: 72 79 20 74 61 62 6c 65 2c 20 65 78 63 65 70 74  ry table, except
f660: 20 74 68 61 74 20 5e 79 6f 75 20 63 61 6e 6e 6f   that ^you canno
f670: 74 20 63 72 65 61 74 65 20 69 6e 64 69 63 65 73  t create indices
f680: 20 6f 72 20 74 72 69 67 67 65 72 73 20 6f 6e 20   or triggers on 
f690: 61 0a 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a.virtual table.
f6a0: 20 20 5e 53 6f 6d 65 20 76 69 72 74 75 61 6c 20    ^Some virtual 
f6b0: 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  table implementa
f6c0: 74 69 6f 6e 73 20 6d 69 67 68 74 20 69 6d 70 6f  tions might impo
f6d0: 73 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a 72 65  se additional.re
f6e0: 73 74 72 69 63 74 69 6f 6e 73 2e 20 20 46 6f 72  strictions.  For
f6f0: 20 65 78 61 6d 70 6c 65 2c 20 6d 61 6e 79 20 76   example, many v
f700: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 61 72  irtual tables ar
f710: 65 20 72 65 61 64 2d 6f 6e 6c 79 2e 3c 2f 70 3e  e read-only.</p>
f720: 0a 0a 3c 70 3e 54 68 65 20 3c 79 79 74 65 72 6d  ..<p>The <yyterm
f730: 3e 6d 6f 64 75 6c 65 2d 6e 61 6d 65 3c 2f 79 79  >module-name</yy
f740: 74 65 72 6d 3e 20 69 73 20 74 68 65 20 6e 61 6d  term> is the nam
f750: 65 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 74  e of an object t
f760: 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 0a 74  hat implements.t
f770: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
f780: 2e 20 20 5e 54 68 65 20 3c 79 79 74 65 72 6d 3e  .  ^The <yyterm>
f790: 6d 6f 64 75 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74  module-name</yyt
f7a0: 65 72 6d 3e 20 6d 75 73 74 20 62 65 20 72 65 67  erm> must be reg
f7b0: 69 73 74 65 72 65 64 20 77 69 74 68 0a 74 68 65  istered with.the
f7c0: 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65   SQLite database
f7d0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 75 73 69 6e   connection usin
f7e0: 67 0a 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74  g.[sqlite3_creat
f7f0: 65 5f 6d 6f 64 75 6c 65 28 29 5d 20 6f 72 20 5b  e_module()] or [
f800: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d  sqlite3_create_m
f810: 6f 64 75 6c 65 5f 76 32 28 29 5d 0a 70 72 69 6f  odule_v2()].prio
f820: 72 20 74 6f 20 69 73 73 75 69 6e 67 20 74 68 65  r to issuing the
f830: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
f840: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e  TABLE statement.
f850: 0a 5e 54 68 65 20 6d 6f 64 75 6c 65 20 74 61 6b  .^The module tak
f860: 65 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  es zero or more 
f870: 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65 64 20  comma-separated 
f880: 61 72 67 75 6d 65 6e 74 73 2e 0a 5e 54 68 65 20  arguments..^The 
f890: 61 72 67 75 6d 65 6e 74 73 20 63 61 6e 20 62 65  arguments can be
f8a0: 20 6a 75 73 74 20 61 62 6f 75 74 20 61 6e 79 20   just about any 
f8b0: 74 65 78 74 20 61 73 20 6c 6f 6e 67 20 61 73 20  text as long as 
f8c0: 69 74 20 68 61 73 20 62 61 6c 61 6e 63 65 64 0a  it has balanced.
f8d0: 70 61 72 65 6e 74 68 65 73 65 73 2e 20 20 54 68  parentheses.  Th
f8e0: 65 20 61 72 67 75 6d 65 6e 74 20 73 79 6e 74 61  e argument synta
f8f0: 78 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 6c  x is sufficientl
f900: 79 20 67 65 6e 65 72 61 6c 20 74 68 61 74 20 74  y general that t
f910: 68 65 0a 61 72 67 75 6d 65 6e 74 73 20 63 61 6e  he.arguments can
f920: 20 62 65 20 6d 61 64 65 20 74 6f 20 61 70 70 65   be made to appe
f930: 61 72 20 61 73 20 5b 63 6f 6c 75 6d 6e 20 64 65  ar as [column de
f940: 66 69 6e 69 74 69 6f 6e 73 5d 20 69 6e 20 61 20  finitions] in a 
f950: 74 72 61 64 69 74 69 6f 6e 61 6c 0a 5b 43 52 45  traditional.[CRE
f960: 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65  ATE TABLE] state
f970: 6d 65 6e 74 2e 20 20 0a 5e 53 51 4c 69 74 65 20  ment.  .^SQLite 
f980: 70 61 73 73 65 73 20 74 68 65 20 6d 6f 64 75 6c  passes the modul
f990: 65 20 61 72 67 75 6d 65 6e 74 73 20 64 69 72 65  e arguments dire
f9a0: 63 74 6c 79 0a 74 6f 20 74 68 65 20 5b 78 43 72  ctly.to the [xCr
f9b0: 65 61 74 65 5d 20 61 6e 64 20 5b 78 43 6f 6e 6e  eate] and [xConn
f9c0: 65 63 74 5d 20 6d 65 74 68 6f 64 73 20 6f 66 20  ect] methods of 
f9d0: 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65  the module imple
f9e0: 6d 65 6e 74 61 74 69 6f 6e 0a 77 69 74 68 6f 75  mentation.withou
f9f0: 74 20 61 6e 79 20 69 6e 74 65 72 70 72 65 74 61  t any interpreta
fa00: 74 69 6f 6e 2e 20 20 49 74 20 69 73 20 74 68 65  tion.  It is the
fa10: 20 72 65 73 70 6f 6e 73 69 62 69 6c 69 74 79 0a   responsibility.
fa20: 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d  of the module im
fa30: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
fa40: 70 61 72 73 65 20 61 6e 64 20 69 6e 74 65 72 70  parse and interp
fa50: 72 65 74 20 69 74 73 20 6f 77 6e 20 61 72 67 75  ret its own argu
fa60: 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ments.</p>..<p>^
fa70: 41 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  A virtual table 
fa80: 69 73 20 64 65 73 74 72 6f 79 65 64 20 75 73 69  is destroyed usi
fa90: 6e 67 20 74 68 65 20 6f 72 64 69 6e 61 72 79 0a  ng the ordinary.
faa0: 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20 73 74 61  [DROP TABLE] sta
fab0: 74 65 6d 65 6e 74 2e 20 20 54 68 65 72 65 20 69  tement.  There i
fac0: 73 20 6e 6f 0a 44 52 4f 50 20 56 49 52 54 55 41  s no.DROP VIRTUA
fad0: 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  L TABLE statemen
fae0: 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  t.</p>..<tcl>.##
faf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb30: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
fb40: 74 69 6f 6e 20 44 45 4c 45 54 45 20 64 65 6c 65  tion DELETE dele
fb50: 74 65 20 7b 44 45 4c 45 54 45 20 2a 44 45 4c 45  te {DELETE *DELE
fb60: 54 45 73 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  TEs}..RecursiveB
fb70: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65 6c  ubbleDiagram del
fb80: 65 74 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ete-stmt.</tcl>.
fb90: 0a 3c 70 3e 54 68 65 20 44 45 4c 45 54 45 20 63  .<p>The DELETE c
fba0: 6f 6d 6d 61 6e 64 20 72 65 6d 6f 76 65 73 20 72  ommand removes r
fbb0: 65 63 6f 72 64 73 20 66 72 6f 6d 20 74 68 65 20  ecords from the 
fbc0: 74 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65 64  table identified
fbd0: 20 62 79 20 74 68 65 0a 20 20 20 5b 71 75 61 6c   by the.   [qual
fbe0: 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65  ified-table-name
fbf0: 5d 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 57  ]...<p>^If the W
fc00: 48 45 52 45 20 63 6c 61 75 73 65 20 69 73 20 6e  HERE clause is n
fc10: 6f 74 20 70 72 65 73 65 6e 74 2c 20 61 6c 6c 20  ot present, all 
fc20: 72 65 63 6f 72 64 73 20 69 6e 20 74 68 65 20 74  records in the t
fc30: 61 62 6c 65 20 61 72 65 20 64 65 6c 65 74 65 64  able are deleted
fc40: 2e 0a 20 20 20 5e 49 66 20 61 20 57 48 45 52 45  ..   ^If a WHERE
fc50: 20 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c   clause is suppl
fc60: 69 65 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74  ied, then only t
fc70: 68 6f 73 65 20 72 6f 77 73 20 66 6f 72 20 77 68  hose rows for wh
fc80: 69 63 68 20 74 68 65 0a 20 20 20 57 48 45 52 45  ich the.   WHERE
fc90: 20 63 6c 61 75 73 65 20 5b 62 6f 6f 6c 65 61 6e   clause [boolean
fca0: 20 65 78 70 72 65 73 73 69 6f 6e 5d 20 69 73 20   expression] is 
fcb0: 74 72 75 65 20 61 72 65 20 64 65 6c 65 74 65 64  true are deleted
fcc0: 2e 0a 20 20 20 5e 52 6f 77 73 20 66 6f 72 20 77  ..   ^Rows for w
fcd0: 68 69 63 68 20 74 68 65 20 65 78 70 72 65 73 73  hich the express
fce0: 69 6f 6e 20 69 73 20 66 61 6c 73 65 20 6f 72 20  ion is false or 
fcf0: 4e 55 4c 4c 20 61 72 65 20 72 65 74 61 69 6e 65  NULL are retaine
fd00: 64 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63 74  d...<h3>Restrict
fd10: 69 6f 6e 73 20 6f 6e 20 44 45 4c 45 54 45 20 53  ions on DELETE S
fd20: 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e  tatements Within
fd30: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 3c   CREATE TRIGGER<
fd40: 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c  /h3>..<p>The fol
fd50: 6c 6f 77 69 6e 67 20 72 65 73 74 72 69 63 74 69  lowing restricti
fd60: 6f 6e 73 20 61 70 70 6c 79 20 74 6f 20 44 45 4c  ons apply to DEL
fd70: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 74  ETE statements t
fd80: 68 61 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e  hat occur within
fd90: 20 74 68 65 0a 20 20 20 62 6f 64 79 20 6f 66 20   the.   body of 
fda0: 61 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  a [CREATE TRIGGE
fdb0: 52 5d 20 73 74 61 74 65 6d 65 6e 74 3a 0a 0a 3c  R] statement:..<
fdc0: 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68  ul>.  <li><p>^Th
fdd0: 65 20 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d  e <yyterm>table-
fde0: 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 73 70  name</yyterm> sp
fdf0: 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
fe00: 6f 66 20 61 20 0a 20 20 20 20 44 45 4c 45 54 45  of a .    DELETE
fe10: 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68 69   statement withi
fe20: 6e 0a 20 20 20 20 61 20 74 72 69 67 67 65 72 20  n.    a trigger 
fe30: 62 6f 64 79 20 6d 75 73 74 20 62 65 20 75 6e 71  body must be unq
fe40: 75 61 6c 69 66 69 65 64 2e 20 20 5e 28 49 6e 20  ualified.  ^(In 
fe50: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
fe60: 0a 20 20 20 20 3c 69 3e 73 63 68 65 6d 61 2d 6e  .    <i>schema-n
fe70: 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20  ame</i><b>.</b> 
fe80: 70 72 65 66 69 78 20 6f 6e 20 74 68 65 20 74 61  prefix on the ta
fe90: 62 6c 65 20 6e 61 6d 65 20 69 73 20 6e 6f 74 20  ble name is not 
fea0: 61 6c 6c 6f 77 65 64 20 0a 20 20 20 20 77 69 74  allowed .    wit
feb0: 68 69 6e 20 74 72 69 67 67 65 72 73 2e 29 5e 20  hin triggers.)^ 
fec0: 5e 49 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f  ^If the table to
fed0: 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67   which the trigg
fee0: 65 72 20 69 73 20 61 74 74 61 63 68 65 64 20 69  er is attached i
fef0: 73 0a 20 20 20 20 6e 6f 74 20 69 6e 20 74 68 65  s.    not in the
ff00: 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 2c 20   temp database, 
ff10: 74 68 65 6e 20 44 45 4c 45 54 45 20 73 74 61 74  then DELETE stat
ff20: 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 68  ements within th
ff30: 65 20 74 72 69 67 67 65 72 0a 20 20 20 20 62 6f  e trigger.    bo
ff40: 64 79 20 6d 75 73 74 20 6f 70 65 72 61 74 65 20  dy must operate 
ff50: 6f 6e 20 74 61 62 6c 65 73 20 77 69 74 68 69 6e  on tables within
ff60: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
ff70: 73 65 20 61 73 20 69 74 2e 20 5e 49 66 20 74 68  se as it. ^If th
ff80: 65 20 74 61 62 6c 65 0a 20 20 20 20 74 6f 20 77  e table.    to w
ff90: 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
ffa0: 20 69 73 20 61 74 74 61 63 68 65 64 20 69 73 20   is attached is 
ffb0: 69 6e 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  in the TEMP data
ffc0: 62 61 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 20  base, then the. 
ffd0: 20 20 20 75 6e 71 75 61 6c 69 66 69 65 64 20 6e     unqualified n
ffe0: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
fff0: 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64 20 69   being deleted i
10000 73 20 72 65 73 6f 6c 76 65 64 20 69 6e 20 74 68  s resolved in th
10010 65 20 73 61 6d 65 20 77 61 79 20 61 73 0a 20 20  e same way as.  
10020 20 20 69 74 20 69 73 20 66 6f 72 20 61 20 74 6f    it is for a to
10030 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d 65 6e  p-level statemen
10040 74 20 28 62 79 20 73 65 61 72 63 68 69 6e 67 20  t (by searching 
10050 66 69 72 73 74 20 74 68 65 20 54 45 4d 50 20 64  first the TEMP d
10060 61 74 61 62 61 73 65 2c 20 74 68 65 6e 0a 20 20  atabase, then.  
10070 20 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62    the main datab
10080 61 73 65 2c 20 74 68 65 6e 20 61 6e 79 20 6f 74  ase, then any ot
10090 68 65 72 20 64 61 74 61 62 61 73 65 73 20 69 6e  her databases in
100a0 20 74 68 65 20 6f 72 64 65 72 20 74 68 65 79 20   the order they 
100b0 77 65 72 65 0a 20 20 20 20 61 74 74 61 63 68 65  were.    attache
100c0 64 29 2e 0a 20 20 20 20 0a 20 20 3c 6c 69 3e 3c  d)..    .  <li><
100d0 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42  p>^The INDEXED B
100e0 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45  Y and NOT INDEXE
100f0 44 20 63 6c 61 75 73 65 73 20 61 72 65 20 6e 6f  D clauses are no
10100 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 44 45 4c  t allowed on DEL
10110 45 54 45 0a 20 20 20 20 73 74 61 74 65 6d 65 6e  ETE.    statemen
10120 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ts within trigge
10130 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c  rs.</p>..  <li><
10140 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20 61 6e 64  p>^The LIMIT and
10150 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
10160 73 20 28 64 65 73 63 72 69 62 65 64 20 62 65 6c  s (described bel
10170 6f 77 29 20 61 72 65 20 75 6e 73 75 70 70 6f 72  ow) are unsuppor
10180 74 65 64 20 66 6f 72 0a 20 20 20 20 44 45 4c 45  ted for.    DELE
10190 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  TE statements wi
101a0 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f  thin triggers.</
101b0 70 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70  p>.</ul>..<h3>Op
101c0 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 61 6e 64  tional LIMIT and
101d0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
101e0 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20  s</h3>..<p>^(If 
101f0 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c  SQLite is compil
10200 65 64 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c  ed with the [SQL
10210 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54  ITE_ENABLE_UPDAT
10220 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a  E_DELETE_LIMIT].
10230 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
10240 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 73 79  ion, then the sy
10250 6e 74 61 78 20 6f 66 20 74 68 65 20 44 45 4c 45  ntax of the DELE
10260 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 0a  TE statement is.
10270 65 78 74 65 6e 64 65 64 20 62 79 20 74 68 65 20  extended by the 
10280 61 64 64 69 74 69 6f 6e 20 6f 66 20 6f 70 74 69  addition of opti
10290 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59 20 61 6e  onal ORDER BY an
102a0 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 3a  d LIMIT clauses:
102b0 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62  )^</p>..<tcl>Bub
102c0 62 6c 65 44 69 61 67 72 61 6d 20 64 65 6c 65 74  bleDiagram delet
102d0 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f  e-stmt-limited</
102e0 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20 44  tcl>..<p>^If a D
102f0 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
10300 68 61 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75  has a LIMIT clau
10310 73 65 2c 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  se, the maximum 
10320 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74  number of rows t
10330 68 61 74 0a 77 69 6c 6c 20 62 65 20 64 65 6c 65  hat.will be dele
10340 74 65 64 20 69 73 20 66 6f 75 6e 64 20 62 79 20  ted is found by 
10350 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61  evaluating the a
10360 63 63 6f 6d 70 61 6e 79 69 6e 67 20 65 78 70 72  ccompanying expr
10370 65 73 73 69 6f 6e 20 61 6e 64 20 63 61 73 74 69  ession and casti
10380 6e 67 0a 69 74 20 74 6f 20 61 6e 20 69 6e 74 65  ng.it to an inte
10390 67 65 72 20 76 61 6c 75 65 2e 20 5e 49 66 20 74  ger value. ^If t
103a0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
103b0 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
103c0 4c 49 4d 49 54 20 63 6c 61 75 73 65 0a 63 61 6e  LIMIT clause.can
103d0 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c  not be losslessl
103e0 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61  y converted to a
103f0 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2c  n integer value,
10400 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e   it is an error.
10410 20 5e 41 20 0a 6e 65 67 61 74 69 76 65 20 4c 49   ^A .negative LI
10420 4d 49 54 20 76 61 6c 75 65 20 69 73 20 69 6e 74  MIT value is int
10430 65 72 70 72 65 74 65 64 20 61 73 20 22 6e 6f 20  erpreted as "no 
10440 6c 69 6d 69 74 22 2e 20 5e 28 49 66 20 74 68 65  limit". ^(If the
10450 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
10460 74 20 0a 61 6c 73 6f 20 68 61 73 20 61 6e 20 4f  t .also has an O
10470 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20 74 68  FFSET clause, th
10480 65 6e 20 69 74 20 69 73 20 73 69 6d 69 6c 61 72  en it is similar
10490 6c 79 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64  ly evaluated and
104a0 20 63 61 73 74 20 74 6f 20 61 6e 0a 69 6e 74 65   cast to an.inte
104b0 67 65 72 20 76 61 6c 75 65 2e 20 41 67 61 69 6e  ger value. Again
104c0 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72  , it is an error
104d0 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 63 61   if the value ca
104e0 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73  nnot be lossless
104f0 6c 79 0a 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  ly.converted to 
10500 61 6e 20 69 6e 74 65 67 65 72 2e 29 5e 20 5e 49  an integer.)^ ^I
10510 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 46  f there is no OF
10520 46 53 45 54 20 63 6c 61 75 73 65 2c 20 6f 72 20  FSET clause, or 
10530 74 68 65 20 63 61 6c 63 75 6c 61 74 65 64 0a 69  the calculated.i
10540 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 73 20  nteger value is 
10550 6e 65 67 61 74 69 76 65 2c 20 74 68 65 20 65 66  negative, the ef
10560 66 65 63 74 69 76 65 20 4f 46 46 53 45 54 20 76  fective OFFSET v
10570 61 6c 75 65 20 69 73 20 7a 65 72 6f 2e 0a 0a 3c  alue is zero...<
10580 70 3e 5e 28 49 66 20 74 68 65 20 44 45 4c 45 54  p>^(If the DELET
10590 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  E statement has 
105a0 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  an ORDER BY clau
105b0 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77  se, then all row
105c0 73 20 74 68 61 74 20 77 6f 75 6c 64 20 0a 62 65  s that would .be
105d0 20 64 65 6c 65 74 65 64 20 69 6e 20 74 68 65 20   deleted in the 
105e0 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c  absence of the L
105f0 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72 65 20  IMIT clause are 
10600 73 6f 72 74 65 64 20 61 63 63 6f 72 64 69 6e 67  sorted according
10610 20 74 6f 20 74 68 65 20 0a 4f 52 44 45 52 20 42   to the .ORDER B
10620 59 2e 20 54 68 65 20 66 69 72 73 74 20 3c 69 3e  Y. The first <i>
10630 4d 3c 2f 69 3e 20 72 6f 77 73 2c 20 77 68 65 72  M</i> rows, wher
10640 65 20 3c 69 3e 4d 3c 2f 69 3e 20 69 73 20 74 68  e <i>M</i> is th
10650 65 20 76 61 6c 75 65 20 66 6f 75 6e 64 20 62 79  e value found by
10660 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20  .evaluating the 
10670 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20 65 78  OFFSET clause ex
10680 70 72 65 73 73 69 6f 6e 2c 20 61 72 65 20 73 6b  pression, are sk
10690 69 70 70 65 64 2c 20 61 6e 64 20 74 68 65 20 66  ipped, and the f
106a0 6f 6c 6c 6f 77 69 6e 67 20 0a 3c 69 3e 4e 3c 2f  ollowing .<i>N</
106b0 69 3e 2c 20 77 68 65 72 65 20 3c 69 3e 4e 3c 2f  i>, where <i>N</
106c0 69 3e 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  i> is the value 
106d0 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70  of the LIMIT exp
106e0 72 65 73 73 69 6f 6e 2c 20 61 72 65 20 64 65 6c  ression, are del
106f0 65 74 65 64 2e 29 5e 0a 5e 49 66 20 74 68 65 72  eted.)^.^If ther
10700 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  e are less than 
10710 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 72 65  <i>N</i> rows re
10720 6d 61 69 6e 69 6e 67 20 61 66 74 65 72 20 74 61  maining after ta
10730 6b 69 6e 67 20 74 68 65 20 4f 46 46 53 45 54 20  king the OFFSET 
10740 63 6c 61 75 73 65 0a 69 6e 74 6f 20 61 63 63 6f  clause.into acco
10750 75 6e 74 2c 20 6f 72 20 69 66 20 74 68 65 20 4c  unt, or if the L
10760 49 4d 49 54 20 63 6c 61 75 73 65 20 65 76 61 6c  IMIT clause eval
10770 75 61 74 65 64 20 74 6f 20 61 20 6e 65 67 61 74  uated to a negat
10780 69 76 65 20 76 61 6c 75 65 2c 20 74 68 65 6e 20  ive value, then 
10790 61 6c 6c 0a 72 65 6d 61 69 6e 69 6e 67 20 72 6f  all.remaining ro
107a0 77 73 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a  ws are deleted..
107b0 0a 3c 70 3e 5e 49 66 20 74 68 65 20 44 45 4c 45  .<p>^If the DELE
107c0 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73  TE statement has
107d0 20 6e 6f 20 4f 52 44 45 52 20 42 59 20 63 6c 61   no ORDER BY cla
107e0 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f  use, then all ro
107f0 77 73 20 74 68 61 74 0a 77 6f 75 6c 64 20 62 65  ws that.would be
10800 20 64 65 6c 65 74 65 64 20 69 6e 20 74 68 65 20   deleted in the 
10810 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c  absence of the L
10820 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72 65 20  IMIT clause are 
10830 61 73 73 65 6d 62 6c 65 64 20 69 6e 20 61 6e 0a  assembled in an.
10840 61 72 62 69 74 72 61 72 79 20 6f 72 64 65 72 20  arbitrary order 
10850 62 65 66 6f 72 65 20 61 70 70 6c 79 69 6e 67 20  before applying 
10860 74 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46  the LIMIT and OF
10870 46 53 45 54 20 63 6c 61 75 73 65 73 20 74 6f 20  FSET clauses to 
10880 64 65 74 65 72 6d 69 6e 65 20 0a 74 68 65 20 73  determine .the s
10890 75 62 73 65 74 20 74 68 61 74 20 61 72 65 20 61  ubset that are a
108a0 63 74 75 61 6c 6c 79 20 64 65 6c 65 74 65 64 2e  ctually deleted.
108b0 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52 44 45 52  ..<p>^(The ORDER
108c0 20 42 59 20 63 6c 61 75 73 65 20 6f 6e 20 61 20   BY clause on a 
108d0 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
108e0 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f   is used only to
108f0 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68   determine which
10900 0a 72 6f 77 73 20 66 61 6c 6c 20 77 69 74 68 69  .rows fall withi
10910 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20 54 68 65  n the LIMIT. The
10920 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20   order in which 
10930 72 6f 77 73 20 61 72 65 20 64 65 6c 65 74 65 64  rows are deleted
10940 20 69 73 20 61 72 62 69 74 72 61 72 79 0a 61 6e   is arbitrary.an
10950 64 20 69 73 20 6e 6f 74 20 69 6e 66 6c 75 65 6e  d is not influen
10960 63 65 64 20 62 79 20 74 68 65 20 4f 52 44 45 52  ced by the ORDER
10970 20 42 59 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c   BY clause.)^..<
10980 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
10990 74 72 75 6e 63 61 74 65 6f 70 74 20 7b 74 72 75  truncateopt {tru
109a0 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69  ncate optimizati
109b0 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  on}</tcl>.<h3>Th
109c0 65 20 54 72 75 6e 63 61 74 65 20 4f 70 74 69 6d  e Truncate Optim
109d0 69 7a 61 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70  ization</h3>..<p
109e0 3e 5e 57 68 65 6e 20 74 68 65 20 57 48 45 52 45  >^When the WHERE
109f0 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
10a00 20 61 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d   a DELETE statem
10a10 65 6e 74 20 61 6e 64 20 74 68 65 20 74 61 62 6c  ent and the tabl
10a20 65 0a 62 65 69 6e 67 20 64 65 6c 65 74 65 64 20  e.being deleted 
10a30 68 61 73 20 6e 6f 20 74 72 69 67 67 65 72 73 2c  has no triggers,
10a40 0a 53 51 4c 69 74 65 20 75 73 65 73 20 61 6e 20  .SQLite uses an 
10a50 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 74 6f 20  optimization to 
10a60 65 72 61 73 65 20 74 68 65 20 65 6e 74 69 72 65  erase the entire
10a70 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74 0a 77   table content.w
10a80 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f  ithout having to
10a90 20 76 69 73 69 74 20 65 61 63 68 20 72 6f 77 20   visit each row 
10aa0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69 6e 64  of the table ind
10ab0 69 76 69 64 75 61 6c 6c 79 2e 0a 54 68 69 73 20  ividually..This 
10ac0 22 74 72 75 6e 63 61 74 65 22 20 6f 70 74 69 6d  "truncate" optim
10ad0 69 7a 61 74 69 6f 6e 20 6d 61 6b 65 73 20 74 68  ization makes th
10ae0 65 20 64 65 6c 65 74 65 20 72 75 6e 20 6d 75 63  e delete run muc
10af0 68 20 66 61 73 74 65 72 2e 0a 50 72 69 6f 72 20  h faster..Prior 
10b00 74 6f 20 53 51 4c 69 74 65 20 5b 76 65 72 73 69  to SQLite [versi
10b10 6f 6e 20 33 2e 36 2e 35 5d 20 28 5b 64 61 74 65  on 3.6.5] ([date
10b20 6f 66 3a 33 2e 36 2e 35 5d 29 2c 20 74 68 65 20  of:3.6.5]), the 
10b30 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a  truncate optimiz
10b40 61 74 69 6f 6e 0a 61 6c 73 6f 20 6d 65 61 6e 74  ation.also meant
10b50 20 74 68 61 74 20 74 68 65 20 5b 73 71 6c 69 74   that the [sqlit
10b60 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 20 61 6e  e3_changes()] an
10b70 64 0a 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c  d.[sqlite3_total
10b80 5f 63 68 61 6e 67 65 73 28 29 5d 20 69 6e 74 65  _changes()] inte
10b90 72 66 61 63 65 73 0a 61 6e 64 20 74 68 65 20 5b  rfaces.and the [
10ba0 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20 70 72  count_changes pr
10bb0 61 67 6d 61 5d 0a 77 69 6c 6c 20 6e 6f 74 20 61  agma].will not a
10bc0 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 74  ctually return t
10bd0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 6c  he number of del
10be0 65 74 65 64 20 72 6f 77 73 2e 20 20 0a 54 68 61  eted rows.  .Tha
10bf0 74 20 70 72 6f 62 6c 65 6d 20 68 61 73 20 62 65  t problem has be
10c00 65 6e 20 66 69 78 65 64 20 61 73 20 6f 66 20 5b  en fixed as of [
10c10 76 65 72 73 69 6f 6e 20 33 2e 36 2e 35 5d 20 28  version 3.6.5] (
10c20 5b 64 61 74 65 6f 66 3a 33 2e 36 2e 35 5d 29 2e  [dateof:3.6.5]).
10c30 0a 0a 3c 70 3e 5e 54 68 65 20 74 72 75 6e 63 61  ..<p>^The trunca
10c40 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  te optimization 
10c50 63 61 6e 20 62 65 20 70 65 72 6d 61 6e 65 6e 74  can be permanent
10c60 6c 79 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20  ly disabled for 
10c70 61 6c 6c 20 71 75 65 72 69 65 73 0a 62 79 20 72  all queries.by r
10c80 65 63 6f 6d 70 69 6c 69 6e 67 0a 53 51 4c 69 74  ecompiling.SQLit
10c90 65 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49  e with the [SQLI
10ca0 54 45 5f 4f 4d 49 54 5f 54 52 55 4e 43 41 54 45  TE_OMIT_TRUNCATE
10cb0 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 5d 20 63  _OPTIMIZATION] c
10cc0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 73 77 69 74  ompile-time swit
10cd0 63 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ch.</p>..<p>The 
10ce0 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a  truncate optimiz
10cf0 61 74 69 6f 6e 20 63 61 6e 20 61 6c 73 6f 20 62  ation can also b
10d00 65 20 64 69 73 61 62 6c 65 64 20 61 74 20 72 75  e disabled at ru
10d10 6e 74 69 6d 65 20 75 73 69 6e 67 0a 74 68 65 20  ntime using.the 
10d20 5b 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 74  [sqlite3_set_aut
10d30 68 6f 72 69 7a 65 72 28 29 5d 20 69 6e 74 65 72  horizer()] inter
10d40 66 61 63 65 2e 20 20 5e 49 66 20 61 6e 20 61 75  face.  ^If an au
10d50 74 68 6f 72 69 7a 65 72 20 63 61 6c 6c 62 61 63  thorizer callbac
10d60 6b 0a 72 65 74 75 72 6e 73 20 5b 53 51 4c 49 54  k.returns [SQLIT
10d70 45 5f 49 47 4e 4f 52 45 5d 20 66 6f 72 20 61 6e  E_IGNORE] for an
10d80 20 5b 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 5d   [SQLITE_DELETE]
10d90 20 61 63 74 69 6f 6e 20 63 6f 64 65 2c 20 74 68   action code, th
10da0 65 6e 0a 74 68 65 20 44 45 4c 45 54 45 20 6f 70  en.the DELETE op
10db0 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 70 72 6f  eration will pro
10dc0 63 65 65 64 20 62 75 74 20 74 68 65 20 74 72 75  ceed but the tru
10dd0 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69  ncate optimizati
10de0 6f 6e 20 77 69 6c 6c 0a 62 65 20 62 79 70 61 73  on will.be bypas
10df0 73 65 64 20 61 6e 64 20 72 6f 77 73 20 77 69 6c  sed and rows wil
10e00 6c 20 62 65 20 64 65 6c 65 74 65 64 20 6f 6e 65  l be deleted one
10e10 20 62 79 20 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 74   by one.</p>..<t
10e20 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
10e30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e70 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 45 54  ###.Section {DET
10e80 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64 65  ACH DATABASE} de
10e90 74 61 63 68 20 2a 44 45 54 41 43 48 0a 0a 52 65  tach *DETACH..Re
10ea0 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
10eb0 67 72 61 6d 20 64 65 74 61 63 68 2d 73 74 6d 74  gram detach-stmt
10ec0 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 69  .</tcl>..<p>^Thi
10ed0 73 20 73 74 61 74 65 6d 65 6e 74 20 64 65 74 61  s statement deta
10ee0 63 68 65 73 20 61 6e 20 61 64 64 69 74 69 6f 6e  ches an addition
10ef0 61 6c 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  al database conn
10f00 65 63 74 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c  ection previousl
10f10 79 20 0a 61 74 74 61 63 68 65 64 20 75 73 69 6e  y .attached usin
10f20 67 20 74 68 65 20 5b 41 54 54 41 43 48 5d 20 73  g the [ATTACH] s
10f30 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 57 68 65  tatement.  .^Whe
10f40 6e 20 6e 6f 74 20 69 6e 20 5b 73 68 61 72 65 64  n not in [shared
10f50 20 63 61 63 68 65 20 6d 6f 64 65 5d 2c 20 0a 69   cache mode], .i
10f60 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 6f  t is possible to
10f70 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 64   have the same d
10f80 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 74 74  atabase file att
10f90 61 63 68 65 64 20 6d 75 6c 74 69 70 6c 65 20 74  ached multiple t
10fa0 69 6d 65 73 20 75 73 69 6e 67 20 0a 64 69 66 66  imes using .diff
10fb0 65 72 65 6e 74 20 6e 61 6d 65 73 2c 20 61 6e 64  erent names, and
10fc0 20 64 65 74 61 63 68 69 6e 67 20 6f 6e 65 20 63   detaching one c
10fd0 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20 66  onnection to a f
10fe0 69 6c 65 20 77 69 6c 6c 20 6c 65 61 76 65 20 74  ile will leave t
10ff0 68 65 20 0a 6f 74 68 65 72 73 20 69 6e 74 61 63  he .others intac
11000 74 2e 3c 2f 70 3e 0a 5e 49 6e 20 5b 73 68 61 72  t.</p>.^In [shar
11010 65 64 20 63 61 63 68 65 20 6d 6f 64 65 5d 2c 20  ed cache mode], 
11020 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 61 74  attempting to at
11030 74 61 63 68 20 74 68 65 20 73 61 6d 65 20 64 61  tach the same da
11040 74 61 62 61 73 65 20 66 69 6c 65 20 6d 6f 72 65  tabase file more
11050 0a 74 68 61 6e 20 6f 6e 63 65 20 72 65 73 75 6c  .than once resul
11060 74 73 20 69 6e 20 61 6e 20 65 72 72 6f 72 2e 0a  ts in an error..
11070 0a 3c 70 3e 5e 54 68 69 73 20 73 74 61 74 65 6d  .<p>^This statem
11080 65 6e 74 20 77 69 6c 6c 20 66 61 69 6c 20 69 66  ent will fail if
11090 20 53 51 4c 69 74 65 20 69 73 20 69 6e 20 74 68   SQLite is in th
110a0 65 20 6d 69 64 64 6c 65 20 6f 66 20 61 20 74 72  e middle of a tr
110b0 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a  ansaction.</p>..
110c0 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
110d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
110e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
110f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11100 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11110 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
11120 52 4f 50 20 49 4e 44 45 58 7d 20 64 72 6f 70 69  ROP INDEX} dropi
11130 6e 64 65 78 20 7b 7b 44 52 4f 50 20 49 4e 44 45  ndex {{DROP INDE
11140 58 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  X}}..RecursiveBu
11150 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f 70  bbleDiagram drop
11160 2d 69 6e 64 65 78 2d 73 74 6d 74 0a 3c 2f 74 63  -index-stmt.</tc
11170 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50  l>..<p>^The DROP
11180 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74   INDEX statement
11190 20 72 65 6d 6f 76 65 73 20 61 6e 20 69 6e 64 65   removes an inde
111a0 78 20 61 64 64 65 64 0a 77 69 74 68 20 74 68 65  x added.with the
111b0 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20   [CREATE INDEX] 
111c0 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20  statement.  The 
111d0 69 6e 64 65 78 20 69 73 20 63 6f 6d 70 6c 65 74  index is complet
111e0 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d  ely removed from
111f0 0a 74 68 65 20 64 69 73 6b 2e 20 20 54 68 65 20  .the disk.  The 
11200 6f 6e 6c 79 20 77 61 79 20 74 6f 20 72 65 63 6f  only way to reco
11210 76 65 72 20 74 68 65 20 69 6e 64 65 78 20 69 73  ver the index is
11220 20 74 6f 20 72 65 65 6e 74 65 72 20 74 68 65 0a   to reenter the.
11230 61 70 70 72 6f 70 72 69 61 74 65 20 5b 43 52 45  appropriate [CRE
11240 41 54 45 20 49 4e 44 45 58 5d 20 63 6f 6d 6d 61  ATE INDEX] comma
11250 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  nd.</p>..<tcl>.#
11260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
112a0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
112b0 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54 41 42 4c  ction {DROP TABL
112c0 45 7d 20 64 72 6f 70 74 61 62 6c 65 20 7b 7b 44  E} droptable {{D
112d0 52 4f 50 20 54 41 42 4c 45 7d 7d 0a 0a 52 65 63  ROP TABLE}}..Rec
112e0 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
112f0 72 61 6d 20 64 72 6f 70 2d 74 61 62 6c 65 2d 73  ram drop-table-s
11300 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tmt.</tcl>..<p>^
11310 54 68 65 20 44 52 4f 50 20 54 41 42 4c 45 20 73  The DROP TABLE s
11320 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73  tatement removes
11330 20 61 20 74 61 62 6c 65 20 61 64 64 65 64 20 77   a table added w
11340 69 74 68 20 74 68 65 0a 5b 43 52 45 41 54 45 20  ith the.[CREATE 
11350 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
11360 2e 20 20 54 68 65 20 6e 61 6d 65 20 73 70 65 63  .  The name spec
11370 69 66 69 65 64 20 69 73 20 74 68 65 0a 74 61 62  ified is the.tab
11380 6c 65 20 6e 61 6d 65 2e 20 20 5e 54 68 65 20 64  le name.  ^The d
11390 72 6f 70 70 65 64 20 74 61 62 6c 65 20 69 73 20  ropped table is 
113a0 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f 76  completely remov
113b0 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ed from the data
113c0 62 61 73 65 20 0a 73 63 68 65 6d 61 20 61 6e 64  base .schema and
113d0 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 2e 20   the disk file. 
113e0 20 54 68 65 20 74 61 62 6c 65 20 63 61 6e 20 6e   The table can n
113f0 6f 74 20 62 65 20 72 65 63 6f 76 65 72 65 64 2e  ot be recovered.
11400 20 20 0a 5e 41 6c 6c 20 69 6e 64 69 63 65 73 20    .^All indices 
11410 61 6e 64 20 74 72 69 67 67 65 72 73 0a 61 73 73  and triggers.ass
11420 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
11430 20 74 61 62 6c 65 20 61 72 65 20 61 6c 73 6f 20   table are also 
11440 64 65 6c 65 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  deleted.</p>..<p
11450 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 49  >^The optional I
11460 46 20 45 58 49 53 54 53 20 63 6c 61 75 73 65 20  F EXISTS clause 
11470 73 75 70 70 72 65 73 73 65 73 20 74 68 65 20 65  suppresses the e
11480 72 72 6f 72 20 74 68 61 74 20 77 6f 75 6c 64 20  rror that would 
11490 6e 6f 72 6d 61 6c 6c 79 0a 72 65 73 75 6c 74 20  normally.result 
114a0 69 66 20 74 68 65 20 74 61 62 6c 65 20 64 6f 65  if the table doe
114b0 73 20 6e 6f 74 20 65 78 69 73 74 2e 3c 2f 70 3e  s not exist.</p>
114c0 0a 0a 3c 70 3e 5e 49 66 20 5b 66 6f 72 65 69 67  ..<p>^If [foreig
114d0 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
114e0 73 5d 20 61 72 65 20 65 6e 61 62 6c 65 64 2c 20  s] are enabled, 
114f0 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63 6f 6d  a DROP TABLE com
11500 6d 61 6e 64 20 70 65 72 66 6f 72 6d 73 20 61 6e  mand performs an
11510 0a 69 6d 70 6c 69 63 69 74 20 5b 44 45 4c 45 54  .implicit [DELET
11520 45 20 7c 20 44 45 4c 45 54 45 20 46 52 4f 4d 5d  E | DELETE FROM]
11530 20 63 6f 6d 6d 61 6e 64 20 62 65 66 6f 72 65 20   command before 
11540 72 65 6d 6f 76 69 6e 67 20 74 68 65 0a 74 61 62  removing the.tab
11550 6c 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  le from the data
11560 62 61 73 65 20 73 63 68 65 6d 61 2e 20 5e 41 6e  base schema. ^An
11570 79 20 74 72 69 67 67 65 72 73 20 61 74 74 61 63  y triggers attac
11580 68 65 64 20 74 6f 20 74 68 65 20 74 61 62 6c 65  hed to the table
11590 20 61 72 65 0a 64 72 6f 70 70 65 64 20 66 72 6f   are.dropped fro
115a0 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  m the database s
115b0 63 68 65 6d 61 20 62 65 66 6f 72 65 20 74 68 65  chema before the
115c0 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45 54 45   implicit DELETE
115d0 20 46 52 4f 4d 0a 69 73 20 65 78 65 63 75 74 65   FROM.is execute
115e0 64 2c 20 73 6f 20 74 68 69 73 20 63 61 6e 6e 6f  d, so this canno
115f0 74 20 63 61 75 73 65 20 61 6e 79 20 74 72 69 67  t cause any trig
11600 67 65 72 73 20 74 6f 20 66 69 72 65 2e 20 42 79  gers to fire. By
11610 20 63 6f 6e 74 72 61 73 74 2c 20 5e 61 6e 0a 69   contrast, ^an.i
11620 6d 70 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46  mplicit DELETE F
11630 52 4f 4d 20 64 6f 65 73 20 63 61 75 73 65 20 61  ROM does cause a
11640 6e 79 20 63 6f 6e 66 69 67 75 72 65 64 0a 5b 66  ny configured.[f
11650 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f  oreign key actio
11660 6e 73 5d 20 74 6f 20 74 61 6b 65 20 70 6c 61 63  ns] to take plac
11670 65 2e 20 0a 5e 49 66 20 74 68 65 20 69 6d 70 6c  e. .^If the impl
11680 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f 4d  icit DELETE FROM
11690 20 65 78 65 63 75 74 65 64 0a 61 73 20 70 61 72   executed.as par
116a0 74 20 6f 66 20 61 20 44 52 4f 50 20 54 41 42 4c  t of a DROP TABL
116b0 45 20 63 6f 6d 6d 61 6e 64 20 76 69 6f 6c 61 74  E command violat
116c0 65 73 20 61 6e 79 20 69 6d 6d 65 64 69 61 74 65  es any immediate
116d0 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
116e0 73 74 72 61 69 6e 74 73 2c 0a 61 6e 20 65 72 72  straints,.an err
116f0 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 61  or is returned a
11700 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  nd the table is 
11710 6e 6f 74 20 64 72 6f 70 70 65 64 2e 20 5e 49 66  not dropped. ^If
11720 20 0a 74 68 65 20 69 6d 70 6c 69 63 69 74 20 44   .the implicit D
11730 45 4c 45 54 45 20 46 52 4f 4d 20 63 61 75 73 65  ELETE FROM cause
11740 73 20 61 6e 79 20 0a 64 65 66 65 72 72 65 64 20  s any .deferred 
11750 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
11760 74 72 61 69 6e 74 73 20 74 6f 20 62 65 20 76 69  traints to be vi
11770 6f 6c 61 74 65 64 2c 20 61 6e 64 20 74 68 65 20  olated, and the 
11780 76 69 6f 6c 61 74 69 6f 6e 73 20 73 74 69 6c 6c  violations still
11790 0a 65 78 69 73 74 20 77 68 65 6e 20 74 68 65 20  .exist when the 
117a0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 63  transaction is c
117b0 6f 6d 6d 69 74 74 65 64 2c 20 61 6e 20 65 72 72  ommitted, an err
117c0 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 61  or is returned a
117d0 74 20 74 68 65 20 74 69 6d 65 0a 6f 66 20 63 6f  t the time.of co
117e0 6d 6d 69 74 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  mmit...<tcl>.###
117f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11800 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11810 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11830 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
11840 69 6f 6e 20 7b 44 52 4f 50 20 54 52 49 47 47 45  ion {DROP TRIGGE
11850 52 7d 20 64 72 6f 70 74 72 69 67 67 65 72 20 7b  R} droptrigger {
11860 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d 7d 0a  {DROP TRIGGER}}.
11870 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
11880 44 69 61 67 72 61 6d 20 64 72 6f 70 2d 74 72 69  Diagram drop-tri
11890 67 67 65 72 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  gger-stmt.</tcl>
118a0 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50 20 54  ..<p>^The DROP T
118b0 52 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74  RIGGER statement
118c0 20 72 65 6d 6f 76 65 73 20 61 20 74 72 69 67 67   removes a trigg
118d0 65 72 20 63 72 65 61 74 65 64 20 62 79 20 74 68  er created by th
118e0 65 20 0a 5b 43 52 45 41 54 45 20 54 52 49 47 47  e .[CREATE TRIGG
118f0 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e  ER] statement. ^
11900 4f 6e 63 65 20 72 65 6d 6f 76 65 64 2c 20 74 68  Once removed, th
11910 65 20 74 72 69 67 67 65 72 20 64 65 66 69 6e 69  e trigger defini
11920 74 69 6f 6e 20 69 73 20 6e 6f 0a 6c 6f 6e 67 65  tion is no.longe
11930 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  r present in the
11940 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 28   sqlite_master (
11950 6f 72 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  or sqlite_temp_m
11960 61 73 74 65 72 29 20 74 61 62 6c 65 20 61 6e 64  aster) table and
11970 20 69 73 0a 6e 6f 74 20 66 69 72 65 64 20 62 79   is.not fired by
11980 20 61 6e 79 20 73 75 62 73 65 71 75 65 6e 74 20   any subsequent 
11990 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f  INSERT, UPDATE o
119a0 72 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  r DELETE stateme
119b0 6e 74 73 2e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74  nts...<p>^Note t
119c0 68 61 74 20 74 72 69 67 67 65 72 73 20 61 72 65  hat triggers are
119d0 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64   automatically d
119e0 72 6f 70 70 65 64 20 77 68 65 6e 20 74 68 65 20  ropped when the 
119f0 61 73 73 6f 63 69 61 74 65 64 20 74 61 62 6c 65  associated table
11a00 20 69 73 0a 64 72 6f 70 70 65 64 2e 0a 0a 3c 74   is.dropped...<t
11a10 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
11a20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a60 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50  ##.Section {DROP
11a70 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65 77 20   VIEW} dropview 
11a80 7b 7b 44 52 4f 50 20 56 49 45 57 7d 7d 0a 0a 52  {{DROP VIEW}}..R
11a90 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
11aa0 61 67 72 61 6d 20 64 72 6f 70 2d 76 69 65 77 2d  agram drop-view-
11ab0 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
11ac0 5e 54 68 65 20 44 52 4f 50 20 56 49 45 57 20 73  ^The DROP VIEW s
11ad0 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73  tatement removes
11ae0 20 61 20 76 69 65 77 20 63 72 65 61 74 65 64 20   a view created 
11af0 62 79 20 74 68 65 20 5b 43 52 45 41 54 45 20 56  by the [CREATE V
11b00 49 45 57 5d 20 0a 20 20 73 74 61 74 65 6d 65 6e  IEW] .  statemen
11b10 74 2e 20 5e 54 68 65 20 76 69 65 77 20 64 65 66  t. ^The view def
11b20 69 6e 69 74 69 6f 6e 20 69 73 20 72 65 6d 6f 76  inition is remov
11b30 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ed from the data
11b40 62 61 73 65 20 73 63 68 65 6d 61 2c 20 62 75 74  base schema, but
11b50 20 0a 20 20 6e 6f 20 61 63 74 75 61 6c 20 64 61   .  no actual da
11b60 74 61 20 69 6e 20 74 68 65 20 75 6e 64 65 72 6c  ta in the underl
11b70 79 69 6e 67 20 62 61 73 65 20 74 61 62 6c 65 73  ying base tables
11b80 20 69 73 20 6d 6f 64 69 66 69 65 64 2e 0a 0a 3c   is modified...<
11b90 70 3e 5e 28 54 68 65 20 76 69 65 77 20 74 6f 20  p>^(The view to 
11ba0 64 72 6f 70 20 69 73 20 69 64 65 6e 74 69 66 69  drop is identifi
11bb0 65 64 20 62 79 20 74 68 65 20 76 69 65 77 2d 6e  ed by the view-n
11bc0 61 6d 65 20 61 6e 64 20 6f 70 74 69 6f 6e 61 6c  ame and optional
11bd0 20 0a 20 20 73 63 68 65 6d 61 2d 6e 61 6d 65 20   .  schema-name 
11be0 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
11bf0 74 20 6f 66 20 74 68 65 20 44 52 4f 50 20 56 49  t of the DROP VI
11c00 45 57 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68  EW statement. Th
11c10 69 73 20 0a 20 20 72 65 66 65 72 65 6e 63 65 20  is .  reference 
11c20 69 73 20 72 65 73 6f 6c 76 65 64 20 75 73 69 6e  is resolved usin
11c30 67 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 70  g the standard p
11c40 72 6f 63 65 64 75 72 65 20 66 6f 72 20 5b 6f 62  rocedure for [ob
11c50 6a 65 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 5d  ject resolution]
11c60 2e 29 5e 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 74  .)^..<p>.  ^If t
11c70 68 65 20 73 70 65 63 69 66 69 65 64 20 76 69 65  he specified vie
11c80 77 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e  w cannot be foun
11c90 64 20 61 6e 64 20 74 68 65 20 49 46 20 45 58 49  d and the IF EXI
11ca0 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 6e 6f  STS clause is no
11cb0 74 20 0a 20 20 70 72 65 73 65 6e 74 2c 20 69 74  t .  present, it
11cc0 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e 49   is an error. ^I
11cd0 66 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  f the specified 
11ce0 76 69 65 77 20 63 61 6e 6e 6f 74 20 62 65 20 66  view cannot be f
11cf0 6f 75 6e 64 20 61 6e 64 20 61 6e 20 49 46 0a 20  ound and an IF. 
11d00 20 45 58 49 53 54 53 20 63 6c 61 75 73 65 20 69   EXISTS clause i
11d10 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  s present in the
11d20 20 44 52 4f 50 20 56 49 45 57 20 73 74 61 74 65   DROP VIEW state
11d30 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 73  ment, then the s
11d40 74 61 74 65 6d 65 6e 74 0a 20 20 69 73 20 61 20  tatement.  is a 
11d50 6e 6f 2d 6f 70 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23  no-op....<tcl>.#
11d60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11d70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11d80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11d90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11da0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
11db0 63 74 69 6f 6e 20 7b 44 61 74 61 62 61 73 65 20  ction {Database 
11dc0 4f 62 6a 65 63 74 20 4e 61 6d 65 20 52 65 73 6f  Object Name Reso
11dd0 6c 75 74 69 6f 6e 7d 20 7b 6e 61 6d 69 6e 67 7d  lution} {naming}
11de0 20 7b 7b 6f 62 6a 65 63 74 20 72 65 73 6f 6c 75   {{object resolu
11df0 74 69 6f 6e 7d 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c  tion}}.</tcl>..<
11e00 70 3e 0a 20 20 49 6e 20 53 51 4c 69 74 65 2c 20  p>.  In SQLite, 
11e10 61 20 64 61 74 61 62 61 73 65 20 6f 62 6a 65 63  a database objec
11e20 74 20 28 61 20 74 61 62 6c 65 2c 20 69 6e 64 65  t (a table, inde
11e30 78 2c 20 74 72 69 67 67 65 72 20 6f 72 20 76 69  x, trigger or vi
11e40 65 77 29 20 69 73 20 69 64 65 6e 74 69 66 69 65  ew) is identifie
11e50 64 0a 20 20 62 79 20 74 68 65 20 6e 61 6d 65 20  d.  by the name 
11e60 6f 66 20 74 68 65 20 6f 62 6a 65 63 74 20 61 6e  of the object an
11e70 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  d the name of th
11e80 65 20 64 61 74 61 62 61 73 65 20 74 68 61 74 20  e database that 
11e90 69 74 20 72 65 73 69 64 65 73 20 69 6e 2e 20 0a  it resides in. .
11ea0 20 20 44 61 74 61 62 61 73 65 20 6f 62 6a 65 63    Database objec
11eb0 74 73 20 6d 61 79 20 72 65 73 69 64 65 20 69 6e  ts may reside in
11ec0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
11ed0 73 65 2c 20 74 68 65 20 74 65 6d 70 20 64 61 74  se, the temp dat
11ee0 61 62 61 73 65 2c 20 6f 72 20 69 6e 0a 20 20 61  abase, or in.  a
11ef0 6e 20 5b 41 54 54 41 43 48 7c 61 74 74 61 63 68  n [ATTACH|attach
11f00 65 64 20 64 61 74 61 62 61 73 65 5d 2e 0a 0a 3c  ed database]...<
11f10 70 3e 0a 20 20 54 68 65 20 73 79 6e 74 61 78 20  p>.  The syntax 
11f20 6f 66 20 74 68 65 20 5b 44 52 4f 50 20 54 41 42  of the [DROP TAB
11f30 4c 45 5d 2c 20 5b 44 52 4f 50 20 49 4e 44 45 58  LE], [DROP INDEX
11f40 5d 2c 20 5b 44 52 4f 50 20 56 49 45 57 5d 2c 20  ], [DROP VIEW], 
11f50 5b 44 52 4f 50 20 54 52 49 47 47 45 52 5d 2c 0a  [DROP TRIGGER],.
11f60 20 20 5b 52 45 49 4e 44 45 58 5d 2c 20 5b 41 4c    [REINDEX], [AL
11f70 54 45 52 20 54 41 42 4c 45 5d 20 61 6e 64 20 6d  TER TABLE] and m
11f80 61 6e 79 20 6f 74 68 65 72 20 63 6f 6d 6d 61 6e  any other comman
11f90 64 73 20 61 6c 6c 20 70 65 72 6d 69 74 20 74 68  ds all permit th
11fa0 65 20 75 73 65 72 20 74 6f 0a 20 20 73 70 65 63  e user to.  spec
11fb0 69 66 79 20 61 20 64 61 74 61 62 61 73 65 20 6f  ify a database o
11fc0 62 6a 65 63 74 20 65 69 74 68 65 72 20 62 79 20  bject either by 
11fd0 69 74 73 20 6e 61 6d 65 20 61 6c 6f 6e 65 2c 20  its name alone, 
11fe0 6f 72 20 62 79 20 61 20 63 6f 6d 62 69 6e 61 74  or by a combinat
11ff0 69 6f 6e 20 6f 66 0a 20 20 69 74 73 20 6e 61 6d  ion of.  its nam
12000 65 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f  e and the name o
12010 66 20 69 74 73 20 64 61 74 61 62 61 73 65 2e 20  f its database. 
12020 5e 28 49 66 20 6e 6f 20 64 61 74 61 62 61 73 65  ^(If no database
12030 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73   is specified as
12040 20 70 61 72 74 0a 20 20 6f 66 20 74 68 65 20 6f   part.  of the o
12050 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 2c  bject reference,
12060 20 74 68 65 6e 20 53 51 4c 69 74 65 20 73 65 61   then SQLite sea
12070 72 63 68 65 73 20 74 68 65 20 6d 61 69 6e 2c 20  rches the main, 
12080 74 65 6d 70 20 61 6e 64 20 61 6c 6c 20 61 74 74  temp and all att
12090 61 63 68 65 64 0a 20 20 64 61 74 61 62 61 73 65  ached.  database
120a0 73 20 66 6f 72 20 61 6e 20 6f 62 6a 65 63 74 20  s for an object 
120b0 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20  with a matching 
120c0 6e 61 6d 65 2e 20 54 68 65 20 74 65 6d 70 20 64  name. The temp d
120d0 61 74 61 62 61 73 65 20 69 73 20 73 65 61 72 63  atabase is searc
120e0 68 65 64 0a 20 20 66 69 72 73 74 2c 20 66 6f 6c  hed.  first, fol
120f0 6c 6f 77 65 64 20 62 79 20 74 68 65 20 6d 61 69  lowed by the mai
12100 6e 20 64 61 74 61 62 61 73 65 2c 20 66 6f 6c 6c  n database, foll
12110 6f 77 65 64 20 61 6c 6c 20 61 74 74 61 63 68 65  owed all attache
12120 64 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 74  d databases in t
12130 68 65 0a 20 20 6f 72 64 65 72 20 74 68 61 74 20  he.  order that 
12140 74 68 65 79 20 77 65 72 65 20 61 74 74 61 63 68  they were attach
12150 65 64 2e 20 54 68 65 20 72 65 66 65 72 65 6e 63  ed. The referenc
12160 65 20 72 65 73 6f 6c 76 65 73 20 74 6f 20 74 68  e resolves to th
12170 65 20 66 69 72 73 74 20 6d 61 74 63 68 0a 20 20  e first match.  
12180 66 6f 75 6e 64 2e 29 5e 20 46 6f 72 20 65 78 61  found.)^ For exa
12190 6d 70 6c 65 3a 0a 0a 3c 70 72 65 3e 5e 28 0a 20  mple:..<pre>^(. 
121a0 20 20 20 20 20 2f 2a 20 41 64 64 20 61 20 74 61       /* Add a ta
121b0 62 6c 65 20 6e 61 6d 65 64 20 27 74 31 27 20 74  ble named 't1' t
121c0 6f 20 74 68 65 20 74 65 6d 70 2c 20 6d 61 69 6e  o the temp, main
121d0 20 61 6e 64 20 61 6e 20 61 74 74 61 63 68 65 64   and an attached
121e0 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20   database */.   
121f0 20 20 20 41 54 54 41 43 48 20 27 66 69 6c 65 2e     ATTACH 'file.
12200 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20  db' AS aux;.    
12210 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
12220 31 28 78 2c 20 79 29 3b 0a 20 20 20 20 20 20 43  1(x, y);.      C
12230 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45  REATE TEMP TABLE
12240 20 74 31 28 78 2c 20 79 29 3b 0a 20 20 20 20 20   t1(x, y);.     
12250 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75   CREATE TABLE au
12260 78 2e 74 31 28 78 2c 20 79 29 3b 0a 0a 20 20 20  x.t1(x, y);..   
12270 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31     DROP TABLE t1
12280 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f  ;         /* Dro
12290 70 20 74 61 62 6c 65 20 69 6e 20 74 65 6d 70 20  p table in temp 
122a0 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20  database */.    
122b0 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b    DROP TABLE t1;
122c0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70           /* Drop
122d0 20 74 61 62 6c 65 20 69 6e 20 6d 61 69 6e 20 64   table in main d
122e0 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20  atabase */.     
122f0 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20   DROP TABLE t1; 
12300 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20          /* Drop 
12310 74 61 62 6c 65 20 69 6e 20 61 75 78 20 64 61 74  table in aux dat
12320 61 62 61 73 65 20 2a 2f 0a 29 5e 3c 2f 70 72 65  abase */.)^</pre
12330 3e 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 61 20 73  >..<p>.  ^If a s
12340 63 68 65 6d 61 20 6e 61 6d 65 20 69 73 20 73 70  chema name is sp
12350 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
12360 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 72 65 66  of an object ref
12370 65 72 65 6e 63 65 2c 20 69 74 20 6d 75 73 74 20  erence, it must 
12380 62 65 0a 20 20 65 69 74 68 65 72 20 22 6d 61 69  be.  either "mai
12390 6e 22 2c 20 6f 72 20 22 74 65 6d 70 22 20 6f 72  n", or "temp" or
123a0 20 74 68 65 20 73 63 68 65 6d 61 2d 6e 61 6d 65   the schema-name
123b0 20 6f 66 20 61 6e 20 61 74 74 61 63 68 65 64 20   of an attached 
123c0 64 61 74 61 62 61 73 65 2e 0a 20 20 5e 4c 69 6b  database..  ^Lik
123d0 65 20 6f 74 68 65 72 20 53 51 4c 20 69 64 65 6e  e other SQL iden
123e0 74 69 66 69 65 72 73 2c 20 73 63 68 65 6d 61 20  tifiers, schema 
123f0 6e 61 6d 65 73 20 61 72 65 20 63 61 73 65 2d 69  names are case-i
12400 6e 73 65 6e 73 69 74 69 76 65 2e 0a 20 20 5e 49  nsensitive..  ^I
12410 66 20 61 20 73 63 68 65 6d 61 20 6e 61 6d 65 20  f a schema name 
12420 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  is specified, th
12430 65 6e 20 6f 6e 6c 79 20 74 68 61 74 20 6f 6e 65  en only that one
12440 20 73 63 68 65 6d 61 20 69 73 20 73 65 61 72 63   schema is searc
12450 68 65 64 20 66 6f 72 0a 20 20 74 68 65 20 6e 61  hed for.  the na
12460 6d 65 64 20 6f 62 6a 65 63 74 2e 0a 0a 3c 70 3e  med object...<p>
12470 0a 20 20 4d 6f 73 74 20 6f 62 6a 65 63 74 20 72  .  Most object r
12480 65 66 65 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e  eferences may on
12490 6c 79 20 72 65 73 6f 6c 76 65 20 74 6f 20 61 20  ly resolve to a 
124a0 73 70 65 63 69 66 69 63 20 74 79 70 65 20 6f 66  specific type of
124b0 20 6f 62 6a 65 63 74 20 28 66 6f 72 0a 20 20 65   object (for.  e
124c0 78 61 6d 70 6c 65 20 61 20 72 65 66 65 72 65 6e  xample a referen
124d0 63 65 20 74 68 61 74 20 69 73 20 70 61 72 74 20  ce that is part 
124e0 6f 66 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20  of a DROP TABLE 
124f0 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6f 6e  statement may on
12500 6c 79 20 72 65 73 6f 6c 76 65 0a 20 20 74 6f 20  ly resolve.  to 
12510 61 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  a table object, 
12520 6e 6f 74 20 61 6e 20 69 6e 64 65 78 2c 20 74 72  not an index, tr
12530 69 67 67 65 72 20 6f 72 20 76 69 65 77 29 2e 20  igger or view). 
12540 48 6f 77 65 76 65 72 20 69 6e 20 73 6f 6d 65 20  However in some 
12550 63 6f 6e 74 65 78 74 73 20 0a 20 20 28 65 2e 67  contexts .  (e.g
12560 2e 20 5b 52 45 49 4e 44 45 58 5d 29 20 61 6e 20  . [REINDEX]) an 
12570 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65  object reference
12580 20 6d 61 79 20 62 65 20 72 65 73 6f 6c 76 65 20   may be resolve 
12590 74 6f 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  to more than one
125a0 20 74 79 70 65 0a 20 20 6f 66 20 6f 62 6a 65 63   type.  of objec
125b0 74 2e 20 5e 57 68 65 6e 20 73 65 61 72 63 68 69  t. ^When searchi
125c0 6e 67 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ng database sche
125d0 6d 61 73 20 66 6f 72 20 61 20 6e 61 6d 65 64 20  mas for a named 
125e0 6f 62 6a 65 63 74 2c 20 6f 62 6a 65 63 74 73 20  object, objects 
125f0 6f 66 0a 20 20 74 79 70 65 73 20 74 68 61 74 20  of.  types that 
12600 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 69  cannot be used i
12610 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66  n the context of
12620 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 20 61   the reference a
12630 72 65 20 61 6c 77 61 79 73 20 0a 20 20 69 67 6e  re always .  ign
12640 6f 72 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  ored...<tcl>.###
12650 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12670 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12690 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
126a0 69 6f 6e 20 45 58 50 4c 41 49 4e 20 65 78 70 6c  ion EXPLAIN expl
126b0 61 69 6e 20 45 58 50 4c 41 49 4e 0a 0a 42 75 62  ain EXPLAIN..Bub
126c0 62 6c 65 44 69 61 67 72 61 6d 20 73 71 6c 2d 73  bleDiagram sql-s
126d0 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tmt.</tcl>..<p>^
126e0 41 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  An SQL statement
126f0 20 63 61 6e 20 62 65 20 70 72 65 63 65 64 65 64   can be preceded
12700 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64 20   by the keyword 
12710 22 45 58 50 4c 41 49 4e 22 20 6f 72 0a 62 79 20  "EXPLAIN" or.by 
12720 74 68 65 20 70 68 72 61 73 65 20 22 45 58 50 4c  the phrase "EXPL
12730 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 22 2e  AIN QUERY PLAN".
12740 20 20 5e 45 69 74 68 65 72 20 6d 6f 64 69 66 69    ^Either modifi
12750 63 61 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68  cation causes th
12760 65 0a 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e.SQL statement 
12770 74 6f 20 62 65 68 61 76 65 20 61 73 20 61 20 71  to behave as a q
12780 75 65 72 79 20 61 6e 64 20 74 6f 20 72 65 74 75  uery and to retu
12790 72 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  rn information a
127a0 62 6f 75 74 0a 68 6f 77 20 74 68 65 20 53 51 4c  bout.how the SQL
127b0 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64   statement would
127c0 20 68 61 76 65 20 6f 70 65 72 61 74 65 64 20 69   have operated i
127d0 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65  f the EXPLAIN ke
127e0 79 77 6f 72 64 20 6f 72 0a 70 68 72 61 73 65 20  yword or.phrase 
127f0 68 61 64 20 62 65 65 6e 20 6f 6d 69 74 74 65 64  had been omitted
12800 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75  .</p>..<p>The ou
12810 74 70 75 74 20 66 72 6f 6d 20 45 58 50 4c 41 49  tput from EXPLAI
12820 4e 20 61 6e 64 20 45 58 50 4c 41 49 4e 20 51 55  N and EXPLAIN QU
12830 45 52 59 20 50 4c 41 4e 20 69 73 20 69 6e 74 65  ERY PLAN is inte
12840 6e 64 65 64 20 66 6f 72 0a 69 6e 74 65 72 61 63  nded for.interac
12850 74 69 76 65 20 61 6e 61 6c 79 73 69 73 20 61 6e  tive analysis an
12860 64 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74 69 6e  d troubleshootin
12870 67 20 6f 6e 6c 79 2e 20 20 54 68 65 20 64 65 74  g only.  The det
12880 61 69 6c 73 20 6f 66 20 74 68 65 20 0a 6f 75 74  ails of the .out
12890 70 75 74 20 66 6f 72 6d 61 74 20 61 72 65 20 73  put format are s
128a0 75 62 6a 65 63 74 20 74 6f 20 63 68 61 6e 67 65  ubject to change
128b0 20 66 72 6f 6d 20 6f 6e 65 20 72 65 6c 65 61 73   from one releas
128c0 65 20 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 74  e of SQLite to t
128d0 68 65 20 6e 65 78 74 2e 0a 41 70 70 6c 69 63 61  he next..Applica
128e0 74 69 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74  tions should not
128f0 20 75 73 65 20 45 58 50 4c 41 49 4e 20 6f 72 20   use EXPLAIN or 
12900 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
12910 41 4e 20 73 69 6e 63 65 0a 74 68 65 69 72 20 65  AN since.their e
12920 78 61 63 74 20 62 65 68 61 76 69 6f 72 20 69 73  xact behavior is
12930 20 76 61 72 69 61 62 6c 65 20 61 6e 64 20 6f 6e   variable and on
12940 6c 79 20 70 61 72 74 69 61 6c 6c 79 20 64 6f 63  ly partially doc
12950 75 6d 65 6e 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  umented.</p>..<p
12960 3e 5e 57 68 65 6e 20 74 68 65 20 45 58 50 4c 41  >^When the EXPLA
12970 49 4e 20 6b 65 79 77 6f 72 64 20 61 70 70 65 61  IN keyword appea
12980 72 73 20 62 79 20 69 74 73 65 6c 66 20 69 74 20  rs by itself it 
12990 63 61 75 73 65 73 20 74 68 65 20 73 74 61 74 65  causes the state
129a0 6d 65 6e 74 0a 74 6f 20 62 65 68 61 76 65 20 61  ment.to behave a
129b0 73 20 61 20 71 75 65 72 79 20 74 68 61 74 20 72  s a query that r
129c0 65 74 75 72 6e 73 20 74 68 65 20 73 65 71 75 65  eturns the seque
129d0 6e 63 65 20 6f 66 20 0a 5b 76 69 72 74 75 61 6c  nce of .[virtual
129e0 20 6d 61 63 68 69 6e 65 20 69 6e 73 74 72 75 63   machine instruc
129f0 74 69 6f 6e 73 5d 20 69 74 20 77 6f 75 6c 64 20  tions] it would 
12a00 68 61 76 65 20 75 73 65 64 20 74 6f 20 65 78 65  have used to exe
12a10 63 75 74 65 20 74 68 65 20 63 6f 6d 6d 61 6e 64  cute the command
12a20 20 68 61 64 0a 74 68 65 20 45 58 50 4c 41 49 4e   had.the EXPLAIN
12a30 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 62 65 65   keyword not bee
12a40 6e 20 70 72 65 73 65 6e 74 2e 20 5e 57 68 65 6e  n present. ^When
12a50 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45   the EXPLAIN QUE
12a60 52 59 20 50 4c 41 4e 20 70 68 72 61 73 65 0a 61  RY PLAN phrase.a
12a70 70 70 65 61 72 73 2c 20 74 68 65 20 73 74 61 74  ppears, the stat
12a80 65 6d 65 6e 74 20 72 65 74 75 72 6e 73 20 68 69  ement returns hi
12a90 67 68 2d 6c 65 76 65 6c 20 69 6e 66 6f 72 6d 61  gh-level informa
12aa0 74 69 6f 6e 20 72 65 67 61 72 64 69 6e 67 20 74  tion regarding t
12ab0 68 65 20 71 75 65 72 79 0a 70 6c 61 6e 20 74 68  he query.plan th
12ac0 61 74 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65  at would have be
12ad0 65 6e 20 75 73 65 64 2e 0a 0a 54 68 65 20 45 58  en used...The EX
12ae0 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
12af0 20 63 6f 6d 6d 61 6e 64 20 69 73 20 64 65 73 63   command is desc
12b00 72 69 62 65 64 20 69 6e 20 0a 5b 65 78 70 6c 61  ribed in .[expla
12b10 69 6e 20 71 75 65 72 79 20 70 6c 61 6e 7c 6d 6f  in query plan|mo
12b20 72 65 20 64 65 74 61 69 6c 20 68 65 72 65 5d 2e  re detail here].
12b30 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
12b40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12b50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12b60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12b70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12b80 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 65  ######.Section e
12b90 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72 20 7b  xpression expr {
12ba0 2a 65 78 70 72 65 73 73 69 6f 6e 20 7b 65 78 70  *expression {exp
12bb0 72 65 73 73 69 6f 6e 20 73 79 6e 74 61 78 7d 7d  ression syntax}}
12bc0 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
12bd0 65 44 69 61 67 72 61 6d 20 65 78 70 72 0a 3c 2f  eDiagram expr.</
12be0 74 63 6c 3e 0a 0a 3c 70 3e 54 68 69 73 20 73 65  tcl>..<p>This se
12bf0 63 74 69 6f 6e 20 69 73 20 64 69 66 66 65 72 65  ction is differe
12c00 6e 74 20 66 72 6f 6d 20 74 68 65 20 6f 74 68 65  nt from the othe
12c10 72 73 2e 20 20 4d 6f 73 74 20 6f 74 68 65 72 20  rs.  Most other 
12c20 73 65 63 74 69 6f 6e 73 20 6f 66 0a 74 68 69 73  sections of.this
12c30 20 64 6f 63 75 6d 65 6e 74 20 74 61 6c 6b 73 20   document talks 
12c40 61 62 6f 75 74 20 61 20 70 61 72 74 69 63 75 6c  about a particul
12c50 61 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20  ar SQL command. 
12c60 20 54 68 69 73 20 73 65 63 74 69 6f 6e 20 64 6f   This section do
12c70 65 73 0a 6e 6f 74 20 74 61 6c 6b 20 61 62 6f 75  es.not talk abou
12c80 74 20 61 20 73 74 61 6e 64 61 6c 6f 6e 65 20 63  t a standalone c
12c90 6f 6d 6d 61 6e 64 20 62 75 74 20 61 62 6f 75 74  ommand but about
12ca0 20 22 65 78 70 72 65 73 73 69 6f 6e 73 22 20 77   "expressions" w
12cb0 68 69 63 68 20 61 72 65 20 0a 73 75 62 63 6f 6d  hich are .subcom
12cc0 70 6f 6e 65 6e 74 73 20 6f 66 20 6d 6f 73 74 20  ponents of most 
12cd0 6f 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 2e 3c  other commands.<
12ce0 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
12cf0 67 6d 65 6e 74 20 62 69 6e 61 72 79 6f 70 73 20  gment binaryops 
12d00 7b 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72  {binary operator
12d10 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 70 65  s}</tcl>.<h3>Ope
12d20 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e  rators</h3>.<p>^
12d30 28 53 51 4c 69 74 65 20 75 6e 64 65 72 73 74 61  (SQLite understa
12d40 6e 64 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  nds the followin
12d50 67 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  g binary operato
12d60 72 73 2c 20 69 6e 20 6f 72 64 65 72 20 66 72 6f  rs, in order fro
12d70 6d 0a 68 69 67 68 65 73 74 20 74 6f 20 6c 6f 77  m.highest to low
12d80 65 73 74 20 70 72 65 63 65 64 65 6e 63 65 3a 3c  est precedence:<
12d90 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
12da0 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c  ><pre>.<font col
12db0 6f 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69  or="#2c2cf0"><bi
12dc0 67 3e 7c 7c 0a 2a 20 20 20 20 2f 20 20 20 20 25  g>||.*    /    %
12dd0 0a 2b 20 20 20 20 2d 0a 26 6c 74 3b 26 6c 74 3b  .+    -.&lt;&lt;
12de0 20 20 20 26 67 74 3b 26 67 74 3b 20 20 20 26 61     &gt;&gt;   &a
12df0 6d 70 3b 20 20 20 20 7c 0a 26 6c 74 3b 20 20 20  mp;    |.&lt;   
12e00 20 26 6c 74 3b 3d 20 20 20 26 67 74 3b 20 20 20   &lt;=   &gt;   
12e10 20 26 67 74 3b 3d 0a 3d 20 20 20 20 3d 3d 20 20   &gt;=.=    ==  
12e20 20 21 3d 20 20 20 26 6c 74 3b 26 67 74 3b 20 20   !=   &lt;&gt;  
12e30 20 3c 2f 62 69 67 3e 49 53 20 20 20 49 53 20 4e   </big>IS   IS N
12e40 4f 54 20 20 20 49 4e 20 20 20 4c 49 4b 45 20 20  OT   IN   LIKE  
12e50 20 47 4c 4f 42 20 20 20 4d 41 54 43 48 20 20 20   GLOB   MATCH   
12e60 52 45 47 45 58 50 0a 41 4e 44 20 20 20 0a 4f 52  REGEXP.AND   .OR
12e70 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f  </font>.</pre></
12e80 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
12e90 70 3e 5e 28 53 75 70 70 6f 72 74 65 64 20 75 6e  p>^(Supported un
12ea0 61 72 79 20 70 72 65 66 69 78 20 6f 70 65 72 61  ary prefix opera
12eb0 74 6f 72 73 20 61 72 65 20 74 68 65 73 65 3a 3c  tors are these:<
12ec0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
12ed0 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c  ><pre>.<font col
12ee0 6f 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69  or="#2c2cf0"><bi
12ef0 67 3e 2d 20 20 20 20 2b 20 20 20 20 7e 20 20 20  g>-    +    ~   
12f00 20 4e 4f 54 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74   NOT</big></font
12f10 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  >.</pre></blockq
12f20 75 6f 74 65 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64  uote>)^..<tcl>hd
12f30 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6c 6c 61 74  _fragment collat
12f40 65 6f 70 20 7b 43 4f 4c 4c 41 54 45 20 6f 70 65  eop {COLLATE ope
12f50 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  rator}</tcl>.<p>
12f60 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65  ^The COLLATE ope
12f70 72 61 74 6f 72 20 69 73 20 61 20 75 6e 61 72 79  rator is a unary
12f80 20 70 6f 73 74 66 69 78 0a 6f 70 65 72 61 74 6f   postfix.operato
12f90 72 20 74 68 61 74 20 61 73 73 69 67 6e 73 20 61  r that assigns a
12fa0 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75   [collating sequ
12fb0 65 6e 63 65 5d 20 74 6f 20 61 6e 20 65 78 70 72  ence] to an expr
12fc0 65 73 73 69 6f 6e 2e 0a 5e 54 68 65 20 43 4f 4c  ession..^The COL
12fd0 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 68 61  LATE operator ha
12fe0 73 20 61 20 68 69 67 68 65 72 20 70 72 65 63 65  s a higher prece
12ff0 64 65 6e 63 65 20 28 62 69 6e 64 73 20 6d 6f 72  dence (binds mor
13000 65 20 74 69 67 68 74 6c 79 29 20 74 68 61 6e 20  e tightly) than 
13010 61 6e 79 0a 62 69 6e 61 72 79 20 6f 70 65 72 61  any.binary opera
13020 74 6f 72 20 61 6e 64 20 61 6e 79 20 75 6e 61 72  tor and any unar
13030 79 20 70 72 65 66 69 78 20 6f 70 65 72 61 74 6f  y prefix operato
13040 72 20 65 78 63 65 70 74 20 22 7e 22 2e 0a 28 43  r except "~"..(C
13050 4f 4c 4c 41 54 45 20 61 6e 64 20 22 7e 22 20 61  OLLATE and "~" a
13060 72 65 20 61 73 73 6f 63 69 61 74 69 76 65 20 73  re associative s
13070 6f 20 74 68 65 69 72 20 62 69 6e 64 69 6e 67 20  o their binding 
13080 6f 72 64 65 72 20 64 6f 65 73 20 6e 6f 74 20 6d  order does not m
13090 61 74 74 65 72 2e 29 0a 5e 54 68 65 20 63 6f 6c  atter.).^The col
130a0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
130b0 73 65 74 20 62 79 20 74 68 65 20 43 4f 4c 4c 41  set by the COLLA
130c0 54 45 20 6f 70 65 72 61 74 6f 72 20 6f 76 65 72  TE operator over
130d0 72 69 64 65 73 20 74 68 65 0a 63 6f 6c 6c 61 74  rides the.collat
130e0 69 6e 67 20 73 65 71 75 65 6e 63 65 20 64 65 74  ing sequence det
130f0 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 43  ermined by the C
13100 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 69 6e  OLLATE clause in
13110 20 61 20 74 61 62 6c 65 0a 5b 63 6f 6c 75 6d 6e   a table.[column
13120 20 64 65 66 69 6e 69 74 69 6f 6e 5d 2e 0a 53 65   definition]..Se
13130 65 20 74 68 65 20 5b 63 6f 6c 6c 61 74 69 6e 67  e the [collating
13140 20 73 65 71 75 65 6e 63 65 7c 20 64 65 74 61 69   sequence| detai
13150 6c 65 64 20 64 69 73 63 75 73 73 69 6f 6e 20 6f  led discussion o
13160 6e 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  n collating sequ
13170 65 6e 63 65 73 5d 0a 69 6e 20 74 68 65 20 5b 64  ences].in the [d
13180 61 74 61 74 79 70 65 20 7c 20 44 61 74 61 74 79  atatype | Dataty
13190 70 65 20 49 6e 20 53 51 4c 69 74 65 33 5d 20 64  pe In SQLite3] d
131a0 6f 63 75 6d 65 6e 74 20 66 6f 72 20 61 64 64 69  ocument for addi
131b0 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
131c0 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  on..</p>..<tcl>h
131d0 64 5f 70 75 74 73 20 22 0a 3c 70 3e 5e 54 68 65  d_puts ".<p>^The
131e0 20 75 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20   unary operator 
131f0 5b 4f 70 65 72 61 74 6f 72 20 2b 5d 20 69 73 20  [Operator +] is 
13200 61 20 6e 6f 2d 6f 70 2e 20 20 5e 49 74 20 63 61  a no-op.  ^It ca
13210 6e 20 62 65 20 61 70 70 6c 69 65 64 0a 74 6f 20  n be applied.to 
13220 73 74 72 69 6e 67 73 2c 20 6e 75 6d 62 65 72 73  strings, numbers
13230 2c 20 62 6c 6f 62 73 20 6f 72 20 4e 55 4c 4c 20  , blobs or NULL 
13240 61 6e 64 20 69 74 20 61 6c 77 61 79 73 20 72 65  and it always re
13250 74 75 72 6e 73 20 61 20 72 65 73 75 6c 74 0a 77  turns a result.w
13260 69 74 68 20 74 68 65 20 73 61 6d 65 20 76 61 6c  ith the same val
13270 75 65 20 61 73 20 74 68 65 20 6f 70 65 72 61 6e  ue as the operan
13280 64 2e 3c 2f 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c  d.</p>"</tcl>..<
13290 70 3e 4e 6f 74 65 20 74 68 61 74 20 74 68 65 72  p>Note that ther
132a0 65 20 61 72 65 20 74 77 6f 20 76 61 72 69 61 74  e are two variat
132b0 69 6f 6e 73 20 6f 66 20 74 68 65 20 65 71 75 61  ions of the equa
132c0 6c 73 20 61 6e 64 20 6e 6f 74 20 65 71 75 61 6c  ls and not equal
132d0 73 0a 6f 70 65 72 61 74 6f 72 73 2e 20 20 5e 45  s.operators.  ^E
132e0 71 75 61 6c 73 20 63 61 6e 20 62 65 20 65 69 74  quals can be eit
132f0 68 65 72 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 70 75  her..<tcl>.hd_pu
13300 74 73 20 22 5b 4f 70 65 72 61 74 6f 72 20 3d 5d  ts "[Operator =]
13310 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 3d 3d   or [Operator ==
13320 5d 2e 0a 5e 54 68 65 20 6e 6f 6e 2d 65 71 75 61  ]..^The non-equa
13330 6c 73 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20  ls operator can 
13340 62 65 20 65 69 74 68 65 72 0a 5b 4f 70 65 72 61  be either.[Opera
13350 74 6f 72 20 21 3d 5d 20 6f 72 20 5b 4f 70 65 72  tor !=] or [Oper
13360 61 74 6f 72 20 7b 26 6c 74 3b 26 67 74 3b 7d 5d  ator {&lt;&gt;}]
13370 2e 0a 5e 54 68 65 20 5b 4f 70 65 72 61 74 6f 72  ..^The [Operator
13380 20 7c 7c 5d 20 6f 70 65 72 61 74 6f 72 20 69 73   ||] operator is
13390 20 5c 22 63 6f 6e 63 61 74 65 6e 61 74 65 5c 22   \"concatenate\"
133a0 20 2d 20 69 74 20 6a 6f 69 6e 73 20 74 6f 67 65   - it joins toge
133b0 74 68 65 72 0a 74 68 65 20 74 77 6f 20 73 74 72  ther.the two str
133c0 69 6e 67 73 20 6f 66 20 69 74 73 20 6f 70 65 72  ings of its oper
133d0 61 6e 64 73 2e 0a 5e 54 68 65 20 6f 70 65 72 61  ands..^The opera
133e0 74 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 25 5d  tor [Operator %]
133f0 20 6f 75 74 70 75 74 73 20 74 68 65 20 76 61 6c   outputs the val
13400 75 65 20 6f 66 20 69 74 73 20 6c 65 66 74 20 0a  ue of its left .
13410 6f 70 65 72 61 6e 64 20 6d 6f 64 75 6c 6f 20 69  operand modulo i
13420 74 73 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  ts right operand
13430 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 72  .</p>..<p>^The r
13440 65 73 75 6c 74 20 6f 66 20 61 6e 79 20 62 69 6e  esult of any bin
13450 61 72 79 20 6f 70 65 72 61 74 6f 72 20 69 73 20  ary operator is 
13460 65 69 74 68 65 72 20 61 20 6e 75 6d 65 72 69 63  either a numeric
13470 20 76 61 6c 75 65 20 6f 72 20 0a 4e 55 4c 4c 2c   value or .NULL,
13480 20 65 78 63 65 70 74 20 66 6f 72 20 74 68 65 20   except for the 
13490 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20 63 6f  [Operator ||] co
134a0 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f 70 65 72  ncatenation oper
134b0 61 74 6f 72 20 77 68 69 63 68 20 61 6c 77 61 79  ator which alway
134c0 73 20 0a 65 76 61 6c 75 61 74 65 73 20 74 6f 20  s .evaluates to 
134d0 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61  either NULL or a
134e0 20 74 65 78 74 20 76 61 6c 75 65 2e 3c 2f 70 3e   text value.</p>
134f0 22 0a 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b  "..hd_fragment {
13500 69 73 69 73 6e 6f 74 7d 20 7b 49 53 20 6f 70 65  isisnot} {IS ope
13510 72 61 74 6f 72 7d 20 7b 49 53 20 4e 4f 54 20 6f  rator} {IS NOT o
13520 70 65 72 61 74 6f 72 7d 0a 0a 68 64 5f 70 75 74  perator}..hd_put
13530 73 20 22 3c 70 3e 5e 54 68 65 20 5b 4f 70 65 72  s "<p>^The [Oper
13540 61 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f 70  ator IS] and [Op
13550 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d  erator {IS NOT}]
13560 20 6f 70 65 72 61 74 6f 72 73 20 77 6f 72 6b 0a   operators work.
13570 6c 69 6b 65 20 5b 4f 70 65 72 61 74 6f 72 20 3d  like [Operator =
13580 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20  ] and [Operator 
13590 21 3d 5d 20 65 78 63 65 70 74 20 77 68 65 6e 20  !=] except when 
135a0 6f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 66 20 74  one or both of t
135b0 68 65 0a 6f 70 65 72 61 6e 64 73 20 61 72 65 20  he.operands are 
135c0 4e 55 4c 4c 2e 20 5e 49 6e 20 74 68 69 73 20 63  NULL. ^In this c
135d0 61 73 65 2c 20 69 66 20 62 6f 74 68 20 6f 70 65  ase, if both ope
135e0 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20  rands are NULL, 
135f0 74 68 65 6e 20 74 68 65 0a 49 53 20 6f 70 65 72  then the.IS oper
13600 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74  ator evaluates t
13610 6f 20 31 20 28 74 72 75 65 29 20 61 6e 64 20 74  o 1 (true) and t
13620 68 65 20 49 53 20 4e 4f 54 20 6f 70 65 72 61 74  he IS NOT operat
13630 6f 72 20 65 76 61 6c 75 61 74 65 73 0a 74 6f 20  or evaluates.to 
13640 30 20 28 66 61 6c 73 65 29 2e 20 5e 49 66 20 6f  0 (false). ^If o
13650 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  ne operand is NU
13660 4c 4c 20 61 6e 64 20 74 68 65 20 6f 74 68 65 72  LL and the other
13670 20 69 73 20 6e 6f 74 2c 20 74 68 65 6e 20 74 68   is not, then th
13680 65 0a 49 53 20 6f 70 65 72 61 74 6f 72 20 65 76  e.IS operator ev
13690 61 6c 75 61 74 65 73 20 74 6f 20 30 20 28 66 61  aluates to 0 (fa
136a0 6c 73 65 29 20 61 6e 64 20 74 68 65 20 49 53 20  lse) and the IS 
136b0 4e 4f 54 20 6f 70 65 72 61 74 6f 72 20 69 73 20  NOT operator is 
136c0 31 20 28 74 72 75 65 29 2e 0a 5e 49 74 20 69 73  1 (true)..^It is
136d0 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 66 6f   not possible fo
136e0 72 20 61 6e 20 49 53 20 6f 72 20 49 53 20 4e 4f  r an IS or IS NO
136f0 54 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20  T expression to 
13700 65 76 61 6c 75 61 74 65 20 74 6f 20 4e 55 4c 4c  evaluate to NULL
13710 2e 0a 5e 4f 70 65 72 61 74 6f 72 73 20 5b 4f 70  ..^Operators [Op
13720 65 72 61 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b  erator IS] and [
13730 4f 70 65 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54  Operator {IS NOT
13740 7d 5d 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  }] have the same
13750 20 0a 70 72 65 63 65 64 65 6e 63 65 20 61 73 20   .precedence as 
13760 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 2e 22 0a 0a  [Operator =]."..
13770 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
13780 20 6c 69 74 76 61 6c 75 65 20 7b 6c 69 74 65 72   litvalue {liter
13790 61 6c 20 76 61 6c 75 65 7d 3c 2f 74 63 6c 3e 0a  al value}</tcl>.
137a0 3c 68 33 3e 4c 69 74 65 72 61 6c 20 56 61 6c 75  <h3>Literal Valu
137b0 65 73 20 28 43 6f 6e 73 74 61 6e 74 73 29 3c 2f  es (Constants)</
137c0 68 33 3e 0a 3c 70 3e 0a 41 20 6c 69 74 65 72 61  h3>.<p>.A litera
137d0 6c 20 76 61 6c 75 65 20 72 65 70 72 65 73 65 6e  l value represen
137e0 74 73 20 61 20 63 6f 6e 73 74 61 6e 74 2e 0a 5e  ts a constant..^
137f0 4c 69 74 65 72 61 6c 20 76 61 6c 75 65 73 20 6d  Literal values m
13800 61 79 20 62 65 20 69 6e 74 65 67 65 72 73 2c 20  ay be integers, 
13810 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e  floating point n
13820 75 6d 62 65 72 73 2c 20 73 74 72 69 6e 67 73 2c  umbers, strings,
13830 0a 42 4c 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73  .BLOBs, or NULLs
13840 2e 0a 3c 70 3e 0a 54 68 65 20 73 79 6e 74 61 78  ..<p>.The syntax
13850 20 66 6f 72 20 69 6e 74 65 67 65 72 20 61 6e 64   for integer and
13860 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
13870 6c 69 74 65 72 61 6c 73 20 28 63 6f 6c 6c 65 63  literals (collec
13880 74 69 76 65 6c 79 0a 22 6e 75 6d 65 72 69 63 20  tively."numeric 
13890 6c 69 74 65 72 61 6c 73 22 29 20 69 73 20 73 68  literals") is sh
138a0 6f 77 6e 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f  own by the follo
138b0 77 69 6e 67 20 64 69 61 67 72 61 6d 3a 3c 2f 70  wing diagram:</p
138c0 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69  >..<tcl>BubbleDi
138d0 61 67 72 61 6d 20 6e 75 6d 65 72 69 63 2d 6c 69  agram numeric-li
138e0 74 65 72 61 6c 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  teral</tcl>..<p>
138f0 0a 5e 28 49 66 20 61 20 6e 75 6d 65 72 69 63 20  .^(If a numeric 
13900 6c 69 74 65 72 61 6c 20 68 61 73 20 61 20 64 65  literal has a de
13910 63 69 6d 61 6c 20 70 6f 69 6e 74 20 6f 72 20 61  cimal point or a
13920 6e 20 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e  n exponentiation
13930 0a 63 6c 61 75 73 65 20 6f 72 20 69 66 20 69 74  .clause or if it
13940 73 20 6d 61 67 6e 69 74 75 64 65 20 69 73 20 6c  s magnitude is l
13950 65 73 73 20 74 68 61 6e 20 2d 39 32 32 33 33 37  ess than -922337
13960 32 30 33 36 38 35 34 37 37 35 38 30 38 20 6f 72  2036854775808 or
13970 0a 67 72 65 61 74 65 72 20 74 68 61 6e 20 39 32  .greater than 92
13980 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
13990 37 2c 20 74 68 65 6e 20 69 74 20 69 73 20 61 20  7, then it is a 
139a0 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c  floating point l
139b0 69 74 65 72 61 6c 2e 0a 4f 74 68 65 72 77 69 73  iteral..Otherwis
139c0 65 20 69 73 20 69 74 20 69 73 20 61 6e 20 20 69  e is it is an  i
139d0 6e 74 65 67 65 72 20 6c 69 74 65 72 61 6c 2e 29  nteger literal.)
139e0 5e 0a 5e 54 68 65 20 22 45 22 20 63 68 61 72 61  ^.^The "E" chara
139f0 63 74 65 72 20 74 68 61 74 20 62 65 67 69 6e 73  cter that begins
13a00 20 74 68 65 20 65 78 70 6f 6e 65 6e 74 69 61 74   the exponentiat
13a10 69 6f 6e 0a 63 6c 61 75 73 65 20 6f 66 20 61 20  ion.clause of a 
13a20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c  floating point l
13a30 69 74 65 72 61 6c 20 63 61 6e 20 62 65 20 65 69  iteral can be ei
13a40 74 68 65 72 20 75 70 70 65 72 20 6f 72 20 6c 6f  ther upper or lo
13a50 77 65 72 20 63 61 73 65 2e 0a 5e 28 54 68 65 20  wer case..^(The 
13a60 22 2e 22 20 63 68 61 72 61 63 74 65 72 20 69 73  "." character is
13a70 20 61 6c 77 61 79 73 20 75 73 65 64 20 0a 61 73   always used .as
13a80 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69   the decimal poi
13a90 6e 74 20 65 76 65 6e 20 69 66 20 74 68 65 20 6c  nt even if the l
13aa0 6f 63 61 6c 65 20 73 65 74 74 69 6e 67 20 73 70  ocale setting sp
13ab0 65 63 69 66 69 65 73 20 22 2c 22 20 66 6f 72 0a  ecifies "," for.
13ac0 74 68 69 73 20 72 6f 6c 65 20 2d 20 74 68 65 20  this role - the 
13ad0 75 73 65 20 6f 66 20 22 2c 22 20 66 6f 72 20 74  use of "," for t
13ae0 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74  he decimal point
13af0 20 77 6f 75 6c 64 20 72 65 73 75 6c 74 20 69 6e   would result in
13b00 0a 73 79 6e 74 61 63 74 69 63 20 61 6d 62 69 67  .syntactic ambig
13b10 75 69 74 79 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64  uity.)^..<tcl>hd
13b20 5f 66 72 61 67 6d 65 6e 74 20 68 65 78 69 6e 74  _fragment hexint
13b30 20 7b 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e   {hexadecimal in
13b40 74 65 67 65 72 20 6c 69 74 65 72 61 6c 73 7d 20  teger literals} 
13b50 7b 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74  {hexadecimal int
13b60 65 67 65 72 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  egers}</tcl>.<p>
13b70 5e 48 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74  ^Hexadecimal int
13b80 65 67 65 72 20 6c 69 74 65 72 61 6c 73 20 66 6f  eger literals fo
13b90 6c 6c 6f 77 20 74 68 65 20 43 2d 6c 61 6e 67 75  llow the C-langu
13ba0 61 67 65 20 6e 6f 74 61 74 69 6f 6e 20 6f 66 0a  age notation of.
13bb0 22 30 78 22 20 6f 72 20 22 30 58 22 20 66 6f 6c  "0x" or "0X" fol
13bc0 6c 6f 77 65 64 20 62 79 20 68 65 78 61 64 65 63  lowed by hexadec
13bd0 69 6d 61 6c 20 64 69 67 69 74 73 2e 0a 5e 46 6f  imal digits..^Fo
13be0 72 20 65 78 61 6d 70 6c 65 2c 20 30 78 31 32 33  r example, 0x123
13bf0 34 20 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65  4 means the same
13c00 20 61 73 20 34 36 36 30 0a 61 6e 64 20 30 78 38   as 4660.and 0x8
13c10 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 20  000000000000000 
13c20 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65 20 61  means the same a
13c30 73 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34  s -9223372036854
13c40 37 37 35 38 30 38 2e 0a 20 5e 28 48 65 78 61 64  775808.. ^(Hexad
13c50 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 6c  ecimal integer l
13c60 69 74 65 72 61 6c 73 20 61 72 65 20 69 6e 74 65  iterals are inte
13c70 72 70 72 65 74 65 64 20 61 73 20 36 34 2d 62 69  rpreted as 64-bi
13c80 74 0a 74 77 6f 27 73 2d 63 6f 6d 70 6c 65 6d 65  t.two's-compleme
13c90 6e 74 20 69 6e 74 65 67 65 72 73 20 61 6e 64 20  nt integers and 
13ca0 61 72 65 20 74 68 75 73 20 6c 69 6d 69 74 65 64  are thus limited
13cb0 0a 74 6f 20 73 69 78 74 65 65 6e 20 73 69 67 6e  .to sixteen sign
13cc0 69 66 69 63 61 6e 74 20 64 69 67 69 74 73 20 6f  ificant digits o
13cd0 66 20 70 72 65 63 69 73 69 6f 6e 2e 29 5e 0a 53  f precision.)^.S
13ce0 75 70 70 6f 72 74 20 66 6f 72 20 68 65 78 61 64  upport for hexad
13cf0 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73 20  ecimal integers 
13d00 77 61 73 20 61 64 64 65 64 20 74 6f 20 53 51 4c  was added to SQL
13d10 69 74 65 0a 76 65 72 73 69 6f 6e 20 33 2e 38 2e  ite.version 3.8.
13d20 36 20 28 5b 64 61 74 65 6f 66 3a 33 2e 38 2e 36  6 ([dateof:3.8.6
13d30 5d 29 2e 0a 5e 46 6f 72 20 62 61 63 6b 77 61 72  ])..^For backwar
13d40 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  ds compatibility
13d50 2c 20 74 68 65 20 22 30 78 22 20 68 65 78 61 64  , the "0x" hexad
13d60 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 0a 6e  ecimal integer.n
13d70 6f 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  otation is only 
13d80 75 6e 64 65 72 73 74 6f 6f 64 20 62 79 20 74 68  understood by th
13d90 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 70  e SQL language p
13da0 61 72 73 65 72 2c 20 6e 6f 74 20 62 79 20 74 68  arser, not by th
13db0 65 0a 74 79 70 65 20 63 6f 6e 76 65 72 73 69 6f  e.type conversio
13dc0 6e 73 20 72 6f 75 74 69 6e 65 73 2e 0a 5e 28 53  ns routines..^(S
13dd0 74 72 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20  tring variables 
13de0 74 68 61 74 0a 63 6f 6e 74 61 69 6e 20 74 65 78  that.contain tex
13df0 74 20 66 6f 72 6d 61 74 74 65 64 20 6c 69 6b 65  t formatted like
13e00 20 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74   hexadecimal int
13e10 65 67 65 72 73 20 61 72 65 20 6e 6f 74 0a 69 6e  egers are not.in
13e20 74 65 72 70 72 65 74 65 64 20 61 73 20 68 65 78  terpreted as hex
13e30 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72  adecimal integer
13e40 73 20 77 68 65 6e 20 63 6f 65 72 63 69 6e 67 20  s when coercing 
13e50 74 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65  the string value
13e60 0a 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  .into an integer
13e70 20 64 75 65 20 74 6f 20 61 20 5b 43 41 53 54 20   due to a [CAST 
13e80 65 78 70 72 65 73 73 69 6f 6e 5d 20 6f 72 20 66  expression] or f
13e90 6f 72 20 61 20 5b 63 6f 6c 75 6d 6e 20 61 66 66  or a [column aff
13ea0 69 6e 69 74 79 5d 0a 74 72 61 6e 73 66 6f 72 6d  inity].transform
13eb0 61 74 69 6f 6e 20 6f 72 20 70 72 69 6f 72 20 74  ation or prior t
13ec0 6f 20 70 65 72 66 6f 72 6d 69 6e 67 20 61 20 6e  o performing a n
13ed0 75 6d 65 72 69 63 20 6f 70 65 72 61 74 69 6f 6e  umeric operation
13ee0 20 6f 72 20 66 6f 72 0a 61 6e 79 20 6f 74 68 65   or for.any othe
13ef0 72 20 72 75 6e 2d 74 69 6d 65 20 63 6f 6e 76 65  r run-time conve
13f00 72 73 69 6f 6e 73 2e 29 5e 20 20 5e 28 57 68 65  rsions.)^  ^(Whe
13f10 6e 20 63 6f 65 72 63 69 6e 67 20 61 0a 73 74 72  n coercing a.str
13f20 69 6e 67 20 76 61 6c 75 65 20 69 6e 20 74 68 65  ing value in the
13f30 20 66 6f 72 6d 61 74 20 6f 66 20 61 20 68 65 78   format of a hex
13f40 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72  adecimal integer
13f50 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72   into an integer
13f60 0a 76 61 6c 75 65 2c 20 74 68 65 20 63 6f 6e 76  .value, the conv
13f70 65 72 73 69 6f 6e 20 70 72 6f 63 65 73 73 20 73  ersion process s
13f80 74 6f 70 73 20 77 68 65 6e 20 74 68 65 20 27 78  tops when the 'x
13f90 27 20 63 68 61 72 61 63 74 65 72 20 69 73 20 73  ' character is s
13fa0 65 65 6e 0a 73 6f 20 74 68 65 20 72 65 73 75 6c  een.so the resul
13fb0 74 69 6e 67 20 69 6e 74 65 67 65 72 20 76 61 6c  ting integer val
13fc0 75 65 20 69 73 20 61 6c 77 61 79 73 20 7a 65 72  ue is always zer
13fd0 6f 2e 29 5e 0a 5e 28 53 51 4c 69 74 65 20 6f 6e  o.)^.^(SQLite on
13fe0 6c 79 20 75 6e 64 65 72 73 74 61 6e 64 73 20 74  ly understands t
13ff0 68 65 20 68 65 78 61 64 65 63 69 6d 61 6c 20 69  he hexadecimal i
14000 6e 74 65 67 65 72 20 6e 6f 74 61 74 69 6f 6e 20  nteger notation 
14010 77 68 65 6e 20 69 74 0a 61 70 70 65 61 72 73 20  when it.appears 
14020 69 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  in the SQL state
14030 6d 65 6e 74 20 74 65 78 74 2c 20 6e 6f 74 20 77  ment text, not w
14040 68 65 6e 20 69 74 20 61 70 70 65 61 72 73 20 61  hen it appears a
14050 73 0a 70 61 72 74 20 6f 66 20 74 68 65 20 63 6f  s.part of the co
14060 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 64 61 74  ntent of the dat
14070 61 62 61 73 65 2e 29 5e 0a 0a 3c 70 3e 20 5e 41  abase.)^..<p> ^A
14080 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74   string constant
14090 20 69 73 20 66 6f 72 6d 65 64 20 62 79 20 65 6e   is formed by en
140a0 63 6c 6f 73 69 6e 67 20 74 68 65 0a 73 74 72 69  closing the.stri
140b0 6e 67 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f  ng in single quo
140c0 74 65 73 20 28 27 29 2e 20 20 5e 41 20 73 69 6e  tes (').  ^A sin
140d0 67 6c 65 20 71 75 6f 74 65 20 77 69 74 68 69 6e  gle quote within
140e0 20 74 68 65 20 73 74 72 69 6e 67 20 63 61 6e 0a   the string can.
140f0 62 65 20 65 6e 63 6f 64 65 64 20 62 79 20 70 75  be encoded by pu
14100 74 74 69 6e 67 20 74 77 6f 20 73 69 6e 67 6c 65  tting two single
14110 20 71 75 6f 74 65 73 20 69 6e 20 61 20 72 6f 77   quotes in a row
14120 20 2d 20 61 73 20 69 6e 20 50 61 73 63 61 6c 2e   - as in Pascal.
14130 0a 43 2d 73 74 79 6c 65 20 65 73 63 61 70 65 73  .C-style escapes
14140 20 75 73 69 6e 67 20 74 68 65 20 62 61 63 6b 73   using the backs
14150 6c 61 73 68 20 63 68 61 72 61 63 74 65 72 20 61  lash character a
14160 72 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64  re not supported
14170 20 62 65 63 61 75 73 65 0a 74 68 65 79 20 61 72   because.they ar
14180 65 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53  e not standard S
14190 51 4c 2e 0a 0a 3c 70 3e 20 5e 42 4c 4f 42 20 6c  QL...<p> ^BLOB l
141a0 69 74 65 72 61 6c 73 20 61 72 65 20 73 74 72 69  iterals are stri
141b0 6e 67 20 6c 69 74 65 72 61 6c 73 20 63 6f 6e 74  ng literals cont
141c0 61 69 6e 69 6e 67 20 68 65 78 61 64 65 63 69 6d  aining hexadecim
141d0 61 6c 20 64 61 74 61 20 61 6e 64 0a 70 72 65 63  al data and.prec
141e0 65 64 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65  eded by a single
141f0 20 22 78 22 20 6f 72 20 22 58 22 20 63 68 61 72   "x" or "X" char
14200 61 63 74 65 72 2e 20 20 5e 28 45 78 61 6d 70 6c  acter.  ^(Exampl
14210 65 3a 20 58 27 35 33 35 31 34 43 36 39 37 34 36  e: X'53514C69746
14220 35 27 29 5e 0a 0a 3c 70 3e 0a 5e 41 20 6c 69 74  5')^..<p>.^A lit
14230 65 72 61 6c 20 76 61 6c 75 65 20 63 61 6e 20 61  eral value can a
14240 6c 73 6f 20 62 65 20 74 68 65 20 74 6f 6b 65 6e  lso be the token
14250 20 22 4e 55 4c 4c 22 2e 0a 3c 2f 70 3e 0a 0a 3c   "NULL"..</p>..<
14260 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
14270 76 61 72 70 61 72 61 6d 20 70 61 72 61 6d 65 74  varparam paramet
14280 65 72 20 70 61 72 61 6d 65 74 65 72 73 20 7b 62  er parameters {b
14290 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 7d 20  ound parameter} 
142a0 7b 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72  {bound parameter
142b0 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 50 61 72  s}</tcl>.<h3>Par
142c0 61 6d 65 74 65 72 73 3c 2f 68 33 3e 0a 3c 70 3e  ameters</h3>.<p>
142d0 0a 41 20 22 76 61 72 69 61 62 6c 65 22 20 6f 72  .A "variable" or
142e0 20 22 70 61 72 61 6d 65 74 65 72 22 20 74 6f 6b   "parameter" tok
142f0 65 6e 0a 73 70 65 63 69 66 69 65 73 20 61 20 70  en.specifies a p
14300 6c 61 63 65 68 6f 6c 64 65 72 20 69 6e 20 74 68  laceholder in th
14310 65 20 65 78 70 72 65 73 73 69 6f 6e 20 66 6f 72  e expression for
14320 20 61 20 0a 76 61 6c 75 65 20 74 68 61 74 20 69   a .value that i
14330 73 20 66 69 6c 6c 65 64 20 69 6e 20 61 74 20 72  s filled in at r
14340 75 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65  untime using the
14350 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62  .[sqlite3_bind_b
14360 6c 6f 62 28 29 20 7c 20 73 71 6c 69 74 65 33 5f  lob() | sqlite3_
14370 62 69 6e 64 28 29 5d 20 66 61 6d 69 6c 79 20 6f  bind()] family o
14380 66 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63  f C/C++ interfac
14390 65 73 2e 0a 50 61 72 61 6d 65 74 65 72 73 20 63  es..Parameters c
143a0 61 6e 20 74 61 6b 65 20 73 65 76 65 72 61 6c 20  an take several 
143b0 66 6f 72 6d 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c  forms:.</p>..<bl
143c0 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65  ockquote>.<table
143d0 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  >.<tr>.<td align
143e0 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d  ="right" valign=
143f0 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 69  "top"><b>?</b><i
14400 3e 4e 4e 4e 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64  >NNN</i></td><td
14410 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64   width="20"></td
14420 3e 0a 3c 74 64 3e 5e 28 41 20 71 75 65 73 74 69  >.<td>^(A questi
14430 6f 6e 20 6d 61 72 6b 20 66 6f 6c 6c 6f 77 65 64  on mark followed
14440 20 62 79 20 61 20 6e 75 6d 62 65 72 20 3c 69 3e   by a number <i>
14450 4e 4e 4e 3c 2f 69 3e 20 68 6f 6c 64 73 20 61 20  NNN</i> holds a 
14460 73 70 6f 74 20 66 6f 72 20 74 68 65 0a 4e 4e 4e  spot for the.NNN
14470 2d 74 68 20 70 61 72 61 6d 65 74 65 72 2e 20 20  -th parameter.  
14480 4e 4e 4e 20 6d 75 73 74 20 62 65 20 62 65 74 77  NNN must be betw
14490 65 65 6e 20 31 20 61 6e 64 20 5b 53 51 4c 49 54  een 1 and [SQLIT
144a0 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
144b0 55 4d 42 45 52 5d 2e 29 5e 0a 3c 2f 74 64 3e 0a  UMBER].)^.</td>.
144c0 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61  </tr>.<tr>.<td a
144d0 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c  lign="right" val
144e0 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f  ign="top"><b>?</
144f0 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68  b></td><td width
14500 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e  ="20"></td>.<td>
14510 5e 41 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b  ^A question mark
14520 20 74 68 61 74 20 69 73 20 6e 6f 74 20 66 6f 6c   that is not fol
14530 6c 6f 77 65 64 20 62 79 20 61 20 6e 75 6d 62 65  lowed by a numbe
14540 72 20 63 72 65 61 74 65 73 20 61 20 70 61 72 61  r creates a para
14550 6d 65 74 65 72 0a 77 69 74 68 20 61 20 6e 75 6d  meter.with a num
14560 62 65 72 20 6f 6e 65 20 67 72 65 61 74 65 72 20  ber one greater 
14570 74 68 61 6e 20 74 68 65 20 6c 61 72 67 65 73 74  than the largest
14580 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65   parameter numbe
14590 72 20 61 6c 72 65 61 64 79 20 61 73 73 69 67 6e  r already assign
145a0 65 64 2e 0a 5e 49 66 20 74 68 69 73 20 6d 65 61  ed..^If this mea
145b0 6e 73 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  ns the parameter
145c0 20 6e 75 6d 62 65 72 20 69 73 20 67 72 65 61 74   number is great
145d0 65 72 20 74 68 61 6e 0a 5b 53 51 4c 49 54 45 5f  er than.[SQLITE_
145e0 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
145f0 42 45 52 5d 2c 20 69 74 20 69 73 20 61 6e 20 65  BER], it is an e
14600 72 72 6f 72 2e 0a 54 68 69 73 20 70 61 72 61 6d  rror..This param
14610 65 74 65 72 20 66 6f 72 6d 61 74 20 69 73 20 70  eter format is p
14620 72 6f 76 69 64 65 64 20 66 6f 72 20 63 6f 6d 70  rovided for comp
14630 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 6f  atibility with o
14640 74 68 65 72 20 64 61 74 61 62 61 73 65 0a 65 6e  ther database.en
14650 67 69 6e 65 73 2e 20 20 42 75 74 20 62 65 63 61  gines.  But beca
14660 75 73 65 20 69 74 20 69 73 20 65 61 73 79 20 74  use it is easy t
14670 6f 20 6d 69 73 63 6f 75 6e 74 20 74 68 65 20 71  o miscount the q
14680 75 65 73 74 69 6f 6e 20 6d 61 72 6b 73 2c 20 74  uestion marks, t
14690 68 65 0a 75 73 65 20 6f 66 20 74 68 69 73 20 70  he.use of this p
146a0 61 72 61 6d 65 74 65 72 20 66 6f 72 6d 61 74 20  arameter format 
146b0 69 73 20 64 69 73 63 6f 75 72 61 67 65 64 2e 20  is discouraged. 
146c0 20 50 72 6f 67 72 61 6d 6d 65 72 73 20 61 72 65   Programmers are
146d0 20 65 6e 63 6f 75 72 61 67 65 64 0a 74 6f 20 75   encouraged.to u
146e0 73 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 73 79  se one of the sy
146f0 6d 62 6f 6c 69 63 20 66 6f 72 6d 61 74 73 20 62  mbolic formats b
14700 65 6c 6f 77 20 6f 72 20 74 68 65 20 3f 4e 4e 4e  elow or the ?NNN
14710 20 66 6f 72 6d 61 74 20 61 62 6f 76 65 20 69 6e   format above in
14720 73 74 65 61 64 2e 0a 3c 2f 74 64 3e 0a 3c 2f 74  stead..</td>.</t
14730 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  r>.<tr>.<td alig
14740 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e  n="right" valign
14750 3d 22 74 6f 70 22 3e 3c 62 3e 3a 3c 2f 62 3e 3c  ="top"><b>:</b><
14760 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c  i>AAAA</i></td><
14770 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f  td width="20"></
14780 74 64 3e 0a 3c 74 64 3e 5e 41 20 63 6f 6c 6f 6e  td>.<td>^A colon
14790 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20   followed by an 
147a0 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20  identifier name 
147b0 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72  holds a spot for
147c0 20 61 20 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e   a .[sqlite3_bin
147d0 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
147e0 7c 6e 61 6d 65 64 20 70 61 72 61 6d 65 74 65 72  |named parameter
147f0 5d 20 77 69 74 68 20 74 68 65 20 6e 61 6d 65 20  ] with the name 
14800 3a 41 41 41 41 2e 20 20 0a 5e 28 4e 61 6d 65 64  :AAAA.  .^(Named
14810 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20   parameters are 
14820 61 6c 73 6f 20 6e 75 6d 62 65 72 65 64 2e 20 54  also numbered. T
14830 68 65 20 6e 75 6d 62 65 72 20 61 73 73 69 67 6e  he number assign
14840 65 64 20 69 73 20 6f 6e 65 20 67 72 65 61 74 65  ed is one greate
14850 72 20 74 68 61 6e 0a 74 68 65 20 6c 61 72 67 65  r than.the large
14860 73 74 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d  st parameter num
14870 62 65 72 20 61 6c 72 65 61 64 79 20 61 73 73 69  ber already assi
14880 67 6e 65 64 2e 29 5e 20 5e 49 66 20 74 68 69 73  gned.)^ ^If this
14890 20 6d 65 61 6e 73 20 74 68 65 20 70 61 72 61 6d   means the param
148a0 65 74 65 72 0a 77 6f 75 6c 64 20 62 65 20 61 73  eter.would be as
148b0 73 69 67 6e 65 64 20 61 20 6e 75 6d 62 65 72 20  signed a number 
148c0 67 72 65 61 74 65 72 20 74 68 61 6e 20 5b 53 51  greater than [SQ
148d0 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
148e0 45 5f 4e 55 4d 42 45 52 5d 2c 20 69 74 20 69 73  E_NUMBER], it is
148f0 0a 61 6e 20 65 72 72 6f 72 2e 20 54 6f 20 61 76  .an error. To av
14900 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 2c 20 69  oid confusion, i
14910 74 20 69 73 20 62 65 73 74 20 74 6f 20 61 76 6f  t is best to avo
14920 69 64 20 6d 69 78 69 6e 67 20 6e 61 6d 65 64 20  id mixing named 
14930 61 6e 64 20 6e 75 6d 62 65 72 65 64 0a 70 61 72  and numbered.par
14940 61 6d 65 74 65 72 73 2e 3c 2f 74 64 3e 0a 3c 2f  ameters.</td>.</
14950 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  tr>.<tr>.<td ali
14960 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67  gn="right" valig
14970 6e 3d 22 74 6f 70 22 3e 3c 62 3e 40 3c 2f 62 3e  n="top"><b>@</b>
14980 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e  <i>AAAA</i></td>
14990 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c  <td width="20"><
149a0 2f 74 64 3e 0a 3c 74 64 3e 5e 41 6e 20 22 61 74  /td>.<td>^An "at
149b0 22 20 73 69 67 6e 20 77 6f 72 6b 73 20 65 78 61  " sign works exa
149c0 63 74 6c 79 20 6c 69 6b 65 20 61 20 63 6f 6c 6f  ctly like a colo
149d0 6e 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 74  n, except that t
149e0 68 65 20 6e 61 6d 65 20 6f 66 0a 74 68 65 20 70  he name of.the p
149f0 61 72 61 6d 65 74 65 72 20 63 72 65 61 74 65 64  arameter created
14a00 20 69 73 20 40 41 41 41 41 2e 3c 2f 74 64 3e 0a   is @AAAA.</td>.
14a10 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61  </tr>.<tr>.<td a
14a20 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c  lign="right" val
14a30 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 24 3c 2f  ign="top"><b>$</
14a40 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74  b><i>AAAA</i></t
14a50 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22  d><td width="20"
14a60 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20 64 6f  ></td>.<td>^A do
14a70 6c 6c 61 72 2d 73 69 67 6e 20 66 6f 6c 6c 6f 77  llar-sign follow
14a80 65 64 20 62 79 20 61 6e 20 69 64 65 6e 74 69 66  ed by an identif
14a90 69 65 72 20 6e 61 6d 65 20 61 6c 73 6f 20 68 6f  ier name also ho
14aa0 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20 61  lds a spot for a
14ab0 20 6e 61 6d 65 64 0a 70 61 72 61 6d 65 74 65 72   named.parameter
14ac0 20 77 69 74 68 20 74 68 65 20 6e 61 6d 65 20 24   with the name $
14ad0 41 41 41 41 2e 20 20 5e 28 54 68 65 20 69 64 65  AAAA.  ^(The ide
14ae0 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 69 6e 20  ntifier name in 
14af0 74 68 69 73 20 63 61 73 65 20 63 61 6e 20 69 6e  this case can in
14b00 63 6c 75 64 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72  clude.one or mor
14b10 65 20 6f 63 63 75 72 72 65 6e 63 65 73 20 6f 66  e occurrences of
14b20 20 22 3a 3a 22 20 61 6e 64 20 61 20 73 75 66 66   "::" and a suff
14b30 69 78 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 22  ix enclosed in "
14b40 28 2e 2e 2e 29 22 20 63 6f 6e 74 61 69 6e 69 6e  (...)" containin
14b50 67 0a 61 6e 79 20 74 65 78 74 20 61 74 20 61 6c  g.any text at al
14b60 6c 2e 29 5e 20 20 54 68 69 73 20 73 79 6e 74 61  l.)^  This synta
14b70 78 20 69 73 20 74 68 65 20 66 6f 72 6d 20 6f 66  x is the form of
14b80 20 61 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65   a variable name
14b90 20 69 6e 20 74 68 65 0a 5b 68 74 74 70 3a 2f 2f   in the.[http://
14ba0 77 77 77 2e 74 63 6c 2d 6c 61 6e 67 2e 6f 72 67  www.tcl-lang.org
14bb0 2f 20 7c 20 54 63 6c 20 70 72 6f 67 72 61 6d 6d  / | Tcl programm
14bc0 69 6e 67 20 6c 61 6e 67 75 61 67 65 5d 2e 20 20  ing language].  
14bd0 54 68 65 20 70 72 65 73 65 6e 63 65 0a 6f 66 20  The presence.of 
14be0 74 68 69 73 20 73 79 6e 74 61 78 20 72 65 73 75  this syntax resu
14bf0 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 66 61 63  lts from the fac
14c00 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 69 73  t that SQLite is
14c10 20 72 65 61 6c 6c 79 20 61 20 0a 5b 54 63 6c 20   really a .[Tcl 
14c20 65 78 74 65 6e 73 69 6f 6e 5d 20 74 68 61 74 20  extension] that 
14c30 68 61 73 20 65 73 63 61 70 65 64 20 69 6e 74 6f  has escaped into
14c40 20 74 68 65 20 77 69 6c 64 2e 3c 2f 74 64 3e 0a   the wild.</td>.
14c50 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  </tr>.</table>.<
14c60 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
14c70 3e 5e 50 61 72 61 6d 65 74 65 72 73 20 74 68 61  >^Parameters tha
14c80 74 20 61 72 65 20 6e 6f 74 20 61 73 73 69 67 6e  t are not assign
14c90 65 64 20 76 61 6c 75 65 73 20 75 73 69 6e 67 0a  ed values using.
14ca0 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c  [sqlite3_bind_bl
14cb0 6f 62 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62  ob() | sqlite3_b
14cc0 69 6e 64 28 29 5d 20 61 72 65 20 74 72 65 61 74  ind()] are treat
14cd0 65 64 0a 61 73 20 4e 55 4c 4c 2e 20 20 54 68 65  ed.as NULL.  The
14ce0 20 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70   [sqlite3_bind_p
14cf0 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28 29  arameter_index()
14d00 5d 20 69 6e 74 65 72 66 61 63 65 20 63 61 6e 20  ] interface can 
14d10 62 65 20 75 73 65 64 0a 74 6f 20 74 72 61 6e 73  be used.to trans
14d20 6c 61 74 65 20 61 20 73 79 6d 62 6f 6c 69 63 20  late a symbolic 
14d30 70 61 72 61 6d 65 74 65 72 20 6e 61 6d 65 20 69  parameter name i
14d40 6e 74 6f 20 69 74 73 20 65 71 75 69 76 61 6c 65  nto its equivale
14d50 6e 74 20 6e 75 6d 65 72 69 63 20 69 6e 64 65 78  nt numeric index
14d60 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6d  .</p>..<p>^The m
14d70 61 78 69 6d 75 6d 20 70 61 72 61 6d 65 74 65 72  aximum parameter
14d80 20 6e 75 6d 62 65 72 20 69 73 20 73 65 74 20 61   number is set a
14d90 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 62  t compile-time b
14da0 79 0a 74 68 65 20 5b 53 51 4c 49 54 45 5f 4d 41  y.the [SQLITE_MA
14db0 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
14dc0 52 5d 20 6d 61 63 72 6f 2e 20 20 5e 28 41 6e 20  R] macro.  ^(An 
14dd0 69 6e 64 69 76 69 64 75 61 6c 20 5b 64 61 74 61  individual [data
14de0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d  base connection]
14df0 0a 44 20 63 61 6e 20 72 65 64 75 63 65 20 69 74  .D can reduce it
14e00 73 20 6d 61 78 69 6d 75 6d 20 70 61 72 61 6d 65  s maximum parame
14e10 74 65 72 20 6e 75 6d 62 65 72 20 62 65 6c 6f 77  ter number below
14e20 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   the compile-tim
14e30 65 20 6d 61 78 69 6d 75 6d 0a 75 73 69 6e 67 20  e maximum.using 
14e40 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d  the [sqlite3_lim
14e50 69 74 5d 28 44 2c 20 5b 53 51 4c 49 54 45 5f 4c  it](D, [SQLITE_L
14e60 49 4d 49 54 5f 56 41 52 49 41 42 4c 45 5f 4e 55  IMIT_VARIABLE_NU
14e70 4d 42 45 52 5d 2c 2e 2e 2e 29 20 69 6e 74 65 72  MBER],...) inter
14e80 66 61 63 65 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 74  face.)^.</p>..<t
14e90 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c  cl>hd_fragment l
14ea0 69 6b 65 20 4c 49 4b 45 20 45 53 43 41 50 45 3c  ike LIKE ESCAPE<
14eb0 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 4c 49  /tcl>.<h3>The LI
14ec0 4b 45 2c 20 47 4c 4f 42 2c 20 52 45 47 45 58 50  KE, GLOB, REGEXP
14ed0 2c 20 61 6e 64 20 4d 41 54 43 48 20 6f 70 65 72  , and MATCH oper
14ee0 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 54  ators</h3>.<p>^T
14ef0 68 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72  he LIKE operator
14f00 20 64 6f 65 73 20 61 20 70 61 74 74 65 72 6e 20   does a pattern 
14f10 6d 61 74 63 68 69 6e 67 20 63 6f 6d 70 61 72 69  matching compari
14f20 73 6f 6e 2e 20 5e 54 68 65 20 6f 70 65 72 61 6e  son. ^The operan
14f30 64 0a 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f  d.to the right o
14f40 66 20 74 68 65 20 4c 49 4b 45 20 6f 70 65 72 61  f the LIKE opera
14f50 74 6f 72 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  tor contains the
14f60 20 70 61 74 74 65 72 6e 20 61 6e 64 20 74 68 65   pattern and the
14f70 20 6c 65 66 74 20 68 61 6e 64 0a 6f 70 65 72 61   left hand.opera
14f80 6e 64 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  nd contains the 
14f90 73 74 72 69 6e 67 20 74 6f 20 6d 61 74 63 68 20  string to match 
14fa0 61 67 61 69 6e 73 74 20 74 68 65 20 70 61 74 74  against the patt
14fb0 65 72 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75  ern...<tcl>hd_pu
14fc0 74 73 20 22 5e 41 20 70 65 72 63 65 6e 74 20 73  ts "^A percent s
14fd0 79 6d 62 6f 6c 20 28 5c 22 25 5c 22 29 20 69 6e  ymbol (\"%\") in
14fe0 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74 65 72   the LIKE patter
14ff0 6e 20 6d 61 74 63 68 65 73 20 61 6e 79 0a 73 65  n matches any.se
15000 71 75 65 6e 63 65 20 6f 66 20 7a 65 72 6f 20 6f  quence of zero o
15010 72 20 6d 6f 72 65 20 63 68 61 72 61 63 74 65 72  r more character
15020 73 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67 2e  s in the string.
15030 20 20 5e 41 6e 20 75 6e 64 65 72 73 63 6f 72 65    ^An underscore
15040 0a 28 5c 22 5f 5c 22 29 20 69 6e 20 74 68 65 20  .(\"_\") in the 
15050 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 6d 61 74  LIKE pattern mat
15060 63 68 65 73 20 61 6e 79 20 73 69 6e 67 6c 65 20  ches any single 
15070 63 68 61 72 61 63 74 65 72 20 69 6e 20 74 68 65  character in the
15080 0a 73 74 72 69 6e 67 2e 20 20 5e 28 41 6e 79 20  .string.  ^(Any 
15090 6f 74 68 65 72 20 63 68 61 72 61 63 74 65 72 20  other character 
150a0 6d 61 74 63 68 65 73 20 69 74 73 65 6c 66 20 6f  matches itself o
150b0 72 20 69 74 73 20 6c 6f 77 65 72 2f 75 70 70 65  r its lower/uppe
150c0 72 20 63 61 73 65 0a 65 71 75 69 76 61 6c 65 6e  r case.equivalen
150d0 74 20 28 69 2e 65 2e 20 63 61 73 65 2d 69 6e 73  t (i.e. case-ins
150e0 65 6e 73 69 74 69 76 65 20 6d 61 74 63 68 69 6e  ensitive matchin
150f0 67 29 2e 29 5e 0a 0a 3c 75 3e 49 6d 70 6f 72 74  g).)^..<u>Import
15100 61 6e 74 20 4e 6f 74 65 3a 3c 2f 75 3e 20 5e 53  ant Note:</u> ^S
15110 51 4c 69 74 65 20 6f 6e 6c 79 0a 75 6e 64 65 72  QLite only.under
15120 73 74 61 6e 64 73 20 75 70 70 65 72 2f 6c 6f 77  stands upper/low
15130 65 72 20 63 61 73 65 20 66 6f 72 20 41 53 43 49  er case for ASCI
15140 49 20 63 68 61 72 61 63 74 65 72 73 20 62 79 20  I characters by 
15150 64 65 66 61 75 6c 74 2e 20 20 5e 54 68 65 0a 4c  default.  ^The.L
15160 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 69 73 20  IKE operator is 
15170 63 61 73 65 20 73 65 6e 73 69 74 69 76 65 20 62  case sensitive b
15180 79 20 64 65 66 61 75 6c 74 20 66 6f 72 20 75 6e  y default for un
15190 69 63 6f 64 65 20 63 68 61 72 61 63 74 65 72 73  icode characters
151a0 20 74 68 61 74 20 61 72 65 0a 62 65 79 6f 6e 64   that are.beyond
151b0 20 74 68 65 20 41 53 43 49 49 20 72 61 6e 67 65   the ASCII range
151c0 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 0a  .  For example,.
151d0 5e 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20  ^the expression 
151e0 3c 62 3e 27 61 27 26 6e 62 73 70 3b 4c 49 4b 45  <b>'a'&nbsp;LIKE
151f0 26 6e 62 73 70 3b 27 41 27 3c 2f 62 3e 0a 69 73  &nbsp;'A'</b>.is
15200 20 54 52 55 45 20 62 75 74 20 3c 62 3e 27 26 61   TRUE but <b>'&a
15210 65 6c 69 67 3b 27 26 6e 62 73 70 3b 4c 49 4b 45  elig;'&nbsp;LIKE
15220 26 6e 62 73 70 3b 27 26 41 45 6c 69 67 3b 27 3c  &nbsp;'&AElig;'<
15230 2f 62 3e 20 69 73 20 46 41 4c 53 45 2e 22 3c 2f  /b> is FALSE."</
15240 74 63 6c 3e 0a 54 68 65 20 49 43 55 20 65 78 74  tcl>.The ICU ext
15250 65 6e 73 69 6f 6e 20 74 6f 20 53 51 4c 69 74 65  ension to SQLite
15260 20 69 6e 63 6c 75 64 65 73 20 61 6e 20 65 6e 68   includes an enh
15270 61 6e 63 65 64 20 76 65 72 73 69 6f 6e 20 6f 66  anced version of
15280 20 74 68 65 0a 4c 49 4b 45 20 6f 70 65 72 61 74   the.LIKE operat
15290 6f 72 20 74 68 61 74 20 64 6f 65 73 20 63 61 73  or that does cas
152a0 65 20 66 6f 6c 64 69 6e 67 20 61 63 72 6f 73 73  e folding across
152b0 20 61 6c 6c 20 75 6e 69 63 6f 64 65 20 63 68 61   all unicode cha
152c0 72 61 63 74 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 70  racters.</p>..<p
152d0 3e 5e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61  >^If the optiona
152e0 6c 20 45 53 43 41 50 45 20 63 6c 61 75 73 65 20  l ESCAPE clause 
152f0 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e  is present, then
15300 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a   the expression.
15310 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 45 53  following the ES
15320 43 41 50 45 20 6b 65 79 77 6f 72 64 20 6d 75 73  CAPE keyword mus
15330 74 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61 20  t evaluate to a 
15340 73 74 72 69 6e 67 20 63 6f 6e 73 69 73 74 69 6e  string consistin
15350 67 20 6f 66 0a 61 20 73 69 6e 67 6c 65 20 63 68  g of.a single ch
15360 61 72 61 63 74 65 72 2e 20 5e 54 68 69 73 20 63  aracter. ^This c
15370 68 61 72 61 63 74 65 72 20 6d 61 79 20 62 65 20  haracter may be 
15380 75 73 65 64 20 69 6e 20 74 68 65 20 4c 49 4b 45  used in the LIKE
15390 20 70 61 74 74 65 72 6e 0a 74 6f 20 69 6e 63 6c   pattern.to incl
153a0 75 64 65 20 6c 69 74 65 72 61 6c 20 70 65 72 63  ude literal perc
153b0 65 6e 74 20 6f 72 20 75 6e 64 65 72 73 63 6f 72  ent or underscor
153c0 65 20 63 68 61 72 61 63 74 65 72 73 2e 20 5e 54  e characters. ^T
153d0 68 65 20 65 73 63 61 70 65 0a 63 68 61 72 61 63  he escape.charac
153e0 74 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  ter followed by 
153f0 61 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c  a percent symbol
15400 20 28 25 29 2c 20 75 6e 64 65 72 73 63 6f 72 65   (%), underscore
15410 20 28 5f 29 2c 20 6f 72 20 61 20 73 65 63 6f 6e   (_), or a secon
15420 64 0a 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  d.instance of th
15430 65 20 65 73 63 61 70 65 20 63 68 61 72 61 63 74  e escape charact
15440 65 72 20 69 74 73 65 6c 66 20 6d 61 74 63 68 65  er itself matche
15450 73 20 61 0a 6c 69 74 65 72 61 6c 20 70 65 72 63  s a.literal perc
15460 65 6e 74 20 73 79 6d 62 6f 6c 2c 20 75 6e 64 65  ent symbol, unde
15470 72 73 63 6f 72 65 2c 20 6f 72 20 61 20 73 69 6e  rscore, or a sin
15480 67 6c 65 20 65 73 63 61 70 65 20 63 68 61 72 61  gle escape chara
15490 63 74 65 72 2c 0a 72 65 73 70 65 63 74 69 76 65  cter,.respective
154a0 6c 79 2e 0a 0a 3c 70 3e 5e 54 68 65 20 69 6e 66  ly...<p>^The inf
154b0 69 78 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72  ix LIKE operator
154c0 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20   is implemented 
154d0 62 79 20 63 61 6c 6c 69 6e 67 20 74 68 65 0a 61  by calling the.a
154e0 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e  pplication-defin
154f0 65 64 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73  ed SQL functions
15500 20 5b 6c 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c   [like(<i>Y</i>,
15510 3c 69 3e 58 3c 2f 69 3e 29 5d 20 6f 72 0a 5b 6c  <i>X</i>)] or.[l
15520 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e  ike(<i>Y</i>,<i>
15530 58 3c 2f 69 3e 2c 3c 69 3e 5a 3c 2f 69 3e 29 5d  X</i>,<i>Z</i>)]
15540 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  </a>.</p>..<p>^T
15550 68 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72  he LIKE operator
15560 20 63 61 6e 20 62 65 20 6d 61 64 65 20 63 61 73   can be made cas
15570 65 20 73 65 6e 73 69 74 69 76 65 20 75 73 69 6e  e sensitive usin
15580 67 20 74 68 65 0a 5b 63 61 73 65 5f 73 65 6e 73  g the.[case_sens
15590 69 74 69 76 65 5f 6c 69 6b 65 20 70 72 61 67 6d  itive_like pragm
155a0 61 5d 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  a].</p>..<tcl>hd
155b0 5f 66 72 61 67 6d 65 6e 74 20 67 6c 6f 62 20 47  _fragment glob G
155c0 4c 4f 42 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68  LOB</tcl>.<p>^Th
155d0 65 20 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72 20  e GLOB operator 
155e0 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4c 49  is similar to LI
155f0 4b 45 20 62 75 74 20 75 73 65 73 20 74 68 65 20  KE but uses the 
15600 55 6e 69 78 0a 66 69 6c 65 20 67 6c 6f 62 62 69  Unix.file globbi
15610 6e 67 20 73 79 6e 74 61 78 20 66 6f 72 20 69 74  ng syntax for it
15620 73 20 77 69 6c 64 63 61 72 64 73 2e 20 20 5e 41  s wildcards.  ^A
15630 6c 73 6f 2c 20 47 4c 4f 42 20 69 73 20 63 61 73  lso, GLOB is cas
15640 65 0a 73 65 6e 73 69 74 69 76 65 2c 20 75 6e 6c  e.sensitive, unl
15650 69 6b 65 20 4c 49 4b 45 2e 20 20 5e 42 6f 74 68  ike LIKE.  ^Both
15660 20 47 4c 4f 42 20 61 6e 64 20 4c 49 4b 45 20 6d   GLOB and LIKE m
15670 61 79 20 62 65 20 70 72 65 63 65 64 65 64 20 62  ay be preceded b
15680 79 0a 74 68 65 20 4e 4f 54 20 6b 65 79 77 6f 72  y.the NOT keywor
15690 64 20 74 6f 20 69 6e 76 65 72 74 20 74 68 65 20  d to invert the 
156a0 73 65 6e 73 65 20 6f 66 20 74 68 65 20 74 65 73  sense of the tes
156b0 74 2e 20 20 5e 54 68 65 20 69 6e 66 69 78 20 47  t.  ^The infix G
156c0 4c 4f 42 20 0a 6f 70 65 72 61 74 6f 72 20 69 73  LOB .operator is
156d0 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
156e0 63 61 6c 6c 69 6e 67 20 74 68 65 20 66 75 6e 63  calling the func
156f0 74 69 6f 6e 0a 5b 67 6c 6f 62 28 3c 69 3e 59 3c  tion.[glob(<i>Y<
15700 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20 61  /i>,<i>X</i>)] a
15710 6e 64 20 63 61 6e 20 62 65 20 6d 6f 64 69 66 69  nd can be modifi
15720 65 64 20 62 79 20 6f 76 65 72 72 69 64 69 6e 67  ed by overriding
15730 0a 74 68 61 74 20 66 75 6e 63 74 69 6f 6e 2e 3c  .that function.<
15740 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
15750 67 6d 65 6e 74 20 72 65 67 65 78 70 20 52 45 47  gment regexp REG
15760 45 58 50 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68  EXP</tcl>.<p>^Th
15770 65 20 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f  e REGEXP operato
15780 72 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 73  r is a special s
15790 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 72 65  yntax for the re
157a0 67 65 78 70 28 29 0a 75 73 65 72 20 66 75 6e 63  gexp().user func
157b0 74 69 6f 6e 2e 20 20 5e 4e 6f 20 72 65 67 65 78  tion.  ^No regex
157c0 70 28 29 20 75 73 65 72 20 66 75 6e 63 74 69 6f  p() user functio
157d0 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  n is defined by 
157e0 64 65 66 61 75 6c 74 0a 61 6e 64 20 73 6f 20 75  default.and so u
157f0 73 65 20 6f 66 20 74 68 65 20 52 45 47 45 58 50  se of the REGEXP
15800 20 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c 20 6e   operator will n
15810 6f 72 6d 61 6c 6c 79 20 72 65 73 75 6c 74 20 69  ormally result i
15820 6e 20 61 6e 0a 65 72 72 6f 72 20 6d 65 73 73 61  n an.error messa
15830 67 65 2e 20 20 5e 49 66 20 61 6e 20 5b 61 70 70  ge.  ^If an [app
15840 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
15850 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 5d 20 6e   SQL function] n
15860 61 6d 65 64 20 22 72 65 67 65 78 70 22 0a 69 73  amed "regexp".is
15870 20 61 64 64 65 64 20 61 74 20 72 75 6e 2d 74 69   added at run-ti
15880 6d 65 2c 20 74 68 65 6e 20 74 68 65 20 22 3c 69  me, then the "<i
15890 3e 58 3c 2f 69 3e 20 52 45 47 45 58 50 20 3c 69  >X</i> REGEXP <i
158a0 3e 59 3c 2f 69 3e 22 20 6f 70 65 72 61 74 6f 72  >Y</i>" operator
158b0 20 77 69 6c 6c 0a 62 65 20 69 6d 70 6c 65 6d 65   will.be impleme
158c0 6e 74 65 64 20 61 73 20 61 20 63 61 6c 6c 20 74  nted as a call t
158d0 6f 20 22 72 65 67 65 78 70 28 3c 69 3e 59 3c 2f  o "regexp(<i>Y</
158e0 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 22 2e 3c 2f  i>,<i>X</i>)".</
158f0 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
15900 6d 65 6e 74 20 6d 61 74 63 68 20 4d 41 54 43 48  ment match MATCH
15910 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 4d  </tcl>.<p>^The M
15920 41 54 43 48 20 6f 70 65 72 61 74 6f 72 20 69 73  ATCH operator is
15930 20 61 20 73 70 65 63 69 61 6c 20 73 79 6e 74 61   a special synta
15940 78 20 66 6f 72 20 74 68 65 20 6d 61 74 63 68 28  x for the match(
15950 29 0a 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65  ).application-de
15960 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 2e 20  fined function. 
15970 20 5e 54 68 65 20 64 65 66 61 75 6c 74 20 6d 61   ^The default ma
15980 74 63 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 69  tch() function i
15990 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 72 61  mplementation.ra
159a0 69 73 65 73 20 61 6e 20 65 78 63 65 70 74 69 6f  ises an exceptio
159b0 6e 20 61 6e 64 20 69 73 20 6e 6f 74 20 72 65 61  n and is not rea
159c0 6c 6c 79 20 75 73 65 66 75 6c 20 66 6f 72 20 61  lly useful for a
159d0 6e 79 74 68 69 6e 67 2e 0a 5e 42 75 74 20 65 78  nything..^But ex
159e0 74 65 6e 73 69 6f 6e 73 20 63 61 6e 20 6f 76 65  tensions can ove
159f0 72 72 69 64 65 20 74 68 65 20 6d 61 74 63 68 28  rride the match(
15a00 29 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  ) function with 
15a10 6d 6f 72 65 0a 68 65 6c 70 66 75 6c 20 6c 6f 67  more.helpful log
15a20 69 63 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ic.</p>..<tcl>hd
15a30 5f 66 72 61 67 6d 65 6e 74 20 62 65 74 77 65 65  _fragment betwee
15a40 6e 20 42 45 54 57 45 45 4e 3c 2f 74 63 6c 3e 0a  n BETWEEN</tcl>.
15a50 3c 68 33 3e 54 68 65 20 42 45 54 57 45 45 4e 20  <h3>The BETWEEN 
15a60 6f 70 65 72 61 74 6f 72 3c 2f 68 33 3e 0a 3c 70  operator</h3>.<p
15a70 3e 5e 28 54 68 65 20 42 45 54 57 45 45 4e 20 6f  >^(The BETWEEN o
15a80 70 65 72 61 74 6f 72 20 69 73 20 6c 6f 67 69 63  perator is logic
15a90 61 6c 6c 79 20 65 71 75 69 76 61 6c 65 6e 74 20  ally equivalent 
15aa0 74 6f 20 61 20 70 61 69 72 20 6f 66 20 63 6f 6d  to a pair of com
15ab0 70 61 72 69 73 6f 6e 73 2e 0a 22 3c 69 3e 78 3c  parisons.."<i>x<
15ac0 2f 69 3e 20 3c 62 3e 42 45 54 57 45 45 4e 3c 2f  /i> <b>BETWEEN</
15ad0 62 3e 20 3c 69 3e 79 3c 2f 69 3e 20 3c 62 3e 41  b> <i>y</i> <b>A
15ae0 4e 44 3c 2f 62 3e 20 3c 69 3e 7a 3c 2f 69 3e 22  ND</b> <i>z</i>"
15af0 20 69 73 20 0a 65 71 75 69 76 61 6c 65 6e 74 20   is .equivalent 
15b00 74 6f 20 0a 22 3c 69 3e 78 3c 2f 69 3e 3c 62 3e  to ."<i>x</i><b>
15b10 26 67 74 3b 3d 3c 2f 62 3e 3c 69 3e 79 3c 2f 69  &gt;=</b><i>y</i
15b20 3e 20 3c 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e  > <b>AND</b> <i>
15b30 78 3c 2f 69 3e 3c 62 3e 26 6c 74 3b 3d 3c 2f 62  x</i><b>&lt;=</b
15b40 3e 3c 69 3e 7a 3c 2f 69 3e 22 20 65 78 63 65 70  ><i>z</i>" excep
15b50 74 0a 74 68 61 74 20 77 69 74 68 20 42 45 54 57  t.that with BETW
15b60 45 45 4e 2c 20 74 68 65 20 3c 69 3e 78 3c 2f 69  EEN, the <i>x</i
15b70 3e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  > expression is 
15b80 6f 6e 6c 79 20 65 76 61 6c 75 61 74 65 64 20 6f  only evaluated o
15b90 6e 63 65 2e 29 5e 0a 5e 54 68 65 20 70 72 65 63  nce.)^.^The prec
15ba0 65 64 65 6e 63 65 20 6f 66 20 74 68 65 20 42 45  edence of the BE
15bb0 54 57 45 45 4e 20 6f 70 65 72 61 74 6f 72 20 69  TWEEN operator i
15bc0 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68  s the same as th
15bd0 65 20 70 72 65 63 65 64 65 6e 63 65 0a 61 73 20  e precedence.as 
15be0 6f 70 65 72 61 74 6f 72 73 20 3c 62 3e 3d 3d 3c  operators <b>==<
15bf0 2f 62 3e 20 61 6e 64 20 3c 62 3e 21 3d 3c 2f 62  /b> and <b>!=</b
15c00 3e 20 61 6e 64 20 3c 62 3e 4c 49 4b 45 3c 2f 62  > and <b>LIKE</b
15c10 3e 20 61 6e 64 20 67 72 6f 75 70 73 20 6c 65 66  > and groups lef
15c20 74 20 74 6f 20 72 69 67 68 74 2e 0a 0a 3c 74 63  t to right...<tc
15c30 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 61  l>hd_fragment ca
15c40 73 65 20 7b 43 41 53 45 20 65 78 70 72 65 73 73  se {CASE express
15c50 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54  ion}</tcl>.<h3>T
15c60 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69  he CASE expressi
15c70 6f 6e 3c 2f 68 33 3e 0a 3c 70 3e 41 20 43 41 53  on</h3>.<p>A CAS
15c80 45 20 65 78 70 72 65 73 73 69 6f 6e 20 73 65 72  E expression ser
15c90 76 65 73 20 61 20 72 6f 6c 65 20 73 69 6d 69 6c  ves a role simil
15ca0 61 72 20 74 6f 20 49 46 2d 54 48 45 4e 2d 45 4c  ar to IF-THEN-EL
15cb0 53 45 20 69 6e 20 6f 74 68 65 72 0a 70 72 6f 67  SE in other.prog
15cc0 72 61 6d 6d 69 6e 67 20 6c 61 6e 67 75 61 67 65  ramming language
15cd0 73 2e 20 20 0a 0a 3c 70 3e 54 68 65 20 6f 70 74  s.  ..<p>The opt
15ce0 69 6f 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e  ional expression
15cf0 20 74 68 61 74 20 6f 63 63 75 72 73 20 69 6e 20   that occurs in 
15d00 62 65 74 77 65 65 6e 20 74 68 65 20 43 41 53 45  between the CASE
15d10 20 6b 65 79 77 6f 72 64 20 61 6e 64 20 74 68 65   keyword and the
15d20 0a 66 69 72 73 74 20 57 48 45 4e 20 6b 65 79 77  .first WHEN keyw
15d30 6f 72 64 20 69 73 20 63 61 6c 6c 65 64 20 74 68  ord is called th
15d40 65 20 22 62 61 73 65 22 20 65 78 70 72 65 73 73  e "base" express
15d50 69 6f 6e 2e 20 5e 54 68 65 72 65 20 61 72 65 20  ion. ^There are 
15d60 74 77 6f 20 62 61 73 69 63 20 66 6f 72 6d 73 0a  two basic forms.
15d70 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70 72  of the CASE expr
15d80 65 73 73 69 6f 6e 3a 20 74 68 6f 73 65 20 77 69  ession: those wi
15d90 74 68 20 61 20 62 61 73 65 20 65 78 70 72 65 73  th a base expres
15da0 73 69 6f 6e 20 61 6e 64 20 74 68 6f 73 65 20 77  sion and those w
15db0 69 74 68 6f 75 74 2e 0a 0a 3c 70 3e 5e 49 6e 20  ithout...<p>^In 
15dc0 61 20 43 41 53 45 20 77 69 74 68 6f 75 74 20 61  a CASE without a
15dd0 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e   base expression
15de0 2c 20 65 61 63 68 20 57 48 45 4e 20 65 78 70 72  , each WHEN expr
15df0 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61  ession is evalua
15e00 74 65 64 0a 61 6e 64 20 74 68 65 20 72 65 73 75  ted.and the resu
15e10 6c 74 20 74 72 65 61 74 65 64 20 61 73 20 61 20  lt treated as a 
15e20 62 6f 6f 6c 65 61 6e 2c 20 73 74 61 72 74 69 6e  boolean, startin
15e30 67 20 77 69 74 68 20 74 68 65 20 6c 65 66 74 6d  g with the leftm
15e40 6f 73 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 69  ost and continui
15e50 6e 67 0a 74 6f 20 74 68 65 20 72 69 67 68 74 2e  ng.to the right.
15e60 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20   ^The result of 
15e70 74 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73  the CASE express
15e80 69 6f 6e 20 69 73 20 74 68 65 20 65 76 61 6c 75  ion is the evalu
15e90 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 54 48 45  ation of the THE
15ea0 4e 0a 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  N.expression tha
15eb0 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
15ec0 20 74 68 65 20 66 69 72 73 74 20 57 48 45 4e 20   the first WHEN 
15ed0 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
15ee0 65 76 61 6c 75 61 74 65 73 20 74 6f 0a 74 72 75  evaluates to.tru
15ef0 65 2e 20 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65 20  e. ^Or, if none 
15f00 6f 66 20 74 68 65 20 57 48 45 4e 20 65 78 70 72  of the WHEN expr
15f10 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65  essions evaluate
15f20 20 74 6f 20 74 72 75 65 2c 20 74 68 65 20 72 65   to true, the re
15f30 73 75 6c 74 20 6f 66 0a 65 76 61 6c 75 61 74 69  sult of.evaluati
15f40 6e 67 20 74 68 65 20 45 4c 53 45 20 65 78 70 72  ng the ELSE expr
15f50 65 73 73 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 20  ession, if any. 
15f60 5e 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ^If there is no 
15f70 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  ELSE expression 
15f80 61 6e 64 0a 6e 6f 6e 65 20 6f 66 20 74 68 65 20  and.none of the 
15f90 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 73  WHEN expressions
15fa0 20 61 72 65 20 74 72 75 65 2c 20 74 68 65 6e 20   are true, then 
15fb0 74 68 65 20 6f 76 65 72 61 6c 6c 20 72 65 73 75  the overall resu
15fc0 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e  lt is NULL...<p>
15fd0 5e 41 20 4e 55 4c 4c 20 72 65 73 75 6c 74 20 69  ^A NULL result i
15fe0 73 20 63 6f 6e 73 69 64 65 72 65 64 20 75 6e 74  s considered unt
15ff0 72 75 65 20 77 68 65 6e 20 65 76 61 6c 75 61 74  rue when evaluat
16000 69 6e 67 20 57 48 45 4e 20 74 65 72 6d 73 2e 0a  ing WHEN terms..
16010 0a 3c 70 3e 5e 49 6e 20 61 20 43 41 53 45 20 77  .<p>^In a CASE w
16020 69 74 68 20 61 20 62 61 73 65 20 65 78 70 72 65  ith a base expre
16030 73 73 69 6f 6e 2c 20 74 68 65 20 62 61 73 65 20  ssion, the base 
16040 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76  expression is ev
16050 61 6c 75 61 74 65 64 20 6a 75 73 74 0a 6f 6e 63  aluated just.onc
16060 65 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74  e and the result
16070 20 69 73 20 63 6f 6d 70 61 72 65 64 20 61 67 61   is compared aga
16080 69 6e 73 74 20 74 68 65 20 65 76 61 6c 75 61 74  inst the evaluat
16090 69 6f 6e 20 6f 66 20 65 61 63 68 20 57 48 45 4e  ion of each WHEN
160a0 20 0a 65 78 70 72 65 73 73 69 6f 6e 20 66 72 6f   .expression fro
160b0 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e  m left to right.
160c0 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20   ^The result of 
160d0 74 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73  the CASE express
160e0 69 6f 6e 20 69 73 20 74 68 65 20 0a 65 76 61 6c  ion is the .eval
160f0 75 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 54 48  uation of the TH
16100 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  EN expression th
16110 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  at corresponds t
16120 6f 20 74 68 65 20 66 69 72 73 74 20 57 48 45 4e  o the first WHEN
16130 0a 65 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20  .expression for 
16140 77 68 69 63 68 20 74 68 65 20 63 6f 6d 70 61 72  which the compar
16150 69 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 5e 4f  ison is true. ^O
16160 72 2c 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68  r, if none of th
16170 65 20 57 48 45 4e 0a 65 78 70 72 65 73 73 69 6f  e WHEN.expressio
16180 6e 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61  ns evaluate to a
16190 20 76 61 6c 75 65 20 65 71 75 61 6c 20 74 6f 20   value equal to 
161a0 74 68 65 20 62 61 73 65 20 65 78 70 72 65 73 73  the base express
161b0 69 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c 74 0a  ion, the result.
161c0 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of evaluating th
161d0 65 20 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f  e ELSE expressio
161e0 6e 2c 20 69 66 20 61 6e 79 2e 20 5e 49 66 20 74  n, if any. ^If t
161f0 68 65 72 65 20 69 73 20 6e 6f 20 45 4c 53 45 20  here is no ELSE 
16200 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 0a 6e  expression and.n
16210 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e 20  one of the WHEN 
16220 65 78 70 72 65 73 73 69 6f 6e 73 20 70 72 6f 64  expressions prod
16230 75 63 65 20 61 20 72 65 73 75 6c 74 20 65 71 75  uce a result equ
16240 61 6c 20 74 6f 20 74 68 65 20 62 61 73 65 20 65  al to the base e
16250 78 70 72 65 73 73 69 6f 6e 2c 0a 74 68 65 20 6f  xpression,.the o
16260 76 65 72 61 6c 6c 20 72 65 73 75 6c 74 20 69 73  verall result is
16270 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e 57 68 65 6e   NULL...<p>^When
16280 20 63 6f 6d 70 61 72 69 6e 67 20 61 20 62 61 73   comparing a bas
16290 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 67 61  e expression aga
162a0 69 6e 73 74 20 61 20 57 48 45 4e 20 65 78 70 72  inst a WHEN expr
162b0 65 73 73 69 6f 6e 2c 20 74 68 65 20 73 61 6d 65  ession, the same
162c0 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65  .collating seque
162d0 6e 63 65 2c 20 61 66 66 69 6e 69 74 79 2c 20 61  nce, affinity, a
162e0 6e 64 20 4e 55 4c 4c 2d 68 61 6e 64 6c 69 6e 67  nd NULL-handling
162f0 20 72 75 6c 65 73 20 61 70 70 6c 79 20 61 73 20   rules apply as 
16300 69 66 20 74 68 65 0a 62 61 73 65 20 65 78 70 72  if the.base expr
16310 65 73 73 69 6f 6e 20 61 6e 64 20 57 48 45 4e 20  ession and WHEN 
16320 65 78 70 72 65 73 73 69 6f 6e 20 61 72 65 20 72  expression are r
16330 65 73 70 65 63 74 69 76 65 6c 79 20 74 68 65 20  espectively the 
16340 6c 65 66 74 2d 20 61 6e 64 0a 72 69 67 68 74 2d  left- and.right-
16350 68 61 6e 64 20 6f 70 65 72 61 6e 64 73 20 6f 66  hand operands of
16360 20 61 6e 20 3c 62 69 67 3e 3c 62 3e 3d 3c 2f 62   an <big><b>=</b
16370 3e 3c 2f 62 69 67 3e 20 6f 70 65 72 61 74 6f 72  ></big> operator
16380 2e 3c 2f 70 3e 20 5e 49 66 20 74 68 65 20 62 61  .</p> ^If the ba
16390 73 65 20 0a 65 78 70 72 65 73 73 69 6f 6e 20 69  se .expression i
163a0 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
163b0 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41  result of the CA
163c0 53 45 20 69 73 20 61 6c 77 61 79 73 20 74 68 65  SE is always the
163d0 20 72 65 73 75 6c 74 20 0a 6f 66 20 65 76 61 6c   result .of eval
163e0 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45 20  uating the ELSE 
163f0 65 78 70 72 65 73 73 69 6f 6e 20 69 66 20 69 74  expression if it
16400 20 65 78 69 73 74 73 2c 20 6f 72 20 4e 55 4c 4c   exists, or NULL
16410 20 69 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 2e   if it does not.
16420 0a 0a 3c 70 3e 5e 42 6f 74 68 20 66 6f 72 6d 73  ..<p>^Both forms
16430 20 6f 66 20 74 68 65 20 43 41 53 45 20 65 78 70   of the CASE exp
16440 72 65 73 73 69 6f 6e 20 75 73 65 20 6c 61 7a 79  ression use lazy
16450 2c 20 6f 72 20 73 68 6f 72 74 2d 63 69 72 63 75  , or short-circu
16460 69 74 2c 20 0a 65 76 61 6c 75 61 74 69 6f 6e 2e  it, .evaluation.
16470 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f 6e 6c 79 20  ..<p>^(The only 
16480 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
16490 65 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  en the following
164a0 20 74 77 6f 20 43 41 53 45 20 65 78 70 72 65 73   two CASE expres
164b0 73 69 6f 6e 73 20 69 73 20 74 68 61 74 20 0a 74  sions is that .t
164c0 68 65 20 3c 69 3e 78 3c 2f 69 3e 20 65 78 70 72  he <i>x</i> expr
164d0 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61  ession is evalua
164e0 74 65 64 20 65 78 61 63 74 6c 79 20 6f 6e 63 65  ted exactly once
164f0 20 69 6e 20 74 68 65 20 66 69 72 73 74 20 65 78   in the first ex
16500 61 6d 70 6c 65 20 62 75 74 20 0a 6d 69 67 68 74  ample but .might
16510 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 6d 75   be evaluated mu
16520 6c 74 69 70 6c 65 20 74 69 6d 65 73 20 69 6e 20  ltiple times in 
16530 74 68 65 20 73 65 63 6f 6e 64 3a 0a 0a 3c 75 6c  the second:..<ul
16540 3e 3c 70 72 65 3e 0a 3c 6c 69 3e 43 41 53 45 20  ><pre>.<li>CASE 
16550 78 20 57 48 45 4e 20 77 31 20 54 48 45 4e 20 72  x WHEN w1 THEN r
16560 31 20 57 48 45 4e 20 77 32 20 54 48 45 4e 20 72  1 WHEN w2 THEN r
16570 32 20 45 4c 53 45 20 72 33 20 45 4e 44 0a 3c 6c  2 ELSE r3 END.<l
16580 69 3e 43 41 53 45 20 57 48 45 4e 20 78 3d 77 31  i>CASE WHEN x=w1
16590 20 54 48 45 4e 20 72 31 20 57 48 45 4e 20 78 3d   THEN r1 WHEN x=
165a0 77 32 20 54 48 45 4e 20 72 32 20 45 4c 53 45 20  w2 THEN r2 ELSE 
165b0 72 33 20 45 4e 44 0a 3c 2f 70 72 65 3e 3c 2f 75  r3 END.</pre></u
165c0 6c 3e 29 5e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66  l>)^...<tcl>hd_f
165d0 72 61 67 6d 65 6e 74 20 69 6e 5f 6f 70 20 7b 49  ragment in_op {I
165e0 4e 20 6f 70 65 72 61 74 6f 72 7d 20 7b 4e 4f 54  N operator} {NOT
165f0 20 49 4e 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74   IN operator}</t
16600 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 49 4e 20 61  cl>.<h3>The IN a
16610 6e 64 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74  nd NOT IN operat
16620 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65  ors</h3>.<p>^The
16630 20 49 4e 20 61 6e 64 20 4e 4f 54 20 49 4e 20 6f   IN and NOT IN o
16640 70 65 72 61 74 6f 72 73 20 74 61 6b 65 20 61 6e  perators take an
16650 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 6e 20 74   expression on t
16660 68 65 0a 6c 65 66 74 20 61 6e 64 20 61 20 6c 69  he.left and a li
16670 73 74 20 6f 66 20 76 61 6c 75 65 73 20 6f 72 20  st of values or 
16680 61 20 73 75 62 71 75 65 72 79 20 6f 6e 20 74 68  a subquery on th
16690 65 20 72 69 67 68 74 2e 0a 5e 57 68 65 6e 20 74  e right..^When t
166a0 68 65 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  he right operand
166b0 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54   of an IN or NOT
166c0 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20   IN operator is 
166d0 61 20 73 75 62 71 75 65 72 79 2c 20 74 68 65 0a  a subquery, the.
166e0 73 75 62 71 75 65 72 79 20 6d 75 73 74 20 68 61  subquery must ha
166f0 76 65 20 74 68 65 20 73 61 6d 65 20 6e 75 6d 62  ve the same numb
16700 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 61 73  er of columns as
16710 20 74 68 65 72 65 20 61 72 65 20 63 6f 6c 75 6d   there are colum
16720 6e 73 20 69 6e 0a 74 68 65 20 5b 72 6f 77 20 76  ns in.the [row v
16730 61 6c 75 65 5d 20 6f 66 20 74 68 65 20 6c 65 66  alue] of the lef
16740 74 20 6f 70 65 72 61 6e 64 2e 20 20 5e 54 68 65  t operand.  ^The
16750 20 73 75 62 71 75 65 72 79 20 6f 6e 20 74 68 65   subquery on the
16760 0a 72 69 67 68 74 20 6f 66 20 61 6e 20 49 4e 20  .right of an IN 
16770 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74  or NOT IN operat
16780 6f 72 20 6d 75 73 74 20 62 65 20 61 20 73 63 61  or must be a sca
16790 6c 61 72 20 73 75 62 71 75 65 72 79 20 69 66 20  lar subquery if 
167a0 74 68 65 20 6c 65 66 74 0a 65 78 70 72 65 73 73  the left.express
167b0 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20 5b 72 6f  ion is not a [ro
167c0 77 20 76 61 6c 75 65 5d 20 65 78 70 72 65 73 73  w value] express
167d0 69 6f 6e 2e 0a 5e 49 66 20 74 68 65 20 72 69 67  ion..^If the rig
167e0 68 74 20 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e  ht operand of an
167f0 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70   IN or NOT IN op
16800 65 72 61 74 6f 72 20 69 73 20 61 20 6c 69 73 74  erator is a list
16810 20 6f 66 20 76 61 6c 75 65 73 2c 0a 65 61 63 68   of values,.each
16820 20 6f 66 20 74 68 6f 73 65 20 76 61 6c 75 65 73   of those values
16830 20 6d 75 73 74 20 62 65 20 73 63 61 6c 61 72 73   must be scalars
16840 20 61 6e 64 20 74 68 65 20 6c 65 66 74 20 65 78   and the left ex
16850 70 72 65 73 73 69 6f 6e 20 6d 75 73 74 20 61 6c  pression must al
16860 73 6f 0a 62 65 20 61 20 73 63 61 6c 61 72 2e 0a  so.be a scalar..
16870 5e 54 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20  ^The right-hand 
16880 73 69 64 65 20 6f 66 20 61 6e 20 49 4e 20 6f 72  side of an IN or
16890 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72   NOT IN operator
168a0 20 63 61 6e 20 62 65 20 61 0a 74 61 62 6c 65 20   can be a.table 
168b0 3c 69 3e 6e 61 6d 65 3c 2f 69 3e 20 6f 72 20 5b  <i>name</i> or [
168c0 74 61 62 6c 65 2d 76 61 6c 75 65 64 20 66 75 6e  table-valued fun
168d0 63 74 69 6f 6e 5d 20 3c 69 3e 6e 61 6d 65 3c 2f  ction] <i>name</
168e0 69 3e 20 69 6e 20 77 68 69 63 68 20 0a 63 61 73  i> in which .cas
168f0 65 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  e the right-hand
16900 20 73 69 64 65 20 69 73 20 75 6e 64 65 72 73 74   side is underst
16910 6f 6f 64 20 74 6f 20 62 65 20 73 75 62 71 75 65  ood to be subque
16920 72 79 20 6f 66 0a 74 68 65 20 66 6f 72 6d 20 22  ry of.the form "
16930 28 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 3c  (SELECT * FROM <
16940 69 3e 6e 61 6d 65 3c 2f 69 3e 29 22 2e 0a 5e 57  i>name</i>)"..^W
16950 68 65 6e 20 74 68 65 20 72 69 67 68 74 20 6f 70  hen the right op
16960 65 72 61 6e 64 20 69 73 20 61 6e 20 65 6d 70 74  erand is an empt
16970 79 20 73 65 74 2c 20 74 68 65 20 72 65 73 75 6c  y set, the resul
16980 74 20 6f 66 20 49 4e 20 69 73 20 66 61 6c 73 65  t of IN is false
16990 20 61 6e 64 20 74 68 65 0a 72 65 73 75 6c 74 20   and the.result 
169a0 6f 66 20 4e 4f 54 20 49 4e 20 69 73 20 74 72 75  of NOT IN is tru
169b0 65 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  e, regardless of
169c0 20 74 68 65 20 6c 65 66 74 20 6f 70 65 72 61 6e   the left operan
169d0 64 20 61 6e 64 20 65 76 65 6e 20 69 66 20 74 68  d and even if th
169e0 65 0a 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 69  e.left operand i
169f0 73 20 4e 55 4c 4c 2e 0a 3c 70 3e 5e 28 54 68 65  s NULL..<p>^(The
16a00 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 20 49 4e   result of an IN
16a10 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61   or NOT IN opera
16a20 74 6f 72 20 69 73 20 64 65 74 65 72 6d 69 6e 65  tor is determine
16a30 64 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69  d by the followi
16a40 6e 67 0a 6d 61 74 72 69 78 3a 0a 0a 3c 63 65 6e  ng.matrix:..<cen
16a50 74 65 72 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64  ter>.<table bord
16a60 65 72 3d 31 3e 0a 3c 74 72 3e 0a 3c 74 68 3e 4c  er=1>.<tr>.<th>L
16a70 65 66 74 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e  eft operand <br>
16a80 69 73 20 4e 55 4c 4c 0a 3c 74 68 3e 52 69 67 68  is NULL.<th>Righ
16a90 74 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e 63 6f  t operand <br>co
16aa0 6e 74 61 69 6e 73 20 4e 55 4c 4c 0a 3c 74 68 3e  ntains NULL.<th>
16ab0 52 69 67 68 74 20 6f 70 65 72 61 6e 64 20 3c 62  Right operand <b
16ac0 72 3e 69 73 20 61 6e 20 65 6d 70 74 79 20 73 65  r>is an empty se
16ad0 74 0a 3c 74 68 3e 4c 65 66 74 20 6f 70 65 72 61  t.<th>Left opera
16ae0 6e 64 20 66 6f 75 6e 64 20 3c 62 72 3e 77 69 74  nd found <br>wit
16af0 68 69 6e 20 72 69 67 68 74 20 6f 70 65 72 61 6e  hin right operan
16b00 64 0a 3c 74 68 3e 52 65 73 75 6c 74 20 6f 66 20  d.<th>Result of 
16b10 3c 62 72 3e 49 4e 20 6f 70 65 72 61 74 6f 72 0a  <br>IN operator.
16b20 3c 74 68 3e 52 65 73 75 6c 74 20 6f 66 20 3c 62  <th>Result of <b
16b30 72 3e 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f  r>NOT IN operato
16b40 72 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  r.<tr>.<td align
16b50 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
16b60 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
16b70 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
16b80 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
16b90 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
16ba0 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
16bb0 22 3e 66 61 6c 73 65 0a 3c 74 64 20 61 6c 69 67  ">false.<td alig
16bc0 6e 3d 22 63 65 6e 74 65 72 22 3e 74 72 75 65 0a  n="center">true.
16bd0 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
16be0 63 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74  center">does not
16bf0 20 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c 69 67   matter.<td alig
16c00 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74  n="center">no.<t
16c10 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
16c20 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  >yes.<td align="
16c30 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
16c40 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61  lign="center">fa
16c50 6c 73 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  lse.<td align="c
16c60 65 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74 72 3e  enter">true.<tr>
16c70 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
16c80 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
16c90 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e  ="center">does n
16ca0 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c  ot matter.<td al
16cb0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
16cc0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
16cd0 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e  r">yes.<td align
16ce0 3d 22 63 65 6e 74 65 72 22 3e 74 72 75 65 0a 3c  ="center">true.<
16cf0 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
16d00 22 3e 66 61 6c 73 65 0a 3c 74 72 3e 0a 3c 74 64  ">false.<tr>.<td
16d10 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
16d20 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
16d30 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c  nter">yes.<td al
16d40 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
16d50 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
16d60 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
16d70 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74  "center">NULL.<t
16d80 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
16d90 3e 4e 55 4c 4c 0a 3c 74 72 3e 0a 3c 74 64 20 61  >NULL.<tr>.<td a
16da0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65  lign="center">ye
16db0 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  s.<td align="cen
16dc0 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61  ter">does not ma
16dd0 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  tter.<td align="
16de0 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
16df0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f  lign="center">do
16e00 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74  es not matter.<t
16e10 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
16e20 3e 4e 55 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d  >NULL.<td align=
16e30 22 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 2f  "center">NULL.</
16e40 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e  table>.</center>
16e50 29 5e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61  )^..<p>^Note tha
16e60 74 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20  t SQLite allows 
16e70 74 68 65 20 70 61 72 65 6e 74 68 65 73 69 7a 65  the parenthesize
16e80 64 20 6c 69 73 74 20 6f 66 20 73 63 61 6c 61 72  d list of scalar
16e90 20 76 61 6c 75 65 73 20 6f 6e 0a 74 68 65 20 72   values on.the r
16ea0 69 67 68 74 2d 68 61 6e 64 20 73 69 64 65 20 6f  ight-hand side o
16eb0 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49  f an IN or NOT I
16ec0 4e 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65  N operator to be
16ed0 20 61 6e 20 65 6d 70 74 79 20 6c 69 73 74 20 62   an empty list b
16ee0 75 74 0a 6d 6f 73 74 20 6f 74 68 65 72 20 53 51  ut.most other SQ
16ef0 4c 20 64 61 74 61 62 61 73 65 20 64 61 74 61 62  L database datab
16f00 61 73 65 20 65 6e 67 69 6e 65 73 20 61 6e 64 20  ase engines and 
16f10 74 68 65 20 53 51 4c 39 32 20 73 74 61 6e 64 61  the SQL92 standa
16f20 72 64 20 72 65 71 75 69 72 65 0a 74 68 65 20 6c  rd require.the l
16f30 69 73 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61  ist to contain a
16f40 74 20 6c 65 61 73 74 20 6f 6e 65 20 65 6c 65 6d  t least one elem
16f50 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 61  ent.</p>..<h3>Ta
16f60 62 6c 65 20 43 6f 6c 75 6d 6e 20 4e 61 6d 65 73  ble Column Names
16f70 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 41 20 63 6f 6c  </h3>..<p>^A col
16f80 75 6d 6e 20 6e 61 6d 65 20 63 61 6e 20 62 65 20  umn name can be 
16f90 61 6e 79 20 6f 66 20 74 68 65 20 6e 61 6d 65 73  any of the names
16fa0 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68 65 20   defined in the 
16fb0 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 0a 73  [CREATE TABLE].s
16fc0 74 61 74 65 6d 65 6e 74 20 6f 72 20 6f 6e 65 20  tatement or one 
16fd0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
16fe0 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69 66   special identif
16ff0 69 65 72 73 3a 20 22 3c 62 3e 52 4f 57 49 44 3c  iers: "<b>ROWID<
17000 2f 62 3e 22 2c 0a 22 3c 62 3e 4f 49 44 3c 2f 62  /b>",."<b>OID</b
17010 3e 22 2c 20 6f 72 20 22 3c 62 3e 5f 52 4f 57 49  >", or "<b>_ROWI
17020 44 5f 3c 2f 62 3e 22 2e 0a 5e 54 68 65 20 74 68  D_</b>"..^The th
17030 72 65 65 20 73 70 65 63 69 61 6c 20 69 64 65 6e  ree special iden
17040 74 69 66 69 65 72 73 20 64 65 73 63 72 69 62 65  tifiers describe
17050 20 74 68 65 0a 75 6e 69 71 75 65 20 69 6e 74 65   the.unique inte
17060 67 65 72 20 6b 65 79 20 28 74 68 65 20 5b 72 6f  ger key (the [ro
17070 77 69 64 5d 29 20 61 73 73 6f 63 69 61 74 65 64  wid]) associated
17080 20 77 69 74 68 20 65 76 65 72 79 20 0a 72 6f 77   with every .row
17090 20 6f 66 20 65 76 65 72 79 20 74 61 62 6c 65 20   of every table 
170a0 61 6e 64 20 73 6f 20 61 72 65 20 6e 6f 74 20 61  and so are not a
170b0 76 61 69 6c 61 62 6c 65 20 6f 6e 20 5b 57 49 54  vailable on [WIT
170c0 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c  HOUT ROWID] tabl
170d0 65 73 2e 0a 5e 54 68 65 20 73 70 65 63 69 61 6c  es..^The special
170e0 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 6c   identifiers onl
170f0 79 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 72  y refer to the r
17100 6f 77 20 6b 65 79 20 69 66 20 74 68 65 20 5b 43  ow key if the [C
17110 52 45 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61  REATE TABLE].sta
17120 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20  tement does not 
17130 64 65 66 69 6e 65 20 61 20 72 65 61 6c 20 63 6f  define a real co
17140 6c 75 6d 6e 20 77 69 74 68 20 74 68 65 20 73 61  lumn with the sa
17150 6d 65 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 72 6f  me name..^The ro
17160 77 69 64 20 63 61 6e 20 62 65 20 75 73 65 64 20  wid can be used 
17170 61 6e 79 77 68 65 72 65 20 61 20 72 65 67 75 6c  anywhere a regul
17180 61 72 0a 63 6f 6c 75 6d 6e 20 63 61 6e 20 62 65  ar.column can be
17190 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c   used.</p>..<tcl
171a0 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 5f  >hd_fragment in_
171b0 6f 70 20 7b 45 58 49 53 54 53 20 6f 70 65 72 61  op {EXISTS opera
171c0 74 6f 72 7d 20 7b 4e 4f 54 20 45 58 49 53 54 53  tor} {NOT EXISTS
171d0 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e   operator}</tcl>
171e0 0a 3c 68 33 3e 54 68 65 20 45 58 49 53 54 53 20  .<h3>The EXISTS 
171f0 6f 70 65 72 61 74 6f 72 3c 2f 68 33 3e 0a 0a 3c  operator</h3>..<
17200 70 3e 5e 54 68 65 20 45 58 49 53 54 53 20 6f 70  p>^The EXISTS op
17210 65 72 61 74 6f 72 20 61 6c 77 61 79 73 20 65 76  erator always ev
17220 61 6c 75 61 74 65 73 20 74 6f 20 6f 6e 65 20 6f  aluates to one o
17230 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  f the integer va
17240 6c 75 65 73 20 30 20 0a 61 6e 64 20 31 2e 20 5e  lues 0 .and 1. ^
17250 49 66 20 65 78 65 63 75 74 69 6e 67 20 74 68 65  If executing the
17260 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
17270 74 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74  t specified as t
17280 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 0a 6f  he right-hand .o
17290 70 65 72 61 6e 64 20 6f 66 20 74 68 65 20 45 58  perand of the EX
172a0 49 53 54 53 20 6f 70 65 72 61 74 6f 72 20 77 6f  ISTS operator wo
172b0 75 6c 64 20 72 65 74 75 72 6e 20 6f 6e 65 20 6f  uld return one o
172c0 72 20 6d 6f 72 65 20 72 6f 77 73 2c 20 74 68 65  r more rows, the
172d0 6e 20 74 68 65 0a 45 58 49 53 54 53 20 6f 70 65  n the.EXISTS ope
172e0 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20  rator evaluates 
172f0 74 6f 20 31 2e 20 5e 49 66 20 65 78 65 63 75 74  to 1. ^If execut
17300 69 6e 67 20 74 68 65 20 53 45 4c 45 43 54 20 77  ing the SELECT w
17310 6f 75 6c 64 20 72 65 74 75 72 6e 0a 6e 6f 20 72  ould return.no r
17320 6f 77 73 20 61 74 20 61 6c 6c 2c 20 74 68 65 6e  ows at all, then
17330 20 74 68 65 20 45 58 49 53 54 53 20 6f 70 65 72   the EXISTS oper
17340 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74  ator evaluates t
17350 6f 20 30 2e 20 0a 0a 3c 70 3e 5e 54 68 65 20 6e  o 0. ..<p>^The n
17360 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
17370 20 69 6e 20 65 61 63 68 20 72 6f 77 20 72 65 74   in each row ret
17380 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c  urned by the SEL
17390 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a 28 69  ECT statement.(i
173a0 66 20 61 6e 79 29 20 61 6e 64 20 74 68 65 20 73  f any) and the s
173b0 70 65 63 69 66 69 63 20 76 61 6c 75 65 73 20 72  pecific values r
173c0 65 74 75 72 6e 65 64 20 68 61 76 65 20 6e 6f 20  eturned have no 
173d0 65 66 66 65 63 74 20 6f 6e 20 74 68 65 20 72 65  effect on the re
173e0 73 75 6c 74 73 0a 6f 66 20 74 68 65 20 45 58 49  sults.of the EXI
173f0 53 54 53 20 6f 70 65 72 61 74 6f 72 2e 20 5e 49  STS operator. ^I
17400 6e 20 70 61 72 74 69 63 75 6c 61 72 2c 20 72 6f  n particular, ro
17410 77 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 4e 55  ws containing NU
17420 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 0a 6e 6f  LL values are.no
17430 74 20 68 61 6e 64 6c 65 64 20 61 6e 79 20 64 69  t handled any di
17440 66 66 65 72 65 6e 74 6c 79 20 66 72 6f 6d 20 72  fferently from r
17450 6f 77 73 20 77 69 74 68 6f 75 74 20 4e 55 4c 4c  ows without NULL
17460 20 76 61 6c 75 65 73 2e 0a 0a 3c 74 63 6c 3e 68   values...<tcl>h
17470 64 5f 66 72 61 67 6d 65 6e 74 20 73 75 62 71 20  d_fragment subq 
17480 7b 53 75 62 71 75 65 72 69 65 73 7d 3c 2f 74 63  {Subqueries}</tc
17490 6c 3e 0a 3c 68 33 3e 53 75 62 71 75 65 72 79 20  l>.<h3>Subquery 
174a0 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e  Expressions</h3>
174b0 0a 0a 3c 70 3e 5e 41 20 5b 53 45 4c 45 43 54 5d  ..<p>^A [SELECT]
174c0 20 73 74 61 74 65 6d 65 6e 74 20 65 6e 63 6c 6f   statement enclo
174d0 73 65 64 20 69 6e 20 70 61 72 65 6e 74 68 65 73  sed in parenthes
174e0 65 73 20 69 73 20 61 20 73 75 62 71 75 65 72 79  es is a subquery
174f0 2e 0a 5e 54 68 65 20 76 61 6c 75 65 20 6f 66 20  ..^The value of 
17500 61 20 73 75 62 71 75 65 72 79 20 65 78 70 72 65  a subquery expre
17510 73 73 69 6f 6e 20 69 73 20 74 68 65 20 66 69 72  ssion is the fir
17520 73 74 20 72 6f 77 20 6f 66 20 74 68 65 20 72 65  st row of the re
17530 73 75 6c 74 0a 66 72 6f 6d 20 74 68 65 20 65 6e  sult.from the en
17540 63 6c 6f 73 65 64 20 5b 53 45 4c 45 43 54 5d 20  closed [SELECT] 
17550 73 74 61 74 65 6d 65 6e 74 2e 0a 5e 49 6e 20 6f  statement..^In o
17560 74 68 65 72 20 77 6f 72 64 73 2c 20 61 6e 20 69  ther words, an i
17570 6d 70 6c 69 65 64 20 22 4c 49 4d 49 54 20 31 22  mplied "LIMIT 1"
17580 20 69 73 20 61 64 64 65 64 20 74 6f 20 74 68 65   is added to the
17590 20 73 75 62 71 75 65 72 79 2e 0a 5e 54 68 65 20   subquery..^The 
175a0 76 61 6c 75 65 20 6f 66 20 61 20 73 75 62 71 75  value of a subqu
175b0 65 72 79 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ery expression i
175c0 73 20 4e 55 4c 4c 20 69 66 20 74 68 65 20 65 6e  s NULL if the en
175d0 63 6c 6f 73 65 64 0a 5b 53 45 4c 45 43 54 5d 20  closed.[SELECT] 
175e0 73 74 61 74 65 6d 65 6e 74 20 72 65 74 75 72 6e  statement return
175f0 73 20 6e 6f 20 72 6f 77 73 2e 0a 0a 3c 70 3e 41  s no rows...<p>A
17600 20 73 75 62 71 75 65 72 79 20 74 68 61 74 20 72   subquery that r
17610 65 74 75 72 6e 73 20 61 20 73 69 6e 67 6c 65 20  eturns a single 
17620 63 6f 6c 75 6d 6e 20 69 73 20 61 20 73 63 61 6c  column is a scal
17630 61 72 20 73 75 62 71 75 65 72 79 20 61 6e 64 20  ar subquery and 
17640 63 61 6e 0a 62 65 20 75 73 65 64 20 6d 6f 73 74  can.be used most
17650 20 61 6e 79 77 68 65 72 65 2e 0a 41 20 73 75 62   anywhere..A sub
17660 71 75 65 72 79 20 74 68 61 74 20 72 65 74 75 72  query that retur
17670 6e 73 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 63  ns two or more c
17680 6f 6c 75 6d 6e 73 20 69 73 20 61 20 5b 72 6f 77  olumns is a [row
17690 20 76 61 6c 75 65 5d 0a 73 75 62 71 75 65 72 79   value].subquery
176a0 20 61 6e 64 20 63 61 6e 20 6f 6e 6c 79 20 62 65   and can only be
176b0 20 75 73 65 64 20 61 73 20 74 68 65 20 6f 70 65   used as the ope
176c0 72 61 6e 64 20 6f 66 20 61 20 63 6f 6d 70 61 72  rand of a compar
176d0 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 0a 0a  ison operator...
176e0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
176f0 20 63 6f 73 75 62 20 7b 63 6f 72 72 65 6c 61 74   cosub {correlat
17700 65 64 20 73 75 62 71 75 65 72 69 65 73 7d 3c 2f  ed subqueries}</
17710 74 63 6c 3e 0a 3c 68 33 3e 43 6f 72 72 65 6c 61  tcl>.<h3>Correla
17720 74 65 64 20 53 75 62 71 75 65 72 69 65 73 3c 2f  ted Subqueries</
17730 68 33 3e 0a 0a 3c 70 3e 5e 41 20 5b 53 45 4c 45  h3>..<p>^A [SELE
17740 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 20 75 73  CT] statement us
17750 65 64 20 61 73 20 65 69 74 68 65 72 20 61 20 73  ed as either a s
17760 63 61 6c 61 72 20 73 75 62 71 75 65 72 79 20 6f  calar subquery o
17770 72 20 61 73 20 74 68 65 20 0a 72 69 67 68 74 2d  r as the .right-
17780 68 61 6e 64 20 6f 70 65 72 61 6e 64 20 6f 66 20  hand operand of 
17790 61 6e 20 49 4e 2c 20 4e 4f 54 20 49 4e 20 6f 72  an IN, NOT IN or
177a0 20 45 58 49 53 54 53 20 65 78 70 72 65 73 73 69   EXISTS expressi
177b0 6f 6e 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 0a  on may contain .
177c0 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 63 6f  references to co
177d0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6f 75 74  lumns in the out
177e0 65 72 20 71 75 65 72 79 2e 20 53 75 63 68 20 61  er query. Such a
177f0 20 73 75 62 71 75 65 72 79 20 69 73 20 6b 6e 6f   subquery is kno
17800 77 6e 20 61 73 0a 61 20 63 6f 72 72 65 6c 61 74  wn as.a correlat
17810 65 64 20 73 75 62 71 75 65 72 79 2e 20 5e 41 20  ed subquery. ^A 
17820 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75  correlated subqu
17830 65 72 79 20 69 73 20 72 65 65 76 61 6c 75 61 74  ery is reevaluat
17840 65 64 20 65 61 63 68 20 74 69 6d 65 0a 69 74 73  ed each time.its
17850 20 72 65 73 75 6c 74 20 69 73 20 72 65 71 75 69   result is requi
17860 72 65 64 2e 20 5e 41 6e 20 75 6e 63 6f 72 72 65  red. ^An uncorre
17870 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20 69  lated subquery i
17880 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 6c 79  s evaluated only
17890 20 6f 6e 63 65 0a 61 6e 64 20 74 68 65 20 72 65   once.and the re
178a0 73 75 6c 74 20 72 65 75 73 65 64 20 61 73 20 6e  sult reused as n
178b0 65 63 65 73 73 61 72 79 2e 0a 0a 3c 74 63 6c 3e  ecessary...<tcl>
178c0 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 61 73 74  hd_fragment cast
178d0 65 78 70 72 20 7b 43 41 53 54 20 65 78 70 72 65  expr {CAST expre
178e0 73 73 69 6f 6e 7d 20 7b 43 41 53 54 7d 20 7b 63  ssion} {CAST} {c
178f0 61 73 74 7d 20 7b 43 41 53 54 20 6f 70 65 72 61  ast} {CAST opera
17900 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43  tor}</tcl>.<h3>C
17910 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 73 3c  AST expressions<
17920 2f 68 33 3e 0a 0a 3c 70 3e 41 20 43 41 53 54 20  /h3>..<p>A CAST 
17930 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68  expression of th
17940 65 20 66 6f 72 6d 20 22 43 41 53 54 28 3c 69 3e  e form "CAST(<i>
17950 65 78 70 72 3c 2f 69 3e 20 41 53 20 3c 69 3e 74  expr</i> AS <i>t
17960 79 70 65 2d 6e 61 6d 65 3c 2f 69 3e 29 22 0a 69  ype-name</i>)".i
17970 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 76 65 72  s used to conver
17980 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 3c  t the value of <
17990 69 3e 65 78 70 72 3c 2f 69 3e 20 74 6f 20 0a 61  i>expr</i> to .a
179a0 20 64 69 66 66 65 72 65 6e 74 20 5b 73 74 6f 72   different [stor
179b0 61 67 65 20 63 6c 61 73 73 5d 20 73 70 65 63 69  age class] speci
179c0 66 69 65 64 20 62 79 20 3c 79 79 74 65 72 6d 3e  fied by <yyterm>
179d0 74 79 70 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72  type-name</yyter
179e0 6d 3e 2e 0a 5e 41 20 43 41 53 54 20 63 6f 6e 76  m>..^A CAST conv
179f0 65 72 73 69 6f 6e 20 69 73 20 73 69 6d 69 6c 61  ersion is simila
17a00 72 20 74 6f 20 74 68 65 20 63 6f 6e 76 65 72 73  r to the convers
17a10 69 6f 6e 20 74 68 61 74 20 74 61 6b 65 73 0a 70  ion that takes.p
17a20 6c 61 63 65 20 77 68 65 6e 20 61 20 5b 63 6f 6c  lace when a [col
17a30 75 6d 6e 20 61 66 66 69 6e 69 74 79 5d 20 69 73  umn affinity] is
17a40 20 61 70 70 6c 69 65 64 20 74 6f 20 61 20 76 61   applied to a va
17a50 6c 75 65 20 65 78 63 65 70 74 20 74 68 61 74 20  lue except that 
17a60 77 69 74 68 0a 74 68 65 20 43 41 53 54 20 6f 70  with.the CAST op
17a70 65 72 61 74 6f 72 20 74 68 65 20 63 6f 6e 76 65  erator the conve
17a80 72 73 69 6f 6e 20 61 6c 77 61 79 73 20 74 61 6b  rsion always tak
17a90 65 73 20 70 6c 61 63 65 20 65 76 65 6e 20 69 66  es place even if
17aa0 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 0a   the conversion.
17ab0 6c 6f 73 73 79 20 61 6e 64 20 69 72 72 65 76 65  lossy and irreve
17ac0 72 73 69 62 6c 65 2c 20 77 68 65 72 65 61 73 20  rsible, whereas 
17ad0 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
17ae0 6f 6e 6c 79 20 63 68 61 6e 67 65 73 20 74 68 65  only changes the
17af0 20 64 61 74 61 20 74 79 70 65 0a 6f 66 20 61 20   data type.of a 
17b00 76 61 6c 75 65 20 69 66 20 74 68 65 20 63 68 61  value if the cha
17b10 6e 67 65 20 69 73 20 6c 6f 73 73 6c 65 73 73 20  nge is lossless 
17b20 61 6e 64 20 72 65 76 65 72 73 69 62 6c 65 2e 0a  and reversible..
17b30 0a 3c 70 3e 5e 49 66 20 74 68 65 20 76 61 6c 75  .<p>^If the valu
17b40 65 20 6f 66 20 3c 69 3e 65 78 70 72 3c 2f 69 3e  e of <i>expr</i>
17b50 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74   is NULL, then t
17b60 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
17b70 20 43 41 53 54 0a 65 78 70 72 65 73 73 69 6f 6e   CAST.expression
17b80 20 69 73 20 61 6c 73 6f 20 4e 55 4c 4c 2e 20 5e   is also NULL. ^
17b90 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 73  Otherwise, the s
17ba0 74 6f 72 61 67 65 20 63 6c 61 73 73 20 6f 66 20  torage class of 
17bb0 74 68 65 20 72 65 73 75 6c 74 0a 69 73 20 64 65  the result.is de
17bc0 74 65 72 6d 69 6e 65 64 20 62 79 20 61 70 70 6c  termined by appl
17bd0 79 69 6e 67 20 74 68 65 20 5b 72 75 6c 65 73 20  ying the [rules 
17be0 66 6f 72 20 64 65 74 65 72 6d 69 6e 69 6e 67 20  for determining 
17bf0 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 5d  column affinity]
17c00 20 74 6f 0a 74 68 65 20 3c 79 79 74 65 72 6d 3e   to.the <yyterm>
17c10 74 79 70 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72  type-name</yyter
17c20 6d 3e 2e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64  m>...<table bord
17c30 65 72 3d 31 3e 0a 3c 74 72 3e 0a 20 20 3c 74 68  er=1>.<tr>.  <th
17c40 3e 20 41 66 66 69 6e 69 74 79 20 6f 66 20 3c 79  > Affinity of <y
17c50 79 74 65 72 6d 3e 74 79 70 65 2d 6e 61 6d 65 3c  yterm>type-name<
17c60 2f 79 79 74 65 72 6d 3e 0a 20 20 3c 74 68 3e 20  /yyterm>.  <th> 
17c70 43 6f 6e 76 65 72 73 69 6f 6e 20 50 72 6f 63 65  Conversion Proce
17c80 73 73 69 6e 67 0a 3c 74 72 3e 0a 20 20 3c 74 64  ssing.<tr>.  <td
17c90 3e 20 4e 4f 4e 45 20 0a 20 20 3c 74 64 3e 20 5e  > NONE .  <td> ^
17ca0 43 61 73 74 69 6e 67 20 61 20 76 61 6c 75 65 20  Casting a value 
17cb0 74 6f 20 61 20 3c 79 79 74 65 72 6d 3e 74 79 70  to a <yyterm>typ
17cc0 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20  e-name</yyterm> 
17cd0 77 69 74 68 20 6e 6f 20 61 66 66 69 6e 69 74 79  with no affinity
17ce0 20 0a 20 20 63 61 75 73 65 73 20 74 68 65 20 76   .  causes the v
17cf0 61 6c 75 65 20 74 6f 0a 20 20 62 65 20 63 6f 6e  alue to.  be con
17d00 76 65 72 74 65 64 20 69 6e 74 6f 20 61 20 42 4c  verted into a BL
17d10 4f 42 2e 20 20 5e 43 61 73 74 69 6e 67 20 74 6f  OB.  ^Casting to
17d20 20 61 20 42 4c 4f 42 20 63 6f 6e 73 69 73 74 73   a BLOB consists
17d30 20 6f 66 20 66 69 72 73 74 20 63 61 73 74 69 6e   of first castin
17d40 67 0a 20 20 74 68 65 20 76 61 6c 75 65 20 74 6f  g.  the value to
17d50 20 54 45 58 54 20 69 6e 20 74 68 65 20 5b 65 6e   TEXT in the [en
17d60 63 6f 64 69 6e 67 5d 20 6f 66 20 74 68 65 20 64  coding] of the d
17d70 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
17d80 6f 6e 2c 20 74 68 65 6e 0a 20 20 69 6e 74 65 72  on, then.  inter
17d90 70 72 65 74 69 6e 67 20 74 68 65 20 72 65 73 75  preting the resu
17da0 6c 74 69 6e 67 20 62 79 74 65 20 73 65 71 75 65  lting byte seque
17db0 6e 63 65 20 61 73 20 61 20 42 4c 4f 42 20 69 6e  nce as a BLOB in
17dc0 73 74 65 61 64 20 6f 66 20 61 73 20 54 45 58 54  stead of as TEXT
17dd0 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 54  ...<tr>.  <td> T
17de0 45 58 54 0a 20 20 3c 74 64 3e 20 5e 54 6f 20 63  EXT.  <td> ^To c
17df0 61 73 74 20 61 20 42 4c 4f 42 20 76 61 6c 75 65  ast a BLOB value
17e00 20 74 6f 20 54 45 58 54 2c 20 74 68 65 20 73 65   to TEXT, the se
17e10 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73 20  quence of bytes 
17e20 74 68 61 74 20 6d 61 6b 65 20 75 70 20 74 68 65  that make up the
17e30 0a 20 20 42 4c 4f 42 20 69 73 20 69 6e 74 65 72  .  BLOB is inter
17e40 70 72 65 74 65 64 20 61 73 20 74 65 78 74 20 65  preted as text e
17e50 6e 63 6f 64 65 64 20 75 73 69 6e 67 20 74 68 65  ncoded using the
17e60 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64 69   database encodi
17e70 6e 67 2e 0a 20 20 3c 70 3e 0a 20 20 20 5e 43 61  ng..  <p>.   ^Ca
17e80 73 74 69 6e 67 20 61 6e 20 49 4e 54 45 47 45 52  sting an INTEGER
17e90 20 6f 72 20 52 45 41 4c 20 76 61 6c 75 65 20 69   or REAL value i
17ea0 6e 74 6f 20 54 45 58 54 20 72 65 6e 64 65 72 73  nto TEXT renders
17eb0 20 74 68 65 20 76 61 6c 75 65 20 61 73 20 69 66   the value as if
17ec0 20 76 69 61 20 0a 20 20 20 20 5b 73 71 6c 69 74   via .    [sqlit
17ed0 65 33 5f 73 6e 70 72 69 6e 74 66 28 29 5d 20 65  e3_snprintf()] e
17ee0 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 72  xcept that the r
17ef0 65 73 75 6c 74 69 6e 67 20 54 45 58 54 20 75 73  esulting TEXT us
17f00 65 73 20 74 68 65 20 5b 65 6e 63 6f 64 69 6e 67  es the [encoding
17f10 5d 20 6f 66 0a 20 20 20 20 74 68 65 20 64 61 74  ] of.    the dat
17f20 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
17f30 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 52  ...<tr>.  <td> R
17f40 45 41 4c 0a 20 20 3c 74 64 3e 20 5e 57 68 65 6e  EAL.  <td> ^When
17f50 20 63 61 73 74 69 6e 67 20 61 20 42 4c 4f 42 20   casting a BLOB 
17f60 76 61 6c 75 65 20 74 6f 20 61 20 52 45 41 4c 2c  value to a REAL,
17f70 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 66 69   the value is fi
17f80 72 73 74 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  rst converted to
17f90 0a 20 20 20 20 20 20 20 20 54 45 58 54 2e 0a 20  .        TEXT.. 
17fa0 20 20 20 20 20 20 3c 70 3e 5e 57 68 65 6e 20 63        <p>^When c
17fb0 61 73 74 69 6e 67 20 61 20 54 45 58 54 20 76 61  asting a TEXT va
17fc0 6c 75 65 20 74 6f 20 52 45 41 4c 2c 20 74 68 65  lue to REAL, the
17fd0 20 6c 6f 6e 67 65 73 74 20 70 6f 73 73 69 62 6c   longest possibl
17fe0 65 20 70 72 65 66 69 78 20 6f 66 0a 20 20 20 20  e prefix of.    
17ff0 20 20 20 20 74 68 65 20 76 61 6c 75 65 20 74 68      the value th
18000 61 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70  at can be interp
18010 72 65 74 65 64 20 61 73 20 61 20 72 65 61 6c 20  reted as a real 
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 61 72 65 20 69 67 6e  XT value are ign
180a0 6f 72 65 64 20 77 68 65 6e 20 63 6f 6e 76 65 72  ored when conver
180b0 67 69 6e 67 20 66 72 6f 6d 20 54 45 58 54 20 74  ging from TEXT t
180c0 6f 20 52 45 41 4c 2e 20 5e 28 49 66 20 74 68 65  o REAL. ^(If the
180d0 72 65 20 69 73 0a 20 20 20 20 20 20 20 20 6e 6f  re is.        no
180e0 20 70 72 65 66 69 78 20 74 68 61 74 20 63 61 6e   prefix that can
180f0 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20   be interpreted 
18100 61 73 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72  as a real number
18110 2c 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  , the result of 
18120 74 68 65 0a 20 20 20 20 20 20 20 20 63 6f 6e 76  the.        conv
18130 65 72 73 69 6f 6e 20 69 73 20 30 2e 30 2e 29 5e  ersion is 0.0.)^
18140 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 49 4e  ..<tr>.  <td> IN
18150 54 45 47 45 52 0a 20 20 3c 74 64 3e 20 5e 57 68  TEGER.  <td> ^Wh
18160 65 6e 20 63 61 73 74 69 6e 67 20 61 20 42 4c 4f  en casting a BLO
18170 42 20 76 61 6c 75 65 20 74 6f 20 49 4e 54 45 47  B value to INTEG
18180 45 52 2c 20 74 68 65 20 76 61 6c 75 65 20 69 73  ER, the value is
18190 20 66 69 72 73 74 20 63 6f 6e 76 65 72 74 65 64   first converted
181a0 20 74 6f 0a 20 20 20 20 20 20 20 20 54 45 58 54   to.        TEXT
181b0 2e 0a 20 20 20 20 20 20 20 3c 70 3e 5e 57 68 65  ..       <p>^Whe
181c0 6e 20 63 61 73 74 69 6e 67 20 61 20 54 45 58 54  n casting a TEXT
181d0 20 76 61 6c 75 65 20 74 6f 20 49 4e 54 45 47 45   value to INTEGE
181e0 52 2c 20 74 68 65 20 6c 6f 6e 67 65 73 74 20 70  R, the longest p
181f0 6f 73 73 69 62 6c 65 20 70 72 65 66 69 78 20 6f  ossible prefix o
18200 66 0a 20 20 20 20 20 20 20 20 74 68 65 20 76 61  f.        the va
18210 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65 20  lue that can be 
18220 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
18230 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72  n integer number
18240 20 69 73 20 65 78 74 72 61 63 74 65 64 20 66 72   is extracted fr
18250 6f 6d 0a 20 20 20 20 20 20 20 20 74 68 65 20 54  om.        the T
18260 45 58 54 20 76 61 6c 75 65 20 61 6e 64 20 74 68  EXT value and th
18270 65 20 72 65 6d 61 69 6e 64 65 72 20 69 67 6e 6f  e remainder igno
18280 72 65 64 2e 20 5e 41 6e 79 20 6c 65 61 64 69 6e  red. ^Any leadin
18290 67 20 73 70 61 63 65 73 20 69 6e 20 74 68 65 0a  g spaces in the.
182a0 20 20 20 20 20 20 20 20 54 45 58 54 20 76 61 6c          TEXT val
182b0 75 65 20 77 68 65 6e 20 63 6f 6e 76 65 72 74 69  ue when converti
182c0 6e 67 20 66 72 6f 6d 20 54 45 58 54 20 74 6f 20  ng from TEXT to 
182d0 49 4e 54 45 47 45 52 20 61 72 65 20 69 67 6e 6f  INTEGER are igno
182e0 72 65 64 2e 20 5e 49 66 20 74 68 65 72 65 0a 20  red. ^If there. 
182f0 20 20 20 20 20 20 20 69 73 20 6e 6f 20 70 72 65         is no pre
18300 66 69 78 20 74 68 61 74 20 63 61 6e 20 62 65 20  fix that can be 
18310 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
18320 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72  n integer number
18330 2c 20 74 68 65 20 72 65 73 75 6c 74 0a 20 20 20  , the result.   
18340 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 76       of the conv
18350 65 72 73 69 6f 6e 20 69 73 20 30 2e 20 20 5e 28  ersion is 0.  ^(
18360 54 68 65 20 43 41 53 54 20 6f 70 65 72 61 74 6f  The CAST operato
18370 72 20 75 6e 64 65 72 73 74 61 6e 64 73 20 64 65  r understands de
18380 63 69 6d 61 6c 0a 20 20 20 20 20 20 20 20 69 6e  cimal.        in
18390 74 65 67 65 72 73 20 6f 6e 6c 79 20 26 6d 64 61  tegers only &mda
183a0 73 68 3b 20 63 6f 6e 76 65 72 73 69 6f 6e 20 6f  sh; conversion o
183b0 66 20 5b 68 65 78 61 64 65 63 69 6d 61 6c 20 69  f [hexadecimal i
183c0 6e 74 65 67 65 72 73 5d 20 73 74 6f 70 73 20 0a  ntegers] stops .
183d0 20 20 20 20 20 20 20 20 61 74 20 74 68 65 20 22          at the "
183e0 78 22 20 69 6e 20 74 68 65 20 22 30 78 22 20 70  x" in the "0x" p
183f0 72 65 66 69 78 20 6f 66 20 74 68 65 20 68 65 78  refix of the hex
18400 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65 72  adecimal integer
18410 20 73 74 72 69 6e 67 20 0a 20 20 20 20 20 20 20   string .       
18420 20 61 6e 64 20 74 68 75 73 20 72 65 73 75 6c 74   and thus result
18430 20 6f 66 20 74 68 65 20 43 41 53 54 20 69 73 20   of the CAST is 
18440 61 6c 77 61 79 73 20 7a 65 72 6f 2e 29 5e 0a 0a  always zero.)^..
18450 20 20 20 20 20 20 3c 70 3e 5e 41 20 63 61 73 74        <p>^A cast
18460 20 6f 66 20 61 20 52 45 41 4c 20 76 61 6c 75 65   of a REAL value
18470 20 69 6e 74 6f 20 61 6e 20 49 4e 54 45 47 45 52   into an INTEGER
18480 20 72 65 73 75 6c 74 73 20 69 6e 20 74 68 65 20   results in the 
18490 69 6e 74 65 67 65 72 0a 20 20 20 20 20 20 62 65  integer.      be
184a0 74 77 65 65 6e 20 74 68 65 20 52 45 41 4c 20 76  tween the REAL v
184b0 61 6c 75 65 20 61 6e 64 20 7a 65 72 6f 20 74 68  alue and zero th
184c0 61 74 20 69 73 20 63 6c 6f 73 65 73 74 20 74 6f  at is closest to
184d0 20 74 68 65 20 52 45 41 4c 20 76 61 6c 75 65 2e   the REAL value.
184e0 0a 20 20 20 20 20 20 5e 49 66 20 61 20 52 45 41  .      ^If a REA
184f0 4c 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  L is greater tha
18500 6e 20 74 68 65 20 67 72 65 61 74 65 73 74 20 70  n the greatest p
18510 6f 73 73 69 62 6c 65 20 73 69 67 6e 65 64 0a 20  ossible signed. 
18520 20 20 20 20 20 69 6e 74 65 67 65 72 20 28 2b 39       integer (+9
18530 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
18540 30 37 29 20 74 68 65 6e 20 74 68 65 20 72 65 73  07) then the res
18550 75 6c 74 20 69 73 20 74 68 65 20 67 72 65 61 74  ult is the great
18560 65 73 74 20 70 6f 73 73 69 62 6c 65 0a 20 20 20  est possible.   
18570 20 20 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65     signed intege
18580 72 20 61 6e 64 20 69 66 20 74 68 65 20 52 45 41  r and if the REA
18590 4c 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  L is less than t
185a0 68 65 20 6c 65 61 73 74 20 70 6f 73 73 69 62 6c  he least possibl
185b0 65 20 73 69 67 6e 65 64 0a 20 20 20 20 20 20 69  e signed.      i
185c0 6e 74 65 67 65 72 20 28 2d 39 32 32 33 33 37 32  nteger (-9223372
185d0 30 33 36 38 35 34 37 37 35 38 30 38 29 20 74 68  036854775808) th
185e0 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
185f0 20 74 68 65 20 6c 65 61 73 74 20 70 6f 73 73 69   the least possi
18600 62 6c 65 0a 20 20 20 20 20 20 73 69 67 6e 65 64  ble.      signed
18610 20 69 6e 74 65 67 65 72 2e 0a 0a 20 20 20 20 20   integer...     
18620 20 3c 70 3e 50 72 69 6f 72 20 74 6f 20 53 51 4c   <p>Prior to SQL
18630 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 38 2e  ite version 3.8.
18640 32 20 28 5b 64 61 74 65 6f 66 3a 33 2e 38 2e 32  2 ([dateof:3.8.2
18650 5d 29 2c 0a 20 20 20 20 20 20 63 61 73 74 69 6e  ]),.      castin
18660 67 20 61 20 52 45 41 4c 20 76 61 6c 75 65 20 67  g a REAL value g
18670 72 65 61 74 65 72 20 74 68 61 6e 0a 20 20 20 20  reater than.    
18680 20 20 2b 39 32 32 33 33 37 32 30 33 36 38 35 34    +9223372036854
18690 37 37 35 38 30 37 2e 30 20 69 6e 74 6f 20 61 6e  775807.0 into an
186a0 20 69 6e 74 65 67 65 72 20 72 65 73 75 6c 74 65   integer resulte
186b0 64 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 6e 65  d in the most ne
186c0 67 61 74 69 76 65 0a 20 20 20 20 20 20 69 6e 74  gative.      int
186d0 65 67 65 72 2c 20 2d 39 32 32 33 33 37 32 30 33  eger, -922337203
186e0 36 38 35 34 37 37 35 38 30 38 2e 20 20 54 68 69  6854775808.  Thi
186f0 73 20 62 65 68 61 76 69 6f 72 20 77 61 73 20 6d  s behavior was m
18700 65 61 6e 74 20 74 6f 20 65 6d 75 6c 61 74 65 20  eant to emulate 
18710 74 68 65 0a 20 20 20 20 20 20 62 65 68 61 76 69  the.      behavi
18720 6f 72 20 6f 66 20 78 38 36 2f 78 36 34 20 68 61  or of x86/x64 ha
18730 72 64 77 61 72 65 20 77 68 65 6e 20 64 6f 69 6e  rdware when doin
18740 67 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74  g the equivalent
18750 20 63 61 73 74 2e 0a 0a 3c 74 72 3e 0a 20 20 3c   cast...<tr>.  <
18760 74 64 3e 20 4e 55 4d 45 52 49 43 0a 20 20 3c 74  td> NUMERIC.  <t
18770 64 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 54 45  d> ^Casting a TE
18780 58 54 20 6f 72 20 42 4c 4f 42 20 76 61 6c 75 65  XT or BLOB value
18790 20 69 6e 74 6f 20 4e 55 4d 45 52 49 43 20 66 69   into NUMERIC fi
187a0 72 73 74 20 64 6f 65 73 20 61 20 66 6f 72 63 65  rst does a force
187b0 64 0a 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20  d.   conversion 
187c0 69 6e 74 6f 20 52 45 41 4c 20 62 75 74 20 74 68  into REAL but th
187d0 65 6e 20 66 75 72 74 68 65 72 20 63 6f 6e 76 65  en further conve
187e0 72 74 73 20 74 68 65 20 72 65 73 75 6c 74 20 69  rts the result i
187f0 6e 74 6f 20 49 4e 54 45 47 45 52 20 69 66 0a 20  nto INTEGER if. 
18800 20 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68    and only if th
18810 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 66 72 6f  e conversion fro
18820 6d 20 52 45 41 4c 20 74 6f 20 49 4e 54 45 47 45  m REAL to INTEGE
18830 52 20 69 73 20 6c 6f 73 73 6c 65 73 73 20 61 6e  R is lossless an
18840 64 20 72 65 76 65 72 73 69 62 6c 65 2e 0a 20 20  d reversible..  
18850 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c   This is the onl
18860 79 20 63 6f 6e 74 65 78 74 20 69 6e 20 53 51 4c  y context in SQL
18870 69 74 65 20 77 68 65 72 65 20 74 68 65 20 4e 55  ite where the NU
18880 4d 45 52 49 43 20 61 6e 64 20 49 4e 54 45 47 45  MERIC and INTEGE
18890 52 20 5b 61 66 66 69 6e 69 74 69 65 73 5d 0a 20  R [affinities]. 
188a0 20 20 62 65 68 61 76 65 20 64 69 66 66 65 72 65    behave differe
188b0 6e 74 6c 79 2e 0a 20 20 20 3c 70 3e 20 5e 43 61  ntly..   <p> ^Ca
188c0 73 74 69 6e 67 20 61 20 52 45 41 4c 20 6f 72 20  sting a REAL or 
188d0 49 4e 54 45 47 45 52 20 76 61 6c 75 65 20 74 6f  INTEGER value to
188e0 20 4e 55 4d 45 52 49 43 20 69 73 20 61 20 6e 6f   NUMERIC is a no
188f0 2d 6f 70 2c 20 65 76 65 6e 20 69 66 20 61 20 72  -op, even if a r
18900 65 61 6c 0a 20 20 20 76 61 6c 75 65 20 63 6f 75  eal.   value cou
18910 6c 64 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79  ld be losslessly
18920 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e   converted to an
18930 20 69 6e 74 65 67 65 72 2e 0a 0a 3c 2f 74 72 3e   integer...</tr>
18940 0a 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e 5e  ..</table>..<p>^
18950 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 72 65  Note that the re
18960 73 75 6c 74 20 66 72 6f 6d 20 63 61 73 74 69 6e  sult from castin
18970 67 20 61 6e 79 20 6e 6f 6e 2d 42 4c 4f 42 20 76  g any non-BLOB v
18980 61 6c 75 65 20 69 6e 74 6f 20 61 20 0a 42 4c 4f  alue into a .BLO
18990 42 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74  B and the result
189a0 20 66 72 6f 6d 20 63 61 73 74 69 6e 67 20 61 6e   from casting an
189b0 79 20 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74  y BLOB value int
189c0 6f 20 61 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c  o a non-BLOB val
189d0 75 65 0a 6d 61 79 20 62 65 20 64 69 66 66 65 72  ue.may be differ
189e0 65 6e 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  ent depending on
189f0 20 77 68 65 74 68 65 72 20 74 68 65 20 64 61 74   whether the dat
18a00 61 62 61 73 65 20 5b 65 6e 63 6f 64 69 6e 67 5d  abase [encoding]
18a10 20 69 73 20 55 54 46 2d 38 2c 0a 55 54 46 2d 31   is UTF-8,.UTF-1
18a20 36 62 65 2c 20 6f 72 20 55 54 46 2d 31 36 6c 65  6be, or UTF-16le
18a30 2e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  ....<tcl>hd_frag
18a40 6d 65 6e 74 20 62 6f 6f 6c 65 61 6e 65 78 70 72  ment booleanexpr
18a50 20 7b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73   {boolean expres
18a60 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  sion}</tcl>.<h3>
18a70 42 6f 6f 6c 65 61 6e 20 45 78 70 72 65 73 73 69  Boolean Expressi
18a80 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  ons</h3>..<p>The
18a90 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 66 65   SQL language fe
18aa0 61 74 75 72 65 73 20 73 65 76 65 72 61 6c 20 63  atures several c
18ab0 6f 6e 74 65 78 74 73 20 77 68 65 72 65 20 61 6e  ontexts where an
18ac0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 0a   expression is .
18ad0 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68  evaluated and th
18ae0 65 20 72 65 73 75 6c 74 20 63 6f 6e 76 65 72 74  e result convert
18af0 65 64 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20  ed to a boolean 
18b00 28 74 72 75 65 20 6f 72 20 66 61 6c 73 65 29 20  (true or false) 
18b10 76 61 6c 75 65 2e 20 54 68 65 73 65 0a 63 6f 6e  value. These.con
18b20 74 65 78 74 73 20 61 72 65 3a 0a 0a 20 20 3c 75  texts are:..  <u
18b30 6c 3e 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20  l>.    <li> the 
18b40 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
18b50 61 20 53 45 4c 45 43 54 2c 20 55 50 44 41 54 45  a SELECT, UPDATE
18b60 20 6f 72 20 44 45 4c 45 54 45 20 73 74 61 74 65   or DELETE state
18b70 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74  ment,.    <li> t
18b80 68 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63  he ON or USING c
18b90 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
18ba0 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  in a SELECT stat
18bb0 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20  ement,.    <li> 
18bc0 74 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  the HAVING claus
18bd0 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  e of a SELECT st
18be0 61 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69  atement,.    <li
18bf0 3e 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73  > the WHEN claus
18c00 65 20 6f 66 20 61 6e 20 53 51 4c 20 74 72 69 67  e of an SQL trig
18c10 67 65 72 2c 20 61 6e 64 0a 20 20 20 20 3c 6c 69  ger, and.    <li
18c20 3e 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73  > the WHEN claus
18c30 65 20 6f 72 20 63 6c 61 75 73 65 73 20 6f 66 20  e or clauses of 
18c40 73 6f 6d 65 20 43 41 53 45 20 65 78 70 72 65 73  some CASE expres
18c50 73 69 6f 6e 73 2e 0a 20 20 3c 2f 75 6c 3e 0a 0a  sions..  </ul>..
18c60 3c 70 3e 5e 28 54 6f 20 63 6f 6e 76 65 72 74 20  <p>^(To convert 
18c70 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61  the results of a
18c80 6e 20 53 51 4c 20 65 78 70 72 65 73 73 69 6f 6e  n SQL expression
18c90 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   to a boolean va
18ca0 6c 75 65 2c 20 53 51 4c 69 74 65 0a 66 69 72 73  lue, SQLite.firs
18cb0 74 20 63 61 73 74 73 20 74 68 65 20 72 65 73 75  t casts the resu
18cc0 6c 74 20 74 6f 20 61 20 4e 55 4d 45 52 49 43 20  lt to a NUMERIC 
18cd0 76 61 6c 75 65 20 69 6e 20 74 68 65 20 73 61 6d  value in the sam
18ce0 65 20 77 61 79 20 61 73 20 61 20 0a 5b 43 41 53  e way as a .[CAS
18cf0 54 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41  T expression]. A
18d00 20 6e 75 6d 65 72 69 63 20 7a 65 72 6f 20 76 61   numeric zero va
18d10 6c 75 65 20 28 69 6e 74 65 67 65 72 20 76 61 6c  lue (integer val
18d20 75 65 20 30 20 6f 72 20 72 65 61 6c 20 0a 76 61  ue 0 or real .va
18d30 6c 75 65 20 30 2e 30 29 20 69 73 20 63 6f 6e 73  lue 0.0) is cons
18d40 69 64 65 72 65 64 20 74 6f 20 62 65 20 66 61 6c  idered to be fal
18d50 73 65 2e 20 20 41 20 4e 55 4c 4c 20 76 61 6c 75  se.  A NULL valu
18d60 65 20 69 73 20 73 74 69 6c 6c 20 4e 55 4c 4c 2e  e is still NULL.
18d70 0a 41 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65  .All other value
18d80 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
18d90 20 74 72 75 65 2e 29 5e 0a 0a 3c 70 3e 5e 28 46   true.)^..<p>^(F
18da0 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20  or example, the 
18db0 76 61 6c 75 65 73 20 4e 55 4c 4c 2c 20 30 2e 30  values NULL, 0.0
18dc0 2c 20 30 2c 20 27 65 6e 67 6c 69 73 68 27 20 61  , 0, 'english' a
18dd0 6e 64 20 27 30 27 20 61 72 65 20 61 6c 6c 20 63  nd '0' are all c
18de0 6f 6e 73 69 64 65 72 65 64 0a 74 6f 20 62 65 20  onsidered.to be 
18df0 66 61 6c 73 65 2e 29 5e 20 5e 28 56 61 6c 75 65  false.)^ ^(Value
18e00 73 20 31 2c 20 31 2e 30 2c 20 30 2e 31 2c 20 2d  s 1, 1.0, 0.1, -
18e10 30 2e 31 20 61 6e 64 20 27 31 65 6e 67 6c 69 73  0.1 and '1englis
18e20 68 27 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  h' are considere
18e30 64 20 74 6f 20 0a 62 65 20 74 72 75 65 2e 29 5e  d to .be true.)^
18e40 0a 0a 3c 68 33 3e 46 75 6e 63 74 69 6f 6e 73 3c  ..<h3>Functions<
18e50 2f 68 33 3e 0a 3c 70 3e 53 51 4c 69 74 65 20 73  /h3>.<p>SQLite s
18e60 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 5b 63 6f  upports many [co
18e70 72 65 66 75 6e 63 7c 73 69 6d 70 6c 65 5d 20 61  refunc|simple] a
18e80 6e 64 20 5b 61 67 67 66 75 6e 63 7c 61 67 67 72  nd [aggfunc|aggr
18e90 65 67 61 74 65 5d 0a 53 51 4c 20 66 75 6e 63 74  egate].SQL funct
18ea0 69 6f 6e 73 2e 20 20 46 6f 72 20 70 72 65 73 65  ions.  For prese
18eb0 6e 74 61 74 69 6f 6e 20 70 75 72 70 6f 73 65 73  ntation purposes
18ec0 2c 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f  , simple functio
18ed0 6e 73 20 61 72 65 20 66 75 72 74 68 65 72 0a 73  ns are further.s
18ee0 75 62 64 69 76 69 64 65 64 20 69 6e 74 6f 20 5b  ubdivided into [
18ef0 63 6f 72 65 66 75 6e 63 20 7c 20 63 6f 72 65 20  corefunc | core 
18f00 66 75 6e 63 74 69 6f 6e 73 5d 20 61 6e 64 20 5b  functions] and [
18f10 64 61 74 65 66 75 6e 63 7c 64 61 74 65 2d 74 69  datefunc|date-ti
18f20 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 2e 0a 41  me functions]..A
18f30 70 70 6c 69 63 61 74 69 6f 6e 73 20 63 61 6e 20  pplications can 
18f40 61 64 64 20 6e 65 77 20 66 75 6e 63 74 69 6f 6e  add new function
18f50 73 2c 20 77 72 69 74 74 65 6e 20 69 6e 20 43 2f  s, written in C/
18f60 43 2b 2b 2c 20 75 73 69 6e 67 20 74 68 65 0a 5b  C++, using the.[
18f70 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
18f80 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72  unction()] inter
18f90 66 61 63 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e  face..</p>..<p>^
18fa0 49 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74  It is possible t
18fb0 6f 20 68 61 76 65 20 61 6e 20 61 67 67 72 65 67  o have an aggreg
18fc0 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ate function wit
18fd0 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  h the same name 
18fe0 61 73 20 61 0a 73 69 6d 70 6c 65 20 66 75 6e 63  as a.simple func
18ff0 74 69 6f 6e 2c 20 61 73 20 6c 6f 6e 67 20 61 73  tion, as long as
19000 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61   the number of a
19010 72 67 75 6d 65 6e 74 73 20 66 6f 72 20 74 68 65  rguments for the
19020 20 74 77 6f 20 66 6f 72 6d 73 20 6f 66 20 74 68   two forms of th
19030 65 0a 66 75 6e 63 74 69 6f 6e 20 61 72 65 20 64  e.function are d
19040 69 66 66 65 72 65 6e 74 2e 20 20 5e 46 6f 72 20  ifferent.  ^For 
19050 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 5b 61 67  example, the [ag
19060 67 5f 6d 61 78 7c 6d 61 78 28 29 5d 20 66 75 6e  g_max|max()] fun
19070 63 74 69 6f 6e 20 77 69 74 68 20 61 0a 73 69 6e  ction with a.sin
19080 67 6c 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20  gle argument is 
19090 61 6e 20 61 67 67 72 65 67 61 74 65 20 61 6e 64  an aggregate and
190a0 20 74 68 65 20 5b 6d 61 78 28 29 5d 20 66 75 6e   the [max()] fun
190b0 63 74 69 6f 6e 20 77 69 74 68 20 74 77 6f 20 6f  ction with two o
190c0 72 20 6d 6f 72 65 0a 61 72 67 75 6d 65 6e 74 73  r more.arguments
190d0 20 69 73 20 61 20 73 69 6d 70 6c 65 20 66 75 6e   is a simple fun
190e0 63 74 69 6f 6e 2e 0a 0a 3c 74 63 6c 3e 0a 23 23  ction...<tcl>.##
190f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19100 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19110 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19120 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19130 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
19140 74 69 6f 6e 20 7b 43 6f 72 65 20 46 75 6e 63 74  tion {Core Funct
19150 69 6f 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 7b  ions} corefunc {
19160 2a 63 6f 72 65 66 75 6e 63 7d 0a 75 6e 73 65 74  *corefunc}.unset
19170 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63 6f 72   -nocomplain cor
19180 65 66 75 6e 63 73 65 74 0a 70 72 6f 63 20 66 75  efuncset.proc fu
19190 6e 63 64 65 66 20 7b 73 79 6e 74 61 78 20 6b 65  ncdef {syntax ke
191a0 79 77 6f 72 64 73 20 64 65 73 63 7d 20 7b 0a 20  ywords desc} {. 
191b0 20 67 6c 6f 62 61 6c 20 63 6f 72 65 66 75 6e 63   global corefunc
191c0 73 65 74 0a 20 20 72 65 67 65 78 70 20 7b 5e 5b  set.  regexp {^[
191d0 61 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61 78 20  a-z_]+} $syntax 
191e0 62 61 73 65 73 79 6e 74 61 78 0a 20 20 73 65 74  basesyntax.  set
191f0 20 63 6f 72 65 66 75 6e 63 73 65 74 28 24 62 61   corefuncset($ba
19200 73 65 73 79 6e 74 61 78 29 20 5b 6c 69 73 74 20  sesyntax) [list 
19210 24 73 79 6e 74 61 78 20 24 6b 65 79 77 6f 72 64  $syntax $keyword
19220 73 20 24 64 65 73 63 5d 0a 7d 0a 66 75 6e 63 64  s $desc].}.funcd
19230 65 66 20 7b 61 62 73 28 58 29 7d 20 7b 7d 20 7b  ef {abs(X)} {} {
19240 0a 20 20 5e 54 68 65 20 61 62 73 28 58 29 20 66  .  ^The abs(X) f
19250 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
19260 74 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61 6c  the absolute val
19270 75 65 20 6f 66 20 74 68 65 20 6e 75 6d 65 72 69  ue of the numeri
19280 63 0a 20 20 61 72 67 75 6d 65 6e 74 20 58 2e 20  c.  argument X. 
19290 20 5e 41 62 73 28 58 29 20 72 65 74 75 72 6e 73   ^Abs(X) returns
192a0 20 4e 55 4c 4c 20 69 66 20 58 20 69 73 20 4e 55   NULL if X is NU
192b0 4c 4c 2e 20 0a 20 20 5e 28 41 62 73 28 58 29 20  LL. .  ^(Abs(X) 
192c0 72 65 74 75 72 6e 73 20 30 2e 30 20 69 66 20 58  returns 0.0 if X
192d0 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20   is a string or 
192e0 62 6c 6f 62 0a 20 20 74 68 61 74 20 63 61 6e 6e  blob.  that cann
192f0 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
19300 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c  to a numeric val
19310 75 65 2e 29 5e 20 20 5e 49 66 20 58 20 69 73 20  ue.)^  ^If X is 
19320 74 68 65 20 0a 20 20 69 6e 74 65 67 65 72 20 2d  the .  integer -
19330 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
19340 38 30 38 20 74 68 65 6e 20 61 62 73 28 58 29 20  808 then abs(X) 
19350 74 68 72 6f 77 73 20 61 6e 20 69 6e 74 65 67 65  throws an intege
19360 72 20 6f 76 65 72 66 6c 6f 77 0a 20 20 65 72 72  r overflow.  err
19370 6f 72 20 73 69 6e 63 65 20 74 68 65 72 65 20 69  or since there i
19380 73 20 6e 6f 20 65 71 75 69 76 61 6c 65 6e 74 20  s no equivalent 
19390 70 6f 73 69 74 69 76 65 20 36 34 2d 62 69 74 20  positive 64-bit 
193a0 74 77 6f 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 76  two complement v
193b0 61 6c 75 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  alue..}..funcdef
193c0 20 7b 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20   {changes()} {} 
193d0 7b 0a 20 20 5e 54 68 65 20 63 68 61 6e 67 65 73  {.  ^The changes
193e0 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
193f0 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
19400 66 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20  f database rows 
19410 74 68 61 74 20 77 65 72 65 20 63 68 61 6e 67 65  that were change
19420 64 0a 20 20 6f 72 20 69 6e 73 65 72 74 65 64 20  d.  or inserted 
19430 6f 72 20 64 65 6c 65 74 65 64 20 62 79 20 74 68  or deleted by th
19440 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 20  e most recently 
19450 63 6f 6d 70 6c 65 74 65 64 20 49 4e 53 45 52 54  completed INSERT
19460 2c 20 44 45 4c 45 54 45 2c 0a 20 20 6f 72 20 55  , DELETE,.  or U
19470 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2c  PDATE statement,
19480 20 65 78 63 6c 75 73 69 76 65 20 6f 66 20 73 74   exclusive of st
19490 61 74 65 6d 65 6e 74 73 20 69 6e 20 6c 6f 77 65  atements in lowe
194a0 72 2d 6c 65 76 65 6c 20 74 72 69 67 67 65 72 73  r-level triggers
194b0 2e 0a 20 20 5e 54 68 65 20 63 68 61 6e 67 65 73  ..  ^The changes
194c0 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  () SQL function 
194d0 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72 6f  is a wrapper aro
194e0 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65 33  und the [sqlite3
194f0 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f  _changes()].  C/
19500 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  C++ function and
19510 20 68 65 6e 63 65 20 66 6f 6c 6c 6f 77 73 20 74   hence follows t
19520 68 65 20 73 61 6d 65 20 72 75 6c 65 73 20 66 6f  he same rules fo
19530 72 20 63 6f 75 6e 74 69 6e 67 20 63 68 61 6e 67  r counting chang
19540 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  es..}..funcdef {
19550 63 68 61 72 28 58 31 2c 58 32 2c 2e 2e 2e 2c 58  char(X1,X2,...,X
19560 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 28 54 68 65  N)} {} {.  ^(The
19570 20 63 68 61 72 28 58 31 2c 58 32 2c 2e 2e 2e 2c   char(X1,X2,...,
19580 58 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  XN) function ret
19590 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 63 6f  urns a string co
195a0 6d 70 6f 73 65 64 20 6f 66 20 63 68 61 72 61 63  mposed of charac
195b0 74 65 72 73 20 68 61 76 69 6e 67 20 74 68 65 0a  ters having the.
195c0 20 20 20 75 6e 69 63 6f 64 65 20 63 6f 64 65 20     unicode code 
195d0 70 6f 69 6e 74 20 76 61 6c 75 65 73 20 6f 66 20  point values of 
195e0 69 6e 74 65 67 65 72 73 20 58 31 20 74 68 72 6f  integers X1 thro
195f0 75 67 68 20 58 4e 2c 20 72 65 73 70 65 63 74 69  ugh XN, respecti
19600 76 65 6c 79 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64  vely.)^.}..funcd
19610 65 66 20 7b 63 6f 61 6c 65 73 63 65 28 58 2c 59  ef {coalesce(X,Y
19620 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ,...)} {} {.  ^T
19630 68 65 20 63 6f 61 6c 65 73 63 65 28 29 20 66 75  he coalesce() fu
19640 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
19650 20 63 6f 70 79 20 6f 66 20 69 74 73 20 66 69 72   copy of its fir
19660 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75  st non-NULL argu
19670 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c 20  ment, or.  NULL 
19680 69 66 20 61 6c 6c 20 61 72 67 75 6d 65 6e 74 73  if all arguments
19690 20 61 72 65 20 4e 55 4c 4c 2e 20 20 5e 43 6f 61   are NULL.  ^Coa
196a0 6c 65 73 63 65 28 29 20 6d 75 73 74 20 68 61 76  lesce() must hav
196b0 65 20 61 74 20 6c 65 61 73 74 20 0a 20 20 32 20  e at least .  2 
196c0 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75  arguments..}..fu
196d0 6e 63 64 65 66 20 7b 67 6c 6f 62 28 58 2c 59 29  ncdef {glob(X,Y)
196e0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 67 6c  } {} {.  ^The gl
196f0 6f 62 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  ob(X,Y) function
19700 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74   is equivalent t
19710 6f 20 74 68 65 0a 20 20 65 78 70 72 65 73 73 69  o the.  expressi
19720 6f 6e 20 22 3c 62 3e 59 20 47 4c 4f 42 20 58 3c  on "<b>Y GLOB X<
19730 2f 62 3e 22 2e 0a 20 20 4e 6f 74 65 20 74 68 61  /b>"..  Note tha
19740 74 20 74 68 65 20 58 20 61 6e 64 20 59 20 61 72  t the X and Y ar
19750 67 75 6d 65 6e 74 73 20 61 72 65 20 72 65 76 65  guments are reve
19760 72 73 65 64 20 69 6e 20 74 68 65 20 67 6c 6f 62  rsed in the glob
19770 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65  () function.  re
19780 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e  lative to the in
19790 66 69 78 20 5b 47 4c 4f 42 5d 20 6f 70 65 72 61  fix [GLOB] opera
197a0 74 6f 72 2e 0a 20 20 5e 49 66 20 74 68 65 20 5b  tor..  ^If the [
197b0 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
197c0 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72  unction()] inter
197d0 66 61 63 65 20 69 73 20 75 73 65 64 20 74 6f 0a  face is used to.
197e0 20 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 67    override the g
197f0 6c 6f 62 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  lob(X,Y) functio
19800 6e 20 77 69 74 68 20 61 6e 20 61 6c 74 65 72 6e  n with an altern
19810 61 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61  ative implementa
19820 74 69 6f 6e 20 74 68 65 6e 0a 20 20 74 68 65 20  tion then.  the 
19830 5b 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72 20  [GLOB] operator 
19840 77 69 6c 6c 20 69 6e 76 6f 6b 65 20 74 68 65 20  will invoke the 
19850 61 6c 74 65 72 6e 61 74 69 76 65 20 69 6d 70 6c  alternative impl
19860 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 7d 0a 0a 66  ementation..}..f
19870 75 6e 63 64 65 66 20 7b 69 66 6e 75 6c 6c 28 58  uncdef {ifnull(X
19880 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
19890 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69   ifnull() functi
198a0 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70  on returns a cop
198b0 79 20 6f 66 20 69 74 73 20 66 69 72 73 74 20 6e  y of its first n
198c0 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74  on-NULL argument
198d0 2c 20 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20 62  , or.  NULL if b
198e0 6f 74 68 20 61 72 67 75 6d 65 6e 74 73 20 61 72  oth arguments ar
198f0 65 20 4e 55 4c 4c 2e 20 20 5e 49 66 6e 75 6c 6c  e NULL.  ^Ifnull
19900 28 29 20 6d 75 73 74 20 68 61 76 65 20 65 78 61  () must have exa
19910 63 74 6c 79 20 32 20 61 72 67 75 6d 65 6e 74 73  ctly 2 arguments
19920 2e 0a 20 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28  ..  ^The ifnull(
19930 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71  ) function is eq
19940 75 69 76 61 6c 65 6e 74 20 74 6f 20 5b 63 6f 61  uivalent to [coa
19950 6c 65 73 63 65 28 29 5d 20 77 69 74 68 20 74 77  lesce()] with tw
19960 6f 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a  o arguments..}..
19970 66 75 6e 63 64 65 66 20 7b 69 6e 73 74 72 28 58  funcdef {instr(X
19980 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
19990 20 69 6e 73 74 72 28 58 2c 59 29 20 66 75 6e 63   instr(X,Y) func
199a0 74 69 6f 6e 20 66 69 6e 64 73 20 74 68 65 20 66  tion finds the f
199b0 69 72 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20  irst occurrence 
199c0 6f 66 20 73 74 72 69 6e 67 20 59 20 77 69 74 68  of string Y with
199d0 69 6e 20 0a 20 20 73 74 72 69 6e 67 20 58 20 61  in .  string X a
199e0 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e  nd returns the n
199f0 75 6d 62 65 72 20 6f 66 20 70 72 69 6f 72 20 63  umber of prior c
19a00 68 61 72 61 63 74 65 72 73 20 70 6c 75 73 20 31  haracters plus 1
19a10 2c 20 6f 72 20 30 20 69 66 0a 20 20 59 20 69 73  , or 0 if.  Y is
19a20 20 6e 6f 77 68 65 72 65 20 66 6f 75 6e 64 20 77   nowhere found w
19a30 69 74 68 69 6e 20 58 2e 0a 20 20 5e 4f 72 2c 20  ithin X..  ^Or, 
19a40 69 66 20 58 20 61 6e 64 20 59 20 61 72 65 20 62  if X and Y are b
19a50 6f 74 68 20 42 4c 4f 42 73 2c 20 74 68 65 6e 20  oth BLOBs, then 
19a60 69 6e 73 74 72 28 58 2c 59 29 20 72 65 74 75 72  instr(X,Y) retur
19a70 6e 73 20 6f 6e 65 0a 20 20 6d 6f 72 65 20 74 68  ns one.  more th
19a80 61 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 62 79  an the number by
19a90 74 65 73 20 70 72 69 6f 72 20 74 6f 20 74 68 65  tes prior to the
19aa0 20 66 69 72 73 74 20 6f 63 63 75 72 72 65 6e 63   first occurrenc
19ab0 65 20 6f 66 20 59 2c 20 6f 72 20 30 20 69 66 0a  e of Y, or 0 if.
19ac0 20 20 59 20 64 6f 65 73 20 6e 6f 74 20 6f 63 63    Y does not occ
19ad0 75 72 20 61 6e 79 77 68 65 72 65 20 77 69 74 68  ur anywhere with
19ae0 69 6e 20 58 2e 0a 20 20 5e 49 66 20 62 6f 74 68  in X..  ^If both
19af0 20 61 72 67 75 6d 65 6e 74 73 20 58 20 61 6e 64   arguments X and
19b00 20 59 20 74 6f 20 69 6e 73 74 72 28 58 2c 59 29   Y to instr(X,Y)
19b10 20 61 72 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 6e   are non-NULL an
19b20 64 20 61 72 65 20 6e 6f 74 20 42 4c 4f 42 73 0a  d are not BLOBs.
19b30 20 20 74 68 65 6e 20 62 6f 74 68 20 61 72 65 20    then both are 
19b40 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 73  interpreted as s
19b50 74 72 69 6e 67 73 2e 0a 20 20 5e 49 66 20 65 69  trings..  ^If ei
19b60 74 68 65 72 20 58 20 6f 72 20 59 20 61 72 65 20  ther X or Y are 
19b70 4e 55 4c 4c 20 69 6e 20 69 6e 73 74 72 28 58 2c  NULL in instr(X,
19b80 59 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  Y) then the resu
19b90 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 7d 0a 0a 66  lt is NULL..}..f
19ba0 75 6e 63 64 65 66 20 7b 68 65 78 28 58 29 7d 20  uncdef {hex(X)} 
19bb0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 68 65 78 28  {} {.  ^The hex(
19bc0 29 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 65 72  ) function inter
19bd0 70 72 65 74 73 20 69 74 73 20 61 72 67 75 6d 65  prets its argume
19be0 6e 74 20 61 73 20 61 20 42 4c 4f 42 20 61 6e 64  nt as a BLOB and
19bf0 20 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74 72   returns.  a str
19c00 69 6e 67 20 77 68 69 63 68 20 69 73 20 74 68 65  ing which is the
19c10 20 75 70 70 65 72 2d 63 61 73 65 20 68 65 78 61   upper-case hexa
19c20 64 65 63 69 6d 61 6c 20 72 65 6e 64 65 72 69 6e  decimal renderin
19c30 67 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  g of the content
19c40 20 6f 66 0a 20 20 74 68 61 74 20 62 6c 6f 62 2e   of.  that blob.
19c50 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 61 73  .}..funcdef {las
19c60 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
19c70 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 61  } {} {.  ^The la
19c80 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
19c90 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
19ca0 6e 73 20 74 68 65 20 5b 52 4f 57 49 44 5d 0a 20  ns the [ROWID]. 
19cb0 20 6f 66 20 74 68 65 20 6c 61 73 74 20 72 6f 77   of the last row
19cc0 20 69 6e 73 65 72 74 20 66 72 6f 6d 20 74 68 65   insert from the
19cd0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
19ce0 74 69 6f 6e 20 77 68 69 63 68 20 69 6e 76 6f 6b  tion which invok
19cf0 65 64 20 74 68 65 0a 20 20 66 75 6e 63 74 69 6f  ed the.  functio
19d00 6e 2e 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f 69  n..  ^The last_i
19d10 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 53 51  nsert_rowid() SQ
19d20 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20  L function is a 
19d30 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
19d40 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c 61  he.  [sqlite3_la
19d50 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
19d60 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61  )] C/C++ interfa
19d70 63 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a  ce function..}..
19d80 66 75 6e 63 64 65 66 20 7b 6c 65 6e 67 74 68 28  funcdef {length(
19d90 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 46 6f 72 20  X)} {} {.  ^For 
19da0 61 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 58  a string value X
19db0 2c 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29 20  , the length(X) 
19dc0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
19dd0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 0a   the number of .
19de0 20 20 63 68 61 72 61 63 74 65 72 73 20 28 6e 6f    characters (no
19df0 74 20 62 79 74 65 73 29 20 69 6e 20 58 20 70 72  t bytes) in X pr
19e00 69 6f 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  ior to the first
19e10 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72 2e 0a   NUL character..
19e20 20 20 53 69 6e 63 65 20 53 51 4c 69 74 65 20 73    Since SQLite s
19e30 74 72 69 6e 67 73 20 64 6f 20 6e 6f 74 20 6e 6f  trings do not no
19e40 72 6d 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20 4e  rmally contain N
19e50 55 4c 20 63 68 61 72 61 63 74 65 72 73 2c 20 74  UL characters, t
19e60 68 65 20 6c 65 6e 67 74 68 28 58 29 0a 20 20 66  he length(X).  f
19e70 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 75 73 75  unction will usu
19e80 61 6c 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20  ally return the 
19e90 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
19ea0 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68  characters in th
19eb0 65 20 73 74 72 69 6e 67 20 58 2e 0a 20 20 5e 46  e string X..  ^F
19ec0 6f 72 20 61 20 62 6c 6f 62 20 76 61 6c 75 65 20  or a blob value 
19ed0 58 2c 20 6c 65 6e 67 74 68 28 58 29 20 72 65 74  X, length(X) ret
19ee0 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20  urns the number 
19ef0 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  of bytes in the 
19f00 62 6c 6f 62 2e 0a 20 20 5e 49 66 20 58 20 69 73  blob..  ^If X is
19f10 20 4e 55 4c 4c 20 74 68 65 6e 20 6c 65 6e 67 74   NULL then lengt
19f20 68 28 58 29 20 69 73 20 4e 55 4c 4c 2e 0a 20 20  h(X) is NULL..  
19f30 5e 49 66 20 58 20 69 73 20 6e 75 6d 65 72 69 63  ^If X is numeric
19f40 20 74 68 65 6e 20 6c 65 6e 67 74 68 28 58 29 20   then length(X) 
19f50 72 65 74 75 72 6e 73 20 74 68 65 20 6c 65 6e 67  returns the leng
19f60 74 68 20 6f 66 20 61 20 73 74 72 69 6e 67 0a 20  th of a string. 
19f70 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
19f80 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  of X..}..funcdef
19f90 20 7b 6c 69 6b 65 28 58 2c 59 29 20 6c 69 6b 65   {like(X,Y) like
19fa0 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20  (X,Y,Z)} {} {.  
19fb0 5e 54 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63  ^The like() func
19fc0 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
19fd0 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20  implement the.  
19fe0 22 3c 62 3e 59 20 4c 49 4b 45 20 58 20 26 23 39  "<b>Y LIKE X &#9
19ff0 31 3b 45 53 43 41 50 45 20 5a 26 23 39 33 3b 3c  1;ESCAPE Z&#93;<
1a000 2f 62 3e 22 20 65 78 70 72 65 73 73 69 6f 6e 2e  /b>" expression.
1a010 20 0a 20 20 5e 49 66 20 74 68 65 20 6f 70 74 69   .  ^If the opti
1a020 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61 75  onal ESCAPE clau
1a030 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74  se is present, t
1a040 68 65 6e 20 74 68 65 0a 20 20 6c 69 6b 65 28 29  hen the.  like()
1a050 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 76   function is inv
1a060 6f 6b 65 64 20 77 69 74 68 20 74 68 72 65 65 20  oked with three 
1a070 61 72 67 75 6d 65 6e 74 73 2e 20 20 5e 4f 74 68  arguments.  ^Oth
1a080 65 72 77 69 73 65 2c 20 69 74 20 69 73 0a 20 20  erwise, it is.  
1a090 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 77 6f  invoked with two
1a0a0 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e 6c 79 2e   arguments only.
1a0b0 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 58   Note that the X
1a0c0 20 61 6e 64 20 59 20 70 61 72 61 6d 65 74 65 72   and Y parameter
1a0d0 73 20 61 72 65 0a 20 20 72 65 76 65 72 73 65 64  s are.  reversed
1a0e0 20 69 6e 20 74 68 65 20 6c 69 6b 65 28 29 20 66   in the like() f
1a0f0 75 6e 63 74 69 6f 6e 20 72 65 6c 61 74 69 76 65  unction relative
1a100 20 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b 4c   to the infix [L
1a110 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20  IKE] operator.. 
1a120 20 5e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 63   ^The [sqlite3_c
1a130 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29  reate_function()
1a140 5d 20 69 6e 74 65 72 66 61 63 65 20 63 61 6e 20  ] interface can 
1a150 62 65 20 75 73 65 64 20 74 6f 20 6f 76 65 72 72  be used to overr
1a160 69 64 65 20 74 68 65 0a 20 20 6c 69 6b 65 28 29  ide the.  like()
1a170 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68   function and th
1a180 65 72 65 62 79 20 63 68 61 6e 67 65 20 74 68 65  ereby change the
1a190 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68   operation of th
1a1a0 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61  e.  [LIKE] opera
1a1b0 74 6f 72 2e 20 20 57 68 65 6e 20 6f 76 65 72 72  tor.  When overr
1a1c0 69 64 69 6e 67 20 74 68 65 20 6c 69 6b 65 28 29  iding the like()
1a1d0 20 66 75 6e 63 74 69 6f 6e 2c 20 69 74 20 6d 61   function, it ma
1a1e0 79 20 62 65 20 69 6d 70 6f 72 74 61 6e 74 0a 20  y be important. 
1a1f0 20 74 6f 20 6f 76 65 72 72 69 64 65 20 62 6f 74   to override bot
1a200 68 20 74 68 65 20 74 77 6f 20 61 6e 64 20 74 68  h the two and th
1a210 72 65 65 20 61 72 67 75 6d 65 6e 74 20 76 65 72  ree argument ver
1a220 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 6c 69 6b  sions of the lik
1a230 65 28 29 20 0a 20 20 66 75 6e 63 74 69 6f 6e 2e  e() .  function.
1a240 20 4f 74 68 65 72 77 69 73 65 2c 20 64 69 66 66   Otherwise, diff
1a250 65 72 65 6e 74 20 63 6f 64 65 20 6d 61 79 20 62  erent code may b
1a260 65 20 63 61 6c 6c 65 64 20 74 6f 20 69 6d 70 6c  e called to impl
1a270 65 6d 65 6e 74 20 74 68 65 0a 20 20 5b 4c 49 4b  ement the.  [LIK
1a280 45 5d 20 6f 70 65 72 61 74 6f 72 20 64 65 70 65  E] operator depe
1a290 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
1a2a0 20 6f 72 20 6e 6f 74 20 61 6e 20 45 53 43 41 50   or not an ESCAP
1a2b0 45 20 63 6c 61 75 73 65 20 77 61 73 20 0a 20 20  E clause was .  
1a2c0 73 70 65 63 69 66 69 65 64 2e 0a 7d 0a 0a 0a 66  specified..}...f
1a2d0 75 6e 63 64 65 66 20 7b 6c 69 6b 65 6c 69 68 6f  uncdef {likeliho
1a2e0 6f 64 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  od(X,Y)} {} {.  
1a2f0 5e 54 68 65 20 6c 69 6b 65 6c 69 68 6f 6f 64 28  ^The likelihood(
1a300 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  X,Y) function re
1a310 74 75 72 6e 73 20 61 72 67 75 6d 65 6e 74 20 58  turns argument X
1a320 20 75 6e 63 68 61 6e 67 65 64 2e 0a 20 20 5e 28   unchanged..  ^(
1a330 54 68 65 20 76 61 6c 75 65 20 59 20 69 6e 20 6c  The value Y in l
1a340 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20 6d  ikelihood(X,Y) m
1a350 75 73 74 20 62 65 20 61 20 66 6c 6f 61 74 69 6e  ust be a floatin
1a360 67 20 70 6f 69 6e 74 20 63 6f 6e 73 74 61 6e 74  g point constant
1a370 0a 20 20 62 65 74 77 65 65 6e 20 30 2e 30 20 61  .  between 0.0 a
1a380 6e 64 20 31 2e 30 2c 20 69 6e 63 6c 75 73 69 76  nd 1.0, inclusiv
1a390 65 2e 29 5e 0a 20 20 5e 54 68 65 20 6c 69 6b 65  e.)^.  ^The like
1a3a0 6c 69 68 6f 6f 64 28 58 29 20 66 75 6e 63 74 69  lihood(X) functi
1a3b0 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 20 74 68  on is a no-op th
1a3c0 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  at the code gene
1a3d0 72 61 74 6f 72 0a 20 20 6f 70 74 69 6d 69 7a 65  rator.  optimize
1a3e0 73 20 61 77 61 79 20 73 6f 20 74 68 61 74 20 69  s away so that i
1a3f0 74 20 63 6f 6e 73 75 6d 65 73 20 6e 6f 20 43 50  t consumes no CP
1a400 55 20 63 79 63 6c 65 73 20 64 75 72 69 6e 67 20  U cycles during 
1a410 72 75 6e 2d 74 69 6d 65 0a 20 20 28 74 68 61 74  run-time.  (that
1a420 20 69 73 2c 20 64 75 72 69 6e 67 20 63 61 6c 6c   is, during call
1a430 73 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 73 74  s to [sqlite3_st
1a440 65 70 28 29 5d 29 2e 0a 20 20 5e 54 68 65 20 70  ep()])..  ^The p
1a450 75 72 70 6f 73 65 20 6f 66 20 74 68 65 20 6c 69  urpose of the li
1a460 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20 66 75  kelihood(X,Y) fu
1a470 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20 70 72 6f  nction is to pro
1a480 76 69 64 65 20 61 20 68 69 6e 74 0a 20 20 74 6f  vide a hint.  to
1a490 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e   the query plann
1a4a0 65 72 20 74 68 61 74 20 74 68 65 20 61 72 67 75  er that the argu
1a4b0 6d 65 6e 74 20 58 20 69 73 20 61 20 62 6f 6f 6c  ment X is a bool
1a4c0 65 61 6e 20 74 68 61 74 20 69 73 0a 20 20 74 72  ean that is.  tr
1a4d0 75 65 20 77 69 74 68 20 61 20 70 72 6f 62 61 62  ue with a probab
1a4e0 69 6c 69 74 79 20 6f 66 20 61 70 70 72 6f 78 69  ility of approxi
1a4f0 6d 61 74 65 6c 79 20 59 2e 0a 20 20 5e 28 54 68  mately Y..  ^(Th
1a500 65 20 5b 75 6e 6c 69 6b 65 6c 79 28 58 29 5d 20  e [unlikely(X)] 
1a510 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 68 6f 72  function is shor
1a520 74 2d 68 61 6e 64 20 66 6f 72 20 6c 69 6b 65 6c  t-hand for likel
1a530 69 68 6f 6f 64 28 58 2c 30 2e 30 36 32 35 29 2e  ihood(X,0.0625).
1a540 29 5e 0a 20 20 5e 28 54 68 65 20 5b 6c 69 6b 65  )^.  ^(The [like
1a550 6c 79 28 58 29 5d 20 66 75 6e 63 74 69 6f 6e 20  ly(X)] function 
1a560 69 73 20 73 68 6f 72 74 2d 68 61 6e 64 20 66 6f  is short-hand fo
1a570 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 30  r likelihood(X,0
1a580 2e 39 33 37 35 29 2e 29 5e 0a 7d 0a 0a 66 75 6e  .9375).)^.}..fun
1a590 63 64 65 66 20 7b 6c 69 6b 65 6c 79 28 58 29 7d  cdef {likely(X)}
1a5a0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 69 6b   {} {.  ^The lik
1a5b0 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  ely(X) function 
1a5c0 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75  returns the argu
1a5d0 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e 67 65 64  ment X unchanged
1a5e0 2e 0a 20 20 5e 54 68 65 20 6c 69 6b 65 6c 79 28  ..  ^The likely(
1a5f0 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61  X) function is a
1a600 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68 65 20   no-op that the 
1a610 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 0a 20  code generator. 
1a620 20 6f 70 74 69 6d 69 7a 65 73 20 61 77 61 79 20   optimizes away 
1a630 73 6f 20 74 68 61 74 20 69 74 20 63 6f 6e 73 75  so that it consu
1a640 6d 65 73 20 6e 6f 20 43 50 55 20 63 79 63 6c 65  mes no CPU cycle
1a650 73 20 61 74 0a 20 20 72 75 6e 2d 74 69 6d 65 20  s at.  run-time 
1a660 28 74 68 61 74 20 69 73 2c 20 64 75 72 69 6e 67  (that is, during
1a670 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71 6c 69 74   calls to [sqlit
1a680 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a 20 20 5e  e3_step()])..  ^
1a690 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74  The purpose of t
1a6a0 68 65 20 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e  he likely(X) fun
1a6b0 63 74 69 6f 6e 20 69 73 20 74 6f 20 70 72 6f 76  ction is to prov
1a6c0 69 64 65 20 61 20 68 69 6e 74 0a 20 20 74 6f 20  ide a hint.  to 
1a6d0 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65  the query planne
1a6e0 72 20 74 68 61 74 20 74 68 65 20 61 72 67 75 6d  r that the argum
1a6f0 65 6e 74 20 58 20 69 73 20 61 20 62 6f 6f 6c 65  ent X is a boole
1a700 61 6e 20 76 61 6c 75 65 0a 20 20 74 68 61 74 20  an value.  that 
1a710 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e  is usually true.
1a720 20 5e 28 54 68 65 20 6c 69 6b 65 6c 79 28 58 29   ^(The likely(X)
1a730 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71 75   function is equ
1a740 69 76 61 6c 65 6e 74 0a 20 20 74 6f 20 5b 6c 69  ivalent.  to [li
1a750 6b 65 6c 69 68 6f 6f 64 5d 28 58 2c 30 2e 39 33  kelihood](X,0.93
1a760 37 35 29 2e 29 5e 20 53 65 65 20 61 6c 73 6f 3a  75).)^ See also:
1a770 20 5b 75 6e 6c 69 6b 65 6c 79 28 58 29 5d 2e 0a   [unlikely(X)]..
1a780 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 61 64  }..funcdef {load
1a790 5f 65 78 74 65 6e 73 69 6f 6e 28 58 29 20 6c 6f  _extension(X) lo
1a7a0 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 2c 59  ad_extension(X,Y
1a7b0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c  )} {} {.  ^The l
1a7c0 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 2c  oad_extension(X,
1a7d0 59 29 20 66 75 6e 63 74 69 6f 6e 20 6c 6f 61 64  Y) function load
1a7e0 73 20 5b 53 51 4c 69 74 65 20 65 78 74 65 6e 73  s [SQLite extens
1a7f0 69 6f 6e 73 5d 20 6f 75 74 20 6f 66 20 74 68 65  ions] out of the
1a800 20 73 68 61 72 65 64 0a 20 20 6c 69 62 72 61 72   shared.  librar
1a810 79 20 66 69 6c 65 20 6e 61 6d 65 64 20 58 20 75  y file named X u
1a820 73 69 6e 67 20 74 68 65 20 65 6e 74 72 79 20 70  sing the entry p
1a830 6f 69 6e 74 20 59 2e 20 20 5e 54 68 65 20 72 65  oint Y.  ^The re
1a840 73 75 6c 74 20 6f 66 20 6c 6f 61 64 5f 65 78 74  sult of load_ext
1a850 65 6e 73 69 6f 6e 28 29 0a 20 20 69 73 20 61 6c  ension().  is al
1a860 77 61 79 73 20 61 20 4e 55 4c 4c 2e 20 20 5e 49  ways a NULL.  ^I
1a870 66 20 59 20 69 73 20 6f 6d 69 74 74 65 64 20 74  f Y is omitted t
1a880 68 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20  hen the default 
1a890 65 6e 74 72 79 20 70 6f 69 6e 74 20 6e 61 6d 65  entry point name
1a8a0 20 69 73 20 75 73 65 64 2e 0a 20 20 5e 54 68 65   is used..  ^The
1a8b0 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28   load_extension(
1a8c0 29 20 66 75 6e 63 74 69 6f 6e 20 72 61 69 73 65  ) function raise
1a8d0 73 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 69  s an exception i
1a8e0 66 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 20  f the extension 
1a8f0 66 61 69 6c 73 20 74 6f 0a 20 20 6c 6f 61 64 20  fails to.  load 
1a900 6f 72 20 69 6e 69 74 69 61 6c 69 7a 65 20 63 6f  or initialize co
1a910 72 72 65 63 74 6c 79 2e 0a 0a 20 20 3c 70 3e 5e  rrectly...  <p>^
1a920 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  The load_extensi
1a930 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 69  on() function wi
1a940 6c 6c 20 66 61 69 6c 20 69 66 20 74 68 65 20 65  ll fail if the e
1a950 78 74 65 6e 73 69 6f 6e 20 61 74 74 65 6d 70 74  xtension attempt
1a960 73 20 74 6f 20 0a 20 20 6d 6f 64 69 66 79 20 6f  s to .  modify o
1a970 72 20 64 65 6c 65 74 65 20 61 6e 20 53 51 4c 20  r delete an SQL 
1a980 66 75 6e 63 74 69 6f 6e 20 6f 72 20 63 6f 6c 6c  function or coll
1a990 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20  ating sequence. 
1a9a0 20 5e 54 68 65 0a 20 20 65 78 74 65 6e 73 69 6f   ^The.  extensio
1a9b0 6e 20 63 61 6e 20 61 64 64 20 6e 65 77 20 66 75  n can add new fu
1a9c0 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61  nctions or colla
1a9d0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 2c 20  ting sequences, 
1a9e0 62 75 74 20 63 61 6e 6e 6f 74 0a 20 20 6d 6f 64  but cannot.  mod
1a9f0 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20 65 78  ify or delete ex
1aa00 69 73 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73  isting functions
1aa10 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65   or collating se
1aa20 71 75 65 6e 63 65 73 20 62 65 63 61 75 73 65 0a  quences because.
1aa30 20 20 74 68 6f 73 65 20 66 75 6e 63 74 69 6f 6e    those function
1aa40 73 20 61 6e 64 2f 6f 72 20 63 6f 6c 6c 61 74 69  s and/or collati
1aa50 6e 67 20 73 65 71 75 65 6e 63 65 73 20 6d 69 67  ng sequences mig
1aa60 68 74 20 62 65 20 75 73 65 64 20 65 6c 73 65 77  ht be used elsew
1aa70 68 65 72 65 0a 20 20 69 6e 20 74 68 65 20 63 75  here.  in the cu
1aa80 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20  rrently running 
1aa90 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  SQL statement.  
1aaa0 54 6f 20 6c 6f 61 64 20 61 6e 20 65 78 74 65 6e  To load an exten
1aab0 73 69 6f 6e 20 74 68 61 74 0a 20 20 63 68 61 6e  sion that.  chan
1aac0 67 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20 66  ges or deletes f
1aad0 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c  unctions or coll
1aae0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 2c  ating sequences,
1aaf0 20 75 73 65 20 74 68 65 0a 20 20 5b 73 71 6c 69   use the.  [sqli
1ab00 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69  te3_load_extensi
1ab10 6f 6e 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67 65  on()] C-language
1ab20 20 41 50 49 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e   API.</p>..  <p>
1ab30 46 6f 72 20 73 65 63 75 72 69 74 79 20 72 65 61  For security rea
1ab40 73 6f 6e 73 2c 20 65 78 74 65 6e 73 69 6f 6e 20  sons, extension 
1ab50 6c 6f 61 64 65 64 20 69 73 20 74 75 72 6e 65 64  loaded is turned
1ab60 20 6f 66 66 20 62 79 20 64 65 66 61 75 6c 74 20   off by default 
1ab70 61 6e 64 20 6d 75 73 74 0a 20 20 62 65 20 65 6e  and must.  be en
1ab80 61 62 6c 65 64 20 62 79 20 61 20 70 72 69 6f 72  abled by a prior
1ab90 20 63 61 6c 6c 20 74 6f 20 5b 73 71 6c 69 74 65   call to [sqlite
1aba0 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78  3_enable_load_ex
1abb0 74 65 6e 73 69 6f 6e 28 29 5d 2e 3c 2f 70 3e 0a  tension()].</p>.
1abc0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 77 65  }..funcdef {lowe
1abd0 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  r(X)} {} {.  ^Th
1abe0 65 20 6c 6f 77 65 72 28 58 29 20 66 75 6e 63 74  e lower(X) funct
1abf0 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f  ion returns a co
1ac00 70 79 20 6f 66 20 73 74 72 69 6e 67 20 58 20 77  py of string X w
1ac10 69 74 68 20 61 6c 6c 20 41 53 43 49 49 20 63 68  ith all ASCII ch
1ac20 61 72 61 63 74 65 72 73 0a 20 20 63 6f 6e 76 65  aracters.  conve
1ac30 72 74 65 64 20 74 6f 20 6c 6f 77 65 72 20 63 61  rted to lower ca
1ac40 73 65 2e 20 20 5e 54 68 65 20 64 65 66 61 75 6c  se.  ^The defaul
1ac50 74 20 62 75 69 6c 74 2d 69 6e 20 6c 6f 77 65 72  t built-in lower
1ac60 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72 6b  () function work
1ac70 73 0a 20 20 66 6f 72 20 41 53 43 49 49 20 63 68  s.  for ASCII ch
1ac80 61 72 61 63 74 65 72 73 20 6f 6e 6c 79 2e 20 20  aracters only.  
1ac90 54 6f 20 64 6f 20 63 61 73 65 20 63 6f 6e 76 65  To do case conve
1aca0 72 73 69 6f 6e 73 20 6f 6e 20 6e 6f 6e 2d 41 53  rsions on non-AS
1acb0 43 49 49 0a 20 20 63 68 61 72 61 63 74 65 72 73  CII.  characters
1acc0 2c 20 6c 6f 61 64 20 74 68 65 20 49 43 55 20 65  , load the ICU e
1acd0 78 74 65 6e 73 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e  xtension..}..fun
1ace0 63 64 65 66 20 7b 6c 74 72 69 6d 28 58 29 20 6c  cdef {ltrim(X) l
1acf0 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  trim(X,Y)} {} {.
1ad00 20 20 5e 54 68 65 20 6c 74 72 69 6d 28 58 2c 59    ^The ltrim(X,Y
1ad10 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1ad20 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d  ns a string form
1ad30 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61  ed by removing a
1ad40 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61  ny and all.  cha
1ad50 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70 70  racters that app
1ad60 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74 68  ear in Y from th
1ad70 65 20 6c 65 66 74 20 73 69 64 65 20 6f 66 20 58  e left side of X
1ad80 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72  ..  ^If the Y ar
1ad90 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65  gument is omitte
1ada0 64 2c 20 6c 74 72 69 6d 28 58 29 20 72 65 6d 6f  d, ltrim(X) remo
1adb0 76 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20  ves spaces from 
1adc0 74 68 65 20 6c 65 66 74 20 73 69 64 65 0a 20 20  the left side.  
1add0 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  of X..}..funcdef
1ade0 20 7b 6d 61 78 28 58 2c 59 2c 2e 2e 2e 29 7d 20   {max(X,Y,...)} 
1adf0 7b 2a 6d 61 78 43 6f 72 65 46 75 6e 63 20 2a 6d  {*maxCoreFunc *m
1ae00 61 78 20 7b 6d 61 78 28 29 20 53 51 4c 20 66 75  ax {max() SQL fu
1ae10 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68  nction}} {.  ^Th
1ae20 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74  e multi-argument
1ae30 20 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e 20   max() function 
1ae40 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75  returns the argu
1ae50 6d 65 6e 74 20 77 69 74 68 20 74 68 65 20 0a 20  ment with the . 
1ae60 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 2c 20   maximum value, 
1ae70 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c 4c 20 69  or return NULL i
1ae80 66 20 61 6e 79 20 61 72 67 75 6d 65 6e 74 20 69  f any argument i
1ae90 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 54 68 65 20  s NULL. .  ^The 
1aea0 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d  multi-argument m
1aeb0 61 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 73 65  ax() function se
1aec0 61 72 63 68 65 73 20 69 74 73 20 61 72 67 75 6d  arches its argum
1aed0 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20 74  ents from left t
1aee0 6f 20 72 69 67 68 74 0a 20 20 66 6f 72 20 61 6e  o right.  for an
1aef0 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20 64   argument that d
1af00 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69  efines a collati
1af10 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20  ng function and 
1af20 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61 74  uses that collat
1af30 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20 66  ing.  function f
1af40 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 20 63 6f  or all string co
1af50 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20  mparisons.  ^If 
1af60 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 72 67 75  none of the argu
1af70 6d 65 6e 74 73 20 74 6f 20 6d 61 78 28 29 0a 20  ments to max(). 
1af80 20 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61 74   define a collat
1af90 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74 68  ing function, th
1afa0 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20 63 6f  en the BINARY co
1afb0 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
1afc0 20 69 73 20 75 73 65 64 2e 0a 20 20 5e 28 4e 6f   is used..  ^(No
1afd0 74 65 20 74 68 61 74 20 3c 62 3e 6d 61 78 28 29  te that <b>max()
1afe0 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c 65  </b> is a simple
1aff0 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20   function when. 
1b000 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72   it has 2 or mor
1b010 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20  e arguments but 
1b020 6f 70 65 72 61 74 65 73 20 61 73 20 61 6e 0a 20  operates as an. 
1b030 20 5b 6d 61 78 41 67 67 46 75 6e 63 20 7c 20 61   [maxAggFunc | a
1b040 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1b050 6e 5d 20 69 66 20 67 69 76 65 6e 20 6f 6e 6c 79  n] if given only
1b060 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65   a single argume
1b070 6e 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66  nt.)^.}..funcdef
1b080 20 7b 6d 69 6e 28 58 2c 59 2c 2e 2e 2e 29 7d 20   {min(X,Y,...)} 
1b090 7b 2a 6d 69 6e 43 6f 72 65 46 75 6e 63 20 2a 6d  {*minCoreFunc *m
1b0a0 69 6e 20 7b 6d 69 6e 28 29 20 53 51 4c 20 66 75  in {min() SQL fu
1b0b0 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68  nction}} {.  ^Th
1b0c0 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74  e multi-argument
1b0d0 20 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20   min() function 
1b0e0 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75  returns the argu
1b0f0 6d 65 6e 74 20 77 69 74 68 20 74 68 65 0a 20 20  ment with the.  
1b100 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 2e 0a 20  minimum value.. 
1b110 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75   ^The multi-argu
1b120 6d 65 6e 74 20 6d 69 6e 28 29 20 66 75 6e 63 74  ment min() funct
1b130 69 6f 6e 20 73 65 61 72 63 68 65 73 20 69 74 73  ion searches its
1b140 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20   arguments from 
1b150 6c 65 66 74 20 74 6f 20 72 69 67 68 74 0a 20 20  left to right.  
1b160 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20  for an argument 
1b170 74 68 61 74 20 64 65 66 69 6e 65 73 20 61 20 63  that defines a c
1b180 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
1b190 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61 74 20  n and uses that 
1b1a0 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75 6e 63  collating.  func
1b1b0 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72  tion for all str
1b1c0 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e  ing comparisons.
1b1d0 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68    ^If none of th
1b1e0 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 6d  e arguments to m
1b1f0 69 6e 28 29 0a 20 20 64 65 66 69 6e 65 20 61 20  in().  define a 
1b200 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
1b210 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 42 49 4e  on, then the BIN
1b220 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ARY collating fu
1b230 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a  nction is used..
1b240 20 20 5e 28 4e 6f 74 65 20 74 68 61 74 20 3c 62    ^(Note that <b
1b250 3e 6d 69 6e 28 29 3c 2f 62 3e 20 69 73 20 61 20  >min()</b> is a 
1b260 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20  simple function 
1b270 77 68 65 6e 0a 20 20 69 74 20 68 61 73 20 32 20  when.  it has 2 
1b280 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74  or more argument
1b290 73 20 62 75 74 20 6f 70 65 72 61 74 65 73 20 61  s but operates a
1b2a0 73 20 61 6e 20 0a 20 20 5b 6d 69 6e 41 67 67 46  s an .  [minAggF
1b2b0 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65 20  unc | aggregate 
1b2c0 66 75 6e 63 74 69 6f 6e 5d 20 69 66 20 67 69 76  function] if giv
1b2d0 65 6e 0a 20 20 6f 6e 6c 79 20 61 20 73 69 6e 67  en.  only a sing
1b2e0 6c 65 20 61 72 67 75 6d 65 6e 74 2e 29 5e 0a 7d  le argument.)^.}
1b2f0 0a 0a 66 75 6e 63 64 65 66 20 7b 6e 75 6c 6c 69  ..funcdef {nulli
1b300 66 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  f(X,Y)} {} {.  ^
1b310 54 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29 20  The nullif(X,Y) 
1b320 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1b330 20 69 74 73 20 66 69 72 73 74 20 61 72 67 75 6d   its first argum
1b340 65 6e 74 20 69 66 20 74 68 65 20 61 72 67 75 6d  ent if the argum
1b350 65 6e 74 73 20 61 72 65 0a 20 20 64 69 66 66 65  ents are.  diffe
1b360 72 65 6e 74 20 61 6e 64 20 4e 55 4c 4c 20 69 66  rent and NULL if
1b370 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61   the arguments a
1b380 72 65 20 74 68 65 20 73 61 6d 65 2e 20 20 5e 54  re the same.  ^T
1b390 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29 20 66  he nullif(X,Y) f
1b3a0 75 6e 63 74 69 6f 6e 0a 20 20 73 65 61 72 63 68  unction.  search
1b3b0 65 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74 73  es its arguments
1b3c0 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
1b3d0 67 68 74 20 66 6f 72 20 61 6e 20 61 72 67 75 6d  ght for an argum
1b3e0 65 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65 73  ent that defines
1b3f0 20 61 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20 66   a.  collating f
1b400 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73 65 73  unction and uses
1b410 20 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67 20   that collating 
1b420 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c  function for all
1b430 20 73 74 72 69 6e 67 0a 20 20 63 6f 6d 70 61 72   string.  compar
1b440 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 65 69 74  isons.  ^If neit
1b450 68 65 72 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  her argument to 
1b460 6e 75 6c 6c 69 66 28 29 20 64 65 66 69 6e 65 73  nullif() defines
1b470 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e   a collating fun
1b480 63 74 69 6f 6e 0a 20 20 74 68 65 6e 20 74 68 65  ction.  then the
1b490 20 42 49 4e 41 52 59 20 69 73 20 75 73 65 64 2e   BINARY is used.
1b4a0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 70 72 69  .}..funcdef {pri
1b4b0 6e 74 66 28 46 4f 52 4d 41 54 2c 2e 2e 2e 29 7d  ntf(FORMAT,...)}
1b4c0 20 7b 7d 20 7b 0a 20 20 5e 28 54 68 65 20 70 72   {} {.  ^(The pr
1b4d0 69 6e 74 66 28 46 4f 52 4d 41 54 2c 2e 2e 2e 29  intf(FORMAT,...)
1b4e0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 77 6f   SQL function wo
1b4f0 72 6b 73 20 6c 69 6b 65 20 74 68 65 20 5b 73 71  rks like the [sq
1b500 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 29 5d  lite3_mprintf()]
1b510 20 43 2d 6c 61 6e 67 75 61 67 65 0a 20 20 66 75   C-language.  fu
1b520 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68 65 20 70  nction and the p
1b530 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e  rintf() function
1b540 20 66 72 6f 6d 20 74 68 65 20 73 74 61 6e 64 61   from the standa
1b550 72 64 20 43 20 6c 69 62 72 61 72 79 2e 29 5e 0a  rd C library.)^.
1b560 20 20 54 68 65 20 66 69 72 73 74 20 61 72 67 75    The first argu
1b570 6d 65 6e 74 20 69 73 20 61 20 66 6f 72 6d 61 74  ment is a format
1b580 20 73 74 72 69 6e 67 20 74 68 61 74 20 73 70 65   string that spe
1b590 63 69 66 69 65 73 20 68 6f 77 20 74 6f 20 63 6f  cifies how to co
1b5a0 6e 73 74 72 75 63 74 20 74 68 65 20 6f 75 74 70  nstruct the outp
1b5b0 75 74 0a 20 20 73 74 72 69 6e 67 20 75 73 69 6e  ut.  string usin
1b5c0 67 20 76 61 6c 75 65 73 20 74 61 6b 65 6e 20 66  g values taken f
1b5d0 72 6f 6d 20 73 75 62 73 65 71 75 65 6e 74 20 61  rom subsequent a
1b5e0 72 67 75 6d 65 6e 74 73 2e 20 20 5e 49 66 20 74  rguments.  ^If t
1b5f0 68 65 20 46 4f 52 4d 41 54 20 61 72 67 75 6d 65  he FORMAT argume
1b600 6e 74 20 69 73 0a 20 20 6d 69 73 73 69 6e 67 20  nt is.  missing 
1b610 6f 72 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  or NULL then the
1b620 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
1b630 20 20 5e 54 68 65 20 25 6e 20 66 6f 72 6d 61 74    ^The %n format
1b640 20 69 73 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e   is silently ign
1b650 6f 72 65 64 20 61 6e 64 0a 20 20 64 6f 65 73 20  ored and.  does 
1b660 6e 6f 74 20 63 6f 6e 73 75 6d 65 20 61 6e 20 61  not consume an a
1b670 72 67 75 6d 65 6e 74 2e 20 20 5e 54 68 65 20 25  rgument.  ^The %
1b680 70 20 66 6f 72 6d 61 74 20 69 73 20 61 6e 20 61  p format is an a
1b690 6c 69 61 73 20 66 6f 72 20 25 58 2e 20 20 5e 54  lias for %X.  ^T
1b6a0 68 65 20 25 7a 20 66 6f 72 6d 61 74 0a 20 20 69  he %z format.  i
1b6b0 73 20 69 6e 74 65 72 63 68 61 6e 67 65 61 62 6c  s interchangeabl
1b6c0 65 20 77 69 74 68 20 25 73 2e 20 20 5e 28 49 66  e with %s.  ^(If
1b6d0 20 74 68 65 72 65 20 61 72 65 20 74 6f 6f 20 66   there are too f
1b6e0 65 77 20 61 72 67 75 6d 65 6e 74 73 20 69 6e 20  ew arguments in 
1b6f0 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6c 69 73  the argument lis
1b700 74 2c 0a 20 20 6d 69 73 73 69 6e 67 20 61 72 67  t,.  missing arg
1b710 75 6d 65 6e 74 73 20 61 72 65 20 61 73 73 75 6d  uments are assum
1b720 65 64 20 74 6f 20 68 61 76 65 20 61 20 4e 55 4c  ed to have a NUL
1b730 4c 20 76 61 6c 75 65 2c 20 77 68 69 63 68 20 69  L value, which i
1b740 73 20 74 72 61 6e 73 6c 61 74 65 64 20 69 6e 74  s translated int
1b750 6f 0a 20 20 30 20 6f 72 20 30 2e 30 20 66 6f 72  o.  0 or 0.0 for
1b760 20 6e 75 6d 65 72 69 63 20 66 6f 72 6d 61 74 73   numeric formats
1b770 20 6f 72 20 61 6e 20 65 6d 70 74 79 20 73 74 72   or an empty str
1b780 69 6e 67 20 66 6f 72 20 25 73 2e 29 5e 0a 7d 0a  ing for %s.)^.}.
1b790 20 20 0a 0a 66 75 6e 63 64 65 66 20 7b 71 75 6f    ..funcdef {quo
1b7a0 74 65 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  te(X)} {} {.  ^T
1b7b0 68 65 20 71 75 6f 74 65 28 58 29 20 66 75 6e 63  he quote(X) func
1b7c0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
1b7d0 20 74 65 78 74 20 6f 66 20 61 6e 20 53 51 4c 20   text of an SQL 
1b7e0 6c 69 74 65 72 61 6c 20 77 68 69 63 68 0a 20 20  literal which.  
1b7f0 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  is the value of 
1b800 69 74 73 20 61 72 67 75 6d 65 6e 74 20 73 75 69  its argument sui
1b810 74 61 62 6c 65 20 66 6f 72 20 69 6e 63 6c 75 73  table for inclus
1b820 69 6f 6e 20 69 6e 74 6f 20 61 6e 20 53 51 4c 20  ion into an SQL 
1b830 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 5e 53 74  statement..  ^St
1b840 72 69 6e 67 73 20 61 72 65 20 73 75 72 72 6f 75  rings are surrou
1b850 6e 64 65 64 20 62 79 20 73 69 6e 67 6c 65 2d 71  nded by single-q
1b860 75 6f 74 65 73 20 77 69 74 68 20 65 73 63 61 70  uotes with escap
1b870 65 73 20 6f 6e 20 69 6e 74 65 72 69 6f 72 20 71  es on interior q
1b880 75 6f 74 65 73 0a 20 20 61 73 20 6e 65 65 64 65  uotes.  as neede
1b890 64 2e 20 20 5e 42 4c 4f 42 73 20 61 72 65 20 65  d.  ^BLOBs are e
1b8a0 6e 63 6f 64 65 64 20 61 73 20 68 65 78 61 64 65  ncoded as hexade
1b8b0 63 69 6d 61 6c 20 6c 69 74 65 72 61 6c 73 2e 0a  cimal literals..
1b8c0 20 20 5e 53 74 72 69 6e 67 73 20 77 69 74 68 20    ^Strings with 
1b8d0 65 6d 62 65 64 64 65 64 20 4e 55 4c 20 63 68 61  embedded NUL cha
1b8e0 72 61 63 74 65 72 73 20 63 61 6e 6e 6f 74 20 62  racters cannot b
1b8f0 65 20 72 65 70 72 65 73 65 6e 74 65 64 20 61 73  e represented as
1b900 20 73 74 72 69 6e 67 0a 20 20 6c 69 74 65 72 61   string.  litera
1b910 6c 73 20 69 6e 20 53 51 4c 20 61 6e 64 20 68 65  ls in SQL and he
1b920 6e 63 65 20 74 68 65 20 72 65 74 75 72 6e 65 64  nce the returned
1b930 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20   string literal 
1b940 69 73 20 74 72 75 6e 63 61 74 65 64 20 70 72 69  is truncated pri
1b950 6f 72 0a 20 20 74 6f 20 74 68 65 20 66 69 72 73  or.  to the firs
1b960 74 20 4e 55 4c 2e 0a 7d 0a 0a 66 75 6e 63 64 65  t NUL..}..funcde
1b970 66 20 7b 72 61 6e 64 6f 6d 28 29 7d 20 7b 7d 20  f {random()} {} 
1b980 7b 0a 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d 28  {.  ^The random(
1b990 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1b9a0 6e 73 20 61 20 70 73 65 75 64 6f 2d 72 61 6e 64  ns a pseudo-rand
1b9b0 6f 6d 20 69 6e 74 65 67 65 72 0a 20 20 62 65 74  om integer.  bet
1b9c0 77 65 65 6e 20 2d 39 32 32 33 33 37 32 30 33 36  ween -9223372036
1b9d0 38 35 34 37 37 35 38 30 38 20 61 6e 64 20 2b 39  854775808 and +9
1b9e0 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
1b9f0 30 37 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  07..}..funcdef {
1ba00 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29 7d 20 7b  randomblob(N)} {
1ba10 7d 20 7b 0a 20 20 5e 54 68 65 20 72 61 6e 64 6f  } {.  ^The rando
1ba20 6d 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f  mblob(N) functio
1ba30 6e 20 72 65 74 75 72 6e 20 61 6e 20 4e 2d 62 79  n return an N-by
1ba40 74 65 20 62 6c 6f 62 20 63 6f 6e 74 61 69 6e 69  te blob containi
1ba50 6e 67 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d  ng pseudo-random
1ba60 0a 20 20 62 79 74 65 73 2e 20 5e 49 66 20 4e 20  .  bytes. ^If N 
1ba70 69 73 20 6c 65 73 73 20 74 68 61 6e 20 31 20 74  is less than 1 t
1ba80 68 65 6e 20 61 20 31 2d 62 79 74 65 20 72 61 6e  hen a 1-byte ran
1ba90 64 6f 6d 20 62 6c 6f 62 20 69 73 20 72 65 74 75  dom blob is retu
1baa0 72 6e 65 64 2e 0a 0a 20 20 3c 70 3e 48 69 6e 74  rned...  <p>Hint
1bab0 3a 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20  :  applications 
1bac0 63 61 6e 20 67 65 6e 65 72 61 74 65 20 67 6c 6f  can generate glo
1bad0 62 61 6c 6c 79 20 75 6e 69 71 75 65 20 69 64 65  bally unique ide
1bae0 6e 74 69 66 69 65 72 73 0a 20 20 75 73 69 6e 67  ntifiers.  using
1baf0 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 74   this function t
1bb00 6f 67 65 74 68 65 72 20 77 69 74 68 20 5b 68 65  ogether with [he
1bb10 78 28 29 5d 20 61 6e 64 2f 6f 72 0a 20 20 5b 6c  x()] and/or.  [l
1bb20 6f 77 65 72 28 29 5d 20 6c 69 6b 65 20 74 68 69  ower()] like thi
1bb30 73 3a 3c 2f 70 3e 0a 0a 20 20 3c 62 6c 6f 63 6b  s:</p>..  <block
1bb40 71 75 6f 74 65 3e 0a 20 20 68 65 78 28 72 61 6e  quote>.  hex(ran
1bb50 64 6f 6d 62 6c 6f 62 28 31 36 29 29 3c 62 72 3e  domblob(16))<br>
1bb60 3c 2f 62 72 3e 0a 20 20 6c 6f 77 65 72 28 68 65  </br>.  lower(he
1bb70 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36 29  x(randomblob(16)
1bb80 29 29 0a 20 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74  )).  </blockquot
1bb90 65 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72  e>.}..funcdef {r
1bba0 65 70 6c 61 63 65 28 58 2c 59 2c 5a 29 7d 20 7b  eplace(X,Y,Z)} {
1bbb0 7d 20 7b 0a 20 20 5e 54 68 65 20 72 65 70 6c 61  } {.  ^The repla
1bbc0 63 65 28 58 2c 59 2c 5a 29 20 66 75 6e 63 74 69  ce(X,Y,Z) functi
1bbd0 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72  on returns a str
1bbe0 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 73 75  ing formed by su
1bbf0 62 73 74 69 74 75 74 69 6e 67 0a 20 20 73 74 72  bstituting.  str
1bc00 69 6e 67 20 5a 20 66 6f 72 20 65 76 65 72 79 20  ing Z for every 
1bc10 6f 63 63 75 72 72 65 6e 63 65 20 6f 66 20 73 74  occurrence of st
1bc20 72 69 6e 67 20 59 20 69 6e 20 73 74 72 69 6e 67  ring Y in string
1bc30 20 58 2e 20 20 5e 54 68 65 20 5b 42 49 4e 41 52   X.  ^The [BINAR
1bc40 59 5d 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20 73  Y].  collating s
1bc50 65 71 75 65 6e 63 65 20 69 73 20 75 73 65 64 20  equence is used 
1bc60 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e  for comparisons.
1bc70 20 20 5e 49 66 20 59 20 69 73 20 61 6e 20 65 6d    ^If Y is an em
1bc80 70 74 79 0a 20 20 73 74 72 69 6e 67 20 74 68 65  pty.  string the
1bc90 6e 20 72 65 74 75 72 6e 20 58 20 75 6e 63 68 61  n return X uncha
1bca0 6e 67 65 64 2e 20 20 5e 49 66 20 5a 20 69 73 20  nged.  ^If Z is 
1bcb0 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 20 20  not initially.  
1bcc0 61 20 73 74 72 69 6e 67 2c 20 69 74 20 69 73 20  a string, it is 
1bcd0 63 61 73 74 20 74 6f 20 61 20 55 54 46 2d 38 20  cast to a UTF-8 
1bce0 73 74 72 69 6e 67 20 70 72 69 6f 72 20 74 6f 20  string prior to 
1bcf0 70 72 6f 63 65 73 73 69 6e 67 2e 0a 7d 0a 0a 66  processing..}..f
1bd00 75 6e 63 64 65 66 20 7b 72 6f 75 6e 64 28 58 29  uncdef {round(X)
1bd10 20 72 6f 75 6e 64 28 58 2c 59 29 7d 20 7b 7d 20   round(X,Y)} {} 
1bd20 7b 0a 20 20 5e 54 68 65 20 72 6f 75 6e 64 28 58  {.  ^The round(X
1bd30 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  ,Y) function ret
1bd40 75 72 6e 73 20 61 20 66 6c 6f 61 74 69 6e 67 2d  urns a floating-
1bd50 70 6f 69 6e 74 0a 20 20 76 61 6c 75 65 20 58 20  point.  value X 
1bd60 72 6f 75 6e 64 65 64 20 74 6f 20 59 20 64 69 67  rounded to Y dig
1bd70 69 74 73 20 74 6f 20 74 68 65 20 72 69 67 68 74  its to the right
1bd80 20 6f 66 20 74 68 65 20 64 65 63 69 6d 61 6c 20   of the decimal 
1bd90 70 6f 69 6e 74 2e 0a 20 20 5e 49 66 20 74 68 65  point..  ^If the
1bda0 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f   Y argument is o
1bdb0 6d 69 74 74 65 64 2c 20 69 74 20 69 73 20 61 73  mitted, it is as
1bdc0 73 75 6d 65 64 20 74 6f 20 62 65 20 30 2e 0a 7d  sumed to be 0..}
1bdd0 0a 0a 66 75 6e 63 64 65 66 20 7b 72 74 72 69 6d  ..funcdef {rtrim
1bde0 28 58 29 20 72 74 72 69 6d 28 58 2c 59 29 7d 20  (X) rtrim(X,Y)} 
1bdf0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 74 72 69  {} {.  ^The rtri
1be00 6d 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  m(X,Y) function 
1be10 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67  returns a string
1be20 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76   formed by remov
1be30 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a  ing any and all.
1be40 20 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61    characters tha
1be50 74 20 61 70 70 65 61 72 20 69 6e 20 59 20 66 72  t appear in Y fr
1be60 6f 6d 20 74 68 65 20 72 69 67 68 74 20 73 69 64  om the right sid
1be70 65 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74 68  e of X..  ^If th
1be80 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20  e Y argument is 
1be90 6f 6d 69 74 74 65 64 2c 20 72 74 72 69 6d 28 58  omitted, rtrim(X
1bea0 29 20 72 65 6d 6f 76 65 73 20 73 70 61 63 65 73  ) removes spaces
1beb0 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 0a   from the right.
1bec0 20 20 73 69 64 65 20 6f 66 20 58 2e 0a 7d 0a 0a    side of X..}..
1bed0 66 75 6e 63 64 65 66 20 7b 73 6f 75 6e 64 65 78  funcdef {soundex
1bee0 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
1bef0 20 73 6f 75 6e 64 65 78 28 58 29 20 66 75 6e 63   soundex(X) func
1bf00 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
1bf10 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 74 68  tring that is th
1bf20 65 20 73 6f 75 6e 64 65 78 20 65 6e 63 6f 64 69  e soundex encodi
1bf30 6e 67 20 0a 20 20 6f 66 20 74 68 65 20 73 74 72  ng .  of the str
1bf40 69 6e 67 20 58 2e 0a 20 20 5e 54 68 65 20 73 74  ing X..  ^The st
1bf50 72 69 6e 67 20 22 3f 30 30 30 22 20 69 73 20 72  ring "?000" is r
1bf60 65 74 75 72 6e 65 64 20 69 66 20 74 68 65 20 61  eturned if the a
1bf70 72 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c 20  rgument is NULL 
1bf80 6f 72 20 63 6f 6e 74 61 69 6e 73 0a 20 20 6e 6f  or contains.  no
1bf90 20 41 53 43 49 49 20 61 6c 70 68 61 62 65 74 69   ASCII alphabeti
1bfa0 63 20 63 68 61 72 61 63 74 65 72 73 2e 0a 20 20  c characters..  
1bfb0 5e 28 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  ^(This function 
1bfc0 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
1bfd0 53 51 4c 69 74 65 20 62 79 20 64 65 66 61 75 6c  SQLite by defaul
1bfe0 74 2e 0a 20 20 49 74 20 69 73 20 6f 6e 6c 79 20  t..  It is only 
1bff0 61 76 61 69 6c 61 62 6c 65 20 69 66 20 74 68 65  available if the
1c000 20 5b 53 51 4c 49 54 45 5f 53 4f 55 4e 44 45 58   [SQLITE_SOUNDEX
1c010 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  ] compile-time o
1c020 70 74 69 6f 6e 0a 20 20 69 73 20 75 73 65 64 20  ption.  is used 
1c030 77 68 65 6e 20 53 51 4c 69 74 65 20 69 73 20 62  when SQLite is b
1c040 75 69 6c 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64  uilt.)^.}..funcd
1c050 65 66 20 7b 73 71 6c 69 74 65 5f 63 6f 6d 70 69  ef {sqlite_compi
1c060 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 4e 29 7d  leoption_get(N)}
1c070 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c   {} {.  ^The sql
1c080 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  ite_compileoptio
1c090 6e 5f 67 65 74 28 29 20 53 51 4c 20 66 75 6e 63  n_get() SQL func
1c0a0 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65  tion is a wrappe
1c0b0 72 20 61 72 6f 75 6e 64 20 74 68 65 0a 20 20 5b  r around the.  [
1c0c0 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f  sqlite3_compileo
1c0d0 70 74 69 6f 6e 5f 67 65 74 28 29 5d 20 43 2f 43  ption_get()] C/C
1c0e0 2b 2b 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e  ++ function..  ^
1c0f0 54 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74  This routine ret
1c100 75 72 6e 73 20 74 68 65 20 4e 2d 74 68 20 63 6f  urns the N-th co
1c110 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
1c120 6e 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20  n used to build 
1c130 53 51 4c 69 74 65 0a 20 20 6f 72 20 4e 55 4c 4c  SQLite.  or NULL
1c140 20 69 66 20 4e 20 69 73 20 6f 75 74 20 6f 66 20   if N is out of 
1c150 72 61 6e 67 65 2e 20 20 53 65 65 20 61 6c 73 6f  range.  See also
1c160 20 74 68 65 20 5b 63 6f 6d 70 69 6c 65 5f 6f 70   the [compile_op
1c170 74 69 6f 6e 73 20 70 72 61 67 6d 61 5d 2e 0a 7d  tions pragma]..}
1c180 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74  ..funcdef {sqlit
1c190 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  e_compileoption_
1c1a0 75 73 65 64 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  used(X)} {} {.  
1c1b0 5e 54 68 65 20 73 71 6c 69 74 65 5f 63 6f 6d 70  ^The sqlite_comp
1c1c0 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 29  ileoption_used()
1c1d0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73   SQL function is
1c1e0 20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e   a wrapper aroun
1c1f0 64 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33  d the.  [sqlite3
1c200 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75  _compileoption_u
1c210 73 65 64 28 29 5d 20 43 2f 43 2b 2b 20 66 75 6e  sed()] C/C++ fun
1c220 63 74 69 6f 6e 2e 0a 20 20 5e 57 68 65 6e 20 74  ction..  ^When t
1c230 68 65 20 61 72 67 75 6d 65 6e 74 20 58 20 74 6f  he argument X to
1c240 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f   sqlite_compileo
1c250 70 74 69 6f 6e 5f 75 73 65 64 28 58 29 20 69 73  ption_used(X) is
1c260 20 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 0a   a string which.
1c270 20 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66    is the name of
1c280 20 61 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20   a compile-time 
1c290 6f 70 74 69 6f 6e 2c 20 74 68 69 73 20 72 6f 75  option, this rou
1c2a0 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74 72 75  tine returns tru
1c2b0 65 20 28 31 29 20 6f 72 0a 20 20 66 61 6c 73 65  e (1) or.  false
1c2c0 20 28 30 29 20 64 65 70 65 6e 64 69 6e 67 20 6f   (0) depending o
1c2d0 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  n whether or not
1c2e0 20 74 68 61 74 20 6f 70 74 69 6f 6e 20 77 61 73   that option was
1c2f0 20 75 73 65 64 20 64 75 72 69 6e 67 20 74 68 65   used during the
1c300 0a 20 20 62 75 69 6c 64 2e 0a 7d 0a 0a 66 75 6e  .  build..}..fun
1c310 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 73 6f 75  cdef {sqlite_sou
1c320 72 63 65 5f 69 64 28 29 7d 20 7b 7d 20 7b 0a 20  rce_id()} {} {. 
1c330 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 6f 75   ^The sqlite_sou
1c340 72 63 65 5f 69 64 28 29 20 66 75 6e 63 74 69 6f  rce_id() functio
1c350 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69  n returns a stri
1c360 6e 67 20 74 68 61 74 20 69 64 65 6e 74 69 66 69  ng that identifi
1c370 65 73 20 74 68 65 0a 20 20 73 70 65 63 69 66 69  es the.  specifi
1c380 63 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65  c version of the
1c390 20 73 6f 75 72 63 65 20 63 6f 64 65 20 74 68 61   source code tha
1c3a0 74 20 77 61 73 20 75 73 65 64 20 74 6f 20 62 75  t was used to bu
1c3b0 69 6c 64 20 74 68 65 20 53 51 4c 69 74 65 0a 20  ild the SQLite. 
1c3c0 20 6c 69 62 72 61 72 79 2e 20 20 5e 54 68 65 20   library.  ^The 
1c3d0 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20  string returned 
1c3e0 62 79 20 73 71 6c 69 74 65 5f 73 6f 75 72 63 65  by sqlite_source
1c3f0 5f 69 64 28 29 20 69 73 0a 20 20 74 68 65 20 64  _id() is.  the d
1c400 61 74 65 20 61 6e 64 20 74 69 6d 65 20 74 68 61  ate and time tha
1c410 74 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64  t the source cod
1c420 65 20 77 61 73 20 63 68 65 63 6b 65 64 20 69 6e  e was checked in
1c430 20 66 6f 6c 6c 6f 77 65 64 20 62 79 0a 20 20 74   followed by.  t
1c440 68 65 20 53 48 41 31 20 68 61 73 68 20 66 6f 72  he SHA1 hash for
1c450 20 74 68 61 74 20 63 68 65 63 6b 2d 69 6e 2e 20   that check-in. 
1c460 20 5e 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20   ^This function 
1c470 69 73 0a 20 20 61 6e 20 53 51 4c 20 77 72 61 70  is.  an SQL wrap
1c480 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b  per around the [
1c490 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69 64  sqlite3_sourceid
1c4a0 28 29 5d 20 43 20 69 6e 74 65 72 66 61 63 65 2e  ()] C interface.
1c4b0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c  .}..funcdef {sql
1c4c0 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 7d 20 7b  ite_version()} {
1c4d0 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74  } {.  ^The sqlit
1c4e0 65 5f 76 65 72 73 69 6f 6e 28 29 20 66 75 6e 63  e_version() func
1c4f0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
1c500 20 76 65 72 73 69 6f 6e 20 73 74 72 69 6e 67 20   version string 
1c510 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0a 20  for the SQLite. 
1c520 20 6c 69 62 72 61 72 79 20 74 68 61 74 20 69 73   library that is
1c530 20 72 75 6e 6e 69 6e 67 2e 20 20 5e 54 68 69 73   running.  ^This
1c540 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 6e 20   function is an 
1c550 53 51 4c 0a 20 20 77 72 61 70 70 65 72 20 61 72  SQL.  wrapper ar
1c560 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65  ound the [sqlite
1c570 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 5d 20  3_libversion()] 
1c580 43 2d 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a  C-interface..}..
1c590 66 75 6e 63 64 65 66 20 7b 73 75 62 73 74 72 28  funcdef {substr(
1c5a0 58 2c 59 2c 5a 29 20 73 75 62 73 74 72 28 58 2c  X,Y,Z) substr(X,
1c5b0 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
1c5c0 73 75 62 73 74 72 28 58 2c 59 2c 5a 29 20 66 75  substr(X,Y,Z) fu
1c5d0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
1c5e0 20 73 75 62 73 74 72 69 6e 67 20 6f 66 20 69 6e   substring of in
1c5f0 70 75 74 20 73 74 72 69 6e 67 20 58 20 74 68 61  put string X tha
1c600 74 20 62 65 67 69 6e 73 0a 20 20 77 69 74 68 20  t begins.  with 
1c610 74 68 65 20 59 2d 74 68 20 63 68 61 72 61 63 74  the Y-th charact
1c620 65 72 20 61 6e 64 20 77 68 69 63 68 20 69 73 20  er and which is 
1c630 5a 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  Z characters lon
1c640 67 2e 0a 20 20 5e 49 66 20 5a 20 69 73 20 6f 6d  g..  ^If Z is om
1c650 69 74 74 65 64 20 74 68 65 6e 20 73 75 62 73 74  itted then subst
1c660 72 28 58 2c 59 29 20 72 65 74 75 72 6e 73 20 61  r(X,Y) returns a
1c670 6c 6c 20 63 68 61 72 61 63 74 65 72 73 20 74 68  ll characters th
1c680 72 6f 75 67 68 20 74 68 65 20 65 6e 64 0a 20 20  rough the end.  
1c690 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 58 20  of the string X 
1c6a0 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 74  beginning with t
1c6b0 68 65 20 59 2d 74 68 2e 0a 20 20 5e 54 68 65 20  he Y-th..  ^The 
1c6c0 6c 65 66 74 2d 6d 6f 73 74 20 63 68 61 72 61 63  left-most charac
1c6d0 74 65 72 20 6f 66 20 58 20 69 73 20 6e 75 6d 62  ter of X is numb
1c6e0 65 72 20 31 2e 20 20 5e 49 66 20 59 20 69 73 20  er 1.  ^If Y is 
1c6f0 6e 65 67 61 74 69 76 65 0a 20 20 74 68 65 6e 20  negative.  then 
1c700 74 68 65 20 66 69 72 73 74 20 63 68 61 72 61 63  the first charac
1c710 74 65 72 20 6f 66 20 74 68 65 20 73 75 62 73 74  ter of the subst
1c720 72 69 6e 67 20 69 73 20 66 6f 75 6e 64 20 62 79  ring is found by
1c730 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f 6d 20 74   counting from t
1c740 68 65 0a 20 20 72 69 67 68 74 20 72 61 74 68 65  he.  right rathe
1c750 72 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74 2e  r than the left.
1c760 20 20 5e 49 66 20 5a 20 69 73 20 6e 65 67 61 74    ^If Z is negat
1c770 69 76 65 20 74 68 65 6e 0a 20 20 74 68 65 20 61  ive then.  the a
1c780 62 73 28 5a 29 20 63 68 61 72 61 63 74 65 72 73  bs(Z) characters
1c790 20 70 72 65 63 65 64 69 6e 67 20 74 68 65 20 59   preceding the Y
1c7a0 2d 74 68 20 63 68 61 72 61 63 74 65 72 20 61 72  -th character ar
1c7b0 65 20 72 65 74 75 72 6e 65 64 2e 0a 20 20 5e 49  e returned..  ^I
1c7c0 66 20 58 20 69 73 20 61 20 73 74 72 69 6e 67 20  f X is a string 
1c7d0 74 68 65 6e 20 63 68 61 72 61 63 74 65 72 73 20  then characters 
1c7e0 69 6e 64 69 63 65 73 20 72 65 66 65 72 20 74 6f  indices refer to
1c7f0 20 61 63 74 75 61 6c 20 55 54 46 2d 38 20 0a 20   actual UTF-8 . 
1c800 20 63 68 61 72 61 63 74 65 72 73 2e 20 20 5e 49   characters.  ^I
1c810 66 20 58 20 69 73 20 61 20 42 4c 4f 42 20 74 68  f X is a BLOB th
1c820 65 6e 20 74 68 65 20 69 6e 64 69 63 65 73 20 72  en the indices r
1c830 65 66 65 72 20 74 6f 20 62 79 74 65 73 2e 0a 7d  efer to bytes..}
1c840 0a 0a 66 75 6e 63 64 65 66 20 7b 74 6f 74 61 6c  ..funcdef {total
1c850 5f 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20 7b  _changes()} {} {
1c860 0a 20 20 5e 54 68 65 20 74 6f 74 61 6c 5f 63 68  .  ^The total_ch
1c870 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f 6e  anges() function
1c880 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   returns the num
1c890 62 65 72 20 6f 66 20 72 6f 77 20 63 68 61 6e 67  ber of row chang
1c8a0 65 73 0a 20 20 63 61 75 73 65 64 20 62 79 20 49  es.  caused by I
1c8b0 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72  NSERT, UPDATE or
1c8c0 20 44 45 4c 45 54 45 0a 20 20 73 74 61 74 65 6d   DELETE.  statem
1c8d0 65 6e 74 73 20 73 69 6e 63 65 20 74 68 65 20 63  ents since the c
1c8e0 75 72 72 65 6e 74 20 64 61 74 61 62 61 73 65 20  urrent database 
1c8f0 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 6f  connection was o
1c900 70 65 6e 65 64 2e 0a 20 20 5e 54 68 69 73 20 66  pened..  ^This f
1c910 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61  unction is a wra
1c920 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20  pper around the 
1c930 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63  [sqlite3_total_c
1c940 68 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43 2b  hanges()].  C/C+
1c950 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a  + interface..}..
1c960 66 75 6e 63 64 65 66 20 7b 74 72 69 6d 28 58 29  funcdef {trim(X)
1c970 20 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b   trim(X,Y)} {} {
1c980 0a 20 20 5e 54 68 65 20 74 72 69 6d 28 58 2c 59  .  ^The trim(X,Y
1c990 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1c9a0 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d  ns a string form
1c9b0 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61  ed by removing a
1c9c0 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61  ny and all.  cha
1c9d0 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70 70  racters that app
1c9e0 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 62 6f  ear in Y from bo
1c9f0 74 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 20 20  th ends of X..  
1ca00 5e 49 66 20 74 68 65 20 59 20 61 72 67 75 6d 65  ^If the Y argume
1ca10 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 74  nt is omitted, t
1ca20 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20 73  rim(X) removes s
1ca30 70 61 63 65 73 20 66 72 6f 6d 20 62 6f 74 68 20  paces from both 
1ca40 65 6e 64 73 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75  ends of X..}..fu
1ca50 6e 63 64 65 66 20 7b 74 79 70 65 6f 66 28 58 29  ncdef {typeof(X)
1ca60 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74 79  } {} {.  ^The ty
1ca70 70 65 6f 66 28 58 29 20 66 75 6e 63 74 69 6f 6e  peof(X) function
1ca80 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
1ca90 67 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73  g that indicates
1caa0 20 74 68 65 20 5b 64 61 74 61 74 79 70 65 5d 20   the [datatype] 
1cab0 6f 66 0a 20 20 74 68 65 20 65 78 70 72 65 73 73  of.  the express
1cac0 69 6f 6e 20 58 3a 20 22 6e 75 6c 6c 22 2c 20 22  ion X: "null", "
1cad0 69 6e 74 65 67 65 72 22 2c 20 22 72 65 61 6c 22  integer", "real"
1cae0 2c 20 22 74 65 78 74 22 2c 20 6f 72 20 22 62 6c  , "text", or "bl
1caf0 6f 62 22 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ob"..}..funcdef 
1cb00 7b 75 6e 6c 69 6b 65 6c 79 28 58 29 7d 20 7b 7d  {unlikely(X)} {}
1cb10 20 7b 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b 65   {.  ^The unlike
1cb20 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  ly(X) function r
1cb30 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75 6d  eturns the argum
1cb40 65 6e 74 20 58 20 75 6e 63 68 61 6e 67 65 64 2e  ent X unchanged.
1cb50 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b 65 6c 79  .  ^The unlikely
1cb60 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  (X) function is 
1cb70 61 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68 65  a no-op that the
1cb80 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 0a   code generator.
1cb90 20 20 6f 70 74 69 6d 69 7a 65 73 20 61 77 61 79    optimizes away
1cba0 20 73 6f 20 74 68 61 74 20 69 74 20 63 6f 6e 73   so that it cons
1cbb0 75 6d 65 73 20 6e 6f 20 43 50 55 20 63 79 63 6c  umes no CPU cycl
1cbc0 65 73 20 61 74 0a 20 20 72 75 6e 2d 74 69 6d 65  es at.  run-time
1cbd0 20 28 74 68 61 74 20 69 73 2c 20 64 75 72 69 6e   (that is, durin
1cbe0 67 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71 6c 69  g calls to [sqli
1cbf0 74 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a 20 20  te3_step()])..  
1cc00 5e 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20  ^The purpose of 
1cc10 74 68 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20  the unlikely(X) 
1cc20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20 70  function is to p
1cc30 72 6f 76 69 64 65 20 61 20 68 69 6e 74 0a 20 20  rovide a hint.  
1cc40 74 6f 20 74 68 65 20 71 75 65 72 79 20 70 6c 61  to the query pla
1cc50 6e 6e 65 72 20 74 68 61 74 20 74 68 65 20 61 72  nner that the ar
1cc60 67 75 6d 65 6e 74 20 58 20 69 73 20 61 20 62 6f  gument X is a bo
1cc70 6f 6c 65 61 6e 20 76 61 6c 75 65 0a 20 20 74 68  olean value.  th
1cc80 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 6e 6f  at is usually no
1cc90 74 20 74 72 75 65 2e 20 5e 28 54 68 65 20 75 6e  t true. ^(The un
1cca0 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69  likely(X) functi
1ccb0 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74  on is equivalent
1ccc0 0a 20 20 74 6f 20 5b 6c 69 6b 65 6c 69 68 6f 6f  .  to [likelihoo
1ccd0 64 5d 28 58 2c 20 30 2e 30 36 32 35 29 2e 29 5e  d](X, 0.0625).)^
1cce0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75 6e 69  .}..funcdef {uni
1ccf0 63 6f 64 65 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  code(X)} {} {.  
1cd00 5e 54 68 65 20 75 6e 69 63 6f 64 65 28 58 29 20  ^The unicode(X) 
1cd10 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1cd20 20 74 68 65 20 6e 75 6d 65 72 69 63 20 75 6e 69   the numeric uni
1cd30 63 6f 64 65 20 63 6f 64 65 20 70 6f 69 6e 74 20  code code point 
1cd40 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
1cd50 0a 20 20 74 68 65 20 66 69 72 73 74 20 63 68 61  .  the first cha
1cd60 72 61 63 74 65 72 20 6f 66 20 74 68 65 20 73 74  racter of the st
1cd70 72 69 6e 67 20 58 2e 20 20 49 66 20 74 68 65 20  ring X.  If the 
1cd80 61 72 67 75 6d 65 6e 74 20 74 6f 20 75 6e 69 63  argument to unic
1cd90 6f 64 65 28 58 29 20 69 73 20 6e 6f 74 20 61 20  ode(X) is not a 
1cda0 73 74 72 69 6e 67 0a 20 20 74 68 65 6e 20 74 68  string.  then th
1cdb0 65 20 72 65 73 75 6c 74 20 69 73 20 75 6e 64 65  e result is unde
1cdc0 66 69 6e 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65  fined..}..funcde
1cdd0 66 20 7b 75 70 70 65 72 28 58 29 7d 20 7b 7d 20  f {upper(X)} {} 
1cde0 7b 0a 20 20 5e 54 68 65 20 75 70 70 65 72 28 58  {.  ^The upper(X
1cdf0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1ce00 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69 6e 70  ns a copy of inp
1ce10 75 74 20 73 74 72 69 6e 67 20 58 20 69 6e 20 77  ut string X in w
1ce20 68 69 63 68 20 61 6c 6c 20 0a 20 20 6c 6f 77 65  hich all .  lowe
1ce30 72 2d 63 61 73 65 20 41 53 43 49 49 20 63 68 61  r-case ASCII cha
1ce40 72 61 63 74 65 72 73 20 61 72 65 20 63 6f 6e 76  racters are conv
1ce50 65 72 74 65 64 20 74 6f 20 74 68 65 69 72 20 75  erted to their u
1ce60 70 70 65 72 2d 63 61 73 65 20 65 71 75 69 76 61  pper-case equiva
1ce70 6c 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  lent..}..funcdef
1ce80 20 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29 7d 20 7b   {zeroblob(N)} {
1ce90 7d 20 7b 0a 20 20 5e 54 68 65 20 7a 65 72 6f 62  } {.  ^The zerob
1cea0 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20  lob(N) function 
1ceb0 72 65 74 75 72 6e 73 20 61 20 42 4c 4f 42 20 63  returns a BLOB c
1cec0 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 4e 20 62  onsisting of N b
1ced0 79 74 65 73 20 6f 66 20 30 78 30 30 2e 0a 20 20  ytes of 0x00..  
1cee0 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 73 20 74  SQLite manages t
1cef0 68 65 73 65 20 7a 65 72 6f 62 6c 6f 62 73 20 76  hese zeroblobs v
1cf00 65 72 79 20 65 66 66 69 63 69 65 6e 74 6c 79 2e  ery efficiently.
1cf10 20 20 5a 65 72 6f 62 6c 6f 62 73 20 63 61 6e 20    Zeroblobs can 
1cf20 62 65 20 75 73 65 64 20 74 6f 0a 20 20 72 65 73  be used to.  res
1cf30 65 72 76 65 20 73 70 61 63 65 20 66 6f 72 20 61  erve space for a
1cf40 20 42 4c 4f 42 20 74 68 61 74 20 69 73 20 6c 61   BLOB that is la
1cf50 74 65 72 20 77 72 69 74 74 65 6e 20 75 73 69 6e  ter written usin
1cf60 67 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62 6c  g .  [sqlite3_bl
1cf70 6f 62 5f 6f 70 65 6e 28 29 20 7c 20 69 6e 63 72  ob_open() | incr
1cf80 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f  emental BLOB I/O
1cf90 5d 2e 0a 20 20 5e 54 68 69 73 20 53 51 4c 20 66  ]..  ^This SQL f
1cfa0 75 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65  unction is imple
1cfb0 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 74 68 65  mented using the
1cfc0 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74   [sqlite3_result
1cfd0 5f 7a 65 72 6f 62 6c 6f 62 28 29 5d 0a 20 20 72  _zeroblob()].  r
1cfe0 6f 75 74 69 6e 65 20 66 72 6f 6d 20 74 68 65 20  outine from the 
1cff0 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e  C/C++ interface.
1d000 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68  .}.</tcl>..<p>Th
1d010 65 20 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73  e core functions
1d020 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65   shown below are
1d030 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65   available by de
1d040 66 61 75 6c 74 2e 20 0a 5b 64 61 74 65 66 75 6e  fault. .[datefun
1d050 63 20 7c 20 44 61 74 65 20 26 61 6d 70 3b 20 54  c | Date &amp; T
1d060 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 2c 0a  ime functions],.
1d070 5b 61 67 67 66 75 6e 63 20 7c 20 61 67 67 72 65  [aggfunc | aggre
1d080 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 5d 2c  gate functions],
1d090 20 61 6e 64 0a 5b 6a 73 6f 6e 31 20 7c 20 4a 53   and.[json1 | JS
1d0a0 4f 4e 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 72  ON functions] ar
1d0b0 65 20 64 6f 63 75 6d 65 6e 74 65 64 20 73 65 70  e documented sep
1d0c0 61 72 61 74 65 6c 79 2e 20 20 41 6e 0a 61 70 70  arately.  An.app
1d0d0 6c 69 63 61 74 69 6f 6e 20 6d 61 79 20 64 65 66  lication may def
1d0e0 69 6e 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a 66  ine additional.f
1d0f0 75 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e  unctions written
1d100 20 69 6e 20 43 20 61 6e 64 20 61 64 64 65 64 20   in C and added 
1d110 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
1d120 65 6e 67 69 6e 65 20 75 73 69 6e 67 0a 74 68 65  engine using.the
1d130 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65   [sqlite3_create
1d140 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20 41 50 49  _function()] API
1d150 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 73 65 74  .</p>..<tcl>.set
1d160 20 6c 78 20 7b 7d 0a 66 6f 72 65 61 63 68 20 62   lx {}.foreach b
1d170 61 73 65 73 79 6e 74 61 78 20 5b 61 72 72 61 79  asesyntax [array
1d180 20 6e 61 6d 65 73 20 63 6f 72 65 66 75 6e 63 73   names corefuncs
1d190 65 74 5d 20 7b 0a 20 20 66 6f 72 65 61 63 68 20  et] {.  foreach 
1d1a0 7b 73 79 6e 74 61 78 20 6b 65 79 77 6f 72 64 73  {syntax keywords
1d1b0 20 64 65 73 63 7d 20 24 63 6f 72 65 66 75 6e 63   desc} $corefunc
1d1c0 73 65 74 28 24 62 61 73 65 73 79 6e 74 61 78 29  set($basesyntax)
1d1d0 20 62 72 65 61 6b 0a 20 20 72 65 67 65 78 70 20   break.  regexp 
1d1e0 7b 5e 5b 61 2d 7a 5f 5d 2b 7d 20 24 62 61 73 65  {^[a-z_]+} $base
1d1f0 73 79 6e 74 61 78 20 66 72 61 67 6d 65 6e 74 0a  syntax fragment.
1d200 20 20 66 6f 72 65 61 63 68 20 63 6f 72 65 73 79    foreach coresy
1d210 6e 74 61 78 20 24 73 79 6e 74 61 78 20 7b 0a 20  ntax $syntax {. 
1d220 20 20 20 6c 61 70 70 65 6e 64 20 6c 78 20 5b 6c     lappend lx [l
1d230 69 73 74 20 24 66 72 61 67 6d 65 6e 74 20 24 63  ist $fragment $c
1d240 6f 72 65 73 79 6e 74 61 78 20 30 5d 0a 20 20 7d  oresyntax 0].  }
1d250 0a 7d 0a 68 64 5f 6c 69 73 74 5f 6f 66 5f 6c 69  .}.hd_list_of_li
1d260 6e 6b 73 20 7b 7d 20 32 32 35 20 5b 6c 73 6f 72  nks {} 225 [lsor
1d270 74 20 2d 69 6e 64 65 78 20 31 20 24 6c 78 5d 0a  t -index 1 $lx].
1d280 0a 68 64 5f 70 75 74 73 6e 6c 20 22 3c 68 72 20  .hd_putsnl "<hr 
1d290 63 6c 61 73 73 3d 27 78 68 72 27 3e 22 0a 68 64  class='xhr'>".hd
1d2a0 5f 70 75 74 73 6e 6c 20 22 3c 64 6c 3e 22 0a 66  _putsnl "<dl>".f
1d2b0 6f 72 65 61 63 68 20 62 61 73 65 73 79 6e 74 61  oreach basesynta
1d2c0 78 20 5b 6c 73 6f 72 74 20 5b 61 72 72 61 79 20  x [lsort [array 
1d2d0 6e 61 6d 65 73 20 63 6f 72 65 66 75 6e 63 73 65  names corefuncse
1d2e0 74 5d 5d 20 7b 0a 20 20 66 6f 72 65 61 63 68 20  t]] {.  foreach 
1d2f0 7b 73 79 6e 74 61 78 20 6b 65 79 77 6f 72 64 73  {syntax keywords
1d300 20 64 65 73 63 7d 20 24 63 6f 72 65 66 75 6e 63   desc} $corefunc
1d310 73 65 74 28 24 62 61 73 65 73 79 6e 74 61 78 29  set($basesyntax)
1d320 20 62 72 65 61 6b 0a 20 20 72 65 67 73 75 62 20   break.  regsub 
1d330 2d 61 6c 6c 20 7b 5c 73 2b 7d 20 5b 73 74 72 69  -all {\s+} [stri
1d340 6e 67 20 74 72 69 6d 20 24 73 79 6e 74 61 78 5d  ng trim $syntax]
1d350 20 7b 3c 62 72 20 2f 3e 7d 20 73 79 6e 74 61 78   {<br />} syntax
1d360 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  .  regsub -all {
1d370 5c 28 28 5b 5e 2a 29 5d 2b 29 5c 29 7d 20 24 73  \(([^*)]+)\)} $s
1d380 79 6e 74 61 78 20 7b 28 3c 69 3e 5c 31 3c 2f 69  yntax {(<i>\1</i
1d390 3e 29 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67  >)} syntax.  reg
1d3a0 73 75 62 20 2d 61 6c 6c 20 7b 2c 7d 20 24 73 79  sub -all {,} $sy
1d3b0 6e 74 61 78 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20  ntax {</i>,<i>} 
1d3c0 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20  syntax.  regsub 
1d3d0 2d 61 6c 6c 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c  -all {<i>\.\.\.<
1d3e0 2f 69 3e 7d 20 24 73 79 6e 74 61 78 20 7b 2e 2e  /i>} $syntax {..
1d3f0 2e 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 65  .} syntax.  rege
1d400 78 70 20 7b 5e 5b 61 2d 7a 5d 2b 7d 20 24 62 61  xp {^[a-z]+} $ba
1d410 73 65 73 79 6e 74 61 78 20 66 72 61 67 6d 65 6e  sesyntax fragmen
1d420 74 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68  t.  if {[llength
1d430 20 24 6b 65 79 77 6f 72 64 73 5d 3d 3d 30 7d 20   $keywords]==0} 
1d440 7b 0a 20 20 20 20 72 65 67 65 78 70 20 7b 5b 61  {.    regexp {[a
1d450 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61 78 20 6e  -z_]+} $syntax n
1d460 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61 67 6d  ame.    hd_fragm
1d470 65 6e 74 20 24 6e 61 6d 65 20 2a 24 6e 61 6d 65  ent $name *$name
1d480 20 22 24 7b 6e 61 6d 65 7d 28 29 20 53 51 4c 20   "${name}() SQL 
1d490 66 75 6e 63 74 69 6f 6e 22 0a 20 20 7d 20 65 6c  function".  } el
1d4a0 73 65 20 7b 0a 20 20 20 20 73 65 74 20 66 72 61  se {.    set fra
1d4b0 67 6e 61 6d 65 20 5b 6c 69 6e 64 65 78 20 24 6b  gname [lindex $k
1d4c0 65 79 77 6f 72 64 73 20 30 5d 0a 20 20 20 20 72  eywords 0].    r
1d4d0 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e 61 2d  egsub -all {[^a-
1d4e0 7a 5d 7d 20 24 66 72 61 67 6e 61 6d 65 20 7b 7d  z]} $fragname {}
1d4f0 20 66 72 61 67 6e 61 6d 65 0a 20 20 20 20 68 64   fragname.    hd
1d500 5f 66 72 61 67 6d 65 6e 74 20 24 66 72 61 67 6e  _fragment $fragn
1d510 61 6d 65 0a 20 20 20 20 65 76 61 6c 20 68 64 5f  ame.    eval hd_
1d520 6b 65 79 77 6f 72 64 73 20 5b 73 74 72 69 6e 67  keywords [string
1d530 20 6d 61 70 20 7b 5c 6e 20 7b 20 7d 7d 20 24 6b   map {\n { }} $k
1d540 65 79 77 6f 72 64 73 5d 0a 20 20 7d 0a 20 20 68  eywords].  }.  h
1d550 64 5f 70 75 74 73 20 22 3c 64 74 3e 3c 70 3e 3c  d_puts "<dt><p><
1d560 62 3e 24 73 79 6e 74 61 78 3c 2f 62 3e 3c 2f 64  b>$syntax</b></d
1d570 74 3e 22 0a 20 20 68 64 5f 72 65 73 6f 6c 76 65  t>".  hd_resolve
1d580 20 22 3c 64 64 3e 3c 70 3e 24 64 65 73 63 3c 2f   "<dd><p>$desc</
1d590 64 64 3e 5c 6e 22 0a 7d 0a 68 64 5f 70 75 74 73  dd>\n".}.hd_puts
1d5a0 6e 6c 20 22 3c 2f 64 6c 3e 22 0a 0a 23 23 23 23  nl "</dl>"..####
1d5b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d5c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d5d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d5e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d5f0 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
1d600 6f 6e 20 7b 44 61 74 65 20 41 6e 64 20 54 69 6d  on {Date And Tim
1d610 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74  e Functions} dat
1d620 65 66 75 6e 63 20 7b 2a 64 61 74 65 66 75 6e 63  efunc {*datefunc
1d630 20 7b 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20   {date and time 
1d640 66 75 6e 63 74 69 6f 6e 73 7d 7d 0a 68 64 5f 6b  functions}}.hd_k
1d650 65 79 77 6f 72 64 73 20 7b 64 61 74 65 28 29 20  eywords {date() 
1d660 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b 74  SQL function} {t
1d670 69 6d 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69  ime() SQL functi
1d680 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20  on}.hd_keywords 
1d690 7b 64 61 74 65 74 69 6d 65 28 29 20 53 51 4c 20  {datetime() SQL 
1d6a0 66 75 6e 63 74 69 6f 6e 7d 20 7b 6a 75 6c 69 61  function} {julia
1d6b0 6e 64 61 79 28 29 20 53 51 4c 20 66 75 6e 63 74  nday() SQL funct
1d6c0 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73  ion}.hd_keywords
1d6d0 20 7b 73 74 72 66 74 69 6d 65 28 29 20 53 51 4c   {strftime() SQL
1d6e0 20 66 75 6e 63 74 69 6f 6e 7d 0a 3c 2f 74 63 6c   function}.</tcl
1d6f0 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 73 75  >..<p>.SQLite su
1d700 70 70 6f 72 74 73 20 66 69 76 65 20 64 61 74 65  pports five date
1d710 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69   and time functi
1d720 6f 6e 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  ons as follows:.
1d730 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 6f 6c 3e 0a 3c  </p>..<p>.<ol>.<
1d740 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65 28 3c 2f  li> ^(<b>date(</
1d750 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c  b><i>timestring,
1d760 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66   modifier, modif
1d770 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29  ier, ...</i><b>)
1d780 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69  </b>)^ </li>.<li
1d790 3e 20 5e 28 3c 62 3e 74 69 6d 65 28 3c 2f 62 3e  > ^(<b>time(</b>
1d7a0 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d  <i>timestring, m
1d7b0 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65  odifier, modifie
1d7c0 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f  r, ...</i><b>)</
1d7d0 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20  b>)^ </li>.<li> 
1d7e0 5e 28 3c 62 3e 64 61 74 65 74 69 6d 65 28 3c 2f  ^(<b>datetime(</
1d7f0 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c  b><i>timestring,
1d800 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66   modifier, modif
1d810 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29  ier, ...</i><b>)
1d820 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69  </b>)^ </li>.<li
1d830 3e 20 5e 28 3c 62 3e 6a 75 6c 69 61 6e 64 61 79  > ^(<b>julianday
1d840 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69  (</b><i>timestri
1d850 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f  ng, modifier, mo
1d860 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c  difier, ...</i><
1d870 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a  b>)</b>)^ </li>.
1d880 3c 6c 69 3e 20 5e 28 3c 62 3e 73 74 72 66 74 69  <li> ^(<b>strfti
1d890 6d 65 28 3c 2f 62 3e 3c 69 3e 66 6f 72 6d 61 74  me(</b><i>format
1d8a0 2c 20 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f  , timestring, mo
1d8b0 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72  difier, modifier
1d8c0 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62  , ...</i><b>)</b
1d8d0 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a  >)^ </li>.</ol>.
1d8e0 0a 3c 70 3e 0a 5e 41 6c 6c 20 66 69 76 65 20 64  .<p>.^All five d
1d8f0 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e  ate and time fun
1d900 63 74 69 6f 6e 73 20 74 61 6b 65 20 61 20 74 69  ctions take a ti
1d910 6d 65 20 73 74 72 69 6e 67 20 61 73 20 61 6e 20  me string as an 
1d920 61 72 67 75 6d 65 6e 74 2e 20 0a 5e 54 68 65 20  argument. .^The 
1d930 74 69 6d 65 20 73 74 72 69 6e 67 20 69 73 20 66  time string is f
1d940 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20  ollowed by zero 
1d950 6f 72 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72  or more modifier
1d960 73 2e 20 0a 5e 54 68 65 20 73 74 72 66 74 69 6d  s. .^The strftim
1d970 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6c 73  e() function als
1d980 6f 20 74 61 6b 65 73 20 61 20 66 6f 72 6d 61 74  o takes a format
1d990 20 73 74 72 69 6e 67 20 61 73 20 69 74 73 20 66   string as its f
1d9a0 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 3c  irst argument..<
1d9b0 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 64 61 74  /p>..<p>.The dat
1d9c0 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
1d9d0 69 6f 6e 73 20 75 73 65 20 61 20 73 75 62 73 65  ions use a subse
1d9e0 74 20 6f 66 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e  t of.[http://en.
1d9f0 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
1da00 6b 69 2f 49 53 4f 5f 38 36 30 31 20 7c 20 49 53  ki/ISO_8601 | IS
1da10 30 2d 38 36 30 31 5d 20 64 61 74 65 20 61 6e 64  0-8601] date and
1da20 20 74 69 6d 65 0a 66 6f 72 6d 61 74 73 2e 0a 5e   time.formats..^
1da30 54 68 65 20 64 61 74 65 28 29 20 66 75 6e 63 74  The date() funct
1da40 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
1da50 64 61 74 65 20 69 6e 20 74 68 69 73 20 66 6f 72  date in this for
1da60 6d 61 74 3a 20 59 59 59 59 2d 4d 4d 2d 44 44 2e  mat: YYYY-MM-DD.
1da70 20 0a 5e 54 68 65 20 74 69 6d 65 28 29 20 66 75   .^The time() fu
1da80 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
1da90 68 65 20 74 69 6d 65 20 61 73 20 48 48 3a 4d 4d  he time as HH:MM
1daa0 3a 53 53 2e 20 0a 5e 54 68 65 20 64 61 74 65 74  :SS. .^The datet
1dab0 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ime() function r
1dac0 65 74 75 72 6e 73 20 22 59 59 59 59 2d 4d 4d 2d  eturns "YYYY-MM-
1dad0 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 20 0a 5e  DD HH:MM:SS". .^
1dae0 28 54 68 65 20 6a 75 6c 69 61 6e 64 61 79 28 29  (The julianday()
1daf0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1db00 73 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65  s the .[http://e
1db10 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
1db20 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 20  wiki/Julian_day 
1db30 7c 20 4a 75 6c 69 61 6e 20 64 61 79 5d 20 2d 20  | Julian day] - 
1db40 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20 64 61  the.number of da
1db50 79 73 20 73 69 6e 63 65 20 6e 6f 6f 6e 20 69 6e  ys since noon in
1db60 20 47 72 65 65 6e 77 69 63 68 20 6f 6e 20 4e 6f   Greenwich on No
1db70 76 65 6d 62 65 72 20 32 34 2c 20 34 37 31 34 20  vember 24, 4714 
1db80 42 2e 43 2e 20 0a 28 5b 68 74 74 70 3a 2f 2f 65  B.C. .([http://e
1db90 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
1dba0 77 69 6b 69 2f 50 72 6f 6c 65 70 74 69 63 5f 47  wiki/Proleptic_G
1dbb0 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e 64 61  regorian_calenda
1dbc0 72 20 7c 20 50 72 6f 6c 65 70 74 69 63 20 47 72  r | Proleptic Gr
1dbd0 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72  egorian calendar
1dbe0 5d 29 2e 29 5e 0a 5e 54 68 65 20 73 74 72 66 74  ]).)^.^The strft
1dbf0 69 6d 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65  ime() routine re
1dc00 74 75 72 6e 73 20 74 68 65 20 64 61 74 65 20 66  turns the date f
1dc10 6f 72 6d 61 74 74 65 64 20 61 63 63 6f 72 64 69  ormatted accordi
1dc20 6e 67 20 74 6f 20 0a 74 68 65 20 66 6f 72 6d 61  ng to .the forma
1dc30 74 20 73 74 72 69 6e 67 20 73 70 65 63 69 66 69  t string specifi
1dc40 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74 20  ed as the first 
1dc50 61 72 67 75 6d 65 6e 74 2e 0a 5e 54 68 65 20 66  argument..^The f
1dc60 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73 75 70  ormat string sup
1dc70 70 6f 72 74 73 20 74 68 65 20 6d 6f 73 74 20 63  ports the most c
1dc80 6f 6d 6d 6f 6e 20 73 75 62 73 74 69 74 75 74 69  ommon substituti
1dc90 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65  ons found in the
1dca0 20 0a 5b 68 74 74 70 3a 2f 2f 6f 70 65 6e 67 72   .[http://opengr
1dcb0 6f 75 70 2e 6f 72 67 2f 6f 6e 6c 69 6e 65 70 75  oup.org/onlinepu
1dcc0 62 73 2f 30 30 37 39 30 38 37 39 39 2f 78 73 68  bs/007908799/xsh
1dcd0 2f 73 74 72 66 74 69 6d 65 2e 68 74 6d 6c 20 7c  /strftime.html |
1dce0 20 73 74 72 66 74 69 6d 65 28 29 20 66 75 6e 63   strftime() func
1dcf0 74 69 6f 6e 5d 0a 66 72 6f 6d 20 74 68 65 20 73  tion].from the s
1dd00 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72  tandard C librar
1dd10 79 20 70 6c 75 73 20 74 77 6f 20 6e 65 77 20 73  y plus two new s
1dd20 75 62 73 74 69 74 75 74 69 6f 6e 73 2c 20 25 66  ubstitutions, %f
1dd30 20 61 6e 64 20 25 4a 2e 0a 5e 28 54 68 65 20 66   and %J..^(The f
1dd40 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 61 20 63 6f  ollowing is a co
1dd50 6d 70 6c 65 74 65 20 6c 69 73 74 20 6f 66 20 76  mplete list of v
1dd60 61 6c 69 64 20 73 74 72 66 74 69 6d 65 28 29 20  alid strftime() 
1dd70 73 75 62 73 74 69 74 75 74 69 6f 6e 73 3a 0a 3c  substitutions:.<
1dd80 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
1dd90 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  >.<table border=
1dda0 22 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  "0" cellpadding=
1ddb0 22 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d  "0" cellspacing=
1ddc0 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 74 64  "0">.<tr><td><td
1ddd0 20 77 69 64 74 68 3d 22 31 30 22 3e 3c 74 64 3e   width="10"><td>
1dde0 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 3c 74 64 3e 20  </tr>..<tr><td> 
1ddf0 25 64 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20  %d <td><td> day 
1de00 6f 66 20 6d 6f 6e 74 68 3a 20 30 30 0a 3c 74 72  of month: 00.<tr
1de10 3e 3c 74 64 3e 20 25 66 20 3c 74 64 3e 3c 74 64  ><td> %f <td><td
1de20 3e 20 66 72 61 63 74 69 6f 6e 61 6c 20 73 65 63  > fractional sec
1de30 6f 6e 64 73 3a 20 53 53 2e 53 53 53 0a 3c 74 72  onds: SS.SSS.<tr
1de40 3e 3c 74 64 3e 20 25 48 20 3c 74 64 3e 3c 74 64  ><td> %H <td><td
1de50 3e 20 68 6f 75 72 3a 20 30 30 2d 32 34 20 0a 3c  > hour: 00-24 .<
1de60 74 72 3e 3c 74 64 3e 20 25 6a 20 3c 74 64 3e 3c  tr><td> %j <td><
1de70 74 64 3e 20 64 61 79 20 6f 66 20 79 65 61 72 3a  td> day of year:
1de80 20 30 30 31 2d 33 36 36 0a 3c 74 72 3e 3c 74 64   001-366.<tr><td
1de90 3e 20 25 4a 20 3c 74 64 3e 3c 74 64 3e 20 4a 75  > %J <td><td> Ju
1dea0 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 0a  lian day number.
1deb0 3c 74 72 3e 3c 74 64 3e 20 25 6d 20 3c 74 64 3e  <tr><td> %m <td>
1dec0 3c 74 64 3e 20 6d 6f 6e 74 68 3a 20 30 31 2d 31  <td> month: 01-1
1ded0 32 0a 3c 74 72 3e 3c 74 64 3e 20 25 4d 20 3c 74  2.<tr><td> %M <t
1dee0 64 3e 3c 74 64 3e 20 6d 69 6e 75 74 65 3a 20 30  d><td> minute: 0
1def0 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 73  0-59.<tr><td> %s
1df00 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64   <td><td> second
1df10 73 20 73 69 6e 63 65 20 31 39 37 30 2d 30 31 2d  s since 1970-01-
1df20 30 31 0a 3c 74 72 3e 3c 74 64 3e 20 25 53 20 3c  01.<tr><td> %S <
1df30 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73 3a  td><td> seconds:
1df40 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20   00-59.<tr><td> 
1df50 25 77 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20  %w <td><td> day 
1df60 6f 66 20 77 65 65 6b 20 30 2d 36 20 77 69 74 68  of week 0-6 with
1df70 20 53 75 6e 64 61 79 3d 3d 30 0a 3c 74 72 3e 3c   Sunday==0.<tr><
1df80 74 64 3e 20 25 57 20 3c 74 64 3e 3c 74 64 3e 20  td> %W <td><td> 
1df90 77 65 65 6b 20 6f 66 20 79 65 61 72 3a 20 30 30  week of year: 00
1dfa0 2d 35 33 0a 3c 74 72 3e 3c 74 64 3e 20 25 59 20  -53.<tr><td> %Y 
1dfb0 3c 74 64 3e 3c 74 64 3e 20 79 65 61 72 3a 20 30  <td><td> year: 0
1dfc0 30 30 30 2d 39 39 39 39 0a 3c 74 72 3e 3c 74 64  000-9999.<tr><td
1dfd0 3e 20 25 25 20 3c 74 64 3e 3c 74 64 3e 20 25 0a  > %% <td><td> %.
1dfe0 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b  </table>.</block
1dff0 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 5e 28  quote>)^..<p>.^(
1e000 4e 6f 74 69 63 65 20 74 68 61 74 20 61 6c 6c 20  Notice that all 
1e010 6f 74 68 65 72 20 64 61 74 65 20 61 6e 64 20 74  other date and t
1e020 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 63 61  ime functions ca
1e030 6e 20 62 65 20 65 78 70 72 65 73 73 65 64 0a 69  n be expressed.i
1e040 6e 20 74 65 72 6d 73 20 6f 66 20 73 74 72 66 74  n terms of strft
1e050 69 6d 65 28 29 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c  ime():.</p>..<bl
1e060 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65  ockquote>.<table
1e070 20 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c   border="0" cell
1e080 70 61 64 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c  padding="0" cell
1e090 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72  spacing="0">.<tr
1e0a0 3e 3c 74 64 3e 3c 62 3e 46 75 6e 63 74 69 6f 6e  ><td><b>Function
1e0b0 3c 2f 62 3e 3c 74 64 20 77 69 64 74 68 3d 22 33  </b><td width="3
1e0c0 30 22 3e 3c 74 64 3e 3c 62 3e 45 71 75 69 76 61  0"><td><b>Equiva
1e0d0 6c 65 6e 74 20 73 74 72 66 74 69 6d 65 28 29 3c  lent strftime()<
1e0e0 2f 62 3e 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64  /b>.<tr><td>   d
1e0f0 61 74 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74  ate(...)      <t
1e100 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65  d><td>  strftime
1e110 28 27 25 59 2d 25 6d 2d 25 64 27 2c 20 2e 2e 2e  ('%Y-%m-%d', ...
1e120 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 74 69 6d  ).<tr><td>   tim
1e130 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64 3e  e(...)      <td>
1e140 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27  <td>  strftime('
1e150 25 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a  %H:%M:%S', ...).
1e160 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61 74 65 74  <tr><td>   datet
1e170 69 6d 65 28 2e 2e 2e 29 20 20 3c 74 64 3e 3c 74  ime(...)  <td><t
1e180 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25 59  d>  strftime('%Y
1e190 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 53 27  -%m-%d %H:%M:%S'
1e1a0 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20  , ...).<tr><td> 
1e1b0 20 20 6a 75 6c 69 61 6e 64 61 79 28 2e 2e 2e 29    julianday(...)
1e1c0 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74   <td><td>  strft
1e1d0 69 6d 65 28 27 25 4a 27 2c 20 2e 2e 2e 29 0a 3c  ime('%J', ...).<
1e1e0 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71  /table>.</blockq
1e1f0 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 54 68 65  uote>)^..<p>.The
1e200 20 6f 6e 6c 79 20 72 65 61 73 6f 6e 73 20 66 6f   only reasons fo
1e210 72 20 70 72 6f 76 69 64 69 6e 67 20 66 75 6e 63  r providing func
1e220 74 69 6f 6e 73 20 6f 74 68 65 72 20 74 68 61 6e  tions other than
1e230 20 73 74 72 66 74 69 6d 65 28 29 20 69 73 0a 66   strftime() is.f
1e240 6f 72 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 61  or convenience a
1e250 6e 64 20 66 6f 72 20 65 66 66 69 63 69 65 6e 63  nd for efficienc
1e260 79 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 69 6d  y..</p>..<h3>Tim
1e270 65 20 53 74 72 69 6e 67 73 3c 2f 68 33 3e 0a 0a  e Strings</h3>..
1e280 3c 70 3e 5e 28 41 20 74 69 6d 65 20 73 74 72 69  <p>^(A time stri
1e290 6e 67 20 63 61 6e 20 62 65 20 69 6e 20 61 6e 79  ng can be in any
1e2a0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1e2b0 67 20 66 6f 72 6d 61 74 73 3a 3c 2f 70 3e 0a 0a  g formats:</p>..
1e2c0 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59  <ol>.<li> <i>YYY
1e2d0 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 0a 3c 6c 69 3e  Y-MM-DD</i>.<li>
1e2e0 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48   <i>YYYY-MM-DD H
1e2f0 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  H:MM</i>.<li> <i
1e300 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d  >YYYY-MM-DD HH:M
1e310 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  M:SS</i>.<li> <i
1e320 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d  >YYYY-MM-DD HH:M
1e330 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69  M:SS.SSS</i>.<li
1e340 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c  > <i>YYYY-MM-DD<
1e350 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48  /i><b>T</b><i>HH
1e360 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  :MM</i>.<li> <i>
1e370 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62  YYYY-MM-DD</i><b
1e380 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53  >T</b><i>HH:MM:S
1e390 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59  S</i>.<li> <i>YY
1e3a0 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54  YY-MM-DD</i><b>T
1e3b0 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e  </b><i>HH:MM:SS.
1e3c0 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  SSS</i>.<li> <i>
1e3d0 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  HH:MM</i>.<li> <
1e3e0 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c  i>HH:MM:SS</i>.<
1e3f0 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e  li> <i>HH:MM:SS.
1e400 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 62 3e  SSS</i>.<li> <b>
1e410 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69 3e 20 3c 69 3e  now</b>.<li> <i>
1e420 44 44 44 44 44 44 44 44 44 44 3c 2f 69 3e 0a 3c  DDDDDDDDDD</i>.<
1e430 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 49 6e 20  /ol>)^..<p>.^In 
1e440 66 6f 72 6d 61 74 73 20 35 20 74 68 72 6f 75 67  formats 5 throug
1e450 68 20 37 2c 20 74 68 65 20 22 54 22 20 69 73 20  h 7, the "T" is 
1e460 61 20 6c 69 74 65 72 61 6c 20 63 68 61 72 61 63  a literal charac
1e470 74 65 72 20 73 65 70 61 72 61 74 69 6e 67 20 0a  ter separating .
1e480 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 68 65  the date and the
1e490 20 74 69 6d 65 2c 20 61 73 20 72 65 71 75 69 72   time, as requir
1e4a0 65 64 20 62 79 20 0a 5b 68 74 74 70 3a 2f 2f 77  ed by .[http://w
1e4b0 77 77 2e 77 33 63 2e 6f 72 67 2f 54 52 2f 4e 4f  ww.w3c.org/TR/NO
1e4c0 54 45 2d 64 61 74 65 74 69 6d 65 20 7c 20 49 53  TE-datetime | IS
1e4d0 4f 2d 38 36 30 31 5d 2e 20 0a 5e 46 6f 72 6d 61  O-8601]. .^Forma
1e4e0 74 73 20 38 20 74 68 72 6f 75 67 68 20 31 30 20  ts 8 through 10 
1e4f0 74 68 61 74 20 73 70 65 63 69 66 79 20 6f 6e 6c  that specify onl
1e500 79 20 61 20 74 69 6d 65 20 61 73 73 75 6d 65 20  y a time assume 
1e510 61 20 64 61 74 65 20 6f 66 20 0a 32 30 30 30 2d  a date of .2000-
1e520 30 31 2d 30 31 2e 20 46 6f 72 6d 61 74 20 31 31  01-01. Format 11
1e530 2c 20 74 68 65 20 73 74 72 69 6e 67 20 27 6e 6f  , the string 'no
1e540 77 27 2c 20 69 73 20 63 6f 6e 76 65 72 74 65 64  w', is converted
1e550 20 69 6e 74 6f 20 74 68 65 20 0a 63 75 72 72 65   into the .curre
1e560 6e 74 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  nt date and time
1e570 20 61 73 20 6f 62 74 61 69 6e 65 64 20 66 72 6f   as obtained fro
1e580 6d 20 74 68 65 20 78 43 75 72 72 65 6e 74 54 69  m the xCurrentTi
1e590 6d 65 20 6d 65 74 68 6f 64 0a 6f 66 20 74 68 65  me method.of the
1e5a0 20 5b 73 71 6c 69 74 65 33 5f 76 66 73 5d 20 6f   [sqlite3_vfs] o
1e5b0 62 6a 65 63 74 20 69 6e 20 75 73 65 2e 0a 5e 54  bject in use..^T
1e5c0 68 65 20 27 6e 6f 77 27 20 61 72 67 75 6d 65 6e  he 'now' argumen
1e5d0 74 20 74 6f 20 64 61 74 65 20 61 6e 64 20 74 69  t to date and ti
1e5e0 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 6c 77  me functions alw
1e5f0 61 79 73 20 72 65 74 75 72 6e 73 20 65 78 61 63  ays returns exac
1e600 74 6c 79 20 74 68 65 0a 73 61 6d 65 20 76 61 6c  tly the.same val
1e610 75 65 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20  ue for multiple 
1e620 69 6e 76 6f 63 61 74 69 6f 6e 73 20 77 69 74 68  invocations with
1e630 69 6e 20 74 68 65 20 73 61 6d 65 20 5b 73 71 6c  in the same [sql
1e640 69 74 65 33 5f 73 74 65 70 28 29 5d 20 63 61 6c  ite3_step()] cal
1e650 6c 2e 0a 5e 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77  l..^[http://en.w
1e660 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b  ikipedia.org/wik
1e670 69 2f 43 6f 6f 72 64 69 6e 61 74 65 64 5f 55 6e  i/Coordinated_Un
1e680 69 76 65 72 73 61 6c 5f 54 69 6d 65 20 7c 20 55  iversal_Time | U
1e690 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e  niversal Coordin
1e6a0 61 74 65 64 20 54 69 6d 65 20 28 55 54 43 29 5d  ated Time (UTC)]
1e6b0 20 69 73 20 75 73 65 64 2e 20 0a 5e 46 6f 72 6d   is used. .^Form
1e6c0 61 74 20 31 32 20 69 73 20 74 68 65 20 0a 5b 68  at 12 is the .[h
1e6d0 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64  ttp://en.wikiped
1e6e0 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69  ia.org/wiki/Juli
1e6f0 61 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20  an_day | Julian 
1e700 64 61 79 20 6e 75 6d 62 65 72 5d 0a 65 78 70 72  day number].expr
1e710 65 73 73 65 64 20 61 73 20 61 20 66 6c 6f 61 74  essed as a float
1e720 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
1e730 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 46 6f 72 6d 61  .</p>..<p>.Forma
1e740 74 73 20 32 20 74 68 72 6f 75 67 68 20 31 30 20  ts 2 through 10 
1e750 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c  may be optionall
1e760 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  y followed by a 
1e770 74 69 6d 65 7a 6f 6e 65 20 69 6e 64 69 63 61 74  timezone indicat
1e780 6f 72 20 6f 66 20 74 68 65 20 66 6f 72 6d 0a 22  or of the form."
1e790 3c 69 3e 26 23 39 31 3b 2b 2d 26 23 39 33 3b 48  <i>&#91;+-&#93;H
1e7a0 48 3a 4d 4d 3c 2f 69 3e 22 20 6f 72 20 6a 75 73  H:MM</i>" or jus
1e7b0 74 20 22 3c 69 3e 5a 3c 2f 69 3e 22 2e 20 20 54  t "<i>Z</i>".  T
1e7c0 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  he date and time
1e7d0 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 55   functions use U
1e7e0 54 43 20 6f 72 20 22 7a 75 6c 75 22 0a 74 69 6d  TC or "zulu".tim
1e7f0 65 20 69 6e 74 65 72 6e 61 6c 6c 79 2c 20 61 6e  e internally, an
1e800 64 20 73 6f 20 74 68 65 20 22 5a 22 20 73 75 66  d so the "Z" suf
1e810 66 69 78 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20  fix is a no-op. 
1e820 20 41 6e 79 20 6e 6f 6e 2d 7a 65 72 6f 20 22 48   Any non-zero "H
1e830 48 3a 4d 4d 22 20 73 75 66 66 69 78 20 69 73 0a  H:MM" suffix is.
1e840 73 75 62 74 72 61 63 74 65 64 20 66 72 6f 6d 20  subtracted from 
1e850 74 68 65 20 69 6e 64 69 63 61 74 65 64 20 64 61  the indicated da
1e860 74 65 20 61 6e 64 20 74 69 6d 65 20 69 6e 20 6f  te and time in o
1e870 72 64 65 72 20 74 6f 20 63 6f 6d 70 75 74 65 20  rder to compute 
1e880 7a 75 6c 75 20 74 69 6d 65 2e 0a 46 6f 72 20 65  zulu time..For e
1e890 78 61 6d 70 6c 65 2c 20 61 6c 6c 20 6f 66 20 74  xample, all of t
1e8a0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 69 6d  he following tim
1e8b0 65 20 73 74 72 69 6e 67 73 20 61 72 65 20 65 71  e strings are eq
1e8c0 75 69 76 61 6c 65 6e 74 3a 0a 3c 2f 70 3e 0a 0a  uivalent:.</p>..
1e8d0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 32 30 31  <blockquote>.201
1e8e0 33 2d 31 30 2d 30 37 20 30 38 3a 32 33 3a 31 39  3-10-07 08:23:19
1e8f0 2e 31 32 30 3c 62 72 3e 0a 32 30 31 33 2d 31 30  .120<br>.2013-10
1e900 2d 30 37 54 30 38 3a 32 33 3a 31 39 2e 31 32 30  -07T08:23:19.120
1e910 5a 3c 62 72 3e 0a 32 30 31 33 2d 31 30 2d 30 37  Z<br>.2013-10-07
1e920 20 30 34 3a 32 33 3a 31 39 2e 31 32 30 2d 30 34   04:23:19.120-04
1e930 3a 30 30 3c 62 72 3e 0a 32 34 35 36 35 37 32 2e  :00<br>.2456572.
1e940 38 34 39 35 32 36 38 35 0a 3c 2f 62 6c 6f 63 6b  84952685.</block
1e950 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 5e 28 49 6e  quote>..<p>.^(In
1e960 20 66 6f 72 6d 61 74 73 20 34 2c 20 37 2c 20 61   formats 4, 7, a
1e970 6e 64 20 31 30 2c 20 74 68 65 20 66 72 61 63 74  nd 10, the fract
1e980 69 6f 6e 61 6c 20 73 65 63 6f 6e 64 73 20 76 61  ional seconds va
1e990 6c 75 65 20 53 53 2e 53 53 53 20 63 61 6e 20 68  lue SS.SSS can h
1e9a0 61 76 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ave.one or more 
1e9b0 64 69 67 69 74 73 20 66 6f 6c 6c 6f 77 69 6e 67  digits following
1e9c0 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69   the decimal poi
1e9d0 6e 74 2e 20 20 45 78 61 63 74 6c 79 20 74 68 72  nt.  Exactly thr
1e9e0 65 65 20 64 69 67 69 74 73 20 61 72 65 0a 73 68  ee digits are.sh
1e9f0 6f 77 6e 20 69 6e 20 74 68 65 20 65 78 61 6d 70  own in the examp
1ea00 6c 65 73 20 62 65 63 61 75 73 65 20 6f 6e 6c 79  les because only
1ea10 20 74 68 65 20 66 69 72 73 74 20 74 68 72 65 65   the first three
1ea20 20 64 69 67 69 74 73 20 61 72 65 20 73 69 67 6e   digits are sign
1ea30 69 66 69 63 61 6e 74 0a 74 6f 20 74 68 65 20 72  ificant.to the r
1ea40 65 73 75 6c 74 2c 20 62 75 74 20 74 68 65 20 69  esult, but the i
1ea50 6e 70 75 74 20 73 74 72 69 6e 67 20 63 61 6e 20  nput string can 
1ea60 68 61 76 65 20 66 65 77 65 72 20 6f 72 20 6d 6f  have fewer or mo
1ea70 72 65 20 74 68 61 6e 20 74 68 72 65 65 20 64 69  re than three di
1ea80 67 69 74 73 0a 61 6e 64 20 74 68 65 20 64 61 74  gits.and the dat
1ea90 65 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  e/time functions
1eaa0 20 77 69 6c 6c 20 73 74 69 6c 6c 20 6f 70 65 72   will still oper
1eab0 61 74 65 20 63 6f 72 72 65 63 74 6c 79 2e 29 5e  ate correctly.)^
1eac0 0a 53 69 6d 69 6c 61 72 6c 79 2c 20 66 6f 72 6d  .Similarly, form
1ead0 61 74 20 31 32 20 69 73 20 73 68 6f 77 6e 20 77  at 12 is shown w
1eae0 69 74 68 20 31 30 20 73 69 67 6e 69 66 69 63 61  ith 10 significa
1eaf0 6e 74 20 64 69 67 69 74 73 2c 20 62 75 74 20 74  nt digits, but t
1eb00 68 65 20 64 61 74 65 2f 74 69 6d 65 0a 66 75 6e  he date/time.fun
1eb10 63 74 69 6f 6e 73 20 77 69 6c 6c 20 72 65 61 6c  ctions will real
1eb20 6c 79 20 61 63 63 65 70 74 20 61 73 20 6d 61 6e  ly accept as man
1eb30 79 20 6f 72 20 61 73 20 66 65 77 20 64 69 67 69  y or as few digi
1eb40 74 73 20 61 73 20 61 72 65 20 6e 65 63 65 73 73  ts as are necess
1eb50 61 72 79 20 74 6f 0a 72 65 70 72 65 73 65 6e 74  ary to.represent
1eb60 20 74 68 65 20 4a 75 6c 69 61 6e 20 64 61 79 20   the Julian day 
1eb70 6e 75 6d 62 65 72 2e 0a 3c 2f 70 3e 0a 0a 3c 68  number..</p>..<h
1eb80 33 3e 4d 6f 64 69 66 69 65 72 73 3c 2f 68 33 3e  3>Modifiers</h3>
1eb90 0a 0a 3c 70 3e 5e 54 68 65 20 74 69 6d 65 20 73  ..<p>^The time s
1eba0 74 72 69 6e 67 20 63 61 6e 20 62 65 20 66 6f 6c  tring can be fol
1ebb0 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72  lowed by zero or
1ebc0 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72 73 20   more modifiers 
1ebd0 74 68 61 74 20 0a 61 6c 74 65 72 20 64 61 74 65  that .alter date
1ebe0 20 61 6e 64 2f 6f 72 20 74 69 6d 65 2e 20 5e 45   and/or time. ^E
1ebf0 61 63 68 20 6d 6f 64 69 66 69 65 72 0a 69 73 20  ach modifier.is 
1ec00 61 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  a transformation
1ec10 20 74 68 61 74 20 69 73 20 61 70 70 6c 69 65 64   that is applied
1ec20 20 74 6f 20 74 68 65 20 74 69 6d 65 20 76 61 6c   to the time val
1ec30 75 65 20 74 6f 20 69 74 73 20 6c 65 66 74 2e 0a  ue to its left..
1ec40 5e 4d 6f 64 69 66 69 65 72 73 20 61 72 65 20 61  ^Modifiers are a
1ec50 70 70 6c 69 65 64 20 66 72 6f 6d 20 6c 65 66 74  pplied from left
1ec60 20 74 6f 20 72 69 67 68 74 3b 20 6f 72 64 65 72   to right; order
1ec70 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 0a 5e   is important..^
1ec80 28 54 68 65 20 61 76 61 69 6c 61 62 6c 65 20 6d  (The available m
1ec90 6f 64 69 66 69 65 72 73 20 61 72 65 20 61 73 20  odifiers are as 
1eca0 66 6f 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 6f  follows.</p>..<o
1ecb0 6c 3e 0a 3c 6c 69 3e 20 4e 4e 4e 20 64 61 79 73  l>.<li> NNN days
1ecc0 0a 3c 6c 69 3e 20 4e 4e 4e 20 68 6f 75 72 73 0a  .<li> NNN hours.
1ecd0 3c 6c 69 3e 20 4e 4e 4e 20 6d 69 6e 75 74 65 73  <li> NNN minutes
1ece0 0a 3c 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e 4e 20 73  .<li> NNN.NNNN s
1ecf0 65 63 6f 6e 64 73 0a 3c 6c 69 3e 20 4e 4e 4e 20  econds.<li> NNN 
1ed00 6d 6f 6e 74 68 73 0a 3c 6c 69 3e 20 4e 4e 4e 20  months.<li> NNN 
1ed10 79 65 61 72 73 0a 3c 6c 69 3e 20 73 74 61 72 74  years.<li> start
1ed20 20 6f 66 20 6d 6f 6e 74 68 0a 3c 6c 69 3e 20 73   of month.<li> s
1ed30 74 61 72 74 20 6f 66 20 79 65 61 72 0a 3c 6c 69  tart of year.<li
1ed40 3e 20 73 74 61 72 74 20 6f 66 20 64 61 79 0a 3c  > start of day.<
1ed50 6c 69 3e 20 77 65 65 6b 64 61 79 20 4e 0a 3c 6c  li> weekday N.<l
1ed60 69 3e 20 75 6e 69 78 65 70 6f 63 68 0a 3c 6c 69  i> unixepoch.<li
1ed70 3e 20 6c 6f 63 61 6c 74 69 6d 65 0a 3c 6c 69 3e  > localtime.<li>
1ed80 20 75 74 63 20 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c   utc .</ol>)^..<
1ed90 70 3e 5e 54 68 65 20 66 69 72 73 74 20 73 69 78  p>^The first six
1eda0 20 6d 6f 64 69 66 69 65 72 73 20 28 31 20 74 68   modifiers (1 th
1edb0 72 6f 75 67 68 20 36 29 20 0a 73 69 6d 70 6c 79  rough 6) .simply
1edc0 20 61 64 64 20 74 68 65 20 73 70 65 63 69 66 69   add the specifi
1edd0 65 64 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d  ed amount of tim
1ede0 65 20 74 6f 20 74 68 65 20 64 61 74 65 20 61 6e  e to the date an
1edf0 64 20 74 69 6d 65 20 0a 73 70 65 63 69 66 69 65  d time .specifie
1ee00 64 20 62 79 20 74 68 65 20 70 72 65 63 65 64 69  d by the precedi
1ee10 6e 67 20 74 69 6d 65 73 74 72 69 6e 67 20 61 6e  ng timestring an
1ee20 64 20 6d 6f 64 69 66 69 65 72 73 2e 0a 5e 54 68  d modifiers..^Th
1ee30 65 20 27 73 27 20 63 68 61 72 61 63 74 65 72 20  e 's' character 
1ee40 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
1ee50 65 20 6d 6f 64 69 66 69 65 72 20 6e 61 6d 65 73  e modifier names
1ee60 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 0a 5e 4e   is optional..^N
1ee70 6f 74 65 20 74 68 61 74 20 22 26 70 6c 75 73 6d  ote that "&plusm
1ee80 6e 3b 4e 4e 4e 20 6d 6f 6e 74 68 73 22 20 77 6f  n;NNN months" wo
1ee90 72 6b 73 20 62 79 20 72 65 6e 64 65 72 69 6e 67  rks by rendering
1eea0 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61   the original da
1eeb0 74 65 20 69 6e 74 6f 0a 74 68 65 20 59 59 59 59  te into.the YYYY
1eec0 2d 4d 4d 2d 44 44 20 66 6f 72 6d 61 74 2c 20 61  -MM-DD format, a
1eed0 64 64 69 6e 67 20 74 68 65 20 26 70 6c 75 73 6d  dding the &plusm
1eee0 6e 3b 4e 4e 4e 20 74 6f 20 74 68 65 20 4d 4d 20  n;NNN to the MM 
1eef0 6d 6f 6e 74 68 20 76 61 6c 75 65 2c 20 74 68 65  month value, the
1ef00 6e 0a 6e 6f 72 6d 61 6c 69 7a 69 6e 67 20 74 68  n.normalizing th
1ef10 65 20 72 65 73 75 6c 74 2e 20 20 5e 54 68 75 73  e result.  ^Thus
1ef20 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74  , for example, t
1ef30 68 65 20 64 61 74 61 20 32 30 30 31 2d 30 33 2d  he data 2001-03-
1ef40 33 31 20 6d 6f 64 69 66 69 65 64 0a 62 79 20 27  31 modified.by '
1ef50 2b 31 20 6d 6f 6e 74 68 27 20 69 6e 69 74 69 61  +1 month' initia
1ef60 6c 6c 79 20 79 69 65 6c 64 73 20 32 30 30 31 2d  lly yields 2001-
1ef70 30 34 2d 33 31 2c 20 62 75 74 20 41 70 72 69 6c  04-31, but April
1ef80 20 6f 6e 6c 79 20 68 61 73 20 33 30 20 64 61 79   only has 30 day
1ef90 73 0a 73 6f 20 74 68 65 20 64 61 74 65 20 69 73  s.so the date is
1efa0 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 74 6f 20 32   normalized to 2
1efb0 30 30 31 2d 30 35 2d 30 31 2e 20 20 5e 41 20 73  001-05-01.  ^A s
1efc0 69 6d 69 6c 61 72 20 65 66 66 65 63 74 20 6f 63  imilar effect oc
1efd0 63 75 72 73 20 77 68 65 6e 0a 74 68 65 20 6f 72  curs when.the or
1efe0 69 67 69 6e 61 6c 20 64 61 74 65 20 69 73 20 46  iginal date is F
1eff0 65 62 72 75 61 72 79 20 32 39 20 6f 66 20 61 20  ebruary 29 of a 
1f000 6c 65 61 70 79 65 61 72 20 61 6e 64 20 74 68 65  leapyear and the
1f010 20 6d 6f 64 69 66 69 65 72 20 69 73 0a 26 70 6c   modifier is.&pl
1f020 75 73 6d 6e 3b 4e 20 79 65 61 72 73 20 77 68 65  usmn;N years whe
1f030 72 65 20 4e 20 69 73 20 6e 6f 74 20 61 20 6d 75  re N is not a mu
1f040 6c 74 69 70 6c 65 20 6f 66 20 66 6f 75 72 2e 3c  ltiple of four.<
1f050 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 73 74  /p>..<p>^The "st
1f060 61 72 74 20 6f 66 22 20 6d 6f 64 69 66 69 65 72  art of" modifier
1f070 73 20 28 37 20 74 68 72 6f 75 67 68 20 39 29 20  s (7 through 9) 
1f080 73 68 69 66 74 20 74 68 65 20 64 61 74 65 20 62  shift the date b
1f090 61 63 6b 77 61 72 64 73 20 0a 74 6f 20 74 68 65  ackwards .to the
1f0a0 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
1f0b0 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2c  e current month,
1f0c0 20 79 65 61 72 20 6f 72 20 64 61 79 2e 3c 2f 70   year or day.</p
1f0d0 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 77 65 65 6b  >..<p>^The "week
1f0e0 64 61 79 22 20 6d 6f 64 69 66 69 65 72 20 61 64  day" modifier ad
1f0f0 76 61 6e 63 65 73 20 74 68 65 20 64 61 74 65 20  vances the date 
1f100 66 6f 72 77 61 72 64 20 74 6f 20 74 68 65 20 6e  forward to the n
1f110 65 78 74 20 64 61 74 65 20 0a 77 68 65 72 65 20  ext date .where 
1f120 74 68 65 20 77 65 65 6b 64 61 79 20 6e 75 6d 62  the weekday numb
1f130 65 72 20 69 73 20 4e 2e 20 53 75 6e 64 61 79 20  er is N. Sunday 
1f140 69 73 20 30 2c 20 4d 6f 6e 64 61 79 20 69 73 20  is 0, Monday is 
1f150 31 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  1, and so forth.
1f160 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 75  </p>..<p>^The "u
1f170 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69  nixepoch" modifi
1f180 65 72 20 28 31 31 29 20 6f 6e 6c 79 20 77 6f 72  er (11) only wor
1f190 6b 73 20 69 66 20 69 74 20 69 6d 6d 65 64 69 61  ks if it immedia
1f1a0 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 20 0a 61 20  tely follows .a 
1f1b0 74 69 6d 65 73 74 72 69 6e 67 20 69 6e 20 74 68  timestring in th
1f1c0 65 20 44 44 44 44 44 44 44 44 44 44 20 66 6f 72  e DDDDDDDDDD for
1f1d0 6d 61 74 2e 20 0a 5e 54 68 69 73 20 6d 6f 64 69  mat. .^This modi
1f1e0 66 69 65 72 20 63 61 75 73 65 73 20 74 68 65 20  fier causes the 
1f1f0 44 44 44 44 44 44 44 44 44 44 20 74 6f 20 62 65  DDDDDDDDDD to be
1f200 20 69 6e 74 65 72 70 72 65 74 65 64 20 6e 6f 74   interpreted not
1f210 20 0a 61 73 20 61 20 4a 75 6c 69 61 6e 20 64 61   .as a Julian da
1f220 79 20 6e 75 6d 62 65 72 20 61 73 20 69 74 20 6e  y number as it n
1f230 6f 72 6d 61 6c 6c 79 20 77 6f 75 6c 64 20 62 65  ormally would be
1f240 2c 20 62 75 74 20 61 73 0a 5b 68 74 74 70 3a 2f  , but as.[http:/
1f250 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72  /en.wikipedia.or
1f260 67 2f 77 69 6b 69 2f 55 6e 69 78 5f 74 69 6d 65  g/wiki/Unix_time
1f270 20 7c 20 55 6e 69 78 20 54 69 6d 65 5d 20 2d 20   | Unix Time] - 
1f280 74 68 65 20 0a 6e 75 6d 62 65 72 20 6f 66 20 73  the .number of s
1f290 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37  econds since 197
1f2a0 30 2e 20 20 49 66 20 74 68 65 20 22 75 6e 69 78  0.  If the "unix
1f2b0 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20  epoch" modifier 
1f2c0 64 6f 65 73 20 6e 6f 74 0a 66 6f 6c 6c 6f 77 20  does not.follow 
1f2d0 61 20 74 69 6d 65 73 74 72 69 6e 67 20 6f 66 20  a timestring of 
1f2e0 74 68 65 20 66 6f 72 6d 20 44 44 44 44 44 44 44  the form DDDDDDD
1f2f0 44 44 44 20 77 68 69 63 68 20 65 78 70 72 65 73  DDD which expres
1f300 73 65 73 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f  ses the number.o
1f310 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20  f seconds since 
1f320 31 39 37 30 20 6f 72 20 69 66 20 6f 74 68 65 72  1970 or if other
1f330 20 6d 6f 64 69 66 69 65 72 73 0a 73 65 70 61 72   modifiers.separ
1f340 61 74 65 20 74 68 65 20 22 75 6e 69 78 65 70 6f  ate the "unixepo
1f350 63 68 22 20 6d 6f 64 69 66 69 65 72 20 66 72 6f  ch" modifier fro
1f360 6d 20 70 72 69 6f 72 20 44 44 44 44 44 44 44 44  m prior DDDDDDDD
1f370 44 44 20 74 68 65 6e 20 74 68 65 0a 62 65 68 61  DD then the.beha
1f380 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65  vior is undefine
1f390 64 2e 0a 44 75 65 20 74 6f 20 70 72 65 63 69 73  d..Due to precis
1f3a0 69 6f 6e 20 6c 69 6d 69 74 61 74 69 6f 6e 73 20  ion limitations 
1f3b0 69 6d 70 6f 73 65 64 20 62 79 20 74 68 65 20 69  imposed by the i
1f3c0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 75  mplementations u
1f3d0 73 65 0a 6f 66 20 36 34 2d 62 69 74 20 69 6e 74  se.of 64-bit int
1f3e0 65 67 65 72 73 2c 20 74 68 65 20 22 75 6e 69 78  egers, the "unix
1f3f0 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20  epoch" modifier 
1f400 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 0a 64  only works for.d
1f410 61 74 65 73 20 62 65 74 77 65 65 6e 20 30 30 30  ates between 000
1f420 30 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30  0-01-01 00:00:00
1f430 20 61 6e 64 20 35 33 35 32 2d 31 31 2d 30 31 20   and 5352-11-01 
1f440 31 30 3a 35 32 3a 34 37 20 28 75 6e 69 78 20 74  10:52:47 (unix t
1f450 69 6d 65 73 0a 6f 66 20 2d 36 32 31 36 37 32 31  imes.of -6216721
1f460 39 32 30 30 20 74 68 72 6f 75 67 68 20 31 30 36  9200 through 106
1f470 37 35 31 39 39 31 31 36 37 29 2e 3c 2f 70 3e 0a  751991167).</p>.
1f480 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
1f490 74 20 6c 6f 63 61 6c 74 69 6d 65 20 7b 6c 6f 63  t localtime {loc
1f4a0 61 6c 74 69 6d 65 20 6d 6f 64 69 66 69 65 72 7d  altime modifier}
1f4b0 20 7b 27 75 74 63 27 20 6d 6f 64 69 66 69 65 72   {'utc' modifier
1f4c0 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20  }</tcl>.<p>^The 
1f4d0 22 6c 6f 63 61 6c 74 69 6d 65 22 20 6d 6f 64 69  "localtime" modi
1f4e0 66 69 65 72 20 28 31 32 29 20 61 73 73 75 6d 65  fier (12) assume
1f4f0 73 20 74 68 65 20 74 69 6d 65 20 73 74 72 69 6e  s the time strin
1f500 67 20 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73  g to its left is
1f510 20 69 6e 0a 55 6e 69 76 65 72 73 61 6c 20 43 6f   in.Universal Co
1f520 6f 72 64 69 6e 61 74 65 64 20 54 69 6d 65 20 28  ordinated Time (
1f530 55 54 43 29 20 61 6e 64 20 61 64 6a 75 73 74 73  UTC) and adjusts
1f540 20 74 68 65 20 74 69 6d 65 0a 73 74 72 69 6e 67   the time.string
1f550 20 73 6f 20 74 68 61 74 20 69 74 20 64 69 73 70   so that it disp
1f560 6c 61 79 73 20 6c 6f 63 61 6c 74 69 6d 65 2e 20  lays localtime. 
1f570 20 49 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22 0a   If "localtime".
1f580 66 6f 6c 6c 6f 77 73 20 61 20 74 69 6d 65 20 74  follows a time t
1f590 68 61 74 20 69 73 20 6e 6f 74 20 55 54 43 2c 20  hat is not UTC, 
1f5a0 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f  then the behavio
1f5b0 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  r is undefined..
1f5c0 5e 28 54 68 65 20 22 75 74 63 22 20 6d 6f 64 69  ^(The "utc" modi
1f5d0 66 69 65 72 20 69 73 20 74 68 65 20 6f 70 70 6f  fier is the oppo
1f5e0 73 69 74 65 20 6f 66 20 22 6c 6f 63 61 6c 74 69  site of "localti
1f5f0 6d 65 22 2e 20 20 0a 22 75 74 63 22 20 61 73 73  me".  ."utc" ass
1f600 75 6d 65 73 20 74 68 61 74 20 74 68 65 20 73 74  umes that the st
1f610 72 69 6e 67 0a 74 6f 20 69 74 73 20 6c 65 66 74  ring.to its left
1f620 20 69 73 20 69 6e 20 74 68 65 20 6c 6f 63 61 6c   is in the local
1f630 20 74 69 6d 65 7a 6f 6e 65 20 61 6e 64 20 61 64   timezone and ad
1f640 6a 75 73 74 73 20 74 68 61 74 20 73 74 72 69 6e  justs that strin
1f650 67 20 74 6f 20 62 65 20 69 6e 20 55 54 43 2e 29  g to be in UTC.)
1f660 5e 0a 49 66 20 74 68 65 20 70 72 69 6f 72 20 73  ^.If the prior s
1f670 74 72 69 6e 67 20 69 73 20 6e 6f 74 20 69 6e 20  tring is not in 
1f680 6c 6f 63 61 6c 74 69 6d 65 2c 20 74 68 65 6e 20  localtime, then 
1f690 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 22 75  the result of "u
1f6a0 74 63 22 20 69 73 0a 75 6e 64 65 66 69 6e 65 64  tc" is.undefined
1f6b0 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70  .</p>..<h3>Examp
1f6c0 6c 65 73 3c 2f 68 33 3e 0a 0a 5e 28 3c 70 3e 43  les</h3>..^(<p>C
1f6d0 6f 6d 70 75 74 65 20 74 68 65 20 63 75 72 72 65  ompute the curre
1f6e0 6e 74 20 64 61 74 65 2e 3c 70 3e 0a 0a 3c 62 6c  nt date.<p>..<bl
1f6f0 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45 43 54 20  ockquote>SELECT 
1f700 64 61 74 65 28 27 6e 6f 77 27 29 3b 3c 2f 62 6c  date('now');</bl
1f710 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
1f720 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6c 61  p>Compute the la
1f730 73 74 20 64 61 79 20 6f 66 20 74 68 65 20 63 75  st day of the cu
1f740 72 72 65 6e 74 20 6d 6f 6e 74 68 2e 3c 2f 70 3e  rrent month.</p>
1f750 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45  ..<blockquote>SE
1f760 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 2c  LECT date('now',
1f770 27 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68 27  'start of month'
1f780 2c 27 2b 31 20 6d 6f 6e 74 68 27 2c 27 2d 31 20  ,'+1 month','-1 
1f790 64 61 79 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  day');.</blockqu
1f7a0 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d  ote>)^..^(<p>Com
1f7b0 70 75 74 65 20 74 68 65 20 64 61 74 65 20 61 6e  pute the date an
1f7c0 64 20 74 69 6d 65 20 67 69 76 65 6e 20 61 20 75  d time given a u
1f7d0 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 20 31 30  nix timestamp 10
1f7e0 39 32 39 34 31 34 36 36 2e 3c 2f 70 3e 0a 0a 3c  92941466.</p>..<
1f7f0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20  blockquote>.    
1f800 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28  SELECT datetime(
1f810 31 30 39 32 39 34 31 34 36 36 2c 20 27 75 6e 69  1092941466, 'uni
1f820 78 65 70 6f 63 68 27 29 3b 0a 3c 2f 62 6c 6f 63  xepoch');.</bloc
1f830 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e  kquote>)^..^(<p>
1f840 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74 65  Compute the date
1f850 20 61 6e 64 20 74 69 6d 65 20 67 69 76 65 6e 20   and time given 
1f860 61 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70  a unix timestamp
1f870 20 31 30 39 32 39 34 31 34 36 36 2c 20 61 6e 64   1092941466, and
1f880 20 0a 63 6f 6d 70 65 6e 73 61 74 65 20 66 6f 72   .compensate for
1f890 20 79 6f 75 72 20 6c 6f 63 61 6c 20 74 69 6d 65   your local time
1f8a0 7a 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  zone.</p>..<bloc
1f8b0 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54  kquote>.  SELECT
1f8c0 20 64 61 74 65 74 69 6d 65 28 31 30 39 32 39 34   datetime(109294
1f8d0 31 34 36 36 2c 20 27 75 6e 69 78 65 70 6f 63 68  1466, 'unixepoch
1f8e0 27 2c 20 27 6c 6f 63 61 6c 74 69 6d 65 27 29 3b  ', 'localtime');
1f8f0 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
1f900 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
1f910 68 65 20 63 75 72 72 65 6e 74 20 75 6e 69 78 20  he current unix 
1f920 74 69 6d 65 73 74 61 6d 70 2e 3c 2f 70 3e 0a 0a  timestamp.</p>..
1f930 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
1f940 45 4c 45 43 54 20 73 74 72 66 74 69 6d 65 28 27  ELECT strftime('
1f950 25 73 27 2c 27 6e 6f 77 27 29 3b 0a 3c 2f 62 6c  %s','now');.</bl
1f960 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
1f970 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6e 75  p>Compute the nu
1f980 6d 62 65 72 20 6f 66 20 64 61 79 73 20 73 69 6e  mber of days sin
1f990 63 65 20 74 68 65 20 73 69 67 6e 69 6e 67 20 6f  ce the signing o
1f9a0 66 20 74 68 65 20 55 53 20 44 65 63 6c 61 72 61  f the US Declara
1f9b0 74 69 6f 6e 0a 6f 66 20 49 6e 64 65 70 65 6e 64  tion.of Independ
1f9c0 65 6e 63 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  ence.</p>..<bloc
1f9d0 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54  kquote>.  SELECT
1f9e0 20 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27   julianday('now'
1f9f0 29 20 2d 20 6a 75 6c 69 61 6e 64 61 79 28 27 31  ) - julianday('1
1fa00 37 37 36 2d 30 37 2d 30 34 27 29 3b 0a 3c 2f 62  776-07-04');.</b
1fa10 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28  lockquote>)^..^(
1fa20 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6e  <p>Compute the n
1fa30 75 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e 64 73  umber of seconds
1fa40 20 73 69 6e 63 65 20 61 20 70 61 72 74 69 63 75   since a particu
1fa50 6c 61 72 20 6d 6f 6d 65 6e 74 20 69 6e 20 32 30  lar moment in 20
1fa60 30 34 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  04:</p>..<blockq
1fa70 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 73  uote>.  SELECT s
1fa80 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f  trftime('%s','no
1fa90 77 27 29 20 2d 20 73 74 72 66 74 69 6d 65 28 27  w') - strftime('
1faa0 25 73 27 2c 27 32 30 30 34 2d 30 31 2d 30 31 20  %s','2004-01-01 
1fab0 30 32 3a 33 34 3a 35 36 27 29 3b 0a 3c 2f 62 6c  02:34:56');.</bl
1fac0 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
1fad0 70 3e 0a 43 6f 6d 70 75 74 65 20 74 68 65 20 64  p>.Compute the d
1fae0 61 74 65 20 6f 66 20 74 68 65 20 66 69 72 73 74  ate of the first
1faf0 20 54 75 65 73 64 61 79 20 69 6e 20 4f 63 74 6f   Tuesday in Octo
1fb00 62 65 72 0a 66 6f 72 20 74 68 65 20 63 75 72 72  ber.for the curr
1fb10 65 6e 74 20 79 65 61 72 2e 0a 3c 2f 70 3e 0a 0a  ent year..</p>..
1fb20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
1fb30 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27  ELECT date('now'
1fb40 2c 27 73 74 61 72 74 20 6f 66 20 79 65 61 72 27  ,'start of year'
1fb50 2c 27 2b 39 20 6d 6f 6e 74 68 73 27 2c 27 77 65  ,'+9 months','we
1fb60 65 6b 64 61 79 20 32 27 29 3b 0a 3c 2f 62 6c 6f  ekday 2');.</blo
1fb70 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70  ckquote>)^..^(<p
1fb80 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 74 69 6d  >Compute the tim
1fb90 65 20 73 69 6e 63 65 20 74 68 65 20 75 6e 69 78  e since the unix
1fba0 20 65 70 6f 63 68 20 69 6e 20 73 65 63 6f 6e 64   epoch in second
1fbb0 73 20 0a 28 6c 69 6b 65 20 73 74 72 66 74 69 6d  s .(like strftim
1fbc0 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 20 65 78  e('%s','now') ex
1fbd0 63 65 70 74 20 69 6e 63 6c 75 64 65 73 20 66 72  cept includes fr
1fbe0 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 29 3a 3c  actional part):<
1fbf0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
1fc00 3e 0a 20 20 53 45 4c 45 43 54 20 28 6a 75 6c 69  >.  SELECT (juli
1fc10 61 6e 64 61 79 28 27 6e 6f 77 27 29 20 2d 20 32  anday('now') - 2
1fc20 34 34 30 35 38 37 2e 35 29 2a 38 36 34 30 30 2e  440587.5)*86400.
1fc30 30 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  0;.</blockquote>
1fc40 29 5e 0a 0a 3c 68 33 3e 43 61 76 65 61 74 73 20  )^..<h3>Caveats 
1fc50 41 6e 64 20 42 75 67 73 3c 2f 68 33 3e 0a 0a 3c  And Bugs</h3>..<
1fc60 70 3e 54 68 65 20 63 6f 6d 70 75 74 61 74 69 6f  p>The computatio
1fc70 6e 20 6f 66 20 6c 6f 63 61 6c 20 74 69 6d 65 20  n of local time 
1fc80 64 65 70 65 6e 64 73 20 68 65 61 76 69 6c 79 20  depends heavily 
1fc90 6f 6e 20 74 68 65 20 77 68 69 6d 20 0a 6f 66 20  on the whim .of 
1fca0 70 6f 6c 69 74 69 63 69 61 6e 73 20 61 6e 64 20  politicians and 
1fcb0 69 73 20 74 68 75 73 20 64 69 66 66 69 63 75 6c  is thus difficul
1fcc0 74 20 74 6f 20 67 65 74 20 63 6f 72 72 65 63 74  t to get correct
1fcd0 20 66 6f 72 20 0a 61 6c 6c 20 6c 6f 63 61 6c 65   for .all locale
1fce0 73 2e 20 5e 49 6e 20 74 68 69 73 20 69 6d 70 6c  s. ^In this impl
1fcf0 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20  ementation, the 
1fd00 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61  standard C libra
1fd10 72 79 20 0a 66 75 6e 63 74 69 6f 6e 20 6c 6f 63  ry .function loc
1fd20 61 6c 74 69 6d 65 5f 72 28 29 20 69 73 20 75 73  altime_r() is us
1fd30 65 64 20 74 6f 20 61 73 73 69 73 74 20 69 6e 20  ed to assist in 
1fd40 74 68 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e 20  the calculation 
1fd50 6f 66 20 0a 6c 6f 63 61 6c 20 74 69 6d 65 2e 20  of .local time. 
1fd60 20 5e 28 54 68 65 20 0a 6c 6f 63 61 6c 74 69 6d   ^(The .localtim
1fd70 65 5f 72 28 29 20 43 20 66 75 6e 63 74 69 6f 6e  e_r() C function
1fd80 20 6e 6f 72 6d 61 6c 6c 79 20 6f 6e 6c 79 20 77   normally only w
1fd90 6f 72 6b 73 20 66 6f 72 20 79 65 61 72 73 0a 62  orks for years.b
1fda0 65 74 77 65 65 6e 20 31 39 37 30 20 61 6e 64 20  etween 1970 and 
1fdb0 32 30 33 37 2e 20 46 6f 72 20 64 61 74 65 73 20  2037. For dates 
1fdc0 6f 75 74 73 69 64 65 20 74 68 69 73 20 72 61 6e  outside this ran
1fdd0 67 65 2c 20 53 51 4c 69 74 65 20 0a 61 74 74 65  ge, SQLite .atte
1fde0 6d 70 74 73 20 74 6f 20 6d 61 70 20 74 68 65 20  mpts to map the 
1fdf0 79 65 61 72 20 69 6e 74 6f 20 61 6e 20 65 71 75  year into an equ
1fe00 69 76 61 6c 65 6e 74 20 79 65 61 72 20 77 69 74  ivalent year wit
1fe10 68 69 6e 20 0a 74 68 69 73 20 72 61 6e 67 65 2c  hin .this range,
1fe20 20 64 6f 20 74 68 65 20 63 61 6c 63 75 6c 61 74   do the calculat
1fe30 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 70 20 74 68  ion, then map th
1fe40 65 20 79 65 61 72 20 62 61 63 6b 2e 29 5e 3c 2f  e year back.)^</
1fe50 70 3e 0a 0a 0a 3c 70 3e 5e 28 54 68 65 73 65 20  p>...<p>^(These 
1fe60 66 75 6e 63 74 69 6f 6e 73 20 6f 6e 6c 79 20 77  functions only w
1fe70 6f 72 6b 20 66 6f 72 20 64 61 74 65 73 20 62 65  ork for dates be
1fe80 74 77 65 65 6e 20 30 30 30 30 2d 30 31 2d 30 31  tween 0000-01-01
1fe90 20 30 30 3a 30 30 3a 30 30 0a 61 6e 64 20 39 39   00:00:00.and 99
1fea0 39 39 2d 31 32 2d 33 31 20 32 33 3a 35 39 3a 35  99-12-31 23:59:5
1feb0 39 20 28 6a 75 6c 69 64 61 6e 20 64 61 79 20 6e  9 (julidan day n
1fec0 75 6d 62 65 72 73 20 31 37 32 31 30 35 39 2e 35  umbers 1721059.5
1fed0 20 74 68 72 6f 75 67 68 20 35 33 37 33 34 38 34   through 5373484
1fee0 2e 35 29 2e 29 5e 0a 46 6f 72 20 64 61 74 65 73  .5).)^.For dates
1fef0 20 6f 75 74 73 69 64 65 20 74 68 61 74 20 72 61   outside that ra
1ff00 6e 67 65 2c 20 74 68 65 20 72 65 73 75 6c 74 73  nge, the results
1ff10 20 6f 66 20 74 68 65 73 65 0a 66 75 6e 63 74 69   of these.functi
1ff20 6f 6e 73 20 61 72 65 20 75 6e 64 65 66 69 6e 65  ons are undefine
1ff30 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e 6f 6e 2d 56  d.</p>..<p>Non-V
1ff40 69 73 74 61 20 57 69 6e 64 6f 77 73 20 70 6c 61  ista Windows pla
1ff50 74 66 6f 72 6d 73 20 6f 6e 6c 79 20 73 75 70 70  tforms only supp
1ff60 6f 72 74 20 6f 6e 65 20 73 65 74 20 6f 66 20 44  ort one set of D
1ff70 53 54 20 72 75 6c 65 73 2e 20 0a 56 69 73 74 61  ST rules. .Vista
1ff80 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 73 20 74   only supports t
1ff90 77 6f 2e 20 54 68 65 72 65 66 6f 72 65 2c 20 6f  wo. Therefore, o
1ffa0 6e 20 74 68 65 73 65 20 70 6c 61 74 66 6f 72 6d  n these platform
1ffb0 73 2c 20 0a 68 69 73 74 6f 72 69 63 61 6c 20 44  s, .historical D
1ffc0 53 54 20 63 61 6c 63 75 6c 61 74 69 6f 6e 73 20  ST calculations 
1ffd0 77 69 6c 6c 20 62 65 20 69 6e 63 6f 72 72 65 63  will be incorrec
1ffe0 74 2e 20 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c  t. .For example,
1fff0 20 69 6e 20 74 68 65 20 55 53 2c 20 69 6e 20 32   in the US, in 2
20000 30 30 37 20 74 68 65 20 44 53 54 20 72 75 6c 65  007 the DST rule
20010 73 20 63 68 61 6e 67 65 64 2e 20 0a 4e 6f 6e 2d  s changed. .Non-
20020 56 69 73 74 61 20 57 69 6e 64 6f 77 73 20 70 6c  Vista Windows pl
20030 61 74 66 6f 72 6d 73 20 61 70 70 6c 79 20 74 68  atforms apply th
20040 65 20 6e 65 77 20 32 30 30 37 20 44 53 54 20 72  e new 2007 DST r
20050 75 6c 65 73 20 0a 74 6f 20 61 6c 6c 20 70 72 65  ules .to all pre
20060 76 69 6f 75 73 20 79 65 61 72 73 20 61 73 20 77  vious years as w
20070 65 6c 6c 2e 20 56 69 73 74 61 20 64 6f 65 73 20  ell. Vista does 
20080 73 6f 6d 65 77 68 61 74 20 62 65 74 74 65 72 0a  somewhat better.
20090 67 65 74 74 69 6e 67 20 72 65 73 75 6c 74 73 20  getting results 
200a0 63 6f 72 72 65 63 74 20 62 61 63 6b 20 74 6f 20  correct back to 
200b0 31 39 38 36 2c 20 77 68 65 6e 20 74 68 65 20 72  1986, when the r
200c0 75 6c 65 73 20 77 65 72 65 20 61 6c 73 6f 20 63  ules were also c
200d0 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  hanged.</p>..<p>
200e0 41 6c 6c 20 69 6e 74 65 72 6e 61 6c 20 63 6f 6d  All internal com
200f0 70 75 74 61 74 69 6f 6e 73 20 61 73 73 75 6d 65  putations assume
20100 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e   the .[http://en
20110 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77  .wikipedia.org/w
20120 69 6b 69 2f 47 72 65 67 6f 72 69 61 6e 5f 63 61  iki/Gregorian_ca
20130 6c 65 6e 64 61 72 20 7c 20 47 72 65 67 6f 72 69  lendar | Gregori
20140 61 6e 20 63 61 6c 65 6e 64 61 72 5d 0a 73 79 73  an calendar].sys
20150 74 65 6d 2e 20 20 49 74 20 69 73 20 61 6c 73 6f  tem.  It is also
20160 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 65 76   assumed that ev
20170 65 72 79 0a 64 61 79 20 69 73 20 65 78 61 63 74  ery.day is exact
20180 6c 79 20 38 36 34 30 30 20 73 65 63 6f 6e 64 73  ly 86400 seconds
20190 20 69 6e 20 64 75 72 61 74 69 6f 6e 2e 3c 2f 70   in duration.</p
201a0 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
201b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
201c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
201d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
201e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
201f0 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
20200 7b 41 67 67 72 65 67 61 74 65 20 46 75 6e 63 74  {Aggregate Funct
20210 69 6f 6e 73 7d 20 61 67 67 66 75 6e 63 20 7b 2a  ions} aggfunc {*
20220 61 67 67 66 75 6e 63 7d 0a 75 6e 73 65 74 20 2d  aggfunc}.unset -
20230 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63 6f 72 65 66  nocomplain coref
20240 75 6e 63 73 65 74 0a 0a 66 75 6e 63 64 65 66 20  uncset..funcdef 
20250 7b 61 76 67 28 58 29 7d 20 7b 2a 61 76 67 20 7b  {avg(X)} {*avg {
20260 61 76 67 28 29 20 61 67 67 72 65 67 61 74 65 20  avg() aggregate 
20270 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e  function}} {.  ^
20280 54 68 65 20 61 76 67 28 29 20 66 75 6e 63 74 69  The avg() functi
20290 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20 74 68 65  on.  returns the
202a0 20 61 76 65 72 61 67 65 20 76 61 6c 75 65 20 6f   average value o
202b0 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 3c  f all non-NULL <
202c0 69 3e 58 3c 2f 69 3e 20 77 69 74 68 69 6e 20 61  i>X</i> within a
202d0 0a 20 20 67 72 6f 75 70 2e 20 20 5e 53 74 72 69  .  group.  ^Stri
202e0 6e 67 20 61 6e 64 20 42 4c 4f 42 20 76 61 6c 75  ng and BLOB valu
202f0 65 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 6c  es that do not l
20300 6f 6f 6b 20 6c 69 6b 65 20 6e 75 6d 62 65 72 73  ook like numbers
20310 20 61 72 65 0a 20 20 69 6e 74 65 72 70 72 65 74   are.  interpret
20320 65 64 20 61 73 20 30 2e 0a 20 20 5e 54 68 65 20  ed as 0..  ^The 
20330 72 65 73 75 6c 74 20 6f 66 20 61 76 67 28 29 20  result of avg() 
20340 69 73 20 61 6c 77 61 79 73 20 61 20 66 6c 6f 61  is always a floa
20350 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65  ting point value
20360 20 61 73 20 6c 6f 6e 67 20 61 73 0a 20 20 61 74   as long as.  at
20370 20 74 68 65 72 65 20 69 73 20 61 74 20 6c 65 61   there is at lea
20380 73 74 20 6f 6e 65 20 6e 6f 6e 2d 4e 55 4c 4c 20  st one non-NULL 
20390 69 6e 70 75 74 20 65 76 65 6e 20 69 66 20 61 6c  input even if al
203a0 6c 0a 20 20 69 6e 70 75 74 73 20 61 72 65 20 69  l.  inputs are i
203b0 6e 74 65 67 65 72 73 2e 20 20 5e 54 68 65 20 72  ntegers.  ^The r
203c0 65 73 75 6c 74 20 6f 66 20 61 76 67 28 29 20 69  esult of avg() i
203d0 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64 20 6f 6e  s NULL if and on
203e0 6c 79 20 69 66 0a 20 20 74 68 65 72 65 20 61 72  ly if.  there ar
203f0 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e  e no non-NULL in
20400 70 75 74 73 2e 20 20 0a 7d 0a 0a 66 75 6e 63 64  puts.  .}..funcd
20410 65 66 20 7b 63 6f 75 6e 74 28 58 29 20 63 6f 75  ef {count(X) cou
20420 6e 74 28 2a 29 7d 20 7b 2a 63 6f 75 6e 74 20 7b  nt(*)} {*count {
20430 63 6f 75 6e 74 28 29 20 61 67 67 72 65 67 61 74  count() aggregat
20440 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20  e function}} {. 
20450 20 5e 54 68 65 20 63 6f 75 6e 74 28 58 29 20 66   ^The count(X) f
20460 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 0a  unction returns.
20470 20 20 61 20 63 6f 75 6e 74 20 6f 66 20 74 68 65    a count of the
20480 20 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73   number of times
20490 0a 20 20 74 68 61 74 20 3c 69 3e 58 3c 2f 69 3e  .  that <i>X</i>
204a0 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 69 6e 20   is not NULL in 
204b0 61 20 67 72 6f 75 70 2e 20 20 5e 54 68 65 20 63  a group.  ^The c
204c0 6f 75 6e 74 28 2a 29 20 66 75 6e 63 74 69 6f 6e  ount(*) function
204d0 0a 20 20 28 77 69 74 68 20 6e 6f 20 61 72 67 75  .  (with no argu
204e0 6d 65 6e 74 73 29 20 72 65 74 75 72 6e 73 20 74  ments) returns t
204f0 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
20500 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67  of rows in the g
20510 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  roup..}..funcdef
20520 20 7b 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58   {group_concat(X
20530 29 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58  ) group_concat(X
20540 2c 59 29 7d 20 7b 0a 20 20 2a 67 72 6f 75 70 5f  ,Y)} {.  *group_
20550 63 6f 6e 63 61 74 20 7b 67 72 6f 75 70 5f 63 6f  concat {group_co
20560 6e 63 61 74 28 29 20 61 67 67 72 65 67 61 74 65  ncat() aggregate
20570 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20   function}.} {. 
20580 20 5e 54 68 65 20 67 72 6f 75 70 5f 63 6f 6e 63   ^The group_conc
20590 61 74 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  at() function re
205a0 74 75 72 6e 73 0a 20 20 61 20 73 74 72 69 6e 67  turns.  a string
205b0 20 77 68 69 63 68 20 69 73 20 74 68 65 20 63 6f   which is the co
205c0 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f 66 0a 20  ncatenation of. 
205d0 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61   all non-NULL va
205e0 6c 75 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e  lues of <i>X</i>
205f0 2e 20 20 5e 49 66 20 70 61 72 61 6d 65 74 65 72  .  ^If parameter
20600 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 70 72 65   <i>Y</i> is pre
20610 73 65 6e 74 20 74 68 65 6e 0a 20 20 69 74 20 69  sent then.  it i
20620 73 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65  s used as the se
20630 70 61 72 61 74 6f 72 0a 20 20 62 65 74 77 65 65  parator.  betwee
20640 6e 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 3c  n instances of <
20650 69 3e 58 3c 2f 69 3e 2e 20 20 5e 41 20 63 6f 6d  i>X</i>.  ^A com
20660 6d 61 20 28 22 2c 22 29 20 69 73 20 75 73 65 64  ma (",") is used
20670 20 61 73 20 74 68 65 20 73 65 70 61 72 61 74 6f   as the separato
20680 72 0a 20 20 69 66 20 3c 69 3e 59 3c 2f 69 3e 20  r.  if <i>Y</i> 
20690 69 73 20 6f 6d 69 74 74 65 64 2e 20 20 54 68 65  is omitted.  The
206a0 20 6f 72 64 65 72 20 6f 66 20 74 68 65 20 63 6f   order of the co
206b0 6e 63 61 74 65 6e 61 74 65 64 20 65 6c 65 6d 65  ncatenated eleme
206c0 6e 74 73 20 69 73 0a 20 20 61 72 62 69 74 72 61  nts is.  arbitra
206d0 72 79 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ry..}..funcdef {
206e0 6d 61 78 28 58 29 7d 20 7b 2a 6d 61 78 41 67 67  max(X)} {*maxAgg
206f0 46 75 6e 63 20 2a 61 67 67 5f 6d 61 78 20 7b 6d  Func *agg_max {m
20700 61 78 28 29 20 61 67 67 72 65 67 61 74 65 20 66  ax() aggregate f
20710 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54  unction}} {.  ^T
20720 68 65 20 6d 61 78 28 29 20 61 67 67 72 65 67 61  he max() aggrega
20730 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65  te function.  re
20740 74 75 72 6e 73 20 74 68 65 20 6d 61 78 69 6d 75  turns the maximu
20750 6d 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76  m value of all v
20760 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f  alues in the gro
20770 75 70 2e 0a 20 20 5e 54 68 65 20 6d 61 78 69 6d  up..  ^The maxim
20780 75 6d 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  um value is the 
20790 76 61 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64  value that would
207a0 20 62 65 20 72 65 74 75 72 6e 65 64 20 6c 61 73   be returned las
207b0 74 20 69 6e 20 61 6e 0a 20 20 4f 52 44 45 52 20  t in an.  ORDER 
207c0 42 59 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 63  BY on the same c
207d0 6f 6c 75 6d 6e 2e 20 20 5e 41 67 67 72 65 67 61  olumn.  ^Aggrega
207e0 74 65 20 6d 61 78 28 29 20 72 65 74 75 72 6e 73  te max() returns
207f0 20 4e 55 4c 4c 20 0a 20 20 69 66 20 61 6e 64 20   NULL .  if and 
20800 6f 6e 6c 79 20 69 66 20 74 68 65 72 65 20 61 72  only if there ar
20810 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61  e no non-NULL va
20820 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75  lues in the grou
20830 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d  p..}..funcdef {m
20840 69 6e 28 58 29 7d 20 7b 2a 6d 69 6e 41 67 67 46  in(X)} {*minAggF
20850 75 6e 63 20 2a 61 67 67 5f 6d 69 6e 20 7b 6d 69  unc *agg_min {mi
20860 6e 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  n() aggregate fu
20870 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68  nction}} {.  ^Th
20880 65 20 6d 69 6e 28 29 20 61 67 67 72 65 67 61 74  e min() aggregat
20890 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74  e function.  ret
208a0 75 72 6e 73 20 74 68 65 20 6d 69 6e 69 6d 75 6d  urns the minimum
208b0 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20   non-NULL value 
208c0 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e  of all values in
208d0 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e 54   the group..  ^T
208e0 68 65 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65  he minimum value
208f0 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6e 6f   is the first no
20900 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 74 68 61  n-NULL value tha
20910 74 20 77 6f 75 6c 64 20 61 70 70 65 61 72 0a 20  t would appear. 
20920 20 69 6e 20 61 6e 20 4f 52 44 45 52 20 42 59 20   in an ORDER BY 
20930 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 20  of the column.. 
20940 20 5e 41 67 67 72 65 67 61 74 65 20 6d 69 6e 28   ^Aggregate min(
20950 29 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69  ) returns NULL i
20960 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68  f and only if th
20970 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e  ere are no non-N
20980 55 4c 4c 0a 20 20 76 61 6c 75 65 73 20 69 6e 20  ULL.  values in 
20990 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75  the group..}..fu
209a0 6e 63 64 65 66 20 7b 73 75 6d 28 58 29 20 74 6f  ncdef {sum(X) to
209b0 74 61 6c 28 58 29 7d 20 7b 0a 20 20 2a 73 75 6d  tal(X)} {.  *sum
209c0 46 75 6e 63 20 2a 73 75 6d 20 2a 74 6f 74 61 6c  Func *sum *total
209d0 0a 20 20 7b 73 75 6d 28 29 20 61 67 67 72 65 67  .  {sum() aggreg
209e0 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 20 20  ate function}.  
209f0 7b 74 6f 74 61 6c 28 29 20 61 67 67 72 65 67 61  {total() aggrega
20a00 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b  te function}.} {
20a10 0a 20 20 5e 54 68 65 20 73 75 6d 28 29 20 61 6e  .  ^The sum() an
20a20 64 20 74 6f 74 61 6c 28 29 20 61 67 67 72 65 67  d total() aggreg
20a30 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a 20 20  ate functions.  
20a40 72 65 74 75 72 6e 20 73 75 6d 20 6f 66 20 61 6c  return sum of al
20a50 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  l non-NULL value
20a60 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a  s in the group..
20a70 20 20 5e 49 66 20 74 68 65 72 65 20 61 72 65 20    ^If there are 
20a80 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75  no non-NULL inpu
20a90 74 20 72 6f 77 73 20 74 68 65 6e 20 73 75 6d 28  t rows then sum(
20aa0 29 20 72 65 74 75 72 6e 73 0a 20 20 4e 55 4c 4c  ) returns.  NULL
20ab0 20 62 75 74 20 74 6f 74 61 6c 28 29 20 72 65 74   but total() ret
20ac0 75 72 6e 73 20 30 2e 30 2e 0a 20 20 4e 55 4c 4c  urns 0.0..  NULL
20ad0 20 69 73 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79   is not normally
20ae0 20 61 20 68 65 6c 70 66 75 6c 20 72 65 73 75 6c   a helpful resul
20af0 74 20 66 6f 72 20 74 68 65 20 73 75 6d 20 6f 66  t for the sum of
20b00 20 6e 6f 20 72 6f 77 73 0a 20 20 62 75 74 20 74   no rows.  but t
20b10 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20  he SQL standard 
20b20 72 65 71 75 69 72 65 73 20 69 74 20 61 6e 64 20  requires it and 
20b30 6d 6f 73 74 20 6f 74 68 65 72 0a 20 20 53 51 4c  most other.  SQL
20b40 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
20b50 73 20 69 6d 70 6c 65 6d 65 6e 74 20 73 75 6d 28  s implement sum(
20b60 29 20 74 68 61 74 20 77 61 79 20 73 6f 20 53 51  ) that way so SQ
20b70 4c 69 74 65 20 64 6f 65 73 20 69 74 20 69 6e 20  Lite does it in 
20b80 74 68 65 0a 20 20 73 61 6d 65 20 77 61 79 20 69  the.  same way i
20b90 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 20 63 6f  n order to be co
20ba0 6d 70 61 74 69 62 6c 65 2e 20 20 20 54 68 65 20  mpatible.   The 
20bb0 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 74 6f 74  non-standard tot
20bc0 61 6c 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  al() function.  
20bd0 69 73 20 70 72 6f 76 69 64 65 64 20 61 73 20 61  is provided as a
20be0 20 63 6f 6e 76 65 6e 69 65 6e 74 20 77 61 79 20   convenient way 
20bf0 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 74  to work around t
20c00 68 69 73 20 64 65 73 69 67 6e 20 70 72 6f 62 6c  his design probl
20c10 65 6d 0a 20 20 69 6e 20 74 68 65 20 53 51 4c 20  em.  in the SQL 
20c20 6c 61 6e 67 75 61 67 65 2e 3c 2f 70 3e 0a 0a 20  language.</p>.. 
20c30 20 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c 74 20   <p>^The result 
20c40 6f 66 20 74 6f 74 61 6c 28 29 20 69 73 20 61 6c  of total() is al
20c50 77 61 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20  ways a floating 
20c60 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 20 20 5e  point value..  ^
20c70 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 73 75  The result of su
20c80 6d 28 29 20 69 73 20 61 6e 20 69 6e 74 65 67 65  m() is an intege
20c90 72 20 76 61 6c 75 65 20 69 66 20 61 6c 6c 20 6e  r value if all n
20ca0 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 20 61  on-NULL inputs a
20cb0 72 65 20 69 6e 74 65 67 65 72 73 2e 0a 20 20 5e  re integers..  ^
20cc0 49 66 20 61 6e 79 20 69 6e 70 75 74 20 74 6f 20  If any input to 
20cd0 73 75 6d 28 29 20 69 73 20 6e 65 69 74 68 65 72  sum() is neither
20ce0 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 61   an integer or a
20cf0 20 4e 55 4c 4c 0a 20 20 74 68 65 6e 20 73 75 6d   NULL.  then sum
20d00 28 29 20 72 65 74 75 72 6e 73 20 61 20 66 6c 6f  () returns a flo
20d10 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75  ating point valu
20d20 65 0a 20 20 77 68 69 63 68 20 6d 69 67 68 74 20  e.  which might 
20d30 62 65 20 61 6e 20 61 70 70 72 6f 78 69 6d 61 74  be an approximat
20d40 69 6f 6e 20 74 6f 20 74 68 65 20 74 72 75 65 20  ion to the true 
20d50 73 75 6d 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e  sum.</p>..  <p>^
20d60 53 75 6d 28 29 20 77 69 6c 6c 20 74 68 72 6f 77  Sum() will throw
20d70 20 61 6e 20 22 69 6e 74 65 67 65 72 20 6f 76 65   an "integer ove
20d80 72 66 6c 6f 77 22 20 65 78 63 65 70 74 69 6f 6e  rflow" exception
20d90 20 69 66 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20   if all inputs. 
20da0 20 61 72 65 20 69 6e 74 65 67 65 72 73 20 6f 72   are integers or
20db0 20 4e 55 4c 4c 0a 20 20 61 6e 64 20 61 6e 20 69   NULL.  and an i
20dc0 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 20  nteger overflow 
20dd0 6f 63 63 75 72 73 20 61 74 20 61 6e 79 20 70 6f  occurs at any po
20de0 69 6e 74 20 64 75 72 69 6e 67 20 74 68 65 20 63  int during the c
20df0 6f 6d 70 75 74 61 74 69 6f 6e 2e 0a 20 20 5e 54  omputation..  ^T
20e00 6f 74 61 6c 28 29 20 6e 65 76 65 72 20 74 68 72  otal() never thr
20e10 6f 77 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f  ows an integer o
20e20 76 65 72 66 6c 6f 77 2e 0a 7d 0a 3c 2f 74 63 6c  verflow..}.</tcl
20e30 3e 0a 0a 0a 3c 70 3e 0a 54 68 65 20 61 67 67 72  >...<p>.The aggr
20e40 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
20e50 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65 20  shown below are 
20e60 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66  available by def
20e70 61 75 6c 74 2e 20 20 41 64 64 69 74 69 6f 6e 61  ault.  Additiona
20e80 6c 0a 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  l.aggregate func
20e90 74 69 6f 6e 73 20 77 72 69 74 74 65 6e 20 69 6e  tions written in
20ea0 20 43 20 6d 61 79 20 62 65 20 61 64 64 65 64 20   C may be added 
20eb0 75 73 69 6e 67 20 74 68 65 20 0a 5b 73 71 6c 69  using the .[sqli
20ec0 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
20ed0 69 6f 6e 28 29 5d 3c 2f 61 3e 0a 41 50 49 2e 3c  ion()]</a>.API.<
20ee0 2f 70 3e 0a 0a 3c 70 3e 0a 5e 49 6e 20 61 6e 79  /p>..<p>.^In any
20ef0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
20f00 69 6f 6e 20 74 68 61 74 20 74 61 6b 65 73 20 61  ion that takes a
20f10 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74   single argument
20f20 2c 20 74 68 61 74 20 61 72 67 75 6d 65 6e 74 0a  , that argument.
20f30 63 61 6e 20 62 65 20 70 72 65 63 65 64 65 64 20  can be preceded 
20f40 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64 20 44  by the keyword D
20f50 49 53 54 49 4e 43 54 2e 20 20 5e 49 6e 20 73 75  ISTINCT.  ^In su
20f60 63 68 20 63 61 73 65 73 2c 20 64 75 70 6c 69 63  ch cases, duplic
20f70 61 74 65 0a 65 6c 65 6d 65 6e 74 73 20 61 72 65  ate.elements are
20f80 20 66 69 6c 74 65 72 65 64 20 62 65 66 6f 72 65   filtered before
20f90 20 62 65 69 6e 67 20 70 61 73 73 65 64 20 69 6e   being passed in
20fa0 74 6f 20 74 68 65 20 61 67 67 72 65 67 61 74 65  to the aggregate
20fb0 20 66 75 6e 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20   function..^For 
20fc0 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 66 75 6e  example, the fun
20fd0 63 74 69 6f 6e 20 22 63 6f 75 6e 74 28 64 69 73  ction "count(dis
20fe0 74 69 6e 63 74 20 58 29 22 20 77 69 6c 6c 20 72  tinct X)" will r
20ff0 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
21000 0a 6f 66 20 64 69 73 74 69 6e 63 74 20 76 61 6c  .of distinct val
21010 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 20 58 20  ues of column X 
21020 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 74  instead of the t
21030 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 6e  otal number of n
21040 6f 6e 2d 6e 75 6c 6c 0a 76 61 6c 75 65 73 20 69  on-null.values i
21050 6e 20 63 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f 70 3e  n column X..</p>
21060 0a 0a 3c 74 63 6c 3e 0a 73 65 74 20 6c 78 20 7b  ..<tcl>.set lx {
21070 7d 0a 66 6f 72 65 61 63 68 20 62 61 73 65 73 79  }.foreach basesy
21080 6e 74 61 78 20 5b 61 72 72 61 79 20 6e 61 6d 65  ntax [array name
21090 73 20 63 6f 72 65 66 75 6e 63 73 65 74 5d 20 7b  s corefuncset] {
210a0 0a 20 20 66 6f 72 65 61 63 68 20 7b 73 79 6e 74  .  foreach {synt
210b0 61 78 20 6b 65 79 77 6f 72 64 73 20 64 65 73 63  ax keywords desc
210c0 7d 20 24 63 6f 72 65 66 75 6e 63 73 65 74 28 24  } $corefuncset($
210d0 62 61 73 65 73 79 6e 74 61 78 29 20 62 72 65 61  basesyntax) brea
210e0 6b 0a 20 20 72 65 67 65 78 70 20 7b 5e 5b 61 2d  k.  regexp {^[a-
210f0 7a 5f 5d 2b 7d 20 24 62 61 73 65 73 79 6e 74 61  z_]+} $basesynta
21100 78 20 66 72 61 67 6d 65 6e 74 0a 20 20 66 6f 72  x fragment.  for
21110 65 61 63 68 20 63 6f 72 65 73 79 6e 74 61 78 20  each coresyntax 
21120 24 73 79 6e 74 61 78 20 7b 0a 20 20 20 20 6c 61  $syntax {.    la
21130 70 70 65 6e 64 20 6c 78 20 5b 6c 69 73 74 20 24  ppend lx [list $
21140 66 72 61 67 6d 65 6e 74 20 24 63 6f 72 65 73 79  fragment $coresy
21150 6e 74 61 78 20 30 5d 0a 20 20 7d 0a 7d 0a 68 64  ntax 0].  }.}.hd
21160 5f 6c 69 73 74 5f 6f 66 5f 6c 69 6e 6b 73 20 7b  _list_of_links {
21170 7d 20 32 32 35 20 5b 6c 73 6f 72 74 20 2d 69 6e  } 225 [lsort -in
21180 64 65 78 20 31 20 24 6c 78 5d 0a 0a 68 64 5f 70  dex 1 $lx]..hd_p
21190 75 74 73 6e 6c 20 22 3c 68 72 20 63 6c 61 73 73  utsnl "<hr class
211a0 3d 27 78 68 72 27 3e 22 0a 68 64 5f 70 75 74 73  ='xhr'>".hd_puts
211b0 6e 6c 20 22 3c 64 6c 3e 22 0a 66 6f 72 65 61 63  nl "<dl>".foreac
211c0 68 20 62 61 73 65 73 79 6e 74 61 78 20 5b 6c 73  h basesyntax [ls
211d0 6f 72 74 20 5b 61 72 72 61 79 20 6e 61 6d 65 73  ort [array names
211e0 20 63 6f 72 65 66 75 6e 63 73 65 74 5d 5d 20 7b   corefuncset]] {
211f0 0a 20 20 66 6f 72 65 61 63 68 20 7b 73 79 6e 74  .  foreach {synt
21200 61 78 20 6b 65 79 77 6f 72 64 73 20 64 65 73 63  ax keywords desc
21210 7d 20 24 63 6f 72 65 66 75 6e 63 73 65 74 28 24  } $corefuncset($
21220 62 61 73 65 73 79 6e 74 61 78 29 20 62 72 65 61  basesyntax) brea
21230 6b 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20  k.  regsub -all 
21240 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72  {\s+} [string tr
21250 69 6d 20 24 73 79 6e 74 61 78 5d 20 7b 3c 62 72  im $syntax] {<br
21260 20 2f 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72 65   />} syntax.  re
21270 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 28 28 5b 5e  gsub -all {\(([^
21280 2a 29 5d 2b 29 5c 29 7d 20 24 73 79 6e 74 61 78  *)]+)\)} $syntax
21290 20 7b 28 3c 69 3e 5c 31 3c 2f 69 3e 29 7d 20 73   {(<i>\1</i>)} s
212a0 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d  yntax.  regsub -
212b0 61 6c 6c 20 7b 2c 7d 20 24 73 79 6e 74 61 78 20  all {,} $syntax 
212c0 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20 73 79 6e 74 61  {</i>,<i>} synta
212d0 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20  x.  regsub -all 
212e0 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d 20  {<i>\.\.\.</i>} 
212f0 24 73 79 6e 74 61 78 20 7b 2e 2e 2e 7d 20 73 79  $syntax {...} sy
21300 6e 74 61 78 0a 20 20 72 65 67 65 78 70 20 7b 5e  ntax.  regexp {^
21310 5b 61 2d 7a 5d 2b 7d 20 24 62 61 73 65 73 79 6e  [a-z]+} $basesyn
21320 74 61 78 20 66 72 61 67 6d 65 6e 74 0a 20 20 69  tax fragment.  i
21330 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79  f {[llength $key
21340 77 6f 72 64 73 5d 3d 3d 30 7d 20 7b 0a 20 20 20  words]==0} {.   
21350 20 72 65 67 65 78 70 20 7b 5b 61 2d 7a 5f 5d 2b   regexp {[a-z_]+
21360 7d 20 24 73 79 6e 74 61 78 20 6e 61 6d 65 0a 20  } $syntax name. 
21370 20 20 20 68 64 5f 66 72 61 67 6d 65 6e 74 20 24     hd_fragment $
21380 6e 61 6d 65 20 2a 24 6e 61 6d 65 20 22 24 7b 6e  name *$name "${n
21390 61 6d 65 7d 28 29 20 53 51 4c 20 66 75 6e 63 74  ame}() SQL funct
213a0 69 6f 6e 22 0a 20 20 7d 20 65 6c 73 65 20 7b 0a  ion".  } else {.
213b0 20 20 20 20 73 65 74 20 66 72 61 67 6e 61 6d 65      set fragname
213c0 20 5b 6c 69 6e 64 65 78 20 24 6b 65 79 77 6f 72   [lindex $keywor
213d0 64 73 20 30 5d 0a 20 20 20 20 72 65 67 73 75 62  ds 0].    regsub
213e0 20 2d 61 6c 6c 20 7b 5b 5e 61 2d 7a 5d 7d 20 24   -all {[^a-z]} $
213f0 66 72 61 67 6e 61 6d 65 20 7b 7d 20 66 72 61 67  fragname {} frag
21400 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61 67  name.    hd_frag
21410 6d 65 6e 74 20 24 66 72 61 67 6e 61 6d 65 0a 20  ment $fragname. 
21420 20 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f     eval hd_keywo
21430 72 64 73 20 5b 73 74 72 69 6e 67 20 6d 61 70 20  rds [string map 
21440 7b 5c 6e 20 7b 20 7d 7d 20 24 6b 65 79 77 6f 72  {\n { }} $keywor
21450 64 73 5d 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74  ds].  }.  hd_put
21460 73 20 22 3c 64 74 3e 3c 70 3e 3c 62 3e 24 73 79  s "<dt><p><b>$sy
21470 6e 74 61 78 3c 2f 62 3e 3c 2f 64 74 3e 22 0a 20  ntax</b></dt>". 
21480 20 68 64 5f 72 65 73 6f 6c 76 65 20 22 3c 64 64   hd_resolve "<dd
21490 3e 3c 70 3e 24 64 65 73 63 3c 2f 64 64 3e 5c 6e  ><p>$desc</dd>\n
214a0 22 0a 7d 0a 68 64 5f 70 75 74 73 6e 6c 20 22 3c  ".}.hd_putsnl "<
214b0 2f 64 6c 3e 22 0a 0a 23 23 23 23 23 23 23 23 23  /dl>"..#########
214c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
214d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
214e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
214f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21500 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 49 4e  #####.Section IN
21510 53 45 52 54 20 69 6e 73 65 72 74 20 7b 49 4e 53  SERT insert {INS
21520 45 52 54 20 2a 49 4e 53 45 52 54 73 7d 0a 0a 52  ERT *INSERTs}..R
21530 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
21540 61 67 72 61 6d 20 69 6e 73 65 72 74 2d 73 74 6d  agram insert-stm
21550 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  t.</tcl>..<p>The
21560 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
21570 74 20 63 6f 6d 65 73 20 69 6e 20 74 68 72 65 65  t comes in three
21580 20 62 61 73 69 63 20 66 6f 72 6d 73 2e 20 20 0a   basic forms.  .
21590 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 54 68 65  <ul>.<li><p>^The
215a0 20 66 69 72 73 74 20 66 6f 72 6d 20 28 77 69 74   first form (wit
215b0 68 20 74 68 65 20 22 56 41 4c 55 45 53 22 20 6b  h the "VALUES" k
215c0 65 79 77 6f 72 64 29 20 63 72 65 61 74 65 73 20  eyword) creates 
215d0 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 6e 65 77 20  one or more.new 
215e0 72 6f 77 73 20 69 6e 0a 61 6e 20 65 78 69 73 74  rows in.an exist
215f0 69 6e 67 20 74 61 62 6c 65 2e 20 5e 49 66 20 74  ing table. ^If t
21600 68 65 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d  he <yyterm>colum
21610 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20  n-name</yyterm> 
21620 6c 69 73 74 20 61 66 74 65 72 0a 3c 79 79 74 65  list after.<yyte
21630 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79  rm>table-name</y
21640 79 74 65 72 6d 3e 20 69 73 20 6f 6d 69 74 74 65  yterm> is omitte
21650 64 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65  d then the numbe
21660 72 0a 6f 66 20 76 61 6c 75 65 73 20 69 6e 73 65  r.of values inse
21670 72 74 65 64 20 69 6e 74 6f 20 65 61 63 68 20 72  rted into each r
21680 6f 77 0a 6d 75 73 74 20 62 65 20 74 68 65 20 73  ow.must be the s
21690 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d 62 65  ame as the numbe
216a0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
216b0 74 68 65 20 74 61 62 6c 65 2e 20 5e 49 6e 20 74  the table. ^In t
216c0 68 69 73 20 63 61 73 65 0a 74 68 65 20 72 65 73  his case.the res
216d0 75 6c 74 20 6f 66 20 65 76 61 6c 75 61 74 69 6e  ult of evaluatin
216e0 67 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  g the left-most 
216f0 65 78 70 72 65 73 73 69 6f 6e 20 66 72 6f 6d 20  expression from 
21700 65 61 63 68 20 74 65 72 6d 20 6f 66 0a 74 68 65  each term of.the
21710 20 56 41 4c 55 45 53 20 6c 69 73 74 20 69 73 20   VALUES list is 
21720 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68  inserted into th
21730 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75  e left-most colu
21740 6d 6e 20 6f 66 20 65 61 63 68 20 6e 65 77 20 72  mn of each new r
21750 6f 77 2c 0a 61 6e 64 20 73 6f 20 66 6f 72 74 68  ow,.and so forth
21760 20 66 6f 72 20 65 61 63 68 20 73 75 62 73 65 71   for each subseq
21770 75 65 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 2e  uent expression.
21780 20 5e 49 66 20 61 20 3c 79 79 74 65 72 6d 3e 63   ^If a <yyterm>c
21790 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65  olumn-name</yyte
217a0 72 6d 3e 0a 6c 69 73 74 20 69 73 20 73 70 65 63  rm>.list is spec
217b0 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20  ified, then the 
217c0 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73  number of values
217d0 20 69 6e 20 65 61 63 68 20 74 65 72 6d 20 6f 66   in each term of
217e0 20 74 68 65 0a 56 41 4c 55 45 20 6c 69 73 74 20   the.VALUE list 
217f0 6d 75 73 74 20 6d 61 74 63 68 20 74 68 65 20 6e  must match the n
21800 75 6d 62 65 72 20 6f 66 0a 73 70 65 63 69 66 69  umber of.specifi
21810 65 64 20 63 6f 6c 75 6d 6e 73 2e 20 5e 45 61 63  ed columns. ^Eac
21820 68 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 63  h of the named c
21830 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6e 65  olumns of the ne
21840 77 20 72 6f 77 20 69 73 20 70 6f 70 75 6c 61 74  w row is populat
21850 65 64 0a 77 69 74 68 20 74 68 65 20 72 65 73 75  ed.with the resu
21860 6c 74 73 20 6f 66 20 65 76 61 6c 75 61 74 69 6e  lts of evaluatin
21870 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  g the correspond
21880 69 6e 67 20 56 41 4c 55 45 53 20 65 78 70 72 65  ing VALUES expre
21890 73 73 69 6f 6e 2e 20 5e 54 61 62 6c 65 0a 63 6f  ssion. ^Table.co
218a0 6c 75 6d 6e 73 20 74 68 61 74 20 64 6f 20 6e 6f  lumns that do no
218b0 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20  t appear in the 
218c0 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 61 72 65 20  column list are 
218d0 70 6f 70 75 6c 61 74 65 64 20 77 69 74 68 20 74  populated with t
218e0 68 65 20 0a 5b 64 65 66 61 75 6c 74 20 63 6f 6c  he .[default col
218f0 75 6d 6e 20 76 61 6c 75 65 5d 20 28 73 70 65 63  umn value] (spec
21900 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
21910 20 74 68 65 20 5b 43 52 45 41 54 45 20 54 41 42   the [CREATE TAB
21920 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 29 2c 20  LE] statement), 
21930 6f 72 0a 77 69 74 68 20 4e 55 4c 4c 20 69 66 20  or.with NULL if 
21940 6e 6f 20 5b 64 65 66 61 75 6c 74 20 76 61 6c 75  no [default valu
21950 65 5d 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  e] is specified.
21960 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 73 65 63  ..<li><p>The sec
21970 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68 65 20  ond form of the 
21980 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
21990 20 63 6f 6e 74 61 69 6e 73 20 61 20 5b 53 45 4c   contains a [SEL
219a0 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 0a 69  ECT] statement.i
219b0 6e 73 74 65 61 64 20 6f 66 20 61 20 56 41 4c 55  nstead of a VALU
219c0 45 53 20 63 6c 61 75 73 65 2e 20 5e 41 20 6e 65  ES clause. ^A ne
219d0 77 20 65 6e 74 72 79 20 69 73 20 69 6e 73 65 72  w entry is inser
219e0 74 65 64 20 69 6e 74 6f 20 74 68 65 20 74 61 62  ted into the tab
219f0 6c 65 20 66 6f 72 20 65 61 63 68 0a 72 6f 77 20  le for each.row 
21a00 6f 66 20 64 61 74 61 20 72 65 74 75 72 6e 65 64  of data returned
21a10 20 62 79 20 65 78 65 63 75 74 69 6e 67 20 74 68   by executing th
21a20 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
21a30 6e 74 2e 20 5e 49 66 20 61 20 63 6f 6c 75 6d 6e  nt. ^If a column
21a40 2d 6c 69 73 74 20 69 73 0a 73 70 65 63 69 66 69  -list is.specifi
21a50 65 64 2c 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ed, the number o
21a60 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
21a70 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 53   result of the S
21a80 45 4c 45 43 54 20 6d 75 73 74 20 62 65 20 74 68  ELECT must be th
21a90 65 20 73 61 6d 65 0a 61 73 20 74 68 65 20 6e 75  e same.as the nu
21aa0 6d 62 65 72 20 6f 66 20 69 74 65 6d 73 20 69 6e  mber of items in
21ab0 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74   the column-list
21ac0 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66  . ^Otherwise, if
21ad0 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20   no column-list 
21ae0 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74 68  is.specified, th
21af0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
21b00 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c  mns in the resul
21b10 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20  t of the SELECT 
21b20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65  must be the same
21b30 0a 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .as the number o
21b40 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
21b50 20 74 61 62 6c 65 2e 20 5e 41 6e 79 20 53 45 4c   table. ^Any SEL
21b60 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 69  ECT statement, i
21b70 6e 63 6c 75 64 69 6e 67 0a 5b 63 6f 6d 70 6f 75  ncluding.[compou
21b80 6e 64 20 53 45 4c 45 43 54 73 5d 20 61 6e 64 20  nd SELECTs] and 
21b90 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
21ba0 73 20 77 69 74 68 20 5b 4f 52 44 45 52 20 42 59  s with [ORDER BY
21bb0 5d 20 61 6e 64 2f 6f 72 20 5b 4c 49 4d 49 54 5d  ] and/or [LIMIT]
21bc0 20 63 6c 61 75 73 65 73 2c 20 0a 6d 61 79 20 62   clauses, .may b
21bd0 65 20 75 73 65 64 20 69 6e 20 61 6e 20 49 4e 53  e used in an INS
21be0 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 66  ERT statement of
21bf0 20 74 68 69 73 20 66 6f 72 6d 2e 0a 0a 3c 6c 69   this form...<li
21c00 3e 3c 70 3e 54 68 65 20 74 68 69 72 64 20 66 6f  ><p>The third fo
21c10 72 6d 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20  rm of an INSERT 
21c20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 77 69 74  statement is wit
21c30 68 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53  h DEFAULT VALUES
21c40 2e 0a 5e 28 54 68 65 20 49 4e 53 45 52 54 20 2e  ..^(The INSERT .
21c50 2e 2e 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45  .. DEFAULT VALUE
21c60 53 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 73 65  S statement inse
21c70 72 74 73 20 61 20 73 69 6e 67 6c 65 20 6e 65 77  rts a single new
21c80 20 72 6f 77 20 69 6e 74 6f 20 74 68 65 0a 6e 61   row into the.na
21c90 6d 65 64 20 74 61 62 6c 65 2e 29 5e 20 5e 45 61  med table.)^ ^Ea
21ca0 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  ch column of the
21cb0 20 6e 65 77 20 72 6f 77 20 69 73 20 70 6f 70 75   new row is popu
21cc0 6c 61 74 65 64 20 77 69 74 68 20 69 74 73 20 0a  lated with its .
21cd0 5b 64 65 66 61 75 6c 74 20 76 61 6c 75 65 5d 2c  [default value],
21ce0 20 6f 72 20 77 69 74 68 20 61 20 4e 55 4c 4c 20   or with a NULL 
21cf0 69 66 20 6e 6f 20 64 65 66 61 75 6c 74 20 76 61  if no default va
21d00 6c 75 65 20 69 73 20 73 70 65 63 69 66 69 65 64  lue is specified
21d10 20 0a 61 73 20 70 61 72 74 20 6f 66 20 74 68 65   .as part of the
21d20 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69   column definiti
21d30 6f 6e 20 69 6e 20 74 68 65 20 5b 43 52 45 41 54  on in the [CREAT
21d40 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65  E TABLE] stateme
21d50 6e 74 2e 0a 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e  nt...</ul>..<p>^
21d60 54 68 65 20 22 52 45 50 4c 41 43 45 22 20 61 6e  The "REPLACE" an
21d70 64 20 22 49 4e 53 45 52 54 20 4f 52 20 3c 69 3e  d "INSERT OR <i>
21d80 61 63 74 69 6f 6e 3c 2f 69 3e 22 20 66 6f 72 6d  action</i>" form
21d90 73 20 73 70 65 63 69 66 79 20 61 6e 20 61 6c 74  s specify an alt
21da0 65 72 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72 61  ernative.constra
21db0 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  int conflict res
21dc0 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
21dd0 6d 20 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20  m to use during 
21de0 74 68 69 73 20 6f 6e 65 20 49 4e 53 45 52 54 20  this one INSERT 
21df0 63 6f 6d 6d 61 6e 64 2e 0a 53 65 65 20 74 68 65  command..See the
21e00 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 20   section titled 
21e10 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f  [ON CONFLICT] fo
21e20 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
21e30 6f 72 6d 61 74 69 6f 6e 2e 0a 46 6f 72 20 63 6f  ormation..For co
21e40 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
21e50 20 4d 79 53 51 4c 2c 20 5e 74 68 65 20 70 61 72   MySQL, ^the par
21e60 73 65 72 20 61 6c 6c 6f 77 73 20 74 68 65 20 75  ser allows the u
21e70 73 65 20 6f 66 20 74 68 65 0a 73 69 6e 67 6c 65  se of the.single
21e80 20 6b 65 79 77 6f 72 64 20 3c 61 20 68 72 65 66   keyword <a href
21e90 3d 22 6c 61 6e 67 5f 72 65 70 6c 61 63 65 2e 68  ="lang_replace.h
21ea0 74 6d 6c 22 3e 52 45 50 4c 41 43 45 3c 2f 61 3e  tml">REPLACE</a>
21eb0 20 61 73 20 61 6e 20 0a 61 6c 69 61 73 20 66 6f   as an .alias fo
21ec0 72 20 22 49 4e 53 45 52 54 20 4f 52 20 52 45 50  r "INSERT OR REP
21ed0 4c 41 43 45 22 2e 0a 0a 3c 70 3e 5e 28 54 68 65  LACE"...<p>^(The
21ee0 20 6f 70 74 69 6f 6e 61 6c 20 22 3c 69 3e 73 63   optional "<i>sc
21ef0 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e  hema-name</i><b>
21f00 2e 3c 2f 62 3e 22 20 70 72 65 66 69 78 20 6f 6e  .</b>" prefix on
21f10 20 74 68 65 20 0a 3c 79 79 74 65 72 6d 3e 74 61   the .<yyterm>ta
21f20 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  ble-name</yyterm
21f30 3e 0a 69 73 20 73 75 70 70 6f 72 74 65 64 20 66  >.is supported f
21f40 6f 72 20 74 6f 70 2d 6c 65 76 65 6c 20 49 4e 53  or top-level INS
21f50 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6f  ERT statements o
21f60 6e 6c 79 2e 29 5e 20 20 5e 54 68 65 20 74 61 62  nly.)^  ^The tab
21f70 6c 65 20 6e 61 6d 65 20 6d 75 73 74 20 62 65 0a  le name must be.
21f80 75 6e 71 75 61 6c 69 66 69 65 64 20 66 6f 72 20  unqualified for 
21f90 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
21fa0 73 20 74 68 61 74 20 6f 63 63 75 72 20 77 69 74  s that occur wit
21fb0 68 69 6e 20 5b 43 52 45 41 54 45 20 54 52 49 47  hin [CREATE TRIG
21fc0 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e  GER] statements.
21fd0 0a 5e 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65  .^Similarly, the
21fe0 20 22 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53   "DEFAULT VALUES
21ff0 22 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 49 4e  " form of the IN
22000 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 69  SERT statement i
22010 73 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72 0a  s supported for.
22020 74 6f 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54  top-level INSERT
22030 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79   statements only
22040 20 61 6e 64 20 6e 6f 74 20 66 6f 72 20 49 4e 53   and not for INS
22050 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77  ERT statements w
22060 69 74 68 69 6e 0a 74 72 69 67 67 65 72 73 2e 0a  ithin.triggers..
22070 3c 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  <p>..<tcl>.#####
22080 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22090 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
220a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
220b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
220c0 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
220d0 6e 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  n {ON CONFLICT c
220e0 6c 61 75 73 65 7d 20 63 6f 6e 66 6c 69 63 74 20  lause} conflict 
220f0 7b 7b 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73  {{conflict claus
22100 65 7d 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 7d  e} {ON CONFLICT}
22110 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  }..RecursiveBubb
22120 6c 65 44 69 61 67 72 61 6d 20 63 6f 6e 66 6c 69  leDiagram confli
22130 63 74 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e  ct-clause.</tcl>
22140 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46  ..<p>The ON CONF
22150 4c 49 43 54 20 63 6c 61 75 73 65 20 69 73 20 6e  LICT clause is n
22160 6f 74 20 61 20 73 65 70 61 72 61 74 65 20 53 51  ot a separate SQ
22170 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 49 74 20 69  L command.  It i
22180 73 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64 61 72 64  s a.non-standard
22190 20 63 6c 61 75 73 65 20 74 68 61 74 20 63 61 6e   clause that can
221a0 20 61 70 70 65 61 72 20 69 6e 20 6d 61 6e 79 20   appear in many 
221b0 6f 74 68 65 72 20 53 51 4c 20 63 6f 6d 6d 61 6e  other SQL comman
221c0 64 73 2e 0a 49 74 20 69 73 20 67 69 76 65 6e 20  ds..It is given 
221d0 69 74 73 20 6f 77 6e 20 73 65 63 74 69 6f 6e 20  its own section 
221e0 69 6e 20 74 68 69 73 20 64 6f 63 75 6d 65 6e 74  in this document
221f0 20 62 65 63 61 75 73 65 20 69 74 20 69 73 20 6e   because it is n
22200 6f 74 0a 70 61 72 74 20 6f 66 20 73 74 61 6e 64  ot.part of stand
22210 61 72 64 20 53 51 4c 20 61 6e 64 20 74 68 65 72  ard SQL and ther
22220 65 66 6f 72 65 20 6d 69 67 68 74 20 6e 6f 74 20  efore might not 
22230 62 65 20 66 61 6d 69 6c 69 61 72 2e 3c 2f 70 3e  be familiar.</p>
22240 0a 0a 3c 70 3e 5e 54 68 65 20 73 79 6e 74 61 78  ..<p>^The syntax
22250 20 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46   for the ON CONF
22260 4c 49 43 54 20 63 6c 61 75 73 65 20 69 73 20 61  LICT clause is a
22270 73 20 73 68 6f 77 6e 20 61 62 6f 76 65 20 66 6f  s shown above fo
22280 72 0a 74 68 65 20 43 52 45 41 54 45 20 54 41 42  r.the CREATE TAB
22290 4c 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 46 6f  LE command.  ^Fo
222a0 72 20 74 68 65 20 49 4e 53 45 52 54 20 61 6e 64  r the INSERT and
222b0 0a 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64 73  .UPDATE commands
222c0 2c 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22  , the keywords "
222d0 4f 4e 20 43 4f 4e 46 4c 49 43 54 22 20 61 72 65  ON CONFLICT" are
222e0 20 72 65 70 6c 61 63 65 64 20 62 79 20 22 4f 52   replaced by "OR
222f0 22 20 73 6f 20 74 68 61 74 0a 74 68 65 20 73 79  " so that.the sy
22300 6e 74 61 78 20 72 65 61 64 73 20 6d 6f 72 65 20  ntax reads more 
22310 6e 61 74 75 72 61 6c 6c 79 2e 20 20 46 6f 72 20  naturally.  For 
22320 65 78 61 6d 70 6c 65 2c 20 69 6e 73 74 65 61 64  example, instead
22330 20 6f 66 0a 22 49 4e 53 45 52 54 20 4f 4e 20 43   of."INSERT ON C
22340 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45 22 20  ONFLICT IGNORE" 
22350 77 65 20 68 61 76 65 20 22 49 4e 53 45 52 54 20  we have "INSERT 
22360 4f 52 20 49 47 4e 4f 52 45 22 2e 0a 54 68 65 20  OR IGNORE"..The 
22370 6b 65 79 77 6f 72 64 73 20 63 68 61 6e 67 65 20  keywords change 
22380 62 75 74 20 74 68 65 20 6d 65 61 6e 69 6e 67 20  but the meaning 
22390 6f 66 20 74 68 65 20 63 6c 61 75 73 65 20 69 73  of the clause is
223a0 20 74 68 65 20 73 61 6d 65 0a 65 69 74 68 65 72   the same.either
223b0 20 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68   way.</p>..<p>Th
223c0 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c  e ON CONFLICT cl
223d0 61 75 73 65 20 61 70 70 6c 69 65 73 20 74 6f 20  ause applies to 
223e0 5b 55 4e 49 51 55 45 5d 2c 20 5b 4e 4f 54 20 4e  [UNIQUE], [NOT N
223f0 55 4c 4c 5d 2c 0a 5b 43 48 45 43 4b 5d 2c 20 61  ULL],.[CHECK], a
22400 6e 64 20 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d  nd [PRIMARY KEY]
22410 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 54 68   constraints..Th
22420 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  e ON CONFLICT al
22430 67 6f 72 69 74 68 6d 20 64 6f 65 73 20 6e 6f 74  gorithm does not
22440 0a 61 70 70 6c 79 20 74 6f 20 5b 46 4f 52 45 49  .apply to [FOREI
22450 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  GN KEY constrain
22460 74 73 5d 2e 0a 54 68 65 72 65 20 61 72 65 20 66  ts]..There are f
22470 69 76 65 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ive conflict res
22480 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
22490 6d 20 63 68 6f 69 63 65 73 3a 0a 52 4f 4c 4c 42  m choices:.ROLLB
224a0 41 43 4b 2c 20 41 42 4f 52 54 2c 20 46 41 49 4c  ACK, ABORT, FAIL
224b0 2c 20 49 47 4e 4f 52 45 2c 20 61 6e 64 20 52 45  , IGNORE, and RE
224c0 50 4c 41 43 45 2e 0a 5e 54 68 65 20 64 65 66 61  PLACE..^The defa
224d0 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ult conflict res
224e0 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
224f0 6d 20 69 73 20 41 42 4f 52 54 2e 20 20 54 68 69  m is ABORT.  Thi
22500 73 0a 69 73 20 77 68 61 74 20 74 68 65 79 20 6d  s.is what they m
22510 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c  ean:</p>..<dl>.<
22520 64 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43 4b 3c 2f  dt><b>ROLLBACK</
22530 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20  b></dt>.<dd><p> 
22540 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61  ^When an applica
22550 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  ble constraint v
22560 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
22570 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 72 65   the ROLLBACK.re
22580 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
22590 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63 75  hm aborts the cu
225a0 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d  rrent SQL statem
225b0 65 6e 74 20 77 69 74 68 0a 61 6e 20 53 51 4c 49  ent with.an SQLI
225c0 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72  TE_CONSTRAINT er
225d0 72 6f 72 20 61 6e 64 20 72 6f 6c 6c 73 20 62 61  ror and rolls ba
225e0 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  ck the current t
225f0 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 49 66 20  ransaction..^If 
22600 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
22610 73 0a 61 63 74 69 76 65 20 28 6f 74 68 65 72 20  s.active (other 
22620 74 68 61 6e 20 74 68 65 20 69 6d 70 6c 69 65 64  than the implied
22630 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 61   transaction tha
22640 74 20 69 73 20 63 72 65 61 74 65 64 20 6f 6e 20  t is created on 
22650 65 76 65 72 79 0a 63 6f 6d 6d 61 6e 64 29 20 74  every.command) t
22660 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  hen the ROLLBACK
22670 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
22680 72 69 74 68 6d 20 77 6f 72 6b 73 20 74 68 65 20  rithm works the 
22690 73 61 6d 65 20 61 73 20 74 68 65 0a 41 42 4f 52  same as the.ABOR
226a0 54 20 61 6c 67 6f 72 69 74 68 6d 2e 3c 2f 70 3e  T algorithm.</p>
226b0 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 41 42  </dd>..<dt><b>AB
226c0 4f 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  ORT</b></dt>.<dd
226d0 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70  ><p> ^When an ap
226e0 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61  plicable constra
226f0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
22700 63 75 72 73 2c 20 74 68 65 20 41 42 4f 52 54 0a  curs, the ABORT.
22710 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
22720 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20  ithm aborts the 
22730 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74  current SQL stat
22740 65 6d 65 6e 74 0a 77 69 74 68 20 61 6e 20 53 51  ement.with an SQ
22750 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
22760 65 72 72 6f 72 20 61 6e 64 20 62 61 63 6b 73 20  error and backs 
22770 6f 75 74 20 61 6e 79 20 63 68 61 6e 67 65 73 0a  out any changes.
22780 6d 61 64 65 20 62 79 20 74 68 65 20 63 75 72 72  made by the curr
22790 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ent SQL statemen
227a0 74 3b 20 62 75 74 20 63 68 61 6e 67 65 73 20 63  t; but changes c
227b0 61 75 73 65 64 0a 62 79 20 70 72 69 6f 72 20 53  aused.by prior S
227c0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  QL statements wi
227d0 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 74 72  thin the same tr
227e0 61 6e 73 61 63 74 69 6f 6e 20 61 72 65 20 70 72  ansaction are pr
227f0 65 73 65 72 76 65 64 20 61 6e 64 20 74 68 65 0a  eserved and the.
22800 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61  transaction rema
22810 69 6e 73 20 61 63 74 69 76 65 2e 0a 54 68 69 73  ins active..This
22820 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20   is the default 
22830 62 65 68 61 76 69 6f 72 20 61 6e 64 20 74 68 65  behavior and the
22840 20 62 65 68 61 76 69 6f 72 20 73 70 65 63 69 66   behavior specif
22850 69 65 64 20 62 79 20 74 68 65 20 53 51 4c 0a 73  ied by the SQL.s
22860 74 61 6e 64 61 72 64 2e 3c 2f 70 3e 3c 2f 64 64  tandard.</p></dd
22870 3e 0a 0a 3c 64 74 3e 3c 62 3e 46 41 49 4c 3c 2f  >..<dt><b>FAIL</
22880 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20  b></dt>.<dd><p> 
22890 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61  ^When an applica
228a0 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  ble constraint v
228b0 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
228c0 20 74 68 65 20 46 41 49 4c 0a 72 65 73 6f 6c 75   the FAIL.resolu
228d0 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61  tion algorithm a
228e0 62 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  borts the curren
228f0 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  t SQL statement 
22900 77 69 74 68 20 61 6e 0a 53 51 4c 49 54 45 5f 43  with an.SQLITE_C
22910 4f 4e 53 54 52 41 49 4e 54 20 65 72 72 6f 72 2e  ONSTRAINT error.
22920 20 20 5e 42 75 74 20 74 68 65 20 46 41 49 4c 20    ^But the FAIL 
22930 72 65 73 6f 6c 75 74 69 6f 6e 20 64 6f 65 73 20  resolution does 
22940 6e 6f 74 0a 62 61 63 6b 20 6f 75 74 20 70 72 69  not.back out pri
22950 6f 72 20 63 68 61 6e 67 65 73 20 6f 66 20 74 68  or changes of th
22960 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
22970 74 68 61 74 20 66 61 69 6c 65 64 20 6e 6f 72 20  that failed nor 
22980 64 6f 65 73 0a 69 74 20 65 6e 64 20 74 68 65 20  does.it end the 
22990 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 46 6f  transaction..^Fo
229a0 72 20 65 78 61 6d 70 6c 65 2c 20 69 66 20 61 6e  r example, if an
229b0 20 55 50 44 41 54 45 0a 73 74 61 74 65 6d 65 6e   UPDATE.statemen
229c0 74 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 61 20  t encountered a 
229d0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
229e0 74 69 6f 6e 20 6f 6e 20 74 68 65 20 31 30 30 74  tion on the 100t
229f0 68 20 72 6f 77 20 74 68 61 74 0a 69 74 20 61 74  h row that.it at
22a00 74 65 6d 70 74 73 20 74 6f 20 75 70 64 61 74 65  tempts to update
22a10 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72 73 74  , then the first
22a20 20 39 39 20 72 6f 77 20 63 68 61 6e 67 65 73 20   99 row changes 
22a30 61 72 65 20 70 72 65 73 65 72 76 65 64 0a 62 75  are preserved.bu
22a40 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 6f 77  t changes to row
22a50 73 20 31 30 30 20 61 6e 64 20 62 65 79 6f 6e 64  s 100 and beyond
22a60 20 6e 65 76 65 72 20 6f 63 63 75 72 2e 3c 2f 70   never occur.</p
22a70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 49  ></dd>..<dt><b>I
22a80 47 4e 4f 52 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c  GNORE</b></dt>.<
22a90 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20  dd><p> ^When an 
22aa0 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74  applicable const
22ab0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
22ac0 6f 63 63 75 72 73 2c 20 0a 74 68 65 20 49 47 4e  occurs, .the IGN
22ad0 4f 52 45 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ORE resolution a
22ae0 6c 67 6f 72 69 74 68 6d 20 73 6b 69 70 73 20 74  lgorithm skips t
22af0 68 65 20 6f 6e 65 20 72 6f 77 20 74 68 61 74 20  he one row that 
22b00 63 6f 6e 74 61 69 6e 73 0a 74 68 65 20 63 6f 6e  contains.the con
22b10 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
22b20 6e 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20  n and continues 
22b30 70 72 6f 63 65 73 73 69 6e 67 20 73 75 62 73 65  processing subse
22b40 71 75 65 6e 74 20 72 6f 77 73 0a 6f 66 20 74 68  quent rows.of th
22b50 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
22b60 61 73 20 69 66 20 6e 6f 74 68 69 6e 67 20 77 65  as if nothing we
22b70 6e 74 20 77 72 6f 6e 67 2e 0a 4f 74 68 65 72 20  nt wrong..Other 
22b80 72 6f 77 73 20 62 65 66 6f 72 65 20 61 6e 64 20  rows before and 
22b90 61 66 74 65 72 20 74 68 65 20 72 6f 77 20 74 68  after the row th
22ba0 61 74 0a 63 6f 6e 74 61 69 6e 65 64 20 74 68 65  at.contained the
22bb0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
22bc0 61 74 69 6f 6e 20 61 72 65 20 69 6e 73 65 72 74  ation are insert
22bd0 65 64 20 6f 72 20 75 70 64 61 74 65 64 0a 6e 6f  ed or updated.no
22be0 72 6d 61 6c 6c 79 2e 20 5e 4e 6f 20 65 72 72 6f  rmally. ^No erro
22bf0 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 77 68  r is returned wh
22c00 65 6e 20 74 68 65 20 49 47 4e 4f 52 45 20 63 6f  en the IGNORE co
22c10 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
22c20 6e 0a 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75  n.algorithm is u
22c30 73 65 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c  sed.</p></dd>..<
22c40 64 74 3e 3c 62 3e 52 45 50 4c 41 43 45 3c 2f 62  dt><b>REPLACE</b
22c50 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e  ></dt>.<dd><p> ^
22c60 57 68 65 6e 20 61 20 5b 55 4e 49 51 55 45 5d 20  When a [UNIQUE] 
22c70 6f 72 20 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d  or [PRIMARY KEY]
22c80 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
22c90 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 0a 74  ation occurs, .t
22ca0 68 65 20 52 45 50 4c 41 43 45 20 61 6c 67 6f 72  he REPLACE algor
22cb0 69 74 68 6d 0a 64 65 6c 65 74 65 73 20 70 72 65  ithm.deletes pre
22cc0 2d 65 78 69 73 74 69 6e 67 20 72 6f 77 73 20 74  -existing rows t
22cd0 68 61 74 20 61 72 65 20 63 61 75 73 69 6e 67 20  hat are causing 
22ce0 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  the constraint v
22cf0 69 6f 6c 61 74 69 6f 6e 0a 70 72 69 6f 72 20 74  iolation.prior t
22d00 6f 20 69 6e 73 65 72 74 69 6e 67 20 6f 72 20 75  o inserting or u
22d10 70 64 61 74 69 6e 67 20 74 68 65 20 63 75 72 72  pdating the curr
22d20 65 6e 74 20 72 6f 77 20 61 6e 64 20 74 68 65 20  ent row and the 
22d30 63 6f 6d 6d 61 6e 64 20 63 6f 6e 74 69 6e 75 65  command continue
22d40 73 20 0a 65 78 65 63 75 74 69 6e 67 20 6e 6f 72  s .executing nor
22d50 6d 61 6c 6c 79 2e 0a 5e 49 66 20 61 20 5b 4e 4f  mally..^If a [NO
22d60 54 20 4e 55 4c 4c 5d 20 63 6f 6e 73 74 72 61 69  T NULL] constrai
22d70 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
22d80 75 72 73 2c 20 74 68 65 20 52 45 50 4c 41 43 45  urs, the REPLACE
22d90 20 63 6f 6e 66 6c 69 63 74 0a 72 65 73 6f 6c 75   conflict.resolu
22da0 74 69 6f 6e 20 72 65 70 6c 61 63 65 73 20 74 68  tion replaces th
22db0 65 20 4e 55 4c 4c 20 76 61 6c 75 65 20 77 69 74  e NULL value wit
22dc0 68 0a 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  h.the default va
22dd0 6c 75 65 20 66 6f 72 20 74 68 61 74 20 63 6f 6c  lue for that col
22de0 75 6d 6e 2c 20 6f 72 20 69 66 20 74 68 65 20 63  umn, or if the c
22df0 6f 6c 75 6d 6e 20 68 61 73 20 6e 6f 20 64 65 66  olumn has no def
22e00 61 75 6c 74 0a 76 61 6c 75 65 2c 20 74 68 65 6e  ault.value, then
22e10 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72   the ABORT algor
22e20 69 74 68 6d 20 69 73 20 75 73 65 64 2e 0a 5e 49  ithm is used..^I
22e30 66 20 61 20 5b 43 48 45 43 4b 5d 20 63 6f 6e 73  f a [CHECK] cons
22e40 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
22e50 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52 45 50   occurs, the REP
22e60 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65  LACE conflict re
22e70 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69 74  solution.algorit
22e80 68 6d 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20  hm always works 
22e90 6c 69 6b 65 20 41 42 4f 52 54 2e 3c 2f 70 3e 0a  like ABORT.</p>.
22ea0 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 52 45  .<p>^When the RE
22eb0 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72  PLACE conflict r
22ec0 65 73 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74 65  esolution strate
22ed0 67 79 20 64 65 6c 65 74 65 73 20 72 6f 77 73 20  gy deletes rows 
22ee0 69 6e 20 6f 72 64 65 72 20 74 6f 0a 73 61 74 69  in order to.sati
22ef0 73 66 79 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  sfy a constraint
22f00 2c 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  , [CREATE TRIGGE
22f10 52 20 7c 20 64 65 6c 65 74 65 20 74 72 69 67 67  R | delete trigg
22f20 65 72 73 5d 20 66 69 72 65 20 69 66 20 61 6e 64  ers] fire if and
22f30 20 6f 6e 6c 79 20 69 66 0a 5b 72 65 63 75 72 73   only if.[recurs
22f40 69 76 65 5f 74 72 69 67 67 65 72 73 20 70 72 61  ive_triggers pra
22f50 67 6d 61 20 7c 20 72 65 63 75 72 73 69 76 65 20  gma | recursive 
22f60 74 72 69 67 67 65 72 73 5d 20 61 72 65 20 65 6e  triggers] are en
22f70 61 62 6c 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  abled.</p>..<p>^
22f80 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 75 70 64  The [sqlite3_upd
22f90 61 74 65 5f 68 6f 6f 6b 20 7c 20 75 70 64 61 74  ate_hook | updat
22fa0 65 20 68 6f 6f 6b 5d 20 69 73 20 6e 6f 74 20 69  e hook] is not i
22fb0 6e 76 6f 6b 65 64 20 66 6f 72 20 72 6f 77 73 20  nvoked for rows 
22fc0 74 68 61 74 0a 61 72 65 20 64 65 6c 65 74 65 64  that.are deleted
22fd0 20 62 79 20 74 68 65 20 52 45 50 4c 41 43 45 20   by the REPLACE 
22fe0 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
22ff0 69 6f 6e 20 73 74 72 61 74 65 67 79 2e 20 20 5e  ion strategy.  ^
23000 4e 6f 72 20 64 6f 65 73 0a 52 45 50 4c 41 43 45  Nor does.REPLACE
23010 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 65 20 5b   increment the [
23020 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 20  sqlite3_changes 
23030 7c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  | change counter
23040 5d 2e 0a 54 68 65 20 65 78 63 65 70 74 69 6f 6e  ]..The exception
23050 61 6c 20 62 65 68 61 76 69 6f 72 73 20 64 65 66  al behaviors def
23060 69 6e 65 64 20 69 6e 20 74 68 69 73 20 70 61 72  ined in this par
23070 61 67 72 61 70 68 20 6d 69 67 68 74 20 63 68 61  agraph might cha
23080 6e 67 65 20 0a 69 6e 20 61 20 66 75 74 75 72 65  nge .in a future
23090 20 72 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a 3c 2f   release.</p>.</
230a0 64 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 61 6c 67  dl>..<p>^The alg
230b0 6f 72 69 74 68 6d 20 73 70 65 63 69 66 69 65 64  orithm specified
230c0 20 69 6e 20 74 68 65 20 4f 52 20 63 6c 61 75 73   in the OR claus
230d0 65 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f  e of an INSERT o
230e0 72 20 55 50 44 41 54 45 0a 6f 76 65 72 72 69 64  r UPDATE.overrid
230f0 65 73 20 61 6e 79 20 61 6c 67 6f 72 69 74 68 6d  es any algorithm
23100 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 61 20   specified in a 
23110 43 52 45 41 54 45 20 54 41 42 4c 45 2e 0a 5e 49  CREATE TABLE..^I
23120 66 20 6e 6f 20 61 6c 67 6f 72 69 74 68 6d 20 69  f no algorithm i
23130 73 20 73 70 65 63 69 66 69 65 64 20 61 6e 79 77  s specified anyw
23140 68 65 72 65 2c 20 74 68 65 20 41 42 4f 52 54 20  here, the ABORT 
23150 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65  algorithm is use
23160 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  d.</p>..<tcl>.##
23170 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23180 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23190 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
231a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
231b0 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
231c0 74 69 6f 6e 20 52 45 49 4e 44 45 58 20 72 65 69  tion REINDEX rei
231d0 6e 64 65 78 20 52 45 49 4e 44 45 58 0a 0a 52 65  ndex REINDEX..Re
231e0 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
231f0 67 72 61 6d 20 72 65 69 6e 64 65 78 2d 73 74 6d  gram reindex-stm
23200 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68  t.</tcl>..<p>^Th
23210 65 20 52 45 49 4e 44 45 58 20 63 6f 6d 6d 61 6e  e REINDEX comman
23220 64 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 6c  d is used to del
23230 65 74 65 20 61 6e 64 20 72 65 63 72 65 61 74 65  ete and recreate
23240 20 69 6e 64 69 63 65 73 20 66 72 6f 6d 20 73 63   indices from sc
23250 72 61 74 63 68 2e 0a 54 68 69 73 20 69 73 20 75  ratch..This is u
23260 73 65 66 75 6c 20 77 68 65 6e 20 74 68 65 20 64  seful when the d
23270 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 63  efinition of a c
23280 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
23290 65 20 68 61 73 20 63 68 61 6e 67 65 64 2e 0a 3c  e has changed..<
232a0 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  /p>..<p>^If the 
232b0 52 45 49 4e 44 45 58 20 6b 65 79 77 6f 72 64 20  REINDEX keyword 
232c0 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64 20  is not followed 
232d0 62 79 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73  by a collation-s
232e0 65 71 75 65 6e 63 65 20 6f 72 20 64 61 74 61 62  equence or datab
232f0 61 73 65 20 0a 6f 62 6a 65 63 74 20 69 64 65 6e  ase .object iden
23300 74 69 66 69 65 72 2c 20 74 68 65 6e 20 61 6c 6c  tifier, then all
23310 20 69 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c 20   indices in all 
23320 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
23330 65 73 20 61 72 65 20 72 65 62 75 69 6c 74 2e 0a  es are rebuilt..
23340 0a 3c 70 3e 5e 49 66 20 74 68 65 20 52 45 49 4e  .<p>^If the REIN
23350 44 45 58 20 6b 65 79 77 6f 72 64 20 69 73 20 66  DEX keyword is f
23360 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6c  ollowed by a col
23370 6c 61 74 69 6f 6e 2d 73 65 71 75 65 6e 63 65 20  lation-sequence 
23380 6e 61 6d 65 2c 20 74 68 65 6e 0a 61 6c 6c 20 69  name, then.all i
23390 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c 20 61 74  ndices in all at
233a0 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
233b0 20 74 68 61 74 20 75 73 65 20 74 68 65 20 6e 61   that use the na
233c0 6d 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  med collation se
233d0 71 75 65 6e 63 65 73 0a 61 72 65 20 72 65 63 72  quences.are recr
233e0 65 61 74 65 64 2e 20 0a 0a 3c 70 3e 5e 4f 72 2c  eated. ..<p>^Or,
233f0 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   if the argument
23400 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
23410 20 52 45 49 4e 44 45 58 20 69 64 65 6e 74 69 66   REINDEX identif
23420 69 65 73 20 61 20 73 70 65 63 69 66 69 63 20 0a  ies a specific .
23430 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2c 20  database table, 
23440 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73  then all indices
23450 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
23460 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
23470 61 72 65 20 72 65 62 75 69 6c 74 2e 20 0a 5e 49  are rebuilt. .^I
23480 66 20 69 74 20 69 64 65 6e 74 69 66 69 65 73 20  f it identifies 
23490 61 20 73 70 65 63 69 66 69 63 20 64 61 74 61 62  a specific datab
234a0 61 73 65 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  ase index, then 
234b0 6a 75 73 74 20 74 68 61 74 20 69 6e 64 65 78 20  just that index 
234c0 69 73 20 72 65 63 72 65 61 74 65 64 2e 0a 0a 3c  is recreated...<
234d0 70 3e 5e 46 6f 72 20 61 20 63 6f 6d 6d 61 6e 64  p>^For a command
234e0 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 52 45   of the form "RE
234f0 49 4e 44 45 58 20 3c 69 3e 6e 61 6d 65 3c 2f 69  INDEX <i>name</i
23500 3e 22 2c 20 61 20 6d 61 74 63 68 0a 61 67 61 69  >", a match.agai
23510 6e 73 74 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 6c  nst <yyterm>coll
23520 61 74 69 6f 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65  ation-name</yyte
23530 72 6d 3e 20 74 61 6b 65 73 20 70 72 65 63 65 64  rm> takes preced
23540 65 6e 63 65 20 6f 76 65 72 20 61 20 6d 61 74 63  ence over a matc
23550 68 0a 61 67 61 69 6e 73 74 20 3c 79 79 74 65 72  h.against <yyter
23560 6d 3e 69 6e 64 65 78 2d 6e 61 6d 65 3c 2f 79 79  m>index-name</yy
23570 74 65 72 6d 3e 20 6f 72 20 3c 79 79 74 65 72 6d  term> or <yyterm
23580 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74  >table-name</yyt
23590 65 72 6d 3e 2e 0a 54 68 69 73 20 61 6d 62 69 67  erm>..This ambig
235a0 75 69 74 79 20 69 6e 20 74 68 65 20 73 79 6e 74  uity in the synt
235b0 61 78 20 6d 61 79 20 62 65 20 61 76 6f 69 64 65  ax may be avoide
235c0 64 20 62 79 20 61 6c 77 61 79 73 20 73 70 65 63  d by always spec
235d0 69 66 79 69 6e 67 20 61 0a 3c 79 79 74 65 72 6d  ifying a.<yyterm
235e0 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79  >schema-name</yy
235f0 74 65 72 6d 3e 20 77 68 65 6e 20 72 65 69 6e 64  term> when reind
23600 65 78 69 6e 67 20 61 20 73 70 65 63 69 66 69 63  exing a specific
23610 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
23620 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
23630 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23640 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23650 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23670 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
23680 52 45 50 4c 41 43 45 20 72 65 70 6c 61 63 65 20  REPLACE replace 
23690 52 45 50 4c 41 43 45 0a 0a 3c 2f 74 63 6c 3e 0a  REPLACE..</tcl>.
236a0 0a 3c 70 3e 5e 54 68 65 20 52 45 50 4c 41 43 45  .<p>^The REPLACE
236b0 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 6e 20 61   command is an a
236c0 6c 69 61 73 20 66 6f 72 20 74 68 65 20 22 5b 4f  lias for the "[O
236d0 4e 20 43 4f 4e 46 4c 49 43 54 20 7c 20 49 4e 53  N CONFLICT | INS
236e0 45 52 54 20 4f 52 20 52 45 50 4c 41 43 45 5d 22  ERT OR REPLACE]"
236f0 0a 76 61 72 69 61 6e 74 20 6f 66 20 74 68 65 20  .variant of the 
23700 5b 49 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e 64  [INSERT] command
23710 2e 20 20 0a 54 68 69 73 20 61 6c 69 61 73 20 69  .  .This alias i
23720 73 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 63  s provided for c
23730 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 6f 74 68  ompatibility oth
23740 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65 20  er SQL database 
23750 65 6e 67 69 6e 65 73 2e 20 20 53 65 65 20 74 68  engines.  See th
23760 65 20 0a 5b 49 4e 53 45 52 54 5d 20 63 6f 6d 6d  e .[INSERT] comm
23770 61 6e 64 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  and documentatio
23780 6e 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  n for additional
23790 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70   information.</p
237a0 3e 20 20 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  >  ..<tcl>.#####
237b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
237c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
237d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
237e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
237f0 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
23800 6f 6e 20 7b 57 49 54 48 20 63 6c 61 75 73 65 7d  on {WITH clause}
23810 20 77 69 74 68 20 7b 7b 63 6f 6d 6d 6f 6e 20 74   with {{common t
23820 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
23830 7d 20 57 49 54 48 7d 0a 0a 52 65 63 75 72 73 69  } WITH}..Recursi
23840 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
23850 77 69 74 68 2d 63 6c 61 75 73 65 0a 3c 2f 74 63  with-clause.</tc
23860 6c 3e 0a 0a 3c 70 3e 43 6f 6d 6d 6f 6e 20 54 61  l>..<p>Common Ta
23870 62 6c 65 20 45 78 70 72 65 73 73 69 6f 6e 73 20  ble Expressions 
23880 6f 72 20 43 54 45 73 20 61 63 74 20 6c 69 6b 65  or CTEs act like
23890 20 74 65 6d 70 6f 72 61 72 79 20 5b 76 69 65 77   temporary [view
238a0 73 5d 20 74 68 61 74 20 65 78 69 73 74 0a 6f 6e  s] that exist.on
238b0 6c 79 20 66 6f 72 20 74 68 65 20 64 75 72 61 74  ly for the durat
238c0 69 6f 6e 20 6f 66 20 61 20 73 69 6e 67 6c 65 20  ion of a single 
238d0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  SQL statement.  
238e0 54 68 65 72 65 20 61 72 65 20 74 77 6f 20 6b 69  There are two ki
238f0 6e 64 73 20 6f 66 0a 63 6f 6d 6d 6f 6e 20 74 61  nds of.common ta
23900 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 3a  ble expressions:
23910 20 22 6f 72 64 69 6e 61 72 79 22 20 61 6e 64 20   "ordinary" and 
23920 22 72 65 63 75 72 73 69 76 65 22 2e 20 4f 72 64  "recursive". Ord
23930 69 6e 61 72 79 20 0a 63 6f 6d 6d 6f 6e 20 74 61  inary .common ta
23940 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ble expressions 
23950 61 72 65 20 68 65 6c 70 66 75 6c 20 66 6f 72 20  are helpful for 
23960 6d 61 6b 69 6e 67 0a 71 75 65 72 69 65 73 20 65  making.queries e
23970 61 73 69 65 72 20 74 6f 20 75 6e 64 65 72 73 74  asier to underst
23980 61 6e 64 20 62 79 20 66 61 63 74 6f 72 69 6e 67  and by factoring
23990 0a 73 75 62 71 75 65 72 69 65 73 20 6f 75 74 20  .subqueries out 
239a0 6f 66 20 74 68 65 20 6d 61 69 6e 20 53 51 4c 20  of the main SQL 
239b0 73 74 61 74 65 6d 65 6e 74 2e 0a 52 65 63 75 72  statement..Recur
239c0 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c  sive common tabl
239d0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 0a 70 72  e expressions.pr
239e0 6f 76 69 64 65 20 74 68 65 20 61 62 69 6c 69 74  ovide the abilit
239f0 79 20 74 6f 20 64 6f 20 68 69 65 72 61 72 63 68  y to do hierarch
23a00 69 63 61 6c 20 6f 72 0a 72 65 63 75 72 73 69 76  ical or.recursiv
23a10 65 20 71 75 65 72 69 65 73 20 6f 66 20 74 72 65  e queries of tre
23a20 65 73 20 61 6e 64 20 67 72 61 70 68 73 2c 20 61  es and graphs, a
23a30 20 63 61 70 61 62 69 6c 69 74 79 0a 74 68 61 74   capability.that
23a40 20 69 73 20 6e 6f 74 20 6f 74 68 65 72 77 69 73   is not otherwis
23a50 65 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 74  e available in t
23a60 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e  he SQL language.
23a70 0a 0a 3c 70 3e 41 6c 6c 20 63 6f 6d 6d 6f 6e 20  ..<p>All common 
23a80 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
23a90 73 20 28 6f 72 64 69 6e 61 72 79 20 61 6e 64 20  s (ordinary and 
23aa0 72 65 63 75 72 73 69 76 65 29 20 61 72 65 20 0a  recursive) are .
23ab0 63 72 65 61 74 65 64 20 62 79 20 70 72 65 70 65  created by prepe
23ac0 6e 64 69 6e 67 20 61 20 57 49 54 48 20 63 6c 61  nding a WITH cla
23ad0 75 73 65 20 69 6e 20 66 72 6f 6e 74 20 6f 66 20  use in front of 
23ae0 61 20 5b 53 45 4c 45 43 54 5d 2c 20 5b 49 4e 53  a [SELECT], [INS
23af0 45 52 54 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 0a  ERT], [DELETE],.
23b00 6f 72 20 5b 55 50 44 41 54 45 5d 20 73 74 61 74  or [UPDATE] stat
23b10 65 6d 65 6e 74 2e 20 20 41 20 73 69 6e 67 6c 65  ement.  A single
23b20 20 57 49 54 48 20 63 6c 61 75 73 65 20 63 61 6e   WITH clause can
23b30 20 73 70 65 63 69 66 79 20 6f 6e 65 20 6f 72 20   specify one or 
23b40 6d 6f 72 65 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c  more.common tabl
23b50 65 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 73  e expressions, s
23b60 6f 6d 65 20 6f 66 20 77 68 69 63 68 20 61 72 65  ome of which are
23b70 20 6f 72 64 69 6e 61 72 79 20 61 6e 64 20 73 6f   ordinary and so
23b80 6d 65 20 6f 66 20 77 68 69 63 68 0a 61 72 65 20  me of which.are 
23b90 72 65 63 75 72 73 69 76 65 2e 0a 0a 3c 74 63 6c  recursive...<tcl
23ba0 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f 72 64  >hd_fragment ord
23bb0 69 6e 61 72 79 63 74 65 20 7b 6f 72 64 69 6e 61  inarycte {ordina
23bc0 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  ry common table 
23bd0 65 78 70 72 65 73 73 69 6f 6e 73 7d 3c 2f 74 63  expressions}</tc
23be0 6c 3e 0a 3c 68 33 3e 4f 72 64 69 6e 61 72 79 20  l>.<h3>Ordinary 
23bf0 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20 45 78 70  Common Table Exp
23c00 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c  ressions</h3>..<
23c10 70 3e 41 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f  p>An ordinary co
23c20 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
23c30 73 73 69 6f 6e 20 77 6f 72 6b 73 20 61 73 20 69  ssion works as i
23c40 66 20 69 74 20 77 65 72 65 20 61 20 5b 76 69 65  f it were a [vie
23c50 77 5d 20 74 68 61 74 0a 65 78 69 73 74 73 20 66  w] that.exists f
23c60 6f 72 20 74 68 65 20 64 75 72 61 74 69 6f 6e 20  or the duration 
23c70 6f 66 20 61 20 73 69 6e 67 6c 65 20 73 74 61 74  of a single stat
23c80 65 6d 65 6e 74 2e 20 20 4f 72 64 69 6e 61 72 79  ement.  Ordinary
23c90 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 0a 65 78   common table.ex
23ca0 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 75 73  pressions are us
23cb0 65 66 75 6c 20 66 6f 72 20 66 61 63 74 6f 72 69  eful for factori
23cc0 6e 67 20 6f 75 74 20 73 75 62 71 75 65 72 69 65  ng out subquerie
23cd0 73 20 61 6e 64 20 6d 61 6b 69 6e 67 20 74 68 65  s and making the
23ce0 20 6f 76 65 72 61 6c 6c 0a 53 51 4c 20 73 74 61   overall.SQL sta
23cf0 74 65 6d 65 6e 74 20 65 61 73 69 65 72 20 74 6f  tement easier to
23d00 20 72 65 61 64 20 61 6e 64 20 75 6e 64 65 72 73   read and unders
23d10 74 61 6e 64 2e 0a 0a 3c 70 3e 41 20 57 49 54 48  tand...<p>A WITH
23d20 20 63 6c 61 75 73 65 20 63 61 6e 20 63 6f 6e 74   clause can cont
23d30 61 69 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f 6d  ain ordinary com
23d40 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
23d50 73 69 6f 6e 73 20 65 76 65 6e 20 69 66 0a 69 74  sions even if.it
23d60 20 69 6e 63 6c 75 64 65 73 20 74 68 65 20 52 45   includes the RE
23d70 43 55 52 53 49 56 45 20 6b 65 79 77 6f 72 64 2e  CURSIVE keyword.
23d80 20 20 54 68 65 20 75 73 65 20 6f 66 20 52 45 43    The use of REC
23d90 55 52 53 49 56 45 20 64 6f 65 73 20 6e 6f 74 20  URSIVE does not 
23da0 66 6f 72 63 65 0a 63 6f 6d 6d 6f 6e 20 74 61 62  force.common tab
23db0 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74  le expressions t
23dc0 6f 20 62 65 20 72 65 63 75 72 73 69 76 65 2e 0a  o be recursive..
23dd0 0a 3c 74 63 6c 3e 0a 68 64 5f 66 72 61 67 6d 65  .<tcl>.hd_fragme
23de0 6e 74 20 72 65 63 75 72 73 69 76 65 63 74 65 20  nt recursivecte 
23df0 7b 72 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f  {recursive commo
23e00 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
23e10 6f 6e 73 7d 20 5c 0a 7b 72 65 63 75 72 73 69 76  ons} \.{recursiv
23e20 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  e common table e
23e30 78 70 72 65 73 73 69 6f 6e 7d 20 7b 72 65 63 75  xpression} {recu
23e40 72 73 69 76 65 20 71 75 65 72 79 7d 0a 3c 2f 74  rsive query}.</t
23e50 63 6c 3e 0a 3c 68 33 3e 52 65 63 75 72 73 69 76  cl>.<h3>Recursiv
23e60 65 20 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20 45  e Common Table E
23e70 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a  xpressions</h3>.
23e80 0a 3c 70 3e 41 20 72 65 63 75 72 73 69 76 65 20  .<p>A recursive 
23e90 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
23ea0 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65 20 75  ression can be u
23eb0 73 65 64 20 74 6f 20 77 72 69 74 65 20 61 20 71  sed to write a q
23ec0 75 65 72 79 20 74 68 61 74 0a 77 61 6c 6b 73 20  uery that.walks 
23ed0 61 20 74 72 65 65 20 6f 72 20 67 72 61 70 68 2e  a tree or graph.
23ee0 20 20 41 20 72 65 63 75 72 73 69 76 65 20 63 6f    A recursive co
23ef0 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
23f00 73 73 69 6f 6e 20 68 61 73 20 74 68 65 20 73 61  ssion has the sa
23f10 6d 65 0a 62 61 73 69 63 20 73 79 6e 74 61 78 20  me.basic syntax 
23f20 61 73 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 63  as an ordinary c
23f30 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
23f40 65 73 73 69 6f 6e 2c 20 62 75 74 20 77 69 74 68  ession, but with
23f50 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 61   the following.a
23f60 64 64 69 74 69 6f 6e 61 6c 20 66 65 61 74 75 72  dditional featur
23f70 65 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 54  es:..<ol>.<li> T
23f80 68 65 20 22 5b 73 65 6c 65 63 74 2d 73 74 6d 74  he "[select-stmt
23f90 5d 22 0a 20 20 20 20 20 6d 75 73 74 20 62 65 20  ]".     must be 
23fa0 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65  a [compound sele
23fb0 63 74 5d 20 77 68 65 72 65 20 74 68 65 20 72 69  ct] where the ri
23fc0 67 68 74 2d 6d 6f 73 74 20 5b 63 6f 6d 70 6f 75  ght-most [compou
23fd0 6e 64 2d 6f 70 65 72 61 74 6f 72 5d 20 69 73 0a  nd-operator] is.
23fe0 20 20 20 20 20 65 69 74 68 65 72 20 55 4e 49 4f       either UNIO
23ff0 4e 20 6f 72 20 55 4e 49 4f 4e 20 41 4c 4c 2e 0a  N or UNION ALL..
24000 3c 6c 69 3e 20 54 68 65 20 74 61 62 6c 65 20 6e  <li> The table n
24010 61 6d 65 64 20 6f 6e 20 74 68 65 20 6c 65 66 74  amed on the left
24020 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 74 68  -hand side of th
24030 65 20 41 53 20 6b 65 79 77 6f 72 64 20 6d 75 73  e AS keyword mus
24040 74 20 61 70 70 65 61 72 0a 20 20 20 20 20 65 78  t appear.     ex
24050 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74 68  actly once in th
24060 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
24070 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20   the right-most 
24080 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
24090 0a 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6d  .     of the com
240a0 70 6f 75 6e 64 20 73 65 6c 65 63 74 2c 20 61 6e  pound select, an
240b0 64 20 6e 6f 77 68 65 72 65 20 65 6c 73 65 2e 0a  d nowhere else..
240c0 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 6f 20 70 75 74  </ol>..<p>To put
240d0 20 69 74 20 61 6e 6f 74 68 65 72 20 77 61 79 2c   it another way,
240e0 20 61 20 72 65 63 75 72 73 69 76 65 20 63 6f 6d   a recursive com
240f0 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
24100 73 69 6f 6e 20 6d 75 73 74 0a 6c 6f 6f 6b 20 6c  sion must.look l
24110 69 6b 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ike the followin
24120 67 3a 0a 0a 3c 74 63 6c 3e 52 65 63 75 72 73 69  g:..<tcl>Recursi
24130 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
24140 72 65 63 75 72 73 69 76 65 2d 63 74 65 3c 2f 74  recursive-cte</t
24150 63 6c 3e 0a 0a 3c 70 3e 43 61 6c 6c 20 74 68 65  cl>..<p>Call the
24160 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 62 79 20   table named by 
24170 74 68 65 20 5b 63 74 65 2d 74 61 62 6c 65 2d 6e  the [cte-table-n
24180 61 6d 65 5d 20 69 6e 20 61 20 72 65 63 75 72 73  ame] in a recurs
24190 69 76 65 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ive.common table
241a0 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 65 20   expression the 
241b0 22 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65  "recursive table
241c0 22 2e 0a 49 6e 20 74 68 65 20 5b 72 65 63 75 72  "..In the [recur
241d0 73 69 76 65 2d 63 74 65 5d 20 62 75 62 62 6c 65  sive-cte] bubble
241e0 20 64 69 61 67 72 61 6d 20 61 62 6f 76 65 2c 20   diagram above, 
241f0 74 68 65 20 72 65 63 75 72 73 69 76 65 0a 74 61  the recursive.ta
24200 62 6c 65 20 6d 75 73 74 20 61 70 70 65 61 72 20  ble must appear 
24210 65 78 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20  exactly once in 
24220 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
24230 6f 66 20 74 68 65 20 0a 3c 79 79 74 65 72 6d 3e  of the .<yyterm>
24240 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
24250 3c 2f 79 79 74 65 72 6d 3e 0a 61 6e 64 20 6d 75  </yyterm>.and mu
24260 73 74 20 6e 6f 74 20 61 70 70 65 61 72 20 61 6e  st not appear an
24270 79 77 68 65 72 65 20 65 6c 73 65 20 69 6e 20 65  ywhere else in e
24280 69 74 68 65 72 20 74 68 65 0a 3c 79 79 74 65 72  ither the.<yyter
24290 6d 3e 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74  m>initial-select
242a0 3c 2f 79 79 74 65 72 6d 3e 20 6f 72 20 74 68 65  </yyterm> or the
242b0 0a 3c 79 79 74 65 72 6d 3e 72 65 63 75 72 73 69  .<yyterm>recursi
242c0 76 65 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72  ve-select</yyter
242d0 6d 3e 2c 20 69 6e 63 6c 75 64 69 6e 67 20 73 75  m>, including su
242e0 62 71 75 65 72 69 65 73 2e 0a 54 68 65 20 3c 79  bqueries..The <y
242f0 79 74 65 72 6d 3e 69 6e 69 74 69 61 6c 2d 73 65  yterm>initial-se
24300 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20 6d 61  lect</yyterm> ma
24310 79 20 62 65 0a 61 20 5b 63 6f 6d 70 6f 75 6e 64  y be.a [compound
24320 20 73 65 6c 65 63 74 5d 2c 20 62 75 74 20 69 74   select], but it
24330 20 6d 61 79 20 6e 6f 74 20 69 6e 63 6c 75 64 65   may not include
24340 20 61 6e 20 4f 52 44 45 52 20 42 59 2c 20 4c 49   an ORDER BY, LI
24350 4d 49 54 2c 20 6f 72 20 4f 46 46 53 45 54 2e 0a  MIT, or OFFSET..
24360 54 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65  The recursive-se
24370 6c 65 63 74 20 6d 75 73 74 20 62 65 20 61 20 73  lect must be a s
24380 69 6d 70 6c 65 20 73 65 6c 65 63 74 2c 20 6e 6f  imple select, no
24390 74 20 61 20 63 6f 6d 70 6f 75 6e 64 2e 20 20 54  t a compound.  T
243a0 68 65 0a 72 65 63 75 72 73 69 76 65 2d 73 65 6c  he.recursive-sel
243b0 65 63 74 20 69 73 20 61 6c 6c 6f 77 65 64 20 74  ect is allowed t
243c0 6f 20 69 6e 63 6c 75 64 65 20 61 6e 20 4f 52 44  o include an ORD
243d0 45 52 20 42 59 2c 20 4c 49 4d 49 54 2c 20 61 6e  ER BY, LIMIT, an
243e0 64 2f 6f 72 20 4f 46 46 53 45 54 2e 0a 0a 3c 70  d/or OFFSET...<p
243f0 3e 54 68 65 20 62 61 73 69 63 20 61 6c 67 6f 72  >The basic algor
24400 69 74 68 6d 20 66 6f 72 20 63 6f 6d 70 75 74 69  ithm for computi
24410 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ng the content o
24420 66 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  f the recursive 
24430 74 61 62 6c 65 0a 69 73 20 61 73 20 66 6f 6c 6c  table.is as foll
24440 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20  ows:..<ol>.<li> 
24450 52 75 6e 20 74 68 65 20 3c 79 79 74 65 72 6d 3e  Run the <yyterm>
24460 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 3c 2f  initial-select</
24470 79 79 74 65 72 6d 3e 20 61 6e 64 20 61 64 64 20  yyterm> and add 
24480 74 68 65 20 72 65 73 75 6c 74 73 20 74 6f 20 61  the results to a
24490 20 71 75 65 75 65 2e 0a 3c 6c 69 3e 20 57 68 69   queue..<li> Whi
244a0 6c 65 20 74 68 65 20 71 75 65 75 65 20 69 73 20  le the queue is 
244b0 6e 6f 74 20 65 6d 70 74 79 3a 0a 3c 6f 6c 20 74  not empty:.<ol t
244c0 79 70 65 3d 22 61 22 3e 0a 3c 6c 69 3e 20 45 78  ype="a">.<li> Ex
244d0 74 72 61 63 74 20 61 20 73 69 6e 67 6c 65 20 72  tract a single r
244e0 6f 77 20 66 72 6f 6d 20 74 68 65 20 71 75 65 75  ow from the queu
244f0 65 2e 0a 3c 6c 69 3e 20 49 6e 73 65 72 74 20 74  e..<li> Insert t
24500 68 61 74 20 73 69 6e 67 6c 65 20 72 6f 77 20 69  hat single row i
24510 6e 74 6f 20 74 68 65 20 72 65 63 75 72 73 69 76  nto the recursiv
24520 65 20 74 61 62 6c 65 0a 3c 6c 69 3e 20 50 72 65  e table.<li> Pre
24530 74 65 6e 64 20 74 68 61 74 20 74 68 65 20 73 69  tend that the si
24540 6e 67 6c 65 20 72 6f 77 20 6a 75 73 74 20 65 78  ngle row just ex
24550 74 72 61 63 74 65 64 20 69 73 20 74 68 65 20 6f  tracted is the o
24560 6e 6c 79 0a 20 20 20 20 20 72 6f 77 20 69 6e 20  nly.     row in 
24570 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61  the recursive ta
24580 62 6c 65 20 61 6e 64 20 72 75 6e 20 74 68 65 20  ble and run the 
24590 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
245a0 2c 0a 20 20 20 20 20 61 64 64 69 6e 67 20 61 6c  ,.     adding al
245b0 6c 20 72 65 73 75 6c 74 73 20 74 6f 20 74 68 65  l results to the
245c0 20 71 75 65 75 65 2e 0a 3c 2f 6f 6c 3e 0a 3c 2f   queue..</ol>.</
245d0 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 20 62 61 73 69  ol>..<p>The basi
245e0 63 20 70 72 6f 63 65 64 75 72 65 20 61 62 6f 76  c procedure abov
245f0 65 20 6d 61 79 20 6d 6f 64 69 66 69 65 64 20 62  e may modified b
24600 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  y the following 
24610 61 64 64 69 74 69 6f 6e 61 6c 20 72 75 6c 65 73  additional rules
24620 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a  :..<ul>.<li><p>.
24630 20 20 49 66 20 61 20 55 4e 49 4f 4e 20 6f 70 65    If a UNION ope
24640 72 61 74 6f 72 20 63 6f 6e 6e 65 63 74 73 20 74  rator connects t
24650 68 65 20 3c 79 79 74 65 72 6d 3e 69 6e 69 74 69  he <yyterm>initi
24660 61 6c 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72  al-select</yyter
24670 6d 3e 20 77 69 74 68 20 74 68 65 0a 20 20 3c 79  m> with the.  <y
24680 79 74 65 72 6d 3e 72 65 63 75 72 73 69 76 65 2d  yterm>recursive-
24690 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 2c  select</yyterm>,
246a0 20 74 68 65 6e 20 6f 6e 6c 79 20 61 64 64 20 72   then only add r
246b0 6f 77 73 20 74 6f 20 74 68 65 20 71 75 65 75 65  ows to the queue
246c0 20 69 66 20 0a 20 20 6e 6f 20 69 64 65 6e 74 69   if .  no identi
246d0 63 61 6c 20 72 6f 77 20 68 61 73 0a 20 20 62 65  cal row has.  be
246e0 65 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 61 64  en previously ad
246f0 64 65 64 20 74 6f 20 74 68 65 20 71 75 65 75 65  ded to the queue
24700 2e 20 20 52 65 70 65 61 74 65 64 20 72 6f 77 73  .  Repeated rows
24710 20 61 72 65 20 64 69 73 63 61 72 64 65 64 20 62   are discarded b
24720 65 66 6f 72 65 20 62 65 69 6e 67 0a 20 20 61 64  efore being.  ad
24730 64 65 64 20 74 6f 20 74 68 65 20 71 75 65 75 65  ded to the queue
24740 20 65 76 65 6e 20 69 66 20 74 68 65 20 72 65 70   even if the rep
24750 65 61 74 65 64 20 72 6f 77 73 20 68 61 76 65 20  eated rows have 
24760 61 6c 72 65 61 64 79 20 62 65 65 6e 20 65 78 74  already been ext
24770 72 61 63 74 65 64 0a 20 20 66 72 6f 6d 20 74 68  racted.  from th
24780 65 20 71 75 65 75 65 20 62 79 20 74 68 65 20 72  e queue by the r
24790 65 63 75 72 73 69 6f 6e 20 73 74 65 70 2e 20 20  ecursion step.  
247a0 49 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20  If the operator 
247b0 69 73 20 55 4e 49 4f 4e 20 41 4c 4c 2c 0a 20 20  is UNION ALL,.  
247c0 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 67 65  then all rows ge
247d0 6e 65 72 61 74 65 64 20 62 79 20 62 6f 74 68 20  nerated by both 
247e0 74 68 65 20 3c 79 79 74 65 72 6d 3e 69 6e 69 74  the <yyterm>init
247f0 69 61 6c 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65  ial-select</yyte
24800 72 6d 3e 20 61 6e 64 20 74 68 65 0a 20 20 3c 79  rm> and the.  <y
24810 79 74 65 72 6d 3e 72 65 63 75 72 73 69 76 65 2d  yterm>recursive-
24820 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20  select</yyterm> 
24830 61 72 65 20 61 6c 77 61 79 73 20 61 64 64 65 64  are always added
24840 20 74 6f 20 74 68 65 20 71 75 65 75 65 20 65 76   to the queue ev
24850 65 6e 20 69 66 0a 20 20 74 68 65 79 20 61 72 65  en if.  they are
24860 20 72 65 70 65 61 74 73 2e 0a 20 20 57 68 65 6e   repeats..  When
24870 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 69 66 20   determining if 
24880 61 20 72 6f 77 20 69 73 20 72 65 70 65 61 74 65  a row is repeate
24890 64 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 63  d, NULL values c
248a0 6f 6d 70 61 72 65 0a 20 20 65 71 75 61 6c 20 74  ompare.  equal t
248b0 6f 20 6f 6e 65 20 61 6e 6f 74 68 65 72 20 61 6e  o one another an
248c0 64 20 6e 6f 74 20 65 71 75 61 6c 20 74 6f 20 61  d not equal to a
248d0 6e 79 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 0a  ny other value..
248e0 3c 6c 69 3e 3c 70 3e 0a 20 20 54 68 65 20 4c 49  <li><p>.  The LI
248f0 4d 49 54 20 63 6c 61 75 73 65 2c 20 69 66 20 70  MIT clause, if p
24900 72 65 73 65 6e 74 2c 20 64 65 74 65 72 6d 69 6e  resent, determin
24910 65 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e  es the maximum n
24920 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68  umber of rows th
24930 61 74 0a 20 20 77 69 6c 6c 20 65 76 65 72 20 62  at.  will ever b
24940 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 72  e added to the r
24950 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 20 69  ecursive table i
24960 6e 20 73 74 65 70 20 32 62 2e 0a 20 20 4f 6e 63  n step 2b..  Onc
24970 65 20 74 68 65 20 6c 69 6d 69 74 20 69 73 20 72  e the limit is r
24980 65 61 63 68 65 64 2c 20 74 68 65 20 72 65 63 75  eached, the recu
24990 72 73 69 6f 6e 20 73 74 6f 70 73 2e 0a 20 20 41  rsion stops..  A
249a0 20 6c 69 6d 69 74 20 6f 66 20 7a 65 72 6f 20 6d   limit of zero m
249b0 65 61 6e 73 20 74 68 61 74 20 6e 6f 20 72 6f 77  eans that no row
249c0 73 20 61 72 65 20 65 76 65 72 20 61 64 64 65 64  s are ever added
249d0 20 74 6f 20 74 68 65 0a 20 20 72 65 63 75 72 73   to the.  recurs
249e0 69 76 65 20 74 61 62 6c 65 2c 20 61 6e 64 20 61  ive table, and a
249f0 20 6e 65 67 61 74 69 76 65 20 6c 69 6d 69 74 20   negative limit 
24a00 6d 65 61 6e 73 20 61 6e 20 75 6e 6c 69 6d 69 74  means an unlimit
24a10 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  ed number of row
24a20 73 0a 20 20 6d 61 79 20 62 65 20 61 64 64 65 64  s.  may be added
24a30 20 74 6f 20 74 68 65 20 72 65 63 75 72 73 69 76   to the recursiv
24a40 65 20 74 61 62 6c 65 2e 0a 3c 6c 69 3e 3c 70 3e  e table..<li><p>
24a50 0a 20 20 54 68 65 20 4f 46 46 53 45 54 20 63 6c  .  The OFFSET cl
24a60 61 75 73 65 2c 20 69 66 20 69 74 20 69 73 20 70  ause, if it is p
24a70 72 65 73 65 6e 74 20 61 6e 64 20 68 61 73 20 61  resent and has a
24a80 20 70 6f 73 69 74 69 76 65 20 76 61 6c 75 65 20   positive value 
24a90 4e 2c 20 70 72 65 76 65 6e 74 73 20 74 68 65 0a  N, prevents the.
24aa0 20 20 66 69 72 73 74 20 4e 20 72 6f 77 73 20 66    first N rows f
24ab0 72 6f 6d 20 62 65 69 6e 67 20 61 64 64 65 64 20  rom being added 
24ac0 74 6f 20 74 68 65 20 72 65 63 75 72 73 69 76 65  to the recursive
24ad0 20 74 61 62 6c 65 2e 0a 20 20 54 68 65 20 66 69   table..  The fi
24ae0 72 73 74 20 4e 20 72 6f 77 73 20 61 72 65 20 73  rst N rows are s
24af0 74 69 6c 6c 20 70 72 6f 63 65 73 73 65 64 0a 20  till processed. 
24b00 20 62 79 20 74 68 65 20 3c 79 79 74 65 72 6d 3e   by the <yyterm>
24b10 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
24b20 3c 2f 79 79 74 65 72 6d 3e 20 26 6d 64 61 73 68  </yyterm> &mdash
24b30 3b 20 74 68 65 79 0a 20 20 6a 75 73 74 20 61 72  ; they.  just ar
24b40 65 20 6e 6f 74 20 61 64 64 65 64 20 74 6f 20 74  e not added to t
24b50 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62  he recursive tab
24b60 6c 65 2e 20 20 52 6f 77 73 20 61 72 65 20 6e 6f  le.  Rows are no
24b70 74 20 63 6f 75 6e 74 65 64 20 74 6f 77 61 72 64  t counted toward
24b80 0a 20 20 66 75 6c 66 69 6c 6c 69 6e 67 20 74 68  .  fulfilling th
24b90 65 20 4c 49 4d 49 54 20 75 6e 74 69 6c 20 61 6c  e LIMIT until al
24ba0 6c 20 4f 46 46 53 45 54 20 72 6f 77 73 20 68 61  l OFFSET rows ha
24bb0 76 65 20 62 65 65 6e 20 73 6b 69 70 70 65 64 2e  ve been skipped.
24bc0 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 49 66 20 61 6e  .<li><p>.  If an
24bd0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
24be0 20 69 73 20 70 72 65 73 65 6e 74 2c 20 69 74 20   is present, it 
24bf0 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 6f  determines the o
24c00 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f  rder in which ro
24c10 77 73 0a 20 20 61 72 65 20 65 78 74 72 61 63 74  ws.  are extract
24c20 65 64 20 66 72 6f 6d 20 74 68 65 20 71 75 65 75  ed from the queu
24c30 65 20 69 6e 20 73 74 65 70 20 32 61 2e 20 20 49  e in step 2a.  I
24c40 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 52  f there is no OR
24c50 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 0a 20  DER BY clause,. 
24c60 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65 72 20   then the order 
24c70 69 6e 20 77 68 69 63 68 20 72 6f 77 73 20 61 72  in which rows ar
24c80 65 20 65 78 74 72 61 63 74 65 64 20 69 73 20 75  e extracted is u
24c90 6e 64 65 66 69 6e 65 64 2e 20 20 28 49 6e 20 74  ndefined.  (In t
24ca0 68 65 20 63 75 72 72 65 6e 74 0a 20 20 69 6d 70  he current.  imp
24cb0 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65  lementation, the
24cc0 20 71 75 65 75 65 20 62 65 63 6f 6d 65 73 20 61   queue becomes a
24cd0 20 46 49 46 4f 20 69 66 20 74 68 65 20 4f 52 44   FIFO if the ORD
24ce0 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ER BY clause is 
24cf0 6f 6d 69 74 74 65 64 2c 0a 20 20 62 75 74 20 61  omitted,.  but a
24d00 70 70 6c 69 63 61 74 69 6f 6e 73 20 73 68 6f 75  pplications shou
24d10 6c 64 20 6e 6f 74 20 64 65 70 65 6e 64 20 6f 6e  ld not depend on
24d20 20 74 68 61 74 20 66 61 63 74 20 73 69 6e 63 65   that fact since
24d30 20 69 74 20 6d 69 67 68 74 20 63 68 61 6e 67 65   it might change
24d40 2e 29 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68  .).</ul>..<tcl>h
24d50 64 5f 66 72 61 67 6d 65 6e 74 20 72 63 65 78 31  d_fragment rcex1
24d60 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 52 65 63 75 72  </tcl>.<h4>Recur
24d70 73 69 76 65 20 51 75 65 72 79 20 45 78 61 6d 70  sive Query Examp
24d80 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65  les</h4>..<p>The
24d90 20 66 6f 6c 6c 6f 77 69 6e 67 20 71 75 65 72 79   following query
24da0 20 72 65 74 75 72 6e 73 20 61 6c 6c 20 69 6e 74   returns all int
24db0 65 67 65 72 73 20 62 65 74 77 65 65 6e 20 31 20  egers between 1 
24dc0 61 6e 64 20 31 30 30 30 30 30 30 3a 0a 0a 3c 62  and 1000000:..<b
24dd0 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
24de0 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20  WITH RECURSIVE. 
24df0 20 63 6e 74 28 78 29 20 41 53 20 28 56 41 4c 55   cnt(x) AS (VALU
24e00 45 53 28 31 29 20 55 4e 49 4f 4e 20 41 4c 4c 20  ES(1) UNION ALL 
24e10 53 45 4c 45 43 54 20 78 2b 31 20 46 52 4f 4d 20  SELECT x+1 FROM 
24e20 63 6e 74 20 57 48 45 52 45 20 78 3c 31 30 30 30  cnt WHERE x<1000
24e30 30 30 30 29 0a 53 45 4c 45 43 54 20 78 20 46 52  000).SELECT x FR
24e40 4f 4d 20 63 6e 74 3b 0a 3c 2f 70 72 65 3e 3c 2f  OM cnt;.</pre></
24e50 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
24e60 43 6f 6e 73 69 64 65 72 20 68 6f 77 20 74 68 69  Consider how thi
24e70 73 20 71 75 65 72 79 20 77 6f 72 6b 73 2e 20 20  s query works.  
24e80 54 68 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65  The initial-sele
24e90 63 74 0a 72 75 6e 73 20 66 69 72 73 74 20 61 6e  ct.runs first an
24ea0 64 20 72 65 74 75 72 6e 73 20 61 20 73 69 6e 67  d returns a sing
24eb0 6c 65 20 72 6f 77 0a 77 69 74 68 20 61 20 73 69  le row.with a si
24ec0 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 22 31 22 2e  ngle column "1".
24ed0 20 20 54 68 69 73 20 6f 6e 65 20 72 6f 77 20 69    This one row i
24ee0 73 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 71  s added to the q
24ef0 75 65 75 65 2e 20 20 49 6e 0a 73 74 65 70 20 32  ueue.  In.step 2
24f00 61 2c 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20  a, that one row 
24f10 69 73 20 65 78 74 72 61 63 74 65 64 20 66 72 6f  is extracted fro
24f20 6d 20 74 68 65 20 71 75 65 75 65 20 61 6e 64 20  m the queue and 
24f30 61 64 64 65 64 20 74 6f 20 22 63 6e 74 22 2e 0a  added to "cnt"..
24f40 54 68 65 6e 20 74 68 65 20 72 65 63 75 72 73 69  Then the recursi
24f50 76 65 2d 73 65 6c 65 63 74 20 69 73 20 72 75 6e  ve-select is run
24f60 20 69 6e 20 61 63 63 6f 72 64 61 6e 63 65 20 77   in accordance w
24f70 69 74 68 20 73 74 65 70 20 32 63 20 67 65 6e 65  ith step 2c gene
24f80 72 61 74 69 6e 67 0a 61 20 73 69 6e 67 6c 65 20  rating.a single 
24f90 6e 65 77 20 72 6f 77 20 77 69 74 68 20 76 61 6c  new row with val
24fa0 75 65 20 22 32 22 20 74 6f 20 61 64 64 20 74 6f  ue "2" to add to
24fb0 20 74 68 65 20 71 75 65 75 65 2e 20 20 54 68 65   the queue.  The
24fc0 20 71 75 65 75 65 20 73 74 69 6c 6c 0a 68 61 73   queue still.has
24fd0 20 6f 6e 65 20 72 6f 77 2c 20 73 6f 20 73 74 65   one row, so ste
24fe0 70 20 32 20 72 65 70 65 61 74 73 2e 20 20 54 68  p 2 repeats.  Th
24ff0 65 20 22 32 22 20 72 6f 77 20 69 73 20 65 78 74  e "2" row is ext
25000 72 61 63 74 65 64 20 61 6e 64 20 61 64 64 65 64  racted and added
25010 20 74 6f 20 74 68 65 0a 72 65 63 75 72 73 69 76   to the.recursiv
25020 65 20 74 61 62 6c 65 20 62 79 20 73 74 65 70 73  e table by steps
25030 20 32 61 20 61 6e 64 20 32 62 2e 20 20 54 68 65   2a and 2b.  The
25040 6e 20 74 68 65 20 72 6f 77 20 63 6f 6e 74 61 69  n the row contai
25050 6e 69 6e 67 20 32 20 69 73 20 75 73 65 64 20 0a  ning 2 is used .
25060 61 73 20 69 66 20 69 74 20 77 65 72 65 20 74 68  as if it were th
25070 65 20 63 6f 6d 70 6c 65 74 65 20 63 6f 6e 74 65  e complete conte
25080 6e 74 20 6f 66 20 74 68 65 20 72 65 63 75 72 73  nt of the recurs
25090 69 76 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68  ive table and th
250a0 65 20 0a 72 65 63 75 72 73 69 76 65 2d 73 65 6c  e .recursive-sel
250b0 65 63 74 20 69 73 20 72 75 6e 20 61 67 61 69 6e  ect is run again
250c0 2c 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61  , resulting in a
250d0 20 72 6f 77 20 77 69 74 68 20 76 61 6c 75 65 20   row with value 
250e0 22 33 22 20 62 65 69 6e 67 20 61 64 64 65 64 0a  "3" being added.
250f0 74 6f 20 74 68 65 20 71 75 65 75 65 2e 20 20 54  to the queue.  T
25100 68 69 73 20 72 65 70 65 61 74 73 20 39 39 39 39  his repeats 9999
25110 39 39 20 74 69 6d 65 73 20 75 6e 74 69 6c 20 66  99 times until f
25120 69 6e 61 6c 6c 79 20 61 74 20 73 74 65 70 20 32  inally at step 2
25130 61 20 74 68 65 0a 6f 6e 6c 79 20 76 61 6c 75 65  a the.only value
25140 20 6f 6e 20 74 68 65 20 71 75 65 75 65 20 69 73   on the queue is
25150 20 61 20 72 6f 77 20 63 6f 6e 74 61 69 6e 69 6e   a row containin
25160 67 20 31 30 30 30 30 30 30 2e 20 20 54 68 61 74  g 1000000.  That
25170 20 72 6f 77 20 69 73 0a 65 78 74 72 61 63 74 65   row is.extracte
25180 64 20 61 6e 64 20 61 64 64 65 64 20 74 6f 20 74  d and added to t
25190 68 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62  he recursive tab
251a0 6c 65 2e 20 20 42 75 74 20 74 68 69 73 20 74 69  le.  But this ti
251b0 6d 65 2c 20 74 68 65 0a 57 48 45 52 45 20 63 6c  me, the.WHERE cl
251c0 61 75 73 65 20 63 61 75 73 65 73 20 74 68 65 20  ause causes the 
251d0 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
251e0 20 74 6f 20 72 65 74 75 72 6e 20 6e 6f 20 72 6f   to return no ro
251f0 77 73 2c 20 73 6f 20 74 68 65 0a 71 75 65 75 65  ws, so the.queue
25200 20 72 65 6d 61 69 6e 73 20 65 6d 70 74 79 20 61   remains empty a
25210 6e 64 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e  nd the recursion
25220 20 73 74 6f 70 73 2e 0a 0a 3c 70 3e 3c 62 3e 4f   stops...<p><b>O
25230 70 74 69 6d 69 7a 61 74 69 6f 6e 20 6e 6f 74 65  ptimization note
25240 3a 3c 2f 62 3e 0a 49 6e 20 74 68 65 20 64 69 73  :</b>.In the dis
25250 63 75 73 73 69 6f 6e 20 61 62 6f 76 65 2c 20 73  cussion above, s
25260 74 61 74 65 6d 65 6e 74 73 20 6c 69 6b 65 20 22  tatements like "
25270 69 6e 73 65 72 74 20 74 68 65 20 72 6f 77 20 69  insert the row i
25280 6e 74 6f 0a 74 68 65 20 72 65 63 75 72 73 69 76  nto.the recursiv
25290 65 20 74 61 62 6c 65 22 20 73 68 6f 75 6c 64 20  e table" should 
252a0 62 65 20 75 6e 64 65 72 73 74 6f 6f 64 20 63 6f  be understood co
252b0 6e 63 65 70 74 75 61 6c 6c 79 2c 20 6e 6f 74 20  nceptually, not 
252c0 6c 69 74 65 72 61 6c 6c 79 2e 0a 49 74 20 73 6f  literally..It so
252d0 75 6e 64 73 20 61 73 20 69 66 20 53 51 4c 69 74  unds as if SQLit
252e0 65 20 69 73 20 61 63 63 75 6d 75 6c 61 74 69 6e  e is accumulatin
252f0 67 20 61 20 68 75 67 65 20 74 61 62 6c 65 0a 63  g a huge table.c
25300 6f 6e 74 61 69 6e 69 6e 67 20 6f 6e 65 20 6d 69  ontaining one mi
25310 6c 6c 69 6f 6e 20 72 6f 77 73 2c 20 74 68 65 6e  llion rows, then
25320 20 67 6f 69 6e 67 20 62 61 63 6b 20 61 6e 64 20   going back and 
25330 73 63 61 6e 6e 69 6e 67 20 74 68 61 74 20 74 61  scanning that ta
25340 62 6c 65 0a 66 72 6f 6d 20 74 6f 70 20 74 6f 20  ble.from top to 
25350 62 6f 74 74 6f 6d 20 74 6f 20 67 65 6e 65 72 61  bottom to genera
25360 74 65 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20  te the result.  
25370 57 68 61 74 20 72 65 61 6c 6c 79 20 68 61 70 70  What really happ
25380 65 6e 73 0a 69 73 20 74 68 61 74 20 74 68 65 20  ens.is that the 
25390 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20  query optimizer 
253a0 73 65 65 73 20 74 68 61 74 20 76 61 6c 75 65 73  sees that values
253b0 20 69 6e 20 74 68 65 0a 22 63 6e 74 22 20 72 65   in the."cnt" re
253c0 63 75 72 73 69 76 65 20 74 61 62 6c 65 20 61 72  cursive table ar
253d0 65 20 6f 6e 6c 79 20 75 73 65 64 20 6f 6e 63 65  e only used once
253e0 2e 20 20 53 6f 20 61 73 20 65 61 63 68 20 72 6f  .  So as each ro
253f0 77 20 69 73 20 61 64 64 65 64 20 74 6f 0a 74 68  w is added to.th
25400 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  e recursive tabl
25410 65 2c 20 74 68 61 74 20 72 6f 77 20 69 73 20 69  e, that row is i
25420 6d 6d 65 64 69 61 74 65 6c 79 20 72 65 74 75 72  mmediately retur
25430 6e 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  ned as a result 
25440 6f 66 20 74 68 65 20 6d 61 69 6e 0a 53 45 4c 45  of the main.SELE
25450 43 54 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  CT statement and
25460 20 74 68 65 6e 20 64 69 73 63 61 72 64 65 64 2e   then discarded.
25470 20 20 53 51 4c 69 74 65 20 64 6f 65 73 20 3c 65    SQLite does <e
25480 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 63 63 75 6d  m>not</em> accum
25490 75 6c 61 74 65 0a 61 20 74 65 6d 70 6f 72 61 72  ulate.a temporar
254a0 79 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69  y table containi
254b0 6e 67 20 61 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77  ng a million row
254c0 73 2e 20 20 56 65 72 79 20 6c 69 74 74 6c 65 20  s.  Very little 
254d0 6d 65 6d 6f 72 79 20 69 73 0a 6e 65 65 64 65 64  memory is.needed
254e0 20 74 6f 20 72 75 6e 20 74 68 65 20 61 62 6f 76   to run the abov
254f0 65 20 65 78 61 6d 70 6c 65 2e 20 20 48 6f 77 65  e example.  Howe
25500 76 65 72 2c 20 69 66 20 74 68 65 20 65 78 61 6d  ver, if the exam
25510 70 6c 65 20 68 61 64 20 75 73 65 64 0a 55 4e 49  ple had used.UNI
25520 4f 4e 20 69 6e 73 74 65 61 64 20 6f 66 20 55 4e  ON instead of UN
25530 49 4f 4e 20 41 4c 4c 2c 20 74 68 65 6e 20 53 51  ION ALL, then SQ
25540 4c 69 74 65 20 77 6f 75 6c 64 20 68 61 76 65 20  Lite would have 
25550 68 61 64 20 74 6f 20 6b 65 65 70 20 61 72 6f 75  had to keep arou
25560 6e 64 0a 61 6c 6c 20 70 72 65 76 69 6f 75 73 6c  nd.all previousl
25570 79 20 67 65 6e 65 72 61 74 65 64 20 63 6f 6e 74  y generated cont
25580 65 6e 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ent in order to 
25590 63 68 65 63 6b 20 66 6f 72 20 64 75 70 6c 69 63  check for duplic
255a0 61 74 65 73 2e 0a 46 6f 72 20 74 68 69 73 20 72  ates..For this r
255b0 65 61 73 6f 6e 2c 20 70 72 6f 67 72 61 6d 6d 65  eason, programme
255c0 72 73 20 73 68 6f 75 6c 64 20 73 74 72 69 76 65  rs should strive
255d0 20 74 6f 20 75 73 65 20 55 4e 49 4f 4e 20 41 4c   to use UNION AL
255e0 4c 20 69 6e 73 74 65 61 64 0a 6f 66 20 55 4e 49  L instead.of UNI
255f0 4f 4e 20 77 68 65 6e 20 66 65 61 73 69 62 6c 65  ON when feasible
25600 2e 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20 61 20  ...<p>Here is a 
25610 76 61 72 69 61 74 69 6f 6e 20 6f 6e 20 74 68 65  variation on the
25620 20 70 72 65 76 69 6f 75 73 20 65 78 61 6d 70 6c   previous exampl
25630 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  e:..<blockquote>
25640 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52  <pre>.WITH RECUR
25650 53 49 56 45 0a 20 20 63 6e 74 28 78 29 20 41 53  SIVE.  cnt(x) AS
25660 20 28 0a 20 20 20 20 20 53 45 4c 45 43 54 20 31   (.     SELECT 1
25670 0a 20 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a  .     UNION ALL.
25680 20 20 20 20 20 53 45 4c 45 43 54 20 78 2b 31 20       SELECT x+1 
25690 46 52 4f 4d 20 63 6e 74 0a 20 20 20 20 20 20 4c  FROM cnt.      L
256a0 49 4d 49 54 20 31 30 30 30 30 30 30 0a 20 20 29  IMIT 1000000.  )
256b0 0a 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 63  .SELECT x FROM c
256c0 6e 74 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  nt;.</pre></bloc
256d0 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 72  kquote>..<p>Ther
256e0 65 20 61 72 65 20 74 77 6f 20 64 69 66 66 65 72  e are two differ
256f0 65 6e 63 65 73 20 69 6e 20 74 68 69 73 20 76 61  ences in this va
25700 72 69 61 74 69 6f 6e 2e 20 20 54 68 65 20 69 6e  riation.  The in
25710 69 74 69 61 6c 2d 73 65 6c 65 63 74 20 69 73 0a  itial-select is.
25720 22 53 45 4c 45 43 54 20 31 22 20 69 6e 73 74 65  "SELECT 1" inste
25730 61 64 20 6f 66 20 22 56 41 4c 55 45 53 28 31 29  ad of "VALUES(1)
25740 22 2e 20 20 42 75 74 20 74 68 6f 73 65 20 61 72  ".  But those ar
25750 65 20 6a 75 73 74 20 64 69 66 66 65 72 65 6e 74  e just different
25760 0a 73 79 6e 74 61 78 65 73 20 66 6f 72 20 73 61  .syntaxes for sa
25770 79 69 6e 67 20 65 78 61 63 74 6c 79 20 74 68 65  ying exactly the
25780 20 73 61 6d 65 20 74 68 69 6e 67 2e 20 20 54 68   same thing.  Th
25790 65 20 6f 74 68 65 72 20 63 68 61 6e 67 65 20 69  e other change i
257a0 73 20 74 68 61 74 20 74 68 65 0a 72 65 63 75 72  s that the.recur
257b0 73 69 6f 6e 20 69 73 20 73 74 6f 70 70 65 64 20  sion is stopped 
257c0 62 79 20 61 20 4c 49 4d 49 54 20 72 61 74 68 65  by a LIMIT rathe
257d0 72 20 74 68 61 6e 20 61 20 57 48 45 52 45 20 63  r than a WHERE c
257e0 6c 61 75 73 65 2e 20 20 54 68 65 20 75 73 65 20  lause.  The use 
257f0 6f 66 0a 4c 49 4d 49 54 20 6d 65 61 6e 73 20 74  of.LIMIT means t
25800 68 61 74 20 77 68 65 6e 20 74 68 65 20 6f 6e 65  hat when the one
25810 2d 6d 69 6c 6c 69 6f 6e 74 68 20 72 6f 77 20 69  -millionth row i
25820 73 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 22  s added to the "
25830 63 6e 74 22 20 74 61 62 6c 65 0a 28 61 6e 64 20  cnt" table.(and 
25840 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
25850 6d 61 69 6e 20 53 45 4c 45 43 54 2c 20 74 68 61  main SELECT, tha
25860 6e 6b 73 20 74 6f 20 74 68 65 20 71 75 65 72 79  nks to the query
25870 20 6f 70 74 69 6d 69 7a 65 72 29 0a 74 68 65 6e   optimizer).then
25880 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 73   the recursion s
25890 74 6f 70 73 20 69 6d 6d 65 64 69 61 74 65 6c 79  tops immediately
258a0 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 68   regardless of h
258b0 6f 77 20 6d 61 6e 79 20 72 6f 77 73 20 6d 69 67  ow many rows mig
258c0 68 74 20 62 65 0a 6c 65 66 74 20 69 6e 20 74 68  ht be.left in th
258d0 65 20 71 75 65 75 65 2e 20 20 4f 6e 20 6d 6f 72  e queue.  On mor
258e0 65 20 63 6f 6d 70 6c 65 78 20 71 75 65 72 69 65  e complex querie
258f0 73 2c 20 69 74 20 63 61 6e 20 73 6f 6d 65 74 69  s, it can someti
25900 6d 65 73 20 62 65 0a 64 69 66 66 69 63 75 6c 74  mes be.difficult
25910 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20   to ensure that 
25920 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
25930 20 77 69 6c 6c 20 65 76 65 6e 74 75 61 6c 6c 79   will eventually
25940 20 63 61 75 73 65 20 74 68 65 0a 71 75 65 75 65   cause the.queue
25950 20 74 6f 20 64 72 61 69 6e 20 61 6e 64 20 74 68   to drain and th
25960 65 20 72 65 63 75 72 73 69 6f 6e 20 74 6f 20 74  e recursion to t
25970 65 72 6d 69 6e 61 74 65 2e 20 20 42 75 74 20 74  erminate.  But t
25980 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
25990 77 69 6c 6c 0a 61 6c 77 61 79 73 20 73 74 6f 70  will.always stop
259a0 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 2e 20   the recursion. 
259b0 20 53 6f 20 69 74 20 69 73 20 67 6f 6f 64 20 70   So it is good p
259c0 72 61 63 74 69 63 65 20 74 6f 20 61 6c 77 61 79  ractice to alway
259d0 73 20 69 6e 63 6c 75 64 65 20 61 0a 4c 49 4d 49  s include a.LIMI
259e0 54 20 63 6c 61 75 73 65 20 61 73 20 61 20 73 61  T clause as a sa
259f0 66 65 74 79 20 69 66 20 61 6e 20 75 70 70 65 72  fety if an upper
25a00 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 73 69   bound on the si
25a10 7a 65 20 6f 66 20 74 68 65 20 72 65 63 75 72 73  ze of the recurs
25a20 69 6f 6e 20 0a 69 73 20 6b 6e 6f 77 6e 2e 0a 0a  ion .is known...
25a30 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
25a40 20 72 63 65 78 32 3c 2f 74 63 6c 3e 0a 3c 68 34   rcex2</tcl>.<h4
25a50 3e 48 69 65 72 61 72 63 68 69 63 61 6c 20 51 75  >Hierarchical Qu
25a60 65 72 79 20 45 78 61 6d 70 6c 65 73 3c 2f 68 34  ery Examples</h4
25a70 3e 0a 0a 3c 70 3e 43 6f 6e 73 69 64 65 72 20 61  >..<p>Consider a
25a80 20 74 61 62 6c 65 20 74 68 61 74 20 64 65 73 63   table that desc
25a90 72 69 62 65 73 20 74 68 65 20 6d 65 6d 62 65 72  ribes the member
25aa0 73 20 6f 66 20 61 6e 20 6f 72 67 61 6e 69 7a 61  s of an organiza
25ab0 74 69 6f 6e 20 61 73 0a 77 65 6c 6c 20 61 73 20  tion as.well as 
25ac0 74 68 65 20 63 68 61 69 6e 2d 6f 66 2d 63 6f 6d  the chain-of-com
25ad0 6d 61 6e 64 20 77 69 74 68 69 6e 20 74 68 61 74  mand within that
25ae0 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 3a 0a 0a   organization:..
25af0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
25b00 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f  >.CREATE TABLE o
25b10 72 67 28 0a 20 20 6e 61 6d 65 20 54 45 58 54 20  rg(.  name TEXT 
25b20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 62  PRIMARY KEY,.  b
25b30 6f 73 73 20 54 45 58 54 20 52 45 46 45 52 45 4e  oss TEXT REFEREN
25b40 43 45 53 20 6f 72 67 2c 0a 20 20 68 65 69 67 68  CES org,.  heigh
25b50 74 20 49 4e 54 2c 0a 20 20 2d 2d 20 6f 74 68 65  t INT,.  -- othe
25b60 72 20 63 6f 6e 74 65 6e 74 20 6f 6d 69 74 74 65  r content omitte
25b70 64 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  d.);.</pre></blo
25b80 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 45 76 65  ckquote>..<p>Eve
25b90 72 79 20 6d 65 6d 62 65 72 20 69 6e 20 74 68 65  ry member in the
25ba0 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20 68 61   organization ha
25bb0 73 20 61 20 6e 61 6d 65 2c 20 61 6e 64 20 6d 6f  s a name, and mo
25bc0 73 74 20 6d 65 6d 62 65 72 73 20 68 61 76 65 0a  st members have.
25bd0 61 20 73 69 6e 67 6c 65 20 62 6f 73 73 2e 20 20  a single boss.  
25be0 28 54 68 65 20 68 65 61 64 20 6f 66 20 74 68 65  (The head of the
25bf0 20 77 68 6f 6c 65 20 6f 72 67 61 6e 69 7a 61 74   whole organizat
25c00 69 6f 6e 20 68 61 73 20 61 20 4e 55 4c 4c 0a 22  ion has a NULL."
25c10 62 6f 73 73 22 20 66 69 65 6c 64 2e 29 20 54 68  boss" field.) Th
25c20 65 20 72 6f 77 73 20 6f 66 20 74 68 65 20 22 6f  e rows of the "o
25c30 72 67 22 20 74 61 62 6c 65 20 66 6f 72 6d 20 61  rg" table form a
25c40 20 74 72 65 65 2e 0a 0a 3c 70 3e 48 65 72 65 20   tree...<p>Here 
25c50 69 73 20 61 20 71 75 65 72 79 20 74 68 61 74 20  is a query that 
25c60 63 6f 6d 70 75 74 65 73 20 74 68 65 20 61 76 65  computes the ave
25c70 72 61 67 65 20 68 65 69 67 68 74 20 6f 76 65 72  rage height over
25c80 20 65 76 65 72 79 6f 6e 65 0a 69 6e 20 41 6c 69   everyone.in Ali
25c90 63 65 27 73 20 6f 72 67 61 6e 69 7a 61 74 69 6f  ce's organizatio
25ca0 6e 2c 20 69 6e 63 6c 75 64 69 6e 67 20 41 6c 69  n, including Ali
25cb0 63 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  ce:..<blockquote
25cc0 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55  ><pre>.WITH RECU
25cd0 52 53 49 56 45 0a 20 20 77 6f 72 6b 73 5f 66 6f  RSIVE.  works_fo
25ce0 72 5f 61 6c 69 63 65 28 6e 29 20 41 53 20 28 0a  r_alice(n) AS (.
25cf0 20 20 20 20 56 41 4c 55 45 53 28 27 41 6c 69 63      VALUES('Alic
25d00 65 27 29 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20  e').    UNION.  
25d10 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52    SELECT name FR
25d20 4f 4d 20 6f 72 67 2c 20 77 6f 72 6b 73 5f 66 6f  OM org, works_fo
25d30 72 5f 61 6c 69 63 65 0a 20 20 20 20 20 57 48 45  r_alice.     WHE
25d40 52 45 20 6f 72 67 2e 62 6f 73 73 3d 77 6f 72 6b  RE org.boss=work
25d50 73 5f 66 6f 72 5f 61 6c 69 63 65 2e 6e 0a 20 20  s_for_alice.n.  
25d60 29 0a 53 45 4c 45 43 54 20 61 76 67 28 68 65 69  ).SELECT avg(hei
25d70 67 68 74 29 20 46 52 4f 4d 20 6f 72 67 0a 20 57  ght) FROM org. W
25d80 48 45 52 45 20 6f 72 67 2e 6e 61 6d 65 20 49 4e  HERE org.name IN
25d90 20 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65   works_for_alice
25da0 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
25db0 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6e 65  uote>..<p>The ne
25dc0 78 74 20 65 78 61 6d 70 6c 65 20 75 73 65 73 20  xt example uses 
25dd0 74 77 6f 20 0a 63 6f 6d 6d 6f 6e 20 74 61 62 6c  two .common tabl
25de0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e  e expressions in
25df0 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63   a single WITH c
25e00 6c 61 75 73 65 2e 20 20 0a 54 68 65 20 66 6f 6c  lause.  .The fol
25e10 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 72 65 63  lowing table rec
25e20 6f 72 64 73 20 61 20 66 61 6d 69 6c 79 20 74 72  ords a family tr
25e30 65 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  ee:..<blockquote
25e40 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41  ><pre>.CREATE TA
25e50 42 4c 45 20 66 61 6d 69 6c 79 28 0a 20 20 6e 61  BLE family(.  na
25e60 6d 65 20 54 45 58 54 20 50 52 49 4d 41 52 59 20  me TEXT PRIMARY 
25e70 4b 45 59 2c 0a 20 20 6d 6f 6d 20 54 45 58 54 20  KEY,.  mom TEXT 
25e80 52 45 46 45 52 45 4e 43 45 53 20 66 61 6d 69 6c  REFERENCES famil
25e90 79 2c 0a 20 20 64 61 64 20 54 45 58 54 20 52 45  y,.  dad TEXT RE
25ea0 46 45 52 45 4e 43 45 53 20 66 61 6d 69 6c 79 2c  FERENCES family,
25eb0 0a 20 20 62 6f 72 6e 20 44 41 54 45 54 49 4d 45  .  born DATETIME
25ec0 2c 0a 20 20 64 69 65 64 20 44 41 54 45 54 49 4d  ,.  died DATETIM
25ed0 45 2c 20 2d 2d 20 4e 55 4c 4c 20 69 66 20 73 74  E, -- NULL if st
25ee0 69 6c 6c 20 61 6c 69 76 65 0a 20 20 2d 2d 20 6f  ill alive.  -- o
25ef0 74 68 65 72 20 63 6f 6e 74 65 6e 74 0a 29 3b 0a  ther content.);.
25f00 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
25f10 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 22 66 61 6d  te>..<p>The "fam
25f20 69 6c 79 22 20 74 61 62 6c 65 20 69 73 20 73 69  ily" table is si
25f30 6d 69 6c 61 72 20 74 6f 20 74 68 65 20 65 61 72  milar to the ear
25f40 6c 69 65 72 20 22 6f 72 67 22 20 74 61 62 6c 65  lier "org" table
25f50 20 65 78 63 65 70 74 20 74 68 61 74 20 0a 6e 6f   except that .no
25f60 77 20 74 68 65 72 65 20 61 72 65 20 74 77 6f 20  w there are two 
25f70 70 61 72 65 6e 74 73 20 74 6f 20 65 61 63 68 20  parents to each 
25f80 6d 65 6d 62 65 72 2e 0a 57 65 20 77 61 6e 74 20  member..We want 
25f90 74 6f 20 6b 6e 6f 77 20 61 6c 6c 20 6c 69 76 69  to know all livi
25fa0 6e 67 20 61 6e 63 65 73 74 6f 72 73 20 6f 66 20  ng ancestors of 
25fb0 41 6c 69 63 65 2c 20 66 72 6f 6d 20 6f 6c 64 65  Alice, from olde
25fc0 73 74 20 74 6f 20 79 6f 75 6e 67 65 73 74 2e 0a  st to youngest..
25fd0 41 6e 20 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d  An ordinary comm
25fe0 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
25ff0 69 6f 6e 2c 20 22 70 61 72 65 6e 74 5f 6f 66 22  ion, "parent_of"
26000 2c 20 69 73 20 64 65 66 69 6e 65 64 20 66 69 72  , is defined fir
26010 73 74 2e 20 20 54 68 61 74 0a 6f 72 64 69 6e 61  st.  That.ordina
26020 72 79 20 43 54 45 20 69 73 20 61 20 76 69 65 77  ry CTE is a view
26030 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65   that can be use
26040 64 20 74 6f 20 66 69 6e 64 20 61 6c 6c 20 70 61  d to find all pa
26050 72 65 6e 74 73 20 6f 66 20 61 6e 79 0a 69 6e 64  rents of any.ind
26060 69 76 69 64 75 61 6c 2e 20 20 54 68 61 74 20 6f  ividual.  That o
26070 72 64 69 6e 61 72 79 20 43 54 45 20 69 73 20 74  rdinary CTE is t
26080 68 65 6e 20 75 73 65 64 20 69 6e 20 74 68 65 20  hen used in the 
26090 22 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69  "ancestor_of_ali
260a0 63 65 22 0a 72 65 63 75 72 73 69 76 65 20 43 54  ce".recursive CT
260b0 45 2e 20 20 54 68 65 20 72 65 63 75 72 73 69 76  E.  The recursiv
260c0 65 20 43 54 45 20 69 73 20 74 68 65 6e 20 75 73  e CTE is then us
260d0 65 64 20 69 6e 20 74 68 65 20 66 69 6e 61 6c 20  ed in the final 
260e0 71 75 65 72 79 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  query:..<blockqu
260f0 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52  ote><pre>.WITH R
26100 45 43 55 52 53 49 56 45 0a 20 20 70 61 72 65 6e  ECURSIVE.  paren
26110 74 5f 6f 66 28 6e 61 6d 65 2c 20 70 61 72 65 6e  t_of(name, paren
26120 74 29 20 41 53 0a 20 20 20 20 28 53 45 4c 45 43  t) AS.    (SELEC
26130 54 20 6e 61 6d 65 2c 20 6d 6f 6d 20 46 52 4f 4d  T name, mom FROM
26140 20 66 61 6d 69 6c 79 20 55 4e 49 4f 4e 20 53 45   family UNION SE
26150 4c 45 43 54 20 6e 61 6d 65 2c 20 64 61 64 20 46  LECT name, dad F
26160 52 4f 4d 20 66 61 6d 69 6c 79 29 2c 0a 20 20 61  ROM family),.  a
26170 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65  ncestor_of_alice
26180 28 6e 61 6d 65 29 20 41 53 0a 20 20 20 20 28 53  (name) AS.    (S
26190 45 4c 45 43 54 20 70 61 72 65 6e 74 20 46 52 4f  ELECT parent FRO
261a0 4d 20 70 61 72 65 6e 74 5f 6f 66 20 57 48 45 52  M parent_of WHER
261b0 45 20 6e 61 6d 65 3d 27 41 6c 69 63 65 27 0a 20  E name='Alice'. 
261c0 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20      UNION ALL.  
261d0 20 20 20 53 45 4c 45 43 54 20 70 61 72 65 6e 74     SELECT parent
261e0 20 46 52 4f 4d 20 70 61 72 65 6e 74 5f 6f 66 20   FROM parent_of 
261f0 4a 4f 49 4e 20 61 6e 63 65 73 74 6f 72 5f 6f 66  JOIN ancestor_of
26200 5f 61 6c 69 63 65 20 55 53 49 4e 47 28 6e 61 6d  _alice USING(nam
26210 65 29 29 0a 53 45 4c 45 43 54 20 66 61 6d 69 6c  e)).SELECT famil
26220 79 2e 6e 61 6d 65 20 46 52 4f 4d 20 61 6e 63 65  y.name FROM ance
26230 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 2c 20 66  stor_of_alice, f
26240 61 6d 69 6c 79 0a 20 57 48 45 52 45 20 61 6e 63  amily. WHERE anc
26250 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 2e 6e  estor_of_alice.n
26260 61 6d 65 3d 66 61 6d 69 6c 79 2e 6e 61 6d 65 0a  ame=family.name.
26270 20 20 20 41 4e 44 20 64 69 65 64 20 49 53 20 4e     AND died IS N
26280 55 4c 4c 0a 20 4f 52 44 45 52 20 42 59 20 62 6f  ULL. ORDER BY bo
26290 72 6e 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  rn;.</pre></bloc
262a0 6b 71 75 6f 74 65 3e 0a 0a 3c 74 63 6c 3e 68 64  kquote>..<tcl>hd
262b0 5f 66 72 61 67 6d 65 6e 74 20 72 63 65 78 32 3c  _fragment rcex2<
262c0 2f 74 63 6c 3e 0a 3c 68 34 3e 51 75 65 72 69 65  /tcl>.<h4>Querie
262d0 73 20 41 67 61 69 6e 73 74 20 41 20 47 72 61 70  s Against A Grap
262e0 68 3c 2f 68 34 3e 0a 0a 3c 70 3e 41 20 76 65 72  h</h4>..<p>A ver
262f0 73 69 6f 6e 20 63 6f 6e 74 72 6f 6c 20 73 79 73  sion control sys
26300 74 65 6d 20 28 56 43 53 29 20 77 69 6c 6c 20 74  tem (VCS) will t
26310 79 70 69 63 61 6c 6c 79 20 73 74 6f 72 65 20 74  ypically store t
26320 68 65 20 65 76 6f 6c 76 69 6e 67 0a 76 65 72 73  he evolving.vers
26330 69 6f 6e 73 20 6f 66 20 61 20 70 72 6f 6a 65 63  ions of a projec
26340 74 20 61 73 20 61 20 64 69 72 65 63 74 65 64 20  t as a directed 
26350 61 63 79 63 6c 69 63 20 67 72 61 70 68 20 28 44  acyclic graph (D
26360 41 47 29 2e 20 20 43 61 6c 6c 20 65 61 63 68 0a  AG).  Call each.
26370 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 70  version of the p
26380 72 6f 6a 65 63 74 20 61 20 22 63 68 65 63 6b 69  roject a "checki
26390 6e 22 2e 20 20 41 20 73 69 6e 67 6c 65 0a 63 68  n".  A single.ch
263a0 65 63 6b 69 6e 20 63 61 6e 20 68 61 76 65 20 7a  eckin can have z
263b0 65 72 6f 20 6f 72 20 6d 6f 72 65 20 70 61 72 65  ero or more pare
263c0 6e 74 73 2e 20 20 4d 6f 73 74 20 63 68 65 63 6b  nts.  Most check
263d0 69 6e 73 20 28 65 78 63 65 70 74 20 74 68 65 0a  ins (except the.
263e0 66 69 72 73 74 29 20 68 61 76 65 20 61 20 73 69  first) have a si
263f0 6e 67 6c 65 20 70 61 72 65 6e 74 2c 20 62 75 74  ngle parent, but
26400 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20   in the case of 
26410 61 20 6d 65 72 67 65 2c 20 61 20 63 68 65 63 6b  a merge, a check
26420 69 6e 0a 6d 69 67 68 74 20 68 61 76 65 20 74 77  in.might have tw
26430 6f 20 6f 72 20 74 68 72 65 65 20 6f 72 20 6d 6f  o or three or mo
26440 72 65 20 70 61 72 65 6e 74 73 2e 20 20 41 20 73  re parents.  A s
26450 63 68 65 6d 61 20 74 6f 20 6b 65 65 70 20 74 72  chema to keep tr
26460 61 63 6b 20 6f 66 0a 63 68 65 63 6b 69 6e 73 20  ack of.checkins 
26470 61 6e 64 20 74 68 65 20 6f 72 64 65 72 20 69 6e  and the order in
26480 20 77 68 69 63 68 20 74 68 65 79 20 6f 63 63 75   which they occu
26490 72 20 6d 69 67 68 74 20 6c 6f 6f 6b 20 73 6f 6d  r might look som
264a0 65 74 68 69 6e 67 20 6c 69 6b 65 0a 74 68 69 73  ething like.this
264b0 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
264c0 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
264d0 45 20 63 68 65 63 6b 69 6e 28 0a 20 20 69 64 20  E checkin(.  id 
264e0 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
264f0 4b 45 59 2c 0a 20 20 6d 74 69 6d 65 20 49 4e 54  KEY,.  mtime INT
26500 45 47 45 52 20 2d 2d 20 74 69 6d 65 73 74 61 6d  EGER -- timestam
26510 70 20 77 68 65 6e 20 74 68 69 73 20 63 68 65 63  p when this chec
26520 6b 69 6e 20 6f 63 63 75 72 72 65 64 0a 29 3b 0a  kin occurred.);.
26530 43 52 45 41 54 45 20 54 41 42 4c 45 20 64 65 72  CREATE TABLE der
26540 69 76 65 64 66 72 6f 6d 28 0a 20 20 78 66 72 6f  ivedfrom(.  xfro
26550 6d 20 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55  m INTEGER NOT NU
26560 4c 4c 20 52 45 46 45 52 45 4e 43 45 53 20 63 68  LL REFERENCES ch
26570 65 63 6b 69 6e 2c 20 2d 2d 20 70 61 72 65 6e 74  eckin, -- parent
26580 20 63 68 65 63 6b 69 6e 0a 20 20 78 74 6f 20 49   checkin.  xto I
26590 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c 20  NTEGER NOT NULL 
265a0 52 45 46 45 52 45 4e 43 45 53 20 63 68 65 63 6b  REFERENCES check
265b0 69 6e 2c 20 20 20 2d 2d 20 64 65 72 69 76 65 64  in,   -- derived
265c0 20 63 68 65 63 6b 69 6e 0a 20 20 50 52 49 4d 41   checkin.  PRIMA
265d0 52 59 20 4b 45 59 28 78 66 72 6f 6d 2c 78 74 6f  RY KEY(xfrom,xto
265e0 29 0a 29 3b 0a 43 52 45 41 54 45 20 49 4e 44 45  ).);.CREATE INDE
265f0 58 20 64 65 72 69 76 65 64 66 72 6f 6d 5f 62 61  X derivedfrom_ba
26600 63 6b 20 4f 4e 20 64 65 72 69 76 65 64 66 72 6f  ck ON derivedfro
26610 6d 28 78 74 6f 2c 78 66 72 6f 6d 29 3b 0a 3c 2f  m(xto,xfrom);.</
26620 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
26630 3e 0a 0a 3c 70 3e 54 68 69 73 20 67 72 61 70 68  >..<p>This graph
26640 20 69 73 20 61 63 79 63 6c 69 63 2e 20 20 41 6e   is acyclic.  An
26650 64 20 77 65 20 61 73 73 75 6d 65 20 74 68 61 74  d we assume that
26660 20 74 68 65 20 6d 74 69 6d 65 20 6f 66 20 65 76   the mtime of ev
26670 65 72 79 0a 63 68 69 6c 64 20 63 68 65 63 6b 69  ery.child checki
26680 6e 20 69 73 20 6e 6f 20 6c 65 73 73 20 74 68 61  n is no less tha
26690 6e 20 74 68 65 20 6d 74 69 6d 65 20 6f 66 20 61  n the mtime of a
266a0 6c 6c 20 69 74 73 20 70 61 72 65 6e 74 73 2e 20  ll its parents. 
266b0 20 42 75 74 0a 75 6e 6c 69 6b 65 20 74 68 65 20   But.unlike the 
266c0 65 61 72 6c 69 65 72 20 65 78 61 6d 70 6c 65 73  earlier examples
266d0 2c 20 74 68 69 73 20 67 72 61 70 68 20 6d 69 67  , this graph mig
266e0 68 74 20 68 61 76 65 20 6d 75 6c 74 69 70 6c 65  ht have multiple
266f0 20 70 61 74 68 73 20 6f 66 0a 64 69 66 66 65 72   paths of.differ
26700 69 6e 67 20 6c 65 6e 67 74 68 73 20 62 65 74 77  ing lengths betw
26710 65 65 6e 20 61 6e 79 20 74 77 6f 20 63 68 65 63  een any two chec
26720 6b 69 6e 73 2e 0a 0a 3c 70 3e 57 65 20 77 61 6e  kins...<p>We wan
26730 74 20 74 6f 20 6b 6e 6f 77 20 74 68 65 20 74 77  t to know the tw
26740 65 6e 74 79 20 6d 6f 73 74 20 72 65 63 65 6e 74  enty most recent
26750 20 61 6e 63 65 73 74 6f 72 73 20 69 6e 20 74 69   ancestors in ti
26760 6d 65 20 28 6f 75 74 20 6f 66 0a 74 68 65 20 74  me (out of.the t
26770 68 6f 75 73 61 6e 64 73 20 61 6e 64 20 74 68 6f  housands and tho
26780 75 73 61 6e 64 73 20 6f 66 20 61 6e 63 65 73 74  usands of ancest
26790 6f 72 73 20 69 6e 20 74 68 65 20 77 68 6f 6c 65  ors in the whole
267a0 20 44 41 47 29 20 66 6f 72 0a 63 68 65 63 6b 69   DAG) for.checki
267b0 6e 20 22 40 42 41 53 45 4c 49 4e 45 22 2e 20 20  n "@BASELINE".  
267c0 28 41 20 71 75 65 72 79 20 73 69 6d 69 6c 61 72  (A query similar
267d0 20 74 6f 20 74 68 69 73 20 69 73 20 75 73 65 64   to this is used
267e0 0a 62 79 20 74 68 65 20 3c 61 20 68 72 65 66 3d  .by the <a href=
267f0 22 68 74 74 70 3a 2f 2f 77 77 77 2e 66 6f 73 73  "http://www.foss
26800 69 6c 2d 73 63 6d 2e 6f 72 67 2f 22 3e 46 6f 73  il-scm.org/">Fos
26810 73 69 6c 3c 2f 61 3e 20 56 43 53 20 74 6f 0a 73  sil</a> VCS to.s
26820 68 6f 77 20 74 68 65 20 4e 20 6d 6f 73 74 20 72  how the N most r
26830 65 63 65 6e 74 20 61 6e 63 65 73 74 6f 72 73 20  ecent ancestors 
26840 6f 66 20 61 20 63 68 65 63 6b 2e 20 20 46 6f 72  of a check.  For
26850 20 65 78 61 6d 70 6c 65 3a 0a 3c 61 20 68 72 65   example:.<a hre
26860 66 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 73 71  f="http://www.sq
26870 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f 74 69 6d  lite.org/src/tim
26880 65 6c 69 6e 65 3f 70 3d 74 72 75 6e 6b 26 6e 3d  eline?p=trunk&n=
26890 33 30 22 3e 68 74 74 70 3a 2f 2f 77 77 77 2e 73  30">http://www.s
268a0 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f 74 69  qlite.org/src/ti
268b0 6d 65 6c 69 6e 65 3f 70 3d 74 72 75 6e 6b 26 6e  meline?p=trunk&n
268c0 3d 33 30 3c 2f 61 3e 2e 29 0a 0a 3c 62 6c 6f 63  =30</a>.)..<bloc
268d0 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54  kquote><pre>.WIT
268e0 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 61 6e  H RECURSIVE.  an
268f0 63 65 73 74 6f 72 28 69 64 2c 6d 74 69 6d 65 29  cestor(id,mtime)
26900 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54   AS (.    SELECT
26910 20 69 64 2c 20 6d 74 69 6d 65 20 46 52 4f 4d 20   id, mtime FROM 
26920 63 68 65 63 6b 69 6e 20 57 48 45 52 45 20 69 64  checkin WHERE id
26930 3d 40 42 41 53 45 4c 49 4e 45 0a 20 20 20 20 55  =@BASELINE.    U
26940 4e 49 4f 4e 0a 20 20 20 20 53 45 4c 45 43 54 20  NION.    SELECT 
26950 64 65 72 69 76 65 64 66 72 6f 6d 2e 78 66 72 6f  derivedfrom.xfro
26960 6d 2c 20 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65  m, checkin.mtime
26970 0a 20 20 20 20 20 20 46 52 4f 4d 20 61 6e 63 65  .      FROM ance
26980 73 74 6f 72 2c 20 64 65 72 69 76 65 64 66 72 6f  stor, derivedfro
26990 6d 2c 20 63 68 65 63 6b 69 6e 0a 20 20 20 20 20  m, checkin.     
269a0 57 48 45 52 45 20 61 6e 63 65 73 74 6f 72 2e 69  WHERE ancestor.i
269b0 64 3d 64 65 72 69 76 65 64 66 72 6f 6d 2e 78 74  d=derivedfrom.xt
269c0 6f 0a 20 20 20 20 20 20 20 41 4e 44 20 63 68 65  o.       AND che
269d0 63 6b 69 6e 2e 69 64 3d 64 65 72 69 76 65 64 66  ckin.id=derivedf
269e0 72 6f 6d 2e 78 66 72 6f 6d 0a 20 20 20 20 20 4f  rom.xfrom.     O
269f0 52 44 45 52 20 42 59 20 63 68 65 63 6b 69 6e 2e  RDER BY checkin.
26a00 6d 74 69 6d 65 20 44 45 53 43 0a 20 20 20 20 20  mtime DESC.     
26a10 4c 49 4d 49 54 20 32 30 0a 20 20 29 0a 53 45 4c  LIMIT 20.  ).SEL
26a20 45 43 54 20 2a 20 46 52 4f 4d 20 63 68 65 63 6b  ECT * FROM check
26a30 69 6e 20 4a 4f 49 4e 20 61 6e 63 65 73 74 6f 72  in JOIN ancestor
26a40 20 55 53 49 4e 47 28 69 64 29 3b 0a 3c 2f 70 72   USING(id);.</pr
26a50 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
26a60 0a 3c 70 3e 0a 54 68 65 20 22 4f 52 44 45 52 20  .<p>.The "ORDER 
26a70 42 59 20 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65  BY checkin.mtime
26a80 20 44 45 53 43 22 20 74 65 72 6d 20 69 6e 20 74   DESC" term in t
26a90 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c  he recursive-sel
26aa0 65 63 74 20 6d 61 6b 65 73 0a 74 68 65 20 71 75  ect makes.the qu
26ab0 65 72 79 20 72 75 6e 20 6d 75 63 68 20 66 61 73  ery run much fas
26ac0 74 65 72 20 62 79 20 70 72 65 76 65 6e 74 69 6e  ter by preventin
26ad0 67 20 69 74 20 66 72 6f 6d 20 66 6f 6c 6c 6f 77  g it from follow
26ae0 69 6e 67 0a 62 72 61 6e 63 68 65 73 20 74 68 61  ing.branches tha
26af0 74 20 6d 65 72 67 65 20 63 68 65 63 6b 69 6e 73  t merge checkins
26b00 0a 66 72 6f 6d 20 6c 6f 6e 67 20 61 67 6f 2e 20  .from long ago. 
26b10 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 66 6f   The ORDER BY fo
26b20 72 63 65 73 20 74 68 65 20 72 65 63 75 72 73 69  rces the recursi
26b30 76 65 2d 73 65 6c 65 63 74 20 74 6f 20 66 6f 63  ve-select to foc
26b40 75 73 0a 6f 6e 20 74 68 65 20 6d 6f 73 74 20 72  us.on the most r
26b50 65 63 65 6e 74 20 63 68 65 63 6b 69 6e 73 2c 20  ecent checkins, 
26b60 74 68 65 20 6f 6e 65 73 20 77 65 20 77 61 6e 74  the ones we want
26b70 2e 20 20 57 69 74 68 6f 75 74 20 74 68 65 20 4f  .  Without the O
26b80 52 44 45 52 20 42 59 0a 6f 6e 20 74 68 65 20 72  RDER BY.on the r
26b90 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c  ecursive-select,
26ba0 20 6f 6e 65 20 77 6f 75 6c 64 20 62 65 20 66 6f   one would be fo
26bb0 72 63 65 64 20 74 6f 20 63 6f 6d 70 75 74 65 20  rced to compute 
26bc0 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 73 65 74  the complete set
26bd0 20 6f 66 0a 74 68 6f 75 73 61 6e 64 73 20 6f 66   of.thousands of
26be0 20 61 6e 63 65 73 74 6f 72 73 2c 20 73 6f 72 74   ancestors, sort
26bf0 20 74 68 65 6d 20 61 6c 6c 20 62 79 20 6d 74 69   them all by mti
26c00 6d 65 2c 20 74 68 65 6e 20 74 61 6b 65 20 74 68  me, then take th
26c10 65 20 74 6f 70 20 74 77 65 6e 74 79 2e 0a 54 68  e top twenty..Th
26c20 65 20 4f 52 44 45 52 20 42 59 20 65 73 73 65 6e  e ORDER BY essen
26c30 74 69 61 6c 6c 79 20 73 65 74 73 20 75 70 20 61  tially sets up a
26c40 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20   priority queue 
26c50 74 68 61 74 0a 66 6f 72 63 65 73 20 74 68 65 20  that.forces the 
26c60 72 65 63 75 72 73 69 76 65 20 71 75 65 72 79 20  recursive query 
26c70 74 6f 20 6c 6f 6f 6b 20 61 74 20 74 68 65 20 6d  to look at the m
26c80 6f 73 74 20 72 65 63 65 6e 74 20 61 6e 63 65 73  ost recent ances
26c90 74 6f 72 73 20 66 69 72 73 74 2c 0a 61 6c 6c 6f  tors first,.allo
26ca0 77 69 6e 67 20 74 68 65 20 75 73 65 20 6f 66 20  wing the use of 
26cb0 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 74  a LIMIT clause t
26cc0 6f 20 72 65 73 74 72 69 63 74 20 74 68 65 20 73  o restrict the s
26cd0 63 6f 70 65 20 6f 66 20 74 68 65 0a 71 75 65 72  cope of the.quer
26ce0 79 20 74 6f 20 6a 75 73 74 20 74 68 65 20 63 68  y to just the ch
26cf0 65 63 6b 69 6e 73 20 6f 66 20 69 6e 74 65 72 65  eckins of intere
26d00 73 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  st...<tcl>hd_fra
26d10 67 6d 65 6e 74 20 77 69 74 68 6f 72 64 65 72 62  gment withorderb
26d20 79 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 43 6f 6e 74  y</tcl>.<h4>Cont
26d30 72 6f 6c 6c 69 6e 67 20 44 65 70 74 68 2d 46 69  rolling Depth-Fi
26d40 72 73 74 20 56 65 72 73 75 73 20 42 72 65 61 64  rst Versus Bread
26d50 74 68 2d 46 69 72 73 74 20 53 65 61 72 63 68 20  th-First Search 
26d60 4f 66 20 61 20 54 72 65 65 0a 55 73 69 6e 67 20  Of a Tree.Using 
26d70 4f 52 44 45 52 20 42 59 3c 2f 68 34 3e 0a 0a 3c  ORDER BY</h4>..<
26d80 70 3e 41 6e 20 4f 52 44 45 52 20 42 59 20 63 6c  p>An ORDER BY cl
26d90 61 75 73 65 20 6f 6e 20 74 68 65 20 72 65 63 75  ause on the recu
26da0 72 73 69 76 65 2d 73 65 6c 65 63 74 20 63 61 6e  rsive-select can
26db0 20 62 65 20 75 73 65 64 20 74 6f 20 63 6f 6e 74   be used to cont
26dc0 72 6f 6c 0a 77 68 65 74 68 65 72 20 74 68 65 20  rol.whether the 
26dd0 73 65 61 72 63 68 20 6f 66 20 61 20 74 72 65 65  search of a tree
26de0 20 69 73 20 64 65 70 74 68 2d 66 69 72 73 74 20   is depth-first 
26df0 6f 72 20 62 72 65 61 64 74 68 2d 66 69 72 73 74  or breadth-first
26e00 2e 20 20 54 6f 0a 69 6c 6c 75 73 74 72 61 74 65  .  To.illustrate
26e10 2c 20 77 65 20 77 69 6c 6c 20 75 73 65 20 61 20  , we will use a 
26e20 76 61 72 69 61 74 69 6f 6e 20 6f 6e 20 74 68 65  variation on the
26e30 20 22 6f 72 67 22 20 74 61 62 6c 65 20 66 72 6f   "org" table fro
26e40 6d 20 61 6e 20 65 78 61 6d 70 6c 65 0a 61 62 6f  m an example.abo
26e50 76 65 2c 20 77 69 74 68 6f 75 74 20 74 68 65 20  ve, without the 
26e60 22 68 65 69 67 68 74 22 20 63 6f 6c 75 6d 6e 2c  "height" column,
26e70 20 61 6e 64 20 77 69 74 68 20 73 6f 6d 65 20 72   and with some r
26e80 65 61 6c 20 64 61 74 61 20 69 6e 73 65 72 74 65  eal data inserte
26e90 64 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  d:..<blockquote>
26ea0 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42  <pre>.CREATE TAB
26eb0 4c 45 20 6f 72 67 28 0a 20 20 6e 61 6d 65 20 54  LE org(.  name T
26ec0 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  EXT PRIMARY KEY,
26ed0 0a 20 20 62 6f 73 73 20 54 45 58 54 20 52 45 46  .  boss TEXT REF
26ee0 45 52 45 4e 43 45 53 20 6f 72 67 0a 29 20 57 49  ERENCES org.) WI
26ef0 54 48 4f 55 54 20 52 4f 57 49 44 3b 0a 49 4e 53  THOUT ROWID;.INS
26f00 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c  ERT INTO org VAL
26f10 55 45 53 28 27 41 6c 69 63 65 27 2c 4e 55 4c 4c  UES('Alice',NULL
26f20 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f  );.INSERT INTO o
26f30 72 67 20 56 41 4c 55 45 53 28 27 42 6f 62 27 2c  rg VALUES('Bob',
26f40 27 41 6c 69 63 65 27 29 3b 0a 49 4e 53 45 52 54  'Alice');.INSERT
26f50 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53   INTO org VALUES
26f60 28 27 43 69 6e 64 79 27 2c 27 41 6c 69 63 65 27  ('Cindy','Alice'
26f70 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f  );.INSERT INTO o
26f80 72 67 20 56 41 4c 55 45 53 28 27 44 61 76 65 27  rg VALUES('Dave'
26f90 2c 27 42 6f 62 27 29 3b 0a 49 4e 53 45 52 54 20  ,'Bob');.INSERT 
26fa0 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28  INTO org VALUES(
26fb0 27 45 6d 6d 61 27 2c 27 42 6f 62 27 29 3b 0a 49  'Emma','Bob');.I
26fc0 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56  NSERT INTO org V
26fd0 41 4c 55 45 53 28 27 46 72 65 64 27 2c 27 43 69  ALUES('Fred','Ci
26fe0 6e 64 79 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e  ndy');.INSERT IN
26ff0 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27 47  TO org VALUES('G
27000 61 69 6c 27 2c 27 43 69 6e 64 79 27 29 3b 0a 3c  ail','Cindy');.<
27010 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
27020 65 3e 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20 61  e>..<p>Here is a
27030 20 71 75 65 72 79 20 74 6f 20 73 68 6f 77 20 74   query to show t
27040 68 65 20 74 72 65 65 20 73 74 72 75 63 74 75 72  he tree structur
27050 65 20 69 6e 20 61 20 62 72 65 61 64 74 68 2d 66  e in a breadth-f
27060 69 72 73 74 20 70 61 74 74 65 72 6e 3a 0a 0a 3c  irst pattern:..<
27070 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
27080 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a  .WITH RECURSIVE.
27090 20 20 75 6e 64 65 72 5f 61 6c 69 63 65 28 6e 61    under_alice(na
270a0 6d 65 2c 6c 65 76 65 6c 29 20 41 53 20 28 0a 20  me,level) AS (. 
270b0 20 20 20 56 41 4c 55 45 53 28 27 41 6c 69 63 65     VALUES('Alice
270c0 27 2c 30 29 0a 20 20 20 20 55 4e 49 4f 4e 20 41  ',0).    UNION A
270d0 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 20 6f 72  LL.    SELECT or
270e0 67 2e 6e 61 6d 65 2c 20 75 6e 64 65 72 5f 61 6c  g.name, under_al
270f0 69 63 65 2e 6c 65 76 65 6c 2b 31 0a 20 20 20 20  ice.level+1.    
27100 20 20 46 52 4f 4d 20 6f 72 67 20 4a 4f 49 4e 20    FROM org JOIN 
27110 75 6e 64 65 72 5f 61 6c 69 63 65 20 4f 4e 20 6f  under_alice ON o
27120 72 67 2e 62 6f 73 73 3d 75 6e 64 65 72 5f 61 6c  rg.boss=under_al
27130 69 63 65 2e 6e 61 6d 65 0a 20 20 20 20 20 4f 52  ice.name.     OR
27140 44 45 52 20 42 59 20 32 0a 20 20 29 0a 53 45 4c  DER BY 2.  ).SEL
27150 45 43 54 20 73 75 62 73 74 72 28 27 2e 2e 2e 2e  ECT substr('....
27160 2e 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65 76 65 6c 2a  ......',1,level*
27170 33 29 20 7c 7c 20 6e 61 6d 65 20 46 52 4f 4d 20  3) || name FROM 
27180 75 6e 64 65 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70  under_alice;.</p
27190 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
271a0 0a 0a 3c 70 3e 54 68 65 20 22 4f 52 44 45 52 20  ..<p>The "ORDER 
271b0 42 59 20 32 22 20 28 77 68 69 63 68 20 6d 65 61  BY 2" (which mea
271c0 6e 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 22  ns the same as "
271d0 4f 52 44 45 52 20 42 59 20 75 6e 64 65 72 5f 61  ORDER BY under_a
271e0 6c 69 63 65 2e 6c 65 76 65 6c 2b 31 22 29 0a 63  lice.level+1").c
271f0 61 75 73 65 73 20 68 69 67 68 65 72 20 6c 65 76  auses higher lev
27200 65 6c 73 20 69 6e 20 74 68 65 20 6f 72 67 61 6e  els in the organ
27210 69 7a 61 74 69 6f 6e 20 63 68 61 72 74 20 28 77  ization chart (w
27220 69 74 68 20 73 6d 61 6c 6c 65 72 20 22 6c 65 76  ith smaller "lev
27230 65 6c 22 20 76 61 6c 75 65 73 29 0a 74 6f 20 62  el" values).to b
27240 65 20 70 72 6f 63 65 73 73 65 64 20 66 69 72 73  e processed firs
27250 74 2c 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20  t, resulting in 
27260 61 20 62 72 65 61 64 74 68 2d 66 69 72 73 74 20  a breadth-first 
27270 73 65 61 72 63 68 2e 20 20 54 68 65 20 6f 75 74  search.  The out
27280 70 75 74 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71  put is:..<blockq
27290 75 6f 74 65 3e 3c 70 72 65 3e 0a 41 6c 69 63 65  uote><pre>.Alice
272a0 0a 2e 2e 2e 42 6f 62 0a 2e 2e 2e 43 69 6e 64 79  ....Bob....Cindy
272b0 0a 2e 2e 2e 2e 2e 2e 44 61 76 65 0a 2e 2e 2e 2e  .......Dave.....
272c0 2e 2e 45 6d 6d 61 0a 2e 2e 2e 2e 2e 2e 46 72 65  ..Emma.......Fre
272d0 64 0a 2e 2e 2e 2e 2e 2e 47 61 69 6c 0a 3c 2f 70  d.......Gail.</p
272e0 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
272f0 0a 0a 3c 70 3e 42 75 74 20 69 66 20 77 65 20 63  ..<p>But if we c
27300 68 61 6e 67 65 20 74 68 65 20 4f 52 44 45 52 20  hange the ORDER 
27310 42 59 20 63 6c 61 75 73 65 20 74 6f 20 61 64 64  BY clause to add
27320 20 74 68 65 20 22 44 45 53 43 22 20 6d 6f 64 69   the "DESC" modi
27330 66 69 65 72 2c 20 74 68 61 74 20 77 69 6c 6c 0a  fier, that will.
27340 63 61 75 73 65 20 6c 6f 77 65 72 20 6c 65 76 65  cause lower leve
27350 6c 73 20 69 6e 20 74 68 65 20 6f 72 67 61 6e 69  ls in the organi
27360 7a 61 74 69 6f 6e 20 28 77 69 74 68 20 6c 61 72  zation (with lar
27370 67 65 72 20 22 6c 65 76 65 6c 22 20 76 61 6c 75  ger "level" valu
27380 65 73 29 20 74 6f 20 62 65 0a 70 72 6f 63 65 73  es) to be.proces
27390 73 65 64 20 66 69 72 73 74 20 62 79 20 74 68 65  sed first by the
273a0 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63   recursive-selec
273b0 74 2c 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20  t, resulting in 
273c0 61 20 64 65 70 74 68 2d 66 69 72 73 74 20 73 65  a depth-first se
273d0 61 72 63 68 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  arch:..<blockquo
273e0 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45  te><pre>.WITH RE
273f0 43 55 52 53 49 56 45 0a 20 20 75 6e 64 65 72 5f  CURSIVE.  under_
27400 61 6c 69 63 65 28 6e 61 6d 65 2c 6c 65 76 65 6c  alice(name,level
27410 29 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45  ) AS (.    VALUE
27420 53 28 27 41 6c 69 63 65 27 2c 30 29 0a 20 20 20  S('Alice',0).   
27430 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53   UNION ALL.    S
27440 45 4c 45 43 54 20 6f 72 67 2e 6e 61 6d 65 2c 20  ELECT org.name, 
27450 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6c 65 76 65  under_alice.leve
27460 6c 2b 31 0a 20 20 20 20 20 20 46 52 4f 4d 20 6f  l+1.      FROM o
27470 72 67 20 4a 4f 49 4e 20 75 6e 64 65 72 5f 61 6c  rg JOIN under_al
27480 69 63 65 20 4f 4e 20 6f 72 67 2e 62 6f 73 73 3d  ice ON org.boss=
27490 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6e 61 6d 65  under_alice.name
274a0 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 32  .     ORDER BY 2
274b0 20 3c 62 3e 44 45 53 43 3c 2f 62 3e 0a 20 20 29   <b>DESC</b>.  )
274c0 0a 53 45 4c 45 43 54 20 73 75 62 73 74 72 28 27  .SELECT substr('
274d0 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65  ..........',1,le
274e0 76 65 6c 2a 33 29 20 7c 7c 20 6e 61 6d 65 20 46  vel*3) || name F
274f0 52 4f 4d 20 75 6e 64 65 72 5f 61 6c 69 63 65 3b  ROM under_alice;
27500 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
27510 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74  ote>..<p>The out
27520 70 75 74 20 6f 66 20 74 68 69 73 20 72 65 76 69  put of this revi
27530 73 65 64 20 71 75 65 72 79 20 69 73 3a 0a 0a 3c  sed query is:..<
27540 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
27550 0a 41 6c 69 63 65 0a 2e 2e 2e 42 6f 62 0a 2e 2e  .Alice....Bob...
27560 2e 2e 2e 2e 44 61 76 65 0a 2e 2e 2e 2e 2e 2e 45  ....Dave.......E
27570 6d 6d 61 0a 2e 2e 2e 43 69 6e 64 79 0a 2e 2e 2e  mma....Cindy....
27580 2e 2e 2e 46 72 65 64 0a 2e 2e 2e 2e 2e 2e 47 61  ...Fred.......Ga
27590 69 6c 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  il.</pre></block
275a0 71 75 6f 74 65 3e 0a 0a 3c 70 3e 57 68 65 6e 20  quote>..<p>When 
275b0 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
275c0 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64 20 66  use is omitted f
275d0 72 6f 6d 20 74 68 65 20 72 65 63 75 72 73 69 76  rom the recursiv
275e0 65 2d 73 65 6c 65 63 74 2c 20 74 68 65 0a 71 75  e-select, the.qu
275f0 65 75 65 20 62 65 68 61 76 65 73 20 61 73 20 61  eue behaves as a
27600 20 46 49 46 4f 2c 20 77 68 69 63 68 20 72 65 73   FIFO, which res
27610 75 6c 74 73 20 69 6e 20 61 20 62 72 65 61 64 74  ults in a breadt
27620 68 2d 66 69 72 73 74 20 73 65 61 72 63 68 2e 0a  h-first search..
27630 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
27640 6e 74 20 6d 61 6e 64 65 6c 62 72 6f 74 20 7b 63  nt mandelbrot {c
27650 6f 6d 70 75 74 65 20 74 68 65 20 4d 61 6e 64 65  ompute the Mande
27660 6c 62 72 6f 74 20 73 65 74 7d 3c 2f 74 63 6c 3e  lbrot set}</tcl>
27670 0a 3c 68 34 3e 4f 75 74 6c 61 6e 64 69 73 68 20  .<h4>Outlandish 
27680 52 65 63 75 72 73 69 76 65 20 51 75 65 72 79 20  Recursive Query 
27690 45 78 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a 0a 3c  Examples</h4>..<
276a0 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  p>The following 
276b0 71 75 65 72 79 20 63 6f 6d 70 75 74 65 73 20 61  query computes a
276c0 6e 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  n approximation 
276d0 6f 66 20 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f  of the Mandelbro
276e0 74 20 53 65 74 0a 61 6e 64 20 6f 75 74 70 75 74  t Set.and output
276f0 73 20 74 68 65 20 72 65 73 75 6c 74 20 61 73 20  s the result as 
27700 41 53 43 49 49 2d 61 72 74 3a 0a 0a 3c 62 6c 6f  ASCII-art:..<blo
27710 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49  ckquote><pre>.WI
27720 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 78  TH RECURSIVE.  x
27730 61 78 69 73 28 78 29 20 41 53 20 28 56 41 4c 55  axis(x) AS (VALU
27740 45 53 28 2d 32 2e 30 29 20 55 4e 49 4f 4e 20 41  ES(-2.0) UNION A
27750 4c 4c 20 53 45 4c 45 43 54 20 78 2b 30 2e 30 35  LL SELECT x+0.05
27760 20 46 52 4f 4d 20 78 61 78 69 73 20 57 48 45 52   FROM xaxis WHER
27770 45 20 78 26 6c 74 3b 31 2e 32 29 2c 0a 20 20 79  E x&lt;1.2),.  y
27780 61 78 69 73 28 79 29 20 41 53 20 28 56 41 4c 55  axis(y) AS (VALU
27790 45 53 28 2d 31 2e 30 29 20 55 4e 49 4f 4e 20 41  ES(-1.0) UNION A
277a0 4c 4c 20 53 45 4c 45 43 54 20 79 2b 30 2e 31 20  LL SELECT y+0.1 
277b0 46 52 4f 4d 20 79 61 78 69 73 20 57 48 45 52 45  FROM yaxis WHERE
277c0 20 79 26 6c 74 3b 31 2e 30 29 2c 0a 20 20 6d 28   y&lt;1.0),.  m(
277d0 69 74 65 72 2c 20 63 78 2c 20 63 79 2c 20 78 2c  iter, cx, cy, x,
277e0 20 79 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c   y) AS (.    SEL
277f0 45 43 54 20 30 2c 20 78 2c 20 79 2c 20 30 2e 30  ECT 0, x, y, 0.0
27800 2c 20 30 2e 30 20 46 52 4f 4d 20 78 61 78 69 73  , 0.0 FROM xaxis
27810 2c 20 79 61 78 69 73 0a 20 20 20 20 55 4e 49 4f  , yaxis.    UNIO
27820 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54  N ALL.    SELECT
27830 20 69 74 65 72 2b 31 2c 20 63 78 2c 20 63 79 2c   iter+1, cx, cy,
27840 20 78 2a 78 2d 79 2a 79 20 2b 20 63 78 2c 20 32   x*x-y*y + cx, 2
27850 2e 30 2a 78 2a 79 20 2b 20 63 79 20 46 52 4f 4d  .0*x*y + cy FROM
27860 20 6d 20 0a 20 20 20 20 20 57 48 45 52 45 20 28   m .     WHERE (
27870 78 2a 78 20 2b 20 79 2a 79 29 20 26 6c 74 3b 20  x*x + y*y) &lt; 
27880 34 2e 30 20 41 4e 44 20 69 74 65 72 26 6c 74 3b  4.0 AND iter&lt;
27890 32 38 0a 20 20 29 2c 0a 20 20 6d 32 28 69 74 65  28.  ),.  m2(ite
278a0 72 2c 20 63 78 2c 20 63 79 29 20 41 53 20 28 0a  r, cx, cy) AS (.
278b0 20 20 20 20 53 45 4c 45 43 54 20 6d 61 78 28 69      SELECT max(i
278c0 74 65 72 29 2c 20 63 78 2c 20 63 79 20 46 52 4f  ter), cx, cy FRO
278d0 4d 20 6d 20 47 52 4f 55 50 20 42 59 20 63 78 2c  M m GROUP BY cx,
278e0 20 63 79 0a 20 20 29 2c 0a 20 20 61 28 74 29 20   cy.  ),.  a(t) 
278f0 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20  AS (.    SELECT 
27900 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 20 73 75  group_concat( su
27910 62 73 74 72 28 27 20 2e 2b 2a 23 27 2c 20 31 2b  bstr(' .+*#', 1+
27920 6d 69 6e 28 69 74 65 72 2f 37 2c 34 29 2c 20 31  min(iter/7,4), 1
27930 29 2c 20 27 27 29 20 0a 20 20 20 20 46 52 4f 4d  ), '') .    FROM
27940 20 6d 32 20 47 52 4f 55 50 20 42 59 20 63 79 0a   m2 GROUP BY cy.
27950 20 20 29 0a 53 45 4c 45 43 54 20 67 72 6f 75 70    ).SELECT group
27960 5f 63 6f 6e 63 61 74 28 72 74 72 69 6d 28 74 29  _concat(rtrim(t)
27970 2c 78 27 30 61 27 29 20 46 52 4f 4d 20 61 3b 0a  ,x'0a') FROM a;.
27980 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
27990 74 65 3e 0a 0a 3c 70 3e 49 6e 20 74 68 69 73 20  te>..<p>In this 
279a0 71 75 65 72 79 2c 20 74 68 65 20 22 78 61 78 69  query, the "xaxi
279b0 73 22 20 61 6e 64 20 22 79 61 78 69 73 22 20 43  s" and "yaxis" C
279c0 54 45 73 20 64 65 66 69 6e 65 20 74 68 65 20 67  TEs define the g
279d0 72 69 64 20 6f 66 20 70 6f 69 6e 74 73 20 66 6f  rid of points fo
279e0 72 0a 77 68 69 63 68 20 74 68 65 20 4d 61 6e 64  r.which the Mand
279f0 65 6c 62 72 6f 74 20 53 65 74 20 77 69 6c 6c 20  elbrot Set will 
27a00 62 65 20 61 70 70 72 6f 78 69 6d 61 74 65 64 2e  be approximated.
27a10 20 20 45 61 63 68 20 72 6f 77 20 69 6e 20 74 68    Each row in th
27a20 65 0a 22 6d 28 69 74 65 72 2c 63 78 2c 63 79 2c  e."m(iter,cx,cy,
27a30 78 2c 79 29 22 20 43 54 45 20 6d 65 61 6e 73 20  x,y)" CTE means 
27a40 74 68 61 74 20 61 66 74 65 72 20 22 69 74 65 72  that after "iter
27a50 22 20 69 74 65 72 61 74 69 6f 6e 73 2c 20 74 68  " iterations, th
27a60 65 20 4d 61 6e 64 65 6c 62 72 6f 74 0a 69 74 65  e Mandelbrot.ite
27a70 72 61 74 69 6f 6e 20 73 74 61 72 74 69 6e 67 20  ration starting 
27a80 61 74 20 63 78 2c 63 79 20 68 61 73 20 72 65 61  at cx,cy has rea
27a90 63 68 65 64 20 70 6f 69 6e 74 20 78 2c 79 2e 20  ched point x,y. 
27aa0 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 69   The number of i
27ab0 74 65 72 61 74 69 6f 6e 73 0a 69 6e 20 74 68 69  terations.in thi
27ac0 73 20 65 78 61 6d 70 6c 65 20 69 73 20 6c 69 6d  s example is lim
27ad0 69 74 65 64 20 74 6f 20 32 38 20 28 77 68 69 63  ited to 28 (whic
27ae0 68 20 73 65 76 65 72 65 6c 79 20 6c 69 6d 69 74  h severely limit
27af0 73 20 74 68 65 20 72 65 73 6f 6c 75 74 69 6f 6e  s the resolution
27b00 20 6f 66 0a 74 68 65 20 63 6f 6d 70 75 74 61 74   of.the computat
27b10 69 6f 6e 2c 20 62 75 74 20 69 73 20 73 75 66 66  ion, but is suff
27b20 69 63 69 65 6e 74 20 66 6f 72 20 6c 6f 77 2d 72  icient for low-r
27b30 65 73 6f 6c 75 74 69 6f 6e 20 41 53 43 49 49 2d  esolution ASCII-
27b40 61 72 74 20 6f 75 74 70 75 74 29 2e 0a 54 68 65  art output)..The
27b50 20 22 6d 32 28 69 74 65 72 2c 63 78 2c 63 79 29   "m2(iter,cx,cy)
27b60 22 20 43 54 45 20 68 6f 6c 64 73 20 74 68 65 20  " CTE holds the 
27b70 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
27b80 66 20 69 74 65 72 61 74 69 6f 6e 73 20 72 65 61  f iterations rea
27b90 63 68 65 64 20 77 68 65 6e 0a 73 74 61 72 74 69  ched when.starti
27ba0 6e 67 20 61 74 20 70 6f 69 6e 74 20 63 78 2c 63  ng at point cx,c
27bb0 79 2e 0a 46 69 6e 61 6c 6c 79 2c 20 65 61 63 68  y..Finally, each
27bc0 20 72 6f 77 20 69 6e 20 74 68 65 20 22 61 28 74   row in the "a(t
27bd0 29 22 20 43 54 45 20 68 6f 6c 64 73 20 61 20 73  )" CTE holds a s
27be0 74 72 69 6e 67 20 0a 77 68 69 63 68 20 69 73 20  tring .which is 
27bf0 61 20 73 69 6e 67 6c 65 20 6c 69 6e 65 20 6f 66  a single line of
27c00 20 74 68 65 20 6f 75 74 70 75 74 20 41 53 43 49   the output ASCI
27c10 49 2d 61 72 74 2e 0a 54 68 65 20 53 45 4c 45 43  I-art..The SELEC
27c20 54 20 73 74 61 74 65 6d 65 6e 74 20 61 74 20 74  T statement at t
27c30 68 65 20 65 6e 64 20 6a 75 73 74 20 71 75 65 72  he end just quer
27c40 69 65 73 20 74 68 65 20 22 61 22 20 43 54 45 20  ies the "a" CTE 
27c50 74 6f 0a 72 65 74 72 69 65 76 65 20 61 6c 6c 20  to.retrieve all 
27c60 6c 69 6e 65 73 20 6f 66 20 41 53 43 49 49 2d 61  lines of ASCII-a
27c70 72 74 2c 20 6f 6e 65 20 62 79 20 6f 6e 65 2e 0a  rt, one by one..
27c80 0a 3c 70 3e 52 75 6e 6e 69 6e 67 20 74 68 65 20  .<p>Running the 
27c90 71 75 65 72 79 20 61 62 6f 76 65 20 69 6e 20 61  query above in a
27ca0 6e 20 53 51 4c 69 74 65 20 5b 63 6f 6d 6d 61 6e  n SQLite [comman
27cb0 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 5d 20 72 65  d-line shell] re
27cc0 73 75 6c 74 73 0a 69 6e 20 74 68 65 20 66 6f 6c  sults.in the fol
27cd0 6c 6f 77 69 6e 67 20 6f 75 74 70 75 74 3a 0a 0a  lowing output:..
27ce0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
27cf0 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  >.              
27d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d10 20 20 20 20 20 20 2e 2e 2e 2e 23 0a 20 20 20 20        ....#.    
27d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
27d40 2e 23 2a 2e 2e 0a 20 20 20 20 20 20 20 20 20 20  .#*...          
27d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d60 20 20 20 20 20 20 20 2e 2e 2b 23 23 23 23 2b 2e         ..+####+.
27d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27d80 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e               ...
27d90 2e 2e 2e 2e 2b 23 23 23 23 2e 2e 2e 2e 20 20 20  ....+####....   
27da0 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  +.              
27db0 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 23               ..#
27dc0 23 2b 2a 23 23 23 23 23 23 23 23 23 23 2b 2e 2b  #+*##########+.+
27dd0 2b 2b 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +++.            
27de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2b                .+
27df0 2e 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
27e00 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20  ###+..          
27e10 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e      ............
27e20 2e 2b 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .+##############
27e30 23 23 23 23 23 2b 2e 2b 0a 20 20 20 20 20 20 20  #####+.+.       
27e40 20 20 20 20 20 20 20 2e 2e 2b 2b 2e 2e 23 2e 2e         ..++..#..
27e50 2e 2e 2e 2a 23 23 23 23 23 23 23 23 23 23 23 23  ...*############
27e60 23 23 23 23 23 23 23 23 23 2b 2e 0a 20 20 20 20  #########+..    
27e70 20 20 20 20 20 20 20 20 20 2e 2e 2e 2b 23 23 23           ...+###
27e80 23 23 23 23 2b 2b 23 23 23 23 23 23 23 23 23 23  ####++##########
27e90 23 23 23 23 23 23 23 23 23 23 23 23 23 2e 0a 20  #############.. 
27ea0 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2b 2a 23           ....+*#
27eb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27ec0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2e  ###############.
27ed0 0a 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23  . ##############
27ee0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27ef0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2e  ###############.
27f00 2e 2e 0a 20 20 20 20 20 20 20 20 20 20 2e 2e 2e  ...          ...
27f10 2e 2b 2a 23 23 23 23 23 23 23 23 23 23 23 23 23  .+*#############
27f20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27f30 23 23 23 2e 0a 20 20 20 20 20 20 20 20 20 20 20  ###..           
27f40 20 20 2e 2e 2e 2b 23 23 23 23 23 23 23 2b 2b 23    ...+#######++#
27f50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27f60 23 23 23 23 23 23 2e 0a 20 20 20 20 20 20 20 20  ######..        
27f70 20 20 20 20 20 20 2e 2e 2b 2b 2e 2e 23 2e 2e 2e        ..++..#...
27f80 2e 2e 2a 23 23 23 23 23 23 23 23 23 23 23 23 23  ..*#############
27f90 23 23 23 23 23 23 23 23 2b 2e 0a 20 20 20 20 20  ########+..     
27fa0 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e           .......
27fb0 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 23 23 23 23 23  ......+#########
27fc0 23 23 23 23 23 23 23 23 23 23 2b 2e 2b 0a 20 20  ##########+.+.  
27fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27fe0 20 20 20 20 20 20 20 20 2e 2b 2e 23 23 23 23 23          .+.#####
27ff0 23 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e 0a  #############+..
28000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28010 20 20 20 20 20 20 20 20 20 20 20 2e 2e 23 23 2b             ..##+
28020 2a 23 23 23 23 23 23 23 23 23 23 2b 2e 2b 2b 2b  *##########+.+++
28030 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  +.              
28040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e                ..
28050 2e 2e 2e 2e 2e 2b 23 23 23 23 2e 2e 2e 2e 20 20  .....+####....  
28060 20 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   +.             
28070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28080 20 20 20 20 2e 2e 2b 23 23 23 23 2b 2e 0a 20 20      ..+####+..  
28090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280b0 20 2e 2e 23 2a 2e 2e 0a 20 20 20 20 20 20 20 20   ..#*...        
280c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280d0 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e              ....
280e0 23 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  #.              
280f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28100 20 20 20 20 20 20 2b 2e 0a 3c 2f 70 72 65 3e 3c        +..</pre><
28110 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 74  /blockquote>..<t
28120 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73  cl>hd_fragment s
28130 75 64 6f 6b 75 20 7b 73 6f 6c 76 65 20 53 75 64  udoku {solve Sud
28140 6f 6b 75 20 70 75 7a 7a 6c 65 73 7d 20 3c 2f 74  oku puzzles} </t
28150 63 6c 3e 0a 3c 70 3e 54 68 69 73 20 6e 65 78 74  cl>.<p>This next
28160 20 71 75 65 72 79 20 73 6f 6c 76 65 73 20 61 20   query solves a 
28170 53 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 2e 20 20  Sudoku puzzle.  
28180 54 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65  The state of the
28190 20 70 75 7a 7a 6c 65 20 69 73 0a 64 65 66 69 6e   puzzle is.defin
281a0 65 64 20 62 79 20 61 6e 20 38 31 2d 63 68 61 72  ed by an 81-char
281b0 61 63 74 65 72 20 73 74 72 69 6e 67 20 66 6f 72  acter string for
281c0 6d 65 64 20 62 79 20 72 65 61 64 69 6e 67 20 65  med by reading e
281d0 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 0a  ntries from the.
281e0 70 75 7a 7a 6c 65 20 62 6f 78 20 72 6f 77 20 62  puzzle box row b
281f0 79 20 72 6f 77 20 66 72 6f 6d 20 6c 65 66 74 20  y row from left 
28200 74 6f 20 72 69 67 68 74 20 61 6e 64 20 74 68 65  to right and the
28210 6e 20 66 72 6f 6d 20 74 6f 70 20 74 6f 20 62 6f  n from top to bo
28220 74 74 6f 6d 2e 0a 42 6c 61 6e 6b 20 73 71 75 61  ttom..Blank squa
28230 72 65 73 20 69 6e 20 74 68 65 20 70 75 7a 7a 6c  res in the puzzl
28240 65 20 61 72 65 20 64 65 6e 6f 74 65 64 20 62 79  e are denoted by
28250 20 61 20 22 2e 22 20 63 68 61 72 61 63 74 65 72   a "." character
28260 2e 20 20 0a 54 68 75 73 20 74 68 65 20 69 6e 70  .  .Thus the inp
28270 75 74 20 73 74 72 69 6e 67 3a 0a 0a 3c 62 6c 6f  ut string:..<blo
28280 63 6b 71 75 6f 74 65 3e 0a 35 33 2e 2e 37 2e 2e  ckquote>.53..7..
28290 2e 2e 36 2e 2e 31 39 35 2e 2e 2e 2e 39 38 2e 2e  ..6..195....98..
282a0 2e 2e 36 2e 38 2e 2e 2e 36 2e 2e 2e 33 34 2e 2e  ..6.8...6...34..
282b0 38 2e 33 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e 36 2e  8.3..17...2...6.
282c0 36 2e 2e 2e 2e 32 38 2e 2e 2e 2e 34 31 39 2e 2e  6....28....419..
282d0 35 2e 2e 2e 2e 38 2e 2e 37 39 0a 3c 2f 62 6c 6f  5....8..79.</blo
282e0 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 72  ckquote>..<p>Cor
282f0 72 65 73 70 6f 6e 64 73 20 74 6f 20 61 20 70 75  responds to a pu
28300 7a 7a 6c 65 20 6c 69 6b 65 20 74 68 69 73 3a 0a  zzle like this:.
28310 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74  .<blockquote>.<t
28320 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 31 22 20  able border="1" 
28330 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35 22 3e  cellpadding="5">
28340 0a 3c 74 72 3e 3c 74 64 3e 35 3c 74 64 3e 33 3c  .<tr><td>5<td>3<
28350 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 37 3c 74  td> <td> <td>7<t
28360 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d> <td> <td> <td
28370 3e 0a 3c 74 72 3e 3c 74 64 3e 36 3c 74 64 3e 20  >.<tr><td>6<td> 
28380 3c 74 64 3e 20 3c 74 64 3e 31 3c 74 64 3e 39 3c  <td> <td>1<td>9<
28390 74 64 3e 35 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td>5<td> <td> <t
283a0 64 3e 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e  d>.<tr><td> <td>
283b0 39 3c 74 64 3e 38 3c 74 64 3e 20 3c 74 64 3e 20  9<td>8<td> <td> 
283c0 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 36 3c  <td> <td> <td>6<
283d0 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 38 3c 74 64  td>.<tr><td>8<td
283e0 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  > <td> <td> <td>
283f0 36 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20  6<td> <td> <td> 
28400 3c 74 64 3e 33 0a 3c 74 72 3e 3c 74 64 3e 34 3c  <td>3.<tr><td>4<
28410 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 38 3c 74  td> <td> <td>8<t
28420 64 3e 20 3c 74 64 3e 33 3c 74 64 3e 20 3c 74 64  d> <td>3<td> <td
28430 3e 20 3c 74 64 3e 31 0a 3c 74 72 3e 3c 74 64 3e  > <td>1.<tr><td>
28440 37 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20  7<td> <td> <td> 
28450 3c 74 64 3e 32 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>2<td> <td> <
28460 74 64 3e 20 3c 74 64 3e 36 0a 3c 74 72 3e 3c 74  td> <td>6.<tr><t
28470 64 3e 20 3c 74 64 3e 36 3c 74 64 3e 20 3c 74 64  d> <td>6<td> <td
28480 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  > <td> <td> <td>
28490 32 3c 74 64 3e 38 3c 74 64 3e 0a 3c 74 72 3e 3c  2<td>8<td>.<tr><
284a0 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td> <td> <td> <t
284b0 64 3e 34 3c 74 64 3e 31 3c 74 64 3e 39 3c 74 64  d>4<td>1<td>9<td
284c0 3e 20 3c 74 64 3e 20 3c 74 64 3e 35 0a 3c 74 72  > <td> <td>5.<tr
284d0 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20  ><td> <td> <td> 
284e0 3c 74 64 3e 20 3c 74 64 3e 38 3c 74 64 3e 20 3c  <td> <td>8<td> <
284f0 74 64 3e 20 3c 74 64 3e 37 3c 74 64 3e 39 0a 3c  td> <td>7<td>9.<
28500 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71  /table>.</blockq
28510 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 69 73 20 69  uote>..<p>This i
28520 73 20 74 68 65 20 71 75 65 72 79 20 74 68 61 74  s the query that
28530 20 73 6f 6c 76 65 73 20 74 68 65 20 70 75 7a 7a   solves the puzz
28540 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  le:..<blockquote
28550 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55  ><pre>.WITH RECU
28560 52 53 49 56 45 0a 20 20 69 6e 70 75 74 28 73 75  RSIVE.  input(su
28570 64 29 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55  d) AS (.    VALU
28580 45 53 28 27 35 33 2e 2e 37 2e 2e 2e 2e 36 2e 2e  ES('53..7....6..
28590 31 39 35 2e 2e 2e 2e 39 38 2e 2e 2e 2e 36 2e 38  195....98....6.8
285a0 2e 2e 2e 36 2e 2e 2e 33 34 2e 2e 38 2e 33 2e 2e  ...6...34..8.3..
285b0 31 37 2e 2e 2e 32 2e 2e 2e 36 2e 36 2e 2e 2e 2e  17...2...6.6....
285c0 32 38 2e 2e 2e 2e 34 31 39 2e 2e 35 2e 2e 2e 2e  28....419..5....
285d0 38 2e 2e 37 39 27 29 0a 20 20 29 2c 0a 20 20 64  8..79').  ),.  d
285e0 69 67 69 74 73 28 7a 2c 20 6c 70 29 20 41 53 20  igits(z, lp) AS 
285f0 28 0a 20 20 20 20 56 41 4c 55 45 53 28 27 31 27  (.    VALUES('1'
28600 2c 20 31 29 0a 20 20 20 20 55 4e 49 4f 4e 20 41  , 1).    UNION A
28610 4c 4c 20 53 45 4c 45 43 54 0a 20 20 20 20 43 41  LL SELECT.    CA
28620 53 54 28 6c 70 2b 31 20 41 53 20 54 45 58 54 29  ST(lp+1 AS TEXT)
28630 2c 20 6c 70 2b 31 20 46 52 4f 4d 20 64 69 67 69  , lp+1 FROM digi
28640 74 73 20 57 48 45 52 45 20 6c 70 26 6c 74 3b 39  ts WHERE lp&lt;9
28650 0a 20 20 29 2c 0a 20 20 78 28 73 2c 20 69 6e 64  .  ),.  x(s, ind
28660 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43  ) AS (.    SELEC
28670 54 20 73 75 64 2c 20 69 6e 73 74 72 28 73 75 64  T sud, instr(sud
28680 2c 20 27 2e 27 29 20 46 52 4f 4d 20 69 6e 70 75  , '.') FROM inpu
28690 74 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a  t.    UNION ALL.
286a0 20 20 20 20 53 45 4c 45 43 54 0a 20 20 20 20 20      SELECT.     
286b0 20 73 75 62 73 74 72 28 73 2c 20 31 2c 20 69 6e   substr(s, 1, in
286c0 64 2d 31 29 20 7c 7c 20 7a 20 7c 7c 20 73 75 62  d-1) || z || sub
286d0 73 74 72 28 73 2c 20 69 6e 64 2b 31 29 2c 0a 20  str(s, ind+1),. 
286e0 20 20 20 20 20 69 6e 73 74 72 28 20 73 75 62 73       instr( subs
286f0 74 72 28 73 2c 20 31 2c 20 69 6e 64 2d 31 29 20  tr(s, 1, ind-1) 
28700 7c 7c 20 7a 20 7c 7c 20 73 75 62 73 74 72 28 73  || z || substr(s
28710 2c 20 69 6e 64 2b 31 29 2c 20 27 2e 27 20 29 0a  , ind+1), '.' ).
28720 20 20 20 20 20 46 52 4f 4d 20 78 2c 20 64 69 67       FROM x, dig
28730 69 74 73 20 41 53 20 7a 0a 20 20 20 20 57 48 45  its AS z.    WHE
28740 52 45 20 69 6e 64 3e 30 0a 20 20 20 20 20 20 41  RE ind>0.      A
28750 4e 44 20 4e 4f 54 20 45 58 49 53 54 53 20 28 0a  ND NOT EXISTS (.
28760 20 20 20 20 20 20 20 20 20 20 20 20 53 45 4c 45              SELE
28770 43 54 20 31 0a 20 20 20 20 20 20 20 20 20 20 20  CT 1.           
28780 20 20 20 46 52 4f 4d 20 64 69 67 69 74 73 20 41     FROM digits A
28790 53 20 6c 70 0a 20 20 20 20 20 20 20 20 20 20 20  S lp.           
287a0 20 20 57 48 45 52 45 20 7a 2e 7a 20 3d 20 73 75    WHERE z.z = su
287b0 62 73 74 72 28 73 2c 20 28 28 69 6e 64 2d 31 29  bstr(s, ((ind-1)
287c0 2f 39 29 2a 39 20 2b 20 6c 70 2c 20 31 29 0a 20  /9)*9 + lp, 1). 
287d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f                 O
287e0 52 20 7a 2e 7a 20 3d 20 73 75 62 73 74 72 28 73  R z.z = substr(s
287f0 2c 20 28 28 69 6e 64 2d 31 29 25 39 29 20 2b 20  , ((ind-1)%9) + 
28800 28 6c 70 2d 31 29 2a 39 20 2b 20 31 2c 20 31 29  (lp-1)*9 + 1, 1)
28810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28820 20 4f 52 20 7a 2e 7a 20 3d 20 73 75 62 73 74 72   OR z.z = substr
28830 28 73 2c 20 28 28 28 69 6e 64 2d 31 29 2f 33 29  (s, (((ind-1)/3)
28840 20 25 20 33 29 20 2a 20 33 0a 20 20 20 20 20 20   % 3) * 3.      
28850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28860 20 20 2b 20 28 28 69 6e 64 2d 31 29 2f 32 37 29    + ((ind-1)/27)
28870 20 2a 20 32 37 20 2b 20 6c 70 0a 20 20 20 20 20   * 27 + lp.     
28880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28890 20 20 20 2b 20 28 28 6c 70 2d 31 29 20 2f 20 33     + ((lp-1) / 3
288a0 29 20 2a 20 36 2c 20 31 29 0a 20 20 20 20 20 20  ) * 6, 1).      
288b0 20 20 20 29 0a 20 20 29 0a 53 45 4c 45 43 54 20     ).  ).SELECT 
288c0 73 20 46 52 4f 4d 20 78 20 57 48 45 52 45 20 69  s FROM x WHERE i
288d0 6e 64 3d 30 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  nd=0;.</pre></bl
288e0 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68  ockquote>..<p>Th
288f0 65 20 22 69 6e 70 75 74 22 20 43 54 45 20 64 65  e "input" CTE de
28900 66 69 6e 65 73 20 74 68 65 20 69 6e 70 75 74 20  fines the input 
28910 70 75 7a 7a 6c 65 2e 0a 54 68 65 20 22 64 69 67  puzzle..The "dig
28920 69 74 73 22 20 43 54 45 20 64 65 66 69 6e 65 73  its" CTE defines
28930 20 61 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f   a table that ho
28940 6c 64 73 20 61 6c 6c 20 64 69 67 69 74 73 20 62  lds all digits b
28950 65 74 77 65 65 6e 20 31 20 61 6e 64 20 39 2e 0a  etween 1 and 9..
28960 54 68 65 20 77 6f 72 6b 20 6f 66 20 73 6f 6c 76  The work of solv
28970 69 6e 67 20 74 68 65 20 70 75 7a 7a 6c 65 20 69  ing the puzzle i
28980 73 20 75 6e 64 65 72 74 61 6b 65 6e 20 62 79 20  s undertaken by 
28990 74 68 65 20 22 78 22 20 43 54 45 2e 0a 41 6e 20  the "x" CTE..An 
289a0 65 6e 74 72 79 20 69 6e 20 78 28 73 2c 69 6e 64  entry in x(s,ind
289b0 29 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  ) means that the
289c0 20 38 31 2d 63 68 61 72 61 63 74 65 72 20 73 74   81-character st
289d0 72 69 6e 67 20 22 73 22 20 69 73 20 61 20 76 61  ring "s" is a va
289e0 6c 69 64 0a 73 75 64 6f 6b 75 20 70 75 7a 7a 6c  lid.sudoku puzzl
289f0 65 20 28 69 74 20 68 61 73 20 6e 6f 20 63 6f 6e  e (it has no con
28a00 66 6c 69 63 74 73 29 20 61 6e 64 20 74 68 61 74  flicts) and that
28a10 20 74 68 65 20 66 69 72 73 74 20 75 6e 6b 6e 6f   the first unkno
28a20 77 6e 20 63 68 61 72 61 63 74 65 72 0a 69 73 20  wn character.is 
28a30 61 74 20 70 6f 73 69 74 69 6f 6e 20 22 69 6e 64  at position "ind
28a40 22 2c 20 6f 72 20 69 6e 64 3d 3d 30 20 69 66 20  ", or ind==0 if 
28a50 61 6c 6c 20 63 68 61 72 61 63 74 65 72 20 70 6f  all character po
28a60 73 69 74 69 6f 6e 73 20 61 72 65 20 66 69 6c 6c  sitions are fill
28a70 65 64 20 69 6e 2e 0a 54 68 65 20 67 6f 61 6c 2c  ed in..The goal,
28a80 20 74 68 65 6e 2c 20 69 73 20 74 6f 20 63 6f 6d   then, is to com
28a90 70 75 74 65 20 65 6e 74 72 69 65 73 20 66 6f 72  pute entries for
28aa0 20 22 78 22 20 77 69 74 68 20 61 6e 20 22 69 6e   "x" with an "in
28ab0 64 22 20 6f 66 20 30 2e 0a 0a 3c 70 3e 54 68 65  d" of 0...<p>The
28ac0 20 73 6f 6c 76 65 72 20 77 6f 72 6b 73 20 62 79   solver works by
28ad0 20 61 64 64 69 6e 67 20 6e 65 77 20 65 6e 74 72   adding new entr
28ae0 69 65 73 20 74 6f 20 74 68 65 20 22 78 22 20 72  ies to the "x" r
28af0 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e 0a  ecursive table..
28b00 47 69 76 65 6e 20 70 72 69 6f 72 20 65 6e 74 72  Given prior entr
28b10 69 65 73 2c 20 74 68 65 20 72 65 63 75 72 73 69  ies, the recursi
28b20 76 65 2d 73 65 6c 65 63 74 20 74 72 69 65 73 20  ve-select tries 
28b30 74 6f 20 66 69 6c 6c 20 69 6e 20 61 20 73 69 6e  to fill in a sin
28b40 67 6c 65 20 6e 65 77 0a 70 6f 73 69 74 69 6f 6e  gle new.position
28b50 20 77 69 74 68 20 61 6c 6c 20 76 61 6c 75 65 73   with all values
28b60 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 39   between 1 and 9
28b70 20 74 68 61 74 20 61 63 74 75 61 6c 6c 79 20 77   that actually w
28b80 6f 72 6b 20 69 6e 20 74 68 61 74 0a 70 6f 73 69  ork in that.posi
28b90 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d 70 6c  tion.  The compl
28ba0 69 63 61 74 65 64 20 22 4e 4f 54 20 45 58 49 53  icated "NOT EXIS
28bb0 54 53 22 20 73 75 62 71 75 65 72 79 20 69 73 20  TS" subquery is 
28bc0 74 68 65 20 6d 61 67 69 63 20 74 68 61 74 0a 66  the magic that.f
28bd0 69 67 75 72 65 73 20 6f 75 74 20 77 68 65 74 68  igures out wheth
28be0 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 63  er or not each c
28bf0 61 6e 64 69 64 61 74 65 20 22 73 22 20 73 74 72  andidate "s" str
28c00 69 6e 67 20 69 73 20 61 20 76 61 6c 69 64 0a 73  ing is a valid.s
28c10 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 20 6f 72 20  udoku puzzle or 
28c20 6e 6f 74 2e 0a 0a 3c 70 3e 54 68 65 20 66 69 6e  not...<p>The fin
28c30 61 6c 20 61 6e 73 77 65 72 20 69 73 20 66 6f 75  al answer is fou
28c40 6e 64 20 62 79 20 6c 6f 6f 6b 69 6e 67 20 66 6f  nd by looking fo
28c50 72 20 61 20 73 74 72 69 6e 67 20 77 69 74 68 20  r a string with 
28c60 69 6e 64 3d 3d 30 2e 0a 49 66 20 74 68 65 20 6f  ind==0..If the o
28c70 72 69 67 69 6e 61 6c 20 73 75 64 6f 6b 75 20 70  riginal sudoku p
28c80 72 6f 62 6c 65 6d 20 64 69 64 20 6e 6f 74 20 68  roblem did not h
28c90 61 76 65 20 61 20 75 6e 69 71 75 65 20 73 6f 6c  ave a unique sol
28ca0 75 74 69 6f 6e 2c 20 74 68 65 6e 0a 74 68 65 20  ution, then.the 
28cb0 71 75 65 72 79 20 77 69 6c 6c 20 72 65 74 75 72  query will retur
28cc0 6e 20 61 6c 6c 20 70 6f 73 73 69 62 6c 65 20 73  n all possible s
28cd0 6f 6c 75 74 69 6f 6e 73 2e 20 20 49 66 20 74 68  olutions.  If th
28ce0 65 20 6f 72 69 67 69 6e 61 6c 20 70 72 6f 62 6c  e original probl
28cf0 65 6d 0a 77 61 73 20 75 6e 73 6f 6c 76 61 62 6c  em.was unsolvabl
28d00 65 2c 20 74 68 65 6e 20 6e 6f 20 72 6f 77 73 20  e, then no rows 
28d10 77 69 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64  will be returned
28d20 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  .  In this case,
28d30 20 74 68 65 20 75 6e 69 71 75 65 0a 61 6e 73 77   the unique.answ
28d40 65 72 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  er is:..<blockqu
28d50 6f 74 65 3e 0a 35 33 34 36 37 38 39 31 32 36 37  ote>.53467891267
28d60 32 31 39 35 33 34 38 31 39 38 33 34 32 35 36 37  2195348198342567
28d70 38 35 39 37 36 31 34 32 33 34 32 36 38 35 33 37  8597614234268537
28d80 39 31 37 31 33 39 32 34 38 35 36 39 36 31 35 33  9171392485696153
28d90 37 32 38 34 32 38 37 34 31 39 36 33 35 33 34 35  7284287419635345
28da0 32 38 36 31 37 39 0a 3c 2f 62 6c 6f 63 6b 71 75  286179.</blockqu
28db0 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 73 6f 6c  ote>..<p>The sol
28dc0 75 74 69 6f 6e 20 77 61 73 20 63 6f 6d 70 75 74  ution was comput
28dd0 65 64 20 69 6e 20 6c 65 73 73 20 74 68 61 6e 20  ed in less than 
28de0 33 30 30 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73  300 milliseconds
28df0 20 6f 6e 20 61 20 6d 6f 64 65 72 6e 0a 77 6f 72   on a modern.wor
28e00 6b 73 74 61 74 69 6f 6e 2e 0a 0a 3c 68 33 3e 4c  kstation...<h3>L
28e10 69 6d 69 74 61 74 69 6f 6e 73 20 41 6e 64 20 43  imitations And C
28e20 61 76 65 61 74 73 3c 2f 68 33 3e 0a 0a 3c 75 6c  aveats</h3>..<ul
28e30 3e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20 57 49  >.<li><p>.The WI
28e40 54 48 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74  TH clause cannot
28e50 20 62 65 20 75 73 65 64 20 77 69 74 68 69 6e 20   be used within 
28e60 61 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  a [CREATE TRIGGE
28e70 52 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20  R]..<li><p>.The 
28e80 57 49 54 48 20 63 6c 61 75 73 65 20 6d 75 73 74  WITH clause must
28e90 20 61 70 70 65 61 72 20 61 74 20 74 68 65 20 62   appear at the b
28ea0 65 67 69 6e 6e 69 6e 67 20 6f 66 20 61 20 74 6f  eginning of a to
28eb0 70 2d 6c 65 76 65 6c 20 5b 53 45 4c 45 43 54 5d  p-level [SELECT]
28ec0 20 73 74 61 74 65 6d 65 6e 74 0a 6f 72 20 61 74   statement.or at
28ed0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
28ee0 66 20 61 20 73 75 62 71 75 65 72 79 2e 20 20 54  f a subquery.  T
28ef0 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 63  he WITH clause c
28f00 61 6e 6e 6f 74 20 62 65 20 70 72 65 70 65 6e 64  annot be prepend
28f10 65 64 20 74 6f 0a 74 68 65 20 73 65 63 6f 6e 64  ed to.the second
28f20 20 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20 53   or subsequent S
28f30 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
28f40 6f 66 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 73  of a [compound s
28f50 65 6c 65 63 74 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a  elect]..<li><p>.
28f60 54 68 65 20 53 51 4c 3a 31 39 39 39 20 73 70 65  The SQL:1999 spe
28f70 63 20 72 65 71 75 69 72 65 73 20 74 68 61 74 20  c requires that 
28f80 74 68 65 20 52 45 43 55 52 53 49 56 45 20 6b 65  the RECURSIVE ke
28f90 79 77 6f 72 64 20 66 6f 6c 6c 6f 77 20 57 49 54  yword follow WIT
28fa0 48 20 69 6e 20 61 6e 79 0a 57 49 54 48 20 63 6c  H in any.WITH cl
28fb0 61 75 73 65 20 74 68 61 74 20 69 6e 63 6c 75 64  ause that includ
28fc0 65 73 20 61 20 72 65 63 75 72 73 69 76 65 20 63  es a recursive c
28fd0 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
28fe0 65 73 73 69 6f 6e 2e 20 20 48 6f 77 65 76 65 72  ession.  However
28ff0 2c 20 66 6f 72 0a 63 6f 6d 70 61 74 69 62 69 6c  , for.compatibil
29000 69 74 79 20 77 69 74 68 20 53 71 6c 53 65 72 76  ity with SqlServ
29010 65 72 20 61 6e 64 20 4f 72 61 63 6c 65 2c 20 53  er and Oracle, S
29020 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 65  QLite does not e
29030 6e 66 6f 72 63 65 20 74 68 69 73 20 72 75 6c 65  nforce this rule
29040 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 23  ..</ul>..<tcl>.#
29050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
29060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
29070 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
29080 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
29090 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
290a0 65 63 74 69 6f 6e 20 53 45 4c 45 43 54 20 73 65  ection SELECT se
290b0 6c 65 63 74 20 7b 53 45 4c 45 43 54 20 71 75 65  lect {SELECT que
290c0 72 79 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  ry}..RecursiveBu
290d0 62 62 6c 65 44 69 61 67 72 61 6d 20 73 65 6c 65  bbleDiagram sele
290e0 63 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ct-stmt.</tcl>..
290f0 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20 73  .<p>The SELECT s
29100 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64  tatement is used
29110 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 64 61   to query the da
29120 74 61 62 61 73 65 2e 20 20 54 68 65 0a 72 65 73  tabase.  The.res
29130 75 6c 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20  ult of a SELECT 
29140 69 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  is zero or more 
29150 72 6f 77 73 20 6f 66 20 64 61 74 61 20 77 68 65  rows of data whe
29160 72 65 20 65 61 63 68 20 72 6f 77 0a 68 61 73 20  re each row.has 
29170 61 20 66 69 78 65 64 20 6e 75 6d 62 65 72 20 6f  a fixed number o
29180 66 20 63 6f 6c 75 6d 6e 73 2e 20 20 41 20 53 45  f columns.  A SE
29190 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 64  LECT statement d
291a0 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 0a 61 6e 79  oes not make.any
291b0 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20   changes to the 
291c0 64 61 74 61 62 61 73 65 2e 0a 0a 3c 70 3e 54 68  database...<p>Th
291d0 65 20 22 5b 73 65 6c 65 63 74 2d 73 74 6d 74 5d  e "[select-stmt]
291e0 22 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d  " syntax diagram
291f0 20 61 62 6f 76 65 20 61 74 74 65 6d 70 74 73 20   above attempts 
29200 74 6f 20 73 68 6f 77 20 61 73 20 6d 75 63 68 20  to show as much 
29210 6f 66 20 74 68 65 0a 53 45 4c 45 43 54 20 73 74  of the.SELECT st
29220 61 74 65 6d 65 6e 74 20 73 79 6e 74 61 78 20 61  atement syntax a
29230 73 20 70 6f 73 73 69 62 6c 65 20 69 6e 20 61 20  s possible in a 
29240 73 69 6e 67 6c 65 20 64 69 61 67 72 61 6d 2c 20  single diagram, 
29250 62 65 63 61 75 73 65 20 73 6f 6d 65 20 72 65 61  because some rea
29260 64 65 72 73 0a 66 69 6e 64 20 74 68 61 74 20 68  ders.find that h
29270 65 6c 70 66 75 6c 2e 20 20 54 68 65 20 66 6f 6c  elpful.  The fol
29280 6c 6f 77 69 6e 67 20 22 5b 66 61 63 74 6f 72 65  lowing "[factore
29290 64 2d 73 65 6c 65 63 74 2d 73 74 6d 74 5d 22 20  d-select-stmt]" 
292a0 69 73 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76  is an alternativ
292b0 65 0a 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d  e.syntax diagram
292c0 73 20 74 68 61 74 20 65 78 70 72 65 73 73 65 73  s that expresses
292d0 20 74 68 65 20 73 61 6d 65 20 73 79 6e 74 61 78   the same syntax
292e0 20 62 75 74 20 74 72 69 65 73 20 74 6f 20 62 72   but tries to br
292f0 65 61 6b 20 74 68 65 20 73 79 6e 74 61 78 20 0a  eak the syntax .
29300 64 6f 77 6e 20 69 6e 74 6f 20 73 6d 61 6c 6c 65  down into smalle
29310 72 20 63 68 75 6e 6b 73 2e 0a 0a 3c 74 63 6c 3e  r chunks...<tcl>
29320 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
29330 44 69 61 67 72 61 6d 20 2d 2d 69 6e 69 74 69 61  Diagram --initia
29340 6c 6c 79 2d 68 69 64 64 65 6e 20 66 61 63 74 6f  lly-hidden facto
29350 72 65 64 2d 73 65 6c 65 63 74 2d 73 74 6d 74 20  red-select-stmt 
29360 73 65 6c 65 63 74 2d 63 6f 72 65 0a 3c 2f 74 63  select-core.</tc
29370 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74  l>..<p>Note that
29380 20 74 68 65 72 65 20 61 72 65 20 70 61 74 68 73   there are paths
29390 20 74 68 72 6f 75 67 68 20 74 68 65 20 73 79 6e   through the syn
293a0 74 61 78 20 64 69 61 67 72 61 6d 73 20 74 68 61  tax diagrams tha
293b0 74 0a 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65  t.are not allowe
293c0 64 20 69 6e 20 70 72 61 63 74 69 63 65 2e 20 20  d in practice.  
293d0 53 6f 6d 65 20 65 78 61 6d 70 6c 65 73 3a 0a 3c  Some examples:.<
293e0 75 6c 3e 0a 3c 6c 69 3e 41 20 5b 56 41 4c 55 45  ul>.<li>A [VALUE
293f0 53 5d 20 63 6c 61 75 73 65 20 63 61 6e 20 62 65  S] clause can be
29400 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
29410 6e 74 20 69 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e  nt in a [compoun
29420 64 20 53 45 4c 45 43 54 5d 0a 20 20 20 20 74 68  d SELECT].    th
29430 61 74 20 75 73 65 73 20 61 20 5b 57 49 54 48 5d  at uses a [WITH]
29440 20 63 6c 61 75 73 65 2c 20 62 75 74 20 61 20 5b   clause, but a [
29450 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20 74  simple SELECT] t
29460 68 61 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 0a  hat consists of.
29470 20 20 20 20 6a 75 73 74 20 61 20 5b 56 41 4c 55      just a [VALU
29480 45 53 5d 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f  ES] clause canno
29490 74 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79  t be preceded by
294a0 20 61 20 5b 57 49 54 48 5d 20 63 6c 61 75 73 65   a [WITH] clause
294b0 2e 0a 3c 6c 69 3e 54 68 65 20 5b 57 49 54 48 5d  ..<li>The [WITH]
294c0 20 63 6c 61 75 73 65 20 6d 75 73 74 20 6f 63 63   clause must occ
294d0 75 72 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20  ur on the first 
294e0 53 45 4c 45 43 54 20 6f 66 20 61 20 5b 63 6f 6d  SELECT of a [com
294f0 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 2e 0a 20  pound SELECT].. 
29500 20 20 20 49 74 20 63 61 6e 6e 6f 74 20 66 6f 6c     It cannot fol
29510 6c 6f 77 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 2d  low a [compound-
29520 6f 70 65 72 61 74 6f 72 5d 2e 0a 3c 2f 75 6c 3e  operator]..</ul>
29530 0a 54 68 65 73 65 20 61 6e 64 20 6f 74 68 65 72  .These and other
29540 20 73 69 6d 69 6c 61 72 20 73 79 6e 74 61 78 20   similar syntax 
29550 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61 72 65  restrictions are
29560 20 64 65 73 63 72 69 62 65 64 20 69 6e 20 74 68   described in th
29570 65 20 74 65 78 74 2e 0a 0a 3c 70 3e 54 68 65 20  e text...<p>The 
29580 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
29590 20 69 73 20 74 68 65 20 6d 6f 73 74 20 63 6f 6d   is the most com
295a0 70 6c 69 63 61 74 65 64 20 63 6f 6d 6d 61 6e 64  plicated command
295b0 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e 67   in the SQL lang
295c0 75 61 67 65 2e 0a 54 6f 20 6d 61 6b 65 20 74 68  uage..To make th
295d0 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 65 61  e description ea
295e0 73 69 65 72 20 74 6f 20 66 6f 6c 6c 6f 77 2c 20  sier to follow, 
295f0 73 6f 6d 65 20 6f 66 20 74 68 65 20 70 61 73 73  some of the pass
29600 61 67 65 73 20 62 65 6c 6f 77 20 64 65 73 63 72  ages below descr
29610 69 62 65 0a 74 68 65 20 77 61 79 20 74 68 65 20  ibe.the way the 
29620 64 61 74 61 20 72 65 74 75 72 6e 65 64 20 62 79  data returned by
29630 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
29640 65 6e 74 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ent is determine
29650 64 20 61 73 20 61 20 73 65 72 69 65 73 20 6f 66  d as a series of
29660 0a 73 74 65 70 73 2e 20 49 74 20 69 73 20 69 6d  .steps. It is im
29670 70 6f 72 74 61 6e 74 20 74 6f 20 6b 65 65 70 20  portant to keep 
29680 69 6e 20 6d 69 6e 64 20 74 68 61 74 20 74 68 69  in mind that thi
29690 73 20 69 73 20 70 75 72 65 6c 79 20 69 6c 6c 75  s is purely illu
296a0 73 74 72 61 74 69 76 65 20 2d 0a 69 6e 20 70 72  strative -.in pr
296b0 61 63 74 69 63 65 20 6e 65 69 74 68 65 72 20 53  actice neither S
296c0 51 4c 69 74 65 20 6e 6f 72 20 61 6e 79 20 6f 74  QLite nor any ot
296d0 68 65 72 20 53 51 4c 20 65 6e 67 69 6e 65 20 69  her SQL engine i
296e0 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 66 6f  s required to fo
296f0 6c 6c 6f 77 20 0a 74 68 69 73 20 6f 72 20 61 6e  llow .this or an
29700 79 20 6f 74 68 65 72 20 73 70 65 63 69 66 69 63  y other specific
29710 20 70 72 6f 63 65 73 73 2e 0a 0a 3c 74 63 6c 3e   process...<tcl>
29720 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 69 6d 70  hd_fragment simp
29730 6c 65 73 65 6c 65 63 74 20 7b 73 69 6d 70 6c 65  leselect {simple
29740 20 53 45 4c 45 43 54 7d 3c 2f 74 63 6c 3e 0a 3c   SELECT}</tcl>.<
29750 68 33 3e 53 69 6d 70 6c 65 20 53 65 6c 65 63 74  h3>Simple Select
29760 20 50 72 6f 63 65 73 73 69 6e 67 3c 2f 68 33 3e   Processing</h3>
29770 0a 0a 3c 70 3e 54 68 65 20 63 6f 72 65 20 6f 66  ..<p>The core of
29780 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
29790 65 6e 74 20 69 73 20 61 20 22 73 69 6d 70 6c 65  ent is a "simple
297a0 20 53 45 4c 45 43 54 22 20 73 68 6f 77 6e 20 62   SELECT" shown b
297b0 79 20 74 68 65 0a 5b 73 65 6c 65 63 74 2d 63 6f  y the.[select-co
297c0 72 65 5d 20 61 6e 64 20 5b 73 69 6d 70 6c 65 2d  re] and [simple-
297d0 73 65 6c 65 63 74 2d 73 74 6d 74 5d 20 73 79 6e  select-stmt] syn
297e0 74 61 78 20 64 69 61 67 72 61 6d 73 20 62 65 6c  tax diagrams bel
297f0 6f 77 2e 20 20 0a 49 6e 20 70 72 61 63 74 69 63  ow.  .In practic
29800 65 2c 20 6d 6f 73 74 20 53 45 4c 45 43 54 20 73  e, most SELECT s
29810 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 73 69  tatements are si
29820 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
29830 65 6d 65 6e 74 73 2e 0a 0a 3c 74 63 6c 3e 0a 52  ements...<tcl>.R
29840 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
29850 61 67 72 61 6d 20 73 69 6d 70 6c 65 2d 73 65 6c  agram simple-sel
29860 65 63 74 2d 73 74 6d 74 20 73 65 6c 65 63 74 2d  ect-stmt select-
29870 63 6f 72 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  core.</tcl>..<p>
29880 47 65 6e 65 72 61 74 69 6e 67 20 74 68 65 20 72  Generating the r
29890 65 73 75 6c 74 73 20 6f 66 20 61 20 73 69 6d 70  esults of a simp
298a0 6c 65 20 53 45 4c 45 43 54 0a 73 74 61 74 65 6d  le SELECT.statem
298b0 65 6e 74 20 69 73 20 70 72 65 73 65 6e 74 65 64  ent is presented
298c0 20 61 73 20 61 20 66 6f 75 72 20 73 74 65 70 20   as a four step 
298d0 70 72 6f 63 65 73 73 20 69 6e 20 74 68 65 20 64  process in the d
298e0 65 73 63 72 69 70 74 69 6f 6e 20 62 65 6c 6f 77  escription below
298f0 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 20 3c  :..<ol>.  <li> <
29900 70 3e 5b 46 52 4f 4d 20 63 6c 61 75 73 65 5d 20  p>[FROM clause] 
29910 70 72 6f 63 65 73 73 69 6e 67 3a 20 54 68 65 20  processing: The 
29920 69 6e 70 75 74 20 64 61 74 61 20 66 6f 72 20 74  input data for t
29930 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  he simple SELECT
29940 20 69 73 0a 20 20 20 20 20 20 20 64 65 74 65 72   is.       deter
29950 6d 69 6e 65 64 2e 20 54 68 65 20 69 6e 70 75 74  mined. The input
29960 20 64 61 74 61 20 69 73 20 65 69 74 68 65 72 20   data is either 
29970 69 6d 70 6c 69 63 69 74 6c 79 20 61 20 73 69 6e  implicitly a sin
29980 67 6c 65 20 72 6f 77 20 77 69 74 68 20 30 0a 20  gle row with 0. 
29990 20 20 20 20 20 20 63 6f 6c 75 6d 6e 73 20 28 69        columns (i
299a0 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 46 52  f there is no FR
299b0 4f 4d 20 63 6c 61 75 73 65 29 20 6f 72 20 69 73  OM clause) or is
299c0 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
299d0 68 65 20 46 52 4f 4d 0a 20 20 20 20 20 20 20 63  he FROM.       c
299e0 6c 61 75 73 65 2e 0a 20 20 3c 6c 69 3e 20 3c 70  lause..  <li> <p
299f0 3e 5b 57 48 45 52 45 20 63 6c 61 75 73 65 5d 20  >[WHERE clause] 
29a00 70 72 6f 63 65 73 73 69 6e 67 3a 20 54 68 65 20  processing: The 
29a10 69 6e 70 75 74 20 64 61 74 61 20 69 73 20 66 69  input data is fi
29a20 6c 74 65 72 65 64 20 75 73 69 6e 67 20 74 68 65  ltered using the
29a30 20 57 48 45 52 45 0a 20 20 20 20 20 20 20 63 6c   WHERE.       cl
29a40 61 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2e  ause expression.
29a50 20 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 47 52    .  <li> <p>[GR
29a60 4f 55 50 20 42 59 7c 47 52 4f 55 50 20 42 59 2c  OUP BY|GROUP BY,
29a70 20 48 41 56 49 4e 47 20 61 6e 64 20 72 65 73 75   HAVING and resu
29a80 6c 74 2d 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73  lt-column expres
29a90 73 69 6f 6e 5d 20 70 72 6f 63 65 73 73 69 6e 67  sion] processing
29aa0 3a 20 0a 20 20 20 20 20 20 20 54 68 65 20 73 65  : .       The se
29ab0 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  t of result rows
29ac0 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20   is computed by 
29ad0 61 67 67 72 65 67 61 74 69 6e 67 20 74 68 65 20  aggregating the 
29ae0 64 61 74 61 20 61 63 63 6f 72 64 69 6e 67 20 74  data according t
29af0 6f 0a 20 20 20 20 20 20 20 61 6e 79 20 47 52 4f  o.       any GRO
29b00 55 50 20 42 59 20 63 6c 61 75 73 65 20 61 6e 64  UP BY clause and
29b10 20 63 61 6c 63 75 6c 61 74 69 6e 67 20 74 68 65   calculating the
29b20 20 72 65 73 75 6c 74 2d 73 65 74 20 65 78 70 72   result-set expr
29b30 65 73 73 69 6f 6e 73 20 66 6f 72 20 74 68 65 0a  essions for the.
29b40 20 20 20 20 20 20 20 72 6f 77 73 20 6f 66 20 74         rows of t
29b50 68 65 20 66 69 6c 74 65 72 65 64 20 69 6e 70 75  he filtered inpu
29b60 74 20 64 61 74 61 73 65 74 2e 20 20 0a 20 20 3c  t dataset.  .  <
29b70 6c 69 3e 20 3c 70 3e 5b 44 49 53 54 49 4e 43 54  li> <p>[DISTINCT
29b80 7c 44 49 53 54 49 4e 43 54 2f 41 4c 4c 20 6b 65  |DISTINCT/ALL ke
29b90 79 77 6f 72 64 5d 20 70 72 6f 63 65 73 73 69 6e  yword] processin
29ba0 67 3a 20 49 66 20 74 68 65 20 71 75 65 72 79 20  g: If the query 
29bb0 69 73 20 61 20 22 53 45 4c 45 43 54 0a 20 20 20  is a "SELECT.   
29bc0 20 20 20 20 44 49 53 54 49 4e 43 54 22 20 71 75      DISTINCT" qu
29bd0 65 72 79 2c 20 64 75 70 6c 69 63 61 74 65 20 72  ery, duplicate r
29be0 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20  ows are removed 
29bf0 66 72 6f 6d 20 74 68 65 20 73 65 74 20 6f 66 20  from the set of 
29c00 72 65 73 75 6c 74 20 72 6f 77 73 2e 0a 3c 2f 6f  result rows..</o
29c10 6c 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65  l>..<p>There are
29c20 20 74 77 6f 20 74 79 70 65 73 20 6f 66 20 73 69   two types of si
29c30 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
29c40 65 6d 65 6e 74 20 2d 20 61 67 67 72 65 67 61 74  ement - aggregat
29c50 65 20 61 6e 64 20 0a 6e 6f 6e 2d 61 67 67 72 65  e and .non-aggre
29c60 67 61 74 65 20 71 75 65 72 69 65 73 2e 20 5e 41  gate queries. ^A
29c70 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73   simple SELECT s
29c80 74 61 74 65 6d 65 6e 74 20 69 73 20 61 6e 20 61  tatement is an a
29c90 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20 69  ggregate query i
29ca0 66 0a 69 74 20 63 6f 6e 74 61 69 6e 73 20 65 69  f.it contains ei
29cb0 74 68 65 72 20 61 20 47 52 4f 55 50 20 42 59 20  ther a GROUP BY 
29cc0 63 6c 61 75 73 65 20 6f 72 20 6f 6e 65 20 6f 72  clause or one or
29cd0 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20   more aggregate 
29ce0 66 75 6e 63 74 69 6f 6e 73 0a 69 6e 20 74 68 65  functions.in the
29cf0 20 72 65 73 75 6c 74 2d 73 65 74 2e 20 5e 4f 74   result-set. ^Ot
29d00 68 65 72 77 69 73 65 2c 20 69 66 20 61 20 73 69  herwise, if a si
29d10 6d 70 6c 65 20 53 45 4c 45 43 54 20 63 6f 6e 74  mple SELECT cont
29d20 61 69 6e 73 20 6e 6f 20 61 67 67 72 65 67 61 74  ains no aggregat
29d30 65 0a 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61  e.functions or a
29d40 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
29d50 2c 20 69 74 20 69 73 20 61 20 6e 6f 6e 2d 61 67  , it is a non-ag
29d60 67 72 65 67 61 74 65 20 71 75 65 72 79 2e 0a 0a  gregate query...
29d70 3c 70 3e 3c 62 3e 31 2e 20 44 65 74 65 72 6d 69  <p><b>1. Determi
29d80 6e 61 74 69 6f 6e 20 6f 66 20 69 6e 70 75 74 20  nation of input 
29d90 64 61 74 61 20 28 46 52 4f 4d 20 63 6c 61 75 73  data (FROM claus
29da0 65 20 70 72 6f 63 65 73 73 69 6e 67 29 2e 3c 2f  e processing).</
29db0 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  b>.<tcl>hd_fragm
29dc0 65 6e 74 20 66 72 6f 6d 63 6c 61 75 73 65 3c 2f  ent fromclause</
29dd0 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79  tcl>.<tcl>hd_key
29de0 77 6f 72 64 73 20 7b 46 52 4f 4d 20 63 6c 61 75  words {FROM clau
29df0 73 65 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68  se}</tcl>..<p>Th
29e00 65 20 69 6e 70 75 74 20 64 61 74 61 20 75 73 65  e input data use
29e10 64 20 62 79 20 61 20 73 69 6d 70 6c 65 20 53 45  d by a simple SE
29e20 4c 45 43 54 20 71 75 65 72 79 20 69 73 20 61 20  LECT query is a 
29e30 73 65 74 20 6f 66 20 3c 69 3e 4e 3c 2f 69 3e 20  set of <i>N</i> 
29e40 72 6f 77 73 20 0a 65 61 63 68 20 3c 69 3e 4d 3c  rows .each <i>M<
29e50 2f 69 3e 20 63 6f 6c 75 6d 6e 73 20 77 69 64 65  /i> columns wide
29e60 2e 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 46  ...<p>^(If the F
29e70 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 6f 6d  ROM clause is om
29e80 69 74 74 65 64 20 66 72 6f 6d 20 61 20 73 69 6d  itted from a sim
29e90 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
29ea0 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 0a  ment, then the .
29eb0 69 6e 70 75 74 20 64 61 74 61 20 69 73 20 69 6d  input data is im
29ec0 70 6c 69 63 69 74 6c 79 20 61 20 73 69 6e 67 6c  plicitly a singl
29ed0 65 20 72 6f 77 20 7a 65 72 6f 20 63 6f 6c 75 6d  e row zero colum
29ee0 6e 73 20 77 69 64 65 29 5e 20 28 69 2e 65 2e 20  ns wide)^ (i.e. 
29ef0 3c 69 3e 4e 3c 2f 69 3e 3d 31 20 61 6e 64 0a 3c  <i>N</i>=1 and.<
29f00 69 3e 4d 3c 2f 69 3e 3d 30 29 2e 0a 0a 3c 70 3e  i>M</i>=0)...<p>
29f10 49 66 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65  If a FROM clause
29f20 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74   is specified, t
29f30 68 65 20 64 61 74 61 20 6f 6e 20 77 68 69 63 68  he data on which
29f40 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54   a simple SELECT
29f50 20 71 75 65 72 79 0a 6f 70 65 72 61 74 65 73 20   query.operates 
29f60 63 6f 6d 65 73 20 66 72 6f 6d 20 74 68 65 20 6f  comes from the o
29f70 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65  ne or more table
29f80 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20  s or subqueries 
29f90 28 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e  (SELECT statemen
29fa0 74 73 0a 69 6e 20 70 61 72 65 6e 74 68 65 73 69  ts.in parenthesi
29fb0 73 29 20 73 70 65 63 69 66 69 65 64 20 66 6f 6c  s) specified fol
29fc0 6c 6f 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20  lowing the FROM 
29fd0 6b 65 79 77 6f 72 64 2e 20 5e 41 20 73 75 62 71  keyword. ^A subq
29fe0 75 65 72 79 20 73 70 65 63 69 66 69 65 64 0a 69  uery specified.i
29ff0 6e 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 74 61  n the <yyterm>ta
2a000 62 6c 65 2d 6f 72 2d 73 75 62 71 75 65 72 79 3c  ble-or-subquery<
2a010 2f 79 79 74 65 72 6d 3e 20 66 6f 6c 6c 6f 77 69  /yyterm> followi
2a020 6e 67 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  ng the FROM clau
2a030 73 65 20 69 6e 20 61 20 0a 73 69 6d 70 6c 65 20  se in a .simple 
2a040 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2a050 20 69 73 0a 68 61 6e 64 6c 65 64 20 61 73 20 69   is.handled as i
2a060 66 20 69 74 20 77 61 73 20 61 20 74 61 62 6c 65  f it was a table
2a070 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
2a080 64 61 74 61 20 72 65 74 75 72 6e 65 64 20 62 79  data returned by
2a090 20 65 78 65 63 75 74 69 6e 67 20 74 68 65 0a 73   executing the.s
2a0a0 75 62 71 75 65 72 79 20 73 74 61 74 65 6d 65 6e  ubquery statemen
2a0b0 74 2e 20 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20  t. ^Each column 
2a0c0 6f 66 20 74 68 65 20 73 75 62 71 75 65 72 79 20  of the subquery 
2a0d0 68 61 73 20 74 68 65 0a 5b 63 6f 6c 6c 61 74 69  has the.[collati
2a0e0 6f 6e 7c 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  on|collation seq
2a0f0 75 65 6e 63 65 5d 20 61 6e 64 20 5b 61 66 66 69  uence] and [affi
2a100 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63 6f 72  nity] of the cor
2a110 72 65 73 70 6f 6e 64 69 6e 67 20 65 78 70 72 65  responding expre
2a120 73 73 69 6f 6e 0a 69 6e 20 74 68 65 20 73 75 62  ssion.in the sub
2a130 71 75 65 72 79 20 73 74 61 74 65 6d 65 6e 74 2e  query statement.
2a140 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 72 65 20 69  ..<p>^If there i
2a150 73 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20  s only a single 
2a160 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72  table or subquer
2a170 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 0a 63 6c  y in the FROM.cl
2a180 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 69  ause, then the i
2a190 6e 70 75 74 20 64 61 74 61 20 75 73 65 64 20 62  nput data used b
2a1a0 79 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  y the SELECT sta
2a1b0 74 65 6d 65 6e 74 20 69 73 20 74 68 65 20 63 6f  tement is the co
2a1c0 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 0a 6e 61  ntents of the.na
2a1d0 6d 65 64 20 74 61 62 6c 65 2e 20 5e 49 66 20 74  med table. ^If t
2a1e0 68 65 72 65 20 69 73 20 6d 6f 72 65 20 74 68 61  here is more tha
2a1f0 6e 20 6f 6e 65 20 74 61 62 6c 65 20 6f 72 20 73  n one table or s
2a200 75 62 71 75 65 72 79 20 69 6e 20 46 52 4f 4d 20  ubquery in FROM 
2a210 63 6c 61 75 73 65 0a 74 68 65 6e 20 74 68 65 20  clause.then the 
2a220 63 6f 6e 74 65 6e 74 73 20 6f 66 20 61 6c 6c 20  contents of all 
2a230 74 61 62 6c 65 73 20 61 6e 64 2f 6f 72 20 73 75  tables and/or su
2a240 62 71 75 65 72 69 65 73 0a 61 72 65 20 6a 6f 69  bqueries.are joi
2a250 6e 65 64 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c  ned into a singl
2a260 65 20 64 61 74 61 73 65 74 20 66 6f 72 20 74 68  e dataset for th
2a270 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  e simple SELECT 
2a280 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 6f 70 65  statement to ope
2a290 72 61 74 65 20 6f 6e 2e 0a 45 78 61 63 74 6c 79  rate on..Exactly
2a2a0 20 68 6f 77 20 74 68 65 20 64 61 74 61 20 69 73   how the data is
2a2b0 20 63 6f 6d 62 69 6e 65 64 20 64 65 70 65 6e 64   combined depend
2a2c0 73 20 6f 6e 20 74 68 65 20 73 70 65 63 69 66 69  s on the specifi
2a2d0 63 20 5b 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72  c [join-operator
2a2e0 5d 20 61 6e 64 0a 5b 6a 6f 69 6e 2d 63 6f 6e 73  ] and.[join-cons
2a2f0 74 72 61 69 6e 74 5d 20 75 73 65 64 20 74 6f 20  traint] used to 
2a300 63 6f 6e 6e 65 63 74 20 74 68 65 20 74 61 62 6c  connect the tabl
2a310 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73  es or subqueries
2a320 20 74 6f 67 65 74 68 65 72 2e 0a 0a 3c 70 3e 41   together...<p>A
2a330 6c 6c 20 6a 6f 69 6e 73 20 69 6e 20 53 51 4c 69  ll joins in SQLi
2a340 74 65 20 61 72 65 20 62 61 73 65 64 20 6f 6e 20  te are based on 
2a350 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72  the cartesian pr
2a360 6f 64 75 63 74 20 6f 66 20 74 68 65 20 6c 65 66  oduct of the lef
2a370 74 20 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64  t and.right-hand
2a380 20 64 61 74 61 73 65 74 73 2e 20 5e 54 68 65 20   datasets. ^The 
2a390 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 63  columns of the c
2a3a0 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74  artesian product
2a3b0 20 64 61 74 61 73 65 74 20 61 72 65 2c 20 69 6e   dataset are, in
2a3c0 20 0a 6f 72 64 65 72 2c 20 61 6c 6c 20 74 68 65   .order, all the
2a3d0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
2a3e0 6c 65 66 74 2d 68 61 6e 64 20 64 61 74 61 73 65  left-hand datase
2a3f0 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6c  t followed by al
2a400 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66  l the columns.of
2a410 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20   the right-hand 
2a420 64 61 74 61 73 65 74 2e 20 5e 54 68 65 72 65 20  dataset. ^There 
2a430 69 73 20 61 20 72 6f 77 20 69 6e 20 74 68 65 20  is a row in the 
2a440 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63  cartesian produc
2a450 74 20 64 61 74 61 73 65 74 0a 66 6f 72 6d 65 64  t dataset.formed
2a460 20 62 79 20 63 6f 6d 62 69 6e 69 6e 67 20 65 61   by combining ea
2a470 63 68 20 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e  ch unique combin
2a480 61 74 69 6f 6e 20 6f 66 20 61 20 72 6f 77 20 66  ation of a row f
2a490 72 6f 6d 20 74 68 65 20 6c 65 66 74 2d 68 61 6e  rom the left-han
2a4a0 64 20 0a 61 6e 64 20 72 69 67 68 74 2d 68 61 6e  d .and right-han
2a4b0 64 20 64 61 74 61 73 65 74 73 2e 20 5e 28 49 6e  d datasets. ^(In
2a4c0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
2a4d0 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 64   the left-hand d
2a4e0 61 74 61 73 65 74 20 63 6f 6e 73 69 73 74 73 20  ataset consists 
2a4f0 6f 66 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61  of.<i>N<sub><sma
2a500 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c  ll>left</small><
2a510 2f 73 75 62 3e 3c 2f 69 3e 20 72 6f 77 73 20 6f  /sub></i> rows o
2a520 66 20 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61  f .<i>M<sub><sma
2a530 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c  ll>left</small><
2a540 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e  /sub></i> column
2a550 73 2c 20 61 6e 64 20 74 68 65 20 72 69 67 68 74  s, and the right
2a560 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20 6f 66  -hand dataset of
2a570 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c  .<i>N<sub><small
2a580 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f  >right</small></
2a590 73 75 62 3e 3c 2f 69 3e 20 72 6f 77 73 20 6f 66  sub></i> rows of
2a5a0 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61 6c 6c  .<i>M<sub><small
2a5b0 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f  >right</small></
2a5c0 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73  sub></i> columns
2a5d0 2c 20 74 68 65 6e 20 74 68 65 20 63 61 72 74 65  , then the carte
2a5e0 73 69 61 6e 20 70 72 6f 64 75 63 74 20 69 73 20  sian product is 
2a5f0 61 0a 64 61 74 61 73 65 74 20 6f 66 20 0a 3c 69  a.dataset of .<i
2a600 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65  >N<sub><small>le
2a610 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e  ft</small></sub>
2a620 26 74 69 6d 65 73 3b 4e 3c 73 75 62 3e 3c 73 6d  &times;N<sub><sm
2a630 61 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c  all>right</small
2a640 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 0a 72 6f 77 73  ></sub></i>.rows
2a650 2c 20 65 61 63 68 20 63 6f 6e 74 61 69 6e 69 6e  , each containin
2a660 67 20 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d 61  g .<i>M<sub><sma
2a670 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c  ll>left</small><
2a680 2f 73 75 62 3e 2b 4d 3c 73 75 62 3e 3c 73 6d 61  /sub>+M<sub><sma
2a690 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c 3e  ll>right</small>
2a6a0 3c 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75 6d  </sub></i> colum
2a6b0 6e 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 74 68  ns.)^..<p>^If th
2a6c0 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20  e join-operator 
2a6d0 69 73 20 22 43 52 4f 53 53 20 4a 4f 49 4e 22 2c  is "CROSS JOIN",
2a6e0 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22   "INNER JOIN", "
2a6f0 4a 4f 49 4e 22 20 6f 72 20 61 20 63 6f 6d 6d 61  JOIN" or a comma
2a700 0a 28 22 2c 22 29 20 61 6e 64 20 74 68 65 72 65  .(",") and there
2a710 20 69 73 20 6e 6f 20 4f 4e 20 6f 72 20 55 53 49   is no ON or USI
2a720 4e 47 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  NG clause, then 
2a730 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
2a740 65 20 6a 6f 69 6e 20 69 73 0a 73 69 6d 70 6c 79  e join is.simply
2a750 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70   the cartesian p
2a760 72 6f 64 75 63 74 20 6f 66 20 74 68 65 20 6c 65  roduct of the le
2a770 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e  ft and right-han
2a780 64 20 64 61 74 61 73 65 74 73 2e 20 0a 49 66 20  d datasets. .If 
2a790 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 64 6f  join-operator do
2a7a0 65 73 20 68 61 76 65 20 4f 4e 20 6f 72 20 55 53  es have ON or US
2a7b0 49 4e 47 20 63 6c 61 75 73 65 73 2c 20 74 68 6f  ING clauses, tho
2a7c0 73 65 20 61 72 65 20 68 61 6e 64 6c 65 64 20 61  se are handled a
2a7d0 63 63 6f 72 64 69 6e 67 20 74 6f 0a 74 68 65 20  ccording to.the 
2a7e0 66 6f 6c 6c 6f 77 69 6e 67 20 62 75 6c 6c 65 74  following bullet
2a7f0 20 70 6f 69 6e 74 73 3a 0a 0a 3c 75 6c 3e 0a 20   points:..<ul>. 
2a800 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68   <li> <p>^(If th
2a810 65 72 65 20 69 73 20 61 6e 20 4f 4e 20 63 6c 61  ere is an ON cla
2a820 75 73 65 20 74 68 65 6e 20 74 68 65 20 4f 4e 20  use then the ON 
2a830 65 78 70 72 65 73 73 69 6f 6e 20 69 73 0a 20 20  expression is.  
2a840 20 20 20 20 20 65 76 61 6c 75 61 74 65 64 20 66       evaluated f
2a850 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74  or each row of t
2a860 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f  he cartesian pro
2a870 64 75 63 74 20 61 73 20 61 20 0a 20 20 20 20 20  duct as a .     
2a880 20 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65    [boolean expre
2a890 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20 72 6f 77  ssion]. Only row
2a8a0 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20  s for which the 
2a8b0 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75  expression evalu
2a8c0 61 74 65 73 20 74 6f 20 0a 20 20 20 20 20 20 20  ates to .       
2a8d0 74 72 75 65 20 61 72 65 20 69 6e 63 6c 75 64 65  true are include
2a8e0 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73  d from the datas
2a8f0 65 74 2e 29 5e 0a 0a 20 20 3c 6c 69 3e 20 3c 70  et.)^..  <li> <p
2a900 3e 5e 49 66 20 74 68 65 72 65 20 69 73 20 61 20  >^If there is a 
2a910 55 53 49 4e 47 20 63 6c 61 75 73 65 0a 20 20 20  USING clause.   
2a920 20 20 20 20 74 68 65 6e 20 65 61 63 68 20 6f 66      then each of
2a930 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65   the column name
2a940 73 20 73 70 65 63 69 66 69 65 64 20 6d 75 73 74  s specified must
2a950 20 65 78 69 73 74 20 69 6e 20 74 68 65 20 64 61   exist in the da
2a960 74 61 73 65 74 73 20 74 6f 20 0a 20 20 20 20 20  tasets to .     
2a970 20 20 62 6f 74 68 20 74 68 65 20 6c 65 66 74 20    both the left 
2a980 61 6e 64 20 72 69 67 68 74 20 6f 66 20 74 68 65  and right of the
2a990 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 2e 20   join-operator. 
2a9a0 5e 28 46 6f 72 20 65 61 63 68 20 70 61 69 72 20  ^(For each pair 
2a9b0 6f 66 20 6e 61 6d 65 64 0a 20 20 20 20 20 20 20  of named.       
2a9c0 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 20 65 78 70  columns, the exp
2a9d0 72 65 73 73 69 6f 6e 20 22 6c 68 73 2e 58 20 3d  ression "lhs.X =
2a9e0 20 72 68 73 2e 58 22 20 69 73 20 65 76 61 6c 75   rhs.X" is evalu
2a9f0 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f  ated for each ro
2aa00 77 20 6f 66 0a 20 20 20 20 20 20 20 74 68 65 20  w of.       the 
2aa10 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63  cartesian produc
2aa20 74 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20  t as a [boolean 
2aa30 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c  expression]. Onl
2aa40 79 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  y rows for which
2aa50 0a 20 20 20 20 20 20 20 61 6c 6c 20 73 75 63 68  .       all such
2aa60 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61   expressions eva
2aa70 6c 75 61 74 65 73 20 74 6f 20 74 72 75 65 20 61  luates to true a
2aa80 72 65 20 69 6e 63 6c 75 64 65 64 20 66 72 6f 6d  re included from
2aa90 20 74 68 65 0a 20 20 20 20 20 20 20 72 65 73 75   the.       resu
2aaa0 6c 74 20 73 65 74 2e 29 5e 20 5e 57 68 65 6e 20  lt set.)^ ^When 
2aab0 63 6f 6d 70 61 72 69 6e 67 20 76 61 6c 75 65 73  comparing values
2aac0 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20   as a result of 
2aad0 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20  a USING clause, 
2aae0 74 68 65 0a 20 20 20 20 20 20 20 6e 6f 72 6d 61  the.       norma
2aaf0 6c 20 72 75 6c 65 73 20 66 6f 72 20 68 61 6e 64  l rules for hand
2ab00 6c 69 6e 67 20 61 66 66 69 6e 69 74 69 65 73 2c  ling affinities,
2ab10 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
2ab20 6e 63 65 73 20 61 6e 64 20 4e 55 4c 4c 0a 20 20  nces and NULL.  
2ab30 20 20 20 20 20 76 61 6c 75 65 73 20 69 6e 20 63       values in c
2ab40 6f 6d 70 61 72 69 73 6f 6e 73 20 61 70 70 6c 79  omparisons apply
2ab50 2e 20 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 66 72  . ^The column fr
2ab60 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74 20 6f  om the dataset o
2ab70 6e 20 74 68 65 0a 20 20 20 20 20 20 20 6c 65 66  n the.       lef
2ab80 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 74  t-hand side of t
2ab90 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72  he join-operator
2aba0 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74   is considered t
2abb0 6f 20 62 65 20 6f 6e 20 74 68 65 20 6c 65 66 74  o be on the left
2abc0 2d 68 61 6e 64 0a 20 20 20 20 20 20 20 73 69 64  -hand.       sid
2abd0 65 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69  e of the compari
2abe0 73 6f 6e 20 6f 70 65 72 61 74 6f 72 20 28 3d 29  son operator (=)
2abf0 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65   for the purpose
2ac00 73 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a  s of collation .
2ac10 20 20 20 20 20 20 20 73 65 71 75 65 6e 63 65 20         sequence 
2ac20 61 6e 64 20 61 66 66 69 6e 69 74 79 20 70 72 65  and affinity pre
2ac30 63 65 64 65 6e 63 65 2e 0a 0a 20 20 20 20 20 20  cedence...      
2ac40 20 3c 70 3e 5e 46 6f 72 20 65 61 63 68 20 70 61   <p>^For each pa
2ac50 69 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 64  ir of columns id
2ac60 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 55 53  entified by a US
2ac70 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68 65 20  ING clause, the 
2ac80 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 66 72  column.       fr
2ac90 6f 6d 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e  om the right-han
2aca0 64 20 64 61 74 61 73 65 74 20 69 73 20 6f 6d 69  d dataset is omi
2acb0 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 6a 6f  tted from the jo
2acc0 69 6e 65 64 20 64 61 74 61 73 65 74 2e 20 5e 54  ined dataset. ^T
2acd0 68 69 73 20 0a 20 20 20 20 20 20 20 69 73 20 74  his .       is t
2ace0 68 65 20 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e  he only differen
2acf0 63 65 20 62 65 74 77 65 65 6e 20 61 20 55 53 49  ce between a USI
2ad00 4e 47 20 63 6c 61 75 73 65 20 61 6e 64 20 69 74  NG clause and it
2ad10 73 20 65 71 75 69 76 61 6c 65 6e 74 20 4f 4e 0a  s equivalent ON.
2ad20 20 20 20 20 20 20 20 63 6f 6e 73 74 72 61 69 6e         constrain
2ad30 74 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28  t...  <li> <p>^(
2ad40 49 66 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b  If the NATURAL k
2ad50 65 79 77 6f 72 64 20 69 73 20 69 6e 20 74 68 65  eyword is in the
2ad60 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 74   join-operator t
2ad70 68 65 6e 20 61 6e 0a 20 20 20 20 20 20 20 69 6d  hen an.       im
2ad80 70 6c 69 63 69 74 20 55 53 49 4e 47 20 63 6c 61  plicit USING cla
2ad90 75 73 65 20 69 73 20 61 64 64 65 64 20 74 6f 20  use is added to 
2ada0 74 68 65 20 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61  the join-constra
2adb0 69 6e 74 73 2e 20 54 68 65 20 69 6d 70 6c 69 63  ints. The implic
2adc0 69 74 0a 20 20 20 20 20 20 20 55 53 49 4e 47 20  it.       USING 
2add0 63 6c 61 75 73 65 20 63 6f 6e 74 61 69 6e 73 20  clause contains 
2ade0 65 61 63 68 20 6f 66 20 74 68 65 20 63 6f 6c 75  each of the colu
2adf0 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 20 61 70  mn names that ap
2ae00 70 65 61 72 20 69 6e 20 62 6f 74 68 0a 20 20 20  pear in both.   
2ae10 20 20 20 20 74 68 65 20 6c 65 66 74 20 61 6e 64      the left and
2ae20 20 72 69 67 68 74 2d 68 61 6e 64 20 69 6e 70 75   right-hand inpu
2ae30 74 20 64 61 74 61 73 65 74 73 2e 29 5e 20 5e 49  t datasets.)^ ^I
2ae40 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72  f the left and r
2ae50 69 67 68 74 2d 68 61 6e 64 0a 20 20 20 20 20 20  ight-hand.      
2ae60 20 69 6e 70 75 74 20 64 61 74 61 73 65 74 73 20   input datasets 
2ae70 66 65 61 74 75 72 65 20 6e 6f 20 63 6f 6d 6d 6f  feature no commo
2ae80 6e 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20  n column names, 
2ae90 74 68 65 6e 20 74 68 65 20 4e 41 54 55 52 41 4c  then the NATURAL
2aea0 20 6b 65 79 77 6f 72 64 0a 20 20 20 20 20 20 20   keyword.       
2aeb0 68 61 73 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e  has no effect on
2aec0 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
2aed0 74 68 65 20 6a 6f 69 6e 2e 20 5e 41 20 55 53 49  the join. ^A USI
2aee0 4e 47 20 6f 72 20 4f 4e 20 63 6c 61 75 73 65 20  NG or ON clause 
2aef0 6d 61 79 0a 20 20 20 20 20 20 20 6e 6f 74 20 62  may.       not b
2af00 65 20 61 64 64 65 64 20 74 6f 20 61 20 6a 6f 69  e added to a joi
2af10 6e 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73  n that specifies
2af20 20 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65 79   the NATURAL key
2af30 77 6f 72 64 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70  word...  <li> <p
2af40 3e 5e 28 49 66 20 74 68 65 20 6a 6f 69 6e 2d 6f  >^(If the join-o
2af50 70 65 72 61 74 6f 72 20 69 73 20 61 20 22 4c 45  perator is a "LE
2af60 46 54 20 4a 4f 49 4e 22 20 6f 72 20 22 4c 45 46  FT JOIN" or "LEF
2af70 54 20 4f 55 54 45 52 20 4a 4f 49 4e 22 2c 20 74  T OUTER JOIN", t
2af80 68 65 6e 0a 20 20 20 20 20 20 20 61 66 74 65 72  hen.       after
2af90 0a 20 20 20 20 20 20 20 74 68 65 20 4f 4e 20 6f  .       the ON o
2afa0 72 20 55 53 49 4e 47 20 66 69 6c 74 65 72 69 6e  r USING filterin
2afb0 67 20 63 6c 61 75 73 65 73 20 68 61 76 65 20 62  g clauses have b
2afc0 65 65 6e 20 61 70 70 6c 69 65 64 2c 20 61 6e 20  een applied, an 
2afd0 65 78 74 72 61 20 72 6f 77 20 69 73 20 0a 20 20  extra row is .  
2afe0 20 20 20 20 20 61 64 64 65 64 20 74 6f 20 74 68       added to th
2aff0 65 20 6f 75 74 70 75 74 20 66 6f 72 20 65 61 63  e output for eac
2b000 68 20 72 6f 77 20 69 6e 20 74 68 65 20 6f 72 69  h row in the ori
2b010 67 69 6e 61 6c 20 6c 65 66 74 2d 68 61 6e 64 20  ginal left-hand 
2b020 69 6e 70 75 74 20 0a 20 20 20 20 20 20 20 64 61  input .       da
2b030 74 61 73 65 74 20 74 68 61 74 20 63 6f 72 72 65  taset that corre
2b040 73 70 6f 6e 64 73 20 74 6f 20 6e 6f 20 72 6f 77  sponds to no row
2b050 73 20 61 74 20 61 6c 6c 20 69 6e 20 74 68 65 20  s at all in the 
2b060 63 6f 6d 70 6f 73 69 74 65 0a 20 20 20 20 20 20  composite.      
2b070 20 64 61 74 61 73 65 74 20 28 69 66 20 61 6e 79   dataset (if any
2b080 29 2e 29 5e 20 5e 54 68 65 20 61 64 64 65 64 20  ).)^ ^The added 
2b090 72 6f 77 73 20 63 6f 6e 74 61 69 6e 20 4e 55 4c  rows contain NUL
2b0a0 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  L values in the 
2b0b0 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 20 20 20 74  columns.       t
2b0c0 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c  hat would normal
2b0d0 6c 79 20 63 6f 6e 74 61 69 6e 20 76 61 6c 75 65  ly contain value
2b0e0 73 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68  s copied from th
2b0f0 65 20 72 69 67 68 74 2d 68 61 6e 64 20 69 6e 70  e right-hand inp
2b100 75 74 0a 20 20 20 20 20 20 20 64 61 74 61 73 65  ut.       datase
2b110 74 2e 20 20 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e  t.  .</ul>..<p>^
2b120 28 57 68 65 6e 20 6d 6f 72 65 20 74 68 61 6e 20  (When more than 
2b130 74 77 6f 20 74 61 62 6c 65 73 20 61 72 65 20 6a  two tables are j
2b140 6f 69 6e 65 64 20 74 6f 67 65 74 68 65 72 20 61  oined together a
2b150 73 20 70 61 72 74 20 6f 66 20 61 20 46 52 4f 4d  s part of a FROM
2b160 20 63 6c 61 75 73 65 2c 0a 74 68 65 20 6a 6f 69   clause,.the joi
2b170 6e 20 6f 70 65 72 61 74 69 6f 6e 73 20 61 72 65  n operations are
2b180 20 70 72 6f 63 65 73 73 65 64 20 69 6e 20 6f 72   processed in or
2b190 64 65 72 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  der from left to
2b1a0 20 72 69 67 68 74 2e 20 49 6e 20 6f 74 68 65 72   right. In other
2b1b0 20 0a 77 6f 72 64 73 2c 20 74 68 65 20 46 52 4f   .words, the FRO
2b1c0 4d 20 63 6c 61 75 73 65 20 28 41 20 6a 6f 69 6e  M clause (A join
2b1d0 2d 6f 70 2d 31 20 42 20 6a 6f 69 6e 2d 6f 70 2d  -op-1 B join-op-
2b1e0 32 20 43 29 20 69 73 20 63 6f 6d 70 75 74 65 64  2 C) is computed
2b1f0 20 61 73 20 0a 28 28 41 20 6a 6f 69 6e 2d 6f 70   as .((A join-op
2b200 2d 31 20 42 29 20 6a 6f 69 6e 2d 6f 70 2d 32 20  -1 B) join-op-2 
2b210 43 29 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  C).)^..<tcl>hd_f
2b220 72 61 67 6d 65 6e 74 20 63 72 6f 73 73 6a 6f 69  ragment crossjoi
2b230 6e 20 7b 74 72 65 61 74 73 20 74 68 65 20 43 52  n {treats the CR
2b240 4f 53 53 20 4a 4f 49 4e 20 6f 70 65 72 61 74 6f  OSS JOIN operato
2b250 72 20 73 70 65 63 69 61 6c 6c 79 7d 3c 2f 74 63  r specially}</tc
2b260 6c 3e 0a 3c 70 3e 3c 62 3e 53 69 64 65 20 6e 6f  l>.<p><b>Side no
2b270 74 65 3a 20 53 70 65 63 69 61 6c 20 68 61 6e 64  te: Special hand
2b280 6c 69 6e 67 20 6f 66 20 43 52 4f 53 53 20 4a 4f  ling of CROSS JO
2b290 49 4e 2e 3c 2f 62 3e 0a 5e 54 68 65 72 65 20 69  IN.</b>.^There i
2b2a0 73 20 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 20  s no difference 
2b2b0 62 65 74 77 65 65 6e 20 74 68 65 20 22 49 4e 4e  between the "INN
2b2c0 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22  ER JOIN", "JOIN"
2b2d0 20 61 6e 64 20 22 2c 22 20 6a 6f 69 6e 0a 6f 70   and "," join.op
2b2e0 65 72 61 74 6f 72 73 2e 20 54 68 65 79 20 61 72  erators. They ar
2b2f0 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 69 6e 74  e completely int
2b300 65 72 63 68 61 6e 67 65 61 62 6c 65 20 69 6e 20  erchangeable in 
2b310 53 51 4c 69 74 65 2e 0a 5e 28 54 68 65 20 22 43  SQLite..^(The "C
2b320 52 4f 53 53 20 4a 4f 49 4e 22 20 6a 6f 69 6e 20  ROSS JOIN" join 
2b330 6f 70 65 72 61 74 6f 72 20 70 72 6f 64 75 63 65  operator produce
2b340 73 20 74 68 65 20 73 61 6d 65 20 72 65 73 75 6c  s the same resul
2b350 74 20 61 73 20 74 68 65 20 0a 22 49 4e 4e 45 52  t as the ."INNER
2b360 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 61   JOIN", "JOIN" a
2b370 6e 64 20 22 2c 22 20 6f 70 65 72 61 74 6f 72 73  nd "," operators
2b380 29 5e 2c 20 62 75 74 20 69 73 20 0a 5b 43 52 4f  )^, but is .[CRO
2b390 53 53 20 4a 4f 49 4e 7c 68 61 6e 64 6c 65 64 20  SS JOIN|handled 
2b3a0 64 69 66 66 65 72 65 6e 74 6c 79 20 62 79 20 74  differently by t
2b3b0 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a  he query optimiz
2b3c0 65 72 5d 0a 69 6e 20 74 68 61 74 20 69 74 20 70  er].in that it p
2b3d0 72 65 76 65 6e 74 73 20 74 68 65 20 71 75 65 72  revents the quer
2b3e0 79 20 6f 70 74 69 6d 69 7a 65 72 20 66 72 6f 6d  y optimizer from
2b3f0 20 72 65 6f 72 64 65 72 69 6e 67 0a 74 68 65 20   reordering.the 
2b400 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 6a 6f  tables in the jo
2b410 69 6e 2e 20 20 41 6e 20 61 70 70 6c 69 63 61 74  in.  An applicat
2b420 69 6f 6e 20 70 72 6f 67 72 61 6d 6d 65 72 20 63  ion programmer c
2b430 61 6e 20 75 73 65 20 74 68 65 20 43 52 4f 53 53  an use the CROSS
2b440 20 4a 4f 49 4e 20 0a 6f 70 65 72 61 74 6f 72 20   JOIN .operator 
2b450 74 6f 20 64 69 72 65 63 74 6c 79 20 69 6e 66 6c  to directly infl
2b460 75 65 6e 63 65 20 74 68 65 20 61 6c 67 6f 72 69  uence the algori
2b470 74 68 6d 20 74 68 61 74 20 69 73 20 63 68 6f 73  thm that is chos
2b480 65 6e 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 0a  en to implement.
2b490 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
2b4a0 6d 65 6e 74 2e 20 20 41 76 6f 69 64 20 75 73 69  ment.  Avoid usi
2b4b0 6e 67 20 43 52 4f 53 53 20 4a 4f 49 4e 20 65 78  ng CROSS JOIN ex
2b4c0 63 65 70 74 20 69 6e 20 73 70 65 63 69 66 69 63  cept in specific
2b4d0 20 73 69 74 75 61 74 69 6f 6e 73 20 0a 77 68 65   situations .whe
2b4e0 72 65 20 6d 61 6e 75 61 6c 20 63 6f 6e 74 72 6f  re manual contro
2b4f0 6c 20 6f 66 20 74 68 65 20 71 75 65 72 79 20 6f  l of the query o
2b500 70 74 69 6d 69 7a 65 72 20 69 73 20 64 65 73 69  ptimizer is desi
2b510 72 65 64 2e 20 20 41 76 6f 69 64 20 75 73 69 6e  red.  Avoid usin
2b520 67 0a 43 52 4f 53 53 20 4a 4f 49 4e 20 65 61 72  g.CROSS JOIN ear
2b530 6c 79 20 69 6e 20 74 68 65 20 64 65 76 65 6c 6f  ly in the develo
2b540 70 6d 65 6e 74 20 6f 66 20 61 6e 20 61 70 70 6c  pment of an appl
2b550 69 63 61 74 69 6f 6e 20 61 73 20 64 6f 69 6e 67  ication as doing
2b560 20 73 6f 20 69 73 0a 61 20 3c 61 20 68 72 65 66   so is.a <a href
2b570 3d 22 68 74 74 70 3a 2f 2f 63 32 2e 63 6f 6d 2f  ="http://c2.com/
2b580 63 67 69 2f 77 69 6b 69 3f 50 72 65 6d 61 74 75  cgi/wiki?Prematu
2b590 72 65 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 22 3e  reOptimization">
2b5a0 70 72 65 6d 61 74 75 72 65 0a 6f 70 74 69 6d 69  premature.optimi
2b5b0 7a 61 74 69 6f 6e 3c 2f 61 3e 2e 20 20 54 68 65  zation</a>.  The
2b5c0 20 73 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e   special handlin
2b5d0 67 20 6f 66 20 43 52 4f 53 53 20 4a 4f 49 4e 20  g of CROSS JOIN 
2b5e0 69 73 20 61 6e 20 53 51 4c 69 74 65 2d 73 70 65  is an SQLite-spe
2b5f0 63 69 66 69 63 0a 66 65 61 74 75 72 65 20 61 6e  cific.feature an
2b600 64 20 69 73 20 6e 6f 74 20 61 20 70 61 72 74 20  d is not a part 
2b610 6f 66 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e  of standard SQL.
2b620 0a 20 20 20 20 20 20 20 0a 0a 3c 74 63 6c 3e 68  .       ..<tcl>h
2b630 64 5f 66 72 61 67 6d 65 6e 74 20 77 68 65 72 65  d_fragment where
2b640 63 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63  clause</tcl>.<tc
2b650 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 57  l>hd_keywords {W
2b660 48 45 52 45 20 63 6c 61 75 73 65 7d 3c 2f 74 63  HERE clause}</tc
2b670 6c 3e 0a 3c 70 3e 3c 62 3e 32 2e 20 57 48 45 52  l>.<p><b>2. WHER
2b680 45 20 63 6c 61 75 73 65 20 66 69 6c 74 65 72 69  E clause filteri
2b690 6e 67 2e 3c 2f 62 3e 0a 0a 3c 70 3e 5e 28 49 66  ng.</b>..<p>^(If
2b6a0 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20   a WHERE clause 
2b6b0 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  is specified, th
2b6c0 65 20 57 48 45 52 45 20 65 78 70 72 65 73 73 69  e WHERE expressi
2b6d0 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  on is evaluated 
2b6e0 66 6f 72 20 0a 65 61 63 68 20 72 6f 77 20 69 6e  for .each row in
2b6f0 20 74 68 65 20 69 6e 70 75 74 20 64 61 74 61 20   the input data 
2b700 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78  as a [boolean ex
2b710 70 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20  pression]. Only 
2b720 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74  rows for which t
2b730 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20  he.WHERE clause 
2b740 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75  expression evalu
2b750 61 74 65 73 20 74 6f 20 74 72 75 65 20 61 72 65  ates to true are
2b760 20 69 6e 63 6c 75 64 65 64 20 66 72 6f 6d 20 74   included from t
2b770 68 65 20 64 61 74 61 73 65 74 20 62 65 66 6f 72  he dataset befor
2b780 65 0a 63 6f 6e 74 69 6e 75 69 6e 67 2e 29 5e 20  e.continuing.)^ 
2b790 20 52 6f 77 73 20 61 72 65 20 65 78 63 6c 75 64   Rows are exclud
2b7a0 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65 73 75  ed from the resu
2b7b0 6c 74 20 69 66 20 74 68 65 20 57 48 45 52 45 20  lt if the WHERE 
2b7c0 63 6c 61 75 73 65 0a 65 76 61 6c 75 61 74 65 73  clause.evaluates
2b7d0 20 74 6f 20 65 69 74 68 65 72 20 66 61 6c 73 65   to either false
2b7e0 20 6f 72 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 46 6f   or NULL...<p>Fo
2b7f0 72 20 61 20 4a 4f 49 4e 20 6f 72 20 49 4e 4e 45  r a JOIN or INNE
2b800 52 20 4a 4f 49 4e 20 6f 72 20 43 52 4f 53 53 20  R JOIN or CROSS 
2b810 4a 4f 49 4e 2c 20 74 68 65 72 65 20 69 73 20 6e  JOIN, there is n
2b820 6f 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  o difference bet
2b830 77 65 65 6e 20 0a 61 20 63 6f 6e 73 74 72 61 69  ween .a constrai
2b840 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  nt expression in
2b850 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
2b860 65 20 61 6e 64 20 6f 6e 65 20 69 6e 20 74 68 65  e and one in the
2b870 20 4f 4e 20 63 6c 61 75 73 65 2e 20 20 48 6f 77   ON clause.  How
2b880 65 76 65 72 2c 0a 66 6f 72 20 61 20 4c 45 46 54  ever,.for a LEFT
2b890 20 4a 4f 49 4e 20 6f 72 20 4c 45 46 54 20 4f 55   JOIN or LEFT OU
2b8a0 54 45 52 20 4a 4f 49 4e 2c 20 74 68 65 20 64 69  TER JOIN, the di
2b8b0 66 66 65 72 65 6e 63 65 20 69 73 20 76 65 72 79  fference is very
2b8c0 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 0a 49 6e   important.  .In
2b8d0 20 61 20 4c 45 46 54 20 4a 4f 49 4e 2c 0a 74 68   a LEFT JOIN,.th
2b8e0 65 20 65 78 74 72 61 20 4e 55 4c 4c 20 72 6f 77  e extra NULL row
2b8f0 20 66 6f 72 20 74 68 65 20 72 69 67 68 74 2d 68   for the right-h
2b900 61 6e 64 20 74 61 62 6c 65 20 69 73 20 61 64 64  and table is add
2b910 65 64 20 61 66 74 65 72 20 4f 4e 20 63 6c 61 75  ed after ON clau
2b920 73 65 20 70 72 6f 63 65 73 73 69 6e 67 0a 62 75  se processing.bu
2b930 74 20 62 65 66 6f 72 65 20 57 48 45 52 45 20 63  t before WHERE c
2b940 6c 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67  lause processing
2b950 2e 20 20 41 20 63 6f 6e 73 74 72 61 69 6e 74 20  .  A constraint 
2b960 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 6c 65 66  of the form "lef
2b970 74 2e 78 3d 72 69 67 68 74 2e 79 22 0a 69 6e 20  t.x=right.y".in 
2b980 61 6e 20 4f 4e 20 63 6c 61 75 73 65 20 77 69 6c  an ON clause wil
2b990 6c 20 74 68 65 72 65 66 6f 72 65 20 61 6c 6c 6f  l therefore allo
2b9a0 77 20 74 68 72 6f 75 67 68 20 74 68 65 20 61 64  w through the ad
2b9b0 64 65 64 20 61 6c 6c 2d 4e 55 4c 4c 20 72 6f 77  ded all-NULL row
2b9c0 73 20 6f 66 20 74 68 65 0a 72 69 67 68 74 20 74  s of the.right t
2b9d0 61 62 6c 65 2e 20 20 42 75 74 20 69 66 20 74 68  able.  But if th
2b9e0 61 74 20 73 61 6d 65 20 63 6f 6e 73 74 72 61 69  at same constrai
2b9f0 6e 74 20 69 73 20 69 6e 20 74 68 65 20 57 48 45  nt is in the WHE
2ba00 52 45 20 63 6c 61 75 73 65 20 61 20 4e 55 4c 4c  RE clause a NULL
2ba10 20 69 6e 0a 22 72 69 67 68 74 2e 79 22 20 77 69   in."right.y" wi
2ba20 6c 6c 20 70 72 65 76 65 6e 74 20 74 68 65 20 65  ll prevent the e
2ba30 78 70 72 65 73 73 69 6f 6e 20 22 6c 65 66 74 2e  xpression "left.
2ba40 78 3d 72 69 67 68 74 2e 79 22 20 66 72 6f 6d 20  x=right.y" from 
2ba50 62 65 69 6e 67 20 74 72 75 65 2c 20 61 6e 64 0a  being true, and.
2ba60 74 68 75 73 20 65 78 63 6c 75 64 65 20 74 68 61  thus exclude tha
2ba70 74 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 6f  t row from the o
2ba80 75 74 70 75 74 2e 0a 0a 3c 70 3e 3c 62 3e 33 2e  utput...<p><b>3.
2ba90 20 47 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74   Generation of t
2baa0 68 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74  he set of result
2bab0 20 72 6f 77 73 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e   rows.</b>.<tcl>
2bac0 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65 73 75  hd_fragment resu
2bad0 6c 74 73 65 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c  ltset</tcl>.<tcl
2bae0 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 72 65  >hd_keywords {re
2baf0 73 75 6c 74 2d 73 65 74 20 65 78 70 72 65 73 73  sult-set express
2bb00 69 6f 6e 73 7d 20 7b 47 52 4f 55 50 20 42 59 7d  ions} {GROUP BY}
2bb10 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4f 6e 63 65 20  </tcl>..<p>Once 
2bb20 74 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 66  the input data f
2bb30 72 6f 6d 20 74 68 65 20 46 52 4f 4d 20 63 6c 61  rom the FROM cla
2bb40 75 73 65 20 68 61 73 20 62 65 65 6e 20 66 69 6c  use has been fil
2bb50 74 65 72 65 64 20 62 79 20 74 68 65 0a 57 48 45  tered by the.WHE
2bb60 52 45 20 63 6c 61 75 73 65 20 65 78 70 72 65 73  RE clause expres
2bb70 73 69 6f 6e 20 28 69 66 20 61 6e 79 29 2c 20 74  sion (if any), t
2bb80 68 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74  he set of result
2bb90 20 72 6f 77 73 20 66 6f 72 20 74 68 65 20 73 69   rows for the si
2bba0 6d 70 6c 65 20 0a 53 45 4c 45 43 54 20 61 72 65  mple .SELECT are
2bbb0 20 63 61 6c 63 75 6c 61 74 65 64 2e 20 45 78 61   calculated. Exa
2bbc0 63 74 6c 79 20 68 6f 77 20 74 68 69 73 20 69 73  ctly how this is
2bbd0 20 64 6f 6e 65 20 64 65 70 65 6e 64 73 20 6f 6e   done depends on
2bbe0 20 77 68 65 74 68 65 72 20 74 68 65 20 73 69 6d   whether the sim
2bbf0 70 6c 65 20 0a 53 45 4c 45 43 54 20 69 73 20 61  ple .SELECT is a
2bc00 6e 20 61 67 67 72 65 67 61 74 65 20 6f 72 20 6e  n aggregate or n
2bc10 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71 75 65  on-aggregate que
2bc20 72 79 2c 20 61 6e 64 20 77 68 65 74 68 65 72 20  ry, and whether 
2bc30 6f 72 20 6e 6f 74 20 61 20 47 52 4f 55 50 0a 42  or not a GROUP.B
2bc40 59 20 63 6c 61 75 73 65 20 77 61 73 20 73 70 65  Y clause was spe
2bc50 63 69 66 69 65 64 2e 0a 0a 3c 70 3e 20 54 68 65  cified...<p> The
2bc60 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
2bc70 69 6f 6e 73 20 62 65 74 77 65 65 6e 20 74 68 65  ions between the
2bc80 20 53 45 4c 45 43 54 20 61 6e 64 20 46 52 4f 4d   SELECT and FROM
2bc90 20 6b 65 79 77 6f 72 64 73 20 69 73 20 6b 6e 6f   keywords is kno
2bca0 77 6e 20 61 73 0a 74 68 65 20 72 65 73 75 6c 74  wn as.the result
2bcb0 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
2bcc0 2e 20 20 5e 49 66 20 61 20 72 65 73 75 6c 74 20  .  ^If a result 
2bcd0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68  expression is th
2bce0 65 20 73 70 65 63 69 61 6c 20 65 78 70 72 65 73  e special expres
2bcf0 73 69 6f 6e 0a 22 2a 22 20 74 68 65 6e 20 61 6c  sion."*" then al
2bd00 6c 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  l columns in the
2bd10 20 69 6e 70 75 74 20 64 61 74 61 20 61 72 65 20   input data are 
2bd20 73 75 62 73 74 69 74 75 74 65 64 20 66 6f 72 20  substituted for 
2bd30 74 68 61 74 20 6f 6e 65 20 65 78 70 72 65 73 73  that one express
2bd40 69 6f 6e 2e 0a 5e 28 49 66 20 74 68 65 20 65 78  ion..^(If the ex
2bd50 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20  pression is the 
2bd60 61 6c 69 61 73 20 6f 66 20 61 20 74 61 62 6c 65  alias of a table
2bd70 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20   or subquery in 
2bd80 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a  the FROM clause.
2bd90 66 6f 6c 6c 6f 77 65 64 20 62 79 20 22 2e 2a 22  followed by ".*"
2bda0 20 74 68 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e   then all column
2bdb0 73 20 66 72 6f 6d 20 74 68 65 20 6e 61 6d 65 64  s from the named
2bdc0 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65   table or subque
2bdd0 72 79 20 61 72 65 0a 73 75 62 73 74 69 74 75 74  ry are.substitut
2bde0 65 64 20 66 6f 72 20 74 68 65 20 73 69 6e 67 6c  ed for the singl
2bdf0 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 29 5e 20  e expression.)^ 
2be00 5e 28 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72  ^(It is an error
2be10 20 74 6f 20 75 73 65 20 61 20 22 2a 22 20 6f 72   to use a "*" or
2be20 0a 22 61 6c 69 61 73 2e 2a 22 20 65 78 70 72 65  ."alias.*" expre
2be30 73 73 69 6f 6e 20 69 6e 20 61 6e 79 20 63 6f 6e  ssion in any con
2be40 74 65 78 74 20 6f 74 68 65 72 20 74 68 61 6e 20  text other than 
2be50 61 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73  a result express
2be60 69 6f 6e 20 6c 69 73 74 2e 29 5e 0a 5e 28 49 74  ion list.)^.^(It
2be70 20 69 73 20 61 6c 73 6f 20 61 6e 20 65 72 72 6f   is also an erro
2be80 72 20 74 6f 20 75 73 65 20 61 20 22 2a 22 20 6f  r to use a "*" o
2be90 72 20 22 61 6c 69 61 73 2e 2a 22 20 65 78 70 72  r "alias.*" expr
2bea0 65 73 73 69 6f 6e 20 69 6e 20 61 20 73 69 6d 70  ession in a simp
2beb0 6c 65 20 53 45 4c 45 43 54 0a 71 75 65 72 79 20  le SELECT.query 
2bec0 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 68 61  that does not ha
2bed0 76 65 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65  ve a FROM clause
2bee0 2e 29 5e 0a 0a 3c 70 3e 20 5e 28 54 68 65 20 6e  .)^..<p> ^(The n
2bef0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
2bf00 20 69 6e 20 74 68 65 20 72 6f 77 73 20 72 65 74   in the rows ret
2bf10 75 72 6e 65 64 20 62 79 20 61 20 73 69 6d 70 6c  urned by a simpl
2bf20 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
2bf30 6e 74 0a 69 73 20 65 71 75 61 6c 20 74 6f 20 74  nt.is equal to t
2bf40 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 78 70  he number of exp
2bf50 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20  ressions in the 
2bf60 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f  result expressio
2bf70 6e 20 6c 69 73 74 20 61 66 74 65 72 0a 73 75 62  n list after.sub
2bf80 73 74 69 74 75 74 69 6f 6e 20 6f 66 20 2a 20 61  stitution of * a
2bf90 6e 64 20 61 6c 69 61 73 2e 2a 20 65 78 70 72 65  nd alias.* expre
2bfa0 73 73 69 6f 6e 73 2e 29 5e 20 45 61 63 68 20 72  ssions.)^ Each r
2bfb0 65 73 75 6c 74 20 72 6f 77 20 69 73 20 63 61 6c  esult row is cal
2bfc0 63 75 6c 61 74 65 64 20 62 79 0a 65 76 61 6c 75  culated by.evalu
2bfd0 61 74 69 6e 67 20 74 68 65 20 65 78 70 72 65 73  ating the expres
2bfe0 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 72 65 73  sions in the res
2bff0 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  ult expression l
2c000 69 73 74 20 77 69 74 68 20 72 65 73 70 65 63 74  ist with respect
2c010 20 74 6f 20 61 0a 73 69 6e 67 6c 65 20 72 6f 77   to a.single row
2c020 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61 20 6f   of input data o
2c030 72 2c 20 66 6f 72 20 61 67 67 72 65 67 61 74 65  r, for aggregate
2c040 20 71 75 65 72 69 65 73 2c 20 77 69 74 68 20 72   queries, with r
2c050 65 73 70 65 63 74 20 74 6f 20 61 20 67 72 6f 75  espect to a grou
2c060 70 0a 6f 66 20 72 6f 77 73 2e 0a 0a 3c 75 6c 3e  p.of rows...<ul>
2c070 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68  .  <li><p>^If th
2c080 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
2c090 6e 74 20 69 73 20 3c 62 3e 61 20 6e 6f 6e 2d 61  nt is <b>a non-a
2c0a0 67 67 72 65 67 61 74 65 20 71 75 65 72 79 3c 2f  ggregate query</
2c0b0 62 3e 2c 20 74 68 65 6e 20 0a 20 20 20 20 65 61  b>, then .    ea
2c0c0 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  ch expression in
2c0d0 20 74 68 65 20 72 65 73 75 6c 74 20 65 78 70 72   the result expr
2c0e0 65 73 73 69 6f 6e 20 6c 69 73 74 20 69 73 20 65  ession list is e
2c0f0 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63  valuated for eac
2c100 68 20 72 6f 77 20 69 6e 0a 20 20 20 20 74 68 65  h row in.    the
2c110 20 64 61 74 61 73 65 74 20 66 69 6c 74 65 72 65   dataset filtere
2c120 64 20 62 79 20 74 68 65 20 57 48 45 52 45 20 63  d by the WHERE c
2c130 6c 61 75 73 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  lause...  <li><p
2c140 3e 5e 49 66 20 74 68 65 20 53 45 4c 45 43 54 20  >^If the SELECT 
2c150 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e  statement is <b>
2c160 61 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65  an aggregate que
2c170 72 79 20 77 69 74 68 6f 75 74 20 61 20 47 52 4f  ry without a GRO
2c180 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e 20 63 6c  UP.    BY</b> cl
2c190 61 75 73 65 2c 20 74 68 65 6e 20 65 61 63 68 20  ause, then each 
2c1a0 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
2c1b0 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75  sion in the resu
2c1c0 6c 74 2d 73 65 74 20 69 73 20 0a 20 20 20 20 65  lt-set is .    e
2c1d0 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 61 63  valuated once ac
2c1e0 72 6f 73 73 20 74 68 65 20 65 6e 74 69 72 65 20  ross the entire 
2c1f0 64 61 74 61 73 65 74 2e 20 5e 45 61 63 68 20 6e  dataset. ^Each n
2c200 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70  on-aggregate exp
2c210 72 65 73 73 69 6f 6e 0a 20 20 20 20 69 6e 20 74  ression.    in t
2c220 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73  he result-set is
2c230 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20   evaluated once 
2c240 66 6f 72 20 61 6e 20 61 72 62 69 74 72 61 72 69  for an arbitrari
2c250 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f 77 20  ly selected row 
2c260 6f 66 0a 20 20 20 20 74 68 65 20 64 61 74 61 73  of.    the datas
2c270 65 74 2e 20 5e 54 68 65 20 73 61 6d 65 20 61 72  et. ^The same ar
2c280 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74  bitrarily select
2c290 65 64 20 72 6f 77 20 69 73 20 75 73 65 64 20 66  ed row is used f
2c2a0 6f 72 20 65 61 63 68 0a 20 20 20 20 6e 6f 6e 2d  or each.    non-
2c2b0 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
2c2c0 73 69 6f 6e 2e 20 5e 4f 72 2c 20 69 66 20 74 68  sion. ^Or, if th
2c2d0 65 20 64 61 74 61 73 65 74 20 63 6f 6e 74 61 69  e dataset contai
2c2e0 6e 73 20 7a 65 72 6f 20 72 6f 77 73 2c 20 74 68  ns zero rows, th
2c2f0 65 6e 20 0a 20 20 20 20 65 61 63 68 20 6e 6f 6e  en .    each non
2c300 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65  -aggregate expre
2c310 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74  ssion is evaluat
2c320 65 64 20 61 67 61 69 6e 73 74 20 61 20 72 6f 77  ed against a row
2c330 20 63 6f 6e 73 69 73 74 69 6e 67 0a 20 20 20 20   consisting.    
2c340 65 6e 74 69 72 65 6c 79 20 6f 66 20 4e 55 4c 4c  entirely of NULL
2c350 20 76 61 6c 75 65 73 2e 0a 0a 20 20 20 3c 70 3e   values...   <p>
2c360 5e 54 68 65 20 73 69 6e 67 6c 65 20 72 6f 77 20  ^The single row 
2c370 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20 64 61  of result-set da
2c380 74 61 20 63 72 65 61 74 65 64 20 62 79 20 65 76  ta created by ev
2c390 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61 67 67  aluating the agg
2c3a0 72 65 67 61 74 65 0a 20 20 20 20 61 6e 64 20 6e  regate.    and n
2c3b0 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70  on-aggregate exp
2c3c0 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20  ressions in the 
2c3d0 72 65 73 75 6c 74 2d 73 65 74 20 66 6f 72 6d 73  result-set forms
2c3e0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61   the result of a
2c3f0 6e 0a 20 20 20 20 61 67 67 72 65 67 61 74 65 20  n.    aggregate 
2c400 71 75 65 72 79 20 77 69 74 68 6f 75 74 20 61 20  query without a 
2c410 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2e  GROUP BY clause.
2c420 20 5e 41 6e 20 61 67 67 72 65 67 61 74 65 20 71   ^An aggregate q
2c430 75 65 72 79 20 77 69 74 68 6f 75 74 20 61 0a 20  uery without a. 
2c440 20 20 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75     GROUP BY clau
2c450 73 65 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e  se always return
2c460 73 20 65 78 61 63 74 6c 79 20 6f 6e 65 20 72 6f  s exactly one ro
2c470 77 20 6f 66 20 64 61 74 61 2c 20 65 76 65 6e 20  w of data, even 
2c480 69 66 20 74 68 65 72 65 20 61 72 65 0a 20 20 20  if there are.   
2c490 20 7a 65 72 6f 20 72 6f 77 73 20 6f 66 20 69 6e   zero rows of in
2c4a0 70 75 74 20 64 61 74 61 2e 0a 0a 20 20 3c 6c 69  put data...  <li
2c4b0 3e 3c 70 3e 5e 28 49 66 20 74 68 65 20 53 45 4c  ><p>^(If the SEL
2c4c0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ECT statement is
2c4d0 20 3c 62 3e 61 6e 20 61 67 67 72 65 67 61 74 65   <b>an aggregate
2c4e0 20 71 75 65 72 79 20 77 69 74 68 20 61 20 47 52   query with a GR
2c4f0 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e 20 63  OUP.    BY</b> c
2c500 6c 61 75 73 65 2c 20 74 68 65 6e 20 65 61 63 68  lause, then each
2c510 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
2c520 6f 6e 73 20 73 70 65 63 69 66 69 65 64 20 61 73  ons specified as
2c530 20 70 61 72 74 20 6f 66 20 74 68 65 0a 20 20 20   part of the.   
2c540 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
2c550 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f   is evaluated fo
2c560 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68  r each row of th
2c570 65 20 64 61 74 61 73 65 74 2e 20 45 61 63 68 20  e dataset. Each 
2c580 72 6f 77 0a 20 20 20 20 69 73 20 74 68 65 6e 20  row.    is then 
2c590 61 73 73 69 67 6e 65 64 20 74 6f 20 61 20 22 67  assigned to a "g
2c5a0 72 6f 75 70 22 20 62 61 73 65 64 20 6f 6e 20 74  roup" based on t
2c5b0 68 65 20 72 65 73 75 6c 74 73 3b 20 72 6f 77 73  he results; rows
2c5c0 20 66 6f 72 20 77 68 69 63 68 0a 20 20 20 20 74   for which.    t
2c5d0 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 65 76  he results of ev
2c5e0 61 6c 75 61 74 69 6e 67 20 74 68 65 20 47 52 4f  aluating the GRO
2c5f0 55 50 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  UP BY expression
2c600 73 20 61 72 65 20 74 68 65 20 73 61 6d 65 20 67  s are the same g
2c610 65 74 0a 20 20 20 20 61 73 73 69 67 6e 65 64 20  et.    assigned 
2c620 74 6f 20 74 68 65 20 73 61 6d 65 20 67 72 6f 75  to the same grou
2c630 70 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20 70 75  p.)^ ^For the pu
2c640 72 70 6f 73 65 73 20 6f 66 20 67 72 6f 75 70 69  rposes of groupi
2c650 6e 67 20 72 6f 77 73 2c 20 4e 55 4c 4c 20 0a 20  ng rows, NULL . 
2c660 20 20 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f     values are co
2c670 6e 73 69 64 65 72 65 64 20 65 71 75 61 6c 2e 20  nsidered equal. 
2c680 5e 54 68 65 20 75 73 75 61 6c 20 72 75 6c 65 73  ^The usual rules
2c690 20 66 6f 72 20 5b 63 6f 6c 6c 61 74 69 6f 6e 7c   for [collation|
2c6a0 73 65 6c 65 63 74 69 6e 67 20 61 0a 20 20 20 20  selecting a.    
2c6b0 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
2c6c0 63 65 5d 20 77 69 74 68 20 77 68 69 63 68 20 74  ce] with which t
2c6d0 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 76  o compare text v
2c6e0 61 6c 75 65 73 20 61 70 70 6c 79 20 77 68 65 6e  alues apply when
2c6f0 20 65 76 61 6c 75 61 74 69 6e 67 0a 20 20 20 20   evaluating.    
2c700 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61  expressions in a
2c710 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
2c720 2e 20 20 5e 54 68 65 20 65 78 70 72 65 73 73 69  .  ^The expressi
2c730 6f 6e 73 20 69 6e 20 74 68 65 20 47 52 4f 55 50  ons in the GROUP
2c740 20 42 59 20 63 6c 61 75 73 65 0a 20 20 20 20 64   BY clause.    d
2c750 6f 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 68  o <em>not</em> h
2c760 61 76 65 20 74 6f 20 62 65 20 65 78 70 72 65 73  ave to be expres
2c770 73 69 6f 6e 73 20 74 68 61 74 20 61 70 70 65 61  sions that appea
2c780 72 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e  r in the result.
2c790 20 5e 54 68 65 0a 20 20 20 20 65 78 70 72 65 73   ^The.    expres
2c7a0 73 69 6f 6e 73 20 69 6e 20 61 20 47 52 4f 55 50  sions in a GROUP
2c7b0 20 42 59 20 63 6c 61 75 73 65 20 6d 61 79 20 6e   BY clause may n
2c7c0 6f 74 20 62 65 20 61 67 67 72 65 67 61 74 65 20  ot be aggregate 
2c7d0 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a 0a 20 20  expressions...  
2c7e0 20 20 3c 70 3e 5e 28 49 66 20 61 20 48 41 56 49    <p>^(If a HAVI
2c7f0 4e 47 20 63 6c 61 75 73 65 20 69 73 20 73 70 65  NG clause is spe
2c800 63 69 66 69 65 64 2c 20 69 74 20 69 73 20 65 76  cified, it is ev
2c810 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72  aluated once for
2c820 20 65 61 63 68 20 67 72 6f 75 70 20 0a 20 20 20   each group .   
2c830 20 6f 66 20 72 6f 77 73 20 61 73 20 61 20 5b 62   of rows as a [b
2c840 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
2c850 6e 5d 2e 20 49 66 20 74 68 65 20 72 65 73 75 6c  n]. If the resul
2c860 74 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20  t of evaluating 
2c870 74 68 65 0a 20 20 20 20 48 41 56 49 4e 47 20 63  the.    HAVING c
2c880 6c 61 75 73 65 20 69 73 20 66 61 6c 73 65 2c 20  lause is false, 
2c890 74 68 65 20 67 72 6f 75 70 20 69 73 20 64 69 73  the group is dis
2c8a0 63 61 72 64 65 64 2e 29 5e 20 5e 49 66 20 74 68  carded.)^ ^If th
2c8b0 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20  e HAVING clause 
2c8c0 69 73 0a 20 20 20 20 61 6e 20 61 67 67 72 65 67  is.    an aggreg
2c8d0 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  ate expression, 
2c8e0 69 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  it is evaluated 
2c8f0 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20  across all rows 
2c900 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 49  in the group. ^I
2c910 66 0a 20 20 20 20 61 20 48 41 56 49 4e 47 20 63  f.    a HAVING c
2c920 6c 61 75 73 65 20 69 73 20 61 20 6e 6f 6e 2d 61  lause is a non-a
2c930 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73  ggregate express
2c940 69 6f 6e 2c 20 69 74 20 69 73 20 65 76 61 6c 75  ion, it is evalu
2c950 61 74 65 64 20 77 69 74 68 20 72 65 73 70 65 63  ated with respec
2c960 74 0a 20 20 20 20 74 6f 20 61 6e 20 61 72 62 69  t.    to an arbi
2c970 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74 65 64  trarily selected
2c980 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 67 72   row from the gr
2c990 6f 75 70 2e 20 20 5e 54 68 65 20 48 41 56 49 4e  oup.  ^The HAVIN
2c9a0 47 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79  G expression may
2c9b0 0a 20 20 20 20 72 65 66 65 72 20 74 6f 20 76 61  .    refer to va
2c9c0 6c 75 65 73 2c 20 65 76 65 6e 20 61 67 67 72 65  lues, even aggre
2c9d0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20  gate functions, 
2c9e0 74 68 61 74 20 61 72 65 20 6e 6f 74 20 69 6e 20  that are not in 
2c9f0 74 68 65 20 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a  the result.</p>.
2ca00 0a 20 20 20 20 3c 70 3e 5e 45 61 63 68 20 65 78  .    <p>^Each ex
2ca10 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
2ca20 72 65 73 75 6c 74 2d 73 65 74 20 69 73 20 74 68  result-set is th
2ca30 65 6e 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63  en evaluated onc
2ca40 65 20 66 6f 72 20 65 61 63 68 0a 20 20 20 20 67  e for each.    g
2ca50 72 6f 75 70 20 6f 66 20 72 6f 77 73 2e 20 5e 49  roup of rows. ^I
2ca60 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
2ca70 20 69 73 20 61 6e 20 61 67 67 72 65 67 61 74 65   is an aggregate
2ca80 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20   expression, it 
2ca90 69 73 20 0a 20 20 20 20 65 76 61 6c 75 61 74 65  is .    evaluate
2caa0 64 20 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77  d across all row
2cab0 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 20  s in the group. 
2cac0 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 69  ^Otherwise, it i
2cad0 73 20 65 76 61 6c 75 61 74 65 64 20 61 67 61 69  s evaluated agai
2cae0 6e 73 74 0a 20 20 20 20 61 20 73 69 6e 67 6c 65  nst.    a single
2caf0 20 61 72 62 69 74 72 61 72 69 6c 79 20 63 68 6f   arbitrarily cho
2cb00 73 65 6e 20 72 6f 77 20 66 72 6f 6d 20 77 69 74  sen row from wit
2cb10 68 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 20 5e  hin the group. ^
2cb20 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65  If there is more
2cb30 0a 20 20 20 20 74 68 61 6e 20 6f 6e 65 20 6e 6f  .    than one no
2cb40 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72  n-aggregate expr
2cb50 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65  ession in the re
2cb60 73 75 6c 74 2d 73 65 74 2c 20 74 68 65 6e 20 61  sult-set, then a
2cb70 6c 6c 20 73 75 63 68 0a 20 20 20 20 65 78 70 72  ll such.    expr
2cb80 65 73 73 69 6f 6e 73 20 61 72 65 20 65 76 61 6c  essions are eval
2cb90 75 61 74 65 64 20 66 6f 72 20 74 68 65 20 73 61  uated for the sa
2cba0 6d 65 20 72 6f 77 2e 0a 0a 20 20 20 20 3c 70 3e  me row...    <p>
2cbb0 5e 45 61 63 68 20 67 72 6f 75 70 20 6f 66 20 69  ^Each group of i
2cbc0 6e 70 75 74 20 64 61 74 61 73 65 74 20 72 6f 77  nput dataset row
2cbd0 73 20 63 6f 6e 74 72 69 62 75 74 65 73 20 61 20  s contributes a 
2cbe0 73 69 6e 67 6c 65 20 72 6f 77 20 74 6f 20 74 68  single row to th
2cbf0 65 20 0a 20 20 20 20 73 65 74 20 6f 66 20 72 65  e .    set of re
2cc00 73 75 6c 74 20 72 6f 77 73 2e 20 5e 53 75 62 6a  sult rows. ^Subj
2cc10 65 63 74 20 74 6f 20 66 69 6c 74 65 72 69 6e 67  ect to filtering
2cc20 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
2cc30 20 74 68 65 20 44 49 53 54 49 4e 43 54 0a 20 20   the DISTINCT.  
2cc40 20 20 6b 65 79 77 6f 72 64 2c 20 74 68 65 20 6e    keyword, the n
2cc50 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 72 65  umber of rows re
2cc60 74 75 72 6e 65 64 20 62 79 20 61 6e 20 61 67 67  turned by an agg
2cc70 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69 74  regate query wit
2cc80 68 20 61 20 47 52 4f 55 50 0a 20 20 20 20 42 59  h a GROUP.    BY
2cc90 20 63 6c 61 75 73 65 20 69 73 20 74 68 65 20 73   clause is the s
2cca0 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d 62 65  ame as the numbe
2ccb0 72 20 6f 66 20 67 72 6f 75 70 73 20 6f 66 20 72  r of groups of r
2ccc0 6f 77 73 20 70 72 6f 64 75 63 65 64 20 62 79 20  ows produced by 
2ccd0 61 70 70 6c 79 69 6e 67 0a 20 20 20 20 74 68 65  applying.    the
2cce0 20 47 52 4f 55 50 20 42 59 20 61 6e 64 20 48 41   GROUP BY and HA
2ccf0 56 49 4e 47 20 63 6c 61 75 73 65 73 20 74 6f 20  VING clauses to 
2cd00 74 68 65 20 66 69 6c 74 65 72 65 64 20 69 6e 70  the filtered inp
2cd10 75 74 20 64 61 74 61 73 65 74 2e 0a 3c 2f 75 6c  ut dataset..</ul
2cd20 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
2cd30 65 6e 74 20 62 61 72 65 61 67 67 20 7b 62 61 72  ent bareagg {bar
2cd40 65 20 61 67 67 72 65 67 61 74 65 20 74 65 72 6d  e aggregate term
2cd50 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 3c 62 3e 53  s}</tcl>.<p><b>S
2cd60 69 64 65 20 6e 6f 74 65 3a 20 42 61 72 65 20 63  ide note: Bare c
2cd70 6f 6c 75 6d 6e 73 20 69 6e 20 61 6e 20 61 67 67  olumns in an agg
2cd80 72 65 67 61 74 65 20 71 75 65 72 69 65 73 2e 3c  regate queries.<
2cd90 2f 62 3e 0a 54 68 65 20 75 73 75 61 6c 20 63 61  /b>.The usual ca
2cda0 73 65 20 69 73 20 74 68 61 74 20 61 6c 6c 20 63  se is that all c
2cdb0 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69 6e 20 61  olumn names in a
2cdc0 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72  n aggregate quer
2cdd0 79 20 61 72 65 20 65 69 74 68 65 72 0a 61 72 67  y are either.arg
2cde0 75 6d 65 6e 74 73 20 74 6f 20 5b 61 67 67 66 75  uments to [aggfu
2cdf0 6e 63 7c 61 67 67 72 65 67 61 74 65 20 66 75 6e  nc|aggregate fun
2ce00 63 74 69 6f 6e 73 5d 20 6f 72 20 65 6c 73 65 20  ctions] or else 
2ce10 61 70 70 65 61 72 73 20 69 6e 20 74 68 65 20 47  appears in the G
2ce20 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2e 0a  ROUP BY clause..
2ce30 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74 68  A column name th
2ce40 61 74 20 69 73 20 6e 6f 74 20 77 69 74 68 69 6e  at is not within
2ce50 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75   an aggregate fu
2ce60 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68 61 74 20  nction and that 
2ce70 69 73 20 6e 6f 74 20 0a 70 61 72 74 20 6f 66 20  is not .part of 
2ce80 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
2ce90 69 73 20 63 61 6c 6c 65 64 20 61 20 22 62 61 72  is called a "bar
2cea0 65 22 20 6f 72 20 22 75 6e 65 6e 63 6c 6f 73 65  e" or "unenclose
2ceb0 64 22 20 6f 72 20 22 6e 61 6b 65 64 22 20 63 6f  d" or "naked" co
2cec0 6c 75 6d 6e 2e 0a 45 78 61 6d 70 6c 65 3a 0a 3c  lumn..Example:.<
2ced0 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
2cee0 0a 53 45 4c 45 43 54 20 61 2c 20 62 2c 20 73 75  .SELECT a, b, su
2cef0 6d 28 63 29 20 46 52 4f 4d 20 74 61 62 31 20 47  m(c) FROM tab1 G
2cf00 52 4f 55 50 20 42 59 20 61 3b 0a 3c 2f 70 72 65  ROUP BY a;.</pre
2cf10 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c  ></blockquote>.<
2cf20 70 3e 49 6e 20 74 68 65 20 71 75 65 72 79 20 61  p>In the query a
2cf30 62 6f 76 65 2c 20 74 68 65 20 22 61 22 20 63 6f  bove, the "a" co
2cf40 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20  lumn is part of 
2cf50 74 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61  the GROUP BY cla
2cf60 75 73 65 0a 61 6e 64 20 73 6f 20 65 61 63 68 20  use.and so each 
2cf70 72 6f 77 20 6f 66 20 74 68 65 20 6f 75 74 70 75  row of the outpu
2cf80 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  t contains one o
2cf90 66 20 74 68 65 20 64 69 73 74 69 6e 63 74 20 76  f the distinct v
2cfa0 61 6c 75 65 73 20 66 6f 72 0a 22 61 22 2e 20 20  alues for."a".  
2cfb0 54 68 65 20 22 63 22 20 63 6f 6c 75 6d 6e 20 69  The "c" column i
2cfc0 73 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68  s contained with
2cfd0 69 6e 20 74 68 65 20 5b 73 75 6d 28 29 5d 20 61  in the [sum()] a
2cfe0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
2cff0 6e 0a 61 6e 64 20 73 6f 20 74 68 61 74 20 6f 75  n.and so that ou
2d000 74 70 75 74 20 63 6f 6c 75 6d 6e 20 69 73 20 74  tput column is t
2d010 68 65 20 73 75 6d 20 6f 66 20 61 6c 6c 20 22 63  he sum of all "c
2d020 22 20 76 61 6c 75 65 73 20 69 6e 20 72 6f 77 73  " values in rows
2d030 20 74 68 61 74 0a 68 61 76 65 20 74 68 65 20 73   that.have the s
2d040 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 22 61  ame value for "a
2d050 22 2e 20 20 42 75 74 20 77 68 61 74 20 69 73 20  ".  But what is 
2d060 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
2d070 65 20 62 61 72 65 20 0a 63 6f 6c 75 6d 6e 20 22  e bare .column "
2d080 62 22 3f 20 54 68 65 20 61 6e 73 77 65 72 20 69  b"? The answer i
2d090 73 20 74 68 61 74 20 74 68 65 20 22 62 22 20 72  s that the "b" r
2d0a0 65 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 74 68  esult will be th
2d0b0 65 0a 76 61 6c 75 65 20 66 6f 72 20 22 62 22 20  e.value for "b" 
2d0c0 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e  in one of the in
2d0d0 70 75 74 20 72 6f 77 73 20 74 68 61 74 20 66 6f  put rows that fo
2d0e0 72 6d 20 74 68 65 20 61 67 67 72 65 67 61 74 65  rm the aggregate
2d0f0 2e 0a 54 68 65 20 70 72 6f 62 6c 65 6d 20 69 73  ..The problem is
2d100 20 74 68 61 74 20 79 6f 75 20 75 73 75 61 6c 6c   that you usuall
2d110 79 20 64 6f 20 6e 6f 74 20 6b 6e 6f 77 20 77 68  y do not know wh
2d120 69 63 68 20 69 6e 70 75 74 20 72 6f 77 20 69 73  ich input row is
2d130 20 75 73 65 64 0a 74 6f 20 63 6f 6d 70 75 74 65   used.to compute
2d140 20 22 62 22 2c 20 61 6e 64 20 73 6f 20 69 6e 20   "b", and so in 
2d150 6d 61 6e 79 20 63 61 73 65 73 20 74 68 65 20 76  many cases the v
2d160 61 6c 75 65 20 66 6f 72 20 22 62 22 20 69 73 20  alue for "b" is 
2d170 75 6e 64 65 66 69 6e 65 64 2e 0a 3c 2f 70 3e 0a  undefined..</p>.
2d180 3c 70 3e 0a 53 70 65 63 69 61 6c 20 70 72 6f 63  <p>.Special proc
2d190 65 73 73 69 6e 67 20 6f 63 63 75 72 73 20 6f 63  essing occurs oc
2d1a0 63 75 72 73 20 77 68 65 6e 20 74 68 65 20 61 67  curs when the ag
2d1b0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
2d1c0 20 69 73 20 0a 65 69 74 68 65 72 20 5b 6d 61 78   is .either [max
2d1d0 41 67 67 46 75 6e 63 7c 6d 69 6e 28 29 5d 20 6f  AggFunc|min()] o
2d1e0 72 20 5b 6d 69 6e 41 67 67 46 75 6e 63 7c 6d 61  r [minAggFunc|ma
2d1f0 78 28 29 5d 2e 20 20 45 78 61 6d 70 6c 65 3a 0a  x()].  Example:.
2d200 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
2d210 3e 0a 53 45 4c 45 43 54 20 61 2c 20 62 2c 20 6d  >.SELECT a, b, m
2d220 61 78 28 63 29 20 46 52 4f 4d 20 74 61 62 31 20  ax(c) FROM tab1 
2d230 47 52 4f 55 50 20 42 59 20 61 3b 0a 3c 2f 70 72  GROUP BY a;.</pr
2d240 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
2d250 57 68 65 6e 20 74 68 65 20 5b 6d 61 78 41 67 67  When the [maxAgg
2d260 46 75 6e 63 7c 6d 69 6e 28 29 5d 20 6f 72 20 5b  Func|min()] or [
2d270 6d 69 6e 41 67 67 46 75 6e 63 7c 6d 61 78 28 29  minAggFunc|max()
2d280 5d 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ] aggregate func
2d290 74 69 6f 6e 73 20 0a 61 72 65 20 75 73 65 64 20  tions .are used 
2d2a0 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  in an aggregate 
2d2b0 71 75 65 72 79 2c 20 61 6c 6c 20 62 61 72 65 20  query, all bare 
2d2c0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72  columns in the r
2d2d0 65 73 75 6c 74 20 73 65 74 20 0a 74 61 6b 65 20  esult set .take 
2d2e0 76 61 6c 75 65 73 20 66 72 6f 6d 20 74 68 65 20  values from the 
2d2f0 69 6e 70 75 74 0a 72 6f 77 20 77 68 69 63 68 20  input.row which 
2d300 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 74 68  also contains th
2d310 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 20 6d 61 78  e minimum or max
2d320 69 6d 75 6d 2e 20 20 53 6f 20 69 6e 20 74 68 65  imum.  So in the
2d330 20 71 75 65 72 79 0a 61 62 6f 76 65 2c 20 74 68   query.above, th
2d340 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 22  e value of the "
2d350 62 22 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  b" column in the
2d360 20 6f 75 74 70 75 74 20 77 69 6c 6c 20 62 65 20   output will be 
2d370 74 68 65 20 76 61 6c 75 65 20 6f 66 0a 74 68 65  the value of.the
2d380 20 22 62 22 20 63 6f 6c 75 6d 6e 20 69 6e 20 74   "b" column in t
2d390 68 65 20 69 6e 70 75 74 20 72 6f 77 20 74 68 61  he input row tha
2d3a0 74 20 68 61 73 20 74 68 65 20 6c 61 72 67 65 73  t has the larges
2d3b0 74 20 22 63 22 20 76 61 6c 75 65 2e 0a 54 68 65  t "c" value..The
2d3c0 72 65 20 69 73 20 73 74 69 6c 6c 20 61 6e 20 61  re is still an a
2d3d0 6d 62 69 67 75 69 74 79 20 69 66 20 74 77 6f 20  mbiguity if two 
2d3e0 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 69  or more of the i
2d3f0 6e 70 75 74 20 72 6f 77 73 20 68 61 76 65 20 74  nput rows have t
2d400 68 65 0a 73 61 6d 65 20 6d 69 6e 69 6d 75 6d 20  he.same minimum 
2d410 6f 72 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65  or maximum value
2d420 20 6f 72 20 69 66 20 74 68 65 20 71 75 65 72 79   or if the query
2d430 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74   contains more t
2d440 68 61 6e 20 6f 6e 65 0a 6d 69 6e 28 29 20 61 6e  han one.min() an
2d450 64 2f 6f 72 20 6d 61 78 28 29 20 61 67 67 72 65  d/or max() aggre
2d460 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 20 4f  gate function. O
2d470 6e 6c 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e  nly the built-in
2d480 20 5b 6d 69 6e 41 67 67 46 75 6e 63 7c 6d 69 6e   [minAggFunc|min
2d490 28 29 5d 20 0a 61 6e 64 20 5b 6d 61 78 41 67 67  ()] .and [maxAgg
2d4a0 46 75 6e 63 7c 6d 61 78 28 29 5d 20 66 75 6e 63  Func|max()] func
2d4b0 74 69 6f 6e 73 20 77 6f 72 6b 20 74 68 69 73 20  tions work this 
2d4c0 77 61 79 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 3c 62  way..</p>..<p><b
2d4d0 3e 34 2e 20 52 65 6d 6f 76 61 6c 20 6f 66 20 64  >4. Removal of d
2d4e0 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 28 44  uplicate rows (D
2d4f0 49 53 54 49 4e 43 54 20 70 72 6f 63 65 73 73 69  ISTINCT processi
2d500 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64  ng).</b>.<tcl>hd
2d510 5f 66 72 61 67 6d 65 6e 74 20 64 69 73 74 69 6e  _fragment distin
2d520 63 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64  ct</tcl>.<tcl>hd
2d530 5f 6b 65 79 77 6f 72 64 73 20 7b 44 49 53 54 49  _keywords {DISTI
2d540 4e 43 54 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  NCT}</tcl>..<p>^
2d550 4f 6e 65 20 6f 66 20 74 68 65 20 41 4c 4c 20 6f  One of the ALL o
2d560 72 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  r DISTINCT keywo
2d570 72 64 73 20 6d 61 79 20 66 6f 6c 6c 6f 77 20 74  rds may follow t
2d580 68 65 20 53 45 4c 45 43 54 20 6b 65 79 77 6f 72  he SELECT keywor
2d590 64 20 69 6e 20 61 20 0a 73 69 6d 70 6c 65 20 53  d in a .simple S
2d5a0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
2d5b0 20 5e 49 66 20 74 68 65 20 73 69 6d 70 6c 65 20   ^If the simple 
2d5c0 53 45 4c 45 43 54 20 69 73 20 61 20 53 45 4c 45  SELECT is a SELE
2d5d0 43 54 20 41 4c 4c 2c 20 74 68 65 6e 20 74 68 65  CT ALL, then the
2d5e0 0a 65 6e 74 69 72 65 20 73 65 74 20 6f 66 20 72  .entire set of r
2d5f0 65 73 75 6c 74 20 72 6f 77 73 20 61 72 65 20 72  esult rows are r
2d600 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53  eturned by the S
2d610 45 4c 45 43 54 2e 20 5e 49 66 20 6e 65 69 74 68  ELECT. ^If neith
2d620 65 72 20 41 4c 4c 20 6f 72 0a 44 49 53 54 49 4e  er ALL or.DISTIN
2d630 43 54 20 61 72 65 20 70 72 65 73 65 6e 74 2c 20  CT are present, 
2d640 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f  then the behavio
2d650 72 20 69 73 20 61 73 20 69 66 20 41 4c 4c 20 77  r is as if ALL w
2d660 65 72 65 20 73 70 65 63 69 66 69 65 64 2e 20 0a  ere specified. .
2d670 5e 49 66 20 74 68 65 20 73 69 6d 70 6c 65 20 53  ^If the simple S
2d680 45 4c 45 43 54 20 69 73 20 61 20 53 45 4c 45 43  ELECT is a SELEC
2d690 54 20 44 49 53 54 49 4e 43 54 2c 20 74 68 65 6e  T DISTINCT, then
2d6a0 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20   duplicate rows 
2d6b0 61 72 65 20 72 65 6d 6f 76 65 64 0a 66 72 6f 6d  are removed.from
2d6c0 20 74 68 65 20 73 65 74 20 6f 66 20 72 65 73 75   the set of resu
2d6d0 6c 74 20 72 6f 77 73 20 62 65 66 6f 72 65 20 69  lt rows before i
2d6e0 74 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 5e  t is returned. ^
2d6f0 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
2d700 20 6f 66 0a 64 65 74 65 63 74 69 6e 67 20 64 75   of.detecting du
2d710 70 6c 69 63 61 74 65 20 72 6f 77 73 2c 20 74 77  plicate rows, tw
2d720 6f 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72  o NULL values ar
2d730 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20  e considered to 
2d740 62 65 20 65 71 75 61 6c 2e 20 5e 54 68 65 0a 5b  be equal. ^The.[
2d750 68 6f 77 20 63 6f 6c 6c 61 74 69 6f 6e 20 69 73  how collation is
2d760 20 64 65 74 65 72 6d 69 6e 65 64 7c 75 73 75 61   determined|usua
2d770 6c 20 72 75 6c 65 73 5d 20 61 70 70 6c 79 20 66  l rules] apply f
2d780 6f 72 20 73 65 6c 65 63 74 69 6e 67 20 61 20 63  or selecting a c
2d790 6f 6c 6c 61 74 69 6f 6e 0a 73 65 71 75 65 6e 63  ollation.sequenc
2d7a0 65 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78  e to compare tex
2d7b0 74 20 76 61 6c 75 65 73 2e 0a 0a 3c 74 63 6c 3e  t values...<tcl>
2d7c0 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6d  .hd_fragment com
2d7d0 70 6f 75 6e 64 20 7b 63 6f 6d 70 6f 75 6e 64 20  pound {compound 
2d7e0 73 65 6c 65 63 74 7d 20 7b 63 6f 6d 70 6f 75 6e  select} {compoun
2d7f0 64 20 71 75 65 72 79 7d 20 7b 63 6f 6d 70 6f 75  d query} {compou
2d800 6e 64 20 53 45 4c 45 43 54 7d 20 7b 63 6f 6d 70  nd SELECT} {comp
2d810 6f 75 6e 64 20 53 45 4c 45 43 54 73 7d 0a 3c 2f  ound SELECTs}.</
2d820 74 63 6c 3e 0a 3c 68 33 3e 43 6f 6d 70 6f 75 6e  tcl>.<h3>Compoun
2d830 64 20 53 65 6c 65 63 74 20 53 74 61 74 65 6d 65  d Select Stateme
2d840 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 77 6f  nts</h3>..<p>Two
2d850 20 6f 72 20 6d 6f 72 65 20 5b 73 69 6d 70 6c 65   or more [simple
2d860 20 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65   SELECT] stateme
2d870 6e 74 73 20 6d 61 79 20 62 65 20 63 6f 6e 6e 65  nts may be conne
2d880 63 74 65 64 20 74 6f 67 65 74 68 65 72 20 74 6f  cted together to
2d890 20 66 6f 72 6d 0a 61 20 63 6f 6d 70 6f 75 6e 64   form.a compound
2d8a0 20 53 45 4c 45 43 54 20 75 73 69 6e 67 20 74 68   SELECT using th
2d8b0 65 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41  e UNION, UNION A
2d8c0 4c 4c 2c 20 49 4e 54 45 52 53 45 43 54 20 6f 72  LL, INTERSECT or
2d8d0 20 45 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72   EXCEPT operator
2d8e0 2c 0a 61 73 20 73 68 6f 77 6e 20 62 79 20 74 68  ,.as shown by th
2d8f0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 69 61 67  e following diag
2d900 72 61 6d 3a 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75  ram:..<tcl>.Recu
2d910 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
2d920 61 6d 20 63 6f 6d 70 6f 75 6e 64 2d 73 65 6c 65  am compound-sele
2d930 63 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ct-stmt.</tcl>..
2d940 3c 70 3e 5e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e  <p>^In a compoun
2d950 64 20 53 45 4c 45 43 54 2c 20 61 6c 6c 20 74 68  d SELECT, all th
2d960 65 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 53 45  e constituent SE
2d970 4c 45 43 54 73 20 6d 75 73 74 20 72 65 74 75 72  LECTs must retur
2d980 6e 20 74 68 65 20 73 61 6d 65 20 0a 6e 75 6d 62  n the same .numb
2d990 65 72 20 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c  er of result col
2d9a0 75 6d 6e 73 2e 20 5e 41 73 20 74 68 65 20 63 6f  umns. ^As the co
2d9b0 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 61 20 63 6f  mponents of a co
2d9c0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 6d 75  mpound SELECT mu
2d9d0 73 74 0a 62 65 20 73 69 6d 70 6c 65 20 53 45 4c  st.be simple SEL
2d9e0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2c 20  ECT statements, 
2d9f0 74 68 65 79 20 6d 61 79 20 6e 6f 74 20 63 6f 6e  they may not con
2da00 74 61 69 6e 20 5b 4f 52 44 45 52 20 42 59 5d 20  tain [ORDER BY] 
2da10 6f 72 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73  or [LIMIT] claus
2da20 65 73 2e 0a 5e 5b 4f 52 44 45 52 20 42 59 5d 20  es..^[ORDER BY] 
2da30 61 6e 64 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75  and [LIMIT] clau
2da40 73 65 73 20 6d 61 79 20 6f 6e 6c 79 20 6f 63 63  ses may only occ
2da50 75 72 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  ur at the end of
2da60 20 74 68 65 20 65 6e 74 69 72 65 20 63 6f 6d 70   the entire comp
2da70 6f 75 6e 64 0a 53 45 4c 45 43 54 2c 20 61 6e 64  ound.SELECT, and
2da80 20 74 68 65 6e 20 6f 6e 6c 79 20 69 66 20 74 68   then only if th
2da90 65 20 66 69 6e 61 6c 20 65 6c 65 6d 65 6e 74 20  e final element 
2daa0 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20  of the compound 
2dab0 69 73 20 6e 6f 74 20 61 20 5b 56 41 4c 55 45 53  is not a [VALUES
2dac0 5d 20 63 6c 61 75 73 65 2e 0a 0a 3c 70 3e 5e 41  ] clause...<p>^A
2dad0 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54   compound SELECT
2dae0 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 55   created using U
2daf0 4e 49 4f 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f  NION ALL operato
2db00 72 20 72 65 74 75 72 6e 73 20 61 6c 6c 20 74 68  r returns all th
2db10 65 20 72 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20  e rows.from the 
2db20 53 45 4c 45 43 54 20 74 6f 20 74 68 65 20 6c 65  SELECT to the le
2db30 66 74 20 6f 66 20 74 68 65 20 55 4e 49 4f 4e 20  ft of the UNION 
2db40 41 4c 4c 20 6f 70 65 72 61 74 6f 72 2c 20 61 6e  ALL operator, an
2db50 64 20 61 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66  d all the rows.f
2db60 72 6f 6d 20 74 68 65 20 53 45 4c 45 43 54 20 74  rom the SELECT t
2db70 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 69  o the right of i
2db80 74 2e 20 5e 54 68 65 20 55 4e 49 4f 4e 20 6f 70  t. ^The UNION op
2db90 65 72 61 74 6f 72 20 77 6f 72 6b 73 20 74 68 65  erator works the
2dba0 20 73 61 6d 65 20 77 61 79 20 61 73 0a 55 4e 49   same way as.UNI
2dbb0 4f 4e 20 41 4c 4c 2c 20 65 78 63 65 70 74 20 74  ON ALL, except t
2dbc0 68 61 74 20 64 75 70 6c 69 63 61 74 65 20 72 6f  hat duplicate ro
2dbd0 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66  ws are removed f
2dbe0 72 6f 6d 20 74 68 65 20 66 69 6e 61 6c 20 72 65  rom the final re
2dbf0 73 75 6c 74 20 73 65 74 2e 0a 5e 54 68 65 20 49  sult set..^The I
2dc00 4e 54 45 52 53 45 43 54 20 6f 70 65 72 61 74 6f  NTERSECT operato
2dc10 72 20 72 65 74 75 72 6e 73 20 74 68 65 20 69 6e  r returns the in
2dc20 74 65 72 73 65 63 74 69 6f 6e 20 6f 66 20 74 68  tersection of th
2dc30 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
2dc40 20 6c 65 66 74 20 61 6e 64 0a 72 69 67 68 74 20   left and.right 
2dc50 53 45 4c 45 43 54 73 2e 20 20 5e 54 68 65 20 45  SELECTs.  ^The E
2dc60 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72 20 72  XCEPT operator r
2dc70 65 74 75 72 6e 73 20 74 68 65 20 73 75 62 73 65  eturns the subse
2dc80 74 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e  t of rows return
2dc90 65 64 20 62 79 20 74 68 65 0a 6c 65 66 74 20 53  ed by the.left S
2dca0 45 4c 45 43 54 20 74 68 61 74 20 61 72 65 20 6e  ELECT that are n
2dcb0 6f 74 20 61 6c 73 6f 20 72 65 74 75 72 6e 65 64  ot also returned
2dcc0 20 62 79 20 74 68 65 20 72 69 67 68 74 2d 68 61   by the right-ha
2dcd0 6e 64 20 53 45 4c 45 43 54 2e 20 5e 44 75 70 6c  nd SELECT. ^Dupl
2dce0 69 63 61 74 65 0a 72 6f 77 73 20 61 72 65 20 72  icate.rows are r
2dcf0 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20  emoved from the 
2dd00 72 65 73 75 6c 74 73 20 6f 66 20 49 4e 54 45 52  results of INTER
2dd10 53 45 43 54 20 61 6e 64 20 45 58 43 45 50 54 20  SECT and EXCEPT 
2dd20 6f 70 65 72 61 74 6f 72 73 20 62 65 66 6f 72 65  operators before
2dd30 20 74 68 65 0a 72 65 73 75 6c 74 20 73 65 74 20   the.result set 
2dd40 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a 3c 70  is returned...<p
2dd50 3e 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73  >^For the purpos
2dd60 65 73 20 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e  es of determinin
2dd70 67 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73  g duplicate rows
2dd80 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 73   for the results
2dd90 20 6f 66 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c   of compound.SEL
2dda0 45 43 54 20 6f 70 65 72 61 74 6f 72 73 2c 20 4e  ECT operators, N
2ddb0 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63  ULL values are c
2ddc0 6f 6e 73 69 64 65 72 65 64 20 65 71 75 61 6c 20  onsidered equal 
2ddd0 74 6f 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61  to other NULL va
2dde0 6c 75 65 73 20 61 6e 64 0a 64 69 73 74 69 6e 63  lues and.distinc
2ddf0 74 20 66 72 6f 6d 20 61 6c 6c 20 6e 6f 6e 2d 4e  t from all non-N
2de00 55 4c 4c 20 76 61 6c 75 65 73 2e 20 5e 54 68 65  ULL values. ^The
2de10 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
2de20 6e 63 65 20 75 73 65 64 20 74 6f 20 63 6f 6d 70  nce used to comp
2de30 61 72 65 20 0a 74 77 6f 20 74 65 78 74 20 76 61  are .two text va
2de40 6c 75 65 73 20 69 73 20 64 65 74 65 72 6d 69 6e  lues is determin
2de50 65 64 20 61 73 20 69 66 20 74 68 65 20 63 6f 6c  ed as if the col
2de60 75 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65 66 74  umns of the left
2de70 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 0a   and right-hand.
2de80 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2de90 73 20 77 65 72 65 20 74 68 65 20 6c 65 66 74 20  s were the left 
2dea0 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20 6f  and right-hand o
2deb0 70 65 72 61 6e 64 73 20 6f 66 20 74 68 65 20 65  perands of the e
2dec0 71 75 61 6c 73 20 28 3d 29 0a 6f 70 65 72 61 74  quals (=).operat
2ded0 6f 72 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  or, except that 
2dee0 67 72 65 61 74 65 72 20 70 72 65 63 65 64 65 6e  greater preceden
2def0 63 65 20 69 73 20 6e 6f 74 20 61 73 73 69 67 6e  ce is not assign
2df00 65 64 20 74 6f 20 61 20 63 6f 6c 6c 61 74 69 6f  ed to a collatio
2df10 6e 20 0a 73 65 71 75 65 6e 63 65 20 73 70 65 63  n .sequence spec
2df20 69 66 69 65 64 20 77 69 74 68 20 74 68 65 20 70  ified with the p
2df30 6f 73 74 66 69 78 20 43 4f 4c 4c 41 54 45 20 6f  ostfix COLLATE o
2df40 70 65 72 61 74 6f 72 2e 20 5e 4e 6f 20 61 66 66  perator. ^No aff
2df50 69 6e 69 74 79 0a 74 72 61 6e 73 66 6f 72 6d 61  inity.transforma
2df60 74 69 6f 6e 73 20 61 72 65 20 61 70 70 6c 69 65  tions are applie
2df70 64 20 74 6f 20 61 6e 79 20 76 61 6c 75 65 73 20  d to any values 
2df80 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 72  when comparing r
2df90 6f 77 73 20 61 73 20 70 61 72 74 20 6f 66 20 61  ows as part of a
2dfa0 0a 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  .compound SELECT
2dfb0 2e 20 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 74 68  . ..<p>^(When th
2dfc0 72 65 65 20 6f 72 20 6d 6f 72 65 20 73 69 6d 70  ree or more simp
2dfd0 6c 65 20 53 45 4c 45 43 54 73 20 61 72 65 20 63  le SELECTs are c
2dfe0 6f 6e 6e 65 63 74 65 64 20 69 6e 74 6f 20 61 20  onnected into a 
2dff0 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c  compound SELECT,
2e000 0a 74 68 65 79 20 67 72 6f 75 70 20 66 72 6f 6d  .they group from
2e010 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20   left to right. 
2e020 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
2e030 69 66 20 22 41 22 2c 20 22 42 22 20 61 6e 64 20  if "A", "B" and 
2e040 22 43 22 20 61 72 65 20 61 6c 6c 0a 73 69 6d 70  "C" are all.simp
2e050 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
2e060 65 6e 74 73 2c 20 28 41 20 6f 70 20 42 20 6f 70  ents, (A op B op
2e070 20 43 29 20 69 73 20 70 72 6f 63 65 73 73 65 64   C) is processed
2e080 20 61 73 20 28 28 41 20 6f 70 20 42 29 20 6f 70   as ((A op B) op
2e090 20 43 29 2e 29 5e 0a 0a 3c 2f 70 3e 0a 0a 3c 74   C).)^..</p>..<t
2e0a0 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f  cl>hd_fragment o
2e0b0 72 64 65 72 62 79 20 7b 6f 72 64 65 72 20 62 79  rderby {order by
2e0c0 7d 20 7b 4f 52 44 45 52 20 42 59 7d 3c 2f 74 63  } {ORDER BY}</tc
2e0d0 6c 3e 0a 3c 68 33 3e 54 68 65 20 4f 52 44 45 52  l>.<h3>The ORDER
2e0e0 20 42 59 20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a   BY clause</h3>.
2e0f0 0a 3c 70 3e 49 66 20 61 20 53 45 4c 45 43 54 20  .<p>If a SELECT 
2e100 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 72  statement that r
2e110 65 74 75 72 6e 73 20 6d 6f 72 65 20 74 68 61 6e  eturns more than
2e120 20 6f 6e 65 20 72 6f 77 20 64 6f 65 73 20 6e 6f   one row does no
2e130 74 20 68 61 76 65 20 61 6e 0a 4f 52 44 45 52 20  t have an.ORDER 
2e140 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 20 6f  BY clause, the o
2e150 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 74 68  rder in which th
2e160 65 20 72 6f 77 73 20 61 72 65 20 72 65 74 75 72  e rows are retur
2e170 6e 65 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ned is undefined
2e180 2e 0a 4f 72 2c 20 69 66 20 61 20 53 45 4c 45 43  ..Or, if a SELEC
2e190 54 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73  T statement does
2e1a0 20 68 61 76 65 20 61 6e 20 4f 52 44 45 52 20 42   have an ORDER B
2e1b0 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74  Y clause, then t
2e1c0 68 65 20 6c 69 73 74 20 6f 66 0a 65 78 70 72 65  he list of.expre
2e1d0 73 73 69 6f 6e 73 20 61 74 74 61 63 68 65 64 20  ssions attached 
2e1e0 74 6f 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  to the ORDER BY 
2e1f0 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6f 72  determine the or
2e200 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77  der in which row
2e210 73 0a 61 72 65 20 72 65 74 75 72 6e 65 64 20 74  s.are returned t
2e220 6f 20 74 68 65 20 75 73 65 72 2e 0a 0a 3c 70 3e  o the user...<p>
2e230 0a 5e 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64  .^In a [compound
2e240 20 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65   SELECT] stateme
2e250 6e 74 2c 20 6f 6e 6c 79 20 74 68 65 20 6c 61 73  nt, only the las
2e260 74 20 6f 72 20 72 69 67 68 74 2d 6d 6f 73 74 20  t or right-most 
2e270 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 0a  [simple SELECT].
2e280 6d 61 79 20 68 61 76 65 20 61 6e 20 4f 52 44 45  may have an ORDE
2e290 52 20 42 59 20 63 6c 61 75 73 65 2e 20 5e 54 68  R BY clause. ^Th
2e2a0 61 74 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  at ORDER BY clau
2e2b0 73 65 20 77 69 6c 6c 20 61 70 70 6c 79 20 61 63  se will apply ac
2e2c0 72 6f 73 73 20 61 6c 6c 20 65 6c 65 6d 65 6e 74  ross all element
2e2d0 73 20 6f 66 0a 74 68 65 20 63 6f 6d 70 6f 75 6e  s of.the compoun
2e2e0 64 2e 20 5e 49 66 20 74 68 65 20 72 69 67 68 74  d. ^If the right
2e2f0 2d 6d 6f 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  -most element of
2e300 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c   a [compound SEL
2e310 45 43 54 5d 20 69 73 20 61 20 5b 56 41 4c 55 45  ECT] is a [VALUE
2e320 53 5d 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20  S] clause,.then 
2e330 6e 6f 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  no ORDER BY clau
2e340 73 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 6f 6e  se is allowed on
2e350 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2e   that statement.
2e360 0a 0a 0a 3c 70 3e 5e 52 6f 77 73 20 61 72 65 20  ...<p>^Rows are 
2e370 66 69 72 73 74 20 73 6f 72 74 65 64 20 62 61 73  first sorted bas
2e380 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74  ed on the result
2e390 73 20 6f 66 0a 65 76 61 6c 75 61 74 69 6e 67 20  s of.evaluating 
2e3a0 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78  the left-most ex
2e3b0 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
2e3c0 4f 52 44 45 52 20 42 59 20 6c 69 73 74 2c 20 74  ORDER BY list, t
2e3d0 68 65 6e 20 74 69 65 73 20 61 72 65 20 62 72 6f  hen ties are bro
2e3e0 6b 65 6e 0a 62 79 20 65 76 61 6c 75 61 74 69 6e  ken.by evaluatin
2e3f0 67 20 74 68 65 20 73 65 63 6f 6e 64 20 6c 65 66  g the second lef
2e400 74 2d 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f  t-most expressio
2e410 6e 20 61 6e 64 20 73 6f 20 6f 6e 2e 20 54 68 65  n and so on. The
2e420 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 0a   order in which.
2e430 74 77 6f 20 72 6f 77 73 20 66 6f 72 20 77 68 69  two rows for whi
2e440 63 68 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20  ch all ORDER BY 
2e450 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c  expressions eval
2e460 75 61 74 65 20 74 6f 20 65 71 75 61 6c 20 76 61  uate to equal va
2e470 6c 75 65 73 20 61 72 65 0a 72 65 74 75 72 6e 65  lues are.returne
2e480 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20  d is undefined. 
2e490 5e 45 61 63 68 20 4f 52 44 45 52 20 42 59 20 65  ^Each ORDER BY e
2e4a0 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 62 65  xpression may be
2e4b0 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c   optionally foll
2e4c0 6f 77 65 64 0a 62 79 20 6f 6e 65 20 6f 66 20 74  owed.by one of t
2e4d0 68 65 20 6b 65 79 77 6f 72 64 73 20 41 53 43 20  he keywords ASC 
2e4e0 28 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73 20  (smaller values 
2e4f0 61 72 65 20 72 65 74 75 72 6e 65 64 20 66 69 72  are returned fir
2e500 73 74 29 20 6f 72 20 44 45 53 43 20 28 6c 61 72  st) or DESC (lar
2e510 67 65 72 0a 76 61 6c 75 65 73 20 61 72 65 20 72  ger.values are r
2e520 65 74 75 72 6e 65 64 20 66 69 72 73 74 29 2e 20  eturned first). 
2e530 5e 49 66 20 6e 65 69 74 68 65 72 20 41 53 43 20  ^If neither ASC 
2e540 6f 72 20 44 45 53 43 20 61 72 65 20 73 70 65 63  or DESC are spec
2e550 69 66 69 65 64 2c 20 72 6f 77 73 0a 61 72 65 20  ified, rows.are 
2e560 73 6f 72 74 65 64 20 69 6e 20 61 73 63 65 6e 64  sorted in ascend
2e570 69 6e 67 20 28 73 6d 61 6c 6c 65 72 20 76 61 6c  ing (smaller val
2e580 75 65 73 20 66 69 72 73 74 29 20 6f 72 64 65 72  ues first) order
2e590 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 0a 3c 70   by default...<p
2e5a0 3e 45 61 63 68 20 4f 52 44 45 52 20 42 59 20 65  >Each ORDER BY e
2e5b0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 70 72 6f  xpression is pro
2e5c0 63 65 73 73 65 64 20 61 73 20 66 6f 6c 6c 6f 77  cessed as follow
2e5d0 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  s:</p>..<ol>.<li
2e5e0 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45  ><p>^If the ORDE
2e5f0 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
2e600 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 69 6e  is a constant in
2e610 74 65 67 65 72 20 4b 20 74 68 65 6e 20 74 68 65  teger K then the
2e620 0a 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 63  .expression is c
2e630 6f 6e 73 69 64 65 72 65 64 20 61 6e 20 61 6c 69  onsidered an ali
2e640 61 73 20 66 6f 72 20 74 68 65 20 4b 2d 74 68 20  as for the K-th 
2e650 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65  column of the re
2e660 73 75 6c 74 20 73 65 74 0a 28 63 6f 6c 75 6d 6e  sult set.(column
2e670 73 20 61 72 65 20 6e 75 6d 62 65 72 65 64 20 66  s are numbered f
2e680 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
2e690 74 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20  t starting with 
2e6a0 31 29 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20  1)...<li><p>^If 
2e6b0 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70  the ORDER BY exp
2e6c0 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 69 64  ression is an id
2e6d0 65 6e 74 69 66 69 65 72 20 74 68 61 74 20 63 6f  entifier that co
2e6e0 72 72 65 73 70 6f 6e 64 73 20 74 6f 0a 74 68 65  rresponds to.the
2e6f0 20 61 6c 69 61 73 20 6f 66 20 6f 6e 65 20 6f 66   alias of one of
2e700 20 74 68 65 20 6f 75 74 70 75 74 20 63 6f 6c 75   the output colu
2e710 6d 6e 73 2c 20 74 68 65 6e 20 74 68 65 20 65 78  mns, then the ex
2e720 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73  pression is cons
2e730 69 64 65 72 65 64 0a 61 6e 20 61 6c 69 61 73 20  idered.an alias 
2e740 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e  for that column.
2e750 0a 0a 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77  ..<li><p>^Otherw
2e760 69 73 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45  ise, if the ORDE
2e770 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
2e780 69 73 20 61 6e 79 20 6f 74 68 65 72 20 65 78 70  is any other exp
2e790 72 65 73 73 69 6f 6e 2c 20 69 74 20 0a 69 73 20  ression, it .is 
2e7a0 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68  evaluated and th
2e7b0 65 20 72 65 74 75 72 6e 65 64 20 76 61 6c 75 65  e returned value
2e7c0 20 75 73 65 64 20 74 6f 20 6f 72 64 65 72 20 74   used to order t
2e7d0 68 65 20 6f 75 74 70 75 74 20 72 6f 77 73 2e 20  he output rows. 
2e7e0 5e 49 66 0a 74 68 65 20 53 45 4c 45 43 54 20 73  ^If.the SELECT s
2e7f0 74 61 74 65 6d 65 6e 74 20 69 73 20 61 20 73 69  tatement is a si
2e800 6d 70 6c 65 20 53 45 4c 45 43 54 2c 20 74 68 65  mple SELECT, the
2e810 6e 20 61 6e 20 4f 52 44 45 52 20 42 59 20 6d 61  n an ORDER BY ma
2e820 79 20 63 6f 6e 74 61 69 6e 20 61 6e 79 0a 61 72  y contain any.ar
2e830 62 69 74 72 61 72 79 20 65 78 70 72 65 73 73 69  bitrary expressi
2e840 6f 6e 73 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69  ons. ^However, i
2e850 66 20 74 68 65 20 53 45 4c 45 43 54 20 69 73 20  f the SELECT is 
2e860 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
2e870 54 2c 20 74 68 65 6e 0a 4f 52 44 45 52 20 42 59  T, then.ORDER BY
2e880 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61   expressions tha
2e890 74 20 61 72 65 20 6e 6f 74 20 61 6c 69 61 73 65  t are not aliase
2e8a0 73 20 74 6f 20 6f 75 74 70 75 74 20 63 6f 6c 75  s to output colu
2e8b0 6d 6e 73 20 6d 75 73 74 20 62 65 20 65 78 61 63  mns must be exac
2e8c0 74 6c 79 0a 74 68 65 20 73 61 6d 65 20 61 73 20  tly.the same as 
2e8d0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73  an expression us
2e8e0 65 64 20 61 73 20 61 6e 20 6f 75 74 70 75 74 20  ed as an output 
2e8f0 63 6f 6c 75 6d 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c  column..</ol>..<
2e900 70 3e 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f  p>^For the purpo
2e910 73 65 73 20 6f 66 20 73 6f 72 74 69 6e 67 20 72  ses of sorting r
2e920 6f 77 73 2c 20 76 61 6c 75 65 73 20 61 72 65 20  ows, values are 
2e930 63 6f 6d 70 61 72 65 64 20 69 6e 20 74 68 65 20  compared in the 
2e940 73 61 6d 65 20 77 61 79 0a 61 73 20 66 6f 72 20  same way.as for 
2e950 5b 63 6f 6d 70 61 72 69 73 6f 6e 20 65 78 70 72  [comparison expr
2e960 65 73 73 69 6f 6e 73 5d 2e 20 54 68 65 20 63 6f  essions]. The co
2e970 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
2e980 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65   used to compare
2e990 0a 74 77 6f 20 74 65 78 74 20 76 61 6c 75 65 73  .two text values
2e9a0 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61   is determined a
2e9b0 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e  s follows:..<ol>
2e9c0 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68  .  <li><p>^If th
2e9d0 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  e ORDER BY expre
2e9e0 73 73 69 6f 6e 20 69 73 20 61 73 73 69 67 6e 65  ssion is assigne
2e9f0 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  d a collation se
2ea00 71 75 65 6e 63 65 20 75 73 69 6e 67 0a 20 20 74  quence using.  t
2ea10 68 65 20 70 6f 73 74 66 69 78 20 5b 43 4f 4c 4c  he postfix [COLL
2ea20 41 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74  ATE operator], t
2ea30 68 65 6e 20 74 68 65 20 73 70 65 63 69 66 69 65  hen the specifie
2ea40 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  d collation sequ
2ea50 65 6e 63 65 20 69 73 0a 20 20 75 73 65 64 2e 0a  ence is.  used..
2ea60 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77    <li><p>^Otherw
2ea70 69 73 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45  ise, if the ORDE
2ea80 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
2ea90 69 73 20 61 6e 20 61 6c 69 61 73 20 74 6f 20 61  is an alias to a
2eaa0 6e 20 65 78 70 72 65 73 73 69 6f 6e 0a 20 20 74  n expression.  t
2eab0 68 61 74 20 68 61 73 20 62 65 65 6e 20 61 73 73  hat has been ass
2eac0 69 67 6e 65 64 20 61 20 63 6f 6c 6c 61 74 69 6f  igned a collatio
2ead0 6e 20 73 65 71 75 65 6e 63 65 20 75 73 69 6e 67  n sequence using
2eae0 20 74 68 65 20 70 6f 73 74 66 69 78 20 0a 20 20   the postfix .  
2eaf0 5b 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f  [COLLATE operato
2eb00 72 5d 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c  r], then the col
2eb10 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
2eb20 61 73 73 69 67 6e 65 64 20 74 6f 20 74 68 65 20  assigned to the 
2eb30 61 6c 69 61 73 65 64 0a 20 20 65 78 70 72 65 73  aliased.  expres
2eb40 73 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20  sion is used..  
2eb50 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73  <li><p>^Otherwis
2eb60 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20  e, if the ORDER 
2eb70 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
2eb80 20 61 20 63 6f 6c 75 6d 6e 20 6f 72 20 61 6e 20   a column or an 
2eb90 61 6c 69 61 73 20 6f 66 0a 20 20 61 6e 20 65 78  alias of.  an ex
2eba0 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
2ebb0 20 61 20 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20   a column, then 
2ebc0 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c  the default coll
2ebd0 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66  ation sequence f
2ebe0 6f 72 0a 20 20 74 68 65 20 63 6f 6c 75 6d 6e 20  or.  the column 
2ebf0 69 73 20 75 73 65 64 2e 20 0a 20 20 3c 6c 69 3e  is used. .  <li>
2ec00 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 74  <p>^Otherwise, t
2ec10 68 65 20 5b 42 49 4e 41 52 59 5d 20 63 6f 6c 6c  he [BINARY] coll
2ec20 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69  ation sequence i
2ec30 73 20 75 73 65 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c  s used..</ol>..<
2ec40 70 3e 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64  p>In a [compound
2ec50 20 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65   SELECT] stateme
2ec60 6e 74 2c 20 61 6c 6c 20 4f 52 44 45 52 20 42 59  nt, all ORDER BY
2ec70 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65   expressions are
2ec80 20 68 61 6e 64 6c 65 64 0a 61 73 20 61 6c 69 61   handled.as alia
2ec90 73 65 73 20 66 6f 72 20 6f 6e 65 20 6f 66 20 74  ses for one of t
2eca0 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
2ecb0 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e  s of the compoun
2ecc0 64 2e 0a 5e 28 49 66 20 61 6e 20 4f 52 44 45 52  d..^(If an ORDER
2ecd0 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
2ece0 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72  s not an integer
2ecf0 20 61 6c 69 61 73 2c 20 74 68 65 6e 20 53 51 4c   alias, then SQL
2ed00 69 74 65 20 73 65 61 72 63 68 65 73 0a 74 68 65  ite searches.the
2ed10 20 6c 65 66 74 2d 6d 6f 73 74 20 53 45 4c 45 43   left-most SELEC
2ed20 54 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e  T in the compoun
2ed30 64 20 66 6f 72 20 61 20 72 65 73 75 6c 74 20 63  d for a result c
2ed40 6f 6c 75 6d 6e 20 74 68 61 74 20 6d 61 74 63 68  olumn that match
2ed50 65 73 20 65 69 74 68 65 72 0a 74 68 65 20 73 65  es either.the se
2ed60 63 6f 6e 64 20 6f 72 20 74 68 69 72 64 20 72 75  cond or third ru
2ed70 6c 65 73 20 61 62 6f 76 65 2e 20 49 66 20 61 20  les above. If a 
2ed80 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
2ed90 74 68 65 20 73 65 61 72 63 68 20 73 74 6f 70 73  the search stops
2eda0 20 61 6e 64 0a 74 68 65 20 65 78 70 72 65 73 73   and.the express
2edb0 69 6f 6e 20 69 73 20 68 61 6e 64 6c 65 64 20 61  ion is handled a
2edc0 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
2edd0 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
2ede0 20 74 68 61 74 20 69 74 20 68 61 73 20 62 65 65   that it has bee
2edf0 6e 0a 6d 61 74 63 68 65 64 20 61 67 61 69 6e 73  n.matched agains
2ee00 74 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68  t. Otherwise, th
2ee10 65 20 6e 65 78 74 20 53 45 4c 45 43 54 20 74 6f  e next SELECT to
2ee20 20 74 68 65 20 72 69 67 68 74 20 69 73 20 74 72   the right is tr
2ee30 69 65 64 2c 20 61 6e 64 20 73 6f 20 6f 6e 2e 29  ied, and so on.)
2ee40 5e 0a 5e 49 66 20 6e 6f 20 6d 61 74 63 68 69 6e  ^.^If no matchin
2ee50 67 20 65 78 70 72 65 73 73 69 6f 6e 20 63 61 6e  g expression can
2ee60 20 62 65 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   be found in the
2ee70 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20   result columns 
2ee80 6f 66 20 61 6e 79 0a 63 6f 6e 73 74 69 74 75 65  of any.constitue
2ee90 6e 74 20 53 45 4c 45 43 54 2c 20 69 74 20 69 73  nt SELECT, it is
2eea0 20 61 6e 20 65 72 72 6f 72 2e 20 5e 45 61 63 68   an error. ^Each
2eeb0 20 74 65 72 6d 20 6f 66 20 74 68 65 20 4f 52 44   term of the ORD
2eec0 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 0a  ER BY clause is.
2eed0 70 72 6f 63 65 73 73 65 64 20 73 65 70 61 72 61  processed separa
2eee0 74 65 6c 79 20 61 6e 64 20 6d 61 79 20 62 65 20  tely and may be 
2eef0 6d 61 74 63 68 65 64 20 61 67 61 69 6e 73 74 20  matched against 
2ef00 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 66  result columns f
2ef10 72 6f 6d 20 64 69 66 66 65 72 65 6e 74 0a 53 45  rom different.SE
2ef20 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
2ef30 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e  in the compound.
2ef40 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
2ef50 61 67 6d 65 6e 74 20 6c 69 6d 69 74 6f 66 66 73  agment limitoffs
2ef60 65 74 20 7b 4c 49 4d 49 54 7d 20 7b 4f 46 46 53  et {LIMIT} {OFFS
2ef70 45 54 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  ET}</tcl>.<h3>Th
2ef80 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 3c 2f  e LIMIT clause</
2ef90 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49 4d  h3>..<p>^The LIM
2efa0 49 54 20 63 6c 61 75 73 65 20 69 73 20 75 73 65  IT clause is use
2efb0 64 20 74 6f 20 70 6c 61 63 65 20 61 6e 20 75 70  d to place an up
2efc0 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65  per bound on the
2efd0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a   number of rows.
2efe0 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
2eff0 65 6e 74 69 72 65 20 53 45 4c 45 43 54 20 73 74  entire SELECT st
2f000 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 6e  atement...<p>^In
2f010 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c   a [compound SEL
2f020 45 43 54 5d 2c 20 6f 6e 6c 79 20 74 68 65 0a 6c  ECT], only the.l
2f030 61 73 74 20 6f 72 20 72 69 67 68 74 2d 6d 6f 73  ast or right-mos
2f040 74 20 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  t [simple SELECT
2f050 5d 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 61 20  ] may contain a 
2f060 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e 20 20 0a  LIMIT clause.  .
2f070 5e 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20  ^In a [compound 
2f080 53 45 4c 45 43 54 5d 2c 20 0a 74 68 65 20 4c 49  SELECT], .the LI
2f090 4d 49 54 20 63 6c 61 75 73 65 20 61 70 70 6c 69  MIT clause appli
2f0a0 65 73 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65  es to the entire
2f0b0 20 63 6f 6d 70 6f 75 6e 64 2c 20 6e 6f 74 20 6a   compound, not j
2f0c0 75 73 74 20 74 68 65 20 66 69 6e 61 6c 20 53 45  ust the final SE
2f0d0 4c 45 43 54 2e 0a 5e 49 66 20 74 68 65 20 72 69  LECT..^If the ri
2f0e0 67 68 74 2d 6d 6f 73 74 20 5b 73 69 6d 70 6c 65  ght-most [simple
2f0f0 20 53 45 4c 45 43 54 5d 20 69 73 20 61 20 5b 56   SELECT] is a [V
2f100 41 4c 55 45 53 20 63 6c 61 75 73 65 5d 20 74 68  ALUES clause] th
2f110 65 6e 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75  en no LIMIT clau
2f120 73 65 0a 69 73 20 61 6c 6c 6f 77 65 64 2e 0a 0a  se.is allowed...
2f130 3c 70 3e 5e 41 6e 79 20 73 63 61 6c 61 72 20 65  <p>^Any scalar e
2f140 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 62 65  xpression may be
2f150 20 75 73 65 64 20 69 6e 20 74 68 65 20 0a 4c 49   used in the .LI
2f160 4d 49 54 20 63 6c 61 75 73 65 2c 20 73 6f 20 6c  MIT clause, so l
2f170 6f 6e 67 20 61 73 20 69 74 20 65 76 61 6c 75 61  ong as it evalua
2f180 74 65 73 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  tes to an intege
2f190 72 20 6f 72 20 61 20 76 61 6c 75 65 20 74 68 61  r or a value tha
2f1a0 74 20 63 61 6e 20 62 65 0a 6c 6f 73 73 6c 65 73  t can be.lossles
2f1b0 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  sly converted to
2f1c0 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 5e 49 66   an integer. ^If
2f1d0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
2f1e0 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20 4e  evaluates to a N
2f1f0 55 4c 4c 20 0a 76 61 6c 75 65 20 6f 72 20 61 6e  ULL .value or an
2f200 79 20 6f 74 68 65 72 20 76 61 6c 75 65 20 74 68  y other value th
2f210 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73  at cannot be los
2f220 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65  slessly converte
2f230 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c  d to an integer,
2f240 20 61 6e 0a 65 72 72 6f 72 20 69 73 20 72 65 74   an.error is ret
2f250 75 72 6e 65 64 2e 20 5e 49 66 20 74 68 65 20 4c  urned. ^If the L
2f260 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20  IMIT expression 
2f270 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20 6e  evaluates to a n
2f280 65 67 61 74 69 76 65 20 76 61 6c 75 65 2c 0a 74  egative value,.t
2f290 68 65 6e 20 74 68 65 72 65 20 69 73 20 6e 6f 20  hen there is no 
2f2a0 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74  upper bound on t
2f2b0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
2f2c0 73 20 72 65 74 75 72 6e 65 64 2e 20 5e 4f 74 68  s returned. ^Oth
2f2d0 65 72 77 69 73 65 2c 20 74 68 65 0a 53 45 4c 45  erwise, the.SELE
2f2e0 43 54 20 72 65 74 75 72 6e 73 20 74 68 65 20 66  CT returns the f
2f2f0 69 72 73 74 20 4e 20 72 6f 77 73 20 6f 66 20 69  irst N rows of i
2f300 74 73 20 72 65 73 75 6c 74 20 73 65 74 20 6f 6e  ts result set on
2f310 6c 79 2c 20 77 68 65 72 65 20 4e 20 69 73 20 74  ly, where N is t
2f320 68 65 20 76 61 6c 75 65 0a 74 68 61 74 20 74 68  he value.that th
2f330 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69  e LIMIT expressi
2f340 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 2e  on evaluates to.
2f350 20 5e 4f 72 2c 20 69 66 20 74 68 65 20 53 45 4c   ^Or, if the SEL
2f360 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 77 6f  ECT statement wo
2f370 75 6c 64 0a 72 65 74 75 72 6e 20 6c 65 73 73 20  uld.return less 
2f380 74 68 61 6e 20 4e 20 72 6f 77 73 20 77 69 74 68  than N rows with
2f390 6f 75 74 20 61 20 4c 49 4d 49 54 20 63 6c 61 75  out a LIMIT clau
2f3a0 73 65 2c 20 74 68 65 6e 20 74 68 65 20 65 6e 74  se, then the ent
2f3b0 69 72 65 20 72 65 73 75 6c 74 20 73 65 74 20 69  ire result set i
2f3c0 73 0a 72 65 74 75 72 6e 65 64 2e 20 0a 0a 3c 70  s.returned. ..<p
2f3d0 3e 5e 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e  >^The expression
2f3e0 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
2f3f0 20 6f 70 74 69 6f 6e 61 6c 20 4f 46 46 53 45 54   optional OFFSET
2f400 20 63 6c 61 75 73 65 20 74 68 61 74 20 6d 61 79   clause that may
2f410 20 66 6f 6c 6c 6f 77 20 61 0a 4c 49 4d 49 54 20   follow a.LIMIT 
2f420 63 6c 61 75 73 65 20 6d 75 73 74 20 61 6c 73 6f  clause must also
2f430 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61 6e 20   evaluate to an 
2f440 69 6e 74 65 67 65 72 2c 20 6f 72 20 61 20 76 61  integer, or a va
2f450 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65 0a  lue that can be.
2f460 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65  losslessly conve
2f470 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67  rted to an integ
2f480 65 72 2e 20 5e 49 66 20 61 6e 20 65 78 70 72 65  er. ^If an expre
2f490 73 73 69 6f 6e 20 68 61 73 20 61 6e 20 4f 46 46  ssion has an OFF
2f4a0 53 45 54 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e  SET clause,.then
2f4b0 20 74 68 65 20 66 69 72 73 74 20 4d 20 72 6f 77   the first M row
2f4c0 73 20 61 72 65 20 6f 6d 69 74 74 65 64 20 66 72  s are omitted fr
2f4d0 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  om the result se
2f4e0 74 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  t returned by th
2f4f0 65 20 53 45 4c 45 43 54 0a 73 74 61 74 65 6d 65  e SELECT.stateme
2f500 6e 74 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20  nt and the next 
2f510 4e 20 72 6f 77 73 20 61 72 65 20 72 65 74 75 72  N rows are retur
2f520 6e 65 64 2c 20 77 68 65 72 65 20 4d 20 61 6e 64  ned, where M and
2f530 20 4e 20 61 72 65 20 74 68 65 20 76 61 6c 75 65   N are the value
2f540 73 20 74 68 61 74 0a 74 68 65 20 4f 46 46 53 45  s that.the OFFSE
2f550 54 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75  T and LIMIT clau
2f560 73 65 73 20 65 76 61 6c 75 61 74 65 20 74 6f 2c  ses evaluate to,
2f570 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 5e   respectively. ^
2f580 4f 72 2c 20 69 66 20 74 68 65 20 53 45 4c 45 43  Or, if the SELEC
2f590 54 0a 77 6f 75 6c 64 20 72 65 74 75 72 6e 20 6c  T.would return l
2f5a0 65 73 73 20 74 68 61 6e 20 4d 2b 4e 20 72 6f 77  ess than M+N row
2f5b0 73 20 69 66 20 69 74 20 64 69 64 20 6e 6f 74 20  s if it did not 
2f5c0 68 61 76 65 20 61 20 4c 49 4d 49 54 20 63 6c 61  have a LIMIT cla
2f5d0 75 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 66 69  use, then the.fi
2f5e0 72 73 74 20 4d 20 72 6f 77 73 20 61 72 65 20 73  rst M rows are s
2f5f0 6b 69 70 70 65 64 20 61 6e 64 20 74 68 65 20 72  kipped and the r
2f600 65 6d 61 69 6e 69 6e 67 20 72 6f 77 73 20 28 69  emaining rows (i
2f610 66 20 61 6e 79 29 20 61 72 65 20 72 65 74 75 72  f any) are retur
2f620 6e 65 64 2e 20 5e 49 66 20 74 68 65 0a 4f 46 46  ned. ^If the.OFF
2f630 53 45 54 20 63 6c 61 75 73 65 20 65 76 61 6c 75  SET clause evalu
2f640 61 74 65 73 20 74 6f 20 61 20 6e 65 67 61 74 69  ates to a negati
2f650 76 65 20 76 61 6c 75 65 2c 20 74 68 65 20 72 65  ve value, the re
2f660 73 75 6c 74 73 20 61 72 65 20 74 68 65 20 73 61  sults are the sa
2f670 6d 65 20 61 73 20 69 66 20 69 74 0a 68 61 64 20  me as if it.had 
2f680 65 76 61 6c 75 61 74 65 64 20 74 6f 20 7a 65 72  evaluated to zer
2f690 6f 2e 0a 0a 3c 70 3e 5e 49 6e 73 74 65 61 64 20  o...<p>^Instead 
2f6a0 6f 66 20 61 20 73 65 70 61 72 61 74 65 20 4f 46  of a separate OF
2f6b0 46 53 45 54 20 63 6c 61 75 73 65 2c 20 74 68 65  FSET clause, the
2f6c0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 6d 61   LIMIT clause ma
2f6d0 79 20 73 70 65 63 69 66 79 20 74 77 6f 0a 73 63  y specify two.sc
2f6e0 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e 73  alar expressions
2f6f0 20 73 65 70 61 72 61 74 65 64 20 62 79 20 61 20   separated by a 
2f700 63 6f 6d 6d 61 2e 20 5e 49 6e 20 74 68 69 73 20  comma. ^In this 
2f710 63 61 73 65 2c 20 74 68 65 20 66 69 72 73 74 20  case, the first 
2f720 65 78 70 72 65 73 73 69 6f 6e 0a 69 73 20 75 73  expression.is us
2f730 65 64 20 61 73 20 74 68 65 20 4f 46 46 53 45 54  ed as the OFFSET
2f740 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20   expression and 
2f750 74 68 65 20 73 65 63 6f 6e 64 20 61 73 20 74 68  the second as th
2f760 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69  e LIMIT expressi
2f770 6f 6e 2e 0a 54 68 69 73 20 69 73 20 63 6f 75 6e  on..This is coun
2f780 74 65 72 2d 69 6e 74 75 69 74 69 76 65 2c 20 61  ter-intuitive, a
2f790 73 20 77 68 65 6e 20 75 73 69 6e 67 20 74 68 65  s when using the
2f7a0 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20 74   OFFSET clause t
2f7b0 68 65 20 73 65 63 6f 6e 64 20 6f 66 0a 74 68 65  he second of.the
2f7c0 20 74 77 6f 20 65 78 70 72 65 73 73 69 6f 6e 73   two expressions
2f7d0 20 69 73 20 74 68 65 20 4f 46 46 53 45 54 20 61   is the OFFSET a
2f7e0 6e 64 20 74 68 65 20 66 69 72 73 74 20 74 68 65  nd the first the
2f7f0 20 4c 49 4d 49 54 2e 20 0a 54 68 69 73 20 72 65   LIMIT. .This re
2f800 76 65 72 73 61 6c 20 6f 66 20 74 68 65 20 6f 66  versal of the of
2f810 66 73 65 74 20 61 6e 64 20 6c 69 6d 69 74 20 69  fset and limit i
2f820 73 20 69 6e 74 65 6e 74 69 6f 6e 61 6c 0a 2d 20  s intentional.- 
2f830 69 74 20 6d 61 78 69 6d 69 7a 65 73 20 63 6f 6d  it maximizes com
2f840 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20  patibility with 
2f850 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61  other SQL databa
2f860 73 65 20 73 79 73 74 65 6d 73 2e 0a 48 6f 77 65  se systems..Howe
2f870 76 65 72 2c 20 74 6f 20 61 76 6f 69 64 20 63 6f  ver, to avoid co
2f880 6e 66 75 73 69 6f 6e 2c 20 70 72 6f 67 72 61 6d  nfusion, program
2f890 6d 65 72 73 20 61 72 65 20 73 74 72 6f 6e 67 6c  mers are strongl
2f8a0 79 20 65 6e 63 6f 75 72 61 67 65 64 20 74 6f 20  y encouraged to 
2f8b0 75 73 65 0a 74 68 65 20 66 6f 72 6d 20 6f 66 20  use.the form of 
2f8c0 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  the LIMIT clause
2f8d0 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20 22   that uses the "
2f8e0 4f 46 46 53 45 54 22 20 6b 65 79 77 6f 72 64 20  OFFSET" keyword 
2f8f0 61 6e 64 20 61 76 6f 69 64 0a 75 73 69 6e 67 20  and avoid.using 
2f900 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 77  a LIMIT clause w
2f910 69 74 68 20 61 20 63 6f 6d 6d 61 2d 73 65 70 61  ith a comma-sepa
2f920 72 61 74 65 64 20 6f 66 66 73 65 74 2e 0a 0a 3c  rated offset...<
2f930 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
2f940 76 61 6c 75 65 73 20 7b 56 41 4c 55 45 53 20 63  values {VALUES c
2f950 6c 61 75 73 65 7d 20 56 41 4c 55 45 53 3c 2f 74  lause} VALUES</t
2f960 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 56 41 4c 55  cl>.<h3>The VALU
2f970 45 53 20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a  ES clause</h3>..
2f980 3c 70 3e 5e 28 54 68 65 20 70 68 72 61 73 65 20  <p>^(The phrase 
2f990 22 56 41 4c 55 45 53 28 3c 69 3e 65 78 70 72 2d  "VALUES(<i>expr-
2f9a0 6c 69 73 74 3c 2f 69 3e 29 22 20 6d 65 61 6e 73  list</i>)" means
2f9b0 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 0a   the same thing.
2f9c0 61 73 20 22 53 45 4c 45 43 54 20 3c 69 3e 65 78  as "SELECT <i>ex
2f9d0 70 72 2d 6c 69 73 74 3c 2f 69 3e 22 2e 29 5e 20  pr-list</i>".)^ 
2f9e0 20 5e 28 54 68 65 20 70 68 72 61 73 65 0a 22 56   ^(The phrase."V
2f9f0 41 4c 55 45 53 28 3c 69 3e 65 78 70 72 2d 6c 69  ALUES(<i>expr-li
2fa00 73 74 2d 31 3c 2f 69 3e 29 2c 2e 2e 2e 2c 28 3c  st-1</i>),...,(<
2fa10 69 3e 65 78 70 72 2d 6c 69 73 74 2d 4e 3c 2f 69  i>expr-list-N</i
2fa20 3e 29 22 20 6d 65 61 6e 73 20 74 68 65 20 73 61  >)" means the sa
2fa30 6d 65 0a 74 68 69 6e 67 20 61 73 20 22 53 45 4c  me.thing as "SEL
2fa40 45 43 54 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74  ECT <i>expr-list
2fa50 2d 31 3c 2f 69 3e 20 55 4e 49 4f 4e 20 41 4c 4c  -1</i> UNION ALL
2fa60 20 2e 2e 2e 20 55 4e 49 4f 4e 20 41 4c 4c 0a 53   ... UNION ALL.S
2fa70 45 4c 45 43 54 20 3c 69 3e 65 78 70 72 2d 6c 69  ELECT <i>expr-li
2fa80 73 74 2d 4e 3c 2f 69 3e 22 2e 29 5e 20 20 42 6f  st-N</i>".)^  Bo
2fa90 74 68 20 66 6f 72 6d 73 20 61 72 65 20 74 68 65  th forms are the
2faa0 20 73 61 6d 65 2c 20 65 78 63 65 70 74 20 74 68   same, except th
2fab0 61 74 0a 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  at.the number of
2fac0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2fad0 74 73 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ts in a compound
2fae0 20 69 73 20 6c 69 6d 69 74 65 64 20 62 79 0a 5b   is limited by.[
2faf0 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4d  SQLITE_LIMIT_COM
2fb00 50 4f 55 4e 44 5f 53 45 4c 45 43 54 5d 20 77 68  POUND_SELECT] wh
2fb10 65 72 65 61 73 20 74 68 65 20 6e 75 6d 62 65 72  ereas the number
2fb20 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a 56 41   of rows in a.VA
2fb30 4c 55 45 53 20 63 6c 61 75 73 65 20 68 61 73 20  LUES clause has 
2fb40 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c 69 6d  no arbitrary lim
2fb50 69 74 2e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72  it...<p>There ar
2fb60 65 20 73 6f 6d 65 20 72 65 73 74 72 69 63 74 69  e some restricti
2fb70 6f 6e 73 20 6f 6e 20 74 68 65 20 75 73 65 20 6f  ons on the use o
2fb80 66 20 61 20 56 41 4c 55 45 53 20 63 6c 61 75 73  f a VALUES claus
2fb90 65 20 74 68 61 74 20 61 72 65 0a 6e 6f 74 20 73  e that are.not s
2fba0 68 6f 77 6e 20 6f 6e 20 74 68 65 20 73 79 6e 74  hown on the synt
2fbb0 61 78 20 64 69 61 67 72 61 6d 73 3a 0a 0a 3c 75  ax diagrams:..<u
2fbc0 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 5e 41 20 56 41  l>.<li><p>.^A VA
2fbd0 4c 55 45 53 20 63 6c 61 75 73 65 20 63 61 6e 6e  LUES clause cann
2fbe0 6f 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62  ot be followed b
2fbf0 79 20 5b 4f 52 44 45 52 20 42 59 5d 2e 0a 0a 3c  y [ORDER BY]...<
2fc00 6c 69 3e 3c 70 3e 0a 5e 41 20 56 41 4c 55 45 53  li><p>.^A VALUES
2fc10 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20 62   clause cannot b
2fc20 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 5b 4c  e followed by [L
2fc30 49 4d 49 54 5d 2e 0a 3c 2f 75 6c 3e 0a 0a 0a 3c  IMIT]..</ul>...<
2fc40 68 33 3e 54 68 65 20 57 49 54 48 20 43 6c 61 75  h3>The WITH Clau
2fc50 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 53 45 4c  se</h3>..<p>^SEL
2fc60 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6d  ECT statements m
2fc70 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79  ay be optionally
2fc80 20 70 72 65 63 65 64 65 64 20 62 79 20 61 20 73   preceded by a s
2fc90 69 6e 67 6c 65 0a 5b 57 49 54 48 20 63 6c 61 75  ingle.[WITH clau
2fca0 73 65 5d 20 74 68 61 74 20 64 65 66 69 6e 65 73  se] that defines
2fcb0 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 5b 63 6f   one or more [co
2fcc0 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
2fcd0 73 73 69 6f 6e 73 5d 0a 66 6f 72 20 75 73 65 20  ssions].for use 
2fce0 77 69 74 68 69 6e 20 74 68 65 20 53 45 4c 45 43  within the SELEC
2fcf0 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 74  T statement...<t
2fd00 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 74  cl>hd_fragment t
2fd10 61 62 66 75 6e 63 31 20 7b 74 61 62 6c 65 2d 76  abfunc1 {table-v
2fd20 61 6c 75 65 64 20 66 75 6e 63 74 69 6f 6e 73 20  alued functions 
2fd30 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
2fd40 73 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 61  se}</tcl>.<h3>Ta
2fd50 62 6c 65 2d 76 61 6c 75 65 64 20 46 75 6e 63 74  ble-valued Funct
2fd60 69 6f 6e 73 20 49 6e 20 54 68 65 20 46 52 4f 4d  ions In The FROM
2fd70 20 43 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70   Clause</h3>..<p
2fd80 3e 41 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c  >A [virtual tabl
2fd90 65 5d 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  e] that contains
2fda0 20 5b 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73   [hidden columns
2fdb0 5d 20 63 61 6e 20 62 65 20 75 73 65 64 20 6c 69  ] can be used li
2fdc0 6b 65 0a 61 20 5b 74 61 62 6c 65 2d 76 61 6c 75  ke.a [table-valu
2fdd0 65 64 20 66 75 6e 63 74 69 6f 6e 5d 20 69 6e 20  ed function] in 
2fde0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e  the FROM clause.
2fdf0 20 20 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20    The arguments 
2fe00 74 6f 20 74 68 65 0a 74 61 62 6c 65 2d 76 61 6c  to the.table-val
2fe10 75 65 64 20 66 75 6e 63 74 69 6f 6e 20 62 65 63  ued function bec
2fe20 6f 6d 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ome constraints 
2fe30 6f 6e 20 74 68 65 20 48 49 44 44 45 4e 20 63 6f  on the HIDDEN co
2fe40 6c 75 6d 6e 73 20 6f 66 0a 74 68 65 20 76 69 72  lumns of.the vir
2fe50 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 41 64 64  tual table.  Add
2fe60 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
2fe70 69 6f 6e 20 63 61 6e 20 62 65 20 66 6f 75 6e 64  ion can be found
2fe80 20 69 6e 20 74 68 65 0a 5b 74 61 62 6c 65 2d 76   in the.[table-v
2fe90 61 6c 75 65 64 20 66 75 6e 63 74 69 6f 6e 73 7c  alued functions|
2fea0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64 6f  virtual table do
2feb0 63 75 6d 65 6e 74 61 74 69 6f 6e 5d 2e 0a 0a 3c  cumentation]...<
2fec0 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
2fed0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fee0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fef0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ff00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ff10 23 23 23 0a 53 65 63 74 69 6f 6e 20 55 50 44 41  ###.Section UPDA
2ff20 54 45 20 75 70 64 61 74 65 20 7b 55 50 44 41 54  TE update {UPDAT
2ff30 45 20 2a 55 50 44 41 54 45 73 7d 0a 0a 52 65 63  E *UPDATEs}..Rec
2ff40 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
2ff50 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d 74 0a  ram update-stmt.
2ff60 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 55  </tcl>..<p>^An U
2ff70 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
2ff80 69 73 20 75 73 65 64 20 74 6f 20 6d 6f 64 69 66  is used to modif
2ff90 79 20 61 20 73 75 62 73 65 74 20 6f 66 20 74 68  y a subset of th
2ffa0 65 20 76 61 6c 75 65 73 20 73 74 6f 72 65 64 20  e values stored 
2ffb0 69 6e 20 0a 7a 65 72 6f 20 6f 72 20 6d 6f 72 65  in .zero or more
2ffc0 20 72 6f 77 73 20 6f 66 20 74 68 65 20 64 61 74   rows of the dat
2ffd0 61 62 61 73 65 20 74 61 62 6c 65 20 69 64 65 6e  abase table iden
2ffe0 74 69 66 69 65 64 20 62 79 20 74 68 65 20 0a 5b  tified by the .[
2fff0 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d  qualified-table-
30000 6e 61 6d 65 5d 20 73 70 65 63 69 66 69 65 64 20  name] specified 
30010 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 55  as part of the U
30020 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e  PDATE statement.
30030 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55 50 44  ..<p>^If the UPD
30040 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 64 6f  ATE statement do
30050 65 73 20 6e 6f 74 20 68 61 76 65 20 61 20 57 48  es not have a WH
30060 45 52 45 20 63 6c 61 75 73 65 2c 20 61 6c 6c 20  ERE clause, all 
30070 72 6f 77 73 20 69 6e 20 74 68 65 0a 74 61 62 6c  rows in the.tabl
30080 65 20 61 72 65 20 6d 6f 64 69 66 69 65 64 20 62  e are modified b
30090 79 20 74 68 65 20 55 50 44 41 54 45 2e 20 5e 4f  y the UPDATE. ^O
300a0 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 55 50  therwise, the UP
300b0 44 41 54 45 20 61 66 66 65 63 74 73 20 6f 6e 6c  DATE affects onl
300c0 79 20 74 68 6f 73 65 0a 72 6f 77 73 20 66 6f 72  y those.rows for
300d0 20 77 68 69 63 68 20 74 68 65 20 57 48 45 52 45   which the WHERE
300e0 20 63 6c 61 75 73 65 0a 5b 62 6f 6f 6c 65 61 6e   clause.[boolean
300f0 20 65 78 70 72 65 73 73 69 6f 6e 7c 62 6f 6f 6c   expression|bool
30100 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ean expression i
30110 73 20 74 72 75 65 5d 2e 20 5e 49 74 20 69 73 20  s true]. ^It is 
30120 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 69 66 20  not an error if 
30130 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65  the.WHERE clause
30140 20 64 6f 65 73 20 6e 6f 74 20 65 76 61 6c 75 61   does not evalua
30150 74 65 20 74 6f 20 74 72 75 65 20 66 6f 72 20 61  te to true for a
30160 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 20 74 61  ny row in the ta
30170 62 6c 65 20 2d 20 74 68 69 73 20 6a 75 73 74 0a  ble - this just.
30180 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 55  means that the U
30190 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
301a0 61 66 66 65 63 74 73 20 7a 65 72 6f 20 72 6f 77  affects zero row
301b0 73 2e 0a 0a 3c 70 3e 54 68 65 20 6d 6f 64 69 66  s...<p>The modif
301c0 69 63 61 74 69 6f 6e 73 20 6d 61 64 65 20 74 6f  ications made to
301d0 20 65 61 63 68 20 72 6f 77 20 61 66 66 65 63 74   each row affect
301e0 65 64 20 62 79 20 61 6e 20 55 50 44 41 54 45 20  ed by an UPDATE 
301f0 73 74 61 74 65 6d 65 6e 74 20 61 72 65 0a 64 65  statement are.de
30200 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
30210 6c 69 73 74 20 6f 66 20 61 73 73 69 67 6e 6d 65  list of assignme
30220 6e 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  nts following th
30230 65 20 53 45 54 20 6b 65 79 77 6f 72 64 2e 20 45  e SET keyword. E
30240 61 63 68 0a 61 73 73 69 67 6e 6d 65 6e 74 20 73  ach.assignment s
30250 70 65 63 69 66 69 65 73 20 61 20 3c 79 79 74 65  pecifies a <yyte
30260 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f  rm>column-name</
30270 79 79 74 65 72 6d 3e 20 74 6f 20 74 68 65 20 6c  yyterm> to the l
30280 65 66 74 20 6f 66 20 74 68 65 20 0a 65 71 75 61  eft of the .equa
30290 6c 73 20 73 69 67 6e 20 61 6e 64 20 61 20 73 63  ls sign and a sc
302a0 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e 20  alar expression 
302b0 74 6f 20 74 68 65 20 72 69 67 68 74 2e 20 0a 5e  to the right. .^
302c0 46 6f 72 20 65 61 63 68 20 61 66 66 65 63 74 65  For each affecte
302d0 64 20 72 6f 77 2c 20 74 68 65 20 6e 61 6d 65 64  d row, the named
302e0 20 63 6f 6c 75 6d 6e 73 0a 61 72 65 20 73 65 74   columns.are set
302f0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 73 20 66   to the values f
30300 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61 74 69  ound by evaluati
30310 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ng the correspon
30320 64 69 6e 67 20 73 63 61 6c 61 72 20 0a 65 78 70  ding scalar .exp
30330 72 65 73 73 69 6f 6e 73 2e 20 5e 49 66 20 61 20  ressions. ^If a 
30340 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2d 6e 61  single column-na
30350 6d 65 20 61 70 70 65 61 72 73 20 6d 6f 72 65 20  me appears more 
30360 74 68 61 6e 20 6f 6e 63 65 20 69 6e 20 74 68 65  than once in the
30370 20 6c 69 73 74 20 6f 66 0a 61 73 73 69 67 6e 6d   list of.assignm
30380 65 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 2c  ent expressions,
30390 20 61 6c 6c 20 62 75 74 20 74 68 65 20 72 69 67   all but the rig
303a0 68 74 6d 6f 73 74 20 6f 63 63 75 72 72 65 6e 63  htmost occurrenc
303b0 65 20 69 73 20 69 67 6e 6f 72 65 64 2e 20 5e 43  e is ignored. ^C
303c0 6f 6c 75 6d 6e 73 0a 74 68 61 74 20 64 6f 20 6e  olumns.that do n
303d0 6f 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65  ot appear in the
303e0 20 6c 69 73 74 20 6f 66 20 61 73 73 69 67 6e 6d   list of assignm
303f0 65 6e 74 73 20 61 72 65 20 6c 65 66 74 20 75 6e  ents are left un
30400 6d 6f 64 69 66 69 65 64 2e 20 5e 54 68 65 20 73  modified. ^The s
30410 63 61 6c 61 72 0a 65 78 70 72 65 73 73 69 6f 6e  calar.expression
30420 73 20 6d 61 79 20 72 65 66 65 72 20 74 6f 20 63  s may refer to c
30430 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 72 6f  olumns of the ro
30440 77 20 62 65 69 6e 67 20 75 70 64 61 74 65 64 2e  w being updated.
30450 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65 20 61   ^In this case a
30460 6c 6c 0a 73 63 61 6c 61 72 20 65 78 70 72 65 73  ll.scalar expres
30470 73 69 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61  sions are evalua
30480 74 65 64 20 62 65 66 6f 72 65 20 61 6e 79 20 61  ted before any a
30490 73 73 69 67 6e 6d 65 6e 74 73 20 61 72 65 20 6d  ssignments are m
304a0 61 64 65 2e 0a 0a 3c 70 3e 42 65 67 69 6e 6e 69  ade...<p>Beginni
304b0 6e 67 20 69 6e 20 53 51 4c 69 74 65 20 5b 76 65  ng in SQLite [ve
304c0 72 73 69 6f 6e 20 33 2e 31 35 2e 30 5d 20 28 5b  rsion 3.15.0] ([
304d0 64 61 74 65 6f 66 3a 33 2e 31 35 2e 30 5d 29 2c  dateof:3.15.0]),
304e0 20 61 6e 20 61 73 73 69 67 6e 6d 65 6e 74 20 69   an assignment i
304f0 6e 0a 74 68 65 20 53 45 54 20 63 6c 61 75 73 65  n.the SET clause
30500 20 63 61 6e 20 62 65 20 61 20 0a 5b 63 6f 6c 75   can be a .[colu
30510 6d 6e 2d 6e 61 6d 65 2d 6c 69 73 74 7c 70 61 72  mn-name-list|par
30520 65 6e 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20  enthesized list 
30530 6f 66 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 5d  of column names]
30540 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 61 6e 64   on the left and
30550 20 61 0a 5b 72 6f 77 20 76 61 6c 75 65 5d 20 6f   a.[row value] o
30560 66 20 74 68 65 20 73 61 6d 65 20 73 69 7a 65 20  f the same size 
30570 6f 6e 20 74 68 65 20 72 69 67 68 74 2e 0a 0a 0a  on the right....
30580 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c  <p>^The optional
30590 20 22 4f 52 20 3c 69 3e 61 63 74 69 6f 6e 3c 2f   "OR <i>action</
305a0 69 3e 22 20 63 6f 6e 66 6c 69 63 74 20 63 6c 61  i>" conflict cla
305b0 75 73 65 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73  use that follows
305c0 20 74 68 65 0a 55 50 44 41 54 45 20 6b 65 79 77   the.UPDATE keyw
305d0 6f 72 64 20 61 6c 6c 6f 77 73 20 74 68 65 20 75  ord allows the u
305e0 73 65 72 20 74 6f 20 6e 6f 6d 69 6e 61 74 65 20  ser to nominate 
305f0 61 20 73 70 65 63 69 66 69 63 0a 63 6f 6e 73 74  a specific.const
30600 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72  raint conflict r
30610 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
30620 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69 6e  thm to use durin
30630 67 20 74 68 69 73 20 6f 6e 65 20 55 50 44 41 54  g this one UPDAT
30640 45 20 63 6f 6d 6d 61 6e 64 2e 0a 52 65 66 65 72  E command..Refer
30650 20 74 6f 20 74 68 65 20 73 65 63 74 69 6f 6e 20   to the section 
30660 65 6e 74 69 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e  entitled [ON CON
30670 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74  FLICT] for addit
30680 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
30690 6e 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63 74  n...<h3>Restrict
306a0 69 6f 6e 73 20 6f 6e 20 55 50 44 41 54 45 20 53  ions on UPDATE S
306b0 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e  tatements Within
306c0 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 3c   CREATE TRIGGER<
306d0 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c  /h3>..<p>The fol
306e0 6c 6f 77 69 6e 67 20 61 64 64 69 74 69 6f 6e 61  lowing additiona
306f0 6c 20 73 79 6e 74 61 78 20 72 65 73 74 72 69 63  l syntax restric
30700 74 69 6f 6e 73 20 61 70 70 6c 79 20 74 6f 20 55  tions apply to U
30710 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 73  PDATE statements
30720 20 74 68 61 74 0a 6f 63 63 75 72 20 77 69 74 68   that.occur with
30730 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61  in the body of a
30740 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   [CREATE TRIGGER
30750 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 0a  ] statement.  ..
30760 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54  <ul>.  <li><p>^T
30770 68 65 20 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65  he <yyterm>table
30780 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 73  -name</yyterm> s
30790 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
307a0 20 6f 66 20 61 6e 20 55 50 44 41 54 45 20 0a 20   of an UPDATE . 
307b0 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 20 77       statement w
307c0 69 74 68 69 6e 0a 20 20 20 20 20 20 61 20 74 72  ithin.      a tr
307d0 69 67 67 65 72 20 62 6f 64 79 20 6d 75 73 74 20  igger body must 
307e0 62 65 20 75 6e 71 75 61 6c 69 66 69 65 64 2e 20  be unqualified. 
307f0 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  ^(In other words
30800 2c 20 74 68 65 0a 20 20 20 20 20 20 3c 69 3e 73  , the.      <i>s
30810 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69 3e 3c 62  chema-name</i><b
30820 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78 20 6f 6e  >.</b> prefix on
30830 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 20   the table name 
30840 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 69 73  of the UPDATE is
30850 0a 20 20 20 20 20 20 6e 6f 74 20 61 6c 6c 6f 77  .      not allow
30860 65 64 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ed within trigge
30870 72 73 2e 29 5e 20 5e 55 6e 6c 65 73 73 20 74 68  rs.)^ ^Unless th
30880 65 20 74 61 62 6c 65 20 74 6f 20 77 68 69 63 68  e table to which
30890 20 74 68 65 20 74 72 69 67 67 65 72 0a 20 20 20   the trigger.   
308a0 20 20 20 69 73 20 61 74 74 61 63 68 65 64 20 69     is attached i
308b0 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20 64 61  s in the TEMP da
308c0 74 61 62 61 73 65 2c 20 74 68 65 20 74 61 62 6c  tabase, the tabl
308d0 65 20 62 65 69 6e 67 20 75 70 64 61 74 65 64 20  e being updated 
308e0 62 79 20 74 68 65 0a 20 20 20 20 20 20 74 72 69  by the.      tri
308f0 67 67 65 72 20 70 72 6f 67 72 61 6d 20 6d 75 73  gger program mus
30900 74 20 72 65 73 69 64 65 20 69 6e 20 74 68 65 20  t reside in the 
30910 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61 73  same database as
30920 20 69 74 2e 20 5e 49 66 20 74 68 65 20 74 61 62   it. ^If the tab
30930 6c 65 0a 20 20 20 20 20 20 74 6f 20 77 68 69 63  le.      to whic
30940 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73  h the trigger is
30950 20 61 74 74 61 63 68 65 64 20 69 73 20 69 6e 20   attached is in 
30960 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73  the TEMP databas
30970 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 20 20  e, then the.    
30980 20 20 75 6e 71 75 61 6c 69 66 69 65 64 20 6e 61    unqualified na
30990 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
309a0 62 65 69 6e 67 20 75 70 64 61 74 65 64 20 69 73  being updated is
309b0 20 72 65 73 6f 6c 76 65 64 20 69 6e 20 74 68 65   resolved in the
309c0 20 73 61 6d 65 20 77 61 79 0a 20 20 20 20 20 20   same way.      
309d0 61 73 20 69 74 20 69 73 20 66 6f 72 20 61 20 74  as it is for a t
309e0 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d 65  op-level stateme
309f0 6e 74 20 28 62 79 20 73 65 61 72 63 68 69 6e 67  nt (by searching
30a00 20 66 69 72 73 74 20 74 68 65 20 54 45 4d 50 20   first the TEMP 
30a10 64 61 74 61 62 61 73 65 2c 0a 20 20 20 20 20 20  database,.      
30a20 74 68 65 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  then the main da
30a30 74 61 62 61 73 65 2c 20 74 68 65 6e 20 61 6e 79  tabase, then any
30a40 20 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 73   other databases
30a50 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68   in the order th
30a60 65 79 20 77 65 72 65 0a 20 20 20 20 20 20 61 74  ey were.      at
30a70 74 61 63 68 65 64 29 2e 0a 0a 20 20 3c 6c 69 3e  tached)...  <li>
30a80 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20  <p>^The INDEXED 
30a90 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58  BY and NOT INDEX
30aa0 45 44 20 63 6c 61 75 73 65 73 20 61 72 65 20 6e  ED clauses are n
30ab0 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 55 50  ot allowed on UP
30ac0 44 41 54 45 0a 20 20 20 20 20 20 73 74 61 74 65  DATE.      state
30ad0 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69  ments within tri
30ae0 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c  ggers.</p>..  <l
30af0 69 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20  i><p>^The LIMIT 
30b00 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61  and ORDER BY cla
30b10 75 73 65 73 20 66 6f 72 20 55 50 44 41 54 45 20  uses for UPDATE 
30b20 61 72 65 20 75 6e 73 75 70 70 6f 72 74 65 64 20  are unsupported 
30b30 77 69 74 68 69 6e 0a 20 20 20 20 20 20 74 72 69  within.      tri
30b40 67 67 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73  ggers, regardles
30b50 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 69 6c 61  s of the compila
30b60 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 75 73 65  tion options use
30b70 64 20 74 6f 20 62 75 69 6c 64 20 53 51 4c 69 74  d to build SQLit
30b80 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70  e..</ul>..<h3>Op
30b90 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 61 6e 64  tional LIMIT and
30ba0 20 4f 52 44 45 52 20 42 59 20 43 6c 61 75 73 65   ORDER BY Clause
30bb0 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20  s</h3>..<p>^(If 
30bc0 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74 20  SQLite is built 
30bd0 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45  with the [SQLITE
30be0 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44  _ENABLE_UPDATE_D
30bf0 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d  ELETE_LIMIT].com
30c00 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
30c10 20 74 68 65 6e 20 74 68 65 20 73 79 6e 74 61 78   then the syntax
30c20 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73   of the UPDATE s
30c30 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78 74 65  tatement is exte
30c40 6e 64 65 64 0a 77 69 74 68 20 6f 70 74 69 6f 6e  nded.with option
30c50 61 6c 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20  al ORDER BY and 
30c60 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 29 5e 20  LIMIT clauses)^ 
30c70 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a  as follows:</p>.
30c80 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67  .<tcl>BubbleDiag
30c90 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d 74 2d  ram update-stmt-
30ca0 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c  limited</tcl>..<
30cb0 70 3e 5e 49 66 20 61 6e 20 55 50 44 41 54 45 20  p>^If an UPDATE 
30cc0 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61 20  statement has a 
30cd0 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68  LIMIT clause, th
30ce0 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
30cf0 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0a 77 69   of rows that.wi
30d00 6c 6c 20 62 65 20 75 70 64 61 74 65 64 20 69 73  ll be updated is
30d10 20 66 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61   found by evalua
30d20 74 69 6e 67 20 74 68 65 20 61 63 63 6f 6d 70 61  ting the accompa
30d30 6e 79 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  nying expression
30d40 20 61 6e 64 20 63 61 73 74 69 6e 67 0a 69 74 20   and casting.it 
30d50 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61  to an integer va
30d60 6c 75 65 2e 20 5e 41 20 6e 65 67 61 74 69 76 65  lue. ^A negative
30d70 20 76 61 6c 75 65 20 69 73 20 69 6e 74 65 72 70   value is interp
30d80 72 65 74 65 64 20 61 73 20 22 6e 6f 20 6c 69 6d  reted as "no lim
30d90 69 74 22 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  it"...<p>^If the
30da0 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f   LIMIT expressio
30db0 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 6e  n evaluates to n
30dc0 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75  on-negative valu
30dd0 65 20 3c 69 3e 4e 3c 2f 69 3e 20 61 6e 64 20 74  e <i>N</i> and t
30de0 68 65 0a 55 50 44 41 54 45 20 73 74 61 74 65 6d  he.UPDATE statem
30df0 65 6e 74 20 68 61 73 20 61 6e 20 4f 52 44 45 52  ent has an ORDER
30e00 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e   BY clause, then
30e10 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74 20 77   all rows that w
30e20 6f 75 6c 64 20 62 65 20 75 70 64 61 74 65 64 20  ould be updated 
30e30 69 6e 0a 74 68 65 20 61 62 73 65 6e 63 65 20 6f  in.the absence o
30e40 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75  f the LIMIT clau
30e50 73 65 20 61 72 65 20 73 6f 72 74 65 64 20 61 63  se are sorted ac
30e60 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 4f  cording to the O
30e70 52 44 45 52 20 42 59 20 61 6e 64 20 74 68 65 0a  RDER BY and the.
30e80 66 69 72 73 74 20 3c 69 3e 4e 3c 2f 69 3e 20 75  first <i>N</i> u
30e90 70 64 61 74 65 64 2e 20 5e 28 49 66 20 74 68 65  pdated. ^(If the
30ea0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
30eb0 74 20 61 6c 73 6f 20 68 61 73 20 61 6e 20 4f 46  t also has an OF
30ec0 46 53 45 54 20 63 6c 61 75 73 65 2c 0a 74 68 65  FSET clause,.the
30ed0 6e 20 69 74 20 69 73 20 73 69 6d 69 6c 61 72 6c  n it is similarl
30ee0 79 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20  y evaluated and 
30ef0 63 61 73 74 20 74 6f 20 61 6e 20 69 6e 74 65 67  cast to an integ
30f00 65 72 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  er value. If the
30f10 20 4f 46 46 53 45 54 0a 65 78 70 72 65 73 73 69   OFFSET.expressi
30f20 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  on evaluates to 
30f30 61 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76  a non-negative v
30f40 61 6c 75 65 20 3c 69 3e 4d 3c 2f 69 3e 2c 20 74  alue <i>M</i>, t
30f50 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 3c 69  hen the first <i
30f60 3e 4d 3c 2f 69 3e 0a 72 6f 77 73 20 61 72 65 20  >M</i>.rows are 
30f70 73 6b 69 70 70 65 64 20 61 6e 64 20 74 68 65 20  skipped and the 
30f80 66 6f 6c 6c 6f 77 69 6e 67 20 3c 69 3e 4e 3c 2f  following <i>N</
30f90 69 3e 20 72 6f 77 73 20 75 70 64 61 74 65 64 20  i> rows updated 
30fa0 69 6e 73 74 65 61 64 2e 29 5e 0a 0a 3c 70 3e 5e  instead.)^..<p>^
30fb0 49 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74  If the UPDATE st
30fc0 61 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f 20 4f  atement has no O
30fd0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20  RDER BY clause, 
30fe0 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68  then all rows th
30ff0 61 74 0a 77 6f 75 6c 64 20 62 65 20 75 70 64 61  at.would be upda
31000 74 65 64 20 69 6e 20 74 68 65 20 61 62 73 65 6e  ted in the absen
31010 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20  ce of the LIMIT 
31020 63 6c 61 75 73 65 20 61 72 65 20 61 73 73 65 6d  clause are assem
31030 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72 62 69 74  bled in an.arbit
31040 72 61 72 79 20 6f 72 64 65 72 20 62 65 66 6f 72  rary order befor
31050 65 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20 4c  e applying the L
31060 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20  IMIT and OFFSET 
31070 63 6c 61 75 73 65 73 20 74 6f 20 64 65 74 65 72  clauses to deter
31080 6d 69 6e 65 20 0a 77 68 69 63 68 20 61 72 65 20  mine .which are 
31090 61 63 74 75 61 6c 6c 79 20 75 70 64 61 74 65 64  actually updated
310a0 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52 44 45  ...<p>^(The ORDE
310b0 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e 20 61  R BY clause on a
310c0 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  n UPDATE stateme
310d0 6e 74 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  nt is used only 
310e0 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69  to determine whi
310f0 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77 69 74  ch.rows fall wit
31100 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20 54  hin the LIMIT. T
31110 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63  he order in whic
31120 68 20 72 6f 77 73 20 61 72 65 20 6d 6f 64 69 66  h rows are modif
31130 69 65 64 20 69 73 20 61 72 62 69 74 72 61 72 79  ied is arbitrary
31140 0a 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e 66 6c  .and is not infl
31150 75 65 6e 63 65 64 20 62 79 20 74 68 65 20 4f 52  uenced by the OR
31160 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 29 5e  DER BY clause.)^
31170 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
31180 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31190 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
311a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
311b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
311c0 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 56  ######.Section V
311d0 41 43 55 55 4d 20 76 61 63 75 75 6d 20 56 41 43  ACUUM vacuum VAC
311e0 55 55 4d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  UUM..RecursiveBu
311f0 62 62 6c 65 44 69 61 67 72 61 6d 20 76 61 63 75  bbleDiagram vacu
31200 75 6d 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  um-stmt.</tcl>..
31210 3c 70 3e 0a 20 20 54 68 65 20 56 41 43 55 55 4d  <p>.  The VACUUM
31220 20 63 6f 6d 6d 61 6e 64 20 72 65 62 75 69 6c 64   command rebuild
31230 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
31240 69 6c 65 2c 20 72 65 70 61 63 6b 69 6e 67 20 69  ile, repacking i
31250 74 20 69 6e 74 6f 20 61 20 6d 69 6e 69 6d 61 6c  t into a minimal
31260 0a 20 20 61 6d 6f 75 6e 74 20 6f 66 20 64 69 73  .  amount of dis
31270 6b 20 73 70 61 63 65 2e 20 54 68 65 72 65 20 61  k space. There a
31280 72 65 20 73 65 76 65 72 61 6c 20 0a 20 20 72 65  re several .  re
31290 61 73 6f 6e 73 20 61 6e 20 61 70 70 6c 69 63 61  asons an applica
312a0 74 69 6f 6e 20 6d 69 67 68 74 20 64 6f 20 74 68  tion might do th
312b0 69 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e  is:..<ul>.  <li>
312c0 20 3c 70 3e 20 5e 55 6e 6c 65 73 73 20 53 51 4c   <p> ^Unless SQL
312d0 69 74 65 20 69 73 20 72 75 6e 6e 69 6e 67 20 69  ite is running i
312e0 6e 20 22 61 75 74 6f 5f 76 61 63 75 75 6d 3d 46  n "auto_vacuum=F
312f0 55 4c 4c 22 20 6d 6f 64 65 2c 20 77 68 65 6e 20  ULL" mode, when 
31300 61 20 6c 61 72 67 65 0a 20 20 20 20 20 61 6d 6f  a large.     amo
31310 75 6e 74 20 6f 66 20 64 61 74 61 20 69 73 20 64  unt of data is d
31320 65 6c 65 74 65 64 20 66 72 6f 6d 20 74 68 65 20  eleted from the 
31330 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 74  database file it
31340 20 6c 65 61 76 65 73 20 62 65 68 69 6e 64 20 65   leaves behind e
31350 6d 70 74 79 0a 20 20 20 20 20 73 70 61 63 65 2c  mpty.     space,
31360 20 6f 72 20 22 66 72 65 65 22 20 64 61 74 61 62   or "free" datab
31370 61 73 65 20 70 61 67 65 73 2e 20 54 68 69 73 20  ase pages. This 
31380 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61  means the databa
31390 73 65 20 66 69 6c 65 20 6d 69 67 68 74 0a 20 20  se file might.  
313a0 20 20 20 62 65 20 6c 61 72 67 65 72 20 74 68 61     be larger tha
313b0 6e 20 73 74 72 69 63 74 6c 79 20 6e 65 63 65 73  n strictly neces
313c0 73 61 72 79 2e 20 5e 52 75 6e 6e 69 6e 67 20 56  sary. ^Running V
313d0 41 43 55 55 4d 20 74 6f 20 72 65 62 75 69 6c 64  ACUUM to rebuild
313e0 20 74 68 65 20 0a 20 20 20 20 20 64 61 74 61 62   the .     datab
313f0 61 73 65 20 72 65 63 6c 61 69 6d 73 20 74 68 69  ase reclaims thi
31400 73 20 73 70 61 63 65 20 61 6e 64 20 72 65 64 75  s space and redu
31410 63 65 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20  ces the size of 
31420 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
31430 65 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e  e...  <li> <p> ^
31440 46 72 65 71 75 65 6e 74 20 69 6e 73 65 72 74 73  Frequent inserts
31450 2c 20 75 70 64 61 74 65 73 2c 20 61 6e 64 20 64  , updates, and d
31460 65 6c 65 74 65 73 20 63 61 6e 20 63 61 75 73 65  eletes can cause
31470 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
31480 6c 65 0a 20 20 20 20 20 74 6f 20 62 65 63 6f 6d  le.     to becom
31490 65 20 66 72 61 67 6d 65 6e 74 65 64 20 2d 20 77  e fragmented - w
314a0 68 65 72 65 20 64 61 74 61 20 66 6f 72 20 61 20  here data for a 
314b0 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6f 72 20  single table or 
314c0 69 6e 64 65 78 20 69 73 20 73 63 61 74 74 65 72  index is scatter
314d0 65 64 20 0a 20 20 20 20 20 61 72 6f 75 6e 64 20  ed .     around 
314e0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
314f0 65 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55  e. ^Running VACU
31500 55 4d 20 65 6e 73 75 72 65 73 20 74 68 61 74 20  UM ensures that 
31510 65 61 63 68 20 74 61 62 6c 65 20 61 6e 64 0a 20  each table and. 
31520 20 20 20 20 69 6e 64 65 78 20 69 73 20 6c 61 72      index is lar
31530 67 65 6c 79 20 73 74 6f 72 65 64 20 63 6f 6e 74  gely stored cont
31540 69 67 75 6f 75 73 6c 79 20 77 69 74 68 69 6e 20  iguously within 
31550 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
31560 65 2e 20 5e 49 6e 20 73 6f 6d 65 0a 20 20 20 20  e. ^In some.    
31570 20 63 61 73 65 73 2c 20 56 41 43 55 55 4d 20 6d   cases, VACUUM m
31580 61 79 20 61 6c 73 6f 20 72 65 64 75 63 65 20 74  ay also reduce t
31590 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 72  he number of par
315a0 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61  tially filled pa
315b0 67 65 73 20 69 6e 0a 20 20 20 20 20 74 68 65 20  ges in.     the 
315c0 64 61 74 61 62 61 73 65 2c 20 72 65 64 75 63 69  database, reduci
315d0 6e 67 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  ng the size of t
315e0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
315f0 20 66 75 72 74 68 65 72 2e 0a 0a 20 20 3c 6c 69   further...  <li
31600 3e 20 3c 70 3e 20 5e 4e 6f 72 6d 61 6c 6c 79 2c  > <p> ^Normally,
31610 20 74 68 65 20 64 61 74 61 62 61 73 65 20 5b 70   the database [p
31620 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64 20 77 68  age_size] and wh
31630 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
31640 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 73   database.     s
31650 75 70 70 6f 72 74 73 20 5b 61 75 74 6f 5f 76 61  upports [auto_va
31660 63 75 75 6d 5d 20 6d 75 73 74 20 62 65 20 63 6f  cuum] must be co
31670 6e 66 69 67 75 72 65 64 20 62 65 66 6f 72 65 20  nfigured before 
31680 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
31690 65 20 69 73 0a 20 20 20 20 20 61 63 74 75 61 6c  e is.     actual
316a0 6c 79 20 63 72 65 61 74 65 64 2e 20 5e 48 6f 77  ly created. ^How
316b0 65 76 65 72 2c 20 77 68 65 6e 20 6e 6f 74 20 69  ever, when not i
316c0 6e 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c  n [write-ahead l
316d0 6f 67 5d 20 6d 6f 64 65 2c 20 74 68 65 20 0a 20  og] mode, the . 
316e0 20 20 20 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20      [page_size] 
316f0 61 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f 76 61 63  and/or [auto_vac
31700 75 75 6d 5d 20 70 72 6f 70 65 72 74 69 65 73 20  uum] properties 
31710 6f 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64  of an existing d
31720 61 74 61 62 61 73 65 20 6d 61 79 20 62 65 0a 20  atabase may be. 
31730 20 20 20 20 63 68 61 6e 67 65 64 20 62 79 20 75      changed by u
31740 73 69 6e 67 20 74 68 65 20 5b 70 61 67 65 5f 73  sing the [page_s
31750 69 7a 65 20 70 72 61 67 6d 61 7c 70 61 67 65 5f  ize pragma|page_
31760 73 69 7a 65 5d 20 20 61 6e 64 2f 6f 72 20 0a 20  size]  and/or . 
31770 20 20 20 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d      [auto_vacuum
31780 7c 70 72 61 67 6d 61 20 61 75 74 6f 5f 76 61 63  |pragma auto_vac
31790 75 75 6d 5d 20 70 72 61 67 6d 61 73 20 61 6e 64  uum] pragmas and
317a0 20 74 68 65 6e 20 69 6d 6d 65 64 69 61 74 65 6c   then immediatel
317b0 79 20 56 41 43 55 55 4d 69 6e 67 0a 20 20 20 20  y VACUUMing.    
317c0 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 5e   the database. ^
317d0 57 68 65 6e 20 69 6e 20 5b 77 72 69 74 65 2d 61  When in [write-a
317e0 68 65 61 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20  head log] mode, 
317f0 6f 6e 6c 79 20 74 68 65 20 5b 61 75 74 6f 5f 76  only the [auto_v
31800 61 63 75 75 6d 5d 0a 20 20 20 20 20 73 75 70 70  acuum].     supp
31810 6f 72 74 20 70 72 6f 70 65 72 74 79 20 63 61 6e  ort property can
31820 20 62 65 20 63 68 61 6e 67 65 64 20 75 73 69 6e   be changed usin
31830 67 20 56 41 43 55 55 4d 2e 0a 3c 2f 75 6c 3e 0a  g VACUUM..</ul>.
31840 0a 3c 70 3e 5e 42 79 20 64 65 66 61 75 6c 74 2c  .<p>^By default,
31850 20 56 41 43 55 55 4d 20 6f 6e 6c 79 20 77 6f 72   VACUUM only wor
31860 6b 73 20 6f 6e 6c 79 20 6f 6e 20 74 68 65 20 6d  ks only on the m
31870 61 69 6e 20 64 61 74 61 62 61 73 65 2e 0a 5e 5b  ain database..^[
31880 41 54 54 41 43 48 7c 41 74 74 61 63 68 65 64 20  ATTACH|Attached 
31890 64 61 74 61 62 61 73 65 73 5d 20 63 61 6e 20 62  databases] can b
318a0 65 20 76 61 63 75 75 6d 65 64 20 62 79 20 61 70  e vacuumed by ap
318b0 70 65 6e 64 69 6e 67 20 74 68 65 20 61 70 70 72  pending the appr
318c0 6f 70 72 69 61 74 65 0a 3c 79 79 74 65 72 6d 3e  opriate.<yyterm>
318d0 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74  schema-name</yyt
318e0 65 72 6d 3e 20 74 6f 20 74 68 65 20 56 41 43 55  erm> to the VACU
318f0 55 4d 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c  UM statement...<
31900 70 3e 3c 62 3e 43 6f 6d 70 61 74 69 62 69 6c 69  p><b>Compatibili
31910 74 79 20 57 61 72 6e 69 6e 67 3a 3c 2f 62 3e 20  ty Warning:</b> 
31920 54 68 65 20 61 62 69 6c 69 74 79 20 74 6f 20 76  The ability to v
31930 61 63 75 75 6d 20 61 74 74 61 63 68 65 64 20 64  acuum attached d
31940 61 74 61 62 61 73 65 73 20 77 61 73 0a 61 64 64  atabases was.add
31950 65 64 20 69 6e 20 5b 76 65 72 73 69 6f 6e 20 33  ed in [version 3
31960 2e 31 35 2e 30 5d 20 28 5b 64 61 74 65 6f 66 3a  .15.0] ([dateof:
31970 33 2e 31 35 2e 30 5d 29 2e 20 20 50 72 69 6f 72  3.15.0]).  Prior
31980 20 74 6f 20 74 68 61 74 2c 20 61 20 0a 3c 79 79   to that, a .<yy
31990 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65  term>schema-name
319a0 3c 2f 79 79 74 65 72 6d 3e 20 61 64 64 65 64 20  </yyterm> added 
319b0 74 6f 20 74 68 65 0a 56 41 43 55 55 4d 20 73 74  to the.VACUUM st
319c0 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 62 65  atement would be
319d0 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65   silently ignore
319e0 64 20 61 6e 64 20 74 68 65 20 22 6d 61 69 6e 22  d and the "main"
319f0 20 73 63 68 65 6d 61 20 77 6f 75 6c 64 20 62 65   schema would be
31a00 0a 76 61 63 75 75 6d 65 64 2e 3c 2f 70 3e 0a 0a  .vacuumed.</p>..
31a10 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20 63  <p>^The VACUUM c
31a20 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 62 79 20  ommand works by 
31a30 63 6f 70 79 69 6e 67 20 74 68 65 20 63 6f 6e 74  copying the cont
31a40 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74 61  ents of the data
31a50 62 61 73 65 20 69 6e 74 6f 0a 61 20 74 65 6d 70  base into.a temp
31a60 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 20 66  orary database f
31a70 69 6c 65 20 61 6e 64 20 74 68 65 6e 20 6f 76 65  ile and then ove
31a80 72 77 72 69 74 69 6e 67 20 74 68 65 20 6f 72 69  rwriting the ori
31a90 67 69 6e 61 6c 20 77 69 74 68 20 74 68 65 20 0a  ginal with the .
31aa0 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20  contents of the 
31ab0 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 2e 20  temporary file. 
31ac0 5e 57 68 65 6e 20 6f 76 65 72 77 72 69 74 69 6e  ^When overwritin
31ad0 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 2c 20  g the original, 
31ae0 61 20 72 6f 6c 6c 62 61 63 6b 0a 6a 6f 75 72 6e  a rollback.journ
31af0 61 6c 20 6f 72 20 5b 77 72 69 74 65 2d 61 68 65  al or [write-ahe
31b00 61 64 20 6c 6f 67 5d 20 57 41 4c 20 66 69 6c 65  ad log] WAL file
31b10 20 69 73 20 75 73 65 64 20 6a 75 73 74 20 61 73   is used just as
31b20 20 69 74 20 77 6f 75 6c 64 20 62 65 20 66 6f 72   it would be for
31b30 20 61 6e 79 0a 6f 74 68 65 72 20 64 61 74 61 62   any.other datab
31b40 61 73 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ase transaction.
31b50 20 5e 54 68 69 73 20 6d 65 61 6e 73 20 74 68 61   ^This means tha
31b60 74 20 77 68 65 6e 20 56 41 43 55 55 4d 69 6e 67  t when VACUUMing
31b70 20 61 20 64 61 74 61 62 61 73 65 2c 20 0a 61 73   a database, .as
31b80 20 6d 75 63 68 20 61 73 20 74 77 69 63 65 20 74   much as twice t
31b90 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6f  he size of the o
31ba0 72 69 67 69 6e 61 6c 20 64 61 74 61 62 61 73 65  riginal database
31bb0 20 66 69 6c 65 20 69 73 20 72 65 71 75 69 72 65   file is require
31bc0 64 20 69 6e 20 66 72 65 65 0a 64 69 73 6b 20 73  d in free.disk s
31bd0 70 61 63 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20 56  pace...<p>^The V
31be0 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 6d 61  ACUUM command ma
31bf0 79 20 63 68 61 6e 67 65 20 74 68 65 20 5b 52 4f  y change the [RO
31c00 57 49 44 20 7c 20 52 4f 57 49 44 73 5d 20 6f 66  WID | ROWIDs] of
31c10 20 65 6e 74 72 69 65 73 20 69 6e 20 61 6e 79 0a   entries in any.
31c20 74 61 62 6c 65 73 20 74 68 61 74 20 64 6f 20 6e  tables that do n
31c30 6f 74 20 68 61 76 65 20 61 6e 20 65 78 70 6c 69  ot have an expli
31c40 63 69 74 20 5b 49 4e 54 45 47 45 52 20 50 52 49  cit [INTEGER PRI
31c50 4d 41 52 59 20 4b 45 59 5d 2e 0a 3c 2f 70 3e 0a  MARY KEY]..</p>.
31c60 0a 3c 70 3e 5e 41 20 56 41 43 55 55 4d 20 77 69  .<p>^A VACUUM wi
31c70 6c 6c 20 66 61 69 6c 20 69 66 20 74 68 65 72 65  ll fail if there
31c80 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 72 61 6e   is an open tran
31c90 73 61 63 74 69 6f 6e 2c 20 6f 72 20 69 66 20 74  saction, or if t
31ca0 68 65 72 65 20 61 72 65 20 6f 6e 65 20 6f 72 0a  here are one or.
31cb0 6d 6f 72 65 20 61 63 74 69 76 65 20 53 51 4c 20  more active SQL 
31cc0 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 20  statements when 
31cd0 69 74 20 69 73 20 72 75 6e 2e 0a 0a 3c 70 3e 5e  it is run...<p>^
31ce0 28 41 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20  (An alternative 
31cf0 74 6f 20 75 73 69 6e 67 20 74 68 65 20 56 41 43  to using the VAC
31d00 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 74 6f 0a 72  UUM command to.r
31d10 65 63 6c 61 69 6d 20 73 70 61 63 65 20 61 66 74  eclaim space aft
31d20 65 72 20 64 61 74 61 20 68 61 73 20 62 65 65 6e  er data has been
31d30 20 64 65 6c 65 74 65 64 20 69 73 20 61 75 74 6f   deleted is auto
31d40 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2c 20 65 6e  -vacuum mode, en
31d50 61 62 6c 65 64 20 75 73 69 6e 67 0a 74 68 65 20  abled using.the 
31d60 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72  [auto_vacuum] pr
31d70 61 67 6d 61 2e 29 5e 20 5e 57 68 65 6e 20 5b 61  agma.)^ ^When [a
31d80 75 74 6f 5f 76 61 63 75 75 6d 5d 20 69 73 20 65  uto_vacuum] is e
31d90 6e 61 62 6c 65 64 20 66 6f 72 20 61 20 64 61 74  nabled for a dat
31da0 61 62 61 73 65 0a 66 72 65 65 20 70 61 67 65 73  abase.free pages
31db0 20 6d 61 79 20 62 65 20 72 65 63 6c 61 69 6d 65   may be reclaime
31dc0 64 20 61 66 74 65 72 20 64 65 6c 65 74 69 6e 67  d after deleting
31dd0 20 64 61 74 61 2c 20 63 61 75 73 69 6e 67 20 74   data, causing t
31de0 68 65 20 66 69 6c 65 20 74 6f 20 73 68 72 69 6e  he file to shrin
31df0 6b 2c 0a 77 69 74 68 6f 75 74 20 72 65 62 75 69  k,.without rebui
31e00 6c 64 69 6e 67 20 74 68 65 20 65 6e 74 69 72 65  lding the entire
31e10 20 64 61 74 61 62 61 73 65 20 75 73 69 6e 67 20   database using 
31e20 56 41 43 55 55 4d 2e 20 20 5e 48 6f 77 65 76 65  VACUUM.  ^Howeve
31e30 72 2c 20 75 73 69 6e 67 0a 5b 61 75 74 6f 5f 76  r, using.[auto_v
31e40 61 63 75 75 6d 5d 20 63 61 6e 20 6c 65 61 64 20  acuum] can lead 
31e50 74 6f 20 65 78 74 72 61 20 64 61 74 61 62 61 73  to extra databas
31e60 65 20 66 69 6c 65 20 66 72 61 67 6d 65 6e 74 61  e file fragmenta
31e70 74 69 6f 6e 2e 20 20 5e 41 6e 64 20 5b 61 75 74  tion.  ^And [aut
31e80 6f 5f 76 61 63 75 75 6d 5d 0a 64 6f 65 73 20 6e  o_vacuum].does n
31e90 6f 74 20 63 6f 6d 70 61 63 74 20 70 61 72 74 69  ot compact parti
31ea0 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61 67 65  ally filled page
31eb0 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  s of the databas
31ec0 65 20 61 73 20 56 41 43 55 55 4d 20 64 6f 65 73  e as VACUUM does
31ed0 2e 0a 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a  ...</p>...<tcl>.
31ee0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31ef0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31f00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31f10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31f20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
31f30 65 63 74 69 6f 6e 20 7b 49 4e 44 45 58 45 44 20  ection {INDEXED 
31f40 42 59 7d 20 69 6e 64 65 78 65 64 62 79 20 7b 7b  BY} indexedby {{
31f50 49 4e 44 45 58 45 44 20 42 59 7d 20 7b 4e 4f 54  INDEXED BY} {NOT
31f60 20 49 4e 44 45 58 45 44 7d 7d 0a 0a 3c 2f 74 63   INDEXED}}..</tc
31f70 6c 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58  l>.<p>^The INDEX
31f80 45 44 20 42 59 20 70 68 72 61 73 65 20 66 6f 72  ED BY phrase for
31f90 63 65 73 20 74 68 65 20 5b 53 51 4c 69 74 65 20  ces the [SQLite 
31fa0 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 5d 20 74  query planner] t
31fb0 6f 20 75 73 65 20 61 0a 70 61 72 74 69 63 75 6c  o use a.particul
31fc0 61 72 20 6e 61 6d 65 64 20 69 6e 64 65 78 20 6f  ar named index o
31fd0 6e 20 61 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 53  n a [DELETE], [S
31fe0 45 4c 45 43 54 5d 2c 20 6f 72 20 5b 55 50 44 41  ELECT], or [UPDA
31ff0 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a 54  TE] statement..T
32000 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70 68  he INDEXED BY ph
32010 72 61 73 65 20 69 73 20 61 6e 20 53 51 4c 69 74  rase is an SQLit
32020 65 20 65 78 74 65 6e 73 69 6f 6e 20 61 6e 64 0a  e extension and.
32030 69 73 20 6e 6f 74 20 70 6f 72 74 61 62 6c 65 20  is not portable 
32040 74 6f 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74  to other SQL dat
32050 61 62 61 73 65 20 65 6e 67 69 6e 65 73 2e 3c 2f  abase engines.</
32060 70 3e 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73  p>..<tcl>.Recurs
32070 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
32080 20 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65   qualified-table
32090 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -name.</tcl>..<p
320a0 3e 5e 54 68 65 20 22 49 4e 44 45 58 45 44 20 42  >^The "INDEXED B
320b0 59 20 3c 79 79 74 65 72 6d 3e 69 6e 64 65 78 2d  Y <yyterm>index-
320c0 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 22 20 70  name</yyterm>" p
320d0 68 72 61 73 65 20 73 70 65 63 69 66 69 65 73 20  hrase specifies 
320e0 0a 74 68 61 74 20 74 68 65 20 6e 61 6d 65 64 20  .that the named 
320f0 69 6e 64 65 78 0a 6d 75 73 74 20 62 65 20 75 73  index.must be us
32100 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c  ed in order to l
32110 6f 6f 6b 20 75 70 20 76 61 6c 75 65 73 20 6f 6e  ook up values on
32120 20 74 68 65 20 70 72 65 63 65 64 69 6e 67 20 74   the preceding t
32130 61 62 6c 65 2e 0a 5e 49 66 20 3c 79 79 74 65 72  able..^If <yyter
32140 6d 3e 69 6e 64 65 78 2d 6e 61 6d 65 3c 2f 79 79  m>index-name</yy
32150 74 65 72 6d 3e 20 64 6f 65 73 20 6e 6f 74 20 65  term> does not e
32160 78 69 73 74 20 6f 72 20 63 61 6e 6e 6f 74 20 62  xist or cannot b
32170 65 20 75 73 65 64 20 0a 66 6f 72 20 74 68 65 20  e used .for the 
32180 71 75 65 72 79 2c 20 74 68 65 6e 20 74 68 65 20  query, then the 
32190 70 72 65 70 61 72 61 74 69 6f 6e 20 6f 66 20 74  preparation of t
321a0 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
321b0 20 66 61 69 6c 73 2e 0a 5e 28 54 68 65 20 22 4e   fails..^(The "N
321c0 4f 54 20 49 4e 44 45 58 45 44 22 20 63 6c 61 75  OT INDEXED" clau
321d0 73 65 20 73 70 65 63 69 66 69 65 73 20 74 68 61  se specifies tha
321e0 74 20 6e 6f 20 69 6e 64 65 78 20 73 68 61 6c 6c  t no index shall
321f0 20 62 65 20 75 73 65 64 20 77 68 65 6e 0a 61 63   be used when.ac
32200 63 65 73 73 69 6e 67 20 74 68 65 20 70 72 65 63  cessing the prec
32210 65 64 69 6e 67 20 74 61 62 6c 65 2c 20 69 6e 63  eding table, inc
32220 6c 75 64 69 6e 67 20 69 6d 70 6c 69 65 64 20 69  luding implied i
32230 6e 64 69 63 65 73 20 63 72 65 61 74 65 20 62 79  ndices create by
32240 0a 55 4e 49 51 55 45 20 61 6e 64 20 50 52 49 4d  .UNIQUE and PRIM
32250 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69  ARY KEY constrai
32260 6e 74 73 2e 20 20 48 6f 77 65 76 65 72 2c 20 74  nts.  However, t
32270 68 65 20 5b 72 6f 77 69 64 5d 0a 63 61 6e 20 73  he [rowid].can s
32280 74 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20  till be used to 
32290 6c 6f 6f 6b 20 75 70 20 65 6e 74 72 69 65 73 20  look up entries 
322a0 65 76 65 6e 20 77 68 65 6e 20 22 4e 4f 54 20 49  even when "NOT I
322b0 4e 44 45 58 45 44 22 20 69 73 20 73 70 65 63 69  NDEXED" is speci
322c0 66 69 65 64 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e  fied.)^</p>..<p>
322d0 53 6f 6d 65 20 53 51 4c 20 64 61 74 61 62 61 73  Some SQL databas
322e0 65 20 65 6e 67 69 6e 65 73 20 70 72 6f 76 69 64  e engines provid
322f0 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 22  e non-standard "
32300 68 69 6e 74 22 20 6d 65 63 68 61 6e 69 73 6d 73  hint" mechanisms
32310 20 77 68 69 63 68 0a 63 61 6e 20 62 65 20 75 73   which.can be us
32320 65 64 20 74 6f 20 67 69 76 65 20 74 68 65 20 71  ed to give the q
32330 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 63  uery optimizer c
32340 6c 75 65 73 20 61 62 6f 75 74 20 77 68 61 74 20  lues about what 
32350 69 6e 64 69 63 65 73 20 69 74 20 73 68 6f 75 6c  indices it shoul
32360 64 0a 75 73 65 20 66 6f 72 20 61 20 70 61 72 74  d.use for a part
32370 69 63 75 6c 61 72 20 73 74 61 74 65 6d 65 6e 74  icular statement
32380 2e 20 20 54 68 65 20 49 4e 44 45 58 20 42 59 20  .  The INDEX BY 
32390 63 6c 61 75 73 65 20 6f 66 20 53 51 4c 69 74 65  clause of SQLite
323a0 20 69 73 20 0a 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d   is .<em>not</em
323b0 3e 20 61 20 68 69 6e 74 69 6e 67 20 6d 65 63 68  > a hinting mech
323c0 61 6e 69 73 6d 20 61 6e 64 20 69 74 20 73 68 6f  anism and it sho
323d0 75 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20  uld not be used 
323e0 61 73 20 73 75 63 68 2e 0a 5e 54 68 65 20 49 4e  as such..^The IN
323f0 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20  DEXED BY clause 
32400 64 6f 65 73 20 6e 6f 74 20 67 69 76 65 20 74 68  does not give th
32410 65 20 6f 70 74 69 6d 69 7a 65 72 20 68 69 6e 74  e optimizer hint
32420 73 20 61 62 6f 75 74 20 77 68 69 63 68 20 69 6e  s about which in
32430 64 65 78 0a 74 6f 20 75 73 65 3b 20 69 74 20 67  dex.to use; it g
32440 69 76 65 73 20 74 68 65 20 6f 70 74 69 6d 69 7a  ives the optimiz
32450 65 72 20 61 20 72 65 71 75 69 72 65 6d 65 6e 74  er a requirement
32460 20 6f 66 20 77 68 69 63 68 20 69 6e 64 65 78 20   of which index 
32470 74 6f 20 75 73 65 2e 0a 5e 49 66 20 74 68 65 20  to use..^If the 
32480 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20  query optimizer 
32490 69 73 20 75 6e 61 62 6c 65 20 74 6f 20 75 73 65  is unable to use
324a0 20 74 68 65 20 69 6e 64 65 78 20 73 70 65 63 69   the index speci
324b0 66 69 65 64 20 62 79 20 74 68 65 0a 49 4e 44 45  fied by the.INDE
324c0 58 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65  X BY clause, the
324d0 6e 20 74 68 65 20 71 75 65 72 79 20 77 69 6c 6c  n the query will
324e0 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72   fail with an er
324f0 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ror.</p>..<p>The
32500 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75   INDEXED BY clau
32510 73 65 20 69 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65  se is <em>not</e
32520 6d 3e 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20  m> intended for 
32530 75 73 65 20 69 6e 20 74 75 6e 69 6e 67 0a 74 68  use in tuning.th
32540 65 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 6f 66  e performance of
32550 20 61 20 71 75 65 72 79 2e 20 20 54 68 65 20 69   a query.  The i
32560 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 49 4e 44  ntent of the IND
32570 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 69  EXED BY clause i
32580 73 0a 74 6f 20 72 61 69 73 65 20 61 20 72 75 6e  s.to raise a run
32590 2d 74 69 6d 65 20 65 72 72 6f 72 20 69 66 20 61  -time error if a
325a0 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 2c 20   schema change, 
325b0 73 75 63 68 20 61 73 20 64 72 6f 70 70 69 6e 67  such as dropping
325c0 20 6f 72 0a 63 72 65 61 74 69 6e 67 20 61 6e 20   or.creating an 
325d0 69 6e 64 65 78 2c 20 63 61 75 73 65 73 20 74 68  index, causes th
325e0 65 20 71 75 65 72 79 20 70 6c 61 6e 20 66 6f 72  e query plan for
325f0 20 61 20 74 69 6d 65 2d 73 65 6e 73 69 74 69 76   a time-sensitiv
32600 65 20 71 75 65 72 79 0a 74 6f 20 63 68 61 6e 67  e query.to chang
32610 65 2e 20 20 54 68 65 20 49 4e 44 45 58 45 44 20  e.  The INDEXED 
32620 42 59 20 63 6c 61 75 73 65 20 69 73 20 64 65 73  BY clause is des
32630 69 67 6e 65 64 20 74 6f 20 68 65 6c 70 20 64 65  igned to help de
32640 74 65 63 74 0a 75 6e 64 65 73 69 72 61 62 6c 65  tect.undesirable
32650 20 71 75 65 72 79 20 70 6c 61 6e 20 63 68 61 6e   query plan chan
32660 67 65 73 20 64 75 72 69 6e 67 20 72 65 67 72 65  ges during regre
32670 73 73 69 6f 6e 20 74 65 73 74 69 6e 67 2e 0a 41  ssion testing..A
32680 70 70 6c 69 63 61 74 69 6f 6e 20 0a 64 65 76 65  pplication .deve
32690 6c 6f 70 65 72 73 20 61 72 65 20 61 64 6d 6f 6e  lopers are admon
326a0 69 73 68 65 64 20 74 6f 20 6f 6d 69 74 20 61 6c  ished to omit al
326b0 6c 20 75 73 65 20 6f 66 20 49 4e 44 45 58 45 44  l use of INDEXED
326c0 20 42 59 20 64 75 72 69 6e 67 0a 61 70 70 6c 69   BY during.appli
326d0 63 61 74 69 6f 6e 20 64 65 73 69 67 6e 2c 20 69  cation design, i
326e0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74  mplementation, t
326f0 65 73 74 69 6e 67 2c 20 61 6e 64 20 74 75 6e 69  esting, and tuni
32700 6e 67 2e 20 20 49 66 0a 49 4e 44 45 58 45 44 20  ng.  If.INDEXED 
32710 42 59 20 69 73 20 74 6f 20 62 65 20 75 73 65 64  BY is to be used
32720 20 61 74 20 61 6c 6c 2c 20 69 74 20 73 68 6f 75   at all, it shou
32730 6c 64 20 62 65 20 69 6e 73 65 72 74 65 64 20 61  ld be inserted a
32740 74 20 74 68 65 20 76 65 72 79 0a 65 6e 64 20 6f  t the very.end o
32750 66 20 74 68 65 20 64 65 76 65 6c 6f 70 6d 65 6e  f the developmen
32760 74 20 70 72 6f 63 65 73 73 20 77 68 65 6e 20 22  t process when "
32770 6c 6f 63 6b 69 6e 67 20 64 6f 77 6e 22 20 61 20  locking down" a 
32780 64 65 73 69 67 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33  design.</p>..<h3
32790 3e 53 65 65 20 41 6c 73 6f 3a 3c 2f 68 33 3e 0a  >See Also:</h3>.
327a0 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 54 68 65  .<ol>.<li><p>The
327b0 20 5b 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20   [query planner 
327c0 63 68 65 63 6b 6c 69 73 74 5d 20 64 65 73 63 72  checklist] descr
327d0 69 62 65 73 20 73 74 65 70 73 20 74 68 61 74 20  ibes steps that 
327e0 61 70 70 6c 69 63 61 74 69 6f 6e 0a 64 65 76 65  application.deve
327f0 6c 6f 70 65 72 73 20 73 68 6f 75 6c 64 20 66 6f  lopers should fo
32800 6c 6c 6f 77 69 6e 67 20 74 6f 20 68 65 6c 70 20  llowing to help 
32810 72 65 73 6f 6c 76 65 20 71 75 65 72 79 20 70 6c  resolve query pl
32820 61 6e 6e 65 72 20 70 72 6f 62 6c 65 6d 73 2e 0a  anner problems..
32830 4e 6f 74 69 63 65 20 74 68 65 20 74 68 61 74 20  Notice the that 
32840 74 68 65 20 75 73 65 20 6f 66 20 49 4e 44 45 58  the use of INDEX
32850 45 44 20 42 59 20 69 73 20 61 20 6c 61 73 74 20  ED BY is a last 
32860 72 65 73 6f 72 74 2c 20 74 6f 20 62 65 20 75 73  resort, to be us
32870 65 64 20 6f 6e 6c 79 0a 77 68 65 6e 20 61 6c 6c  ed only.when all
32880 20 6f 74 68 65 72 20 6d 65 61 73 75 72 65 73 20   other measures 
32890 66 61 69 6c 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c  fail.</p>..<li><
328a0 70 3e 5b 75 70 6c 75 73 63 6f 6e 74 72 6f 6c 7c  p>[upluscontrol|
328b0 54 68 65 20 75 6e 61 72 79 20 22 2b 22 20 6f 70  The unary "+" op
328c0 65 72 61 74 6f 72 5d 0a 63 61 6e 20 62 65 20 75  erator].can be u
328d0 73 65 64 20 74 6f 20 64 69 73 71 75 61 6c 69 66  sed to disqualif
328e0 79 20 74 65 72 6d 73 20 69 6e 20 74 68 65 20 57  y terms in the W
328f0 48 45 52 45 20 63 6c 61 75 73 65 20 66 72 6f 6d  HERE clause from
32900 20 75 73 65 20 62 79 20 69 6e 64 69 63 65 73 2e   use by indices.
32910 0a 43 61 72 65 66 75 6c 20 75 73 65 20 6f 66 20  .Careful use of 
32920 75 6e 61 72 79 20 2b 20 63 61 6e 20 73 6f 6d 65  unary + can some
32930 74 69 6d 65 73 20 68 65 6c 70 20 70 72 65 76 65  times help preve
32940 6e 74 20 74 68 65 20 71 75 65 72 79 20 70 6c 61  nt the query pla
32950 6e 6e 65 72 20 66 72 6f 6d 0a 63 68 6f 6f 73 69  nner from.choosi
32960 6e 67 20 61 20 70 6f 6f 72 20 69 6e 64 65 78 20  ng a poor index 
32970 77 69 74 68 6f 75 74 20 72 65 73 74 72 69 63 74  without restrict
32980 69 6e 67 20 69 74 20 74 6f 20 75 73 69 6e 67 20  ing it to using 
32990 6f 6e 65 20 73 70 65 63 69 66 69 63 20 69 6e 64  one specific ind
329a0 65 78 2e 0a 43 61 72 65 66 75 6c 20 70 6c 61 63  ex..Careful plac
329b0 65 6d 65 6e 74 20 6f 66 20 75 6e 61 72 79 20 2b  ement of unary +
329c0 20 6f 70 65 72 61 74 6f 72 73 20 69 73 20 61 20   operators is a 
329d0 62 65 74 74 65 72 20 6d 65 74 68 6f 64 20 66 6f  better method fo
329e0 72 20 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20 0a 77  r controlling .w
329f0 68 69 63 68 20 69 6e 64 69 63 65 73 20 61 72 65  hich indices are
32a00 20 75 73 65 64 20 62 79 20 61 20 71 75 65 72 79   used by a query
32a10 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68  .</p>..<li><p>Th
32a20 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f  e [sqlite3_stmt_
32a30 73 74 61 74 75 73 28 29 5d 20 43 2f 43 2b 2b 20  status()] C/C++ 
32a40 69 6e 74 65 72 66 61 63 65 20 74 6f 67 65 74 68  interface togeth
32a50 65 72 20 77 69 74 68 20 74 68 65 0a 5b 53 51 4c  er with the.[SQL
32a60 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 46  ITE_STMTSTATUS_F
32a70 55 4c 4c 53 43 41 4e 5f 53 54 45 50 5d 20 61 6e  ULLSCAN_STEP] an
32a80 64 20 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  d [SQLITE_STMTST
32a90 41 54 55 53 5f 53 4f 52 54 5d 20 76 65 72 62 73  ATUS_SORT] verbs
32aa0 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20  .can be used to 
32ab0 64 65 74 65 63 74 20 61 74 20 72 75 6e 2d 74 69  detect at run-ti
32ac0 6d 65 20 77 68 65 6e 20 61 6e 20 53 51 4c 20 73  me when an SQL s
32ad0 74 61 74 65 6d 65 6e 74 20 69 73 20 6e 6f 74 0a  tatement is not.
32ae0 6d 61 6b 69 6e 67 20 65 66 66 65 63 74 69 76 65  making effective
32af0 20 75 73 65 20 6f 66 20 69 6e 64 69 63 65 73 2e   use of indices.
32b00 20 20 4d 61 6e 79 20 61 70 70 6c 69 63 61 74 69    Many applicati
32b10 6f 6e 73 20 6d 61 79 20 70 72 65 66 65 72 20 74  ons may prefer t
32b20 6f 0a 75 73 65 20 74 68 65 20 5b 73 71 6c 69 74  o.use the [sqlit
32b30 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 29  e3_stmt_status()
32b40 5d 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 64  ] interface to d
32b50 65 74 65 63 74 20 69 6e 64 65 78 20 6d 69 73 75  etect index misu
32b60 73 65 0a 72 61 74 68 65 72 20 74 68 61 6e 20 74  se.rather than t
32b70 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70 68  he INDEXED BY ph
32b80 72 61 73 65 20 64 65 73 63 72 69 62 65 64 20 68  rase described h
32b90 65 72 65 2e 3c 2f 70 3e 0a 3c 2f 6f 6c 3e 0a 0a  ere.</p>.</ol>..
32ba0 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
32bb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32bc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32bd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32be0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32bf0 23 23 23 0a 23 20 41 20 6c 69 73 74 20 6f 66 20  ###.# A list of 
32c00 6b 65 79 77 6f 72 64 73 2e 20 20 41 20 61 73 74  keywords.  A ast
32c10 65 72 69 73 6b 20 6f 63 63 75 72 73 20 61 66 74  erisk occurs aft
32c20 65 72 20 74 68 65 20 6b 65 79 77 6f 72 64 20 69  er the keyword i
32c30 66 20 69 74 20 69 73 20 6f 6e 0a 23 20 74 68 65  f it is on.# the
32c40 20 66 61 6c 6c 62 61 63 6b 20 6c 69 73 74 2e 0a   fallback list..
32c50 23 0a 73 65 74 20 6b 65 79 77 6f 72 64 5f 6c 69  #.set keyword_li
32c60 73 74 20 5b 6c 73 6f 72 74 20 7b 0a 20 20 20 41  st [lsort {.   A
32c70 42 4f 52 54 0a 20 20 20 41 43 54 49 4f 4e 0a 20  BORT.   ACTION. 
32c80 20 20 41 44 44 0a 20 20 20 41 46 54 45 52 0a 20    ADD.   AFTER. 
32c90 20 20 41 4c 4c 0a 20 20 20 41 4c 54 45 52 0a 20    ALL.   ALTER. 
32ca0 20 20 41 4e 41 4c 59 5a 45 0a 20 20 20 41 4e 44    ANALYZE.   AND
32cb0 0a 20 20 20 41 53 0a 20 20 20 41 53 43 0a 20 20  .   AS.   ASC.  
32cc0 20 41 54 54 41 43 48 0a 20 20 20 41 55 54 4f 49   ATTACH.   AUTOI
32cd0 4e 43 52 45 4d 45 4e 54 0a 20 20 20 42 45 46 4f  NCREMENT.   BEFO
32ce0 52 45 0a 20 20 20 42 45 47 49 4e 0a 20 20 20 42  RE.   BEGIN.   B
32cf0 45 54 57 45 45 4e 0a 20 20 20 42 59 0a 20 20 20  ETWEEN.   BY.   
32d00 43 41 53 43 41 44 45 0a 20 20 20 43 41 53 45 0a  CASCADE.   CASE.
32d10 20 20 20 43 41 53 54 0a 20 20 20 43 48 45 43 4b     CAST.   CHECK
32d20 0a 20 20 20 43 4f 4c 4c 41 54 45 0a 20 20 20 43  .   COLLATE.   C
32d30 4f 4c 55 4d 4e 0a 20 20 20 43 4f 4d 4d 49 54 0a  OLUMN.   COMMIT.
32d40 20 20 20 43 4f 4e 46 4c 49 43 54 0a 20 20 20 43     CONFLICT.   C
32d50 4f 4e 53 54 52 41 49 4e 54 0a 20 20 20 43 52 45  ONSTRAINT.   CRE
32d60 41 54 45 0a 20 20 20 43 52 4f 53 53 0a 20 20 20  ATE.   CROSS.   
32d70 43 55 52 52 45 4e 54 5f 44 41 54 45 0a 20 20 20  CURRENT_DATE.   
32d80 43 55 52 52 45 4e 54 5f 54 49 4d 45 0a 20 20 20  CURRENT_TIME.   
32d90 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
32da0 50 0a 20 20 20 44 41 54 41 42 41 53 45 0a 20 20  P.   DATABASE.  
32db0 20 44 45 46 41 55 4c 54 0a 20 20 20 44 45 46 45   DEFAULT.   DEFE
32dc0 52 52 45 44 0a 20 20 20 44 45 46 45 52 52 41 42  RRED.   DEFERRAB
32dd0 4c 45 0a 20 20 20 44 45 4c 45 54 45 0a 20 20 20  LE.   DELETE.   
32de0 44 45 53 43 0a 20 20 20 44 45 54 41 43 48 0a 20  DESC.   DETACH. 
32df0 20 20 44 49 53 54 49 4e 43 54 0a 20 20 20 44 52    DISTINCT.   DR
32e00 4f 50 0a 20 20 20 45 4e 44 0a 20 20 20 45 41 43  OP.   END.   EAC
32e10 48 0a 20 20 20 45 4c 53 45 0a 20 20 20 45 53 43  H.   ELSE.   ESC
32e20 41 50 45 0a 20 20 20 45 58 43 45 50 54 0a 20 20  APE.   EXCEPT.  
32e30 20 45 58 43 4c 55 53 49 56 45 0a 20 20 20 45 58   EXCLUSIVE.   EX
32e40 49 53 54 53 0a 20 20 20 45 58 50 4c 41 49 4e 0a  ISTS.   EXPLAIN.
32e50 20 20 20 46 41 49 4c 0a 20 20 20 46 4f 52 0a 20     FAIL.   FOR. 
32e60 20 20 46 4f 52 45 49 47 4e 0a 20 20 20 46 52 4f    FOREIGN.   FRO
32e70 4d 0a 20 20 20 46 55 4c 4c 0a 20 20 20 47 4c 4f  M.   FULL.   GLO
32e80 42 0a 20 20 20 47 52 4f 55 50 0a 20 20 20 48 41  B.   GROUP.   HA
32e90 56 49 4e 47 0a 20 20 20 49 46 0a 20 20 20 49 47  VING.   IF.   IG
32ea0 4e 4f 52 45 0a 20 20 20 49 4d 4d 45 44 49 41 54  NORE.   IMMEDIAT
32eb0 45 0a 20 20 20 49 4e 0a 20 20 20 49 4e 44 45 58  E.   IN.   INDEX
32ec0 0a 20 20 20 49 4e 44 45 58 45 44 0a 20 20 20 49  .   INDEXED.   I
32ed0 4e 49 54 49 41 4c 4c 59 0a 20 20 20 49 4e 4e 45  NITIALLY.   INNE
32ee0 52 0a 20 20 20 49 4e 53 45 52 54 0a 20 20 20 49  R.   INSERT.   I
32ef0 4e 53 54 45 41 44 0a 20 20 20 49 4e 54 45 52 53  NSTEAD.   INTERS
32f00 45 43 54 0a 20 20 20 49 4e 54 4f 0a 20 20 20 49  ECT.   INTO.   I
32f10 53 0a 20 20 20 49 53 4e 55 4c 4c 0a 20 20 20 4a  S.   ISNULL.   J
32f20 4f 49 4e 0a 20 20 20 4b 45 59 0a 20 20 20 4c 45  OIN.   KEY.   LE
32f30 46 54 0a 20 20 20 4c 49 4b 45 0a 20 20 20 4c 49  FT.   LIKE.   LI
32f40 4d 49 54 0a 20 20 20 4d 41 54 43 48 0a 20 20 20  MIT.   MATCH.   
32f50 4e 41 54 55 52 41 4c 0a 20 20 20 4e 4f 0a 20 20  NATURAL.   NO.  
32f60 20 4e 4f 54 0a 20 20 20 4e 4f 54 4e 55 4c 4c 0a   NOT.   NOTNULL.
32f70 20 20 20 4e 55 4c 4c 0a 20 20 20 4f 46 0a 20 20     NULL.   OF.  
32f80 20 4f 46 46 53 45 54 0a 20 20 20 4f 4e 0a 20 20   OFFSET.   ON.  
32f90 20 4f 52 0a 20 20 20 4f 52 44 45 52 0a 20 20 20   OR.   ORDER.   
32fa0 4f 55 54 45 52 0a 20 20 20 50 4c 41 4e 0a 20 20  OUTER.   PLAN.  
32fb0 20 50 52 41 47 4d 41 0a 20 20 20 50 52 49 4d 41   PRAGMA.   PRIMA
32fc0 52 59 0a 20 20 20 51 55 45 52 59 0a 20 20 20 52  RY.   QUERY.   R
32fd0 41 49 53 45 0a 20 20 20 52 45 43 55 52 53 49 56  AISE.   RECURSIV
32fe0 45 0a 20 20 20 52 45 46 45 52 45 4e 43 45 53 0a  E.   REFERENCES.
32ff0 20 20 20 52 45 47 45 58 50 0a 20 20 20 52 45 49     REGEXP.   REI
33000 4e 44 45 58 0a 20 20 20 52 45 4c 45 41 53 45 0a  NDEX.   RELEASE.
33010 20 20 20 52 45 4e 41 4d 45 0a 20 20 20 52 45 50     RENAME.   REP
33020 4c 41 43 45 0a 20 20 20 52 45 53 54 52 49 43 54  LACE.   RESTRICT
33030 0a 20 20 20 52 49 47 48 54 0a 20 20 20 52 4f 4c  .   RIGHT.   ROL
33040 4c 42 41 43 4b 0a 20 20 20 52 4f 57 0a 20 20 20  LBACK.   ROW.   
33050 53 41 56 45 50 4f 49 4e 54 0a 20 20 20 53 45 4c  SAVEPOINT.   SEL
33060 45 43 54 0a 20 20 20 53 45 54 0a 20 20 20 54 41  ECT.   SET.   TA
33070 42 4c 45 0a 20 20 20 54 45 4d 50 0a 20 20 20 54  BLE.   TEMP.   T
33080 45 4d 50 4f 52 41 52 59 0a 20 20 20 54 48 45 4e  EMPORARY.   THEN
33090 0a 20 20 20 54 4f 0a 20 20 20 54 52 41 4e 53 41  .   TO.   TRANSA
330a0 43 54 49 4f 4e 0a 20 20 20 54 52 49 47 47 45 52  CTION.   TRIGGER
330b0 0a 20 20 20 55 4e 49 4f 4e 0a 20 20 20 55 4e 49  .   UNION.   UNI
330c0 51 55 45 0a 20 20 20 55 50 44 41 54 45 0a 20 20  QUE.   UPDATE.  
330d0 20 55 53 49 4e 47 0a 20 20 20 56 41 43 55 55 4d   USING.   VACUUM
330e0 0a 20 20 20 56 41 4c 55 45 53 0a 20 20 20 56 49  .   VALUES.   VI
330f0 45 57 0a 20 20 20 56 49 52 54 55 41 4c 0a 20 20  EW.   VIRTUAL.  
33100 20 57 49 54 48 0a 20 20 20 57 49 54 48 4f 55 54   WITH.   WITHOUT
33110 0a 20 20 20 57 48 45 4e 0a 20 20 20 57 48 45 52  .   WHEN.   WHER
33120 45 0a 7d 5d 0a 0a 68 64 5f 70 75 74 73 20 7b 3c  E.}]..hd_puts {<
33130 44 49 56 20 63 6c 61 73 73 3d 22 70 64 66 5f 73  DIV class="pdf_s
33140 65 63 74 69 6f 6e 22 3e 7d 0a 53 65 63 74 69 6f  ection">}.Sectio
33150 6e 20 7b 53 51 4c 69 74 65 20 4b 65 79 77 6f 72  n {SQLite Keywor
33160 64 73 7d 20 6b 65 79 77 6f 72 64 73 20 7b 7b 2a  ds} keywords {{*
33170 53 51 4c 20 6b 65 79 77 6f 72 64 7d 20 7b 53 51  SQL keyword} {SQ
33180 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a 68 64 5f  L keywords}}.hd_
33190 70 75 74 73 20 7b 3c 2f 44 49 56 3e 7d 0a 3c 2f  puts {</DIV>}.</
331a0 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 53 51 4c  tcl>..<p>The SQL
331b0 20 73 74 61 6e 64 61 72 64 20 73 70 65 63 69 66   standard specif
331c0 69 65 73 20 61 20 68 75 67 65 20 6e 75 6d 62 65  ies a huge numbe
331d0 72 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 77 68  r of keywords wh
331e0 69 63 68 20 6d 61 79 20 6e 6f 74 0a 62 65 20 75  ich may not.be u
331f0 73 65 64 20 61 73 20 74 68 65 20 6e 61 6d 65 73  sed as the names
33200 20 6f 66 20 74 61 62 6c 65 73 2c 20 69 6e 64 69   of tables, indi
33210 63 65 73 2c 20 63 6f 6c 75 6d 6e 73 2c 20 64 61  ces, columns, da
33220 74 61 62 61 73 65 73 2c 20 75 73 65 72 2d 64 65  tabases, user-de
33230 66 69 6e 65 64 0a 66 75 6e 63 74 69 6f 6e 73 2c  fined.functions,
33240 20 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20 76 69 72   collations, vir
33250 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c  tual table modul
33260 65 73 2c 20 6f 72 20 61 6e 79 20 6f 74 68 65 72  es, or any other
33270 20 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2e 0a 54   named object..T
33280 68 65 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f  he list of keywo
33290 72 64 73 20 69 73 20 73 6f 20 6c 6f 6e 67 20 74  rds is so long t
332a0 68 61 74 20 66 65 77 20 70 65 6f 70 6c 65 20 63  hat few people c
332b0 61 6e 20 72 65 6d 65 6d 62 65 72 20 74 68 65 6d  an remember them
332c0 20 61 6c 6c 2e 0a 46 6f 72 20 6d 6f 73 74 20 53   all..For most S
332d0 51 4c 20 63 6f 64 65 2c 20 79 6f 75 72 20 73 61  QL code, your sa
332e0 66 65 73 74 20 62 65 74 20 69 73 20 74 6f 20 6e  fest bet is to n
332f0 65 76 65 72 20 75 73 65 20 61 6e 79 20 45 6e 67  ever use any Eng
33300 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 0a 77 6f  lish language.wo
33310 72 64 20 61 73 20 74 68 65 20 6e 61 6d 65 20 6f  rd as the name o
33320 66 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64  f a user-defined
33330 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c 70   object.</p>..<p
33340 3e 49 66 20 79 6f 75 20 77 61 6e 74 20 74 6f 20  >If you want to 
33350 75 73 65 20 61 20 6b 65 79 77 6f 72 64 20 61 73  use a keyword as
33360 20 61 20 6e 61 6d 65 2c 20 79 6f 75 20 6e 65 65   a name, you nee
33370 64 20 74 6f 20 71 75 6f 74 65 20 69 74 2e 20 20  d to quote it.  
33380 54 68 65 72 65 0a 61 72 65 20 66 6f 75 72 20 77  There.are four w
33390 61 79 73 20 6f 66 20 71 75 6f 74 69 6e 67 20 6b  ays of quoting k
333a0 65 79 77 6f 72 64 73 20 69 6e 20 53 51 4c 69 74  eywords in SQLit
333b0 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62 6c 6f  e:</p>..<p>.<blo
333c0 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e  ckquote>.<table>
333d0 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
333e0 3d 22 74 6f 70 22 3e 3c 62 3e 27 6b 65 79 77 6f  ="top"><b>'keywo
333f0 72 64 27 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20  rd'</b></td><td 
33400 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e  width="20"></td>
33410 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64  ..<td>^A keyword
33420 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65   in single quote
33430 73 20 69 73 20 61 20 73 74 72 69 6e 67 20 6c 69  s is a string li
33440 74 65 72 61 6c 2e 3c 2f 74 64 3e 3c 2f 74 72 3e  teral.</td></tr>
33450 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67  ..<tr>.<td valig
33460 6e 3d 22 74 6f 70 22 3e 3c 62 3e 22 6b 65 79 77  n="top"><b>"keyw
33470 6f 72 64 22 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  ord"</b></td><td
33480 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b  ></td>..<td>^A k
33490 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65  eyword in double
334a0 2d 71 75 6f 74 65 73 20 69 73 20 61 6e 20 69 64  -quotes is an id
334b0 65 6e 74 69 66 69 65 72 2e 3c 2f 74 64 3e 3c 2f  entifier.</td></
334c0 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61  tr>..<tr>.<td va
334d0 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26 23  lign="top"><b>&#
334e0 39 31 3b 6b 65 79 77 6f 72 64 26 23 39 33 3b 3c  91;keyword&#93;<
334f0 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64  /b></td><td></td
33500 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72  >..<td>^A keywor
33510 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 73 71  d enclosed in sq
33520 75 61 72 65 20 62 72 61 63 6b 65 74 73 20 69 73  uare brackets is
33530 20 0a 20 20 20 20 20 20 20 20 61 6e 20 69 64 65   .        an ide
33540 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73 20 69  ntifier.  This i
33550 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53  s not standard S
33560 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74 69 6e  QL.  This quotin
33570 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20 20  g mechanism.    
33580 20 20 20 20 69 73 20 75 73 65 64 20 62 79 20 4d      is used by M
33590 53 20 41 63 63 65 73 73 20 61 6e 64 20 53 51 4c  S Access and SQL
335a0 20 53 65 72 76 65 72 20 61 6e 64 20 69 73 20 69   Server and is i
335b0 6e 63 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74  ncluded in SQLit
335c0 65 20 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f  e for.        co
335d0 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64  mpatibility.</td
335e0 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64  ></tr>..<tr>.<td
335f0 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
33600 3e 26 23 39 36 3b 6b 65 79 77 6f 72 64 26 23 39  >&#96;keyword&#9
33610 36 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c  6;</b></td><td><
33620 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79  /td>..<td>^A key
33630 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e  word enclosed in
33640 20 67 72 61 76 65 20 61 63 63 65 6e 74 73 20 28   grave accents (
33650 41 53 43 49 49 20 63 6f 64 65 20 39 36 29 20 69  ASCII code 96) i
33660 73 20 0a 20 20 20 20 20 20 20 20 61 6e 20 69 64  s .        an id
33670 65 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73 20  entifier.  This 
33680 69 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20  is not standard 
33690 53 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74 69  SQL.  This quoti
336a0 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20  ng mechanism.   
336b0 20 20 20 20 20 69 73 20 75 73 65 64 20 62 79 20       is used by 
336c0 4d 79 53 51 4c 20 61 6e 64 20 69 73 20 69 6e 63  MySQL and is inc
336d0 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20  luded in SQLite 
336e0 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f 6d 70  for.        comp
336f0 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c  atibility.</td><
33700 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  /tr>.</table>.</
33710 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 2f 70 3e  blockquote>.</p>
33720 0a 0a 3c 70 3e 46 6f 72 20 72 65 73 69 6c 69 65  ..<p>For resilie
33730 6e 63 65 20 77 68 65 6e 20 63 6f 6e 66 72 6f 6e  nce when confron
33740 74 65 64 20 77 69 74 68 20 68 69 73 74 6f 72 69  ted with histori
33750 63 61 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  cal SQL statemen
33760 74 73 2c 20 53 51 4c 69 74 65 0a 77 69 6c 6c 20  ts, SQLite.will 
33770 73 6f 6d 65 74 69 6d 65 73 20 62 65 6e 64 20 74  sometimes bend t
33780 68 65 20 71 75 6f 74 69 6e 67 20 72 75 6c 65 73  he quoting rules
33790 20 61 62 6f 76 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c   above:</p>..<ul
337a0 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61 20 6b  >.<li><p>^If a k
337b0 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65  eyword in single
337c0 0a 71 75 6f 74 65 73 20 28 65 78 3a 20 3c 62 3e  .quotes (ex: <b>
337d0 27 6b 65 79 27 3c 2f 62 3e 20 6f 72 20 3c 62 3e  'key'</b> or <b>
337e0 27 67 6c 6f 62 27 3c 2f 62 3e 29 20 69 73 20 75  'glob'</b>) is u
337f0 73 65 64 20 69 6e 20 61 20 63 6f 6e 74 65 78 74  sed in a context
33800 20 77 68 65 72 65 0a 61 6e 20 69 64 65 6e 74 69   where.an identi
33810 66 69 65 72 20 69 73 20 61 6c 6c 6f 77 65 64 20  fier is allowed 
33820 62 75 74 20 77 68 65 72 65 20 61 20 73 74 72 69  but where a stri
33830 6e 67 20 6c 69 74 65 72 61 6c 20 69 73 20 6e 6f  ng literal is no
33840 74 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e 0a  t allowed, then.
33850 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e 64  the token is und
33860 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20 61 6e  erstood to be an
33870 20 69 64 65 6e 74 69 66 69 65 72 20 69 6e 73 74   identifier inst
33880 65 61 64 20 6f 66 20 61 20 73 74 72 69 6e 67 20  ead of a string 
33890 6c 69 74 65 72 61 6c 2e 0a 3c 2f 70 3e 3c 2f 6c  literal..</p></l
338a0 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61  i>..<li><p>^If a
338b0 20 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62   keyword in doub
338c0 6c 65 0a 71 75 6f 74 65 73 20 28 65 78 3a 20 3c  le.quotes (ex: <
338d0 62 3e 22 6b 65 79 22 3c 2f 62 3e 20 6f 72 20 3c  b>"key"</b> or <
338e0 62 3e 22 67 6c 6f 62 22 3c 2f 62 3e 29 20 69 73  b>"glob"</b>) is
338f0 20 75 73 65 64 20 69 6e 20 61 20 63 6f 6e 74 65   used in a conte
33900 78 74 20 77 68 65 72 65 0a 69 74 20 63 61 6e 6e  xt where.it cann
33910 6f 74 20 62 65 20 72 65 73 6f 6c 76 65 64 20 74  ot be resolved t
33920 6f 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  o an identifier 
33930 62 75 74 20 77 68 65 72 65 20 61 20 73 74 72 69  but where a stri
33940 6e 67 20 6c 69 74 65 72 61 6c 0a 69 73 20 61 6c  ng literal.is al
33950 6c 6f 77 65 64 2c 20 74 68 65 6e 20 74 68 65 20  lowed, then the 
33960 74 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72 73 74  token is underst
33970 6f 6f 64 20 74 6f 20 62 65 20 61 20 73 74 72 69  ood to be a stri
33980 6e 67 20 6c 69 74 65 72 61 6c 20 69 6e 73 74 65  ng literal inste
33990 61 64 0a 6f 66 20 61 6e 20 69 64 65 6e 74 69 66  ad.of an identif
339a0 69 65 72 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f  ier.</p></li>.</
339b0 75 6c 3e 0a 0a 3c 70 3e 50 72 6f 67 72 61 6d 6d  ul>..<p>Programm
339c0 65 72 73 20 61 72 65 20 63 61 75 74 69 6f 6e 65  ers are cautione
339d0 64 20 6e 6f 74 20 74 6f 20 75 73 65 20 74 68 65  d not to use the
339e0 20 74 77 6f 20 65 78 63 65 70 74 69 6f 6e 73 20   two exceptions 
339f0 64 65 73 63 72 69 62 65 64 20 69 6e 0a 74 68 65  described in.the
33a00 20 70 72 65 76 69 6f 75 73 20 62 75 6c 6c 65 74   previous bullet
33a10 73 2e 20 20 57 65 20 65 6d 70 68 61 73 69 7a 65  s.  We emphasize
33a20 20 74 68 61 74 20 74 68 65 79 20 65 78 69 73 74   that they exist
33a30 20 6f 6e 6c 79 20 73 6f 20 74 68 61 74 20 6f 6c   only so that ol
33a40 64 0a 61 6e 64 20 69 6c 6c 2d 66 6f 72 6d 65 64  d.and ill-formed
33a50 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
33a60 77 69 6c 6c 20 72 75 6e 20 63 6f 72 72 65 63 74  will run correct
33a70 6c 79 2e 20 20 46 75 74 75 72 65 20 76 65 72 73  ly.  Future vers
33a80 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 6d  ions of.SQLite m
33a90 69 67 68 74 20 72 61 69 73 65 20 65 72 72 6f 72  ight raise error
33aa0 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61 63 63  s instead of acc
33ab0 65 70 74 69 6e 67 20 74 68 65 20 6d 61 6c 66 6f  epting the malfo
33ac0 72 6d 65 64 0a 73 74 61 74 65 6d 65 6e 74 73 20  rmed.statements 
33ad0 63 6f 76 65 72 65 64 20 62 79 20 74 68 65 20 65  covered by the e
33ae0 78 63 65 70 74 69 6f 6e 73 20 61 62 6f 76 65 2e  xceptions above.
33af0 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65  </p>..<p>.SQLite
33b00 20 61 64 64 73 20 6e 65 77 20 6b 65 79 77 6f 72   adds new keywor
33b10 64 73 20 66 72 6f 6d 20 74 69 6d 65 20 74 6f 20  ds from time to 
33b20 74 69 6d 65 20 77 68 65 6e 20 69 74 20 74 61 6b  time when it tak
33b30 65 73 20 6f 6e 20 6e 65 77 20 66 65 61 74 75 72  es on new featur
33b40 65 73 2e 0a 53 6f 20 74 6f 20 70 72 65 76 65 6e  es..So to preven
33b50 74 20 79 6f 75 72 20 63 6f 64 65 20 66 72 6f 6d  t your code from
33b60 20 62 65 69 6e 67 20 62 72 6f 6b 65 6e 20 62 79   being broken by
33b70 20 66 75 74 75 72 65 20 65 6e 68 61 6e 63 65 6d   future enhancem
33b80 65 6e 74 73 2c 20 79 6f 75 20 73 68 6f 75 6c 64  ents, you should
33b90 0a 6e 6f 72 6d 61 6c 6c 79 20 71 75 6f 74 65 20  .normally quote 
33ba0 61 6e 79 20 69 64 65 6e 74 69 66 69 65 72 20 74  any identifier t
33bb0 68 61 74 20 69 73 20 61 6e 20 45 6e 67 6c 69 73  hat is an Englis
33bc0 68 20 6c 61 6e 67 75 61 67 65 20 77 6f 72 64 2c  h language word,
33bd0 20 65 76 65 6e 20 69 66 0a 79 6f 75 20 64 6f 20   even if.you do 
33be0 6e 6f 74 20 68 61 76 65 20 74 6f 2e 0a 3c 2f 70  not have to..</p
33bf0 3e 0a 0a 3c 70 3e 0a 54 68 65 20 6c 69 73 74 20  >..<p>.The list 
33c00 62 65 6c 6f 77 20 73 68 6f 77 73 20 61 6c 6c 20  below shows all 
33c10 70 6f 73 73 69 62 6c 65 20 6b 65 79 77 6f 72 64  possible keyword
33c20 73 20 75 73 65 64 20 62 79 20 61 6e 79 20 62 75  s used by any bu
33c30 69 6c 64 20 6f 66 0a 53 51 4c 69 74 65 20 72 65  ild of.SQLite re
33c40 67 61 72 64 6c 65 73 73 20 6f 66 20 5b 63 6f 6d  gardless of [com
33c50 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
33c60 73 5d 2e 20 20 0a 4d 6f 73 74 20 72 65 61 73 6f  s].  .Most reaso
33c70 6e 61 62 6c 65 20 63 6f 6e 66 69 67 75 72 61 74  nable configurat
33c80 69 6f 6e 73 20 75 73 65 20 6d 6f 73 74 20 6f 72  ions use most or
33c90 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20 6b 65   all of these ke
33ca0 79 77 6f 72 64 73 2c 0a 62 75 74 20 73 6f 6d 65  ywords,.but some
33cb0 20 6b 65 79 77 6f 72 64 73 20 6d 61 79 20 62 65   keywords may be
33cc0 20 6f 6d 69 74 74 65 64 20 77 68 65 6e 20 53 51   omitted when SQ
33cd0 4c 20 6c 61 6e 67 75 61 67 65 20 66 65 61 74 75  L language featu
33ce0 72 65 73 20 61 72 65 0a 64 69 73 61 62 6c 65 64  res are.disabled
33cf0 2e 0a 5e 28 52 65 67 61 72 64 6c 65 73 73 20 6f  ..^(Regardless o
33d00 66 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69  f the compile-ti
33d10 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  me configuration
33d20 2c 20 61 6e 79 20 69 64 65 6e 74 69 66 69 65 72  , any identifier
33d30 20 74 68 61 74 20 69 73 20 6e 6f 74 20 6f 6e 0a   that is not on.
33d40 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c 74  the following <t
33d50 63 6c 3e 68 64 5f 70 75 74 73 20 5b 6c 6c 65 6e  cl>hd_puts [llen
33d60 67 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73  gth $keyword_lis
33d70 74 5d 3c 2f 74 63 6c 3e 20 65 6c 65 6d 65 6e 74  t]</tcl> element
33d80 0a 6c 69 73 74 20 69 73 20 6e 6f 74 20 61 20 6b  .list is not a k
33d90 65 79 77 6f 72 64 20 74 6f 20 74 68 65 20 53 51  eyword to the SQ
33da0 4c 20 70 61 72 73 65 72 20 69 6e 20 53 51 4c 69  L parser in SQLi
33db0 74 65 3a 0a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c  te:.</p>..<ol>.<
33dc0 74 63 6c 3e 0a 73 65 74 20 6c 78 20 7b 7d 0a 66  tcl>.set lx {}.f
33dd0 6f 72 65 61 63 68 20 77 6f 72 64 20 5b 6c 73 6f  oreach word [lso
33de0 72 74 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74  rt $keyword_list
33df0 5d 20 7b 0a 20 20 68 64 5f 70 75 74 73 6e 6c 20  ] {.  hd_putsnl 
33e00 22 3c 6c 69 3e 24 77 6f 72 64 3c 2f 6c 69 3e 22  "<li>$word</li>"
33e10 0a 7d 0a 68 64 5f 70 75 74 73 6e 6c 20 22 3c 2f  .}.hd_putsnl "</
33e20 6f 6c 3e 29 5e 22 0a 3c 2f 74 63 6c 3e 0a        ol>)^".</tcl>.